internal/number: preperation for CLDR 32

change index size

Change-Id: Iff47132d6d5d4c72abb1e8005fc0d1ca0eae2bd8
Reviewed-on: https://go-review.googlesource.com/82902
Run-TryBot: Marcel van Lohuizen <mpvl@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Nigel Tao <nigeltao@golang.org>
diff --git a/internal/number/common.go b/internal/number/common.go
index e428a72..052876e 100644
--- a/internal/number/common.go
+++ b/internal/number/common.go
@@ -33,8 +33,19 @@
 	NumSymbolTypes
 )
 
+const hasNonLatnMask = 0x8000
+
+// symOffset is an offset into altSymData if the bit indicated by hasNonLatnMask
+// is not 0 (with this bit masked out), and an offset into symIndex otherwise.
+//
+// TODO: this type can be a byte again if we use an indirection into altsymData
+// and introduce an alt -> offset slice (the length of this will be number of
+// alternatives plus 1). This also allows getting rid of the compactTag field
+// in altSymData. In total this will save about 1K.
+type symOffset uint16
+
 type altSymData struct {
 	compactTag uint16
+	symIndex   symOffset
 	system     system
-	symIndex   byte
 }
diff --git a/internal/number/gen.go b/internal/number/gen.go
index 598c96c..48f180f 100644
--- a/internal/number/gen.go
+++ b/internal/number/gen.go
@@ -255,10 +255,10 @@
 
 	// resolveSymbolIndex gets the index from the closest matching locale,
 	// including the locale itself.
-	resolveSymbolIndex := func(langIndex int, ns system) byte {
+	resolveSymbolIndex := func(langIndex int, ns system) symOffset {
 		for {
 			if sym := symbolMap[key{langIndex, ns}]; sym != nil {
-				return byte(m[*sym])
+				return symOffset(m[*sym])
 			}
 			if langIndex == 0 {
 				return 0 // und, latn
@@ -270,7 +270,7 @@
 	// Create an index with the symbols for each locale for the latn numbering
 	// system. If this is not the default, or the only one, for a locale, we
 	// will overwrite the value later.
-	var langToDefaults [language.NumCompactTags]byte
+	var langToDefaults [language.NumCompactTags]symOffset
 	for _, l := range data.Locales() {
 		langIndex, _ := language.CompactIndex(language.MustParse(l))
 		langToDefaults[langIndex] = resolveSymbolIndex(langIndex, 0)
@@ -300,8 +300,8 @@
 	for _, l := range data.Locales() {
 		langIndex, _ := language.CompactIndex(language.MustParse(l))
 		start := len(langToAlt)
-		if start > 0x7F {
-			log.Fatal("Number of alternative assignments > 0x7F")
+		if start >= hasNonLatnMask {
+			log.Fatalf("Number of alternative assignments >= %x", hasNonLatnMask)
 		}
 		// Create the entry for the default value.
 		def := defaults[langIndex]
@@ -328,7 +328,7 @@
 			langToAlt = langToAlt[:start]
 		} else {
 			// Overwrite the entry in langToDefaults.
-			langToDefaults[langIndex] = 0x80 | byte(start)
+			langToDefaults[langIndex] = hasNonLatnMask | symOffset(start)
 		}
 	}
 	w.WriteComment(`
diff --git a/internal/number/gen_common.go b/internal/number/gen_common.go
index c4b791c..f88b838 100644
--- a/internal/number/gen_common.go
+++ b/internal/number/gen_common.go
@@ -37,8 +37,19 @@
 	NumSymbolTypes
 )
 
+const hasNonLatnMask = 0x8000
+
+// symOffset is an offset into altSymData if the bit indicated by hasNonLatnMask
+// is not 0 (with this bit masked out), and an offset into symIndex otherwise.
+//
+// TODO: this type can be a byte again if we use an indirection into altsymData
+// and introduce an alt -> offset slice (the length of this will be number of
+// alternatives plus 1). This also allows getting rid of the compactTag field
+// in altSymData. In total this will save about 1K.
+type symOffset uint16
+
 type altSymData struct {
 	compactTag uint16
+	symIndex   symOffset
 	system     system
-	symIndex   byte
 }
diff --git a/internal/number/number.go b/internal/number/number.go
index 336c0d8..2a21f07 100644
--- a/internal/number/number.go
+++ b/internal/number/number.go
@@ -17,7 +17,7 @@
 // Info holds number formatting configuration data.
 type Info struct {
 	system   systemData // numbering system information
-	symIndex byte       // index to symbols
+	symIndex symOffset  // index to symbols
 }
 
 // InfoFromLangID returns a Info for the given compact language identifier and
@@ -26,16 +26,16 @@
 func InfoFromLangID(compactIndex int, numberSystem string) Info {
 	p := langToDefaults[compactIndex]
 	// Lookup the entry for the language.
-	pSymIndex := byte(0) // Default: Latin, default symbols
+	pSymIndex := symOffset(0) // Default: Latin, default symbols
 	system, ok := systemMap[numberSystem]
 	if !ok {
 		// Take the value for the default numbering system. This is by far the
 		// most common case as an alternative numbering system is hardly used.
-		if p&0x80 == 0 { // Latn digits.
+		if p&hasNonLatnMask == 0 { // Latn digits.
 			pSymIndex = p
 		} else { // Non-Latn or multiple numbering systems.
 			// Take the first entry from the alternatives list.
-			data := langToAlt[p&^0x80]
+			data := langToAlt[p&^hasNonLatnMask]
 			pSymIndex = data.symIndex
 			system = data.system
 		}
@@ -44,21 +44,7 @@
 		ns := system
 	outerLoop:
 		for ; ; p = langToDefaults[langIndex] {
-			if langIndex == 0 {
-				// The CLDR root defines full symbol information for all
-				// numbering systems (even though mostly by means of
-				// aliases).
-				// Fall back to the default entry for Latn if there is
-				// no data for the numbering system of this language.
-				if ns == 0 {
-					break
-				}
-				// Fall back to Latin and start from the original
-				// language. See
-				// http://unicode.org/reports/tr35/#Locale_Inheritance.
-				ns = numLatn
-				langIndex = compactIndex
-			} else if p&0x80 == 0 {
+			if p&hasNonLatnMask == 0 {
 				if ns == 0 {
 					// The index directly points to the symbol data.
 					pSymIndex = p
@@ -68,8 +54,24 @@
 				langIndex = int(internal.Parent[langIndex])
 			} else {
 				// The index points to a list of symbol data indexes.
-				for _, e := range langToAlt[p&^0x80:] {
+				for _, e := range langToAlt[p&^hasNonLatnMask:] {
 					if int(e.compactTag) != langIndex {
+						if langIndex == 0 {
+							// The CLDR root defines full symbol information for
+							// all numbering systems (even though mostly by
+							// means of aliases). Fall back to the default entry
+							// for Latn if there is no data for the numbering
+							// system of this language.
+							if ns == 0 {
+								break
+							}
+							// Fall back to Latin and start from the original
+							// language. See
+							// http://unicode.org/reports/tr35/#Locale_Inheritance.
+							ns = numLatn
+							langIndex = compactIndex
+							continue outerLoop
+						}
 						// Fall back to parent.
 						langIndex = int(internal.Parent[langIndex])
 					} else if e.system == ns {
diff --git a/internal/number/tables.go b/internal/number/tables.go
index 286712b..b50fd64 100644
--- a/internal/number/tables.go
+++ b/internal/number/tables.go
@@ -329,192 +329,192 @@
 
 // langToDefaults maps a compact language index to the default numbering system
 // and default symbol set
-var langToDefaults = [754]uint8{
+var langToDefaults = [754]symOffset{
 	// Entry 0 - 3F
-	0x80, 0x06, 0x13, 0x01, 0x01, 0x01, 0x01, 0x01,
-	0x00, 0x00, 0x00, 0x00, 0x83, 0x02, 0x02, 0x02,
-	0x02, 0x03, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
-	0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x02, 0x02,
-	0x02, 0x04, 0x02, 0x04, 0x02, 0x02, 0x02, 0x03,
-	0x02, 0x00, 0x85, 0x00, 0x00, 0x00, 0x86, 0x05,
-	0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x01,
-	0x01, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00,
+	0x8000, 0x0006, 0x0013, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
+	0x0000, 0x0000, 0x0000, 0x0000, 0x8003, 0x0002, 0x0002, 0x0002,
+	0x0002, 0x0003, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002,
+	0x0002, 0x0002, 0x0003, 0x0003, 0x0003, 0x0003, 0x0002, 0x0002,
+	0x0002, 0x0004, 0x0002, 0x0004, 0x0002, 0x0002, 0x0002, 0x0003,
+	0x0002, 0x0000, 0x8005, 0x0000, 0x0000, 0x0000, 0x8006, 0x0005,
+	0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0001, 0x0001, 0x0001,
+	0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0007, 0x0007, 0x0000,
 	// Entry 40 - 7F
-	0x00, 0x00, 0x89, 0x00, 0x00, 0x8a, 0x00, 0x00,
-	0x8c, 0x01, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06,
-	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x08, 0x08,
-	0x00, 0x00, 0x00, 0x00, 0x8e, 0x09, 0x09, 0x90,
-	0x01, 0x01, 0x01, 0x93, 0x00, 0x0a, 0x0a, 0x0a,
-	0x00, 0x00, 0x0b, 0x07, 0x0b, 0x0c, 0x0b, 0x0b,
-	0x0c, 0x0b, 0x0d, 0x0d, 0x0b, 0x0b, 0x01, 0x01,
-	0x00, 0x01, 0x01, 0x95, 0x00, 0x00, 0x00, 0x0e,
+	0x0000, 0x0000, 0x8009, 0x0000, 0x0000, 0x800a, 0x0000, 0x0000,
+	0x800c, 0x0001, 0x0000, 0x0000, 0x0006, 0x0006, 0x0006, 0x0006,
+	0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0008, 0x0008,
+	0x0000, 0x0000, 0x0000, 0x0000, 0x800e, 0x0009, 0x0009, 0x8010,
+	0x0001, 0x0001, 0x0001, 0x8013, 0x0000, 0x000a, 0x000a, 0x000a,
+	0x0000, 0x0000, 0x000b, 0x0007, 0x000b, 0x000c, 0x000b, 0x000b,
+	0x000c, 0x000b, 0x000d, 0x000d, 0x000b, 0x000b, 0x0001, 0x0001,
+	0x0000, 0x0001, 0x0001, 0x8015, 0x0000, 0x0000, 0x0000, 0x000e,
 	// Entry 80 - BF
-	0x0e, 0x0e, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x06,
-	0x00, 0x00, 0x00, 0x0b, 0x10, 0x00, 0x06, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00,
-	0x00, 0x00, 0x00, 0x0b, 0x00, 0x0a, 0x00, 0x00,
-	0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x000e, 0x000e, 0x000f, 0x000f, 0x000f, 0x0000, 0x0000, 0x0006,
+	0x0000, 0x0000, 0x0000, 0x000b, 0x0010, 0x0000, 0x0006, 0x0000,
+	0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000b, 0x0000,
+	0x0000, 0x0000, 0x0000, 0x000b, 0x0000, 0x000a, 0x0000, 0x0000,
+	0x0011, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+	0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+	0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+	0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 	// Entry C0 - FF
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00,
-	0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x14, 0x14,
-	0x06, 0x00, 0x06, 0x06, 0x00, 0x00, 0x06, 0x06,
-	0x01, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x00,
+	0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006,
+	0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+	0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0012, 0x0000, 0x0000,
+	0x000f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+	0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+	0x0000, 0x0000, 0x0000, 0x0001, 0x0000, 0x0000, 0x0014, 0x0014,
+	0x0006, 0x0000, 0x0006, 0x0006, 0x0000, 0x0000, 0x0006, 0x0006,
+	0x0001, 0x0000, 0x0000, 0x0006, 0x0006, 0x0006, 0x0006, 0x0000,
 	// Entry 100 - 13F
-	0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00,
-	0x06, 0x00, 0x00, 0x06, 0x06, 0x15, 0x15, 0x06,
-	0x06, 0x01, 0x01, 0x97, 0x16, 0x16, 0x01, 0x01,
-	0x01, 0x01, 0x01, 0x17, 0x17, 0x00, 0x00, 0x18,
-	0x18, 0x18, 0x9a, 0x01, 0x01, 0x01, 0x01, 0x01,
-	0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-	0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-	0x01, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01,
+	0x0000, 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x0000,
+	0x0006, 0x0000, 0x0000, 0x0006, 0x0006, 0x0015, 0x0015, 0x0006,
+	0x0006, 0x0001, 0x0001, 0x8017, 0x0016, 0x0016, 0x0001, 0x0001,
+	0x0001, 0x0001, 0x0001, 0x0017, 0x0017, 0x0000, 0x0000, 0x0018,
+	0x0018, 0x0018, 0x801a, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
+	0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
+	0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
+	0x0001, 0x0006, 0x0006, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
 	// Entry 140 - 17F
-	0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-	0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-	0x01, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x9d,
-	0x00, 0x06, 0x06, 0x19, 0x19, 0x19, 0x19, 0xa0,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x1a, 0x1a, 0x00, 0x00,
-	0x06, 0x06, 0x06, 0x0b, 0x0b, 0x01, 0x01, 0x1b,
-	0x1b, 0x0a, 0x0a, 0xa2, 0x00, 0x00, 0x00, 0x06,
+	0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
+	0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
+	0x0001, 0x0006, 0x0006, 0x0006, 0x0006, 0x0000, 0x0000, 0x801d,
+	0x0000, 0x0006, 0x0006, 0x0019, 0x0019, 0x0019, 0x0019, 0x8020,
+	0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+	0x0000, 0x0000, 0x0000, 0x0000, 0x001a, 0x001a, 0x0000, 0x0000,
+	0x0006, 0x0006, 0x0006, 0x000b, 0x000b, 0x0001, 0x0001, 0x001b,
+	0x001b, 0x000a, 0x000a, 0x8022, 0x0000, 0x0000, 0x0000, 0x0006,
 	// Entry 180 - 1BF
-	0x06, 0x06, 0x1c, 0x06, 0x06, 0x06, 0x00, 0x00,
-	0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x1d,
-	0x1d, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x01, 0x01, 0x0d, 0x0d, 0x00, 0x00, 0x1e,
-	0x1e, 0x06, 0x06, 0x1f, 0x1f, 0x00, 0x00, 0x06,
-	0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0xa5, 0x1a, 0x00, 0x00, 0x01, 0x01, 0x20, 0x20,
-	0x00, 0x00, 0x00, 0x21, 0x21, 0x00, 0x00, 0x06,
+	0x0006, 0x0006, 0x001c, 0x0006, 0x0006, 0x0006, 0x0000, 0x0000,
+	0x0000, 0x0000, 0x0006, 0x0006, 0x0000, 0x0000, 0x0000, 0x001d,
+	0x001d, 0x0001, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+	0x0000, 0x0001, 0x0001, 0x000d, 0x000d, 0x0000, 0x0000, 0x001e,
+	0x001e, 0x0006, 0x0006, 0x001f, 0x001f, 0x0000, 0x0000, 0x0006,
+	0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+	0x8025, 0x001a, 0x0000, 0x0000, 0x0001, 0x0001, 0x0020, 0x0020,
+	0x0000, 0x0000, 0x0000, 0x0021, 0x0021, 0x0000, 0x0000, 0x0006,
 	// Entry 1C0 - 1FF
-	0x06, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x06,
-	0x06, 0x06, 0x22, 0x22, 0xa7, 0x00, 0x00, 0x15,
-	0x15, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x23,
-	0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x0d,
-	0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x06, 0x06,
-	0x00, 0x00, 0x00, 0x00, 0xa9, 0x00, 0x00, 0x06,
-	0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0xaa, 0x24,
-	0xac, 0x00, 0x00, 0x00, 0x00, 0xad, 0x14, 0x14,
+	0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x0006, 0x0006,
+	0x0006, 0x0006, 0x0022, 0x0022, 0x8027, 0x0000, 0x0000, 0x0015,
+	0x0015, 0x0006, 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0023,
+	0x0023, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000d, 0x000d,
+	0x0000, 0x0000, 0x0006, 0x0006, 0x0000, 0x0000, 0x0006, 0x0006,
+	0x0000, 0x0000, 0x0000, 0x0000, 0x8029, 0x0000, 0x0000, 0x0006,
+	0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x0006, 0x802a, 0x0024,
+	0x802c, 0x0000, 0x0000, 0x0000, 0x0000, 0x802d, 0x0014, 0x0014,
 	// Entry 200 - 23F
-	0x00, 0x00, 0x06, 0x06, 0x06, 0xb0, 0x00, 0x00,
-	0xb1, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
-	0x01, 0x01, 0x14, 0x14, 0x06, 0x06, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x25, 0x25, 0x25, 0xb4,
-	0xb6, 0x1a, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
-	0x01, 0xb8, 0x26, 0x06, 0x01, 0x06, 0x01, 0x01,
-	0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+	0x0000, 0x0000, 0x0006, 0x0006, 0x0006, 0x8030, 0x0000, 0x0000,
+	0x8031, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006,
+	0x0001, 0x0001, 0x0014, 0x0014, 0x0006, 0x0006, 0x0000, 0x0000,
+	0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+	0x0000, 0x0000, 0x0000, 0x0000, 0x0025, 0x0025, 0x0025, 0x8034,
+	0x8036, 0x001a, 0x0000, 0x0000, 0x0000, 0x0001, 0x0001, 0x0001,
+	0x0001, 0x8038, 0x0026, 0x0006, 0x0001, 0x0006, 0x0001, 0x0001,
+	0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
 	// Entry 240 - 27F
-	0x00, 0x06, 0x00, 0x00, 0x19, 0x19, 0x06, 0x06,
-	0x06, 0x06, 0x06, 0x00, 0x00, 0x27, 0x27, 0x27,
-	0x27, 0x27, 0x27, 0x27, 0x06, 0x06, 0x00, 0x00,
-	0x28, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29,
-	0x29, 0x29, 0x29, 0x06, 0x06, 0x0d, 0x0d, 0x06,
-	0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x2a, 0x2a,
-	0x2b, 0x2b, 0x2c, 0x2c, 0x00, 0x00, 0x00, 0x2d,
-	0x2d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x0000, 0x0006, 0x0000, 0x0000, 0x0019, 0x0019, 0x0006, 0x0006,
+	0x0006, 0x0006, 0x0006, 0x0000, 0x0000, 0x0027, 0x0027, 0x0027,
+	0x0027, 0x0027, 0x0027, 0x0027, 0x0006, 0x0006, 0x0000, 0x0000,
+	0x0028, 0x0028, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0029,
+	0x0029, 0x0029, 0x0029, 0x0006, 0x0006, 0x000d, 0x000d, 0x0006,
+	0x0006, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x002a, 0x002a,
+	0x002b, 0x002b, 0x002c, 0x002c, 0x0000, 0x0000, 0x0000, 0x002d,
+	0x002d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
 	// Entry 280 - 2BF
-	0x00, 0x01, 0x01, 0x01, 0x01, 0x06, 0x06, 0x06,
-	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
-	0x00, 0x00, 0x00, 0xba, 0x20, 0x20, 0x20, 0x00,
-	0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x2e, 0x2e, 0x00,
-	0x2f, 0x2f, 0x06, 0x06, 0x06, 0x00, 0x0d, 0x0d,
-	0x01, 0x01, 0x00, 0x00, 0x30, 0x30, 0xbd, 0xbf,
+	0x0000, 0x0001, 0x0001, 0x0001, 0x0001, 0x0006, 0x0006, 0x0006,
+	0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006,
+	0x0000, 0x0000, 0x0000, 0x803a, 0x0020, 0x0020, 0x0020, 0x0000,
+	0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+	0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+	0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x002e, 0x002e, 0x0000,
+	0x002f, 0x002f, 0x0006, 0x0006, 0x0006, 0x0000, 0x000d, 0x000d,
+	0x0001, 0x0001, 0x0000, 0x0000, 0x0030, 0x0030, 0x803d, 0x803f,
 	// Entry 2C0 - 2FF
-	0x1a, 0xc0, 0xc2, 0x26, 0xc4, 0x32, 0x31, 0x31,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x33, 0x00,
-	0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x34, 0x34, 0x01, 0x01, 0xc6, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x34, 0x34, 0x34, 0x34,
-	0x00, 0x00,
-} // Size: 754 bytes
+	0x001a, 0x8040, 0x8042, 0x0026, 0x8044, 0x0032, 0x0031, 0x0031,
+	0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0006, 0x0006,
+	0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0033, 0x0033, 0x0000,
+	0x0000, 0x0000, 0x0000, 0x0001, 0x0001, 0x0000, 0x0000, 0x0000,
+	0x0000, 0x0000, 0x0034, 0x0034, 0x0001, 0x0001, 0x8046, 0x0000,
+	0x0000, 0x0000, 0x0000, 0x0000, 0x0034, 0x0034, 0x0034, 0x0034,
+	0x0000, 0x0000,
+} // Size: 1508 bytes
 
 // langToAlt is a list of numbering system and symbol set pairs, sorted and
 // marked by compact language index.
 var langToAlt = []altSymData{ // 73 elements
-	1:  {compactTag: 0x0, system: 0x3, symIndex: 0x35},
-	2:  {compactTag: 0x0, system: 0x4, symIndex: 0x3b},
-	3:  {compactTag: 0xc, system: 0x3, symIndex: 0x36},
-	4:  {compactTag: 0xc, system: 0x0, symIndex: 0x2},
-	5:  {compactTag: 0x2a, system: 0x6, symIndex: 0x0},
-	6:  {compactTag: 0x2e, system: 0x0, symIndex: 0x5},
-	7:  {compactTag: 0x2e, system: 0x3, symIndex: 0x37},
-	8:  {compactTag: 0x2e, system: 0x4, symIndex: 0x3b},
-	9:  {compactTag: 0x42, system: 0x6, symIndex: 0x0},
-	10: {compactTag: 0x45, system: 0x0, symIndex: 0x0},
-	11: {compactTag: 0x45, system: 0x36, symIndex: 0x45},
-	12: {compactTag: 0x48, system: 0x0, symIndex: 0x1},
-	13: {compactTag: 0x48, system: 0x3, symIndex: 0x35},
-	14: {compactTag: 0x5c, system: 0x3, symIndex: 0x37},
-	15: {compactTag: 0x5c, system: 0x0, symIndex: 0x9},
-	16: {compactTag: 0x5f, system: 0x0, symIndex: 0x1},
-	17: {compactTag: 0x5f, system: 0x3, symIndex: 0x35},
-	18: {compactTag: 0x5f, system: 0x4, symIndex: 0x3b},
-	19: {compactTag: 0x63, system: 0x0, symIndex: 0x0},
-	20: {compactTag: 0x63, system: 0x3, symIndex: 0x35},
-	21: {compactTag: 0x7b, system: 0x36, symIndex: 0x46},
-	22: {compactTag: 0x7b, system: 0x0, symIndex: 0x0},
-	23: {compactTag: 0x113, system: 0x4, symIndex: 0x3c},
-	24: {compactTag: 0x113, system: 0x0, symIndex: 0x16},
-	25: {compactTag: 0x113, system: 0x3, symIndex: 0x37},
-	26: {compactTag: 0x122, system: 0x0, symIndex: 0x1},
-	27: {compactTag: 0x122, system: 0x3, symIndex: 0x38},
-	28: {compactTag: 0x122, system: 0x4, symIndex: 0x3d},
-	29: {compactTag: 0x157, system: 0x0, symIndex: 0x0},
-	30: {compactTag: 0x157, system: 0x3, symIndex: 0x37},
-	31: {compactTag: 0x157, system: 0x4, symIndex: 0x3b},
-	32: {compactTag: 0x15f, system: 0x0, symIndex: 0x0},
-	33: {compactTag: 0x15f, system: 0x3, symIndex: 0x35},
-	34: {compactTag: 0x17b, system: 0x0, symIndex: 0x0},
-	35: {compactTag: 0x17b, system: 0x3, symIndex: 0x35},
-	36: {compactTag: 0x17b, system: 0x4, symIndex: 0x3b},
-	37: {compactTag: 0x1b0, system: 0x4, symIndex: 0x3b},
-	38: {compactTag: 0x1b0, system: 0x0, symIndex: 0x1a},
-	39: {compactTag: 0x1cc, system: 0x4, symIndex: 0x3b},
-	40: {compactTag: 0x1cc, system: 0x0, symIndex: 0x0},
-	41: {compactTag: 0x1ec, system: 0xb, symIndex: 0x0},
-	42: {compactTag: 0x1f6, system: 0x23, symIndex: 0x44},
-	43: {compactTag: 0x1f6, system: 0x0, symIndex: 0x24},
-	44: {compactTag: 0x1f8, system: 0x4, symIndex: 0x3b},
-	45: {compactTag: 0x1fd, system: 0x0, symIndex: 0x14},
-	46: {compactTag: 0x1fd, system: 0x3, symIndex: 0x39},
-	47: {compactTag: 0x1fd, system: 0x4, symIndex: 0x3e},
-	48: {compactTag: 0x205, system: 0xb, symIndex: 0x0},
-	49: {compactTag: 0x208, system: 0x0, symIndex: 0x6},
-	50: {compactTag: 0x208, system: 0x3, symIndex: 0x35},
-	51: {compactTag: 0x208, system: 0x4, symIndex: 0x3b},
-	52: {compactTag: 0x227, system: 0x0, symIndex: 0x0},
-	53: {compactTag: 0x227, system: 0x4, symIndex: 0x3f},
-	54: {compactTag: 0x228, system: 0x4, symIndex: 0x3b},
-	55: {compactTag: 0x228, system: 0x0, symIndex: 0x1a},
-	56: {compactTag: 0x231, system: 0x4, symIndex: 0x3b},
-	57: {compactTag: 0x231, system: 0x0, symIndex: 0x26},
-	58: {compactTag: 0x293, system: 0x0, symIndex: 0x20},
-	59: {compactTag: 0x293, system: 0x3, symIndex: 0x3a},
-	60: {compactTag: 0x293, system: 0x4, symIndex: 0x40},
-	61: {compactTag: 0x2be, system: 0x0, symIndex: 0x1a},
-	62: {compactTag: 0x2be, system: 0x4, symIndex: 0x41},
-	63: {compactTag: 0x2bf, system: 0x4, symIndex: 0x41},
-	64: {compactTag: 0x2c1, system: 0x0, symIndex: 0x31},
-	65: {compactTag: 0x2c1, system: 0x4, symIndex: 0x42},
-	66: {compactTag: 0x2c2, system: 0x4, symIndex: 0x3b},
-	67: {compactTag: 0x2c2, system: 0x0, symIndex: 0x26},
-	68: {compactTag: 0x2c4, system: 0x0, symIndex: 0x32},
-	69: {compactTag: 0x2c4, system: 0x4, symIndex: 0x43},
-	70: {compactTag: 0x2e6, system: 0x0, symIndex: 0x0},
-	71: {compactTag: 0x2e6, system: 0x3, symIndex: 0x35},
-	72: {compactTag: 0x2e6, system: 0x4, symIndex: 0x3b},
-} // Size: 316 bytes
+	1:  {compactTag: 0x0, symIndex: 0x35, system: 0x3},
+	2:  {compactTag: 0x0, symIndex: 0x3b, system: 0x4},
+	3:  {compactTag: 0xc, symIndex: 0x36, system: 0x3},
+	4:  {compactTag: 0xc, symIndex: 0x2, system: 0x0},
+	5:  {compactTag: 0x2a, symIndex: 0x0, system: 0x6},
+	6:  {compactTag: 0x2e, symIndex: 0x5, system: 0x0},
+	7:  {compactTag: 0x2e, symIndex: 0x37, system: 0x3},
+	8:  {compactTag: 0x2e, symIndex: 0x3b, system: 0x4},
+	9:  {compactTag: 0x42, symIndex: 0x0, system: 0x6},
+	10: {compactTag: 0x45, symIndex: 0x0, system: 0x0},
+	11: {compactTag: 0x45, symIndex: 0x45, system: 0x36},
+	12: {compactTag: 0x48, symIndex: 0x1, system: 0x0},
+	13: {compactTag: 0x48, symIndex: 0x35, system: 0x3},
+	14: {compactTag: 0x5c, symIndex: 0x37, system: 0x3},
+	15: {compactTag: 0x5c, symIndex: 0x9, system: 0x0},
+	16: {compactTag: 0x5f, symIndex: 0x1, system: 0x0},
+	17: {compactTag: 0x5f, symIndex: 0x35, system: 0x3},
+	18: {compactTag: 0x5f, symIndex: 0x3b, system: 0x4},
+	19: {compactTag: 0x63, symIndex: 0x0, system: 0x0},
+	20: {compactTag: 0x63, symIndex: 0x35, system: 0x3},
+	21: {compactTag: 0x7b, symIndex: 0x46, system: 0x36},
+	22: {compactTag: 0x7b, symIndex: 0x0, system: 0x0},
+	23: {compactTag: 0x113, symIndex: 0x3c, system: 0x4},
+	24: {compactTag: 0x113, symIndex: 0x16, system: 0x0},
+	25: {compactTag: 0x113, symIndex: 0x37, system: 0x3},
+	26: {compactTag: 0x122, symIndex: 0x1, system: 0x0},
+	27: {compactTag: 0x122, symIndex: 0x38, system: 0x3},
+	28: {compactTag: 0x122, symIndex: 0x3d, system: 0x4},
+	29: {compactTag: 0x157, symIndex: 0x0, system: 0x0},
+	30: {compactTag: 0x157, symIndex: 0x37, system: 0x3},
+	31: {compactTag: 0x157, symIndex: 0x3b, system: 0x4},
+	32: {compactTag: 0x15f, symIndex: 0x0, system: 0x0},
+	33: {compactTag: 0x15f, symIndex: 0x35, system: 0x3},
+	34: {compactTag: 0x17b, symIndex: 0x0, system: 0x0},
+	35: {compactTag: 0x17b, symIndex: 0x35, system: 0x3},
+	36: {compactTag: 0x17b, symIndex: 0x3b, system: 0x4},
+	37: {compactTag: 0x1b0, symIndex: 0x3b, system: 0x4},
+	38: {compactTag: 0x1b0, symIndex: 0x1a, system: 0x0},
+	39: {compactTag: 0x1cc, symIndex: 0x3b, system: 0x4},
+	40: {compactTag: 0x1cc, symIndex: 0x0, system: 0x0},
+	41: {compactTag: 0x1ec, symIndex: 0x0, system: 0xb},
+	42: {compactTag: 0x1f6, symIndex: 0x44, system: 0x23},
+	43: {compactTag: 0x1f6, symIndex: 0x24, system: 0x0},
+	44: {compactTag: 0x1f8, symIndex: 0x3b, system: 0x4},
+	45: {compactTag: 0x1fd, symIndex: 0x14, system: 0x0},
+	46: {compactTag: 0x1fd, symIndex: 0x39, system: 0x3},
+	47: {compactTag: 0x1fd, symIndex: 0x3e, system: 0x4},
+	48: {compactTag: 0x205, symIndex: 0x0, system: 0xb},
+	49: {compactTag: 0x208, symIndex: 0x6, system: 0x0},
+	50: {compactTag: 0x208, symIndex: 0x35, system: 0x3},
+	51: {compactTag: 0x208, symIndex: 0x3b, system: 0x4},
+	52: {compactTag: 0x227, symIndex: 0x0, system: 0x0},
+	53: {compactTag: 0x227, symIndex: 0x3f, system: 0x4},
+	54: {compactTag: 0x228, symIndex: 0x3b, system: 0x4},
+	55: {compactTag: 0x228, symIndex: 0x1a, system: 0x0},
+	56: {compactTag: 0x231, symIndex: 0x3b, system: 0x4},
+	57: {compactTag: 0x231, symIndex: 0x26, system: 0x0},
+	58: {compactTag: 0x293, symIndex: 0x20, system: 0x0},
+	59: {compactTag: 0x293, symIndex: 0x3a, system: 0x3},
+	60: {compactTag: 0x293, symIndex: 0x40, system: 0x4},
+	61: {compactTag: 0x2be, symIndex: 0x1a, system: 0x0},
+	62: {compactTag: 0x2be, symIndex: 0x41, system: 0x4},
+	63: {compactTag: 0x2bf, symIndex: 0x41, system: 0x4},
+	64: {compactTag: 0x2c1, symIndex: 0x31, system: 0x0},
+	65: {compactTag: 0x2c1, symIndex: 0x42, system: 0x4},
+	66: {compactTag: 0x2c2, symIndex: 0x3b, system: 0x4},
+	67: {compactTag: 0x2c2, symIndex: 0x26, system: 0x0},
+	68: {compactTag: 0x2c4, symIndex: 0x32, system: 0x0},
+	69: {compactTag: 0x2c4, symIndex: 0x43, system: 0x4},
+	70: {compactTag: 0x2e6, symIndex: 0x0, system: 0x0},
+	71: {compactTag: 0x2e6, symIndex: 0x35, system: 0x3},
+	72: {compactTag: 0x2e6, symIndex: 0x3b, system: 0x4},
+} // Size: 462 bytes
 
 var tagToDecimal = []uint8{ // 754 elements
 	// Entry 0 - 3F
@@ -1151,4 +1151,4 @@
 			0x0},
 		Flags: 0x0}}
 
-// Total table size 7101 bytes (6KiB); checksum: 5190D0B3
+// Total table size 8001 bytes (7KiB); checksum: F318E707