language: use compact tags Change-Id: Iecd38d92cfbd38d84067d1e7184e996f3eab4712 Reviewed-on: https://go-review.googlesource.com/95828 Run-TryBot: Marcel van Lohuizen <mpvl@golang.org> Reviewed-by: Nigel Tao <nigeltao@golang.org>
diff --git a/internal/colltab/colltab_test.go b/internal/colltab/colltab_test.go index c403ac3..36943f0 100644 --- a/internal/colltab/colltab_test.go +++ b/internal/colltab/colltab_test.go
@@ -57,8 +57,10 @@ {0, language.MustParse("und-Jpan-BR")}, // Infers "ja", so no match. {0, language.MustParse("zu")}, // No match past index. } { - if x := MatchLang(tc.t, tags); x != tc.x { - t.Errorf("%d: MatchLang(%q, tags) = %d; want %d", i, tc.t, x, tc.x) - } + t.Run(tc.t.String(), func(t *testing.T) { + if x := MatchLang(tc.t, tags); x != tc.x { + t.Errorf("%d: MatchLang(%q, tags) = %d; want %d", i, tc.t, x, tc.x) + } + }) } }
diff --git a/language/coverage.go b/language/coverage.go index 3e7377d..e99fd34 100644 --- a/language/coverage.go +++ b/language/coverage.go
@@ -124,7 +124,7 @@ } a := make([]Base, len(tags)) for i, t := range tags { - a[i] = Base{language.Language(t.tag.LangID)} + a[i] = Base{language.Language(t.lang())} } sort.Sort(bases(a)) k := 0
diff --git a/language/gen.go b/language/gen.go index 62bf6e4..30c8c97 100644 --- a/language/gen.go +++ b/language/gen.go
@@ -97,16 +97,7 @@ // TODO: region inclusion data will probably not be use used in future matchers. var langConsts = []string{ - "af", "am", "ar", "az", "bg", "bn", "ca", "cs", "da", "de", "el", "en", "es", - "et", "fa", "fi", "fil", "fr", "gu", "he", "hi", "hr", "hu", "hy", "id", "is", - "it", "ja", "ka", "kk", "km", "kn", "ko", "ky", "lo", "lt", "lv", "mk", "ml", - "mn", "mo", "mr", "ms", "mul", "my", "nb", "ne", "nl", "no", "pa", "pl", "pt", - "ro", "ru", "sh", "si", "sk", "sl", "sq", "sr", "sv", "sw", "ta", "te", "th", - "tl", "tn", "tr", "uk", "ur", "uz", "vi", "zh", "zu", - - // constants for grandfathered tags (if not already defined) - "jbo", "ami", "bnn", "hak", "tlh", "lb", "nv", "pwn", "tao", "tay", "tsu", - "nn", "sfb", "vgt", "sgg", "cmn", "nan", "hsn", + "de", "en", "fr", "it", "mo", "no", "nb", "pt", "sh", "mul", "und", } var scriptConsts = []string{
diff --git a/language/gen_index.go b/language/gen_index.go index d476874..349bbf9 100644 --- a/language/gen_index.go +++ b/language/gen_index.go
@@ -104,5 +104,5 @@ } func ident(s string) string { - return "x" + strings.Replace(s, "-", "", -1) + return strings.Replace(s, "-", "", -1) + "Index" }
diff --git a/language/language.go b/language/language.go index 94ec8f1..74b939d 100644 --- a/language/language.go +++ b/language/language.go
@@ -19,12 +19,66 @@ // specific language or locale. All language tag values are guaranteed to be // well-formed. type Tag struct { - tag language.Tag + language compactID + locale compactID + full fullTag // always a language.Tag for now. } -func (t *Tag) lang() language.Language { return t.tag.LangID } -func (t *Tag) region() language.Region { return t.tag.RegionID } -func (t *Tag) script() language.Script { return t.tag.ScriptID } +type fullTag interface { + IsRoot() bool + Parent() language.Tag +} + +func makeTag(t language.Tag) (tag Tag) { + if region := t.TypeForKey("rg"); len(region) > 2 { + if r, err := language.ParseRegion(region[:2]); err == nil { + tFull := t + t, _ = t.SetTypeForKey("rg", "") + var exact1, exact2 bool + tag.language, exact1 = compactIndex(t) + t.RegionID = r + tag.locale, exact2 = compactIndex(t) + if !exact1 || !exact2 { + tag.full = tFull + } + return tag + } + } + lang, ok := compactIndex(t) + tag.language = lang + tag.locale = lang + if !ok { + tag.full = t + } + return tag +} + +func (t *Tag) tag() language.Tag { + if t.full != nil { + return t.full.(language.Tag) + } + tag := t.language.tag() + if t.language != t.locale { + loc := t.locale.tag() + tag.SetTypeForKey("rg", strings.ToLower(loc.RegionID.String())+"zzzz") + } + return tag +} + +func (t *Tag) mayHaveVariants() bool { + return t.full != nil || int(t.language) >= len(coreTags) +} + +func (t *Tag) mayHaveExtensions() bool { + return t.full != nil || + int(t.language) >= len(coreTags) || + t.language != t.locale +} + +// TODO: improve performance. +func (t *Tag) lang() language.Language { return t.tag().LangID } +func (t *Tag) region() language.Region { return t.tag().RegionID } +func (t *Tag) script() language.Script { return t.tag().ScriptID } // Make is a convenience wrapper for Parse that omits the error. // In case of an error, a sensible default is returned. @@ -42,17 +96,16 @@ // Raw returns the raw base language, script and region, without making an // attempt to infer their values. func (t Tag) Raw() (b Base, s Script, r Region) { - return Base{t.tag.LangID}, Script{t.tag.ScriptID}, Region{t.tag.RegionID} + tt := t.tag() + return Base{tt.LangID}, Script{tt.ScriptID}, Region{tt.RegionID} } // IsRoot returns true if t is equal to language "und". func (t Tag) IsRoot() bool { - return t.tag.IsRoot() -} - -// private reports whether the Tag consists solely of a private use tag. -func (t Tag) private() bool { - return t.tag.IsPrivateUse() + if t.full != nil { + return t.full.IsRoot() + } + return t.language == _und } // CanonType can be used to enable or disable various types of canonicalization. @@ -178,11 +231,20 @@ // Canonicalize returns the canonicalized equivalent of the tag. func (c CanonType) Canonicalize(t Tag) (Tag, error) { - tt, changed := canonicalize(c, t.tag) - if changed { - tt.RemakeString() + // First try fast path. + if t.full == nil { + if _, changed := canonicalize(c, t.language.tag()); !changed { + return t, nil + } } - return Tag{tt}, nil + // It is unlikely that one will canonicalize a tag after matching. So do + // a slow but simple approach here. + if tag, changed := canonicalize(c, t.tag()); changed { + tag.RemakeString() + return makeTag(tag), nil + } + return t, nil + } // Confidence indicates the level of certainty for a given return value. @@ -207,17 +269,20 @@ // String returns the canonical string representation of the language tag. func (t Tag) String() string { - return t.tag.String() + return t.tag().String() } // MarshalText implements encoding.TextMarshaler. func (t Tag) MarshalText() (text []byte, err error) { - return t.tag.MarshalText() + return t.tag().MarshalText() } // UnmarshalText implements encoding.TextUnmarshaler. func (t *Tag) UnmarshalText(text []byte) error { - return t.tag.UnmarshalText(text) + var tag language.Tag + err := tag.UnmarshalText(text) + *t = makeTag(tag) + return err } // Base returns the base language of the language tag. If the base language is @@ -227,7 +292,7 @@ if b := t.lang(); b != 0 { return Base{b}, Exact } - tt := t.tag + tt := t.tag() c := High if tt.ScriptID == 0 && !tt.RegionID.IsCountry() { c = Low @@ -253,10 +318,10 @@ // in the past. Also, the script that is commonly used may change over time. // It uses a variant of CLDR's Add Likely Subtags algorithm. This is subject to change. func (t Tag) Script() (Script, Confidence) { - if t.script() != 0 { - return Script{t.script()}, Exact + if scr := t.script(); scr != 0 { + return Script{scr}, Exact } - tt := t.tag + tt := t.tag() sc, c := language.Script(_Zzzz), No if scr := tt.LangID.SuppressScript(); scr != 0 { // Note: it is not always the case that a language with a suppress @@ -271,8 +336,8 @@ sc, c = tag.ScriptID, Low } } else { - t, _ = (Deprecated | Macro).Canonicalize(t) - if tag, err := t.tag.Maximize(); err == nil && tag.ScriptID != sc { + tt, _ = canonicalize(Deprecated|Macro, tt) + if tag, err := tt.Maximize(); err == nil && tag.ScriptID != sc { sc, c = tag.ScriptID, Low } } @@ -283,15 +348,15 @@ // infer a most likely candidate from the context. // It uses a variant of CLDR's Add Likely Subtags algorithm. This is subject to change. func (t Tag) Region() (Region, Confidence) { - if t.region() != 0 { - return Region{t.region()}, Exact + if r := t.region(); r != 0 { + return Region{r}, Exact } - tt := t.tag + tt := t.tag() if tt, err := tt.Maximize(); err == nil { return Region{tt.RegionID}, Low // TODO: differentiate between high and low. } - t, _ = (Deprecated | Macro).Canonicalize(t) - if tag, err := t.tag.Maximize(); err == nil { + tt, _ = canonicalize(Deprecated|Macro, tt) + if tag, err := tt.Maximize(); err == nil { return Region{tag.RegionID}, Low } return Region{_ZZ}, No // TODO: return world instead of undetermined? @@ -300,8 +365,11 @@ // Variants returns the variants specified explicitly for this language tag. // or nil if no variant was specified. func (t Tag) Variants() []Variant { + if !t.mayHaveVariants() { + return nil + } v := []Variant{} - x, str := "", t.tag.Variants() + x, str := "", t.tag().Variants() for str != "" { x, str = nextToken(str) v = append(v, Variant{x}) @@ -313,7 +381,19 @@ // specific language are substituted with fields from the parent language. // The parent for a language may change for newer versions of CLDR. func (t Tag) Parent() Tag { - return Tag{t.tag.Parent()} + if t.full != nil { + return makeTag(t.full.Parent()) + } + if t.language != t.locale { + // Simulate stripping -u-rg-xxxxxx + return Tag{language: t.language, locale: t.language} + } + // TODO: use parent lookup table once cycle from internal package is + // removed. Probably by internalizing the table and declaring this fast + // enough. + // lang := compactID(internal.Parent(uint16(t.language))) + lang, _ := compactIndex(t.language.tag().Parent()) + return Tag{language: lang, locale: lang} } // returns token t and the rest of the string. @@ -361,14 +441,20 @@ // false for ok if t does not have the requested extension. The returned // extension will be invalid in this case. func (t Tag) Extension(x byte) (ext Extension, ok bool) { - e, ok := t.tag.Extension(x) + if !t.mayHaveExtensions() { + return Extension{}, false + } + e, ok := t.tag().Extension(x) return Extension{e}, ok } // Extensions returns all extensions of t. func (t Tag) Extensions() []Extension { + if !t.mayHaveExtensions() { + return nil + } e := []Extension{} - for _, ext := range t.tag.Extensions() { + for _, ext := range t.tag().Extensions() { e = append(e, Extension{ext}) } return e @@ -379,7 +465,12 @@ // http://www.unicode.org/reports/tr35/#Unicode_Language_and_Locale_Identifiers. // TypeForKey will traverse the inheritance chain to get the correct value. func (t Tag) TypeForKey(key string) string { - return t.tag.TypeForKey(key) + if !t.mayHaveExtensions() { + if key != "rg" && key != "va" { + return "" + } + } + return t.tag().TypeForKey(key) } // SetTypeForKey returns a new Tag with the key set to type, where key and type @@ -387,8 +478,8 @@ // http://www.unicode.org/reports/tr35/#Unicode_Language_and_Locale_Identifiers. // An empty value removes an existing pair with the same key. func (t Tag) SetTypeForKey(key, value string) (Tag, error) { - tt, err := t.tag.SetTypeForKey(key, value) - return Tag{tt}, err + tt, err := t.tag().SetTypeForKey(key, value) + return makeTag(tt), err } // CompactIndex returns an index, where 0 <= index < NumCompactTags, for tags @@ -397,6 +488,10 @@ // index, exact will be false and the compact index will be returned for the // first match after repeatedly taking the Parent of t. func CompactIndex(t Tag) (index int, exact bool) { + return int(t.locale), t.language == t.locale && t.full == nil +} + +func compactIndex(t language.Tag) (index compactID, exact bool) { // TODO: perhaps give more frequent tags a lower index. // TODO: we could make the indexes stable. This will excluded some // possibilities for optimization, so don't do this quite yet. @@ -404,16 +499,19 @@ b, s, r := t.Raw() switch { - case t.tag.HasString(): - if t.private() { + case t.HasString(): + if t.IsPrivateUse() { // We have no entries for user-defined tags. return 0, false } hasExtra := false - if t.tag.HasVariants() { - if t.tag.HasExtensions() { + if t.HasVariants() { + if t.HasExtensions() { + build := language.Builder{} + build.SetTag(t) + build.Private, build.Ext = "", nil exact = false - t, _ = Raw.Compose(b, s, r, t.Variants()) + t = build.Make() } hasExtra = true } else if _, ok := t.Extension('u'); ok { @@ -421,45 +519,49 @@ // Strip all but the 'va' entry. old := t variant := t.TypeForKey("va") - t, _ = Raw.Compose(b, s, r) + t = language.Tag{LangID: b, ScriptID: s, RegionID: r} if variant != "" { t, _ = t.SetTypeForKey("va", variant) hasExtra = true } exact = old == t + } else { + exact = false } if hasExtra { // We have some variants. for i, s := range specialTags { - if s == t.tag { - return i + len(coreTags), exact + if s == t { + return compactID(i + len(coreTags)), exact } } exact = false } } - if x, ok := getCoreIndex(t.tag); ok { - return int(x), exact + if x, ok := getCoreIndex(t); ok { + return x, exact } exact = false - if r.regionID != 0 && s.scriptID == 0 { + if r != 0 && s == 0 { // Deal with cases where an extra script is inserted for the region. - t, _ := t.tag.Maximize() + t, _ := t.Maximize() if x, ok := getCoreIndex(t); ok { - return int(x), exact + return x, exact } } - for t = t.Parent(); t != Und; t = t.Parent() { + for t = t.Parent(); t != root; t = t.Parent() { // No variants specified: just compare core components. // The key has the form lllssrrr, where l, s, and r are nibbles for // respectively the langID, scriptID, and regionID. - if x, ok := getCoreIndex(t.tag); ok { - return int(x), exact + if x, ok := getCoreIndex(t); ok { + return x, exact } } - return int(0), exact + return 0, exact } +var root = language.Tag{} + // Base is an ISO 639 language code, used for encoding the base language // of a language tag. type Base struct {
diff --git a/language/language_test.go b/language/language_test.go index 11c5dda..273f61f 100644 --- a/language/language_test.go +++ b/language/language_test.go
@@ -32,7 +32,7 @@ } func TestEquality(t *testing.T) { - for i, tt := range parseTests()[48:49] { + for i, tt := range parseTests() { s := tt.in tag := Make(s) t1 := Make(tag.String()) @@ -54,26 +54,26 @@ }{ // TODO: these values will change with each CLDR update. This issue // will be solved if we decide to fix the indexes. - {"und", xund, true}, - {"ca-ES-valencia", xcaESvalencia, true}, - {"ca-ES-valencia-u-va-posix", xcaESvalencia, false}, - {"ca-ES-valencia-u-co-phonebk", xcaESvalencia, false}, - {"ca-ES-valencia-u-co-phonebk-va-posix", xcaESvalencia, false}, + {"und", undIndex, true}, + {"ca-ES-valencia", caESvalenciaIndex, true}, + {"ca-ES-valencia-u-va-posix", caESvalenciaIndex, false}, + {"ca-ES-valencia-u-co-phonebk", caESvalenciaIndex, false}, + {"ca-ES-valencia-u-co-phonebk-va-posix", caESvalenciaIndex, false}, {"x-klingon", 0, false}, - {"en-US", xenUS, true}, - {"en-US-u-va-posix", xenUSuvaposix, true}, - {"en", xen, true}, - {"en-u-co-phonebk", xen, false}, - {"en-001", xen001, true}, - {"zh-Hant-HK", xzhHantHK, true}, - {"zh-HK", xzhHantHK, false}, // maximized to zh-Hant-HK - {"nl-Beng", 0, false}, // parent skips script - {"nl-NO", xnl, false}, // region is ignored - {"nl-Latn-NO", xnl, false}, - {"nl-Latn-NO-u-co-phonebk", xnl, false}, - {"nl-Latn-NO-valencia", xnl, false}, - {"nl-Latn-NO-oxendict", xnl, false}, - {"sh", xsh, true}, // From plural rules. + {"en-US", enUSIndex, true}, + {"en-US-u-va-posix", enUSuvaposixIndex, true}, + {"en", enIndex, true}, + {"en-u-co-phonebk", enIndex, false}, + {"en-001", en001Index, true}, + {"zh-Hant-HK", zhHantHKIndex, true}, + {"zh-HK", zhHantHKIndex, false}, // maximized to zh-Hant-HK + {"nl-Beng", 0, false}, // parent skips script + {"nl-NO", nlIndex, false}, // region is ignored + {"nl-Latn-NO", nlIndex, false}, + {"nl-Latn-NO-u-co-phonebk", nlIndex, false}, + {"nl-Latn-NO-valencia", nlIndex, false}, + {"nl-Latn-NO-oxendict", nlIndex, false}, + {"sh", shIndex, true}, // From plural rules. } for _, tt := range tests { x, ok := CompactIndex(Raw.MustParse(tt.tag))
diff --git a/language/match.go b/language/match.go index e4ad447..d84e972 100644 --- a/language/match.go +++ b/language/match.go
@@ -105,23 +105,22 @@ // TODO: select first language tag based on script. } if w.RegionID != 0 && tt.RegionID != 0 && tt.RegionID.Contains(w.RegionID) { - t, _ := Raw.Compose(Tag{tt}, Region{w.RegionID}) - tt = t.tag + tt.RegionID = w.RegionID + tt.RemakeString() } // Copy options from the user-provided tag into the result tag. This is hard // to do after the fact, so we do it here. // TODO: add in alternative variants to -u-va-. // TODO: add preferred region to -u-rg-. if e := w.Extensions(); len(e) > 0 { - // TODO: improve performance. - ext := make([]Extension, len(e)) - for _, ee := range e { - ext = append(ext, Extension{ee}) + b := language.Builder{} + b.SetTag(tt) + for _, e := range e { + b.AddExt(e) } - t, _ := Raw.Compose(Tag{tt}, ext) - tt = t.tag + tt = b.Make() } - return Tag{tt}, index, c + return makeTag(tt), index, c } // ErrMissingLikelyTagsData indicates no information was available @@ -375,16 +374,18 @@ // Add supported languages to the index. Add exact matches first to give // them precedence. for i, tag := range supported { - pair, _ := makeHaveTag(tag.tag, i) - m.header(tag.tag.LangID).addIfNew(pair, true) + tt := tag.tag() + pair, _ := makeHaveTag(tt, i) + m.header(tt.LangID).addIfNew(pair, true) m.supported = append(m.supported, &pair) } - m.default_ = m.header(supported[0].tag.LangID).haveTags[0] + m.default_ = m.header(supported[0].lang()).haveTags[0] // Keep these in two different loops to support the case that two equivalent // languages are distinguished, such as iw and he. for i, tag := range supported { - pair, max := makeHaveTag(tag.tag, i) - if max != tag.tag.LangID { + tt := tag.tag() + pair, max := makeHaveTag(tt, i) + if max != tt.LangID { m.header(max).addIfNew(pair, true) } } @@ -446,7 +447,7 @@ func (m *matcher) getBest(want ...Tag) (got *haveTag, orig language.Tag, c Confidence) { best := bestMatch{} for i, ww := range want { - w := ww.tag + w := ww.tag() var max language.Tag // Check for exact match first. h := m.index[w.LangID] @@ -486,7 +487,7 @@ } pin := true for _, t := range want[i+1:] { - if w.LangID == t.tag.LangID { + if w.LangID == t.lang() { pin = false break } @@ -506,7 +507,7 @@ } if best.conf <= No { if len(want) != 0 { - return nil, want[0].tag, No + return nil, want[0].tag(), No } return nil, language.Tag{}, No }
diff --git a/language/match_test.go b/language/match_test.go index fd36983..3bfefff 100644 --- a/language/match_test.go +++ b/language/match_test.go
@@ -172,7 +172,7 @@ t.Errorf("scripts differ: %q vs %q", aScript, bScript) continue } - d, _ := regionGroupDist(a.tag.RegionID, b.tag.RegionID, aScript.scriptID, a.tag.LangID) + d, _ := regionGroupDist(a.region(), b.region(), aScript.scriptID, a.lang()) if d != tc.distance { t.Errorf("got %q; want %q", d, tc.distance) } @@ -189,7 +189,8 @@ "es-419": true, } for str, want := range testCases { - tag := Make(str).tag + tt := Make(str) + tag := tt.tag() got := isParadigmLocale(tag.LangID, tag.RegionID) if got != want { t.Errorf("isPL(%q) = %v; want %v", str, got, want)
diff --git a/language/parse.go b/language/parse.go index b68c02a..78122f6 100644 --- a/language/parse.go +++ b/language/parse.go
@@ -45,13 +45,13 @@ func (c CanonType) Parse(s string) (t Tag, err error) { tt, err := language.Parse(s) if err != nil { - return Tag{tt}, err + return makeTag(tt), err } tt, changed := canonicalize(c, tt) if changed { tt.RemakeString() } - return Tag{tt}, err + return makeTag(tt), err } // Compose creates a Tag from individual parts, which may be of type Tag, Base, @@ -82,7 +82,7 @@ return und, err } b.Tag, _ = canonicalize(c, b.Tag) - return Tag{b.Make()}, err + return makeTag(b.Make()), err } var errInvalidArgument = errors.New("invalid Extension or Variant") @@ -104,18 +104,7 @@ for _, x := range part { switch v := x.(type) { case Tag: - b.Tag.LangID = v.lang() - b.Tag.RegionID = v.region() - b.Tag.ScriptID = v.script() - // TODO: optimize - b.Variant = b.Variant[:0] - for _, vr := range v.Variants() { - b.Variant = append(b.Variant, vr.String()) - } - b.Ext, b.Private = b.Ext[:0], "" - for _, e := range v.Extensions() { - b.AddExt(e.String()) - } + b.SetTag(v.tag()) case Base: b.Tag.LangID = v.langID case Script: @@ -173,7 +162,7 @@ if !ok { return nil, nil, err } - t = Tag{tag: language.Tag{LangID: id}} + t = makeTag(language.Tag{LangID: id}) } // Scan the optional weight.
diff --git a/language/parse_test.go b/language/parse_test.go index fe6bc0d..0982d92 100644 --- a/language/parse_test.go +++ b/language/parse_test.go
@@ -179,14 +179,14 @@ if r, _ := language.ParseRegion(tt.region); r != tag.region() { t.Errorf("%d: region was %q; want %q", i, tag.region(), r) } - v := tag.tag.Variants() + v := tag.tag().Variants() if v != "" { v = v[1:] } if v != tt.variants { t.Errorf("%d: variants was %q; want %q", i, v, tt.variants) } - if e := strings.Join(tag.tag.Extensions(), "-"); e != tt.ext { + if e := strings.Join(tag.tag().Extensions(), "-"); e != tt.ext { t.Errorf("%d: extensions were %q; want %q", i, e, tt.ext) } }
diff --git a/language/tables.go b/language/tables.go index bc3ba6d..52f4af4 100644 --- a/language/tables.go +++ b/language/tables.go
@@ -8,98 +8,17 @@ const CLDRVersion = "32" const ( - _af = 22 - _am = 39 - _ar = 58 - _az = 88 - _bg = 126 - _bn = 165 - _ca = 215 - _cs = 250 - _da = 257 _de = 269 - _el = 310 _en = 313 - _es = 318 - _et = 320 - _fa = 328 - _fi = 337 - _fil = 339 _fr = 350 - _gu = 420 - _he = 444 - _hi = 446 - _hr = 465 - _hu = 469 - _hy = 471 - _id = 481 - _is = 504 _it = 505 - _ja = 512 - _ka = 528 - _kk = 578 - _km = 586 - _kn = 593 - _ko = 596 - _ky = 650 - _lo = 696 - _lt = 704 - _lv = 711 - _mk = 767 - _ml = 772 - _mn = 779 _mo = 784 - _mr = 795 - _ms = 799 - _mul = 806 - _my = 817 - _nb = 839 - _ne = 849 - _nl = 871 _no = 879 - _pa = 925 - _pl = 947 + _nb = 839 _pt = 960 - _ro = 988 - _ru = 994 _sh = 1031 - _si = 1036 - _sk = 1042 - _sl = 1046 - _sq = 1073 - _sr = 1074 - _sv = 1092 - _sw = 1093 - _ta = 1104 - _te = 1121 - _th = 1131 - _tl = 1146 - _tn = 1152 - _tr = 1162 - _uk = 1198 - _ur = 1204 - _uz = 1212 - _vi = 1219 - _zh = 1321 - _zu = 1327 - _jbo = 515 - _ami = 1650 - _bnn = 2357 - _hak = 438 - _tlh = 14467 - _lb = 661 - _nv = 899 - _pwn = 12055 - _tao = 14188 - _tay = 14198 - _tsu = 14662 - _nn = 874 - _sfb = 13629 - _vgt = 15701 - _sgg = 13660 - _cmn = 3007 - _nan = 835 - _hsn = 467 + _mul = 806 + _und = 0 ) const ( _001 = 1 @@ -134,781 +53,781 @@ // NumCompactTags-1. const NumCompactTags = 775 const ( - xund compactID = 0 - xaf compactID = 1 - xafNA compactID = 2 - xafZA compactID = 3 - xagq compactID = 4 - xagqCM compactID = 5 - xak compactID = 6 - xakGH compactID = 7 - xam compactID = 8 - xamET compactID = 9 - xar compactID = 10 - xar001 compactID = 11 - xarAE compactID = 12 - xarBH compactID = 13 - xarDJ compactID = 14 - xarDZ compactID = 15 - xarEG compactID = 16 - xarEH compactID = 17 - xarER compactID = 18 - xarIL compactID = 19 - xarIQ compactID = 20 - xarJO compactID = 21 - xarKM compactID = 22 - xarKW compactID = 23 - xarLB compactID = 24 - xarLY compactID = 25 - xarMA compactID = 26 - xarMR compactID = 27 - xarOM compactID = 28 - xarPS compactID = 29 - xarQA compactID = 30 - xarSA compactID = 31 - xarSD compactID = 32 - xarSO compactID = 33 - xarSS compactID = 34 - xarSY compactID = 35 - xarTD compactID = 36 - xarTN compactID = 37 - xarYE compactID = 38 - xars compactID = 39 - xas compactID = 40 - xasIN compactID = 41 - xasa compactID = 42 - xasaTZ compactID = 43 - xast compactID = 44 - xastES compactID = 45 - xaz compactID = 46 - xazCyrl compactID = 47 - xazCyrlAZ compactID = 48 - xazLatn compactID = 49 - xazLatnAZ compactID = 50 - xbas compactID = 51 - xbasCM compactID = 52 - xbe compactID = 53 - xbeBY compactID = 54 - xbem compactID = 55 - xbemZM compactID = 56 - xbez compactID = 57 - xbezTZ compactID = 58 - xbg compactID = 59 - xbgBG compactID = 60 - xbh compactID = 61 - xbm compactID = 62 - xbmML compactID = 63 - xbn compactID = 64 - xbnBD compactID = 65 - xbnIN compactID = 66 - xbo compactID = 67 - xboCN compactID = 68 - xboIN compactID = 69 - xbr compactID = 70 - xbrFR compactID = 71 - xbrx compactID = 72 - xbrxIN compactID = 73 - xbs compactID = 74 - xbsCyrl compactID = 75 - xbsCyrlBA compactID = 76 - xbsLatn compactID = 77 - xbsLatnBA compactID = 78 - xca compactID = 79 - xcaAD compactID = 80 - xcaES compactID = 81 - xcaFR compactID = 82 - xcaIT compactID = 83 - xccp compactID = 84 - xccpBD compactID = 85 - xccpIN compactID = 86 - xce compactID = 87 - xceRU compactID = 88 - xcgg compactID = 89 - xcggUG compactID = 90 - xchr compactID = 91 - xchrUS compactID = 92 - xckb compactID = 93 - xckbIQ compactID = 94 - xckbIR compactID = 95 - xcs compactID = 96 - xcsCZ compactID = 97 - xcu compactID = 98 - xcuRU compactID = 99 - xcy compactID = 100 - xcyGB compactID = 101 - xda compactID = 102 - xdaDK compactID = 103 - xdaGL compactID = 104 - xdav compactID = 105 - xdavKE compactID = 106 - xde compactID = 107 - xdeAT compactID = 108 - xdeBE compactID = 109 - xdeCH compactID = 110 - xdeDE compactID = 111 - xdeIT compactID = 112 - xdeLI compactID = 113 - xdeLU compactID = 114 - xdje compactID = 115 - xdjeNE compactID = 116 - xdsb compactID = 117 - xdsbDE compactID = 118 - xdua compactID = 119 - xduaCM compactID = 120 - xdv compactID = 121 - xdyo compactID = 122 - xdyoSN compactID = 123 - xdz compactID = 124 - xdzBT compactID = 125 - xebu compactID = 126 - xebuKE compactID = 127 - xee compactID = 128 - xeeGH compactID = 129 - xeeTG compactID = 130 - xel compactID = 131 - xelCY compactID = 132 - xelGR compactID = 133 - xen compactID = 134 - xen001 compactID = 135 - xen150 compactID = 136 - xenAG compactID = 137 - xenAI compactID = 138 - xenAS compactID = 139 - xenAT compactID = 140 - xenAU compactID = 141 - xenBB compactID = 142 - xenBE compactID = 143 - xenBI compactID = 144 - xenBM compactID = 145 - xenBS compactID = 146 - xenBW compactID = 147 - xenBZ compactID = 148 - xenCA compactID = 149 - xenCC compactID = 150 - xenCH compactID = 151 - xenCK compactID = 152 - xenCM compactID = 153 - xenCX compactID = 154 - xenCY compactID = 155 - xenDE compactID = 156 - xenDG compactID = 157 - xenDK compactID = 158 - xenDM compactID = 159 - xenER compactID = 160 - xenFI compactID = 161 - xenFJ compactID = 162 - xenFK compactID = 163 - xenFM compactID = 164 - xenGB compactID = 165 - xenGD compactID = 166 - xenGG compactID = 167 - xenGH compactID = 168 - xenGI compactID = 169 - xenGM compactID = 170 - xenGU compactID = 171 - xenGY compactID = 172 - xenHK compactID = 173 - xenIE compactID = 174 - xenIL compactID = 175 - xenIM compactID = 176 - xenIN compactID = 177 - xenIO compactID = 178 - xenJE compactID = 179 - xenJM compactID = 180 - xenKE compactID = 181 - xenKI compactID = 182 - xenKN compactID = 183 - xenKY compactID = 184 - xenLC compactID = 185 - xenLR compactID = 186 - xenLS compactID = 187 - xenMG compactID = 188 - xenMH compactID = 189 - xenMO compactID = 190 - xenMP compactID = 191 - xenMS compactID = 192 - xenMT compactID = 193 - xenMU compactID = 194 - xenMW compactID = 195 - xenMY compactID = 196 - xenNA compactID = 197 - xenNF compactID = 198 - xenNG compactID = 199 - xenNL compactID = 200 - xenNR compactID = 201 - xenNU compactID = 202 - xenNZ compactID = 203 - xenPG compactID = 204 - xenPH compactID = 205 - xenPK compactID = 206 - xenPN compactID = 207 - xenPR compactID = 208 - xenPW compactID = 209 - xenRW compactID = 210 - xenSB compactID = 211 - xenSC compactID = 212 - xenSD compactID = 213 - xenSE compactID = 214 - xenSG compactID = 215 - xenSH compactID = 216 - xenSI compactID = 217 - xenSL compactID = 218 - xenSS compactID = 219 - xenSX compactID = 220 - xenSZ compactID = 221 - xenTC compactID = 222 - xenTK compactID = 223 - xenTO compactID = 224 - xenTT compactID = 225 - xenTV compactID = 226 - xenTZ compactID = 227 - xenUG compactID = 228 - xenUM compactID = 229 - xenUS compactID = 230 - xenVC compactID = 231 - xenVG compactID = 232 - xenVI compactID = 233 - xenVU compactID = 234 - xenWS compactID = 235 - xenZA compactID = 236 - xenZM compactID = 237 - xenZW compactID = 238 - xeo compactID = 239 - xeo001 compactID = 240 - xes compactID = 241 - xes419 compactID = 242 - xesAR compactID = 243 - xesBO compactID = 244 - xesBR compactID = 245 - xesBZ compactID = 246 - xesCL compactID = 247 - xesCO compactID = 248 - xesCR compactID = 249 - xesCU compactID = 250 - xesDO compactID = 251 - xesEA compactID = 252 - xesEC compactID = 253 - xesES compactID = 254 - xesGQ compactID = 255 - xesGT compactID = 256 - xesHN compactID = 257 - xesIC compactID = 258 - xesMX compactID = 259 - xesNI compactID = 260 - xesPA compactID = 261 - xesPE compactID = 262 - xesPH compactID = 263 - xesPR compactID = 264 - xesPY compactID = 265 - xesSV compactID = 266 - xesUS compactID = 267 - xesUY compactID = 268 - xesVE compactID = 269 - xet compactID = 270 - xetEE compactID = 271 - xeu compactID = 272 - xeuES compactID = 273 - xewo compactID = 274 - xewoCM compactID = 275 - xfa compactID = 276 - xfaAF compactID = 277 - xfaIR compactID = 278 - xff compactID = 279 - xffCM compactID = 280 - xffGN compactID = 281 - xffMR compactID = 282 - xffSN compactID = 283 - xfi compactID = 284 - xfiFI compactID = 285 - xfil compactID = 286 - xfilPH compactID = 287 - xfo compactID = 288 - xfoDK compactID = 289 - xfoFO compactID = 290 - xfr compactID = 291 - xfrBE compactID = 292 - xfrBF compactID = 293 - xfrBI compactID = 294 - xfrBJ compactID = 295 - xfrBL compactID = 296 - xfrCA compactID = 297 - xfrCD compactID = 298 - xfrCF compactID = 299 - xfrCG compactID = 300 - xfrCH compactID = 301 - xfrCI compactID = 302 - xfrCM compactID = 303 - xfrDJ compactID = 304 - xfrDZ compactID = 305 - xfrFR compactID = 306 - xfrGA compactID = 307 - xfrGF compactID = 308 - xfrGN compactID = 309 - xfrGP compactID = 310 - xfrGQ compactID = 311 - xfrHT compactID = 312 - xfrKM compactID = 313 - xfrLU compactID = 314 - xfrMA compactID = 315 - xfrMC compactID = 316 - xfrMF compactID = 317 - xfrMG compactID = 318 - xfrML compactID = 319 - xfrMQ compactID = 320 - xfrMR compactID = 321 - xfrMU compactID = 322 - xfrNC compactID = 323 - xfrNE compactID = 324 - xfrPF compactID = 325 - xfrPM compactID = 326 - xfrRE compactID = 327 - xfrRW compactID = 328 - xfrSC compactID = 329 - xfrSN compactID = 330 - xfrSY compactID = 331 - xfrTD compactID = 332 - xfrTG compactID = 333 - xfrTN compactID = 334 - xfrVU compactID = 335 - xfrWF compactID = 336 - xfrYT compactID = 337 - xfur compactID = 338 - xfurIT compactID = 339 - xfy compactID = 340 - xfyNL compactID = 341 - xga compactID = 342 - xgaIE compactID = 343 - xgd compactID = 344 - xgdGB compactID = 345 - xgl compactID = 346 - xglES compactID = 347 - xgsw compactID = 348 - xgswCH compactID = 349 - xgswFR compactID = 350 - xgswLI compactID = 351 - xgu compactID = 352 - xguIN compactID = 353 - xguw compactID = 354 - xguz compactID = 355 - xguzKE compactID = 356 - xgv compactID = 357 - xgvIM compactID = 358 - xha compactID = 359 - xhaGH compactID = 360 - xhaNE compactID = 361 - xhaNG compactID = 362 - xhaw compactID = 363 - xhawUS compactID = 364 - xhe compactID = 365 - xheIL compactID = 366 - xhi compactID = 367 - xhiIN compactID = 368 - xhr compactID = 369 - xhrBA compactID = 370 - xhrHR compactID = 371 - xhsb compactID = 372 - xhsbDE compactID = 373 - xhu compactID = 374 - xhuHU compactID = 375 - xhy compactID = 376 - xhyAM compactID = 377 - xid compactID = 378 - xidID compactID = 379 - xig compactID = 380 - xigNG compactID = 381 - xii compactID = 382 - xiiCN compactID = 383 - xin compactID = 384 - xio compactID = 385 - xis compactID = 386 - xisIS compactID = 387 - xit compactID = 388 - xitCH compactID = 389 - xitIT compactID = 390 - xitSM compactID = 391 - xitVA compactID = 392 - xiu compactID = 393 - xiw compactID = 394 - xja compactID = 395 - xjaJP compactID = 396 - xjbo compactID = 397 - xjgo compactID = 398 - xjgoCM compactID = 399 - xji compactID = 400 - xjmc compactID = 401 - xjmcTZ compactID = 402 - xjv compactID = 403 - xjw compactID = 404 - xka compactID = 405 - xkaGE compactID = 406 - xkab compactID = 407 - xkabDZ compactID = 408 - xkaj compactID = 409 - xkam compactID = 410 - xkamKE compactID = 411 - xkcg compactID = 412 - xkde compactID = 413 - xkdeTZ compactID = 414 - xkea compactID = 415 - xkeaCV compactID = 416 - xkhq compactID = 417 - xkhqML compactID = 418 - xki compactID = 419 - xkiKE compactID = 420 - xkk compactID = 421 - xkkKZ compactID = 422 - xkkj compactID = 423 - xkkjCM compactID = 424 - xkl compactID = 425 - xklGL compactID = 426 - xkln compactID = 427 - xklnKE compactID = 428 - xkm compactID = 429 - xkmKH compactID = 430 - xkn compactID = 431 - xknIN compactID = 432 - xko compactID = 433 - xkoKP compactID = 434 - xkoKR compactID = 435 - xkok compactID = 436 - xkokIN compactID = 437 - xks compactID = 438 - xksIN compactID = 439 - xksb compactID = 440 - xksbTZ compactID = 441 - xksf compactID = 442 - xksfCM compactID = 443 - xksh compactID = 444 - xkshDE compactID = 445 - xku compactID = 446 - xkw compactID = 447 - xkwGB compactID = 448 - xky compactID = 449 - xkyKG compactID = 450 - xlag compactID = 451 - xlagTZ compactID = 452 - xlb compactID = 453 - xlbLU compactID = 454 - xlg compactID = 455 - xlgUG compactID = 456 - xlkt compactID = 457 - xlktUS compactID = 458 - xln compactID = 459 - xlnAO compactID = 460 - xlnCD compactID = 461 - xlnCF compactID = 462 - xlnCG compactID = 463 - xlo compactID = 464 - xloLA compactID = 465 - xlrc compactID = 466 - xlrcIQ compactID = 467 - xlrcIR compactID = 468 - xlt compactID = 469 - xltLT compactID = 470 - xlu compactID = 471 - xluCD compactID = 472 - xluo compactID = 473 - xluoKE compactID = 474 - xluy compactID = 475 - xluyKE compactID = 476 - xlv compactID = 477 - xlvLV compactID = 478 - xmas compactID = 479 - xmasKE compactID = 480 - xmasTZ compactID = 481 - xmer compactID = 482 - xmerKE compactID = 483 - xmfe compactID = 484 - xmfeMU compactID = 485 - xmg compactID = 486 - xmgMG compactID = 487 - xmgh compactID = 488 - xmghMZ compactID = 489 - xmgo compactID = 490 - xmgoCM compactID = 491 - xmk compactID = 492 - xmkMK compactID = 493 - xml compactID = 494 - xmlIN compactID = 495 - xmn compactID = 496 - xmnMN compactID = 497 - xmo compactID = 498 - xmr compactID = 499 - xmrIN compactID = 500 - xms compactID = 501 - xmsBN compactID = 502 - xmsMY compactID = 503 - xmsSG compactID = 504 - xmt compactID = 505 - xmtMT compactID = 506 - xmua compactID = 507 - xmuaCM compactID = 508 - xmy compactID = 509 - xmyMM compactID = 510 - xmzn compactID = 511 - xmznIR compactID = 512 - xnah compactID = 513 - xnaq compactID = 514 - xnaqNA compactID = 515 - xnb compactID = 516 - xnbNO compactID = 517 - xnbSJ compactID = 518 - xnd compactID = 519 - xndZW compactID = 520 - xnds compactID = 521 - xndsDE compactID = 522 - xndsNL compactID = 523 - xne compactID = 524 - xneIN compactID = 525 - xneNP compactID = 526 - xnl compactID = 527 - xnlAW compactID = 528 - xnlBE compactID = 529 - xnlBQ compactID = 530 - xnlCW compactID = 531 - xnlNL compactID = 532 - xnlSR compactID = 533 - xnlSX compactID = 534 - xnmg compactID = 535 - xnmgCM compactID = 536 - xnn compactID = 537 - xnnNO compactID = 538 - xnnh compactID = 539 - xnnhCM compactID = 540 - xno compactID = 541 - xnqo compactID = 542 - xnr compactID = 543 - xnso compactID = 544 - xnus compactID = 545 - xnusSS compactID = 546 - xny compactID = 547 - xnyn compactID = 548 - xnynUG compactID = 549 - xom compactID = 550 - xomET compactID = 551 - xomKE compactID = 552 - xor compactID = 553 - xorIN compactID = 554 - xos compactID = 555 - xosGE compactID = 556 - xosRU compactID = 557 - xpa compactID = 558 - xpaArab compactID = 559 - xpaArabPK compactID = 560 - xpaGuru compactID = 561 - xpaGuruIN compactID = 562 - xpap compactID = 563 - xpl compactID = 564 - xplPL compactID = 565 - xprg compactID = 566 - xprg001 compactID = 567 - xps compactID = 568 - xpsAF compactID = 569 - xpt compactID = 570 - xptAO compactID = 571 - xptBR compactID = 572 - xptCH compactID = 573 - xptCV compactID = 574 - xptGQ compactID = 575 - xptGW compactID = 576 - xptLU compactID = 577 - xptMO compactID = 578 - xptMZ compactID = 579 - xptPT compactID = 580 - xptST compactID = 581 - xptTL compactID = 582 - xqu compactID = 583 - xquBO compactID = 584 - xquEC compactID = 585 - xquPE compactID = 586 - xrm compactID = 587 - xrmCH compactID = 588 - xrn compactID = 589 - xrnBI compactID = 590 - xro compactID = 591 - xroMD compactID = 592 - xroRO compactID = 593 - xrof compactID = 594 - xrofTZ compactID = 595 - xru compactID = 596 - xruBY compactID = 597 - xruKG compactID = 598 - xruKZ compactID = 599 - xruMD compactID = 600 - xruRU compactID = 601 - xruUA compactID = 602 - xrw compactID = 603 - xrwRW compactID = 604 - xrwk compactID = 605 - xrwkTZ compactID = 606 - xsah compactID = 607 - xsahRU compactID = 608 - xsaq compactID = 609 - xsaqKE compactID = 610 - xsbp compactID = 611 - xsbpTZ compactID = 612 - xsd compactID = 613 - xsdPK compactID = 614 - xsdh compactID = 615 - xse compactID = 616 - xseFI compactID = 617 - xseNO compactID = 618 - xseSE compactID = 619 - xseh compactID = 620 - xsehMZ compactID = 621 - xses compactID = 622 - xsesML compactID = 623 - xsg compactID = 624 - xsgCF compactID = 625 - xsh compactID = 626 - xshi compactID = 627 - xshiLatn compactID = 628 - xshiLatnMA compactID = 629 - xshiTfng compactID = 630 - xshiTfngMA compactID = 631 - xsi compactID = 632 - xsiLK compactID = 633 - xsk compactID = 634 - xskSK compactID = 635 - xsl compactID = 636 - xslSI compactID = 637 - xsma compactID = 638 - xsmi compactID = 639 - xsmj compactID = 640 - xsmn compactID = 641 - xsmnFI compactID = 642 - xsms compactID = 643 - xsn compactID = 644 - xsnZW compactID = 645 - xso compactID = 646 - xsoDJ compactID = 647 - xsoET compactID = 648 - xsoKE compactID = 649 - xsoSO compactID = 650 - xsq compactID = 651 - xsqAL compactID = 652 - xsqMK compactID = 653 - xsqXK compactID = 654 - xsr compactID = 655 - xsrCyrl compactID = 656 - xsrCyrlBA compactID = 657 - xsrCyrlME compactID = 658 - xsrCyrlRS compactID = 659 - xsrCyrlXK compactID = 660 - xsrLatn compactID = 661 - xsrLatnBA compactID = 662 - xsrLatnME compactID = 663 - xsrLatnRS compactID = 664 - xsrLatnXK compactID = 665 - xss compactID = 666 - xssy compactID = 667 - xst compactID = 668 - xsv compactID = 669 - xsvAX compactID = 670 - xsvFI compactID = 671 - xsvSE compactID = 672 - xsw compactID = 673 - xswCD compactID = 674 - xswKE compactID = 675 - xswTZ compactID = 676 - xswUG compactID = 677 - xsyr compactID = 678 - xta compactID = 679 - xtaIN compactID = 680 - xtaLK compactID = 681 - xtaMY compactID = 682 - xtaSG compactID = 683 - xte compactID = 684 - xteIN compactID = 685 - xteo compactID = 686 - xteoKE compactID = 687 - xteoUG compactID = 688 - xtg compactID = 689 - xtgTJ compactID = 690 - xth compactID = 691 - xthTH compactID = 692 - xti compactID = 693 - xtiER compactID = 694 - xtiET compactID = 695 - xtig compactID = 696 - xtk compactID = 697 - xtkTM compactID = 698 - xtl compactID = 699 - xtn compactID = 700 - xto compactID = 701 - xtoTO compactID = 702 - xtr compactID = 703 - xtrCY compactID = 704 - xtrTR compactID = 705 - xts compactID = 706 - xtt compactID = 707 - xttRU compactID = 708 - xtwq compactID = 709 - xtwqNE compactID = 710 - xtzm compactID = 711 - xtzmMA compactID = 712 - xug compactID = 713 - xugCN compactID = 714 - xuk compactID = 715 - xukUA compactID = 716 - xur compactID = 717 - xurIN compactID = 718 - xurPK compactID = 719 - xuz compactID = 720 - xuzArab compactID = 721 - xuzArabAF compactID = 722 - xuzCyrl compactID = 723 - xuzCyrlUZ compactID = 724 - xuzLatn compactID = 725 - xuzLatnUZ compactID = 726 - xvai compactID = 727 - xvaiLatn compactID = 728 - xvaiLatnLR compactID = 729 - xvaiVaii compactID = 730 - xvaiVaiiLR compactID = 731 - xve compactID = 732 - xvi compactID = 733 - xviVN compactID = 734 - xvo compactID = 735 - xvo001 compactID = 736 - xvun compactID = 737 - xvunTZ compactID = 738 - xwa compactID = 739 - xwae compactID = 740 - xwaeCH compactID = 741 - xwo compactID = 742 - xwoSN compactID = 743 - xxh compactID = 744 - xxog compactID = 745 - xxogUG compactID = 746 - xyav compactID = 747 - xyavCM compactID = 748 - xyi compactID = 749 - xyi001 compactID = 750 - xyo compactID = 751 - xyoBJ compactID = 752 - xyoNG compactID = 753 - xyue compactID = 754 - xyueHans compactID = 755 - xyueHansCN compactID = 756 - xyueHant compactID = 757 - xyueHantHK compactID = 758 - xzgh compactID = 759 - xzghMA compactID = 760 - xzh compactID = 761 - xzhHans compactID = 762 - xzhHansCN compactID = 763 - xzhHansHK compactID = 764 - xzhHansMO compactID = 765 - xzhHansSG compactID = 766 - xzhHant compactID = 767 - xzhHantHK compactID = 768 - xzhHantMO compactID = 769 - xzhHantTW compactID = 770 - xzu compactID = 771 - xzuZA compactID = 772 - xcaESvalencia compactID = 773 - xenUSuvaposix compactID = 774 + undIndex compactID = 0 + afIndex compactID = 1 + afNAIndex compactID = 2 + afZAIndex compactID = 3 + agqIndex compactID = 4 + agqCMIndex compactID = 5 + akIndex compactID = 6 + akGHIndex compactID = 7 + amIndex compactID = 8 + amETIndex compactID = 9 + arIndex compactID = 10 + ar001Index compactID = 11 + arAEIndex compactID = 12 + arBHIndex compactID = 13 + arDJIndex compactID = 14 + arDZIndex compactID = 15 + arEGIndex compactID = 16 + arEHIndex compactID = 17 + arERIndex compactID = 18 + arILIndex compactID = 19 + arIQIndex compactID = 20 + arJOIndex compactID = 21 + arKMIndex compactID = 22 + arKWIndex compactID = 23 + arLBIndex compactID = 24 + arLYIndex compactID = 25 + arMAIndex compactID = 26 + arMRIndex compactID = 27 + arOMIndex compactID = 28 + arPSIndex compactID = 29 + arQAIndex compactID = 30 + arSAIndex compactID = 31 + arSDIndex compactID = 32 + arSOIndex compactID = 33 + arSSIndex compactID = 34 + arSYIndex compactID = 35 + arTDIndex compactID = 36 + arTNIndex compactID = 37 + arYEIndex compactID = 38 + arsIndex compactID = 39 + asIndex compactID = 40 + asINIndex compactID = 41 + asaIndex compactID = 42 + asaTZIndex compactID = 43 + astIndex compactID = 44 + astESIndex compactID = 45 + azIndex compactID = 46 + azCyrlIndex compactID = 47 + azCyrlAZIndex compactID = 48 + azLatnIndex compactID = 49 + azLatnAZIndex compactID = 50 + basIndex compactID = 51 + basCMIndex compactID = 52 + beIndex compactID = 53 + beBYIndex compactID = 54 + bemIndex compactID = 55 + bemZMIndex compactID = 56 + bezIndex compactID = 57 + bezTZIndex compactID = 58 + bgIndex compactID = 59 + bgBGIndex compactID = 60 + bhIndex compactID = 61 + bmIndex compactID = 62 + bmMLIndex compactID = 63 + bnIndex compactID = 64 + bnBDIndex compactID = 65 + bnINIndex compactID = 66 + boIndex compactID = 67 + boCNIndex compactID = 68 + boINIndex compactID = 69 + brIndex compactID = 70 + brFRIndex compactID = 71 + brxIndex compactID = 72 + brxINIndex compactID = 73 + bsIndex compactID = 74 + bsCyrlIndex compactID = 75 + bsCyrlBAIndex compactID = 76 + bsLatnIndex compactID = 77 + bsLatnBAIndex compactID = 78 + caIndex compactID = 79 + caADIndex compactID = 80 + caESIndex compactID = 81 + caFRIndex compactID = 82 + caITIndex compactID = 83 + ccpIndex compactID = 84 + ccpBDIndex compactID = 85 + ccpINIndex compactID = 86 + ceIndex compactID = 87 + ceRUIndex compactID = 88 + cggIndex compactID = 89 + cggUGIndex compactID = 90 + chrIndex compactID = 91 + chrUSIndex compactID = 92 + ckbIndex compactID = 93 + ckbIQIndex compactID = 94 + ckbIRIndex compactID = 95 + csIndex compactID = 96 + csCZIndex compactID = 97 + cuIndex compactID = 98 + cuRUIndex compactID = 99 + cyIndex compactID = 100 + cyGBIndex compactID = 101 + daIndex compactID = 102 + daDKIndex compactID = 103 + daGLIndex compactID = 104 + davIndex compactID = 105 + davKEIndex compactID = 106 + deIndex compactID = 107 + deATIndex compactID = 108 + deBEIndex compactID = 109 + deCHIndex compactID = 110 + deDEIndex compactID = 111 + deITIndex compactID = 112 + deLIIndex compactID = 113 + deLUIndex compactID = 114 + djeIndex compactID = 115 + djeNEIndex compactID = 116 + dsbIndex compactID = 117 + dsbDEIndex compactID = 118 + duaIndex compactID = 119 + duaCMIndex compactID = 120 + dvIndex compactID = 121 + dyoIndex compactID = 122 + dyoSNIndex compactID = 123 + dzIndex compactID = 124 + dzBTIndex compactID = 125 + ebuIndex compactID = 126 + ebuKEIndex compactID = 127 + eeIndex compactID = 128 + eeGHIndex compactID = 129 + eeTGIndex compactID = 130 + elIndex compactID = 131 + elCYIndex compactID = 132 + elGRIndex compactID = 133 + enIndex compactID = 134 + en001Index compactID = 135 + en150Index compactID = 136 + enAGIndex compactID = 137 + enAIIndex compactID = 138 + enASIndex compactID = 139 + enATIndex compactID = 140 + enAUIndex compactID = 141 + enBBIndex compactID = 142 + enBEIndex compactID = 143 + enBIIndex compactID = 144 + enBMIndex compactID = 145 + enBSIndex compactID = 146 + enBWIndex compactID = 147 + enBZIndex compactID = 148 + enCAIndex compactID = 149 + enCCIndex compactID = 150 + enCHIndex compactID = 151 + enCKIndex compactID = 152 + enCMIndex compactID = 153 + enCXIndex compactID = 154 + enCYIndex compactID = 155 + enDEIndex compactID = 156 + enDGIndex compactID = 157 + enDKIndex compactID = 158 + enDMIndex compactID = 159 + enERIndex compactID = 160 + enFIIndex compactID = 161 + enFJIndex compactID = 162 + enFKIndex compactID = 163 + enFMIndex compactID = 164 + enGBIndex compactID = 165 + enGDIndex compactID = 166 + enGGIndex compactID = 167 + enGHIndex compactID = 168 + enGIIndex compactID = 169 + enGMIndex compactID = 170 + enGUIndex compactID = 171 + enGYIndex compactID = 172 + enHKIndex compactID = 173 + enIEIndex compactID = 174 + enILIndex compactID = 175 + enIMIndex compactID = 176 + enINIndex compactID = 177 + enIOIndex compactID = 178 + enJEIndex compactID = 179 + enJMIndex compactID = 180 + enKEIndex compactID = 181 + enKIIndex compactID = 182 + enKNIndex compactID = 183 + enKYIndex compactID = 184 + enLCIndex compactID = 185 + enLRIndex compactID = 186 + enLSIndex compactID = 187 + enMGIndex compactID = 188 + enMHIndex compactID = 189 + enMOIndex compactID = 190 + enMPIndex compactID = 191 + enMSIndex compactID = 192 + enMTIndex compactID = 193 + enMUIndex compactID = 194 + enMWIndex compactID = 195 + enMYIndex compactID = 196 + enNAIndex compactID = 197 + enNFIndex compactID = 198 + enNGIndex compactID = 199 + enNLIndex compactID = 200 + enNRIndex compactID = 201 + enNUIndex compactID = 202 + enNZIndex compactID = 203 + enPGIndex compactID = 204 + enPHIndex compactID = 205 + enPKIndex compactID = 206 + enPNIndex compactID = 207 + enPRIndex compactID = 208 + enPWIndex compactID = 209 + enRWIndex compactID = 210 + enSBIndex compactID = 211 + enSCIndex compactID = 212 + enSDIndex compactID = 213 + enSEIndex compactID = 214 + enSGIndex compactID = 215 + enSHIndex compactID = 216 + enSIIndex compactID = 217 + enSLIndex compactID = 218 + enSSIndex compactID = 219 + enSXIndex compactID = 220 + enSZIndex compactID = 221 + enTCIndex compactID = 222 + enTKIndex compactID = 223 + enTOIndex compactID = 224 + enTTIndex compactID = 225 + enTVIndex compactID = 226 + enTZIndex compactID = 227 + enUGIndex compactID = 228 + enUMIndex compactID = 229 + enUSIndex compactID = 230 + enVCIndex compactID = 231 + enVGIndex compactID = 232 + enVIIndex compactID = 233 + enVUIndex compactID = 234 + enWSIndex compactID = 235 + enZAIndex compactID = 236 + enZMIndex compactID = 237 + enZWIndex compactID = 238 + eoIndex compactID = 239 + eo001Index compactID = 240 + esIndex compactID = 241 + es419Index compactID = 242 + esARIndex compactID = 243 + esBOIndex compactID = 244 + esBRIndex compactID = 245 + esBZIndex compactID = 246 + esCLIndex compactID = 247 + esCOIndex compactID = 248 + esCRIndex compactID = 249 + esCUIndex compactID = 250 + esDOIndex compactID = 251 + esEAIndex compactID = 252 + esECIndex compactID = 253 + esESIndex compactID = 254 + esGQIndex compactID = 255 + esGTIndex compactID = 256 + esHNIndex compactID = 257 + esICIndex compactID = 258 + esMXIndex compactID = 259 + esNIIndex compactID = 260 + esPAIndex compactID = 261 + esPEIndex compactID = 262 + esPHIndex compactID = 263 + esPRIndex compactID = 264 + esPYIndex compactID = 265 + esSVIndex compactID = 266 + esUSIndex compactID = 267 + esUYIndex compactID = 268 + esVEIndex compactID = 269 + etIndex compactID = 270 + etEEIndex compactID = 271 + euIndex compactID = 272 + euESIndex compactID = 273 + ewoIndex compactID = 274 + ewoCMIndex compactID = 275 + faIndex compactID = 276 + faAFIndex compactID = 277 + faIRIndex compactID = 278 + ffIndex compactID = 279 + ffCMIndex compactID = 280 + ffGNIndex compactID = 281 + ffMRIndex compactID = 282 + ffSNIndex compactID = 283 + fiIndex compactID = 284 + fiFIIndex compactID = 285 + filIndex compactID = 286 + filPHIndex compactID = 287 + foIndex compactID = 288 + foDKIndex compactID = 289 + foFOIndex compactID = 290 + frIndex compactID = 291 + frBEIndex compactID = 292 + frBFIndex compactID = 293 + frBIIndex compactID = 294 + frBJIndex compactID = 295 + frBLIndex compactID = 296 + frCAIndex compactID = 297 + frCDIndex compactID = 298 + frCFIndex compactID = 299 + frCGIndex compactID = 300 + frCHIndex compactID = 301 + frCIIndex compactID = 302 + frCMIndex compactID = 303 + frDJIndex compactID = 304 + frDZIndex compactID = 305 + frFRIndex compactID = 306 + frGAIndex compactID = 307 + frGFIndex compactID = 308 + frGNIndex compactID = 309 + frGPIndex compactID = 310 + frGQIndex compactID = 311 + frHTIndex compactID = 312 + frKMIndex compactID = 313 + frLUIndex compactID = 314 + frMAIndex compactID = 315 + frMCIndex compactID = 316 + frMFIndex compactID = 317 + frMGIndex compactID = 318 + frMLIndex compactID = 319 + frMQIndex compactID = 320 + frMRIndex compactID = 321 + frMUIndex compactID = 322 + frNCIndex compactID = 323 + frNEIndex compactID = 324 + frPFIndex compactID = 325 + frPMIndex compactID = 326 + frREIndex compactID = 327 + frRWIndex compactID = 328 + frSCIndex compactID = 329 + frSNIndex compactID = 330 + frSYIndex compactID = 331 + frTDIndex compactID = 332 + frTGIndex compactID = 333 + frTNIndex compactID = 334 + frVUIndex compactID = 335 + frWFIndex compactID = 336 + frYTIndex compactID = 337 + furIndex compactID = 338 + furITIndex compactID = 339 + fyIndex compactID = 340 + fyNLIndex compactID = 341 + gaIndex compactID = 342 + gaIEIndex compactID = 343 + gdIndex compactID = 344 + gdGBIndex compactID = 345 + glIndex compactID = 346 + glESIndex compactID = 347 + gswIndex compactID = 348 + gswCHIndex compactID = 349 + gswFRIndex compactID = 350 + gswLIIndex compactID = 351 + guIndex compactID = 352 + guINIndex compactID = 353 + guwIndex compactID = 354 + guzIndex compactID = 355 + guzKEIndex compactID = 356 + gvIndex compactID = 357 + gvIMIndex compactID = 358 + haIndex compactID = 359 + haGHIndex compactID = 360 + haNEIndex compactID = 361 + haNGIndex compactID = 362 + hawIndex compactID = 363 + hawUSIndex compactID = 364 + heIndex compactID = 365 + heILIndex compactID = 366 + hiIndex compactID = 367 + hiINIndex compactID = 368 + hrIndex compactID = 369 + hrBAIndex compactID = 370 + hrHRIndex compactID = 371 + hsbIndex compactID = 372 + hsbDEIndex compactID = 373 + huIndex compactID = 374 + huHUIndex compactID = 375 + hyIndex compactID = 376 + hyAMIndex compactID = 377 + idIndex compactID = 378 + idIDIndex compactID = 379 + igIndex compactID = 380 + igNGIndex compactID = 381 + iiIndex compactID = 382 + iiCNIndex compactID = 383 + inIndex compactID = 384 + ioIndex compactID = 385 + isIndex compactID = 386 + isISIndex compactID = 387 + itIndex compactID = 388 + itCHIndex compactID = 389 + itITIndex compactID = 390 + itSMIndex compactID = 391 + itVAIndex compactID = 392 + iuIndex compactID = 393 + iwIndex compactID = 394 + jaIndex compactID = 395 + jaJPIndex compactID = 396 + jboIndex compactID = 397 + jgoIndex compactID = 398 + jgoCMIndex compactID = 399 + jiIndex compactID = 400 + jmcIndex compactID = 401 + jmcTZIndex compactID = 402 + jvIndex compactID = 403 + jwIndex compactID = 404 + kaIndex compactID = 405 + kaGEIndex compactID = 406 + kabIndex compactID = 407 + kabDZIndex compactID = 408 + kajIndex compactID = 409 + kamIndex compactID = 410 + kamKEIndex compactID = 411 + kcgIndex compactID = 412 + kdeIndex compactID = 413 + kdeTZIndex compactID = 414 + keaIndex compactID = 415 + keaCVIndex compactID = 416 + khqIndex compactID = 417 + khqMLIndex compactID = 418 + kiIndex compactID = 419 + kiKEIndex compactID = 420 + kkIndex compactID = 421 + kkKZIndex compactID = 422 + kkjIndex compactID = 423 + kkjCMIndex compactID = 424 + klIndex compactID = 425 + klGLIndex compactID = 426 + klnIndex compactID = 427 + klnKEIndex compactID = 428 + kmIndex compactID = 429 + kmKHIndex compactID = 430 + knIndex compactID = 431 + knINIndex compactID = 432 + koIndex compactID = 433 + koKPIndex compactID = 434 + koKRIndex compactID = 435 + kokIndex compactID = 436 + kokINIndex compactID = 437 + ksIndex compactID = 438 + ksINIndex compactID = 439 + ksbIndex compactID = 440 + ksbTZIndex compactID = 441 + ksfIndex compactID = 442 + ksfCMIndex compactID = 443 + kshIndex compactID = 444 + kshDEIndex compactID = 445 + kuIndex compactID = 446 + kwIndex compactID = 447 + kwGBIndex compactID = 448 + kyIndex compactID = 449 + kyKGIndex compactID = 450 + lagIndex compactID = 451 + lagTZIndex compactID = 452 + lbIndex compactID = 453 + lbLUIndex compactID = 454 + lgIndex compactID = 455 + lgUGIndex compactID = 456 + lktIndex compactID = 457 + lktUSIndex compactID = 458 + lnIndex compactID = 459 + lnAOIndex compactID = 460 + lnCDIndex compactID = 461 + lnCFIndex compactID = 462 + lnCGIndex compactID = 463 + loIndex compactID = 464 + loLAIndex compactID = 465 + lrcIndex compactID = 466 + lrcIQIndex compactID = 467 + lrcIRIndex compactID = 468 + ltIndex compactID = 469 + ltLTIndex compactID = 470 + luIndex compactID = 471 + luCDIndex compactID = 472 + luoIndex compactID = 473 + luoKEIndex compactID = 474 + luyIndex compactID = 475 + luyKEIndex compactID = 476 + lvIndex compactID = 477 + lvLVIndex compactID = 478 + masIndex compactID = 479 + masKEIndex compactID = 480 + masTZIndex compactID = 481 + merIndex compactID = 482 + merKEIndex compactID = 483 + mfeIndex compactID = 484 + mfeMUIndex compactID = 485 + mgIndex compactID = 486 + mgMGIndex compactID = 487 + mghIndex compactID = 488 + mghMZIndex compactID = 489 + mgoIndex compactID = 490 + mgoCMIndex compactID = 491 + mkIndex compactID = 492 + mkMKIndex compactID = 493 + mlIndex compactID = 494 + mlINIndex compactID = 495 + mnIndex compactID = 496 + mnMNIndex compactID = 497 + moIndex compactID = 498 + mrIndex compactID = 499 + mrINIndex compactID = 500 + msIndex compactID = 501 + msBNIndex compactID = 502 + msMYIndex compactID = 503 + msSGIndex compactID = 504 + mtIndex compactID = 505 + mtMTIndex compactID = 506 + muaIndex compactID = 507 + muaCMIndex compactID = 508 + myIndex compactID = 509 + myMMIndex compactID = 510 + mznIndex compactID = 511 + mznIRIndex compactID = 512 + nahIndex compactID = 513 + naqIndex compactID = 514 + naqNAIndex compactID = 515 + nbIndex compactID = 516 + nbNOIndex compactID = 517 + nbSJIndex compactID = 518 + ndIndex compactID = 519 + ndZWIndex compactID = 520 + ndsIndex compactID = 521 + ndsDEIndex compactID = 522 + ndsNLIndex compactID = 523 + neIndex compactID = 524 + neINIndex compactID = 525 + neNPIndex compactID = 526 + nlIndex compactID = 527 + nlAWIndex compactID = 528 + nlBEIndex compactID = 529 + nlBQIndex compactID = 530 + nlCWIndex compactID = 531 + nlNLIndex compactID = 532 + nlSRIndex compactID = 533 + nlSXIndex compactID = 534 + nmgIndex compactID = 535 + nmgCMIndex compactID = 536 + nnIndex compactID = 537 + nnNOIndex compactID = 538 + nnhIndex compactID = 539 + nnhCMIndex compactID = 540 + noIndex compactID = 541 + nqoIndex compactID = 542 + nrIndex compactID = 543 + nsoIndex compactID = 544 + nusIndex compactID = 545 + nusSSIndex compactID = 546 + nyIndex compactID = 547 + nynIndex compactID = 548 + nynUGIndex compactID = 549 + omIndex compactID = 550 + omETIndex compactID = 551 + omKEIndex compactID = 552 + orIndex compactID = 553 + orINIndex compactID = 554 + osIndex compactID = 555 + osGEIndex compactID = 556 + osRUIndex compactID = 557 + paIndex compactID = 558 + paArabIndex compactID = 559 + paArabPKIndex compactID = 560 + paGuruIndex compactID = 561 + paGuruINIndex compactID = 562 + papIndex compactID = 563 + plIndex compactID = 564 + plPLIndex compactID = 565 + prgIndex compactID = 566 + prg001Index compactID = 567 + psIndex compactID = 568 + psAFIndex compactID = 569 + ptIndex compactID = 570 + ptAOIndex compactID = 571 + ptBRIndex compactID = 572 + ptCHIndex compactID = 573 + ptCVIndex compactID = 574 + ptGQIndex compactID = 575 + ptGWIndex compactID = 576 + ptLUIndex compactID = 577 + ptMOIndex compactID = 578 + ptMZIndex compactID = 579 + ptPTIndex compactID = 580 + ptSTIndex compactID = 581 + ptTLIndex compactID = 582 + quIndex compactID = 583 + quBOIndex compactID = 584 + quECIndex compactID = 585 + quPEIndex compactID = 586 + rmIndex compactID = 587 + rmCHIndex compactID = 588 + rnIndex compactID = 589 + rnBIIndex compactID = 590 + roIndex compactID = 591 + roMDIndex compactID = 592 + roROIndex compactID = 593 + rofIndex compactID = 594 + rofTZIndex compactID = 595 + ruIndex compactID = 596 + ruBYIndex compactID = 597 + ruKGIndex compactID = 598 + ruKZIndex compactID = 599 + ruMDIndex compactID = 600 + ruRUIndex compactID = 601 + ruUAIndex compactID = 602 + rwIndex compactID = 603 + rwRWIndex compactID = 604 + rwkIndex compactID = 605 + rwkTZIndex compactID = 606 + sahIndex compactID = 607 + sahRUIndex compactID = 608 + saqIndex compactID = 609 + saqKEIndex compactID = 610 + sbpIndex compactID = 611 + sbpTZIndex compactID = 612 + sdIndex compactID = 613 + sdPKIndex compactID = 614 + sdhIndex compactID = 615 + seIndex compactID = 616 + seFIIndex compactID = 617 + seNOIndex compactID = 618 + seSEIndex compactID = 619 + sehIndex compactID = 620 + sehMZIndex compactID = 621 + sesIndex compactID = 622 + sesMLIndex compactID = 623 + sgIndex compactID = 624 + sgCFIndex compactID = 625 + shIndex compactID = 626 + shiIndex compactID = 627 + shiLatnIndex compactID = 628 + shiLatnMAIndex compactID = 629 + shiTfngIndex compactID = 630 + shiTfngMAIndex compactID = 631 + siIndex compactID = 632 + siLKIndex compactID = 633 + skIndex compactID = 634 + skSKIndex compactID = 635 + slIndex compactID = 636 + slSIIndex compactID = 637 + smaIndex compactID = 638 + smiIndex compactID = 639 + smjIndex compactID = 640 + smnIndex compactID = 641 + smnFIIndex compactID = 642 + smsIndex compactID = 643 + snIndex compactID = 644 + snZWIndex compactID = 645 + soIndex compactID = 646 + soDJIndex compactID = 647 + soETIndex compactID = 648 + soKEIndex compactID = 649 + soSOIndex compactID = 650 + sqIndex compactID = 651 + sqALIndex compactID = 652 + sqMKIndex compactID = 653 + sqXKIndex compactID = 654 + srIndex compactID = 655 + srCyrlIndex compactID = 656 + srCyrlBAIndex compactID = 657 + srCyrlMEIndex compactID = 658 + srCyrlRSIndex compactID = 659 + srCyrlXKIndex compactID = 660 + srLatnIndex compactID = 661 + srLatnBAIndex compactID = 662 + srLatnMEIndex compactID = 663 + srLatnRSIndex compactID = 664 + srLatnXKIndex compactID = 665 + ssIndex compactID = 666 + ssyIndex compactID = 667 + stIndex compactID = 668 + svIndex compactID = 669 + svAXIndex compactID = 670 + svFIIndex compactID = 671 + svSEIndex compactID = 672 + swIndex compactID = 673 + swCDIndex compactID = 674 + swKEIndex compactID = 675 + swTZIndex compactID = 676 + swUGIndex compactID = 677 + syrIndex compactID = 678 + taIndex compactID = 679 + taINIndex compactID = 680 + taLKIndex compactID = 681 + taMYIndex compactID = 682 + taSGIndex compactID = 683 + teIndex compactID = 684 + teINIndex compactID = 685 + teoIndex compactID = 686 + teoKEIndex compactID = 687 + teoUGIndex compactID = 688 + tgIndex compactID = 689 + tgTJIndex compactID = 690 + thIndex compactID = 691 + thTHIndex compactID = 692 + tiIndex compactID = 693 + tiERIndex compactID = 694 + tiETIndex compactID = 695 + tigIndex compactID = 696 + tkIndex compactID = 697 + tkTMIndex compactID = 698 + tlIndex compactID = 699 + tnIndex compactID = 700 + toIndex compactID = 701 + toTOIndex compactID = 702 + trIndex compactID = 703 + trCYIndex compactID = 704 + trTRIndex compactID = 705 + tsIndex compactID = 706 + ttIndex compactID = 707 + ttRUIndex compactID = 708 + twqIndex compactID = 709 + twqNEIndex compactID = 710 + tzmIndex compactID = 711 + tzmMAIndex compactID = 712 + ugIndex compactID = 713 + ugCNIndex compactID = 714 + ukIndex compactID = 715 + ukUAIndex compactID = 716 + urIndex compactID = 717 + urINIndex compactID = 718 + urPKIndex compactID = 719 + uzIndex compactID = 720 + uzArabIndex compactID = 721 + uzArabAFIndex compactID = 722 + uzCyrlIndex compactID = 723 + uzCyrlUZIndex compactID = 724 + uzLatnIndex compactID = 725 + uzLatnUZIndex compactID = 726 + vaiIndex compactID = 727 + vaiLatnIndex compactID = 728 + vaiLatnLRIndex compactID = 729 + vaiVaiiIndex compactID = 730 + vaiVaiiLRIndex compactID = 731 + veIndex compactID = 732 + viIndex compactID = 733 + viVNIndex compactID = 734 + voIndex compactID = 735 + vo001Index compactID = 736 + vunIndex compactID = 737 + vunTZIndex compactID = 738 + waIndex compactID = 739 + waeIndex compactID = 740 + waeCHIndex compactID = 741 + woIndex compactID = 742 + woSNIndex compactID = 743 + xhIndex compactID = 744 + xogIndex compactID = 745 + xogUGIndex compactID = 746 + yavIndex compactID = 747 + yavCMIndex compactID = 748 + yiIndex compactID = 749 + yi001Index compactID = 750 + yoIndex compactID = 751 + yoBJIndex compactID = 752 + yoNGIndex compactID = 753 + yueIndex compactID = 754 + yueHansIndex compactID = 755 + yueHansCNIndex compactID = 756 + yueHantIndex compactID = 757 + yueHantHKIndex compactID = 758 + zghIndex compactID = 759 + zghMAIndex compactID = 760 + zhIndex compactID = 761 + zhHansIndex compactID = 762 + zhHansCNIndex compactID = 763 + zhHansHKIndex compactID = 764 + zhHansMOIndex compactID = 765 + zhHansSGIndex compactID = 766 + zhHantIndex compactID = 767 + zhHantHKIndex compactID = 768 + zhHantMOIndex compactID = 769 + zhHantTWIndex compactID = 770 + zuIndex compactID = 771 + zuZAIndex compactID = 772 + caESvalenciaIndex compactID = 773 + enUSuvaposixIndex compactID = 774 ) var coreTags = []language.CompactCoreInfo{ // 773 elements
diff --git a/language/tags.go b/language/tags.go index 1d1b7f8..acc482a 100644 --- a/language/tags.go +++ b/language/tags.go
@@ -61,85 +61,83 @@ Und Tag = Tag{} - // TODO: use compact tags once the transition is completed. - - Afrikaans Tag = Raw.MustParse("af") // Tag{lang: _af} // af - Amharic Tag = Raw.MustParse("am") // Tag{lang: _am} // am - Arabic Tag = Raw.MustParse("ar") // Tag{lang: _ar} // ar - ModernStandardArabic Tag = Raw.MustParse("ar-001") // Tag{lang: _ar, region: _001} // ar-001 - Azerbaijani Tag = Raw.MustParse("az") // Tag{lang: _az} // az - Bulgarian Tag = Raw.MustParse("bg") // Tag{lang: _bg} // bg - Bengali Tag = Raw.MustParse("bn") // Tag{lang: _bn} // bn - Catalan Tag = Raw.MustParse("ca") // Tag{lang: _ca} // ca - Czech Tag = Raw.MustParse("cs") // Tag{lang: _cs} // cs - Danish Tag = Raw.MustParse("da") // Tag{lang: _da} // da - German Tag = Raw.MustParse("de") // Tag{lang: _de} // de - Greek Tag = Raw.MustParse("el") // Tag{lang: _el} // el - English Tag = Raw.MustParse("en") // Tag{lang: _en} // en - AmericanEnglish Tag = Raw.MustParse("en-US") // Tag{lang: _en, region: _US} // en-US - BritishEnglish Tag = Raw.MustParse("en-GB") // Tag{lang: _en, region: _GB} // en-GB - Spanish Tag = Raw.MustParse("es") // Tag{lang: _es} // es - EuropeanSpanish Tag = Raw.MustParse("es-ES") // Tag{lang: _es, region: _ES} // es-ES - LatinAmericanSpanish Tag = Raw.MustParse("es-419") // Tag{lang: _es, region: _419} // es-419 - Estonian Tag = Raw.MustParse("et") // Tag{lang: _et} // et - Persian Tag = Raw.MustParse("fa") // Tag{lang: _fa} // fa - Finnish Tag = Raw.MustParse("fi") // Tag{lang: _fi} // fi - Filipino Tag = Raw.MustParse("fil") // Tag{lang: _fil} // fil - French Tag = Raw.MustParse("fr") // Tag{lang: _fr} // fr - CanadianFrench Tag = Raw.MustParse("fr-CA") // Tag{lang: _fr, region: _CA} // fr-CA - Gujarati Tag = Raw.MustParse("gu") // Tag{lang: _gu} // gu - Hebrew Tag = Raw.MustParse("he") // Tag{lang: _he} // he - Hindi Tag = Raw.MustParse("hi") // Tag{lang: _hi} // hi - Croatian Tag = Raw.MustParse("hr") // Tag{lang: _hr} // hr - Hungarian Tag = Raw.MustParse("hu") // Tag{lang: _hu} // hu - Armenian Tag = Raw.MustParse("hy") // Tag{lang: _hy} // hy - Indonesian Tag = Raw.MustParse("id") // Tag{lang: _id} // id - Icelandic Tag = Raw.MustParse("is") // Tag{lang: _is} // is - Italian Tag = Raw.MustParse("it") // Tag{lang: _it} // it - Japanese Tag = Raw.MustParse("ja") // Tag{lang: _ja} // ja - Georgian Tag = Raw.MustParse("ka") // Tag{lang: _ka} // ka - Kazakh Tag = Raw.MustParse("kk") // Tag{lang: _kk} // kk - Khmer Tag = Raw.MustParse("km") // Tag{lang: _km} // km - Kannada Tag = Raw.MustParse("kn") // Tag{lang: _kn} // kn - Korean Tag = Raw.MustParse("ko") // Tag{lang: _ko} // ko - Kirghiz Tag = Raw.MustParse("ky") // Tag{lang: _ky} // ky - Lao Tag = Raw.MustParse("lo") // Tag{lang: _lo} // lo - Lithuanian Tag = Raw.MustParse("lt") // Tag{lang: _lt} // lt - Latvian Tag = Raw.MustParse("lv") // Tag{lang: _lv} // lv - Macedonian Tag = Raw.MustParse("mk") // Tag{lang: _mk} // mk - Malayalam Tag = Raw.MustParse("ml") // Tag{lang: _ml} // ml - Mongolian Tag = Raw.MustParse("mn") // Tag{lang: _mn} // mn - Marathi Tag = Raw.MustParse("mr") // Tag{lang: _mr} // mr - Malay Tag = Raw.MustParse("ms") // Tag{lang: _ms} // ms - Burmese Tag = Raw.MustParse("my") // Tag{lang: _my} // my - Nepali Tag = Raw.MustParse("ne") // Tag{lang: _ne} // ne - Dutch Tag = Raw.MustParse("nl") // Tag{lang: _nl} // nl - Norwegian Tag = Raw.MustParse("no") // Tag{lang: _no} // no - Punjabi Tag = Raw.MustParse("pa") // Tag{lang: _pa} // pa - Polish Tag = Raw.MustParse("pl") // Tag{lang: _pl} // pl - Portuguese Tag = Raw.MustParse("pt") // Tag{lang: _pt} // pt - BrazilianPortuguese Tag = Raw.MustParse("pt-BR") // Tag{lang: _pt, region: _BR} // pt-BR - EuropeanPortuguese Tag = Raw.MustParse("pt-PT") // Tag{lang: _pt, region: _PT} // pt-PT - Romanian Tag = Raw.MustParse("ro") // Tag{lang: _ro} // ro - Russian Tag = Raw.MustParse("ru") // Tag{lang: _ru} // ru - Sinhala Tag = Raw.MustParse("si") // Tag{lang: _si} // si - Slovak Tag = Raw.MustParse("sk") // Tag{lang: _sk} // sk - Slovenian Tag = Raw.MustParse("sl") // Tag{lang: _sl} // sl - Albanian Tag = Raw.MustParse("sq") // Tag{lang: _sq} // sq - Serbian Tag = Raw.MustParse("sr") // Tag{lang: _sr} // sr - SerbianLatin Tag = Raw.MustParse("sr-Latn") // Tag{lang: _sr, script: _Latn} // sr-Latn - Swedish Tag = Raw.MustParse("sv") // Tag{lang: _sv} // sv - Swahili Tag = Raw.MustParse("sw") // Tag{lang: _sw} // sw - Tamil Tag = Raw.MustParse("ta") // Tag{lang: _ta} // ta - Telugu Tag = Raw.MustParse("te") // Tag{lang: _te} // te - Thai Tag = Raw.MustParse("th") // Tag{lang: _th} // th - Turkish Tag = Raw.MustParse("tr") // Tag{lang: _tr} // tr - Ukrainian Tag = Raw.MustParse("uk") // Tag{lang: _uk} // uk - Urdu Tag = Raw.MustParse("ur") // Tag{lang: _ur} // ur - Uzbek Tag = Raw.MustParse("uz") // Tag{lang: _uz} // uz - Vietnamese Tag = Raw.MustParse("vi") // Tag{lang: _vi} // vi - Chinese Tag = Raw.MustParse("zh") // Tag{lang: _zh} // zh - SimplifiedChinese Tag = Raw.MustParse("zh-Hans") // Tag{lang: _zh, script: _Hans} // zh-Hans - TraditionalChinese Tag = Raw.MustParse("zh-Hant") // Tag{lang: _zh, script: _Hant} // zh-Hant - Zulu Tag = Raw.MustParse("zu") // Tag{lang: _zu} // zu + Afrikaans Tag = Tag{language: afIndex, locale: afIndex} + Amharic Tag = Tag{language: amIndex, locale: amIndex} + Arabic Tag = Tag{language: arIndex, locale: arIndex} + ModernStandardArabic Tag = Tag{language: ar001Index, locale: ar001Index} + Azerbaijani Tag = Tag{language: azIndex, locale: azIndex} + Bulgarian Tag = Tag{language: bgIndex, locale: bgIndex} + Bengali Tag = Tag{language: bnIndex, locale: bnIndex} + Catalan Tag = Tag{language: caIndex, locale: caIndex} + Czech Tag = Tag{language: csIndex, locale: csIndex} + Danish Tag = Tag{language: daIndex, locale: daIndex} + German Tag = Tag{language: deIndex, locale: deIndex} + Greek Tag = Tag{language: elIndex, locale: elIndex} + English Tag = Tag{language: enIndex, locale: enIndex} + AmericanEnglish Tag = Tag{language: enUSIndex, locale: enUSIndex} + BritishEnglish Tag = Tag{language: enGBIndex, locale: enGBIndex} + Spanish Tag = Tag{language: esIndex, locale: esIndex} + EuropeanSpanish Tag = Tag{language: esESIndex, locale: esESIndex} + LatinAmericanSpanish Tag = Tag{language: es419Index, locale: es419Index} + Estonian Tag = Tag{language: etIndex, locale: etIndex} + Persian Tag = Tag{language: faIndex, locale: faIndex} + Finnish Tag = Tag{language: fiIndex, locale: fiIndex} + Filipino Tag = Tag{language: filIndex, locale: filIndex} + French Tag = Tag{language: frIndex, locale: frIndex} + CanadianFrench Tag = Tag{language: frCAIndex, locale: frCAIndex} + Gujarati Tag = Tag{language: guIndex, locale: guIndex} + Hebrew Tag = Tag{language: heIndex, locale: heIndex} + Hindi Tag = Tag{language: hiIndex, locale: hiIndex} + Croatian Tag = Tag{language: hrIndex, locale: hrIndex} + Hungarian Tag = Tag{language: huIndex, locale: huIndex} + Armenian Tag = Tag{language: hyIndex, locale: hyIndex} + Indonesian Tag = Tag{language: idIndex, locale: idIndex} + Icelandic Tag = Tag{language: isIndex, locale: isIndex} + Italian Tag = Tag{language: itIndex, locale: itIndex} + Japanese Tag = Tag{language: jaIndex, locale: jaIndex} + Georgian Tag = Tag{language: kaIndex, locale: kaIndex} + Kazakh Tag = Tag{language: kkIndex, locale: kkIndex} + Khmer Tag = Tag{language: kmIndex, locale: kmIndex} + Kannada Tag = Tag{language: knIndex, locale: knIndex} + Korean Tag = Tag{language: koIndex, locale: koIndex} + Kirghiz Tag = Tag{language: kyIndex, locale: kyIndex} + Lao Tag = Tag{language: loIndex, locale: loIndex} + Lithuanian Tag = Tag{language: ltIndex, locale: ltIndex} + Latvian Tag = Tag{language: lvIndex, locale: lvIndex} + Macedonian Tag = Tag{language: mkIndex, locale: mkIndex} + Malayalam Tag = Tag{language: mlIndex, locale: mlIndex} + Mongolian Tag = Tag{language: mnIndex, locale: mnIndex} + Marathi Tag = Tag{language: mrIndex, locale: mrIndex} + Malay Tag = Tag{language: msIndex, locale: msIndex} + Burmese Tag = Tag{language: myIndex, locale: myIndex} + Nepali Tag = Tag{language: neIndex, locale: neIndex} + Dutch Tag = Tag{language: nlIndex, locale: nlIndex} + Norwegian Tag = Tag{language: noIndex, locale: noIndex} + Punjabi Tag = Tag{language: paIndex, locale: paIndex} + Polish Tag = Tag{language: plIndex, locale: plIndex} + Portuguese Tag = Tag{language: ptIndex, locale: ptIndex} + BrazilianPortuguese Tag = Tag{language: ptBRIndex, locale: ptBRIndex} + EuropeanPortuguese Tag = Tag{language: ptPTIndex, locale: ptPTIndex} + Romanian Tag = Tag{language: roIndex, locale: roIndex} + Russian Tag = Tag{language: ruIndex, locale: ruIndex} + Sinhala Tag = Tag{language: siIndex, locale: siIndex} + Slovak Tag = Tag{language: skIndex, locale: skIndex} + Slovenian Tag = Tag{language: slIndex, locale: slIndex} + Albanian Tag = Tag{language: sqIndex, locale: sqIndex} + Serbian Tag = Tag{language: srIndex, locale: srIndex} + SerbianLatin Tag = Tag{language: srLatnIndex, locale: srLatnIndex} + Swedish Tag = Tag{language: svIndex, locale: svIndex} + Swahili Tag = Tag{language: swIndex, locale: swIndex} + Tamil Tag = Tag{language: taIndex, locale: taIndex} + Telugu Tag = Tag{language: teIndex, locale: teIndex} + Thai Tag = Tag{language: thIndex, locale: thIndex} + Turkish Tag = Tag{language: trIndex, locale: trIndex} + Ukrainian Tag = Tag{language: ukIndex, locale: ukIndex} + Urdu Tag = Tag{language: urIndex, locale: urIndex} + Uzbek Tag = Tag{language: uzIndex, locale: uzIndex} + Vietnamese Tag = Tag{language: viIndex, locale: viIndex} + Chinese Tag = Tag{language: zhIndex, locale: zhIndex} + SimplifiedChinese Tag = Tag{language: zhHansIndex, locale: zhHansIndex} + TraditionalChinese Tag = Tag{language: zhHantIndex, locale: zhHantIndex} + Zulu Tag = Tag{language: zuIndex, locale: zuIndex} )