2 *******************************************************************************
3 * Copyright (C) 1996-2005, International Business Machines Corporation and *
4 * others. All Rights Reserved. *
5 *******************************************************************************
7 package com.ibm.icu.dev.tool.compression;
11 * Utility class to generate the tables used by the SCSU interface and
12 * the UnicodeCompressor class.
14 * @author Stephen F. Booth
15 * @version 1.0 08 Mar 99
17 class CompressionTableGenerator
19 // duplicate of constants in SCSU
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;
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;
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;
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;
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;
61 //==========================
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;
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;
82 final static int UQUOTEU = 0xF0;
83 final static int UDEFINEX = 0xF1;
84 final static int URESERVED = 0xF2; // reserved value
86 final static int BLOCKSIZE = 0xFF;
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.
93 static void printOffsetTable()
96 int [] offsetTable = new int [ BLOCKSIZE + 1 ];
100 // half blocks from U+0080 to U+3380
101 for( i = 0x01; i < 0x68; i++ )
102 offsetTable[i] = i * 0x80;
104 // half blocks from U+E000 to U+FF80
105 for( i = 0x68; i < 0xA8; i++ )
106 offsetTable[i] = (i * 0x80) + 0xAC00;
108 // 0xA8..0xF8 is reserved
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;
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])
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("};");
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.
134 static void printSingleTagTable()
137 boolean [] singleTagTable = new boolean [ BLOCKSIZE + 1 ];
139 for( i = 0x00; i <= BLOCKSIZE; i++ ) {
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;
160 singleTagTable[i] = false;
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("};");
177 * Generate the table used as sUnicodeTagTable in
178 * This table contains boolean values indicating if a byte is a
181 static void printUnicodeTagTable()
184 boolean [] unicodeTagTable = new boolean [ BLOCKSIZE + 1 ];
186 for( i = 0x00; i <= BLOCKSIZE; i++ ) {
188 case UQUOTEU: case UDEFINEX:
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;
202 unicodeTagTable[i] = false;
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("};");
217 public static void main(String[] argv)
220 printSingleTagTable();
221 printUnicodeTagTable();