From 22c2b476a84f541a6a6818f4d3dbf30cb0802867 Mon Sep 17 00:00:00 2001 From: Rob Pike Date: Fri, 28 Aug 2009 23:05:16 -0700 Subject: [PATCH] first cut at case mapping tables and library. next cut will do the optimization for alternating sequences. R=rsc DELTA=1658 (1620 added, 9 deleted, 29 changed) OCL=34072 CL=34075 --- src/pkg/unicode/digit_test.go | 4 +- src/pkg/unicode/letter.go | 90 ++- src/pkg/unicode/letter_test.go | 176 ++++- src/pkg/unicode/maketables.go | 203 +++++- src/pkg/unicode/tables.go | 1208 +++++++++++++++++++++++++++++++- 5 files changed, 1646 insertions(+), 35 deletions(-) diff --git a/src/pkg/unicode/digit_test.go b/src/pkg/unicode/digit_test.go index dcfb2ddc72..19a55bb673 100644 --- a/src/pkg/unicode/digit_test.go +++ b/src/pkg/unicode/digit_test.go @@ -103,12 +103,12 @@ var testLetter = []int { func TestDigit(t *testing.T) { for i, r := range testDigit { if !IsDigit(r) { - t.Errorf("IsDigit(%#x) = false, want true\n", r); + t.Errorf("IsDigit(U+%04X) = false, want true\n", r); } } for i, r := range testLetter { if IsDigit(r) { - t.Errorf("IsDigit(%#x) = true, want false\n", r); + t.Errorf("IsDigit(U+%04X) = true, want false\n", r); } } } diff --git a/src/pkg/unicode/letter.go b/src/pkg/unicode/letter.go index c625e90687..087c4ad3a3 100644 --- a/src/pkg/unicode/letter.go +++ b/src/pkg/unicode/letter.go @@ -9,11 +9,39 @@ package unicode // The representation of a range of Unicode code points. The range runs from Lo to Hi // inclusive and has the specified stride. type Range struct { - Lo int; - Hi int; - Stride int; + Lo int; + Hi int; + Stride int; } +// The representation of a range of Unicode code points for 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. +type CaseRange struct { + Lo int; + Hi int; + Delta d; +} + +// Indices into the Delta arrays inside CaseRanges for case mapping. +const ( + UpperCase = iota; + LowerCase; + TitleCase; + MaxCase; +) +type d [MaxCase]int32 // to make the CaseRanges text shorter + +// If the Delta field of a CaseRange is UpperLower or LowerUpper, it means +// this CaseRange represents a sequence of the form (say) +// Upper Lower Upper Lower. +const ( + UpperLower = 1; + LowerUpper = -1; +) + // Is tests whether rune is in the specified table of ranges. func Is(ranges []Range, rune int) bool { // common case: rune is ASCII or Latin-1 @@ -80,3 +108,59 @@ func IsLetter(rune int) bool { } return Is(Letter, rune); } + +// To maps the rune to the specified case, UpperCase, LowerCase, or TitleCase +func To(_case int, rune int) int { + if _case < 0 || MaxCase <= _case { + return 0xFFFD // as reasonable an error as any + } + // binary search over ranges + lo := 0; + hi := len(CaseRanges); + for lo < hi { + m := lo + (hi - lo)/2; + r := CaseRanges[m]; + if r.Lo <= rune && rune <= r.Hi { + return rune + int(r.Delta[_case]); + } + if rune < r.Lo { + hi = m; + } else { + lo = m+1; + } + } + return rune; +} + +// ToUpper maps the rune to upper case +func ToUpper(rune int) int { + if rune < 0x80 { // quick ASCII check + if 'a' <= rune && rune <= 'z' { + rune &^= ' ' + } + return rune + } + return To(UpperCase, rune); +} + +// ToLower maps the rune to lower case +func ToLower(rune int) int { + if rune < 0x80 { // quick ASCII check + if 'A' <= rune && rune <= 'Z' { + rune |= ' ' + } + return rune + } + return To(LowerCase, rune); +} + +// ToTitle maps the rune to title case +func ToTitle(rune int) int { + if rune < 0x80 { // quick ASCII check + if 'a' <= rune && rune <= 'z' { // title case is upper case for ASCII + rune &^= ' ' + } + return rune + } + return To(TitleCase, rune); +} diff --git a/src/pkg/unicode/letter_test.go b/src/pkg/unicode/letter_test.go index 357fb7e241..800c845556 100644 --- a/src/pkg/unicode/letter_test.go +++ b/src/pkg/unicode/letter_test.go @@ -89,20 +89,127 @@ var notletterTest = []int{ 0x10ffff, } +type caseT struct { + cas, in, out int +} + +var caseTest = []caseT { + // errors + caseT{-1, '\n', 0xFFFD}, + caseT{UpperCase, -1, -1}, + caseT{UpperCase, 1<<30, 1<<30}, + + // ASCII (special-cased so test carefully) + caseT{UpperCase, '\n', '\n'}, + caseT{UpperCase, 'a', 'A'}, + caseT{UpperCase, 'A', 'A'}, + caseT{UpperCase, '7', '7'}, + caseT{LowerCase, '\n', '\n'}, + caseT{LowerCase, 'a', 'a'}, + caseT{LowerCase, 'A', 'a'}, + caseT{LowerCase, '7', '7'}, + caseT{TitleCase, '\n', '\n'}, + caseT{TitleCase, 'a', 'A'}, + caseT{TitleCase, 'A', 'A'}, + caseT{TitleCase, '7', '7'}, + + // Latin-1: easy to read the tests! + caseT{UpperCase, 0x80, 0x80}, + caseT{UpperCase, 'Å', 'Å'}, + caseT{UpperCase, 'å', 'Å'}, + caseT{LowerCase, 0x80, 0x80}, + caseT{LowerCase, 'Å', 'å'}, + caseT{LowerCase, 'å', 'å'}, + caseT{TitleCase, 0x80, 0x80}, + caseT{TitleCase, 'Å', 'Å'}, + caseT{TitleCase, 'å', 'Å'}, + + // 0131;LATIN SMALL LETTER DOTLESS I;Ll;0;L;;;;;N;;;0049;;0049 + caseT{UpperCase, 0x0131, 'I'}, + caseT{LowerCase, 0x0131, 0x0131}, + caseT{TitleCase, 0x0131, 'I'}, + + // 0133;LATIN SMALL LIGATURE IJ;Ll;0;L; 0069 006A;;;;N;LATIN SMALL LETTER I J;;0132;;0132 + caseT{UpperCase, 0x0133, 0x0132}, + caseT{LowerCase, 0x0133, 0x0133}, + caseT{TitleCase, 0x0133, 0x0132}, + + // 212A;KELVIN SIGN;Lu;0;L;004B;;;;N;DEGREES KELVIN;;;006B; + caseT{UpperCase, 0x212A, 0x212A}, + caseT{LowerCase, 0x212A, 'k'}, + caseT{TitleCase, 0x212A, 0x212A}, + + // From an UpperLower sequence + // A640;CYRILLIC CAPITAL LETTER ZEMLYA;Lu;0;L;;;;;N;;;;A641; + caseT{UpperCase, 0xA640, 0xA640}, + caseT{LowerCase, 0xA640, 0xA641}, + caseT{TitleCase, 0xA640, 0xA640}, + // A641;CYRILLIC SMALL LETTER ZEMLYA;Ll;0;L;;;;;N;;;A640;;A640 + caseT{UpperCase, 0xA641, 0xA640}, + caseT{LowerCase, 0xA641, 0xA641}, + caseT{TitleCase, 0xA641, 0xA640}, + // A64E;CYRILLIC CAPITAL LETTER NEUTRAL YER;Lu;0;L;;;;;N;;;;A64F; + caseT{UpperCase, 0xA64E, 0xA64E}, + caseT{LowerCase, 0xA64E, 0xA64F}, + caseT{TitleCase, 0xA64E, 0xA64E}, + // A65F;CYRILLIC SMALL LETTER YN;Ll;0;L;;;;;N;;;A65E;;A65E + caseT{UpperCase, 0xA65F, 0xA65E}, + caseT{LowerCase, 0xA65F, 0xA65F}, + caseT{TitleCase, 0xA65F, 0xA65E}, + + // From a LowerUpper sequence + // 0139;LATIN CAPITAL LETTER L WITH ACUTE;Lu;0;L;004C 0301;;;;N;LATIN CAPITAL LETTER L ACUTE;;;013A; + caseT{UpperCase, 0x0139, 0x0139}, + caseT{LowerCase, 0x0139, 0x013A}, + caseT{TitleCase, 0x0139, 0x0139}, + // 013F;LATIN CAPITAL LETTER L WITH MIDDLE DOT;Lu;0;L; 004C 00B7;;;;N;;;;0140; + caseT{UpperCase, 0x013f, 0x013f}, + caseT{LowerCase, 0x013f, 0x0140}, + caseT{TitleCase, 0x013f, 0x013f}, + // 0148;LATIN SMALL LETTER N WITH CARON;Ll;0;L;006E 030C;;;;N;LATIN SMALL LETTER N HACEK;;0147;;0147 + caseT{UpperCase, 0x0148, 0x0147}, + caseT{LowerCase, 0x0148, 0x0148}, + caseT{TitleCase, 0x0148, 0x0147}, + + // Last block in the 5.1.0 table + // 10400;DESERET CAPITAL LETTER LONG I;Lu;0;L;;;;;N;;;;10428; + caseT{UpperCase, 0x10400, 0x10400}, + caseT{LowerCase, 0x10400, 0x10428}, + caseT{TitleCase, 0x10400, 0x10400}, + // 10427;DESERET CAPITAL LETTER EW;Lu;0;L;;;;;N;;;;1044F; + caseT{UpperCase, 0x10427, 0x10427}, + caseT{LowerCase, 0x10427, 0x1044F}, + caseT{TitleCase, 0x10427, 0x10427}, + // 10428;DESERET SMALL LETTER LONG I;Ll;0;L;;;;;N;;;10400;;10400 + caseT{UpperCase, 0x10428, 0x10400}, + caseT{LowerCase, 0x10428, 0x10428}, + caseT{TitleCase, 0x10428, 0x10400}, + // 1044F;DESERET SMALL LETTER EW;Ll;0;L;;;;;N;;;10427;;10427 + caseT{UpperCase, 0x1044F, 0x10427}, + caseT{LowerCase, 0x1044F, 0x1044F}, + caseT{TitleCase, 0x1044F, 0x10427}, + + // First one not in the 5.1.0 table + // 10450;SHAVIAN LETTER PEEP;Lo;0;L;;;;;N;;;;; + caseT{UpperCase, 0x10450, 0x10450}, + caseT{LowerCase, 0x10450, 0x10450}, + caseT{TitleCase, 0x10450, 0x10450}, +} + func TestIsLetter(t *testing.T) { for i, r := range upperTest { if !IsLetter(r) { - t.Errorf("IsLetter(%#x) = false, want true\n", r); + t.Errorf("IsLetter(U+%04X) = false, want true\n", r); } } for i, r := range letterTest { if !IsLetter(r) { - t.Errorf("IsLetter(%#x) = false, want true\n", r); + t.Errorf("IsLetter(U+%04X) = false, want true\n", r); } } for i, r := range notletterTest { if IsLetter(r) { - t.Errorf("IsLetter(%#x) = true, want false\n", r); + t.Errorf("IsLetter(U+%04X) = true, want false\n", r); } } } @@ -110,17 +217,74 @@ func TestIsLetter(t *testing.T) { func TestIsUpper(t *testing.T) { for i, r := range upperTest { if !IsUpper(r) { - t.Errorf("IsUpper(%#x) = false, want true\n", r); + t.Errorf("IsUpper(U+%04X) = false, want true\n", r); } } for i, r := range notupperTest { if IsUpper(r) { - t.Errorf("IsUpper(%#x) = true, want false\n", r); + t.Errorf("IsUpper(U+%04X) = true, want false\n", r); } } for i, r := range notletterTest { if IsUpper(r) { - t.Errorf("IsUpper(%#x) = true, want false\n", r); + t.Errorf("IsUpper(U+%04X) = true, want false\n", 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 i, c := range caseTest { + r := To(c.cas, c.in); + if c.out != r { + t.Errorf("To(U+%04X, %s) = U+%04X want U+%04X\n", c.in, caseString(c.cas), r, c.out); + } + } +} + +func TestToUpperCase(t *testing.T) { + for i, 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\n", c.in, r, c.out); + } + } +} + +func TestToLowerCase(t *testing.T) { + for i, 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\n", c.in, r, c.out); + } + } +} + +func TestToTitleCase(t *testing.T) { + for i, 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\n", c.in, r, c.out); } } } diff --git a/src/pkg/unicode/maketables.go b/src/pkg/unicode/maketables.go index b5ae37324c..a26f9bdccb 100644 --- a/src/pkg/unicode/maketables.go +++ b/src/pkg/unicode/maketables.go @@ -21,6 +21,14 @@ import ( "unicode"; ) +func main() { + flag.Parse(); + loadChars(); // always needed + printCategories(); + printScripts(); + printCases(); +} + var dataUrl = flag.String("data", "", "full URL for UnicodeData.txt; defaults to --url/UnicodeData.txt"); var url = flag.String("url", "http://www.unicode.org/Public/5.1.0/ucd/", @@ -31,6 +39,9 @@ var tablelist = flag.String("tables", var scriptlist = flag.String("scripts", "all", "comma-separated list of which script 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"); @@ -44,7 +55,7 @@ var category = map[string] bool{ "letter":true } // Nd Lu etc. letter is a speci // 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/Public/5.1.0/ucd/UCD.html for full explanation -// The fields +// The fields: const ( FCodePoint = iota; FName; @@ -87,11 +98,11 @@ var fieldName = []string{ // 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 uint32; // redundant (it's the index in the chars table) but useful + codePoint uint32; // if zero, this index is not a valid code point. category string; - upperCase uint32; - lowerCase uint32; - titleCase uint32; + upperCase int; + lowerCase int; + titleCase int; } // Scripts.txt has form: @@ -104,26 +115,21 @@ type Script struct { script string; } -func main() { - flag.Parse(); - printCategories(); - printScripts(); -} - -var chars = make([]Char, MaxChar) +var chars = make([]Char, MaxChar+1) var scripts = make(map[string] []Script) var lastChar uint32 = 0; // In UnicodeData.txt, some ranges are marked like this: -// 3400;;Lo;0;L;;;;;N;;;;; -// 4DB5;;Lo;0;L;;;;;N;;;;; +// 3400;;Lo;0;L;;;;;N;;;;; +// 4DB5;;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) { @@ -139,7 +145,7 @@ func parseCategory(line string) (state State) { if point == 0 { return // not interesting and we use 0 as unset } - if point >= MaxChar { + if point > MaxChar { return; } char := &chars[point]; @@ -189,7 +195,7 @@ func (char *Char) letter(u, l, t string) { char.titleCase = char.letterValue(t, "T"); } -func (char *Char) letterValue(s string, cas string) uint32 { +func (char *Char) letterValue(s string, cas string) int { if s == "" { return 0 } @@ -198,7 +204,7 @@ func (char *Char) letterValue(s string, cas string) uint32 { char.dump(cas); die.Logf("U+%04x: bad letter(%s): %s", char.codePoint, s, err) } - return uint32(v) + return int(v) } func allCategories() []string { @@ -242,10 +248,7 @@ func letterOp(code int) bool { return false } -func printCategories() { - if *tablelist == "" { - return - } +func loadChars() { if *dataUrl == "" { flag.Set("data", *url + "UnicodeData.txt"); } @@ -288,6 +291,12 @@ func printCategories() { } } resp.Body.Close(); +} + +func printCategories() { + if *tablelist == "" { + return + } // Find out which categories to dump list := strings.Split(*tablelist, ",", 0); if *tablelist == "all" { @@ -299,11 +308,11 @@ func printCategories() { } fmt.Printf( "// Generated by running\n" - "// maketables --tables=%s --url=%s\n" + "// maketables --tables=%s --data=%s\n" "// DO NOT EDIT\n\n" "package unicode\n\n", *tablelist, - *url + *dataUrl ); fmt.Println("// Version is the Unicode edition from which the tables are derived."); @@ -496,6 +505,9 @@ func parseScript(line string) { } func printScripts() { + if *scriptlist == "" { + return + } var err os.Error; scriptRe, err = regexp.Compile(`([0-9A-F]+)(\.\.[0-9A-F]+)? +; ([A-Za-z_]+)`); if err != nil { @@ -604,3 +616,148 @@ func fullScriptTest(list []string) { } } } + +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 int; + _case int; + deltaToUpper int; + deltaToLower int; + deltaToTitle int; +} + +// Is d a continuation of the state of c? +func (c *caseState) adjacent(d *caseState) bool { + if d.point < c.point { + return d.adjacent(c) + } + switch { + case d.point != c.point+1: + return false + case d._case != c._case: + return false + 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; +} + +func getCaseState(i int) (c *caseState) { + c = &caseState{ point: i, _case: CaseNone }; + ch := &chars[i]; + switch int(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; + } + 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\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 + ); + + var startState *caseState; // the start of a run; nil for not active + var prevState = &caseState{}; // the state of the previous character + for i, c := range chars { + state := getCaseState(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.Printf("}\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 + } + fmt.Printf("\tCaseRange{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(rune, cased int) int { + if cased == 0 { + return rune + } + return cased +} + +func fullCaseTest() { + for i, c := range chars { + lower := unicode.ToLower(i); + want := caseIt(i, c.lowerCase); + if lower != want { + fmt.Fprintf(os.Stderr, "lower U+%04X should be U+%04X is U+%04X\n", i, want, lower); + } + upper := unicode.ToUpper(i); + want = caseIt(i, c.upperCase); + if upper != want { + fmt.Fprintf(os.Stderr, "upper U+%04X should be U+%04X is U+%04X\n", i, want, upper); + } + title := unicode.ToTitle(i); + want = caseIt(i, c.titleCase); + if title != want { + fmt.Fprintf(os.Stderr, "title U+%04X should be U+%04X is U+%04X\n", i, want, title); + } + } +} diff --git a/src/pkg/unicode/tables.go b/src/pkg/unicode/tables.go index e6fed36a47..87ab88b280 100644 --- a/src/pkg/unicode/tables.go +++ b/src/pkg/unicode/tables.go @@ -1,5 +1,5 @@ // Generated by running -// maketables --tables=all --url=http://www.unicode.org/Public/5.1.0/ucd/ +// maketables --tables=all --data=http://www.unicode.org/Public/5.1.0/ucd/UnicodeData.txt // DO NOT EDIT package unicode @@ -2788,3 +2788,1209 @@ var ( Yi = _Yi; // Yi is the set of Unicode characters in script Yi. ) +// Generated by running +// maketables --data=http://www.unicode.org/Public/5.1.0/ucd/UnicodeData.txt +// DO NOT EDIT + +// CaseRanges is the table describing case mappings for all letters with +// non-self mappings. +var CaseRanges = _CaseRanges +var _CaseRanges = []CaseRange { + CaseRange{0x0041, 0x005A, d{0, 32, 0}}, + CaseRange{0x0061, 0x007A, d{-32, 0, -32}}, + CaseRange{0x00B5, 0x00B5, d{743, 0, 743}}, + CaseRange{0x00C0, 0x00D6, d{0, 32, 0}}, + CaseRange{0x00D8, 0x00DE, d{0, 32, 0}}, + CaseRange{0x00E0, 0x00F6, d{-32, 0, -32}}, + CaseRange{0x00F8, 0x00FE, d{-32, 0, -32}}, + CaseRange{0x00FF, 0x00FF, d{121, 0, 121}}, + CaseRange{0x0100, 0x0100, d{0, 1, 0}}, + CaseRange{0x0101, 0x0101, d{-1, 0, -1}}, + CaseRange{0x0102, 0x0102, d{0, 1, 0}}, + CaseRange{0x0103, 0x0103, d{-1, 0, -1}}, + CaseRange{0x0104, 0x0104, d{0, 1, 0}}, + CaseRange{0x0105, 0x0105, d{-1, 0, -1}}, + CaseRange{0x0106, 0x0106, d{0, 1, 0}}, + CaseRange{0x0107, 0x0107, d{-1, 0, -1}}, + CaseRange{0x0108, 0x0108, d{0, 1, 0}}, + CaseRange{0x0109, 0x0109, d{-1, 0, -1}}, + CaseRange{0x010A, 0x010A, d{0, 1, 0}}, + CaseRange{0x010B, 0x010B, d{-1, 0, -1}}, + CaseRange{0x010C, 0x010C, d{0, 1, 0}}, + CaseRange{0x010D, 0x010D, d{-1, 0, -1}}, + CaseRange{0x010E, 0x010E, d{0, 1, 0}}, + CaseRange{0x010F, 0x010F, d{-1, 0, -1}}, + CaseRange{0x0110, 0x0110, d{0, 1, 0}}, + CaseRange{0x0111, 0x0111, d{-1, 0, -1}}, + CaseRange{0x0112, 0x0112, d{0, 1, 0}}, + CaseRange{0x0113, 0x0113, d{-1, 0, -1}}, + CaseRange{0x0114, 0x0114, d{0, 1, 0}}, + CaseRange{0x0115, 0x0115, d{-1, 0, -1}}, + CaseRange{0x0116, 0x0116, d{0, 1, 0}}, + CaseRange{0x0117, 0x0117, d{-1, 0, -1}}, + CaseRange{0x0118, 0x0118, d{0, 1, 0}}, + CaseRange{0x0119, 0x0119, d{-1, 0, -1}}, + CaseRange{0x011A, 0x011A, d{0, 1, 0}}, + CaseRange{0x011B, 0x011B, d{-1, 0, -1}}, + CaseRange{0x011C, 0x011C, d{0, 1, 0}}, + CaseRange{0x011D, 0x011D, d{-1, 0, -1}}, + CaseRange{0x011E, 0x011E, d{0, 1, 0}}, + CaseRange{0x011F, 0x011F, d{-1, 0, -1}}, + CaseRange{0x0120, 0x0120, d{0, 1, 0}}, + CaseRange{0x0121, 0x0121, d{-1, 0, -1}}, + CaseRange{0x0122, 0x0122, d{0, 1, 0}}, + CaseRange{0x0123, 0x0123, d{-1, 0, -1}}, + CaseRange{0x0124, 0x0124, d{0, 1, 0}}, + CaseRange{0x0125, 0x0125, d{-1, 0, -1}}, + CaseRange{0x0126, 0x0126, d{0, 1, 0}}, + CaseRange{0x0127, 0x0127, d{-1, 0, -1}}, + CaseRange{0x0128, 0x0128, d{0, 1, 0}}, + CaseRange{0x0129, 0x0129, d{-1, 0, -1}}, + CaseRange{0x012A, 0x012A, d{0, 1, 0}}, + CaseRange{0x012B, 0x012B, d{-1, 0, -1}}, + CaseRange{0x012C, 0x012C, d{0, 1, 0}}, + CaseRange{0x012D, 0x012D, d{-1, 0, -1}}, + CaseRange{0x012E, 0x012E, d{0, 1, 0}}, + CaseRange{0x012F, 0x012F, d{-1, 0, -1}}, + CaseRange{0x0130, 0x0130, d{0, -199, 0}}, + CaseRange{0x0131, 0x0131, d{-232, 0, -232}}, + CaseRange{0x0132, 0x0132, d{0, 1, 0}}, + CaseRange{0x0133, 0x0133, d{-1, 0, -1}}, + CaseRange{0x0134, 0x0134, d{0, 1, 0}}, + CaseRange{0x0135, 0x0135, d{-1, 0, -1}}, + CaseRange{0x0136, 0x0136, d{0, 1, 0}}, + CaseRange{0x0137, 0x0137, d{-1, 0, -1}}, + CaseRange{0x0139, 0x0139, d{0, 1, 0}}, + CaseRange{0x013A, 0x013A, d{-1, 0, -1}}, + CaseRange{0x013B, 0x013B, d{0, 1, 0}}, + CaseRange{0x013C, 0x013C, d{-1, 0, -1}}, + CaseRange{0x013D, 0x013D, d{0, 1, 0}}, + CaseRange{0x013E, 0x013E, d{-1, 0, -1}}, + CaseRange{0x013F, 0x013F, d{0, 1, 0}}, + CaseRange{0x0140, 0x0140, d{-1, 0, -1}}, + CaseRange{0x0141, 0x0141, d{0, 1, 0}}, + CaseRange{0x0142, 0x0142, d{-1, 0, -1}}, + CaseRange{0x0143, 0x0143, d{0, 1, 0}}, + CaseRange{0x0144, 0x0144, d{-1, 0, -1}}, + CaseRange{0x0145, 0x0145, d{0, 1, 0}}, + CaseRange{0x0146, 0x0146, d{-1, 0, -1}}, + CaseRange{0x0147, 0x0147, d{0, 1, 0}}, + CaseRange{0x0148, 0x0148, d{-1, 0, -1}}, + CaseRange{0x014A, 0x014A, d{0, 1, 0}}, + CaseRange{0x014B, 0x014B, d{-1, 0, -1}}, + CaseRange{0x014C, 0x014C, d{0, 1, 0}}, + CaseRange{0x014D, 0x014D, d{-1, 0, -1}}, + CaseRange{0x014E, 0x014E, d{0, 1, 0}}, + CaseRange{0x014F, 0x014F, d{-1, 0, -1}}, + CaseRange{0x0150, 0x0150, d{0, 1, 0}}, + CaseRange{0x0151, 0x0151, d{-1, 0, -1}}, + CaseRange{0x0152, 0x0152, d{0, 1, 0}}, + CaseRange{0x0153, 0x0153, d{-1, 0, -1}}, + CaseRange{0x0154, 0x0154, d{0, 1, 0}}, + CaseRange{0x0155, 0x0155, d{-1, 0, -1}}, + CaseRange{0x0156, 0x0156, d{0, 1, 0}}, + CaseRange{0x0157, 0x0157, d{-1, 0, -1}}, + CaseRange{0x0158, 0x0158, d{0, 1, 0}}, + CaseRange{0x0159, 0x0159, d{-1, 0, -1}}, + CaseRange{0x015A, 0x015A, d{0, 1, 0}}, + CaseRange{0x015B, 0x015B, d{-1, 0, -1}}, + CaseRange{0x015C, 0x015C, d{0, 1, 0}}, + CaseRange{0x015D, 0x015D, d{-1, 0, -1}}, + CaseRange{0x015E, 0x015E, d{0, 1, 0}}, + CaseRange{0x015F, 0x015F, d{-1, 0, -1}}, + CaseRange{0x0160, 0x0160, d{0, 1, 0}}, + CaseRange{0x0161, 0x0161, d{-1, 0, -1}}, + CaseRange{0x0162, 0x0162, d{0, 1, 0}}, + CaseRange{0x0163, 0x0163, d{-1, 0, -1}}, + CaseRange{0x0164, 0x0164, d{0, 1, 0}}, + CaseRange{0x0165, 0x0165, d{-1, 0, -1}}, + CaseRange{0x0166, 0x0166, d{0, 1, 0}}, + CaseRange{0x0167, 0x0167, d{-1, 0, -1}}, + CaseRange{0x0168, 0x0168, d{0, 1, 0}}, + CaseRange{0x0169, 0x0169, d{-1, 0, -1}}, + CaseRange{0x016A, 0x016A, d{0, 1, 0}}, + CaseRange{0x016B, 0x016B, d{-1, 0, -1}}, + CaseRange{0x016C, 0x016C, d{0, 1, 0}}, + CaseRange{0x016D, 0x016D, d{-1, 0, -1}}, + CaseRange{0x016E, 0x016E, d{0, 1, 0}}, + CaseRange{0x016F, 0x016F, d{-1, 0, -1}}, + CaseRange{0x0170, 0x0170, d{0, 1, 0}}, + CaseRange{0x0171, 0x0171, d{-1, 0, -1}}, + CaseRange{0x0172, 0x0172, d{0, 1, 0}}, + CaseRange{0x0173, 0x0173, d{-1, 0, -1}}, + CaseRange{0x0174, 0x0174, d{0, 1, 0}}, + CaseRange{0x0175, 0x0175, d{-1, 0, -1}}, + CaseRange{0x0176, 0x0176, d{0, 1, 0}}, + CaseRange{0x0177, 0x0177, d{-1, 0, -1}}, + CaseRange{0x0178, 0x0178, d{0, -121, 0}}, + CaseRange{0x0179, 0x0179, d{0, 1, 0}}, + CaseRange{0x017A, 0x017A, d{-1, 0, -1}}, + CaseRange{0x017B, 0x017B, d{0, 1, 0}}, + CaseRange{0x017C, 0x017C, d{-1, 0, -1}}, + CaseRange{0x017D, 0x017D, d{0, 1, 0}}, + CaseRange{0x017E, 0x017E, d{-1, 0, -1}}, + CaseRange{0x017F, 0x017F, d{-300, 0, -300}}, + CaseRange{0x0180, 0x0180, d{195, 0, 195}}, + CaseRange{0x0181, 0x0181, d{0, 210, 0}}, + CaseRange{0x0182, 0x0182, d{0, 1, 0}}, + CaseRange{0x0183, 0x0183, d{-1, 0, -1}}, + CaseRange{0x0184, 0x0184, d{0, 1, 0}}, + CaseRange{0x0185, 0x0185, d{-1, 0, -1}}, + CaseRange{0x0186, 0x0186, d{0, 206, 0}}, + CaseRange{0x0187, 0x0187, d{0, 1, 0}}, + CaseRange{0x0188, 0x0188, d{-1, 0, -1}}, + CaseRange{0x0189, 0x018A, d{0, 205, 0}}, + CaseRange{0x018B, 0x018B, d{0, 1, 0}}, + CaseRange{0x018C, 0x018C, d{-1, 0, -1}}, + CaseRange{0x018E, 0x018E, d{0, 79, 0}}, + CaseRange{0x018F, 0x018F, d{0, 202, 0}}, + CaseRange{0x0190, 0x0190, d{0, 203, 0}}, + CaseRange{0x0191, 0x0191, d{0, 1, 0}}, + CaseRange{0x0192, 0x0192, d{-1, 0, -1}}, + CaseRange{0x0193, 0x0193, d{0, 205, 0}}, + CaseRange{0x0194, 0x0194, d{0, 207, 0}}, + CaseRange{0x0195, 0x0195, d{97, 0, 97}}, + CaseRange{0x0196, 0x0196, d{0, 211, 0}}, + CaseRange{0x0197, 0x0197, d{0, 209, 0}}, + CaseRange{0x0198, 0x0198, d{0, 1, 0}}, + CaseRange{0x0199, 0x0199, d{-1, 0, -1}}, + CaseRange{0x019A, 0x019A, d{163, 0, 163}}, + CaseRange{0x019C, 0x019C, d{0, 211, 0}}, + CaseRange{0x019D, 0x019D, d{0, 213, 0}}, + CaseRange{0x019E, 0x019E, d{130, 0, 130}}, + CaseRange{0x019F, 0x019F, d{0, 214, 0}}, + CaseRange{0x01A0, 0x01A0, d{0, 1, 0}}, + CaseRange{0x01A1, 0x01A1, d{-1, 0, -1}}, + CaseRange{0x01A2, 0x01A2, d{0, 1, 0}}, + CaseRange{0x01A3, 0x01A3, d{-1, 0, -1}}, + CaseRange{0x01A4, 0x01A4, d{0, 1, 0}}, + CaseRange{0x01A5, 0x01A5, d{-1, 0, -1}}, + CaseRange{0x01A6, 0x01A6, d{0, 218, 0}}, + CaseRange{0x01A7, 0x01A7, d{0, 1, 0}}, + CaseRange{0x01A8, 0x01A8, d{-1, 0, -1}}, + CaseRange{0x01A9, 0x01A9, d{0, 218, 0}}, + CaseRange{0x01AC, 0x01AC, d{0, 1, 0}}, + CaseRange{0x01AD, 0x01AD, d{-1, 0, -1}}, + CaseRange{0x01AE, 0x01AE, d{0, 218, 0}}, + CaseRange{0x01AF, 0x01AF, d{0, 1, 0}}, + CaseRange{0x01B0, 0x01B0, d{-1, 0, -1}}, + CaseRange{0x01B1, 0x01B2, d{0, 217, 0}}, + CaseRange{0x01B3, 0x01B3, d{0, 1, 0}}, + CaseRange{0x01B4, 0x01B4, d{-1, 0, -1}}, + CaseRange{0x01B5, 0x01B5, d{0, 1, 0}}, + CaseRange{0x01B6, 0x01B6, d{-1, 0, -1}}, + CaseRange{0x01B7, 0x01B7, d{0, 219, 0}}, + CaseRange{0x01B8, 0x01B8, d{0, 1, 0}}, + CaseRange{0x01B9, 0x01B9, d{-1, 0, -1}}, + CaseRange{0x01BC, 0x01BC, d{0, 1, 0}}, + CaseRange{0x01BD, 0x01BD, d{-1, 0, -1}}, + CaseRange{0x01BF, 0x01BF, d{56, 0, 56}}, + CaseRange{0x01C4, 0x01C4, d{0, 2, 1}}, + CaseRange{0x01C5, 0x01C5, d{-1, 1, 0}}, + CaseRange{0x01C6, 0x01C6, d{-2, 0, -1}}, + CaseRange{0x01C7, 0x01C7, d{0, 2, 1}}, + CaseRange{0x01C8, 0x01C8, d{-1, 1, 0}}, + CaseRange{0x01C9, 0x01C9, d{-2, 0, -1}}, + CaseRange{0x01CA, 0x01CA, d{0, 2, 1}}, + CaseRange{0x01CB, 0x01CB, d{-1, 1, 0}}, + CaseRange{0x01CC, 0x01CC, d{-2, 0, -1}}, + CaseRange{0x01CD, 0x01CD, d{0, 1, 0}}, + CaseRange{0x01CE, 0x01CE, d{-1, 0, -1}}, + CaseRange{0x01CF, 0x01CF, d{0, 1, 0}}, + CaseRange{0x01D0, 0x01D0, d{-1, 0, -1}}, + CaseRange{0x01D1, 0x01D1, d{0, 1, 0}}, + CaseRange{0x01D2, 0x01D2, d{-1, 0, -1}}, + CaseRange{0x01D3, 0x01D3, d{0, 1, 0}}, + CaseRange{0x01D4, 0x01D4, d{-1, 0, -1}}, + CaseRange{0x01D5, 0x01D5, d{0, 1, 0}}, + CaseRange{0x01D6, 0x01D6, d{-1, 0, -1}}, + CaseRange{0x01D7, 0x01D7, d{0, 1, 0}}, + CaseRange{0x01D8, 0x01D8, d{-1, 0, -1}}, + CaseRange{0x01D9, 0x01D9, d{0, 1, 0}}, + CaseRange{0x01DA, 0x01DA, d{-1, 0, -1}}, + CaseRange{0x01DB, 0x01DB, d{0, 1, 0}}, + CaseRange{0x01DC, 0x01DC, d{-1, 0, -1}}, + CaseRange{0x01DD, 0x01DD, d{-79, 0, -79}}, + CaseRange{0x01DE, 0x01DE, d{0, 1, 0}}, + CaseRange{0x01DF, 0x01DF, d{-1, 0, -1}}, + CaseRange{0x01E0, 0x01E0, d{0, 1, 0}}, + CaseRange{0x01E1, 0x01E1, d{-1, 0, -1}}, + CaseRange{0x01E2, 0x01E2, d{0, 1, 0}}, + CaseRange{0x01E3, 0x01E3, d{-1, 0, -1}}, + CaseRange{0x01E4, 0x01E4, d{0, 1, 0}}, + CaseRange{0x01E5, 0x01E5, d{-1, 0, -1}}, + CaseRange{0x01E6, 0x01E6, d{0, 1, 0}}, + CaseRange{0x01E7, 0x01E7, d{-1, 0, -1}}, + CaseRange{0x01E8, 0x01E8, d{0, 1, 0}}, + CaseRange{0x01E9, 0x01E9, d{-1, 0, -1}}, + CaseRange{0x01EA, 0x01EA, d{0, 1, 0}}, + CaseRange{0x01EB, 0x01EB, d{-1, 0, -1}}, + CaseRange{0x01EC, 0x01EC, d{0, 1, 0}}, + CaseRange{0x01ED, 0x01ED, d{-1, 0, -1}}, + CaseRange{0x01EE, 0x01EE, d{0, 1, 0}}, + CaseRange{0x01EF, 0x01EF, d{-1, 0, -1}}, + CaseRange{0x01F1, 0x01F1, d{0, 2, 1}}, + CaseRange{0x01F2, 0x01F2, d{-1, 1, 0}}, + CaseRange{0x01F3, 0x01F3, d{-2, 0, -1}}, + CaseRange{0x01F4, 0x01F4, d{0, 1, 0}}, + CaseRange{0x01F5, 0x01F5, d{-1, 0, -1}}, + CaseRange{0x01F6, 0x01F6, d{0, -97, 0}}, + CaseRange{0x01F7, 0x01F7, d{0, -56, 0}}, + CaseRange{0x01F8, 0x01F8, d{0, 1, 0}}, + CaseRange{0x01F9, 0x01F9, d{-1, 0, -1}}, + CaseRange{0x01FA, 0x01FA, d{0, 1, 0}}, + CaseRange{0x01FB, 0x01FB, d{-1, 0, -1}}, + CaseRange{0x01FC, 0x01FC, d{0, 1, 0}}, + CaseRange{0x01FD, 0x01FD, d{-1, 0, -1}}, + CaseRange{0x01FE, 0x01FE, d{0, 1, 0}}, + CaseRange{0x01FF, 0x01FF, d{-1, 0, -1}}, + CaseRange{0x0200, 0x0200, d{0, 1, 0}}, + CaseRange{0x0201, 0x0201, d{-1, 0, -1}}, + CaseRange{0x0202, 0x0202, d{0, 1, 0}}, + CaseRange{0x0203, 0x0203, d{-1, 0, -1}}, + CaseRange{0x0204, 0x0204, d{0, 1, 0}}, + CaseRange{0x0205, 0x0205, d{-1, 0, -1}}, + CaseRange{0x0206, 0x0206, d{0, 1, 0}}, + CaseRange{0x0207, 0x0207, d{-1, 0, -1}}, + CaseRange{0x0208, 0x0208, d{0, 1, 0}}, + CaseRange{0x0209, 0x0209, d{-1, 0, -1}}, + CaseRange{0x020A, 0x020A, d{0, 1, 0}}, + CaseRange{0x020B, 0x020B, d{-1, 0, -1}}, + CaseRange{0x020C, 0x020C, d{0, 1, 0}}, + CaseRange{0x020D, 0x020D, d{-1, 0, -1}}, + CaseRange{0x020E, 0x020E, d{0, 1, 0}}, + CaseRange{0x020F, 0x020F, d{-1, 0, -1}}, + CaseRange{0x0210, 0x0210, d{0, 1, 0}}, + CaseRange{0x0211, 0x0211, d{-1, 0, -1}}, + CaseRange{0x0212, 0x0212, d{0, 1, 0}}, + CaseRange{0x0213, 0x0213, d{-1, 0, -1}}, + CaseRange{0x0214, 0x0214, d{0, 1, 0}}, + CaseRange{0x0215, 0x0215, d{-1, 0, -1}}, + CaseRange{0x0216, 0x0216, d{0, 1, 0}}, + CaseRange{0x0217, 0x0217, d{-1, 0, -1}}, + CaseRange{0x0218, 0x0218, d{0, 1, 0}}, + CaseRange{0x0219, 0x0219, d{-1, 0, -1}}, + CaseRange{0x021A, 0x021A, d{0, 1, 0}}, + CaseRange{0x021B, 0x021B, d{-1, 0, -1}}, + CaseRange{0x021C, 0x021C, d{0, 1, 0}}, + CaseRange{0x021D, 0x021D, d{-1, 0, -1}}, + CaseRange{0x021E, 0x021E, d{0, 1, 0}}, + CaseRange{0x021F, 0x021F, d{-1, 0, -1}}, + CaseRange{0x0220, 0x0220, d{0, -130, 0}}, + CaseRange{0x0222, 0x0222, d{0, 1, 0}}, + CaseRange{0x0223, 0x0223, d{-1, 0, -1}}, + CaseRange{0x0224, 0x0224, d{0, 1, 0}}, + CaseRange{0x0225, 0x0225, d{-1, 0, -1}}, + CaseRange{0x0226, 0x0226, d{0, 1, 0}}, + CaseRange{0x0227, 0x0227, d{-1, 0, -1}}, + CaseRange{0x0228, 0x0228, d{0, 1, 0}}, + CaseRange{0x0229, 0x0229, d{-1, 0, -1}}, + CaseRange{0x022A, 0x022A, d{0, 1, 0}}, + CaseRange{0x022B, 0x022B, d{-1, 0, -1}}, + CaseRange{0x022C, 0x022C, d{0, 1, 0}}, + CaseRange{0x022D, 0x022D, d{-1, 0, -1}}, + CaseRange{0x022E, 0x022E, d{0, 1, 0}}, + CaseRange{0x022F, 0x022F, d{-1, 0, -1}}, + CaseRange{0x0230, 0x0230, d{0, 1, 0}}, + CaseRange{0x0231, 0x0231, d{-1, 0, -1}}, + CaseRange{0x0232, 0x0232, d{0, 1, 0}}, + CaseRange{0x0233, 0x0233, d{-1, 0, -1}}, + CaseRange{0x023A, 0x023A, d{0, 10795, 0}}, + CaseRange{0x023B, 0x023B, d{0, 1, 0}}, + CaseRange{0x023C, 0x023C, d{-1, 0, -1}}, + CaseRange{0x023D, 0x023D, d{0, -163, 0}}, + CaseRange{0x023E, 0x023E, d{0, 10792, 0}}, + CaseRange{0x0241, 0x0241, d{0, 1, 0}}, + CaseRange{0x0242, 0x0242, d{-1, 0, -1}}, + CaseRange{0x0243, 0x0243, d{0, -195, 0}}, + CaseRange{0x0244, 0x0244, d{0, 69, 0}}, + CaseRange{0x0245, 0x0245, d{0, 71, 0}}, + CaseRange{0x0246, 0x0246, d{0, 1, 0}}, + CaseRange{0x0247, 0x0247, d{-1, 0, -1}}, + CaseRange{0x0248, 0x0248, d{0, 1, 0}}, + CaseRange{0x0249, 0x0249, d{-1, 0, -1}}, + CaseRange{0x024A, 0x024A, d{0, 1, 0}}, + CaseRange{0x024B, 0x024B, d{-1, 0, -1}}, + CaseRange{0x024C, 0x024C, d{0, 1, 0}}, + CaseRange{0x024D, 0x024D, d{-1, 0, -1}}, + CaseRange{0x024E, 0x024E, d{0, 1, 0}}, + CaseRange{0x024F, 0x024F, d{-1, 0, -1}}, + CaseRange{0x0250, 0x0250, d{10783, 0, 10783}}, + CaseRange{0x0251, 0x0251, d{10780, 0, 10780}}, + CaseRange{0x0253, 0x0253, d{-210, 0, -210}}, + CaseRange{0x0254, 0x0254, d{-206, 0, -206}}, + CaseRange{0x0256, 0x0257, d{-205, 0, -205}}, + CaseRange{0x0259, 0x0259, d{-202, 0, -202}}, + CaseRange{0x025B, 0x025B, d{-203, 0, -203}}, + CaseRange{0x0260, 0x0260, d{-205, 0, -205}}, + CaseRange{0x0263, 0x0263, d{-207, 0, -207}}, + CaseRange{0x0268, 0x0268, d{-209, 0, -209}}, + CaseRange{0x0269, 0x0269, d{-211, 0, -211}}, + CaseRange{0x026B, 0x026B, d{10743, 0, 10743}}, + CaseRange{0x026F, 0x026F, d{-211, 0, -211}}, + CaseRange{0x0271, 0x0271, d{10749, 0, 10749}}, + CaseRange{0x0272, 0x0272, d{-213, 0, -213}}, + CaseRange{0x0275, 0x0275, d{-214, 0, -214}}, + CaseRange{0x027D, 0x027D, d{10727, 0, 10727}}, + CaseRange{0x0280, 0x0280, d{-218, 0, -218}}, + CaseRange{0x0283, 0x0283, d{-218, 0, -218}}, + CaseRange{0x0288, 0x0288, d{-218, 0, -218}}, + CaseRange{0x0289, 0x0289, d{-69, 0, -69}}, + CaseRange{0x028A, 0x028B, d{-217, 0, -217}}, + CaseRange{0x028C, 0x028C, d{-71, 0, -71}}, + CaseRange{0x0292, 0x0292, d{-219, 0, -219}}, + CaseRange{0x0370, 0x0370, d{0, 1, 0}}, + CaseRange{0x0371, 0x0371, d{-1, 0, -1}}, + CaseRange{0x0372, 0x0372, d{0, 1, 0}}, + CaseRange{0x0373, 0x0373, d{-1, 0, -1}}, + CaseRange{0x0376, 0x0376, d{0, 1, 0}}, + CaseRange{0x0377, 0x0377, d{-1, 0, -1}}, + CaseRange{0x037B, 0x037D, d{130, 0, 130}}, + CaseRange{0x0386, 0x0386, d{0, 38, 0}}, + CaseRange{0x0388, 0x038A, d{0, 37, 0}}, + CaseRange{0x038C, 0x038C, d{0, 64, 0}}, + CaseRange{0x038E, 0x038F, d{0, 63, 0}}, + CaseRange{0x0391, 0x03A1, d{0, 32, 0}}, + CaseRange{0x03A3, 0x03AB, d{0, 32, 0}}, + CaseRange{0x03AC, 0x03AC, d{-38, 0, -38}}, + CaseRange{0x03AD, 0x03AF, d{-37, 0, -37}}, + CaseRange{0x03B1, 0x03C1, d{-32, 0, -32}}, + CaseRange{0x03C2, 0x03C2, d{-31, 0, -31}}, + CaseRange{0x03C3, 0x03CB, d{-32, 0, -32}}, + CaseRange{0x03CC, 0x03CC, d{-64, 0, -64}}, + CaseRange{0x03CD, 0x03CE, d{-63, 0, -63}}, + CaseRange{0x03CF, 0x03CF, d{0, 8, 0}}, + CaseRange{0x03D0, 0x03D0, d{-62, 0, -62}}, + CaseRange{0x03D1, 0x03D1, d{-57, 0, -57}}, + CaseRange{0x03D5, 0x03D5, d{-47, 0, -47}}, + CaseRange{0x03D6, 0x03D6, d{-54, 0, -54}}, + CaseRange{0x03D7, 0x03D7, d{-8, 0, -8}}, + CaseRange{0x03D8, 0x03D8, d{0, 1, 0}}, + CaseRange{0x03D9, 0x03D9, d{-1, 0, -1}}, + CaseRange{0x03DA, 0x03DA, d{0, 1, 0}}, + CaseRange{0x03DB, 0x03DB, d{-1, 0, -1}}, + CaseRange{0x03DC, 0x03DC, d{0, 1, 0}}, + CaseRange{0x03DD, 0x03DD, d{-1, 0, -1}}, + CaseRange{0x03DE, 0x03DE, d{0, 1, 0}}, + CaseRange{0x03DF, 0x03DF, d{-1, 0, -1}}, + CaseRange{0x03E0, 0x03E0, d{0, 1, 0}}, + CaseRange{0x03E1, 0x03E1, d{-1, 0, -1}}, + CaseRange{0x03E2, 0x03E2, d{0, 1, 0}}, + CaseRange{0x03E3, 0x03E3, d{-1, 0, -1}}, + CaseRange{0x03E4, 0x03E4, d{0, 1, 0}}, + CaseRange{0x03E5, 0x03E5, d{-1, 0, -1}}, + CaseRange{0x03E6, 0x03E6, d{0, 1, 0}}, + CaseRange{0x03E7, 0x03E7, d{-1, 0, -1}}, + CaseRange{0x03E8, 0x03E8, d{0, 1, 0}}, + CaseRange{0x03E9, 0x03E9, d{-1, 0, -1}}, + CaseRange{0x03EA, 0x03EA, d{0, 1, 0}}, + CaseRange{0x03EB, 0x03EB, d{-1, 0, -1}}, + CaseRange{0x03EC, 0x03EC, d{0, 1, 0}}, + CaseRange{0x03ED, 0x03ED, d{-1, 0, -1}}, + CaseRange{0x03EE, 0x03EE, d{0, 1, 0}}, + CaseRange{0x03EF, 0x03EF, d{-1, 0, -1}}, + CaseRange{0x03F0, 0x03F0, d{-86, 0, -86}}, + CaseRange{0x03F1, 0x03F1, d{-80, 0, -80}}, + CaseRange{0x03F2, 0x03F2, d{7, 0, 7}}, + CaseRange{0x03F4, 0x03F4, d{0, -60, 0}}, + CaseRange{0x03F5, 0x03F5, d{-96, 0, -96}}, + CaseRange{0x03F7, 0x03F7, d{0, 1, 0}}, + CaseRange{0x03F8, 0x03F8, d{-1, 0, -1}}, + CaseRange{0x03F9, 0x03F9, d{0, -7, 0}}, + CaseRange{0x03FA, 0x03FA, d{0, 1, 0}}, + CaseRange{0x03FB, 0x03FB, d{-1, 0, -1}}, + CaseRange{0x03FD, 0x03FF, d{0, -130, 0}}, + CaseRange{0x0400, 0x040F, d{0, 80, 0}}, + CaseRange{0x0410, 0x042F, d{0, 32, 0}}, + CaseRange{0x0430, 0x044F, d{-32, 0, -32}}, + CaseRange{0x0450, 0x045F, d{-80, 0, -80}}, + CaseRange{0x0460, 0x0460, d{0, 1, 0}}, + CaseRange{0x0461, 0x0461, d{-1, 0, -1}}, + CaseRange{0x0462, 0x0462, d{0, 1, 0}}, + CaseRange{0x0463, 0x0463, d{-1, 0, -1}}, + CaseRange{0x0464, 0x0464, d{0, 1, 0}}, + CaseRange{0x0465, 0x0465, d{-1, 0, -1}}, + CaseRange{0x0466, 0x0466, d{0, 1, 0}}, + CaseRange{0x0467, 0x0467, d{-1, 0, -1}}, + CaseRange{0x0468, 0x0468, d{0, 1, 0}}, + CaseRange{0x0469, 0x0469, d{-1, 0, -1}}, + CaseRange{0x046A, 0x046A, d{0, 1, 0}}, + CaseRange{0x046B, 0x046B, d{-1, 0, -1}}, + CaseRange{0x046C, 0x046C, d{0, 1, 0}}, + CaseRange{0x046D, 0x046D, d{-1, 0, -1}}, + CaseRange{0x046E, 0x046E, d{0, 1, 0}}, + CaseRange{0x046F, 0x046F, d{-1, 0, -1}}, + CaseRange{0x0470, 0x0470, d{0, 1, 0}}, + CaseRange{0x0471, 0x0471, d{-1, 0, -1}}, + CaseRange{0x0472, 0x0472, d{0, 1, 0}}, + CaseRange{0x0473, 0x0473, d{-1, 0, -1}}, + CaseRange{0x0474, 0x0474, d{0, 1, 0}}, + CaseRange{0x0475, 0x0475, d{-1, 0, -1}}, + CaseRange{0x0476, 0x0476, d{0, 1, 0}}, + CaseRange{0x0477, 0x0477, d{-1, 0, -1}}, + CaseRange{0x0478, 0x0478, d{0, 1, 0}}, + CaseRange{0x0479, 0x0479, d{-1, 0, -1}}, + CaseRange{0x047A, 0x047A, d{0, 1, 0}}, + CaseRange{0x047B, 0x047B, d{-1, 0, -1}}, + CaseRange{0x047C, 0x047C, d{0, 1, 0}}, + CaseRange{0x047D, 0x047D, d{-1, 0, -1}}, + CaseRange{0x047E, 0x047E, d{0, 1, 0}}, + CaseRange{0x047F, 0x047F, d{-1, 0, -1}}, + CaseRange{0x0480, 0x0480, d{0, 1, 0}}, + CaseRange{0x0481, 0x0481, d{-1, 0, -1}}, + CaseRange{0x048A, 0x048A, d{0, 1, 0}}, + CaseRange{0x048B, 0x048B, d{-1, 0, -1}}, + CaseRange{0x048C, 0x048C, d{0, 1, 0}}, + CaseRange{0x048D, 0x048D, d{-1, 0, -1}}, + CaseRange{0x048E, 0x048E, d{0, 1, 0}}, + CaseRange{0x048F, 0x048F, d{-1, 0, -1}}, + CaseRange{0x0490, 0x0490, d{0, 1, 0}}, + CaseRange{0x0491, 0x0491, d{-1, 0, -1}}, + CaseRange{0x0492, 0x0492, d{0, 1, 0}}, + CaseRange{0x0493, 0x0493, d{-1, 0, -1}}, + CaseRange{0x0494, 0x0494, d{0, 1, 0}}, + CaseRange{0x0495, 0x0495, d{-1, 0, -1}}, + CaseRange{0x0496, 0x0496, d{0, 1, 0}}, + CaseRange{0x0497, 0x0497, d{-1, 0, -1}}, + CaseRange{0x0498, 0x0498, d{0, 1, 0}}, + CaseRange{0x0499, 0x0499, d{-1, 0, -1}}, + CaseRange{0x049A, 0x049A, d{0, 1, 0}}, + CaseRange{0x049B, 0x049B, d{-1, 0, -1}}, + CaseRange{0x049C, 0x049C, d{0, 1, 0}}, + CaseRange{0x049D, 0x049D, d{-1, 0, -1}}, + CaseRange{0x049E, 0x049E, d{0, 1, 0}}, + CaseRange{0x049F, 0x049F, d{-1, 0, -1}}, + CaseRange{0x04A0, 0x04A0, d{0, 1, 0}}, + CaseRange{0x04A1, 0x04A1, d{-1, 0, -1}}, + CaseRange{0x04A2, 0x04A2, d{0, 1, 0}}, + CaseRange{0x04A3, 0x04A3, d{-1, 0, -1}}, + CaseRange{0x04A4, 0x04A4, d{0, 1, 0}}, + CaseRange{0x04A5, 0x04A5, d{-1, 0, -1}}, + CaseRange{0x04A6, 0x04A6, d{0, 1, 0}}, + CaseRange{0x04A7, 0x04A7, d{-1, 0, -1}}, + CaseRange{0x04A8, 0x04A8, d{0, 1, 0}}, + CaseRange{0x04A9, 0x04A9, d{-1, 0, -1}}, + CaseRange{0x04AA, 0x04AA, d{0, 1, 0}}, + CaseRange{0x04AB, 0x04AB, d{-1, 0, -1}}, + CaseRange{0x04AC, 0x04AC, d{0, 1, 0}}, + CaseRange{0x04AD, 0x04AD, d{-1, 0, -1}}, + CaseRange{0x04AE, 0x04AE, d{0, 1, 0}}, + CaseRange{0x04AF, 0x04AF, d{-1, 0, -1}}, + CaseRange{0x04B0, 0x04B0, d{0, 1, 0}}, + CaseRange{0x04B1, 0x04B1, d{-1, 0, -1}}, + CaseRange{0x04B2, 0x04B2, d{0, 1, 0}}, + CaseRange{0x04B3, 0x04B3, d{-1, 0, -1}}, + CaseRange{0x04B4, 0x04B4, d{0, 1, 0}}, + CaseRange{0x04B5, 0x04B5, d{-1, 0, -1}}, + CaseRange{0x04B6, 0x04B6, d{0, 1, 0}}, + CaseRange{0x04B7, 0x04B7, d{-1, 0, -1}}, + CaseRange{0x04B8, 0x04B8, d{0, 1, 0}}, + CaseRange{0x04B9, 0x04B9, d{-1, 0, -1}}, + CaseRange{0x04BA, 0x04BA, d{0, 1, 0}}, + CaseRange{0x04BB, 0x04BB, d{-1, 0, -1}}, + CaseRange{0x04BC, 0x04BC, d{0, 1, 0}}, + CaseRange{0x04BD, 0x04BD, d{-1, 0, -1}}, + CaseRange{0x04BE, 0x04BE, d{0, 1, 0}}, + CaseRange{0x04BF, 0x04BF, d{-1, 0, -1}}, + CaseRange{0x04C0, 0x04C0, d{0, 15, 0}}, + CaseRange{0x04C1, 0x04C1, d{0, 1, 0}}, + CaseRange{0x04C2, 0x04C2, d{-1, 0, -1}}, + CaseRange{0x04C3, 0x04C3, d{0, 1, 0}}, + CaseRange{0x04C4, 0x04C4, d{-1, 0, -1}}, + CaseRange{0x04C5, 0x04C5, d{0, 1, 0}}, + CaseRange{0x04C6, 0x04C6, d{-1, 0, -1}}, + CaseRange{0x04C7, 0x04C7, d{0, 1, 0}}, + CaseRange{0x04C8, 0x04C8, d{-1, 0, -1}}, + CaseRange{0x04C9, 0x04C9, d{0, 1, 0}}, + CaseRange{0x04CA, 0x04CA, d{-1, 0, -1}}, + CaseRange{0x04CB, 0x04CB, d{0, 1, 0}}, + CaseRange{0x04CC, 0x04CC, d{-1, 0, -1}}, + CaseRange{0x04CD, 0x04CD, d{0, 1, 0}}, + CaseRange{0x04CE, 0x04CE, d{-1, 0, -1}}, + CaseRange{0x04CF, 0x04CF, d{-15, 0, -15}}, + CaseRange{0x04D0, 0x04D0, d{0, 1, 0}}, + CaseRange{0x04D1, 0x04D1, d{-1, 0, -1}}, + CaseRange{0x04D2, 0x04D2, d{0, 1, 0}}, + CaseRange{0x04D3, 0x04D3, d{-1, 0, -1}}, + CaseRange{0x04D4, 0x04D4, d{0, 1, 0}}, + CaseRange{0x04D5, 0x04D5, d{-1, 0, -1}}, + CaseRange{0x04D6, 0x04D6, d{0, 1, 0}}, + CaseRange{0x04D7, 0x04D7, d{-1, 0, -1}}, + CaseRange{0x04D8, 0x04D8, d{0, 1, 0}}, + CaseRange{0x04D9, 0x04D9, d{-1, 0, -1}}, + CaseRange{0x04DA, 0x04DA, d{0, 1, 0}}, + CaseRange{0x04DB, 0x04DB, d{-1, 0, -1}}, + CaseRange{0x04DC, 0x04DC, d{0, 1, 0}}, + CaseRange{0x04DD, 0x04DD, d{-1, 0, -1}}, + CaseRange{0x04DE, 0x04DE, d{0, 1, 0}}, + CaseRange{0x04DF, 0x04DF, d{-1, 0, -1}}, + CaseRange{0x04E0, 0x04E0, d{0, 1, 0}}, + CaseRange{0x04E1, 0x04E1, d{-1, 0, -1}}, + CaseRange{0x04E2, 0x04E2, d{0, 1, 0}}, + CaseRange{0x04E3, 0x04E3, d{-1, 0, -1}}, + CaseRange{0x04E4, 0x04E4, d{0, 1, 0}}, + CaseRange{0x04E5, 0x04E5, d{-1, 0, -1}}, + CaseRange{0x04E6, 0x04E6, d{0, 1, 0}}, + CaseRange{0x04E7, 0x04E7, d{-1, 0, -1}}, + CaseRange{0x04E8, 0x04E8, d{0, 1, 0}}, + CaseRange{0x04E9, 0x04E9, d{-1, 0, -1}}, + CaseRange{0x04EA, 0x04EA, d{0, 1, 0}}, + CaseRange{0x04EB, 0x04EB, d{-1, 0, -1}}, + CaseRange{0x04EC, 0x04EC, d{0, 1, 0}}, + CaseRange{0x04ED, 0x04ED, d{-1, 0, -1}}, + CaseRange{0x04EE, 0x04EE, d{0, 1, 0}}, + CaseRange{0x04EF, 0x04EF, d{-1, 0, -1}}, + CaseRange{0x04F0, 0x04F0, d{0, 1, 0}}, + CaseRange{0x04F1, 0x04F1, d{-1, 0, -1}}, + CaseRange{0x04F2, 0x04F2, d{0, 1, 0}}, + CaseRange{0x04F3, 0x04F3, d{-1, 0, -1}}, + CaseRange{0x04F4, 0x04F4, d{0, 1, 0}}, + CaseRange{0x04F5, 0x04F5, d{-1, 0, -1}}, + CaseRange{0x04F6, 0x04F6, d{0, 1, 0}}, + CaseRange{0x04F7, 0x04F7, d{-1, 0, -1}}, + CaseRange{0x04F8, 0x04F8, d{0, 1, 0}}, + CaseRange{0x04F9, 0x04F9, d{-1, 0, -1}}, + CaseRange{0x04FA, 0x04FA, d{0, 1, 0}}, + CaseRange{0x04FB, 0x04FB, d{-1, 0, -1}}, + CaseRange{0x04FC, 0x04FC, d{0, 1, 0}}, + CaseRange{0x04FD, 0x04FD, d{-1, 0, -1}}, + CaseRange{0x04FE, 0x04FE, d{0, 1, 0}}, + CaseRange{0x04FF, 0x04FF, d{-1, 0, -1}}, + CaseRange{0x0500, 0x0500, d{0, 1, 0}}, + CaseRange{0x0501, 0x0501, d{-1, 0, -1}}, + CaseRange{0x0502, 0x0502, d{0, 1, 0}}, + CaseRange{0x0503, 0x0503, d{-1, 0, -1}}, + CaseRange{0x0504, 0x0504, d{0, 1, 0}}, + CaseRange{0x0505, 0x0505, d{-1, 0, -1}}, + CaseRange{0x0506, 0x0506, d{0, 1, 0}}, + CaseRange{0x0507, 0x0507, d{-1, 0, -1}}, + CaseRange{0x0508, 0x0508, d{0, 1, 0}}, + CaseRange{0x0509, 0x0509, d{-1, 0, -1}}, + CaseRange{0x050A, 0x050A, d{0, 1, 0}}, + CaseRange{0x050B, 0x050B, d{-1, 0, -1}}, + CaseRange{0x050C, 0x050C, d{0, 1, 0}}, + CaseRange{0x050D, 0x050D, d{-1, 0, -1}}, + CaseRange{0x050E, 0x050E, d{0, 1, 0}}, + CaseRange{0x050F, 0x050F, d{-1, 0, -1}}, + CaseRange{0x0510, 0x0510, d{0, 1, 0}}, + CaseRange{0x0511, 0x0511, d{-1, 0, -1}}, + CaseRange{0x0512, 0x0512, d{0, 1, 0}}, + CaseRange{0x0513, 0x0513, d{-1, 0, -1}}, + CaseRange{0x0514, 0x0514, d{0, 1, 0}}, + CaseRange{0x0515, 0x0515, d{-1, 0, -1}}, + CaseRange{0x0516, 0x0516, d{0, 1, 0}}, + CaseRange{0x0517, 0x0517, d{-1, 0, -1}}, + CaseRange{0x0518, 0x0518, d{0, 1, 0}}, + CaseRange{0x0519, 0x0519, d{-1, 0, -1}}, + CaseRange{0x051A, 0x051A, d{0, 1, 0}}, + CaseRange{0x051B, 0x051B, d{-1, 0, -1}}, + CaseRange{0x051C, 0x051C, d{0, 1, 0}}, + CaseRange{0x051D, 0x051D, d{-1, 0, -1}}, + CaseRange{0x051E, 0x051E, d{0, 1, 0}}, + CaseRange{0x051F, 0x051F, d{-1, 0, -1}}, + CaseRange{0x0520, 0x0520, d{0, 1, 0}}, + CaseRange{0x0521, 0x0521, d{-1, 0, -1}}, + CaseRange{0x0522, 0x0522, d{0, 1, 0}}, + CaseRange{0x0523, 0x0523, d{-1, 0, -1}}, + CaseRange{0x0531, 0x0556, d{0, 48, 0}}, + CaseRange{0x0561, 0x0586, d{-48, 0, -48}}, + CaseRange{0x10A0, 0x10C5, d{0, 7264, 0}}, + CaseRange{0x1D79, 0x1D79, d{35332, 0, 35332}}, + CaseRange{0x1D7D, 0x1D7D, d{3814, 0, 3814}}, + CaseRange{0x1E00, 0x1E00, d{0, 1, 0}}, + CaseRange{0x1E01, 0x1E01, d{-1, 0, -1}}, + CaseRange{0x1E02, 0x1E02, d{0, 1, 0}}, + CaseRange{0x1E03, 0x1E03, d{-1, 0, -1}}, + CaseRange{0x1E04, 0x1E04, d{0, 1, 0}}, + CaseRange{0x1E05, 0x1E05, d{-1, 0, -1}}, + CaseRange{0x1E06, 0x1E06, d{0, 1, 0}}, + CaseRange{0x1E07, 0x1E07, d{-1, 0, -1}}, + CaseRange{0x1E08, 0x1E08, d{0, 1, 0}}, + CaseRange{0x1E09, 0x1E09, d{-1, 0, -1}}, + CaseRange{0x1E0A, 0x1E0A, d{0, 1, 0}}, + CaseRange{0x1E0B, 0x1E0B, d{-1, 0, -1}}, + CaseRange{0x1E0C, 0x1E0C, d{0, 1, 0}}, + CaseRange{0x1E0D, 0x1E0D, d{-1, 0, -1}}, + CaseRange{0x1E0E, 0x1E0E, d{0, 1, 0}}, + CaseRange{0x1E0F, 0x1E0F, d{-1, 0, -1}}, + CaseRange{0x1E10, 0x1E10, d{0, 1, 0}}, + CaseRange{0x1E11, 0x1E11, d{-1, 0, -1}}, + CaseRange{0x1E12, 0x1E12, d{0, 1, 0}}, + CaseRange{0x1E13, 0x1E13, d{-1, 0, -1}}, + CaseRange{0x1E14, 0x1E14, d{0, 1, 0}}, + CaseRange{0x1E15, 0x1E15, d{-1, 0, -1}}, + CaseRange{0x1E16, 0x1E16, d{0, 1, 0}}, + CaseRange{0x1E17, 0x1E17, d{-1, 0, -1}}, + CaseRange{0x1E18, 0x1E18, d{0, 1, 0}}, + CaseRange{0x1E19, 0x1E19, d{-1, 0, -1}}, + CaseRange{0x1E1A, 0x1E1A, d{0, 1, 0}}, + CaseRange{0x1E1B, 0x1E1B, d{-1, 0, -1}}, + CaseRange{0x1E1C, 0x1E1C, d{0, 1, 0}}, + CaseRange{0x1E1D, 0x1E1D, d{-1, 0, -1}}, + CaseRange{0x1E1E, 0x1E1E, d{0, 1, 0}}, + CaseRange{0x1E1F, 0x1E1F, d{-1, 0, -1}}, + CaseRange{0x1E20, 0x1E20, d{0, 1, 0}}, + CaseRange{0x1E21, 0x1E21, d{-1, 0, -1}}, + CaseRange{0x1E22, 0x1E22, d{0, 1, 0}}, + CaseRange{0x1E23, 0x1E23, d{-1, 0, -1}}, + CaseRange{0x1E24, 0x1E24, d{0, 1, 0}}, + CaseRange{0x1E25, 0x1E25, d{-1, 0, -1}}, + CaseRange{0x1E26, 0x1E26, d{0, 1, 0}}, + CaseRange{0x1E27, 0x1E27, d{-1, 0, -1}}, + CaseRange{0x1E28, 0x1E28, d{0, 1, 0}}, + CaseRange{0x1E29, 0x1E29, d{-1, 0, -1}}, + CaseRange{0x1E2A, 0x1E2A, d{0, 1, 0}}, + CaseRange{0x1E2B, 0x1E2B, d{-1, 0, -1}}, + CaseRange{0x1E2C, 0x1E2C, d{0, 1, 0}}, + CaseRange{0x1E2D, 0x1E2D, d{-1, 0, -1}}, + CaseRange{0x1E2E, 0x1E2E, d{0, 1, 0}}, + CaseRange{0x1E2F, 0x1E2F, d{-1, 0, -1}}, + CaseRange{0x1E30, 0x1E30, d{0, 1, 0}}, + CaseRange{0x1E31, 0x1E31, d{-1, 0, -1}}, + CaseRange{0x1E32, 0x1E32, d{0, 1, 0}}, + CaseRange{0x1E33, 0x1E33, d{-1, 0, -1}}, + CaseRange{0x1E34, 0x1E34, d{0, 1, 0}}, + CaseRange{0x1E35, 0x1E35, d{-1, 0, -1}}, + CaseRange{0x1E36, 0x1E36, d{0, 1, 0}}, + CaseRange{0x1E37, 0x1E37, d{-1, 0, -1}}, + CaseRange{0x1E38, 0x1E38, d{0, 1, 0}}, + CaseRange{0x1E39, 0x1E39, d{-1, 0, -1}}, + CaseRange{0x1E3A, 0x1E3A, d{0, 1, 0}}, + CaseRange{0x1E3B, 0x1E3B, d{-1, 0, -1}}, + CaseRange{0x1E3C, 0x1E3C, d{0, 1, 0}}, + CaseRange{0x1E3D, 0x1E3D, d{-1, 0, -1}}, + CaseRange{0x1E3E, 0x1E3E, d{0, 1, 0}}, + CaseRange{0x1E3F, 0x1E3F, d{-1, 0, -1}}, + CaseRange{0x1E40, 0x1E40, d{0, 1, 0}}, + CaseRange{0x1E41, 0x1E41, d{-1, 0, -1}}, + CaseRange{0x1E42, 0x1E42, d{0, 1, 0}}, + CaseRange{0x1E43, 0x1E43, d{-1, 0, -1}}, + CaseRange{0x1E44, 0x1E44, d{0, 1, 0}}, + CaseRange{0x1E45, 0x1E45, d{-1, 0, -1}}, + CaseRange{0x1E46, 0x1E46, d{0, 1, 0}}, + CaseRange{0x1E47, 0x1E47, d{-1, 0, -1}}, + CaseRange{0x1E48, 0x1E48, d{0, 1, 0}}, + CaseRange{0x1E49, 0x1E49, d{-1, 0, -1}}, + CaseRange{0x1E4A, 0x1E4A, d{0, 1, 0}}, + CaseRange{0x1E4B, 0x1E4B, d{-1, 0, -1}}, + CaseRange{0x1E4C, 0x1E4C, d{0, 1, 0}}, + CaseRange{0x1E4D, 0x1E4D, d{-1, 0, -1}}, + CaseRange{0x1E4E, 0x1E4E, d{0, 1, 0}}, + CaseRange{0x1E4F, 0x1E4F, d{-1, 0, -1}}, + CaseRange{0x1E50, 0x1E50, d{0, 1, 0}}, + CaseRange{0x1E51, 0x1E51, d{-1, 0, -1}}, + CaseRange{0x1E52, 0x1E52, d{0, 1, 0}}, + CaseRange{0x1E53, 0x1E53, d{-1, 0, -1}}, + CaseRange{0x1E54, 0x1E54, d{0, 1, 0}}, + CaseRange{0x1E55, 0x1E55, d{-1, 0, -1}}, + CaseRange{0x1E56, 0x1E56, d{0, 1, 0}}, + CaseRange{0x1E57, 0x1E57, d{-1, 0, -1}}, + CaseRange{0x1E58, 0x1E58, d{0, 1, 0}}, + CaseRange{0x1E59, 0x1E59, d{-1, 0, -1}}, + CaseRange{0x1E5A, 0x1E5A, d{0, 1, 0}}, + CaseRange{0x1E5B, 0x1E5B, d{-1, 0, -1}}, + CaseRange{0x1E5C, 0x1E5C, d{0, 1, 0}}, + CaseRange{0x1E5D, 0x1E5D, d{-1, 0, -1}}, + CaseRange{0x1E5E, 0x1E5E, d{0, 1, 0}}, + CaseRange{0x1E5F, 0x1E5F, d{-1, 0, -1}}, + CaseRange{0x1E60, 0x1E60, d{0, 1, 0}}, + CaseRange{0x1E61, 0x1E61, d{-1, 0, -1}}, + CaseRange{0x1E62, 0x1E62, d{0, 1, 0}}, + CaseRange{0x1E63, 0x1E63, d{-1, 0, -1}}, + CaseRange{0x1E64, 0x1E64, d{0, 1, 0}}, + CaseRange{0x1E65, 0x1E65, d{-1, 0, -1}}, + CaseRange{0x1E66, 0x1E66, d{0, 1, 0}}, + CaseRange{0x1E67, 0x1E67, d{-1, 0, -1}}, + CaseRange{0x1E68, 0x1E68, d{0, 1, 0}}, + CaseRange{0x1E69, 0x1E69, d{-1, 0, -1}}, + CaseRange{0x1E6A, 0x1E6A, d{0, 1, 0}}, + CaseRange{0x1E6B, 0x1E6B, d{-1, 0, -1}}, + CaseRange{0x1E6C, 0x1E6C, d{0, 1, 0}}, + CaseRange{0x1E6D, 0x1E6D, d{-1, 0, -1}}, + CaseRange{0x1E6E, 0x1E6E, d{0, 1, 0}}, + CaseRange{0x1E6F, 0x1E6F, d{-1, 0, -1}}, + CaseRange{0x1E70, 0x1E70, d{0, 1, 0}}, + CaseRange{0x1E71, 0x1E71, d{-1, 0, -1}}, + CaseRange{0x1E72, 0x1E72, d{0, 1, 0}}, + CaseRange{0x1E73, 0x1E73, d{-1, 0, -1}}, + CaseRange{0x1E74, 0x1E74, d{0, 1, 0}}, + CaseRange{0x1E75, 0x1E75, d{-1, 0, -1}}, + CaseRange{0x1E76, 0x1E76, d{0, 1, 0}}, + CaseRange{0x1E77, 0x1E77, d{-1, 0, -1}}, + CaseRange{0x1E78, 0x1E78, d{0, 1, 0}}, + CaseRange{0x1E79, 0x1E79, d{-1, 0, -1}}, + CaseRange{0x1E7A, 0x1E7A, d{0, 1, 0}}, + CaseRange{0x1E7B, 0x1E7B, d{-1, 0, -1}}, + CaseRange{0x1E7C, 0x1E7C, d{0, 1, 0}}, + CaseRange{0x1E7D, 0x1E7D, d{-1, 0, -1}}, + CaseRange{0x1E7E, 0x1E7E, d{0, 1, 0}}, + CaseRange{0x1E7F, 0x1E7F, d{-1, 0, -1}}, + CaseRange{0x1E80, 0x1E80, d{0, 1, 0}}, + CaseRange{0x1E81, 0x1E81, d{-1, 0, -1}}, + CaseRange{0x1E82, 0x1E82, d{0, 1, 0}}, + CaseRange{0x1E83, 0x1E83, d{-1, 0, -1}}, + CaseRange{0x1E84, 0x1E84, d{0, 1, 0}}, + CaseRange{0x1E85, 0x1E85, d{-1, 0, -1}}, + CaseRange{0x1E86, 0x1E86, d{0, 1, 0}}, + CaseRange{0x1E87, 0x1E87, d{-1, 0, -1}}, + CaseRange{0x1E88, 0x1E88, d{0, 1, 0}}, + CaseRange{0x1E89, 0x1E89, d{-1, 0, -1}}, + CaseRange{0x1E8A, 0x1E8A, d{0, 1, 0}}, + CaseRange{0x1E8B, 0x1E8B, d{-1, 0, -1}}, + CaseRange{0x1E8C, 0x1E8C, d{0, 1, 0}}, + CaseRange{0x1E8D, 0x1E8D, d{-1, 0, -1}}, + CaseRange{0x1E8E, 0x1E8E, d{0, 1, 0}}, + CaseRange{0x1E8F, 0x1E8F, d{-1, 0, -1}}, + CaseRange{0x1E90, 0x1E90, d{0, 1, 0}}, + CaseRange{0x1E91, 0x1E91, d{-1, 0, -1}}, + CaseRange{0x1E92, 0x1E92, d{0, 1, 0}}, + CaseRange{0x1E93, 0x1E93, d{-1, 0, -1}}, + CaseRange{0x1E94, 0x1E94, d{0, 1, 0}}, + CaseRange{0x1E95, 0x1E95, d{-1, 0, -1}}, + CaseRange{0x1E9B, 0x1E9B, d{-59, 0, -59}}, + CaseRange{0x1E9E, 0x1E9E, d{0, -7615, 0}}, + CaseRange{0x1EA0, 0x1EA0, d{0, 1, 0}}, + CaseRange{0x1EA1, 0x1EA1, d{-1, 0, -1}}, + CaseRange{0x1EA2, 0x1EA2, d{0, 1, 0}}, + CaseRange{0x1EA3, 0x1EA3, d{-1, 0, -1}}, + CaseRange{0x1EA4, 0x1EA4, d{0, 1, 0}}, + CaseRange{0x1EA5, 0x1EA5, d{-1, 0, -1}}, + CaseRange{0x1EA6, 0x1EA6, d{0, 1, 0}}, + CaseRange{0x1EA7, 0x1EA7, d{-1, 0, -1}}, + CaseRange{0x1EA8, 0x1EA8, d{0, 1, 0}}, + CaseRange{0x1EA9, 0x1EA9, d{-1, 0, -1}}, + CaseRange{0x1EAA, 0x1EAA, d{0, 1, 0}}, + CaseRange{0x1EAB, 0x1EAB, d{-1, 0, -1}}, + CaseRange{0x1EAC, 0x1EAC, d{0, 1, 0}}, + CaseRange{0x1EAD, 0x1EAD, d{-1, 0, -1}}, + CaseRange{0x1EAE, 0x1EAE, d{0, 1, 0}}, + CaseRange{0x1EAF, 0x1EAF, d{-1, 0, -1}}, + CaseRange{0x1EB0, 0x1EB0, d{0, 1, 0}}, + CaseRange{0x1EB1, 0x1EB1, d{-1, 0, -1}}, + CaseRange{0x1EB2, 0x1EB2, d{0, 1, 0}}, + CaseRange{0x1EB3, 0x1EB3, d{-1, 0, -1}}, + CaseRange{0x1EB4, 0x1EB4, d{0, 1, 0}}, + CaseRange{0x1EB5, 0x1EB5, d{-1, 0, -1}}, + CaseRange{0x1EB6, 0x1EB6, d{0, 1, 0}}, + CaseRange{0x1EB7, 0x1EB7, d{-1, 0, -1}}, + CaseRange{0x1EB8, 0x1EB8, d{0, 1, 0}}, + CaseRange{0x1EB9, 0x1EB9, d{-1, 0, -1}}, + CaseRange{0x1EBA, 0x1EBA, d{0, 1, 0}}, + CaseRange{0x1EBB, 0x1EBB, d{-1, 0, -1}}, + CaseRange{0x1EBC, 0x1EBC, d{0, 1, 0}}, + CaseRange{0x1EBD, 0x1EBD, d{-1, 0, -1}}, + CaseRange{0x1EBE, 0x1EBE, d{0, 1, 0}}, + CaseRange{0x1EBF, 0x1EBF, d{-1, 0, -1}}, + CaseRange{0x1EC0, 0x1EC0, d{0, 1, 0}}, + CaseRange{0x1EC1, 0x1EC1, d{-1, 0, -1}}, + CaseRange{0x1EC2, 0x1EC2, d{0, 1, 0}}, + CaseRange{0x1EC3, 0x1EC3, d{-1, 0, -1}}, + CaseRange{0x1EC4, 0x1EC4, d{0, 1, 0}}, + CaseRange{0x1EC5, 0x1EC5, d{-1, 0, -1}}, + CaseRange{0x1EC6, 0x1EC6, d{0, 1, 0}}, + CaseRange{0x1EC7, 0x1EC7, d{-1, 0, -1}}, + CaseRange{0x1EC8, 0x1EC8, d{0, 1, 0}}, + CaseRange{0x1EC9, 0x1EC9, d{-1, 0, -1}}, + CaseRange{0x1ECA, 0x1ECA, d{0, 1, 0}}, + CaseRange{0x1ECB, 0x1ECB, d{-1, 0, -1}}, + CaseRange{0x1ECC, 0x1ECC, d{0, 1, 0}}, + CaseRange{0x1ECD, 0x1ECD, d{-1, 0, -1}}, + CaseRange{0x1ECE, 0x1ECE, d{0, 1, 0}}, + CaseRange{0x1ECF, 0x1ECF, d{-1, 0, -1}}, + CaseRange{0x1ED0, 0x1ED0, d{0, 1, 0}}, + CaseRange{0x1ED1, 0x1ED1, d{-1, 0, -1}}, + CaseRange{0x1ED2, 0x1ED2, d{0, 1, 0}}, + CaseRange{0x1ED3, 0x1ED3, d{-1, 0, -1}}, + CaseRange{0x1ED4, 0x1ED4, d{0, 1, 0}}, + CaseRange{0x1ED5, 0x1ED5, d{-1, 0, -1}}, + CaseRange{0x1ED6, 0x1ED6, d{0, 1, 0}}, + CaseRange{0x1ED7, 0x1ED7, d{-1, 0, -1}}, + CaseRange{0x1ED8, 0x1ED8, d{0, 1, 0}}, + CaseRange{0x1ED9, 0x1ED9, d{-1, 0, -1}}, + CaseRange{0x1EDA, 0x1EDA, d{0, 1, 0}}, + CaseRange{0x1EDB, 0x1EDB, d{-1, 0, -1}}, + CaseRange{0x1EDC, 0x1EDC, d{0, 1, 0}}, + CaseRange{0x1EDD, 0x1EDD, d{-1, 0, -1}}, + CaseRange{0x1EDE, 0x1EDE, d{0, 1, 0}}, + CaseRange{0x1EDF, 0x1EDF, d{-1, 0, -1}}, + CaseRange{0x1EE0, 0x1EE0, d{0, 1, 0}}, + CaseRange{0x1EE1, 0x1EE1, d{-1, 0, -1}}, + CaseRange{0x1EE2, 0x1EE2, d{0, 1, 0}}, + CaseRange{0x1EE3, 0x1EE3, d{-1, 0, -1}}, + CaseRange{0x1EE4, 0x1EE4, d{0, 1, 0}}, + CaseRange{0x1EE5, 0x1EE5, d{-1, 0, -1}}, + CaseRange{0x1EE6, 0x1EE6, d{0, 1, 0}}, + CaseRange{0x1EE7, 0x1EE7, d{-1, 0, -1}}, + CaseRange{0x1EE8, 0x1EE8, d{0, 1, 0}}, + CaseRange{0x1EE9, 0x1EE9, d{-1, 0, -1}}, + CaseRange{0x1EEA, 0x1EEA, d{0, 1, 0}}, + CaseRange{0x1EEB, 0x1EEB, d{-1, 0, -1}}, + CaseRange{0x1EEC, 0x1EEC, d{0, 1, 0}}, + CaseRange{0x1EED, 0x1EED, d{-1, 0, -1}}, + CaseRange{0x1EEE, 0x1EEE, d{0, 1, 0}}, + CaseRange{0x1EEF, 0x1EEF, d{-1, 0, -1}}, + CaseRange{0x1EF0, 0x1EF0, d{0, 1, 0}}, + CaseRange{0x1EF1, 0x1EF1, d{-1, 0, -1}}, + CaseRange{0x1EF2, 0x1EF2, d{0, 1, 0}}, + CaseRange{0x1EF3, 0x1EF3, d{-1, 0, -1}}, + CaseRange{0x1EF4, 0x1EF4, d{0, 1, 0}}, + CaseRange{0x1EF5, 0x1EF5, d{-1, 0, -1}}, + CaseRange{0x1EF6, 0x1EF6, d{0, 1, 0}}, + CaseRange{0x1EF7, 0x1EF7, d{-1, 0, -1}}, + CaseRange{0x1EF8, 0x1EF8, d{0, 1, 0}}, + CaseRange{0x1EF9, 0x1EF9, d{-1, 0, -1}}, + CaseRange{0x1EFA, 0x1EFA, d{0, 1, 0}}, + CaseRange{0x1EFB, 0x1EFB, d{-1, 0, -1}}, + CaseRange{0x1EFC, 0x1EFC, d{0, 1, 0}}, + CaseRange{0x1EFD, 0x1EFD, d{-1, 0, -1}}, + CaseRange{0x1EFE, 0x1EFE, d{0, 1, 0}}, + CaseRange{0x1EFF, 0x1EFF, d{-1, 0, -1}}, + CaseRange{0x1F00, 0x1F07, d{8, 0, 8}}, + CaseRange{0x1F08, 0x1F0F, d{0, -8, 0}}, + CaseRange{0x1F10, 0x1F15, d{8, 0, 8}}, + CaseRange{0x1F18, 0x1F1D, d{0, -8, 0}}, + CaseRange{0x1F20, 0x1F27, d{8, 0, 8}}, + CaseRange{0x1F28, 0x1F2F, d{0, -8, 0}}, + CaseRange{0x1F30, 0x1F37, d{8, 0, 8}}, + CaseRange{0x1F38, 0x1F3F, d{0, -8, 0}}, + CaseRange{0x1F40, 0x1F45, d{8, 0, 8}}, + CaseRange{0x1F48, 0x1F4D, d{0, -8, 0}}, + CaseRange{0x1F51, 0x1F51, d{8, 0, 8}}, + CaseRange{0x1F53, 0x1F53, d{8, 0, 8}}, + CaseRange{0x1F55, 0x1F55, d{8, 0, 8}}, + CaseRange{0x1F57, 0x1F57, d{8, 0, 8}}, + CaseRange{0x1F59, 0x1F59, d{0, -8, 0}}, + CaseRange{0x1F5B, 0x1F5B, d{0, -8, 0}}, + CaseRange{0x1F5D, 0x1F5D, d{0, -8, 0}}, + CaseRange{0x1F5F, 0x1F5F, d{0, -8, 0}}, + CaseRange{0x1F60, 0x1F67, d{8, 0, 8}}, + CaseRange{0x1F68, 0x1F6F, d{0, -8, 0}}, + CaseRange{0x1F70, 0x1F71, d{74, 0, 74}}, + CaseRange{0x1F72, 0x1F75, d{86, 0, 86}}, + CaseRange{0x1F76, 0x1F77, d{100, 0, 100}}, + CaseRange{0x1F78, 0x1F79, d{128, 0, 128}}, + CaseRange{0x1F7A, 0x1F7B, d{112, 0, 112}}, + CaseRange{0x1F7C, 0x1F7D, d{126, 0, 126}}, + CaseRange{0x1F80, 0x1F87, d{8, 0, 8}}, + CaseRange{0x1F88, 0x1F8F, d{0, -8, 0}}, + CaseRange{0x1F90, 0x1F97, d{8, 0, 8}}, + CaseRange{0x1F98, 0x1F9F, d{0, -8, 0}}, + CaseRange{0x1FA0, 0x1FA7, d{8, 0, 8}}, + CaseRange{0x1FA8, 0x1FAF, d{0, -8, 0}}, + CaseRange{0x1FB0, 0x1FB1, d{8, 0, 8}}, + CaseRange{0x1FB3, 0x1FB3, d{9, 0, 9}}, + CaseRange{0x1FB8, 0x1FB9, d{0, -8, 0}}, + CaseRange{0x1FBA, 0x1FBB, d{0, -74, 0}}, + CaseRange{0x1FBC, 0x1FBC, d{0, -9, 0}}, + CaseRange{0x1FBE, 0x1FBE, d{-7205, 0, -7205}}, + CaseRange{0x1FC3, 0x1FC3, d{9, 0, 9}}, + CaseRange{0x1FC8, 0x1FCB, d{0, -86, 0}}, + CaseRange{0x1FCC, 0x1FCC, d{0, -9, 0}}, + CaseRange{0x1FD0, 0x1FD1, d{8, 0, 8}}, + CaseRange{0x1FD8, 0x1FD9, d{0, -8, 0}}, + CaseRange{0x1FDA, 0x1FDB, d{0, -100, 0}}, + CaseRange{0x1FE0, 0x1FE1, d{8, 0, 8}}, + CaseRange{0x1FE5, 0x1FE5, d{7, 0, 7}}, + CaseRange{0x1FE8, 0x1FE9, d{0, -8, 0}}, + CaseRange{0x1FEA, 0x1FEB, d{0, -112, 0}}, + CaseRange{0x1FEC, 0x1FEC, d{0, -7, 0}}, + CaseRange{0x1FF3, 0x1FF3, d{9, 0, 9}}, + CaseRange{0x1FF8, 0x1FF9, d{0, -128, 0}}, + CaseRange{0x1FFA, 0x1FFB, d{0, -126, 0}}, + CaseRange{0x1FFC, 0x1FFC, d{0, -9, 0}}, + CaseRange{0x2126, 0x2126, d{0, -7517, 0}}, + CaseRange{0x212A, 0x212A, d{0, -8383, 0}}, + CaseRange{0x212B, 0x212B, d{0, -8262, 0}}, + CaseRange{0x2132, 0x2132, d{0, 28, 0}}, + CaseRange{0x214E, 0x214E, d{-28, 0, -28}}, + CaseRange{0x2183, 0x2183, d{0, 1, 0}}, + CaseRange{0x2184, 0x2184, d{-1, 0, -1}}, + CaseRange{0x2C00, 0x2C2E, d{0, 48, 0}}, + CaseRange{0x2C30, 0x2C5E, d{-48, 0, -48}}, + CaseRange{0x2C60, 0x2C60, d{0, 1, 0}}, + CaseRange{0x2C61, 0x2C61, d{-1, 0, -1}}, + CaseRange{0x2C62, 0x2C62, d{0, -10743, 0}}, + CaseRange{0x2C63, 0x2C63, d{0, -3814, 0}}, + CaseRange{0x2C64, 0x2C64, d{0, -10727, 0}}, + CaseRange{0x2C65, 0x2C65, d{-10795, 0, -10795}}, + CaseRange{0x2C66, 0x2C66, d{-10792, 0, -10792}}, + CaseRange{0x2C67, 0x2C67, d{0, 1, 0}}, + CaseRange{0x2C68, 0x2C68, d{-1, 0, -1}}, + CaseRange{0x2C69, 0x2C69, d{0, 1, 0}}, + CaseRange{0x2C6A, 0x2C6A, d{-1, 0, -1}}, + CaseRange{0x2C6B, 0x2C6B, d{0, 1, 0}}, + CaseRange{0x2C6C, 0x2C6C, d{-1, 0, -1}}, + CaseRange{0x2C6D, 0x2C6D, d{0, -10780, 0}}, + CaseRange{0x2C6E, 0x2C6E, d{0, -10749, 0}}, + CaseRange{0x2C6F, 0x2C6F, d{0, -10783, 0}}, + CaseRange{0x2C72, 0x2C72, d{0, 1, 0}}, + CaseRange{0x2C73, 0x2C73, d{-1, 0, -1}}, + CaseRange{0x2C75, 0x2C75, d{0, 1, 0}}, + CaseRange{0x2C76, 0x2C76, d{-1, 0, -1}}, + CaseRange{0x2C80, 0x2C80, d{0, 1, 0}}, + CaseRange{0x2C81, 0x2C81, d{-1, 0, -1}}, + CaseRange{0x2C82, 0x2C82, d{0, 1, 0}}, + CaseRange{0x2C83, 0x2C83, d{-1, 0, -1}}, + CaseRange{0x2C84, 0x2C84, d{0, 1, 0}}, + CaseRange{0x2C85, 0x2C85, d{-1, 0, -1}}, + CaseRange{0x2C86, 0x2C86, d{0, 1, 0}}, + CaseRange{0x2C87, 0x2C87, d{-1, 0, -1}}, + CaseRange{0x2C88, 0x2C88, d{0, 1, 0}}, + CaseRange{0x2C89, 0x2C89, d{-1, 0, -1}}, + CaseRange{0x2C8A, 0x2C8A, d{0, 1, 0}}, + CaseRange{0x2C8B, 0x2C8B, d{-1, 0, -1}}, + CaseRange{0x2C8C, 0x2C8C, d{0, 1, 0}}, + CaseRange{0x2C8D, 0x2C8D, d{-1, 0, -1}}, + CaseRange{0x2C8E, 0x2C8E, d{0, 1, 0}}, + CaseRange{0x2C8F, 0x2C8F, d{-1, 0, -1}}, + CaseRange{0x2C90, 0x2C90, d{0, 1, 0}}, + CaseRange{0x2C91, 0x2C91, d{-1, 0, -1}}, + CaseRange{0x2C92, 0x2C92, d{0, 1, 0}}, + CaseRange{0x2C93, 0x2C93, d{-1, 0, -1}}, + CaseRange{0x2C94, 0x2C94, d{0, 1, 0}}, + CaseRange{0x2C95, 0x2C95, d{-1, 0, -1}}, + CaseRange{0x2C96, 0x2C96, d{0, 1, 0}}, + CaseRange{0x2C97, 0x2C97, d{-1, 0, -1}}, + CaseRange{0x2C98, 0x2C98, d{0, 1, 0}}, + CaseRange{0x2C99, 0x2C99, d{-1, 0, -1}}, + CaseRange{0x2C9A, 0x2C9A, d{0, 1, 0}}, + CaseRange{0x2C9B, 0x2C9B, d{-1, 0, -1}}, + CaseRange{0x2C9C, 0x2C9C, d{0, 1, 0}}, + CaseRange{0x2C9D, 0x2C9D, d{-1, 0, -1}}, + CaseRange{0x2C9E, 0x2C9E, d{0, 1, 0}}, + CaseRange{0x2C9F, 0x2C9F, d{-1, 0, -1}}, + CaseRange{0x2CA0, 0x2CA0, d{0, 1, 0}}, + CaseRange{0x2CA1, 0x2CA1, d{-1, 0, -1}}, + CaseRange{0x2CA2, 0x2CA2, d{0, 1, 0}}, + CaseRange{0x2CA3, 0x2CA3, d{-1, 0, -1}}, + CaseRange{0x2CA4, 0x2CA4, d{0, 1, 0}}, + CaseRange{0x2CA5, 0x2CA5, d{-1, 0, -1}}, + CaseRange{0x2CA6, 0x2CA6, d{0, 1, 0}}, + CaseRange{0x2CA7, 0x2CA7, d{-1, 0, -1}}, + CaseRange{0x2CA8, 0x2CA8, d{0, 1, 0}}, + CaseRange{0x2CA9, 0x2CA9, d{-1, 0, -1}}, + CaseRange{0x2CAA, 0x2CAA, d{0, 1, 0}}, + CaseRange{0x2CAB, 0x2CAB, d{-1, 0, -1}}, + CaseRange{0x2CAC, 0x2CAC, d{0, 1, 0}}, + CaseRange{0x2CAD, 0x2CAD, d{-1, 0, -1}}, + CaseRange{0x2CAE, 0x2CAE, d{0, 1, 0}}, + CaseRange{0x2CAF, 0x2CAF, d{-1, 0, -1}}, + CaseRange{0x2CB0, 0x2CB0, d{0, 1, 0}}, + CaseRange{0x2CB1, 0x2CB1, d{-1, 0, -1}}, + CaseRange{0x2CB2, 0x2CB2, d{0, 1, 0}}, + CaseRange{0x2CB3, 0x2CB3, d{-1, 0, -1}}, + CaseRange{0x2CB4, 0x2CB4, d{0, 1, 0}}, + CaseRange{0x2CB5, 0x2CB5, d{-1, 0, -1}}, + CaseRange{0x2CB6, 0x2CB6, d{0, 1, 0}}, + CaseRange{0x2CB7, 0x2CB7, d{-1, 0, -1}}, + CaseRange{0x2CB8, 0x2CB8, d{0, 1, 0}}, + CaseRange{0x2CB9, 0x2CB9, d{-1, 0, -1}}, + CaseRange{0x2CBA, 0x2CBA, d{0, 1, 0}}, + CaseRange{0x2CBB, 0x2CBB, d{-1, 0, -1}}, + CaseRange{0x2CBC, 0x2CBC, d{0, 1, 0}}, + CaseRange{0x2CBD, 0x2CBD, d{-1, 0, -1}}, + CaseRange{0x2CBE, 0x2CBE, d{0, 1, 0}}, + CaseRange{0x2CBF, 0x2CBF, d{-1, 0, -1}}, + CaseRange{0x2CC0, 0x2CC0, d{0, 1, 0}}, + CaseRange{0x2CC1, 0x2CC1, d{-1, 0, -1}}, + CaseRange{0x2CC2, 0x2CC2, d{0, 1, 0}}, + CaseRange{0x2CC3, 0x2CC3, d{-1, 0, -1}}, + CaseRange{0x2CC4, 0x2CC4, d{0, 1, 0}}, + CaseRange{0x2CC5, 0x2CC5, d{-1, 0, -1}}, + CaseRange{0x2CC6, 0x2CC6, d{0, 1, 0}}, + CaseRange{0x2CC7, 0x2CC7, d{-1, 0, -1}}, + CaseRange{0x2CC8, 0x2CC8, d{0, 1, 0}}, + CaseRange{0x2CC9, 0x2CC9, d{-1, 0, -1}}, + CaseRange{0x2CCA, 0x2CCA, d{0, 1, 0}}, + CaseRange{0x2CCB, 0x2CCB, d{-1, 0, -1}}, + CaseRange{0x2CCC, 0x2CCC, d{0, 1, 0}}, + CaseRange{0x2CCD, 0x2CCD, d{-1, 0, -1}}, + CaseRange{0x2CCE, 0x2CCE, d{0, 1, 0}}, + CaseRange{0x2CCF, 0x2CCF, d{-1, 0, -1}}, + CaseRange{0x2CD0, 0x2CD0, d{0, 1, 0}}, + CaseRange{0x2CD1, 0x2CD1, d{-1, 0, -1}}, + CaseRange{0x2CD2, 0x2CD2, d{0, 1, 0}}, + CaseRange{0x2CD3, 0x2CD3, d{-1, 0, -1}}, + CaseRange{0x2CD4, 0x2CD4, d{0, 1, 0}}, + CaseRange{0x2CD5, 0x2CD5, d{-1, 0, -1}}, + CaseRange{0x2CD6, 0x2CD6, d{0, 1, 0}}, + CaseRange{0x2CD7, 0x2CD7, d{-1, 0, -1}}, + CaseRange{0x2CD8, 0x2CD8, d{0, 1, 0}}, + CaseRange{0x2CD9, 0x2CD9, d{-1, 0, -1}}, + CaseRange{0x2CDA, 0x2CDA, d{0, 1, 0}}, + CaseRange{0x2CDB, 0x2CDB, d{-1, 0, -1}}, + CaseRange{0x2CDC, 0x2CDC, d{0, 1, 0}}, + CaseRange{0x2CDD, 0x2CDD, d{-1, 0, -1}}, + CaseRange{0x2CDE, 0x2CDE, d{0, 1, 0}}, + CaseRange{0x2CDF, 0x2CDF, d{-1, 0, -1}}, + CaseRange{0x2CE0, 0x2CE0, d{0, 1, 0}}, + CaseRange{0x2CE1, 0x2CE1, d{-1, 0, -1}}, + CaseRange{0x2CE2, 0x2CE2, d{0, 1, 0}}, + CaseRange{0x2CE3, 0x2CE3, d{-1, 0, -1}}, + CaseRange{0x2D00, 0x2D25, d{-7264, 0, -7264}}, + CaseRange{0xA640, 0xA640, d{0, 1, 0}}, + CaseRange{0xA641, 0xA641, d{-1, 0, -1}}, + CaseRange{0xA642, 0xA642, d{0, 1, 0}}, + CaseRange{0xA643, 0xA643, d{-1, 0, -1}}, + CaseRange{0xA644, 0xA644, d{0, 1, 0}}, + CaseRange{0xA645, 0xA645, d{-1, 0, -1}}, + CaseRange{0xA646, 0xA646, d{0, 1, 0}}, + CaseRange{0xA647, 0xA647, d{-1, 0, -1}}, + CaseRange{0xA648, 0xA648, d{0, 1, 0}}, + CaseRange{0xA649, 0xA649, d{-1, 0, -1}}, + CaseRange{0xA64A, 0xA64A, d{0, 1, 0}}, + CaseRange{0xA64B, 0xA64B, d{-1, 0, -1}}, + CaseRange{0xA64C, 0xA64C, d{0, 1, 0}}, + CaseRange{0xA64D, 0xA64D, d{-1, 0, -1}}, + CaseRange{0xA64E, 0xA64E, d{0, 1, 0}}, + CaseRange{0xA64F, 0xA64F, d{-1, 0, -1}}, + CaseRange{0xA650, 0xA650, d{0, 1, 0}}, + CaseRange{0xA651, 0xA651, d{-1, 0, -1}}, + CaseRange{0xA652, 0xA652, d{0, 1, 0}}, + CaseRange{0xA653, 0xA653, d{-1, 0, -1}}, + CaseRange{0xA654, 0xA654, d{0, 1, 0}}, + CaseRange{0xA655, 0xA655, d{-1, 0, -1}}, + CaseRange{0xA656, 0xA656, d{0, 1, 0}}, + CaseRange{0xA657, 0xA657, d{-1, 0, -1}}, + CaseRange{0xA658, 0xA658, d{0, 1, 0}}, + CaseRange{0xA659, 0xA659, d{-1, 0, -1}}, + CaseRange{0xA65A, 0xA65A, d{0, 1, 0}}, + CaseRange{0xA65B, 0xA65B, d{-1, 0, -1}}, + CaseRange{0xA65C, 0xA65C, d{0, 1, 0}}, + CaseRange{0xA65D, 0xA65D, d{-1, 0, -1}}, + CaseRange{0xA65E, 0xA65E, d{0, 1, 0}}, + CaseRange{0xA65F, 0xA65F, d{-1, 0, -1}}, + CaseRange{0xA662, 0xA662, d{0, 1, 0}}, + CaseRange{0xA663, 0xA663, d{-1, 0, -1}}, + CaseRange{0xA664, 0xA664, d{0, 1, 0}}, + CaseRange{0xA665, 0xA665, d{-1, 0, -1}}, + CaseRange{0xA666, 0xA666, d{0, 1, 0}}, + CaseRange{0xA667, 0xA667, d{-1, 0, -1}}, + CaseRange{0xA668, 0xA668, d{0, 1, 0}}, + CaseRange{0xA669, 0xA669, d{-1, 0, -1}}, + CaseRange{0xA66A, 0xA66A, d{0, 1, 0}}, + CaseRange{0xA66B, 0xA66B, d{-1, 0, -1}}, + CaseRange{0xA66C, 0xA66C, d{0, 1, 0}}, + CaseRange{0xA66D, 0xA66D, d{-1, 0, -1}}, + CaseRange{0xA680, 0xA680, d{0, 1, 0}}, + CaseRange{0xA681, 0xA681, d{-1, 0, -1}}, + CaseRange{0xA682, 0xA682, d{0, 1, 0}}, + CaseRange{0xA683, 0xA683, d{-1, 0, -1}}, + CaseRange{0xA684, 0xA684, d{0, 1, 0}}, + CaseRange{0xA685, 0xA685, d{-1, 0, -1}}, + CaseRange{0xA686, 0xA686, d{0, 1, 0}}, + CaseRange{0xA687, 0xA687, d{-1, 0, -1}}, + CaseRange{0xA688, 0xA688, d{0, 1, 0}}, + CaseRange{0xA689, 0xA689, d{-1, 0, -1}}, + CaseRange{0xA68A, 0xA68A, d{0, 1, 0}}, + CaseRange{0xA68B, 0xA68B, d{-1, 0, -1}}, + CaseRange{0xA68C, 0xA68C, d{0, 1, 0}}, + CaseRange{0xA68D, 0xA68D, d{-1, 0, -1}}, + CaseRange{0xA68E, 0xA68E, d{0, 1, 0}}, + CaseRange{0xA68F, 0xA68F, d{-1, 0, -1}}, + CaseRange{0xA690, 0xA690, d{0, 1, 0}}, + CaseRange{0xA691, 0xA691, d{-1, 0, -1}}, + CaseRange{0xA692, 0xA692, d{0, 1, 0}}, + CaseRange{0xA693, 0xA693, d{-1, 0, -1}}, + CaseRange{0xA694, 0xA694, d{0, 1, 0}}, + CaseRange{0xA695, 0xA695, d{-1, 0, -1}}, + CaseRange{0xA696, 0xA696, d{0, 1, 0}}, + CaseRange{0xA697, 0xA697, d{-1, 0, -1}}, + CaseRange{0xA722, 0xA722, d{0, 1, 0}}, + CaseRange{0xA723, 0xA723, d{-1, 0, -1}}, + CaseRange{0xA724, 0xA724, d{0, 1, 0}}, + CaseRange{0xA725, 0xA725, d{-1, 0, -1}}, + CaseRange{0xA726, 0xA726, d{0, 1, 0}}, + CaseRange{0xA727, 0xA727, d{-1, 0, -1}}, + CaseRange{0xA728, 0xA728, d{0, 1, 0}}, + CaseRange{0xA729, 0xA729, d{-1, 0, -1}}, + CaseRange{0xA72A, 0xA72A, d{0, 1, 0}}, + CaseRange{0xA72B, 0xA72B, d{-1, 0, -1}}, + CaseRange{0xA72C, 0xA72C, d{0, 1, 0}}, + CaseRange{0xA72D, 0xA72D, d{-1, 0, -1}}, + CaseRange{0xA72E, 0xA72E, d{0, 1, 0}}, + CaseRange{0xA72F, 0xA72F, d{-1, 0, -1}}, + CaseRange{0xA732, 0xA732, d{0, 1, 0}}, + CaseRange{0xA733, 0xA733, d{-1, 0, -1}}, + CaseRange{0xA734, 0xA734, d{0, 1, 0}}, + CaseRange{0xA735, 0xA735, d{-1, 0, -1}}, + CaseRange{0xA736, 0xA736, d{0, 1, 0}}, + CaseRange{0xA737, 0xA737, d{-1, 0, -1}}, + CaseRange{0xA738, 0xA738, d{0, 1, 0}}, + CaseRange{0xA739, 0xA739, d{-1, 0, -1}}, + CaseRange{0xA73A, 0xA73A, d{0, 1, 0}}, + CaseRange{0xA73B, 0xA73B, d{-1, 0, -1}}, + CaseRange{0xA73C, 0xA73C, d{0, 1, 0}}, + CaseRange{0xA73D, 0xA73D, d{-1, 0, -1}}, + CaseRange{0xA73E, 0xA73E, d{0, 1, 0}}, + CaseRange{0xA73F, 0xA73F, d{-1, 0, -1}}, + CaseRange{0xA740, 0xA740, d{0, 1, 0}}, + CaseRange{0xA741, 0xA741, d{-1, 0, -1}}, + CaseRange{0xA742, 0xA742, d{0, 1, 0}}, + CaseRange{0xA743, 0xA743, d{-1, 0, -1}}, + CaseRange{0xA744, 0xA744, d{0, 1, 0}}, + CaseRange{0xA745, 0xA745, d{-1, 0, -1}}, + CaseRange{0xA746, 0xA746, d{0, 1, 0}}, + CaseRange{0xA747, 0xA747, d{-1, 0, -1}}, + CaseRange{0xA748, 0xA748, d{0, 1, 0}}, + CaseRange{0xA749, 0xA749, d{-1, 0, -1}}, + CaseRange{0xA74A, 0xA74A, d{0, 1, 0}}, + CaseRange{0xA74B, 0xA74B, d{-1, 0, -1}}, + CaseRange{0xA74C, 0xA74C, d{0, 1, 0}}, + CaseRange{0xA74D, 0xA74D, d{-1, 0, -1}}, + CaseRange{0xA74E, 0xA74E, d{0, 1, 0}}, + CaseRange{0xA74F, 0xA74F, d{-1, 0, -1}}, + CaseRange{0xA750, 0xA750, d{0, 1, 0}}, + CaseRange{0xA751, 0xA751, d{-1, 0, -1}}, + CaseRange{0xA752, 0xA752, d{0, 1, 0}}, + CaseRange{0xA753, 0xA753, d{-1, 0, -1}}, + CaseRange{0xA754, 0xA754, d{0, 1, 0}}, + CaseRange{0xA755, 0xA755, d{-1, 0, -1}}, + CaseRange{0xA756, 0xA756, d{0, 1, 0}}, + CaseRange{0xA757, 0xA757, d{-1, 0, -1}}, + CaseRange{0xA758, 0xA758, d{0, 1, 0}}, + CaseRange{0xA759, 0xA759, d{-1, 0, -1}}, + CaseRange{0xA75A, 0xA75A, d{0, 1, 0}}, + CaseRange{0xA75B, 0xA75B, d{-1, 0, -1}}, + CaseRange{0xA75C, 0xA75C, d{0, 1, 0}}, + CaseRange{0xA75D, 0xA75D, d{-1, 0, -1}}, + CaseRange{0xA75E, 0xA75E, d{0, 1, 0}}, + CaseRange{0xA75F, 0xA75F, d{-1, 0, -1}}, + CaseRange{0xA760, 0xA760, d{0, 1, 0}}, + CaseRange{0xA761, 0xA761, d{-1, 0, -1}}, + CaseRange{0xA762, 0xA762, d{0, 1, 0}}, + CaseRange{0xA763, 0xA763, d{-1, 0, -1}}, + CaseRange{0xA764, 0xA764, d{0, 1, 0}}, + CaseRange{0xA765, 0xA765, d{-1, 0, -1}}, + CaseRange{0xA766, 0xA766, d{0, 1, 0}}, + CaseRange{0xA767, 0xA767, d{-1, 0, -1}}, + CaseRange{0xA768, 0xA768, d{0, 1, 0}}, + CaseRange{0xA769, 0xA769, d{-1, 0, -1}}, + CaseRange{0xA76A, 0xA76A, d{0, 1, 0}}, + CaseRange{0xA76B, 0xA76B, d{-1, 0, -1}}, + CaseRange{0xA76C, 0xA76C, d{0, 1, 0}}, + CaseRange{0xA76D, 0xA76D, d{-1, 0, -1}}, + CaseRange{0xA76E, 0xA76E, d{0, 1, 0}}, + CaseRange{0xA76F, 0xA76F, d{-1, 0, -1}}, + CaseRange{0xA779, 0xA779, d{0, 1, 0}}, + CaseRange{0xA77A, 0xA77A, d{-1, 0, -1}}, + CaseRange{0xA77B, 0xA77B, d{0, 1, 0}}, + CaseRange{0xA77C, 0xA77C, d{-1, 0, -1}}, + CaseRange{0xA77D, 0xA77D, d{0, -35332, 0}}, + CaseRange{0xA77E, 0xA77E, d{0, 1, 0}}, + CaseRange{0xA77F, 0xA77F, d{-1, 0, -1}}, + CaseRange{0xA780, 0xA780, d{0, 1, 0}}, + CaseRange{0xA781, 0xA781, d{-1, 0, -1}}, + CaseRange{0xA782, 0xA782, d{0, 1, 0}}, + CaseRange{0xA783, 0xA783, d{-1, 0, -1}}, + CaseRange{0xA784, 0xA784, d{0, 1, 0}}, + CaseRange{0xA785, 0xA785, d{-1, 0, -1}}, + CaseRange{0xA786, 0xA786, d{0, 1, 0}}, + CaseRange{0xA787, 0xA787, d{-1, 0, -1}}, + CaseRange{0xA78B, 0xA78B, d{0, 1, 0}}, + CaseRange{0xA78C, 0xA78C, d{-1, 0, -1}}, + CaseRange{0xFF21, 0xFF3A, d{0, 32, 0}}, + CaseRange{0xFF41, 0xFF5A, d{-32, 0, -32}}, + CaseRange{0x10400, 0x10427, d{0, 40, 0}}, + CaseRange{0x10428, 0x1044F, d{-40, 0, -40}}, +} -- 2.48.1