in internal/language/gen.go [582:673]
func (b *builder) parseIndices() {
meta := b.supp.Metadata
for k, v := range b.registry {
var ss *stringSet
switch v.typ {
case "language":
if len(k) == 2 || v.suppressScript != "" || v.scope == "special" {
b.lang.add(k)
continue
} else {
ss = &b.langNoIndex
}
case "region":
ss = &b.region
case "script":
ss = &b.script
case "variant":
ss = &b.variant
default:
continue
}
ss.add(k)
}
// Include any language for which there is data.
for _, lang := range b.data.Locales() {
if x := b.data.RawLDML(lang); false ||
x.LocaleDisplayNames != nil ||
x.Characters != nil ||
x.Delimiters != nil ||
x.Measurement != nil ||
x.Dates != nil ||
x.Numbers != nil ||
x.Units != nil ||
x.ListPatterns != nil ||
x.Collations != nil ||
x.Segmentations != nil ||
x.Rbnf != nil ||
x.Annotations != nil ||
x.Metadata != nil {
from := strings.Split(lang, "_")
if lang := from[0]; lang != "root" {
b.lang.add(lang)
}
}
}
// Include locales for plural rules, which uses a different structure.
for _, plurals := range b.data.Supplemental().Plurals {
for _, rules := range plurals.PluralRules {
for _, lang := range strings.Split(rules.Locales, " ") {
if lang = strings.Split(lang, "_")[0]; lang != "root" {
b.lang.add(lang)
}
}
}
}
// Include languages in likely subtags.
for _, m := range b.supp.LikelySubtags.LikelySubtag {
from := strings.Split(m.From, "_")
b.lang.add(from[0])
}
// Include ISO-639 alpha-3 bibliographic entries.
for _, a := range meta.Alias.LanguageAlias {
if a.Reason == "bibliographic" {
b.langNoIndex.add(a.Type)
}
}
// Include regions in territoryAlias (not all are in the IANA registry!)
for _, reg := range b.supp.Metadata.Alias.TerritoryAlias {
if len(reg.Type) == 2 {
b.region.add(reg.Type)
}
}
for _, s := range b.lang.s {
if len(s) == 3 {
b.langNoIndex.remove(s)
}
}
b.writeConst("NumLanguages", len(b.lang.slice())+len(b.langNoIndex.slice()))
b.writeConst("NumScripts", len(b.script.slice()))
b.writeConst("NumRegions", len(b.region.slice()))
// Add dummy codes at the start of each list to represent "unspecified".
b.lang.add("---")
b.script.add("----")
b.region.add("---")
// common locales
b.locale.parse(meta.DefaultContent.Locales)
}