1 /* Copyright 2002, 2003 Elliotte Rusty Harold 2 3 This library is free software; you can redistribute it and/or modify 4 it under the terms of version 2.1 of the GNU Lesser General Public 5 License as published by the Free Software Foundation. 6 7 This library is distributed in the hope that it will be useful, 8 but WITHOUT ANY WARRANTY; without even the implied warranty of 9 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10 GNU Lesser General Public License for more details. 11 12 You should have received a copy of the GNU Lesser General Public 13 License along with this library; if not, write to the 14 Free Software Foundation, Inc., 59 Temple Place, Suite 330, 15 Boston, MA 02111-1307 USA 16 17 You can contact Elliotte Rusty Harold by sending e-mail to 18 elharo@ibiblio.org. Please include the word "XOM" in the 19 subject line. The XOM home page is located at http://www.xom.nu/ 20 */ 21 22 package nu.xom; 23 24 import java.io.Writer; 25 26 /** 27 * <p> 28 * TIS-620, not quite the same as ISO 8859-11. 29 * TIS-620 does not have the non-breaking space or the C1 controls. 30 * </p> 31 * 32 * @author Elliotte Rusty Harold 33 * @version 1.0 34 * 35 */ 36 class ISOThaiWriter extends TextWriter { 37 ISOThaiWriter(Writer out, String encoding)38 ISOThaiWriter(Writer out, String encoding) { 39 super(out, encoding); 40 } 41 42 /** 43 * @see nu.xom.TextWriter#needsEscaping(char) 44 */ needsEscaping(char c)45 boolean needsEscaping(char c) { 46 47 if (c < 128) return false; 48 // C1 controls do not appear to be assigned in this character set 49 // Also, according to 50 // http://www.inet.co.th/cyberclub/trin/thairef/tis620-iso10646.html 51 // "Special attention should be paid on codepoint A0. Contrary 52 // to many people's belief that TIS 620 defines codepoint A0 53 // as no-break space (U+00A0), the standard does not assign any 54 // character to this codepoint. Codepoints A0 as well as DB-DE 55 // and FC-FF are not part of the standard. Interpretations of 56 // these unassigned codepoints are implementation specific and 57 // may vary from implementation to implementation. To ensure full 58 // data interchangeability among various applications, it is 59 // suggested that Thai software implementors follows the 60 // TIS 620 standard strictly." 61 62 switch (c) { 63 case 0x0E01: return false; // THAI CHARACTER KO KAI 64 case 0x0E02: return false; // THAI CHARACTER KHO KHAI 65 case 0x0E03: return false; // THAI CHARACTER KHO KHUAT 66 case 0x0E04: return false; // THAI CHARACTER KHO KHWAI 67 case 0x0E05: return false; // THAI CHARACTER KHO KHON 68 case 0x0E06: return false; // THAI CHARACTER KHO RAKHANG 69 case 0x0E07: return false; // THAI CHARACTER NGO NGU 70 case 0x0E08: return false; // THAI CHARACTER CHO CHAN 71 case 0x0E09: return false; // THAI CHARACTER CHO CHING 72 case 0x0E0A: return false; // THAI CHARACTER CHO CHANG 73 case 0x0E0B: return false; // THAI CHARACTER SO SO 74 case 0x0E0C: return false; // THAI CHARACTER CHO CHOE 75 case 0x0E0D: return false; // THAI CHARACTER YO YING 76 case 0x0E0E: return false; // THAI CHARACTER DO CHADA 77 case 0x0E0F: return false; // THAI CHARACTER TO PATAK 78 case 0x0E10: return false; // THAI CHARACTER THO THAN 79 case 0x0E11: return false; // THAI CHARACTER THO NANGMONTHO 80 case 0x0E12: return false; // THAI CHARACTER THO PHUTHAO 81 case 0x0E13: return false; // THAI CHARACTER NO NEN 82 case 0x0E14: return false; // THAI CHARACTER DO DEK 83 case 0x0E15: return false; // THAI CHARACTER TO TAO 84 case 0x0E16: return false; // THAI CHARACTER THO THUNG 85 case 0x0E17: return false; // THAI CHARACTER THO THAHAN 86 case 0x0E18: return false; // THAI CHARACTER THO THONG 87 case 0x0E19: return false; // THAI CHARACTER NO NU 88 case 0x0E1A: return false; // THAI CHARACTER BO BAIMAI 89 case 0x0E1B: return false; // THAI CHARACTER PO PLA 90 case 0x0E1C: return false; // THAI CHARACTER PHO PHUNG 91 case 0x0E1D: return false; // THAI CHARACTER FO FA 92 case 0x0E1E: return false; // THAI CHARACTER PHO PHAN 93 case 0x0E1F: return false; // THAI CHARACTER FO FAN 94 case 0x0E20: return false; // THAI CHARACTER PHO SAMPHAO 95 case 0x0E21: return false; // THAI CHARACTER MO MA 96 case 0x0E22: return false; // THAI CHARACTER YO YAK 97 case 0x0E23: return false; // THAI CHARACTER RO RUA 98 case 0x0E24: return false; // THAI CHARACTER RU 99 case 0x0E25: return false; // THAI CHARACTER LO LING 100 case 0x0E26: return false; // THAI CHARACTER LU 101 case 0x0E27: return false; // THAI CHARACTER WO WAEN 102 case 0x0E28: return false; // THAI CHARACTER SO SALA 103 case 0x0E29: return false; // THAI CHARACTER SO RUSI 104 case 0x0E2A: return false; // THAI CHARACTER SO SUA 105 case 0x0E2B: return false; // THAI CHARACTER HO HIP 106 case 0x0E2C: return false; // THAI CHARACTER LO CHULA 107 case 0x0E2D: return false; // THAI CHARACTER O ANG 108 case 0x0E2E: return false; // THAI CHARACTER HO NOKHUK 109 case 0x0E2F: return false; // THAI CHARACTER PAIYANNOI 110 case 0x0E30: return false; // THAI CHARACTER SARA A 111 case 0x0E31: return false; // THAI CHARACTER MAI HAN-AKAT 112 case 0x0E32: return false; // THAI CHARACTER SARA AA 113 case 0x0E33: return false; // THAI CHARACTER SARA AM 114 case 0x0E34: return false; // THAI CHARACTER SARA I 115 case 0x0E35: return false; // THAI CHARACTER SARA II 116 case 0x0E36: return false; // THAI CHARACTER SARA UE 117 case 0x0E37: return false; // THAI CHARACTER SARA UEE 118 case 0x0E38: return false; // THAI CHARACTER SARA U 119 case 0x0E39: return false; // THAI CHARACTER SARA UU 120 case 0x0E3A: return false; // THAI CHARACTER PHINTHU 121 } 122 // optimize by splitting switch into contiguous blocks per 123 // Chapter 7 of Java Performance Tuning, Jack Shirazi 124 switch (c) { 125 case 0x0E3F: return false; // THAI CURRENCY SYMBOL BAHT 126 case 0x0E40: return false; // THAI CHARACTER SARA E 127 case 0x0E41: return false; // THAI CHARACTER SARA AE 128 case 0x0E42: return false; // THAI CHARACTER SARA O 129 case 0x0E43: return false; // THAI CHARACTER SARA AI MAIMUAN 130 case 0x0E44: return false; // THAI CHARACTER SARA AI MAIMALAI 131 case 0x0E45: return false; // THAI CHARACTER LAKKHANGYAO 132 case 0x0E46: return false; // THAI CHARACTER MAIYAMOK 133 case 0x0E47: return false; // THAI CHARACTER MAITAIKHU 134 case 0x0E48: return false; // THAI CHARACTER MAI EK 135 case 0x0E49: return false; // THAI CHARACTER MAI THO 136 case 0x0E4A: return false; // THAI CHARACTER MAI TRI 137 case 0x0E4B: return false; // THAI CHARACTER MAI CHATTAWA 138 case 0x0E4C: return false; // THAI CHARACTER THANTHAKHAT 139 case 0x0E4D: return false; // THAI CHARACTER NIKHAHIT 140 case 0x0E4E: return false; // THAI CHARACTER YAMAKKAN 141 case 0x0E4F: return false; // THAI CHARACTER FONGMAN 142 case 0x0E50: return false; // THAI DIGIT ZERO 143 case 0x0E51: return false; // THAI DIGIT ONE 144 case 0x0E52: return false; // THAI DIGIT TWO 145 case 0x0E53: return false; // THAI DIGIT THREE 146 case 0x0E54: return false; // THAI DIGIT FOUR 147 case 0x0E55: return false; // THAI DIGIT FIVE 148 case 0x0E56: return false; // THAI DIGIT SIX 149 case 0x0E57: return false; // THAI DIGIT SEVEN 150 case 0x0E58: return false; // THAI DIGIT EIGHT 151 case 0x0E59: return false; // THAI DIGIT NINE 152 case 0x0E5A: return false; // THAI CHARACTER ANGKHANKHU 153 case 0x0E5B: return false; // THAI CHARACTER KHOMUT 154 } 155 156 return true; 157 158 } 159 160 }