1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: numberchar.h,v $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
30 #ifndef _L10N_TRANSLITERATION_NUMTOCHAR_H_
31 #define _L10N_TRANSLITERATION_NUMTOCHAR_H_
33 namespace com
{ namespace sun
{ namespace star
{ namespace i18n
{
35 static const sal_Int16 NumberChar_HalfWidth
= 0;
36 static const sal_Int16 NumberChar_FullWidth
= 1;
37 static const sal_Int16 NumberChar_Lower_zh
= 2;
38 static const sal_Int16 NumberChar_Upper_zh
= 3;
39 static const sal_Int16 NumberChar_Upper_zh_TW
= 4;
40 static const sal_Int16 NumberChar_Modern_ja
= 5;
41 static const sal_Int16 NumberChar_Traditional_ja
= 6;
42 static const sal_Int16 NumberChar_Lower_ko
= 7;
43 static const sal_Int16 NumberChar_Upper_ko
= 8;
44 static const sal_Int16 NumberChar_Hangul_ko
= 9;
45 static const sal_Int16 NumberChar_Indic_ar
= 10;
46 static const sal_Int16 NumberChar_EastIndic_ar
= 11;
47 static const sal_Int16 NumberChar_Indic_hi
= 12;
48 static const sal_Int16 NumberChar_th
= 13;
49 static const sal_Int16 NumberChar_Count
= 14;
51 static const sal_Unicode NumberChar
[][10] = {
52 // 0 1 2 3 4 5 6 7 8 9
53 { 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039 }, // Half Width (Ascii)
54 { 0xFF10, 0xFF11, 0xFF12, 0xFF13, 0xFF14, 0xFF15, 0xFF16, 0xFF17, 0xFF18, 0xFF19 }, // Full Width
55 { 0x3007, 0x4E00, 0x4E8c, 0x4E09, 0x56DB, 0x4E94, 0x516D, 0x4E03, 0x516B, 0x4E5D }, // Chinese Lower
56 { 0x96F6, 0x58F9, 0x8D30, 0x53C1, 0x8086, 0x4F0D, 0x9646, 0x67D2, 0x634C, 0x7396 }, // S. Chinese Upper
57 { 0x96F6, 0x58F9, 0x8CB3, 0x53C3, 0x8086, 0x4F0D, 0x9678, 0x67D2, 0x634C, 0x7396 }, // T. Chinese Upper
58 { 0x3007, 0x4E00, 0x4E8C, 0x4E09, 0x56DB, 0x4E94, 0x516D, 0x4E03, 0x516B, 0x4E5D }, // Japanese Modern
59 { 0x96F6, 0x58F1, 0x5F10, 0x53C2, 0x56DB, 0x4F0D, 0x516D, 0x4E03, 0x516B, 0x4E5D }, // Japanese Trad.
60 { 0x3007, 0x4E00, 0x4E8C, 0x4E09, 0x56DB, 0x4E94, 0x516D, 0x4E03, 0x516B, 0x4E5D }, // Korean Lower
61 { 0xF9B2, 0x58F9, 0x8CB3, 0x53C3, 0x56DB, 0x4E94, 0x516D, 0x4E03, 0x516B, 0x4E5D }, // Korean Upper
62 { 0xC601, 0xC77C, 0xC774, 0xC0BC, 0xC0AC, 0xC624, 0xC721, 0xCE60, 0xD314, 0xAD6C }, // Korean Hangul
63 { 0x0660, 0x0661, 0x0662, 0x0663, 0x0664, 0x0665, 0x0666, 0x0667, 0x0668, 0x0669 }, // Arabic Indic
64 { 0x06F0, 0x06F1, 0x06F2, 0x06F3, 0x06F4, 0x06F5, 0x06F6, 0x06F7, 0x06F8, 0x06F9 }, // Est. Arabic Indic
65 { 0x0966, 0x0967, 0x0968, 0x0969, 0x096A, 0x096B, 0x096C, 0x096D, 0x096E, 0x096F }, // Indic
66 { 0x0E50, 0x0E51, 0x0E52, 0x0E53, 0x0E54, 0x0E55, 0x0E56, 0x0E57, 0x0E58, 0x0E59 } // Thai
71 static sal_Unicode DecimalChar
[] = {
72 0x002E, // Half Width (Ascii)
74 0xFF0E, // Chinese Lower
75 0x70B9, // S. Chinese Upper
76 0x9EDE, // T. Chinese Upper
77 0x30FB, // Japanese Modern
78 0x30FB, // Japanese Trad.
79 0xFF0E, // Korean Lower
80 0x9EDE, // Korean Upper
81 0xC810, // Korean Hangul
82 0x066B, // Arabic Indic
83 0x002E, // Est. Arabic Indic
91 static sal_Unicode MinusChar
[] = {
92 0x002D, // Half Width (Ascii)
94 0xFF0D, // Chinese Lower
95 0x8D1F, // S. Chinese Upper
96 0x5069, // T. Chinese Upper
97 0x2212, // Japanese Modern
98 0x2212, // Japanese Trad.
99 0xFF0D, // Korean Lower
100 0x5069, // Korean Upper
101 0xFF0D, // Korean Hangul ???
102 0x002D, // Arabic Indic
103 0x002D, // Est. Arabic Indic
109 #define NUMBER_ZERO NumberChar[NumberChar_HalfWidth][0] // 0x0030
110 #define NUMBER_ONE NumberChar[NumberChar_HalfWidth][1] // 0x0031
111 #define NUMBER_NINE NumberChar[NumberChar_HalfWidth][9] // 0x0039
112 #define NUMBER_DECIMAL DecimalChar[0]
113 #define NUMBER_MINUS MinusChar[0]
114 #define isNumber(n) ( NUMBER_ZERO <= n && n <= NUMBER_NINE )
115 #define isDecimal(n) ( n == NUMBER_DECIMAL )
116 #define isMinus(n) ( n == NUMBER_MINUS )
118 const sal_Int16 Multiplier_Lower_zh
= 0;
119 const sal_Int16 Multiplier_Upper_zh
= 1;
120 const sal_Int16 Multiplier_Lower_zh_TW
= 2;
121 const sal_Int16 Multiplier_Upper_zh_TW
= 3;
122 const sal_Int16 Multiplier_Hangul_ko
= 4;
123 const sal_Int16 Multiplier_Modern_ja
= 5;
124 const sal_Int16 Multiplier_Traditional_ja
= 6;
125 const sal_Int16 Multiplier_Count
= 7;
127 const sal_Int16 ExponentCount_CJK
= 6;
131 static sal_Int16 MultiplierExponent_CJK
[ExponentCount_CJK
] = {
134 static sal_Unicode MultiplierChar_CJK
[][ExponentCount_CJK
] = {
135 0x5146, 0x4EBF, 0x4E07, 0x5343, 0x767E, 0x5341, // S. Chinese Lower
136 0x5146, 0x4EBF, 0x4E07, 0x4EDF, 0x4F70, 0x62FE, // S. Chinese Upper
137 0x5146, 0x5104, 0x842C, 0x5343, 0x767E, 0x5341, // T. Chinese & Korean Lower
138 0x5146, 0x5104, 0x842C, 0x4EDF, 0x4F70, 0x62FE, // T. Chinese & Korean Upper
139 0xC870, 0xC5B5, 0xB9CC, 0xCC9C, 0xBC31, 0xC2ED, // Korean Hangul
140 0x5146, 0x5104, 0x4E07, 0x5343, 0x767E, 0x5341, // Japanese Modern
141 0x5146, 0x5104, 0x842C, 0x9621, 0x767E, 0x62FE, // Japanese Traditional
145 const sal_Int16 ExponentCount_short_CJK
= 2;
149 static sal_Int16 MultiplierExponent_short_CJK
[ExponentCount_short_CJK
] = {
153 static sal_Unicode MultiplierChar_short_CJK
[][ExponentCount_short_CJK
] = {
154 0x4EBF, 0x4E07, // S. Chinese Lower
155 0x4EBF, 0x4E07, // S. Chinese Upper
156 0x5104, 0x842C, // T. Chinese & Korean Lower
157 0x5104, 0x842C, // T. Chinese & Korean Upper
158 0xC5B5, 0xB9CC, // Korean Hangul
159 0x5104, 0x4E07, // Japanese Modern
160 0x5104, 0x842C, // Japanese Traditional
166 #endif // _L10N_TRANSLITERATION_NUMTOCHAR_H_