Commit 3c098e27 authored by Rob Pike's avatar Rob Pike

add the Upper/Lower sequence optimization.

tables shrink 900 lines.
mapping code gets a little slower

R=rsc
DELTA=1124  (105 added, 952 deleted, 67 changed)
OCL=34079
CL=34089
parent be219c5e
......@@ -18,7 +18,15 @@ type Range struct {
// 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.
// 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 the usual Lo and Hi values and a Delta of
// {0, UpperLower, 0}
// The constant UpperLower has (meaningful) value 1. The lower case
// letters in such sequences are assumed; were they present they would
// have a Delta of
// {LowerUpper, 0, LowerUpper}
// where LowerUpper has value -1.
type CaseRange struct {
Lo int;
Hi int;
......@@ -38,8 +46,9 @@ type d [MaxCase]int32 // to make the CaseRanges text shorter
// this CaseRange represents a sequence of the form (say)
// Upper Lower Upper Lower.
const (
UpperLower = 1;
LowerUpper = -1;
MaxChar = 0x10FFFF;
UpperLower = MaxChar + 2; // cannot be a valid delta
LowerUpper = MaxChar + 3;
)
// Is tests whether rune is in the specified table of ranges.
......@@ -103,12 +112,28 @@ func IsTitle(rune int) bool {
// IsLetter reports whether the rune is a letter.
func IsLetter(rune int) bool {
if rune < 0x80 { // quick ASCII check
rune &^= ' ';
rune &^= 'a'-'A';
return 'A' <= rune && rune <= 'Z';
}
return Is(Letter, rune);
}
// In an Upper-Lower sequence, which always starts with an UpperCase letter,
// the real deltas always look like:
// 0 1 0
// -1 0 -1
// This is a single-dimensioned array addressed by the case shifted up one bit
// (the column of this table) or'ed with the low bit of the position in
// the sequence (the row of the table).
var ulDelta = [8]int{
(UpperCase<<1) | 0: 0,
(UpperCase<<1) | 1: -1,
(LowerCase<<1) | 0: 1,
(LowerCase<<1) | 1: 0,
(TitleCase<<1) | 0: 0,
(TitleCase<<1) | 1: -1,
}
// To maps the rune to the specified case, UpperCase, LowerCase, or TitleCase
func To(_case int, rune int) int {
if _case < 0 || MaxCase <= _case {
......@@ -121,7 +146,13 @@ func To(_case int, rune int) int {
m := lo + (hi - lo)/2;
r := CaseRanges[m];
if r.Lo <= rune && rune <= r.Hi {
return rune + int(r.Delta[_case]);
delta := int(r.Delta[_case]);
if delta > MaxChar {
// Somewhere inside an UpperLower sequence. Use
// the precomputed delta table to get our offset.
delta = ulDelta[((_case<<1) | ((rune-r.Lo)&1))];
}
return rune + delta;
}
if rune < r.Lo {
hi = m;
......@@ -136,7 +167,7 @@ func To(_case int, rune int) int {
func ToUpper(rune int) int {
if rune < 0x80 { // quick ASCII check
if 'a' <= rune && rune <= 'z' {
rune &^= ' '
rune -= 'a'-'A'
}
return rune
}
......@@ -147,7 +178,7 @@ func ToUpper(rune int) int {
func ToLower(rune int) int {
if rune < 0x80 { // quick ASCII check
if 'A' <= rune && rune <= 'Z' {
rune |= ' '
rune += 'a'-'A'
}
return rune
}
......@@ -158,7 +189,7 @@ func ToLower(rune int) int {
func ToTitle(rune int) int {
if rune < 0x80 { // quick ASCII check
if 'a' <= rune && rune <= 'z' { // title case is upper case for ASCII
rune &^= ' '
rune -= 'a'-'A'
}
return rune
}
......
......@@ -157,7 +157,7 @@ var caseTest = []caseT {
caseT{LowerCase, 0xA65F, 0xA65F},
caseT{TitleCase, 0xA65F, 0xA65E},
// From a LowerUpper sequence
// From another UpperLower 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},
......
......@@ -636,13 +636,13 @@ type caseState struct {
// 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)
c, d = d, c
}
switch {
case d.point != c.point+1:
return false
case d._case != c._case:
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:
......@@ -657,6 +657,70 @@ func (c *caseState) adjacent(d *caseState) bool {
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 int) (c *caseState) {
c = &caseState{ point: i, _case: CaseNone };
ch := &chars[i];
......@@ -729,9 +793,19 @@ func printCaseRange(lo, hi *caseState) {
// 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)
switch {
case hi.point > lo.point && lo.isUpperLower():
fmt.Printf("\tCaseRange{0x%04X, 0x%04X, d{UpperLower, UpperLower, UpperLower}},\n",
lo.point, hi.point)
case hi.point > lo.point && lo.isLowerUpper():
die.Log("LowerUpper sequence: should not happen: U+%04X\n", lo.point);
fmt.Printf("\tCaseRange{0x%04X, 0x%04X, d{LowerUpper, LowerUpper, LowerUpper}},\n",
lo.point, hi.point)
default:
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.
......
......@@ -2804,186 +2804,49 @@ var _CaseRanges = []CaseRange {
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{0x0100, 0x012F, d{UpperLower, UpperLower, UpperLower}},
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{0x0132, 0x0137, d{UpperLower, UpperLower, UpperLower}},
CaseRange{0x0139, 0x0148, d{UpperLower, UpperLower, UpperLower}},
CaseRange{0x014A, 0x0177, d{UpperLower, UpperLower, UpperLower}},
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{0x0179, 0x017E, d{UpperLower, UpperLower, UpperLower}},
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{0x0182, 0x0185, d{UpperLower, UpperLower, UpperLower}},
CaseRange{0x0186, 0x0186, d{0, 206, 0}},
CaseRange{0x0187, 0x0187, d{0, 1, 0}},
CaseRange{0x0188, 0x0188, d{-1, 0, -1}},
CaseRange{0x0187, 0x0188, d{UpperLower, UpperLower, UpperLower}},
CaseRange{0x0189, 0x018A, d{0, 205, 0}},
CaseRange{0x018B, 0x018B, d{0, 1, 0}},
CaseRange{0x018C, 0x018C, d{-1, 0, -1}},
CaseRange{0x018B, 0x018C, d{UpperLower, UpperLower, UpperLower}},
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{0x0191, 0x0192, d{UpperLower, UpperLower, UpperLower}},
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{0x0198, 0x0199, d{UpperLower, UpperLower, UpperLower}},
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{0x01A0, 0x01A5, d{UpperLower, UpperLower, UpperLower}},
CaseRange{0x01A6, 0x01A6, d{0, 218, 0}},
CaseRange{0x01A7, 0x01A7, d{0, 1, 0}},
CaseRange{0x01A8, 0x01A8, d{-1, 0, -1}},
CaseRange{0x01A7, 0x01A8, d{UpperLower, UpperLower, UpperLower}},
CaseRange{0x01A9, 0x01A9, d{0, 218, 0}},
CaseRange{0x01AC, 0x01AC, d{0, 1, 0}},
CaseRange{0x01AD, 0x01AD, d{-1, 0, -1}},
CaseRange{0x01AC, 0x01AD, d{UpperLower, UpperLower, UpperLower}},
CaseRange{0x01AE, 0x01AE, d{0, 218, 0}},
CaseRange{0x01AF, 0x01AF, d{0, 1, 0}},
CaseRange{0x01B0, 0x01B0, d{-1, 0, -1}},
CaseRange{0x01AF, 0x01B0, d{UpperLower, UpperLower, UpperLower}},
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{0x01B3, 0x01B6, d{UpperLower, UpperLower, UpperLower}},
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{0x01B8, 0x01B9, d{UpperLower, UpperLower, UpperLower}},
CaseRange{0x01BC, 0x01BD, d{UpperLower, UpperLower, UpperLower}},
CaseRange{0x01BF, 0x01BF, d{56, 0, 56}},
CaseRange{0x01C4, 0x01C4, d{0, 2, 1}},
CaseRange{0x01C5, 0x01C5, d{-1, 1, 0}},
......@@ -2994,127 +2857,27 @@ var _CaseRanges = []CaseRange {
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{0x01CD, 0x01DC, d{UpperLower, UpperLower, UpperLower}},
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{0x01DE, 0x01EF, d{UpperLower, UpperLower, UpperLower}},
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{0x01F4, 0x01F5, d{UpperLower, UpperLower, UpperLower}},
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{0x01F8, 0x021F, d{UpperLower, UpperLower, UpperLower}},
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{0x0222, 0x0233, d{UpperLower, UpperLower, UpperLower}},
CaseRange{0x023A, 0x023A, d{0, 10795, 0}},
CaseRange{0x023B, 0x023B, d{0, 1, 0}},
CaseRange{0x023C, 0x023C, d{-1, 0, -1}},
CaseRange{0x023B, 0x023C, d{UpperLower, UpperLower, UpperLower}},
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{0x0241, 0x0242, d{UpperLower, UpperLower, UpperLower}},
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{0x0246, 0x024F, d{UpperLower, UpperLower, UpperLower}},
CaseRange{0x0250, 0x0250, d{10783, 0, 10783}},
CaseRange{0x0251, 0x0251, d{10780, 0, 10780}},
CaseRange{0x0253, 0x0253, d{-210, 0, -210}},
......@@ -3139,12 +2902,8 @@ var _CaseRanges = []CaseRange {
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{0x0370, 0x0373, d{UpperLower, UpperLower, UpperLower}},
CaseRange{0x0376, 0x0377, d{UpperLower, UpperLower, UpperLower}},
CaseRange{0x037B, 0x037D, d{130, 0, 130}},
CaseRange{0x0386, 0x0386, d{0, 38, 0}},
CaseRange{0x0388, 0x038A, d{0, 37, 0}},
......@@ -3165,486 +2924,35 @@ var _CaseRanges = []CaseRange {
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{0x03D8, 0x03EF, d{UpperLower, UpperLower, UpperLower}},
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{0x03F7, 0x03F8, d{UpperLower, UpperLower, UpperLower}},
CaseRange{0x03F9, 0x03F9, d{0, -7, 0}},
CaseRange{0x03FA, 0x03FA, d{0, 1, 0}},
CaseRange{0x03FB, 0x03FB, d{-1, 0, -1}},
CaseRange{0x03FA, 0x03FB, d{UpperLower, UpperLower, UpperLower}},
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{0x0460, 0x0481, d{UpperLower, UpperLower, UpperLower}},
CaseRange{0x048A, 0x04BF, d{UpperLower, UpperLower, UpperLower}},
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{0x04C1, 0x04CE, d{UpperLower, UpperLower, UpperLower}},
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{0x04D0, 0x0523, d{UpperLower, UpperLower, UpperLower}},
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{0x1E00, 0x1E95, d{UpperLower, UpperLower, UpperLower}},
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{0x1EA0, 0x1EFF, d{UpperLower, UpperLower, UpperLower}},
CaseRange{0x1F00, 0x1F07, d{8, 0, 8}},
CaseRange{0x1F08, 0x1F0F, d{0, -8, 0}},
CaseRange{0x1F10, 0x1F15, d{8, 0, 8}},
......@@ -3703,292 +3011,32 @@ var _CaseRanges = []CaseRange {
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{0x2183, 0x2184, d{UpperLower, UpperLower, UpperLower}},
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{0x2C60, 0x2C61, d{UpperLower, UpperLower, UpperLower}},
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{0x2C67, 0x2C6C, d{UpperLower, UpperLower, UpperLower}},
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{0x2C72, 0x2C73, d{UpperLower, UpperLower, UpperLower}},
CaseRange{0x2C75, 0x2C76, d{UpperLower, UpperLower, UpperLower}},
CaseRange{0x2C80, 0x2CE3, d{UpperLower, UpperLower, UpperLower}},
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{0xA640, 0xA65F, d{UpperLower, UpperLower, UpperLower}},
CaseRange{0xA662, 0xA66D, d{UpperLower, UpperLower, UpperLower}},
CaseRange{0xA680, 0xA697, d{UpperLower, UpperLower, UpperLower}},
CaseRange{0xA722, 0xA72F, d{UpperLower, UpperLower, UpperLower}},
CaseRange{0xA732, 0xA76F, d{UpperLower, UpperLower, UpperLower}},
CaseRange{0xA779, 0xA77C, d{UpperLower, UpperLower, UpperLower}},
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{0xA77E, 0xA787, d{UpperLower, UpperLower, UpperLower}},
CaseRange{0xA78B, 0xA78C, d{UpperLower, UpperLower, UpperLower}},
CaseRange{0xFF21, 0xFF3A, d{0, 32, 0}},
CaseRange{0xFF41, 0xFF5A, d{-32, 0, -32}},
CaseRange{0x10400, 0x10427, d{0, 40, 0}},
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment