morpheus-base

morpheus base system
git clone git://git.2f30.org/morpheus-base
Log | Files | Refs

runetypebody.h (26116B)


      1 /* MIT/X Consortium Copyright (c) 2012 Connor Lane Smith <cls@lubutu.com>
      2  *
      3  * Permission is hereby granted, free of charge, to any person obtaining a
      4  * copy of this software and associated documentation files (the "Software"),
      5  * to deal in the Software without restriction, including without limitation
      6  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
      7  * and/or sell copies of the Software, and to permit persons to whom the
      8  * Software is furnished to do so, subject to the following conditions:
      9  *
     10  * The above copyright notice and this permission notice shall be included in
     11  * all copies or substantial portions of the Software.
     12  *
     13  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
     14  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     15  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
     16  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
     17  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
     18  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
     19  * DEALINGS IN THE SOFTWARE.
     20  */
     21 
     22 /* Automatically generated from UnicodeData-6.1.0.txt by mkrunetype.awk */
     23 
     24 static Rune alpha2[][2] = {
     25 	{ 0x0041, 0x005A },
     26 	{ 0x0061, 0x007A },
     27 	{ 0x00C0, 0x00D6 },
     28 	{ 0x00D8, 0x00F6 },
     29 	{ 0x00F8, 0x02C1 },
     30 	{ 0x02C6, 0x02D1 },
     31 	{ 0x02E0, 0x02E4 },
     32 	{ 0x0370, 0x0374 },
     33 	{ 0x0376, 0x0377 },
     34 	{ 0x037A, 0x037D },
     35 	{ 0x0388, 0x038A },
     36 	{ 0x038E, 0x03A1 },
     37 	{ 0x03A3, 0x03F5 },
     38 	{ 0x03F7, 0x0481 },
     39 	{ 0x048A, 0x0527 },
     40 	{ 0x0531, 0x0556 },
     41 	{ 0x0561, 0x0587 },
     42 	{ 0x05D0, 0x05EA },
     43 	{ 0x05F0, 0x05F2 },
     44 	{ 0x0620, 0x064A },
     45 	{ 0x066E, 0x066F },
     46 	{ 0x0671, 0x06D3 },
     47 	{ 0x06E5, 0x06E6 },
     48 	{ 0x06EE, 0x06EF },
     49 	{ 0x06FA, 0x06FC },
     50 	{ 0x0712, 0x072F },
     51 	{ 0x074D, 0x07A5 },
     52 	{ 0x07CA, 0x07EA },
     53 	{ 0x07F4, 0x07F5 },
     54 	{ 0x0800, 0x0815 },
     55 	{ 0x0840, 0x0858 },
     56 	{ 0x08A2, 0x08AC },
     57 	{ 0x0904, 0x0939 },
     58 	{ 0x0958, 0x0961 },
     59 	{ 0x0971, 0x0977 },
     60 	{ 0x0979, 0x097F },
     61 	{ 0x0985, 0x098C },
     62 	{ 0x098F, 0x0990 },
     63 	{ 0x0993, 0x09A8 },
     64 	{ 0x09AA, 0x09B0 },
     65 	{ 0x09B6, 0x09B9 },
     66 	{ 0x09DC, 0x09DD },
     67 	{ 0x09DF, 0x09E1 },
     68 	{ 0x09F0, 0x09F1 },
     69 	{ 0x0A05, 0x0A0A },
     70 	{ 0x0A0F, 0x0A10 },
     71 	{ 0x0A13, 0x0A28 },
     72 	{ 0x0A2A, 0x0A30 },
     73 	{ 0x0A32, 0x0A33 },
     74 	{ 0x0A35, 0x0A36 },
     75 	{ 0x0A38, 0x0A39 },
     76 	{ 0x0A59, 0x0A5C },
     77 	{ 0x0A72, 0x0A74 },
     78 	{ 0x0A85, 0x0A8D },
     79 	{ 0x0A8F, 0x0A91 },
     80 	{ 0x0A93, 0x0AA8 },
     81 	{ 0x0AAA, 0x0AB0 },
     82 	{ 0x0AB2, 0x0AB3 },
     83 	{ 0x0AB5, 0x0AB9 },
     84 	{ 0x0AE0, 0x0AE1 },
     85 	{ 0x0B05, 0x0B0C },
     86 	{ 0x0B0F, 0x0B10 },
     87 	{ 0x0B13, 0x0B28 },
     88 	{ 0x0B2A, 0x0B30 },
     89 	{ 0x0B32, 0x0B33 },
     90 	{ 0x0B35, 0x0B39 },
     91 	{ 0x0B5C, 0x0B5D },
     92 	{ 0x0B5F, 0x0B61 },
     93 	{ 0x0B85, 0x0B8A },
     94 	{ 0x0B8E, 0x0B90 },
     95 	{ 0x0B92, 0x0B95 },
     96 	{ 0x0B99, 0x0B9A },
     97 	{ 0x0B9E, 0x0B9F },
     98 	{ 0x0BA3, 0x0BA4 },
     99 	{ 0x0BA8, 0x0BAA },
    100 	{ 0x0BAE, 0x0BB9 },
    101 	{ 0x0C05, 0x0C0C },
    102 	{ 0x0C0E, 0x0C10 },
    103 	{ 0x0C12, 0x0C28 },
    104 	{ 0x0C2A, 0x0C33 },
    105 	{ 0x0C35, 0x0C39 },
    106 	{ 0x0C58, 0x0C59 },
    107 	{ 0x0C60, 0x0C61 },
    108 	{ 0x0C85, 0x0C8C },
    109 	{ 0x0C8E, 0x0C90 },
    110 	{ 0x0C92, 0x0CA8 },
    111 	{ 0x0CAA, 0x0CB3 },
    112 	{ 0x0CB5, 0x0CB9 },
    113 	{ 0x0CE0, 0x0CE1 },
    114 	{ 0x0CF1, 0x0CF2 },
    115 	{ 0x0D05, 0x0D0C },
    116 	{ 0x0D0E, 0x0D10 },
    117 	{ 0x0D12, 0x0D3A },
    118 	{ 0x0D60, 0x0D61 },
    119 	{ 0x0D7A, 0x0D7F },
    120 	{ 0x0D85, 0x0D96 },
    121 	{ 0x0D9A, 0x0DB1 },
    122 	{ 0x0DB3, 0x0DBB },
    123 	{ 0x0DC0, 0x0DC6 },
    124 	{ 0x0E01, 0x0E30 },
    125 	{ 0x0E32, 0x0E33 },
    126 	{ 0x0E40, 0x0E46 },
    127 	{ 0x0E81, 0x0E82 },
    128 	{ 0x0E87, 0x0E88 },
    129 	{ 0x0E94, 0x0E97 },
    130 	{ 0x0E99, 0x0E9F },
    131 	{ 0x0EA1, 0x0EA3 },
    132 	{ 0x0EAA, 0x0EAB },
    133 	{ 0x0EAD, 0x0EB0 },
    134 	{ 0x0EB2, 0x0EB3 },
    135 	{ 0x0EC0, 0x0EC4 },
    136 	{ 0x0EDC, 0x0EDF },
    137 	{ 0x0F40, 0x0F47 },
    138 	{ 0x0F49, 0x0F6C },
    139 	{ 0x0F88, 0x0F8C },
    140 	{ 0x1000, 0x102A },
    141 	{ 0x1050, 0x1055 },
    142 	{ 0x105A, 0x105D },
    143 	{ 0x1065, 0x1066 },
    144 	{ 0x106E, 0x1070 },
    145 	{ 0x1075, 0x1081 },
    146 	{ 0x10A0, 0x10C5 },
    147 	{ 0x10D0, 0x10FA },
    148 	{ 0x10FC, 0x1248 },
    149 	{ 0x124A, 0x124D },
    150 	{ 0x1250, 0x1256 },
    151 	{ 0x125A, 0x125D },
    152 	{ 0x1260, 0x1288 },
    153 	{ 0x128A, 0x128D },
    154 	{ 0x1290, 0x12B0 },
    155 	{ 0x12B2, 0x12B5 },
    156 	{ 0x12B8, 0x12BE },
    157 	{ 0x12C2, 0x12C5 },
    158 	{ 0x12C8, 0x12D6 },
    159 	{ 0x12D8, 0x1310 },
    160 	{ 0x1312, 0x1315 },
    161 	{ 0x1318, 0x135A },
    162 	{ 0x1380, 0x138F },
    163 	{ 0x13A0, 0x13F4 },
    164 	{ 0x1401, 0x166C },
    165 	{ 0x166F, 0x167F },
    166 	{ 0x1681, 0x169A },
    167 	{ 0x16A0, 0x16EA },
    168 	{ 0x1700, 0x170C },
    169 	{ 0x170E, 0x1711 },
    170 	{ 0x1720, 0x1731 },
    171 	{ 0x1740, 0x1751 },
    172 	{ 0x1760, 0x176C },
    173 	{ 0x176E, 0x1770 },
    174 	{ 0x1780, 0x17B3 },
    175 	{ 0x1820, 0x1877 },
    176 	{ 0x1880, 0x18A8 },
    177 	{ 0x18B0, 0x18F5 },
    178 	{ 0x1900, 0x191C },
    179 	{ 0x1950, 0x196D },
    180 	{ 0x1970, 0x1974 },
    181 	{ 0x1980, 0x19AB },
    182 	{ 0x19C1, 0x19C7 },
    183 	{ 0x1A00, 0x1A16 },
    184 	{ 0x1A20, 0x1A54 },
    185 	{ 0x1B05, 0x1B33 },
    186 	{ 0x1B45, 0x1B4B },
    187 	{ 0x1B83, 0x1BA0 },
    188 	{ 0x1BAE, 0x1BAF },
    189 	{ 0x1BBA, 0x1BE5 },
    190 	{ 0x1C00, 0x1C23 },
    191 	{ 0x1C4D, 0x1C4F },
    192 	{ 0x1C5A, 0x1C7D },
    193 	{ 0x1CE9, 0x1CEC },
    194 	{ 0x1CEE, 0x1CF1 },
    195 	{ 0x1CF5, 0x1CF6 },
    196 	{ 0x1D00, 0x1DBF },
    197 	{ 0x1E00, 0x1F15 },
    198 	{ 0x1F18, 0x1F1D },
    199 	{ 0x1F20, 0x1F45 },
    200 	{ 0x1F48, 0x1F4D },
    201 	{ 0x1F50, 0x1F57 },
    202 	{ 0x1F5F, 0x1F7D },
    203 	{ 0x1F80, 0x1FB4 },
    204 	{ 0x1FB6, 0x1FBC },
    205 	{ 0x1FC2, 0x1FC4 },
    206 	{ 0x1FC6, 0x1FCC },
    207 	{ 0x1FD0, 0x1FD3 },
    208 	{ 0x1FD6, 0x1FDB },
    209 	{ 0x1FE0, 0x1FEC },
    210 	{ 0x1FF2, 0x1FF4 },
    211 	{ 0x1FF6, 0x1FFC },
    212 	{ 0x2090, 0x209C },
    213 	{ 0x210A, 0x2113 },
    214 	{ 0x2119, 0x211D },
    215 	{ 0x212A, 0x212D },
    216 	{ 0x212F, 0x2139 },
    217 	{ 0x213C, 0x213F },
    218 	{ 0x2145, 0x2149 },
    219 	{ 0x2183, 0x2184 },
    220 	{ 0x2C00, 0x2C2E },
    221 	{ 0x2C30, 0x2C5E },
    222 	{ 0x2C60, 0x2CE4 },
    223 	{ 0x2CEB, 0x2CEE },
    224 	{ 0x2CF2, 0x2CF3 },
    225 	{ 0x2D00, 0x2D25 },
    226 	{ 0x2D30, 0x2D67 },
    227 	{ 0x2D80, 0x2D96 },
    228 	{ 0x2DA0, 0x2DA6 },
    229 	{ 0x2DA8, 0x2DAE },
    230 	{ 0x2DB0, 0x2DB6 },
    231 	{ 0x2DB8, 0x2DBE },
    232 	{ 0x2DC0, 0x2DC6 },
    233 	{ 0x2DC8, 0x2DCE },
    234 	{ 0x2DD0, 0x2DD6 },
    235 	{ 0x2DD8, 0x2DDE },
    236 	{ 0x3005, 0x3006 },
    237 	{ 0x3031, 0x3035 },
    238 	{ 0x303B, 0x303C },
    239 	{ 0x3041, 0x3096 },
    240 	{ 0x309D, 0x309F },
    241 	{ 0x30A1, 0x30FA },
    242 	{ 0x30FC, 0x30FF },
    243 	{ 0x3105, 0x312D },
    244 	{ 0x3131, 0x318E },
    245 	{ 0x31A0, 0x31BA },
    246 	{ 0x31F0, 0x31FF },
    247 	{ 0xA000, 0xA48C },
    248 	{ 0xA4D0, 0xA4FD },
    249 	{ 0xA500, 0xA60C },
    250 	{ 0xA610, 0xA61F },
    251 	{ 0xA62A, 0xA62B },
    252 	{ 0xA640, 0xA66E },
    253 	{ 0xA67F, 0xA697 },
    254 	{ 0xA6A0, 0xA6E5 },
    255 	{ 0xA717, 0xA71F },
    256 	{ 0xA722, 0xA788 },
    257 	{ 0xA78B, 0xA78E },
    258 	{ 0xA790, 0xA793 },
    259 	{ 0xA7A0, 0xA7AA },
    260 	{ 0xA7F8, 0xA801 },
    261 	{ 0xA803, 0xA805 },
    262 	{ 0xA807, 0xA80A },
    263 	{ 0xA80C, 0xA822 },
    264 	{ 0xA840, 0xA873 },
    265 	{ 0xA882, 0xA8B3 },
    266 	{ 0xA8F2, 0xA8F7 },
    267 	{ 0xA90A, 0xA925 },
    268 	{ 0xA930, 0xA946 },
    269 	{ 0xA960, 0xA97C },
    270 	{ 0xA984, 0xA9B2 },
    271 	{ 0xAA00, 0xAA28 },
    272 	{ 0xAA40, 0xAA42 },
    273 	{ 0xAA44, 0xAA4B },
    274 	{ 0xAA60, 0xAA76 },
    275 	{ 0xAA80, 0xAAAF },
    276 	{ 0xAAB5, 0xAAB6 },
    277 	{ 0xAAB9, 0xAABD },
    278 	{ 0xAADB, 0xAADD },
    279 	{ 0xAAE0, 0xAAEA },
    280 	{ 0xAAF2, 0xAAF4 },
    281 	{ 0xAB01, 0xAB06 },
    282 	{ 0xAB09, 0xAB0E },
    283 	{ 0xAB11, 0xAB16 },
    284 	{ 0xAB20, 0xAB26 },
    285 	{ 0xAB28, 0xAB2E },
    286 	{ 0xABC0, 0xABE2 },
    287 	{ 0xD7B0, 0xD7C6 },
    288 	{ 0xD7CB, 0xD7FB },
    289 	{ 0xF900, 0xFA6D },
    290 	{ 0xFA70, 0xFAD9 },
    291 	{ 0xFB00, 0xFB06 },
    292 	{ 0xFB13, 0xFB17 },
    293 	{ 0xFB1F, 0xFB28 },
    294 	{ 0xFB2A, 0xFB36 },
    295 	{ 0xFB38, 0xFB3C },
    296 	{ 0xFB40, 0xFB41 },
    297 	{ 0xFB43, 0xFB44 },
    298 	{ 0xFB46, 0xFBB1 },
    299 	{ 0xFBD3, 0xFD3D },
    300 	{ 0xFD50, 0xFD8F },
    301 	{ 0xFD92, 0xFDC7 },
    302 	{ 0xFDF0, 0xFDFB },
    303 	{ 0xFE70, 0xFE74 },
    304 	{ 0xFE76, 0xFEFC },
    305 	{ 0xFF21, 0xFF3A },
    306 	{ 0xFF41, 0xFF5A },
    307 	{ 0xFF66, 0xFFBE },
    308 	{ 0xFFC2, 0xFFC7 },
    309 	{ 0xFFCA, 0xFFCF },
    310 	{ 0xFFD2, 0xFFD7 },
    311 	{ 0xFFDA, 0xFFDC },
    312 	{ 0x10000, 0x1000B },
    313 	{ 0x1000D, 0x10026 },
    314 	{ 0x10028, 0x1003A },
    315 	{ 0x1003C, 0x1003D },
    316 	{ 0x1003F, 0x1004D },
    317 	{ 0x10050, 0x1005D },
    318 	{ 0x10080, 0x100FA },
    319 	{ 0x10280, 0x1029C },
    320 	{ 0x102A0, 0x102D0 },
    321 	{ 0x10300, 0x1031E },
    322 	{ 0x10330, 0x10340 },
    323 	{ 0x10342, 0x10349 },
    324 	{ 0x10380, 0x1039D },
    325 	{ 0x103A0, 0x103C3 },
    326 	{ 0x103C8, 0x103CF },
    327 	{ 0x10400, 0x1049D },
    328 	{ 0x10800, 0x10805 },
    329 	{ 0x1080A, 0x10835 },
    330 	{ 0x10837, 0x10838 },
    331 	{ 0x1083F, 0x10855 },
    332 	{ 0x10900, 0x10915 },
    333 	{ 0x10920, 0x10939 },
    334 	{ 0x10980, 0x109B7 },
    335 	{ 0x109BE, 0x109BF },
    336 	{ 0x10A10, 0x10A13 },
    337 	{ 0x10A15, 0x10A17 },
    338 	{ 0x10A19, 0x10A33 },
    339 	{ 0x10A60, 0x10A7C },
    340 	{ 0x10B00, 0x10B35 },
    341 	{ 0x10B40, 0x10B55 },
    342 	{ 0x10B60, 0x10B72 },
    343 	{ 0x10C00, 0x10C48 },
    344 	{ 0x11003, 0x11037 },
    345 	{ 0x11083, 0x110AF },
    346 	{ 0x110D0, 0x110E8 },
    347 	{ 0x11103, 0x11126 },
    348 	{ 0x11183, 0x111B2 },
    349 	{ 0x111C1, 0x111C4 },
    350 	{ 0x11680, 0x116AA },
    351 	{ 0x12000, 0x1236E },
    352 	{ 0x13000, 0x1342E },
    353 	{ 0x16800, 0x16A38 },
    354 	{ 0x16F00, 0x16F44 },
    355 	{ 0x16F93, 0x16F9F },
    356 	{ 0x1B000, 0x1B001 },
    357 	{ 0x1D400, 0x1D454 },
    358 	{ 0x1D456, 0x1D49C },
    359 	{ 0x1D49E, 0x1D49F },
    360 	{ 0x1D4A5, 0x1D4A6 },
    361 	{ 0x1D4A9, 0x1D4AC },
    362 	{ 0x1D4AE, 0x1D4B9 },
    363 	{ 0x1D4BD, 0x1D4C3 },
    364 	{ 0x1D4C5, 0x1D505 },
    365 	{ 0x1D507, 0x1D50A },
    366 	{ 0x1D50D, 0x1D514 },
    367 	{ 0x1D516, 0x1D51C },
    368 	{ 0x1D51E, 0x1D539 },
    369 	{ 0x1D53B, 0x1D53E },
    370 	{ 0x1D540, 0x1D544 },
    371 	{ 0x1D54A, 0x1D550 },
    372 	{ 0x1D552, 0x1D6A5 },
    373 	{ 0x1D6A8, 0x1D6C0 },
    374 	{ 0x1D6C2, 0x1D6DA },
    375 	{ 0x1D6DC, 0x1D6FA },
    376 	{ 0x1D6FC, 0x1D714 },
    377 	{ 0x1D716, 0x1D734 },
    378 	{ 0x1D736, 0x1D74E },
    379 	{ 0x1D750, 0x1D76E },
    380 	{ 0x1D770, 0x1D788 },
    381 	{ 0x1D78A, 0x1D7A8 },
    382 	{ 0x1D7AA, 0x1D7C2 },
    383 	{ 0x1D7C4, 0x1D7CB },
    384 	{ 0x1EE00, 0x1EE03 },
    385 	{ 0x1EE05, 0x1EE1F },
    386 	{ 0x1EE21, 0x1EE22 },
    387 	{ 0x1EE29, 0x1EE32 },
    388 	{ 0x1EE34, 0x1EE37 },
    389 	{ 0x1EE4D, 0x1EE4F },
    390 	{ 0x1EE51, 0x1EE52 },
    391 	{ 0x1EE61, 0x1EE62 },
    392 	{ 0x1EE67, 0x1EE6A },
    393 	{ 0x1EE6C, 0x1EE72 },
    394 	{ 0x1EE74, 0x1EE77 },
    395 	{ 0x1EE79, 0x1EE7C },
    396 	{ 0x1EE80, 0x1EE89 },
    397 	{ 0x1EE8B, 0x1EE9B },
    398 	{ 0x1EEA1, 0x1EEA3 },
    399 	{ 0x1EEA5, 0x1EEA9 },
    400 	{ 0x1EEAB, 0x1EEBB },
    401 	{ 0x2F800, 0x2FA1D },
    402 };
    403 
    404 static Rune alpha1[] = {
    405 	0x00AA,
    406 	0x00B5,
    407 	0x00BA,
    408 	0x02EC,
    409 	0x02EE,
    410 	0x0386,
    411 	0x038C,
    412 	0x0559,
    413 	0x06D5,
    414 	0x06FF,
    415 	0x0710,
    416 	0x07B1,
    417 	0x07FA,
    418 	0x081A,
    419 	0x0824,
    420 	0x0828,
    421 	0x08A0,
    422 	0x093D,
    423 	0x0950,
    424 	0x09B2,
    425 	0x09BD,
    426 	0x09CE,
    427 	0x0A5E,
    428 	0x0ABD,
    429 	0x0AD0,
    430 	0x0B3D,
    431 	0x0B71,
    432 	0x0B83,
    433 	0x0B9C,
    434 	0x0BD0,
    435 	0x0C3D,
    436 	0x0CBD,
    437 	0x0CDE,
    438 	0x0D3D,
    439 	0x0D4E,
    440 	0x0DBD,
    441 	0x0E84,
    442 	0x0E8A,
    443 	0x0E8D,
    444 	0x0EA5,
    445 	0x0EA7,
    446 	0x0EBD,
    447 	0x0EC6,
    448 	0x0F00,
    449 	0x103F,
    450 	0x1061,
    451 	0x108E,
    452 	0x10C7,
    453 	0x10CD,
    454 	0x1258,
    455 	0x12C0,
    456 	0x17D7,
    457 	0x17DC,
    458 	0x18AA,
    459 	0x1AA7,
    460 	0x1F59,
    461 	0x1F5B,
    462 	0x1F5D,
    463 	0x1FBE,
    464 	0x2071,
    465 	0x207F,
    466 	0x2102,
    467 	0x2107,
    468 	0x2115,
    469 	0x2124,
    470 	0x2126,
    471 	0x2128,
    472 	0x214E,
    473 	0x2D27,
    474 	0x2D2D,
    475 	0x2D6F,
    476 	0x2E2F,
    477 	0x3400,
    478 	0x4DB5,
    479 	0x4E00,
    480 	0x9FCC,
    481 	0xA8FB,
    482 	0xA9CF,
    483 	0xAA7A,
    484 	0xAAB1,
    485 	0xAAC0,
    486 	0xAAC2,
    487 	0xAC00,
    488 	0xD7A3,
    489 	0xFB1D,
    490 	0xFB3E,
    491 	0x10808,
    492 	0x1083C,
    493 	0x10A00,
    494 	0x16F50,
    495 	0x1D4A2,
    496 	0x1D4BB,
    497 	0x1D546,
    498 	0x1EE24,
    499 	0x1EE27,
    500 	0x1EE39,
    501 	0x1EE3B,
    502 	0x1EE42,
    503 	0x1EE47,
    504 	0x1EE49,
    505 	0x1EE4B,
    506 	0x1EE54,
    507 	0x1EE57,
    508 	0x1EE59,
    509 	0x1EE5B,
    510 	0x1EE5D,
    511 	0x1EE5F,
    512 	0x1EE64,
    513 	0x1EE7E,
    514 	0x20000,
    515 	0x2A6D6,
    516 	0x2A700,
    517 	0x2B734,
    518 	0x2B740,
    519 	0x2B81D,
    520 };
    521 
    522 int
    523 isalpharune(Rune r)
    524 {
    525 	if(bsearch(&r, alpha2, nelem(alpha2), sizeof *alpha2, &rune2cmp))
    526 		return 1;
    527 	if(bsearch(&r, alpha1, nelem(alpha1), sizeof *alpha1, &rune1cmp))
    528 		return 1;
    529 	return 0;
    530 }
    531 
    532 static Rune space2[][2] = {
    533 	{ 0x2000, 0x200A },
    534 	{ 0x2028, 0x2029 },
    535 };
    536 
    537 static Rune space1[] = {
    538 	0x0020,
    539 	0x00A0,
    540 	0x1680,
    541 	0x180E,
    542 	0x202F,
    543 	0x205F,
    544 	0x3000,
    545 };
    546 
    547 int
    548 isspacerune(Rune r)
    549 {
    550 	if(bsearch(&r, space2, nelem(space2), sizeof *space2, &rune2cmp))
    551 		return 1;
    552 	if(bsearch(&r, space1, nelem(space1), sizeof *space1, &rune1cmp))
    553 		return 1;
    554 	return 0;
    555 }
    556 
    557 static Rune upper2[][2] = {
    558 	{ 0x0041, 0x005A },
    559 	{ 0x00C0, 0x00D6 },
    560 	{ 0x00D8, 0x00DE },
    561 	{ 0x0178, 0x0179 },
    562 	{ 0x0181, 0x0182 },
    563 	{ 0x0186, 0x0187 },
    564 	{ 0x0189, 0x018B },
    565 	{ 0x018E, 0x0191 },
    566 	{ 0x0193, 0x0194 },
    567 	{ 0x0196, 0x0198 },
    568 	{ 0x019C, 0x019D },
    569 	{ 0x019F, 0x01A0 },
    570 	{ 0x01A6, 0x01A7 },
    571 	{ 0x01AE, 0x01AF },
    572 	{ 0x01B1, 0x01B3 },
    573 	{ 0x01B7, 0x01B8 },
    574 	{ 0x01F6, 0x01F8 },
    575 	{ 0x023A, 0x023B },
    576 	{ 0x023D, 0x023E },
    577 	{ 0x0243, 0x0246 },
    578 	{ 0x0388, 0x038A },
    579 	{ 0x038E, 0x038F },
    580 	{ 0x0391, 0x03A1 },
    581 	{ 0x03A3, 0x03AB },
    582 	{ 0x03D2, 0x03D4 },
    583 	{ 0x03F9, 0x03FA },
    584 	{ 0x03FD, 0x042F },
    585 	{ 0x04C0, 0x04C1 },
    586 	{ 0x0531, 0x0556 },
    587 	{ 0x10A0, 0x10C5 },
    588 	{ 0x1F08, 0x1F0F },
    589 	{ 0x1F18, 0x1F1D },
    590 	{ 0x1F28, 0x1F2F },
    591 	{ 0x1F38, 0x1F3F },
    592 	{ 0x1F48, 0x1F4D },
    593 	{ 0x1F68, 0x1F6F },
    594 	{ 0x1FB8, 0x1FBB },
    595 	{ 0x1FC8, 0x1FCB },
    596 	{ 0x1FD8, 0x1FDB },
    597 	{ 0x1FE8, 0x1FEC },
    598 	{ 0x1FF8, 0x1FFB },
    599 	{ 0x210B, 0x210D },
    600 	{ 0x2110, 0x2112 },
    601 	{ 0x2119, 0x211D },
    602 	{ 0x212A, 0x212D },
    603 	{ 0x2130, 0x2133 },
    604 	{ 0x213E, 0x213F },
    605 	{ 0x2C00, 0x2C2E },
    606 	{ 0x2C62, 0x2C64 },
    607 	{ 0x2C6D, 0x2C70 },
    608 	{ 0x2C7E, 0x2C80 },
    609 	{ 0xA77D, 0xA77E },
    610 	{ 0xFF21, 0xFF3A },
    611 	{ 0x10400, 0x10427 },
    612 	{ 0x1D400, 0x1D419 },
    613 	{ 0x1D434, 0x1D44D },
    614 	{ 0x1D468, 0x1D481 },
    615 	{ 0x1D49E, 0x1D49F },
    616 	{ 0x1D4A5, 0x1D4A6 },
    617 	{ 0x1D4A9, 0x1D4AC },
    618 	{ 0x1D4AE, 0x1D4B5 },
    619 	{ 0x1D4D0, 0x1D4E9 },
    620 	{ 0x1D504, 0x1D505 },
    621 	{ 0x1D507, 0x1D50A },
    622 	{ 0x1D50D, 0x1D514 },
    623 	{ 0x1D516, 0x1D51C },
    624 	{ 0x1D538, 0x1D539 },
    625 	{ 0x1D53B, 0x1D53E },
    626 	{ 0x1D540, 0x1D544 },
    627 	{ 0x1D54A, 0x1D550 },
    628 	{ 0x1D56C, 0x1D585 },
    629 	{ 0x1D5A0, 0x1D5B9 },
    630 	{ 0x1D5D4, 0x1D5ED },
    631 	{ 0x1D608, 0x1D621 },
    632 	{ 0x1D63C, 0x1D655 },
    633 	{ 0x1D670, 0x1D689 },
    634 	{ 0x1D6A8, 0x1D6C0 },
    635 	{ 0x1D6E2, 0x1D6FA },
    636 	{ 0x1D71C, 0x1D734 },
    637 	{ 0x1D756, 0x1D76E },
    638 	{ 0x1D790, 0x1D7A8 },
    639 };
    640 
    641 static Rune upper1[] = {
    642 	0x0100,
    643 	0x0102,
    644 	0x0104,
    645 	0x0106,
    646 	0x0108,
    647 	0x010A,
    648 	0x010C,
    649 	0x010E,
    650 	0x0110,
    651 	0x0112,
    652 	0x0114,
    653 	0x0116,
    654 	0x0118,
    655 	0x011A,
    656 	0x011C,
    657 	0x011E,
    658 	0x0120,
    659 	0x0122,
    660 	0x0124,
    661 	0x0126,
    662 	0x0128,
    663 	0x012A,
    664 	0x012C,
    665 	0x012E,
    666 	0x0130,
    667 	0x0132,
    668 	0x0134,
    669 	0x0136,
    670 	0x0139,
    671 	0x013B,
    672 	0x013D,
    673 	0x013F,
    674 	0x0141,
    675 	0x0143,
    676 	0x0145,
    677 	0x0147,
    678 	0x014A,
    679 	0x014C,
    680 	0x014E,
    681 	0x0150,
    682 	0x0152,
    683 	0x0154,
    684 	0x0156,
    685 	0x0158,
    686 	0x015A,
    687 	0x015C,
    688 	0x015E,
    689 	0x0160,
    690 	0x0162,
    691 	0x0164,
    692 	0x0166,
    693 	0x0168,
    694 	0x016A,
    695 	0x016C,
    696 	0x016E,
    697 	0x0170,
    698 	0x0172,
    699 	0x0174,
    700 	0x0176,
    701 	0x017B,
    702 	0x017D,
    703 	0x0184,
    704 	0x01A2,
    705 	0x01A4,
    706 	0x01A9,
    707 	0x01AC,
    708 	0x01B5,
    709 	0x01BC,
    710 	0x01C4,
    711 	0x01C7,
    712 	0x01CA,
    713 	0x01CD,
    714 	0x01CF,
    715 	0x01D1,
    716 	0x01D3,
    717 	0x01D5,
    718 	0x01D7,
    719 	0x01D9,
    720 	0x01DB,
    721 	0x01DE,
    722 	0x01E0,
    723 	0x01E2,
    724 	0x01E4,
    725 	0x01E6,
    726 	0x01E8,
    727 	0x01EA,
    728 	0x01EC,
    729 	0x01EE,
    730 	0x01F1,
    731 	0x01F4,
    732 	0x01FA,
    733 	0x01FC,
    734 	0x01FE,
    735 	0x0200,
    736 	0x0202,
    737 	0x0204,
    738 	0x0206,
    739 	0x0208,
    740 	0x020A,
    741 	0x020C,
    742 	0x020E,
    743 	0x0210,
    744 	0x0212,
    745 	0x0214,
    746 	0x0216,
    747 	0x0218,
    748 	0x021A,
    749 	0x021C,
    750 	0x021E,
    751 	0x0220,
    752 	0x0222,
    753 	0x0224,
    754 	0x0226,
    755 	0x0228,
    756 	0x022A,
    757 	0x022C,
    758 	0x022E,
    759 	0x0230,
    760 	0x0232,
    761 	0x0241,
    762 	0x0248,
    763 	0x024A,
    764 	0x024C,
    765 	0x024E,
    766 	0x0370,
    767 	0x0372,
    768 	0x0376,
    769 	0x0386,
    770 	0x038C,
    771 	0x03CF,
    772 	0x03D8,
    773 	0x03DA,
    774 	0x03DC,
    775 	0x03DE,
    776 	0x03E0,
    777 	0x03E2,
    778 	0x03E4,
    779 	0x03E6,
    780 	0x03E8,
    781 	0x03EA,
    782 	0x03EC,
    783 	0x03EE,
    784 	0x03F4,
    785 	0x03F7,
    786 	0x0460,
    787 	0x0462,
    788 	0x0464,
    789 	0x0466,
    790 	0x0468,
    791 	0x046A,
    792 	0x046C,
    793 	0x046E,
    794 	0x0470,
    795 	0x0472,
    796 	0x0474,
    797 	0x0476,
    798 	0x0478,
    799 	0x047A,
    800 	0x047C,
    801 	0x047E,
    802 	0x0480,
    803 	0x048A,
    804 	0x048C,
    805 	0x048E,
    806 	0x0490,
    807 	0x0492,
    808 	0x0494,
    809 	0x0496,
    810 	0x0498,
    811 	0x049A,
    812 	0x049C,
    813 	0x049E,
    814 	0x04A0,
    815 	0x04A2,
    816 	0x04A4,
    817 	0x04A6,
    818 	0x04A8,
    819 	0x04AA,
    820 	0x04AC,
    821 	0x04AE,
    822 	0x04B0,
    823 	0x04B2,
    824 	0x04B4,
    825 	0x04B6,
    826 	0x04B8,
    827 	0x04BA,
    828 	0x04BC,
    829 	0x04BE,
    830 	0x04C3,
    831 	0x04C5,
    832 	0x04C7,
    833 	0x04C9,
    834 	0x04CB,
    835 	0x04CD,
    836 	0x04D0,
    837 	0x04D2,
    838 	0x04D4,
    839 	0x04D6,
    840 	0x04D8,
    841 	0x04DA,
    842 	0x04DC,
    843 	0x04DE,
    844 	0x04E0,
    845 	0x04E2,
    846 	0x04E4,
    847 	0x04E6,
    848 	0x04E8,
    849 	0x04EA,
    850 	0x04EC,
    851 	0x04EE,
    852 	0x04F0,
    853 	0x04F2,
    854 	0x04F4,
    855 	0x04F6,
    856 	0x04F8,
    857 	0x04FA,
    858 	0x04FC,
    859 	0x04FE,
    860 	0x0500,
    861 	0x0502,
    862 	0x0504,
    863 	0x0506,
    864 	0x0508,
    865 	0x050A,
    866 	0x050C,
    867 	0x050E,
    868 	0x0510,
    869 	0x0512,
    870 	0x0514,
    871 	0x0516,
    872 	0x0518,
    873 	0x051A,
    874 	0x051C,
    875 	0x051E,
    876 	0x0520,
    877 	0x0522,
    878 	0x0524,
    879 	0x0526,
    880 	0x10C7,
    881 	0x10CD,
    882 	0x1E00,
    883 	0x1E02,
    884 	0x1E04,
    885 	0x1E06,
    886 	0x1E08,
    887 	0x1E0A,
    888 	0x1E0C,
    889 	0x1E0E,
    890 	0x1E10,
    891 	0x1E12,
    892 	0x1E14,
    893 	0x1E16,
    894 	0x1E18,
    895 	0x1E1A,
    896 	0x1E1C,
    897 	0x1E1E,
    898 	0x1E20,
    899 	0x1E22,
    900 	0x1E24,
    901 	0x1E26,
    902 	0x1E28,
    903 	0x1E2A,
    904 	0x1E2C,
    905 	0x1E2E,
    906 	0x1E30,
    907 	0x1E32,
    908 	0x1E34,
    909 	0x1E36,
    910 	0x1E38,
    911 	0x1E3A,
    912 	0x1E3C,
    913 	0x1E3E,
    914 	0x1E40,
    915 	0x1E42,
    916 	0x1E44,
    917 	0x1E46,
    918 	0x1E48,
    919 	0x1E4A,
    920 	0x1E4C,
    921 	0x1E4E,
    922 	0x1E50,
    923 	0x1E52,
    924 	0x1E54,
    925 	0x1E56,
    926 	0x1E58,
    927 	0x1E5A,
    928 	0x1E5C,
    929 	0x1E5E,
    930 	0x1E60,
    931 	0x1E62,
    932 	0x1E64,
    933 	0x1E66,
    934 	0x1E68,
    935 	0x1E6A,
    936 	0x1E6C,
    937 	0x1E6E,
    938 	0x1E70,
    939 	0x1E72,
    940 	0x1E74,
    941 	0x1E76,
    942 	0x1E78,
    943 	0x1E7A,
    944 	0x1E7C,
    945 	0x1E7E,
    946 	0x1E80,
    947 	0x1E82,
    948 	0x1E84,
    949 	0x1E86,
    950 	0x1E88,
    951 	0x1E8A,
    952 	0x1E8C,
    953 	0x1E8E,
    954 	0x1E90,
    955 	0x1E92,
    956 	0x1E94,
    957 	0x1E9E,
    958 	0x1EA0,
    959 	0x1EA2,
    960 	0x1EA4,
    961 	0x1EA6,
    962 	0x1EA8,
    963 	0x1EAA,
    964 	0x1EAC,
    965 	0x1EAE,
    966 	0x1EB0,
    967 	0x1EB2,
    968 	0x1EB4,
    969 	0x1EB6,
    970 	0x1EB8,
    971 	0x1EBA,
    972 	0x1EBC,
    973 	0x1EBE,
    974 	0x1EC0,
    975 	0x1EC2,
    976 	0x1EC4,
    977 	0x1EC6,
    978 	0x1EC8,
    979 	0x1ECA,
    980 	0x1ECC,
    981 	0x1ECE,
    982 	0x1ED0,
    983 	0x1ED2,
    984 	0x1ED4,
    985 	0x1ED6,
    986 	0x1ED8,
    987 	0x1EDA,
    988 	0x1EDC,
    989 	0x1EDE,
    990 	0x1EE0,
    991 	0x1EE2,
    992 	0x1EE4,
    993 	0x1EE6,
    994 	0x1EE8,
    995 	0x1EEA,
    996 	0x1EEC,
    997 	0x1EEE,
    998 	0x1EF0,
    999 	0x1EF2,
   1000 	0x1EF4,
   1001 	0x1EF6,
   1002 	0x1EF8,
   1003 	0x1EFA,
   1004 	0x1EFC,
   1005 	0x1EFE,
   1006 	0x1F59,
   1007 	0x1F5B,
   1008 	0x1F5D,
   1009 	0x1F5F,
   1010 	0x2102,
   1011 	0x2107,
   1012 	0x2115,
   1013 	0x2124,
   1014 	0x2126,
   1015 	0x2128,
   1016 	0x2145,
   1017 	0x2183,
   1018 	0x2C60,
   1019 	0x2C67,
   1020 	0x2C69,
   1021 	0x2C6B,
   1022 	0x2C72,
   1023 	0x2C75,
   1024 	0x2C82,
   1025 	0x2C84,
   1026 	0x2C86,
   1027 	0x2C88,
   1028 	0x2C8A,
   1029 	0x2C8C,
   1030 	0x2C8E,
   1031 	0x2C90,
   1032 	0x2C92,
   1033 	0x2C94,
   1034 	0x2C96,
   1035 	0x2C98,
   1036 	0x2C9A,
   1037 	0x2C9C,
   1038 	0x2C9E,
   1039 	0x2CA0,
   1040 	0x2CA2,
   1041 	0x2CA4,
   1042 	0x2CA6,
   1043 	0x2CA8,
   1044 	0x2CAA,
   1045 	0x2CAC,
   1046 	0x2CAE,
   1047 	0x2CB0,
   1048 	0x2CB2,
   1049 	0x2CB4,
   1050 	0x2CB6,
   1051 	0x2CB8,
   1052 	0x2CBA,
   1053 	0x2CBC,
   1054 	0x2CBE,
   1055 	0x2CC0,
   1056 	0x2CC2,
   1057 	0x2CC4,
   1058 	0x2CC6,
   1059 	0x2CC8,
   1060 	0x2CCA,
   1061 	0x2CCC,
   1062 	0x2CCE,
   1063 	0x2CD0,
   1064 	0x2CD2,
   1065 	0x2CD4,
   1066 	0x2CD6,
   1067 	0x2CD8,
   1068 	0x2CDA,
   1069 	0x2CDC,
   1070 	0x2CDE,
   1071 	0x2CE0,
   1072 	0x2CE2,
   1073 	0x2CEB,
   1074 	0x2CED,
   1075 	0x2CF2,
   1076 	0xA640,
   1077 	0xA642,
   1078 	0xA644,
   1079 	0xA646,
   1080 	0xA648,
   1081 	0xA64A,
   1082 	0xA64C,
   1083 	0xA64E,
   1084 	0xA650,
   1085 	0xA652,
   1086 	0xA654,
   1087 	0xA656,
   1088 	0xA658,
   1089 	0xA65A,
   1090 	0xA65C,
   1091 	0xA65E,
   1092 	0xA660,
   1093 	0xA662,
   1094 	0xA664,
   1095 	0xA666,
   1096 	0xA668,
   1097 	0xA66A,
   1098 	0xA66C,
   1099 	0xA680,
   1100 	0xA682,
   1101 	0xA684,
   1102 	0xA686,
   1103 	0xA688,
   1104 	0xA68A,
   1105 	0xA68C,
   1106 	0xA68E,
   1107 	0xA690,
   1108 	0xA692,
   1109 	0xA694,
   1110 	0xA696,
   1111 	0xA722,
   1112 	0xA724,
   1113 	0xA726,
   1114 	0xA728,
   1115 	0xA72A,
   1116 	0xA72C,
   1117 	0xA72E,
   1118 	0xA732,
   1119 	0xA734,
   1120 	0xA736,
   1121 	0xA738,
   1122 	0xA73A,
   1123 	0xA73C,
   1124 	0xA73E,
   1125 	0xA740,
   1126 	0xA742,
   1127 	0xA744,
   1128 	0xA746,
   1129 	0xA748,
   1130 	0xA74A,
   1131 	0xA74C,
   1132 	0xA74E,
   1133 	0xA750,
   1134 	0xA752,
   1135 	0xA754,
   1136 	0xA756,
   1137 	0xA758,
   1138 	0xA75A,
   1139 	0xA75C,
   1140 	0xA75E,
   1141 	0xA760,
   1142 	0xA762,
   1143 	0xA764,
   1144 	0xA766,
   1145 	0xA768,
   1146 	0xA76A,
   1147 	0xA76C,
   1148 	0xA76E,
   1149 	0xA779,
   1150 	0xA77B,
   1151 	0xA780,
   1152 	0xA782,
   1153 	0xA784,
   1154 	0xA786,
   1155 	0xA78B,
   1156 	0xA78D,
   1157 	0xA790,
   1158 	0xA792,
   1159 	0xA7A0,
   1160 	0xA7A2,
   1161 	0xA7A4,
   1162 	0xA7A6,
   1163 	0xA7A8,
   1164 	0xA7AA,
   1165 	0x1D49C,
   1166 	0x1D4A2,
   1167 	0x1D546,
   1168 	0x1D7CA,
   1169 };
   1170 
   1171 int
   1172 isupperrune(Rune r)
   1173 {
   1174 	if(bsearch(&r, upper2, nelem(upper2), sizeof *upper2, &rune2cmp))
   1175 		return 1;
   1176 	if(bsearch(&r, upper1, nelem(upper1), sizeof *upper1, &rune1cmp))
   1177 		return 1;
   1178 	return 0;
   1179 }
   1180 
   1181 static Rune lower2[][2] = {
   1182 	{ 0x0061, 0x007A },
   1183 	{ 0x00DF, 0x00F6 },
   1184 	{ 0x00F8, 0x00FF },
   1185 	{ 0x0137, 0x0138 },
   1186 	{ 0x0148, 0x0149 },
   1187 	{ 0x017E, 0x0180 },
   1188 	{ 0x018C, 0x018D },
   1189 	{ 0x0199, 0x019B },
   1190 	{ 0x01AA, 0x01AB },
   1191 	{ 0x01B9, 0x01BA },
   1192 	{ 0x01BD, 0x01BF },
   1193 	{ 0x01DC, 0x01DD },
   1194 	{ 0x01EF, 0x01F0 },
   1195 	{ 0x0233, 0x0239 },
   1196 	{ 0x023F, 0x0240 },
   1197 	{ 0x024F, 0x0293 },
   1198 	{ 0x0295, 0x02AF },
   1199 	{ 0x037B, 0x037D },
   1200 	{ 0x03AC, 0x03CE },
   1201 	{ 0x03D0, 0x03D1 },
   1202 	{ 0x03D5, 0x03D7 },
   1203 	{ 0x03EF, 0x03F3 },
   1204 	{ 0x03FB, 0x03FC },
   1205 	{ 0x0430, 0x045F },
   1206 	{ 0x04CE, 0x04CF },
   1207 	{ 0x0561, 0x0587 },
   1208 	{ 0x1D00, 0x1D2B },
   1209 	{ 0x1D6B, 0x1D77 },
   1210 	{ 0x1D79, 0x1D9A },
   1211 	{ 0x1E95, 0x1E9D },
   1212 	{ 0x1EFF, 0x1F07 },
   1213 	{ 0x1F10, 0x1F15 },
   1214 	{ 0x1F20, 0x1F27 },
   1215 	{ 0x1F30, 0x1F37 },
   1216 	{ 0x1F40, 0x1F45 },
   1217 	{ 0x1F50, 0x1F57 },
   1218 	{ 0x1F60, 0x1F67 },
   1219 	{ 0x1F70, 0x1F7D },
   1220 	{ 0x1F80, 0x1F87 },
   1221 	{ 0x1F90, 0x1F97 },
   1222 	{ 0x1FA0, 0x1FA7 },
   1223 	{ 0x1FB0, 0x1FB4 },
   1224 	{ 0x1FB6, 0x1FB7 },
   1225 	{ 0x1FC2, 0x1FC4 },
   1226 	{ 0x1FC6, 0x1FC7 },
   1227 	{ 0x1FD0, 0x1FD3 },
   1228 	{ 0x1FD6, 0x1FD7 },
   1229 	{ 0x1FE0, 0x1FE7 },
   1230 	{ 0x1FF2, 0x1FF4 },
   1231 	{ 0x1FF6, 0x1FF7 },
   1232 	{ 0x210E, 0x210F },
   1233 	{ 0x213C, 0x213D },
   1234 	{ 0x2146, 0x2149 },
   1235 	{ 0x2C30, 0x2C5E },
   1236 	{ 0x2C65, 0x2C66 },
   1237 	{ 0x2C73, 0x2C74 },
   1238 	{ 0x2C76, 0x2C7B },
   1239 	{ 0x2CE3, 0x2CE4 },
   1240 	{ 0x2D00, 0x2D25 },
   1241 	{ 0xA72F, 0xA731 },
   1242 	{ 0xA771, 0xA778 },
   1243 	{ 0xFB00, 0xFB06 },
   1244 	{ 0xFB13, 0xFB17 },
   1245 	{ 0xFF41, 0xFF5A },
   1246 	{ 0x10428, 0x1044F },
   1247 	{ 0x1D41A, 0x1D433 },
   1248 	{ 0x1D44E, 0x1D454 },
   1249 	{ 0x1D456, 0x1D467 },
   1250 	{ 0x1D482, 0x1D49B },
   1251 	{ 0x1D4B6, 0x1D4B9 },
   1252 	{ 0x1D4BD, 0x1D4C3 },
   1253 	{ 0x1D4C5, 0x1D4CF },
   1254 	{ 0x1D4EA, 0x1D503 },
   1255 	{ 0x1D51E, 0x1D537 },
   1256 	{ 0x1D552, 0x1D56B },
   1257 	{ 0x1D586, 0x1D59F },
   1258 	{ 0x1D5BA, 0x1D5D3 },
   1259 	{ 0x1D5EE, 0x1D607 },
   1260 	{ 0x1D622, 0x1D63B },
   1261 	{ 0x1D656, 0x1D66F },
   1262 	{ 0x1D68A, 0x1D6A5 },
   1263 	{ 0x1D6C2, 0x1D6DA },
   1264 	{ 0x1D6DC, 0x1D6E1 },
   1265 	{ 0x1D6FC, 0x1D714 },
   1266 	{ 0x1D716, 0x1D71B },
   1267 	{ 0x1D736, 0x1D74E },
   1268 	{ 0x1D750, 0x1D755 },
   1269 	{ 0x1D770, 0x1D788 },
   1270 	{ 0x1D78A, 0x1D78F },
   1271 	{ 0x1D7AA, 0x1D7C2 },
   1272 	{ 0x1D7C4, 0x1D7C9 },
   1273 };
   1274 
   1275 static Rune lower1[] = {
   1276 	0x00B5,
   1277 	0x0101,
   1278 	0x0103,
   1279 	0x0105,
   1280 	0x0107,
   1281 	0x0109,
   1282 	0x010B,
   1283 	0x010D,
   1284 	0x010F,
   1285 	0x0111,
   1286 	0x0113,
   1287 	0x0115,
   1288 	0x0117,
   1289 	0x0119,
   1290 	0x011B,
   1291 	0x011D,
   1292 	0x011F,
   1293 	0x0121,
   1294 	0x0123,
   1295 	0x0125,
   1296 	0x0127,
   1297 	0x0129,
   1298 	0x012B,
   1299 	0x012D,
   1300 	0x012F,
   1301 	0x0131,
   1302 	0x0133,
   1303 	0x0135,
   1304 	0x013A,
   1305 	0x013C,
   1306 	0x013E,
   1307 	0x0140,
   1308 	0x0142,
   1309 	0x0144,
   1310 	0x0146,
   1311 	0x014B,
   1312 	0x014D,
   1313 	0x014F,
   1314 	0x0151,
   1315 	0x0153,
   1316 	0x0155,
   1317 	0x0157,
   1318 	0x0159,
   1319 	0x015B,
   1320 	0x015D,
   1321 	0x015F,
   1322 	0x0161,
   1323 	0x0163,
   1324 	0x0165,
   1325 	0x0167,
   1326 	0x0169,
   1327 	0x016B,
   1328 	0x016D,
   1329 	0x016F,
   1330 	0x0171,
   1331 	0x0173,
   1332 	0x0175,
   1333 	0x0177,
   1334 	0x017A,
   1335 	0x017C,
   1336 	0x0183,
   1337 	0x0185,
   1338 	0x0188,
   1339 	0x0192,
   1340 	0x0195,
   1341 	0x019E,
   1342 	0x01A1,
   1343 	0x01A3,
   1344 	0x01A5,
   1345 	0x01A8,
   1346 	0x01AD,
   1347 	0x01B0,
   1348 	0x01B4,
   1349 	0x01B6,
   1350 	0x01C6,
   1351 	0x01C9,
   1352 	0x01CC,
   1353 	0x01CE,
   1354 	0x01D0,
   1355 	0x01D2,
   1356 	0x01D4,
   1357 	0x01D6,
   1358 	0x01D8,
   1359 	0x01DA,
   1360 	0x01DF,
   1361 	0x01E1,
   1362 	0x01E3,
   1363 	0x01E5,
   1364 	0x01E7,
   1365 	0x01E9,
   1366 	0x01EB,
   1367 	0x01ED,
   1368 	0x01F3,
   1369 	0x01F5,
   1370 	0x01F9,
   1371 	0x01FB,
   1372 	0x01FD,
   1373 	0x01FF,
   1374 	0x0201,
   1375 	0x0203,
   1376 	0x0205,
   1377 	0x0207,
   1378 	0x0209,
   1379 	0x020B,
   1380 	0x020D,
   1381 	0x020F,
   1382 	0x0211,
   1383 	0x0213,
   1384 	0x0215,
   1385 	0x0217,
   1386 	0x0219,
   1387 	0x021B,
   1388 	0x021D,
   1389 	0x021F,
   1390 	0x0221,
   1391 	0x0223,
   1392 	0x0225,
   1393 	0x0227,
   1394 	0x0229,
   1395 	0x022B,
   1396 	0x022D,
   1397 	0x022F,
   1398 	0x0231,
   1399 	0x023C,
   1400 	0x0242,
   1401 	0x0247,
   1402 	0x0249,
   1403 	0x024B,
   1404 	0x024D,
   1405 	0x0371,
   1406 	0x0373,
   1407 	0x0377,
   1408 	0x0390,
   1409 	0x03D9,
   1410 	0x03DB,
   1411 	0x03DD,
   1412 	0x03DF,
   1413 	0x03E1,
   1414 	0x03E3,
   1415 	0x03E5,
   1416 	0x03E7,
   1417 	0x03E9,
   1418 	0x03EB,
   1419 	0x03ED,
   1420 	0x03F5,
   1421 	0x03F8,
   1422 	0x0461,
   1423 	0x0463,
   1424 	0x0465,
   1425 	0x0467,
   1426 	0x0469,
   1427 	0x046B,
   1428 	0x046D,
   1429 	0x046F,
   1430 	0x0471,
   1431 	0x0473,
   1432 	0x0475,
   1433 	0x0477,
   1434 	0x0479,
   1435 	0x047B,
   1436 	0x047D,
   1437 	0x047F,
   1438 	0x0481,
   1439 	0x048B,
   1440 	0x048D,
   1441 	0x048F,
   1442 	0x0491,
   1443 	0x0493,
   1444 	0x0495,
   1445 	0x0497,
   1446 	0x0499,
   1447 	0x049B,
   1448 	0x049D,
   1449 	0x049F,
   1450 	0x04A1,
   1451 	0x04A3,
   1452 	0x04A5,
   1453 	0x04A7,
   1454 	0x04A9,
   1455 	0x04AB,
   1456 	0x04AD,
   1457 	0x04AF,
   1458 	0x04B1,
   1459 	0x04B3,
   1460 	0x04B5,
   1461 	0x04B7,
   1462 	0x04B9,
   1463 	0x04BB,
   1464 	0x04BD,
   1465 	0x04BF,
   1466 	0x04C2,
   1467 	0x04C4,
   1468 	0x04C6,
   1469 	0x04C8,
   1470 	0x04CA,
   1471 	0x04CC,
   1472 	0x04D1,
   1473 	0x04D3,
   1474 	0x04D5,
   1475 	0x04D7,
   1476 	0x04D9,
   1477 	0x04DB,
   1478 	0x04DD,
   1479 	0x04DF,
   1480 	0x04E1,
   1481 	0x04E3,
   1482 	0x04E5,
   1483 	0x04E7,
   1484 	0x04E9,
   1485 	0x04EB,
   1486 	0x04ED,
   1487 	0x04EF,
   1488 	0x04F1,
   1489 	0x04F3,
   1490 	0x04F5,
   1491 	0x04F7,
   1492 	0x04F9,
   1493 	0x04FB,
   1494 	0x04FD,
   1495 	0x04FF,
   1496 	0x0501,
   1497 	0x0503,
   1498 	0x0505,
   1499 	0x0507,
   1500 	0x0509,
   1501 	0x050B,
   1502 	0x050D,
   1503 	0x050F,
   1504 	0x0511,
   1505 	0x0513,
   1506 	0x0515,
   1507 	0x0517,
   1508 	0x0519,
   1509 	0x051B,
   1510 	0x051D,
   1511 	0x051F,
   1512 	0x0521,
   1513 	0x0523,
   1514 	0x0525,
   1515 	0x0527,
   1516 	0x1E01,
   1517 	0x1E03,
   1518 	0x1E05,
   1519 	0x1E07,
   1520 	0x1E09,
   1521 	0x1E0B,
   1522 	0x1E0D,
   1523 	0x1E0F,
   1524 	0x1E11,
   1525 	0x1E13,
   1526 	0x1E15,
   1527 	0x1E17,
   1528 	0x1E19,
   1529 	0x1E1B,
   1530 	0x1E1D,
   1531 	0x1E1F,
   1532 	0x1E21,
   1533 	0x1E23,
   1534 	0x1E25,
   1535 	0x1E27,
   1536 	0x1E29,
   1537 	0x1E2B,
   1538 	0x1E2D,
   1539 	0x1E2F,
   1540 	0x1E31,
   1541 	0x1E33,
   1542 	0x1E35,
   1543 	0x1E37,
   1544 	0x1E39,
   1545 	0x1E3B,
   1546 	0x1E3D,
   1547 	0x1E3F,
   1548 	0x1E41,
   1549 	0x1E43,
   1550 	0x1E45,
   1551 	0x1E47,
   1552 	0x1E49,
   1553 	0x1E4B,
   1554 	0x1E4D,
   1555 	0x1E4F,
   1556 	0x1E51,
   1557 	0x1E53,
   1558 	0x1E55,
   1559 	0x1E57,
   1560 	0x1E59,
   1561 	0x1E5B,
   1562 	0x1E5D,
   1563 	0x1E5F,
   1564 	0x1E61,
   1565 	0x1E63,
   1566 	0x1E65,
   1567 	0x1E67,
   1568 	0x1E69,
   1569 	0x1E6B,
   1570 	0x1E6D,
   1571 	0x1E6F,
   1572 	0x1E71,
   1573 	0x1E73,
   1574 	0x1E75,
   1575 	0x1E77,
   1576 	0x1E79,
   1577 	0x1E7B,
   1578 	0x1E7D,
   1579 	0x1E7F,
   1580 	0x1E81,
   1581 	0x1E83,
   1582 	0x1E85,
   1583 	0x1E87,
   1584 	0x1E89,
   1585 	0x1E8B,
   1586 	0x1E8D,
   1587 	0x1E8F,
   1588 	0x1E91,
   1589 	0x1E93,
   1590 	0x1E9F,
   1591 	0x1EA1,
   1592 	0x1EA3,
   1593 	0x1EA5,
   1594 	0x1EA7,
   1595 	0x1EA9,
   1596 	0x1EAB,
   1597 	0x1EAD,
   1598 	0x1EAF,
   1599 	0x1EB1,
   1600 	0x1EB3,
   1601 	0x1EB5,
   1602 	0x1EB7,
   1603 	0x1EB9,
   1604 	0x1EBB,
   1605 	0x1EBD,
   1606 	0x1EBF,
   1607 	0x1EC1,
   1608 	0x1EC3,
   1609 	0x1EC5,
   1610 	0x1EC7,
   1611 	0x1EC9,
   1612 	0x1ECB,
   1613 	0x1ECD,
   1614 	0x1ECF,
   1615 	0x1ED1,
   1616 	0x1ED3,
   1617 	0x1ED5,
   1618 	0x1ED7,
   1619 	0x1ED9,
   1620 	0x1EDB,
   1621 	0x1EDD,
   1622 	0x1EDF,
   1623 	0x1EE1,
   1624 	0x1EE3,
   1625 	0x1EE5,
   1626 	0x1EE7,
   1627 	0x1EE9,
   1628 	0x1EEB,
   1629 	0x1EED,
   1630 	0x1EEF,
   1631 	0x1EF1,
   1632 	0x1EF3,
   1633 	0x1EF5,
   1634 	0x1EF7,
   1635 	0x1EF9,
   1636 	0x1EFB,
   1637 	0x1EFD,
   1638 	0x1FBE,
   1639 	0x210A,
   1640 	0x2113,
   1641 	0x212F,
   1642 	0x2134,
   1643 	0x2139,
   1644 	0x214E,
   1645 	0x2184,
   1646 	0x2C61,
   1647 	0x2C68,
   1648 	0x2C6A,
   1649 	0x2C6C,
   1650 	0x2C71,
   1651 	0x2C81,
   1652 	0x2C83,
   1653 	0x2C85,
   1654 	0x2C87,
   1655 	0x2C89,
   1656 	0x2C8B,
   1657 	0x2C8D,
   1658 	0x2C8F,
   1659 	0x2C91,
   1660 	0x2C93,
   1661 	0x2C95,
   1662 	0x2C97,
   1663 	0x2C99,
   1664 	0x2C9B,
   1665 	0x2C9D,
   1666 	0x2C9F,
   1667 	0x2CA1,
   1668 	0x2CA3,
   1669 	0x2CA5,
   1670 	0x2CA7,
   1671 	0x2CA9,
   1672 	0x2CAB,
   1673 	0x2CAD,
   1674 	0x2CAF,
   1675 	0x2CB1,
   1676 	0x2CB3,
   1677 	0x2CB5,
   1678 	0x2CB7,
   1679 	0x2CB9,
   1680 	0x2CBB,
   1681 	0x2CBD,
   1682 	0x2CBF,
   1683 	0x2CC1,
   1684 	0x2CC3,
   1685 	0x2CC5,
   1686 	0x2CC7,
   1687 	0x2CC9,
   1688 	0x2CCB,
   1689 	0x2CCD,
   1690 	0x2CCF,
   1691 	0x2CD1,
   1692 	0x2CD3,
   1693 	0x2CD5,
   1694 	0x2CD7,
   1695 	0x2CD9,
   1696 	0x2CDB,
   1697 	0x2CDD,
   1698 	0x2CDF,
   1699 	0x2CE1,
   1700 	0x2CEC,
   1701 	0x2CEE,
   1702 	0x2CF3,
   1703 	0x2D27,
   1704 	0x2D2D,
   1705 	0xA641,
   1706 	0xA643,
   1707 	0xA645,
   1708 	0xA647,
   1709 	0xA649,
   1710 	0xA64B,
   1711 	0xA64D,
   1712 	0xA64F,
   1713 	0xA651,
   1714 	0xA653,
   1715 	0xA655,
   1716 	0xA657,
   1717 	0xA659,
   1718 	0xA65B,
   1719 	0xA65D,
   1720 	0xA65F,
   1721 	0xA661,
   1722 	0xA663,
   1723 	0xA665,
   1724 	0xA667,
   1725 	0xA669,
   1726 	0xA66B,
   1727 	0xA66D,
   1728 	0xA681,
   1729 	0xA683,
   1730 	0xA685,
   1731 	0xA687,
   1732 	0xA689,
   1733 	0xA68B,
   1734 	0xA68D,
   1735 	0xA68F,
   1736 	0xA691,
   1737 	0xA693,
   1738 	0xA695,
   1739 	0xA697,
   1740 	0xA723,
   1741 	0xA725,
   1742 	0xA727,
   1743 	0xA729,
   1744 	0xA72B,
   1745 	0xA72D,
   1746 	0xA733,
   1747 	0xA735,
   1748 	0xA737,
   1749 	0xA739,
   1750 	0xA73B,
   1751 	0xA73D,
   1752 	0xA73F,
   1753 	0xA741,
   1754 	0xA743,
   1755 	0xA745,
   1756 	0xA747,
   1757 	0xA749,
   1758 	0xA74B,
   1759 	0xA74D,
   1760 	0xA74F,
   1761 	0xA751,
   1762 	0xA753,
   1763 	0xA755,
   1764 	0xA757,
   1765 	0xA759,
   1766 	0xA75B,
   1767 	0xA75D,
   1768 	0xA75F,
   1769 	0xA761,
   1770 	0xA763,
   1771 	0xA765,
   1772 	0xA767,
   1773 	0xA769,
   1774 	0xA76B,
   1775 	0xA76D,
   1776 	0xA76F,
   1777 	0xA77A,
   1778 	0xA77C,
   1779 	0xA77F,
   1780 	0xA781,
   1781 	0xA783,
   1782 	0xA785,
   1783 	0xA787,
   1784 	0xA78C,
   1785 	0xA78E,
   1786 	0xA791,
   1787 	0xA793,
   1788 	0xA7A1,
   1789 	0xA7A3,
   1790 	0xA7A5,
   1791 	0xA7A7,
   1792 	0xA7A9,
   1793 	0xA7FA,
   1794 	0x1D4BB,
   1795 	0x1D7CB,
   1796 };
   1797 
   1798 int
   1799 islowerrune(Rune r)
   1800 {
   1801 	if(bsearch(&r, lower2, nelem(lower2), sizeof *lower2, &rune2cmp))
   1802 		return 1;
   1803 	if(bsearch(&r, lower1, nelem(lower1), sizeof *lower1, &rune1cmp))
   1804 		return 1;
   1805 	return 0;
   1806 }
   1807 
   1808 static Rune title2[][2] = {
   1809 	{ 0x1F88, 0x1F8F },
   1810 	{ 0x1F98, 0x1F9F },
   1811 	{ 0x1FA8, 0x1FAF },
   1812 };
   1813 
   1814 static Rune title1[] = {
   1815 	0x01C5,
   1816 	0x01C8,
   1817 	0x01CB,
   1818 	0x01F2,
   1819 	0x1FBC,
   1820 	0x1FCC,
   1821 	0x1FFC,
   1822 };
   1823 
   1824 int
   1825 istitlerune(Rune r)
   1826 {
   1827 	if(bsearch(&r, title2, nelem(title2), sizeof *title2, &rune2cmp))
   1828 		return 1;
   1829 	if(bsearch(&r, title1, nelem(title1), sizeof *title1, &rune1cmp))
   1830 		return 1;
   1831 	return 0;
   1832 }
   1833 
   1834 static Rune digit2[][2] = {
   1835 	{ 0x0030, 0x0039 },
   1836 	{ 0x0660, 0x0669 },
   1837 	{ 0x06F0, 0x06F9 },
   1838 	{ 0x07C0, 0x07C9 },
   1839 	{ 0x0966, 0x096F },
   1840 	{ 0x09E6, 0x09EF },
   1841 	{ 0x0A66, 0x0A6F },
   1842 	{ 0x0AE6, 0x0AEF },
   1843 	{ 0x0B66, 0x0B6F },
   1844 	{ 0x0BE6, 0x0BEF },
   1845 	{ 0x0C66, 0x0C6F },
   1846 	{ 0x0CE6, 0x0CEF },
   1847 	{ 0x0D66, 0x0D6F },
   1848 	{ 0x0E50, 0x0E59 },
   1849 	{ 0x0ED0, 0x0ED9 },
   1850 	{ 0x0F20, 0x0F29 },
   1851 	{ 0x1040, 0x1049 },
   1852 	{ 0x1090, 0x1099 },
   1853 	{ 0x17E0, 0x17E9 },
   1854 	{ 0x1810, 0x1819 },
   1855 	{ 0x1946, 0x194F },
   1856 	{ 0x19D0, 0x19D9 },
   1857 	{ 0x1A80, 0x1A89 },
   1858 	{ 0x1A90, 0x1A99 },
   1859 	{ 0x1B50, 0x1B59 },
   1860 	{ 0x1BB0, 0x1BB9 },
   1861 	{ 0x1C40, 0x1C49 },
   1862 	{ 0x1C50, 0x1C59 },
   1863 	{ 0xA620, 0xA629 },
   1864 	{ 0xA8D0, 0xA8D9 },
   1865 	{ 0xA900, 0xA909 },
   1866 	{ 0xA9D0, 0xA9D9 },
   1867 	{ 0xAA50, 0xAA59 },
   1868 	{ 0xABF0, 0xABF9 },
   1869 	{ 0xFF10, 0xFF19 },
   1870 	{ 0x104A0, 0x104A9 },
   1871 	{ 0x11066, 0x1106F },
   1872 	{ 0x110F0, 0x110F9 },
   1873 	{ 0x11136, 0x1113F },
   1874 	{ 0x111D0, 0x111D9 },
   1875 	{ 0x116C0, 0x116C9 },
   1876 	{ 0x1D7CE, 0x1D7FF },
   1877 };
   1878 
   1879 int
   1880 isdigitrune(Rune r)
   1881 {
   1882 	if(bsearch(&r, digit2, nelem(digit2), sizeof *digit2, &rune2cmp))
   1883 		return 1;
   1884 	return 0;
   1885 }
   1886