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:
Markus Scherer 2018-08-31 19:23:52 -07:00 committed by Shane Carr
parent eae698a61e
commit d2ec8987a7
No known key found for this signature in database
GPG Key ID: FCED3B24AAB18B5C
31 changed files with 3759 additions and 994 deletions

1
.gitignore vendored
View File

@ -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

View 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

View File

@ -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.
*

View File

@ -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;

View File

@ -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

View File

@ -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.

View File

@ -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/

View File

@ -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.

View File

@ -41,6 +41,9 @@ public:
void TestScriptMetadata();
void TestBidiPairedBracketType();
void TestEmojiProperties();
void TestIndicPositionalCategory();
void TestIndicSyllabicCategory();
void TestVerticalOrientation();
void TestDefaultScriptExtensions();
void TestInvalidCodePointFolding();

View File

@ -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");

View File

@ -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,

View File

@ -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,

View File

@ -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 {

View File

@ -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 -----------------------------------------------
/**

View File

@ -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.

View File

@ -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);
}

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:a8be41753876c867630b4e740d692e0ae7ced119086a22cd4844ea7bf174d6f7
size 12509408
oid sha256:956147318ffa776ff18c71ab09c5ae63e336e14e240128c8602abf07ef7d7d3f
size 12510547

View File

@ -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()
{

View File

@ -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)

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;
}

View File

@ -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 */

View 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;
}

View File

@ -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"),

View File

@ -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;

View File

@ -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;

View File

@ -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):