1301 lines
56 KiB
C
1301 lines
56 KiB
C
|
/*
|
|||
|
* regc_locale.c --
|
|||
|
*
|
|||
|
* This file contains the Unicode locale specific regexp routines.
|
|||
|
* This file is #included by regcomp.c.
|
|||
|
*
|
|||
|
* Copyright (c) 1998 by Scriptics Corporation.
|
|||
|
*
|
|||
|
* See the file "license.terms" for information on usage and redistribution of
|
|||
|
* this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
|||
|
*/
|
|||
|
|
|||
|
/* ASCII character-name table */
|
|||
|
|
|||
|
static const struct cname {
|
|||
|
const char *name;
|
|||
|
const char code;
|
|||
|
} cnames[] = {
|
|||
|
{"NUL", '\0'},
|
|||
|
{"SOH", '\001'},
|
|||
|
{"STX", '\002'},
|
|||
|
{"ETX", '\003'},
|
|||
|
{"EOT", '\004'},
|
|||
|
{"ENQ", '\005'},
|
|||
|
{"ACK", '\006'},
|
|||
|
{"BEL", '\007'},
|
|||
|
{"alert", '\007'},
|
|||
|
{"BS", '\010'},
|
|||
|
{"backspace", '\b'},
|
|||
|
{"HT", '\011'},
|
|||
|
{"tab", '\t'},
|
|||
|
{"LF", '\012'},
|
|||
|
{"newline", '\n'},
|
|||
|
{"VT", '\013'},
|
|||
|
{"vertical-tab", '\v'},
|
|||
|
{"FF", '\014'},
|
|||
|
{"form-feed", '\f'},
|
|||
|
{"CR", '\015'},
|
|||
|
{"carriage-return", '\r'},
|
|||
|
{"SO", '\016'},
|
|||
|
{"SI", '\017'},
|
|||
|
{"DLE", '\020'},
|
|||
|
{"DC1", '\021'},
|
|||
|
{"DC2", '\022'},
|
|||
|
{"DC3", '\023'},
|
|||
|
{"DC4", '\024'},
|
|||
|
{"NAK", '\025'},
|
|||
|
{"SYN", '\026'},
|
|||
|
{"ETB", '\027'},
|
|||
|
{"CAN", '\030'},
|
|||
|
{"EM", '\031'},
|
|||
|
{"SUB", '\032'},
|
|||
|
{"ESC", '\033'},
|
|||
|
{"IS4", '\034'},
|
|||
|
{"FS", '\034'},
|
|||
|
{"IS3", '\035'},
|
|||
|
{"GS", '\035'},
|
|||
|
{"IS2", '\036'},
|
|||
|
{"RS", '\036'},
|
|||
|
{"IS1", '\037'},
|
|||
|
{"US", '\037'},
|
|||
|
{"space", ' '},
|
|||
|
{"exclamation-mark",'!'},
|
|||
|
{"quotation-mark", '"'},
|
|||
|
{"number-sign", '#'},
|
|||
|
{"dollar-sign", '$'},
|
|||
|
{"percent-sign", '%'},
|
|||
|
{"ampersand", '&'},
|
|||
|
{"apostrophe", '\''},
|
|||
|
{"left-parenthesis",'('},
|
|||
|
{"right-parenthesis", ')'},
|
|||
|
{"asterisk", '*'},
|
|||
|
{"plus-sign", '+'},
|
|||
|
{"comma", ','},
|
|||
|
{"hyphen", '-'},
|
|||
|
{"hyphen-minus", '-'},
|
|||
|
{"period", '.'},
|
|||
|
{"full-stop", '.'},
|
|||
|
{"slash", '/'},
|
|||
|
{"solidus", '/'},
|
|||
|
{"zero", '0'},
|
|||
|
{"one", '1'},
|
|||
|
{"two", '2'},
|
|||
|
{"three", '3'},
|
|||
|
{"four", '4'},
|
|||
|
{"five", '5'},
|
|||
|
{"six", '6'},
|
|||
|
{"seven", '7'},
|
|||
|
{"eight", '8'},
|
|||
|
{"nine", '9'},
|
|||
|
{"colon", ':'},
|
|||
|
{"semicolon", ';'},
|
|||
|
{"less-than-sign", '<'},
|
|||
|
{"equals-sign", '='},
|
|||
|
{"greater-than-sign", '>'},
|
|||
|
{"question-mark", '?'},
|
|||
|
{"commercial-at", '@'},
|
|||
|
{"left-square-bracket", '['},
|
|||
|
{"backslash", '\\'},
|
|||
|
{"reverse-solidus", '\\'},
|
|||
|
{"right-square-bracket", ']'},
|
|||
|
{"circumflex", '^'},
|
|||
|
{"circumflex-accent", '^'},
|
|||
|
{"underscore", '_'},
|
|||
|
{"low-line", '_'},
|
|||
|
{"grave-accent", '`'},
|
|||
|
{"left-brace", '{'},
|
|||
|
{"left-curly-bracket", '{'},
|
|||
|
{"vertical-line", '|'},
|
|||
|
{"right-brace", '}'},
|
|||
|
{"right-curly-bracket", '}'},
|
|||
|
{"tilde", '~'},
|
|||
|
{"DEL", '\177'},
|
|||
|
{NULL, 0}
|
|||
|
};
|
|||
|
|
|||
|
/*
|
|||
|
* Unicode character-class tables.
|
|||
|
*/
|
|||
|
|
|||
|
typedef struct {
|
|||
|
chr start;
|
|||
|
chr end;
|
|||
|
} crange;
|
|||
|
|
|||
|
/*
|
|||
|
* Declarations of Unicode character ranges. This code
|
|||
|
* is automatically generated by the tools/uniClass.tcl script
|
|||
|
* and used in generic/regc_locale.c. Do not modify by hand.
|
|||
|
*/
|
|||
|
|
|||
|
/*
|
|||
|
* Unicode: alphabetic characters.
|
|||
|
*/
|
|||
|
|
|||
|
static const crange alphaRangeTable[] = {
|
|||
|
{0x41, 0x5A}, {0x61, 0x7A}, {0xC0, 0xD6}, {0xD8, 0xF6},
|
|||
|
{0xF8, 0x2C1}, {0x2C6, 0x2D1}, {0x2E0, 0x2E4}, {0x370, 0x374},
|
|||
|
{0x37A, 0x37D}, {0x388, 0x38A}, {0x38E, 0x3A1}, {0x3A3, 0x3F5},
|
|||
|
{0x3F7, 0x481}, {0x48A, 0x52F}, {0x531, 0x556}, {0x560, 0x588},
|
|||
|
{0x5D0, 0x5EA}, {0x5EF, 0x5F2}, {0x620, 0x64A}, {0x671, 0x6D3},
|
|||
|
{0x6FA, 0x6FC}, {0x712, 0x72F}, {0x74D, 0x7A5}, {0x7CA, 0x7EA},
|
|||
|
{0x800, 0x815}, {0x840, 0x858}, {0x860, 0x86A}, {0x870, 0x887},
|
|||
|
{0x889, 0x88E}, {0x8A0, 0x8C9}, {0x904, 0x939}, {0x958, 0x961},
|
|||
|
{0x971, 0x980}, {0x985, 0x98C}, {0x993, 0x9A8}, {0x9AA, 0x9B0},
|
|||
|
{0x9B6, 0x9B9}, {0x9DF, 0x9E1}, {0xA05, 0xA0A}, {0xA13, 0xA28},
|
|||
|
{0xA2A, 0xA30}, {0xA59, 0xA5C}, {0xA72, 0xA74}, {0xA85, 0xA8D},
|
|||
|
{0xA8F, 0xA91}, {0xA93, 0xAA8}, {0xAAA, 0xAB0}, {0xAB5, 0xAB9},
|
|||
|
{0xB05, 0xB0C}, {0xB13, 0xB28}, {0xB2A, 0xB30}, {0xB35, 0xB39},
|
|||
|
{0xB5F, 0xB61}, {0xB85, 0xB8A}, {0xB8E, 0xB90}, {0xB92, 0xB95},
|
|||
|
{0xBA8, 0xBAA}, {0xBAE, 0xBB9}, {0xC05, 0xC0C}, {0xC0E, 0xC10},
|
|||
|
{0xC12, 0xC28}, {0xC2A, 0xC39}, {0xC58, 0xC5A}, {0xC85, 0xC8C},
|
|||
|
{0xC8E, 0xC90}, {0xC92, 0xCA8}, {0xCAA, 0xCB3}, {0xCB5, 0xCB9},
|
|||
|
{0xD04, 0xD0C}, {0xD0E, 0xD10}, {0xD12, 0xD3A}, {0xD54, 0xD56},
|
|||
|
{0xD5F, 0xD61}, {0xD7A, 0xD7F}, {0xD85, 0xD96}, {0xD9A, 0xDB1},
|
|||
|
{0xDB3, 0xDBB}, {0xDC0, 0xDC6}, {0xE01, 0xE30}, {0xE40, 0xE46},
|
|||
|
{0xE86, 0xE8A}, {0xE8C, 0xEA3}, {0xEA7, 0xEB0}, {0xEC0, 0xEC4},
|
|||
|
{0xEDC, 0xEDF}, {0xF40, 0xF47}, {0xF49, 0xF6C}, {0xF88, 0xF8C},
|
|||
|
{0x1000, 0x102A}, {0x1050, 0x1055}, {0x105A, 0x105D}, {0x106E, 0x1070},
|
|||
|
{0x1075, 0x1081}, {0x10A0, 0x10C5}, {0x10D0, 0x10FA}, {0x10FC, 0x1248},
|
|||
|
{0x124A, 0x124D}, {0x1250, 0x1256}, {0x125A, 0x125D}, {0x1260, 0x1288},
|
|||
|
{0x128A, 0x128D}, {0x1290, 0x12B0}, {0x12B2, 0x12B5}, {0x12B8, 0x12BE},
|
|||
|
{0x12C2, 0x12C5}, {0x12C8, 0x12D6}, {0x12D8, 0x1310}, {0x1312, 0x1315},
|
|||
|
{0x1318, 0x135A}, {0x1380, 0x138F}, {0x13A0, 0x13F5}, {0x13F8, 0x13FD},
|
|||
|
{0x1401, 0x166C}, {0x166F, 0x167F}, {0x1681, 0x169A}, {0x16A0, 0x16EA},
|
|||
|
{0x16F1, 0x16F8}, {0x1700, 0x1711}, {0x171F, 0x1731}, {0x1740, 0x1751},
|
|||
|
{0x1760, 0x176C}, {0x176E, 0x1770}, {0x1780, 0x17B3}, {0x1820, 0x1878},
|
|||
|
{0x1880, 0x1884}, {0x1887, 0x18A8}, {0x18B0, 0x18F5}, {0x1900, 0x191E},
|
|||
|
{0x1950, 0x196D}, {0x1970, 0x1974}, {0x1980, 0x19AB}, {0x19B0, 0x19C9},
|
|||
|
{0x1A00, 0x1A16}, {0x1A20, 0x1A54}, {0x1B05, 0x1B33}, {0x1B45, 0x1B4C},
|
|||
|
{0x1B83, 0x1BA0}, {0x1BBA, 0x1BE5}, {0x1C00, 0x1C23}, {0x1C4D, 0x1C4F},
|
|||
|
{0x1C5A, 0x1C7D}, {0x1C80, 0x1C88}, {0x1C90, 0x1CBA}, {0x1CBD, 0x1CBF},
|
|||
|
{0x1CE9, 0x1CEC}, {0x1CEE, 0x1CF3}, {0x1D00, 0x1DBF}, {0x1E00, 0x1F15},
|
|||
|
{0x1F18, 0x1F1D}, {0x1F20, 0x1F45}, {0x1F48, 0x1F4D}, {0x1F50, 0x1F57},
|
|||
|
{0x1F5F, 0x1F7D}, {0x1F80, 0x1FB4}, {0x1FB6, 0x1FBC}, {0x1FC2, 0x1FC4},
|
|||
|
{0x1FC6, 0x1FCC}, {0x1FD0, 0x1FD3}, {0x1FD6, 0x1FDB}, {0x1FE0, 0x1FEC},
|
|||
|
{0x1FF2, 0x1FF4}, {0x1FF6, 0x1FFC}, {0x2090, 0x209C}, {0x210A, 0x2113},
|
|||
|
{0x2119, 0x211D}, {0x212A, 0x212D}, {0x212F, 0x2139}, {0x213C, 0x213F},
|
|||
|
{0x2145, 0x2149}, {0x2C00, 0x2CE4}, {0x2CEB, 0x2CEE}, {0x2D00, 0x2D25},
|
|||
|
{0x2D30, 0x2D67}, {0x2D80, 0x2D96}, {0x2DA0, 0x2DA6}, {0x2DA8, 0x2DAE},
|
|||
|
{0x2DB0, 0x2DB6}, {0x2DB8, 0x2DBE}, {0x2DC0, 0x2DC6}, {0x2DC8, 0x2DCE},
|
|||
|
{0x2DD0, 0x2DD6}, {0x2DD8, 0x2DDE}, {0x3031, 0x3035}, {0x3041, 0x3096},
|
|||
|
{0x309D, 0x309F}, {0x30A1, 0x30FA}, {0x30FC, 0x30FF}, {0x3105, 0x312F},
|
|||
|
{0x3131, 0x318E}, {0x31A0, 0x31BF}, {0x31F0, 0x31FF}, {0x3400, 0x4DBF},
|
|||
|
{0x4E00, 0xA48C}, {0xA4D0, 0xA4FD}, {0xA500, 0xA60C}, {0xA610, 0xA61F},
|
|||
|
{0xA640, 0xA66E}, {0xA67F, 0xA69D}, {0xA6A0, 0xA6E5}, {0xA717, 0xA71F},
|
|||
|
{0xA722, 0xA788}, {0xA78B, 0xA7CA}, {0xA7D5, 0xA7D9}, {0xA7F2, 0xA801},
|
|||
|
{0xA803, 0xA805}, {0xA807, 0xA80A}, {0xA80C, 0xA822}, {0xA840, 0xA873},
|
|||
|
{0xA882, 0xA8B3}, {0xA8F2, 0xA8F7}, {0xA90A, 0xA925}, {0xA930, 0xA946},
|
|||
|
{0xA960, 0xA97C}, {0xA984, 0xA9B2}, {0xA9E0, 0xA9E4}, {0xA9E6, 0xA9EF},
|
|||
|
{0xA9FA, 0xA9FE}, {0xAA00, 0xAA28}, {0xAA40, 0xAA42}, {0xAA44, 0xAA4B},
|
|||
|
{0xAA60, 0xAA76}, {0xAA7E, 0xAAAF}, {0xAAB9, 0xAABD}, {0xAADB, 0xAADD},
|
|||
|
{0xAAE0, 0xAAEA}, {0xAAF2, 0xAAF4}, {0xAB01, 0xAB06}, {0xAB09, 0xAB0E},
|
|||
|
{0xAB11, 0xAB16}, {0xAB20, 0xAB26}, {0xAB28, 0xAB2E}, {0xAB30, 0xAB5A},
|
|||
|
{0xAB5C, 0xAB69}, {0xAB70, 0xABE2}, {0xAC00, 0xD7A3}, {0xD7B0, 0xD7C6},
|
|||
|
{0xD7CB, 0xD7FB}, {0xF900, 0xFA6D}, {0xFA70, 0xFAD9}, {0xFB00, 0xFB06},
|
|||
|
{0xFB13, 0xFB17}, {0xFB1F, 0xFB28}, {0xFB2A, 0xFB36}, {0xFB38, 0xFB3C},
|
|||
|
{0xFB46, 0xFBB1}, {0xFBD3, 0xFD3D}, {0xFD50, 0xFD8F}, {0xFD92, 0xFDC7},
|
|||
|
{0xFDF0, 0xFDFB}, {0xFE70, 0xFE74}, {0xFE76, 0xFEFC}, {0xFF21, 0xFF3A},
|
|||
|
{0xFF41, 0xFF5A}, {0xFF66, 0xFFBE}, {0xFFC2, 0xFFC7}, {0xFFCA, 0xFFCF},
|
|||
|
{0xFFD2, 0xFFD7}, {0xFFDA, 0xFFDC}
|
|||
|
#if CHRBITS > 16
|
|||
|
,{0x10000, 0x1000B}, {0x1000D, 0x10026}, {0x10028, 0x1003A}, {0x1003F, 0x1004D},
|
|||
|
{0x10050, 0x1005D}, {0x10080, 0x100FA}, {0x10280, 0x1029C}, {0x102A0, 0x102D0},
|
|||
|
{0x10300, 0x1031F}, {0x1032D, 0x10340}, {0x10342, 0x10349}, {0x10350, 0x10375},
|
|||
|
{0x10380, 0x1039D}, {0x103A0, 0x103C3}, {0x103C8, 0x103CF}, {0x10400, 0x1049D},
|
|||
|
{0x104B0, 0x104D3}, {0x104D8, 0x104FB}, {0x10500, 0x10527}, {0x10530, 0x10563},
|
|||
|
{0x10570, 0x1057A}, {0x1057C, 0x1058A}, {0x1058C, 0x10592}, {0x10597, 0x105A1},
|
|||
|
{0x105A3, 0x105B1}, {0x105B3, 0x105B9}, {0x10600, 0x10736}, {0x10740, 0x10755},
|
|||
|
{0x10760, 0x10767}, {0x10780, 0x10785}, {0x10787, 0x107B0}, {0x107B2, 0x107BA},
|
|||
|
{0x10800, 0x10805}, {0x1080A, 0x10835}, {0x1083F, 0x10855}, {0x10860, 0x10876},
|
|||
|
{0x10880, 0x1089E}, {0x108E0, 0x108F2}, {0x10900, 0x10915}, {0x10920, 0x10939},
|
|||
|
{0x10980, 0x109B7}, {0x10A10, 0x10A13}, {0x10A15, 0x10A17}, {0x10A19, 0x10A35},
|
|||
|
{0x10A60, 0x10A7C}, {0x10A80, 0x10A9C}, {0x10AC0, 0x10AC7}, {0x10AC9, 0x10AE4},
|
|||
|
{0x10B00, 0x10B35}, {0x10B40, 0x10B55}, {0x10B60, 0x10B72}, {0x10B80, 0x10B91},
|
|||
|
{0x10C00, 0x10C48}, {0x10C80, 0x10CB2}, {0x10CC0, 0x10CF2}, {0x10D00, 0x10D23},
|
|||
|
{0x10E80, 0x10EA9}, {0x10F00, 0x10F1C}, {0x10F30, 0x10F45}, {0x10F70, 0x10F81},
|
|||
|
{0x10FB0, 0x10FC4}, {0x10FE0, 0x10FF6}, {0x11003, 0x11037}, {0x11083, 0x110AF},
|
|||
|
{0x110D0, 0x110E8}, {0x11103, 0x11126}, {0x11150, 0x11172}, {0x11183, 0x111B2},
|
|||
|
{0x111C1, 0x111C4}, {0x11200, 0x11211}, {0x11213, 0x1122B}, {0x11280, 0x11286},
|
|||
|
{0x1128A, 0x1128D}, {0x1128F, 0x1129D}, {0x1129F, 0x112A8}, {0x112B0, 0x112DE},
|
|||
|
{0x11305, 0x1130C}, {0x11313, 0x11328}, {0x1132A, 0x11330}, {0x11335, 0x11339},
|
|||
|
{0x1135D, 0x11361}, {0x11400, 0x11434}, {0x11447, 0x1144A}, {0x1145F, 0x11461},
|
|||
|
{0x11480, 0x114AF}, {0x11580, 0x115AE}, {0x115D8, 0x115DB}, {0x11600, 0x1162F},
|
|||
|
{0x11680, 0x116AA}, {0x11700, 0x1171A}, {0x11740, 0x11746}, {0x11800, 0x1182B},
|
|||
|
{0x118A0, 0x118DF}, {0x118FF, 0x11906}, {0x1190C, 0x11913}, {0x11918, 0x1192F},
|
|||
|
{0x119A0, 0x119A7}, {0x119AA, 0x119D0}, {0x11A0B, 0x11A32}, {0x11A5C, 0x11A89},
|
|||
|
{0x11AB0, 0x11AF8}, {0x11C00, 0x11C08}, {0x11C0A, 0x11C2E}, {0x11C72, 0x11C8F},
|
|||
|
{0x11D00, 0x11D06}, {0x11D0B, 0x11D30}, {0x11D60, 0x11D65}, {0x11D6A, 0x11D89},
|
|||
|
{0x11EE0, 0x11EF2}, {0x12000, 0x12399}, {0x12480, 0x12543}, {0x12F90, 0x12FF0},
|
|||
|
{0x13000, 0x1342E}, {0x14400, 0x14646}, {0x16800, 0x16A38}, {0x16A40, 0x16A5E},
|
|||
|
{0x16A70, 0x16ABE}, {0x16AD0, 0x16AED}, {0x16B00, 0x16B2F}, {0x16B40, 0x16B43},
|
|||
|
{0x16B63, 0x16B77}, {0x16B7D, 0x16B8F}, {0x16E40, 0x16E7F}, {0x16F00, 0x16F4A},
|
|||
|
{0x16F93, 0x16F9F}, {0x17000, 0x187F7}, {0x18800, 0x18CD5}, {0x18D00, 0x18D08},
|
|||
|
{0x1AFF0, 0x1AFF3}, {0x1AFF5, 0x1AFFB}, {0x1B000, 0x1B122}, {0x1B150, 0x1B152},
|
|||
|
{0x1B164, 0x1B167}, {0x1B170, 0x1B2FB}, {0x1BC00, 0x1BC6A}, {0x1BC70, 0x1BC7C},
|
|||
|
{0x1BC80, 0x1BC88}, {0x1BC90, 0x1BC99}, {0x1D400, 0x1D454}, {0x1D456, 0x1D49C},
|
|||
|
{0x1D4A9, 0x1D4AC}, {0x1D4AE, 0x1D4B9}, {0x1D4BD, 0x1D4C3}, {0x1D4C5, 0x1D505},
|
|||
|
{0x1D507, 0x1D50A}, {0x1D50D, 0x1D514}, {0x1D516, 0x1D51C}, {0x1D51E, 0x1D539},
|
|||
|
{0x1D53B, 0x1D53E}, {0x1D540, 0x1D544}, {0x1D54A, 0x1D550}, {0x1D552, 0x1D6A5},
|
|||
|
{0x1D6A8, 0x1D6C0}, {0x1D6C2, 0x1D6DA}, {0x1D6DC, 0x1D6FA}, {0x1D6FC, 0x1D714},
|
|||
|
{0x1D716, 0x1D734}, {0x1D736, 0x1D74E}, {0x1D750, 0x1D76E}, {0x1D770, 0x1D788},
|
|||
|
{0x1D78A, 0x1D7A8}, {0x1D7AA, 0x1D7C2}, {0x1D7C4, 0x1D7CB}, {0x1DF00, 0x1DF1E},
|
|||
|
{0x1E100, 0x1E12C}, {0x1E137, 0x1E13D}, {0x1E290, 0x1E2AD}, {0x1E2C0, 0x1E2EB},
|
|||
|
{0x1E7E0, 0x1E7E6}, {0x1E7E8, 0x1E7EB}, {0x1E7F0, 0x1E7FE}, {0x1E800, 0x1E8C4},
|
|||
|
{0x1E900, 0x1E943}, {0x1EE00, 0x1EE03}, {0x1EE05, 0x1EE1F}, {0x1EE29, 0x1EE32},
|
|||
|
{0x1EE34, 0x1EE37}, {0x1EE4D, 0x1EE4F}, {0x1EE67, 0x1EE6A}, {0x1EE6C, 0x1EE72},
|
|||
|
{0x1EE74, 0x1EE77}, {0x1EE79, 0x1EE7C}, {0x1EE80, 0x1EE89}, {0x1EE8B, 0x1EE9B},
|
|||
|
{0x1EEA1, 0x1EEA3}, {0x1EEA5, 0x1EEA9}, {0x1EEAB, 0x1EEBB}, {0x20000, 0x2A6DF},
|
|||
|
{0x2A700, 0x2B738}, {0x2B740, 0x2B81D}, {0x2B820, 0x2CEA1}, {0x2CEB0, 0x2EBE0},
|
|||
|
{0x2F800, 0x2FA1D}, {0x30000, 0x3134A}
|
|||
|
#endif
|
|||
|
};
|
|||
|
|
|||
|
#define NUM_ALPHA_RANGE (sizeof(alphaRangeTable)/sizeof(crange))
|
|||
|
|
|||
|
static const chr alphaCharTable[] = {
|
|||
|
0xAA, 0xB5, 0xBA, 0x2EC, 0x2EE, 0x376, 0x377, 0x37F, 0x386,
|
|||
|
0x38C, 0x559, 0x66E, 0x66F, 0x6D5, 0x6E5, 0x6E6, 0x6EE, 0x6EF,
|
|||
|
0x6FF, 0x710, 0x7B1, 0x7F4, 0x7F5, 0x7FA, 0x81A, 0x824, 0x828,
|
|||
|
0x93D, 0x950, 0x98F, 0x990, 0x9B2, 0x9BD, 0x9CE, 0x9DC, 0x9DD,
|
|||
|
0x9F0, 0x9F1, 0x9FC, 0xA0F, 0xA10, 0xA32, 0xA33, 0xA35, 0xA36,
|
|||
|
0xA38, 0xA39, 0xA5E, 0xAB2, 0xAB3, 0xABD, 0xAD0, 0xAE0, 0xAE1,
|
|||
|
0xAF9, 0xB0F, 0xB10, 0xB32, 0xB33, 0xB3D, 0xB5C, 0xB5D, 0xB71,
|
|||
|
0xB83, 0xB99, 0xB9A, 0xB9C, 0xB9E, 0xB9F, 0xBA3, 0xBA4, 0xBD0,
|
|||
|
0xC3D, 0xC5D, 0xC60, 0xC61, 0xC80, 0xCBD, 0xCDD, 0xCDE, 0xCE0,
|
|||
|
0xCE1, 0xCF1, 0xCF2, 0xD3D, 0xD4E, 0xDBD, 0xE32, 0xE33, 0xE81,
|
|||
|
0xE82, 0xE84, 0xEA5, 0xEB2, 0xEB3, 0xEBD, 0xEC6, 0xF00, 0x103F,
|
|||
|
0x1061, 0x1065, 0x1066, 0x108E, 0x10C7, 0x10CD, 0x1258, 0x12C0, 0x17D7,
|
|||
|
0x17DC, 0x18AA, 0x1AA7, 0x1BAE, 0x1BAF, 0x1CF5, 0x1CF6, 0x1CFA, 0x1F59,
|
|||
|
0x1F5B, 0x1F5D, 0x1FBE, 0x2071, 0x207F, 0x2102, 0x2107, 0x2115, 0x2124,
|
|||
|
0x2126, 0x2128, 0x214E, 0x2183, 0x2184, 0x2CF2, 0x2CF3, 0x2D27, 0x2D2D,
|
|||
|
0x2D6F, 0x2E2F, 0x3005, 0x3006, 0x303B, 0x303C, 0xA62A, 0xA62B, 0xA7D0,
|
|||
|
0xA7D1, 0xA7D3, 0xA8FB, 0xA8FD, 0xA8FE, 0xA9CF, 0xAA7A, 0xAAB1, 0xAAB5,
|
|||
|
0xAAB6, 0xAAC0, 0xAAC2, 0xFB1D, 0xFB3E, 0xFB40, 0xFB41, 0xFB43, 0xFB44
|
|||
|
#if CHRBITS > 16
|
|||
|
,0x1003C, 0x1003D, 0x10594, 0x10595, 0x105BB, 0x105BC, 0x10808, 0x10837, 0x10838,
|
|||
|
0x1083C, 0x108F4, 0x108F5, 0x109BE, 0x109BF, 0x10A00, 0x10EB0, 0x10EB1, 0x10F27,
|
|||
|
0x11071, 0x11072, 0x11075, 0x11144, 0x11147, 0x11176, 0x111DA, 0x111DC, 0x11288,
|
|||
|
0x1130F, 0x11310, 0x11332, 0x11333, 0x1133D, 0x11350, 0x114C4, 0x114C5, 0x114C7,
|
|||
|
0x11644, 0x116B8, 0x11909, 0x11915, 0x11916, 0x1193F, 0x11941, 0x119E1, 0x119E3,
|
|||
|
0x11A00, 0x11A3A, 0x11A50, 0x11A9D, 0x11C40, 0x11D08, 0x11D09, 0x11D46, 0x11D67,
|
|||
|
0x11D68, 0x11D98, 0x11FB0, 0x16F50, 0x16FE0, 0x16FE1, 0x16FE3, 0x1AFFD, 0x1AFFE,
|
|||
|
0x1D49E, 0x1D49F, 0x1D4A2, 0x1D4A5, 0x1D4A6, 0x1D4BB, 0x1D546, 0x1E14E, 0x1E7ED,
|
|||
|
0x1E7EE, 0x1E94B, 0x1EE21, 0x1EE22, 0x1EE24, 0x1EE27, 0x1EE39, 0x1EE3B, 0x1EE42,
|
|||
|
0x1EE47, 0x1EE49, 0x1EE4B, 0x1EE51, 0x1EE52, 0x1EE54, 0x1EE57, 0x1EE59, 0x1EE5B,
|
|||
|
0x1EE5D, 0x1EE5F, 0x1EE61, 0x1EE62, 0x1EE64, 0x1EE7E
|
|||
|
#endif
|
|||
|
};
|
|||
|
|
|||
|
#define NUM_ALPHA_CHAR (sizeof(alphaCharTable)/sizeof(chr))
|
|||
|
|
|||
|
/*
|
|||
|
* Unicode: control characters.
|
|||
|
*/
|
|||
|
|
|||
|
static const crange controlRangeTable[] = {
|
|||
|
{0x0, 0x1F}, {0x7F, 0x9F}, {0x600, 0x605}, {0x200B, 0x200F},
|
|||
|
{0x202A, 0x202E}, {0x2060, 0x2064}, {0x2066, 0x206F}, {0xE000, 0xF8FF},
|
|||
|
{0xFFF9, 0xFFFB}
|
|||
|
#if CHRBITS > 16
|
|||
|
,{0x13430, 0x13438}, {0x1BCA0, 0x1BCA3}, {0x1D173, 0x1D17A}, {0xE0020, 0xE007F},
|
|||
|
{0xF0000, 0xFFFFD}, {0x100000, 0x10FFFD}
|
|||
|
#endif
|
|||
|
};
|
|||
|
|
|||
|
#define NUM_CONTROL_RANGE (sizeof(controlRangeTable)/sizeof(crange))
|
|||
|
|
|||
|
static const chr controlCharTable[] = {
|
|||
|
0xAD, 0x61C, 0x6DD, 0x70F, 0x890, 0x891, 0x8E2, 0x180E, 0xFEFF
|
|||
|
#if CHRBITS > 16
|
|||
|
,0x110BD, 0x110CD, 0xE0001
|
|||
|
#endif
|
|||
|
};
|
|||
|
|
|||
|
#define NUM_CONTROL_CHAR (sizeof(controlCharTable)/sizeof(chr))
|
|||
|
|
|||
|
/*
|
|||
|
* Unicode: decimal digit characters.
|
|||
|
*/
|
|||
|
|
|||
|
static const crange digitRangeTable[] = {
|
|||
|
{0x30, 0x39}, {0x660, 0x669}, {0x6F0, 0x6F9}, {0x7C0, 0x7C9},
|
|||
|
{0x966, 0x96F}, {0x9E6, 0x9EF}, {0xA66, 0xA6F}, {0xAE6, 0xAEF},
|
|||
|
{0xB66, 0xB6F}, {0xBE6, 0xBEF}, {0xC66, 0xC6F}, {0xCE6, 0xCEF},
|
|||
|
{0xD66, 0xD6F}, {0xDE6, 0xDEF}, {0xE50, 0xE59}, {0xED0, 0xED9},
|
|||
|
{0xF20, 0xF29}, {0x1040, 0x1049}, {0x1090, 0x1099}, {0x17E0, 0x17E9},
|
|||
|
{0x1810, 0x1819}, {0x1946, 0x194F}, {0x19D0, 0x19D9}, {0x1A80, 0x1A89},
|
|||
|
{0x1A90, 0x1A99}, {0x1B50, 0x1B59}, {0x1BB0, 0x1BB9}, {0x1C40, 0x1C49},
|
|||
|
{0x1C50, 0x1C59}, {0xA620, 0xA629}, {0xA8D0, 0xA8D9}, {0xA900, 0xA909},
|
|||
|
{0xA9D0, 0xA9D9}, {0xA9F0, 0xA9F9}, {0xAA50, 0xAA59}, {0xABF0, 0xABF9},
|
|||
|
{0xFF10, 0xFF19}
|
|||
|
#if CHRBITS > 16
|
|||
|
,{0x104A0, 0x104A9}, {0x10D30, 0x10D39}, {0x11066, 0x1106F}, {0x110F0, 0x110F9},
|
|||
|
{0x11136, 0x1113F}, {0x111D0, 0x111D9}, {0x112F0, 0x112F9}, {0x11450, 0x11459},
|
|||
|
{0x114D0, 0x114D9}, {0x11650, 0x11659}, {0x116C0, 0x116C9}, {0x11730, 0x11739},
|
|||
|
{0x118E0, 0x118E9}, {0x11950, 0x11959}, {0x11C50, 0x11C59}, {0x11D50, 0x11D59},
|
|||
|
{0x11DA0, 0x11DA9}, {0x16A60, 0x16A69}, {0x16AC0, 0x16AC9}, {0x16B50, 0x16B59},
|
|||
|
{0x1D7CE, 0x1D7FF}, {0x1E140, 0x1E149}, {0x1E2F0, 0x1E2F9}, {0x1E950, 0x1E959},
|
|||
|
{0x1FBF0, 0x1FBF9}
|
|||
|
#endif
|
|||
|
};
|
|||
|
|
|||
|
#define NUM_DIGIT_RANGE (sizeof(digitRangeTable)/sizeof(crange))
|
|||
|
|
|||
|
/*
|
|||
|
* no singletons of digit characters.
|
|||
|
*/
|
|||
|
|
|||
|
/*
|
|||
|
* Unicode: punctuation characters.
|
|||
|
*/
|
|||
|
|
|||
|
static const crange punctRangeTable[] = {
|
|||
|
{0x21, 0x23}, {0x25, 0x2A}, {0x2C, 0x2F}, {0x5B, 0x5D},
|
|||
|
{0x55A, 0x55F}, {0x61D, 0x61F}, {0x66A, 0x66D}, {0x700, 0x70D},
|
|||
|
{0x7F7, 0x7F9}, {0x830, 0x83E}, {0xF04, 0xF12}, {0xF3A, 0xF3D},
|
|||
|
{0xFD0, 0xFD4}, {0x104A, 0x104F}, {0x1360, 0x1368}, {0x16EB, 0x16ED},
|
|||
|
{0x17D4, 0x17D6}, {0x17D8, 0x17DA}, {0x1800, 0x180A}, {0x1AA0, 0x1AA6},
|
|||
|
{0x1AA8, 0x1AAD}, {0x1B5A, 0x1B60}, {0x1BFC, 0x1BFF}, {0x1C3B, 0x1C3F},
|
|||
|
{0x1CC0, 0x1CC7}, {0x2010, 0x2027}, {0x2030, 0x2043}, {0x2045, 0x2051},
|
|||
|
{0x2053, 0x205E}, {0x2308, 0x230B}, {0x2768, 0x2775}, {0x27E6, 0x27EF},
|
|||
|
{0x2983, 0x2998}, {0x29D8, 0x29DB}, {0x2CF9, 0x2CFC}, {0x2E00, 0x2E2E},
|
|||
|
{0x2E30, 0x2E4F}, {0x2E52, 0x2E5D}, {0x3001, 0x3003}, {0x3008, 0x3011},
|
|||
|
{0x3014, 0x301F}, {0xA60D, 0xA60F}, {0xA6F2, 0xA6F7}, {0xA874, 0xA877},
|
|||
|
{0xA8F8, 0xA8FA}, {0xA9C1, 0xA9CD}, {0xAA5C, 0xAA5F}, {0xFE10, 0xFE19},
|
|||
|
{0xFE30, 0xFE52}, {0xFE54, 0xFE61}, {0xFF01, 0xFF03}, {0xFF05, 0xFF0A},
|
|||
|
{0xFF0C, 0xFF0F}, {0xFF3B, 0xFF3D}, {0xFF5F, 0xFF65}
|
|||
|
#if CHRBITS > 16
|
|||
|
,{0x10100, 0x10102}, {0x10A50, 0x10A58}, {0x10AF0, 0x10AF6}, {0x10B39, 0x10B3F},
|
|||
|
{0x10B99, 0x10B9C}, {0x10F55, 0x10F59}, {0x10F86, 0x10F89}, {0x11047, 0x1104D},
|
|||
|
{0x110BE, 0x110C1}, {0x11140, 0x11143}, {0x111C5, 0x111C8}, {0x111DD, 0x111DF},
|
|||
|
{0x11238, 0x1123D}, {0x1144B, 0x1144F}, {0x115C1, 0x115D7}, {0x11641, 0x11643},
|
|||
|
{0x11660, 0x1166C}, {0x1173C, 0x1173E}, {0x11944, 0x11946}, {0x11A3F, 0x11A46},
|
|||
|
{0x11A9A, 0x11A9C}, {0x11A9E, 0x11AA2}, {0x11C41, 0x11C45}, {0x12470, 0x12474},
|
|||
|
{0x16B37, 0x16B3B}, {0x16E97, 0x16E9A}, {0x1DA87, 0x1DA8B}
|
|||
|
#endif
|
|||
|
};
|
|||
|
|
|||
|
#define NUM_PUNCT_RANGE (sizeof(punctRangeTable)/sizeof(crange))
|
|||
|
|
|||
|
static const chr punctCharTable[] = {
|
|||
|
0x3A, 0x3B, 0x3F, 0x40, 0x5F, 0x7B, 0x7D, 0xA1, 0xA7,
|
|||
|
0xAB, 0xB6, 0xB7, 0xBB, 0xBF, 0x37E, 0x387, 0x589, 0x58A,
|
|||
|
0x5BE, 0x5C0, 0x5C3, 0x5C6, 0x5F3, 0x5F4, 0x609, 0x60A, 0x60C,
|
|||
|
0x60D, 0x61B, 0x6D4, 0x85E, 0x964, 0x965, 0x970, 0x9FD, 0xA76,
|
|||
|
0xAF0, 0xC77, 0xC84, 0xDF4, 0xE4F, 0xE5A, 0xE5B, 0xF14, 0xF85,
|
|||
|
0xFD9, 0xFDA, 0x10FB, 0x1400, 0x166E, 0x169B, 0x169C, 0x1735, 0x1736,
|
|||
|
0x1944, 0x1945, 0x1A1E, 0x1A1F, 0x1B7D, 0x1B7E, 0x1C7E, 0x1C7F, 0x1CD3,
|
|||
|
0x207D, 0x207E, 0x208D, 0x208E, 0x2329, 0x232A, 0x27C5, 0x27C6, 0x29FC,
|
|||
|
0x29FD, 0x2CFE, 0x2CFF, 0x2D70, 0x3030, 0x303D, 0x30A0, 0x30FB, 0xA4FE,
|
|||
|
0xA4FF, 0xA673, 0xA67E, 0xA8CE, 0xA8CF, 0xA8FC, 0xA92E, 0xA92F, 0xA95F,
|
|||
|
0xA9DE, 0xA9DF, 0xAADE, 0xAADF, 0xAAF0, 0xAAF1, 0xABEB, 0xFD3E, 0xFD3F,
|
|||
|
0xFE63, 0xFE68, 0xFE6A, 0xFE6B, 0xFF1A, 0xFF1B, 0xFF1F, 0xFF20, 0xFF3F,
|
|||
|
0xFF5B, 0xFF5D
|
|||
|
#if CHRBITS > 16
|
|||
|
,0x1039F, 0x103D0, 0x1056F, 0x10857, 0x1091F, 0x1093F, 0x10A7F, 0x10EAD, 0x110BB,
|
|||
|
0x110BC, 0x11174, 0x11175, 0x111CD, 0x111DB, 0x112A9, 0x1145A, 0x1145B, 0x1145D,
|
|||
|
0x114C6, 0x116B9, 0x1183B, 0x119E2, 0x11C70, 0x11C71, 0x11EF7, 0x11EF8, 0x11FFF,
|
|||
|
0x12FF1, 0x12FF2, 0x16A6E, 0x16A6F, 0x16AF5, 0x16B44, 0x16FE2, 0x1BC9F, 0x1E95E,
|
|||
|
0x1E95F
|
|||
|
#endif
|
|||
|
};
|
|||
|
|
|||
|
#define NUM_PUNCT_CHAR (sizeof(punctCharTable)/sizeof(chr))
|
|||
|
|
|||
|
/*
|
|||
|
* Unicode: white space characters.
|
|||
|
*/
|
|||
|
|
|||
|
static const crange spaceRangeTable[] = {
|
|||
|
{0x9, 0xD}, {0x2000, 0x200B}
|
|||
|
};
|
|||
|
|
|||
|
#define NUM_SPACE_RANGE (sizeof(spaceRangeTable)/sizeof(crange))
|
|||
|
|
|||
|
static const chr spaceCharTable[] = {
|
|||
|
0x20, 0x85, 0xA0, 0x1680, 0x180E, 0x2028, 0x2029, 0x202F, 0x205F,
|
|||
|
0x2060, 0x3000, 0xFEFF
|
|||
|
};
|
|||
|
|
|||
|
#define NUM_SPACE_CHAR (sizeof(spaceCharTable)/sizeof(chr))
|
|||
|
|
|||
|
/*
|
|||
|
* Unicode: lowercase characters.
|
|||
|
*/
|
|||
|
|
|||
|
static const crange lowerRangeTable[] = {
|
|||
|
{0x61, 0x7A}, {0xDF, 0xF6}, {0xF8, 0xFF}, {0x17E, 0x180},
|
|||
|
{0x199, 0x19B}, {0x1BD, 0x1BF}, {0x233, 0x239}, {0x24F, 0x293},
|
|||
|
{0x295, 0x2AF}, {0x37B, 0x37D}, {0x3AC, 0x3CE}, {0x3D5, 0x3D7},
|
|||
|
{0x3EF, 0x3F3}, {0x430, 0x45F}, {0x560, 0x588}, {0x10D0, 0x10FA},
|
|||
|
{0x10FD, 0x10FF}, {0x13F8, 0x13FD}, {0x1C80, 0x1C88}, {0x1D00, 0x1D2B},
|
|||
|
{0x1D6B, 0x1D77}, {0x1D79, 0x1D9A}, {0x1E95, 0x1E9D}, {0x1EFF, 0x1F07},
|
|||
|
{0x1F10, 0x1F15}, {0x1F20, 0x1F27}, {0x1F30, 0x1F37}, {0x1F40, 0x1F45},
|
|||
|
{0x1F50, 0x1F57}, {0x1F60, 0x1F67}, {0x1F70, 0x1F7D}, {0x1F80, 0x1F87},
|
|||
|
{0x1F90, 0x1F97}, {0x1FA0, 0x1FA7}, {0x1FB0, 0x1FB4}, {0x1FC2, 0x1FC4},
|
|||
|
{0x1FD0, 0x1FD3}, {0x1FE0, 0x1FE7}, {0x1FF2, 0x1FF4}, {0x2146, 0x2149},
|
|||
|
{0x2C30, 0x2C5F}, {0x2C76, 0x2C7B}, {0x2D00, 0x2D25}, {0xA72F, 0xA731},
|
|||
|
{0xA771, 0xA778}, {0xA793, 0xA795}, {0xAB30, 0xAB5A}, {0xAB60, 0xAB68},
|
|||
|
{0xAB70, 0xABBF}, {0xFB00, 0xFB06}, {0xFB13, 0xFB17}, {0xFF41, 0xFF5A}
|
|||
|
#if CHRBITS > 16
|
|||
|
,{0x10428, 0x1044F}, {0x104D8, 0x104FB}, {0x10597, 0x105A1}, {0x105A3, 0x105B1},
|
|||
|
{0x105B3, 0x105B9}, {0x10CC0, 0x10CF2}, {0x118C0, 0x118DF}, {0x16E60, 0x16E7F},
|
|||
|
{0x1D41A, 0x1D433}, {0x1D44E, 0x1D454}, {0x1D456, 0x1D467}, {0x1D482, 0x1D49B},
|
|||
|
{0x1D4B6, 0x1D4B9}, {0x1D4BD, 0x1D4C3}, {0x1D4C5, 0x1D4CF}, {0x1D4EA, 0x1D503},
|
|||
|
{0x1D51E, 0x1D537}, {0x1D552, 0x1D56B}, {0x1D586, 0x1D59F}, {0x1D5BA, 0x1D5D3},
|
|||
|
{0x1D5EE, 0x1D607}, {0x1D622, 0x1D63B}, {0x1D656, 0x1D66F}, {0x1D68A, 0x1D6A5},
|
|||
|
{0x1D6C2, 0x1D6DA}, {0x1D6DC, 0x1D6E1}, {0x1D6FC, 0x1D714}, {0x1D716, 0x1D71B},
|
|||
|
{0x1D736, 0x1D74E}, {0x1D750, 0x1D755}, {0x1D770, 0x1D788}, {0x1D78A, 0x1D78F},
|
|||
|
{0x1D7AA, 0x1D7C2}, {0x1D7C4, 0x1D7C9}, {0x1DF00, 0x1DF09}, {0x1DF0B, 0x1DF1E},
|
|||
|
{0x1E922, 0x1E943}
|
|||
|
#endif
|
|||
|
};
|
|||
|
|
|||
|
#define NUM_LOWER_RANGE (sizeof(lowerRangeTable)/sizeof(crange))
|
|||
|
|
|||
|
static const chr lowerCharTable[] = {
|
|||
|
0xB5, 0x101, 0x103, 0x105, 0x107, 0x109, 0x10B, 0x10D, 0x10F,
|
|||
|
0x111, 0x113, 0x115, 0x117, 0x119, 0x11B, 0x11D, 0x11F, 0x121,
|
|||
|
0x123, 0x125, 0x127, 0x129, 0x12B, 0x12D, 0x12F, 0x131, 0x133,
|
|||
|
0x135, 0x137, 0x138, 0x13A, 0x13C, 0x13E, 0x140, 0x142, 0x144,
|
|||
|
0x146, 0x148, 0x149, 0x14B, 0x14D, 0x14F, 0x151, 0x153, 0x155,
|
|||
|
0x157, 0x159, 0x15B, 0x15D, 0x15F, 0x161, 0x163, 0x165, 0x167,
|
|||
|
0x169, 0x16B, 0x16D, 0x16F, 0x171, 0x173, 0x175, 0x177, 0x17A,
|
|||
|
0x17C, 0x183, 0x185, 0x188, 0x18C, 0x18D, 0x192, 0x195, 0x19E,
|
|||
|
0x1A1, 0x1A3, 0x1A5, 0x1A8, 0x1AA, 0x1AB, 0x1AD, 0x1B0, 0x1B4,
|
|||
|
0x1B6, 0x1B9, 0x1BA, 0x1C6, 0x1C9, 0x1CC, 0x1CE, 0x1D0, 0x1D2,
|
|||
|
0x1D4, 0x1D6, 0x1D8, 0x1DA, 0x1DC, 0x1DD, 0x1DF, 0x1E1, 0x1E3,
|
|||
|
0x1E5, 0x1E7, 0x1E9, 0x1EB, 0x1ED, 0x1EF, 0x1F0, 0x1F3, 0x1F5,
|
|||
|
0x1F9, 0x1FB, 0x1FD, 0x1FF, 0x201, 0x203, 0x205, 0x207, 0x209,
|
|||
|
0x20B, 0x20D, 0x20F, 0x211, 0x213, 0x215, 0x217, 0x219, 0x21B,
|
|||
|
0x21D, 0x21F, 0x221, 0x223, 0x225, 0x227, 0x229, 0x22B, 0x22D,
|
|||
|
0x22F, 0x231, 0x23C, 0x23F, 0x240, 0x242, 0x247, 0x249, 0x24B,
|
|||
|
0x24D, 0x371, 0x373, 0x377, 0x390, 0x3D0, 0x3D1, 0x3D9, 0x3DB,
|
|||
|
0x3DD, 0x3DF, 0x3E1, 0x3E3, 0x3E5, 0x3E7, 0x3E9, 0x3EB, 0x3ED,
|
|||
|
0x3F5, 0x3F8, 0x3FB, 0x3FC, 0x461, 0x463, 0x465, 0x467, 0x469,
|
|||
|
0x46B, 0x46D, 0x46F, 0x471, 0x473, 0x475, 0x477, 0x479, 0x47B,
|
|||
|
0x47D, 0x47F, 0x481, 0x48B, 0x48D, 0x48F, 0x491, 0x493, 0x495,
|
|||
|
0x497, 0x499, 0x49B, 0x49D, 0x49F, 0x4A1, 0x4A3, 0x4A5, 0x4A7,
|
|||
|
0x4A9, 0x4AB, 0x4AD, 0x4AF, 0x4B1, 0x4B3, 0x4B5, 0x4B7, 0x4B9,
|
|||
|
0x4BB, 0x4BD, 0x4BF, 0x4C2, 0x4C4, 0x4C6, 0x4C8, 0x4CA, 0x4CC,
|
|||
|
0x4CE, 0x4CF, 0x4D1, 0x4D3, 0x4D5, 0x4D7, 0x4D9, 0x4DB, 0x4DD,
|
|||
|
0x4DF, 0x4E1, 0x4E3, 0x4E5, 0x4E7, 0x4E9, 0x4EB, 0x4ED, 0x4EF,
|
|||
|
0x4F1, 0x4F3, 0x4F5, 0x4F7, 0x4F9, 0x4FB, 0x4FD, 0x4FF, 0x501,
|
|||
|
0x503, 0x505, 0x507, 0x509, 0x50B, 0x50D, 0x50F, 0x511, 0x513,
|
|||
|
0x515, 0x517, 0x519, 0x51B, 0x51D, 0x51F, 0x521, 0x523, 0x525,
|
|||
|
0x527, 0x529, 0x52B, 0x52D, 0x52F, 0x1E01, 0x1E03, 0x1E05, 0x1E07,
|
|||
|
0x1E09, 0x1E0B, 0x1E0D, 0x1E0F, 0x1E11, 0x1E13, 0x1E15, 0x1E17, 0x1E19,
|
|||
|
0x1E1B, 0x1E1D, 0x1E1F, 0x1E21, 0x1E23, 0x1E25, 0x1E27, 0x1E29, 0x1E2B,
|
|||
|
0x1E2D, 0x1E2F, 0x1E31, 0x1E33, 0x1E35, 0x1E37, 0x1E39, 0x1E3B, 0x1E3D,
|
|||
|
0x1E3F, 0x1E41, 0x1E43, 0x1E45, 0x1E47, 0x1E49, 0x1E4B, 0x1E4D, 0x1E4F,
|
|||
|
0x1E51, 0x1E53, 0x1E55, 0x1E57, 0x1E59, 0x1E5B, 0x1E5D, 0x1E5F, 0x1E61,
|
|||
|
0x1E63, 0x1E65, 0x1E67, 0x1E69, 0x1E6B, 0x1E6D, 0x1E6F, 0x1E71, 0x1E73,
|
|||
|
0x1E75, 0x1E77, 0x1E79, 0x1E7B, 0x1E7D, 0x1E7F, 0x1E81, 0x1E83, 0x1E85,
|
|||
|
0x1E87, 0x1E89, 0x1E8B, 0x1E8D, 0x1E8F, 0x1E91, 0x1E93, 0x1E9F, 0x1EA1,
|
|||
|
0x1EA3, 0x1EA5, 0x1EA7, 0x1EA9, 0x1EAB, 0x1EAD, 0x1EAF, 0x1EB1, 0x1EB3,
|
|||
|
0x1EB5, 0x1EB7, 0x1EB9, 0x1EBB, 0x1EBD, 0x1EBF, 0x1EC1, 0x1EC3, 0x1EC5,
|
|||
|
0x1EC7, 0x1EC9, 0x1ECB, 0x1ECD, 0x1ECF, 0x1ED1, 0x1ED3, 0x1ED5, 0x1ED7,
|
|||
|
0x1ED9, 0x1EDB, 0x1EDD, 0x1EDF, 0x1EE1, 0x1EE3, 0x1EE5, 0x1EE7, 0x1EE9,
|
|||
|
0x1EEB, 0x1EED, 0x1EEF, 0x1EF1, 0x1EF3, 0x1EF5, 0x1EF7, 0x1EF9, 0x1EFB,
|
|||
|
0x1EFD, 0x1FB6, 0x1FB7, 0x1FBE, 0x1FC6, 0x1FC7, 0x1FD6, 0x1FD7, 0x1FF6,
|
|||
|
0x1FF7, 0x210A, 0x210E, 0x210F, 0x2113, 0x212F, 0x2134, 0x2139, 0x213C,
|
|||
|
0x213D, 0x214E, 0x2184, 0x2C61, 0x2C65, 0x2C66, 0x2C68, 0x2C6A, 0x2C6C,
|
|||
|
0x2C71, 0x2C73, 0x2C74, 0x2C81, 0x2C83, 0x2C85, 0x2C87, 0x2C89, 0x2C8B,
|
|||
|
0x2C8D, 0x2C8F, 0x2C91, 0x2C93, 0x2C95, 0x2C97, 0x2C99, 0x2C9B, 0x2C9D,
|
|||
|
0x2C9F, 0x2CA1, 0x2CA3, 0x2CA5, 0x2CA7, 0x2CA9, 0x2CAB, 0x2CAD, 0x2CAF,
|
|||
|
0x2CB1, 0x2CB3, 0x2CB5, 0x2CB7, 0x2CB9, 0x2CBB, 0x2CBD, 0x2CBF, 0x2CC1,
|
|||
|
0x2CC3, 0x2CC5, 0x2CC7, 0x2CC9, 0x2CCB, 0x2CCD, 0x2CCF, 0x2CD1, 0x2CD3,
|
|||
|
0x2CD5, 0x2CD7, 0x2CD9, 0x2CDB, 0x2CDD, 0x2CDF, 0x2CE1, 0x2CE3, 0x2CE4,
|
|||
|
0x2CEC, 0x2CEE, 0x2CF3, 0x2D27, 0x2D2D, 0xA641, 0xA643, 0xA645, 0xA647,
|
|||
|
0xA649, 0xA64B, 0xA64D, 0xA64F, 0xA651, 0xA653, 0xA655, 0xA657, 0xA659,
|
|||
|
0xA65B, 0xA65D, 0xA65F, 0xA661, 0xA663, 0xA665, 0xA667, 0xA669, 0xA66B,
|
|||
|
0xA66D, 0xA681, 0xA683, 0xA685, 0xA687, 0xA689, 0xA68B, 0xA68D, 0xA68F,
|
|||
|
0xA691, 0xA693, 0xA695, 0xA697, 0xA699, 0xA69B, 0xA723, 0xA725, 0xA727,
|
|||
|
0xA729, 0xA72B, 0xA72D, 0xA733, 0xA735, 0xA737, 0xA739, 0xA73B, 0xA73D,
|
|||
|
0xA73F, 0xA741, 0xA743, 0xA745, 0xA747, 0xA749, 0xA74B, 0xA74D, 0xA74F,
|
|||
|
0xA751, 0xA753, 0xA755, 0xA757, 0xA759, 0xA75B, 0xA75D, 0xA75F, 0xA761,
|
|||
|
0xA763, 0xA765, 0xA767, 0xA769, 0xA76B, 0xA76D, 0xA76F, 0xA77A, 0xA77C,
|
|||
|
0xA77F, 0xA781, 0xA783, 0xA785, 0xA787, 0xA78C, 0xA78E, 0xA791, 0xA797,
|
|||
|
0xA799, 0xA79B, 0xA79D, 0xA79F, 0xA7A1, 0xA7A3, 0xA7A5, 0xA7A7, 0xA7A9,
|
|||
|
0xA7AF, 0xA7B5, 0xA7B7, 0xA7B9, 0xA7BB, 0xA7BD, 0xA7BF, 0xA7C1, 0xA7C3,
|
|||
|
0xA7C8, 0xA7CA, 0xA7D1, 0xA7D3, 0xA7D5, 0xA7D7, 0xA7D9, 0xA7F6, 0xA7FA
|
|||
|
#if CHRBITS > 16
|
|||
|
,0x105BB, 0x105BC, 0x1D4BB, 0x1D7CB
|
|||
|
#endif
|
|||
|
};
|
|||
|
|
|||
|
#define NUM_LOWER_CHAR (sizeof(lowerCharTable)/sizeof(chr))
|
|||
|
|
|||
|
/*
|
|||
|
* Unicode: uppercase characters.
|
|||
|
*/
|
|||
|
|
|||
|
static const crange upperRangeTable[] = {
|
|||
|
{0x41, 0x5A}, {0xC0, 0xD6}, {0xD8, 0xDE}, {0x189, 0x18B},
|
|||
|
{0x18E, 0x191}, {0x196, 0x198}, {0x1B1, 0x1B3}, {0x1F6, 0x1F8},
|
|||
|
{0x243, 0x246}, {0x388, 0x38A}, {0x391, 0x3A1}, {0x3A3, 0x3AB},
|
|||
|
{0x3D2, 0x3D4}, {0x3FD, 0x42F}, {0x531, 0x556}, {0x10A0, 0x10C5},
|
|||
|
{0x13A0, 0x13F5}, {0x1C90, 0x1CBA}, {0x1CBD, 0x1CBF}, {0x1F08, 0x1F0F},
|
|||
|
{0x1F18, 0x1F1D}, {0x1F28, 0x1F2F}, {0x1F38, 0x1F3F}, {0x1F48, 0x1F4D},
|
|||
|
{0x1F68, 0x1F6F}, {0x1FB8, 0x1FBB}, {0x1FC8, 0x1FCB}, {0x1FD8, 0x1FDB},
|
|||
|
{0x1FE8, 0x1FEC}, {0x1FF8, 0x1FFB}, {0x210B, 0x210D}, {0x2110, 0x2112},
|
|||
|
{0x2119, 0x211D}, {0x212A, 0x212D}, {0x2130, 0x2133}, {0x2C00, 0x2C2F},
|
|||
|
{0x2C62, 0x2C64}, {0x2C6D, 0x2C70}, {0x2C7E, 0x2C80}, {0xA7AA, 0xA7AE},
|
|||
|
{0xA7B0, 0xA7B4}, {0xA7C4, 0xA7C7}, {0xFF21, 0xFF3A}
|
|||
|
#if CHRBITS > 16
|
|||
|
,{0x10400, 0x10427}, {0x104B0, 0x104D3}, {0x10570, 0x1057A}, {0x1057C, 0x1058A},
|
|||
|
{0x1058C, 0x10592}, {0x10C80, 0x10CB2}, {0x118A0, 0x118BF}, {0x16E40, 0x16E5F},
|
|||
|
{0x1D400, 0x1D419}, {0x1D434, 0x1D44D}, {0x1D468, 0x1D481}, {0x1D4A9, 0x1D4AC},
|
|||
|
{0x1D4AE, 0x1D4B5}, {0x1D4D0, 0x1D4E9}, {0x1D507, 0x1D50A}, {0x1D50D, 0x1D514},
|
|||
|
{0x1D516, 0x1D51C}, {0x1D53B, 0x1D53E}, {0x1D540, 0x1D544}, {0x1D54A, 0x1D550},
|
|||
|
{0x1D56C, 0x1D585}, {0x1D5A0, 0x1D5B9}, {0x1D5D4, 0x1D5ED}, {0x1D608, 0x1D621},
|
|||
|
{0x1D63C, 0x1D655}, {0x1D670, 0x1D689}, {0x1D6A8, 0x1D6C0}, {0x1D6E2, 0x1D6FA},
|
|||
|
{0x1D71C, 0x1D734}, {0x1D756, 0x1D76E}, {0x1D790, 0x1D7A8}, {0x1E900, 0x1E921}
|
|||
|
#endif
|
|||
|
};
|
|||
|
|
|||
|
#define NUM_UPPER_RANGE (sizeof(upperRangeTable)/sizeof(crange))
|
|||
|
|
|||
|
static const chr upperCharTable[] = {
|
|||
|
0x100, 0x102, 0x104, 0x106, 0x108, 0x10A, 0x10C, 0x10E, 0x110,
|
|||
|
0x112, 0x114, 0x116, 0x118, 0x11A, 0x11C, 0x11E, 0x120, 0x122,
|
|||
|
0x124, 0x126, 0x128, 0x12A, 0x12C, 0x12E, 0x130, 0x132, 0x134,
|
|||
|
0x136, 0x139, 0x13B, 0x13D, 0x13F, 0x141, 0x143, 0x145, 0x147,
|
|||
|
0x14A, 0x14C, 0x14E, 0x150, 0x152, 0x154, 0x156, 0x158, 0x15A,
|
|||
|
0x15C, 0x15E, 0x160, 0x162, 0x164, 0x166, 0x168, 0x16A, 0x16C,
|
|||
|
0x16E, 0x170, 0x172, 0x174, 0x176, 0x178, 0x179, 0x17B, 0x17D,
|
|||
|
0x181, 0x182, 0x184, 0x186, 0x187, 0x193, 0x194, 0x19C, 0x19D,
|
|||
|
0x19F, 0x1A0, 0x1A2, 0x1A4, 0x1A6, 0x1A7, 0x1A9, 0x1AC, 0x1AE,
|
|||
|
0x1AF, 0x1B5, 0x1B7, 0x1B8, 0x1BC, 0x1C4, 0x1C7, 0x1CA, 0x1CD,
|
|||
|
0x1CF, 0x1D1, 0x1D3, 0x1D5, 0x1D7, 0x1D9, 0x1DB, 0x1DE, 0x1E0,
|
|||
|
0x1E2, 0x1E4, 0x1E6, 0x1E8, 0x1EA, 0x1EC, 0x1EE, 0x1F1, 0x1F4,
|
|||
|
0x1FA, 0x1FC, 0x1FE, 0x200, 0x202, 0x204, 0x206, 0x208, 0x20A,
|
|||
|
0x20C, 0x20E, 0x210, 0x212, 0x214, 0x216, 0x218, 0x21A, 0x21C,
|
|||
|
0x21E, 0x220, 0x222, 0x224, 0x226, 0x228, 0x22A, 0x22C, 0x22E,
|
|||
|
0x230, 0x232, 0x23A, 0x23B, 0x23D, 0x23E, 0x241, 0x248, 0x24A,
|
|||
|
0x24C, 0x24E, 0x370, 0x372, 0x376, 0x37F, 0x386, 0x38C, 0x38E,
|
|||
|
0x38F, 0x3CF, 0x3D8, 0x3DA, 0x3DC, 0x3DE, 0x3E0, 0x3E2, 0x3E4,
|
|||
|
0x3E6, 0x3E8, 0x3EA, 0x3EC, 0x3EE, 0x3F4, 0x3F7, 0x3F9, 0x3FA,
|
|||
|
0x460, 0x462, 0x464, 0x466, 0x468, 0x46A, 0x46C, 0x46E, 0x470,
|
|||
|
0x472, 0x474, 0x476, 0x478, 0x47A, 0x47C, 0x47E, 0x480, 0x48A,
|
|||
|
0x48C, 0x48E, 0x490, 0x492, 0x494, 0x496, 0x498, 0x49A, 0x49C,
|
|||
|
0x49E, 0x4A0, 0x4A2, 0x4A4, 0x4A6, 0x4A8, 0x4AA, 0x4AC, 0x4AE,
|
|||
|
0x4B0, 0x4B2, 0x4B4, 0x4B6, 0x4B8, 0x4BA, 0x4BC, 0x4BE, 0x4C0,
|
|||
|
0x4C1, 0x4C3, 0x4C5, 0x4C7, 0x4C9, 0x4CB, 0x4CD, 0x4D0, 0x4D2,
|
|||
|
0x4D4, 0x4D6, 0x4D8, 0x4DA, 0x4DC, 0x4DE, 0x4E0, 0x4E2, 0x4E4,
|
|||
|
0x4E6, 0x4E8, 0x4EA, 0x4EC, 0x4EE, 0x4F0, 0x4F2, 0x4F4, 0x4F6,
|
|||
|
0x4F8, 0x4FA, 0x4FC, 0x4FE, 0x500, 0x502, 0x504, 0x506, 0x508,
|
|||
|
0x50A, 0x50C, 0x50E, 0x510, 0x512, 0x514, 0x516, 0x518, 0x51A,
|
|||
|
0x51C, 0x51E, 0x520, 0x522, 0x524, 0x526, 0x528, 0x52A, 0x52C,
|
|||
|
0x52E, 0x10C7, 0x10CD, 0x1E00, 0x1E02, 0x1E04, 0x1E06, 0x1E08, 0x1E0A,
|
|||
|
0x1E0C, 0x1E0E, 0x1E10, 0x1E12, 0x1E14, 0x1E16, 0x1E18, 0x1E1A, 0x1E1C,
|
|||
|
0x1E1E, 0x1E20, 0x1E22, 0x1E24, 0x1E26, 0x1E28, 0x1E2A, 0x1E2C, 0x1E2E,
|
|||
|
0x1E30, 0x1E32, 0x1E34, 0x1E36, 0x1E38, 0x1E3A, 0x1E3C, 0x1E3E, 0x1E40,
|
|||
|
0x1E42, 0x1E44, 0x1E46, 0x1E48, 0x1E4A, 0x1E4C, 0x1E4E, 0x1E50, 0x1E52,
|
|||
|
0x1E54, 0x1E56, 0x1E58, 0x1E5A, 0x1E5C, 0x1E5E, 0x1E60, 0x1E62, 0x1E64,
|
|||
|
0x1E66, 0x1E68, 0x1E6A, 0x1E6C, 0x1E6E, 0x1E70, 0x1E72, 0x1E74, 0x1E76,
|
|||
|
0x1E78, 0x1E7A, 0x1E7C, 0x1E7E, 0x1E80, 0x1E82, 0x1E84, 0x1E86, 0x1E88,
|
|||
|
0x1E8A, 0x1E8C, 0x1E8E, 0x1E90, 0x1E92, 0x1E94, 0x1E9E, 0x1EA0, 0x1EA2,
|
|||
|
0x1EA4, 0x1EA6, 0x1EA8, 0x1EAA, 0x1EAC, 0x1EAE, 0x1EB0, 0x1EB2, 0x1EB4,
|
|||
|
0x1EB6, 0x1EB8, 0x1EBA, 0x1EBC, 0x1EBE, 0x1EC0, 0x1EC2, 0x1EC4, 0x1EC6,
|
|||
|
0x1EC8, 0x1ECA, 0x1ECC, 0x1ECE, 0x1ED0, 0x1ED2, 0x1ED4, 0x1ED6, 0x1ED8,
|
|||
|
0x1EDA, 0x1EDC, 0x1EDE, 0x1EE0, 0x1EE2, 0x1EE4, 0x1EE6, 0x1EE8, 0x1EEA,
|
|||
|
0x1EEC, 0x1EEE, 0x1EF0, 0x1EF2, 0x1EF4, 0x1EF6, 0x1EF8, 0x1EFA, 0x1EFC,
|
|||
|
0x1EFE, 0x1F59, 0x1F5B, 0x1F5D, 0x1F5F, 0x2102, 0x2107, 0x2115, 0x2124,
|
|||
|
0x2126, 0x2128, 0x213E, 0x213F, 0x2145, 0x2183, 0x2C60, 0x2C67, 0x2C69,
|
|||
|
0x2C6B, 0x2C72, 0x2C75, 0x2C82, 0x2C84, 0x2C86, 0x2C88, 0x2C8A, 0x2C8C,
|
|||
|
0x2C8E, 0x2C90, 0x2C92, 0x2C94, 0x2C96, 0x2C98, 0x2C9A, 0x2C9C, 0x2C9E,
|
|||
|
0x2CA0, 0x2CA2, 0x2CA4, 0x2CA6, 0x2CA8, 0x2CAA, 0x2CAC, 0x2CAE, 0x2CB0,
|
|||
|
0x2CB2, 0x2CB4, 0x2CB6, 0x2CB8, 0x2CBA, 0x2CBC, 0x2CBE, 0x2CC0, 0x2CC2,
|
|||
|
0x2CC4, 0x2CC6, 0x2CC8, 0x2CCA, 0x2CCC, 0x2CCE, 0x2CD0, 0x2CD2, 0x2CD4,
|
|||
|
0x2CD6, 0x2CD8, 0x2CDA, 0x2CDC, 0x2CDE, 0x2CE0, 0x2CE2, 0x2CEB, 0x2CED,
|
|||
|
0x2CF2, 0xA640, 0xA642, 0xA644, 0xA646, 0xA648, 0xA64A, 0xA64C, 0xA64E,
|
|||
|
0xA650, 0xA652, 0xA654, 0xA656, 0xA658, 0xA65A, 0xA65C, 0xA65E, 0xA660,
|
|||
|
0xA662, 0xA664, 0xA666, 0xA668, 0xA66A, 0xA66C, 0xA680, 0xA682, 0xA684,
|
|||
|
0xA686, 0xA688, 0xA68A, 0xA68C, 0xA68E, 0xA690, 0xA692, 0xA694, 0xA696,
|
|||
|
0xA698, 0xA69A, 0xA722, 0xA724, 0xA726, 0xA728, 0xA72A, 0xA72C, 0xA72E,
|
|||
|
0xA732, 0xA734, 0xA736, 0xA738, 0xA73A, 0xA73C, 0xA73E, 0xA740, 0xA742,
|
|||
|
0xA744, 0xA746, 0xA748, 0xA74A, 0xA74C, 0xA74E, 0xA750, 0xA752, 0xA754,
|
|||
|
0xA756, 0xA758, 0xA75A, 0xA75C, 0xA75E, 0xA760, 0xA762, 0xA764, 0xA766,
|
|||
|
0xA768, 0xA76A, 0xA76C, 0xA76E, 0xA779, 0xA77B, 0xA77D, 0xA77E, 0xA780,
|
|||
|
0xA782, 0xA784, 0xA786, 0xA78B, 0xA78D, 0xA790, 0xA792, 0xA796, 0xA798,
|
|||
|
0xA79A, 0xA79C, 0xA79E, 0xA7A0, 0xA7A2, 0xA7A4, 0xA7A6, 0xA7A8, 0xA7B6,
|
|||
|
0xA7B8, 0xA7BA, 0xA7BC, 0xA7BE, 0xA7C0, 0xA7C2, 0xA7C9, 0xA7D0, 0xA7D6,
|
|||
|
0xA7D8, 0xA7F5
|
|||
|
#if CHRBITS > 16
|
|||
|
,0x10594, 0x10595, 0x1D49C, 0x1D49E, 0x1D49F, 0x1D4A2, 0x1D4A5, 0x1D4A6, 0x1D504,
|
|||
|
0x1D505, 0x1D538, 0x1D539, 0x1D546, 0x1D7CA
|
|||
|
#endif
|
|||
|
};
|
|||
|
|
|||
|
#define NUM_UPPER_CHAR (sizeof(upperCharTable)/sizeof(chr))
|
|||
|
|
|||
|
/*
|
|||
|
* Unicode: unicode print characters excluding space.
|
|||
|
*/
|
|||
|
|
|||
|
static const crange graphRangeTable[] = {
|
|||
|
{0x21, 0x7E}, {0xA1, 0xAC}, {0xAE, 0x377}, {0x37A, 0x37F},
|
|||
|
{0x384, 0x38A}, {0x38E, 0x3A1}, {0x3A3, 0x52F}, {0x531, 0x556},
|
|||
|
{0x559, 0x58A}, {0x58D, 0x58F}, {0x591, 0x5C7}, {0x5D0, 0x5EA},
|
|||
|
{0x5EF, 0x5F4}, {0x606, 0x61B}, {0x61D, 0x6DC}, {0x6DE, 0x70D},
|
|||
|
{0x710, 0x74A}, {0x74D, 0x7B1}, {0x7C0, 0x7FA}, {0x7FD, 0x82D},
|
|||
|
{0x830, 0x83E}, {0x840, 0x85B}, {0x860, 0x86A}, {0x870, 0x88E},
|
|||
|
{0x898, 0x8E1}, {0x8E3, 0x983}, {0x985, 0x98C}, {0x993, 0x9A8},
|
|||
|
{0x9AA, 0x9B0}, {0x9B6, 0x9B9}, {0x9BC, 0x9C4}, {0x9CB, 0x9CE},
|
|||
|
{0x9DF, 0x9E3}, {0x9E6, 0x9FE}, {0xA01, 0xA03}, {0xA05, 0xA0A},
|
|||
|
{0xA13, 0xA28}, {0xA2A, 0xA30}, {0xA3E, 0xA42}, {0xA4B, 0xA4D},
|
|||
|
{0xA59, 0xA5C}, {0xA66, 0xA76}, {0xA81, 0xA83}, {0xA85, 0xA8D},
|
|||
|
{0xA8F, 0xA91}, {0xA93, 0xAA8}, {0xAAA, 0xAB0}, {0xAB5, 0xAB9},
|
|||
|
{0xABC, 0xAC5}, {0xAC7, 0xAC9}, {0xACB, 0xACD}, {0xAE0, 0xAE3},
|
|||
|
{0xAE6, 0xAF1}, {0xAF9, 0xAFF}, {0xB01, 0xB03}, {0xB05, 0xB0C},
|
|||
|
{0xB13, 0xB28}, {0xB2A, 0xB30}, {0xB35, 0xB39}, {0xB3C, 0xB44},
|
|||
|
{0xB4B, 0xB4D}, {0xB55, 0xB57}, {0xB5F, 0xB63}, {0xB66, 0xB77},
|
|||
|
{0xB85, 0xB8A}, {0xB8E, 0xB90}, {0xB92, 0xB95}, {0xBA8, 0xBAA},
|
|||
|
{0xBAE, 0xBB9}, {0xBBE, 0xBC2}, {0xBC6, 0xBC8}, {0xBCA, 0xBCD},
|
|||
|
{0xBE6, 0xBFA}, {0xC00, 0xC0C}, {0xC0E, 0xC10}, {0xC12, 0xC28},
|
|||
|
{0xC2A, 0xC39}, {0xC3C, 0xC44}, {0xC46, 0xC48}, {0xC4A, 0xC4D},
|
|||
|
{0xC58, 0xC5A}, {0xC60, 0xC63}, {0xC66, 0xC6F}, {0xC77, 0xC8C},
|
|||
|
{0xC8E, 0xC90}, {0xC92, 0xCA8}, {0xCAA, 0xCB3}, {0xCB5, 0xCB9},
|
|||
|
{0xCBC, 0xCC4}, {0xCC6, 0xCC8}, {0xCCA, 0xCCD}, {0xCE0, 0xCE3},
|
|||
|
{0xCE6, 0xCEF}, {0xD00, 0xD0C}, {0xD0E, 0xD10}, {0xD12, 0xD44},
|
|||
|
{0xD46, 0xD48}, {0xD4A, 0xD4F}, {0xD54, 0xD63}, {0xD66, 0xD7F},
|
|||
|
{0xD81, 0xD83}, {0xD85, 0xD96}, {0xD9A, 0xDB1}, {0xDB3, 0xDBB},
|
|||
|
{0xDC0, 0xDC6}, {0xDCF, 0xDD4}, {0xDD8, 0xDDF}, {0xDE6, 0xDEF},
|
|||
|
{0xDF2, 0xDF4}, {0xE01, 0xE3A}, {0xE3F, 0xE5B}, {0xE86, 0xE8A},
|
|||
|
{0xE8C, 0xEA3}, {0xEA7, 0xEBD}, {0xEC0, 0xEC4}, {0xEC8, 0xECD},
|
|||
|
{0xED0, 0xED9}, {0xEDC, 0xEDF}, {0xF00, 0xF47}, {0xF49, 0xF6C},
|
|||
|
{0xF71, 0xF97}, {0xF99, 0xFBC}, {0xFBE, 0xFCC}, {0xFCE, 0xFDA},
|
|||
|
{0x1000, 0x10C5}, {0x10D0, 0x1248}, {0x124A, 0x124D}, {0x1250, 0x1256},
|
|||
|
{0x125A, 0x125D}, {0x1260, 0x1288}, {0x128A, 0x128D}, {0x1290, 0x12B0},
|
|||
|
{0x12B2, 0x12B5}, {0x12B8, 0x12BE}, {0x12C2, 0x12C5}, {0x12C8, 0x12D6},
|
|||
|
{0x12D8, 0x1310}, {0x1312, 0x1315}, {0x1318, 0x135A}, {0x135D, 0x137C},
|
|||
|
{0x1380, 0x1399}, {0x13A0, 0x13F5}, {0x13F8, 0x13FD}, {0x1400, 0x167F},
|
|||
|
{0x1681, 0x169C}, {0x16A0, 0x16F8}, {0x1700, 0x1715}, {0x171F, 0x1736},
|
|||
|
{0x1740, 0x1753}, {0x1760, 0x176C}, {0x176E, 0x1770}, {0x1780, 0x17DD},
|
|||
|
{0x17E0, 0x17E9}, {0x17F0, 0x17F9}, {0x1800, 0x180D}, {0x180F, 0x1819},
|
|||
|
{0x1820, 0x1878}, {0x1880, 0x18AA}, {0x18B0, 0x18F5}, {0x1900, 0x191E},
|
|||
|
{0x1920, 0x192B}, {0x1930, 0x193B}, {0x1944, 0x196D}, {0x1970, 0x1974},
|
|||
|
{0x1980, 0x19AB}, {0x19B0, 0x19C9}, {0x19D0, 0x19DA}, {0x19DE, 0x1A1B},
|
|||
|
{0x1A1E, 0x1A5E}, {0x1A60, 0x1A7C}, {0x1A7F, 0x1A89}, {0x1A90, 0x1A99},
|
|||
|
{0x1AA0, 0x1AAD}, {0x1AB0, 0x1ACE}, {0x1B00, 0x1B4C}, {0x1B50, 0x1B7E},
|
|||
|
{0x1B80, 0x1BF3}, {0x1BFC, 0x1C37}, {0x1C3B, 0x1C49}, {0x1C4D, 0x1C88},
|
|||
|
{0x1C90, 0x1CBA}, {0x1CBD, 0x1CC7}, {0x1CD0, 0x1CFA}, {0x1D00, 0x1F15},
|
|||
|
{0x1F18, 0x1F1D}, {0x1F20, 0x1F45}, {0x1F48, 0x1F4D}, {0x1F50, 0x1F57},
|
|||
|
{0x1F5F, 0x1F7D}, {0x1F80, 0x1FB4}, {0x1FB6, 0x1FC4}, {0x1FC6, 0x1FD3},
|
|||
|
{0x1FD6, 0x1FDB}, {0x1FDD, 0x1FEF}, {0x1FF2, 0x1FF4}, {0x1FF6, 0x1FFE},
|
|||
|
{0x2010, 0x2027}, {0x2030, 0x205E}, {0x2074, 0x208E}, {0x2090, 0x209C},
|
|||
|
{0x20A0, 0x20C0}, {0x20D0, 0x20F0}, {0x2100, 0x218B}, {0x2190, 0x2426},
|
|||
|
{0x2440, 0x244A}, {0x2460, 0x2B73}, {0x2B76, 0x2B95}, {0x2B97, 0x2CF3},
|
|||
|
{0x2CF9, 0x2D25}, {0x2D30, 0x2D67}, {0x2D7F, 0x2D96}, {0x2DA0, 0x2DA6},
|
|||
|
{0x2DA8, 0x2DAE}, {0x2DB0, 0x2DB6}, {0x2DB8, 0x2DBE}, {0x2DC0, 0x2DC6},
|
|||
|
{0x2DC8, 0x2DCE}, {0x2DD0, 0x2DD6}, {0x2DD8, 0x2DDE}, {0x2DE0, 0x2E5D},
|
|||
|
{0x2E80, 0x2E99}, {0x2E9B, 0x2EF3}, {0x2F00, 0x2FD5}, {0x2FF0, 0x2FFB},
|
|||
|
{0x3001, 0x303F}, {0x3041, 0x3096}, {0x3099, 0x30FF}, {0x3105, 0x312F},
|
|||
|
{0x3131, 0x318E}, {0x3190, 0x31E3}, {0x31F0, 0x321E}, {0x3220, 0xA48C},
|
|||
|
{0xA490, 0xA4C6}, {0xA4D0, 0xA62B}, {0xA640, 0xA6F7}, {0xA700, 0xA7CA},
|
|||
|
{0xA7D5, 0xA7D9}, {0xA7F2, 0xA82C}, {0xA830, 0xA839}, {0xA840, 0xA877},
|
|||
|
{0xA880, 0xA8C5}, {0xA8CE, 0xA8D9}, {0xA8E0, 0xA953}, {0xA95F, 0xA97C},
|
|||
|
{0xA980, 0xA9CD}, {0xA9CF, 0xA9D9}, {0xA9DE, 0xA9FE}, {0xAA00, 0xAA36},
|
|||
|
{0xAA40, 0xAA4D}, {0xAA50, 0xAA59}, {0xAA5C, 0xAAC2}, {0xAADB, 0xAAF6},
|
|||
|
{0xAB01, 0xAB06}, {0xAB09, 0xAB0E}, {0xAB11, 0xAB16}, {0xAB20, 0xAB26},
|
|||
|
{0xAB28, 0xAB2E}, {0xAB30, 0xAB6B}, {0xAB70, 0xABED}, {0xABF0, 0xABF9},
|
|||
|
{0xAC00, 0xD7A3}, {0xD7B0, 0xD7C6}, {0xD7CB, 0xD7FB}, {0xF900, 0xFA6D},
|
|||
|
{0xFA70, 0xFAD9}, {0xFB00, 0xFB06}, {0xFB13, 0xFB17}, {0xFB1D, 0xFB36},
|
|||
|
{0xFB38, 0xFB3C}, {0xFB46, 0xFBC2}, {0xFBD3, 0xFD8F}, {0xFD92, 0xFDC7},
|
|||
|
{0xFDF0, 0xFE19}, {0xFE20, 0xFE52}, {0xFE54, 0xFE66}, {0xFE68, 0xFE6B},
|
|||
|
{0xFE70, 0xFE74}, {0xFE76, 0xFEFC}, {0xFF01, 0xFFBE}, {0xFFC2, 0xFFC7},
|
|||
|
{0xFFCA, 0xFFCF}, {0xFFD2, 0xFFD7}, {0xFFDA, 0xFFDC}, {0xFFE0, 0xFFE6},
|
|||
|
{0xFFE8, 0xFFEE}
|
|||
|
#if CHRBITS > 16
|
|||
|
,{0x10000, 0x1000B}, {0x1000D, 0x10026}, {0x10028, 0x1003A}, {0x1003F, 0x1004D},
|
|||
|
{0x10050, 0x1005D}, {0x10080, 0x100FA}, {0x10100, 0x10102}, {0x10107, 0x10133},
|
|||
|
{0x10137, 0x1018E}, {0x10190, 0x1019C}, {0x101D0, 0x101FD}, {0x10280, 0x1029C},
|
|||
|
{0x102A0, 0x102D0}, {0x102E0, 0x102FB}, {0x10300, 0x10323}, {0x1032D, 0x1034A},
|
|||
|
{0x10350, 0x1037A}, {0x10380, 0x1039D}, {0x1039F, 0x103C3}, {0x103C8, 0x103D5},
|
|||
|
{0x10400, 0x1049D}, {0x104A0, 0x104A9}, {0x104B0, 0x104D3}, {0x104D8, 0x104FB},
|
|||
|
{0x10500, 0x10527}, {0x10530, 0x10563}, {0x1056F, 0x1057A}, {0x1057C, 0x1058A},
|
|||
|
{0x1058C, 0x10592}, {0x10597, 0x105A1}, {0x105A3, 0x105B1}, {0x105B3, 0x105B9},
|
|||
|
{0x10600, 0x10736}, {0x10740, 0x10755}, {0x10760, 0x10767}, {0x10780, 0x10785},
|
|||
|
{0x10787, 0x107B0}, {0x107B2, 0x107BA}, {0x10800, 0x10805}, {0x1080A, 0x10835},
|
|||
|
{0x1083F, 0x10855}, {0x10857, 0x1089E}, {0x108A7, 0x108AF}, {0x108E0, 0x108F2},
|
|||
|
{0x108FB, 0x1091B}, {0x1091F, 0x10939}, {0x10980, 0x109B7}, {0x109BC, 0x109CF},
|
|||
|
{0x109D2, 0x10A03}, {0x10A0C, 0x10A13}, {0x10A15, 0x10A17}, {0x10A19, 0x10A35},
|
|||
|
{0x10A38, 0x10A3A}, {0x10A3F, 0x10A48}, {0x10A50, 0x10A58}, {0x10A60, 0x10A9F},
|
|||
|
{0x10AC0, 0x10AE6}, {0x10AEB, 0x10AF6}, {0x10B00, 0x10B35}, {0x10B39, 0x10B55},
|
|||
|
{0x10B58, 0x10B72}, {0x10B78, 0x10B91}, {0x10B99, 0x10B9C}, {0x10BA9, 0x10BAF},
|
|||
|
{0x10C00, 0x10C48}, {0x10C80, 0x10CB2}, {0x10CC0, 0x10CF2}, {0x10CFA, 0x10D27},
|
|||
|
{0x10D30, 0x10D39}, {0x10E60, 0x10E7E}, {0x10E80, 0x10EA9}, {0x10EAB, 0x10EAD},
|
|||
|
{0x10F00, 0x10F27}, {0x10F30, 0x10F59}, {0x10F70, 0x10F89}, {0x10FB0, 0x10FCB},
|
|||
|
{0x10FE0, 0x10FF6}, {0x11000, 0x1104D}, {0x11052, 0x11075}, {0x1107F, 0x110BC},
|
|||
|
{0x110BE, 0x110C2}, {0x110D0, 0x110E8}, {0x110F0, 0x110F9}, {0x11100, 0x11134},
|
|||
|
{0x11136, 0x11147}, {0x11150, 0x11176}, {0x11180, 0x111DF}, {0x111E1, 0x111F4},
|
|||
|
{0x11200, 0x11211}, {0x11213, 0x1123E}, {0x11280, 0x11286}, {0x1128A, 0x1128D},
|
|||
|
{0x1128F, 0x1129D}, {0x1129F, 0x112A9}, {0x112B0, 0x112EA}, {0x112F0, 0x112F9},
|
|||
|
{0x11300, 0x11303}, {0x11305, 0x1130C}, {0x11313, 0x11328}, {0x1132A, 0x11330},
|
|||
|
{0x11335, 0x11339}, {0x1133B, 0x11344}, {0x1134B, 0x1134D}, {0x1135D, 0x11363},
|
|||
|
{0x11366, 0x1136C}, {0x11370, 0x11374}, {0x11400, 0x1145B}, {0x1145D, 0x11461},
|
|||
|
{0x11480, 0x114C7}, {0x114D0, 0x114D9}, {0x11580, 0x115B5}, {0x115B8, 0x115DD},
|
|||
|
{0x11600, 0x11644}, {0x11650, 0x11659}, {0x11660, 0x1166C}, {0x11680, 0x116B9},
|
|||
|
{0x116C0, 0x116C9}, {0x11700, 0x1171A}, {0x1171D, 0x1172B}, {0x11730, 0x11746},
|
|||
|
{0x11800, 0x1183B}, {0x118A0, 0x118F2}, {0x118FF, 0x11906}, {0x1190C, 0x11913},
|
|||
|
{0x11918, 0x11935}, {0x1193B, 0x11946}, {0x11950, 0x11959}, {0x119A0, 0x119A7},
|
|||
|
{0x119AA, 0x119D7}, {0x119DA, 0x119E4}, {0x11A00, 0x11A47}, {0x11A50, 0x11AA2},
|
|||
|
{0x11AB0, 0x11AF8}, {0x11C00, 0x11C08}, {0x11C0A, 0x11C36}, {0x11C38, 0x11C45},
|
|||
|
{0x11C50, 0x11C6C}, {0x11C70, 0x11C8F}, {0x11C92, 0x11CA7}, {0x11CA9, 0x11CB6},
|
|||
|
{0x11D00, 0x11D06}, {0x11D0B, 0x11D36}, {0x11D3F, 0x11D47}, {0x11D50, 0x11D59},
|
|||
|
{0x11D60, 0x11D65}, {0x11D6A, 0x11D8E}, {0x11D93, 0x11D98}, {0x11DA0, 0x11DA9},
|
|||
|
{0x11EE0, 0x11EF8}, {0x11FC0, 0x11FF1}, {0x11FFF, 0x12399}, {0x12400, 0x1246E},
|
|||
|
{0x12470, 0x12474}, {0x12480, 0x12543}, {0x12F90, 0x12FF2}, {0x13000, 0x1342E},
|
|||
|
{0x14400, 0x14646}, {0x16800, 0x16A38}, {0x16A40, 0x16A5E}, {0x16A60, 0x16A69},
|
|||
|
{0x16A6E, 0x16ABE}, {0x16AC0, 0x16AC9}, {0x16AD0, 0x16AED}, {0x16AF0, 0x16AF5},
|
|||
|
{0x16B00, 0x16B45}, {0x16B50, 0x16B59}, {0x16B5B, 0x16B61}, {0x16B63, 0x16B77},
|
|||
|
{0x16B7D, 0x16B8F}, {0x16E40, 0x16E9A}, {0x16F00, 0x16F4A}, {0x16F4F, 0x16F87},
|
|||
|
{0x16F8F, 0x16F9F}, {0x16FE0, 0x16FE4}, {0x17000, 0x187F7}, {0x18800, 0x18CD5},
|
|||
|
{0x18D00, 0x18D08}, {0x1AFF0, 0x1AFF3}, {0x1AFF5, 0x1AFFB}, {0x1B000, 0x1B122},
|
|||
|
{0x1B150, 0x1B152}, {0x1B164, 0x1B167}, {0x1B170, 0x1B2FB}, {0x1BC00, 0x1BC6A},
|
|||
|
{0x1BC70, 0x1BC7C}, {0x1BC80, 0x1BC88}, {0x1BC90, 0x1BC99}, {0x1BC9C, 0x1BC9F},
|
|||
|
{0x1CF00, 0x1CF2D}, {0x1CF30, 0x1CF46}, {0x1CF50, 0x1CFC3}, {0x1D000, 0x1D0F5},
|
|||
|
{0x1D100, 0x1D126}, {0x1D129, 0x1D172}, {0x1D17B, 0x1D1EA}, {0x1D200, 0x1D245},
|
|||
|
{0x1D2E0, 0x1D2F3}, {0x1D300, 0x1D356}, {0x1D360, 0x1D378}, {0x1D400, 0x1D454},
|
|||
|
{0x1D456, 0x1D49C}, {0x1D4A9, 0x1D4AC}, {0x1D4AE, 0x1D4B9}, {0x1D4BD, 0x1D4C3},
|
|||
|
{0x1D4C5, 0x1D505}, {0x1D507, 0x1D50A}, {0x1D50D, 0x1D514}, {0x1D516, 0x1D51C},
|
|||
|
{0x1D51E, 0x1D539}, {0x1D53B, 0x1D53E}, {0x1D540, 0x1D544}, {0x1D54A, 0x1D550},
|
|||
|
{0x1D552, 0x1D6A5}, {0x1D6A8, 0x1D7CB}, {0x1D7CE, 0x1DA8B}, {0x1DA9B, 0x1DA9F},
|
|||
|
{0x1DAA1, 0x1DAAF}, {0x1DF00, 0x1DF1E}, {0x1E000, 0x1E006}, {0x1E008, 0x1E018},
|
|||
|
{0x1E01B, 0x1E021}, {0x1E026, 0x1E02A}, {0x1E100, 0x1E12C}, {0x1E130, 0x1E13D},
|
|||
|
{0x1E140, 0x1E149}, {0x1E290, 0x1E2AE}, {0x1E2C0, 0x1E2F9}, {0x1E7E0, 0x1E7E6},
|
|||
|
{0x1E7E8, 0x1E7EB}, {0x1E7F0, 0x1E7FE}, {0x1E800, 0x1E8C4}, {0x1E8C7, 0x1E8D6},
|
|||
|
{0x1E900, 0x1E94B}, {0x1E950, 0x1E959}, {0x1EC71, 0x1ECB4}, {0x1ED01, 0x1ED3D},
|
|||
|
{0x1EE00, 0x1EE03}, {0x1EE05, 0x1EE1F}, {0x1EE29, 0x1EE32}, {0x1EE34, 0x1EE37},
|
|||
|
{0x1EE4D, 0x1EE4F}, {0x1EE67, 0x1EE6A}, {0x1EE6C, 0x1EE72}, {0x1EE74, 0x1EE77},
|
|||
|
{0x1EE79, 0x1EE7C}, {0x1EE80, 0x1EE89}, {0x1EE8B, 0x1EE9B}, {0x1EEA1, 0x1EEA3},
|
|||
|
{0x1EEA5, 0x1EEA9}, {0x1EEAB, 0x1EEBB}, {0x1F000, 0x1F02B}, {0x1F030, 0x1F093},
|
|||
|
{0x1F0A0, 0x1F0AE}, {0x1F0B1, 0x1F0BF}, {0x1F0C1, 0x1F0CF}, {0x1F0D1, 0x1F0F5},
|
|||
|
{0x1F100, 0x1F1AD}, {0x1F1E6, 0x1F202}, {0x1F210, 0x1F23B}, {0x1F240, 0x1F248},
|
|||
|
{0x1F260, 0x1F265}, {0x1F300, 0x1F6D7}, {0x1F6DD, 0x1F6EC}, {0x1F6F0, 0x1F6FC},
|
|||
|
{0x1F700, 0x1F773}, {0x1F780, 0x1F7D8}, {0x1F7E0, 0x1F7EB}, {0x1F800, 0x1F80B},
|
|||
|
{0x1F810, 0x1F847}, {0x1F850, 0x1F859}, {0x1F860, 0x1F887}, {0x1F890, 0x1F8AD},
|
|||
|
{0x1F900, 0x1FA53}, {0x1FA60, 0x1FA6D}, {0x1FA70, 0x1FA74}, {0x1FA78, 0x1FA7C},
|
|||
|
{0x1FA80, 0x1FA86}, {0x1FA90, 0x1FAAC}, {0x1FAB0, 0x1FABA}, {0x1FAC0, 0x1FAC5},
|
|||
|
{0x1FAD0, 0x1FAD9}, {0x1FAE0, 0x1FAE7}, {0x1FAF0, 0x1FAF6}, {0x1FB00, 0x1FB92},
|
|||
|
{0x1FB94, 0x1FBCA}, {0x1FBF0, 0x1FBF9}, {0x20000, 0x2A6DF}, {0x2A700, 0x2B738},
|
|||
|
{0x2B740, 0x2B81D}, {0x2B820, 0x2CEA1}, {0x2CEB0, 0x2EBE0}, {0x2F800, 0x2FA1D},
|
|||
|
{0x30000, 0x3134A}, {0xE0100, 0xE01EF}
|
|||
|
#endif
|
|||
|
};
|
|||
|
|
|||
|
#define NUM_GRAPH_RANGE (sizeof(graphRangeTable)/sizeof(crange))
|
|||
|
|
|||
|
static const chr graphCharTable[] = {
|
|||
|
0x38C, 0x85E, 0x98F, 0x990, 0x9B2, 0x9C7, 0x9C8, 0x9D7, 0x9DC,
|
|||
|
0x9DD, 0xA0F, 0xA10, 0xA32, 0xA33, 0xA35, 0xA36, 0xA38, 0xA39,
|
|||
|
0xA3C, 0xA47, 0xA48, 0xA51, 0xA5E, 0xAB2, 0xAB3, 0xAD0, 0xB0F,
|
|||
|
0xB10, 0xB32, 0xB33, 0xB47, 0xB48, 0xB5C, 0xB5D, 0xB82, 0xB83,
|
|||
|
0xB99, 0xB9A, 0xB9C, 0xB9E, 0xB9F, 0xBA3, 0xBA4, 0xBD0, 0xBD7,
|
|||
|
0xC55, 0xC56, 0xC5D, 0xCD5, 0xCD6, 0xCDD, 0xCDE, 0xCF1, 0xCF2,
|
|||
|
0xDBD, 0xDCA, 0xDD6, 0xE81, 0xE82, 0xE84, 0xEA5, 0xEC6, 0x10C7,
|
|||
|
0x10CD, 0x1258, 0x12C0, 0x1772, 0x1773, 0x1940, 0x1F59, 0x1F5B, 0x1F5D,
|
|||
|
0x2070, 0x2071, 0x2D27, 0x2D2D, 0x2D6F, 0x2D70, 0xA7D0, 0xA7D1, 0xA7D3,
|
|||
|
0xFB3E, 0xFB40, 0xFB41, 0xFB43, 0xFB44, 0xFDCF, 0xFFFC, 0xFFFD
|
|||
|
#if CHRBITS > 16
|
|||
|
,0x1003C, 0x1003D, 0x101A0, 0x10594, 0x10595, 0x105BB, 0x105BC, 0x10808, 0x10837,
|
|||
|
0x10838, 0x1083C, 0x108F4, 0x108F5, 0x1093F, 0x10A05, 0x10A06, 0x10EB0, 0x10EB1,
|
|||
|
0x11288, 0x1130F, 0x11310, 0x11332, 0x11333, 0x11347, 0x11348, 0x11350, 0x11357,
|
|||
|
0x11909, 0x11915, 0x11916, 0x11937, 0x11938, 0x11D08, 0x11D09, 0x11D3A, 0x11D3C,
|
|||
|
0x11D3D, 0x11D67, 0x11D68, 0x11D90, 0x11D91, 0x11FB0, 0x16FF0, 0x16FF1, 0x1AFFD,
|
|||
|
0x1AFFE, 0x1D49E, 0x1D49F, 0x1D4A2, 0x1D4A5, 0x1D4A6, 0x1D4BB, 0x1D546, 0x1E023,
|
|||
|
0x1E024, 0x1E14E, 0x1E14F, 0x1E2FF, 0x1E7ED, 0x1E7EE, 0x1E95E, 0x1E95F, 0x1EE21,
|
|||
|
0x1EE22, 0x1EE24, 0x1EE27, 0x1EE39, 0x1EE3B, 0x1EE42, 0x1EE47, 0x1EE49, 0x1EE4B,
|
|||
|
0x1EE51, 0x1EE52, 0x1EE54, 0x1EE57, 0x1EE59, 0x1EE5B, 0x1EE5D, 0x1EE5F, 0x1EE61,
|
|||
|
0x1EE62, 0x1EE64, 0x1EE7E, 0x1EEF0, 0x1EEF1, 0x1F250, 0x1F251, 0x1F7F0, 0x1F8B0,
|
|||
|
0x1F8B1
|
|||
|
#endif
|
|||
|
};
|
|||
|
|
|||
|
#define NUM_GRAPH_CHAR (sizeof(graphCharTable)/sizeof(chr))
|
|||
|
|
|||
|
/*
|
|||
|
* End of auto-generated Unicode character ranges declarations.
|
|||
|
*/
|
|||
|
|
|||
|
#define CH NOCELT
|
|||
|
|
|||
|
/*
|
|||
|
- element - map collating-element name to celt
|
|||
|
^ static celt element(struct vars *, const chr *, const chr *);
|
|||
|
*/
|
|||
|
static celt
|
|||
|
element(
|
|||
|
struct vars *v, /* context */
|
|||
|
const chr *startp, /* points to start of name */
|
|||
|
const chr *endp) /* points just past end of name */
|
|||
|
{
|
|||
|
const struct cname *cn;
|
|||
|
size_t len;
|
|||
|
Tcl_DString ds;
|
|||
|
const char *np;
|
|||
|
|
|||
|
/*
|
|||
|
* Generic: one-chr names stand for themselves.
|
|||
|
*/
|
|||
|
|
|||
|
assert(startp < endp);
|
|||
|
len = endp - startp;
|
|||
|
if (len == 1) {
|
|||
|
return *startp;
|
|||
|
}
|
|||
|
|
|||
|
NOTE(REG_ULOCALE);
|
|||
|
|
|||
|
/*
|
|||
|
* Search table.
|
|||
|
*/
|
|||
|
|
|||
|
Tcl_DStringInit(&ds);
|
|||
|
np = Tcl_UniCharToUtfDString(startp, (int)len, &ds);
|
|||
|
for (cn=cnames; cn->name!=NULL; cn++) {
|
|||
|
if (strlen(cn->name)==len && strncmp(cn->name, np, len)==0) {
|
|||
|
break; /* NOTE BREAK OUT */
|
|||
|
}
|
|||
|
}
|
|||
|
Tcl_DStringFree(&ds);
|
|||
|
if (cn->name != NULL) {
|
|||
|
return CHR(cn->code);
|
|||
|
}
|
|||
|
|
|||
|
/*
|
|||
|
* Couldn't find it.
|
|||
|
*/
|
|||
|
|
|||
|
ERR(REG_ECOLLATE);
|
|||
|
return 0;
|
|||
|
}
|
|||
|
|
|||
|
/*
|
|||
|
- range - supply cvec for a range, including legality check
|
|||
|
^ static struct cvec *range(struct vars *, celt, celt, int);
|
|||
|
*/
|
|||
|
static struct cvec *
|
|||
|
range(
|
|||
|
struct vars *v, /* context */
|
|||
|
celt a, /* range start */
|
|||
|
celt b, /* range end, might equal a */
|
|||
|
int cases) /* case-independent? */
|
|||
|
{
|
|||
|
int nchrs;
|
|||
|
struct cvec *cv;
|
|||
|
celt c, lc, uc, tc;
|
|||
|
|
|||
|
if (a != b && !before(a, b)) {
|
|||
|
ERR(REG_ERANGE);
|
|||
|
return NULL;
|
|||
|
}
|
|||
|
|
|||
|
if (!cases) { /* easy version */
|
|||
|
cv = getcvec(v, 0, 1);
|
|||
|
NOERRN();
|
|||
|
addrange(cv, a, b);
|
|||
|
return cv;
|
|||
|
}
|
|||
|
|
|||
|
/*
|
|||
|
* When case-independent, it's hard to decide when cvec ranges are usable,
|
|||
|
* so for now at least, we won't try. We allocate enough space for two
|
|||
|
* case variants plus a little extra for the two title case variants.
|
|||
|
*/
|
|||
|
|
|||
|
nchrs = (b - a + 1)*2 + 4;
|
|||
|
|
|||
|
cv = getcvec(v, nchrs, 0);
|
|||
|
NOERRN();
|
|||
|
|
|||
|
for (c=a; c<=b; c++) {
|
|||
|
addchr(cv, c);
|
|||
|
lc = Tcl_UniCharToLower((chr)c);
|
|||
|
uc = Tcl_UniCharToUpper((chr)c);
|
|||
|
tc = Tcl_UniCharToTitle((chr)c);
|
|||
|
if (c != lc) {
|
|||
|
addchr(cv, lc);
|
|||
|
}
|
|||
|
if (c != uc) {
|
|||
|
addchr(cv, uc);
|
|||
|
}
|
|||
|
if (c != tc && tc != uc) {
|
|||
|
addchr(cv, tc);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return cv;
|
|||
|
}
|
|||
|
|
|||
|
/*
|
|||
|
- before - is celt x before celt y, for purposes of range legality?
|
|||
|
^ static int before(celt, celt);
|
|||
|
*/
|
|||
|
static int /* predicate */
|
|||
|
before(
|
|||
|
celt x, celt y) /* collating elements */
|
|||
|
{
|
|||
|
if (x < y) {
|
|||
|
return 1;
|
|||
|
}
|
|||
|
return 0;
|
|||
|
}
|
|||
|
|
|||
|
/*
|
|||
|
- eclass - supply cvec for an equivalence class
|
|||
|
* Must include case counterparts on request.
|
|||
|
^ static struct cvec *eclass(struct vars *, celt, int);
|
|||
|
*/
|
|||
|
static struct cvec *
|
|||
|
eclass(
|
|||
|
struct vars *v, /* context */
|
|||
|
celt c, /* Collating element representing the
|
|||
|
* equivalence class. */
|
|||
|
int cases) /* all cases? */
|
|||
|
{
|
|||
|
struct cvec *cv;
|
|||
|
|
|||
|
/*
|
|||
|
* Crude fake equivalence class for testing.
|
|||
|
*/
|
|||
|
|
|||
|
if ((v->cflags®_FAKE) && c == 'x') {
|
|||
|
cv = getcvec(v, 4, 0);
|
|||
|
addchr(cv, (chr)'x');
|
|||
|
addchr(cv, (chr)'y');
|
|||
|
if (cases) {
|
|||
|
addchr(cv, (chr)'X');
|
|||
|
addchr(cv, (chr)'Y');
|
|||
|
}
|
|||
|
return cv;
|
|||
|
}
|
|||
|
|
|||
|
/*
|
|||
|
* Otherwise, none.
|
|||
|
*/
|
|||
|
|
|||
|
if (cases) {
|
|||
|
return allcases(v, c);
|
|||
|
}
|
|||
|
cv = getcvec(v, 1, 0);
|
|||
|
assert(cv != NULL);
|
|||
|
addchr(cv, (chr)c);
|
|||
|
return cv;
|
|||
|
}
|
|||
|
|
|||
|
/*
|
|||
|
- cclass - supply cvec for a character class
|
|||
|
* Must include case counterparts on request.
|
|||
|
^ static struct cvec *cclass(struct vars *, const chr *, const chr *, int);
|
|||
|
*/
|
|||
|
static struct cvec *
|
|||
|
cclass(
|
|||
|
struct vars *v, /* context */
|
|||
|
const chr *startp, /* where the name starts */
|
|||
|
const chr *endp, /* just past the end of the name */
|
|||
|
int cases) /* case-independent? */
|
|||
|
{
|
|||
|
size_t len;
|
|||
|
struct cvec *cv = NULL;
|
|||
|
Tcl_DString ds;
|
|||
|
const char *np;
|
|||
|
const char *const *namePtr;
|
|||
|
int i, index;
|
|||
|
|
|||
|
/*
|
|||
|
* The following arrays define the valid character class names.
|
|||
|
*/
|
|||
|
|
|||
|
static const char *const classNames[] = {
|
|||
|
"alnum", "alpha", "ascii", "blank", "cntrl", "digit", "graph",
|
|||
|
"lower", "print", "punct", "space", "upper", "xdigit", NULL
|
|||
|
};
|
|||
|
|
|||
|
enum classes {
|
|||
|
CC_ALNUM, CC_ALPHA, CC_ASCII, CC_BLANK, CC_CNTRL, CC_DIGIT, CC_GRAPH,
|
|||
|
CC_LOWER, CC_PRINT, CC_PUNCT, CC_SPACE, CC_UPPER, CC_XDIGIT
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
* Extract the class name
|
|||
|
*/
|
|||
|
|
|||
|
len = endp - startp;
|
|||
|
Tcl_DStringInit(&ds);
|
|||
|
np = Tcl_UniCharToUtfDString(startp, (int)len, &ds);
|
|||
|
|
|||
|
/*
|
|||
|
* Map the name to the corresponding enumerated value.
|
|||
|
*/
|
|||
|
|
|||
|
index = -1;
|
|||
|
for (namePtr=classNames,i=0 ; *namePtr!=NULL ; namePtr++,i++) {
|
|||
|
if ((strlen(*namePtr) == len) && (strncmp(*namePtr, np, len) == 0)) {
|
|||
|
index = i;
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
Tcl_DStringFree(&ds);
|
|||
|
if (index == -1) {
|
|||
|
ERR(REG_ECTYPE);
|
|||
|
return NULL;
|
|||
|
}
|
|||
|
|
|||
|
/*
|
|||
|
* Remap lower and upper to alpha if the match is case insensitive.
|
|||
|
*/
|
|||
|
|
|||
|
if (cases && ((index == CC_LOWER) || (index == CC_UPPER))) {
|
|||
|
index = CC_ALNUM;
|
|||
|
}
|
|||
|
|
|||
|
/*
|
|||
|
* Now compute the character class contents.
|
|||
|
*/
|
|||
|
|
|||
|
switch((enum classes) index) {
|
|||
|
case CC_ALNUM:
|
|||
|
cv = getcvec(v, NUM_ALPHA_CHAR, NUM_DIGIT_RANGE + NUM_ALPHA_RANGE);
|
|||
|
if (cv) {
|
|||
|
for (i=0 ; (size_t)i<NUM_ALPHA_CHAR ; i++) {
|
|||
|
addchr(cv, alphaCharTable[i]);
|
|||
|
}
|
|||
|
for (i=0 ; (size_t)i<NUM_ALPHA_RANGE ; i++) {
|
|||
|
addrange(cv, alphaRangeTable[i].start,
|
|||
|
alphaRangeTable[i].end);
|
|||
|
}
|
|||
|
for (i=0 ; (size_t)i<NUM_DIGIT_RANGE ; i++) {
|
|||
|
addrange(cv, digitRangeTable[i].start,
|
|||
|
digitRangeTable[i].end);
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
case CC_ALPHA:
|
|||
|
cv = getcvec(v, NUM_ALPHA_CHAR, NUM_ALPHA_RANGE);
|
|||
|
if (cv) {
|
|||
|
for (i=0 ; (size_t)i<NUM_ALPHA_RANGE ; i++) {
|
|||
|
addrange(cv, alphaRangeTable[i].start,
|
|||
|
alphaRangeTable[i].end);
|
|||
|
}
|
|||
|
for (i=0 ; (size_t)i<NUM_ALPHA_CHAR ; i++) {
|
|||
|
addchr(cv, alphaCharTable[i]);
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
case CC_ASCII:
|
|||
|
cv = getcvec(v, 0, 1);
|
|||
|
if (cv) {
|
|||
|
addrange(cv, 0, 0x7F);
|
|||
|
}
|
|||
|
break;
|
|||
|
case CC_BLANK:
|
|||
|
cv = getcvec(v, 2, 0);
|
|||
|
addchr(cv, '\t');
|
|||
|
addchr(cv, ' ');
|
|||
|
break;
|
|||
|
case CC_CNTRL:
|
|||
|
cv = getcvec(v, NUM_CONTROL_CHAR, NUM_CONTROL_RANGE);
|
|||
|
if (cv) {
|
|||
|
for (i=0 ; (size_t)i<NUM_CONTROL_RANGE ; i++) {
|
|||
|
addrange(cv, controlRangeTable[i].start,
|
|||
|
controlRangeTable[i].end);
|
|||
|
}
|
|||
|
for (i=0 ; (size_t)i<NUM_CONTROL_CHAR ; i++) {
|
|||
|
addchr(cv, controlCharTable[i]);
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
case CC_DIGIT:
|
|||
|
cv = getcvec(v, 0, NUM_DIGIT_RANGE);
|
|||
|
if (cv) {
|
|||
|
for (i=0 ; (size_t)i<NUM_DIGIT_RANGE ; i++) {
|
|||
|
addrange(cv, digitRangeTable[i].start,
|
|||
|
digitRangeTable[i].end);
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
case CC_PUNCT:
|
|||
|
cv = getcvec(v, NUM_PUNCT_CHAR, NUM_PUNCT_RANGE);
|
|||
|
if (cv) {
|
|||
|
for (i=0 ; (size_t)i<NUM_PUNCT_RANGE ; i++) {
|
|||
|
addrange(cv, punctRangeTable[i].start,
|
|||
|
punctRangeTable[i].end);
|
|||
|
}
|
|||
|
for (i=0 ; (size_t)i<NUM_PUNCT_CHAR ; i++) {
|
|||
|
addchr(cv, punctCharTable[i]);
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
case CC_XDIGIT:
|
|||
|
/*
|
|||
|
* This is a 3 instead of (NUM_DIGIT_RANGE+2) because I've no idea how
|
|||
|
* to define the digits 'a' through 'f' in non-western locales. The
|
|||
|
* concept is quite possibly non portable, or only used in contextx
|
|||
|
* where the characters used would be the western ones anyway!
|
|||
|
* Whatever is actually the case, the number of ranges is fixed (until
|
|||
|
* someone comes up with a better arrangement!)
|
|||
|
*/
|
|||
|
|
|||
|
cv = getcvec(v, 0, 3);
|
|||
|
if (cv) {
|
|||
|
addrange(cv, '0', '9');
|
|||
|
addrange(cv, 'a', 'f');
|
|||
|
addrange(cv, 'A', 'F');
|
|||
|
}
|
|||
|
break;
|
|||
|
case CC_SPACE:
|
|||
|
cv = getcvec(v, NUM_SPACE_CHAR, NUM_SPACE_RANGE);
|
|||
|
if (cv) {
|
|||
|
for (i=0 ; (size_t)i<NUM_SPACE_RANGE ; i++) {
|
|||
|
addrange(cv, spaceRangeTable[i].start,
|
|||
|
spaceRangeTable[i].end);
|
|||
|
}
|
|||
|
for (i=0 ; (size_t)i<NUM_SPACE_CHAR ; i++) {
|
|||
|
addchr(cv, spaceCharTable[i]);
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
case CC_LOWER:
|
|||
|
cv = getcvec(v, NUM_LOWER_CHAR, NUM_LOWER_RANGE);
|
|||
|
if (cv) {
|
|||
|
for (i=0 ; (size_t)i<NUM_LOWER_RANGE ; i++) {
|
|||
|
addrange(cv, lowerRangeTable[i].start,
|
|||
|
lowerRangeTable[i].end);
|
|||
|
}
|
|||
|
for (i=0 ; (size_t)i<NUM_LOWER_CHAR ; i++) {
|
|||
|
addchr(cv, lowerCharTable[i]);
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
case CC_UPPER:
|
|||
|
cv = getcvec(v, NUM_UPPER_CHAR, NUM_UPPER_RANGE);
|
|||
|
if (cv) {
|
|||
|
for (i=0 ; (size_t)i<NUM_UPPER_RANGE ; i++) {
|
|||
|
addrange(cv, upperRangeTable[i].start,
|
|||
|
upperRangeTable[i].end);
|
|||
|
}
|
|||
|
for (i=0 ; (size_t)i<NUM_UPPER_CHAR ; i++) {
|
|||
|
addchr(cv, upperCharTable[i]);
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
case CC_PRINT:
|
|||
|
cv = getcvec(v, NUM_SPACE_CHAR + NUM_GRAPH_CHAR, NUM_SPACE_RANGE + NUM_GRAPH_RANGE - 1);
|
|||
|
if (cv) {
|
|||
|
for (i=1 ; (size_t)i<NUM_SPACE_RANGE ; i++) {
|
|||
|
addrange(cv, spaceRangeTable[i].start,
|
|||
|
spaceRangeTable[i].end);
|
|||
|
}
|
|||
|
for (i=0 ; (size_t)i<NUM_SPACE_CHAR ; i++) {
|
|||
|
addchr(cv, spaceCharTable[i]);
|
|||
|
}
|
|||
|
for (i=0 ; (size_t)i<NUM_GRAPH_RANGE ; i++) {
|
|||
|
addrange(cv, graphRangeTable[i].start,
|
|||
|
graphRangeTable[i].end);
|
|||
|
}
|
|||
|
for (i=0 ; (size_t)i<NUM_GRAPH_CHAR ; i++) {
|
|||
|
addchr(cv, graphCharTable[i]);
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
case CC_GRAPH:
|
|||
|
cv = getcvec(v, NUM_GRAPH_CHAR, NUM_GRAPH_RANGE);
|
|||
|
if (cv) {
|
|||
|
for (i=0 ; (size_t)i<NUM_GRAPH_RANGE ; i++) {
|
|||
|
addrange(cv, graphRangeTable[i].start,
|
|||
|
graphRangeTable[i].end);
|
|||
|
}
|
|||
|
for (i=0 ; (size_t)i<NUM_GRAPH_CHAR ; i++) {
|
|||
|
addchr(cv, graphCharTable[i]);
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
}
|
|||
|
if (cv == NULL) {
|
|||
|
ERR(REG_ESPACE);
|
|||
|
}
|
|||
|
return cv;
|
|||
|
}
|
|||
|
|
|||
|
/*
|
|||
|
- allcases - supply cvec for all case counterparts of a chr (including itself)
|
|||
|
* This is a shortcut, preferably an efficient one, for simple characters;
|
|||
|
* messy cases are done via range().
|
|||
|
^ static struct cvec *allcases(struct vars *, pchr);
|
|||
|
*/
|
|||
|
static struct cvec *
|
|||
|
allcases(
|
|||
|
struct vars *v, /* context */
|
|||
|
pchr pc) /* character to get case equivs of */
|
|||
|
{
|
|||
|
struct cvec *cv;
|
|||
|
chr c = (chr)pc;
|
|||
|
chr lc, uc, tc;
|
|||
|
|
|||
|
lc = Tcl_UniCharToLower((chr)c);
|
|||
|
uc = Tcl_UniCharToUpper((chr)c);
|
|||
|
tc = Tcl_UniCharToTitle((chr)c);
|
|||
|
|
|||
|
if (tc != uc) {
|
|||
|
cv = getcvec(v, 3, 0);
|
|||
|
addchr(cv, tc);
|
|||
|
} else {
|
|||
|
cv = getcvec(v, 2, 0);
|
|||
|
}
|
|||
|
addchr(cv, lc);
|
|||
|
if (lc != uc) {
|
|||
|
addchr(cv, uc);
|
|||
|
}
|
|||
|
return cv;
|
|||
|
}
|
|||
|
|
|||
|
/*
|
|||
|
- cmp - chr-substring compare
|
|||
|
* Backrefs need this. It should preferably be efficient.
|
|||
|
* Note that it does not need to report anything except equal/unequal.
|
|||
|
* Note also that the length is exact, and the comparison should not
|
|||
|
* stop at embedded NULs!
|
|||
|
^ static int cmp(const chr *, const chr *, size_t);
|
|||
|
*/
|
|||
|
static int /* 0 for equal, nonzero for unequal */
|
|||
|
cmp(
|
|||
|
const chr *x, const chr *y, /* strings to compare */
|
|||
|
size_t len) /* exact length of comparison */
|
|||
|
{
|
|||
|
return memcmp(VS(x), VS(y), len*sizeof(chr));
|
|||
|
}
|
|||
|
|
|||
|
/*
|
|||
|
- casecmp - case-independent chr-substring compare
|
|||
|
* REG_ICASE backrefs need this. It should preferably be efficient.
|
|||
|
* Note that it does not need to report anything except equal/unequal.
|
|||
|
* Note also that the length is exact, and the comparison should not
|
|||
|
* stop at embedded NULs!
|
|||
|
^ static int casecmp(const chr *, const chr *, size_t);
|
|||
|
*/
|
|||
|
static int /* 0 for equal, nonzero for unequal */
|
|||
|
casecmp(
|
|||
|
const chr *x, const chr *y, /* strings to compare */
|
|||
|
size_t len) /* exact length of comparison */
|
|||
|
{
|
|||
|
for (; len > 0; len--, x++, y++) {
|
|||
|
if ((*x!=*y) && (Tcl_UniCharToLower(*x) != Tcl_UniCharToLower(*y))) {
|
|||
|
return 1;
|
|||
|
}
|
|||
|
}
|
|||
|
return 0;
|
|||
|
}
|
|||
|
|
|||
|
/*
|
|||
|
* Local Variables:
|
|||
|
* mode: c
|
|||
|
* c-basic-offset: 4
|
|||
|
* fill-column: 78
|
|||
|
* End:
|
|||
|
*/
|