]> gitweb.fperrin.net Git - Dictionary.git/blob - jars/icu4j-4_2_1-src/src/com/ibm/icu/impl/duration/impl/DataRecord.java
icu4jsrc
[Dictionary.git] / jars / icu4j-4_2_1-src / src / com / ibm / icu / impl / duration / impl / DataRecord.java
1 /*\r
2 ******************************************************************************\r
3 * Copyright (C) 2007, International Business Machines Corporation and   *\r
4 * others. All Rights Reserved.                                               *\r
5 ******************************************************************************\r
6 */\r
7 \r
8 package com.ibm.icu.impl.duration.impl;\r
9 \r
10 import java.util.*;\r
11 \r
12 /**\r
13  * DataRecord contains the data used by PeriodFormatterData.  Fields\r
14  * are package-private for ease of access.  This is a struct, it knows\r
15  * how to read and write itself to/from simple XML, that's all.\r
16  */\r
17 public class DataRecord {\r
18   byte pl;\r
19   String[][] pluralNames;\r
20   byte[] genders; // EGender\r
21   String[] singularNames;\r
22   String[] halfNames;\r
23   String[] numberNames;\r
24   String[] mediumNames;\r
25   String[] shortNames;\r
26   String[] measures;\r
27   String[] rqdSuffixes;\r
28   String[] optSuffixes;\r
29   String[] halves;\r
30   byte[] halfPlacements; // EHalfPlacement\r
31   byte[] halfSupport; // EHalfSupport\r
32   String fifteenMinutes;\r
33   String fiveMinutes;\r
34   boolean requiresDigitSeparator;\r
35   String digitPrefix;\r
36   String countSep;\r
37   String shortUnitSep;\r
38   String[] unitSep;\r
39   boolean[] unitSepRequiresDP;\r
40   boolean[] requiresSkipMarker;\r
41   byte numberSystem; // ENumberSystem\r
42   char zero;\r
43   char decimalSep;\r
44   boolean omitSingularCount;\r
45   boolean omitDualCount;\r
46   byte zeroHandling; // EZeroHandling\r
47   byte decimalHandling; // EDecimalHandling\r
48   byte fractionHandling; // EFractionHandling\r
49   String skippedUnitMarker;\r
50   boolean allowZero;\r
51   boolean weeksAloneOnly;\r
52   byte useMilliseconds; // EMilliSupport\r
53   ScopeData[] scopeData;\r
54 \r
55   public static DataRecord read(String ln, RecordReader in) {\r
56     if (in.open("DataRecord")) {\r
57       DataRecord record = new DataRecord();\r
58       record.pl = in.namedIndex("pl", EPluralization.names);\r
59       record.pluralNames = in.stringTable("pluralName");\r
60       record.genders = in.namedIndexArray("gender", EGender.names);\r
61       record.singularNames = in.stringArray("singularName");\r
62       record.halfNames = in.stringArray("halfName");\r
63       record.numberNames = in.stringArray("numberName");\r
64       record.mediumNames = in.stringArray("mediumName");\r
65       record.shortNames = in.stringArray("shortName");\r
66       record.measures = in.stringArray("measure");\r
67       record.rqdSuffixes = in.stringArray("rqdSuffix");\r
68       record.optSuffixes = in.stringArray("optSuffix");\r
69       record.halves = in.stringArray("halves");\r
70       record.halfPlacements = in.namedIndexArray("halfPlacement", EHalfPlacement.names);\r
71       record.halfSupport = in.namedIndexArray("halfSupport", EHalfSupport.names);\r
72       record.fifteenMinutes = in.string("fifteenMinutes");\r
73       record.fiveMinutes = in.string("fiveMinutes");\r
74       record.requiresDigitSeparator = in.bool("requiresDigitSeparator");\r
75       record.digitPrefix = in.string("digitPrefix");\r
76       record.countSep = in.string("countSep");\r
77       record.shortUnitSep = in.string("shortUnitSep");\r
78       record.unitSep = in.stringArray("unitSep");\r
79       record.unitSepRequiresDP = in.boolArray("unitSepRequiresDP");\r
80       record.requiresSkipMarker = in.boolArray("requiresSkipMarker");\r
81       record.numberSystem = in.namedIndex("numberSystem", ENumberSystem.names);\r
82       record.zero = in.character("zero");\r
83       record.decimalSep = in.character("decimalSep");\r
84       record.omitSingularCount = in.bool("omitSingularCount");\r
85       record.omitDualCount = in.bool("omitDualCount");\r
86       record.zeroHandling = in.namedIndex("zeroHandling", EZeroHandling.names);\r
87       record.decimalHandling = in.namedIndex("decimalHandling", EDecimalHandling.names);\r
88       record.fractionHandling = in.namedIndex("fractionHandling", EFractionHandling.names);\r
89       record.skippedUnitMarker = in.string("skippedUnitMarker");\r
90       record.allowZero = in.bool("allowZero");\r
91       record.weeksAloneOnly = in.bool("weeksAloneOnly");\r
92       record.useMilliseconds = in.namedIndex("useMilliseconds", EMilliSupport.names);\r
93       if (in.open("ScopeDataList")) {\r
94         List list = new ArrayList(); // of ScopeData\r
95         ScopeData data;\r
96         while (null != (data = ScopeData.read(in))) {\r
97           list.add(data);\r
98         }\r
99         if (in.close()) {\r
100           record.scopeData = (ScopeData[]) list.toArray(new ScopeData[list.size()]);\r
101         }\r
102       }\r
103       \r
104       if (in.close()) {\r
105         return record;\r
106       }\r
107     } else {\r
108         throw new InternalError("did not find DataRecord while reading " + ln);\r
109     }\r
110     throw new InternalError("null data read while reading "+ln);\r
111 //    Thread.dumpStack();\r
112 //    return null;\r
113   }\r
114 \r
115   public void write(RecordWriter out) {\r
116     out.open("DataRecord");\r
117     out.namedIndex("pl", EPluralization.names, pl);\r
118     out.stringTable("pluralName", pluralNames);\r
119     out.namedIndexArray("gender", EGender.names, genders);\r
120     out.stringArray("singularName", singularNames);\r
121     out.stringArray("halfName", halfNames);\r
122     out.stringArray("numberName", numberNames);\r
123     out.stringArray("mediumName", mediumNames);\r
124     out.stringArray("shortName", shortNames);\r
125     out.stringArray("measure", measures);\r
126     out.stringArray("rqdSuffix", rqdSuffixes);\r
127     out.stringArray("optSuffix", optSuffixes);\r
128     out.stringArray("halves", halves);\r
129     out.namedIndexArray("halfPlacement", EHalfPlacement.names, halfPlacements);\r
130     out.namedIndexArray("halfSupport", EHalfSupport.names, halfSupport);\r
131     out.string("fifteenMinutes", fifteenMinutes);\r
132     out.string("fiveMinutes", fiveMinutes);\r
133     out.bool("requiresDigitSeparator", requiresDigitSeparator);\r
134     out.string("digitPrefix", digitPrefix);\r
135     out.string("countSep", countSep);\r
136     out.string("shortUnitSep", shortUnitSep);\r
137     out.stringArray("unitSep", unitSep);\r
138     out.boolArray("unitSepRequiresDP", unitSepRequiresDP);\r
139     out.boolArray("requiresSkipMarker", requiresSkipMarker);\r
140     out.namedIndex("numberSystem", ENumberSystem.names, numberSystem);\r
141     out.character("zero", zero);\r
142     out.character("decimalSep", decimalSep);\r
143     out.bool("omitSingularCount", omitSingularCount);\r
144     out.bool("omitDualCount", omitDualCount);\r
145     out.namedIndex("zeroHandling", EZeroHandling.names, zeroHandling);\r
146     out.namedIndex("decimalHandling", EDecimalHandling.names, decimalHandling);\r
147     out.namedIndex("fractionHandling", EFractionHandling.names, fractionHandling);\r
148     out.string("skippedUnitMarker", skippedUnitMarker);\r
149     out.bool("allowZero", allowZero);\r
150     out.bool("weeksAloneOnly", weeksAloneOnly);\r
151     out.namedIndex("useMilliseconds", EMilliSupport.names, useMilliseconds);\r
152     if (scopeData != null) {\r
153       out.open("ScopeDataList");\r
154       for (int i = 0; i < scopeData.length; ++i) {\r
155         scopeData[i].write(out);\r
156       }\r
157       out.close();\r
158     }\r
159     out.close();\r
160   }\r
161 \r
162   public static class ScopeData {\r
163     String prefix;\r
164     boolean requiresDigitPrefix;\r
165     String suffix;\r
166 \r
167     public void write(RecordWriter out)  {\r
168       out.open("ScopeData");\r
169       out.string("prefix", prefix);\r
170       out.bool("requiresDigitPrefix", requiresDigitPrefix);\r
171       out.string("suffix", suffix);\r
172       out.close();\r
173     }\r
174 \r
175     public static ScopeData read(RecordReader in) {\r
176       if (in.open("ScopeData")) {\r
177         ScopeData scope = new ScopeData();\r
178         scope.prefix = in.string("prefix");\r
179         scope.requiresDigitPrefix = in.bool("requiresDigitPrefix");\r
180         scope.suffix = in.string("suffix");\r
181         if (in.close()) {\r
182           return scope;\r
183         }\r
184       }\r
185       return null;\r
186     }\r
187   }\r
188 \r
189   public static interface ETimeLimit { \r
190     public static final byte NOLIMIT = 0;\r
191     public static final byte LT = 1;\r
192     public static final byte MT = 2;\r
193     public static final String[] names = { "NOLIMIT", "LT", "MT" };\r
194   }\r
195 \r
196   public static interface ETimeDirection { \r
197     public static final byte NODIRECTION = 0;\r
198     public static final byte PAST = 1;\r
199     public static final byte FUTURE = 2;\r
200     public static final String[] names = { "NODIRECTION", "PAST", "FUTURE" };\r
201   }\r
202 \r
203   public static interface EUnitVariant { \r
204     public static final byte PLURALIZED = 0;\r
205     public static final byte MEDIUM = 1;\r
206     public static final byte SHORT = 2;\r
207     public static final String[] names = { "PLURALIZED", "MEDIUM", "SHORT" };\r
208   }\r
209 \r
210   public static interface ECountVariant { \r
211     public static final byte INTEGER = 0;\r
212     public static final byte INTEGER_CUSTOM = 1;\r
213     public static final byte HALF_FRACTION = 2;\r
214     public static final byte DECIMAL1 = 3;\r
215     public static final byte DECIMAL2 = 4;\r
216     public static final byte DECIMAL3 = 5;\r
217     public static final String[] names = { \r
218       "INTEGER", "INTEGER_CUSTOM", "HALF_FRACTION", "DECIMAL1", \r
219       "DECIMAL2", "DECIMAL3" };\r
220   }\r
221 \r
222   public static interface EPluralization { \r
223     public static final byte NONE = 0; \r
224     public static final byte PLURAL = 1;\r
225     public static final byte DUAL = 2;\r
226     public static final byte PAUCAL = 3;\r
227     public static final byte HEBREW = 4;\r
228     public static final byte ARABIC = 5;\r
229     public static final String[] names = {\r
230       "NONE", "PLURAL", "DUAL", "PAUCAL", "HEBREW", "ARABIC"\r
231     };\r
232   }\r
233 \r
234   public static interface EHalfPlacement { \r
235     public static final byte PREFIX = 0;\r
236     public static final byte AFTER_FIRST = 1;\r
237     public static final byte LAST = 2;\r
238     public static final String[] names = {\r
239       "PREFIX", "AFTER_FIRST", "LAST"\r
240     };\r
241   }\r
242 \r
243   public static interface ENumberSystem { \r
244     public static final byte DEFAULT = 0;\r
245     public static final byte CHINESE_TRADITIONAL = 1;\r
246     public static final byte CHINESE_SIMPLIFIED = 2;\r
247     public static final byte KOREAN = 3;\r
248     public static final String[] names = {\r
249       "DEFAULT", "CHINESE_TRADITIONAL", "CHINESE_SIMPLIFIED", "KOREAN"\r
250     };\r
251   }\r
252 \r
253   public static interface EZeroHandling { \r
254     public static final byte ZPLURAL = 0;\r
255     public static final byte ZSINGULAR = 1;\r
256     public static final String[] names = {\r
257       "ZPLURAL", "ZSINGULAR"\r
258     };\r
259   }\r
260 \r
261   public static interface EDecimalHandling { \r
262     public static final byte DPLURAL = 0;\r
263     public static final byte DSINGULAR = 1;\r
264     public static final byte DSINGULAR_SUBONE = 2;\r
265     public static final byte DPAUCAL = 3;\r
266     public static final String[] names = {\r
267       "DPLURAL", "DSINGULAR", "DSINGULAR_SUBONE", "DPAUCAL"\r
268     };\r
269   }\r
270 \r
271   public static interface EFractionHandling { \r
272     public static final byte FPLURAL = 0;\r
273     public static final byte FSINGULAR_PLURAL = 1;\r
274     public static final byte FSINGULAR_PLURAL_ANDAHALF = 2;\r
275     public static final byte FPAUCAL = 3;\r
276     public static final String[] names = {\r
277       "FPLURAL", "FSINGULAR_PLURAL", "FSINGULAR_PLURAL_ANDAHALF",\r
278       "FPAUCAL"\r
279     };\r
280   }\r
281 \r
282   public static interface EHalfSupport {\r
283     public static final byte YES = 0;\r
284     public static final byte NO = 1;\r
285     public static final byte ONE_PLUS = 2;\r
286     public static final String[] names = {\r
287       "YES", "NO", "ONE_PLUS"\r
288     };\r
289   }\r
290 \r
291   public static interface EMilliSupport { \r
292     public static final byte YES = 0;\r
293     public static final byte NO = 1;\r
294     public static final byte WITH_SECONDS = 2;\r
295     public static final String[] names = {\r
296       "YES", "NO", "WITH_SECONDS"\r
297     };\r
298   }\r
299 \r
300   public static interface ESeparatorVariant { \r
301     public static final byte NONE = 0;\r
302     public static final byte SHORT = 1;\r
303     public static final byte FULL = 2;\r
304     public static final String[] names = {\r
305       "NONE", "SHORT", "FULL"\r
306     };\r
307   }\r
308 \r
309   public static interface EGender { \r
310     public static final byte M = 0;\r
311     public static final byte F = 1;\r
312     public static final byte N = 2;\r
313     public static final String[] names = {\r
314       "M", "F", "N"\r
315     };\r
316   }\r
317 }\r