feature/plural: move and regenerate remaining code
Move parts of code and do some renaming.
Manually change go generate directives and added new package to
x/text/gen.go
Regenerate tables for original and destination package.
Change-Id: I728dde1c0f7dcc289372fb815ecc4ed85d182cc2
Reviewed-on: https://go-review.googlesource.com/39132
Run-TryBot: Marcel van Lohuizen <mpvl@golang.org>
Reviewed-by: Nigel Tao <nigeltao@golang.org>
diff --git a/feature/plural/common.go b/feature/plural/common.go
new file mode 100644
index 0000000..00432d2
--- /dev/null
+++ b/feature/plural/common.go
@@ -0,0 +1,53 @@
+// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
+
+package plural
+
+import "golang.org/x/text/internal/format/plural"
+
+var countMap = map[string]plural.Form{
+ "other": plural.Other,
+ "zero": plural.Zero,
+ "one": plural.One,
+ "two": plural.Two,
+ "few": plural.Few,
+ "many": plural.Many,
+}
+
+type pluralCheck struct {
+ // category:
+ // 3..7: opID
+ // 0..2: category
+ cat byte
+ setID byte
+}
+
+// opID identifies the type of operand in the plural rule, being i, n or f.
+// (v, w, and t are treated as filters in our implementation.)
+type opID byte
+
+const (
+ opMod opID = 0x1 // is '%' used?
+ opNotEqual opID = 0x2 // using "!=" to compare
+ opI opID = 0 << 2 // integers after taking the absolute value
+ opN opID = 1 << 2 // full number (must be integer)
+ opF opID = 2 << 2 // fraction
+ opV opID = 3 << 2 // number of visible digits
+ opW opID = 4 << 2 // number of visible digits without trailing zeros
+ opBretonM opID = 5 << 2 // hard-wired rule for Breton
+ opItalian800 opID = 6 << 2 // hard-wired rule for Italian
+ opAzerbaijan00s opID = 7 << 2 // hard-wired rule for Azerbaijan
+)
+const (
+ // Use this plural form to indicate the next rule needs to match as well.
+ // The last condition in the list will have the correct plural form.
+ andNext = 0x7
+ formMask = 0x7
+
+ opShift = 3
+
+ // numN indicates the maximum integer, or maximum mod value, for which we
+ // have inclusion masks.
+ numN = 100
+ // The common denominator of the modulo that is taken.
+ maxMod = 100
+)
diff --git a/internal/number/data_test.go b/feature/plural/data_test.go
similarity index 98%
rename from internal/number/data_test.go
rename to feature/plural/data_test.go
index 350be59..7bbf8c5 100644
--- a/internal/number/data_test.go
+++ b/feature/plural/data_test.go
@@ -1,6 +1,6 @@
-// This file was generated by go generate; DO NOT EDIT
+// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
-package number
+package plural
import "golang.org/x/text/internal/format/plural"
@@ -191,4 +191,4 @@
114: {locales: "cy", form: 0x0, integer: []string{"4", "5", "7~20", "100", "1000", "10000", "100000", "1000000"}, decimal: []string{"0.1~0.9", "1.1~1.7", "10.0", "100.0", "1000.0", "10000.0", "100000.0", "1000000.0"}},
} // Size: 8304 bytes
-// Total table size 12576 bytes (12KiB); checksum: 35F73741
+// Total table size 12576 bytes (12KiB); checksum: 166DAB75
diff --git a/feature/plural/gen.go b/feature/plural/gen.go
index 05a6722..e93967b 100644
--- a/feature/plural/gen.go
+++ b/feature/plural/gen.go
@@ -57,6 +57,7 @@
import (
"bufio"
"bytes"
+ "flag"
"fmt"
"log"
"strconv"
@@ -69,6 +70,50 @@
"golang.org/x/text/unicode/cldr"
)
+var (
+ test = flag.Bool("test", false,
+ "test existing tables; can be used to compare web data with package data.")
+ outputFile = flag.String("output", "tables.go", "output file")
+ outputTestFile = flag.String("testoutput", "data_test.go", "output file")
+
+ draft = flag.String("draft",
+ "contributed",
+ `Minimal draft requirements (approved, contributed, provisional, unconfirmed).`)
+)
+
+func main() {
+ gen.Init()
+
+ const pkg = "plural"
+
+ gen.Repackage("gen_common.go", "common.go", pkg)
+ // Read the CLDR zip file.
+ r := gen.OpenCLDRCoreZip()
+ defer r.Close()
+
+ d := &cldr.Decoder{}
+ d.SetDirFilter("supplemental", "main")
+ d.SetSectionFilter("numbers", "plurals")
+ data, err := d.DecodeZip(r)
+ if err != nil {
+ log.Fatalf("DecodeZip: %v", err)
+ }
+
+ w := gen.NewCodeWriter()
+ defer w.WriteGoFile(*outputFile, pkg)
+
+ gen.WriteCLDRVersion(w)
+
+ genPlurals(w, data)
+
+ w = gen.NewCodeWriter()
+ defer w.WriteGoFile(*outputTestFile, pkg)
+
+ fmt.Fprintln(w, `import "golang.org/x/text/internal/format/plural"`)
+
+ genPluralsTests(w, data)
+}
+
type pluralTest struct {
locales string // space-separated list of locales for this test
form plural.Form
diff --git a/feature/plural/gen_common.go b/feature/plural/gen_common.go
new file mode 100644
index 0000000..c6f2168
--- /dev/null
+++ b/feature/plural/gen_common.go
@@ -0,0 +1,57 @@
+// Copyright 2016 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build ignore
+
+package main
+
+import "golang.org/x/text/internal/format/plural"
+
+var countMap = map[string]plural.Form{
+ "other": plural.Other,
+ "zero": plural.Zero,
+ "one": plural.One,
+ "two": plural.Two,
+ "few": plural.Few,
+ "many": plural.Many,
+}
+
+type pluralCheck struct {
+ // category:
+ // 3..7: opID
+ // 0..2: category
+ cat byte
+ setID byte
+}
+
+// opID identifies the type of operand in the plural rule, being i, n or f.
+// (v, w, and t are treated as filters in our implementation.)
+type opID byte
+
+const (
+ opMod opID = 0x1 // is '%' used?
+ opNotEqual opID = 0x2 // using "!=" to compare
+ opI opID = 0 << 2 // integers after taking the absolute value
+ opN opID = 1 << 2 // full number (must be integer)
+ opF opID = 2 << 2 // fraction
+ opV opID = 3 << 2 // number of visible digits
+ opW opID = 4 << 2 // number of visible digits without trailing zeros
+ opBretonM opID = 5 << 2 // hard-wired rule for Breton
+ opItalian800 opID = 6 << 2 // hard-wired rule for Italian
+ opAzerbaijan00s opID = 7 << 2 // hard-wired rule for Azerbaijan
+)
+const (
+ // Use this plural form to indicate the next rule needs to match as well.
+ // The last condition in the list will have the correct plural form.
+ andNext = 0x7
+ formMask = 0x7
+
+ opShift = 3
+
+ // numN indicates the maximum integer, or maximum mod value, for which we
+ // have inclusion masks.
+ numN = 100
+ // The common denominator of the modulo that is taken.
+ maxMod = 100
+)
diff --git a/feature/plural/plural.go b/feature/plural/plural.go
index 5714e11..48a50c4 100644
--- a/feature/plural/plural.go
+++ b/feature/plural/plural.go
@@ -2,11 +2,21 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-package number
+//go:generate go run gen.go gen_common.go
-import "golang.org/x/text/internal/format/plural"
+// Package plural provides utilities for handling linguistic plurals in text.
+package plural
-type pluralRules struct {
+import (
+ "golang.org/x/text/internal/format/plural"
+ "golang.org/x/text/language"
+)
+
+// Rules defines the plural rules for all languages for a certain plural type.
+//
+//
+// This package is UNDER CONSTRUCTION and its API may change.
+type Rules struct {
rules []pluralCheck
index []byte
langToIndex []byte
@@ -14,13 +24,21 @@
}
var (
- ordinalData = pluralRules{
+ // Cardinal defines the plural rules for numbers indicating quantities.
+ Cardinal *Rules = cardinal
+
+ // Ordinal defines the plural rules for numbers indicating position
+ // (first, second, etc.).
+ Ordinal *Rules = ordinal
+
+ ordinal = &Rules{
ordinalRules,
ordinalIndex,
ordinalLangToIndex,
ordinalInclusionMasks[:],
}
- cardinalData = pluralRules{
+
+ cardinal = &Rules{
cardinalRules,
cardinalIndex,
cardinalLangToIndex,
@@ -28,9 +46,86 @@
}
)
-// See gen_plural.go for an explanation of the algorithm.
+// getIntApprox converts the digits in slice digits[start:end] to an integer
+// according to the following rules:
+// - Let i be asInt(digits[start:end]), where out-of-range digits are assumed
+// to be zero.
+// - Result n is big if i / 10^nMod > 1.
+// - Otherwise the result is i % 10^nMod.
+//
+// For example, if digits is {1, 2, 3} and start:end is 0:5, then the result
+// for various values of nMod is:
+// - when nMod == 2, n == big
+// - when nMod == 3, n == big
+// - when nMod == 4, n == big
+// - when nMod == 5, n == 12300
+// - when nMod == 6, n == 12300
+// - when nMod == 7, n == 12300
+func getIntApprox(digits []byte, start, end, nMod, big int) (n int) {
+ // Leading 0 digits just result in 0.
+ p := start
+ if p < 0 {
+ p = 0
+ }
+ // Range only over the part for which we have digits.
+ mid := end
+ if mid >= len(digits) {
+ mid = len(digits)
+ }
+ // Check digits more significant that nMod.
+ if q := end - nMod; q > 0 {
+ if q > mid {
+ q = mid
+ }
+ for ; p < q; p++ {
+ if digits[p] != 0 {
+ return big
+ }
+ }
+ }
+ for ; p < mid; p++ {
+ n = 10*n + int(digits[p])
+ }
+ // Multiply for trailing zeros.
+ for ; p < end; p++ {
+ n *= 10
+ }
+ return n
+}
-func matchPlural(p *pluralRules, index int, n, f, v int) plural.Form {
+// MatchDigits computes the plural form for the given language and the given
+// decimal floating point digits. The digits are stored in big-endian order and
+// are of value byte(0) - byte(9). The floating point position is indicated by
+// exp and the number of visible decimals is scale. All leading and trailing
+// zeros may be omitted from digits.
+//
+// The following table contains examples of possible arguments to represent
+// the given numbers.
+// decimal digits exp scale
+// 123 []byte{1, 2, 3} 3 0
+// 123.4 []byte{1, 2, 3, 4} 3 1
+// 123.40 []byte{1, 2, 3, 4} 3 2
+// 100000 []byte{1} 6......0
+// 100000.00 []byte{1} 6......3
+func (p *Rules) MatchDigits(t language.Tag, digits []byte, exp, scale int) plural.Form {
+ index, _ := language.CompactIndex(t)
+ endN := len(digits) + exp
+
+ // Differentiate up to including mod 1000000 for the integer part.
+ n := getIntApprox(digits, 0, endN, 6, 1000000)
+
+ // Differentiate up to including mod 100 for the fractional part.
+ f := getIntApprox(digits, endN, endN+scale, 2, 100)
+
+ return matchPlural(p, index, n, f, scale)
+}
+
+func (p *Rules) matchComponents(t language.Tag, n, f, scale int) plural.Form {
+ index, _ := language.CompactIndex(t)
+ return matchPlural(p, index, n, f, scale)
+}
+
+func matchPlural(p *Rules, index int, n, f, v int) plural.Form {
nMask := p.inclusionMasks[n%maxMod]
// Compute the fMask inline in the rules below, as it is relatively rare.
// fMask := p.inclusionMasks[f%maxMod]
diff --git a/feature/plural/plural_test.go b/feature/plural/plural_test.go
index 3383d8c..4b4779b 100644
--- a/feature/plural/plural_test.go
+++ b/feature/plural/plural_test.go
@@ -2,9 +2,10 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-package number
+package plural
import (
+ "fmt"
"strconv"
"strings"
"testing"
@@ -12,18 +13,70 @@
"golang.org/x/text/language"
)
+func TestGetIntApprox(t *testing.T) {
+ const big = 1234567890
+ testCases := []struct {
+ digits string
+ start int
+ end int
+ nMod int
+ want int
+ }{
+ {"123", 0, 1, 1, 1},
+ {"123", 0, 2, 1, big},
+ {"123", 0, 2, 2, 12},
+ {"123", 3, 4, 2, 0},
+ {"12345", 3, 4, 2, 4},
+
+ {"123", 0, 5, 2, big},
+ {"123", 0, 5, 3, big},
+ {"123", 0, 5, 4, big},
+ {"123", 0, 5, 5, 12300},
+ {"123", 0, 5, 6, 12300},
+ {"123", 0, 5, 7, 12300},
+
+ // Translation of examples in MatchDigits.
+ // Integer parts
+ {"123", 0, 3, 3, 123}, // 123
+ {"1234", 0, 3, 3, 123}, // 123.4
+ {"1", 0, 6, 8, 100000}, // 100000
+
+ // Fraction parts
+ {"123", 3, 3, 3, 0}, // 123
+ {"1234", 3, 4, 3, 4}, // 123.4
+ {"1234", 3, 5, 3, 40}, // 123.40
+ {"1", 6, 8, 8, 0}, // 100000.00
+ }
+ for _, tc := range testCases {
+ t.Run(fmt.Sprintf("%s:%d:%d/%d", tc.digits, tc.start, tc.end, tc.nMod), func(t *testing.T) {
+ got := getIntApprox(mkDigits(tc.digits), tc.start, tc.end, tc.nMod, big)
+ if got != tc.want {
+ t.Errorf("got %d; want %d", got, tc.want)
+ }
+ })
+ }
+}
+
+func mkDigits(s string) []byte {
+ b := []byte(s)
+ for i := range b {
+ b[i] -= '0'
+ }
+ return b
+}
+
func TestOrdinal(t *testing.T) {
- testPlurals(t, &ordinalData, ordinalTests)
+ testPlurals(t, Ordinal, ordinalTests)
}
func TestCardinal(t *testing.T) {
- testPlurals(t, &cardinalData, cardinalTests)
+ testPlurals(t, Cardinal, cardinalTests)
}
-func testPlurals(t *testing.T, p *pluralRules, testCases []pluralTest) {
+func testPlurals(t *testing.T, p *Rules, testCases []pluralTest) {
for _, tc := range testCases {
for _, loc := range strings.Split(tc.locales, " ") {
- langIndex, _ := language.CompactIndex(language.MustParse(loc))
+ tag := language.MustParse(loc)
// Test integers
for _, s := range tc.integer {
a := strings.Split(s, "~")
@@ -33,9 +86,18 @@
to = parseUint(t, a[1])
}
for n := from; n <= to; n++ {
- if f := matchPlural(p, langIndex, n, 0, 0); f != tc.form {
- t.Errorf("%s:int(%d) = %v; want %v", loc, n, f, tc.form)
- }
+ t.Run(fmt.Sprintf("%s/int(%d)", loc, n), func(t *testing.T) {
+ if f := p.matchComponents(tag, n, 0, 0); f != tc.form {
+ t.Errorf("matchComponents: got %v; want %v", f, tc.form)
+ }
+ digits := []byte(fmt.Sprint(n))
+ for i := range digits {
+ digits[i] -= '0'
+ }
+ if f := p.MatchDigits(tag, digits, 0, 0); f != tc.form {
+ t.Errorf("MatchDigits: got %v; want %v", f, tc.form)
+ }
+ })
}
}
// Test decimals
@@ -54,9 +116,20 @@
m *= 10
}
for n := from; n <= to; n++ {
- if f := matchPlural(p, langIndex, n/m, n%m, scale); f != tc.form {
- t.Errorf("%[1]s:dec(%[2]d.%0[4]*[3]d) = %[5]v; want %[6]v", loc, n/m, n%m, scale, f, tc.form)
- }
+ num := fmt.Sprintf("%[1]d.%0[3]*[2]d", n/m, n%m, scale)
+ name := fmt.Sprintf("%s:dec(%s)", loc, num)
+ t.Run(name, func(t *testing.T) {
+ if f := p.matchComponents(tag, n/m, n%m, scale); f != tc.form {
+ t.Errorf("matchComponents: got %v; want %v", f, tc.form)
+ }
+ digits := []byte(strings.Replace(num, ".", "", 1))
+ for i := range digits {
+ digits[i] -= '0'
+ }
+ if f := p.MatchDigits(tag, digits, -scale, scale); f != tc.form {
+ t.Errorf("MatchDigits: got %v; want %v", f, tc.form)
+ }
+ })
}
}
}
@@ -82,7 +155,7 @@
}
func BenchmarkPluralSimpleCases(b *testing.B) {
- p := &cardinalData
+ p := Cardinal
en, _ := language.CompactIndex(language.English)
zh, _ := language.CompactIndex(language.Chinese)
for i := 0; i < b.N; i++ {
@@ -96,7 +169,7 @@
}
func BenchmarkPluralComplexCases(b *testing.B) {
- p := &cardinalData
+ p := Cardinal
ar, _ := language.CompactIndex(language.Arabic)
lv, _ := language.CompactIndex(language.Latvian)
for i := 0; i < b.N; i++ {
diff --git a/feature/plural/tables.go b/feature/plural/tables.go
new file mode 100644
index 0000000..c5f4913
--- /dev/null
+++ b/feature/plural/tables.go
@@ -0,0 +1,541 @@
+// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
+
+package plural
+
+// CLDRVersion is the CLDR version from which the tables in this package are derived.
+const CLDRVersion = "30"
+
+var ordinalRules = []pluralCheck{ // 58 elements
+ 0: {cat: 0x2f, setID: 0x4},
+ 1: {cat: 0x3a, setID: 0x5},
+ 2: {cat: 0x22, setID: 0x1},
+ 3: {cat: 0x22, setID: 0x6},
+ 4: {cat: 0x22, setID: 0x7},
+ 5: {cat: 0x2f, setID: 0x8},
+ 6: {cat: 0x3c, setID: 0x9},
+ 7: {cat: 0x2f, setID: 0xa},
+ 8: {cat: 0x3c, setID: 0xb},
+ 9: {cat: 0x2d, setID: 0xc},
+ 10: {cat: 0x2d, setID: 0xd},
+ 11: {cat: 0x2f, setID: 0xe},
+ 12: {cat: 0x35, setID: 0x3},
+ 13: {cat: 0xc5, setID: 0xf},
+ 14: {cat: 0x2, setID: 0x1},
+ 15: {cat: 0x5, setID: 0x3},
+ 16: {cat: 0xd, setID: 0x10},
+ 17: {cat: 0x22, setID: 0x1},
+ 18: {cat: 0x2f, setID: 0x11},
+ 19: {cat: 0x3d, setID: 0x12},
+ 20: {cat: 0x2f, setID: 0x13},
+ 21: {cat: 0x3a, setID: 0x14},
+ 22: {cat: 0x2f, setID: 0x15},
+ 23: {cat: 0x3b, setID: 0x16},
+ 24: {cat: 0x2f, setID: 0xa},
+ 25: {cat: 0x3c, setID: 0xb},
+ 26: {cat: 0x22, setID: 0x1},
+ 27: {cat: 0x23, setID: 0x17},
+ 28: {cat: 0x24, setID: 0x18},
+ 29: {cat: 0x22, setID: 0x19},
+ 30: {cat: 0x23, setID: 0x2},
+ 31: {cat: 0x24, setID: 0x18},
+ 32: {cat: 0xf, setID: 0x13},
+ 33: {cat: 0x1a, setID: 0x14},
+ 34: {cat: 0xf, setID: 0x15},
+ 35: {cat: 0x1b, setID: 0x16},
+ 36: {cat: 0xf, setID: 0x1a},
+ 37: {cat: 0x1d, setID: 0x1b},
+ 38: {cat: 0xa, setID: 0x1c},
+ 39: {cat: 0xa, setID: 0x1d},
+ 40: {cat: 0xc, setID: 0x1e},
+ 41: {cat: 0xe4, setID: 0x0},
+ 42: {cat: 0x5, setID: 0x3},
+ 43: {cat: 0xd, setID: 0xc},
+ 44: {cat: 0xd, setID: 0x1f},
+ 45: {cat: 0x22, setID: 0x1},
+ 46: {cat: 0x23, setID: 0x17},
+ 47: {cat: 0x24, setID: 0x18},
+ 48: {cat: 0x25, setID: 0x20},
+ 49: {cat: 0x22, setID: 0x21},
+ 50: {cat: 0x23, setID: 0x17},
+ 51: {cat: 0x24, setID: 0x18},
+ 52: {cat: 0x25, setID: 0x20},
+ 53: {cat: 0x21, setID: 0x22},
+ 54: {cat: 0x22, setID: 0x1},
+ 55: {cat: 0x23, setID: 0x2},
+ 56: {cat: 0x24, setID: 0x23},
+ 57: {cat: 0x25, setID: 0x24},
+} // Size: 140 bytes
+
+var ordinalIndex = []uint8{ // 20 elements
+ 0x00, 0x00, 0x02, 0x03, 0x04, 0x05, 0x07, 0x09,
+ 0x0d, 0x0e, 0x11, 0x14, 0x1a, 0x1d, 0x20, 0x26,
+ 0x2d, 0x31, 0x35, 0x3a,
+} // Size: 44 bytes
+
+var ordinalLangToIndex = []uint8{ // 752 elements
+ // Entry 0 - 3F
+ 0x00, 0x0d, 0x0b, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00,
+ 0x0f, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x05,
+ 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ // Entry 40 - 7F
+ 0x00, 0x00, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x12, 0x12, 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,
+ // Entry 80 - BF
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x0b,
+ 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
+ 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
+ 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
+ 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
+ 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
+ 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
+ 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
+ // Entry C0 - FF
+ 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
+ 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
+ 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
+ 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
+ 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
+ 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ // Entry 100 - 13F
+ 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, 0x02, 0x02, 0x00, 0x00,
+ 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ // Entry 140 - 17F
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x02, 0x02,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ // Entry 180 - 1BF
+ 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x09, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 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, 0x00, 0x00,
+ // Entry 1C0 - 1FF
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 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, 0x0e, 0x0e, 0x00, 0x00,
+ 0x00, 0x00, 0x0c, 0x0c, 0x02, 0x02, 0x02, 0x02,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ // Entry 200 - 23F
+ 0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 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, 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,
+ // Entry 240 - 27F
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02,
+ 0x02, 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,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a,
+ // Entry 280 - 2BF
+ 0x0a, 0x0a, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x01, 0x01, 0x01, 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, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00,
+ // Entry 2C0 - 2FF
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 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, 0x00, 0x00, 0x00,
+} // Size: 776 bytes
+
+var ordinalInclusionMasks = []uint64{ // 100 elements
+ // Entry 0 - 1F
+ 0x0000000400004009, 0x00000002120800d3, 0x0000000010a10195, 0x0000000842810581,
+ 0x0000000841030081, 0x0000001210010041, 0x0000001100011001, 0x0000000614010001,
+ 0x0000000614018001, 0x0000000600012001, 0x0000000200014001, 0x0000000010198031,
+ 0x0000000010610331, 0x0000000040010f01, 0x0000000040070001, 0x0000000010010001,
+ 0x0000000000011001, 0x000000001c010001, 0x000000001c010001, 0x0000000000012001,
+ 0x0000000020014001, 0x0000000010080011, 0x0000000010200111, 0x0000000040000501,
+ 0x0000000040020001, 0x0000000010000001, 0x0000000000001001, 0x0000000014000001,
+ 0x0000000014000001, 0x0000000000002001, 0x0000000000004001, 0x0000000010080011,
+ // Entry 20 - 3F
+ 0x0000000010200111, 0x0000000040000501, 0x0000000040020001, 0x0000000010000001,
+ 0x0000000000001001, 0x0000000014000001, 0x0000000014000001, 0x0000000000002001,
+ 0x0000000080014001, 0x0000000010080011, 0x0000000010200111, 0x0000000040000501,
+ 0x0000000040020001, 0x0000000010000001, 0x0000000000001001, 0x0000000014000001,
+ 0x0000000014000001, 0x0000000000002001, 0x0000000020004001, 0x0000000010080011,
+ 0x0000000010200111, 0x0000000040000501, 0x0000000040020001, 0x0000000010000001,
+ 0x0000000000001001, 0x0000000014000001, 0x0000000014000001, 0x0000000000002001,
+ 0x0000000080014001, 0x0000000010080011, 0x0000000010200111, 0x0000000040000501,
+ // Entry 40 - 5F
+ 0x0000000040020001, 0x0000000010000001, 0x0000000000001001, 0x0000000014000001,
+ 0x0000000014000001, 0x0000000000002001, 0x0000000020004001, 0x0000000010080011,
+ 0x0000000010200111, 0x0000000040000501, 0x0000000040020001, 0x0000000010000001,
+ 0x0000000000001001, 0x0000000014000001, 0x0000000014000001, 0x0000000000002001,
+ 0x000000002001c001, 0x0000000010080011, 0x0000000010200111, 0x0000000040000501,
+ 0x0000000040020001, 0x0000000010000001, 0x0000000000001001, 0x0000000014000001,
+ 0x0000000014000001, 0x0000000000002001, 0x0000000080004001, 0x0000000010080011,
+ 0x0000000010200111, 0x0000000040000501, 0x0000000040020001, 0x0000000010000001,
+ // Entry 60 - 7F
+ 0x0000000000001001, 0x0000000014000001, 0x0000000014000001, 0x0000000000002001,
+} // Size: 824 bytes
+
+// Slots used for ordinal: 3A of 0xFF rules; 14 of 0xFF indexes; 37 of 64 sets
+
+var cardinalRules = []pluralCheck{ // 169 elements
+ 0: {cat: 0x2, setID: 0x3},
+ 1: {cat: 0x22, setID: 0x1},
+ 2: {cat: 0x2, setID: 0x4},
+ 3: {cat: 0x7, setID: 0x1},
+ 4: {cat: 0x62, setID: 0x3},
+ 5: {cat: 0x22, setID: 0x4},
+ 6: {cat: 0x7, setID: 0x3},
+ 7: {cat: 0x42, setID: 0x1},
+ 8: {cat: 0x22, setID: 0x4},
+ 9: {cat: 0x22, setID: 0x4},
+ 10: {cat: 0x22, setID: 0x5},
+ 11: {cat: 0x27, setID: 0x6},
+ 12: {cat: 0x32, setID: 0x2},
+ 13: {cat: 0x22, setID: 0x1},
+ 14: {cat: 0x27, setID: 0x1},
+ 15: {cat: 0x62, setID: 0x3},
+ 16: {cat: 0x22, setID: 0x1},
+ 17: {cat: 0x7, setID: 0x4},
+ 18: {cat: 0x92, setID: 0x3},
+ 19: {cat: 0xf, setID: 0x7},
+ 20: {cat: 0x1f, setID: 0x8},
+ 21: {cat: 0x82, setID: 0x3},
+ 22: {cat: 0x92, setID: 0x3},
+ 23: {cat: 0xf, setID: 0x7},
+ 24: {cat: 0x62, setID: 0x3},
+ 25: {cat: 0x4a, setID: 0x7},
+ 26: {cat: 0x7, setID: 0x9},
+ 27: {cat: 0x62, setID: 0x3},
+ 28: {cat: 0x1f, setID: 0xa},
+ 29: {cat: 0x62, setID: 0x3},
+ 30: {cat: 0x5f, setID: 0xa},
+ 31: {cat: 0x72, setID: 0x3},
+ 32: {cat: 0x29, setID: 0xb},
+ 33: {cat: 0x29, setID: 0xc},
+ 34: {cat: 0x4f, setID: 0xc},
+ 35: {cat: 0x61, setID: 0x2},
+ 36: {cat: 0x2f, setID: 0x7},
+ 37: {cat: 0x3a, setID: 0x8},
+ 38: {cat: 0x4f, setID: 0x7},
+ 39: {cat: 0x5f, setID: 0x8},
+ 40: {cat: 0x62, setID: 0x2},
+ 41: {cat: 0x4f, setID: 0x7},
+ 42: {cat: 0x72, setID: 0x2},
+ 43: {cat: 0x21, setID: 0x3},
+ 44: {cat: 0x7, setID: 0x4},
+ 45: {cat: 0x32, setID: 0x3},
+ 46: {cat: 0x21, setID: 0x3},
+ 47: {cat: 0x22, setID: 0x1},
+ 48: {cat: 0x22, setID: 0x1},
+ 49: {cat: 0x23, setID: 0x2},
+ 50: {cat: 0x2, setID: 0x3},
+ 51: {cat: 0x22, setID: 0x1},
+ 52: {cat: 0x24, setID: 0xd},
+ 53: {cat: 0x7, setID: 0x1},
+ 54: {cat: 0x62, setID: 0x3},
+ 55: {cat: 0x74, setID: 0x3},
+ 56: {cat: 0x24, setID: 0x3},
+ 57: {cat: 0x2f, setID: 0xe},
+ 58: {cat: 0x34, setID: 0x1},
+ 59: {cat: 0xf, setID: 0x7},
+ 60: {cat: 0x1f, setID: 0x8},
+ 61: {cat: 0x62, setID: 0x3},
+ 62: {cat: 0x4f, setID: 0x7},
+ 63: {cat: 0x5a, setID: 0x8},
+ 64: {cat: 0xf, setID: 0xf},
+ 65: {cat: 0x1f, setID: 0x10},
+ 66: {cat: 0x64, setID: 0x3},
+ 67: {cat: 0x4f, setID: 0xf},
+ 68: {cat: 0x5c, setID: 0x10},
+ 69: {cat: 0x22, setID: 0x11},
+ 70: {cat: 0x23, setID: 0x12},
+ 71: {cat: 0x24, setID: 0x13},
+ 72: {cat: 0xf, setID: 0x1},
+ 73: {cat: 0x62, setID: 0x3},
+ 74: {cat: 0xf, setID: 0x2},
+ 75: {cat: 0x63, setID: 0x3},
+ 76: {cat: 0xf, setID: 0x14},
+ 77: {cat: 0x64, setID: 0x3},
+ 78: {cat: 0x74, setID: 0x3},
+ 79: {cat: 0xf, setID: 0x1},
+ 80: {cat: 0x62, setID: 0x3},
+ 81: {cat: 0x4a, setID: 0x1},
+ 82: {cat: 0xf, setID: 0x2},
+ 83: {cat: 0x63, setID: 0x3},
+ 84: {cat: 0x4b, setID: 0x2},
+ 85: {cat: 0xf, setID: 0x14},
+ 86: {cat: 0x64, setID: 0x3},
+ 87: {cat: 0x4c, setID: 0x14},
+ 88: {cat: 0x7, setID: 0x1},
+ 89: {cat: 0x62, setID: 0x3},
+ 90: {cat: 0x7, setID: 0x2},
+ 91: {cat: 0x63, setID: 0x3},
+ 92: {cat: 0x2f, setID: 0xb},
+ 93: {cat: 0x37, setID: 0x15},
+ 94: {cat: 0x65, setID: 0x3},
+ 95: {cat: 0x7, setID: 0x1},
+ 96: {cat: 0x62, setID: 0x3},
+ 97: {cat: 0x7, setID: 0x16},
+ 98: {cat: 0x64, setID: 0x3},
+ 99: {cat: 0x75, setID: 0x3},
+ 100: {cat: 0x7, setID: 0x1},
+ 101: {cat: 0x62, setID: 0x3},
+ 102: {cat: 0xf, setID: 0xf},
+ 103: {cat: 0x1f, setID: 0x10},
+ 104: {cat: 0x64, setID: 0x3},
+ 105: {cat: 0xf, setID: 0x17},
+ 106: {cat: 0x17, setID: 0x1},
+ 107: {cat: 0x65, setID: 0x3},
+ 108: {cat: 0xf, setID: 0x18},
+ 109: {cat: 0x65, setID: 0x3},
+ 110: {cat: 0xf, setID: 0x10},
+ 111: {cat: 0x65, setID: 0x3},
+ 112: {cat: 0x2f, setID: 0x7},
+ 113: {cat: 0x3a, setID: 0x8},
+ 114: {cat: 0x2f, setID: 0xf},
+ 115: {cat: 0x3c, setID: 0x10},
+ 116: {cat: 0x2d, setID: 0xb},
+ 117: {cat: 0x2d, setID: 0x18},
+ 118: {cat: 0x2d, setID: 0x19},
+ 119: {cat: 0x2f, setID: 0x7},
+ 120: {cat: 0x3a, setID: 0xc},
+ 121: {cat: 0x2f, setID: 0x1a},
+ 122: {cat: 0x3c, setID: 0xc},
+ 123: {cat: 0x55, setID: 0x3},
+ 124: {cat: 0x22, setID: 0x1},
+ 125: {cat: 0x24, setID: 0x3},
+ 126: {cat: 0x2c, setID: 0xd},
+ 127: {cat: 0x2d, setID: 0xc},
+ 128: {cat: 0xf, setID: 0x7},
+ 129: {cat: 0x1f, setID: 0x8},
+ 130: {cat: 0x62, setID: 0x3},
+ 131: {cat: 0xf, setID: 0xf},
+ 132: {cat: 0x1f, setID: 0x10},
+ 133: {cat: 0x64, setID: 0x3},
+ 134: {cat: 0xf, setID: 0xb},
+ 135: {cat: 0x65, setID: 0x3},
+ 136: {cat: 0xf, setID: 0x18},
+ 137: {cat: 0x65, setID: 0x3},
+ 138: {cat: 0xf, setID: 0x19},
+ 139: {cat: 0x65, setID: 0x3},
+ 140: {cat: 0x2f, setID: 0x7},
+ 141: {cat: 0x3a, setID: 0x1b},
+ 142: {cat: 0x2f, setID: 0x1c},
+ 143: {cat: 0x3b, setID: 0x1d},
+ 144: {cat: 0x2f, setID: 0x1e},
+ 145: {cat: 0x3c, setID: 0x1f},
+ 146: {cat: 0x37, setID: 0x3},
+ 147: {cat: 0xa5, setID: 0x0},
+ 148: {cat: 0x22, setID: 0x1},
+ 149: {cat: 0x23, setID: 0x2},
+ 150: {cat: 0x24, setID: 0x20},
+ 151: {cat: 0x25, setID: 0x21},
+ 152: {cat: 0xf, setID: 0x7},
+ 153: {cat: 0x62, setID: 0x3},
+ 154: {cat: 0xf, setID: 0x1c},
+ 155: {cat: 0x63, setID: 0x3},
+ 156: {cat: 0xf, setID: 0x22},
+ 157: {cat: 0x64, setID: 0x3},
+ 158: {cat: 0x75, setID: 0x3},
+ 159: {cat: 0x21, setID: 0x3},
+ 160: {cat: 0x22, setID: 0x1},
+ 161: {cat: 0x23, setID: 0x2},
+ 162: {cat: 0x2c, setID: 0x23},
+ 163: {cat: 0x2d, setID: 0x5},
+ 164: {cat: 0x21, setID: 0x3},
+ 165: {cat: 0x22, setID: 0x1},
+ 166: {cat: 0x23, setID: 0x2},
+ 167: {cat: 0x24, setID: 0x24},
+ 168: {cat: 0x25, setID: 0x25},
+} // Size: 362 bytes
+
+var cardinalIndex = []uint8{ // 37 elements
+ 0x00, 0x00, 0x02, 0x03, 0x05, 0x08, 0x09, 0x0b,
+ 0x0d, 0x0e, 0x10, 0x13, 0x17, 0x1a, 0x20, 0x2b,
+ 0x2e, 0x30, 0x32, 0x35, 0x3b, 0x45, 0x48, 0x4f,
+ 0x58, 0x5f, 0x64, 0x70, 0x77, 0x7c, 0x80, 0x8c,
+ 0x94, 0x98, 0x9f, 0xa4, 0xa9,
+} // Size: 61 bytes
+
+var cardinalLangToIndex = []uint8{ // 752 elements
+ // Entry 0 - 3F
+ 0x00, 0x03, 0x03, 0x08, 0x08, 0x08, 0x00, 0x00,
+ 0x05, 0x05, 0x01, 0x01, 0x22, 0x22, 0x22, 0x22,
+ 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+ 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+ 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+ 0x22, 0x22, 0x01, 0x01, 0x08, 0x08, 0x03, 0x03,
+ 0x08, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x1b,
+ 0x1b, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x05,
+ // Entry 40 - 7F
+ 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x1f, 0x1f, 0x08, 0x08, 0x14, 0x00, 0x00, 0x14,
+ 0x14, 0x03, 0x03, 0x03, 0x03, 0x03, 0x08, 0x08,
+ 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x19,
+ 0x19, 0x00, 0x00, 0x23, 0x23, 0x0a, 0x0a, 0x0a,
+ 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
+ 0x03, 0x03, 0x00, 0x00, 0x17, 0x17, 0x00, 0x00,
+ 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08,
+ // Entry 80 - BF
+ 0x08, 0x08, 0x08, 0x08, 0x08, 0x03, 0x03, 0x03,
+ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
+ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
+ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
+ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
+ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
+ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
+ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
+ // Entry C0 - FF
+ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
+ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
+ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
+ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
+ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
+ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x08, 0x08,
+ 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
+ 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
+ // Entry 100 - 13F
+ 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
+ 0x08, 0x08, 0x08, 0x08, 0x03, 0x03, 0x08, 0x08,
+ 0x00, 0x00, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x03, 0x03, 0x0d, 0x0d, 0x08, 0x08,
+ 0x08, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ // Entry 140 - 17F
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x08, 0x08, 0x03, 0x03, 0x20, 0x20, 0x15, 0x15,
+ 0x03, 0x03, 0x08, 0x08, 0x08, 0x08, 0x01, 0x01,
+ 0x05, 0x00, 0x00, 0x21, 0x21, 0x08, 0x08, 0x08,
+ 0x08, 0x08, 0x08, 0x18, 0x18, 0x01, 0x01, 0x14,
+ 0x14, 0x14, 0x17, 0x17, 0x08, 0x08, 0x02, 0x02,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x0b,
+ // Entry 180 - 1BF
+ 0x03, 0x03, 0x03, 0x03, 0x11, 0x00, 0x00, 0x00,
+ 0x08, 0x08, 0x08, 0x08, 0x00, 0x08, 0x08, 0x02,
+ 0x02, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x08,
+ 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08,
+ 0x08, 0x08, 0x00, 0x00, 0x10, 0x10, 0x08, 0x11,
+ 0x11, 0x08, 0x08, 0x0f, 0x0f, 0x08, 0x08, 0x08,
+ // Entry 1C0 - 1FF
+ 0x08, 0x00, 0x00, 0x05, 0x05, 0x05, 0x05, 0x05,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x1c, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x0e, 0x08,
+ 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x05, 0x05,
+ 0x00, 0x00, 0x08, 0x08, 0x0c, 0x0c, 0x08, 0x08,
+ 0x08, 0x08, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x1d, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x08, 0x11, 0x11, 0x08, 0x08, 0x08, 0x08, 0x08,
+ // Entry 200 - 23F
+ 0x00, 0x00, 0x00, 0x08, 0x08, 0x08, 0x03, 0x03,
+ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00,
+ 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x08, 0x05,
+ 0x00, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
+ 0x08, 0x08, 0x08, 0x08, 0x08, 0x05, 0x00, 0x00,
+ 0x05, 0x05, 0x08, 0x1a, 0x1a, 0x0e, 0x0e, 0x08,
+ 0x08, 0x07, 0x09, 0x07, 0x09, 0x09, 0x09, 0x09,
+ 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x00, 0x00,
+ // Entry 240 - 27F
+ 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x13, 0x13,
+ 0x13, 0x08, 0x08, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
+ 0x1e, 0x1e, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00,
+ 0x08, 0x08, 0x00, 0x00, 0x08, 0x11, 0x11, 0x11,
+ 0x11, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x12,
+ 0x00, 0x00, 0x12, 0x12, 0x04, 0x04, 0x19, 0x19,
+ 0x16, 0x16, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
+ // Entry 280 - 2BF
+ 0x08, 0x08, 0x08, 0x14, 0x14, 0x14, 0x14, 0x14,
+ 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x08, 0x08,
+ 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
+ 0x03, 0x03, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
+ 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x05,
+ 0x05, 0x05, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
+ 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x06, 0x06,
+ 0x08, 0x08, 0x1e, 0x1e, 0x03, 0x03, 0x03, 0x08,
+ // Entry 2C0 - 2FF
+ 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x08,
+ 0x08, 0x08, 0x05, 0x08, 0x08, 0x00, 0x08, 0x08,
+ 0x08, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
+} // Size: 776 bytes
+
+var cardinalInclusionMasks = []uint64{ // 100 elements
+ // Entry 0 - 1F
+ 0x0000000400a00859, 0x0000000000a242d3, 0x000000001464e245, 0x000000194478e201,
+ 0x000000094478e401, 0x0000000905286001, 0x0000002905286401, 0x0000000a05286001,
+ 0x0000000a05286001, 0x0000000a45286401, 0x0000000a80a86801, 0x000000008a8251a1,
+ 0x00000000b605d021, 0x00000000c609d021, 0x00000000c609d421, 0x0000000085085021,
+ 0x0000000085085421, 0x0000000085085021, 0x0000000085085021, 0x00000000c5085421,
+ 0x0000000400800821, 0x00000000008000a1, 0x0000000014008021, 0x0000000044008021,
+ 0x0000000044008421, 0x0000000005000021, 0x0000000005000421, 0x0000000005000021,
+ 0x0000000005000021, 0x0000000045000421, 0x0000000000800821, 0x00000000008000a1,
+ // Entry 20 - 3F
+ 0x0000000014008021, 0x0000000044008021, 0x0000000044008421, 0x0000000005000021,
+ 0x0000000005000421, 0x0000000005000021, 0x0000000005000021, 0x0000000045000421,
+ 0x0000000400800821, 0x00000000008000a1, 0x0000000014008021, 0x0000000044008021,
+ 0x0000000044008421, 0x0000000005000021, 0x0000000005000421, 0x0000000005000021,
+ 0x0000000005000021, 0x0000000045000421, 0x0000000000800821, 0x00000000008000a1,
+ 0x0000000014008021, 0x0000000044008021, 0x0000000044008421, 0x0000000005000021,
+ 0x0000000005000421, 0x0000000005000021, 0x0000000005000021, 0x0000000045000421,
+ 0x0000000400800821, 0x00000000008000a1, 0x0000000014008021, 0x0000000044008021,
+ // Entry 40 - 5F
+ 0x0000000044008421, 0x0000000005000021, 0x0000000005000421, 0x0000000005000021,
+ 0x0000000005000021, 0x0000000045000421, 0x0000000080800821, 0x00000000888000a1,
+ 0x00000000b4008021, 0x00000000c4008021, 0x00000000c4008421, 0x0000000085000021,
+ 0x0000000085000421, 0x0000000085000021, 0x0000000085000021, 0x00000000c5000421,
+ 0x0000000400800821, 0x00000000008000a1, 0x0000000014008021, 0x0000000044008021,
+ 0x0000000044008421, 0x0000000005000021, 0x0000000005000421, 0x0000000005000021,
+ 0x0000000005000021, 0x0000000045000421, 0x0000000080800821, 0x00000000888000a1,
+ 0x00000000b4008021, 0x00000000c4008021, 0x00000000c4008421, 0x0000000085000021,
+ // Entry 60 - 7F
+ 0x0000000085000421, 0x0000000085000021, 0x0000000085000021, 0x00000000c5000421,
+} // Size: 824 bytes
+
+// Slots used for cardinal: A9 of 0xFF rules; 25 of 0xFF indexes; 38 of 64 sets
+
+// Total table size 3807 bytes (3KiB); checksum: A9B90899
diff --git a/gen.go b/gen.go
index a694fdd..79af97e 100644
--- a/gen.go
+++ b/gen.go
@@ -110,6 +110,7 @@
_ = generate("./secure/precis", unicode, norm, rangetable, cases, width, bidi)
_ = generate("./currency", unicode, cldr, language, internal)
_ = generate("./internal/number", unicode, cldr, language, internal)
+ _ = generate("./feature/plural", unicode, cldr, language, internal)
_ = generate("./internal/export/idna", unicode, bidi, norm)
_ = generate("./language/display", unicode, cldr, language, internal)
_ = generate("./collate", unicode, norm, cldr, language, rangetable)
diff --git a/internal/number/common.go b/internal/number/common.go
index a29abe4..e428a72 100644
--- a/internal/number/common.go
+++ b/internal/number/common.go
@@ -1,12 +1,8 @@
-// This file was generated by go generate; DO NOT EDIT
+// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
package number
-import (
- "unicode/utf8"
-
- "golang.org/x/text/internal/format/plural"
-)
+import "unicode/utf8"
// A system identifies a CLDR numbering system.
type system byte
@@ -42,51 +38,3 @@
system system
symIndex byte
}
-
-var countMap = map[string]plural.Form{
- "other": plural.Other,
- "zero": plural.Zero,
- "one": plural.One,
- "two": plural.Two,
- "few": plural.Few,
- "many": plural.Many,
-}
-
-type pluralCheck struct {
- // category:
- // 3..7: opID
- // 0..2: category
- cat byte
- setID byte
-}
-
-// opID identifies the type of operand in the plural rule, being i, n or f.
-// (v, w, and t are treated as filters in our implementation.)
-type opID byte
-
-const (
- opMod opID = 0x1 // is '%' used?
- opNotEqual opID = 0x2 // using "!=" to compare
- opI opID = 0 << 2 // integers after taking the absolute value
- opN opID = 1 << 2 // full number (must be integer)
- opF opID = 2 << 2 // fraction
- opV opID = 3 << 2 // number of visible digits
- opW opID = 4 << 2 // number of visible digits without trailing zeros
- opBretonM opID = 5 << 2 // hard-wired rule for Breton
- opItalian800 opID = 6 << 2 // hard-wired rule for Italian
- opAzerbaijan00s opID = 7 << 2 // hard-wired rule for Azerbaijan
-)
-const (
- // Use this plural form to indicate the next rule needs to match as well.
- // The last condition in the list will have the correct plural form.
- andNext = 0x7
- formMask = 0x7
-
- opShift = 3
-
- // numN indicates the maximum integer, or maximum mod value, for which we
- // have inclusion masks.
- numN = 100
- // The common denominator of the modulo that is taken.
- maxMod = 100
-)
diff --git a/internal/number/gen.go b/internal/number/gen.go
index 0d5f592..598c96c 100644
--- a/internal/number/gen.go
+++ b/internal/number/gen.go
@@ -45,7 +45,7 @@
d := &cldr.Decoder{}
d.SetDirFilter("supplemental", "main")
- d.SetSectionFilter("numbers", "numberingSystem", "plurals")
+ d.SetSectionFilter("numbers", "numberingSystem")
data, err := d.DecodeZip(r)
if err != nil {
log.Fatalf("DecodeZip: %v", err)
@@ -60,15 +60,7 @@
genNumSystem(w, data)
genSymbols(w, data)
- genPlurals(w, data)
genFormats(w, data)
-
- w = gen.NewCodeWriter()
- defer w.WriteGoFile(*outputTestFile, pkg)
-
- fmt.Fprintln(w, `import "golang.org/x/text/internal/format/plural"`)
-
- genPluralsTests(w, data)
}
var systemMap = map[string]system{"latn": 0}
diff --git a/internal/number/gen_common.go b/internal/number/gen_common.go
index b0c71c5..c4b791c 100644
--- a/internal/number/gen_common.go
+++ b/internal/number/gen_common.go
@@ -6,11 +6,7 @@
package main
-import (
- "unicode/utf8"
-
- "golang.org/x/text/internal/format/plural"
-)
+import "unicode/utf8"
// A system identifies a CLDR numbering system.
type system byte
@@ -46,51 +42,3 @@
system system
symIndex byte
}
-
-var countMap = map[string]plural.Form{
- "other": plural.Other,
- "zero": plural.Zero,
- "one": plural.One,
- "two": plural.Two,
- "few": plural.Few,
- "many": plural.Many,
-}
-
-type pluralCheck struct {
- // category:
- // 3..7: opID
- // 0..2: category
- cat byte
- setID byte
-}
-
-// opID identifies the type of operand in the plural rule, being i, n or f.
-// (v, w, and t are treated as filters in our implementation.)
-type opID byte
-
-const (
- opMod opID = 0x1 // is '%' used?
- opNotEqual opID = 0x2 // using "!=" to compare
- opI opID = 0 << 2 // integers after taking the absolute value
- opN opID = 1 << 2 // full number (must be integer)
- opF opID = 2 << 2 // fraction
- opV opID = 3 << 2 // number of visible digits
- opW opID = 4 << 2 // number of visible digits without trailing zeros
- opBretonM opID = 5 << 2 // hard-wired rule for Breton
- opItalian800 opID = 6 << 2 // hard-wired rule for Italian
- opAzerbaijan00s opID = 7 << 2 // hard-wired rule for Azerbaijan
-)
-const (
- // Use this plural form to indicate the next rule needs to match as well.
- // The last condition in the list will have the correct plural form.
- andNext = 0x7
- formMask = 0x7
-
- opShift = 3
-
- // numN indicates the maximum integer, or maximum mod value, for which we
- // have inclusion masks.
- numN = 100
- // The common denominator of the modulo that is taken.
- maxMod = 100
-)
diff --git a/internal/number/number.go b/internal/number/number.go
index d412194..34f4477 100644
--- a/internal/number/number.go
+++ b/internal/number/number.go
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-//go:generate go run gen.go gen_common.go gen_plural.go
+//go:generate go run gen.go gen_common.go
// Package number contains tools and data for formatting numbers.
package number
diff --git a/internal/number/tables.go b/internal/number/tables.go
index 845e0b1..5c799b4 100644
--- a/internal/number/tables.go
+++ b/internal/number/tables.go
@@ -1,4 +1,4 @@
-// This file was generated by go generate; DO NOT EDIT
+// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
package number
@@ -516,539 +516,6 @@
72: {compactTag: 0x2e4, system: 0x4, symIndex: 0x3b},
} // Size: 316 bytes
-var ordinalRules = []pluralCheck{ // 58 elements
- 0: {cat: 0x2f, setID: 0x4},
- 1: {cat: 0x3a, setID: 0x5},
- 2: {cat: 0x22, setID: 0x1},
- 3: {cat: 0x22, setID: 0x6},
- 4: {cat: 0x22, setID: 0x7},
- 5: {cat: 0x2f, setID: 0x8},
- 6: {cat: 0x3c, setID: 0x9},
- 7: {cat: 0x2f, setID: 0xa},
- 8: {cat: 0x3c, setID: 0xb},
- 9: {cat: 0x2d, setID: 0xc},
- 10: {cat: 0x2d, setID: 0xd},
- 11: {cat: 0x2f, setID: 0xe},
- 12: {cat: 0x35, setID: 0x3},
- 13: {cat: 0xc5, setID: 0xf},
- 14: {cat: 0x2, setID: 0x1},
- 15: {cat: 0x5, setID: 0x3},
- 16: {cat: 0xd, setID: 0x10},
- 17: {cat: 0x22, setID: 0x1},
- 18: {cat: 0x2f, setID: 0x11},
- 19: {cat: 0x3d, setID: 0x12},
- 20: {cat: 0x2f, setID: 0x13},
- 21: {cat: 0x3a, setID: 0x14},
- 22: {cat: 0x2f, setID: 0x15},
- 23: {cat: 0x3b, setID: 0x16},
- 24: {cat: 0x2f, setID: 0xa},
- 25: {cat: 0x3c, setID: 0xb},
- 26: {cat: 0x22, setID: 0x1},
- 27: {cat: 0x23, setID: 0x17},
- 28: {cat: 0x24, setID: 0x18},
- 29: {cat: 0x22, setID: 0x19},
- 30: {cat: 0x23, setID: 0x2},
- 31: {cat: 0x24, setID: 0x18},
- 32: {cat: 0xf, setID: 0x13},
- 33: {cat: 0x1a, setID: 0x14},
- 34: {cat: 0xf, setID: 0x15},
- 35: {cat: 0x1b, setID: 0x16},
- 36: {cat: 0xf, setID: 0x1a},
- 37: {cat: 0x1d, setID: 0x1b},
- 38: {cat: 0xa, setID: 0x1c},
- 39: {cat: 0xa, setID: 0x1d},
- 40: {cat: 0xc, setID: 0x1e},
- 41: {cat: 0xe4, setID: 0x0},
- 42: {cat: 0x5, setID: 0x3},
- 43: {cat: 0xd, setID: 0xc},
- 44: {cat: 0xd, setID: 0x1f},
- 45: {cat: 0x22, setID: 0x1},
- 46: {cat: 0x23, setID: 0x17},
- 47: {cat: 0x24, setID: 0x18},
- 48: {cat: 0x25, setID: 0x20},
- 49: {cat: 0x22, setID: 0x21},
- 50: {cat: 0x23, setID: 0x17},
- 51: {cat: 0x24, setID: 0x18},
- 52: {cat: 0x25, setID: 0x20},
- 53: {cat: 0x21, setID: 0x22},
- 54: {cat: 0x22, setID: 0x1},
- 55: {cat: 0x23, setID: 0x2},
- 56: {cat: 0x24, setID: 0x23},
- 57: {cat: 0x25, setID: 0x24},
-} // Size: 140 bytes
-
-var ordinalIndex = []uint8{ // 20 elements
- 0x00, 0x00, 0x02, 0x03, 0x04, 0x05, 0x07, 0x09,
- 0x0d, 0x0e, 0x11, 0x14, 0x1a, 0x1d, 0x20, 0x26,
- 0x2d, 0x31, 0x35, 0x3a,
-} // Size: 44 bytes
-
-var ordinalLangToIndex = []uint8{ // 752 elements
- // Entry 0 - 3F
- 0x00, 0x0d, 0x0b, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00,
- 0x0f, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x05,
- 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- // Entry 40 - 7F
- 0x00, 0x00, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x12, 0x12, 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,
- // Entry 80 - BF
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x0b,
- 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
- 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
- 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
- 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
- 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
- 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
- 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
- // Entry C0 - FF
- 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
- 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
- 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
- 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
- 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
- 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- // Entry 100 - 13F
- 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, 0x02, 0x02, 0x00, 0x00,
- 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- // Entry 140 - 17F
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x02, 0x02,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- // Entry 180 - 1BF
- 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x09, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 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, 0x00, 0x00,
- // Entry 1C0 - 1FF
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x02, 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, 0x0e, 0x0e, 0x00, 0x00,
- 0x00, 0x00, 0x0c, 0x0c, 0x02, 0x02, 0x02, 0x02,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- // Entry 200 - 23F
- 0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 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, 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,
- // Entry 240 - 27F
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02,
- 0x02, 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,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a,
- // Entry 280 - 2BF
- 0x0a, 0x0a, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x01, 0x01, 0x01, 0x01, 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, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00,
- // Entry 2C0 - 2FF
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 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, 0x00, 0x00, 0x00,
-} // Size: 776 bytes
-
-var ordinalInclusionMasks = []uint64{ // 100 elements
- // Entry 0 - 1F
- 0x0000000400004009, 0x00000002120800d3, 0x0000000010a10195, 0x0000000842810581,
- 0x0000000841030081, 0x0000001210010041, 0x0000001100011001, 0x0000000614010001,
- 0x0000000614018001, 0x0000000600012001, 0x0000000200014001, 0x0000000010198031,
- 0x0000000010610331, 0x0000000040010f01, 0x0000000040070001, 0x0000000010010001,
- 0x0000000000011001, 0x000000001c010001, 0x000000001c010001, 0x0000000000012001,
- 0x0000000020014001, 0x0000000010080011, 0x0000000010200111, 0x0000000040000501,
- 0x0000000040020001, 0x0000000010000001, 0x0000000000001001, 0x0000000014000001,
- 0x0000000014000001, 0x0000000000002001, 0x0000000000004001, 0x0000000010080011,
- // Entry 20 - 3F
- 0x0000000010200111, 0x0000000040000501, 0x0000000040020001, 0x0000000010000001,
- 0x0000000000001001, 0x0000000014000001, 0x0000000014000001, 0x0000000000002001,
- 0x0000000080014001, 0x0000000010080011, 0x0000000010200111, 0x0000000040000501,
- 0x0000000040020001, 0x0000000010000001, 0x0000000000001001, 0x0000000014000001,
- 0x0000000014000001, 0x0000000000002001, 0x0000000020004001, 0x0000000010080011,
- 0x0000000010200111, 0x0000000040000501, 0x0000000040020001, 0x0000000010000001,
- 0x0000000000001001, 0x0000000014000001, 0x0000000014000001, 0x0000000000002001,
- 0x0000000080014001, 0x0000000010080011, 0x0000000010200111, 0x0000000040000501,
- // Entry 40 - 5F
- 0x0000000040020001, 0x0000000010000001, 0x0000000000001001, 0x0000000014000001,
- 0x0000000014000001, 0x0000000000002001, 0x0000000020004001, 0x0000000010080011,
- 0x0000000010200111, 0x0000000040000501, 0x0000000040020001, 0x0000000010000001,
- 0x0000000000001001, 0x0000000014000001, 0x0000000014000001, 0x0000000000002001,
- 0x000000002001c001, 0x0000000010080011, 0x0000000010200111, 0x0000000040000501,
- 0x0000000040020001, 0x0000000010000001, 0x0000000000001001, 0x0000000014000001,
- 0x0000000014000001, 0x0000000000002001, 0x0000000080004001, 0x0000000010080011,
- 0x0000000010200111, 0x0000000040000501, 0x0000000040020001, 0x0000000010000001,
- // Entry 60 - 7F
- 0x0000000000001001, 0x0000000014000001, 0x0000000014000001, 0x0000000000002001,
-} // Size: 824 bytes
-
-// Slots used for ordinal: 3A of 0xFF rules; 14 of 0xFF indexes; 37 of 64 sets
-
-var cardinalRules = []pluralCheck{ // 169 elements
- 0: {cat: 0x2, setID: 0x3},
- 1: {cat: 0x22, setID: 0x1},
- 2: {cat: 0x2, setID: 0x4},
- 3: {cat: 0x7, setID: 0x1},
- 4: {cat: 0x62, setID: 0x3},
- 5: {cat: 0x22, setID: 0x4},
- 6: {cat: 0x7, setID: 0x3},
- 7: {cat: 0x42, setID: 0x1},
- 8: {cat: 0x22, setID: 0x4},
- 9: {cat: 0x22, setID: 0x4},
- 10: {cat: 0x22, setID: 0x5},
- 11: {cat: 0x27, setID: 0x6},
- 12: {cat: 0x32, setID: 0x2},
- 13: {cat: 0x22, setID: 0x1},
- 14: {cat: 0x27, setID: 0x1},
- 15: {cat: 0x62, setID: 0x3},
- 16: {cat: 0x22, setID: 0x1},
- 17: {cat: 0x7, setID: 0x4},
- 18: {cat: 0x92, setID: 0x3},
- 19: {cat: 0xf, setID: 0x7},
- 20: {cat: 0x1f, setID: 0x8},
- 21: {cat: 0x82, setID: 0x3},
- 22: {cat: 0x92, setID: 0x3},
- 23: {cat: 0xf, setID: 0x7},
- 24: {cat: 0x62, setID: 0x3},
- 25: {cat: 0x4a, setID: 0x7},
- 26: {cat: 0x7, setID: 0x9},
- 27: {cat: 0x62, setID: 0x3},
- 28: {cat: 0x1f, setID: 0xa},
- 29: {cat: 0x62, setID: 0x3},
- 30: {cat: 0x5f, setID: 0xa},
- 31: {cat: 0x72, setID: 0x3},
- 32: {cat: 0x29, setID: 0xb},
- 33: {cat: 0x29, setID: 0xc},
- 34: {cat: 0x4f, setID: 0xc},
- 35: {cat: 0x61, setID: 0x2},
- 36: {cat: 0x2f, setID: 0x7},
- 37: {cat: 0x3a, setID: 0x8},
- 38: {cat: 0x4f, setID: 0x7},
- 39: {cat: 0x5f, setID: 0x8},
- 40: {cat: 0x62, setID: 0x2},
- 41: {cat: 0x4f, setID: 0x7},
- 42: {cat: 0x72, setID: 0x2},
- 43: {cat: 0x21, setID: 0x3},
- 44: {cat: 0x7, setID: 0x4},
- 45: {cat: 0x32, setID: 0x3},
- 46: {cat: 0x21, setID: 0x3},
- 47: {cat: 0x22, setID: 0x1},
- 48: {cat: 0x22, setID: 0x1},
- 49: {cat: 0x23, setID: 0x2},
- 50: {cat: 0x2, setID: 0x3},
- 51: {cat: 0x22, setID: 0x1},
- 52: {cat: 0x24, setID: 0xd},
- 53: {cat: 0x7, setID: 0x1},
- 54: {cat: 0x62, setID: 0x3},
- 55: {cat: 0x74, setID: 0x3},
- 56: {cat: 0x24, setID: 0x3},
- 57: {cat: 0x2f, setID: 0xe},
- 58: {cat: 0x34, setID: 0x1},
- 59: {cat: 0xf, setID: 0x7},
- 60: {cat: 0x1f, setID: 0x8},
- 61: {cat: 0x62, setID: 0x3},
- 62: {cat: 0x4f, setID: 0x7},
- 63: {cat: 0x5a, setID: 0x8},
- 64: {cat: 0xf, setID: 0xf},
- 65: {cat: 0x1f, setID: 0x10},
- 66: {cat: 0x64, setID: 0x3},
- 67: {cat: 0x4f, setID: 0xf},
- 68: {cat: 0x5c, setID: 0x10},
- 69: {cat: 0x22, setID: 0x11},
- 70: {cat: 0x23, setID: 0x12},
- 71: {cat: 0x24, setID: 0x13},
- 72: {cat: 0xf, setID: 0x1},
- 73: {cat: 0x62, setID: 0x3},
- 74: {cat: 0xf, setID: 0x2},
- 75: {cat: 0x63, setID: 0x3},
- 76: {cat: 0xf, setID: 0x14},
- 77: {cat: 0x64, setID: 0x3},
- 78: {cat: 0x74, setID: 0x3},
- 79: {cat: 0xf, setID: 0x1},
- 80: {cat: 0x62, setID: 0x3},
- 81: {cat: 0x4a, setID: 0x1},
- 82: {cat: 0xf, setID: 0x2},
- 83: {cat: 0x63, setID: 0x3},
- 84: {cat: 0x4b, setID: 0x2},
- 85: {cat: 0xf, setID: 0x14},
- 86: {cat: 0x64, setID: 0x3},
- 87: {cat: 0x4c, setID: 0x14},
- 88: {cat: 0x7, setID: 0x1},
- 89: {cat: 0x62, setID: 0x3},
- 90: {cat: 0x7, setID: 0x2},
- 91: {cat: 0x63, setID: 0x3},
- 92: {cat: 0x2f, setID: 0xb},
- 93: {cat: 0x37, setID: 0x15},
- 94: {cat: 0x65, setID: 0x3},
- 95: {cat: 0x7, setID: 0x1},
- 96: {cat: 0x62, setID: 0x3},
- 97: {cat: 0x7, setID: 0x16},
- 98: {cat: 0x64, setID: 0x3},
- 99: {cat: 0x75, setID: 0x3},
- 100: {cat: 0x7, setID: 0x1},
- 101: {cat: 0x62, setID: 0x3},
- 102: {cat: 0xf, setID: 0xf},
- 103: {cat: 0x1f, setID: 0x10},
- 104: {cat: 0x64, setID: 0x3},
- 105: {cat: 0xf, setID: 0x17},
- 106: {cat: 0x17, setID: 0x1},
- 107: {cat: 0x65, setID: 0x3},
- 108: {cat: 0xf, setID: 0x18},
- 109: {cat: 0x65, setID: 0x3},
- 110: {cat: 0xf, setID: 0x10},
- 111: {cat: 0x65, setID: 0x3},
- 112: {cat: 0x2f, setID: 0x7},
- 113: {cat: 0x3a, setID: 0x8},
- 114: {cat: 0x2f, setID: 0xf},
- 115: {cat: 0x3c, setID: 0x10},
- 116: {cat: 0x2d, setID: 0xb},
- 117: {cat: 0x2d, setID: 0x18},
- 118: {cat: 0x2d, setID: 0x19},
- 119: {cat: 0x2f, setID: 0x7},
- 120: {cat: 0x3a, setID: 0xc},
- 121: {cat: 0x2f, setID: 0x1a},
- 122: {cat: 0x3c, setID: 0xc},
- 123: {cat: 0x55, setID: 0x3},
- 124: {cat: 0x22, setID: 0x1},
- 125: {cat: 0x24, setID: 0x3},
- 126: {cat: 0x2c, setID: 0xd},
- 127: {cat: 0x2d, setID: 0xc},
- 128: {cat: 0xf, setID: 0x7},
- 129: {cat: 0x1f, setID: 0x8},
- 130: {cat: 0x62, setID: 0x3},
- 131: {cat: 0xf, setID: 0xf},
- 132: {cat: 0x1f, setID: 0x10},
- 133: {cat: 0x64, setID: 0x3},
- 134: {cat: 0xf, setID: 0xb},
- 135: {cat: 0x65, setID: 0x3},
- 136: {cat: 0xf, setID: 0x18},
- 137: {cat: 0x65, setID: 0x3},
- 138: {cat: 0xf, setID: 0x19},
- 139: {cat: 0x65, setID: 0x3},
- 140: {cat: 0x2f, setID: 0x7},
- 141: {cat: 0x3a, setID: 0x1b},
- 142: {cat: 0x2f, setID: 0x1c},
- 143: {cat: 0x3b, setID: 0x1d},
- 144: {cat: 0x2f, setID: 0x1e},
- 145: {cat: 0x3c, setID: 0x1f},
- 146: {cat: 0x37, setID: 0x3},
- 147: {cat: 0xa5, setID: 0x0},
- 148: {cat: 0x22, setID: 0x1},
- 149: {cat: 0x23, setID: 0x2},
- 150: {cat: 0x24, setID: 0x20},
- 151: {cat: 0x25, setID: 0x21},
- 152: {cat: 0xf, setID: 0x7},
- 153: {cat: 0x62, setID: 0x3},
- 154: {cat: 0xf, setID: 0x1c},
- 155: {cat: 0x63, setID: 0x3},
- 156: {cat: 0xf, setID: 0x22},
- 157: {cat: 0x64, setID: 0x3},
- 158: {cat: 0x75, setID: 0x3},
- 159: {cat: 0x21, setID: 0x3},
- 160: {cat: 0x22, setID: 0x1},
- 161: {cat: 0x23, setID: 0x2},
- 162: {cat: 0x2c, setID: 0x23},
- 163: {cat: 0x2d, setID: 0x5},
- 164: {cat: 0x21, setID: 0x3},
- 165: {cat: 0x22, setID: 0x1},
- 166: {cat: 0x23, setID: 0x2},
- 167: {cat: 0x24, setID: 0x24},
- 168: {cat: 0x25, setID: 0x25},
-} // Size: 362 bytes
-
-var cardinalIndex = []uint8{ // 37 elements
- 0x00, 0x00, 0x02, 0x03, 0x05, 0x08, 0x09, 0x0b,
- 0x0d, 0x0e, 0x10, 0x13, 0x17, 0x1a, 0x20, 0x2b,
- 0x2e, 0x30, 0x32, 0x35, 0x3b, 0x45, 0x48, 0x4f,
- 0x58, 0x5f, 0x64, 0x70, 0x77, 0x7c, 0x80, 0x8c,
- 0x94, 0x98, 0x9f, 0xa4, 0xa9,
-} // Size: 61 bytes
-
-var cardinalLangToIndex = []uint8{ // 752 elements
- // Entry 0 - 3F
- 0x00, 0x03, 0x03, 0x08, 0x08, 0x08, 0x00, 0x00,
- 0x05, 0x05, 0x01, 0x01, 0x22, 0x22, 0x22, 0x22,
- 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
- 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
- 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
- 0x22, 0x22, 0x01, 0x01, 0x08, 0x08, 0x03, 0x03,
- 0x08, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x1b,
- 0x1b, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x05,
- // Entry 40 - 7F
- 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
- 0x1f, 0x1f, 0x08, 0x08, 0x14, 0x00, 0x00, 0x14,
- 0x14, 0x03, 0x03, 0x03, 0x03, 0x03, 0x08, 0x08,
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x19,
- 0x19, 0x00, 0x00, 0x23, 0x23, 0x0a, 0x0a, 0x0a,
- 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
- 0x03, 0x03, 0x00, 0x00, 0x17, 0x17, 0x00, 0x00,
- 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08,
- // Entry 80 - BF
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x03, 0x03, 0x03,
- 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
- 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
- 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
- 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
- 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
- 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
- 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
- // Entry C0 - FF
- 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
- 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
- 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
- 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
- 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
- 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x08, 0x08,
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
- // Entry 100 - 13F
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
- 0x08, 0x08, 0x08, 0x08, 0x03, 0x03, 0x08, 0x08,
- 0x00, 0x00, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x03, 0x03, 0x0d, 0x0d, 0x08, 0x08,
- 0x08, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- // Entry 140 - 17F
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x08, 0x08, 0x03, 0x03, 0x20, 0x20, 0x15, 0x15,
- 0x03, 0x03, 0x08, 0x08, 0x08, 0x08, 0x01, 0x01,
- 0x05, 0x00, 0x00, 0x21, 0x21, 0x08, 0x08, 0x08,
- 0x08, 0x08, 0x08, 0x18, 0x18, 0x01, 0x01, 0x14,
- 0x14, 0x14, 0x17, 0x17, 0x08, 0x08, 0x02, 0x02,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x0b,
- // Entry 180 - 1BF
- 0x03, 0x03, 0x03, 0x03, 0x11, 0x00, 0x00, 0x00,
- 0x08, 0x08, 0x08, 0x08, 0x00, 0x08, 0x08, 0x02,
- 0x02, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x08,
- 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01,
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08,
- 0x08, 0x08, 0x00, 0x00, 0x10, 0x10, 0x08, 0x11,
- 0x11, 0x08, 0x08, 0x0f, 0x0f, 0x08, 0x08, 0x08,
- // Entry 1C0 - 1FF
- 0x08, 0x00, 0x00, 0x05, 0x05, 0x05, 0x05, 0x05,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x1c, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x0e, 0x08,
- 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x05, 0x05,
- 0x00, 0x00, 0x08, 0x08, 0x0c, 0x0c, 0x08, 0x08,
- 0x08, 0x08, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
- 0x1d, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x08, 0x11, 0x11, 0x08, 0x08, 0x08, 0x08, 0x08,
- // Entry 200 - 23F
- 0x00, 0x00, 0x00, 0x08, 0x08, 0x08, 0x03, 0x03,
- 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00,
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x08, 0x05,
- 0x00, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x05, 0x00, 0x00,
- 0x05, 0x05, 0x08, 0x1a, 0x1a, 0x0e, 0x0e, 0x08,
- 0x08, 0x07, 0x09, 0x07, 0x09, 0x09, 0x09, 0x09,
- 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x00, 0x00,
- // Entry 240 - 27F
- 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x13, 0x13,
- 0x13, 0x08, 0x08, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e,
- 0x1e, 0x1e, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00,
- 0x08, 0x08, 0x00, 0x00, 0x08, 0x11, 0x11, 0x11,
- 0x11, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x12,
- 0x00, 0x00, 0x12, 0x12, 0x04, 0x04, 0x19, 0x19,
- 0x16, 0x16, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
- // Entry 280 - 2BF
- 0x08, 0x08, 0x08, 0x14, 0x14, 0x14, 0x14, 0x14,
- 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x08, 0x08,
- 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
- 0x03, 0x03, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x05,
- 0x05, 0x05, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
- 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x06, 0x06,
- 0x08, 0x08, 0x1e, 0x1e, 0x03, 0x03, 0x03, 0x08,
- // Entry 2C0 - 2FF
- 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x08,
- 0x08, 0x08, 0x05, 0x08, 0x08, 0x00, 0x08, 0x08,
- 0x08, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
-} // Size: 776 bytes
-
-var cardinalInclusionMasks = []uint64{ // 100 elements
- // Entry 0 - 1F
- 0x0000000400a00859, 0x0000000000a242d3, 0x000000001464e245, 0x000000194478e201,
- 0x000000094478e401, 0x0000000905286001, 0x0000002905286401, 0x0000000a05286001,
- 0x0000000a05286001, 0x0000000a45286401, 0x0000000a80a86801, 0x000000008a8251a1,
- 0x00000000b605d021, 0x00000000c609d021, 0x00000000c609d421, 0x0000000085085021,
- 0x0000000085085421, 0x0000000085085021, 0x0000000085085021, 0x00000000c5085421,
- 0x0000000400800821, 0x00000000008000a1, 0x0000000014008021, 0x0000000044008021,
- 0x0000000044008421, 0x0000000005000021, 0x0000000005000421, 0x0000000005000021,
- 0x0000000005000021, 0x0000000045000421, 0x0000000000800821, 0x00000000008000a1,
- // Entry 20 - 3F
- 0x0000000014008021, 0x0000000044008021, 0x0000000044008421, 0x0000000005000021,
- 0x0000000005000421, 0x0000000005000021, 0x0000000005000021, 0x0000000045000421,
- 0x0000000400800821, 0x00000000008000a1, 0x0000000014008021, 0x0000000044008021,
- 0x0000000044008421, 0x0000000005000021, 0x0000000005000421, 0x0000000005000021,
- 0x0000000005000021, 0x0000000045000421, 0x0000000000800821, 0x00000000008000a1,
- 0x0000000014008021, 0x0000000044008021, 0x0000000044008421, 0x0000000005000021,
- 0x0000000005000421, 0x0000000005000021, 0x0000000005000021, 0x0000000045000421,
- 0x0000000400800821, 0x00000000008000a1, 0x0000000014008021, 0x0000000044008021,
- // Entry 40 - 5F
- 0x0000000044008421, 0x0000000005000021, 0x0000000005000421, 0x0000000005000021,
- 0x0000000005000021, 0x0000000045000421, 0x0000000080800821, 0x00000000888000a1,
- 0x00000000b4008021, 0x00000000c4008021, 0x00000000c4008421, 0x0000000085000021,
- 0x0000000085000421, 0x0000000085000021, 0x0000000085000021, 0x00000000c5000421,
- 0x0000000400800821, 0x00000000008000a1, 0x0000000014008021, 0x0000000044008021,
- 0x0000000044008421, 0x0000000005000021, 0x0000000005000421, 0x0000000005000021,
- 0x0000000005000021, 0x0000000045000421, 0x0000000080800821, 0x00000000888000a1,
- 0x00000000b4008021, 0x00000000c4008021, 0x00000000c4008421, 0x0000000085000021,
- // Entry 60 - 7F
- 0x0000000085000421, 0x0000000085000021, 0x0000000085000021, 0x00000000c5000421,
-} // Size: 824 bytes
-
-// Slots used for cardinal: A9 of 0xFF rules; 25 of 0xFF indexes; 38 of 64 sets
-
var tagToDecimal = []uint8{ // 752 elements
// Entry 0 - 3F
0x01, 0x01, 0x08, 0x01, 0x01, 0x01, 0x01, 0x01,
@@ -1649,4 +1116,4 @@
MaxSignificantDigits: 0x0,
MinExponentDigits: 0x0}}
-// Total table size 10908 bytes (10KiB); checksum: B1AF61E6
+// Total table size 7101 bytes (6KiB); checksum: A4A81DF0