ICU-8966 ICU-12850 add API/data/code for text layout properties InPC, InSC, vo (#92)
ICU-8966: Indic_Positional_Category & Indic_Syllabic_Category ICU-12850: Vertical_Orientation
This commit is contained in:
parent
eae698a61e
commit
d2ec8987a7
1
.gitignore
vendored
1
.gitignore
vendored
@ -996,4 +996,5 @@ tools/unicode/c/genuca/genuca.vcproj.*.*.user
|
||||
tools/unicode/c/genuca/release
|
||||
tools/unicode/c/genuca/x64
|
||||
tools/unicode/c/genuca/x86
|
||||
tools/unicode/c/icudefs.txt
|
||||
tools/unicodetools/com/ibm/rbm/lib
|
||||
|
File diff suppressed because it is too large
Load Diff
722
icu4c/source/common/ulayout_props_data.h
Normal file
722
icu4c/source/common/ulayout_props_data.h
Normal file
@ -0,0 +1,722 @@
|
||||
// © 2018 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html
|
||||
//
|
||||
// file name: ulayout_props_data.h
|
||||
//
|
||||
// machine-generated by: icu/tools/unicode/c/genprops/layoutpropsbuilder.cpp
|
||||
|
||||
|
||||
#ifdef INCLUDED_FROM_UPROPS_CPP
|
||||
|
||||
static const int32_t maxInPCValue = 14;
|
||||
|
||||
static const uint16_t inpc_trieIndex[765]={
|
||||
0,0x40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0x80,0xc0,0xff,0x13f,0x17e,0x1be,0x17e,0x1fe,0x23e,0x27e,0x2bc,0x2fc,
|
||||
0x33c,0x37b,0x23e,0x3bb,0x3fb,0x439,0x477,0x4ad,0x4e1,0x521,0x531,0x571,0x599,0x5d9,0x619,0x656,
|
||||
0x2b7,0x2c6,0x2d2,0x2c6,0x2ed,0,0x10,0x20,0x30,0x40,0x50,0x60,0x70,0,0x10,0x20,
|
||||
0x30,0,0x10,0x20,0x30,0,0x10,0x20,0x30,0,0x10,0x20,0x30,0,0x10,0x20,
|
||||
0x30,0,0x10,0x20,0x30,0,0x10,0x20,0x30,0,0x10,0x20,0x30,0x80,0x90,0xa0,
|
||||
0xb0,0xc0,0xd0,0xe0,0xf0,0xff,0x10f,0x11f,0x12f,0x13f,0x14f,0x15f,0x16f,0x17e,0x18e,0x19e,
|
||||
0x1ae,0x1be,0x1ce,0x1de,0x1ee,0x17e,0x18e,0x19e,0x1ae,0x1fe,0x20e,0x21e,0x22e,0x23e,0x24e,0x25e,
|
||||
0x26e,0x27e,0x28e,0x29e,0x2ae,0x2bc,0x2cc,0x2dc,0x2ec,0x2fc,0x30c,0x31c,0x32c,0x33c,0x34c,0x35c,
|
||||
0x36c,0x37b,0x38b,0x39b,0x3ab,0x23e,0x24e,0x25e,0x26e,0x3bb,0x3cb,0x3db,0x3eb,0x3fb,0x40b,0x41b,
|
||||
0x42b,0x439,0x449,0x459,0x469,0x477,0x487,0x497,0x4a7,0x4ad,0x4bd,0x4cd,0x4dd,0x4e1,0x4f1,0x501,
|
||||
0x511,0x521,0x531,0x541,0x551,0x531,0x541,0x551,0x561,0x571,0x581,0x591,0x5a1,0x599,0x5a9,0x5b9,
|
||||
0x5c9,0x5d9,0x5e9,0x5f9,0x609,0x619,0x629,0x639,0x649,0x656,0x666,0x676,0x686,0,0,0x68b,
|
||||
0x69a,0,0x6a9,0x6b8,0x6c7,0x6d5,0x6e5,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0x6f3,0,0x6f3,
|
||||
0,0x701,0,0x701,0,0,0,0x70b,0x71b,0x729,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0x739,0x749,0,0,
|
||||
0,0,0,0,0,0x759,0x768,0,0,0,0x772,0,0,0,0x77e,0x78d,
|
||||
0x79b,0,0,0,0,0,0,0,0,0x7ab,0,0,0x7b7,0x7c7,0,0x7cc,
|
||||
0x52c,0x81,0,0x7dc,0,0,0,0x7ea,0x3fb,0,0,0x7fa,0x807,0,0,0,
|
||||
0,0,0,0,0,0,0x817,0x827,0x835,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0x2b3,0x83f,0,0x84c,0,0,0,0,
|
||||
0,0x101,0,0,0x858,0x864,0,0x874,0x882,0,0,0x892,0,0x8a0,0x3fb,0,
|
||||
0,0x80,0,0,0x8b0,0x8c0,0,0x2b9,0,0,0x8c7,0x8d6,0x8e3,0,0,0x8f1,
|
||||
0,0,0,0x901,0x2bd,0,0x911,0x151,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0x921,0,0x930,0,0,0x940,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0x950,0,0,0x958,0x966,0,0,0,
|
||||
0x81,0,0,0x976,0,0,0,0,0x52d,0,0x981,0x991,0x3cb,0,0,0x659,
|
||||
0x81,0,0,0x99e,0x9ae,0,0,0,0x9bb,0x9cb,0,0,0,0,0,0,
|
||||
0,0,0,0x71,0x9db,0,0xff,0,0,0x9e6,0x9f6,0x14f,0xa04,0x52b,0,0,
|
||||
0,0,0,0,0,0,0x99c,0xa14,0x16f,0,0,0,0,0,0xa24,0xa33,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0x2eb,0xa43,0xe3,
|
||||
0x214,0,0,0,0xa53,0x2be,0,0,0,0,0,0xa63,0xa73,0,0,0,
|
||||
0,0,0xa7b,0xa8b,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0xa97,0xaa6,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xab5,
|
||||
0,0,0xac2,0,0xad1,0,0,0xadd,0xae7,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x2eb,
|
||||
0xaf7,0,0,0,0,0,0xb07,0xb0f,0xb1e,0,0,0,0,0,0,0,
|
||||
0xb2d,0xb3c,0,0,0,0xb44,0xb54,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0xb61,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0x45,0x4d,0x4d,0x4d,0x5d,0x7d,0x9d,0xbd,0xdd,
|
||||
2,2,0xec,0x10a,0x129,0x149,2,2,2,2,2,2,2,2,2,2,
|
||||
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
|
||||
2,2,2,2,2,2,0x169,0x188,2,2,2,2,2,2,2,2,
|
||||
2,2,0x1a8,2,2,0x1c8,0x1e6,0x203,0x221,0x23f,0x25f,0x27d,0x297
|
||||
};
|
||||
|
||||
static const uint8_t inpc_trieData[2930]={
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
8,8,8,7,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,8,7,1,0,7,4,
|
||||
7,1,1,1,1,8,8,8,8,7,7,7,7,1,4,7,
|
||||
0,8,1,8,8,8,1,1,0,0,0,0,0,0,0,0,
|
||||
0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
8,7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,1,0,7,4,7,
|
||||
1,1,1,1,0,0,4,4,0,0,5,5,1,0,0,0,
|
||||
0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,
|
||||
0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,8,
|
||||
8,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,1,0,7,4,7,1,
|
||||
1,0,0,0,0,8,8,0,0,8,8,1,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,8,
|
||||
0,0,0,1,0,0,0,0,0,0,0,0,0,0,7,1,
|
||||
1,1,1,8,0,8,8,0xd,0,7,7,1,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,8,8,8,8,8,8,0,8,
|
||||
7,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,1,0,7,8,7,1,
|
||||
1,1,1,0,0,4,0xb,0,0,5,0xc,1,0,0,0,0,
|
||||
0,0,0,0,8,0xd,0,0,0,0,0,0,0,0,0,0,
|
||||
1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,7,7,8,7,7,0,
|
||||
0,0,4,4,4,0,5,5,5,8,0,0,0,0,0,0,
|
||||
0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,8,7,7,7,
|
||||
8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,8,8,7,7,7,7,
|
||||
0,8,8,9,0,8,8,8,8,0,0,0,0,0,0,0,
|
||||
8,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0xd,7,7,7,7,
|
||||
0,8,0xd,0xd,0,0xd,0xd,8,8,0,0,0,0,0,0,0,
|
||||
7,7,0,0,0,0,0,0,0,0,0,0,0,1,1,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,8,8,7,7,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,8,8,0,7,7,7,1,1,0,4,
|
||||
4,4,0,5,5,5,8,0,0,0,0,0,0,0,0,0,
|
||||
7,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,7,7,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,8,0,0,0,0,7,7,7,8,
|
||||
8,1,0,1,0,7,4,0xb,4,5,0xc,5,7,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,
|
||||
7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,7,8,7,7,8,8,8,8,1,1,1,0,0,0,0,
|
||||
0,0xe,0xe,0xe,0xe,0xe,7,0,8,8,8,8,8,8,8,8,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,7,8,7,7,8,8,8,8,1,1,0,8,1,0,0,
|
||||
0,0xe,0xe,0xe,0xe,0xe,0,0,0,8,8,8,8,8,8,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,
|
||||
1,0,8,0,0,0,0,7,4,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,1,8,9,1,1,9,
|
||||
9,9,9,8,8,8,8,8,7,8,9,8,8,1,0,8,
|
||||
8,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,
|
||||
1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,0,0,0,0,0,0,1,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,7,7,8,8,1,4,8,8,8,8,
|
||||
8,1,7,0,8,7,0,1,1,0,0,0,0,0,0,7,
|
||||
7,1,1,0,0,0,0,1,1,0,7,7,7,0,0,7,
|
||||
7,7,7,7,7,7,0,0,8,8,8,8,0,0,0,0,
|
||||
0,0,0,0,0,0,0,1,7,4,8,8,7,7,7,7,
|
||||
7,7,1,0,7,0,0,0,0,0,0,0,0,0,0,7,
|
||||
7,7,8,0,0,8,1,1,0,0,0,0,0,0,0,0,
|
||||
0,0,0,8,1,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,7,8,8,8,8,1,1,1,0xb,0xc,5,4,4,4,5,
|
||||
5,8,7,7,8,8,8,8,8,8,8,0,8,0,0,0,
|
||||
0,0,0,0,0,0,8,0,0,8,8,1,7,7,0xd,0xd,
|
||||
8,8,7,7,7,0,0,0,0,7,7,1,7,7,7,7,
|
||||
7,7,1,8,1,0,0,0,0,7,7,7,7,7,0xe,0xe,
|
||||
0xe,7,7,0xe,7,7,7,7,7,0,0,0,0,0,0,0,
|
||||
7,7,0,0,0,0,0,0,0,8,1,4,7,8,0,0,
|
||||
0,0,0,4,1,7,8,8,8,1,1,1,1,0,7,8,
|
||||
7,7,8,8,8,8,1,1,8,1,7,4,4,4,8,8,
|
||||
8,8,8,8,8,8,8,8,0,0,1,8,8,8,8,7,
|
||||
0,0,0,0,0,0,0,0,0,0,0,8,7,8,8,1,
|
||||
1,1,3,9,0xa,4,4,5,5,8,0xd,7,0,0,0,0,
|
||||
0,0,0,0,0,0,0,8,1,8,8,8,0,7,1,1,
|
||||
8,1,4,7,8,8,7,0,1,1,0,0,0,0,0,0,
|
||||
8,7,8,8,7,7,7,8,7,8,0,0,0,0,7,7,
|
||||
7,4,4,0xb,7,7,1,8,8,8,8,4,4,8,1,0,
|
||||
0,0,0,0,0,0,0,8,8,8,0,6,1,1,1,1,
|
||||
1,8,8,1,1,1,1,8,7,6,6,6,6,6,6,6,
|
||||
0,0,0,0,1,0,0,0,0,8,0,0,7,0,0,0,
|
||||
0,0,0,0,0,8,0,0,0,0,8,0,0,0,0,7,
|
||||
7,1,8,7,0,0,0,0,0,0,0,0,7,7,7,7,
|
||||
7,7,7,7,7,7,7,7,1,8,0,0,0,0,0,0,
|
||||
0,0,0,0,8,8,8,8,8,8,8,8,8,8,8,8,
|
||||
8,8,8,8,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,8,0,0,0,0,0,0,0,0,0,0,0,1,1,1,
|
||||
0,0,0,0,0,0,0,1,1,1,8,1,1,1,1,8,
|
||||
0,0,0,8,7,7,8,8,1,1,4,4,8,7,7,2,
|
||||
3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
8,8,8,8,1,8,4,8,1,7,4,1,1,0,0,0,
|
||||
0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,8,
|
||||
7,0,0,0,0,0,0,0,0,0,0,0,7,8,7,0,
|
||||
0,8,7,8,8,1,0xe,0xe,8,8,0xe,7,0xe,0xe,7,8,
|
||||
8,0,0,0,0,0,0,0,0,0,0,0,4,1,8,4,
|
||||
7,0,0,0,7,7,8,7,7,1,7,7,0,7,1,0,
|
||||
0,6,1,1,0,8,6,0,0,0,0,0,1,1,1,8,
|
||||
0,0,0,0,0,0,0,0,8,1,1,0,0,0,0,0,
|
||||
7,8,7,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
8,8,8,8,1,1,1,1,8,8,8,8,8,0,0,0,
|
||||
0,0,0,0,0,0,7,4,7,1,1,8,8,7,7,1,
|
||||
1,0,0,0,0,0,0,0,8,8,8,1,1,4,8,9,
|
||||
9,8,1,1,0,8,0,0,0,0,0,0,0,0,0,0,
|
||||
0,7,4,7,1,1,1,1,1,1,8,8,8,0xd,7,0,
|
||||
0,0,0,0,0,0,0,1,0,8,1,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,7,7,7,1,8,8,0xd,0xd,8,
|
||||
7,8,8,0,0,0,0,0,0,8,0,7,4,7,1,1,
|
||||
8,8,8,8,1,1,0,0,0,0,0,0,0,0,0,0,
|
||||
0,1,1,0,7,7,8,7,7,7,7,0,0,4,4,0,
|
||||
0,5,5,7,0,0,7,7,0,0,8,8,8,8,8,8,
|
||||
8,0,0,0,7,7,1,8,8,7,1,0,0,0,0,0,
|
||||
0,0,0,0,7,4,7,1,1,1,1,1,1,4,8,0xb,
|
||||
5,7,5,8,7,1,1,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,4,7,1,1,1,1,0,0,4,0xb,5,0xc,8,
|
||||
8,7,1,7,7,7,1,1,1,1,1,1,8,8,7,7,
|
||||
8,7,1,0,0,0,0,0,0,0,0,0,0,0,8,7,
|
||||
8,4,7,1,1,8,8,8,8,7,1,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,1,0,8,7,7,8,8,1,
|
||||
1,4,8,1,8,8,8,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,7,4,7,1,1,1,8,8,8,8,8,7,1,
|
||||
1,0,0,0,0,0,8,1,1,8,8,8,8,8,8,1,
|
||||
0,0,0,0,0,1,1,8,8,8,8,7,0,1,1,1,
|
||||
1,0,8,1,1,8,8,8,7,7,1,1,1,0,0,0,
|
||||
0,0,0,0,0,0,0,1,1,1,1,1,1,8,7,8,
|
||||
0,0,0,0,0,0,0,8,8,1,1,1,1,1,0,8,
|
||||
8,8,8,8,8,7,1,0,0,1,1,1,1,1,1,1,
|
||||
1,1,1,1,1,1,1,0,7,1,1,1,1,1,1,4,
|
||||
1,8,7,8,8,0,0,0,0,0,0,0,0,0,8,8,
|
||||
8,8,8,1,0,0,0,8,0,8,8,0,8,8,1,8,
|
||||
1,0,0,1,0,0,0,0,0,0,0,0,0,0,7,7,
|
||||
7,7,7,0,8,8,0,7,7,8,7,0,0,0,0,0,
|
||||
0,0,0,0,8,1,4,7,0,0,0,0,0,0,0,0,
|
||||
0,0
|
||||
};
|
||||
|
||||
static const UCPTrie inpc_trie={
|
||||
inpc_trieIndex,
|
||||
{ inpc_trieData },
|
||||
765, 2930,
|
||||
0x12000, 0x12,
|
||||
1, 2,
|
||||
0, 0,
|
||||
0x2, 0x0,
|
||||
0x0,
|
||||
};
|
||||
|
||||
static const int32_t maxInSCValue = 35;
|
||||
|
||||
static const uint16_t insc_trieIndex[834]={
|
||||
0,0x40,0x60,0x94,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
|
||||
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
|
||||
0x40,0x40,0x40,0x40,0xd4,0x112,0x152,0x190,0x1cf,0x20d,0x24c,0x28a,0x2ca,0x308,0x346,0x384,
|
||||
0x3c4,0x402,0x441,0x47f,0x4bf,0x4fd,0x53d,0x57d,0x5bc,0x5fc,0x63b,0x67b,0x69b,0x6db,0x71b,0x758,
|
||||
0x2f8,0x30b,0x317,0x30b,0x332,0,0x10,0x20,0x30,0x40,0x50,0x60,0x70,0x60,0x70,0x80,
|
||||
0x90,0x94,0xa4,0xb4,0xc4,0x40,0x50,0x60,0x70,0x40,0x50,0x60,0x70,0x40,0x50,0x60,
|
||||
0x70,0x40,0x50,0x60,0x70,0x40,0x50,0x60,0x70,0x40,0x50,0x60,0x70,0x40,0x50,0x60,
|
||||
0x70,0x40,0x50,0x60,0x70,0xd4,0xe4,0xf4,0x104,0x112,0x122,0x132,0x142,0x152,0x162,0x172,
|
||||
0x182,0x190,0x1a0,0x1b0,0x1c0,0x1cf,0x1df,0x1ef,0x1ff,0x20d,0x21d,0x22d,0x23d,0x24c,0x25c,0x26c,
|
||||
0x27c,0x28a,0x29a,0x2aa,0x2ba,0x2ca,0x2da,0x2ea,0x2fa,0x308,0x318,0x328,0x338,0x346,0x356,0x366,
|
||||
0x376,0x384,0x394,0x3a4,0x3b4,0x3c4,0x3d4,0x3e4,0x3f4,0x402,0x412,0x422,0x432,0x441,0x451,0x461,
|
||||
0x471,0x47f,0x48f,0x49f,0x4af,0x4bf,0x4cf,0x4df,0x4ef,0x4fd,0x50d,0x51d,0x52d,0x53d,0x54d,0x55d,
|
||||
0x56d,0x57d,0x58d,0x59d,0x5ad,0x5bc,0x5cc,0x5dc,0x5ec,0x5fc,0x60c,0x61c,0x62c,0x63b,0x64b,0x65b,
|
||||
0x66b,0x67b,0x68b,0x69b,0x6ab,0x69b,0x6ab,0x6bb,0x6cb,0x6db,0x6eb,0x6fb,0x70b,0x71b,0x72b,0x73b,
|
||||
0x74b,0x758,0x768,0x778,0x788,0xe9,0xe9,0x798,0x7a3,0x7b3,0x7c3,0x7d2,0x7e1,0x7ef,0x7ff,0x40,
|
||||
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
|
||||
0x40,0x40,0x40,0x40,0x40,0x80f,0x81d,0xe6,0x81d,0xe6,0x82d,0x80f,0x83d,0xe9,0xe9,0x84d,
|
||||
0x859,0x863,0x872,0x30,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
|
||||
0x40,0x40,0x40,0x40,0x882,0x16c,0x892,0x8a2,0x22d,0xe9,0x8b2,0x8c2,0xe9,0xe9,0x374,0x8d2,
|
||||
0x8e1,0x30,0x40,0x40,0xe9,0x8f1,0xe9,0xe9,0x901,0x90e,0x91e,0x92a,0x30,0x30,0x40,0x40,
|
||||
0x40,0x40,0x40,0x40,0x93a,0xe6,0xe9,0x94a,0x956,0x30,0x40,0x40,0x966,0xe9,0x975,0x985,
|
||||
0xe9,0xe9,0x995,0x9a5,0xe9,0xe9,0x9b5,0x9c2,0x9d2,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
|
||||
0x40,0x9e2,0x9f0,0x9fe,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
|
||||
0x40,0x40,0x40,0xa08,0xa14,0xa24,0x40,0x40,0x40,0x40,0x40,0x75a,0xa32,0x40,0x40,0x40,
|
||||
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
|
||||
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x74,0x40,0x40,0x40,0xa42,0xe9,0xa4f,
|
||||
0x40,0xe9,0xa5f,0xa6d,0xa7c,0xd6,0xe7,0xe9,0xa8c,0xa98,0x30,0xaa8,0xab6,0xac6,0xe9,0xad4,
|
||||
0xe9,0xae4,0xaf3,0x40,0x40,0xb03,0xe9,0xe9,0xb12,0x297,0x30,0xb22,0xb32,0xe3,0xe9,0x889,
|
||||
0xb42,0xb52,0x30,0xe9,0xb61,0xe9,0xe9,0xe9,0xb71,0xb81,0x40,0xb91,0xba1,0x40,0x40,0x40,
|
||||
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xbb1,0xbc1,0xbce,0x30,0xbde,0xbee,0xe9,
|
||||
0xbf8,0x31,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
|
||||
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xc08,0xe6,0xe9,
|
||||
0x88a,0xc18,0xc26,0xc30,0xc40,0xc50,0xe9,0xe9,0xc60,0x40,0x40,0x40,0x40,0xc70,0xe9,0x88b,
|
||||
0xc80,0xc90,0xca0,0xe9,0xcad,0xd5,0xe8,0xe9,0xcbd,0xccd,0x30,0x6ba,0x35,0xe1,0x3eb,0x886,
|
||||
0xcdd,0x40,0x40,0x40,0x40,0xced,0x16d,0xcfc,0xdf,0xe9,0xd0c,0xd1c,0x30,0xd2c,0x162,0x172,
|
||||
0xd3c,0x308,0xd4c,0xd5c,0x9ed,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xdb,0xe9,0xe9,
|
||||
0xd6c,0xd7a,0xd8a,0x40,0x40,0xd99,0xe9,0xe9,0x91f,0xda9,0x30,0x40,0x40,0x40,0x40,0x40,
|
||||
0x40,0x40,0x40,0x40,0x40,0xdb,0xe9,0xff,0xdb9,0xdc9,0xdd1,0x40,0x40,0xdb,0xe9,0xe9,
|
||||
0xde1,0xdf1,0x30,0x40,0x40,0xdf,0xe9,0xe01,0xe0e,0x30,0x40,0x40,0x40,0xe9,0xe1e,0xe2e,
|
||||
0xe3e,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xdf,0xe9,0x886,
|
||||
0xe4e,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
|
||||
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xe5e,0xe9,0xe9,
|
||||
0xe6b,0xe7b,0xe8b,0xe9,0xe9,0xe97,0xea1,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
|
||||
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xeb1,0xe9,0xff,
|
||||
0xec1,0xed1,0x6bb,0xee1,0x555,0xe9,0xeef,0x72b,0xeff,0x40,0x40,0x40,0x40,0xf0f,0xe9,0xe9,
|
||||
0xf1e,0xf2e,0x30,0xf3e,0xe9,0xf4a,0xf57,0x30,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
|
||||
0x40,0x40,0x40,0x40,0x40,0x40,0xe9,0xf67,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
|
||||
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x45,0x55,0x55,0x55,0x65,0x85,0xa5,0xc5,
|
||||
0xe5,4,4,0xf5,0x114,0x134,0x154,4,0x174,4,0x17d,4,4,4,4,4,
|
||||
4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
|
||||
4,4,4,4,4,4,4,4,4,4,4,0x19d,0x1bd,4,4,4,
|
||||
4,4,4,4,4,4,4,0x1dd,4,4,0x1fd,0x21d,0x23d,0x25d,0x27d,0x29d,
|
||||
0x2bd,0x2d8
|
||||
};
|
||||
|
||||
static const uint8_t insc_trieData[3960]={
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0xc,0,0,
|
||||
0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0xc,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0x1c,0x1c,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0xc,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,2,2,2,0x20,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,
|
||||
0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,5,5,5,5,5,5,5,
|
||||
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
|
||||
5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x22,0x22,
|
||||
0x17,1,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x1f,
|
||||
0x22,0x22,0,4,4,0,0,0x22,0x22,0x22,5,5,5,5,5,5,
|
||||
5,5,0x23,0x23,0x22,0x22,0,0,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
|
||||
0x18,0x18,0,0,0x23,0x23,0x23,0x23,0x23,0x23,5,5,5,5,5,5,
|
||||
5,5,0xc,2,2,0x20,0,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0,
|
||||
0,0x23,0x23,0,0,0x23,0x23,5,5,5,5,5,5,5,5,5,
|
||||
5,5,5,5,5,5,5,5,5,5,5,0,5,5,5,5,
|
||||
5,5,5,0,5,0,0,0,5,5,5,5,0,0,0x17,1,
|
||||
0x22,0x22,0x22,0x22,0x22,0,0,0x22,0x22,0,0,0x22,0x22,0x1f,6,0,
|
||||
0,0,0,0,0,0,0,0x22,0,0,0,0,5,5,0,5,
|
||||
0x23,0x23,0x22,0x22,0,0,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
|
||||
5,5,0,0,0,0,0,0,0,0,0,0,2,0,0x1c,0,
|
||||
2,2,0x20,0,0x23,0x23,0x23,0x23,0x23,0x23,0,0,0,0,0x23,0x23,
|
||||
0,0,0x23,0x23,5,5,5,5,5,5,5,5,5,5,5,5,
|
||||
5,5,5,5,5,5,5,5,0,5,5,5,5,5,5,5,
|
||||
0,5,5,0,5,5,0,5,5,0,0,0x17,0,0x22,0x22,0x22,
|
||||
0,0,0,0,0x22,0x22,0,0,0x22,0x22,0x1f,0,0,0,4,0,
|
||||
0,0,0,0,0,0,5,5,5,5,0,5,0,0,0,0,
|
||||
0,0,0,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,2,0x12,0xc,
|
||||
0xc,0,0xb,0,0,0,0,0,0,0,0,0,0,2,2,0x20,
|
||||
0,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0,0x23,0x23,0x23,0,0x23,
|
||||
0x23,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
|
||||
5,5,5,5,5,0,5,5,5,5,5,5,5,0,5,5,
|
||||
0,5,5,5,5,5,0,0,0x17,1,0x22,0x22,0x22,0x22,0x22,0x22,
|
||||
0,0x22,0x22,0x22,0,0x22,0x22,0x1f,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0x23,0x23,0x22,0x22,0,0,
|
||||
0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0,0,0,0,0,0,
|
||||
0,0,0,5,4,4,4,0x17,0x17,0x17,0,2,2,0x20,0,0x23,
|
||||
0x23,0x23,0x23,0x23,0x23,0x23,0x23,0,0,0x23,0x23,0,0,0x23,0x23,5,
|
||||
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
|
||||
5,5,5,0,5,5,5,5,5,5,5,0,5,5,0,5,
|
||||
5,5,5,5,0,0,0x17,1,0x22,0x22,0x22,0x22,0x22,0,0,0x22,
|
||||
0x22,0,0,0x22,0x22,0x1f,0,0,0,0,0,0,0,0,0x22,0x22,
|
||||
0,0,0,0,5,5,0,5,0x23,0x23,0x22,0x22,0,0,0x18,0x18,
|
||||
0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0,5,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,2,0x15,0,0x23,0x23,0x23,0x23,0x23,
|
||||
0x23,0,0,0,0x23,0x23,0x23,0,0x23,0x23,0x23,5,0,0,0,5,
|
||||
5,0,5,0,5,5,0,0,0,5,5,0,0,0,5,5,
|
||||
5,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,
|
||||
0,0,0,0,0x22,0x22,0x22,0,0,0,0x22,0x22,0x22,0,0x22,0x22,
|
||||
0x22,0x1f,0,0,0,0,0,0,0,0,0,0x22,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0x18,0x18,0x18,0x18,0x18,0x18,
|
||||
0x18,0x18,0x18,0x18,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,2,2,2,0x20,2,0x23,0x23,0x23,0x23,0x23,0x23,0x23,
|
||||
0x23,0,0x23,0x23,0x23,0,0x23,0x23,0x23,5,5,5,5,5,5,5,
|
||||
5,5,5,5,5,5,5,5,5,5,5,5,5,0,5,5,
|
||||
5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,
|
||||
0,1,0x22,0x22,0x22,0x22,0x22,0,0x22,0x22,0x22,0,0x22,0x22,0x22,0x1f,
|
||||
0,0,0,0,0,0,0,0x22,0x22,0,5,5,5,0,0,0,
|
||||
0,0,0x23,0x23,0x22,0x22,0,0,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
|
||||
0x18,0x18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,2,2,0x20,0,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0,0x23,
|
||||
0x23,0x23,0,0x23,0x23,0x23,5,5,5,5,5,5,5,5,5,5,
|
||||
5,5,5,5,5,5,5,5,5,5,0,5,5,5,5,5,
|
||||
5,5,5,5,5,0,5,5,5,5,5,0,0,0x17,1,0x22,
|
||||
0x22,0x22,0x22,0x22,0,0x22,0x22,0x22,0,0x22,0x22,0x22,0x1f,0,0,0,
|
||||
0,0,0,0,0x22,0x22,0,0,0,0,0,0,0,5,0,0x23,
|
||||
0x23,0x22,0x22,0,0,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0,
|
||||
0x11,0x11,0,0,0,0,0,0,0,0,0,0,0,0,0,2,
|
||||
2,2,0x20,0,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0,0x23,0x23,0x23,
|
||||
0,0x23,0x23,0x23,5,5,5,5,5,5,5,5,5,5,5,5,
|
||||
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
|
||||
5,5,5,5,5,5,5,5,5,5,0x1a,0x1a,1,0x22,0x22,0x22,
|
||||
0x22,0x22,0,0x22,0x22,0x22,0,0x22,0x22,0x22,0x1f,0xd,0,0,0,0,
|
||||
0,6,6,6,0x22,0,0,0,0,0,0,0,0x23,0x23,0x23,0x22,
|
||||
0x22,0,0,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0,0,0,
|
||||
0,0,0,0,0,0,0,6,6,6,6,6,6,0,0,2,
|
||||
0x20,0,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,
|
||||
0x23,0x23,0x23,0x23,0,0,0,5,5,5,5,5,5,5,5,5,
|
||||
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,
|
||||
5,5,5,5,5,5,5,5,5,0,5,0,0,5,5,5,
|
||||
5,5,5,5,0,0,0,0x1f,0,0,0,0,0x22,0x22,0x22,0x22,
|
||||
0x22,0x22,0,0x22,0,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0,0,0,
|
||||
0,0,0,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0,0,0x22,
|
||||
0x22,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,
|
||||
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
|
||||
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
|
||||
5,5,5,5,5,5,5,5,5,5,5,0,0x22,0x22,0x22,0x22,
|
||||
0x22,0x22,0x22,0x22,0x22,0x22,0x1a,0,0,0,0,0,0x22,0x22,0x22,0x22,
|
||||
0x22,0x22,0,0x22,0x1e,0x1e,0x1e,0x1e,0xa,2,0x1a,0,0x18,0x18,0x18,0x18,
|
||||
0x18,0x18,0x18,0x18,0x18,0x18,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,5,5,0,5,
|
||||
0,0,5,5,0,5,0,0,5,0,0,0,0,0,0,5,
|
||||
5,5,5,0,5,5,5,5,5,5,5,0,5,5,5,0,
|
||||
5,0,5,0,0,5,5,0,5,5,0,0x22,0x22,0x22,0x22,0x22,
|
||||
0x22,0x22,0x22,0x22,0x22,0,0x22,0xb,0xb,0,0,0x22,0x22,0x22,0x22,0x22,
|
||||
0,0,0,0x1e,0x1e,0x1e,0x1e,0,2,0,0,0x18,0x18,0x18,0x18,0x18,
|
||||
0x18,0x18,0x18,0x18,0x18,0,0,5,5,5,5,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0x18,0x18,0x18,0x18,0x18,
|
||||
0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0,
|
||||
0x1c,0,0x1c,0,0x17,0,0,0,0,0,0,5,5,5,5,5,
|
||||
5,5,5,0,5,5,5,5,5,5,5,5,5,5,5,5,
|
||||
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
|
||||
5,5,5,5,5,5,5,5,0,0,0,0,0x22,0x22,0x22,0x22,
|
||||
0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,2,0x20,0x22,0x22,2,2,0x1a,
|
||||
1,0,0,8,8,8,8,8,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,
|
||||
0xf,0xf,0xf,0,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,
|
||||
0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,
|
||||
0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0,0,0,0,0,0,0x1c,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,5,0x23,0x23,0x23,0x23,0x23,0x23,0x23,
|
||||
0x23,0x23,0x23,0x22,0x22,0x22,0x22,0x22,0x22,2,0x1e,0x20,0x13,0x1a,0xb,0xb,
|
||||
0xb,0xb,5,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0,0xc,0,
|
||||
0,0xc,0,5,5,0x23,0x23,0x23,0x23,0x22,0x22,0x22,0x22,5,5,5,
|
||||
5,0xb,0xb,5,0x22,0x1e,0x1e,5,5,0x22,0x22,0x1e,0x1e,0x1e,0x1e,0x1e,
|
||||
5,5,0x22,0x22,0x22,0x22,5,5,5,5,5,5,5,5,5,5,
|
||||
5,0xb,0x22,0x22,0x22,0x22,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,5,0x1e,0x18,
|
||||
0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1e,0x1e,0x22,0x22,0,0,0x23,
|
||||
0x23,0x23,5,5,5,5,5,5,5,5,5,5,0,5,5,0x22,
|
||||
0x22,0x1a,0,0,0,0,0,0,0,0,0,0,0,5,5,0x22,
|
||||
0x22,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0x22,
|
||||
0x22,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,
|
||||
0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0,0,0x22,
|
||||
0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,2,0x20,0x22,0x1b,0x1b,0x1c,0x10,
|
||||
0xa,0x1c,0x1c,0x1a,0x13,0x1c,0,0,0,0,0,0,0,0,1,0x1c,
|
||||
0,0,0xc,5,5,5,5,5,5,5,5,5,5,5,5,5,
|
||||
5,5,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0xf,0xf,0xf,0,0,
|
||||
0,0,7,7,2,7,7,7,7,7,7,7,0x22,0x1c,0,0,
|
||||
0,0,5,5,5,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,
|
||||
0,0,0x1d,0x1d,0x1d,0x1d,0x1d,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,
|
||||
0x22,0x22,7,7,7,7,7,7,7,0x1e,0x1e,0,0,0,0,0,
|
||||
0,5,5,5,5,5,5,5,0x22,0x22,0x22,0x22,0x22,0,0,0,
|
||||
0,5,5,5,5,5,5,5,5,5,5,5,5,5,0x23,0x23,
|
||||
0x23,5,5,0xb,0xb,0xf,7,7,9,0xf,0xf,0xf,0xf,0,0x13,0x22,
|
||||
0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,2,0x1e,
|
||||
0x1e,0x1e,0x1e,0x1e,0x1a,0x1c,0x1c,0,0,0x1c,2,2,2,0x10,0x20,0x23,
|
||||
0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,5,5,5,5,0x17,0x22,
|
||||
0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x1f,5,5,5,5,5,
|
||||
5,5,0,0,0,0,2,0x10,0x20,0x23,0x23,0x23,0x23,0x23,0x23,0x23,
|
||||
5,5,5,5,5,5,0xf,0xf,0xf,0x22,0x22,0x22,0x22,0x22,0x22,0x1a,
|
||||
0x13,0xf,0xf,5,5,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,1,
|
||||
5,5,5,7,7,5,5,5,5,0x23,0x23,0x17,0x22,0x22,0x22,0x22,
|
||||
0x22,0x22,0x22,0x22,0x22,7,7,0x1a,0x1a,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,5,5,5,5,0xf,0xf,0x22,0x22,0x22,0x22,0x22,
|
||||
0x22,0x22,7,7,7,7,2,2,0x1c,0x17,0,0,0,0,0,0,
|
||||
0,0,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0,0,0,5,
|
||||
5,5,4,4,4,0,4,4,4,4,4,4,4,4,4,4,
|
||||
4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0x20,0x20,4,0x11,0x11,4,4,4,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0x1c,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0x16,0x14,0,0,0xc,0xc,0xc,0xc,0xc,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0x1c,0x1c,0x1c,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0x23,0x23,0,0x23,0x23,0x23,0x1a,5,5,5,5,2,5,5,
|
||||
5,5,0x22,0x22,0x22,0x22,0x22,0,0,0,0,0,0,0,0,5,
|
||||
5,5,5,5,5,5,5,5,5,5,5,5,5,0x21,0x21,5,
|
||||
5,5,5,0x21,0xf,0xf,5,5,5,5,5,5,5,0xf,5,2,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5,
|
||||
0xb,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x1f,2,0,0,
|
||||
0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,
|
||||
4,4,4,4,4,4,4,4,2,2,0,0,0,0,0,0,
|
||||
0,0,0,0,0x23,0x22,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
|
||||
5,5,5,5,5,5,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x1e,
|
||||
0x1e,0x1e,0,0,5,5,5,5,5,5,5,0x22,0x22,0x22,0x22,0x22,
|
||||
0x22,0x22,0x22,7,7,7,0x1a,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,2,2,0x10,0x20,0x23,0x23,0x23,0x23,0x23,5,5,5,0x23,
|
||||
0x23,0x23,5,5,5,0x17,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0xf,
|
||||
0xb,0xb,5,5,5,5,5,0x22,0,5,5,5,5,5,5,5,
|
||||
5,5,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,5,5,5,5,
|
||||
5,0,0x22,0x22,0x22,0xb,0xb,0xb,0xb,0,0,0,0,0,0,0,
|
||||
0,0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
|
||||
0,0,5,5,5,0xc,0xc,0xc,0,0,0,5,0x1e,0x1e,0x1e,5,
|
||||
5,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,
|
||||
0x1e,0x1d,0x1e,0x1d,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0x23,0x23,5,5,5,5,5,5,5,5,5,0x22,0x22,0x22,0x22,
|
||||
0x22,0,0,0,0,0,0x20,0x13,0,0,0,0,0,0,0,0,
|
||||
0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x23,
|
||||
0x23,5,0x23,5,5,5,5,5,5,5,5,5,7,7,7,7,
|
||||
7,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0,0x1e,0x1a,0,0,5,0x22,
|
||||
0x22,0x22,0,0x22,0x22,0,0,0,0,0,0x22,0x22,2,0x20,5,5,
|
||||
5,5,0,5,5,5,0,5,5,5,5,5,5,5,0,0,
|
||||
0x17,0x17,0x17,0,0,0,0,0x13,2,2,0x20,0x11,0x11,0x23,0x23,0x23,
|
||||
0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x22,0x22,0x22,0x22,0x22,0x22,0x1f,0,
|
||||
0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,
|
||||
3,3,3,3,3,3,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x19,
|
||||
2,2,0x20,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,5,5,5,
|
||||
0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x1f,0x17,0,0,0,0,0,
|
||||
2,2,0x20,0x23,0x23,0x23,0x23,5,5,5,5,5,5,5,5,5,
|
||||
0x22,0x22,0x22,0x13,0x1a,0,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
|
||||
0,0,0,0,5,0x22,0x22,0,0,0,0,0,0,0,0,0,
|
||||
0x21,0x21,0x21,0x21,0x21,5,5,5,5,5,5,5,5,5,5,5,
|
||||
0x17,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,
|
||||
0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x1f,1,0xe,
|
||||
0xe,0,0,0,0,0,0x1c,0x17,0x22,0x22,0,0,0,0x22,0x22,0x22,
|
||||
0x22,2,0x1f,0x17,0x12,0,0,0,0,0,0,4,0,0x23,0x23,0x23,
|
||||
0x23,5,5,5,0,5,0,5,5,5,5,0,5,5,5,5,
|
||||
5,5,5,5,5,0,0,0,0,0,0,0,5,5,5,5,
|
||||
5,5,5,5,5,5,5,5,5,5,5,2,0x22,0x22,0x22,0x22,
|
||||
0x22,0x22,0x22,0x22,0x22,0x17,0x1a,0,0,0,0,0,2,2,2,0x20,
|
||||
0,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0,0,0x23,5,0,5,5,
|
||||
0,5,5,5,5,5,0,0x17,0x17,1,0x22,0x22,0,0,0,0,
|
||||
0,0,0,0x22,0,0,0,0,0,0,2,2,0x23,0x23,0x22,0x22,
|
||||
0,0,4,4,4,4,4,4,4,0,0,0,5,5,5,5,
|
||||
5,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x1f,2,2,0x20,
|
||||
0x17,1,0,0,0,0,0,0,0,0,0x18,0x18,0x18,0x18,0x18,0x18,
|
||||
0x18,0x18,0x18,0x18,0,0,0,0,0x1c,0,0x23,0x23,0x23,0x23,0x23,0x23,
|
||||
0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,5,2,0x20,0x1f,0x17,1,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0x22,0x22,0x22,0x22,0x22,0x22,0,
|
||||
0,0x22,0x22,0x22,0x22,2,2,0x20,0x1f,0x17,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0x23,0x23,0x23,0x23,0x22,0x22,0,
|
||||
0,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,2,0x20,
|
||||
0x1f,0x22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,5,5,5,5,5,5,5,5,5,5,5,2,0x20,0x22,0x22,
|
||||
0x22,0x22,0x22,0x22,0x1f,0x17,0,0,0,0,0,0,0,0,5,5,
|
||||
5,5,5,5,5,5,5,5,5,0,0,0xb,0xb,0xb,0x22,0x22,
|
||||
0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x1a,0,0,0,0,0x18,0x18,
|
||||
0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0,0,0,0,0x22,0x22,
|
||||
0x22,0x22,0x22,0x22,0x22,2,0x20,0x1f,0x17,0,0,0,0,0,0x23,0x22,
|
||||
0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,5,5,5,5,5,0x1c,0x1a,
|
||||
2,2,2,2,0x20,0xe,0xb,0xb,0xb,0xb,0xc,0,0,0,0,0,
|
||||
0xc,0,0x13,0,0,0,0,0,0,0,0,0x23,0x22,0x22,0x22,0x22,
|
||||
0x22,0x22,0x22,0x22,0x22,0x22,0x22,5,5,5,5,0,0,0xe,0xe,0xe,
|
||||
0xe,7,7,7,7,7,7,2,0x20,0x12,0x13,0,0,0,1,0,
|
||||
0,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0,0x23,0x23,0x23,0x23,5,
|
||||
5,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0,0x22,0x22,0x22,0x22,2,2,0x20,
|
||||
0x1f,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0,0,
|
||||
0,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0x22,
|
||||
0x22,0x22,0x22,0x22,2,2,0,0,0,0,0,0,0,0,0,0x23,
|
||||
0x23,0x23,0x23,0x23,0x23,0x23,0,0x23,0x23,0,0x23,5,5,5,5,0x22,
|
||||
0x22,0x22,0x22,0x22,0x22,0,0,0,0x22,0,0x22,0x22,0,0x22,2,0x20,
|
||||
0x17,0x22,0x1a,0x13,0xd,0xb,0,0,0,0,0,0,0,0,0x23,0x23,
|
||||
0x23,0x23,0x23,0x23,0,0x23,0x23,0,0x23,0x23,5,5,5,5,5,5,
|
||||
5,5,5,5,0x22,0x22,0x22,0x22,0x22,0,0x22,0x22,2,0x20,0x13,0,
|
||||
0,0,0,0,0,0,0,5,5,0xc,0x22,0x22,0x22,0x22,0,0,
|
||||
0,0,0,0,0,0,0,0
|
||||
};
|
||||
|
||||
static const UCPTrie insc_trie={
|
||||
insc_trieIndex,
|
||||
{ insc_trieData },
|
||||
834, 3960,
|
||||
0x12000, 0x12,
|
||||
1, 2,
|
||||
0, 0,
|
||||
0x4, 0x40,
|
||||
0x0,
|
||||
};
|
||||
|
||||
static const int32_t maxVoValue = 3;
|
||||
|
||||
static const uint16_t vo_trieIndex[1100]={
|
||||
0,0x40,0x59,0x98,0,0,0,0,0,0,0,0xd0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0x33b,0x355,0x363,0x379,0x399,0x3b7,0x3d2,0x3ec,0x355,0x355,0x355,0x40c,0x355,0x355,0x355,0x40c,
|
||||
0x42c,0x42c,0x42c,0x42c,0x42c,0x42c,0x42c,0x42c,0x42c,0x42c,0x42c,0x42c,0x42c,0x42c,0x42c,0x42c,
|
||||
0x42c,0x42c,0x42c,0x42c,0x42c,0x42c,0x42c,0x42c,0x42c,0x42c,0x42c,0x42c,0x42c,0x42c,0x42c,0x42c,
|
||||
0x42c,0x42c,0x42c,0x42c,0x42c,0x42c,0x42c,0x42c,0x42c,0x42c,0x42c,0x42c,0x355,0x355,0x355,0x40c,
|
||||
0x355,0x355,0x355,0x40c,0,0x10,0x20,0x30,0x40,0x50,0x60,0x70,0x59,0x69,0x79,0x89,
|
||||
0x98,0xa8,0xb8,0xc8,0,0x10,0x20,0x30,0,0x10,0x20,0x30,0,0x10,0x20,0x30,
|
||||
0,0x10,0x20,0x30,0xd0,0xe0,0xf0,0x100,0,0x10,0x20,0x30,0,0x10,0x20,0x30,
|
||||
0,0x10,0x20,0x30,0,0x10,0x20,0x30,0,0x10,0x20,0x30,0,0x10,0x20,0x30,
|
||||
0,0x10,0x20,0x30,0,0x10,0x20,0x30,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,
|
||||
0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x10f,0x110,0x110,0x110,0x110,0x110,0x110,0x110,
|
||||
0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,
|
||||
0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0x110,0x110,0x110,0x110,0x110,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0xa9,0x96,0x11e,0x12c,0xae,0xaa,0,0,0,0,0,
|
||||
0,0x103,0x13c,0,0x14c,0x158,0x166,0x10b,0x175,0x110,0x110,0x110,0x184,0,0,0,
|
||||
0,0,0,0,0x72,0,0xf6,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0x190,0x110,0x198,0,0,0,0,0x103,0x110,0x115,0,0xec,0x1a8,
|
||||
0x1b6,0x10e,0x110,0x110,0x1c6,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,
|
||||
0x110,0x110,0,0,0,0,0,0,0,0,0,0,0x110,0x110,0x110,0x110,
|
||||
0x110,0x110,0x116,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,
|
||||
0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x118,0x10a,0x110,0x1d2,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0x10e,0x110,0,0,
|
||||
0x116,0,0,0,0,0,0x108,0x110,0x1e2,0x114,0x110,0,0,0,0,0,
|
||||
0,0,0,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,
|
||||
0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x1f1,0x1ff,0x110,0x20e,0x21d,
|
||||
0x110,0x22a,0x110,0x237,0x246,0x256,0x110,0x22a,0x110,0x237,0x261,0x110,0x110,0x26e,0x110,0x110,
|
||||
0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x27e,0x110,0x110,0x110,0x110,0x110,
|
||||
0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x27e,0x27e,0x27e,0x27e,0x27e,
|
||||
0x286,0x110,0x28e,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,
|
||||
0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,
|
||||
0x110,0x110,0x110,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0x110,0x110,0,0,0,0,0,
|
||||
0,0,0,0x110,0,0x110,0x117,0x29b,0x2aa,0,0,0,0,0,0,0,
|
||||
0,0,0x2ba,0x2c9,0x110,0x2d9,0x110,0x2e9,0x2f8,0,0,0,0,0,0,0,
|
||||
0x308,0x318,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0x110,0x110,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0x110,0x110,0x110,0x110,0x110,0x110,
|
||||
0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0,0,0,
|
||||
0,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,
|
||||
0x110,0x110,0,0,0,0,0,0,0,0,0x328,0x110,0x110,0x110,0x110,0x110,
|
||||
0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,
|
||||
0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x110,0x112,0x84,0x98,0xa8,0xa8,0xa8,
|
||||
0xa8,0xa8,0xa8,0xc8,0xc,0xe8,0x100,0x115,0xc,0xc,0xc,0x134,0x153,0x172,0x191,0xc,
|
||||
0x1ab,0xc,0x1cb,0x1eb,0x20b,0x223,0x223,0x223,0x223,0x223,0x223,0x223,0x223,0x223,0x223,0x223,
|
||||
0x223,0x223,0x223,0x223,0x223,0x223,0x223,0x223,0x223,0x223,0x223,0x223,0x223,0x223,0x223,0x223,
|
||||
0x223,0x223,0x223,0x223,0x223,0xfb,0xc,0x243,0xc,0x223,0x223,0x223,0x223,0x223,0x223,0x223,
|
||||
0x223,0x223,0x223,0x223,0x223,0xc,0xc,0xc,0xc,0x223,0x223,0x223,0x223,0x223,0x223,0x223,
|
||||
0x223,0x223,0x223,0x223,0x223,0x223,0xf8,0xc,0x262,0xc,0xc,0xc,0xc,0x282,0xc,0xc,
|
||||
0xc,0xc,0xc,0x29c,0xc,0xc,0xfd,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,
|
||||
0xc,0x223,0x223,0x2b9,0xc,0xc,0xc,0xc,0xc,0x223,0x100,0xc,0xc,0xc,0xc,0xc,
|
||||
0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0x2bc,0x223,
|
||||
0x223,0x223,0x223,0x223,0x223,0x223,0x223,0xf8,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,
|
||||
0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0x2da,0xf8,0xc,0xc,0xc,0xc,
|
||||
0xc,0xc,0xc,0xc,0x223,0x2fa,0xc,0xc,0x223,0xfd,0xc,0xc,0xc,0xc,0xc,0xc,
|
||||
0xc,0xc,0xc,0xc,0x223,0x31a,0x223,0x223,0xc8,0x2b5,0xc,0xc,0x223,0x223,0x223,0x223,
|
||||
0x223,0x223,0x223,0x223,0x223,0x223,0x223,0x223,0x223,0x223,0x223,0x223,0x223,0x223,0x223,0x223,
|
||||
0x223,0x223,0x223,0x223,0x223,0x223,0x223,0x223,0x223,0x223,0x223,0x31b,0xc,0xc,0xc,0xc,
|
||||
0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,
|
||||
0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc
|
||||
};
|
||||
|
||||
static const uint8_t vo_trieData[828]={
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
3,0,3,0,0,0,0,3,0,0,3,0,0,0,0,0,
|
||||
0,0,0,0,0,3,3,3,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,3,3,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
|
||||
0,0,0,0,0,0,0,0,0,3,3,0,0,0,3,0,
|
||||
0,0,0,3,3,3,0,0,0,0,0,0,3,0,3,3,
|
||||
3,0,0,0,0,0,0,0,0,0,0,0,3,3,0,3,
|
||||
3,3,3,3,3,3,0,0,0,0,0,3,3,0,3,3,
|
||||
0,0,0,0,0,0,3,3,3,3,0,3,0,3,0,3,
|
||||
0,0,0,0,3,0,0,0,0,0,3,3,3,3,3,3,
|
||||
0,3,3,0,3,3,3,3,3,3,3,3,3,3,0,0,
|
||||
3,3,3,3,3,3,3,3,0,0,0,0,3,3,3,3,
|
||||
3,1,1,3,0,0,0,0,3,3,3,3,3,3,3,3,
|
||||
3,3,3,3,3,3,0,3,3,3,3,3,3,3,3,3,
|
||||
3,3,0,0,0,0,3,3,3,0,3,3,3,3,3,3,
|
||||
3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,3,3,0,3,3,3,3,3,3,3,3,3,3,3,
|
||||
3,3,2,2,3,3,3,3,3,1,1,1,1,1,1,1,
|
||||
1,3,3,1,1,1,1,1,1,1,1,1,1,1,1,3,
|
||||
3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,
|
||||
2,3,2,3,2,3,2,3,3,3,3,3,3,2,3,3,
|
||||
3,3,3,3,3,3,3,3,3,3,2,3,2,3,2,3,
|
||||
3,3,3,3,3,2,3,3,3,3,3,2,2,3,3,3,
|
||||
3,2,2,3,3,3,1,2,3,2,3,2,3,2,3,2,
|
||||
3,3,3,3,3,3,2,2,3,3,3,3,3,1,3,3,
|
||||
3,3,3,3,3,2,3,3,3,3,3,3,3,3,2,2,
|
||||
2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,
|
||||
3,3,3,3,3,3,3,3,3,2,2,2,2,2,3,3,
|
||||
3,3,3,0,1,1,1,1,1,1,3,3,3,0,0,0,
|
||||
0,3,3,3,3,3,3,3,3,3,0,2,3,3,3,3,
|
||||
3,3,1,1,3,3,2,0,2,3,3,3,3,3,3,3,
|
||||
3,3,3,1,1,0,0,0,2,3,3,3,3,3,3,3,
|
||||
3,3,3,3,1,3,1,3,1,3,3,3,3,3,3,3,
|
||||
3,3,3,3,1,1,1,1,1,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,3,3,3,1,3,3,3,3,
|
||||
0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,
|
||||
3,0,0,0,3,3,0,0,2,2,3,3,3,3,3,3,
|
||||
3,3,3,3,3,3,3,3,0,0,0,0
|
||||
};
|
||||
|
||||
static const UCPTrie vo_trie={
|
||||
vo_trieIndex,
|
||||
{ vo_trieData },
|
||||
1100, 828,
|
||||
0x110000, 0x110,
|
||||
1, 2,
|
||||
0, 0,
|
||||
0xc, 0x0,
|
||||
0x0,
|
||||
};
|
||||
|
||||
#endif // INCLUDED_FROM_UPROPS_CPP
|
@ -546,12 +546,34 @@ typedef enum UProperty {
|
||||
(http://www.unicode.org/reports/tr9/)
|
||||
Returns UBidiPairedBracketType values. @stable ICU 52 */
|
||||
UCHAR_BIDI_PAIRED_BRACKET_TYPE=0x1015,
|
||||
/**
|
||||
* Enumerated property Indic_Positional_Category.
|
||||
* New in Unicode 6.0 as provisional property Indic_Matra_Category;
|
||||
* renamed and changed to informative in Unicode 8.0.
|
||||
* See http://www.unicode.org/reports/tr44/#IndicPositionalCategory.txt
|
||||
* @stable ICU 63
|
||||
*/
|
||||
UCHAR_INDIC_POSITIONAL_CATEGORY=0x1016,
|
||||
/**
|
||||
* Enumerated property Indic_Syllabic_Category.
|
||||
* New in Unicode 6.0 as provisional; informative since Unicode 8.0.
|
||||
* See http://www.unicode.org/reports/tr44/#IndicSyllabicCategory.txt
|
||||
* @stable ICU 63
|
||||
*/
|
||||
UCHAR_INDIC_SYLLABIC_CATEGORY=0x1017,
|
||||
/**
|
||||
* Enumerated property Vertical_Orientation.
|
||||
* Used for UAX #50 Unicode Vertical Text Layout (https://www.unicode.org/reports/tr50/).
|
||||
* New as a UCD property in Unicode 10.0.
|
||||
* @stable ICU 63
|
||||
*/
|
||||
UCHAR_VERTICAL_ORIENTATION=0x1018,
|
||||
#ifndef U_HIDE_DEPRECATED_API
|
||||
/**
|
||||
* One more than the last constant for enumerated/integer Unicode properties.
|
||||
* @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420.
|
||||
*/
|
||||
UCHAR_INT_LIMIT=0x1016,
|
||||
UCHAR_INT_LIMIT=0x1019,
|
||||
#endif // U_HIDE_DEPRECATED_API
|
||||
|
||||
/** Bitmask property General_Category_Mask.
|
||||
@ -2320,6 +2342,161 @@ typedef enum UHangulSyllableType {
|
||||
#endif // U_HIDE_DEPRECATED_API
|
||||
} UHangulSyllableType;
|
||||
|
||||
/**
|
||||
* Indic Positional Category constants.
|
||||
*
|
||||
* @see UCHAR_INDIC_POSITIONAL_CATEGORY
|
||||
* @stable ICU 63
|
||||
*/
|
||||
typedef enum UIndicPositionalCategory {
|
||||
/*
|
||||
* Note: UIndicPositionalCategory constants are parsed by preparseucd.py.
|
||||
* It matches lines like
|
||||
* U_INPC_<Unicode Indic_Positional_Category value name>
|
||||
*/
|
||||
|
||||
/** @stable ICU 63 */
|
||||
U_INPC_NA,
|
||||
/** @stable ICU 63 */
|
||||
U_INPC_BOTTOM,
|
||||
/** @stable ICU 63 */
|
||||
U_INPC_BOTTOM_AND_LEFT,
|
||||
/** @stable ICU 63 */
|
||||
U_INPC_BOTTOM_AND_RIGHT,
|
||||
/** @stable ICU 63 */
|
||||
U_INPC_LEFT,
|
||||
/** @stable ICU 63 */
|
||||
U_INPC_LEFT_AND_RIGHT,
|
||||
/** @stable ICU 63 */
|
||||
U_INPC_OVERSTRUCK,
|
||||
/** @stable ICU 63 */
|
||||
U_INPC_RIGHT,
|
||||
/** @stable ICU 63 */
|
||||
U_INPC_TOP,
|
||||
/** @stable ICU 63 */
|
||||
U_INPC_TOP_AND_BOTTOM,
|
||||
/** @stable ICU 63 */
|
||||
U_INPC_TOP_AND_BOTTOM_AND_RIGHT,
|
||||
/** @stable ICU 63 */
|
||||
U_INPC_TOP_AND_LEFT,
|
||||
/** @stable ICU 63 */
|
||||
U_INPC_TOP_AND_LEFT_AND_RIGHT,
|
||||
/** @stable ICU 63 */
|
||||
U_INPC_TOP_AND_RIGHT,
|
||||
/** @stable ICU 63 */
|
||||
U_INPC_VISUAL_ORDER_LEFT,
|
||||
} UIndicPositionalCategory;
|
||||
|
||||
/**
|
||||
* Indic Syllabic Category constants.
|
||||
*
|
||||
* @see UCHAR_INDIC_SYLLABIC_CATEGORY
|
||||
* @stable ICU 63
|
||||
*/
|
||||
typedef enum UIndicSyllabicCategory {
|
||||
/*
|
||||
* Note: UIndicSyllabicCategory constants are parsed by preparseucd.py.
|
||||
* It matches lines like
|
||||
* U_INSC_<Unicode Indic_Syllabic_Category value name>
|
||||
*/
|
||||
|
||||
/** @stable ICU 63 */
|
||||
U_INSC_OTHER,
|
||||
/** @stable ICU 63 */
|
||||
U_INSC_AVAGRAHA,
|
||||
/** @stable ICU 63 */
|
||||
U_INSC_BINDU,
|
||||
/** @stable ICU 63 */
|
||||
U_INSC_BRAHMI_JOINING_NUMBER,
|
||||
/** @stable ICU 63 */
|
||||
U_INSC_CANTILLATION_MARK,
|
||||
/** @stable ICU 63 */
|
||||
U_INSC_CONSONANT,
|
||||
/** @stable ICU 63 */
|
||||
U_INSC_CONSONANT_DEAD,
|
||||
/** @stable ICU 63 */
|
||||
U_INSC_CONSONANT_FINAL,
|
||||
/** @stable ICU 63 */
|
||||
U_INSC_CONSONANT_HEAD_LETTER,
|
||||
/** @stable ICU 63 */
|
||||
U_INSC_CONSONANT_INITIAL_POSTFIXED,
|
||||
/** @stable ICU 63 */
|
||||
U_INSC_CONSONANT_KILLER,
|
||||
/** @stable ICU 63 */
|
||||
U_INSC_CONSONANT_MEDIAL,
|
||||
/** @stable ICU 63 */
|
||||
U_INSC_CONSONANT_PLACEHOLDER,
|
||||
/** @stable ICU 63 */
|
||||
U_INSC_CONSONANT_PRECEDING_REPHA,
|
||||
/** @stable ICU 63 */
|
||||
U_INSC_CONSONANT_PREFIXED,
|
||||
/** @stable ICU 63 */
|
||||
U_INSC_CONSONANT_SUBJOINED,
|
||||
/** @stable ICU 63 */
|
||||
U_INSC_CONSONANT_SUCCEEDING_REPHA,
|
||||
/** @stable ICU 63 */
|
||||
U_INSC_CONSONANT_WITH_STACKER,
|
||||
/** @stable ICU 63 */
|
||||
U_INSC_GEMINATION_MARK,
|
||||
/** @stable ICU 63 */
|
||||
U_INSC_INVISIBLE_STACKER,
|
||||
/** @stable ICU 63 */
|
||||
U_INSC_JOINER,
|
||||
/** @stable ICU 63 */
|
||||
U_INSC_MODIFYING_LETTER,
|
||||
/** @stable ICU 63 */
|
||||
U_INSC_NON_JOINER,
|
||||
/** @stable ICU 63 */
|
||||
U_INSC_NUKTA,
|
||||
/** @stable ICU 63 */
|
||||
U_INSC_NUMBER,
|
||||
/** @stable ICU 63 */
|
||||
U_INSC_NUMBER_JOINER,
|
||||
/** @stable ICU 63 */
|
||||
U_INSC_PURE_KILLER,
|
||||
/** @stable ICU 63 */
|
||||
U_INSC_REGISTER_SHIFTER,
|
||||
/** @stable ICU 63 */
|
||||
U_INSC_SYLLABLE_MODIFIER,
|
||||
/** @stable ICU 63 */
|
||||
U_INSC_TONE_LETTER,
|
||||
/** @stable ICU 63 */
|
||||
U_INSC_TONE_MARK,
|
||||
/** @stable ICU 63 */
|
||||
U_INSC_VIRAMA,
|
||||
/** @stable ICU 63 */
|
||||
U_INSC_VISARGA,
|
||||
/** @stable ICU 63 */
|
||||
U_INSC_VOWEL,
|
||||
/** @stable ICU 63 */
|
||||
U_INSC_VOWEL_DEPENDENT,
|
||||
/** @stable ICU 63 */
|
||||
U_INSC_VOWEL_INDEPENDENT,
|
||||
} UIndicSyllabicCategory;
|
||||
|
||||
/**
|
||||
* Vertical Orientation constants.
|
||||
*
|
||||
* @see UCHAR_VERTICAL_ORIENTATION
|
||||
* @stable ICU 63
|
||||
*/
|
||||
typedef enum UVerticalOrientation {
|
||||
/*
|
||||
* Note: UVerticalOrientation constants are parsed by preparseucd.py.
|
||||
* It matches lines like
|
||||
* U_VO_<Unicode Vertical_Orientation value name>
|
||||
*/
|
||||
|
||||
/** @stable ICU 63 */
|
||||
U_VO_ROTATED,
|
||||
/** @stable ICU 63 */
|
||||
U_VO_TRANSFORMED_ROTATED,
|
||||
/** @stable ICU 63 */
|
||||
U_VO_TRANSFORMED_UPRIGHT,
|
||||
/** @stable ICU 63 */
|
||||
U_VO_UPRIGHT,
|
||||
} UVerticalOrientation;
|
||||
|
||||
/**
|
||||
* Check a binary Unicode property for a code point.
|
||||
*
|
||||
|
@ -233,6 +233,11 @@ void U_CALLCONV UnicodeSet_initInclusion(int32_t src, UErrorCode &status) {
|
||||
case UPROPS_SRC_BIDI:
|
||||
ubidi_addPropertyStarts(&sa, &status);
|
||||
break;
|
||||
case UPROPS_SRC_INPC:
|
||||
case UPROPS_SRC_INSC:
|
||||
case UPROPS_SRC_VO:
|
||||
uprops_addPropertyStarts((UPropertySource)src, &sa, &status);
|
||||
break;
|
||||
default:
|
||||
status = U_INTERNAL_PROGRAM_ERROR;
|
||||
break;
|
||||
|
@ -25,6 +25,7 @@
|
||||
|
||||
#include "unicode/utypes.h"
|
||||
#include "unicode/uchar.h"
|
||||
#include "unicode/ucptrie.h"
|
||||
#include "unicode/unorm2.h"
|
||||
#include "unicode/uscript.h"
|
||||
#include "unicode/ustring.h"
|
||||
@ -36,6 +37,10 @@
|
||||
#include "ucase.h"
|
||||
#include "ustr_imp.h"
|
||||
|
||||
// ulayout_props_data.h is machine-generated by genprops
|
||||
#define INCLUDED_FROM_UPROPS_CPP
|
||||
#include "ulayout_props_data.h"
|
||||
|
||||
U_NAMESPACE_USE
|
||||
|
||||
/* general properties API functions ----------------------------------------- */
|
||||
@ -428,6 +433,18 @@ static int32_t getTrailCombiningClass(const IntProperty &/*prop*/, UChar32 c, UP
|
||||
}
|
||||
#endif
|
||||
|
||||
static int32_t getInPC(const IntProperty &, UChar32 c, UProperty) {
|
||||
return ucptrie_get(&inpc_trie, c);
|
||||
}
|
||||
|
||||
static int32_t getInSC(const IntProperty &, UChar32 c, UProperty) {
|
||||
return ucptrie_get(&insc_trie, c);
|
||||
}
|
||||
|
||||
static int32_t getVo(const IntProperty &, UChar32 c, UProperty) {
|
||||
return ucptrie_get(&vo_trie, c);
|
||||
}
|
||||
|
||||
static const IntProperty intProps[UCHAR_INT_LIMIT-UCHAR_INT_START]={
|
||||
/*
|
||||
* column, mask and shift values for int-value properties from u_getUnicodeProperties().
|
||||
@ -463,6 +480,9 @@ static const IntProperty intProps[UCHAR_INT_LIMIT-UCHAR_INT_START]={
|
||||
{ 2, UPROPS_SB_MASK, UPROPS_SB_SHIFT, defaultGetValue, defaultGetMaxValue },
|
||||
{ 2, UPROPS_WB_MASK, UPROPS_WB_SHIFT, defaultGetValue, defaultGetMaxValue },
|
||||
{ UPROPS_SRC_BIDI, 0, 0, getBiDiPairedBracketType, biDiGetMaxValue },
|
||||
{ UPROPS_SRC_INPC, 0, maxInPCValue, getInPC, getMaxValueFromShift },
|
||||
{ UPROPS_SRC_INSC, 0, maxInSCValue, getInSC, getMaxValueFromShift },
|
||||
{ UPROPS_SRC_VO, 0, maxVoValue, getVo, getMaxValueFromShift },
|
||||
};
|
||||
|
||||
U_CAPI int32_t U_EXPORT2
|
||||
@ -564,6 +584,34 @@ uprops_getSource(UProperty which) {
|
||||
}
|
||||
}
|
||||
|
||||
U_CFUNC void U_EXPORT2
|
||||
uprops_addPropertyStarts(UPropertySource src, const USetAdder *sa, UErrorCode *pErrorCode) {
|
||||
if (U_FAILURE(*pErrorCode)) { return; }
|
||||
const UCPTrie *trie;
|
||||
switch (src) {
|
||||
case UPROPS_SRC_INPC:
|
||||
trie = &inpc_trie;
|
||||
break;
|
||||
case UPROPS_SRC_INSC:
|
||||
trie = &insc_trie;
|
||||
break;
|
||||
case UPROPS_SRC_VO:
|
||||
trie = &vo_trie;
|
||||
break;
|
||||
default:
|
||||
*pErrorCode = U_ILLEGAL_ARGUMENT_ERROR;
|
||||
return;
|
||||
}
|
||||
|
||||
// Add the start code point of each same-value range of the trie.
|
||||
UChar32 start = 0, end;
|
||||
while ((end = ucptrie_getRange(trie, start, UCPTRIE_RANGE_NORMAL, 0,
|
||||
nullptr, nullptr, nullptr)) >= 0) {
|
||||
sa->add(sa->set, start);
|
||||
start = end + 1;
|
||||
}
|
||||
}
|
||||
|
||||
#if !UCONFIG_NO_NORMALIZATION
|
||||
|
||||
U_CAPI int32_t U_EXPORT2
|
||||
|
@ -397,6 +397,10 @@ enum UPropertySource {
|
||||
UPROPS_SRC_NFKC_CF,
|
||||
/** From normalizer2impl.cpp/nfc.nrm canonical iterator data */
|
||||
UPROPS_SRC_NFC_CANON_ITER,
|
||||
// Text layout properties.
|
||||
UPROPS_SRC_INPC,
|
||||
UPROPS_SRC_INSC,
|
||||
UPROPS_SRC_VO,
|
||||
/** One more than the highest UPropertySource (UPROPS_SRC_) constant. */
|
||||
UPROPS_SRC_COUNT
|
||||
};
|
||||
@ -425,6 +429,9 @@ uchar_addPropertyStarts(const USetAdder *sa, UErrorCode *pErrorCode);
|
||||
U_CFUNC void U_EXPORT2
|
||||
upropsvec_addPropertyStarts(const USetAdder *sa, UErrorCode *pErrorCode);
|
||||
|
||||
U_CFUNC void U_EXPORT2
|
||||
uprops_addPropertyStarts(UPropertySource src, const USetAdder *sa, UErrorCode *pErrorCode);
|
||||
|
||||
/**
|
||||
* Return a set of characters for property enumeration.
|
||||
* For each two consecutive characters (start, limit) in the set,
|
||||
|
Binary file not shown.
@ -49,6 +49,121 @@ For new script codes see http://www.unicode.org/iso15924/codechanges.html
|
||||
|
||||
---------------------------------------------------------------------------- ***
|
||||
|
||||
ICU 63 addition of ICU support of text layout properties InPC, InSC, vo
|
||||
|
||||
* Command-line environment setup
|
||||
|
||||
UNICODE_DATA=~/unidata/uni11/20180609
|
||||
CLDR_SRC=~/svn.cldr/uni
|
||||
ICU_ROOT=~/icu/mine
|
||||
ICU_SRC=$ICU_ROOT/src
|
||||
ICUDT=icudt62b
|
||||
ICU4C_DATA_IN=$ICU_SRC/icu4c/source/data/in
|
||||
ICU4C_UNIDATA=$ICU_SRC/icu4c/source/data/unidata
|
||||
export LD_LIBRARY_PATH=$ICU_ROOT/dbg/icu4c/lib
|
||||
|
||||
*** Links
|
||||
|
||||
https://unicode-org.atlassian.net/browse/ICU-8966 InPC & InSC
|
||||
https://unicode-org.atlassian.net/browse/ICU-12850 vo
|
||||
|
||||
*** data files & enums & parser code
|
||||
|
||||
* API additions
|
||||
- for each of the three new enumerated properties
|
||||
+ uchar.h: add the enum UProperty constant UCHAR_<long prop name>
|
||||
+ uchar.h: update UCHAR_INT_LIMIT
|
||||
+ uchar.h: add the enum U<long prop name>
|
||||
with constants U_<short prop name>_<long value name>
|
||||
+ UProperty.java: add the constant <long prop name>
|
||||
+ UProperty.java: update INT_LIMIT
|
||||
+ UCharacter.java: add the interface <long prop name>
|
||||
with constants <long value name>
|
||||
|
||||
* process and/or copy files
|
||||
- $ICU_SRC/tools/unicode$ py/preparseucd.py $UNICODE_DATA $ICU_SRC
|
||||
+ This writes files (especially ppucd.txt) to the ICU4C unidata and testdata subfolders.
|
||||
+ It also writes tools/unicode/c/genprops/pnames_data.h with property and value
|
||||
names and aliases.
|
||||
+ For debugging, and tweaking how ppucd.txt is written,
|
||||
the tool has an --only_ppucd option:
|
||||
py/preparseucd.py $UNICODE_DATA --only_ppucd path/to/ppucd/outputfile
|
||||
|
||||
* preparseucd.py changes
|
||||
- add new property short names (uppercase) to _prop_and_value_re
|
||||
so that ParseUCharHeader() parses the new enum constants
|
||||
|
||||
* build ICU (make install)
|
||||
so that the tools build can pick up the new definitions from the installed header files.
|
||||
|
||||
$ICU_ROOT/dbg/icu4c$ echo;echo; make -j7 install > out.txt 2>&1 ; tail -n 30 out.txt ; date
|
||||
|
||||
* build Unicode tools using CMake+make
|
||||
|
||||
$ICU_SRC/tools/unicode/c/icudefs.txt:
|
||||
|
||||
# Location (--prefix) of where ICU was installed.
|
||||
set(ICU_INST_DIR /usr/local/google/home/mscherer/icu/mine/inst/icu4c)
|
||||
# Location of the ICU4C source tree.
|
||||
set(ICU4C_SRC_DIR /usr/local/google/home/mscherer/icu/mine/src/icu4c)
|
||||
|
||||
$ICU_ROOT/dbg$
|
||||
mkdir -p tools/unicode/c
|
||||
cd tools/unicode/c
|
||||
|
||||
$ICU_ROOT/dbg/tools/unicode/c$
|
||||
cmake ../../../../../src/tools/unicode/c
|
||||
make
|
||||
|
||||
* generate core properties data files
|
||||
$ICU_ROOT/dbg/tools/unicode/c$
|
||||
genprops/genprops $ICU_SRC/icu4c
|
||||
- rebuild ICU (make install) & tools
|
||||
|
||||
* write data for runtime, hardcoded for now
|
||||
- add genprops/layoutpropsbuilder.cpp with pieces from sibling files
|
||||
- generate new icu4c/source/common/ulayout_props_data.h
|
||||
- for each of the three new enumerated properties
|
||||
+ int property max value
|
||||
+ small, 8-bit UCPTrie
|
||||
(A small 16-bit trie with bit fields for these three properties
|
||||
is very nearly the same size as the sum of the three.)
|
||||
|
||||
* wire into C++
|
||||
- uprops.cpp: #include ulayout_props_data.h
|
||||
- uprops.cpp: add getInPC() etc. functions
|
||||
- uprops.cpp: add lines to intProps[], include max values
|
||||
- uprops.h: add UPropertySource constants
|
||||
- uprops.cpp: add uprops_addPropertyStarts(src)
|
||||
- uniset_props.cpp: add to UnicodeSet_initInclusion()
|
||||
- intltest/ucdtest.cpp: write unit tests
|
||||
|
||||
* update Java data files
|
||||
- refresh just the pnames.icu file with the new property [value] names, just to be safe
|
||||
- see $ICU_SRC/icu4c/source/data/icu4j-readme.txt
|
||||
- mkdir -p /tmp/icu4j/com/ibm/icu/impl/data/$ICUDT
|
||||
- $ICU_ROOT/dbg/icu4c$ make ICU4J_ROOT=/tmp/icu4j icu4j-data-install
|
||||
- copy the big-endian Unicode data files to another location,
|
||||
separate from the other data files,
|
||||
and then refresh ICU4J
|
||||
cd $ICU_ROOT/dbg/icu4c/data/out/icu4j
|
||||
cp com/ibm/icu/impl/data/$ICUDT/pnames.icu /tmp/icu4j/com/ibm/icu/impl/data/$ICUDT
|
||||
jar uvf $ICU_SRC/icu4j/main/shared/data/icudata.jar -C /tmp/icu4j com/ibm/icu/impl/data/$ICUDT
|
||||
|
||||
* wire into Java
|
||||
- UCharacterProperty.java: add new SRC_INPC etc. constants as in C++
|
||||
- UCharacterProperty.java: for each new property
|
||||
+ create a nested class to hold its CodePointTrie
|
||||
+ initialize it from a string literal
|
||||
+ paste in the initializer printed by genprops
|
||||
+ add a new IntProperty object to the intProps[] array
|
||||
+ use the correct max int value for each property, also printed by genprops
|
||||
- UCharacterProperty.java: add ulayout_addPropertyStarts(src, set)
|
||||
- UnicodeSet.java: add to getInclusions()
|
||||
- UCharacterTest.java: write unit tests
|
||||
|
||||
---------------------------------------------------------------------------- ***
|
||||
|
||||
Unicode 11.0 update for ICU 62
|
||||
|
||||
http://www.unicode.org/versions/Unicode11.0.0/
|
||||
|
@ -62,6 +62,9 @@ void UnicodeTest::runIndexedTest( int32_t index, UBool exec, const char* &name,
|
||||
TESTCASE_AUTO(TestScriptMetadata);
|
||||
TESTCASE_AUTO(TestBidiPairedBracketType);
|
||||
TESTCASE_AUTO(TestEmojiProperties);
|
||||
TESTCASE_AUTO(TestIndicPositionalCategory);
|
||||
TESTCASE_AUTO(TestIndicSyllabicCategory);
|
||||
TESTCASE_AUTO(TestVerticalOrientation);
|
||||
TESTCASE_AUTO(TestDefaultScriptExtensions);
|
||||
TESTCASE_AUTO(TestInvalidCodePointFolding);
|
||||
TESTCASE_AUTO_END;
|
||||
@ -535,6 +538,50 @@ void UnicodeTest::TestEmojiProperties() {
|
||||
u_hasBinaryProperty(0xA9, UCHAR_EXTENDED_PICTOGRAPHIC));
|
||||
}
|
||||
|
||||
void UnicodeTest::TestIndicPositionalCategory() {
|
||||
IcuTestErrorCode errorCode(*this, "TestIndicPositionalCategory()");
|
||||
UnicodeSet na(u"[:InPC=NA:]", errorCode);
|
||||
assertTrue("mostly NA", 1000000 <= na.size() && na.size() <= UCHAR_MAX_VALUE - 500);
|
||||
UnicodeSet vol(u"[:InPC=Visual_Order_Left:]", errorCode);
|
||||
assertTrue("some Visual_Order_Left", 19 <= vol.size() && vol.size() <= 100);
|
||||
assertEquals("U+08FF: NA", U_INPC_NA,
|
||||
u_getIntPropertyValue(0x08FF, UCHAR_INDIC_POSITIONAL_CATEGORY));
|
||||
assertEquals("U+0900: Top", U_INPC_TOP,
|
||||
u_getIntPropertyValue(0x0900, UCHAR_INDIC_POSITIONAL_CATEGORY));
|
||||
assertEquals("U+10A06: Overstruck", U_INPC_OVERSTRUCK,
|
||||
u_getIntPropertyValue(0x10A06, UCHAR_INDIC_POSITIONAL_CATEGORY));
|
||||
}
|
||||
|
||||
void UnicodeTest::TestIndicSyllabicCategory() {
|
||||
IcuTestErrorCode errorCode(*this, "TestIndicSyllabicCategory()");
|
||||
UnicodeSet other(u"[:InSC=Other:]", errorCode);
|
||||
assertTrue("mostly Other", 1000000 <= other.size() && other.size() <= UCHAR_MAX_VALUE - 500);
|
||||
UnicodeSet ava(u"[:InSC=Avagraha:]", errorCode);
|
||||
assertTrue("some Avagraha", 16 <= ava.size() && ava.size() <= 100);
|
||||
assertEquals("U+08FF: Other", U_INSC_OTHER,
|
||||
u_getIntPropertyValue(0x08FF, UCHAR_INDIC_SYLLABIC_CATEGORY));
|
||||
assertEquals("U+0900: Bindu", U_INSC_BINDU,
|
||||
u_getIntPropertyValue(0x0900, UCHAR_INDIC_SYLLABIC_CATEGORY));
|
||||
assertEquals("U+11065: Brahmi_Joining_Number", U_INSC_BRAHMI_JOINING_NUMBER,
|
||||
u_getIntPropertyValue(0x11065, UCHAR_INDIC_SYLLABIC_CATEGORY));
|
||||
}
|
||||
|
||||
void UnicodeTest::TestVerticalOrientation() {
|
||||
IcuTestErrorCode errorCode(*this, "TestVerticalOrientation()");
|
||||
UnicodeSet r(u"[:vo=R:]", errorCode);
|
||||
assertTrue("mostly R", 0xc0000 <= r.size() && r.size() <= 0xd0000);
|
||||
UnicodeSet u(u"[:vo=U:]", errorCode);
|
||||
assertTrue("much U", 0x40000 <= u.size() && u.size() <= 0x50000);
|
||||
UnicodeSet tu(u"[:vo=Tu:]", errorCode);
|
||||
assertTrue("some Tu", 147 <= tu.size() && tu.size() <= 300);
|
||||
assertEquals("U+0E01: Rotated", U_VO_ROTATED,
|
||||
u_getIntPropertyValue(0x0E01, UCHAR_VERTICAL_ORIENTATION));
|
||||
assertEquals("U+3008: Transformed_Rotated", U_VO_TRANSFORMED_ROTATED,
|
||||
u_getIntPropertyValue(0x3008, UCHAR_VERTICAL_ORIENTATION));
|
||||
assertEquals("U+33333: Upright", U_VO_UPRIGHT,
|
||||
u_getIntPropertyValue(0x33333, UCHAR_VERTICAL_ORIENTATION));
|
||||
}
|
||||
|
||||
void UnicodeTest::TestDefaultScriptExtensions() {
|
||||
// Block 3000..303F CJK Symbols and Punctuation defaults to scx=Bopo Hang Hani Hira Kana Yiii
|
||||
// but some of its characters revert to scx=<script> which is usually Common.
|
||||
|
@ -41,6 +41,9 @@ public:
|
||||
void TestScriptMetadata();
|
||||
void TestBidiPairedBracketType();
|
||||
void TestEmojiProperties();
|
||||
void TestIndicPositionalCategory();
|
||||
void TestIndicSyllabicCategory();
|
||||
void TestVerticalOrientation();
|
||||
void TestDefaultScriptExtensions();
|
||||
void TestInvalidCodePointFolding();
|
||||
|
||||
|
@ -819,7 +819,7 @@ Normalizer2DataBuilder::writeCSourceFile(const char *filename) {
|
||||
const char *name=dataName.data();
|
||||
errorCode.assertSuccess();
|
||||
|
||||
FILE *f=usrc_create(path.data(), basename, "icu/source/tools/gennorm2/n2builder.cpp");
|
||||
FILE *f=usrc_create(path.data(), basename, 2016, "icu/source/tools/gennorm2/n2builder.cpp");
|
||||
if(f==NULL) {
|
||||
fprintf(stderr, "gennorm2/writeCSourceFile() error: unable to create the output file %s\n",
|
||||
filename);
|
||||
@ -827,7 +827,7 @@ Normalizer2DataBuilder::writeCSourceFile(const char *filename) {
|
||||
}
|
||||
fputs("#ifdef INCLUDED_FROM_NORMALIZER2_CPP\n\n", f);
|
||||
|
||||
char line[100], line2[100], line3[100];
|
||||
char line[100];
|
||||
sprintf(line, "static const UVersionInfo %s_formatVersion={", name);
|
||||
usrc_writeArray(f, line, dataInfo.formatVersion, 8, 4, "};\n");
|
||||
sprintf(line, "static const UVersionInfo %s_dataVersion={", name);
|
||||
@ -835,13 +835,7 @@ Normalizer2DataBuilder::writeCSourceFile(const char *filename) {
|
||||
sprintf(line, "static const int32_t %s_indexes[Normalizer2Impl::IX_COUNT]={\n", name);
|
||||
usrc_writeArray(f, line, indexes, 32, Normalizer2Impl::IX_COUNT, "\n};\n\n");
|
||||
|
||||
sprintf(line, "static const uint16_t %s_trieIndex[%%ld]={\n", name);
|
||||
sprintf(line2, "static const uint16_t %s_trieData[%%ld]={\n", name);
|
||||
usrc_writeUCPTrieArrays(f, line, line2, norm16Trie.getAlias(), "\n};\n\n");
|
||||
sprintf(line, "static const UCPTrie %s_trie={\n", name);
|
||||
sprintf(line2, "%s_trieIndex", name);
|
||||
sprintf(line3, "%s_trieData", name);
|
||||
usrc_writeUCPTrieStruct(f, line, norm16Trie.getAlias(), line2, line3, "};\n\n");
|
||||
usrc_writeUCPTrie(f, name, norm16Trie.getAlias());
|
||||
|
||||
sprintf(line, "static const uint16_t %s_extraData[%%ld]={\n", name);
|
||||
usrc_writeArray(f, line, extraData.getBuffer(), 16, extraData.length(), "\n};\n\n");
|
||||
|
@ -29,7 +29,7 @@
|
||||
|
||||
static FILE *
|
||||
usrc_createWithHeader(const char *path, const char *filename,
|
||||
const char *generator, const char *header) {
|
||||
const char *header, const char *generator) {
|
||||
char buffer[1024];
|
||||
const char *p;
|
||||
char *q;
|
||||
@ -72,20 +72,34 @@ usrc_createWithHeader(const char *path, const char *filename,
|
||||
}
|
||||
|
||||
U_CAPI FILE * U_EXPORT2
|
||||
usrc_create(const char *path, const char *filename, const char *generator) {
|
||||
// TODO: Add parameter for the first year this file was generated, not before 2016.
|
||||
static const char *header=
|
||||
"// © 2016 and later: Unicode, Inc. and others.\n"
|
||||
"// License & terms of use: http://www.unicode.org/copyright.html\n"
|
||||
"//\n"
|
||||
"// Copyright (C) 1999-2016, International Business Machines\n"
|
||||
"// Corporation and others. All Rights Reserved.\n"
|
||||
"//\n"
|
||||
"// file name: %s\n"
|
||||
"//\n"
|
||||
"// machine-generated by: %s\n"
|
||||
"\n\n";
|
||||
return usrc_createWithHeader(path, filename, generator, header);
|
||||
usrc_create(const char *path, const char *filename, int32_t copyrightYear, const char *generator) {
|
||||
const char *header;
|
||||
char buffer[200];
|
||||
if(copyrightYear<=2016) {
|
||||
header=
|
||||
"// © 2016 and later: Unicode, Inc. and others.\n"
|
||||
"// License & terms of use: http://www.unicode.org/copyright.html\n"
|
||||
"//\n"
|
||||
"// Copyright (C) 1999-2016, International Business Machines\n"
|
||||
"// Corporation and others. All Rights Reserved.\n"
|
||||
"//\n"
|
||||
"// file name: %s\n"
|
||||
"//\n"
|
||||
"// machine-generated by: %s\n"
|
||||
"\n\n";
|
||||
} else {
|
||||
sprintf(buffer,
|
||||
"// © %d and later: Unicode, Inc. and others.\n"
|
||||
"// License & terms of use: http://www.unicode.org/copyright.html\n"
|
||||
"//\n"
|
||||
"// file name: %%s\n"
|
||||
"//\n"
|
||||
"// machine-generated by: %%s\n"
|
||||
"\n\n",
|
||||
(int)copyrightYear);
|
||||
header=buffer;
|
||||
}
|
||||
return usrc_createWithHeader(path, filename, header, generator);
|
||||
}
|
||||
|
||||
U_CAPI FILE * U_EXPORT2
|
||||
@ -101,7 +115,7 @@ usrc_createTextData(const char *path, const char *filename, const char *generato
|
||||
"#\n"
|
||||
"# machine-generated by: %s\n"
|
||||
"\n\n";
|
||||
return usrc_createWithHeader(path, filename, generator, header);
|
||||
return usrc_createWithHeader(path, filename, header, generator);
|
||||
}
|
||||
|
||||
U_CAPI void U_EXPORT2
|
||||
@ -275,6 +289,22 @@ usrc_writeUCPTrieStruct(FILE *f,
|
||||
}
|
||||
}
|
||||
|
||||
U_CAPI void U_EXPORT2
|
||||
usrc_writeUCPTrie(FILE *f, const char *name, const UCPTrie *pTrie) {
|
||||
int32_t width=
|
||||
pTrie->valueWidth==UCPTRIE_VALUE_BITS_16 ? 16 :
|
||||
pTrie->valueWidth==UCPTRIE_VALUE_BITS_32 ? 32 :
|
||||
pTrie->valueWidth==UCPTRIE_VALUE_BITS_8 ? 8 : 0;
|
||||
char line[100], line2[100], line3[100];
|
||||
sprintf(line, "static const uint16_t %s_trieIndex[%%ld]={\n", name);
|
||||
sprintf(line2, "static const uint%d_t %s_trieData[%%ld]={\n", (int)width, name);
|
||||
usrc_writeUCPTrieArrays(f, line, line2, pTrie, "\n};\n\n");
|
||||
sprintf(line, "static const UCPTrie %s_trie={\n", name);
|
||||
sprintf(line2, "%s_trieIndex", name);
|
||||
sprintf(line3, "%s_trieData", name);
|
||||
usrc_writeUCPTrieStruct(f, line, pTrie, line2, line3, "};\n\n");
|
||||
}
|
||||
|
||||
U_CAPI void U_EXPORT2
|
||||
usrc_writeArrayOfMostlyInvChars(FILE *f,
|
||||
const char *prefix,
|
||||
|
@ -31,7 +31,7 @@
|
||||
* Writes a C/Java-style comment with the generator name.
|
||||
*/
|
||||
U_CAPI FILE * U_EXPORT2
|
||||
usrc_create(const char *path, const char *filename, const char *generator);
|
||||
usrc_create(const char *path, const char *filename, int32_t copyrightYear, const char *generator);
|
||||
|
||||
/**
|
||||
* Creates a source text file and writes a header comment with the ICU copyright.
|
||||
@ -97,6 +97,12 @@ usrc_writeUCPTrieStruct(FILE *f,
|
||||
const char *indexName, const char *dataName,
|
||||
const char *postfix);
|
||||
|
||||
/**
|
||||
* Writes the UCPTrie arrays and struct values.
|
||||
*/
|
||||
U_CAPI void U_EXPORT2
|
||||
usrc_writeUCPTrie(FILE *f, const char *name, const UCPTrie *pTrie);
|
||||
|
||||
/**
|
||||
* Writes the contents of an array of mostly invariant characters.
|
||||
* Characters 0..0x1f are printed as numbers,
|
||||
|
@ -23,6 +23,8 @@ import com.ibm.icu.lang.UScript;
|
||||
import com.ibm.icu.text.Normalizer2;
|
||||
import com.ibm.icu.text.UTF16;
|
||||
import com.ibm.icu.text.UnicodeSet;
|
||||
import com.ibm.icu.util.CodePointMap;
|
||||
import com.ibm.icu.util.CodePointTrie;
|
||||
import com.ibm.icu.util.ICUException;
|
||||
import com.ibm.icu.util.VersionInfo;
|
||||
|
||||
@ -101,8 +103,872 @@ public final class UCharacterProperty
|
||||
public static final int SRC_NFKC_CF=10;
|
||||
/** From normalizer2impl.cpp/nfc.nrm canonical iterator data */
|
||||
public static final int SRC_NFC_CANON_ITER=11;
|
||||
// Text layout properties.
|
||||
public static final int SRC_INPC=12;
|
||||
public static final int SRC_INSC=13;
|
||||
public static final int SRC_VO=14;
|
||||
/** One more than the highest UPropertySource (SRC_) constant. */
|
||||
public static final int SRC_COUNT=12;
|
||||
public static final int SRC_COUNT=15;
|
||||
|
||||
// hardcoded text layout properties ----------------------------------
|
||||
// TODO(ICU-20111): move to a data file and load on demand
|
||||
|
||||
private static final CodePointTrie makeTrie(String data) {
|
||||
// One char == one byte.
|
||||
// U+0000 and U+007A='z' are swapped because
|
||||
// Java class String literals encode U+0000 and U+0080..U+07FF in two bytes.
|
||||
byte[] bytes = new byte[data.length()];
|
||||
for (int i = 0; i < bytes.length; ++i) {
|
||||
char c = data.charAt(i);
|
||||
if (c == 0) {
|
||||
c = 'z';
|
||||
} else if (c == 'z') {
|
||||
c = 0;
|
||||
}
|
||||
assert 0 <= c && c <= 0xff;
|
||||
bytes[i] = (byte)c;
|
||||
}
|
||||
return CodePointTrie.fromBinary(null, null, ByteBuffer.wrap(bytes));
|
||||
}
|
||||
|
||||
// Do not store the data in static String variables because
|
||||
// those would not be garbage-collected.
|
||||
|
||||
private static final class InPCTrie {
|
||||
static final CodePointTrie INSTANCE = makeTrie(
|
||||
"\63\151\162\124\102z\375\2\162\13\2zzz\220z" +
|
||||
"zz\100zzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzz\200z\300z\377z\77\1" +
|
||||
"\176\1\276\1\176\1\376\1\76\2\176\2\274\2\374\2" +
|
||||
"\74\3\173\3\76\2\273\3\373\3\71\4\167\4\255\4" +
|
||||
"\341\4\41\5\61\5\161\5\231\5\331\5\31\6\126\6" +
|
||||
"\267\2\306\2\322\2\306\2\355\2zz\20z\40z" +
|
||||
"\60z\100z\120z\140z\160zzz\20z\40z" +
|
||||
"\60zzz\20z\40z\60zzz\20z\40z" +
|
||||
"\60zzz\20z\40z\60zzz\20z\40z" +
|
||||
"\60zzz\20z\40z\60zzz\20z\40z" +
|
||||
"\60zzz\20z\40z\60z\200z\220z\240z" +
|
||||
"\260z\300z\320z\340z\360z\377z\17\1\37\1" +
|
||||
"\57\1\77\1\117\1\137\1\157\1\176\1\216\1\236\1" +
|
||||
"\256\1\276\1\316\1\336\1\356\1\176\1\216\1\236\1" +
|
||||
"\256\1\376\1\16\2\36\2\56\2\76\2\116\2\136\2" +
|
||||
"\156\2\176\2\216\2\236\2\256\2\274\2\314\2\334\2" +
|
||||
"\354\2\374\2\14\3\34\3\54\3\74\3\114\3\134\3" +
|
||||
"\154\3\173\3\213\3\233\3\253\3\76\2\116\2\136\2" +
|
||||
"\156\2\273\3\313\3\333\3\353\3\373\3\13\4\33\4" +
|
||||
"\53\4\71\4\111\4\131\4\151\4\167\4\207\4\227\4" +
|
||||
"\247\4\255\4\275\4\315\4\335\4\341\4\361\4\1\5" +
|
||||
"\21\5\41\5\61\5\101\5\121\5\61\5\101\5\121\5" +
|
||||
"\141\5\161\5\201\5\221\5\241\5\231\5\251\5\271\5" +
|
||||
"\311\5\331\5\351\5\371\5\11\6\31\6\51\6\71\6" +
|
||||
"\111\6\126\6\146\6\166\6\206\6zzzz\213\6" +
|
||||
"\232\6zz\251\6\270\6\307\6\325\6\345\6zz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzz\363\6zz\363\6" +
|
||||
"zz\1\7zz\1\7zzzzzz\13\7" +
|
||||
"\33\7\51\7zzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzz\71\7\111\7zzzz" +
|
||||
"zzzzzzzzzz\131\7\150\7zz" +
|
||||
"zzzz\162\7zzzzzz\176\7\215\7" +
|
||||
"\233\7zzzzzzzzzzzzzz" +
|
||||
"zz\253\7zzzz\267\7\307\7zz\314\7" +
|
||||
"\54\5\201zzz\334\7zzzzzz\352\7" +
|
||||
"\373\3zzzz\372\7\7\10zzzzzz" +
|
||||
"zzzzzzzzzzzz\27\10\47\10" +
|
||||
"\65\10zzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"\263\2\77\10zz\114\10zzzzzzzz" +
|
||||
"zz\1\1zzzz\130\10\144\10zz\164\10" +
|
||||
"\202\10zzzz\222\10zz\240\10\373\3zz" +
|
||||
"zz\200zzzzz\260\10\300\10zz\271\2" +
|
||||
"zzzz\307\10\326\10\343\10zzzz\361\10" +
|
||||
"zzzzzz\1\11\275\2zz\21\11\121\1" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzz\41\11zz" +
|
||||
"\60\11zzzz\100\11zzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"\120\11zzzz\130\11\146\11zzzzzz" +
|
||||
"\201zzzzz\166\11zzzzzzzz" +
|
||||
"\55\5zz\201\11\221\11\313\3zzzz\131\6" +
|
||||
"\201zzzzz\236\11\256\11zzzzzz" +
|
||||
"\273\11\313\11zzzzzzzzzzzz" +
|
||||
"zzzzzz\161z\333\11zz\377zzz" +
|
||||
"zz\346\11\366\11\117\1\4\12\53\5zzzz" +
|
||||
"zzzzzzzzzzzz\234\11\24\12" +
|
||||
"\157\1zzzzzzzzzz\44\12\63\12" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzz\353\2\103\12\343z" +
|
||||
"\24\2zzzzzz\123\12\276\2zzzz" +
|
||||
"zzzzzz\143\12\163\12zzzzzz" +
|
||||
"zzzz\173\12\213\12zzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zz\227\12\246\12zzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzz\265\12" +
|
||||
"zzzz\302\12zz\321\12zzzz\335\12" +
|
||||
"\347\12zzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzz\353\2" +
|
||||
"\367\12zzzzzzzzzz\7\13\17\13" +
|
||||
"\36\13zzzzzzzzzzzzzz" +
|
||||
"\55\13\74\13zzzzzz\104\13\124\13zz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzz\141\13zz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzz\105z" +
|
||||
"\115z\115z\115z\135z\175z\235z\275z\335z" +
|
||||
"\2z\2z\354z\12\1\51\1\111\1\2z\2z" +
|
||||
"\2z\2z\2z\2z\2z\2z\2z\2z" +
|
||||
"\2z\2z\2z\2z\2z\2z\2z\2z" +
|
||||
"\2z\2z\2z\2z\2z\2z\2z\2z" +
|
||||
"\2z\2z\2z\2z\2z\2z\151\1\210\1" +
|
||||
"\2z\2z\2z\2z\2z\2z\2z\2z" +
|
||||
"\2z\2z\250\1\2z\2z\310\1\346\1\3\2" +
|
||||
"\41\2\77\2\137\2\175\2\227\2zzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzz\10\10\10\7zz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzz\10\7\1z\7\4\7\1\1\1\1\10" +
|
||||
"\10\10\10\7\7\7\7\1\4\7z\10\1\10\10\10" +
|
||||
"\1\1zzzzzzzzzz\1\1zz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzz\10\7\7zzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzz\1z\7\4\7\1\1\1\1zz" +
|
||||
"\4\4zz\5\5\1zzzzzzzzz" +
|
||||
"\7zzzzzzzzzz\1\1zzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzz\10z\10\10\7zzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzz\1z\7\4\7\1\1zzzz\10" +
|
||||
"\10zz\10\10\1zzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzz\10\10zzz\1zz" +
|
||||
"zzzzzzzz\7\1\1\1\1\10z\10" +
|
||||
"\10\15z\7\7\1zzzzzzzzzz" +
|
||||
"zzzzzzzzzz\1\1zzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zz\10\10\10\10\10\10z\10\7\7zzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzz\1z\7\10\7\1\1\1\1zz\4" +
|
||||
"\13zz\5\14\1zzzzzzzz\10\15" +
|
||||
"zzzzzzzzzz\1\1zzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzz\10zzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzz\7\7\10\7\7zzz\4\4\4z" +
|
||||
"\5\5\5\10zzzzzzzzz\7zz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzz\10\7\7\7\10zzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzz\10\10\7\7\7\7z\10\10\11z\10" +
|
||||
"\10\10\10zzzzzzz\10\1zzzz" +
|
||||
"zzzzzzz\1\1zzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzz\15\7\7\7\7z\10\15\15z\15" +
|
||||
"\15\10\10zzzzzzz\7\7zzzz" +
|
||||
"zzzzzzz\1\1zzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzz\10\10\7\7zzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"\10\10z\7\7\7\1\1z\4\4\4z\5\5\5" +
|
||||
"\10zzzzzzzzz\7zzzzz" +
|
||||
"zzzzz\1\1zzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzz\7\7zzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"z\10zzzz\7\7\7\10\10\1z\1z\7" +
|
||||
"\4\13\4\5\14\5\7zzzzzzzzz" +
|
||||
"zzzzzzzzz\7\7zzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzz\7\10\7\7\10" +
|
||||
"\10\10\10\1\1\1zzzzz\16\16\16\16\16" +
|
||||
"\7z\10\10\10\10\10\10\10\10zzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzz\7\10\7\7\10" +
|
||||
"\10\10\10\1\1z\10\1zzz\16\16\16\16\16" +
|
||||
"zzz\10\10\10\10\10\10zzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzz\1\1zzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzz\1z\1z\10zzz" +
|
||||
"z\7\4zzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzz\1\10\11\1\1\11\11\11\11\10\10\10" +
|
||||
"\10\10\7\10\11\10\10\1z\10\10zzzzz" +
|
||||
"\1\1\1\1\1\1\1\1\1\1\1z\1\1\1\1" +
|
||||
"\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1" +
|
||||
"\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1" +
|
||||
"zzzzzz\1zzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"\7\7\10\10\1\4\10\10\10\10\10\1\7z\10\7" +
|
||||
"z\1\1zzzzzz\7\7\1\1zzz" +
|
||||
"z\1\1z\7\7\7zz\7\7\7\7\7\7\7" +
|
||||
"zz\10\10\10\10zzzzzzzzzz" +
|
||||
"z\1\7\4\10\10\7\7\7\7\7\7\1z\7z" +
|
||||
"zzzzzzzzz\7\7\7\10zz\10" +
|
||||
"\1\1zzzzzzzzzzz\10\1z" +
|
||||
"zzzzzzzzzzz\7\10\10\10\10" +
|
||||
"\1\1\1\13\14\5\4\4\4\5\5\10\7\7\10\10" +
|
||||
"\10\10\10\10\10z\10zzzzzzzzz" +
|
||||
"\10zz\10\10\1\7\7\15\15\10\10\7\7\7z" +
|
||||
"zzz\7\7\1\7\7\7\7\7\7\1\10\1z" +
|
||||
"zzz\7\7\7\7\7\16\16\16\7\7\16\7\7" +
|
||||
"\7\7\7zzzzzzz\7\7zzzz" +
|
||||
"zzz\10\1\4\7\10zzzzz\4\1\7" +
|
||||
"\10\10\10\1\1\1\1z\7\10\7\7\10\10\10\10" +
|
||||
"\1\1\10\1\7\4\4\4\10\10\10\10\10\10\10\10" +
|
||||
"\10\10zz\1\10\10\10\10\7zzzzzz" +
|
||||
"zzzzz\10\7\10\10\1\1\1\3\11\12\4" +
|
||||
"\4\5\5\10\15\7zzzzzzzzzz" +
|
||||
"z\10\1\10\10\10z\7\1\1\10\1\4\7\10\10" +
|
||||
"\7z\1\1zzzzzz\10\7\10\10\7\7" +
|
||||
"\7\10\7\10zzzz\7\7\7\4\4\13\7\7" +
|
||||
"\1\10\10\10\10\4\4\10\1zzzzzzz" +
|
||||
"z\10\10\10z\6\1\1\1\1\1\10\10\1\1\1" +
|
||||
"\1\10\7\6\6\6\6\6\6\6zzzz\1z" +
|
||||
"zzz\10zz\7zzzzzzzz\10" +
|
||||
"zzzz\10zzzz\7\7\1\10\7zz" +
|
||||
"zzzzzz\7\7\7\7\7\7\7\7\7\7" +
|
||||
"\7\7\1\10zzzzzzzzzz\10\10" +
|
||||
"\10\10\10\10\10\10\10\10\10\10\10\10\10\10zz" +
|
||||
"zzzzzzzzzzz\10zzzz" +
|
||||
"zzzzzzz\1\1\1zzzzzz" +
|
||||
"z\1\1\1\10\1\1\1\1\10zzz\10\7\7" +
|
||||
"\10\10\1\1\4\4\10\7\7\2\3zzzzz" +
|
||||
"zzzzzzzzzz\10\10\10\10\1\10" +
|
||||
"\4\10\1\7\4\1\1zzzzzzzzz" +
|
||||
"\10zzzzzzzz\10\7zzzzz" +
|
||||
"zzzzzz\7\10\7zz\10\7\10\10\1" +
|
||||
"\16\16\10\10\16\7\16\16\7\10\10zzzzz" +
|
||||
"zzzzzz\4\1\10\4\7zzz\7\7" +
|
||||
"\10\7\7\1\7\7z\7\1zz\6\1\1z\10" +
|
||||
"\6zzzzz\1\1\1\10zzzzzz" +
|
||||
"zz\10\1\1zzzzz\7\10\7zzz" +
|
||||
"zzzzzzzzzz\10\10\10\10\1\1" +
|
||||
"\1\1\10\10\10\10\10zzzzzzzzz" +
|
||||
"\7\4\7\1\1\10\10\7\7\1\1zzzzz" +
|
||||
"zz\10\10\10\1\1\4\10\11\11\10\1\1z\10" +
|
||||
"zzzzzzzzzzz\7\4\7\1\1" +
|
||||
"\1\1\1\1\10\10\10\15\7zzzzzzz" +
|
||||
"z\1z\10\1zzzzzzzzzzz" +
|
||||
"z\7\7\7\1\10\10\15\15\10\7\10\10zzz" +
|
||||
"zzz\10z\7\4\7\1\1\10\10\10\10\1\1" +
|
||||
"zzzzzzzzzzz\1\1z\7\7" +
|
||||
"\10\7\7\7\7zz\4\4zz\5\5\7zz" +
|
||||
"\7\7zz\10\10\10\10\10\10\10zzz\7\7" +
|
||||
"\1\10\10\7\1zzzzzzzzz\7\4" +
|
||||
"\7\1\1\1\1\1\1\4\10\13\5\7\5\10\7\1" +
|
||||
"\1zzzzzzzzzzzz\4\7\1" +
|
||||
"\1\1\1zz\4\13\5\14\10\10\7\1\7\7\7" +
|
||||
"\1\1\1\1\1\1\10\10\7\7\10\7\1zzz" +
|
||||
"zzzzzzzz\10\7\10\4\7\1\1\10" +
|
||||
"\10\10\10\7\1zzzzzzzzzzz" +
|
||||
"zz\1z\10\7\7\10\10\1\1\4\10\1\10\10" +
|
||||
"\10zzzzzzzzzzzz\7\4\7" +
|
||||
"\1\1\1\10\10\10\10\10\7\1\1zzzzz" +
|
||||
"\10\1\1\10\10\10\10\10\10\1zzzzz\1" +
|
||||
"\1\10\10\10\10\7z\1\1\1\1z\10\1\1\10" +
|
||||
"\10\10\7\7\1\1\1zzzzzzzzz" +
|
||||
"z\1\1\1\1\1\1\10\7\10zzzzzz" +
|
||||
"z\10\10\1\1\1\1\1z\10\10\10\10\10\10\7" +
|
||||
"\1zz\1\1\1\1\1\1\1\1\1\1\1\1\1" +
|
||||
"\1z\7\1\1\1\1\1\1\4\1\10\7\10\10z" +
|
||||
"zzzzzzzz\10\10\10\10\10\1zz" +
|
||||
"z\10z\10\10z\10\10\1\10\1zz\1zz" +
|
||||
"zzzzzzzz\7\7\7\7\7z\10\10" +
|
||||
"z\7\7\10\7zzzzzzzzz\10\1" +
|
||||
"\4\7zzzzzzzzzz");
|
||||
}
|
||||
|
||||
private static final class InSCTrie {
|
||||
static final CodePointTrie INSTANCE = makeTrie(
|
||||
"\63\151\162\124\102z\102\3\170\17\4z\100z\220z" +
|
||||
"zz\100z\140z\224z\100z\100z\100z\100z" +
|
||||
"\100z\100z\100z\100z\100z\100z\100z\100z" +
|
||||
"\100z\100z\100z\100z\100z\100z\100z\100z" +
|
||||
"\100z\100z\100z\100z\100z\100z\100z\100z" +
|
||||
"\100z\100z\100z\100z\324z\22\1\122\1\220\1" +
|
||||
"\317\1\15\2\114\2\212\2\312\2\10\3\106\3\204\3" +
|
||||
"\304\3\2\4\101\4\177\4\277\4\375\4\75\5\175\5" +
|
||||
"\274\5\374\5\73\6\173\6\233\6\333\6\33\7\130\7" +
|
||||
"\370\2\13\3\27\3\13\3\62\3zz\20z\40z" +
|
||||
"\60z\100z\120z\140z\160z\140z\160z\200z" +
|
||||
"\220z\224z\244z\264z\304z\100z\120z\140z" +
|
||||
"\160z\100z\120z\140z\160z\100z\120z\140z" +
|
||||
"\160z\100z\120z\140z\160z\100z\120z\140z" +
|
||||
"\160z\100z\120z\140z\160z\100z\120z\140z" +
|
||||
"\160z\100z\120z\140z\160z\324z\344z\364z" +
|
||||
"\4\1\22\1\42\1\62\1\102\1\122\1\142\1\162\1" +
|
||||
"\202\1\220\1\240\1\260\1\300\1\317\1\337\1\357\1" +
|
||||
"\377\1\15\2\35\2\55\2\75\2\114\2\134\2\154\2" +
|
||||
"\174\2\212\2\232\2\252\2\272\2\312\2\332\2\352\2" +
|
||||
"\372\2\10\3\30\3\50\3\70\3\106\3\126\3\146\3" +
|
||||
"\166\3\204\3\224\3\244\3\264\3\304\3\324\3\344\3" +
|
||||
"\364\3\2\4\22\4\42\4\62\4\101\4\121\4\141\4" +
|
||||
"\161\4\177\4\217\4\237\4\257\4\277\4\317\4\337\4" +
|
||||
"\357\4\375\4\15\5\35\5\55\5\75\5\115\5\135\5" +
|
||||
"\155\5\175\5\215\5\235\5\255\5\274\5\314\5\334\5" +
|
||||
"\354\5\374\5\14\6\34\6\54\6\73\6\113\6\133\6" +
|
||||
"\153\6\173\6\213\6\233\6\253\6\233\6\253\6\273\6" +
|
||||
"\313\6\333\6\353\6\373\6\13\7\33\7\53\7\73\7" +
|
||||
"\113\7\130\7\150\7\170\7\210\7\351z\351z\230\7" +
|
||||
"\243\7\263\7\303\7\322\7\341\7\357\7\377\7\100z" +
|
||||
"\100z\100z\100z\100z\100z\100z\100z\100z" +
|
||||
"\100z\100z\100z\100z\100z\100z\100z\100z" +
|
||||
"\100z\100z\100z\100z\100z\17\10\35\10\346z" +
|
||||
"\35\10\346z\55\10\17\10\75\10\351z\351z\115\10" +
|
||||
"\131\10\143\10\162\10\60z\100z\100z\100z\100z" +
|
||||
"\100z\100z\100z\100z\100z\100z\100z\100z" +
|
||||
"\100z\100z\100z\100z\202\10\154\1\222\10\242\10" +
|
||||
"\55\2\351z\262\10\302\10\351z\351z\164\3\322\10" +
|
||||
"\341\10\60z\100z\100z\351z\361\10\351z\351z" +
|
||||
"\1\11\16\11\36\11\52\11\60z\60z\100z\100z" +
|
||||
"\100z\100z\100z\100z\72\11\346z\351z\112\11" +
|
||||
"\126\11\60z\100z\100z\146\11\351z\165\11\205\11" +
|
||||
"\351z\351z\225\11\245\11\351z\351z\265\11\302\11" +
|
||||
"\322\11\100z\100z\100z\100z\100z\100z\100z" +
|
||||
"\100z\342\11\360\11\376\11\100z\100z\100z\100z" +
|
||||
"\100z\100z\100z\100z\100z\100z\100z\100z" +
|
||||
"\100z\100z\100z\10\12\24\12\44\12\100z\100z" +
|
||||
"\100z\100z\100z\132\7\62\12\100z\100z\100z" +
|
||||
"\100z\100z\100z\100z\100z\100z\100z\100z" +
|
||||
"\100z\100z\100z\100z\100z\100z\100z\100z" +
|
||||
"\100z\100z\100z\100z\100z\100z\100z\100z" +
|
||||
"\100z\164z\100z\100z\100z\102\12\351z\117\12" +
|
||||
"\100z\351z\137\12\155\12\174\12\326z\347z\351z" +
|
||||
"\214\12\230\12\60z\250\12\266\12\306\12\351z\324\12" +
|
||||
"\351z\344\12\363\12\100z\100z\3\13\351z\351z" +
|
||||
"\22\13\227\2\60z\42\13\62\13\343z\351z\211\10" +
|
||||
"\102\13\122\13\60z\351z\141\13\351z\351z\351z" +
|
||||
"\161\13\201\13\100z\221\13\241\13\100z\100z\100z" +
|
||||
"\100z\100z\100z\100z\100z\100z\100z\100z" +
|
||||
"\100z\261\13\301\13\316\13\60z\336\13\356\13\351z" +
|
||||
"\370\13\61z\100z\100z\100z\100z\100z\100z" +
|
||||
"\100z\100z\100z\100z\100z\100z\100z\100z" +
|
||||
"\100z\100z\100z\100z\100z\100z\100z\100z" +
|
||||
"\100z\100z\100z\100z\100z\10\14\346z\351z" +
|
||||
"\212\10\30\14\46\14\60\14\100\14\120\14\351z\351z" +
|
||||
"\140\14\100z\100z\100z\100z\160\14\351z\213\10" +
|
||||
"\200\14\220\14\240\14\351z\255\14\325z\350z\351z" +
|
||||
"\275\14\315\14\60z\272\6\65z\341z\353\3\206\10" +
|
||||
"\335\14\100z\100z\100z\100z\355\14\155\1\374\14" +
|
||||
"\337z\351z\14\15\34\15\60z\54\15\142\1\162\1" +
|
||||
"\74\15\10\3\114\15\134\15\355\11\100z\100z\100z" +
|
||||
"\100z\100z\100z\100z\100z\333z\351z\351z" +
|
||||
"\154\15\0\15\212\15\100z\100z\231\15\351z\351z" +
|
||||
"\37\11\251\15\60z\100z\100z\100z\100z\100z" +
|
||||
"\100z\100z\100z\100z\100z\333z\351z\377z" +
|
||||
"\271\15\311\15\321\15\100z\100z\333z\351z\351z" +
|
||||
"\341\15\361\15\60z\100z\100z\337z\351z\1\16" +
|
||||
"\16\16\60z\100z\100z\100z\351z\36\16\56\16" +
|
||||
"\76\16\100z\100z\100z\100z\100z\100z\100z" +
|
||||
"\100z\100z\100z\100z\100z\337z\351z\206\10" +
|
||||
"\116\16\100z\100z\100z\100z\100z\100z\100z" +
|
||||
"\100z\100z\100z\100z\100z\100z\100z\100z" +
|
||||
"\100z\100z\100z\100z\100z\100z\100z\100z" +
|
||||
"\100z\100z\100z\100z\100z\136\16\351z\351z" +
|
||||
"\153\16\173\16\213\16\351z\351z\227\16\241\16\100z" +
|
||||
"\100z\100z\100z\100z\100z\100z\100z\100z" +
|
||||
"\100z\100z\100z\100z\100z\100z\100z\100z" +
|
||||
"\100z\100z\100z\100z\100z\261\16\351z\377z" +
|
||||
"\301\16\321\16\273\6\341\16\125\5\351z\357\16\53\7" +
|
||||
"\377\16\100z\100z\100z\100z\17\17\351z\351z" +
|
||||
"\36\17\56\17\60z\76\17\351z\112\17\127\17\60z" +
|
||||
"\100z\100z\100z\100z\100z\100z\100z\100z" +
|
||||
"\100z\100z\100z\100z\100z\100z\351z\147\17" +
|
||||
"\100z\100z\100z\100z\100z\100z\100z\100z" +
|
||||
"\100z\100z\100z\100z\100z\100z\100z\100z" +
|
||||
"\105z\125z\125z\125z\145z\205z\245z\305z" +
|
||||
"\345z\4z\4z\365z\24\1\64\1\124\1\4z" +
|
||||
"\164\1\4z\175\1\4z\4z\4z\4z\4z" +
|
||||
"\4z\4z\4z\4z\4z\4z\4z\4z" +
|
||||
"\4z\4z\4z\4z\4z\4z\4z\4z" +
|
||||
"\4z\4z\4z\4z\4z\4z\4z\4z" +
|
||||
"\4z\4z\4z\235\1\275\1\4z\4z\4z" +
|
||||
"\4z\4z\4z\4z\4z\4z\4z\335\1" +
|
||||
"\4z\4z\375\1\35\2\75\2\135\2\175\2\235\2" +
|
||||
"\275\2\330\2zzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"z\14zz\30\30\30\30\30\30\30\30\30\30zz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzz\14zzzzzzzzzzz" +
|
||||
"zzzzzz\34\34zzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzz\14" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzz\2\2\2\40\43\43\43\43" +
|
||||
"\43\43\43\43\43\43\43\43\43\43\43\43\43\5\5\5" +
|
||||
"\5\5\5\5\5\5\5\5\5\5\5\5\5\5\5\5" +
|
||||
"\5\5\5\5\5\5\5\5\5\5\5\5\5\5\5\5" +
|
||||
"\5\5\42\42\27\1\42\42\42\42\42\42\42\42\42\42" +
|
||||
"\42\42\42\37\42\42z\4\4zz\42\42\42\5\5" +
|
||||
"\5\5\5\5\5\5\43\43\42\42zz\30\30\30\30" +
|
||||
"\30\30\30\30\30\30zz\43\43\43\43\43\43\5\5" +
|
||||
"\5\5\5\5\5\5\14\2\2\40z\43\43\43\43\43" +
|
||||
"\43\43\43zz\43\43zz\43\43\5\5\5\5\5" +
|
||||
"\5\5\5\5\5\5\5\5\5\5\5\5\5\5\5z" +
|
||||
"\5\5\5\5\5\5\5z\5zzz\5\5\5\5" +
|
||||
"zz\27\1\42\42\42\42\42zz\42\42zz\42" +
|
||||
"\42\37\6zzzzzzzz\42zzzz" +
|
||||
"\5\5z\5\43\43\42\42zz\30\30\30\30\30\30" +
|
||||
"\30\30\30\30\5\5zzzzzzzzzz" +
|
||||
"\2z\34z\2\2\40z\43\43\43\43\43\43zz" +
|
||||
"zz\43\43zz\43\43\5\5\5\5\5\5\5\5" +
|
||||
"\5\5\5\5\5\5\5\5\5\5\5\5z\5\5\5" +
|
||||
"\5\5\5\5z\5\5z\5\5z\5\5zz\27" +
|
||||
"z\42\42\42zzzz\42\42zz\42\42\37z" +
|
||||
"zz\4zzzzzzz\5\5\5\5z\5" +
|
||||
"zzzzzzz\30\30\30\30\30\30\30\30\30" +
|
||||
"\30\2\22\14\14z\13zzzzzzzzz" +
|
||||
"z\2\2\40z\43\43\43\43\43\43\43\43\43z\43" +
|
||||
"\43\43z\43\43\5\5\5\5\5\5\5\5\5\5\5" +
|
||||
"\5\5\5\5\5\5\5\5\5z\5\5\5\5\5\5" +
|
||||
"\5z\5\5z\5\5\5\5\5zz\27\1\42\42" +
|
||||
"\42\42\42\42z\42\42\42z\42\42\37zzzz" +
|
||||
"zzzzzzzzzzzzzz\43\43" +
|
||||
"\42\42zz\30\30\30\30\30\30\30\30\30\30zz" +
|
||||
"zzzzzzz\5\4\4\4\27\27\27z\2" +
|
||||
"\2\40z\43\43\43\43\43\43\43\43zz\43\43z" +
|
||||
"z\43\43\5\5\5\5\5\5\5\5\5\5\5\5\5" +
|
||||
"\5\5\5\5\5\5\5z\5\5\5\5\5\5\5z" +
|
||||
"\5\5z\5\5\5\5\5zz\27\1\42\42\42\42" +
|
||||
"\42zz\42\42zz\42\42\37zzzzzz" +
|
||||
"zz\42\42zzzz\5\5z\5\43\43\42\42" +
|
||||
"zz\30\30\30\30\30\30\30\30\30\30z\5zz" +
|
||||
"zzzzzzzzzzzz\2\25z\43" +
|
||||
"\43\43\43\43\43zzz\43\43\43z\43\43\43\5" +
|
||||
"zzz\5\5z\5z\5\5zzz\5\5z" +
|
||||
"zz\5\5\5zzz\5\5\5\5\5\5\5\5" +
|
||||
"\5\5\5\5zzzz\42\42\42zzz\42\42" +
|
||||
"\42z\42\42\42\37zzzzzzzzz\42" +
|
||||
"zzzzzzzzzzzzzz\30\30" +
|
||||
"\30\30\30\30\30\30\30\30zzzzzzzz" +
|
||||
"zzzzzzzz\2\2\2\40\2\43\43\43" +
|
||||
"\43\43\43\43\43z\43\43\43z\43\43\43\5\5\5" +
|
||||
"\5\5\5\5\5\5\5\5\5\5\5\5\5\5\5\5" +
|
||||
"\5z\5\5\5\5\5\5\5\5\5\5\5\5\5\5" +
|
||||
"\5\5zzz\1\42\42\42\42\42z\42\42\42z" +
|
||||
"\42\42\42\37zzzzzzz\42\42z\5\5" +
|
||||
"\5zzzzz\43\43\42\42zz\30\30\30\30" +
|
||||
"\30\30\30\30\30\30zzzzzzzzzz" +
|
||||
"zzzzzz\2\2\40z\43\43\43\43\43\43" +
|
||||
"\43\43z\43\43\43z\43\43\43\5\5\5\5\5\5" +
|
||||
"\5\5\5\5\5\5\5\5\5\5\5\5\5\5z\5" +
|
||||
"\5\5\5\5\5\5\5\5\5z\5\5\5\5\5z" +
|
||||
"z\27\1\42\42\42\42\42z\42\42\42z\42\42\42" +
|
||||
"\37zzzzzzz\42\42zzzzzz" +
|
||||
"z\5z\43\43\42\42zz\30\30\30\30\30\30\30" +
|
||||
"\30\30\30z\21\21zzzzzzzzzz" +
|
||||
"zzz\2\2\2\40z\43\43\43\43\43\43\43\43" +
|
||||
"z\43\43\43z\43\43\43\5\5\5\5\5\5\5\5" +
|
||||
"\5\5\5\5\5\5\5\5\5\5\5\5\5\5\5\5" +
|
||||
"\5\5\5\5\5\5\5\5\5\5\5\5\5\5\32\32" +
|
||||
"\1\42\42\42\42\42z\42\42\42z\42\42\42\37\15" +
|
||||
"zzzzz\6\6\6\42zzzzzzz" +
|
||||
"\43\43\43\42\42zz\30\30\30\30\30\30\30\30\30" +
|
||||
"\30zzzzzzzzzz\6\6\6\6\6" +
|
||||
"\6zz\2\40z\43\43\43\43\43\43\43\43\43\43" +
|
||||
"\43\43\43\43\43\43\43\43zzz\5\5\5\5\5" +
|
||||
"\5\5\5\5\5\5\5\5\5\5\5\5\5\5\5\5" +
|
||||
"\5\5\5z\5\5\5\5\5\5\5\5\5z\5z" +
|
||||
"z\5\5\5\5\5\5\5zzz\37zzzz" +
|
||||
"\42\42\42\42\42\42z\42z\42\42\42\42\42\42\42" +
|
||||
"\42zzzzzz\30\30\30\30\30\30\30\30\30" +
|
||||
"\30zz\42\42zzzzzzzzzzz" +
|
||||
"z\5\5\5\5\5\5\5\5\5\5\5\5\5\5\5" +
|
||||
"\5\5\5\5\5\5\5\5\5\5\5\5\5\5\5\5" +
|
||||
"\5\5\5\5\5\5\5\5\5\5\5\5\5\5\5z" +
|
||||
"\42\42\42\42\42\42\42\42\42\42\32zzzzz" +
|
||||
"\42\42\42\42\42\42z\42\36\36\36\36\12\2\32z" +
|
||||
"\30\30\30\30\30\30\30\30\30\30zzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"\5\5z\5zz\5\5z\5zz\5zzz" +
|
||||
"zzz\5\5\5\5z\5\5\5\5\5\5\5z" +
|
||||
"\5\5\5z\5z\5zz\5\5z\5\5z\42" +
|
||||
"\42\42\42\42\42\42\42\42\42z\42\13\13zz\42" +
|
||||
"\42\42\42\42zzz\36\36\36\36z\2zz\30" +
|
||||
"\30\30\30\30\30\30\30\30\30zz\5\5\5\5z" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzz\30" +
|
||||
"\30\30\30\30\30\30\30\30\30\30\30\30\30\30\30\30" +
|
||||
"\30\30\30z\34z\34z\27zzzzzz\5" +
|
||||
"\5\5\5\5\5\5\5z\5\5\5\5\5\5\5\5" +
|
||||
"\5\5\5\5\5\5\5\5\5\5\5\5\5\5\5\5" +
|
||||
"\5\5\5\5\5\5\5\5\5\5\5\5zzzz" +
|
||||
"\42\42\42\42\42\42\42\42\42\42\42\42\42\2\40\42" +
|
||||
"\42\2\2\32\1zz\10\10\10\10\10\17\17\17\17" +
|
||||
"\17\17\17\17\17\17\17z\17\17\17\17\17\17\17\17" +
|
||||
"\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17" +
|
||||
"\17\17\17\17\17\17\17\17\17\17\17\17zzzz" +
|
||||
"zz\34zzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzz\5\43\43\43" +
|
||||
"\43\43\43\43\43\43\43\42\42\42\42\42\42\2\36\40" +
|
||||
"\23\32\13\13\13\13\5\30\30\30\30\30\30\30\30\30" +
|
||||
"\30z\14zz\14z\5\5\43\43\43\43\42\42\42" +
|
||||
"\42\5\5\5\5\13\13\5\42\36\36\5\5\42\42\36" +
|
||||
"\36\36\36\36\5\5\42\42\42\42\5\5\5\5\5\5" +
|
||||
"\5\5\5\5\5\13\42\42\42\42\36\36\36\36\36\36" +
|
||||
"\36\5\36\30\30\30\30\30\30\30\30\30\30\36\36\42" +
|
||||
"\42zz\43\43\43\5\5\5\5\5\5\5\5\5\5" +
|
||||
"z\5\5\42\42\32zzzzzzzzzz" +
|
||||
"z\5\5\42\42zzzzzzzzzzz" +
|
||||
"z\5z\42\42zzzzzzzzzzz" +
|
||||
"z\5\5\5\43\43\43\43\43\43\43\43\43\43\43\43" +
|
||||
"\43zz\42\42\42\42\42\42\42\42\42\42\2\40\42" +
|
||||
"\33\33\34\20\12\34\34\32\23\34zzzzzz" +
|
||||
"zz\1\34zz\14\5\5\5\5\5\5\5\5\5" +
|
||||
"\5\5\5\5\5\5\42\42\42\42\42\42\42\42\42\17" +
|
||||
"\17\17zzzz\7\7\2\7\7\7\7\7\7\7" +
|
||||
"\42\34zzzz\5\5\5\41\41\41\41\41\41\41" +
|
||||
"\41\41\41\41zz\35\35\35\35\35zzzzz" +
|
||||
"zzzzzz\42\42\42\42\42\42\42\42\42\42" +
|
||||
"\42\42\42\42\42\42\7\7\7\7\7\7\7\36\36z" +
|
||||
"zzzzz\5\5\5\5\5\5\5\42\42\42\42" +
|
||||
"\42zzzz\5\5\5\5\5\5\5\5\5\5\5" +
|
||||
"\5\5\43\43\43\5\5\13\13\17\7\7\11\17\17\17" +
|
||||
"\17z\23\42\42\42\42\42\42\42\42\42\42\42\42\42" +
|
||||
"\42\42\2\36\36\36\36\36\32\34\34zz\34\2\2" +
|
||||
"\2\20\40\43\43\43\43\43\43\43\43\43\43\43\5\5" +
|
||||
"\5\5\27\42\42\42\42\42\42\42\42\42\42\42\37\5" +
|
||||
"\5\5\5\5\5\5zzzz\2\20\40\43\43\43" +
|
||||
"\43\43\43\43\5\5\5\5\5\5\17\17\17\42\42\42" +
|
||||
"\42\42\42\32\23\17\17\5\5\30\30\30\30\30\30\30" +
|
||||
"\30\30\30\1\5\5\5\7\7\5\5\5\5\43\43\27" +
|
||||
"\42\42\42\42\42\42\42\42\42\7\7\32\32zzz" +
|
||||
"zzzzzzzzz\5\5\5\5\17\17\42" +
|
||||
"\42\42\42\42\42\42\7\7\7\7\2\2\34\27zz" +
|
||||
"zzzzzz\30\30\30\30\30\30\30\30\30\30" +
|
||||
"zzz\5\5\5\4\4\4z\4\4\4\4\4\4" +
|
||||
"\4\4\4\4\4\4zzzzzzzzzz" +
|
||||
"zzzz\40\40\4\21\21\4\4\4zzzz" +
|
||||
"zzzzzzz\34zzzzzzzz" +
|
||||
"zzzz\26\24zz\14\14\14\14\14zzz" +
|
||||
"zzzzzzzz\34\34\34zzzzz" +
|
||||
"zzzzzz\43\43z\43\43\43\32\5\5\5" +
|
||||
"\5\2\5\5\5\5\42\42\42\42\42zzzzz" +
|
||||
"zzz\5\5\5\5\5\5\5\5\5\5\5\5\5" +
|
||||
"\5\41\41\5\5\5\5\41\17\17\5\5\5\5\5\5" +
|
||||
"\5\17\5\2zzzzzzzzzzzz" +
|
||||
"\5\5\5\5\13\42\42\42\42\42\42\42\42\42\42\42" +
|
||||
"\37\2zzzzzzzzzz\4\4\4\4" +
|
||||
"\4\4\4\4\4\4\4\4\4\4\4\4\2\2zz" +
|
||||
"zzzzzzzz\43\42\30\30\30\30\30\30" +
|
||||
"\30\30\30\30\5\5\5\5\5\5\41\41\41\41\41\41" +
|
||||
"\41\41\41\36\36\36zz\5\5\5\5\5\5\5\42" +
|
||||
"\42\42\42\42\42\42\42\7\7\7\32zzzzz" +
|
||||
"zzzzzzz\2\2\20\40\43\43\43\43\43" +
|
||||
"\5\5\5\43\43\43\5\5\5\27\42\42\42\42\42\42" +
|
||||
"\42\42\42\17\13\13\5\5\5\5\5\42z\5\5\5" +
|
||||
"\5\5\5\5\5\5\30\30\30\30\30\30\30\30\30\30" +
|
||||
"\5\5\5\5\5z\42\42\42\13\13\13\13zzz" +
|
||||
"zzzzzz\7\7\7\7\7\7\7\7\7\7" +
|
||||
"\7\7\7\7zz\5\5\5\14\14\14zzz\5" +
|
||||
"\36\36\36\5\5\42\42\42\42\42\42\42\42\42\42\42" +
|
||||
"\42\42\42\42\36\35\36\35zzzzzzzz" +
|
||||
"zzzzz\43\43\5\5\5\5\5\5\5\5\5" +
|
||||
"\42\42\42\42\42zzzzz\40\23zzzz" +
|
||||
"zzzzz\5\5\5\5\5\5\5\5\5\5\5" +
|
||||
"\5\5\5\43\43\5\43\5\5\5\5\5\5\5\5\5" +
|
||||
"\7\7\7\7\7\42\42\42\42\42\42\42\42z\36\32" +
|
||||
"zz\5\42\42\42z\42\42zzzzz\42\42" +
|
||||
"\2\40\5\5\5\5z\5\5\5z\5\5\5\5\5" +
|
||||
"\5\5zz\27\27\27zzzz\23\2\2\40\21" +
|
||||
"\21\43\43\43\43\43\43\43\43\43\43\43\42\42\42\42" +
|
||||
"\42\42\37zzzzzzzzz\3\3\3\3" +
|
||||
"\3\3\3\3\3\3\3\3\3\3\30\30\30\30\30\30" +
|
||||
"\30\30\30\30zzzzzzzzzzzz" +
|
||||
"zzz\31\2\2\40\43\43\43\43\43\43\43\43\43" +
|
||||
"\43\5\5\5\42\42\42\42\42\42\42\42\42\37\27z" +
|
||||
"zzzz\2\2\40\43\43\43\43\5\5\5\5\5" +
|
||||
"\5\5\5\5\42\42\42\23\32z\30\30\30\30\30\30" +
|
||||
"\30\30\30\30zzzz\5\42\42zzzzz" +
|
||||
"zzzz\41\41\41\41\41\5\5\5\5\5\5\5" +
|
||||
"\5\5\5\5\27zzzzzzzzzzz" +
|
||||
"z\5\5\5\42\42\42\42\42\42\42\42\42\42\42\42" +
|
||||
"\42\37\1\16\16zzzzz\34\27\42\42zz" +
|
||||
"z\42\42\42\42\2\37\27\22zzzzzz\4" +
|
||||
"z\43\43\43\43\5\5\5z\5z\5\5\5\5z" +
|
||||
"\5\5\5\5\5\5\5\5\5zzzzzzz" +
|
||||
"\5\5\5\5\5\5\5\5\5\5\5\5\5\5\5\2" +
|
||||
"\42\42\42\42\42\42\42\42\42\27\32zzzzz" +
|
||||
"\2\2\2\40z\43\43\43\43\43\43\43\43zz\43" +
|
||||
"\5z\5\5z\5\5\5\5\5z\27\27\1\42\42" +
|
||||
"zzzzzzz\42zzzzzz\2\2" +
|
||||
"\43\43\42\42zz\4\4\4\4\4\4\4zzz" +
|
||||
"\5\5\5\5\5\42\42\42\42\42\42\42\42\42\42\42" +
|
||||
"\37\2\2\40\27\1zzzzzzzz\30\30" +
|
||||
"\30\30\30\30\30\30\30\30zzzz\34z\43\43" +
|
||||
"\43\43\43\43\43\43\43\43\43\43\43\43\5\2\40\37" +
|
||||
"\27\1zzzzzzzzzzz\42\42\42" +
|
||||
"\42\42\42zz\42\42\42\42\2\2\40\37\27zz" +
|
||||
"zzzzzzzzzzzzz\43\43\43" +
|
||||
"\43\42\42zz\42\42\42\42\42\42\42\42\42\42\42" +
|
||||
"\42\42\2\40\37\42zzzzzzzzzz" +
|
||||
"zzzzz\5\5\5\5\5\5\5\5\5\5\5" +
|
||||
"\2\40\42\42\42\42\42\42\37\27zzzzzz" +
|
||||
"zz\5\5\5\5\5\5\5\5\5\5\5zz\13" +
|
||||
"\13\13\42\42\42\42\42\42\42\42\42\42\42\32zz" +
|
||||
"zz\30\30\30\30\30\30\30\30\30\30\30\30zz" +
|
||||
"zz\42\42\42\42\42\42\42\2\40\37\27zzz" +
|
||||
"zz\43\42\42\42\42\42\42\42\42\42\42\5\5\5" +
|
||||
"\5\5\34\32\2\2\2\2\40\16\13\13\13\13\14z" +
|
||||
"zzzz\14z\23zzzzzzzz\43" +
|
||||
"\42\42\42\42\42\42\42\42\42\42\42\5\5\5\5z" +
|
||||
"z\16\16\16\16\7\7\7\7\7\7\2\40\22\23z" +
|
||||
"zz\1zz\43\43\43\43\43\43\43\43\43z\43" +
|
||||
"\43\43\43\5\5\42\42\42\42\42\42\42z\42\42\42" +
|
||||
"\42\2\2\40\37\1zzzzzzzzzz" +
|
||||
"zzzzz\30\30\30\30\30\30\30\30\30\30\30" +
|
||||
"\30\30zzz\17\17\17\17\17\17\17\17\17\17\17" +
|
||||
"\17\17\17\42\42\42\42\42\2\2zzzzzz" +
|
||||
"zzz\43\43\43\43\43\43\43z\43\43z\43\5" +
|
||||
"\5\5\5\42\42\42\42\42\42zzz\42z\42\42" +
|
||||
"z\42\2\40\27\42\32\23\15\13zzzzzz" +
|
||||
"zz\43\43\43\43\43\43z\43\43z\43\43\5\5" +
|
||||
"\5\5\5\5\5\5\5\5\42\42\42\42\42z\42\42" +
|
||||
"\2\40\23zzzzzzzz\5\5\14\42\42" +
|
||||
"\42\42zzzzzzzzzz");
|
||||
}
|
||||
|
||||
private static final class VoTrie {
|
||||
static final CodePointTrie INSTANCE = makeTrie(
|
||||
"\63\151\162\124\102z\114\4\74\3\14zzz\200\10" +
|
||||
"zz\100z\131z\230zzzzzzzzz" +
|
||||
"zzzzzz\320zzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"\73\3\125\3\143\3\171\3\231\3\267\3\322\3\354\3" +
|
||||
"\125\3\125\3\125\3\14\4\125\3\125\3\125\3\14\4" +
|
||||
"\54\4\54\4\54\4\54\4\54\4\54\4\54\4\54\4" +
|
||||
"\54\4\54\4\54\4\54\4\54\4\54\4\54\4\54\4" +
|
||||
"\54\4\54\4\54\4\54\4\54\4\54\4\54\4\54\4" +
|
||||
"\54\4\54\4\54\4\54\4\54\4\54\4\54\4\54\4" +
|
||||
"\54\4\54\4\54\4\54\4\54\4\54\4\54\4\54\4" +
|
||||
"\54\4\54\4\54\4\54\4\125\3\125\3\125\3\14\4" +
|
||||
"\125\3\125\3\125\3\14\4zz\20z\40z\60z" +
|
||||
"\100z\120z\140z\160z\131z\151z\171z\211z" +
|
||||
"\230z\250z\270z\310zzz\20z\40z\60z" +
|
||||
"zz\20z\40z\60zzz\20z\40z\60z" +
|
||||
"zz\20z\40z\60z\320z\340z\360zz\1" +
|
||||
"zz\20z\40z\60zzz\20z\40z\60z" +
|
||||
"zz\20z\40z\60zzz\20z\40z\60z" +
|
||||
"zz\20z\40z\60zzz\20z\40z\60z" +
|
||||
"zz\20z\40z\60zzz\20z\40z\60z" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"\20\1\20\1\20\1\20\1\20\1\20\1\20\1\20\1" +
|
||||
"\20\1\20\1\20\1\20\1\20\1\20\1\20\1\20\1" +
|
||||
"\17\1\20\1\20\1\20\1\20\1\20\1\20\1\20\1" +
|
||||
"\20\1\20\1\20\1\20\1\20\1\20\1\20\1\20\1" +
|
||||
"\20\1\20\1\20\1\20\1\20\1\20\1\20\1\20\1" +
|
||||
"\20\1\20\1\20\1\20\1\20\1\20\1\20\1\20\1" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"\20\1\20\1\20\1\20\1\20\1zzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzz\251z\226z\36\1" +
|
||||
"\54\1\256z\252zzzzzzzzzzz" +
|
||||
"zz\3\1\74\1zz\114\1\130\1\146\1\13\1" +
|
||||
"\165\1\20\1\20\1\20\1\204\1zzzzzz" +
|
||||
"zzzzzzzz\162zzz\366zzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzz\220\1\20\1\230\1zzzz" +
|
||||
"zzzz\3\1\20\1\25\1zz\354z\250\1" +
|
||||
"\266\1\16\1\20\1\20\1\306\1\20\1\20\1\20\1" +
|
||||
"\20\1\20\1\20\1\20\1\20\1\20\1\20\1\20\1" +
|
||||
"\20\1\20\1zzzzzzzzzzzz" +
|
||||
"zzzzzzzz\20\1\20\1\20\1\20\1" +
|
||||
"\20\1\20\1\26\1\20\1\20\1\20\1\20\1\20\1" +
|
||||
"\20\1\20\1\20\1\20\1\20\1\20\1\20\1\20\1" +
|
||||
"\20\1\20\1\20\1\20\1\20\1\20\1\20\1\30\1" +
|
||||
"\12\1\20\1\322\1zzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzz\16\1\20\1zzzz" +
|
||||
"\26\1zzzzzzzzzz\10\1\20\1" +
|
||||
"\342\1\24\1\20\1zzzzzzzzzz" +
|
||||
"zzzzzz\20\1\20\1\20\1\20\1\20\1" +
|
||||
"\20\1\20\1\20\1\20\1\20\1\20\1\20\1\20\1" +
|
||||
"\20\1\20\1\20\1\20\1\20\1\20\1\20\1\20\1" +
|
||||
"\20\1\20\1\20\1\361\1\377\1\20\1\16\2\35\2" +
|
||||
"\20\1\52\2\20\1\67\2\106\2\126\2\20\1\52\2" +
|
||||
"\20\1\67\2\141\2\20\1\20\1\156\2\20\1\20\1" +
|
||||
"\20\1\20\1\20\1\20\1\20\1\20\1\20\1\20\1" +
|
||||
"\20\1\20\1\176\2\20\1\20\1\20\1\20\1\20\1" +
|
||||
"\20\1\20\1\20\1\20\1\20\1\20\1\20\1\20\1" +
|
||||
"\20\1\20\1\20\1\176\2\176\2\176\2\176\2\176\2" +
|
||||
"\206\2\20\1\216\2\20\1\20\1\20\1\20\1\20\1" +
|
||||
"\20\1\20\1\20\1\20\1\20\1\20\1\20\1\20\1" +
|
||||
"\20\1\20\1\20\1\20\1\20\1\20\1\20\1\20\1" +
|
||||
"\20\1\20\1\20\1\20\1\20\1\20\1\20\1\20\1" +
|
||||
"\20\1\20\1\20\1zzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zz\20\1\20\1zzzzzzzzzz" +
|
||||
"zzzzzz\20\1zz\20\1\27\1\233\2" +
|
||||
"\252\2zzzzzzzzzzzzzz" +
|
||||
"zzzz\272\2\311\2\20\1\331\2\20\1\351\2" +
|
||||
"\370\2zzzzzzzzzzzzzz" +
|
||||
"\10\3\30\3zzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzz\20\1\20\1zzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzz\20\1\20\1\20\1\20\1" +
|
||||
"\20\1\20\1\20\1\20\1zzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzz\20\1\20\1\20\1\20\1\20\1\20\1" +
|
||||
"\20\1\20\1\20\1\20\1\20\1\20\1\20\1\20\1" +
|
||||
"\20\1\20\1\20\1\20\1\20\1zzzzzz" +
|
||||
"zz\20\1\20\1\20\1\20\1\20\1\20\1\20\1" +
|
||||
"\20\1\20\1zzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"\20\1\20\1\20\1\20\1\20\1\20\1\20\1\20\1" +
|
||||
"\20\1\20\1zzzzzzzzzzzz" +
|
||||
"zzzz\50\3\20\1\20\1\20\1\20\1\20\1" +
|
||||
"\20\1\20\1\20\1\20\1\20\1\20\1\20\1\20\1" +
|
||||
"\20\1\20\1\20\1\20\1\20\1\20\1\20\1\20\1" +
|
||||
"\20\1\20\1\20\1\20\1\20\1\20\1\20\1\20\1" +
|
||||
"\20\1\20\1\22\1\204z\230z\250z\250z\250z" +
|
||||
"\250z\250z\250z\310z\14z\350zz\1\25\1" +
|
||||
"\14z\14z\14z\64\1\123\1\162\1\221\1\14z" +
|
||||
"\253\1\14z\313\1\353\1\13\2\43\2\43\2\43\2" +
|
||||
"\43\2\43\2\43\2\43\2\43\2\43\2\43\2\43\2" +
|
||||
"\43\2\43\2\43\2\43\2\43\2\43\2\43\2\43\2" +
|
||||
"\43\2\43\2\43\2\43\2\43\2\43\2\43\2\43\2" +
|
||||
"\43\2\43\2\43\2\43\2\43\2\373z\14z\103\2" +
|
||||
"\14z\43\2\43\2\43\2\43\2\43\2\43\2\43\2" +
|
||||
"\43\2\43\2\43\2\43\2\43\2\14z\14z\14z" +
|
||||
"\14z\43\2\43\2\43\2\43\2\43\2\43\2\43\2" +
|
||||
"\43\2\43\2\43\2\43\2\43\2\43\2\370z\14z" +
|
||||
"\142\2\14z\14z\14z\14z\202\2\14z\14z" +
|
||||
"\14z\14z\14z\234\2\14z\14z\375z\14z" +
|
||||
"\14z\14z\14z\14z\14z\14z\14z\14z" +
|
||||
"\14z\43\2\43\2\271\2\14z\14z\14z\14z" +
|
||||
"\14z\43\2z\1\14z\14z\14z\14z\14z" +
|
||||
"\14z\14z\14z\14z\14z\14z\14z\14z" +
|
||||
"\14z\14z\14z\14z\14z\14z\274\2\43\2" +
|
||||
"\43\2\43\2\43\2\43\2\43\2\43\2\43\2\370z" +
|
||||
"\14z\14z\14z\14z\14z\14z\14z\14z" +
|
||||
"\14z\14z\14z\14z\14z\14z\14z\14z" +
|
||||
"\14z\14z\332\2\370z\14z\14z\14z\14z" +
|
||||
"\14z\14z\14z\14z\43\2\372\2\14z\14z" +
|
||||
"\43\2\375z\14z\14z\14z\14z\14z\14z" +
|
||||
"\14z\14z\14z\14z\43\2\32\3\43\2\43\2" +
|
||||
"\310z\265\2\14z\14z\43\2\43\2\43\2\43\2" +
|
||||
"\43\2\43\2\43\2\43\2\43\2\43\2\43\2\43\2" +
|
||||
"\43\2\43\2\43\2\43\2\43\2\43\2\43\2\43\2" +
|
||||
"\43\2\43\2\43\2\43\2\43\2\43\2\43\2\43\2" +
|
||||
"\43\2\43\2\43\2\33\3\14z\14z\14z\14z" +
|
||||
"\14z\14z\14z\14z\14z\14z\14z\14z" +
|
||||
"\14z\14z\14z\14z\14z\14z\14z\14z" +
|
||||
"\14z\14z\14z\14z\14z\14z\14z\14z" +
|
||||
"\14z\14z\14z\14zzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzz\3z\3zzzz\3" +
|
||||
"zz\3zzzzzzzzzz\3\3\3" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzz\3zzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzz\3zzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zzzzzzzzzzzzzzzz" +
|
||||
"zz\3\3zzzzzzzzzzzz" +
|
||||
"zzzzzzzz\3\3\3\3\3\3\3\3" +
|
||||
"\3\3\3\3\3\3\3\3zzzzzzzz" +
|
||||
"z\3\3zzz\3zzzz\3\3\3zz" +
|
||||
"zzzz\3z\3\3\3zzzzzzz" +
|
||||
"zzzz\3\3z\3\3\3\3\3\3\3zz" +
|
||||
"zzz\3\3z\3\3zzzzzz\3\3" +
|
||||
"\3\3z\3z\3z\3zzzz\3zzz" +
|
||||
"zz\3\3\3\3\3\3z\3\3z\3\3\3\3" +
|
||||
"\3\3\3\3\3\3zz\3\3\3\3\3\3\3\3" +
|
||||
"zzzz\3\3\3\3\3\1\1\3zzzz" +
|
||||
"\3\3\3\3\3\3\3\3\3\3\3\3\3\3z\3" +
|
||||
"\3\3\3\3\3\3\3\3\3\3zzzz\3\3" +
|
||||
"\3z\3\3\3\3\3\3\3\3\3\3\3\3zz" +
|
||||
"zzzzzzzzzz\3\3z\3\3\3" +
|
||||
"\3\3\3\3\3\3\3\3\3\3\2\2\3\3\3\3" +
|
||||
"\3\1\1\1\1\1\1\1\1\3\3\1\1\1\1\1" +
|
||||
"\1\1\1\1\1\1\1\3\3\3\3\3\3\3\3\3" +
|
||||
"\3\3\3\3\3\3\2\3\2\3\2\3\2\3\2\3" +
|
||||
"\3\3\3\3\3\2\3\3\3\3\3\3\3\3\3\3" +
|
||||
"\3\3\2\3\2\3\2\3\3\3\3\3\3\2\3\3" +
|
||||
"\3\3\3\2\2\3\3\3\3\2\2\3\3\3\1\2" +
|
||||
"\3\2\3\2\3\2\3\2\3\3\3\3\3\3\2\2" +
|
||||
"\3\3\3\3\3\1\3\3\3\3\3\3\3\2\3\3" +
|
||||
"\3\3\3\3\3\3\2\2\2\2\2\2\2\2\2\2" +
|
||||
"\2\2\2\2\2\2\3\3\3\3\3\3\3\3\3\3" +
|
||||
"\3\2\2\2\2\2\3\3\3\3\3z\1\1\1\1" +
|
||||
"\1\1\3\3\3zzzz\3\3\3\3\3\3\3" +
|
||||
"\3\3z\2\3\3\3\3\3\3\1\1\3\3\2z" +
|
||||
"\2\3\3\3\3\3\3\3\3\3\3\1\1zzz" +
|
||||
"\2\3\3\3\3\3\3\3\3\3\3\3\1\3\1\3" +
|
||||
"\1\3\3\3\3\3\3\3\3\3\3\3\1\1\1\1" +
|
||||
"\1zzzzzzzzzzzzzzz" +
|
||||
"\3\3\3\1\3\3\3\3zzzzzzzz" +
|
||||
"\3\3\3\3\3\3\3\3\3zzz\3\3zz" +
|
||||
"\2\2\3\3\3\3\3\3\3\3\3\3\3\3\3\3" +
|
||||
"zzzz");
|
||||
}
|
||||
|
||||
// public methods ----------------------------------------------------
|
||||
|
||||
@ -613,6 +1479,36 @@ public final class UCharacterProperty
|
||||
return UBiDiProps.INSTANCE.getPairedBracketType(c);
|
||||
}
|
||||
},
|
||||
new IntProperty(SRC_INPC) {
|
||||
@Override
|
||||
int getValue(int c) {
|
||||
return InPCTrie.INSTANCE.get(c);
|
||||
}
|
||||
@Override
|
||||
int getMaxValue(int which) {
|
||||
return 14;
|
||||
}
|
||||
},
|
||||
new IntProperty(SRC_INSC) {
|
||||
@Override
|
||||
int getValue(int c) {
|
||||
return InSCTrie.INSTANCE.get(c);
|
||||
}
|
||||
@Override
|
||||
int getMaxValue(int which) {
|
||||
return 35;
|
||||
}
|
||||
},
|
||||
new IntProperty(SRC_VO) {
|
||||
@Override
|
||||
int getValue(int c) {
|
||||
return VoTrie.INSTANCE.get(c);
|
||||
}
|
||||
@Override
|
||||
int getMaxValue(int which) {
|
||||
return 3;
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
public int getIntPropertyValue(int c, int which) {
|
||||
@ -1440,6 +2336,32 @@ public final class UCharacterProperty
|
||||
}
|
||||
}
|
||||
|
||||
public UnicodeSet ulayout_addPropertyStarts(int src, UnicodeSet set) {
|
||||
CodePointTrie trie;
|
||||
switch (src) {
|
||||
case SRC_INPC:
|
||||
trie = InPCTrie.INSTANCE;
|
||||
break;
|
||||
case SRC_INSC:
|
||||
trie = InSCTrie.INSTANCE;
|
||||
break;
|
||||
case SRC_VO:
|
||||
trie = VoTrie.INSTANCE;
|
||||
break;
|
||||
default:
|
||||
throw new IllegalStateException();
|
||||
}
|
||||
|
||||
// Add the start code point of each same-value range of the trie.
|
||||
CodePointMap.Range range = new CodePointMap.Range();
|
||||
int start = 0;
|
||||
while (trie.getRange(start, null, range)) {
|
||||
set.add(start);
|
||||
start = range.getEnd() + 1;
|
||||
}
|
||||
return set;
|
||||
}
|
||||
|
||||
// This static initializer block must be placed after
|
||||
// other static member initialization
|
||||
static {
|
||||
|
@ -2590,7 +2590,7 @@ public final class UCharacter implements ECharacterCategory, ECharacterDirection
|
||||
m = mref.get();
|
||||
}
|
||||
if (m == null) {
|
||||
m = new HashMap<String, UnicodeBlock>(BLOCKS_.length);
|
||||
m = new HashMap<>(BLOCKS_.length);
|
||||
for (int i = 0; i < BLOCKS_.length; ++i) {
|
||||
UnicodeBlock b = BLOCKS_[i];
|
||||
String name = trimBlockName(
|
||||
@ -2598,7 +2598,7 @@ public final class UCharacter implements ECharacterCategory, ECharacterDirection
|
||||
UProperty.NameChoice.LONG));
|
||||
m.put(name, b);
|
||||
}
|
||||
mref = new SoftReference<Map<String, UnicodeBlock>>(m);
|
||||
mref = new SoftReference<>(m);
|
||||
}
|
||||
UnicodeBlock b = m.get(trimBlockName(blockName));
|
||||
if (b == null) {
|
||||
@ -3694,6 +3694,143 @@ public final class UCharacter implements ECharacterCategory, ECharacterDirection
|
||||
public static final int COUNT = 3;
|
||||
}
|
||||
|
||||
/**
|
||||
* Indic Positional Category constants.
|
||||
*
|
||||
* @see UProperty#INDIC_POSITIONAL_CATEGORY
|
||||
* @stable ICU 63
|
||||
*/
|
||||
public static interface IndicPositionalCategory {
|
||||
/** @stable ICU 63 */
|
||||
public static final int NA = 0;
|
||||
/** @stable ICU 63 */
|
||||
public static final int BOTTOM = 1;
|
||||
/** @stable ICU 63 */
|
||||
public static final int BOTTOM_AND_LEFT = 2;
|
||||
/** @stable ICU 63 */
|
||||
public static final int BOTTOM_AND_RIGHT = 3;
|
||||
/** @stable ICU 63 */
|
||||
public static final int LEFT = 4;
|
||||
/** @stable ICU 63 */
|
||||
public static final int LEFT_AND_RIGHT = 5;
|
||||
/** @stable ICU 63 */
|
||||
public static final int OVERSTRUCK = 6;
|
||||
/** @stable ICU 63 */
|
||||
public static final int RIGHT = 7;
|
||||
/** @stable ICU 63 */
|
||||
public static final int TOP = 8;
|
||||
/** @stable ICU 63 */
|
||||
public static final int TOP_AND_BOTTOM = 9;
|
||||
/** @stable ICU 63 */
|
||||
public static final int TOP_AND_BOTTOM_AND_RIGHT = 10;
|
||||
/** @stable ICU 63 */
|
||||
public static final int TOP_AND_LEFT = 11;
|
||||
/** @stable ICU 63 */
|
||||
public static final int TOP_AND_LEFT_AND_RIGHT = 12;
|
||||
/** @stable ICU 63 */
|
||||
public static final int TOP_AND_RIGHT = 13;
|
||||
/** @stable ICU 63 */
|
||||
public static final int VISUAL_ORDER_LEFT = 14;
|
||||
}
|
||||
|
||||
/**
|
||||
* Indic Syllabic Category constants.
|
||||
*
|
||||
* @see UProperty#INDIC_SYLLABIC_CATEGORY
|
||||
* @stable ICU 63
|
||||
*/
|
||||
public static interface IndicSyllabicCategory {
|
||||
/** @stable ICU 63 */
|
||||
public static final int OTHER = 0;
|
||||
/** @stable ICU 63 */
|
||||
public static final int AVAGRAHA = 1;
|
||||
/** @stable ICU 63 */
|
||||
public static final int BINDU = 2;
|
||||
/** @stable ICU 63 */
|
||||
public static final int BRAHMI_JOINING_NUMBER = 3;
|
||||
/** @stable ICU 63 */
|
||||
public static final int CANTILLATION_MARK = 4;
|
||||
/** @stable ICU 63 */
|
||||
public static final int CONSONANT = 5;
|
||||
/** @stable ICU 63 */
|
||||
public static final int CONSONANT_DEAD = 6;
|
||||
/** @stable ICU 63 */
|
||||
public static final int CONSONANT_FINAL = 7;
|
||||
/** @stable ICU 63 */
|
||||
public static final int CONSONANT_HEAD_LETTER = 8;
|
||||
/** @stable ICU 63 */
|
||||
public static final int CONSONANT_INITIAL_POSTFIXED = 9;
|
||||
/** @stable ICU 63 */
|
||||
public static final int CONSONANT_KILLER = 10;
|
||||
/** @stable ICU 63 */
|
||||
public static final int CONSONANT_MEDIAL = 11;
|
||||
/** @stable ICU 63 */
|
||||
public static final int CONSONANT_PLACEHOLDER = 12;
|
||||
/** @stable ICU 63 */
|
||||
public static final int CONSONANT_PRECEDING_REPHA = 13;
|
||||
/** @stable ICU 63 */
|
||||
public static final int CONSONANT_PREFIXED = 14;
|
||||
/** @stable ICU 63 */
|
||||
public static final int CONSONANT_SUBJOINED = 15;
|
||||
/** @stable ICU 63 */
|
||||
public static final int CONSONANT_SUCCEEDING_REPHA = 16;
|
||||
/** @stable ICU 63 */
|
||||
public static final int CONSONANT_WITH_STACKER = 17;
|
||||
/** @stable ICU 63 */
|
||||
public static final int GEMINATION_MARK = 18;
|
||||
/** @stable ICU 63 */
|
||||
public static final int INVISIBLE_STACKER = 19;
|
||||
/** @stable ICU 63 */
|
||||
public static final int JOINER = 20;
|
||||
/** @stable ICU 63 */
|
||||
public static final int MODIFYING_LETTER = 21;
|
||||
/** @stable ICU 63 */
|
||||
public static final int NON_JOINER = 22;
|
||||
/** @stable ICU 63 */
|
||||
public static final int NUKTA = 23;
|
||||
/** @stable ICU 63 */
|
||||
public static final int NUMBER = 24;
|
||||
/** @stable ICU 63 */
|
||||
public static final int NUMBER_JOINER = 25;
|
||||
/** @stable ICU 63 */
|
||||
public static final int PURE_KILLER = 26;
|
||||
/** @stable ICU 63 */
|
||||
public static final int REGISTER_SHIFTER = 27;
|
||||
/** @stable ICU 63 */
|
||||
public static final int SYLLABLE_MODIFIER = 28;
|
||||
/** @stable ICU 63 */
|
||||
public static final int TONE_LETTER = 29;
|
||||
/** @stable ICU 63 */
|
||||
public static final int TONE_MARK = 30;
|
||||
/** @stable ICU 63 */
|
||||
public static final int VIRAMA = 31;
|
||||
/** @stable ICU 63 */
|
||||
public static final int VISARGA = 32;
|
||||
/** @stable ICU 63 */
|
||||
public static final int VOWEL = 33;
|
||||
/** @stable ICU 63 */
|
||||
public static final int VOWEL_DEPENDENT = 34;
|
||||
/** @stable ICU 63 */
|
||||
public static final int VOWEL_INDEPENDENT = 35;
|
||||
}
|
||||
|
||||
/**
|
||||
* Vertical Orientation constants.
|
||||
*
|
||||
* @see UProperty#VERTICAL_ORIENTATION
|
||||
* @stable ICU 63
|
||||
*/
|
||||
public static interface VerticalOrientation {
|
||||
/** @stable ICU 63 */
|
||||
public static final int ROTATED = 0;
|
||||
/** @stable ICU 63 */
|
||||
public static final int TRANSFORMED_ROTATED = 1;
|
||||
/** @stable ICU 63 */
|
||||
public static final int TRANSFORMED_UPRIGHT = 2;
|
||||
/** @stable ICU 63 */
|
||||
public static final int UPRIGHT = 3;
|
||||
}
|
||||
|
||||
// public data members -----------------------------------------------
|
||||
|
||||
/**
|
||||
|
@ -753,12 +753,37 @@ public interface UProperty
|
||||
*/
|
||||
public static final int BIDI_PAIRED_BRACKET_TYPE = 0x1015;
|
||||
|
||||
/**
|
||||
* Enumerated property Indic_Positional_Category.
|
||||
* New in Unicode 6.0 as provisional property Indic_Matra_Category;
|
||||
* renamed and changed to informative in Unicode 8.0.
|
||||
* See http://www.unicode.org/reports/tr44/#IndicPositionalCategory.txt
|
||||
* @stable ICU 63
|
||||
*/
|
||||
public static final int INDIC_POSITIONAL_CATEGORY = 0x1016;
|
||||
|
||||
/**
|
||||
* Enumerated property Indic_Syllabic_Category.
|
||||
* New in Unicode 6.0 as provisional; informative since Unicode 8.0.
|
||||
* See http://www.unicode.org/reports/tr44/#IndicSyllabicCategory.txt
|
||||
* @stable ICU 63
|
||||
*/
|
||||
public static final int INDIC_SYLLABIC_CATEGORY = 0x1017;
|
||||
|
||||
/**
|
||||
* Enumerated property Vertical_Orientation.
|
||||
* Used for UAX #50 Unicode Vertical Text Layout (https://www.unicode.org/reports/tr50/).
|
||||
* New as a UCD property in Unicode 10.0.
|
||||
* @stable ICU 63
|
||||
*/
|
||||
public static final int VERTICAL_ORIENTATION = 0x1018;
|
||||
|
||||
/**
|
||||
* One more than the last constant for enumerated/integer Unicode properties.
|
||||
* @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420.
|
||||
*/
|
||||
@Deprecated
|
||||
public static final int INT_LIMIT = 0x1016;
|
||||
public static final int INT_LIMIT = 0x1019;
|
||||
|
||||
/**
|
||||
* Bitmask property General_Category_Mask.
|
||||
|
@ -325,7 +325,7 @@ public class UnicodeSet extends UnicodeFilter implements Iterable<String>, Compa
|
||||
|
||||
// NOTE: normally the field should be of type SortedSet; but that is missing a public clone!!
|
||||
// is not private so that UnicodeSetIterator can get access
|
||||
TreeSet<String> strings = new TreeSet<String>();
|
||||
TreeSet<String> strings = new TreeSet<>();
|
||||
|
||||
/**
|
||||
* The pattern representation of this set. This may not be the
|
||||
@ -545,7 +545,7 @@ public class UnicodeSet extends UnicodeFilter implements Iterable<String>, Compa
|
||||
list = other.list.clone();
|
||||
len = other.len;
|
||||
pat = other.pat;
|
||||
strings = new TreeSet<String>(other.strings);
|
||||
strings = new TreeSet<>(other.strings);
|
||||
return this;
|
||||
}
|
||||
|
||||
@ -3281,6 +3281,11 @@ public class UnicodeSet extends UnicodeFilter implements Iterable<String>, Compa
|
||||
case UCharacterProperty.SRC_BIDI:
|
||||
UBiDiProps.INSTANCE.addPropertyStarts(incl);
|
||||
break;
|
||||
case UCharacterProperty.SRC_INPC:
|
||||
case UCharacterProperty.SRC_INSC:
|
||||
case UCharacterProperty.SRC_VO:
|
||||
UCharacterProperty.INSTANCE.ulayout_addPropertyStarts(src, incl);
|
||||
break;
|
||||
default:
|
||||
throw new IllegalStateException("UnicodeSet.getInclusions(unknown src "+src+")");
|
||||
}
|
||||
@ -4019,7 +4024,7 @@ public class UnicodeSet extends UnicodeFilter implements Iterable<String>, Compa
|
||||
|
||||
// Optimize contains() and span() and similar functions.
|
||||
if (!strings.isEmpty()) {
|
||||
stringSpan = new UnicodeSetStringSpan(this, new ArrayList<String>(strings), UnicodeSetStringSpan.ALL);
|
||||
stringSpan = new UnicodeSetStringSpan(this, new ArrayList<>(strings), UnicodeSetStringSpan.ALL);
|
||||
}
|
||||
if (stringSpan == null || !stringSpan.needsStringSpanUTF16()) {
|
||||
// Optimize for code point spans.
|
||||
@ -4073,7 +4078,7 @@ public class UnicodeSet extends UnicodeFilter implements Iterable<String>, Compa
|
||||
} else if (!strings.isEmpty()) {
|
||||
int which = spanCondition == SpanCondition.NOT_CONTAINED ? UnicodeSetStringSpan.FWD_UTF16_NOT_CONTAINED
|
||||
: UnicodeSetStringSpan.FWD_UTF16_CONTAINED;
|
||||
UnicodeSetStringSpan strSpan = new UnicodeSetStringSpan(this, new ArrayList<String>(strings), which);
|
||||
UnicodeSetStringSpan strSpan = new UnicodeSetStringSpan(this, new ArrayList<>(strings), which);
|
||||
if (strSpan.needsStringSpanUTF16()) {
|
||||
return strSpan.span(s, start, spanCondition);
|
||||
}
|
||||
@ -4111,7 +4116,7 @@ public class UnicodeSet extends UnicodeFilter implements Iterable<String>, Compa
|
||||
int which = spanCondition == SpanCondition.NOT_CONTAINED ? UnicodeSetStringSpan.FWD_UTF16_NOT_CONTAINED
|
||||
: UnicodeSetStringSpan.FWD_UTF16_CONTAINED;
|
||||
which |= UnicodeSetStringSpan.WITH_COUNT;
|
||||
UnicodeSetStringSpan strSpan = new UnicodeSetStringSpan(this, new ArrayList<String>(strings), which);
|
||||
UnicodeSetStringSpan strSpan = new UnicodeSetStringSpan(this, new ArrayList<>(strings), which);
|
||||
return strSpan.spanAndCount(s, start, spanCondition, outCount);
|
||||
}
|
||||
|
||||
@ -4179,7 +4184,7 @@ public class UnicodeSet extends UnicodeFilter implements Iterable<String>, Compa
|
||||
int which = (spanCondition == SpanCondition.NOT_CONTAINED)
|
||||
? UnicodeSetStringSpan.BACK_UTF16_NOT_CONTAINED
|
||||
: UnicodeSetStringSpan.BACK_UTF16_CONTAINED;
|
||||
UnicodeSetStringSpan strSpan = new UnicodeSetStringSpan(this, new ArrayList<String>(strings), which);
|
||||
UnicodeSetStringSpan strSpan = new UnicodeSetStringSpan(this, new ArrayList<>(strings), which);
|
||||
if (strSpan.needsStringSpanUTF16()) {
|
||||
return strSpan.spanBack(s, fromIndex, spanCondition);
|
||||
}
|
||||
|
@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:a8be41753876c867630b4e740d692e0ae7ced119086a22cd4844ea7bf174d6f7
|
||||
size 12509408
|
||||
oid sha256:956147318ffa776ff18c71ab09c5ae63e336e14e240128c8602abf07ef7d7d3f
|
||||
size 12510547
|
||||
|
@ -2529,6 +2529,50 @@ public final class UCharacterTest extends TestFmwk
|
||||
UCharacter.hasBinaryProperty(0xA9, UProperty.EXTENDED_PICTOGRAPHIC));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void TestIndicPositionalCategory() {
|
||||
UnicodeSet na = new UnicodeSet("[:InPC=NA:]");
|
||||
assertTrue("mostly NA", 1000000 <= na.size() && na.size() <= Character.MAX_CODE_POINT - 500);
|
||||
UnicodeSet vol = new UnicodeSet("[:InPC=Visual_Order_Left:]");
|
||||
assertTrue("some Visual_Order_Left", 19 <= vol.size() && vol.size() <= 100);
|
||||
assertEquals("U+08FF: NA", UCharacter.IndicPositionalCategory.NA,
|
||||
UCharacter.getIntPropertyValue(0x08FF, UProperty.INDIC_POSITIONAL_CATEGORY));
|
||||
assertEquals("U+0900: Top", UCharacter.IndicPositionalCategory.TOP,
|
||||
UCharacter.getIntPropertyValue(0x0900, UProperty.INDIC_POSITIONAL_CATEGORY));
|
||||
assertEquals("U+10A06: Overstruck", UCharacter.IndicPositionalCategory.OVERSTRUCK,
|
||||
UCharacter.getIntPropertyValue(0x10A06, UProperty.INDIC_POSITIONAL_CATEGORY));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void TestIndicSyllabicCategory() {
|
||||
UnicodeSet other = new UnicodeSet("[:InSC=Other:]");
|
||||
assertTrue("mostly Other", 1000000 <= other.size() && other.size() <= Character.MAX_CODE_POINT - 500);
|
||||
UnicodeSet ava = new UnicodeSet("[:InSC=Avagraha:]");
|
||||
assertTrue("some Avagraha", 16 <= ava.size() && ava.size() <= 100);
|
||||
assertEquals("U+08FF: Other", UCharacter.IndicSyllabicCategory.OTHER,
|
||||
UCharacter.getIntPropertyValue(0x08FF, UProperty.INDIC_SYLLABIC_CATEGORY));
|
||||
assertEquals("U+0900: Bindu", UCharacter.IndicSyllabicCategory.BINDU,
|
||||
UCharacter.getIntPropertyValue(0x0900, UProperty.INDIC_SYLLABIC_CATEGORY));
|
||||
assertEquals("U+11065: Brahmi_Joining_Number", UCharacter.IndicSyllabicCategory.BRAHMI_JOINING_NUMBER,
|
||||
UCharacter.getIntPropertyValue(0x11065, UProperty.INDIC_SYLLABIC_CATEGORY));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void TestVerticalOrientation() {
|
||||
UnicodeSet r = new UnicodeSet("[:vo=R:]");
|
||||
assertTrue("mostly R", 0xc0000 <= r.size() && r.size() <= 0xd0000);
|
||||
UnicodeSet u = new UnicodeSet("[:vo=U:]");
|
||||
assertTrue("much U", 0x40000 <= u.size() && u.size() <= 0x50000);
|
||||
UnicodeSet tu = new UnicodeSet("[:vo=Tu:]");
|
||||
assertTrue("some Tu", 147 <= tu.size() && tu.size() <= 300);
|
||||
assertEquals("U+0E01: Rotated", UCharacter.VerticalOrientation.ROTATED,
|
||||
UCharacter.getIntPropertyValue(0x0E01, UProperty.VERTICAL_ORIENTATION));
|
||||
assertEquals("U+3008: Transformed_Rotated", UCharacter.VerticalOrientation.TRANSFORMED_ROTATED,
|
||||
UCharacter.getIntPropertyValue(0x3008, UProperty.VERTICAL_ORIENTATION));
|
||||
assertEquals("U+33333: Upright", UCharacter.VerticalOrientation.UPRIGHT,
|
||||
UCharacter.getIntPropertyValue(0x33333, UProperty.VERTICAL_ORIENTATION));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void TestIsBMP()
|
||||
{
|
||||
|
@ -1,4 +1,3 @@
|
||||
#
|
||||
# Copyright (C) 2017 and later: Unicode, Inc. and others.
|
||||
# License & terms of use: http://www.unicode.org/copyright.html
|
||||
#
|
||||
@ -12,5 +11,6 @@
|
||||
add_executable(genprops genprops.cpp
|
||||
pnamesbuilder.cpp corepropsbuilder.cpp
|
||||
bidipropsbuilder.cpp casepropsbuilder.cpp
|
||||
layoutpropsbuilder.cpp
|
||||
namespropsbuilder.cpp)
|
||||
target_link_libraries(genprops icuuc icutu)
|
||||
|
@ -500,7 +500,7 @@ void
|
||||
BiDiPropsBuilder::writeCSourceFile(const char *path, UErrorCode &errorCode) {
|
||||
if(U_FAILURE(errorCode)) { return; }
|
||||
|
||||
FILE *f=usrc_create(path, "ubidi_props_data.h",
|
||||
FILE *f=usrc_create(path, "ubidi_props_data.h", 2016,
|
||||
"icu/tools/unicode/c/genprops/bidipropsbuilder.cpp");
|
||||
if(f==NULL) {
|
||||
errorCode=U_FILE_ACCESS_ERROR;
|
||||
|
@ -1181,7 +1181,7 @@ void
|
||||
CasePropsBuilder::writeCSourceFile(const char *path, UErrorCode &errorCode) {
|
||||
if(U_FAILURE(errorCode)) { return; }
|
||||
|
||||
FILE *f=usrc_create(path, "ucase_props_data.h",
|
||||
FILE *f=usrc_create(path, "ucase_props_data.h", 2016,
|
||||
"icu/tools/unicode/c/genprops/casepropsbuilder.cpp");
|
||||
if(f==NULL) {
|
||||
errorCode=U_FILE_ACCESS_ERROR;
|
||||
|
@ -833,7 +833,7 @@ CorePropsBuilder::writeCSourceFile(const char *path, UErrorCode &errorCode) {
|
||||
const uint32_t *pvArray=upvec_getArray(pv, &pvRows, NULL);
|
||||
int32_t pvCount=pvRows*UPROPS_VECTOR_WORDS;
|
||||
|
||||
FILE *f=usrc_create(path, "uchar_props_data.h",
|
||||
FILE *f=usrc_create(path, "uchar_props_data.h", 2016,
|
||||
"icu/tools/unicode/c/genprops/corepropsbuilder.cpp");
|
||||
if(f==NULL) {
|
||||
errorCode=U_FILE_ACCESS_ERROR;
|
||||
|
@ -44,6 +44,7 @@ void PropsBuilder::setAlgNamesRange(UChar32, UChar32,
|
||||
void PropsBuilder::setProps(const UniProps &, const UnicodeSet &, UErrorCode &) {}
|
||||
void PropsBuilder::build(UErrorCode &) {}
|
||||
void PropsBuilder::writeCSourceFile(const char *, UErrorCode &) {}
|
||||
void PropsBuilder::writeJavaSourceFile(const char *, UErrorCode &) {}
|
||||
void PropsBuilder::writeBinaryData(const char *, UBool, UErrorCode &) {}
|
||||
|
||||
enum {
|
||||
@ -106,6 +107,7 @@ main(int argc, char* argv[]) {
|
||||
LocalPointer<PropsBuilder> corePropsBuilder(createCorePropsBuilder(errorCode));
|
||||
LocalPointer<PropsBuilder> bidiPropsBuilder(createBiDiPropsBuilder(errorCode));
|
||||
LocalPointer<PropsBuilder> casePropsBuilder(createCasePropsBuilder(errorCode));
|
||||
LocalPointer<PropsBuilder> layoutPropsBuilder(createLayoutPropsBuilder(errorCode));
|
||||
LocalPointer<PropsBuilder> namesPropsBuilder(createNamesPropsBuilder(errorCode));
|
||||
if(errorCode.isFailure()) {
|
||||
fprintf(stderr, "genprops: unable to create PropsBuilders - %s\n", errorCode.errorName());
|
||||
@ -148,12 +150,14 @@ main(int argc, char* argv[]) {
|
||||
corePropsBuilder->setProps(*props, newValues, errorCode);
|
||||
bidiPropsBuilder->setProps(*props, newValues, errorCode);
|
||||
casePropsBuilder->setProps(*props, newValues, errorCode);
|
||||
layoutPropsBuilder->setProps(*props, newValues, errorCode);
|
||||
namesPropsBuilder->setProps(*props, newValues, errorCode);
|
||||
} else if(lineType==PreparsedUCD::UNICODE_VERSION_LINE) {
|
||||
const UVersionInfo &version=ppucd.getUnicodeVersion();
|
||||
corePropsBuilder->setUnicodeVersion(version);
|
||||
bidiPropsBuilder->setUnicodeVersion(version);
|
||||
casePropsBuilder->setUnicodeVersion(version);
|
||||
layoutPropsBuilder->setUnicodeVersion(version);
|
||||
namesPropsBuilder->setUnicodeVersion(version);
|
||||
} else if(lineType==PreparsedUCD::ALG_NAMES_RANGE_LINE) {
|
||||
UChar32 start, end;
|
||||
@ -174,6 +178,7 @@ main(int argc, char* argv[]) {
|
||||
corePropsBuilder->build(errorCode);
|
||||
bidiPropsBuilder->build(errorCode);
|
||||
casePropsBuilder->build(errorCode);
|
||||
layoutPropsBuilder->build(errorCode);
|
||||
namesPropsBuilder->build(errorCode);
|
||||
if(errorCode.isFailure()) {
|
||||
fprintf(stderr, "genprops error: failure finalizing the data - %s\n",
|
||||
@ -199,6 +204,8 @@ main(int argc, char* argv[]) {
|
||||
casePropsBuilder->writeCSourceFile(sourceCommon.data(), errorCode);
|
||||
casePropsBuilder->writeBinaryData(sourceDataIn.data(), withCopyright, errorCode);
|
||||
namesPropsBuilder->writeBinaryData(sourceDataIn.data(), withCopyright, errorCode);
|
||||
layoutPropsBuilder->writeCSourceFile(sourceCommon.data(), errorCode);
|
||||
layoutPropsBuilder->writeJavaSourceFile("", errorCode);
|
||||
|
||||
return errorCode;
|
||||
}
|
||||
|
@ -37,6 +37,7 @@ public:
|
||||
virtual void setProps(const icu::UniProps &props, const icu::UnicodeSet &newValues, UErrorCode &errorCode);
|
||||
virtual void build(UErrorCode &errorCode);
|
||||
virtual void writeCSourceFile(const char *path, UErrorCode &errorCode);
|
||||
virtual void writeJavaSourceFile(const char *path, UErrorCode &errorCode);
|
||||
virtual void writeBinaryData(const char *path, UBool withCopyright, UErrorCode &errorCode);
|
||||
};
|
||||
|
||||
@ -49,6 +50,7 @@ PNamesBuilder *createPNamesBuilder(UErrorCode &errorCode);
|
||||
PropsBuilder *createCorePropsBuilder(UErrorCode &errorCode);
|
||||
PropsBuilder *createBiDiPropsBuilder(UErrorCode &errorCode);
|
||||
PropsBuilder *createCasePropsBuilder(UErrorCode &errorCode);
|
||||
PropsBuilder *createLayoutPropsBuilder(UErrorCode &errorCode);
|
||||
PropsBuilder *createNamesPropsBuilder(UErrorCode &errorCode);
|
||||
|
||||
/* global flags */
|
||||
|
289
tools/unicode/c/genprops/layoutpropsbuilder.cpp
Normal file
289
tools/unicode/c/genprops/layoutpropsbuilder.cpp
Normal file
@ -0,0 +1,289 @@
|
||||
// © 2018 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html
|
||||
|
||||
// layoutpropsbuilder.cpp
|
||||
// created: 2018aug30 Markus W. Scherer
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include "unicode/utypes.h"
|
||||
#include "unicode/uchar.h"
|
||||
#include "unicode/ucptrie.h"
|
||||
#include "unicode/udata.h"
|
||||
#include "unicode/umutablecptrie.h"
|
||||
#include "unicode/uniset.h"
|
||||
#include "cmemory.h"
|
||||
#include "genprops.h"
|
||||
#include "ppucd.h"
|
||||
#include "uassert.h"
|
||||
#include "writesrc.h"
|
||||
|
||||
U_NAMESPACE_USE
|
||||
|
||||
class LayoutPropsBuilder : public PropsBuilder {
|
||||
public:
|
||||
LayoutPropsBuilder(UErrorCode &errorCode);
|
||||
virtual ~LayoutPropsBuilder() U_OVERRIDE;
|
||||
|
||||
virtual void setProps(const UniProps &props, const UnicodeSet &newValues, UErrorCode &errorCode) U_OVERRIDE;
|
||||
virtual void build(UErrorCode &errorCode) U_OVERRIDE;
|
||||
virtual void writeCSourceFile(const char *path, UErrorCode &errorCode) U_OVERRIDE;
|
||||
virtual void writeJavaSourceFile(const char *path, UErrorCode &errorCode) U_OVERRIDE;
|
||||
|
||||
private:
|
||||
void setIntProp(const UniProps &, const UnicodeSet &newValues,
|
||||
UProperty prop, UMutableCPTrie *trie,
|
||||
UErrorCode &errorCode);
|
||||
int32_t getMaxIntValue(UProperty prop) const {
|
||||
return maxIntValues[prop - UCHAR_INT_START];
|
||||
}
|
||||
void checkMaxIntValue(UProperty prop, int32_t maxMax, UErrorCode &errorCode) const;
|
||||
void writeMaxIntValue(FILE *f, const char *name, UProperty prop) const {
|
||||
fprintf(f, "static const int32_t max%sValue = %ld;\n\n", name, (long)getMaxIntValue(prop));
|
||||
}
|
||||
|
||||
int32_t maxIntValues[UCHAR_INT_LIMIT - UCHAR_INT_START];
|
||||
UMutableCPTrie *inpcMutableTrie;
|
||||
UMutableCPTrie *inscMutableTrie;
|
||||
UMutableCPTrie *voMutableTrie;
|
||||
|
||||
UCPTrie *inpcTrie;
|
||||
UCPTrie *inscTrie;
|
||||
UCPTrie *voTrie;
|
||||
};
|
||||
|
||||
LayoutPropsBuilder::LayoutPropsBuilder(UErrorCode &errorCode) :
|
||||
inpcTrie(nullptr), inscTrie(nullptr), voTrie(nullptr) {
|
||||
memset(maxIntValues, 0, sizeof(maxIntValues));
|
||||
inpcMutableTrie = umutablecptrie_open(0, 0, &errorCode);
|
||||
inscMutableTrie = umutablecptrie_open(0, 0, &errorCode);
|
||||
voMutableTrie = umutablecptrie_open(0, 0, &errorCode);
|
||||
if (U_FAILURE(errorCode)) {
|
||||
fprintf(stderr, "genprops error: layoutpropsbuilder umutablecptrie_open() failed - %s\n",
|
||||
u_errorName(errorCode));
|
||||
}
|
||||
}
|
||||
|
||||
LayoutPropsBuilder::~LayoutPropsBuilder() {
|
||||
umutablecptrie_close(inpcMutableTrie);
|
||||
umutablecptrie_close(inscMutableTrie);
|
||||
umutablecptrie_close(voMutableTrie);
|
||||
ucptrie_close(inpcTrie);
|
||||
ucptrie_close(inscTrie);
|
||||
ucptrie_close(voTrie);
|
||||
}
|
||||
|
||||
void
|
||||
LayoutPropsBuilder::setProps(const UniProps &props, const UnicodeSet &newValues,
|
||||
UErrorCode &errorCode) {
|
||||
setIntProp(props, newValues, UCHAR_INDIC_POSITIONAL_CATEGORY, inpcMutableTrie, errorCode);
|
||||
setIntProp(props, newValues, UCHAR_INDIC_SYLLABIC_CATEGORY, inscMutableTrie, errorCode);
|
||||
setIntProp(props, newValues, UCHAR_VERTICAL_ORIENTATION, voMutableTrie, errorCode);
|
||||
}
|
||||
|
||||
void LayoutPropsBuilder::setIntProp(const UniProps &props, const UnicodeSet &newValues,
|
||||
UProperty prop, UMutableCPTrie *trie,
|
||||
UErrorCode &errorCode) {
|
||||
if (U_SUCCESS(errorCode) && newValues.contains(prop)) {
|
||||
UChar32 start=props.start;
|
||||
UChar32 end=props.end;
|
||||
int32_t value = props.getIntProp(prop);
|
||||
if (value < 0) {
|
||||
fprintf(stderr, "error: unencodable negative value for property 0x%x %04lX..%04lX=%ld\n",
|
||||
(int)prop, (long)start, (long)end, (long)value);
|
||||
errorCode = U_ILLEGAL_ARGUMENT_ERROR;
|
||||
return;
|
||||
}
|
||||
if (value > maxIntValues[prop - UCHAR_INT_START]) {
|
||||
maxIntValues[prop - UCHAR_INT_START] = value;
|
||||
}
|
||||
if (start == end) {
|
||||
umutablecptrie_set(trie, start, value, &errorCode);
|
||||
} else {
|
||||
umutablecptrie_setRange(trie, start, end, value, &errorCode);
|
||||
}
|
||||
if (U_FAILURE(errorCode)) {
|
||||
fprintf(stderr, "error: umutablecptrie_set(prop 0x%x trie %04lX..%04lX) failed - %s\n",
|
||||
(int)prop, (long)start, (long)end, u_errorName(errorCode));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
||||
UCPTrie *buildUCPTrie(const char *name, UMutableCPTrie *mutableTrie,
|
||||
UCPTrieType type, UCPTrieValueWidth valueWidth, UErrorCode &errorCode) {
|
||||
UCPTrie *trie = umutablecptrie_buildImmutable(mutableTrie, type, valueWidth, &errorCode);
|
||||
if(U_FAILURE(errorCode)) {
|
||||
fprintf(stderr, "genprops error: %s trie buildImmutable() failed: %s\n",
|
||||
name, u_errorName(errorCode));
|
||||
return trie;
|
||||
}
|
||||
if (!beQuiet) {
|
||||
UErrorCode overflow = U_ZERO_ERROR;
|
||||
int32_t length = ucptrie_toBinary(trie, nullptr, 0, &overflow);
|
||||
printf("%11s trie size in bytes: %5u\n", name, (int)length);
|
||||
}
|
||||
return trie;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
void
|
||||
LayoutPropsBuilder::build(UErrorCode &errorCode) {
|
||||
if (U_FAILURE(errorCode)) { return; }
|
||||
if (!beQuiet) {
|
||||
puts("* text layout properties stats *");
|
||||
}
|
||||
|
||||
checkMaxIntValue(UCHAR_INDIC_POSITIONAL_CATEGORY, 0xff, errorCode);
|
||||
checkMaxIntValue(UCHAR_INDIC_SYLLABIC_CATEGORY, 0xff, errorCode);
|
||||
checkMaxIntValue(UCHAR_VERTICAL_ORIENTATION, 0xff, errorCode);
|
||||
inpcTrie = buildUCPTrie("inpc", inpcMutableTrie,
|
||||
UCPTRIE_TYPE_SMALL, UCPTRIE_VALUE_BITS_8, errorCode);
|
||||
inscTrie = buildUCPTrie("insc", inscMutableTrie,
|
||||
UCPTRIE_TYPE_SMALL, UCPTRIE_VALUE_BITS_8, errorCode);
|
||||
voTrie = buildUCPTrie("vo", voMutableTrie,
|
||||
UCPTRIE_TYPE_SMALL, UCPTRIE_VALUE_BITS_8, errorCode);
|
||||
}
|
||||
|
||||
void LayoutPropsBuilder::checkMaxIntValue(UProperty prop, int32_t maxMax,
|
||||
UErrorCode &errorCode) const {
|
||||
int32_t max = getMaxIntValue(prop);
|
||||
if (max > maxMax) {
|
||||
fprintf(stderr, "genprops error: 0x%x max value = %d overflow\n", (int)prop, (int)max);
|
||||
errorCode = U_ILLEGAL_ARGUMENT_ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
LayoutPropsBuilder::writeCSourceFile(const char *path, UErrorCode &errorCode) {
|
||||
if (U_FAILURE(errorCode)) { return; }
|
||||
|
||||
FILE *f = usrc_create(path, "ulayout_props_data.h", 2018,
|
||||
"icu/tools/unicode/c/genprops/layoutpropsbuilder.cpp");
|
||||
if (f == nullptr) {
|
||||
errorCode = U_FILE_ACCESS_ERROR;
|
||||
return;
|
||||
}
|
||||
fputs("#ifdef INCLUDED_FROM_UPROPS_CPP\n\n", f);
|
||||
|
||||
writeMaxIntValue(f, "InPC", UCHAR_INDIC_POSITIONAL_CATEGORY);
|
||||
usrc_writeUCPTrie(f, "inpc", inpcTrie);
|
||||
|
||||
writeMaxIntValue(f, "InSC", UCHAR_INDIC_SYLLABIC_CATEGORY);
|
||||
usrc_writeUCPTrie(f, "insc", inscTrie);
|
||||
|
||||
writeMaxIntValue(f, "Vo", UCHAR_VERTICAL_ORIENTATION);
|
||||
usrc_writeUCPTrie(f, "vo", voTrie);
|
||||
|
||||
fputs("#endif // INCLUDED_FROM_UPROPS_CPP\n", f);
|
||||
fclose(f);
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
||||
// Write one byte as one char in a Java String literal.
|
||||
// Java class file string literals use one byte per U+0001..U+007F,
|
||||
// and two bytes per U+0000 or U+0080..U+07FF.
|
||||
// This is reasonably compact if small byte values are more common, as usual.
|
||||
// Since 0 is very common but takes two bytes, we swap it with U+007A 'z'.
|
||||
int32_t appendByte(char *s, int32_t length, uint8_t b) {
|
||||
if (b == 0) {
|
||||
s[length++] = 'z';
|
||||
} else if (b == 0x7a) {
|
||||
s[length++] = '\\';
|
||||
s[length++] = '0';
|
||||
} else {
|
||||
// Write all other bytes as octal escapes. (Java does not support \xhh.)
|
||||
// We could make the source file smaller by writing ASCII characters
|
||||
// directly where possible, but that would not make the class file any smaller,
|
||||
// and we would have to be careful to still escape certain characters,
|
||||
// and to escape digits after short octal escapes.
|
||||
s[length++] = '\\';
|
||||
if (b >= 0100) {
|
||||
s[length++] = '0' + (b >> 6);
|
||||
}
|
||||
if (b >= 010) {
|
||||
s[length++] = '0' + ((b >> 3) & 7);
|
||||
}
|
||||
s[length++] = '0' + (b & 7);
|
||||
}
|
||||
return length;
|
||||
}
|
||||
|
||||
void writeBytesAsJavaString(FILE *f, const uint8_t *bytes, int32_t length) {
|
||||
// Quotes, line feed, etc., with up to 16 bytes per line, up to 4 bytes "\377" each.
|
||||
char line[80];
|
||||
int32_t lineLength = 0;
|
||||
for (int32_t i = 0;;) {
|
||||
if ((i & 0xf) == 0) { // start of a line of 16 bytes
|
||||
line[0] = '"';
|
||||
lineLength = 1;
|
||||
}
|
||||
if (i < length) {
|
||||
lineLength = appendByte(line, lineLength, bytes[i++]);
|
||||
}
|
||||
if (i == length) { // end of the string
|
||||
line[lineLength++] = '"';
|
||||
line[lineLength++] = '\n';
|
||||
line[lineLength++] = '\n';
|
||||
line[lineLength++] = 0;
|
||||
fputs(line, f);
|
||||
break;
|
||||
}
|
||||
if ((i & 0xf) == 0) { // end of a line of 16 bytes
|
||||
line[lineLength++] = '"';
|
||||
line[lineLength++] = ' ';
|
||||
line[lineLength++] = '+';
|
||||
line[lineLength++] = '\n';
|
||||
line[lineLength++] = 0;
|
||||
fputs(line, f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static uint8_t trieBlock[100000];
|
||||
|
||||
void writeUCPTrieAsJavaString(FILE *f, const UCPTrie *trie, UErrorCode &errorCode) {
|
||||
int32_t length = ucptrie_toBinary(trie, trieBlock, UPRV_LENGTHOF(trieBlock), &errorCode);
|
||||
writeBytesAsJavaString(f, trieBlock, length);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
// So far, this writes initializers to be copied into Java code, but not a complete Java file.
|
||||
// We should probably write a regular, binary ICU data file and read that into Java.
|
||||
void
|
||||
LayoutPropsBuilder::writeJavaSourceFile(const char * /*path*/, UErrorCode &errorCode) {
|
||||
if (U_FAILURE(errorCode)) { return; }
|
||||
|
||||
FILE *f = usrc_create("/tmp", "ulayout_props_data.txt", 2018,
|
||||
"icu/tools/unicode/c/genprops/layoutpropsbuilder.cpp");
|
||||
if (f == nullptr) {
|
||||
errorCode = U_FILE_ACCESS_ERROR;
|
||||
return;
|
||||
}
|
||||
|
||||
writeMaxIntValue(f, "InPC", UCHAR_INDIC_POSITIONAL_CATEGORY);
|
||||
writeUCPTrieAsJavaString(f, inpcTrie, errorCode);
|
||||
|
||||
writeMaxIntValue(f, "InSC", UCHAR_INDIC_SYLLABIC_CATEGORY);
|
||||
writeUCPTrieAsJavaString(f, inscTrie, errorCode);
|
||||
|
||||
writeMaxIntValue(f, "Vo", UCHAR_VERTICAL_ORIENTATION);
|
||||
writeUCPTrieAsJavaString(f, voTrie, errorCode);
|
||||
|
||||
fclose(f);
|
||||
puts(" ++ Java initializers written to /tmp/ulayout_props_data.txt");
|
||||
}
|
||||
|
||||
PropsBuilder *
|
||||
createLayoutPropsBuilder(UErrorCode &errorCode) {
|
||||
if(U_FAILURE(errorCode)) { return nullptr; }
|
||||
PropsBuilder *pb=new LayoutPropsBuilder(errorCode);
|
||||
if(pb==nullptr) {
|
||||
errorCode=U_MEMORY_ALLOCATION_ERROR;
|
||||
}
|
||||
return pb;
|
||||
}
|
@ -1035,6 +1035,70 @@ static const Value VALUES_bpt[3] = {
|
||||
Value(U_BPT_CLOSE, "c Close"),
|
||||
};
|
||||
|
||||
static const Value VALUES_InPC[15] = {
|
||||
Value(U_INPC_NA, "NA NA"),
|
||||
Value(U_INPC_BOTTOM, "Bottom Bottom"),
|
||||
Value(U_INPC_BOTTOM_AND_LEFT, "Bottom_And_Left Bottom_And_Left"),
|
||||
Value(U_INPC_BOTTOM_AND_RIGHT, "Bottom_And_Right Bottom_And_Right"),
|
||||
Value(U_INPC_LEFT, "Left Left"),
|
||||
Value(U_INPC_LEFT_AND_RIGHT, "Left_And_Right Left_And_Right"),
|
||||
Value(U_INPC_OVERSTRUCK, "Overstruck Overstruck"),
|
||||
Value(U_INPC_RIGHT, "Right Right"),
|
||||
Value(U_INPC_TOP, "Top Top"),
|
||||
Value(U_INPC_TOP_AND_BOTTOM, "Top_And_Bottom Top_And_Bottom"),
|
||||
Value(U_INPC_TOP_AND_BOTTOM_AND_RIGHT, "Top_And_Bottom_And_Right Top_And_Bottom_And_Right"),
|
||||
Value(U_INPC_TOP_AND_LEFT, "Top_And_Left Top_And_Left"),
|
||||
Value(U_INPC_TOP_AND_LEFT_AND_RIGHT, "Top_And_Left_And_Right Top_And_Left_And_Right"),
|
||||
Value(U_INPC_TOP_AND_RIGHT, "Top_And_Right Top_And_Right"),
|
||||
Value(U_INPC_VISUAL_ORDER_LEFT, "Visual_Order_Left Visual_Order_Left"),
|
||||
};
|
||||
|
||||
static const Value VALUES_InSC[36] = {
|
||||
Value(U_INSC_OTHER, "Other Other"),
|
||||
Value(U_INSC_AVAGRAHA, "Avagraha Avagraha"),
|
||||
Value(U_INSC_BINDU, "Bindu Bindu"),
|
||||
Value(U_INSC_BRAHMI_JOINING_NUMBER, "Brahmi_Joining_Number Brahmi_Joining_Number"),
|
||||
Value(U_INSC_CANTILLATION_MARK, "Cantillation_Mark Cantillation_Mark"),
|
||||
Value(U_INSC_CONSONANT, "Consonant Consonant"),
|
||||
Value(U_INSC_CONSONANT_DEAD, "Consonant_Dead Consonant_Dead"),
|
||||
Value(U_INSC_CONSONANT_FINAL, "Consonant_Final Consonant_Final"),
|
||||
Value(U_INSC_CONSONANT_HEAD_LETTER, "Consonant_Head_Letter Consonant_Head_Letter"),
|
||||
Value(U_INSC_CONSONANT_INITIAL_POSTFIXED, "Consonant_Initial_Postfixed Consonant_Initial_Postfixed"),
|
||||
Value(U_INSC_CONSONANT_KILLER, "Consonant_Killer Consonant_Killer"),
|
||||
Value(U_INSC_CONSONANT_MEDIAL, "Consonant_Medial Consonant_Medial"),
|
||||
Value(U_INSC_CONSONANT_PLACEHOLDER, "Consonant_Placeholder Consonant_Placeholder"),
|
||||
Value(U_INSC_CONSONANT_PRECEDING_REPHA, "Consonant_Preceding_Repha Consonant_Preceding_Repha"),
|
||||
Value(U_INSC_CONSONANT_PREFIXED, "Consonant_Prefixed Consonant_Prefixed"),
|
||||
Value(U_INSC_CONSONANT_SUBJOINED, "Consonant_Subjoined Consonant_Subjoined"),
|
||||
Value(U_INSC_CONSONANT_SUCCEEDING_REPHA, "Consonant_Succeeding_Repha Consonant_Succeeding_Repha"),
|
||||
Value(U_INSC_CONSONANT_WITH_STACKER, "Consonant_With_Stacker Consonant_With_Stacker"),
|
||||
Value(U_INSC_GEMINATION_MARK, "Gemination_Mark Gemination_Mark"),
|
||||
Value(U_INSC_INVISIBLE_STACKER, "Invisible_Stacker Invisible_Stacker"),
|
||||
Value(U_INSC_JOINER, "Joiner Joiner"),
|
||||
Value(U_INSC_MODIFYING_LETTER, "Modifying_Letter Modifying_Letter"),
|
||||
Value(U_INSC_NON_JOINER, "Non_Joiner Non_Joiner"),
|
||||
Value(U_INSC_NUKTA, "Nukta Nukta"),
|
||||
Value(U_INSC_NUMBER, "Number Number"),
|
||||
Value(U_INSC_NUMBER_JOINER, "Number_Joiner Number_Joiner"),
|
||||
Value(U_INSC_PURE_KILLER, "Pure_Killer Pure_Killer"),
|
||||
Value(U_INSC_REGISTER_SHIFTER, "Register_Shifter Register_Shifter"),
|
||||
Value(U_INSC_SYLLABLE_MODIFIER, "Syllable_Modifier Syllable_Modifier"),
|
||||
Value(U_INSC_TONE_LETTER, "Tone_Letter Tone_Letter"),
|
||||
Value(U_INSC_TONE_MARK, "Tone_Mark Tone_Mark"),
|
||||
Value(U_INSC_VIRAMA, "Virama Virama"),
|
||||
Value(U_INSC_VISARGA, "Visarga Visarga"),
|
||||
Value(U_INSC_VOWEL, "Vowel Vowel"),
|
||||
Value(U_INSC_VOWEL_DEPENDENT, "Vowel_Dependent Vowel_Dependent"),
|
||||
Value(U_INSC_VOWEL_INDEPENDENT, "Vowel_Independent Vowel_Independent"),
|
||||
};
|
||||
|
||||
static const Value VALUES_vo[4] = {
|
||||
Value(U_VO_ROTATED, "R Rotated"),
|
||||
Value(U_VO_TRANSFORMED_ROTATED, "Tr Transformed_Rotated"),
|
||||
Value(U_VO_TRANSFORMED_UPRIGHT, "Tu Transformed_Upright"),
|
||||
Value(U_VO_UPRIGHT, "U Upright"),
|
||||
};
|
||||
|
||||
static const Value VALUES_gcm[38] = {
|
||||
Value((int32_t)U_GC_C_MASK, "C Other"),
|
||||
Value((int32_t)U_GC_CC_MASK, "Cc Control cntrl"),
|
||||
@ -1076,7 +1140,7 @@ static const Value VALUES_gcm[38] = {
|
||||
Value((int32_t)U_GC_ZS_MASK, "Zs Space_Separator"),
|
||||
};
|
||||
|
||||
static const Property PROPERTIES[104] = {
|
||||
static const Property PROPERTIES[107] = {
|
||||
Property(UCHAR_ALPHABETIC, "Alpha Alphabetic"),
|
||||
Property(UCHAR_ASCII_HEX_DIGIT, "AHex ASCII_Hex_Digit"),
|
||||
Property(UCHAR_BIDI_CONTROL, "Bidi_C Bidi_Control"),
|
||||
@ -1164,6 +1228,9 @@ static const Property PROPERTIES[104] = {
|
||||
Property(UCHAR_SENTENCE_BREAK, "SB Sentence_Break", VALUES_SB, 15),
|
||||
Property(UCHAR_WORD_BREAK, "WB Word_Break", VALUES_WB, 23),
|
||||
Property(UCHAR_BIDI_PAIRED_BRACKET_TYPE, "bpt Bidi_Paired_Bracket_Type", VALUES_bpt, 3),
|
||||
Property(UCHAR_INDIC_POSITIONAL_CATEGORY, "InPC Indic_Positional_Category", VALUES_InPC, 15),
|
||||
Property(UCHAR_INDIC_SYLLABIC_CATEGORY, "InSC Indic_Syllabic_Category", VALUES_InSC, 36),
|
||||
Property(UCHAR_VERTICAL_ORIENTATION, "vo Vertical_Orientation", VALUES_vo, 4),
|
||||
Property(UCHAR_GENERAL_CATEGORY_MASK, "gcm General_Category_Mask", VALUES_gcm, 38),
|
||||
Property(UCHAR_NUMERIC_VALUE, "nv Numeric_Value"),
|
||||
Property(UCHAR_AGE, "age Age"),
|
||||
|
@ -489,7 +489,7 @@ PNamesBuilderImpl::writeBinaryData(const char *path, UBool withCopyright, UError
|
||||
void
|
||||
PNamesBuilderImpl::writeCSourceFile(const char *path, UErrorCode &errorCode) {
|
||||
if(U_FAILURE(errorCode)) { return; }
|
||||
FILE *f=usrc_create(path, "propname_data.h",
|
||||
FILE *f=usrc_create(path, "propname_data.h", 2016,
|
||||
"icu/tools/unicode/c/genprops/pnamesbuilder.cpp");
|
||||
if(f==NULL) {
|
||||
errorCode=U_FILE_ACCESS_ERROR;
|
||||
|
@ -1215,7 +1215,7 @@ buildAndWriteFCDData(const char *path, UErrorCode &errorCode) {
|
||||
|
||||
if(U_FAILURE(errorCode)) { return; }
|
||||
|
||||
FILE *f=usrc_create(path, "collationfcd.cpp",
|
||||
FILE *f=usrc_create(path, "collationfcd.cpp", 2016,
|
||||
"icu/tools/unicode/c/genuca/genuca.cpp");
|
||||
if(f==NULL) {
|
||||
errorCode=U_FILE_ACCESS_ERROR;
|
||||
|
@ -1885,7 +1885,7 @@ _ublock_re = re.compile(" *(UBLOCK_[0-9A-Z_]+) *= *[0-9]+,")
|
||||
# Sample line to match:
|
||||
# U_EA_AMBIGUOUS,
|
||||
_prop_and_value_re = re.compile(
|
||||
" *(U_(BPT|DT|EA|GCB|HST|LB|JG|JT|NT|SB|WB)_([0-9A-Z_]+))")
|
||||
" *(U_(BPT|DT|EA|GCB|HST|INPC|INSC|LB|JG|JT|NT|SB|VO|WB)_([0-9A-Z_]+))")
|
||||
|
||||
# Sample line to match if it has matched _prop_and_value_re
|
||||
# (we want to exclude aliases):
|
||||
|
Loading…
Reference in New Issue
Block a user