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