| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511 |
- import 'dart:typed_data';
- const BMP_COMBINING = [
- [0x0300, 0x036F],
- [0x0483, 0x0489],
- [0x0591, 0x05BD],
- [0x05BF, 0x05BF],
- [0x05C1, 0x05C2],
- [0x05C4, 0x05C5],
- [0x05C7, 0x05C7],
- [0x0600, 0x0605],
- [0x0610, 0x061A],
- [0x061C, 0x061C],
- [0x064B, 0x065F],
- [0x0670, 0x0670],
- [0x06D6, 0x06DD],
- [0x06DF, 0x06E4],
- [0x06E7, 0x06E8],
- [0x06EA, 0x06ED],
- [0x070F, 0x070F],
- [0x0711, 0x0711],
- [0x0730, 0x074A],
- [0x07A6, 0x07B0],
- [0x07EB, 0x07F3],
- [0x07FD, 0x07FD],
- [0x0816, 0x0819],
- [0x081B, 0x0823],
- [0x0825, 0x0827],
- [0x0829, 0x082D],
- [0x0859, 0x085B],
- [0x08D3, 0x0902],
- [0x093A, 0x093A],
- [0x093C, 0x093C],
- [0x0941, 0x0948],
- [0x094D, 0x094D],
- [0x0951, 0x0957],
- [0x0962, 0x0963],
- [0x0981, 0x0981],
- [0x09BC, 0x09BC],
- [0x09C1, 0x09C4],
- [0x09CD, 0x09CD],
- [0x09E2, 0x09E3],
- [0x09FE, 0x09FE],
- [0x0A01, 0x0A02],
- [0x0A3C, 0x0A3C],
- [0x0A41, 0x0A42],
- [0x0A47, 0x0A48],
- [0x0A4B, 0x0A4D],
- [0x0A51, 0x0A51],
- [0x0A70, 0x0A71],
- [0x0A75, 0x0A75],
- [0x0A81, 0x0A82],
- [0x0ABC, 0x0ABC],
- [0x0AC1, 0x0AC5],
- [0x0AC7, 0x0AC8],
- [0x0ACD, 0x0ACD],
- [0x0AE2, 0x0AE3],
- [0x0AFA, 0x0AFF],
- [0x0B01, 0x0B01],
- [0x0B3C, 0x0B3C],
- [0x0B3F, 0x0B3F],
- [0x0B41, 0x0B44],
- [0x0B4D, 0x0B4D],
- [0x0B56, 0x0B56],
- [0x0B62, 0x0B63],
- [0x0B82, 0x0B82],
- [0x0BC0, 0x0BC0],
- [0x0BCD, 0x0BCD],
- [0x0C00, 0x0C00],
- [0x0C04, 0x0C04],
- [0x0C3E, 0x0C40],
- [0x0C46, 0x0C48],
- [0x0C4A, 0x0C4D],
- [0x0C55, 0x0C56],
- [0x0C62, 0x0C63],
- [0x0C81, 0x0C81],
- [0x0CBC, 0x0CBC],
- [0x0CBF, 0x0CBF],
- [0x0CC6, 0x0CC6],
- [0x0CCC, 0x0CCD],
- [0x0CE2, 0x0CE3],
- [0x0D00, 0x0D01],
- [0x0D3B, 0x0D3C],
- [0x0D41, 0x0D44],
- [0x0D4D, 0x0D4D],
- [0x0D62, 0x0D63],
- [0x0DCA, 0x0DCA],
- [0x0DD2, 0x0DD4],
- [0x0DD6, 0x0DD6],
- [0x0E31, 0x0E31],
- [0x0E34, 0x0E3A],
- [0x0E47, 0x0E4E],
- [0x0EB1, 0x0EB1],
- [0x0EB4, 0x0EBC],
- [0x0EC8, 0x0ECD],
- [0x0F18, 0x0F19],
- [0x0F35, 0x0F35],
- [0x0F37, 0x0F37],
- [0x0F39, 0x0F39],
- [0x0F71, 0x0F7E],
- [0x0F80, 0x0F84],
- [0x0F86, 0x0F87],
- [0x0F8D, 0x0F97],
- [0x0F99, 0x0FBC],
- [0x0FC6, 0x0FC6],
- [0x102D, 0x1030],
- [0x1032, 0x1037],
- [0x1039, 0x103A],
- [0x103D, 0x103E],
- [0x1058, 0x1059],
- [0x105E, 0x1060],
- [0x1071, 0x1074],
- [0x1082, 0x1082],
- [0x1085, 0x1086],
- [0x108D, 0x108D],
- [0x109D, 0x109D],
- [0x1160, 0x11FF],
- [0x135D, 0x135F],
- [0x1712, 0x1714],
- [0x1732, 0x1734],
- [0x1752, 0x1753],
- [0x1772, 0x1773],
- [0x17B4, 0x17B5],
- [0x17B7, 0x17BD],
- [0x17C6, 0x17C6],
- [0x17C9, 0x17D3],
- [0x17DD, 0x17DD],
- [0x180B, 0x180E],
- [0x1885, 0x1886],
- [0x18A9, 0x18A9],
- [0x1920, 0x1922],
- [0x1927, 0x1928],
- [0x1932, 0x1932],
- [0x1939, 0x193B],
- [0x1A17, 0x1A18],
- [0x1A1B, 0x1A1B],
- [0x1A56, 0x1A56],
- [0x1A58, 0x1A5E],
- [0x1A60, 0x1A60],
- [0x1A62, 0x1A62],
- [0x1A65, 0x1A6C],
- [0x1A73, 0x1A7C],
- [0x1A7F, 0x1A7F],
- [0x1AB0, 0x1ABE],
- [0x1B00, 0x1B03],
- [0x1B34, 0x1B34],
- [0x1B36, 0x1B3A],
- [0x1B3C, 0x1B3C],
- [0x1B42, 0x1B42],
- [0x1B6B, 0x1B73],
- [0x1B80, 0x1B81],
- [0x1BA2, 0x1BA5],
- [0x1BA8, 0x1BA9],
- [0x1BAB, 0x1BAD],
- [0x1BE6, 0x1BE6],
- [0x1BE8, 0x1BE9],
- [0x1BED, 0x1BED],
- [0x1BEF, 0x1BF1],
- [0x1C2C, 0x1C33],
- [0x1C36, 0x1C37],
- [0x1CD0, 0x1CD2],
- [0x1CD4, 0x1CE0],
- [0x1CE2, 0x1CE8],
- [0x1CED, 0x1CED],
- [0x1CF4, 0x1CF4],
- [0x1CF8, 0x1CF9],
- [0x1DC0, 0x1DF9],
- [0x1DFB, 0x1DFF],
- [0x200B, 0x200F],
- [0x202A, 0x202E],
- [0x2060, 0x2064],
- [0x2066, 0x206F],
- [0x20D0, 0x20F0],
- [0x2CEF, 0x2CF1],
- [0x2D7F, 0x2D7F],
- [0x2DE0, 0x2DFF],
- [0x302A, 0x302D],
- [0x3099, 0x309A],
- [0xA66F, 0xA672],
- [0xA674, 0xA67D],
- [0xA69E, 0xA69F],
- [0xA6F0, 0xA6F1],
- [0xA802, 0xA802],
- [0xA806, 0xA806],
- [0xA80B, 0xA80B],
- [0xA825, 0xA826],
- [0xA8C4, 0xA8C5],
- [0xA8E0, 0xA8F1],
- [0xA8FF, 0xA8FF],
- [0xA926, 0xA92D],
- [0xA947, 0xA951],
- [0xA980, 0xA982],
- [0xA9B3, 0xA9B3],
- [0xA9B6, 0xA9B9],
- [0xA9BC, 0xA9BD],
- [0xA9E5, 0xA9E5],
- [0xAA29, 0xAA2E],
- [0xAA31, 0xAA32],
- [0xAA35, 0xAA36],
- [0xAA43, 0xAA43],
- [0xAA4C, 0xAA4C],
- [0xAA7C, 0xAA7C],
- [0xAAB0, 0xAAB0],
- [0xAAB2, 0xAAB4],
- [0xAAB7, 0xAAB8],
- [0xAABE, 0xAABF],
- [0xAAC1, 0xAAC1],
- [0xAAEC, 0xAAED],
- [0xAAF6, 0xAAF6],
- [0xABE5, 0xABE5],
- [0xABE8, 0xABE8],
- [0xABED, 0xABED],
- [0xFB1E, 0xFB1E],
- [0xFE00, 0xFE0F],
- [0xFE20, 0xFE2F],
- [0xFEFF, 0xFEFF],
- [0xFFF9, 0xFFFB]
- ];
- const HIGH_COMBINING = [
- [0x101FD, 0x101FD],
- [0x102E0, 0x102E0],
- [0x10376, 0x1037A],
- [0x10A01, 0x10A03],
- [0x10A05, 0x10A06],
- [0x10A0C, 0x10A0F],
- [0x10A38, 0x10A3A],
- [0x10A3F, 0x10A3F],
- [0x10AE5, 0x10AE6],
- [0x10D24, 0x10D27],
- [0x10F46, 0x10F50],
- [0x11001, 0x11001],
- [0x11038, 0x11046],
- [0x1107F, 0x11081],
- [0x110B3, 0x110B6],
- [0x110B9, 0x110BA],
- [0x110BD, 0x110BD],
- [0x110CD, 0x110CD],
- [0x11100, 0x11102],
- [0x11127, 0x1112B],
- [0x1112D, 0x11134],
- [0x11173, 0x11173],
- [0x11180, 0x11181],
- [0x111B6, 0x111BE],
- [0x111C9, 0x111CC],
- [0x1122F, 0x11231],
- [0x11234, 0x11234],
- [0x11236, 0x11237],
- [0x1123E, 0x1123E],
- [0x112DF, 0x112DF],
- [0x112E3, 0x112EA],
- [0x11300, 0x11301],
- [0x1133B, 0x1133C],
- [0x11340, 0x11340],
- [0x11366, 0x1136C],
- [0x11370, 0x11374],
- [0x11438, 0x1143F],
- [0x11442, 0x11444],
- [0x11446, 0x11446],
- [0x1145E, 0x1145E],
- [0x114B3, 0x114B8],
- [0x114BA, 0x114BA],
- [0x114BF, 0x114C0],
- [0x114C2, 0x114C3],
- [0x115B2, 0x115B5],
- [0x115BC, 0x115BD],
- [0x115BF, 0x115C0],
- [0x115DC, 0x115DD],
- [0x11633, 0x1163A],
- [0x1163D, 0x1163D],
- [0x1163F, 0x11640],
- [0x116AB, 0x116AB],
- [0x116AD, 0x116AD],
- [0x116B0, 0x116B5],
- [0x116B7, 0x116B7],
- [0x1171D, 0x1171F],
- [0x11722, 0x11725],
- [0x11727, 0x1172B],
- [0x1182F, 0x11837],
- [0x11839, 0x1183A],
- [0x119D4, 0x119D7],
- [0x119DA, 0x119DB],
- [0x119E0, 0x119E0],
- [0x11A01, 0x11A0A],
- [0x11A33, 0x11A38],
- [0x11A3B, 0x11A3E],
- [0x11A47, 0x11A47],
- [0x11A51, 0x11A56],
- [0x11A59, 0x11A5B],
- [0x11A8A, 0x11A96],
- [0x11A98, 0x11A99],
- [0x11C30, 0x11C36],
- [0x11C38, 0x11C3D],
- [0x11C3F, 0x11C3F],
- [0x11C92, 0x11CA7],
- [0x11CAA, 0x11CB0],
- [0x11CB2, 0x11CB3],
- [0x11CB5, 0x11CB6],
- [0x11D31, 0x11D36],
- [0x11D3A, 0x11D3A],
- [0x11D3C, 0x11D3D],
- [0x11D3F, 0x11D45],
- [0x11D47, 0x11D47],
- [0x11D90, 0x11D91],
- [0x11D95, 0x11D95],
- [0x11D97, 0x11D97],
- [0x11EF3, 0x11EF4],
- [0x13430, 0x13438],
- [0x16AF0, 0x16AF4],
- [0x16B30, 0x16B36],
- [0x16F4F, 0x16F4F],
- [0x16F8F, 0x16F92],
- [0x1BC9D, 0x1BC9E],
- [0x1BCA0, 0x1BCA3],
- [0x1D167, 0x1D169],
- [0x1D173, 0x1D182],
- [0x1D185, 0x1D18B],
- [0x1D1AA, 0x1D1AD],
- [0x1D242, 0x1D244],
- [0x1DA00, 0x1DA36],
- [0x1DA3B, 0x1DA6C],
- [0x1DA75, 0x1DA75],
- [0x1DA84, 0x1DA84],
- [0x1DA9B, 0x1DA9F],
- [0x1DAA1, 0x1DAAF],
- [0x1E000, 0x1E006],
- [0x1E008, 0x1E018],
- [0x1E01B, 0x1E021],
- [0x1E023, 0x1E024],
- [0x1E026, 0x1E02A],
- [0x1E130, 0x1E136],
- [0x1E2EC, 0x1E2EF],
- [0x1E8D0, 0x1E8D6],
- [0x1E944, 0x1E94A],
- [0xE0001, 0xE0001],
- [0xE0020, 0xE007F],
- [0xE0100, 0xE01EF]
- ];
- const BMP_WIDE = [
- [0x1100, 0x115F],
- [0x231A, 0x231B],
- [0x2329, 0x232A],
- [0x23E9, 0x23EC],
- [0x23F0, 0x23F0],
- [0x23F3, 0x23F3],
- [0x25FD, 0x25FE],
- [0x2614, 0x2615],
- [0x2648, 0x2653],
- [0x267F, 0x267F],
- [0x2693, 0x2693],
- [0x26A1, 0x26A1],
- [0x26AA, 0x26AB],
- [0x26BD, 0x26BE],
- [0x26C4, 0x26C5],
- [0x26CE, 0x26CE],
- [0x26D4, 0x26D4],
- [0x26EA, 0x26EA],
- [0x26F2, 0x26F3],
- [0x26F5, 0x26F5],
- [0x26FA, 0x26FA],
- [0x26FD, 0x26FD],
- [0x2705, 0x2705],
- [0x270A, 0x270B],
- [0x2728, 0x2728],
- [0x274C, 0x274C],
- [0x274E, 0x274E],
- [0x2753, 0x2755],
- [0x2757, 0x2757],
- [0x2795, 0x2797],
- [0x27B0, 0x27B0],
- [0x27BF, 0x27BF],
- [0x2B1B, 0x2B1C],
- [0x2B50, 0x2B50],
- [0x2B55, 0x2B55],
- [0x2E80, 0x2E99],
- [0x2E9B, 0x2EF3],
- [0x2F00, 0x2FD5],
- [0x2FF0, 0x2FFB],
- [0x3000, 0x3029],
- [0x302E, 0x303E],
- [0x3041, 0x3096],
- [0x309B, 0x30FF],
- [0x3105, 0x312F],
- [0x3131, 0x318E],
- [0x3190, 0x31BA],
- [0x31C0, 0x31E3],
- [0x31F0, 0x321E],
- [0x3220, 0x3247],
- [0x3250, 0x4DBF],
- [0x4E00, 0xA48C],
- [0xA490, 0xA4C6],
- [0xA960, 0xA97C],
- [0xAC00, 0xD7A3],
- [0xF900, 0xFAFF],
- [0xFE10, 0xFE19],
- [0xFE30, 0xFE52],
- [0xFE54, 0xFE66],
- [0xFE68, 0xFE6B],
- [0xFF01, 0xFF60],
- [0xFFE0, 0xFFE6]
- ];
- const HIGH_WIDE = [
- [0x16FE0, 0x16FE3],
- [0x17000, 0x187F7],
- [0x18800, 0x18AF2],
- [0x1B000, 0x1B11E],
- [0x1B150, 0x1B152],
- [0x1B164, 0x1B167],
- [0x1B170, 0x1B2FB],
- [0x1F004, 0x1F004],
- [0x1F0CF, 0x1F0CF],
- [0x1F18E, 0x1F18E],
- [0x1F191, 0x1F19A],
- [0x1F200, 0x1F202],
- [0x1F210, 0x1F23B],
- [0x1F240, 0x1F248],
- [0x1F250, 0x1F251],
- [0x1F260, 0x1F265],
- [0x1F300, 0x1F320],
- [0x1F32D, 0x1F335],
- [0x1F337, 0x1F37C],
- [0x1F37E, 0x1F393],
- [0x1F3A0, 0x1F3CA],
- [0x1F3CF, 0x1F3D3],
- [0x1F3E0, 0x1F3F0],
- [0x1F3F4, 0x1F3F4],
- [0x1F3F8, 0x1F43E],
- [0x1F440, 0x1F440],
- [0x1F442, 0x1F4FC],
- [0x1F4FF, 0x1F53D],
- [0x1F54B, 0x1F54E],
- [0x1F550, 0x1F567],
- [0x1F57A, 0x1F57A],
- [0x1F595, 0x1F596],
- [0x1F5A4, 0x1F5A4],
- [0x1F5FB, 0x1F64F],
- [0x1F680, 0x1F6C5],
- [0x1F6CC, 0x1F6CC],
- [0x1F6D0, 0x1F6D2],
- [0x1F6D5, 0x1F6D5],
- [0x1F6EB, 0x1F6EC],
- [0x1F6F4, 0x1F6FA],
- [0x1F7E0, 0x1F7EB],
- [0x1F90D, 0x1F971],
- [0x1F973, 0x1F976],
- [0x1F97A, 0x1F9A2],
- [0x1F9A5, 0x1F9AA],
- [0x1F9AE, 0x1F9CA],
- [0x1F9CD, 0x1F9FF],
- [0x1FA70, 0x1FA73],
- [0x1FA78, 0x1FA7A],
- [0x1FA80, 0x1FA82],
- [0x1FA90, 0x1FA95],
- [0x20000, 0x2FFFD],
- [0x30000, 0x3FFFD]
- ];
- Uint8List table;
- bool bisearch(int ucs, List<List<int>> data) {
- var min = 0;
- var max = data.length - 1;
- var mid;
- if (ucs < data[0][0] || ucs > data[max][1]) {
- return false;
- }
- while (max >= min) {
- mid = (min + max) >> 1;
- if (ucs > data[mid][1]) {
- min = mid + 1;
- } else if (ucs < data[mid][0]) {
- max = mid - 1;
- } else {
- return true;
- }
- }
- return false;
- }
- class UnicodeV11 {
- final version = '11';
- UnicodeV11() {
- if (table == null) {
- table = Uint8List(65536);
- table.fillRange(0, table.length, 1);
- table[0] = 0;
- table.fillRange(1, 32, 0);
- table.fillRange(0x7f, 0xa0, 0);
- for (var r = 0; r < BMP_COMBINING.length; ++r) {
- table.fillRange(BMP_COMBINING[r][0], BMP_COMBINING[r][1] + 1, 0);
- }
- for (var r = 0; r < BMP_WIDE.length; ++r) {
- table.fillRange(BMP_WIDE[r][0], BMP_WIDE[r][1] + 1, 2);
- }
- }
- }
- int wcwidth(int codePoint) {
- if (codePoint < 32) return 0;
- if (codePoint < 127) return 1;
- if (codePoint < 65536) return table[codePoint];
- if (bisearch(codePoint, HIGH_COMBINING)) return 0;
- if (bisearch(codePoint, HIGH_WIDE)) return 2;
- return 1;
- }
- }
- final unicodeV11 = UnicodeV11();
|