Open Source Repository

Home /xom/xom-1.1 | Repository Home



nu/xom/ISOThaiWriter.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>
 *   TIS-620, not quite the same as ISO 8859-11.
 *   TIS-620 does not have the non-breaking space or the C1 controls.
 </p>
 
 @author Elliotte Rusty Harold
 @version 1.0
 *
 */
class ISOThaiWriter extends TextWriter {

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

    /**
     @see nu.xom.TextWriter#needsEscaping(char)
     */
    boolean needsEscaping(char c) {
        
        if (c < 128return false;
        // C1 controls do not appear to be assigned in this character set
        // Also, according to 
        // http://www.inet.co.th/cyberclub/trin/thairef/tis620-iso10646.html
        // "Special attention should be paid on codepoint A0. Contrary 
        // to many people's belief that TIS 620 defines codepoint A0
        // as no-break space (U+00A0), the standard does not assign any
        // character to this codepoint. Codepoints A0 as well as DB-DE 
        // and FC-FF are not part of the standard. Interpretations of 
        // these unassigned codepoints are implementation specific and 
        // may vary from implementation to implementation. To ensure full 
        // data interchangeability among various applications, it is 
        // suggested that Thai software implementors follows the 
        // TIS 620 standard strictly."
        
        switch (c) {
            case 0x0E01return false// THAI CHARACTER KO KAI
            case 0x0E02return false// THAI CHARACTER KHO KHAI
            case 0x0E03return false// THAI CHARACTER KHO KHUAT
            case 0x0E04return false// THAI CHARACTER KHO KHWAI
            case 0x0E05return false// THAI CHARACTER KHO KHON
            case 0x0E06return false// THAI CHARACTER KHO RAKHANG
            case 0x0E07return false// THAI CHARACTER NGO NGU
            case 0x0E08return false// THAI CHARACTER CHO CHAN
            case 0x0E09return false// THAI CHARACTER CHO CHING
            case 0x0E0Areturn false// THAI CHARACTER CHO CHANG
            case 0x0E0Breturn false// THAI CHARACTER SO SO
            case 0x0E0Creturn false// THAI CHARACTER CHO CHOE
            case 0x0E0Dreturn false// THAI CHARACTER YO YING
            case 0x0E0Ereturn false// THAI CHARACTER DO CHADA
            case 0x0E0Freturn false// THAI CHARACTER TO PATAK
            case 0x0E10return false// THAI CHARACTER THO THAN
            case 0x0E11return false// THAI CHARACTER THO NANGMONTHO
            case 0x0E12return false// THAI CHARACTER THO PHUTHAO
            case 0x0E13return false// THAI CHARACTER NO NEN
            case 0x0E14return false// THAI CHARACTER DO DEK
            case 0x0E15return false// THAI CHARACTER TO TAO
            case 0x0E16return false// THAI CHARACTER THO THUNG
            case 0x0E17return false// THAI CHARACTER THO THAHAN
            case 0x0E18return false// THAI CHARACTER THO THONG
            case 0x0E19return false// THAI CHARACTER NO NU
            case 0x0E1Areturn false// THAI CHARACTER BO BAIMAI
            case 0x0E1Breturn false// THAI CHARACTER PO PLA
            case 0x0E1Creturn false// THAI CHARACTER PHO PHUNG
            case 0x0E1Dreturn false// THAI CHARACTER FO FA
            case 0x0E1Ereturn false// THAI CHARACTER PHO PHAN
            case 0x0E1Freturn false// THAI CHARACTER FO FAN
            case 0x0E20return false// THAI CHARACTER PHO SAMPHAO
            case 0x0E21return false// THAI CHARACTER MO MA
            case 0x0E22return false// THAI CHARACTER YO YAK
            case 0x0E23return false// THAI CHARACTER RO RUA
            case 0x0E24return false// THAI CHARACTER RU
            case 0x0E25return false// THAI CHARACTER LO LING
            case 0x0E26return false// THAI CHARACTER LU
            case 0x0E27return false// THAI CHARACTER WO WAEN
            case 0x0E28return false// THAI CHARACTER SO SALA
            case 0x0E29return false// THAI CHARACTER SO RUSI
            case 0x0E2Areturn false// THAI CHARACTER SO SUA
            case 0x0E2Breturn false// THAI CHARACTER HO HIP
            case 0x0E2Creturn false// THAI CHARACTER LO CHULA
            case 0x0E2Dreturn false// THAI CHARACTER O ANG
            case 0x0E2Ereturn false// THAI CHARACTER HO NOKHUK
            case 0x0E2Freturn false// THAI CHARACTER PAIYANNOI
            case 0x0E30return false// THAI CHARACTER SARA A
            case 0x0E31return false// THAI CHARACTER MAI HAN-AKAT
            case 0x0E32return false// THAI CHARACTER SARA AA
            case 0x0E33return false// THAI CHARACTER SARA AM
            case 0x0E34return false// THAI CHARACTER SARA I
            case 0x0E35return false// THAI CHARACTER SARA II
            case 0x0E36return false// THAI CHARACTER SARA UE
            case 0x0E37return false// THAI CHARACTER SARA UEE
            case 0x0E38return false// THAI CHARACTER SARA U
            case 0x0E39return false// THAI CHARACTER SARA UU
            case 0x0E3Areturn false// THAI CHARACTER PHINTHU
        }
        // optimize by splitting switch into contiguous blocks per
        // Chapter 7 of Java Performance Tuning, Jack Shirazi
        switch (c) { 
            case 0x0E3Freturn false// THAI CURRENCY SYMBOL BAHT
            case 0x0E40return false// THAI CHARACTER SARA E
            case 0x0E41return false// THAI CHARACTER SARA AE
            case 0x0E42return false// THAI CHARACTER SARA O
            case 0x0E43return false// THAI CHARACTER SARA AI MAIMUAN
            case 0x0E44return false// THAI CHARACTER SARA AI MAIMALAI
            case 0x0E45return false// THAI CHARACTER LAKKHANGYAO
            case 0x0E46return false// THAI CHARACTER MAIYAMOK
            case 0x0E47return false// THAI CHARACTER MAITAIKHU
            case 0x0E48return false// THAI CHARACTER MAI EK
            case 0x0E49return false// THAI CHARACTER MAI THO
            case 0x0E4Areturn false// THAI CHARACTER MAI TRI
            case 0x0E4Breturn false// THAI CHARACTER MAI CHATTAWA
            case 0x0E4Creturn false// THAI CHARACTER THANTHAKHAT
            case 0x0E4Dreturn false// THAI CHARACTER NIKHAHIT
            case 0x0E4Ereturn false// THAI CHARACTER YAMAKKAN
            case 0x0E4Freturn false// THAI CHARACTER FONGMAN
            case 0x0E50return false// THAI DIGIT ZERO
            case 0x0E51return false// THAI DIGIT ONE
            case 0x0E52return false// THAI DIGIT TWO
            case 0x0E53return false// THAI DIGIT THREE
            case 0x0E54return false// THAI DIGIT FOUR
            case 0x0E55return false// THAI DIGIT FIVE
            case 0x0E56return false// THAI DIGIT SIX
            case 0x0E57return false// THAI DIGIT SEVEN
            case 0x0E58return false// THAI DIGIT EIGHT
            case 0x0E59return false// THAI DIGIT NINE
            case 0x0E5Areturn false// THAI CHARACTER ANGKHANKHU
            case 0x0E5Breturn false// THAI CHARACTER KHOMUT
        }
        
        return true;
        
    }

}