language/internal: expose alias data and ValueError

Change-Id: I5ff55e3d386fb516a09f886b34179c69ab7b87bc
Reviewed-on: https://go-review.googlesource.com/95821
Run-TryBot: Marcel van Lohuizen <mpvl@golang.org>
Reviewed-by: Nigel Tao <nigeltao@golang.org>
diff --git a/language/internal/gen.go b/language/internal/gen.go
index b4717b9..cdcc7fe 100644
--- a/language/internal/gen.go
+++ b/language/internal/gen.go
@@ -57,7 +57,7 @@
 	`
 altLangIndex is used to convert indexes in altLangISO3 to langIDs.`,
 	`
-langAliasMap maps langIDs to their suggested replacements.`,
+AliasMap maps langIDs to their suggested replacements.`,
 	`
 script is an alphabetically sorted list of ISO 15924 codes. The index
 of the script in the string, divided by 4, is the internal scriptID.`,
@@ -68,7 +68,7 @@
 	`
 regionISO holds a list of alphabetically sorted 2-letter ISO region codes.
 Each 2-letter codes is followed by two bytes with the following meaning:
-    - [A-Z}{2}: the first letter of the 2-letter code plus these two 
+    - [A-Z}{2}: the first letter of the 2-letter code plus these two
                 letters form the 3-letter ISO code.
     - 0, n:     index into altRegionISO3.`,
 	`
@@ -474,17 +474,17 @@
 	b.p()
 }
 
-type fromTo struct {
-	from, to uint16
+type FromTo struct {
+	From, To uint16
 }
 
 func (b *builder) writeSortedMap(name string, ss *stringSet, index func(s string) uint16) {
 	ss.sortFunc(func(a, b string) bool {
 		return index(a) < index(b)
 	})
-	m := []fromTo{}
+	m := []FromTo{}
 	for _, s := range ss.s {
-		m = append(m, fromTo{index(s), index(ss.update[s])})
+		m = append(m, FromTo{index(s), index(ss.update[s])})
 	}
 	b.writeSlice(name, m)
 }
@@ -837,12 +837,12 @@
 	b.writeConst("altLangISO3", tag.Index(altLangISO3.join()))
 	b.writeSlice("altLangIndex", altLangIndex)
 
-	b.writeSortedMap("langAliasMap", &langAliasMap, b.langIndex)
+	b.writeSortedMap("AliasMap", &langAliasMap, b.langIndex)
 	types := make([]AliasType, len(langAliasMap.s))
 	for i, s := range langAliasMap.s {
 		types[i] = aliasTypeMap[s]
 	}
-	b.writeSlice("langAliasTypes", types)
+	b.writeSlice("AliasTypes", types)
 }
 
 var scriptConsts = []string{
@@ -1507,7 +1507,7 @@
 	gen.WriteCLDRVersion(w)
 
 	b.parseIndices()
-	b.writeType(fromTo{})
+	b.writeType(FromTo{})
 	b.writeLanguage()
 	b.writeScript()
 	b.writeRegion()
diff --git a/language/internal/language.go b/language/internal/language.go
index cc9bd4c..3a6ac06 100644
--- a/language/internal/language.go
+++ b/language/internal/language.go
@@ -178,8 +178,8 @@
 	return t.str[t.pVariant:t.pExt]
 }
 
-// VariantOrPrivateTagStr returns variants or private use tags.
-func (t Tag) VariantOrPrivateTagStr() string {
+// VariantOrPrivateUseTags returns variants or private use tags.
+func (t Tag) VariantOrPrivateUseTags() string {
 	if t.pExt > 0 {
 		return t.str[t.pVariant:t.pExt]
 	}
@@ -192,11 +192,6 @@
 	return t.str != ""
 }
 
-// // IsPrivateUse reports whether this is tag starting with x-.
-// func (t Tag) IsPrivateUse() bool {
-// 	return t.str != "" && strings.HasPrefix(t.str, "x-")
-// }
-
 // Parent returns the CLDR parent of t. In CLDR, missing fields in data for a
 // specific language are substituted with fields from the parent language.
 // The parent for a language may change for newer versions of CLDR.
@@ -592,7 +587,7 @@
 	if id, ok := variantIndex[s]; ok {
 		return Variant{id, s}, nil
 	}
-	return Variant{}, mkErrInvalid([]byte(s))
+	return Variant{}, NewValueError([]byte(s))
 }
 
 // String returns the string representation of the variant.
diff --git a/language/internal/lookup.go b/language/internal/lookup.go
index 977861b..da8b598 100644
--- a/language/internal/lookup.go
+++ b/language/internal/lookup.go
@@ -21,7 +21,7 @@
 	}
 	i := idx.Index(key)
 	if i == -1 {
-		return 0, mkErrInvalid(key)
+		return 0, NewValueError(key)
 	}
 	return i, nil
 }
@@ -43,17 +43,20 @@
 	return getLangISO3(s)
 }
 
+// TODO language normalization as well as the AliasMaps could be moved to the
+// higher level package, but it is a bit tricky to separate the generation.
+
 func (id Language) Canonicalize() (Language, AliasType) {
 	return normLang(id)
 }
 
 // mapLang returns the mapped langID of id according to mapping m.
 func normLang(id Language) (Language, AliasType) {
-	k := sort.Search(len(langAliasMap), func(i int) bool {
-		return langAliasMap[i].from >= uint16(id)
+	k := sort.Search(len(AliasMap), func(i int) bool {
+		return AliasMap[i].From >= uint16(id)
 	})
-	if k < len(langAliasMap) && langAliasMap[k].from == uint16(id) {
-		return Language(langAliasMap[k].to), langAliasTypes[k]
+	if k < len(AliasMap) && AliasMap[k].From == uint16(id) {
+		return Language(AliasMap[k].To), AliasTypes[k]
 	}
 	return id, AliasTypeUnknown
 }
@@ -67,7 +70,7 @@
 	if i := lang.Index(s); i != -1 && lang.Elem(i)[3] != 0 {
 		return Language(i), nil
 	}
-	return 0, mkErrInvalid(s)
+	return 0, NewValueError(s)
 }
 
 const base = 'z' - 'a' + 1
@@ -120,7 +123,7 @@
 				return Language(i), nil
 			}
 		}
-		return 0, mkErrInvalid(s)
+		return 0, NewValueError(s)
 	}
 	return 0, ErrSyntax
 }
@@ -230,7 +233,7 @@
 				return Region(altRegionIDs[i/3]), nil
 			}
 		}
-		return 0, mkErrInvalid(s)
+		return 0, NewValueError(s)
 	}
 	return 0, ErrSyntax
 }
@@ -263,10 +266,10 @@
 func normRegion(r Region) Region {
 	m := regionOldMap
 	k := sort.Search(len(m), func(i int) bool {
-		return m[i].from >= uint16(r)
+		return m[i].From >= uint16(r)
 	})
-	if k < len(m) && m[k].from == uint16(r) {
-		return Region(m[k].to)
+	if k < len(m) && m[k].From == uint16(r) {
+		return Region(m[k].To)
 	}
 	return 0
 }
diff --git a/language/internal/lookup_test.go b/language/internal/lookup_test.go
index d60dd88..5b93acb 100644
--- a/language/internal/lookup_test.go
+++ b/language/internal/lookup_test.go
@@ -23,7 +23,7 @@
 		{id: "  ", bcp47: "und", iso3: "und", err: ErrSyntax},
 		{id: "   ", bcp47: "und", iso3: "und", err: ErrSyntax},
 		{id: "    ", bcp47: "und", iso3: "und", err: ErrSyntax},
-		{id: "xxx", bcp47: "und", iso3: "und", err: mkErrInvalid([]byte("xxx"))},
+		{id: "xxx", bcp47: "und", iso3: "und", err: NewValueError([]byte("xxx"))},
 		{id: "und", bcp47: "und", iso3: "und"},
 		{id: "aju", bcp47: "aju", iso3: "aju", norm: "jrb"},
 		{id: "jrb", bcp47: "jrb", iso3: "jrb"},
diff --git a/language/internal/parse.go b/language/internal/parse.go
index 94e7271..9953dac 100644
--- a/language/internal/parse.go
+++ b/language/internal/parse.go
@@ -41,9 +41,10 @@
 	v [8]byte
 }
 
-func mkErrInvalid(s []byte) error {
+// NewValueError creates a new ValueError.
+func NewValueError(tag []byte) ValueError {
 	var e ValueError
-	copy(e.v[:], s)
+	copy(e.v[:], tag)
 	return e
 }
 
@@ -347,7 +348,7 @@
 		if !ok {
 			// unknown variant
 			// TODO: allow user-defined variants?
-			scan.gobble(mkErrInvalid(scan.token))
+			scan.gobble(NewValueError(scan.token))
 			continue
 		}
 		varID = append(varID, v)
diff --git a/language/internal/parse_test.go b/language/internal/parse_test.go
index a9d796f..7ed74eb 100644
--- a/language/internal/parse_test.go
+++ b/language/internal/parse_test.go
@@ -335,7 +335,7 @@
 
 func TestErrors(t *testing.T) {
 	mkInvalid := func(s string) error {
-		return mkErrInvalid([]byte(s))
+		return NewValueError([]byte(s))
 	}
 	tests := []struct {
 		in  string
diff --git a/language/internal/tables.go b/language/internal/tables.go
index e885942..239e2d2 100644
--- a/language/internal/tables.go
+++ b/language/internal/tables.go
@@ -13,9 +13,9 @@
 
 const NumRegions = 357
 
-type fromTo struct {
-	from uint16
-	to   uint16
+type FromTo struct {
+	From uint16
+	To   uint16
 }
 
 const nonCanonicalUnd = 1201
@@ -581,177 +581,177 @@
 	0x0281, 0x0407, 0x01fb, 0x03e5, 0x013e, 0x0208,
 }
 
-// langAliasMap maps langIDs to their suggested replacements.
+// AliasMap maps langIDs to their suggested replacements.
 // Size: 656 bytes, 164 elements
-var langAliasMap = [164]fromTo{
-	0:   {from: 0x82, to: 0x88},
-	1:   {from: 0x187, to: 0x1ae},
-	2:   {from: 0x1f3, to: 0x1e1},
-	3:   {from: 0x1fb, to: 0x1bc},
-	4:   {from: 0x208, to: 0x512},
-	5:   {from: 0x20f, to: 0x20e},
-	6:   {from: 0x310, to: 0x3dc},
-	7:   {from: 0x347, to: 0x36f},
-	8:   {from: 0x407, to: 0x432},
-	9:   {from: 0x47a, to: 0x153},
-	10:  {from: 0x490, to: 0x451},
-	11:  {from: 0x4a2, to: 0x21},
-	12:  {from: 0x53e, to: 0x544},
-	13:  {from: 0x58f, to: 0x12d},
-	14:  {from: 0x630, to: 0x1eb1},
-	15:  {from: 0x651, to: 0x431},
-	16:  {from: 0x662, to: 0x431},
-	17:  {from: 0x6ed, to: 0x3a},
-	18:  {from: 0x6f8, to: 0x1d7},
-	19:  {from: 0x73e, to: 0x21a1},
-	20:  {from: 0x7b3, to: 0x56},
-	21:  {from: 0x7b9, to: 0x299b},
-	22:  {from: 0x7c5, to: 0x58},
-	23:  {from: 0x7e6, to: 0x145},
-	24:  {from: 0x80c, to: 0x5a},
-	25:  {from: 0x815, to: 0x8d},
-	26:  {from: 0x87e, to: 0x810},
-	27:  {from: 0x8c3, to: 0xee3},
-	28:  {from: 0x9ef, to: 0x331},
-	29:  {from: 0xa36, to: 0x2c5},
-	30:  {from: 0xa3d, to: 0xbf},
-	31:  {from: 0xabe, to: 0x3322},
-	32:  {from: 0xb38, to: 0x529},
-	33:  {from: 0xb75, to: 0x265a},
-	34:  {from: 0xb7e, to: 0xbc3},
-	35:  {from: 0xb9b, to: 0x44e},
-	36:  {from: 0xbbc, to: 0x4229},
-	37:  {from: 0xbbf, to: 0x529},
-	38:  {from: 0xbfe, to: 0x2da7},
-	39:  {from: 0xc2e, to: 0x3181},
-	40:  {from: 0xcb9, to: 0xf3},
-	41:  {from: 0xd08, to: 0xfa},
-	42:  {from: 0xdc8, to: 0x11a},
-	43:  {from: 0xdd7, to: 0x32d},
-	44:  {from: 0xdf8, to: 0xdfb},
-	45:  {from: 0xdfe, to: 0x531},
-	46:  {from: 0xedf, to: 0x205a},
-	47:  {from: 0xeee, to: 0x2e9a},
-	48:  {from: 0xf39, to: 0x367},
-	49:  {from: 0x10d0, to: 0x140},
-	50:  {from: 0x1104, to: 0x2d0},
-	51:  {from: 0x11a0, to: 0x1ec},
-	52:  {from: 0x1279, to: 0x21},
-	53:  {from: 0x1424, to: 0x15e},
-	54:  {from: 0x1470, to: 0x14e},
-	55:  {from: 0x151f, to: 0xd9b},
-	56:  {from: 0x1523, to: 0x390},
-	57:  {from: 0x1532, to: 0x19f},
-	58:  {from: 0x1580, to: 0x210},
-	59:  {from: 0x1583, to: 0x10d},
-	60:  {from: 0x15a3, to: 0x3caf},
-	61:  {from: 0x166a, to: 0x19b},
-	62:  {from: 0x16c8, to: 0x136},
-	63:  {from: 0x1700, to: 0x29f8},
-	64:  {from: 0x1718, to: 0x194},
-	65:  {from: 0x1727, to: 0xf3f},
-	66:  {from: 0x177a, to: 0x178},
-	67:  {from: 0x1809, to: 0x17b6},
-	68:  {from: 0x1816, to: 0x18f3},
-	69:  {from: 0x188a, to: 0x436},
-	70:  {from: 0x1979, to: 0x1d01},
-	71:  {from: 0x1a74, to: 0x2bb0},
-	72:  {from: 0x1a8a, to: 0x1f8},
-	73:  {from: 0x1b5a, to: 0x1fa},
-	74:  {from: 0x1b86, to: 0x1515},
-	75:  {from: 0x1d64, to: 0x2c9b},
-	76:  {from: 0x2038, to: 0x37b1},
-	77:  {from: 0x203d, to: 0x20dd},
-	78:  {from: 0x205a, to: 0x30b},
-	79:  {from: 0x20e3, to: 0x274},
-	80:  {from: 0x20ee, to: 0x263},
-	81:  {from: 0x20f2, to: 0x22d},
-	82:  {from: 0x20f9, to: 0x256},
-	83:  {from: 0x210f, to: 0x21eb},
-	84:  {from: 0x2135, to: 0x27d},
-	85:  {from: 0x2160, to: 0x913},
-	86:  {from: 0x2199, to: 0x121},
-	87:  {from: 0x21ce, to: 0x1561},
-	88:  {from: 0x21e6, to: 0x504},
-	89:  {from: 0x21f4, to: 0x49f},
-	90:  {from: 0x222d, to: 0x121},
-	91:  {from: 0x2237, to: 0x121},
-	92:  {from: 0x2262, to: 0x92a},
-	93:  {from: 0x2316, to: 0x3226},
-	94:  {from: 0x2382, to: 0x3365},
-	95:  {from: 0x2472, to: 0x2c7},
-	96:  {from: 0x24e4, to: 0x2ff},
-	97:  {from: 0x24f0, to: 0x2fa},
-	98:  {from: 0x24fa, to: 0x31f},
-	99:  {from: 0x2550, to: 0xb5b},
-	100: {from: 0x25a9, to: 0xe2},
-	101: {from: 0x263e, to: 0x2d0},
-	102: {from: 0x26c9, to: 0x26b4},
-	103: {from: 0x26f9, to: 0x3c8},
-	104: {from: 0x2727, to: 0x3caf},
-	105: {from: 0x2765, to: 0x26b4},
-	106: {from: 0x2789, to: 0x4358},
-	107: {from: 0x28ef, to: 0x2837},
-	108: {from: 0x2914, to: 0x351},
-	109: {from: 0x2986, to: 0x2da7},
-	110: {from: 0x2b1a, to: 0x38d},
-	111: {from: 0x2bfc, to: 0x395},
-	112: {from: 0x2c3f, to: 0x3caf},
-	113: {from: 0x2cfc, to: 0x3be},
-	114: {from: 0x2d13, to: 0x597},
-	115: {from: 0x2d47, to: 0x148},
-	116: {from: 0x2d48, to: 0x148},
-	117: {from: 0x2dff, to: 0x2f1},
-	118: {from: 0x2e08, to: 0x19cc},
-	119: {from: 0x2e1a, to: 0x2d95},
-	120: {from: 0x2e21, to: 0x292},
-	121: {from: 0x2e54, to: 0x7d},
-	122: {from: 0x2e65, to: 0x2282},
-	123: {from: 0x2ea0, to: 0x2e9b},
-	124: {from: 0x2eef, to: 0x2ed7},
-	125: {from: 0x3193, to: 0x3c4},
-	126: {from: 0x3366, to: 0x338e},
-	127: {from: 0x342a, to: 0x3dc},
-	128: {from: 0x34ee, to: 0x18d0},
-	129: {from: 0x35c8, to: 0x2c9b},
-	130: {from: 0x35e6, to: 0x412},
-	131: {from: 0x3658, to: 0x246},
-	132: {from: 0x3676, to: 0x3f4},
-	133: {from: 0x36fd, to: 0x445},
-	134: {from: 0x37c0, to: 0x121},
-	135: {from: 0x3816, to: 0x38f2},
-	136: {from: 0x382b, to: 0x2c9b},
-	137: {from: 0x382f, to: 0xa9},
-	138: {from: 0x3832, to: 0x3228},
-	139: {from: 0x386c, to: 0x39a6},
-	140: {from: 0x3892, to: 0x3fc0},
-	141: {from: 0x38a5, to: 0x39d7},
-	142: {from: 0x38b4, to: 0x1fa4},
-	143: {from: 0x38b5, to: 0x2e9a},
-	144: {from: 0x395c, to: 0x47e},
-	145: {from: 0x3b4e, to: 0xd91},
-	146: {from: 0x3b78, to: 0x137},
-	147: {from: 0x3c99, to: 0x4bc},
-	148: {from: 0x3fbd, to: 0x100},
-	149: {from: 0x4208, to: 0xa91},
-	150: {from: 0x42be, to: 0x573},
-	151: {from: 0x42f9, to: 0x3f60},
-	152: {from: 0x4378, to: 0x25a},
-	153: {from: 0x43cb, to: 0x36cb},
-	154: {from: 0x43cd, to: 0x10f},
-	155: {from: 0x44af, to: 0x3322},
-	156: {from: 0x44e3, to: 0x512},
-	157: {from: 0x45ca, to: 0x2409},
-	158: {from: 0x45dd, to: 0x26dc},
-	159: {from: 0x4610, to: 0x48ae},
-	160: {from: 0x46ae, to: 0x46a0},
-	161: {from: 0x473e, to: 0x4745},
-	162: {from: 0x4916, to: 0x31f},
-	163: {from: 0x49a7, to: 0x523},
+var AliasMap = [164]FromTo{
+	0:   {From: 0x82, To: 0x88},
+	1:   {From: 0x187, To: 0x1ae},
+	2:   {From: 0x1f3, To: 0x1e1},
+	3:   {From: 0x1fb, To: 0x1bc},
+	4:   {From: 0x208, To: 0x512},
+	5:   {From: 0x20f, To: 0x20e},
+	6:   {From: 0x310, To: 0x3dc},
+	7:   {From: 0x347, To: 0x36f},
+	8:   {From: 0x407, To: 0x432},
+	9:   {From: 0x47a, To: 0x153},
+	10:  {From: 0x490, To: 0x451},
+	11:  {From: 0x4a2, To: 0x21},
+	12:  {From: 0x53e, To: 0x544},
+	13:  {From: 0x58f, To: 0x12d},
+	14:  {From: 0x630, To: 0x1eb1},
+	15:  {From: 0x651, To: 0x431},
+	16:  {From: 0x662, To: 0x431},
+	17:  {From: 0x6ed, To: 0x3a},
+	18:  {From: 0x6f8, To: 0x1d7},
+	19:  {From: 0x73e, To: 0x21a1},
+	20:  {From: 0x7b3, To: 0x56},
+	21:  {From: 0x7b9, To: 0x299b},
+	22:  {From: 0x7c5, To: 0x58},
+	23:  {From: 0x7e6, To: 0x145},
+	24:  {From: 0x80c, To: 0x5a},
+	25:  {From: 0x815, To: 0x8d},
+	26:  {From: 0x87e, To: 0x810},
+	27:  {From: 0x8c3, To: 0xee3},
+	28:  {From: 0x9ef, To: 0x331},
+	29:  {From: 0xa36, To: 0x2c5},
+	30:  {From: 0xa3d, To: 0xbf},
+	31:  {From: 0xabe, To: 0x3322},
+	32:  {From: 0xb38, To: 0x529},
+	33:  {From: 0xb75, To: 0x265a},
+	34:  {From: 0xb7e, To: 0xbc3},
+	35:  {From: 0xb9b, To: 0x44e},
+	36:  {From: 0xbbc, To: 0x4229},
+	37:  {From: 0xbbf, To: 0x529},
+	38:  {From: 0xbfe, To: 0x2da7},
+	39:  {From: 0xc2e, To: 0x3181},
+	40:  {From: 0xcb9, To: 0xf3},
+	41:  {From: 0xd08, To: 0xfa},
+	42:  {From: 0xdc8, To: 0x11a},
+	43:  {From: 0xdd7, To: 0x32d},
+	44:  {From: 0xdf8, To: 0xdfb},
+	45:  {From: 0xdfe, To: 0x531},
+	46:  {From: 0xedf, To: 0x205a},
+	47:  {From: 0xeee, To: 0x2e9a},
+	48:  {From: 0xf39, To: 0x367},
+	49:  {From: 0x10d0, To: 0x140},
+	50:  {From: 0x1104, To: 0x2d0},
+	51:  {From: 0x11a0, To: 0x1ec},
+	52:  {From: 0x1279, To: 0x21},
+	53:  {From: 0x1424, To: 0x15e},
+	54:  {From: 0x1470, To: 0x14e},
+	55:  {From: 0x151f, To: 0xd9b},
+	56:  {From: 0x1523, To: 0x390},
+	57:  {From: 0x1532, To: 0x19f},
+	58:  {From: 0x1580, To: 0x210},
+	59:  {From: 0x1583, To: 0x10d},
+	60:  {From: 0x15a3, To: 0x3caf},
+	61:  {From: 0x166a, To: 0x19b},
+	62:  {From: 0x16c8, To: 0x136},
+	63:  {From: 0x1700, To: 0x29f8},
+	64:  {From: 0x1718, To: 0x194},
+	65:  {From: 0x1727, To: 0xf3f},
+	66:  {From: 0x177a, To: 0x178},
+	67:  {From: 0x1809, To: 0x17b6},
+	68:  {From: 0x1816, To: 0x18f3},
+	69:  {From: 0x188a, To: 0x436},
+	70:  {From: 0x1979, To: 0x1d01},
+	71:  {From: 0x1a74, To: 0x2bb0},
+	72:  {From: 0x1a8a, To: 0x1f8},
+	73:  {From: 0x1b5a, To: 0x1fa},
+	74:  {From: 0x1b86, To: 0x1515},
+	75:  {From: 0x1d64, To: 0x2c9b},
+	76:  {From: 0x2038, To: 0x37b1},
+	77:  {From: 0x203d, To: 0x20dd},
+	78:  {From: 0x205a, To: 0x30b},
+	79:  {From: 0x20e3, To: 0x274},
+	80:  {From: 0x20ee, To: 0x263},
+	81:  {From: 0x20f2, To: 0x22d},
+	82:  {From: 0x20f9, To: 0x256},
+	83:  {From: 0x210f, To: 0x21eb},
+	84:  {From: 0x2135, To: 0x27d},
+	85:  {From: 0x2160, To: 0x913},
+	86:  {From: 0x2199, To: 0x121},
+	87:  {From: 0x21ce, To: 0x1561},
+	88:  {From: 0x21e6, To: 0x504},
+	89:  {From: 0x21f4, To: 0x49f},
+	90:  {From: 0x222d, To: 0x121},
+	91:  {From: 0x2237, To: 0x121},
+	92:  {From: 0x2262, To: 0x92a},
+	93:  {From: 0x2316, To: 0x3226},
+	94:  {From: 0x2382, To: 0x3365},
+	95:  {From: 0x2472, To: 0x2c7},
+	96:  {From: 0x24e4, To: 0x2ff},
+	97:  {From: 0x24f0, To: 0x2fa},
+	98:  {From: 0x24fa, To: 0x31f},
+	99:  {From: 0x2550, To: 0xb5b},
+	100: {From: 0x25a9, To: 0xe2},
+	101: {From: 0x263e, To: 0x2d0},
+	102: {From: 0x26c9, To: 0x26b4},
+	103: {From: 0x26f9, To: 0x3c8},
+	104: {From: 0x2727, To: 0x3caf},
+	105: {From: 0x2765, To: 0x26b4},
+	106: {From: 0x2789, To: 0x4358},
+	107: {From: 0x28ef, To: 0x2837},
+	108: {From: 0x2914, To: 0x351},
+	109: {From: 0x2986, To: 0x2da7},
+	110: {From: 0x2b1a, To: 0x38d},
+	111: {From: 0x2bfc, To: 0x395},
+	112: {From: 0x2c3f, To: 0x3caf},
+	113: {From: 0x2cfc, To: 0x3be},
+	114: {From: 0x2d13, To: 0x597},
+	115: {From: 0x2d47, To: 0x148},
+	116: {From: 0x2d48, To: 0x148},
+	117: {From: 0x2dff, To: 0x2f1},
+	118: {From: 0x2e08, To: 0x19cc},
+	119: {From: 0x2e1a, To: 0x2d95},
+	120: {From: 0x2e21, To: 0x292},
+	121: {From: 0x2e54, To: 0x7d},
+	122: {From: 0x2e65, To: 0x2282},
+	123: {From: 0x2ea0, To: 0x2e9b},
+	124: {From: 0x2eef, To: 0x2ed7},
+	125: {From: 0x3193, To: 0x3c4},
+	126: {From: 0x3366, To: 0x338e},
+	127: {From: 0x342a, To: 0x3dc},
+	128: {From: 0x34ee, To: 0x18d0},
+	129: {From: 0x35c8, To: 0x2c9b},
+	130: {From: 0x35e6, To: 0x412},
+	131: {From: 0x3658, To: 0x246},
+	132: {From: 0x3676, To: 0x3f4},
+	133: {From: 0x36fd, To: 0x445},
+	134: {From: 0x37c0, To: 0x121},
+	135: {From: 0x3816, To: 0x38f2},
+	136: {From: 0x382b, To: 0x2c9b},
+	137: {From: 0x382f, To: 0xa9},
+	138: {From: 0x3832, To: 0x3228},
+	139: {From: 0x386c, To: 0x39a6},
+	140: {From: 0x3892, To: 0x3fc0},
+	141: {From: 0x38a5, To: 0x39d7},
+	142: {From: 0x38b4, To: 0x1fa4},
+	143: {From: 0x38b5, To: 0x2e9a},
+	144: {From: 0x395c, To: 0x47e},
+	145: {From: 0x3b4e, To: 0xd91},
+	146: {From: 0x3b78, To: 0x137},
+	147: {From: 0x3c99, To: 0x4bc},
+	148: {From: 0x3fbd, To: 0x100},
+	149: {From: 0x4208, To: 0xa91},
+	150: {From: 0x42be, To: 0x573},
+	151: {From: 0x42f9, To: 0x3f60},
+	152: {From: 0x4378, To: 0x25a},
+	153: {From: 0x43cb, To: 0x36cb},
+	154: {From: 0x43cd, To: 0x10f},
+	155: {From: 0x44af, To: 0x3322},
+	156: {From: 0x44e3, To: 0x512},
+	157: {From: 0x45ca, To: 0x2409},
+	158: {From: 0x45dd, To: 0x26dc},
+	159: {From: 0x4610, To: 0x48ae},
+	160: {From: 0x46ae, To: 0x46a0},
+	161: {From: 0x473e, To: 0x4745},
+	162: {From: 0x4916, To: 0x31f},
+	163: {From: 0x49a7, To: 0x523},
 }
 
 // Size: 164 bytes, 164 elements
-var langAliasTypes = [164]AliasType{
+var AliasTypes = [164]AliasType{
 	// Entry 0 - 3F
 	1, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 1, 0, 0, 1, 2,
 	1, 1, 2, 0, 1, 0, 1, 2, 1, 1, 0, 0, 2, 1, 1, 0,
@@ -1111,27 +1111,27 @@
 }
 
 // Size: 80 bytes, 20 elements
-var regionOldMap = [20]fromTo{
-	0:  {from: 0x44, to: 0xc4},
-	1:  {from: 0x58, to: 0xa7},
-	2:  {from: 0x5f, to: 0x60},
-	3:  {from: 0x66, to: 0x3b},
-	4:  {from: 0x79, to: 0x78},
-	5:  {from: 0x93, to: 0x37},
-	6:  {from: 0xa3, to: 0x133},
-	7:  {from: 0xc1, to: 0x133},
-	8:  {from: 0xd7, to: 0x13f},
-	9:  {from: 0xdc, to: 0x2b},
-	10: {from: 0xef, to: 0x133},
-	11: {from: 0xf2, to: 0xe2},
-	12: {from: 0xfc, to: 0x70},
-	13: {from: 0x103, to: 0x164},
-	14: {from: 0x12a, to: 0x126},
-	15: {from: 0x132, to: 0x7b},
-	16: {from: 0x13a, to: 0x13e},
-	17: {from: 0x141, to: 0x133},
-	18: {from: 0x15d, to: 0x15e},
-	19: {from: 0x163, to: 0x4b},
+var regionOldMap = [20]FromTo{
+	0:  {From: 0x44, To: 0xc4},
+	1:  {From: 0x58, To: 0xa7},
+	2:  {From: 0x5f, To: 0x60},
+	3:  {From: 0x66, To: 0x3b},
+	4:  {From: 0x79, To: 0x78},
+	5:  {From: 0x93, To: 0x37},
+	6:  {From: 0xa3, To: 0x133},
+	7:  {From: 0xc1, To: 0x133},
+	8:  {From: 0xd7, To: 0x13f},
+	9:  {From: 0xdc, To: 0x2b},
+	10: {From: 0xef, To: 0x133},
+	11: {From: 0xf2, To: 0xe2},
+	12: {From: 0xfc, To: 0x70},
+	13: {From: 0x103, To: 0x164},
+	14: {From: 0x12a, To: 0x126},
+	15: {From: 0x132, To: 0x7b},
+	16: {From: 0x13a, To: 0x13e},
+	17: {From: 0x141, To: 0x133},
+	18: {From: 0x15d, To: 0x15e},
+	19: {From: 0x163, To: 0x4b},
 }
 
 // m49 maps regionIDs to UN.M49 codes. The first isoRegionOffset entries are
@@ -3428,4 +3428,4 @@
 	4: {lang: 0x529, script: 0x39, maxScript: 0x39, toRegion: 0x8d, fromRegion: []uint16{0xc6}},
 }
 
-// Total table size 25886 bytes (25KiB); checksum: BAE5A319
+// Total table size 25886 bytes (25KiB); checksum: 50D3D57D