1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 #ifndef _L10N_TRANSLITERATION_NUMTOCHAR_H_ 28 #define _L10N_TRANSLITERATION_NUMTOCHAR_H_ 29 30 namespace com { namespace sun { namespace star { namespace i18n { 31 32 static const sal_Int16 NumberChar_HalfWidth = 0; 33 static const sal_Int16 NumberChar_FullWidth = 1; 34 static const sal_Int16 NumberChar_Lower_zh = 2; 35 static const sal_Int16 NumberChar_Upper_zh = 3; 36 static const sal_Int16 NumberChar_Upper_zh_TW = 4; 37 static const sal_Int16 NumberChar_Modern_ja = 5; 38 static const sal_Int16 NumberChar_Traditional_ja= 6; 39 static const sal_Int16 NumberChar_Lower_ko = 7; 40 static const sal_Int16 NumberChar_Upper_ko = 8; 41 static const sal_Int16 NumberChar_Hangul_ko = 9; 42 static const sal_Int16 NumberChar_Indic_ar = 10; 43 static const sal_Int16 NumberChar_EastIndic_ar = 11; 44 static const sal_Int16 NumberChar_hi = 12; 45 static const sal_Int16 NumberChar_th = 13; 46 static const sal_Int16 NumberChar_or = 14; 47 static const sal_Int16 NumberChar_mr = 15; 48 static const sal_Int16 NumberChar_bn = 16; 49 static const sal_Int16 NumberChar_pa = 17; 50 static const sal_Int16 NumberChar_gu = 18; 51 static const sal_Int16 NumberChar_ta = 19; 52 static const sal_Int16 NumberChar_te = 20; 53 static const sal_Int16 NumberChar_kn = 21; 54 static const sal_Int16 NumberChar_ml = 22; 55 static const sal_Int16 NumberChar_lo = 23; 56 static const sal_Int16 NumberChar_bo = 24; 57 static const sal_Int16 NumberChar_my = 25; 58 static const sal_Int16 NumberChar_km = 26; 59 static const sal_Int16 NumberChar_mn = 27; 60 static const sal_Int16 NumberChar_he = 28; 61 static const sal_Int16 NumberChar_ne = 29; 62 static const sal_Int16 NumberChar_dz = 30; 63 static const sal_Int16 NumberChar_Count = 31; 64 65 static sal_Unicode NumberChar[][10] = { 66 // 0 1 2 3 4 5 6 7 8 9 67 { 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039 }, // Half Width (Ascii) 68 { 0xFF10, 0xFF11, 0xFF12, 0xFF13, 0xFF14, 0xFF15, 0xFF16, 0xFF17, 0xFF18, 0xFF19 }, // Full Width 69 { 0x3007, 0x4E00, 0x4E8c, 0x4E09, 0x56DB, 0x4E94, 0x516D, 0x4E03, 0x516B, 0x4E5D }, // Chinese Lower 70 { 0x96F6, 0x58F9, 0x8D30, 0x53C1, 0x8086, 0x4F0D, 0x9646, 0x67D2, 0x634C, 0x7396 }, // S. Chinese Upper 71 { 0x96F6, 0x58F9, 0x8CB3, 0x53C3, 0x8086, 0x4F0D, 0x9678, 0x67D2, 0x634C, 0x7396 }, // T. Chinese Upper 72 { 0x3007, 0x4E00, 0x4E8C, 0x4E09, 0x56DB, 0x4E94, 0x516D, 0x4E03, 0x516B, 0x4E5D }, // Japanese Modern 73 { 0x96F6, 0x58F1, 0x5F10, 0x53C2, 0x56DB, 0x4F0D, 0x516D, 0x4E03, 0x516B, 0x4E5D }, // Japanese Trad. 74 { 0x3007, 0x4E00, 0x4E8C, 0x4E09, 0x56DB, 0x4E94, 0x516D, 0x4E03, 0x516B, 0x4E5D }, // Korean Lower 75 { 0xF9B2, 0x58F9, 0x8CB3, 0x53C3, 0x56DB, 0x4E94, 0x516D, 0x4E03, 0x516B, 0x4E5D }, // Korean Upper 76 { 0xC601, 0xC77C, 0xC774, 0xC0BC, 0xC0AC, 0xC624, 0xC721, 0xCE60, 0xD314, 0xAD6C }, // Korean Hangul 77 { 0x0660, 0x0661, 0x0662, 0x0663, 0x0664, 0x0665, 0x0666, 0x0667, 0x0668, 0x0669 }, // Arabic Indic 78 { 0x06F0, 0x06F1, 0x06F2, 0x06F3, 0x06F4, 0x06F5, 0x06F6, 0x06F7, 0x06F8, 0x06F9 }, // Est. Arabic Indic 79 { 0x0966, 0x0967, 0x0968, 0x0969, 0x096A, 0x096B, 0x096C, 0x096D, 0x096E, 0x096F }, // Indic (Devanagari) 80 { 0x0E50, 0x0E51, 0x0E52, 0x0E53, 0x0E54, 0x0E55, 0x0E56, 0x0E57, 0x0E58, 0x0E59 }, // Thai 81 { 0x0866, 0x0867, 0x0868, 0x0869, 0x086A, 0x086B, 0x086C, 0x086D, 0x086E, 0x086F }, // Oriya 82 { 0x0966, 0x0967, 0x0968, 0x0969, 0x096A, 0x096B, 0x096C, 0x096D, 0x096E, 0x096F }, // Marathi 83 { 0x09E6, 0x09E7, 0x09E8, 0x09E9, 0x09EA, 0x09EB, 0x09EC, 0x09ED, 0x09EE, 0x09EF }, // Bengali 84 { 0x0A66, 0x0A67, 0x0A68, 0x0A69, 0x0A6A, 0x0A6B, 0x0A6C, 0x0A6D, 0x0A6E, 0x0A6F }, // Punjabi (Gurmukhi) 85 { 0x0AE6, 0x0AE7, 0x0AE8, 0x0AE9, 0x0AEA, 0x0AEB, 0x0AEC, 0x0AED, 0x0AEE, 0x0AEF }, // Gujarali 86 { 0x0030, 0x0BE7, 0x0BE8, 0x0BE9, 0x0BEA, 0x0BEB, 0x0BEC, 0x0BED, 0x0BEE, 0x0BEF }, // Tamil 87 { 0x0C66, 0x0C67, 0x0C68, 0x0C69, 0x0C6A, 0x0C6B, 0x0C6C, 0x0C6D, 0x0C6E, 0x0C6F }, // Telugu 88 { 0x0CE6, 0x0CE7, 0x0CE8, 0x0CE9, 0x0CEA, 0x0CEB, 0x0CEC, 0x0CED, 0x0CEE, 0x0CEF }, // Kannada 89 { 0x0DE6, 0x0DE7, 0x0DE8, 0x0DE9, 0x0DEA, 0x0DEB, 0x0DEC, 0x0DED, 0x0DEE, 0x0DEF }, // Malayalam 90 { 0x0ED0, 0x0ED1, 0x0ED2, 0x0ED3, 0x0ED4, 0x0ED5, 0x0ED6, 0x0ED7, 0x0ED8, 0x0ED9 }, // Lao 91 { 0x0F20, 0x0F21, 0x0F22, 0x0F23, 0x0F24, 0x0F25, 0x0F26, 0x0F27, 0x0F28, 0x0F29 }, // Tibetan 92 { 0x1040, 0x1041, 0x1042, 0x1043, 0x1044, 0x1045, 0x1046, 0x1047, 0x1048, 0x1049 }, // Myammar 93 { 0x17E0, 0x17E1, 0x17E2, 0x17E3, 0x17E4, 0x17E5, 0x17E6, 0x17E7, 0x17E8, 0x17E9 }, // Cambodian (Khmer) 94 { 0x1810, 0x1811, 0x1812, 0x1813, 0x1814, 0x1815, 0x1816, 0x1817, 0x1818, 0x1819 }, // Mongolian 95 { 0x0020, 0x05D0, 0x05D1, 0x05D2, 0x05D3, 0x05D4, 0x05D5, 0x05D6, 0x05D7, 0x05D8 }, // Hebrew 96 { 0x0966, 0x0967, 0x0968, 0x0969, 0x096A, 0x096B, 0x096C, 0x096D, 0x096E, 0x096F }, // Nepali 97 { 0x0F20, 0x0F21, 0x0F22, 0x0F23, 0x0F24, 0x0F25, 0x0F26, 0x0F27, 0x0F28, 0x0F29 }, // Dzongkha 98 }; 99 100 static sal_Unicode DecimalChar[] = { 101 0x002E, // Half Width (Ascii) 102 0xFF0E, // Full Width 103 0xFF0E, // Chinese Lower 104 0x70B9, // S. Chinese Upper 105 0x9EDE, // T. Chinese Upper 106 0x30FB, // Japanese Modern 107 0x30FB, // Japanese Trad. 108 0xFF0E, // Korean Lower 109 0x9EDE, // Korean Upper 110 0xC810, // Korean Hangul 111 0x066B, // Arabic Indic 112 0x066B, // Est. Arabic Indic 113 0x0000, // Indic (Devanagari) 114 0x0000, // Thai 115 0x0000, // Oriya 116 0x0000, // Marathi 117 0x0000, // Bengali 118 0x0000, // Punjabi (Gurmukhi) 119 0x0000, // Gujarali 120 0x0000, // Tamil 121 0x0000, // Telugu 122 0x0000, // Kannada 123 0x0000, // Malayalam 124 0x0000, // Lao 125 0x0000, // Tibetan 126 0x0000, // Myammar 127 0x0000, // Cambodian (Khmer) 128 0x0000, // Mongolian 129 0x0000, // Hebrew 130 0x0000, // Nepali 131 0x0000, // Dzongkha 132 }; 133 134 static sal_Unicode MinusChar[] = { 135 0x002D, // Half Width (Ascii) 136 0xFF0D, // Full Width 137 0xFF0D, // Chinese Lower 138 0x8D1F, // S. Chinese Upper 139 0x5069, // T. Chinese Upper 140 0x2212, // Japanese Modern 141 0x2212, // Japanese Trad. 142 0xFF0D, // Korean Lower 143 0x5069, // Korean Upper 144 0xFF0D, // Korean Hangul ??? 145 0x0000, // Arabic Indic 146 0x2212, // Est. Arabic Indic 147 0x0000, // Indic 148 0x0000, // Thai 149 0x0000, // Oriya 150 0x0000, // Marathi 151 0x0000, // Bengali 152 0x0000, // Punjabi 153 0x0000, // Gujarali 154 0x0000, // Tamil 155 0x0000, // Telugu 156 0x0000, // Kannada 157 0x0000, // Malayalam 158 0x0000, // Lao 159 0x0000, // Tibetan 160 0x0000, // Myammar 161 0x0000, // Cambodian (Khmer) 162 0x0000, // Mongolian 163 0x0000, // Hebrew 164 0x0000, // Nepali 165 0x0000, // Dzongkha 166 }; 167 168 static sal_uInt16 SeparatorChar[] = { 169 0x002C, // Half Width (Ascii) 170 0xFF0C, // Full Width 171 0x3001, // Chinese Lower 172 0x3001, // S. Chinese Upper 173 0x3001, // T. Chinese Upper 174 0x3001, // Japanese Modern 175 0x3001, // Japanese Trad. 176 0x3001, // Korean Lower 177 0x3001, // Korean Upper 178 0x3001, // Korean Hangul 179 0x0000, // Arabic Indic 180 0x066C, // Est. Arabic Indic 181 0x0000, // Indic 182 0x0000, // Thai 183 0x0000, // Oriya 184 0x0000, // Marathi 185 0x0000, // Bengali 186 0x0000, // Punjabi 187 0x0000, // Gujarali 188 0x0000, // Tamil 189 0x0000, // Telugu 190 0x0000, // Kannada 191 0x0000, // Malayalam 192 0x0000, // Lao 193 0x0000, // Tibetan 194 0x0000, // Myammar 195 0x0000, // Cambodian (Khmer) 196 0x0000, // Mongolian 197 0x0000, // Hebrew 198 0x0000, // Nepali 199 0x0000, // Dzongkha 200 }; 201 202 #define NUMBER_ZERO NumberChar[NumberChar_HalfWidth][0] // 0x0030 203 #define NUMBER_ONE NumberChar[NumberChar_HalfWidth][1] // 0x0031 204 #define NUMBER_NINE NumberChar[NumberChar_HalfWidth][9] // 0x0039 205 #define isNumber(n) ( NUMBER_ZERO <= n && n <= NUMBER_NINE ) 206 #define isDecimal(n) ( n == DecimalChar[NumberChar_HalfWidth] ) 207 #define isMinus(n) ( n == MinusChar[NumberChar_HalfWidth] ) 208 #define isSeparator(n) ( n == SeparatorChar[NumberChar_HalfWidth] ) 209 210 const sal_Int16 Multiplier_Lower_zh = 0; 211 const sal_Int16 Multiplier_Upper_zh = 1; 212 const sal_Int16 Multiplier_Lower_zh_TW = 2; 213 const sal_Int16 Multiplier_Upper_zh_TW = 3; 214 const sal_Int16 Multiplier_Lower_ko = 4; 215 const sal_Int16 Multiplier_Hangul_ko = 5; 216 const sal_Int16 Multiplier_Modern_ja = 6; 217 const sal_Int16 Multiplier_Traditional_ja = 7; 218 const sal_Int16 Multiplier_Count = 8; 219 220 const sal_Int16 ExponentCount_6_CJK = 6; 221 222 static sal_Int16 MultiplierExponent_6_CJK[ExponentCount_6_CJK] = { 223 12, 8, 4, 3, 2, 1 224 }; 225 static sal_Unicode MultiplierChar_6_CJK[][ExponentCount_6_CJK] = { 226 {0x5146, 0x4EBF, 0x4E07, 0x5343, 0x767E, 0x5341}, // S. Chinese Lower 227 {0x5146, 0x4EBF, 0x4E07, 0x4EDF, 0x4F70, 0x62FE}, // S. Chinese Upper 228 {0x5146, 0x5104, 0x842C, 0x5343, 0x767E, 0x5341}, // T. Chinese Lower 229 {0x5146, 0x5104, 0x842C, 0x4EDF, 0x4F70, 0x62FE}, // T. Chinese & Korean Upper 230 {0x5146, 0x5104, 0x4E07, 0x5343, 0x767E, 0x5341}, // Korean Lower 231 {0xC870, 0xC5B5, 0xB9CC, 0xCC9C, 0xBC31, 0xC2ED}, // Korean Hangul 232 {0x5146, 0x5104, 0x4E07, 0x5343, 0x767E, 0x5341}, // Japanese Modern 233 {0x5146, 0x5104, 0x842C, 0x9621, 0x767E, 0x62FE} // Japanese Traditional 234 }; 235 236 const sal_Int16 ExponentCount_2_CJK = 2; 237 238 static sal_Int16 MultiplierExponent_2_CJK[ExponentCount_2_CJK] = { 239 8, 4, 240 }; 241 242 static sal_Unicode MultiplierChar_2_CJK[][ExponentCount_2_CJK] = { 243 {0x4EBF, 0x4E07}, // S. Chinese Lower 244 {0x4EBF, 0x4E07}, // S. Chinese Upper 245 {0x5104, 0x842C}, // T. Chinese Lower 246 {0x5104, 0x842C}, // T. Chinese & Korean Upper 247 {0x5104, 0x4E07}, // Korean Lower 248 {0xC5B5, 0xB9CC}, // Korean Hangul 249 {0x5104, 0x4E07}, // Japanese Modern 250 {0x5104, 0x842C} // Japanese Traditional 251 }; 252 253 const sal_Int16 ExponentCount_7_CJK = 7; 254 255 static sal_Int16 MultiplierExponent_7_CJK[ExponentCount_7_CJK] = { 256 16, 12, 8, 4, 3, 2, 1 257 }; 258 static sal_Unicode MultiplierChar_7_CJK[][ExponentCount_7_CJK] = { 259 {0x4EAC, 0x5146, 0x4EBF, 0x4E07, 0x5343, 0x767E, 0x5341}, // S. Chinese Lower 260 {0x4EAC, 0x5146, 0x4EBF, 0x4E07, 0x4EDF, 0x4F70, 0x62FE}, // S. Chinese Upper 261 {0x4EAC, 0x5146, 0x5104, 0x842C, 0x5343, 0x767E, 0x5341}, // T. Chinese Lower 262 {0x4EAC, 0x5146, 0x5104, 0x842C, 0x4EDF, 0x4F70, 0x62FE}, // T. Chinese & Korean Upper 263 {0x4EAC, 0x5146, 0x5104, 0x4E07, 0x5343, 0x767E, 0x5341}, // Korean Lower 264 {0x4EAC, 0xC870, 0xC5B5, 0xB9CC, 0xCC9C, 0xBC31, 0xC2ED}, // Korean Hangul 265 {0x4EAC, 0x5146, 0x5104, 0x4E07, 0x5343, 0x767E, 0x5341}, // Japanese Modern 266 {0x4EAC, 0x5146, 0x5104, 0x842C, 0x9621, 0x767E, 0x62FE} // Japanese Traditional 267 }; 268 269 typedef struct { 270 sal_Int16 ExponentCount; 271 sal_Int16* MultiplierExponent; 272 sal_Unicode *MultiplierChar; 273 } Multiplier; 274 275 } } } } 276 277 #endif // _L10N_TRANSLITERATION_NUMTOCHAR_H_ 278