mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-02-07 06:53:33 +00:00
713 lines
19 KiB
C++
713 lines
19 KiB
C++
|
/*-*-mode:c++;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8-*-│
|
||
|
│ vi: set et ft=c++ ts=2 sts=2 sw=2 fenc=utf-8 :vi │
|
||
|
╞══════════════════════════════════════════════════════════════════════════════╡
|
||
|
│ Copyright 2024 Justine Alexandra Roberts Tunney │
|
||
|
│ │
|
||
|
│ Permission to use, copy, modify, and/or distribute this software for │
|
||
|
│ any purpose with or without fee is hereby granted, provided that the │
|
||
|
│ above copyright notice and this permission notice appear in all copies. │
|
||
|
│ │
|
||
|
│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │
|
||
|
│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │
|
||
|
│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │
|
||
|
│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │
|
||
|
│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │
|
||
|
│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │
|
||
|
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
|
||
|
│ PERFORMANCE OF THIS SOFTWARE. │
|
||
|
╚─────────────────────────────────────────────────────────────────────────────*/
|
||
|
#include "libc/dce.h"
|
||
|
#include "libc/macros.h"
|
||
|
#include "libc/str/has_char.h"
|
||
|
#include "libc/wctype.h"
|
||
|
|
||
|
static const unsigned short kLower[][2] = {
|
||
|
{0x61, 0x7a}, //
|
||
|
{0xaa, 0xaa}, //
|
||
|
{0xb5, 0xb5}, //
|
||
|
{0xba, 0xba}, //
|
||
|
{0xdf, 0xf6}, //
|
||
|
{0xf8, 0xff}, //
|
||
|
{0x101, 0x101}, //
|
||
|
{0x103, 0x103}, //
|
||
|
{0x105, 0x105}, //
|
||
|
{0x107, 0x107}, //
|
||
|
{0x109, 0x109}, //
|
||
|
{0x10b, 0x10b}, //
|
||
|
{0x10d, 0x10d}, //
|
||
|
{0x10f, 0x10f}, //
|
||
|
{0x111, 0x111}, //
|
||
|
{0x113, 0x113}, //
|
||
|
{0x115, 0x115}, //
|
||
|
{0x117, 0x117}, //
|
||
|
{0x119, 0x119}, //
|
||
|
{0x11b, 0x11b}, //
|
||
|
{0x11d, 0x11d}, //
|
||
|
{0x11f, 0x11f}, //
|
||
|
{0x121, 0x121}, //
|
||
|
{0x123, 0x123}, //
|
||
|
{0x125, 0x125}, //
|
||
|
{0x127, 0x127}, //
|
||
|
{0x129, 0x129}, //
|
||
|
{0x12b, 0x12b}, //
|
||
|
{0x12d, 0x12d}, //
|
||
|
{0x12f, 0x12f}, //
|
||
|
{0x131, 0x131}, //
|
||
|
{0x133, 0x133}, //
|
||
|
{0x135, 0x135}, //
|
||
|
{0x137, 0x138}, //
|
||
|
{0x13a, 0x13a}, //
|
||
|
{0x13c, 0x13c}, //
|
||
|
{0x13e, 0x13e}, //
|
||
|
{0x140, 0x140}, //
|
||
|
{0x142, 0x142}, //
|
||
|
{0x144, 0x144}, //
|
||
|
{0x146, 0x146}, //
|
||
|
{0x148, 0x149}, //
|
||
|
{0x14b, 0x14b}, //
|
||
|
{0x14d, 0x14d}, //
|
||
|
{0x14f, 0x14f}, //
|
||
|
{0x151, 0x151}, //
|
||
|
{0x153, 0x153}, //
|
||
|
{0x155, 0x155}, //
|
||
|
{0x157, 0x157}, //
|
||
|
{0x159, 0x159}, //
|
||
|
{0x15b, 0x15b}, //
|
||
|
{0x15d, 0x15d}, //
|
||
|
{0x15f, 0x15f}, //
|
||
|
{0x161, 0x161}, //
|
||
|
{0x163, 0x163}, //
|
||
|
{0x165, 0x165}, //
|
||
|
{0x167, 0x167}, //
|
||
|
{0x169, 0x169}, //
|
||
|
{0x16b, 0x16b}, //
|
||
|
{0x16d, 0x16d}, //
|
||
|
{0x16f, 0x16f}, //
|
||
|
{0x171, 0x171}, //
|
||
|
{0x173, 0x173}, //
|
||
|
{0x175, 0x175}, //
|
||
|
{0x177, 0x177}, //
|
||
|
{0x17a, 0x17a}, //
|
||
|
{0x17c, 0x17c}, //
|
||
|
{0x17e, 0x180}, //
|
||
|
{0x183, 0x183}, //
|
||
|
{0x185, 0x185}, //
|
||
|
{0x188, 0x188}, //
|
||
|
{0x18c, 0x18d}, //
|
||
|
{0x192, 0x192}, //
|
||
|
{0x195, 0x195}, //
|
||
|
{0x199, 0x19b}, //
|
||
|
{0x19e, 0x19e}, //
|
||
|
{0x1a1, 0x1a1}, //
|
||
|
{0x1a3, 0x1a3}, //
|
||
|
{0x1a5, 0x1a5}, //
|
||
|
{0x1a8, 0x1a8}, //
|
||
|
{0x1aa, 0x1ab}, //
|
||
|
{0x1ad, 0x1ad}, //
|
||
|
{0x1b0, 0x1b0}, //
|
||
|
{0x1b4, 0x1b4}, //
|
||
|
{0x1b6, 0x1b6}, //
|
||
|
{0x1b9, 0x1ba}, //
|
||
|
{0x1bd, 0x1bf}, //
|
||
|
{0x1c5, 0x1c6}, //
|
||
|
{0x1c8, 0x1c9}, //
|
||
|
{0x1cb, 0x1cc}, //
|
||
|
{0x1ce, 0x1ce}, //
|
||
|
{0x1d0, 0x1d0}, //
|
||
|
{0x1d2, 0x1d2}, //
|
||
|
{0x1d4, 0x1d4}, //
|
||
|
{0x1d6, 0x1d6}, //
|
||
|
{0x1d8, 0x1d8}, //
|
||
|
{0x1da, 0x1da}, //
|
||
|
{0x1dc, 0x1dd}, //
|
||
|
{0x1df, 0x1df}, //
|
||
|
{0x1e1, 0x1e1}, //
|
||
|
{0x1e3, 0x1e3}, //
|
||
|
{0x1e5, 0x1e5}, //
|
||
|
{0x1e7, 0x1e7}, //
|
||
|
{0x1e9, 0x1e9}, //
|
||
|
{0x1eb, 0x1eb}, //
|
||
|
{0x1ed, 0x1ed}, //
|
||
|
{0x1ef, 0x1f0}, //
|
||
|
{0x1f2, 0x1f3}, //
|
||
|
{0x1f5, 0x1f5}, //
|
||
|
{0x1f9, 0x1f9}, //
|
||
|
{0x1fb, 0x1fb}, //
|
||
|
{0x1fd, 0x1fd}, //
|
||
|
{0x1ff, 0x1ff}, //
|
||
|
{0x201, 0x201}, //
|
||
|
{0x203, 0x203}, //
|
||
|
{0x205, 0x205}, //
|
||
|
{0x207, 0x207}, //
|
||
|
{0x209, 0x209}, //
|
||
|
{0x20b, 0x20b}, //
|
||
|
{0x20d, 0x20d}, //
|
||
|
{0x20f, 0x20f}, //
|
||
|
{0x211, 0x211}, //
|
||
|
{0x213, 0x213}, //
|
||
|
{0x215, 0x215}, //
|
||
|
{0x217, 0x217}, //
|
||
|
{0x219, 0x219}, //
|
||
|
{0x21b, 0x21b}, //
|
||
|
{0x21d, 0x21d}, //
|
||
|
{0x21f, 0x21f}, //
|
||
|
{0x221, 0x221}, //
|
||
|
{0x223, 0x223}, //
|
||
|
{0x225, 0x225}, //
|
||
|
{0x227, 0x227}, //
|
||
|
{0x229, 0x229}, //
|
||
|
{0x22b, 0x22b}, //
|
||
|
{0x22d, 0x22d}, //
|
||
|
{0x22f, 0x22f}, //
|
||
|
{0x231, 0x231}, //
|
||
|
{0x233, 0x239}, //
|
||
|
{0x23c, 0x23c}, //
|
||
|
{0x23f, 0x240}, //
|
||
|
{0x242, 0x242}, //
|
||
|
{0x247, 0x247}, //
|
||
|
{0x249, 0x249}, //
|
||
|
{0x24b, 0x24b}, //
|
||
|
{0x24d, 0x24d}, //
|
||
|
{0x24f, 0x293}, //
|
||
|
{0x295, 0x2b8}, //
|
||
|
{0x2c0, 0x2c1}, //
|
||
|
{0x2e0, 0x2e4}, //
|
||
|
{0x345, 0x345}, //
|
||
|
{0x371, 0x371}, //
|
||
|
{0x373, 0x373}, //
|
||
|
{0x377, 0x377}, //
|
||
|
{0x37a, 0x37d}, //
|
||
|
{0x390, 0x390}, //
|
||
|
{0x3ac, 0x3ce}, //
|
||
|
{0x3d0, 0x3d1}, //
|
||
|
{0x3d5, 0x3d7}, //
|
||
|
{0x3d9, 0x3d9}, //
|
||
|
{0x3db, 0x3db}, //
|
||
|
{0x3dd, 0x3dd}, //
|
||
|
{0x3df, 0x3df}, //
|
||
|
{0x3e1, 0x3e1}, //
|
||
|
{0x3e3, 0x3e3}, //
|
||
|
{0x3e5, 0x3e5}, //
|
||
|
{0x3e7, 0x3e7}, //
|
||
|
{0x3e9, 0x3e9}, //
|
||
|
{0x3eb, 0x3eb}, //
|
||
|
{0x3ed, 0x3ed}, //
|
||
|
{0x3ef, 0x3f3}, //
|
||
|
{0x3f5, 0x3f5}, //
|
||
|
{0x3f8, 0x3f8}, //
|
||
|
{0x3fb, 0x3fc}, //
|
||
|
{0x430, 0x45f}, //
|
||
|
{0x461, 0x461}, //
|
||
|
{0x463, 0x463}, //
|
||
|
{0x465, 0x465}, //
|
||
|
{0x467, 0x467}, //
|
||
|
{0x469, 0x469}, //
|
||
|
{0x46b, 0x46b}, //
|
||
|
{0x46d, 0x46d}, //
|
||
|
{0x46f, 0x46f}, //
|
||
|
{0x471, 0x471}, //
|
||
|
{0x473, 0x473}, //
|
||
|
{0x475, 0x475}, //
|
||
|
{0x477, 0x477}, //
|
||
|
{0x479, 0x479}, //
|
||
|
{0x47b, 0x47b}, //
|
||
|
{0x47d, 0x47d}, //
|
||
|
{0x47f, 0x47f}, //
|
||
|
{0x481, 0x481}, //
|
||
|
{0x48b, 0x48b}, //
|
||
|
{0x48d, 0x48d}, //
|
||
|
{0x48f, 0x48f}, //
|
||
|
{0x491, 0x491}, //
|
||
|
{0x493, 0x493}, //
|
||
|
{0x495, 0x495}, //
|
||
|
{0x497, 0x497}, //
|
||
|
{0x499, 0x499}, //
|
||
|
{0x49b, 0x49b}, //
|
||
|
{0x49d, 0x49d}, //
|
||
|
{0x49f, 0x49f}, //
|
||
|
{0x4a1, 0x4a1}, //
|
||
|
{0x4a3, 0x4a3}, //
|
||
|
{0x4a5, 0x4a5}, //
|
||
|
{0x4a7, 0x4a7}, //
|
||
|
{0x4a9, 0x4a9}, //
|
||
|
{0x4ab, 0x4ab}, //
|
||
|
{0x4ad, 0x4ad}, //
|
||
|
{0x4af, 0x4af}, //
|
||
|
{0x4b1, 0x4b1}, //
|
||
|
{0x4b3, 0x4b3}, //
|
||
|
{0x4b5, 0x4b5}, //
|
||
|
{0x4b7, 0x4b7}, //
|
||
|
{0x4b9, 0x4b9}, //
|
||
|
{0x4bb, 0x4bb}, //
|
||
|
{0x4bd, 0x4bd}, //
|
||
|
{0x4bf, 0x4bf}, //
|
||
|
{0x4c2, 0x4c2}, //
|
||
|
{0x4c4, 0x4c4}, //
|
||
|
{0x4c6, 0x4c6}, //
|
||
|
{0x4c8, 0x4c8}, //
|
||
|
{0x4ca, 0x4ca}, //
|
||
|
{0x4cc, 0x4cc}, //
|
||
|
{0x4ce, 0x4cf}, //
|
||
|
{0x4d1, 0x4d1}, //
|
||
|
{0x4d3, 0x4d3}, //
|
||
|
{0x4d5, 0x4d5}, //
|
||
|
{0x4d7, 0x4d7}, //
|
||
|
{0x4d9, 0x4d9}, //
|
||
|
{0x4db, 0x4db}, //
|
||
|
{0x4dd, 0x4dd}, //
|
||
|
{0x4df, 0x4df}, //
|
||
|
{0x4e1, 0x4e1}, //
|
||
|
{0x4e3, 0x4e3}, //
|
||
|
{0x4e5, 0x4e5}, //
|
||
|
{0x4e7, 0x4e7}, //
|
||
|
{0x4e9, 0x4e9}, //
|
||
|
{0x4eb, 0x4eb}, //
|
||
|
{0x4ed, 0x4ed}, //
|
||
|
{0x4ef, 0x4ef}, //
|
||
|
{0x4f1, 0x4f1}, //
|
||
|
{0x4f3, 0x4f3}, //
|
||
|
{0x4f5, 0x4f5}, //
|
||
|
{0x4f7, 0x4f7}, //
|
||
|
{0x4f9, 0x4f9}, //
|
||
|
{0x4fb, 0x4fb}, //
|
||
|
{0x4fd, 0x4fd}, //
|
||
|
{0x4ff, 0x4ff}, //
|
||
|
{0x501, 0x501}, //
|
||
|
{0x503, 0x503}, //
|
||
|
{0x505, 0x505}, //
|
||
|
{0x507, 0x507}, //
|
||
|
{0x509, 0x509}, //
|
||
|
{0x50b, 0x50b}, //
|
||
|
{0x50d, 0x50d}, //
|
||
|
{0x50f, 0x50f}, //
|
||
|
{0x511, 0x511}, //
|
||
|
{0x513, 0x513}, //
|
||
|
{0x515, 0x515}, //
|
||
|
{0x517, 0x517}, //
|
||
|
{0x519, 0x519}, //
|
||
|
{0x51b, 0x51b}, //
|
||
|
{0x51d, 0x51d}, //
|
||
|
{0x51f, 0x51f}, //
|
||
|
{0x521, 0x521}, //
|
||
|
{0x523, 0x523}, //
|
||
|
{0x525, 0x525}, //
|
||
|
{0x527, 0x527}, //
|
||
|
{0x529, 0x529}, //
|
||
|
{0x52b, 0x52b}, //
|
||
|
{0x52d, 0x52d}, //
|
||
|
{0x52f, 0x52f}, //
|
||
|
{0x560, 0x588}, //
|
||
|
{0x10d0, 0x10fa}, //
|
||
|
{0x10fc, 0x10ff}, //
|
||
|
{0x13f8, 0x13fd}, //
|
||
|
{0x1c80, 0x1c88}, //
|
||
|
{0x1d00, 0x1dbf}, //
|
||
|
{0x1e01, 0x1e01}, //
|
||
|
{0x1e03, 0x1e03}, //
|
||
|
{0x1e05, 0x1e05}, //
|
||
|
{0x1e07, 0x1e07}, //
|
||
|
{0x1e09, 0x1e09}, //
|
||
|
{0x1e0b, 0x1e0b}, //
|
||
|
{0x1e0d, 0x1e0d}, //
|
||
|
{0x1e0f, 0x1e0f}, //
|
||
|
{0x1e11, 0x1e11}, //
|
||
|
{0x1e13, 0x1e13}, //
|
||
|
{0x1e15, 0x1e15}, //
|
||
|
{0x1e17, 0x1e17}, //
|
||
|
{0x1e19, 0x1e19}, //
|
||
|
{0x1e1b, 0x1e1b}, //
|
||
|
{0x1e1d, 0x1e1d}, //
|
||
|
{0x1e1f, 0x1e1f}, //
|
||
|
{0x1e21, 0x1e21}, //
|
||
|
{0x1e23, 0x1e23}, //
|
||
|
{0x1e25, 0x1e25}, //
|
||
|
{0x1e27, 0x1e27}, //
|
||
|
{0x1e29, 0x1e29}, //
|
||
|
{0x1e2b, 0x1e2b}, //
|
||
|
{0x1e2d, 0x1e2d}, //
|
||
|
{0x1e2f, 0x1e2f}, //
|
||
|
{0x1e31, 0x1e31}, //
|
||
|
{0x1e33, 0x1e33}, //
|
||
|
{0x1e35, 0x1e35}, //
|
||
|
{0x1e37, 0x1e37}, //
|
||
|
{0x1e39, 0x1e39}, //
|
||
|
{0x1e3b, 0x1e3b}, //
|
||
|
{0x1e3d, 0x1e3d}, //
|
||
|
{0x1e3f, 0x1e3f}, //
|
||
|
{0x1e41, 0x1e41}, //
|
||
|
{0x1e43, 0x1e43}, //
|
||
|
{0x1e45, 0x1e45}, //
|
||
|
{0x1e47, 0x1e47}, //
|
||
|
{0x1e49, 0x1e49}, //
|
||
|
{0x1e4b, 0x1e4b}, //
|
||
|
{0x1e4d, 0x1e4d}, //
|
||
|
{0x1e4f, 0x1e4f}, //
|
||
|
{0x1e51, 0x1e51}, //
|
||
|
{0x1e53, 0x1e53}, //
|
||
|
{0x1e55, 0x1e55}, //
|
||
|
{0x1e57, 0x1e57}, //
|
||
|
{0x1e59, 0x1e59}, //
|
||
|
{0x1e5b, 0x1e5b}, //
|
||
|
{0x1e5d, 0x1e5d}, //
|
||
|
{0x1e5f, 0x1e5f}, //
|
||
|
{0x1e61, 0x1e61}, //
|
||
|
{0x1e63, 0x1e63}, //
|
||
|
{0x1e65, 0x1e65}, //
|
||
|
{0x1e67, 0x1e67}, //
|
||
|
{0x1e69, 0x1e69}, //
|
||
|
{0x1e6b, 0x1e6b}, //
|
||
|
{0x1e6d, 0x1e6d}, //
|
||
|
{0x1e6f, 0x1e6f}, //
|
||
|
{0x1e71, 0x1e71}, //
|
||
|
{0x1e73, 0x1e73}, //
|
||
|
{0x1e75, 0x1e75}, //
|
||
|
{0x1e77, 0x1e77}, //
|
||
|
{0x1e79, 0x1e79}, //
|
||
|
{0x1e7b, 0x1e7b}, //
|
||
|
{0x1e7d, 0x1e7d}, //
|
||
|
{0x1e7f, 0x1e7f}, //
|
||
|
{0x1e81, 0x1e81}, //
|
||
|
{0x1e83, 0x1e83}, //
|
||
|
{0x1e85, 0x1e85}, //
|
||
|
{0x1e87, 0x1e87}, //
|
||
|
{0x1e89, 0x1e89}, //
|
||
|
{0x1e8b, 0x1e8b}, //
|
||
|
{0x1e8d, 0x1e8d}, //
|
||
|
{0x1e8f, 0x1e8f}, //
|
||
|
{0x1e91, 0x1e91}, //
|
||
|
{0x1e93, 0x1e93}, //
|
||
|
{0x1e95, 0x1e9d}, //
|
||
|
{0x1e9f, 0x1e9f}, //
|
||
|
{0x1ea1, 0x1ea1}, //
|
||
|
{0x1ea3, 0x1ea3}, //
|
||
|
{0x1ea5, 0x1ea5}, //
|
||
|
{0x1ea7, 0x1ea7}, //
|
||
|
{0x1ea9, 0x1ea9}, //
|
||
|
{0x1eab, 0x1eab}, //
|
||
|
{0x1ead, 0x1ead}, //
|
||
|
{0x1eaf, 0x1eaf}, //
|
||
|
{0x1eb1, 0x1eb1}, //
|
||
|
{0x1eb3, 0x1eb3}, //
|
||
|
{0x1eb5, 0x1eb5}, //
|
||
|
{0x1eb7, 0x1eb7}, //
|
||
|
{0x1eb9, 0x1eb9}, //
|
||
|
{0x1ebb, 0x1ebb}, //
|
||
|
{0x1ebd, 0x1ebd}, //
|
||
|
{0x1ebf, 0x1ebf}, //
|
||
|
{0x1ec1, 0x1ec1}, //
|
||
|
{0x1ec3, 0x1ec3}, //
|
||
|
{0x1ec5, 0x1ec5}, //
|
||
|
{0x1ec7, 0x1ec7}, //
|
||
|
{0x1ec9, 0x1ec9}, //
|
||
|
{0x1ecb, 0x1ecb}, //
|
||
|
{0x1ecd, 0x1ecd}, //
|
||
|
{0x1ecf, 0x1ecf}, //
|
||
|
{0x1ed1, 0x1ed1}, //
|
||
|
{0x1ed3, 0x1ed3}, //
|
||
|
{0x1ed5, 0x1ed5}, //
|
||
|
{0x1ed7, 0x1ed7}, //
|
||
|
{0x1ed9, 0x1ed9}, //
|
||
|
{0x1edb, 0x1edb}, //
|
||
|
{0x1edd, 0x1edd}, //
|
||
|
{0x1edf, 0x1edf}, //
|
||
|
{0x1ee1, 0x1ee1}, //
|
||
|
{0x1ee3, 0x1ee3}, //
|
||
|
{0x1ee5, 0x1ee5}, //
|
||
|
{0x1ee7, 0x1ee7}, //
|
||
|
{0x1ee9, 0x1ee9}, //
|
||
|
{0x1eeb, 0x1eeb}, //
|
||
|
{0x1eed, 0x1eed}, //
|
||
|
{0x1eef, 0x1eef}, //
|
||
|
{0x1ef1, 0x1ef1}, //
|
||
|
{0x1ef3, 0x1ef3}, //
|
||
|
{0x1ef5, 0x1ef5}, //
|
||
|
{0x1ef7, 0x1ef7}, //
|
||
|
{0x1ef9, 0x1ef9}, //
|
||
|
{0x1efb, 0x1efb}, //
|
||
|
{0x1efd, 0x1efd}, //
|
||
|
{0x1eff, 0x1f07}, //
|
||
|
{0x1f10, 0x1f15}, //
|
||
|
{0x1f20, 0x1f27}, //
|
||
|
{0x1f30, 0x1f37}, //
|
||
|
{0x1f40, 0x1f45}, //
|
||
|
{0x1f50, 0x1f57}, //
|
||
|
{0x1f60, 0x1f67}, //
|
||
|
{0x1f70, 0x1f7d}, //
|
||
|
{0x1f80, 0x1f87}, //
|
||
|
{0x1f90, 0x1f97}, //
|
||
|
{0x1fa0, 0x1fa7}, //
|
||
|
{0x1fb0, 0x1fb4}, //
|
||
|
{0x1fb6, 0x1fb7}, //
|
||
|
{0x1fbe, 0x1fbe}, //
|
||
|
{0x1fc2, 0x1fc4}, //
|
||
|
{0x1fc6, 0x1fc7}, //
|
||
|
{0x1fd0, 0x1fd3}, //
|
||
|
{0x1fd6, 0x1fd7}, //
|
||
|
{0x1fe0, 0x1fe7}, //
|
||
|
{0x1ff2, 0x1ff4}, //
|
||
|
{0x1ff6, 0x1ff7}, //
|
||
|
{0x2071, 0x2071}, //
|
||
|
{0x207f, 0x207f}, //
|
||
|
{0x2090, 0x209c}, //
|
||
|
{0x210a, 0x210a}, //
|
||
|
{0x210e, 0x210f}, //
|
||
|
{0x2113, 0x2113}, //
|
||
|
{0x212f, 0x212f}, //
|
||
|
{0x2134, 0x2134}, //
|
||
|
{0x2139, 0x2139}, //
|
||
|
{0x213c, 0x213d}, //
|
||
|
{0x2146, 0x2149}, //
|
||
|
{0x214e, 0x214e}, //
|
||
|
{0x2170, 0x217f}, //
|
||
|
{0x2184, 0x2184}, //
|
||
|
{0x24d0, 0x24e9}, //
|
||
|
{0x2c30, 0x2c5f}, //
|
||
|
{0x2c61, 0x2c61}, //
|
||
|
{0x2c65, 0x2c66}, //
|
||
|
{0x2c68, 0x2c68}, //
|
||
|
{0x2c6a, 0x2c6a}, //
|
||
|
{0x2c6c, 0x2c6c}, //
|
||
|
{0x2c71, 0x2c71}, //
|
||
|
{0x2c73, 0x2c74}, //
|
||
|
{0x2c76, 0x2c7d}, //
|
||
|
{0x2c81, 0x2c81}, //
|
||
|
{0x2c83, 0x2c83}, //
|
||
|
{0x2c85, 0x2c85}, //
|
||
|
{0x2c87, 0x2c87}, //
|
||
|
{0x2c89, 0x2c89}, //
|
||
|
{0x2c8b, 0x2c8b}, //
|
||
|
{0x2c8d, 0x2c8d}, //
|
||
|
{0x2c8f, 0x2c8f}, //
|
||
|
{0x2c91, 0x2c91}, //
|
||
|
{0x2c93, 0x2c93}, //
|
||
|
{0x2c95, 0x2c95}, //
|
||
|
{0x2c97, 0x2c97}, //
|
||
|
{0x2c99, 0x2c99}, //
|
||
|
{0x2c9b, 0x2c9b}, //
|
||
|
{0x2c9d, 0x2c9d}, //
|
||
|
{0x2c9f, 0x2c9f}, //
|
||
|
{0x2ca1, 0x2ca1}, //
|
||
|
{0x2ca3, 0x2ca3}, //
|
||
|
{0x2ca5, 0x2ca5}, //
|
||
|
{0x2ca7, 0x2ca7}, //
|
||
|
{0x2ca9, 0x2ca9}, //
|
||
|
{0x2cab, 0x2cab}, //
|
||
|
{0x2cad, 0x2cad}, //
|
||
|
{0x2caf, 0x2caf}, //
|
||
|
{0x2cb1, 0x2cb1}, //
|
||
|
{0x2cb3, 0x2cb3}, //
|
||
|
{0x2cb5, 0x2cb5}, //
|
||
|
{0x2cb7, 0x2cb7}, //
|
||
|
{0x2cb9, 0x2cb9}, //
|
||
|
{0x2cbb, 0x2cbb}, //
|
||
|
{0x2cbd, 0x2cbd}, //
|
||
|
{0x2cbf, 0x2cbf}, //
|
||
|
{0x2cc1, 0x2cc1}, //
|
||
|
{0x2cc3, 0x2cc3}, //
|
||
|
{0x2cc5, 0x2cc5}, //
|
||
|
{0x2cc7, 0x2cc7}, //
|
||
|
{0x2cc9, 0x2cc9}, //
|
||
|
{0x2ccb, 0x2ccb}, //
|
||
|
{0x2ccd, 0x2ccd}, //
|
||
|
{0x2ccf, 0x2ccf}, //
|
||
|
{0x2cd1, 0x2cd1}, //
|
||
|
{0x2cd3, 0x2cd3}, //
|
||
|
{0x2cd5, 0x2cd5}, //
|
||
|
{0x2cd7, 0x2cd7}, //
|
||
|
{0x2cd9, 0x2cd9}, //
|
||
|
{0x2cdb, 0x2cdb}, //
|
||
|
{0x2cdd, 0x2cdd}, //
|
||
|
{0x2cdf, 0x2cdf}, //
|
||
|
{0x2ce1, 0x2ce1}, //
|
||
|
{0x2ce3, 0x2ce4}, //
|
||
|
{0x2cec, 0x2cec}, //
|
||
|
{0x2cee, 0x2cee}, //
|
||
|
{0x2cf3, 0x2cf3}, //
|
||
|
{0x2d00, 0x2d25}, //
|
||
|
{0x2d27, 0x2d27}, //
|
||
|
{0x2d2d, 0x2d2d}, //
|
||
|
{0xa641, 0xa641}, //
|
||
|
{0xa643, 0xa643}, //
|
||
|
{0xa645, 0xa645}, //
|
||
|
{0xa647, 0xa647}, //
|
||
|
{0xa649, 0xa649}, //
|
||
|
{0xa64b, 0xa64b}, //
|
||
|
{0xa64d, 0xa64d}, //
|
||
|
{0xa64f, 0xa64f}, //
|
||
|
{0xa651, 0xa651}, //
|
||
|
{0xa653, 0xa653}, //
|
||
|
{0xa655, 0xa655}, //
|
||
|
{0xa657, 0xa657}, //
|
||
|
{0xa659, 0xa659}, //
|
||
|
{0xa65b, 0xa65b}, //
|
||
|
{0xa65d, 0xa65d}, //
|
||
|
{0xa65f, 0xa65f}, //
|
||
|
{0xa661, 0xa661}, //
|
||
|
{0xa663, 0xa663}, //
|
||
|
{0xa665, 0xa665}, //
|
||
|
{0xa667, 0xa667}, //
|
||
|
{0xa669, 0xa669}, //
|
||
|
{0xa66b, 0xa66b}, //
|
||
|
{0xa66d, 0xa66d}, //
|
||
|
{0xa681, 0xa681}, //
|
||
|
{0xa683, 0xa683}, //
|
||
|
{0xa685, 0xa685}, //
|
||
|
{0xa687, 0xa687}, //
|
||
|
{0xa689, 0xa689}, //
|
||
|
{0xa68b, 0xa68b}, //
|
||
|
{0xa68d, 0xa68d}, //
|
||
|
{0xa68f, 0xa68f}, //
|
||
|
{0xa691, 0xa691}, //
|
||
|
{0xa693, 0xa693}, //
|
||
|
{0xa695, 0xa695}, //
|
||
|
{0xa697, 0xa697}, //
|
||
|
{0xa699, 0xa699}, //
|
||
|
{0xa69b, 0xa69d}, //
|
||
|
{0xa723, 0xa723}, //
|
||
|
{0xa725, 0xa725}, //
|
||
|
{0xa727, 0xa727}, //
|
||
|
{0xa729, 0xa729}, //
|
||
|
{0xa72b, 0xa72b}, //
|
||
|
{0xa72d, 0xa72d}, //
|
||
|
{0xa72f, 0xa731}, //
|
||
|
{0xa733, 0xa733}, //
|
||
|
{0xa735, 0xa735}, //
|
||
|
{0xa737, 0xa737}, //
|
||
|
{0xa739, 0xa739}, //
|
||
|
{0xa73b, 0xa73b}, //
|
||
|
{0xa73d, 0xa73d}, //
|
||
|
{0xa73f, 0xa73f}, //
|
||
|
{0xa741, 0xa741}, //
|
||
|
{0xa743, 0xa743}, //
|
||
|
{0xa745, 0xa745}, //
|
||
|
{0xa747, 0xa747}, //
|
||
|
{0xa749, 0xa749}, //
|
||
|
{0xa74b, 0xa74b}, //
|
||
|
{0xa74d, 0xa74d}, //
|
||
|
{0xa74f, 0xa74f}, //
|
||
|
{0xa751, 0xa751}, //
|
||
|
{0xa753, 0xa753}, //
|
||
|
{0xa755, 0xa755}, //
|
||
|
{0xa757, 0xa757}, //
|
||
|
{0xa759, 0xa759}, //
|
||
|
{0xa75b, 0xa75b}, //
|
||
|
{0xa75d, 0xa75d}, //
|
||
|
{0xa75f, 0xa75f}, //
|
||
|
{0xa761, 0xa761}, //
|
||
|
{0xa763, 0xa763}, //
|
||
|
{0xa765, 0xa765}, //
|
||
|
{0xa767, 0xa767}, //
|
||
|
{0xa769, 0xa769}, //
|
||
|
{0xa76b, 0xa76b}, //
|
||
|
{0xa76d, 0xa76d}, //
|
||
|
{0xa76f, 0xa778}, //
|
||
|
{0xa77a, 0xa77a}, //
|
||
|
{0xa77c, 0xa77c}, //
|
||
|
{0xa77f, 0xa77f}, //
|
||
|
{0xa781, 0xa781}, //
|
||
|
{0xa783, 0xa783}, //
|
||
|
{0xa785, 0xa785}, //
|
||
|
{0xa787, 0xa787}, //
|
||
|
{0xa78c, 0xa78c}, //
|
||
|
{0xa78e, 0xa78e}, //
|
||
|
{0xa791, 0xa791}, //
|
||
|
{0xa793, 0xa795}, //
|
||
|
{0xa797, 0xa797}, //
|
||
|
{0xa799, 0xa799}, //
|
||
|
{0xa79b, 0xa79b}, //
|
||
|
{0xa79d, 0xa79d}, //
|
||
|
{0xa79f, 0xa79f}, //
|
||
|
{0xa7a1, 0xa7a1}, //
|
||
|
{0xa7a3, 0xa7a3}, //
|
||
|
{0xa7a5, 0xa7a5}, //
|
||
|
{0xa7a7, 0xa7a7}, //
|
||
|
{0xa7a9, 0xa7a9}, //
|
||
|
{0xa7af, 0xa7af}, //
|
||
|
{0xa7b5, 0xa7b5}, //
|
||
|
{0xa7b7, 0xa7b7}, //
|
||
|
{0xa7b9, 0xa7b9}, //
|
||
|
{0xa7bb, 0xa7bb}, //
|
||
|
{0xa7bd, 0xa7bd}, //
|
||
|
{0xa7bf, 0xa7bf}, //
|
||
|
{0xa7c1, 0xa7c1}, //
|
||
|
{0xa7c3, 0xa7c3}, //
|
||
|
{0xa7c8, 0xa7c8}, //
|
||
|
{0xa7ca, 0xa7ca}, //
|
||
|
{0xa7d1, 0xa7d1}, //
|
||
|
{0xa7d3, 0xa7d3}, //
|
||
|
{0xa7d5, 0xa7d5}, //
|
||
|
{0xa7d7, 0xa7d7}, //
|
||
|
{0xa7d9, 0xa7d9}, //
|
||
|
{0xa7f2, 0xa7f4}, //
|
||
|
{0xa7f6, 0xa7f6}, //
|
||
|
{0xa7f8, 0xa7fa}, //
|
||
|
{0xab30, 0xab5a}, //
|
||
|
{0xab5c, 0xab69}, //
|
||
|
{0xab70, 0xabbf}, //
|
||
|
{0xfb00, 0xfb06}, //
|
||
|
{0xfb13, 0xfb17}, //
|
||
|
{0xff41, 0xff5a}, //
|
||
|
};
|
||
|
|
||
|
static const unsigned kLowerAstral[][2] = {
|
||
|
{0x10428, 0x1044f}, //
|
||
|
{0x104d8, 0x104fb}, //
|
||
|
{0x10597, 0x105a1}, //
|
||
|
{0x105a3, 0x105b1}, //
|
||
|
{0x105b3, 0x105b9}, //
|
||
|
{0x105bb, 0x105bc}, //
|
||
|
{0x10780, 0x10780}, //
|
||
|
{0x10783, 0x10785}, //
|
||
|
{0x10787, 0x107b0}, //
|
||
|
{0x107b2, 0x107ba}, //
|
||
|
{0x10cc0, 0x10cf2}, //
|
||
|
{0x118c0, 0x118df}, //
|
||
|
{0x16e60, 0x16e7f}, //
|
||
|
{0x1d41a, 0x1d433}, //
|
||
|
{0x1d44e, 0x1d454}, //
|
||
|
{0x1d456, 0x1d467}, //
|
||
|
{0x1d482, 0x1d49b}, //
|
||
|
{0x1d4b6, 0x1d4b9}, //
|
||
|
{0x1d4bb, 0x1d4bb}, //
|
||
|
{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}, //
|
||
|
{0x1d7cb, 0x1d7cb}, //
|
||
|
{0x1df00, 0x1df09}, //
|
||
|
{0x1df0b, 0x1df1e}, //
|
||
|
{0x1df25, 0x1df2a}, //
|
||
|
{0x1e030, 0x1e06d}, //
|
||
|
{0x1e922, 0x1e943}, //
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Returns nonzero if c is lowercase letter.
|
||
|
*/
|
||
|
int iswlower(wint_t c) {
|
||
|
if (!IsTiny() && c < 128)
|
||
|
return 'a' <= c && c <= 'z';
|
||
|
if (c < 65536)
|
||
|
return has_char(kLower, ARRAYLEN(kLower), (unsigned short)c);
|
||
|
return has_char(kLowerAstral, ARRAYLEN(kLowerAstral), (unsigned)c);
|
||
|
}
|
||
|
|
||
|
__weak_reference(iswlower, iswlower_l);
|