app/Encodings/UTF8.php
<?php
/**
* webtrees: online genealogy
* Copyright (C) 2023 webtrees development team
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
declare(strict_types=1);
namespace Fisharebest\Webtrees\Encodings;
use InvalidArgumentException;
use function chr;
use function mb_substitute_character;
/**
* Convert between (potentially invalid) UTF-8 and UTF-8.
*/
class UTF8 extends AbstractEncoding
{
public const NAME = 'UTF-8';
public const START_OF_STRING = "\u{0098}";
public const STRING_TERMINATOR = "\u{009C}";
public const NO_BREAK_SPACE = "\u{00A0}";
public const INVERTED_EXCLAMATION_MARK = "\u{00A1}";
public const CENT_SIGN = "\u{00A2}";
public const POUND_SIGN = "\u{00A3}";
public const CURRENCY_SIGN = "\u{00A4}";
public const YEN_SIGN = "\u{00A5}";
public const BROKEN_BAR = "\u{00A6}";
public const SECTION_SIGN = "\u{00A7}";
public const DIAERESIS = "\u{00A8}";
public const COPYRIGHT_SIGN = "\u{00A9}";
public const FEMININE_ORDINAL_INDICATOR = "\u{00AA}";
public const LEFT_POINTING_DOUBLE_ANGLE_QUOTATION_MARK = "\u{00AB}";
public const NOT_SIGN = "\u{00AC}";
public const SOFT_HYPHEN = "\u{00AD}";
public const REGISTERED_SIGN = "\u{00AE}";
public const MACRON = "\u{00AF}";
public const DEGREE_SIGN = "\u{00B0}";
public const PLUS_MINUS_SIGN = "\u{00B1}";
public const SUPERSCRIPT_TWO = "\u{00B2}";
public const SUPERSCRIPT_THREE = "\u{00B3}";
public const ACUTE_ACCENT = "\u{00B4}";
public const MICRO_SIGN = "\u{00B5}";
public const PILCROW_SIGN = "\u{00B6}";
public const MIDDLE_DOT = "\u{00B7}";
public const CEDILLA = "\u{00B8}";
public const SUPERSCRIPT_ONE = "\u{00B9}";
public const MASCULINE_ORDINAL_INDICATOR = "\u{00BA}";
public const RIGHT_POINTING_DOUBLE_ANGLE_QUOTATION_MARK = "\u{00BB}";
public const VULGAR_FRACTION_ONE_QUARTER = "\u{00BC}";
public const VULGAR_FRACTION_ONE_HALF = "\u{00BD}";
public const VULGAR_FRACTION_THREE_QUARTERS = "\u{00BE}";
public const INVERTED_QUESTION_MARK = "\u{00BF}";
public const LATIN_CAPITAL_LETTER_A_WITH_GRAVE = "\u{00C0}";
public const LATIN_CAPITAL_LETTER_A_WITH_ACUTE = "\u{00C1}";
public const LATIN_CAPITAL_LETTER_A_WITH_CIRCUMFLEX = "\u{00C2}";
public const LATIN_CAPITAL_LETTER_A_WITH_TILDE = "\u{00C3}";
public const LATIN_CAPITAL_LETTER_A_WITH_DIAERESIS = "\u{00C4}";
public const LATIN_CAPITAL_LETTER_A_WITH_RING_ABOVE = "\u{00C5}";
public const LATIN_CAPITAL_LETTER_AE = "\u{00C6}";
public const LATIN_CAPITAL_LETTER_C_WITH_CEDILLA = "\u{00C7}";
public const LATIN_CAPITAL_LETTER_E_WITH_GRAVE = "\u{00C8}";
public const LATIN_CAPITAL_LETTER_E_WITH_ACUTE = "\u{00C9}";
public const LATIN_CAPITAL_LETTER_E_WITH_CIRCUMFLEX = "\u{00CA}";
public const LATIN_CAPITAL_LETTER_E_WITH_DIAERESIS = "\u{00CB}";
public const LATIN_CAPITAL_LETTER_I_WITH_GRAVE = "\u{00CC}";
public const LATIN_CAPITAL_LETTER_I_WITH_ACUTE = "\u{00CD}";
public const LATIN_CAPITAL_LETTER_I_WITH_CIRCUMFLEX = "\u{00CE}";
public const LATIN_CAPITAL_LETTER_I_WITH_DIAERESIS = "\u{00CF}";
public const LATIN_CAPITAL_LETTER_ETH = "\u{00D0}";
public const LATIN_CAPITAL_LETTER_N_WITH_TILDE = "\u{00D1}";
public const LATIN_CAPITAL_LETTER_O_WITH_GRAVE = "\u{00D2}";
public const LATIN_CAPITAL_LETTER_O_WITH_ACUTE = "\u{00D3}";
public const LATIN_CAPITAL_LETTER_O_WITH_CIRCUMFLEX = "\u{00D4}";
public const LATIN_CAPITAL_LETTER_O_WITH_TILDE = "\u{00D5}";
public const LATIN_CAPITAL_LETTER_O_WITH_DIAERESIS = "\u{00D6}";
public const MULTIPLICATION_SIGN = "\u{00D7}";
public const LATIN_CAPITAL_LETTER_O_WITH_STROKE = "\u{00D8}";
public const LATIN_CAPITAL_LETTER_U_WITH_GRAVE = "\u{00D9}";
public const LATIN_CAPITAL_LETTER_U_WITH_ACUTE = "\u{00DA}";
public const LATIN_CAPITAL_LETTER_U_WITH_CIRCUMFLEX = "\u{00DB}";
public const LATIN_CAPITAL_LETTER_U_WITH_DIAERESIS = "\u{00DC}";
public const LATIN_CAPITAL_LETTER_Y_WITH_ACUTE = "\u{00DD}";
public const LATIN_CAPITAL_LETTER_THORN = "\u{00DE}";
public const LATIN_SMALL_LETTER_SHARP_S = "\u{00DF}";
public const LATIN_SMALL_LETTER_A_WITH_GRAVE = "\u{00E0}";
public const LATIN_SMALL_LETTER_A_WITH_ACUTE = "\u{00E1}";
public const LATIN_SMALL_LETTER_A_WITH_CIRCUMFLEX = "\u{00E2}";
public const LATIN_SMALL_LETTER_A_WITH_TILDE = "\u{00E3}";
public const LATIN_SMALL_LETTER_A_WITH_DIAERESIS = "\u{00E4}";
public const LATIN_SMALL_LETTER_A_WITH_RING_ABOVE = "\u{00E5}";
public const LATIN_SMALL_LETTER_AE = "\u{00E6}";
public const LATIN_SMALL_LETTER_C_WITH_CEDILLA = "\u{00E7}";
public const LATIN_SMALL_LETTER_E_WITH_GRAVE = "\u{00E8}";
public const LATIN_SMALL_LETTER_E_WITH_ACUTE = "\u{00E9}";
public const LATIN_SMALL_LETTER_E_WITH_CIRCUMFLEX = "\u{00EA}";
public const LATIN_SMALL_LETTER_E_WITH_DIAERESIS = "\u{00EB}";
public const LATIN_SMALL_LETTER_I_WITH_GRAVE = "\u{00EC}";
public const LATIN_SMALL_LETTER_I_WITH_ACUTE = "\u{00ED}";
public const LATIN_SMALL_LETTER_I_WITH_CIRCUMFLEX = "\u{00EE}";
public const LATIN_SMALL_LETTER_I_WITH_DIAERESIS = "\u{00EF}";
public const LATIN_SMALL_LETTER_ETH = "\u{00F0}";
public const LATIN_SMALL_LETTER_N_WITH_TILDE = "\u{00F1}";
public const LATIN_SMALL_LETTER_O_WITH_GRAVE = "\u{00F2}";
public const LATIN_SMALL_LETTER_O_WITH_ACUTE = "\u{00F3}";
public const LATIN_SMALL_LETTER_O_WITH_CIRCUMFLEX = "\u{00F4}";
public const LATIN_SMALL_LETTER_O_WITH_TILDE = "\u{00F5}";
public const LATIN_SMALL_LETTER_O_WITH_DIAERESIS = "\u{00F6}";
public const DIVISION_SIGN = "\u{00F7}";
public const LATIN_SMALL_LETTER_O_WITH_STROKE = "\u{00F8}";
public const LATIN_SMALL_LETTER_U_WITH_GRAVE = "\u{00F9}";
public const LATIN_SMALL_LETTER_U_WITH_ACUTE = "\u{00FA}";
public const LATIN_SMALL_LETTER_U_WITH_CIRCUMFLEX = "\u{00FB}";
public const LATIN_SMALL_LETTER_U_WITH_DIAERESIS = "\u{00FC}";
public const LATIN_SMALL_LETTER_Y_WITH_ACUTE = "\u{00FD}";
public const LATIN_SMALL_LETTER_THORN = "\u{00FE}";
public const LATIN_SMALL_LETTER_Y_WITH_DIAERESIS = "\u{00FF}";
public const LATIN_CAPITAL_LETTER_A_WITH_MACRON = "\u{0100}";
public const LATIN_SMALL_LETTER_A_WITH_MACRON = "\u{0101}";
public const LATIN_CAPITAL_LETTER_A_WITH_BREVE = "\u{0102}";
public const LATIN_SMALL_LETTER_A_WITH_BREVE = "\u{0103}";
public const LATIN_CAPITAL_LETTER_A_WITH_OGONEK = "\u{0104}";
public const LATIN_SMALL_LETTER_A_WITH_OGONEK = "\u{0105}";
public const LATIN_CAPITAL_LETTER_C_WITH_ACUTE = "\u{0106}";
public const LATIN_SMALL_LETTER_C_WITH_ACUTE = "\u{0107}";
public const LATIN_CAPITAL_LETTER_C_WITH_CIRCUMFLEX = "\u{0108}";
public const LATIN_SMALL_LETTER_C_WITH_CIRCUMFLEX = "\u{0109}";
public const LATIN_CAPITAL_LETTER_C_WITH_DOT_ABOVE = "\u{010A}";
public const LATIN_SMALL_LETTER_C_WITH_DOT_ABOVE = "\u{010B}";
public const LATIN_CAPITAL_LETTER_C_WITH_CARON = "\u{010C}";
public const LATIN_SMALL_LETTER_C_WITH_CARON = "\u{010D}";
public const LATIN_CAPITAL_LETTER_D_WITH_CARON = "\u{010E}";
public const LATIN_SMALL_LETTER_D_WITH_CARON = "\u{010F}";
public const LATIN_CAPITAL_LETTER_D_WITH_STROKE = "\u{0110}";
public const LATIN_SMALL_LETTER_D_WITH_STROKE = "\u{0111}";
public const LATIN_CAPITAL_LETTER_E_WITH_MACRON = "\u{0112}";
public const LATIN_SMALL_LETTER_E_WITH_MACRON = "\u{0113}";
public const LATIN_CAPITAL_LETTER_E_WITH_BREVE = "\u{0114}";
public const LATIN_SMALL_LETTER_E_WITH_BREVE = "\u{0115}";
public const LATIN_CAPITAL_LETTER_E_WITH_DOT_ABOVE = "\u{0116}";
public const LATIN_SMALL_LETTER_E_WITH_DOT_ABOVE = "\u{0117}";
public const LATIN_CAPITAL_LETTER_E_WITH_OGONEK = "\u{0118}";
public const LATIN_SMALL_LETTER_E_WITH_OGONEK = "\u{0119}";
public const LATIN_CAPITAL_LETTER_E_WITH_CARON = "\u{011A}";
public const LATIN_SMALL_LETTER_E_WITH_CARON = "\u{011B}";
public const LATIN_CAPITAL_LETTER_G_WITH_CIRCUMFLEX = "\u{011C}";
public const LATIN_SMALL_LETTER_G_WITH_CIRCUMFLEX = "\u{011D}";
public const LATIN_CAPITAL_LETTER_G_WITH_BREVE = "\u{011E}";
public const LATIN_SMALL_LETTER_G_WITH_BREVE = "\u{011F}";
public const LATIN_CAPITAL_LETTER_G_WITH_DOT_ABOVE = "\u{0120}";
public const LATIN_SMALL_LETTER_G_WITH_DOT_ABOVE = "\u{0121}";
public const LATIN_CAPITAL_LETTER_G_WITH_CEDILLA = "\u{0122}";
public const LATIN_SMALL_LETTER_G_WITH_CEDILLA = "\u{0123}";
public const LATIN_CAPITAL_LETTER_H_WITH_CIRCUMFLEX = "\u{0124}";
public const LATIN_SMALL_LETTER_H_WITH_CIRCUMFLEX = "\u{0125}";
public const LATIN_CAPITAL_LETTER_H_WITH_STROKE = "\u{0126}";
public const LATIN_SMALL_LETTER_H_WITH_STROKE = "\u{0127}";
public const LATIN_CAPITAL_LETTER_I_WITH_TILDE = "\u{0128}";
public const LATIN_SMALL_LETTER_I_WITH_TILDE = "\u{0129}";
public const LATIN_CAPITAL_LETTER_I_WITH_MACRON = "\u{012A}";
public const LATIN_SMALL_LETTER_I_WITH_MACRON = "\u{012B}";
public const LATIN_CAPITAL_LETTER_I_WITH_BREVE = "\u{012C}";
public const LATIN_SMALL_LETTER_I_WITH_BREVE = "\u{012D}";
public const LATIN_CAPITAL_LETTER_I_WITH_OGONEK = "\u{012E}";
public const LATIN_SMALL_LETTER_I_WITH_OGONEK = "\u{012F}";
public const LATIN_CAPITAL_LETTER_I_WITH_DOT_ABOVE = "\u{0130}";
public const LATIN_SMALL_LETTER_DOTLESS_I = "\u{0131}";
public const LATIN_CAPITAL_LIGATURE_IJ = "\u{0132}";
public const LATIN_SMALL_LIGATURE_IJ = "\u{0133}";
public const LATIN_CAPITAL_LETTER_J_WITH_CIRCUMFLEX = "\u{0134}";
public const LATIN_SMALL_LETTER_J_WITH_CIRCUMFLEX = "\u{0135}";
public const LATIN_CAPITAL_LETTER_K_WITH_CEDILLA = "\u{0136}";
public const LATIN_SMALL_LETTER_K_WITH_CEDILLA = "\u{0137}";
public const LATIN_SMALL_LETTER_KRA = "\u{0138}";
public const LATIN_CAPITAL_LETTER_L_WITH_ACUTE = "\u{0139}";
public const LATIN_SMALL_LETTER_L_WITH_ACUTE = "\u{013A}";
public const LATIN_CAPITAL_LETTER_L_WITH_CEDILLA = "\u{013B}";
public const LATIN_SMALL_LETTER_L_WITH_CEDILLA = "\u{013C}";
public const LATIN_CAPITAL_LETTER_L_WITH_CARON = "\u{013D}";
public const LATIN_SMALL_LETTER_L_WITH_CARON = "\u{013E}";
public const LATIN_CAPITAL_LETTER_L_WITH_MIDDLE_DOT = "\u{013F}";
public const LATIN_SMALL_LETTER_L_WITH_MIDDLE_DOT = "\u{0140}";
public const LATIN_CAPITAL_LETTER_L_WITH_STROKE = "\u{0141}";
public const LATIN_SMALL_LETTER_L_WITH_STROKE = "\u{0142}";
public const LATIN_CAPITAL_LETTER_N_WITH_ACUTE = "\u{0143}";
public const LATIN_SMALL_LETTER_N_WITH_ACUTE = "\u{0144}";
public const LATIN_CAPITAL_LETTER_N_WITH_CEDILLA = "\u{0145}";
public const LATIN_SMALL_LETTER_N_WITH_CEDILLA = "\u{0146}";
public const LATIN_CAPITAL_LETTER_N_WITH_CARON = "\u{0147}";
public const LATIN_SMALL_LETTER_N_WITH_CARON = "\u{0148}";
public const LATIN_SMALL_LETTER_N_PRECEDED_BY_APOSTROPHE = "\u{0149}";
public const LATIN_CAPITAL_LETTER_ENG = "\u{014A}";
public const LATIN_SMALL_LETTER_ENG = "\u{014B}";
public const LATIN_CAPITAL_LETTER_O_WITH_MACRON = "\u{014C}";
public const LATIN_SMALL_LETTER_O_WITH_MACRON = "\u{014D}";
public const LATIN_CAPITAL_LETTER_O_WITH_BREVE = "\u{014E}";
public const LATIN_SMALL_LETTER_O_WITH_BREVE = "\u{014F}";
public const LATIN_CAPITAL_LETTER_O_WITH_DOUBLE_ACUTE = "\u{0150}";
public const LATIN_SMALL_LETTER_O_WITH_DOUBLE_ACUTE = "\u{0151}";
public const LATIN_CAPITAL_LIGATURE_OE = "\u{0152}";
public const LATIN_SMALL_LIGATURE_OE = "\u{0153}";
public const LATIN_CAPITAL_LETTER_R_WITH_ACUTE = "\u{0154}";
public const LATIN_SMALL_LETTER_R_WITH_ACUTE = "\u{0155}";
public const LATIN_CAPITAL_LETTER_R_WITH_CEDILLA = "\u{0156}";
public const LATIN_SMALL_LETTER_R_WITH_CEDILLA = "\u{0157}";
public const LATIN_CAPITAL_LETTER_R_WITH_CARON = "\u{0158}";
public const LATIN_SMALL_LETTER_R_WITH_CARON = "\u{0159}";
public const LATIN_CAPITAL_LETTER_S_WITH_ACUTE = "\u{015A}";
public const LATIN_SMALL_LETTER_S_WITH_ACUTE = "\u{015B}";
public const LATIN_CAPITAL_LETTER_S_WITH_CIRCUMFLEX = "\u{015C}";
public const LATIN_SMALL_LETTER_S_WITH_CIRCUMFLEX = "\u{015D}";
public const LATIN_CAPITAL_LETTER_S_WITH_CEDILLA = "\u{015E}";
public const LATIN_SMALL_LETTER_S_WITH_CEDILLA = "\u{015F}";
public const LATIN_CAPITAL_LETTER_S_WITH_CARON = "\u{0160}";
public const LATIN_SMALL_LETTER_S_WITH_CARON = "\u{0161}";
public const LATIN_CAPITAL_LETTER_T_WITH_CEDILLA = "\u{0162}";
public const LATIN_SMALL_LETTER_T_WITH_CEDILLA = "\u{0163}";
public const LATIN_CAPITAL_LETTER_T_WITH_CARON = "\u{0164}";
public const LATIN_SMALL_LETTER_T_WITH_CARON = "\u{0165}";
public const LATIN_CAPITAL_LETTER_T_WITH_STROKE = "\u{0166}";
public const LATIN_SMALL_LETTER_T_WITH_STROKE = "\u{0167}";
public const LATIN_CAPITAL_LETTER_U_WITH_TILDE = "\u{0168}";
public const LATIN_SMALL_LETTER_U_WITH_TILDE = "\u{0169}";
public const LATIN_CAPITAL_LETTER_U_WITH_MACRON = "\u{016A}";
public const LATIN_SMALL_LETTER_U_WITH_MACRON = "\u{016B}";
public const LATIN_CAPITAL_LETTER_U_WITH_BREVE = "\u{016C}";
public const LATIN_SMALL_LETTER_U_WITH_BREVE = "\u{016D}";
public const LATIN_CAPITAL_LETTER_U_WITH_RING_ABOVE = "\u{016E}";
public const LATIN_SMALL_LETTER_U_WITH_RING_ABOVE = "\u{016F}";
public const LATIN_CAPITAL_LETTER_U_WITH_DOUBLE_ACUTE = "\u{0170}";
public const LATIN_SMALL_LETTER_U_WITH_DOUBLE_ACUTE = "\u{0171}";
public const LATIN_CAPITAL_LETTER_U_WITH_OGONEK = "\u{0172}";
public const LATIN_SMALL_LETTER_U_WITH_OGONEK = "\u{0173}";
public const LATIN_CAPITAL_LETTER_W_WITH_CIRCUMFLEX = "\u{0174}";
public const LATIN_SMALL_LETTER_W_WITH_CIRCUMFLEX = "\u{0175}";
public const LATIN_CAPITAL_LETTER_Y_WITH_CIRCUMFLEX = "\u{0176}";
public const LATIN_SMALL_LETTER_Y_WITH_CIRCUMFLEX = "\u{0177}";
public const LATIN_CAPITAL_LETTER_Y_WITH_DIAERESIS = "\u{0178}";
public const LATIN_CAPITAL_LETTER_Z_WITH_ACUTE = "\u{0179}";
public const LATIN_SMALL_LETTER_Z_WITH_ACUTE = "\u{017A}";
public const LATIN_CAPITAL_LETTER_Z_WITH_DOT_ABOVE = "\u{017B}";
public const LATIN_SMALL_LETTER_Z_WITH_DOT_ABOVE = "\u{017C}";
public const LATIN_CAPITAL_LETTER_Z_WITH_CARON = "\u{017D}";
public const LATIN_SMALL_LETTER_Z_WITH_CARON = "\u{017E}";
public const LATIN_SMALL_LETTER_LONG_S = "\u{017F}";
public const LATIN_SMALL_LETTER_B_WITH_STROKE = "\u{0180}";
public const LATIN_CAPITAL_LETTER_B_WITH_HOOK = "\u{0181}";
public const LATIN_CAPITAL_LETTER_B_WITH_TOPBAR = "\u{0182}";
public const LATIN_SMALL_LETTER_B_WITH_TOPBAR = "\u{0183}";
public const LATIN_CAPITAL_LETTER_F_WITH_HOOK = "\u{0191}";
public const LATIN_SMALL_LETTER_F_WITH_HOOK = "\u{0192}";
public const LATIN_SMALL_LETTER_O_WITH_HORN = "\u{01A1}";
public const LATIN_CAPITAL_LETTER_O_WITH_HORN = "\u{01A0}";
public const LATIN_CAPITAL_LETTER_U_WITH_HORN = "\u{01AF}";
public const LATIN_SMALL_LETTER_U_WITH_HORN = "\u{01B0}";
public const LATIN_CAPITAL_LETTER_A_WITH_CARON = "\u{01CD}";
public const LATIN_SMALL_LETTER_A_WITH_CARON = "\u{01CE}";
public const LATIN_CAPITAL_LETTER_I_WITH_CARON = "\u{01CF}";
public const LATIN_SMALL_LETTER_I_WITH_CARON = "\u{01D0}";
public const LATIN_CAPITAL_LETTER_O_WITH_CARON = "\u{01D1}";
public const LATIN_SMALL_LETTER_O_WITH_CARON = "\u{01D2}";
public const LATIN_CAPITAL_LETTER_U_WITH_CARON = "\u{01D3}";
public const LATIN_SMALL_LETTER_U_WITH_CARON = "\u{01D4}";
public const LATIN_CAPITAL_LETTER_U_WITH_DIAERESIS_AND_MACRON = "\u{01D5}";
public const LATIN_SMALL_LETTER_U_WITH_DIAERESIS_AND_MACRON = "\u{01D6}";
public const LATIN_CAPITAL_LETTER_U_WITH_DIAERESIS_AND_ACUTE = "\u{01D7}";
public const LATIN_SMALL_LETTER_U_WITH_DIAERESIS_AND_ACUTE = "\u{01D8}";
public const LATIN_CAPITAL_LETTER_U_WITH_DIAERESIS_AND_CARON = "\u{01D9}";
public const LATIN_SMALL_LETTER_U_WITH_DIAERESIS_AND_CARON = "\u{01DA}";
public const LATIN_CAPITAL_LETTER_U_WITH_DIAERESIS_AND_GRAVE = "\u{01DB}";
public const LATIN_SMALL_LETTER_U_WITH_DIAERESIS_AND_GRAVE = "\u{01DC}";
public const LATIN_CAPITAL_LETTER_A_WITH_DIAERESIS_AND_MACRON = "\u{01DE}";
public const LATIN_SMALL_LETTER_A_WITH_DIAERESIS_AND_MACRON = "\u{01DF}";
public const LATIN_CAPITAL_LETTER_A_WITH_DOT_ABOVE_AND_MACRON = "\u{01E0}";
public const LATIN_SMALL_LETTER_A_WITH_DOT_ABOVE_AND_MACRON = "\u{01E1}";
public const LATIN_CAPITAL_LETTER_AE_WITH_MACRON = "\u{01E2}";
public const LATIN_SMALL_LETTER_AE_WITH_MACRON = "\u{01E3}";
public const LATIN_CAPITAL_LETTER_G_WITH_CARON = "\u{01E6}";
public const LATIN_SMALL_LETTER_G_WITH_CARON = "\u{01E7}";
public const LATIN_CAPITAL_LETTER_K_WITH_CARON = "\u{01E8}";
public const LATIN_SMALL_LETTER_K_WITH_CARON = "\u{01E9}";
public const LATIN_CAPITAL_LETTER_O_WITH_OGONEK = "\u{01EA}";
public const LATIN_SMALL_LETTER_O_WITH_OGONEK = "\u{01EB}";
public const LATIN_CAPITAL_LETTER_O_WITH_OGONEK_AND_MACRON = "\u{01EC}";
public const LATIN_SMALL_LETTER_O_WITH_OGONEK_AND_MACRON = "\u{01ED}";
public const LATIN_SMALL_LETTER_J_WITH_CARON = "\u{01F0}";
public const LATIN_CAPITAL_LETTER_G_WITH_ACUTE = "\u{01F4}";
public const LATIN_SMALL_LETTER_G_WITH_ACUTE = "\u{01F5}";
public const LATIN_CAPITAL_LETTER_N_WITH_GRAVE = "\u{01F8}";
public const LATIN_SMALL_LETTER_N_WITH_GRAVE = "\u{01F9}";
public const LATIN_CAPITAL_LETTER_A_WITH_RING_ABOVE_AND_ACUTE = "\u{01FA}";
public const LATIN_SMALL_LETTER_A_WITH_RING_ABOVE_AND_ACUTE = "\u{01FB}";
public const LATIN_CAPITAL_LETTER_AE_WITH_ACUTE = "\u{01FC}";
public const LATIN_SMALL_LETTER_AE_WITH_ACUTE = "\u{01FD}";
public const LATIN_CAPITAL_LETTER_O_WITH_STROKE_AND_ACUTE = "\u{01FE}";
public const LATIN_SMALL_LETTER_O_WITH_STROKE_AND_ACUTE = "\u{01FF}";
public const LATIN_CAPITAL_LETTER_S_WITH_COMMA_BELOW = "\u{0218}";
public const LATIN_SMALL_LETTER_S_WITH_COMMA_BELOW = "\u{0219}";
public const LATIN_CAPITAL_LETTER_T_WITH_COMMA_BELOW = "\u{021A}";
public const LATIN_SMALL_LETTER_T_WITH_COMMA_BELOW = "\u{021B}";
public const LATIN_CAPITAL_LETTER_H_WITH_CARON = "\u{021E}";
public const LATIN_SMALL_LETTER_H_WITH_CARON = "\u{021F}";
public const LATIN_CAPITAL_LETTER_A_WITH_DOT_ABOVE = "\u{0226}";
public const LATIN_SMALL_LETTER_A_WITH_DOT_ABOVE = "\u{0227}";
public const LATIN_CAPITAL_LETTER_E_WITH_CEDILLA = "\u{0228}";
public const LATIN_SMALL_LETTER_E_WITH_CEDILLA = "\u{0229}";
public const LATIN_CAPITAL_LETTER_O_WITH_DIAERESIS_AND_MACRON = "\u{022A}";
public const LATIN_SMALL_LETTER_O_WITH_DIAERESIS_AND_MACRON = "\u{022B}";
public const LATIN_CAPITAL_LETTER_O_WITH_TILDE_AND_MACRON = "\u{022C}";
public const LATIN_SMALL_LETTER_O_WITH_TILDE_AND_MACRON = "\u{022D}";
public const LATIN_CAPITAL_LETTER_O_WITH_DOT_ABOVE = "\u{022E}";
public const LATIN_SMALL_LETTER_O_WITH_DOT_ABOVE = "\u{022F}";
public const LATIN_CAPITAL_LETTER_O_WITH_DOT_ABOVE_AND_MACRON = "\u{0230}";
public const LATIN_SMALL_LETTER_O_WITH_DOT_ABOVE_AND_MACRON = "\u{0231}";
public const LATIN_CAPITAL_LETTER_Y_WITH_MACRON = "\u{0232}";
public const LATIN_SMALL_LETTER_Y_WITH_MACRON = "\u{0233}";
public const MODIFIER_LETTER_PRIME = "\u{02B9}";
public const MODIFIER_LETTER_DOUBLE_PRIME = "\u{02BA}";
public const MODIFIER_LETTER_TURNED_COMMA = "\u{02BB}";
public const MODIFIER_LETTER_APOSTROPHE = "\u{02BC}";
public const MODIFIER_LETTER_CIRCUMFLEX_ACCENT = "\u{02C6}";
public const CARON = "\u{02C7}";
public const BREVE = "\u{02D8}";
public const DOT_ABOVE = "\u{02D9}";
public const RING_ABOVE = "\u{02DA}";
public const OGONEK = "\u{02DB}";
public const SMALL_TILDE = "\u{02DC}";
public const DOUBLE_ACUTE_ACCENT = "\u{02DD}";
public const COMBINING_GRAVE_ACCENT = "\u{0300}";
public const COMBINING_ACUTE_ACCENT = "\u{0301}";
public const COMBINING_CIRCUMFLEX_ACCENT = "\u{0302}";
public const COMBINING_TILDE = "\u{0303}";
public const COMBINING_MACRON = "\u{0304}";
public const COMBINING_OVERLINE = "\u{0305}";
public const COMBINING_BREVE = "\u{0306}";
public const COMBINING_DOT_ABOVE = "\u{0307}";
public const COMBINING_DIAERESIS = "\u{0308}";
public const COMBINING_HOOK_ABOVE = "\u{0309}";
public const COMBINING_RING_ABOVE = "\u{030A}";
public const COMBINING_DOUBLE_ACUTE_ACCENT = "\u{030B}";
public const COMBINING_CARON = "\u{030C}";
public const COMBINING_CANDRABINDU = "\u{0310}";
public const COMBINING_COMMA_ABOVE = "\u{0313}";
public const COMBINING_COMMA_ABOVE_RIGHT = "\u{0315}";
public const COMBINING_HORN = "\u{031B}";
public const COMBINING_LEFT_HALF_RING_BELOW = "\u{031C}";
public const COMBINING_DOT_BELOW = "\u{0323}";
public const COMBINING_DIAERESIS_BELOW = "\u{0324}";
public const COMBINING_RING_BELOW = "\u{0325}";
public const COMBINING_COMMA_BELOW = "\u{0326}";
public const COMBINING_CEDILLA = "\u{0327}";
public const COMBINING_OGONEK = "\u{0328}";
public const COMBINING_BRIDGE_BELOW = "\u{032A}";
public const COMBINING_BREVE_BELOW = "\u{032E}";
public const COMBINING_LOW_LINE = "\u{0332}";
public const COMBINING_DOUBLE_LOW_LINE = "\u{0333}";
public const COMBINING_SHORT_STROKE_OVERLAY = "\u{0335}";
public const COMBINING_LONG_STROKE_OVERLAY = "\u{0336}";
public const COMBINING_SHORT_SOLIDUS_OVERLAY = "\u{0338}";
public const COMBINING_LONG_SOLIDUS_OVERLAY = "\u{0338}";
public const COMBINING_DOUBLE_TILDE = "\u{0360}";
public const COMBINING_DOUBLE_INVERTED_BREVE = "\u{0361}";
public const GREEK_CAPITAL_LETTER_GAMMA = "\u{0393}";
public const GREEK_CAPITAL_LETTER_THETA = "\u{0398}";
public const GREEK_CAPITAL_LETTER_SIGMA = "\u{03A3}";
public const GREEK_CAPITAL_LETTER_PHI = "\u{03A6}";
public const GREEK_CAPITAL_LETTER_OMEGA = "\u{03A9}";
public const GREEK_SMALL_LETTER_ALPHA = "\u{03B1}";
public const GREEK_SMALL_LETTER_DELTA = "\u{03B4}";
public const GREEK_SMALL_LETTER_EPSILON = "\u{03B5}";
public const GREEK_SMALL_LETTER_PI = "\u{03C0}";
public const GREEK_SMALL_LETTER_SIGMA = "\u{03C3}";
public const GREEK_SMALL_LETTER_TAU = "\u{03C4}";
public const GREEK_SMALL_LETTER_PHI = "\u{03C6}";
public const CYRILLIC_CAPITAL_LETTER_IO = "\u{0401}";
public const CYRILLIC_CAPITAL_LETTER_DJE = "\u{0402}";
public const CYRILLIC_CAPITAL_LETTER_GJE = "\u{0403}";
public const CYRILLIC_CAPITAL_LETTER_UKRANIAN_IE = "\u{0404}";
public const CYRILLIC_CAPITAL_LETTER_DZE = "\u{0405}";
public const CYRILLIC_CAPITAL_LETTER_BYELORUSSIAN_UKRAINIAN_I = "\u{0406}";
public const CYRILLIC_CAPITAL_LETTER_YI = "\u{0407}";
public const CYRILLIC_CAPITAL_LETTER_JE = "\u{0408}";
public const CYRILLIC_CAPITAL_LETTER_LJE = "\u{0409}";
public const CYRILLIC_CAPITAL_LETTER_NJE = "\u{040A}";
public const CYRILLIC_CAPITAL_LETTER_TSHE = "\u{040B}";
public const CYRILLIC_CAPITAL_LETTER_KJE = "\u{040C}";
public const CYRILLIC_CAPITAL_LETTER_SHORT_U = "\u{040E}";
public const CYRILLIC_CAPITAL_LETTER_DZHE = "\u{040F}";
public const CYRILLIC_CAPITAL_LETTER_A = "\u{0410}";
public const CYRILLIC_CAPITAL_LETTER_BE = "\u{0411}";
public const CYRILLIC_CAPITAL_LETTER_VE = "\u{0412}";
public const CYRILLIC_CAPITAL_LETTER_GHE = "\u{0413}";
public const CYRILLIC_CAPITAL_LETTER_DE = "\u{0414}";
public const CYRILLIC_CAPITAL_LETTER_IE = "\u{0415}";
public const CYRILLIC_CAPITAL_LETTER_ZHE = "\u{0416}";
public const CYRILLIC_CAPITAL_LETTER_ZE = "\u{0417}";
public const CYRILLIC_CAPITAL_LETTER_I = "\u{0418}";
public const CYRILLIC_CAPITAL_LETTER_SHORT_I = "\u{0419}";
public const CYRILLIC_CAPITAL_LETTER_KA = "\u{041A}";
public const CYRILLIC_CAPITAL_LETTER_EL = "\u{041B}";
public const CYRILLIC_CAPITAL_LETTER_EM = "\u{041C}";
public const CYRILLIC_CAPITAL_LETTER_EN = "\u{041D}";
public const CYRILLIC_CAPITAL_LETTER_O = "\u{041E}";
public const CYRILLIC_CAPITAL_LETTER_PE = "\u{041F}";
public const CYRILLIC_CAPITAL_LETTER_ER = "\u{0420}";
public const CYRILLIC_CAPITAL_LETTER_ES = "\u{0421}";
public const CYRILLIC_CAPITAL_LETTER_TE = "\u{0422}";
public const CYRILLIC_CAPITAL_LETTER_U = "\u{0423}";
public const CYRILLIC_CAPITAL_LETTER_EF = "\u{0424}";
public const CYRILLIC_CAPITAL_LETTER_HA = "\u{0425}";
public const CYRILLIC_CAPITAL_LETTER_TSE = "\u{0426}";
public const CYRILLIC_CAPITAL_LETTER_CHE = "\u{0427}";
public const CYRILLIC_CAPITAL_LETTER_SHA = "\u{0428}";
public const CYRILLIC_CAPITAL_LETTER_SHCHA = "\u{0429}";
public const CYRILLIC_CAPITAL_LETTER_HARD_SIGN = "\u{042A}";
public const CYRILLIC_CAPITAL_LETTER_YERU = "\u{042B}";
public const CYRILLIC_CAPITAL_LETTER_SOFT_SIGN = "\u{042C}";
public const CYRILLIC_CAPITAL_LETTER_E = "\u{042D}";
public const CYRILLIC_CAPITAL_LETTER_YU = "\u{042E}";
public const CYRILLIC_CAPITAL_LETTER_YA = "\u{042F}";
public const CYRILLIC_SMALL_LETTER_A = "\u{0430}";
public const CYRILLIC_SMALL_LETTER_BE = "\u{0431}";
public const CYRILLIC_SMALL_LETTER_VE = "\u{0432}";
public const CYRILLIC_SMALL_LETTER_GHE = "\u{0433}";
public const CYRILLIC_SMALL_LETTER_DE = "\u{0434}";
public const CYRILLIC_SMALL_LETTER_IE = "\u{0435}";
public const CYRILLIC_SMALL_LETTER_ZHE = "\u{0436}";
public const CYRILLIC_SMALL_LETTER_ZE = "\u{0437}";
public const CYRILLIC_SMALL_LETTER_I = "\u{0438}";
public const CYRILLIC_SMALL_LETTER_SHORT_I = "\u{0439}";
public const CYRILLIC_SMALL_LETTER_KA = "\u{043A}";
public const CYRILLIC_SMALL_LETTER_EL = "\u{043B}";
public const CYRILLIC_SMALL_LETTER_EM = "\u{043C}";
public const CYRILLIC_SMALL_LETTER_EN = "\u{043D}";
public const CYRILLIC_SMALL_LETTER_O = "\u{043E}";
public const CYRILLIC_SMALL_LETTER_PE = "\u{043F}";
public const CYRILLIC_SMALL_LETTER_ER = "\u{0440}";
public const CYRILLIC_SMALL_LETTER_ES = "\u{0441}";
public const CYRILLIC_SMALL_LETTER_TE = "\u{0442}";
public const CYRILLIC_SMALL_LETTER_U = "\u{0443}";
public const CYRILLIC_SMALL_LETTER_EF = "\u{0444}";
public const CYRILLIC_SMALL_LETTER_HA = "\u{0445}";
public const CYRILLIC_SMALL_LETTER_TSE = "\u{0446}";
public const CYRILLIC_SMALL_LETTER_CHE = "\u{0447}";
public const CYRILLIC_SMALL_LETTER_SHA = "\u{0448}";
public const CYRILLIC_SMALL_LETTER_SHCHA = "\u{0449}";
public const CYRILLIC_SMALL_LETTER_HARD_SIGN = "\u{044A}";
public const CYRILLIC_SMALL_LETTER_YERU = "\u{044B}";
public const CYRILLIC_SMALL_LETTER_SOFT_SIGN = "\u{044C}";
public const CYRILLIC_SMALL_LETTER_E = "\u{044D}";
public const CYRILLIC_SMALL_LETTER_YU = "\u{044E}";
public const CYRILLIC_SMALL_LETTER_YA = "\u{044F}";
public const CYRILLIC_SMALL_LETTER_IO = "\u{0451}";
public const CYRILLIC_SMALL_LETTER_DJE = "\u{0452}";
public const CYRILLIC_SMALL_LETTER_GJE = "\u{0453}";
public const CYRILLIC_SMALL_LETTER_UKRANIAN_IE = "\u{0454}";
public const CYRILLIC_SMALL_LETTER_DZE = "\u{0455}";
public const CYRILLIC_SMALL_LETTER_BYELORUSSIAN_UKRAINIAN_I = "\u{0456}";
public const CYRILLIC_SMALL_LETTER_YI = "\u{0457}";
public const CYRILLIC_SMALL_LETTER_JE = "\u{0458}";
public const CYRILLIC_SMALL_LETTER_LJE = "\u{0459}";
public const CYRILLIC_SMALL_LETTER_NJE = "\u{045A}";
public const CYRILLIC_SMALL_LETTER_TSHE = "\u{045B}";
public const CYRILLIC_SMALL_LETTER_KJE = "\u{045C}";
public const CYRILLIC_SMALL_LETTER_SHORT_U = "\u{045E}";
public const CYRILLIC_SMALL_LETTER_DZHE = "\u{045F}";
public const CYRILLIC_CAPITAL_LETTER_GHE_WITH_UPTURN = "\u{0490}";
public const CYRILLIC_SMALL_LETTER_GHE_WITH_UPTURN = "\u{0491}";
public const ARABIC_LETTER_HAMZA = "\u{0621}";
public const ARABIC_LETTER_ALEF = "\u{0627}";
public const ARABIC_LETTER_BEH = "\u{0628}";
public const ARABIC_LETTER_TEH_MARBUTA = "\u{0629}";
public const ARABIC_LETTER_TEH = "\u{062A}";
public const ARABIC_LETTER_THEH = "\u{062B}";
public const ARABIC_LETTER_JEEM = "\u{062C}";
public const ARABIC_LETTER_HAH = "\u{062D}";
public const ARABIC_LETTER_KHAH = "\u{062E}";
public const ARABIC_LETTER_DAL = "\u{062F}";
public const ARABIC_LETTER_THAL = "\u{0630}";
public const ARABIC_LETTER_REH = "\u{0631}";
public const ARABIC_LETTER_ZAIN = "\u{0632}";
public const ARABIC_LETTER_SEEN = "\u{0633}";
public const ARABIC_LETTER_SHEEN = "\u{0634}";
public const ARABIC_LETTER_SAD = "\u{0635}";
public const ARABIC_LETTER_DAD = "\u{0636}";
public const ARABIC_LETTER_TAH = "\u{0637}";
public const ARABIC_LETTER_ZAH = "\u{0638}";
public const ARABIC_LETTER_AIN = "\u{0639}";
public const ARABIC_LETTER_GHAIN = "\u{063A}";
public const ARABIC_LETTER_FEH = "\u{0641}";
public const ARABIC_LETTER_QAF = "\u{0642}";
public const ARABIC_LETTER_KAF = "\u{0643}";
public const ARABIC_LETTER_LAM = "\u{0644}";
public const ARABIC_LETTER_MEEM = "\u{0645}";
public const ARABIC_LETTER_NOON = "\u{0646}";
public const ARABIC_LETTER_HEH = "\u{0647}";
public const ARABIC_LETTER_WAW = "\u{0648}";
public const ARABIC_LETTER_ALEF_MAKSURA = "\u{0649}";
public const ARABIC_LETTER_YEH = "\u{064A}";
public const LATIN_CAPITAL_LETTER_A_WITH_RING_BELOW = "\u{1E00}";
public const LATIN_SMALL_LETTER_A_WITH_RING_BELOW = "\u{1E01}";
public const LATIN_CAPITAL_LETTER_B_WITH_DOT_ABOVE = "\u{1E02}";
public const LATIN_SMALL_LETTER_B_WITH_DOT_ABOVE = "\u{1E03}";
public const LATIN_CAPITAL_LETTER_B_WITH_DOT_BELOW = "\u{1E04}";
public const LATIN_SMALL_LETTER_B_WITH_DOT_BELOW = "\u{1E05}";
public const LATIN_CAPITAL_LETTER_C_WITH_CEDILLA_AND_ACUTE = "\u{1E08}";
public const LATIN_SMALL_LETTER_C_WITH_CEDILLA_AND_ACUTE = "\u{1E09}";
public const LATIN_CAPITAL_LETTER_D_WITH_DOT_ABOVE = "\u{1E0A}";
public const LATIN_SMALL_LETTER_D_WITH_DOT_ABOVE = "\u{1E0B}";
public const LATIN_CAPITAL_LETTER_D_WITH_DOT_BELOW = "\u{1E0C}";
public const LATIN_SMALL_LETTER_D_WITH_DOT_BELOW = "\u{1E0D}";
public const LATIN_CAPITAL_LETTER_SHARP_S = "\u{1E9E}";
public const LATIN_CAPITAL_LETTER_D_WITH_CEDILLA = "\u{1E10}";
public const LATIN_SMALL_LETTER_D_WITH_CEDILLA = "\u{1E11}";
public const LATIN_CAPITAL_LETTER_E_WITH_MACRON_AND_GRAVE = "\u{1E14}";
public const LATIN_SMALL_LETTER_E_WITH_MACRON_AND_GRAVE = "\u{1E15}";
public const LATIN_CAPITAL_LETTER_E_WITH_MACRON_AND_ACUTE = "\u{1E16}";
public const LATIN_SMALL_LETTER_E_WITH_MACRON_AND_ACUTE = "\u{1E17}";
public const LATIN_CAPITAL_LETTER_E_WITH_CEDILLA_AND_BREVE = "\u{1E1C}";
public const LATIN_SMALL_LETTER_E_WITH_CEDILLA_AND_BREVE = "\u{1E1D}";
public const LATIN_CAPITAL_LETTER_F_WITH_DOT_ABOVE = "\u{1E1E}";
public const LATIN_SMALL_LETTER_F_WITH_DOT_ABOVE = "\u{1E1F}";
public const LATIN_CAPITAL_LETTER_G_WITH_MACRON = "\u{1E20}";
public const LATIN_SMALL_LETTER_G_WITH_MACRON = "\u{1E21}";
public const LATIN_CAPITAL_LETTER_H_WITH_DOT_ABOVE = "\u{1E22}";
public const LATIN_SMALL_LETTER_H_WITH_DOT_ABOVE = "\u{1E23}";
public const LATIN_CAPITAL_LETTER_H_WITH_DOT_BELOW = "\u{1E24}";
public const LATIN_SMALL_LETTER_H_WITH_DOT_BELOW = "\u{1E25}";
public const LATIN_CAPITAL_LETTER_H_WITH_DIAERESIS = "\u{1E26}";
public const LATIN_SMALL_LETTER_H_WITH_DIAERESIS = "\u{1E27}";
public const LATIN_CAPITAL_LETTER_H_WITH_CEDILLA = "\u{1E28}";
public const LATIN_SMALL_LETTER_H_WITH_CEDILLA = "\u{1E29}";
public const LATIN_CAPITAL_LETTER_H_WITH_BREVE_BELOW = "\u{1E2A}";
public const LATIN_SMALL_LETTER_H_WITH_BREVE_BELOW = "\u{1E2B}";
public const LATIN_CAPITAL_LETTER_I_WITH_DIAERESIS_AND_ACUTE = "\u{1E2E}";
public const LATIN_SMALL_LETTER_I_WITH_DIAERESIS_AND_ACUTE = "\u{1E2F}";
public const LATIN_CAPITAL_LETTER_K_WITH_ACUTE = "\u{1E30}";
public const LATIN_SMALL_LETTER_K_WITH_ACUTE = "\u{1E31}";
public const LATIN_CAPITAL_LETTER_K_WITH_DOT_BELOW = "\u{1E32}";
public const LATIN_SMALL_LETTER_K_WITH_DOT_BELOW = "\u{1E33}";
public const LATIN_CAPITAL_LETTER_L_WITH_DOT_BELOW = "\u{1E36}";
public const LATIN_SMALL_LETTER_L_WITH_DOT_BELOW = "\u{1E37}";
public const LATIN_CAPITAL_LETTER_L_WITH_DOT_BELOW_AND_MACRON = "\u{1E38}";
public const LATIN_SMALL_LETTER_L_WITH_DOT_BELOW_AND_MACRON = "\u{1E39}";
public const LATIN_CAPITAL_LETTER_M_WITH_ACUTE = "\u{1E3E}";
public const LATIN_SMALL_LETTER_M_WITH_ACUTE = "\u{1E3F}";
public const LATIN_CAPITAL_LETTER_M_WITH_DOT_ABOVE = "\u{1E40}";
public const LATIN_SMALL_LETTER_M_WITH_DOT_ABOVE = "\u{1E41}";
public const LATIN_CAPITAL_LETTER_M_WITH_DOT_BELOW = "\u{1E42}";
public const LATIN_SMALL_LETTER_M_WITH_DOT_BELOW = "\u{1E43}";
public const LATIN_CAPITAL_LETTER_N_WITH_DOT_ABOVE = "\u{1E44}";
public const LATIN_SMALL_LETTER_N_WITH_DOT_ABOVE = "\u{1E45}";
public const LATIN_CAPITAL_LETTER_N_WITH_DOT_BELOW = "\u{1E46}";
public const LATIN_SMALL_LETTER_N_WITH_DOT_BELOW = "\u{1E47}";
public const LATIN_CAPITAL_LETTER_O_WITH_TILDE_AND_ACUTE = "\u{1E4C}";
public const LATIN_SMALL_LETTER_O_WITH_TILDE_AND_ACUTE = "\u{1E4D}";
public const LATIN_CAPITAL_LETTER_O_WITH_TILDE_AND_DIAERESIS = "\u{1E4E}";
public const LATIN_SMALL_LETTER_O_WITH_TILDE_AND_DIAERESIS = "\u{1E4F}";
public const LATIN_CAPITAL_LETTER_O_WITH_MACRON_AND_GRAVE = "\u{1E50}";
public const LATIN_SMALL_LETTER_O_WITH_MACRON_AND_GRAVE = "\u{1E51}";
public const LATIN_CAPITAL_LETTER_O_WITH_MACRON_AND_ACUTE = "\u{1E52}";
public const LATIN_SMALL_LETTER_O_WITH_MACRON_AND_ACUTE = "\u{1E53}";
public const LATIN_CAPITAL_LETTER_P_WITH_ACUTE = "\u{1E54}";
public const LATIN_SMALL_LETTER_P_WITH_ACUTE = "\u{1E55}";
public const LATIN_CAPITAL_LETTER_P_WITH_DOT_ABOVE = "\u{1E56}";
public const LATIN_SMALL_LETTER_P_WITH_DOT_ABOVE = "\u{1E57}";
public const LATIN_CAPITAL_LETTER_R_WITH_DOT_ABOVE = "\u{1E58}";
public const LATIN_SMALL_LETTER_R_WITH_DOT_ABOVE = "\u{1E59}";
public const LATIN_CAPITAL_LETTER_R_WITH_DOT_BELOW = "\u{1E5A}";
public const LATIN_SMALL_LETTER_R_WITH_DOT_BELOW = "\u{1E5B}";
public const LATIN_CAPITAL_LETTER_R_WITH_DOT_BELOW_AND_MACRON = "\u{1E5C}";
public const LATIN_SMALL_LETTER_R_WITH_DOT_BELOW_AND_MACRON = "\u{1E5D}";
public const LATIN_CAPITAL_LETTER_S_WITH_DOT_ABOVE = "\u{1E60}";
public const LATIN_SMALL_LETTER_S_WITH_DOT_ABOVE = "\u{1E61}";
public const LATIN_CAPITAL_LETTER_S_WITH_DOT_BELOW = "\u{1E62}";
public const LATIN_SMALL_LETTER_S_WITH_DOT_BELOW = "\u{1E63}";
public const LATIN_CAPITAL_LETTER_S_WITH_ACUTE_AND_DOT_ABOVE = "\u{1E64}";
public const LATIN_SMALL_LETTER_S_WITH_ACUTE_AND_DOT_ABOVE = "\u{1E65}";
public const LATIN_CAPITAL_LETTER_S_WITH_CARON_AND_DOT_ABOVE = "\u{1E66}";
public const LATIN_SMALL_LETTER_S_WITH_CARON_AND_DOT_ABOVE = "\u{1E67}";
public const LATIN_CAPITAL_LETTER_S_WITH_DOT_BELOW_AND_DOT_ABOVE = "\u{1E68}";
public const LATIN_SMALL_LETTER_S_WITH_DOT_BELOW_AND_DOT_ABOVE = "\u{1E69}";
public const LATIN_CAPITAL_LETTER_T_WITH_DOT_ABOVE = "\u{1E6A}";
public const LATIN_SMALL_LETTER_T_WITH_DOT_ABOVE = "\u{1E6B}";
public const LATIN_CAPITAL_LETTER_T_WITH_DOT_BELOW = "\u{1E6C}";
public const LATIN_SMALL_LETTER_T_WITH_DOT_BELOW = "\u{1E6D}";
public const LATIN_CAPITAL_LETTER_U_WITH_DIAERESIS_BELOW = "\u{1E72}";
public const LATIN_SMALL_LETTER_U_WITH_DIAERESIS_BELOW = "\u{1E73}";
public const LATIN_CAPITAL_LETTER_U_WITH_TILDE_AND_ACUTE = "\u{1E78}";
public const LATIN_SMALL_LETTER_U_WITH_TILDE_AND_ACUTE = "\u{1E79}";
public const LATIN_CAPITAL_LETTER_U_WITH_MACRON_AND_DIAERESIS = "\u{1E7A}";
public const LATIN_SMALL_LETTER_U_WITH_MACRON_AND_DIAERESIS = "\u{1E7B}";
public const LATIN_CAPITAL_LETTER_V_WITH_TILDE = "\u{1E7C}";
public const LATIN_SMALL_LETTER_V_WITH_TILDE = "\u{1E7D}";
public const LATIN_CAPITAL_LETTER_V_WITH_DOT_BELOW = "\u{1E7E}";
public const LATIN_SMALL_LETTER_V_WITH_DOT_BELOW = "\u{1E7F}";
public const LATIN_CAPITAL_LETTER_W_WITH_GRAVE = "\u{1E80}";
public const LATIN_SMALL_LETTER_W_WITH_GRAVE = "\u{1E81}";
public const LATIN_CAPITAL_LETTER_W_WITH_ACUTE = "\u{1E82}";
public const LATIN_SMALL_LETTER_W_WITH_ACUTE = "\u{1E83}";
public const LATIN_CAPITAL_LETTER_W_WITH_DIAERESIS = "\u{1E84}";
public const LATIN_SMALL_LETTER_W_WITH_DIAERESIS = "\u{1E85}";
public const LATIN_CAPITAL_LETTER_W_WITH_DOT_ABOVE = "\u{1E86}";
public const LATIN_SMALL_LETTER_W_WITH_DOT_ABOVE = "\u{1E87}";
public const LATIN_CAPITAL_LETTER_W_WITH_DOT_BELOW = "\u{1E88}";
public const LATIN_SMALL_LETTER_W_WITH_DOT_BELOW = "\u{1E89}";
public const LATIN_CAPITAL_LETTER_X_WITH_DOT_ABOVE = "\u{1E8A}";
public const LATIN_SMALL_LETTER_X_WITH_DOT_ABOVE = "\u{1E8B}";
public const LATIN_CAPITAL_LETTER_X_WITH_DIAERESIS = "\u{1E8C}";
public const LATIN_SMALL_LETTER_X_WITH_DIAERESIS = "\u{1E8D}";
public const LATIN_CAPITAL_LETTER_Y_WITH_DOT_ABOVE = "\u{1E8E}";
public const LATIN_SMALL_LETTER_Y_WITH_DOT_ABOVE = "\u{1E8F}";
public const LATIN_CAPITAL_LETTER_Z_WITH_CIRCUMFLEX = "\u{1E90}";
public const LATIN_SMALL_LETTER_Z_WITH_CIRCUMFLEX = "\u{1E91}";
public const LATIN_CAPITAL_LETTER_Z_WITH_DOT_BELOW = "\u{1E92}";
public const LATIN_SMALL_LETTER_Z_WITH_DOT_BELOW = "\u{1E93}";
public const LATIN_SMALL_LETTER_T_WITH_DIAERESIS = "\u{1E97}";
public const LATIN_SMALL_LETTER_W_WITH_RING_ABOVE = "\u{1E98}";
public const LATIN_SMALL_LETTER_Y_WITH_RING_ABOVE = "\u{1E99}";
public const LATIN_CAPITAL_LETTER_A_WITH_DOT_BELOW = "\u{1EA0}";
public const LATIN_SMALL_LETTER_A_WITH_DOT_BELOW = "\u{1EA1}";
public const LATIN_CAPITAL_LETTER_A_WITH_HOOK_ABOVE = "\u{1EA2}";
public const LATIN_SMALL_LETTER_A_WITH_HOOK_ABOVE = "\u{1EA3}";
public const LATIN_CAPITAL_LETTER_A_WITH_CIRCUMFLEX_AND_ACUTE = "\u{1EA4}";
public const LATIN_SMALL_LETTER_A_WITH_CIRCUMFLEX_AND_ACUTE = "\u{1EA5}";
public const LATIN_CAPITAL_LETTER_A_WITH_CIRCUMFLEX_AND_GRAVE = "\u{1EA6}";
public const LATIN_SMALL_LETTER_A_WITH_CIRCUMFLEX_AND_GRAVE = "\u{1EA7}";
public const LATIN_CAPITAL_LETTER_A_WITH_CIRCUMFLEX_AND_HOOK_ABOVE = "\u{1EA8}";
public const LATIN_SMALL_LETTER_A_WITH_CIRCUMFLEX_AND_HOOK_ABOVE = "\u{1EA9}";
public const LATIN_CAPITAL_LETTER_A_WITH_CIRCUMFLEX_AND_TILDE = "\u{1EAA}";
public const LATIN_SMALL_LETTER_A_WITH_CIRCUMFLEX_AND_TILDE = "\u{1EAB}";
public const LATIN_CAPITAL_LETTER_A_WITH_CIRCUMFLEX_AND_DOT_BELOW = "\u{1EAC}";
public const LATIN_SMALL_LETTER_A_WITH_CIRCUMFLEX_AND_DOT_BELOW = "\u{1EAD}";
public const LATIN_CAPITAL_LETTER_A_WITH_BREVE_AND_ACUTE = "\u{1EAE}";
public const LATIN_SMALL_LETTER_A_WITH_BREVE_AND_ACUTE = "\u{1EAF}";
public const LATIN_CAPITAL_LETTER_A_WITH_BREVE_AND_GRAVE = "\u{1EB0}";
public const LATIN_SMALL_LETTER_A_WITH_BREVE_AND_GRAVE = "\u{1EB1}";
public const LATIN_CAPITAL_LETTER_A_WITH_BREVE_AND_HOOK_ABOVE = "\u{1EB2}";
public const LATIN_SMALL_LETTER_A_WITH_BREVE_AND_HOOK_ABOVE = "\u{1EB3}";
public const LATIN_CAPITAL_LETTER_A_WITH_BREVE_AND_TILDE = "\u{1EB4}";
public const LATIN_SMALL_LETTER_A_WITH_BREVE_AND_TILDE = "\u{1EB5}";
public const LATIN_CAPITAL_LETTER_A_WITH_BREVE_AND_DOT_BELOW = "\u{1EB6}";
public const LATIN_SMALL_LETTER_A_WITH_BREVE_AND_DOT_BELOW = "\u{1EB7}";
public const LATIN_CAPITAL_LETTER_E_WITH_DOT_BELOW = "\u{1EB8}";
public const LATIN_SMALL_LETTER_E_WITH_DOT_BELOW = "\u{1EB9}";
public const LATIN_CAPITAL_LETTER_E_WITH_HOOK_ABOVE = "\u{1EBA}";
public const LATIN_SMALL_LETTER_E_WITH_HOOK_ABOVE = "\u{1EBB}";
public const LATIN_CAPITAL_LETTER_E_WITH_TILDE = "\u{1EBC}";
public const LATIN_SMALL_LETTER_E_WITH_TILDE = "\u{1EBD}";
public const LATIN_CAPITAL_LETTER_E_WITH_CIRCUMFLEX_AND_ACUTE = "\u{1EBE}";
public const LATIN_SMALL_LETTER_E_WITH_CIRCUMFLEX_AND_ACUTE = "\u{1EBF}";
public const LATIN_CAPITAL_LETTER_E_WITH_CIRCUMFLEX_AND_GRAVE = "\u{1EC0}";
public const LATIN_SMALL_LETTER_E_WITH_CIRCUMFLEX_AND_GRAVE = "\u{1EC1}";
public const LATIN_CAPITAL_LETTER_E_WITH_CIRCUMFLEX_AND_HOOK_ABOVE = "\u{1EC2}";
public const LATIN_SMALL_LETTER_E_WITH_CIRCUMFLEX_AND_HOOK_ABOVE = "\u{1EC3}";
public const LATIN_CAPITAL_LETTER_E_WITH_CIRCUMFLEX_AND_TILDE = "\u{1EC4}";
public const LATIN_SMALL_LETTER_E_WITH_CIRCUMFLEX_AND_TILDE = "\u{1EC5}";
public const LATIN_CAPITAL_LETTER_E_WITH_CIRCUMFLEX_AND_DOT_BELOW = "\u{1EC6}";
public const LATIN_SMALL_LETTER_E_WITH_CIRCUMFLEX_AND_DOT_BELOW = "\u{1EC7}";
public const LATIN_CAPITAL_LETTER_I_WITH_HOOK_ABOVE = "\u{1EC8}";
public const LATIN_SMALL_LETTER_I_WITH_HOOK_ABOVE = "\u{1EC9}";
public const LATIN_CAPITAL_LETTER_I_WITH_DOT_BELOW = "\u{1ECA}";
public const LATIN_SMALL_LETTER_I_WITH_DOT_BELOW = "\u{1ECB}";
public const LATIN_CAPITAL_LETTER_O_WITH_DOT_BELOW = "\u{1ECC}";
public const LATIN_SMALL_LETTER_O_WITH_DOT_BELOW = "\u{1ECD}";
public const LATIN_CAPITAL_LETTER_O_WITH_HOOK_ABOVE = "\u{1ECE}";
public const LATIN_SMALL_LETTER_O_WITH_HOOK_ABOVE = "\u{1ECF}";
public const LATIN_CAPITAL_LETTER_O_WITH_CIRCUMFLEX_AND_ACUTE = "\u{1ED0}";
public const LATIN_SMALL_LETTER_O_WITH_CIRCUMFLEX_AND_ACUTE = "\u{1ED1}";
public const LATIN_CAPITAL_LETTER_O_WITH_CIRCUMFLEX_AND_GRAVE = "\u{1ED2}";
public const LATIN_SMALL_LETTER_O_WITH_CIRCUMFLEX_AND_GRAVE = "\u{1ED3}";
public const LATIN_CAPITAL_LETTER_O_WITH_CIRCUMFLEX_AND_HOOK_ABOVE = "\u{1ED4}";
public const LATIN_SMALL_LETTER_O_WITH_CIRCUMFLEX_AND_HOOK_ABOVE = "\u{1ED5}";
public const LATIN_CAPITAL_LETTER_O_WITH_CIRCUMFLEX_AND_TILDE = "\u{1ED6}";
public const LATIN_SMALL_LETTER_O_WITH_CIRCUMFLEX_AND_TILDE = "\u{1ED7}";
public const LATIN_CAPITAL_LETTER_O_WITH_CIRCUMFLEX_AND_DOT_BELOW = "\u{1ED8}";
public const LATIN_SMALL_LETTER_O_WITH_CIRCUMFLEX_AND_DOT_BELOW = "\u{1ED9}";
public const LATIN_CAPITAL_LETTER_U_WITH_DOT_BELOW = "\u{1EE4}";
public const LATIN_SMALL_LETTER_U_WITH_DOT_BELOW = "\u{1EE5}";
public const LATIN_CAPITAL_LETTER_U_WITH_HOOK_ABOVE = "\u{1EE6}";
public const LATIN_SMALL_LETTER_U_WITH_HOOK_ABOVE = "\u{1EE7}";
public const LATIN_CAPITAL_LETTER_Y_WITH_GRAVE = "\u{1EF2}";
public const LATIN_SMALL_LETTER_Y_WITH_GRAVE = "\u{1EF3}";
public const LATIN_CAPITAL_LETTER_Y_WITH_DOT_BELOW = "\u{1EF4}";
public const LATIN_SMALL_LETTER_Y_WITH_DOT_BELOW = "\u{1EF5}";
public const LATIN_CAPITAL_LETTER_Y_WITH_HOOK_ABOVE = "\u{1EF6}";
public const LATIN_SMALL_LETTER_Y_WITH_HOOK_ABOVE = "\u{1EF7}";
public const LATIN_CAPITAL_LETTER_Y_WITH_TILDE = "\u{1EF8}";
public const LATIN_SMALL_LETTER_Y_WITH_TILDE = "\u{1EF9}";
public const ZERO_WIDTH_NON_JOINER = "\u{200C}";
public const ZERO_WIDTH_JOINER = "\u{200D}";
public const EN_DASH = "\u{2013}";
public const EM_DASH = "\u{2014}";
public const DOUBLE_LOW_LINE = "\u{2017}";
public const LEFT_SINGLE_QUOTATION_MARK = "\u{2018}";
public const RIGHT_SINGLE_QUOTATION_MARK = "\u{2019}";
public const SINGLE_LOW_9_QUOTATION_MARK = "\u{201A}";
public const LEFT_DOUBLE_QUOTATION_MARK = "\u{201C}";
public const RIGHT_DOUBLE_QUOTATION_MARK = "\u{201D}";
public const DOUBLE_LOW_9_QUOTATION_MARK = "\u{201E}";
public const DAGGER = "\u{2020}";
public const DOUBLE_DAGGER = "\u{2021}";
public const BULLET = "\u{2022}";
public const HORIZONTAL_ELLIPSIS = "\u{2026}";
public const PER_MILLE_SIGN = "\u{2030}";
public const SINGLE_LEFT_POINTING_ANGLE_QUOTATION_MARK = "\u{2039}";
public const SINGLE_RIGHT_POINTING_ANGLE_QUOTATION_MARK = "\u{203A}";
public const FRACTION_SLASH = "\u{2044}";
public const SUPERSCRIPT_LATIN_SMALL_LETTER_N = "\u{207F}";
public const PESETA_SIGN = "\u{20A7}";
public const EURO_SIGN = "\u{20AC}";
public const SCRIPT_SMALL_L = "\u{2113}";
public const NUMERO_SIGN = "\u{2116}";
public const SOUND_RECORDING_COPYRIGHT = "\u{2117}";
public const TRADE_MARK_SIGN = "\u{2122}";
public const PARTIAL_DIFFERENTIAL = "\u{2202}";
public const INCREMENT = "\u{2206}";
public const N_ARY_PRODUCT = "\u{220F}";
public const N_ARY_SUMMATION = "\u{2211}";
public const BULLET_OPERATOR = "\u{2219}";
public const SQUARE_ROOT = "\u{221A}";
public const INFINITY = "\u{221E}";
public const INTERSECTION = "\u{2229}";
public const INTEGRAL = "\u{222B}";
public const ALMOST_EQUAL_TO = "\u{2248}";
public const NOT_EQUAL_TO = "\u{2260}";
public const IDENTICAL_TO = "\u{2261}";
public const LESS_THAN_OR_EQUAL_TO = "\u{2264}";
public const GREATER_THAN_OR_EQUAL_TO = "\u{2265}";
public const REVERSED_NOT_SIGN = "\u{2310}";
public const TOP_HALF_INTEGRAL = "\u{2320}";
public const BOTTOM_HALF_INTEGRAL = "\u{2321}";
public const BOX_DRAWINGS_LIGHT_HORIZONTAL = "\u{2500}";
public const BOX_DRAWINGS_LIGHT_VERTICAL = "\u{2502}";
public const BOX_DRAWINGS_LIGHT_DOWN_AND_RIGHT = "\u{250C}";
public const BOX_DRAWINGS_LIGHT_DOWN_AND_LEFT = "\u{2510}";
public const BOX_DRAWINGS_LIGHT_UP_AND_LEFT = "\u{2518}";
public const BOX_DRAWINGS_LIGHT_UP_AND_RIGHT = "\u{2514}";
public const BOX_DRAWINGS_LIGHT_VERTICAL_AND_RIGHT = "\u{251C}";
public const BOX_DRAWINGS_LIGHT_VERTICAL_AND_LEFT = "\u{2524}";
public const BOX_DRAWINGS_LIGHT_DOWN_AND_HORIZONTAL = "\u{252C}";
public const BOX_DRAWINGS_LIGHT_UP_AND_HORIZONTAL = "\u{2534}";
public const BOX_DRAWINGS_LIGHT_VERTICAL_AND_HORIZONTAL = "\u{253C}";
public const BOX_DRAWINGS_DOUBLE_HORIZONTAL = "\u{2550}";
public const BOX_DRAWINGS_DOUBLE_VERTICAL = "\u{2551}";
public const BOX_DRAWINGS_DOWN_SINGLE_AND_RIGHT_DOUBLE = "\u{2552}";
public const BOX_DRAWINGS_DOWN_DOUBLE_AND_RIGHT_SINGLE = "\u{2553}";
public const BOX_DRAWINGS_DOUBLE_DOWN_AND_RIGHT = "\u{2554}";
public const BOX_DRAWINGS_DOWN_SINGLE_AND_LEFT_DOUBLE = "\u{2555}";
public const BOX_DRAWINGS_DOWN_DOUBLE_AND_LEFT_SINGLE = "\u{2556}";
public const BOX_DRAWINGS_DOUBLE_DOWN_AND_LEFT = "\u{2557}";
public const BOX_DRAWINGS_UP_SINGLE_AND_RIGHT_DOUBLE = "\u{2558}";
public const BOX_DRAWINGS_UP_DOUBLE_AND_RIGHT_SINGLE = "\u{2559}";
public const BOX_DRAWINGS_DOUBLE_UP_AND_RIGHT = "\u{255A}";
public const BOX_DRAWINGS_UP_SINGLE_AND_LEFT_DOUBLE = "\u{255B}";
public const BOX_DRAWINGS_UP_DOUBLE_AND_LEFT_SINGLE = "\u{255C}";
public const BOX_DRAWINGS_DOUBLE_UP_AND_LEFT = "\u{255D}";
public const BOX_DRAWINGS_VERTICAL_SINGLE_AND_RIGHT_DOUBLE = "\u{255E}";
public const BOX_DRAWINGS_VERTICAL_DOUBLE_AND_RIGHT_SINGLE = "\u{255F}";
public const BOX_DRAWINGS_DOUBLE_VERTICAL_AND_RIGHT = "\u{2560}";
public const BOX_DRAWINGS_VERTICAL_SINGLE_AND_LEFT_DOUBLE = "\u{2561}";
public const BOX_DRAWINGS_VERTICAL_DOUBLE_AND_LEFT_SINGLE = "\u{2562}";
public const BOX_DRAWINGS_DOUBLE_VERTICAL_AND_LEFT = "\u{2563}";
public const BOX_DRAWINGS_DOWN_SINGLE_AND_HORIZONTAL_DOUBLE = "\u{2564}";
public const BOX_DRAWINGS_DOWN_DOUBLE_AND_HORIZONTAL_SINGLE = "\u{2565}";
public const BOX_DRAWINGS_DOUBLE_DOWN_AND_HORIZONTAL = "\u{2566}";
public const BOX_DRAWINGS_UP_SINGLE_AND_HORIZONTAL_DOUBLE = "\u{2567}";
public const BOX_DRAWINGS_UP_DOUBLE_AND_HORIZONTAL_SINGLE = "\u{2568}";
public const BOX_DRAWINGS_BOX_DRAWINGS_DOUBLE_UP_AND_HORIZONTAL = "\u{2569}";
public const BOX_DRAWINGS_VERTICAL_SINGLE_AND_HORIZONTAL_DOUBLE = "\u{256A}";
public const BOX_DRAWINGS_VERTICAL_DOUBLE_AND_HORIZONTAL_SINGLE = "\u{256B}";
public const BOX_DRAWINGS_DOUBLE_VERTICAL_AND_HORIZONTAL = "\u{256C}";
public const UPPER_HALF_BLOCK = "\u{2580}";
public const LOWER_HALF_BLOCK = "\u{2584}";
public const FULL_BLOCK = "\u{2588}";
public const LEFT_HALF_BLOCK = "\u{258C}";
public const RIGHT_HALF_BLOCK = "\u{2590}";
public const LIGHT_SHADE = "\u{2591}";
public const MEDIUM_SHADE = "\u{2592}";
public const DARK_SHADE = "\u{2593}";
public const BLACK_SQUARE = "\u{25A0}";
public const WHITE_SQUARE = "\u{25A1}";
public const LOZENGE = "\u{25CA}";
public const MUSIC_FLAT_SIGN = "\u{266D}";
public const MUSIC_SHARP_SIGN = "\u{266F}";
public const LATIN_SMALL_LIGATURE_FI = "\u{FB01}";
public const LATIN_SMALL_LIGATURE_FL = "\u{FB02}";
public const BYTE_ORDER_MARK = "\u{FEFF}";
public const REPLACEMENT_CHARACTER = "\u{FFFD}";
/**
* Convert text from (potentially invalid) UTF-8 to UTF-8.
*
* @param string $text
*
* @return string
*/
public function fromUtf8(string $text): string
{
if (preg_match('//u', $text) === false) {
// Not UTF8?
mb_substitute_character(0xFFFD);
return mb_convert_encoding($text, 'UTF-8', 'UTF-8');
}
return $text;
}
/**
* Convert text from (potentially invalid) UTF-8 to UTF-8.
*
* @param string $text
*
* @return string
*/
public function toUtf8(string $text): string
{
return $this->fromUtf8($text);
}
/**
* Create a UTF8 character from a code.
*
* @param int $code
*
* @return string
*/
public static function chr(int $code): string
{
if ($code < 0 || $code > 0x1FFFFF) {
throw new InvalidArgumentException((string)$code);
}
if ($code <= 0x7F) {
return chr($code);
}
if ($code <= 0x7FF) {
return
chr(($code >> 6) + 0xC0) .
chr(($code & 0x3F) + 0x80);
}
if ($code <= 0xFFFF) {
return
chr(($code >> 12) + 0xE0) .
chr((($code >> 6) & 0x3F) + 0x80) .
chr(($code & 0x3F) + 0x80);
}
return
chr(($code >> 18) + 0xF0) .
chr((($code >> 12) & 0x3F) + 0x80) .
chr((($code >> 6) & 0x3F) + 0x80) .
chr(($code & 0x3F) + 0x80);
}
}