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