1// © 2016 and later: Unicode, Inc. and others.
2// License & terms of use: http://www.unicode.org/copyright.html#License
3/*
4 *******************************************************************************
5 * Copyright (C) 1998-2008, International Business Machines Corporation and    *
6 * others. All Rights Reserved.                                                *
7 *******************************************************************************
8 *
9 * Created on Apr 4, 2003
10 *
11 *******************************************************************************
12 */
13package com.ibm.icu.dev.tool.layout;
14
15/**
16 * This class holds the list of languages.
17 *
18 * @author emader
19 *
20 */
21public class LanguageData extends TagValueData
22{
23    public static class Record
24    {
25        private String tag;
26        private String name;
27
28        public Record(String tag, String name)
29        {
30            this.tag = tag;
31            this.name = name;
32        }
33
34        public String tag()
35        {
36            return tag;
37        }
38
39        public String name()
40        {
41            return name;
42        }
43
44        public String label()
45        {
46            return TagUtilities.tagLabel(tag);
47        }
48
49        public String makeTag()
50        {
51            return TagUtilities.makeTag(tag);
52        }
53    }
54
55    /*
56     * This is temporary data until there is some resolution between
57     * the OpenType language system tags and the ISO and RFC standards...
58     */
59    private Record[] languages =
60    {
61        new Record("",    "null"),
62        new Record("ARA", "Arabic"),
63        new Record("ASM", "Assamese"),
64        new Record("BEN", "Bengali"),
65        new Record("FAR", "Farsi"),
66        new Record("GUJ", "Gujarati"),
67        new Record("HIN", "Hindi"),
68        new Record("IWR", "Hebrew"),
69        new Record("JII", "Yiddish"),
70        new Record("JAN", "Japanese"),
71        new Record("KAN", "Kannada"),
72        new Record("KOK", "Konkani"),
73        new Record("KOR", "Korean"),
74        new Record("KSH", "Kashmiri"),
75        new Record("MAL", "Malayalam (Traditional)"),
76        new Record("MAR", "Marathi"),
77        new Record("MLR", "Malayalam (Reformed)"),
78        new Record("MNI", "Manipuri"),
79        new Record("ORI", "Oriya"),
80        new Record("SAN", "Sanscrit"),
81        new Record("SND", "Sindhi"),
82        new Record("SNH", "Sinhalese"),
83        new Record("SYR", "Syriac"),
84        new Record("TAM", "Tamil"),
85        new Record("TEL", "Telugu"),
86        new Record("THA", "Thai"),
87        new Record("URD", "Urdu"),
88        new Record("ZHP", "Chinese (Phonetic)"),
89        new Record("ZHS", "Chinese (Simplified)"),
90        new Record("ZHT", "Chinese (Traditional)"),
91
92        // languages added on 03/13/2008
93        // TODO: need to deal with the fact that
94        // these codes should be @draft, and the above
95        // codes should be @final.
96        new Record("AFK", "Afrikaans"),
97        new Record("BEL", "Belarussian"),
98        new Record("BGR", "Bulgarian"),
99        new Record("CAT", "Catalan"),
100        new Record("CHE", "Chechen"),
101        new Record("COP", "Coptic"),
102        new Record("CSY", "Czech"),
103        new Record("DAN", "Danish"),
104        new Record("DEU", "German"),
105        new Record("DZN", "Dzongkha"),
106        new Record("ELL", "Greek"),
107        new Record("ENG", "English"),
108        new Record("ESP", "Spanish"),
109        new Record("ETI", "Estonian"),
110        new Record("EUQ", "Basque"),
111        new Record("FIN", "Finnish"),
112      //new Record("FLE", "Flemish"), // Flemish has the same ISO 639-2 code as Dutch (NLD)
113        new Record("FRA", "French"),
114        new Record("GAE", "Gaelic"),
115        new Record("HAU", "Hausa"),
116        new Record("HRV", "Croation"),
117        new Record("HUN", "Hungarian"),
118        new Record("HYE", "Armenian"),
119        new Record("IND", "Indonesian"),
120        new Record("ITA", "Italian"),
121        new Record("KHM", "Khmer"),
122        new Record("MNG", "Mongolian"),
123        new Record("MTS", "Maltese"),
124        new Record("NEP", "Nepali"),
125        new Record("NLD", "Dutch"),
126        new Record("PAS", "Pashto"),
127        new Record("PLK", "Polish"),
128        new Record("PTG", "Portuguese"),
129        new Record("ROM", "Romanian"),
130        new Record("RUS", "Russian"),
131        new Record("SKY", "Slovak"),
132        new Record("SLV", "Slovenian"),
133        new Record("SQI", "Albanian"),
134        new Record("SRB", "Serbian"),
135        new Record("SVE", "Swedish"),
136        new Record("TIB", "Tibetan"),
137        new Record("TRK", "Turkish"),
138        new Record("WEL", "Welsh")
139    };
140
141    private int minLanguage = 0;
142    private int maxLanguage = minLanguage + languages.length - 1;
143
144    public int getMinValue()
145    {
146        return minLanguage;
147    }
148
149    public int getMaxValue()
150    {
151        return maxLanguage;
152    }
153
154    public String getTag(int value)
155    {
156        if (value < minLanguage || value > maxLanguage) {
157            return null;
158        }
159
160        return languages[value - minLanguage].tag();
161    }
162
163    public String getTagLabel(int value)
164    {
165        if (value < minLanguage || value > maxLanguage) {
166            return null;
167        }
168
169        return languages[value - minLanguage].label();
170    }
171
172    public String makeTag(int value)
173    {
174        if (value < minLanguage || value > maxLanguage) {
175            return null;
176        }
177
178        return languages[value - minLanguage].makeTag();
179    }
180
181    public String getName(int value) {
182        if (value < minLanguage || value > maxLanguage) {
183            return "(UNKNOWN)";
184        }
185
186        return languages[value - minLanguage].name();
187    }
188}
189