12d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert// © 2016 and later: Unicode, Inc. and others.
22d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert// License & terms of use: http://www.unicode.org/copyright.html#License
3bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert/*
4bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert *******************************************************************************
5bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * Copyright (C) 1998-2004, International Business Machines Corporation and    *
6bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * others. All Rights Reserved.                                                *
7bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert *******************************************************************************
8bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */
9bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertpackage com.ibm.icu.dev.tool.layout;
10bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
11bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert/**
12bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert * @author emader
13bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert *
14bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert */
15bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubertpublic class OpenTypeTagBuilder
16bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert{
17bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    private static String[] tableTags = {
18bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "acnt",
19bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "avar",
20bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "BASE",
21bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "bdat",
22bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "bhed",
23bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "bloc",
24bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "bsln",
25bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "CFF ",
26bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "cmap",
27bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "cvar",
28bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "cvt ",
29bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "DSIG",
30bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "EBDT",
31bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "EBLC",
32bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "EBSC",
33bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "fdsc",
34bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "feat",
35bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "fmtx",
36bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "fpgm",
37bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "fvar",
38bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "gasp",
39bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "GDEF",
40bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "glyf",
41bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "GPOS",
42bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "GSUB",
43bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "gvar",
44bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "hdmx",
45bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "head",
46bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "hhea",
47bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "hmtx",
48bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "hsty",
49bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "just",
50bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "JSTF",
51bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "kern",
52bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "lcar",
53bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "loca",
54bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "LTSH",
55bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "maxp",
56bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "mort",
57bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "morx",
58bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "name",
59bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "opbd",
60bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "OS/2",
61bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "PCLT",
62bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "post",
63bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "prep",
64bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "prop",
65bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "trak",
66bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "VDMX",
67bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "vhea",
68bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "vmtx",
69bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "VORG",
70bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "Zapf"
71bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    };
72bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
73bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    private static String[] featureTags = {
74bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "aalt",
75bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "abvf",
76bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "abvm",
77bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "abvs",
78bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "afrc",
79bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "akhn",
80bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "blwf",
81bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "blwm",
82bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "blws",
83bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "calt",
84bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "case",
85bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "ccmp",
86bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "clig",
87bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "cpsp",
88bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "cswh",
89bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "curs",
90bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "c2sc",
91bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "c2pc",
92bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "dist",
93bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "dlig",
94bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "dnom",
95bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "expt",
96bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "falt",
97bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "fin2",
98bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "fin3",
99bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "fina",
100bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "frac",
101bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "fwid",
102bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "half",
103bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "haln",
104bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "halt",
105bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "hist",
106bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "hkna",
107bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "hlig",
108bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "hngl",
109bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "hwid",
110bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "init",
111bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "isol",
112bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "ital",
113bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "jalt",
114bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "jp78",
115bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "jp83",
116bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "jp90",
117bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "kern",
118bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "lfbd",
119bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "liga",
120bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "ljmo",
121bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "lnum",
122bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "locl",
123bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "mark",
124bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "med2",
125bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "medi",
126bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "mgrk",
127bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "mkmk",
128bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "mset",
129bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "nalt",
130bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "nlck",
131bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "nukt",
132bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "numr",
133bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "onum",
134bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "opbd",
135bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "ordn",
136bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "ornm",
137bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "palt",
138bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "pcap",
139bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "pnum",
140bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "pref",
141bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "pres",
142bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "pstf",
143bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "psts",
144bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "pwid",
145bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "qwid",
146bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "rand",
147bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "rlig",
148bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "rphf",
149bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "rtbd",
150bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "rtla",
151bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "ruby",
152bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "salt",
153bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "sinf",
154bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "size",
155bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "smcp",
156bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "smpl",
157bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "ss01",
158bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "ss02",
159bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "ss03",
160bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "ss04",
161bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "ss05",
162bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "ss06",
163bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "ss07",
164bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "ss08",
165bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "ss09",
166bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "ss10",
167bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "ss11",
168bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "ss12",
169bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "ss13",
170bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "ss14",
171bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "ss15",
172bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "ss16",
173bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "ss17",
174bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "ss18",
175bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "ss19",
176bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "ss20",
177bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "subs",
178bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "sups",
179bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "swsh",
180bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "titl",
181bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "tjmo",
182bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "tnam",
183bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "tnum",
184bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "trad",
185bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "twid",
186bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "unic",
187bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "valt",
188bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "vatu",
189bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "vert",
190bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "vhal",
191bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "vjmo",
192bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "vkna",
193bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "vkrn",
194bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "vpal",
195bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "vrt2",
196bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        "zero"
197bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    };
198bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
199bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    private static String tagLabel(String tag)
200bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    {
201bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        StringBuffer result = new StringBuffer();
202bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        String upperTag = tag.toUpperCase();
203bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
204bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        for (int i = 0; i < upperTag.length(); i += 1) {
205bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            char ch = upperTag.charAt(i);
206bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
207bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            if ((ch < 'A' || ch > 'Z') && (ch < '0' || ch > '9')) {
208bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                ch = '_';
209bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            }
210bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
211bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            result.append(ch);
212bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        }
213bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
214bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        return result.toString();
215bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
216bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
217bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    private static void dumpTags(String enumName, String[] tags)
218bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    {
219bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        System.out.println("enum LE" + enumName + "Tags {");
220bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
221bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        for (int i = 0; i < tags.length; i += 1) {
222bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            String tag = tags[i];
223bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
224bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            System.out.println("    LE_" + tagLabel(tag) + "_" + enumName.toUpperCase() +
225bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                "_TAG = " + TagUtilities.makeTag(tag) + "UL" +
226bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert                (i == tags.length - 1? " " : ",") + " /* '" + tag + "' */");
227bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        }
228bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
229bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        System.out.println("};");
230bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
231bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
232bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static void main(String[] args)
233bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    {
234bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        dumpTags("Table", tableTags);
235bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert        dumpTags("Feature", featureTags);
236bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    }
237bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert}
238