11c6adce8SGreg Roach<?php 21c6adce8SGreg Roach 31c6adce8SGreg Roach/** 41c6adce8SGreg Roach * webtrees: online genealogy 5*d11be702SGreg Roach * Copyright (C) 2023 webtrees development team 61c6adce8SGreg Roach * This program is free software: you can redistribute it and/or modify 71c6adce8SGreg Roach * it under the terms of the GNU General Public License as published by 81c6adce8SGreg Roach * the Free Software Foundation, either version 3 of the License, or 91c6adce8SGreg Roach * (at your option) any later version. 101c6adce8SGreg Roach * This program is distributed in the hope that it will be useful, 111c6adce8SGreg Roach * but WITHOUT ANY WARRANTY; without even the implied warranty of 121c6adce8SGreg Roach * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 131c6adce8SGreg Roach * GNU General Public License for more details. 141c6adce8SGreg Roach * You should have received a copy of the GNU General Public License 151c6adce8SGreg Roach * along with this program. If not, see <https://www.gnu.org/licenses/>. 161c6adce8SGreg Roach */ 171c6adce8SGreg Roach 181c6adce8SGreg Roachdeclare(strict_types=1); 191c6adce8SGreg Roach 201c6adce8SGreg Roachnamespace Fisharebest\Webtrees\Encodings; 211c6adce8SGreg Roach 221c6adce8SGreg Roachuse InvalidArgumentException; 231c6adce8SGreg Roach 241c6adce8SGreg Roachuse function chr; 251c6adce8SGreg Roachuse function mb_substitute_character; 261c6adce8SGreg Roach 271c6adce8SGreg Roach/** 281c6adce8SGreg Roach * Convert between (potentially invalid) UTF-8 and UTF-8. 291c6adce8SGreg Roach */ 301c6adce8SGreg Roachclass UTF8 extends AbstractEncoding 311c6adce8SGreg Roach{ 321c6adce8SGreg Roach public const NAME = 'UTF-8'; 331c6adce8SGreg Roach 341c6adce8SGreg Roach public const START_OF_STRING = "\u{0098}"; 351c6adce8SGreg Roach public const STRING_TERMINATOR = "\u{009C}"; 361c6adce8SGreg Roach public const NO_BREAK_SPACE = "\u{00A0}"; 371c6adce8SGreg Roach public const INVERTED_EXCLAMATION_MARK = "\u{00A1}"; 381c6adce8SGreg Roach public const CENT_SIGN = "\u{00A2}"; 391c6adce8SGreg Roach public const POUND_SIGN = "\u{00A3}"; 401c6adce8SGreg Roach public const CURRENCY_SIGN = "\u{00A4}"; 411c6adce8SGreg Roach public const YEN_SIGN = "\u{00A5}"; 421c6adce8SGreg Roach public const BROKEN_BAR = "\u{00A6}"; 431c6adce8SGreg Roach public const SECTION_SIGN = "\u{00A7}"; 441c6adce8SGreg Roach public const DIAERESIS = "\u{00A8}"; 451c6adce8SGreg Roach public const COPYRIGHT_SIGN = "\u{00A9}"; 461c6adce8SGreg Roach public const FEMININE_ORDINAL_INDICATOR = "\u{00AA}"; 471c6adce8SGreg Roach public const LEFT_POINTING_DOUBLE_ANGLE_QUOTATION_MARK = "\u{00AB}"; 481c6adce8SGreg Roach public const NOT_SIGN = "\u{00AC}"; 491c6adce8SGreg Roach public const SOFT_HYPHEN = "\u{00AD}"; 501c6adce8SGreg Roach public const REGISTERED_SIGN = "\u{00AE}"; 511c6adce8SGreg Roach public const MACRON = "\u{00AF}"; 521c6adce8SGreg Roach public const DEGREE_SIGN = "\u{00B0}"; 531c6adce8SGreg Roach public const PLUS_MINUS_SIGN = "\u{00B1}"; 541c6adce8SGreg Roach public const SUPERSCRIPT_TWO = "\u{00B2}"; 551c6adce8SGreg Roach public const SUPERSCRIPT_THREE = "\u{00B3}"; 561c6adce8SGreg Roach public const ACUTE_ACCENT = "\u{00B4}"; 571c6adce8SGreg Roach public const MICRO_SIGN = "\u{00B5}"; 581c6adce8SGreg Roach public const PILCROW_SIGN = "\u{00B6}"; 591c6adce8SGreg Roach public const MIDDLE_DOT = "\u{00B7}"; 601c6adce8SGreg Roach public const CEDILLA = "\u{00B8}"; 611c6adce8SGreg Roach public const SUPERSCRIPT_ONE = "\u{00B9}"; 621c6adce8SGreg Roach public const MASCULINE_ORDINAL_INDICATOR = "\u{00BA}"; 631c6adce8SGreg Roach public const RIGHT_POINTING_DOUBLE_ANGLE_QUOTATION_MARK = "\u{00BB}"; 641c6adce8SGreg Roach public const VULGAR_FRACTION_ONE_QUARTER = "\u{00BC}"; 651c6adce8SGreg Roach public const VULGAR_FRACTION_ONE_HALF = "\u{00BD}"; 661c6adce8SGreg Roach public const VULGAR_FRACTION_THREE_QUARTERS = "\u{00BE}"; 671c6adce8SGreg Roach public const INVERTED_QUESTION_MARK = "\u{00BF}"; 681c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_A_WITH_GRAVE = "\u{00C0}"; 691c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_A_WITH_ACUTE = "\u{00C1}"; 701c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_A_WITH_CIRCUMFLEX = "\u{00C2}"; 711c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_A_WITH_TILDE = "\u{00C3}"; 721c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_A_WITH_DIAERESIS = "\u{00C4}"; 731c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_A_WITH_RING_ABOVE = "\u{00C5}"; 741c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_AE = "\u{00C6}"; 751c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_C_WITH_CEDILLA = "\u{00C7}"; 761c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_E_WITH_GRAVE = "\u{00C8}"; 771c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_E_WITH_ACUTE = "\u{00C9}"; 781c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_E_WITH_CIRCUMFLEX = "\u{00CA}"; 791c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_E_WITH_DIAERESIS = "\u{00CB}"; 801c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_I_WITH_GRAVE = "\u{00CC}"; 811c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_I_WITH_ACUTE = "\u{00CD}"; 821c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_I_WITH_CIRCUMFLEX = "\u{00CE}"; 831c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_I_WITH_DIAERESIS = "\u{00CF}"; 841c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_ETH = "\u{00D0}"; 851c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_N_WITH_TILDE = "\u{00D1}"; 861c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_O_WITH_GRAVE = "\u{00D2}"; 871c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_O_WITH_ACUTE = "\u{00D3}"; 881c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_O_WITH_CIRCUMFLEX = "\u{00D4}"; 891c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_O_WITH_TILDE = "\u{00D5}"; 901c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_O_WITH_DIAERESIS = "\u{00D6}"; 911c6adce8SGreg Roach public const MULTIPLICATION_SIGN = "\u{00D7}"; 921c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_O_WITH_STROKE = "\u{00D8}"; 931c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_U_WITH_GRAVE = "\u{00D9}"; 941c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_U_WITH_ACUTE = "\u{00DA}"; 951c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_U_WITH_CIRCUMFLEX = "\u{00DB}"; 961c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_U_WITH_DIAERESIS = "\u{00DC}"; 971c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_Y_WITH_ACUTE = "\u{00DD}"; 981c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_THORN = "\u{00DE}"; 991c6adce8SGreg Roach public const LATIN_SMALL_LETTER_SHARP_S = "\u{00DF}"; 1001c6adce8SGreg Roach public const LATIN_SMALL_LETTER_A_WITH_GRAVE = "\u{00E0}"; 1011c6adce8SGreg Roach public const LATIN_SMALL_LETTER_A_WITH_ACUTE = "\u{00E1}"; 1021c6adce8SGreg Roach public const LATIN_SMALL_LETTER_A_WITH_CIRCUMFLEX = "\u{00E2}"; 1031c6adce8SGreg Roach public const LATIN_SMALL_LETTER_A_WITH_TILDE = "\u{00E3}"; 1041c6adce8SGreg Roach public const LATIN_SMALL_LETTER_A_WITH_DIAERESIS = "\u{00E4}"; 1051c6adce8SGreg Roach public const LATIN_SMALL_LETTER_A_WITH_RING_ABOVE = "\u{00E5}"; 1061c6adce8SGreg Roach public const LATIN_SMALL_LETTER_AE = "\u{00E6}"; 1071c6adce8SGreg Roach public const LATIN_SMALL_LETTER_C_WITH_CEDILLA = "\u{00E7}"; 1081c6adce8SGreg Roach public const LATIN_SMALL_LETTER_E_WITH_GRAVE = "\u{00E8}"; 1091c6adce8SGreg Roach public const LATIN_SMALL_LETTER_E_WITH_ACUTE = "\u{00E9}"; 1101c6adce8SGreg Roach public const LATIN_SMALL_LETTER_E_WITH_CIRCUMFLEX = "\u{00EA}"; 1111c6adce8SGreg Roach public const LATIN_SMALL_LETTER_E_WITH_DIAERESIS = "\u{00EB}"; 1121c6adce8SGreg Roach public const LATIN_SMALL_LETTER_I_WITH_GRAVE = "\u{00EC}"; 1131c6adce8SGreg Roach public const LATIN_SMALL_LETTER_I_WITH_ACUTE = "\u{00ED}"; 1141c6adce8SGreg Roach public const LATIN_SMALL_LETTER_I_WITH_CIRCUMFLEX = "\u{00EE}"; 1151c6adce8SGreg Roach public const LATIN_SMALL_LETTER_I_WITH_DIAERESIS = "\u{00EF}"; 1161c6adce8SGreg Roach public const LATIN_SMALL_LETTER_ETH = "\u{00F0}"; 1171c6adce8SGreg Roach public const LATIN_SMALL_LETTER_N_WITH_TILDE = "\u{00F1}"; 1181c6adce8SGreg Roach public const LATIN_SMALL_LETTER_O_WITH_GRAVE = "\u{00F2}"; 1191c6adce8SGreg Roach public const LATIN_SMALL_LETTER_O_WITH_ACUTE = "\u{00F3}"; 1201c6adce8SGreg Roach public const LATIN_SMALL_LETTER_O_WITH_CIRCUMFLEX = "\u{00F4}"; 1211c6adce8SGreg Roach public const LATIN_SMALL_LETTER_O_WITH_TILDE = "\u{00F5}"; 1221c6adce8SGreg Roach public const LATIN_SMALL_LETTER_O_WITH_DIAERESIS = "\u{00F6}"; 1231c6adce8SGreg Roach public const DIVISION_SIGN = "\u{00F7}"; 1241c6adce8SGreg Roach public const LATIN_SMALL_LETTER_O_WITH_STROKE = "\u{00F8}"; 1251c6adce8SGreg Roach public const LATIN_SMALL_LETTER_U_WITH_GRAVE = "\u{00F9}"; 1261c6adce8SGreg Roach public const LATIN_SMALL_LETTER_U_WITH_ACUTE = "\u{00FA}"; 1271c6adce8SGreg Roach public const LATIN_SMALL_LETTER_U_WITH_CIRCUMFLEX = "\u{00FB}"; 1281c6adce8SGreg Roach public const LATIN_SMALL_LETTER_U_WITH_DIAERESIS = "\u{00FC}"; 1291c6adce8SGreg Roach public const LATIN_SMALL_LETTER_Y_WITH_ACUTE = "\u{00FD}"; 1301c6adce8SGreg Roach public const LATIN_SMALL_LETTER_THORN = "\u{00FE}"; 1311c6adce8SGreg Roach public const LATIN_SMALL_LETTER_Y_WITH_DIAERESIS = "\u{00FF}"; 1321c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_A_WITH_MACRON = "\u{0100}"; 1331c6adce8SGreg Roach public const LATIN_SMALL_LETTER_A_WITH_MACRON = "\u{0101}"; 1341c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_A_WITH_BREVE = "\u{0102}"; 1351c6adce8SGreg Roach public const LATIN_SMALL_LETTER_A_WITH_BREVE = "\u{0103}"; 1361c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_A_WITH_OGONEK = "\u{0104}"; 1371c6adce8SGreg Roach public const LATIN_SMALL_LETTER_A_WITH_OGONEK = "\u{0105}"; 1381c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_C_WITH_ACUTE = "\u{0106}"; 1391c6adce8SGreg Roach public const LATIN_SMALL_LETTER_C_WITH_ACUTE = "\u{0107}"; 1401c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_C_WITH_CIRCUMFLEX = "\u{0108}"; 1411c6adce8SGreg Roach public const LATIN_SMALL_LETTER_C_WITH_CIRCUMFLEX = "\u{0109}"; 1421c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_C_WITH_DOT_ABOVE = "\u{010A}"; 1431c6adce8SGreg Roach public const LATIN_SMALL_LETTER_C_WITH_DOT_ABOVE = "\u{010B}"; 1441c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_C_WITH_CARON = "\u{010C}"; 1451c6adce8SGreg Roach public const LATIN_SMALL_LETTER_C_WITH_CARON = "\u{010D}"; 1461c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_D_WITH_CARON = "\u{010E}"; 1471c6adce8SGreg Roach public const LATIN_SMALL_LETTER_D_WITH_CARON = "\u{010F}"; 1481c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_D_WITH_STROKE = "\u{0110}"; 1491c6adce8SGreg Roach public const LATIN_SMALL_LETTER_D_WITH_STROKE = "\u{0111}"; 1501c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_E_WITH_MACRON = "\u{0112}"; 1511c6adce8SGreg Roach public const LATIN_SMALL_LETTER_E_WITH_MACRON = "\u{0113}"; 1521c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_E_WITH_BREVE = "\u{0114}"; 1531c6adce8SGreg Roach public const LATIN_SMALL_LETTER_E_WITH_BREVE = "\u{0115}"; 1541c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_E_WITH_DOT_ABOVE = "\u{0116}"; 1551c6adce8SGreg Roach public const LATIN_SMALL_LETTER_E_WITH_DOT_ABOVE = "\u{0117}"; 1561c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_E_WITH_OGONEK = "\u{0118}"; 1571c6adce8SGreg Roach public const LATIN_SMALL_LETTER_E_WITH_OGONEK = "\u{0119}"; 1581c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_E_WITH_CARON = "\u{011A}"; 1591c6adce8SGreg Roach public const LATIN_SMALL_LETTER_E_WITH_CARON = "\u{011B}"; 1601c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_G_WITH_CIRCUMFLEX = "\u{011C}"; 1611c6adce8SGreg Roach public const LATIN_SMALL_LETTER_G_WITH_CIRCUMFLEX = "\u{011D}"; 1621c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_G_WITH_BREVE = "\u{011E}"; 1631c6adce8SGreg Roach public const LATIN_SMALL_LETTER_G_WITH_BREVE = "\u{011F}"; 1641c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_G_WITH_DOT_ABOVE = "\u{0120}"; 1651c6adce8SGreg Roach public const LATIN_SMALL_LETTER_G_WITH_DOT_ABOVE = "\u{0121}"; 1661c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_G_WITH_CEDILLA = "\u{0122}"; 1671c6adce8SGreg Roach public const LATIN_SMALL_LETTER_G_WITH_CEDILLA = "\u{0123}"; 1681c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_H_WITH_CIRCUMFLEX = "\u{0124}"; 1691c6adce8SGreg Roach public const LATIN_SMALL_LETTER_H_WITH_CIRCUMFLEX = "\u{0125}"; 1701c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_H_WITH_STROKE = "\u{0126}"; 1711c6adce8SGreg Roach public const LATIN_SMALL_LETTER_H_WITH_STROKE = "\u{0127}"; 1721c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_I_WITH_TILDE = "\u{0128}"; 1731c6adce8SGreg Roach public const LATIN_SMALL_LETTER_I_WITH_TILDE = "\u{0129}"; 1741c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_I_WITH_MACRON = "\u{012A}"; 1751c6adce8SGreg Roach public const LATIN_SMALL_LETTER_I_WITH_MACRON = "\u{012B}"; 1761c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_I_WITH_BREVE = "\u{012C}"; 1771c6adce8SGreg Roach public const LATIN_SMALL_LETTER_I_WITH_BREVE = "\u{012D}"; 1781c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_I_WITH_OGONEK = "\u{012E}"; 1791c6adce8SGreg Roach public const LATIN_SMALL_LETTER_I_WITH_OGONEK = "\u{012F}"; 1801c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_I_WITH_DOT_ABOVE = "\u{0130}"; 1811c6adce8SGreg Roach public const LATIN_SMALL_LETTER_DOTLESS_I = "\u{0131}"; 1821c6adce8SGreg Roach public const LATIN_CAPITAL_LIGATURE_IJ = "\u{0132}"; 1831c6adce8SGreg Roach public const LATIN_SMALL_LIGATURE_IJ = "\u{0133}"; 1841c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_J_WITH_CIRCUMFLEX = "\u{0134}"; 1851c6adce8SGreg Roach public const LATIN_SMALL_LETTER_J_WITH_CIRCUMFLEX = "\u{0135}"; 1861c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_K_WITH_CEDILLA = "\u{0136}"; 1871c6adce8SGreg Roach public const LATIN_SMALL_LETTER_K_WITH_CEDILLA = "\u{0137}"; 1881c6adce8SGreg Roach public const LATIN_SMALL_LETTER_KRA = "\u{0138}"; 1891c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_L_WITH_ACUTE = "\u{0139}"; 1901c6adce8SGreg Roach public const LATIN_SMALL_LETTER_L_WITH_ACUTE = "\u{013A}"; 1911c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_L_WITH_CEDILLA = "\u{013B}"; 1921c6adce8SGreg Roach public const LATIN_SMALL_LETTER_L_WITH_CEDILLA = "\u{013C}"; 1931c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_L_WITH_CARON = "\u{013D}"; 1941c6adce8SGreg Roach public const LATIN_SMALL_LETTER_L_WITH_CARON = "\u{013E}"; 1951c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_L_WITH_MIDDLE_DOT = "\u{013F}"; 1961c6adce8SGreg Roach public const LATIN_SMALL_LETTER_L_WITH_MIDDLE_DOT = "\u{0140}"; 1971c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_L_WITH_STROKE = "\u{0141}"; 1981c6adce8SGreg Roach public const LATIN_SMALL_LETTER_L_WITH_STROKE = "\u{0142}"; 1991c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_N_WITH_ACUTE = "\u{0143}"; 2001c6adce8SGreg Roach public const LATIN_SMALL_LETTER_N_WITH_ACUTE = "\u{0144}"; 2011c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_N_WITH_CEDILLA = "\u{0145}"; 2021c6adce8SGreg Roach public const LATIN_SMALL_LETTER_N_WITH_CEDILLA = "\u{0146}"; 2031c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_N_WITH_CARON = "\u{0147}"; 2041c6adce8SGreg Roach public const LATIN_SMALL_LETTER_N_WITH_CARON = "\u{0148}"; 2051c6adce8SGreg Roach public const LATIN_SMALL_LETTER_N_PRECEDED_BY_APOSTROPHE = "\u{0149}"; 2061c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_ENG = "\u{014A}"; 2071c6adce8SGreg Roach public const LATIN_SMALL_LETTER_ENG = "\u{014B}"; 2081c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_O_WITH_MACRON = "\u{014C}"; 2091c6adce8SGreg Roach public const LATIN_SMALL_LETTER_O_WITH_MACRON = "\u{014D}"; 2101c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_O_WITH_BREVE = "\u{014E}"; 2111c6adce8SGreg Roach public const LATIN_SMALL_LETTER_O_WITH_BREVE = "\u{014F}"; 2121c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_O_WITH_DOUBLE_ACUTE = "\u{0150}"; 2131c6adce8SGreg Roach public const LATIN_SMALL_LETTER_O_WITH_DOUBLE_ACUTE = "\u{0151}"; 2141c6adce8SGreg Roach public const LATIN_CAPITAL_LIGATURE_OE = "\u{0152}"; 2151c6adce8SGreg Roach public const LATIN_SMALL_LIGATURE_OE = "\u{0153}"; 2161c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_R_WITH_ACUTE = "\u{0154}"; 2171c6adce8SGreg Roach public const LATIN_SMALL_LETTER_R_WITH_ACUTE = "\u{0155}"; 2181c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_R_WITH_CEDILLA = "\u{0156}"; 2191c6adce8SGreg Roach public const LATIN_SMALL_LETTER_R_WITH_CEDILLA = "\u{0157}"; 2201c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_R_WITH_CARON = "\u{0158}"; 2211c6adce8SGreg Roach public const LATIN_SMALL_LETTER_R_WITH_CARON = "\u{0159}"; 2221c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_S_WITH_ACUTE = "\u{015A}"; 2231c6adce8SGreg Roach public const LATIN_SMALL_LETTER_S_WITH_ACUTE = "\u{015B}"; 2241c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_S_WITH_CIRCUMFLEX = "\u{015C}"; 2251c6adce8SGreg Roach public const LATIN_SMALL_LETTER_S_WITH_CIRCUMFLEX = "\u{015D}"; 2261c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_S_WITH_CEDILLA = "\u{015E}"; 2271c6adce8SGreg Roach public const LATIN_SMALL_LETTER_S_WITH_CEDILLA = "\u{015F}"; 2281c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_S_WITH_CARON = "\u{0160}"; 2291c6adce8SGreg Roach public const LATIN_SMALL_LETTER_S_WITH_CARON = "\u{0161}"; 2301c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_T_WITH_CEDILLA = "\u{0162}"; 2311c6adce8SGreg Roach public const LATIN_SMALL_LETTER_T_WITH_CEDILLA = "\u{0163}"; 2321c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_T_WITH_CARON = "\u{0164}"; 2331c6adce8SGreg Roach public const LATIN_SMALL_LETTER_T_WITH_CARON = "\u{0165}"; 2341c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_T_WITH_STROKE = "\u{0166}"; 2351c6adce8SGreg Roach public const LATIN_SMALL_LETTER_T_WITH_STROKE = "\u{0167}"; 2361c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_U_WITH_TILDE = "\u{0168}"; 2371c6adce8SGreg Roach public const LATIN_SMALL_LETTER_U_WITH_TILDE = "\u{0169}"; 2381c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_U_WITH_MACRON = "\u{016A}"; 2391c6adce8SGreg Roach public const LATIN_SMALL_LETTER_U_WITH_MACRON = "\u{016B}"; 2401c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_U_WITH_BREVE = "\u{016C}"; 2411c6adce8SGreg Roach public const LATIN_SMALL_LETTER_U_WITH_BREVE = "\u{016D}"; 2421c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_U_WITH_RING_ABOVE = "\u{016E}"; 2431c6adce8SGreg Roach public const LATIN_SMALL_LETTER_U_WITH_RING_ABOVE = "\u{016F}"; 2441c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_U_WITH_DOUBLE_ACUTE = "\u{0170}"; 2451c6adce8SGreg Roach public const LATIN_SMALL_LETTER_U_WITH_DOUBLE_ACUTE = "\u{0171}"; 2461c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_U_WITH_OGONEK = "\u{0172}"; 2471c6adce8SGreg Roach public const LATIN_SMALL_LETTER_U_WITH_OGONEK = "\u{0173}"; 2481c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_W_WITH_CIRCUMFLEX = "\u{0174}"; 2491c6adce8SGreg Roach public const LATIN_SMALL_LETTER_W_WITH_CIRCUMFLEX = "\u{0175}"; 2501c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_Y_WITH_CIRCUMFLEX = "\u{0176}"; 2511c6adce8SGreg Roach public const LATIN_SMALL_LETTER_Y_WITH_CIRCUMFLEX = "\u{0177}"; 2521c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_Y_WITH_DIAERESIS = "\u{0178}"; 2531c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_Z_WITH_ACUTE = "\u{0179}"; 2541c6adce8SGreg Roach public const LATIN_SMALL_LETTER_Z_WITH_ACUTE = "\u{017A}"; 2551c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_Z_WITH_DOT_ABOVE = "\u{017B}"; 2561c6adce8SGreg Roach public const LATIN_SMALL_LETTER_Z_WITH_DOT_ABOVE = "\u{017C}"; 2571c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_Z_WITH_CARON = "\u{017D}"; 2581c6adce8SGreg Roach public const LATIN_SMALL_LETTER_Z_WITH_CARON = "\u{017E}"; 2591c6adce8SGreg Roach public const LATIN_SMALL_LETTER_LONG_S = "\u{017F}"; 2601c6adce8SGreg Roach public const LATIN_SMALL_LETTER_B_WITH_STROKE = "\u{0180}"; 2611c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_B_WITH_HOOK = "\u{0181}"; 2621c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_B_WITH_TOPBAR = "\u{0182}"; 2631c6adce8SGreg Roach public const LATIN_SMALL_LETTER_B_WITH_TOPBAR = "\u{0183}"; 2641c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_F_WITH_HOOK = "\u{0191}"; 2651c6adce8SGreg Roach public const LATIN_SMALL_LETTER_F_WITH_HOOK = "\u{0192}"; 2661c6adce8SGreg Roach public const LATIN_SMALL_LETTER_O_WITH_HORN = "\u{01A1}"; 2671c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_O_WITH_HORN = "\u{01A0}"; 2681c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_U_WITH_HORN = "\u{01AF}"; 2691c6adce8SGreg Roach public const LATIN_SMALL_LETTER_U_WITH_HORN = "\u{01B0}"; 2701c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_A_WITH_CARON = "\u{01CD}"; 2711c6adce8SGreg Roach public const LATIN_SMALL_LETTER_A_WITH_CARON = "\u{01CE}"; 2721c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_I_WITH_CARON = "\u{01CF}"; 2731c6adce8SGreg Roach public const LATIN_SMALL_LETTER_I_WITH_CARON = "\u{01D0}"; 2741c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_O_WITH_CARON = "\u{01D1}"; 2751c6adce8SGreg Roach public const LATIN_SMALL_LETTER_O_WITH_CARON = "\u{01D2}"; 2761c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_U_WITH_CARON = "\u{01D3}"; 2771c6adce8SGreg Roach public const LATIN_SMALL_LETTER_U_WITH_CARON = "\u{01D4}"; 2781c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_U_WITH_DIAERESIS_AND_MACRON = "\u{01D5}"; 2791c6adce8SGreg Roach public const LATIN_SMALL_LETTER_U_WITH_DIAERESIS_AND_MACRON = "\u{01D6}"; 2801c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_U_WITH_DIAERESIS_AND_ACUTE = "\u{01D7}"; 2811c6adce8SGreg Roach public const LATIN_SMALL_LETTER_U_WITH_DIAERESIS_AND_ACUTE = "\u{01D8}"; 2821c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_U_WITH_DIAERESIS_AND_CARON = "\u{01D9}"; 2831c6adce8SGreg Roach public const LATIN_SMALL_LETTER_U_WITH_DIAERESIS_AND_CARON = "\u{01DA}"; 2841c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_U_WITH_DIAERESIS_AND_GRAVE = "\u{01DB}"; 2851c6adce8SGreg Roach public const LATIN_SMALL_LETTER_U_WITH_DIAERESIS_AND_GRAVE = "\u{01DC}"; 2861c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_A_WITH_DIAERESIS_AND_MACRON = "\u{01DE}"; 2871c6adce8SGreg Roach public const LATIN_SMALL_LETTER_A_WITH_DIAERESIS_AND_MACRON = "\u{01DF}"; 2881c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_A_WITH_DOT_ABOVE_AND_MACRON = "\u{01E0}"; 2891c6adce8SGreg Roach public const LATIN_SMALL_LETTER_A_WITH_DOT_ABOVE_AND_MACRON = "\u{01E1}"; 2901c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_AE_WITH_MACRON = "\u{01E2}"; 2911c6adce8SGreg Roach public const LATIN_SMALL_LETTER_AE_WITH_MACRON = "\u{01E3}"; 2921c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_G_WITH_CARON = "\u{01E6}"; 2931c6adce8SGreg Roach public const LATIN_SMALL_LETTER_G_WITH_CARON = "\u{01E7}"; 2941c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_K_WITH_CARON = "\u{01E8}"; 2951c6adce8SGreg Roach public const LATIN_SMALL_LETTER_K_WITH_CARON = "\u{01E9}"; 2961c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_O_WITH_OGONEK = "\u{01EA}"; 2971c6adce8SGreg Roach public const LATIN_SMALL_LETTER_O_WITH_OGONEK = "\u{01EB}"; 2981c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_O_WITH_OGONEK_AND_MACRON = "\u{01EC}"; 2991c6adce8SGreg Roach public const LATIN_SMALL_LETTER_O_WITH_OGONEK_AND_MACRON = "\u{01ED}"; 3001c6adce8SGreg Roach public const LATIN_SMALL_LETTER_J_WITH_CARON = "\u{01F0}"; 3011c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_G_WITH_ACUTE = "\u{01F4}"; 3021c6adce8SGreg Roach public const LATIN_SMALL_LETTER_G_WITH_ACUTE = "\u{01F5}"; 3031c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_N_WITH_GRAVE = "\u{01F8}"; 3041c6adce8SGreg Roach public const LATIN_SMALL_LETTER_N_WITH_GRAVE = "\u{01F9}"; 3051c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_A_WITH_RING_ABOVE_AND_ACUTE = "\u{01FA}"; 3061c6adce8SGreg Roach public const LATIN_SMALL_LETTER_A_WITH_RING_ABOVE_AND_ACUTE = "\u{01FB}"; 3071c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_AE_WITH_ACUTE = "\u{01FC}"; 3081c6adce8SGreg Roach public const LATIN_SMALL_LETTER_AE_WITH_ACUTE = "\u{01FD}"; 3091c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_O_WITH_STROKE_AND_ACUTE = "\u{01FE}"; 3101c6adce8SGreg Roach public const LATIN_SMALL_LETTER_O_WITH_STROKE_AND_ACUTE = "\u{01FF}"; 3111c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_S_WITH_COMMA_BELOW = "\u{0218}"; 3121c6adce8SGreg Roach public const LATIN_SMALL_LETTER_S_WITH_COMMA_BELOW = "\u{0219}"; 3131c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_T_WITH_COMMA_BELOW = "\u{021A}"; 3141c6adce8SGreg Roach public const LATIN_SMALL_LETTER_T_WITH_COMMA_BELOW = "\u{021B}"; 3151c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_H_WITH_CARON = "\u{021E}"; 3161c6adce8SGreg Roach public const LATIN_SMALL_LETTER_H_WITH_CARON = "\u{021F}"; 3171c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_A_WITH_DOT_ABOVE = "\u{0226}"; 3181c6adce8SGreg Roach public const LATIN_SMALL_LETTER_A_WITH_DOT_ABOVE = "\u{0227}"; 3191c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_E_WITH_CEDILLA = "\u{0228}"; 3201c6adce8SGreg Roach public const LATIN_SMALL_LETTER_E_WITH_CEDILLA = "\u{0229}"; 3211c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_O_WITH_DIAERESIS_AND_MACRON = "\u{022A}"; 3221c6adce8SGreg Roach public const LATIN_SMALL_LETTER_O_WITH_DIAERESIS_AND_MACRON = "\u{022B}"; 3231c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_O_WITH_TILDE_AND_MACRON = "\u{022C}"; 3241c6adce8SGreg Roach public const LATIN_SMALL_LETTER_O_WITH_TILDE_AND_MACRON = "\u{022D}"; 3251c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_O_WITH_DOT_ABOVE = "\u{022E}"; 3261c6adce8SGreg Roach public const LATIN_SMALL_LETTER_O_WITH_DOT_ABOVE = "\u{022F}"; 3271c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_O_WITH_DOT_ABOVE_AND_MACRON = "\u{0230}"; 3281c6adce8SGreg Roach public const LATIN_SMALL_LETTER_O_WITH_DOT_ABOVE_AND_MACRON = "\u{0231}"; 3291c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_Y_WITH_MACRON = "\u{0232}"; 3301c6adce8SGreg Roach public const LATIN_SMALL_LETTER_Y_WITH_MACRON = "\u{0233}"; 3311c6adce8SGreg Roach public const MODIFIER_LETTER_PRIME = "\u{02B9}"; 3321c6adce8SGreg Roach public const MODIFIER_LETTER_DOUBLE_PRIME = "\u{02BA}"; 3331c6adce8SGreg Roach public const MODIFIER_LETTER_TURNED_COMMA = "\u{02BB}"; 3341c6adce8SGreg Roach public const MODIFIER_LETTER_APOSTROPHE = "\u{02BC}"; 3351c6adce8SGreg Roach public const MODIFIER_LETTER_CIRCUMFLEX_ACCENT = "\u{02C6}"; 3361c6adce8SGreg Roach public const CARON = "\u{02C7}"; 3371c6adce8SGreg Roach public const BREVE = "\u{02D8}"; 3381c6adce8SGreg Roach public const DOT_ABOVE = "\u{02D9}"; 3391c6adce8SGreg Roach public const RING_ABOVE = "\u{02DA}"; 3401c6adce8SGreg Roach public const OGONEK = "\u{02DB}"; 3411c6adce8SGreg Roach public const SMALL_TILDE = "\u{02DC}"; 3421c6adce8SGreg Roach public const DOUBLE_ACUTE_ACCENT = "\u{02DD}"; 3431c6adce8SGreg Roach public const COMBINING_GRAVE_ACCENT = "\u{0300}"; 3441c6adce8SGreg Roach public const COMBINING_ACUTE_ACCENT = "\u{0301}"; 3451c6adce8SGreg Roach public const COMBINING_CIRCUMFLEX_ACCENT = "\u{0302}"; 3461c6adce8SGreg Roach public const COMBINING_TILDE = "\u{0303}"; 3471c6adce8SGreg Roach public const COMBINING_MACRON = "\u{0304}"; 3481c6adce8SGreg Roach public const COMBINING_OVERLINE = "\u{0305}"; 3491c6adce8SGreg Roach public const COMBINING_BREVE = "\u{0306}"; 3501c6adce8SGreg Roach public const COMBINING_DOT_ABOVE = "\u{0307}"; 3511c6adce8SGreg Roach public const COMBINING_DIAERESIS = "\u{0308}"; 3521c6adce8SGreg Roach public const COMBINING_HOOK_ABOVE = "\u{0309}"; 3531c6adce8SGreg Roach public const COMBINING_RING_ABOVE = "\u{030A}"; 3541c6adce8SGreg Roach public const COMBINING_DOUBLE_ACUTE_ACCENT = "\u{030B}"; 3551c6adce8SGreg Roach public const COMBINING_CARON = "\u{030C}"; 3561c6adce8SGreg Roach public const COMBINING_CANDRABINDU = "\u{0310}"; 3571c6adce8SGreg Roach public const COMBINING_COMMA_ABOVE = "\u{0313}"; 3581c6adce8SGreg Roach public const COMBINING_COMMA_ABOVE_RIGHT = "\u{0315}"; 3591c6adce8SGreg Roach public const COMBINING_HORN = "\u{031B}"; 3601c6adce8SGreg Roach public const COMBINING_LEFT_HALF_RING_BELOW = "\u{031C}"; 3611c6adce8SGreg Roach public const COMBINING_DOT_BELOW = "\u{0323}"; 3621c6adce8SGreg Roach public const COMBINING_DIAERESIS_BELOW = "\u{0324}"; 3631c6adce8SGreg Roach public const COMBINING_RING_BELOW = "\u{0325}"; 3641c6adce8SGreg Roach public const COMBINING_COMMA_BELOW = "\u{0326}"; 3651c6adce8SGreg Roach public const COMBINING_CEDILLA = "\u{0327}"; 3661c6adce8SGreg Roach public const COMBINING_OGONEK = "\u{0328}"; 3671c6adce8SGreg Roach public const COMBINING_BRIDGE_BELOW = "\u{032A}"; 3681c6adce8SGreg Roach public const COMBINING_BREVE_BELOW = "\u{032E}"; 3691c6adce8SGreg Roach public const COMBINING_LOW_LINE = "\u{0332}"; 3701c6adce8SGreg Roach public const COMBINING_DOUBLE_LOW_LINE = "\u{0333}"; 37152288ec7SGreg Roach public const COMBINING_SHORT_STROKE_OVERLAY = "\u{0335}"; 37252288ec7SGreg Roach public const COMBINING_LONG_STROKE_OVERLAY = "\u{0336}"; 37352288ec7SGreg Roach public const COMBINING_SHORT_SOLIDUS_OVERLAY = "\u{0338}"; 3741c6adce8SGreg Roach public const COMBINING_LONG_SOLIDUS_OVERLAY = "\u{0338}"; 3751c6adce8SGreg Roach public const COMBINING_DOUBLE_TILDE = "\u{0360}"; 3761c6adce8SGreg Roach public const COMBINING_DOUBLE_INVERTED_BREVE = "\u{0361}"; 3771c6adce8SGreg Roach public const GREEK_CAPITAL_LETTER_GAMMA = "\u{0393}"; 3781c6adce8SGreg Roach public const GREEK_CAPITAL_LETTER_THETA = "\u{0398}"; 3791c6adce8SGreg Roach public const GREEK_CAPITAL_LETTER_SIGMA = "\u{03A3}"; 3801c6adce8SGreg Roach public const GREEK_CAPITAL_LETTER_PHI = "\u{03A6}"; 3811c6adce8SGreg Roach public const GREEK_CAPITAL_LETTER_OMEGA = "\u{03A9}"; 3821c6adce8SGreg Roach public const GREEK_SMALL_LETTER_ALPHA = "\u{03B1}"; 3831c6adce8SGreg Roach public const GREEK_SMALL_LETTER_DELTA = "\u{03B4}"; 3841c6adce8SGreg Roach public const GREEK_SMALL_LETTER_EPSILON = "\u{03B5}"; 3851c6adce8SGreg Roach public const GREEK_SMALL_LETTER_PI = "\u{03C0}"; 3861c6adce8SGreg Roach public const GREEK_SMALL_LETTER_SIGMA = "\u{03C3}"; 3871c6adce8SGreg Roach public const GREEK_SMALL_LETTER_TAU = "\u{03C4}"; 3881c6adce8SGreg Roach public const GREEK_SMALL_LETTER_PHI = "\u{03C6}"; 3891c6adce8SGreg Roach public const CYRILLIC_CAPITAL_LETTER_IO = "\u{0401}"; 3901c6adce8SGreg Roach public const CYRILLIC_CAPITAL_LETTER_DJE = "\u{0402}"; 3911c6adce8SGreg Roach public const CYRILLIC_CAPITAL_LETTER_GJE = "\u{0403}"; 3921c6adce8SGreg Roach public const CYRILLIC_CAPITAL_LETTER_UKRANIAN_IE = "\u{0404}"; 3931c6adce8SGreg Roach public const CYRILLIC_CAPITAL_LETTER_DZE = "\u{0405}"; 3941c6adce8SGreg Roach public const CYRILLIC_CAPITAL_LETTER_BYELORUSSIAN_UKRAINIAN_I = "\u{0406}"; 3951c6adce8SGreg Roach public const CYRILLIC_CAPITAL_LETTER_YI = "\u{0407}"; 3961c6adce8SGreg Roach public const CYRILLIC_CAPITAL_LETTER_JE = "\u{0408}"; 3971c6adce8SGreg Roach public const CYRILLIC_CAPITAL_LETTER_LJE = "\u{0409}"; 3981c6adce8SGreg Roach public const CYRILLIC_CAPITAL_LETTER_NJE = "\u{040A}"; 3991c6adce8SGreg Roach public const CYRILLIC_CAPITAL_LETTER_TSHE = "\u{040B}"; 4001c6adce8SGreg Roach public const CYRILLIC_CAPITAL_LETTER_KJE = "\u{040C}"; 4011c6adce8SGreg Roach public const CYRILLIC_CAPITAL_LETTER_SHORT_U = "\u{040E}"; 4021c6adce8SGreg Roach public const CYRILLIC_CAPITAL_LETTER_DZHE = "\u{040F}"; 4031c6adce8SGreg Roach public const CYRILLIC_CAPITAL_LETTER_A = "\u{0410}"; 4041c6adce8SGreg Roach public const CYRILLIC_CAPITAL_LETTER_BE = "\u{0411}"; 4051c6adce8SGreg Roach public const CYRILLIC_CAPITAL_LETTER_VE = "\u{0412}"; 4061c6adce8SGreg Roach public const CYRILLIC_CAPITAL_LETTER_GHE = "\u{0413}"; 4071c6adce8SGreg Roach public const CYRILLIC_CAPITAL_LETTER_DE = "\u{0414}"; 4081c6adce8SGreg Roach public const CYRILLIC_CAPITAL_LETTER_IE = "\u{0415}"; 4091c6adce8SGreg Roach public const CYRILLIC_CAPITAL_LETTER_ZHE = "\u{0416}"; 4101c6adce8SGreg Roach public const CYRILLIC_CAPITAL_LETTER_ZE = "\u{0417}"; 4111c6adce8SGreg Roach public const CYRILLIC_CAPITAL_LETTER_I = "\u{0418}"; 4121c6adce8SGreg Roach public const CYRILLIC_CAPITAL_LETTER_SHORT_I = "\u{0419}"; 4131c6adce8SGreg Roach public const CYRILLIC_CAPITAL_LETTER_KA = "\u{041A}"; 4141c6adce8SGreg Roach public const CYRILLIC_CAPITAL_LETTER_EL = "\u{041B}"; 4151c6adce8SGreg Roach public const CYRILLIC_CAPITAL_LETTER_EM = "\u{041C}"; 4161c6adce8SGreg Roach public const CYRILLIC_CAPITAL_LETTER_EN = "\u{041D}"; 4171c6adce8SGreg Roach public const CYRILLIC_CAPITAL_LETTER_O = "\u{041E}"; 4181c6adce8SGreg Roach public const CYRILLIC_CAPITAL_LETTER_PE = "\u{041F}"; 4191c6adce8SGreg Roach public const CYRILLIC_CAPITAL_LETTER_ER = "\u{0420}"; 4201c6adce8SGreg Roach public const CYRILLIC_CAPITAL_LETTER_ES = "\u{0421}"; 4211c6adce8SGreg Roach public const CYRILLIC_CAPITAL_LETTER_TE = "\u{0422}"; 4221c6adce8SGreg Roach public const CYRILLIC_CAPITAL_LETTER_U = "\u{0423}"; 4231c6adce8SGreg Roach public const CYRILLIC_CAPITAL_LETTER_EF = "\u{0424}"; 4241c6adce8SGreg Roach public const CYRILLIC_CAPITAL_LETTER_HA = "\u{0425}"; 4251c6adce8SGreg Roach public const CYRILLIC_CAPITAL_LETTER_TSE = "\u{0426}"; 4261c6adce8SGreg Roach public const CYRILLIC_CAPITAL_LETTER_CHE = "\u{0427}"; 4271c6adce8SGreg Roach public const CYRILLIC_CAPITAL_LETTER_SHA = "\u{0428}"; 4281c6adce8SGreg Roach public const CYRILLIC_CAPITAL_LETTER_SHCHA = "\u{0429}"; 4291c6adce8SGreg Roach public const CYRILLIC_CAPITAL_LETTER_HARD_SIGN = "\u{042A}"; 4301c6adce8SGreg Roach public const CYRILLIC_CAPITAL_LETTER_YERU = "\u{042B}"; 4311c6adce8SGreg Roach public const CYRILLIC_CAPITAL_LETTER_SOFT_SIGN = "\u{042C}"; 4321c6adce8SGreg Roach public const CYRILLIC_CAPITAL_LETTER_E = "\u{042D}"; 4331c6adce8SGreg Roach public const CYRILLIC_CAPITAL_LETTER_YU = "\u{042E}"; 4341c6adce8SGreg Roach public const CYRILLIC_CAPITAL_LETTER_YA = "\u{042F}"; 4351c6adce8SGreg Roach public const CYRILLIC_SMALL_LETTER_A = "\u{0430}"; 4361c6adce8SGreg Roach public const CYRILLIC_SMALL_LETTER_BE = "\u{0431}"; 4371c6adce8SGreg Roach public const CYRILLIC_SMALL_LETTER_VE = "\u{0432}"; 4381c6adce8SGreg Roach public const CYRILLIC_SMALL_LETTER_GHE = "\u{0433}"; 4391c6adce8SGreg Roach public const CYRILLIC_SMALL_LETTER_DE = "\u{0434}"; 4401c6adce8SGreg Roach public const CYRILLIC_SMALL_LETTER_IE = "\u{0435}"; 4411c6adce8SGreg Roach public const CYRILLIC_SMALL_LETTER_ZHE = "\u{0436}"; 4421c6adce8SGreg Roach public const CYRILLIC_SMALL_LETTER_ZE = "\u{0437}"; 4431c6adce8SGreg Roach public const CYRILLIC_SMALL_LETTER_I = "\u{0438}"; 4441c6adce8SGreg Roach public const CYRILLIC_SMALL_LETTER_SHORT_I = "\u{0439}"; 4451c6adce8SGreg Roach public const CYRILLIC_SMALL_LETTER_KA = "\u{043A}"; 4461c6adce8SGreg Roach public const CYRILLIC_SMALL_LETTER_EL = "\u{043B}"; 4471c6adce8SGreg Roach public const CYRILLIC_SMALL_LETTER_EM = "\u{043C}"; 4481c6adce8SGreg Roach public const CYRILLIC_SMALL_LETTER_EN = "\u{043D}"; 4491c6adce8SGreg Roach public const CYRILLIC_SMALL_LETTER_O = "\u{043E}"; 4501c6adce8SGreg Roach public const CYRILLIC_SMALL_LETTER_PE = "\u{043F}"; 4511c6adce8SGreg Roach public const CYRILLIC_SMALL_LETTER_ER = "\u{0440}"; 4521c6adce8SGreg Roach public const CYRILLIC_SMALL_LETTER_ES = "\u{0441}"; 4531c6adce8SGreg Roach public const CYRILLIC_SMALL_LETTER_TE = "\u{0442}"; 4541c6adce8SGreg Roach public const CYRILLIC_SMALL_LETTER_U = "\u{0443}"; 4551c6adce8SGreg Roach public const CYRILLIC_SMALL_LETTER_EF = "\u{0444}"; 4561c6adce8SGreg Roach public const CYRILLIC_SMALL_LETTER_HA = "\u{0445}"; 4571c6adce8SGreg Roach public const CYRILLIC_SMALL_LETTER_TSE = "\u{0446}"; 4581c6adce8SGreg Roach public const CYRILLIC_SMALL_LETTER_CHE = "\u{0447}"; 4591c6adce8SGreg Roach public const CYRILLIC_SMALL_LETTER_SHA = "\u{0448}"; 4601c6adce8SGreg Roach public const CYRILLIC_SMALL_LETTER_SHCHA = "\u{0449}"; 4611c6adce8SGreg Roach public const CYRILLIC_SMALL_LETTER_HARD_SIGN = "\u{044A}"; 4621c6adce8SGreg Roach public const CYRILLIC_SMALL_LETTER_YERU = "\u{044B}"; 4631c6adce8SGreg Roach public const CYRILLIC_SMALL_LETTER_SOFT_SIGN = "\u{044C}"; 4641c6adce8SGreg Roach public const CYRILLIC_SMALL_LETTER_E = "\u{044D}"; 4651c6adce8SGreg Roach public const CYRILLIC_SMALL_LETTER_YU = "\u{044E}"; 4661c6adce8SGreg Roach public const CYRILLIC_SMALL_LETTER_YA = "\u{044F}"; 4671c6adce8SGreg Roach public const CYRILLIC_SMALL_LETTER_IO = "\u{0451}"; 4681c6adce8SGreg Roach public const CYRILLIC_SMALL_LETTER_DJE = "\u{0452}"; 4691c6adce8SGreg Roach public const CYRILLIC_SMALL_LETTER_GJE = "\u{0453}"; 4701c6adce8SGreg Roach public const CYRILLIC_SMALL_LETTER_UKRANIAN_IE = "\u{0454}"; 4711c6adce8SGreg Roach public const CYRILLIC_SMALL_LETTER_DZE = "\u{0455}"; 4721c6adce8SGreg Roach public const CYRILLIC_SMALL_LETTER_BYELORUSSIAN_UKRAINIAN_I = "\u{0456}"; 4731c6adce8SGreg Roach public const CYRILLIC_SMALL_LETTER_YI = "\u{0457}"; 4741c6adce8SGreg Roach public const CYRILLIC_SMALL_LETTER_JE = "\u{0458}"; 4751c6adce8SGreg Roach public const CYRILLIC_SMALL_LETTER_LJE = "\u{0459}"; 4761c6adce8SGreg Roach public const CYRILLIC_SMALL_LETTER_NJE = "\u{045A}"; 4771c6adce8SGreg Roach public const CYRILLIC_SMALL_LETTER_TSHE = "\u{045B}"; 4781c6adce8SGreg Roach public const CYRILLIC_SMALL_LETTER_KJE = "\u{045C}"; 4791c6adce8SGreg Roach public const CYRILLIC_SMALL_LETTER_SHORT_U = "\u{045E}"; 4801c6adce8SGreg Roach public const CYRILLIC_SMALL_LETTER_DZHE = "\u{045F}"; 4811c6adce8SGreg Roach public const CYRILLIC_CAPITAL_LETTER_GHE_WITH_UPTURN = "\u{0490}"; 4821c6adce8SGreg Roach public const CYRILLIC_SMALL_LETTER_GHE_WITH_UPTURN = "\u{0491}"; 48352288ec7SGreg Roach public const ARABIC_LETTER_HAMZA = "\u{0621}"; 48452288ec7SGreg Roach public const ARABIC_LETTER_ALEF = "\u{0627}"; 48552288ec7SGreg Roach public const ARABIC_LETTER_BEH = "\u{0628}"; 48652288ec7SGreg Roach public const ARABIC_LETTER_TEH_MARBUTA = "\u{0629}"; 48752288ec7SGreg Roach public const ARABIC_LETTER_TEH = "\u{062A}"; 48852288ec7SGreg Roach public const ARABIC_LETTER_THEH = "\u{062B}"; 48952288ec7SGreg Roach public const ARABIC_LETTER_JEEM = "\u{062C}"; 49052288ec7SGreg Roach public const ARABIC_LETTER_HAH = "\u{062D}"; 49152288ec7SGreg Roach public const ARABIC_LETTER_KHAH = "\u{062E}"; 49252288ec7SGreg Roach public const ARABIC_LETTER_DAL = "\u{062F}"; 49352288ec7SGreg Roach public const ARABIC_LETTER_THAL = "\u{0630}"; 49452288ec7SGreg Roach public const ARABIC_LETTER_REH = "\u{0631}"; 49552288ec7SGreg Roach public const ARABIC_LETTER_ZAIN = "\u{0632}"; 49652288ec7SGreg Roach public const ARABIC_LETTER_SEEN = "\u{0633}"; 49752288ec7SGreg Roach public const ARABIC_LETTER_SHEEN = "\u{0634}"; 49852288ec7SGreg Roach public const ARABIC_LETTER_SAD = "\u{0635}"; 49952288ec7SGreg Roach public const ARABIC_LETTER_DAD = "\u{0636}"; 50052288ec7SGreg Roach public const ARABIC_LETTER_TAH = "\u{0637}"; 50152288ec7SGreg Roach public const ARABIC_LETTER_ZAH = "\u{0638}"; 50252288ec7SGreg Roach public const ARABIC_LETTER_AIN = "\u{0639}"; 50352288ec7SGreg Roach public const ARABIC_LETTER_GHAIN = "\u{063A}"; 50452288ec7SGreg Roach public const ARABIC_LETTER_FEH = "\u{0641}"; 50552288ec7SGreg Roach public const ARABIC_LETTER_QAF = "\u{0642}"; 50652288ec7SGreg Roach public const ARABIC_LETTER_KAF = "\u{0643}"; 50752288ec7SGreg Roach public const ARABIC_LETTER_LAM = "\u{0644}"; 50852288ec7SGreg Roach public const ARABIC_LETTER_MEEM = "\u{0645}"; 50952288ec7SGreg Roach public const ARABIC_LETTER_NOON = "\u{0646}"; 51052288ec7SGreg Roach public const ARABIC_LETTER_HEH = "\u{0647}"; 51152288ec7SGreg Roach public const ARABIC_LETTER_WAW = "\u{0648}"; 51252288ec7SGreg Roach public const ARABIC_LETTER_ALEF_MAKSURA = "\u{0649}"; 51352288ec7SGreg Roach public const ARABIC_LETTER_YEH = "\u{064A}"; 5141c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_A_WITH_RING_BELOW = "\u{1E00}"; 5151c6adce8SGreg Roach public const LATIN_SMALL_LETTER_A_WITH_RING_BELOW = "\u{1E01}"; 5161c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_B_WITH_DOT_ABOVE = "\u{1E02}"; 5171c6adce8SGreg Roach public const LATIN_SMALL_LETTER_B_WITH_DOT_ABOVE = "\u{1E03}"; 5181c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_B_WITH_DOT_BELOW = "\u{1E04}"; 5191c6adce8SGreg Roach public const LATIN_SMALL_LETTER_B_WITH_DOT_BELOW = "\u{1E05}"; 5201c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_C_WITH_CEDILLA_AND_ACUTE = "\u{1E08}"; 5211c6adce8SGreg Roach public const LATIN_SMALL_LETTER_C_WITH_CEDILLA_AND_ACUTE = "\u{1E09}"; 5221c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_D_WITH_DOT_ABOVE = "\u{1E0A}"; 5231c6adce8SGreg Roach public const LATIN_SMALL_LETTER_D_WITH_DOT_ABOVE = "\u{1E0B}"; 5241c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_D_WITH_DOT_BELOW = "\u{1E0C}"; 5251c6adce8SGreg Roach public const LATIN_SMALL_LETTER_D_WITH_DOT_BELOW = "\u{1E0D}"; 5261c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_SHARP_S = "\u{1E9E}"; 5271c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_D_WITH_CEDILLA = "\u{1E10}"; 5281c6adce8SGreg Roach public const LATIN_SMALL_LETTER_D_WITH_CEDILLA = "\u{1E11}"; 5291c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_E_WITH_MACRON_AND_GRAVE = "\u{1E14}"; 5301c6adce8SGreg Roach public const LATIN_SMALL_LETTER_E_WITH_MACRON_AND_GRAVE = "\u{1E15}"; 5311c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_E_WITH_MACRON_AND_ACUTE = "\u{1E16}"; 5321c6adce8SGreg Roach public const LATIN_SMALL_LETTER_E_WITH_MACRON_AND_ACUTE = "\u{1E17}"; 5331c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_E_WITH_CEDILLA_AND_BREVE = "\u{1E1C}"; 5341c6adce8SGreg Roach public const LATIN_SMALL_LETTER_E_WITH_CEDILLA_AND_BREVE = "\u{1E1D}"; 5351c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_F_WITH_DOT_ABOVE = "\u{1E1E}"; 5361c6adce8SGreg Roach public const LATIN_SMALL_LETTER_F_WITH_DOT_ABOVE = "\u{1E1F}"; 5371c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_G_WITH_MACRON = "\u{1E20}"; 5381c6adce8SGreg Roach public const LATIN_SMALL_LETTER_G_WITH_MACRON = "\u{1E21}"; 5391c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_H_WITH_DOT_ABOVE = "\u{1E22}"; 5401c6adce8SGreg Roach public const LATIN_SMALL_LETTER_H_WITH_DOT_ABOVE = "\u{1E23}"; 5411c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_H_WITH_DOT_BELOW = "\u{1E24}"; 5421c6adce8SGreg Roach public const LATIN_SMALL_LETTER_H_WITH_DOT_BELOW = "\u{1E25}"; 5431c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_H_WITH_DIAERESIS = "\u{1E26}"; 5441c6adce8SGreg Roach public const LATIN_SMALL_LETTER_H_WITH_DIAERESIS = "\u{1E27}"; 5451c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_H_WITH_CEDILLA = "\u{1E28}"; 5461c6adce8SGreg Roach public const LATIN_SMALL_LETTER_H_WITH_CEDILLA = "\u{1E29}"; 5471c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_H_WITH_BREVE_BELOW = "\u{1E2A}"; 5481c6adce8SGreg Roach public const LATIN_SMALL_LETTER_H_WITH_BREVE_BELOW = "\u{1E2B}"; 5491c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_I_WITH_DIAERESIS_AND_ACUTE = "\u{1E2E}"; 5501c6adce8SGreg Roach public const LATIN_SMALL_LETTER_I_WITH_DIAERESIS_AND_ACUTE = "\u{1E2F}"; 5511c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_K_WITH_ACUTE = "\u{1E30}"; 5521c6adce8SGreg Roach public const LATIN_SMALL_LETTER_K_WITH_ACUTE = "\u{1E31}"; 5531c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_K_WITH_DOT_BELOW = "\u{1E32}"; 5541c6adce8SGreg Roach public const LATIN_SMALL_LETTER_K_WITH_DOT_BELOW = "\u{1E33}"; 5551c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_L_WITH_DOT_BELOW = "\u{1E36}"; 5561c6adce8SGreg Roach public const LATIN_SMALL_LETTER_L_WITH_DOT_BELOW = "\u{1E37}"; 5571c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_L_WITH_DOT_BELOW_AND_MACRON = "\u{1E38}"; 5581c6adce8SGreg Roach public const LATIN_SMALL_LETTER_L_WITH_DOT_BELOW_AND_MACRON = "\u{1E39}"; 5591c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_M_WITH_ACUTE = "\u{1E3E}"; 5601c6adce8SGreg Roach public const LATIN_SMALL_LETTER_M_WITH_ACUTE = "\u{1E3F}"; 5611c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_M_WITH_DOT_ABOVE = "\u{1E40}"; 5621c6adce8SGreg Roach public const LATIN_SMALL_LETTER_M_WITH_DOT_ABOVE = "\u{1E41}"; 5631c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_M_WITH_DOT_BELOW = "\u{1E42}"; 5641c6adce8SGreg Roach public const LATIN_SMALL_LETTER_M_WITH_DOT_BELOW = "\u{1E43}"; 5651c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_N_WITH_DOT_ABOVE = "\u{1E44}"; 5661c6adce8SGreg Roach public const LATIN_SMALL_LETTER_N_WITH_DOT_ABOVE = "\u{1E45}"; 5671c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_N_WITH_DOT_BELOW = "\u{1E46}"; 5681c6adce8SGreg Roach public const LATIN_SMALL_LETTER_N_WITH_DOT_BELOW = "\u{1E47}"; 5691c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_O_WITH_TILDE_AND_ACUTE = "\u{1E4C}"; 5701c6adce8SGreg Roach public const LATIN_SMALL_LETTER_O_WITH_TILDE_AND_ACUTE = "\u{1E4D}"; 5711c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_O_WITH_TILDE_AND_DIAERESIS = "\u{1E4E}"; 5721c6adce8SGreg Roach public const LATIN_SMALL_LETTER_O_WITH_TILDE_AND_DIAERESIS = "\u{1E4F}"; 5731c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_O_WITH_MACRON_AND_GRAVE = "\u{1E50}"; 5741c6adce8SGreg Roach public const LATIN_SMALL_LETTER_O_WITH_MACRON_AND_GRAVE = "\u{1E51}"; 5751c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_O_WITH_MACRON_AND_ACUTE = "\u{1E52}"; 5761c6adce8SGreg Roach public const LATIN_SMALL_LETTER_O_WITH_MACRON_AND_ACUTE = "\u{1E53}"; 5771c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_P_WITH_ACUTE = "\u{1E54}"; 5781c6adce8SGreg Roach public const LATIN_SMALL_LETTER_P_WITH_ACUTE = "\u{1E55}"; 5791c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_P_WITH_DOT_ABOVE = "\u{1E56}"; 5801c6adce8SGreg Roach public const LATIN_SMALL_LETTER_P_WITH_DOT_ABOVE = "\u{1E57}"; 5811c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_R_WITH_DOT_ABOVE = "\u{1E58}"; 5821c6adce8SGreg Roach public const LATIN_SMALL_LETTER_R_WITH_DOT_ABOVE = "\u{1E59}"; 5831c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_R_WITH_DOT_BELOW = "\u{1E5A}"; 5841c6adce8SGreg Roach public const LATIN_SMALL_LETTER_R_WITH_DOT_BELOW = "\u{1E5B}"; 5851c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_R_WITH_DOT_BELOW_AND_MACRON = "\u{1E5C}"; 5861c6adce8SGreg Roach public const LATIN_SMALL_LETTER_R_WITH_DOT_BELOW_AND_MACRON = "\u{1E5D}"; 5871c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_S_WITH_DOT_ABOVE = "\u{1E60}"; 5881c6adce8SGreg Roach public const LATIN_SMALL_LETTER_S_WITH_DOT_ABOVE = "\u{1E61}"; 5891c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_S_WITH_DOT_BELOW = "\u{1E62}"; 5901c6adce8SGreg Roach public const LATIN_SMALL_LETTER_S_WITH_DOT_BELOW = "\u{1E63}"; 5911c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_S_WITH_ACUTE_AND_DOT_ABOVE = "\u{1E64}"; 5921c6adce8SGreg Roach public const LATIN_SMALL_LETTER_S_WITH_ACUTE_AND_DOT_ABOVE = "\u{1E65}"; 5931c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_S_WITH_CARON_AND_DOT_ABOVE = "\u{1E66}"; 5941c6adce8SGreg Roach public const LATIN_SMALL_LETTER_S_WITH_CARON_AND_DOT_ABOVE = "\u{1E67}"; 5951c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_S_WITH_DOT_BELOW_AND_DOT_ABOVE = "\u{1E68}"; 5961c6adce8SGreg Roach public const LATIN_SMALL_LETTER_S_WITH_DOT_BELOW_AND_DOT_ABOVE = "\u{1E69}"; 5971c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_T_WITH_DOT_ABOVE = "\u{1E6A}"; 5981c6adce8SGreg Roach public const LATIN_SMALL_LETTER_T_WITH_DOT_ABOVE = "\u{1E6B}"; 5991c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_T_WITH_DOT_BELOW = "\u{1E6C}"; 6001c6adce8SGreg Roach public const LATIN_SMALL_LETTER_T_WITH_DOT_BELOW = "\u{1E6D}"; 6011c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_U_WITH_DIAERESIS_BELOW = "\u{1E72}"; 6021c6adce8SGreg Roach public const LATIN_SMALL_LETTER_U_WITH_DIAERESIS_BELOW = "\u{1E73}"; 6031c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_U_WITH_TILDE_AND_ACUTE = "\u{1E78}"; 6041c6adce8SGreg Roach public const LATIN_SMALL_LETTER_U_WITH_TILDE_AND_ACUTE = "\u{1E79}"; 6051c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_U_WITH_MACRON_AND_DIAERESIS = "\u{1E7A}"; 6061c6adce8SGreg Roach public const LATIN_SMALL_LETTER_U_WITH_MACRON_AND_DIAERESIS = "\u{1E7B}"; 6071c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_V_WITH_TILDE = "\u{1E7C}"; 6081c6adce8SGreg Roach public const LATIN_SMALL_LETTER_V_WITH_TILDE = "\u{1E7D}"; 6091c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_V_WITH_DOT_BELOW = "\u{1E7E}"; 6101c6adce8SGreg Roach public const LATIN_SMALL_LETTER_V_WITH_DOT_BELOW = "\u{1E7F}"; 6111c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_W_WITH_GRAVE = "\u{1E80}"; 6121c6adce8SGreg Roach public const LATIN_SMALL_LETTER_W_WITH_GRAVE = "\u{1E81}"; 6131c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_W_WITH_ACUTE = "\u{1E82}"; 6141c6adce8SGreg Roach public const LATIN_SMALL_LETTER_W_WITH_ACUTE = "\u{1E83}"; 6151c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_W_WITH_DIAERESIS = "\u{1E84}"; 6161c6adce8SGreg Roach public const LATIN_SMALL_LETTER_W_WITH_DIAERESIS = "\u{1E85}"; 6171c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_W_WITH_DOT_ABOVE = "\u{1E86}"; 6181c6adce8SGreg Roach public const LATIN_SMALL_LETTER_W_WITH_DOT_ABOVE = "\u{1E87}"; 6191c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_W_WITH_DOT_BELOW = "\u{1E88}"; 6201c6adce8SGreg Roach public const LATIN_SMALL_LETTER_W_WITH_DOT_BELOW = "\u{1E89}"; 6211c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_X_WITH_DOT_ABOVE = "\u{1E8A}"; 6221c6adce8SGreg Roach public const LATIN_SMALL_LETTER_X_WITH_DOT_ABOVE = "\u{1E8B}"; 6231c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_X_WITH_DIAERESIS = "\u{1E8C}"; 6241c6adce8SGreg Roach public const LATIN_SMALL_LETTER_X_WITH_DIAERESIS = "\u{1E8D}"; 6251c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_Y_WITH_DOT_ABOVE = "\u{1E8E}"; 6261c6adce8SGreg Roach public const LATIN_SMALL_LETTER_Y_WITH_DOT_ABOVE = "\u{1E8F}"; 6271c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_Z_WITH_CIRCUMFLEX = "\u{1E90}"; 6281c6adce8SGreg Roach public const LATIN_SMALL_LETTER_Z_WITH_CIRCUMFLEX = "\u{1E91}"; 6291c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_Z_WITH_DOT_BELOW = "\u{1E92}"; 6301c6adce8SGreg Roach public const LATIN_SMALL_LETTER_Z_WITH_DOT_BELOW = "\u{1E93}"; 6311c6adce8SGreg Roach public const LATIN_SMALL_LETTER_T_WITH_DIAERESIS = "\u{1E97}"; 6321c6adce8SGreg Roach public const LATIN_SMALL_LETTER_W_WITH_RING_ABOVE = "\u{1E98}"; 6331c6adce8SGreg Roach public const LATIN_SMALL_LETTER_Y_WITH_RING_ABOVE = "\u{1E99}"; 6341c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_A_WITH_DOT_BELOW = "\u{1EA0}"; 6351c6adce8SGreg Roach public const LATIN_SMALL_LETTER_A_WITH_DOT_BELOW = "\u{1EA1}"; 6361c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_A_WITH_HOOK_ABOVE = "\u{1EA2}"; 6371c6adce8SGreg Roach public const LATIN_SMALL_LETTER_A_WITH_HOOK_ABOVE = "\u{1EA3}"; 6381c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_A_WITH_CIRCUMFLEX_AND_ACUTE = "\u{1EA4}"; 6391c6adce8SGreg Roach public const LATIN_SMALL_LETTER_A_WITH_CIRCUMFLEX_AND_ACUTE = "\u{1EA5}"; 6401c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_A_WITH_CIRCUMFLEX_AND_GRAVE = "\u{1EA6}"; 6411c6adce8SGreg Roach public const LATIN_SMALL_LETTER_A_WITH_CIRCUMFLEX_AND_GRAVE = "\u{1EA7}"; 6421c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_A_WITH_CIRCUMFLEX_AND_HOOK_ABOVE = "\u{1EA8}"; 6431c6adce8SGreg Roach public const LATIN_SMALL_LETTER_A_WITH_CIRCUMFLEX_AND_HOOK_ABOVE = "\u{1EA9}"; 6441c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_A_WITH_CIRCUMFLEX_AND_TILDE = "\u{1EAA}"; 6451c6adce8SGreg Roach public const LATIN_SMALL_LETTER_A_WITH_CIRCUMFLEX_AND_TILDE = "\u{1EAB}"; 6461c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_A_WITH_CIRCUMFLEX_AND_DOT_BELOW = "\u{1EAC}"; 6471c6adce8SGreg Roach public const LATIN_SMALL_LETTER_A_WITH_CIRCUMFLEX_AND_DOT_BELOW = "\u{1EAD}"; 6481c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_A_WITH_BREVE_AND_ACUTE = "\u{1EAE}"; 6491c6adce8SGreg Roach public const LATIN_SMALL_LETTER_A_WITH_BREVE_AND_ACUTE = "\u{1EAF}"; 6501c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_A_WITH_BREVE_AND_GRAVE = "\u{1EB0}"; 6511c6adce8SGreg Roach public const LATIN_SMALL_LETTER_A_WITH_BREVE_AND_GRAVE = "\u{1EB1}"; 6521c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_A_WITH_BREVE_AND_HOOK_ABOVE = "\u{1EB2}"; 6531c6adce8SGreg Roach public const LATIN_SMALL_LETTER_A_WITH_BREVE_AND_HOOK_ABOVE = "\u{1EB3}"; 6541c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_A_WITH_BREVE_AND_TILDE = "\u{1EB4}"; 6551c6adce8SGreg Roach public const LATIN_SMALL_LETTER_A_WITH_BREVE_AND_TILDE = "\u{1EB5}"; 6561c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_A_WITH_BREVE_AND_DOT_BELOW = "\u{1EB6}"; 6571c6adce8SGreg Roach public const LATIN_SMALL_LETTER_A_WITH_BREVE_AND_DOT_BELOW = "\u{1EB7}"; 6581c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_E_WITH_DOT_BELOW = "\u{1EB8}"; 6591c6adce8SGreg Roach public const LATIN_SMALL_LETTER_E_WITH_DOT_BELOW = "\u{1EB9}"; 6601c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_E_WITH_HOOK_ABOVE = "\u{1EBA}"; 6611c6adce8SGreg Roach public const LATIN_SMALL_LETTER_E_WITH_HOOK_ABOVE = "\u{1EBB}"; 6621c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_E_WITH_TILDE = "\u{1EBC}"; 6631c6adce8SGreg Roach public const LATIN_SMALL_LETTER_E_WITH_TILDE = "\u{1EBD}"; 6641c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_E_WITH_CIRCUMFLEX_AND_ACUTE = "\u{1EBE}"; 6651c6adce8SGreg Roach public const LATIN_SMALL_LETTER_E_WITH_CIRCUMFLEX_AND_ACUTE = "\u{1EBF}"; 6661c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_E_WITH_CIRCUMFLEX_AND_GRAVE = "\u{1EC0}"; 6671c6adce8SGreg Roach public const LATIN_SMALL_LETTER_E_WITH_CIRCUMFLEX_AND_GRAVE = "\u{1EC1}"; 6681c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_E_WITH_CIRCUMFLEX_AND_HOOK_ABOVE = "\u{1EC2}"; 6691c6adce8SGreg Roach public const LATIN_SMALL_LETTER_E_WITH_CIRCUMFLEX_AND_HOOK_ABOVE = "\u{1EC3}"; 6701c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_E_WITH_CIRCUMFLEX_AND_TILDE = "\u{1EC4}"; 6711c6adce8SGreg Roach public const LATIN_SMALL_LETTER_E_WITH_CIRCUMFLEX_AND_TILDE = "\u{1EC5}"; 6721c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_E_WITH_CIRCUMFLEX_AND_DOT_BELOW = "\u{1EC6}"; 6731c6adce8SGreg Roach public const LATIN_SMALL_LETTER_E_WITH_CIRCUMFLEX_AND_DOT_BELOW = "\u{1EC7}"; 6741c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_I_WITH_HOOK_ABOVE = "\u{1EC8}"; 6751c6adce8SGreg Roach public const LATIN_SMALL_LETTER_I_WITH_HOOK_ABOVE = "\u{1EC9}"; 6761c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_I_WITH_DOT_BELOW = "\u{1ECA}"; 6771c6adce8SGreg Roach public const LATIN_SMALL_LETTER_I_WITH_DOT_BELOW = "\u{1ECB}"; 6781c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_O_WITH_DOT_BELOW = "\u{1ECC}"; 6791c6adce8SGreg Roach public const LATIN_SMALL_LETTER_O_WITH_DOT_BELOW = "\u{1ECD}"; 6801c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_O_WITH_HOOK_ABOVE = "\u{1ECE}"; 6811c6adce8SGreg Roach public const LATIN_SMALL_LETTER_O_WITH_HOOK_ABOVE = "\u{1ECF}"; 6821c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_O_WITH_CIRCUMFLEX_AND_ACUTE = "\u{1ED0}"; 6831c6adce8SGreg Roach public const LATIN_SMALL_LETTER_O_WITH_CIRCUMFLEX_AND_ACUTE = "\u{1ED1}"; 6841c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_O_WITH_CIRCUMFLEX_AND_GRAVE = "\u{1ED2}"; 6851c6adce8SGreg Roach public const LATIN_SMALL_LETTER_O_WITH_CIRCUMFLEX_AND_GRAVE = "\u{1ED3}"; 6861c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_O_WITH_CIRCUMFLEX_AND_HOOK_ABOVE = "\u{1ED4}"; 6871c6adce8SGreg Roach public const LATIN_SMALL_LETTER_O_WITH_CIRCUMFLEX_AND_HOOK_ABOVE = "\u{1ED5}"; 6881c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_O_WITH_CIRCUMFLEX_AND_TILDE = "\u{1ED6}"; 6891c6adce8SGreg Roach public const LATIN_SMALL_LETTER_O_WITH_CIRCUMFLEX_AND_TILDE = "\u{1ED7}"; 6901c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_O_WITH_CIRCUMFLEX_AND_DOT_BELOW = "\u{1ED8}"; 6911c6adce8SGreg Roach public const LATIN_SMALL_LETTER_O_WITH_CIRCUMFLEX_AND_DOT_BELOW = "\u{1ED9}"; 6921c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_U_WITH_DOT_BELOW = "\u{1EE4}"; 6931c6adce8SGreg Roach public const LATIN_SMALL_LETTER_U_WITH_DOT_BELOW = "\u{1EE5}"; 6941c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_U_WITH_HOOK_ABOVE = "\u{1EE6}"; 6951c6adce8SGreg Roach public const LATIN_SMALL_LETTER_U_WITH_HOOK_ABOVE = "\u{1EE7}"; 6961c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_Y_WITH_GRAVE = "\u{1EF2}"; 6971c6adce8SGreg Roach public const LATIN_SMALL_LETTER_Y_WITH_GRAVE = "\u{1EF3}"; 6981c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_Y_WITH_DOT_BELOW = "\u{1EF4}"; 6991c6adce8SGreg Roach public const LATIN_SMALL_LETTER_Y_WITH_DOT_BELOW = "\u{1EF5}"; 7001c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_Y_WITH_HOOK_ABOVE = "\u{1EF6}"; 7011c6adce8SGreg Roach public const LATIN_SMALL_LETTER_Y_WITH_HOOK_ABOVE = "\u{1EF7}"; 7021c6adce8SGreg Roach public const LATIN_CAPITAL_LETTER_Y_WITH_TILDE = "\u{1EF8}"; 7031c6adce8SGreg Roach public const LATIN_SMALL_LETTER_Y_WITH_TILDE = "\u{1EF9}"; 7041c6adce8SGreg Roach public const ZERO_WIDTH_NON_JOINER = "\u{200C}"; 7051c6adce8SGreg Roach public const ZERO_WIDTH_JOINER = "\u{200D}"; 7061c6adce8SGreg Roach public const EN_DASH = "\u{2013}"; 7071c6adce8SGreg Roach public const EM_DASH = "\u{2014}"; 7081c6adce8SGreg Roach public const DOUBLE_LOW_LINE = "\u{2017}"; 7091c6adce8SGreg Roach public const LEFT_SINGLE_QUOTATION_MARK = "\u{2018}"; 7101c6adce8SGreg Roach public const RIGHT_SINGLE_QUOTATION_MARK = "\u{2019}"; 7111c6adce8SGreg Roach public const SINGLE_LOW_9_QUOTATION_MARK = "\u{201A}"; 7121c6adce8SGreg Roach public const LEFT_DOUBLE_QUOTATION_MARK = "\u{201C}"; 7131c6adce8SGreg Roach public const RIGHT_DOUBLE_QUOTATION_MARK = "\u{201D}"; 7141c6adce8SGreg Roach public const DOUBLE_LOW_9_QUOTATION_MARK = "\u{201E}"; 7151c6adce8SGreg Roach public const DAGGER = "\u{2020}"; 7161c6adce8SGreg Roach public const DOUBLE_DAGGER = "\u{2021}"; 7171c6adce8SGreg Roach public const BULLET = "\u{2022}"; 7181c6adce8SGreg Roach public const HORIZONTAL_ELLIPSIS = "\u{2026}"; 7191c6adce8SGreg Roach public const PER_MILLE_SIGN = "\u{2030}"; 7201c6adce8SGreg Roach public const SINGLE_LEFT_POINTING_ANGLE_QUOTATION_MARK = "\u{2039}"; 7211c6adce8SGreg Roach public const SINGLE_RIGHT_POINTING_ANGLE_QUOTATION_MARK = "\u{203A}"; 7221c6adce8SGreg Roach public const FRACTION_SLASH = "\u{2044}"; 7231c6adce8SGreg Roach public const SUPERSCRIPT_LATIN_SMALL_LETTER_N = "\u{207F}"; 7241c6adce8SGreg Roach public const PESETA_SIGN = "\u{20A7}"; 7251c6adce8SGreg Roach public const EURO_SIGN = "\u{20AC}"; 7261c6adce8SGreg Roach public const SCRIPT_SMALL_L = "\u{2113}"; 7271c6adce8SGreg Roach public const NUMERO_SIGN = "\u{2116}"; 7281c6adce8SGreg Roach public const SOUND_RECORDING_COPYRIGHT = "\u{2117}"; 7291c6adce8SGreg Roach public const TRADE_MARK_SIGN = "\u{2122}"; 7301c6adce8SGreg Roach public const PARTIAL_DIFFERENTIAL = "\u{2202}"; 7311c6adce8SGreg Roach public const INCREMENT = "\u{2206}"; 7321c6adce8SGreg Roach public const N_ARY_PRODUCT = "\u{220F}"; 7331c6adce8SGreg Roach public const N_ARY_SUMMATION = "\u{2211}"; 7341c6adce8SGreg Roach public const BULLET_OPERATOR = "\u{2219}"; 7351c6adce8SGreg Roach public const SQUARE_ROOT = "\u{221A}"; 7361c6adce8SGreg Roach public const INFINITY = "\u{221E}"; 7371c6adce8SGreg Roach public const INTERSECTION = "\u{2229}"; 7381c6adce8SGreg Roach public const INTEGRAL = "\u{222B}"; 7391c6adce8SGreg Roach public const ALMOST_EQUAL_TO = "\u{2248}"; 7401c6adce8SGreg Roach public const NOT_EQUAL_TO = "\u{2260}"; 7411c6adce8SGreg Roach public const IDENTICAL_TO = "\u{2261}"; 7421c6adce8SGreg Roach public const LESS_THAN_OR_EQUAL_TO = "\u{2264}"; 7431c6adce8SGreg Roach public const GREATER_THAN_OR_EQUAL_TO = "\u{2265}"; 7441c6adce8SGreg Roach public const REVERSED_NOT_SIGN = "\u{2310}"; 7451c6adce8SGreg Roach public const TOP_HALF_INTEGRAL = "\u{2320}"; 7461c6adce8SGreg Roach public const BOTTOM_HALF_INTEGRAL = "\u{2321}"; 7471c6adce8SGreg Roach public const BOX_DRAWINGS_LIGHT_HORIZONTAL = "\u{2500}"; 7481c6adce8SGreg Roach public const BOX_DRAWINGS_LIGHT_VERTICAL = "\u{2502}"; 7491c6adce8SGreg Roach public const BOX_DRAWINGS_LIGHT_DOWN_AND_RIGHT = "\u{250C}"; 7501c6adce8SGreg Roach public const BOX_DRAWINGS_LIGHT_DOWN_AND_LEFT = "\u{2510}"; 7511c6adce8SGreg Roach public const BOX_DRAWINGS_LIGHT_UP_AND_LEFT = "\u{2518}"; 7521c6adce8SGreg Roach public const BOX_DRAWINGS_LIGHT_UP_AND_RIGHT = "\u{2514}"; 7531c6adce8SGreg Roach public const BOX_DRAWINGS_LIGHT_VERTICAL_AND_RIGHT = "\u{251C}"; 7541c6adce8SGreg Roach public const BOX_DRAWINGS_LIGHT_VERTICAL_AND_LEFT = "\u{2524}"; 7551c6adce8SGreg Roach public const BOX_DRAWINGS_LIGHT_DOWN_AND_HORIZONTAL = "\u{252C}"; 7561c6adce8SGreg Roach public const BOX_DRAWINGS_LIGHT_UP_AND_HORIZONTAL = "\u{2534}"; 7571c6adce8SGreg Roach public const BOX_DRAWINGS_LIGHT_VERTICAL_AND_HORIZONTAL = "\u{253C}"; 7581c6adce8SGreg Roach public const BOX_DRAWINGS_DOUBLE_HORIZONTAL = "\u{2550}"; 7591c6adce8SGreg Roach public const BOX_DRAWINGS_DOUBLE_VERTICAL = "\u{2551}"; 7601c6adce8SGreg Roach public const BOX_DRAWINGS_DOWN_SINGLE_AND_RIGHT_DOUBLE = "\u{2552}"; 7611c6adce8SGreg Roach public const BOX_DRAWINGS_DOWN_DOUBLE_AND_RIGHT_SINGLE = "\u{2553}"; 7621c6adce8SGreg Roach public const BOX_DRAWINGS_DOUBLE_DOWN_AND_RIGHT = "\u{2554}"; 7631c6adce8SGreg Roach public const BOX_DRAWINGS_DOWN_SINGLE_AND_LEFT_DOUBLE = "\u{2555}"; 7641c6adce8SGreg Roach public const BOX_DRAWINGS_DOWN_DOUBLE_AND_LEFT_SINGLE = "\u{2556}"; 7651c6adce8SGreg Roach public const BOX_DRAWINGS_DOUBLE_DOWN_AND_LEFT = "\u{2557}"; 7661c6adce8SGreg Roach public const BOX_DRAWINGS_UP_SINGLE_AND_RIGHT_DOUBLE = "\u{2558}"; 7671c6adce8SGreg Roach public const BOX_DRAWINGS_UP_DOUBLE_AND_RIGHT_SINGLE = "\u{2559}"; 7681c6adce8SGreg Roach public const BOX_DRAWINGS_DOUBLE_UP_AND_RIGHT = "\u{255A}"; 7691c6adce8SGreg Roach public const BOX_DRAWINGS_UP_SINGLE_AND_LEFT_DOUBLE = "\u{255B}"; 7701c6adce8SGreg Roach public const BOX_DRAWINGS_UP_DOUBLE_AND_LEFT_SINGLE = "\u{255C}"; 7711c6adce8SGreg Roach public const BOX_DRAWINGS_DOUBLE_UP_AND_LEFT = "\u{255D}"; 7721c6adce8SGreg Roach public const BOX_DRAWINGS_VERTICAL_SINGLE_AND_RIGHT_DOUBLE = "\u{255E}"; 7731c6adce8SGreg Roach public const BOX_DRAWINGS_VERTICAL_DOUBLE_AND_RIGHT_SINGLE = "\u{255F}"; 7741c6adce8SGreg Roach public const BOX_DRAWINGS_DOUBLE_VERTICAL_AND_RIGHT = "\u{2560}"; 7751c6adce8SGreg Roach public const BOX_DRAWINGS_VERTICAL_SINGLE_AND_LEFT_DOUBLE = "\u{2561}"; 7761c6adce8SGreg Roach public const BOX_DRAWINGS_VERTICAL_DOUBLE_AND_LEFT_SINGLE = "\u{2562}"; 7771c6adce8SGreg Roach public const BOX_DRAWINGS_DOUBLE_VERTICAL_AND_LEFT = "\u{2563}"; 7781c6adce8SGreg Roach public const BOX_DRAWINGS_DOWN_SINGLE_AND_HORIZONTAL_DOUBLE = "\u{2564}"; 7791c6adce8SGreg Roach public const BOX_DRAWINGS_DOWN_DOUBLE_AND_HORIZONTAL_SINGLE = "\u{2565}"; 7801c6adce8SGreg Roach public const BOX_DRAWINGS_DOUBLE_DOWN_AND_HORIZONTAL = "\u{2566}"; 7811c6adce8SGreg Roach public const BOX_DRAWINGS_UP_SINGLE_AND_HORIZONTAL_DOUBLE = "\u{2567}"; 7821c6adce8SGreg Roach public const BOX_DRAWINGS_UP_DOUBLE_AND_HORIZONTAL_SINGLE = "\u{2568}"; 7831c6adce8SGreg Roach public const BOX_DRAWINGS_BOX_DRAWINGS_DOUBLE_UP_AND_HORIZONTAL = "\u{2569}"; 7841c6adce8SGreg Roach public const BOX_DRAWINGS_VERTICAL_SINGLE_AND_HORIZONTAL_DOUBLE = "\u{256A}"; 7851c6adce8SGreg Roach public const BOX_DRAWINGS_VERTICAL_DOUBLE_AND_HORIZONTAL_SINGLE = "\u{256B}"; 7861c6adce8SGreg Roach public const BOX_DRAWINGS_DOUBLE_VERTICAL_AND_HORIZONTAL = "\u{256C}"; 7871c6adce8SGreg Roach public const UPPER_HALF_BLOCK = "\u{2580}"; 7881c6adce8SGreg Roach public const LOWER_HALF_BLOCK = "\u{2584}"; 7891c6adce8SGreg Roach public const FULL_BLOCK = "\u{2588}"; 7901c6adce8SGreg Roach public const LEFT_HALF_BLOCK = "\u{258C}"; 7911c6adce8SGreg Roach public const RIGHT_HALF_BLOCK = "\u{2590}"; 7921c6adce8SGreg Roach public const LIGHT_SHADE = "\u{2591}"; 7931c6adce8SGreg Roach public const MEDIUM_SHADE = "\u{2592}"; 7941c6adce8SGreg Roach public const DARK_SHADE = "\u{2593}"; 7951c6adce8SGreg Roach public const BLACK_SQUARE = "\u{25A0}"; 7961c6adce8SGreg Roach public const WHITE_SQUARE = "\u{25A1}"; 7971c6adce8SGreg Roach public const LOZENGE = "\u{25CA}"; 7981c6adce8SGreg Roach public const MUSIC_FLAT_SIGN = "\u{266D}"; 7991c6adce8SGreg Roach public const MUSIC_SHARP_SIGN = "\u{266F}"; 8001c6adce8SGreg Roach public const LATIN_SMALL_LIGATURE_FI = "\u{FB01}"; 8011c6adce8SGreg Roach public const LATIN_SMALL_LIGATURE_FL = "\u{FB02}"; 8021c6adce8SGreg Roach public const BYTE_ORDER_MARK = "\u{FEFF}"; 8031c6adce8SGreg Roach public const REPLACEMENT_CHARACTER = "\u{FFFD}"; 8041c6adce8SGreg Roach 8051c6adce8SGreg Roach /** 8061c6adce8SGreg Roach * Convert text from (potentially invalid) UTF-8 to UTF-8. 8071c6adce8SGreg Roach * 8081c6adce8SGreg Roach * @param string $text 8091c6adce8SGreg Roach * 8101c6adce8SGreg Roach * @return string 8111c6adce8SGreg Roach */ 8121c6adce8SGreg Roach public function fromUtf8(string $text): string 8131c6adce8SGreg Roach { 8141c6adce8SGreg Roach if (preg_match('//u', $text) === false) { 8151c6adce8SGreg Roach // Not UTF8? 8161c6adce8SGreg Roach mb_substitute_character(0xFFFD); 8171c6adce8SGreg Roach 8181c6adce8SGreg Roach return mb_convert_encoding($text, 'UTF-8', 'UTF-8'); 8191c6adce8SGreg Roach } 8201c6adce8SGreg Roach 8211c6adce8SGreg Roach return $text; 8221c6adce8SGreg Roach } 8231c6adce8SGreg Roach 8241c6adce8SGreg Roach /** 8251c6adce8SGreg Roach * Convert text from (potentially invalid) UTF-8 to UTF-8. 8261c6adce8SGreg Roach * 8271c6adce8SGreg Roach * @param string $text 8281c6adce8SGreg Roach * 8291c6adce8SGreg Roach * @return string 8301c6adce8SGreg Roach */ 8311c6adce8SGreg Roach public function toUtf8(string $text): string 8321c6adce8SGreg Roach { 8331c6adce8SGreg Roach return $this->fromUtf8($text); 8341c6adce8SGreg Roach } 8351c6adce8SGreg Roach 8361c6adce8SGreg Roach /** 8371c6adce8SGreg Roach * Create a UTF8 character from a code. 8381c6adce8SGreg Roach * 8391c6adce8SGreg Roach * @param int $code 8401c6adce8SGreg Roach * 8411c6adce8SGreg Roach * @return string 8421c6adce8SGreg Roach */ 8431c6adce8SGreg Roach public static function chr(int $code): string 8441c6adce8SGreg Roach { 8451c6adce8SGreg Roach if ($code < 0 || $code > 0x1FFFFF) { 8461c6adce8SGreg Roach throw new InvalidArgumentException((string)$code); 8471c6adce8SGreg Roach } 8481c6adce8SGreg Roach 8491c6adce8SGreg Roach if ($code <= 0x7F) { 8501c6adce8SGreg Roach return chr($code); 8511c6adce8SGreg Roach } 8521c6adce8SGreg Roach 8531c6adce8SGreg Roach if ($code <= 0x7FF) { 8541c6adce8SGreg Roach return 8551c6adce8SGreg Roach chr(($code >> 6) + 0xC0) . 8561c6adce8SGreg Roach chr(($code & 0x3F) + 0x80); 8571c6adce8SGreg Roach } 8581c6adce8SGreg Roach 8591c6adce8SGreg Roach if ($code <= 0xFFFF) { 8601c6adce8SGreg Roach return 8611c6adce8SGreg Roach chr(($code >> 12) + 0xE0) . 8621c6adce8SGreg Roach chr((($code >> 6) & 0x3F) + 0x80) . 8631c6adce8SGreg Roach chr(($code & 0x3F) + 0x80); 8641c6adce8SGreg Roach } 8651c6adce8SGreg Roach 8661c6adce8SGreg Roach return 8671c6adce8SGreg Roach chr(($code >> 18) + 0xF0) . 8681c6adce8SGreg Roach chr((($code >> 12) & 0x3F) + 0x80) . 8691c6adce8SGreg Roach chr((($code >> 6) & 0x3F) + 0x80) . 8701c6adce8SGreg Roach chr(($code & 0x3F) + 0x80); 8711c6adce8SGreg Roach } 8721c6adce8SGreg Roach} 873