github.com/varialus/godfly@v0.0.0-20130904042352-1934f9f095ab/src/lib9/utf/runetypebody-6.2.0.h (about) 1 /* generated automatically by mkrunetype.c from UnicodeData-6.2.0.txt */ 2 3 static Rune __isspacer[] = { 4 0x0009, 0x000d, 5 0x0020, 0x0020, 6 0x0085, 0x0085, 7 0x00a0, 0x00a0, 8 0x1680, 0x1680, 9 0x180e, 0x180e, 10 0x2000, 0x200a, 11 0x2028, 0x2029, 12 0x202f, 0x202f, 13 0x205f, 0x205f, 14 0x3000, 0x3000, 15 0xfeff, 0xfeff, 16 }; 17 18 int 19 isspacerune(Rune c) 20 { 21 Rune *p; 22 23 p = rbsearch(c, __isspacer, nelem(__isspacer)/2, 2); 24 if(p && c >= p[0] && c <= p[1]) 25 return 1; 26 return 0; 27 } 28 29 static Rune __isdigitr[] = { 30 0x0030, 0x0039, 31 0x0660, 0x0669, 32 0x06f0, 0x06f9, 33 0x07c0, 0x07c9, 34 0x0966, 0x096f, 35 0x09e6, 0x09ef, 36 0x0a66, 0x0a6f, 37 0x0ae6, 0x0aef, 38 0x0b66, 0x0b6f, 39 0x0be6, 0x0bef, 40 0x0c66, 0x0c6f, 41 0x0ce6, 0x0cef, 42 0x0d66, 0x0d6f, 43 0x0e50, 0x0e59, 44 0x0ed0, 0x0ed9, 45 0x0f20, 0x0f29, 46 0x1040, 0x1049, 47 0x1090, 0x1099, 48 0x17e0, 0x17e9, 49 0x1810, 0x1819, 50 0x1946, 0x194f, 51 0x19d0, 0x19d9, 52 0x1a80, 0x1a89, 53 0x1a90, 0x1a99, 54 0x1b50, 0x1b59, 55 0x1bb0, 0x1bb9, 56 0x1c40, 0x1c49, 57 0x1c50, 0x1c59, 58 0xa620, 0xa629, 59 0xa8d0, 0xa8d9, 60 0xa900, 0xa909, 61 0xa9d0, 0xa9d9, 62 0xaa50, 0xaa59, 63 0xabf0, 0xabf9, 64 0xff10, 0xff19, 65 0x104a0, 0x104a9, 66 0x11066, 0x1106f, 67 0x110f0, 0x110f9, 68 0x11136, 0x1113f, 69 0x111d0, 0x111d9, 70 0x116c0, 0x116c9, 71 0x1d7ce, 0x1d7ff, 72 }; 73 74 int 75 isdigitrune(Rune c) 76 { 77 Rune *p; 78 79 p = rbsearch(c, __isdigitr, nelem(__isdigitr)/2, 2); 80 if(p && c >= p[0] && c <= p[1]) 81 return 1; 82 return 0; 83 } 84 85 static Rune __isalphar[] = { 86 0x0041, 0x005a, 87 0x0061, 0x007a, 88 0x00c0, 0x00d6, 89 0x00d8, 0x00f6, 90 0x00f8, 0x02c1, 91 0x02c6, 0x02d1, 92 0x02e0, 0x02e4, 93 0x0370, 0x0374, 94 0x0376, 0x0377, 95 0x037a, 0x037d, 96 0x0388, 0x038a, 97 0x038e, 0x03a1, 98 0x03a3, 0x03f5, 99 0x03f7, 0x0481, 100 0x048a, 0x0527, 101 0x0531, 0x0556, 102 0x0561, 0x0587, 103 0x05d0, 0x05ea, 104 0x05f0, 0x05f2, 105 0x0620, 0x064a, 106 0x066e, 0x066f, 107 0x0671, 0x06d3, 108 0x06e5, 0x06e6, 109 0x06ee, 0x06ef, 110 0x06fa, 0x06fc, 111 0x0712, 0x072f, 112 0x074d, 0x07a5, 113 0x07ca, 0x07ea, 114 0x07f4, 0x07f5, 115 0x0800, 0x0815, 116 0x0840, 0x0858, 117 0x08a2, 0x08ac, 118 0x0904, 0x0939, 119 0x0958, 0x0961, 120 0x0971, 0x0977, 121 0x0979, 0x097f, 122 0x0985, 0x098c, 123 0x098f, 0x0990, 124 0x0993, 0x09a8, 125 0x09aa, 0x09b0, 126 0x09b6, 0x09b9, 127 0x09dc, 0x09dd, 128 0x09df, 0x09e1, 129 0x09f0, 0x09f1, 130 0x0a05, 0x0a0a, 131 0x0a0f, 0x0a10, 132 0x0a13, 0x0a28, 133 0x0a2a, 0x0a30, 134 0x0a32, 0x0a33, 135 0x0a35, 0x0a36, 136 0x0a38, 0x0a39, 137 0x0a59, 0x0a5c, 138 0x0a72, 0x0a74, 139 0x0a85, 0x0a8d, 140 0x0a8f, 0x0a91, 141 0x0a93, 0x0aa8, 142 0x0aaa, 0x0ab0, 143 0x0ab2, 0x0ab3, 144 0x0ab5, 0x0ab9, 145 0x0ae0, 0x0ae1, 146 0x0b05, 0x0b0c, 147 0x0b0f, 0x0b10, 148 0x0b13, 0x0b28, 149 0x0b2a, 0x0b30, 150 0x0b32, 0x0b33, 151 0x0b35, 0x0b39, 152 0x0b5c, 0x0b5d, 153 0x0b5f, 0x0b61, 154 0x0b85, 0x0b8a, 155 0x0b8e, 0x0b90, 156 0x0b92, 0x0b95, 157 0x0b99, 0x0b9a, 158 0x0b9e, 0x0b9f, 159 0x0ba3, 0x0ba4, 160 0x0ba8, 0x0baa, 161 0x0bae, 0x0bb9, 162 0x0c05, 0x0c0c, 163 0x0c0e, 0x0c10, 164 0x0c12, 0x0c28, 165 0x0c2a, 0x0c33, 166 0x0c35, 0x0c39, 167 0x0c58, 0x0c59, 168 0x0c60, 0x0c61, 169 0x0c85, 0x0c8c, 170 0x0c8e, 0x0c90, 171 0x0c92, 0x0ca8, 172 0x0caa, 0x0cb3, 173 0x0cb5, 0x0cb9, 174 0x0ce0, 0x0ce1, 175 0x0cf1, 0x0cf2, 176 0x0d05, 0x0d0c, 177 0x0d0e, 0x0d10, 178 0x0d12, 0x0d3a, 179 0x0d60, 0x0d61, 180 0x0d7a, 0x0d7f, 181 0x0d85, 0x0d96, 182 0x0d9a, 0x0db1, 183 0x0db3, 0x0dbb, 184 0x0dc0, 0x0dc6, 185 0x0e01, 0x0e30, 186 0x0e32, 0x0e33, 187 0x0e40, 0x0e46, 188 0x0e81, 0x0e82, 189 0x0e87, 0x0e88, 190 0x0e94, 0x0e97, 191 0x0e99, 0x0e9f, 192 0x0ea1, 0x0ea3, 193 0x0eaa, 0x0eab, 194 0x0ead, 0x0eb0, 195 0x0eb2, 0x0eb3, 196 0x0ec0, 0x0ec4, 197 0x0edc, 0x0edf, 198 0x0f40, 0x0f47, 199 0x0f49, 0x0f6c, 200 0x0f88, 0x0f8c, 201 0x1000, 0x102a, 202 0x1050, 0x1055, 203 0x105a, 0x105d, 204 0x1065, 0x1066, 205 0x106e, 0x1070, 206 0x1075, 0x1081, 207 0x10a0, 0x10c5, 208 0x10d0, 0x10fa, 209 0x10fc, 0x1248, 210 0x124a, 0x124d, 211 0x1250, 0x1256, 212 0x125a, 0x125d, 213 0x1260, 0x1288, 214 0x128a, 0x128d, 215 0x1290, 0x12b0, 216 0x12b2, 0x12b5, 217 0x12b8, 0x12be, 218 0x12c2, 0x12c5, 219 0x12c8, 0x12d6, 220 0x12d8, 0x1310, 221 0x1312, 0x1315, 222 0x1318, 0x135a, 223 0x1380, 0x138f, 224 0x13a0, 0x13f4, 225 0x1401, 0x166c, 226 0x166f, 0x167f, 227 0x1681, 0x169a, 228 0x16a0, 0x16ea, 229 0x1700, 0x170c, 230 0x170e, 0x1711, 231 0x1720, 0x1731, 232 0x1740, 0x1751, 233 0x1760, 0x176c, 234 0x176e, 0x1770, 235 0x1780, 0x17b3, 236 0x1820, 0x1877, 237 0x1880, 0x18a8, 238 0x18b0, 0x18f5, 239 0x1900, 0x191c, 240 0x1950, 0x196d, 241 0x1970, 0x1974, 242 0x1980, 0x19ab, 243 0x19c1, 0x19c7, 244 0x1a00, 0x1a16, 245 0x1a20, 0x1a54, 246 0x1b05, 0x1b33, 247 0x1b45, 0x1b4b, 248 0x1b83, 0x1ba0, 249 0x1bae, 0x1baf, 250 0x1bba, 0x1be5, 251 0x1c00, 0x1c23, 252 0x1c4d, 0x1c4f, 253 0x1c5a, 0x1c7d, 254 0x1ce9, 0x1cec, 255 0x1cee, 0x1cf1, 256 0x1cf5, 0x1cf6, 257 0x1d00, 0x1dbf, 258 0x1e00, 0x1f15, 259 0x1f18, 0x1f1d, 260 0x1f20, 0x1f45, 261 0x1f48, 0x1f4d, 262 0x1f50, 0x1f57, 263 0x1f5f, 0x1f7d, 264 0x1f80, 0x1fb4, 265 0x1fb6, 0x1fbc, 266 0x1fc2, 0x1fc4, 267 0x1fc6, 0x1fcc, 268 0x1fd0, 0x1fd3, 269 0x1fd6, 0x1fdb, 270 0x1fe0, 0x1fec, 271 0x1ff2, 0x1ff4, 272 0x1ff6, 0x1ffc, 273 0x2090, 0x209c, 274 0x210a, 0x2113, 275 0x2119, 0x211d, 276 0x212a, 0x212d, 277 0x212f, 0x2139, 278 0x213c, 0x213f, 279 0x2145, 0x2149, 280 0x2183, 0x2184, 281 0x2c00, 0x2c2e, 282 0x2c30, 0x2c5e, 283 0x2c60, 0x2ce4, 284 0x2ceb, 0x2cee, 285 0x2cf2, 0x2cf3, 286 0x2d00, 0x2d25, 287 0x2d30, 0x2d67, 288 0x2d80, 0x2d96, 289 0x2da0, 0x2da6, 290 0x2da8, 0x2dae, 291 0x2db0, 0x2db6, 292 0x2db8, 0x2dbe, 293 0x2dc0, 0x2dc6, 294 0x2dc8, 0x2dce, 295 0x2dd0, 0x2dd6, 296 0x2dd8, 0x2dde, 297 0x3005, 0x3006, 298 0x3031, 0x3035, 299 0x303b, 0x303c, 300 0x3041, 0x3096, 301 0x309d, 0x309f, 302 0x30a1, 0x30fa, 303 0x30fc, 0x30ff, 304 0x3105, 0x312d, 305 0x3131, 0x318e, 306 0x31a0, 0x31ba, 307 0x31f0, 0x31ff, 308 0x3400, 0x4db5, 309 0x4e00, 0x9fcc, 310 0xa000, 0xa48c, 311 0xa4d0, 0xa4fd, 312 0xa500, 0xa60c, 313 0xa610, 0xa61f, 314 0xa62a, 0xa62b, 315 0xa640, 0xa66e, 316 0xa67f, 0xa697, 317 0xa6a0, 0xa6e5, 318 0xa717, 0xa71f, 319 0xa722, 0xa788, 320 0xa78b, 0xa78e, 321 0xa790, 0xa793, 322 0xa7a0, 0xa7aa, 323 0xa7f8, 0xa801, 324 0xa803, 0xa805, 325 0xa807, 0xa80a, 326 0xa80c, 0xa822, 327 0xa840, 0xa873, 328 0xa882, 0xa8b3, 329 0xa8f2, 0xa8f7, 330 0xa90a, 0xa925, 331 0xa930, 0xa946, 332 0xa960, 0xa97c, 333 0xa984, 0xa9b2, 334 0xaa00, 0xaa28, 335 0xaa40, 0xaa42, 336 0xaa44, 0xaa4b, 337 0xaa60, 0xaa76, 338 0xaa80, 0xaaaf, 339 0xaab5, 0xaab6, 340 0xaab9, 0xaabd, 341 0xaadb, 0xaadd, 342 0xaae0, 0xaaea, 343 0xaaf2, 0xaaf4, 344 0xab01, 0xab06, 345 0xab09, 0xab0e, 346 0xab11, 0xab16, 347 0xab20, 0xab26, 348 0xab28, 0xab2e, 349 0xabc0, 0xabe2, 350 0xac00, 0xd7a3, 351 0xd7b0, 0xd7c6, 352 0xd7cb, 0xd7fb, 353 0xf900, 0xfa6d, 354 0xfa70, 0xfad9, 355 0xfb00, 0xfb06, 356 0xfb13, 0xfb17, 357 0xfb1f, 0xfb28, 358 0xfb2a, 0xfb36, 359 0xfb38, 0xfb3c, 360 0xfb40, 0xfb41, 361 0xfb43, 0xfb44, 362 0xfb46, 0xfbb1, 363 0xfbd3, 0xfd3d, 364 0xfd50, 0xfd8f, 365 0xfd92, 0xfdc7, 366 0xfdf0, 0xfdfb, 367 0xfe70, 0xfe74, 368 0xfe76, 0xfefc, 369 0xff21, 0xff3a, 370 0xff41, 0xff5a, 371 0xff66, 0xffbe, 372 0xffc2, 0xffc7, 373 0xffca, 0xffcf, 374 0xffd2, 0xffd7, 375 0xffda, 0xffdc, 376 0x10000, 0x1000b, 377 0x1000d, 0x10026, 378 0x10028, 0x1003a, 379 0x1003c, 0x1003d, 380 0x1003f, 0x1004d, 381 0x10050, 0x1005d, 382 0x10080, 0x100fa, 383 0x10280, 0x1029c, 384 0x102a0, 0x102d0, 385 0x10300, 0x1031e, 386 0x10330, 0x10340, 387 0x10342, 0x10349, 388 0x10380, 0x1039d, 389 0x103a0, 0x103c3, 390 0x103c8, 0x103cf, 391 0x10400, 0x1049d, 392 0x10800, 0x10805, 393 0x1080a, 0x10835, 394 0x10837, 0x10838, 395 0x1083f, 0x10855, 396 0x10900, 0x10915, 397 0x10920, 0x10939, 398 0x10980, 0x109b7, 399 0x109be, 0x109bf, 400 0x10a10, 0x10a13, 401 0x10a15, 0x10a17, 402 0x10a19, 0x10a33, 403 0x10a60, 0x10a7c, 404 0x10b00, 0x10b35, 405 0x10b40, 0x10b55, 406 0x10b60, 0x10b72, 407 0x10c00, 0x10c48, 408 0x11003, 0x11037, 409 0x11083, 0x110af, 410 0x110d0, 0x110e8, 411 0x11103, 0x11126, 412 0x11183, 0x111b2, 413 0x111c1, 0x111c4, 414 0x11680, 0x116aa, 415 0x12000, 0x1236e, 416 0x13000, 0x1342e, 417 0x16800, 0x16a38, 418 0x16f00, 0x16f44, 419 0x16f93, 0x16f9f, 420 0x1b000, 0x1b001, 421 0x1d400, 0x1d454, 422 0x1d456, 0x1d49c, 423 0x1d49e, 0x1d49f, 424 0x1d4a5, 0x1d4a6, 425 0x1d4a9, 0x1d4ac, 426 0x1d4ae, 0x1d4b9, 427 0x1d4bd, 0x1d4c3, 428 0x1d4c5, 0x1d505, 429 0x1d507, 0x1d50a, 430 0x1d50d, 0x1d514, 431 0x1d516, 0x1d51c, 432 0x1d51e, 0x1d539, 433 0x1d53b, 0x1d53e, 434 0x1d540, 0x1d544, 435 0x1d54a, 0x1d550, 436 0x1d552, 0x1d6a5, 437 0x1d6a8, 0x1d6c0, 438 0x1d6c2, 0x1d6da, 439 0x1d6dc, 0x1d6fa, 440 0x1d6fc, 0x1d714, 441 0x1d716, 0x1d734, 442 0x1d736, 0x1d74e, 443 0x1d750, 0x1d76e, 444 0x1d770, 0x1d788, 445 0x1d78a, 0x1d7a8, 446 0x1d7aa, 0x1d7c2, 447 0x1d7c4, 0x1d7cb, 448 0x1ee00, 0x1ee03, 449 0x1ee05, 0x1ee1f, 450 0x1ee21, 0x1ee22, 451 0x1ee29, 0x1ee32, 452 0x1ee34, 0x1ee37, 453 0x1ee4d, 0x1ee4f, 454 0x1ee51, 0x1ee52, 455 0x1ee61, 0x1ee62, 456 0x1ee67, 0x1ee6a, 457 0x1ee6c, 0x1ee72, 458 0x1ee74, 0x1ee77, 459 0x1ee79, 0x1ee7c, 460 0x1ee80, 0x1ee89, 461 0x1ee8b, 0x1ee9b, 462 0x1eea1, 0x1eea3, 463 0x1eea5, 0x1eea9, 464 0x1eeab, 0x1eebb, 465 0x20000, 0x2a6d6, 466 0x2a700, 0x2b734, 467 0x2b740, 0x2b81d, 468 0x2f800, 0x2fa1d, 469 }; 470 471 static Rune __isalphas[] = { 472 0x00aa, 473 0x00b5, 474 0x00ba, 475 0x02ec, 476 0x02ee, 477 0x0386, 478 0x038c, 479 0x0559, 480 0x06d5, 481 0x06ff, 482 0x0710, 483 0x07b1, 484 0x07fa, 485 0x081a, 486 0x0824, 487 0x0828, 488 0x08a0, 489 0x093d, 490 0x0950, 491 0x09b2, 492 0x09bd, 493 0x09ce, 494 0x0a5e, 495 0x0abd, 496 0x0ad0, 497 0x0b3d, 498 0x0b71, 499 0x0b83, 500 0x0b9c, 501 0x0bd0, 502 0x0c3d, 503 0x0cbd, 504 0x0cde, 505 0x0d3d, 506 0x0d4e, 507 0x0dbd, 508 0x0e84, 509 0x0e8a, 510 0x0e8d, 511 0x0ea5, 512 0x0ea7, 513 0x0ebd, 514 0x0ec6, 515 0x0f00, 516 0x103f, 517 0x1061, 518 0x108e, 519 0x10c7, 520 0x10cd, 521 0x1258, 522 0x12c0, 523 0x17d7, 524 0x17dc, 525 0x18aa, 526 0x1aa7, 527 0x1f59, 528 0x1f5b, 529 0x1f5d, 530 0x1fbe, 531 0x2071, 532 0x207f, 533 0x2102, 534 0x2107, 535 0x2115, 536 0x2124, 537 0x2126, 538 0x2128, 539 0x214e, 540 0x2d27, 541 0x2d2d, 542 0x2d6f, 543 0x2e2f, 544 0xa8fb, 545 0xa9cf, 546 0xaa7a, 547 0xaab1, 548 0xaac0, 549 0xaac2, 550 0xfb1d, 551 0xfb3e, 552 0x10808, 553 0x1083c, 554 0x10a00, 555 0x16f50, 556 0x1d4a2, 557 0x1d4bb, 558 0x1d546, 559 0x1ee24, 560 0x1ee27, 561 0x1ee39, 562 0x1ee3b, 563 0x1ee42, 564 0x1ee47, 565 0x1ee49, 566 0x1ee4b, 567 0x1ee54, 568 0x1ee57, 569 0x1ee59, 570 0x1ee5b, 571 0x1ee5d, 572 0x1ee5f, 573 0x1ee64, 574 0x1ee7e, 575 }; 576 577 int 578 isalpharune(Rune c) 579 { 580 Rune *p; 581 582 p = rbsearch(c, __isalphar, nelem(__isalphar)/2, 2); 583 if(p && c >= p[0] && c <= p[1]) 584 return 1; 585 p = rbsearch(c, __isalphas, nelem(__isalphas), 1); 586 if(p && c == p[0]) 587 return 1; 588 return 0; 589 } 590 591 static Rune __isupperr[] = { 592 0x0041, 0x005a, 593 0x00c0, 0x00d6, 594 0x00d8, 0x00de, 595 0x0178, 0x0179, 596 0x0181, 0x0182, 597 0x0186, 0x0187, 598 0x0189, 0x018b, 599 0x018e, 0x0191, 600 0x0193, 0x0194, 601 0x0196, 0x0198, 602 0x019c, 0x019d, 603 0x019f, 0x01a0, 604 0x01a6, 0x01a7, 605 0x01ae, 0x01af, 606 0x01b1, 0x01b3, 607 0x01b7, 0x01b8, 608 0x01f6, 0x01f8, 609 0x023a, 0x023b, 610 0x023d, 0x023e, 611 0x0243, 0x0246, 612 0x0388, 0x038a, 613 0x038e, 0x038f, 614 0x0391, 0x03a1, 615 0x03a3, 0x03ab, 616 0x03d2, 0x03d4, 617 0x03f9, 0x03fa, 618 0x03fd, 0x042f, 619 0x04c0, 0x04c1, 620 0x0531, 0x0556, 621 0x10a0, 0x10c5, 622 0x1f08, 0x1f0f, 623 0x1f18, 0x1f1d, 624 0x1f28, 0x1f2f, 625 0x1f38, 0x1f3f, 626 0x1f48, 0x1f4d, 627 0x1f68, 0x1f6f, 628 0x1f88, 0x1f8f, 629 0x1f98, 0x1f9f, 630 0x1fa8, 0x1faf, 631 0x1fb8, 0x1fbc, 632 0x1fc8, 0x1fcc, 633 0x1fd8, 0x1fdb, 634 0x1fe8, 0x1fec, 635 0x1ff8, 0x1ffc, 636 0x210b, 0x210d, 637 0x2110, 0x2112, 638 0x2119, 0x211d, 639 0x212a, 0x212d, 640 0x2130, 0x2133, 641 0x213e, 0x213f, 642 0x2160, 0x216f, 643 0x24b6, 0x24cf, 644 0x2c00, 0x2c2e, 645 0x2c62, 0x2c64, 646 0x2c6d, 0x2c70, 647 0x2c7e, 0x2c80, 648 0xa77d, 0xa77e, 649 0xff21, 0xff3a, 650 0x10400, 0x10427, 651 0x1d400, 0x1d419, 652 0x1d434, 0x1d44d, 653 0x1d468, 0x1d481, 654 0x1d49e, 0x1d49f, 655 0x1d4a5, 0x1d4a6, 656 0x1d4a9, 0x1d4ac, 657 0x1d4ae, 0x1d4b5, 658 0x1d4d0, 0x1d4e9, 659 0x1d504, 0x1d505, 660 0x1d507, 0x1d50a, 661 0x1d50d, 0x1d514, 662 0x1d516, 0x1d51c, 663 0x1d538, 0x1d539, 664 0x1d53b, 0x1d53e, 665 0x1d540, 0x1d544, 666 0x1d54a, 0x1d550, 667 0x1d56c, 0x1d585, 668 0x1d5a0, 0x1d5b9, 669 0x1d5d4, 0x1d5ed, 670 0x1d608, 0x1d621, 671 0x1d63c, 0x1d655, 672 0x1d670, 0x1d689, 673 0x1d6a8, 0x1d6c0, 674 0x1d6e2, 0x1d6fa, 675 0x1d71c, 0x1d734, 676 0x1d756, 0x1d76e, 677 0x1d790, 0x1d7a8, 678 }; 679 680 static Rune __isupperp[] = { 681 0x0100, 0x0136, 682 0x0139, 0x0147, 683 0x014a, 0x0176, 684 0x017b, 0x017d, 685 0x01a2, 0x01a4, 686 0x01cd, 0x01db, 687 0x01de, 0x01ee, 688 0x01fa, 0x0232, 689 0x0248, 0x024e, 690 0x0370, 0x0372, 691 0x03d8, 0x03ee, 692 0x0460, 0x0480, 693 0x048a, 0x04be, 694 0x04c3, 0x04cd, 695 0x04d0, 0x0526, 696 0x1e00, 0x1e94, 697 0x1e9e, 0x1efe, 698 0x1f59, 0x1f5f, 699 0x2124, 0x2128, 700 0x2c67, 0x2c6b, 701 0x2c82, 0x2ce2, 702 0x2ceb, 0x2ced, 703 0xa640, 0xa66c, 704 0xa680, 0xa696, 705 0xa722, 0xa72e, 706 0xa732, 0xa76e, 707 0xa779, 0xa77b, 708 0xa780, 0xa786, 709 0xa78b, 0xa78d, 710 0xa790, 0xa792, 711 0xa7a0, 0xa7aa, 712 }; 713 714 static Rune __isuppers[] = { 715 0x0184, 716 0x01a9, 717 0x01ac, 718 0x01b5, 719 0x01bc, 720 0x01c4, 721 0x01c7, 722 0x01ca, 723 0x01f1, 724 0x01f4, 725 0x0241, 726 0x0376, 727 0x0386, 728 0x038c, 729 0x03cf, 730 0x03f4, 731 0x03f7, 732 0x10c7, 733 0x10cd, 734 0x2102, 735 0x2107, 736 0x2115, 737 0x2145, 738 0x2183, 739 0x2c60, 740 0x2c72, 741 0x2c75, 742 0x2cf2, 743 0x1d49c, 744 0x1d4a2, 745 0x1d546, 746 0x1d7ca, 747 }; 748 749 int 750 isupperrune(Rune c) 751 { 752 Rune *p; 753 754 p = rbsearch(c, __isupperr, nelem(__isupperr)/2, 2); 755 if(p && c >= p[0] && c <= p[1]) 756 return 1; 757 p = rbsearch(c, __isupperp, nelem(__isupperp)/2, 2); 758 if(p && c >= p[0] && c <= p[1] && !((c - p[0]) & 1)) 759 return 1; 760 p = rbsearch(c, __isuppers, nelem(__isuppers), 1); 761 if(p && c == p[0]) 762 return 1; 763 return 0; 764 } 765 766 static Rune __islowerr[] = { 767 0x0061, 0x007a, 768 0x00df, 0x00f6, 769 0x00f8, 0x00ff, 770 0x0137, 0x0138, 771 0x0148, 0x0149, 772 0x017e, 0x0180, 773 0x018c, 0x018d, 774 0x0199, 0x019b, 775 0x01aa, 0x01ab, 776 0x01b9, 0x01ba, 777 0x01bd, 0x01bf, 778 0x01dc, 0x01dd, 779 0x01ef, 0x01f0, 780 0x0233, 0x0239, 781 0x023f, 0x0240, 782 0x024f, 0x0293, 783 0x0295, 0x02af, 784 0x037b, 0x037d, 785 0x03ac, 0x03ce, 786 0x03d0, 0x03d1, 787 0x03d5, 0x03d7, 788 0x03ef, 0x03f3, 789 0x03fb, 0x03fc, 790 0x0430, 0x045f, 791 0x04ce, 0x04cf, 792 0x0561, 0x0587, 793 0x1d00, 0x1d2b, 794 0x1d6b, 0x1d77, 795 0x1d79, 0x1d9a, 796 0x1e95, 0x1e9d, 797 0x1eff, 0x1f07, 798 0x1f10, 0x1f15, 799 0x1f20, 0x1f27, 800 0x1f30, 0x1f37, 801 0x1f40, 0x1f45, 802 0x1f50, 0x1f57, 803 0x1f60, 0x1f67, 804 0x1f70, 0x1f7d, 805 0x1f80, 0x1f87, 806 0x1f90, 0x1f97, 807 0x1fa0, 0x1fa7, 808 0x1fb0, 0x1fb4, 809 0x1fb6, 0x1fb7, 810 0x1fc2, 0x1fc4, 811 0x1fc6, 0x1fc7, 812 0x1fd0, 0x1fd3, 813 0x1fd6, 0x1fd7, 814 0x1fe0, 0x1fe7, 815 0x1ff2, 0x1ff4, 816 0x1ff6, 0x1ff7, 817 0x210e, 0x210f, 818 0x213c, 0x213d, 819 0x2146, 0x2149, 820 0x2170, 0x217f, 821 0x24d0, 0x24e9, 822 0x2c30, 0x2c5e, 823 0x2c65, 0x2c66, 824 0x2c73, 0x2c74, 825 0x2c76, 0x2c7b, 826 0x2ce3, 0x2ce4, 827 0x2d00, 0x2d25, 828 0xa72f, 0xa731, 829 0xa771, 0xa778, 830 0xfb00, 0xfb06, 831 0xfb13, 0xfb17, 832 0xff41, 0xff5a, 833 0x10428, 0x1044f, 834 0x1d41a, 0x1d433, 835 0x1d44e, 0x1d454, 836 0x1d456, 0x1d467, 837 0x1d482, 0x1d49b, 838 0x1d4b6, 0x1d4b9, 839 0x1d4bd, 0x1d4c3, 840 0x1d4c5, 0x1d4cf, 841 0x1d4ea, 0x1d503, 842 0x1d51e, 0x1d537, 843 0x1d552, 0x1d56b, 844 0x1d586, 0x1d59f, 845 0x1d5ba, 0x1d5d3, 846 0x1d5ee, 0x1d607, 847 0x1d622, 0x1d63b, 848 0x1d656, 0x1d66f, 849 0x1d68a, 0x1d6a5, 850 0x1d6c2, 0x1d6da, 851 0x1d6dc, 0x1d6e1, 852 0x1d6fc, 0x1d714, 853 0x1d716, 0x1d71b, 854 0x1d736, 0x1d74e, 855 0x1d750, 0x1d755, 856 0x1d770, 0x1d788, 857 0x1d78a, 0x1d78f, 858 0x1d7aa, 0x1d7c2, 859 0x1d7c4, 0x1d7c9, 860 }; 861 862 static Rune __islowerp[] = { 863 0x0101, 0x0135, 864 0x013a, 0x0146, 865 0x014b, 0x0177, 866 0x017a, 0x017c, 867 0x0183, 0x0185, 868 0x01a1, 0x01a5, 869 0x01b4, 0x01b6, 870 0x01cc, 0x01da, 871 0x01df, 0x01ed, 872 0x01f3, 0x01f5, 873 0x01f9, 0x0231, 874 0x0247, 0x024d, 875 0x0371, 0x0373, 876 0x03d9, 0x03ed, 877 0x0461, 0x0481, 878 0x048b, 0x04bf, 879 0x04c2, 0x04cc, 880 0x04d1, 0x0527, 881 0x1e01, 0x1e93, 882 0x1e9f, 0x1efd, 883 0x2c68, 0x2c6c, 884 0x2c81, 0x2ce1, 885 0x2cec, 0x2cee, 886 0xa641, 0xa66d, 887 0xa681, 0xa697, 888 0xa723, 0xa72d, 889 0xa733, 0xa76f, 890 0xa77a, 0xa77c, 891 0xa77f, 0xa787, 892 0xa78c, 0xa78e, 893 0xa791, 0xa793, 894 0xa7a1, 0xa7a9, 895 }; 896 897 static Rune __islowers[] = { 898 0x00b5, 899 0x0188, 900 0x0192, 901 0x0195, 902 0x019e, 903 0x01a8, 904 0x01ad, 905 0x01b0, 906 0x01c6, 907 0x01c9, 908 0x023c, 909 0x0242, 910 0x0377, 911 0x0390, 912 0x03f5, 913 0x03f8, 914 0x1fbe, 915 0x210a, 916 0x2113, 917 0x212f, 918 0x2134, 919 0x2139, 920 0x214e, 921 0x2184, 922 0x2c61, 923 0x2c71, 924 0x2cf3, 925 0x2d27, 926 0x2d2d, 927 0xa7fa, 928 0x1d4bb, 929 0x1d7cb, 930 }; 931 932 int 933 islowerrune(Rune c) 934 { 935 Rune *p; 936 937 p = rbsearch(c, __islowerr, nelem(__islowerr)/2, 2); 938 if(p && c >= p[0] && c <= p[1]) 939 return 1; 940 p = rbsearch(c, __islowerp, nelem(__islowerp)/2, 2); 941 if(p && c >= p[0] && c <= p[1] && !((c - p[0]) & 1)) 942 return 1; 943 p = rbsearch(c, __islowers, nelem(__islowers), 1); 944 if(p && c == p[0]) 945 return 1; 946 return 0; 947 } 948 949 static Rune __istitler[] = { 950 0x0041, 0x005a, 951 0x00c0, 0x00d6, 952 0x00d8, 0x00de, 953 0x0178, 0x0179, 954 0x0181, 0x0182, 955 0x0186, 0x0187, 956 0x0189, 0x018b, 957 0x018e, 0x0191, 958 0x0193, 0x0194, 959 0x0196, 0x0198, 960 0x019c, 0x019d, 961 0x019f, 0x01a0, 962 0x01a6, 0x01a7, 963 0x01ae, 0x01af, 964 0x01b1, 0x01b3, 965 0x01b7, 0x01b8, 966 0x01f6, 0x01f8, 967 0x023a, 0x023b, 968 0x023d, 0x023e, 969 0x0243, 0x0246, 970 0x0388, 0x038a, 971 0x038e, 0x038f, 972 0x0391, 0x03a1, 973 0x03a3, 0x03ab, 974 0x03f9, 0x03fa, 975 0x03fd, 0x042f, 976 0x04c0, 0x04c1, 977 0x0531, 0x0556, 978 0x10a0, 0x10c5, 979 0x1f08, 0x1f0f, 980 0x1f18, 0x1f1d, 981 0x1f28, 0x1f2f, 982 0x1f38, 0x1f3f, 983 0x1f48, 0x1f4d, 984 0x1f68, 0x1f6f, 985 0x1f88, 0x1f8f, 986 0x1f98, 0x1f9f, 987 0x1fa8, 0x1faf, 988 0x1fb8, 0x1fbc, 989 0x1fc8, 0x1fcc, 990 0x1fd8, 0x1fdb, 991 0x1fe8, 0x1fec, 992 0x1ff8, 0x1ffc, 993 0x2160, 0x216f, 994 0x24b6, 0x24cf, 995 0x2c00, 0x2c2e, 996 0x2c62, 0x2c64, 997 0x2c6d, 0x2c70, 998 0x2c7e, 0x2c80, 999 0xa77d, 0xa77e, 1000 0xff21, 0xff3a, 1001 0x10400, 0x10427, 1002 }; 1003 1004 static Rune __istitlep[] = { 1005 0x0100, 0x012e, 1006 0x0132, 0x0136, 1007 0x0139, 0x0147, 1008 0x014a, 0x0176, 1009 0x017b, 0x017d, 1010 0x01a2, 0x01a4, 1011 0x01cb, 0x01db, 1012 0x01de, 0x01ee, 1013 0x01f2, 0x01f4, 1014 0x01fa, 0x0232, 1015 0x0248, 0x024e, 1016 0x0370, 0x0372, 1017 0x03d8, 0x03ee, 1018 0x0460, 0x0480, 1019 0x048a, 0x04be, 1020 0x04c3, 0x04cd, 1021 0x04d0, 0x0526, 1022 0x1e00, 0x1e94, 1023 0x1ea0, 0x1efe, 1024 0x1f59, 0x1f5f, 1025 0x2c67, 0x2c6b, 1026 0x2c82, 0x2ce2, 1027 0x2ceb, 0x2ced, 1028 0xa640, 0xa66c, 1029 0xa680, 0xa696, 1030 0xa722, 0xa72e, 1031 0xa732, 0xa76e, 1032 0xa779, 0xa77b, 1033 0xa780, 0xa786, 1034 0xa78b, 0xa78d, 1035 0xa790, 0xa792, 1036 0xa7a0, 0xa7aa, 1037 }; 1038 1039 static Rune __istitles[] = { 1040 0x0184, 1041 0x01a9, 1042 0x01ac, 1043 0x01b5, 1044 0x01bc, 1045 0x01c5, 1046 0x01c8, 1047 0x0241, 1048 0x0376, 1049 0x0386, 1050 0x038c, 1051 0x03cf, 1052 0x03f7, 1053 0x10c7, 1054 0x10cd, 1055 0x2132, 1056 0x2183, 1057 0x2c60, 1058 0x2c72, 1059 0x2c75, 1060 0x2cf2, 1061 }; 1062 1063 int 1064 istitlerune(Rune c) 1065 { 1066 Rune *p; 1067 1068 p = rbsearch(c, __istitler, nelem(__istitler)/2, 2); 1069 if(p && c >= p[0] && c <= p[1]) 1070 return 1; 1071 p = rbsearch(c, __istitlep, nelem(__istitlep)/2, 2); 1072 if(p && c >= p[0] && c <= p[1] && !((c - p[0]) & 1)) 1073 return 1; 1074 p = rbsearch(c, __istitles, nelem(__istitles), 1); 1075 if(p && c == p[0]) 1076 return 1; 1077 return 0; 1078 } 1079 1080 static Rune __toupperr[] = { 1081 0x0061, 0x007a, 1048544, 1082 0x00e0, 0x00f6, 1048544, 1083 0x00f8, 0x00fe, 1048544, 1084 0x023f, 0x0240, 1059391, 1085 0x0256, 0x0257, 1048371, 1086 0x028a, 0x028b, 1048359, 1087 0x037b, 0x037d, 1048706, 1088 0x03ad, 0x03af, 1048539, 1089 0x03b1, 0x03c1, 1048544, 1090 0x03c3, 0x03cb, 1048544, 1091 0x03cd, 0x03ce, 1048513, 1092 0x0430, 0x044f, 1048544, 1093 0x0450, 0x045f, 1048496, 1094 0x0561, 0x0586, 1048528, 1095 0x1f00, 0x1f07, 1048584, 1096 0x1f10, 0x1f15, 1048584, 1097 0x1f20, 0x1f27, 1048584, 1098 0x1f30, 0x1f37, 1048584, 1099 0x1f40, 0x1f45, 1048584, 1100 0x1f60, 0x1f67, 1048584, 1101 0x1f70, 0x1f71, 1048650, 1102 0x1f72, 0x1f75, 1048662, 1103 0x1f76, 0x1f77, 1048676, 1104 0x1f78, 0x1f79, 1048704, 1105 0x1f7a, 0x1f7b, 1048688, 1106 0x1f7c, 0x1f7d, 1048702, 1107 0x1f80, 0x1f87, 1048584, 1108 0x1f90, 0x1f97, 1048584, 1109 0x1fa0, 0x1fa7, 1048584, 1110 0x1fb0, 0x1fb1, 1048584, 1111 0x1fd0, 0x1fd1, 1048584, 1112 0x1fe0, 0x1fe1, 1048584, 1113 0x2170, 0x217f, 1048560, 1114 0x24d0, 0x24e9, 1048550, 1115 0x2c30, 0x2c5e, 1048528, 1116 0x2d00, 0x2d25, 1041312, 1117 0xff41, 0xff5a, 1048544, 1118 0x10428, 0x1044f, 1048536, 1119 }; 1120 1121 static Rune __toupperp[] = { 1122 0x0101, 0x012f, 1048575, 1123 0x0133, 0x0137, 1048575, 1124 0x013a, 0x0148, 1048575, 1125 0x014b, 0x0177, 1048575, 1126 0x017a, 0x017e, 1048575, 1127 0x0183, 0x0185, 1048575, 1128 0x01a1, 0x01a5, 1048575, 1129 0x01b4, 0x01b6, 1048575, 1130 0x01ce, 0x01dc, 1048575, 1131 0x01df, 0x01ef, 1048575, 1132 0x01f9, 0x021f, 1048575, 1133 0x0223, 0x0233, 1048575, 1134 0x0247, 0x024f, 1048575, 1135 0x0371, 0x0373, 1048575, 1136 0x03d9, 0x03ef, 1048575, 1137 0x0461, 0x0481, 1048575, 1138 0x048b, 0x04bf, 1048575, 1139 0x04c2, 0x04ce, 1048575, 1140 0x04d1, 0x0527, 1048575, 1141 0x1e01, 0x1e95, 1048575, 1142 0x1ea1, 0x1eff, 1048575, 1143 0x1f51, 0x1f57, 1048584, 1144 0x2c68, 0x2c6c, 1048575, 1145 0x2c81, 0x2ce3, 1048575, 1146 0x2cec, 0x2cee, 1048575, 1147 0xa641, 0xa66d, 1048575, 1148 0xa681, 0xa697, 1048575, 1149 0xa723, 0xa72f, 1048575, 1150 0xa733, 0xa76f, 1048575, 1151 0xa77a, 0xa77c, 1048575, 1152 0xa77f, 0xa787, 1048575, 1153 0xa791, 0xa793, 1048575, 1154 0xa7a1, 0xa7a9, 1048575, 1155 }; 1156 1157 static Rune __touppers[] = { 1158 0x00b5, 1049319, 1159 0x00ff, 1048697, 1160 0x0131, 1048344, 1161 0x017f, 1048276, 1162 0x0180, 1048771, 1163 0x0188, 1048575, 1164 0x018c, 1048575, 1165 0x0192, 1048575, 1166 0x0195, 1048673, 1167 0x0199, 1048575, 1168 0x019a, 1048739, 1169 0x019e, 1048706, 1170 0x01a8, 1048575, 1171 0x01ad, 1048575, 1172 0x01b0, 1048575, 1173 0x01b9, 1048575, 1174 0x01bd, 1048575, 1175 0x01bf, 1048632, 1176 0x01c5, 1048575, 1177 0x01c6, 1048574, 1178 0x01c8, 1048575, 1179 0x01c9, 1048574, 1180 0x01cb, 1048575, 1181 0x01cc, 1048574, 1182 0x01dd, 1048497, 1183 0x01f2, 1048575, 1184 0x01f3, 1048574, 1185 0x01f5, 1048575, 1186 0x023c, 1048575, 1187 0x0242, 1048575, 1188 0x0250, 1059359, 1189 0x0251, 1059356, 1190 0x0252, 1059358, 1191 0x0253, 1048366, 1192 0x0254, 1048370, 1193 0x0259, 1048374, 1194 0x025b, 1048373, 1195 0x0260, 1048371, 1196 0x0263, 1048369, 1197 0x0265, 1090856, 1198 0x0266, 1090884, 1199 0x0268, 1048367, 1200 0x0269, 1048365, 1201 0x026b, 1059319, 1202 0x026f, 1048365, 1203 0x0271, 1059325, 1204 0x0272, 1048363, 1205 0x0275, 1048362, 1206 0x027d, 1059303, 1207 0x0280, 1048358, 1208 0x0283, 1048358, 1209 0x0288, 1048358, 1210 0x0289, 1048507, 1211 0x028c, 1048505, 1212 0x0292, 1048357, 1213 0x0345, 1048660, 1214 0x0377, 1048575, 1215 0x03ac, 1048538, 1216 0x03c2, 1048545, 1217 0x03cc, 1048512, 1218 0x03d0, 1048514, 1219 0x03d1, 1048519, 1220 0x03d5, 1048529, 1221 0x03d6, 1048522, 1222 0x03d7, 1048568, 1223 0x03f0, 1048490, 1224 0x03f1, 1048496, 1225 0x03f2, 1048583, 1226 0x03f5, 1048480, 1227 0x03f8, 1048575, 1228 0x03fb, 1048575, 1229 0x04cf, 1048561, 1230 0x1d79, 1083908, 1231 0x1d7d, 1052390, 1232 0x1e9b, 1048517, 1233 0x1fb3, 1048585, 1234 0x1fbe, 1041371, 1235 0x1fc3, 1048585, 1236 0x1fe5, 1048583, 1237 0x1ff3, 1048585, 1238 0x214e, 1048548, 1239 0x2184, 1048575, 1240 0x2c61, 1048575, 1241 0x2c65, 1037781, 1242 0x2c66, 1037784, 1243 0x2c73, 1048575, 1244 0x2c76, 1048575, 1245 0x2cf3, 1048575, 1246 0x2d27, 1041312, 1247 0x2d2d, 1041312, 1248 0xa78c, 1048575, 1249 }; 1250 1251 Rune 1252 toupperrune(Rune c) 1253 { 1254 Rune *p; 1255 1256 p = rbsearch(c, __toupperr, nelem(__toupperr)/3, 3); 1257 if(p && c >= p[0] && c <= p[1]) 1258 return c + p[2] - 1048576; 1259 p = rbsearch(c, __toupperp, nelem(__toupperp)/3, 3); 1260 if(p && c >= p[0] && c <= p[1] && !((c - p[0]) & 1)) 1261 return c + p[2] - 1048576; 1262 p = rbsearch(c, __touppers, nelem(__touppers)/2, 2); 1263 if(p && c == p[0]) 1264 return c + p[1] - 1048576; 1265 return c; 1266 } 1267 1268 static Rune __tolowerr[] = { 1269 0x0041, 0x005a, 1048608, 1270 0x00c0, 0x00d6, 1048608, 1271 0x00d8, 0x00de, 1048608, 1272 0x0189, 0x018a, 1048781, 1273 0x01b1, 0x01b2, 1048793, 1274 0x0388, 0x038a, 1048613, 1275 0x038e, 0x038f, 1048639, 1276 0x0391, 0x03a1, 1048608, 1277 0x03a3, 0x03ab, 1048608, 1278 0x03fd, 0x03ff, 1048446, 1279 0x0400, 0x040f, 1048656, 1280 0x0410, 0x042f, 1048608, 1281 0x0531, 0x0556, 1048624, 1282 0x10a0, 0x10c5, 1055840, 1283 0x1f08, 0x1f0f, 1048568, 1284 0x1f18, 0x1f1d, 1048568, 1285 0x1f28, 0x1f2f, 1048568, 1286 0x1f38, 0x1f3f, 1048568, 1287 0x1f48, 0x1f4d, 1048568, 1288 0x1f68, 0x1f6f, 1048568, 1289 0x1f88, 0x1f8f, 1048568, 1290 0x1f98, 0x1f9f, 1048568, 1291 0x1fa8, 0x1faf, 1048568, 1292 0x1fb8, 0x1fb9, 1048568, 1293 0x1fba, 0x1fbb, 1048502, 1294 0x1fc8, 0x1fcb, 1048490, 1295 0x1fd8, 0x1fd9, 1048568, 1296 0x1fda, 0x1fdb, 1048476, 1297 0x1fe8, 0x1fe9, 1048568, 1298 0x1fea, 0x1feb, 1048464, 1299 0x1ff8, 0x1ff9, 1048448, 1300 0x1ffa, 0x1ffb, 1048450, 1301 0x2160, 0x216f, 1048592, 1302 0x24b6, 0x24cf, 1048602, 1303 0x2c00, 0x2c2e, 1048624, 1304 0x2c7e, 0x2c7f, 1037761, 1305 0xff21, 0xff3a, 1048608, 1306 0x10400, 0x10427, 1048616, 1307 }; 1308 1309 static Rune __tolowerp[] = { 1310 0x0100, 0x012e, 1048577, 1311 0x0132, 0x0136, 1048577, 1312 0x0139, 0x0147, 1048577, 1313 0x014a, 0x0176, 1048577, 1314 0x017b, 0x017d, 1048577, 1315 0x01a2, 0x01a4, 1048577, 1316 0x01b3, 0x01b5, 1048577, 1317 0x01cd, 0x01db, 1048577, 1318 0x01de, 0x01ee, 1048577, 1319 0x01f8, 0x021e, 1048577, 1320 0x0222, 0x0232, 1048577, 1321 0x0248, 0x024e, 1048577, 1322 0x0370, 0x0372, 1048577, 1323 0x03d8, 0x03ee, 1048577, 1324 0x0460, 0x0480, 1048577, 1325 0x048a, 0x04be, 1048577, 1326 0x04c3, 0x04cd, 1048577, 1327 0x04d0, 0x0526, 1048577, 1328 0x1e00, 0x1e94, 1048577, 1329 0x1ea0, 0x1efe, 1048577, 1330 0x1f59, 0x1f5f, 1048568, 1331 0x2c67, 0x2c6b, 1048577, 1332 0x2c80, 0x2ce2, 1048577, 1333 0x2ceb, 0x2ced, 1048577, 1334 0xa640, 0xa66c, 1048577, 1335 0xa680, 0xa696, 1048577, 1336 0xa722, 0xa72e, 1048577, 1337 0xa732, 0xa76e, 1048577, 1338 0xa779, 0xa77b, 1048577, 1339 0xa780, 0xa786, 1048577, 1340 0xa790, 0xa792, 1048577, 1341 0xa7a0, 0xa7a8, 1048577, 1342 }; 1343 1344 static Rune __tolowers[] = { 1345 0x0130, 1048377, 1346 0x0178, 1048455, 1347 0x0179, 1048577, 1348 0x0181, 1048786, 1349 0x0182, 1048577, 1350 0x0184, 1048577, 1351 0x0186, 1048782, 1352 0x0187, 1048577, 1353 0x018b, 1048577, 1354 0x018e, 1048655, 1355 0x018f, 1048778, 1356 0x0190, 1048779, 1357 0x0191, 1048577, 1358 0x0193, 1048781, 1359 0x0194, 1048783, 1360 0x0196, 1048787, 1361 0x0197, 1048785, 1362 0x0198, 1048577, 1363 0x019c, 1048787, 1364 0x019d, 1048789, 1365 0x019f, 1048790, 1366 0x01a0, 1048577, 1367 0x01a6, 1048794, 1368 0x01a7, 1048577, 1369 0x01a9, 1048794, 1370 0x01ac, 1048577, 1371 0x01ae, 1048794, 1372 0x01af, 1048577, 1373 0x01b7, 1048795, 1374 0x01b8, 1048577, 1375 0x01bc, 1048577, 1376 0x01c4, 1048578, 1377 0x01c5, 1048577, 1378 0x01c7, 1048578, 1379 0x01c8, 1048577, 1380 0x01ca, 1048578, 1381 0x01cb, 1048577, 1382 0x01f1, 1048578, 1383 0x01f2, 1048577, 1384 0x01f4, 1048577, 1385 0x01f6, 1048479, 1386 0x01f7, 1048520, 1387 0x0220, 1048446, 1388 0x023a, 1059371, 1389 0x023b, 1048577, 1390 0x023d, 1048413, 1391 0x023e, 1059368, 1392 0x0241, 1048577, 1393 0x0243, 1048381, 1394 0x0244, 1048645, 1395 0x0245, 1048647, 1396 0x0246, 1048577, 1397 0x0376, 1048577, 1398 0x0386, 1048614, 1399 0x038c, 1048640, 1400 0x03cf, 1048584, 1401 0x03f4, 1048516, 1402 0x03f7, 1048577, 1403 0x03f9, 1048569, 1404 0x03fa, 1048577, 1405 0x04c0, 1048591, 1406 0x04c1, 1048577, 1407 0x10c7, 1055840, 1408 0x10cd, 1055840, 1409 0x1e9e, 1040961, 1410 0x1fbc, 1048567, 1411 0x1fcc, 1048567, 1412 0x1fec, 1048569, 1413 0x1ffc, 1048567, 1414 0x2126, 1041059, 1415 0x212a, 1040193, 1416 0x212b, 1040314, 1417 0x2132, 1048604, 1418 0x2183, 1048577, 1419 0x2c60, 1048577, 1420 0x2c62, 1037833, 1421 0x2c63, 1044762, 1422 0x2c64, 1037849, 1423 0x2c6d, 1037796, 1424 0x2c6e, 1037827, 1425 0x2c6f, 1037793, 1426 0x2c70, 1037794, 1427 0x2c72, 1048577, 1428 0x2c75, 1048577, 1429 0x2cf2, 1048577, 1430 0xa77d, 1013244, 1431 0xa77e, 1048577, 1432 0xa78b, 1048577, 1433 0xa78d, 1006296, 1434 0xa7aa, 1006268, 1435 }; 1436 1437 Rune 1438 tolowerrune(Rune c) 1439 { 1440 Rune *p; 1441 1442 p = rbsearch(c, __tolowerr, nelem(__tolowerr)/3, 3); 1443 if(p && c >= p[0] && c <= p[1]) 1444 return c + p[2] - 1048576; 1445 p = rbsearch(c, __tolowerp, nelem(__tolowerp)/3, 3); 1446 if(p && c >= p[0] && c <= p[1] && !((c - p[0]) & 1)) 1447 return c + p[2] - 1048576; 1448 p = rbsearch(c, __tolowers, nelem(__tolowers)/2, 2); 1449 if(p && c == p[0]) 1450 return c + p[1] - 1048576; 1451 return c; 1452 } 1453 1454 static Rune __totitler[] = { 1455 0x0061, 0x007a, 1048544, 1456 0x00e0, 0x00f6, 1048544, 1457 0x00f8, 0x00fe, 1048544, 1458 0x023f, 0x0240, 1059391, 1459 0x0256, 0x0257, 1048371, 1460 0x028a, 0x028b, 1048359, 1461 0x037b, 0x037d, 1048706, 1462 0x03ad, 0x03af, 1048539, 1463 0x03b1, 0x03c1, 1048544, 1464 0x03c3, 0x03cb, 1048544, 1465 0x03cd, 0x03ce, 1048513, 1466 0x0430, 0x044f, 1048544, 1467 0x0450, 0x045f, 1048496, 1468 0x0561, 0x0586, 1048528, 1469 0x1f00, 0x1f07, 1048584, 1470 0x1f10, 0x1f15, 1048584, 1471 0x1f20, 0x1f27, 1048584, 1472 0x1f30, 0x1f37, 1048584, 1473 0x1f40, 0x1f45, 1048584, 1474 0x1f60, 0x1f67, 1048584, 1475 0x1f70, 0x1f71, 1048650, 1476 0x1f72, 0x1f75, 1048662, 1477 0x1f76, 0x1f77, 1048676, 1478 0x1f78, 0x1f79, 1048704, 1479 0x1f7a, 0x1f7b, 1048688, 1480 0x1f7c, 0x1f7d, 1048702, 1481 0x1f80, 0x1f87, 1048584, 1482 0x1f90, 0x1f97, 1048584, 1483 0x1fa0, 0x1fa7, 1048584, 1484 0x1fb0, 0x1fb1, 1048584, 1485 0x1fd0, 0x1fd1, 1048584, 1486 0x1fe0, 0x1fe1, 1048584, 1487 0x2170, 0x217f, 1048560, 1488 0x24d0, 0x24e9, 1048550, 1489 0x2c30, 0x2c5e, 1048528, 1490 0x2d00, 0x2d25, 1041312, 1491 0xff41, 0xff5a, 1048544, 1492 0x10428, 0x1044f, 1048536, 1493 }; 1494 1495 static Rune __totitlep[] = { 1496 0x0101, 0x012f, 1048575, 1497 0x0133, 0x0137, 1048575, 1498 0x013a, 0x0148, 1048575, 1499 0x014b, 0x0177, 1048575, 1500 0x017a, 0x017e, 1048575, 1501 0x0183, 0x0185, 1048575, 1502 0x01a1, 0x01a5, 1048575, 1503 0x01b4, 0x01b6, 1048575, 1504 0x01cc, 0x01dc, 1048575, 1505 0x01df, 0x01ef, 1048575, 1506 0x01f3, 0x01f5, 1048575, 1507 0x01f9, 0x021f, 1048575, 1508 0x0223, 0x0233, 1048575, 1509 0x0247, 0x024f, 1048575, 1510 0x0371, 0x0373, 1048575, 1511 0x03d9, 0x03ef, 1048575, 1512 0x0461, 0x0481, 1048575, 1513 0x048b, 0x04bf, 1048575, 1514 0x04c2, 0x04ce, 1048575, 1515 0x04d1, 0x0527, 1048575, 1516 0x1e01, 0x1e95, 1048575, 1517 0x1ea1, 0x1eff, 1048575, 1518 0x1f51, 0x1f57, 1048584, 1519 0x2c68, 0x2c6c, 1048575, 1520 0x2c81, 0x2ce3, 1048575, 1521 0x2cec, 0x2cee, 1048575, 1522 0xa641, 0xa66d, 1048575, 1523 0xa681, 0xa697, 1048575, 1524 0xa723, 0xa72f, 1048575, 1525 0xa733, 0xa76f, 1048575, 1526 0xa77a, 0xa77c, 1048575, 1527 0xa77f, 0xa787, 1048575, 1528 0xa791, 0xa793, 1048575, 1529 0xa7a1, 0xa7a9, 1048575, 1530 }; 1531 1532 static Rune __totitles[] = { 1533 0x00b5, 1049319, 1534 0x00ff, 1048697, 1535 0x0131, 1048344, 1536 0x017f, 1048276, 1537 0x0180, 1048771, 1538 0x0188, 1048575, 1539 0x018c, 1048575, 1540 0x0192, 1048575, 1541 0x0195, 1048673, 1542 0x0199, 1048575, 1543 0x019a, 1048739, 1544 0x019e, 1048706, 1545 0x01a8, 1048575, 1546 0x01ad, 1048575, 1547 0x01b0, 1048575, 1548 0x01b9, 1048575, 1549 0x01bd, 1048575, 1550 0x01bf, 1048632, 1551 0x01c4, 1048577, 1552 0x01c6, 1048575, 1553 0x01c7, 1048577, 1554 0x01c9, 1048575, 1555 0x01ca, 1048577, 1556 0x01dd, 1048497, 1557 0x01f1, 1048577, 1558 0x023c, 1048575, 1559 0x0242, 1048575, 1560 0x0250, 1059359, 1561 0x0251, 1059356, 1562 0x0252, 1059358, 1563 0x0253, 1048366, 1564 0x0254, 1048370, 1565 0x0259, 1048374, 1566 0x025b, 1048373, 1567 0x0260, 1048371, 1568 0x0263, 1048369, 1569 0x0265, 1090856, 1570 0x0266, 1090884, 1571 0x0268, 1048367, 1572 0x0269, 1048365, 1573 0x026b, 1059319, 1574 0x026f, 1048365, 1575 0x0271, 1059325, 1576 0x0272, 1048363, 1577 0x0275, 1048362, 1578 0x027d, 1059303, 1579 0x0280, 1048358, 1580 0x0283, 1048358, 1581 0x0288, 1048358, 1582 0x0289, 1048507, 1583 0x028c, 1048505, 1584 0x0292, 1048357, 1585 0x0345, 1048660, 1586 0x0377, 1048575, 1587 0x03ac, 1048538, 1588 0x03c2, 1048545, 1589 0x03cc, 1048512, 1590 0x03d0, 1048514, 1591 0x03d1, 1048519, 1592 0x03d5, 1048529, 1593 0x03d6, 1048522, 1594 0x03d7, 1048568, 1595 0x03f0, 1048490, 1596 0x03f1, 1048496, 1597 0x03f2, 1048583, 1598 0x03f5, 1048480, 1599 0x03f8, 1048575, 1600 0x03fb, 1048575, 1601 0x04cf, 1048561, 1602 0x1d79, 1083908, 1603 0x1d7d, 1052390, 1604 0x1e9b, 1048517, 1605 0x1fb3, 1048585, 1606 0x1fbe, 1041371, 1607 0x1fc3, 1048585, 1608 0x1fe5, 1048583, 1609 0x1ff3, 1048585, 1610 0x214e, 1048548, 1611 0x2184, 1048575, 1612 0x2c61, 1048575, 1613 0x2c65, 1037781, 1614 0x2c66, 1037784, 1615 0x2c73, 1048575, 1616 0x2c76, 1048575, 1617 0x2cf3, 1048575, 1618 0x2d27, 1041312, 1619 0x2d2d, 1041312, 1620 0xa78c, 1048575, 1621 }; 1622 1623 Rune 1624 totitlerune(Rune c) 1625 { 1626 Rune *p; 1627 1628 p = rbsearch(c, __totitler, nelem(__totitler)/3, 3); 1629 if(p && c >= p[0] && c <= p[1]) 1630 return c + p[2] - 1048576; 1631 p = rbsearch(c, __totitlep, nelem(__totitlep)/3, 3); 1632 if(p && c >= p[0] && c <= p[1] && !((c - p[0]) & 1)) 1633 return c + p[2] - 1048576; 1634 p = rbsearch(c, __totitles, nelem(__totitles)/2, 2); 1635 if(p && c == p[0]) 1636 return c + p[1] - 1048576; 1637 return c; 1638 } 1639