diff options
Diffstat (limited to 'src/pkg/unicode')
-rw-r--r-- | src/pkg/unicode/Makefile | 16 | ||||
-rw-r--r-- | src/pkg/unicode/casetables.go | 20 | ||||
-rw-r--r-- | src/pkg/unicode/digit.go | 13 | ||||
-rw-r--r-- | src/pkg/unicode/digit_test.go | 126 | ||||
-rw-r--r-- | src/pkg/unicode/graphic.go | 144 | ||||
-rw-r--r-- | src/pkg/unicode/graphic_test.go | 122 | ||||
-rw-r--r-- | src/pkg/unicode/letter.go | 354 | ||||
-rw-r--r-- | src/pkg/unicode/letter_test.go | 535 | ||||
-rw-r--r-- | src/pkg/unicode/maketables.go | 1320 | ||||
-rw-r--r-- | src/pkg/unicode/script_test.go | 264 | ||||
-rw-r--r-- | src/pkg/unicode/tables.go | 6391 | ||||
-rw-r--r-- | src/pkg/unicode/utf16/export_test.go | 11 | ||||
-rw-r--r-- | src/pkg/unicode/utf16/utf16.go | 108 | ||||
-rw-r--r-- | src/pkg/unicode/utf16/utf16_test.go | 149 | ||||
-rw-r--r-- | src/pkg/unicode/utf8/example_test.go | 196 | ||||
-rw-r--r-- | src/pkg/unicode/utf8/utf8.go | 435 | ||||
-rw-r--r-- | src/pkg/unicode/utf8/utf8_test.go | 444 |
17 files changed, 0 insertions, 10648 deletions
diff --git a/src/pkg/unicode/Makefile b/src/pkg/unicode/Makefile deleted file mode 100644 index 33b06ca10..000000000 --- a/src/pkg/unicode/Makefile +++ /dev/null @@ -1,16 +0,0 @@ -# Copyright 2009 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. - -maketables: maketables.go - go build maketables.go - -tables: maketables - ./maketables --tables=all > tables.go - gofmt -w tables.go - -# Downloads from www.unicode.org, so not part -# of standard test scripts. -testtables: maketables - @echo '***' Be sure to make tables and go install first - ./maketables -test diff --git a/src/pkg/unicode/casetables.go b/src/pkg/unicode/casetables.go deleted file mode 100644 index 29bf167e5..000000000 --- a/src/pkg/unicode/casetables.go +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2009 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. - -// TODO: This file contains the special casing rules for Turkish and Azeri only. -// It should encompass all the languages with special casing rules -// and be generated automatically, but that requires some API -// development first. - -package unicode - -var TurkishCase SpecialCase = _TurkishCase -var _TurkishCase = SpecialCase{ - CaseRange{0x0049, 0x0049, d{0, 0x131 - 0x49, 0}}, - CaseRange{0x0069, 0x0069, d{0x130 - 0x69, 0, 0x130 - 0x69}}, - CaseRange{0x0130, 0x0130, d{0, 0x69 - 0x130, 0}}, - CaseRange{0x0131, 0x0131, d{0x49 - 0x131, 0, 0x49 - 0x131}}, -} - -var AzeriCase SpecialCase = _TurkishCase diff --git a/src/pkg/unicode/digit.go b/src/pkg/unicode/digit.go deleted file mode 100644 index 53171b396..000000000 --- a/src/pkg/unicode/digit.go +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2009 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. - -package unicode - -// IsDigit reports whether the rune is a decimal digit. -func IsDigit(r rune) bool { - if r <= MaxLatin1 { - return '0' <= r && r <= '9' - } - return isExcludingLatin(Digit, r) -} diff --git a/src/pkg/unicode/digit_test.go b/src/pkg/unicode/digit_test.go deleted file mode 100644 index 551c42a24..000000000 --- a/src/pkg/unicode/digit_test.go +++ /dev/null @@ -1,126 +0,0 @@ -// Copyright 2009 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. - -package unicode_test - -import ( - "testing" - . "unicode" -) - -var testDigit = []rune{ - 0x0030, - 0x0039, - 0x0661, - 0x06F1, - 0x07C9, - 0x0966, - 0x09EF, - 0x0A66, - 0x0AEF, - 0x0B66, - 0x0B6F, - 0x0BE6, - 0x0BEF, - 0x0C66, - 0x0CEF, - 0x0D66, - 0x0D6F, - 0x0E50, - 0x0E59, - 0x0ED0, - 0x0ED9, - 0x0F20, - 0x0F29, - 0x1040, - 0x1049, - 0x1090, - 0x1091, - 0x1099, - 0x17E0, - 0x17E9, - 0x1810, - 0x1819, - 0x1946, - 0x194F, - 0x19D0, - 0x19D9, - 0x1B50, - 0x1B59, - 0x1BB0, - 0x1BB9, - 0x1C40, - 0x1C49, - 0x1C50, - 0x1C59, - 0xA620, - 0xA629, - 0xA8D0, - 0xA8D9, - 0xA900, - 0xA909, - 0xAA50, - 0xAA59, - 0xFF10, - 0xFF19, - 0x104A1, - 0x1D7CE, -} - -var testLetter = []rune{ - 0x0041, - 0x0061, - 0x00AA, - 0x00BA, - 0x00C8, - 0x00DB, - 0x00F9, - 0x02EC, - 0x0535, - 0x06E6, - 0x093D, - 0x0A15, - 0x0B99, - 0x0DC0, - 0x0EDD, - 0x1000, - 0x1200, - 0x1312, - 0x1401, - 0x1885, - 0x2C00, - 0xA800, - 0xF900, - 0xFA30, - 0xFFDA, - 0xFFDC, - 0x10000, - 0x10300, - 0x10400, - 0x20000, - 0x2F800, - 0x2FA1D, -} - -func TestDigit(t *testing.T) { - for _, r := range testDigit { - if !IsDigit(r) { - t.Errorf("IsDigit(U+%04X) = false, want true", r) - } - } - for _, r := range testLetter { - if IsDigit(r) { - t.Errorf("IsDigit(U+%04X) = true, want false", r) - } - } -} - -// Test that the special case in IsDigit agrees with the table -func TestDigitOptimization(t *testing.T) { - for i := rune(0); i <= MaxLatin1; i++ { - if Is(Digit, i) != IsDigit(i) { - t.Errorf("IsDigit(U+%04X) disagrees with Is(Digit)", i) - } - } -} diff --git a/src/pkg/unicode/graphic.go b/src/pkg/unicode/graphic.go deleted file mode 100644 index ba90b4e51..000000000 --- a/src/pkg/unicode/graphic.go +++ /dev/null @@ -1,144 +0,0 @@ -// Copyright 2011 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. - -package unicode - -// Bit masks for each code point under U+0100, for fast lookup. -const ( - pC = 1 << iota // a control character. - pP // a punctuation character. - pN // a numeral. - pS // a symbolic character. - pZ // a spacing character. - pLu // an upper-case letter. - pLl // a lower-case letter. - pp // a printable character according to Go's definition. - pg = pp | pZ // a graphical character according to the Unicode definition. - pLo = pLl | pLu // a letter that is neither upper nor lower case. - pLmask = pLo -) - -// GraphicRanges defines the set of graphic characters according to Unicode. -var GraphicRanges = []*RangeTable{ - L, M, N, P, S, Zs, -} - -// PrintRanges defines the set of printable characters according to Go. -// ASCII space, U+0020, is handled separately. -var PrintRanges = []*RangeTable{ - L, M, N, P, S, -} - -// IsGraphic reports whether the rune is defined as a Graphic by Unicode. -// Such characters include letters, marks, numbers, punctuation, symbols, and -// spaces, from categories L, M, N, P, S, Zs. -func IsGraphic(r rune) bool { - // We convert to uint32 to avoid the extra test for negative, - // and in the index we convert to uint8 to avoid the range check. - if uint32(r) <= MaxLatin1 { - return properties[uint8(r)]&pg != 0 - } - return In(r, GraphicRanges...) -} - -// IsPrint reports whether the rune is defined as printable by Go. Such -// characters include letters, marks, numbers, punctuation, symbols, and the -// ASCII space character, from categories L, M, N, P, S and the ASCII space -// character. This categorization is the same as IsGraphic except that the -// only spacing character is ASCII space, U+0020. -func IsPrint(r rune) bool { - if uint32(r) <= MaxLatin1 { - return properties[uint8(r)]&pp != 0 - } - return In(r, PrintRanges...) -} - -// IsOneOf reports whether the rune is a member of one of the ranges. -// The function "In" provides a nicer signature and should be used in preference to IsOneOf. -func IsOneOf(ranges []*RangeTable, r rune) bool { - for _, inside := range ranges { - if Is(inside, r) { - return true - } - } - return false -} - -// In reports whether the rune is a member of one of the ranges. -func In(r rune, ranges ...*RangeTable) bool { - for _, inside := range ranges { - if Is(inside, r) { - return true - } - } - return false -} - -// IsControl reports whether the rune is a control character. -// The C (Other) Unicode category includes more code points -// such as surrogates; use Is(C, r) to test for them. -func IsControl(r rune) bool { - if uint32(r) <= MaxLatin1 { - return properties[uint8(r)]&pC != 0 - } - // All control characters are < Latin1Max. - return false -} - -// IsLetter reports whether the rune is a letter (category L). -func IsLetter(r rune) bool { - if uint32(r) <= MaxLatin1 { - return properties[uint8(r)]&(pLmask) != 0 - } - return isExcludingLatin(Letter, r) -} - -// IsMark reports whether the rune is a mark character (category M). -func IsMark(r rune) bool { - // There are no mark characters in Latin-1. - return isExcludingLatin(Mark, r) -} - -// IsNumber reports whether the rune is a number (category N). -func IsNumber(r rune) bool { - if uint32(r) <= MaxLatin1 { - return properties[uint8(r)]&pN != 0 - } - return isExcludingLatin(Number, r) -} - -// IsPunct reports whether the rune is a Unicode punctuation character -// (category P). -func IsPunct(r rune) bool { - if uint32(r) <= MaxLatin1 { - return properties[uint8(r)]&pP != 0 - } - return Is(Punct, r) -} - -// IsSpace reports whether the rune is a space character as defined -// by Unicode's White Space property; in the Latin-1 space -// this is -// '\t', '\n', '\v', '\f', '\r', ' ', U+0085 (NEL), U+00A0 (NBSP). -// Other definitions of spacing characters are set by category -// Z and property Pattern_White_Space. -func IsSpace(r rune) bool { - // This property isn't the same as Z; special-case it. - if uint32(r) <= MaxLatin1 { - switch r { - case '\t', '\n', '\v', '\f', '\r', ' ', 0x85, 0xA0: - return true - } - return false - } - return isExcludingLatin(White_Space, r) -} - -// IsSymbol reports whether the rune is a symbolic character. -func IsSymbol(r rune) bool { - if uint32(r) <= MaxLatin1 { - return properties[uint8(r)]&pS != 0 - } - return isExcludingLatin(Symbol, r) -} diff --git a/src/pkg/unicode/graphic_test.go b/src/pkg/unicode/graphic_test.go deleted file mode 100644 index c9f289c7f..000000000 --- a/src/pkg/unicode/graphic_test.go +++ /dev/null @@ -1,122 +0,0 @@ -// Copyright 2011 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. - -package unicode_test - -import ( - "testing" - . "unicode" -) - -// Independently check that the special "Is" functions work -// in the Latin-1 range through the property table. - -func TestIsControlLatin1(t *testing.T) { - for i := rune(0); i <= MaxLatin1; i++ { - got := IsControl(i) - want := false - switch { - case 0x00 <= i && i <= 0x1F: - want = true - case 0x7F <= i && i <= 0x9F: - want = true - } - if got != want { - t.Errorf("%U incorrect: got %t; want %t", i, got, want) - } - } -} - -func TestIsLetterLatin1(t *testing.T) { - for i := rune(0); i <= MaxLatin1; i++ { - got := IsLetter(i) - want := Is(Letter, i) - if got != want { - t.Errorf("%U incorrect: got %t; want %t", i, got, want) - } - } -} - -func TestIsUpperLatin1(t *testing.T) { - for i := rune(0); i <= MaxLatin1; i++ { - got := IsUpper(i) - want := Is(Upper, i) - if got != want { - t.Errorf("%U incorrect: got %t; want %t", i, got, want) - } - } -} - -func TestIsLowerLatin1(t *testing.T) { - for i := rune(0); i <= MaxLatin1; i++ { - got := IsLower(i) - want := Is(Lower, i) - if got != want { - t.Errorf("%U incorrect: got %t; want %t", i, got, want) - } - } -} - -func TestNumberLatin1(t *testing.T) { - for i := rune(0); i <= MaxLatin1; i++ { - got := IsNumber(i) - want := Is(Number, i) - if got != want { - t.Errorf("%U incorrect: got %t; want %t", i, got, want) - } - } -} - -func TestIsPrintLatin1(t *testing.T) { - for i := rune(0); i <= MaxLatin1; i++ { - got := IsPrint(i) - want := In(i, PrintRanges...) - if i == ' ' { - want = true - } - if got != want { - t.Errorf("%U incorrect: got %t; want %t", i, got, want) - } - } -} - -func TestIsGraphicLatin1(t *testing.T) { - for i := rune(0); i <= MaxLatin1; i++ { - got := IsGraphic(i) - want := In(i, GraphicRanges...) - if got != want { - t.Errorf("%U incorrect: got %t; want %t", i, got, want) - } - } -} - -func TestIsPunctLatin1(t *testing.T) { - for i := rune(0); i <= MaxLatin1; i++ { - got := IsPunct(i) - want := Is(Punct, i) - if got != want { - t.Errorf("%U incorrect: got %t; want %t", i, got, want) - } - } -} - -func TestIsSpaceLatin1(t *testing.T) { - for i := rune(0); i <= MaxLatin1; i++ { - got := IsSpace(i) - want := Is(White_Space, i) - if got != want { - t.Errorf("%U incorrect: got %t; want %t", i, got, want) - } - } -} - -func TestIsSymbolLatin1(t *testing.T) { - for i := rune(0); i <= MaxLatin1; i++ { - got := IsSymbol(i) - want := Is(Symbol, i) - if got != want { - t.Errorf("%U incorrect: got %t; want %t", i, got, want) - } - } -} diff --git a/src/pkg/unicode/letter.go b/src/pkg/unicode/letter.go deleted file mode 100644 index 977bd2b3b..000000000 --- a/src/pkg/unicode/letter.go +++ /dev/null @@ -1,354 +0,0 @@ -// Copyright 2009 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. - -// Package unicode provides data and functions to test some properties of -// Unicode code points. -package unicode - -const ( - MaxRune = '\U0010FFFF' // Maximum valid Unicode code point. - ReplacementChar = '\uFFFD' // Represents invalid code points. - MaxASCII = '\u007F' // maximum ASCII value. - MaxLatin1 = '\u00FF' // maximum Latin-1 value. -) - -// RangeTable defines a set of Unicode code points by listing the ranges of -// code points within the set. The ranges are listed in two slices -// to save space: a slice of 16-bit ranges and a slice of 32-bit ranges. -// The two slices must be in sorted order and non-overlapping. -// Also, R32 should contain only values >= 0x10000 (1<<16). -type RangeTable struct { - R16 []Range16 - R32 []Range32 - LatinOffset int // number of entries in R16 with Hi <= MaxLatin1 -} - -// Range16 represents of a range of 16-bit Unicode code points. The range runs from Lo to Hi -// inclusive and has the specified stride. -type Range16 struct { - Lo uint16 - Hi uint16 - Stride uint16 -} - -// Range32 represents of a range of Unicode code points and is used when one or -// more of the values will not fit in 16 bits. The range runs from Lo to Hi -// inclusive and has the specified stride. Lo and Hi must always be >= 1<<16. -type Range32 struct { - Lo uint32 - Hi uint32 - Stride uint32 -} - -// CaseRange represents a range of Unicode code points for simple (one -// code point to one code point) case conversion. -// The range runs from Lo to Hi inclusive, with a fixed stride of 1. Deltas -// are the number to add to the code point to reach the code point for a -// different case for that character. They may be negative. If zero, it -// means the character is in the corresponding case. There is a special -// case representing sequences of alternating corresponding Upper and Lower -// pairs. It appears with a fixed Delta of -// {UpperLower, UpperLower, UpperLower} -// The constant UpperLower has an otherwise impossible delta value. -type CaseRange struct { - Lo uint32 - Hi uint32 - Delta d -} - -// SpecialCase represents language-specific case mappings such as Turkish. -// Methods of SpecialCase customize (by overriding) the standard mappings. -type SpecialCase []CaseRange - -// BUG(r): There is no mechanism for full case folding, that is, for -// characters that involve multiple runes in the input or output. - -// Indices into the Delta arrays inside CaseRanges for case mapping. -const ( - UpperCase = iota - LowerCase - TitleCase - MaxCase -) - -type d [MaxCase]rune // to make the CaseRanges text shorter - -// If the Delta field of a CaseRange is UpperLower, it means -// this CaseRange represents a sequence of the form (say) -// Upper Lower Upper Lower. -const ( - UpperLower = MaxRune + 1 // (Cannot be a valid delta.) -) - -// linearMax is the maximum size table for linear search for non-Latin1 rune. -// Derived by running 'go test -calibrate'. -const linearMax = 18 - -// is16 reports whether r is in the sorted slice of 16-bit ranges. -func is16(ranges []Range16, r uint16) bool { - if len(ranges) <= linearMax || r <= MaxLatin1 { - for i := range ranges { - range_ := &ranges[i] - if r < range_.Lo { - return false - } - if r <= range_.Hi { - return (r-range_.Lo)%range_.Stride == 0 - } - } - return false - } - - // binary search over ranges - lo := 0 - hi := len(ranges) - for lo < hi { - m := lo + (hi-lo)/2 - range_ := &ranges[m] - if range_.Lo <= r && r <= range_.Hi { - return (r-range_.Lo)%range_.Stride == 0 - } - if r < range_.Lo { - hi = m - } else { - lo = m + 1 - } - } - return false -} - -// is32 reports whether r is in the sorted slice of 32-bit ranges. -func is32(ranges []Range32, r uint32) bool { - if len(ranges) <= linearMax { - for i := range ranges { - range_ := &ranges[i] - if r < range_.Lo { - return false - } - if r <= range_.Hi { - return (r-range_.Lo)%range_.Stride == 0 - } - } - return false - } - - // binary search over ranges - lo := 0 - hi := len(ranges) - for lo < hi { - m := lo + (hi-lo)/2 - range_ := ranges[m] - if range_.Lo <= r && r <= range_.Hi { - return (r-range_.Lo)%range_.Stride == 0 - } - if r < range_.Lo { - hi = m - } else { - lo = m + 1 - } - } - return false -} - -// Is reports whether the rune is in the specified table of ranges. -func Is(rangeTab *RangeTable, r rune) bool { - r16 := rangeTab.R16 - if len(r16) > 0 && r <= rune(r16[len(r16)-1].Hi) { - return is16(r16, uint16(r)) - } - r32 := rangeTab.R32 - if len(r32) > 0 && r >= rune(r32[0].Lo) { - return is32(r32, uint32(r)) - } - return false -} - -func isExcludingLatin(rangeTab *RangeTable, r rune) bool { - r16 := rangeTab.R16 - if off := rangeTab.LatinOffset; len(r16) > off && r <= rune(r16[len(r16)-1].Hi) { - return is16(r16[off:], uint16(r)) - } - r32 := rangeTab.R32 - if len(r32) > 0 && r >= rune(r32[0].Lo) { - return is32(r32, uint32(r)) - } - return false -} - -// IsUpper reports whether the rune is an upper case letter. -func IsUpper(r rune) bool { - // See comment in IsGraphic. - if uint32(r) <= MaxLatin1 { - return properties[uint8(r)]&pLmask == pLu - } - return isExcludingLatin(Upper, r) -} - -// IsLower reports whether the rune is a lower case letter. -func IsLower(r rune) bool { - // See comment in IsGraphic. - if uint32(r) <= MaxLatin1 { - return properties[uint8(r)]&pLmask == pLl - } - return isExcludingLatin(Lower, r) -} - -// IsTitle reports whether the rune is a title case letter. -func IsTitle(r rune) bool { - if r <= MaxLatin1 { - return false - } - return isExcludingLatin(Title, r) -} - -// to maps the rune using the specified case mapping. -func to(_case int, r rune, caseRange []CaseRange) rune { - if _case < 0 || MaxCase <= _case { - return ReplacementChar // as reasonable an error as any - } - // binary search over ranges - lo := 0 - hi := len(caseRange) - for lo < hi { - m := lo + (hi-lo)/2 - cr := caseRange[m] - if rune(cr.Lo) <= r && r <= rune(cr.Hi) { - delta := rune(cr.Delta[_case]) - if delta > MaxRune { - // In an Upper-Lower sequence, which always starts with - // an UpperCase letter, the real deltas always look like: - // {0, 1, 0} UpperCase (Lower is next) - // {-1, 0, -1} LowerCase (Upper, Title are previous) - // The characters at even offsets from the beginning of the - // sequence are upper case; the ones at odd offsets are lower. - // The correct mapping can be done by clearing or setting the low - // bit in the sequence offset. - // The constants UpperCase and TitleCase are even while LowerCase - // is odd so we take the low bit from _case. - return rune(cr.Lo) + ((r-rune(cr.Lo))&^1 | rune(_case&1)) - } - return r + delta - } - if r < rune(cr.Lo) { - hi = m - } else { - lo = m + 1 - } - } - return r -} - -// To maps the rune to the specified case: UpperCase, LowerCase, or TitleCase. -func To(_case int, r rune) rune { - return to(_case, r, CaseRanges) -} - -// ToUpper maps the rune to upper case. -func ToUpper(r rune) rune { - if r <= MaxASCII { - if 'a' <= r && r <= 'z' { - r -= 'a' - 'A' - } - return r - } - return To(UpperCase, r) -} - -// ToLower maps the rune to lower case. -func ToLower(r rune) rune { - if r <= MaxASCII { - if 'A' <= r && r <= 'Z' { - r += 'a' - 'A' - } - return r - } - return To(LowerCase, r) -} - -// ToTitle maps the rune to title case. -func ToTitle(r rune) rune { - if r <= MaxASCII { - if 'a' <= r && r <= 'z' { // title case is upper case for ASCII - r -= 'a' - 'A' - } - return r - } - return To(TitleCase, r) -} - -// ToUpper maps the rune to upper case giving priority to the special mapping. -func (special SpecialCase) ToUpper(r rune) rune { - r1 := to(UpperCase, r, []CaseRange(special)) - if r1 == r { - r1 = ToUpper(r) - } - return r1 -} - -// ToTitle maps the rune to title case giving priority to the special mapping. -func (special SpecialCase) ToTitle(r rune) rune { - r1 := to(TitleCase, r, []CaseRange(special)) - if r1 == r { - r1 = ToTitle(r) - } - return r1 -} - -// ToLower maps the rune to lower case giving priority to the special mapping. -func (special SpecialCase) ToLower(r rune) rune { - r1 := to(LowerCase, r, []CaseRange(special)) - if r1 == r { - r1 = ToLower(r) - } - return r1 -} - -// caseOrbit is defined in tables.go as []foldPair. Right now all the -// entries fit in uint16, so use uint16. If that changes, compilation -// will fail (the constants in the composite literal will not fit in uint16) -// and the types here can change to uint32. -type foldPair struct { - From uint16 - To uint16 -} - -// SimpleFold iterates over Unicode code points equivalent under -// the Unicode-defined simple case folding. Among the code points -// equivalent to rune (including rune itself), SimpleFold returns the -// smallest rune > r if one exists, or else the smallest rune >= 0. -// -// For example: -// SimpleFold('A') = 'a' -// SimpleFold('a') = 'A' -// -// SimpleFold('K') = 'k' -// SimpleFold('k') = '\u212A' (Kelvin symbol, K) -// SimpleFold('\u212A') = 'K' -// -// SimpleFold('1') = '1' -// -func SimpleFold(r rune) rune { - // Consult caseOrbit table for special cases. - lo := 0 - hi := len(caseOrbit) - for lo < hi { - m := lo + (hi-lo)/2 - if rune(caseOrbit[m].From) < r { - lo = m + 1 - } else { - hi = m - } - } - if lo < len(caseOrbit) && rune(caseOrbit[lo].From) == r { - return rune(caseOrbit[lo].To) - } - - // No folding specified. This is a one- or two-element - // equivalence class containing rune and ToLower(rune) - // and ToUpper(rune) if they are different from rune. - if l := ToLower(r); l != r { - return l - } - return ToUpper(r) -} diff --git a/src/pkg/unicode/letter_test.go b/src/pkg/unicode/letter_test.go deleted file mode 100644 index 4ee11fb36..000000000 --- a/src/pkg/unicode/letter_test.go +++ /dev/null @@ -1,535 +0,0 @@ -// Copyright 2009 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. - -package unicode_test - -import ( - "flag" - "fmt" - "runtime" - "sort" - "testing" - . "unicode" -) - -var upperTest = []rune{ - 0x41, - 0xc0, - 0xd8, - 0x100, - 0x139, - 0x14a, - 0x178, - 0x181, - 0x376, - 0x3cf, - 0x1f2a, - 0x2102, - 0x2c00, - 0x2c10, - 0x2c20, - 0xa650, - 0xa722, - 0xff3a, - 0x10400, - 0x1d400, - 0x1d7ca, -} - -var notupperTest = []rune{ - 0x40, - 0x5b, - 0x61, - 0x185, - 0x1b0, - 0x377, - 0x387, - 0x2150, - 0xffff, - 0x10000, -} - -var letterTest = []rune{ - 0x41, - 0x61, - 0xaa, - 0xba, - 0xc8, - 0xdb, - 0xf9, - 0x2ec, - 0x535, - 0x620, - 0x6e6, - 0x93d, - 0xa15, - 0xb99, - 0xdc0, - 0xedd, - 0x1000, - 0x1200, - 0x1312, - 0x1401, - 0x1885, - 0x2c00, - 0xa800, - 0xf900, - 0xfa30, - 0xffda, - 0xffdc, - 0x10000, - 0x10300, - 0x10400, - 0x20000, - 0x2f800, - 0x2fa1d, -} - -var notletterTest = []rune{ - 0x20, - 0x35, - 0x375, - 0x619, - 0x700, - 0xfffe, - 0x1ffff, - 0x10ffff, -} - -// Contains all the special cased Latin-1 chars. -var spaceTest = []rune{ - 0x09, - 0x0a, - 0x0b, - 0x0c, - 0x0d, - 0x20, - 0x85, - 0xA0, - 0x2000, - 0x3000, -} - -type caseT struct { - cas int - in, out rune -} - -var caseTest = []caseT{ - // errors - {-1, '\n', 0xFFFD}, - {UpperCase, -1, -1}, - {UpperCase, 1 << 30, 1 << 30}, - - // ASCII (special-cased so test carefully) - {UpperCase, '\n', '\n'}, - {UpperCase, 'a', 'A'}, - {UpperCase, 'A', 'A'}, - {UpperCase, '7', '7'}, - {LowerCase, '\n', '\n'}, - {LowerCase, 'a', 'a'}, - {LowerCase, 'A', 'a'}, - {LowerCase, '7', '7'}, - {TitleCase, '\n', '\n'}, - {TitleCase, 'a', 'A'}, - {TitleCase, 'A', 'A'}, - {TitleCase, '7', '7'}, - - // Latin-1: easy to read the tests! - {UpperCase, 0x80, 0x80}, - {UpperCase, 'Å', 'Å'}, - {UpperCase, 'å', 'Å'}, - {LowerCase, 0x80, 0x80}, - {LowerCase, 'Å', 'å'}, - {LowerCase, 'å', 'å'}, - {TitleCase, 0x80, 0x80}, - {TitleCase, 'Å', 'Å'}, - {TitleCase, 'å', 'Å'}, - - // 0131;LATIN SMALL LETTER DOTLESS I;Ll;0;L;;;;;N;;;0049;;0049 - {UpperCase, 0x0131, 'I'}, - {LowerCase, 0x0131, 0x0131}, - {TitleCase, 0x0131, 'I'}, - - // 0133;LATIN SMALL LIGATURE IJ;Ll;0;L;<compat> 0069 006A;;;;N;LATIN SMALL LETTER I J;;0132;;0132 - {UpperCase, 0x0133, 0x0132}, - {LowerCase, 0x0133, 0x0133}, - {TitleCase, 0x0133, 0x0132}, - - // 212A;KELVIN SIGN;Lu;0;L;004B;;;;N;DEGREES KELVIN;;;006B; - {UpperCase, 0x212A, 0x212A}, - {LowerCase, 0x212A, 'k'}, - {TitleCase, 0x212A, 0x212A}, - - // From an UpperLower sequence - // A640;CYRILLIC CAPITAL LETTER ZEMLYA;Lu;0;L;;;;;N;;;;A641; - {UpperCase, 0xA640, 0xA640}, - {LowerCase, 0xA640, 0xA641}, - {TitleCase, 0xA640, 0xA640}, - // A641;CYRILLIC SMALL LETTER ZEMLYA;Ll;0;L;;;;;N;;;A640;;A640 - {UpperCase, 0xA641, 0xA640}, - {LowerCase, 0xA641, 0xA641}, - {TitleCase, 0xA641, 0xA640}, - // A64E;CYRILLIC CAPITAL LETTER NEUTRAL YER;Lu;0;L;;;;;N;;;;A64F; - {UpperCase, 0xA64E, 0xA64E}, - {LowerCase, 0xA64E, 0xA64F}, - {TitleCase, 0xA64E, 0xA64E}, - // A65F;CYRILLIC SMALL LETTER YN;Ll;0;L;;;;;N;;;A65E;;A65E - {UpperCase, 0xA65F, 0xA65E}, - {LowerCase, 0xA65F, 0xA65F}, - {TitleCase, 0xA65F, 0xA65E}, - - // From another UpperLower sequence - // 0139;LATIN CAPITAL LETTER L WITH ACUTE;Lu;0;L;004C 0301;;;;N;LATIN CAPITAL LETTER L ACUTE;;;013A; - {UpperCase, 0x0139, 0x0139}, - {LowerCase, 0x0139, 0x013A}, - {TitleCase, 0x0139, 0x0139}, - // 013F;LATIN CAPITAL LETTER L WITH MIDDLE DOT;Lu;0;L;<compat> 004C 00B7;;;;N;;;;0140; - {UpperCase, 0x013f, 0x013f}, - {LowerCase, 0x013f, 0x0140}, - {TitleCase, 0x013f, 0x013f}, - // 0148;LATIN SMALL LETTER N WITH CARON;Ll;0;L;006E 030C;;;;N;LATIN SMALL LETTER N HACEK;;0147;;0147 - {UpperCase, 0x0148, 0x0147}, - {LowerCase, 0x0148, 0x0148}, - {TitleCase, 0x0148, 0x0147}, - - // Last block in the 5.1.0 table - // 10400;DESERET CAPITAL LETTER LONG I;Lu;0;L;;;;;N;;;;10428; - {UpperCase, 0x10400, 0x10400}, - {LowerCase, 0x10400, 0x10428}, - {TitleCase, 0x10400, 0x10400}, - // 10427;DESERET CAPITAL LETTER EW;Lu;0;L;;;;;N;;;;1044F; - {UpperCase, 0x10427, 0x10427}, - {LowerCase, 0x10427, 0x1044F}, - {TitleCase, 0x10427, 0x10427}, - // 10428;DESERET SMALL LETTER LONG I;Ll;0;L;;;;;N;;;10400;;10400 - {UpperCase, 0x10428, 0x10400}, - {LowerCase, 0x10428, 0x10428}, - {TitleCase, 0x10428, 0x10400}, - // 1044F;DESERET SMALL LETTER EW;Ll;0;L;;;;;N;;;10427;;10427 - {UpperCase, 0x1044F, 0x10427}, - {LowerCase, 0x1044F, 0x1044F}, - {TitleCase, 0x1044F, 0x10427}, - - // First one not in the 5.1.0 table - // 10450;SHAVIAN LETTER PEEP;Lo;0;L;;;;;N;;;;; - {UpperCase, 0x10450, 0x10450}, - {LowerCase, 0x10450, 0x10450}, - {TitleCase, 0x10450, 0x10450}, - - // Non-letters with case. - {LowerCase, 0x2161, 0x2171}, - {UpperCase, 0x0345, 0x0399}, -} - -func TestIsLetter(t *testing.T) { - for _, r := range upperTest { - if !IsLetter(r) { - t.Errorf("IsLetter(U+%04X) = false, want true", r) - } - } - for _, r := range letterTest { - if !IsLetter(r) { - t.Errorf("IsLetter(U+%04X) = false, want true", r) - } - } - for _, r := range notletterTest { - if IsLetter(r) { - t.Errorf("IsLetter(U+%04X) = true, want false", r) - } - } -} - -func TestIsUpper(t *testing.T) { - for _, r := range upperTest { - if !IsUpper(r) { - t.Errorf("IsUpper(U+%04X) = false, want true", r) - } - } - for _, r := range notupperTest { - if IsUpper(r) { - t.Errorf("IsUpper(U+%04X) = true, want false", r) - } - } - for _, r := range notletterTest { - if IsUpper(r) { - t.Errorf("IsUpper(U+%04X) = true, want false", r) - } - } -} - -func caseString(c int) string { - switch c { - case UpperCase: - return "UpperCase" - case LowerCase: - return "LowerCase" - case TitleCase: - return "TitleCase" - } - return "ErrorCase" -} - -func TestTo(t *testing.T) { - for _, c := range caseTest { - r := To(c.cas, c.in) - if c.out != r { - t.Errorf("To(U+%04X, %s) = U+%04X want U+%04X", c.in, caseString(c.cas), r, c.out) - } - } -} - -func TestToUpperCase(t *testing.T) { - for _, c := range caseTest { - if c.cas != UpperCase { - continue - } - r := ToUpper(c.in) - if c.out != r { - t.Errorf("ToUpper(U+%04X) = U+%04X want U+%04X", c.in, r, c.out) - } - } -} - -func TestToLowerCase(t *testing.T) { - for _, c := range caseTest { - if c.cas != LowerCase { - continue - } - r := ToLower(c.in) - if c.out != r { - t.Errorf("ToLower(U+%04X) = U+%04X want U+%04X", c.in, r, c.out) - } - } -} - -func TestToTitleCase(t *testing.T) { - for _, c := range caseTest { - if c.cas != TitleCase { - continue - } - r := ToTitle(c.in) - if c.out != r { - t.Errorf("ToTitle(U+%04X) = U+%04X want U+%04X", c.in, r, c.out) - } - } -} - -func TestIsSpace(t *testing.T) { - for _, c := range spaceTest { - if !IsSpace(c) { - t.Errorf("IsSpace(U+%04X) = false; want true", c) - } - } - for _, c := range letterTest { - if IsSpace(c) { - t.Errorf("IsSpace(U+%04X) = true; want false", c) - } - } -} - -// Check that the optimizations for IsLetter etc. agree with the tables. -// We only need to check the Latin-1 range. -func TestLetterOptimizations(t *testing.T) { - for i := rune(0); i <= MaxLatin1; i++ { - if Is(Letter, i) != IsLetter(i) { - t.Errorf("IsLetter(U+%04X) disagrees with Is(Letter)", i) - } - if Is(Upper, i) != IsUpper(i) { - t.Errorf("IsUpper(U+%04X) disagrees with Is(Upper)", i) - } - if Is(Lower, i) != IsLower(i) { - t.Errorf("IsLower(U+%04X) disagrees with Is(Lower)", i) - } - if Is(Title, i) != IsTitle(i) { - t.Errorf("IsTitle(U+%04X) disagrees with Is(Title)", i) - } - if Is(White_Space, i) != IsSpace(i) { - t.Errorf("IsSpace(U+%04X) disagrees with Is(White_Space)", i) - } - if To(UpperCase, i) != ToUpper(i) { - t.Errorf("ToUpper(U+%04X) disagrees with To(Upper)", i) - } - if To(LowerCase, i) != ToLower(i) { - t.Errorf("ToLower(U+%04X) disagrees with To(Lower)", i) - } - if To(TitleCase, i) != ToTitle(i) { - t.Errorf("ToTitle(U+%04X) disagrees with To(Title)", i) - } - } -} - -func TestTurkishCase(t *testing.T) { - lower := []rune("abcçdefgğhıijklmnoöprsştuüvyz") - upper := []rune("ABCÇDEFGĞHIİJKLMNOÖPRSŞTUÜVYZ") - for i, l := range lower { - u := upper[i] - if TurkishCase.ToLower(l) != l { - t.Errorf("lower(U+%04X) is U+%04X not U+%04X", l, TurkishCase.ToLower(l), l) - } - if TurkishCase.ToUpper(u) != u { - t.Errorf("upper(U+%04X) is U+%04X not U+%04X", u, TurkishCase.ToUpper(u), u) - } - if TurkishCase.ToUpper(l) != u { - t.Errorf("upper(U+%04X) is U+%04X not U+%04X", l, TurkishCase.ToUpper(l), u) - } - if TurkishCase.ToLower(u) != l { - t.Errorf("lower(U+%04X) is U+%04X not U+%04X", u, TurkishCase.ToLower(l), l) - } - if TurkishCase.ToTitle(u) != u { - t.Errorf("title(U+%04X) is U+%04X not U+%04X", u, TurkishCase.ToTitle(u), u) - } - if TurkishCase.ToTitle(l) != u { - t.Errorf("title(U+%04X) is U+%04X not U+%04X", l, TurkishCase.ToTitle(l), u) - } - } -} - -var simpleFoldTests = []string{ - // SimpleFold(x) returns the next equivalent rune > x or wraps - // around to smaller values. - - // Easy cases. - "Aa", - "δΔ", - - // ASCII special cases. - "KkK", - "Ssſ", - - // Non-ASCII special cases. - "ρϱΡ", - "ͅΙιι", - - // Extra special cases: has lower/upper but no case fold. - "İ", - "ı", -} - -func TestSimpleFold(t *testing.T) { - for _, tt := range simpleFoldTests { - cycle := []rune(tt) - r := cycle[len(cycle)-1] - for _, out := range cycle { - if r := SimpleFold(r); r != out { - t.Errorf("SimpleFold(%#U) = %#U, want %#U", r, r, out) - } - r = out - } - } -} - -// Running 'go test -calibrate' runs the calibration to find a plausible -// cutoff point for linear search of a range list vs. binary search. -// We create a fake table and then time how long it takes to do a -// sequence of searches within that table, for all possible inputs -// relative to the ranges (something before all, in each, between each, after all). -// This assumes that all possible runes are equally likely. -// In practice most runes are ASCII so this is a conservative estimate -// of an effective cutoff value. In practice we could probably set it higher -// than what this function recommends. - -var calibrate = flag.Bool("calibrate", false, "compute crossover for linear vs. binary search") - -func TestCalibrate(t *testing.T) { - if !*calibrate { - return - } - - if runtime.GOARCH == "amd64" { - fmt.Printf("warning: running calibration on %s\n", runtime.GOARCH) - } - - // Find the point where binary search wins by more than 10%. - // The 10% bias gives linear search an edge when they're close, - // because on predominantly ASCII inputs linear search is even - // better than our benchmarks measure. - n := sort.Search(64, func(n int) bool { - tab := fakeTable(n) - blinear := func(b *testing.B) { - tab := tab - max := n*5 + 20 - for i := 0; i < b.N; i++ { - for j := 0; j <= max; j++ { - linear(tab, uint16(j)) - } - } - } - bbinary := func(b *testing.B) { - tab := tab - max := n*5 + 20 - for i := 0; i < b.N; i++ { - for j := 0; j <= max; j++ { - binary(tab, uint16(j)) - } - } - } - bmlinear := testing.Benchmark(blinear) - bmbinary := testing.Benchmark(bbinary) - fmt.Printf("n=%d: linear=%d binary=%d\n", n, bmlinear.NsPerOp(), bmbinary.NsPerOp()) - return bmlinear.NsPerOp()*100 > bmbinary.NsPerOp()*110 - }) - fmt.Printf("calibration: linear cutoff = %d\n", n) -} - -func fakeTable(n int) []Range16 { - var r16 []Range16 - for i := 0; i < n; i++ { - r16 = append(r16, Range16{uint16(i*5 + 10), uint16(i*5 + 12), 1}) - } - return r16 -} - -func linear(ranges []Range16, r uint16) bool { - for i := range ranges { - range_ := &ranges[i] - if r < range_.Lo { - return false - } - if r <= range_.Hi { - return (r-range_.Lo)%range_.Stride == 0 - } - } - return false -} - -func binary(ranges []Range16, r uint16) bool { - // binary search over ranges - lo := 0 - hi := len(ranges) - for lo < hi { - m := lo + (hi-lo)/2 - range_ := &ranges[m] - if range_.Lo <= r && r <= range_.Hi { - return (r-range_.Lo)%range_.Stride == 0 - } - if r < range_.Lo { - hi = m - } else { - lo = m + 1 - } - } - return false -} - -func TestLatinOffset(t *testing.T) { - var maps = []map[string]*RangeTable{ - Categories, - FoldCategory, - FoldScript, - Properties, - Scripts, - } - for _, m := range maps { - for name, tab := range m { - i := 0 - for i < len(tab.R16) && tab.R16[i].Hi <= MaxLatin1 { - i++ - } - if tab.LatinOffset != i { - t.Errorf("%s: LatinOffset=%d, want %d", name, tab.LatinOffset, i) - } - } - } -} diff --git a/src/pkg/unicode/maketables.go b/src/pkg/unicode/maketables.go deleted file mode 100644 index 8116ab8a4..000000000 --- a/src/pkg/unicode/maketables.go +++ /dev/null @@ -1,1320 +0,0 @@ -// Copyright 2009 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 - -// Unicode table generator. -// Data read from the web. - -package main - -import ( - "bufio" - "flag" - "fmt" - "log" - "net/http" - "os" - "path/filepath" - "regexp" - "sort" - "strconv" - "strings" - "unicode" -) - -func main() { - flag.Parse() - loadChars() // always needed - loadCasefold() - printCategories() - printScriptOrProperty(false) - printScriptOrProperty(true) - printCases() - printLatinProperties() - printCasefold() - printSizes() -} - -var dataURL = flag.String("data", "", "full URL for UnicodeData.txt; defaults to --url/UnicodeData.txt") -var casefoldingURL = flag.String("casefolding", "", "full URL for CaseFolding.txt; defaults to --url/CaseFolding.txt") -var url = flag.String("url", - "http://www.unicode.org/Public/6.3.0/ucd/", - "URL of Unicode database directory") -var tablelist = flag.String("tables", - "all", - "comma-separated list of which tables to generate; can be letter") -var scriptlist = flag.String("scripts", - "all", - "comma-separated list of which script tables to generate") -var proplist = flag.String("props", - "all", - "comma-separated list of which property tables to generate") -var cases = flag.Bool("cases", - true, - "generate case tables") -var test = flag.Bool("test", - false, - "test existing tables; can be used to compare web data with package data") -var localFiles = flag.Bool("local", - false, - "data files have been copied to current directory; for debugging only") - -var scriptRe = regexp.MustCompile(`^([0-9A-F]+)(\.\.[0-9A-F]+)? *; ([A-Za-z_]+)$`) -var logger = log.New(os.Stderr, "", log.Lshortfile) - -type reader struct { - *bufio.Reader - fd *os.File - resp *http.Response -} - -func open(url string) *reader { - file := filepath.Base(url) - if *localFiles { - fd, err := os.Open(file) - if err != nil { - logger.Fatal(err) - } - return &reader{bufio.NewReader(fd), fd, nil} - } - resp, err := http.Get(url) - if err != nil { - logger.Fatal(err) - } - if resp.StatusCode != 200 { - logger.Fatalf("bad GET status for %s: %d", file, resp.Status) - } - return &reader{bufio.NewReader(resp.Body), nil, resp} - -} - -func (r *reader) close() { - if r.fd != nil { - r.fd.Close() - } else { - r.resp.Body.Close() - } -} - -var category = map[string]bool{ - // Nd Lu etc. - // We use one-character names to identify merged categories - "L": true, // Lu Ll Lt Lm Lo - "P": true, // Pc Pd Ps Pe Pu Pf Po - "M": true, // Mn Mc Me - "N": true, // Nd Nl No - "S": true, // Sm Sc Sk So - "Z": true, // Zs Zl Zp - "C": true, // Cc Cf Cs Co Cn -} - -// UnicodeData.txt has form: -// 0037;DIGIT SEVEN;Nd;0;EN;;7;7;7;N;;;;; -// 007A;LATIN SMALL LETTER Z;Ll;0;L;;;;;N;;;005A;;005A -// See http://www.unicode.org/reports/tr44/ for a full explanation -// The fields: -const ( - FCodePoint = iota - FName - FGeneralCategory - FCanonicalCombiningClass - FBidiClass - FDecompositionTypeAndMapping - FNumericType - FNumericDigit // If a decimal digit. - FNumericValue // Includes non-decimal, e.g. U+2155=1/5 - FBidiMirrored - FUnicode1Name - FISOComment - FSimpleUppercaseMapping - FSimpleLowercaseMapping - FSimpleTitlecaseMapping - NumField - - MaxChar = 0x10FFFF // anything above this shouldn't exist -) - -var fieldName = []string{ - FCodePoint: "CodePoint", - FName: "Name", - FGeneralCategory: "GeneralCategory", - FCanonicalCombiningClass: "CanonicalCombiningClass", - FBidiClass: "BidiClass", - FDecompositionTypeAndMapping: "DecompositionTypeAndMapping", - FNumericType: "NumericType", - FNumericDigit: "NumericDigit", - FNumericValue: "NumericValue", - FBidiMirrored: "BidiMirrored", - FUnicode1Name: "Unicode1Name", - FISOComment: "ISOComment", - FSimpleUppercaseMapping: "SimpleUppercaseMapping", - FSimpleLowercaseMapping: "SimpleLowercaseMapping", - FSimpleTitlecaseMapping: "SimpleTitlecaseMapping", -} - -// This contains only the properties we're interested in. -type Char struct { - field []string // debugging only; could be deleted if we take out char.dump() - codePoint rune // if zero, this index is not a valid code point. - category string - upperCase rune - lowerCase rune - titleCase rune - foldCase rune // simple case folding - caseOrbit rune // next in simple case folding orbit -} - -// Scripts.txt has form: -// A673 ; Cyrillic # Po SLAVONIC ASTERISK -// A67C..A67D ; Cyrillic # Mn [2] COMBINING CYRILLIC KAVYKA..COMBINING CYRILLIC PAYEROK -// See http://www.unicode.org/Public/5.1.0/ucd/UCD.html for full explanation - -type Script struct { - lo, hi uint32 // range of code points - script string -} - -var chars = make([]Char, MaxChar+1) -var scripts = make(map[string][]Script) -var props = make(map[string][]Script) // a property looks like a script; can share the format - -var lastChar rune = 0 - -// In UnicodeData.txt, some ranges are marked like this: -// 3400;<CJK Ideograph Extension A, First>;Lo;0;L;;;;;N;;;;; -// 4DB5;<CJK Ideograph Extension A, Last>;Lo;0;L;;;;;N;;;;; -// parseCategory returns a state variable indicating the weirdness. -type State int - -const ( - SNormal State = iota // known to be zero for the type - SFirst - SLast - SMissing -) - -func parseCategory(line string) (state State) { - field := strings.Split(line, ";") - if len(field) != NumField { - logger.Fatalf("%5s: %d fields (expected %d)\n", line, len(field), NumField) - } - point, err := strconv.ParseUint(field[FCodePoint], 16, 64) - if err != nil { - logger.Fatalf("%.5s...: %s", line, err) - } - lastChar = rune(point) - if point == 0 { - return // not interesting and we use 0 as unset - } - if point > MaxChar { - return - } - char := &chars[point] - char.field = field - if char.codePoint != 0 { - logger.Fatalf("point %U reused", point) - } - char.codePoint = lastChar - char.category = field[FGeneralCategory] - category[char.category] = true - switch char.category { - case "Nd": - // Decimal digit - _, err := strconv.Atoi(field[FNumericValue]) - if err != nil { - logger.Fatalf("%U: bad numeric field: %s", point, err) - } - case "Lu": - char.letter(field[FCodePoint], field[FSimpleLowercaseMapping], field[FSimpleTitlecaseMapping]) - case "Ll": - char.letter(field[FSimpleUppercaseMapping], field[FCodePoint], field[FSimpleTitlecaseMapping]) - case "Lt": - char.letter(field[FSimpleUppercaseMapping], field[FSimpleLowercaseMapping], field[FCodePoint]) - default: - char.letter(field[FSimpleUppercaseMapping], field[FSimpleLowercaseMapping], field[FSimpleTitlecaseMapping]) - } - switch { - case strings.Index(field[FName], ", First>") > 0: - state = SFirst - case strings.Index(field[FName], ", Last>") > 0: - state = SLast - } - return -} - -func (char *Char) dump(s string) { - fmt.Print(s, " ") - for i := 0; i < len(char.field); i++ { - fmt.Printf("%s:%q ", fieldName[i], char.field[i]) - } - fmt.Print("\n") -} - -func (char *Char) letter(u, l, t string) { - char.upperCase = char.letterValue(u, "U") - char.lowerCase = char.letterValue(l, "L") - char.titleCase = char.letterValue(t, "T") -} - -func (char *Char) letterValue(s string, cas string) rune { - if s == "" { - return 0 - } - v, err := strconv.ParseUint(s, 16, 64) - if err != nil { - char.dump(cas) - logger.Fatalf("%U: bad letter(%s): %s", char.codePoint, s, err) - } - return rune(v) -} - -func allCategories() []string { - a := make([]string, 0, len(category)) - for k := range category { - a = append(a, k) - } - sort.Strings(a) - return a -} - -func all(scripts map[string][]Script) []string { - a := make([]string, 0, len(scripts)) - for k := range scripts { - a = append(a, k) - } - sort.Strings(a) - return a -} - -func allCatFold(m map[string]map[rune]bool) []string { - a := make([]string, 0, len(m)) - for k := range m { - a = append(a, k) - } - sort.Strings(a) - return a -} - -// Extract the version number from the URL -func version() string { - // Break on slashes and look for the first numeric field - fields := strings.Split(*url, "/") - for _, f := range fields { - if len(f) > 0 && '0' <= f[0] && f[0] <= '9' { - return f - } - } - logger.Fatal("unknown version") - return "Unknown" -} - -func categoryOp(code rune, class uint8) bool { - category := chars[code].category - return len(category) > 0 && category[0] == class -} - -func loadChars() { - if *dataURL == "" { - flag.Set("data", *url+"UnicodeData.txt") - } - input := open(*dataURL) - defer input.close() - scanner := bufio.NewScanner(input) - var first rune = 0 - for scanner.Scan() { - switch parseCategory(scanner.Text()) { - case SNormal: - if first != 0 { - logger.Fatalf("bad state normal at %U", lastChar) - } - case SFirst: - if first != 0 { - logger.Fatalf("bad state first at %U", lastChar) - } - first = lastChar - case SLast: - if first == 0 { - logger.Fatalf("bad state last at %U", lastChar) - } - for i := first + 1; i <= lastChar; i++ { - chars[i] = chars[first] - chars[i].codePoint = i - } - first = 0 - } - } - if scanner.Err() != nil { - logger.Fatal(scanner.Err()) - } -} - -func loadCasefold() { - if *casefoldingURL == "" { - flag.Set("casefolding", *url+"CaseFolding.txt") - } - input := open(*casefoldingURL) - defer input.close() - scanner := bufio.NewScanner(input) - for scanner.Scan() { - line := scanner.Text() - if len(line) == 0 || line[0] == '#' || len(strings.TrimSpace(line)) == 0 { - continue - } - field := strings.Split(line, "; ") - if len(field) != 4 { - logger.Fatalf("CaseFolding.txt %.5s...: %d fields (expected %d)\n", line, len(field), 4) - } - kind := field[1] - if kind != "C" && kind != "S" { - // Only care about 'common' and 'simple' foldings. - continue - } - p1, err := strconv.ParseUint(field[0], 16, 64) - if err != nil { - logger.Fatalf("CaseFolding.txt %.5s...: %s", line, err) - } - p2, err := strconv.ParseUint(field[2], 16, 64) - if err != nil { - logger.Fatalf("CaseFolding.txt %.5s...: %s", line, err) - } - chars[p1].foldCase = rune(p2) - } - if scanner.Err() != nil { - logger.Fatal(scanner.Err()) - } -} - -const progHeader = `// Copyright 2013 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. - -// Generated by running -// maketables --tables=%s --data=%s --casefolding=%s -// DO NOT EDIT - -package unicode - -` - -func printCategories() { - if *tablelist == "" { - return - } - // Find out which categories to dump - list := strings.Split(*tablelist, ",") - if *tablelist == "all" { - list = allCategories() - } - if *test { - fullCategoryTest(list) - return - } - fmt.Printf(progHeader, *tablelist, *dataURL, *casefoldingURL) - - fmt.Println("// Version is the Unicode edition from which the tables are derived.") - fmt.Printf("const Version = %q\n\n", version()) - - if *tablelist == "all" { - fmt.Println("// Categories is the set of Unicode category tables.") - fmt.Println("var Categories = map[string] *RangeTable {") - for _, k := range allCategories() { - fmt.Printf("\t%q: %s,\n", k, k) - } - fmt.Print("}\n\n") - } - - decl := make(sort.StringSlice, len(list)) - ndecl := 0 - for _, name := range list { - if _, ok := category[name]; !ok { - logger.Fatal("unknown category", name) - } - // We generate an UpperCase name to serve as concise documentation and an _UnderScored - // name to store the data. This stops godoc dumping all the tables but keeps them - // available to clients. - // Cases deserving special comments - varDecl := "" - switch name { - case "C": - varDecl = "\tOther = _C; // Other/C is the set of Unicode control and special characters, category C.\n" - varDecl += "\tC = _C\n" - case "L": - varDecl = "\tLetter = _L; // Letter/L is the set of Unicode letters, category L.\n" - varDecl += "\tL = _L\n" - case "M": - varDecl = "\tMark = _M; // Mark/M is the set of Unicode mark characters, category M.\n" - varDecl += "\tM = _M\n" - case "N": - varDecl = "\tNumber = _N; // Number/N is the set of Unicode number characters, category N.\n" - varDecl += "\tN = _N\n" - case "P": - varDecl = "\tPunct = _P; // Punct/P is the set of Unicode punctuation characters, category P.\n" - varDecl += "\tP = _P\n" - case "S": - varDecl = "\tSymbol = _S; // Symbol/S is the set of Unicode symbol characters, category S.\n" - varDecl += "\tS = _S\n" - case "Z": - varDecl = "\tSpace = _Z; // Space/Z is the set of Unicode space characters, category Z.\n" - varDecl += "\tZ = _Z\n" - case "Nd": - varDecl = "\tDigit = _Nd; // Digit is the set of Unicode characters with the \"decimal digit\" property.\n" - case "Lu": - varDecl = "\tUpper = _Lu; // Upper is the set of Unicode upper case letters.\n" - case "Ll": - varDecl = "\tLower = _Ll; // Lower is the set of Unicode lower case letters.\n" - case "Lt": - varDecl = "\tTitle = _Lt; // Title is the set of Unicode title case letters.\n" - } - if len(name) > 1 { - varDecl += fmt.Sprintf( - "\t%s = _%s; // %s is the set of Unicode characters in category %s.\n", - name, name, name, name) - } - decl[ndecl] = varDecl - ndecl++ - if len(name) == 1 { // unified categories - decl := fmt.Sprintf("var _%s = &RangeTable{\n", name) - dumpRange( - decl, - func(code rune) bool { return categoryOp(code, name[0]) }) - continue - } - dumpRange( - fmt.Sprintf("var _%s = &RangeTable{\n", name), - func(code rune) bool { return chars[code].category == name }) - } - decl.Sort() - fmt.Println("// These variables have type *RangeTable.") - fmt.Println("var (") - for _, d := range decl { - fmt.Print(d) - } - fmt.Print(")\n\n") -} - -type Op func(code rune) bool - -const format = "\t\t{0x%04x, 0x%04x, %d},\n" - -func dumpRange(header string, inCategory Op) { - fmt.Print(header) - next := rune(0) - latinOffset := 0 - fmt.Print("\tR16: []Range16{\n") - // one Range for each iteration - count := &range16Count - size := 16 - for { - // look for start of range - for next < rune(len(chars)) && !inCategory(next) { - next++ - } - if next >= rune(len(chars)) { - // no characters remain - break - } - - // start of range - lo := next - hi := next - stride := rune(1) - // accept lo - next++ - // look for another character to set the stride - for next < rune(len(chars)) && !inCategory(next) { - next++ - } - if next >= rune(len(chars)) { - // no more characters - fmt.Printf(format, lo, hi, stride) - break - } - // set stride - stride = next - lo - // check for length of run. next points to first jump in stride - for i := next; i < rune(len(chars)); i++ { - if inCategory(i) == (((i - lo) % stride) == 0) { - // accept - if inCategory(i) { - hi = i - } - } else { - // no more characters in this run - break - } - } - if uint32(hi) <= unicode.MaxLatin1 { - latinOffset++ - } - size, count = printRange(uint32(lo), uint32(hi), uint32(stride), size, count) - // next range: start looking where this range ends - next = hi + 1 - } - fmt.Print("\t},\n") - if latinOffset > 0 { - fmt.Printf("\tLatinOffset: %d,\n", latinOffset) - } - fmt.Print("}\n\n") -} - -func printRange(lo, hi, stride uint32, size int, count *int) (int, *int) { - if size == 16 && hi >= 1<<16 { - if lo < 1<<16 { - if lo+stride != hi { - logger.Fatalf("unexpected straddle: %U %U %d", lo, hi, stride) - } - // No range contains U+FFFF as an instance, so split - // the range into two entries. That way we can maintain - // the invariant that R32 contains only >= 1<<16. - fmt.Printf(format, lo, lo, 1) - lo = hi - stride = 1 - *count++ - } - fmt.Print("\t},\n") - fmt.Print("\tR32: []Range32{\n") - size = 32 - count = &range32Count - } - fmt.Printf(format, lo, hi, stride) - *count++ - return size, count -} - -func fullCategoryTest(list []string) { - for _, name := range list { - if _, ok := category[name]; !ok { - logger.Fatal("unknown category", name) - } - r, ok := unicode.Categories[name] - if !ok && len(name) > 1 { - logger.Fatalf("unknown table %q", name) - } - if len(name) == 1 { - verifyRange(name, func(code rune) bool { return categoryOp(code, name[0]) }, r) - } else { - verifyRange( - name, - func(code rune) bool { return chars[code].category == name }, - r) - } - } -} - -func verifyRange(name string, inCategory Op, table *unicode.RangeTable) { - count := 0 - for j := range chars { - i := rune(j) - web := inCategory(i) - pkg := unicode.Is(table, i) - if web != pkg { - fmt.Fprintf(os.Stderr, "%s: %U: web=%t pkg=%t\n", name, i, web, pkg) - count++ - if count > 10 { - break - } - } - } -} - -func parseScript(line string, scripts map[string][]Script) { - comment := strings.Index(line, "#") - if comment >= 0 { - line = line[0:comment] - } - line = strings.TrimSpace(line) - if len(line) == 0 { - return - } - field := strings.Split(line, ";") - if len(field) != 2 { - logger.Fatalf("%s: %d fields (expected 2)\n", line, len(field)) - } - matches := scriptRe.FindStringSubmatch(line) - if len(matches) != 4 { - logger.Fatalf("%s: %d matches (expected 3)\n", line, len(matches)) - } - lo, err := strconv.ParseUint(matches[1], 16, 64) - if err != nil { - logger.Fatalf("%.5s...: %s", line, err) - } - hi := lo - if len(matches[2]) > 2 { // ignore leading .. - hi, err = strconv.ParseUint(matches[2][2:], 16, 64) - if err != nil { - logger.Fatalf("%.5s...: %s", line, err) - } - } - name := matches[3] - scripts[name] = append(scripts[name], Script{uint32(lo), uint32(hi), name}) -} - -// The script tables have a lot of adjacent elements. Fold them together. -func foldAdjacent(r []Script) []unicode.Range32 { - s := make([]unicode.Range32, 0, len(r)) - j := 0 - for i := 0; i < len(r); i++ { - if j > 0 && r[i].lo == s[j-1].Hi+1 { - s[j-1].Hi = r[i].hi - } else { - s = s[0 : j+1] - s[j] = unicode.Range32{ - Lo: uint32(r[i].lo), - Hi: uint32(r[i].hi), - Stride: 1, - } - j++ - } - } - return s -} - -func fullScriptTest(list []string, installed map[string]*unicode.RangeTable, scripts map[string][]Script) { - for _, name := range list { - if _, ok := scripts[name]; !ok { - logger.Fatal("unknown script", name) - } - _, ok := installed[name] - if !ok { - logger.Fatal("unknown table", name) - } - for _, script := range scripts[name] { - for r := script.lo; r <= script.hi; r++ { - if !unicode.Is(installed[name], rune(r)) { - fmt.Fprintf(os.Stderr, "%U: not in script %s\n", r, name) - } - } - } - } -} - -// PropList.txt has the same format as Scripts.txt so we can share its parser. -func printScriptOrProperty(doProps bool) { - flag := "scripts" - flaglist := *scriptlist - file := "Scripts.txt" - table := scripts - installed := unicode.Scripts - if doProps { - flag = "props" - flaglist = *proplist - file = "PropList.txt" - table = props - installed = unicode.Properties - } - if flaglist == "" { - return - } - input := open(*url + file) - scanner := bufio.NewScanner(input) - for scanner.Scan() { - parseScript(scanner.Text(), table) - } - if scanner.Err() != nil { - logger.Fatal(scanner.Err()) - } - input.close() - - // Find out which scripts to dump - list := strings.Split(flaglist, ",") - if flaglist == "all" { - list = all(table) - } - if *test { - fullScriptTest(list, installed, table) - return - } - - fmt.Printf( - "// Generated by running\n"+ - "// maketables --%s=%s --url=%s\n"+ - "// DO NOT EDIT\n\n", - flag, - flaglist, - *url) - if flaglist == "all" { - if doProps { - fmt.Println("// Properties is the set of Unicode property tables.") - fmt.Println("var Properties = map[string] *RangeTable{") - } else { - fmt.Println("// Scripts is the set of Unicode script tables.") - fmt.Println("var Scripts = map[string] *RangeTable{") - } - for _, k := range all(table) { - fmt.Printf("\t%q: %s,\n", k, k) - } - fmt.Print("}\n\n") - } - - decl := make(sort.StringSlice, len(list)) - ndecl := 0 - for _, name := range list { - if doProps { - decl[ndecl] = fmt.Sprintf( - "\t%s = _%s;\t// %s is the set of Unicode characters with property %s.\n", - name, name, name, name) - } else { - decl[ndecl] = fmt.Sprintf( - "\t%s = _%s;\t// %s is the set of Unicode characters in script %s.\n", - name, name, name, name) - } - ndecl++ - fmt.Printf("var _%s = &RangeTable {\n", name) - ranges := foldAdjacent(table[name]) - fmt.Print("\tR16: []Range16{\n") - size := 16 - count := &range16Count - for _, s := range ranges { - size, count = printRange(s.Lo, s.Hi, s.Stride, size, count) - } - fmt.Print("\t},\n") - if off := findLatinOffset(ranges); off > 0 { - fmt.Printf("\tLatinOffset: %d,\n", off) - } - fmt.Print("}\n\n") - } - decl.Sort() - fmt.Println("// These variables have type *RangeTable.") - fmt.Println("var (") - for _, d := range decl { - fmt.Print(d) - } - fmt.Print(")\n\n") -} - -func findLatinOffset(ranges []unicode.Range32) int { - i := 0 - for i < len(ranges) && ranges[i].Hi <= unicode.MaxLatin1 { - i++ - } - return i -} - -const ( - CaseUpper = 1 << iota - CaseLower - CaseTitle - CaseNone = 0 // must be zero - CaseMissing = -1 // character not present; not a valid case state -) - -type caseState struct { - point rune - _case int - deltaToUpper rune - deltaToLower rune - deltaToTitle rune -} - -// Is d a continuation of the state of c? -func (c *caseState) adjacent(d *caseState) bool { - if d.point < c.point { - c, d = d, c - } - switch { - case d.point != c.point+1: // code points not adjacent (shouldn't happen) - return false - case d._case != c._case: // different cases - return c.upperLowerAdjacent(d) - case c._case == CaseNone: - return false - case c._case == CaseMissing: - return false - case d.deltaToUpper != c.deltaToUpper: - return false - case d.deltaToLower != c.deltaToLower: - return false - case d.deltaToTitle != c.deltaToTitle: - return false - } - return true -} - -// Is d the same as c, but opposite in upper/lower case? this would make it -// an element of an UpperLower sequence. -func (c *caseState) upperLowerAdjacent(d *caseState) bool { - // check they're a matched case pair. we know they have adjacent values - switch { - case c._case == CaseUpper && d._case != CaseLower: - return false - case c._case == CaseLower && d._case != CaseUpper: - return false - } - // matched pair (at least in upper/lower). make the order Upper Lower - if c._case == CaseLower { - c, d = d, c - } - // for an Upper Lower sequence the deltas have to be in order - // c: 0 1 0 - // d: -1 0 -1 - switch { - case c.deltaToUpper != 0: - return false - case c.deltaToLower != 1: - return false - case c.deltaToTitle != 0: - return false - case d.deltaToUpper != -1: - return false - case d.deltaToLower != 0: - return false - case d.deltaToTitle != -1: - return false - } - return true -} - -// Does this character start an UpperLower sequence? -func (c *caseState) isUpperLower() bool { - // for an Upper Lower sequence the deltas have to be in order - // c: 0 1 0 - switch { - case c.deltaToUpper != 0: - return false - case c.deltaToLower != 1: - return false - case c.deltaToTitle != 0: - return false - } - return true -} - -// Does this character start a LowerUpper sequence? -func (c *caseState) isLowerUpper() bool { - // for an Upper Lower sequence the deltas have to be in order - // c: -1 0 -1 - switch { - case c.deltaToUpper != -1: - return false - case c.deltaToLower != 0: - return false - case c.deltaToTitle != -1: - return false - } - return true -} - -func getCaseState(i rune) (c *caseState) { - c = &caseState{point: i, _case: CaseNone} - ch := &chars[i] - switch ch.codePoint { - case 0: - c._case = CaseMissing // Will get NUL wrong but that doesn't matter - return - case ch.upperCase: - c._case = CaseUpper - case ch.lowerCase: - c._case = CaseLower - case ch.titleCase: - c._case = CaseTitle - } - // Some things such as roman numeral U+2161 don't describe themselves - // as upper case, but have a lower case. Second-guess them. - if c._case == CaseNone && ch.lowerCase != 0 { - c._case = CaseUpper - } - // Same in the other direction. - if c._case == CaseNone && ch.upperCase != 0 { - c._case = CaseLower - } - - if ch.upperCase != 0 { - c.deltaToUpper = ch.upperCase - i - } - if ch.lowerCase != 0 { - c.deltaToLower = ch.lowerCase - i - } - if ch.titleCase != 0 { - c.deltaToTitle = ch.titleCase - i - } - return -} - -func printCases() { - if !*cases { - return - } - if *test { - fullCaseTest() - return - } - fmt.Printf( - "// Generated by running\n"+ - "// maketables --data=%s --casefolding=%s\n"+ - "// DO NOT EDIT\n\n"+ - "// CaseRanges is the table describing case mappings for all letters with\n"+ - "// non-self mappings.\n"+ - "var CaseRanges = _CaseRanges\n"+ - "var _CaseRanges = []CaseRange {\n", - *dataURL, *casefoldingURL) - - var startState *caseState // the start of a run; nil for not active - var prevState = &caseState{} // the state of the previous character - for i := range chars { - state := getCaseState(rune(i)) - if state.adjacent(prevState) { - prevState = state - continue - } - // end of run (possibly) - printCaseRange(startState, prevState) - startState = nil - if state._case != CaseMissing && state._case != CaseNone { - startState = state - } - prevState = state - } - fmt.Print("}\n") -} - -func printCaseRange(lo, hi *caseState) { - if lo == nil { - return - } - if lo.deltaToUpper == 0 && lo.deltaToLower == 0 && lo.deltaToTitle == 0 { - // character represents itself in all cases - no need to mention it - return - } - switch { - case hi.point > lo.point && lo.isUpperLower(): - fmt.Printf("\t{0x%04X, 0x%04X, d{UpperLower, UpperLower, UpperLower}},\n", - lo.point, hi.point) - case hi.point > lo.point && lo.isLowerUpper(): - logger.Fatalf("LowerUpper sequence: should not happen: %U. If it's real, need to fix To()", lo.point) - fmt.Printf("\t{0x%04X, 0x%04X, d{LowerUpper, LowerUpper, LowerUpper}},\n", - lo.point, hi.point) - default: - fmt.Printf("\t{0x%04X, 0x%04X, d{%d, %d, %d}},\n", - lo.point, hi.point, - lo.deltaToUpper, lo.deltaToLower, lo.deltaToTitle) - } -} - -// If the cased value in the Char is 0, it means use the rune itself. -func caseIt(r, cased rune) rune { - if cased == 0 { - return r - } - return cased -} - -func fullCaseTest() { - for j, c := range chars { - i := rune(j) - lower := unicode.ToLower(i) - want := caseIt(i, c.lowerCase) - if lower != want { - fmt.Fprintf(os.Stderr, "lower %U should be %U is %U\n", i, want, lower) - } - upper := unicode.ToUpper(i) - want = caseIt(i, c.upperCase) - if upper != want { - fmt.Fprintf(os.Stderr, "upper %U should be %U is %U\n", i, want, upper) - } - title := unicode.ToTitle(i) - want = caseIt(i, c.titleCase) - if title != want { - fmt.Fprintf(os.Stderr, "title %U should be %U is %U\n", i, want, title) - } - } -} - -func printLatinProperties() { - if *test { - return - } - fmt.Println("var properties = [MaxLatin1+1]uint8{") - for code := 0; code <= unicode.MaxLatin1; code++ { - var property string - switch chars[code].category { - case "Cc", "": // NUL has no category. - property = "pC" - case "Cf": // soft hyphen, unique category, not printable. - property = "0" - case "Ll": - property = "pLl | pp" - case "Lo": - property = "pLo | pp" - case "Lu": - property = "pLu | pp" - case "Nd", "No": - property = "pN | pp" - case "Pc", "Pd", "Pe", "Pf", "Pi", "Po", "Ps": - property = "pP | pp" - case "Sc", "Sk", "Sm", "So": - property = "pS | pp" - case "Zs": - property = "pZ" - default: - logger.Fatalf("%U has unknown category %q", code, chars[code].category) - } - // Special case - if code == ' ' { - property = "pZ | pp" - } - fmt.Printf("\t0x%02X: %s, // %q\n", code, property, code) - } - fmt.Printf("}\n\n") -} - -type runeSlice []rune - -func (p runeSlice) Len() int { return len(p) } -func (p runeSlice) Less(i, j int) bool { return p[i] < p[j] } -func (p runeSlice) Swap(i, j int) { p[i], p[j] = p[j], p[i] } - -func printCasefold() { - // Build list of case-folding groups attached to each canonical folded char (typically lower case). - var caseOrbit = make([][]rune, MaxChar+1) - for j := range chars { - i := rune(j) - c := &chars[i] - if c.foldCase == 0 { - continue - } - orb := caseOrbit[c.foldCase] - if orb == nil { - orb = append(orb, c.foldCase) - } - caseOrbit[c.foldCase] = append(orb, i) - } - - // Insert explicit 1-element groups when assuming [lower, upper] would be wrong. - for j := range chars { - i := rune(j) - c := &chars[i] - f := c.foldCase - if f == 0 { - f = i - } - orb := caseOrbit[f] - if orb == nil && (c.upperCase != 0 && c.upperCase != i || c.lowerCase != 0 && c.lowerCase != i) { - // Default assumption of [upper, lower] is wrong. - caseOrbit[i] = []rune{i} - } - } - - // Delete the groups for which assuming [lower, upper] is right. - for i, orb := range caseOrbit { - if len(orb) == 2 && chars[orb[0]].upperCase == orb[1] && chars[orb[1]].lowerCase == orb[0] { - caseOrbit[i] = nil - } - } - - // Record orbit information in chars. - for _, orb := range caseOrbit { - if orb == nil { - continue - } - sort.Sort(runeSlice(orb)) - c := orb[len(orb)-1] - for _, d := range orb { - chars[c].caseOrbit = d - c = d - } - } - - printCaseOrbit() - - // Tables of category and script folding exceptions: code points - // that must be added when interpreting a particular category/script - // in a case-folding context. - cat := make(map[string]map[rune]bool) - for name := range category { - if x := foldExceptions(inCategory(name)); len(x) > 0 { - cat[name] = x - } - } - - scr := make(map[string]map[rune]bool) - for name := range scripts { - if x := foldExceptions(inScript(name)); len(x) > 0 { - cat[name] = x - } - } - - printCatFold("FoldCategory", cat) - printCatFold("FoldScript", scr) -} - -// inCategory returns a list of all the runes in the category. -func inCategory(name string) []rune { - var x []rune - for j := range chars { - i := rune(j) - c := &chars[i] - if c.category == name || len(name) == 1 && len(c.category) > 1 && c.category[0] == name[0] { - x = append(x, i) - } - } - return x -} - -// inScript returns a list of all the runes in the script. -func inScript(name string) []rune { - var x []rune - for _, s := range scripts[name] { - for c := s.lo; c <= s.hi; c++ { - x = append(x, rune(c)) - } - } - return x -} - -// foldExceptions returns a list of all the runes fold-equivalent -// to runes in class but not in class themselves. -func foldExceptions(class []rune) map[rune]bool { - // Create map containing class and all fold-equivalent chars. - m := make(map[rune]bool) - for _, r := range class { - c := &chars[r] - if c.caseOrbit == 0 { - // Just upper and lower. - if u := c.upperCase; u != 0 { - m[u] = true - } - if l := c.lowerCase; l != 0 { - m[l] = true - } - m[r] = true - continue - } - // Otherwise walk orbit. - r0 := r - for { - m[r] = true - r = chars[r].caseOrbit - if r == r0 { - break - } - } - } - - // Remove class itself. - for _, r := range class { - delete(m, r) - } - - // What's left is the exceptions. - return m -} - -var comment = map[string]string{ - "FoldCategory": "// FoldCategory maps a category name to a table of\n" + - "// code points outside the category that are equivalent under\n" + - "// simple case folding to code points inside the category.\n" + - "// If there is no entry for a category name, there are no such points.\n", - - "FoldScript": "// FoldScript maps a script name to a table of\n" + - "// code points outside the script that are equivalent under\n" + - "// simple case folding to code points inside the script.\n" + - "// If there is no entry for a script name, there are no such points.\n", -} - -func printCaseOrbit() { - if *test { - for j := range chars { - i := rune(j) - c := &chars[i] - f := c.caseOrbit - if f == 0 { - if c.lowerCase != i && c.lowerCase != 0 { - f = c.lowerCase - } else if c.upperCase != i && c.upperCase != 0 { - f = c.upperCase - } else { - f = i - } - } - if g := unicode.SimpleFold(i); g != f { - fmt.Fprintf(os.Stderr, "unicode.SimpleFold(%#U) = %#U, want %#U\n", i, g, f) - } - } - return - } - - fmt.Printf("var caseOrbit = []foldPair{\n") - for i := range chars { - c := &chars[i] - if c.caseOrbit != 0 { - fmt.Printf("\t{0x%04X, 0x%04X},\n", i, c.caseOrbit) - foldPairCount++ - } - } - fmt.Printf("}\n\n") -} - -func printCatFold(name string, m map[string]map[rune]bool) { - if *test { - var pkgMap map[string]*unicode.RangeTable - if name == "FoldCategory" { - pkgMap = unicode.FoldCategory - } else { - pkgMap = unicode.FoldScript - } - if len(pkgMap) != len(m) { - fmt.Fprintf(os.Stderr, "unicode.%s has %d elements, want %d\n", name, len(pkgMap), len(m)) - return - } - for k, v := range m { - t, ok := pkgMap[k] - if !ok { - fmt.Fprintf(os.Stderr, "unicode.%s[%q] missing\n", name, k) - continue - } - n := 0 - for _, r := range t.R16 { - for c := rune(r.Lo); c <= rune(r.Hi); c += rune(r.Stride) { - if !v[c] { - fmt.Fprintf(os.Stderr, "unicode.%s[%q] contains %#U, should not\n", name, k, c) - } - n++ - } - } - for _, r := range t.R32 { - for c := rune(r.Lo); c <= rune(r.Hi); c += rune(r.Stride) { - if !v[c] { - fmt.Fprintf(os.Stderr, "unicode.%s[%q] contains %#U, should not\n", name, k, c) - } - n++ - } - } - if n != len(v) { - fmt.Fprintf(os.Stderr, "unicode.%s[%q] has %d code points, want %d\n", name, k, n, len(v)) - } - } - return - } - - fmt.Print(comment[name]) - fmt.Printf("var %s = map[string]*RangeTable{\n", name) - for _, name := range allCatFold(m) { - fmt.Printf("\t%q: fold%s,\n", name, name) - } - fmt.Printf("}\n\n") - for _, name := range allCatFold(m) { - class := m[name] - dumpRange( - fmt.Sprintf("var fold%s = &RangeTable{\n", name), - func(code rune) bool { return class[code] }) - } -} - -var range16Count = 0 // Number of entries in the 16-bit range tables. -var range32Count = 0 // Number of entries in the 32-bit range tables. -var foldPairCount = 0 // Number of fold pairs in the exception tables. - -func printSizes() { - if *test { - return - } - fmt.Println() - fmt.Printf("// Range entries: %d 16-bit, %d 32-bit, %d total.\n", range16Count, range32Count, range16Count+range32Count) - range16Bytes := range16Count * 3 * 2 - range32Bytes := range32Count * 3 * 4 - fmt.Printf("// Range bytes: %d 16-bit, %d 32-bit, %d total.\n", range16Bytes, range32Bytes, range16Bytes+range32Bytes) - fmt.Println() - fmt.Printf("// Fold orbit bytes: %d pairs, %d bytes\n", foldPairCount, foldPairCount*2*2) -} diff --git a/src/pkg/unicode/script_test.go b/src/pkg/unicode/script_test.go deleted file mode 100644 index e2ba0011a..000000000 --- a/src/pkg/unicode/script_test.go +++ /dev/null @@ -1,264 +0,0 @@ -// Copyright 2009 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. - -package unicode_test - -import ( - "testing" - . "unicode" -) - -type T struct { - rune rune - script string -} - -// Hand-chosen tests from Unicode 5.1.0, 6.0.0 and 6.2.0 mostly to discover when new -// scripts and categories arise. -var inTest = []T{ - {0x06e2, "Arabic"}, - {0x0567, "Armenian"}, - {0x10b20, "Avestan"}, - {0x1b37, "Balinese"}, - {0xa6af, "Bamum"}, - {0x1be1, "Batak"}, - {0x09c2, "Bengali"}, - {0x3115, "Bopomofo"}, - {0x282d, "Braille"}, - {0x1a1a, "Buginese"}, - {0x1747, "Buhid"}, - {0x11011, "Brahmi"}, - {0x156d, "Canadian_Aboriginal"}, - {0x102a9, "Carian"}, - {0x11111, "Chakma"}, - {0xaa4d, "Cham"}, - {0x13c2, "Cherokee"}, - {0x0020, "Common"}, - {0x1d4a5, "Common"}, - {0x2cfc, "Coptic"}, - {0x12420, "Cuneiform"}, - {0x1080c, "Cypriot"}, - {0xa663, "Cyrillic"}, - {0x10430, "Deseret"}, - {0x094a, "Devanagari"}, - {0x13001, "Egyptian_Hieroglyphs"}, - {0x1271, "Ethiopic"}, - {0x10fc, "Georgian"}, - {0x2c40, "Glagolitic"}, - {0x10347, "Gothic"}, - {0x03ae, "Greek"}, - {0x0abf, "Gujarati"}, - {0x0a24, "Gurmukhi"}, - {0x3028, "Han"}, - {0x11b8, "Hangul"}, - {0x1727, "Hanunoo"}, - {0x05a0, "Hebrew"}, - {0x3058, "Hiragana"}, - {0x10841, "Imperial_Aramaic"}, - {0x20e6, "Inherited"}, - {0x10b70, "Inscriptional_Pahlavi"}, - {0x10b5a, "Inscriptional_Parthian"}, - {0xa9d0, "Javanese"}, - {0x1109f, "Kaithi"}, - {0x0cbd, "Kannada"}, - {0x30a6, "Katakana"}, - {0xa928, "Kayah_Li"}, - {0x10a11, "Kharoshthi"}, - {0x17c6, "Khmer"}, - {0x0eaa, "Lao"}, - {0x1d79, "Latin"}, - {0x1c10, "Lepcha"}, - {0x1930, "Limbu"}, - {0x1003c, "Linear_B"}, - {0xa4e1, "Lisu"}, - {0x10290, "Lycian"}, - {0x10930, "Lydian"}, - {0x0d42, "Malayalam"}, - {0x0843, "Mandaic"}, - {0xabd0, "Meetei_Mayek"}, - {0x1099f, "Meroitic_Hieroglyphs"}, - {0x109a0, "Meroitic_Cursive"}, - {0x16f00, "Miao"}, - {0x1822, "Mongolian"}, - {0x104c, "Myanmar"}, - {0x19c3, "New_Tai_Lue"}, - {0x07f8, "Nko"}, - {0x169b, "Ogham"}, - {0x1c6a, "Ol_Chiki"}, - {0x10310, "Old_Italic"}, - {0x103c9, "Old_Persian"}, - {0x10a6f, "Old_South_Arabian"}, - {0x10c20, "Old_Turkic"}, - {0x0b3e, "Oriya"}, - {0x10491, "Osmanya"}, - {0xa860, "Phags_Pa"}, - {0x10918, "Phoenician"}, - {0xa949, "Rejang"}, - {0x16c0, "Runic"}, - {0x081d, "Samaritan"}, - {0xa892, "Saurashtra"}, - {0x111a0, "Sharada"}, - {0x10463, "Shavian"}, - {0x0dbd, "Sinhala"}, - {0x110d0, "Sora_Sompeng"}, - {0x1ba3, "Sundanese"}, - {0xa803, "Syloti_Nagri"}, - {0x070f, "Syriac"}, - {0x170f, "Tagalog"}, - {0x176f, "Tagbanwa"}, - {0x1972, "Tai_Le"}, - {0x1a62, "Tai_Tham"}, - {0xaadc, "Tai_Viet"}, - {0x116c9, "Takri"}, - {0x0bbf, "Tamil"}, - {0x0c55, "Telugu"}, - {0x07a7, "Thaana"}, - {0x0e46, "Thai"}, - {0x0f36, "Tibetan"}, - {0x2d55, "Tifinagh"}, - {0x10388, "Ugaritic"}, - {0xa60e, "Vai"}, - {0xa216, "Yi"}, -} - -var outTest = []T{ // not really worth being thorough - {0x20, "Telugu"}, -} - -var inCategoryTest = []T{ - {0x0081, "Cc"}, - {0x200B, "Cf"}, - {0xf0000, "Co"}, - {0xdb80, "Cs"}, - {0x0236, "Ll"}, - {0x1d9d, "Lm"}, - {0x07cf, "Lo"}, - {0x1f8a, "Lt"}, - {0x03ff, "Lu"}, - {0x0bc1, "Mc"}, - {0x20df, "Me"}, - {0x07f0, "Mn"}, - {0x1bb2, "Nd"}, - {0x10147, "Nl"}, - {0x2478, "No"}, - {0xfe33, "Pc"}, - {0x2011, "Pd"}, - {0x301e, "Pe"}, - {0x2e03, "Pf"}, - {0x2e02, "Pi"}, - {0x0022, "Po"}, - {0x2770, "Ps"}, - {0x00a4, "Sc"}, - {0xa711, "Sk"}, - {0x25f9, "Sm"}, - {0x2108, "So"}, - {0x2028, "Zl"}, - {0x2029, "Zp"}, - {0x202f, "Zs"}, - // Unifieds. - {0x04aa, "L"}, - {0x0009, "C"}, - {0x1712, "M"}, - {0x0031, "N"}, - {0x00bb, "P"}, - {0x00a2, "S"}, - {0x00a0, "Z"}, -} - -var inPropTest = []T{ - {0x0046, "ASCII_Hex_Digit"}, - {0x200F, "Bidi_Control"}, - {0x2212, "Dash"}, - {0xE0001, "Deprecated"}, - {0x00B7, "Diacritic"}, - {0x30FE, "Extender"}, - {0xFF46, "Hex_Digit"}, - {0x2E17, "Hyphen"}, - {0x2FFB, "IDS_Binary_Operator"}, - {0x2FF3, "IDS_Trinary_Operator"}, - {0xFA6A, "Ideographic"}, - {0x200D, "Join_Control"}, - {0x0EC4, "Logical_Order_Exception"}, - {0x2FFFF, "Noncharacter_Code_Point"}, - {0x065E, "Other_Alphabetic"}, - {0x2065, "Other_Default_Ignorable_Code_Point"}, - {0x0BD7, "Other_Grapheme_Extend"}, - {0x0387, "Other_ID_Continue"}, - {0x212E, "Other_ID_Start"}, - {0x2094, "Other_Lowercase"}, - {0x2040, "Other_Math"}, - {0x216F, "Other_Uppercase"}, - {0x0027, "Pattern_Syntax"}, - {0x0020, "Pattern_White_Space"}, - {0x300D, "Quotation_Mark"}, - {0x2EF3, "Radical"}, - {0x061F, "STerm"}, - {0x2071, "Soft_Dotted"}, - {0x003A, "Terminal_Punctuation"}, - {0x9FC3, "Unified_Ideograph"}, - {0xFE0F, "Variation_Selector"}, - {0x0020, "White_Space"}, -} - -func TestScripts(t *testing.T) { - notTested := make(map[string]bool) - for k := range Scripts { - notTested[k] = true - } - for _, test := range inTest { - if _, ok := Scripts[test.script]; !ok { - t.Fatal(test.script, "not a known script") - } - if !Is(Scripts[test.script], test.rune) { - t.Errorf("IsScript(%U, %s) = false, want true", test.rune, test.script) - } - delete(notTested, test.script) - } - for _, test := range outTest { - if Is(Scripts[test.script], test.rune) { - t.Errorf("IsScript(%U, %s) = true, want false", test.rune, test.script) - } - } - for k := range notTested { - t.Error("script not tested:", k) - } -} - -func TestCategories(t *testing.T) { - notTested := make(map[string]bool) - for k := range Categories { - notTested[k] = true - } - for _, test := range inCategoryTest { - if _, ok := Categories[test.script]; !ok { - t.Fatal(test.script, "not a known category") - } - if !Is(Categories[test.script], test.rune) { - t.Errorf("IsCategory(%U, %s) = false, want true", test.rune, test.script) - } - delete(notTested, test.script) - } - for k := range notTested { - t.Error("category not tested:", k) - } -} - -func TestProperties(t *testing.T) { - notTested := make(map[string]bool) - for k := range Properties { - notTested[k] = true - } - for _, test := range inPropTest { - if _, ok := Properties[test.script]; !ok { - t.Fatal(test.script, "not a known prop") - } - if !Is(Properties[test.script], test.rune) { - t.Errorf("IsCategory(%U, %s) = false, want true", test.rune, test.script) - } - delete(notTested, test.script) - } - for k := range notTested { - t.Error("property not tested:", k) - } -} diff --git a/src/pkg/unicode/tables.go b/src/pkg/unicode/tables.go deleted file mode 100644 index 5670d1c5b..000000000 --- a/src/pkg/unicode/tables.go +++ /dev/null @@ -1,6391 +0,0 @@ -// Copyright 2013 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. - -// Generated by running -// maketables --tables=all --data=http://www.unicode.org/Public/6.3.0/ucd/UnicodeData.txt --casefolding=http://www.unicode.org/Public/6.3.0/ucd/CaseFolding.txt -// DO NOT EDIT - -package unicode - -// Version is the Unicode edition from which the tables are derived. -const Version = "6.3.0" - -// Categories is the set of Unicode category tables. -var Categories = map[string]*RangeTable{ - "C": C, - "Cc": Cc, - "Cf": Cf, - "Co": Co, - "Cs": Cs, - "L": L, - "Ll": Ll, - "Lm": Lm, - "Lo": Lo, - "Lt": Lt, - "Lu": Lu, - "M": M, - "Mc": Mc, - "Me": Me, - "Mn": Mn, - "N": N, - "Nd": Nd, - "Nl": Nl, - "No": No, - "P": P, - "Pc": Pc, - "Pd": Pd, - "Pe": Pe, - "Pf": Pf, - "Pi": Pi, - "Po": Po, - "Ps": Ps, - "S": S, - "Sc": Sc, - "Sk": Sk, - "Sm": Sm, - "So": So, - "Z": Z, - "Zl": Zl, - "Zp": Zp, - "Zs": Zs, -} - -var _C = &RangeTable{ - R16: []Range16{ - {0x0001, 0x001f, 1}, - {0x007f, 0x009f, 1}, - {0x00ad, 0x0600, 1363}, - {0x0601, 0x0604, 1}, - {0x061c, 0x06dd, 193}, - {0x070f, 0x180e, 4351}, - {0x200b, 0x200f, 1}, - {0x202a, 0x202e, 1}, - {0x2060, 0x2064, 1}, - {0x2066, 0x206f, 1}, - {0xd800, 0xf8ff, 1}, - {0xfeff, 0xfff9, 250}, - {0xfffa, 0xfffb, 1}, - }, - R32: []Range32{ - {0x110bd, 0x1d173, 49334}, - {0x1d174, 0x1d17a, 1}, - {0xe0001, 0xe0020, 31}, - {0xe0021, 0xe007f, 1}, - {0xf0000, 0xffffd, 1}, - {0x100000, 0x10fffd, 1}, - }, - LatinOffset: 2, -} - -var _Cc = &RangeTable{ - R16: []Range16{ - {0x0001, 0x001f, 1}, - {0x007f, 0x009f, 1}, - }, - LatinOffset: 2, -} - -var _Cf = &RangeTable{ - R16: []Range16{ - {0x00ad, 0x0600, 1363}, - {0x0601, 0x0604, 1}, - {0x061c, 0x06dd, 193}, - {0x070f, 0x180e, 4351}, - {0x200b, 0x200f, 1}, - {0x202a, 0x202e, 1}, - {0x2060, 0x2064, 1}, - {0x2066, 0x206f, 1}, - {0xfeff, 0xfff9, 250}, - {0xfffa, 0xfffb, 1}, - }, - R32: []Range32{ - {0x110bd, 0x1d173, 49334}, - {0x1d174, 0x1d17a, 1}, - {0xe0001, 0xe0020, 31}, - {0xe0021, 0xe007f, 1}, - }, -} - -var _Co = &RangeTable{ - R16: []Range16{ - {0xe000, 0xf8ff, 1}, - }, - R32: []Range32{ - {0xf0000, 0xffffd, 1}, - {0x100000, 0x10fffd, 1}, - }, -} - -var _Cs = &RangeTable{ - R16: []Range16{ - {0xd800, 0xdfff, 1}, - }, -} - -var _L = &RangeTable{ - R16: []Range16{ - {0x0041, 0x005a, 1}, - {0x0061, 0x007a, 1}, - {0x00aa, 0x00b5, 11}, - {0x00ba, 0x00c0, 6}, - {0x00c1, 0x00d6, 1}, - {0x00d8, 0x00f6, 1}, - {0x00f8, 0x02c1, 1}, - {0x02c6, 0x02d1, 1}, - {0x02e0, 0x02e4, 1}, - {0x02ec, 0x02ee, 2}, - {0x0370, 0x0374, 1}, - {0x0376, 0x0377, 1}, - {0x037a, 0x037d, 1}, - {0x0386, 0x0388, 2}, - {0x0389, 0x038a, 1}, - {0x038c, 0x038e, 2}, - {0x038f, 0x03a1, 1}, - {0x03a3, 0x03f5, 1}, - {0x03f7, 0x0481, 1}, - {0x048a, 0x0527, 1}, - {0x0531, 0x0556, 1}, - {0x0559, 0x0561, 8}, - {0x0562, 0x0587, 1}, - {0x05d0, 0x05ea, 1}, - {0x05f0, 0x05f2, 1}, - {0x0620, 0x064a, 1}, - {0x066e, 0x066f, 1}, - {0x0671, 0x06d3, 1}, - {0x06d5, 0x06e5, 16}, - {0x06e6, 0x06ee, 8}, - {0x06ef, 0x06fa, 11}, - {0x06fb, 0x06fc, 1}, - {0x06ff, 0x0710, 17}, - {0x0712, 0x072f, 1}, - {0x074d, 0x07a5, 1}, - {0x07b1, 0x07ca, 25}, - {0x07cb, 0x07ea, 1}, - {0x07f4, 0x07f5, 1}, - {0x07fa, 0x0800, 6}, - {0x0801, 0x0815, 1}, - {0x081a, 0x0824, 10}, - {0x0828, 0x0840, 24}, - {0x0841, 0x0858, 1}, - {0x08a0, 0x08a2, 2}, - {0x08a3, 0x08ac, 1}, - {0x0904, 0x0939, 1}, - {0x093d, 0x0950, 19}, - {0x0958, 0x0961, 1}, - {0x0971, 0x0977, 1}, - {0x0979, 0x097f, 1}, - {0x0985, 0x098c, 1}, - {0x098f, 0x0990, 1}, - {0x0993, 0x09a8, 1}, - {0x09aa, 0x09b0, 1}, - {0x09b2, 0x09b6, 4}, - {0x09b7, 0x09b9, 1}, - {0x09bd, 0x09ce, 17}, - {0x09dc, 0x09dd, 1}, - {0x09df, 0x09e1, 1}, - {0x09f0, 0x09f1, 1}, - {0x0a05, 0x0a0a, 1}, - {0x0a0f, 0x0a10, 1}, - {0x0a13, 0x0a28, 1}, - {0x0a2a, 0x0a30, 1}, - {0x0a32, 0x0a33, 1}, - {0x0a35, 0x0a36, 1}, - {0x0a38, 0x0a39, 1}, - {0x0a59, 0x0a5c, 1}, - {0x0a5e, 0x0a72, 20}, - {0x0a73, 0x0a74, 1}, - {0x0a85, 0x0a8d, 1}, - {0x0a8f, 0x0a91, 1}, - {0x0a93, 0x0aa8, 1}, - {0x0aaa, 0x0ab0, 1}, - {0x0ab2, 0x0ab3, 1}, - {0x0ab5, 0x0ab9, 1}, - {0x0abd, 0x0ad0, 19}, - {0x0ae0, 0x0ae1, 1}, - {0x0b05, 0x0b0c, 1}, - {0x0b0f, 0x0b10, 1}, - {0x0b13, 0x0b28, 1}, - {0x0b2a, 0x0b30, 1}, - {0x0b32, 0x0b33, 1}, - {0x0b35, 0x0b39, 1}, - {0x0b3d, 0x0b5c, 31}, - {0x0b5d, 0x0b5f, 2}, - {0x0b60, 0x0b61, 1}, - {0x0b71, 0x0b83, 18}, - {0x0b85, 0x0b8a, 1}, - {0x0b8e, 0x0b90, 1}, - {0x0b92, 0x0b95, 1}, - {0x0b99, 0x0b9a, 1}, - {0x0b9c, 0x0b9e, 2}, - {0x0b9f, 0x0ba3, 4}, - {0x0ba4, 0x0ba8, 4}, - {0x0ba9, 0x0baa, 1}, - {0x0bae, 0x0bb9, 1}, - {0x0bd0, 0x0c05, 53}, - {0x0c06, 0x0c0c, 1}, - {0x0c0e, 0x0c10, 1}, - {0x0c12, 0x0c28, 1}, - {0x0c2a, 0x0c33, 1}, - {0x0c35, 0x0c39, 1}, - {0x0c3d, 0x0c58, 27}, - {0x0c59, 0x0c60, 7}, - {0x0c61, 0x0c85, 36}, - {0x0c86, 0x0c8c, 1}, - {0x0c8e, 0x0c90, 1}, - {0x0c92, 0x0ca8, 1}, - {0x0caa, 0x0cb3, 1}, - {0x0cb5, 0x0cb9, 1}, - {0x0cbd, 0x0cde, 33}, - {0x0ce0, 0x0ce1, 1}, - {0x0cf1, 0x0cf2, 1}, - {0x0d05, 0x0d0c, 1}, - {0x0d0e, 0x0d10, 1}, - {0x0d12, 0x0d3a, 1}, - {0x0d3d, 0x0d4e, 17}, - {0x0d60, 0x0d61, 1}, - {0x0d7a, 0x0d7f, 1}, - {0x0d85, 0x0d96, 1}, - {0x0d9a, 0x0db1, 1}, - {0x0db3, 0x0dbb, 1}, - {0x0dbd, 0x0dc0, 3}, - {0x0dc1, 0x0dc6, 1}, - {0x0e01, 0x0e30, 1}, - {0x0e32, 0x0e33, 1}, - {0x0e40, 0x0e46, 1}, - {0x0e81, 0x0e82, 1}, - {0x0e84, 0x0e87, 3}, - {0x0e88, 0x0e8a, 2}, - {0x0e8d, 0x0e94, 7}, - {0x0e95, 0x0e97, 1}, - {0x0e99, 0x0e9f, 1}, - {0x0ea1, 0x0ea3, 1}, - {0x0ea5, 0x0ea7, 2}, - {0x0eaa, 0x0eab, 1}, - {0x0ead, 0x0eb0, 1}, - {0x0eb2, 0x0eb3, 1}, - {0x0ebd, 0x0ec0, 3}, - {0x0ec1, 0x0ec4, 1}, - {0x0ec6, 0x0edc, 22}, - {0x0edd, 0x0edf, 1}, - {0x0f00, 0x0f40, 64}, - {0x0f41, 0x0f47, 1}, - {0x0f49, 0x0f6c, 1}, - {0x0f88, 0x0f8c, 1}, - {0x1000, 0x102a, 1}, - {0x103f, 0x1050, 17}, - {0x1051, 0x1055, 1}, - {0x105a, 0x105d, 1}, - {0x1061, 0x1065, 4}, - {0x1066, 0x106e, 8}, - {0x106f, 0x1070, 1}, - {0x1075, 0x1081, 1}, - {0x108e, 0x10a0, 18}, - {0x10a1, 0x10c5, 1}, - {0x10c7, 0x10cd, 6}, - {0x10d0, 0x10fa, 1}, - {0x10fc, 0x1248, 1}, - {0x124a, 0x124d, 1}, - {0x1250, 0x1256, 1}, - {0x1258, 0x125a, 2}, - {0x125b, 0x125d, 1}, - {0x1260, 0x1288, 1}, - {0x128a, 0x128d, 1}, - {0x1290, 0x12b0, 1}, - {0x12b2, 0x12b5, 1}, - {0x12b8, 0x12be, 1}, - {0x12c0, 0x12c2, 2}, - {0x12c3, 0x12c5, 1}, - {0x12c8, 0x12d6, 1}, - {0x12d8, 0x1310, 1}, - {0x1312, 0x1315, 1}, - {0x1318, 0x135a, 1}, - {0x1380, 0x138f, 1}, - {0x13a0, 0x13f4, 1}, - {0x1401, 0x166c, 1}, - {0x166f, 0x167f, 1}, - {0x1681, 0x169a, 1}, - {0x16a0, 0x16ea, 1}, - {0x1700, 0x170c, 1}, - {0x170e, 0x1711, 1}, - {0x1720, 0x1731, 1}, - {0x1740, 0x1751, 1}, - {0x1760, 0x176c, 1}, - {0x176e, 0x1770, 1}, - {0x1780, 0x17b3, 1}, - {0x17d7, 0x17dc, 5}, - {0x1820, 0x1877, 1}, - {0x1880, 0x18a8, 1}, - {0x18aa, 0x18b0, 6}, - {0x18b1, 0x18f5, 1}, - {0x1900, 0x191c, 1}, - {0x1950, 0x196d, 1}, - {0x1970, 0x1974, 1}, - {0x1980, 0x19ab, 1}, - {0x19c1, 0x19c7, 1}, - {0x1a00, 0x1a16, 1}, - {0x1a20, 0x1a54, 1}, - {0x1aa7, 0x1b05, 94}, - {0x1b06, 0x1b33, 1}, - {0x1b45, 0x1b4b, 1}, - {0x1b83, 0x1ba0, 1}, - {0x1bae, 0x1baf, 1}, - {0x1bba, 0x1be5, 1}, - {0x1c00, 0x1c23, 1}, - {0x1c4d, 0x1c4f, 1}, - {0x1c5a, 0x1c7d, 1}, - {0x1ce9, 0x1cec, 1}, - {0x1cee, 0x1cf1, 1}, - {0x1cf5, 0x1cf6, 1}, - {0x1d00, 0x1dbf, 1}, - {0x1e00, 0x1f15, 1}, - {0x1f18, 0x1f1d, 1}, - {0x1f20, 0x1f45, 1}, - {0x1f48, 0x1f4d, 1}, - {0x1f50, 0x1f57, 1}, - {0x1f59, 0x1f5f, 2}, - {0x1f60, 0x1f7d, 1}, - {0x1f80, 0x1fb4, 1}, - {0x1fb6, 0x1fbc, 1}, - {0x1fbe, 0x1fc2, 4}, - {0x1fc3, 0x1fc4, 1}, - {0x1fc6, 0x1fcc, 1}, - {0x1fd0, 0x1fd3, 1}, - {0x1fd6, 0x1fdb, 1}, - {0x1fe0, 0x1fec, 1}, - {0x1ff2, 0x1ff4, 1}, - {0x1ff6, 0x1ffc, 1}, - {0x2071, 0x207f, 14}, - {0x2090, 0x209c, 1}, - {0x2102, 0x2107, 5}, - {0x210a, 0x2113, 1}, - {0x2115, 0x2119, 4}, - {0x211a, 0x211d, 1}, - {0x2124, 0x212a, 2}, - {0x212b, 0x212d, 1}, - {0x212f, 0x2139, 1}, - {0x213c, 0x213f, 1}, - {0x2145, 0x2149, 1}, - {0x214e, 0x2183, 53}, - {0x2184, 0x2c00, 2684}, - {0x2c01, 0x2c2e, 1}, - {0x2c30, 0x2c5e, 1}, - {0x2c60, 0x2ce4, 1}, - {0x2ceb, 0x2cee, 1}, - {0x2cf2, 0x2cf3, 1}, - {0x2d00, 0x2d25, 1}, - {0x2d27, 0x2d2d, 6}, - {0x2d30, 0x2d67, 1}, - {0x2d6f, 0x2d80, 17}, - {0x2d81, 0x2d96, 1}, - {0x2da0, 0x2da6, 1}, - {0x2da8, 0x2dae, 1}, - {0x2db0, 0x2db6, 1}, - {0x2db8, 0x2dbe, 1}, - {0x2dc0, 0x2dc6, 1}, - {0x2dc8, 0x2dce, 1}, - {0x2dd0, 0x2dd6, 1}, - {0x2dd8, 0x2dde, 1}, - {0x2e2f, 0x3005, 470}, - {0x3006, 0x3031, 43}, - {0x3032, 0x3035, 1}, - {0x303b, 0x303c, 1}, - {0x3041, 0x3096, 1}, - {0x309d, 0x309f, 1}, - {0x30a1, 0x30fa, 1}, - {0x30fc, 0x30ff, 1}, - {0x3105, 0x312d, 1}, - {0x3131, 0x318e, 1}, - {0x31a0, 0x31ba, 1}, - {0x31f0, 0x31ff, 1}, - {0x3400, 0x4db5, 1}, - {0x4e00, 0x9fcc, 1}, - {0xa000, 0xa48c, 1}, - {0xa4d0, 0xa4fd, 1}, - {0xa500, 0xa60c, 1}, - {0xa610, 0xa61f, 1}, - {0xa62a, 0xa62b, 1}, - {0xa640, 0xa66e, 1}, - {0xa67f, 0xa697, 1}, - {0xa6a0, 0xa6e5, 1}, - {0xa717, 0xa71f, 1}, - {0xa722, 0xa788, 1}, - {0xa78b, 0xa78e, 1}, - {0xa790, 0xa793, 1}, - {0xa7a0, 0xa7aa, 1}, - {0xa7f8, 0xa801, 1}, - {0xa803, 0xa805, 1}, - {0xa807, 0xa80a, 1}, - {0xa80c, 0xa822, 1}, - {0xa840, 0xa873, 1}, - {0xa882, 0xa8b3, 1}, - {0xa8f2, 0xa8f7, 1}, - {0xa8fb, 0xa90a, 15}, - {0xa90b, 0xa925, 1}, - {0xa930, 0xa946, 1}, - {0xa960, 0xa97c, 1}, - {0xa984, 0xa9b2, 1}, - {0xa9cf, 0xaa00, 49}, - {0xaa01, 0xaa28, 1}, - {0xaa40, 0xaa42, 1}, - {0xaa44, 0xaa4b, 1}, - {0xaa60, 0xaa76, 1}, - {0xaa7a, 0xaa80, 6}, - {0xaa81, 0xaaaf, 1}, - {0xaab1, 0xaab5, 4}, - {0xaab6, 0xaab9, 3}, - {0xaaba, 0xaabd, 1}, - {0xaac0, 0xaac2, 2}, - {0xaadb, 0xaadd, 1}, - {0xaae0, 0xaaea, 1}, - {0xaaf2, 0xaaf4, 1}, - {0xab01, 0xab06, 1}, - {0xab09, 0xab0e, 1}, - {0xab11, 0xab16, 1}, - {0xab20, 0xab26, 1}, - {0xab28, 0xab2e, 1}, - {0xabc0, 0xabe2, 1}, - {0xac00, 0xd7a3, 1}, - {0xd7b0, 0xd7c6, 1}, - {0xd7cb, 0xd7fb, 1}, - {0xf900, 0xfa6d, 1}, - {0xfa70, 0xfad9, 1}, - {0xfb00, 0xfb06, 1}, - {0xfb13, 0xfb17, 1}, - {0xfb1d, 0xfb1f, 2}, - {0xfb20, 0xfb28, 1}, - {0xfb2a, 0xfb36, 1}, - {0xfb38, 0xfb3c, 1}, - {0xfb3e, 0xfb40, 2}, - {0xfb41, 0xfb43, 2}, - {0xfb44, 0xfb46, 2}, - {0xfb47, 0xfbb1, 1}, - {0xfbd3, 0xfd3d, 1}, - {0xfd50, 0xfd8f, 1}, - {0xfd92, 0xfdc7, 1}, - {0xfdf0, 0xfdfb, 1}, - {0xfe70, 0xfe74, 1}, - {0xfe76, 0xfefc, 1}, - {0xff21, 0xff3a, 1}, - {0xff41, 0xff5a, 1}, - {0xff66, 0xffbe, 1}, - {0xffc2, 0xffc7, 1}, - {0xffca, 0xffcf, 1}, - {0xffd2, 0xffd7, 1}, - {0xffda, 0xffdc, 1}, - }, - R32: []Range32{ - {0x10000, 0x1000b, 1}, - {0x1000d, 0x10026, 1}, - {0x10028, 0x1003a, 1}, - {0x1003c, 0x1003d, 1}, - {0x1003f, 0x1004d, 1}, - {0x10050, 0x1005d, 1}, - {0x10080, 0x100fa, 1}, - {0x10280, 0x1029c, 1}, - {0x102a0, 0x102d0, 1}, - {0x10300, 0x1031e, 1}, - {0x10330, 0x10340, 1}, - {0x10342, 0x10349, 1}, - {0x10380, 0x1039d, 1}, - {0x103a0, 0x103c3, 1}, - {0x103c8, 0x103cf, 1}, - {0x10400, 0x1049d, 1}, - {0x10800, 0x10805, 1}, - {0x10808, 0x1080a, 2}, - {0x1080b, 0x10835, 1}, - {0x10837, 0x10838, 1}, - {0x1083c, 0x1083f, 3}, - {0x10840, 0x10855, 1}, - {0x10900, 0x10915, 1}, - {0x10920, 0x10939, 1}, - {0x10980, 0x109b7, 1}, - {0x109be, 0x109bf, 1}, - {0x10a00, 0x10a10, 16}, - {0x10a11, 0x10a13, 1}, - {0x10a15, 0x10a17, 1}, - {0x10a19, 0x10a33, 1}, - {0x10a60, 0x10a7c, 1}, - {0x10b00, 0x10b35, 1}, - {0x10b40, 0x10b55, 1}, - {0x10b60, 0x10b72, 1}, - {0x10c00, 0x10c48, 1}, - {0x11003, 0x11037, 1}, - {0x11083, 0x110af, 1}, - {0x110d0, 0x110e8, 1}, - {0x11103, 0x11126, 1}, - {0x11183, 0x111b2, 1}, - {0x111c1, 0x111c4, 1}, - {0x11680, 0x116aa, 1}, - {0x12000, 0x1236e, 1}, - {0x13000, 0x1342e, 1}, - {0x16800, 0x16a38, 1}, - {0x16f00, 0x16f44, 1}, - {0x16f50, 0x16f93, 67}, - {0x16f94, 0x16f9f, 1}, - {0x1b000, 0x1b001, 1}, - {0x1d400, 0x1d454, 1}, - {0x1d456, 0x1d49c, 1}, - {0x1d49e, 0x1d49f, 1}, - {0x1d4a2, 0x1d4a5, 3}, - {0x1d4a6, 0x1d4a9, 3}, - {0x1d4aa, 0x1d4ac, 1}, - {0x1d4ae, 0x1d4b9, 1}, - {0x1d4bb, 0x1d4bd, 2}, - {0x1d4be, 0x1d4c3, 1}, - {0x1d4c5, 0x1d505, 1}, - {0x1d507, 0x1d50a, 1}, - {0x1d50d, 0x1d514, 1}, - {0x1d516, 0x1d51c, 1}, - {0x1d51e, 0x1d539, 1}, - {0x1d53b, 0x1d53e, 1}, - {0x1d540, 0x1d544, 1}, - {0x1d546, 0x1d54a, 4}, - {0x1d54b, 0x1d550, 1}, - {0x1d552, 0x1d6a5, 1}, - {0x1d6a8, 0x1d6c0, 1}, - {0x1d6c2, 0x1d6da, 1}, - {0x1d6dc, 0x1d6fa, 1}, - {0x1d6fc, 0x1d714, 1}, - {0x1d716, 0x1d734, 1}, - {0x1d736, 0x1d74e, 1}, - {0x1d750, 0x1d76e, 1}, - {0x1d770, 0x1d788, 1}, - {0x1d78a, 0x1d7a8, 1}, - {0x1d7aa, 0x1d7c2, 1}, - {0x1d7c4, 0x1d7cb, 1}, - {0x1ee00, 0x1ee03, 1}, - {0x1ee05, 0x1ee1f, 1}, - {0x1ee21, 0x1ee22, 1}, - {0x1ee24, 0x1ee27, 3}, - {0x1ee29, 0x1ee32, 1}, - {0x1ee34, 0x1ee37, 1}, - {0x1ee39, 0x1ee3b, 2}, - {0x1ee42, 0x1ee47, 5}, - {0x1ee49, 0x1ee4d, 2}, - {0x1ee4e, 0x1ee4f, 1}, - {0x1ee51, 0x1ee52, 1}, - {0x1ee54, 0x1ee57, 3}, - {0x1ee59, 0x1ee61, 2}, - {0x1ee62, 0x1ee64, 2}, - {0x1ee67, 0x1ee6a, 1}, - {0x1ee6c, 0x1ee72, 1}, - {0x1ee74, 0x1ee77, 1}, - {0x1ee79, 0x1ee7c, 1}, - {0x1ee7e, 0x1ee80, 2}, - {0x1ee81, 0x1ee89, 1}, - {0x1ee8b, 0x1ee9b, 1}, - {0x1eea1, 0x1eea3, 1}, - {0x1eea5, 0x1eea9, 1}, - {0x1eeab, 0x1eebb, 1}, - {0x20000, 0x2a6d6, 1}, - {0x2a700, 0x2b734, 1}, - {0x2b740, 0x2b81d, 1}, - {0x2f800, 0x2fa1d, 1}, - }, - LatinOffset: 6, -} - -var _Ll = &RangeTable{ - R16: []Range16{ - {0x0061, 0x007a, 1}, - {0x00b5, 0x00df, 42}, - {0x00e0, 0x00f6, 1}, - {0x00f8, 0x00ff, 1}, - {0x0101, 0x0137, 2}, - {0x0138, 0x0148, 2}, - {0x0149, 0x0177, 2}, - {0x017a, 0x017e, 2}, - {0x017f, 0x0180, 1}, - {0x0183, 0x0185, 2}, - {0x0188, 0x018c, 4}, - {0x018d, 0x0192, 5}, - {0x0195, 0x0199, 4}, - {0x019a, 0x019b, 1}, - {0x019e, 0x01a1, 3}, - {0x01a3, 0x01a5, 2}, - {0x01a8, 0x01aa, 2}, - {0x01ab, 0x01ad, 2}, - {0x01b0, 0x01b4, 4}, - {0x01b6, 0x01b9, 3}, - {0x01ba, 0x01bd, 3}, - {0x01be, 0x01bf, 1}, - {0x01c6, 0x01cc, 3}, - {0x01ce, 0x01dc, 2}, - {0x01dd, 0x01ef, 2}, - {0x01f0, 0x01f3, 3}, - {0x01f5, 0x01f9, 4}, - {0x01fb, 0x0233, 2}, - {0x0234, 0x0239, 1}, - {0x023c, 0x023f, 3}, - {0x0240, 0x0242, 2}, - {0x0247, 0x024f, 2}, - {0x0250, 0x0293, 1}, - {0x0295, 0x02af, 1}, - {0x0371, 0x0373, 2}, - {0x0377, 0x037b, 4}, - {0x037c, 0x037d, 1}, - {0x0390, 0x03ac, 28}, - {0x03ad, 0x03ce, 1}, - {0x03d0, 0x03d1, 1}, - {0x03d5, 0x03d7, 1}, - {0x03d9, 0x03ef, 2}, - {0x03f0, 0x03f3, 1}, - {0x03f5, 0x03fb, 3}, - {0x03fc, 0x0430, 52}, - {0x0431, 0x045f, 1}, - {0x0461, 0x0481, 2}, - {0x048b, 0x04bf, 2}, - {0x04c2, 0x04ce, 2}, - {0x04cf, 0x0527, 2}, - {0x0561, 0x0587, 1}, - {0x1d00, 0x1d2b, 1}, - {0x1d6b, 0x1d77, 1}, - {0x1d79, 0x1d9a, 1}, - {0x1e01, 0x1e95, 2}, - {0x1e96, 0x1e9d, 1}, - {0x1e9f, 0x1eff, 2}, - {0x1f00, 0x1f07, 1}, - {0x1f10, 0x1f15, 1}, - {0x1f20, 0x1f27, 1}, - {0x1f30, 0x1f37, 1}, - {0x1f40, 0x1f45, 1}, - {0x1f50, 0x1f57, 1}, - {0x1f60, 0x1f67, 1}, - {0x1f70, 0x1f7d, 1}, - {0x1f80, 0x1f87, 1}, - {0x1f90, 0x1f97, 1}, - {0x1fa0, 0x1fa7, 1}, - {0x1fb0, 0x1fb4, 1}, - {0x1fb6, 0x1fb7, 1}, - {0x1fbe, 0x1fc2, 4}, - {0x1fc3, 0x1fc4, 1}, - {0x1fc6, 0x1fc7, 1}, - {0x1fd0, 0x1fd3, 1}, - {0x1fd6, 0x1fd7, 1}, - {0x1fe0, 0x1fe7, 1}, - {0x1ff2, 0x1ff4, 1}, - {0x1ff6, 0x1ff7, 1}, - {0x210a, 0x210e, 4}, - {0x210f, 0x2113, 4}, - {0x212f, 0x2139, 5}, - {0x213c, 0x213d, 1}, - {0x2146, 0x2149, 1}, - {0x214e, 0x2184, 54}, - {0x2c30, 0x2c5e, 1}, - {0x2c61, 0x2c65, 4}, - {0x2c66, 0x2c6c, 2}, - {0x2c71, 0x2c73, 2}, - {0x2c74, 0x2c76, 2}, - {0x2c77, 0x2c7b, 1}, - {0x2c81, 0x2ce3, 2}, - {0x2ce4, 0x2cec, 8}, - {0x2cee, 0x2cf3, 5}, - {0x2d00, 0x2d25, 1}, - {0x2d27, 0x2d2d, 6}, - {0xa641, 0xa66d, 2}, - {0xa681, 0xa697, 2}, - {0xa723, 0xa72f, 2}, - {0xa730, 0xa731, 1}, - {0xa733, 0xa771, 2}, - {0xa772, 0xa778, 1}, - {0xa77a, 0xa77c, 2}, - {0xa77f, 0xa787, 2}, - {0xa78c, 0xa78e, 2}, - {0xa791, 0xa793, 2}, - {0xa7a1, 0xa7a9, 2}, - {0xa7fa, 0xfb00, 21254}, - {0xfb01, 0xfb06, 1}, - {0xfb13, 0xfb17, 1}, - {0xff41, 0xff5a, 1}, - }, - R32: []Range32{ - {0x10428, 0x1044f, 1}, - {0x1d41a, 0x1d433, 1}, - {0x1d44e, 0x1d454, 1}, - {0x1d456, 0x1d467, 1}, - {0x1d482, 0x1d49b, 1}, - {0x1d4b6, 0x1d4b9, 1}, - {0x1d4bb, 0x1d4bd, 2}, - {0x1d4be, 0x1d4c3, 1}, - {0x1d4c5, 0x1d4cf, 1}, - {0x1d4ea, 0x1d503, 1}, - {0x1d51e, 0x1d537, 1}, - {0x1d552, 0x1d56b, 1}, - {0x1d586, 0x1d59f, 1}, - {0x1d5ba, 0x1d5d3, 1}, - {0x1d5ee, 0x1d607, 1}, - {0x1d622, 0x1d63b, 1}, - {0x1d656, 0x1d66f, 1}, - {0x1d68a, 0x1d6a5, 1}, - {0x1d6c2, 0x1d6da, 1}, - {0x1d6dc, 0x1d6e1, 1}, - {0x1d6fc, 0x1d714, 1}, - {0x1d716, 0x1d71b, 1}, - {0x1d736, 0x1d74e, 1}, - {0x1d750, 0x1d755, 1}, - {0x1d770, 0x1d788, 1}, - {0x1d78a, 0x1d78f, 1}, - {0x1d7aa, 0x1d7c2, 1}, - {0x1d7c4, 0x1d7c9, 1}, - {0x1d7cb, 0x1d7cb, 1}, - }, - LatinOffset: 4, -} - -var _Lm = &RangeTable{ - R16: []Range16{ - {0x02b0, 0x02c1, 1}, - {0x02c6, 0x02d1, 1}, - {0x02e0, 0x02e4, 1}, - {0x02ec, 0x02ee, 2}, - {0x0374, 0x037a, 6}, - {0x0559, 0x0640, 231}, - {0x06e5, 0x06e6, 1}, - {0x07f4, 0x07f5, 1}, - {0x07fa, 0x081a, 32}, - {0x0824, 0x0828, 4}, - {0x0971, 0x0e46, 1237}, - {0x0ec6, 0x10fc, 566}, - {0x17d7, 0x1843, 108}, - {0x1aa7, 0x1c78, 465}, - {0x1c79, 0x1c7d, 1}, - {0x1d2c, 0x1d6a, 1}, - {0x1d78, 0x1d9b, 35}, - {0x1d9c, 0x1dbf, 1}, - {0x2071, 0x207f, 14}, - {0x2090, 0x209c, 1}, - {0x2c7c, 0x2c7d, 1}, - {0x2d6f, 0x2e2f, 192}, - {0x3005, 0x3031, 44}, - {0x3032, 0x3035, 1}, - {0x303b, 0x309d, 98}, - {0x309e, 0x30fc, 94}, - {0x30fd, 0x30fe, 1}, - {0xa015, 0xa4f8, 1251}, - {0xa4f9, 0xa4fd, 1}, - {0xa60c, 0xa67f, 115}, - {0xa717, 0xa71f, 1}, - {0xa770, 0xa788, 24}, - {0xa7f8, 0xa7f9, 1}, - {0xa9cf, 0xaa70, 161}, - {0xaadd, 0xaaf3, 22}, - {0xaaf4, 0xff70, 21628}, - {0xff9e, 0xff9f, 1}, - }, - R32: []Range32{ - {0x16f93, 0x16f9f, 1}, - }, -} - -var _Lo = &RangeTable{ - R16: []Range16{ - {0x00aa, 0x00ba, 16}, - {0x01bb, 0x01c0, 5}, - {0x01c1, 0x01c3, 1}, - {0x0294, 0x05d0, 828}, - {0x05d1, 0x05ea, 1}, - {0x05f0, 0x05f2, 1}, - {0x0620, 0x063f, 1}, - {0x0641, 0x064a, 1}, - {0x066e, 0x066f, 1}, - {0x0671, 0x06d3, 1}, - {0x06d5, 0x06ee, 25}, - {0x06ef, 0x06fa, 11}, - {0x06fb, 0x06fc, 1}, - {0x06ff, 0x0710, 17}, - {0x0712, 0x072f, 1}, - {0x074d, 0x07a5, 1}, - {0x07b1, 0x07ca, 25}, - {0x07cb, 0x07ea, 1}, - {0x0800, 0x0815, 1}, - {0x0840, 0x0858, 1}, - {0x08a0, 0x08a2, 2}, - {0x08a3, 0x08ac, 1}, - {0x0904, 0x0939, 1}, - {0x093d, 0x0950, 19}, - {0x0958, 0x0961, 1}, - {0x0972, 0x0977, 1}, - {0x0979, 0x097f, 1}, - {0x0985, 0x098c, 1}, - {0x098f, 0x0990, 1}, - {0x0993, 0x09a8, 1}, - {0x09aa, 0x09b0, 1}, - {0x09b2, 0x09b6, 4}, - {0x09b7, 0x09b9, 1}, - {0x09bd, 0x09ce, 17}, - {0x09dc, 0x09dd, 1}, - {0x09df, 0x09e1, 1}, - {0x09f0, 0x09f1, 1}, - {0x0a05, 0x0a0a, 1}, - {0x0a0f, 0x0a10, 1}, - {0x0a13, 0x0a28, 1}, - {0x0a2a, 0x0a30, 1}, - {0x0a32, 0x0a33, 1}, - {0x0a35, 0x0a36, 1}, - {0x0a38, 0x0a39, 1}, - {0x0a59, 0x0a5c, 1}, - {0x0a5e, 0x0a72, 20}, - {0x0a73, 0x0a74, 1}, - {0x0a85, 0x0a8d, 1}, - {0x0a8f, 0x0a91, 1}, - {0x0a93, 0x0aa8, 1}, - {0x0aaa, 0x0ab0, 1}, - {0x0ab2, 0x0ab3, 1}, - {0x0ab5, 0x0ab9, 1}, - {0x0abd, 0x0ad0, 19}, - {0x0ae0, 0x0ae1, 1}, - {0x0b05, 0x0b0c, 1}, - {0x0b0f, 0x0b10, 1}, - {0x0b13, 0x0b28, 1}, - {0x0b2a, 0x0b30, 1}, - {0x0b32, 0x0b33, 1}, - {0x0b35, 0x0b39, 1}, - {0x0b3d, 0x0b5c, 31}, - {0x0b5d, 0x0b5f, 2}, - {0x0b60, 0x0b61, 1}, - {0x0b71, 0x0b83, 18}, - {0x0b85, 0x0b8a, 1}, - {0x0b8e, 0x0b90, 1}, - {0x0b92, 0x0b95, 1}, - {0x0b99, 0x0b9a, 1}, - {0x0b9c, 0x0b9e, 2}, - {0x0b9f, 0x0ba3, 4}, - {0x0ba4, 0x0ba8, 4}, - {0x0ba9, 0x0baa, 1}, - {0x0bae, 0x0bb9, 1}, - {0x0bd0, 0x0c05, 53}, - {0x0c06, 0x0c0c, 1}, - {0x0c0e, 0x0c10, 1}, - {0x0c12, 0x0c28, 1}, - {0x0c2a, 0x0c33, 1}, - {0x0c35, 0x0c39, 1}, - {0x0c3d, 0x0c58, 27}, - {0x0c59, 0x0c60, 7}, - {0x0c61, 0x0c85, 36}, - {0x0c86, 0x0c8c, 1}, - {0x0c8e, 0x0c90, 1}, - {0x0c92, 0x0ca8, 1}, - {0x0caa, 0x0cb3, 1}, - {0x0cb5, 0x0cb9, 1}, - {0x0cbd, 0x0cde, 33}, - {0x0ce0, 0x0ce1, 1}, - {0x0cf1, 0x0cf2, 1}, - {0x0d05, 0x0d0c, 1}, - {0x0d0e, 0x0d10, 1}, - {0x0d12, 0x0d3a, 1}, - {0x0d3d, 0x0d4e, 17}, - {0x0d60, 0x0d61, 1}, - {0x0d7a, 0x0d7f, 1}, - {0x0d85, 0x0d96, 1}, - {0x0d9a, 0x0db1, 1}, - {0x0db3, 0x0dbb, 1}, - {0x0dbd, 0x0dc0, 3}, - {0x0dc1, 0x0dc6, 1}, - {0x0e01, 0x0e30, 1}, - {0x0e32, 0x0e33, 1}, - {0x0e40, 0x0e45, 1}, - {0x0e81, 0x0e82, 1}, - {0x0e84, 0x0e87, 3}, - {0x0e88, 0x0e8a, 2}, - {0x0e8d, 0x0e94, 7}, - {0x0e95, 0x0e97, 1}, - {0x0e99, 0x0e9f, 1}, - {0x0ea1, 0x0ea3, 1}, - {0x0ea5, 0x0ea7, 2}, - {0x0eaa, 0x0eab, 1}, - {0x0ead, 0x0eb0, 1}, - {0x0eb2, 0x0eb3, 1}, - {0x0ebd, 0x0ec0, 3}, - {0x0ec1, 0x0ec4, 1}, - {0x0edc, 0x0edf, 1}, - {0x0f00, 0x0f40, 64}, - {0x0f41, 0x0f47, 1}, - {0x0f49, 0x0f6c, 1}, - {0x0f88, 0x0f8c, 1}, - {0x1000, 0x102a, 1}, - {0x103f, 0x1050, 17}, - {0x1051, 0x1055, 1}, - {0x105a, 0x105d, 1}, - {0x1061, 0x1065, 4}, - {0x1066, 0x106e, 8}, - {0x106f, 0x1070, 1}, - {0x1075, 0x1081, 1}, - {0x108e, 0x10d0, 66}, - {0x10d1, 0x10fa, 1}, - {0x10fd, 0x1248, 1}, - {0x124a, 0x124d, 1}, - {0x1250, 0x1256, 1}, - {0x1258, 0x125a, 2}, - {0x125b, 0x125d, 1}, - {0x1260, 0x1288, 1}, - {0x128a, 0x128d, 1}, - {0x1290, 0x12b0, 1}, - {0x12b2, 0x12b5, 1}, - {0x12b8, 0x12be, 1}, - {0x12c0, 0x12c2, 2}, - {0x12c3, 0x12c5, 1}, - {0x12c8, 0x12d6, 1}, - {0x12d8, 0x1310, 1}, - {0x1312, 0x1315, 1}, - {0x1318, 0x135a, 1}, - {0x1380, 0x138f, 1}, - {0x13a0, 0x13f4, 1}, - {0x1401, 0x166c, 1}, - {0x166f, 0x167f, 1}, - {0x1681, 0x169a, 1}, - {0x16a0, 0x16ea, 1}, - {0x1700, 0x170c, 1}, - {0x170e, 0x1711, 1}, - {0x1720, 0x1731, 1}, - {0x1740, 0x1751, 1}, - {0x1760, 0x176c, 1}, - {0x176e, 0x1770, 1}, - {0x1780, 0x17b3, 1}, - {0x17dc, 0x1820, 68}, - {0x1821, 0x1842, 1}, - {0x1844, 0x1877, 1}, - {0x1880, 0x18a8, 1}, - {0x18aa, 0x18b0, 6}, - {0x18b1, 0x18f5, 1}, - {0x1900, 0x191c, 1}, - {0x1950, 0x196d, 1}, - {0x1970, 0x1974, 1}, - {0x1980, 0x19ab, 1}, - {0x19c1, 0x19c7, 1}, - {0x1a00, 0x1a16, 1}, - {0x1a20, 0x1a54, 1}, - {0x1b05, 0x1b33, 1}, - {0x1b45, 0x1b4b, 1}, - {0x1b83, 0x1ba0, 1}, - {0x1bae, 0x1baf, 1}, - {0x1bba, 0x1be5, 1}, - {0x1c00, 0x1c23, 1}, - {0x1c4d, 0x1c4f, 1}, - {0x1c5a, 0x1c77, 1}, - {0x1ce9, 0x1cec, 1}, - {0x1cee, 0x1cf1, 1}, - {0x1cf5, 0x1cf6, 1}, - {0x2135, 0x2138, 1}, - {0x2d30, 0x2d67, 1}, - {0x2d80, 0x2d96, 1}, - {0x2da0, 0x2da6, 1}, - {0x2da8, 0x2dae, 1}, - {0x2db0, 0x2db6, 1}, - {0x2db8, 0x2dbe, 1}, - {0x2dc0, 0x2dc6, 1}, - {0x2dc8, 0x2dce, 1}, - {0x2dd0, 0x2dd6, 1}, - {0x2dd8, 0x2dde, 1}, - {0x3006, 0x303c, 54}, - {0x3041, 0x3096, 1}, - {0x309f, 0x30a1, 2}, - {0x30a2, 0x30fa, 1}, - {0x30ff, 0x3105, 6}, - {0x3106, 0x312d, 1}, - {0x3131, 0x318e, 1}, - {0x31a0, 0x31ba, 1}, - {0x31f0, 0x31ff, 1}, - {0x3400, 0x4db5, 1}, - {0x4e00, 0x9fcc, 1}, - {0xa000, 0xa014, 1}, - {0xa016, 0xa48c, 1}, - {0xa4d0, 0xa4f7, 1}, - {0xa500, 0xa60b, 1}, - {0xa610, 0xa61f, 1}, - {0xa62a, 0xa62b, 1}, - {0xa66e, 0xa6a0, 50}, - {0xa6a1, 0xa6e5, 1}, - {0xa7fb, 0xa801, 1}, - {0xa803, 0xa805, 1}, - {0xa807, 0xa80a, 1}, - {0xa80c, 0xa822, 1}, - {0xa840, 0xa873, 1}, - {0xa882, 0xa8b3, 1}, - {0xa8f2, 0xa8f7, 1}, - {0xa8fb, 0xa90a, 15}, - {0xa90b, 0xa925, 1}, - {0xa930, 0xa946, 1}, - {0xa960, 0xa97c, 1}, - {0xa984, 0xa9b2, 1}, - {0xaa00, 0xaa28, 1}, - {0xaa40, 0xaa42, 1}, - {0xaa44, 0xaa4b, 1}, - {0xaa60, 0xaa6f, 1}, - {0xaa71, 0xaa76, 1}, - {0xaa7a, 0xaa80, 6}, - {0xaa81, 0xaaaf, 1}, - {0xaab1, 0xaab5, 4}, - {0xaab6, 0xaab9, 3}, - {0xaaba, 0xaabd, 1}, - {0xaac0, 0xaac2, 2}, - {0xaadb, 0xaadc, 1}, - {0xaae0, 0xaaea, 1}, - {0xaaf2, 0xab01, 15}, - {0xab02, 0xab06, 1}, - {0xab09, 0xab0e, 1}, - {0xab11, 0xab16, 1}, - {0xab20, 0xab26, 1}, - {0xab28, 0xab2e, 1}, - {0xabc0, 0xabe2, 1}, - {0xac00, 0xd7a3, 1}, - {0xd7b0, 0xd7c6, 1}, - {0xd7cb, 0xd7fb, 1}, - {0xf900, 0xfa6d, 1}, - {0xfa70, 0xfad9, 1}, - {0xfb1d, 0xfb1f, 2}, - {0xfb20, 0xfb28, 1}, - {0xfb2a, 0xfb36, 1}, - {0xfb38, 0xfb3c, 1}, - {0xfb3e, 0xfb40, 2}, - {0xfb41, 0xfb43, 2}, - {0xfb44, 0xfb46, 2}, - {0xfb47, 0xfbb1, 1}, - {0xfbd3, 0xfd3d, 1}, - {0xfd50, 0xfd8f, 1}, - {0xfd92, 0xfdc7, 1}, - {0xfdf0, 0xfdfb, 1}, - {0xfe70, 0xfe74, 1}, - {0xfe76, 0xfefc, 1}, - {0xff66, 0xff6f, 1}, - {0xff71, 0xff9d, 1}, - {0xffa0, 0xffbe, 1}, - {0xffc2, 0xffc7, 1}, - {0xffca, 0xffcf, 1}, - {0xffd2, 0xffd7, 1}, - {0xffda, 0xffdc, 1}, - }, - R32: []Range32{ - {0x10000, 0x1000b, 1}, - {0x1000d, 0x10026, 1}, - {0x10028, 0x1003a, 1}, - {0x1003c, 0x1003d, 1}, - {0x1003f, 0x1004d, 1}, - {0x10050, 0x1005d, 1}, - {0x10080, 0x100fa, 1}, - {0x10280, 0x1029c, 1}, - {0x102a0, 0x102d0, 1}, - {0x10300, 0x1031e, 1}, - {0x10330, 0x10340, 1}, - {0x10342, 0x10349, 1}, - {0x10380, 0x1039d, 1}, - {0x103a0, 0x103c3, 1}, - {0x103c8, 0x103cf, 1}, - {0x10450, 0x1049d, 1}, - {0x10800, 0x10805, 1}, - {0x10808, 0x1080a, 2}, - {0x1080b, 0x10835, 1}, - {0x10837, 0x10838, 1}, - {0x1083c, 0x1083f, 3}, - {0x10840, 0x10855, 1}, - {0x10900, 0x10915, 1}, - {0x10920, 0x10939, 1}, - {0x10980, 0x109b7, 1}, - {0x109be, 0x109bf, 1}, - {0x10a00, 0x10a10, 16}, - {0x10a11, 0x10a13, 1}, - {0x10a15, 0x10a17, 1}, - {0x10a19, 0x10a33, 1}, - {0x10a60, 0x10a7c, 1}, - {0x10b00, 0x10b35, 1}, - {0x10b40, 0x10b55, 1}, - {0x10b60, 0x10b72, 1}, - {0x10c00, 0x10c48, 1}, - {0x11003, 0x11037, 1}, - {0x11083, 0x110af, 1}, - {0x110d0, 0x110e8, 1}, - {0x11103, 0x11126, 1}, - {0x11183, 0x111b2, 1}, - {0x111c1, 0x111c4, 1}, - {0x11680, 0x116aa, 1}, - {0x12000, 0x1236e, 1}, - {0x13000, 0x1342e, 1}, - {0x16800, 0x16a38, 1}, - {0x16f00, 0x16f44, 1}, - {0x16f50, 0x1b000, 16560}, - {0x1b001, 0x1ee00, 15871}, - {0x1ee01, 0x1ee03, 1}, - {0x1ee05, 0x1ee1f, 1}, - {0x1ee21, 0x1ee22, 1}, - {0x1ee24, 0x1ee27, 3}, - {0x1ee29, 0x1ee32, 1}, - {0x1ee34, 0x1ee37, 1}, - {0x1ee39, 0x1ee3b, 2}, - {0x1ee42, 0x1ee47, 5}, - {0x1ee49, 0x1ee4d, 2}, - {0x1ee4e, 0x1ee4f, 1}, - {0x1ee51, 0x1ee52, 1}, - {0x1ee54, 0x1ee57, 3}, - {0x1ee59, 0x1ee61, 2}, - {0x1ee62, 0x1ee64, 2}, - {0x1ee67, 0x1ee6a, 1}, - {0x1ee6c, 0x1ee72, 1}, - {0x1ee74, 0x1ee77, 1}, - {0x1ee79, 0x1ee7c, 1}, - {0x1ee7e, 0x1ee80, 2}, - {0x1ee81, 0x1ee89, 1}, - {0x1ee8b, 0x1ee9b, 1}, - {0x1eea1, 0x1eea3, 1}, - {0x1eea5, 0x1eea9, 1}, - {0x1eeab, 0x1eebb, 1}, - {0x20000, 0x2a6d6, 1}, - {0x2a700, 0x2b734, 1}, - {0x2b740, 0x2b81d, 1}, - {0x2f800, 0x2fa1d, 1}, - }, - LatinOffset: 1, -} - -var _Lt = &RangeTable{ - R16: []Range16{ - {0x01c5, 0x01cb, 3}, - {0x01f2, 0x1f88, 7574}, - {0x1f89, 0x1f8f, 1}, - {0x1f98, 0x1f9f, 1}, - {0x1fa8, 0x1faf, 1}, - {0x1fbc, 0x1fcc, 16}, - {0x1ffc, 0x1ffc, 1}, - }, -} - -var _Lu = &RangeTable{ - R16: []Range16{ - {0x0041, 0x005a, 1}, - {0x00c0, 0x00d6, 1}, - {0x00d8, 0x00de, 1}, - {0x0100, 0x0136, 2}, - {0x0139, 0x0147, 2}, - {0x014a, 0x0178, 2}, - {0x0179, 0x017d, 2}, - {0x0181, 0x0182, 1}, - {0x0184, 0x0186, 2}, - {0x0187, 0x0189, 2}, - {0x018a, 0x018b, 1}, - {0x018e, 0x0191, 1}, - {0x0193, 0x0194, 1}, - {0x0196, 0x0198, 1}, - {0x019c, 0x019d, 1}, - {0x019f, 0x01a0, 1}, - {0x01a2, 0x01a6, 2}, - {0x01a7, 0x01a9, 2}, - {0x01ac, 0x01ae, 2}, - {0x01af, 0x01b1, 2}, - {0x01b2, 0x01b3, 1}, - {0x01b5, 0x01b7, 2}, - {0x01b8, 0x01bc, 4}, - {0x01c4, 0x01cd, 3}, - {0x01cf, 0x01db, 2}, - {0x01de, 0x01ee, 2}, - {0x01f1, 0x01f4, 3}, - {0x01f6, 0x01f8, 1}, - {0x01fa, 0x0232, 2}, - {0x023a, 0x023b, 1}, - {0x023d, 0x023e, 1}, - {0x0241, 0x0243, 2}, - {0x0244, 0x0246, 1}, - {0x0248, 0x024e, 2}, - {0x0370, 0x0372, 2}, - {0x0376, 0x0386, 16}, - {0x0388, 0x038a, 1}, - {0x038c, 0x038e, 2}, - {0x038f, 0x0391, 2}, - {0x0392, 0x03a1, 1}, - {0x03a3, 0x03ab, 1}, - {0x03cf, 0x03d2, 3}, - {0x03d3, 0x03d4, 1}, - {0x03d8, 0x03ee, 2}, - {0x03f4, 0x03f7, 3}, - {0x03f9, 0x03fa, 1}, - {0x03fd, 0x042f, 1}, - {0x0460, 0x0480, 2}, - {0x048a, 0x04c0, 2}, - {0x04c1, 0x04cd, 2}, - {0x04d0, 0x0526, 2}, - {0x0531, 0x0556, 1}, - {0x10a0, 0x10c5, 1}, - {0x10c7, 0x10cd, 6}, - {0x1e00, 0x1e94, 2}, - {0x1e9e, 0x1efe, 2}, - {0x1f08, 0x1f0f, 1}, - {0x1f18, 0x1f1d, 1}, - {0x1f28, 0x1f2f, 1}, - {0x1f38, 0x1f3f, 1}, - {0x1f48, 0x1f4d, 1}, - {0x1f59, 0x1f5f, 2}, - {0x1f68, 0x1f6f, 1}, - {0x1fb8, 0x1fbb, 1}, - {0x1fc8, 0x1fcb, 1}, - {0x1fd8, 0x1fdb, 1}, - {0x1fe8, 0x1fec, 1}, - {0x1ff8, 0x1ffb, 1}, - {0x2102, 0x2107, 5}, - {0x210b, 0x210d, 1}, - {0x2110, 0x2112, 1}, - {0x2115, 0x2119, 4}, - {0x211a, 0x211d, 1}, - {0x2124, 0x212a, 2}, - {0x212b, 0x212d, 1}, - {0x2130, 0x2133, 1}, - {0x213e, 0x213f, 1}, - {0x2145, 0x2183, 62}, - {0x2c00, 0x2c2e, 1}, - {0x2c60, 0x2c62, 2}, - {0x2c63, 0x2c64, 1}, - {0x2c67, 0x2c6d, 2}, - {0x2c6e, 0x2c70, 1}, - {0x2c72, 0x2c75, 3}, - {0x2c7e, 0x2c80, 1}, - {0x2c82, 0x2ce2, 2}, - {0x2ceb, 0x2ced, 2}, - {0x2cf2, 0xa640, 31054}, - {0xa642, 0xa66c, 2}, - {0xa680, 0xa696, 2}, - {0xa722, 0xa72e, 2}, - {0xa732, 0xa76e, 2}, - {0xa779, 0xa77d, 2}, - {0xa77e, 0xa786, 2}, - {0xa78b, 0xa78d, 2}, - {0xa790, 0xa792, 2}, - {0xa7a0, 0xa7aa, 2}, - {0xff21, 0xff3a, 1}, - }, - R32: []Range32{ - {0x10400, 0x10427, 1}, - {0x1d400, 0x1d419, 1}, - {0x1d434, 0x1d44d, 1}, - {0x1d468, 0x1d481, 1}, - {0x1d49c, 0x1d49e, 2}, - {0x1d49f, 0x1d4a5, 3}, - {0x1d4a6, 0x1d4a9, 3}, - {0x1d4aa, 0x1d4ac, 1}, - {0x1d4ae, 0x1d4b5, 1}, - {0x1d4d0, 0x1d4e9, 1}, - {0x1d504, 0x1d505, 1}, - {0x1d507, 0x1d50a, 1}, - {0x1d50d, 0x1d514, 1}, - {0x1d516, 0x1d51c, 1}, - {0x1d538, 0x1d539, 1}, - {0x1d53b, 0x1d53e, 1}, - {0x1d540, 0x1d544, 1}, - {0x1d546, 0x1d54a, 4}, - {0x1d54b, 0x1d550, 1}, - {0x1d56c, 0x1d585, 1}, - {0x1d5a0, 0x1d5b9, 1}, - {0x1d5d4, 0x1d5ed, 1}, - {0x1d608, 0x1d621, 1}, - {0x1d63c, 0x1d655, 1}, - {0x1d670, 0x1d689, 1}, - {0x1d6a8, 0x1d6c0, 1}, - {0x1d6e2, 0x1d6fa, 1}, - {0x1d71c, 0x1d734, 1}, - {0x1d756, 0x1d76e, 1}, - {0x1d790, 0x1d7a8, 1}, - {0x1d7ca, 0x1d7ca, 1}, - }, - LatinOffset: 3, -} - -var _M = &RangeTable{ - R16: []Range16{ - {0x0300, 0x036f, 1}, - {0x0483, 0x0489, 1}, - {0x0591, 0x05bd, 1}, - {0x05bf, 0x05c1, 2}, - {0x05c2, 0x05c4, 2}, - {0x05c5, 0x05c7, 2}, - {0x0610, 0x061a, 1}, - {0x064b, 0x065f, 1}, - {0x0670, 0x06d6, 102}, - {0x06d7, 0x06dc, 1}, - {0x06df, 0x06e4, 1}, - {0x06e7, 0x06e8, 1}, - {0x06ea, 0x06ed, 1}, - {0x0711, 0x0730, 31}, - {0x0731, 0x074a, 1}, - {0x07a6, 0x07b0, 1}, - {0x07eb, 0x07f3, 1}, - {0x0816, 0x0819, 1}, - {0x081b, 0x0823, 1}, - {0x0825, 0x0827, 1}, - {0x0829, 0x082d, 1}, - {0x0859, 0x085b, 1}, - {0x08e4, 0x08fe, 1}, - {0x0900, 0x0903, 1}, - {0x093a, 0x093c, 1}, - {0x093e, 0x094f, 1}, - {0x0951, 0x0957, 1}, - {0x0962, 0x0963, 1}, - {0x0981, 0x0983, 1}, - {0x09bc, 0x09be, 2}, - {0x09bf, 0x09c4, 1}, - {0x09c7, 0x09c8, 1}, - {0x09cb, 0x09cd, 1}, - {0x09d7, 0x09e2, 11}, - {0x09e3, 0x0a01, 30}, - {0x0a02, 0x0a03, 1}, - {0x0a3c, 0x0a3e, 2}, - {0x0a3f, 0x0a42, 1}, - {0x0a47, 0x0a48, 1}, - {0x0a4b, 0x0a4d, 1}, - {0x0a51, 0x0a70, 31}, - {0x0a71, 0x0a75, 4}, - {0x0a81, 0x0a83, 1}, - {0x0abc, 0x0abe, 2}, - {0x0abf, 0x0ac5, 1}, - {0x0ac7, 0x0ac9, 1}, - {0x0acb, 0x0acd, 1}, - {0x0ae2, 0x0ae3, 1}, - {0x0b01, 0x0b03, 1}, - {0x0b3c, 0x0b3e, 2}, - {0x0b3f, 0x0b44, 1}, - {0x0b47, 0x0b48, 1}, - {0x0b4b, 0x0b4d, 1}, - {0x0b56, 0x0b57, 1}, - {0x0b62, 0x0b63, 1}, - {0x0b82, 0x0bbe, 60}, - {0x0bbf, 0x0bc2, 1}, - {0x0bc6, 0x0bc8, 1}, - {0x0bca, 0x0bcd, 1}, - {0x0bd7, 0x0c01, 42}, - {0x0c02, 0x0c03, 1}, - {0x0c3e, 0x0c44, 1}, - {0x0c46, 0x0c48, 1}, - {0x0c4a, 0x0c4d, 1}, - {0x0c55, 0x0c56, 1}, - {0x0c62, 0x0c63, 1}, - {0x0c82, 0x0c83, 1}, - {0x0cbc, 0x0cbe, 2}, - {0x0cbf, 0x0cc4, 1}, - {0x0cc6, 0x0cc8, 1}, - {0x0cca, 0x0ccd, 1}, - {0x0cd5, 0x0cd6, 1}, - {0x0ce2, 0x0ce3, 1}, - {0x0d02, 0x0d03, 1}, - {0x0d3e, 0x0d44, 1}, - {0x0d46, 0x0d48, 1}, - {0x0d4a, 0x0d4d, 1}, - {0x0d57, 0x0d62, 11}, - {0x0d63, 0x0d82, 31}, - {0x0d83, 0x0dca, 71}, - {0x0dcf, 0x0dd4, 1}, - {0x0dd6, 0x0dd8, 2}, - {0x0dd9, 0x0ddf, 1}, - {0x0df2, 0x0df3, 1}, - {0x0e31, 0x0e34, 3}, - {0x0e35, 0x0e3a, 1}, - {0x0e47, 0x0e4e, 1}, - {0x0eb1, 0x0eb4, 3}, - {0x0eb5, 0x0eb9, 1}, - {0x0ebb, 0x0ebc, 1}, - {0x0ec8, 0x0ecd, 1}, - {0x0f18, 0x0f19, 1}, - {0x0f35, 0x0f39, 2}, - {0x0f3e, 0x0f3f, 1}, - {0x0f71, 0x0f84, 1}, - {0x0f86, 0x0f87, 1}, - {0x0f8d, 0x0f97, 1}, - {0x0f99, 0x0fbc, 1}, - {0x0fc6, 0x102b, 101}, - {0x102c, 0x103e, 1}, - {0x1056, 0x1059, 1}, - {0x105e, 0x1060, 1}, - {0x1062, 0x1064, 1}, - {0x1067, 0x106d, 1}, - {0x1071, 0x1074, 1}, - {0x1082, 0x108d, 1}, - {0x108f, 0x109a, 11}, - {0x109b, 0x109d, 1}, - {0x135d, 0x135f, 1}, - {0x1712, 0x1714, 1}, - {0x1732, 0x1734, 1}, - {0x1752, 0x1753, 1}, - {0x1772, 0x1773, 1}, - {0x17b4, 0x17d3, 1}, - {0x17dd, 0x180b, 46}, - {0x180c, 0x180d, 1}, - {0x18a9, 0x1920, 119}, - {0x1921, 0x192b, 1}, - {0x1930, 0x193b, 1}, - {0x19b0, 0x19c0, 1}, - {0x19c8, 0x19c9, 1}, - {0x1a17, 0x1a1b, 1}, - {0x1a55, 0x1a5e, 1}, - {0x1a60, 0x1a7c, 1}, - {0x1a7f, 0x1b00, 129}, - {0x1b01, 0x1b04, 1}, - {0x1b34, 0x1b44, 1}, - {0x1b6b, 0x1b73, 1}, - {0x1b80, 0x1b82, 1}, - {0x1ba1, 0x1bad, 1}, - {0x1be6, 0x1bf3, 1}, - {0x1c24, 0x1c37, 1}, - {0x1cd0, 0x1cd2, 1}, - {0x1cd4, 0x1ce8, 1}, - {0x1ced, 0x1cf2, 5}, - {0x1cf3, 0x1cf4, 1}, - {0x1dc0, 0x1de6, 1}, - {0x1dfc, 0x1dff, 1}, - {0x20d0, 0x20f0, 1}, - {0x2cef, 0x2cf1, 1}, - {0x2d7f, 0x2de0, 97}, - {0x2de1, 0x2dff, 1}, - {0x302a, 0x302f, 1}, - {0x3099, 0x309a, 1}, - {0xa66f, 0xa672, 1}, - {0xa674, 0xa67d, 1}, - {0xa69f, 0xa6f0, 81}, - {0xa6f1, 0xa802, 273}, - {0xa806, 0xa80b, 5}, - {0xa823, 0xa827, 1}, - {0xa880, 0xa881, 1}, - {0xa8b4, 0xa8c4, 1}, - {0xa8e0, 0xa8f1, 1}, - {0xa926, 0xa92d, 1}, - {0xa947, 0xa953, 1}, - {0xa980, 0xa983, 1}, - {0xa9b3, 0xa9c0, 1}, - {0xaa29, 0xaa36, 1}, - {0xaa43, 0xaa4c, 9}, - {0xaa4d, 0xaa7b, 46}, - {0xaab0, 0xaab2, 2}, - {0xaab3, 0xaab4, 1}, - {0xaab7, 0xaab8, 1}, - {0xaabe, 0xaabf, 1}, - {0xaac1, 0xaaeb, 42}, - {0xaaec, 0xaaef, 1}, - {0xaaf5, 0xaaf6, 1}, - {0xabe3, 0xabea, 1}, - {0xabec, 0xabed, 1}, - {0xfb1e, 0xfe00, 738}, - {0xfe01, 0xfe0f, 1}, - {0xfe20, 0xfe26, 1}, - }, - R32: []Range32{ - {0x101fd, 0x10a01, 2052}, - {0x10a02, 0x10a03, 1}, - {0x10a05, 0x10a06, 1}, - {0x10a0c, 0x10a0f, 1}, - {0x10a38, 0x10a3a, 1}, - {0x10a3f, 0x11000, 1473}, - {0x11001, 0x11002, 1}, - {0x11038, 0x11046, 1}, - {0x11080, 0x11082, 1}, - {0x110b0, 0x110ba, 1}, - {0x11100, 0x11102, 1}, - {0x11127, 0x11134, 1}, - {0x11180, 0x11182, 1}, - {0x111b3, 0x111c0, 1}, - {0x116ab, 0x116b7, 1}, - {0x16f51, 0x16f7e, 1}, - {0x16f8f, 0x16f92, 1}, - {0x1d165, 0x1d169, 1}, - {0x1d16d, 0x1d172, 1}, - {0x1d17b, 0x1d182, 1}, - {0x1d185, 0x1d18b, 1}, - {0x1d1aa, 0x1d1ad, 1}, - {0x1d242, 0x1d244, 1}, - {0xe0100, 0xe01ef, 1}, - }, -} - -var _Mc = &RangeTable{ - R16: []Range16{ - {0x0903, 0x093b, 56}, - {0x093e, 0x0940, 1}, - {0x0949, 0x094c, 1}, - {0x094e, 0x094f, 1}, - {0x0982, 0x0983, 1}, - {0x09be, 0x09c0, 1}, - {0x09c7, 0x09c8, 1}, - {0x09cb, 0x09cc, 1}, - {0x09d7, 0x0a03, 44}, - {0x0a3e, 0x0a40, 1}, - {0x0a83, 0x0abe, 59}, - {0x0abf, 0x0ac0, 1}, - {0x0ac9, 0x0acb, 2}, - {0x0acc, 0x0b02, 54}, - {0x0b03, 0x0b3e, 59}, - {0x0b40, 0x0b47, 7}, - {0x0b48, 0x0b4b, 3}, - {0x0b4c, 0x0b57, 11}, - {0x0bbe, 0x0bbf, 1}, - {0x0bc1, 0x0bc2, 1}, - {0x0bc6, 0x0bc8, 1}, - {0x0bca, 0x0bcc, 1}, - {0x0bd7, 0x0c01, 42}, - {0x0c02, 0x0c03, 1}, - {0x0c41, 0x0c44, 1}, - {0x0c82, 0x0c83, 1}, - {0x0cbe, 0x0cc0, 2}, - {0x0cc1, 0x0cc4, 1}, - {0x0cc7, 0x0cc8, 1}, - {0x0cca, 0x0ccb, 1}, - {0x0cd5, 0x0cd6, 1}, - {0x0d02, 0x0d03, 1}, - {0x0d3e, 0x0d40, 1}, - {0x0d46, 0x0d48, 1}, - {0x0d4a, 0x0d4c, 1}, - {0x0d57, 0x0d82, 43}, - {0x0d83, 0x0dcf, 76}, - {0x0dd0, 0x0dd1, 1}, - {0x0dd8, 0x0ddf, 1}, - {0x0df2, 0x0df3, 1}, - {0x0f3e, 0x0f3f, 1}, - {0x0f7f, 0x102b, 172}, - {0x102c, 0x1031, 5}, - {0x1038, 0x103b, 3}, - {0x103c, 0x1056, 26}, - {0x1057, 0x1062, 11}, - {0x1063, 0x1064, 1}, - {0x1067, 0x106d, 1}, - {0x1083, 0x1084, 1}, - {0x1087, 0x108c, 1}, - {0x108f, 0x109a, 11}, - {0x109b, 0x109c, 1}, - {0x17b6, 0x17be, 8}, - {0x17bf, 0x17c5, 1}, - {0x17c7, 0x17c8, 1}, - {0x1923, 0x1926, 1}, - {0x1929, 0x192b, 1}, - {0x1930, 0x1931, 1}, - {0x1933, 0x1938, 1}, - {0x19b0, 0x19c0, 1}, - {0x19c8, 0x19c9, 1}, - {0x1a19, 0x1a1a, 1}, - {0x1a55, 0x1a57, 2}, - {0x1a61, 0x1a63, 2}, - {0x1a64, 0x1a6d, 9}, - {0x1a6e, 0x1a72, 1}, - {0x1b04, 0x1b35, 49}, - {0x1b3b, 0x1b3d, 2}, - {0x1b3e, 0x1b41, 1}, - {0x1b43, 0x1b44, 1}, - {0x1b82, 0x1ba1, 31}, - {0x1ba6, 0x1ba7, 1}, - {0x1baa, 0x1bac, 2}, - {0x1bad, 0x1be7, 58}, - {0x1bea, 0x1bec, 1}, - {0x1bee, 0x1bf2, 4}, - {0x1bf3, 0x1c24, 49}, - {0x1c25, 0x1c2b, 1}, - {0x1c34, 0x1c35, 1}, - {0x1ce1, 0x1cf2, 17}, - {0x1cf3, 0x302e, 4923}, - {0x302f, 0xa823, 30708}, - {0xa824, 0xa827, 3}, - {0xa880, 0xa881, 1}, - {0xa8b4, 0xa8c3, 1}, - {0xa952, 0xa953, 1}, - {0xa983, 0xa9b4, 49}, - {0xa9b5, 0xa9ba, 5}, - {0xa9bb, 0xa9bd, 2}, - {0xa9be, 0xa9c0, 1}, - {0xaa2f, 0xaa30, 1}, - {0xaa33, 0xaa34, 1}, - {0xaa4d, 0xaa7b, 46}, - {0xaaeb, 0xaaee, 3}, - {0xaaef, 0xaaf5, 6}, - {0xabe3, 0xabe4, 1}, - {0xabe6, 0xabe7, 1}, - {0xabe9, 0xabea, 1}, - {0xabec, 0xabec, 1}, - }, - R32: []Range32{ - {0x11000, 0x11000, 1}, - {0x11002, 0x11082, 128}, - {0x110b0, 0x110b2, 1}, - {0x110b7, 0x110b8, 1}, - {0x1112c, 0x11182, 86}, - {0x111b3, 0x111b5, 1}, - {0x111bf, 0x111c0, 1}, - {0x116ac, 0x116ae, 2}, - {0x116af, 0x116b6, 7}, - {0x16f51, 0x16f7e, 1}, - {0x1d165, 0x1d166, 1}, - {0x1d16d, 0x1d172, 1}, - }, -} - -var _Me = &RangeTable{ - R16: []Range16{ - {0x0488, 0x0489, 1}, - {0x20dd, 0x20e0, 1}, - {0x20e2, 0x20e4, 1}, - {0xa670, 0xa672, 1}, - }, -} - -var _Mn = &RangeTable{ - R16: []Range16{ - {0x0300, 0x036f, 1}, - {0x0483, 0x0487, 1}, - {0x0591, 0x05bd, 1}, - {0x05bf, 0x05c1, 2}, - {0x05c2, 0x05c4, 2}, - {0x05c5, 0x05c7, 2}, - {0x0610, 0x061a, 1}, - {0x064b, 0x065f, 1}, - {0x0670, 0x06d6, 102}, - {0x06d7, 0x06dc, 1}, - {0x06df, 0x06e4, 1}, - {0x06e7, 0x06e8, 1}, - {0x06ea, 0x06ed, 1}, - {0x0711, 0x0730, 31}, - {0x0731, 0x074a, 1}, - {0x07a6, 0x07b0, 1}, - {0x07eb, 0x07f3, 1}, - {0x0816, 0x0819, 1}, - {0x081b, 0x0823, 1}, - {0x0825, 0x0827, 1}, - {0x0829, 0x082d, 1}, - {0x0859, 0x085b, 1}, - {0x08e4, 0x08fe, 1}, - {0x0900, 0x0902, 1}, - {0x093a, 0x093c, 2}, - {0x0941, 0x0948, 1}, - {0x094d, 0x0951, 4}, - {0x0952, 0x0957, 1}, - {0x0962, 0x0963, 1}, - {0x0981, 0x09bc, 59}, - {0x09c1, 0x09c4, 1}, - {0x09cd, 0x09e2, 21}, - {0x09e3, 0x0a01, 30}, - {0x0a02, 0x0a3c, 58}, - {0x0a41, 0x0a42, 1}, - {0x0a47, 0x0a48, 1}, - {0x0a4b, 0x0a4d, 1}, - {0x0a51, 0x0a70, 31}, - {0x0a71, 0x0a75, 4}, - {0x0a81, 0x0a82, 1}, - {0x0abc, 0x0ac1, 5}, - {0x0ac2, 0x0ac5, 1}, - {0x0ac7, 0x0ac8, 1}, - {0x0acd, 0x0ae2, 21}, - {0x0ae3, 0x0b01, 30}, - {0x0b3c, 0x0b3f, 3}, - {0x0b41, 0x0b44, 1}, - {0x0b4d, 0x0b56, 9}, - {0x0b62, 0x0b63, 1}, - {0x0b82, 0x0bc0, 62}, - {0x0bcd, 0x0c3e, 113}, - {0x0c3f, 0x0c40, 1}, - {0x0c46, 0x0c48, 1}, - {0x0c4a, 0x0c4d, 1}, - {0x0c55, 0x0c56, 1}, - {0x0c62, 0x0c63, 1}, - {0x0cbc, 0x0cbf, 3}, - {0x0cc6, 0x0ccc, 6}, - {0x0ccd, 0x0ce2, 21}, - {0x0ce3, 0x0d41, 94}, - {0x0d42, 0x0d44, 1}, - {0x0d4d, 0x0d62, 21}, - {0x0d63, 0x0dca, 103}, - {0x0dd2, 0x0dd4, 1}, - {0x0dd6, 0x0e31, 91}, - {0x0e34, 0x0e3a, 1}, - {0x0e47, 0x0e4e, 1}, - {0x0eb1, 0x0eb4, 3}, - {0x0eb5, 0x0eb9, 1}, - {0x0ebb, 0x0ebc, 1}, - {0x0ec8, 0x0ecd, 1}, - {0x0f18, 0x0f19, 1}, - {0x0f35, 0x0f39, 2}, - {0x0f71, 0x0f7e, 1}, - {0x0f80, 0x0f84, 1}, - {0x0f86, 0x0f87, 1}, - {0x0f8d, 0x0f97, 1}, - {0x0f99, 0x0fbc, 1}, - {0x0fc6, 0x102d, 103}, - {0x102e, 0x1030, 1}, - {0x1032, 0x1037, 1}, - {0x1039, 0x103a, 1}, - {0x103d, 0x103e, 1}, - {0x1058, 0x1059, 1}, - {0x105e, 0x1060, 1}, - {0x1071, 0x1074, 1}, - {0x1082, 0x1085, 3}, - {0x1086, 0x108d, 7}, - {0x109d, 0x135d, 704}, - {0x135e, 0x135f, 1}, - {0x1712, 0x1714, 1}, - {0x1732, 0x1734, 1}, - {0x1752, 0x1753, 1}, - {0x1772, 0x1773, 1}, - {0x17b4, 0x17b5, 1}, - {0x17b7, 0x17bd, 1}, - {0x17c6, 0x17c9, 3}, - {0x17ca, 0x17d3, 1}, - {0x17dd, 0x180b, 46}, - {0x180c, 0x180d, 1}, - {0x18a9, 0x1920, 119}, - {0x1921, 0x1922, 1}, - {0x1927, 0x1928, 1}, - {0x1932, 0x1939, 7}, - {0x193a, 0x193b, 1}, - {0x1a17, 0x1a18, 1}, - {0x1a1b, 0x1a56, 59}, - {0x1a58, 0x1a5e, 1}, - {0x1a60, 0x1a62, 2}, - {0x1a65, 0x1a6c, 1}, - {0x1a73, 0x1a7c, 1}, - {0x1a7f, 0x1b00, 129}, - {0x1b01, 0x1b03, 1}, - {0x1b34, 0x1b36, 2}, - {0x1b37, 0x1b3a, 1}, - {0x1b3c, 0x1b42, 6}, - {0x1b6b, 0x1b73, 1}, - {0x1b80, 0x1b81, 1}, - {0x1ba2, 0x1ba5, 1}, - {0x1ba8, 0x1ba9, 1}, - {0x1bab, 0x1be6, 59}, - {0x1be8, 0x1be9, 1}, - {0x1bed, 0x1bef, 2}, - {0x1bf0, 0x1bf1, 1}, - {0x1c2c, 0x1c33, 1}, - {0x1c36, 0x1c37, 1}, - {0x1cd0, 0x1cd2, 1}, - {0x1cd4, 0x1ce0, 1}, - {0x1ce2, 0x1ce8, 1}, - {0x1ced, 0x1cf4, 7}, - {0x1dc0, 0x1de6, 1}, - {0x1dfc, 0x1dff, 1}, - {0x20d0, 0x20dc, 1}, - {0x20e1, 0x20e5, 4}, - {0x20e6, 0x20f0, 1}, - {0x2cef, 0x2cf1, 1}, - {0x2d7f, 0x2de0, 97}, - {0x2de1, 0x2dff, 1}, - {0x302a, 0x302d, 1}, - {0x3099, 0x309a, 1}, - {0xa66f, 0xa674, 5}, - {0xa675, 0xa67d, 1}, - {0xa69f, 0xa6f0, 81}, - {0xa6f1, 0xa802, 273}, - {0xa806, 0xa80b, 5}, - {0xa825, 0xa826, 1}, - {0xa8c4, 0xa8e0, 28}, - {0xa8e1, 0xa8f1, 1}, - {0xa926, 0xa92d, 1}, - {0xa947, 0xa951, 1}, - {0xa980, 0xa982, 1}, - {0xa9b3, 0xa9b6, 3}, - {0xa9b7, 0xa9b9, 1}, - {0xa9bc, 0xaa29, 109}, - {0xaa2a, 0xaa2e, 1}, - {0xaa31, 0xaa32, 1}, - {0xaa35, 0xaa36, 1}, - {0xaa43, 0xaa4c, 9}, - {0xaab0, 0xaab2, 2}, - {0xaab3, 0xaab4, 1}, - {0xaab7, 0xaab8, 1}, - {0xaabe, 0xaabf, 1}, - {0xaac1, 0xaaec, 43}, - {0xaaed, 0xaaf6, 9}, - {0xabe5, 0xabe8, 3}, - {0xabed, 0xfb1e, 20273}, - {0xfe00, 0xfe0f, 1}, - {0xfe20, 0xfe26, 1}, - }, - R32: []Range32{ - {0x101fd, 0x10a01, 2052}, - {0x10a02, 0x10a03, 1}, - {0x10a05, 0x10a06, 1}, - {0x10a0c, 0x10a0f, 1}, - {0x10a38, 0x10a3a, 1}, - {0x10a3f, 0x11001, 1474}, - {0x11038, 0x11046, 1}, - {0x11080, 0x11081, 1}, - {0x110b3, 0x110b6, 1}, - {0x110b9, 0x110ba, 1}, - {0x11100, 0x11102, 1}, - {0x11127, 0x1112b, 1}, - {0x1112d, 0x11134, 1}, - {0x11180, 0x11181, 1}, - {0x111b6, 0x111be, 1}, - {0x116ab, 0x116ad, 2}, - {0x116b0, 0x116b5, 1}, - {0x116b7, 0x16f8f, 22744}, - {0x16f90, 0x16f92, 1}, - {0x1d167, 0x1d169, 1}, - {0x1d17b, 0x1d182, 1}, - {0x1d185, 0x1d18b, 1}, - {0x1d1aa, 0x1d1ad, 1}, - {0x1d242, 0x1d244, 1}, - {0xe0100, 0xe01ef, 1}, - }, -} - -var _N = &RangeTable{ - R16: []Range16{ - {0x0030, 0x0039, 1}, - {0x00b2, 0x00b3, 1}, - {0x00b9, 0x00bc, 3}, - {0x00bd, 0x00be, 1}, - {0x0660, 0x0669, 1}, - {0x06f0, 0x06f9, 1}, - {0x07c0, 0x07c9, 1}, - {0x0966, 0x096f, 1}, - {0x09e6, 0x09ef, 1}, - {0x09f4, 0x09f9, 1}, - {0x0a66, 0x0a6f, 1}, - {0x0ae6, 0x0aef, 1}, - {0x0b66, 0x0b6f, 1}, - {0x0b72, 0x0b77, 1}, - {0x0be6, 0x0bf2, 1}, - {0x0c66, 0x0c6f, 1}, - {0x0c78, 0x0c7e, 1}, - {0x0ce6, 0x0cef, 1}, - {0x0d66, 0x0d75, 1}, - {0x0e50, 0x0e59, 1}, - {0x0ed0, 0x0ed9, 1}, - {0x0f20, 0x0f33, 1}, - {0x1040, 0x1049, 1}, - {0x1090, 0x1099, 1}, - {0x1369, 0x137c, 1}, - {0x16ee, 0x16f0, 1}, - {0x17e0, 0x17e9, 1}, - {0x17f0, 0x17f9, 1}, - {0x1810, 0x1819, 1}, - {0x1946, 0x194f, 1}, - {0x19d0, 0x19da, 1}, - {0x1a80, 0x1a89, 1}, - {0x1a90, 0x1a99, 1}, - {0x1b50, 0x1b59, 1}, - {0x1bb0, 0x1bb9, 1}, - {0x1c40, 0x1c49, 1}, - {0x1c50, 0x1c59, 1}, - {0x2070, 0x2074, 4}, - {0x2075, 0x2079, 1}, - {0x2080, 0x2089, 1}, - {0x2150, 0x2182, 1}, - {0x2185, 0x2189, 1}, - {0x2460, 0x249b, 1}, - {0x24ea, 0x24ff, 1}, - {0x2776, 0x2793, 1}, - {0x2cfd, 0x3007, 778}, - {0x3021, 0x3029, 1}, - {0x3038, 0x303a, 1}, - {0x3192, 0x3195, 1}, - {0x3220, 0x3229, 1}, - {0x3248, 0x324f, 1}, - {0x3251, 0x325f, 1}, - {0x3280, 0x3289, 1}, - {0x32b1, 0x32bf, 1}, - {0xa620, 0xa629, 1}, - {0xa6e6, 0xa6ef, 1}, - {0xa830, 0xa835, 1}, - {0xa8d0, 0xa8d9, 1}, - {0xa900, 0xa909, 1}, - {0xa9d0, 0xa9d9, 1}, - {0xaa50, 0xaa59, 1}, - {0xabf0, 0xabf9, 1}, - {0xff10, 0xff19, 1}, - }, - R32: []Range32{ - {0x10107, 0x10133, 1}, - {0x10140, 0x10178, 1}, - {0x1018a, 0x10320, 406}, - {0x10321, 0x10323, 1}, - {0x10341, 0x1034a, 9}, - {0x103d1, 0x103d5, 1}, - {0x104a0, 0x104a9, 1}, - {0x10858, 0x1085f, 1}, - {0x10916, 0x1091b, 1}, - {0x10a40, 0x10a47, 1}, - {0x10a7d, 0x10a7e, 1}, - {0x10b58, 0x10b5f, 1}, - {0x10b78, 0x10b7f, 1}, - {0x10e60, 0x10e7e, 1}, - {0x11052, 0x1106f, 1}, - {0x110f0, 0x110f9, 1}, - {0x11136, 0x1113f, 1}, - {0x111d0, 0x111d9, 1}, - {0x116c0, 0x116c9, 1}, - {0x12400, 0x12462, 1}, - {0x1d360, 0x1d371, 1}, - {0x1d7ce, 0x1d7ff, 1}, - {0x1f100, 0x1f10a, 1}, - }, - LatinOffset: 4, -} - -var _Nd = &RangeTable{ - R16: []Range16{ - {0x0030, 0x0039, 1}, - {0x0660, 0x0669, 1}, - {0x06f0, 0x06f9, 1}, - {0x07c0, 0x07c9, 1}, - {0x0966, 0x096f, 1}, - {0x09e6, 0x09ef, 1}, - {0x0a66, 0x0a6f, 1}, - {0x0ae6, 0x0aef, 1}, - {0x0b66, 0x0b6f, 1}, - {0x0be6, 0x0bef, 1}, - {0x0c66, 0x0c6f, 1}, - {0x0ce6, 0x0cef, 1}, - {0x0d66, 0x0d6f, 1}, - {0x0e50, 0x0e59, 1}, - {0x0ed0, 0x0ed9, 1}, - {0x0f20, 0x0f29, 1}, - {0x1040, 0x1049, 1}, - {0x1090, 0x1099, 1}, - {0x17e0, 0x17e9, 1}, - {0x1810, 0x1819, 1}, - {0x1946, 0x194f, 1}, - {0x19d0, 0x19d9, 1}, - {0x1a80, 0x1a89, 1}, - {0x1a90, 0x1a99, 1}, - {0x1b50, 0x1b59, 1}, - {0x1bb0, 0x1bb9, 1}, - {0x1c40, 0x1c49, 1}, - {0x1c50, 0x1c59, 1}, - {0xa620, 0xa629, 1}, - {0xa8d0, 0xa8d9, 1}, - {0xa900, 0xa909, 1}, - {0xa9d0, 0xa9d9, 1}, - {0xaa50, 0xaa59, 1}, - {0xabf0, 0xabf9, 1}, - {0xff10, 0xff19, 1}, - }, - R32: []Range32{ - {0x104a0, 0x104a9, 1}, - {0x11066, 0x1106f, 1}, - {0x110f0, 0x110f9, 1}, - {0x11136, 0x1113f, 1}, - {0x111d0, 0x111d9, 1}, - {0x116c0, 0x116c9, 1}, - {0x1d7ce, 0x1d7ff, 1}, - }, - LatinOffset: 1, -} - -var _Nl = &RangeTable{ - R16: []Range16{ - {0x16ee, 0x16f0, 1}, - {0x2160, 0x2182, 1}, - {0x2185, 0x2188, 1}, - {0x3007, 0x3021, 26}, - {0x3022, 0x3029, 1}, - {0x3038, 0x303a, 1}, - {0xa6e6, 0xa6ef, 1}, - }, - R32: []Range32{ - {0x10140, 0x10174, 1}, - {0x10341, 0x1034a, 9}, - {0x103d1, 0x103d5, 1}, - {0x12400, 0x12462, 1}, - }, -} - -var _No = &RangeTable{ - R16: []Range16{ - {0x00b2, 0x00b3, 1}, - {0x00b9, 0x00bc, 3}, - {0x00bd, 0x00be, 1}, - {0x09f4, 0x09f9, 1}, - {0x0b72, 0x0b77, 1}, - {0x0bf0, 0x0bf2, 1}, - {0x0c78, 0x0c7e, 1}, - {0x0d70, 0x0d75, 1}, - {0x0f2a, 0x0f33, 1}, - {0x1369, 0x137c, 1}, - {0x17f0, 0x17f9, 1}, - {0x19da, 0x2070, 1686}, - {0x2074, 0x2079, 1}, - {0x2080, 0x2089, 1}, - {0x2150, 0x215f, 1}, - {0x2189, 0x2460, 727}, - {0x2461, 0x249b, 1}, - {0x24ea, 0x24ff, 1}, - {0x2776, 0x2793, 1}, - {0x2cfd, 0x3192, 1173}, - {0x3193, 0x3195, 1}, - {0x3220, 0x3229, 1}, - {0x3248, 0x324f, 1}, - {0x3251, 0x325f, 1}, - {0x3280, 0x3289, 1}, - {0x32b1, 0x32bf, 1}, - {0xa830, 0xa835, 1}, - }, - R32: []Range32{ - {0x10107, 0x10133, 1}, - {0x10175, 0x10178, 1}, - {0x1018a, 0x10320, 406}, - {0x10321, 0x10323, 1}, - {0x10858, 0x1085f, 1}, - {0x10916, 0x1091b, 1}, - {0x10a40, 0x10a47, 1}, - {0x10a7d, 0x10a7e, 1}, - {0x10b58, 0x10b5f, 1}, - {0x10b78, 0x10b7f, 1}, - {0x10e60, 0x10e7e, 1}, - {0x11052, 0x11065, 1}, - {0x1d360, 0x1d371, 1}, - {0x1f100, 0x1f10a, 1}, - }, - LatinOffset: 3, -} - -var _P = &RangeTable{ - R16: []Range16{ - {0x0021, 0x0023, 1}, - {0x0025, 0x002a, 1}, - {0x002c, 0x002f, 1}, - {0x003a, 0x003b, 1}, - {0x003f, 0x0040, 1}, - {0x005b, 0x005d, 1}, - {0x005f, 0x007b, 28}, - {0x007d, 0x00a1, 36}, - {0x00a7, 0x00ab, 4}, - {0x00b6, 0x00b7, 1}, - {0x00bb, 0x00bf, 4}, - {0x037e, 0x0387, 9}, - {0x055a, 0x055f, 1}, - {0x0589, 0x058a, 1}, - {0x05be, 0x05c0, 2}, - {0x05c3, 0x05c6, 3}, - {0x05f3, 0x05f4, 1}, - {0x0609, 0x060a, 1}, - {0x060c, 0x060d, 1}, - {0x061b, 0x061e, 3}, - {0x061f, 0x066a, 75}, - {0x066b, 0x066d, 1}, - {0x06d4, 0x0700, 44}, - {0x0701, 0x070d, 1}, - {0x07f7, 0x07f9, 1}, - {0x0830, 0x083e, 1}, - {0x085e, 0x0964, 262}, - {0x0965, 0x0970, 11}, - {0x0af0, 0x0df4, 772}, - {0x0e4f, 0x0e5a, 11}, - {0x0e5b, 0x0f04, 169}, - {0x0f05, 0x0f12, 1}, - {0x0f14, 0x0f3a, 38}, - {0x0f3b, 0x0f3d, 1}, - {0x0f85, 0x0fd0, 75}, - {0x0fd1, 0x0fd4, 1}, - {0x0fd9, 0x0fda, 1}, - {0x104a, 0x104f, 1}, - {0x10fb, 0x1360, 613}, - {0x1361, 0x1368, 1}, - {0x1400, 0x166d, 621}, - {0x166e, 0x169b, 45}, - {0x169c, 0x16eb, 79}, - {0x16ec, 0x16ed, 1}, - {0x1735, 0x1736, 1}, - {0x17d4, 0x17d6, 1}, - {0x17d8, 0x17da, 1}, - {0x1800, 0x180a, 1}, - {0x1944, 0x1945, 1}, - {0x1a1e, 0x1a1f, 1}, - {0x1aa0, 0x1aa6, 1}, - {0x1aa8, 0x1aad, 1}, - {0x1b5a, 0x1b60, 1}, - {0x1bfc, 0x1bff, 1}, - {0x1c3b, 0x1c3f, 1}, - {0x1c7e, 0x1c7f, 1}, - {0x1cc0, 0x1cc7, 1}, - {0x1cd3, 0x2010, 829}, - {0x2011, 0x2027, 1}, - {0x2030, 0x2043, 1}, - {0x2045, 0x2051, 1}, - {0x2053, 0x205e, 1}, - {0x207d, 0x207e, 1}, - {0x208d, 0x208e, 1}, - {0x2308, 0x230b, 1}, - {0x2329, 0x232a, 1}, - {0x2768, 0x2775, 1}, - {0x27c5, 0x27c6, 1}, - {0x27e6, 0x27ef, 1}, - {0x2983, 0x2998, 1}, - {0x29d8, 0x29db, 1}, - {0x29fc, 0x29fd, 1}, - {0x2cf9, 0x2cfc, 1}, - {0x2cfe, 0x2cff, 1}, - {0x2d70, 0x2e00, 144}, - {0x2e01, 0x2e2e, 1}, - {0x2e30, 0x2e3b, 1}, - {0x3001, 0x3003, 1}, - {0x3008, 0x3011, 1}, - {0x3014, 0x301f, 1}, - {0x3030, 0x303d, 13}, - {0x30a0, 0x30fb, 91}, - {0xa4fe, 0xa4ff, 1}, - {0xa60d, 0xa60f, 1}, - {0xa673, 0xa67e, 11}, - {0xa6f2, 0xa6f7, 1}, - {0xa874, 0xa877, 1}, - {0xa8ce, 0xa8cf, 1}, - {0xa8f8, 0xa8fa, 1}, - {0xa92e, 0xa92f, 1}, - {0xa95f, 0xa9c1, 98}, - {0xa9c2, 0xa9cd, 1}, - {0xa9de, 0xa9df, 1}, - {0xaa5c, 0xaa5f, 1}, - {0xaade, 0xaadf, 1}, - {0xaaf0, 0xaaf1, 1}, - {0xabeb, 0xfd3e, 20819}, - {0xfd3f, 0xfe10, 209}, - {0xfe11, 0xfe19, 1}, - {0xfe30, 0xfe52, 1}, - {0xfe54, 0xfe61, 1}, - {0xfe63, 0xfe68, 5}, - {0xfe6a, 0xfe6b, 1}, - {0xff01, 0xff03, 1}, - {0xff05, 0xff0a, 1}, - {0xff0c, 0xff0f, 1}, - {0xff1a, 0xff1b, 1}, - {0xff1f, 0xff20, 1}, - {0xff3b, 0xff3d, 1}, - {0xff3f, 0xff5b, 28}, - {0xff5d, 0xff5f, 2}, - {0xff60, 0xff65, 1}, - }, - R32: []Range32{ - {0x10100, 0x10102, 1}, - {0x1039f, 0x103d0, 49}, - {0x10857, 0x1091f, 200}, - {0x1093f, 0x10a50, 273}, - {0x10a51, 0x10a58, 1}, - {0x10a7f, 0x10b39, 186}, - {0x10b3a, 0x10b3f, 1}, - {0x11047, 0x1104d, 1}, - {0x110bb, 0x110bc, 1}, - {0x110be, 0x110c1, 1}, - {0x11140, 0x11143, 1}, - {0x111c5, 0x111c8, 1}, - {0x12470, 0x12473, 1}, - }, - LatinOffset: 11, -} - -var _Pc = &RangeTable{ - R16: []Range16{ - {0x005f, 0x203f, 8160}, - {0x2040, 0x2054, 20}, - {0xfe33, 0xfe34, 1}, - {0xfe4d, 0xfe4f, 1}, - {0xff3f, 0xff3f, 1}, - }, -} - -var _Pd = &RangeTable{ - R16: []Range16{ - {0x002d, 0x058a, 1373}, - {0x05be, 0x1400, 3650}, - {0x1806, 0x2010, 2058}, - {0x2011, 0x2015, 1}, - {0x2e17, 0x2e1a, 3}, - {0x2e3a, 0x2e3b, 1}, - {0x301c, 0x3030, 20}, - {0x30a0, 0xfe31, 52625}, - {0xfe32, 0xfe58, 38}, - {0xfe63, 0xff0d, 170}, - }, -} - -var _Pe = &RangeTable{ - R16: []Range16{ - {0x0029, 0x005d, 52}, - {0x007d, 0x0f3b, 3774}, - {0x0f3d, 0x169c, 1887}, - {0x2046, 0x207e, 56}, - {0x208e, 0x2309, 635}, - {0x230b, 0x232a, 31}, - {0x2769, 0x2775, 2}, - {0x27c6, 0x27e7, 33}, - {0x27e9, 0x27ef, 2}, - {0x2984, 0x2998, 2}, - {0x29d9, 0x29db, 2}, - {0x29fd, 0x2e23, 1062}, - {0x2e25, 0x2e29, 2}, - {0x3009, 0x3011, 2}, - {0x3015, 0x301b, 2}, - {0x301e, 0x301f, 1}, - {0xfd3f, 0xfe18, 217}, - {0xfe36, 0xfe44, 2}, - {0xfe48, 0xfe5a, 18}, - {0xfe5c, 0xfe5e, 2}, - {0xff09, 0xff3d, 52}, - {0xff5d, 0xff63, 3}, - }, - LatinOffset: 1, -} - -var _Pf = &RangeTable{ - R16: []Range16{ - {0x00bb, 0x2019, 8030}, - {0x201d, 0x203a, 29}, - {0x2e03, 0x2e05, 2}, - {0x2e0a, 0x2e0d, 3}, - {0x2e1d, 0x2e21, 4}, - }, -} - -var _Pi = &RangeTable{ - R16: []Range16{ - {0x00ab, 0x2018, 8045}, - {0x201b, 0x201c, 1}, - {0x201f, 0x2039, 26}, - {0x2e02, 0x2e04, 2}, - {0x2e09, 0x2e0c, 3}, - {0x2e1c, 0x2e20, 4}, - }, -} - -var _Po = &RangeTable{ - R16: []Range16{ - {0x0021, 0x0023, 1}, - {0x0025, 0x0027, 1}, - {0x002a, 0x002e, 2}, - {0x002f, 0x003a, 11}, - {0x003b, 0x003f, 4}, - {0x0040, 0x005c, 28}, - {0x00a1, 0x00a7, 6}, - {0x00b6, 0x00b7, 1}, - {0x00bf, 0x037e, 703}, - {0x0387, 0x055a, 467}, - {0x055b, 0x055f, 1}, - {0x0589, 0x05c0, 55}, - {0x05c3, 0x05c6, 3}, - {0x05f3, 0x05f4, 1}, - {0x0609, 0x060a, 1}, - {0x060c, 0x060d, 1}, - {0x061b, 0x061e, 3}, - {0x061f, 0x066a, 75}, - {0x066b, 0x066d, 1}, - {0x06d4, 0x0700, 44}, - {0x0701, 0x070d, 1}, - {0x07f7, 0x07f9, 1}, - {0x0830, 0x083e, 1}, - {0x085e, 0x0964, 262}, - {0x0965, 0x0970, 11}, - {0x0af0, 0x0df4, 772}, - {0x0e4f, 0x0e5a, 11}, - {0x0e5b, 0x0f04, 169}, - {0x0f05, 0x0f12, 1}, - {0x0f14, 0x0f85, 113}, - {0x0fd0, 0x0fd4, 1}, - {0x0fd9, 0x0fda, 1}, - {0x104a, 0x104f, 1}, - {0x10fb, 0x1360, 613}, - {0x1361, 0x1368, 1}, - {0x166d, 0x166e, 1}, - {0x16eb, 0x16ed, 1}, - {0x1735, 0x1736, 1}, - {0x17d4, 0x17d6, 1}, - {0x17d8, 0x17da, 1}, - {0x1800, 0x1805, 1}, - {0x1807, 0x180a, 1}, - {0x1944, 0x1945, 1}, - {0x1a1e, 0x1a1f, 1}, - {0x1aa0, 0x1aa6, 1}, - {0x1aa8, 0x1aad, 1}, - {0x1b5a, 0x1b60, 1}, - {0x1bfc, 0x1bff, 1}, - {0x1c3b, 0x1c3f, 1}, - {0x1c7e, 0x1c7f, 1}, - {0x1cc0, 0x1cc7, 1}, - {0x1cd3, 0x2016, 835}, - {0x2017, 0x2020, 9}, - {0x2021, 0x2027, 1}, - {0x2030, 0x2038, 1}, - {0x203b, 0x203e, 1}, - {0x2041, 0x2043, 1}, - {0x2047, 0x2051, 1}, - {0x2053, 0x2055, 2}, - {0x2056, 0x205e, 1}, - {0x2cf9, 0x2cfc, 1}, - {0x2cfe, 0x2cff, 1}, - {0x2d70, 0x2e00, 144}, - {0x2e01, 0x2e06, 5}, - {0x2e07, 0x2e08, 1}, - {0x2e0b, 0x2e0e, 3}, - {0x2e0f, 0x2e16, 1}, - {0x2e18, 0x2e19, 1}, - {0x2e1b, 0x2e1e, 3}, - {0x2e1f, 0x2e2a, 11}, - {0x2e2b, 0x2e2e, 1}, - {0x2e30, 0x2e39, 1}, - {0x3001, 0x3003, 1}, - {0x303d, 0x30fb, 190}, - {0xa4fe, 0xa4ff, 1}, - {0xa60d, 0xa60f, 1}, - {0xa673, 0xa67e, 11}, - {0xa6f2, 0xa6f7, 1}, - {0xa874, 0xa877, 1}, - {0xa8ce, 0xa8cf, 1}, - {0xa8f8, 0xa8fa, 1}, - {0xa92e, 0xa92f, 1}, - {0xa95f, 0xa9c1, 98}, - {0xa9c2, 0xa9cd, 1}, - {0xa9de, 0xa9df, 1}, - {0xaa5c, 0xaa5f, 1}, - {0xaade, 0xaadf, 1}, - {0xaaf0, 0xaaf1, 1}, - {0xabeb, 0xfe10, 21029}, - {0xfe11, 0xfe16, 1}, - {0xfe19, 0xfe30, 23}, - {0xfe45, 0xfe46, 1}, - {0xfe49, 0xfe4c, 1}, - {0xfe50, 0xfe52, 1}, - {0xfe54, 0xfe57, 1}, - {0xfe5f, 0xfe61, 1}, - {0xfe68, 0xfe6a, 2}, - {0xfe6b, 0xff01, 150}, - {0xff02, 0xff03, 1}, - {0xff05, 0xff07, 1}, - {0xff0a, 0xff0e, 2}, - {0xff0f, 0xff1a, 11}, - {0xff1b, 0xff1f, 4}, - {0xff20, 0xff3c, 28}, - {0xff61, 0xff64, 3}, - {0xff65, 0xff65, 1}, - }, - R32: []Range32{ - {0x10100, 0x10100, 1}, - {0x10101, 0x10102, 1}, - {0x1039f, 0x103d0, 49}, - {0x10857, 0x1091f, 200}, - {0x1093f, 0x10a50, 273}, - {0x10a51, 0x10a58, 1}, - {0x10a7f, 0x10b39, 186}, - {0x10b3a, 0x10b3f, 1}, - {0x11047, 0x1104d, 1}, - {0x110bb, 0x110bc, 1}, - {0x110be, 0x110c1, 1}, - {0x11140, 0x11143, 1}, - {0x111c5, 0x111c8, 1}, - {0x12470, 0x12473, 1}, - }, - LatinOffset: 8, -} - -var _Ps = &RangeTable{ - R16: []Range16{ - {0x0028, 0x005b, 51}, - {0x007b, 0x0f3a, 3775}, - {0x0f3c, 0x169b, 1887}, - {0x201a, 0x201e, 4}, - {0x2045, 0x207d, 56}, - {0x208d, 0x2308, 635}, - {0x230a, 0x2329, 31}, - {0x2768, 0x2774, 2}, - {0x27c5, 0x27e6, 33}, - {0x27e8, 0x27ee, 2}, - {0x2983, 0x2997, 2}, - {0x29d8, 0x29da, 2}, - {0x29fc, 0x2e22, 1062}, - {0x2e24, 0x2e28, 2}, - {0x3008, 0x3010, 2}, - {0x3014, 0x301a, 2}, - {0x301d, 0xfd3e, 52513}, - {0xfe17, 0xfe35, 30}, - {0xfe37, 0xfe43, 2}, - {0xfe47, 0xfe59, 18}, - {0xfe5b, 0xfe5d, 2}, - {0xff08, 0xff3b, 51}, - {0xff5b, 0xff5f, 4}, - {0xff62, 0xff62, 1}, - }, - LatinOffset: 1, -} - -var _S = &RangeTable{ - R16: []Range16{ - {0x0024, 0x002b, 7}, - {0x003c, 0x003e, 1}, - {0x005e, 0x0060, 2}, - {0x007c, 0x007e, 2}, - {0x00a2, 0x00a6, 1}, - {0x00a8, 0x00a9, 1}, - {0x00ac, 0x00ae, 2}, - {0x00af, 0x00b1, 1}, - {0x00b4, 0x00b8, 4}, - {0x00d7, 0x00f7, 32}, - {0x02c2, 0x02c5, 1}, - {0x02d2, 0x02df, 1}, - {0x02e5, 0x02eb, 1}, - {0x02ed, 0x02ef, 2}, - {0x02f0, 0x02ff, 1}, - {0x0375, 0x0384, 15}, - {0x0385, 0x03f6, 113}, - {0x0482, 0x058f, 269}, - {0x0606, 0x0608, 1}, - {0x060b, 0x060e, 3}, - {0x060f, 0x06de, 207}, - {0x06e9, 0x06fd, 20}, - {0x06fe, 0x07f6, 248}, - {0x09f2, 0x09f3, 1}, - {0x09fa, 0x09fb, 1}, - {0x0af1, 0x0b70, 127}, - {0x0bf3, 0x0bfa, 1}, - {0x0c7f, 0x0d79, 250}, - {0x0e3f, 0x0f01, 194}, - {0x0f02, 0x0f03, 1}, - {0x0f13, 0x0f15, 2}, - {0x0f16, 0x0f17, 1}, - {0x0f1a, 0x0f1f, 1}, - {0x0f34, 0x0f38, 2}, - {0x0fbe, 0x0fc5, 1}, - {0x0fc7, 0x0fcc, 1}, - {0x0fce, 0x0fcf, 1}, - {0x0fd5, 0x0fd8, 1}, - {0x109e, 0x109f, 1}, - {0x1390, 0x1399, 1}, - {0x17db, 0x1940, 357}, - {0x19de, 0x19ff, 1}, - {0x1b61, 0x1b6a, 1}, - {0x1b74, 0x1b7c, 1}, - {0x1fbd, 0x1fbf, 2}, - {0x1fc0, 0x1fc1, 1}, - {0x1fcd, 0x1fcf, 1}, - {0x1fdd, 0x1fdf, 1}, - {0x1fed, 0x1fef, 1}, - {0x1ffd, 0x1ffe, 1}, - {0x2044, 0x2052, 14}, - {0x207a, 0x207c, 1}, - {0x208a, 0x208c, 1}, - {0x20a0, 0x20ba, 1}, - {0x2100, 0x2101, 1}, - {0x2103, 0x2106, 1}, - {0x2108, 0x2109, 1}, - {0x2114, 0x2116, 2}, - {0x2117, 0x2118, 1}, - {0x211e, 0x2123, 1}, - {0x2125, 0x2129, 2}, - {0x212e, 0x213a, 12}, - {0x213b, 0x2140, 5}, - {0x2141, 0x2144, 1}, - {0x214a, 0x214d, 1}, - {0x214f, 0x2190, 65}, - {0x2191, 0x2307, 1}, - {0x230c, 0x2328, 1}, - {0x232b, 0x23f3, 1}, - {0x2400, 0x2426, 1}, - {0x2440, 0x244a, 1}, - {0x249c, 0x24e9, 1}, - {0x2500, 0x26ff, 1}, - {0x2701, 0x2767, 1}, - {0x2794, 0x27c4, 1}, - {0x27c7, 0x27e5, 1}, - {0x27f0, 0x2982, 1}, - {0x2999, 0x29d7, 1}, - {0x29dc, 0x29fb, 1}, - {0x29fe, 0x2b4c, 1}, - {0x2b50, 0x2b59, 1}, - {0x2ce5, 0x2cea, 1}, - {0x2e80, 0x2e99, 1}, - {0x2e9b, 0x2ef3, 1}, - {0x2f00, 0x2fd5, 1}, - {0x2ff0, 0x2ffb, 1}, - {0x3004, 0x3012, 14}, - {0x3013, 0x3020, 13}, - {0x3036, 0x3037, 1}, - {0x303e, 0x303f, 1}, - {0x309b, 0x309c, 1}, - {0x3190, 0x3191, 1}, - {0x3196, 0x319f, 1}, - {0x31c0, 0x31e3, 1}, - {0x3200, 0x321e, 1}, - {0x322a, 0x3247, 1}, - {0x3250, 0x3260, 16}, - {0x3261, 0x327f, 1}, - {0x328a, 0x32b0, 1}, - {0x32c0, 0x32fe, 1}, - {0x3300, 0x33ff, 1}, - {0x4dc0, 0x4dff, 1}, - {0xa490, 0xa4c6, 1}, - {0xa700, 0xa716, 1}, - {0xa720, 0xa721, 1}, - {0xa789, 0xa78a, 1}, - {0xa828, 0xa82b, 1}, - {0xa836, 0xa839, 1}, - {0xaa77, 0xaa79, 1}, - {0xfb29, 0xfbb2, 137}, - {0xfbb3, 0xfbc1, 1}, - {0xfdfc, 0xfdfd, 1}, - {0xfe62, 0xfe64, 2}, - {0xfe65, 0xfe66, 1}, - {0xfe69, 0xff04, 155}, - {0xff0b, 0xff1c, 17}, - {0xff1d, 0xff1e, 1}, - {0xff3e, 0xff40, 2}, - {0xff5c, 0xff5e, 2}, - {0xffe0, 0xffe6, 1}, - {0xffe8, 0xffee, 1}, - {0xfffc, 0xfffd, 1}, - }, - R32: []Range32{ - {0x10137, 0x1013f, 1}, - {0x10179, 0x10189, 1}, - {0x10190, 0x1019b, 1}, - {0x101d0, 0x101fc, 1}, - {0x1d000, 0x1d0f5, 1}, - {0x1d100, 0x1d126, 1}, - {0x1d129, 0x1d164, 1}, - {0x1d16a, 0x1d16c, 1}, - {0x1d183, 0x1d184, 1}, - {0x1d18c, 0x1d1a9, 1}, - {0x1d1ae, 0x1d1dd, 1}, - {0x1d200, 0x1d241, 1}, - {0x1d245, 0x1d300, 187}, - {0x1d301, 0x1d356, 1}, - {0x1d6c1, 0x1d6db, 26}, - {0x1d6fb, 0x1d715, 26}, - {0x1d735, 0x1d74f, 26}, - {0x1d76f, 0x1d789, 26}, - {0x1d7a9, 0x1d7c3, 26}, - {0x1eef0, 0x1eef1, 1}, - {0x1f000, 0x1f02b, 1}, - {0x1f030, 0x1f093, 1}, - {0x1f0a0, 0x1f0ae, 1}, - {0x1f0b1, 0x1f0be, 1}, - {0x1f0c1, 0x1f0cf, 1}, - {0x1f0d1, 0x1f0df, 1}, - {0x1f110, 0x1f12e, 1}, - {0x1f130, 0x1f16b, 1}, - {0x1f170, 0x1f19a, 1}, - {0x1f1e6, 0x1f202, 1}, - {0x1f210, 0x1f23a, 1}, - {0x1f240, 0x1f248, 1}, - {0x1f250, 0x1f251, 1}, - {0x1f300, 0x1f320, 1}, - {0x1f330, 0x1f335, 1}, - {0x1f337, 0x1f37c, 1}, - {0x1f380, 0x1f393, 1}, - {0x1f3a0, 0x1f3c4, 1}, - {0x1f3c6, 0x1f3ca, 1}, - {0x1f3e0, 0x1f3f0, 1}, - {0x1f400, 0x1f43e, 1}, - {0x1f440, 0x1f442, 2}, - {0x1f443, 0x1f4f7, 1}, - {0x1f4f9, 0x1f4fc, 1}, - {0x1f500, 0x1f53d, 1}, - {0x1f540, 0x1f543, 1}, - {0x1f550, 0x1f567, 1}, - {0x1f5fb, 0x1f640, 1}, - {0x1f645, 0x1f64f, 1}, - {0x1f680, 0x1f6c5, 1}, - {0x1f700, 0x1f773, 1}, - }, - LatinOffset: 10, -} - -var _Sc = &RangeTable{ - R16: []Range16{ - {0x0024, 0x00a2, 126}, - {0x00a3, 0x00a5, 1}, - {0x058f, 0x060b, 124}, - {0x09f2, 0x09f3, 1}, - {0x09fb, 0x0af1, 246}, - {0x0bf9, 0x0e3f, 582}, - {0x17db, 0x20a0, 2245}, - {0x20a1, 0x20ba, 1}, - {0xa838, 0xfdfc, 21956}, - {0xfe69, 0xff04, 155}, - {0xffe0, 0xffe1, 1}, - {0xffe5, 0xffe6, 1}, - }, - LatinOffset: 2, -} - -var _Sk = &RangeTable{ - R16: []Range16{ - {0x005e, 0x0060, 2}, - {0x00a8, 0x00af, 7}, - {0x00b4, 0x00b8, 4}, - {0x02c2, 0x02c5, 1}, - {0x02d2, 0x02df, 1}, - {0x02e5, 0x02eb, 1}, - {0x02ed, 0x02ef, 2}, - {0x02f0, 0x02ff, 1}, - {0x0375, 0x0384, 15}, - {0x0385, 0x1fbd, 7224}, - {0x1fbf, 0x1fc1, 1}, - {0x1fcd, 0x1fcf, 1}, - {0x1fdd, 0x1fdf, 1}, - {0x1fed, 0x1fef, 1}, - {0x1ffd, 0x1ffe, 1}, - {0x309b, 0x309c, 1}, - {0xa700, 0xa716, 1}, - {0xa720, 0xa721, 1}, - {0xa789, 0xa78a, 1}, - {0xfbb2, 0xfbc1, 1}, - {0xff3e, 0xff40, 2}, - {0xffe3, 0xffe3, 1}, - }, - LatinOffset: 3, -} - -var _Sm = &RangeTable{ - R16: []Range16{ - {0x002b, 0x003c, 17}, - {0x003d, 0x003e, 1}, - {0x007c, 0x007e, 2}, - {0x00ac, 0x00b1, 5}, - {0x00d7, 0x00f7, 32}, - {0x03f6, 0x0606, 528}, - {0x0607, 0x0608, 1}, - {0x2044, 0x2052, 14}, - {0x207a, 0x207c, 1}, - {0x208a, 0x208c, 1}, - {0x2118, 0x2140, 40}, - {0x2141, 0x2144, 1}, - {0x214b, 0x2190, 69}, - {0x2191, 0x2194, 1}, - {0x219a, 0x219b, 1}, - {0x21a0, 0x21a6, 3}, - {0x21ae, 0x21ce, 32}, - {0x21cf, 0x21d2, 3}, - {0x21d4, 0x21f4, 32}, - {0x21f5, 0x22ff, 1}, - {0x2320, 0x2321, 1}, - {0x237c, 0x239b, 31}, - {0x239c, 0x23b3, 1}, - {0x23dc, 0x23e1, 1}, - {0x25b7, 0x25c1, 10}, - {0x25f8, 0x25ff, 1}, - {0x266f, 0x27c0, 337}, - {0x27c1, 0x27c4, 1}, - {0x27c7, 0x27e5, 1}, - {0x27f0, 0x27ff, 1}, - {0x2900, 0x2982, 1}, - {0x2999, 0x29d7, 1}, - {0x29dc, 0x29fb, 1}, - {0x29fe, 0x2aff, 1}, - {0x2b30, 0x2b44, 1}, - {0x2b47, 0x2b4c, 1}, - {0xfb29, 0xfe62, 825}, - {0xfe64, 0xfe66, 1}, - {0xff0b, 0xff1c, 17}, - {0xff1d, 0xff1e, 1}, - {0xff5c, 0xff5e, 2}, - {0xffe2, 0xffe9, 7}, - {0xffea, 0xffec, 1}, - }, - R32: []Range32{ - {0x1d6c1, 0x1d6db, 26}, - {0x1d6fb, 0x1d715, 26}, - {0x1d735, 0x1d74f, 26}, - {0x1d76f, 0x1d789, 26}, - {0x1d7a9, 0x1d7c3, 26}, - {0x1eef0, 0x1eef1, 1}, - }, - LatinOffset: 5, -} - -var _So = &RangeTable{ - R16: []Range16{ - {0x00a6, 0x00a9, 3}, - {0x00ae, 0x00b0, 2}, - {0x0482, 0x060e, 396}, - {0x060f, 0x06de, 207}, - {0x06e9, 0x06fd, 20}, - {0x06fe, 0x07f6, 248}, - {0x09fa, 0x0b70, 374}, - {0x0bf3, 0x0bf8, 1}, - {0x0bfa, 0x0c7f, 133}, - {0x0d79, 0x0f01, 392}, - {0x0f02, 0x0f03, 1}, - {0x0f13, 0x0f15, 2}, - {0x0f16, 0x0f17, 1}, - {0x0f1a, 0x0f1f, 1}, - {0x0f34, 0x0f38, 2}, - {0x0fbe, 0x0fc5, 1}, - {0x0fc7, 0x0fcc, 1}, - {0x0fce, 0x0fcf, 1}, - {0x0fd5, 0x0fd8, 1}, - {0x109e, 0x109f, 1}, - {0x1390, 0x1399, 1}, - {0x1940, 0x19de, 158}, - {0x19df, 0x19ff, 1}, - {0x1b61, 0x1b6a, 1}, - {0x1b74, 0x1b7c, 1}, - {0x2100, 0x2101, 1}, - {0x2103, 0x2106, 1}, - {0x2108, 0x2109, 1}, - {0x2114, 0x2116, 2}, - {0x2117, 0x211e, 7}, - {0x211f, 0x2123, 1}, - {0x2125, 0x2129, 2}, - {0x212e, 0x213a, 12}, - {0x213b, 0x214a, 15}, - {0x214c, 0x214d, 1}, - {0x214f, 0x2195, 70}, - {0x2196, 0x2199, 1}, - {0x219c, 0x219f, 1}, - {0x21a1, 0x21a2, 1}, - {0x21a4, 0x21a5, 1}, - {0x21a7, 0x21ad, 1}, - {0x21af, 0x21cd, 1}, - {0x21d0, 0x21d1, 1}, - {0x21d3, 0x21d5, 2}, - {0x21d6, 0x21f3, 1}, - {0x2300, 0x2307, 1}, - {0x230c, 0x231f, 1}, - {0x2322, 0x2328, 1}, - {0x232b, 0x237b, 1}, - {0x237d, 0x239a, 1}, - {0x23b4, 0x23db, 1}, - {0x23e2, 0x23f3, 1}, - {0x2400, 0x2426, 1}, - {0x2440, 0x244a, 1}, - {0x249c, 0x24e9, 1}, - {0x2500, 0x25b6, 1}, - {0x25b8, 0x25c0, 1}, - {0x25c2, 0x25f7, 1}, - {0x2600, 0x266e, 1}, - {0x2670, 0x26ff, 1}, - {0x2701, 0x2767, 1}, - {0x2794, 0x27bf, 1}, - {0x2800, 0x28ff, 1}, - {0x2b00, 0x2b2f, 1}, - {0x2b45, 0x2b46, 1}, - {0x2b50, 0x2b59, 1}, - {0x2ce5, 0x2cea, 1}, - {0x2e80, 0x2e99, 1}, - {0x2e9b, 0x2ef3, 1}, - {0x2f00, 0x2fd5, 1}, - {0x2ff0, 0x2ffb, 1}, - {0x3004, 0x3012, 14}, - {0x3013, 0x3020, 13}, - {0x3036, 0x3037, 1}, - {0x303e, 0x303f, 1}, - {0x3190, 0x3191, 1}, - {0x3196, 0x319f, 1}, - {0x31c0, 0x31e3, 1}, - {0x3200, 0x321e, 1}, - {0x322a, 0x3247, 1}, - {0x3250, 0x3260, 16}, - {0x3261, 0x327f, 1}, - {0x328a, 0x32b0, 1}, - {0x32c0, 0x32fe, 1}, - {0x3300, 0x33ff, 1}, - {0x4dc0, 0x4dff, 1}, - {0xa490, 0xa4c6, 1}, - {0xa828, 0xa82b, 1}, - {0xa836, 0xa837, 1}, - {0xa839, 0xaa77, 574}, - {0xaa78, 0xaa79, 1}, - {0xfdfd, 0xffe4, 487}, - {0xffe8, 0xffed, 5}, - {0xffee, 0xfffc, 14}, - {0xfffd, 0xfffd, 1}, - }, - R32: []Range32{ - {0x10137, 0x10137, 1}, - {0x10138, 0x1013f, 1}, - {0x10179, 0x10189, 1}, - {0x10190, 0x1019b, 1}, - {0x101d0, 0x101fc, 1}, - {0x1d000, 0x1d0f5, 1}, - {0x1d100, 0x1d126, 1}, - {0x1d129, 0x1d164, 1}, - {0x1d16a, 0x1d16c, 1}, - {0x1d183, 0x1d184, 1}, - {0x1d18c, 0x1d1a9, 1}, - {0x1d1ae, 0x1d1dd, 1}, - {0x1d200, 0x1d241, 1}, - {0x1d245, 0x1d300, 187}, - {0x1d301, 0x1d356, 1}, - {0x1f000, 0x1f02b, 1}, - {0x1f030, 0x1f093, 1}, - {0x1f0a0, 0x1f0ae, 1}, - {0x1f0b1, 0x1f0be, 1}, - {0x1f0c1, 0x1f0cf, 1}, - {0x1f0d1, 0x1f0df, 1}, - {0x1f110, 0x1f12e, 1}, - {0x1f130, 0x1f16b, 1}, - {0x1f170, 0x1f19a, 1}, - {0x1f1e6, 0x1f202, 1}, - {0x1f210, 0x1f23a, 1}, - {0x1f240, 0x1f248, 1}, - {0x1f250, 0x1f251, 1}, - {0x1f300, 0x1f320, 1}, - {0x1f330, 0x1f335, 1}, - {0x1f337, 0x1f37c, 1}, - {0x1f380, 0x1f393, 1}, - {0x1f3a0, 0x1f3c4, 1}, - {0x1f3c6, 0x1f3ca, 1}, - {0x1f3e0, 0x1f3f0, 1}, - {0x1f400, 0x1f43e, 1}, - {0x1f440, 0x1f442, 2}, - {0x1f443, 0x1f4f7, 1}, - {0x1f4f9, 0x1f4fc, 1}, - {0x1f500, 0x1f53d, 1}, - {0x1f540, 0x1f543, 1}, - {0x1f550, 0x1f567, 1}, - {0x1f5fb, 0x1f640, 1}, - {0x1f645, 0x1f64f, 1}, - {0x1f680, 0x1f6c5, 1}, - {0x1f700, 0x1f773, 1}, - }, - LatinOffset: 2, -} - -var _Z = &RangeTable{ - R16: []Range16{ - {0x0020, 0x00a0, 128}, - {0x1680, 0x2000, 2432}, - {0x2001, 0x200a, 1}, - {0x2028, 0x2029, 1}, - {0x202f, 0x205f, 48}, - {0x3000, 0x3000, 1}, - }, - LatinOffset: 1, -} - -var _Zl = &RangeTable{ - R16: []Range16{ - {0x2028, 0x2028, 1}, - }, -} - -var _Zp = &RangeTable{ - R16: []Range16{ - {0x2029, 0x2029, 1}, - }, -} - -var _Zs = &RangeTable{ - R16: []Range16{ - {0x0020, 0x00a0, 128}, - {0x1680, 0x2000, 2432}, - {0x2001, 0x200a, 1}, - {0x202f, 0x205f, 48}, - {0x3000, 0x3000, 1}, - }, - LatinOffset: 1, -} - -// These variables have type *RangeTable. -var ( - Cc = _Cc // Cc is the set of Unicode characters in category Cc. - Cf = _Cf // Cf is the set of Unicode characters in category Cf. - Co = _Co // Co is the set of Unicode characters in category Co. - Cs = _Cs // Cs is the set of Unicode characters in category Cs. - Digit = _Nd // Digit is the set of Unicode characters with the "decimal digit" property. - Nd = _Nd // Nd is the set of Unicode characters in category Nd. - Letter = _L // Letter/L is the set of Unicode letters, category L. - L = _L - Lm = _Lm // Lm is the set of Unicode characters in category Lm. - Lo = _Lo // Lo is the set of Unicode characters in category Lo. - Lower = _Ll // Lower is the set of Unicode lower case letters. - Ll = _Ll // Ll is the set of Unicode characters in category Ll. - Mark = _M // Mark/M is the set of Unicode mark characters, category M. - M = _M - Mc = _Mc // Mc is the set of Unicode characters in category Mc. - Me = _Me // Me is the set of Unicode characters in category Me. - Mn = _Mn // Mn is the set of Unicode characters in category Mn. - Nl = _Nl // Nl is the set of Unicode characters in category Nl. - No = _No // No is the set of Unicode characters in category No. - Number = _N // Number/N is the set of Unicode number characters, category N. - N = _N - Other = _C // Other/C is the set of Unicode control and special characters, category C. - C = _C - Pc = _Pc // Pc is the set of Unicode characters in category Pc. - Pd = _Pd // Pd is the set of Unicode characters in category Pd. - Pe = _Pe // Pe is the set of Unicode characters in category Pe. - Pf = _Pf // Pf is the set of Unicode characters in category Pf. - Pi = _Pi // Pi is the set of Unicode characters in category Pi. - Po = _Po // Po is the set of Unicode characters in category Po. - Ps = _Ps // Ps is the set of Unicode characters in category Ps. - Punct = _P // Punct/P is the set of Unicode punctuation characters, category P. - P = _P - Sc = _Sc // Sc is the set of Unicode characters in category Sc. - Sk = _Sk // Sk is the set of Unicode characters in category Sk. - Sm = _Sm // Sm is the set of Unicode characters in category Sm. - So = _So // So is the set of Unicode characters in category So. - Space = _Z // Space/Z is the set of Unicode space characters, category Z. - Z = _Z - Symbol = _S // Symbol/S is the set of Unicode symbol characters, category S. - S = _S - Title = _Lt // Title is the set of Unicode title case letters. - Lt = _Lt // Lt is the set of Unicode characters in category Lt. - Upper = _Lu // Upper is the set of Unicode upper case letters. - Lu = _Lu // Lu is the set of Unicode characters in category Lu. - Zl = _Zl // Zl is the set of Unicode characters in category Zl. - Zp = _Zp // Zp is the set of Unicode characters in category Zp. - Zs = _Zs // Zs is the set of Unicode characters in category Zs. -) - -// Generated by running -// maketables --scripts=all --url=http://www.unicode.org/Public/6.3.0/ucd/ -// DO NOT EDIT - -// Scripts is the set of Unicode script tables. -var Scripts = map[string]*RangeTable{ - "Arabic": Arabic, - "Armenian": Armenian, - "Avestan": Avestan, - "Balinese": Balinese, - "Bamum": Bamum, - "Batak": Batak, - "Bengali": Bengali, - "Bopomofo": Bopomofo, - "Brahmi": Brahmi, - "Braille": Braille, - "Buginese": Buginese, - "Buhid": Buhid, - "Canadian_Aboriginal": Canadian_Aboriginal, - "Carian": Carian, - "Chakma": Chakma, - "Cham": Cham, - "Cherokee": Cherokee, - "Common": Common, - "Coptic": Coptic, - "Cuneiform": Cuneiform, - "Cypriot": Cypriot, - "Cyrillic": Cyrillic, - "Deseret": Deseret, - "Devanagari": Devanagari, - "Egyptian_Hieroglyphs": Egyptian_Hieroglyphs, - "Ethiopic": Ethiopic, - "Georgian": Georgian, - "Glagolitic": Glagolitic, - "Gothic": Gothic, - "Greek": Greek, - "Gujarati": Gujarati, - "Gurmukhi": Gurmukhi, - "Han": Han, - "Hangul": Hangul, - "Hanunoo": Hanunoo, - "Hebrew": Hebrew, - "Hiragana": Hiragana, - "Imperial_Aramaic": Imperial_Aramaic, - "Inherited": Inherited, - "Inscriptional_Pahlavi": Inscriptional_Pahlavi, - "Inscriptional_Parthian": Inscriptional_Parthian, - "Javanese": Javanese, - "Kaithi": Kaithi, - "Kannada": Kannada, - "Katakana": Katakana, - "Kayah_Li": Kayah_Li, - "Kharoshthi": Kharoshthi, - "Khmer": Khmer, - "Lao": Lao, - "Latin": Latin, - "Lepcha": Lepcha, - "Limbu": Limbu, - "Linear_B": Linear_B, - "Lisu": Lisu, - "Lycian": Lycian, - "Lydian": Lydian, - "Malayalam": Malayalam, - "Mandaic": Mandaic, - "Meetei_Mayek": Meetei_Mayek, - "Meroitic_Cursive": Meroitic_Cursive, - "Meroitic_Hieroglyphs": Meroitic_Hieroglyphs, - "Miao": Miao, - "Mongolian": Mongolian, - "Myanmar": Myanmar, - "New_Tai_Lue": New_Tai_Lue, - "Nko": Nko, - "Ogham": Ogham, - "Ol_Chiki": Ol_Chiki, - "Old_Italic": Old_Italic, - "Old_Persian": Old_Persian, - "Old_South_Arabian": Old_South_Arabian, - "Old_Turkic": Old_Turkic, - "Oriya": Oriya, - "Osmanya": Osmanya, - "Phags_Pa": Phags_Pa, - "Phoenician": Phoenician, - "Rejang": Rejang, - "Runic": Runic, - "Samaritan": Samaritan, - "Saurashtra": Saurashtra, - "Sharada": Sharada, - "Shavian": Shavian, - "Sinhala": Sinhala, - "Sora_Sompeng": Sora_Sompeng, - "Sundanese": Sundanese, - "Syloti_Nagri": Syloti_Nagri, - "Syriac": Syriac, - "Tagalog": Tagalog, - "Tagbanwa": Tagbanwa, - "Tai_Le": Tai_Le, - "Tai_Tham": Tai_Tham, - "Tai_Viet": Tai_Viet, - "Takri": Takri, - "Tamil": Tamil, - "Telugu": Telugu, - "Thaana": Thaana, - "Thai": Thai, - "Tibetan": Tibetan, - "Tifinagh": Tifinagh, - "Ugaritic": Ugaritic, - "Vai": Vai, - "Yi": Yi, -} - -var _Arabic = &RangeTable{ - R16: []Range16{ - {0x0600, 0x0604, 1}, - {0x0606, 0x060b, 1}, - {0x060d, 0x061a, 1}, - {0x061c, 0x061c, 1}, - {0x061e, 0x061e, 1}, - {0x0620, 0x063f, 1}, - {0x0641, 0x064a, 1}, - {0x0656, 0x065f, 1}, - {0x066a, 0x066f, 1}, - {0x0671, 0x06dc, 1}, - {0x06de, 0x06ff, 1}, - {0x0750, 0x077f, 1}, - {0x08a0, 0x08a0, 1}, - {0x08a2, 0x08ac, 1}, - {0x08e4, 0x08fe, 1}, - {0xfb50, 0xfbc1, 1}, - {0xfbd3, 0xfd3d, 1}, - {0xfd50, 0xfd8f, 1}, - {0xfd92, 0xfdc7, 1}, - {0xfdf0, 0xfdfc, 1}, - {0xfe70, 0xfe74, 1}, - {0xfe76, 0xfefc, 1}, - }, - R32: []Range32{ - {0x10e60, 0x10e7e, 1}, - {0x1ee00, 0x1ee03, 1}, - {0x1ee05, 0x1ee1f, 1}, - {0x1ee21, 0x1ee22, 1}, - {0x1ee24, 0x1ee24, 1}, - {0x1ee27, 0x1ee27, 1}, - {0x1ee29, 0x1ee32, 1}, - {0x1ee34, 0x1ee37, 1}, - {0x1ee39, 0x1ee39, 1}, - {0x1ee3b, 0x1ee3b, 1}, - {0x1ee42, 0x1ee42, 1}, - {0x1ee47, 0x1ee47, 1}, - {0x1ee49, 0x1ee49, 1}, - {0x1ee4b, 0x1ee4b, 1}, - {0x1ee4d, 0x1ee4f, 1}, - {0x1ee51, 0x1ee52, 1}, - {0x1ee54, 0x1ee54, 1}, - {0x1ee57, 0x1ee57, 1}, - {0x1ee59, 0x1ee59, 1}, - {0x1ee5b, 0x1ee5b, 1}, - {0x1ee5d, 0x1ee5d, 1}, - {0x1ee5f, 0x1ee5f, 1}, - {0x1ee61, 0x1ee62, 1}, - {0x1ee64, 0x1ee64, 1}, - {0x1ee67, 0x1ee6a, 1}, - {0x1ee6c, 0x1ee72, 1}, - {0x1ee74, 0x1ee77, 1}, - {0x1ee79, 0x1ee7c, 1}, - {0x1ee7e, 0x1ee7e, 1}, - {0x1ee80, 0x1ee89, 1}, - {0x1ee8b, 0x1ee9b, 1}, - {0x1eea1, 0x1eea3, 1}, - {0x1eea5, 0x1eea9, 1}, - {0x1eeab, 0x1eebb, 1}, - {0x1eef0, 0x1eef1, 1}, - }, -} - -var _Armenian = &RangeTable{ - R16: []Range16{ - {0x0531, 0x0556, 1}, - {0x0559, 0x055f, 1}, - {0x0561, 0x0587, 1}, - {0x058a, 0x058a, 1}, - {0x058f, 0x058f, 1}, - {0xfb13, 0xfb17, 1}, - }, -} - -var _Avestan = &RangeTable{ - R16: []Range16{}, - R32: []Range32{ - {0x10b00, 0x10b35, 1}, - {0x10b39, 0x10b3f, 1}, - }, -} - -var _Balinese = &RangeTable{ - R16: []Range16{ - {0x1b00, 0x1b4b, 1}, - {0x1b50, 0x1b7c, 1}, - }, -} - -var _Bamum = &RangeTable{ - R16: []Range16{ - {0xa6a0, 0xa6f7, 1}, - }, - R32: []Range32{ - {0x16800, 0x16a38, 1}, - }, -} - -var _Batak = &RangeTable{ - R16: []Range16{ - {0x1bc0, 0x1bf3, 1}, - {0x1bfc, 0x1bff, 1}, - }, -} - -var _Bengali = &RangeTable{ - R16: []Range16{ - {0x0981, 0x0983, 1}, - {0x0985, 0x098c, 1}, - {0x098f, 0x0990, 1}, - {0x0993, 0x09a8, 1}, - {0x09aa, 0x09b0, 1}, - {0x09b2, 0x09b2, 1}, - {0x09b6, 0x09b9, 1}, - {0x09bc, 0x09c4, 1}, - {0x09c7, 0x09c8, 1}, - {0x09cb, 0x09ce, 1}, - {0x09d7, 0x09d7, 1}, - {0x09dc, 0x09dd, 1}, - {0x09df, 0x09e3, 1}, - {0x09e6, 0x09fb, 1}, - }, -} - -var _Bopomofo = &RangeTable{ - R16: []Range16{ - {0x02ea, 0x02eb, 1}, - {0x3105, 0x312d, 1}, - {0x31a0, 0x31ba, 1}, - }, -} - -var _Brahmi = &RangeTable{ - R16: []Range16{}, - R32: []Range32{ - {0x11000, 0x1104d, 1}, - {0x11052, 0x1106f, 1}, - }, -} - -var _Braille = &RangeTable{ - R16: []Range16{ - {0x2800, 0x28ff, 1}, - }, -} - -var _Buginese = &RangeTable{ - R16: []Range16{ - {0x1a00, 0x1a1b, 1}, - {0x1a1e, 0x1a1f, 1}, - }, -} - -var _Buhid = &RangeTable{ - R16: []Range16{ - {0x1740, 0x1753, 1}, - }, -} - -var _Canadian_Aboriginal = &RangeTable{ - R16: []Range16{ - {0x1400, 0x167f, 1}, - {0x18b0, 0x18f5, 1}, - }, -} - -var _Carian = &RangeTable{ - R16: []Range16{}, - R32: []Range32{ - {0x102a0, 0x102d0, 1}, - }, -} - -var _Chakma = &RangeTable{ - R16: []Range16{}, - R32: []Range32{ - {0x11100, 0x11134, 1}, - {0x11136, 0x11143, 1}, - }, -} - -var _Cham = &RangeTable{ - R16: []Range16{ - {0xaa00, 0xaa36, 1}, - {0xaa40, 0xaa4d, 1}, - {0xaa50, 0xaa59, 1}, - {0xaa5c, 0xaa5f, 1}, - }, -} - -var _Cherokee = &RangeTable{ - R16: []Range16{ - {0x13a0, 0x13f4, 1}, - }, -} - -var _Common = &RangeTable{ - R16: []Range16{ - {0x0000, 0x0040, 1}, - {0x005b, 0x0060, 1}, - {0x007b, 0x00a9, 1}, - {0x00ab, 0x00b9, 1}, - {0x00bb, 0x00bf, 1}, - {0x00d7, 0x00d7, 1}, - {0x00f7, 0x00f7, 1}, - {0x02b9, 0x02df, 1}, - {0x02e5, 0x02e9, 1}, - {0x02ec, 0x02ff, 1}, - {0x0374, 0x0374, 1}, - {0x037e, 0x037e, 1}, - {0x0385, 0x0385, 1}, - {0x0387, 0x0387, 1}, - {0x0589, 0x0589, 1}, - {0x060c, 0x060c, 1}, - {0x061b, 0x061b, 1}, - {0x061f, 0x061f, 1}, - {0x0640, 0x0640, 1}, - {0x0660, 0x0669, 1}, - {0x06dd, 0x06dd, 1}, - {0x0964, 0x0965, 1}, - {0x0e3f, 0x0e3f, 1}, - {0x0fd5, 0x0fd8, 1}, - {0x10fb, 0x10fb, 1}, - {0x16eb, 0x16ed, 1}, - {0x1735, 0x1736, 1}, - {0x1802, 0x1803, 1}, - {0x1805, 0x1805, 1}, - {0x1cd3, 0x1cd3, 1}, - {0x1ce1, 0x1ce1, 1}, - {0x1ce9, 0x1cec, 1}, - {0x1cee, 0x1cf3, 1}, - {0x1cf5, 0x1cf6, 1}, - {0x2000, 0x200b, 1}, - {0x200e, 0x2064, 1}, - {0x2066, 0x2070, 1}, - {0x2074, 0x207e, 1}, - {0x2080, 0x208e, 1}, - {0x20a0, 0x20ba, 1}, - {0x2100, 0x2125, 1}, - {0x2127, 0x2129, 1}, - {0x212c, 0x2131, 1}, - {0x2133, 0x214d, 1}, - {0x214f, 0x215f, 1}, - {0x2189, 0x2189, 1}, - {0x2190, 0x23f3, 1}, - {0x2400, 0x2426, 1}, - {0x2440, 0x244a, 1}, - {0x2460, 0x26ff, 1}, - {0x2701, 0x27ff, 1}, - {0x2900, 0x2b4c, 1}, - {0x2b50, 0x2b59, 1}, - {0x2e00, 0x2e3b, 1}, - {0x2ff0, 0x2ffb, 1}, - {0x3000, 0x3004, 1}, - {0x3006, 0x3006, 1}, - {0x3008, 0x3020, 1}, - {0x3030, 0x3037, 1}, - {0x303c, 0x303f, 1}, - {0x309b, 0x309c, 1}, - {0x30a0, 0x30a0, 1}, - {0x30fb, 0x30fc, 1}, - {0x3190, 0x319f, 1}, - {0x31c0, 0x31e3, 1}, - {0x3220, 0x325f, 1}, - {0x327f, 0x32cf, 1}, - {0x3358, 0x33ff, 1}, - {0x4dc0, 0x4dff, 1}, - {0xa700, 0xa721, 1}, - {0xa788, 0xa78a, 1}, - {0xa830, 0xa839, 1}, - {0xa9cf, 0xa9cf, 1}, - {0xfd3e, 0xfd3f, 1}, - {0xfdfd, 0xfdfd, 1}, - {0xfe10, 0xfe19, 1}, - {0xfe30, 0xfe52, 1}, - {0xfe54, 0xfe66, 1}, - {0xfe68, 0xfe6b, 1}, - {0xfeff, 0xfeff, 1}, - {0xff01, 0xff20, 1}, - {0xff3b, 0xff40, 1}, - {0xff5b, 0xff65, 1}, - {0xff70, 0xff70, 1}, - {0xff9e, 0xff9f, 1}, - {0xffe0, 0xffe6, 1}, - {0xffe8, 0xffee, 1}, - {0xfff9, 0xfffd, 1}, - }, - R32: []Range32{ - {0x10100, 0x10102, 1}, - {0x10107, 0x10133, 1}, - {0x10137, 0x1013f, 1}, - {0x10190, 0x1019b, 1}, - {0x101d0, 0x101fc, 1}, - {0x1d000, 0x1d0f5, 1}, - {0x1d100, 0x1d126, 1}, - {0x1d129, 0x1d166, 1}, - {0x1d16a, 0x1d17a, 1}, - {0x1d183, 0x1d184, 1}, - {0x1d18c, 0x1d1a9, 1}, - {0x1d1ae, 0x1d1dd, 1}, - {0x1d300, 0x1d356, 1}, - {0x1d360, 0x1d371, 1}, - {0x1d400, 0x1d454, 1}, - {0x1d456, 0x1d49c, 1}, - {0x1d49e, 0x1d49f, 1}, - {0x1d4a2, 0x1d4a2, 1}, - {0x1d4a5, 0x1d4a6, 1}, - {0x1d4a9, 0x1d4ac, 1}, - {0x1d4ae, 0x1d4b9, 1}, - {0x1d4bb, 0x1d4bb, 1}, - {0x1d4bd, 0x1d4c3, 1}, - {0x1d4c5, 0x1d505, 1}, - {0x1d507, 0x1d50a, 1}, - {0x1d50d, 0x1d514, 1}, - {0x1d516, 0x1d51c, 1}, - {0x1d51e, 0x1d539, 1}, - {0x1d53b, 0x1d53e, 1}, - {0x1d540, 0x1d544, 1}, - {0x1d546, 0x1d546, 1}, - {0x1d54a, 0x1d550, 1}, - {0x1d552, 0x1d6a5, 1}, - {0x1d6a8, 0x1d7cb, 1}, - {0x1d7ce, 0x1d7ff, 1}, - {0x1f000, 0x1f02b, 1}, - {0x1f030, 0x1f093, 1}, - {0x1f0a0, 0x1f0ae, 1}, - {0x1f0b1, 0x1f0be, 1}, - {0x1f0c1, 0x1f0cf, 1}, - {0x1f0d1, 0x1f0df, 1}, - {0x1f100, 0x1f10a, 1}, - {0x1f110, 0x1f12e, 1}, - {0x1f130, 0x1f16b, 1}, - {0x1f170, 0x1f19a, 1}, - {0x1f1e6, 0x1f1ff, 1}, - {0x1f201, 0x1f202, 1}, - {0x1f210, 0x1f23a, 1}, - {0x1f240, 0x1f248, 1}, - {0x1f250, 0x1f251, 1}, - {0x1f300, 0x1f320, 1}, - {0x1f330, 0x1f335, 1}, - {0x1f337, 0x1f37c, 1}, - {0x1f380, 0x1f393, 1}, - {0x1f3a0, 0x1f3c4, 1}, - {0x1f3c6, 0x1f3ca, 1}, - {0x1f3e0, 0x1f3f0, 1}, - {0x1f400, 0x1f43e, 1}, - {0x1f440, 0x1f440, 1}, - {0x1f442, 0x1f4f7, 1}, - {0x1f4f9, 0x1f4fc, 1}, - {0x1f500, 0x1f53d, 1}, - {0x1f540, 0x1f543, 1}, - {0x1f550, 0x1f567, 1}, - {0x1f5fb, 0x1f640, 1}, - {0x1f645, 0x1f64f, 1}, - {0x1f680, 0x1f6c5, 1}, - {0x1f700, 0x1f773, 1}, - {0xe0001, 0xe0001, 1}, - {0xe0020, 0xe007f, 1}, - }, - LatinOffset: 7, -} - -var _Coptic = &RangeTable{ - R16: []Range16{ - {0x03e2, 0x03ef, 1}, - {0x2c80, 0x2cf3, 1}, - {0x2cf9, 0x2cff, 1}, - }, -} - -var _Cuneiform = &RangeTable{ - R16: []Range16{}, - R32: []Range32{ - {0x12000, 0x1236e, 1}, - {0x12400, 0x12462, 1}, - {0x12470, 0x12473, 1}, - }, -} - -var _Cypriot = &RangeTable{ - R16: []Range16{}, - R32: []Range32{ - {0x10800, 0x10805, 1}, - {0x10808, 0x10808, 1}, - {0x1080a, 0x10835, 1}, - {0x10837, 0x10838, 1}, - {0x1083c, 0x1083c, 1}, - {0x1083f, 0x1083f, 1}, - }, -} - -var _Cyrillic = &RangeTable{ - R16: []Range16{ - {0x0400, 0x0484, 1}, - {0x0487, 0x0527, 1}, - {0x1d2b, 0x1d2b, 1}, - {0x1d78, 0x1d78, 1}, - {0x2de0, 0x2dff, 1}, - {0xa640, 0xa697, 1}, - {0xa69f, 0xa69f, 1}, - }, -} - -var _Deseret = &RangeTable{ - R16: []Range16{}, - R32: []Range32{ - {0x10400, 0x1044f, 1}, - }, -} - -var _Devanagari = &RangeTable{ - R16: []Range16{ - {0x0900, 0x0950, 1}, - {0x0953, 0x0963, 1}, - {0x0966, 0x0977, 1}, - {0x0979, 0x097f, 1}, - {0xa8e0, 0xa8fb, 1}, - }, -} - -var _Egyptian_Hieroglyphs = &RangeTable{ - R16: []Range16{}, - R32: []Range32{ - {0x13000, 0x1342e, 1}, - }, -} - -var _Ethiopic = &RangeTable{ - R16: []Range16{ - {0x1200, 0x1248, 1}, - {0x124a, 0x124d, 1}, - {0x1250, 0x1256, 1}, - {0x1258, 0x1258, 1}, - {0x125a, 0x125d, 1}, - {0x1260, 0x1288, 1}, - {0x128a, 0x128d, 1}, - {0x1290, 0x12b0, 1}, - {0x12b2, 0x12b5, 1}, - {0x12b8, 0x12be, 1}, - {0x12c0, 0x12c0, 1}, - {0x12c2, 0x12c5, 1}, - {0x12c8, 0x12d6, 1}, - {0x12d8, 0x1310, 1}, - {0x1312, 0x1315, 1}, - {0x1318, 0x135a, 1}, - {0x135d, 0x137c, 1}, - {0x1380, 0x1399, 1}, - {0x2d80, 0x2d96, 1}, - {0x2da0, 0x2da6, 1}, - {0x2da8, 0x2dae, 1}, - {0x2db0, 0x2db6, 1}, - {0x2db8, 0x2dbe, 1}, - {0x2dc0, 0x2dc6, 1}, - {0x2dc8, 0x2dce, 1}, - {0x2dd0, 0x2dd6, 1}, - {0x2dd8, 0x2dde, 1}, - {0xab01, 0xab06, 1}, - {0xab09, 0xab0e, 1}, - {0xab11, 0xab16, 1}, - {0xab20, 0xab26, 1}, - {0xab28, 0xab2e, 1}, - }, -} - -var _Georgian = &RangeTable{ - R16: []Range16{ - {0x10a0, 0x10c5, 1}, - {0x10c7, 0x10c7, 1}, - {0x10cd, 0x10cd, 1}, - {0x10d0, 0x10fa, 1}, - {0x10fc, 0x10ff, 1}, - {0x2d00, 0x2d25, 1}, - {0x2d27, 0x2d27, 1}, - {0x2d2d, 0x2d2d, 1}, - }, -} - -var _Glagolitic = &RangeTable{ - R16: []Range16{ - {0x2c00, 0x2c2e, 1}, - {0x2c30, 0x2c5e, 1}, - }, -} - -var _Gothic = &RangeTable{ - R16: []Range16{}, - R32: []Range32{ - {0x10330, 0x1034a, 1}, - }, -} - -var _Greek = &RangeTable{ - R16: []Range16{ - {0x0370, 0x0373, 1}, - {0x0375, 0x0377, 1}, - {0x037a, 0x037d, 1}, - {0x0384, 0x0384, 1}, - {0x0386, 0x0386, 1}, - {0x0388, 0x038a, 1}, - {0x038c, 0x038c, 1}, - {0x038e, 0x03a1, 1}, - {0x03a3, 0x03e1, 1}, - {0x03f0, 0x03ff, 1}, - {0x1d26, 0x1d2a, 1}, - {0x1d5d, 0x1d61, 1}, - {0x1d66, 0x1d6a, 1}, - {0x1dbf, 0x1dbf, 1}, - {0x1f00, 0x1f15, 1}, - {0x1f18, 0x1f1d, 1}, - {0x1f20, 0x1f45, 1}, - {0x1f48, 0x1f4d, 1}, - {0x1f50, 0x1f57, 1}, - {0x1f59, 0x1f59, 1}, - {0x1f5b, 0x1f5b, 1}, - {0x1f5d, 0x1f5d, 1}, - {0x1f5f, 0x1f7d, 1}, - {0x1f80, 0x1fb4, 1}, - {0x1fb6, 0x1fc4, 1}, - {0x1fc6, 0x1fd3, 1}, - {0x1fd6, 0x1fdb, 1}, - {0x1fdd, 0x1fef, 1}, - {0x1ff2, 0x1ff4, 1}, - {0x1ff6, 0x1ffe, 1}, - {0x2126, 0x2126, 1}, - }, - R32: []Range32{ - {0x10140, 0x1018a, 1}, - {0x1d200, 0x1d245, 1}, - }, -} - -var _Gujarati = &RangeTable{ - R16: []Range16{ - {0x0a81, 0x0a83, 1}, - {0x0a85, 0x0a8d, 1}, - {0x0a8f, 0x0a91, 1}, - {0x0a93, 0x0aa8, 1}, - {0x0aaa, 0x0ab0, 1}, - {0x0ab2, 0x0ab3, 1}, - {0x0ab5, 0x0ab9, 1}, - {0x0abc, 0x0ac5, 1}, - {0x0ac7, 0x0ac9, 1}, - {0x0acb, 0x0acd, 1}, - {0x0ad0, 0x0ad0, 1}, - {0x0ae0, 0x0ae3, 1}, - {0x0ae6, 0x0af1, 1}, - }, -} - -var _Gurmukhi = &RangeTable{ - R16: []Range16{ - {0x0a01, 0x0a03, 1}, - {0x0a05, 0x0a0a, 1}, - {0x0a0f, 0x0a10, 1}, - {0x0a13, 0x0a28, 1}, - {0x0a2a, 0x0a30, 1}, - {0x0a32, 0x0a33, 1}, - {0x0a35, 0x0a36, 1}, - {0x0a38, 0x0a39, 1}, - {0x0a3c, 0x0a3c, 1}, - {0x0a3e, 0x0a42, 1}, - {0x0a47, 0x0a48, 1}, - {0x0a4b, 0x0a4d, 1}, - {0x0a51, 0x0a51, 1}, - {0x0a59, 0x0a5c, 1}, - {0x0a5e, 0x0a5e, 1}, - {0x0a66, 0x0a75, 1}, - }, -} - -var _Han = &RangeTable{ - R16: []Range16{ - {0x2e80, 0x2e99, 1}, - {0x2e9b, 0x2ef3, 1}, - {0x2f00, 0x2fd5, 1}, - {0x3005, 0x3005, 1}, - {0x3007, 0x3007, 1}, - {0x3021, 0x3029, 1}, - {0x3038, 0x303b, 1}, - {0x3400, 0x4db5, 1}, - {0x4e00, 0x9fcc, 1}, - {0xf900, 0xfa6d, 1}, - {0xfa70, 0xfad9, 1}, - }, - R32: []Range32{ - {0x20000, 0x2a6d6, 1}, - {0x2a700, 0x2b734, 1}, - {0x2b740, 0x2b81d, 1}, - {0x2f800, 0x2fa1d, 1}, - }, -} - -var _Hangul = &RangeTable{ - R16: []Range16{ - {0x1100, 0x11ff, 1}, - {0x302e, 0x302f, 1}, - {0x3131, 0x318e, 1}, - {0x3200, 0x321e, 1}, - {0x3260, 0x327e, 1}, - {0xa960, 0xa97c, 1}, - {0xac00, 0xd7a3, 1}, - {0xd7b0, 0xd7c6, 1}, - {0xd7cb, 0xd7fb, 1}, - {0xffa0, 0xffbe, 1}, - {0xffc2, 0xffc7, 1}, - {0xffca, 0xffcf, 1}, - {0xffd2, 0xffd7, 1}, - {0xffda, 0xffdc, 1}, - }, -} - -var _Hanunoo = &RangeTable{ - R16: []Range16{ - {0x1720, 0x1734, 1}, - }, -} - -var _Hebrew = &RangeTable{ - R16: []Range16{ - {0x0591, 0x05c7, 1}, - {0x05d0, 0x05ea, 1}, - {0x05f0, 0x05f4, 1}, - {0xfb1d, 0xfb36, 1}, - {0xfb38, 0xfb3c, 1}, - {0xfb3e, 0xfb3e, 1}, - {0xfb40, 0xfb41, 1}, - {0xfb43, 0xfb44, 1}, - {0xfb46, 0xfb4f, 1}, - }, -} - -var _Hiragana = &RangeTable{ - R16: []Range16{ - {0x3041, 0x3096, 1}, - {0x309d, 0x309f, 1}, - }, - R32: []Range32{ - {0x1b001, 0x1b001, 1}, - {0x1f200, 0x1f200, 1}, - }, -} - -var _Imperial_Aramaic = &RangeTable{ - R16: []Range16{}, - R32: []Range32{ - {0x10840, 0x10855, 1}, - {0x10857, 0x1085f, 1}, - }, -} - -var _Inherited = &RangeTable{ - R16: []Range16{ - {0x0300, 0x036f, 1}, - {0x0485, 0x0486, 1}, - {0x064b, 0x0655, 1}, - {0x0670, 0x0670, 1}, - {0x0951, 0x0952, 1}, - {0x1cd0, 0x1cd2, 1}, - {0x1cd4, 0x1ce0, 1}, - {0x1ce2, 0x1ce8, 1}, - {0x1ced, 0x1ced, 1}, - {0x1cf4, 0x1cf4, 1}, - {0x1dc0, 0x1de6, 1}, - {0x1dfc, 0x1dff, 1}, - {0x200c, 0x200d, 1}, - {0x20d0, 0x20f0, 1}, - {0x302a, 0x302d, 1}, - {0x3099, 0x309a, 1}, - {0xfe00, 0xfe0f, 1}, - {0xfe20, 0xfe26, 1}, - }, - R32: []Range32{ - {0x101fd, 0x101fd, 1}, - {0x1d167, 0x1d169, 1}, - {0x1d17b, 0x1d182, 1}, - {0x1d185, 0x1d18b, 1}, - {0x1d1aa, 0x1d1ad, 1}, - {0xe0100, 0xe01ef, 1}, - }, -} - -var _Inscriptional_Pahlavi = &RangeTable{ - R16: []Range16{}, - R32: []Range32{ - {0x10b60, 0x10b72, 1}, - {0x10b78, 0x10b7f, 1}, - }, -} - -var _Inscriptional_Parthian = &RangeTable{ - R16: []Range16{}, - R32: []Range32{ - {0x10b40, 0x10b55, 1}, - {0x10b58, 0x10b5f, 1}, - }, -} - -var _Javanese = &RangeTable{ - R16: []Range16{ - {0xa980, 0xa9cd, 1}, - {0xa9d0, 0xa9d9, 1}, - {0xa9de, 0xa9df, 1}, - }, -} - -var _Kaithi = &RangeTable{ - R16: []Range16{}, - R32: []Range32{ - {0x11080, 0x110c1, 1}, - }, -} - -var _Kannada = &RangeTable{ - R16: []Range16{ - {0x0c82, 0x0c83, 1}, - {0x0c85, 0x0c8c, 1}, - {0x0c8e, 0x0c90, 1}, - {0x0c92, 0x0ca8, 1}, - {0x0caa, 0x0cb3, 1}, - {0x0cb5, 0x0cb9, 1}, - {0x0cbc, 0x0cc4, 1}, - {0x0cc6, 0x0cc8, 1}, - {0x0cca, 0x0ccd, 1}, - {0x0cd5, 0x0cd6, 1}, - {0x0cde, 0x0cde, 1}, - {0x0ce0, 0x0ce3, 1}, - {0x0ce6, 0x0cef, 1}, - {0x0cf1, 0x0cf2, 1}, - }, -} - -var _Katakana = &RangeTable{ - R16: []Range16{ - {0x30a1, 0x30fa, 1}, - {0x30fd, 0x30ff, 1}, - {0x31f0, 0x31ff, 1}, - {0x32d0, 0x32fe, 1}, - {0x3300, 0x3357, 1}, - {0xff66, 0xff6f, 1}, - {0xff71, 0xff9d, 1}, - }, - R32: []Range32{ - {0x1b000, 0x1b000, 1}, - }, -} - -var _Kayah_Li = &RangeTable{ - R16: []Range16{ - {0xa900, 0xa92f, 1}, - }, -} - -var _Kharoshthi = &RangeTable{ - R16: []Range16{}, - R32: []Range32{ - {0x10a00, 0x10a03, 1}, - {0x10a05, 0x10a06, 1}, - {0x10a0c, 0x10a13, 1}, - {0x10a15, 0x10a17, 1}, - {0x10a19, 0x10a33, 1}, - {0x10a38, 0x10a3a, 1}, - {0x10a3f, 0x10a47, 1}, - {0x10a50, 0x10a58, 1}, - }, -} - -var _Khmer = &RangeTable{ - R16: []Range16{ - {0x1780, 0x17dd, 1}, - {0x17e0, 0x17e9, 1}, - {0x17f0, 0x17f9, 1}, - {0x19e0, 0x19ff, 1}, - }, -} - -var _Lao = &RangeTable{ - R16: []Range16{ - {0x0e81, 0x0e82, 1}, - {0x0e84, 0x0e84, 1}, - {0x0e87, 0x0e88, 1}, - {0x0e8a, 0x0e8a, 1}, - {0x0e8d, 0x0e8d, 1}, - {0x0e94, 0x0e97, 1}, - {0x0e99, 0x0e9f, 1}, - {0x0ea1, 0x0ea3, 1}, - {0x0ea5, 0x0ea5, 1}, - {0x0ea7, 0x0ea7, 1}, - {0x0eaa, 0x0eab, 1}, - {0x0ead, 0x0eb9, 1}, - {0x0ebb, 0x0ebd, 1}, - {0x0ec0, 0x0ec4, 1}, - {0x0ec6, 0x0ec6, 1}, - {0x0ec8, 0x0ecd, 1}, - {0x0ed0, 0x0ed9, 1}, - {0x0edc, 0x0edf, 1}, - }, -} - -var _Latin = &RangeTable{ - R16: []Range16{ - {0x0041, 0x005a, 1}, - {0x0061, 0x007a, 1}, - {0x00aa, 0x00aa, 1}, - {0x00ba, 0x00ba, 1}, - {0x00c0, 0x00d6, 1}, - {0x00d8, 0x00f6, 1}, - {0x00f8, 0x02b8, 1}, - {0x02e0, 0x02e4, 1}, - {0x1d00, 0x1d25, 1}, - {0x1d2c, 0x1d5c, 1}, - {0x1d62, 0x1d65, 1}, - {0x1d6b, 0x1d77, 1}, - {0x1d79, 0x1dbe, 1}, - {0x1e00, 0x1eff, 1}, - {0x2071, 0x2071, 1}, - {0x207f, 0x207f, 1}, - {0x2090, 0x209c, 1}, - {0x212a, 0x212b, 1}, - {0x2132, 0x2132, 1}, - {0x214e, 0x214e, 1}, - {0x2160, 0x2188, 1}, - {0x2c60, 0x2c7f, 1}, - {0xa722, 0xa787, 1}, - {0xa78b, 0xa78e, 1}, - {0xa790, 0xa793, 1}, - {0xa7a0, 0xa7aa, 1}, - {0xa7f8, 0xa7ff, 1}, - {0xfb00, 0xfb06, 1}, - {0xff21, 0xff3a, 1}, - {0xff41, 0xff5a, 1}, - }, - LatinOffset: 6, -} - -var _Lepcha = &RangeTable{ - R16: []Range16{ - {0x1c00, 0x1c37, 1}, - {0x1c3b, 0x1c49, 1}, - {0x1c4d, 0x1c4f, 1}, - }, -} - -var _Limbu = &RangeTable{ - R16: []Range16{ - {0x1900, 0x191c, 1}, - {0x1920, 0x192b, 1}, - {0x1930, 0x193b, 1}, - {0x1940, 0x1940, 1}, - {0x1944, 0x194f, 1}, - }, -} - -var _Linear_B = &RangeTable{ - R16: []Range16{}, - R32: []Range32{ - {0x10000, 0x1000b, 1}, - {0x1000d, 0x10026, 1}, - {0x10028, 0x1003a, 1}, - {0x1003c, 0x1003d, 1}, - {0x1003f, 0x1004d, 1}, - {0x10050, 0x1005d, 1}, - {0x10080, 0x100fa, 1}, - }, -} - -var _Lisu = &RangeTable{ - R16: []Range16{ - {0xa4d0, 0xa4ff, 1}, - }, -} - -var _Lycian = &RangeTable{ - R16: []Range16{}, - R32: []Range32{ - {0x10280, 0x1029c, 1}, - }, -} - -var _Lydian = &RangeTable{ - R16: []Range16{}, - R32: []Range32{ - {0x10920, 0x10939, 1}, - {0x1093f, 0x1093f, 1}, - }, -} - -var _Malayalam = &RangeTable{ - R16: []Range16{ - {0x0d02, 0x0d03, 1}, - {0x0d05, 0x0d0c, 1}, - {0x0d0e, 0x0d10, 1}, - {0x0d12, 0x0d3a, 1}, - {0x0d3d, 0x0d44, 1}, - {0x0d46, 0x0d48, 1}, - {0x0d4a, 0x0d4e, 1}, - {0x0d57, 0x0d57, 1}, - {0x0d60, 0x0d63, 1}, - {0x0d66, 0x0d75, 1}, - {0x0d79, 0x0d7f, 1}, - }, -} - -var _Mandaic = &RangeTable{ - R16: []Range16{ - {0x0840, 0x085b, 1}, - {0x085e, 0x085e, 1}, - }, -} - -var _Meetei_Mayek = &RangeTable{ - R16: []Range16{ - {0xaae0, 0xaaf6, 1}, - {0xabc0, 0xabed, 1}, - {0xabf0, 0xabf9, 1}, - }, -} - -var _Meroitic_Cursive = &RangeTable{ - R16: []Range16{}, - R32: []Range32{ - {0x109a0, 0x109b7, 1}, - {0x109be, 0x109bf, 1}, - }, -} - -var _Meroitic_Hieroglyphs = &RangeTable{ - R16: []Range16{}, - R32: []Range32{ - {0x10980, 0x1099f, 1}, - }, -} - -var _Miao = &RangeTable{ - R16: []Range16{}, - R32: []Range32{ - {0x16f00, 0x16f44, 1}, - {0x16f50, 0x16f7e, 1}, - {0x16f8f, 0x16f9f, 1}, - }, -} - -var _Mongolian = &RangeTable{ - R16: []Range16{ - {0x1800, 0x1801, 1}, - {0x1804, 0x1804, 1}, - {0x1806, 0x180e, 1}, - {0x1810, 0x1819, 1}, - {0x1820, 0x1877, 1}, - {0x1880, 0x18aa, 1}, - }, -} - -var _Myanmar = &RangeTable{ - R16: []Range16{ - {0x1000, 0x109f, 1}, - {0xaa60, 0xaa7b, 1}, - }, -} - -var _New_Tai_Lue = &RangeTable{ - R16: []Range16{ - {0x1980, 0x19ab, 1}, - {0x19b0, 0x19c9, 1}, - {0x19d0, 0x19da, 1}, - {0x19de, 0x19df, 1}, - }, -} - -var _Nko = &RangeTable{ - R16: []Range16{ - {0x07c0, 0x07fa, 1}, - }, -} - -var _Ogham = &RangeTable{ - R16: []Range16{ - {0x1680, 0x169c, 1}, - }, -} - -var _Ol_Chiki = &RangeTable{ - R16: []Range16{ - {0x1c50, 0x1c7f, 1}, - }, -} - -var _Old_Italic = &RangeTable{ - R16: []Range16{}, - R32: []Range32{ - {0x10300, 0x1031e, 1}, - {0x10320, 0x10323, 1}, - }, -} - -var _Old_Persian = &RangeTable{ - R16: []Range16{}, - R32: []Range32{ - {0x103a0, 0x103c3, 1}, - {0x103c8, 0x103d5, 1}, - }, -} - -var _Old_South_Arabian = &RangeTable{ - R16: []Range16{}, - R32: []Range32{ - {0x10a60, 0x10a7f, 1}, - }, -} - -var _Old_Turkic = &RangeTable{ - R16: []Range16{}, - R32: []Range32{ - {0x10c00, 0x10c48, 1}, - }, -} - -var _Oriya = &RangeTable{ - R16: []Range16{ - {0x0b01, 0x0b03, 1}, - {0x0b05, 0x0b0c, 1}, - {0x0b0f, 0x0b10, 1}, - {0x0b13, 0x0b28, 1}, - {0x0b2a, 0x0b30, 1}, - {0x0b32, 0x0b33, 1}, - {0x0b35, 0x0b39, 1}, - {0x0b3c, 0x0b44, 1}, - {0x0b47, 0x0b48, 1}, - {0x0b4b, 0x0b4d, 1}, - {0x0b56, 0x0b57, 1}, - {0x0b5c, 0x0b5d, 1}, - {0x0b5f, 0x0b63, 1}, - {0x0b66, 0x0b77, 1}, - }, -} - -var _Osmanya = &RangeTable{ - R16: []Range16{}, - R32: []Range32{ - {0x10480, 0x1049d, 1}, - {0x104a0, 0x104a9, 1}, - }, -} - -var _Phags_Pa = &RangeTable{ - R16: []Range16{ - {0xa840, 0xa877, 1}, - }, -} - -var _Phoenician = &RangeTable{ - R16: []Range16{}, - R32: []Range32{ - {0x10900, 0x1091b, 1}, - {0x1091f, 0x1091f, 1}, - }, -} - -var _Rejang = &RangeTable{ - R16: []Range16{ - {0xa930, 0xa953, 1}, - {0xa95f, 0xa95f, 1}, - }, -} - -var _Runic = &RangeTable{ - R16: []Range16{ - {0x16a0, 0x16ea, 1}, - {0x16ee, 0x16f0, 1}, - }, -} - -var _Samaritan = &RangeTable{ - R16: []Range16{ - {0x0800, 0x082d, 1}, - {0x0830, 0x083e, 1}, - }, -} - -var _Saurashtra = &RangeTable{ - R16: []Range16{ - {0xa880, 0xa8c4, 1}, - {0xa8ce, 0xa8d9, 1}, - }, -} - -var _Sharada = &RangeTable{ - R16: []Range16{}, - R32: []Range32{ - {0x11180, 0x111c8, 1}, - {0x111d0, 0x111d9, 1}, - }, -} - -var _Shavian = &RangeTable{ - R16: []Range16{}, - R32: []Range32{ - {0x10450, 0x1047f, 1}, - }, -} - -var _Sinhala = &RangeTable{ - R16: []Range16{ - {0x0d82, 0x0d83, 1}, - {0x0d85, 0x0d96, 1}, - {0x0d9a, 0x0db1, 1}, - {0x0db3, 0x0dbb, 1}, - {0x0dbd, 0x0dbd, 1}, - {0x0dc0, 0x0dc6, 1}, - {0x0dca, 0x0dca, 1}, - {0x0dcf, 0x0dd4, 1}, - {0x0dd6, 0x0dd6, 1}, - {0x0dd8, 0x0ddf, 1}, - {0x0df2, 0x0df4, 1}, - }, -} - -var _Sora_Sompeng = &RangeTable{ - R16: []Range16{}, - R32: []Range32{ - {0x110d0, 0x110e8, 1}, - {0x110f0, 0x110f9, 1}, - }, -} - -var _Sundanese = &RangeTable{ - R16: []Range16{ - {0x1b80, 0x1bbf, 1}, - {0x1cc0, 0x1cc7, 1}, - }, -} - -var _Syloti_Nagri = &RangeTable{ - R16: []Range16{ - {0xa800, 0xa82b, 1}, - }, -} - -var _Syriac = &RangeTable{ - R16: []Range16{ - {0x0700, 0x070d, 1}, - {0x070f, 0x074a, 1}, - {0x074d, 0x074f, 1}, - }, -} - -var _Tagalog = &RangeTable{ - R16: []Range16{ - {0x1700, 0x170c, 1}, - {0x170e, 0x1714, 1}, - }, -} - -var _Tagbanwa = &RangeTable{ - R16: []Range16{ - {0x1760, 0x176c, 1}, - {0x176e, 0x1770, 1}, - {0x1772, 0x1773, 1}, - }, -} - -var _Tai_Le = &RangeTable{ - R16: []Range16{ - {0x1950, 0x196d, 1}, - {0x1970, 0x1974, 1}, - }, -} - -var _Tai_Tham = &RangeTable{ - R16: []Range16{ - {0x1a20, 0x1a5e, 1}, - {0x1a60, 0x1a7c, 1}, - {0x1a7f, 0x1a89, 1}, - {0x1a90, 0x1a99, 1}, - {0x1aa0, 0x1aad, 1}, - }, -} - -var _Tai_Viet = &RangeTable{ - R16: []Range16{ - {0xaa80, 0xaac2, 1}, - {0xaadb, 0xaadf, 1}, - }, -} - -var _Takri = &RangeTable{ - R16: []Range16{}, - R32: []Range32{ - {0x11680, 0x116b7, 1}, - {0x116c0, 0x116c9, 1}, - }, -} - -var _Tamil = &RangeTable{ - R16: []Range16{ - {0x0b82, 0x0b83, 1}, - {0x0b85, 0x0b8a, 1}, - {0x0b8e, 0x0b90, 1}, - {0x0b92, 0x0b95, 1}, - {0x0b99, 0x0b9a, 1}, - {0x0b9c, 0x0b9c, 1}, - {0x0b9e, 0x0b9f, 1}, - {0x0ba3, 0x0ba4, 1}, - {0x0ba8, 0x0baa, 1}, - {0x0bae, 0x0bb9, 1}, - {0x0bbe, 0x0bc2, 1}, - {0x0bc6, 0x0bc8, 1}, - {0x0bca, 0x0bcd, 1}, - {0x0bd0, 0x0bd0, 1}, - {0x0bd7, 0x0bd7, 1}, - {0x0be6, 0x0bfa, 1}, - }, -} - -var _Telugu = &RangeTable{ - R16: []Range16{ - {0x0c01, 0x0c03, 1}, - {0x0c05, 0x0c0c, 1}, - {0x0c0e, 0x0c10, 1}, - {0x0c12, 0x0c28, 1}, - {0x0c2a, 0x0c33, 1}, - {0x0c35, 0x0c39, 1}, - {0x0c3d, 0x0c44, 1}, - {0x0c46, 0x0c48, 1}, - {0x0c4a, 0x0c4d, 1}, - {0x0c55, 0x0c56, 1}, - {0x0c58, 0x0c59, 1}, - {0x0c60, 0x0c63, 1}, - {0x0c66, 0x0c6f, 1}, - {0x0c78, 0x0c7f, 1}, - }, -} - -var _Thaana = &RangeTable{ - R16: []Range16{ - {0x0780, 0x07b1, 1}, - }, -} - -var _Thai = &RangeTable{ - R16: []Range16{ - {0x0e01, 0x0e3a, 1}, - {0x0e40, 0x0e5b, 1}, - }, -} - -var _Tibetan = &RangeTable{ - R16: []Range16{ - {0x0f00, 0x0f47, 1}, - {0x0f49, 0x0f6c, 1}, - {0x0f71, 0x0f97, 1}, - {0x0f99, 0x0fbc, 1}, - {0x0fbe, 0x0fcc, 1}, - {0x0fce, 0x0fd4, 1}, - {0x0fd9, 0x0fda, 1}, - }, -} - -var _Tifinagh = &RangeTable{ - R16: []Range16{ - {0x2d30, 0x2d67, 1}, - {0x2d6f, 0x2d70, 1}, - {0x2d7f, 0x2d7f, 1}, - }, -} - -var _Ugaritic = &RangeTable{ - R16: []Range16{}, - R32: []Range32{ - {0x10380, 0x1039d, 1}, - {0x1039f, 0x1039f, 1}, - }, -} - -var _Vai = &RangeTable{ - R16: []Range16{ - {0xa500, 0xa62b, 1}, - }, -} - -var _Yi = &RangeTable{ - R16: []Range16{ - {0xa000, 0xa48c, 1}, - {0xa490, 0xa4c6, 1}, - }, -} - -// These variables have type *RangeTable. -var ( - Arabic = _Arabic // Arabic is the set of Unicode characters in script Arabic. - Armenian = _Armenian // Armenian is the set of Unicode characters in script Armenian. - Avestan = _Avestan // Avestan is the set of Unicode characters in script Avestan. - Balinese = _Balinese // Balinese is the set of Unicode characters in script Balinese. - Bamum = _Bamum // Bamum is the set of Unicode characters in script Bamum. - Batak = _Batak // Batak is the set of Unicode characters in script Batak. - Bengali = _Bengali // Bengali is the set of Unicode characters in script Bengali. - Bopomofo = _Bopomofo // Bopomofo is the set of Unicode characters in script Bopomofo. - Brahmi = _Brahmi // Brahmi is the set of Unicode characters in script Brahmi. - Braille = _Braille // Braille is the set of Unicode characters in script Braille. - Buginese = _Buginese // Buginese is the set of Unicode characters in script Buginese. - Buhid = _Buhid // Buhid is the set of Unicode characters in script Buhid. - Canadian_Aboriginal = _Canadian_Aboriginal // Canadian_Aboriginal is the set of Unicode characters in script Canadian_Aboriginal. - Carian = _Carian // Carian is the set of Unicode characters in script Carian. - Chakma = _Chakma // Chakma is the set of Unicode characters in script Chakma. - Cham = _Cham // Cham is the set of Unicode characters in script Cham. - Cherokee = _Cherokee // Cherokee is the set of Unicode characters in script Cherokee. - Common = _Common // Common is the set of Unicode characters in script Common. - Coptic = _Coptic // Coptic is the set of Unicode characters in script Coptic. - Cuneiform = _Cuneiform // Cuneiform is the set of Unicode characters in script Cuneiform. - Cypriot = _Cypriot // Cypriot is the set of Unicode characters in script Cypriot. - Cyrillic = _Cyrillic // Cyrillic is the set of Unicode characters in script Cyrillic. - Deseret = _Deseret // Deseret is the set of Unicode characters in script Deseret. - Devanagari = _Devanagari // Devanagari is the set of Unicode characters in script Devanagari. - Egyptian_Hieroglyphs = _Egyptian_Hieroglyphs // Egyptian_Hieroglyphs is the set of Unicode characters in script Egyptian_Hieroglyphs. - Ethiopic = _Ethiopic // Ethiopic is the set of Unicode characters in script Ethiopic. - Georgian = _Georgian // Georgian is the set of Unicode characters in script Georgian. - Glagolitic = _Glagolitic // Glagolitic is the set of Unicode characters in script Glagolitic. - Gothic = _Gothic // Gothic is the set of Unicode characters in script Gothic. - Greek = _Greek // Greek is the set of Unicode characters in script Greek. - Gujarati = _Gujarati // Gujarati is the set of Unicode characters in script Gujarati. - Gurmukhi = _Gurmukhi // Gurmukhi is the set of Unicode characters in script Gurmukhi. - Han = _Han // Han is the set of Unicode characters in script Han. - Hangul = _Hangul // Hangul is the set of Unicode characters in script Hangul. - Hanunoo = _Hanunoo // Hanunoo is the set of Unicode characters in script Hanunoo. - Hebrew = _Hebrew // Hebrew is the set of Unicode characters in script Hebrew. - Hiragana = _Hiragana // Hiragana is the set of Unicode characters in script Hiragana. - Imperial_Aramaic = _Imperial_Aramaic // Imperial_Aramaic is the set of Unicode characters in script Imperial_Aramaic. - Inherited = _Inherited // Inherited is the set of Unicode characters in script Inherited. - Inscriptional_Pahlavi = _Inscriptional_Pahlavi // Inscriptional_Pahlavi is the set of Unicode characters in script Inscriptional_Pahlavi. - Inscriptional_Parthian = _Inscriptional_Parthian // Inscriptional_Parthian is the set of Unicode characters in script Inscriptional_Parthian. - Javanese = _Javanese // Javanese is the set of Unicode characters in script Javanese. - Kaithi = _Kaithi // Kaithi is the set of Unicode characters in script Kaithi. - Kannada = _Kannada // Kannada is the set of Unicode characters in script Kannada. - Katakana = _Katakana // Katakana is the set of Unicode characters in script Katakana. - Kayah_Li = _Kayah_Li // Kayah_Li is the set of Unicode characters in script Kayah_Li. - Kharoshthi = _Kharoshthi // Kharoshthi is the set of Unicode characters in script Kharoshthi. - Khmer = _Khmer // Khmer is the set of Unicode characters in script Khmer. - Lao = _Lao // Lao is the set of Unicode characters in script Lao. - Latin = _Latin // Latin is the set of Unicode characters in script Latin. - Lepcha = _Lepcha // Lepcha is the set of Unicode characters in script Lepcha. - Limbu = _Limbu // Limbu is the set of Unicode characters in script Limbu. - Linear_B = _Linear_B // Linear_B is the set of Unicode characters in script Linear_B. - Lisu = _Lisu // Lisu is the set of Unicode characters in script Lisu. - Lycian = _Lycian // Lycian is the set of Unicode characters in script Lycian. - Lydian = _Lydian // Lydian is the set of Unicode characters in script Lydian. - Malayalam = _Malayalam // Malayalam is the set of Unicode characters in script Malayalam. - Mandaic = _Mandaic // Mandaic is the set of Unicode characters in script Mandaic. - Meetei_Mayek = _Meetei_Mayek // Meetei_Mayek is the set of Unicode characters in script Meetei_Mayek. - Meroitic_Cursive = _Meroitic_Cursive // Meroitic_Cursive is the set of Unicode characters in script Meroitic_Cursive. - Meroitic_Hieroglyphs = _Meroitic_Hieroglyphs // Meroitic_Hieroglyphs is the set of Unicode characters in script Meroitic_Hieroglyphs. - Miao = _Miao // Miao is the set of Unicode characters in script Miao. - Mongolian = _Mongolian // Mongolian is the set of Unicode characters in script Mongolian. - Myanmar = _Myanmar // Myanmar is the set of Unicode characters in script Myanmar. - New_Tai_Lue = _New_Tai_Lue // New_Tai_Lue is the set of Unicode characters in script New_Tai_Lue. - Nko = _Nko // Nko is the set of Unicode characters in script Nko. - Ogham = _Ogham // Ogham is the set of Unicode characters in script Ogham. - Ol_Chiki = _Ol_Chiki // Ol_Chiki is the set of Unicode characters in script Ol_Chiki. - Old_Italic = _Old_Italic // Old_Italic is the set of Unicode characters in script Old_Italic. - Old_Persian = _Old_Persian // Old_Persian is the set of Unicode characters in script Old_Persian. - Old_South_Arabian = _Old_South_Arabian // Old_South_Arabian is the set of Unicode characters in script Old_South_Arabian. - Old_Turkic = _Old_Turkic // Old_Turkic is the set of Unicode characters in script Old_Turkic. - Oriya = _Oriya // Oriya is the set of Unicode characters in script Oriya. - Osmanya = _Osmanya // Osmanya is the set of Unicode characters in script Osmanya. - Phags_Pa = _Phags_Pa // Phags_Pa is the set of Unicode characters in script Phags_Pa. - Phoenician = _Phoenician // Phoenician is the set of Unicode characters in script Phoenician. - Rejang = _Rejang // Rejang is the set of Unicode characters in script Rejang. - Runic = _Runic // Runic is the set of Unicode characters in script Runic. - Samaritan = _Samaritan // Samaritan is the set of Unicode characters in script Samaritan. - Saurashtra = _Saurashtra // Saurashtra is the set of Unicode characters in script Saurashtra. - Sharada = _Sharada // Sharada is the set of Unicode characters in script Sharada. - Shavian = _Shavian // Shavian is the set of Unicode characters in script Shavian. - Sinhala = _Sinhala // Sinhala is the set of Unicode characters in script Sinhala. - Sora_Sompeng = _Sora_Sompeng // Sora_Sompeng is the set of Unicode characters in script Sora_Sompeng. - Sundanese = _Sundanese // Sundanese is the set of Unicode characters in script Sundanese. - Syloti_Nagri = _Syloti_Nagri // Syloti_Nagri is the set of Unicode characters in script Syloti_Nagri. - Syriac = _Syriac // Syriac is the set of Unicode characters in script Syriac. - Tagalog = _Tagalog // Tagalog is the set of Unicode characters in script Tagalog. - Tagbanwa = _Tagbanwa // Tagbanwa is the set of Unicode characters in script Tagbanwa. - Tai_Le = _Tai_Le // Tai_Le is the set of Unicode characters in script Tai_Le. - Tai_Tham = _Tai_Tham // Tai_Tham is the set of Unicode characters in script Tai_Tham. - Tai_Viet = _Tai_Viet // Tai_Viet is the set of Unicode characters in script Tai_Viet. - Takri = _Takri // Takri is the set of Unicode characters in script Takri. - Tamil = _Tamil // Tamil is the set of Unicode characters in script Tamil. - Telugu = _Telugu // Telugu is the set of Unicode characters in script Telugu. - Thaana = _Thaana // Thaana is the set of Unicode characters in script Thaana. - Thai = _Thai // Thai is the set of Unicode characters in script Thai. - Tibetan = _Tibetan // Tibetan is the set of Unicode characters in script Tibetan. - Tifinagh = _Tifinagh // Tifinagh is the set of Unicode characters in script Tifinagh. - Ugaritic = _Ugaritic // Ugaritic is the set of Unicode characters in script Ugaritic. - Vai = _Vai // Vai is the set of Unicode characters in script Vai. - Yi = _Yi // Yi is the set of Unicode characters in script Yi. -) - -// Generated by running -// maketables --props=all --url=http://www.unicode.org/Public/6.3.0/ucd/ -// DO NOT EDIT - -// Properties is the set of Unicode property tables. -var Properties = map[string]*RangeTable{ - "ASCII_Hex_Digit": ASCII_Hex_Digit, - "Bidi_Control": Bidi_Control, - "Dash": Dash, - "Deprecated": Deprecated, - "Diacritic": Diacritic, - "Extender": Extender, - "Hex_Digit": Hex_Digit, - "Hyphen": Hyphen, - "IDS_Binary_Operator": IDS_Binary_Operator, - "IDS_Trinary_Operator": IDS_Trinary_Operator, - "Ideographic": Ideographic, - "Join_Control": Join_Control, - "Logical_Order_Exception": Logical_Order_Exception, - "Noncharacter_Code_Point": Noncharacter_Code_Point, - "Other_Alphabetic": Other_Alphabetic, - "Other_Default_Ignorable_Code_Point": Other_Default_Ignorable_Code_Point, - "Other_Grapheme_Extend": Other_Grapheme_Extend, - "Other_ID_Continue": Other_ID_Continue, - "Other_ID_Start": Other_ID_Start, - "Other_Lowercase": Other_Lowercase, - "Other_Math": Other_Math, - "Other_Uppercase": Other_Uppercase, - "Pattern_Syntax": Pattern_Syntax, - "Pattern_White_Space": Pattern_White_Space, - "Quotation_Mark": Quotation_Mark, - "Radical": Radical, - "STerm": STerm, - "Soft_Dotted": Soft_Dotted, - "Terminal_Punctuation": Terminal_Punctuation, - "Unified_Ideograph": Unified_Ideograph, - "Variation_Selector": Variation_Selector, - "White_Space": White_Space, -} - -var _ASCII_Hex_Digit = &RangeTable{ - R16: []Range16{ - {0x0030, 0x0039, 1}, - {0x0041, 0x0046, 1}, - {0x0061, 0x0066, 1}, - }, - LatinOffset: 3, -} - -var _Bidi_Control = &RangeTable{ - R16: []Range16{ - {0x061c, 0x061c, 1}, - {0x200e, 0x200f, 1}, - {0x202a, 0x202e, 1}, - {0x2066, 0x2069, 1}, - }, -} - -var _Dash = &RangeTable{ - R16: []Range16{ - {0x002d, 0x002d, 1}, - {0x058a, 0x058a, 1}, - {0x05be, 0x05be, 1}, - {0x1400, 0x1400, 1}, - {0x1806, 0x1806, 1}, - {0x2010, 0x2015, 1}, - {0x2053, 0x2053, 1}, - {0x207b, 0x207b, 1}, - {0x208b, 0x208b, 1}, - {0x2212, 0x2212, 1}, - {0x2e17, 0x2e17, 1}, - {0x2e1a, 0x2e1a, 1}, - {0x2e3a, 0x2e3b, 1}, - {0x301c, 0x301c, 1}, - {0x3030, 0x3030, 1}, - {0x30a0, 0x30a0, 1}, - {0xfe31, 0xfe32, 1}, - {0xfe58, 0xfe58, 1}, - {0xfe63, 0xfe63, 1}, - {0xff0d, 0xff0d, 1}, - }, - LatinOffset: 1, -} - -var _Deprecated = &RangeTable{ - R16: []Range16{ - {0x0149, 0x0149, 1}, - {0x0673, 0x0673, 1}, - {0x0f77, 0x0f77, 1}, - {0x0f79, 0x0f79, 1}, - {0x17a3, 0x17a4, 1}, - {0x206a, 0x206f, 1}, - {0x2329, 0x232a, 1}, - }, - R32: []Range32{ - {0xe0001, 0xe0001, 1}, - {0xe0020, 0xe007f, 1}, - }, -} - -var _Diacritic = &RangeTable{ - R16: []Range16{ - {0x005e, 0x005e, 1}, - {0x0060, 0x0060, 1}, - {0x00a8, 0x00a8, 1}, - {0x00af, 0x00af, 1}, - {0x00b4, 0x00b4, 1}, - {0x00b7, 0x00b8, 1}, - {0x02b0, 0x034e, 1}, - {0x0350, 0x0357, 1}, - {0x035d, 0x0362, 1}, - {0x0374, 0x0375, 1}, - {0x037a, 0x037a, 1}, - {0x0384, 0x0385, 1}, - {0x0483, 0x0487, 1}, - {0x0559, 0x0559, 1}, - {0x0591, 0x05a1, 1}, - {0x05a3, 0x05bd, 1}, - {0x05bf, 0x05bf, 1}, - {0x05c1, 0x05c2, 1}, - {0x05c4, 0x05c4, 1}, - {0x064b, 0x0652, 1}, - {0x0657, 0x0658, 1}, - {0x06df, 0x06e0, 1}, - {0x06e5, 0x06e6, 1}, - {0x06ea, 0x06ec, 1}, - {0x0730, 0x074a, 1}, - {0x07a6, 0x07b0, 1}, - {0x07eb, 0x07f5, 1}, - {0x0818, 0x0819, 1}, - {0x08e4, 0x08fe, 1}, - {0x093c, 0x093c, 1}, - {0x094d, 0x094d, 1}, - {0x0951, 0x0954, 1}, - {0x0971, 0x0971, 1}, - {0x09bc, 0x09bc, 1}, - {0x09cd, 0x09cd, 1}, - {0x0a3c, 0x0a3c, 1}, - {0x0a4d, 0x0a4d, 1}, - {0x0abc, 0x0abc, 1}, - {0x0acd, 0x0acd, 1}, - {0x0b3c, 0x0b3c, 1}, - {0x0b4d, 0x0b4d, 1}, - {0x0bcd, 0x0bcd, 1}, - {0x0c4d, 0x0c4d, 1}, - {0x0cbc, 0x0cbc, 1}, - {0x0ccd, 0x0ccd, 1}, - {0x0d4d, 0x0d4d, 1}, - {0x0dca, 0x0dca, 1}, - {0x0e47, 0x0e4c, 1}, - {0x0e4e, 0x0e4e, 1}, - {0x0ec8, 0x0ecc, 1}, - {0x0f18, 0x0f19, 1}, - {0x0f35, 0x0f35, 1}, - {0x0f37, 0x0f37, 1}, - {0x0f39, 0x0f39, 1}, - {0x0f3e, 0x0f3f, 1}, - {0x0f82, 0x0f84, 1}, - {0x0f86, 0x0f87, 1}, - {0x0fc6, 0x0fc6, 1}, - {0x1037, 0x1037, 1}, - {0x1039, 0x103a, 1}, - {0x1087, 0x108d, 1}, - {0x108f, 0x108f, 1}, - {0x109a, 0x109b, 1}, - {0x17c9, 0x17d3, 1}, - {0x17dd, 0x17dd, 1}, - {0x1939, 0x193b, 1}, - {0x1a75, 0x1a7c, 1}, - {0x1a7f, 0x1a7f, 1}, - {0x1b34, 0x1b34, 1}, - {0x1b44, 0x1b44, 1}, - {0x1b6b, 0x1b73, 1}, - {0x1baa, 0x1bab, 1}, - {0x1c36, 0x1c37, 1}, - {0x1c78, 0x1c7d, 1}, - {0x1cd0, 0x1ce8, 1}, - {0x1ced, 0x1ced, 1}, - {0x1cf4, 0x1cf4, 1}, - {0x1d2c, 0x1d6a, 1}, - {0x1dc4, 0x1dcf, 1}, - {0x1dfd, 0x1dff, 1}, - {0x1fbd, 0x1fbd, 1}, - {0x1fbf, 0x1fc1, 1}, - {0x1fcd, 0x1fcf, 1}, - {0x1fdd, 0x1fdf, 1}, - {0x1fed, 0x1fef, 1}, - {0x1ffd, 0x1ffe, 1}, - {0x2cef, 0x2cf1, 1}, - {0x2e2f, 0x2e2f, 1}, - {0x302a, 0x302f, 1}, - {0x3099, 0x309c, 1}, - {0x30fc, 0x30fc, 1}, - {0xa66f, 0xa66f, 1}, - {0xa67c, 0xa67d, 1}, - {0xa67f, 0xa67f, 1}, - {0xa6f0, 0xa6f1, 1}, - {0xa717, 0xa721, 1}, - {0xa788, 0xa788, 1}, - {0xa7f8, 0xa7f9, 1}, - {0xa8c4, 0xa8c4, 1}, - {0xa8e0, 0xa8f1, 1}, - {0xa92b, 0xa92e, 1}, - {0xa953, 0xa953, 1}, - {0xa9b3, 0xa9b3, 1}, - {0xa9c0, 0xa9c0, 1}, - {0xaa7b, 0xaa7b, 1}, - {0xaabf, 0xaac2, 1}, - {0xaaf6, 0xaaf6, 1}, - {0xabec, 0xabed, 1}, - {0xfb1e, 0xfb1e, 1}, - {0xfe20, 0xfe26, 1}, - {0xff3e, 0xff3e, 1}, - {0xff40, 0xff40, 1}, - {0xff70, 0xff70, 1}, - {0xff9e, 0xff9f, 1}, - {0xffe3, 0xffe3, 1}, - }, - R32: []Range32{ - {0x110b9, 0x110ba, 1}, - {0x11133, 0x11134, 1}, - {0x111c0, 0x111c0, 1}, - {0x116b6, 0x116b7, 1}, - {0x16f8f, 0x16f9f, 1}, - {0x1d167, 0x1d169, 1}, - {0x1d16d, 0x1d172, 1}, - {0x1d17b, 0x1d182, 1}, - {0x1d185, 0x1d18b, 1}, - {0x1d1aa, 0x1d1ad, 1}, - }, - LatinOffset: 6, -} - -var _Extender = &RangeTable{ - R16: []Range16{ - {0x00b7, 0x00b7, 1}, - {0x02d0, 0x02d1, 1}, - {0x0640, 0x0640, 1}, - {0x07fa, 0x07fa, 1}, - {0x0e46, 0x0e46, 1}, - {0x0ec6, 0x0ec6, 1}, - {0x180a, 0x180a, 1}, - {0x1843, 0x1843, 1}, - {0x1aa7, 0x1aa7, 1}, - {0x1c36, 0x1c36, 1}, - {0x1c7b, 0x1c7b, 1}, - {0x3005, 0x3005, 1}, - {0x3031, 0x3035, 1}, - {0x309d, 0x309e, 1}, - {0x30fc, 0x30fe, 1}, - {0xa015, 0xa015, 1}, - {0xa60c, 0xa60c, 1}, - {0xa9cf, 0xa9cf, 1}, - {0xaa70, 0xaa70, 1}, - {0xaadd, 0xaadd, 1}, - {0xaaf3, 0xaaf4, 1}, - {0xff70, 0xff70, 1}, - }, - LatinOffset: 1, -} - -var _Hex_Digit = &RangeTable{ - R16: []Range16{ - {0x0030, 0x0039, 1}, - {0x0041, 0x0046, 1}, - {0x0061, 0x0066, 1}, - {0xff10, 0xff19, 1}, - {0xff21, 0xff26, 1}, - {0xff41, 0xff46, 1}, - }, - LatinOffset: 3, -} - -var _Hyphen = &RangeTable{ - R16: []Range16{ - {0x002d, 0x002d, 1}, - {0x00ad, 0x00ad, 1}, - {0x058a, 0x058a, 1}, - {0x1806, 0x1806, 1}, - {0x2010, 0x2011, 1}, - {0x2e17, 0x2e17, 1}, - {0x30fb, 0x30fb, 1}, - {0xfe63, 0xfe63, 1}, - {0xff0d, 0xff0d, 1}, - {0xff65, 0xff65, 1}, - }, - LatinOffset: 2, -} - -var _IDS_Binary_Operator = &RangeTable{ - R16: []Range16{ - {0x2ff0, 0x2ff1, 1}, - {0x2ff4, 0x2ffb, 1}, - }, -} - -var _IDS_Trinary_Operator = &RangeTable{ - R16: []Range16{ - {0x2ff2, 0x2ff3, 1}, - }, -} - -var _Ideographic = &RangeTable{ - R16: []Range16{ - {0x3006, 0x3007, 1}, - {0x3021, 0x3029, 1}, - {0x3038, 0x303a, 1}, - {0x3400, 0x4db5, 1}, - {0x4e00, 0x9fcc, 1}, - {0xf900, 0xfa6d, 1}, - {0xfa70, 0xfad9, 1}, - }, - R32: []Range32{ - {0x20000, 0x2a6d6, 1}, - {0x2a700, 0x2b734, 1}, - {0x2b740, 0x2b81d, 1}, - {0x2f800, 0x2fa1d, 1}, - }, -} - -var _Join_Control = &RangeTable{ - R16: []Range16{ - {0x200c, 0x200d, 1}, - }, -} - -var _Logical_Order_Exception = &RangeTable{ - R16: []Range16{ - {0x0e40, 0x0e44, 1}, - {0x0ec0, 0x0ec4, 1}, - {0xaab5, 0xaab6, 1}, - {0xaab9, 0xaab9, 1}, - {0xaabb, 0xaabc, 1}, - }, -} - -var _Noncharacter_Code_Point = &RangeTable{ - R16: []Range16{ - {0xfdd0, 0xfdef, 1}, - {0xfffe, 0xffff, 1}, - }, - R32: []Range32{ - {0x1fffe, 0x1ffff, 1}, - {0x2fffe, 0x2ffff, 1}, - {0x3fffe, 0x3ffff, 1}, - {0x4fffe, 0x4ffff, 1}, - {0x5fffe, 0x5ffff, 1}, - {0x6fffe, 0x6ffff, 1}, - {0x7fffe, 0x7ffff, 1}, - {0x8fffe, 0x8ffff, 1}, - {0x9fffe, 0x9ffff, 1}, - {0xafffe, 0xaffff, 1}, - {0xbfffe, 0xbffff, 1}, - {0xcfffe, 0xcffff, 1}, - {0xdfffe, 0xdffff, 1}, - {0xefffe, 0xeffff, 1}, - {0xffffe, 0xfffff, 1}, - {0x10fffe, 0x10ffff, 1}, - }, -} - -var _Other_Alphabetic = &RangeTable{ - R16: []Range16{ - {0x0345, 0x0345, 1}, - {0x05b0, 0x05bd, 1}, - {0x05bf, 0x05bf, 1}, - {0x05c1, 0x05c2, 1}, - {0x05c4, 0x05c5, 1}, - {0x05c7, 0x05c7, 1}, - {0x0610, 0x061a, 1}, - {0x064b, 0x0657, 1}, - {0x0659, 0x065f, 1}, - {0x0670, 0x0670, 1}, - {0x06d6, 0x06dc, 1}, - {0x06e1, 0x06e4, 1}, - {0x06e7, 0x06e8, 1}, - {0x06ed, 0x06ed, 1}, - {0x0711, 0x0711, 1}, - {0x0730, 0x073f, 1}, - {0x07a6, 0x07b0, 1}, - {0x0816, 0x0817, 1}, - {0x081b, 0x0823, 1}, - {0x0825, 0x0827, 1}, - {0x0829, 0x082c, 1}, - {0x08e4, 0x08e9, 1}, - {0x08f0, 0x08fe, 1}, - {0x0900, 0x0903, 1}, - {0x093a, 0x093b, 1}, - {0x093e, 0x094c, 1}, - {0x094e, 0x094f, 1}, - {0x0955, 0x0957, 1}, - {0x0962, 0x0963, 1}, - {0x0981, 0x0983, 1}, - {0x09be, 0x09c4, 1}, - {0x09c7, 0x09c8, 1}, - {0x09cb, 0x09cc, 1}, - {0x09d7, 0x09d7, 1}, - {0x09e2, 0x09e3, 1}, - {0x0a01, 0x0a03, 1}, - {0x0a3e, 0x0a42, 1}, - {0x0a47, 0x0a48, 1}, - {0x0a4b, 0x0a4c, 1}, - {0x0a51, 0x0a51, 1}, - {0x0a70, 0x0a71, 1}, - {0x0a75, 0x0a75, 1}, - {0x0a81, 0x0a83, 1}, - {0x0abe, 0x0ac5, 1}, - {0x0ac7, 0x0ac9, 1}, - {0x0acb, 0x0acc, 1}, - {0x0ae2, 0x0ae3, 1}, - {0x0b01, 0x0b03, 1}, - {0x0b3e, 0x0b44, 1}, - {0x0b47, 0x0b48, 1}, - {0x0b4b, 0x0b4c, 1}, - {0x0b56, 0x0b57, 1}, - {0x0b62, 0x0b63, 1}, - {0x0b82, 0x0b82, 1}, - {0x0bbe, 0x0bc2, 1}, - {0x0bc6, 0x0bc8, 1}, - {0x0bca, 0x0bcc, 1}, - {0x0bd7, 0x0bd7, 1}, - {0x0c01, 0x0c03, 1}, - {0x0c3e, 0x0c44, 1}, - {0x0c46, 0x0c48, 1}, - {0x0c4a, 0x0c4c, 1}, - {0x0c55, 0x0c56, 1}, - {0x0c62, 0x0c63, 1}, - {0x0c82, 0x0c83, 1}, - {0x0cbe, 0x0cc4, 1}, - {0x0cc6, 0x0cc8, 1}, - {0x0cca, 0x0ccc, 1}, - {0x0cd5, 0x0cd6, 1}, - {0x0ce2, 0x0ce3, 1}, - {0x0d02, 0x0d03, 1}, - {0x0d3e, 0x0d44, 1}, - {0x0d46, 0x0d48, 1}, - {0x0d4a, 0x0d4c, 1}, - {0x0d57, 0x0d57, 1}, - {0x0d62, 0x0d63, 1}, - {0x0d82, 0x0d83, 1}, - {0x0dcf, 0x0dd4, 1}, - {0x0dd6, 0x0dd6, 1}, - {0x0dd8, 0x0ddf, 1}, - {0x0df2, 0x0df3, 1}, - {0x0e31, 0x0e31, 1}, - {0x0e34, 0x0e3a, 1}, - {0x0e4d, 0x0e4d, 1}, - {0x0eb1, 0x0eb1, 1}, - {0x0eb4, 0x0eb9, 1}, - {0x0ebb, 0x0ebc, 1}, - {0x0ecd, 0x0ecd, 1}, - {0x0f71, 0x0f81, 1}, - {0x0f8d, 0x0f97, 1}, - {0x0f99, 0x0fbc, 1}, - {0x102b, 0x1036, 1}, - {0x1038, 0x1038, 1}, - {0x103b, 0x103e, 1}, - {0x1056, 0x1059, 1}, - {0x105e, 0x1060, 1}, - {0x1062, 0x1062, 1}, - {0x1067, 0x1068, 1}, - {0x1071, 0x1074, 1}, - {0x1082, 0x1086, 1}, - {0x109c, 0x109d, 1}, - {0x135f, 0x135f, 1}, - {0x1712, 0x1713, 1}, - {0x1732, 0x1733, 1}, - {0x1752, 0x1753, 1}, - {0x1772, 0x1773, 1}, - {0x17b6, 0x17c8, 1}, - {0x18a9, 0x18a9, 1}, - {0x1920, 0x192b, 1}, - {0x1930, 0x1938, 1}, - {0x19b0, 0x19c0, 1}, - {0x19c8, 0x19c9, 1}, - {0x1a17, 0x1a1b, 1}, - {0x1a55, 0x1a5e, 1}, - {0x1a61, 0x1a74, 1}, - {0x1b00, 0x1b04, 1}, - {0x1b35, 0x1b43, 1}, - {0x1b80, 0x1b82, 1}, - {0x1ba1, 0x1ba9, 1}, - {0x1bac, 0x1bad, 1}, - {0x1be7, 0x1bf1, 1}, - {0x1c24, 0x1c35, 1}, - {0x1cf2, 0x1cf3, 1}, - {0x24b6, 0x24e9, 1}, - {0x2de0, 0x2dff, 1}, - {0xa674, 0xa67b, 1}, - {0xa69f, 0xa69f, 1}, - {0xa823, 0xa827, 1}, - {0xa880, 0xa881, 1}, - {0xa8b4, 0xa8c3, 1}, - {0xa926, 0xa92a, 1}, - {0xa947, 0xa952, 1}, - {0xa980, 0xa983, 1}, - {0xa9b4, 0xa9bf, 1}, - {0xaa29, 0xaa36, 1}, - {0xaa43, 0xaa43, 1}, - {0xaa4c, 0xaa4d, 1}, - {0xaab0, 0xaab0, 1}, - {0xaab2, 0xaab4, 1}, - {0xaab7, 0xaab8, 1}, - {0xaabe, 0xaabe, 1}, - {0xaaeb, 0xaaef, 1}, - {0xaaf5, 0xaaf5, 1}, - {0xabe3, 0xabea, 1}, - {0xfb1e, 0xfb1e, 1}, - }, - R32: []Range32{ - {0x10a01, 0x10a03, 1}, - {0x10a05, 0x10a06, 1}, - {0x10a0c, 0x10a0f, 1}, - {0x11000, 0x11002, 1}, - {0x11038, 0x11045, 1}, - {0x11082, 0x11082, 1}, - {0x110b0, 0x110b8, 1}, - {0x11100, 0x11102, 1}, - {0x11127, 0x11132, 1}, - {0x11180, 0x11182, 1}, - {0x111b3, 0x111bf, 1}, - {0x116ab, 0x116b5, 1}, - {0x16f51, 0x16f7e, 1}, - }, -} - -var _Other_Default_Ignorable_Code_Point = &RangeTable{ - R16: []Range16{ - {0x034f, 0x034f, 1}, - {0x115f, 0x1160, 1}, - {0x17b4, 0x17b5, 1}, - {0x2065, 0x2065, 1}, - {0x3164, 0x3164, 1}, - {0xffa0, 0xffa0, 1}, - {0xfff0, 0xfff8, 1}, - }, - R32: []Range32{ - {0xe0000, 0xe0000, 1}, - {0xe0002, 0xe001f, 1}, - {0xe0080, 0xe00ff, 1}, - {0xe01f0, 0xe0fff, 1}, - }, -} - -var _Other_Grapheme_Extend = &RangeTable{ - R16: []Range16{ - {0x09be, 0x09be, 1}, - {0x09d7, 0x09d7, 1}, - {0x0b3e, 0x0b3e, 1}, - {0x0b57, 0x0b57, 1}, - {0x0bbe, 0x0bbe, 1}, - {0x0bd7, 0x0bd7, 1}, - {0x0cc2, 0x0cc2, 1}, - {0x0cd5, 0x0cd6, 1}, - {0x0d3e, 0x0d3e, 1}, - {0x0d57, 0x0d57, 1}, - {0x0dcf, 0x0dcf, 1}, - {0x0ddf, 0x0ddf, 1}, - {0x200c, 0x200d, 1}, - {0x302e, 0x302f, 1}, - {0xff9e, 0xff9f, 1}, - }, - R32: []Range32{ - {0x1d165, 0x1d165, 1}, - {0x1d16e, 0x1d172, 1}, - }, -} - -var _Other_ID_Continue = &RangeTable{ - R16: []Range16{ - {0x00b7, 0x00b7, 1}, - {0x0387, 0x0387, 1}, - {0x1369, 0x1371, 1}, - {0x19da, 0x19da, 1}, - }, - LatinOffset: 1, -} - -var _Other_ID_Start = &RangeTable{ - R16: []Range16{ - {0x2118, 0x2118, 1}, - {0x212e, 0x212e, 1}, - {0x309b, 0x309c, 1}, - }, -} - -var _Other_Lowercase = &RangeTable{ - R16: []Range16{ - {0x00aa, 0x00aa, 1}, - {0x00ba, 0x00ba, 1}, - {0x02b0, 0x02b8, 1}, - {0x02c0, 0x02c1, 1}, - {0x02e0, 0x02e4, 1}, - {0x0345, 0x0345, 1}, - {0x037a, 0x037a, 1}, - {0x1d2c, 0x1d6a, 1}, - {0x1d78, 0x1d78, 1}, - {0x1d9b, 0x1dbf, 1}, - {0x2071, 0x2071, 1}, - {0x207f, 0x207f, 1}, - {0x2090, 0x209c, 1}, - {0x2170, 0x217f, 1}, - {0x24d0, 0x24e9, 1}, - {0x2c7c, 0x2c7d, 1}, - {0xa770, 0xa770, 1}, - {0xa7f8, 0xa7f9, 1}, - }, - LatinOffset: 2, -} - -var _Other_Math = &RangeTable{ - R16: []Range16{ - {0x005e, 0x005e, 1}, - {0x03d0, 0x03d2, 1}, - {0x03d5, 0x03d5, 1}, - {0x03f0, 0x03f1, 1}, - {0x03f4, 0x03f5, 1}, - {0x2016, 0x2016, 1}, - {0x2032, 0x2034, 1}, - {0x2040, 0x2040, 1}, - {0x2061, 0x2064, 1}, - {0x207d, 0x207e, 1}, - {0x208d, 0x208e, 1}, - {0x20d0, 0x20dc, 1}, - {0x20e1, 0x20e1, 1}, - {0x20e5, 0x20e6, 1}, - {0x20eb, 0x20ef, 1}, - {0x2102, 0x2102, 1}, - {0x2107, 0x2107, 1}, - {0x210a, 0x2113, 1}, - {0x2115, 0x2115, 1}, - {0x2119, 0x211d, 1}, - {0x2124, 0x2124, 1}, - {0x2128, 0x2129, 1}, - {0x212c, 0x212d, 1}, - {0x212f, 0x2131, 1}, - {0x2133, 0x2138, 1}, - {0x213c, 0x213f, 1}, - {0x2145, 0x2149, 1}, - {0x2195, 0x2199, 1}, - {0x219c, 0x219f, 1}, - {0x21a1, 0x21a2, 1}, - {0x21a4, 0x21a5, 1}, - {0x21a7, 0x21a7, 1}, - {0x21a9, 0x21ad, 1}, - {0x21b0, 0x21b1, 1}, - {0x21b6, 0x21b7, 1}, - {0x21bc, 0x21cd, 1}, - {0x21d0, 0x21d1, 1}, - {0x21d3, 0x21d3, 1}, - {0x21d5, 0x21db, 1}, - {0x21dd, 0x21dd, 1}, - {0x21e4, 0x21e5, 1}, - {0x2308, 0x230b, 1}, - {0x23b4, 0x23b5, 1}, - {0x23b7, 0x23b7, 1}, - {0x23d0, 0x23d0, 1}, - {0x23e2, 0x23e2, 1}, - {0x25a0, 0x25a1, 1}, - {0x25ae, 0x25b6, 1}, - {0x25bc, 0x25c0, 1}, - {0x25c6, 0x25c7, 1}, - {0x25ca, 0x25cb, 1}, - {0x25cf, 0x25d3, 1}, - {0x25e2, 0x25e2, 1}, - {0x25e4, 0x25e4, 1}, - {0x25e7, 0x25ec, 1}, - {0x2605, 0x2606, 1}, - {0x2640, 0x2640, 1}, - {0x2642, 0x2642, 1}, - {0x2660, 0x2663, 1}, - {0x266d, 0x266e, 1}, - {0x27c5, 0x27c6, 1}, - {0x27e6, 0x27ef, 1}, - {0x2983, 0x2998, 1}, - {0x29d8, 0x29db, 1}, - {0x29fc, 0x29fd, 1}, - {0xfe61, 0xfe61, 1}, - {0xfe63, 0xfe63, 1}, - {0xfe68, 0xfe68, 1}, - {0xff3c, 0xff3c, 1}, - {0xff3e, 0xff3e, 1}, - }, - R32: []Range32{ - {0x1d400, 0x1d454, 1}, - {0x1d456, 0x1d49c, 1}, - {0x1d49e, 0x1d49f, 1}, - {0x1d4a2, 0x1d4a2, 1}, - {0x1d4a5, 0x1d4a6, 1}, - {0x1d4a9, 0x1d4ac, 1}, - {0x1d4ae, 0x1d4b9, 1}, - {0x1d4bb, 0x1d4bb, 1}, - {0x1d4bd, 0x1d4c3, 1}, - {0x1d4c5, 0x1d505, 1}, - {0x1d507, 0x1d50a, 1}, - {0x1d50d, 0x1d514, 1}, - {0x1d516, 0x1d51c, 1}, - {0x1d51e, 0x1d539, 1}, - {0x1d53b, 0x1d53e, 1}, - {0x1d540, 0x1d544, 1}, - {0x1d546, 0x1d546, 1}, - {0x1d54a, 0x1d550, 1}, - {0x1d552, 0x1d6a5, 1}, - {0x1d6a8, 0x1d6c0, 1}, - {0x1d6c2, 0x1d6da, 1}, - {0x1d6dc, 0x1d6fa, 1}, - {0x1d6fc, 0x1d714, 1}, - {0x1d716, 0x1d734, 1}, - {0x1d736, 0x1d74e, 1}, - {0x1d750, 0x1d76e, 1}, - {0x1d770, 0x1d788, 1}, - {0x1d78a, 0x1d7a8, 1}, - {0x1d7aa, 0x1d7c2, 1}, - {0x1d7c4, 0x1d7cb, 1}, - {0x1d7ce, 0x1d7ff, 1}, - {0x1ee00, 0x1ee03, 1}, - {0x1ee05, 0x1ee1f, 1}, - {0x1ee21, 0x1ee22, 1}, - {0x1ee24, 0x1ee24, 1}, - {0x1ee27, 0x1ee27, 1}, - {0x1ee29, 0x1ee32, 1}, - {0x1ee34, 0x1ee37, 1}, - {0x1ee39, 0x1ee39, 1}, - {0x1ee3b, 0x1ee3b, 1}, - {0x1ee42, 0x1ee42, 1}, - {0x1ee47, 0x1ee47, 1}, - {0x1ee49, 0x1ee49, 1}, - {0x1ee4b, 0x1ee4b, 1}, - {0x1ee4d, 0x1ee4f, 1}, - {0x1ee51, 0x1ee52, 1}, - {0x1ee54, 0x1ee54, 1}, - {0x1ee57, 0x1ee57, 1}, - {0x1ee59, 0x1ee59, 1}, - {0x1ee5b, 0x1ee5b, 1}, - {0x1ee5d, 0x1ee5d, 1}, - {0x1ee5f, 0x1ee5f, 1}, - {0x1ee61, 0x1ee62, 1}, - {0x1ee64, 0x1ee64, 1}, - {0x1ee67, 0x1ee6a, 1}, - {0x1ee6c, 0x1ee72, 1}, - {0x1ee74, 0x1ee77, 1}, - {0x1ee79, 0x1ee7c, 1}, - {0x1ee7e, 0x1ee7e, 1}, - {0x1ee80, 0x1ee89, 1}, - {0x1ee8b, 0x1ee9b, 1}, - {0x1eea1, 0x1eea3, 1}, - {0x1eea5, 0x1eea9, 1}, - {0x1eeab, 0x1eebb, 1}, - }, - LatinOffset: 1, -} - -var _Other_Uppercase = &RangeTable{ - R16: []Range16{ - {0x2160, 0x216f, 1}, - {0x24b6, 0x24cf, 1}, - }, -} - -var _Pattern_Syntax = &RangeTable{ - R16: []Range16{ - {0x0021, 0x002f, 1}, - {0x003a, 0x0040, 1}, - {0x005b, 0x005e, 1}, - {0x0060, 0x0060, 1}, - {0x007b, 0x007e, 1}, - {0x00a1, 0x00a7, 1}, - {0x00a9, 0x00a9, 1}, - {0x00ab, 0x00ac, 1}, - {0x00ae, 0x00ae, 1}, - {0x00b0, 0x00b1, 1}, - {0x00b6, 0x00b6, 1}, - {0x00bb, 0x00bb, 1}, - {0x00bf, 0x00bf, 1}, - {0x00d7, 0x00d7, 1}, - {0x00f7, 0x00f7, 1}, - {0x2010, 0x2027, 1}, - {0x2030, 0x203e, 1}, - {0x2041, 0x2053, 1}, - {0x2055, 0x205e, 1}, - {0x2190, 0x245f, 1}, - {0x2500, 0x2775, 1}, - {0x2794, 0x2bff, 1}, - {0x2e00, 0x2e7f, 1}, - {0x3001, 0x3003, 1}, - {0x3008, 0x3020, 1}, - {0x3030, 0x3030, 1}, - {0xfd3e, 0xfd3f, 1}, - {0xfe45, 0xfe46, 1}, - }, - LatinOffset: 15, -} - -var _Pattern_White_Space = &RangeTable{ - R16: []Range16{ - {0x0009, 0x000d, 1}, - {0x0020, 0x0020, 1}, - {0x0085, 0x0085, 1}, - {0x200e, 0x200f, 1}, - {0x2028, 0x2029, 1}, - }, - LatinOffset: 3, -} - -var _Quotation_Mark = &RangeTable{ - R16: []Range16{ - {0x0022, 0x0022, 1}, - {0x0027, 0x0027, 1}, - {0x00ab, 0x00ab, 1}, - {0x00bb, 0x00bb, 1}, - {0x2018, 0x201f, 1}, - {0x2039, 0x203a, 1}, - {0x300c, 0x300f, 1}, - {0x301d, 0x301f, 1}, - {0xfe41, 0xfe44, 1}, - {0xff02, 0xff02, 1}, - {0xff07, 0xff07, 1}, - {0xff62, 0xff63, 1}, - }, - LatinOffset: 4, -} - -var _Radical = &RangeTable{ - R16: []Range16{ - {0x2e80, 0x2e99, 1}, - {0x2e9b, 0x2ef3, 1}, - {0x2f00, 0x2fd5, 1}, - }, -} - -var _STerm = &RangeTable{ - R16: []Range16{ - {0x0021, 0x0021, 1}, - {0x002e, 0x002e, 1}, - {0x003f, 0x003f, 1}, - {0x055c, 0x055c, 1}, - {0x055e, 0x055e, 1}, - {0x0589, 0x0589, 1}, - {0x061f, 0x061f, 1}, - {0x06d4, 0x06d4, 1}, - {0x0700, 0x0702, 1}, - {0x07f9, 0x07f9, 1}, - {0x0964, 0x0965, 1}, - {0x104a, 0x104b, 1}, - {0x1362, 0x1362, 1}, - {0x1367, 0x1368, 1}, - {0x166e, 0x166e, 1}, - {0x1735, 0x1736, 1}, - {0x1803, 0x1803, 1}, - {0x1809, 0x1809, 1}, - {0x1944, 0x1945, 1}, - {0x1aa8, 0x1aab, 1}, - {0x1b5a, 0x1b5b, 1}, - {0x1b5e, 0x1b5f, 1}, - {0x1c3b, 0x1c3c, 1}, - {0x1c7e, 0x1c7f, 1}, - {0x203c, 0x203d, 1}, - {0x2047, 0x2049, 1}, - {0x2e2e, 0x2e2e, 1}, - {0x3002, 0x3002, 1}, - {0xa4ff, 0xa4ff, 1}, - {0xa60e, 0xa60f, 1}, - {0xa6f3, 0xa6f3, 1}, - {0xa6f7, 0xa6f7, 1}, - {0xa876, 0xa877, 1}, - {0xa8ce, 0xa8cf, 1}, - {0xa92f, 0xa92f, 1}, - {0xa9c8, 0xa9c9, 1}, - {0xaa5d, 0xaa5f, 1}, - {0xaaf0, 0xaaf1, 1}, - {0xabeb, 0xabeb, 1}, - {0xfe52, 0xfe52, 1}, - {0xfe56, 0xfe57, 1}, - {0xff01, 0xff01, 1}, - {0xff0e, 0xff0e, 1}, - {0xff1f, 0xff1f, 1}, - {0xff61, 0xff61, 1}, - }, - R32: []Range32{ - {0x10a56, 0x10a57, 1}, - {0x11047, 0x11048, 1}, - {0x110be, 0x110c1, 1}, - {0x11141, 0x11143, 1}, - {0x111c5, 0x111c6, 1}, - }, - LatinOffset: 3, -} - -var _Soft_Dotted = &RangeTable{ - R16: []Range16{ - {0x0069, 0x006a, 1}, - {0x012f, 0x012f, 1}, - {0x0249, 0x0249, 1}, - {0x0268, 0x0268, 1}, - {0x029d, 0x029d, 1}, - {0x02b2, 0x02b2, 1}, - {0x03f3, 0x03f3, 1}, - {0x0456, 0x0456, 1}, - {0x0458, 0x0458, 1}, - {0x1d62, 0x1d62, 1}, - {0x1d96, 0x1d96, 1}, - {0x1da4, 0x1da4, 1}, - {0x1da8, 0x1da8, 1}, - {0x1e2d, 0x1e2d, 1}, - {0x1ecb, 0x1ecb, 1}, - {0x2071, 0x2071, 1}, - {0x2148, 0x2149, 1}, - {0x2c7c, 0x2c7c, 1}, - }, - R32: []Range32{ - {0x1d422, 0x1d423, 1}, - {0x1d456, 0x1d457, 1}, - {0x1d48a, 0x1d48b, 1}, - {0x1d4be, 0x1d4bf, 1}, - {0x1d4f2, 0x1d4f3, 1}, - {0x1d526, 0x1d527, 1}, - {0x1d55a, 0x1d55b, 1}, - {0x1d58e, 0x1d58f, 1}, - {0x1d5c2, 0x1d5c3, 1}, - {0x1d5f6, 0x1d5f7, 1}, - {0x1d62a, 0x1d62b, 1}, - {0x1d65e, 0x1d65f, 1}, - {0x1d692, 0x1d693, 1}, - }, - LatinOffset: 1, -} - -var _Terminal_Punctuation = &RangeTable{ - R16: []Range16{ - {0x0021, 0x0021, 1}, - {0x002c, 0x002c, 1}, - {0x002e, 0x002e, 1}, - {0x003a, 0x003b, 1}, - {0x003f, 0x003f, 1}, - {0x037e, 0x037e, 1}, - {0x0387, 0x0387, 1}, - {0x0589, 0x0589, 1}, - {0x05c3, 0x05c3, 1}, - {0x060c, 0x060c, 1}, - {0x061b, 0x061b, 1}, - {0x061f, 0x061f, 1}, - {0x06d4, 0x06d4, 1}, - {0x0700, 0x070a, 1}, - {0x070c, 0x070c, 1}, - {0x07f8, 0x07f9, 1}, - {0x0830, 0x083e, 1}, - {0x085e, 0x085e, 1}, - {0x0964, 0x0965, 1}, - {0x0e5a, 0x0e5b, 1}, - {0x0f08, 0x0f08, 1}, - {0x0f0d, 0x0f12, 1}, - {0x104a, 0x104b, 1}, - {0x1361, 0x1368, 1}, - {0x166d, 0x166e, 1}, - {0x16eb, 0x16ed, 1}, - {0x17d4, 0x17d6, 1}, - {0x17da, 0x17da, 1}, - {0x1802, 0x1805, 1}, - {0x1808, 0x1809, 1}, - {0x1944, 0x1945, 1}, - {0x1aa8, 0x1aab, 1}, - {0x1b5a, 0x1b5b, 1}, - {0x1b5d, 0x1b5f, 1}, - {0x1c3b, 0x1c3f, 1}, - {0x1c7e, 0x1c7f, 1}, - {0x203c, 0x203d, 1}, - {0x2047, 0x2049, 1}, - {0x2e2e, 0x2e2e, 1}, - {0x3001, 0x3002, 1}, - {0xa4fe, 0xa4ff, 1}, - {0xa60d, 0xa60f, 1}, - {0xa6f3, 0xa6f7, 1}, - {0xa876, 0xa877, 1}, - {0xa8ce, 0xa8cf, 1}, - {0xa92f, 0xa92f, 1}, - {0xa9c7, 0xa9c9, 1}, - {0xaa5d, 0xaa5f, 1}, - {0xaadf, 0xaadf, 1}, - {0xaaf0, 0xaaf1, 1}, - {0xabeb, 0xabeb, 1}, - {0xfe50, 0xfe52, 1}, - {0xfe54, 0xfe57, 1}, - {0xff01, 0xff01, 1}, - {0xff0c, 0xff0c, 1}, - {0xff0e, 0xff0e, 1}, - {0xff1a, 0xff1b, 1}, - {0xff1f, 0xff1f, 1}, - {0xff61, 0xff61, 1}, - {0xff64, 0xff64, 1}, - }, - R32: []Range32{ - {0x1039f, 0x1039f, 1}, - {0x103d0, 0x103d0, 1}, - {0x10857, 0x10857, 1}, - {0x1091f, 0x1091f, 1}, - {0x10b3a, 0x10b3f, 1}, - {0x11047, 0x1104d, 1}, - {0x110be, 0x110c1, 1}, - {0x11141, 0x11143, 1}, - {0x111c5, 0x111c6, 1}, - {0x12470, 0x12473, 1}, - }, - LatinOffset: 5, -} - -var _Unified_Ideograph = &RangeTable{ - R16: []Range16{ - {0x3400, 0x4db5, 1}, - {0x4e00, 0x9fcc, 1}, - {0xfa0e, 0xfa0f, 1}, - {0xfa11, 0xfa11, 1}, - {0xfa13, 0xfa14, 1}, - {0xfa1f, 0xfa1f, 1}, - {0xfa21, 0xfa21, 1}, - {0xfa23, 0xfa24, 1}, - {0xfa27, 0xfa29, 1}, - }, - R32: []Range32{ - {0x20000, 0x2a6d6, 1}, - {0x2a700, 0x2b734, 1}, - {0x2b740, 0x2b81d, 1}, - }, -} - -var _Variation_Selector = &RangeTable{ - R16: []Range16{ - {0x180b, 0x180d, 1}, - {0xfe00, 0xfe0f, 1}, - }, - R32: []Range32{ - {0xe0100, 0xe01ef, 1}, - }, -} - -var _White_Space = &RangeTable{ - R16: []Range16{ - {0x0009, 0x000d, 1}, - {0x0020, 0x0020, 1}, - {0x0085, 0x0085, 1}, - {0x00a0, 0x00a0, 1}, - {0x1680, 0x1680, 1}, - {0x2000, 0x200a, 1}, - {0x2028, 0x2029, 1}, - {0x202f, 0x202f, 1}, - {0x205f, 0x205f, 1}, - {0x3000, 0x3000, 1}, - }, - LatinOffset: 4, -} - -// These variables have type *RangeTable. -var ( - ASCII_Hex_Digit = _ASCII_Hex_Digit // ASCII_Hex_Digit is the set of Unicode characters with property ASCII_Hex_Digit. - Bidi_Control = _Bidi_Control // Bidi_Control is the set of Unicode characters with property Bidi_Control. - Dash = _Dash // Dash is the set of Unicode characters with property Dash. - Deprecated = _Deprecated // Deprecated is the set of Unicode characters with property Deprecated. - Diacritic = _Diacritic // Diacritic is the set of Unicode characters with property Diacritic. - Extender = _Extender // Extender is the set of Unicode characters with property Extender. - Hex_Digit = _Hex_Digit // Hex_Digit is the set of Unicode characters with property Hex_Digit. - Hyphen = _Hyphen // Hyphen is the set of Unicode characters with property Hyphen. - IDS_Binary_Operator = _IDS_Binary_Operator // IDS_Binary_Operator is the set of Unicode characters with property IDS_Binary_Operator. - IDS_Trinary_Operator = _IDS_Trinary_Operator // IDS_Trinary_Operator is the set of Unicode characters with property IDS_Trinary_Operator. - Ideographic = _Ideographic // Ideographic is the set of Unicode characters with property Ideographic. - Join_Control = _Join_Control // Join_Control is the set of Unicode characters with property Join_Control. - Logical_Order_Exception = _Logical_Order_Exception // Logical_Order_Exception is the set of Unicode characters with property Logical_Order_Exception. - Noncharacter_Code_Point = _Noncharacter_Code_Point // Noncharacter_Code_Point is the set of Unicode characters with property Noncharacter_Code_Point. - Other_Alphabetic = _Other_Alphabetic // Other_Alphabetic is the set of Unicode characters with property Other_Alphabetic. - Other_Default_Ignorable_Code_Point = _Other_Default_Ignorable_Code_Point // Other_Default_Ignorable_Code_Point is the set of Unicode characters with property Other_Default_Ignorable_Code_Point. - Other_Grapheme_Extend = _Other_Grapheme_Extend // Other_Grapheme_Extend is the set of Unicode characters with property Other_Grapheme_Extend. - Other_ID_Continue = _Other_ID_Continue // Other_ID_Continue is the set of Unicode characters with property Other_ID_Continue. - Other_ID_Start = _Other_ID_Start // Other_ID_Start is the set of Unicode characters with property Other_ID_Start. - Other_Lowercase = _Other_Lowercase // Other_Lowercase is the set of Unicode characters with property Other_Lowercase. - Other_Math = _Other_Math // Other_Math is the set of Unicode characters with property Other_Math. - Other_Uppercase = _Other_Uppercase // Other_Uppercase is the set of Unicode characters with property Other_Uppercase. - Pattern_Syntax = _Pattern_Syntax // Pattern_Syntax is the set of Unicode characters with property Pattern_Syntax. - Pattern_White_Space = _Pattern_White_Space // Pattern_White_Space is the set of Unicode characters with property Pattern_White_Space. - Quotation_Mark = _Quotation_Mark // Quotation_Mark is the set of Unicode characters with property Quotation_Mark. - Radical = _Radical // Radical is the set of Unicode characters with property Radical. - STerm = _STerm // STerm is the set of Unicode characters with property STerm. - Soft_Dotted = _Soft_Dotted // Soft_Dotted is the set of Unicode characters with property Soft_Dotted. - Terminal_Punctuation = _Terminal_Punctuation // Terminal_Punctuation is the set of Unicode characters with property Terminal_Punctuation. - Unified_Ideograph = _Unified_Ideograph // Unified_Ideograph is the set of Unicode characters with property Unified_Ideograph. - Variation_Selector = _Variation_Selector // Variation_Selector is the set of Unicode characters with property Variation_Selector. - White_Space = _White_Space // White_Space is the set of Unicode characters with property White_Space. -) - -// Generated by running -// maketables --data=http://www.unicode.org/Public/6.3.0/ucd/UnicodeData.txt --casefolding=http://www.unicode.org/Public/6.3.0/ucd/CaseFolding.txt -// DO NOT EDIT - -// CaseRanges is the table describing case mappings for all letters with -// non-self mappings. -var CaseRanges = _CaseRanges -var _CaseRanges = []CaseRange{ - {0x0041, 0x005A, d{0, 32, 0}}, - {0x0061, 0x007A, d{-32, 0, -32}}, - {0x00B5, 0x00B5, d{743, 0, 743}}, - {0x00C0, 0x00D6, d{0, 32, 0}}, - {0x00D8, 0x00DE, d{0, 32, 0}}, - {0x00E0, 0x00F6, d{-32, 0, -32}}, - {0x00F8, 0x00FE, d{-32, 0, -32}}, - {0x00FF, 0x00FF, d{121, 0, 121}}, - {0x0100, 0x012F, d{UpperLower, UpperLower, UpperLower}}, - {0x0130, 0x0130, d{0, -199, 0}}, - {0x0131, 0x0131, d{-232, 0, -232}}, - {0x0132, 0x0137, d{UpperLower, UpperLower, UpperLower}}, - {0x0139, 0x0148, d{UpperLower, UpperLower, UpperLower}}, - {0x014A, 0x0177, d{UpperLower, UpperLower, UpperLower}}, - {0x0178, 0x0178, d{0, -121, 0}}, - {0x0179, 0x017E, d{UpperLower, UpperLower, UpperLower}}, - {0x017F, 0x017F, d{-300, 0, -300}}, - {0x0180, 0x0180, d{195, 0, 195}}, - {0x0181, 0x0181, d{0, 210, 0}}, - {0x0182, 0x0185, d{UpperLower, UpperLower, UpperLower}}, - {0x0186, 0x0186, d{0, 206, 0}}, - {0x0187, 0x0188, d{UpperLower, UpperLower, UpperLower}}, - {0x0189, 0x018A, d{0, 205, 0}}, - {0x018B, 0x018C, d{UpperLower, UpperLower, UpperLower}}, - {0x018E, 0x018E, d{0, 79, 0}}, - {0x018F, 0x018F, d{0, 202, 0}}, - {0x0190, 0x0190, d{0, 203, 0}}, - {0x0191, 0x0192, d{UpperLower, UpperLower, UpperLower}}, - {0x0193, 0x0193, d{0, 205, 0}}, - {0x0194, 0x0194, d{0, 207, 0}}, - {0x0195, 0x0195, d{97, 0, 97}}, - {0x0196, 0x0196, d{0, 211, 0}}, - {0x0197, 0x0197, d{0, 209, 0}}, - {0x0198, 0x0199, d{UpperLower, UpperLower, UpperLower}}, - {0x019A, 0x019A, d{163, 0, 163}}, - {0x019C, 0x019C, d{0, 211, 0}}, - {0x019D, 0x019D, d{0, 213, 0}}, - {0x019E, 0x019E, d{130, 0, 130}}, - {0x019F, 0x019F, d{0, 214, 0}}, - {0x01A0, 0x01A5, d{UpperLower, UpperLower, UpperLower}}, - {0x01A6, 0x01A6, d{0, 218, 0}}, - {0x01A7, 0x01A8, d{UpperLower, UpperLower, UpperLower}}, - {0x01A9, 0x01A9, d{0, 218, 0}}, - {0x01AC, 0x01AD, d{UpperLower, UpperLower, UpperLower}}, - {0x01AE, 0x01AE, d{0, 218, 0}}, - {0x01AF, 0x01B0, d{UpperLower, UpperLower, UpperLower}}, - {0x01B1, 0x01B2, d{0, 217, 0}}, - {0x01B3, 0x01B6, d{UpperLower, UpperLower, UpperLower}}, - {0x01B7, 0x01B7, d{0, 219, 0}}, - {0x01B8, 0x01B9, d{UpperLower, UpperLower, UpperLower}}, - {0x01BC, 0x01BD, d{UpperLower, UpperLower, UpperLower}}, - {0x01BF, 0x01BF, d{56, 0, 56}}, - {0x01C4, 0x01C4, d{0, 2, 1}}, - {0x01C5, 0x01C5, d{-1, 1, 0}}, - {0x01C6, 0x01C6, d{-2, 0, -1}}, - {0x01C7, 0x01C7, d{0, 2, 1}}, - {0x01C8, 0x01C8, d{-1, 1, 0}}, - {0x01C9, 0x01C9, d{-2, 0, -1}}, - {0x01CA, 0x01CA, d{0, 2, 1}}, - {0x01CB, 0x01CB, d{-1, 1, 0}}, - {0x01CC, 0x01CC, d{-2, 0, -1}}, - {0x01CD, 0x01DC, d{UpperLower, UpperLower, UpperLower}}, - {0x01DD, 0x01DD, d{-79, 0, -79}}, - {0x01DE, 0x01EF, d{UpperLower, UpperLower, UpperLower}}, - {0x01F1, 0x01F1, d{0, 2, 1}}, - {0x01F2, 0x01F2, d{-1, 1, 0}}, - {0x01F3, 0x01F3, d{-2, 0, -1}}, - {0x01F4, 0x01F5, d{UpperLower, UpperLower, UpperLower}}, - {0x01F6, 0x01F6, d{0, -97, 0}}, - {0x01F7, 0x01F7, d{0, -56, 0}}, - {0x01F8, 0x021F, d{UpperLower, UpperLower, UpperLower}}, - {0x0220, 0x0220, d{0, -130, 0}}, - {0x0222, 0x0233, d{UpperLower, UpperLower, UpperLower}}, - {0x023A, 0x023A, d{0, 10795, 0}}, - {0x023B, 0x023C, d{UpperLower, UpperLower, UpperLower}}, - {0x023D, 0x023D, d{0, -163, 0}}, - {0x023E, 0x023E, d{0, 10792, 0}}, - {0x023F, 0x0240, d{10815, 0, 10815}}, - {0x0241, 0x0242, d{UpperLower, UpperLower, UpperLower}}, - {0x0243, 0x0243, d{0, -195, 0}}, - {0x0244, 0x0244, d{0, 69, 0}}, - {0x0245, 0x0245, d{0, 71, 0}}, - {0x0246, 0x024F, d{UpperLower, UpperLower, UpperLower}}, - {0x0250, 0x0250, d{10783, 0, 10783}}, - {0x0251, 0x0251, d{10780, 0, 10780}}, - {0x0252, 0x0252, d{10782, 0, 10782}}, - {0x0253, 0x0253, d{-210, 0, -210}}, - {0x0254, 0x0254, d{-206, 0, -206}}, - {0x0256, 0x0257, d{-205, 0, -205}}, - {0x0259, 0x0259, d{-202, 0, -202}}, - {0x025B, 0x025B, d{-203, 0, -203}}, - {0x0260, 0x0260, d{-205, 0, -205}}, - {0x0263, 0x0263, d{-207, 0, -207}}, - {0x0265, 0x0265, d{42280, 0, 42280}}, - {0x0266, 0x0266, d{42308, 0, 42308}}, - {0x0268, 0x0268, d{-209, 0, -209}}, - {0x0269, 0x0269, d{-211, 0, -211}}, - {0x026B, 0x026B, d{10743, 0, 10743}}, - {0x026F, 0x026F, d{-211, 0, -211}}, - {0x0271, 0x0271, d{10749, 0, 10749}}, - {0x0272, 0x0272, d{-213, 0, -213}}, - {0x0275, 0x0275, d{-214, 0, -214}}, - {0x027D, 0x027D, d{10727, 0, 10727}}, - {0x0280, 0x0280, d{-218, 0, -218}}, - {0x0283, 0x0283, d{-218, 0, -218}}, - {0x0288, 0x0288, d{-218, 0, -218}}, - {0x0289, 0x0289, d{-69, 0, -69}}, - {0x028A, 0x028B, d{-217, 0, -217}}, - {0x028C, 0x028C, d{-71, 0, -71}}, - {0x0292, 0x0292, d{-219, 0, -219}}, - {0x0345, 0x0345, d{84, 0, 84}}, - {0x0370, 0x0373, d{UpperLower, UpperLower, UpperLower}}, - {0x0376, 0x0377, d{UpperLower, UpperLower, UpperLower}}, - {0x037B, 0x037D, d{130, 0, 130}}, - {0x0386, 0x0386, d{0, 38, 0}}, - {0x0388, 0x038A, d{0, 37, 0}}, - {0x038C, 0x038C, d{0, 64, 0}}, - {0x038E, 0x038F, d{0, 63, 0}}, - {0x0391, 0x03A1, d{0, 32, 0}}, - {0x03A3, 0x03AB, d{0, 32, 0}}, - {0x03AC, 0x03AC, d{-38, 0, -38}}, - {0x03AD, 0x03AF, d{-37, 0, -37}}, - {0x03B1, 0x03C1, d{-32, 0, -32}}, - {0x03C2, 0x03C2, d{-31, 0, -31}}, - {0x03C3, 0x03CB, d{-32, 0, -32}}, - {0x03CC, 0x03CC, d{-64, 0, -64}}, - {0x03CD, 0x03CE, d{-63, 0, -63}}, - {0x03CF, 0x03CF, d{0, 8, 0}}, - {0x03D0, 0x03D0, d{-62, 0, -62}}, - {0x03D1, 0x03D1, d{-57, 0, -57}}, - {0x03D5, 0x03D5, d{-47, 0, -47}}, - {0x03D6, 0x03D6, d{-54, 0, -54}}, - {0x03D7, 0x03D7, d{-8, 0, -8}}, - {0x03D8, 0x03EF, d{UpperLower, UpperLower, UpperLower}}, - {0x03F0, 0x03F0, d{-86, 0, -86}}, - {0x03F1, 0x03F1, d{-80, 0, -80}}, - {0x03F2, 0x03F2, d{7, 0, 7}}, - {0x03F4, 0x03F4, d{0, -60, 0}}, - {0x03F5, 0x03F5, d{-96, 0, -96}}, - {0x03F7, 0x03F8, d{UpperLower, UpperLower, UpperLower}}, - {0x03F9, 0x03F9, d{0, -7, 0}}, - {0x03FA, 0x03FB, d{UpperLower, UpperLower, UpperLower}}, - {0x03FD, 0x03FF, d{0, -130, 0}}, - {0x0400, 0x040F, d{0, 80, 0}}, - {0x0410, 0x042F, d{0, 32, 0}}, - {0x0430, 0x044F, d{-32, 0, -32}}, - {0x0450, 0x045F, d{-80, 0, -80}}, - {0x0460, 0x0481, d{UpperLower, UpperLower, UpperLower}}, - {0x048A, 0x04BF, d{UpperLower, UpperLower, UpperLower}}, - {0x04C0, 0x04C0, d{0, 15, 0}}, - {0x04C1, 0x04CE, d{UpperLower, UpperLower, UpperLower}}, - {0x04CF, 0x04CF, d{-15, 0, -15}}, - {0x04D0, 0x0527, d{UpperLower, UpperLower, UpperLower}}, - {0x0531, 0x0556, d{0, 48, 0}}, - {0x0561, 0x0586, d{-48, 0, -48}}, - {0x10A0, 0x10C5, d{0, 7264, 0}}, - {0x10C7, 0x10C7, d{0, 7264, 0}}, - {0x10CD, 0x10CD, d{0, 7264, 0}}, - {0x1D79, 0x1D79, d{35332, 0, 35332}}, - {0x1D7D, 0x1D7D, d{3814, 0, 3814}}, - {0x1E00, 0x1E95, d{UpperLower, UpperLower, UpperLower}}, - {0x1E9B, 0x1E9B, d{-59, 0, -59}}, - {0x1E9E, 0x1E9E, d{0, -7615, 0}}, - {0x1EA0, 0x1EFF, d{UpperLower, UpperLower, UpperLower}}, - {0x1F00, 0x1F07, d{8, 0, 8}}, - {0x1F08, 0x1F0F, d{0, -8, 0}}, - {0x1F10, 0x1F15, d{8, 0, 8}}, - {0x1F18, 0x1F1D, d{0, -8, 0}}, - {0x1F20, 0x1F27, d{8, 0, 8}}, - {0x1F28, 0x1F2F, d{0, -8, 0}}, - {0x1F30, 0x1F37, d{8, 0, 8}}, - {0x1F38, 0x1F3F, d{0, -8, 0}}, - {0x1F40, 0x1F45, d{8, 0, 8}}, - {0x1F48, 0x1F4D, d{0, -8, 0}}, - {0x1F51, 0x1F51, d{8, 0, 8}}, - {0x1F53, 0x1F53, d{8, 0, 8}}, - {0x1F55, 0x1F55, d{8, 0, 8}}, - {0x1F57, 0x1F57, d{8, 0, 8}}, - {0x1F59, 0x1F59, d{0, -8, 0}}, - {0x1F5B, 0x1F5B, d{0, -8, 0}}, - {0x1F5D, 0x1F5D, d{0, -8, 0}}, - {0x1F5F, 0x1F5F, d{0, -8, 0}}, - {0x1F60, 0x1F67, d{8, 0, 8}}, - {0x1F68, 0x1F6F, d{0, -8, 0}}, - {0x1F70, 0x1F71, d{74, 0, 74}}, - {0x1F72, 0x1F75, d{86, 0, 86}}, - {0x1F76, 0x1F77, d{100, 0, 100}}, - {0x1F78, 0x1F79, d{128, 0, 128}}, - {0x1F7A, 0x1F7B, d{112, 0, 112}}, - {0x1F7C, 0x1F7D, d{126, 0, 126}}, - {0x1F80, 0x1F87, d{8, 0, 8}}, - {0x1F88, 0x1F8F, d{0, -8, 0}}, - {0x1F90, 0x1F97, d{8, 0, 8}}, - {0x1F98, 0x1F9F, d{0, -8, 0}}, - {0x1FA0, 0x1FA7, d{8, 0, 8}}, - {0x1FA8, 0x1FAF, d{0, -8, 0}}, - {0x1FB0, 0x1FB1, d{8, 0, 8}}, - {0x1FB3, 0x1FB3, d{9, 0, 9}}, - {0x1FB8, 0x1FB9, d{0, -8, 0}}, - {0x1FBA, 0x1FBB, d{0, -74, 0}}, - {0x1FBC, 0x1FBC, d{0, -9, 0}}, - {0x1FBE, 0x1FBE, d{-7205, 0, -7205}}, - {0x1FC3, 0x1FC3, d{9, 0, 9}}, - {0x1FC8, 0x1FCB, d{0, -86, 0}}, - {0x1FCC, 0x1FCC, d{0, -9, 0}}, - {0x1FD0, 0x1FD1, d{8, 0, 8}}, - {0x1FD8, 0x1FD9, d{0, -8, 0}}, - {0x1FDA, 0x1FDB, d{0, -100, 0}}, - {0x1FE0, 0x1FE1, d{8, 0, 8}}, - {0x1FE5, 0x1FE5, d{7, 0, 7}}, - {0x1FE8, 0x1FE9, d{0, -8, 0}}, - {0x1FEA, 0x1FEB, d{0, -112, 0}}, - {0x1FEC, 0x1FEC, d{0, -7, 0}}, - {0x1FF3, 0x1FF3, d{9, 0, 9}}, - {0x1FF8, 0x1FF9, d{0, -128, 0}}, - {0x1FFA, 0x1FFB, d{0, -126, 0}}, - {0x1FFC, 0x1FFC, d{0, -9, 0}}, - {0x2126, 0x2126, d{0, -7517, 0}}, - {0x212A, 0x212A, d{0, -8383, 0}}, - {0x212B, 0x212B, d{0, -8262, 0}}, - {0x2132, 0x2132, d{0, 28, 0}}, - {0x214E, 0x214E, d{-28, 0, -28}}, - {0x2160, 0x216F, d{0, 16, 0}}, - {0x2170, 0x217F, d{-16, 0, -16}}, - {0x2183, 0x2184, d{UpperLower, UpperLower, UpperLower}}, - {0x24B6, 0x24CF, d{0, 26, 0}}, - {0x24D0, 0x24E9, d{-26, 0, -26}}, - {0x2C00, 0x2C2E, d{0, 48, 0}}, - {0x2C30, 0x2C5E, d{-48, 0, -48}}, - {0x2C60, 0x2C61, d{UpperLower, UpperLower, UpperLower}}, - {0x2C62, 0x2C62, d{0, -10743, 0}}, - {0x2C63, 0x2C63, d{0, -3814, 0}}, - {0x2C64, 0x2C64, d{0, -10727, 0}}, - {0x2C65, 0x2C65, d{-10795, 0, -10795}}, - {0x2C66, 0x2C66, d{-10792, 0, -10792}}, - {0x2C67, 0x2C6C, d{UpperLower, UpperLower, UpperLower}}, - {0x2C6D, 0x2C6D, d{0, -10780, 0}}, - {0x2C6E, 0x2C6E, d{0, -10749, 0}}, - {0x2C6F, 0x2C6F, d{0, -10783, 0}}, - {0x2C70, 0x2C70, d{0, -10782, 0}}, - {0x2C72, 0x2C73, d{UpperLower, UpperLower, UpperLower}}, - {0x2C75, 0x2C76, d{UpperLower, UpperLower, UpperLower}}, - {0x2C7E, 0x2C7F, d{0, -10815, 0}}, - {0x2C80, 0x2CE3, d{UpperLower, UpperLower, UpperLower}}, - {0x2CEB, 0x2CEE, d{UpperLower, UpperLower, UpperLower}}, - {0x2CF2, 0x2CF3, d{UpperLower, UpperLower, UpperLower}}, - {0x2D00, 0x2D25, d{-7264, 0, -7264}}, - {0x2D27, 0x2D27, d{-7264, 0, -7264}}, - {0x2D2D, 0x2D2D, d{-7264, 0, -7264}}, - {0xA640, 0xA66D, d{UpperLower, UpperLower, UpperLower}}, - {0xA680, 0xA697, d{UpperLower, UpperLower, UpperLower}}, - {0xA722, 0xA72F, d{UpperLower, UpperLower, UpperLower}}, - {0xA732, 0xA76F, d{UpperLower, UpperLower, UpperLower}}, - {0xA779, 0xA77C, d{UpperLower, UpperLower, UpperLower}}, - {0xA77D, 0xA77D, d{0, -35332, 0}}, - {0xA77E, 0xA787, d{UpperLower, UpperLower, UpperLower}}, - {0xA78B, 0xA78C, d{UpperLower, UpperLower, UpperLower}}, - {0xA78D, 0xA78D, d{0, -42280, 0}}, - {0xA790, 0xA793, d{UpperLower, UpperLower, UpperLower}}, - {0xA7A0, 0xA7A9, d{UpperLower, UpperLower, UpperLower}}, - {0xA7AA, 0xA7AA, d{0, -42308, 0}}, - {0xFF21, 0xFF3A, d{0, 32, 0}}, - {0xFF41, 0xFF5A, d{-32, 0, -32}}, - {0x10400, 0x10427, d{0, 40, 0}}, - {0x10428, 0x1044F, d{-40, 0, -40}}, -} -var properties = [MaxLatin1 + 1]uint8{ - 0x00: pC, // '\x00' - 0x01: pC, // '\x01' - 0x02: pC, // '\x02' - 0x03: pC, // '\x03' - 0x04: pC, // '\x04' - 0x05: pC, // '\x05' - 0x06: pC, // '\x06' - 0x07: pC, // '\a' - 0x08: pC, // '\b' - 0x09: pC, // '\t' - 0x0A: pC, // '\n' - 0x0B: pC, // '\v' - 0x0C: pC, // '\f' - 0x0D: pC, // '\r' - 0x0E: pC, // '\x0e' - 0x0F: pC, // '\x0f' - 0x10: pC, // '\x10' - 0x11: pC, // '\x11' - 0x12: pC, // '\x12' - 0x13: pC, // '\x13' - 0x14: pC, // '\x14' - 0x15: pC, // '\x15' - 0x16: pC, // '\x16' - 0x17: pC, // '\x17' - 0x18: pC, // '\x18' - 0x19: pC, // '\x19' - 0x1A: pC, // '\x1a' - 0x1B: pC, // '\x1b' - 0x1C: pC, // '\x1c' - 0x1D: pC, // '\x1d' - 0x1E: pC, // '\x1e' - 0x1F: pC, // '\x1f' - 0x20: pZ | pp, // ' ' - 0x21: pP | pp, // '!' - 0x22: pP | pp, // '"' - 0x23: pP | pp, // '#' - 0x24: pS | pp, // '$' - 0x25: pP | pp, // '%' - 0x26: pP | pp, // '&' - 0x27: pP | pp, // '\'' - 0x28: pP | pp, // '(' - 0x29: pP | pp, // ')' - 0x2A: pP | pp, // '*' - 0x2B: pS | pp, // '+' - 0x2C: pP | pp, // ',' - 0x2D: pP | pp, // '-' - 0x2E: pP | pp, // '.' - 0x2F: pP | pp, // '/' - 0x30: pN | pp, // '0' - 0x31: pN | pp, // '1' - 0x32: pN | pp, // '2' - 0x33: pN | pp, // '3' - 0x34: pN | pp, // '4' - 0x35: pN | pp, // '5' - 0x36: pN | pp, // '6' - 0x37: pN | pp, // '7' - 0x38: pN | pp, // '8' - 0x39: pN | pp, // '9' - 0x3A: pP | pp, // ':' - 0x3B: pP | pp, // ';' - 0x3C: pS | pp, // '<' - 0x3D: pS | pp, // '=' - 0x3E: pS | pp, // '>' - 0x3F: pP | pp, // '?' - 0x40: pP | pp, // '@' - 0x41: pLu | pp, // 'A' - 0x42: pLu | pp, // 'B' - 0x43: pLu | pp, // 'C' - 0x44: pLu | pp, // 'D' - 0x45: pLu | pp, // 'E' - 0x46: pLu | pp, // 'F' - 0x47: pLu | pp, // 'G' - 0x48: pLu | pp, // 'H' - 0x49: pLu | pp, // 'I' - 0x4A: pLu | pp, // 'J' - 0x4B: pLu | pp, // 'K' - 0x4C: pLu | pp, // 'L' - 0x4D: pLu | pp, // 'M' - 0x4E: pLu | pp, // 'N' - 0x4F: pLu | pp, // 'O' - 0x50: pLu | pp, // 'P' - 0x51: pLu | pp, // 'Q' - 0x52: pLu | pp, // 'R' - 0x53: pLu | pp, // 'S' - 0x54: pLu | pp, // 'T' - 0x55: pLu | pp, // 'U' - 0x56: pLu | pp, // 'V' - 0x57: pLu | pp, // 'W' - 0x58: pLu | pp, // 'X' - 0x59: pLu | pp, // 'Y' - 0x5A: pLu | pp, // 'Z' - 0x5B: pP | pp, // '[' - 0x5C: pP | pp, // '\\' - 0x5D: pP | pp, // ']' - 0x5E: pS | pp, // '^' - 0x5F: pP | pp, // '_' - 0x60: pS | pp, // '`' - 0x61: pLl | pp, // 'a' - 0x62: pLl | pp, // 'b' - 0x63: pLl | pp, // 'c' - 0x64: pLl | pp, // 'd' - 0x65: pLl | pp, // 'e' - 0x66: pLl | pp, // 'f' - 0x67: pLl | pp, // 'g' - 0x68: pLl | pp, // 'h' - 0x69: pLl | pp, // 'i' - 0x6A: pLl | pp, // 'j' - 0x6B: pLl | pp, // 'k' - 0x6C: pLl | pp, // 'l' - 0x6D: pLl | pp, // 'm' - 0x6E: pLl | pp, // 'n' - 0x6F: pLl | pp, // 'o' - 0x70: pLl | pp, // 'p' - 0x71: pLl | pp, // 'q' - 0x72: pLl | pp, // 'r' - 0x73: pLl | pp, // 's' - 0x74: pLl | pp, // 't' - 0x75: pLl | pp, // 'u' - 0x76: pLl | pp, // 'v' - 0x77: pLl | pp, // 'w' - 0x78: pLl | pp, // 'x' - 0x79: pLl | pp, // 'y' - 0x7A: pLl | pp, // 'z' - 0x7B: pP | pp, // '{' - 0x7C: pS | pp, // '|' - 0x7D: pP | pp, // '}' - 0x7E: pS | pp, // '~' - 0x7F: pC, // '\u007f' - 0x80: pC, // '\u0080' - 0x81: pC, // '\u0081' - 0x82: pC, // '\u0082' - 0x83: pC, // '\u0083' - 0x84: pC, // '\u0084' - 0x85: pC, // '\u0085' - 0x86: pC, // '\u0086' - 0x87: pC, // '\u0087' - 0x88: pC, // '\u0088' - 0x89: pC, // '\u0089' - 0x8A: pC, // '\u008a' - 0x8B: pC, // '\u008b' - 0x8C: pC, // '\u008c' - 0x8D: pC, // '\u008d' - 0x8E: pC, // '\u008e' - 0x8F: pC, // '\u008f' - 0x90: pC, // '\u0090' - 0x91: pC, // '\u0091' - 0x92: pC, // '\u0092' - 0x93: pC, // '\u0093' - 0x94: pC, // '\u0094' - 0x95: pC, // '\u0095' - 0x96: pC, // '\u0096' - 0x97: pC, // '\u0097' - 0x98: pC, // '\u0098' - 0x99: pC, // '\u0099' - 0x9A: pC, // '\u009a' - 0x9B: pC, // '\u009b' - 0x9C: pC, // '\u009c' - 0x9D: pC, // '\u009d' - 0x9E: pC, // '\u009e' - 0x9F: pC, // '\u009f' - 0xA0: pZ, // '\u00a0' - 0xA1: pP | pp, // '¡' - 0xA2: pS | pp, // '¢' - 0xA3: pS | pp, // '£' - 0xA4: pS | pp, // '¤' - 0xA5: pS | pp, // '¥' - 0xA6: pS | pp, // '¦' - 0xA7: pP | pp, // '§' - 0xA8: pS | pp, // '¨' - 0xA9: pS | pp, // '©' - 0xAA: pLo | pp, // 'ª' - 0xAB: pP | pp, // '«' - 0xAC: pS | pp, // '¬' - 0xAD: 0, // '\u00ad' - 0xAE: pS | pp, // '®' - 0xAF: pS | pp, // '¯' - 0xB0: pS | pp, // '°' - 0xB1: pS | pp, // '±' - 0xB2: pN | pp, // '²' - 0xB3: pN | pp, // '³' - 0xB4: pS | pp, // '´' - 0xB5: pLl | pp, // 'µ' - 0xB6: pP | pp, // '¶' - 0xB7: pP | pp, // '·' - 0xB8: pS | pp, // '¸' - 0xB9: pN | pp, // '¹' - 0xBA: pLo | pp, // 'º' - 0xBB: pP | pp, // '»' - 0xBC: pN | pp, // '¼' - 0xBD: pN | pp, // '½' - 0xBE: pN | pp, // '¾' - 0xBF: pP | pp, // '¿' - 0xC0: pLu | pp, // 'À' - 0xC1: pLu | pp, // 'Á' - 0xC2: pLu | pp, // 'Â' - 0xC3: pLu | pp, // 'Ã' - 0xC4: pLu | pp, // 'Ä' - 0xC5: pLu | pp, // 'Å' - 0xC6: pLu | pp, // 'Æ' - 0xC7: pLu | pp, // 'Ç' - 0xC8: pLu | pp, // 'È' - 0xC9: pLu | pp, // 'É' - 0xCA: pLu | pp, // 'Ê' - 0xCB: pLu | pp, // 'Ë' - 0xCC: pLu | pp, // 'Ì' - 0xCD: pLu | pp, // 'Í' - 0xCE: pLu | pp, // 'Î' - 0xCF: pLu | pp, // 'Ï' - 0xD0: pLu | pp, // 'Ð' - 0xD1: pLu | pp, // 'Ñ' - 0xD2: pLu | pp, // 'Ò' - 0xD3: pLu | pp, // 'Ó' - 0xD4: pLu | pp, // 'Ô' - 0xD5: pLu | pp, // 'Õ' - 0xD6: pLu | pp, // 'Ö' - 0xD7: pS | pp, // '×' - 0xD8: pLu | pp, // 'Ø' - 0xD9: pLu | pp, // 'Ù' - 0xDA: pLu | pp, // 'Ú' - 0xDB: pLu | pp, // 'Û' - 0xDC: pLu | pp, // 'Ü' - 0xDD: pLu | pp, // 'Ý' - 0xDE: pLu | pp, // 'Þ' - 0xDF: pLl | pp, // 'ß' - 0xE0: pLl | pp, // 'à' - 0xE1: pLl | pp, // 'á' - 0xE2: pLl | pp, // 'â' - 0xE3: pLl | pp, // 'ã' - 0xE4: pLl | pp, // 'ä' - 0xE5: pLl | pp, // 'å' - 0xE6: pLl | pp, // 'æ' - 0xE7: pLl | pp, // 'ç' - 0xE8: pLl | pp, // 'è' - 0xE9: pLl | pp, // 'é' - 0xEA: pLl | pp, // 'ê' - 0xEB: pLl | pp, // 'ë' - 0xEC: pLl | pp, // 'ì' - 0xED: pLl | pp, // 'í' - 0xEE: pLl | pp, // 'î' - 0xEF: pLl | pp, // 'ï' - 0xF0: pLl | pp, // 'ð' - 0xF1: pLl | pp, // 'ñ' - 0xF2: pLl | pp, // 'ò' - 0xF3: pLl | pp, // 'ó' - 0xF4: pLl | pp, // 'ô' - 0xF5: pLl | pp, // 'õ' - 0xF6: pLl | pp, // 'ö' - 0xF7: pS | pp, // '÷' - 0xF8: pLl | pp, // 'ø' - 0xF9: pLl | pp, // 'ù' - 0xFA: pLl | pp, // 'ú' - 0xFB: pLl | pp, // 'û' - 0xFC: pLl | pp, // 'ü' - 0xFD: pLl | pp, // 'ý' - 0xFE: pLl | pp, // 'þ' - 0xFF: pLl | pp, // 'ÿ' -} - -var caseOrbit = []foldPair{ - {0x004B, 0x006B}, - {0x0053, 0x0073}, - {0x006B, 0x212A}, - {0x0073, 0x017F}, - {0x00B5, 0x039C}, - {0x00C5, 0x00E5}, - {0x00DF, 0x1E9E}, - {0x00E5, 0x212B}, - {0x0130, 0x0130}, - {0x0131, 0x0131}, - {0x017F, 0x0053}, - {0x01C4, 0x01C5}, - {0x01C5, 0x01C6}, - {0x01C6, 0x01C4}, - {0x01C7, 0x01C8}, - {0x01C8, 0x01C9}, - {0x01C9, 0x01C7}, - {0x01CA, 0x01CB}, - {0x01CB, 0x01CC}, - {0x01CC, 0x01CA}, - {0x01F1, 0x01F2}, - {0x01F2, 0x01F3}, - {0x01F3, 0x01F1}, - {0x0345, 0x0399}, - {0x0392, 0x03B2}, - {0x0395, 0x03B5}, - {0x0398, 0x03B8}, - {0x0399, 0x03B9}, - {0x039A, 0x03BA}, - {0x039C, 0x03BC}, - {0x03A0, 0x03C0}, - {0x03A1, 0x03C1}, - {0x03A3, 0x03C2}, - {0x03A6, 0x03C6}, - {0x03A9, 0x03C9}, - {0x03B2, 0x03D0}, - {0x03B5, 0x03F5}, - {0x03B8, 0x03D1}, - {0x03B9, 0x1FBE}, - {0x03BA, 0x03F0}, - {0x03BC, 0x00B5}, - {0x03C0, 0x03D6}, - {0x03C1, 0x03F1}, - {0x03C2, 0x03C3}, - {0x03C3, 0x03A3}, - {0x03C6, 0x03D5}, - {0x03C9, 0x2126}, - {0x03D0, 0x0392}, - {0x03D1, 0x03F4}, - {0x03D5, 0x03A6}, - {0x03D6, 0x03A0}, - {0x03F0, 0x039A}, - {0x03F1, 0x03A1}, - {0x03F4, 0x0398}, - {0x03F5, 0x0395}, - {0x1E60, 0x1E61}, - {0x1E61, 0x1E9B}, - {0x1E9B, 0x1E60}, - {0x1E9E, 0x00DF}, - {0x1FBE, 0x0345}, - {0x2126, 0x03A9}, - {0x212A, 0x004B}, - {0x212B, 0x00C5}, -} - -// FoldCategory maps a category name to a table of -// code points outside the category that are equivalent under -// simple case folding to code points inside the category. -// If there is no entry for a category name, there are no such points. -var FoldCategory = map[string]*RangeTable{ - "Common": foldCommon, - "Greek": foldGreek, - "Inherited": foldInherited, - "L": foldL, - "Ll": foldLl, - "Lt": foldLt, - "Lu": foldLu, - "M": foldM, - "Mn": foldMn, -} - -var foldCommon = &RangeTable{ - R16: []Range16{ - {0x039c, 0x03bc, 32}, - }, -} - -var foldGreek = &RangeTable{ - R16: []Range16{ - {0x00b5, 0x0345, 656}, - }, -} - -var foldInherited = &RangeTable{ - R16: []Range16{ - {0x0399, 0x03b9, 32}, - {0x1fbe, 0x1fbe, 1}, - }, -} - -var foldL = &RangeTable{ - R16: []Range16{ - {0x0345, 0x0345, 1}, - }, -} - -var foldLl = &RangeTable{ - R16: []Range16{ - {0x0041, 0x005a, 1}, - {0x00c0, 0x00d6, 1}, - {0x00d8, 0x00de, 1}, - {0x0100, 0x012e, 2}, - {0x0132, 0x0136, 2}, - {0x0139, 0x0147, 2}, - {0x014a, 0x0178, 2}, - {0x0179, 0x017d, 2}, - {0x0181, 0x0182, 1}, - {0x0184, 0x0186, 2}, - {0x0187, 0x0189, 2}, - {0x018a, 0x018b, 1}, - {0x018e, 0x0191, 1}, - {0x0193, 0x0194, 1}, - {0x0196, 0x0198, 1}, - {0x019c, 0x019d, 1}, - {0x019f, 0x01a0, 1}, - {0x01a2, 0x01a6, 2}, - {0x01a7, 0x01a9, 2}, - {0x01ac, 0x01ae, 2}, - {0x01af, 0x01b1, 2}, - {0x01b2, 0x01b3, 1}, - {0x01b5, 0x01b7, 2}, - {0x01b8, 0x01bc, 4}, - {0x01c4, 0x01c5, 1}, - {0x01c7, 0x01c8, 1}, - {0x01ca, 0x01cb, 1}, - {0x01cd, 0x01db, 2}, - {0x01de, 0x01ee, 2}, - {0x01f1, 0x01f2, 1}, - {0x01f4, 0x01f6, 2}, - {0x01f7, 0x01f8, 1}, - {0x01fa, 0x0232, 2}, - {0x023a, 0x023b, 1}, - {0x023d, 0x023e, 1}, - {0x0241, 0x0243, 2}, - {0x0244, 0x0246, 1}, - {0x0248, 0x024e, 2}, - {0x0345, 0x0370, 43}, - {0x0372, 0x0376, 4}, - {0x0386, 0x0388, 2}, - {0x0389, 0x038a, 1}, - {0x038c, 0x038e, 2}, - {0x038f, 0x0391, 2}, - {0x0392, 0x03a1, 1}, - {0x03a3, 0x03ab, 1}, - {0x03cf, 0x03d8, 9}, - {0x03da, 0x03ee, 2}, - {0x03f4, 0x03f7, 3}, - {0x03f9, 0x03fa, 1}, - {0x03fd, 0x042f, 1}, - {0x0460, 0x0480, 2}, - {0x048a, 0x04c0, 2}, - {0x04c1, 0x04cd, 2}, - {0x04d0, 0x0526, 2}, - {0x0531, 0x0556, 1}, - {0x10a0, 0x10c5, 1}, - {0x10c7, 0x10cd, 6}, - {0x1e00, 0x1e94, 2}, - {0x1e9e, 0x1efe, 2}, - {0x1f08, 0x1f0f, 1}, - {0x1f18, 0x1f1d, 1}, - {0x1f28, 0x1f2f, 1}, - {0x1f38, 0x1f3f, 1}, - {0x1f48, 0x1f4d, 1}, - {0x1f59, 0x1f5f, 2}, - {0x1f68, 0x1f6f, 1}, - {0x1f88, 0x1f8f, 1}, - {0x1f98, 0x1f9f, 1}, - {0x1fa8, 0x1faf, 1}, - {0x1fb8, 0x1fbc, 1}, - {0x1fc8, 0x1fcc, 1}, - {0x1fd8, 0x1fdb, 1}, - {0x1fe8, 0x1fec, 1}, - {0x1ff8, 0x1ffc, 1}, - {0x2126, 0x212a, 4}, - {0x212b, 0x2132, 7}, - {0x2183, 0x2c00, 2685}, - {0x2c01, 0x2c2e, 1}, - {0x2c60, 0x2c62, 2}, - {0x2c63, 0x2c64, 1}, - {0x2c67, 0x2c6d, 2}, - {0x2c6e, 0x2c70, 1}, - {0x2c72, 0x2c75, 3}, - {0x2c7e, 0x2c80, 1}, - {0x2c82, 0x2ce2, 2}, - {0x2ceb, 0x2ced, 2}, - {0x2cf2, 0xa640, 31054}, - {0xa642, 0xa66c, 2}, - {0xa680, 0xa696, 2}, - {0xa722, 0xa72e, 2}, - {0xa732, 0xa76e, 2}, - {0xa779, 0xa77d, 2}, - {0xa77e, 0xa786, 2}, - {0xa78b, 0xa78d, 2}, - {0xa790, 0xa792, 2}, - {0xa7a0, 0xa7aa, 2}, - {0xff21, 0xff3a, 1}, - }, - R32: []Range32{ - {0x10400, 0x10427, 1}, - }, - LatinOffset: 3, -} - -var foldLt = &RangeTable{ - R16: []Range16{ - {0x01c4, 0x01c6, 2}, - {0x01c7, 0x01c9, 2}, - {0x01ca, 0x01cc, 2}, - {0x01f1, 0x01f3, 2}, - {0x1f80, 0x1f87, 1}, - {0x1f90, 0x1f97, 1}, - {0x1fa0, 0x1fa7, 1}, - {0x1fb3, 0x1fc3, 16}, - {0x1ff3, 0x1ff3, 1}, - }, -} - -var foldLu = &RangeTable{ - R16: []Range16{ - {0x0061, 0x007a, 1}, - {0x00b5, 0x00df, 42}, - {0x00e0, 0x00f6, 1}, - {0x00f8, 0x00ff, 1}, - {0x0101, 0x012f, 2}, - {0x0133, 0x0137, 2}, - {0x013a, 0x0148, 2}, - {0x014b, 0x0177, 2}, - {0x017a, 0x017e, 2}, - {0x017f, 0x0180, 1}, - {0x0183, 0x0185, 2}, - {0x0188, 0x018c, 4}, - {0x0192, 0x0195, 3}, - {0x0199, 0x019a, 1}, - {0x019e, 0x01a1, 3}, - {0x01a3, 0x01a5, 2}, - {0x01a8, 0x01ad, 5}, - {0x01b0, 0x01b4, 4}, - {0x01b6, 0x01b9, 3}, - {0x01bd, 0x01bf, 2}, - {0x01c5, 0x01c6, 1}, - {0x01c8, 0x01c9, 1}, - {0x01cb, 0x01cc, 1}, - {0x01ce, 0x01dc, 2}, - {0x01dd, 0x01ef, 2}, - {0x01f2, 0x01f3, 1}, - {0x01f5, 0x01f9, 4}, - {0x01fb, 0x021f, 2}, - {0x0223, 0x0233, 2}, - {0x023c, 0x023f, 3}, - {0x0240, 0x0242, 2}, - {0x0247, 0x024f, 2}, - {0x0250, 0x0254, 1}, - {0x0256, 0x0257, 1}, - {0x0259, 0x025b, 2}, - {0x0260, 0x0263, 3}, - {0x0265, 0x0266, 1}, - {0x0268, 0x0269, 1}, - {0x026b, 0x026f, 4}, - {0x0271, 0x0272, 1}, - {0x0275, 0x027d, 8}, - {0x0280, 0x0283, 3}, - {0x0288, 0x028c, 1}, - {0x0292, 0x0345, 179}, - {0x0371, 0x0373, 2}, - {0x0377, 0x037b, 4}, - {0x037c, 0x037d, 1}, - {0x03ac, 0x03af, 1}, - {0x03b1, 0x03ce, 1}, - {0x03d0, 0x03d1, 1}, - {0x03d5, 0x03d7, 1}, - {0x03d9, 0x03ef, 2}, - {0x03f0, 0x03f2, 1}, - {0x03f5, 0x03fb, 3}, - {0x0430, 0x045f, 1}, - {0x0461, 0x0481, 2}, - {0x048b, 0x04bf, 2}, - {0x04c2, 0x04ce, 2}, - {0x04cf, 0x0527, 2}, - {0x0561, 0x0586, 1}, - {0x1d79, 0x1d7d, 4}, - {0x1e01, 0x1e95, 2}, - {0x1e9b, 0x1ea1, 6}, - {0x1ea3, 0x1eff, 2}, - {0x1f00, 0x1f07, 1}, - {0x1f10, 0x1f15, 1}, - {0x1f20, 0x1f27, 1}, - {0x1f30, 0x1f37, 1}, - {0x1f40, 0x1f45, 1}, - {0x1f51, 0x1f57, 2}, - {0x1f60, 0x1f67, 1}, - {0x1f70, 0x1f7d, 1}, - {0x1fb0, 0x1fb1, 1}, - {0x1fbe, 0x1fd0, 18}, - {0x1fd1, 0x1fe0, 15}, - {0x1fe1, 0x1fe5, 4}, - {0x214e, 0x2184, 54}, - {0x2c30, 0x2c5e, 1}, - {0x2c61, 0x2c65, 4}, - {0x2c66, 0x2c6c, 2}, - {0x2c73, 0x2c76, 3}, - {0x2c81, 0x2ce3, 2}, - {0x2cec, 0x2cee, 2}, - {0x2cf3, 0x2d00, 13}, - {0x2d01, 0x2d25, 1}, - {0x2d27, 0x2d2d, 6}, - {0xa641, 0xa66d, 2}, - {0xa681, 0xa697, 2}, - {0xa723, 0xa72f, 2}, - {0xa733, 0xa76f, 2}, - {0xa77a, 0xa77c, 2}, - {0xa77f, 0xa787, 2}, - {0xa78c, 0xa791, 5}, - {0xa793, 0xa7a1, 14}, - {0xa7a3, 0xa7a9, 2}, - {0xff41, 0xff5a, 1}, - }, - R32: []Range32{ - {0x10428, 0x1044f, 1}, - }, - LatinOffset: 4, -} - -var foldM = &RangeTable{ - R16: []Range16{ - {0x0399, 0x03b9, 32}, - {0x1fbe, 0x1fbe, 1}, - }, -} - -var foldMn = &RangeTable{ - R16: []Range16{ - {0x0399, 0x03b9, 32}, - {0x1fbe, 0x1fbe, 1}, - }, -} - -// FoldScript maps a script name to a table of -// code points outside the script that are equivalent under -// simple case folding to code points inside the script. -// If there is no entry for a script name, there are no such points. -var FoldScript = map[string]*RangeTable{} - -// Range entries: 3471 16-bit, 832 32-bit, 4303 total. -// Range bytes: 20826 16-bit, 9984 32-bit, 30810 total. - -// Fold orbit bytes: 63 pairs, 252 bytes diff --git a/src/pkg/unicode/utf16/export_test.go b/src/pkg/unicode/utf16/export_test.go deleted file mode 100644 index 306247e48..000000000 --- a/src/pkg/unicode/utf16/export_test.go +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright 2012 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. - -package utf16 - -// Extra names for constants so we can validate them during testing. -const ( - MaxRune = maxRune - ReplacementChar = replacementChar -) diff --git a/src/pkg/unicode/utf16/utf16.go b/src/pkg/unicode/utf16/utf16.go deleted file mode 100644 index c0e47c535..000000000 --- a/src/pkg/unicode/utf16/utf16.go +++ /dev/null @@ -1,108 +0,0 @@ -// Copyright 2010 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. - -// Package utf16 implements encoding and decoding of UTF-16 sequences. -package utf16 - -// The conditions replacementChar==unicode.ReplacementChar and -// maxRune==unicode.MaxRune are verified in the tests. -// Defining them locally avoids this package depending on package unicode. - -const ( - replacementChar = '\uFFFD' // Unicode replacement character - maxRune = '\U0010FFFF' // Maximum valid Unicode code point. -) - -const ( - // 0xd800-0xdc00 encodes the high 10 bits of a pair. - // 0xdc00-0xe000 encodes the low 10 bits of a pair. - // the value is those 20 bits plus 0x10000. - surr1 = 0xd800 - surr2 = 0xdc00 - surr3 = 0xe000 - - surrSelf = 0x10000 -) - -// IsSurrogate returns true if the specified Unicode code point -// can appear in a surrogate pair. -func IsSurrogate(r rune) bool { - return surr1 <= r && r < surr3 -} - -// DecodeRune returns the UTF-16 decoding of a surrogate pair. -// If the pair is not a valid UTF-16 surrogate pair, DecodeRune returns -// the Unicode replacement code point U+FFFD. -func DecodeRune(r1, r2 rune) rune { - if surr1 <= r1 && r1 < surr2 && surr2 <= r2 && r2 < surr3 { - return (r1-surr1)<<10 | (r2 - surr2) + 0x10000 - } - return replacementChar -} - -// EncodeRune returns the UTF-16 surrogate pair r1, r2 for the given rune. -// If the rune is not a valid Unicode code point or does not need encoding, -// EncodeRune returns U+FFFD, U+FFFD. -func EncodeRune(r rune) (r1, r2 rune) { - if r < surrSelf || r > maxRune || IsSurrogate(r) { - return replacementChar, replacementChar - } - r -= surrSelf - return surr1 + (r>>10)&0x3ff, surr2 + r&0x3ff -} - -// Encode returns the UTF-16 encoding of the Unicode code point sequence s. -func Encode(s []rune) []uint16 { - n := len(s) - for _, v := range s { - if v >= surrSelf { - n++ - } - } - - a := make([]uint16, n) - n = 0 - for _, v := range s { - switch { - case v < 0, surr1 <= v && v < surr3, v > maxRune: - v = replacementChar - fallthrough - case v < surrSelf: - a[n] = uint16(v) - n++ - default: - r1, r2 := EncodeRune(v) - a[n] = uint16(r1) - a[n+1] = uint16(r2) - n += 2 - } - } - return a[0:n] -} - -// Decode returns the Unicode code point sequence represented -// by the UTF-16 encoding s. -func Decode(s []uint16) []rune { - a := make([]rune, len(s)) - n := 0 - for i := 0; i < len(s); i++ { - switch r := s[i]; { - case surr1 <= r && r < surr2 && i+1 < len(s) && - surr2 <= s[i+1] && s[i+1] < surr3: - // valid surrogate sequence - a[n] = DecodeRune(rune(r), rune(s[i+1])) - i++ - n++ - case surr1 <= r && r < surr3: - // invalid surrogate sequence - a[n] = replacementChar - n++ - default: - // normal rune - a[n] = rune(r) - n++ - } - } - return a[0:n] -} diff --git a/src/pkg/unicode/utf16/utf16_test.go b/src/pkg/unicode/utf16/utf16_test.go deleted file mode 100644 index 3dca472bb..000000000 --- a/src/pkg/unicode/utf16/utf16_test.go +++ /dev/null @@ -1,149 +0,0 @@ -// Copyright 2010 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. - -package utf16_test - -import ( - "reflect" - "testing" - "unicode" - . "unicode/utf16" -) - -// Validate the constants redefined from unicode. -func TestConstants(t *testing.T) { - if MaxRune != unicode.MaxRune { - t.Errorf("utf16.maxRune is wrong: %x should be %x", MaxRune, unicode.MaxRune) - } - if ReplacementChar != unicode.ReplacementChar { - t.Errorf("utf16.replacementChar is wrong: %x should be %x", ReplacementChar, unicode.ReplacementChar) - } -} - -type encodeTest struct { - in []rune - out []uint16 -} - -var encodeTests = []encodeTest{ - {[]rune{1, 2, 3, 4}, []uint16{1, 2, 3, 4}}, - {[]rune{0xffff, 0x10000, 0x10001, 0x12345, 0x10ffff}, - []uint16{0xffff, 0xd800, 0xdc00, 0xd800, 0xdc01, 0xd808, 0xdf45, 0xdbff, 0xdfff}}, - {[]rune{'a', 'b', 0xd7ff, 0xd800, 0xdfff, 0xe000, 0x110000, -1}, - []uint16{'a', 'b', 0xd7ff, 0xfffd, 0xfffd, 0xe000, 0xfffd, 0xfffd}}, -} - -func TestEncode(t *testing.T) { - for _, tt := range encodeTests { - out := Encode(tt.in) - if !reflect.DeepEqual(out, tt.out) { - t.Errorf("Encode(%x) = %x; want %x", tt.in, out, tt.out) - } - } -} - -func TestEncodeRune(t *testing.T) { - for i, tt := range encodeTests { - j := 0 - for _, r := range tt.in { - r1, r2 := EncodeRune(r) - if r < 0x10000 || r > unicode.MaxRune { - if j >= len(tt.out) { - t.Errorf("#%d: ran out of tt.out", i) - break - } - if r1 != unicode.ReplacementChar || r2 != unicode.ReplacementChar { - t.Errorf("EncodeRune(%#x) = %#x, %#x; want 0xfffd, 0xfffd", r, r1, r2) - } - j++ - } else { - if j+1 >= len(tt.out) { - t.Errorf("#%d: ran out of tt.out", i) - break - } - if r1 != rune(tt.out[j]) || r2 != rune(tt.out[j+1]) { - t.Errorf("EncodeRune(%#x) = %#x, %#x; want %#x, %#x", r, r1, r2, tt.out[j], tt.out[j+1]) - } - j += 2 - dec := DecodeRune(r1, r2) - if dec != r { - t.Errorf("DecodeRune(%#x, %#x) = %#x; want %#x", r1, r2, dec, r) - } - } - } - if j != len(tt.out) { - t.Errorf("#%d: EncodeRune didn't generate enough output", i) - } - } -} - -type decodeTest struct { - in []uint16 - out []rune -} - -var decodeTests = []decodeTest{ - {[]uint16{1, 2, 3, 4}, []rune{1, 2, 3, 4}}, - {[]uint16{0xffff, 0xd800, 0xdc00, 0xd800, 0xdc01, 0xd808, 0xdf45, 0xdbff, 0xdfff}, - []rune{0xffff, 0x10000, 0x10001, 0x12345, 0x10ffff}}, - {[]uint16{0xd800, 'a'}, []rune{0xfffd, 'a'}}, - {[]uint16{0xdfff}, []rune{0xfffd}}, -} - -func TestDecode(t *testing.T) { - for _, tt := range decodeTests { - out := Decode(tt.in) - if !reflect.DeepEqual(out, tt.out) { - t.Errorf("Decode(%x) = %x; want %x", tt.in, out, tt.out) - } - } -} - -var decodeRuneTests = []struct { - r1, r2 rune - want rune -}{ - {0xd800, 0xdc00, 0x10000}, - {0xd800, 0xdc01, 0x10001}, - {0xd808, 0xdf45, 0x12345}, - {0xdbff, 0xdfff, 0x10ffff}, - {0xd800, 'a', 0xfffd}, // illegal, replacement rune substituted -} - -func TestDecodeRune(t *testing.T) { - for i, tt := range decodeRuneTests { - got := DecodeRune(tt.r1, tt.r2) - if got != tt.want { - t.Errorf("%d: DecodeRune(%q, %q) = %v; want %v", i, tt.r1, tt.r2, got, tt.want) - } - } -} - -var surrogateTests = []struct { - r rune - want bool -}{ - // from http://en.wikipedia.org/wiki/UTF-16 - {'\u007A', false}, // LATIN SMALL LETTER Z - {'\u6C34', false}, // CJK UNIFIED IDEOGRAPH-6C34 (water) - {'\uFEFF', false}, // Byte Order Mark - {'\U00010000', false}, // LINEAR B SYLLABLE B008 A (first non-BMP code point) - {'\U0001D11E', false}, // MUSICAL SYMBOL G CLEF - {'\U0010FFFD', false}, // PRIVATE USE CHARACTER-10FFFD (last Unicode code point) - - {rune(0xd7ff), false}, // surr1-1 - {rune(0xd800), true}, // surr1 - {rune(0xdc00), true}, // surr2 - {rune(0xe000), false}, // surr3 - {rune(0xdfff), true}, // surr3-1 -} - -func TestIsSurrogate(t *testing.T) { - for i, tt := range surrogateTests { - got := IsSurrogate(tt.r) - if got != tt.want { - t.Errorf("%d: IsSurrogate(%q) = %v; want %v", i, tt.r, got, tt.want) - } - } -} diff --git a/src/pkg/unicode/utf8/example_test.go b/src/pkg/unicode/utf8/example_test.go deleted file mode 100644 index 7b3e7ac74..000000000 --- a/src/pkg/unicode/utf8/example_test.go +++ /dev/null @@ -1,196 +0,0 @@ -// Copyright 2013 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. - -package utf8_test - -import ( - "fmt" - "unicode/utf8" -) - -func ExampleDecodeLastRune() { - b := []byte("Hello, 世界") - - for len(b) > 0 { - r, size := utf8.DecodeLastRune(b) - fmt.Printf("%c %v\n", r, size) - - b = b[:len(b)-size] - } - // Output: - // 界 3 - // 世 3 - // 1 - // , 1 - // o 1 - // l 1 - // l 1 - // e 1 - // H 1 -} - -func ExampleDecodeLastRuneInString() { - str := "Hello, 世界" - - for len(str) > 0 { - r, size := utf8.DecodeLastRuneInString(str) - fmt.Printf("%c %v\n", r, size) - - str = str[:len(str)-size] - } - // Output: - // 界 3 - // 世 3 - // 1 - // , 1 - // o 1 - // l 1 - // l 1 - // e 1 - // H 1 - -} - -func ExampleDecodeRune() { - b := []byte("Hello, 世界") - - for len(b) > 0 { - r, size := utf8.DecodeRune(b) - fmt.Printf("%c %v\n", r, size) - - b = b[size:] - } - // Output: - // H 1 - // e 1 - // l 1 - // l 1 - // o 1 - // , 1 - // 1 - // 世 3 - // 界 3 -} - -func ExampleDecodeRuneInString() { - str := "Hello, 世界" - - for len(str) > 0 { - r, size := utf8.DecodeRuneInString(str) - fmt.Printf("%c %v\n", r, size) - - str = str[size:] - } - // Output: - // H 1 - // e 1 - // l 1 - // l 1 - // o 1 - // , 1 - // 1 - // 世 3 - // 界 3 -} - -func ExampleEncodeRune() { - r := '世' - buf := make([]byte, 3) - - n := utf8.EncodeRune(buf, r) - - fmt.Println(buf) - fmt.Println(n) - // Output: - // [228 184 150] - // 3 -} - -func ExampleFullRune() { - buf := []byte{228, 184, 150} // 世 - fmt.Println(utf8.FullRune(buf)) - fmt.Println(utf8.FullRune(buf[:2])) - // Output: - // true - // false -} - -func ExampleFullRuneInString() { - str := "世" - fmt.Println(utf8.FullRuneInString(str)) - fmt.Println(utf8.FullRuneInString(str[:2])) - // Output: - // true - // false -} - -func ExampleRuneCount() { - buf := []byte("Hello, 世界") - fmt.Println("bytes =", len(buf)) - fmt.Println("runes =", utf8.RuneCount(buf)) - // Output: - // bytes = 13 - // runes = 9 -} - -func ExampleRuneCountInString() { - str := "Hello, 世界" - fmt.Println("bytes =", len(str)) - fmt.Println("runes =", utf8.RuneCountInString(str)) - // Output: - // bytes = 13 - // runes = 9 -} - -func ExampleRuneLen() { - fmt.Println(utf8.RuneLen('a')) - fmt.Println(utf8.RuneLen('界')) - // Output: - // 1 - // 3 -} - -func ExampleRuneStart() { - buf := []byte("a界") - fmt.Println(utf8.RuneStart(buf[0])) - fmt.Println(utf8.RuneStart(buf[1])) - fmt.Println(utf8.RuneStart(buf[2])) - // Output: - // true - // true - // false -} - -func ExampleValid() { - valid := []byte("Hello, 世界") - invalid := []byte{0xff, 0xfe, 0xfd} - - fmt.Println(utf8.Valid(valid)) - fmt.Println(utf8.Valid(invalid)) - // Output: - // true - // false -} - -func ExampleValidRune() { - valid := 'a' - invalid := rune(0xfffffff) - - fmt.Println(utf8.ValidRune(valid)) - fmt.Println(utf8.ValidRune(invalid)) - // Output: - // true - // false -} - -func ExampleValidString() { - valid := "Hello, 世界" - invalid := string([]byte{0xff, 0xfe, 0xfd}) - - fmt.Println(utf8.ValidString(valid)) - fmt.Println(utf8.ValidString(invalid)) - // Output: - // true - // false -} diff --git a/src/pkg/unicode/utf8/utf8.go b/src/pkg/unicode/utf8/utf8.go deleted file mode 100644 index 0dc859a04..000000000 --- a/src/pkg/unicode/utf8/utf8.go +++ /dev/null @@ -1,435 +0,0 @@ -// Copyright 2009 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. - -// Package utf8 implements functions and constants to support text encoded in -// UTF-8. It includes functions to translate between runes and UTF-8 byte sequences. -package utf8 - -// The conditions RuneError==unicode.ReplacementChar and -// MaxRune==unicode.MaxRune are verified in the tests. -// Defining them locally avoids this package depending on package unicode. - -// Numbers fundamental to the encoding. -const ( - RuneError = '\uFFFD' // the "error" Rune or "Unicode replacement character" - RuneSelf = 0x80 // characters below Runeself are represented as themselves in a single byte. - MaxRune = '\U0010FFFF' // Maximum valid Unicode code point. - UTFMax = 4 // maximum number of bytes of a UTF-8 encoded Unicode character. -) - -// Code points in the surrogate range are not valid for UTF-8. -const ( - surrogateMin = 0xD800 - surrogateMax = 0xDFFF -) - -const ( - t1 = 0x00 // 0000 0000 - tx = 0x80 // 1000 0000 - t2 = 0xC0 // 1100 0000 - t3 = 0xE0 // 1110 0000 - t4 = 0xF0 // 1111 0000 - t5 = 0xF8 // 1111 1000 - - maskx = 0x3F // 0011 1111 - mask2 = 0x1F // 0001 1111 - mask3 = 0x0F // 0000 1111 - mask4 = 0x07 // 0000 0111 - - rune1Max = 1<<7 - 1 - rune2Max = 1<<11 - 1 - rune3Max = 1<<16 - 1 -) - -func decodeRuneInternal(p []byte) (r rune, size int, short bool) { - n := len(p) - if n < 1 { - return RuneError, 0, true - } - c0 := p[0] - - // 1-byte, 7-bit sequence? - if c0 < tx { - return rune(c0), 1, false - } - - // unexpected continuation byte? - if c0 < t2 { - return RuneError, 1, false - } - - // need first continuation byte - if n < 2 { - return RuneError, 1, true - } - c1 := p[1] - if c1 < tx || t2 <= c1 { - return RuneError, 1, false - } - - // 2-byte, 11-bit sequence? - if c0 < t3 { - r = rune(c0&mask2)<<6 | rune(c1&maskx) - if r <= rune1Max { - return RuneError, 1, false - } - return r, 2, false - } - - // need second continuation byte - if n < 3 { - return RuneError, 1, true - } - c2 := p[2] - if c2 < tx || t2 <= c2 { - return RuneError, 1, false - } - - // 3-byte, 16-bit sequence? - if c0 < t4 { - r = rune(c0&mask3)<<12 | rune(c1&maskx)<<6 | rune(c2&maskx) - if r <= rune2Max { - return RuneError, 1, false - } - if surrogateMin <= r && r <= surrogateMax { - return RuneError, 1, false - } - return r, 3, false - } - - // need third continuation byte - if n < 4 { - return RuneError, 1, true - } - c3 := p[3] - if c3 < tx || t2 <= c3 { - return RuneError, 1, false - } - - // 4-byte, 21-bit sequence? - if c0 < t5 { - r = rune(c0&mask4)<<18 | rune(c1&maskx)<<12 | rune(c2&maskx)<<6 | rune(c3&maskx) - if r <= rune3Max || MaxRune < r { - return RuneError, 1, false - } - return r, 4, false - } - - // error - return RuneError, 1, false -} - -func decodeRuneInStringInternal(s string) (r rune, size int, short bool) { - n := len(s) - if n < 1 { - return RuneError, 0, true - } - c0 := s[0] - - // 1-byte, 7-bit sequence? - if c0 < tx { - return rune(c0), 1, false - } - - // unexpected continuation byte? - if c0 < t2 { - return RuneError, 1, false - } - - // need first continuation byte - if n < 2 { - return RuneError, 1, true - } - c1 := s[1] - if c1 < tx || t2 <= c1 { - return RuneError, 1, false - } - - // 2-byte, 11-bit sequence? - if c0 < t3 { - r = rune(c0&mask2)<<6 | rune(c1&maskx) - if r <= rune1Max { - return RuneError, 1, false - } - return r, 2, false - } - - // need second continuation byte - if n < 3 { - return RuneError, 1, true - } - c2 := s[2] - if c2 < tx || t2 <= c2 { - return RuneError, 1, false - } - - // 3-byte, 16-bit sequence? - if c0 < t4 { - r = rune(c0&mask3)<<12 | rune(c1&maskx)<<6 | rune(c2&maskx) - if r <= rune2Max { - return RuneError, 1, false - } - if surrogateMin <= r && r <= surrogateMax { - return RuneError, 1, false - } - return r, 3, false - } - - // need third continuation byte - if n < 4 { - return RuneError, 1, true - } - c3 := s[3] - if c3 < tx || t2 <= c3 { - return RuneError, 1, false - } - - // 4-byte, 21-bit sequence? - if c0 < t5 { - r = rune(c0&mask4)<<18 | rune(c1&maskx)<<12 | rune(c2&maskx)<<6 | rune(c3&maskx) - if r <= rune3Max || MaxRune < r { - return RuneError, 1, false - } - return r, 4, false - } - - // error - return RuneError, 1, false -} - -// FullRune reports whether the bytes in p begin with a full UTF-8 encoding of a rune. -// An invalid encoding is considered a full Rune since it will convert as a width-1 error rune. -func FullRune(p []byte) bool { - _, _, short := decodeRuneInternal(p) - return !short -} - -// FullRuneInString is like FullRune but its input is a string. -func FullRuneInString(s string) bool { - _, _, short := decodeRuneInStringInternal(s) - return !short -} - -// DecodeRune unpacks the first UTF-8 encoding in p and returns the rune and its width in bytes. -// If the encoding is invalid, it returns (RuneError, 1), an impossible result for correct UTF-8. -// An encoding is invalid if it is incorrect UTF-8, encodes a rune that is -// out of range, or is not the shortest possible UTF-8 encoding for the -// value. No other validation is performed. -func DecodeRune(p []byte) (r rune, size int) { - r, size, _ = decodeRuneInternal(p) - return -} - -// DecodeRuneInString is like DecodeRune but its input is a string. -// If the encoding is invalid, it returns (RuneError, 1), an impossible result for correct UTF-8. -// An encoding is invalid if it is incorrect UTF-8, encodes a rune that is -// out of range, or is not the shortest possible UTF-8 encoding for the -// value. No other validation is performed. -func DecodeRuneInString(s string) (r rune, size int) { - r, size, _ = decodeRuneInStringInternal(s) - return -} - -// DecodeLastRune unpacks the last UTF-8 encoding in p and returns the rune and its width in bytes. -// If the encoding is invalid, it returns (RuneError, 1), an impossible result for correct UTF-8. -// An encoding is invalid if it is incorrect UTF-8, encodes a rune that is -// out of range, or is not the shortest possible UTF-8 encoding for the -// value. No other validation is performed. -func DecodeLastRune(p []byte) (r rune, size int) { - end := len(p) - if end == 0 { - return RuneError, 0 - } - start := end - 1 - r = rune(p[start]) - if r < RuneSelf { - return r, 1 - } - // guard against O(n^2) behavior when traversing - // backwards through strings with long sequences of - // invalid UTF-8. - lim := end - UTFMax - if lim < 0 { - lim = 0 - } - for start--; start >= lim; start-- { - if RuneStart(p[start]) { - break - } - } - if start < 0 { - start = 0 - } - r, size = DecodeRune(p[start:end]) - if start+size != end { - return RuneError, 1 - } - return r, size -} - -// DecodeLastRuneInString is like DecodeLastRune but its input is a string. -// If the encoding is invalid, it returns (RuneError, 1), an impossible result for correct UTF-8. -// An encoding is invalid if it is incorrect UTF-8, encodes a rune that is -// out of range, or is not the shortest possible UTF-8 encoding for the -// value. No other validation is performed. -func DecodeLastRuneInString(s string) (r rune, size int) { - end := len(s) - if end == 0 { - return RuneError, 0 - } - start := end - 1 - r = rune(s[start]) - if r < RuneSelf { - return r, 1 - } - // guard against O(n^2) behavior when traversing - // backwards through strings with long sequences of - // invalid UTF-8. - lim := end - UTFMax - if lim < 0 { - lim = 0 - } - for start--; start >= lim; start-- { - if RuneStart(s[start]) { - break - } - } - if start < 0 { - start = 0 - } - r, size = DecodeRuneInString(s[start:end]) - if start+size != end { - return RuneError, 1 - } - return r, size -} - -// RuneLen returns the number of bytes required to encode the rune. -// It returns -1 if the rune is not a valid value to encode in UTF-8. -func RuneLen(r rune) int { - switch { - case r < 0: - return -1 - case r <= rune1Max: - return 1 - case r <= rune2Max: - return 2 - case surrogateMin <= r && r <= surrogateMax: - return -1 - case r <= rune3Max: - return 3 - case r <= MaxRune: - return 4 - } - return -1 -} - -// EncodeRune writes into p (which must be large enough) the UTF-8 encoding of the rune. -// It returns the number of bytes written. -func EncodeRune(p []byte, r rune) int { - // Negative values are erroneous. Making it unsigned addresses the problem. - switch i := uint32(r); { - case i <= rune1Max: - p[0] = byte(r) - return 1 - case i <= rune2Max: - p[0] = t2 | byte(r>>6) - p[1] = tx | byte(r)&maskx - return 2 - case i > MaxRune, surrogateMin <= i && i <= surrogateMax: - r = RuneError - fallthrough - case i <= rune3Max: - p[0] = t3 | byte(r>>12) - p[1] = tx | byte(r>>6)&maskx - p[2] = tx | byte(r)&maskx - return 3 - default: - p[0] = t4 | byte(r>>18) - p[1] = tx | byte(r>>12)&maskx - p[2] = tx | byte(r>>6)&maskx - p[3] = tx | byte(r)&maskx - return 4 - } -} - -// RuneCount returns the number of runes in p. Erroneous and short -// encodings are treated as single runes of width 1 byte. -func RuneCount(p []byte) int { - i := 0 - var n int - for n = 0; i < len(p); n++ { - if p[i] < RuneSelf { - i++ - } else { - _, size := DecodeRune(p[i:]) - i += size - } - } - return n -} - -// RuneCountInString is like RuneCount but its input is a string. -func RuneCountInString(s string) (n int) { - for _ = range s { - n++ - } - return -} - -// RuneStart reports whether the byte could be the first byte of -// an encoded rune. Second and subsequent bytes always have the top -// two bits set to 10. -func RuneStart(b byte) bool { return b&0xC0 != 0x80 } - -// Valid reports whether p consists entirely of valid UTF-8-encoded runes. -func Valid(p []byte) bool { - i := 0 - for i < len(p) { - if p[i] < RuneSelf { - i++ - } else { - _, size := DecodeRune(p[i:]) - if size == 1 { - // All valid runes of size 1 (those - // below RuneSelf) were handled above. - // This must be a RuneError. - return false - } - i += size - } - } - return true -} - -// ValidString reports whether s consists entirely of valid UTF-8-encoded runes. -func ValidString(s string) bool { - for i, r := range s { - if r == RuneError { - // The RuneError value can be an error - // sentinel value (if it's size 1) or the same - // value encoded properly. Decode it to see if - // it's the 1 byte sentinel value. - _, size := DecodeRuneInString(s[i:]) - if size == 1 { - return false - } - } - } - return true -} - -// ValidRune reports whether r can be legally encoded as UTF-8. -// Code points that are out of range or a surrogate half are illegal. -func ValidRune(r rune) bool { - switch { - case r < 0: - return false - case surrogateMin <= r && r <= surrogateMax: - return false - case r > MaxRune: - return false - } - return true -} diff --git a/src/pkg/unicode/utf8/utf8_test.go b/src/pkg/unicode/utf8/utf8_test.go deleted file mode 100644 index 758d7a0f8..000000000 --- a/src/pkg/unicode/utf8/utf8_test.go +++ /dev/null @@ -1,444 +0,0 @@ -// Copyright 2009 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. - -package utf8_test - -import ( - "bytes" - "testing" - "unicode" - . "unicode/utf8" -) - -// Validate the constants redefined from unicode. -func init() { - if MaxRune != unicode.MaxRune { - panic("utf8.MaxRune is wrong") - } - if RuneError != unicode.ReplacementChar { - panic("utf8.RuneError is wrong") - } -} - -// Validate the constants redefined from unicode. -func TestConstants(t *testing.T) { - if MaxRune != unicode.MaxRune { - t.Errorf("utf8.MaxRune is wrong: %x should be %x", MaxRune, unicode.MaxRune) - } - if RuneError != unicode.ReplacementChar { - t.Errorf("utf8.RuneError is wrong: %x should be %x", RuneError, unicode.ReplacementChar) - } -} - -type Utf8Map struct { - r rune - str string -} - -var utf8map = []Utf8Map{ - {0x0000, "\x00"}, - {0x0001, "\x01"}, - {0x007e, "\x7e"}, - {0x007f, "\x7f"}, - {0x0080, "\xc2\x80"}, - {0x0081, "\xc2\x81"}, - {0x00bf, "\xc2\xbf"}, - {0x00c0, "\xc3\x80"}, - {0x00c1, "\xc3\x81"}, - {0x00c8, "\xc3\x88"}, - {0x00d0, "\xc3\x90"}, - {0x00e0, "\xc3\xa0"}, - {0x00f0, "\xc3\xb0"}, - {0x00f8, "\xc3\xb8"}, - {0x00ff, "\xc3\xbf"}, - {0x0100, "\xc4\x80"}, - {0x07ff, "\xdf\xbf"}, - {0x0800, "\xe0\xa0\x80"}, - {0x0801, "\xe0\xa0\x81"}, - {0xd7ff, "\xed\x9f\xbf"}, // last code point before surrogate half. - {0xe000, "\xee\x80\x80"}, // first code point after surrogate half. - {0xfffe, "\xef\xbf\xbe"}, - {0xffff, "\xef\xbf\xbf"}, - {0x10000, "\xf0\x90\x80\x80"}, - {0x10001, "\xf0\x90\x80\x81"}, - {0x10fffe, "\xf4\x8f\xbf\xbe"}, - {0x10ffff, "\xf4\x8f\xbf\xbf"}, - {0xFFFD, "\xef\xbf\xbd"}, -} - -var surrogateMap = []Utf8Map{ - {0xd800, "\xed\xa0\x80"}, // surrogate min decodes to (RuneError, 1) - {0xdfff, "\xed\xbf\xbf"}, // surrogate max decodes to (RuneError, 1) -} - -var testStrings = []string{ - "", - "abcd", - "☺☻☹", - "日a本b語ç日ð本Ê語þ日¥本¼語i日©", - "日a本b語ç日ð本Ê語þ日¥本¼語i日©日a本b語ç日ð本Ê語þ日¥本¼語i日©日a本b語ç日ð本Ê語þ日¥本¼語i日©", - "\x80\x80\x80\x80", -} - -func TestFullRune(t *testing.T) { - for _, m := range utf8map { - b := []byte(m.str) - if !FullRune(b) { - t.Errorf("FullRune(%q) (%U) = false, want true", b, m.r) - } - s := m.str - if !FullRuneInString(s) { - t.Errorf("FullRuneInString(%q) (%U) = false, want true", s, m.r) - } - b1 := b[0 : len(b)-1] - if FullRune(b1) { - t.Errorf("FullRune(%q) = true, want false", b1) - } - s1 := string(b1) - if FullRuneInString(s1) { - t.Errorf("FullRune(%q) = true, want false", s1) - } - } -} - -func TestEncodeRune(t *testing.T) { - for _, m := range utf8map { - b := []byte(m.str) - var buf [10]byte - n := EncodeRune(buf[0:], m.r) - b1 := buf[0:n] - if !bytes.Equal(b, b1) { - t.Errorf("EncodeRune(%#04x) = %q want %q", m.r, b1, b) - } - } -} - -func TestDecodeRune(t *testing.T) { - for _, m := range utf8map { - b := []byte(m.str) - r, size := DecodeRune(b) - if r != m.r || size != len(b) { - t.Errorf("DecodeRune(%q) = %#04x, %d want %#04x, %d", b, r, size, m.r, len(b)) - } - s := m.str - r, size = DecodeRuneInString(s) - if r != m.r || size != len(b) { - t.Errorf("DecodeRuneInString(%q) = %#04x, %d want %#04x, %d", s, r, size, m.r, len(b)) - } - - // there's an extra byte that bytes left behind - make sure trailing byte works - r, size = DecodeRune(b[0:cap(b)]) - if r != m.r || size != len(b) { - t.Errorf("DecodeRune(%q) = %#04x, %d want %#04x, %d", b, r, size, m.r, len(b)) - } - s = m.str + "\x00" - r, size = DecodeRuneInString(s) - if r != m.r || size != len(b) { - t.Errorf("DecodeRuneInString(%q) = %#04x, %d want %#04x, %d", s, r, size, m.r, len(b)) - } - - // make sure missing bytes fail - wantsize := 1 - if wantsize >= len(b) { - wantsize = 0 - } - r, size = DecodeRune(b[0 : len(b)-1]) - if r != RuneError || size != wantsize { - t.Errorf("DecodeRune(%q) = %#04x, %d want %#04x, %d", b[0:len(b)-1], r, size, RuneError, wantsize) - } - s = m.str[0 : len(m.str)-1] - r, size = DecodeRuneInString(s) - if r != RuneError || size != wantsize { - t.Errorf("DecodeRuneInString(%q) = %#04x, %d want %#04x, %d", s, r, size, RuneError, wantsize) - } - - // make sure bad sequences fail - if len(b) == 1 { - b[0] = 0x80 - } else { - b[len(b)-1] = 0x7F - } - r, size = DecodeRune(b) - if r != RuneError || size != 1 { - t.Errorf("DecodeRune(%q) = %#04x, %d want %#04x, %d", b, r, size, RuneError, 1) - } - s = string(b) - r, size = DecodeRuneInString(s) - if r != RuneError || size != 1 { - t.Errorf("DecodeRuneInString(%q) = %#04x, %d want %#04x, %d", s, r, size, RuneError, 1) - } - - } -} - -func TestDecodeSurrogateRune(t *testing.T) { - for _, m := range surrogateMap { - b := []byte(m.str) - r, size := DecodeRune(b) - if r != RuneError || size != 1 { - t.Errorf("DecodeRune(%q) = %x, %d want %x, %d", b, r, size, RuneError, 1) - } - s := m.str - r, size = DecodeRuneInString(s) - if r != RuneError || size != 1 { - t.Errorf("DecodeRuneInString(%q) = %x, %d want %x, %d", b, r, size, RuneError, 1) - } - } -} - -// Check that DecodeRune and DecodeLastRune correspond to -// the equivalent range loop. -func TestSequencing(t *testing.T) { - for _, ts := range testStrings { - for _, m := range utf8map { - for _, s := range []string{ts + m.str, m.str + ts, ts + m.str + ts} { - testSequence(t, s) - } - } - } -} - -// Check that a range loop and a []int conversion visit the same runes. -// Not really a test of this package, but the assumption is used here and -// it's good to verify -func TestIntConversion(t *testing.T) { - for _, ts := range testStrings { - runes := []rune(ts) - if RuneCountInString(ts) != len(runes) { - t.Errorf("%q: expected %d runes; got %d", ts, len(runes), RuneCountInString(ts)) - break - } - i := 0 - for _, r := range ts { - if r != runes[i] { - t.Errorf("%q[%d]: expected %c (%U); got %c (%U)", ts, i, runes[i], runes[i], r, r) - } - i++ - } - } -} - -func testSequence(t *testing.T, s string) { - type info struct { - index int - r rune - } - index := make([]info, len(s)) - b := []byte(s) - si := 0 - j := 0 - for i, r := range s { - if si != i { - t.Errorf("Sequence(%q) mismatched index %d, want %d", s, si, i) - return - } - index[j] = info{i, r} - j++ - r1, size1 := DecodeRune(b[i:]) - if r != r1 { - t.Errorf("DecodeRune(%q) = %#04x, want %#04x", s[i:], r1, r) - return - } - r2, size2 := DecodeRuneInString(s[i:]) - if r != r2 { - t.Errorf("DecodeRuneInString(%q) = %#04x, want %#04x", s[i:], r2, r) - return - } - if size1 != size2 { - t.Errorf("DecodeRune/DecodeRuneInString(%q) size mismatch %d/%d", s[i:], size1, size2) - return - } - si += size1 - } - j-- - for si = len(s); si > 0; { - r1, size1 := DecodeLastRune(b[0:si]) - r2, size2 := DecodeLastRuneInString(s[0:si]) - if size1 != size2 { - t.Errorf("DecodeLastRune/DecodeLastRuneInString(%q, %d) size mismatch %d/%d", s, si, size1, size2) - return - } - if r1 != index[j].r { - t.Errorf("DecodeLastRune(%q, %d) = %#04x, want %#04x", s, si, r1, index[j].r) - return - } - if r2 != index[j].r { - t.Errorf("DecodeLastRuneInString(%q, %d) = %#04x, want %#04x", s, si, r2, index[j].r) - return - } - si -= size1 - if si != index[j].index { - t.Errorf("DecodeLastRune(%q) index mismatch at %d, want %d", s, si, index[j].index) - return - } - j-- - } - if si != 0 { - t.Errorf("DecodeLastRune(%q) finished at %d, not 0", s, si) - } -} - -// Check that negative runes encode as U+FFFD. -func TestNegativeRune(t *testing.T) { - errorbuf := make([]byte, UTFMax) - errorbuf = errorbuf[0:EncodeRune(errorbuf, RuneError)] - buf := make([]byte, UTFMax) - buf = buf[0:EncodeRune(buf, -1)] - if !bytes.Equal(buf, errorbuf) { - t.Errorf("incorrect encoding [% x] for -1; expected [% x]", buf, errorbuf) - } -} - -type RuneCountTest struct { - in string - out int -} - -var runecounttests = []RuneCountTest{ - {"abcd", 4}, - {"☺☻☹", 3}, - {"1,2,3,4", 7}, - {"\xe2\x00", 2}, -} - -func TestRuneCount(t *testing.T) { - for _, tt := range runecounttests { - if out := RuneCountInString(tt.in); out != tt.out { - t.Errorf("RuneCountInString(%q) = %d, want %d", tt.in, out, tt.out) - } - if out := RuneCount([]byte(tt.in)); out != tt.out { - t.Errorf("RuneCount(%q) = %d, want %d", tt.in, out, tt.out) - } - } -} - -type RuneLenTest struct { - r rune - size int -} - -var runelentests = []RuneLenTest{ - {0, 1}, - {'e', 1}, - {'é', 2}, - {'☺', 3}, - {RuneError, 3}, - {MaxRune, 4}, - {0xD800, -1}, - {0xDFFF, -1}, - {MaxRune + 1, -1}, - {-1, -1}, -} - -func TestRuneLen(t *testing.T) { - for _, tt := range runelentests { - if size := RuneLen(tt.r); size != tt.size { - t.Errorf("RuneLen(%#U) = %d, want %d", tt.r, size, tt.size) - } - } -} - -type ValidTest struct { - in string - out bool -} - -var validTests = []ValidTest{ - {"", true}, - {"a", true}, - {"abc", true}, - {"Ж", true}, - {"ЖЖ", true}, - {"брэд-ЛГТМ", true}, - {"☺☻☹", true}, - {string([]byte{66, 250}), false}, - {string([]byte{66, 250, 67}), false}, - {"a\uFFFDb", true}, - {string("\xF4\x8F\xBF\xBF"), true}, // U+10FFFF - {string("\xF4\x90\x80\x80"), false}, // U+10FFFF+1; out of range - {string("\xF7\xBF\xBF\xBF"), false}, // 0x1FFFFF; out of range - {string("\xFB\xBF\xBF\xBF\xBF"), false}, // 0x3FFFFFF; out of range - {string("\xc0\x80"), false}, // U+0000 encoded in two bytes: incorrect - {string("\xed\xa0\x80"), false}, // U+D800 high surrogate (sic) - {string("\xed\xbf\xbf"), false}, // U+DFFF low surrogate (sic) -} - -func TestValid(t *testing.T) { - for _, tt := range validTests { - if Valid([]byte(tt.in)) != tt.out { - t.Errorf("Valid(%q) = %v; want %v", tt.in, !tt.out, tt.out) - } - if ValidString(tt.in) != tt.out { - t.Errorf("ValidString(%q) = %v; want %v", tt.in, !tt.out, tt.out) - } - } -} - -type ValidRuneTest struct { - r rune - ok bool -} - -var validrunetests = []ValidRuneTest{ - {0, true}, - {'e', true}, - {'é', true}, - {'☺', true}, - {RuneError, true}, - {MaxRune, true}, - {0xD7FF, true}, - {0xD800, false}, - {0xDFFF, false}, - {0xE000, true}, - {MaxRune + 1, false}, - {-1, false}, -} - -func TestValidRune(t *testing.T) { - for _, tt := range validrunetests { - if ok := ValidRune(tt.r); ok != tt.ok { - t.Errorf("ValidRune(%#U) = %t, want %t", tt.r, ok, tt.ok) - } - } -} - -func BenchmarkRuneCountTenASCIIChars(b *testing.B) { - for i := 0; i < b.N; i++ { - RuneCountInString("0123456789") - } -} - -func BenchmarkRuneCountTenJapaneseChars(b *testing.B) { - for i := 0; i < b.N; i++ { - RuneCountInString("日本語日本語日本語日") - } -} - -func BenchmarkEncodeASCIIRune(b *testing.B) { - buf := make([]byte, UTFMax) - for i := 0; i < b.N; i++ { - EncodeRune(buf, 'a') - } -} - -func BenchmarkEncodeJapaneseRune(b *testing.B) { - buf := make([]byte, UTFMax) - for i := 0; i < b.N; i++ { - EncodeRune(buf, '本') - } -} - -func BenchmarkDecodeASCIIRune(b *testing.B) { - a := []byte{'a'} - for i := 0; i < b.N; i++ { - DecodeRune(a) - } -} - -func BenchmarkDecodeJapaneseRune(b *testing.B) { - nihon := []byte("本") - for i := 0; i < b.N; i++ { - DecodeRune(nihon) - } -} |