Open Source Repository

Home /xom/xom-1.1 | Repository Home



nu/xom/Latin2Writer.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-2, a.k.a. Latin-2
 </p>
 
 @author Elliotte Rusty Harold
 @version 1.0
 *
 */
class Latin2Writer extends TextWriter {

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

    /**
     @see nu.xom.TextWriter#needsEscaping(char)
     */
    boolean needsEscaping(char c) {
        if (c <= 0xA0return false;        
        switch (c) {
            case 0x00A1return true;  // place holder to enable table lookup
            case 0x00A2return true;  // place holder to enable table lookup
            case 0x00A3return true;  // place holder to enable table lookup
            case 0x00A4return false// CURRENCY SIGN
            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 false// DIAERESIS
            case 0x00A9return true;  // place holder to enable table lookup
            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 true;  // place holder to enable table lookup
            case 0x00AFreturn true;  // place holder to enable table lookup
            case 0x00B0return false// DEGREE SIGN
            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 false// ACUTE ACCENT
            case 0x00B5return true;  // place holder to enable table lookup
            case 0x00B6return true;  // place holder to enable table lookup
            case 0x00B7return true;  // place holder to enable table lookup
            case 0x00B8return false// CEDILLA
            case 0x00C0return true;  // place holder to enable table lookup
            case 0x00C1return false// LATIN CAPITAL LETTER A WITH ACUTE
            case 0x00C2return false// LATIN CAPITAL LETTER A WITH CIRCUMFLEX
            case 0x00C3return true;  // place holder to enable table lookup
            case 0x00C4return false// LATIN CAPITAL LETTER A WITH DIAERESIS
            case 0x00C5return true;  // place holder to enable table lookup
            case 0x00C6return true;  // place holder to enable table lookup
            case 0x00C7return false// LATIN CAPITAL LETTER C WITH CEDILLA
            case 0x00C8return true;  // place holder to enable table lookup
            case 0x00C9return false// LATIN CAPITAL LETTER E WITH ACUTE
            case 0x00CAreturn true;  // place holder to enable table lookup
            case 0x00CBreturn false// LATIN CAPITAL LETTER E WITH DIAERESIS
            case 0x00CCreturn true;  // place holder to enable table lookup
            case 0x00CDreturn false// LATIN CAPITAL LETTER I WITH ACUTE
            case 0x00CEreturn false// LATIN CAPITAL LETTER I WITH CIRCUMFLEX
            case 0x00CFreturn true;  // place holder to enable table lookup
            case 0x00D0return true;  // place holder to enable table lookup
            case 0x00D1return true;  // place holder to enable table lookup
            case 0x00D2return true;  // place holder to enable table lookup
            case 0x00D3return false// LATIN CAPITAL LETTER O WITH ACUTE
            case 0x00D4return false// LATIN CAPITAL LETTER O WITH CIRCUMFLEX
            case 0x00D5return true;  // place holder to enable table lookup
            case 0x00D6return false// LATIN CAPITAL LETTER O WITH DIAERESIS
            case 0x00D7return false// MULTIPLICATION SIGN
            case 0x00D8return true;  // place holder to enable table lookup
            case 0x00D9return true;  // place holder to enable table lookup
            case 0x00DAreturn false// LATIN CAPITAL LETTER U WITH ACUTE
            case 0x00DBreturn true;  // place holder to enable table lookup
            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 true;  // place holder to enable table lookup
            case 0x00E1return false// LATIN SMALL LETTER A WITH ACUTE
            case 0x00E2return false// LATIN SMALL LETTER A WITH CIRCUMFLEX
            case 0x00E3return true;  // place holder to enable table lookup
            case 0x00E4return false// LATIN SMALL LETTER A WITH DIAERESIS
            case 0x00E5return true;  // place holder to enable table lookup
            case 0x00E6return true;  // place holder to enable table lookup
            case 0x00E7return false// LATIN SMALL LETTER C WITH CEDILLA
            case 0x00E8return true;  // place holder to enable table lookup
            case 0x00E9return false// LATIN SMALL LETTER E WITH ACUTE
            case 0x00EAreturn true;  // place holder to enable table lookup
            case 0x00EBreturn false// LATIN SMALL LETTER E WITH DIAERESIS
            case 0x00ECreturn true;  // place holder to enable table lookup
            case 0x00EDreturn false// LATIN SMALL LETTER I WITH ACUTE
            case 0x00EEreturn false// LATIN SMALL LETTER I WITH CIRCUMFLEX
            case 0x00EFreturn true;  // place holder to enable table lookup
            case 0x00F0return true;  // place holder to enable table lookup
            case 0x00F1return true;  // place holder to enable table lookup
            case 0x00F2return true;  // place holder to enable table lookup
            case 0x00F3return false// LATIN SMALL LETTER O WITH ACUTE
            case 0x00F4return false// LATIN SMALL LETTER O WITH CIRCUMFLEX
            case 0x00F5return true;  // place holder to enable table lookup
            case 0x00F6return false// LATIN SMALL LETTER O WITH DIAERESIS
            case 0x00F7return false// DIVISION SIGN
            case 0x00F8return true;  // place holder to enable table lookup
            case 0x00F9return true;  // place holder to enable table lookup
            case 0x00FAreturn false// LATIN SMALL LETTER U WITH ACUTE
            case 0x00FBreturn true;  // place holder to enable table lookup
            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 true;  // place holder to enable table lookup
            case 0x0100return true;  // place holder to enable table lookup
            case 0x0101return true;  // place holder to enable table lookup
            case 0x0102return false// LATIN CAPITAL LETTER A WITH BREVE
            case 0x0103return false// LATIN SMALL LETTER A WITH BREVE
            case 0x0104return false// LATIN CAPITAL LETTER A WITH OGONEK
            case 0x0105return false// LATIN SMALL LETTER A WITH OGONEK
            case 0x0106return false// LATIN CAPITAL LETTER C WITH ACUTE
            case 0x0107return false// LATIN SMALL LETTER C WITH ACUTE
            case 0x0108return true;  // place holder to enable table lookup
            case 0x0109return true;  // place holder to enable table lookup
            case 0x010Areturn true;  // place holder to enable table lookup
            case 0x010Breturn true;  // place holder to enable table lookup
            case 0x010Creturn false// LATIN CAPITAL LETTER C WITH CARON
            case 0x010Dreturn false// LATIN SMALL LETTER C WITH CARON
            case 0x010Ereturn false// LATIN CAPITAL LETTER D WITH CARON
            case 0x010Freturn false// LATIN SMALL LETTER D WITH CARON
            case 0x0110return false// LATIN CAPITAL LETTER D WITH STROKE
            case 0x0111return false// LATIN SMALL LETTER D WITH STROKE
            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 false// LATIN CAPITAL LETTER E WITH OGONEK
            case 0x0119return false// LATIN SMALL LETTER E WITH OGONEK
            case 0x011Areturn false// LATIN CAPITAL LETTER E WITH CARON
            case 0x011Breturn false// LATIN SMALL LETTER E WITH CARON
            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 true;  // place holder to enable table lookup
            case 0x0121return true;  // place holder to enable table lookup
            case 0x0122return true;  // place holder to enable table lookup
            case 0x0123return true;  // place holder to enable table lookup
            case 0x0124return true;  // place holder to enable table lookup
            case 0x0125return true;  // place holder to enable table lookup
            case 0x0126return true;  // place holder to enable table lookup
            case 0x0127return true;  // place holder to enable table lookup
            case 0x0128return true;  // place holder to enable table lookup
            case 0x0129return true;  // place holder to enable table lookup
            case 0x012Areturn true;  // place holder to enable table lookup
            case 0x012Breturn true;  // place holder to enable table lookup
            case 0x012Creturn true;  // place holder to enable table lookup
            case 0x012Dreturn true;  // place holder to enable table lookup
            case 0x012Ereturn true;  // place holder to enable table lookup
            case 0x012Freturn true;  // place holder to enable table lookup
            case 0x0130return true;  // place holder to enable table lookup
            case 0x0131return true;  // place holder to enable table lookup
            case 0x0132return true;  // place holder to enable table lookup
            case 0x0133return true;  // place holder to enable table lookup
            case 0x0134return true;  // place holder to enable table lookup
            case 0x0135return true;  // place holder to enable table lookup
            case 0x0136return true;  // place holder to enable table lookup
            case 0x0137return true;  // place holder to enable table lookup
            case 0x0138return true;  // place holder to enable table lookup
            case 0x0139return false// LATIN CAPITAL LETTER L WITH ACUTE
            case 0x013Areturn false// LATIN SMALL LETTER L WITH ACUTE
            case 0x013Breturn true;  // place holder to enable table lookup
            case 0x013Creturn true;  // place holder to enable table lookup
            case 0x013Dreturn false// LATIN CAPITAL LETTER L WITH CARON
            case 0x013Ereturn false// LATIN SMALL LETTER L WITH CARON
            case 0x013Freturn true;  // place holder to enable table lookup
            case 0x0140return true;  // place holder to enable table lookup
            case 0x0141return false// LATIN CAPITAL LETTER L WITH STROKE
            case 0x0142return false// LATIN SMALL LETTER L WITH STROKE
            case 0x0143return false// LATIN CAPITAL LETTER N WITH ACUTE
            case 0x0144return false// LATIN SMALL LETTER N WITH ACUTE
            case 0x0145return true;  // place holder to enable table lookup
            case 0x0146return true;  // place holder to enable table lookup
            case 0x0147return false// LATIN CAPITAL LETTER N WITH CARON
            case 0x0148return false// LATIN SMALL LETTER N WITH CARON
            case 0x0149return true;  // place holder to enable table lookup
            case 0x014Areturn true;  // place holder to enable table lookup
            case 0x014Breturn true;  // place holder to enable table lookup
            case 0x014Creturn true;  // place holder to enable table lookup
            case 0x014Dreturn true;  // place holder to enable table lookup
            case 0x014Ereturn true;  // place holder to enable table lookup
            case 0x014Freturn true;  // place holder to enable table lookup
            case 0x0150return false// LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
            case 0x0151return false// LATIN SMALL LETTER O WITH DOUBLE ACUTE
            case 0x0152return true;  // place holder to enable table lookup
            case 0x0153return true;  // place holder to enable table lookup
            case 0x0154return false// LATIN CAPITAL LETTER R WITH ACUTE
            case 0x0155return false// LATIN SMALL LETTER R WITH ACUTE
            case 0x0156return true;  // place holder to enable table lookup
            case 0x0157return true;  // place holder to enable table lookup
            case 0x0158return false// LATIN CAPITAL LETTER R WITH CARON
            case 0x0159return false// LATIN SMALL LETTER R WITH CARON
            case 0x015Areturn false// LATIN CAPITAL LETTER S WITH ACUTE
            case 0x015Breturn false// LATIN SMALL LETTER S WITH ACUTE
            case 0x015Creturn true;  // place holder to enable table lookup
            case 0x015Dreturn true;  // place holder to enable table lookup
            case 0x015Ereturn false// LATIN CAPITAL LETTER S WITH CEDILLA
            case 0x015Freturn false// LATIN SMALL LETTER S WITH CEDILLA
            case 0x0160return false// LATIN CAPITAL LETTER S WITH CARON
            case 0x0161return false// LATIN SMALL LETTER S WITH CARON
            case 0x0162return false// LATIN CAPITAL LETTER T WITH CEDILLA
            case 0x0163return false// LATIN SMALL LETTER T WITH CEDILLA
            case 0x0164return false// LATIN CAPITAL LETTER T WITH CARON
            case 0x0165return false// LATIN SMALL LETTER T WITH CARON
            case 0x0166return true;  // place holder to enable table lookup
            case 0x0167return true;  // place holder to enable table lookup
            case 0x0168return true;  // place holder to enable table lookup
            case 0x0169return true;  // place holder to enable table lookup
            case 0x016Areturn true;  // place holder to enable table lookup
            case 0x016Breturn true;  // place holder to enable table lookup
            case 0x016Creturn true;  // place holder to enable table lookup
            case 0x016Dreturn true;  // place holder to enable table lookup
            case 0x016Ereturn false// LATIN CAPITAL LETTER U WITH RING ABOVE
            case 0x016Freturn false// LATIN SMALL LETTER U WITH RING ABOVE
            case 0x0170return false// LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
            case 0x0171return false// LATIN SMALL LETTER U WITH DOUBLE ACUTE
            case 0x0172return true;  // place holder to enable table lookup
            case 0x0173return true;  // place holder to enable table lookup
            case 0x0174return true;  // place holder to enable table lookup
            case 0x0175return true;  // place holder to enable table lookup
            case 0x0176return true;  // place holder to enable table lookup
            case 0x0177return true;  // place holder to enable table lookup
            case 0x0178return true;  // place holder to enable table lookup
            case 0x0179return false// LATIN CAPITAL LETTER Z WITH ACUTE
            case 0x017Areturn false// LATIN SMALL LETTER Z WITH ACUTE
            case 0x017Breturn false// LATIN CAPITAL LETTER Z WITH DOT ABOVE
            case 0x017Creturn false// LATIN SMALL LETTER Z WITH DOT ABOVE
            case 0x017Dreturn false// LATIN CAPITAL LETTER Z WITH CARON
            case 0x017Ereturn false// LATIN SMALL LETTER Z WITH CARON
        }
        switch (c) {
            case 0x02C7return false// CARON
            case 0x02C8return true;  // place holder to enable table lookup
            case 0x02C9return true;  // place holder to enable table lookup
            case 0x02CAreturn true;  // place holder to enable table lookup
            case 0x02CBreturn true;  // place holder to enable table lookup
            case 0x02CCreturn true;  // place holder to enable table lookup
            case 0x02CDreturn true;  // place holder to enable table lookup
            case 0x02CEreturn true;  // place holder to enable table lookup
            case 0x02CFreturn true;  // place holder to enable table lookup
            case 0x02D0return true;  // place holder to enable table lookup
            case 0x02D1return true;  // place holder to enable table lookup
            case 0x02D2return true;  // place holder to enable table lookup
            case 0x02D3return true;  // place holder to enable table lookup
            case 0x02D4return true;  // place holder to enable table lookup
            case 0x02D5return true;  // place holder to enable table lookup
            case 0x02D6return true;  // place holder to enable table lookup
            case 0x02D7return true;  // place holder to enable table lookup
            case 0x02D8return false// BREVE
            case 0x02D9return false// DOT ABOVE
            case 0x02DAreturn true;  // place holder to enable table lookup
            case 0x02DBreturn false// OGONEK
            case 0x02DCreturn true;  // place holder to enable table lookup
            case 0x02DDreturn false// DOUBLE ACUTE ACCENT
        }
        
        return true;
        
    }

}