17935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/*
27935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ******************************************************************************
37935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Copyright (C) 2007-2009, International Business Machines Corporation and   *
47935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * others. All Rights Reserved.                                               *
57935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ******************************************************************************
67935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */
77935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
87935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpackage com.ibm.icu.impl.duration.impl;
97935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.ArrayList;
117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.List;
127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/**
147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * DataRecord contains the data used by PeriodFormatterData. Fields are
157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * package-private for ease of access. This is a struct, it knows how to read
167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * and write itself to/from simple XML, that's all.
177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */
187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpublic class DataRecord {
197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    byte pl;
207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    String[][] pluralNames;
217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    byte[] genders; // EGender
227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    String[] singularNames;
237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    String[] halfNames;
247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    String[] numberNames;
257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    String[] mediumNames;
267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    String[] shortNames;
277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    String[] measures;
287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    String[] rqdSuffixes;
297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    String[] optSuffixes;
307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    String[] halves;
317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    byte[] halfPlacements; // EHalfPlacement
327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    byte[] halfSupport; // EHalfSupport
337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    String fifteenMinutes;
347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    String fiveMinutes;
357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    boolean requiresDigitSeparator;
367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    String digitPrefix;
377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    String countSep;
387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    String shortUnitSep;
397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    String[] unitSep;
407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    boolean[] unitSepRequiresDP;
417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    boolean[] requiresSkipMarker;
427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    byte numberSystem; // ENumberSystem
437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    char zero;
447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    char decimalSep;
457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    boolean omitSingularCount;
467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    boolean omitDualCount;
477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    byte zeroHandling; // EZeroHandling
487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    byte decimalHandling; // EDecimalHandling
497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    byte fractionHandling; // EFractionHandling
507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    String skippedUnitMarker;
517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    boolean allowZero;
527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    boolean weeksAloneOnly;
537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    byte useMilliseconds; // EMilliSupport
547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    ScopeData[] scopeData;
557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static DataRecord read(String ln, RecordReader in) {
577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if (in.open("DataRecord")) {
587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            DataRecord record = new DataRecord();
597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            record.pl = in.namedIndex("pl", EPluralization.names);
607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            record.pluralNames = in.stringTable("pluralName");
617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            record.genders = in.namedIndexArray("gender", EGender.names);
627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            record.singularNames = in.stringArray("singularName");
637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            record.halfNames = in.stringArray("halfName");
647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            record.numberNames = in.stringArray("numberName");
657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            record.mediumNames = in.stringArray("mediumName");
667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            record.shortNames = in.stringArray("shortName");
677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            record.measures = in.stringArray("measure");
687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            record.rqdSuffixes = in.stringArray("rqdSuffix");
697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            record.optSuffixes = in.stringArray("optSuffix");
707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            record.halves = in.stringArray("halves");
717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            record.halfPlacements = in.namedIndexArray("halfPlacement",
727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    EHalfPlacement.names);
737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            record.halfSupport = in.namedIndexArray("halfSupport",
747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    EHalfSupport.names);
757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            record.fifteenMinutes = in.string("fifteenMinutes");
767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            record.fiveMinutes = in.string("fiveMinutes");
777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            record.requiresDigitSeparator = in.bool("requiresDigitSeparator");
787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            record.digitPrefix = in.string("digitPrefix");
797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            record.countSep = in.string("countSep");
807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            record.shortUnitSep = in.string("shortUnitSep");
817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            record.unitSep = in.stringArray("unitSep");
827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            record.unitSepRequiresDP = in.boolArray("unitSepRequiresDP");
837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            record.requiresSkipMarker = in.boolArray("requiresSkipMarker");
847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            record.numberSystem = in.namedIndex("numberSystem",
857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    ENumberSystem.names);
867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            record.zero = in.character("zero");
877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            record.decimalSep = in.character("decimalSep");
887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            record.omitSingularCount = in.bool("omitSingularCount");
897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            record.omitDualCount = in.bool("omitDualCount");
907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            record.zeroHandling = in.namedIndex("zeroHandling",
917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    EZeroHandling.names);
927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            record.decimalHandling = in.namedIndex("decimalHandling",
937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    EDecimalHandling.names);
947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            record.fractionHandling = in.namedIndex("fractionHandling",
957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    EFractionHandling.names);
967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            record.skippedUnitMarker = in.string("skippedUnitMarker");
977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            record.allowZero = in.bool("allowZero");
987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            record.weeksAloneOnly = in.bool("weeksAloneOnly");
997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            record.useMilliseconds = in.namedIndex("useMilliseconds",
1007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    EMilliSupport.names);
1017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            if (in.open("ScopeDataList")) {
1027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                List<ScopeData> list = new ArrayList<ScopeData>(); // of ScopeData
1037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                ScopeData data;
1047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                while (null != (data = ScopeData.read(in))) {
1057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    list.add(data);
1067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                }
1077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                if (in.close()) {
1087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    record.scopeData = list.toArray(new ScopeData[list.size()]);
1097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                }
1107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
1117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            if (in.close()) {
1137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                return record;
1147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
1157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } else {
1167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            throw new InternalError("did not find DataRecord while reading "
1177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    + ln);
1187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
1197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        throw new InternalError("null data read while reading " + ln);
1207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        // Thread.dumpStack();
1217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        // return null;
1227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
1237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void write(RecordWriter out) {
1257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        out.open("DataRecord");
1267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        out.namedIndex("pl", EPluralization.names, pl);
1277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        out.stringTable("pluralName", pluralNames);
1287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        out.namedIndexArray("gender", EGender.names, genders);
1297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        out.stringArray("singularName", singularNames);
1307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        out.stringArray("halfName", halfNames);
1317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        out.stringArray("numberName", numberNames);
1327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        out.stringArray("mediumName", mediumNames);
1337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        out.stringArray("shortName", shortNames);
1347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        out.stringArray("measure", measures);
1357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        out.stringArray("rqdSuffix", rqdSuffixes);
1367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        out.stringArray("optSuffix", optSuffixes);
1377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        out.stringArray("halves", halves);
1387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        out.namedIndexArray("halfPlacement", EHalfPlacement.names,
1397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                halfPlacements);
1407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        out.namedIndexArray("halfSupport", EHalfSupport.names, halfSupport);
1417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        out.string("fifteenMinutes", fifteenMinutes);
1427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        out.string("fiveMinutes", fiveMinutes);
1437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        out.bool("requiresDigitSeparator", requiresDigitSeparator);
1447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        out.string("digitPrefix", digitPrefix);
1457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        out.string("countSep", countSep);
1467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        out.string("shortUnitSep", shortUnitSep);
1477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        out.stringArray("unitSep", unitSep);
1487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        out.boolArray("unitSepRequiresDP", unitSepRequiresDP);
1497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        out.boolArray("requiresSkipMarker", requiresSkipMarker);
1507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        out.namedIndex("numberSystem", ENumberSystem.names, numberSystem);
1517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        out.character("zero", zero);
1527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        out.character("decimalSep", decimalSep);
1537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        out.bool("omitSingularCount", omitSingularCount);
1547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        out.bool("omitDualCount", omitDualCount);
1557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        out.namedIndex("zeroHandling", EZeroHandling.names, zeroHandling);
1567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        out.namedIndex("decimalHandling", EDecimalHandling.names,
1577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                decimalHandling);
1587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        out.namedIndex("fractionHandling", EFractionHandling.names,
1597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                fractionHandling);
1607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        out.string("skippedUnitMarker", skippedUnitMarker);
1617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        out.bool("allowZero", allowZero);
1627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        out.bool("weeksAloneOnly", weeksAloneOnly);
1637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        out.namedIndex("useMilliseconds", EMilliSupport.names, useMilliseconds);
1647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if (scopeData != null) {
1657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            out.open("ScopeDataList");
1667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            for (int i = 0; i < scopeData.length; ++i) {
1677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                scopeData[i].write(out);
1687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
1697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            out.close();
1707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
1717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        out.close();
1727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
1737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static class ScopeData {
1757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String prefix;
1767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        boolean requiresDigitPrefix;
1777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String suffix;
1787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public void write(RecordWriter out) {
1807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            out.open("ScopeData");
1817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            out.string("prefix", prefix);
1827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            out.bool("requiresDigitPrefix", requiresDigitPrefix);
1837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            out.string("suffix", suffix);
1847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            out.close();
1857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
1867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static ScopeData read(RecordReader in) {
1887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            if (in.open("ScopeData")) {
1897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                ScopeData scope = new ScopeData();
1907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                scope.prefix = in.string("prefix");
1917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                scope.requiresDigitPrefix = in.bool("requiresDigitPrefix");
1927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                scope.suffix = in.string("suffix");
1937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                if (in.close()) {
1947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    return scope;
1957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                }
1967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
1977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            return null;
1987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
1997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
2007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static interface ETimeLimit {
2027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final byte NOLIMIT = 0;
2037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final byte LT = 1;
2047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final byte MT = 2;
2057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final String[] names = { "NOLIMIT", "LT", "MT" };
2067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
2077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static interface ETimeDirection {
2097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final byte NODIRECTION = 0;
2107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final byte PAST = 1;
2117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final byte FUTURE = 2;
2127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final String[] names = { "NODIRECTION", "PAST", "FUTURE" };
2137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
2147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static interface EUnitVariant {
2167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final byte PLURALIZED = 0;
2177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final byte MEDIUM = 1;
2187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final byte SHORT = 2;
2197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final String[] names = { "PLURALIZED", "MEDIUM", "SHORT" };
2207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
2217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static interface ECountVariant {
2237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final byte INTEGER = 0;
2247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final byte INTEGER_CUSTOM = 1;
2257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final byte HALF_FRACTION = 2;
2267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final byte DECIMAL1 = 3;
2277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final byte DECIMAL2 = 4;
2287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final byte DECIMAL3 = 5;
2297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final String[] names = { "INTEGER", "INTEGER_CUSTOM",
2307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "HALF_FRACTION", "DECIMAL1", "DECIMAL2", "DECIMAL3" };
2317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
2327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static interface EPluralization {
2347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final byte NONE = 0;
2357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final byte PLURAL = 1;
2367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final byte DUAL = 2;
2377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final byte PAUCAL = 3;
2387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final byte HEBREW = 4;
2397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final byte ARABIC = 5;
2407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final String[] names = { "NONE", "PLURAL", "DUAL",
2417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "PAUCAL", "HEBREW", "ARABIC" };
2427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
2437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static interface EHalfPlacement {
2457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final byte PREFIX = 0;
2467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final byte AFTER_FIRST = 1;
2477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final byte LAST = 2;
2487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final String[] names = { "PREFIX", "AFTER_FIRST", "LAST" };
2497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
2507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static interface ENumberSystem {
2527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final byte DEFAULT = 0;
2537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final byte CHINESE_TRADITIONAL = 1;
2547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final byte CHINESE_SIMPLIFIED = 2;
2557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final byte KOREAN = 3;
2567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final String[] names = { "DEFAULT",
2577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "CHINESE_TRADITIONAL", "CHINESE_SIMPLIFIED", "KOREAN" };
2587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
2597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static interface EZeroHandling {
2617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final byte ZPLURAL = 0;
2627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final byte ZSINGULAR = 1;
2637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final String[] names = { "ZPLURAL", "ZSINGULAR" };
2647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
2657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static interface EDecimalHandling {
2677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final byte DPLURAL = 0;
2687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final byte DSINGULAR = 1;
2697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final byte DSINGULAR_SUBONE = 2;
2707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final byte DPAUCAL = 3;
2717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final String[] names = { "DPLURAL", "DSINGULAR",
2727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "DSINGULAR_SUBONE", "DPAUCAL" };
2737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
2747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static interface EFractionHandling {
2767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final byte FPLURAL = 0;
2777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final byte FSINGULAR_PLURAL = 1;
2787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final byte FSINGULAR_PLURAL_ANDAHALF = 2;
2797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final byte FPAUCAL = 3;
2807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final String[] names = { "FPLURAL", "FSINGULAR_PLURAL",
2817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            "FSINGULAR_PLURAL_ANDAHALF", "FPAUCAL" };
2827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
2837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static interface EHalfSupport {
2857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final byte YES = 0;
2867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final byte NO = 1;
2877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final byte ONE_PLUS = 2;
2887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final String[] names = { "YES", "NO", "ONE_PLUS" };
2897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
2907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static interface EMilliSupport {
2927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final byte YES = 0;
2937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final byte NO = 1;
2947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final byte WITH_SECONDS = 2;
2957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final String[] names = { "YES", "NO", "WITH_SECONDS" };
2967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
2977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static interface ESeparatorVariant {
2997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final byte NONE = 0;
3007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final byte SHORT = 1;
3017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final byte FULL = 2;
3027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final String[] names = { "NONE", "SHORT", "FULL" };
3037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
3047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static interface EGender {
3067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final byte M = 0;
3077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final byte F = 1;
3087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final byte N = 2;
3097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public static final String[] names = { "M", "F", "N" };
3107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
3117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert}
312