]> gitweb.fperrin.net Git - Dictionary.git/blob - jars/icu4j-4_2_1-src/src/com/ibm/icu/dev/tool/layout/ScriptRunModuleWriter.java
go
[Dictionary.git] / jars / icu4j-4_2_1-src / src / com / ibm / icu / dev / tool / layout / ScriptRunModuleWriter.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 package com.ibm.icu.dev.tool.layout;\r
8 \r
9 import java.util.*;\r
10 import com.ibm.icu.impl.Utility;\r
11 \r
12 public class ScriptRunModuleWriter extends ScriptModuleWriter\r
13 {\r
14     public ScriptRunModuleWriter(ScriptData theScriptData)\r
15     {\r
16         super(theScriptData, null);\r
17     }\r
18     \r
19     public void writeScriptRuns(String fileName)\r
20     {\r
21         int minScript   = scriptData.getMinValue();\r
22         int maxScript   = scriptData.getMaxValue();\r
23         int recordCount = scriptData.getRecordCount();\r
24         \r
25         openFile(fileName);\r
26         writeHeader(null, includeFiles);\r
27         output.println(preamble);\r
28         \r
29         for (int record = 0; record < recordCount; record += 1) {\r
30             int script = scriptData.getRecord(record).scriptCode();\r
31             \r
32             output.print("    {0x");\r
33             output.print(Utility.hex(scriptData.getRecord(record).startChar(), 6));\r
34             output.print(", 0x");\r
35             output.print(Utility.hex(scriptData.getRecord(record).endChar(), 6));\r
36             output.print(", ");\r
37             output.print(scriptData.getTag(script));\r
38             output.print("ScriptCode}");\r
39             output.print((record == recordCount - 1) ? " " : ",");\r
40             output.print(" // ");\r
41             output.println(scriptData.getName(script));\r
42         }\r
43         \r
44         output.println(postamble);\r
45         \r
46         int power = 1 << Utility.highBit(recordCount);\r
47         int extra = recordCount - power;\r
48         \r
49         output.print("le_int32 ScriptRun::scriptRecordsPower = 0x");\r
50         output.print(Utility.hex(power, 4));\r
51         output.println(";");\r
52         \r
53         \r
54         output.print("le_int32 ScriptRun::scriptRecordsExtra = 0x");\r
55         output.print(Utility.hex(extra, 4));\r
56         output.println(";");\r
57 \r
58         Vector[] scriptRangeOffsets = new Vector[maxScript - minScript + 1];\r
59         \r
60         for (int script = minScript; script <= maxScript; script += 1) {\r
61             scriptRangeOffsets[script - minScript] = new Vector();\r
62         }\r
63         \r
64         for (int record = 0; record < recordCount; record += 1) {\r
65             scriptRangeOffsets[scriptData.getRecord(record).scriptCode() - minScript].addElement(new Integer(record));\r
66         }\r
67         \r
68         output.println();\r
69         \r
70         for (int script = minScript; script <= maxScript; script += 1) {\r
71             Vector offsets = scriptRangeOffsets[script - minScript];\r
72             \r
73             output.print("le_int16 ");\r
74             output.print(scriptData.getTag(script));\r
75             output.println("ScriptRanges[] = {");\r
76             output.print("    ");\r
77             \r
78             for (int offset = 0; offset < offsets.size(); offset += 1) {\r
79                 Integer i = (Integer) offsets.elementAt(offset);\r
80                 \r
81                 output.print(i.intValue());\r
82                 output.print(", ");\r
83             }\r
84             \r
85             output.println("-1");\r
86             output.println(postamble);\r
87         }\r
88         \r
89         output.println("le_int16 *ScriptRun::scriptRangeOffsets[] = {");\r
90         \r
91         for (int script = minScript; script <= maxScript; script += 1) {\r
92             output.print("    ");\r
93             output.print(scriptData.getTag(script));\r
94             output.print("ScriptRanges");\r
95             output.print(script == maxScript? "  " : ", ");\r
96             output.print("// ");\r
97             output.println(scriptData.getName(script));\r
98         }\r
99         \r
100         output.println(postamble);\r
101         \r
102         writeTrailer();\r
103         closeFile();\r
104     }\r
105     \r
106     private static final String[] includeFiles = {"LETypes.h", "LEScripts.h", "ScriptRun.h"};\r
107     \r
108     private static final String preamble = \r
109     "\n" +\r
110     "ScriptRecord ScriptRun::scriptRecords[] = {";\r
111     \r
112     private static final String postamble =\r
113     "};\n";\r
114 }