diff options
| author | Mitja Felicijan <mitja.felicijan@gmail.com> | 2026-02-05 00:37:32 +0100 |
|---|---|---|
| committer | Mitja Felicijan <mitja.felicijan@gmail.com> | 2026-02-05 00:37:32 +0100 |
| commit | 6960aecc25400320adee1b8802a86839326e15b6 (patch) | |
| tree | 334f7ca9491080a5e6f9a9747da77281c4958ba2 /vendor/golang.org/x/text/internal | |
| download | hepi-6960aecc25400320adee1b8802a86839326e15b6.tar.gz | |
Engage!
Diffstat (limited to 'vendor/golang.org/x/text/internal')
18 files changed, 7418 insertions, 0 deletions
diff --git a/vendor/golang.org/x/text/internal/internal.go b/vendor/golang.org/x/text/internal/internal.go new file mode 100644 index 0000000..3cddbbd --- /dev/null +++ b/vendor/golang.org/x/text/internal/internal.go | |||
| @@ -0,0 +1,49 @@ | |||
| 1 | // Copyright 2015 The Go Authors. All rights reserved. | ||
| 2 | // Use of this source code is governed by a BSD-style | ||
| 3 | // license that can be found in the LICENSE file. | ||
| 4 | |||
| 5 | // Package internal contains non-exported functionality that are used by | ||
| 6 | // packages in the text repository. | ||
| 7 | package internal // import "golang.org/x/text/internal" | ||
| 8 | |||
| 9 | import ( | ||
| 10 | "sort" | ||
| 11 | |||
| 12 | "golang.org/x/text/language" | ||
| 13 | ) | ||
| 14 | |||
| 15 | // SortTags sorts tags in place. | ||
| 16 | func SortTags(tags []language.Tag) { | ||
| 17 | sort.Sort(sorter(tags)) | ||
| 18 | } | ||
| 19 | |||
| 20 | type sorter []language.Tag | ||
| 21 | |||
| 22 | func (s sorter) Len() int { | ||
| 23 | return len(s) | ||
| 24 | } | ||
| 25 | |||
| 26 | func (s sorter) Swap(i, j int) { | ||
| 27 | s[i], s[j] = s[j], s[i] | ||
| 28 | } | ||
| 29 | |||
| 30 | func (s sorter) Less(i, j int) bool { | ||
| 31 | return s[i].String() < s[j].String() | ||
| 32 | } | ||
| 33 | |||
| 34 | // UniqueTags sorts and filters duplicate tags in place and returns a slice with | ||
| 35 | // only unique tags. | ||
| 36 | func UniqueTags(tags []language.Tag) []language.Tag { | ||
| 37 | if len(tags) <= 1 { | ||
| 38 | return tags | ||
| 39 | } | ||
| 40 | SortTags(tags) | ||
| 41 | k := 0 | ||
| 42 | for i := 1; i < len(tags); i++ { | ||
| 43 | if tags[k].String() < tags[i].String() { | ||
| 44 | k++ | ||
| 45 | tags[k] = tags[i] | ||
| 46 | } | ||
| 47 | } | ||
| 48 | return tags[:k+1] | ||
| 49 | } | ||
diff --git a/vendor/golang.org/x/text/internal/language/common.go b/vendor/golang.org/x/text/internal/language/common.go new file mode 100644 index 0000000..cdfdb74 --- /dev/null +++ b/vendor/golang.org/x/text/internal/language/common.go | |||
| @@ -0,0 +1,16 @@ | |||
| 1 | // Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. | ||
| 2 | |||
| 3 | package language | ||
| 4 | |||
| 5 | // This file contains code common to the maketables.go and the package code. | ||
| 6 | |||
| 7 | // AliasType is the type of an alias in AliasMap. | ||
| 8 | type AliasType int8 | ||
| 9 | |||
| 10 | const ( | ||
| 11 | Deprecated AliasType = iota | ||
| 12 | Macro | ||
| 13 | Legacy | ||
| 14 | |||
| 15 | AliasTypeUnknown AliasType = -1 | ||
| 16 | ) | ||
diff --git a/vendor/golang.org/x/text/internal/language/compact.go b/vendor/golang.org/x/text/internal/language/compact.go new file mode 100644 index 0000000..46a0015 --- /dev/null +++ b/vendor/golang.org/x/text/internal/language/compact.go | |||
| @@ -0,0 +1,29 @@ | |||
| 1 | // Copyright 2018 The Go Authors. All rights reserved. | ||
| 2 | // Use of this source code is governed by a BSD-style | ||
| 3 | // license that can be found in the LICENSE file. | ||
| 4 | |||
| 5 | package language | ||
| 6 | |||
| 7 | // CompactCoreInfo is a compact integer with the three core tags encoded. | ||
| 8 | type CompactCoreInfo uint32 | ||
| 9 | |||
| 10 | // GetCompactCore generates a uint32 value that is guaranteed to be unique for | ||
| 11 | // different language, region, and script values. | ||
| 12 | func GetCompactCore(t Tag) (cci CompactCoreInfo, ok bool) { | ||
| 13 | if t.LangID > langNoIndexOffset { | ||
| 14 | return 0, false | ||
| 15 | } | ||
| 16 | cci |= CompactCoreInfo(t.LangID) << (8 + 12) | ||
| 17 | cci |= CompactCoreInfo(t.ScriptID) << 12 | ||
| 18 | cci |= CompactCoreInfo(t.RegionID) | ||
| 19 | return cci, true | ||
| 20 | } | ||
| 21 | |||
| 22 | // Tag generates a tag from c. | ||
| 23 | func (c CompactCoreInfo) Tag() Tag { | ||
| 24 | return Tag{ | ||
| 25 | LangID: Language(c >> 20), | ||
| 26 | RegionID: Region(c & 0x3ff), | ||
| 27 | ScriptID: Script(c>>12) & 0xff, | ||
| 28 | } | ||
| 29 | } | ||
diff --git a/vendor/golang.org/x/text/internal/language/compact/compact.go b/vendor/golang.org/x/text/internal/language/compact/compact.go new file mode 100644 index 0000000..1b36935 --- /dev/null +++ b/vendor/golang.org/x/text/internal/language/compact/compact.go | |||
| @@ -0,0 +1,61 @@ | |||
| 1 | // Copyright 2018 The Go Authors. All rights reserved. | ||
| 2 | // Use of this source code is governed by a BSD-style | ||
| 3 | // license that can be found in the LICENSE file. | ||
| 4 | |||
| 5 | // Package compact defines a compact representation of language tags. | ||
| 6 | // | ||
| 7 | // Common language tags (at least all for which locale information is defined | ||
| 8 | // in CLDR) are assigned a unique index. Each Tag is associated with such an | ||
| 9 | // ID for selecting language-related resources (such as translations) as well | ||
| 10 | // as one for selecting regional defaults (currency, number formatting, etc.) | ||
| 11 | // | ||
| 12 | // It may want to export this functionality at some point, but at this point | ||
| 13 | // this is only available for use within x/text. | ||
| 14 | package compact // import "golang.org/x/text/internal/language/compact" | ||
| 15 | |||
| 16 | import ( | ||
| 17 | "sort" | ||
| 18 | "strings" | ||
| 19 | |||
| 20 | "golang.org/x/text/internal/language" | ||
| 21 | ) | ||
| 22 | |||
| 23 | // ID is an integer identifying a single tag. | ||
| 24 | type ID uint16 | ||
| 25 | |||
| 26 | func getCoreIndex(t language.Tag) (id ID, ok bool) { | ||
| 27 | cci, ok := language.GetCompactCore(t) | ||
| 28 | if !ok { | ||
| 29 | return 0, false | ||
| 30 | } | ||
| 31 | i := sort.Search(len(coreTags), func(i int) bool { | ||
| 32 | return cci <= coreTags[i] | ||
| 33 | }) | ||
| 34 | if i == len(coreTags) || coreTags[i] != cci { | ||
| 35 | return 0, false | ||
| 36 | } | ||
| 37 | return ID(i), true | ||
| 38 | } | ||
| 39 | |||
| 40 | // Parent returns the ID of the parent or the root ID if id is already the root. | ||
| 41 | func (id ID) Parent() ID { | ||
| 42 | return parents[id] | ||
| 43 | } | ||
| 44 | |||
| 45 | // Tag converts id to an internal language Tag. | ||
| 46 | func (id ID) Tag() language.Tag { | ||
| 47 | if int(id) >= len(coreTags) { | ||
| 48 | return specialTags[int(id)-len(coreTags)] | ||
| 49 | } | ||
| 50 | return coreTags[id].Tag() | ||
| 51 | } | ||
| 52 | |||
| 53 | var specialTags []language.Tag | ||
| 54 | |||
| 55 | func init() { | ||
| 56 | tags := strings.Split(specialTagsStr, " ") | ||
| 57 | specialTags = make([]language.Tag, len(tags)) | ||
| 58 | for i, t := range tags { | ||
| 59 | specialTags[i] = language.MustParse(t) | ||
| 60 | } | ||
| 61 | } | ||
diff --git a/vendor/golang.org/x/text/internal/language/compact/language.go b/vendor/golang.org/x/text/internal/language/compact/language.go new file mode 100644 index 0000000..8c1b666 --- /dev/null +++ b/vendor/golang.org/x/text/internal/language/compact/language.go | |||
| @@ -0,0 +1,260 @@ | |||
| 1 | // Copyright 2013 The Go Authors. All rights reserved. | ||
| 2 | // Use of this source code is governed by a BSD-style | ||
| 3 | // license that can be found in the LICENSE file. | ||
| 4 | |||
| 5 | //go:generate go run gen.go gen_index.go -output tables.go | ||
| 6 | //go:generate go run gen_parents.go | ||
| 7 | |||
| 8 | package compact | ||
| 9 | |||
| 10 | // TODO: Remove above NOTE after: | ||
| 11 | // - verifying that tables are dropped correctly (most notably matcher tables). | ||
| 12 | |||
| 13 | import ( | ||
| 14 | "strings" | ||
| 15 | |||
| 16 | "golang.org/x/text/internal/language" | ||
| 17 | ) | ||
| 18 | |||
| 19 | // Tag represents a BCP 47 language tag. It is used to specify an instance of a | ||
| 20 | // specific language or locale. All language tag values are guaranteed to be | ||
| 21 | // well-formed. | ||
| 22 | type Tag struct { | ||
| 23 | // NOTE: exported tags will become part of the public API. | ||
| 24 | language ID | ||
| 25 | locale ID | ||
| 26 | full fullTag // always a language.Tag for now. | ||
| 27 | } | ||
| 28 | |||
| 29 | const _und = 0 | ||
| 30 | |||
| 31 | type fullTag interface { | ||
| 32 | IsRoot() bool | ||
| 33 | Parent() language.Tag | ||
| 34 | } | ||
| 35 | |||
| 36 | // Make a compact Tag from a fully specified internal language Tag. | ||
| 37 | func Make(t language.Tag) (tag Tag) { | ||
| 38 | if region := t.TypeForKey("rg"); len(region) == 6 && region[2:] == "zzzz" { | ||
| 39 | if r, err := language.ParseRegion(region[:2]); err == nil { | ||
| 40 | tFull := t | ||
| 41 | t, _ = t.SetTypeForKey("rg", "") | ||
| 42 | // TODO: should we not consider "va" for the language tag? | ||
| 43 | var exact1, exact2 bool | ||
| 44 | tag.language, exact1 = FromTag(t) | ||
| 45 | t.RegionID = r | ||
| 46 | tag.locale, exact2 = FromTag(t) | ||
| 47 | if !exact1 || !exact2 { | ||
| 48 | tag.full = tFull | ||
| 49 | } | ||
| 50 | return tag | ||
| 51 | } | ||
| 52 | } | ||
| 53 | lang, ok := FromTag(t) | ||
| 54 | tag.language = lang | ||
| 55 | tag.locale = lang | ||
| 56 | if !ok { | ||
| 57 | tag.full = t | ||
| 58 | } | ||
| 59 | return tag | ||
| 60 | } | ||
| 61 | |||
| 62 | // Tag returns an internal language Tag version of this tag. | ||
| 63 | func (t Tag) Tag() language.Tag { | ||
| 64 | if t.full != nil { | ||
| 65 | return t.full.(language.Tag) | ||
| 66 | } | ||
| 67 | tag := t.language.Tag() | ||
| 68 | if t.language != t.locale { | ||
| 69 | loc := t.locale.Tag() | ||
| 70 | tag, _ = tag.SetTypeForKey("rg", strings.ToLower(loc.RegionID.String())+"zzzz") | ||
| 71 | } | ||
| 72 | return tag | ||
| 73 | } | ||
| 74 | |||
| 75 | // IsCompact reports whether this tag is fully defined in terms of ID. | ||
| 76 | func (t *Tag) IsCompact() bool { | ||
| 77 | return t.full == nil | ||
| 78 | } | ||
| 79 | |||
| 80 | // MayHaveVariants reports whether a tag may have variants. If it returns false | ||
| 81 | // it is guaranteed the tag does not have variants. | ||
| 82 | func (t Tag) MayHaveVariants() bool { | ||
| 83 | return t.full != nil || int(t.language) >= len(coreTags) | ||
| 84 | } | ||
| 85 | |||
| 86 | // MayHaveExtensions reports whether a tag may have extensions. If it returns | ||
| 87 | // false it is guaranteed the tag does not have them. | ||
| 88 | func (t Tag) MayHaveExtensions() bool { | ||
| 89 | return t.full != nil || | ||
| 90 | int(t.language) >= len(coreTags) || | ||
| 91 | t.language != t.locale | ||
| 92 | } | ||
| 93 | |||
| 94 | // IsRoot returns true if t is equal to language "und". | ||
| 95 | func (t Tag) IsRoot() bool { | ||
| 96 | if t.full != nil { | ||
| 97 | return t.full.IsRoot() | ||
| 98 | } | ||
| 99 | return t.language == _und | ||
| 100 | } | ||
| 101 | |||
| 102 | // Parent returns the CLDR parent of t. In CLDR, missing fields in data for a | ||
| 103 | // specific language are substituted with fields from the parent language. | ||
| 104 | // The parent for a language may change for newer versions of CLDR. | ||
| 105 | func (t Tag) Parent() Tag { | ||
| 106 | if t.full != nil { | ||
| 107 | return Make(t.full.Parent()) | ||
| 108 | } | ||
| 109 | if t.language != t.locale { | ||
| 110 | // Simulate stripping -u-rg-xxxxxx | ||
| 111 | return Tag{language: t.language, locale: t.language} | ||
| 112 | } | ||
| 113 | // TODO: use parent lookup table once cycle from internal package is | ||
| 114 | // removed. Probably by internalizing the table and declaring this fast | ||
| 115 | // enough. | ||
| 116 | // lang := compactID(internal.Parent(uint16(t.language))) | ||
| 117 | lang, _ := FromTag(t.language.Tag().Parent()) | ||
| 118 | return Tag{language: lang, locale: lang} | ||
| 119 | } | ||
| 120 | |||
| 121 | // nextToken returns token t and the rest of the string. | ||
| 122 | func nextToken(s string) (t, tail string) { | ||
| 123 | p := strings.Index(s[1:], "-") | ||
| 124 | if p == -1 { | ||
| 125 | return s[1:], "" | ||
| 126 | } | ||
| 127 | p++ | ||
| 128 | return s[1:p], s[p:] | ||
| 129 | } | ||
| 130 | |||
| 131 | // LanguageID returns an index, where 0 <= index < NumCompactTags, for tags | ||
| 132 | // for which data exists in the text repository.The index will change over time | ||
| 133 | // and should not be stored in persistent storage. If t does not match a compact | ||
| 134 | // index, exact will be false and the compact index will be returned for the | ||
| 135 | // first match after repeatedly taking the Parent of t. | ||
| 136 | func LanguageID(t Tag) (id ID, exact bool) { | ||
| 137 | return t.language, t.full == nil | ||
| 138 | } | ||
| 139 | |||
| 140 | // RegionalID returns the ID for the regional variant of this tag. This index is | ||
| 141 | // used to indicate region-specific overrides, such as default currency, default | ||
| 142 | // calendar and week data, default time cycle, and default measurement system | ||
| 143 | // and unit preferences. | ||
| 144 | // | ||
| 145 | // For instance, the tag en-GB-u-rg-uszzzz specifies British English with US | ||
| 146 | // settings for currency, number formatting, etc. The CompactIndex for this tag | ||
| 147 | // will be that for en-GB, while the RegionalID will be the one corresponding to | ||
| 148 | // en-US. | ||
| 149 | func RegionalID(t Tag) (id ID, exact bool) { | ||
| 150 | return t.locale, t.full == nil | ||
| 151 | } | ||
| 152 | |||
| 153 | // LanguageTag returns t stripped of regional variant indicators. | ||
| 154 | // | ||
| 155 | // At the moment this means it is stripped of a regional and variant subtag "rg" | ||
| 156 | // and "va" in the "u" extension. | ||
| 157 | func (t Tag) LanguageTag() Tag { | ||
| 158 | if t.full == nil { | ||
| 159 | return Tag{language: t.language, locale: t.language} | ||
| 160 | } | ||
| 161 | tt := t.Tag() | ||
| 162 | tt.SetTypeForKey("rg", "") | ||
| 163 | tt.SetTypeForKey("va", "") | ||
| 164 | return Make(tt) | ||
| 165 | } | ||
| 166 | |||
| 167 | // RegionalTag returns the regional variant of the tag. | ||
| 168 | // | ||
| 169 | // At the moment this means that the region is set from the regional subtag | ||
| 170 | // "rg" in the "u" extension. | ||
| 171 | func (t Tag) RegionalTag() Tag { | ||
| 172 | rt := Tag{language: t.locale, locale: t.locale} | ||
| 173 | if t.full == nil { | ||
| 174 | return rt | ||
| 175 | } | ||
| 176 | b := language.Builder{} | ||
| 177 | tag := t.Tag() | ||
| 178 | // tag, _ = tag.SetTypeForKey("rg", "") | ||
| 179 | b.SetTag(t.locale.Tag()) | ||
| 180 | if v := tag.Variants(); v != "" { | ||
| 181 | for _, v := range strings.Split(v, "-") { | ||
| 182 | b.AddVariant(v) | ||
| 183 | } | ||
| 184 | } | ||
| 185 | for _, e := range tag.Extensions() { | ||
| 186 | b.AddExt(e) | ||
| 187 | } | ||
| 188 | return t | ||
| 189 | } | ||
| 190 | |||
| 191 | // FromTag reports closest matching ID for an internal language Tag. | ||
| 192 | func FromTag(t language.Tag) (id ID, exact bool) { | ||
| 193 | // TODO: perhaps give more frequent tags a lower index. | ||
| 194 | // TODO: we could make the indexes stable. This will excluded some | ||
| 195 | // possibilities for optimization, so don't do this quite yet. | ||
| 196 | exact = true | ||
| 197 | |||
| 198 | b, s, r := t.Raw() | ||
| 199 | if t.HasString() { | ||
| 200 | if t.IsPrivateUse() { | ||
| 201 | // We have no entries for user-defined tags. | ||
| 202 | return 0, false | ||
| 203 | } | ||
| 204 | hasExtra := false | ||
| 205 | if t.HasVariants() { | ||
| 206 | if t.HasExtensions() { | ||
| 207 | build := language.Builder{} | ||
| 208 | build.SetTag(language.Tag{LangID: b, ScriptID: s, RegionID: r}) | ||
| 209 | build.AddVariant(t.Variants()) | ||
| 210 | exact = false | ||
| 211 | t = build.Make() | ||
| 212 | } | ||
| 213 | hasExtra = true | ||
| 214 | } else if _, ok := t.Extension('u'); ok { | ||
| 215 | // TODO: va may mean something else. Consider not considering it. | ||
| 216 | // Strip all but the 'va' entry. | ||
| 217 | old := t | ||
| 218 | variant := t.TypeForKey("va") | ||
| 219 | t = language.Tag{LangID: b, ScriptID: s, RegionID: r} | ||
| 220 | if variant != "" { | ||
| 221 | t, _ = t.SetTypeForKey("va", variant) | ||
| 222 | hasExtra = true | ||
| 223 | } | ||
| 224 | exact = old == t | ||
| 225 | } else { | ||
| 226 | exact = false | ||
| 227 | } | ||
| 228 | if hasExtra { | ||
| 229 | // We have some variants. | ||
| 230 | for i, s := range specialTags { | ||
| 231 | if s == t { | ||
| 232 | return ID(i + len(coreTags)), exact | ||
| 233 | } | ||
| 234 | } | ||
| 235 | exact = false | ||
| 236 | } | ||
| 237 | } | ||
| 238 | if x, ok := getCoreIndex(t); ok { | ||
| 239 | return x, exact | ||
| 240 | } | ||
| 241 | exact = false | ||
| 242 | if r != 0 && s == 0 { | ||
| 243 | // Deal with cases where an extra script is inserted for the region. | ||
| 244 | t, _ := t.Maximize() | ||
| 245 | if x, ok := getCoreIndex(t); ok { | ||
| 246 | return x, exact | ||
| 247 | } | ||
| 248 | } | ||
| 249 | for t = t.Parent(); t != root; t = t.Parent() { | ||
| 250 | // No variants specified: just compare core components. | ||
| 251 | // The key has the form lllssrrr, where l, s, and r are nibbles for | ||
| 252 | // respectively the langID, scriptID, and regionID. | ||
| 253 | if x, ok := getCoreIndex(t); ok { | ||
| 254 | return x, exact | ||
| 255 | } | ||
| 256 | } | ||
| 257 | return 0, exact | ||
| 258 | } | ||
| 259 | |||
| 260 | var root = language.Tag{} | ||
diff --git a/vendor/golang.org/x/text/internal/language/compact/parents.go b/vendor/golang.org/x/text/internal/language/compact/parents.go new file mode 100644 index 0000000..8d81072 --- /dev/null +++ b/vendor/golang.org/x/text/internal/language/compact/parents.go | |||
| @@ -0,0 +1,120 @@ | |||
| 1 | // Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. | ||
| 2 | |||
| 3 | package compact | ||
| 4 | |||
| 5 | // parents maps a compact index of a tag to the compact index of the parent of | ||
| 6 | // this tag. | ||
| 7 | var parents = []ID{ // 775 elements | ||
| 8 | // Entry 0 - 3F | ||
| 9 | 0x0000, 0x0000, 0x0001, 0x0001, 0x0000, 0x0004, 0x0000, 0x0006, | ||
| 10 | 0x0000, 0x0008, 0x0000, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, | ||
| 11 | 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, | ||
| 12 | 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, | ||
| 13 | 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x0000, | ||
| 14 | 0x0000, 0x0028, 0x0000, 0x002a, 0x0000, 0x002c, 0x0000, 0x0000, | ||
| 15 | 0x002f, 0x002e, 0x002e, 0x0000, 0x0033, 0x0000, 0x0035, 0x0000, | ||
| 16 | 0x0037, 0x0000, 0x0039, 0x0000, 0x003b, 0x0000, 0x0000, 0x003e, | ||
| 17 | // Entry 40 - 7F | ||
| 18 | 0x0000, 0x0040, 0x0040, 0x0000, 0x0043, 0x0043, 0x0000, 0x0046, | ||
| 19 | 0x0000, 0x0048, 0x0000, 0x0000, 0x004b, 0x004a, 0x004a, 0x0000, | ||
| 20 | 0x004f, 0x004f, 0x004f, 0x004f, 0x0000, 0x0054, 0x0054, 0x0000, | ||
| 21 | 0x0057, 0x0000, 0x0059, 0x0000, 0x005b, 0x0000, 0x005d, 0x005d, | ||
| 22 | 0x0000, 0x0060, 0x0000, 0x0062, 0x0000, 0x0064, 0x0000, 0x0066, | ||
| 23 | 0x0066, 0x0000, 0x0069, 0x0000, 0x006b, 0x006b, 0x006b, 0x006b, | ||
| 24 | 0x006b, 0x006b, 0x006b, 0x0000, 0x0073, 0x0000, 0x0075, 0x0000, | ||
| 25 | 0x0077, 0x0000, 0x0000, 0x007a, 0x0000, 0x007c, 0x0000, 0x007e, | ||
| 26 | // Entry 80 - BF | ||
| 27 | 0x0000, 0x0080, 0x0080, 0x0000, 0x0083, 0x0083, 0x0000, 0x0086, | ||
| 28 | 0x0087, 0x0087, 0x0087, 0x0086, 0x0088, 0x0087, 0x0087, 0x0087, | ||
| 29 | 0x0086, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0088, | ||
| 30 | 0x0087, 0x0087, 0x0087, 0x0087, 0x0088, 0x0087, 0x0088, 0x0087, | ||
| 31 | 0x0087, 0x0088, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, | ||
| 32 | 0x0087, 0x0087, 0x0087, 0x0086, 0x0087, 0x0087, 0x0087, 0x0087, | ||
| 33 | 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, | ||
| 34 | 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0086, 0x0087, 0x0086, | ||
| 35 | // Entry C0 - FF | ||
| 36 | 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, | ||
| 37 | 0x0088, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, | ||
| 38 | 0x0086, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0088, 0x0087, | ||
| 39 | 0x0087, 0x0088, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, | ||
| 40 | 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0086, 0x0086, 0x0087, | ||
| 41 | 0x0087, 0x0086, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0000, | ||
| 42 | 0x00ef, 0x0000, 0x00f1, 0x00f2, 0x00f2, 0x00f2, 0x00f2, 0x00f2, | ||
| 43 | 0x00f2, 0x00f2, 0x00f2, 0x00f2, 0x00f1, 0x00f2, 0x00f1, 0x00f1, | ||
| 44 | // Entry 100 - 13F | ||
| 45 | 0x00f2, 0x00f2, 0x00f1, 0x00f2, 0x00f2, 0x00f2, 0x00f2, 0x00f1, | ||
| 46 | 0x00f2, 0x00f2, 0x00f2, 0x00f2, 0x00f2, 0x00f2, 0x0000, 0x010e, | ||
| 47 | 0x0000, 0x0110, 0x0000, 0x0112, 0x0000, 0x0114, 0x0114, 0x0000, | ||
| 48 | 0x0117, 0x0117, 0x0117, 0x0117, 0x0000, 0x011c, 0x0000, 0x011e, | ||
| 49 | 0x0000, 0x0120, 0x0120, 0x0000, 0x0123, 0x0123, 0x0123, 0x0123, | ||
| 50 | 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, | ||
| 51 | 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, | ||
| 52 | 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, | ||
| 53 | // Entry 140 - 17F | ||
| 54 | 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, | ||
| 55 | 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, | ||
| 56 | 0x0123, 0x0123, 0x0000, 0x0152, 0x0000, 0x0154, 0x0000, 0x0156, | ||
| 57 | 0x0000, 0x0158, 0x0000, 0x015a, 0x0000, 0x015c, 0x015c, 0x015c, | ||
| 58 | 0x0000, 0x0160, 0x0000, 0x0000, 0x0163, 0x0000, 0x0165, 0x0000, | ||
| 59 | 0x0167, 0x0167, 0x0167, 0x0000, 0x016b, 0x0000, 0x016d, 0x0000, | ||
| 60 | 0x016f, 0x0000, 0x0171, 0x0171, 0x0000, 0x0174, 0x0000, 0x0176, | ||
| 61 | 0x0000, 0x0178, 0x0000, 0x017a, 0x0000, 0x017c, 0x0000, 0x017e, | ||
| 62 | // Entry 180 - 1BF | ||
| 63 | 0x0000, 0x0000, 0x0000, 0x0182, 0x0000, 0x0184, 0x0184, 0x0184, | ||
| 64 | 0x0184, 0x0000, 0x0000, 0x0000, 0x018b, 0x0000, 0x0000, 0x018e, | ||
| 65 | 0x0000, 0x0000, 0x0191, 0x0000, 0x0000, 0x0000, 0x0195, 0x0000, | ||
| 66 | 0x0197, 0x0000, 0x0000, 0x019a, 0x0000, 0x0000, 0x019d, 0x0000, | ||
| 67 | 0x019f, 0x0000, 0x01a1, 0x0000, 0x01a3, 0x0000, 0x01a5, 0x0000, | ||
| 68 | 0x01a7, 0x0000, 0x01a9, 0x0000, 0x01ab, 0x0000, 0x01ad, 0x0000, | ||
| 69 | 0x01af, 0x0000, 0x01b1, 0x01b1, 0x0000, 0x01b4, 0x0000, 0x01b6, | ||
| 70 | 0x0000, 0x01b8, 0x0000, 0x01ba, 0x0000, 0x01bc, 0x0000, 0x0000, | ||
| 71 | // Entry 1C0 - 1FF | ||
| 72 | 0x01bf, 0x0000, 0x01c1, 0x0000, 0x01c3, 0x0000, 0x01c5, 0x0000, | ||
| 73 | 0x01c7, 0x0000, 0x01c9, 0x0000, 0x01cb, 0x01cb, 0x01cb, 0x01cb, | ||
| 74 | 0x0000, 0x01d0, 0x0000, 0x01d2, 0x01d2, 0x0000, 0x01d5, 0x0000, | ||
| 75 | 0x01d7, 0x0000, 0x01d9, 0x0000, 0x01db, 0x0000, 0x01dd, 0x0000, | ||
| 76 | 0x01df, 0x01df, 0x0000, 0x01e2, 0x0000, 0x01e4, 0x0000, 0x01e6, | ||
| 77 | 0x0000, 0x01e8, 0x0000, 0x01ea, 0x0000, 0x01ec, 0x0000, 0x01ee, | ||
| 78 | 0x0000, 0x01f0, 0x0000, 0x0000, 0x01f3, 0x0000, 0x01f5, 0x01f5, | ||
| 79 | 0x01f5, 0x0000, 0x01f9, 0x0000, 0x01fb, 0x0000, 0x01fd, 0x0000, | ||
| 80 | // Entry 200 - 23F | ||
| 81 | 0x01ff, 0x0000, 0x0000, 0x0202, 0x0000, 0x0204, 0x0204, 0x0000, | ||
| 82 | 0x0207, 0x0000, 0x0209, 0x0209, 0x0000, 0x020c, 0x020c, 0x0000, | ||
| 83 | 0x020f, 0x020f, 0x020f, 0x020f, 0x020f, 0x020f, 0x020f, 0x0000, | ||
| 84 | 0x0217, 0x0000, 0x0219, 0x0000, 0x021b, 0x0000, 0x0000, 0x0000, | ||
| 85 | 0x0000, 0x0000, 0x0221, 0x0000, 0x0000, 0x0224, 0x0000, 0x0226, | ||
| 86 | 0x0226, 0x0000, 0x0229, 0x0000, 0x022b, 0x022b, 0x0000, 0x0000, | ||
| 87 | 0x022f, 0x022e, 0x022e, 0x0000, 0x0000, 0x0234, 0x0000, 0x0236, | ||
| 88 | 0x0000, 0x0238, 0x0000, 0x0244, 0x023a, 0x0244, 0x0244, 0x0244, | ||
| 89 | // Entry 240 - 27F | ||
| 90 | 0x0244, 0x0244, 0x0244, 0x0244, 0x023a, 0x0244, 0x0244, 0x0000, | ||
| 91 | 0x0247, 0x0247, 0x0247, 0x0000, 0x024b, 0x0000, 0x024d, 0x0000, | ||
| 92 | 0x024f, 0x024f, 0x0000, 0x0252, 0x0000, 0x0254, 0x0254, 0x0254, | ||
| 93 | 0x0254, 0x0254, 0x0254, 0x0000, 0x025b, 0x0000, 0x025d, 0x0000, | ||
| 94 | 0x025f, 0x0000, 0x0261, 0x0000, 0x0263, 0x0000, 0x0265, 0x0000, | ||
| 95 | 0x0000, 0x0268, 0x0268, 0x0268, 0x0000, 0x026c, 0x0000, 0x026e, | ||
| 96 | 0x0000, 0x0270, 0x0000, 0x0000, 0x0000, 0x0274, 0x0273, 0x0273, | ||
| 97 | 0x0000, 0x0278, 0x0000, 0x027a, 0x0000, 0x027c, 0x0000, 0x0000, | ||
| 98 | // Entry 280 - 2BF | ||
| 99 | 0x0000, 0x0000, 0x0281, 0x0000, 0x0000, 0x0284, 0x0000, 0x0286, | ||
| 100 | 0x0286, 0x0286, 0x0286, 0x0000, 0x028b, 0x028b, 0x028b, 0x0000, | ||
| 101 | 0x028f, 0x028f, 0x028f, 0x028f, 0x028f, 0x0000, 0x0295, 0x0295, | ||
| 102 | 0x0295, 0x0295, 0x0000, 0x0000, 0x0000, 0x0000, 0x029d, 0x029d, | ||
| 103 | 0x029d, 0x0000, 0x02a1, 0x02a1, 0x02a1, 0x02a1, 0x0000, 0x0000, | ||
| 104 | 0x02a7, 0x02a7, 0x02a7, 0x02a7, 0x0000, 0x02ac, 0x0000, 0x02ae, | ||
| 105 | 0x02ae, 0x0000, 0x02b1, 0x0000, 0x02b3, 0x0000, 0x02b5, 0x02b5, | ||
| 106 | 0x0000, 0x0000, 0x02b9, 0x0000, 0x0000, 0x0000, 0x02bd, 0x0000, | ||
| 107 | // Entry 2C0 - 2FF | ||
| 108 | 0x02bf, 0x02bf, 0x0000, 0x0000, 0x02c3, 0x0000, 0x02c5, 0x0000, | ||
| 109 | 0x02c7, 0x0000, 0x02c9, 0x0000, 0x02cb, 0x0000, 0x02cd, 0x02cd, | ||
| 110 | 0x0000, 0x0000, 0x02d1, 0x0000, 0x02d3, 0x02d0, 0x02d0, 0x0000, | ||
| 111 | 0x0000, 0x02d8, 0x02d7, 0x02d7, 0x0000, 0x0000, 0x02dd, 0x0000, | ||
| 112 | 0x02df, 0x0000, 0x02e1, 0x0000, 0x0000, 0x02e4, 0x0000, 0x02e6, | ||
| 113 | 0x0000, 0x0000, 0x02e9, 0x0000, 0x02eb, 0x0000, 0x02ed, 0x0000, | ||
| 114 | 0x02ef, 0x02ef, 0x0000, 0x0000, 0x02f3, 0x02f2, 0x02f2, 0x0000, | ||
| 115 | 0x02f7, 0x0000, 0x02f9, 0x02f9, 0x02f9, 0x02f9, 0x02f9, 0x0000, | ||
| 116 | // Entry 300 - 33F | ||
| 117 | 0x02ff, 0x0300, 0x02ff, 0x0000, 0x0303, 0x0051, 0x00e6, | ||
| 118 | } // Size: 1574 bytes | ||
| 119 | |||
| 120 | // Total table size 1574 bytes (1KiB); checksum: 895AAF0B | ||
diff --git a/vendor/golang.org/x/text/internal/language/compact/tables.go b/vendor/golang.org/x/text/internal/language/compact/tables.go new file mode 100644 index 0000000..a09ed19 --- /dev/null +++ b/vendor/golang.org/x/text/internal/language/compact/tables.go | |||
| @@ -0,0 +1,1015 @@ | |||
| 1 | // Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. | ||
| 2 | |||
| 3 | package compact | ||
| 4 | |||
| 5 | import "golang.org/x/text/internal/language" | ||
| 6 | |||
| 7 | // CLDRVersion is the CLDR version from which the tables in this package are derived. | ||
| 8 | const CLDRVersion = "32" | ||
| 9 | |||
| 10 | // NumCompactTags is the number of common tags. The maximum tag is | ||
| 11 | // NumCompactTags-1. | ||
| 12 | const NumCompactTags = 775 | ||
| 13 | const ( | ||
| 14 | undIndex ID = 0 | ||
| 15 | afIndex ID = 1 | ||
| 16 | afNAIndex ID = 2 | ||
| 17 | afZAIndex ID = 3 | ||
| 18 | agqIndex ID = 4 | ||
| 19 | agqCMIndex ID = 5 | ||
| 20 | akIndex ID = 6 | ||
| 21 | akGHIndex ID = 7 | ||
| 22 | amIndex ID = 8 | ||
| 23 | amETIndex ID = 9 | ||
| 24 | arIndex ID = 10 | ||
| 25 | ar001Index ID = 11 | ||
| 26 | arAEIndex ID = 12 | ||
| 27 | arBHIndex ID = 13 | ||
| 28 | arDJIndex ID = 14 | ||
| 29 | arDZIndex ID = 15 | ||
| 30 | arEGIndex ID = 16 | ||
| 31 | arEHIndex ID = 17 | ||
| 32 | arERIndex ID = 18 | ||
| 33 | arILIndex ID = 19 | ||
| 34 | arIQIndex ID = 20 | ||
| 35 | arJOIndex ID = 21 | ||
| 36 | arKMIndex ID = 22 | ||
| 37 | arKWIndex ID = 23 | ||
| 38 | arLBIndex ID = 24 | ||
| 39 | arLYIndex ID = 25 | ||
| 40 | arMAIndex ID = 26 | ||
| 41 | arMRIndex ID = 27 | ||
| 42 | arOMIndex ID = 28 | ||
| 43 | arPSIndex ID = 29 | ||
| 44 | arQAIndex ID = 30 | ||
| 45 | arSAIndex ID = 31 | ||
| 46 | arSDIndex ID = 32 | ||
| 47 | arSOIndex ID = 33 | ||
| 48 | arSSIndex ID = 34 | ||
| 49 | arSYIndex ID = 35 | ||
| 50 | arTDIndex ID = 36 | ||
| 51 | arTNIndex ID = 37 | ||
| 52 | arYEIndex ID = 38 | ||
| 53 | arsIndex ID = 39 | ||
| 54 | asIndex ID = 40 | ||
| 55 | asINIndex ID = 41 | ||
| 56 | asaIndex ID = 42 | ||
| 57 | asaTZIndex ID = 43 | ||
| 58 | astIndex ID = 44 | ||
| 59 | astESIndex ID = 45 | ||
| 60 | azIndex ID = 46 | ||
| 61 | azCyrlIndex ID = 47 | ||
| 62 | azCyrlAZIndex ID = 48 | ||
| 63 | azLatnIndex ID = 49 | ||
| 64 | azLatnAZIndex ID = 50 | ||
| 65 | basIndex ID = 51 | ||
| 66 | basCMIndex ID = 52 | ||
| 67 | beIndex ID = 53 | ||
| 68 | beBYIndex ID = 54 | ||
| 69 | bemIndex ID = 55 | ||
| 70 | bemZMIndex ID = 56 | ||
| 71 | bezIndex ID = 57 | ||
| 72 | bezTZIndex ID = 58 | ||
| 73 | bgIndex ID = 59 | ||
| 74 | bgBGIndex ID = 60 | ||
| 75 | bhIndex ID = 61 | ||
| 76 | bmIndex ID = 62 | ||
| 77 | bmMLIndex ID = 63 | ||
| 78 | bnIndex ID = 64 | ||
| 79 | bnBDIndex ID = 65 | ||
| 80 | bnINIndex ID = 66 | ||
| 81 | boIndex ID = 67 | ||
| 82 | boCNIndex ID = 68 | ||
| 83 | boINIndex ID = 69 | ||
| 84 | brIndex ID = 70 | ||
| 85 | brFRIndex ID = 71 | ||
| 86 | brxIndex ID = 72 | ||
| 87 | brxINIndex ID = 73 | ||
| 88 | bsIndex ID = 74 | ||
| 89 | bsCyrlIndex ID = 75 | ||
| 90 | bsCyrlBAIndex ID = 76 | ||
| 91 | bsLatnIndex ID = 77 | ||
| 92 | bsLatnBAIndex ID = 78 | ||
| 93 | caIndex ID = 79 | ||
| 94 | caADIndex ID = 80 | ||
| 95 | caESIndex ID = 81 | ||
| 96 | caFRIndex ID = 82 | ||
| 97 | caITIndex ID = 83 | ||
| 98 | ccpIndex ID = 84 | ||
| 99 | ccpBDIndex ID = 85 | ||
| 100 | ccpINIndex ID = 86 | ||
| 101 | ceIndex ID = 87 | ||
| 102 | ceRUIndex ID = 88 | ||
| 103 | cggIndex ID = 89 | ||
| 104 | cggUGIndex ID = 90 | ||
| 105 | chrIndex ID = 91 | ||
| 106 | chrUSIndex ID = 92 | ||
| 107 | ckbIndex ID = 93 | ||
| 108 | ckbIQIndex ID = 94 | ||
| 109 | ckbIRIndex ID = 95 | ||
| 110 | csIndex ID = 96 | ||
| 111 | csCZIndex ID = 97 | ||
| 112 | cuIndex ID = 98 | ||
| 113 | cuRUIndex ID = 99 | ||
| 114 | cyIndex ID = 100 | ||
| 115 | cyGBIndex ID = 101 | ||
| 116 | daIndex ID = 102 | ||
| 117 | daDKIndex ID = 103 | ||
| 118 | daGLIndex ID = 104 | ||
| 119 | davIndex ID = 105 | ||
| 120 | davKEIndex ID = 106 | ||
| 121 | deIndex ID = 107 | ||
| 122 | deATIndex ID = 108 | ||
| 123 | deBEIndex ID = 109 | ||
| 124 | deCHIndex ID = 110 | ||
| 125 | deDEIndex ID = 111 | ||
| 126 | deITIndex ID = 112 | ||
| 127 | deLIIndex ID = 113 | ||
| 128 | deLUIndex ID = 114 | ||
| 129 | djeIndex ID = 115 | ||
| 130 | djeNEIndex ID = 116 | ||
| 131 | dsbIndex ID = 117 | ||
| 132 | dsbDEIndex ID = 118 | ||
| 133 | duaIndex ID = 119 | ||
| 134 | duaCMIndex ID = 120 | ||
| 135 | dvIndex ID = 121 | ||
| 136 | dyoIndex ID = 122 | ||
| 137 | dyoSNIndex ID = 123 | ||
| 138 | dzIndex ID = 124 | ||
| 139 | dzBTIndex ID = 125 | ||
| 140 | ebuIndex ID = 126 | ||
| 141 | ebuKEIndex ID = 127 | ||
| 142 | eeIndex ID = 128 | ||
| 143 | eeGHIndex ID = 129 | ||
| 144 | eeTGIndex ID = 130 | ||
| 145 | elIndex ID = 131 | ||
| 146 | elCYIndex ID = 132 | ||
| 147 | elGRIndex ID = 133 | ||
| 148 | enIndex ID = 134 | ||
| 149 | en001Index ID = 135 | ||
| 150 | en150Index ID = 136 | ||
| 151 | enAGIndex ID = 137 | ||
| 152 | enAIIndex ID = 138 | ||
| 153 | enASIndex ID = 139 | ||
| 154 | enATIndex ID = 140 | ||
| 155 | enAUIndex ID = 141 | ||
| 156 | enBBIndex ID = 142 | ||
| 157 | enBEIndex ID = 143 | ||
| 158 | enBIIndex ID = 144 | ||
| 159 | enBMIndex ID = 145 | ||
| 160 | enBSIndex ID = 146 | ||
| 161 | enBWIndex ID = 147 | ||
| 162 | enBZIndex ID = 148 | ||
| 163 | enCAIndex ID = 149 | ||
| 164 | enCCIndex ID = 150 | ||
| 165 | enCHIndex ID = 151 | ||
| 166 | enCKIndex ID = 152 | ||
| 167 | enCMIndex ID = 153 | ||
| 168 | enCXIndex ID = 154 | ||
| 169 | enCYIndex ID = 155 | ||
| 170 | enDEIndex ID = 156 | ||
| 171 | enDGIndex ID = 157 | ||
| 172 | enDKIndex ID = 158 | ||
| 173 | enDMIndex ID = 159 | ||
| 174 | enERIndex ID = 160 | ||
| 175 | enFIIndex ID = 161 | ||
| 176 | enFJIndex ID = 162 | ||
| 177 | enFKIndex ID = 163 | ||
| 178 | enFMIndex ID = 164 | ||
| 179 | enGBIndex ID = 165 | ||
| 180 | enGDIndex ID = 166 | ||
| 181 | enGGIndex ID = 167 | ||
| 182 | enGHIndex ID = 168 | ||
| 183 | enGIIndex ID = 169 | ||
| 184 | enGMIndex ID = 170 | ||
| 185 | enGUIndex ID = 171 | ||
| 186 | enGYIndex ID = 172 | ||
| 187 | enHKIndex ID = 173 | ||
| 188 | enIEIndex ID = 174 | ||
| 189 | enILIndex ID = 175 | ||
| 190 | enIMIndex ID = 176 | ||
| 191 | enINIndex ID = 177 | ||
| 192 | enIOIndex ID = 178 | ||
| 193 | enJEIndex ID = 179 | ||
| 194 | enJMIndex ID = 180 | ||
| 195 | enKEIndex ID = 181 | ||
| 196 | enKIIndex ID = 182 | ||
| 197 | enKNIndex ID = 183 | ||
| 198 | enKYIndex ID = 184 | ||
| 199 | enLCIndex ID = 185 | ||
| 200 | enLRIndex ID = 186 | ||
| 201 | enLSIndex ID = 187 | ||
| 202 | enMGIndex ID = 188 | ||
| 203 | enMHIndex ID = 189 | ||
| 204 | enMOIndex ID = 190 | ||
| 205 | enMPIndex ID = 191 | ||
| 206 | enMSIndex ID = 192 | ||
| 207 | enMTIndex ID = 193 | ||
| 208 | enMUIndex ID = 194 | ||
| 209 | enMWIndex ID = 195 | ||
| 210 | enMYIndex ID = 196 | ||
| 211 | enNAIndex ID = 197 | ||
| 212 | enNFIndex ID = 198 | ||
| 213 | enNGIndex ID = 199 | ||
| 214 | enNLIndex ID = 200 | ||
| 215 | enNRIndex ID = 201 | ||
| 216 | enNUIndex ID = 202 | ||
| 217 | enNZIndex ID = 203 | ||
| 218 | enPGIndex ID = 204 | ||
| 219 | enPHIndex ID = 205 | ||
| 220 | enPKIndex ID = 206 | ||
| 221 | enPNIndex ID = 207 | ||
| 222 | enPRIndex ID = 208 | ||
| 223 | enPWIndex ID = 209 | ||
| 224 | enRWIndex ID = 210 | ||
| 225 | enSBIndex ID = 211 | ||
| 226 | enSCIndex ID = 212 | ||
| 227 | enSDIndex ID = 213 | ||
| 228 | enSEIndex ID = 214 | ||
| 229 | enSGIndex ID = 215 | ||
| 230 | enSHIndex ID = 216 | ||
| 231 | enSIIndex ID = 217 | ||
| 232 | enSLIndex ID = 218 | ||
| 233 | enSSIndex ID = 219 | ||
| 234 | enSXIndex ID = 220 | ||
| 235 | enSZIndex ID = 221 | ||
| 236 | enTCIndex ID = 222 | ||
| 237 | enTKIndex ID = 223 | ||
| 238 | enTOIndex ID = 224 | ||
| 239 | enTTIndex ID = 225 | ||
| 240 | enTVIndex ID = 226 | ||
| 241 | enTZIndex ID = 227 | ||
| 242 | enUGIndex ID = 228 | ||
| 243 | enUMIndex ID = 229 | ||
| 244 | enUSIndex ID = 230 | ||
| 245 | enVCIndex ID = 231 | ||
| 246 | enVGIndex ID = 232 | ||
| 247 | enVIIndex ID = 233 | ||
| 248 | enVUIndex ID = 234 | ||
| 249 | enWSIndex ID = 235 | ||
| 250 | enZAIndex ID = 236 | ||
| 251 | enZMIndex ID = 237 | ||
| 252 | enZWIndex ID = 238 | ||
| 253 | eoIndex ID = 239 | ||
| 254 | eo001Index ID = 240 | ||
| 255 | esIndex ID = 241 | ||
| 256 | es419Index ID = 242 | ||
| 257 | esARIndex ID = 243 | ||
| 258 | esBOIndex ID = 244 | ||
| 259 | esBRIndex ID = 245 | ||
| 260 | esBZIndex ID = 246 | ||
| 261 | esCLIndex ID = 247 | ||
| 262 | esCOIndex ID = 248 | ||
| 263 | esCRIndex ID = 249 | ||
| 264 | esCUIndex ID = 250 | ||
| 265 | esDOIndex ID = 251 | ||
| 266 | esEAIndex ID = 252 | ||
| 267 | esECIndex ID = 253 | ||
| 268 | esESIndex ID = 254 | ||
| 269 | esGQIndex ID = 255 | ||
| 270 | esGTIndex ID = 256 | ||
| 271 | esHNIndex ID = 257 | ||
| 272 | esICIndex ID = 258 | ||
| 273 | esMXIndex ID = 259 | ||
| 274 | esNIIndex ID = 260 | ||
| 275 | esPAIndex ID = 261 | ||
| 276 | esPEIndex ID = 262 | ||
| 277 | esPHIndex ID = 263 | ||
| 278 | esPRIndex ID = 264 | ||
| 279 | esPYIndex ID = 265 | ||
| 280 | esSVIndex ID = 266 | ||
| 281 | esUSIndex ID = 267 | ||
| 282 | esUYIndex ID = 268 | ||
| 283 | esVEIndex ID = 269 | ||
| 284 | etIndex ID = 270 | ||
| 285 | etEEIndex ID = 271 | ||
| 286 | euIndex ID = 272 | ||
| 287 | euESIndex ID = 273 | ||
| 288 | ewoIndex ID = 274 | ||
| 289 | ewoCMIndex ID = 275 | ||
| 290 | faIndex ID = 276 | ||
| 291 | faAFIndex ID = 277 | ||
| 292 | faIRIndex ID = 278 | ||
| 293 | ffIndex ID = 279 | ||
| 294 | ffCMIndex ID = 280 | ||
| 295 | ffGNIndex ID = 281 | ||
| 296 | ffMRIndex ID = 282 | ||
| 297 | ffSNIndex ID = 283 | ||
| 298 | fiIndex ID = 284 | ||
| 299 | fiFIIndex ID = 285 | ||
| 300 | filIndex ID = 286 | ||
| 301 | filPHIndex ID = 287 | ||
| 302 | foIndex ID = 288 | ||
| 303 | foDKIndex ID = 289 | ||
| 304 | foFOIndex ID = 290 | ||
| 305 | frIndex ID = 291 | ||
| 306 | frBEIndex ID = 292 | ||
| 307 | frBFIndex ID = 293 | ||
| 308 | frBIIndex ID = 294 | ||
| 309 | frBJIndex ID = 295 | ||
| 310 | frBLIndex ID = 296 | ||
| 311 | frCAIndex ID = 297 | ||
| 312 | frCDIndex ID = 298 | ||
| 313 | frCFIndex ID = 299 | ||
| 314 | frCGIndex ID = 300 | ||
| 315 | frCHIndex ID = 301 | ||
| 316 | frCIIndex ID = 302 | ||
| 317 | frCMIndex ID = 303 | ||
| 318 | frDJIndex ID = 304 | ||
| 319 | frDZIndex ID = 305 | ||
| 320 | frFRIndex ID = 306 | ||
| 321 | frGAIndex ID = 307 | ||
| 322 | frGFIndex ID = 308 | ||
| 323 | frGNIndex ID = 309 | ||
| 324 | frGPIndex ID = 310 | ||
| 325 | frGQIndex ID = 311 | ||
| 326 | frHTIndex ID = 312 | ||
| 327 | frKMIndex ID = 313 | ||
| 328 | frLUIndex ID = 314 | ||
| 329 | frMAIndex ID = 315 | ||
| 330 | frMCIndex ID = 316 | ||
| 331 | frMFIndex ID = 317 | ||
| 332 | frMGIndex ID = 318 | ||
| 333 | frMLIndex ID = 319 | ||
| 334 | frMQIndex ID = 320 | ||
| 335 | frMRIndex ID = 321 | ||
| 336 | frMUIndex ID = 322 | ||
| 337 | frNCIndex ID = 323 | ||
| 338 | frNEIndex ID = 324 | ||
| 339 | frPFIndex ID = 325 | ||
| 340 | frPMIndex ID = 326 | ||
| 341 | frREIndex ID = 327 | ||
| 342 | frRWIndex ID = 328 | ||
| 343 | frSCIndex ID = 329 | ||
| 344 | frSNIndex ID = 330 | ||
| 345 | frSYIndex ID = 331 | ||
| 346 | frTDIndex ID = 332 | ||
| 347 | frTGIndex ID = 333 | ||
| 348 | frTNIndex ID = 334 | ||
| 349 | frVUIndex ID = 335 | ||
| 350 | frWFIndex ID = 336 | ||
| 351 | frYTIndex ID = 337 | ||
| 352 | furIndex ID = 338 | ||
| 353 | furITIndex ID = 339 | ||
| 354 | fyIndex ID = 340 | ||
| 355 | fyNLIndex ID = 341 | ||
| 356 | gaIndex ID = 342 | ||
| 357 | gaIEIndex ID = 343 | ||
| 358 | gdIndex ID = 344 | ||
| 359 | gdGBIndex ID = 345 | ||
| 360 | glIndex ID = 346 | ||
| 361 | glESIndex ID = 347 | ||
| 362 | gswIndex ID = 348 | ||
| 363 | gswCHIndex ID = 349 | ||
| 364 | gswFRIndex ID = 350 | ||
| 365 | gswLIIndex ID = 351 | ||
| 366 | guIndex ID = 352 | ||
| 367 | guINIndex ID = 353 | ||
| 368 | guwIndex ID = 354 | ||
| 369 | guzIndex ID = 355 | ||
| 370 | guzKEIndex ID = 356 | ||
| 371 | gvIndex ID = 357 | ||
| 372 | gvIMIndex ID = 358 | ||
| 373 | haIndex ID = 359 | ||
| 374 | haGHIndex ID = 360 | ||
| 375 | haNEIndex ID = 361 | ||
| 376 | haNGIndex ID = 362 | ||
| 377 | hawIndex ID = 363 | ||
| 378 | hawUSIndex ID = 364 | ||
| 379 | heIndex ID = 365 | ||
| 380 | heILIndex ID = 366 | ||
| 381 | hiIndex ID = 367 | ||
| 382 | hiINIndex ID = 368 | ||
| 383 | hrIndex ID = 369 | ||
| 384 | hrBAIndex ID = 370 | ||
| 385 | hrHRIndex ID = 371 | ||
| 386 | hsbIndex ID = 372 | ||
| 387 | hsbDEIndex ID = 373 | ||
| 388 | huIndex ID = 374 | ||
| 389 | huHUIndex ID = 375 | ||
| 390 | hyIndex ID = 376 | ||
| 391 | hyAMIndex ID = 377 | ||
| 392 | idIndex ID = 378 | ||
| 393 | idIDIndex ID = 379 | ||
| 394 | igIndex ID = 380 | ||
| 395 | igNGIndex ID = 381 | ||
| 396 | iiIndex ID = 382 | ||
| 397 | iiCNIndex ID = 383 | ||
| 398 | inIndex ID = 384 | ||
| 399 | ioIndex ID = 385 | ||
| 400 | isIndex ID = 386 | ||
| 401 | isISIndex ID = 387 | ||
| 402 | itIndex ID = 388 | ||
| 403 | itCHIndex ID = 389 | ||
| 404 | itITIndex ID = 390 | ||
| 405 | itSMIndex ID = 391 | ||
| 406 | itVAIndex ID = 392 | ||
| 407 | iuIndex ID = 393 | ||
| 408 | iwIndex ID = 394 | ||
| 409 | jaIndex ID = 395 | ||
| 410 | jaJPIndex ID = 396 | ||
| 411 | jboIndex ID = 397 | ||
| 412 | jgoIndex ID = 398 | ||
| 413 | jgoCMIndex ID = 399 | ||
| 414 | jiIndex ID = 400 | ||
| 415 | jmcIndex ID = 401 | ||
| 416 | jmcTZIndex ID = 402 | ||
| 417 | jvIndex ID = 403 | ||
| 418 | jwIndex ID = 404 | ||
| 419 | kaIndex ID = 405 | ||
| 420 | kaGEIndex ID = 406 | ||
| 421 | kabIndex ID = 407 | ||
| 422 | kabDZIndex ID = 408 | ||
| 423 | kajIndex ID = 409 | ||
| 424 | kamIndex ID = 410 | ||
| 425 | kamKEIndex ID = 411 | ||
| 426 | kcgIndex ID = 412 | ||
| 427 | kdeIndex ID = 413 | ||
| 428 | kdeTZIndex ID = 414 | ||
| 429 | keaIndex ID = 415 | ||
| 430 | keaCVIndex ID = 416 | ||
| 431 | khqIndex ID = 417 | ||
| 432 | khqMLIndex ID = 418 | ||
| 433 | kiIndex ID = 419 | ||
| 434 | kiKEIndex ID = 420 | ||
| 435 | kkIndex ID = 421 | ||
| 436 | kkKZIndex ID = 422 | ||
| 437 | kkjIndex ID = 423 | ||
| 438 | kkjCMIndex ID = 424 | ||
| 439 | klIndex ID = 425 | ||
| 440 | klGLIndex ID = 426 | ||
| 441 | klnIndex ID = 427 | ||
| 442 | klnKEIndex ID = 428 | ||
| 443 | kmIndex ID = 429 | ||
| 444 | kmKHIndex ID = 430 | ||
| 445 | knIndex ID = 431 | ||
| 446 | knINIndex ID = 432 | ||
| 447 | koIndex ID = 433 | ||
| 448 | koKPIndex ID = 434 | ||
| 449 | koKRIndex ID = 435 | ||
| 450 | kokIndex ID = 436 | ||
| 451 | kokINIndex ID = 437 | ||
| 452 | ksIndex ID = 438 | ||
| 453 | ksINIndex ID = 439 | ||
| 454 | ksbIndex ID = 440 | ||
| 455 | ksbTZIndex ID = 441 | ||
| 456 | ksfIndex ID = 442 | ||
| 457 | ksfCMIndex ID = 443 | ||
| 458 | kshIndex ID = 444 | ||
| 459 | kshDEIndex ID = 445 | ||
| 460 | kuIndex ID = 446 | ||
| 461 | kwIndex ID = 447 | ||
| 462 | kwGBIndex ID = 448 | ||
| 463 | kyIndex ID = 449 | ||
| 464 | kyKGIndex ID = 450 | ||
| 465 | lagIndex ID = 451 | ||
| 466 | lagTZIndex ID = 452 | ||
| 467 | lbIndex ID = 453 | ||
| 468 | lbLUIndex ID = 454 | ||
| 469 | lgIndex ID = 455 | ||
| 470 | lgUGIndex ID = 456 | ||
| 471 | lktIndex ID = 457 | ||
| 472 | lktUSIndex ID = 458 | ||
| 473 | lnIndex ID = 459 | ||
| 474 | lnAOIndex ID = 460 | ||
| 475 | lnCDIndex ID = 461 | ||
| 476 | lnCFIndex ID = 462 | ||
| 477 | lnCGIndex ID = 463 | ||
| 478 | loIndex ID = 464 | ||
| 479 | loLAIndex ID = 465 | ||
| 480 | lrcIndex ID = 466 | ||
| 481 | lrcIQIndex ID = 467 | ||
| 482 | lrcIRIndex ID = 468 | ||
| 483 | ltIndex ID = 469 | ||
| 484 | ltLTIndex ID = 470 | ||
| 485 | luIndex ID = 471 | ||
| 486 | luCDIndex ID = 472 | ||
| 487 | luoIndex ID = 473 | ||
| 488 | luoKEIndex ID = 474 | ||
| 489 | luyIndex ID = 475 | ||
| 490 | luyKEIndex ID = 476 | ||
| 491 | lvIndex ID = 477 | ||
| 492 | lvLVIndex ID = 478 | ||
| 493 | masIndex ID = 479 | ||
| 494 | masKEIndex ID = 480 | ||
| 495 | masTZIndex ID = 481 | ||
| 496 | merIndex ID = 482 | ||
| 497 | merKEIndex ID = 483 | ||
| 498 | mfeIndex ID = 484 | ||
| 499 | mfeMUIndex ID = 485 | ||
| 500 | mgIndex ID = 486 | ||
| 501 | mgMGIndex ID = 487 | ||
| 502 | mghIndex ID = 488 | ||
| 503 | mghMZIndex ID = 489 | ||
| 504 | mgoIndex ID = 490 | ||
| 505 | mgoCMIndex ID = 491 | ||
| 506 | mkIndex ID = 492 | ||
| 507 | mkMKIndex ID = 493 | ||
| 508 | mlIndex ID = 494 | ||
| 509 | mlINIndex ID = 495 | ||
| 510 | mnIndex ID = 496 | ||
| 511 | mnMNIndex ID = 497 | ||
| 512 | moIndex ID = 498 | ||
| 513 | mrIndex ID = 499 | ||
| 514 | mrINIndex ID = 500 | ||
| 515 | msIndex ID = 501 | ||
| 516 | msBNIndex ID = 502 | ||
| 517 | msMYIndex ID = 503 | ||
| 518 | msSGIndex ID = 504 | ||
| 519 | mtIndex ID = 505 | ||
| 520 | mtMTIndex ID = 506 | ||
| 521 | muaIndex ID = 507 | ||
| 522 | muaCMIndex ID = 508 | ||
| 523 | myIndex ID = 509 | ||
| 524 | myMMIndex ID = 510 | ||
| 525 | mznIndex ID = 511 | ||
| 526 | mznIRIndex ID = 512 | ||
| 527 | nahIndex ID = 513 | ||
| 528 | naqIndex ID = 514 | ||
| 529 | naqNAIndex ID = 515 | ||
| 530 | nbIndex ID = 516 | ||
| 531 | nbNOIndex ID = 517 | ||
| 532 | nbSJIndex ID = 518 | ||
| 533 | ndIndex ID = 519 | ||
| 534 | ndZWIndex ID = 520 | ||
| 535 | ndsIndex ID = 521 | ||
| 536 | ndsDEIndex ID = 522 | ||
| 537 | ndsNLIndex ID = 523 | ||
| 538 | neIndex ID = 524 | ||
| 539 | neINIndex ID = 525 | ||
| 540 | neNPIndex ID = 526 | ||
| 541 | nlIndex ID = 527 | ||
| 542 | nlAWIndex ID = 528 | ||
| 543 | nlBEIndex ID = 529 | ||
| 544 | nlBQIndex ID = 530 | ||
| 545 | nlCWIndex ID = 531 | ||
| 546 | nlNLIndex ID = 532 | ||
| 547 | nlSRIndex ID = 533 | ||
| 548 | nlSXIndex ID = 534 | ||
| 549 | nmgIndex ID = 535 | ||
| 550 | nmgCMIndex ID = 536 | ||
| 551 | nnIndex ID = 537 | ||
| 552 | nnNOIndex ID = 538 | ||
| 553 | nnhIndex ID = 539 | ||
| 554 | nnhCMIndex ID = 540 | ||
| 555 | noIndex ID = 541 | ||
| 556 | nqoIndex ID = 542 | ||
| 557 | nrIndex ID = 543 | ||
| 558 | nsoIndex ID = 544 | ||
| 559 | nusIndex ID = 545 | ||
| 560 | nusSSIndex ID = 546 | ||
| 561 | nyIndex ID = 547 | ||
| 562 | nynIndex ID = 548 | ||
| 563 | nynUGIndex ID = 549 | ||
| 564 | omIndex ID = 550 | ||
| 565 | omETIndex ID = 551 | ||
| 566 | omKEIndex ID = 552 | ||
| 567 | orIndex ID = 553 | ||
| 568 | orINIndex ID = 554 | ||
| 569 | osIndex ID = 555 | ||
| 570 | osGEIndex ID = 556 | ||
| 571 | osRUIndex ID = 557 | ||
| 572 | paIndex ID = 558 | ||
| 573 | paArabIndex ID = 559 | ||
| 574 | paArabPKIndex ID = 560 | ||
| 575 | paGuruIndex ID = 561 | ||
| 576 | paGuruINIndex ID = 562 | ||
| 577 | papIndex ID = 563 | ||
| 578 | plIndex ID = 564 | ||
| 579 | plPLIndex ID = 565 | ||
| 580 | prgIndex ID = 566 | ||
| 581 | prg001Index ID = 567 | ||
| 582 | psIndex ID = 568 | ||
| 583 | psAFIndex ID = 569 | ||
| 584 | ptIndex ID = 570 | ||
| 585 | ptAOIndex ID = 571 | ||
| 586 | ptBRIndex ID = 572 | ||
| 587 | ptCHIndex ID = 573 | ||
| 588 | ptCVIndex ID = 574 | ||
| 589 | ptGQIndex ID = 575 | ||
| 590 | ptGWIndex ID = 576 | ||
| 591 | ptLUIndex ID = 577 | ||
| 592 | ptMOIndex ID = 578 | ||
| 593 | ptMZIndex ID = 579 | ||
| 594 | ptPTIndex ID = 580 | ||
| 595 | ptSTIndex ID = 581 | ||
| 596 | ptTLIndex ID = 582 | ||
| 597 | quIndex ID = 583 | ||
| 598 | quBOIndex ID = 584 | ||
| 599 | quECIndex ID = 585 | ||
| 600 | quPEIndex ID = 586 | ||
| 601 | rmIndex ID = 587 | ||
| 602 | rmCHIndex ID = 588 | ||
| 603 | rnIndex ID = 589 | ||
| 604 | rnBIIndex ID = 590 | ||
| 605 | roIndex ID = 591 | ||
| 606 | roMDIndex ID = 592 | ||
| 607 | roROIndex ID = 593 | ||
| 608 | rofIndex ID = 594 | ||
| 609 | rofTZIndex ID = 595 | ||
| 610 | ruIndex ID = 596 | ||
| 611 | ruBYIndex ID = 597 | ||
| 612 | ruKGIndex ID = 598 | ||
| 613 | ruKZIndex ID = 599 | ||
| 614 | ruMDIndex ID = 600 | ||
| 615 | ruRUIndex ID = 601 | ||
| 616 | ruUAIndex ID = 602 | ||
| 617 | rwIndex ID = 603 | ||
| 618 | rwRWIndex ID = 604 | ||
| 619 | rwkIndex ID = 605 | ||
| 620 | rwkTZIndex ID = 606 | ||
| 621 | sahIndex ID = 607 | ||
| 622 | sahRUIndex ID = 608 | ||
| 623 | saqIndex ID = 609 | ||
| 624 | saqKEIndex ID = 610 | ||
| 625 | sbpIndex ID = 611 | ||
| 626 | sbpTZIndex ID = 612 | ||
| 627 | sdIndex ID = 613 | ||
| 628 | sdPKIndex ID = 614 | ||
| 629 | sdhIndex ID = 615 | ||
| 630 | seIndex ID = 616 | ||
| 631 | seFIIndex ID = 617 | ||
| 632 | seNOIndex ID = 618 | ||
| 633 | seSEIndex ID = 619 | ||
| 634 | sehIndex ID = 620 | ||
| 635 | sehMZIndex ID = 621 | ||
| 636 | sesIndex ID = 622 | ||
| 637 | sesMLIndex ID = 623 | ||
| 638 | sgIndex ID = 624 | ||
| 639 | sgCFIndex ID = 625 | ||
| 640 | shIndex ID = 626 | ||
| 641 | shiIndex ID = 627 | ||
| 642 | shiLatnIndex ID = 628 | ||
| 643 | shiLatnMAIndex ID = 629 | ||
| 644 | shiTfngIndex ID = 630 | ||
| 645 | shiTfngMAIndex ID = 631 | ||
| 646 | siIndex ID = 632 | ||
| 647 | siLKIndex ID = 633 | ||
| 648 | skIndex ID = 634 | ||
| 649 | skSKIndex ID = 635 | ||
| 650 | slIndex ID = 636 | ||
| 651 | slSIIndex ID = 637 | ||
| 652 | smaIndex ID = 638 | ||
| 653 | smiIndex ID = 639 | ||
| 654 | smjIndex ID = 640 | ||
| 655 | smnIndex ID = 641 | ||
| 656 | smnFIIndex ID = 642 | ||
| 657 | smsIndex ID = 643 | ||
| 658 | snIndex ID = 644 | ||
| 659 | snZWIndex ID = 645 | ||
| 660 | soIndex ID = 646 | ||
| 661 | soDJIndex ID = 647 | ||
| 662 | soETIndex ID = 648 | ||
| 663 | soKEIndex ID = 649 | ||
| 664 | soSOIndex ID = 650 | ||
| 665 | sqIndex ID = 651 | ||
| 666 | sqALIndex ID = 652 | ||
| 667 | sqMKIndex ID = 653 | ||
| 668 | sqXKIndex ID = 654 | ||
| 669 | srIndex ID = 655 | ||
| 670 | srCyrlIndex ID = 656 | ||
| 671 | srCyrlBAIndex ID = 657 | ||
| 672 | srCyrlMEIndex ID = 658 | ||
| 673 | srCyrlRSIndex ID = 659 | ||
| 674 | srCyrlXKIndex ID = 660 | ||
| 675 | srLatnIndex ID = 661 | ||
| 676 | srLatnBAIndex ID = 662 | ||
| 677 | srLatnMEIndex ID = 663 | ||
| 678 | srLatnRSIndex ID = 664 | ||
| 679 | srLatnXKIndex ID = 665 | ||
| 680 | ssIndex ID = 666 | ||
| 681 | ssyIndex ID = 667 | ||
| 682 | stIndex ID = 668 | ||
| 683 | svIndex ID = 669 | ||
| 684 | svAXIndex ID = 670 | ||
| 685 | svFIIndex ID = 671 | ||
| 686 | svSEIndex ID = 672 | ||
| 687 | swIndex ID = 673 | ||
| 688 | swCDIndex ID = 674 | ||
| 689 | swKEIndex ID = 675 | ||
| 690 | swTZIndex ID = 676 | ||
| 691 | swUGIndex ID = 677 | ||
| 692 | syrIndex ID = 678 | ||
| 693 | taIndex ID = 679 | ||
| 694 | taINIndex ID = 680 | ||
| 695 | taLKIndex ID = 681 | ||
| 696 | taMYIndex ID = 682 | ||
| 697 | taSGIndex ID = 683 | ||
| 698 | teIndex ID = 684 | ||
| 699 | teINIndex ID = 685 | ||
| 700 | teoIndex ID = 686 | ||
| 701 | teoKEIndex ID = 687 | ||
| 702 | teoUGIndex ID = 688 | ||
| 703 | tgIndex ID = 689 | ||
| 704 | tgTJIndex ID = 690 | ||
| 705 | thIndex ID = 691 | ||
| 706 | thTHIndex ID = 692 | ||
| 707 | tiIndex ID = 693 | ||
| 708 | tiERIndex ID = 694 | ||
| 709 | tiETIndex ID = 695 | ||
| 710 | tigIndex ID = 696 | ||
| 711 | tkIndex ID = 697 | ||
| 712 | tkTMIndex ID = 698 | ||
| 713 | tlIndex ID = 699 | ||
| 714 | tnIndex ID = 700 | ||
| 715 | toIndex ID = 701 | ||
| 716 | toTOIndex ID = 702 | ||
| 717 | trIndex ID = 703 | ||
| 718 | trCYIndex ID = 704 | ||
| 719 | trTRIndex ID = 705 | ||
| 720 | tsIndex ID = 706 | ||
| 721 | ttIndex ID = 707 | ||
| 722 | ttRUIndex ID = 708 | ||
| 723 | twqIndex ID = 709 | ||
| 724 | twqNEIndex ID = 710 | ||
| 725 | tzmIndex ID = 711 | ||
| 726 | tzmMAIndex ID = 712 | ||
| 727 | ugIndex ID = 713 | ||
| 728 | ugCNIndex ID = 714 | ||
| 729 | ukIndex ID = 715 | ||
| 730 | ukUAIndex ID = 716 | ||
| 731 | urIndex ID = 717 | ||
| 732 | urINIndex ID = 718 | ||
| 733 | urPKIndex ID = 719 | ||
| 734 | uzIndex ID = 720 | ||
| 735 | uzArabIndex ID = 721 | ||
| 736 | uzArabAFIndex ID = 722 | ||
| 737 | uzCyrlIndex ID = 723 | ||
| 738 | uzCyrlUZIndex ID = 724 | ||
| 739 | uzLatnIndex ID = 725 | ||
| 740 | uzLatnUZIndex ID = 726 | ||
| 741 | vaiIndex ID = 727 | ||
| 742 | vaiLatnIndex ID = 728 | ||
| 743 | vaiLatnLRIndex ID = 729 | ||
| 744 | vaiVaiiIndex ID = 730 | ||
| 745 | vaiVaiiLRIndex ID = 731 | ||
| 746 | veIndex ID = 732 | ||
| 747 | viIndex ID = 733 | ||
| 748 | viVNIndex ID = 734 | ||
| 749 | voIndex ID = 735 | ||
| 750 | vo001Index ID = 736 | ||
| 751 | vunIndex ID = 737 | ||
| 752 | vunTZIndex ID = 738 | ||
| 753 | waIndex ID = 739 | ||
| 754 | waeIndex ID = 740 | ||
| 755 | waeCHIndex ID = 741 | ||
| 756 | woIndex ID = 742 | ||
| 757 | woSNIndex ID = 743 | ||
| 758 | xhIndex ID = 744 | ||
| 759 | xogIndex ID = 745 | ||
| 760 | xogUGIndex ID = 746 | ||
| 761 | yavIndex ID = 747 | ||
| 762 | yavCMIndex ID = 748 | ||
| 763 | yiIndex ID = 749 | ||
| 764 | yi001Index ID = 750 | ||
| 765 | yoIndex ID = 751 | ||
| 766 | yoBJIndex ID = 752 | ||
| 767 | yoNGIndex ID = 753 | ||
| 768 | yueIndex ID = 754 | ||
| 769 | yueHansIndex ID = 755 | ||
| 770 | yueHansCNIndex ID = 756 | ||
| 771 | yueHantIndex ID = 757 | ||
| 772 | yueHantHKIndex ID = 758 | ||
| 773 | zghIndex ID = 759 | ||
| 774 | zghMAIndex ID = 760 | ||
| 775 | zhIndex ID = 761 | ||
| 776 | zhHansIndex ID = 762 | ||
| 777 | zhHansCNIndex ID = 763 | ||
| 778 | zhHansHKIndex ID = 764 | ||
| 779 | zhHansMOIndex ID = 765 | ||
| 780 | zhHansSGIndex ID = 766 | ||
| 781 | zhHantIndex ID = 767 | ||
| 782 | zhHantHKIndex ID = 768 | ||
| 783 | zhHantMOIndex ID = 769 | ||
| 784 | zhHantTWIndex ID = 770 | ||
| 785 | zuIndex ID = 771 | ||
| 786 | zuZAIndex ID = 772 | ||
| 787 | caESvalenciaIndex ID = 773 | ||
| 788 | enUSuvaposixIndex ID = 774 | ||
| 789 | ) | ||
| 790 | |||
| 791 | var coreTags = []language.CompactCoreInfo{ // 773 elements | ||
| 792 | // Entry 0 - 1F | ||
| 793 | 0x00000000, 0x01600000, 0x016000d3, 0x01600162, | ||
| 794 | 0x01c00000, 0x01c00052, 0x02100000, 0x02100081, | ||
| 795 | 0x02700000, 0x02700070, 0x03a00000, 0x03a00001, | ||
| 796 | 0x03a00023, 0x03a00039, 0x03a00063, 0x03a00068, | ||
| 797 | 0x03a0006c, 0x03a0006d, 0x03a0006e, 0x03a00098, | ||
| 798 | 0x03a0009c, 0x03a000a2, 0x03a000a9, 0x03a000ad, | ||
| 799 | 0x03a000b1, 0x03a000ba, 0x03a000bb, 0x03a000ca, | ||
| 800 | 0x03a000e2, 0x03a000ee, 0x03a000f4, 0x03a00109, | ||
| 801 | // Entry 20 - 3F | ||
| 802 | 0x03a0010c, 0x03a00116, 0x03a00118, 0x03a0011d, | ||
| 803 | 0x03a00121, 0x03a00129, 0x03a0015f, 0x04000000, | ||
| 804 | 0x04300000, 0x0430009a, 0x04400000, 0x04400130, | ||
| 805 | 0x04800000, 0x0480006f, 0x05800000, 0x05820000, | ||
| 806 | 0x05820032, 0x0585b000, 0x0585b032, 0x05e00000, | ||
| 807 | 0x05e00052, 0x07100000, 0x07100047, 0x07500000, | ||
| 808 | 0x07500163, 0x07900000, 0x07900130, 0x07e00000, | ||
| 809 | 0x07e00038, 0x08200000, 0x0a000000, 0x0a0000c4, | ||
| 810 | // Entry 40 - 5F | ||
| 811 | 0x0a500000, 0x0a500035, 0x0a50009a, 0x0a900000, | ||
| 812 | 0x0a900053, 0x0a90009a, 0x0b200000, 0x0b200079, | ||
| 813 | 0x0b500000, 0x0b50009a, 0x0b700000, 0x0b720000, | ||
| 814 | 0x0b720033, 0x0b75b000, 0x0b75b033, 0x0d700000, | ||
| 815 | 0x0d700022, 0x0d70006f, 0x0d700079, 0x0d70009f, | ||
| 816 | 0x0db00000, 0x0db00035, 0x0db0009a, 0x0dc00000, | ||
| 817 | 0x0dc00107, 0x0df00000, 0x0df00132, 0x0e500000, | ||
| 818 | 0x0e500136, 0x0e900000, 0x0e90009c, 0x0e90009d, | ||
| 819 | // Entry 60 - 7F | ||
| 820 | 0x0fa00000, 0x0fa0005f, 0x0fe00000, 0x0fe00107, | ||
| 821 | 0x10000000, 0x1000007c, 0x10100000, 0x10100064, | ||
| 822 | 0x10100083, 0x10800000, 0x108000a5, 0x10d00000, | ||
| 823 | 0x10d0002e, 0x10d00036, 0x10d0004e, 0x10d00061, | ||
| 824 | 0x10d0009f, 0x10d000b3, 0x10d000b8, 0x11700000, | ||
| 825 | 0x117000d5, 0x11f00000, 0x11f00061, 0x12400000, | ||
| 826 | 0x12400052, 0x12800000, 0x12b00000, 0x12b00115, | ||
| 827 | 0x12d00000, 0x12d00043, 0x12f00000, 0x12f000a5, | ||
| 828 | // Entry 80 - 9F | ||
| 829 | 0x13000000, 0x13000081, 0x13000123, 0x13600000, | ||
| 830 | 0x1360005e, 0x13600088, 0x13900000, 0x13900001, | ||
| 831 | 0x1390001a, 0x13900025, 0x13900026, 0x1390002d, | ||
| 832 | 0x1390002e, 0x1390002f, 0x13900034, 0x13900036, | ||
| 833 | 0x1390003a, 0x1390003d, 0x13900042, 0x13900046, | ||
| 834 | 0x13900048, 0x13900049, 0x1390004a, 0x1390004e, | ||
| 835 | 0x13900050, 0x13900052, 0x1390005d, 0x1390005e, | ||
| 836 | 0x13900061, 0x13900062, 0x13900064, 0x13900065, | ||
| 837 | // Entry A0 - BF | ||
| 838 | 0x1390006e, 0x13900073, 0x13900074, 0x13900075, | ||
| 839 | 0x13900076, 0x1390007c, 0x1390007d, 0x13900080, | ||
| 840 | 0x13900081, 0x13900082, 0x13900084, 0x1390008b, | ||
| 841 | 0x1390008d, 0x1390008e, 0x13900097, 0x13900098, | ||
| 842 | 0x13900099, 0x1390009a, 0x1390009b, 0x139000a0, | ||
| 843 | 0x139000a1, 0x139000a5, 0x139000a8, 0x139000aa, | ||
| 844 | 0x139000ae, 0x139000b2, 0x139000b5, 0x139000b6, | ||
| 845 | 0x139000c0, 0x139000c1, 0x139000c7, 0x139000c8, | ||
| 846 | // Entry C0 - DF | ||
| 847 | 0x139000cb, 0x139000cc, 0x139000cd, 0x139000cf, | ||
| 848 | 0x139000d1, 0x139000d3, 0x139000d6, 0x139000d7, | ||
| 849 | 0x139000da, 0x139000de, 0x139000e0, 0x139000e1, | ||
| 850 | 0x139000e7, 0x139000e8, 0x139000e9, 0x139000ec, | ||
| 851 | 0x139000ed, 0x139000f1, 0x13900108, 0x1390010a, | ||
| 852 | 0x1390010b, 0x1390010c, 0x1390010d, 0x1390010e, | ||
| 853 | 0x1390010f, 0x13900110, 0x13900113, 0x13900118, | ||
| 854 | 0x1390011c, 0x1390011e, 0x13900120, 0x13900126, | ||
| 855 | // Entry E0 - FF | ||
| 856 | 0x1390012a, 0x1390012d, 0x1390012e, 0x13900130, | ||
| 857 | 0x13900132, 0x13900134, 0x13900136, 0x1390013a, | ||
| 858 | 0x1390013d, 0x1390013e, 0x13900140, 0x13900143, | ||
| 859 | 0x13900162, 0x13900163, 0x13900165, 0x13c00000, | ||
| 860 | 0x13c00001, 0x13e00000, 0x13e0001f, 0x13e0002c, | ||
| 861 | 0x13e0003f, 0x13e00041, 0x13e00048, 0x13e00051, | ||
| 862 | 0x13e00054, 0x13e00057, 0x13e0005a, 0x13e00066, | ||
| 863 | 0x13e00069, 0x13e0006a, 0x13e0006f, 0x13e00087, | ||
| 864 | // Entry 100 - 11F | ||
| 865 | 0x13e0008a, 0x13e00090, 0x13e00095, 0x13e000d0, | ||
| 866 | 0x13e000d9, 0x13e000e3, 0x13e000e5, 0x13e000e8, | ||
| 867 | 0x13e000ed, 0x13e000f2, 0x13e0011b, 0x13e00136, | ||
| 868 | 0x13e00137, 0x13e0013c, 0x14000000, 0x1400006b, | ||
| 869 | 0x14500000, 0x1450006f, 0x14600000, 0x14600052, | ||
| 870 | 0x14800000, 0x14800024, 0x1480009d, 0x14e00000, | ||
| 871 | 0x14e00052, 0x14e00085, 0x14e000ca, 0x14e00115, | ||
| 872 | 0x15100000, 0x15100073, 0x15300000, 0x153000e8, | ||
| 873 | // Entry 120 - 13F | ||
| 874 | 0x15800000, 0x15800064, 0x15800077, 0x15e00000, | ||
| 875 | 0x15e00036, 0x15e00037, 0x15e0003a, 0x15e0003b, | ||
| 876 | 0x15e0003c, 0x15e00049, 0x15e0004b, 0x15e0004c, | ||
| 877 | 0x15e0004d, 0x15e0004e, 0x15e0004f, 0x15e00052, | ||
| 878 | 0x15e00063, 0x15e00068, 0x15e00079, 0x15e0007b, | ||
| 879 | 0x15e0007f, 0x15e00085, 0x15e00086, 0x15e00087, | ||
| 880 | 0x15e00092, 0x15e000a9, 0x15e000b8, 0x15e000bb, | ||
| 881 | 0x15e000bc, 0x15e000bf, 0x15e000c0, 0x15e000c4, | ||
| 882 | // Entry 140 - 15F | ||
| 883 | 0x15e000c9, 0x15e000ca, 0x15e000cd, 0x15e000d4, | ||
| 884 | 0x15e000d5, 0x15e000e6, 0x15e000eb, 0x15e00103, | ||
| 885 | 0x15e00108, 0x15e0010b, 0x15e00115, 0x15e0011d, | ||
| 886 | 0x15e00121, 0x15e00123, 0x15e00129, 0x15e00140, | ||
| 887 | 0x15e00141, 0x15e00160, 0x16900000, 0x1690009f, | ||
| 888 | 0x16d00000, 0x16d000da, 0x16e00000, 0x16e00097, | ||
| 889 | 0x17e00000, 0x17e0007c, 0x19000000, 0x1900006f, | ||
| 890 | 0x1a300000, 0x1a30004e, 0x1a300079, 0x1a3000b3, | ||
| 891 | // Entry 160 - 17F | ||
| 892 | 0x1a400000, 0x1a40009a, 0x1a900000, 0x1ab00000, | ||
| 893 | 0x1ab000a5, 0x1ac00000, 0x1ac00099, 0x1b400000, | ||
| 894 | 0x1b400081, 0x1b4000d5, 0x1b4000d7, 0x1b800000, | ||
| 895 | 0x1b800136, 0x1bc00000, 0x1bc00098, 0x1be00000, | ||
| 896 | 0x1be0009a, 0x1d100000, 0x1d100033, 0x1d100091, | ||
| 897 | 0x1d200000, 0x1d200061, 0x1d500000, 0x1d500093, | ||
| 898 | 0x1d700000, 0x1d700028, 0x1e100000, 0x1e100096, | ||
| 899 | 0x1e700000, 0x1e7000d7, 0x1ea00000, 0x1ea00053, | ||
| 900 | // Entry 180 - 19F | ||
| 901 | 0x1f300000, 0x1f500000, 0x1f800000, 0x1f80009e, | ||
| 902 | 0x1f900000, 0x1f90004e, 0x1f90009f, 0x1f900114, | ||
| 903 | 0x1f900139, 0x1fa00000, 0x1fb00000, 0x20000000, | ||
| 904 | 0x200000a3, 0x20300000, 0x20700000, 0x20700052, | ||
| 905 | 0x20800000, 0x20a00000, 0x20a00130, 0x20e00000, | ||
| 906 | 0x20f00000, 0x21000000, 0x2100007e, 0x21200000, | ||
| 907 | 0x21200068, 0x21600000, 0x21700000, 0x217000a5, | ||
| 908 | 0x21f00000, 0x22300000, 0x22300130, 0x22700000, | ||
| 909 | // Entry 1A0 - 1BF | ||
| 910 | 0x2270005b, 0x23400000, 0x234000c4, 0x23900000, | ||
| 911 | 0x239000a5, 0x24200000, 0x242000af, 0x24400000, | ||
| 912 | 0x24400052, 0x24500000, 0x24500083, 0x24600000, | ||
| 913 | 0x246000a5, 0x24a00000, 0x24a000a7, 0x25100000, | ||
| 914 | 0x2510009a, 0x25400000, 0x254000ab, 0x254000ac, | ||
| 915 | 0x25600000, 0x2560009a, 0x26a00000, 0x26a0009a, | ||
| 916 | 0x26b00000, 0x26b00130, 0x26d00000, 0x26d00052, | ||
| 917 | 0x26e00000, 0x26e00061, 0x27400000, 0x28100000, | ||
| 918 | // Entry 1C0 - 1DF | ||
| 919 | 0x2810007c, 0x28a00000, 0x28a000a6, 0x29100000, | ||
| 920 | 0x29100130, 0x29500000, 0x295000b8, 0x2a300000, | ||
| 921 | 0x2a300132, 0x2af00000, 0x2af00136, 0x2b500000, | ||
| 922 | 0x2b50002a, 0x2b50004b, 0x2b50004c, 0x2b50004d, | ||
| 923 | 0x2b800000, 0x2b8000b0, 0x2bf00000, 0x2bf0009c, | ||
| 924 | 0x2bf0009d, 0x2c000000, 0x2c0000b7, 0x2c200000, | ||
| 925 | 0x2c20004b, 0x2c400000, 0x2c4000a5, 0x2c500000, | ||
| 926 | 0x2c5000a5, 0x2c700000, 0x2c7000b9, 0x2d100000, | ||
| 927 | // Entry 1E0 - 1FF | ||
| 928 | 0x2d1000a5, 0x2d100130, 0x2e900000, 0x2e9000a5, | ||
| 929 | 0x2ed00000, 0x2ed000cd, 0x2f100000, 0x2f1000c0, | ||
| 930 | 0x2f200000, 0x2f2000d2, 0x2f400000, 0x2f400052, | ||
| 931 | 0x2ff00000, 0x2ff000c3, 0x30400000, 0x3040009a, | ||
| 932 | 0x30b00000, 0x30b000c6, 0x31000000, 0x31b00000, | ||
| 933 | 0x31b0009a, 0x31f00000, 0x31f0003e, 0x31f000d1, | ||
| 934 | 0x31f0010e, 0x32000000, 0x320000cc, 0x32500000, | ||
| 935 | 0x32500052, 0x33100000, 0x331000c5, 0x33a00000, | ||
| 936 | // Entry 200 - 21F | ||
| 937 | 0x33a0009d, 0x34100000, 0x34500000, 0x345000d3, | ||
| 938 | 0x34700000, 0x347000db, 0x34700111, 0x34e00000, | ||
| 939 | 0x34e00165, 0x35000000, 0x35000061, 0x350000da, | ||
| 940 | 0x35100000, 0x3510009a, 0x351000dc, 0x36700000, | ||
| 941 | 0x36700030, 0x36700036, 0x36700040, 0x3670005c, | ||
| 942 | 0x367000da, 0x36700117, 0x3670011c, 0x36800000, | ||
| 943 | 0x36800052, 0x36a00000, 0x36a000db, 0x36c00000, | ||
| 944 | 0x36c00052, 0x36f00000, 0x37500000, 0x37600000, | ||
| 945 | // Entry 220 - 23F | ||
| 946 | 0x37a00000, 0x38000000, 0x38000118, 0x38700000, | ||
| 947 | 0x38900000, 0x38900132, 0x39000000, 0x39000070, | ||
| 948 | 0x390000a5, 0x39500000, 0x3950009a, 0x39800000, | ||
| 949 | 0x3980007e, 0x39800107, 0x39d00000, 0x39d05000, | ||
| 950 | 0x39d050e9, 0x39d36000, 0x39d3609a, 0x3a100000, | ||
| 951 | 0x3b300000, 0x3b3000ea, 0x3bd00000, 0x3bd00001, | ||
| 952 | 0x3be00000, 0x3be00024, 0x3c000000, 0x3c00002a, | ||
| 953 | 0x3c000041, 0x3c00004e, 0x3c00005b, 0x3c000087, | ||
| 954 | // Entry 240 - 25F | ||
| 955 | 0x3c00008c, 0x3c0000b8, 0x3c0000c7, 0x3c0000d2, | ||
| 956 | 0x3c0000ef, 0x3c000119, 0x3c000127, 0x3c400000, | ||
| 957 | 0x3c40003f, 0x3c40006a, 0x3c4000e5, 0x3d400000, | ||
| 958 | 0x3d40004e, 0x3d900000, 0x3d90003a, 0x3dc00000, | ||
| 959 | 0x3dc000bd, 0x3dc00105, 0x3de00000, 0x3de00130, | ||
| 960 | 0x3e200000, 0x3e200047, 0x3e2000a6, 0x3e2000af, | ||
| 961 | 0x3e2000bd, 0x3e200107, 0x3e200131, 0x3e500000, | ||
| 962 | 0x3e500108, 0x3e600000, 0x3e600130, 0x3eb00000, | ||
| 963 | // Entry 260 - 27F | ||
| 964 | 0x3eb00107, 0x3ec00000, 0x3ec000a5, 0x3f300000, | ||
| 965 | 0x3f300130, 0x3fa00000, 0x3fa000e9, 0x3fc00000, | ||
| 966 | 0x3fd00000, 0x3fd00073, 0x3fd000db, 0x3fd0010d, | ||
| 967 | 0x3ff00000, 0x3ff000d2, 0x40100000, 0x401000c4, | ||
| 968 | 0x40200000, 0x4020004c, 0x40700000, 0x40800000, | ||
| 969 | 0x4085b000, 0x4085b0bb, 0x408eb000, 0x408eb0bb, | ||
| 970 | 0x40c00000, 0x40c000b4, 0x41200000, 0x41200112, | ||
| 971 | 0x41600000, 0x41600110, 0x41c00000, 0x41d00000, | ||
| 972 | // Entry 280 - 29F | ||
| 973 | 0x41e00000, 0x41f00000, 0x41f00073, 0x42200000, | ||
| 974 | 0x42300000, 0x42300165, 0x42900000, 0x42900063, | ||
| 975 | 0x42900070, 0x429000a5, 0x42900116, 0x43100000, | ||
| 976 | 0x43100027, 0x431000c3, 0x4310014e, 0x43200000, | ||
| 977 | 0x43220000, 0x43220033, 0x432200be, 0x43220106, | ||
| 978 | 0x4322014e, 0x4325b000, 0x4325b033, 0x4325b0be, | ||
| 979 | 0x4325b106, 0x4325b14e, 0x43700000, 0x43a00000, | ||
| 980 | 0x43b00000, 0x44400000, 0x44400031, 0x44400073, | ||
| 981 | // Entry 2A0 - 2BF | ||
| 982 | 0x4440010d, 0x44500000, 0x4450004b, 0x445000a5, | ||
| 983 | 0x44500130, 0x44500132, 0x44e00000, 0x45000000, | ||
| 984 | 0x4500009a, 0x450000b4, 0x450000d1, 0x4500010e, | ||
| 985 | 0x46100000, 0x4610009a, 0x46400000, 0x464000a5, | ||
| 986 | 0x46400132, 0x46700000, 0x46700125, 0x46b00000, | ||
| 987 | 0x46b00124, 0x46f00000, 0x46f0006e, 0x46f00070, | ||
| 988 | 0x47100000, 0x47600000, 0x47600128, 0x47a00000, | ||
| 989 | 0x48000000, 0x48200000, 0x4820012a, 0x48a00000, | ||
| 990 | // Entry 2C0 - 2DF | ||
| 991 | 0x48a0005e, 0x48a0012c, 0x48e00000, 0x49400000, | ||
| 992 | 0x49400107, 0x4a400000, 0x4a4000d5, 0x4a900000, | ||
| 993 | 0x4a9000bb, 0x4ac00000, 0x4ac00053, 0x4ae00000, | ||
| 994 | 0x4ae00131, 0x4b400000, 0x4b40009a, 0x4b4000e9, | ||
| 995 | 0x4bc00000, 0x4bc05000, 0x4bc05024, 0x4bc20000, | ||
| 996 | 0x4bc20138, 0x4bc5b000, 0x4bc5b138, 0x4be00000, | ||
| 997 | 0x4be5b000, 0x4be5b0b5, 0x4bef4000, 0x4bef40b5, | ||
| 998 | 0x4c000000, 0x4c300000, 0x4c30013f, 0x4c900000, | ||
| 999 | // Entry 2E0 - 2FF | ||
| 1000 | 0x4c900001, 0x4cc00000, 0x4cc00130, 0x4ce00000, | ||
| 1001 | 0x4cf00000, 0x4cf0004e, 0x4e500000, 0x4e500115, | ||
| 1002 | 0x4f200000, 0x4fb00000, 0x4fb00132, 0x50900000, | ||
| 1003 | 0x50900052, 0x51200000, 0x51200001, 0x51800000, | ||
| 1004 | 0x5180003b, 0x518000d7, 0x51f00000, 0x51f3b000, | ||
| 1005 | 0x51f3b053, 0x51f3c000, 0x51f3c08e, 0x52800000, | ||
| 1006 | 0x528000bb, 0x52900000, 0x5293b000, 0x5293b053, | ||
| 1007 | 0x5293b08e, 0x5293b0c7, 0x5293b10e, 0x5293c000, | ||
| 1008 | // Entry 300 - 31F | ||
| 1009 | 0x5293c08e, 0x5293c0c7, 0x5293c12f, 0x52f00000, | ||
| 1010 | 0x52f00162, | ||
| 1011 | } // Size: 3116 bytes | ||
| 1012 | |||
| 1013 | const specialTagsStr string = "ca-ES-valencia en-US-u-va-posix" | ||
| 1014 | |||
| 1015 | // Total table size 3147 bytes (3KiB); checksum: 5A8FFFA5 | ||
diff --git a/vendor/golang.org/x/text/internal/language/compact/tags.go b/vendor/golang.org/x/text/internal/language/compact/tags.go new file mode 100644 index 0000000..ca135d2 --- /dev/null +++ b/vendor/golang.org/x/text/internal/language/compact/tags.go | |||
| @@ -0,0 +1,91 @@ | |||
| 1 | // Copyright 2013 The Go Authors. All rights reserved. | ||
| 2 | // Use of this source code is governed by a BSD-style | ||
| 3 | // license that can be found in the LICENSE file. | ||
| 4 | |||
| 5 | package compact | ||
| 6 | |||
| 7 | var ( | ||
| 8 | und = Tag{} | ||
| 9 | |||
| 10 | Und Tag = Tag{} | ||
| 11 | |||
| 12 | Afrikaans Tag = Tag{language: afIndex, locale: afIndex} | ||
| 13 | Amharic Tag = Tag{language: amIndex, locale: amIndex} | ||
| 14 | Arabic Tag = Tag{language: arIndex, locale: arIndex} | ||
| 15 | ModernStandardArabic Tag = Tag{language: ar001Index, locale: ar001Index} | ||
| 16 | Azerbaijani Tag = Tag{language: azIndex, locale: azIndex} | ||
| 17 | Bulgarian Tag = Tag{language: bgIndex, locale: bgIndex} | ||
| 18 | Bengali Tag = Tag{language: bnIndex, locale: bnIndex} | ||
| 19 | Catalan Tag = Tag{language: caIndex, locale: caIndex} | ||
| 20 | Czech Tag = Tag{language: csIndex, locale: csIndex} | ||
| 21 | Danish Tag = Tag{language: daIndex, locale: daIndex} | ||
| 22 | German Tag = Tag{language: deIndex, locale: deIndex} | ||
| 23 | Greek Tag = Tag{language: elIndex, locale: elIndex} | ||
| 24 | English Tag = Tag{language: enIndex, locale: enIndex} | ||
| 25 | AmericanEnglish Tag = Tag{language: enUSIndex, locale: enUSIndex} | ||
| 26 | BritishEnglish Tag = Tag{language: enGBIndex, locale: enGBIndex} | ||
| 27 | Spanish Tag = Tag{language: esIndex, locale: esIndex} | ||
| 28 | EuropeanSpanish Tag = Tag{language: esESIndex, locale: esESIndex} | ||
| 29 | LatinAmericanSpanish Tag = Tag{language: es419Index, locale: es419Index} | ||
| 30 | Estonian Tag = Tag{language: etIndex, locale: etIndex} | ||
| 31 | Persian Tag = Tag{language: faIndex, locale: faIndex} | ||
| 32 | Finnish Tag = Tag{language: fiIndex, locale: fiIndex} | ||
| 33 | Filipino Tag = Tag{language: filIndex, locale: filIndex} | ||
| 34 | French Tag = Tag{language: frIndex, locale: frIndex} | ||
| 35 | CanadianFrench Tag = Tag{language: frCAIndex, locale: frCAIndex} | ||
| 36 | Gujarati Tag = Tag{language: guIndex, locale: guIndex} | ||
| 37 | Hebrew Tag = Tag{language: heIndex, locale: heIndex} | ||
| 38 | Hindi Tag = Tag{language: hiIndex, locale: hiIndex} | ||
| 39 | Croatian Tag = Tag{language: hrIndex, locale: hrIndex} | ||
| 40 | Hungarian Tag = Tag{language: huIndex, locale: huIndex} | ||
| 41 | Armenian Tag = Tag{language: hyIndex, locale: hyIndex} | ||
| 42 | Indonesian Tag = Tag{language: idIndex, locale: idIndex} | ||
| 43 | Icelandic Tag = Tag{language: isIndex, locale: isIndex} | ||
| 44 | Italian Tag = Tag{language: itIndex, locale: itIndex} | ||
| 45 | Japanese Tag = Tag{language: jaIndex, locale: jaIndex} | ||
| 46 | Georgian Tag = Tag{language: kaIndex, locale: kaIndex} | ||
| 47 | Kazakh Tag = Tag{language: kkIndex, locale: kkIndex} | ||
| 48 | Khmer Tag = Tag{language: kmIndex, locale: kmIndex} | ||
| 49 | Kannada Tag = Tag{language: knIndex, locale: knIndex} | ||
| 50 | Korean Tag = Tag{language: koIndex, locale: koIndex} | ||
| 51 | Kirghiz Tag = Tag{language: kyIndex, locale: kyIndex} | ||
| 52 | Lao Tag = Tag{language: loIndex, locale: loIndex} | ||
| 53 | Lithuanian Tag = Tag{language: ltIndex, locale: ltIndex} | ||
| 54 | Latvian Tag = Tag{language: lvIndex, locale: lvIndex} | ||
| 55 | Macedonian Tag = Tag{language: mkIndex, locale: mkIndex} | ||
| 56 | Malayalam Tag = Tag{language: mlIndex, locale: mlIndex} | ||
| 57 | Mongolian Tag = Tag{language: mnIndex, locale: mnIndex} | ||
| 58 | Marathi Tag = Tag{language: mrIndex, locale: mrIndex} | ||
| 59 | Malay Tag = Tag{language: msIndex, locale: msIndex} | ||
| 60 | Burmese Tag = Tag{language: myIndex, locale: myIndex} | ||
| 61 | Nepali Tag = Tag{language: neIndex, locale: neIndex} | ||
| 62 | Dutch Tag = Tag{language: nlIndex, locale: nlIndex} | ||
| 63 | Norwegian Tag = Tag{language: noIndex, locale: noIndex} | ||
| 64 | Punjabi Tag = Tag{language: paIndex, locale: paIndex} | ||
| 65 | Polish Tag = Tag{language: plIndex, locale: plIndex} | ||
| 66 | Portuguese Tag = Tag{language: ptIndex, locale: ptIndex} | ||
| 67 | BrazilianPortuguese Tag = Tag{language: ptBRIndex, locale: ptBRIndex} | ||
| 68 | EuropeanPortuguese Tag = Tag{language: ptPTIndex, locale: ptPTIndex} | ||
| 69 | Romanian Tag = Tag{language: roIndex, locale: roIndex} | ||
| 70 | Russian Tag = Tag{language: ruIndex, locale: ruIndex} | ||
| 71 | Sinhala Tag = Tag{language: siIndex, locale: siIndex} | ||
| 72 | Slovak Tag = Tag{language: skIndex, locale: skIndex} | ||
| 73 | Slovenian Tag = Tag{language: slIndex, locale: slIndex} | ||
| 74 | Albanian Tag = Tag{language: sqIndex, locale: sqIndex} | ||
| 75 | Serbian Tag = Tag{language: srIndex, locale: srIndex} | ||
| 76 | SerbianLatin Tag = Tag{language: srLatnIndex, locale: srLatnIndex} | ||
| 77 | Swedish Tag = Tag{language: svIndex, locale: svIndex} | ||
| 78 | Swahili Tag = Tag{language: swIndex, locale: swIndex} | ||
| 79 | Tamil Tag = Tag{language: taIndex, locale: taIndex} | ||
| 80 | Telugu Tag = Tag{language: teIndex, locale: teIndex} | ||
| 81 | Thai Tag = Tag{language: thIndex, locale: thIndex} | ||
| 82 | Turkish Tag = Tag{language: trIndex, locale: trIndex} | ||
| 83 | Ukrainian Tag = Tag{language: ukIndex, locale: ukIndex} | ||
| 84 | Urdu Tag = Tag{language: urIndex, locale: urIndex} | ||
| 85 | Uzbek Tag = Tag{language: uzIndex, locale: uzIndex} | ||
| 86 | Vietnamese Tag = Tag{language: viIndex, locale: viIndex} | ||
| 87 | Chinese Tag = Tag{language: zhIndex, locale: zhIndex} | ||
| 88 | SimplifiedChinese Tag = Tag{language: zhHansIndex, locale: zhHansIndex} | ||
| 89 | TraditionalChinese Tag = Tag{language: zhHantIndex, locale: zhHantIndex} | ||
| 90 | Zulu Tag = Tag{language: zuIndex, locale: zuIndex} | ||
| 91 | ) | ||
diff --git a/vendor/golang.org/x/text/internal/language/compose.go b/vendor/golang.org/x/text/internal/language/compose.go new file mode 100644 index 0000000..4ae78e0 --- /dev/null +++ b/vendor/golang.org/x/text/internal/language/compose.go | |||
| @@ -0,0 +1,167 @@ | |||
| 1 | // Copyright 2018 The Go Authors. All rights reserved. | ||
| 2 | // Use of this source code is governed by a BSD-style | ||
| 3 | // license that can be found in the LICENSE file. | ||
| 4 | |||
| 5 | package language | ||
| 6 | |||
| 7 | import ( | ||
| 8 | "sort" | ||
| 9 | "strings" | ||
| 10 | ) | ||
| 11 | |||
| 12 | // A Builder allows constructing a Tag from individual components. | ||
| 13 | // Its main user is Compose in the top-level language package. | ||
| 14 | type Builder struct { | ||
| 15 | Tag Tag | ||
| 16 | |||
| 17 | private string // the x extension | ||
| 18 | variants []string | ||
| 19 | extensions []string | ||
| 20 | } | ||
| 21 | |||
| 22 | // Make returns a new Tag from the current settings. | ||
| 23 | func (b *Builder) Make() Tag { | ||
| 24 | t := b.Tag | ||
| 25 | |||
| 26 | if len(b.extensions) > 0 || len(b.variants) > 0 { | ||
| 27 | sort.Sort(sortVariants(b.variants)) | ||
| 28 | sort.Strings(b.extensions) | ||
| 29 | |||
| 30 | if b.private != "" { | ||
| 31 | b.extensions = append(b.extensions, b.private) | ||
| 32 | } | ||
| 33 | n := maxCoreSize + tokenLen(b.variants...) + tokenLen(b.extensions...) | ||
| 34 | buf := make([]byte, n) | ||
| 35 | p := t.genCoreBytes(buf) | ||
| 36 | t.pVariant = byte(p) | ||
| 37 | p += appendTokens(buf[p:], b.variants...) | ||
| 38 | t.pExt = uint16(p) | ||
| 39 | p += appendTokens(buf[p:], b.extensions...) | ||
| 40 | t.str = string(buf[:p]) | ||
| 41 | // We may not always need to remake the string, but when or when not | ||
| 42 | // to do so is rather tricky. | ||
| 43 | scan := makeScanner(buf[:p]) | ||
| 44 | t, _ = parse(&scan, "") | ||
| 45 | return t | ||
| 46 | |||
| 47 | } else if b.private != "" { | ||
| 48 | t.str = b.private | ||
| 49 | t.RemakeString() | ||
| 50 | } | ||
| 51 | return t | ||
| 52 | } | ||
| 53 | |||
| 54 | // SetTag copies all the settings from a given Tag. Any previously set values | ||
| 55 | // are discarded. | ||
| 56 | func (b *Builder) SetTag(t Tag) { | ||
| 57 | b.Tag.LangID = t.LangID | ||
| 58 | b.Tag.RegionID = t.RegionID | ||
| 59 | b.Tag.ScriptID = t.ScriptID | ||
| 60 | // TODO: optimize | ||
| 61 | b.variants = b.variants[:0] | ||
| 62 | if variants := t.Variants(); variants != "" { | ||
| 63 | for _, vr := range strings.Split(variants[1:], "-") { | ||
| 64 | b.variants = append(b.variants, vr) | ||
| 65 | } | ||
| 66 | } | ||
| 67 | b.extensions, b.private = b.extensions[:0], "" | ||
| 68 | for _, e := range t.Extensions() { | ||
| 69 | b.AddExt(e) | ||
| 70 | } | ||
| 71 | } | ||
| 72 | |||
| 73 | // AddExt adds extension e to the tag. e must be a valid extension as returned | ||
| 74 | // by Tag.Extension. If the extension already exists, it will be discarded, | ||
| 75 | // except for a -u extension, where non-existing key-type pairs will added. | ||
| 76 | func (b *Builder) AddExt(e string) { | ||
| 77 | if e[0] == 'x' { | ||
| 78 | if b.private == "" { | ||
| 79 | b.private = e | ||
| 80 | } | ||
| 81 | return | ||
| 82 | } | ||
| 83 | for i, s := range b.extensions { | ||
| 84 | if s[0] == e[0] { | ||
| 85 | if e[0] == 'u' { | ||
| 86 | b.extensions[i] += e[1:] | ||
| 87 | } | ||
| 88 | return | ||
| 89 | } | ||
| 90 | } | ||
| 91 | b.extensions = append(b.extensions, e) | ||
| 92 | } | ||
| 93 | |||
| 94 | // SetExt sets the extension e to the tag. e must be a valid extension as | ||
| 95 | // returned by Tag.Extension. If the extension already exists, it will be | ||
| 96 | // overwritten, except for a -u extension, where the individual key-type pairs | ||
| 97 | // will be set. | ||
| 98 | func (b *Builder) SetExt(e string) { | ||
| 99 | if e[0] == 'x' { | ||
| 100 | b.private = e | ||
| 101 | return | ||
| 102 | } | ||
| 103 | for i, s := range b.extensions { | ||
| 104 | if s[0] == e[0] { | ||
| 105 | if e[0] == 'u' { | ||
| 106 | b.extensions[i] = e + s[1:] | ||
| 107 | } else { | ||
| 108 | b.extensions[i] = e | ||
| 109 | } | ||
| 110 | return | ||
| 111 | } | ||
| 112 | } | ||
| 113 | b.extensions = append(b.extensions, e) | ||
| 114 | } | ||
| 115 | |||
| 116 | // AddVariant adds any number of variants. | ||
| 117 | func (b *Builder) AddVariant(v ...string) { | ||
| 118 | for _, v := range v { | ||
| 119 | if v != "" { | ||
| 120 | b.variants = append(b.variants, v) | ||
| 121 | } | ||
| 122 | } | ||
| 123 | } | ||
| 124 | |||
| 125 | // ClearVariants removes any variants previously added, including those | ||
| 126 | // copied from a Tag in SetTag. | ||
| 127 | func (b *Builder) ClearVariants() { | ||
| 128 | b.variants = b.variants[:0] | ||
| 129 | } | ||
| 130 | |||
| 131 | // ClearExtensions removes any extensions previously added, including those | ||
| 132 | // copied from a Tag in SetTag. | ||
| 133 | func (b *Builder) ClearExtensions() { | ||
| 134 | b.private = "" | ||
| 135 | b.extensions = b.extensions[:0] | ||
| 136 | } | ||
| 137 | |||
| 138 | func tokenLen(token ...string) (n int) { | ||
| 139 | for _, t := range token { | ||
| 140 | n += len(t) + 1 | ||
| 141 | } | ||
| 142 | return | ||
| 143 | } | ||
| 144 | |||
| 145 | func appendTokens(b []byte, token ...string) int { | ||
| 146 | p := 0 | ||
| 147 | for _, t := range token { | ||
| 148 | b[p] = '-' | ||
| 149 | copy(b[p+1:], t) | ||
| 150 | p += 1 + len(t) | ||
| 151 | } | ||
| 152 | return p | ||
| 153 | } | ||
| 154 | |||
| 155 | type sortVariants []string | ||
| 156 | |||
| 157 | func (s sortVariants) Len() int { | ||
| 158 | return len(s) | ||
| 159 | } | ||
| 160 | |||
| 161 | func (s sortVariants) Swap(i, j int) { | ||
| 162 | s[j], s[i] = s[i], s[j] | ||
| 163 | } | ||
| 164 | |||
| 165 | func (s sortVariants) Less(i, j int) bool { | ||
| 166 | return variantIndex[s[i]] < variantIndex[s[j]] | ||
| 167 | } | ||
diff --git a/vendor/golang.org/x/text/internal/language/coverage.go b/vendor/golang.org/x/text/internal/language/coverage.go new file mode 100644 index 0000000..9b20b88 --- /dev/null +++ b/vendor/golang.org/x/text/internal/language/coverage.go | |||
| @@ -0,0 +1,28 @@ | |||
| 1 | // Copyright 2014 The Go Authors. All rights reserved. | ||
| 2 | // Use of this source code is governed by a BSD-style | ||
| 3 | // license that can be found in the LICENSE file. | ||
| 4 | |||
| 5 | package language | ||
| 6 | |||
| 7 | // BaseLanguages returns the list of all supported base languages. It generates | ||
| 8 | // the list by traversing the internal structures. | ||
| 9 | func BaseLanguages() []Language { | ||
| 10 | base := make([]Language, 0, NumLanguages) | ||
| 11 | for i := 0; i < langNoIndexOffset; i++ { | ||
| 12 | // We included "und" already for the value 0. | ||
| 13 | if i != nonCanonicalUnd { | ||
| 14 | base = append(base, Language(i)) | ||
| 15 | } | ||
| 16 | } | ||
| 17 | i := langNoIndexOffset | ||
| 18 | for _, v := range langNoIndex { | ||
| 19 | for k := 0; k < 8; k++ { | ||
| 20 | if v&1 == 1 { | ||
| 21 | base = append(base, Language(i)) | ||
| 22 | } | ||
| 23 | v >>= 1 | ||
| 24 | i++ | ||
| 25 | } | ||
| 26 | } | ||
| 27 | return base | ||
| 28 | } | ||
diff --git a/vendor/golang.org/x/text/internal/language/language.go b/vendor/golang.org/x/text/internal/language/language.go new file mode 100644 index 0000000..09d41c7 --- /dev/null +++ b/vendor/golang.org/x/text/internal/language/language.go | |||
| @@ -0,0 +1,627 @@ | |||
| 1 | // Copyright 2013 The Go Authors. All rights reserved. | ||
| 2 | // Use of this source code is governed by a BSD-style | ||
| 3 | // license that can be found in the LICENSE file. | ||
| 4 | |||
| 5 | //go:generate go run gen.go gen_common.go -output tables.go | ||
| 6 | |||
| 7 | package language // import "golang.org/x/text/internal/language" | ||
| 8 | |||
| 9 | // TODO: Remove above NOTE after: | ||
| 10 | // - verifying that tables are dropped correctly (most notably matcher tables). | ||
| 11 | |||
| 12 | import ( | ||
| 13 | "errors" | ||
| 14 | "fmt" | ||
| 15 | "strings" | ||
| 16 | ) | ||
| 17 | |||
| 18 | const ( | ||
| 19 | // maxCoreSize is the maximum size of a BCP 47 tag without variants and | ||
| 20 | // extensions. Equals max lang (3) + script (4) + max reg (3) + 2 dashes. | ||
| 21 | maxCoreSize = 12 | ||
| 22 | |||
| 23 | // max99thPercentileSize is a somewhat arbitrary buffer size that presumably | ||
| 24 | // is large enough to hold at least 99% of the BCP 47 tags. | ||
| 25 | max99thPercentileSize = 32 | ||
| 26 | |||
| 27 | // maxSimpleUExtensionSize is the maximum size of a -u extension with one | ||
| 28 | // key-type pair. Equals len("-u-") + key (2) + dash + max value (8). | ||
| 29 | maxSimpleUExtensionSize = 14 | ||
| 30 | ) | ||
| 31 | |||
| 32 | // Tag represents a BCP 47 language tag. It is used to specify an instance of a | ||
| 33 | // specific language or locale. All language tag values are guaranteed to be | ||
| 34 | // well-formed. The zero value of Tag is Und. | ||
| 35 | type Tag struct { | ||
| 36 | // TODO: the following fields have the form TagTypeID. This name is chosen | ||
| 37 | // to allow refactoring the public package without conflicting with its | ||
| 38 | // Base, Script, and Region methods. Once the transition is fully completed | ||
| 39 | // the ID can be stripped from the name. | ||
| 40 | |||
| 41 | LangID Language | ||
| 42 | RegionID Region | ||
| 43 | // TODO: we will soon run out of positions for ScriptID. Idea: instead of | ||
| 44 | // storing lang, region, and ScriptID codes, store only the compact index and | ||
| 45 | // have a lookup table from this code to its expansion. This greatly speeds | ||
| 46 | // up table lookup, speed up common variant cases. | ||
| 47 | // This will also immediately free up 3 extra bytes. Also, the pVariant | ||
| 48 | // field can now be moved to the lookup table, as the compact index uniquely | ||
| 49 | // determines the offset of a possible variant. | ||
| 50 | ScriptID Script | ||
| 51 | pVariant byte // offset in str, includes preceding '-' | ||
| 52 | pExt uint16 // offset of first extension, includes preceding '-' | ||
| 53 | |||
| 54 | // str is the string representation of the Tag. It will only be used if the | ||
| 55 | // tag has variants or extensions. | ||
| 56 | str string | ||
| 57 | } | ||
| 58 | |||
| 59 | // Make is a convenience wrapper for Parse that omits the error. | ||
| 60 | // In case of an error, a sensible default is returned. | ||
| 61 | func Make(s string) Tag { | ||
| 62 | t, _ := Parse(s) | ||
| 63 | return t | ||
| 64 | } | ||
| 65 | |||
| 66 | // Raw returns the raw base language, script and region, without making an | ||
| 67 | // attempt to infer their values. | ||
| 68 | // TODO: consider removing | ||
| 69 | func (t Tag) Raw() (b Language, s Script, r Region) { | ||
| 70 | return t.LangID, t.ScriptID, t.RegionID | ||
| 71 | } | ||
| 72 | |||
| 73 | // equalTags compares language, script and region subtags only. | ||
| 74 | func (t Tag) equalTags(a Tag) bool { | ||
| 75 | return t.LangID == a.LangID && t.ScriptID == a.ScriptID && t.RegionID == a.RegionID | ||
| 76 | } | ||
| 77 | |||
| 78 | // IsRoot returns true if t is equal to language "und". | ||
| 79 | func (t Tag) IsRoot() bool { | ||
| 80 | if int(t.pVariant) < len(t.str) { | ||
| 81 | return false | ||
| 82 | } | ||
| 83 | return t.equalTags(Und) | ||
| 84 | } | ||
| 85 | |||
| 86 | // IsPrivateUse reports whether the Tag consists solely of an IsPrivateUse use | ||
| 87 | // tag. | ||
| 88 | func (t Tag) IsPrivateUse() bool { | ||
| 89 | return t.str != "" && t.pVariant == 0 | ||
| 90 | } | ||
| 91 | |||
| 92 | // RemakeString is used to update t.str in case lang, script or region changed. | ||
| 93 | // It is assumed that pExt and pVariant still point to the start of the | ||
| 94 | // respective parts. | ||
| 95 | func (t *Tag) RemakeString() { | ||
| 96 | if t.str == "" { | ||
| 97 | return | ||
| 98 | } | ||
| 99 | extra := t.str[t.pVariant:] | ||
| 100 | if t.pVariant > 0 { | ||
| 101 | extra = extra[1:] | ||
| 102 | } | ||
| 103 | if t.equalTags(Und) && strings.HasPrefix(extra, "x-") { | ||
| 104 | t.str = extra | ||
| 105 | t.pVariant = 0 | ||
| 106 | t.pExt = 0 | ||
| 107 | return | ||
| 108 | } | ||
| 109 | var buf [max99thPercentileSize]byte // avoid extra memory allocation in most cases. | ||
| 110 | b := buf[:t.genCoreBytes(buf[:])] | ||
| 111 | if extra != "" { | ||
| 112 | diff := len(b) - int(t.pVariant) | ||
| 113 | b = append(b, '-') | ||
| 114 | b = append(b, extra...) | ||
| 115 | t.pVariant = uint8(int(t.pVariant) + diff) | ||
| 116 | t.pExt = uint16(int(t.pExt) + diff) | ||
| 117 | } else { | ||
| 118 | t.pVariant = uint8(len(b)) | ||
| 119 | t.pExt = uint16(len(b)) | ||
| 120 | } | ||
| 121 | t.str = string(b) | ||
| 122 | } | ||
| 123 | |||
| 124 | // genCoreBytes writes a string for the base languages, script and region tags | ||
| 125 | // to the given buffer and returns the number of bytes written. It will never | ||
| 126 | // write more than maxCoreSize bytes. | ||
| 127 | func (t *Tag) genCoreBytes(buf []byte) int { | ||
| 128 | n := t.LangID.StringToBuf(buf[:]) | ||
| 129 | if t.ScriptID != 0 { | ||
| 130 | n += copy(buf[n:], "-") | ||
| 131 | n += copy(buf[n:], t.ScriptID.String()) | ||
| 132 | } | ||
| 133 | if t.RegionID != 0 { | ||
| 134 | n += copy(buf[n:], "-") | ||
| 135 | n += copy(buf[n:], t.RegionID.String()) | ||
| 136 | } | ||
| 137 | return n | ||
| 138 | } | ||
| 139 | |||
| 140 | // String returns the canonical string representation of the language tag. | ||
| 141 | func (t Tag) String() string { | ||
| 142 | if t.str != "" { | ||
| 143 | return t.str | ||
| 144 | } | ||
| 145 | if t.ScriptID == 0 && t.RegionID == 0 { | ||
| 146 | return t.LangID.String() | ||
| 147 | } | ||
| 148 | buf := [maxCoreSize]byte{} | ||
| 149 | return string(buf[:t.genCoreBytes(buf[:])]) | ||
| 150 | } | ||
| 151 | |||
| 152 | // MarshalText implements encoding.TextMarshaler. | ||
| 153 | func (t Tag) MarshalText() (text []byte, err error) { | ||
| 154 | if t.str != "" { | ||
| 155 | text = append(text, t.str...) | ||
| 156 | } else if t.ScriptID == 0 && t.RegionID == 0 { | ||
| 157 | text = append(text, t.LangID.String()...) | ||
| 158 | } else { | ||
| 159 | buf := [maxCoreSize]byte{} | ||
| 160 | text = buf[:t.genCoreBytes(buf[:])] | ||
| 161 | } | ||
| 162 | return text, nil | ||
| 163 | } | ||
| 164 | |||
| 165 | // UnmarshalText implements encoding.TextUnmarshaler. | ||
| 166 | func (t *Tag) UnmarshalText(text []byte) error { | ||
| 167 | tag, err := Parse(string(text)) | ||
| 168 | *t = tag | ||
| 169 | return err | ||
| 170 | } | ||
| 171 | |||
| 172 | // Variants returns the part of the tag holding all variants or the empty string | ||
| 173 | // if there are no variants defined. | ||
| 174 | func (t Tag) Variants() string { | ||
| 175 | if t.pVariant == 0 { | ||
| 176 | return "" | ||
| 177 | } | ||
| 178 | return t.str[t.pVariant:t.pExt] | ||
| 179 | } | ||
| 180 | |||
| 181 | // VariantOrPrivateUseTags returns variants or private use tags. | ||
| 182 | func (t Tag) VariantOrPrivateUseTags() string { | ||
| 183 | if t.pExt > 0 { | ||
| 184 | return t.str[t.pVariant:t.pExt] | ||
| 185 | } | ||
| 186 | return t.str[t.pVariant:] | ||
| 187 | } | ||
| 188 | |||
| 189 | // HasString reports whether this tag defines more than just the raw | ||
| 190 | // components. | ||
| 191 | func (t Tag) HasString() bool { | ||
| 192 | return t.str != "" | ||
| 193 | } | ||
| 194 | |||
| 195 | // Parent returns the CLDR parent of t. In CLDR, missing fields in data for a | ||
| 196 | // specific language are substituted with fields from the parent language. | ||
| 197 | // The parent for a language may change for newer versions of CLDR. | ||
| 198 | func (t Tag) Parent() Tag { | ||
| 199 | if t.str != "" { | ||
| 200 | // Strip the variants and extensions. | ||
| 201 | b, s, r := t.Raw() | ||
| 202 | t = Tag{LangID: b, ScriptID: s, RegionID: r} | ||
| 203 | if t.RegionID == 0 && t.ScriptID != 0 && t.LangID != 0 { | ||
| 204 | base, _ := addTags(Tag{LangID: t.LangID}) | ||
| 205 | if base.ScriptID == t.ScriptID { | ||
| 206 | return Tag{LangID: t.LangID} | ||
| 207 | } | ||
| 208 | } | ||
| 209 | return t | ||
| 210 | } | ||
| 211 | if t.LangID != 0 { | ||
| 212 | if t.RegionID != 0 { | ||
| 213 | maxScript := t.ScriptID | ||
| 214 | if maxScript == 0 { | ||
| 215 | max, _ := addTags(t) | ||
| 216 | maxScript = max.ScriptID | ||
| 217 | } | ||
| 218 | |||
| 219 | for i := range parents { | ||
| 220 | if Language(parents[i].lang) == t.LangID && Script(parents[i].maxScript) == maxScript { | ||
| 221 | for _, r := range parents[i].fromRegion { | ||
| 222 | if Region(r) == t.RegionID { | ||
| 223 | return Tag{ | ||
| 224 | LangID: t.LangID, | ||
| 225 | ScriptID: Script(parents[i].script), | ||
| 226 | RegionID: Region(parents[i].toRegion), | ||
| 227 | } | ||
| 228 | } | ||
| 229 | } | ||
| 230 | } | ||
| 231 | } | ||
| 232 | |||
| 233 | // Strip the script if it is the default one. | ||
| 234 | base, _ := addTags(Tag{LangID: t.LangID}) | ||
| 235 | if base.ScriptID != maxScript { | ||
| 236 | return Tag{LangID: t.LangID, ScriptID: maxScript} | ||
| 237 | } | ||
| 238 | return Tag{LangID: t.LangID} | ||
| 239 | } else if t.ScriptID != 0 { | ||
| 240 | // The parent for an base-script pair with a non-default script is | ||
| 241 | // "und" instead of the base language. | ||
| 242 | base, _ := addTags(Tag{LangID: t.LangID}) | ||
| 243 | if base.ScriptID != t.ScriptID { | ||
| 244 | return Und | ||
| 245 | } | ||
| 246 | return Tag{LangID: t.LangID} | ||
| 247 | } | ||
| 248 | } | ||
| 249 | return Und | ||
| 250 | } | ||
| 251 | |||
| 252 | // ParseExtension parses s as an extension and returns it on success. | ||
| 253 | func ParseExtension(s string) (ext string, err error) { | ||
| 254 | defer func() { | ||
| 255 | if recover() != nil { | ||
| 256 | ext = "" | ||
| 257 | err = ErrSyntax | ||
| 258 | } | ||
| 259 | }() | ||
| 260 | |||
| 261 | scan := makeScannerString(s) | ||
| 262 | var end int | ||
| 263 | if n := len(scan.token); n != 1 { | ||
| 264 | return "", ErrSyntax | ||
| 265 | } | ||
| 266 | scan.toLower(0, len(scan.b)) | ||
| 267 | end = parseExtension(&scan) | ||
| 268 | if end != len(s) { | ||
| 269 | return "", ErrSyntax | ||
| 270 | } | ||
| 271 | return string(scan.b), nil | ||
| 272 | } | ||
| 273 | |||
| 274 | // HasVariants reports whether t has variants. | ||
| 275 | func (t Tag) HasVariants() bool { | ||
| 276 | return uint16(t.pVariant) < t.pExt | ||
| 277 | } | ||
| 278 | |||
| 279 | // HasExtensions reports whether t has extensions. | ||
| 280 | func (t Tag) HasExtensions() bool { | ||
| 281 | return int(t.pExt) < len(t.str) | ||
| 282 | } | ||
| 283 | |||
| 284 | // Extension returns the extension of type x for tag t. It will return | ||
| 285 | // false for ok if t does not have the requested extension. The returned | ||
| 286 | // extension will be invalid in this case. | ||
| 287 | func (t Tag) Extension(x byte) (ext string, ok bool) { | ||
| 288 | for i := int(t.pExt); i < len(t.str)-1; { | ||
| 289 | var ext string | ||
| 290 | i, ext = getExtension(t.str, i) | ||
| 291 | if ext[0] == x { | ||
| 292 | return ext, true | ||
| 293 | } | ||
| 294 | } | ||
| 295 | return "", false | ||
| 296 | } | ||
| 297 | |||
| 298 | // Extensions returns all extensions of t. | ||
| 299 | func (t Tag) Extensions() []string { | ||
| 300 | e := []string{} | ||
| 301 | for i := int(t.pExt); i < len(t.str)-1; { | ||
| 302 | var ext string | ||
| 303 | i, ext = getExtension(t.str, i) | ||
| 304 | e = append(e, ext) | ||
| 305 | } | ||
| 306 | return e | ||
| 307 | } | ||
| 308 | |||
| 309 | // TypeForKey returns the type associated with the given key, where key and type | ||
| 310 | // are of the allowed values defined for the Unicode locale extension ('u') in | ||
| 311 | // https://www.unicode.org/reports/tr35/#Unicode_Language_and_Locale_Identifiers. | ||
| 312 | // TypeForKey will traverse the inheritance chain to get the correct value. | ||
| 313 | // | ||
| 314 | // If there are multiple types associated with a key, only the first will be | ||
| 315 | // returned. If there is no type associated with a key, it returns the empty | ||
| 316 | // string. | ||
| 317 | func (t Tag) TypeForKey(key string) string { | ||
| 318 | if _, start, end, _ := t.findTypeForKey(key); end != start { | ||
| 319 | s := t.str[start:end] | ||
| 320 | if p := strings.IndexByte(s, '-'); p >= 0 { | ||
| 321 | s = s[:p] | ||
| 322 | } | ||
| 323 | return s | ||
| 324 | } | ||
| 325 | return "" | ||
| 326 | } | ||
| 327 | |||
| 328 | var ( | ||
| 329 | errPrivateUse = errors.New("cannot set a key on a private use tag") | ||
| 330 | errInvalidArguments = errors.New("invalid key or type") | ||
| 331 | ) | ||
| 332 | |||
| 333 | // SetTypeForKey returns a new Tag with the key set to type, where key and type | ||
| 334 | // are of the allowed values defined for the Unicode locale extension ('u') in | ||
| 335 | // https://www.unicode.org/reports/tr35/#Unicode_Language_and_Locale_Identifiers. | ||
| 336 | // An empty value removes an existing pair with the same key. | ||
| 337 | func (t Tag) SetTypeForKey(key, value string) (Tag, error) { | ||
| 338 | if t.IsPrivateUse() { | ||
| 339 | return t, errPrivateUse | ||
| 340 | } | ||
| 341 | if len(key) != 2 { | ||
| 342 | return t, errInvalidArguments | ||
| 343 | } | ||
| 344 | |||
| 345 | // Remove the setting if value is "". | ||
| 346 | if value == "" { | ||
| 347 | start, sep, end, _ := t.findTypeForKey(key) | ||
| 348 | if start != sep { | ||
| 349 | // Remove a possible empty extension. | ||
| 350 | switch { | ||
| 351 | case t.str[start-2] != '-': // has previous elements. | ||
| 352 | case end == len(t.str), // end of string | ||
| 353 | end+2 < len(t.str) && t.str[end+2] == '-': // end of extension | ||
| 354 | start -= 2 | ||
| 355 | } | ||
| 356 | if start == int(t.pVariant) && end == len(t.str) { | ||
| 357 | t.str = "" | ||
| 358 | t.pVariant, t.pExt = 0, 0 | ||
| 359 | } else { | ||
| 360 | t.str = fmt.Sprintf("%s%s", t.str[:start], t.str[end:]) | ||
| 361 | } | ||
| 362 | } | ||
| 363 | return t, nil | ||
| 364 | } | ||
| 365 | |||
| 366 | if len(value) < 3 || len(value) > 8 { | ||
| 367 | return t, errInvalidArguments | ||
| 368 | } | ||
| 369 | |||
| 370 | var ( | ||
| 371 | buf [maxCoreSize + maxSimpleUExtensionSize]byte | ||
| 372 | uStart int // start of the -u extension. | ||
| 373 | ) | ||
| 374 | |||
| 375 | // Generate the tag string if needed. | ||
| 376 | if t.str == "" { | ||
| 377 | uStart = t.genCoreBytes(buf[:]) | ||
| 378 | buf[uStart] = '-' | ||
| 379 | uStart++ | ||
| 380 | } | ||
| 381 | |||
| 382 | // Create new key-type pair and parse it to verify. | ||
| 383 | b := buf[uStart:] | ||
| 384 | copy(b, "u-") | ||
| 385 | copy(b[2:], key) | ||
| 386 | b[4] = '-' | ||
| 387 | b = b[:5+copy(b[5:], value)] | ||
| 388 | scan := makeScanner(b) | ||
| 389 | if parseExtensions(&scan); scan.err != nil { | ||
| 390 | return t, scan.err | ||
| 391 | } | ||
| 392 | |||
| 393 | // Assemble the replacement string. | ||
| 394 | if t.str == "" { | ||
| 395 | t.pVariant, t.pExt = byte(uStart-1), uint16(uStart-1) | ||
| 396 | t.str = string(buf[:uStart+len(b)]) | ||
| 397 | } else { | ||
| 398 | s := t.str | ||
| 399 | start, sep, end, hasExt := t.findTypeForKey(key) | ||
| 400 | if start == sep { | ||
| 401 | if hasExt { | ||
| 402 | b = b[2:] | ||
| 403 | } | ||
| 404 | t.str = fmt.Sprintf("%s-%s%s", s[:sep], b, s[end:]) | ||
| 405 | } else { | ||
| 406 | t.str = fmt.Sprintf("%s-%s%s", s[:start+3], value, s[end:]) | ||
| 407 | } | ||
| 408 | } | ||
| 409 | return t, nil | ||
| 410 | } | ||
| 411 | |||
| 412 | // findTypeForKey returns the start and end position for the type corresponding | ||
| 413 | // to key or the point at which to insert the key-value pair if the type | ||
| 414 | // wasn't found. The hasExt return value reports whether an -u extension was present. | ||
| 415 | // Note: the extensions are typically very small and are likely to contain | ||
| 416 | // only one key-type pair. | ||
| 417 | func (t Tag) findTypeForKey(key string) (start, sep, end int, hasExt bool) { | ||
| 418 | p := int(t.pExt) | ||
| 419 | if len(key) != 2 || p == len(t.str) || p == 0 { | ||
| 420 | return p, p, p, false | ||
| 421 | } | ||
| 422 | s := t.str | ||
| 423 | |||
| 424 | // Find the correct extension. | ||
| 425 | for p++; s[p] != 'u'; p++ { | ||
| 426 | if s[p] > 'u' { | ||
| 427 | p-- | ||
| 428 | return p, p, p, false | ||
| 429 | } | ||
| 430 | if p = nextExtension(s, p); p == len(s) { | ||
| 431 | return len(s), len(s), len(s), false | ||
| 432 | } | ||
| 433 | } | ||
| 434 | // Proceed to the hyphen following the extension name. | ||
| 435 | p++ | ||
| 436 | |||
| 437 | // curKey is the key currently being processed. | ||
| 438 | curKey := "" | ||
| 439 | |||
| 440 | // Iterate over keys until we get the end of a section. | ||
| 441 | for { | ||
| 442 | end = p | ||
| 443 | for p++; p < len(s) && s[p] != '-'; p++ { | ||
| 444 | } | ||
| 445 | n := p - end - 1 | ||
| 446 | if n <= 2 && curKey == key { | ||
| 447 | if sep < end { | ||
| 448 | sep++ | ||
| 449 | } | ||
| 450 | return start, sep, end, true | ||
| 451 | } | ||
| 452 | switch n { | ||
| 453 | case 0, // invalid string | ||
| 454 | 1: // next extension | ||
| 455 | return end, end, end, true | ||
| 456 | case 2: | ||
| 457 | // next key | ||
| 458 | curKey = s[end+1 : p] | ||
| 459 | if curKey > key { | ||
| 460 | return end, end, end, true | ||
| 461 | } | ||
| 462 | start = end | ||
| 463 | sep = p | ||
| 464 | } | ||
| 465 | } | ||
| 466 | } | ||
| 467 | |||
| 468 | // ParseBase parses a 2- or 3-letter ISO 639 code. | ||
| 469 | // It returns a ValueError if s is a well-formed but unknown language identifier | ||
| 470 | // or another error if another error occurred. | ||
| 471 | func ParseBase(s string) (l Language, err error) { | ||
| 472 | defer func() { | ||
| 473 | if recover() != nil { | ||
| 474 | l = 0 | ||
| 475 | err = ErrSyntax | ||
| 476 | } | ||
| 477 | }() | ||
| 478 | |||
| 479 | if n := len(s); n < 2 || 3 < n { | ||
| 480 | return 0, ErrSyntax | ||
| 481 | } | ||
| 482 | var buf [3]byte | ||
| 483 | return getLangID(buf[:copy(buf[:], s)]) | ||
| 484 | } | ||
| 485 | |||
| 486 | // ParseScript parses a 4-letter ISO 15924 code. | ||
| 487 | // It returns a ValueError if s is a well-formed but unknown script identifier | ||
| 488 | // or another error if another error occurred. | ||
| 489 | func ParseScript(s string) (scr Script, err error) { | ||
| 490 | defer func() { | ||
| 491 | if recover() != nil { | ||
| 492 | scr = 0 | ||
| 493 | err = ErrSyntax | ||
| 494 | } | ||
| 495 | }() | ||
| 496 | |||
| 497 | if len(s) != 4 { | ||
| 498 | return 0, ErrSyntax | ||
| 499 | } | ||
| 500 | var buf [4]byte | ||
| 501 | return getScriptID(script, buf[:copy(buf[:], s)]) | ||
| 502 | } | ||
| 503 | |||
| 504 | // EncodeM49 returns the Region for the given UN M.49 code. | ||
| 505 | // It returns an error if r is not a valid code. | ||
| 506 | func EncodeM49(r int) (Region, error) { | ||
| 507 | return getRegionM49(r) | ||
| 508 | } | ||
| 509 | |||
| 510 | // ParseRegion parses a 2- or 3-letter ISO 3166-1 or a UN M.49 code. | ||
| 511 | // It returns a ValueError if s is a well-formed but unknown region identifier | ||
| 512 | // or another error if another error occurred. | ||
| 513 | func ParseRegion(s string) (r Region, err error) { | ||
| 514 | defer func() { | ||
| 515 | if recover() != nil { | ||
| 516 | r = 0 | ||
| 517 | err = ErrSyntax | ||
| 518 | } | ||
| 519 | }() | ||
| 520 | |||
| 521 | if n := len(s); n < 2 || 3 < n { | ||
| 522 | return 0, ErrSyntax | ||
| 523 | } | ||
| 524 | var buf [3]byte | ||
| 525 | return getRegionID(buf[:copy(buf[:], s)]) | ||
| 526 | } | ||
| 527 | |||
| 528 | // IsCountry returns whether this region is a country or autonomous area. This | ||
| 529 | // includes non-standard definitions from CLDR. | ||
| 530 | func (r Region) IsCountry() bool { | ||
| 531 | if r == 0 || r.IsGroup() || r.IsPrivateUse() && r != _XK { | ||
| 532 | return false | ||
| 533 | } | ||
| 534 | return true | ||
| 535 | } | ||
| 536 | |||
| 537 | // IsGroup returns whether this region defines a collection of regions. This | ||
| 538 | // includes non-standard definitions from CLDR. | ||
| 539 | func (r Region) IsGroup() bool { | ||
| 540 | if r == 0 { | ||
| 541 | return false | ||
| 542 | } | ||
| 543 | return int(regionInclusion[r]) < len(regionContainment) | ||
| 544 | } | ||
| 545 | |||
| 546 | // Contains returns whether Region c is contained by Region r. It returns true | ||
| 547 | // if c == r. | ||
| 548 | func (r Region) Contains(c Region) bool { | ||
| 549 | if r == c { | ||
| 550 | return true | ||
| 551 | } | ||
| 552 | g := regionInclusion[r] | ||
| 553 | if g >= nRegionGroups { | ||
| 554 | return false | ||
| 555 | } | ||
| 556 | m := regionContainment[g] | ||
| 557 | |||
| 558 | d := regionInclusion[c] | ||
| 559 | b := regionInclusionBits[d] | ||
| 560 | |||
| 561 | // A contained country may belong to multiple disjoint groups. Matching any | ||
| 562 | // of these indicates containment. If the contained region is a group, it | ||
| 563 | // must strictly be a subset. | ||
| 564 | if d >= nRegionGroups { | ||
| 565 | return b&m != 0 | ||
| 566 | } | ||
| 567 | return b&^m == 0 | ||
| 568 | } | ||
| 569 | |||
| 570 | var errNoTLD = errors.New("language: region is not a valid ccTLD") | ||
| 571 | |||
| 572 | // TLD returns the country code top-level domain (ccTLD). UK is returned for GB. | ||
| 573 | // In all other cases it returns either the region itself or an error. | ||
| 574 | // | ||
| 575 | // This method may return an error for a region for which there exists a | ||
| 576 | // canonical form with a ccTLD. To get that ccTLD canonicalize r first. The | ||
| 577 | // region will already be canonicalized it was obtained from a Tag that was | ||
| 578 | // obtained using any of the default methods. | ||
| 579 | func (r Region) TLD() (Region, error) { | ||
| 580 | // See http://en.wikipedia.org/wiki/Country_code_top-level_domain for the | ||
| 581 | // difference between ISO 3166-1 and IANA ccTLD. | ||
| 582 | if r == _GB { | ||
| 583 | r = _UK | ||
| 584 | } | ||
| 585 | if (r.typ() & ccTLD) == 0 { | ||
| 586 | return 0, errNoTLD | ||
| 587 | } | ||
| 588 | return r, nil | ||
| 589 | } | ||
| 590 | |||
| 591 | // Canonicalize returns the region or a possible replacement if the region is | ||
| 592 | // deprecated. It will not return a replacement for deprecated regions that | ||
| 593 | // are split into multiple regions. | ||
| 594 | func (r Region) Canonicalize() Region { | ||
| 595 | if cr := normRegion(r); cr != 0 { | ||
| 596 | return cr | ||
| 597 | } | ||
| 598 | return r | ||
| 599 | } | ||
| 600 | |||
| 601 | // Variant represents a registered variant of a language as defined by BCP 47. | ||
| 602 | type Variant struct { | ||
| 603 | ID uint8 | ||
| 604 | str string | ||
| 605 | } | ||
| 606 | |||
| 607 | // ParseVariant parses and returns a Variant. An error is returned if s is not | ||
| 608 | // a valid variant. | ||
| 609 | func ParseVariant(s string) (v Variant, err error) { | ||
| 610 | defer func() { | ||
| 611 | if recover() != nil { | ||
| 612 | v = Variant{} | ||
| 613 | err = ErrSyntax | ||
| 614 | } | ||
| 615 | }() | ||
| 616 | |||
| 617 | s = strings.ToLower(s) | ||
| 618 | if id, ok := variantIndex[s]; ok { | ||
| 619 | return Variant{id, s}, nil | ||
| 620 | } | ||
| 621 | return Variant{}, NewValueError([]byte(s)) | ||
| 622 | } | ||
| 623 | |||
| 624 | // String returns the string representation of the variant. | ||
| 625 | func (v Variant) String() string { | ||
| 626 | return v.str | ||
| 627 | } | ||
diff --git a/vendor/golang.org/x/text/internal/language/lookup.go b/vendor/golang.org/x/text/internal/language/lookup.go new file mode 100644 index 0000000..231b4fb --- /dev/null +++ b/vendor/golang.org/x/text/internal/language/lookup.go | |||
| @@ -0,0 +1,412 @@ | |||
| 1 | // Copyright 2013 The Go Authors. All rights reserved. | ||
| 2 | // Use of this source code is governed by a BSD-style | ||
| 3 | // license that can be found in the LICENSE file. | ||
| 4 | |||
| 5 | package language | ||
| 6 | |||
| 7 | import ( | ||
| 8 | "bytes" | ||
| 9 | "fmt" | ||
| 10 | "sort" | ||
| 11 | "strconv" | ||
| 12 | |||
| 13 | "golang.org/x/text/internal/tag" | ||
| 14 | ) | ||
| 15 | |||
| 16 | // findIndex tries to find the given tag in idx and returns a standardized error | ||
| 17 | // if it could not be found. | ||
| 18 | func findIndex(idx tag.Index, key []byte, form string) (index int, err error) { | ||
| 19 | if !tag.FixCase(form, key) { | ||
| 20 | return 0, ErrSyntax | ||
| 21 | } | ||
| 22 | i := idx.Index(key) | ||
| 23 | if i == -1 { | ||
| 24 | return 0, NewValueError(key) | ||
| 25 | } | ||
| 26 | return i, nil | ||
| 27 | } | ||
| 28 | |||
| 29 | func searchUint(imap []uint16, key uint16) int { | ||
| 30 | return sort.Search(len(imap), func(i int) bool { | ||
| 31 | return imap[i] >= key | ||
| 32 | }) | ||
| 33 | } | ||
| 34 | |||
| 35 | type Language uint16 | ||
| 36 | |||
| 37 | // getLangID returns the langID of s if s is a canonical subtag | ||
| 38 | // or langUnknown if s is not a canonical subtag. | ||
| 39 | func getLangID(s []byte) (Language, error) { | ||
| 40 | if len(s) == 2 { | ||
| 41 | return getLangISO2(s) | ||
| 42 | } | ||
| 43 | return getLangISO3(s) | ||
| 44 | } | ||
| 45 | |||
| 46 | // TODO language normalization as well as the AliasMaps could be moved to the | ||
| 47 | // higher level package, but it is a bit tricky to separate the generation. | ||
| 48 | |||
| 49 | func (id Language) Canonicalize() (Language, AliasType) { | ||
| 50 | return normLang(id) | ||
| 51 | } | ||
| 52 | |||
| 53 | // normLang returns the mapped langID of id according to mapping m. | ||
| 54 | func normLang(id Language) (Language, AliasType) { | ||
| 55 | k := sort.Search(len(AliasMap), func(i int) bool { | ||
| 56 | return AliasMap[i].From >= uint16(id) | ||
| 57 | }) | ||
| 58 | if k < len(AliasMap) && AliasMap[k].From == uint16(id) { | ||
| 59 | return Language(AliasMap[k].To), AliasTypes[k] | ||
| 60 | } | ||
| 61 | return id, AliasTypeUnknown | ||
| 62 | } | ||
| 63 | |||
| 64 | // getLangISO2 returns the langID for the given 2-letter ISO language code | ||
| 65 | // or unknownLang if this does not exist. | ||
| 66 | func getLangISO2(s []byte) (Language, error) { | ||
| 67 | if !tag.FixCase("zz", s) { | ||
| 68 | return 0, ErrSyntax | ||
| 69 | } | ||
| 70 | if i := lang.Index(s); i != -1 && lang.Elem(i)[3] != 0 { | ||
| 71 | return Language(i), nil | ||
| 72 | } | ||
| 73 | return 0, NewValueError(s) | ||
| 74 | } | ||
| 75 | |||
| 76 | const base = 'z' - 'a' + 1 | ||
| 77 | |||
| 78 | func strToInt(s []byte) uint { | ||
| 79 | v := uint(0) | ||
| 80 | for i := 0; i < len(s); i++ { | ||
| 81 | v *= base | ||
| 82 | v += uint(s[i] - 'a') | ||
| 83 | } | ||
| 84 | return v | ||
| 85 | } | ||
| 86 | |||
| 87 | // converts the given integer to the original ASCII string passed to strToInt. | ||
| 88 | // len(s) must match the number of characters obtained. | ||
| 89 | func intToStr(v uint, s []byte) { | ||
| 90 | for i := len(s) - 1; i >= 0; i-- { | ||
| 91 | s[i] = byte(v%base) + 'a' | ||
| 92 | v /= base | ||
| 93 | } | ||
| 94 | } | ||
| 95 | |||
| 96 | // getLangISO3 returns the langID for the given 3-letter ISO language code | ||
| 97 | // or unknownLang if this does not exist. | ||
| 98 | func getLangISO3(s []byte) (Language, error) { | ||
| 99 | if tag.FixCase("und", s) { | ||
| 100 | // first try to match canonical 3-letter entries | ||
| 101 | for i := lang.Index(s[:2]); i != -1; i = lang.Next(s[:2], i) { | ||
| 102 | if e := lang.Elem(i); e[3] == 0 && e[2] == s[2] { | ||
| 103 | // We treat "und" as special and always translate it to "unspecified". | ||
| 104 | // Note that ZZ and Zzzz are private use and are not treated as | ||
| 105 | // unspecified by default. | ||
| 106 | id := Language(i) | ||
| 107 | if id == nonCanonicalUnd { | ||
| 108 | return 0, nil | ||
| 109 | } | ||
| 110 | return id, nil | ||
| 111 | } | ||
| 112 | } | ||
| 113 | if i := altLangISO3.Index(s); i != -1 { | ||
| 114 | return Language(altLangIndex[altLangISO3.Elem(i)[3]]), nil | ||
| 115 | } | ||
| 116 | n := strToInt(s) | ||
| 117 | if langNoIndex[n/8]&(1<<(n%8)) != 0 { | ||
| 118 | return Language(n) + langNoIndexOffset, nil | ||
| 119 | } | ||
| 120 | // Check for non-canonical uses of ISO3. | ||
| 121 | for i := lang.Index(s[:1]); i != -1; i = lang.Next(s[:1], i) { | ||
| 122 | if e := lang.Elem(i); e[2] == s[1] && e[3] == s[2] { | ||
| 123 | return Language(i), nil | ||
| 124 | } | ||
| 125 | } | ||
| 126 | return 0, NewValueError(s) | ||
| 127 | } | ||
| 128 | return 0, ErrSyntax | ||
| 129 | } | ||
| 130 | |||
| 131 | // StringToBuf writes the string to b and returns the number of bytes | ||
| 132 | // written. cap(b) must be >= 3. | ||
| 133 | func (id Language) StringToBuf(b []byte) int { | ||
| 134 | if id >= langNoIndexOffset { | ||
| 135 | intToStr(uint(id)-langNoIndexOffset, b[:3]) | ||
| 136 | return 3 | ||
| 137 | } else if id == 0 { | ||
| 138 | return copy(b, "und") | ||
| 139 | } | ||
| 140 | l := lang[id<<2:] | ||
| 141 | if l[3] == 0 { | ||
| 142 | return copy(b, l[:3]) | ||
| 143 | } | ||
| 144 | return copy(b, l[:2]) | ||
| 145 | } | ||
| 146 | |||
| 147 | // String returns the BCP 47 representation of the langID. | ||
| 148 | // Use b as variable name, instead of id, to ensure the variable | ||
| 149 | // used is consistent with that of Base in which this type is embedded. | ||
| 150 | func (b Language) String() string { | ||
| 151 | if b == 0 { | ||
| 152 | return "und" | ||
| 153 | } else if b >= langNoIndexOffset { | ||
| 154 | b -= langNoIndexOffset | ||
| 155 | buf := [3]byte{} | ||
| 156 | intToStr(uint(b), buf[:]) | ||
| 157 | return string(buf[:]) | ||
| 158 | } | ||
| 159 | l := lang.Elem(int(b)) | ||
| 160 | if l[3] == 0 { | ||
| 161 | return l[:3] | ||
| 162 | } | ||
| 163 | return l[:2] | ||
| 164 | } | ||
| 165 | |||
| 166 | // ISO3 returns the ISO 639-3 language code. | ||
| 167 | func (b Language) ISO3() string { | ||
| 168 | if b == 0 || b >= langNoIndexOffset { | ||
| 169 | return b.String() | ||
| 170 | } | ||
| 171 | l := lang.Elem(int(b)) | ||
| 172 | if l[3] == 0 { | ||
| 173 | return l[:3] | ||
| 174 | } else if l[2] == 0 { | ||
| 175 | return altLangISO3.Elem(int(l[3]))[:3] | ||
| 176 | } | ||
| 177 | // This allocation will only happen for 3-letter ISO codes | ||
| 178 | // that are non-canonical BCP 47 language identifiers. | ||
| 179 | return l[0:1] + l[2:4] | ||
| 180 | } | ||
| 181 | |||
| 182 | // IsPrivateUse reports whether this language code is reserved for private use. | ||
| 183 | func (b Language) IsPrivateUse() bool { | ||
| 184 | return langPrivateStart <= b && b <= langPrivateEnd | ||
| 185 | } | ||
| 186 | |||
| 187 | // SuppressScript returns the script marked as SuppressScript in the IANA | ||
| 188 | // language tag repository, or 0 if there is no such script. | ||
| 189 | func (b Language) SuppressScript() Script { | ||
| 190 | if b < langNoIndexOffset { | ||
| 191 | return Script(suppressScript[b]) | ||
| 192 | } | ||
| 193 | return 0 | ||
| 194 | } | ||
| 195 | |||
| 196 | type Region uint16 | ||
| 197 | |||
| 198 | // getRegionID returns the region id for s if s is a valid 2-letter region code | ||
| 199 | // or unknownRegion. | ||
| 200 | func getRegionID(s []byte) (Region, error) { | ||
| 201 | if len(s) == 3 { | ||
| 202 | if isAlpha(s[0]) { | ||
| 203 | return getRegionISO3(s) | ||
| 204 | } | ||
| 205 | if i, err := strconv.ParseUint(string(s), 10, 10); err == nil { | ||
| 206 | return getRegionM49(int(i)) | ||
| 207 | } | ||
| 208 | } | ||
| 209 | return getRegionISO2(s) | ||
| 210 | } | ||
| 211 | |||
| 212 | // getRegionISO2 returns the regionID for the given 2-letter ISO country code | ||
| 213 | // or unknownRegion if this does not exist. | ||
| 214 | func getRegionISO2(s []byte) (Region, error) { | ||
| 215 | i, err := findIndex(regionISO, s, "ZZ") | ||
| 216 | if err != nil { | ||
| 217 | return 0, err | ||
| 218 | } | ||
| 219 | return Region(i) + isoRegionOffset, nil | ||
| 220 | } | ||
| 221 | |||
| 222 | // getRegionISO3 returns the regionID for the given 3-letter ISO country code | ||
| 223 | // or unknownRegion if this does not exist. | ||
| 224 | func getRegionISO3(s []byte) (Region, error) { | ||
| 225 | if tag.FixCase("ZZZ", s) { | ||
| 226 | for i := regionISO.Index(s[:1]); i != -1; i = regionISO.Next(s[:1], i) { | ||
| 227 | if e := regionISO.Elem(i); e[2] == s[1] && e[3] == s[2] { | ||
| 228 | return Region(i) + isoRegionOffset, nil | ||
| 229 | } | ||
| 230 | } | ||
| 231 | for i := 0; i < len(altRegionISO3); i += 3 { | ||
| 232 | if tag.Compare(altRegionISO3[i:i+3], s) == 0 { | ||
| 233 | return Region(altRegionIDs[i/3]), nil | ||
| 234 | } | ||
| 235 | } | ||
| 236 | return 0, NewValueError(s) | ||
| 237 | } | ||
| 238 | return 0, ErrSyntax | ||
| 239 | } | ||
| 240 | |||
| 241 | func getRegionM49(n int) (Region, error) { | ||
| 242 | if 0 < n && n <= 999 { | ||
| 243 | const ( | ||
| 244 | searchBits = 7 | ||
| 245 | regionBits = 9 | ||
| 246 | regionMask = 1<<regionBits - 1 | ||
| 247 | ) | ||
| 248 | idx := n >> searchBits | ||
| 249 | buf := fromM49[m49Index[idx]:m49Index[idx+1]] | ||
| 250 | val := uint16(n) << regionBits // we rely on bits shifting out | ||
| 251 | i := sort.Search(len(buf), func(i int) bool { | ||
| 252 | return buf[i] >= val | ||
| 253 | }) | ||
| 254 | if r := fromM49[int(m49Index[idx])+i]; r&^regionMask == val { | ||
| 255 | return Region(r & regionMask), nil | ||
| 256 | } | ||
| 257 | } | ||
| 258 | var e ValueError | ||
| 259 | fmt.Fprint(bytes.NewBuffer([]byte(e.v[:])), n) | ||
| 260 | return 0, e | ||
| 261 | } | ||
| 262 | |||
| 263 | // normRegion returns a region if r is deprecated or 0 otherwise. | ||
| 264 | // TODO: consider supporting BYS (-> BLR), CSK (-> 200 or CZ), PHI (-> PHL) and AFI (-> DJ). | ||
| 265 | // TODO: consider mapping split up regions to new most populous one (like CLDR). | ||
| 266 | func normRegion(r Region) Region { | ||
| 267 | m := regionOldMap | ||
| 268 | k := sort.Search(len(m), func(i int) bool { | ||
| 269 | return m[i].From >= uint16(r) | ||
| 270 | }) | ||
| 271 | if k < len(m) && m[k].From == uint16(r) { | ||
| 272 | return Region(m[k].To) | ||
| 273 | } | ||
| 274 | return 0 | ||
| 275 | } | ||
| 276 | |||
| 277 | const ( | ||
| 278 | iso3166UserAssigned = 1 << iota | ||
| 279 | ccTLD | ||
| 280 | bcp47Region | ||
| 281 | ) | ||
| 282 | |||
| 283 | func (r Region) typ() byte { | ||
| 284 | return regionTypes[r] | ||
| 285 | } | ||
| 286 | |||
| 287 | // String returns the BCP 47 representation for the region. | ||
| 288 | // It returns "ZZ" for an unspecified region. | ||
| 289 | func (r Region) String() string { | ||
| 290 | if r < isoRegionOffset { | ||
| 291 | if r == 0 { | ||
| 292 | return "ZZ" | ||
| 293 | } | ||
| 294 | return fmt.Sprintf("%03d", r.M49()) | ||
| 295 | } | ||
| 296 | r -= isoRegionOffset | ||
| 297 | return regionISO.Elem(int(r))[:2] | ||
| 298 | } | ||
| 299 | |||
| 300 | // ISO3 returns the 3-letter ISO code of r. | ||
| 301 | // Note that not all regions have a 3-letter ISO code. | ||
| 302 | // In such cases this method returns "ZZZ". | ||
| 303 | func (r Region) ISO3() string { | ||
| 304 | if r < isoRegionOffset { | ||
| 305 | return "ZZZ" | ||
| 306 | } | ||
| 307 | r -= isoRegionOffset | ||
| 308 | reg := regionISO.Elem(int(r)) | ||
| 309 | switch reg[2] { | ||
| 310 | case 0: | ||
| 311 | return altRegionISO3[reg[3]:][:3] | ||
| 312 | case ' ': | ||
| 313 | return "ZZZ" | ||
| 314 | } | ||
| 315 | return reg[0:1] + reg[2:4] | ||
| 316 | } | ||
| 317 | |||
| 318 | // M49 returns the UN M.49 encoding of r, or 0 if this encoding | ||
| 319 | // is not defined for r. | ||
| 320 | func (r Region) M49() int { | ||
| 321 | return int(m49[r]) | ||
| 322 | } | ||
| 323 | |||
| 324 | // IsPrivateUse reports whether r has the ISO 3166 User-assigned status. This | ||
| 325 | // may include private-use tags that are assigned by CLDR and used in this | ||
| 326 | // implementation. So IsPrivateUse and IsCountry can be simultaneously true. | ||
| 327 | func (r Region) IsPrivateUse() bool { | ||
| 328 | return r.typ()&iso3166UserAssigned != 0 | ||
| 329 | } | ||
| 330 | |||
| 331 | type Script uint16 | ||
| 332 | |||
| 333 | // getScriptID returns the script id for string s. It assumes that s | ||
| 334 | // is of the format [A-Z][a-z]{3}. | ||
| 335 | func getScriptID(idx tag.Index, s []byte) (Script, error) { | ||
| 336 | i, err := findIndex(idx, s, "Zzzz") | ||
| 337 | return Script(i), err | ||
| 338 | } | ||
| 339 | |||
| 340 | // String returns the script code in title case. | ||
| 341 | // It returns "Zzzz" for an unspecified script. | ||
| 342 | func (s Script) String() string { | ||
| 343 | if s == 0 { | ||
| 344 | return "Zzzz" | ||
| 345 | } | ||
| 346 | return script.Elem(int(s)) | ||
| 347 | } | ||
| 348 | |||
| 349 | // IsPrivateUse reports whether this script code is reserved for private use. | ||
| 350 | func (s Script) IsPrivateUse() bool { | ||
| 351 | return _Qaaa <= s && s <= _Qabx | ||
| 352 | } | ||
| 353 | |||
| 354 | const ( | ||
| 355 | maxAltTaglen = len("en-US-POSIX") | ||
| 356 | maxLen = maxAltTaglen | ||
| 357 | ) | ||
| 358 | |||
| 359 | var ( | ||
| 360 | // grandfatheredMap holds a mapping from legacy and grandfathered tags to | ||
| 361 | // their base language or index to more elaborate tag. | ||
| 362 | grandfatheredMap = map[[maxLen]byte]int16{ | ||
| 363 | [maxLen]byte{'a', 'r', 't', '-', 'l', 'o', 'j', 'b', 'a', 'n'}: _jbo, // art-lojban | ||
| 364 | [maxLen]byte{'i', '-', 'a', 'm', 'i'}: _ami, // i-ami | ||
| 365 | [maxLen]byte{'i', '-', 'b', 'n', 'n'}: _bnn, // i-bnn | ||
| 366 | [maxLen]byte{'i', '-', 'h', 'a', 'k'}: _hak, // i-hak | ||
| 367 | [maxLen]byte{'i', '-', 'k', 'l', 'i', 'n', 'g', 'o', 'n'}: _tlh, // i-klingon | ||
| 368 | [maxLen]byte{'i', '-', 'l', 'u', 'x'}: _lb, // i-lux | ||
| 369 | [maxLen]byte{'i', '-', 'n', 'a', 'v', 'a', 'j', 'o'}: _nv, // i-navajo | ||
| 370 | [maxLen]byte{'i', '-', 'p', 'w', 'n'}: _pwn, // i-pwn | ||
| 371 | [maxLen]byte{'i', '-', 't', 'a', 'o'}: _tao, // i-tao | ||
| 372 | [maxLen]byte{'i', '-', 't', 'a', 'y'}: _tay, // i-tay | ||
| 373 | [maxLen]byte{'i', '-', 't', 's', 'u'}: _tsu, // i-tsu | ||
| 374 | [maxLen]byte{'n', 'o', '-', 'b', 'o', 'k'}: _nb, // no-bok | ||
| 375 | [maxLen]byte{'n', 'o', '-', 'n', 'y', 'n'}: _nn, // no-nyn | ||
| 376 | [maxLen]byte{'s', 'g', 'n', '-', 'b', 'e', '-', 'f', 'r'}: _sfb, // sgn-BE-FR | ||
| 377 | [maxLen]byte{'s', 'g', 'n', '-', 'b', 'e', '-', 'n', 'l'}: _vgt, // sgn-BE-NL | ||
| 378 | [maxLen]byte{'s', 'g', 'n', '-', 'c', 'h', '-', 'd', 'e'}: _sgg, // sgn-CH-DE | ||
| 379 | [maxLen]byte{'z', 'h', '-', 'g', 'u', 'o', 'y', 'u'}: _cmn, // zh-guoyu | ||
| 380 | [maxLen]byte{'z', 'h', '-', 'h', 'a', 'k', 'k', 'a'}: _hak, // zh-hakka | ||
| 381 | [maxLen]byte{'z', 'h', '-', 'm', 'i', 'n', '-', 'n', 'a', 'n'}: _nan, // zh-min-nan | ||
| 382 | [maxLen]byte{'z', 'h', '-', 'x', 'i', 'a', 'n', 'g'}: _hsn, // zh-xiang | ||
| 383 | |||
| 384 | // Grandfathered tags with no modern replacement will be converted as | ||
| 385 | // follows: | ||
| 386 | [maxLen]byte{'c', 'e', 'l', '-', 'g', 'a', 'u', 'l', 'i', 's', 'h'}: -1, // cel-gaulish | ||
| 387 | [maxLen]byte{'e', 'n', '-', 'g', 'b', '-', 'o', 'e', 'd'}: -2, // en-GB-oed | ||
| 388 | [maxLen]byte{'i', '-', 'd', 'e', 'f', 'a', 'u', 'l', 't'}: -3, // i-default | ||
| 389 | [maxLen]byte{'i', '-', 'e', 'n', 'o', 'c', 'h', 'i', 'a', 'n'}: -4, // i-enochian | ||
| 390 | [maxLen]byte{'i', '-', 'm', 'i', 'n', 'g', 'o'}: -5, // i-mingo | ||
| 391 | [maxLen]byte{'z', 'h', '-', 'm', 'i', 'n'}: -6, // zh-min | ||
| 392 | |||
| 393 | // CLDR-specific tag. | ||
| 394 | [maxLen]byte{'r', 'o', 'o', 't'}: 0, // root | ||
| 395 | [maxLen]byte{'e', 'n', '-', 'u', 's', '-', 'p', 'o', 's', 'i', 'x'}: -7, // en_US_POSIX" | ||
| 396 | } | ||
| 397 | |||
| 398 | altTagIndex = [...]uint8{0, 17, 31, 45, 61, 74, 86, 102} | ||
| 399 | |||
| 400 | altTags = "xtg-x-cel-gaulishen-GB-oxendicten-x-i-defaultund-x-i-enochiansee-x-i-mingonan-x-zh-minen-US-u-va-posix" | ||
| 401 | ) | ||
| 402 | |||
| 403 | func grandfathered(s [maxAltTaglen]byte) (t Tag, ok bool) { | ||
| 404 | if v, ok := grandfatheredMap[s]; ok { | ||
| 405 | if v < 0 { | ||
| 406 | return Make(altTags[altTagIndex[-v-1]:altTagIndex[-v]]), true | ||
| 407 | } | ||
| 408 | t.LangID = Language(v) | ||
| 409 | return t, true | ||
| 410 | } | ||
| 411 | return t, false | ||
| 412 | } | ||
diff --git a/vendor/golang.org/x/text/internal/language/match.go b/vendor/golang.org/x/text/internal/language/match.go new file mode 100644 index 0000000..75a2dbc --- /dev/null +++ b/vendor/golang.org/x/text/internal/language/match.go | |||
| @@ -0,0 +1,226 @@ | |||
| 1 | // Copyright 2013 The Go Authors. All rights reserved. | ||
| 2 | // Use of this source code is governed by a BSD-style | ||
| 3 | // license that can be found in the LICENSE file. | ||
| 4 | |||
| 5 | package language | ||
| 6 | |||
| 7 | import "errors" | ||
| 8 | |||
| 9 | type scriptRegionFlags uint8 | ||
| 10 | |||
| 11 | const ( | ||
| 12 | isList = 1 << iota | ||
| 13 | scriptInFrom | ||
| 14 | regionInFrom | ||
| 15 | ) | ||
| 16 | |||
| 17 | func (t *Tag) setUndefinedLang(id Language) { | ||
| 18 | if t.LangID == 0 { | ||
| 19 | t.LangID = id | ||
| 20 | } | ||
| 21 | } | ||
| 22 | |||
| 23 | func (t *Tag) setUndefinedScript(id Script) { | ||
| 24 | if t.ScriptID == 0 { | ||
| 25 | t.ScriptID = id | ||
| 26 | } | ||
| 27 | } | ||
| 28 | |||
| 29 | func (t *Tag) setUndefinedRegion(id Region) { | ||
| 30 | if t.RegionID == 0 || t.RegionID.Contains(id) { | ||
| 31 | t.RegionID = id | ||
| 32 | } | ||
| 33 | } | ||
| 34 | |||
| 35 | // ErrMissingLikelyTagsData indicates no information was available | ||
| 36 | // to compute likely values of missing tags. | ||
| 37 | var ErrMissingLikelyTagsData = errors.New("missing likely tags data") | ||
| 38 | |||
| 39 | // addLikelySubtags sets subtags to their most likely value, given the locale. | ||
| 40 | // In most cases this means setting fields for unknown values, but in some | ||
| 41 | // cases it may alter a value. It returns an ErrMissingLikelyTagsData error | ||
| 42 | // if the given locale cannot be expanded. | ||
| 43 | func (t Tag) addLikelySubtags() (Tag, error) { | ||
| 44 | id, err := addTags(t) | ||
| 45 | if err != nil { | ||
| 46 | return t, err | ||
| 47 | } else if id.equalTags(t) { | ||
| 48 | return t, nil | ||
| 49 | } | ||
| 50 | id.RemakeString() | ||
| 51 | return id, nil | ||
| 52 | } | ||
| 53 | |||
| 54 | // specializeRegion attempts to specialize a group region. | ||
| 55 | func specializeRegion(t *Tag) bool { | ||
| 56 | if i := regionInclusion[t.RegionID]; i < nRegionGroups { | ||
| 57 | x := likelyRegionGroup[i] | ||
| 58 | if Language(x.lang) == t.LangID && Script(x.script) == t.ScriptID { | ||
| 59 | t.RegionID = Region(x.region) | ||
| 60 | } | ||
| 61 | return true | ||
| 62 | } | ||
| 63 | return false | ||
| 64 | } | ||
| 65 | |||
| 66 | // Maximize returns a new tag with missing tags filled in. | ||
| 67 | func (t Tag) Maximize() (Tag, error) { | ||
| 68 | return addTags(t) | ||
| 69 | } | ||
| 70 | |||
| 71 | func addTags(t Tag) (Tag, error) { | ||
| 72 | // We leave private use identifiers alone. | ||
| 73 | if t.IsPrivateUse() { | ||
| 74 | return t, nil | ||
| 75 | } | ||
| 76 | if t.ScriptID != 0 && t.RegionID != 0 { | ||
| 77 | if t.LangID != 0 { | ||
| 78 | // already fully specified | ||
| 79 | specializeRegion(&t) | ||
| 80 | return t, nil | ||
| 81 | } | ||
| 82 | // Search matches for und-script-region. Note that for these cases | ||
| 83 | // region will never be a group so there is no need to check for this. | ||
| 84 | list := likelyRegion[t.RegionID : t.RegionID+1] | ||
| 85 | if x := list[0]; x.flags&isList != 0 { | ||
| 86 | list = likelyRegionList[x.lang : x.lang+uint16(x.script)] | ||
| 87 | } | ||
| 88 | for _, x := range list { | ||
| 89 | // Deviating from the spec. See match_test.go for details. | ||
| 90 | if Script(x.script) == t.ScriptID { | ||
| 91 | t.setUndefinedLang(Language(x.lang)) | ||
| 92 | return t, nil | ||
| 93 | } | ||
| 94 | } | ||
| 95 | } | ||
| 96 | if t.LangID != 0 { | ||
| 97 | // Search matches for lang-script and lang-region, where lang != und. | ||
| 98 | if t.LangID < langNoIndexOffset { | ||
| 99 | x := likelyLang[t.LangID] | ||
| 100 | if x.flags&isList != 0 { | ||
| 101 | list := likelyLangList[x.region : x.region+uint16(x.script)] | ||
| 102 | if t.ScriptID != 0 { | ||
| 103 | for _, x := range list { | ||
| 104 | if Script(x.script) == t.ScriptID && x.flags&scriptInFrom != 0 { | ||
| 105 | t.setUndefinedRegion(Region(x.region)) | ||
| 106 | return t, nil | ||
| 107 | } | ||
| 108 | } | ||
| 109 | } else if t.RegionID != 0 { | ||
| 110 | count := 0 | ||
| 111 | goodScript := true | ||
| 112 | tt := t | ||
| 113 | for _, x := range list { | ||
| 114 | // We visit all entries for which the script was not | ||
| 115 | // defined, including the ones where the region was not | ||
| 116 | // defined. This allows for proper disambiguation within | ||
| 117 | // regions. | ||
| 118 | if x.flags&scriptInFrom == 0 && t.RegionID.Contains(Region(x.region)) { | ||
| 119 | tt.RegionID = Region(x.region) | ||
| 120 | tt.setUndefinedScript(Script(x.script)) | ||
| 121 | goodScript = goodScript && tt.ScriptID == Script(x.script) | ||
| 122 | count++ | ||
| 123 | } | ||
| 124 | } | ||
| 125 | if count == 1 { | ||
| 126 | return tt, nil | ||
| 127 | } | ||
| 128 | // Even if we fail to find a unique Region, we might have | ||
| 129 | // an unambiguous script. | ||
| 130 | if goodScript { | ||
| 131 | t.ScriptID = tt.ScriptID | ||
| 132 | } | ||
| 133 | } | ||
| 134 | } | ||
| 135 | } | ||
| 136 | } else { | ||
| 137 | // Search matches for und-script. | ||
| 138 | if t.ScriptID != 0 { | ||
| 139 | x := likelyScript[t.ScriptID] | ||
| 140 | if x.region != 0 { | ||
| 141 | t.setUndefinedRegion(Region(x.region)) | ||
| 142 | t.setUndefinedLang(Language(x.lang)) | ||
| 143 | return t, nil | ||
| 144 | } | ||
| 145 | } | ||
| 146 | // Search matches for und-region. If und-script-region exists, it would | ||
| 147 | // have been found earlier. | ||
| 148 | if t.RegionID != 0 { | ||
| 149 | if i := regionInclusion[t.RegionID]; i < nRegionGroups { | ||
| 150 | x := likelyRegionGroup[i] | ||
| 151 | if x.region != 0 { | ||
| 152 | t.setUndefinedLang(Language(x.lang)) | ||
| 153 | t.setUndefinedScript(Script(x.script)) | ||
| 154 | t.RegionID = Region(x.region) | ||
| 155 | } | ||
| 156 | } else { | ||
| 157 | x := likelyRegion[t.RegionID] | ||
| 158 | if x.flags&isList != 0 { | ||
| 159 | x = likelyRegionList[x.lang] | ||
| 160 | } | ||
| 161 | if x.script != 0 && x.flags != scriptInFrom { | ||
| 162 | t.setUndefinedLang(Language(x.lang)) | ||
| 163 | t.setUndefinedScript(Script(x.script)) | ||
| 164 | return t, nil | ||
| 165 | } | ||
| 166 | } | ||
| 167 | } | ||
| 168 | } | ||
| 169 | |||
| 170 | // Search matches for lang. | ||
| 171 | if t.LangID < langNoIndexOffset { | ||
| 172 | x := likelyLang[t.LangID] | ||
| 173 | if x.flags&isList != 0 { | ||
| 174 | x = likelyLangList[x.region] | ||
| 175 | } | ||
| 176 | if x.region != 0 { | ||
| 177 | t.setUndefinedScript(Script(x.script)) | ||
| 178 | t.setUndefinedRegion(Region(x.region)) | ||
| 179 | } | ||
| 180 | specializeRegion(&t) | ||
| 181 | if t.LangID == 0 { | ||
| 182 | t.LangID = _en // default language | ||
| 183 | } | ||
| 184 | return t, nil | ||
| 185 | } | ||
| 186 | return t, ErrMissingLikelyTagsData | ||
| 187 | } | ||
| 188 | |||
| 189 | func (t *Tag) setTagsFrom(id Tag) { | ||
| 190 | t.LangID = id.LangID | ||
| 191 | t.ScriptID = id.ScriptID | ||
| 192 | t.RegionID = id.RegionID | ||
| 193 | } | ||
| 194 | |||
| 195 | // minimize removes the region or script subtags from t such that | ||
| 196 | // t.addLikelySubtags() == t.minimize().addLikelySubtags(). | ||
| 197 | func (t Tag) minimize() (Tag, error) { | ||
| 198 | t, err := minimizeTags(t) | ||
| 199 | if err != nil { | ||
| 200 | return t, err | ||
| 201 | } | ||
| 202 | t.RemakeString() | ||
| 203 | return t, nil | ||
| 204 | } | ||
| 205 | |||
| 206 | // minimizeTags mimics the behavior of the ICU 51 C implementation. | ||
| 207 | func minimizeTags(t Tag) (Tag, error) { | ||
| 208 | if t.equalTags(Und) { | ||
| 209 | return t, nil | ||
| 210 | } | ||
| 211 | max, err := addTags(t) | ||
| 212 | if err != nil { | ||
| 213 | return t, err | ||
| 214 | } | ||
| 215 | for _, id := range [...]Tag{ | ||
| 216 | {LangID: t.LangID}, | ||
| 217 | {LangID: t.LangID, RegionID: t.RegionID}, | ||
| 218 | {LangID: t.LangID, ScriptID: t.ScriptID}, | ||
| 219 | } { | ||
| 220 | if x, err := addTags(id); err == nil && max.equalTags(x) { | ||
| 221 | t.setTagsFrom(id) | ||
| 222 | break | ||
| 223 | } | ||
| 224 | } | ||
| 225 | return t, nil | ||
| 226 | } | ||
diff --git a/vendor/golang.org/x/text/internal/language/parse.go b/vendor/golang.org/x/text/internal/language/parse.go new file mode 100644 index 0000000..aad1e0a --- /dev/null +++ b/vendor/golang.org/x/text/internal/language/parse.go | |||
| @@ -0,0 +1,608 @@ | |||
| 1 | // Copyright 2013 The Go Authors. All rights reserved. | ||
| 2 | // Use of this source code is governed by a BSD-style | ||
| 3 | // license that can be found in the LICENSE file. | ||
| 4 | |||
| 5 | package language | ||
| 6 | |||
| 7 | import ( | ||
| 8 | "bytes" | ||
| 9 | "errors" | ||
| 10 | "fmt" | ||
| 11 | "sort" | ||
| 12 | |||
| 13 | "golang.org/x/text/internal/tag" | ||
| 14 | ) | ||
| 15 | |||
| 16 | // isAlpha returns true if the byte is not a digit. | ||
| 17 | // b must be an ASCII letter or digit. | ||
| 18 | func isAlpha(b byte) bool { | ||
| 19 | return b > '9' | ||
| 20 | } | ||
| 21 | |||
| 22 | // isAlphaNum returns true if the string contains only ASCII letters or digits. | ||
| 23 | func isAlphaNum(s []byte) bool { | ||
| 24 | for _, c := range s { | ||
| 25 | if !('a' <= c && c <= 'z' || 'A' <= c && c <= 'Z' || '0' <= c && c <= '9') { | ||
| 26 | return false | ||
| 27 | } | ||
| 28 | } | ||
| 29 | return true | ||
| 30 | } | ||
| 31 | |||
| 32 | // ErrSyntax is returned by any of the parsing functions when the | ||
| 33 | // input is not well-formed, according to BCP 47. | ||
| 34 | // TODO: return the position at which the syntax error occurred? | ||
| 35 | var ErrSyntax = errors.New("language: tag is not well-formed") | ||
| 36 | |||
| 37 | // ErrDuplicateKey is returned when a tag contains the same key twice with | ||
| 38 | // different values in the -u section. | ||
| 39 | var ErrDuplicateKey = errors.New("language: different values for same key in -u extension") | ||
| 40 | |||
| 41 | // ValueError is returned by any of the parsing functions when the | ||
| 42 | // input is well-formed but the respective subtag is not recognized | ||
| 43 | // as a valid value. | ||
| 44 | type ValueError struct { | ||
| 45 | v [8]byte | ||
| 46 | } | ||
| 47 | |||
| 48 | // NewValueError creates a new ValueError. | ||
| 49 | func NewValueError(tag []byte) ValueError { | ||
| 50 | var e ValueError | ||
| 51 | copy(e.v[:], tag) | ||
| 52 | return e | ||
| 53 | } | ||
| 54 | |||
| 55 | func (e ValueError) tag() []byte { | ||
| 56 | n := bytes.IndexByte(e.v[:], 0) | ||
| 57 | if n == -1 { | ||
| 58 | n = 8 | ||
| 59 | } | ||
| 60 | return e.v[:n] | ||
| 61 | } | ||
| 62 | |||
| 63 | // Error implements the error interface. | ||
| 64 | func (e ValueError) Error() string { | ||
| 65 | return fmt.Sprintf("language: subtag %q is well-formed but unknown", e.tag()) | ||
| 66 | } | ||
| 67 | |||
| 68 | // Subtag returns the subtag for which the error occurred. | ||
| 69 | func (e ValueError) Subtag() string { | ||
| 70 | return string(e.tag()) | ||
| 71 | } | ||
| 72 | |||
| 73 | // scanner is used to scan BCP 47 tokens, which are separated by _ or -. | ||
| 74 | type scanner struct { | ||
| 75 | b []byte | ||
| 76 | bytes [max99thPercentileSize]byte | ||
| 77 | token []byte | ||
| 78 | start int // start position of the current token | ||
| 79 | end int // end position of the current token | ||
| 80 | next int // next point for scan | ||
| 81 | err error | ||
| 82 | done bool | ||
| 83 | } | ||
| 84 | |||
| 85 | func makeScannerString(s string) scanner { | ||
| 86 | scan := scanner{} | ||
| 87 | if len(s) <= len(scan.bytes) { | ||
| 88 | scan.b = scan.bytes[:copy(scan.bytes[:], s)] | ||
| 89 | } else { | ||
| 90 | scan.b = []byte(s) | ||
| 91 | } | ||
| 92 | scan.init() | ||
| 93 | return scan | ||
| 94 | } | ||
| 95 | |||
| 96 | // makeScanner returns a scanner using b as the input buffer. | ||
| 97 | // b is not copied and may be modified by the scanner routines. | ||
| 98 | func makeScanner(b []byte) scanner { | ||
| 99 | scan := scanner{b: b} | ||
| 100 | scan.init() | ||
| 101 | return scan | ||
| 102 | } | ||
| 103 | |||
| 104 | func (s *scanner) init() { | ||
| 105 | for i, c := range s.b { | ||
| 106 | if c == '_' { | ||
| 107 | s.b[i] = '-' | ||
| 108 | } | ||
| 109 | } | ||
| 110 | s.scan() | ||
| 111 | } | ||
| 112 | |||
| 113 | // restToLower converts the string between start and end to lower case. | ||
| 114 | func (s *scanner) toLower(start, end int) { | ||
| 115 | for i := start; i < end; i++ { | ||
| 116 | c := s.b[i] | ||
| 117 | if 'A' <= c && c <= 'Z' { | ||
| 118 | s.b[i] += 'a' - 'A' | ||
| 119 | } | ||
| 120 | } | ||
| 121 | } | ||
| 122 | |||
| 123 | func (s *scanner) setError(e error) { | ||
| 124 | if s.err == nil || (e == ErrSyntax && s.err != ErrSyntax) { | ||
| 125 | s.err = e | ||
| 126 | } | ||
| 127 | } | ||
| 128 | |||
| 129 | // resizeRange shrinks or grows the array at position oldStart such that | ||
| 130 | // a new string of size newSize can fit between oldStart and oldEnd. | ||
| 131 | // Sets the scan point to after the resized range. | ||
| 132 | func (s *scanner) resizeRange(oldStart, oldEnd, newSize int) { | ||
| 133 | s.start = oldStart | ||
| 134 | if end := oldStart + newSize; end != oldEnd { | ||
| 135 | diff := end - oldEnd | ||
| 136 | var b []byte | ||
| 137 | if n := len(s.b) + diff; n > cap(s.b) { | ||
| 138 | b = make([]byte, n) | ||
| 139 | copy(b, s.b[:oldStart]) | ||
| 140 | } else { | ||
| 141 | b = s.b[:n] | ||
| 142 | } | ||
| 143 | copy(b[end:], s.b[oldEnd:]) | ||
| 144 | s.b = b | ||
| 145 | s.next = end + (s.next - s.end) | ||
| 146 | s.end = end | ||
| 147 | } | ||
| 148 | } | ||
| 149 | |||
| 150 | // replace replaces the current token with repl. | ||
| 151 | func (s *scanner) replace(repl string) { | ||
| 152 | s.resizeRange(s.start, s.end, len(repl)) | ||
| 153 | copy(s.b[s.start:], repl) | ||
| 154 | } | ||
| 155 | |||
| 156 | // gobble removes the current token from the input. | ||
| 157 | // Caller must call scan after calling gobble. | ||
| 158 | func (s *scanner) gobble(e error) { | ||
| 159 | s.setError(e) | ||
| 160 | if s.start == 0 { | ||
| 161 | s.b = s.b[:+copy(s.b, s.b[s.next:])] | ||
| 162 | s.end = 0 | ||
| 163 | } else { | ||
| 164 | s.b = s.b[:s.start-1+copy(s.b[s.start-1:], s.b[s.end:])] | ||
| 165 | s.end = s.start - 1 | ||
| 166 | } | ||
| 167 | s.next = s.start | ||
| 168 | } | ||
| 169 | |||
| 170 | // deleteRange removes the given range from s.b before the current token. | ||
| 171 | func (s *scanner) deleteRange(start, end int) { | ||
| 172 | s.b = s.b[:start+copy(s.b[start:], s.b[end:])] | ||
| 173 | diff := end - start | ||
| 174 | s.next -= diff | ||
| 175 | s.start -= diff | ||
| 176 | s.end -= diff | ||
| 177 | } | ||
| 178 | |||
| 179 | // scan parses the next token of a BCP 47 string. Tokens that are larger | ||
| 180 | // than 8 characters or include non-alphanumeric characters result in an error | ||
| 181 | // and are gobbled and removed from the output. | ||
| 182 | // It returns the end position of the last token consumed. | ||
| 183 | func (s *scanner) scan() (end int) { | ||
| 184 | end = s.end | ||
| 185 | s.token = nil | ||
| 186 | for s.start = s.next; s.next < len(s.b); { | ||
| 187 | i := bytes.IndexByte(s.b[s.next:], '-') | ||
| 188 | if i == -1 { | ||
| 189 | s.end = len(s.b) | ||
| 190 | s.next = len(s.b) | ||
| 191 | i = s.end - s.start | ||
| 192 | } else { | ||
| 193 | s.end = s.next + i | ||
| 194 | s.next = s.end + 1 | ||
| 195 | } | ||
| 196 | token := s.b[s.start:s.end] | ||
| 197 | if i < 1 || i > 8 || !isAlphaNum(token) { | ||
| 198 | s.gobble(ErrSyntax) | ||
| 199 | continue | ||
| 200 | } | ||
| 201 | s.token = token | ||
| 202 | return end | ||
| 203 | } | ||
| 204 | if n := len(s.b); n > 0 && s.b[n-1] == '-' { | ||
| 205 | s.setError(ErrSyntax) | ||
| 206 | s.b = s.b[:len(s.b)-1] | ||
| 207 | } | ||
| 208 | s.done = true | ||
| 209 | return end | ||
| 210 | } | ||
| 211 | |||
| 212 | // acceptMinSize parses multiple tokens of the given size or greater. | ||
| 213 | // It returns the end position of the last token consumed. | ||
| 214 | func (s *scanner) acceptMinSize(min int) (end int) { | ||
| 215 | end = s.end | ||
| 216 | s.scan() | ||
| 217 | for ; len(s.token) >= min; s.scan() { | ||
| 218 | end = s.end | ||
| 219 | } | ||
| 220 | return end | ||
| 221 | } | ||
| 222 | |||
| 223 | // Parse parses the given BCP 47 string and returns a valid Tag. If parsing | ||
| 224 | // failed it returns an error and any part of the tag that could be parsed. | ||
| 225 | // If parsing succeeded but an unknown value was found, it returns | ||
| 226 | // ValueError. The Tag returned in this case is just stripped of the unknown | ||
| 227 | // value. All other values are preserved. It accepts tags in the BCP 47 format | ||
| 228 | // and extensions to this standard defined in | ||
| 229 | // https://www.unicode.org/reports/tr35/#Unicode_Language_and_Locale_Identifiers. | ||
| 230 | func Parse(s string) (t Tag, err error) { | ||
| 231 | // TODO: consider supporting old-style locale key-value pairs. | ||
| 232 | if s == "" { | ||
| 233 | return Und, ErrSyntax | ||
| 234 | } | ||
| 235 | defer func() { | ||
| 236 | if recover() != nil { | ||
| 237 | t = Und | ||
| 238 | err = ErrSyntax | ||
| 239 | return | ||
| 240 | } | ||
| 241 | }() | ||
| 242 | if len(s) <= maxAltTaglen { | ||
| 243 | b := [maxAltTaglen]byte{} | ||
| 244 | for i, c := range s { | ||
| 245 | // Generating invalid UTF-8 is okay as it won't match. | ||
| 246 | if 'A' <= c && c <= 'Z' { | ||
| 247 | c += 'a' - 'A' | ||
| 248 | } else if c == '_' { | ||
| 249 | c = '-' | ||
| 250 | } | ||
| 251 | b[i] = byte(c) | ||
| 252 | } | ||
| 253 | if t, ok := grandfathered(b); ok { | ||
| 254 | return t, nil | ||
| 255 | } | ||
| 256 | } | ||
| 257 | scan := makeScannerString(s) | ||
| 258 | return parse(&scan, s) | ||
| 259 | } | ||
| 260 | |||
| 261 | func parse(scan *scanner, s string) (t Tag, err error) { | ||
| 262 | t = Und | ||
| 263 | var end int | ||
| 264 | if n := len(scan.token); n <= 1 { | ||
| 265 | scan.toLower(0, len(scan.b)) | ||
| 266 | if n == 0 || scan.token[0] != 'x' { | ||
| 267 | return t, ErrSyntax | ||
| 268 | } | ||
| 269 | end = parseExtensions(scan) | ||
| 270 | } else if n >= 4 { | ||
| 271 | return Und, ErrSyntax | ||
| 272 | } else { // the usual case | ||
| 273 | t, end = parseTag(scan, true) | ||
| 274 | if n := len(scan.token); n == 1 { | ||
| 275 | t.pExt = uint16(end) | ||
| 276 | end = parseExtensions(scan) | ||
| 277 | } else if end < len(scan.b) { | ||
| 278 | scan.setError(ErrSyntax) | ||
| 279 | scan.b = scan.b[:end] | ||
| 280 | } | ||
| 281 | } | ||
| 282 | if int(t.pVariant) < len(scan.b) { | ||
| 283 | if end < len(s) { | ||
| 284 | s = s[:end] | ||
| 285 | } | ||
| 286 | if len(s) > 0 && tag.Compare(s, scan.b) == 0 { | ||
| 287 | t.str = s | ||
| 288 | } else { | ||
| 289 | t.str = string(scan.b) | ||
| 290 | } | ||
| 291 | } else { | ||
| 292 | t.pVariant, t.pExt = 0, 0 | ||
| 293 | } | ||
| 294 | return t, scan.err | ||
| 295 | } | ||
| 296 | |||
| 297 | // parseTag parses language, script, region and variants. | ||
| 298 | // It returns a Tag and the end position in the input that was parsed. | ||
| 299 | // If doNorm is true, then <lang>-<extlang> will be normalized to <extlang>. | ||
| 300 | func parseTag(scan *scanner, doNorm bool) (t Tag, end int) { | ||
| 301 | var e error | ||
| 302 | // TODO: set an error if an unknown lang, script or region is encountered. | ||
| 303 | t.LangID, e = getLangID(scan.token) | ||
| 304 | scan.setError(e) | ||
| 305 | scan.replace(t.LangID.String()) | ||
| 306 | langStart := scan.start | ||
| 307 | end = scan.scan() | ||
| 308 | for len(scan.token) == 3 && isAlpha(scan.token[0]) { | ||
| 309 | // From http://tools.ietf.org/html/bcp47, <lang>-<extlang> tags are equivalent | ||
| 310 | // to a tag of the form <extlang>. | ||
| 311 | if doNorm { | ||
| 312 | lang, e := getLangID(scan.token) | ||
| 313 | if lang != 0 { | ||
| 314 | t.LangID = lang | ||
| 315 | langStr := lang.String() | ||
| 316 | copy(scan.b[langStart:], langStr) | ||
| 317 | scan.b[langStart+len(langStr)] = '-' | ||
| 318 | scan.start = langStart + len(langStr) + 1 | ||
| 319 | } | ||
| 320 | scan.gobble(e) | ||
| 321 | } | ||
| 322 | end = scan.scan() | ||
| 323 | } | ||
| 324 | if len(scan.token) == 4 && isAlpha(scan.token[0]) { | ||
| 325 | t.ScriptID, e = getScriptID(script, scan.token) | ||
| 326 | if t.ScriptID == 0 { | ||
| 327 | scan.gobble(e) | ||
| 328 | } | ||
| 329 | end = scan.scan() | ||
| 330 | } | ||
| 331 | if n := len(scan.token); n >= 2 && n <= 3 { | ||
| 332 | t.RegionID, e = getRegionID(scan.token) | ||
| 333 | if t.RegionID == 0 { | ||
| 334 | scan.gobble(e) | ||
| 335 | } else { | ||
| 336 | scan.replace(t.RegionID.String()) | ||
| 337 | } | ||
| 338 | end = scan.scan() | ||
| 339 | } | ||
| 340 | scan.toLower(scan.start, len(scan.b)) | ||
| 341 | t.pVariant = byte(end) | ||
| 342 | end = parseVariants(scan, end, t) | ||
| 343 | t.pExt = uint16(end) | ||
| 344 | return t, end | ||
| 345 | } | ||
| 346 | |||
| 347 | var separator = []byte{'-'} | ||
| 348 | |||
| 349 | // parseVariants scans tokens as long as each token is a valid variant string. | ||
| 350 | // Duplicate variants are removed. | ||
| 351 | func parseVariants(scan *scanner, end int, t Tag) int { | ||
| 352 | start := scan.start | ||
| 353 | varIDBuf := [4]uint8{} | ||
| 354 | variantBuf := [4][]byte{} | ||
| 355 | varID := varIDBuf[:0] | ||
| 356 | variant := variantBuf[:0] | ||
| 357 | last := -1 | ||
| 358 | needSort := false | ||
| 359 | for ; len(scan.token) >= 4; scan.scan() { | ||
| 360 | // TODO: measure the impact of needing this conversion and redesign | ||
| 361 | // the data structure if there is an issue. | ||
| 362 | v, ok := variantIndex[string(scan.token)] | ||
| 363 | if !ok { | ||
| 364 | // unknown variant | ||
| 365 | // TODO: allow user-defined variants? | ||
| 366 | scan.gobble(NewValueError(scan.token)) | ||
| 367 | continue | ||
| 368 | } | ||
| 369 | varID = append(varID, v) | ||
| 370 | variant = append(variant, scan.token) | ||
| 371 | if !needSort { | ||
| 372 | if last < int(v) { | ||
| 373 | last = int(v) | ||
| 374 | } else { | ||
| 375 | needSort = true | ||
| 376 | // There is no legal combinations of more than 7 variants | ||
| 377 | // (and this is by no means a useful sequence). | ||
| 378 | const maxVariants = 8 | ||
| 379 | if len(varID) > maxVariants { | ||
| 380 | break | ||
| 381 | } | ||
| 382 | } | ||
| 383 | } | ||
| 384 | end = scan.end | ||
| 385 | } | ||
| 386 | if needSort { | ||
| 387 | sort.Sort(variantsSort{varID, variant}) | ||
| 388 | k, l := 0, -1 | ||
| 389 | for i, v := range varID { | ||
| 390 | w := int(v) | ||
| 391 | if l == w { | ||
| 392 | // Remove duplicates. | ||
| 393 | continue | ||
| 394 | } | ||
| 395 | varID[k] = varID[i] | ||
| 396 | variant[k] = variant[i] | ||
| 397 | k++ | ||
| 398 | l = w | ||
| 399 | } | ||
| 400 | if str := bytes.Join(variant[:k], separator); len(str) == 0 { | ||
| 401 | end = start - 1 | ||
| 402 | } else { | ||
| 403 | scan.resizeRange(start, end, len(str)) | ||
| 404 | copy(scan.b[scan.start:], str) | ||
| 405 | end = scan.end | ||
| 406 | } | ||
| 407 | } | ||
| 408 | return end | ||
| 409 | } | ||
| 410 | |||
| 411 | type variantsSort struct { | ||
| 412 | i []uint8 | ||
| 413 | v [][]byte | ||
| 414 | } | ||
| 415 | |||
| 416 | func (s variantsSort) Len() int { | ||
| 417 | return len(s.i) | ||
| 418 | } | ||
| 419 | |||
| 420 | func (s variantsSort) Swap(i, j int) { | ||
| 421 | s.i[i], s.i[j] = s.i[j], s.i[i] | ||
| 422 | s.v[i], s.v[j] = s.v[j], s.v[i] | ||
| 423 | } | ||
| 424 | |||
| 425 | func (s variantsSort) Less(i, j int) bool { | ||
| 426 | return s.i[i] < s.i[j] | ||
| 427 | } | ||
| 428 | |||
| 429 | type bytesSort struct { | ||
| 430 | b [][]byte | ||
| 431 | n int // first n bytes to compare | ||
| 432 | } | ||
| 433 | |||
| 434 | func (b bytesSort) Len() int { | ||
| 435 | return len(b.b) | ||
| 436 | } | ||
| 437 | |||
| 438 | func (b bytesSort) Swap(i, j int) { | ||
| 439 | b.b[i], b.b[j] = b.b[j], b.b[i] | ||
| 440 | } | ||
| 441 | |||
| 442 | func (b bytesSort) Less(i, j int) bool { | ||
| 443 | for k := 0; k < b.n; k++ { | ||
| 444 | if b.b[i][k] == b.b[j][k] { | ||
| 445 | continue | ||
| 446 | } | ||
| 447 | return b.b[i][k] < b.b[j][k] | ||
| 448 | } | ||
| 449 | return false | ||
| 450 | } | ||
| 451 | |||
| 452 | // parseExtensions parses and normalizes the extensions in the buffer. | ||
| 453 | // It returns the last position of scan.b that is part of any extension. | ||
| 454 | // It also trims scan.b to remove excess parts accordingly. | ||
| 455 | func parseExtensions(scan *scanner) int { | ||
| 456 | start := scan.start | ||
| 457 | exts := [][]byte{} | ||
| 458 | private := []byte{} | ||
| 459 | end := scan.end | ||
| 460 | for len(scan.token) == 1 { | ||
| 461 | extStart := scan.start | ||
| 462 | ext := scan.token[0] | ||
| 463 | end = parseExtension(scan) | ||
| 464 | extension := scan.b[extStart:end] | ||
| 465 | if len(extension) < 3 || (ext != 'x' && len(extension) < 4) { | ||
| 466 | scan.setError(ErrSyntax) | ||
| 467 | end = extStart | ||
| 468 | continue | ||
| 469 | } else if start == extStart && (ext == 'x' || scan.start == len(scan.b)) { | ||
| 470 | scan.b = scan.b[:end] | ||
| 471 | return end | ||
| 472 | } else if ext == 'x' { | ||
| 473 | private = extension | ||
| 474 | break | ||
| 475 | } | ||
| 476 | exts = append(exts, extension) | ||
| 477 | } | ||
| 478 | sort.Sort(bytesSort{exts, 1}) | ||
| 479 | if len(private) > 0 { | ||
| 480 | exts = append(exts, private) | ||
| 481 | } | ||
| 482 | scan.b = scan.b[:start] | ||
| 483 | if len(exts) > 0 { | ||
| 484 | scan.b = append(scan.b, bytes.Join(exts, separator)...) | ||
| 485 | } else if start > 0 { | ||
| 486 | // Strip trailing '-'. | ||
| 487 | scan.b = scan.b[:start-1] | ||
| 488 | } | ||
| 489 | return end | ||
| 490 | } | ||
| 491 | |||
| 492 | // parseExtension parses a single extension and returns the position of | ||
| 493 | // the extension end. | ||
| 494 | func parseExtension(scan *scanner) int { | ||
| 495 | start, end := scan.start, scan.end | ||
| 496 | switch scan.token[0] { | ||
| 497 | case 'u': // https://www.ietf.org/rfc/rfc6067.txt | ||
| 498 | attrStart := end | ||
| 499 | scan.scan() | ||
| 500 | for last := []byte{}; len(scan.token) > 2; scan.scan() { | ||
| 501 | if bytes.Compare(scan.token, last) != -1 { | ||
| 502 | // Attributes are unsorted. Start over from scratch. | ||
| 503 | p := attrStart + 1 | ||
| 504 | scan.next = p | ||
| 505 | attrs := [][]byte{} | ||
| 506 | for scan.scan(); len(scan.token) > 2; scan.scan() { | ||
| 507 | attrs = append(attrs, scan.token) | ||
| 508 | end = scan.end | ||
| 509 | } | ||
| 510 | sort.Sort(bytesSort{attrs, 3}) | ||
| 511 | copy(scan.b[p:], bytes.Join(attrs, separator)) | ||
| 512 | break | ||
| 513 | } | ||
| 514 | last = scan.token | ||
| 515 | end = scan.end | ||
| 516 | } | ||
| 517 | // Scan key-type sequences. A key is of length 2 and may be followed | ||
| 518 | // by 0 or more "type" subtags from 3 to the maximum of 8 letters. | ||
| 519 | var last, key []byte | ||
| 520 | for attrEnd := end; len(scan.token) == 2; last = key { | ||
| 521 | key = scan.token | ||
| 522 | end = scan.end | ||
| 523 | for scan.scan(); end < scan.end && len(scan.token) > 2; scan.scan() { | ||
| 524 | end = scan.end | ||
| 525 | } | ||
| 526 | // TODO: check key value validity | ||
| 527 | if bytes.Compare(key, last) != 1 || scan.err != nil { | ||
| 528 | // We have an invalid key or the keys are not sorted. | ||
| 529 | // Start scanning keys from scratch and reorder. | ||
| 530 | p := attrEnd + 1 | ||
| 531 | scan.next = p | ||
| 532 | keys := [][]byte{} | ||
| 533 | for scan.scan(); len(scan.token) == 2; { | ||
| 534 | keyStart := scan.start | ||
| 535 | end = scan.end | ||
| 536 | for scan.scan(); end < scan.end && len(scan.token) > 2; scan.scan() { | ||
| 537 | end = scan.end | ||
| 538 | } | ||
| 539 | keys = append(keys, scan.b[keyStart:end]) | ||
| 540 | } | ||
| 541 | sort.Stable(bytesSort{keys, 2}) | ||
| 542 | if n := len(keys); n > 0 { | ||
| 543 | k := 0 | ||
| 544 | for i := 1; i < n; i++ { | ||
| 545 | if !bytes.Equal(keys[k][:2], keys[i][:2]) { | ||
| 546 | k++ | ||
| 547 | keys[k] = keys[i] | ||
| 548 | } else if !bytes.Equal(keys[k], keys[i]) { | ||
| 549 | scan.setError(ErrDuplicateKey) | ||
| 550 | } | ||
| 551 | } | ||
| 552 | keys = keys[:k+1] | ||
| 553 | } | ||
| 554 | reordered := bytes.Join(keys, separator) | ||
| 555 | if e := p + len(reordered); e < end { | ||
| 556 | scan.deleteRange(e, end) | ||
| 557 | end = e | ||
| 558 | } | ||
| 559 | copy(scan.b[p:], reordered) | ||
| 560 | break | ||
| 561 | } | ||
| 562 | } | ||
| 563 | case 't': // https://www.ietf.org/rfc/rfc6497.txt | ||
| 564 | scan.scan() | ||
| 565 | if n := len(scan.token); n >= 2 && n <= 3 && isAlpha(scan.token[1]) { | ||
| 566 | _, end = parseTag(scan, false) | ||
| 567 | scan.toLower(start, end) | ||
| 568 | } | ||
| 569 | for len(scan.token) == 2 && !isAlpha(scan.token[1]) { | ||
| 570 | end = scan.acceptMinSize(3) | ||
| 571 | } | ||
| 572 | case 'x': | ||
| 573 | end = scan.acceptMinSize(1) | ||
| 574 | default: | ||
| 575 | end = scan.acceptMinSize(2) | ||
| 576 | } | ||
| 577 | return end | ||
| 578 | } | ||
| 579 | |||
| 580 | // getExtension returns the name, body and end position of the extension. | ||
| 581 | func getExtension(s string, p int) (end int, ext string) { | ||
| 582 | if s[p] == '-' { | ||
| 583 | p++ | ||
| 584 | } | ||
| 585 | if s[p] == 'x' { | ||
| 586 | return len(s), s[p:] | ||
| 587 | } | ||
| 588 | end = nextExtension(s, p) | ||
| 589 | return end, s[p:end] | ||
| 590 | } | ||
| 591 | |||
| 592 | // nextExtension finds the next extension within the string, searching | ||
| 593 | // for the -<char>- pattern from position p. | ||
| 594 | // In the fast majority of cases, language tags will have at most | ||
| 595 | // one extension and extensions tend to be small. | ||
| 596 | func nextExtension(s string, p int) int { | ||
| 597 | for n := len(s) - 3; p < n; { | ||
| 598 | if s[p] == '-' { | ||
| 599 | if s[p+2] == '-' { | ||
| 600 | return p | ||
| 601 | } | ||
| 602 | p += 3 | ||
| 603 | } else { | ||
| 604 | p++ | ||
| 605 | } | ||
| 606 | } | ||
| 607 | return len(s) | ||
| 608 | } | ||
diff --git a/vendor/golang.org/x/text/internal/language/tables.go b/vendor/golang.org/x/text/internal/language/tables.go new file mode 100644 index 0000000..14167e7 --- /dev/null +++ b/vendor/golang.org/x/text/internal/language/tables.go | |||
| @@ -0,0 +1,3494 @@ | |||
| 1 | // Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. | ||
| 2 | |||
| 3 | package language | ||
| 4 | |||
| 5 | import "golang.org/x/text/internal/tag" | ||
| 6 | |||
| 7 | // CLDRVersion is the CLDR version from which the tables in this package are derived. | ||
| 8 | const CLDRVersion = "32" | ||
| 9 | |||
| 10 | const NumLanguages = 8798 | ||
| 11 | |||
| 12 | const NumScripts = 261 | ||
| 13 | |||
| 14 | const NumRegions = 358 | ||
| 15 | |||
| 16 | type FromTo struct { | ||
| 17 | From uint16 | ||
| 18 | To uint16 | ||
| 19 | } | ||
| 20 | |||
| 21 | const nonCanonicalUnd = 1201 | ||
| 22 | const ( | ||
| 23 | _af = 22 | ||
| 24 | _am = 39 | ||
| 25 | _ar = 58 | ||
| 26 | _az = 88 | ||
| 27 | _bg = 126 | ||
| 28 | _bn = 165 | ||
| 29 | _ca = 215 | ||
| 30 | _cs = 250 | ||
| 31 | _da = 257 | ||
| 32 | _de = 269 | ||
| 33 | _el = 310 | ||
| 34 | _en = 313 | ||
| 35 | _es = 318 | ||
| 36 | _et = 320 | ||
| 37 | _fa = 328 | ||
| 38 | _fi = 337 | ||
| 39 | _fil = 339 | ||
| 40 | _fr = 350 | ||
| 41 | _gu = 420 | ||
| 42 | _he = 444 | ||
| 43 | _hi = 446 | ||
| 44 | _hr = 465 | ||
| 45 | _hu = 469 | ||
| 46 | _hy = 471 | ||
| 47 | _id = 481 | ||
| 48 | _is = 504 | ||
| 49 | _it = 505 | ||
| 50 | _ja = 512 | ||
| 51 | _ka = 528 | ||
| 52 | _kk = 578 | ||
| 53 | _km = 586 | ||
| 54 | _kn = 593 | ||
| 55 | _ko = 596 | ||
| 56 | _ky = 650 | ||
| 57 | _lo = 696 | ||
| 58 | _lt = 704 | ||
| 59 | _lv = 711 | ||
| 60 | _mk = 767 | ||
| 61 | _ml = 772 | ||
| 62 | _mn = 779 | ||
| 63 | _mo = 784 | ||
| 64 | _mr = 795 | ||
| 65 | _ms = 799 | ||
| 66 | _mul = 806 | ||
| 67 | _my = 817 | ||
| 68 | _nb = 839 | ||
| 69 | _ne = 849 | ||
| 70 | _nl = 871 | ||
| 71 | _no = 879 | ||
| 72 | _pa = 925 | ||
| 73 | _pl = 947 | ||
| 74 | _pt = 960 | ||
| 75 | _ro = 988 | ||
| 76 | _ru = 994 | ||
| 77 | _sh = 1031 | ||
| 78 | _si = 1036 | ||
| 79 | _sk = 1042 | ||
| 80 | _sl = 1046 | ||
| 81 | _sq = 1073 | ||
| 82 | _sr = 1074 | ||
| 83 | _sv = 1092 | ||
| 84 | _sw = 1093 | ||
| 85 | _ta = 1104 | ||
| 86 | _te = 1121 | ||
| 87 | _th = 1131 | ||
| 88 | _tl = 1146 | ||
| 89 | _tn = 1152 | ||
| 90 | _tr = 1162 | ||
| 91 | _uk = 1198 | ||
| 92 | _ur = 1204 | ||
| 93 | _uz = 1212 | ||
| 94 | _vi = 1219 | ||
| 95 | _zh = 1321 | ||
| 96 | _zu = 1327 | ||
| 97 | _jbo = 515 | ||
| 98 | _ami = 1650 | ||
| 99 | _bnn = 2357 | ||
| 100 | _hak = 438 | ||
| 101 | _tlh = 14467 | ||
| 102 | _lb = 661 | ||
| 103 | _nv = 899 | ||
| 104 | _pwn = 12055 | ||
| 105 | _tao = 14188 | ||
| 106 | _tay = 14198 | ||
| 107 | _tsu = 14662 | ||
| 108 | _nn = 874 | ||
| 109 | _sfb = 13629 | ||
| 110 | _vgt = 15701 | ||
| 111 | _sgg = 13660 | ||
| 112 | _cmn = 3007 | ||
| 113 | _nan = 835 | ||
| 114 | _hsn = 467 | ||
| 115 | ) | ||
| 116 | |||
| 117 | const langPrivateStart = 0x2f72 | ||
| 118 | |||
| 119 | const langPrivateEnd = 0x3179 | ||
| 120 | |||
| 121 | // lang holds an alphabetically sorted list of ISO-639 language identifiers. | ||
| 122 | // All entries are 4 bytes. The index of the identifier (divided by 4) is the language tag. | ||
| 123 | // For 2-byte language identifiers, the two successive bytes have the following meaning: | ||
| 124 | // - if the first letter of the 2- and 3-letter ISO codes are the same: | ||
| 125 | // the second and third letter of the 3-letter ISO code. | ||
| 126 | // - otherwise: a 0 and a by 2 bits right-shifted index into altLangISO3. | ||
| 127 | // | ||
| 128 | // For 3-byte language identifiers the 4th byte is 0. | ||
| 129 | const lang tag.Index = "" + // Size: 5324 bytes | ||
| 130 | "---\x00aaaraai\x00aak\x00aau\x00abbkabi\x00abq\x00abr\x00abt\x00aby\x00a" + | ||
| 131 | "cd\x00ace\x00ach\x00ada\x00ade\x00adj\x00ady\x00adz\x00aeveaeb\x00aey" + | ||
| 132 | "\x00affragc\x00agd\x00agg\x00agm\x00ago\x00agq\x00aha\x00ahl\x00aho\x00a" + | ||
| 133 | "jg\x00akkaakk\x00ala\x00ali\x00aln\x00alt\x00ammhamm\x00amn\x00amo\x00am" + | ||
| 134 | "p\x00anrganc\x00ank\x00ann\x00any\x00aoj\x00aom\x00aoz\x00apc\x00apd\x00" + | ||
| 135 | "ape\x00apr\x00aps\x00apz\x00arraarc\x00arh\x00arn\x00aro\x00arq\x00ars" + | ||
| 136 | "\x00ary\x00arz\x00assmasa\x00ase\x00asg\x00aso\x00ast\x00ata\x00atg\x00a" + | ||
| 137 | "tj\x00auy\x00avvaavl\x00avn\x00avt\x00avu\x00awa\x00awb\x00awo\x00awx" + | ||
| 138 | "\x00ayymayb\x00azzebaakbal\x00ban\x00bap\x00bar\x00bas\x00bav\x00bax\x00" + | ||
| 139 | "bba\x00bbb\x00bbc\x00bbd\x00bbj\x00bbp\x00bbr\x00bcf\x00bch\x00bci\x00bc" + | ||
| 140 | "m\x00bcn\x00bco\x00bcq\x00bcu\x00bdd\x00beelbef\x00beh\x00bej\x00bem\x00" + | ||
| 141 | "bet\x00bew\x00bex\x00bez\x00bfd\x00bfq\x00bft\x00bfy\x00bgulbgc\x00bgn" + | ||
| 142 | "\x00bgx\x00bhihbhb\x00bhg\x00bhi\x00bhk\x00bhl\x00bho\x00bhy\x00biisbib" + | ||
| 143 | "\x00big\x00bik\x00bim\x00bin\x00bio\x00biq\x00bjh\x00bji\x00bjj\x00bjn" + | ||
| 144 | "\x00bjo\x00bjr\x00bjt\x00bjz\x00bkc\x00bkm\x00bkq\x00bku\x00bkv\x00blt" + | ||
| 145 | "\x00bmambmh\x00bmk\x00bmq\x00bmu\x00bnenbng\x00bnm\x00bnp\x00boodboj\x00" + | ||
| 146 | "bom\x00bon\x00bpy\x00bqc\x00bqi\x00bqp\x00bqv\x00brrebra\x00brh\x00brx" + | ||
| 147 | "\x00brz\x00bsosbsj\x00bsq\x00bss\x00bst\x00bto\x00btt\x00btv\x00bua\x00b" + | ||
| 148 | "uc\x00bud\x00bug\x00buk\x00bum\x00buo\x00bus\x00buu\x00bvb\x00bwd\x00bwr" + | ||
| 149 | "\x00bxh\x00bye\x00byn\x00byr\x00bys\x00byv\x00byx\x00bza\x00bze\x00bzf" + | ||
| 150 | "\x00bzh\x00bzw\x00caatcan\x00cbj\x00cch\x00ccp\x00ceheceb\x00cfa\x00cgg" + | ||
| 151 | "\x00chhachk\x00chm\x00cho\x00chp\x00chr\x00cja\x00cjm\x00cjv\x00ckb\x00c" + | ||
| 152 | "kl\x00cko\x00cky\x00cla\x00cme\x00cmg\x00cooscop\x00cps\x00crrecrh\x00cr" + | ||
| 153 | "j\x00crk\x00crl\x00crm\x00crs\x00csescsb\x00csw\x00ctd\x00cuhucvhvcyymda" + | ||
| 154 | "andad\x00daf\x00dag\x00dah\x00dak\x00dar\x00dav\x00dbd\x00dbq\x00dcc\x00" + | ||
| 155 | "ddn\x00deeuded\x00den\x00dga\x00dgh\x00dgi\x00dgl\x00dgr\x00dgz\x00dia" + | ||
| 156 | "\x00dje\x00dnj\x00dob\x00doi\x00dop\x00dow\x00dri\x00drs\x00dsb\x00dtm" + | ||
| 157 | "\x00dtp\x00dts\x00dty\x00dua\x00duc\x00dud\x00dug\x00dvivdva\x00dww\x00d" + | ||
| 158 | "yo\x00dyu\x00dzzodzg\x00ebu\x00eeweefi\x00egl\x00egy\x00eka\x00eky\x00el" + | ||
| 159 | "llema\x00emi\x00enngenn\x00enq\x00eopoeri\x00es\x00\x05esu\x00etstetr" + | ||
| 160 | "\x00ett\x00etu\x00etx\x00euusewo\x00ext\x00faasfaa\x00fab\x00fag\x00fai" + | ||
| 161 | "\x00fan\x00ffulffi\x00ffm\x00fiinfia\x00fil\x00fit\x00fjijflr\x00fmp\x00" + | ||
| 162 | "foaofod\x00fon\x00for\x00fpe\x00fqs\x00frrafrc\x00frp\x00frr\x00frs\x00f" + | ||
| 163 | "ub\x00fud\x00fue\x00fuf\x00fuh\x00fuq\x00fur\x00fuv\x00fuy\x00fvr\x00fyr" + | ||
| 164 | "ygalegaa\x00gaf\x00gag\x00gah\x00gaj\x00gam\x00gan\x00gaw\x00gay\x00gba" + | ||
| 165 | "\x00gbf\x00gbm\x00gby\x00gbz\x00gcr\x00gdlagde\x00gdn\x00gdr\x00geb\x00g" + | ||
| 166 | "ej\x00gel\x00gez\x00gfk\x00ggn\x00ghs\x00gil\x00gim\x00gjk\x00gjn\x00gju" + | ||
| 167 | "\x00gkn\x00gkp\x00gllgglk\x00gmm\x00gmv\x00gnrngnd\x00gng\x00god\x00gof" + | ||
| 168 | "\x00goi\x00gom\x00gon\x00gor\x00gos\x00got\x00grb\x00grc\x00grt\x00grw" + | ||
| 169 | "\x00gsw\x00guujgub\x00guc\x00gud\x00gur\x00guw\x00gux\x00guz\x00gvlvgvf" + | ||
| 170 | "\x00gvr\x00gvs\x00gwc\x00gwi\x00gwt\x00gyi\x00haauhag\x00hak\x00ham\x00h" + | ||
| 171 | "aw\x00haz\x00hbb\x00hdy\x00heebhhy\x00hiinhia\x00hif\x00hig\x00hih\x00hi" + | ||
| 172 | "l\x00hla\x00hlu\x00hmd\x00hmt\x00hnd\x00hne\x00hnj\x00hnn\x00hno\x00homo" + | ||
| 173 | "hoc\x00hoj\x00hot\x00hrrvhsb\x00hsn\x00htathuunhui\x00hyyehzerianaian" + | ||
| 174 | "\x00iar\x00iba\x00ibb\x00iby\x00ica\x00ich\x00idndidd\x00idi\x00idu\x00i" + | ||
| 175 | "eleife\x00igboigb\x00ige\x00iiiiijj\x00ikpkikk\x00ikt\x00ikw\x00ikx\x00i" + | ||
| 176 | "lo\x00imo\x00inndinh\x00iodoiou\x00iri\x00isslittaiukuiw\x00\x03iwm\x00i" + | ||
| 177 | "ws\x00izh\x00izi\x00japnjab\x00jam\x00jbo\x00jbu\x00jen\x00jgk\x00jgo" + | ||
| 178 | "\x00ji\x00\x06jib\x00jmc\x00jml\x00jra\x00jut\x00jvavjwavkaatkaa\x00kab" + | ||
| 179 | "\x00kac\x00kad\x00kai\x00kaj\x00kam\x00kao\x00kbd\x00kbm\x00kbp\x00kbq" + | ||
| 180 | "\x00kbx\x00kby\x00kcg\x00kck\x00kcl\x00kct\x00kde\x00kdh\x00kdl\x00kdt" + | ||
| 181 | "\x00kea\x00ken\x00kez\x00kfo\x00kfr\x00kfy\x00kgonkge\x00kgf\x00kgp\x00k" + | ||
| 182 | "ha\x00khb\x00khn\x00khq\x00khs\x00kht\x00khw\x00khz\x00kiikkij\x00kiu" + | ||
| 183 | "\x00kiw\x00kjuakjd\x00kjg\x00kjs\x00kjy\x00kkazkkc\x00kkj\x00klalkln\x00" + | ||
| 184 | "klq\x00klt\x00klx\x00kmhmkmb\x00kmh\x00kmo\x00kms\x00kmu\x00kmw\x00knank" + | ||
| 185 | "nf\x00knp\x00koorkoi\x00kok\x00kol\x00kos\x00koz\x00kpe\x00kpf\x00kpo" + | ||
| 186 | "\x00kpr\x00kpx\x00kqb\x00kqf\x00kqs\x00kqy\x00kraukrc\x00kri\x00krj\x00k" + | ||
| 187 | "rl\x00krs\x00kru\x00ksasksb\x00ksd\x00ksf\x00ksh\x00ksj\x00ksr\x00ktb" + | ||
| 188 | "\x00ktm\x00kto\x00kuurkub\x00kud\x00kue\x00kuj\x00kum\x00kun\x00kup\x00k" + | ||
| 189 | "us\x00kvomkvg\x00kvr\x00kvx\x00kw\x00\x01kwj\x00kwo\x00kxa\x00kxc\x00kxm" + | ||
| 190 | "\x00kxp\x00kxw\x00kxz\x00kyirkye\x00kyx\x00kzr\x00laatlab\x00lad\x00lag" + | ||
| 191 | "\x00lah\x00laj\x00las\x00lbtzlbe\x00lbu\x00lbw\x00lcm\x00lcp\x00ldb\x00l" + | ||
| 192 | "ed\x00lee\x00lem\x00lep\x00leq\x00leu\x00lez\x00lguglgg\x00liimlia\x00li" + | ||
| 193 | "d\x00lif\x00lig\x00lih\x00lij\x00lis\x00ljp\x00lki\x00lkt\x00lle\x00lln" + | ||
| 194 | "\x00lmn\x00lmo\x00lmp\x00lninlns\x00lnu\x00loaoloj\x00lok\x00lol\x00lor" + | ||
| 195 | "\x00los\x00loz\x00lrc\x00ltitltg\x00luublua\x00luo\x00luy\x00luz\x00lvav" + | ||
| 196 | "lwl\x00lzh\x00lzz\x00mad\x00maf\x00mag\x00mai\x00mak\x00man\x00mas\x00ma" + | ||
| 197 | "w\x00maz\x00mbh\x00mbo\x00mbq\x00mbu\x00mbw\x00mci\x00mcp\x00mcq\x00mcr" + | ||
| 198 | "\x00mcu\x00mda\x00mde\x00mdf\x00mdh\x00mdj\x00mdr\x00mdx\x00med\x00mee" + | ||
| 199 | "\x00mek\x00men\x00mer\x00met\x00meu\x00mfa\x00mfe\x00mfn\x00mfo\x00mfq" + | ||
| 200 | "\x00mglgmgh\x00mgl\x00mgo\x00mgp\x00mgy\x00mhahmhi\x00mhl\x00mirimif\x00" + | ||
| 201 | "min\x00mis\x00miw\x00mkkdmki\x00mkl\x00mkp\x00mkw\x00mlalmle\x00mlp\x00m" + | ||
| 202 | "ls\x00mmo\x00mmu\x00mmx\x00mnonmna\x00mnf\x00mni\x00mnw\x00moolmoa\x00mo" + | ||
| 203 | "e\x00moh\x00mos\x00mox\x00mpp\x00mps\x00mpt\x00mpx\x00mql\x00mrarmrd\x00" + | ||
| 204 | "mrj\x00mro\x00mssamtltmtc\x00mtf\x00mti\x00mtr\x00mua\x00mul\x00mur\x00m" + | ||
| 205 | "us\x00mva\x00mvn\x00mvy\x00mwk\x00mwr\x00mwv\x00mxc\x00mxm\x00myyamyk" + | ||
| 206 | "\x00mym\x00myv\x00myw\x00myx\x00myz\x00mzk\x00mzm\x00mzn\x00mzp\x00mzw" + | ||
| 207 | "\x00mzz\x00naaunac\x00naf\x00nah\x00nak\x00nan\x00nap\x00naq\x00nas\x00n" + | ||
| 208 | "bobnca\x00nce\x00ncf\x00nch\x00nco\x00ncu\x00nddendc\x00nds\x00neepneb" + | ||
| 209 | "\x00new\x00nex\x00nfr\x00ngdonga\x00ngb\x00ngl\x00nhb\x00nhe\x00nhw\x00n" + | ||
| 210 | "if\x00nii\x00nij\x00nin\x00niu\x00niy\x00niz\x00njo\x00nkg\x00nko\x00nll" + | ||
| 211 | "dnmg\x00nmz\x00nnnonnf\x00nnh\x00nnk\x00nnm\x00noornod\x00noe\x00non\x00" + | ||
| 212 | "nop\x00nou\x00nqo\x00nrblnrb\x00nsk\x00nsn\x00nso\x00nss\x00ntm\x00ntr" + | ||
| 213 | "\x00nui\x00nup\x00nus\x00nuv\x00nux\x00nvavnwb\x00nxq\x00nxr\x00nyyanym" + | ||
| 214 | "\x00nyn\x00nzi\x00occiogc\x00ojjiokr\x00okv\x00omrmong\x00onn\x00ons\x00" + | ||
| 215 | "opm\x00orrioro\x00oru\x00osssosa\x00ota\x00otk\x00ozm\x00paanpag\x00pal" + | ||
| 216 | "\x00pam\x00pap\x00pau\x00pbi\x00pcd\x00pcm\x00pdc\x00pdt\x00ped\x00peo" + | ||
| 217 | "\x00pex\x00pfl\x00phl\x00phn\x00pilipil\x00pip\x00pka\x00pko\x00plolpla" + | ||
| 218 | "\x00pms\x00png\x00pnn\x00pnt\x00pon\x00ppo\x00pra\x00prd\x00prg\x00psusp" + | ||
| 219 | "ss\x00ptorptp\x00puu\x00pwa\x00quuequc\x00qug\x00rai\x00raj\x00rao\x00rc" + | ||
| 220 | "f\x00rej\x00rel\x00res\x00rgn\x00rhg\x00ria\x00rif\x00rjs\x00rkt\x00rmoh" + | ||
| 221 | "rmf\x00rmo\x00rmt\x00rmu\x00rnunrna\x00rng\x00roonrob\x00rof\x00roo\x00r" + | ||
| 222 | "ro\x00rtm\x00ruusrue\x00rug\x00rw\x00\x04rwk\x00rwo\x00ryu\x00saansaf" + | ||
| 223 | "\x00sah\x00saq\x00sas\x00sat\x00sav\x00saz\x00sba\x00sbe\x00sbp\x00scrds" + | ||
| 224 | "ck\x00scl\x00scn\x00sco\x00scs\x00sdndsdc\x00sdh\x00semesef\x00seh\x00se" + | ||
| 225 | "i\x00ses\x00sgagsga\x00sgs\x00sgw\x00sgz\x00sh\x00\x02shi\x00shk\x00shn" + | ||
| 226 | "\x00shu\x00siinsid\x00sig\x00sil\x00sim\x00sjr\x00sklkskc\x00skr\x00sks" + | ||
| 227 | "\x00sllvsld\x00sli\x00sll\x00sly\x00smmosma\x00smi\x00smj\x00smn\x00smp" + | ||
| 228 | "\x00smq\x00sms\x00snnasnc\x00snk\x00snp\x00snx\x00sny\x00soomsok\x00soq" + | ||
| 229 | "\x00sou\x00soy\x00spd\x00spl\x00sps\x00sqqisrrpsrb\x00srn\x00srr\x00srx" + | ||
| 230 | "\x00ssswssd\x00ssg\x00ssy\x00stotstk\x00stq\x00suunsua\x00sue\x00suk\x00" + | ||
| 231 | "sur\x00sus\x00svweswwaswb\x00swc\x00swg\x00swp\x00swv\x00sxn\x00sxw\x00s" + | ||
| 232 | "yl\x00syr\x00szl\x00taamtaj\x00tal\x00tan\x00taq\x00tbc\x00tbd\x00tbf" + | ||
| 233 | "\x00tbg\x00tbo\x00tbw\x00tbz\x00tci\x00tcy\x00tdd\x00tdg\x00tdh\x00teelt" + | ||
| 234 | "ed\x00tem\x00teo\x00tet\x00tfi\x00tggktgc\x00tgo\x00tgu\x00thhathl\x00th" + | ||
| 235 | "q\x00thr\x00tiirtif\x00tig\x00tik\x00tim\x00tio\x00tiv\x00tkuktkl\x00tkr" + | ||
| 236 | "\x00tkt\x00tlgltlf\x00tlx\x00tly\x00tmh\x00tmy\x00tnsntnh\x00toontof\x00" + | ||
| 237 | "tog\x00toq\x00tpi\x00tpm\x00tpz\x00tqo\x00trurtru\x00trv\x00trw\x00tssot" + | ||
| 238 | "sd\x00tsf\x00tsg\x00tsj\x00tsw\x00ttatttd\x00tte\x00ttj\x00ttr\x00tts" + | ||
| 239 | "\x00ttt\x00tuh\x00tul\x00tum\x00tuq\x00tvd\x00tvl\x00tvu\x00twwitwh\x00t" + | ||
| 240 | "wq\x00txg\x00tyahtya\x00tyv\x00tzm\x00ubu\x00udm\x00ugiguga\x00ukkruli" + | ||
| 241 | "\x00umb\x00und\x00unr\x00unx\x00urrduri\x00urt\x00urw\x00usa\x00utr\x00u" + | ||
| 242 | "vh\x00uvl\x00uzzbvag\x00vai\x00van\x00veenvec\x00vep\x00viievic\x00viv" + | ||
| 243 | "\x00vls\x00vmf\x00vmw\x00voolvot\x00vro\x00vun\x00vut\x00walnwae\x00waj" + | ||
| 244 | "\x00wal\x00wan\x00war\x00wbp\x00wbq\x00wbr\x00wci\x00wer\x00wgi\x00whg" + | ||
| 245 | "\x00wib\x00wiu\x00wiv\x00wja\x00wji\x00wls\x00wmo\x00wnc\x00wni\x00wnu" + | ||
| 246 | "\x00woolwob\x00wos\x00wrs\x00wsk\x00wtm\x00wuu\x00wuv\x00wwa\x00xav\x00x" + | ||
| 247 | "bi\x00xcr\x00xes\x00xhhoxla\x00xlc\x00xld\x00xmf\x00xmn\x00xmr\x00xna" + | ||
| 248 | "\x00xnr\x00xog\x00xon\x00xpr\x00xrb\x00xsa\x00xsi\x00xsm\x00xsr\x00xwe" + | ||
| 249 | "\x00yam\x00yao\x00yap\x00yas\x00yat\x00yav\x00yay\x00yaz\x00yba\x00ybb" + | ||
| 250 | "\x00yby\x00yer\x00ygr\x00ygw\x00yiidyko\x00yle\x00ylg\x00yll\x00yml\x00y" + | ||
| 251 | "ooryon\x00yrb\x00yre\x00yrl\x00yss\x00yua\x00yue\x00yuj\x00yut\x00yuw" + | ||
| 252 | "\x00zahazag\x00zbl\x00zdj\x00zea\x00zgh\x00zhhozhx\x00zia\x00zlm\x00zmi" + | ||
| 253 | "\x00zne\x00zuulzxx\x00zza\x00\xff\xff\xff\xff" | ||
| 254 | |||
| 255 | const langNoIndexOffset = 1330 | ||
| 256 | |||
| 257 | // langNoIndex is a bit vector of all 3-letter language codes that are not used as an index | ||
| 258 | // in lookup tables. The language ids for these language codes are derived directly | ||
| 259 | // from the letters and are not consecutive. | ||
| 260 | // Size: 2197 bytes, 2197 elements | ||
| 261 | var langNoIndex = [2197]uint8{ | ||
| 262 | // Entry 0 - 3F | ||
| 263 | 0xff, 0xf8, 0xed, 0xfe, 0xeb, 0xd3, 0x3b, 0xd2, | ||
| 264 | 0xfb, 0xbf, 0x7a, 0xfa, 0x37, 0x1d, 0x3c, 0x57, | ||
| 265 | 0x6e, 0x97, 0x73, 0x38, 0xfb, 0xea, 0xbf, 0x70, | ||
| 266 | 0xad, 0x03, 0xff, 0xff, 0xcf, 0x05, 0x84, 0x72, | ||
| 267 | 0xe9, 0xbf, 0xfd, 0xbf, 0xbf, 0xf7, 0xfd, 0x77, | ||
| 268 | 0x0f, 0xff, 0xef, 0x6f, 0xff, 0xfb, 0xdf, 0xe2, | ||
| 269 | 0xc9, 0xf8, 0x7f, 0x7e, 0x4d, 0xbc, 0x0a, 0x6a, | ||
| 270 | 0x7c, 0xea, 0xe3, 0xfa, 0x7a, 0xbf, 0x67, 0xff, | ||
| 271 | // Entry 40 - 7F | ||
| 272 | 0xff, 0xff, 0xff, 0xdf, 0x2a, 0x54, 0x91, 0xc0, | ||
| 273 | 0x5d, 0xe3, 0x97, 0x14, 0x07, 0x20, 0xdd, 0xed, | ||
| 274 | 0x9f, 0x3f, 0xc9, 0x21, 0xf8, 0x3f, 0x94, 0x35, | ||
| 275 | 0x7c, 0x5f, 0xff, 0x5f, 0x8e, 0x6e, 0xdf, 0xff, | ||
| 276 | 0xff, 0xff, 0x55, 0x7c, 0xd3, 0xfd, 0xbf, 0xb5, | ||
| 277 | 0x7b, 0xdf, 0x7f, 0xf7, 0xca, 0xfe, 0xdb, 0xa3, | ||
| 278 | 0xa8, 0xff, 0x1f, 0x67, 0x7d, 0xeb, 0xef, 0xce, | ||
| 279 | 0xff, 0xff, 0x9f, 0xff, 0xb7, 0xef, 0xfe, 0xcf, | ||
| 280 | // Entry 80 - BF | ||
| 281 | 0xdb, 0xff, 0xf3, 0xcd, 0xfb, 0x7f, 0xff, 0xff, | ||
| 282 | 0xbb, 0xee, 0xf7, 0xbd, 0xdb, 0xff, 0x5f, 0xf7, | ||
| 283 | 0xfd, 0xf2, 0xfd, 0xff, 0x5e, 0x2f, 0x3b, 0xba, | ||
| 284 | 0x7e, 0xff, 0xff, 0xfe, 0xf7, 0xff, 0xdd, 0xff, | ||
| 285 | 0xfd, 0xdf, 0xfb, 0xfe, 0x9d, 0xb4, 0xd3, 0xff, | ||
| 286 | 0xef, 0xff, 0xdf, 0xf7, 0x7f, 0xb7, 0xfd, 0xd5, | ||
| 287 | 0xa5, 0x77, 0x40, 0xff, 0x9c, 0xc1, 0x41, 0x2c, | ||
| 288 | 0x08, 0x21, 0x41, 0x00, 0x50, 0x40, 0x00, 0x80, | ||
| 289 | // Entry C0 - FF | ||
| 290 | 0xfb, 0x4a, 0xf2, 0x9f, 0xb4, 0x42, 0x41, 0x96, | ||
| 291 | 0x1b, 0x14, 0x08, 0xf3, 0x2b, 0xe7, 0x17, 0x56, | ||
| 292 | 0x05, 0x7d, 0x0e, 0x1c, 0x37, 0x7f, 0xf3, 0xef, | ||
| 293 | 0x97, 0xff, 0x5d, 0x38, 0x64, 0x08, 0x00, 0x10, | ||
| 294 | 0xbc, 0x85, 0xaf, 0xdf, 0xff, 0xff, 0x7b, 0x35, | ||
| 295 | 0x3e, 0xc7, 0xc7, 0xdf, 0xff, 0x01, 0x81, 0x00, | ||
| 296 | 0xb0, 0x05, 0x80, 0x00, 0x20, 0x00, 0x00, 0x03, | ||
| 297 | 0x40, 0x00, 0x40, 0x92, 0x21, 0x50, 0xb1, 0x5d, | ||
| 298 | // Entry 100 - 13F | ||
| 299 | 0xfd, 0xdc, 0xbe, 0x5e, 0x00, 0x00, 0x02, 0x64, | ||
| 300 | 0x0d, 0x19, 0x41, 0xdf, 0x79, 0x22, 0x00, 0x00, | ||
| 301 | 0x00, 0x5e, 0x64, 0xdc, 0x24, 0xe5, 0xd9, 0xe3, | ||
| 302 | 0xfe, 0xff, 0xfd, 0xcb, 0x9f, 0x14, 0x41, 0x0c, | ||
| 303 | 0x86, 0x00, 0xd1, 0x00, 0xf0, 0xc7, 0x67, 0x5f, | ||
| 304 | 0x56, 0x99, 0x5e, 0xb5, 0x6c, 0xaf, 0x03, 0x00, | ||
| 305 | 0x02, 0x00, 0x00, 0x00, 0xc0, 0x37, 0xda, 0x56, | ||
| 306 | 0x90, 0x6d, 0x01, 0x2e, 0x96, 0x69, 0x20, 0xfb, | ||
| 307 | // Entry 140 - 17F | ||
| 308 | 0xff, 0x3f, 0x00, 0x00, 0x00, 0x01, 0x0c, 0x16, | ||
| 309 | 0x03, 0x00, 0x00, 0xb0, 0x14, 0x23, 0x50, 0x06, | ||
| 310 | 0x0a, 0x00, 0x01, 0x00, 0x00, 0x10, 0x11, 0x09, | ||
| 311 | 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x10, | ||
| 312 | 0x00, 0x00, 0x44, 0x00, 0x00, 0x10, 0x00, 0x05, | ||
| 313 | 0x08, 0x00, 0x00, 0x05, 0x00, 0x80, 0x28, 0x04, | ||
| 314 | 0x00, 0x00, 0x40, 0xd5, 0x2d, 0x00, 0x64, 0x35, | ||
| 315 | 0x24, 0x52, 0xf4, 0xd5, 0xbf, 0x62, 0xc9, 0x03, | ||
| 316 | // Entry 180 - 1BF | ||
| 317 | 0x00, 0x80, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, | ||
| 318 | 0x00, 0x04, 0x13, 0x39, 0x01, 0xdd, 0x57, 0x98, | ||
| 319 | 0x21, 0x18, 0x81, 0x08, 0x00, 0x01, 0x40, 0x82, | ||
| 320 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 321 | 0x01, 0x40, 0x00, 0x44, 0x00, 0x00, 0x80, 0xea, | ||
| 322 | 0xa9, 0x39, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, | ||
| 323 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, | ||
| 324 | 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, | ||
| 325 | // Entry 1C0 - 1FF | ||
| 326 | 0x00, 0x03, 0x28, 0x05, 0x00, 0x00, 0x00, 0x00, | ||
| 327 | 0x04, 0x20, 0x04, 0xa6, 0x00, 0x04, 0x00, 0x00, | ||
| 328 | 0x81, 0x50, 0x00, 0x00, 0x00, 0x11, 0x84, 0x00, | ||
| 329 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x55, | ||
| 330 | 0x02, 0x10, 0x08, 0x04, 0x00, 0x00, 0x00, 0x40, | ||
| 331 | 0x30, 0x83, 0x01, 0x00, 0x00, 0x00, 0x11, 0x00, | ||
| 332 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 333 | 0x00, 0x00, 0x00, 0x1e, 0xcd, 0xbf, 0x7a, 0xbf, | ||
| 334 | // Entry 200 - 23F | ||
| 335 | 0xdf, 0xc3, 0x83, 0x82, 0xc0, 0xfb, 0x57, 0x27, | ||
| 336 | 0xed, 0x55, 0xe7, 0x01, 0x00, 0x20, 0xb2, 0xc5, | ||
| 337 | 0xa4, 0x45, 0x25, 0x9b, 0x02, 0xdf, 0xe1, 0xdf, | ||
| 338 | 0x03, 0x44, 0x08, 0x90, 0x01, 0x04, 0x81, 0xe3, | ||
| 339 | 0x92, 0x54, 0xdb, 0x28, 0xd3, 0x5f, 0xfe, 0x6d, | ||
| 340 | 0x79, 0xed, 0x1c, 0x7f, 0x04, 0x08, 0x00, 0x01, | ||
| 341 | 0x21, 0x12, 0x64, 0x5f, 0xdd, 0x0e, 0x85, 0x4f, | ||
| 342 | 0x40, 0x40, 0x00, 0x04, 0xf1, 0xfd, 0x3d, 0x54, | ||
| 343 | // Entry 240 - 27F | ||
| 344 | 0xe8, 0x03, 0xb4, 0x27, 0x23, 0x0d, 0x00, 0x00, | ||
| 345 | 0x20, 0x7b, 0x78, 0x02, 0x07, 0x84, 0x00, 0xf0, | ||
| 346 | 0xbb, 0x7e, 0x5a, 0x00, 0x18, 0x04, 0x81, 0x00, | ||
| 347 | 0x00, 0x00, 0x80, 0x10, 0x90, 0x1c, 0x01, 0x00, | ||
| 348 | 0x00, 0x00, 0x00, 0x00, 0x10, 0x40, 0x00, 0x04, | ||
| 349 | 0x08, 0xa0, 0x70, 0xa5, 0x0c, 0x40, 0x00, 0x00, | ||
| 350 | 0x91, 0x24, 0x04, 0x68, 0x00, 0x20, 0x70, 0xff, | ||
| 351 | 0x7b, 0x7f, 0x70, 0x00, 0x05, 0x9b, 0xdd, 0x66, | ||
| 352 | // Entry 280 - 2BF | ||
| 353 | 0x03, 0x00, 0x11, 0x00, 0x00, 0x00, 0x40, 0x05, | ||
| 354 | 0xb5, 0xb6, 0x80, 0x08, 0x04, 0x00, 0x04, 0x51, | ||
| 355 | 0xe2, 0xef, 0xfd, 0x3f, 0x05, 0x09, 0x08, 0x05, | ||
| 356 | 0x40, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, | ||
| 357 | 0x0c, 0x00, 0x00, 0x00, 0x00, 0x81, 0x00, 0x60, | ||
| 358 | 0xe7, 0x48, 0x00, 0x81, 0x20, 0xc0, 0x05, 0x80, | ||
| 359 | 0x03, 0x00, 0x00, 0x00, 0x8c, 0x50, 0x40, 0x04, | ||
| 360 | 0x84, 0x47, 0x84, 0x40, 0x20, 0x10, 0x00, 0x20, | ||
| 361 | // Entry 2C0 - 2FF | ||
| 362 | 0x02, 0x50, 0x80, 0x11, 0x00, 0x99, 0x6c, 0xe2, | ||
| 363 | 0x50, 0x27, 0x1d, 0x11, 0x29, 0x0e, 0x59, 0xe9, | ||
| 364 | 0x33, 0x08, 0x00, 0x20, 0x04, 0x40, 0x10, 0x00, | ||
| 365 | 0x00, 0x00, 0x50, 0x44, 0x92, 0x49, 0xd6, 0x5d, | ||
| 366 | 0xa7, 0x81, 0x47, 0x97, 0xfb, 0x00, 0x10, 0x00, | ||
| 367 | 0x08, 0x00, 0x80, 0x00, 0x40, 0x04, 0x00, 0x01, | ||
| 368 | 0x02, 0x00, 0x01, 0x40, 0x80, 0x00, 0x40, 0x08, | ||
| 369 | 0xd8, 0xeb, 0xf6, 0x39, 0xc4, 0x8d, 0x12, 0x00, | ||
| 370 | // Entry 300 - 33F | ||
| 371 | 0x00, 0x0c, 0x04, 0x01, 0x20, 0x20, 0xdd, 0xa0, | ||
| 372 | 0x01, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, | ||
| 373 | 0x04, 0x10, 0xd0, 0x9d, 0x95, 0x13, 0x04, 0x80, | ||
| 374 | 0x00, 0x01, 0xd0, 0x16, 0x40, 0x00, 0x10, 0xb0, | ||
| 375 | 0x10, 0x62, 0x4c, 0xd2, 0x02, 0x01, 0x4a, 0x00, | ||
| 376 | 0x46, 0x04, 0x00, 0x08, 0x02, 0x00, 0x20, 0x80, | ||
| 377 | 0x00, 0x80, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, | ||
| 378 | 0x00, 0xf0, 0xd8, 0x6f, 0x15, 0x02, 0x08, 0x00, | ||
| 379 | // Entry 340 - 37F | ||
| 380 | 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01, | ||
| 381 | 0x00, 0x10, 0x00, 0x00, 0x00, 0xf0, 0x84, 0xe3, | ||
| 382 | 0xdd, 0xbf, 0xf9, 0xf9, 0x3b, 0x7f, 0x7f, 0xdb, | ||
| 383 | 0xfd, 0xfc, 0xfe, 0xdf, 0xff, 0xfd, 0xff, 0xf6, | ||
| 384 | 0xfb, 0xfc, 0xf7, 0x1f, 0xff, 0xb3, 0x6c, 0xff, | ||
| 385 | 0xd9, 0xad, 0xdf, 0xfe, 0xef, 0xba, 0xdf, 0xff, | ||
| 386 | 0xff, 0xff, 0xb7, 0xdd, 0x7d, 0xbf, 0xab, 0x7f, | ||
| 387 | 0xfd, 0xfd, 0xdf, 0x2f, 0x9c, 0xdf, 0xf3, 0x6f, | ||
| 388 | // Entry 380 - 3BF | ||
| 389 | 0xdf, 0xdd, 0xff, 0xfb, 0xee, 0xd2, 0xab, 0x5f, | ||
| 390 | 0xd5, 0xdf, 0x7f, 0xff, 0xeb, 0xff, 0xe4, 0x4d, | ||
| 391 | 0xf9, 0xff, 0xfe, 0xf7, 0xfd, 0xdf, 0xfb, 0xbf, | ||
| 392 | 0xee, 0xdb, 0x6f, 0xef, 0xff, 0x7f, 0xff, 0xff, | ||
| 393 | 0xf7, 0x5f, 0xd3, 0x3b, 0xfd, 0xd9, 0xdf, 0xeb, | ||
| 394 | 0xbc, 0x08, 0x05, 0x24, 0xff, 0x07, 0x70, 0xfe, | ||
| 395 | 0xe6, 0x5e, 0x00, 0x08, 0x00, 0x83, 0x7d, 0x1f, | ||
| 396 | 0x06, 0xe6, 0x72, 0x60, 0xd1, 0x3c, 0x7f, 0x44, | ||
| 397 | // Entry 3C0 - 3FF | ||
| 398 | 0x02, 0x30, 0x9f, 0x7a, 0x16, 0xbd, 0x7f, 0x57, | ||
| 399 | 0xf2, 0xff, 0x31, 0xff, 0xf2, 0x1e, 0x90, 0xf7, | ||
| 400 | 0xf1, 0xf9, 0x45, 0x80, 0x01, 0x02, 0x00, 0x20, | ||
| 401 | 0x40, 0x54, 0x9f, 0x8a, 0xdf, 0xf9, 0x6e, 0x11, | ||
| 402 | 0x86, 0x51, 0xc0, 0xf3, 0xfb, 0x47, 0x40, 0x03, | ||
| 403 | 0x05, 0xd1, 0x50, 0x5c, 0x00, 0x40, 0x00, 0x10, | ||
| 404 | 0x04, 0x02, 0x00, 0x00, 0x0a, 0x00, 0x17, 0xd2, | ||
| 405 | 0xb9, 0xfd, 0xfc, 0xba, 0xfe, 0xef, 0xc7, 0xbe, | ||
| 406 | // Entry 400 - 43F | ||
| 407 | 0x53, 0x6f, 0xdf, 0xe7, 0xdb, 0x65, 0xbb, 0x7f, | ||
| 408 | 0xfa, 0xff, 0x77, 0xf3, 0xef, 0xbf, 0xfd, 0xf7, | ||
| 409 | 0xdf, 0xdf, 0x9b, 0x7f, 0xff, 0xff, 0x7f, 0x6f, | ||
| 410 | 0xf7, 0xfb, 0xeb, 0xdf, 0xbc, 0xff, 0xbf, 0x6b, | ||
| 411 | 0x7b, 0xfb, 0xff, 0xce, 0x76, 0xbd, 0xf7, 0xf7, | ||
| 412 | 0xdf, 0xdc, 0xf7, 0xf7, 0xff, 0xdf, 0xf3, 0xfe, | ||
| 413 | 0xef, 0xff, 0xff, 0xff, 0xb6, 0x7f, 0x7f, 0xde, | ||
| 414 | 0xf7, 0xb9, 0xeb, 0x77, 0xff, 0xfb, 0xbf, 0xdf, | ||
| 415 | // Entry 440 - 47F | ||
| 416 | 0xfd, 0xfe, 0xfb, 0xff, 0xfe, 0xeb, 0x1f, 0x7d, | ||
| 417 | 0x2f, 0xfd, 0xb6, 0xb5, 0xa5, 0xfc, 0xff, 0xfd, | ||
| 418 | 0x7f, 0x4e, 0xbf, 0x8f, 0xae, 0xff, 0xee, 0xdf, | ||
| 419 | 0x7f, 0xf7, 0x73, 0x02, 0x02, 0x04, 0xfc, 0xf7, | ||
| 420 | 0xff, 0xb7, 0xd7, 0xef, 0xfe, 0xcd, 0xf5, 0xce, | ||
| 421 | 0xe2, 0x8e, 0xe7, 0xbf, 0xb7, 0xff, 0x56, 0xfd, | ||
| 422 | 0xcd, 0xff, 0xfb, 0xff, 0xdf, 0xd7, 0xea, 0xff, | ||
| 423 | 0xe5, 0x5f, 0x6d, 0x0f, 0xa7, 0x51, 0x06, 0xc4, | ||
| 424 | // Entry 480 - 4BF | ||
| 425 | 0x93, 0x50, 0x5d, 0xaf, 0xa6, 0xff, 0x99, 0xfb, | ||
| 426 | 0x63, 0x1d, 0x53, 0xff, 0xef, 0xb7, 0x35, 0x20, | ||
| 427 | 0x14, 0x00, 0x55, 0x51, 0xc2, 0x65, 0xf5, 0x41, | ||
| 428 | 0xe2, 0xff, 0xfc, 0xdf, 0x02, 0x85, 0xc5, 0x05, | ||
| 429 | 0x00, 0x22, 0x00, 0x74, 0x69, 0x10, 0x08, 0x05, | ||
| 430 | 0x41, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, | ||
| 431 | 0x00, 0x51, 0x20, 0x05, 0x04, 0x01, 0x00, 0x00, | ||
| 432 | 0x06, 0x11, 0x20, 0x00, 0x18, 0x01, 0x92, 0xf1, | ||
| 433 | // Entry 4C0 - 4FF | ||
| 434 | 0xfd, 0x47, 0x69, 0x06, 0x95, 0x06, 0x57, 0xed, | ||
| 435 | 0xfb, 0x4d, 0x1c, 0x6b, 0x83, 0x04, 0x62, 0x40, | ||
| 436 | 0x00, 0x11, 0x42, 0x00, 0x00, 0x00, 0x54, 0x83, | ||
| 437 | 0xb8, 0x4f, 0x10, 0x8e, 0x89, 0x46, 0xde, 0xf7, | ||
| 438 | 0x13, 0x31, 0x00, 0x20, 0x00, 0x00, 0x00, 0x90, | ||
| 439 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x10, 0x00, | ||
| 440 | 0x01, 0x00, 0x00, 0xf0, 0x5b, 0xf4, 0xbe, 0x3d, | ||
| 441 | 0xbe, 0xcf, 0xf7, 0xaf, 0x42, 0x04, 0x84, 0x41, | ||
| 442 | // Entry 500 - 53F | ||
| 443 | 0x30, 0xff, 0x79, 0x72, 0x04, 0x00, 0x00, 0x49, | ||
| 444 | 0x2d, 0x14, 0x27, 0x5f, 0xed, 0xf1, 0x3f, 0xe7, | ||
| 445 | 0x3f, 0x00, 0x00, 0x02, 0xc6, 0xa0, 0x1e, 0xf8, | ||
| 446 | 0xbb, 0xff, 0xfd, 0xfb, 0xb7, 0xfd, 0xe7, 0xf7, | ||
| 447 | 0xfd, 0xfc, 0xd5, 0xed, 0x47, 0xf4, 0x7e, 0x10, | ||
| 448 | 0x01, 0x01, 0x84, 0x6d, 0xff, 0xf7, 0xdd, 0xf9, | ||
| 449 | 0x5b, 0x05, 0x86, 0xed, 0xf5, 0x77, 0xbd, 0x3c, | ||
| 450 | 0x00, 0x00, 0x00, 0x42, 0x71, 0x42, 0x00, 0x40, | ||
| 451 | // Entry 540 - 57F | ||
| 452 | 0x00, 0x00, 0x01, 0x43, 0x19, 0x24, 0x08, 0x00, | ||
| 453 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, | ||
| 454 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, | ||
| 455 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, | ||
| 456 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, | ||
| 457 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, | ||
| 458 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, | ||
| 459 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, | ||
| 460 | // Entry 580 - 5BF | ||
| 461 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, | ||
| 462 | 0xff, 0xab, 0xbd, 0xe7, 0x57, 0xee, 0x13, 0x5d, | ||
| 463 | 0x09, 0xc1, 0x40, 0x21, 0xfa, 0x17, 0x01, 0x80, | ||
| 464 | 0x00, 0x00, 0x00, 0x00, 0xf0, 0xce, 0xfb, 0xbf, | ||
| 465 | 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, | ||
| 466 | 0x00, 0x30, 0x15, 0xa3, 0x10, 0x00, 0x00, 0x00, | ||
| 467 | 0x11, 0x04, 0x16, 0x00, 0x00, 0x02, 0x20, 0x81, | ||
| 468 | 0xa3, 0x01, 0x50, 0x00, 0x00, 0x83, 0x11, 0x40, | ||
| 469 | // Entry 5C0 - 5FF | ||
| 470 | 0x00, 0x00, 0x00, 0xf0, 0xdd, 0x7b, 0xbe, 0x02, | ||
| 471 | 0xaa, 0x10, 0x5d, 0x98, 0x52, 0x00, 0x80, 0x20, | ||
| 472 | 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x02, 0x02, | ||
| 473 | 0x3d, 0x40, 0x10, 0x02, 0x10, 0x61, 0x5a, 0x9d, | ||
| 474 | 0x31, 0x00, 0x00, 0x00, 0x01, 0x18, 0x02, 0x20, | ||
| 475 | 0x00, 0x00, 0x01, 0x00, 0x42, 0x00, 0x20, 0x00, | ||
| 476 | 0x00, 0x1f, 0xdf, 0xd2, 0xb9, 0xff, 0xfd, 0x3f, | ||
| 477 | 0x1f, 0x98, 0xcf, 0x9c, 0xff, 0xaf, 0x5f, 0xfe, | ||
| 478 | // Entry 600 - 63F | ||
| 479 | 0x7b, 0x4b, 0x40, 0x10, 0xe1, 0xfd, 0xaf, 0xd9, | ||
| 480 | 0xb7, 0xf6, 0xfb, 0xb3, 0xc7, 0xff, 0x6f, 0xf1, | ||
| 481 | 0x73, 0xb1, 0x7f, 0x9f, 0x7f, 0xbd, 0xfc, 0xb7, | ||
| 482 | 0xee, 0x1c, 0xfa, 0xcb, 0xef, 0xdd, 0xf9, 0xbd, | ||
| 483 | 0x6e, 0xae, 0x55, 0xfd, 0x6e, 0x81, 0x76, 0x9f, | ||
| 484 | 0xd4, 0x77, 0xf5, 0x7d, 0xfb, 0xff, 0xeb, 0xfe, | ||
| 485 | 0xbe, 0x5f, 0x46, 0x5b, 0xe9, 0x5f, 0x50, 0x18, | ||
| 486 | 0x02, 0xfa, 0xf7, 0x9d, 0x15, 0x97, 0x05, 0x0f, | ||
| 487 | // Entry 640 - 67F | ||
| 488 | 0x75, 0xc4, 0x7d, 0x81, 0x92, 0xf5, 0x57, 0x6c, | ||
| 489 | 0xff, 0xe4, 0xef, 0x6f, 0xff, 0xfc, 0xdd, 0xde, | ||
| 490 | 0xfc, 0xfd, 0x76, 0x5f, 0x7a, 0x3f, 0x00, 0x98, | ||
| 491 | 0x02, 0xfb, 0xa3, 0xef, 0xf3, 0xd6, 0xf2, 0xff, | ||
| 492 | 0xb9, 0xda, 0x7d, 0xd0, 0x3e, 0x15, 0x7b, 0xb4, | ||
| 493 | 0xf5, 0x3e, 0xff, 0xff, 0xf1, 0xf7, 0xff, 0xe7, | ||
| 494 | 0x5f, 0xff, 0xff, 0x9e, 0xdf, 0xf6, 0xd7, 0xb9, | ||
| 495 | 0xef, 0x27, 0x80, 0xbb, 0xc5, 0xff, 0xff, 0xe3, | ||
| 496 | // Entry 680 - 6BF | ||
| 497 | 0x97, 0x9d, 0xbf, 0x9f, 0xf7, 0xc7, 0xfd, 0x37, | ||
| 498 | 0xce, 0x7f, 0x44, 0x1d, 0x73, 0x7f, 0xf8, 0xda, | ||
| 499 | 0x5d, 0xce, 0x7d, 0x06, 0xb9, 0xea, 0x79, 0xa0, | ||
| 500 | 0x1a, 0x20, 0x00, 0x30, 0x02, 0x04, 0x24, 0x08, | ||
| 501 | 0x04, 0x00, 0x00, 0x40, 0xd4, 0x02, 0x04, 0x00, | ||
| 502 | 0x00, 0x04, 0x00, 0x04, 0x00, 0x20, 0x09, 0x06, | ||
| 503 | 0x50, 0x00, 0x08, 0x00, 0x00, 0x00, 0x24, 0x00, | ||
| 504 | 0x04, 0x00, 0x10, 0xdc, 0x58, 0xd7, 0x0d, 0x0f, | ||
| 505 | // Entry 6C0 - 6FF | ||
| 506 | 0x54, 0x4d, 0xf1, 0x16, 0x44, 0xd5, 0x42, 0x08, | ||
| 507 | 0x40, 0x02, 0x00, 0x40, 0x00, 0x08, 0x00, 0x00, | ||
| 508 | 0x00, 0xdc, 0xfb, 0xcb, 0x0e, 0x58, 0x48, 0x41, | ||
| 509 | 0x24, 0x20, 0x04, 0x00, 0x30, 0x12, 0x40, 0x00, | ||
| 510 | 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 511 | 0x01, 0x00, 0x00, 0x00, 0x80, 0x10, 0x10, 0xab, | ||
| 512 | 0x6d, 0x93, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, | ||
| 513 | 0x00, 0x00, 0x00, 0x80, 0x80, 0x25, 0x00, 0x00, | ||
| 514 | // Entry 700 - 73F | ||
| 515 | 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, | ||
| 516 | 0x80, 0x86, 0xc2, 0x00, 0x00, 0x01, 0x00, 0x01, | ||
| 517 | 0xff, 0x18, 0x02, 0x00, 0x02, 0xf0, 0xfd, 0x79, | ||
| 518 | 0x3b, 0x00, 0x25, 0x00, 0x00, 0x00, 0x02, 0x00, | ||
| 519 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, | ||
| 520 | 0x03, 0x00, 0x09, 0x20, 0x00, 0x00, 0x01, 0x00, | ||
| 521 | 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, | ||
| 522 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 523 | // Entry 740 - 77F | ||
| 524 | 0x00, 0x00, 0x00, 0xef, 0xd5, 0xfd, 0xcf, 0x7e, | ||
| 525 | 0xb0, 0x11, 0x00, 0x00, 0x00, 0x92, 0x01, 0x46, | ||
| 526 | 0xcd, 0xf9, 0x5c, 0x00, 0x01, 0x00, 0x30, 0x04, | ||
| 527 | 0x04, 0x55, 0x00, 0x01, 0x04, 0xf4, 0x3f, 0x4a, | ||
| 528 | 0x01, 0x00, 0x00, 0xb0, 0x80, 0x20, 0x55, 0x75, | ||
| 529 | 0x97, 0x7c, 0xdf, 0x31, 0xcc, 0x68, 0xd1, 0x03, | ||
| 530 | 0xd5, 0x57, 0x27, 0x14, 0x01, 0x00, 0x00, 0x00, | ||
| 531 | 0x00, 0x00, 0x2c, 0xf7, 0xcb, 0x1f, 0x14, 0x60, | ||
| 532 | // Entry 780 - 7BF | ||
| 533 | 0x83, 0x68, 0x01, 0x10, 0x8b, 0x38, 0x8a, 0x01, | ||
| 534 | 0x00, 0x00, 0x20, 0x00, 0x24, 0x44, 0x00, 0x00, | ||
| 535 | 0x10, 0x03, 0x31, 0x02, 0x01, 0x00, 0x00, 0xf0, | ||
| 536 | 0xf5, 0xff, 0xd5, 0x97, 0xbc, 0x70, 0xd6, 0x78, | ||
| 537 | 0x78, 0x15, 0x50, 0x05, 0xa4, 0x84, 0xa9, 0x41, | ||
| 538 | 0x00, 0x00, 0x00, 0x6b, 0x39, 0x52, 0x74, 0x40, | ||
| 539 | 0xe8, 0x30, 0x90, 0x6a, 0x92, 0x00, 0x00, 0x02, | ||
| 540 | 0xff, 0xef, 0xff, 0x4b, 0x85, 0x53, 0xf4, 0xed, | ||
| 541 | // Entry 7C0 - 7FF | ||
| 542 | 0xdd, 0xbf, 0xf2, 0x5d, 0xc7, 0x0c, 0xd5, 0x42, | ||
| 543 | 0xfc, 0xff, 0xf7, 0x1f, 0x00, 0x80, 0x40, 0x56, | ||
| 544 | 0xcc, 0x16, 0x9e, 0xea, 0x35, 0x7d, 0xef, 0xff, | ||
| 545 | 0xbd, 0xa4, 0xaf, 0x01, 0x44, 0x18, 0x01, 0x4d, | ||
| 546 | 0x4e, 0x4a, 0x08, 0x50, 0x28, 0x30, 0xe0, 0x80, | ||
| 547 | 0x10, 0x20, 0x24, 0x00, 0xff, 0x2f, 0xd3, 0x60, | ||
| 548 | 0xfe, 0x01, 0x02, 0x88, 0x2a, 0x40, 0x16, 0x01, | ||
| 549 | 0x01, 0x15, 0x2b, 0x3c, 0x01, 0x00, 0x00, 0x10, | ||
| 550 | // Entry 800 - 83F | ||
| 551 | 0x90, 0x49, 0x41, 0x02, 0x02, 0x01, 0xe1, 0xbf, | ||
| 552 | 0xbf, 0x03, 0x00, 0x00, 0x10, 0xdc, 0xa3, 0xd1, | ||
| 553 | 0x40, 0x9c, 0x44, 0xdf, 0xf5, 0x8f, 0x66, 0xb3, | ||
| 554 | 0x55, 0x20, 0xd4, 0xc1, 0xd8, 0x30, 0x3d, 0x80, | ||
| 555 | 0x00, 0x00, 0x00, 0x04, 0xd4, 0x11, 0xc5, 0x84, | ||
| 556 | 0x2f, 0x50, 0x00, 0x22, 0x50, 0x6e, 0xbd, 0x93, | ||
| 557 | 0x07, 0x00, 0x20, 0x10, 0x84, 0xb2, 0x45, 0x10, | ||
| 558 | 0x06, 0x44, 0x00, 0x00, 0x12, 0x02, 0x11, 0x00, | ||
| 559 | // Entry 840 - 87F | ||
| 560 | 0xf0, 0xfb, 0xfd, 0x7f, 0x05, 0x00, 0x16, 0x89, | ||
| 561 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x03, | ||
| 562 | 0x00, 0x00, 0x00, 0x00, 0x03, 0x30, 0x02, 0x28, | ||
| 563 | 0x84, 0x00, 0x21, 0xc0, 0x23, 0x24, 0x00, 0x00, | ||
| 564 | 0x00, 0xcb, 0xe4, 0x3a, 0x46, 0x88, 0x54, 0xf1, | ||
| 565 | 0xef, 0xff, 0x7f, 0x12, 0x01, 0x01, 0x84, 0x50, | ||
| 566 | 0x07, 0xfc, 0xff, 0xff, 0x0f, 0x01, 0x00, 0x40, | ||
| 567 | 0x10, 0x38, 0x01, 0x01, 0x1c, 0x12, 0x40, 0xe1, | ||
| 568 | // Entry 880 - 8BF | ||
| 569 | 0x76, 0x16, 0x08, 0x03, 0x10, 0x00, 0x00, 0x00, | ||
| 570 | 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x24, | ||
| 571 | 0x0a, 0x00, 0x80, 0x00, 0x00, | ||
| 572 | } | ||
| 573 | |||
| 574 | // altLangISO3 holds an alphabetically sorted list of 3-letter language code alternatives | ||
| 575 | // to 2-letter language codes that cannot be derived using the method described above. | ||
| 576 | // Each 3-letter code is followed by its 1-byte langID. | ||
| 577 | const altLangISO3 tag.Index = "---\x00cor\x00hbs\x01heb\x02kin\x03spa\x04yid\x05\xff\xff\xff\xff" | ||
| 578 | |||
| 579 | // altLangIndex is used to convert indexes in altLangISO3 to langIDs. | ||
| 580 | // Size: 12 bytes, 6 elements | ||
| 581 | var altLangIndex = [6]uint16{ | ||
| 582 | 0x0281, 0x0407, 0x01fb, 0x03e5, 0x013e, 0x0208, | ||
| 583 | } | ||
| 584 | |||
| 585 | // AliasMap maps langIDs to their suggested replacements. | ||
| 586 | // Size: 772 bytes, 193 elements | ||
| 587 | var AliasMap = [193]FromTo{ | ||
| 588 | 0: {From: 0x82, To: 0x88}, | ||
| 589 | 1: {From: 0x187, To: 0x1ae}, | ||
| 590 | 2: {From: 0x1f3, To: 0x1e1}, | ||
| 591 | 3: {From: 0x1fb, To: 0x1bc}, | ||
| 592 | 4: {From: 0x208, To: 0x512}, | ||
| 593 | 5: {From: 0x20f, To: 0x20e}, | ||
| 594 | 6: {From: 0x310, To: 0x3dc}, | ||
| 595 | 7: {From: 0x347, To: 0x36f}, | ||
| 596 | 8: {From: 0x407, To: 0x432}, | ||
| 597 | 9: {From: 0x47a, To: 0x153}, | ||
| 598 | 10: {From: 0x490, To: 0x451}, | ||
| 599 | 11: {From: 0x4a2, To: 0x21}, | ||
| 600 | 12: {From: 0x53e, To: 0x544}, | ||
| 601 | 13: {From: 0x58f, To: 0x12d}, | ||
| 602 | 14: {From: 0x62b, To: 0x34}, | ||
| 603 | 15: {From: 0x62f, To: 0x14}, | ||
| 604 | 16: {From: 0x630, To: 0x1eb1}, | ||
| 605 | 17: {From: 0x651, To: 0x431}, | ||
| 606 | 18: {From: 0x662, To: 0x431}, | ||
| 607 | 19: {From: 0x6ed, To: 0x3a}, | ||
| 608 | 20: {From: 0x6f8, To: 0x1d7}, | ||
| 609 | 21: {From: 0x709, To: 0x3625}, | ||
| 610 | 22: {From: 0x73e, To: 0x21a1}, | ||
| 611 | 23: {From: 0x7b3, To: 0x56}, | ||
| 612 | 24: {From: 0x7b9, To: 0x299b}, | ||
| 613 | 25: {From: 0x7c5, To: 0x58}, | ||
| 614 | 26: {From: 0x7e6, To: 0x145}, | ||
| 615 | 27: {From: 0x80c, To: 0x5a}, | ||
| 616 | 28: {From: 0x815, To: 0x8d}, | ||
| 617 | 29: {From: 0x87e, To: 0x810}, | ||
| 618 | 30: {From: 0x8a8, To: 0x8b7}, | ||
| 619 | 31: {From: 0x8c3, To: 0xee3}, | ||
| 620 | 32: {From: 0x8fa, To: 0x1dc}, | ||
| 621 | 33: {From: 0x9ef, To: 0x331}, | ||
| 622 | 34: {From: 0xa36, To: 0x2c5}, | ||
| 623 | 35: {From: 0xa3d, To: 0xbf}, | ||
| 624 | 36: {From: 0xabe, To: 0x3322}, | ||
| 625 | 37: {From: 0xb38, To: 0x529}, | ||
| 626 | 38: {From: 0xb75, To: 0x265a}, | ||
| 627 | 39: {From: 0xb7e, To: 0xbc3}, | ||
| 628 | 40: {From: 0xb9b, To: 0x44e}, | ||
| 629 | 41: {From: 0xbbc, To: 0x4229}, | ||
| 630 | 42: {From: 0xbbf, To: 0x529}, | ||
| 631 | 43: {From: 0xbfe, To: 0x2da7}, | ||
| 632 | 44: {From: 0xc2e, To: 0x3181}, | ||
| 633 | 45: {From: 0xcb9, To: 0xf3}, | ||
| 634 | 46: {From: 0xd08, To: 0xfa}, | ||
| 635 | 47: {From: 0xdc8, To: 0x11a}, | ||
| 636 | 48: {From: 0xdd7, To: 0x32d}, | ||
| 637 | 49: {From: 0xdf8, To: 0xdfb}, | ||
| 638 | 50: {From: 0xdfe, To: 0x531}, | ||
| 639 | 51: {From: 0xe01, To: 0xdf3}, | ||
| 640 | 52: {From: 0xedf, To: 0x205a}, | ||
| 641 | 53: {From: 0xee9, To: 0x222e}, | ||
| 642 | 54: {From: 0xeee, To: 0x2e9a}, | ||
| 643 | 55: {From: 0xf39, To: 0x367}, | ||
| 644 | 56: {From: 0x10d0, To: 0x140}, | ||
| 645 | 57: {From: 0x1104, To: 0x2d0}, | ||
| 646 | 58: {From: 0x11a0, To: 0x1ec}, | ||
| 647 | 59: {From: 0x1279, To: 0x21}, | ||
| 648 | 60: {From: 0x1424, To: 0x15e}, | ||
| 649 | 61: {From: 0x1470, To: 0x14e}, | ||
| 650 | 62: {From: 0x151f, To: 0xd9b}, | ||
| 651 | 63: {From: 0x1523, To: 0x390}, | ||
| 652 | 64: {From: 0x1532, To: 0x19f}, | ||
| 653 | 65: {From: 0x1580, To: 0x210}, | ||
| 654 | 66: {From: 0x1583, To: 0x10d}, | ||
| 655 | 67: {From: 0x15a3, To: 0x3caf}, | ||
| 656 | 68: {From: 0x1630, To: 0x222e}, | ||
| 657 | 69: {From: 0x166a, To: 0x19b}, | ||
| 658 | 70: {From: 0x16c8, To: 0x136}, | ||
| 659 | 71: {From: 0x1700, To: 0x29f8}, | ||
| 660 | 72: {From: 0x1718, To: 0x194}, | ||
| 661 | 73: {From: 0x1727, To: 0xf3f}, | ||
| 662 | 74: {From: 0x177a, To: 0x178}, | ||
| 663 | 75: {From: 0x1809, To: 0x17b6}, | ||
| 664 | 76: {From: 0x1816, To: 0x18f3}, | ||
| 665 | 77: {From: 0x188a, To: 0x436}, | ||
| 666 | 78: {From: 0x1979, To: 0x1d01}, | ||
| 667 | 79: {From: 0x1a74, To: 0x2bb0}, | ||
| 668 | 80: {From: 0x1a8a, To: 0x1f8}, | ||
| 669 | 81: {From: 0x1b5a, To: 0x1fa}, | ||
| 670 | 82: {From: 0x1b86, To: 0x1515}, | ||
| 671 | 83: {From: 0x1d64, To: 0x2c9b}, | ||
| 672 | 84: {From: 0x2038, To: 0x37b1}, | ||
| 673 | 85: {From: 0x203d, To: 0x20dd}, | ||
| 674 | 86: {From: 0x2042, To: 0x2e00}, | ||
| 675 | 87: {From: 0x205a, To: 0x30b}, | ||
| 676 | 88: {From: 0x20e3, To: 0x274}, | ||
| 677 | 89: {From: 0x20ee, To: 0x263}, | ||
| 678 | 90: {From: 0x20f2, To: 0x22d}, | ||
| 679 | 91: {From: 0x20f9, To: 0x256}, | ||
| 680 | 92: {From: 0x210f, To: 0x21eb}, | ||
| 681 | 93: {From: 0x2135, To: 0x27d}, | ||
| 682 | 94: {From: 0x2160, To: 0x913}, | ||
| 683 | 95: {From: 0x2199, To: 0x121}, | ||
| 684 | 96: {From: 0x21ce, To: 0x1561}, | ||
| 685 | 97: {From: 0x21e6, To: 0x504}, | ||
| 686 | 98: {From: 0x21f4, To: 0x49f}, | ||
| 687 | 99: {From: 0x21fb, To: 0x269}, | ||
| 688 | 100: {From: 0x222d, To: 0x121}, | ||
| 689 | 101: {From: 0x2237, To: 0x121}, | ||
| 690 | 102: {From: 0x2248, To: 0x217d}, | ||
| 691 | 103: {From: 0x2262, To: 0x92a}, | ||
| 692 | 104: {From: 0x2316, To: 0x3226}, | ||
| 693 | 105: {From: 0x236a, To: 0x2835}, | ||
| 694 | 106: {From: 0x2382, To: 0x3365}, | ||
| 695 | 107: {From: 0x2472, To: 0x2c7}, | ||
| 696 | 108: {From: 0x24e4, To: 0x2ff}, | ||
| 697 | 109: {From: 0x24f0, To: 0x2fa}, | ||
| 698 | 110: {From: 0x24fa, To: 0x31f}, | ||
| 699 | 111: {From: 0x2550, To: 0xb5b}, | ||
| 700 | 112: {From: 0x25a9, To: 0xe2}, | ||
| 701 | 113: {From: 0x263e, To: 0x2d0}, | ||
| 702 | 114: {From: 0x26c9, To: 0x26b4}, | ||
| 703 | 115: {From: 0x26f9, To: 0x3c8}, | ||
| 704 | 116: {From: 0x2727, To: 0x3caf}, | ||
| 705 | 117: {From: 0x2755, To: 0x6a4}, | ||
| 706 | 118: {From: 0x2765, To: 0x26b4}, | ||
| 707 | 119: {From: 0x2789, To: 0x4358}, | ||
| 708 | 120: {From: 0x27c9, To: 0x2001}, | ||
| 709 | 121: {From: 0x28ea, To: 0x27b1}, | ||
| 710 | 122: {From: 0x28ef, To: 0x2837}, | ||
| 711 | 123: {From: 0x28fe, To: 0xaa5}, | ||
| 712 | 124: {From: 0x2914, To: 0x351}, | ||
| 713 | 125: {From: 0x2986, To: 0x2da7}, | ||
| 714 | 126: {From: 0x29f0, To: 0x96b}, | ||
| 715 | 127: {From: 0x2b1a, To: 0x38d}, | ||
| 716 | 128: {From: 0x2bfc, To: 0x395}, | ||
| 717 | 129: {From: 0x2c3f, To: 0x3caf}, | ||
| 718 | 130: {From: 0x2ce1, To: 0x2201}, | ||
| 719 | 131: {From: 0x2cfc, To: 0x3be}, | ||
| 720 | 132: {From: 0x2d13, To: 0x597}, | ||
| 721 | 133: {From: 0x2d47, To: 0x148}, | ||
| 722 | 134: {From: 0x2d48, To: 0x148}, | ||
| 723 | 135: {From: 0x2dff, To: 0x2f1}, | ||
| 724 | 136: {From: 0x2e08, To: 0x19cc}, | ||
| 725 | 137: {From: 0x2e10, To: 0xc45}, | ||
| 726 | 138: {From: 0x2e1a, To: 0x2d95}, | ||
| 727 | 139: {From: 0x2e21, To: 0x292}, | ||
| 728 | 140: {From: 0x2e54, To: 0x7d}, | ||
| 729 | 141: {From: 0x2e65, To: 0x2282}, | ||
| 730 | 142: {From: 0x2e97, To: 0x1a4}, | ||
| 731 | 143: {From: 0x2ea0, To: 0x2e9b}, | ||
| 732 | 144: {From: 0x2eef, To: 0x2ed7}, | ||
| 733 | 145: {From: 0x3193, To: 0x3c4}, | ||
| 734 | 146: {From: 0x3366, To: 0x338e}, | ||
| 735 | 147: {From: 0x342a, To: 0x3dc}, | ||
| 736 | 148: {From: 0x34ee, To: 0x18d0}, | ||
| 737 | 149: {From: 0x35c8, To: 0x2c9b}, | ||
| 738 | 150: {From: 0x35e6, To: 0x412}, | ||
| 739 | 151: {From: 0x35f5, To: 0x24b}, | ||
| 740 | 152: {From: 0x360d, To: 0x1dc}, | ||
| 741 | 153: {From: 0x3658, To: 0x246}, | ||
| 742 | 154: {From: 0x3676, To: 0x3f4}, | ||
| 743 | 155: {From: 0x36fd, To: 0x445}, | ||
| 744 | 156: {From: 0x3747, To: 0x3b42}, | ||
| 745 | 157: {From: 0x37c0, To: 0x121}, | ||
| 746 | 158: {From: 0x3816, To: 0x38f2}, | ||
| 747 | 159: {From: 0x382a, To: 0x2b48}, | ||
| 748 | 160: {From: 0x382b, To: 0x2c9b}, | ||
| 749 | 161: {From: 0x382f, To: 0xa9}, | ||
| 750 | 162: {From: 0x3832, To: 0x3228}, | ||
| 751 | 163: {From: 0x386c, To: 0x39a6}, | ||
| 752 | 164: {From: 0x3892, To: 0x3fc0}, | ||
| 753 | 165: {From: 0x38a0, To: 0x45f}, | ||
| 754 | 166: {From: 0x38a5, To: 0x39d7}, | ||
| 755 | 167: {From: 0x38b4, To: 0x1fa4}, | ||
| 756 | 168: {From: 0x38b5, To: 0x2e9a}, | ||
| 757 | 169: {From: 0x38fa, To: 0x38f1}, | ||
| 758 | 170: {From: 0x395c, To: 0x47e}, | ||
| 759 | 171: {From: 0x3b4e, To: 0xd91}, | ||
| 760 | 172: {From: 0x3b78, To: 0x137}, | ||
| 761 | 173: {From: 0x3c99, To: 0x4bc}, | ||
| 762 | 174: {From: 0x3fbd, To: 0x100}, | ||
| 763 | 175: {From: 0x4208, To: 0xa91}, | ||
| 764 | 176: {From: 0x42be, To: 0x573}, | ||
| 765 | 177: {From: 0x42f9, To: 0x3f60}, | ||
| 766 | 178: {From: 0x4378, To: 0x25a}, | ||
| 767 | 179: {From: 0x43b8, To: 0xe6c}, | ||
| 768 | 180: {From: 0x43cd, To: 0x10f}, | ||
| 769 | 181: {From: 0x43d4, To: 0x4848}, | ||
| 770 | 182: {From: 0x44af, To: 0x3322}, | ||
| 771 | 183: {From: 0x44e3, To: 0x512}, | ||
| 772 | 184: {From: 0x45ca, To: 0x2409}, | ||
| 773 | 185: {From: 0x45dd, To: 0x26dc}, | ||
| 774 | 186: {From: 0x4610, To: 0x48ae}, | ||
| 775 | 187: {From: 0x46ae, To: 0x46a0}, | ||
| 776 | 188: {From: 0x473e, To: 0x4745}, | ||
| 777 | 189: {From: 0x4817, To: 0x3503}, | ||
| 778 | 190: {From: 0x483b, To: 0x208b}, | ||
| 779 | 191: {From: 0x4916, To: 0x31f}, | ||
| 780 | 192: {From: 0x49a7, To: 0x523}, | ||
| 781 | } | ||
| 782 | |||
| 783 | // Size: 193 bytes, 193 elements | ||
| 784 | var AliasTypes = [193]AliasType{ | ||
| 785 | // Entry 0 - 3F | ||
| 786 | 1, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 1, 0, 0, 0, 0, | ||
| 787 | 1, 2, 1, 1, 2, 0, 0, 1, 0, 1, 2, 1, 1, 0, 0, 0, | ||
| 788 | 0, 2, 1, 1, 0, 2, 0, 0, 1, 0, 1, 0, 0, 1, 2, 1, | ||
| 789 | 1, 1, 1, 0, 0, 0, 0, 2, 1, 1, 1, 1, 2, 1, 0, 1, | ||
| 790 | // Entry 40 - 7F | ||
| 791 | 1, 2, 2, 0, 0, 1, 2, 0, 1, 0, 1, 1, 1, 1, 0, 0, | ||
| 792 | 2, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, | ||
| 793 | 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 2, 2, 2, 0, | ||
| 794 | 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, | ||
| 795 | // Entry 80 - BF | ||
| 796 | 1, 0, 0, 1, 0, 2, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, | ||
| 797 | 0, 1, 1, 2, 0, 0, 2, 0, 0, 1, 1, 1, 0, 0, 0, 0, | ||
| 798 | 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 2, 0, | ||
| 799 | 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, | ||
| 800 | // Entry C0 - FF | ||
| 801 | 1, | ||
| 802 | } | ||
| 803 | |||
| 804 | const ( | ||
| 805 | _Latn = 91 | ||
| 806 | _Hani = 57 | ||
| 807 | _Hans = 59 | ||
| 808 | _Hant = 60 | ||
| 809 | _Qaaa = 149 | ||
| 810 | _Qaai = 157 | ||
| 811 | _Qabx = 198 | ||
| 812 | _Zinh = 255 | ||
| 813 | _Zyyy = 260 | ||
| 814 | _Zzzz = 261 | ||
| 815 | ) | ||
| 816 | |||
| 817 | // script is an alphabetically sorted list of ISO 15924 codes. The index | ||
| 818 | // of the script in the string, divided by 4, is the internal scriptID. | ||
| 819 | const script tag.Index = "" + // Size: 1052 bytes | ||
| 820 | "----AdlmAfakAghbAhomArabAranArmiArmnAvstBaliBamuBassBatkBengBhksBlisBopo" + | ||
| 821 | "BrahBraiBugiBuhdCakmCansCariChamCherChrsCirtCoptCpmnCprtCyrlCyrsDevaDiak" + | ||
| 822 | "DogrDsrtDuplEgydEgyhEgypElbaElymEthiGeokGeorGlagGongGonmGothGranGrekGujr" + | ||
| 823 | "GuruHanbHangHaniHanoHansHantHatrHebrHiraHluwHmngHmnpHrktHungIndsItalJamo" + | ||
| 824 | "JavaJpanJurcKaliKanaKawiKharKhmrKhojKitlKitsKndaKoreKpelKthiLanaLaooLatf" + | ||
| 825 | "LatgLatnLekeLepcLimbLinaLinbLisuLomaLyciLydiMahjMakaMandManiMarcMayaMedf" + | ||
| 826 | "MendMercMeroMlymModiMongMoonMrooMteiMultMymrNagmNandNarbNbatNewaNkdbNkgb" + | ||
| 827 | "NkooNshuOgamOlckOrkhOryaOsgeOsmaOugrPalmPaucPcunPelmPermPhagPhliPhlpPhlv" + | ||
| 828 | "PhnxPiqdPlrdPrtiPsinQaaaQaabQaacQaadQaaeQaafQaagQaahQaaiQaajQaakQaalQaam" + | ||
| 829 | "QaanQaaoQaapQaaqQaarQaasQaatQaauQaavQaawQaaxQaayQaazQabaQabbQabcQabdQabe" + | ||
| 830 | "QabfQabgQabhQabiQabjQabkQablQabmQabnQaboQabpQabqQabrQabsQabtQabuQabvQabw" + | ||
| 831 | "QabxRanjRjngRohgRoroRunrSamrSaraSarbSaurSgnwShawShrdShuiSiddSindSinhSogd" + | ||
| 832 | "SogoSoraSoyoSundSunuSyloSyrcSyreSyrjSyrnTagbTakrTaleTaluTamlTangTavtTelu" + | ||
| 833 | "TengTfngTglgThaaThaiTibtTirhTnsaTotoUgarVaiiVispVithWaraWchoWoleXpeoXsux" + | ||
| 834 | "YeziYiiiZanbZinhZmthZsyeZsymZxxxZyyyZzzz\xff\xff\xff\xff" | ||
| 835 | |||
| 836 | // suppressScript is an index from langID to the dominant script for that language, | ||
| 837 | // if it exists. If a script is given, it should be suppressed from the language tag. | ||
| 838 | // Size: 1330 bytes, 1330 elements | ||
| 839 | var suppressScript = [1330]uint8{ | ||
| 840 | // Entry 0 - 3F | ||
| 841 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, | ||
| 842 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 843 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0x00, | ||
| 844 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 845 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, | ||
| 846 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 847 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 848 | 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 849 | // Entry 40 - 7F | ||
| 850 | 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, | ||
| 851 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 852 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0x00, | ||
| 853 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 854 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 855 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 856 | 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 857 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, | ||
| 858 | // Entry 80 - BF | ||
| 859 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 860 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 861 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 862 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 863 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, | ||
| 864 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 865 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, | ||
| 866 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 867 | // Entry C0 - FF | ||
| 868 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 869 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 870 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, | ||
| 871 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 872 | 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 873 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 874 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 875 | 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 876 | // Entry 100 - 13F | ||
| 877 | 0x5b, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 878 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, | ||
| 879 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 880 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, | ||
| 881 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 882 | 0xed, 0x00, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, | ||
| 883 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, | ||
| 884 | 0x00, 0x5b, 0x00, 0x00, 0x5b, 0x00, 0x5b, 0x00, | ||
| 885 | // Entry 140 - 17F | ||
| 886 | 0x5b, 0x00, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, | ||
| 887 | 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 888 | 0x00, 0x5b, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, | ||
| 889 | 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0x00, | ||
| 890 | 0x00, 0x5b, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 891 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0x5b, 0x00, | ||
| 892 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 893 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 894 | // Entry 180 - 1BF | ||
| 895 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 896 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 897 | 0x5b, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, | ||
| 898 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 899 | 0x00, 0x00, 0x00, 0x5b, 0x35, 0x00, 0x00, 0x00, | ||
| 900 | 0x00, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, | ||
| 901 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 902 | 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x22, 0x00, | ||
| 903 | // Entry 1C0 - 1FF | ||
| 904 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 905 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 906 | 0x00, 0x5b, 0x5b, 0x00, 0x5b, 0x5b, 0x00, 0x08, | ||
| 907 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 908 | 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 909 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 910 | 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, | ||
| 911 | 0x5b, 0x5b, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, | ||
| 912 | // Entry 200 - 23F | ||
| 913 | 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 914 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 915 | 0x2e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 916 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 917 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 918 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 919 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 920 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 921 | // Entry 240 - 27F | ||
| 922 | 0x00, 0x00, 0x20, 0x00, 0x00, 0x5b, 0x00, 0x00, | ||
| 923 | 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 924 | 0x00, 0x53, 0x00, 0x00, 0x54, 0x00, 0x22, 0x00, | ||
| 925 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 926 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 927 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 928 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 929 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 930 | // Entry 280 - 2BF | ||
| 931 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 932 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0x00, | ||
| 933 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, | ||
| 934 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 935 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 936 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 937 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, | ||
| 938 | 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 939 | // Entry 2C0 - 2FF | ||
| 940 | 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, | ||
| 941 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, | ||
| 942 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 943 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 944 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 945 | 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 946 | 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, | ||
| 947 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, | ||
| 948 | // Entry 300 - 33F | ||
| 949 | 0x00, 0x00, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x00, | ||
| 950 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 951 | 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 952 | 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x5b, | ||
| 953 | 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 954 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 955 | 0x00, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 956 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0x00, | ||
| 957 | // Entry 340 - 37F | ||
| 958 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, | ||
| 959 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0x00, | ||
| 960 | 0x5b, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 961 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 962 | 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, | ||
| 963 | 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x5b, | ||
| 964 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x5b, 0x00, | ||
| 965 | 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 966 | // Entry 380 - 3BF | ||
| 967 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, | ||
| 968 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 969 | 0x5b, 0x00, 0x00, 0x00, 0x00, 0x83, 0x00, 0x00, | ||
| 970 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, | ||
| 971 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 972 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 973 | 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, | ||
| 974 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, | ||
| 975 | // Entry 3C0 - 3FF | ||
| 976 | 0x5b, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, | ||
| 977 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 978 | 0x00, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, | ||
| 979 | 0x00, 0x5b, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, | ||
| 980 | 0x00, 0x00, 0x20, 0x00, 0x00, 0x5b, 0x00, 0x00, | ||
| 981 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 982 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 983 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 984 | // Entry 400 - 43F | ||
| 985 | 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 986 | 0x00, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x00, 0x00, | ||
| 987 | 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x5b, 0x00, | ||
| 988 | 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, | ||
| 989 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 990 | 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 991 | 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, | ||
| 992 | 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, | ||
| 993 | // Entry 440 - 47F | ||
| 994 | 0x00, 0x00, 0x00, 0x00, 0x5b, 0x5b, 0x00, 0x00, | ||
| 995 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 996 | 0xe6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 997 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 998 | 0x00, 0xe9, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, | ||
| 999 | 0x00, 0x00, 0x00, 0xee, 0x00, 0x00, 0x00, 0x2c, | ||
| 1000 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, | ||
| 1001 | 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x5b, 0x00, | ||
| 1002 | // Entry 480 - 4BF | ||
| 1003 | 0x5b, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x5b, 0x00, | ||
| 1004 | 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x5b, 0x00, | ||
| 1005 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 1006 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 1007 | 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 1008 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, | ||
| 1009 | 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, | ||
| 1010 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 1011 | // Entry 4C0 - 4FF | ||
| 1012 | 0x5b, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, | ||
| 1013 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 1014 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 1015 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 1016 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 1017 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 1018 | 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 1019 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 1020 | // Entry 500 - 53F | ||
| 1021 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 1022 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 1023 | 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 1024 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 1025 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, | ||
| 1026 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, | ||
| 1027 | 0x00, 0x00, | ||
| 1028 | } | ||
| 1029 | |||
| 1030 | const ( | ||
| 1031 | _001 = 1 | ||
| 1032 | _419 = 31 | ||
| 1033 | _BR = 65 | ||
| 1034 | _CA = 73 | ||
| 1035 | _ES = 111 | ||
| 1036 | _GB = 124 | ||
| 1037 | _MD = 189 | ||
| 1038 | _PT = 239 | ||
| 1039 | _UK = 307 | ||
| 1040 | _US = 310 | ||
| 1041 | _ZZ = 358 | ||
| 1042 | _XA = 324 | ||
| 1043 | _XC = 326 | ||
| 1044 | _XK = 334 | ||
| 1045 | ) | ||
| 1046 | |||
| 1047 | // isoRegionOffset needs to be added to the index of regionISO to obtain the regionID | ||
| 1048 | // for 2-letter ISO codes. (The first isoRegionOffset regionIDs are reserved for | ||
| 1049 | // the UN.M49 codes used for groups.) | ||
| 1050 | const isoRegionOffset = 32 | ||
| 1051 | |||
| 1052 | // regionTypes defines the status of a region for various standards. | ||
| 1053 | // Size: 359 bytes, 359 elements | ||
| 1054 | var regionTypes = [359]uint8{ | ||
| 1055 | // Entry 0 - 3F | ||
| 1056 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 1057 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 1058 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 1059 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
| 1060 | 0x05, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, | ||
| 1061 | 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, | ||
| 1062 | 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, | ||
| 1063 | 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, | ||
| 1064 | // Entry 40 - 7F | ||
| 1065 | 0x06, 0x06, 0x06, 0x06, 0x04, 0x06, 0x06, 0x06, | ||
| 1066 | 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, | ||
| 1067 | 0x06, 0x06, 0x06, 0x06, 0x06, 0x04, 0x04, 0x06, | ||
| 1068 | 0x04, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, | ||
| 1069 | 0x04, 0x06, 0x04, 0x06, 0x06, 0x06, 0x06, 0x00, | ||
| 1070 | 0x06, 0x04, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, | ||
| 1071 | 0x06, 0x06, 0x04, 0x06, 0x06, 0x06, 0x06, 0x06, | ||
| 1072 | 0x00, 0x06, 0x04, 0x06, 0x06, 0x06, 0x06, 0x06, | ||
| 1073 | // Entry 80 - BF | ||
| 1074 | 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, | ||
| 1075 | 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, | ||
| 1076 | 0x06, 0x06, 0x06, 0x06, 0x00, 0x04, 0x06, 0x06, | ||
| 1077 | 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, | ||
| 1078 | 0x06, 0x06, 0x06, 0x06, 0x00, 0x06, 0x06, 0x06, | ||
| 1079 | 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, | ||
| 1080 | 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, | ||
| 1081 | 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, | ||
| 1082 | // Entry C0 - FF | ||
| 1083 | 0x06, 0x06, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, | ||
| 1084 | 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, | ||
| 1085 | 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, | ||
| 1086 | 0x00, 0x06, 0x06, 0x06, 0x06, 0x00, 0x06, 0x04, | ||
| 1087 | 0x06, 0x06, 0x06, 0x06, 0x00, 0x06, 0x06, 0x06, | ||
| 1088 | 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, | ||
| 1089 | 0x00, 0x06, 0x06, 0x00, 0x06, 0x05, 0x05, 0x05, | ||
| 1090 | 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, | ||
| 1091 | // Entry 100 - 13F | ||
| 1092 | 0x05, 0x05, 0x05, 0x06, 0x00, 0x06, 0x06, 0x06, | ||
| 1093 | 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, | ||
| 1094 | 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, | ||
| 1095 | 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x04, | ||
| 1096 | 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, | ||
| 1097 | 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, | ||
| 1098 | 0x06, 0x06, 0x06, 0x02, 0x06, 0x04, 0x06, 0x06, | ||
| 1099 | 0x06, 0x06, 0x06, 0x00, 0x06, 0x06, 0x06, 0x06, | ||
| 1100 | // Entry 140 - 17F | ||
| 1101 | 0x06, 0x06, 0x00, 0x06, 0x05, 0x05, 0x05, 0x05, | ||
| 1102 | 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, | ||
| 1103 | 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, | ||
| 1104 | 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x04, 0x06, | ||
| 1105 | 0x06, 0x04, 0x06, 0x06, 0x04, 0x06, 0x05, | ||
| 1106 | } | ||
| 1107 | |||
| 1108 | // regionISO holds a list of alphabetically sorted 2-letter ISO region codes. | ||
| 1109 | // Each 2-letter codes is followed by two bytes with the following meaning: | ||
| 1110 | // - [A-Z}{2}: the first letter of the 2-letter code plus these two | ||
| 1111 | // letters form the 3-letter ISO code. | ||
| 1112 | // - 0, n: index into altRegionISO3. | ||
| 1113 | const regionISO tag.Index = "" + // Size: 1312 bytes | ||
| 1114 | "AAAAACSCADNDAEREAFFGAGTGAIIAALLBAMRMANNTAOGOAQTAARRGASSMATUTAUUSAWBWAXLA" + | ||
| 1115 | "AZZEBAIHBBRBBDGDBEELBFFABGGRBHHRBIDIBJENBLLMBMMUBNRNBOOLBQESBRRABSHSBTTN" + | ||
| 1116 | "BUURBVVTBWWABYLRBZLZCAANCCCKCDODCFAFCGOGCHHECIIVCKOKCLHLCMMRCNHNCOOLCPPT" + | ||
| 1117 | "CQ CRRICS\x00\x00CTTECUUBCVPVCWUWCXXRCYYPCZZEDDDRDEEUDGGADJJIDKNKDMMADO" + | ||
| 1118 | "OMDYHYDZZAEA ECCUEESTEGGYEHSHERRIESSPETTHEU\x00\x03EZ FIINFJJIFKLKFMSM" + | ||
| 1119 | "FOROFQ\x00\x18FRRAFXXXGAABGBBRGDRDGEEOGFUFGGGYGHHAGIIBGLRLGMMBGNINGPLPGQ" + | ||
| 1120 | "NQGRRCGS\x00\x06GTTMGUUMGWNBGYUYHKKGHMMDHNNDHRRVHTTIHUUNHVVOIC IDDNIERL" + | ||
| 1121 | "ILSRIMMNINNDIOOTIQRQIRRNISSLITTAJEEYJMAMJOORJPPNJTTNKEENKGGZKHHMKIIRKM" + | ||
| 1122 | "\x00\x09KNNAKP\x00\x0cKRORKWWTKY\x00\x0fKZAZLAAOLBBNLCCALIIELKKALRBRLSSO" + | ||
| 1123 | "LTTULUUXLVVALYBYMAARMCCOMDDAMENEMFAFMGDGMHHLMIIDMKKDMLLIMMMRMNNGMOACMPNP" + | ||
| 1124 | "MQTQMRRTMSSRMTLTMUUSMVDVMWWIMXEXMYYSMZOZNAAMNCCLNEERNFFKNGGANHHBNIICNLLD" + | ||
| 1125 | "NOORNPPLNQ\x00\x1eNRRUNTTZNUIUNZZLOMMNPAANPCCIPEERPFYFPGNGPHHLPKAKPLOLPM" + | ||
| 1126 | "\x00\x12PNCNPRRIPSSEPTRTPUUSPWLWPYRYPZCZQAATQMMMQNNNQOOOQPPPQQQQQRRRQSSS" + | ||
| 1127 | "QTTTQU\x00\x03QVVVQWWWQXXXQYYYQZZZREEURHHOROOURS\x00\x15RUUSRWWASAAUSBLB" + | ||
| 1128 | "SCYCSDDNSEWESGGPSHHNSIVNSJJMSKVKSLLESMMRSNENSOOMSRURSSSDSTTPSUUNSVLVSXXM" + | ||
| 1129 | "SYYRSZWZTAAATCCATDCDTF\x00\x18TGGOTHHATJJKTKKLTLLSTMKMTNUNTOONTPMPTRURTT" + | ||
| 1130 | "TOTVUVTWWNTZZAUAKRUGGAUK UMMIUN USSAUYRYUZZBVAATVCCTVDDRVEENVGGBVIIRVN" + | ||
| 1131 | "NMVUUTWFLFWKAKWSSMXAAAXBBBXCCCXDDDXEEEXFFFXGGGXHHHXIIIXJJJXKKKXLLLXMMMXN" + | ||
| 1132 | "NNXOOOXPPPXQQQXRRRXSSSXTTTXUUUXVVVXWWWXXXXXYYYXZZZYDMDYEEMYT\x00\x1bYUUG" + | ||
| 1133 | "ZAAFZMMBZRARZWWEZZZZ\xff\xff\xff\xff" | ||
| 1134 | |||
| 1135 | // altRegionISO3 holds a list of 3-letter region codes that cannot be | ||
| 1136 | // mapped to 2-letter codes using the default algorithm. This is a short list. | ||
| 1137 | const altRegionISO3 string = "SCGQUUSGSCOMPRKCYMSPMSRBATFMYTATN" | ||
| 1138 | |||
| 1139 | // altRegionIDs holds a list of regionIDs the positions of which match those | ||
| 1140 | // of the 3-letter ISO codes in altRegionISO3. | ||
| 1141 | // Size: 22 bytes, 11 elements | ||
| 1142 | var altRegionIDs = [11]uint16{ | ||
| 1143 | 0x0058, 0x0071, 0x0089, 0x00a9, 0x00ab, 0x00ae, 0x00eb, 0x0106, | ||
| 1144 | 0x0122, 0x0160, 0x00dd, | ||
| 1145 | } | ||
| 1146 | |||
| 1147 | // Size: 80 bytes, 20 elements | ||
| 1148 | var regionOldMap = [20]FromTo{ | ||
| 1149 | 0: {From: 0x44, To: 0xc5}, | ||
| 1150 | 1: {From: 0x59, To: 0xa8}, | ||
| 1151 | 2: {From: 0x60, To: 0x61}, | ||
| 1152 | 3: {From: 0x67, To: 0x3b}, | ||
| 1153 | 4: {From: 0x7a, To: 0x79}, | ||
| 1154 | 5: {From: 0x94, To: 0x37}, | ||
| 1155 | 6: {From: 0xa4, To: 0x134}, | ||
| 1156 | 7: {From: 0xc2, To: 0x134}, | ||
| 1157 | 8: {From: 0xd8, To: 0x140}, | ||
| 1158 | 9: {From: 0xdd, To: 0x2b}, | ||
| 1159 | 10: {From: 0xf0, To: 0x134}, | ||
| 1160 | 11: {From: 0xf3, To: 0xe3}, | ||
| 1161 | 12: {From: 0xfd, To: 0x71}, | ||
| 1162 | 13: {From: 0x104, To: 0x165}, | ||
| 1163 | 14: {From: 0x12b, To: 0x127}, | ||
| 1164 | 15: {From: 0x133, To: 0x7c}, | ||
| 1165 | 16: {From: 0x13b, To: 0x13f}, | ||
| 1166 | 17: {From: 0x142, To: 0x134}, | ||
| 1167 | 18: {From: 0x15e, To: 0x15f}, | ||
| 1168 | 19: {From: 0x164, To: 0x4b}, | ||
| 1169 | } | ||
| 1170 | |||
| 1171 | // m49 maps regionIDs to UN.M49 codes. The first isoRegionOffset entries are | ||
| 1172 | // codes indicating collections of regions. | ||
| 1173 | // Size: 718 bytes, 359 elements | ||
| 1174 | var m49 = [359]int16{ | ||
| 1175 | // Entry 0 - 3F | ||
| 1176 | 0, 1, 2, 3, 5, 9, 11, 13, | ||
| 1177 | 14, 15, 17, 18, 19, 21, 29, 30, | ||
| 1178 | 34, 35, 39, 53, 54, 57, 61, 142, | ||
| 1179 | 143, 145, 150, 151, 154, 155, 202, 419, | ||
| 1180 | 958, 0, 20, 784, 4, 28, 660, 8, | ||
| 1181 | 51, 530, 24, 10, 32, 16, 40, 36, | ||
| 1182 | 533, 248, 31, 70, 52, 50, 56, 854, | ||
| 1183 | 100, 48, 108, 204, 652, 60, 96, 68, | ||
| 1184 | // Entry 40 - 7F | ||
| 1185 | 535, 76, 44, 64, 104, 74, 72, 112, | ||
| 1186 | 84, 124, 166, 180, 140, 178, 756, 384, | ||
| 1187 | 184, 152, 120, 156, 170, 0, 0, 188, | ||
| 1188 | 891, 296, 192, 132, 531, 162, 196, 203, | ||
| 1189 | 278, 276, 0, 262, 208, 212, 214, 204, | ||
| 1190 | 12, 0, 218, 233, 818, 732, 232, 724, | ||
| 1191 | 231, 967, 0, 246, 242, 238, 583, 234, | ||
| 1192 | 0, 250, 249, 266, 826, 308, 268, 254, | ||
| 1193 | // Entry 80 - BF | ||
| 1194 | 831, 288, 292, 304, 270, 324, 312, 226, | ||
| 1195 | 300, 239, 320, 316, 624, 328, 344, 334, | ||
| 1196 | 340, 191, 332, 348, 854, 0, 360, 372, | ||
| 1197 | 376, 833, 356, 86, 368, 364, 352, 380, | ||
| 1198 | 832, 388, 400, 392, 581, 404, 417, 116, | ||
| 1199 | 296, 174, 659, 408, 410, 414, 136, 398, | ||
| 1200 | 418, 422, 662, 438, 144, 430, 426, 440, | ||
| 1201 | 442, 428, 434, 504, 492, 498, 499, 663, | ||
| 1202 | // Entry C0 - FF | ||
| 1203 | 450, 584, 581, 807, 466, 104, 496, 446, | ||
| 1204 | 580, 474, 478, 500, 470, 480, 462, 454, | ||
| 1205 | 484, 458, 508, 516, 540, 562, 574, 566, | ||
| 1206 | 548, 558, 528, 578, 524, 10, 520, 536, | ||
| 1207 | 570, 554, 512, 591, 0, 604, 258, 598, | ||
| 1208 | 608, 586, 616, 666, 612, 630, 275, 620, | ||
| 1209 | 581, 585, 600, 591, 634, 959, 960, 961, | ||
| 1210 | 962, 963, 964, 965, 966, 967, 968, 969, | ||
| 1211 | // Entry 100 - 13F | ||
| 1212 | 970, 971, 972, 638, 716, 642, 688, 643, | ||
| 1213 | 646, 682, 90, 690, 729, 752, 702, 654, | ||
| 1214 | 705, 744, 703, 694, 674, 686, 706, 740, | ||
| 1215 | 728, 678, 810, 222, 534, 760, 748, 0, | ||
| 1216 | 796, 148, 260, 768, 764, 762, 772, 626, | ||
| 1217 | 795, 788, 776, 626, 792, 780, 798, 158, | ||
| 1218 | 834, 804, 800, 826, 581, 0, 840, 858, | ||
| 1219 | 860, 336, 670, 704, 862, 92, 850, 704, | ||
| 1220 | // Entry 140 - 17F | ||
| 1221 | 548, 876, 581, 882, 973, 974, 975, 976, | ||
| 1222 | 977, 978, 979, 980, 981, 982, 983, 984, | ||
| 1223 | 985, 986, 987, 988, 989, 990, 991, 992, | ||
| 1224 | 993, 994, 995, 996, 997, 998, 720, 887, | ||
| 1225 | 175, 891, 710, 894, 180, 716, 999, | ||
| 1226 | } | ||
| 1227 | |||
| 1228 | // m49Index gives indexes into fromM49 based on the three most significant bits | ||
| 1229 | // of a 10-bit UN.M49 code. To search an UN.M49 code in fromM49, search in | ||
| 1230 | // | ||
| 1231 | // fromM49[m49Index[msb39(code)]:m49Index[msb3(code)+1]] | ||
| 1232 | // | ||
| 1233 | // for an entry where the first 7 bits match the 7 lsb of the UN.M49 code. | ||
| 1234 | // The region code is stored in the 9 lsb of the indexed value. | ||
| 1235 | // Size: 18 bytes, 9 elements | ||
| 1236 | var m49Index = [9]int16{ | ||
| 1237 | 0, 59, 108, 143, 181, 220, 259, 291, | ||
| 1238 | 333, | ||
| 1239 | } | ||
| 1240 | |||
| 1241 | // fromM49 contains entries to map UN.M49 codes to regions. See m49Index for details. | ||
| 1242 | // Size: 666 bytes, 333 elements | ||
| 1243 | var fromM49 = [333]uint16{ | ||
| 1244 | // Entry 0 - 3F | ||
| 1245 | 0x0201, 0x0402, 0x0603, 0x0824, 0x0a04, 0x1027, 0x1205, 0x142b, | ||
| 1246 | 0x1606, 0x1868, 0x1a07, 0x1c08, 0x1e09, 0x202d, 0x220a, 0x240b, | ||
| 1247 | 0x260c, 0x2822, 0x2a0d, 0x302a, 0x3825, 0x3a0e, 0x3c0f, 0x3e32, | ||
| 1248 | 0x402c, 0x4410, 0x4611, 0x482f, 0x4e12, 0x502e, 0x5842, 0x6039, | ||
| 1249 | 0x6435, 0x6628, 0x6834, 0x6a13, 0x6c14, 0x7036, 0x7215, 0x783d, | ||
| 1250 | 0x7a16, 0x8043, 0x883f, 0x8c33, 0x9046, 0x9445, 0x9841, 0xa848, | ||
| 1251 | 0xac9b, 0xb50a, 0xb93d, 0xc03e, 0xc838, 0xd0c5, 0xd83a, 0xe047, | ||
| 1252 | 0xe8a7, 0xf052, 0xf849, 0x085b, 0x10ae, 0x184c, 0x1c17, 0x1e18, | ||
| 1253 | // Entry 40 - 7F | ||
| 1254 | 0x20b4, 0x2219, 0x2921, 0x2c1a, 0x2e1b, 0x3051, 0x341c, 0x361d, | ||
| 1255 | 0x3853, 0x3d2f, 0x445d, 0x4c4a, 0x5454, 0x5ca9, 0x5f60, 0x644d, | ||
| 1256 | 0x684b, 0x7050, 0x7857, 0x7e91, 0x805a, 0x885e, 0x941e, 0x965f, | ||
| 1257 | 0x983b, 0xa064, 0xa865, 0xac66, 0xb46a, 0xbd1b, 0xc487, 0xcc70, | ||
| 1258 | 0xce70, 0xd06e, 0xd26b, 0xd477, 0xdc75, 0xde89, 0xe474, 0xec73, | ||
| 1259 | 0xf031, 0xf27a, 0xf479, 0xfc7f, 0x04e6, 0x0922, 0x0c63, 0x147b, | ||
| 1260 | 0x187e, 0x1c84, 0x26ee, 0x2861, 0x2c60, 0x3061, 0x4081, 0x4882, | ||
| 1261 | 0x50a8, 0x5888, 0x6083, 0x687d, 0x7086, 0x788b, 0x808a, 0x8885, | ||
| 1262 | // Entry 80 - BF | ||
| 1263 | 0x908d, 0x9892, 0x9c8f, 0xa139, 0xa890, 0xb08e, 0xb893, 0xc09e, | ||
| 1264 | 0xc89a, 0xd096, 0xd89d, 0xe09c, 0xe897, 0xf098, 0xf89f, 0x004f, | ||
| 1265 | 0x08a1, 0x10a3, 0x1caf, 0x20a2, 0x28a5, 0x30ab, 0x34ac, 0x3cad, | ||
| 1266 | 0x42a6, 0x44b0, 0x461f, 0x4cb1, 0x54b6, 0x58b9, 0x5cb5, 0x64ba, | ||
| 1267 | 0x6cb3, 0x70b7, 0x74b8, 0x7cc7, 0x84c0, 0x8ccf, 0x94d1, 0x9cce, | ||
| 1268 | 0xa4c4, 0xaccc, 0xb4c9, 0xbcca, 0xc0cd, 0xc8d0, 0xd8bc, 0xe0c6, | ||
| 1269 | 0xe4bd, 0xe6be, 0xe8cb, 0xf0bb, 0xf8d2, 0x00e2, 0x08d3, 0x10de, | ||
| 1270 | 0x18dc, 0x20da, 0x2429, 0x265c, 0x2a30, 0x2d1c, 0x2e40, 0x30df, | ||
| 1271 | // Entry C0 - FF | ||
| 1272 | 0x38d4, 0x4940, 0x54e1, 0x5cd9, 0x64d5, 0x6cd7, 0x74e0, 0x7cd6, | ||
| 1273 | 0x84db, 0x88c8, 0x8b34, 0x8e76, 0x90c1, 0x92f1, 0x94e9, 0x9ee3, | ||
| 1274 | 0xace7, 0xb0f2, 0xb8e5, 0xc0e8, 0xc8ec, 0xd0ea, 0xd8ef, 0xe08c, | ||
| 1275 | 0xe527, 0xeced, 0xf4f4, 0xfd03, 0x0505, 0x0707, 0x0d08, 0x183c, | ||
| 1276 | 0x1d0f, 0x26aa, 0x2826, 0x2cb2, 0x2ebf, 0x34eb, 0x3d3a, 0x4514, | ||
| 1277 | 0x4d19, 0x5509, 0x5d15, 0x6106, 0x650b, 0x6d13, 0x7d0e, 0x7f12, | ||
| 1278 | 0x813f, 0x8310, 0x8516, 0x8d62, 0x9965, 0xa15e, 0xa86f, 0xb118, | ||
| 1279 | 0xb30c, 0xb86d, 0xc10c, 0xc917, 0xd111, 0xd91e, 0xe10d, 0xe84e, | ||
| 1280 | // Entry 100 - 13F | ||
| 1281 | 0xf11d, 0xf525, 0xf924, 0x0123, 0x0926, 0x112a, 0x192d, 0x2023, | ||
| 1282 | 0x2929, 0x312c, 0x3728, 0x3920, 0x3d2e, 0x4132, 0x4931, 0x4ec3, | ||
| 1283 | 0x551a, 0x646c, 0x747c, 0x7e80, 0x80a0, 0x8299, 0x8530, 0x9136, | ||
| 1284 | 0xa53e, 0xac37, 0xb537, 0xb938, 0xbd3c, 0xd941, 0xe543, 0xed5f, | ||
| 1285 | 0xef5f, 0xf658, 0xfd63, 0x7c20, 0x7ef5, 0x80f6, 0x82f7, 0x84f8, | ||
| 1286 | 0x86f9, 0x88fa, 0x8afb, 0x8cfc, 0x8e71, 0x90fe, 0x92ff, 0x9500, | ||
| 1287 | 0x9701, 0x9902, 0x9b44, 0x9d45, 0x9f46, 0xa147, 0xa348, 0xa549, | ||
| 1288 | 0xa74a, 0xa94b, 0xab4c, 0xad4d, 0xaf4e, 0xb14f, 0xb350, 0xb551, | ||
| 1289 | // Entry 140 - 17F | ||
| 1290 | 0xb752, 0xb953, 0xbb54, 0xbd55, 0xbf56, 0xc157, 0xc358, 0xc559, | ||
| 1291 | 0xc75a, 0xc95b, 0xcb5c, 0xcd5d, 0xcf66, | ||
| 1292 | } | ||
| 1293 | |||
| 1294 | // Size: 2128 bytes | ||
| 1295 | var variantIndex = map[string]uint8{ | ||
| 1296 | "1606nict": 0x0, | ||
| 1297 | "1694acad": 0x1, | ||
| 1298 | "1901": 0x2, | ||
| 1299 | "1959acad": 0x3, | ||
| 1300 | "1994": 0x67, | ||
| 1301 | "1996": 0x4, | ||
| 1302 | "abl1943": 0x5, | ||
| 1303 | "akuapem": 0x6, | ||
| 1304 | "alalc97": 0x69, | ||
| 1305 | "aluku": 0x7, | ||
| 1306 | "ao1990": 0x8, | ||
| 1307 | "aranes": 0x9, | ||
| 1308 | "arevela": 0xa, | ||
| 1309 | "arevmda": 0xb, | ||
| 1310 | "arkaika": 0xc, | ||
| 1311 | "asante": 0xd, | ||
| 1312 | "auvern": 0xe, | ||
| 1313 | "baku1926": 0xf, | ||
| 1314 | "balanka": 0x10, | ||
| 1315 | "barla": 0x11, | ||
| 1316 | "basiceng": 0x12, | ||
| 1317 | "bauddha": 0x13, | ||
| 1318 | "bciav": 0x14, | ||
| 1319 | "bcizbl": 0x15, | ||
| 1320 | "biscayan": 0x16, | ||
| 1321 | "biske": 0x62, | ||
| 1322 | "bohoric": 0x17, | ||
| 1323 | "boont": 0x18, | ||
| 1324 | "bornholm": 0x19, | ||
| 1325 | "cisaup": 0x1a, | ||
| 1326 | "colb1945": 0x1b, | ||
| 1327 | "cornu": 0x1c, | ||
| 1328 | "creiss": 0x1d, | ||
| 1329 | "dajnko": 0x1e, | ||
| 1330 | "ekavsk": 0x1f, | ||
| 1331 | "emodeng": 0x20, | ||
| 1332 | "fonipa": 0x6a, | ||
| 1333 | "fonkirsh": 0x6b, | ||
| 1334 | "fonnapa": 0x6c, | ||
| 1335 | "fonupa": 0x6d, | ||
| 1336 | "fonxsamp": 0x6e, | ||
| 1337 | "gallo": 0x21, | ||
| 1338 | "gascon": 0x22, | ||
| 1339 | "grclass": 0x23, | ||
| 1340 | "grital": 0x24, | ||
| 1341 | "grmistr": 0x25, | ||
| 1342 | "hepburn": 0x26, | ||
| 1343 | "heploc": 0x68, | ||
| 1344 | "hognorsk": 0x27, | ||
| 1345 | "hsistemo": 0x28, | ||
| 1346 | "ijekavsk": 0x29, | ||
| 1347 | "itihasa": 0x2a, | ||
| 1348 | "ivanchov": 0x2b, | ||
| 1349 | "jauer": 0x2c, | ||
| 1350 | "jyutping": 0x2d, | ||
| 1351 | "kkcor": 0x2e, | ||
| 1352 | "kociewie": 0x2f, | ||
| 1353 | "kscor": 0x30, | ||
| 1354 | "laukika": 0x31, | ||
| 1355 | "lemosin": 0x32, | ||
| 1356 | "lengadoc": 0x33, | ||
| 1357 | "lipaw": 0x63, | ||
| 1358 | "ltg1929": 0x34, | ||
| 1359 | "ltg2007": 0x35, | ||
| 1360 | "luna1918": 0x36, | ||
| 1361 | "metelko": 0x37, | ||
| 1362 | "monoton": 0x38, | ||
| 1363 | "ndyuka": 0x39, | ||
| 1364 | "nedis": 0x3a, | ||
| 1365 | "newfound": 0x3b, | ||
| 1366 | "nicard": 0x3c, | ||
| 1367 | "njiva": 0x64, | ||
| 1368 | "nulik": 0x3d, | ||
| 1369 | "osojs": 0x65, | ||
| 1370 | "oxendict": 0x3e, | ||
| 1371 | "pahawh2": 0x3f, | ||
| 1372 | "pahawh3": 0x40, | ||
| 1373 | "pahawh4": 0x41, | ||
| 1374 | "pamaka": 0x42, | ||
| 1375 | "peano": 0x43, | ||
| 1376 | "petr1708": 0x44, | ||
| 1377 | "pinyin": 0x45, | ||
| 1378 | "polyton": 0x46, | ||
| 1379 | "provenc": 0x47, | ||
| 1380 | "puter": 0x48, | ||
| 1381 | "rigik": 0x49, | ||
| 1382 | "rozaj": 0x4a, | ||
| 1383 | "rumgr": 0x4b, | ||
| 1384 | "scotland": 0x4c, | ||
| 1385 | "scouse": 0x4d, | ||
| 1386 | "simple": 0x6f, | ||
| 1387 | "solba": 0x66, | ||
| 1388 | "sotav": 0x4e, | ||
| 1389 | "spanglis": 0x4f, | ||
| 1390 | "surmiran": 0x50, | ||
| 1391 | "sursilv": 0x51, | ||
| 1392 | "sutsilv": 0x52, | ||
| 1393 | "synnejyl": 0x53, | ||
| 1394 | "tarask": 0x54, | ||
| 1395 | "tongyong": 0x55, | ||
| 1396 | "tunumiit": 0x56, | ||
| 1397 | "uccor": 0x57, | ||
| 1398 | "ucrcor": 0x58, | ||
| 1399 | "ulster": 0x59, | ||
| 1400 | "unifon": 0x5a, | ||
| 1401 | "vaidika": 0x5b, | ||
| 1402 | "valencia": 0x5c, | ||
| 1403 | "vallader": 0x5d, | ||
| 1404 | "vecdruka": 0x5e, | ||
| 1405 | "vivaraup": 0x5f, | ||
| 1406 | "wadegile": 0x60, | ||
| 1407 | "xsistemo": 0x61, | ||
| 1408 | } | ||
| 1409 | |||
| 1410 | // variantNumSpecialized is the number of specialized variants in variants. | ||
| 1411 | const variantNumSpecialized = 105 | ||
| 1412 | |||
| 1413 | // nRegionGroups is the number of region groups. | ||
| 1414 | const nRegionGroups = 33 | ||
| 1415 | |||
| 1416 | type likelyLangRegion struct { | ||
| 1417 | lang uint16 | ||
| 1418 | region uint16 | ||
| 1419 | } | ||
| 1420 | |||
| 1421 | // likelyScript is a lookup table, indexed by scriptID, for the most likely | ||
| 1422 | // languages and regions given a script. | ||
| 1423 | // Size: 1052 bytes, 263 elements | ||
| 1424 | var likelyScript = [263]likelyLangRegion{ | ||
| 1425 | 1: {lang: 0x14e, region: 0x85}, | ||
| 1426 | 3: {lang: 0x2a2, region: 0x107}, | ||
| 1427 | 4: {lang: 0x1f, region: 0x9a}, | ||
| 1428 | 5: {lang: 0x3a, region: 0x6c}, | ||
| 1429 | 7: {lang: 0x3b, region: 0x9d}, | ||
| 1430 | 8: {lang: 0x1d7, region: 0x28}, | ||
| 1431 | 9: {lang: 0x13, region: 0x9d}, | ||
| 1432 | 10: {lang: 0x5b, region: 0x96}, | ||
| 1433 | 11: {lang: 0x60, region: 0x52}, | ||
| 1434 | 12: {lang: 0xb9, region: 0xb5}, | ||
| 1435 | 13: {lang: 0x63, region: 0x96}, | ||
| 1436 | 14: {lang: 0xa5, region: 0x35}, | ||
| 1437 | 15: {lang: 0x3e9, region: 0x9a}, | ||
| 1438 | 17: {lang: 0x529, region: 0x12f}, | ||
| 1439 | 18: {lang: 0x3b1, region: 0x9a}, | ||
| 1440 | 19: {lang: 0x15e, region: 0x79}, | ||
| 1441 | 20: {lang: 0xc2, region: 0x96}, | ||
| 1442 | 21: {lang: 0x9d, region: 0xe8}, | ||
| 1443 | 22: {lang: 0xdb, region: 0x35}, | ||
| 1444 | 23: {lang: 0xf3, region: 0x49}, | ||
| 1445 | 24: {lang: 0x4f0, region: 0x12c}, | ||
| 1446 | 25: {lang: 0xe7, region: 0x13f}, | ||
| 1447 | 26: {lang: 0xe5, region: 0x136}, | ||
| 1448 | 29: {lang: 0xf1, region: 0x6c}, | ||
| 1449 | 31: {lang: 0x1a0, region: 0x5e}, | ||
| 1450 | 32: {lang: 0x3e2, region: 0x107}, | ||
| 1451 | 34: {lang: 0x1be, region: 0x9a}, | ||
| 1452 | 38: {lang: 0x15e, region: 0x79}, | ||
| 1453 | 41: {lang: 0x133, region: 0x6c}, | ||
| 1454 | 42: {lang: 0x431, region: 0x27}, | ||
| 1455 | 44: {lang: 0x27, region: 0x70}, | ||
| 1456 | 46: {lang: 0x210, region: 0x7e}, | ||
| 1457 | 47: {lang: 0xfe, region: 0x38}, | ||
| 1458 | 49: {lang: 0x19b, region: 0x9a}, | ||
| 1459 | 50: {lang: 0x19e, region: 0x131}, | ||
| 1460 | 51: {lang: 0x3e9, region: 0x9a}, | ||
| 1461 | 52: {lang: 0x136, region: 0x88}, | ||
| 1462 | 53: {lang: 0x1a4, region: 0x9a}, | ||
| 1463 | 54: {lang: 0x39d, region: 0x9a}, | ||
| 1464 | 55: {lang: 0x529, region: 0x12f}, | ||
| 1465 | 56: {lang: 0x254, region: 0xac}, | ||
| 1466 | 57: {lang: 0x529, region: 0x53}, | ||
| 1467 | 58: {lang: 0x1cb, region: 0xe8}, | ||
| 1468 | 59: {lang: 0x529, region: 0x53}, | ||
| 1469 | 60: {lang: 0x529, region: 0x12f}, | ||
| 1470 | 61: {lang: 0x2fd, region: 0x9c}, | ||
| 1471 | 62: {lang: 0x1bc, region: 0x98}, | ||
| 1472 | 63: {lang: 0x200, region: 0xa3}, | ||
| 1473 | 64: {lang: 0x1c5, region: 0x12c}, | ||
| 1474 | 65: {lang: 0x1ca, region: 0xb0}, | ||
| 1475 | 68: {lang: 0x1d5, region: 0x93}, | ||
| 1476 | 70: {lang: 0x142, region: 0x9f}, | ||
| 1477 | 71: {lang: 0x254, region: 0xac}, | ||
| 1478 | 72: {lang: 0x20e, region: 0x96}, | ||
| 1479 | 73: {lang: 0x200, region: 0xa3}, | ||
| 1480 | 75: {lang: 0x135, region: 0xc5}, | ||
| 1481 | 76: {lang: 0x200, region: 0xa3}, | ||
| 1482 | 78: {lang: 0x3bb, region: 0xe9}, | ||
| 1483 | 79: {lang: 0x24a, region: 0xa7}, | ||
| 1484 | 80: {lang: 0x3fa, region: 0x9a}, | ||
| 1485 | 83: {lang: 0x251, region: 0x9a}, | ||
| 1486 | 84: {lang: 0x254, region: 0xac}, | ||
| 1487 | 86: {lang: 0x88, region: 0x9a}, | ||
| 1488 | 87: {lang: 0x370, region: 0x124}, | ||
| 1489 | 88: {lang: 0x2b8, region: 0xb0}, | ||
| 1490 | 93: {lang: 0x29f, region: 0x9a}, | ||
| 1491 | 94: {lang: 0x2a8, region: 0x9a}, | ||
| 1492 | 95: {lang: 0x28f, region: 0x88}, | ||
| 1493 | 96: {lang: 0x1a0, region: 0x88}, | ||
| 1494 | 97: {lang: 0x2ac, region: 0x53}, | ||
| 1495 | 99: {lang: 0x4f4, region: 0x12c}, | ||
| 1496 | 100: {lang: 0x4f5, region: 0x12c}, | ||
| 1497 | 101: {lang: 0x1be, region: 0x9a}, | ||
| 1498 | 103: {lang: 0x337, region: 0x9d}, | ||
| 1499 | 104: {lang: 0x4f7, region: 0x53}, | ||
| 1500 | 105: {lang: 0xa9, region: 0x53}, | ||
| 1501 | 108: {lang: 0x2e8, region: 0x113}, | ||
| 1502 | 109: {lang: 0x4f8, region: 0x10c}, | ||
| 1503 | 110: {lang: 0x4f8, region: 0x10c}, | ||
| 1504 | 111: {lang: 0x304, region: 0x9a}, | ||
| 1505 | 112: {lang: 0x31b, region: 0x9a}, | ||
| 1506 | 113: {lang: 0x30b, region: 0x53}, | ||
| 1507 | 115: {lang: 0x31e, region: 0x35}, | ||
| 1508 | 116: {lang: 0x30e, region: 0x9a}, | ||
| 1509 | 117: {lang: 0x414, region: 0xe9}, | ||
| 1510 | 118: {lang: 0x331, region: 0xc5}, | ||
| 1511 | 121: {lang: 0x4f9, region: 0x109}, | ||
| 1512 | 122: {lang: 0x3b, region: 0xa2}, | ||
| 1513 | 123: {lang: 0x353, region: 0xdc}, | ||
| 1514 | 126: {lang: 0x2d0, region: 0x85}, | ||
| 1515 | 127: {lang: 0x52a, region: 0x53}, | ||
| 1516 | 128: {lang: 0x403, region: 0x97}, | ||
| 1517 | 129: {lang: 0x3ee, region: 0x9a}, | ||
| 1518 | 130: {lang: 0x39b, region: 0xc6}, | ||
| 1519 | 131: {lang: 0x395, region: 0x9a}, | ||
| 1520 | 132: {lang: 0x399, region: 0x136}, | ||
| 1521 | 133: {lang: 0x429, region: 0x116}, | ||
| 1522 | 135: {lang: 0x3b, region: 0x11d}, | ||
| 1523 | 136: {lang: 0xfd, region: 0xc5}, | ||
| 1524 | 139: {lang: 0x27d, region: 0x107}, | ||
| 1525 | 140: {lang: 0x2c9, region: 0x53}, | ||
| 1526 | 141: {lang: 0x39f, region: 0x9d}, | ||
| 1527 | 142: {lang: 0x39f, region: 0x53}, | ||
| 1528 | 144: {lang: 0x3ad, region: 0xb1}, | ||
| 1529 | 146: {lang: 0x1c6, region: 0x53}, | ||
| 1530 | 147: {lang: 0x4fd, region: 0x9d}, | ||
| 1531 | 200: {lang: 0x3cb, region: 0x96}, | ||
| 1532 | 203: {lang: 0x372, region: 0x10d}, | ||
| 1533 | 204: {lang: 0x420, region: 0x98}, | ||
| 1534 | 206: {lang: 0x4ff, region: 0x15f}, | ||
| 1535 | 207: {lang: 0x3f0, region: 0x9a}, | ||
| 1536 | 208: {lang: 0x45, region: 0x136}, | ||
| 1537 | 209: {lang: 0x139, region: 0x7c}, | ||
| 1538 | 210: {lang: 0x3e9, region: 0x9a}, | ||
| 1539 | 212: {lang: 0x3e9, region: 0x9a}, | ||
| 1540 | 213: {lang: 0x3fa, region: 0x9a}, | ||
| 1541 | 214: {lang: 0x40c, region: 0xb4}, | ||
| 1542 | 217: {lang: 0x433, region: 0x9a}, | ||
| 1543 | 218: {lang: 0xef, region: 0xc6}, | ||
| 1544 | 219: {lang: 0x43e, region: 0x96}, | ||
| 1545 | 221: {lang: 0x44d, region: 0x35}, | ||
| 1546 | 222: {lang: 0x44e, region: 0x9c}, | ||
| 1547 | 226: {lang: 0x45a, region: 0xe8}, | ||
| 1548 | 227: {lang: 0x11a, region: 0x9a}, | ||
| 1549 | 228: {lang: 0x45e, region: 0x53}, | ||
| 1550 | 229: {lang: 0x232, region: 0x53}, | ||
| 1551 | 230: {lang: 0x450, region: 0x9a}, | ||
| 1552 | 231: {lang: 0x4a5, region: 0x53}, | ||
| 1553 | 232: {lang: 0x9f, region: 0x13f}, | ||
| 1554 | 233: {lang: 0x461, region: 0x9a}, | ||
| 1555 | 235: {lang: 0x528, region: 0xbb}, | ||
| 1556 | 236: {lang: 0x153, region: 0xe8}, | ||
| 1557 | 237: {lang: 0x128, region: 0xce}, | ||
| 1558 | 238: {lang: 0x46b, region: 0x124}, | ||
| 1559 | 239: {lang: 0xa9, region: 0x53}, | ||
| 1560 | 240: {lang: 0x2ce, region: 0x9a}, | ||
| 1561 | 243: {lang: 0x4ad, region: 0x11d}, | ||
| 1562 | 244: {lang: 0x4be, region: 0xb5}, | ||
| 1563 | 247: {lang: 0x1ce, region: 0x9a}, | ||
| 1564 | 250: {lang: 0x3a9, region: 0x9d}, | ||
| 1565 | 251: {lang: 0x22, region: 0x9c}, | ||
| 1566 | 253: {lang: 0x1ea, region: 0x53}, | ||
| 1567 | 254: {lang: 0xef, region: 0xc6}, | ||
| 1568 | } | ||
| 1569 | |||
| 1570 | type likelyScriptRegion struct { | ||
| 1571 | region uint16 | ||
| 1572 | script uint16 | ||
| 1573 | flags uint8 | ||
| 1574 | } | ||
| 1575 | |||
| 1576 | // likelyLang is a lookup table, indexed by langID, for the most likely | ||
| 1577 | // scripts and regions given incomplete information. If more entries exist for a | ||
| 1578 | // given language, region and script are the index and size respectively | ||
| 1579 | // of the list in likelyLangList. | ||
| 1580 | // Size: 7980 bytes, 1330 elements | ||
| 1581 | var likelyLang = [1330]likelyScriptRegion{ | ||
| 1582 | 0: {region: 0x136, script: 0x5b, flags: 0x0}, | ||
| 1583 | 1: {region: 0x70, script: 0x5b, flags: 0x0}, | ||
| 1584 | 2: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1585 | 3: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1586 | 4: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1587 | 5: {region: 0x7e, script: 0x20, flags: 0x0}, | ||
| 1588 | 6: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1589 | 7: {region: 0x166, script: 0x20, flags: 0x0}, | ||
| 1590 | 8: {region: 0x81, script: 0x5b, flags: 0x0}, | ||
| 1591 | 9: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1592 | 10: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1593 | 11: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1594 | 12: {region: 0x96, script: 0x5b, flags: 0x0}, | ||
| 1595 | 13: {region: 0x132, script: 0x5b, flags: 0x0}, | ||
| 1596 | 14: {region: 0x81, script: 0x5b, flags: 0x0}, | ||
| 1597 | 15: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1598 | 16: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1599 | 17: {region: 0x107, script: 0x20, flags: 0x0}, | ||
| 1600 | 18: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1601 | 19: {region: 0x9d, script: 0x9, flags: 0x0}, | ||
| 1602 | 20: {region: 0x129, script: 0x5, flags: 0x0}, | ||
| 1603 | 21: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1604 | 22: {region: 0x162, script: 0x5b, flags: 0x0}, | ||
| 1605 | 23: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1606 | 24: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1607 | 25: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1608 | 26: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1609 | 27: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1610 | 28: {region: 0x52, script: 0x5b, flags: 0x0}, | ||
| 1611 | 29: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1612 | 30: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1613 | 31: {region: 0x9a, script: 0x4, flags: 0x0}, | ||
| 1614 | 32: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1615 | 33: {region: 0x81, script: 0x5b, flags: 0x0}, | ||
| 1616 | 34: {region: 0x9c, script: 0xfb, flags: 0x0}, | ||
| 1617 | 35: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1618 | 36: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1619 | 37: {region: 0x14e, script: 0x5b, flags: 0x0}, | ||
| 1620 | 38: {region: 0x107, script: 0x20, flags: 0x0}, | ||
| 1621 | 39: {region: 0x70, script: 0x2c, flags: 0x0}, | ||
| 1622 | 40: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1623 | 41: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1624 | 42: {region: 0xd7, script: 0x5b, flags: 0x0}, | ||
| 1625 | 43: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1626 | 45: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1627 | 46: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1628 | 47: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1629 | 48: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1630 | 49: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1631 | 50: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1632 | 51: {region: 0x96, script: 0x5b, flags: 0x0}, | ||
| 1633 | 52: {region: 0x166, script: 0x5, flags: 0x0}, | ||
| 1634 | 53: {region: 0x123, script: 0x5, flags: 0x0}, | ||
| 1635 | 54: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1636 | 55: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1637 | 56: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1638 | 57: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1639 | 58: {region: 0x6c, script: 0x5, flags: 0x0}, | ||
| 1640 | 59: {region: 0x0, script: 0x3, flags: 0x1}, | ||
| 1641 | 60: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1642 | 61: {region: 0x51, script: 0x5b, flags: 0x0}, | ||
| 1643 | 62: {region: 0x3f, script: 0x5b, flags: 0x0}, | ||
| 1644 | 63: {region: 0x68, script: 0x5, flags: 0x0}, | ||
| 1645 | 65: {region: 0xbb, script: 0x5, flags: 0x0}, | ||
| 1646 | 66: {region: 0x6c, script: 0x5, flags: 0x0}, | ||
| 1647 | 67: {region: 0x9a, script: 0xe, flags: 0x0}, | ||
| 1648 | 68: {region: 0x130, script: 0x5b, flags: 0x0}, | ||
| 1649 | 69: {region: 0x136, script: 0xd0, flags: 0x0}, | ||
| 1650 | 70: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1651 | 71: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1652 | 72: {region: 0x6f, script: 0x5b, flags: 0x0}, | ||
| 1653 | 73: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1654 | 74: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1655 | 75: {region: 0x49, script: 0x5b, flags: 0x0}, | ||
| 1656 | 76: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1657 | 77: {region: 0x107, script: 0x20, flags: 0x0}, | ||
| 1658 | 78: {region: 0x166, script: 0x5, flags: 0x0}, | ||
| 1659 | 79: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1660 | 80: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1661 | 81: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1662 | 82: {region: 0x9a, script: 0x22, flags: 0x0}, | ||
| 1663 | 83: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1664 | 84: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1665 | 85: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1666 | 86: {region: 0x3f, script: 0x5b, flags: 0x0}, | ||
| 1667 | 87: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1668 | 88: {region: 0x3, script: 0x5, flags: 0x1}, | ||
| 1669 | 89: {region: 0x107, script: 0x20, flags: 0x0}, | ||
| 1670 | 90: {region: 0xe9, script: 0x5, flags: 0x0}, | ||
| 1671 | 91: {region: 0x96, script: 0x5b, flags: 0x0}, | ||
| 1672 | 92: {region: 0xdc, script: 0x22, flags: 0x0}, | ||
| 1673 | 93: {region: 0x2e, script: 0x5b, flags: 0x0}, | ||
| 1674 | 94: {region: 0x52, script: 0x5b, flags: 0x0}, | ||
| 1675 | 95: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1676 | 96: {region: 0x52, script: 0xb, flags: 0x0}, | ||
| 1677 | 97: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1678 | 98: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1679 | 99: {region: 0x96, script: 0x5b, flags: 0x0}, | ||
| 1680 | 100: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1681 | 101: {region: 0x52, script: 0x5b, flags: 0x0}, | ||
| 1682 | 102: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1683 | 103: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1684 | 104: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1685 | 105: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1686 | 106: {region: 0x4f, script: 0x5b, flags: 0x0}, | ||
| 1687 | 107: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1688 | 108: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1689 | 109: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1690 | 110: {region: 0x166, script: 0x2c, flags: 0x0}, | ||
| 1691 | 111: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1692 | 112: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1693 | 113: {region: 0x47, script: 0x20, flags: 0x0}, | ||
| 1694 | 114: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1695 | 115: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1696 | 116: {region: 0x10c, script: 0x5, flags: 0x0}, | ||
| 1697 | 117: {region: 0x163, script: 0x5b, flags: 0x0}, | ||
| 1698 | 118: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1699 | 119: {region: 0x96, script: 0x5b, flags: 0x0}, | ||
| 1700 | 120: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1701 | 121: {region: 0x130, script: 0x5b, flags: 0x0}, | ||
| 1702 | 122: {region: 0x52, script: 0x5b, flags: 0x0}, | ||
| 1703 | 123: {region: 0x9a, script: 0xe6, flags: 0x0}, | ||
| 1704 | 124: {region: 0xe9, script: 0x5, flags: 0x0}, | ||
| 1705 | 125: {region: 0x9a, script: 0x22, flags: 0x0}, | ||
| 1706 | 126: {region: 0x38, script: 0x20, flags: 0x0}, | ||
| 1707 | 127: {region: 0x9a, script: 0x22, flags: 0x0}, | ||
| 1708 | 128: {region: 0xe9, script: 0x5, flags: 0x0}, | ||
| 1709 | 129: {region: 0x12c, script: 0x34, flags: 0x0}, | ||
| 1710 | 131: {region: 0x9a, script: 0x22, flags: 0x0}, | ||
| 1711 | 132: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1712 | 133: {region: 0x9a, script: 0x22, flags: 0x0}, | ||
| 1713 | 134: {region: 0xe8, script: 0x5b, flags: 0x0}, | ||
| 1714 | 135: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1715 | 136: {region: 0x9a, script: 0x22, flags: 0x0}, | ||
| 1716 | 137: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1717 | 138: {region: 0x140, script: 0x5b, flags: 0x0}, | ||
| 1718 | 139: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1719 | 140: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1720 | 141: {region: 0xe8, script: 0x5b, flags: 0x0}, | ||
| 1721 | 142: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1722 | 143: {region: 0xd7, script: 0x5b, flags: 0x0}, | ||
| 1723 | 144: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1724 | 145: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1725 | 146: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1726 | 147: {region: 0x166, script: 0x2c, flags: 0x0}, | ||
| 1727 | 148: {region: 0x9a, script: 0x22, flags: 0x0}, | ||
| 1728 | 149: {region: 0x96, script: 0x5b, flags: 0x0}, | ||
| 1729 | 150: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1730 | 151: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1731 | 152: {region: 0x115, script: 0x5b, flags: 0x0}, | ||
| 1732 | 153: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1733 | 154: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1734 | 155: {region: 0x52, script: 0x5b, flags: 0x0}, | ||
| 1735 | 156: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1736 | 157: {region: 0xe8, script: 0x5b, flags: 0x0}, | ||
| 1737 | 158: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1738 | 159: {region: 0x13f, script: 0xe8, flags: 0x0}, | ||
| 1739 | 160: {region: 0xc4, script: 0x5b, flags: 0x0}, | ||
| 1740 | 161: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1741 | 162: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1742 | 163: {region: 0xc4, script: 0x5b, flags: 0x0}, | ||
| 1743 | 164: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1744 | 165: {region: 0x35, script: 0xe, flags: 0x0}, | ||
| 1745 | 166: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1746 | 167: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1747 | 168: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1748 | 169: {region: 0x53, script: 0xef, flags: 0x0}, | ||
| 1749 | 170: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1750 | 171: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1751 | 172: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1752 | 173: {region: 0x9a, script: 0xe, flags: 0x0}, | ||
| 1753 | 174: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1754 | 175: {region: 0x9d, script: 0x5, flags: 0x0}, | ||
| 1755 | 176: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1756 | 177: {region: 0x4f, script: 0x5b, flags: 0x0}, | ||
| 1757 | 178: {region: 0x79, script: 0x5b, flags: 0x0}, | ||
| 1758 | 179: {region: 0x9a, script: 0x22, flags: 0x0}, | ||
| 1759 | 180: {region: 0xe9, script: 0x5, flags: 0x0}, | ||
| 1760 | 181: {region: 0x9a, script: 0x22, flags: 0x0}, | ||
| 1761 | 182: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1762 | 183: {region: 0x33, script: 0x5b, flags: 0x0}, | ||
| 1763 | 184: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1764 | 185: {region: 0xb5, script: 0xc, flags: 0x0}, | ||
| 1765 | 186: {region: 0x52, script: 0x5b, flags: 0x0}, | ||
| 1766 | 187: {region: 0x166, script: 0x2c, flags: 0x0}, | ||
| 1767 | 188: {region: 0xe8, script: 0x5b, flags: 0x0}, | ||
| 1768 | 189: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1769 | 190: {region: 0xe9, script: 0x22, flags: 0x0}, | ||
| 1770 | 191: {region: 0x107, script: 0x20, flags: 0x0}, | ||
| 1771 | 192: {region: 0x160, script: 0x5b, flags: 0x0}, | ||
| 1772 | 193: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1773 | 194: {region: 0x96, script: 0x5b, flags: 0x0}, | ||
| 1774 | 195: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1775 | 196: {region: 0x52, script: 0x5b, flags: 0x0}, | ||
| 1776 | 197: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1777 | 198: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1778 | 199: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1779 | 200: {region: 0x87, script: 0x5b, flags: 0x0}, | ||
| 1780 | 201: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1781 | 202: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1782 | 203: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1783 | 204: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1784 | 205: {region: 0x6e, script: 0x2c, flags: 0x0}, | ||
| 1785 | 206: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1786 | 207: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1787 | 208: {region: 0x52, script: 0x5b, flags: 0x0}, | ||
| 1788 | 209: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1789 | 210: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1790 | 211: {region: 0xc4, script: 0x5b, flags: 0x0}, | ||
| 1791 | 212: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1792 | 213: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1793 | 214: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1794 | 215: {region: 0x6f, script: 0x5b, flags: 0x0}, | ||
| 1795 | 216: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1796 | 217: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1797 | 218: {region: 0xd7, script: 0x5b, flags: 0x0}, | ||
| 1798 | 219: {region: 0x35, script: 0x16, flags: 0x0}, | ||
| 1799 | 220: {region: 0x107, script: 0x20, flags: 0x0}, | ||
| 1800 | 221: {region: 0xe8, script: 0x5b, flags: 0x0}, | ||
| 1801 | 222: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1802 | 223: {region: 0x132, script: 0x5b, flags: 0x0}, | ||
| 1803 | 224: {region: 0x8b, script: 0x5b, flags: 0x0}, | ||
| 1804 | 225: {region: 0x76, script: 0x5b, flags: 0x0}, | ||
| 1805 | 226: {region: 0x107, script: 0x20, flags: 0x0}, | ||
| 1806 | 227: {region: 0x136, script: 0x5b, flags: 0x0}, | ||
| 1807 | 228: {region: 0x49, script: 0x5b, flags: 0x0}, | ||
| 1808 | 229: {region: 0x136, script: 0x1a, flags: 0x0}, | ||
| 1809 | 230: {region: 0xa7, script: 0x5, flags: 0x0}, | ||
| 1810 | 231: {region: 0x13f, script: 0x19, flags: 0x0}, | ||
| 1811 | 232: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1812 | 233: {region: 0x9c, script: 0x5, flags: 0x0}, | ||
| 1813 | 234: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1814 | 235: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1815 | 236: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1816 | 237: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1817 | 238: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1818 | 239: {region: 0xc6, script: 0xda, flags: 0x0}, | ||
| 1819 | 240: {region: 0x79, script: 0x5b, flags: 0x0}, | ||
| 1820 | 241: {region: 0x6c, script: 0x1d, flags: 0x0}, | ||
| 1821 | 242: {region: 0xe8, script: 0x5b, flags: 0x0}, | ||
| 1822 | 243: {region: 0x49, script: 0x17, flags: 0x0}, | ||
| 1823 | 244: {region: 0x131, script: 0x20, flags: 0x0}, | ||
| 1824 | 245: {region: 0x49, script: 0x17, flags: 0x0}, | ||
| 1825 | 246: {region: 0x49, script: 0x17, flags: 0x0}, | ||
| 1826 | 247: {region: 0x49, script: 0x17, flags: 0x0}, | ||
| 1827 | 248: {region: 0x49, script: 0x17, flags: 0x0}, | ||
| 1828 | 249: {region: 0x10b, script: 0x5b, flags: 0x0}, | ||
| 1829 | 250: {region: 0x5f, script: 0x5b, flags: 0x0}, | ||
| 1830 | 251: {region: 0xea, script: 0x5b, flags: 0x0}, | ||
| 1831 | 252: {region: 0x49, script: 0x17, flags: 0x0}, | ||
| 1832 | 253: {region: 0xc5, script: 0x88, flags: 0x0}, | ||
| 1833 | 254: {region: 0x8, script: 0x2, flags: 0x1}, | ||
| 1834 | 255: {region: 0x107, script: 0x20, flags: 0x0}, | ||
| 1835 | 256: {region: 0x7c, script: 0x5b, flags: 0x0}, | ||
| 1836 | 257: {region: 0x64, script: 0x5b, flags: 0x0}, | ||
| 1837 | 258: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1838 | 259: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1839 | 260: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1840 | 261: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1841 | 262: {region: 0x136, script: 0x5b, flags: 0x0}, | ||
| 1842 | 263: {region: 0x107, script: 0x20, flags: 0x0}, | ||
| 1843 | 264: {region: 0xa5, script: 0x5b, flags: 0x0}, | ||
| 1844 | 265: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1845 | 266: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1846 | 267: {region: 0x9a, script: 0x5, flags: 0x0}, | ||
| 1847 | 268: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1848 | 269: {region: 0x61, script: 0x5b, flags: 0x0}, | ||
| 1849 | 270: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1850 | 271: {region: 0x49, script: 0x5b, flags: 0x0}, | ||
| 1851 | 272: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1852 | 273: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1853 | 274: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1854 | 275: {region: 0x166, script: 0x5, flags: 0x0}, | ||
| 1855 | 276: {region: 0x49, script: 0x5b, flags: 0x0}, | ||
| 1856 | 277: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1857 | 278: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1858 | 279: {region: 0xd5, script: 0x5b, flags: 0x0}, | ||
| 1859 | 280: {region: 0x4f, script: 0x5b, flags: 0x0}, | ||
| 1860 | 281: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1861 | 282: {region: 0x9a, script: 0x5, flags: 0x0}, | ||
| 1862 | 283: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1863 | 284: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1864 | 285: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1865 | 286: {region: 0x166, script: 0x2c, flags: 0x0}, | ||
| 1866 | 287: {region: 0x61, script: 0x5b, flags: 0x0}, | ||
| 1867 | 288: {region: 0xc4, script: 0x5b, flags: 0x0}, | ||
| 1868 | 289: {region: 0xd1, script: 0x5b, flags: 0x0}, | ||
| 1869 | 290: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1870 | 291: {region: 0xdc, script: 0x22, flags: 0x0}, | ||
| 1871 | 292: {region: 0x52, script: 0x5b, flags: 0x0}, | ||
| 1872 | 293: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1873 | 294: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1874 | 295: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1875 | 296: {region: 0xce, script: 0xed, flags: 0x0}, | ||
| 1876 | 297: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1877 | 298: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1878 | 299: {region: 0x115, script: 0x5b, flags: 0x0}, | ||
| 1879 | 300: {region: 0x37, script: 0x5b, flags: 0x0}, | ||
| 1880 | 301: {region: 0x43, script: 0xef, flags: 0x0}, | ||
| 1881 | 302: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1882 | 303: {region: 0xa5, script: 0x5b, flags: 0x0}, | ||
| 1883 | 304: {region: 0x81, script: 0x5b, flags: 0x0}, | ||
| 1884 | 305: {region: 0xd7, script: 0x5b, flags: 0x0}, | ||
| 1885 | 306: {region: 0x9f, script: 0x5b, flags: 0x0}, | ||
| 1886 | 307: {region: 0x6c, script: 0x29, flags: 0x0}, | ||
| 1887 | 308: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1888 | 309: {region: 0xc5, script: 0x4b, flags: 0x0}, | ||
| 1889 | 310: {region: 0x88, script: 0x34, flags: 0x0}, | ||
| 1890 | 311: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1891 | 312: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1892 | 313: {region: 0xa, script: 0x2, flags: 0x1}, | ||
| 1893 | 314: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1894 | 315: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1895 | 316: {region: 0x1, script: 0x5b, flags: 0x0}, | ||
| 1896 | 317: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1897 | 318: {region: 0x6f, script: 0x5b, flags: 0x0}, | ||
| 1898 | 319: {region: 0x136, script: 0x5b, flags: 0x0}, | ||
| 1899 | 320: {region: 0x6b, script: 0x5b, flags: 0x0}, | ||
| 1900 | 321: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1901 | 322: {region: 0x9f, script: 0x46, flags: 0x0}, | ||
| 1902 | 323: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1903 | 324: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1904 | 325: {region: 0x6f, script: 0x5b, flags: 0x0}, | ||
| 1905 | 326: {region: 0x52, script: 0x5b, flags: 0x0}, | ||
| 1906 | 327: {region: 0x6f, script: 0x5b, flags: 0x0}, | ||
| 1907 | 328: {region: 0x9d, script: 0x5, flags: 0x0}, | ||
| 1908 | 329: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1909 | 330: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1910 | 331: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1911 | 332: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1912 | 333: {region: 0x87, script: 0x5b, flags: 0x0}, | ||
| 1913 | 334: {region: 0xc, script: 0x2, flags: 0x1}, | ||
| 1914 | 335: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1915 | 336: {region: 0xc4, script: 0x5b, flags: 0x0}, | ||
| 1916 | 337: {region: 0x73, script: 0x5b, flags: 0x0}, | ||
| 1917 | 338: {region: 0x10c, script: 0x5, flags: 0x0}, | ||
| 1918 | 339: {region: 0xe8, script: 0x5b, flags: 0x0}, | ||
| 1919 | 340: {region: 0x10d, script: 0x5b, flags: 0x0}, | ||
| 1920 | 341: {region: 0x74, script: 0x5b, flags: 0x0}, | ||
| 1921 | 342: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1922 | 343: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1923 | 344: {region: 0x77, script: 0x5b, flags: 0x0}, | ||
| 1924 | 345: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1925 | 346: {region: 0x3b, script: 0x5b, flags: 0x0}, | ||
| 1926 | 347: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1927 | 348: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1928 | 349: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1929 | 350: {region: 0x79, script: 0x5b, flags: 0x0}, | ||
| 1930 | 351: {region: 0x136, script: 0x5b, flags: 0x0}, | ||
| 1931 | 352: {region: 0x79, script: 0x5b, flags: 0x0}, | ||
| 1932 | 353: {region: 0x61, script: 0x5b, flags: 0x0}, | ||
| 1933 | 354: {region: 0x61, script: 0x5b, flags: 0x0}, | ||
| 1934 | 355: {region: 0x52, script: 0x5, flags: 0x0}, | ||
| 1935 | 356: {region: 0x141, script: 0x5b, flags: 0x0}, | ||
| 1936 | 357: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1937 | 358: {region: 0x85, script: 0x5b, flags: 0x0}, | ||
| 1938 | 359: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1939 | 360: {region: 0xd5, script: 0x5b, flags: 0x0}, | ||
| 1940 | 361: {region: 0x9f, script: 0x5b, flags: 0x0}, | ||
| 1941 | 362: {region: 0xd7, script: 0x5b, flags: 0x0}, | ||
| 1942 | 363: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1943 | 364: {region: 0x10c, script: 0x5b, flags: 0x0}, | ||
| 1944 | 365: {region: 0xda, script: 0x5b, flags: 0x0}, | ||
| 1945 | 366: {region: 0x97, script: 0x5b, flags: 0x0}, | ||
| 1946 | 367: {region: 0x81, script: 0x5b, flags: 0x0}, | ||
| 1947 | 368: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1948 | 369: {region: 0xbd, script: 0x5b, flags: 0x0}, | ||
| 1949 | 370: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1950 | 371: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1951 | 372: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1952 | 373: {region: 0x53, script: 0x3b, flags: 0x0}, | ||
| 1953 | 374: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1954 | 375: {region: 0x96, script: 0x5b, flags: 0x0}, | ||
| 1955 | 376: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1956 | 377: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1957 | 378: {region: 0x9a, script: 0x22, flags: 0x0}, | ||
| 1958 | 379: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1959 | 380: {region: 0x9d, script: 0x5, flags: 0x0}, | ||
| 1960 | 381: {region: 0x7f, script: 0x5b, flags: 0x0}, | ||
| 1961 | 382: {region: 0x7c, script: 0x5b, flags: 0x0}, | ||
| 1962 | 383: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1963 | 384: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1964 | 385: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1965 | 386: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1966 | 387: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1967 | 388: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1968 | 389: {region: 0x70, script: 0x2c, flags: 0x0}, | ||
| 1969 | 390: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1970 | 391: {region: 0xdc, script: 0x22, flags: 0x0}, | ||
| 1971 | 392: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1972 | 393: {region: 0xa8, script: 0x5b, flags: 0x0}, | ||
| 1973 | 394: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1974 | 395: {region: 0xe9, script: 0x5, flags: 0x0}, | ||
| 1975 | 396: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1976 | 397: {region: 0xe9, script: 0x5, flags: 0x0}, | ||
| 1977 | 398: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1978 | 399: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1979 | 400: {region: 0x6f, script: 0x5b, flags: 0x0}, | ||
| 1980 | 401: {region: 0x9d, script: 0x5, flags: 0x0}, | ||
| 1981 | 402: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1982 | 403: {region: 0x166, script: 0x2c, flags: 0x0}, | ||
| 1983 | 404: {region: 0xf2, script: 0x5b, flags: 0x0}, | ||
| 1984 | 405: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1985 | 406: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1986 | 407: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1987 | 408: {region: 0x166, script: 0x2c, flags: 0x0}, | ||
| 1988 | 409: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1989 | 410: {region: 0x9a, script: 0x22, flags: 0x0}, | ||
| 1990 | 411: {region: 0x9a, script: 0xe9, flags: 0x0}, | ||
| 1991 | 412: {region: 0x96, script: 0x5b, flags: 0x0}, | ||
| 1992 | 413: {region: 0xda, script: 0x5b, flags: 0x0}, | ||
| 1993 | 414: {region: 0x131, script: 0x32, flags: 0x0}, | ||
| 1994 | 415: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1995 | 416: {region: 0xe, script: 0x2, flags: 0x1}, | ||
| 1996 | 417: {region: 0x9a, script: 0xe, flags: 0x0}, | ||
| 1997 | 418: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 1998 | 419: {region: 0x4e, script: 0x5b, flags: 0x0}, | ||
| 1999 | 420: {region: 0x9a, script: 0x35, flags: 0x0}, | ||
| 2000 | 421: {region: 0x41, script: 0x5b, flags: 0x0}, | ||
| 2001 | 422: {region: 0x54, script: 0x5b, flags: 0x0}, | ||
| 2002 | 423: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2003 | 424: {region: 0x81, script: 0x5b, flags: 0x0}, | ||
| 2004 | 425: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2005 | 426: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2006 | 427: {region: 0xa5, script: 0x5b, flags: 0x0}, | ||
| 2007 | 428: {region: 0x99, script: 0x5b, flags: 0x0}, | ||
| 2008 | 429: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2009 | 430: {region: 0xdc, script: 0x22, flags: 0x0}, | ||
| 2010 | 431: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2011 | 432: {region: 0x166, script: 0x5, flags: 0x0}, | ||
| 2012 | 433: {region: 0x49, script: 0x5b, flags: 0x0}, | ||
| 2013 | 434: {region: 0x166, script: 0x5, flags: 0x0}, | ||
| 2014 | 435: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2015 | 436: {region: 0x10, script: 0x3, flags: 0x1}, | ||
| 2016 | 437: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2017 | 438: {region: 0x53, script: 0x3b, flags: 0x0}, | ||
| 2018 | 439: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2019 | 440: {region: 0x136, script: 0x5b, flags: 0x0}, | ||
| 2020 | 441: {region: 0x24, script: 0x5, flags: 0x0}, | ||
| 2021 | 442: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2022 | 443: {region: 0x166, script: 0x2c, flags: 0x0}, | ||
| 2023 | 444: {region: 0x98, script: 0x3e, flags: 0x0}, | ||
| 2024 | 445: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2025 | 446: {region: 0x9a, script: 0x22, flags: 0x0}, | ||
| 2026 | 447: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2027 | 448: {region: 0x74, script: 0x5b, flags: 0x0}, | ||
| 2028 | 449: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2029 | 450: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2030 | 451: {region: 0xe8, script: 0x5b, flags: 0x0}, | ||
| 2031 | 452: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2032 | 453: {region: 0x12c, script: 0x40, flags: 0x0}, | ||
| 2033 | 454: {region: 0x53, script: 0x92, flags: 0x0}, | ||
| 2034 | 455: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2035 | 456: {region: 0xe9, script: 0x5, flags: 0x0}, | ||
| 2036 | 457: {region: 0x9a, script: 0x22, flags: 0x0}, | ||
| 2037 | 458: {region: 0xb0, script: 0x41, flags: 0x0}, | ||
| 2038 | 459: {region: 0xe8, script: 0x5b, flags: 0x0}, | ||
| 2039 | 460: {region: 0xe9, script: 0x5, flags: 0x0}, | ||
| 2040 | 461: {region: 0xe7, script: 0x5b, flags: 0x0}, | ||
| 2041 | 462: {region: 0x9a, script: 0x22, flags: 0x0}, | ||
| 2042 | 463: {region: 0x9a, script: 0x22, flags: 0x0}, | ||
| 2043 | 464: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2044 | 465: {region: 0x91, script: 0x5b, flags: 0x0}, | ||
| 2045 | 466: {region: 0x61, script: 0x5b, flags: 0x0}, | ||
| 2046 | 467: {region: 0x53, script: 0x3b, flags: 0x0}, | ||
| 2047 | 468: {region: 0x92, script: 0x5b, flags: 0x0}, | ||
| 2048 | 469: {region: 0x93, script: 0x5b, flags: 0x0}, | ||
| 2049 | 470: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2050 | 471: {region: 0x28, script: 0x8, flags: 0x0}, | ||
| 2051 | 472: {region: 0xd3, script: 0x5b, flags: 0x0}, | ||
| 2052 | 473: {region: 0x79, script: 0x5b, flags: 0x0}, | ||
| 2053 | 474: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2054 | 475: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2055 | 476: {region: 0xd1, script: 0x5b, flags: 0x0}, | ||
| 2056 | 477: {region: 0xd7, script: 0x5b, flags: 0x0}, | ||
| 2057 | 478: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2058 | 479: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2059 | 480: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2060 | 481: {region: 0x96, script: 0x5b, flags: 0x0}, | ||
| 2061 | 482: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2062 | 483: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2063 | 484: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2064 | 486: {region: 0x123, script: 0x5b, flags: 0x0}, | ||
| 2065 | 487: {region: 0xd7, script: 0x5b, flags: 0x0}, | ||
| 2066 | 488: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2067 | 489: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2068 | 490: {region: 0x53, script: 0xfd, flags: 0x0}, | ||
| 2069 | 491: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2070 | 492: {region: 0x136, script: 0x5b, flags: 0x0}, | ||
| 2071 | 493: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2072 | 494: {region: 0x49, script: 0x5b, flags: 0x0}, | ||
| 2073 | 495: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2074 | 496: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2075 | 497: {region: 0xe8, script: 0x5b, flags: 0x0}, | ||
| 2076 | 498: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2077 | 499: {region: 0x96, script: 0x5b, flags: 0x0}, | ||
| 2078 | 500: {region: 0x107, script: 0x20, flags: 0x0}, | ||
| 2079 | 501: {region: 0x1, script: 0x5b, flags: 0x0}, | ||
| 2080 | 502: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2081 | 503: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2082 | 504: {region: 0x9e, script: 0x5b, flags: 0x0}, | ||
| 2083 | 505: {region: 0x9f, script: 0x5b, flags: 0x0}, | ||
| 2084 | 506: {region: 0x49, script: 0x17, flags: 0x0}, | ||
| 2085 | 507: {region: 0x98, script: 0x3e, flags: 0x0}, | ||
| 2086 | 508: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2087 | 509: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2088 | 510: {region: 0x107, script: 0x5b, flags: 0x0}, | ||
| 2089 | 511: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2090 | 512: {region: 0xa3, script: 0x49, flags: 0x0}, | ||
| 2091 | 513: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2092 | 514: {region: 0xa1, script: 0x5b, flags: 0x0}, | ||
| 2093 | 515: {region: 0x1, script: 0x5b, flags: 0x0}, | ||
| 2094 | 516: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2095 | 517: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2096 | 518: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2097 | 519: {region: 0x52, script: 0x5b, flags: 0x0}, | ||
| 2098 | 520: {region: 0x131, script: 0x3e, flags: 0x0}, | ||
| 2099 | 521: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2100 | 522: {region: 0x130, script: 0x5b, flags: 0x0}, | ||
| 2101 | 523: {region: 0xdc, script: 0x22, flags: 0x0}, | ||
| 2102 | 524: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2103 | 525: {region: 0x64, script: 0x5b, flags: 0x0}, | ||
| 2104 | 526: {region: 0x96, script: 0x5b, flags: 0x0}, | ||
| 2105 | 527: {region: 0x96, script: 0x5b, flags: 0x0}, | ||
| 2106 | 528: {region: 0x7e, script: 0x2e, flags: 0x0}, | ||
| 2107 | 529: {region: 0x138, script: 0x20, flags: 0x0}, | ||
| 2108 | 530: {region: 0x68, script: 0x5b, flags: 0x0}, | ||
| 2109 | 531: {region: 0xc5, script: 0x5b, flags: 0x0}, | ||
| 2110 | 532: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2111 | 533: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2112 | 534: {region: 0xd7, script: 0x5b, flags: 0x0}, | ||
| 2113 | 535: {region: 0xa5, script: 0x5b, flags: 0x0}, | ||
| 2114 | 536: {region: 0xc4, script: 0x5b, flags: 0x0}, | ||
| 2115 | 537: {region: 0x107, script: 0x20, flags: 0x0}, | ||
| 2116 | 538: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2117 | 539: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2118 | 540: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2119 | 541: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2120 | 542: {region: 0xd5, script: 0x5, flags: 0x0}, | ||
| 2121 | 543: {region: 0xd7, script: 0x5b, flags: 0x0}, | ||
| 2122 | 544: {region: 0x165, script: 0x5b, flags: 0x0}, | ||
| 2123 | 545: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2124 | 546: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2125 | 547: {region: 0x130, script: 0x5b, flags: 0x0}, | ||
| 2126 | 548: {region: 0x123, script: 0x5, flags: 0x0}, | ||
| 2127 | 549: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2128 | 550: {region: 0x124, script: 0xee, flags: 0x0}, | ||
| 2129 | 551: {region: 0x5b, script: 0x5b, flags: 0x0}, | ||
| 2130 | 552: {region: 0x52, script: 0x5b, flags: 0x0}, | ||
| 2131 | 553: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2132 | 554: {region: 0x4f, script: 0x5b, flags: 0x0}, | ||
| 2133 | 555: {region: 0x9a, script: 0x22, flags: 0x0}, | ||
| 2134 | 556: {region: 0x9a, script: 0x22, flags: 0x0}, | ||
| 2135 | 557: {region: 0x4b, script: 0x5b, flags: 0x0}, | ||
| 2136 | 558: {region: 0x96, script: 0x5b, flags: 0x0}, | ||
| 2137 | 559: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2138 | 560: {region: 0x41, script: 0x5b, flags: 0x0}, | ||
| 2139 | 561: {region: 0x9a, script: 0x5b, flags: 0x0}, | ||
| 2140 | 562: {region: 0x53, script: 0xe5, flags: 0x0}, | ||
| 2141 | 563: {region: 0x9a, script: 0x22, flags: 0x0}, | ||
| 2142 | 564: {region: 0xc4, script: 0x5b, flags: 0x0}, | ||
| 2143 | 565: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2144 | 566: {region: 0x9a, script: 0x76, flags: 0x0}, | ||
| 2145 | 567: {region: 0xe9, script: 0x5, flags: 0x0}, | ||
| 2146 | 568: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2147 | 569: {region: 0xa5, script: 0x5b, flags: 0x0}, | ||
| 2148 | 570: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2149 | 571: {region: 0x12c, script: 0x5b, flags: 0x0}, | ||
| 2150 | 572: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2151 | 573: {region: 0xd3, script: 0x5b, flags: 0x0}, | ||
| 2152 | 574: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2153 | 575: {region: 0xb0, script: 0x58, flags: 0x0}, | ||
| 2154 | 576: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2155 | 577: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2156 | 578: {region: 0x13, script: 0x6, flags: 0x1}, | ||
| 2157 | 579: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2158 | 580: {region: 0x52, script: 0x5b, flags: 0x0}, | ||
| 2159 | 581: {region: 0x83, script: 0x5b, flags: 0x0}, | ||
| 2160 | 582: {region: 0xa5, script: 0x5b, flags: 0x0}, | ||
| 2161 | 583: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2162 | 584: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2163 | 585: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2164 | 586: {region: 0xa7, script: 0x4f, flags: 0x0}, | ||
| 2165 | 587: {region: 0x2a, script: 0x5b, flags: 0x0}, | ||
| 2166 | 588: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2167 | 589: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2168 | 590: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2169 | 591: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2170 | 592: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2171 | 593: {region: 0x9a, script: 0x53, flags: 0x0}, | ||
| 2172 | 594: {region: 0x8c, script: 0x5b, flags: 0x0}, | ||
| 2173 | 595: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2174 | 596: {region: 0xac, script: 0x54, flags: 0x0}, | ||
| 2175 | 597: {region: 0x107, script: 0x20, flags: 0x0}, | ||
| 2176 | 598: {region: 0x9a, script: 0x22, flags: 0x0}, | ||
| 2177 | 599: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2178 | 600: {region: 0x76, script: 0x5b, flags: 0x0}, | ||
| 2179 | 601: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2180 | 602: {region: 0xb5, script: 0x5b, flags: 0x0}, | ||
| 2181 | 603: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2182 | 604: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2183 | 605: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2184 | 606: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2185 | 607: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2186 | 608: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2187 | 609: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2188 | 610: {region: 0x166, script: 0x2c, flags: 0x0}, | ||
| 2189 | 611: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2190 | 612: {region: 0x107, script: 0x20, flags: 0x0}, | ||
| 2191 | 613: {region: 0x113, script: 0x5b, flags: 0x0}, | ||
| 2192 | 614: {region: 0xe8, script: 0x5b, flags: 0x0}, | ||
| 2193 | 615: {region: 0x107, script: 0x5b, flags: 0x0}, | ||
| 2194 | 616: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2195 | 617: {region: 0x9a, script: 0x22, flags: 0x0}, | ||
| 2196 | 618: {region: 0x9a, script: 0x5, flags: 0x0}, | ||
| 2197 | 619: {region: 0x130, script: 0x5b, flags: 0x0}, | ||
| 2198 | 620: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2199 | 621: {region: 0x52, script: 0x5b, flags: 0x0}, | ||
| 2200 | 622: {region: 0x61, script: 0x5b, flags: 0x0}, | ||
| 2201 | 623: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2202 | 624: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2203 | 625: {region: 0x166, script: 0x2c, flags: 0x0}, | ||
| 2204 | 626: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2205 | 627: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2206 | 628: {region: 0x19, script: 0x3, flags: 0x1}, | ||
| 2207 | 629: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2208 | 630: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2209 | 631: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2210 | 632: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2211 | 633: {region: 0x107, script: 0x20, flags: 0x0}, | ||
| 2212 | 634: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2213 | 635: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2214 | 636: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2215 | 637: {region: 0x107, script: 0x20, flags: 0x0}, | ||
| 2216 | 638: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2217 | 639: {region: 0x96, script: 0x5b, flags: 0x0}, | ||
| 2218 | 640: {region: 0xe9, script: 0x5, flags: 0x0}, | ||
| 2219 | 641: {region: 0x7c, script: 0x5b, flags: 0x0}, | ||
| 2220 | 642: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2221 | 643: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2222 | 644: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2223 | 645: {region: 0x166, script: 0x2c, flags: 0x0}, | ||
| 2224 | 646: {region: 0x124, script: 0xee, flags: 0x0}, | ||
| 2225 | 647: {region: 0xe9, script: 0x5, flags: 0x0}, | ||
| 2226 | 648: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2227 | 649: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2228 | 650: {region: 0x1c, script: 0x5, flags: 0x1}, | ||
| 2229 | 651: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2230 | 652: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2231 | 653: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2232 | 654: {region: 0x139, script: 0x5b, flags: 0x0}, | ||
| 2233 | 655: {region: 0x88, script: 0x5f, flags: 0x0}, | ||
| 2234 | 656: {region: 0x98, script: 0x3e, flags: 0x0}, | ||
| 2235 | 657: {region: 0x130, script: 0x5b, flags: 0x0}, | ||
| 2236 | 658: {region: 0xe9, script: 0x5, flags: 0x0}, | ||
| 2237 | 659: {region: 0x132, script: 0x5b, flags: 0x0}, | ||
| 2238 | 660: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2239 | 661: {region: 0xb8, script: 0x5b, flags: 0x0}, | ||
| 2240 | 662: {region: 0x107, script: 0x20, flags: 0x0}, | ||
| 2241 | 663: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2242 | 664: {region: 0x96, script: 0x5b, flags: 0x0}, | ||
| 2243 | 665: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2244 | 666: {region: 0x53, script: 0xee, flags: 0x0}, | ||
| 2245 | 667: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2246 | 668: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2247 | 669: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2248 | 670: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2249 | 671: {region: 0x9a, script: 0x5d, flags: 0x0}, | ||
| 2250 | 672: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2251 | 673: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2252 | 674: {region: 0x107, script: 0x20, flags: 0x0}, | ||
| 2253 | 675: {region: 0x132, script: 0x5b, flags: 0x0}, | ||
| 2254 | 676: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2255 | 677: {region: 0xda, script: 0x5b, flags: 0x0}, | ||
| 2256 | 678: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2257 | 679: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2258 | 680: {region: 0x21, script: 0x2, flags: 0x1}, | ||
| 2259 | 681: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2260 | 682: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2261 | 683: {region: 0x9f, script: 0x5b, flags: 0x0}, | ||
| 2262 | 684: {region: 0x53, script: 0x61, flags: 0x0}, | ||
| 2263 | 685: {region: 0x96, script: 0x5b, flags: 0x0}, | ||
| 2264 | 686: {region: 0x9d, script: 0x5, flags: 0x0}, | ||
| 2265 | 687: {region: 0x136, script: 0x5b, flags: 0x0}, | ||
| 2266 | 688: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2267 | 689: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2268 | 690: {region: 0x9a, script: 0xe9, flags: 0x0}, | ||
| 2269 | 691: {region: 0x9f, script: 0x5b, flags: 0x0}, | ||
| 2270 | 692: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2271 | 693: {region: 0x4b, script: 0x5b, flags: 0x0}, | ||
| 2272 | 694: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2273 | 695: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2274 | 696: {region: 0xb0, script: 0x58, flags: 0x0}, | ||
| 2275 | 697: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2276 | 698: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2277 | 699: {region: 0x4b, script: 0x5b, flags: 0x0}, | ||
| 2278 | 700: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2279 | 701: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2280 | 702: {region: 0x163, script: 0x5b, flags: 0x0}, | ||
| 2281 | 703: {region: 0x9d, script: 0x5, flags: 0x0}, | ||
| 2282 | 704: {region: 0xb7, script: 0x5b, flags: 0x0}, | ||
| 2283 | 705: {region: 0xb9, script: 0x5b, flags: 0x0}, | ||
| 2284 | 706: {region: 0x4b, script: 0x5b, flags: 0x0}, | ||
| 2285 | 707: {region: 0x4b, script: 0x5b, flags: 0x0}, | ||
| 2286 | 708: {region: 0xa5, script: 0x5b, flags: 0x0}, | ||
| 2287 | 709: {region: 0xa5, script: 0x5b, flags: 0x0}, | ||
| 2288 | 710: {region: 0x9d, script: 0x5, flags: 0x0}, | ||
| 2289 | 711: {region: 0xb9, script: 0x5b, flags: 0x0}, | ||
| 2290 | 712: {region: 0x124, script: 0xee, flags: 0x0}, | ||
| 2291 | 713: {region: 0x53, script: 0x3b, flags: 0x0}, | ||
| 2292 | 714: {region: 0x12c, script: 0x5b, flags: 0x0}, | ||
| 2293 | 715: {region: 0x96, script: 0x5b, flags: 0x0}, | ||
| 2294 | 716: {region: 0x52, script: 0x5b, flags: 0x0}, | ||
| 2295 | 717: {region: 0x9a, script: 0x22, flags: 0x0}, | ||
| 2296 | 718: {region: 0x9a, script: 0x22, flags: 0x0}, | ||
| 2297 | 719: {region: 0x96, script: 0x5b, flags: 0x0}, | ||
| 2298 | 720: {region: 0x23, script: 0x3, flags: 0x1}, | ||
| 2299 | 721: {region: 0xa5, script: 0x5b, flags: 0x0}, | ||
| 2300 | 722: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2301 | 723: {region: 0xd0, script: 0x5b, flags: 0x0}, | ||
| 2302 | 724: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2303 | 725: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2304 | 726: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2305 | 727: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2306 | 728: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2307 | 729: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2308 | 730: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2309 | 731: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2310 | 732: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2311 | 733: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2312 | 734: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2313 | 735: {region: 0x166, script: 0x5, flags: 0x0}, | ||
| 2314 | 736: {region: 0x107, script: 0x20, flags: 0x0}, | ||
| 2315 | 737: {region: 0xe8, script: 0x5b, flags: 0x0}, | ||
| 2316 | 738: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2317 | 739: {region: 0x96, script: 0x5b, flags: 0x0}, | ||
| 2318 | 740: {region: 0x166, script: 0x2c, flags: 0x0}, | ||
| 2319 | 741: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2320 | 742: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2321 | 743: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2322 | 744: {region: 0x113, script: 0x5b, flags: 0x0}, | ||
| 2323 | 745: {region: 0xa5, script: 0x5b, flags: 0x0}, | ||
| 2324 | 746: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2325 | 747: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2326 | 748: {region: 0x124, script: 0x5, flags: 0x0}, | ||
| 2327 | 749: {region: 0xcd, script: 0x5b, flags: 0x0}, | ||
| 2328 | 750: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2329 | 751: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2330 | 752: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2331 | 753: {region: 0xc0, script: 0x5b, flags: 0x0}, | ||
| 2332 | 754: {region: 0xd2, script: 0x5b, flags: 0x0}, | ||
| 2333 | 755: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2334 | 756: {region: 0x52, script: 0x5b, flags: 0x0}, | ||
| 2335 | 757: {region: 0xdc, script: 0x22, flags: 0x0}, | ||
| 2336 | 758: {region: 0x130, script: 0x5b, flags: 0x0}, | ||
| 2337 | 759: {region: 0xc1, script: 0x5b, flags: 0x0}, | ||
| 2338 | 760: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2339 | 761: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2340 | 762: {region: 0xe1, script: 0x5b, flags: 0x0}, | ||
| 2341 | 763: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2342 | 764: {region: 0x96, script: 0x5b, flags: 0x0}, | ||
| 2343 | 765: {region: 0x9c, script: 0x3d, flags: 0x0}, | ||
| 2344 | 766: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2345 | 767: {region: 0xc3, script: 0x20, flags: 0x0}, | ||
| 2346 | 768: {region: 0x166, script: 0x5, flags: 0x0}, | ||
| 2347 | 769: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2348 | 770: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2349 | 771: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2350 | 772: {region: 0x9a, script: 0x6f, flags: 0x0}, | ||
| 2351 | 773: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2352 | 774: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2353 | 775: {region: 0x10c, script: 0x5b, flags: 0x0}, | ||
| 2354 | 776: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2355 | 777: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2356 | 778: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2357 | 779: {region: 0x26, script: 0x3, flags: 0x1}, | ||
| 2358 | 780: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2359 | 781: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2360 | 782: {region: 0x9a, script: 0xe, flags: 0x0}, | ||
| 2361 | 783: {region: 0xc5, script: 0x76, flags: 0x0}, | ||
| 2362 | 785: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2363 | 786: {region: 0x49, script: 0x5b, flags: 0x0}, | ||
| 2364 | 787: {region: 0x49, script: 0x5b, flags: 0x0}, | ||
| 2365 | 788: {region: 0x37, script: 0x5b, flags: 0x0}, | ||
| 2366 | 789: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2367 | 790: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2368 | 791: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2369 | 792: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2370 | 793: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2371 | 794: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2372 | 795: {region: 0x9a, script: 0x22, flags: 0x0}, | ||
| 2373 | 796: {region: 0xdc, script: 0x22, flags: 0x0}, | ||
| 2374 | 797: {region: 0x107, script: 0x20, flags: 0x0}, | ||
| 2375 | 798: {region: 0x35, script: 0x73, flags: 0x0}, | ||
| 2376 | 799: {region: 0x29, script: 0x3, flags: 0x1}, | ||
| 2377 | 800: {region: 0xcc, script: 0x5b, flags: 0x0}, | ||
| 2378 | 801: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2379 | 802: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2380 | 803: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2381 | 804: {region: 0x9a, script: 0x22, flags: 0x0}, | ||
| 2382 | 805: {region: 0x52, script: 0x5b, flags: 0x0}, | ||
| 2383 | 807: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2384 | 808: {region: 0x136, script: 0x5b, flags: 0x0}, | ||
| 2385 | 809: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2386 | 810: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2387 | 811: {region: 0xe9, script: 0x5, flags: 0x0}, | ||
| 2388 | 812: {region: 0xc4, script: 0x5b, flags: 0x0}, | ||
| 2389 | 813: {region: 0x9a, script: 0x22, flags: 0x0}, | ||
| 2390 | 814: {region: 0x96, script: 0x5b, flags: 0x0}, | ||
| 2391 | 815: {region: 0x165, script: 0x5b, flags: 0x0}, | ||
| 2392 | 816: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2393 | 817: {region: 0xc5, script: 0x76, flags: 0x0}, | ||
| 2394 | 818: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2395 | 819: {region: 0x166, script: 0x2c, flags: 0x0}, | ||
| 2396 | 820: {region: 0x107, script: 0x20, flags: 0x0}, | ||
| 2397 | 821: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2398 | 822: {region: 0x132, script: 0x5b, flags: 0x0}, | ||
| 2399 | 823: {region: 0x9d, script: 0x67, flags: 0x0}, | ||
| 2400 | 824: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2401 | 825: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2402 | 826: {region: 0x9d, script: 0x5, flags: 0x0}, | ||
| 2403 | 827: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2404 | 828: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2405 | 829: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2406 | 830: {region: 0xde, script: 0x5b, flags: 0x0}, | ||
| 2407 | 831: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2408 | 832: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2409 | 834: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2410 | 835: {region: 0x53, script: 0x3b, flags: 0x0}, | ||
| 2411 | 836: {region: 0x9f, script: 0x5b, flags: 0x0}, | ||
| 2412 | 837: {region: 0xd3, script: 0x5b, flags: 0x0}, | ||
| 2413 | 838: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2414 | 839: {region: 0xdb, script: 0x5b, flags: 0x0}, | ||
| 2415 | 840: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2416 | 841: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2417 | 842: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2418 | 843: {region: 0xd0, script: 0x5b, flags: 0x0}, | ||
| 2419 | 844: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2420 | 845: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2421 | 846: {region: 0x165, script: 0x5b, flags: 0x0}, | ||
| 2422 | 847: {region: 0xd2, script: 0x5b, flags: 0x0}, | ||
| 2423 | 848: {region: 0x61, script: 0x5b, flags: 0x0}, | ||
| 2424 | 849: {region: 0xdc, script: 0x22, flags: 0x0}, | ||
| 2425 | 850: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2426 | 851: {region: 0xdc, script: 0x22, flags: 0x0}, | ||
| 2427 | 852: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2428 | 853: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2429 | 854: {region: 0xd3, script: 0x5b, flags: 0x0}, | ||
| 2430 | 855: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2431 | 856: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2432 | 857: {region: 0xd2, script: 0x5b, flags: 0x0}, | ||
| 2433 | 858: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2434 | 859: {region: 0xd0, script: 0x5b, flags: 0x0}, | ||
| 2435 | 860: {region: 0xd0, script: 0x5b, flags: 0x0}, | ||
| 2436 | 861: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2437 | 862: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2438 | 863: {region: 0x96, script: 0x5b, flags: 0x0}, | ||
| 2439 | 864: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2440 | 865: {region: 0xe0, script: 0x5b, flags: 0x0}, | ||
| 2441 | 866: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2442 | 867: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2443 | 868: {region: 0x9a, script: 0x5b, flags: 0x0}, | ||
| 2444 | 869: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2445 | 870: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2446 | 871: {region: 0xda, script: 0x5b, flags: 0x0}, | ||
| 2447 | 872: {region: 0x52, script: 0x5b, flags: 0x0}, | ||
| 2448 | 873: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2449 | 874: {region: 0xdb, script: 0x5b, flags: 0x0}, | ||
| 2450 | 875: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2451 | 876: {region: 0x52, script: 0x5b, flags: 0x0}, | ||
| 2452 | 877: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2453 | 878: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2454 | 879: {region: 0xdb, script: 0x5b, flags: 0x0}, | ||
| 2455 | 880: {region: 0x124, script: 0x57, flags: 0x0}, | ||
| 2456 | 881: {region: 0x9a, script: 0x22, flags: 0x0}, | ||
| 2457 | 882: {region: 0x10d, script: 0xcb, flags: 0x0}, | ||
| 2458 | 883: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2459 | 884: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2460 | 885: {region: 0x85, script: 0x7e, flags: 0x0}, | ||
| 2461 | 886: {region: 0x162, script: 0x5b, flags: 0x0}, | ||
| 2462 | 887: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2463 | 888: {region: 0x49, script: 0x17, flags: 0x0}, | ||
| 2464 | 889: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2465 | 890: {region: 0x162, script: 0x5b, flags: 0x0}, | ||
| 2466 | 891: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2467 | 892: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2468 | 893: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2469 | 894: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2470 | 895: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2471 | 896: {region: 0x118, script: 0x5b, flags: 0x0}, | ||
| 2472 | 897: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2473 | 898: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2474 | 899: {region: 0x136, script: 0x5b, flags: 0x0}, | ||
| 2475 | 900: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2476 | 901: {region: 0x53, script: 0x5b, flags: 0x0}, | ||
| 2477 | 902: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2478 | 903: {region: 0xcf, script: 0x5b, flags: 0x0}, | ||
| 2479 | 904: {region: 0x130, script: 0x5b, flags: 0x0}, | ||
| 2480 | 905: {region: 0x132, script: 0x5b, flags: 0x0}, | ||
| 2481 | 906: {region: 0x81, script: 0x5b, flags: 0x0}, | ||
| 2482 | 907: {region: 0x79, script: 0x5b, flags: 0x0}, | ||
| 2483 | 908: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2484 | 910: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2485 | 911: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2486 | 912: {region: 0x70, script: 0x5b, flags: 0x0}, | ||
| 2487 | 913: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2488 | 914: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2489 | 915: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2490 | 916: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2491 | 917: {region: 0x9a, script: 0x83, flags: 0x0}, | ||
| 2492 | 918: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2493 | 919: {region: 0x166, script: 0x5, flags: 0x0}, | ||
| 2494 | 920: {region: 0x7e, script: 0x20, flags: 0x0}, | ||
| 2495 | 921: {region: 0x136, script: 0x84, flags: 0x0}, | ||
| 2496 | 922: {region: 0x166, script: 0x5, flags: 0x0}, | ||
| 2497 | 923: {region: 0xc6, script: 0x82, flags: 0x0}, | ||
| 2498 | 924: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2499 | 925: {region: 0x2c, script: 0x3, flags: 0x1}, | ||
| 2500 | 926: {region: 0xe8, script: 0x5b, flags: 0x0}, | ||
| 2501 | 927: {region: 0x2f, script: 0x2, flags: 0x1}, | ||
| 2502 | 928: {region: 0xe8, script: 0x5b, flags: 0x0}, | ||
| 2503 | 929: {region: 0x30, script: 0x5b, flags: 0x0}, | ||
| 2504 | 930: {region: 0xf1, script: 0x5b, flags: 0x0}, | ||
| 2505 | 931: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2506 | 932: {region: 0x79, script: 0x5b, flags: 0x0}, | ||
| 2507 | 933: {region: 0xd7, script: 0x5b, flags: 0x0}, | ||
| 2508 | 934: {region: 0x136, script: 0x5b, flags: 0x0}, | ||
| 2509 | 935: {region: 0x49, script: 0x5b, flags: 0x0}, | ||
| 2510 | 936: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2511 | 937: {region: 0x9d, script: 0xfa, flags: 0x0}, | ||
| 2512 | 938: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2513 | 939: {region: 0x61, script: 0x5b, flags: 0x0}, | ||
| 2514 | 940: {region: 0x166, script: 0x5, flags: 0x0}, | ||
| 2515 | 941: {region: 0xb1, script: 0x90, flags: 0x0}, | ||
| 2516 | 943: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2517 | 944: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2518 | 945: {region: 0x9a, script: 0x12, flags: 0x0}, | ||
| 2519 | 946: {region: 0xa5, script: 0x5b, flags: 0x0}, | ||
| 2520 | 947: {region: 0xea, script: 0x5b, flags: 0x0}, | ||
| 2521 | 948: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2522 | 949: {region: 0x9f, script: 0x5b, flags: 0x0}, | ||
| 2523 | 950: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2524 | 951: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2525 | 952: {region: 0x88, script: 0x34, flags: 0x0}, | ||
| 2526 | 953: {region: 0x76, script: 0x5b, flags: 0x0}, | ||
| 2527 | 954: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2528 | 955: {region: 0xe9, script: 0x4e, flags: 0x0}, | ||
| 2529 | 956: {region: 0x9d, script: 0x5, flags: 0x0}, | ||
| 2530 | 957: {region: 0x1, script: 0x5b, flags: 0x0}, | ||
| 2531 | 958: {region: 0x24, script: 0x5, flags: 0x0}, | ||
| 2532 | 959: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2533 | 960: {region: 0x41, script: 0x5b, flags: 0x0}, | ||
| 2534 | 961: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2535 | 962: {region: 0x7b, script: 0x5b, flags: 0x0}, | ||
| 2536 | 963: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2537 | 964: {region: 0xe5, script: 0x5b, flags: 0x0}, | ||
| 2538 | 965: {region: 0x8a, script: 0x5b, flags: 0x0}, | ||
| 2539 | 966: {region: 0x6a, script: 0x5b, flags: 0x0}, | ||
| 2540 | 967: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2541 | 968: {region: 0x9a, script: 0x22, flags: 0x0}, | ||
| 2542 | 969: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2543 | 970: {region: 0x103, script: 0x5b, flags: 0x0}, | ||
| 2544 | 971: {region: 0x96, script: 0x5b, flags: 0x0}, | ||
| 2545 | 972: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2546 | 973: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2547 | 974: {region: 0x9f, script: 0x5b, flags: 0x0}, | ||
| 2548 | 975: {region: 0x166, script: 0x5, flags: 0x0}, | ||
| 2549 | 976: {region: 0x9a, script: 0x5b, flags: 0x0}, | ||
| 2550 | 977: {region: 0x31, script: 0x2, flags: 0x1}, | ||
| 2551 | 978: {region: 0xdc, script: 0x22, flags: 0x0}, | ||
| 2552 | 979: {region: 0x35, script: 0xe, flags: 0x0}, | ||
| 2553 | 980: {region: 0x4e, script: 0x5b, flags: 0x0}, | ||
| 2554 | 981: {region: 0x73, script: 0x5b, flags: 0x0}, | ||
| 2555 | 982: {region: 0x4e, script: 0x5b, flags: 0x0}, | ||
| 2556 | 983: {region: 0x9d, script: 0x5, flags: 0x0}, | ||
| 2557 | 984: {region: 0x10d, script: 0x5b, flags: 0x0}, | ||
| 2558 | 985: {region: 0x3a, script: 0x5b, flags: 0x0}, | ||
| 2559 | 986: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2560 | 987: {region: 0xd2, script: 0x5b, flags: 0x0}, | ||
| 2561 | 988: {region: 0x105, script: 0x5b, flags: 0x0}, | ||
| 2562 | 989: {region: 0x96, script: 0x5b, flags: 0x0}, | ||
| 2563 | 990: {region: 0x130, script: 0x5b, flags: 0x0}, | ||
| 2564 | 991: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2565 | 992: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2566 | 993: {region: 0x74, script: 0x5b, flags: 0x0}, | ||
| 2567 | 994: {region: 0x107, script: 0x20, flags: 0x0}, | ||
| 2568 | 995: {region: 0x131, script: 0x20, flags: 0x0}, | ||
| 2569 | 996: {region: 0x10a, script: 0x5b, flags: 0x0}, | ||
| 2570 | 997: {region: 0x108, script: 0x5b, flags: 0x0}, | ||
| 2571 | 998: {region: 0x130, script: 0x5b, flags: 0x0}, | ||
| 2572 | 999: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2573 | 1000: {region: 0xa3, script: 0x4c, flags: 0x0}, | ||
| 2574 | 1001: {region: 0x9a, script: 0x22, flags: 0x0}, | ||
| 2575 | 1002: {region: 0x81, script: 0x5b, flags: 0x0}, | ||
| 2576 | 1003: {region: 0x107, script: 0x20, flags: 0x0}, | ||
| 2577 | 1004: {region: 0xa5, script: 0x5b, flags: 0x0}, | ||
| 2578 | 1005: {region: 0x96, script: 0x5b, flags: 0x0}, | ||
| 2579 | 1006: {region: 0x9a, script: 0x5b, flags: 0x0}, | ||
| 2580 | 1007: {region: 0x115, script: 0x5b, flags: 0x0}, | ||
| 2581 | 1008: {region: 0x9a, script: 0xcf, flags: 0x0}, | ||
| 2582 | 1009: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2583 | 1010: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2584 | 1011: {region: 0x130, script: 0x5b, flags: 0x0}, | ||
| 2585 | 1012: {region: 0x9f, script: 0x5b, flags: 0x0}, | ||
| 2586 | 1013: {region: 0x9a, script: 0x22, flags: 0x0}, | ||
| 2587 | 1014: {region: 0x166, script: 0x5, flags: 0x0}, | ||
| 2588 | 1015: {region: 0x9f, script: 0x5b, flags: 0x0}, | ||
| 2589 | 1016: {region: 0x7c, script: 0x5b, flags: 0x0}, | ||
| 2590 | 1017: {region: 0x49, script: 0x5b, flags: 0x0}, | ||
| 2591 | 1018: {region: 0x33, script: 0x4, flags: 0x1}, | ||
| 2592 | 1019: {region: 0x9f, script: 0x5b, flags: 0x0}, | ||
| 2593 | 1020: {region: 0x9d, script: 0x5, flags: 0x0}, | ||
| 2594 | 1021: {region: 0xdb, script: 0x5b, flags: 0x0}, | ||
| 2595 | 1022: {region: 0x4f, script: 0x5b, flags: 0x0}, | ||
| 2596 | 1023: {region: 0xd2, script: 0x5b, flags: 0x0}, | ||
| 2597 | 1024: {region: 0xd0, script: 0x5b, flags: 0x0}, | ||
| 2598 | 1025: {region: 0xc4, script: 0x5b, flags: 0x0}, | ||
| 2599 | 1026: {region: 0x4c, script: 0x5b, flags: 0x0}, | ||
| 2600 | 1027: {region: 0x97, script: 0x80, flags: 0x0}, | ||
| 2601 | 1028: {region: 0xb7, script: 0x5b, flags: 0x0}, | ||
| 2602 | 1029: {region: 0x166, script: 0x2c, flags: 0x0}, | ||
| 2603 | 1030: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2604 | 1032: {region: 0xbb, script: 0xeb, flags: 0x0}, | ||
| 2605 | 1033: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2606 | 1034: {region: 0xc5, script: 0x76, flags: 0x0}, | ||
| 2607 | 1035: {region: 0x166, script: 0x5, flags: 0x0}, | ||
| 2608 | 1036: {region: 0xb4, script: 0xd6, flags: 0x0}, | ||
| 2609 | 1037: {region: 0x70, script: 0x5b, flags: 0x0}, | ||
| 2610 | 1038: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2611 | 1039: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2612 | 1040: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2613 | 1041: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2614 | 1042: {region: 0x112, script: 0x5b, flags: 0x0}, | ||
| 2615 | 1043: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2616 | 1044: {region: 0xe9, script: 0x5, flags: 0x0}, | ||
| 2617 | 1045: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2618 | 1046: {region: 0x110, script: 0x5b, flags: 0x0}, | ||
| 2619 | 1047: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2620 | 1048: {region: 0xea, script: 0x5b, flags: 0x0}, | ||
| 2621 | 1049: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2622 | 1050: {region: 0x96, script: 0x5b, flags: 0x0}, | ||
| 2623 | 1051: {region: 0x143, script: 0x5b, flags: 0x0}, | ||
| 2624 | 1052: {region: 0x10d, script: 0x5b, flags: 0x0}, | ||
| 2625 | 1054: {region: 0x10d, script: 0x5b, flags: 0x0}, | ||
| 2626 | 1055: {region: 0x73, script: 0x5b, flags: 0x0}, | ||
| 2627 | 1056: {region: 0x98, script: 0xcc, flags: 0x0}, | ||
| 2628 | 1057: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2629 | 1058: {region: 0x73, script: 0x5b, flags: 0x0}, | ||
| 2630 | 1059: {region: 0x165, script: 0x5b, flags: 0x0}, | ||
| 2631 | 1060: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2632 | 1061: {region: 0xc4, script: 0x5b, flags: 0x0}, | ||
| 2633 | 1062: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2634 | 1063: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2635 | 1064: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2636 | 1065: {region: 0x116, script: 0x5b, flags: 0x0}, | ||
| 2637 | 1066: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2638 | 1067: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2639 | 1068: {region: 0x124, script: 0xee, flags: 0x0}, | ||
| 2640 | 1069: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2641 | 1070: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2642 | 1071: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2643 | 1072: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2644 | 1073: {region: 0x27, script: 0x5b, flags: 0x0}, | ||
| 2645 | 1074: {region: 0x37, script: 0x5, flags: 0x1}, | ||
| 2646 | 1075: {region: 0x9a, script: 0xd9, flags: 0x0}, | ||
| 2647 | 1076: {region: 0x117, script: 0x5b, flags: 0x0}, | ||
| 2648 | 1077: {region: 0x115, script: 0x5b, flags: 0x0}, | ||
| 2649 | 1078: {region: 0x9a, script: 0x22, flags: 0x0}, | ||
| 2650 | 1079: {region: 0x162, script: 0x5b, flags: 0x0}, | ||
| 2651 | 1080: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2652 | 1081: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2653 | 1082: {region: 0x6e, script: 0x5b, flags: 0x0}, | ||
| 2654 | 1083: {region: 0x162, script: 0x5b, flags: 0x0}, | ||
| 2655 | 1084: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2656 | 1085: {region: 0x61, script: 0x5b, flags: 0x0}, | ||
| 2657 | 1086: {region: 0x96, script: 0x5b, flags: 0x0}, | ||
| 2658 | 1087: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2659 | 1088: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2660 | 1089: {region: 0x130, script: 0x5b, flags: 0x0}, | ||
| 2661 | 1090: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2662 | 1091: {region: 0x85, script: 0x5b, flags: 0x0}, | ||
| 2663 | 1092: {region: 0x10d, script: 0x5b, flags: 0x0}, | ||
| 2664 | 1093: {region: 0x130, script: 0x5b, flags: 0x0}, | ||
| 2665 | 1094: {region: 0x160, script: 0x5, flags: 0x0}, | ||
| 2666 | 1095: {region: 0x4b, script: 0x5b, flags: 0x0}, | ||
| 2667 | 1096: {region: 0x61, script: 0x5b, flags: 0x0}, | ||
| 2668 | 1097: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2669 | 1098: {region: 0x9a, script: 0x22, flags: 0x0}, | ||
| 2670 | 1099: {region: 0x96, script: 0x5b, flags: 0x0}, | ||
| 2671 | 1100: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2672 | 1101: {region: 0x35, script: 0xe, flags: 0x0}, | ||
| 2673 | 1102: {region: 0x9c, script: 0xde, flags: 0x0}, | ||
| 2674 | 1103: {region: 0xea, script: 0x5b, flags: 0x0}, | ||
| 2675 | 1104: {region: 0x9a, script: 0xe6, flags: 0x0}, | ||
| 2676 | 1105: {region: 0xdc, script: 0x22, flags: 0x0}, | ||
| 2677 | 1106: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2678 | 1107: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2679 | 1108: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2680 | 1109: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2681 | 1110: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2682 | 1111: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2683 | 1112: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2684 | 1113: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2685 | 1114: {region: 0xe8, script: 0x5b, flags: 0x0}, | ||
| 2686 | 1115: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2687 | 1116: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2688 | 1117: {region: 0x9a, script: 0x53, flags: 0x0}, | ||
| 2689 | 1118: {region: 0x53, script: 0xe4, flags: 0x0}, | ||
| 2690 | 1119: {region: 0xdc, script: 0x22, flags: 0x0}, | ||
| 2691 | 1120: {region: 0xdc, script: 0x22, flags: 0x0}, | ||
| 2692 | 1121: {region: 0x9a, script: 0xe9, flags: 0x0}, | ||
| 2693 | 1122: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2694 | 1123: {region: 0x113, script: 0x5b, flags: 0x0}, | ||
| 2695 | 1124: {region: 0x132, script: 0x5b, flags: 0x0}, | ||
| 2696 | 1125: {region: 0x127, script: 0x5b, flags: 0x0}, | ||
| 2697 | 1126: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2698 | 1127: {region: 0x3c, script: 0x3, flags: 0x1}, | ||
| 2699 | 1128: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2700 | 1129: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2701 | 1130: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2702 | 1131: {region: 0x124, script: 0xee, flags: 0x0}, | ||
| 2703 | 1132: {region: 0xdc, script: 0x22, flags: 0x0}, | ||
| 2704 | 1133: {region: 0xdc, script: 0x22, flags: 0x0}, | ||
| 2705 | 1134: {region: 0xdc, script: 0x22, flags: 0x0}, | ||
| 2706 | 1135: {region: 0x70, script: 0x2c, flags: 0x0}, | ||
| 2707 | 1136: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2708 | 1137: {region: 0x6e, script: 0x2c, flags: 0x0}, | ||
| 2709 | 1138: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2710 | 1139: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2711 | 1140: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2712 | 1141: {region: 0xd7, script: 0x5b, flags: 0x0}, | ||
| 2713 | 1142: {region: 0x128, script: 0x5b, flags: 0x0}, | ||
| 2714 | 1143: {region: 0x126, script: 0x5b, flags: 0x0}, | ||
| 2715 | 1144: {region: 0x32, script: 0x5b, flags: 0x0}, | ||
| 2716 | 1145: {region: 0xdc, script: 0x22, flags: 0x0}, | ||
| 2717 | 1146: {region: 0xe8, script: 0x5b, flags: 0x0}, | ||
| 2718 | 1147: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2719 | 1148: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2720 | 1149: {region: 0x32, script: 0x5b, flags: 0x0}, | ||
| 2721 | 1150: {region: 0xd5, script: 0x5b, flags: 0x0}, | ||
| 2722 | 1151: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2723 | 1152: {region: 0x162, script: 0x5b, flags: 0x0}, | ||
| 2724 | 1153: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2725 | 1154: {region: 0x12a, script: 0x5b, flags: 0x0}, | ||
| 2726 | 1155: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2727 | 1156: {region: 0xcf, script: 0x5b, flags: 0x0}, | ||
| 2728 | 1157: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2729 | 1158: {region: 0xe7, script: 0x5b, flags: 0x0}, | ||
| 2730 | 1159: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2731 | 1160: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2732 | 1161: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2733 | 1162: {region: 0x12c, script: 0x5b, flags: 0x0}, | ||
| 2734 | 1163: {region: 0x12c, script: 0x5b, flags: 0x0}, | ||
| 2735 | 1164: {region: 0x12f, script: 0x5b, flags: 0x0}, | ||
| 2736 | 1165: {region: 0x166, script: 0x5, flags: 0x0}, | ||
| 2737 | 1166: {region: 0x162, script: 0x5b, flags: 0x0}, | ||
| 2738 | 1167: {region: 0x88, script: 0x34, flags: 0x0}, | ||
| 2739 | 1168: {region: 0xdc, script: 0x22, flags: 0x0}, | ||
| 2740 | 1169: {region: 0xe8, script: 0x5b, flags: 0x0}, | ||
| 2741 | 1170: {region: 0x43, script: 0xef, flags: 0x0}, | ||
| 2742 | 1171: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2743 | 1172: {region: 0x107, script: 0x20, flags: 0x0}, | ||
| 2744 | 1173: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2745 | 1174: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2746 | 1175: {region: 0x132, script: 0x5b, flags: 0x0}, | ||
| 2747 | 1176: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2748 | 1177: {region: 0x124, script: 0xee, flags: 0x0}, | ||
| 2749 | 1178: {region: 0x32, script: 0x5b, flags: 0x0}, | ||
| 2750 | 1179: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2751 | 1180: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2752 | 1181: {region: 0xcf, script: 0x5b, flags: 0x0}, | ||
| 2753 | 1182: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2754 | 1183: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2755 | 1184: {region: 0x12e, script: 0x5b, flags: 0x0}, | ||
| 2756 | 1185: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2757 | 1187: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2758 | 1188: {region: 0xd5, script: 0x5b, flags: 0x0}, | ||
| 2759 | 1189: {region: 0x53, script: 0xe7, flags: 0x0}, | ||
| 2760 | 1190: {region: 0xe6, script: 0x5b, flags: 0x0}, | ||
| 2761 | 1191: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2762 | 1192: {region: 0x107, script: 0x20, flags: 0x0}, | ||
| 2763 | 1193: {region: 0xbb, script: 0x5b, flags: 0x0}, | ||
| 2764 | 1194: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2765 | 1195: {region: 0x107, script: 0x20, flags: 0x0}, | ||
| 2766 | 1196: {region: 0x3f, script: 0x4, flags: 0x1}, | ||
| 2767 | 1197: {region: 0x11d, script: 0xf3, flags: 0x0}, | ||
| 2768 | 1198: {region: 0x131, script: 0x20, flags: 0x0}, | ||
| 2769 | 1199: {region: 0x76, script: 0x5b, flags: 0x0}, | ||
| 2770 | 1200: {region: 0x2a, script: 0x5b, flags: 0x0}, | ||
| 2771 | 1202: {region: 0x43, script: 0x3, flags: 0x1}, | ||
| 2772 | 1203: {region: 0x9a, script: 0xe, flags: 0x0}, | ||
| 2773 | 1204: {region: 0xe9, script: 0x5, flags: 0x0}, | ||
| 2774 | 1205: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2775 | 1206: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2776 | 1207: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2777 | 1208: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2778 | 1209: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2779 | 1210: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2780 | 1211: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2781 | 1212: {region: 0x46, script: 0x4, flags: 0x1}, | ||
| 2782 | 1213: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2783 | 1214: {region: 0xb5, script: 0xf4, flags: 0x0}, | ||
| 2784 | 1215: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2785 | 1216: {region: 0x162, script: 0x5b, flags: 0x0}, | ||
| 2786 | 1217: {region: 0x9f, script: 0x5b, flags: 0x0}, | ||
| 2787 | 1218: {region: 0x107, script: 0x5b, flags: 0x0}, | ||
| 2788 | 1219: {region: 0x13f, script: 0x5b, flags: 0x0}, | ||
| 2789 | 1220: {region: 0x11c, script: 0x5b, flags: 0x0}, | ||
| 2790 | 1221: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2791 | 1222: {region: 0x36, script: 0x5b, flags: 0x0}, | ||
| 2792 | 1223: {region: 0x61, script: 0x5b, flags: 0x0}, | ||
| 2793 | 1224: {region: 0xd2, script: 0x5b, flags: 0x0}, | ||
| 2794 | 1225: {region: 0x1, script: 0x5b, flags: 0x0}, | ||
| 2795 | 1226: {region: 0x107, script: 0x5b, flags: 0x0}, | ||
| 2796 | 1227: {region: 0x6b, script: 0x5b, flags: 0x0}, | ||
| 2797 | 1228: {region: 0x130, script: 0x5b, flags: 0x0}, | ||
| 2798 | 1229: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2799 | 1230: {region: 0x36, script: 0x5b, flags: 0x0}, | ||
| 2800 | 1231: {region: 0x4e, script: 0x5b, flags: 0x0}, | ||
| 2801 | 1232: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2802 | 1233: {region: 0x70, script: 0x2c, flags: 0x0}, | ||
| 2803 | 1234: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2804 | 1235: {region: 0xe8, script: 0x5b, flags: 0x0}, | ||
| 2805 | 1236: {region: 0x2f, script: 0x5b, flags: 0x0}, | ||
| 2806 | 1237: {region: 0x9a, script: 0xe9, flags: 0x0}, | ||
| 2807 | 1238: {region: 0x9a, script: 0x22, flags: 0x0}, | ||
| 2808 | 1239: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2809 | 1240: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2810 | 1241: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2811 | 1242: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2812 | 1243: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2813 | 1244: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2814 | 1245: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2815 | 1246: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2816 | 1247: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2817 | 1248: {region: 0x141, script: 0x5b, flags: 0x0}, | ||
| 2818 | 1249: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2819 | 1250: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2820 | 1251: {region: 0xa9, script: 0x5, flags: 0x0}, | ||
| 2821 | 1252: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2822 | 1253: {region: 0x115, script: 0x5b, flags: 0x0}, | ||
| 2823 | 1254: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2824 | 1255: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2825 | 1256: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2826 | 1257: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2827 | 1258: {region: 0x9a, script: 0x22, flags: 0x0}, | ||
| 2828 | 1259: {region: 0x53, script: 0x3b, flags: 0x0}, | ||
| 2829 | 1260: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2830 | 1261: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2831 | 1262: {region: 0x41, script: 0x5b, flags: 0x0}, | ||
| 2832 | 1263: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2833 | 1264: {region: 0x12c, script: 0x18, flags: 0x0}, | ||
| 2834 | 1265: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2835 | 1266: {region: 0x162, script: 0x5b, flags: 0x0}, | ||
| 2836 | 1267: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2837 | 1268: {region: 0x12c, script: 0x63, flags: 0x0}, | ||
| 2838 | 1269: {region: 0x12c, script: 0x64, flags: 0x0}, | ||
| 2839 | 1270: {region: 0x7e, script: 0x2e, flags: 0x0}, | ||
| 2840 | 1271: {region: 0x53, script: 0x68, flags: 0x0}, | ||
| 2841 | 1272: {region: 0x10c, script: 0x6d, flags: 0x0}, | ||
| 2842 | 1273: {region: 0x109, script: 0x79, flags: 0x0}, | ||
| 2843 | 1274: {region: 0x9a, script: 0x22, flags: 0x0}, | ||
| 2844 | 1275: {region: 0x132, script: 0x5b, flags: 0x0}, | ||
| 2845 | 1276: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2846 | 1277: {region: 0x9d, script: 0x93, flags: 0x0}, | ||
| 2847 | 1278: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2848 | 1279: {region: 0x15f, script: 0xce, flags: 0x0}, | ||
| 2849 | 1280: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2850 | 1281: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2851 | 1282: {region: 0xdc, script: 0x22, flags: 0x0}, | ||
| 2852 | 1283: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2853 | 1284: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2854 | 1285: {region: 0xd2, script: 0x5b, flags: 0x0}, | ||
| 2855 | 1286: {region: 0x76, script: 0x5b, flags: 0x0}, | ||
| 2856 | 1287: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2857 | 1288: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2858 | 1289: {region: 0x52, script: 0x5b, flags: 0x0}, | ||
| 2859 | 1290: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2860 | 1291: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2861 | 1292: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2862 | 1293: {region: 0x52, script: 0x5b, flags: 0x0}, | ||
| 2863 | 1294: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2864 | 1295: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2865 | 1296: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2866 | 1297: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2867 | 1298: {region: 0x1, script: 0x3e, flags: 0x0}, | ||
| 2868 | 1299: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2869 | 1300: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2870 | 1301: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2871 | 1302: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2872 | 1303: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2873 | 1304: {region: 0xd7, script: 0x5b, flags: 0x0}, | ||
| 2874 | 1305: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2875 | 1306: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2876 | 1307: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2877 | 1308: {region: 0x41, script: 0x5b, flags: 0x0}, | ||
| 2878 | 1309: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2879 | 1310: {region: 0xd0, script: 0x5b, flags: 0x0}, | ||
| 2880 | 1311: {region: 0x4a, script: 0x3, flags: 0x1}, | ||
| 2881 | 1312: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2882 | 1313: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2883 | 1314: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2884 | 1315: {region: 0x53, script: 0x5b, flags: 0x0}, | ||
| 2885 | 1316: {region: 0x10c, script: 0x5b, flags: 0x0}, | ||
| 2886 | 1318: {region: 0xa9, script: 0x5, flags: 0x0}, | ||
| 2887 | 1319: {region: 0xda, script: 0x5b, flags: 0x0}, | ||
| 2888 | 1320: {region: 0xbb, script: 0xeb, flags: 0x0}, | ||
| 2889 | 1321: {region: 0x4d, script: 0x14, flags: 0x1}, | ||
| 2890 | 1322: {region: 0x53, script: 0x7f, flags: 0x0}, | ||
| 2891 | 1323: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2892 | 1324: {region: 0x123, script: 0x5b, flags: 0x0}, | ||
| 2893 | 1325: {region: 0xd1, script: 0x5b, flags: 0x0}, | ||
| 2894 | 1326: {region: 0x166, script: 0x5b, flags: 0x0}, | ||
| 2895 | 1327: {region: 0x162, script: 0x5b, flags: 0x0}, | ||
| 2896 | 1329: {region: 0x12c, script: 0x5b, flags: 0x0}, | ||
| 2897 | } | ||
| 2898 | |||
| 2899 | // likelyLangList holds lists info associated with likelyLang. | ||
| 2900 | // Size: 582 bytes, 97 elements | ||
| 2901 | var likelyLangList = [97]likelyScriptRegion{ | ||
| 2902 | 0: {region: 0x9d, script: 0x7, flags: 0x0}, | ||
| 2903 | 1: {region: 0xa2, script: 0x7a, flags: 0x2}, | ||
| 2904 | 2: {region: 0x11d, script: 0x87, flags: 0x2}, | ||
| 2905 | 3: {region: 0x32, script: 0x5b, flags: 0x0}, | ||
| 2906 | 4: {region: 0x9c, script: 0x5, flags: 0x4}, | ||
| 2907 | 5: {region: 0x9d, script: 0x5, flags: 0x4}, | ||
| 2908 | 6: {region: 0x107, script: 0x20, flags: 0x4}, | ||
| 2909 | 7: {region: 0x9d, script: 0x5, flags: 0x2}, | ||
| 2910 | 8: {region: 0x107, script: 0x20, flags: 0x0}, | ||
| 2911 | 9: {region: 0x38, script: 0x2f, flags: 0x2}, | ||
| 2912 | 10: {region: 0x136, script: 0x5b, flags: 0x0}, | ||
| 2913 | 11: {region: 0x7c, script: 0xd1, flags: 0x2}, | ||
| 2914 | 12: {region: 0x115, script: 0x5b, flags: 0x0}, | ||
| 2915 | 13: {region: 0x85, script: 0x1, flags: 0x2}, | ||
| 2916 | 14: {region: 0x5e, script: 0x1f, flags: 0x0}, | ||
| 2917 | 15: {region: 0x88, script: 0x60, flags: 0x2}, | ||
| 2918 | 16: {region: 0xd7, script: 0x5b, flags: 0x0}, | ||
| 2919 | 17: {region: 0x52, script: 0x5, flags: 0x4}, | ||
| 2920 | 18: {region: 0x10c, script: 0x5, flags: 0x4}, | ||
| 2921 | 19: {region: 0xaf, script: 0x20, flags: 0x0}, | ||
| 2922 | 20: {region: 0x24, script: 0x5, flags: 0x4}, | ||
| 2923 | 21: {region: 0x53, script: 0x5, flags: 0x4}, | ||
| 2924 | 22: {region: 0x9d, script: 0x5, flags: 0x4}, | ||
| 2925 | 23: {region: 0xc6, script: 0x5, flags: 0x4}, | ||
| 2926 | 24: {region: 0x53, script: 0x5, flags: 0x2}, | ||
| 2927 | 25: {region: 0x12c, script: 0x5b, flags: 0x0}, | ||
| 2928 | 26: {region: 0xb1, script: 0x5, flags: 0x4}, | ||
| 2929 | 27: {region: 0x9c, script: 0x5, flags: 0x2}, | ||
| 2930 | 28: {region: 0xa6, script: 0x20, flags: 0x0}, | ||
| 2931 | 29: {region: 0x53, script: 0x5, flags: 0x4}, | ||
| 2932 | 30: {region: 0x12c, script: 0x5b, flags: 0x4}, | ||
| 2933 | 31: {region: 0x53, script: 0x5, flags: 0x2}, | ||
| 2934 | 32: {region: 0x12c, script: 0x5b, flags: 0x2}, | ||
| 2935 | 33: {region: 0xdc, script: 0x22, flags: 0x0}, | ||
| 2936 | 34: {region: 0x9a, script: 0x5e, flags: 0x2}, | ||
| 2937 | 35: {region: 0x84, script: 0x5b, flags: 0x0}, | ||
| 2938 | 36: {region: 0x85, script: 0x7e, flags: 0x4}, | ||
| 2939 | 37: {region: 0x85, script: 0x7e, flags: 0x2}, | ||
| 2940 | 38: {region: 0xc6, script: 0x20, flags: 0x0}, | ||
| 2941 | 39: {region: 0x53, script: 0x71, flags: 0x4}, | ||
| 2942 | 40: {region: 0x53, script: 0x71, flags: 0x2}, | ||
| 2943 | 41: {region: 0xd1, script: 0x5b, flags: 0x0}, | ||
| 2944 | 42: {region: 0x4a, script: 0x5, flags: 0x4}, | ||
| 2945 | 43: {region: 0x96, script: 0x5, flags: 0x4}, | ||
| 2946 | 44: {region: 0x9a, script: 0x36, flags: 0x0}, | ||
| 2947 | 45: {region: 0xe9, script: 0x5, flags: 0x4}, | ||
| 2948 | 46: {region: 0xe9, script: 0x5, flags: 0x2}, | ||
| 2949 | 47: {region: 0x9d, script: 0x8d, flags: 0x0}, | ||
| 2950 | 48: {region: 0x53, script: 0x8e, flags: 0x2}, | ||
| 2951 | 49: {region: 0xbb, script: 0xeb, flags: 0x0}, | ||
| 2952 | 50: {region: 0xda, script: 0x5b, flags: 0x4}, | ||
| 2953 | 51: {region: 0xe9, script: 0x5, flags: 0x0}, | ||
| 2954 | 52: {region: 0x9a, script: 0x22, flags: 0x2}, | ||
| 2955 | 53: {region: 0x9a, script: 0x50, flags: 0x2}, | ||
| 2956 | 54: {region: 0x9a, script: 0xd5, flags: 0x2}, | ||
| 2957 | 55: {region: 0x106, script: 0x20, flags: 0x0}, | ||
| 2958 | 56: {region: 0xbe, script: 0x5b, flags: 0x4}, | ||
| 2959 | 57: {region: 0x105, script: 0x5b, flags: 0x4}, | ||
| 2960 | 58: {region: 0x107, script: 0x5b, flags: 0x4}, | ||
| 2961 | 59: {region: 0x12c, script: 0x5b, flags: 0x4}, | ||
| 2962 | 60: {region: 0x125, script: 0x20, flags: 0x0}, | ||
| 2963 | 61: {region: 0xe9, script: 0x5, flags: 0x4}, | ||
| 2964 | 62: {region: 0xe9, script: 0x5, flags: 0x2}, | ||
| 2965 | 63: {region: 0x53, script: 0x5, flags: 0x0}, | ||
| 2966 | 64: {region: 0xaf, script: 0x20, flags: 0x4}, | ||
| 2967 | 65: {region: 0xc6, script: 0x20, flags: 0x4}, | ||
| 2968 | 66: {region: 0xaf, script: 0x20, flags: 0x2}, | ||
| 2969 | 67: {region: 0x9a, script: 0xe, flags: 0x0}, | ||
| 2970 | 68: {region: 0xdc, script: 0x22, flags: 0x4}, | ||
| 2971 | 69: {region: 0xdc, script: 0x22, flags: 0x2}, | ||
| 2972 | 70: {region: 0x138, script: 0x5b, flags: 0x0}, | ||
| 2973 | 71: {region: 0x24, script: 0x5, flags: 0x4}, | ||
| 2974 | 72: {region: 0x53, script: 0x20, flags: 0x4}, | ||
| 2975 | 73: {region: 0x24, script: 0x5, flags: 0x2}, | ||
| 2976 | 74: {region: 0x8e, script: 0x3c, flags: 0x0}, | ||
| 2977 | 75: {region: 0x53, script: 0x3b, flags: 0x4}, | ||
| 2978 | 76: {region: 0x53, script: 0x3b, flags: 0x2}, | ||
| 2979 | 77: {region: 0x53, script: 0x3b, flags: 0x0}, | ||
| 2980 | 78: {region: 0x2f, script: 0x3c, flags: 0x4}, | ||
| 2981 | 79: {region: 0x3e, script: 0x3c, flags: 0x4}, | ||
| 2982 | 80: {region: 0x7c, script: 0x3c, flags: 0x4}, | ||
| 2983 | 81: {region: 0x7f, script: 0x3c, flags: 0x4}, | ||
| 2984 | 82: {region: 0x8e, script: 0x3c, flags: 0x4}, | ||
| 2985 | 83: {region: 0x96, script: 0x3c, flags: 0x4}, | ||
| 2986 | 84: {region: 0xc7, script: 0x3c, flags: 0x4}, | ||
| 2987 | 85: {region: 0xd1, script: 0x3c, flags: 0x4}, | ||
| 2988 | 86: {region: 0xe3, script: 0x3c, flags: 0x4}, | ||
| 2989 | 87: {region: 0xe6, script: 0x3c, flags: 0x4}, | ||
| 2990 | 88: {region: 0xe8, script: 0x3c, flags: 0x4}, | ||
| 2991 | 89: {region: 0x117, script: 0x3c, flags: 0x4}, | ||
| 2992 | 90: {region: 0x124, script: 0x3c, flags: 0x4}, | ||
| 2993 | 91: {region: 0x12f, script: 0x3c, flags: 0x4}, | ||
| 2994 | 92: {region: 0x136, script: 0x3c, flags: 0x4}, | ||
| 2995 | 93: {region: 0x13f, script: 0x3c, flags: 0x4}, | ||
| 2996 | 94: {region: 0x12f, script: 0x11, flags: 0x2}, | ||
| 2997 | 95: {region: 0x12f, script: 0x37, flags: 0x2}, | ||
| 2998 | 96: {region: 0x12f, script: 0x3c, flags: 0x2}, | ||
| 2999 | } | ||
| 3000 | |||
| 3001 | type likelyLangScript struct { | ||
| 3002 | lang uint16 | ||
| 3003 | script uint16 | ||
| 3004 | flags uint8 | ||
| 3005 | } | ||
| 3006 | |||
| 3007 | // likelyRegion is a lookup table, indexed by regionID, for the most likely | ||
| 3008 | // languages and scripts given incomplete information. If more entries exist | ||
| 3009 | // for a given regionID, lang and script are the index and size respectively | ||
| 3010 | // of the list in likelyRegionList. | ||
| 3011 | // TODO: exclude containers and user-definable regions from the list. | ||
| 3012 | // Size: 2154 bytes, 359 elements | ||
| 3013 | var likelyRegion = [359]likelyLangScript{ | ||
| 3014 | 34: {lang: 0xd7, script: 0x5b, flags: 0x0}, | ||
| 3015 | 35: {lang: 0x3a, script: 0x5, flags: 0x0}, | ||
| 3016 | 36: {lang: 0x0, script: 0x2, flags: 0x1}, | ||
| 3017 | 39: {lang: 0x2, script: 0x2, flags: 0x1}, | ||
| 3018 | 40: {lang: 0x4, script: 0x2, flags: 0x1}, | ||
| 3019 | 42: {lang: 0x3c0, script: 0x5b, flags: 0x0}, | ||
| 3020 | 43: {lang: 0x0, script: 0x5b, flags: 0x0}, | ||
| 3021 | 44: {lang: 0x13e, script: 0x5b, flags: 0x0}, | ||
| 3022 | 45: {lang: 0x41b, script: 0x5b, flags: 0x0}, | ||
| 3023 | 46: {lang: 0x10d, script: 0x5b, flags: 0x0}, | ||
| 3024 | 48: {lang: 0x367, script: 0x5b, flags: 0x0}, | ||
| 3025 | 49: {lang: 0x444, script: 0x5b, flags: 0x0}, | ||
| 3026 | 50: {lang: 0x58, script: 0x5b, flags: 0x0}, | ||
| 3027 | 51: {lang: 0x6, script: 0x2, flags: 0x1}, | ||
| 3028 | 53: {lang: 0xa5, script: 0xe, flags: 0x0}, | ||
| 3029 | 54: {lang: 0x367, script: 0x5b, flags: 0x0}, | ||
| 3030 | 55: {lang: 0x15e, script: 0x5b, flags: 0x0}, | ||
| 3031 | 56: {lang: 0x7e, script: 0x20, flags: 0x0}, | ||
| 3032 | 57: {lang: 0x3a, script: 0x5, flags: 0x0}, | ||
| 3033 | 58: {lang: 0x3d9, script: 0x5b, flags: 0x0}, | ||
| 3034 | 59: {lang: 0x15e, script: 0x5b, flags: 0x0}, | ||
| 3035 | 60: {lang: 0x15e, script: 0x5b, flags: 0x0}, | ||
| 3036 | 62: {lang: 0x31f, script: 0x5b, flags: 0x0}, | ||
| 3037 | 63: {lang: 0x13e, script: 0x5b, flags: 0x0}, | ||
| 3038 | 64: {lang: 0x3a1, script: 0x5b, flags: 0x0}, | ||
| 3039 | 65: {lang: 0x3c0, script: 0x5b, flags: 0x0}, | ||
| 3040 | 67: {lang: 0x8, script: 0x2, flags: 0x1}, | ||
| 3041 | 69: {lang: 0x0, script: 0x5b, flags: 0x0}, | ||
| 3042 | 71: {lang: 0x71, script: 0x20, flags: 0x0}, | ||
| 3043 | 73: {lang: 0x512, script: 0x3e, flags: 0x2}, | ||
| 3044 | 74: {lang: 0x31f, script: 0x5, flags: 0x2}, | ||
| 3045 | 75: {lang: 0x445, script: 0x5b, flags: 0x0}, | ||
| 3046 | 76: {lang: 0x15e, script: 0x5b, flags: 0x0}, | ||
| 3047 | 77: {lang: 0x15e, script: 0x5b, flags: 0x0}, | ||
| 3048 | 78: {lang: 0x10d, script: 0x5b, flags: 0x0}, | ||
| 3049 | 79: {lang: 0x15e, script: 0x5b, flags: 0x0}, | ||
| 3050 | 81: {lang: 0x13e, script: 0x5b, flags: 0x0}, | ||
| 3051 | 82: {lang: 0x15e, script: 0x5b, flags: 0x0}, | ||
| 3052 | 83: {lang: 0xa, script: 0x4, flags: 0x1}, | ||
| 3053 | 84: {lang: 0x13e, script: 0x5b, flags: 0x0}, | ||
| 3054 | 85: {lang: 0x0, script: 0x5b, flags: 0x0}, | ||
| 3055 | 87: {lang: 0x13e, script: 0x5b, flags: 0x0}, | ||
| 3056 | 90: {lang: 0x13e, script: 0x5b, flags: 0x0}, | ||
| 3057 | 91: {lang: 0x3c0, script: 0x5b, flags: 0x0}, | ||
| 3058 | 92: {lang: 0x3a1, script: 0x5b, flags: 0x0}, | ||
| 3059 | 94: {lang: 0xe, script: 0x2, flags: 0x1}, | ||
| 3060 | 95: {lang: 0xfa, script: 0x5b, flags: 0x0}, | ||
| 3061 | 97: {lang: 0x10d, script: 0x5b, flags: 0x0}, | ||
| 3062 | 99: {lang: 0x1, script: 0x5b, flags: 0x0}, | ||
| 3063 | 100: {lang: 0x101, script: 0x5b, flags: 0x0}, | ||
| 3064 | 102: {lang: 0x13e, script: 0x5b, flags: 0x0}, | ||
| 3065 | 104: {lang: 0x10, script: 0x2, flags: 0x1}, | ||
| 3066 | 105: {lang: 0x13e, script: 0x5b, flags: 0x0}, | ||
| 3067 | 106: {lang: 0x13e, script: 0x5b, flags: 0x0}, | ||
| 3068 | 107: {lang: 0x140, script: 0x5b, flags: 0x0}, | ||
| 3069 | 108: {lang: 0x3a, script: 0x5, flags: 0x0}, | ||
| 3070 | 109: {lang: 0x3a, script: 0x5, flags: 0x0}, | ||
| 3071 | 110: {lang: 0x46f, script: 0x2c, flags: 0x0}, | ||
| 3072 | 111: {lang: 0x13e, script: 0x5b, flags: 0x0}, | ||
| 3073 | 112: {lang: 0x12, script: 0x2, flags: 0x1}, | ||
| 3074 | 114: {lang: 0x10d, script: 0x5b, flags: 0x0}, | ||
| 3075 | 115: {lang: 0x151, script: 0x5b, flags: 0x0}, | ||
| 3076 | 116: {lang: 0x1c0, script: 0x22, flags: 0x2}, | ||
| 3077 | 119: {lang: 0x158, script: 0x5b, flags: 0x0}, | ||
| 3078 | 121: {lang: 0x15e, script: 0x5b, flags: 0x0}, | ||
| 3079 | 123: {lang: 0x15e, script: 0x5b, flags: 0x0}, | ||
| 3080 | 124: {lang: 0x14, script: 0x2, flags: 0x1}, | ||
| 3081 | 126: {lang: 0x16, script: 0x3, flags: 0x1}, | ||
| 3082 | 127: {lang: 0x15e, script: 0x5b, flags: 0x0}, | ||
| 3083 | 129: {lang: 0x21, script: 0x5b, flags: 0x0}, | ||
| 3084 | 131: {lang: 0x245, script: 0x5b, flags: 0x0}, | ||
| 3085 | 133: {lang: 0x15e, script: 0x5b, flags: 0x0}, | ||
| 3086 | 134: {lang: 0x15e, script: 0x5b, flags: 0x0}, | ||
| 3087 | 135: {lang: 0x13e, script: 0x5b, flags: 0x0}, | ||
| 3088 | 136: {lang: 0x19, script: 0x2, flags: 0x1}, | ||
| 3089 | 137: {lang: 0x0, script: 0x5b, flags: 0x0}, | ||
| 3090 | 138: {lang: 0x13e, script: 0x5b, flags: 0x0}, | ||
| 3091 | 140: {lang: 0x3c0, script: 0x5b, flags: 0x0}, | ||
| 3092 | 142: {lang: 0x529, script: 0x3c, flags: 0x0}, | ||
| 3093 | 143: {lang: 0x0, script: 0x5b, flags: 0x0}, | ||
| 3094 | 144: {lang: 0x13e, script: 0x5b, flags: 0x0}, | ||
| 3095 | 145: {lang: 0x1d1, script: 0x5b, flags: 0x0}, | ||
| 3096 | 146: {lang: 0x1d4, script: 0x5b, flags: 0x0}, | ||
| 3097 | 147: {lang: 0x1d5, script: 0x5b, flags: 0x0}, | ||
| 3098 | 149: {lang: 0x13e, script: 0x5b, flags: 0x0}, | ||
| 3099 | 150: {lang: 0x1b, script: 0x2, flags: 0x1}, | ||
| 3100 | 152: {lang: 0x1bc, script: 0x3e, flags: 0x0}, | ||
| 3101 | 154: {lang: 0x1d, script: 0x3, flags: 0x1}, | ||
| 3102 | 156: {lang: 0x3a, script: 0x5, flags: 0x0}, | ||
| 3103 | 157: {lang: 0x20, script: 0x2, flags: 0x1}, | ||
| 3104 | 158: {lang: 0x1f8, script: 0x5b, flags: 0x0}, | ||
| 3105 | 159: {lang: 0x1f9, script: 0x5b, flags: 0x0}, | ||
| 3106 | 162: {lang: 0x3a, script: 0x5, flags: 0x0}, | ||
| 3107 | 163: {lang: 0x200, script: 0x49, flags: 0x0}, | ||
| 3108 | 165: {lang: 0x445, script: 0x5b, flags: 0x0}, | ||
| 3109 | 166: {lang: 0x28a, script: 0x20, flags: 0x0}, | ||
| 3110 | 167: {lang: 0x22, script: 0x3, flags: 0x1}, | ||
| 3111 | 169: {lang: 0x25, script: 0x2, flags: 0x1}, | ||
| 3112 | 171: {lang: 0x254, script: 0x54, flags: 0x0}, | ||
| 3113 | 172: {lang: 0x254, script: 0x54, flags: 0x0}, | ||
| 3114 | 173: {lang: 0x3a, script: 0x5, flags: 0x0}, | ||
| 3115 | 175: {lang: 0x3e2, script: 0x20, flags: 0x0}, | ||
| 3116 | 176: {lang: 0x27, script: 0x2, flags: 0x1}, | ||
| 3117 | 177: {lang: 0x3a, script: 0x5, flags: 0x0}, | ||
| 3118 | 179: {lang: 0x10d, script: 0x5b, flags: 0x0}, | ||
| 3119 | 180: {lang: 0x40c, script: 0xd6, flags: 0x0}, | ||
| 3120 | 182: {lang: 0x43b, script: 0x5b, flags: 0x0}, | ||
| 3121 | 183: {lang: 0x2c0, script: 0x5b, flags: 0x0}, | ||
| 3122 | 184: {lang: 0x15e, script: 0x5b, flags: 0x0}, | ||
| 3123 | 185: {lang: 0x2c7, script: 0x5b, flags: 0x0}, | ||
| 3124 | 186: {lang: 0x3a, script: 0x5, flags: 0x0}, | ||
| 3125 | 187: {lang: 0x29, script: 0x2, flags: 0x1}, | ||
| 3126 | 188: {lang: 0x15e, script: 0x5b, flags: 0x0}, | ||
| 3127 | 189: {lang: 0x2b, script: 0x2, flags: 0x1}, | ||
| 3128 | 190: {lang: 0x432, script: 0x5b, flags: 0x0}, | ||
| 3129 | 191: {lang: 0x15e, script: 0x5b, flags: 0x0}, | ||
| 3130 | 192: {lang: 0x2f1, script: 0x5b, flags: 0x0}, | ||
| 3131 | 195: {lang: 0x2d, script: 0x2, flags: 0x1}, | ||
| 3132 | 196: {lang: 0xa0, script: 0x5b, flags: 0x0}, | ||
| 3133 | 197: {lang: 0x2f, script: 0x2, flags: 0x1}, | ||
| 3134 | 198: {lang: 0x31, script: 0x2, flags: 0x1}, | ||
| 3135 | 199: {lang: 0x33, script: 0x2, flags: 0x1}, | ||
| 3136 | 201: {lang: 0x15e, script: 0x5b, flags: 0x0}, | ||
| 3137 | 202: {lang: 0x35, script: 0x2, flags: 0x1}, | ||
| 3138 | 204: {lang: 0x320, script: 0x5b, flags: 0x0}, | ||
| 3139 | 205: {lang: 0x37, script: 0x3, flags: 0x1}, | ||
| 3140 | 206: {lang: 0x128, script: 0xed, flags: 0x0}, | ||
| 3141 | 208: {lang: 0x13e, script: 0x5b, flags: 0x0}, | ||
| 3142 | 209: {lang: 0x31f, script: 0x5b, flags: 0x0}, | ||
| 3143 | 210: {lang: 0x3c0, script: 0x5b, flags: 0x0}, | ||
| 3144 | 211: {lang: 0x16, script: 0x5b, flags: 0x0}, | ||
| 3145 | 212: {lang: 0x15e, script: 0x5b, flags: 0x0}, | ||
| 3146 | 213: {lang: 0x1b4, script: 0x5b, flags: 0x0}, | ||
| 3147 | 215: {lang: 0x1b4, script: 0x5, flags: 0x2}, | ||
| 3148 | 217: {lang: 0x13e, script: 0x5b, flags: 0x0}, | ||
| 3149 | 218: {lang: 0x367, script: 0x5b, flags: 0x0}, | ||
| 3150 | 219: {lang: 0x347, script: 0x5b, flags: 0x0}, | ||
| 3151 | 220: {lang: 0x351, script: 0x22, flags: 0x0}, | ||
| 3152 | 226: {lang: 0x3a, script: 0x5, flags: 0x0}, | ||
| 3153 | 227: {lang: 0x13e, script: 0x5b, flags: 0x0}, | ||
| 3154 | 229: {lang: 0x13e, script: 0x5b, flags: 0x0}, | ||
| 3155 | 230: {lang: 0x15e, script: 0x5b, flags: 0x0}, | ||
| 3156 | 231: {lang: 0x486, script: 0x5b, flags: 0x0}, | ||
| 3157 | 232: {lang: 0x153, script: 0x5b, flags: 0x0}, | ||
| 3158 | 233: {lang: 0x3a, script: 0x3, flags: 0x1}, | ||
| 3159 | 234: {lang: 0x3b3, script: 0x5b, flags: 0x0}, | ||
| 3160 | 235: {lang: 0x15e, script: 0x5b, flags: 0x0}, | ||
| 3161 | 237: {lang: 0x13e, script: 0x5b, flags: 0x0}, | ||
| 3162 | 238: {lang: 0x3a, script: 0x5, flags: 0x0}, | ||
| 3163 | 239: {lang: 0x3c0, script: 0x5b, flags: 0x0}, | ||
| 3164 | 241: {lang: 0x3a2, script: 0x5b, flags: 0x0}, | ||
| 3165 | 242: {lang: 0x194, script: 0x5b, flags: 0x0}, | ||
| 3166 | 244: {lang: 0x3a, script: 0x5, flags: 0x0}, | ||
| 3167 | 259: {lang: 0x15e, script: 0x5b, flags: 0x0}, | ||
| 3168 | 261: {lang: 0x3d, script: 0x2, flags: 0x1}, | ||
| 3169 | 262: {lang: 0x432, script: 0x20, flags: 0x0}, | ||
| 3170 | 263: {lang: 0x3f, script: 0x2, flags: 0x1}, | ||
| 3171 | 264: {lang: 0x3e5, script: 0x5b, flags: 0x0}, | ||
| 3172 | 265: {lang: 0x3a, script: 0x5, flags: 0x0}, | ||
| 3173 | 267: {lang: 0x15e, script: 0x5b, flags: 0x0}, | ||
| 3174 | 268: {lang: 0x3a, script: 0x5, flags: 0x0}, | ||
| 3175 | 269: {lang: 0x41, script: 0x2, flags: 0x1}, | ||
| 3176 | 272: {lang: 0x416, script: 0x5b, flags: 0x0}, | ||
| 3177 | 273: {lang: 0x347, script: 0x5b, flags: 0x0}, | ||
| 3178 | 274: {lang: 0x43, script: 0x2, flags: 0x1}, | ||
| 3179 | 276: {lang: 0x1f9, script: 0x5b, flags: 0x0}, | ||
| 3180 | 277: {lang: 0x15e, script: 0x5b, flags: 0x0}, | ||
| 3181 | 278: {lang: 0x429, script: 0x5b, flags: 0x0}, | ||
| 3182 | 279: {lang: 0x367, script: 0x5b, flags: 0x0}, | ||
| 3183 | 281: {lang: 0x3c0, script: 0x5b, flags: 0x0}, | ||
| 3184 | 283: {lang: 0x13e, script: 0x5b, flags: 0x0}, | ||
| 3185 | 285: {lang: 0x45, script: 0x2, flags: 0x1}, | ||
| 3186 | 289: {lang: 0x15e, script: 0x5b, flags: 0x0}, | ||
| 3187 | 290: {lang: 0x15e, script: 0x5b, flags: 0x0}, | ||
| 3188 | 291: {lang: 0x47, script: 0x2, flags: 0x1}, | ||
| 3189 | 292: {lang: 0x49, script: 0x3, flags: 0x1}, | ||
| 3190 | 293: {lang: 0x4c, script: 0x2, flags: 0x1}, | ||
| 3191 | 294: {lang: 0x477, script: 0x5b, flags: 0x0}, | ||
| 3192 | 295: {lang: 0x3c0, script: 0x5b, flags: 0x0}, | ||
| 3193 | 296: {lang: 0x476, script: 0x5b, flags: 0x0}, | ||
| 3194 | 297: {lang: 0x4e, script: 0x2, flags: 0x1}, | ||
| 3195 | 298: {lang: 0x482, script: 0x5b, flags: 0x0}, | ||
| 3196 | 300: {lang: 0x50, script: 0x4, flags: 0x1}, | ||
| 3197 | 302: {lang: 0x4a0, script: 0x5b, flags: 0x0}, | ||
| 3198 | 303: {lang: 0x54, script: 0x2, flags: 0x1}, | ||
| 3199 | 304: {lang: 0x445, script: 0x5b, flags: 0x0}, | ||
| 3200 | 305: {lang: 0x56, script: 0x3, flags: 0x1}, | ||
| 3201 | 306: {lang: 0x445, script: 0x5b, flags: 0x0}, | ||
| 3202 | 310: {lang: 0x512, script: 0x3e, flags: 0x2}, | ||
| 3203 | 311: {lang: 0x13e, script: 0x5b, flags: 0x0}, | ||
| 3204 | 312: {lang: 0x4bc, script: 0x5b, flags: 0x0}, | ||
| 3205 | 313: {lang: 0x1f9, script: 0x5b, flags: 0x0}, | ||
| 3206 | 316: {lang: 0x13e, script: 0x5b, flags: 0x0}, | ||
| 3207 | 319: {lang: 0x4c3, script: 0x5b, flags: 0x0}, | ||
| 3208 | 320: {lang: 0x8a, script: 0x5b, flags: 0x0}, | ||
| 3209 | 321: {lang: 0x15e, script: 0x5b, flags: 0x0}, | ||
| 3210 | 323: {lang: 0x41b, script: 0x5b, flags: 0x0}, | ||
| 3211 | 334: {lang: 0x59, script: 0x2, flags: 0x1}, | ||
| 3212 | 351: {lang: 0x3a, script: 0x5, flags: 0x0}, | ||
| 3213 | 352: {lang: 0x5b, script: 0x2, flags: 0x1}, | ||
| 3214 | 357: {lang: 0x423, script: 0x5b, flags: 0x0}, | ||
| 3215 | } | ||
| 3216 | |||
| 3217 | // likelyRegionList holds lists info associated with likelyRegion. | ||
| 3218 | // Size: 558 bytes, 93 elements | ||
| 3219 | var likelyRegionList = [93]likelyLangScript{ | ||
| 3220 | 0: {lang: 0x148, script: 0x5, flags: 0x0}, | ||
| 3221 | 1: {lang: 0x476, script: 0x5b, flags: 0x0}, | ||
| 3222 | 2: {lang: 0x431, script: 0x5b, flags: 0x0}, | ||
| 3223 | 3: {lang: 0x2ff, script: 0x20, flags: 0x0}, | ||
| 3224 | 4: {lang: 0x1d7, script: 0x8, flags: 0x0}, | ||
| 3225 | 5: {lang: 0x274, script: 0x5b, flags: 0x0}, | ||
| 3226 | 6: {lang: 0xb7, script: 0x5b, flags: 0x0}, | ||
| 3227 | 7: {lang: 0x432, script: 0x20, flags: 0x0}, | ||
| 3228 | 8: {lang: 0x12d, script: 0xef, flags: 0x0}, | ||
| 3229 | 9: {lang: 0x351, script: 0x22, flags: 0x0}, | ||
| 3230 | 10: {lang: 0x529, script: 0x3b, flags: 0x0}, | ||
| 3231 | 11: {lang: 0x4ac, script: 0x5, flags: 0x0}, | ||
| 3232 | 12: {lang: 0x523, script: 0x5b, flags: 0x0}, | ||
| 3233 | 13: {lang: 0x29a, script: 0xee, flags: 0x0}, | ||
| 3234 | 14: {lang: 0x136, script: 0x34, flags: 0x0}, | ||
| 3235 | 15: {lang: 0x48a, script: 0x5b, flags: 0x0}, | ||
| 3236 | 16: {lang: 0x3a, script: 0x5, flags: 0x0}, | ||
| 3237 | 17: {lang: 0x15e, script: 0x5b, flags: 0x0}, | ||
| 3238 | 18: {lang: 0x27, script: 0x2c, flags: 0x0}, | ||
| 3239 | 19: {lang: 0x139, script: 0x5b, flags: 0x0}, | ||
| 3240 | 20: {lang: 0x26a, script: 0x5, flags: 0x2}, | ||
| 3241 | 21: {lang: 0x512, script: 0x3e, flags: 0x2}, | ||
| 3242 | 22: {lang: 0x210, script: 0x2e, flags: 0x0}, | ||
| 3243 | 23: {lang: 0x5, script: 0x20, flags: 0x0}, | ||
| 3244 | 24: {lang: 0x274, script: 0x5b, flags: 0x0}, | ||
| 3245 | 25: {lang: 0x136, script: 0x34, flags: 0x0}, | ||
| 3246 | 26: {lang: 0x2ff, script: 0x20, flags: 0x0}, | ||
| 3247 | 27: {lang: 0x1e1, script: 0x5b, flags: 0x0}, | ||
| 3248 | 28: {lang: 0x31f, script: 0x5, flags: 0x0}, | ||
| 3249 | 29: {lang: 0x1be, script: 0x22, flags: 0x0}, | ||
| 3250 | 30: {lang: 0x4b4, script: 0x5, flags: 0x0}, | ||
| 3251 | 31: {lang: 0x236, script: 0x76, flags: 0x0}, | ||
| 3252 | 32: {lang: 0x148, script: 0x5, flags: 0x0}, | ||
| 3253 | 33: {lang: 0x476, script: 0x5b, flags: 0x0}, | ||
| 3254 | 34: {lang: 0x24a, script: 0x4f, flags: 0x0}, | ||
| 3255 | 35: {lang: 0xe6, script: 0x5, flags: 0x0}, | ||
| 3256 | 36: {lang: 0x226, script: 0xee, flags: 0x0}, | ||
| 3257 | 37: {lang: 0x3a, script: 0x5, flags: 0x0}, | ||
| 3258 | 38: {lang: 0x15e, script: 0x5b, flags: 0x0}, | ||
| 3259 | 39: {lang: 0x2b8, script: 0x58, flags: 0x0}, | ||
| 3260 | 40: {lang: 0x226, script: 0xee, flags: 0x0}, | ||
| 3261 | 41: {lang: 0x3a, script: 0x5, flags: 0x0}, | ||
| 3262 | 42: {lang: 0x15e, script: 0x5b, flags: 0x0}, | ||
| 3263 | 43: {lang: 0x3dc, script: 0x5b, flags: 0x0}, | ||
| 3264 | 44: {lang: 0x4ae, script: 0x20, flags: 0x0}, | ||
| 3265 | 45: {lang: 0x2ff, script: 0x20, flags: 0x0}, | ||
| 3266 | 46: {lang: 0x431, script: 0x5b, flags: 0x0}, | ||
| 3267 | 47: {lang: 0x331, script: 0x76, flags: 0x0}, | ||
| 3268 | 48: {lang: 0x213, script: 0x5b, flags: 0x0}, | ||
| 3269 | 49: {lang: 0x30b, script: 0x20, flags: 0x0}, | ||
| 3270 | 50: {lang: 0x242, script: 0x5, flags: 0x0}, | ||
| 3271 | 51: {lang: 0x529, script: 0x3c, flags: 0x0}, | ||
| 3272 | 52: {lang: 0x3c0, script: 0x5b, flags: 0x0}, | ||
| 3273 | 53: {lang: 0x3a, script: 0x5, flags: 0x0}, | ||
| 3274 | 54: {lang: 0x15e, script: 0x5b, flags: 0x0}, | ||
| 3275 | 55: {lang: 0x2ed, script: 0x5b, flags: 0x0}, | ||
| 3276 | 56: {lang: 0x4b4, script: 0x5, flags: 0x0}, | ||
| 3277 | 57: {lang: 0x88, script: 0x22, flags: 0x0}, | ||
| 3278 | 58: {lang: 0x4b4, script: 0x5, flags: 0x0}, | ||
| 3279 | 59: {lang: 0x4b4, script: 0x5, flags: 0x0}, | ||
| 3280 | 60: {lang: 0xbe, script: 0x22, flags: 0x0}, | ||
| 3281 | 61: {lang: 0x3dc, script: 0x5b, flags: 0x0}, | ||
| 3282 | 62: {lang: 0x7e, script: 0x20, flags: 0x0}, | ||
| 3283 | 63: {lang: 0x3e2, script: 0x20, flags: 0x0}, | ||
| 3284 | 64: {lang: 0x267, script: 0x5b, flags: 0x0}, | ||
| 3285 | 65: {lang: 0x444, script: 0x5b, flags: 0x0}, | ||
| 3286 | 66: {lang: 0x512, script: 0x3e, flags: 0x0}, | ||
| 3287 | 67: {lang: 0x412, script: 0x5b, flags: 0x0}, | ||
| 3288 | 68: {lang: 0x4ae, script: 0x20, flags: 0x0}, | ||
| 3289 | 69: {lang: 0x3a, script: 0x5, flags: 0x0}, | ||
| 3290 | 70: {lang: 0x15e, script: 0x5b, flags: 0x0}, | ||
| 3291 | 71: {lang: 0x15e, script: 0x5b, flags: 0x0}, | ||
| 3292 | 72: {lang: 0x35, script: 0x5, flags: 0x0}, | ||
| 3293 | 73: {lang: 0x46b, script: 0xee, flags: 0x0}, | ||
| 3294 | 74: {lang: 0x2ec, script: 0x5, flags: 0x0}, | ||
| 3295 | 75: {lang: 0x30f, script: 0x76, flags: 0x0}, | ||
| 3296 | 76: {lang: 0x467, script: 0x20, flags: 0x0}, | ||
| 3297 | 77: {lang: 0x148, script: 0x5, flags: 0x0}, | ||
| 3298 | 78: {lang: 0x3a, script: 0x5, flags: 0x0}, | ||
| 3299 | 79: {lang: 0x15e, script: 0x5b, flags: 0x0}, | ||
| 3300 | 80: {lang: 0x48a, script: 0x5b, flags: 0x0}, | ||
| 3301 | 81: {lang: 0x58, script: 0x5, flags: 0x0}, | ||
| 3302 | 82: {lang: 0x219, script: 0x20, flags: 0x0}, | ||
| 3303 | 83: {lang: 0x81, script: 0x34, flags: 0x0}, | ||
| 3304 | 84: {lang: 0x529, script: 0x3c, flags: 0x0}, | ||
| 3305 | 85: {lang: 0x48c, script: 0x5b, flags: 0x0}, | ||
| 3306 | 86: {lang: 0x4ae, script: 0x20, flags: 0x0}, | ||
| 3307 | 87: {lang: 0x512, script: 0x3e, flags: 0x0}, | ||
| 3308 | 88: {lang: 0x3b3, script: 0x5b, flags: 0x0}, | ||
| 3309 | 89: {lang: 0x431, script: 0x5b, flags: 0x0}, | ||
| 3310 | 90: {lang: 0x432, script: 0x20, flags: 0x0}, | ||
| 3311 | 91: {lang: 0x15e, script: 0x5b, flags: 0x0}, | ||
| 3312 | 92: {lang: 0x446, script: 0x5, flags: 0x0}, | ||
| 3313 | } | ||
| 3314 | |||
| 3315 | type likelyTag struct { | ||
| 3316 | lang uint16 | ||
| 3317 | region uint16 | ||
| 3318 | script uint16 | ||
| 3319 | } | ||
| 3320 | |||
| 3321 | // Size: 198 bytes, 33 elements | ||
| 3322 | var likelyRegionGroup = [33]likelyTag{ | ||
| 3323 | 1: {lang: 0x139, region: 0xd7, script: 0x5b}, | ||
| 3324 | 2: {lang: 0x139, region: 0x136, script: 0x5b}, | ||
| 3325 | 3: {lang: 0x3c0, region: 0x41, script: 0x5b}, | ||
| 3326 | 4: {lang: 0x139, region: 0x2f, script: 0x5b}, | ||
| 3327 | 5: {lang: 0x139, region: 0xd7, script: 0x5b}, | ||
| 3328 | 6: {lang: 0x13e, region: 0xd0, script: 0x5b}, | ||
| 3329 | 7: {lang: 0x445, region: 0x130, script: 0x5b}, | ||
| 3330 | 8: {lang: 0x3a, region: 0x6c, script: 0x5}, | ||
| 3331 | 9: {lang: 0x445, region: 0x4b, script: 0x5b}, | ||
| 3332 | 10: {lang: 0x139, region: 0x162, script: 0x5b}, | ||
| 3333 | 11: {lang: 0x139, region: 0x136, script: 0x5b}, | ||
| 3334 | 12: {lang: 0x139, region: 0x136, script: 0x5b}, | ||
| 3335 | 13: {lang: 0x13e, region: 0x5a, script: 0x5b}, | ||
| 3336 | 14: {lang: 0x529, region: 0x53, script: 0x3b}, | ||
| 3337 | 15: {lang: 0x1be, region: 0x9a, script: 0x22}, | ||
| 3338 | 16: {lang: 0x1e1, region: 0x96, script: 0x5b}, | ||
| 3339 | 17: {lang: 0x1f9, region: 0x9f, script: 0x5b}, | ||
| 3340 | 18: {lang: 0x139, region: 0x2f, script: 0x5b}, | ||
| 3341 | 19: {lang: 0x139, region: 0xe7, script: 0x5b}, | ||
| 3342 | 20: {lang: 0x139, region: 0x8b, script: 0x5b}, | ||
| 3343 | 21: {lang: 0x41b, region: 0x143, script: 0x5b}, | ||
| 3344 | 22: {lang: 0x529, region: 0x53, script: 0x3b}, | ||
| 3345 | 23: {lang: 0x4bc, region: 0x138, script: 0x5b}, | ||
| 3346 | 24: {lang: 0x3a, region: 0x109, script: 0x5}, | ||
| 3347 | 25: {lang: 0x3e2, region: 0x107, script: 0x20}, | ||
| 3348 | 26: {lang: 0x3e2, region: 0x107, script: 0x20}, | ||
| 3349 | 27: {lang: 0x139, region: 0x7c, script: 0x5b}, | ||
| 3350 | 28: {lang: 0x10d, region: 0x61, script: 0x5b}, | ||
| 3351 | 29: {lang: 0x139, region: 0xd7, script: 0x5b}, | ||
| 3352 | 30: {lang: 0x13e, region: 0x1f, script: 0x5b}, | ||
| 3353 | 31: {lang: 0x139, region: 0x9b, script: 0x5b}, | ||
| 3354 | 32: {lang: 0x139, region: 0x7c, script: 0x5b}, | ||
| 3355 | } | ||
| 3356 | |||
| 3357 | // Size: 264 bytes, 33 elements | ||
| 3358 | var regionContainment = [33]uint64{ | ||
| 3359 | // Entry 0 - 1F | ||
| 3360 | 0x00000001ffffffff, 0x00000000200007a2, 0x0000000000003044, 0x0000000000000008, | ||
| 3361 | 0x00000000803c0010, 0x0000000000000020, 0x0000000000000040, 0x0000000000000080, | ||
| 3362 | 0x0000000000000100, 0x0000000000000200, 0x0000000000000400, 0x000000004000384c, | ||
| 3363 | 0x0000000000001000, 0x0000000000002000, 0x0000000000004000, 0x0000000000008000, | ||
| 3364 | 0x0000000000010000, 0x0000000000020000, 0x0000000000040000, 0x0000000000080000, | ||
| 3365 | 0x0000000000100000, 0x0000000000200000, 0x0000000001c1c000, 0x0000000000800000, | ||
| 3366 | 0x0000000001000000, 0x000000001e020000, 0x0000000004000000, 0x0000000008000000, | ||
| 3367 | 0x0000000010000000, 0x00000000200006a0, 0x0000000040002048, 0x0000000080000000, | ||
| 3368 | // Entry 20 - 3F | ||
| 3369 | 0x0000000100000000, | ||
| 3370 | } | ||
| 3371 | |||
| 3372 | // regionInclusion maps region identifiers to sets of regions in regionInclusionBits, | ||
| 3373 | // where each set holds all groupings that are directly connected in a region | ||
| 3374 | // containment graph. | ||
| 3375 | // Size: 359 bytes, 359 elements | ||
| 3376 | var regionInclusion = [359]uint8{ | ||
| 3377 | // Entry 0 - 3F | ||
| 3378 | 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, | ||
| 3379 | 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, | ||
| 3380 | 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, | ||
| 3381 | 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, | ||
| 3382 | 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x26, 0x23, | ||
| 3383 | 0x24, 0x26, 0x27, 0x22, 0x28, 0x29, 0x2a, 0x2b, | ||
| 3384 | 0x26, 0x2c, 0x24, 0x23, 0x26, 0x25, 0x2a, 0x2d, | ||
| 3385 | 0x2e, 0x24, 0x2f, 0x2d, 0x26, 0x30, 0x31, 0x28, | ||
| 3386 | // Entry 40 - 7F | ||
| 3387 | 0x26, 0x28, 0x26, 0x25, 0x31, 0x22, 0x32, 0x33, | ||
| 3388 | 0x34, 0x30, 0x22, 0x27, 0x27, 0x27, 0x35, 0x2d, | ||
| 3389 | 0x29, 0x28, 0x27, 0x36, 0x28, 0x22, 0x21, 0x34, | ||
| 3390 | 0x23, 0x21, 0x26, 0x2d, 0x26, 0x22, 0x37, 0x2e, | ||
| 3391 | 0x35, 0x2a, 0x22, 0x2f, 0x38, 0x26, 0x26, 0x21, | ||
| 3392 | 0x39, 0x39, 0x28, 0x38, 0x39, 0x39, 0x2f, 0x3a, | ||
| 3393 | 0x2f, 0x20, 0x21, 0x38, 0x3b, 0x28, 0x3c, 0x2c, | ||
| 3394 | 0x21, 0x2a, 0x35, 0x27, 0x38, 0x26, 0x24, 0x28, | ||
| 3395 | // Entry 80 - BF | ||
| 3396 | 0x2c, 0x2d, 0x23, 0x30, 0x2d, 0x2d, 0x26, 0x27, | ||
| 3397 | 0x3a, 0x22, 0x34, 0x3c, 0x2d, 0x28, 0x36, 0x22, | ||
| 3398 | 0x34, 0x3a, 0x26, 0x2e, 0x21, 0x39, 0x31, 0x38, | ||
| 3399 | 0x24, 0x2c, 0x25, 0x22, 0x24, 0x25, 0x2c, 0x3a, | ||
| 3400 | 0x2c, 0x26, 0x24, 0x36, 0x21, 0x2f, 0x3d, 0x31, | ||
| 3401 | 0x3c, 0x2f, 0x26, 0x36, 0x36, 0x24, 0x26, 0x3d, | ||
| 3402 | 0x31, 0x24, 0x26, 0x35, 0x25, 0x2d, 0x32, 0x38, | ||
| 3403 | 0x2a, 0x38, 0x39, 0x39, 0x35, 0x33, 0x23, 0x26, | ||
| 3404 | // Entry C0 - FF | ||
| 3405 | 0x2f, 0x3c, 0x21, 0x23, 0x2d, 0x31, 0x36, 0x36, | ||
| 3406 | 0x3c, 0x26, 0x2d, 0x26, 0x3a, 0x2f, 0x25, 0x2f, | ||
| 3407 | 0x34, 0x31, 0x2f, 0x32, 0x3b, 0x2d, 0x2b, 0x2d, | ||
| 3408 | 0x21, 0x34, 0x2a, 0x2c, 0x25, 0x21, 0x3c, 0x24, | ||
| 3409 | 0x29, 0x2b, 0x24, 0x34, 0x21, 0x28, 0x29, 0x3b, | ||
| 3410 | 0x31, 0x25, 0x2e, 0x30, 0x29, 0x26, 0x24, 0x3a, | ||
| 3411 | 0x21, 0x3c, 0x28, 0x21, 0x24, 0x21, 0x21, 0x1f, | ||
| 3412 | 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, | ||
| 3413 | // Entry 100 - 13F | ||
| 3414 | 0x21, 0x21, 0x21, 0x2f, 0x21, 0x2e, 0x23, 0x33, | ||
| 3415 | 0x2f, 0x24, 0x3b, 0x2f, 0x39, 0x38, 0x31, 0x2d, | ||
| 3416 | 0x3a, 0x2c, 0x2e, 0x2d, 0x23, 0x2d, 0x2f, 0x28, | ||
| 3417 | 0x2f, 0x27, 0x33, 0x34, 0x26, 0x24, 0x32, 0x22, | ||
| 3418 | 0x26, 0x27, 0x22, 0x2d, 0x31, 0x3d, 0x29, 0x31, | ||
| 3419 | 0x3d, 0x39, 0x29, 0x31, 0x24, 0x26, 0x29, 0x36, | ||
| 3420 | 0x2f, 0x33, 0x2f, 0x21, 0x22, 0x21, 0x30, 0x28, | ||
| 3421 | 0x3d, 0x23, 0x26, 0x21, 0x28, 0x26, 0x26, 0x31, | ||
| 3422 | // Entry 140 - 17F | ||
| 3423 | 0x3b, 0x29, 0x21, 0x29, 0x21, 0x21, 0x21, 0x21, | ||
| 3424 | 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x23, 0x21, | ||
| 3425 | 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, | ||
| 3426 | 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x24, 0x24, | ||
| 3427 | 0x2f, 0x23, 0x32, 0x2f, 0x27, 0x2f, 0x21, | ||
| 3428 | } | ||
| 3429 | |||
| 3430 | // regionInclusionBits is an array of bit vectors where every vector represents | ||
| 3431 | // a set of region groupings. These sets are used to compute the distance | ||
| 3432 | // between two regions for the purpose of language matching. | ||
| 3433 | // Size: 584 bytes, 73 elements | ||
| 3434 | var regionInclusionBits = [73]uint64{ | ||
| 3435 | // Entry 0 - 1F | ||
| 3436 | 0x0000000102400813, 0x00000000200007a3, 0x0000000000003844, 0x0000000040000808, | ||
| 3437 | 0x00000000803c0011, 0x0000000020000022, 0x0000000040000844, 0x0000000020000082, | ||
| 3438 | 0x0000000000000102, 0x0000000020000202, 0x0000000020000402, 0x000000004000384d, | ||
| 3439 | 0x0000000000001804, 0x0000000040002804, 0x0000000000404000, 0x0000000000408000, | ||
| 3440 | 0x0000000000410000, 0x0000000002020000, 0x0000000000040010, 0x0000000000080010, | ||
| 3441 | 0x0000000000100010, 0x0000000000200010, 0x0000000001c1c001, 0x0000000000c00000, | ||
| 3442 | 0x0000000001400000, 0x000000001e020001, 0x0000000006000000, 0x000000000a000000, | ||
| 3443 | 0x0000000012000000, 0x00000000200006a2, 0x0000000040002848, 0x0000000080000010, | ||
| 3444 | // Entry 20 - 3F | ||
| 3445 | 0x0000000100000001, 0x0000000000000001, 0x0000000080000000, 0x0000000000020000, | ||
| 3446 | 0x0000000001000000, 0x0000000000008000, 0x0000000000002000, 0x0000000000000200, | ||
| 3447 | 0x0000000000000008, 0x0000000000200000, 0x0000000110000000, 0x0000000000040000, | ||
| 3448 | 0x0000000008000000, 0x0000000000000020, 0x0000000104000000, 0x0000000000000080, | ||
| 3449 | 0x0000000000001000, 0x0000000000010000, 0x0000000000000400, 0x0000000004000000, | ||
| 3450 | 0x0000000000000040, 0x0000000010000000, 0x0000000000004000, 0x0000000101000000, | ||
| 3451 | 0x0000000108000000, 0x0000000000000100, 0x0000000100020000, 0x0000000000080000, | ||
| 3452 | 0x0000000000100000, 0x0000000000800000, 0x00000001ffffffff, 0x0000000122400fb3, | ||
| 3453 | // Entry 40 - 5F | ||
| 3454 | 0x00000001827c0813, 0x000000014240385f, 0x0000000103c1c813, 0x000000011e420813, | ||
| 3455 | 0x0000000112000001, 0x0000000106000001, 0x0000000101400001, 0x000000010a000001, | ||
| 3456 | 0x0000000102020001, | ||
| 3457 | } | ||
| 3458 | |||
| 3459 | // regionInclusionNext marks, for each entry in regionInclusionBits, the set of | ||
| 3460 | // all groups that are reachable from the groups set in the respective entry. | ||
| 3461 | // Size: 73 bytes, 73 elements | ||
| 3462 | var regionInclusionNext = [73]uint8{ | ||
| 3463 | // Entry 0 - 3F | ||
| 3464 | 0x3e, 0x3f, 0x0b, 0x0b, 0x40, 0x01, 0x0b, 0x01, | ||
| 3465 | 0x01, 0x01, 0x01, 0x41, 0x0b, 0x0b, 0x16, 0x16, | ||
| 3466 | 0x16, 0x19, 0x04, 0x04, 0x04, 0x04, 0x42, 0x16, | ||
| 3467 | 0x16, 0x43, 0x19, 0x19, 0x19, 0x01, 0x0b, 0x04, | ||
| 3468 | 0x00, 0x00, 0x1f, 0x11, 0x18, 0x0f, 0x0d, 0x09, | ||
| 3469 | 0x03, 0x15, 0x44, 0x12, 0x1b, 0x05, 0x45, 0x07, | ||
| 3470 | 0x0c, 0x10, 0x0a, 0x1a, 0x06, 0x1c, 0x0e, 0x46, | ||
| 3471 | 0x47, 0x08, 0x48, 0x13, 0x14, 0x17, 0x3e, 0x3e, | ||
| 3472 | // Entry 40 - 7F | ||
| 3473 | 0x3e, 0x3e, 0x3e, 0x3e, 0x43, 0x43, 0x42, 0x43, | ||
| 3474 | 0x43, | ||
| 3475 | } | ||
| 3476 | |||
| 3477 | type parentRel struct { | ||
| 3478 | lang uint16 | ||
| 3479 | script uint16 | ||
| 3480 | maxScript uint16 | ||
| 3481 | toRegion uint16 | ||
| 3482 | fromRegion []uint16 | ||
| 3483 | } | ||
| 3484 | |||
| 3485 | // Size: 414 bytes, 5 elements | ||
| 3486 | var parents = [5]parentRel{ | ||
| 3487 | 0: {lang: 0x139, script: 0x0, maxScript: 0x5b, toRegion: 0x1, fromRegion: []uint16{0x1a, 0x25, 0x26, 0x2f, 0x34, 0x36, 0x3d, 0x42, 0x46, 0x48, 0x49, 0x4a, 0x50, 0x52, 0x5d, 0x5e, 0x62, 0x65, 0x6e, 0x74, 0x75, 0x76, 0x7c, 0x7d, 0x80, 0x81, 0x82, 0x84, 0x8d, 0x8e, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0xa0, 0xa1, 0xa5, 0xa8, 0xaa, 0xae, 0xb2, 0xb5, 0xb6, 0xc0, 0xc7, 0xcb, 0xcc, 0xcd, 0xcf, 0xd1, 0xd3, 0xd6, 0xd7, 0xde, 0xe0, 0xe1, 0xe7, 0xe8, 0xe9, 0xec, 0xf1, 0x108, 0x10a, 0x10b, 0x10c, 0x10e, 0x10f, 0x113, 0x118, 0x11c, 0x11e, 0x120, 0x126, 0x12a, 0x12d, 0x12e, 0x130, 0x132, 0x13a, 0x13d, 0x140, 0x143, 0x162, 0x163, 0x165}}, | ||
| 3488 | 1: {lang: 0x139, script: 0x0, maxScript: 0x5b, toRegion: 0x1a, fromRegion: []uint16{0x2e, 0x4e, 0x61, 0x64, 0x73, 0xda, 0x10d, 0x110}}, | ||
| 3489 | 2: {lang: 0x13e, script: 0x0, maxScript: 0x5b, toRegion: 0x1f, fromRegion: []uint16{0x2c, 0x3f, 0x41, 0x48, 0x51, 0x54, 0x57, 0x5a, 0x66, 0x6a, 0x8a, 0x90, 0xd0, 0xd9, 0xe3, 0xe5, 0xed, 0xf2, 0x11b, 0x136, 0x137, 0x13c}}, | ||
| 3490 | 3: {lang: 0x3c0, script: 0x0, maxScript: 0x5b, toRegion: 0xef, fromRegion: []uint16{0x2a, 0x4e, 0x5b, 0x87, 0x8c, 0xb8, 0xc7, 0xd2, 0x119, 0x127}}, | ||
| 3491 | 4: {lang: 0x529, script: 0x3c, maxScript: 0x3c, toRegion: 0x8e, fromRegion: []uint16{0xc7}}, | ||
| 3492 | } | ||
| 3493 | |||
| 3494 | // Total table size 30466 bytes (29KiB); checksum: 7544152B | ||
diff --git a/vendor/golang.org/x/text/internal/language/tags.go b/vendor/golang.org/x/text/internal/language/tags.go new file mode 100644 index 0000000..e7afd31 --- /dev/null +++ b/vendor/golang.org/x/text/internal/language/tags.go | |||
| @@ -0,0 +1,48 @@ | |||
| 1 | // Copyright 2013 The Go Authors. All rights reserved. | ||
| 2 | // Use of this source code is governed by a BSD-style | ||
| 3 | // license that can be found in the LICENSE file. | ||
| 4 | |||
| 5 | package language | ||
| 6 | |||
| 7 | // MustParse is like Parse, but panics if the given BCP 47 tag cannot be parsed. | ||
| 8 | // It simplifies safe initialization of Tag values. | ||
| 9 | func MustParse(s string) Tag { | ||
| 10 | t, err := Parse(s) | ||
| 11 | if err != nil { | ||
| 12 | panic(err) | ||
| 13 | } | ||
| 14 | return t | ||
| 15 | } | ||
| 16 | |||
| 17 | // MustParseBase is like ParseBase, but panics if the given base cannot be parsed. | ||
| 18 | // It simplifies safe initialization of Base values. | ||
| 19 | func MustParseBase(s string) Language { | ||
| 20 | b, err := ParseBase(s) | ||
| 21 | if err != nil { | ||
| 22 | panic(err) | ||
| 23 | } | ||
| 24 | return b | ||
| 25 | } | ||
| 26 | |||
| 27 | // MustParseScript is like ParseScript, but panics if the given script cannot be | ||
| 28 | // parsed. It simplifies safe initialization of Script values. | ||
| 29 | func MustParseScript(s string) Script { | ||
| 30 | scr, err := ParseScript(s) | ||
| 31 | if err != nil { | ||
| 32 | panic(err) | ||
| 33 | } | ||
| 34 | return scr | ||
| 35 | } | ||
| 36 | |||
| 37 | // MustParseRegion is like ParseRegion, but panics if the given region cannot be | ||
| 38 | // parsed. It simplifies safe initialization of Region values. | ||
| 39 | func MustParseRegion(s string) Region { | ||
| 40 | r, err := ParseRegion(s) | ||
| 41 | if err != nil { | ||
| 42 | panic(err) | ||
| 43 | } | ||
| 44 | return r | ||
| 45 | } | ||
| 46 | |||
| 47 | // Und is the root language. | ||
| 48 | var Und Tag | ||
diff --git a/vendor/golang.org/x/text/internal/match.go b/vendor/golang.org/x/text/internal/match.go new file mode 100644 index 0000000..1cc004a --- /dev/null +++ b/vendor/golang.org/x/text/internal/match.go | |||
| @@ -0,0 +1,67 @@ | |||
| 1 | // Copyright 2015 The Go Authors. All rights reserved. | ||
| 2 | // Use of this source code is governed by a BSD-style | ||
| 3 | // license that can be found in the LICENSE file. | ||
| 4 | |||
| 5 | package internal | ||
| 6 | |||
| 7 | // This file contains matchers that implement CLDR inheritance. | ||
| 8 | // | ||
| 9 | // See https://unicode.org/reports/tr35/#Locale_Inheritance. | ||
| 10 | // | ||
| 11 | // Some of the inheritance described in this document is already handled by | ||
| 12 | // the cldr package. | ||
| 13 | |||
| 14 | import ( | ||
| 15 | "golang.org/x/text/language" | ||
| 16 | ) | ||
| 17 | |||
| 18 | // TODO: consider if (some of the) matching algorithm needs to be public after | ||
| 19 | // getting some feel about what is generic and what is specific. | ||
| 20 | |||
| 21 | // NewInheritanceMatcher returns a matcher that matches based on the inheritance | ||
| 22 | // chain. | ||
| 23 | // | ||
| 24 | // The matcher uses canonicalization and the parent relationship to find a | ||
| 25 | // match. The resulting match will always be either Und or a language with the | ||
| 26 | // same language and script as the requested language. It will not match | ||
| 27 | // languages for which there is understood to be mutual or one-directional | ||
| 28 | // intelligibility. | ||
| 29 | // | ||
| 30 | // A Match will indicate an Exact match if the language matches after | ||
| 31 | // canonicalization and High if the matched tag is a parent. | ||
| 32 | func NewInheritanceMatcher(t []language.Tag) *InheritanceMatcher { | ||
| 33 | tags := &InheritanceMatcher{make(map[language.Tag]int)} | ||
| 34 | for i, tag := range t { | ||
| 35 | ct, err := language.All.Canonicalize(tag) | ||
| 36 | if err != nil { | ||
| 37 | ct = tag | ||
| 38 | } | ||
| 39 | tags.index[ct] = i | ||
| 40 | } | ||
| 41 | return tags | ||
| 42 | } | ||
| 43 | |||
| 44 | type InheritanceMatcher struct { | ||
| 45 | index map[language.Tag]int | ||
| 46 | } | ||
| 47 | |||
| 48 | func (m InheritanceMatcher) Match(want ...language.Tag) (language.Tag, int, language.Confidence) { | ||
| 49 | for _, t := range want { | ||
| 50 | ct, err := language.All.Canonicalize(t) | ||
| 51 | if err != nil { | ||
| 52 | ct = t | ||
| 53 | } | ||
| 54 | conf := language.Exact | ||
| 55 | for { | ||
| 56 | if index, ok := m.index[ct]; ok { | ||
| 57 | return ct, index, conf | ||
| 58 | } | ||
| 59 | if ct == language.Und { | ||
| 60 | break | ||
| 61 | } | ||
| 62 | ct = ct.Parent() | ||
| 63 | conf = language.High | ||
| 64 | } | ||
| 65 | } | ||
| 66 | return language.Und, 0, language.No | ||
| 67 | } | ||
diff --git a/vendor/golang.org/x/text/internal/tag/tag.go b/vendor/golang.org/x/text/internal/tag/tag.go new file mode 100644 index 0000000..b5d3488 --- /dev/null +++ b/vendor/golang.org/x/text/internal/tag/tag.go | |||
| @@ -0,0 +1,100 @@ | |||
| 1 | // Copyright 2015 The Go Authors. All rights reserved. | ||
| 2 | // Use of this source code is governed by a BSD-style | ||
| 3 | // license that can be found in the LICENSE file. | ||
| 4 | |||
| 5 | // Package tag contains functionality handling tags and related data. | ||
| 6 | package tag // import "golang.org/x/text/internal/tag" | ||
| 7 | |||
| 8 | import "sort" | ||
| 9 | |||
| 10 | // An Index converts tags to a compact numeric value. | ||
| 11 | // | ||
| 12 | // All elements are of size 4. Tags may be up to 4 bytes long. Excess bytes can | ||
| 13 | // be used to store additional information about the tag. | ||
| 14 | type Index string | ||
| 15 | |||
| 16 | // Elem returns the element data at the given index. | ||
| 17 | func (s Index) Elem(x int) string { | ||
| 18 | return string(s[x*4 : x*4+4]) | ||
| 19 | } | ||
| 20 | |||
| 21 | // Index reports the index of the given key or -1 if it could not be found. | ||
| 22 | // Only the first len(key) bytes from the start of the 4-byte entries will be | ||
| 23 | // considered for the search and the first match in Index will be returned. | ||
| 24 | func (s Index) Index(key []byte) int { | ||
| 25 | n := len(key) | ||
| 26 | // search the index of the first entry with an equal or higher value than | ||
| 27 | // key in s. | ||
| 28 | index := sort.Search(len(s)/4, func(i int) bool { | ||
| 29 | return cmp(s[i*4:i*4+n], key) != -1 | ||
| 30 | }) | ||
| 31 | i := index * 4 | ||
| 32 | if cmp(s[i:i+len(key)], key) != 0 { | ||
| 33 | return -1 | ||
| 34 | } | ||
| 35 | return index | ||
| 36 | } | ||
| 37 | |||
| 38 | // Next finds the next occurrence of key after index x, which must have been | ||
| 39 | // obtained from a call to Index using the same key. It returns x+1 or -1. | ||
| 40 | func (s Index) Next(key []byte, x int) int { | ||
| 41 | if x++; x*4 < len(s) && cmp(s[x*4:x*4+len(key)], key) == 0 { | ||
| 42 | return x | ||
| 43 | } | ||
| 44 | return -1 | ||
| 45 | } | ||
| 46 | |||
| 47 | // cmp returns an integer comparing a and b lexicographically. | ||
| 48 | func cmp(a Index, b []byte) int { | ||
| 49 | n := len(a) | ||
| 50 | if len(b) < n { | ||
| 51 | n = len(b) | ||
| 52 | } | ||
| 53 | for i, c := range b[:n] { | ||
| 54 | switch { | ||
| 55 | case a[i] > c: | ||
| 56 | return 1 | ||
| 57 | case a[i] < c: | ||
| 58 | return -1 | ||
| 59 | } | ||
| 60 | } | ||
| 61 | switch { | ||
| 62 | case len(a) < len(b): | ||
| 63 | return -1 | ||
| 64 | case len(a) > len(b): | ||
| 65 | return 1 | ||
| 66 | } | ||
| 67 | return 0 | ||
| 68 | } | ||
| 69 | |||
| 70 | // Compare returns an integer comparing a and b lexicographically. | ||
| 71 | func Compare(a string, b []byte) int { | ||
| 72 | return cmp(Index(a), b) | ||
| 73 | } | ||
| 74 | |||
| 75 | // FixCase reformats b to the same pattern of cases as form. | ||
| 76 | // If returns false if string b is malformed. | ||
| 77 | func FixCase(form string, b []byte) bool { | ||
| 78 | if len(form) != len(b) { | ||
| 79 | return false | ||
| 80 | } | ||
| 81 | for i, c := range b { | ||
| 82 | if form[i] <= 'Z' { | ||
| 83 | if c >= 'a' { | ||
| 84 | c -= 'z' - 'Z' | ||
| 85 | } | ||
| 86 | if c < 'A' || 'Z' < c { | ||
| 87 | return false | ||
| 88 | } | ||
| 89 | } else { | ||
| 90 | if c <= 'Z' { | ||
| 91 | c += 'z' - 'Z' | ||
| 92 | } | ||
| 93 | if c < 'a' || 'z' < c { | ||
| 94 | return false | ||
| 95 | } | ||
| 96 | } | ||
| 97 | b[i] = c | ||
| 98 | } | ||
| 99 | return true | ||
| 100 | } | ||
