]> gitweb.fperrin.net Git - Dictionary.git/blob - jars/icu4j-52_1/tools/misc/src/com/ibm/icu/dev/tool/compression/CompressionTableGenerator.java
Added flags.
[Dictionary.git] / jars / icu4j-52_1 / tools / misc / src / com / ibm / icu / dev / tool / compression / CompressionTableGenerator.java
1 /*
2  *******************************************************************************
3  * Copyright (C) 1996-2005, International Business Machines Corporation and    *
4  * others. All Rights Reserved.                                                *
5  *******************************************************************************
6  */
7 package com.ibm.icu.dev.tool.compression;
8
9
10 /**
11  * Utility class to generate the tables used by the SCSU interface and
12  * the UnicodeCompressor class.
13  *
14  * @author Stephen F. Booth
15  * @version 1.0 08 Mar 99
16  */
17 class CompressionTableGenerator
18 {
19     // duplicate of constants in SCSU
20
21     final static int LATININDEX                  = 0xF9;
22     final static int IPAEXTENSIONINDEX           = 0xFA;
23     final static int GREEKINDEX                  = 0xFB;
24     final static int ARMENIANINDEX               = 0xFC;
25     final static int HIRAGANAINDEX               = 0xFD;
26     final static int KATAKANAINDEX               = 0xFE;
27     final static int HALFWIDTHKATAKANAINDEX      = 0xFF;
28
29     final static int SDEFINEX                    = 0x0B;
30     final static int SRESERVED                   = 0x0C;  // reserved value
31     final static int SQUOTEU                     = 0x0E;
32     final static int SCHANGEU                    = 0x0F;
33
34     final static int SQUOTE0                     = 0x01;
35     final static int SQUOTE1                     = 0x02;
36     final static int SQUOTE2                     = 0x03;
37     final static int SQUOTE3                     = 0x04;
38     final static int SQUOTE4                     = 0x05;
39     final static int SQUOTE5                     = 0x06;
40     final static int SQUOTE6                     = 0x07;
41     final static int SQUOTE7                     = 0x08;
42
43     final static int SCHANGE0                    = 0x10;
44     final static int SCHANGE1                    = 0x11;
45     final static int SCHANGE2                    = 0x12;
46     final static int SCHANGE3                    = 0x13;
47     final static int SCHANGE4                    = 0x14;
48     final static int SCHANGE5                    = 0x15;
49     final static int SCHANGE6                    = 0x16;
50     final static int SCHANGE7                    = 0x17;
51
52     final static int SDEFINE0                    = 0x18;
53     final static int SDEFINE1                    = 0x19;
54     final static int SDEFINE2                    = 0x1A;
55     final static int SDEFINE3                    = 0x1B;
56     final static int SDEFINE4                    = 0x1C;
57     final static int SDEFINE5                    = 0x1D;
58     final static int SDEFINE6                    = 0x1E;
59     final static int SDEFINE7                    = 0x1F;
60
61     //==========================
62     // Unicode mode tags
63     //==========================
64     final static int UCHANGE0                    = 0xE0;
65     final static int UCHANGE1                    = 0xE1;
66     final static int UCHANGE2                    = 0xE2;
67     final static int UCHANGE3                    = 0xE3;
68     final static int UCHANGE4                    = 0xE4;
69     final static int UCHANGE5                    = 0xE5;
70     final static int UCHANGE6                    = 0xE6;
71     final static int UCHANGE7                    = 0xE7;
72
73     final static int UDEFINE0                    = 0xE8;
74     final static int UDEFINE1                    = 0xE9;
75     final static int UDEFINE2                    = 0xEA;
76     final static int UDEFINE3                    = 0xEB;
77     final static int UDEFINE4                    = 0xEC;
78     final static int UDEFINE5                    = 0xED;
79     final static int UDEFINE6                    = 0xEE;
80     final static int UDEFINE7                    = 0xEF;
81
82     final static int UQUOTEU                     = 0xF0;
83     final static int UDEFINEX                    = 0xF1;
84     final static int URESERVED                   = 0xF2;  // reserved value
85
86     final static int BLOCKSIZE = 0xFF;
87     
88     /**
89      * Generate the table used as sOffsetTable in SCSU.
90      * This table contains preformed indices so we can do array lookups 
91      * instead of calculations for speed during decompression.
92      */
93     static void printOffsetTable()
94     {
95         int     i           = 0;
96     int []    offsetTable = new int [ BLOCKSIZE + 1 ];
97
98         // 0x00 is reserved
99
100         // half blocks from U+0080 to U+3380
101         for( i = 0x01; i < 0x68; i++ )
102             offsetTable[i] = i * 0x80;
103     
104         // half blocks from U+E000 to U+FF80
105         for( i = 0x68; i < 0xA8; i++ )
106             offsetTable[i] = (i * 0x80) + 0xAC00;
107     
108         // 0xA8..0xF8 is reserved
109  
110         offsetTable[ LATININDEX ] = 0x00C0;
111         offsetTable[ IPAEXTENSIONINDEX ] = 0x0250;
112         offsetTable[ GREEKINDEX ] = 0x0370;
113         offsetTable[ ARMENIANINDEX ] = 0x0530;
114         offsetTable[ HIRAGANAINDEX ] = 0x3040;
115         offsetTable[ KATAKANAINDEX ] = 0x30A0;
116         offsetTable[ HALFWIDTHKATAKANAINDEX ] = 0xFF60;
117
118         // dump the generated table
119     System.out.println("static int [] sOffsetTable = {");
120         for(i = 0; i < offsetTable.length - 1; i++)
121             System.out.print("0x" + Integer.toHexString(offsetTable[i])
122                  + ", ");
123         for(i = offsetTable.length - 1; i < offsetTable.length; i++)
124             System.out.print("0x" + Integer.toHexString(offsetTable[i]));
125         System.out.println();
126         System.out.println("};");
127     }
128     
129     /**
130      * Generate the table used as sSingleTagTable in UnicodeCompressor.
131      * This table contains boolean values indicating if a byte is a
132      * single-byte mode tag.
133      */
134     static void printSingleTagTable()
135     {
136         int        i              = 0;
137     boolean [] singleTagTable = new boolean  [ BLOCKSIZE + 1 ];
138
139         for( i = 0x00; i <= BLOCKSIZE; i++ ) {
140             switch( i ) {
141         
142         case SQUOTEU:  case SCHANGEU: 
143         case SDEFINEX: case SRESERVED:
144         case SQUOTE0:  case SQUOTE1:  
145         case SQUOTE2:  case SQUOTE3:
146         case SQUOTE4:  case SQUOTE5:  
147         case SQUOTE6:  case SQUOTE7:
148         case SCHANGE0: case SCHANGE1: 
149         case SCHANGE2: case SCHANGE3:
150         case SCHANGE4: case SCHANGE5: 
151         case SCHANGE6: case SCHANGE7:
152         case SDEFINE0: case SDEFINE1: 
153         case SDEFINE2: case SDEFINE3:
154         case SDEFINE4: case SDEFINE5: 
155         case SDEFINE6: case SDEFINE7:
156         singleTagTable[i] = true;
157                 break;
158         
159         default:
160         singleTagTable[i] = false;
161                 break;
162             }
163         }
164     
165         // dump the generated table
166         System.out.println("private static boolean [] sSingleTagTable = {");
167         for(i = 0; i < singleTagTable.length - 1; i++)
168             System.out.print(singleTagTable[i] + ", ");
169         for(i = singleTagTable.length - 1; i < singleTagTable.length; i++)
170             System.out.print(singleTagTable[i]);
171         System.out.println();
172         System.out.println("};");
173     }
174     
175     
176     /**
177      * Generate the table used as sUnicodeTagTable in 
178      * This table contains boolean values indicating if a byte is a
179      * unicode mode tag.
180      */
181     static void printUnicodeTagTable()
182     {
183         int        i               = 0;
184     boolean [] unicodeTagTable = new boolean  [ BLOCKSIZE + 1 ];
185
186         for( i = 0x00; i <= BLOCKSIZE; i++ ) {
187             switch( i ) {
188         case UQUOTEU:  case UDEFINEX: 
189         case URESERVED:
190         case UCHANGE0: case UCHANGE1: 
191         case UCHANGE2: case UCHANGE3:
192         case UCHANGE4: case UCHANGE5: 
193         case UCHANGE6: case UCHANGE7:
194         case UDEFINE0: case UDEFINE1: 
195         case UDEFINE2: case UDEFINE3:
196         case UDEFINE4: case UDEFINE5: 
197         case UDEFINE6: case UDEFINE7:
198         unicodeTagTable[i] = true;
199                 break;
200         
201         default:
202         unicodeTagTable[i] = false;
203                 break;
204             }
205         }
206     
207         // dump the generated table
208         System.out.println("private static boolean [] sUnicodeTagTable = {");
209         for(i = 0; i < unicodeTagTable.length - 1; i++)
210             System.out.print(unicodeTagTable[i] + ", ");
211         for(i = unicodeTagTable.length - 1; i < unicodeTagTable.length; i++)
212             System.out.print(unicodeTagTable[i]);
213         System.out.println();
214         System.out.println("};");
215     }
216     
217     public static void main(String[] argv)
218     {
219         printOffsetTable();
220         printSingleTagTable();
221         printUnicodeTagTable();
222     }
223 }