Open Source Repository

Home /xom/xom-1.1 | Repository Home



nu/xom/Latin8Writer.java
/* Copyright 2002, 2003 Elliotte Rusty Harold
   
   This library is free software; you can redistribute it and/or modify
   it under the terms of version 2.1 of the GNU Lesser General Public 
   License as published by the Free Software Foundation.
   
   This library is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
   GNU Lesser General Public License for more details.
   
   You should have received a copy of the GNU Lesser General Public
   License along with this library; if not, write to the 
   Free Software Foundation, Inc., 59 Temple Place, Suite 330, 
   Boston, MA 02111-1307  USA
   
   You can contact Elliotte Rusty Harold by sending e-mail to
   [email protected]. Please include the word "XOM" in the
   subject line. The XOM home page is located at http://www.xom.nu/
*/

package nu.xom;

import java.io.Writer;

/**
 <p>
 *   ISO-8859-14, for Gaelic, Welsh, and other Celtic languages.
 *   Not yet supported by Sun's JDK as of 1.5 alpha. IBM's 1.4.1 
 *   JDK does support it.
 </p>
 
 @author Elliotte Rusty Harold
 @version 1.0
 *
 */
class Latin8Writer extends TextWriter {

    Latin8Writer(Writer out, String encoding) {
        super(out, encoding);
    }

    /**
     @see nu.xom.TextWriter#needsEscaping(char)
     */
    boolean needsEscaping(char c) {
        if (c <= 0xA0return false;        
        switch (c) {  // Latin-1 overlap
            case 0x00A3return false// POUND SIGN
            case 0x00A4return true;  // place holder to enable table lookup
            case 0x00A5return true;  // place holder to enable table lookup
            case 0x00A6return true;  // place holder to enable table lookup
            case 0x00A7return false// SECTION SIGN
            case 0x00A8return true;  // place holder to enable table lookup
            case 0x00A9return false// COPYRIGHT SIGN
            case 0x00AAreturn true;  // place holder to enable table lookup
            case 0x00ABreturn true;  // place holder to enable table lookup
            case 0x00ACreturn true;  // place holder to enable table lookup
            case 0x00ADreturn false// SOFT HYPHEN
            case 0x00AEreturn false// REGISTERED SIGN
            case 0x00AFreturn true;  // place holder to enable table lookup
            case 0x00B0return true;  // place holder to enable table lookup
            case 0x00B1return true;  // place holder to enable table lookup
            case 0x00B2return true;  // place holder to enable table lookup
            case 0x00B3return true;  // place holder to enable table lookup
            case 0x00B4return true;  // place holder to enable table lookup
            case 0x00B5return true;  // place holder to enable table lookup
            case 0x00B6return false// PILCROW SIGN
            case 0x00B7return true;  // place holder to enable table lookup
            case 0x00B8return true;  // place holder to enable table lookup
            case 0x00B9return true;  // place holder to enable table lookup
            case 0x00BAreturn true;  // place holder to enable table lookup
            case 0x00BBreturn true;  // place holder to enable table lookup
            case 0x00BCreturn true;  // place holder to enable table lookup
            case 0x00BDreturn true;  // place holder to enable table lookup
            case 0x00BEreturn true;  // place holder to enable table lookup
            case 0x00BFreturn true;  // place holder to enable table lookup
            case 0x00C0return false// LATIN CAPITAL LETTER A WITH GRAVE
            case 0x00C1return false// LATIN CAPITAL LETTER A WITH ACUTE
            case 0x00C2return false// LATIN CAPITAL LETTER A WITH CIRCUMFLEX
            case 0x00C3return false// LATIN CAPITAL LETTER A WITH TILDE
            case 0x00C4return false// LATIN CAPITAL LETTER A WITH DIAERESIS
            case 0x00C5return false// LATIN CAPITAL LETTER A WITH RING ABOVE
            case 0x00C6return false// LATIN CAPITAL LETTER AE
            case 0x00C7return false// LATIN CAPITAL LETTER C WITH CEDILLA
            case 0x00C8return false// LATIN CAPITAL LETTER E WITH GRAVE
            case 0x00C9return false// LATIN CAPITAL LETTER E WITH ACUTE
            case 0x00CAreturn false// LATIN CAPITAL LETTER E WITH CIRCUMFLEX
            case 0x00CBreturn false// LATIN CAPITAL LETTER E WITH DIAERESIS
            case 0x00CCreturn false// LATIN CAPITAL LETTER I WITH GRAVE
            case 0x00CDreturn false// LATIN CAPITAL LETTER I WITH ACUTE
            case 0x00CEreturn false// LATIN CAPITAL LETTER I WITH CIRCUMFLEX
            case 0x00CFreturn false// LATIN CAPITAL LETTER I WITH DIAERESIS
            case 0x00D0return true;  // place holder to enable table lookup
            case 0x00D1return false// LATIN CAPITAL LETTER N WITH TILDE
            case 0x00D2return false// LATIN CAPITAL LETTER O WITH GRAVE
            case 0x00D3return false// LATIN CAPITAL LETTER O WITH ACUTE
            case 0x00D4return false// LATIN CAPITAL LETTER O WITH CIRCUMFLEX
            case 0x00D5return false// LATIN CAPITAL LETTER O WITH TILDE
            case 0x00D6return false// LATIN CAPITAL LETTER O WITH DIAERESIS
            case 0x00D7return true;  // place holder to enable table lookup
            case 0x00D8return false// LATIN CAPITAL LETTER O WITH STROKE
            case 0x00D9return false// LATIN CAPITAL LETTER U WITH GRAVE
            case 0x00DAreturn false// LATIN CAPITAL LETTER U WITH ACUTE
            case 0x00DBreturn false// LATIN CAPITAL LETTER U WITH CIRCUMFLEX
            case 0x00DCreturn false// LATIN CAPITAL LETTER U WITH DIAERESIS
            case 0x00DDreturn false// LATIN CAPITAL LETTER Y WITH ACUTE
            case 0x00DEreturn true;  // place holder to enable table lookup
            case 0x00DFreturn false// LATIN SMALL LETTER SHARP S
            case 0x00E0return false// LATIN SMALL LETTER A WITH GRAVE
            case 0x00E1return false// LATIN SMALL LETTER A WITH ACUTE
            case 0x00E2return false// LATIN SMALL LETTER A WITH CIRCUMFLEX
            case 0x00E3return false// LATIN SMALL LETTER A WITH TILDE
            case 0x00E4return false// LATIN SMALL LETTER A WITH DIAERESIS
            case 0x00E5return false// LATIN SMALL LETTER A WITH RING ABOVE
            case 0x00E6return false// LATIN SMALL LETTER AE
            case 0x00E7return false// LATIN SMALL LETTER C WITH CEDILLA
            case 0x00E8return false// LATIN SMALL LETTER E WITH GRAVE
            case 0x00E9return false// LATIN SMALL LETTER E WITH ACUTE
            case 0x00EAreturn false// LATIN SMALL LETTER E WITH CIRCUMFLEX
            case 0x00EBreturn false// LATIN SMALL LETTER E WITH DIAERESIS
            case 0x00ECreturn false// LATIN SMALL LETTER I WITH GRAVE
            case 0x00EDreturn false// LATIN SMALL LETTER I WITH ACUTE
            case 0x00EEreturn false// LATIN SMALL LETTER I WITH CIRCUMFLEX
            case 0x00EFreturn false// LATIN SMALL LETTER I WITH DIAERESIS
            case 0x00F0return true;  // place holder to enable table lookup
            case 0x00F1return false// LATIN SMALL LETTER N WITH TILDE
            case 0x00F2return false// LATIN SMALL LETTER O WITH GRAVE
            case 0x00F3return false// LATIN SMALL LETTER O WITH ACUTE
            case 0x00F4return false// LATIN SMALL LETTER O WITH CIRCUMFLEX
            case 0x00F5return false// LATIN SMALL LETTER O WITH TILDE
            case 0x00F6return false// LATIN SMALL LETTER O WITH DIAERESIS
            case 0x00F8return false// LATIN SMALL LETTER O WITH STROKE
            case 0x00F9return false// LATIN SMALL LETTER U WITH GRAVE
            case 0x00FAreturn false// LATIN SMALL LETTER U WITH ACUTE
            case 0x00FBreturn false// LATIN SMALL LETTER U WITH CIRCUMFLEX
            case 0x00FCreturn false// LATIN SMALL LETTER U WITH DIAERESIS
            case 0x00FDreturn false// LATIN SMALL LETTER Y WITH ACUTE
            case 0x00FEreturn true;  // place holder to enable table lookup
            case 0x00FFreturn false// LATIN SMALL LETTER Y WITH DIAERESIS
            case 0x0100return true;  // place holder to enable table lookup
            case 0x0101return true;  // place holder to enable table lookup
            case 0x0102return true;  // place holder to enable table lookup
            case 0x0103return true;  // place holder to enable table lookup
            case 0x0104return true;  // place holder to enable table lookup
            case 0x0105return true;  // place holder to enable table lookup
            case 0x0106return true;  // place holder to enable table lookup
            case 0x0107return true;  // place holder to enable table lookup
            case 0x0108return true;  // place holder to enable table lookup
            case 0x0109return true;  // place holder to enable table lookup      
            case 0x010Areturn false// LATIN CAPITAL LETTER C WITH DOT ABOVE
            case 0x010Breturn false// LATIN SMALL LETTER C WITH DOT ABOVE
            case 0x010Creturn true;  // place holder to enable table lookup
            case 0x010Dreturn true;  // place holder to enable table lookup
            case 0x010Ereturn true;  // place holder to enable table lookup
            case 0x010Freturn true;  // place holder to enable table lookup
            case 0x0110return true;  // place holder to enable table lookup
            case 0x0111return true;  // place holder to enable table lookup
            case 0x0112return true;  // place holder to enable table lookup
            case 0x0113return true;  // place holder to enable table lookup
            case 0x0114return true;  // place holder to enable table lookup
            case 0x0115return true;  // place holder to enable table lookup
            case 0x0116return true;  // place holder to enable table lookup
            case 0x0117return true;  // place holder to enable table lookup
            case 0x0118return true;  // place holder to enable table lookup
            case 0x0119return true;  // place holder to enable table lookup
            case 0x011Areturn true;  // place holder to enable table lookup
            case 0x011Breturn true;  // place holder to enable table lookup
            case 0x011Creturn true;  // place holder to enable table lookup
            case 0x011Dreturn true;  // place holder to enable table lookup
            case 0x011Ereturn true;  // place holder to enable table lookup
            case 0x011Freturn true;  // place holder to enable table lookup       
            case 0x0120return false// LATIN CAPITAL LETTER G WITH DOT ABOVE
            case 0x0121return false// LATIN SMALL LETTER G WITH DOT ABOVE
        }
        switch (c) {         
            case 0x0174return false// LATIN CAPITAL LETTER W WITH CIRCUMFLEX
            case 0x0175return false// LATIN SMALL LETTER W WITH CIRCUMFLEX
            case 0x0176return false// LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
            case 0x0177return false// LATIN SMALL LETTER Y WITH CIRCUMFLEX
            case 0x0178return false// LATIN CAPITAL LETTER Y WITH DIAERESIS
        }
        switch (c) {         
            case 0x1E02return false// LATIN CAPITAL LETTER B WITH DOT ABOVE
            case 0x1E03return false// LATIN SMALL LETTER B WITH DOT ABOVE
            case 0x1E04return true;  // place holder to enable table lookup
            case 0x1E05return true;  // place holder to enable table lookup
            case 0x1E06return true;  // place holder to enable table lookup
            case 0x1E07return true;  // place holder to enable table lookup
            case 0x1E08return true;  // place holder to enable table lookup
            case 0x1E09return true;  // place holder to enable table lookup
            case 0x1E0Areturn false// LATIN CAPITAL LETTER D WITH DOT ABOVE
            case 0x1E0Breturn false// LATIN SMALL LETTER D WITH DOT ABOVE
            case 0x1E0Creturn true;  // place holder to enable table lookup
            case 0x1E0Dreturn true;  // place holder to enable table lookup
            case 0x1E0Ereturn true;  // place holder to enable table lookup
            case 0x1E0Freturn true;  // place holder to enable table lookup
            case 0x1E10return true;  // place holder to enable table lookup
            case 0x1E11return true;  // place holder to enable table lookup
            case 0x1E12return true;  // place holder to enable table lookup
            case 0x1E13return true;  // place holder to enable table lookup
            case 0x1E14return true;  // place holder to enable table lookup
            case 0x1E15return true;  // place holder to enable table lookup
            case 0x1E16return true;  // place holder to enable table lookup
            case 0x1E17return true;  // place holder to enable table lookup
            case 0x1E18return true;  // place holder to enable table lookup
            case 0x1E19return true;  // place holder to enable table lookup
            case 0x1E1Areturn true;  // place holder to enable table lookup
            case 0x1E1Breturn true;  // place holder to enable table lookup
            case 0x1E1Creturn true;  // place holder to enable table lookup
            case 0x1E1Dreturn true;  // place holder to enable table lookup
            case 0x1E1Ereturn false// LATIN CAPITAL LETTER F WITH DOT ABOVE
            case 0x1E1Freturn false// LATIN SMALL LETTER F WITH DOT ABOVE
            case 0x1E20return true;  // place holder to enable table lookup
            case 0x1E21return true;  // place holder to enable table lookup
            case 0x1E22return true;  // place holder to enable table lookup
            case 0x1E23return true;  // place holder to enable table lookup
            case 0x1E24return true;  // place holder to enable table lookup
            case 0x1E25return true;  // place holder to enable table lookup
            case 0x1E26return true;  // place holder to enable table lookup
            case 0x1E27return true;  // place holder to enable table lookup
            case 0x1E28return true;  // place holder to enable table lookup
            case 0x1E29return true;  // place holder to enable table lookup
            case 0x1E2Areturn true;  // place holder to enable table lookup
            case 0x1E2Breturn true;  // place holder to enable table lookup
            case 0x1E2Creturn true;  // place holder to enable table lookup
            case 0x1E2Dreturn true;  // place holder to enable table lookup
            case 0x1E2Ereturn true;  // place holder to enable table lookup
            case 0x1E2Freturn true;  // place holder to enable table lookup
            case 0x1E30return true;  // place holder to enable table lookup
            case 0x1E31return true;  // place holder to enable table lookup
            case 0x1E32return true;  // place holder to enable table lookup
            case 0x1E33return true;  // place holder to enable table lookup
            case 0x1E34return true;  // place holder to enable table lookup
            case 0x1E35return true;  // place holder to enable table lookup
            case 0x1E36return true;  // place holder to enable table lookup
            case 0x1E37return true;  // place holder to enable table lookup
            case 0x1E38return true;  // place holder to enable table lookup
            case 0x1E39return true;  // place holder to enable table lookup
            case 0x1E3Areturn true;  // place holder to enable table lookup
            case 0x1E3Breturn true;  // place holder to enable table lookup
            case 0x1E3Creturn true;  // place holder to enable table lookup
            case 0x1E3Dreturn true;  // place holder to enable table lookup
            case 0x1E3Ereturn true;  // place holder to enable table lookup
            case 0x1E3Freturn true;  // place holder to enable table lookup        
            case 0x1E40return false// LATIN CAPITAL LETTER M WITH DOT ABOVE
            case 0x1E41return false// LATIN SMALL LETTER M WITH DOT ABOVE
            case 0x1E42return true;  // place holder to enable table lookup
            case 0x1E43return true;  // place holder to enable table lookup
            case 0x1E44return true;  // place holder to enable table lookup
            case 0x1E45return true;  // place holder to enable table lookup
            case 0x1E46return true;  // place holder to enable table lookup
            case 0x1E47return true;  // place holder to enable table lookup
            case 0x1E48return true;  // place holder to enable table lookup
            case 0x1E49return true;  // place holder to enable table lookup
            case 0x1E4Areturn true;  // place holder to enable table lookup
            case 0x1E4Breturn true;  // place holder to enable table lookup
            case 0x1E4Creturn true;  // place holder to enable table lookup
            case 0x1E4Dreturn true;  // place holder to enable table lookup
            case 0x1E4Ereturn true;  // place holder to enable table lookup
            case 0x1E4Freturn true;  // place holder to enable table lookup
            case 0x1E50return true;  // place holder to enable table lookup
            case 0x1E51return true;  // place holder to enable table lookup
            case 0x1E52return true;  // place holder to enable table lookup
            case 0x1E53return true;  // place holder to enable table lookup
            case 0x1E54return true;  // place holder to enable table lookup
            case 0x1E55return true;  // place holder to enable table lookup         
            case 0x1E56return false// LATIN CAPITAL LETTER P WITH DOT ABOVE
            case 0x1E57return false// LATIN SMALL LETTER P WITH DOT ABOVE
            case 0x1E58return true;  // place holder to enable table lookup
            case 0x1E59return true;  // place holder to enable table lookup
            case 0x1E5Areturn true;  // place holder to enable table lookup
            case 0x1E5Breturn true;  // place holder to enable table lookup
            case 0x1E5Creturn true;  // place holder to enable table lookup
            case 0x1E5Dreturn true;  // place holder to enable table lookup
            case 0x1E5Ereturn true;  // place holder to enable table lookup
            case 0x1E5Freturn true;  // place holder to enable table lookup
            case 0x1E60return false// LATIN CAPITAL LETTER S WITH DOT ABOVE
            case 0x1E61return false// LATIN SMALL LETTER S WITH DOT ABOVE
            case 0x1E62return true;  // place holder to enable table lookup
            case 0x1E63return true;  // place holder to enable table lookup
            case 0x1E64return true;  // place holder to enable table lookup
            case 0x1E65return true;  // place holder to enable table lookup
            case 0x1E66return true;  // place holder to enable table lookup
            case 0x1E67return true;  // place holder to enable table lookup
            case 0x1E68return true;  // place holder to enable table lookup
            case 0x1E69return true;  // place holder to enable table lookup
            case 0x1E6Areturn false// LATIN CAPITAL LETTER T WITH DOT ABOVE
            case 0x1E6Breturn false// LATIN SMALL LETTER T WITH DOT ABOVE
            case 0x1E6Creturn true;  // place holder to enable table lookup
            case 0x1E6Dreturn true;  // place holder to enable table lookup
            case 0x1E6Ereturn true;  // place holder to enable table lookup
            case 0x1E6Freturn true;  // place holder to enable table lookup
            case 0x1E70return true;  // place holder to enable table lookup
            case 0x1E71return true;  // place holder to enable table lookup
            case 0x1E72return true;  // place holder to enable table lookup
            case 0x1E73return true;  // place holder to enable table lookup
            case 0x1E74return true;  // place holder to enable table lookup
            case 0x1E75return true;  // place holder to enable table lookup
            case 0x1E76return true;  // place holder to enable table lookup
            case 0x1E77return true;  // place holder to enable table lookup
            case 0x1E78return true;  // place holder to enable table lookup
            case 0x1E79return true;  // place holder to enable table lookup
            case 0x1E7Areturn true;  // place holder to enable table lookup
            case 0x1E7Breturn true;  // place holder to enable table lookup
            case 0x1E7Creturn true;  // place holder to enable table lookup
            case 0x1E7Dreturn true;  // place holder to enable table lookup
            case 0x1E7Ereturn true;  // place holder to enable table lookup
            case 0x1E7Freturn true;  // place holder to enable table lookup
            case 0x1E80return false// LATIN CAPITAL LETTER W WITH GRAVE
            case 0x1E81return false// LATIN SMALL LETTER W WITH GRAVE
            case 0x1E82return false// LATIN CAPITAL LETTER W WITH ACUTE
            case 0x1E83return false// LATIN SMALL LETTER W WITH ACUTE
            case 0x1E84return false// LATIN CAPITAL LETTER W WITH DIAERESIS
            case 0x1E85return false// LATIN SMALL LETTER W WITH DIAERESIS
        }
        switch (c) {         
            case 0x1EF2return false// LATIN CAPITAL LETTER Y WITH GRAVE
            case 0x1EF3return false// LATIN SMALL LETTER Y WITH GRAVE
        }
        
        return true;
        
    }

}