LICENCE
15 years ago
ReadMe.txt
15 years ago
idna_convert.class.php
15 years ago
transcode_wrapper.php
15 years ago
uctc.php
15 years ago
idna_convert.class.php
2707 lines
| 1 | <?php |
| 2 | // {{{ license |
| 3 | |
| 4 | /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4 foldmethod=marker: */ |
| 5 | // |
| 6 | // +----------------------------------------------------------------------+ |
| 7 | // | This library is free software; you can redistribute it and/or modify | |
| 8 | // | it under the terms of the GNU Lesser General Public License as | |
| 9 | // | published by the Free Software Foundation; either version 2.1 of the | |
| 10 | // | License, or (at your option) any later version. | |
| 11 | // | | |
| 12 | // | This library is distributed in the hope that it will be useful, but | |
| 13 | // | WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 14 | // | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| 15 | // | Lesser General Public License for more details. | |
| 16 | // | | |
| 17 | // | You should have received a copy of the GNU Lesser General Public | |
| 18 | // | License along with this library; if not, write to the Free Software | |
| 19 | // | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 | |
| 20 | // | USA. | |
| 21 | // +----------------------------------------------------------------------+ |
| 22 | // |
| 23 | |
| 24 | // }}} |
| 25 | |
| 26 | /** |
| 27 | * Encode/decode Internationalized Domain Names. |
| 28 | * |
| 29 | * The class allows to convert internationalized domain names |
| 30 | * (see RFC 3490 for details) as they can be used with various registries worldwide |
| 31 | * to be translated between their original (localized) form and their encoded form |
| 32 | * as it will be used in the DNS (Domain Name System). |
| 33 | * |
| 34 | * The class provides two public methods, encode() and decode(), which do exactly |
| 35 | * what you would expect them to do. You are allowed to use complete domain names, |
| 36 | * simple strings and complete email addresses as well. That means, that you might |
| 37 | * use any of the following notations: |
| 38 | * |
| 39 | * - www.nörgler.com |
| 40 | * - xn--nrgler-wxa |
| 41 | * - xn--brse-5qa.xn--knrz-1ra.info |
| 42 | * |
| 43 | * Unicode input might be given as either UTF-8 string, UCS-4 string or UCS-4 |
| 44 | * array. Unicode output is available in the same formats. |
| 45 | * You can select your preferred format via {@link set_paramter()}. |
| 46 | * |
| 47 | * ACE input and output is always expected to be ASCII. |
| 48 | * |
| 49 | * @author Matthias Sommerfeld <mso@phlylabs.de> |
| 50 | * @author Leonid Kogan <lko@neuse.de> |
| 51 | * @copyright 2004-2009 phlyLabs Berlin, http://phlylabs.de |
| 52 | * @version 0.6.3 |
| 53 | * @changelog since 0.5.1 class updated to PHP5/6 style should be compatible to PHP 4.3+ |
| 54 | * - added a missing replace mapping for THAI CHARACTER SARA AM |
| 55 | */ |
| 56 | class idna_convert |
| 57 | { |
| 58 | // NP See below |
| 59 | |
| 60 | // Internal settings, do not mess with them |
| 61 | private $_punycode_prefix = 'xn--'; |
| 62 | private $_invalid_ucs = 0x80000000; |
| 63 | private $_max_ucs = 0x10FFFF; |
| 64 | private $_base = 36; |
| 65 | private $_tmin = 1; |
| 66 | private $_tmax = 26; |
| 67 | private $_skew = 38; |
| 68 | private $_damp = 700; |
| 69 | private $_initial_bias = 72; |
| 70 | private $_initial_n = 0x80; |
| 71 | private $_sbase = 0xAC00; |
| 72 | private $_lbase = 0x1100; |
| 73 | private $_vbase = 0x1161; |
| 74 | private $_tbase = 0x11A7; |
| 75 | private $_lcount = 19; |
| 76 | private $_vcount = 21; |
| 77 | private $_tcount = 28; |
| 78 | private $_ncount = 588; // _vcount * _tcount |
| 79 | private $_scount = 11172; // _lcount * _tcount * _vcount |
| 80 | private $_error = false; |
| 81 | |
| 82 | // See {@link set_paramter()} for details of how to change the following |
| 83 | // settings from within your script / application |
| 84 | private $_api_encoding = 'utf8'; // Default input charset is UTF-8 |
| 85 | private $_allow_overlong = false; // Overlong UTF-8 encodings are forbidden |
| 86 | private $_strict_mode = false; // Behave strict or not |
| 87 | |
| 88 | |
| 89 | /** |
| 90 | * the constructor |
| 91 | * |
| 92 | * @param array $options |
| 93 | * @return boolean |
| 94 | * @since 0.5.2 |
| 95 | */ |
| 96 | public function __construct($options = false) |
| 97 | { |
| 98 | $this->slast = $this->_sbase + $this->_lcount * $this->_vcount * $this->_tcount; |
| 99 | // If parameters are given, pass these to the respective method |
| 100 | if (is_array($options)) return $this->set_parameter($options); |
| 101 | return true; |
| 102 | } |
| 103 | |
| 104 | /** |
| 105 | * Sets a new option value. Available options and values: |
| 106 | * [encoding - Use either UTF-8, UCS4 as array or UCS4 as string as input ('utf8' for UTF-8, |
| 107 | * 'ucs4_string' and 'ucs4_array' respectively for UCS4); The output is always UTF-8] |
| 108 | * [overlong - Unicode does not allow unnecessarily long encodings of chars, |
| 109 | * to allow this, set this parameter to true, else to false; |
| 110 | * default is false.] |
| 111 | * [strict - true: strict mode, good for registration purposes - Causes errors |
| 112 | * on failures; false: loose mode, ideal for "wildlife" applications |
| 113 | * by silently ignoring errors and returning the original input instead |
| 114 | * |
| 115 | * @param mixed Parameter to set (string: single parameter; array of Parameter => Value pairs) |
| 116 | * @param string Value to use (if parameter 1 is a string) |
| 117 | * @return boolean true on success, false otherwise |
| 118 | */ |
| 119 | public function set_parameter($option, $value = false) |
| 120 | { |
| 121 | if (!is_array($option)) { |
| 122 | $option = array($option => $value); |
| 123 | } |
| 124 | foreach ($option as $k => $v) { |
| 125 | switch ($k) { |
| 126 | case 'encoding': |
| 127 | switch ($v) { |
| 128 | case 'utf8': |
| 129 | case 'ucs4_string': |
| 130 | case 'ucs4_array': |
| 131 | $this->_api_encoding = $v; |
| 132 | break; |
| 133 | default: |
| 134 | $this->_error('Set Parameter: Unknown parameter '.$v.' for option '.$k); |
| 135 | return false; |
| 136 | } |
| 137 | break; |
| 138 | case 'overlong': |
| 139 | $this->_allow_overlong = ($v) ? true : false; |
| 140 | break; |
| 141 | case 'strict': |
| 142 | $this->_strict_mode = ($v) ? true : false; |
| 143 | break; |
| 144 | default: |
| 145 | $this->_error('Set Parameter: Unknown option '.$k); |
| 146 | return false; |
| 147 | } |
| 148 | } |
| 149 | return true; |
| 150 | } |
| 151 | |
| 152 | /** |
| 153 | * Decode a given ACE domain name |
| 154 | * @param string Domain name (ACE string) |
| 155 | * [@param string Desired output encoding, see {@link set_parameter}] |
| 156 | * @return string Decoded Domain name (UTF-8 or UCS-4) |
| 157 | */ |
| 158 | public function decode($input, $one_time_encoding = false) |
| 159 | { |
| 160 | // Optionally set |
| 161 | if ($one_time_encoding) { |
| 162 | switch ($one_time_encoding) { |
| 163 | case 'utf8': |
| 164 | case 'ucs4_string': |
| 165 | case 'ucs4_array': |
| 166 | break; |
| 167 | default: |
| 168 | $this->_error('Unknown encoding '.$one_time_encoding); |
| 169 | return false; |
| 170 | } |
| 171 | } |
| 172 | // Make sure to drop any newline characters around |
| 173 | $input = trim($input); |
| 174 | |
| 175 | // Negotiate input and try to determine, whether it is a plain string, |
| 176 | // an email address or something like a complete URL |
| 177 | if (strpos($input, '@')) { // Maybe it is an email address |
| 178 | // No no in strict mode |
| 179 | if ($this->_strict_mode) { |
| 180 | $this->_error('Only simple domain name parts can be handled in strict mode'); |
| 181 | return false; |
| 182 | } |
| 183 | list ($email_pref, $input) = explode('@', $input, 2); |
| 184 | $arr = explode('.', $input); |
| 185 | foreach ($arr as $k => $v) { |
| 186 | if (preg_match('!^'.preg_quote($this->_punycode_prefix, '!').'!', $v)) { |
| 187 | $conv = $this->_decode($v); |
| 188 | if ($conv) $arr[$k] = $conv; |
| 189 | } |
| 190 | } |
| 191 | $input = join('.', $arr); |
| 192 | $arr = explode('.', $email_pref); |
| 193 | foreach ($arr as $k => $v) { |
| 194 | if (preg_match('!^'.preg_quote($this->_punycode_prefix, '!').'!', $v)) { |
| 195 | $conv = $this->_decode($v); |
| 196 | if ($conv) $arr[$k] = $conv; |
| 197 | } |
| 198 | } |
| 199 | $email_pref = join('.', $arr); |
| 200 | $return = $email_pref . '@' . $input; |
| 201 | } elseif (preg_match('![:\./]!', $input)) { // Or a complete domain name (with or without paths / parameters) |
| 202 | // No no in strict mode |
| 203 | if ($this->_strict_mode) { |
| 204 | $this->_error('Only simple domain name parts can be handled in strict mode'); |
| 205 | return false; |
| 206 | } |
| 207 | $parsed = parse_url($input); |
| 208 | if (isset($parsed['host'])) { |
| 209 | $arr = explode('.', $parsed['host']); |
| 210 | foreach ($arr as $k => $v) { |
| 211 | $conv = $this->_decode($v); |
| 212 | if ($conv) $arr[$k] = $conv; |
| 213 | } |
| 214 | $parsed['host'] = join('.', $arr); |
| 215 | $return = |
| 216 | (empty($parsed['scheme']) ? '' : $parsed['scheme'].(strtolower($parsed['scheme']) == 'mailto' ? ':' : '://')) |
| 217 | .(empty($parsed['user']) ? '' : $parsed['user'].(empty($parsed['pass']) ? '' : ':'.$parsed['pass']).'@') |
| 218 | .$parsed['host'] |
| 219 | .(empty($parsed['port']) ? '' : ':'.$parsed['port']) |
| 220 | .(empty($parsed['path']) ? '' : $parsed['path']) |
| 221 | .(empty($parsed['query']) ? '' : '?'.$parsed['query']) |
| 222 | .(empty($parsed['fragment']) ? '' : '#'.$parsed['fragment']); |
| 223 | } else { // parse_url seems to have failed, try without it |
| 224 | $arr = explode('.', $input); |
| 225 | foreach ($arr as $k => $v) { |
| 226 | $conv = $this->_decode($v); |
| 227 | $arr[$k] = ($conv) ? $conv : $v; |
| 228 | } |
| 229 | $return = join('.', $arr); |
| 230 | } |
| 231 | } else { // Otherwise we consider it being a pure domain name string |
| 232 | $return = $this->_decode($input); |
| 233 | if (!$return) $return = $input; |
| 234 | } |
| 235 | // The output is UTF-8 by default, other output formats need conversion here |
| 236 | // If one time encoding is given, use this, else the objects property |
| 237 | switch (($one_time_encoding) ? $one_time_encoding : $this->_api_encoding) { |
| 238 | case 'utf8': |
| 239 | return $return; |
| 240 | break; |
| 241 | case 'ucs4_string': |
| 242 | return $this->_ucs4_to_ucs4_string($this->_utf8_to_ucs4($return)); |
| 243 | break; |
| 244 | case 'ucs4_array': |
| 245 | return $this->_utf8_to_ucs4($return); |
| 246 | break; |
| 247 | default: |
| 248 | $this->_error('Unsupported output format'); |
| 249 | return false; |
| 250 | } |
| 251 | } |
| 252 | |
| 253 | /** |
| 254 | * Encode a given UTF-8 domain name |
| 255 | * @param string Domain name (UTF-8 or UCS-4) |
| 256 | * [@param string Desired input encoding, see {@link set_parameter}] |
| 257 | * @return string Encoded Domain name (ACE string) |
| 258 | */ |
| 259 | public function encode($decoded, $one_time_encoding = false) |
| 260 | { |
| 261 | // Forcing conversion of input to UCS4 array |
| 262 | // If one time encoding is given, use this, else the objects property |
| 263 | switch ($one_time_encoding ? $one_time_encoding : $this->_api_encoding) { |
| 264 | case 'utf8': |
| 265 | $decoded = $this->_utf8_to_ucs4($decoded); |
| 266 | break; |
| 267 | case 'ucs4_string': |
| 268 | $decoded = $this->_ucs4_string_to_ucs4($decoded); |
| 269 | case 'ucs4_array': |
| 270 | break; |
| 271 | default: |
| 272 | $this->_error('Unsupported input format: '.($one_time_encoding ? $one_time_encoding : $this->_api_encoding)); |
| 273 | return false; |
| 274 | } |
| 275 | |
| 276 | // No input, no output, what else did you expect? |
| 277 | if (empty($decoded)) return ''; |
| 278 | |
| 279 | // Anchors for iteration |
| 280 | $last_begin = 0; |
| 281 | // Output string |
| 282 | $output = ''; |
| 283 | foreach ($decoded as $k => $v) { |
| 284 | // Make sure to use just the plain dot |
| 285 | switch($v) { |
| 286 | case 0x3002: |
| 287 | case 0xFF0E: |
| 288 | case 0xFF61: |
| 289 | $decoded[$k] = 0x2E; |
| 290 | // Right, no break here, the above are converted to dots anyway |
| 291 | // Stumbling across an anchoring character |
| 292 | case 0x2E: |
| 293 | case 0x2F: |
| 294 | case 0x3A: |
| 295 | case 0x3F: |
| 296 | case 0x40: |
| 297 | // Neither email addresses nor URLs allowed in strict mode |
| 298 | if ($this->_strict_mode) { |
| 299 | $this->_error('Neither email addresses nor URLs are allowed in strict mode.'); |
| 300 | return false; |
| 301 | } else { |
| 302 | // Skip first char |
| 303 | if ($k) { |
| 304 | $encoded = ''; |
| 305 | $encoded = $this->_encode(array_slice($decoded, $last_begin, (($k)-$last_begin))); |
| 306 | if ($encoded) { |
| 307 | $output .= $encoded; |
| 308 | } else { |
| 309 | $output .= $this->_ucs4_to_utf8(array_slice($decoded, $last_begin, (($k)-$last_begin))); |
| 310 | } |
| 311 | $output .= chr($decoded[$k]); |
| 312 | } |
| 313 | $last_begin = $k + 1; |
| 314 | } |
| 315 | } |
| 316 | } |
| 317 | // Catch the rest of the string |
| 318 | if ($last_begin) { |
| 319 | $inp_len = sizeof($decoded); |
| 320 | $encoded = ''; |
| 321 | $encoded = $this->_encode(array_slice($decoded, $last_begin, (($inp_len)-$last_begin))); |
| 322 | if ($encoded) { |
| 323 | $output .= $encoded; |
| 324 | } else { |
| 325 | $output .= $this->_ucs4_to_utf8(array_slice($decoded, $last_begin, (($inp_len)-$last_begin))); |
| 326 | } |
| 327 | return $output; |
| 328 | } else { |
| 329 | if ($output = $this->_encode($decoded)) { |
| 330 | return $output; |
| 331 | } else { |
| 332 | return $this->_ucs4_to_utf8($decoded); |
| 333 | } |
| 334 | } |
| 335 | } |
| 336 | |
| 337 | /** |
| 338 | * Use this method to get the last error ocurred |
| 339 | * @param void |
| 340 | * @return string The last error, that occured |
| 341 | */ |
| 342 | public function get_last_error() |
| 343 | { |
| 344 | return $this->_error; |
| 345 | } |
| 346 | |
| 347 | /** |
| 348 | * The actual decoding algorithm |
| 349 | * @param string |
| 350 | * @return mixed |
| 351 | */ |
| 352 | private function _decode($encoded) |
| 353 | { |
| 354 | $decoded = array(); |
| 355 | // find the Punycode prefix |
| 356 | if (!preg_match('!^'.preg_quote($this->_punycode_prefix, '!').'!', $encoded)) { |
| 357 | $this->_error('This is not a punycode string'); |
| 358 | return false; |
| 359 | } |
| 360 | $encode_test = preg_replace('!^'.preg_quote($this->_punycode_prefix, '!').'!', '', $encoded); |
| 361 | // If nothing left after removing the prefix, it is hopeless |
| 362 | if (!$encode_test) { |
| 363 | $this->_error('The given encoded string was empty'); |
| 364 | return false; |
| 365 | } |
| 366 | // Find last occurence of the delimiter |
| 367 | $delim_pos = strrpos($encoded, '-'); |
| 368 | if ($delim_pos > strlen($this->_punycode_prefix)) { |
| 369 | for ($k = strlen($this->_punycode_prefix); $k < $delim_pos; ++$k) { |
| 370 | $decoded[] = ord($encoded{$k}); |
| 371 | } |
| 372 | } |
| 373 | $deco_len = count($decoded); |
| 374 | $enco_len = strlen($encoded); |
| 375 | |
| 376 | // Wandering through the strings; init |
| 377 | $is_first = true; |
| 378 | $bias = $this->_initial_bias; |
| 379 | $idx = 0; |
| 380 | $char = $this->_initial_n; |
| 381 | |
| 382 | for ($enco_idx = ($delim_pos) ? ($delim_pos + 1) : 0; $enco_idx < $enco_len; ++$deco_len) { |
| 383 | for ($old_idx = $idx, $w = 1, $k = $this->_base; 1 ; $k += $this->_base) { |
| 384 | $digit = $this->_decode_digit($encoded{$enco_idx++}); |
| 385 | $idx += $digit * $w; |
| 386 | $t = ($k <= $bias) ? $this->_tmin : |
| 387 | (($k >= $bias + $this->_tmax) ? $this->_tmax : ($k - $bias)); |
| 388 | if ($digit < $t) break; |
| 389 | $w = (int) ($w * ($this->_base - $t)); |
| 390 | } |
| 391 | $bias = $this->_adapt($idx - $old_idx, $deco_len + 1, $is_first); |
| 392 | $is_first = false; |
| 393 | $char += (int) ($idx / ($deco_len + 1)); |
| 394 | $idx %= ($deco_len + 1); |
| 395 | if ($deco_len > 0) { |
| 396 | // Make room for the decoded char |
| 397 | for ($i = $deco_len; $i > $idx; $i--) $decoded[$i] = $decoded[($i - 1)]; |
| 398 | } |
| 399 | $decoded[$idx++] = $char; |
| 400 | } |
| 401 | return $this->_ucs4_to_utf8($decoded); |
| 402 | } |
| 403 | |
| 404 | /** |
| 405 | * The actual encoding algorithm |
| 406 | * @param string |
| 407 | * @return mixed |
| 408 | */ |
| 409 | private function _encode($decoded) |
| 410 | { |
| 411 | // We cannot encode a domain name containing the Punycode prefix |
| 412 | $extract = strlen($this->_punycode_prefix); |
| 413 | $check_pref = $this->_utf8_to_ucs4($this->_punycode_prefix); |
| 414 | $check_deco = array_slice($decoded, 0, $extract); |
| 415 | |
| 416 | if ($check_pref == $check_deco) { |
| 417 | $this->_error('This is already a punycode string'); |
| 418 | return false; |
| 419 | } |
| 420 | // We will not try to encode strings consisting of basic code points only |
| 421 | $encodable = false; |
| 422 | foreach ($decoded as $k => $v) { |
| 423 | if ($v > 0x7a) { |
| 424 | $encodable = true; |
| 425 | break; |
| 426 | } |
| 427 | } |
| 428 | if (!$encodable) { |
| 429 | $this->_error('The given string does not contain encodable chars'); |
| 430 | return false; |
| 431 | } |
| 432 | // Do NAMEPREP |
| 433 | $decoded = $this->_nameprep($decoded); |
| 434 | if (!$decoded || !is_array($decoded)) return false; // NAMEPREP failed |
| 435 | $deco_len = count($decoded); |
| 436 | if (!$deco_len) return false; // Empty array |
| 437 | $codecount = 0; // How many chars have been consumed |
| 438 | $encoded = ''; |
| 439 | // Copy all basic code points to output |
| 440 | for ($i = 0; $i < $deco_len; ++$i) { |
| 441 | $test = $decoded[$i]; |
| 442 | // Will match [-0-9a-zA-Z] |
| 443 | if ((0x2F < $test && $test < 0x40) || (0x40 < $test && $test < 0x5B) |
| 444 | || (0x60 < $test && $test <= 0x7B) || (0x2D == $test)) { |
| 445 | $encoded .= chr($decoded[$i]); |
| 446 | $codecount++; |
| 447 | } |
| 448 | } |
| 449 | if ($codecount == $deco_len) return $encoded; // All codepoints were basic ones |
| 450 | |
| 451 | // Start with the prefix; copy it to output |
| 452 | $encoded = $this->_punycode_prefix.$encoded; |
| 453 | // If we have basic code points in output, add an hyphen to the end |
| 454 | if ($codecount) $encoded .= '-'; |
| 455 | // Now find and encode all non-basic code points |
| 456 | $is_first = true; |
| 457 | $cur_code = $this->_initial_n; |
| 458 | $bias = $this->_initial_bias; |
| 459 | $delta = 0; |
| 460 | while ($codecount < $deco_len) { |
| 461 | // Find the smallest code point >= the current code point and |
| 462 | // remember the last ouccrence of it in the input |
| 463 | for ($i = 0, $next_code = $this->_max_ucs; $i < $deco_len; $i++) { |
| 464 | if ($decoded[$i] >= $cur_code && $decoded[$i] <= $next_code) { |
| 465 | $next_code = $decoded[$i]; |
| 466 | } |
| 467 | } |
| 468 | $delta += ($next_code - $cur_code) * ($codecount + 1); |
| 469 | $cur_code = $next_code; |
| 470 | |
| 471 | // Scan input again and encode all characters whose code point is $cur_code |
| 472 | for ($i = 0; $i < $deco_len; $i++) { |
| 473 | if ($decoded[$i] < $cur_code) { |
| 474 | $delta++; |
| 475 | } elseif ($decoded[$i] == $cur_code) { |
| 476 | for ($q = $delta, $k = $this->_base; 1; $k += $this->_base) { |
| 477 | $t = ($k <= $bias) ? $this->_tmin : |
| 478 | (($k >= $bias + $this->_tmax) ? $this->_tmax : $k - $bias); |
| 479 | if ($q < $t) break; |
| 480 | $encoded .= $this->_encode_digit(intval($t + (($q - $t) % ($this->_base - $t)))); //v0.4.5 Changed from ceil() to intval() |
| 481 | $q = (int) (($q - $t) / ($this->_base - $t)); |
| 482 | } |
| 483 | $encoded .= $this->_encode_digit($q); |
| 484 | $bias = $this->_adapt($delta, $codecount+1, $is_first); |
| 485 | $codecount++; |
| 486 | $delta = 0; |
| 487 | $is_first = false; |
| 488 | } |
| 489 | } |
| 490 | $delta++; |
| 491 | $cur_code++; |
| 492 | } |
| 493 | return $encoded; |
| 494 | } |
| 495 | |
| 496 | /** |
| 497 | * Adapt the bias according to the current code point and position |
| 498 | * @param int $delta |
| 499 | * @param int $npoints |
| 500 | * @param int $is_first |
| 501 | * @return int |
| 502 | */ |
| 503 | private function _adapt($delta, $npoints, $is_first) |
| 504 | { |
| 505 | $delta = intval($is_first ? ($delta / $this->_damp) : ($delta / 2)); |
| 506 | $delta += intval($delta / $npoints); |
| 507 | for ($k = 0; $delta > (($this->_base - $this->_tmin) * $this->_tmax) / 2; $k += $this->_base) { |
| 508 | $delta = intval($delta / ($this->_base - $this->_tmin)); |
| 509 | } |
| 510 | return intval($k + ($this->_base - $this->_tmin + 1) * $delta / ($delta + $this->_skew)); |
| 511 | } |
| 512 | |
| 513 | /** |
| 514 | * Encoding a certain digit |
| 515 | * @param int $d |
| 516 | * @return string |
| 517 | */ |
| 518 | private function _encode_digit($d) |
| 519 | { |
| 520 | return chr($d + 22 + 75 * ($d < 26)); |
| 521 | } |
| 522 | |
| 523 | /** |
| 524 | * Decode a certain digit |
| 525 | * @param int $cp |
| 526 | * @return int |
| 527 | */ |
| 528 | private function _decode_digit($cp) |
| 529 | { |
| 530 | $cp = ord($cp); |
| 531 | return ($cp - 48 < 10) ? $cp - 22 : (($cp - 65 < 26) ? $cp - 65 : (($cp - 97 < 26) ? $cp - 97 : $this->_base)); |
| 532 | } |
| 533 | |
| 534 | /** |
| 535 | * Internal error handling method |
| 536 | * @param string $error |
| 537 | */ |
| 538 | private function _error($error = '') |
| 539 | { |
| 540 | $this->_error = $error; |
| 541 | } |
| 542 | |
| 543 | /** |
| 544 | * Do Nameprep according to RFC3491 and RFC3454 |
| 545 | * @param array Unicode Characters |
| 546 | * @return string Unicode Characters, Nameprep'd |
| 547 | */ |
| 548 | private function _nameprep($input) |
| 549 | { |
| 550 | $output = array(); |
| 551 | $error = false; |
| 552 | // |
| 553 | // Mapping |
| 554 | // Walking through the input array, performing the required steps on each of |
| 555 | // the input chars and putting the result into the output array |
| 556 | // While mapping required chars we apply the cannonical ordering |
| 557 | foreach ($input as $v) { |
| 558 | // Map to nothing == skip that code point |
| 559 | if (in_array($v, $this->NP['map_nothing'])) continue; |
| 560 | // Try to find prohibited input |
| 561 | if (in_array($v, $this->NP['prohibit']) || in_array($v, $this->NP['general_prohibited'])) { |
| 562 | $this->_error('NAMEPREP: Prohibited input U+'.sprintf('%08X', $v)); |
| 563 | return false; |
| 564 | } |
| 565 | foreach ($this->NP['prohibit_ranges'] as $range) { |
| 566 | if ($range[0] <= $v && $v <= $range[1]) { |
| 567 | $this->_error('NAMEPREP: Prohibited input U+'.sprintf('%08X', $v)); |
| 568 | return false; |
| 569 | } |
| 570 | } |
| 571 | // Hangul syllable decomposition |
| 572 | if (0xAC00 <= $v && $v <= 0xD7AF) { |
| 573 | foreach ($this->_hangul_decompose($v) as $out) $output[] = (int) $out; |
| 574 | // There's a decomposition mapping for that code point |
| 575 | } elseif (isset($this->NP['replacemaps'][$v])) { |
| 576 | foreach ($this->_apply_cannonical_ordering($this->NP['replacemaps'][$v]) as $out) { |
| 577 | $output[] = (int) $out; |
| 578 | } |
| 579 | } else { |
| 580 | $output[] = (int) $v; |
| 581 | } |
| 582 | } |
| 583 | // Before applying any Combining, try to rearrange any Hangul syllables |
| 584 | $output = $this->_hangul_compose($output); |
| 585 | // |
| 586 | // Combine code points |
| 587 | // |
| 588 | $last_class = 0; |
| 589 | $last_starter = 0; |
| 590 | $out_len = count($output); |
| 591 | for ($i = 0; $i < $out_len; ++$i) { |
| 592 | $class = $this->_get_combining_class($output[$i]); |
| 593 | if ((!$last_class || $last_class > $class) && $class) { |
| 594 | // Try to match |
| 595 | $seq_len = $i - $last_starter; |
| 596 | $out = $this->_combine(array_slice($output, $last_starter, $seq_len)); |
| 597 | // On match: Replace the last starter with the composed character and remove |
| 598 | // the now redundant non-starter(s) |
| 599 | if ($out) { |
| 600 | $output[$last_starter] = $out; |
| 601 | if (count($out) != $seq_len) { |
| 602 | for ($j = $i+1; $j < $out_len; ++$j) $output[$j-1] = $output[$j]; |
| 603 | unset($output[$out_len]); |
| 604 | } |
| 605 | // Rewind the for loop by one, since there can be more possible compositions |
| 606 | $i--; |
| 607 | $out_len--; |
| 608 | $last_class = ($i == $last_starter) ? 0 : $this->_get_combining_class($output[$i-1]); |
| 609 | continue; |
| 610 | } |
| 611 | } |
| 612 | // The current class is 0 |
| 613 | if (!$class) $last_starter = $i; |
| 614 | $last_class = $class; |
| 615 | } |
| 616 | return $output; |
| 617 | } |
| 618 | |
| 619 | /** |
| 620 | * Decomposes a Hangul syllable |
| 621 | * (see http://www.unicode.org/unicode/reports/tr15/#Hangul |
| 622 | * @param integer 32bit UCS4 code point |
| 623 | * @return array Either Hangul Syllable decomposed or original 32bit value as one value array |
| 624 | */ |
| 625 | private function _hangul_decompose($char) |
| 626 | { |
| 627 | $sindex = (int) $char - $this->_sbase; |
| 628 | if ($sindex < 0 || $sindex >= $this->_scount) return array($char); |
| 629 | $result = array(); |
| 630 | $result[] = (int) $this->_lbase + $sindex / $this->_ncount; |
| 631 | $result[] = (int) $this->_vbase + ($sindex % $this->_ncount) / $this->_tcount; |
| 632 | $T = intval($this->_tbase + $sindex % $this->_tcount); |
| 633 | if ($T != $this->_tbase) $result[] = $T; |
| 634 | return $result; |
| 635 | } |
| 636 | /** |
| 637 | * Ccomposes a Hangul syllable |
| 638 | * (see http://www.unicode.org/unicode/reports/tr15/#Hangul |
| 639 | * @param array Decomposed UCS4 sequence |
| 640 | * @return array UCS4 sequence with syllables composed |
| 641 | */ |
| 642 | private function _hangul_compose($input) |
| 643 | { |
| 644 | $inp_len = count($input); |
| 645 | if (!$inp_len) return array(); |
| 646 | $result = array(); |
| 647 | $last = (int) $input[0]; |
| 648 | $result[] = $last; // copy first char from input to output |
| 649 | |
| 650 | for ($i = 1; $i < $inp_len; ++$i) { |
| 651 | $char = (int) $input[$i]; |
| 652 | $sindex = $last - $this->_sbase; |
| 653 | $lindex = $last - $this->_lbase; |
| 654 | $vindex = $char - $this->_vbase; |
| 655 | $tindex = $char - $this->_tbase; |
| 656 | // Find out, whether two current characters are LV and T |
| 657 | if (0 <= $sindex && $sindex < $this->_scount && ($sindex % $this->_tcount == 0) |
| 658 | && 0 <= $tindex && $tindex <= $this->_tcount) { |
| 659 | // create syllable of form LVT |
| 660 | $last += $tindex; |
| 661 | $result[(count($result) - 1)] = $last; // reset last |
| 662 | continue; // discard char |
| 663 | } |
| 664 | // Find out, whether two current characters form L and V |
| 665 | if (0 <= $lindex && $lindex < $this->_lcount && 0 <= $vindex && $vindex < $this->_vcount) { |
| 666 | // create syllable of form LV |
| 667 | $last = (int) $this->_sbase + ($lindex * $this->_vcount + $vindex) * $this->_tcount; |
| 668 | $result[(count($result) - 1)] = $last; // reset last |
| 669 | continue; // discard char |
| 670 | } |
| 671 | // if neither case was true, just add the character |
| 672 | $last = $char; |
| 673 | $result[] = $char; |
| 674 | } |
| 675 | return $result; |
| 676 | } |
| 677 | |
| 678 | /** |
| 679 | * Returns the combining class of a certain wide char |
| 680 | * @param integer Wide char to check (32bit integer) |
| 681 | * @return integer Combining class if found, else 0 |
| 682 | */ |
| 683 | private function _get_combining_class($char) |
| 684 | { |
| 685 | return isset($this->NP['norm_combcls'][$char]) ? $this->NP['norm_combcls'][$char] : 0; |
| 686 | } |
| 687 | |
| 688 | /** |
| 689 | * Apllies the cannonical ordering of a decomposed UCS4 sequence |
| 690 | * @param array Decomposed UCS4 sequence |
| 691 | * @return array Ordered USC4 sequence |
| 692 | */ |
| 693 | private function _apply_cannonical_ordering($input) |
| 694 | { |
| 695 | $swap = true; |
| 696 | $size = count($input); |
| 697 | while ($swap) { |
| 698 | $swap = false; |
| 699 | $last = $this->_get_combining_class(intval($input[0])); |
| 700 | for ($i = 0; $i < $size-1; ++$i) { |
| 701 | $next = $this->_get_combining_class(intval($input[$i+1])); |
| 702 | if ($next != 0 && $last > $next) { |
| 703 | // Move item leftward until it fits |
| 704 | for ($j = $i + 1; $j > 0; --$j) { |
| 705 | if ($this->_get_combining_class(intval($input[$j-1])) <= $next) break; |
| 706 | $t = intval($input[$j]); |
| 707 | $input[$j] = intval($input[$j-1]); |
| 708 | $input[$j-1] = $t; |
| 709 | $swap = true; |
| 710 | } |
| 711 | // Reentering the loop looking at the old character again |
| 712 | $next = $last; |
| 713 | } |
| 714 | $last = $next; |
| 715 | } |
| 716 | } |
| 717 | return $input; |
| 718 | } |
| 719 | |
| 720 | /** |
| 721 | * Do composition of a sequence of starter and non-starter |
| 722 | * @param array UCS4 Decomposed sequence |
| 723 | * @return array Ordered USC4 sequence |
| 724 | */ |
| 725 | private function _combine($input) |
| 726 | { |
| 727 | $inp_len = count($input); |
| 728 | foreach ($this->NP['replacemaps'] as $np_src => $np_target) { |
| 729 | if ($np_target[0] != $input[0]) continue; |
| 730 | if (count($np_target) != $inp_len) continue; |
| 731 | $hit = false; |
| 732 | foreach ($input as $k2 => $v2) { |
| 733 | if ($v2 == $np_target[$k2]) { |
| 734 | $hit = true; |
| 735 | } else { |
| 736 | $hit = false; |
| 737 | break; |
| 738 | } |
| 739 | } |
| 740 | if ($hit) return $np_src; |
| 741 | } |
| 742 | return false; |
| 743 | } |
| 744 | |
| 745 | /** |
| 746 | * This converts an UTF-8 encoded string to its UCS-4 representation |
| 747 | * By talking about UCS-4 "strings" we mean arrays of 32bit integers representing |
| 748 | * each of the "chars". This is due to PHP not being able to handle strings with |
| 749 | * bit depth different from 8. This apllies to the reverse method _ucs4_to_utf8(), too. |
| 750 | * The following UTF-8 encodings are supported: |
| 751 | * bytes bits representation |
| 752 | * 1 7 0xxxxxxx |
| 753 | * 2 11 110xxxxx 10xxxxxx |
| 754 | * 3 16 1110xxxx 10xxxxxx 10xxxxxx |
| 755 | * 4 21 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx |
| 756 | * 5 26 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx |
| 757 | * 6 31 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx |
| 758 | * Each x represents a bit that can be used to store character data. |
| 759 | * The five and six byte sequences are part of Annex D of ISO/IEC 10646-1:2000 |
| 760 | * @param string $input |
| 761 | * @return string |
| 762 | */ |
| 763 | private function _utf8_to_ucs4($input) |
| 764 | { |
| 765 | $output = array(); |
| 766 | $out_len = 0; |
| 767 | // Patch by Daniel Hahler; work around prolbem with mbstring.func_overload |
| 768 | if (function_exists('mb_strlen')) { |
| 769 | $inp_len = mb_strlen($input, '8bit'); |
| 770 | } else { |
| 771 | $inp_len = strlen($input); |
| 772 | } |
| 773 | $mode = 'next'; |
| 774 | $test = 'none'; |
| 775 | for ($k = 0; $k < $inp_len; ++$k) { |
| 776 | $v = ord($input{$k}); // Extract byte from input string |
| 777 | if ($v < 128) { // We found an ASCII char - put into stirng as is |
| 778 | $output[$out_len] = $v; |
| 779 | ++$out_len; |
| 780 | if ('add' == $mode) { |
| 781 | $this->_error('Conversion from UTF-8 to UCS-4 failed: malformed input at byte '.$k); |
| 782 | return false; |
| 783 | } |
| 784 | continue; |
| 785 | } |
| 786 | if ('next' == $mode) { // Try to find the next start byte; determine the width of the Unicode char |
| 787 | $start_byte = $v; |
| 788 | $mode = 'add'; |
| 789 | $test = 'range'; |
| 790 | if ($v >> 5 == 6) { // &110xxxxx 10xxxxx |
| 791 | $next_byte = 0; // Tells, how many times subsequent bitmasks must rotate 6bits to the left |
| 792 | $v = ($v - 192) << 6; |
| 793 | } elseif ($v >> 4 == 14) { // &1110xxxx 10xxxxxx 10xxxxxx |
| 794 | $next_byte = 1; |
| 795 | $v = ($v - 224) << 12; |
| 796 | } elseif ($v >> 3 == 30) { // &11110xxx 10xxxxxx 10xxxxxx 10xxxxxx |
| 797 | $next_byte = 2; |
| 798 | $v = ($v - 240) << 18; |
| 799 | } elseif ($v >> 2 == 62) { // &111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx |
| 800 | $next_byte = 3; |
| 801 | $v = ($v - 248) << 24; |
| 802 | } elseif ($v >> 1 == 126) { // &1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx |
| 803 | $next_byte = 4; |
| 804 | $v = ($v - 252) << 30; |
| 805 | } else { |
| 806 | $this->_error('This might be UTF-8, but I don\'t understand it at byte '.$k); |
| 807 | return false; |
| 808 | } |
| 809 | if ('add' == $mode) { |
| 810 | $output[$out_len] = (int) $v; |
| 811 | ++$out_len; |
| 812 | continue; |
| 813 | } |
| 814 | } |
| 815 | if ('add' == $mode) { |
| 816 | if (!$this->_allow_overlong && $test == 'range') { |
| 817 | $test = 'none'; |
| 818 | if (($v < 0xA0 && $start_byte == 0xE0) || ($v < 0x90 && $start_byte == 0xF0) || ($v > 0x8F && $start_byte == 0xF4)) { |
| 819 | $this->_error('Bogus UTF-8 character detected (out of legal range) at byte '.$k); |
| 820 | return false; |
| 821 | } |
| 822 | } |
| 823 | if ($v >> 6 == 2) { // Bit mask must be 10xxxxxx |
| 824 | $v = ($v - 128) << ($next_byte * 6); |
| 825 | $output[($out_len - 1)] += $v; |
| 826 | --$next_byte; |
| 827 | } else { |
| 828 | $this->_error('Conversion from UTF-8 to UCS-4 failed: malformed input at byte '.$k); |
| 829 | return false; |
| 830 | } |
| 831 | if ($next_byte < 0) { |
| 832 | $mode = 'next'; |
| 833 | } |
| 834 | } |
| 835 | } // for |
| 836 | return $output; |
| 837 | } |
| 838 | |
| 839 | /** |
| 840 | * Convert UCS-4 string into UTF-8 string |
| 841 | * See _utf8_to_ucs4() for details |
| 842 | * @param string $input |
| 843 | * @return string |
| 844 | */ |
| 845 | private function _ucs4_to_utf8($input) |
| 846 | { |
| 847 | $output = ''; |
| 848 | foreach ($input as $k => $v) { |
| 849 | if ($v < 128) { // 7bit are transferred literally |
| 850 | $output .= chr($v); |
| 851 | } elseif ($v < (1 << 11)) { // 2 bytes |
| 852 | $output .= chr(192+($v >> 6)).chr(128+($v & 63)); |
| 853 | } elseif ($v < (1 << 16)) { // 3 bytes |
| 854 | $output .= chr(224+($v >> 12)).chr(128+(($v >> 6) & 63)).chr(128+($v & 63)); |
| 855 | } elseif ($v < (1 << 21)) { // 4 bytes |
| 856 | $output .= chr(240+($v >> 18)).chr(128+(($v >> 12) & 63)).chr(128+(($v >> 6) & 63)).chr(128+($v & 63)); |
| 857 | } elseif (self::$safe_mode) { |
| 858 | $output .= self::$safe_char; |
| 859 | } else { |
| 860 | $this->_error('Conversion from UCS-4 to UTF-8 failed: malformed input at byte '.$k); |
| 861 | return false; |
| 862 | } |
| 863 | } |
| 864 | return $output; |
| 865 | } |
| 866 | |
| 867 | /** |
| 868 | * Convert UCS-4 array into UCS-4 string |
| 869 | * |
| 870 | * @param array $input |
| 871 | * @return string |
| 872 | */ |
| 873 | private function _ucs4_to_ucs4_string($input) |
| 874 | { |
| 875 | $output = ''; |
| 876 | // Take array values and split output to 4 bytes per value |
| 877 | // The bit mask is 255, which reads &11111111 |
| 878 | foreach ($input as $v) { |
| 879 | $output .= chr(($v >> 24) & 255).chr(($v >> 16) & 255).chr(($v >> 8) & 255).chr($v & 255); |
| 880 | } |
| 881 | return $output; |
| 882 | } |
| 883 | |
| 884 | /** |
| 885 | * Convert UCS-4 strin into UCS-4 garray |
| 886 | * |
| 887 | * @param string $input |
| 888 | * @return array |
| 889 | */ |
| 890 | private function _ucs4_string_to_ucs4($input) |
| 891 | { |
| 892 | $output = array(); |
| 893 | $inp_len = strlen($input); |
| 894 | // Input length must be dividable by 4 |
| 895 | if ($inp_len % 4) { |
| 896 | $this->_error('Input UCS4 string is broken'); |
| 897 | return false; |
| 898 | } |
| 899 | // Empty input - return empty output |
| 900 | if (!$inp_len) return $output; |
| 901 | for ($i = 0, $out_len = -1; $i < $inp_len; ++$i) { |
| 902 | // Increment output position every 4 input bytes |
| 903 | if (!($i % 4)) { |
| 904 | $out_len++; |
| 905 | $output[$out_len] = 0; |
| 906 | } |
| 907 | $output[$out_len] += ord($input{$i}) << (8 * (3 - ($i % 4) ) ); |
| 908 | } |
| 909 | return $output; |
| 910 | } |
| 911 | |
| 912 | /** |
| 913 | * Holds all relevant mapping tables, loaded from a seperate file on construct |
| 914 | * See RFC3454 for details |
| 915 | * |
| 916 | * @private array |
| 917 | * @since 0.5.2 |
| 918 | * |
| 919 | */ |
| 920 | private $NP = array |
| 921 | ('map_nothing' => array |
| 922 | (0xAD, 0x34F, 0x1806, 0x180B, 0x180C, 0x180D, 0x200B |
| 923 | ,0x200C, 0x200D, 0x2060, 0xFE00, 0xFE01, 0xFE02, 0xFE03 |
| 924 | ,0xFE04, 0xFE05, 0xFE06, 0xFE07, 0xFE08, 0xFE09, 0xFE0A |
| 925 | ,0xFE0B, 0xFE0C, 0xFE0D, 0xFE0E, 0xFE0F, 0xFEFF |
| 926 | ) |
| 927 | ,'general_prohibited' => array |
| 928 | (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0xA, 0xB, 0xC, 0xD, 0xE |
| 929 | ,0xF, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17 |
| 930 | ,0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20 |
| 931 | ,0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29 |
| 932 | ,0x2A, 0x2B, 0x2C, 0x2F, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F |
| 933 | ,0x40, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x7B, 0x7C |
| 934 | ,0x7D, 0x7E, 0x7F, 0x3002 |
| 935 | ) |
| 936 | ,'prohibit' => array |
| 937 | (0xA0, 0x340, 0x341, 0x6DD, 0x70F, 0x1680, 0x180E, 0x2000 |
| 938 | ,0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007 |
| 939 | ,0x2008, 0x2009, 0x200A, 0x200B, 0x200C, 0x200D, 0x200E |
| 940 | ,0x200F, 0x2028, 0x2029, 0x202A, 0x202B, 0x202C, 0x202D |
| 941 | ,0x202E, 0x202F, 0x205F, 0x206A, 0x206B, 0x206C, 0x206D |
| 942 | ,0x206E, 0x206F, 0x3000, 0xFEFF, 0xFFF9, 0xFFFA, 0xFFFB |
| 943 | ,0xFFFC, 0xFFFD, 0xFFFE, 0xFFFF, 0x1FFFE, 0x1FFFF, 0x2FFFE |
| 944 | ,0x2FFFF, 0x3FFFE, 0x3FFFF, 0x4FFFE, 0x4FFFF, 0x5FFFE |
| 945 | ,0x5FFFF, 0x6FFFE, 0x6FFFF, 0x7FFFE, 0x7FFFF, 0x8FFFE |
| 946 | ,0x8FFFF, 0x9FFFE, 0x9FFFF, 0xAFFFE, 0xAFFFF, 0xBFFFE |
| 947 | ,0xBFFFF, 0xCFFFE, 0xCFFFF, 0xDFFFE, 0xDFFFF, 0xE0001 |
| 948 | ,0xEFFFE, 0xEFFFF, 0xFFFFE, 0xFFFFF, 0x10FFFE, 0x10FFFF |
| 949 | ) |
| 950 | ,'prohibit_ranges' => array |
| 951 | (array(0x80, 0x9F), array(0x2060, 0x206F) |
| 952 | ,array(0x1D173, 0x1D17A), array(0xE000, 0xF8FF) |
| 953 | ,array(0xF0000, 0xFFFFD), array(0x100000, 0x10FFFD) |
| 954 | ,array(0xFDD0, 0xFDEF), array(0xD800, 0xDFFF) |
| 955 | ,array(0x2FF0, 0x2FFB), array(0xE0020, 0xE007F) |
| 956 | ) |
| 957 | ,'replacemaps' => array |
| 958 | (0x41 => array(0x61) |
| 959 | ,0x42 => array(0x62) |
| 960 | ,0x43 => array(0x63) |
| 961 | ,0x44 => array(0x64) |
| 962 | ,0x45 => array(0x65) |
| 963 | ,0x46 => array(0x66) |
| 964 | ,0x47 => array(0x67) |
| 965 | ,0x48 => array(0x68) |
| 966 | ,0x49 => array(0x69) |
| 967 | ,0x4A => array(0x6A) |
| 968 | ,0x4B => array(0x6B) |
| 969 | ,0x4C => array(0x6C) |
| 970 | ,0x4D => array(0x6D) |
| 971 | ,0x4E => array(0x6E) |
| 972 | ,0x4F => array(0x6F) |
| 973 | ,0x50 => array(0x70) |
| 974 | ,0x51 => array(0x71) |
| 975 | ,0x52 => array(0x72) |
| 976 | ,0x53 => array(0x73) |
| 977 | ,0x54 => array(0x74) |
| 978 | ,0x55 => array(0x75) |
| 979 | ,0x56 => array(0x76) |
| 980 | ,0x57 => array(0x77) |
| 981 | ,0x58 => array(0x78) |
| 982 | ,0x59 => array(0x79) |
| 983 | ,0x5A => array(0x7A) |
| 984 | ,0xB5 => array(0x3BC) |
| 985 | ,0xC0 => array(0xE0) |
| 986 | ,0xC1 => array(0xE1) |
| 987 | ,0xC2 => array(0xE2) |
| 988 | ,0xC3 => array(0xE3) |
| 989 | ,0xC4 => array(0xE4) |
| 990 | ,0xC5 => array(0xE5) |
| 991 | ,0xC6 => array(0xE6) |
| 992 | ,0xC7 => array(0xE7) |
| 993 | ,0xC8 => array(0xE8) |
| 994 | ,0xC9 => array(0xE9) |
| 995 | ,0xCA => array(0xEA) |
| 996 | ,0xCB => array(0xEB) |
| 997 | ,0xCC => array(0xEC) |
| 998 | ,0xCD => array(0xED) |
| 999 | ,0xCE => array(0xEE) |
| 1000 | ,0xCF => array(0xEF) |
| 1001 | ,0xD0 => array(0xF0) |
| 1002 | ,0xD1 => array(0xF1) |
| 1003 | ,0xD2 => array(0xF2) |
| 1004 | ,0xD3 => array(0xF3) |
| 1005 | ,0xD4 => array(0xF4) |
| 1006 | ,0xD5 => array(0xF5) |
| 1007 | ,0xD6 => array(0xF6) |
| 1008 | ,0xD8 => array(0xF8) |
| 1009 | ,0xD9 => array(0xF9) |
| 1010 | ,0xDA => array(0xFA) |
| 1011 | ,0xDB => array(0xFB) |
| 1012 | ,0xDC => array(0xFC) |
| 1013 | ,0xDD => array(0xFD) |
| 1014 | ,0xDE => array(0xFE) |
| 1015 | ,0xDF => array(0x73, 0x73) |
| 1016 | ,0x100 => array(0x101) |
| 1017 | ,0x102 => array(0x103) |
| 1018 | ,0x104 => array(0x105) |
| 1019 | ,0x106 => array(0x107) |
| 1020 | ,0x108 => array(0x109) |
| 1021 | ,0x10A => array(0x10B) |
| 1022 | ,0x10C => array(0x10D) |
| 1023 | ,0x10E => array(0x10F) |
| 1024 | ,0x110 => array(0x111) |
| 1025 | ,0x112 => array(0x113) |
| 1026 | ,0x114 => array(0x115) |
| 1027 | ,0x116 => array(0x117) |
| 1028 | ,0x118 => array(0x119) |
| 1029 | ,0x11A => array(0x11B) |
| 1030 | ,0x11C => array(0x11D) |
| 1031 | ,0x11E => array(0x11F) |
| 1032 | ,0x120 => array(0x121) |
| 1033 | ,0x122 => array(0x123) |
| 1034 | ,0x124 => array(0x125) |
| 1035 | ,0x126 => array(0x127) |
| 1036 | ,0x128 => array(0x129) |
| 1037 | ,0x12A => array(0x12B) |
| 1038 | ,0x12C => array(0x12D) |
| 1039 | ,0x12E => array(0x12F) |
| 1040 | ,0x130 => array(0x69, 0x307) |
| 1041 | ,0x132 => array(0x133) |
| 1042 | ,0x134 => array(0x135) |
| 1043 | ,0x136 => array(0x137) |
| 1044 | ,0x139 => array(0x13A) |
| 1045 | ,0x13B => array(0x13C) |
| 1046 | ,0x13D => array(0x13E) |
| 1047 | ,0x13F => array(0x140) |
| 1048 | ,0x141 => array(0x142) |
| 1049 | ,0x143 => array(0x144) |
| 1050 | ,0x145 => array(0x146) |
| 1051 | ,0x147 => array(0x148) |
| 1052 | ,0x149 => array(0x2BC, 0x6E) |
| 1053 | ,0x14A => array(0x14B) |
| 1054 | ,0x14C => array(0x14D) |
| 1055 | ,0x14E => array(0x14F) |
| 1056 | ,0x150 => array(0x151) |
| 1057 | ,0x152 => array(0x153) |
| 1058 | ,0x154 => array(0x155) |
| 1059 | ,0x156 => array(0x157) |
| 1060 | ,0x158 => array(0x159) |
| 1061 | ,0x15A => array(0x15B) |
| 1062 | ,0x15C => array(0x15D) |
| 1063 | ,0x15E => array(0x15F) |
| 1064 | ,0x160 => array(0x161) |
| 1065 | ,0x162 => array(0x163) |
| 1066 | ,0x164 => array(0x165) |
| 1067 | ,0x166 => array(0x167) |
| 1068 | ,0x168 => array(0x169) |
| 1069 | ,0x16A => array(0x16B) |
| 1070 | ,0x16C => array(0x16D) |
| 1071 | ,0x16E => array(0x16F) |
| 1072 | ,0x170 => array(0x171) |
| 1073 | ,0x172 => array(0x173) |
| 1074 | ,0x174 => array(0x175) |
| 1075 | ,0x176 => array(0x177) |
| 1076 | ,0x178 => array(0xFF) |
| 1077 | ,0x179 => array(0x17A) |
| 1078 | ,0x17B => array(0x17C) |
| 1079 | ,0x17D => array(0x17E) |
| 1080 | ,0x17F => array(0x73) |
| 1081 | ,0x181 => array(0x253) |
| 1082 | ,0x182 => array(0x183) |
| 1083 | ,0x184 => array(0x185) |
| 1084 | ,0x186 => array(0x254) |
| 1085 | ,0x187 => array(0x188) |
| 1086 | ,0x189 => array(0x256) |
| 1087 | ,0x18A => array(0x257) |
| 1088 | ,0x18B => array(0x18C) |
| 1089 | ,0x18E => array(0x1DD) |
| 1090 | ,0x18F => array(0x259) |
| 1091 | ,0x190 => array(0x25B) |
| 1092 | ,0x191 => array(0x192) |
| 1093 | ,0x193 => array(0x260) |
| 1094 | ,0x194 => array(0x263) |
| 1095 | ,0x196 => array(0x269) |
| 1096 | ,0x197 => array(0x268) |
| 1097 | ,0x198 => array(0x199) |
| 1098 | ,0x19C => array(0x26F) |
| 1099 | ,0x19D => array(0x272) |
| 1100 | ,0x19F => array(0x275) |
| 1101 | ,0x1A0 => array(0x1A1) |
| 1102 | ,0x1A2 => array(0x1A3) |
| 1103 | ,0x1A4 => array(0x1A5) |
| 1104 | ,0x1A6 => array(0x280) |
| 1105 | ,0x1A7 => array(0x1A8) |
| 1106 | ,0x1A9 => array(0x283) |
| 1107 | ,0x1AC => array(0x1AD) |
| 1108 | ,0x1AE => array(0x288) |
| 1109 | ,0x1AF => array(0x1B0) |
| 1110 | ,0x1B1 => array(0x28A) |
| 1111 | ,0x1B2 => array(0x28B) |
| 1112 | ,0x1B3 => array(0x1B4) |
| 1113 | ,0x1B5 => array(0x1B6) |
| 1114 | ,0x1B7 => array(0x292) |
| 1115 | ,0x1B8 => array(0x1B9) |
| 1116 | ,0x1BC => array(0x1BD) |
| 1117 | ,0x1C4 => array(0x1C6) |
| 1118 | ,0x1C5 => array(0x1C6) |
| 1119 | ,0x1C7 => array(0x1C9) |
| 1120 | ,0x1C8 => array(0x1C9) |
| 1121 | ,0x1CA => array(0x1CC) |
| 1122 | ,0x1CB => array(0x1CC) |
| 1123 | ,0x1CD => array(0x1CE) |
| 1124 | ,0x1CF => array(0x1D0) |
| 1125 | ,0x1D1 => array(0x1D2) |
| 1126 | ,0x1D3 => array(0x1D4) |
| 1127 | ,0x1D5 => array(0x1D6) |
| 1128 | ,0x1D7 => array(0x1D8) |
| 1129 | ,0x1D9 => array(0x1DA) |
| 1130 | ,0x1DB => array(0x1DC) |
| 1131 | ,0x1DE => array(0x1DF) |
| 1132 | ,0x1E0 => array(0x1E1) |
| 1133 | ,0x1E2 => array(0x1E3) |
| 1134 | ,0x1E4 => array(0x1E5) |
| 1135 | ,0x1E6 => array(0x1E7) |
| 1136 | ,0x1E8 => array(0x1E9) |
| 1137 | ,0x1EA => array(0x1EB) |
| 1138 | ,0x1EC => array(0x1ED) |
| 1139 | ,0x1EE => array(0x1EF) |
| 1140 | ,0x1F0 => array(0x6A, 0x30C) |
| 1141 | ,0x1F1 => array(0x1F3) |
| 1142 | ,0x1F2 => array(0x1F3) |
| 1143 | ,0x1F4 => array(0x1F5) |
| 1144 | ,0x1F6 => array(0x195) |
| 1145 | ,0x1F7 => array(0x1BF) |
| 1146 | ,0x1F8 => array(0x1F9) |
| 1147 | ,0x1FA => array(0x1FB) |
| 1148 | ,0x1FC => array(0x1FD) |
| 1149 | ,0x1FE => array(0x1FF) |
| 1150 | ,0x200 => array(0x201) |
| 1151 | ,0x202 => array(0x203) |
| 1152 | ,0x204 => array(0x205) |
| 1153 | ,0x206 => array(0x207) |
| 1154 | ,0x208 => array(0x209) |
| 1155 | ,0x20A => array(0x20B) |
| 1156 | ,0x20C => array(0x20D) |
| 1157 | ,0x20E => array(0x20F) |
| 1158 | ,0x210 => array(0x211) |
| 1159 | ,0x212 => array(0x213) |
| 1160 | ,0x214 => array(0x215) |
| 1161 | ,0x216 => array(0x217) |
| 1162 | ,0x218 => array(0x219) |
| 1163 | ,0x21A => array(0x21B) |
| 1164 | ,0x21C => array(0x21D) |
| 1165 | ,0x21E => array(0x21F) |
| 1166 | ,0x220 => array(0x19E) |
| 1167 | ,0x222 => array(0x223) |
| 1168 | ,0x224 => array(0x225) |
| 1169 | ,0x226 => array(0x227) |
| 1170 | ,0x228 => array(0x229) |
| 1171 | ,0x22A => array(0x22B) |
| 1172 | ,0x22C => array(0x22D) |
| 1173 | ,0x22E => array(0x22F) |
| 1174 | ,0x230 => array(0x231) |
| 1175 | ,0x232 => array(0x233) |
| 1176 | ,0x345 => array(0x3B9) |
| 1177 | ,0x37A => array(0x20, 0x3B9) |
| 1178 | ,0x386 => array(0x3AC) |
| 1179 | ,0x388 => array(0x3AD) |
| 1180 | ,0x389 => array(0x3AE) |
| 1181 | ,0x38A => array(0x3AF) |
| 1182 | ,0x38C => array(0x3CC) |
| 1183 | ,0x38E => array(0x3CD) |
| 1184 | ,0x38F => array(0x3CE) |
| 1185 | ,0x390 => array(0x3B9, 0x308, 0x301) |
| 1186 | ,0x391 => array(0x3B1) |
| 1187 | ,0x392 => array(0x3B2) |
| 1188 | ,0x393 => array(0x3B3) |
| 1189 | ,0x394 => array(0x3B4) |
| 1190 | ,0x395 => array(0x3B5) |
| 1191 | ,0x396 => array(0x3B6) |
| 1192 | ,0x397 => array(0x3B7) |
| 1193 | ,0x398 => array(0x3B8) |
| 1194 | ,0x399 => array(0x3B9) |
| 1195 | ,0x39A => array(0x3BA) |
| 1196 | ,0x39B => array(0x3BB) |
| 1197 | ,0x39C => array(0x3BC) |
| 1198 | ,0x39D => array(0x3BD) |
| 1199 | ,0x39E => array(0x3BE) |
| 1200 | ,0x39F => array(0x3BF) |
| 1201 | ,0x3A0 => array(0x3C0) |
| 1202 | ,0x3A1 => array(0x3C1) |
| 1203 | ,0x3A3 => array(0x3C3) |
| 1204 | ,0x3A4 => array(0x3C4) |
| 1205 | ,0x3A5 => array(0x3C5) |
| 1206 | ,0x3A6 => array(0x3C6) |
| 1207 | ,0x3A7 => array(0x3C7) |
| 1208 | ,0x3A8 => array(0x3C8) |
| 1209 | ,0x3A9 => array(0x3C9) |
| 1210 | ,0x3AA => array(0x3CA) |
| 1211 | ,0x3AB => array(0x3CB) |
| 1212 | ,0x3B0 => array(0x3C5, 0x308, 0x301) |
| 1213 | ,0x3C2 => array(0x3C3) |
| 1214 | ,0x3D0 => array(0x3B2) |
| 1215 | ,0x3D1 => array(0x3B8) |
| 1216 | ,0x3D2 => array(0x3C5) |
| 1217 | ,0x3D3 => array(0x3CD) |
| 1218 | ,0x3D4 => array(0x3CB) |
| 1219 | ,0x3D5 => array(0x3C6) |
| 1220 | ,0x3D6 => array(0x3C0) |
| 1221 | ,0x3D8 => array(0x3D9) |
| 1222 | ,0x3DA => array(0x3DB) |
| 1223 | ,0x3DC => array(0x3DD) |
| 1224 | ,0x3DE => array(0x3DF) |
| 1225 | ,0x3E0 => array(0x3E1) |
| 1226 | ,0x3E2 => array(0x3E3) |
| 1227 | ,0x3E4 => array(0x3E5) |
| 1228 | ,0x3E6 => array(0x3E7) |
| 1229 | ,0x3E8 => array(0x3E9) |
| 1230 | ,0x3EA => array(0x3EB) |
| 1231 | ,0x3EC => array(0x3ED) |
| 1232 | ,0x3EE => array(0x3EF) |
| 1233 | ,0x3F0 => array(0x3BA) |
| 1234 | ,0x3F1 => array(0x3C1) |
| 1235 | ,0x3F2 => array(0x3C3) |
| 1236 | ,0x3F4 => array(0x3B8) |
| 1237 | ,0x3F5 => array(0x3B5) |
| 1238 | ,0x400 => array(0x450) |
| 1239 | ,0x401 => array(0x451) |
| 1240 | ,0x402 => array(0x452) |
| 1241 | ,0x403 => array(0x453) |
| 1242 | ,0x404 => array(0x454) |
| 1243 | ,0x405 => array(0x455) |
| 1244 | ,0x406 => array(0x456) |
| 1245 | ,0x407 => array(0x457) |
| 1246 | ,0x408 => array(0x458) |
| 1247 | ,0x409 => array(0x459) |
| 1248 | ,0x40A => array(0x45A) |
| 1249 | ,0x40B => array(0x45B) |
| 1250 | ,0x40C => array(0x45C) |
| 1251 | ,0x40D => array(0x45D) |
| 1252 | ,0x40E => array(0x45E) |
| 1253 | ,0x40F => array(0x45F) |
| 1254 | ,0x410 => array(0x430) |
| 1255 | ,0x411 => array(0x431) |
| 1256 | ,0x412 => array(0x432) |
| 1257 | ,0x413 => array(0x433) |
| 1258 | ,0x414 => array(0x434) |
| 1259 | ,0x415 => array(0x435) |
| 1260 | ,0x416 => array(0x436) |
| 1261 | ,0x417 => array(0x437) |
| 1262 | ,0x418 => array(0x438) |
| 1263 | ,0x419 => array(0x439) |
| 1264 | ,0x41A => array(0x43A) |
| 1265 | ,0x41B => array(0x43B) |
| 1266 | ,0x41C => array(0x43C) |
| 1267 | ,0x41D => array(0x43D) |
| 1268 | ,0x41E => array(0x43E) |
| 1269 | ,0x41F => array(0x43F) |
| 1270 | ,0x420 => array(0x440) |
| 1271 | ,0x421 => array(0x441) |
| 1272 | ,0x422 => array(0x442) |
| 1273 | ,0x423 => array(0x443) |
| 1274 | ,0x424 => array(0x444) |
| 1275 | ,0x425 => array(0x445) |
| 1276 | ,0x426 => array(0x446) |
| 1277 | ,0x427 => array(0x447) |
| 1278 | ,0x428 => array(0x448) |
| 1279 | ,0x429 => array(0x449) |
| 1280 | ,0x42A => array(0x44A) |
| 1281 | ,0x42B => array(0x44B) |
| 1282 | ,0x42C => array(0x44C) |
| 1283 | ,0x42D => array(0x44D) |
| 1284 | ,0x42E => array(0x44E) |
| 1285 | ,0x42F => array(0x44F) |
| 1286 | ,0x460 => array(0x461) |
| 1287 | ,0x462 => array(0x463) |
| 1288 | ,0x464 => array(0x465) |
| 1289 | ,0x466 => array(0x467) |
| 1290 | ,0x468 => array(0x469) |
| 1291 | ,0x46A => array(0x46B) |
| 1292 | ,0x46C => array(0x46D) |
| 1293 | ,0x46E => array(0x46F) |
| 1294 | ,0x470 => array(0x471) |
| 1295 | ,0x472 => array(0x473) |
| 1296 | ,0x474 => array(0x475) |
| 1297 | ,0x476 => array(0x477) |
| 1298 | ,0x478 => array(0x479) |
| 1299 | ,0x47A => array(0x47B) |
| 1300 | ,0x47C => array(0x47D) |
| 1301 | ,0x47E => array(0x47F) |
| 1302 | ,0x480 => array(0x481) |
| 1303 | ,0x48A => array(0x48B) |
| 1304 | ,0x48C => array(0x48D) |
| 1305 | ,0x48E => array(0x48F) |
| 1306 | ,0x490 => array(0x491) |
| 1307 | ,0x492 => array(0x493) |
| 1308 | ,0x494 => array(0x495) |
| 1309 | ,0x496 => array(0x497) |
| 1310 | ,0x498 => array(0x499) |
| 1311 | ,0x49A => array(0x49B) |
| 1312 | ,0x49C => array(0x49D) |
| 1313 | ,0x49E => array(0x49F) |
| 1314 | ,0x4A0 => array(0x4A1) |
| 1315 | ,0x4A2 => array(0x4A3) |
| 1316 | ,0x4A4 => array(0x4A5) |
| 1317 | ,0x4A6 => array(0x4A7) |
| 1318 | ,0x4A8 => array(0x4A9) |
| 1319 | ,0x4AA => array(0x4AB) |
| 1320 | ,0x4AC => array(0x4AD) |
| 1321 | ,0x4AE => array(0x4AF) |
| 1322 | ,0x4B0 => array(0x4B1) |
| 1323 | ,0x4B2 => array(0x4B3) |
| 1324 | ,0x4B4 => array(0x4B5) |
| 1325 | ,0x4B6 => array(0x4B7) |
| 1326 | ,0x4B8 => array(0x4B9) |
| 1327 | ,0x4BA => array(0x4BB) |
| 1328 | ,0x4BC => array(0x4BD) |
| 1329 | ,0x4BE => array(0x4BF) |
| 1330 | ,0x4C1 => array(0x4C2) |
| 1331 | ,0x4C3 => array(0x4C4) |
| 1332 | ,0x4C5 => array(0x4C6) |
| 1333 | ,0x4C7 => array(0x4C8) |
| 1334 | ,0x4C9 => array(0x4CA) |
| 1335 | ,0x4CB => array(0x4CC) |
| 1336 | ,0x4CD => array(0x4CE) |
| 1337 | ,0x4D0 => array(0x4D1) |
| 1338 | ,0x4D2 => array(0x4D3) |
| 1339 | ,0x4D4 => array(0x4D5) |
| 1340 | ,0x4D6 => array(0x4D7) |
| 1341 | ,0x4D8 => array(0x4D9) |
| 1342 | ,0x4DA => array(0x4DB) |
| 1343 | ,0x4DC => array(0x4DD) |
| 1344 | ,0x4DE => array(0x4DF) |
| 1345 | ,0x4E0 => array(0x4E1) |
| 1346 | ,0x4E2 => array(0x4E3) |
| 1347 | ,0x4E4 => array(0x4E5) |
| 1348 | ,0x4E6 => array(0x4E7) |
| 1349 | ,0x4E8 => array(0x4E9) |
| 1350 | ,0x4EA => array(0x4EB) |
| 1351 | ,0x4EC => array(0x4ED) |
| 1352 | ,0x4EE => array(0x4EF) |
| 1353 | ,0x4F0 => array(0x4F1) |
| 1354 | ,0x4F2 => array(0x4F3) |
| 1355 | ,0x4F4 => array(0x4F5) |
| 1356 | ,0x4F8 => array(0x4F9) |
| 1357 | ,0x500 => array(0x501) |
| 1358 | ,0x502 => array(0x503) |
| 1359 | ,0x504 => array(0x505) |
| 1360 | ,0x506 => array(0x507) |
| 1361 | ,0x508 => array(0x509) |
| 1362 | ,0x50A => array(0x50B) |
| 1363 | ,0x50C => array(0x50D) |
| 1364 | ,0x50E => array(0x50F) |
| 1365 | ,0x531 => array(0x561) |
| 1366 | ,0x532 => array(0x562) |
| 1367 | ,0x533 => array(0x563) |
| 1368 | ,0x534 => array(0x564) |
| 1369 | ,0x535 => array(0x565) |
| 1370 | ,0x536 => array(0x566) |
| 1371 | ,0x537 => array(0x567) |
| 1372 | ,0x538 => array(0x568) |
| 1373 | ,0x539 => array(0x569) |
| 1374 | ,0x53A => array(0x56A) |
| 1375 | ,0x53B => array(0x56B) |
| 1376 | ,0x53C => array(0x56C) |
| 1377 | ,0x53D => array(0x56D) |
| 1378 | ,0x53E => array(0x56E) |
| 1379 | ,0x53F => array(0x56F) |
| 1380 | ,0x540 => array(0x570) |
| 1381 | ,0x541 => array(0x571) |
| 1382 | ,0x542 => array(0x572) |
| 1383 | ,0x543 => array(0x573) |
| 1384 | ,0x544 => array(0x574) |
| 1385 | ,0x545 => array(0x575) |
| 1386 | ,0x546 => array(0x576) |
| 1387 | ,0x547 => array(0x577) |
| 1388 | ,0x548 => array(0x578) |
| 1389 | ,0x549 => array(0x579) |
| 1390 | ,0x54A => array(0x57A) |
| 1391 | ,0x54B => array(0x57B) |
| 1392 | ,0x54C => array(0x57C) |
| 1393 | ,0x54D => array(0x57D) |
| 1394 | ,0x54E => array(0x57E) |
| 1395 | ,0x54F => array(0x57F) |
| 1396 | ,0x550 => array(0x580) |
| 1397 | ,0x551 => array(0x581) |
| 1398 | ,0x552 => array(0x582) |
| 1399 | ,0x553 => array(0x583) |
| 1400 | ,0x554 => array(0x584) |
| 1401 | ,0x555 => array(0x585) |
| 1402 | ,0x556 => array(0x586) |
| 1403 | ,0x587 => array(0x565, 0x582) |
| 1404 | ,0xE33 => array(0xE4D, 0xE32) |
| 1405 | ,0x1E00 => array(0x1E01) |
| 1406 | ,0x1E02 => array(0x1E03) |
| 1407 | ,0x1E04 => array(0x1E05) |
| 1408 | ,0x1E06 => array(0x1E07) |
| 1409 | ,0x1E08 => array(0x1E09) |
| 1410 | ,0x1E0A => array(0x1E0B) |
| 1411 | ,0x1E0C => array(0x1E0D) |
| 1412 | ,0x1E0E => array(0x1E0F) |
| 1413 | ,0x1E10 => array(0x1E11) |
| 1414 | ,0x1E12 => array(0x1E13) |
| 1415 | ,0x1E14 => array(0x1E15) |
| 1416 | ,0x1E16 => array(0x1E17) |
| 1417 | ,0x1E18 => array(0x1E19) |
| 1418 | ,0x1E1A => array(0x1E1B) |
| 1419 | ,0x1E1C => array(0x1E1D) |
| 1420 | ,0x1E1E => array(0x1E1F) |
| 1421 | ,0x1E20 => array(0x1E21) |
| 1422 | ,0x1E22 => array(0x1E23) |
| 1423 | ,0x1E24 => array(0x1E25) |
| 1424 | ,0x1E26 => array(0x1E27) |
| 1425 | ,0x1E28 => array(0x1E29) |
| 1426 | ,0x1E2A => array(0x1E2B) |
| 1427 | ,0x1E2C => array(0x1E2D) |
| 1428 | ,0x1E2E => array(0x1E2F) |
| 1429 | ,0x1E30 => array(0x1E31) |
| 1430 | ,0x1E32 => array(0x1E33) |
| 1431 | ,0x1E34 => array(0x1E35) |
| 1432 | ,0x1E36 => array(0x1E37) |
| 1433 | ,0x1E38 => array(0x1E39) |
| 1434 | ,0x1E3A => array(0x1E3B) |
| 1435 | ,0x1E3C => array(0x1E3D) |
| 1436 | ,0x1E3E => array(0x1E3F) |
| 1437 | ,0x1E40 => array(0x1E41) |
| 1438 | ,0x1E42 => array(0x1E43) |
| 1439 | ,0x1E44 => array(0x1E45) |
| 1440 | ,0x1E46 => array(0x1E47) |
| 1441 | ,0x1E48 => array(0x1E49) |
| 1442 | ,0x1E4A => array(0x1E4B) |
| 1443 | ,0x1E4C => array(0x1E4D) |
| 1444 | ,0x1E4E => array(0x1E4F) |
| 1445 | ,0x1E50 => array(0x1E51) |
| 1446 | ,0x1E52 => array(0x1E53) |
| 1447 | ,0x1E54 => array(0x1E55) |
| 1448 | ,0x1E56 => array(0x1E57) |
| 1449 | ,0x1E58 => array(0x1E59) |
| 1450 | ,0x1E5A => array(0x1E5B) |
| 1451 | ,0x1E5C => array(0x1E5D) |
| 1452 | ,0x1E5E => array(0x1E5F) |
| 1453 | ,0x1E60 => array(0x1E61) |
| 1454 | ,0x1E62 => array(0x1E63) |
| 1455 | ,0x1E64 => array(0x1E65) |
| 1456 | ,0x1E66 => array(0x1E67) |
| 1457 | ,0x1E68 => array(0x1E69) |
| 1458 | ,0x1E6A => array(0x1E6B) |
| 1459 | ,0x1E6C => array(0x1E6D) |
| 1460 | ,0x1E6E => array(0x1E6F) |
| 1461 | ,0x1E70 => array(0x1E71) |
| 1462 | ,0x1E72 => array(0x1E73) |
| 1463 | ,0x1E74 => array(0x1E75) |
| 1464 | ,0x1E76 => array(0x1E77) |
| 1465 | ,0x1E78 => array(0x1E79) |
| 1466 | ,0x1E7A => array(0x1E7B) |
| 1467 | ,0x1E7C => array(0x1E7D) |
| 1468 | ,0x1E7E => array(0x1E7F) |
| 1469 | ,0x1E80 => array(0x1E81) |
| 1470 | ,0x1E82 => array(0x1E83) |
| 1471 | ,0x1E84 => array(0x1E85) |
| 1472 | ,0x1E86 => array(0x1E87) |
| 1473 | ,0x1E88 => array(0x1E89) |
| 1474 | ,0x1E8A => array(0x1E8B) |
| 1475 | ,0x1E8C => array(0x1E8D) |
| 1476 | ,0x1E8E => array(0x1E8F) |
| 1477 | ,0x1E90 => array(0x1E91) |
| 1478 | ,0x1E92 => array(0x1E93) |
| 1479 | ,0x1E94 => array(0x1E95) |
| 1480 | ,0x1E96 => array(0x68, 0x331) |
| 1481 | ,0x1E97 => array(0x74, 0x308) |
| 1482 | ,0x1E98 => array(0x77, 0x30A) |
| 1483 | ,0x1E99 => array(0x79, 0x30A) |
| 1484 | ,0x1E9A => array(0x61, 0x2BE) |
| 1485 | ,0x1E9B => array(0x1E61) |
| 1486 | ,0x1EA0 => array(0x1EA1) |
| 1487 | ,0x1EA2 => array(0x1EA3) |
| 1488 | ,0x1EA4 => array(0x1EA5) |
| 1489 | ,0x1EA6 => array(0x1EA7) |
| 1490 | ,0x1EA8 => array(0x1EA9) |
| 1491 | ,0x1EAA => array(0x1EAB) |
| 1492 | ,0x1EAC => array(0x1EAD) |
| 1493 | ,0x1EAE => array(0x1EAF) |
| 1494 | ,0x1EB0 => array(0x1EB1) |
| 1495 | ,0x1EB2 => array(0x1EB3) |
| 1496 | ,0x1EB4 => array(0x1EB5) |
| 1497 | ,0x1EB6 => array(0x1EB7) |
| 1498 | ,0x1EB8 => array(0x1EB9) |
| 1499 | ,0x1EBA => array(0x1EBB) |
| 1500 | ,0x1EBC => array(0x1EBD) |
| 1501 | ,0x1EBE => array(0x1EBF) |
| 1502 | ,0x1EC0 => array(0x1EC1) |
| 1503 | ,0x1EC2 => array(0x1EC3) |
| 1504 | ,0x1EC4 => array(0x1EC5) |
| 1505 | ,0x1EC6 => array(0x1EC7) |
| 1506 | ,0x1EC8 => array(0x1EC9) |
| 1507 | ,0x1ECA => array(0x1ECB) |
| 1508 | ,0x1ECC => array(0x1ECD) |
| 1509 | ,0x1ECE => array(0x1ECF) |
| 1510 | ,0x1ED0 => array(0x1ED1) |
| 1511 | ,0x1ED2 => array(0x1ED3) |
| 1512 | ,0x1ED4 => array(0x1ED5) |
| 1513 | ,0x1ED6 => array(0x1ED7) |
| 1514 | ,0x1ED8 => array(0x1ED9) |
| 1515 | ,0x1EDA => array(0x1EDB) |
| 1516 | ,0x1EDC => array(0x1EDD) |
| 1517 | ,0x1EDE => array(0x1EDF) |
| 1518 | ,0x1EE0 => array(0x1EE1) |
| 1519 | ,0x1EE2 => array(0x1EE3) |
| 1520 | ,0x1EE4 => array(0x1EE5) |
| 1521 | ,0x1EE6 => array(0x1EE7) |
| 1522 | ,0x1EE8 => array(0x1EE9) |
| 1523 | ,0x1EEA => array(0x1EEB) |
| 1524 | ,0x1EEC => array(0x1EED) |
| 1525 | ,0x1EEE => array(0x1EEF) |
| 1526 | ,0x1EF0 => array(0x1EF1) |
| 1527 | ,0x1EF2 => array(0x1EF3) |
| 1528 | ,0x1EF4 => array(0x1EF5) |
| 1529 | ,0x1EF6 => array(0x1EF7) |
| 1530 | ,0x1EF8 => array(0x1EF9) |
| 1531 | ,0x1F08 => array(0x1F00) |
| 1532 | ,0x1F09 => array(0x1F01) |
| 1533 | ,0x1F0A => array(0x1F02) |
| 1534 | ,0x1F0B => array(0x1F03) |
| 1535 | ,0x1F0C => array(0x1F04) |
| 1536 | ,0x1F0D => array(0x1F05) |
| 1537 | ,0x1F0E => array(0x1F06) |
| 1538 | ,0x1F0F => array(0x1F07) |
| 1539 | ,0x1F18 => array(0x1F10) |
| 1540 | ,0x1F19 => array(0x1F11) |
| 1541 | ,0x1F1A => array(0x1F12) |
| 1542 | ,0x1F1B => array(0x1F13) |
| 1543 | ,0x1F1C => array(0x1F14) |
| 1544 | ,0x1F1D => array(0x1F15) |
| 1545 | ,0x1F28 => array(0x1F20) |
| 1546 | ,0x1F29 => array(0x1F21) |
| 1547 | ,0x1F2A => array(0x1F22) |
| 1548 | ,0x1F2B => array(0x1F23) |
| 1549 | ,0x1F2C => array(0x1F24) |
| 1550 | ,0x1F2D => array(0x1F25) |
| 1551 | ,0x1F2E => array(0x1F26) |
| 1552 | ,0x1F2F => array(0x1F27) |
| 1553 | ,0x1F38 => array(0x1F30) |
| 1554 | ,0x1F39 => array(0x1F31) |
| 1555 | ,0x1F3A => array(0x1F32) |
| 1556 | ,0x1F3B => array(0x1F33) |
| 1557 | ,0x1F3C => array(0x1F34) |
| 1558 | ,0x1F3D => array(0x1F35) |
| 1559 | ,0x1F3E => array(0x1F36) |
| 1560 | ,0x1F3F => array(0x1F37) |
| 1561 | ,0x1F48 => array(0x1F40) |
| 1562 | ,0x1F49 => array(0x1F41) |
| 1563 | ,0x1F4A => array(0x1F42) |
| 1564 | ,0x1F4B => array(0x1F43) |
| 1565 | ,0x1F4C => array(0x1F44) |
| 1566 | ,0x1F4D => array(0x1F45) |
| 1567 | ,0x1F50 => array(0x3C5, 0x313) |
| 1568 | ,0x1F52 => array(0x3C5, 0x313, 0x300) |
| 1569 | ,0x1F54 => array(0x3C5, 0x313, 0x301) |
| 1570 | ,0x1F56 => array(0x3C5, 0x313, 0x342) |
| 1571 | ,0x1F59 => array(0x1F51) |
| 1572 | ,0x1F5B => array(0x1F53) |
| 1573 | ,0x1F5D => array(0x1F55) |
| 1574 | ,0x1F5F => array(0x1F57) |
| 1575 | ,0x1F68 => array(0x1F60) |
| 1576 | ,0x1F69 => array(0x1F61) |
| 1577 | ,0x1F6A => array(0x1F62) |
| 1578 | ,0x1F6B => array(0x1F63) |
| 1579 | ,0x1F6C => array(0x1F64) |
| 1580 | ,0x1F6D => array(0x1F65) |
| 1581 | ,0x1F6E => array(0x1F66) |
| 1582 | ,0x1F6F => array(0x1F67) |
| 1583 | ,0x1F80 => array(0x1F00, 0x3B9) |
| 1584 | ,0x1F81 => array(0x1F01, 0x3B9) |
| 1585 | ,0x1F82 => array(0x1F02, 0x3B9) |
| 1586 | ,0x1F83 => array(0x1F03, 0x3B9) |
| 1587 | ,0x1F84 => array(0x1F04, 0x3B9) |
| 1588 | ,0x1F85 => array(0x1F05, 0x3B9) |
| 1589 | ,0x1F86 => array(0x1F06, 0x3B9) |
| 1590 | ,0x1F87 => array(0x1F07, 0x3B9) |
| 1591 | ,0x1F88 => array(0x1F00, 0x3B9) |
| 1592 | ,0x1F89 => array(0x1F01, 0x3B9) |
| 1593 | ,0x1F8A => array(0x1F02, 0x3B9) |
| 1594 | ,0x1F8B => array(0x1F03, 0x3B9) |
| 1595 | ,0x1F8C => array(0x1F04, 0x3B9) |
| 1596 | ,0x1F8D => array(0x1F05, 0x3B9) |
| 1597 | ,0x1F8E => array(0x1F06, 0x3B9) |
| 1598 | ,0x1F8F => array(0x1F07, 0x3B9) |
| 1599 | ,0x1F90 => array(0x1F20, 0x3B9) |
| 1600 | ,0x1F91 => array(0x1F21, 0x3B9) |
| 1601 | ,0x1F92 => array(0x1F22, 0x3B9) |
| 1602 | ,0x1F93 => array(0x1F23, 0x3B9) |
| 1603 | ,0x1F94 => array(0x1F24, 0x3B9) |
| 1604 | ,0x1F95 => array(0x1F25, 0x3B9) |
| 1605 | ,0x1F96 => array(0x1F26, 0x3B9) |
| 1606 | ,0x1F97 => array(0x1F27, 0x3B9) |
| 1607 | ,0x1F98 => array(0x1F20, 0x3B9) |
| 1608 | ,0x1F99 => array(0x1F21, 0x3B9) |
| 1609 | ,0x1F9A => array(0x1F22, 0x3B9) |
| 1610 | ,0x1F9B => array(0x1F23, 0x3B9) |
| 1611 | ,0x1F9C => array(0x1F24, 0x3B9) |
| 1612 | ,0x1F9D => array(0x1F25, 0x3B9) |
| 1613 | ,0x1F9E => array(0x1F26, 0x3B9) |
| 1614 | ,0x1F9F => array(0x1F27, 0x3B9) |
| 1615 | ,0x1FA0 => array(0x1F60, 0x3B9) |
| 1616 | ,0x1FA1 => array(0x1F61, 0x3B9) |
| 1617 | ,0x1FA2 => array(0x1F62, 0x3B9) |
| 1618 | ,0x1FA3 => array(0x1F63, 0x3B9) |
| 1619 | ,0x1FA4 => array(0x1F64, 0x3B9) |
| 1620 | ,0x1FA5 => array(0x1F65, 0x3B9) |
| 1621 | ,0x1FA6 => array(0x1F66, 0x3B9) |
| 1622 | ,0x1FA7 => array(0x1F67, 0x3B9) |
| 1623 | ,0x1FA8 => array(0x1F60, 0x3B9) |
| 1624 | ,0x1FA9 => array(0x1F61, 0x3B9) |
| 1625 | ,0x1FAA => array(0x1F62, 0x3B9) |
| 1626 | ,0x1FAB => array(0x1F63, 0x3B9) |
| 1627 | ,0x1FAC => array(0x1F64, 0x3B9) |
| 1628 | ,0x1FAD => array(0x1F65, 0x3B9) |
| 1629 | ,0x1FAE => array(0x1F66, 0x3B9) |
| 1630 | ,0x1FAF => array(0x1F67, 0x3B9) |
| 1631 | ,0x1FB2 => array(0x1F70, 0x3B9) |
| 1632 | ,0x1FB3 => array(0x3B1, 0x3B9) |
| 1633 | ,0x1FB4 => array(0x3AC, 0x3B9) |
| 1634 | ,0x1FB6 => array(0x3B1, 0x342) |
| 1635 | ,0x1FB7 => array(0x3B1, 0x342, 0x3B9) |
| 1636 | ,0x1FB8 => array(0x1FB0) |
| 1637 | ,0x1FB9 => array(0x1FB1) |
| 1638 | ,0x1FBA => array(0x1F70) |
| 1639 | ,0x1FBB => array(0x1F71) |
| 1640 | ,0x1FBC => array(0x3B1, 0x3B9) |
| 1641 | ,0x1FBE => array(0x3B9) |
| 1642 | ,0x1FC2 => array(0x1F74, 0x3B9) |
| 1643 | ,0x1FC3 => array(0x3B7, 0x3B9) |
| 1644 | ,0x1FC4 => array(0x3AE, 0x3B9) |
| 1645 | ,0x1FC6 => array(0x3B7, 0x342) |
| 1646 | ,0x1FC7 => array(0x3B7, 0x342, 0x3B9) |
| 1647 | ,0x1FC8 => array(0x1F72) |
| 1648 | ,0x1FC9 => array(0x1F73) |
| 1649 | ,0x1FCA => array(0x1F74) |
| 1650 | ,0x1FCB => array(0x1F75) |
| 1651 | ,0x1FCC => array(0x3B7, 0x3B9) |
| 1652 | ,0x1FD2 => array(0x3B9, 0x308, 0x300) |
| 1653 | ,0x1FD3 => array(0x3B9, 0x308, 0x301) |
| 1654 | ,0x1FD6 => array(0x3B9, 0x342) |
| 1655 | ,0x1FD7 => array(0x3B9, 0x308, 0x342) |
| 1656 | ,0x1FD8 => array(0x1FD0) |
| 1657 | ,0x1FD9 => array(0x1FD1) |
| 1658 | ,0x1FDA => array(0x1F76) |
| 1659 | ,0x1FDB => array(0x1F77) |
| 1660 | ,0x1FE2 => array(0x3C5, 0x308, 0x300) |
| 1661 | ,0x1FE3 => array(0x3C5, 0x308, 0x301) |
| 1662 | ,0x1FE4 => array(0x3C1, 0x313) |
| 1663 | ,0x1FE6 => array(0x3C5, 0x342) |
| 1664 | ,0x1FE7 => array(0x3C5, 0x308, 0x342) |
| 1665 | ,0x1FE8 => array(0x1FE0) |
| 1666 | ,0x1FE9 => array(0x1FE1) |
| 1667 | ,0x1FEA => array(0x1F7A) |
| 1668 | ,0x1FEB => array(0x1F7B) |
| 1669 | ,0x1FEC => array(0x1FE5) |
| 1670 | ,0x1FF2 => array(0x1F7C, 0x3B9) |
| 1671 | ,0x1FF3 => array(0x3C9, 0x3B9) |
| 1672 | ,0x1FF4 => array(0x3CE, 0x3B9) |
| 1673 | ,0x1FF6 => array(0x3C9, 0x342) |
| 1674 | ,0x1FF7 => array(0x3C9, 0x342, 0x3B9) |
| 1675 | ,0x1FF8 => array(0x1F78) |
| 1676 | ,0x1FF9 => array(0x1F79) |
| 1677 | ,0x1FFA => array(0x1F7C) |
| 1678 | ,0x1FFB => array(0x1F7D) |
| 1679 | ,0x1FFC => array(0x3C9, 0x3B9) |
| 1680 | ,0x20A8 => array(0x72, 0x73) |
| 1681 | ,0x2102 => array(0x63) |
| 1682 | ,0x2103 => array(0xB0, 0x63) |
| 1683 | ,0x2107 => array(0x25B) |
| 1684 | ,0x2109 => array(0xB0, 0x66) |
| 1685 | ,0x210B => array(0x68) |
| 1686 | ,0x210C => array(0x68) |
| 1687 | ,0x210D => array(0x68) |
| 1688 | ,0x2110 => array(0x69) |
| 1689 | ,0x2111 => array(0x69) |
| 1690 | ,0x2112 => array(0x6C) |
| 1691 | ,0x2115 => array(0x6E) |
| 1692 | ,0x2116 => array(0x6E, 0x6F) |
| 1693 | ,0x2119 => array(0x70) |
| 1694 | ,0x211A => array(0x71) |
| 1695 | ,0x211B => array(0x72) |
| 1696 | ,0x211C => array(0x72) |
| 1697 | ,0x211D => array(0x72) |
| 1698 | ,0x2120 => array(0x73, 0x6D) |
| 1699 | ,0x2121 => array(0x74, 0x65, 0x6C) |
| 1700 | ,0x2122 => array(0x74, 0x6D) |
| 1701 | ,0x2124 => array(0x7A) |
| 1702 | ,0x2126 => array(0x3C9) |
| 1703 | ,0x2128 => array(0x7A) |
| 1704 | ,0x212A => array(0x6B) |
| 1705 | ,0x212B => array(0xE5) |
| 1706 | ,0x212C => array(0x62) |
| 1707 | ,0x212D => array(0x63) |
| 1708 | ,0x2130 => array(0x65) |
| 1709 | ,0x2131 => array(0x66) |
| 1710 | ,0x2133 => array(0x6D) |
| 1711 | ,0x213E => array(0x3B3) |
| 1712 | ,0x213F => array(0x3C0) |
| 1713 | ,0x2145 => array(0x64) |
| 1714 | ,0x2160 => array(0x2170) |
| 1715 | ,0x2161 => array(0x2171) |
| 1716 | ,0x2162 => array(0x2172) |
| 1717 | ,0x2163 => array(0x2173) |
| 1718 | ,0x2164 => array(0x2174) |
| 1719 | ,0x2165 => array(0x2175) |
| 1720 | ,0x2166 => array(0x2176) |
| 1721 | ,0x2167 => array(0x2177) |
| 1722 | ,0x2168 => array(0x2178) |
| 1723 | ,0x2169 => array(0x2179) |
| 1724 | ,0x216A => array(0x217A) |
| 1725 | ,0x216B => array(0x217B) |
| 1726 | ,0x216C => array(0x217C) |
| 1727 | ,0x216D => array(0x217D) |
| 1728 | ,0x216E => array(0x217E) |
| 1729 | ,0x216F => array(0x217F) |
| 1730 | ,0x24B6 => array(0x24D0) |
| 1731 | ,0x24B7 => array(0x24D1) |
| 1732 | ,0x24B8 => array(0x24D2) |
| 1733 | ,0x24B9 => array(0x24D3) |
| 1734 | ,0x24BA => array(0x24D4) |
| 1735 | ,0x24BB => array(0x24D5) |
| 1736 | ,0x24BC => array(0x24D6) |
| 1737 | ,0x24BD => array(0x24D7) |
| 1738 | ,0x24BE => array(0x24D8) |
| 1739 | ,0x24BF => array(0x24D9) |
| 1740 | ,0x24C0 => array(0x24DA) |
| 1741 | ,0x24C1 => array(0x24DB) |
| 1742 | ,0x24C2 => array(0x24DC) |
| 1743 | ,0x24C3 => array(0x24DD) |
| 1744 | ,0x24C4 => array(0x24DE) |
| 1745 | ,0x24C5 => array(0x24DF) |
| 1746 | ,0x24C6 => array(0x24E0) |
| 1747 | ,0x24C7 => array(0x24E1) |
| 1748 | ,0x24C8 => array(0x24E2) |
| 1749 | ,0x24C9 => array(0x24E3) |
| 1750 | ,0x24CA => array(0x24E4) |
| 1751 | ,0x24CB => array(0x24E5) |
| 1752 | ,0x24CC => array(0x24E6) |
| 1753 | ,0x24CD => array(0x24E7) |
| 1754 | ,0x24CE => array(0x24E8) |
| 1755 | ,0x24CF => array(0x24E9) |
| 1756 | ,0x3371 => array(0x68, 0x70, 0x61) |
| 1757 | ,0x3373 => array(0x61, 0x75) |
| 1758 | ,0x3375 => array(0x6F, 0x76) |
| 1759 | ,0x3380 => array(0x70, 0x61) |
| 1760 | ,0x3381 => array(0x6E, 0x61) |
| 1761 | ,0x3382 => array(0x3BC, 0x61) |
| 1762 | ,0x3383 => array(0x6D, 0x61) |
| 1763 | ,0x3384 => array(0x6B, 0x61) |
| 1764 | ,0x3385 => array(0x6B, 0x62) |
| 1765 | ,0x3386 => array(0x6D, 0x62) |
| 1766 | ,0x3387 => array(0x67, 0x62) |
| 1767 | ,0x338A => array(0x70, 0x66) |
| 1768 | ,0x338B => array(0x6E, 0x66) |
| 1769 | ,0x338C => array(0x3BC, 0x66) |
| 1770 | ,0x3390 => array(0x68, 0x7A) |
| 1771 | ,0x3391 => array(0x6B, 0x68, 0x7A) |
| 1772 | ,0x3392 => array(0x6D, 0x68, 0x7A) |
| 1773 | ,0x3393 => array(0x67, 0x68, 0x7A) |
| 1774 | ,0x3394 => array(0x74, 0x68, 0x7A) |
| 1775 | ,0x33A9 => array(0x70, 0x61) |
| 1776 | ,0x33AA => array(0x6B, 0x70, 0x61) |
| 1777 | ,0x33AB => array(0x6D, 0x70, 0x61) |
| 1778 | ,0x33AC => array(0x67, 0x70, 0x61) |
| 1779 | ,0x33B4 => array(0x70, 0x76) |
| 1780 | ,0x33B5 => array(0x6E, 0x76) |
| 1781 | ,0x33B6 => array(0x3BC, 0x76) |
| 1782 | ,0x33B7 => array(0x6D, 0x76) |
| 1783 | ,0x33B8 => array(0x6B, 0x76) |
| 1784 | ,0x33B9 => array(0x6D, 0x76) |
| 1785 | ,0x33BA => array(0x70, 0x77) |
| 1786 | ,0x33BB => array(0x6E, 0x77) |
| 1787 | ,0x33BC => array(0x3BC, 0x77) |
| 1788 | ,0x33BD => array(0x6D, 0x77) |
| 1789 | ,0x33BE => array(0x6B, 0x77) |
| 1790 | ,0x33BF => array(0x6D, 0x77) |
| 1791 | ,0x33C0 => array(0x6B, 0x3C9) |
| 1792 | ,0x33C1 => array(0x6D, 0x3C9) /* |
| 1793 | ,0x33C2 => array(0x61, 0x2E, 0x6D, 0x2E) */ |
| 1794 | ,0x33C3 => array(0x62, 0x71) |
| 1795 | ,0x33C6 => array(0x63, 0x2215, 0x6B, 0x67) |
| 1796 | ,0x33C7 => array(0x63, 0x6F, 0x2E) |
| 1797 | ,0x33C8 => array(0x64, 0x62) |
| 1798 | ,0x33C9 => array(0x67, 0x79) |
| 1799 | ,0x33CB => array(0x68, 0x70) |
| 1800 | ,0x33CD => array(0x6B, 0x6B) |
| 1801 | ,0x33CE => array(0x6B, 0x6D) |
| 1802 | ,0x33D7 => array(0x70, 0x68) |
| 1803 | ,0x33D9 => array(0x70, 0x70, 0x6D) |
| 1804 | ,0x33DA => array(0x70, 0x72) |
| 1805 | ,0x33DC => array(0x73, 0x76) |
| 1806 | ,0x33DD => array(0x77, 0x62) |
| 1807 | ,0xFB00 => array(0x66, 0x66) |
| 1808 | ,0xFB01 => array(0x66, 0x69) |
| 1809 | ,0xFB02 => array(0x66, 0x6C) |
| 1810 | ,0xFB03 => array(0x66, 0x66, 0x69) |
| 1811 | ,0xFB04 => array(0x66, 0x66, 0x6C) |
| 1812 | ,0xFB05 => array(0x73, 0x74) |
| 1813 | ,0xFB06 => array(0x73, 0x74) |
| 1814 | ,0xFB13 => array(0x574, 0x576) |
| 1815 | ,0xFB14 => array(0x574, 0x565) |
| 1816 | ,0xFB15 => array(0x574, 0x56B) |
| 1817 | ,0xFB16 => array(0x57E, 0x576) |
| 1818 | ,0xFB17 => array(0x574, 0x56D) |
| 1819 | ,0xFF21 => array(0xFF41) |
| 1820 | ,0xFF22 => array(0xFF42) |
| 1821 | ,0xFF23 => array(0xFF43) |
| 1822 | ,0xFF24 => array(0xFF44) |
| 1823 | ,0xFF25 => array(0xFF45) |
| 1824 | ,0xFF26 => array(0xFF46) |
| 1825 | ,0xFF27 => array(0xFF47) |
| 1826 | ,0xFF28 => array(0xFF48) |
| 1827 | ,0xFF29 => array(0xFF49) |
| 1828 | ,0xFF2A => array(0xFF4A) |
| 1829 | ,0xFF2B => array(0xFF4B) |
| 1830 | ,0xFF2C => array(0xFF4C) |
| 1831 | ,0xFF2D => array(0xFF4D) |
| 1832 | ,0xFF2E => array(0xFF4E) |
| 1833 | ,0xFF2F => array(0xFF4F) |
| 1834 | ,0xFF30 => array(0xFF50) |
| 1835 | ,0xFF31 => array(0xFF51) |
| 1836 | ,0xFF32 => array(0xFF52) |
| 1837 | ,0xFF33 => array(0xFF53) |
| 1838 | ,0xFF34 => array(0xFF54) |
| 1839 | ,0xFF35 => array(0xFF55) |
| 1840 | ,0xFF36 => array(0xFF56) |
| 1841 | ,0xFF37 => array(0xFF57) |
| 1842 | ,0xFF38 => array(0xFF58) |
| 1843 | ,0xFF39 => array(0xFF59) |
| 1844 | ,0xFF3A => array(0xFF5A) |
| 1845 | ,0x10400 => array(0x10428) |
| 1846 | ,0x10401 => array(0x10429) |
| 1847 | ,0x10402 => array(0x1042A) |
| 1848 | ,0x10403 => array(0x1042B) |
| 1849 | ,0x10404 => array(0x1042C) |
| 1850 | ,0x10405 => array(0x1042D) |
| 1851 | ,0x10406 => array(0x1042E) |
| 1852 | ,0x10407 => array(0x1042F) |
| 1853 | ,0x10408 => array(0x10430) |
| 1854 | ,0x10409 => array(0x10431) |
| 1855 | ,0x1040A => array(0x10432) |
| 1856 | ,0x1040B => array(0x10433) |
| 1857 | ,0x1040C => array(0x10434) |
| 1858 | ,0x1040D => array(0x10435) |
| 1859 | ,0x1040E => array(0x10436) |
| 1860 | ,0x1040F => array(0x10437) |
| 1861 | ,0x10410 => array(0x10438) |
| 1862 | ,0x10411 => array(0x10439) |
| 1863 | ,0x10412 => array(0x1043A) |
| 1864 | ,0x10413 => array(0x1043B) |
| 1865 | ,0x10414 => array(0x1043C) |
| 1866 | ,0x10415 => array(0x1043D) |
| 1867 | ,0x10416 => array(0x1043E) |
| 1868 | ,0x10417 => array(0x1043F) |
| 1869 | ,0x10418 => array(0x10440) |
| 1870 | ,0x10419 => array(0x10441) |
| 1871 | ,0x1041A => array(0x10442) |
| 1872 | ,0x1041B => array(0x10443) |
| 1873 | ,0x1041C => array(0x10444) |
| 1874 | ,0x1041D => array(0x10445) |
| 1875 | ,0x1041E => array(0x10446) |
| 1876 | ,0x1041F => array(0x10447) |
| 1877 | ,0x10420 => array(0x10448) |
| 1878 | ,0x10421 => array(0x10449) |
| 1879 | ,0x10422 => array(0x1044A) |
| 1880 | ,0x10423 => array(0x1044B) |
| 1881 | ,0x10424 => array(0x1044C) |
| 1882 | ,0x10425 => array(0x1044D) |
| 1883 | ,0x1D400 => array(0x61) |
| 1884 | ,0x1D401 => array(0x62) |
| 1885 | ,0x1D402 => array(0x63) |
| 1886 | ,0x1D403 => array(0x64) |
| 1887 | ,0x1D404 => array(0x65) |
| 1888 | ,0x1D405 => array(0x66) |
| 1889 | ,0x1D406 => array(0x67) |
| 1890 | ,0x1D407 => array(0x68) |
| 1891 | ,0x1D408 => array(0x69) |
| 1892 | ,0x1D409 => array(0x6A) |
| 1893 | ,0x1D40A => array(0x6B) |
| 1894 | ,0x1D40B => array(0x6C) |
| 1895 | ,0x1D40C => array(0x6D) |
| 1896 | ,0x1D40D => array(0x6E) |
| 1897 | ,0x1D40E => array(0x6F) |
| 1898 | ,0x1D40F => array(0x70) |
| 1899 | ,0x1D410 => array(0x71) |
| 1900 | ,0x1D411 => array(0x72) |
| 1901 | ,0x1D412 => array(0x73) |
| 1902 | ,0x1D413 => array(0x74) |
| 1903 | ,0x1D414 => array(0x75) |
| 1904 | ,0x1D415 => array(0x76) |
| 1905 | ,0x1D416 => array(0x77) |
| 1906 | ,0x1D417 => array(0x78) |
| 1907 | ,0x1D418 => array(0x79) |
| 1908 | ,0x1D419 => array(0x7A) |
| 1909 | ,0x1D434 => array(0x61) |
| 1910 | ,0x1D435 => array(0x62) |
| 1911 | ,0x1D436 => array(0x63) |
| 1912 | ,0x1D437 => array(0x64) |
| 1913 | ,0x1D438 => array(0x65) |
| 1914 | ,0x1D439 => array(0x66) |
| 1915 | ,0x1D43A => array(0x67) |
| 1916 | ,0x1D43B => array(0x68) |
| 1917 | ,0x1D43C => array(0x69) |
| 1918 | ,0x1D43D => array(0x6A) |
| 1919 | ,0x1D43E => array(0x6B) |
| 1920 | ,0x1D43F => array(0x6C) |
| 1921 | ,0x1D440 => array(0x6D) |
| 1922 | ,0x1D441 => array(0x6E) |
| 1923 | ,0x1D442 => array(0x6F) |
| 1924 | ,0x1D443 => array(0x70) |
| 1925 | ,0x1D444 => array(0x71) |
| 1926 | ,0x1D445 => array(0x72) |
| 1927 | ,0x1D446 => array(0x73) |
| 1928 | ,0x1D447 => array(0x74) |
| 1929 | ,0x1D448 => array(0x75) |
| 1930 | ,0x1D449 => array(0x76) |
| 1931 | ,0x1D44A => array(0x77) |
| 1932 | ,0x1D44B => array(0x78) |
| 1933 | ,0x1D44C => array(0x79) |
| 1934 | ,0x1D44D => array(0x7A) |
| 1935 | ,0x1D468 => array(0x61) |
| 1936 | ,0x1D469 => array(0x62) |
| 1937 | ,0x1D46A => array(0x63) |
| 1938 | ,0x1D46B => array(0x64) |
| 1939 | ,0x1D46C => array(0x65) |
| 1940 | ,0x1D46D => array(0x66) |
| 1941 | ,0x1D46E => array(0x67) |
| 1942 | ,0x1D46F => array(0x68) |
| 1943 | ,0x1D470 => array(0x69) |
| 1944 | ,0x1D471 => array(0x6A) |
| 1945 | ,0x1D472 => array(0x6B) |
| 1946 | ,0x1D473 => array(0x6C) |
| 1947 | ,0x1D474 => array(0x6D) |
| 1948 | ,0x1D475 => array(0x6E) |
| 1949 | ,0x1D476 => array(0x6F) |
| 1950 | ,0x1D477 => array(0x70) |
| 1951 | ,0x1D478 => array(0x71) |
| 1952 | ,0x1D479 => array(0x72) |
| 1953 | ,0x1D47A => array(0x73) |
| 1954 | ,0x1D47B => array(0x74) |
| 1955 | ,0x1D47C => array(0x75) |
| 1956 | ,0x1D47D => array(0x76) |
| 1957 | ,0x1D47E => array(0x77) |
| 1958 | ,0x1D47F => array(0x78) |
| 1959 | ,0x1D480 => array(0x79) |
| 1960 | ,0x1D481 => array(0x7A) |
| 1961 | ,0x1D49C => array(0x61) |
| 1962 | ,0x1D49E => array(0x63) |
| 1963 | ,0x1D49F => array(0x64) |
| 1964 | ,0x1D4A2 => array(0x67) |
| 1965 | ,0x1D4A5 => array(0x6A) |
| 1966 | ,0x1D4A6 => array(0x6B) |
| 1967 | ,0x1D4A9 => array(0x6E) |
| 1968 | ,0x1D4AA => array(0x6F) |
| 1969 | ,0x1D4AB => array(0x70) |
| 1970 | ,0x1D4AC => array(0x71) |
| 1971 | ,0x1D4AE => array(0x73) |
| 1972 | ,0x1D4AF => array(0x74) |
| 1973 | ,0x1D4B0 => array(0x75) |
| 1974 | ,0x1D4B1 => array(0x76) |
| 1975 | ,0x1D4B2 => array(0x77) |
| 1976 | ,0x1D4B3 => array(0x78) |
| 1977 | ,0x1D4B4 => array(0x79) |
| 1978 | ,0x1D4B5 => array(0x7A) |
| 1979 | ,0x1D4D0 => array(0x61) |
| 1980 | ,0x1D4D1 => array(0x62) |
| 1981 | ,0x1D4D2 => array(0x63) |
| 1982 | ,0x1D4D3 => array(0x64) |
| 1983 | ,0x1D4D4 => array(0x65) |
| 1984 | ,0x1D4D5 => array(0x66) |
| 1985 | ,0x1D4D6 => array(0x67) |
| 1986 | ,0x1D4D7 => array(0x68) |
| 1987 | ,0x1D4D8 => array(0x69) |
| 1988 | ,0x1D4D9 => array(0x6A) |
| 1989 | ,0x1D4DA => array(0x6B) |
| 1990 | ,0x1D4DB => array(0x6C) |
| 1991 | ,0x1D4DC => array(0x6D) |
| 1992 | ,0x1D4DD => array(0x6E) |
| 1993 | ,0x1D4DE => array(0x6F) |
| 1994 | ,0x1D4DF => array(0x70) |
| 1995 | ,0x1D4E0 => array(0x71) |
| 1996 | ,0x1D4E1 => array(0x72) |
| 1997 | ,0x1D4E2 => array(0x73) |
| 1998 | ,0x1D4E3 => array(0x74) |
| 1999 | ,0x1D4E4 => array(0x75) |
| 2000 | ,0x1D4E5 => array(0x76) |
| 2001 | ,0x1D4E6 => array(0x77) |
| 2002 | ,0x1D4E7 => array(0x78) |
| 2003 | ,0x1D4E8 => array(0x79) |
| 2004 | ,0x1D4E9 => array(0x7A) |
| 2005 | ,0x1D504 => array(0x61) |
| 2006 | ,0x1D505 => array(0x62) |
| 2007 | ,0x1D507 => array(0x64) |
| 2008 | ,0x1D508 => array(0x65) |
| 2009 | ,0x1D509 => array(0x66) |
| 2010 | ,0x1D50A => array(0x67) |
| 2011 | ,0x1D50D => array(0x6A) |
| 2012 | ,0x1D50E => array(0x6B) |
| 2013 | ,0x1D50F => array(0x6C) |
| 2014 | ,0x1D510 => array(0x6D) |
| 2015 | ,0x1D511 => array(0x6E) |
| 2016 | ,0x1D512 => array(0x6F) |
| 2017 | ,0x1D513 => array(0x70) |
| 2018 | ,0x1D514 => array(0x71) |
| 2019 | ,0x1D516 => array(0x73) |
| 2020 | ,0x1D517 => array(0x74) |
| 2021 | ,0x1D518 => array(0x75) |
| 2022 | ,0x1D519 => array(0x76) |
| 2023 | ,0x1D51A => array(0x77) |
| 2024 | ,0x1D51B => array(0x78) |
| 2025 | ,0x1D51C => array(0x79) |
| 2026 | ,0x1D538 => array(0x61) |
| 2027 | ,0x1D539 => array(0x62) |
| 2028 | ,0x1D53B => array(0x64) |
| 2029 | ,0x1D53C => array(0x65) |
| 2030 | ,0x1D53D => array(0x66) |
| 2031 | ,0x1D53E => array(0x67) |
| 2032 | ,0x1D540 => array(0x69) |
| 2033 | ,0x1D541 => array(0x6A) |
| 2034 | ,0x1D542 => array(0x6B) |
| 2035 | ,0x1D543 => array(0x6C) |
| 2036 | ,0x1D544 => array(0x6D) |
| 2037 | ,0x1D546 => array(0x6F) |
| 2038 | ,0x1D54A => array(0x73) |
| 2039 | ,0x1D54B => array(0x74) |
| 2040 | ,0x1D54C => array(0x75) |
| 2041 | ,0x1D54D => array(0x76) |
| 2042 | ,0x1D54E => array(0x77) |
| 2043 | ,0x1D54F => array(0x78) |
| 2044 | ,0x1D550 => array(0x79) |
| 2045 | ,0x1D56C => array(0x61) |
| 2046 | ,0x1D56D => array(0x62) |
| 2047 | ,0x1D56E => array(0x63) |
| 2048 | ,0x1D56F => array(0x64) |
| 2049 | ,0x1D570 => array(0x65) |
| 2050 | ,0x1D571 => array(0x66) |
| 2051 | ,0x1D572 => array(0x67) |
| 2052 | ,0x1D573 => array(0x68) |
| 2053 | ,0x1D574 => array(0x69) |
| 2054 | ,0x1D575 => array(0x6A) |
| 2055 | ,0x1D576 => array(0x6B) |
| 2056 | ,0x1D577 => array(0x6C) |
| 2057 | ,0x1D578 => array(0x6D) |
| 2058 | ,0x1D579 => array(0x6E) |
| 2059 | ,0x1D57A => array(0x6F) |
| 2060 | ,0x1D57B => array(0x70) |
| 2061 | ,0x1D57C => array(0x71) |
| 2062 | ,0x1D57D => array(0x72) |
| 2063 | ,0x1D57E => array(0x73) |
| 2064 | ,0x1D57F => array(0x74) |
| 2065 | ,0x1D580 => array(0x75) |
| 2066 | ,0x1D581 => array(0x76) |
| 2067 | ,0x1D582 => array(0x77) |
| 2068 | ,0x1D583 => array(0x78) |
| 2069 | ,0x1D584 => array(0x79) |
| 2070 | ,0x1D585 => array(0x7A) |
| 2071 | ,0x1D5A0 => array(0x61) |
| 2072 | ,0x1D5A1 => array(0x62) |
| 2073 | ,0x1D5A2 => array(0x63) |
| 2074 | ,0x1D5A3 => array(0x64) |
| 2075 | ,0x1D5A4 => array(0x65) |
| 2076 | ,0x1D5A5 => array(0x66) |
| 2077 | ,0x1D5A6 => array(0x67) |
| 2078 | ,0x1D5A7 => array(0x68) |
| 2079 | ,0x1D5A8 => array(0x69) |
| 2080 | ,0x1D5A9 => array(0x6A) |
| 2081 | ,0x1D5AA => array(0x6B) |
| 2082 | ,0x1D5AB => array(0x6C) |
| 2083 | ,0x1D5AC => array(0x6D) |
| 2084 | ,0x1D5AD => array(0x6E) |
| 2085 | ,0x1D5AE => array(0x6F) |
| 2086 | ,0x1D5AF => array(0x70) |
| 2087 | ,0x1D5B0 => array(0x71) |
| 2088 | ,0x1D5B1 => array(0x72) |
| 2089 | ,0x1D5B2 => array(0x73) |
| 2090 | ,0x1D5B3 => array(0x74) |
| 2091 | ,0x1D5B4 => array(0x75) |
| 2092 | ,0x1D5B5 => array(0x76) |
| 2093 | ,0x1D5B6 => array(0x77) |
| 2094 | ,0x1D5B7 => array(0x78) |
| 2095 | ,0x1D5B8 => array(0x79) |
| 2096 | ,0x1D5B9 => array(0x7A) |
| 2097 | ,0x1D5D4 => array(0x61) |
| 2098 | ,0x1D5D5 => array(0x62) |
| 2099 | ,0x1D5D6 => array(0x63) |
| 2100 | ,0x1D5D7 => array(0x64) |
| 2101 | ,0x1D5D8 => array(0x65) |
| 2102 | ,0x1D5D9 => array(0x66) |
| 2103 | ,0x1D5DA => array(0x67) |
| 2104 | ,0x1D5DB => array(0x68) |
| 2105 | ,0x1D5DC => array(0x69) |
| 2106 | ,0x1D5DD => array(0x6A) |
| 2107 | ,0x1D5DE => array(0x6B) |
| 2108 | ,0x1D5DF => array(0x6C) |
| 2109 | ,0x1D5E0 => array(0x6D) |
| 2110 | ,0x1D5E1 => array(0x6E) |
| 2111 | ,0x1D5E2 => array(0x6F) |
| 2112 | ,0x1D5E3 => array(0x70) |
| 2113 | ,0x1D5E4 => array(0x71) |
| 2114 | ,0x1D5E5 => array(0x72) |
| 2115 | ,0x1D5E6 => array(0x73) |
| 2116 | ,0x1D5E7 => array(0x74) |
| 2117 | ,0x1D5E8 => array(0x75) |
| 2118 | ,0x1D5E9 => array(0x76) |
| 2119 | ,0x1D5EA => array(0x77) |
| 2120 | ,0x1D5EB => array(0x78) |
| 2121 | ,0x1D5EC => array(0x79) |
| 2122 | ,0x1D5ED => array(0x7A) |
| 2123 | ,0x1D608 => array(0x61) |
| 2124 | ,0x1D609 => array(0x62) |
| 2125 | ,0x1D60A => array(0x63) |
| 2126 | ,0x1D60B => array(0x64) |
| 2127 | ,0x1D60C => array(0x65) |
| 2128 | ,0x1D60D => array(0x66) |
| 2129 | ,0x1D60E => array(0x67) |
| 2130 | ,0x1D60F => array(0x68) |
| 2131 | ,0x1D610 => array(0x69) |
| 2132 | ,0x1D611 => array(0x6A) |
| 2133 | ,0x1D612 => array(0x6B) |
| 2134 | ,0x1D613 => array(0x6C) |
| 2135 | ,0x1D614 => array(0x6D) |
| 2136 | ,0x1D615 => array(0x6E) |
| 2137 | ,0x1D616 => array(0x6F) |
| 2138 | ,0x1D617 => array(0x70) |
| 2139 | ,0x1D618 => array(0x71) |
| 2140 | ,0x1D619 => array(0x72) |
| 2141 | ,0x1D61A => array(0x73) |
| 2142 | ,0x1D61B => array(0x74) |
| 2143 | ,0x1D61C => array(0x75) |
| 2144 | ,0x1D61D => array(0x76) |
| 2145 | ,0x1D61E => array(0x77) |
| 2146 | ,0x1D61F => array(0x78) |
| 2147 | ,0x1D620 => array(0x79) |
| 2148 | ,0x1D621 => array(0x7A) |
| 2149 | ,0x1D63C => array(0x61) |
| 2150 | ,0x1D63D => array(0x62) |
| 2151 | ,0x1D63E => array(0x63) |
| 2152 | ,0x1D63F => array(0x64) |
| 2153 | ,0x1D640 => array(0x65) |
| 2154 | ,0x1D641 => array(0x66) |
| 2155 | ,0x1D642 => array(0x67) |
| 2156 | ,0x1D643 => array(0x68) |
| 2157 | ,0x1D644 => array(0x69) |
| 2158 | ,0x1D645 => array(0x6A) |
| 2159 | ,0x1D646 => array(0x6B) |
| 2160 | ,0x1D647 => array(0x6C) |
| 2161 | ,0x1D648 => array(0x6D) |
| 2162 | ,0x1D649 => array(0x6E) |
| 2163 | ,0x1D64A => array(0x6F) |
| 2164 | ,0x1D64B => array(0x70) |
| 2165 | ,0x1D64C => array(0x71) |
| 2166 | ,0x1D64D => array(0x72) |
| 2167 | ,0x1D64E => array(0x73) |
| 2168 | ,0x1D64F => array(0x74) |
| 2169 | ,0x1D650 => array(0x75) |
| 2170 | ,0x1D651 => array(0x76) |
| 2171 | ,0x1D652 => array(0x77) |
| 2172 | ,0x1D653 => array(0x78) |
| 2173 | ,0x1D654 => array(0x79) |
| 2174 | ,0x1D655 => array(0x7A) |
| 2175 | ,0x1D670 => array(0x61) |
| 2176 | ,0x1D671 => array(0x62) |
| 2177 | ,0x1D672 => array(0x63) |
| 2178 | ,0x1D673 => array(0x64) |
| 2179 | ,0x1D674 => array(0x65) |
| 2180 | ,0x1D675 => array(0x66) |
| 2181 | ,0x1D676 => array(0x67) |
| 2182 | ,0x1D677 => array(0x68) |
| 2183 | ,0x1D678 => array(0x69) |
| 2184 | ,0x1D679 => array(0x6A) |
| 2185 | ,0x1D67A => array(0x6B) |
| 2186 | ,0x1D67B => array(0x6C) |
| 2187 | ,0x1D67C => array(0x6D) |
| 2188 | ,0x1D67D => array(0x6E) |
| 2189 | ,0x1D67E => array(0x6F) |
| 2190 | ,0x1D67F => array(0x70) |
| 2191 | ,0x1D680 => array(0x71) |
| 2192 | ,0x1D681 => array(0x72) |
| 2193 | ,0x1D682 => array(0x73) |
| 2194 | ,0x1D683 => array(0x74) |
| 2195 | ,0x1D684 => array(0x75) |
| 2196 | ,0x1D685 => array(0x76) |
| 2197 | ,0x1D686 => array(0x77) |
| 2198 | ,0x1D687 => array(0x78) |
| 2199 | ,0x1D688 => array(0x79) |
| 2200 | ,0x1D689 => array(0x7A) |
| 2201 | ,0x1D6A8 => array(0x3B1) |
| 2202 | ,0x1D6A9 => array(0x3B2) |
| 2203 | ,0x1D6AA => array(0x3B3) |
| 2204 | ,0x1D6AB => array(0x3B4) |
| 2205 | ,0x1D6AC => array(0x3B5) |
| 2206 | ,0x1D6AD => array(0x3B6) |
| 2207 | ,0x1D6AE => array(0x3B7) |
| 2208 | ,0x1D6AF => array(0x3B8) |
| 2209 | ,0x1D6B0 => array(0x3B9) |
| 2210 | ,0x1D6B1 => array(0x3BA) |
| 2211 | ,0x1D6B2 => array(0x3BB) |
| 2212 | ,0x1D6B3 => array(0x3BC) |
| 2213 | ,0x1D6B4 => array(0x3BD) |
| 2214 | ,0x1D6B5 => array(0x3BE) |
| 2215 | ,0x1D6B6 => array(0x3BF) |
| 2216 | ,0x1D6B7 => array(0x3C0) |
| 2217 | ,0x1D6B8 => array(0x3C1) |
| 2218 | ,0x1D6B9 => array(0x3B8) |
| 2219 | ,0x1D6BA => array(0x3C3) |
| 2220 | ,0x1D6BB => array(0x3C4) |
| 2221 | ,0x1D6BC => array(0x3C5) |
| 2222 | ,0x1D6BD => array(0x3C6) |
| 2223 | ,0x1D6BE => array(0x3C7) |
| 2224 | ,0x1D6BF => array(0x3C8) |
| 2225 | ,0x1D6C0 => array(0x3C9) |
| 2226 | ,0x1D6D3 => array(0x3C3) |
| 2227 | ,0x1D6E2 => array(0x3B1) |
| 2228 | ,0x1D6E3 => array(0x3B2) |
| 2229 | ,0x1D6E4 => array(0x3B3) |
| 2230 | ,0x1D6E5 => array(0x3B4) |
| 2231 | ,0x1D6E6 => array(0x3B5) |
| 2232 | ,0x1D6E7 => array(0x3B6) |
| 2233 | ,0x1D6E8 => array(0x3B7) |
| 2234 | ,0x1D6E9 => array(0x3B8) |
| 2235 | ,0x1D6EA => array(0x3B9) |
| 2236 | ,0x1D6EB => array(0x3BA) |
| 2237 | ,0x1D6EC => array(0x3BB) |
| 2238 | ,0x1D6ED => array(0x3BC) |
| 2239 | ,0x1D6EE => array(0x3BD) |
| 2240 | ,0x1D6EF => array(0x3BE) |
| 2241 | ,0x1D6F0 => array(0x3BF) |
| 2242 | ,0x1D6F1 => array(0x3C0) |
| 2243 | ,0x1D6F2 => array(0x3C1) |
| 2244 | ,0x1D6F3 => array(0x3B8) |
| 2245 | ,0x1D6F4 => array(0x3C3) |
| 2246 | ,0x1D6F5 => array(0x3C4) |
| 2247 | ,0x1D6F6 => array(0x3C5) |
| 2248 | ,0x1D6F7 => array(0x3C6) |
| 2249 | ,0x1D6F8 => array(0x3C7) |
| 2250 | ,0x1D6F9 => array(0x3C8) |
| 2251 | ,0x1D6FA => array(0x3C9) |
| 2252 | ,0x1D70D => array(0x3C3) |
| 2253 | ,0x1D71C => array(0x3B1) |
| 2254 | ,0x1D71D => array(0x3B2) |
| 2255 | ,0x1D71E => array(0x3B3) |
| 2256 | ,0x1D71F => array(0x3B4) |
| 2257 | ,0x1D720 => array(0x3B5) |
| 2258 | ,0x1D721 => array(0x3B6) |
| 2259 | ,0x1D722 => array(0x3B7) |
| 2260 | ,0x1D723 => array(0x3B8) |
| 2261 | ,0x1D724 => array(0x3B9) |
| 2262 | ,0x1D725 => array(0x3BA) |
| 2263 | ,0x1D726 => array(0x3BB) |
| 2264 | ,0x1D727 => array(0x3BC) |
| 2265 | ,0x1D728 => array(0x3BD) |
| 2266 | ,0x1D729 => array(0x3BE) |
| 2267 | ,0x1D72A => array(0x3BF) |
| 2268 | ,0x1D72B => array(0x3C0) |
| 2269 | ,0x1D72C => array(0x3C1) |
| 2270 | ,0x1D72D => array(0x3B8) |
| 2271 | ,0x1D72E => array(0x3C3) |
| 2272 | ,0x1D72F => array(0x3C4) |
| 2273 | ,0x1D730 => array(0x3C5) |
| 2274 | ,0x1D731 => array(0x3C6) |
| 2275 | ,0x1D732 => array(0x3C7) |
| 2276 | ,0x1D733 => array(0x3C8) |
| 2277 | ,0x1D734 => array(0x3C9) |
| 2278 | ,0x1D747 => array(0x3C3) |
| 2279 | ,0x1D756 => array(0x3B1) |
| 2280 | ,0x1D757 => array(0x3B2) |
| 2281 | ,0x1D758 => array(0x3B3) |
| 2282 | ,0x1D759 => array(0x3B4) |
| 2283 | ,0x1D75A => array(0x3B5) |
| 2284 | ,0x1D75B => array(0x3B6) |
| 2285 | ,0x1D75C => array(0x3B7) |
| 2286 | ,0x1D75D => array(0x3B8) |
| 2287 | ,0x1D75E => array(0x3B9) |
| 2288 | ,0x1D75F => array(0x3BA) |
| 2289 | ,0x1D760 => array(0x3BB) |
| 2290 | ,0x1D761 => array(0x3BC) |
| 2291 | ,0x1D762 => array(0x3BD) |
| 2292 | ,0x1D763 => array(0x3BE) |
| 2293 | ,0x1D764 => array(0x3BF) |
| 2294 | ,0x1D765 => array(0x3C0) |
| 2295 | ,0x1D766 => array(0x3C1) |
| 2296 | ,0x1D767 => array(0x3B8) |
| 2297 | ,0x1D768 => array(0x3C3) |
| 2298 | ,0x1D769 => array(0x3C4) |
| 2299 | ,0x1D76A => array(0x3C5) |
| 2300 | ,0x1D76B => array(0x3C6) |
| 2301 | ,0x1D76C => array(0x3C7) |
| 2302 | ,0x1D76D => array(0x3C8) |
| 2303 | ,0x1D76E => array(0x3C9) |
| 2304 | ,0x1D781 => array(0x3C3) |
| 2305 | ,0x1D790 => array(0x3B1) |
| 2306 | ,0x1D791 => array(0x3B2) |
| 2307 | ,0x1D792 => array(0x3B3) |
| 2308 | ,0x1D793 => array(0x3B4) |
| 2309 | ,0x1D794 => array(0x3B5) |
| 2310 | ,0x1D795 => array(0x3B6) |
| 2311 | ,0x1D796 => array(0x3B7) |
| 2312 | ,0x1D797 => array(0x3B8) |
| 2313 | ,0x1D798 => array(0x3B9) |
| 2314 | ,0x1D799 => array(0x3BA) |
| 2315 | ,0x1D79A => array(0x3BB) |
| 2316 | ,0x1D79B => array(0x3BC) |
| 2317 | ,0x1D79C => array(0x3BD) |
| 2318 | ,0x1D79D => array(0x3BE) |
| 2319 | ,0x1D79E => array(0x3BF) |
| 2320 | ,0x1D79F => array(0x3C0) |
| 2321 | ,0x1D7A0 => array(0x3C1) |
| 2322 | ,0x1D7A1 => array(0x3B8) |
| 2323 | ,0x1D7A2 => array(0x3C3) |
| 2324 | ,0x1D7A3 => array(0x3C4) |
| 2325 | ,0x1D7A4 => array(0x3C5) |
| 2326 | ,0x1D7A5 => array(0x3C6) |
| 2327 | ,0x1D7A6 => array(0x3C7) |
| 2328 | ,0x1D7A7 => array(0x3C8) |
| 2329 | ,0x1D7A8 => array(0x3C9) |
| 2330 | ,0x1D7BB => array(0x3C3) |
| 2331 | ,0x3F9 => array(0x3C3) |
| 2332 | ,0x1D2C => array(0x61) |
| 2333 | ,0x1D2D => array(0xE6) |
| 2334 | ,0x1D2E => array(0x62) |
| 2335 | ,0x1D30 => array(0x64) |
| 2336 | ,0x1D31 => array(0x65) |
| 2337 | ,0x1D32 => array(0x1DD) |
| 2338 | ,0x1D33 => array(0x67) |
| 2339 | ,0x1D34 => array(0x68) |
| 2340 | ,0x1D35 => array(0x69) |
| 2341 | ,0x1D36 => array(0x6A) |
| 2342 | ,0x1D37 => array(0x6B) |
| 2343 | ,0x1D38 => array(0x6C) |
| 2344 | ,0x1D39 => array(0x6D) |
| 2345 | ,0x1D3A => array(0x6E) |
| 2346 | ,0x1D3C => array(0x6F) |
| 2347 | ,0x1D3D => array(0x223) |
| 2348 | ,0x1D3E => array(0x70) |
| 2349 | ,0x1D3F => array(0x72) |
| 2350 | ,0x1D40 => array(0x74) |
| 2351 | ,0x1D41 => array(0x75) |
| 2352 | ,0x1D42 => array(0x77) |
| 2353 | ,0x213B => array(0x66, 0x61, 0x78) |
| 2354 | ,0x3250 => array(0x70, 0x74, 0x65) |
| 2355 | ,0x32CC => array(0x68, 0x67) |
| 2356 | ,0x32CE => array(0x65, 0x76) |
| 2357 | ,0x32CF => array(0x6C, 0x74, 0x64) |
| 2358 | ,0x337A => array(0x69, 0x75) |
| 2359 | ,0x33DE => array(0x76, 0x2215, 0x6D) |
| 2360 | ,0x33DF => array(0x61, 0x2215, 0x6D) |
| 2361 | ) |
| 2362 | ,'norm_combcls' => array |
| 2363 | (0x334 => 1 |
| 2364 | ,0x335 => 1 |
| 2365 | ,0x336 => 1 |
| 2366 | ,0x337 => 1 |
| 2367 | ,0x338 => 1 |
| 2368 | ,0x93C => 7 |
| 2369 | ,0x9BC => 7 |
| 2370 | ,0xA3C => 7 |
| 2371 | ,0xABC => 7 |
| 2372 | ,0xB3C => 7 |
| 2373 | ,0xCBC => 7 |
| 2374 | ,0x1037 => 7 |
| 2375 | ,0x3099 => 8 |
| 2376 | ,0x309A => 8 |
| 2377 | ,0x94D => 9 |
| 2378 | ,0x9CD => 9 |
| 2379 | ,0xA4D => 9 |
| 2380 | ,0xACD => 9 |
| 2381 | ,0xB4D => 9 |
| 2382 | ,0xBCD => 9 |
| 2383 | ,0xC4D => 9 |
| 2384 | ,0xCCD => 9 |
| 2385 | ,0xD4D => 9 |
| 2386 | ,0xDCA => 9 |
| 2387 | ,0xE3A => 9 |
| 2388 | ,0xF84 => 9 |
| 2389 | ,0x1039 => 9 |
| 2390 | ,0x1714 => 9 |
| 2391 | ,0x1734 => 9 |
| 2392 | ,0x17D2 => 9 |
| 2393 | ,0x5B0 => 10 |
| 2394 | ,0x5B1 => 11 |
| 2395 | ,0x5B2 => 12 |
| 2396 | ,0x5B3 => 13 |
| 2397 | ,0x5B4 => 14 |
| 2398 | ,0x5B5 => 15 |
| 2399 | ,0x5B6 => 16 |
| 2400 | ,0x5B7 => 17 |
| 2401 | ,0x5B8 => 18 |
| 2402 | ,0x5B9 => 19 |
| 2403 | ,0x5BB => 20 |
| 2404 | ,0x5Bc => 21 |
| 2405 | ,0x5BD => 22 |
| 2406 | ,0x5BF => 23 |
| 2407 | ,0x5C1 => 24 |
| 2408 | ,0x5C2 => 25 |
| 2409 | ,0xFB1E => 26 |
| 2410 | ,0x64B => 27 |
| 2411 | ,0x64C => 28 |
| 2412 | ,0x64D => 29 |
| 2413 | ,0x64E => 30 |
| 2414 | ,0x64F => 31 |
| 2415 | ,0x650 => 32 |
| 2416 | ,0x651 => 33 |
| 2417 | ,0x652 => 34 |
| 2418 | ,0x670 => 35 |
| 2419 | ,0x711 => 36 |
| 2420 | ,0xC55 => 84 |
| 2421 | ,0xC56 => 91 |
| 2422 | ,0xE38 => 103 |
| 2423 | ,0xE39 => 103 |
| 2424 | ,0xE48 => 107 |
| 2425 | ,0xE49 => 107 |
| 2426 | ,0xE4A => 107 |
| 2427 | ,0xE4B => 107 |
| 2428 | ,0xEB8 => 118 |
| 2429 | ,0xEB9 => 118 |
| 2430 | ,0xEC8 => 122 |
| 2431 | ,0xEC9 => 122 |
| 2432 | ,0xECA => 122 |
| 2433 | ,0xECB => 122 |
| 2434 | ,0xF71 => 129 |
| 2435 | ,0xF72 => 130 |
| 2436 | ,0xF7A => 130 |
| 2437 | ,0xF7B => 130 |
| 2438 | ,0xF7C => 130 |
| 2439 | ,0xF7D => 130 |
| 2440 | ,0xF80 => 130 |
| 2441 | ,0xF74 => 132 |
| 2442 | ,0x321 => 202 |
| 2443 | ,0x322 => 202 |
| 2444 | ,0x327 => 202 |
| 2445 | ,0x328 => 202 |
| 2446 | ,0x31B => 216 |
| 2447 | ,0xF39 => 216 |
| 2448 | ,0x1D165 => 216 |
| 2449 | ,0x1D166 => 216 |
| 2450 | ,0x1D16E => 216 |
| 2451 | ,0x1D16F => 216 |
| 2452 | ,0x1D170 => 216 |
| 2453 | ,0x1D171 => 216 |
| 2454 | ,0x1D172 => 216 |
| 2455 | ,0x302A => 218 |
| 2456 | ,0x316 => 220 |
| 2457 | ,0x317 => 220 |
| 2458 | ,0x318 => 220 |
| 2459 | ,0x319 => 220 |
| 2460 | ,0x31C => 220 |
| 2461 | ,0x31D => 220 |
| 2462 | ,0x31E => 220 |
| 2463 | ,0x31F => 220 |
| 2464 | ,0x320 => 220 |
| 2465 | ,0x323 => 220 |
| 2466 | ,0x324 => 220 |
| 2467 | ,0x325 => 220 |
| 2468 | ,0x326 => 220 |
| 2469 | ,0x329 => 220 |
| 2470 | ,0x32A => 220 |
| 2471 | ,0x32B => 220 |
| 2472 | ,0x32C => 220 |
| 2473 | ,0x32D => 220 |
| 2474 | ,0x32E => 220 |
| 2475 | ,0x32F => 220 |
| 2476 | ,0x330 => 220 |
| 2477 | ,0x331 => 220 |
| 2478 | ,0x332 => 220 |
| 2479 | ,0x333 => 220 |
| 2480 | ,0x339 => 220 |
| 2481 | ,0x33A => 220 |
| 2482 | ,0x33B => 220 |
| 2483 | ,0x33C => 220 |
| 2484 | ,0x347 => 220 |
| 2485 | ,0x348 => 220 |
| 2486 | ,0x349 => 220 |
| 2487 | ,0x34D => 220 |
| 2488 | ,0x34E => 220 |
| 2489 | ,0x353 => 220 |
| 2490 | ,0x354 => 220 |
| 2491 | ,0x355 => 220 |
| 2492 | ,0x356 => 220 |
| 2493 | ,0x591 => 220 |
| 2494 | ,0x596 => 220 |
| 2495 | ,0x59B => 220 |
| 2496 | ,0x5A3 => 220 |
| 2497 | ,0x5A4 => 220 |
| 2498 | ,0x5A5 => 220 |
| 2499 | ,0x5A6 => 220 |
| 2500 | ,0x5A7 => 220 |
| 2501 | ,0x5AA => 220 |
| 2502 | ,0x655 => 220 |
| 2503 | ,0x656 => 220 |
| 2504 | ,0x6E3 => 220 |
| 2505 | ,0x6EA => 220 |
| 2506 | ,0x6ED => 220 |
| 2507 | ,0x731 => 220 |
| 2508 | ,0x734 => 220 |
| 2509 | ,0x737 => 220 |
| 2510 | ,0x738 => 220 |
| 2511 | ,0x739 => 220 |
| 2512 | ,0x73B => 220 |
| 2513 | ,0x73C => 220 |
| 2514 | ,0x73E => 220 |
| 2515 | ,0x742 => 220 |
| 2516 | ,0x744 => 220 |
| 2517 | ,0x746 => 220 |
| 2518 | ,0x748 => 220 |
| 2519 | ,0x952 => 220 |
| 2520 | ,0xF18 => 220 |
| 2521 | ,0xF19 => 220 |
| 2522 | ,0xF35 => 220 |
| 2523 | ,0xF37 => 220 |
| 2524 | ,0xFC6 => 220 |
| 2525 | ,0x193B => 220 |
| 2526 | ,0x20E8 => 220 |
| 2527 | ,0x1D17B => 220 |
| 2528 | ,0x1D17C => 220 |
| 2529 | ,0x1D17D => 220 |
| 2530 | ,0x1D17E => 220 |
| 2531 | ,0x1D17F => 220 |
| 2532 | ,0x1D180 => 220 |
| 2533 | ,0x1D181 => 220 |
| 2534 | ,0x1D182 => 220 |
| 2535 | ,0x1D18A => 220 |
| 2536 | ,0x1D18B => 220 |
| 2537 | ,0x59A => 222 |
| 2538 | ,0x5AD => 222 |
| 2539 | ,0x1929 => 222 |
| 2540 | ,0x302D => 222 |
| 2541 | ,0x302E => 224 |
| 2542 | ,0x302F => 224 |
| 2543 | ,0x1D16D => 226 |
| 2544 | ,0x5AE => 228 |
| 2545 | ,0x18A9 => 228 |
| 2546 | ,0x302B => 228 |
| 2547 | ,0x300 => 230 |
| 2548 | ,0x301 => 230 |
| 2549 | ,0x302 => 230 |
| 2550 | ,0x303 => 230 |
| 2551 | ,0x304 => 230 |
| 2552 | ,0x305 => 230 |
| 2553 | ,0x306 => 230 |
| 2554 | ,0x307 => 230 |
| 2555 | ,0x308 => 230 |
| 2556 | ,0x309 => 230 |
| 2557 | ,0x30A => 230 |
| 2558 | ,0x30B => 230 |
| 2559 | ,0x30C => 230 |
| 2560 | ,0x30D => 230 |
| 2561 | ,0x30E => 230 |
| 2562 | ,0x30F => 230 |
| 2563 | ,0x310 => 230 |
| 2564 | ,0x311 => 230 |
| 2565 | ,0x312 => 230 |
| 2566 | ,0x313 => 230 |
| 2567 | ,0x314 => 230 |
| 2568 | ,0x33D => 230 |
| 2569 | ,0x33E => 230 |
| 2570 | ,0x33F => 230 |
| 2571 | ,0x340 => 230 |
| 2572 | ,0x341 => 230 |
| 2573 | ,0x342 => 230 |
| 2574 | ,0x343 => 230 |
| 2575 | ,0x344 => 230 |
| 2576 | ,0x346 => 230 |
| 2577 | ,0x34A => 230 |
| 2578 | ,0x34B => 230 |
| 2579 | ,0x34C => 230 |
| 2580 | ,0x350 => 230 |
| 2581 | ,0x351 => 230 |
| 2582 | ,0x352 => 230 |
| 2583 | ,0x357 => 230 |
| 2584 | ,0x363 => 230 |
| 2585 | ,0x364 => 230 |
| 2586 | ,0x365 => 230 |
| 2587 | ,0x366 => 230 |
| 2588 | ,0x367 => 230 |
| 2589 | ,0x368 => 230 |
| 2590 | ,0x369 => 230 |
| 2591 | ,0x36A => 230 |
| 2592 | ,0x36B => 230 |
| 2593 | ,0x36C => 230 |
| 2594 | ,0x36D => 230 |
| 2595 | ,0x36E => 230 |
| 2596 | ,0x36F => 230 |
| 2597 | ,0x483 => 230 |
| 2598 | ,0x484 => 230 |
| 2599 | ,0x485 => 230 |
| 2600 | ,0x486 => 230 |
| 2601 | ,0x592 => 230 |
| 2602 | ,0x593 => 230 |
| 2603 | ,0x594 => 230 |
| 2604 | ,0x595 => 230 |
| 2605 | ,0x597 => 230 |
| 2606 | ,0x598 => 230 |
| 2607 | ,0x599 => 230 |
| 2608 | ,0x59C => 230 |
| 2609 | ,0x59D => 230 |
| 2610 | ,0x59E => 230 |
| 2611 | ,0x59F => 230 |
| 2612 | ,0x5A0 => 230 |
| 2613 | ,0x5A1 => 230 |
| 2614 | ,0x5A8 => 230 |
| 2615 | ,0x5A9 => 230 |
| 2616 | ,0x5AB => 230 |
| 2617 | ,0x5AC => 230 |
| 2618 | ,0x5AF => 230 |
| 2619 | ,0x5C4 => 230 |
| 2620 | ,0x610 => 230 |
| 2621 | ,0x611 => 230 |
| 2622 | ,0x612 => 230 |
| 2623 | ,0x613 => 230 |
| 2624 | ,0x614 => 230 |
| 2625 | ,0x615 => 230 |
| 2626 | ,0x653 => 230 |
| 2627 | ,0x654 => 230 |
| 2628 | ,0x657 => 230 |
| 2629 | ,0x658 => 230 |
| 2630 | ,0x6D6 => 230 |
| 2631 | ,0x6D7 => 230 |
| 2632 | ,0x6D8 => 230 |
| 2633 | ,0x6D9 => 230 |
| 2634 | ,0x6DA => 230 |
| 2635 | ,0x6DB => 230 |
| 2636 | ,0x6DC => 230 |
| 2637 | ,0x6DF => 230 |
| 2638 | ,0x6E0 => 230 |
| 2639 | ,0x6E1 => 230 |
| 2640 | ,0x6E2 => 230 |
| 2641 | ,0x6E4 => 230 |
| 2642 | ,0x6E7 => 230 |
| 2643 | ,0x6E8 => 230 |
| 2644 | ,0x6EB => 230 |
| 2645 | ,0x6EC => 230 |
| 2646 | ,0x730 => 230 |
| 2647 | ,0x732 => 230 |
| 2648 | ,0x733 => 230 |
| 2649 | ,0x735 => 230 |
| 2650 | ,0x736 => 230 |
| 2651 | ,0x73A => 230 |
| 2652 | ,0x73D => 230 |
| 2653 | ,0x73F => 230 |
| 2654 | ,0x740 => 230 |
| 2655 | ,0x741 => 230 |
| 2656 | ,0x743 => 230 |
| 2657 | ,0x745 => 230 |
| 2658 | ,0x747 => 230 |
| 2659 | ,0x749 => 230 |
| 2660 | ,0x74A => 230 |
| 2661 | ,0x951 => 230 |
| 2662 | ,0x953 => 230 |
| 2663 | ,0x954 => 230 |
| 2664 | ,0xF82 => 230 |
| 2665 | ,0xF83 => 230 |
| 2666 | ,0xF86 => 230 |
| 2667 | ,0xF87 => 230 |
| 2668 | ,0x170D => 230 |
| 2669 | ,0x193A => 230 |
| 2670 | ,0x20D0 => 230 |
| 2671 | ,0x20D1 => 230 |
| 2672 | ,0x20D4 => 230 |
| 2673 | ,0x20D5 => 230 |
| 2674 | ,0x20D6 => 230 |
| 2675 | ,0x20D7 => 230 |
| 2676 | ,0x20DB => 230 |
| 2677 | ,0x20DC => 230 |
| 2678 | ,0x20E1 => 230 |
| 2679 | ,0x20E7 => 230 |
| 2680 | ,0x20E9 => 230 |
| 2681 | ,0xFE20 => 230 |
| 2682 | ,0xFE21 => 230 |
| 2683 | ,0xFE22 => 230 |
| 2684 | ,0xFE23 => 230 |
| 2685 | ,0x1D185 => 230 |
| 2686 | ,0x1D186 => 230 |
| 2687 | ,0x1D187 => 230 |
| 2688 | ,0x1D189 => 230 |
| 2689 | ,0x1D188 => 230 |
| 2690 | ,0x1D1AA => 230 |
| 2691 | ,0x1D1AB => 230 |
| 2692 | ,0x1D1AC => 230 |
| 2693 | ,0x1D1AD => 230 |
| 2694 | ,0x315 => 232 |
| 2695 | ,0x31A => 232 |
| 2696 | ,0x302C => 232 |
| 2697 | ,0x35F => 233 |
| 2698 | ,0x362 => 233 |
| 2699 | ,0x35D => 234 |
| 2700 | ,0x35E => 234 |
| 2701 | ,0x360 => 234 |
| 2702 | ,0x361 => 234 |
| 2703 | ,0x345 => 240 |
| 2704 | ) |
| 2705 | ); |
| 2706 | } |
| 2707 | ?> |