]> gitweb.fperrin.net Git - Dictionary.git/blob - jars/icu4j-4_4_2-src/tools/misc/src/com/ibm/icu/dev/tool/layout/ThaiCharacterClasses.java
go
[Dictionary.git] / jars / icu4j-4_4_2-src / tools / misc / src / com / ibm / icu / dev / tool / layout / ThaiCharacterClasses.java
1 /*\r
2  *******************************************************************************\r
3  * Copyright (C) 1998-2010, International Business Machines Corporation and    *\r
4  * others. All Rights Reserved.                                                *\r
5  *******************************************************************************\r
6  *\r
7  * Created on Dec 09, 2003\r
8  *\r
9  *******************************************************************************\r
10  */\r
11 package com.ibm.icu.dev.tool.layout;\r
12 \r
13 import java.io.PrintStream;\r
14 \r
15 import com.ibm.icu.impl.Utility;\r
16 \r
17 public class ThaiCharacterClasses\r
18 {\r
19     public static final int NON    =  0;\r
20     public static final int CON    =  1;\r
21     public static final int COA    =  2;\r
22     public static final int COD    =  3;\r
23     public static final int LVO =  4;\r
24     public static final int FV1    =  5;\r
25     public static final int FV2    =  6;\r
26     public static final int FV3    =  7;\r
27     public static final int BV1    =  8;\r
28     public static final int BV2    =  9;\r
29     public static final int BDI = 10;\r
30     public static final int TON    = 11;\r
31     public static final int AD1    = 12;\r
32     public static final int AD2    = 13;\r
33     public static final int AD3    = 14;\r
34     public static final int NIK    = 15;\r
35     public static final int AV1    = 16;\r
36     public static final int AV2    = 17;\r
37     public static final int AV3    = 18;\r
38     public static final int cCount = 19;\r
39 \r
40     // Indexed by unicode - '\u0E00'\r
41     // FIXME: MS Fonts - Should 0E2E has no ascender (it does in WT font)\r
42     // FIXME: MS Fonts - 0E47 (MAITAIKHU) and 0E4D (NIKHAHIT) only have vowel forms\r
43     // FIXME: MS Fonts - 0E4E (YAMAKKAN) only has one form\r
44     private static final int classTable[] = {\r
45     //       0    1    2    3    4    5    6    7    8    9    A    B    C    D    E    F\r
46     //       -------------------------------------------------------------------------------\r
47     /*0E00*/ NON, CON, CON, CON, CON, CON, CON, CON, CON, CON, CON, CON, CON, COD, COD, COD, \r
48     /*0E10*/ COD, CON, CON, CON, CON, CON, CON, CON, CON, CON, CON, COA, CON, COA, CON, COA, \r
49     /*0E20*/ CON, CON, CON, CON, FV3, CON, FV3, CON, CON, CON, CON, CON, CON, CON, CON, NON, \r
50     /*0E30*/ FV1, AV2, FV1, FV1, AV1, AV3, AV2, AV3, BV1, BV2, BDI, NON, NON, NON, NON, NON, \r
51     /*0E40*/ LVO, LVO, LVO, LVO, LVO, FV2, NON, AD2, TON, TON, TON, TON, AD1, NIK, AD3, NON, \r
52     /*0E50*/ NON, NON, NON, NON, NON, NON, NON, NON, NON, NON, NON, NON\r
53     };\r
54 \r
55     private static String[] classNames =\r
56     {\r
57         "NON",\r
58         "CON",\r
59         "COA",\r
60         "COD",\r
61         "LVO",\r
62         "FV1",\r
63         "FV2",\r
64         "FV3",\r
65         "BV1",\r
66         "BV2",\r
67         "BDI",\r
68         "TON",\r
69         "AD1",\r
70         "AD2",\r
71         "AD3",\r
72         "NIK",\r
73         "AV1",\r
74         "AV2",\r
75         "AV3"\r
76     };\r
77 \r
78     private static final char pairTable[][] = {\r
79       //------------------------------------------------------------------------------------------------\r
80       //  N    C    C    C    L    F    F    F    B    B    B    T    A    A    A    N    A    A    A\r
81       //  O    O    O    O    V    V    V    V    V    V    D    O    D    D    D    I    V    V    V\r
82       //  N    N    A    D    O    1    2    3    1    2    I    N    1    2    3    K    1    2    3\r
83       //------------------------------------------------------------------------------------------------\r
84 /*NON*/ {'A', 'A', 'A', 'A', 'A', 'S', 'S', 'A', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R'},\r
85 /*CON*/ {'A', 'A', 'A', 'A', 'A', 'A', 'S', 'A', 'C', 'C', 'C', 'E', 'E', 'E', 'C', 'E', 'C', 'C', 'C'},\r
86 /*COA*/ {'A', 'A', 'A', 'A', 'A', 'A', 'S', 'A', 'C', 'C', 'C', 'F', 'F', 'F', 'D', 'F', 'D', 'D', 'D'},\r
87 /*COD*/ {'A', 'A', 'A', 'A', 'A', 'A', 'S', 'A', 'H', 'H', 'H', 'E', 'E', 'E', 'C', 'E', 'C', 'C', 'C'},\r
88 /*LVO*/ {'S', 'A', 'A', 'A', 'S', 'S', 'S', 'S', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R'},\r
89 /*FV1*/ {'S', 'A', 'A', 'A', 'A', 'S', 'S', 'A', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R'},\r
90 /*FV2*/ {'A', 'A', 'A', 'A', 'A', 'A', 'S', 'A', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R'},\r
91 /*FV3*/ {'A', 'A', 'A', 'A', 'A', 'S', 'A', 'S', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R'},\r
92 /*BV1*/ {'A', 'A', 'A', 'A', 'A', 'S', 'S', 'A', 'R', 'R', 'R', 'E', 'E', 'R', 'R', 'E', 'R', 'R', 'R'},\r
93 /*BV2*/ {'A', 'A', 'A', 'A', 'A', 'S', 'S', 'A', 'R', 'R', 'R', 'E', 'R', 'R', 'R', 'R', 'R', 'R', 'R'},\r
94 /*BDI*/ {'A', 'A', 'A', 'A', 'A', 'S', 'S', 'A', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R'},\r
95 /*TON*/ {'A', 'A', 'A', 'A', 'A', 'I', 'A', 'A', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R'},\r
96 /*AD1*/ {'A', 'A', 'A', 'A', 'A', 'S', 'S', 'A', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R'},\r
97 /*AD2*/ {'A', 'A', 'A', 'A', 'A', 'S', 'S', 'A', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R'},\r
98 /*AD3*/ {'A', 'A', 'A', 'A', 'A', 'S', 'S', 'A', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R', 'R'},\r
99 /*NIK*/ {'A', 'A', 'A', 'A', 'A', 'S', 'S', 'A', 'R', 'R', 'R', 'G', 'G', 'R', 'R', 'R', 'R', 'R', 'R'},\r
100 /*AV1*/ {'A', 'A', 'A', 'A', 'A', 'S', 'S', 'A', 'R', 'R', 'R', 'G', 'G', 'R', 'R', 'G', 'R', 'R', 'R'},\r
101 /*AV2*/ {'A', 'A', 'A', 'A', 'A', 'S', 'S', 'A', 'R', 'R', 'R', 'G', 'R', 'R', 'R', 'R', 'R', 'R', 'R'},\r
102 /*AV3*/ {'A', 'A', 'A', 'A', 'A', 'S', 'S', 'A', 'R', 'R', 'R', 'G', 'R', 'G', 'R', 'R', 'R', 'R', 'R'}\r
103     };\r
104 \r
105     public static int getCharClass(char ch)\r
106     {\r
107         int charClass = NON;\r
108         \r
109         if (ch >= '\u0E00' && ch <= '\u0E5B') {\r
110             charClass = classTable[ch - '\u0E00'];\r
111         }\r
112         \r
113         return charClass;\r
114     }\r
115     \r
116     public static String getClassName(int classID)\r
117     {\r
118         if (classID < 0 || classID >= cCount) {\r
119             return "***";\r
120         }\r
121         \r
122         return classNames[classID];\r
123     }\r
124     \r
125     public static char getPairAction(int prevClass, int currClass)\r
126     {\r
127         if (prevClass < 0 || prevClass >= cCount |\r
128             currClass < 0 || currClass >= cCount) {\r
129             return 'A';\r
130         }\r
131             \r
132         return pairTable[prevClass][currClass];\r
133     }\r
134     \r
135     private static String classTableHeader =\r
136 "const le_uint8 ThaiShaping::classTable[] = {\n" +\r
137 "    //       0    1    2    3    4    5    6    7    8    9    A    B    C    D    E    F\n" +\r
138 "    //       -------------------------------------------------------------------------------";\r
139     \r
140     public static void writeClassTable(PrintStream output)\r
141     {\r
142         System.out.print("Writing class table...");\r
143         \r
144         output.print(classTableHeader);\r
145         \r
146         for (char ch = '\u0E00'; ch <= '\u0E5B'; ch += 1) {\r
147             int charClass = getCharClass(ch);\r
148             \r
149             if ((ch & 0x000F) == 0) {\r
150                 output.print("\n    /*" + Utility.hex(ch, 4) + "*/ ");\r
151             }\r
152             \r
153             output.print(getClassName(charClass));\r
154             \r
155             if (ch < '\u0E5B') {\r
156                 output.print(", ");\r
157             } else {\r
158                 output.print("\n};\n\n");\r
159             }\r
160         }\r
161         \r
162         System.out.println(" done.");\r
163     }\r
164     \r
165 }\r