Issues (2511)

app/Encodings/UTF8.php (1 issue)

Labels
Severity
1
<?php
2
3
/**
4
 * webtrees: online genealogy
5
 * Copyright (C) 2025 webtrees development team
6
 * This program is free software: you can redistribute it and/or modify
7
 * it under the terms of the GNU General Public License as published by
8
 * the Free Software Foundation, either version 3 of the License, or
9
 * (at your option) any later version.
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
 * GNU General Public License for more details.
14
 * You should have received a copy of the GNU General Public License
15
 * along with this program. If not, see <https://www.gnu.org/licenses/>.
16
 */
17
18
declare(strict_types=1);
19
20
namespace Fisharebest\Webtrees\Encodings;
21
22
use InvalidArgumentException;
23
24
use function chr;
25
use function mb_substitute_character;
26
27
/**
28
 * Convert between (potentially invalid) UTF-8 and UTF-8.
29
 */
30
class UTF8 extends AbstractEncoding
31
{
32
    public const string NAME = 'UTF-8';
0 ignored issues
show
A parse error occurred: Syntax error, unexpected T_STRING, expecting '=' on line 32 at column 24
Loading history...
33
34
    public const string START_OF_STRING                                       = "\u{0098}";
35
    public const string STRING_TERMINATOR                                     = "\u{009C}";
36
    public const string NO_BREAK_SPACE                                        = "\u{00A0}";
37
    public const string INVERTED_EXCLAMATION_MARK                             = "\u{00A1}";
38
    public const string CENT_SIGN                                             = "\u{00A2}";
39
    public const string POUND_SIGN                                            = "\u{00A3}";
40
    public const string CURRENCY_SIGN                                         = "\u{00A4}";
41
    public const string YEN_SIGN                                              = "\u{00A5}";
42
    public const string BROKEN_BAR                                            = "\u{00A6}";
43
    public const string SECTION_SIGN                                          = "\u{00A7}";
44
    public const string DIAERESIS                                             = "\u{00A8}";
45
    public const string COPYRIGHT_SIGN                                        = "\u{00A9}";
46
    public const string FEMININE_ORDINAL_INDICATOR                            = "\u{00AA}";
47
    public const string LEFT_POINTING_DOUBLE_ANGLE_QUOTATION_MARK             = "\u{00AB}";
48
    public const string NOT_SIGN                                              = "\u{00AC}";
49
    public const string SOFT_HYPHEN                                           = "\u{00AD}";
50
    public const string REGISTERED_SIGN                                       = "\u{00AE}";
51
    public const string MACRON                                                = "\u{00AF}";
52
    public const string DEGREE_SIGN                                           = "\u{00B0}";
53
    public const string PLUS_MINUS_SIGN                                       = "\u{00B1}";
54
    public const string SUPERSCRIPT_TWO                                       = "\u{00B2}";
55
    public const string SUPERSCRIPT_THREE                                     = "\u{00B3}";
56
    public const string ACUTE_ACCENT                                          = "\u{00B4}";
57
    public const string MICRO_SIGN                                            = "\u{00B5}";
58
    public const string PILCROW_SIGN                                          = "\u{00B6}";
59
    public const string MIDDLE_DOT                                            = "\u{00B7}";
60
    public const string CEDILLA                                               = "\u{00B8}";
61
    public const string SUPERSCRIPT_ONE                                       = "\u{00B9}";
62
    public const string MASCULINE_ORDINAL_INDICATOR                           = "\u{00BA}";
63
    public const string RIGHT_POINTING_DOUBLE_ANGLE_QUOTATION_MARK            = "\u{00BB}";
64
    public const string VULGAR_FRACTION_ONE_QUARTER                           = "\u{00BC}";
65
    public const string VULGAR_FRACTION_ONE_HALF                              = "\u{00BD}";
66
    public const string VULGAR_FRACTION_THREE_QUARTERS                        = "\u{00BE}";
67
    public const string INVERTED_QUESTION_MARK                                = "\u{00BF}";
68
    public const string LATIN_CAPITAL_LETTER_A_WITH_GRAVE                     = "\u{00C0}";
69
    public const string LATIN_CAPITAL_LETTER_A_WITH_ACUTE                     = "\u{00C1}";
70
    public const string LATIN_CAPITAL_LETTER_A_WITH_CIRCUMFLEX                = "\u{00C2}";
71
    public const string LATIN_CAPITAL_LETTER_A_WITH_TILDE                     = "\u{00C3}";
72
    public const string LATIN_CAPITAL_LETTER_A_WITH_DIAERESIS                 = "\u{00C4}";
73
    public const string LATIN_CAPITAL_LETTER_A_WITH_RING_ABOVE                = "\u{00C5}";
74
    public const string LATIN_CAPITAL_LETTER_AE                               = "\u{00C6}";
75
    public const string LATIN_CAPITAL_LETTER_C_WITH_CEDILLA                   = "\u{00C7}";
76
    public const string LATIN_CAPITAL_LETTER_E_WITH_GRAVE                     = "\u{00C8}";
77
    public const string LATIN_CAPITAL_LETTER_E_WITH_ACUTE                     = "\u{00C9}";
78
    public const string LATIN_CAPITAL_LETTER_E_WITH_CIRCUMFLEX                = "\u{00CA}";
79
    public const string LATIN_CAPITAL_LETTER_E_WITH_DIAERESIS                 = "\u{00CB}";
80
    public const string LATIN_CAPITAL_LETTER_I_WITH_GRAVE                     = "\u{00CC}";
81
    public const string LATIN_CAPITAL_LETTER_I_WITH_ACUTE                     = "\u{00CD}";
82
    public const string LATIN_CAPITAL_LETTER_I_WITH_CIRCUMFLEX                = "\u{00CE}";
83
    public const string LATIN_CAPITAL_LETTER_I_WITH_DIAERESIS                 = "\u{00CF}";
84
    public const string LATIN_CAPITAL_LETTER_ETH                              = "\u{00D0}";
85
    public const string LATIN_CAPITAL_LETTER_N_WITH_TILDE                     = "\u{00D1}";
86
    public const string LATIN_CAPITAL_LETTER_O_WITH_GRAVE                     = "\u{00D2}";
87
    public const string LATIN_CAPITAL_LETTER_O_WITH_ACUTE                     = "\u{00D3}";
88
    public const string LATIN_CAPITAL_LETTER_O_WITH_CIRCUMFLEX                = "\u{00D4}";
89
    public const string LATIN_CAPITAL_LETTER_O_WITH_TILDE                     = "\u{00D5}";
90
    public const string LATIN_CAPITAL_LETTER_O_WITH_DIAERESIS                 = "\u{00D6}";
91
    public const string MULTIPLICATION_SIGN                                   = "\u{00D7}";
92
    public const string LATIN_CAPITAL_LETTER_O_WITH_STROKE                    = "\u{00D8}";
93
    public const string LATIN_CAPITAL_LETTER_U_WITH_GRAVE                     = "\u{00D9}";
94
    public const string LATIN_CAPITAL_LETTER_U_WITH_ACUTE                     = "\u{00DA}";
95
    public const string LATIN_CAPITAL_LETTER_U_WITH_CIRCUMFLEX                = "\u{00DB}";
96
    public const string LATIN_CAPITAL_LETTER_U_WITH_DIAERESIS                 = "\u{00DC}";
97
    public const string LATIN_CAPITAL_LETTER_Y_WITH_ACUTE                     = "\u{00DD}";
98
    public const string LATIN_CAPITAL_LETTER_THORN                            = "\u{00DE}";
99
    public const string LATIN_SMALL_LETTER_SHARP_S                            = "\u{00DF}";
100
    public const string LATIN_SMALL_LETTER_A_WITH_GRAVE                       = "\u{00E0}";
101
    public const string LATIN_SMALL_LETTER_A_WITH_ACUTE                       = "\u{00E1}";
102
    public const string LATIN_SMALL_LETTER_A_WITH_CIRCUMFLEX                  = "\u{00E2}";
103
    public const string LATIN_SMALL_LETTER_A_WITH_TILDE                       = "\u{00E3}";
104
    public const string LATIN_SMALL_LETTER_A_WITH_DIAERESIS                   = "\u{00E4}";
105
    public const string LATIN_SMALL_LETTER_A_WITH_RING_ABOVE                  = "\u{00E5}";
106
    public const string LATIN_SMALL_LETTER_AE                                 = "\u{00E6}";
107
    public const string LATIN_SMALL_LETTER_C_WITH_CEDILLA                     = "\u{00E7}";
108
    public const string LATIN_SMALL_LETTER_E_WITH_GRAVE                       = "\u{00E8}";
109
    public const string LATIN_SMALL_LETTER_E_WITH_ACUTE                       = "\u{00E9}";
110
    public const string LATIN_SMALL_LETTER_E_WITH_CIRCUMFLEX                  = "\u{00EA}";
111
    public const string LATIN_SMALL_LETTER_E_WITH_DIAERESIS                   = "\u{00EB}";
112
    public const string LATIN_SMALL_LETTER_I_WITH_GRAVE                       = "\u{00EC}";
113
    public const string LATIN_SMALL_LETTER_I_WITH_ACUTE                       = "\u{00ED}";
114
    public const string LATIN_SMALL_LETTER_I_WITH_CIRCUMFLEX                  = "\u{00EE}";
115
    public const string LATIN_SMALL_LETTER_I_WITH_DIAERESIS                   = "\u{00EF}";
116
    public const string LATIN_SMALL_LETTER_ETH                                = "\u{00F0}";
117
    public const string LATIN_SMALL_LETTER_N_WITH_TILDE                       = "\u{00F1}";
118
    public const string LATIN_SMALL_LETTER_O_WITH_GRAVE                       = "\u{00F2}";
119
    public const string LATIN_SMALL_LETTER_O_WITH_ACUTE                       = "\u{00F3}";
120
    public const string LATIN_SMALL_LETTER_O_WITH_CIRCUMFLEX                  = "\u{00F4}";
121
    public const string LATIN_SMALL_LETTER_O_WITH_TILDE                       = "\u{00F5}";
122
    public const string LATIN_SMALL_LETTER_O_WITH_DIAERESIS                   = "\u{00F6}";
123
    public const string DIVISION_SIGN                                         = "\u{00F7}";
124
    public const string LATIN_SMALL_LETTER_O_WITH_STROKE                      = "\u{00F8}";
125
    public const string LATIN_SMALL_LETTER_U_WITH_GRAVE                       = "\u{00F9}";
126
    public const string LATIN_SMALL_LETTER_U_WITH_ACUTE                       = "\u{00FA}";
127
    public const string LATIN_SMALL_LETTER_U_WITH_CIRCUMFLEX                  = "\u{00FB}";
128
    public const string LATIN_SMALL_LETTER_U_WITH_DIAERESIS                   = "\u{00FC}";
129
    public const string LATIN_SMALL_LETTER_Y_WITH_ACUTE                       = "\u{00FD}";
130
    public const string LATIN_SMALL_LETTER_THORN                              = "\u{00FE}";
131
    public const string LATIN_SMALL_LETTER_Y_WITH_DIAERESIS                   = "\u{00FF}";
132
    public const string LATIN_CAPITAL_LETTER_A_WITH_MACRON                    = "\u{0100}";
133
    public const string LATIN_SMALL_LETTER_A_WITH_MACRON                      = "\u{0101}";
134
    public const string LATIN_CAPITAL_LETTER_A_WITH_BREVE                     = "\u{0102}";
135
    public const string LATIN_SMALL_LETTER_A_WITH_BREVE                       = "\u{0103}";
136
    public const string LATIN_CAPITAL_LETTER_A_WITH_OGONEK                    = "\u{0104}";
137
    public const string LATIN_SMALL_LETTER_A_WITH_OGONEK                      = "\u{0105}";
138
    public const string LATIN_CAPITAL_LETTER_C_WITH_ACUTE                     = "\u{0106}";
139
    public const string LATIN_SMALL_LETTER_C_WITH_ACUTE                       = "\u{0107}";
140
    public const string LATIN_CAPITAL_LETTER_C_WITH_CIRCUMFLEX                = "\u{0108}";
141
    public const string LATIN_SMALL_LETTER_C_WITH_CIRCUMFLEX                  = "\u{0109}";
142
    public const string LATIN_CAPITAL_LETTER_C_WITH_DOT_ABOVE                 = "\u{010A}";
143
    public const string LATIN_SMALL_LETTER_C_WITH_DOT_ABOVE                   = "\u{010B}";
144
    public const string LATIN_CAPITAL_LETTER_C_WITH_CARON                     = "\u{010C}";
145
    public const string LATIN_SMALL_LETTER_C_WITH_CARON                       = "\u{010D}";
146
    public const string LATIN_CAPITAL_LETTER_D_WITH_CARON                     = "\u{010E}";
147
    public const string LATIN_SMALL_LETTER_D_WITH_CARON                       = "\u{010F}";
148
    public const string LATIN_CAPITAL_LETTER_D_WITH_STROKE                    = "\u{0110}";
149
    public const string LATIN_SMALL_LETTER_D_WITH_STROKE                      = "\u{0111}";
150
    public const string LATIN_CAPITAL_LETTER_E_WITH_MACRON                    = "\u{0112}";
151
    public const string LATIN_SMALL_LETTER_E_WITH_MACRON                      = "\u{0113}";
152
    public const string LATIN_CAPITAL_LETTER_E_WITH_BREVE                     = "\u{0114}";
153
    public const string LATIN_SMALL_LETTER_E_WITH_BREVE                       = "\u{0115}";
154
    public const string LATIN_CAPITAL_LETTER_E_WITH_DOT_ABOVE                 = "\u{0116}";
155
    public const string LATIN_SMALL_LETTER_E_WITH_DOT_ABOVE                   = "\u{0117}";
156
    public const string LATIN_CAPITAL_LETTER_E_WITH_OGONEK                    = "\u{0118}";
157
    public const string LATIN_SMALL_LETTER_E_WITH_OGONEK                      = "\u{0119}";
158
    public const string LATIN_CAPITAL_LETTER_E_WITH_CARON                     = "\u{011A}";
159
    public const string LATIN_SMALL_LETTER_E_WITH_CARON                       = "\u{011B}";
160
    public const string LATIN_CAPITAL_LETTER_G_WITH_CIRCUMFLEX                = "\u{011C}";
161
    public const string LATIN_SMALL_LETTER_G_WITH_CIRCUMFLEX                  = "\u{011D}";
162
    public const string LATIN_CAPITAL_LETTER_G_WITH_BREVE                     = "\u{011E}";
163
    public const string LATIN_SMALL_LETTER_G_WITH_BREVE                       = "\u{011F}";
164
    public const string LATIN_CAPITAL_LETTER_G_WITH_DOT_ABOVE                 = "\u{0120}";
165
    public const string LATIN_SMALL_LETTER_G_WITH_DOT_ABOVE                   = "\u{0121}";
166
    public const string LATIN_CAPITAL_LETTER_G_WITH_CEDILLA                   = "\u{0122}";
167
    public const string LATIN_SMALL_LETTER_G_WITH_CEDILLA                     = "\u{0123}";
168
    public const string LATIN_CAPITAL_LETTER_H_WITH_CIRCUMFLEX                = "\u{0124}";
169
    public const string LATIN_SMALL_LETTER_H_WITH_CIRCUMFLEX                  = "\u{0125}";
170
    public const string LATIN_CAPITAL_LETTER_H_WITH_STROKE                    = "\u{0126}";
171
    public const string LATIN_SMALL_LETTER_H_WITH_STROKE                      = "\u{0127}";
172
    public const string LATIN_CAPITAL_LETTER_I_WITH_TILDE                     = "\u{0128}";
173
    public const string LATIN_SMALL_LETTER_I_WITH_TILDE                       = "\u{0129}";
174
    public const string LATIN_CAPITAL_LETTER_I_WITH_MACRON                    = "\u{012A}";
175
    public const string LATIN_SMALL_LETTER_I_WITH_MACRON                      = "\u{012B}";
176
    public const string LATIN_CAPITAL_LETTER_I_WITH_BREVE                     = "\u{012C}";
177
    public const string LATIN_SMALL_LETTER_I_WITH_BREVE                       = "\u{012D}";
178
    public const string LATIN_CAPITAL_LETTER_I_WITH_OGONEK                    = "\u{012E}";
179
    public const string LATIN_SMALL_LETTER_I_WITH_OGONEK                      = "\u{012F}";
180
    public const string LATIN_CAPITAL_LETTER_I_WITH_DOT_ABOVE                 = "\u{0130}";
181
    public const string LATIN_SMALL_LETTER_DOTLESS_I                          = "\u{0131}";
182
    public const string LATIN_CAPITAL_LIGATURE_IJ                             = "\u{0132}";
183
    public const string LATIN_SMALL_LIGATURE_IJ                               = "\u{0133}";
184
    public const string LATIN_CAPITAL_LETTER_J_WITH_CIRCUMFLEX                = "\u{0134}";
185
    public const string LATIN_SMALL_LETTER_J_WITH_CIRCUMFLEX                  = "\u{0135}";
186
    public const string LATIN_CAPITAL_LETTER_K_WITH_CEDILLA                   = "\u{0136}";
187
    public const string LATIN_SMALL_LETTER_K_WITH_CEDILLA                     = "\u{0137}";
188
    public const string LATIN_SMALL_LETTER_KRA                                = "\u{0138}";
189
    public const string LATIN_CAPITAL_LETTER_L_WITH_ACUTE                     = "\u{0139}";
190
    public const string LATIN_SMALL_LETTER_L_WITH_ACUTE                       = "\u{013A}";
191
    public const string LATIN_CAPITAL_LETTER_L_WITH_CEDILLA                   = "\u{013B}";
192
    public const string LATIN_SMALL_LETTER_L_WITH_CEDILLA                     = "\u{013C}";
193
    public const string LATIN_CAPITAL_LETTER_L_WITH_CARON                     = "\u{013D}";
194
    public const string LATIN_SMALL_LETTER_L_WITH_CARON                       = "\u{013E}";
195
    public const string LATIN_CAPITAL_LETTER_L_WITH_MIDDLE_DOT                = "\u{013F}";
196
    public const string LATIN_SMALL_LETTER_L_WITH_MIDDLE_DOT                  = "\u{0140}";
197
    public const string LATIN_CAPITAL_LETTER_L_WITH_STROKE                    = "\u{0141}";
198
    public const string LATIN_SMALL_LETTER_L_WITH_STROKE                      = "\u{0142}";
199
    public const string LATIN_CAPITAL_LETTER_N_WITH_ACUTE                     = "\u{0143}";
200
    public const string LATIN_SMALL_LETTER_N_WITH_ACUTE                       = "\u{0144}";
201
    public const string LATIN_CAPITAL_LETTER_N_WITH_CEDILLA                   = "\u{0145}";
202
    public const string LATIN_SMALL_LETTER_N_WITH_CEDILLA                     = "\u{0146}";
203
    public const string LATIN_CAPITAL_LETTER_N_WITH_CARON                     = "\u{0147}";
204
    public const string LATIN_SMALL_LETTER_N_WITH_CARON                       = "\u{0148}";
205
    public const string LATIN_SMALL_LETTER_N_PRECEDED_BY_APOSTROPHE           = "\u{0149}";
206
    public const string LATIN_CAPITAL_LETTER_ENG                              = "\u{014A}";
207
    public const string LATIN_SMALL_LETTER_ENG                                = "\u{014B}";
208
    public const string LATIN_CAPITAL_LETTER_O_WITH_MACRON                    = "\u{014C}";
209
    public const string LATIN_SMALL_LETTER_O_WITH_MACRON                      = "\u{014D}";
210
    public const string LATIN_CAPITAL_LETTER_O_WITH_BREVE                     = "\u{014E}";
211
    public const string LATIN_SMALL_LETTER_O_WITH_BREVE                       = "\u{014F}";
212
    public const string LATIN_CAPITAL_LETTER_O_WITH_DOUBLE_ACUTE              = "\u{0150}";
213
    public const string LATIN_SMALL_LETTER_O_WITH_DOUBLE_ACUTE                = "\u{0151}";
214
    public const string LATIN_CAPITAL_LIGATURE_OE                             = "\u{0152}";
215
    public const string LATIN_SMALL_LIGATURE_OE                               = "\u{0153}";
216
    public const string LATIN_CAPITAL_LETTER_R_WITH_ACUTE                     = "\u{0154}";
217
    public const string LATIN_SMALL_LETTER_R_WITH_ACUTE                       = "\u{0155}";
218
    public const string LATIN_CAPITAL_LETTER_R_WITH_CEDILLA                   = "\u{0156}";
219
    public const string LATIN_SMALL_LETTER_R_WITH_CEDILLA                     = "\u{0157}";
220
    public const string LATIN_CAPITAL_LETTER_R_WITH_CARON                     = "\u{0158}";
221
    public const string LATIN_SMALL_LETTER_R_WITH_CARON                       = "\u{0159}";
222
    public const string LATIN_CAPITAL_LETTER_S_WITH_ACUTE                     = "\u{015A}";
223
    public const string LATIN_SMALL_LETTER_S_WITH_ACUTE                       = "\u{015B}";
224
    public const string LATIN_CAPITAL_LETTER_S_WITH_CIRCUMFLEX                = "\u{015C}";
225
    public const string LATIN_SMALL_LETTER_S_WITH_CIRCUMFLEX                  = "\u{015D}";
226
    public const string LATIN_CAPITAL_LETTER_S_WITH_CEDILLA                   = "\u{015E}";
227
    public const string LATIN_SMALL_LETTER_S_WITH_CEDILLA                     = "\u{015F}";
228
    public const string LATIN_CAPITAL_LETTER_S_WITH_CARON                     = "\u{0160}";
229
    public const string LATIN_SMALL_LETTER_S_WITH_CARON                       = "\u{0161}";
230
    public const string LATIN_CAPITAL_LETTER_T_WITH_CEDILLA                   = "\u{0162}";
231
    public const string LATIN_SMALL_LETTER_T_WITH_CEDILLA                     = "\u{0163}";
232
    public const string LATIN_CAPITAL_LETTER_T_WITH_CARON                     = "\u{0164}";
233
    public const string LATIN_SMALL_LETTER_T_WITH_CARON                       = "\u{0165}";
234
    public const string LATIN_CAPITAL_LETTER_T_WITH_STROKE                    = "\u{0166}";
235
    public const string LATIN_SMALL_LETTER_T_WITH_STROKE                      = "\u{0167}";
236
    public const string LATIN_CAPITAL_LETTER_U_WITH_TILDE                     = "\u{0168}";
237
    public const string LATIN_SMALL_LETTER_U_WITH_TILDE                       = "\u{0169}";
238
    public const string LATIN_CAPITAL_LETTER_U_WITH_MACRON                    = "\u{016A}";
239
    public const string LATIN_SMALL_LETTER_U_WITH_MACRON                      = "\u{016B}";
240
    public const string LATIN_CAPITAL_LETTER_U_WITH_BREVE                     = "\u{016C}";
241
    public const string LATIN_SMALL_LETTER_U_WITH_BREVE                       = "\u{016D}";
242
    public const string LATIN_CAPITAL_LETTER_U_WITH_RING_ABOVE                = "\u{016E}";
243
    public const string LATIN_SMALL_LETTER_U_WITH_RING_ABOVE                  = "\u{016F}";
244
    public const string LATIN_CAPITAL_LETTER_U_WITH_DOUBLE_ACUTE              = "\u{0170}";
245
    public const string LATIN_SMALL_LETTER_U_WITH_DOUBLE_ACUTE                = "\u{0171}";
246
    public const string LATIN_CAPITAL_LETTER_U_WITH_OGONEK                    = "\u{0172}";
247
    public const string LATIN_SMALL_LETTER_U_WITH_OGONEK                      = "\u{0173}";
248
    public const string LATIN_CAPITAL_LETTER_W_WITH_CIRCUMFLEX                = "\u{0174}";
249
    public const string LATIN_SMALL_LETTER_W_WITH_CIRCUMFLEX                  = "\u{0175}";
250
    public const string LATIN_CAPITAL_LETTER_Y_WITH_CIRCUMFLEX                = "\u{0176}";
251
    public const string LATIN_SMALL_LETTER_Y_WITH_CIRCUMFLEX                  = "\u{0177}";
252
    public const string LATIN_CAPITAL_LETTER_Y_WITH_DIAERESIS                 = "\u{0178}";
253
    public const string LATIN_CAPITAL_LETTER_Z_WITH_ACUTE                     = "\u{0179}";
254
    public const string LATIN_SMALL_LETTER_Z_WITH_ACUTE                       = "\u{017A}";
255
    public const string LATIN_CAPITAL_LETTER_Z_WITH_DOT_ABOVE                 = "\u{017B}";
256
    public const string LATIN_SMALL_LETTER_Z_WITH_DOT_ABOVE                   = "\u{017C}";
257
    public const string LATIN_CAPITAL_LETTER_Z_WITH_CARON                     = "\u{017D}";
258
    public const string LATIN_SMALL_LETTER_Z_WITH_CARON                       = "\u{017E}";
259
    public const string LATIN_SMALL_LETTER_LONG_S                             = "\u{017F}";
260
    public const string LATIN_SMALL_LETTER_B_WITH_STROKE                      = "\u{0180}";
261
    public const string LATIN_CAPITAL_LETTER_B_WITH_HOOK                      = "\u{0181}";
262
    public const string LATIN_CAPITAL_LETTER_B_WITH_TOPBAR                    = "\u{0182}";
263
    public const string LATIN_SMALL_LETTER_B_WITH_TOPBAR                      = "\u{0183}";
264
    public const string LATIN_CAPITAL_LETTER_F_WITH_HOOK                      = "\u{0191}";
265
    public const string LATIN_SMALL_LETTER_F_WITH_HOOK                        = "\u{0192}";
266
    public const string LATIN_SMALL_LETTER_O_WITH_HORN                        = "\u{01A1}";
267
    public const string LATIN_CAPITAL_LETTER_O_WITH_HORN                      = "\u{01A0}";
268
    public const string LATIN_CAPITAL_LETTER_U_WITH_HORN                      = "\u{01AF}";
269
    public const string LATIN_SMALL_LETTER_U_WITH_HORN                        = "\u{01B0}";
270
    public const string LATIN_CAPITAL_LETTER_A_WITH_CARON                     = "\u{01CD}";
271
    public const string LATIN_SMALL_LETTER_A_WITH_CARON                       = "\u{01CE}";
272
    public const string LATIN_CAPITAL_LETTER_I_WITH_CARON                     = "\u{01CF}";
273
    public const string LATIN_SMALL_LETTER_I_WITH_CARON                       = "\u{01D0}";
274
    public const string LATIN_CAPITAL_LETTER_O_WITH_CARON                     = "\u{01D1}";
275
    public const string LATIN_SMALL_LETTER_O_WITH_CARON                       = "\u{01D2}";
276
    public const string LATIN_CAPITAL_LETTER_U_WITH_CARON                     = "\u{01D3}";
277
    public const string LATIN_SMALL_LETTER_U_WITH_CARON                       = "\u{01D4}";
278
    public const string LATIN_CAPITAL_LETTER_U_WITH_DIAERESIS_AND_MACRON      = "\u{01D5}";
279
    public const string LATIN_SMALL_LETTER_U_WITH_DIAERESIS_AND_MACRON        = "\u{01D6}";
280
    public const string LATIN_CAPITAL_LETTER_U_WITH_DIAERESIS_AND_ACUTE       = "\u{01D7}";
281
    public const string LATIN_SMALL_LETTER_U_WITH_DIAERESIS_AND_ACUTE         = "\u{01D8}";
282
    public const string LATIN_CAPITAL_LETTER_U_WITH_DIAERESIS_AND_CARON       = "\u{01D9}";
283
    public const string LATIN_SMALL_LETTER_U_WITH_DIAERESIS_AND_CARON         = "\u{01DA}";
284
    public const string LATIN_CAPITAL_LETTER_U_WITH_DIAERESIS_AND_GRAVE       = "\u{01DB}";
285
    public const string LATIN_SMALL_LETTER_U_WITH_DIAERESIS_AND_GRAVE         = "\u{01DC}";
286
    public const string LATIN_CAPITAL_LETTER_A_WITH_DIAERESIS_AND_MACRON      = "\u{01DE}";
287
    public const string LATIN_SMALL_LETTER_A_WITH_DIAERESIS_AND_MACRON        = "\u{01DF}";
288
    public const string LATIN_CAPITAL_LETTER_A_WITH_DOT_ABOVE_AND_MACRON      = "\u{01E0}";
289
    public const string LATIN_SMALL_LETTER_A_WITH_DOT_ABOVE_AND_MACRON        = "\u{01E1}";
290
    public const string LATIN_CAPITAL_LETTER_AE_WITH_MACRON                   = "\u{01E2}";
291
    public const string LATIN_SMALL_LETTER_AE_WITH_MACRON                     = "\u{01E3}";
292
    public const string LATIN_CAPITAL_LETTER_G_WITH_CARON                     = "\u{01E6}";
293
    public const string LATIN_SMALL_LETTER_G_WITH_CARON                       = "\u{01E7}";
294
    public const string LATIN_CAPITAL_LETTER_K_WITH_CARON                     = "\u{01E8}";
295
    public const string LATIN_SMALL_LETTER_K_WITH_CARON                       = "\u{01E9}";
296
    public const string LATIN_CAPITAL_LETTER_O_WITH_OGONEK                    = "\u{01EA}";
297
    public const string LATIN_SMALL_LETTER_O_WITH_OGONEK                      = "\u{01EB}";
298
    public const string LATIN_CAPITAL_LETTER_O_WITH_OGONEK_AND_MACRON         = "\u{01EC}";
299
    public const string LATIN_SMALL_LETTER_O_WITH_OGONEK_AND_MACRON           = "\u{01ED}";
300
    public const string LATIN_SMALL_LETTER_J_WITH_CARON                       = "\u{01F0}";
301
    public const string LATIN_CAPITAL_LETTER_G_WITH_ACUTE                     = "\u{01F4}";
302
    public const string LATIN_SMALL_LETTER_G_WITH_ACUTE                       = "\u{01F5}";
303
    public const string LATIN_CAPITAL_LETTER_N_WITH_GRAVE                     = "\u{01F8}";
304
    public const string LATIN_SMALL_LETTER_N_WITH_GRAVE                       = "\u{01F9}";
305
    public const string LATIN_CAPITAL_LETTER_A_WITH_RING_ABOVE_AND_ACUTE      = "\u{01FA}";
306
    public const string LATIN_SMALL_LETTER_A_WITH_RING_ABOVE_AND_ACUTE        = "\u{01FB}";
307
    public const string LATIN_CAPITAL_LETTER_AE_WITH_ACUTE                    = "\u{01FC}";
308
    public const string LATIN_SMALL_LETTER_AE_WITH_ACUTE                      = "\u{01FD}";
309
    public const string LATIN_CAPITAL_LETTER_O_WITH_STROKE_AND_ACUTE          = "\u{01FE}";
310
    public const string LATIN_SMALL_LETTER_O_WITH_STROKE_AND_ACUTE            = "\u{01FF}";
311
    public const string LATIN_CAPITAL_LETTER_S_WITH_COMMA_BELOW               = "\u{0218}";
312
    public const string LATIN_SMALL_LETTER_S_WITH_COMMA_BELOW                 = "\u{0219}";
313
    public const string LATIN_CAPITAL_LETTER_T_WITH_COMMA_BELOW               = "\u{021A}";
314
    public const string LATIN_SMALL_LETTER_T_WITH_COMMA_BELOW                 = "\u{021B}";
315
    public const string LATIN_CAPITAL_LETTER_H_WITH_CARON                     = "\u{021E}";
316
    public const string LATIN_SMALL_LETTER_H_WITH_CARON                       = "\u{021F}";
317
    public const string LATIN_CAPITAL_LETTER_A_WITH_DOT_ABOVE                 = "\u{0226}";
318
    public const string LATIN_SMALL_LETTER_A_WITH_DOT_ABOVE                   = "\u{0227}";
319
    public const string LATIN_CAPITAL_LETTER_E_WITH_CEDILLA                   = "\u{0228}";
320
    public const string LATIN_SMALL_LETTER_E_WITH_CEDILLA                     = "\u{0229}";
321
    public const string LATIN_CAPITAL_LETTER_O_WITH_DIAERESIS_AND_MACRON      = "\u{022A}";
322
    public const string LATIN_SMALL_LETTER_O_WITH_DIAERESIS_AND_MACRON        = "\u{022B}";
323
    public const string LATIN_CAPITAL_LETTER_O_WITH_TILDE_AND_MACRON          = "\u{022C}";
324
    public const string LATIN_SMALL_LETTER_O_WITH_TILDE_AND_MACRON            = "\u{022D}";
325
    public const string LATIN_CAPITAL_LETTER_O_WITH_DOT_ABOVE                 = "\u{022E}";
326
    public const string LATIN_SMALL_LETTER_O_WITH_DOT_ABOVE                   = "\u{022F}";
327
    public const string LATIN_CAPITAL_LETTER_O_WITH_DOT_ABOVE_AND_MACRON      = "\u{0230}";
328
    public const string LATIN_SMALL_LETTER_O_WITH_DOT_ABOVE_AND_MACRON        = "\u{0231}";
329
    public const string LATIN_CAPITAL_LETTER_Y_WITH_MACRON                    = "\u{0232}";
330
    public const string LATIN_SMALL_LETTER_Y_WITH_MACRON                      = "\u{0233}";
331
    public const string MODIFIER_LETTER_PRIME                                 = "\u{02B9}";
332
    public const string MODIFIER_LETTER_DOUBLE_PRIME                          = "\u{02BA}";
333
    public const string MODIFIER_LETTER_TURNED_COMMA                          = "\u{02BB}";
334
    public const string MODIFIER_LETTER_APOSTROPHE                            = "\u{02BC}";
335
    public const string MODIFIER_LETTER_CIRCUMFLEX_ACCENT                     = "\u{02C6}";
336
    public const string CARON                                                 = "\u{02C7}";
337
    public const string BREVE                                                 = "\u{02D8}";
338
    public const string DOT_ABOVE                                             = "\u{02D9}";
339
    public const string RING_ABOVE                                            = "\u{02DA}";
340
    public const string OGONEK                                                = "\u{02DB}";
341
    public const string SMALL_TILDE                                           = "\u{02DC}";
342
    public const string DOUBLE_ACUTE_ACCENT                                   = "\u{02DD}";
343
    public const string COMBINING_GRAVE_ACCENT                                = "\u{0300}";
344
    public const string COMBINING_ACUTE_ACCENT                                = "\u{0301}";
345
    public const string COMBINING_CIRCUMFLEX_ACCENT                           = "\u{0302}";
346
    public const string COMBINING_TILDE                                       = "\u{0303}";
347
    public const string COMBINING_MACRON                                      = "\u{0304}";
348
    public const string COMBINING_OVERLINE                                    = "\u{0305}";
349
    public const string COMBINING_BREVE                                       = "\u{0306}";
350
    public const string COMBINING_DOT_ABOVE                                   = "\u{0307}";
351
    public const string COMBINING_DIAERESIS                                   = "\u{0308}";
352
    public const string COMBINING_HOOK_ABOVE                                  = "\u{0309}";
353
    public const string COMBINING_RING_ABOVE                                  = "\u{030A}";
354
    public const string COMBINING_DOUBLE_ACUTE_ACCENT                         = "\u{030B}";
355
    public const string COMBINING_CARON                                       = "\u{030C}";
356
    public const string COMBINING_CANDRABINDU                                 = "\u{0310}";
357
    public const string COMBINING_COMMA_ABOVE                                 = "\u{0313}";
358
    public const string COMBINING_COMMA_ABOVE_RIGHT                           = "\u{0315}";
359
    public const string COMBINING_HORN                                        = "\u{031B}";
360
    public const string COMBINING_LEFT_HALF_RING_BELOW                        = "\u{031C}";
361
    public const string COMBINING_DOT_BELOW                                   = "\u{0323}";
362
    public const string COMBINING_DIAERESIS_BELOW                             = "\u{0324}";
363
    public const string COMBINING_RING_BELOW                                  = "\u{0325}";
364
    public const string COMBINING_COMMA_BELOW                                 = "\u{0326}";
365
    public const string COMBINING_CEDILLA                                     = "\u{0327}";
366
    public const string COMBINING_OGONEK                                      = "\u{0328}";
367
    public const string COMBINING_BRIDGE_BELOW                                = "\u{032A}";
368
    public const string COMBINING_BREVE_BELOW                                 = "\u{032E}";
369
    public const string COMBINING_LOW_LINE                                    = "\u{0332}";
370
    public const string COMBINING_DOUBLE_LOW_LINE                             = "\u{0333}";
371
    public const string COMBINING_SHORT_STROKE_OVERLAY                        = "\u{0335}";
372
    public const string COMBINING_LONG_STROKE_OVERLAY                         = "\u{0336}";
373
    public const string COMBINING_SHORT_SOLIDUS_OVERLAY                       = "\u{0338}";
374
    public const string COMBINING_LONG_SOLIDUS_OVERLAY                        = "\u{0338}";
375
    public const string COMBINING_DOUBLE_TILDE                                = "\u{0360}";
376
    public const string COMBINING_DOUBLE_INVERTED_BREVE                       = "\u{0361}";
377
    public const string GREEK_CAPITAL_LETTER_GAMMA                            = "\u{0393}";
378
    public const string GREEK_CAPITAL_LETTER_THETA                            = "\u{0398}";
379
    public const string GREEK_CAPITAL_LETTER_SIGMA                            = "\u{03A3}";
380
    public const string GREEK_CAPITAL_LETTER_PHI                              = "\u{03A6}";
381
    public const string GREEK_CAPITAL_LETTER_OMEGA                            = "\u{03A9}";
382
    public const string GREEK_SMALL_LETTER_ALPHA                              = "\u{03B1}";
383
    public const string GREEK_SMALL_LETTER_DELTA                              = "\u{03B4}";
384
    public const string GREEK_SMALL_LETTER_EPSILON                            = "\u{03B5}";
385
    public const string GREEK_SMALL_LETTER_PI                                 = "\u{03C0}";
386
    public const string GREEK_SMALL_LETTER_SIGMA                              = "\u{03C3}";
387
    public const string GREEK_SMALL_LETTER_TAU                                = "\u{03C4}";
388
    public const string GREEK_SMALL_LETTER_PHI                                = "\u{03C6}";
389
    public const string CYRILLIC_CAPITAL_LETTER_IO                            = "\u{0401}";
390
    public const string CYRILLIC_CAPITAL_LETTER_DJE                           = "\u{0402}";
391
    public const string CYRILLIC_CAPITAL_LETTER_GJE                           = "\u{0403}";
392
    public const string CYRILLIC_CAPITAL_LETTER_UKRANIAN_IE                   = "\u{0404}";
393
    public const string CYRILLIC_CAPITAL_LETTER_DZE                           = "\u{0405}";
394
    public const string CYRILLIC_CAPITAL_LETTER_BYELORUSSIAN_UKRAINIAN_I      = "\u{0406}";
395
    public const string CYRILLIC_CAPITAL_LETTER_YI                            = "\u{0407}";
396
    public const string CYRILLIC_CAPITAL_LETTER_JE                            = "\u{0408}";
397
    public const string CYRILLIC_CAPITAL_LETTER_LJE                           = "\u{0409}";
398
    public const string CYRILLIC_CAPITAL_LETTER_NJE                           = "\u{040A}";
399
    public const string CYRILLIC_CAPITAL_LETTER_TSHE                          = "\u{040B}";
400
    public const string CYRILLIC_CAPITAL_LETTER_KJE                           = "\u{040C}";
401
    public const string CYRILLIC_CAPITAL_LETTER_SHORT_U                       = "\u{040E}";
402
    public const string CYRILLIC_CAPITAL_LETTER_DZHE                          = "\u{040F}";
403
    public const string CYRILLIC_CAPITAL_LETTER_A                             = "\u{0410}";
404
    public const string CYRILLIC_CAPITAL_LETTER_BE                            = "\u{0411}";
405
    public const string CYRILLIC_CAPITAL_LETTER_VE                            = "\u{0412}";
406
    public const string CYRILLIC_CAPITAL_LETTER_GHE                           = "\u{0413}";
407
    public const string CYRILLIC_CAPITAL_LETTER_DE                            = "\u{0414}";
408
    public const string CYRILLIC_CAPITAL_LETTER_IE                            = "\u{0415}";
409
    public const string CYRILLIC_CAPITAL_LETTER_ZHE                           = "\u{0416}";
410
    public const string CYRILLIC_CAPITAL_LETTER_ZE                            = "\u{0417}";
411
    public const string CYRILLIC_CAPITAL_LETTER_I                             = "\u{0418}";
412
    public const string CYRILLIC_CAPITAL_LETTER_SHORT_I                       = "\u{0419}";
413
    public const string CYRILLIC_CAPITAL_LETTER_KA                            = "\u{041A}";
414
    public const string CYRILLIC_CAPITAL_LETTER_EL                            = "\u{041B}";
415
    public const string CYRILLIC_CAPITAL_LETTER_EM                            = "\u{041C}";
416
    public const string CYRILLIC_CAPITAL_LETTER_EN                            = "\u{041D}";
417
    public const string CYRILLIC_CAPITAL_LETTER_O                             = "\u{041E}";
418
    public const string CYRILLIC_CAPITAL_LETTER_PE                            = "\u{041F}";
419
    public const string CYRILLIC_CAPITAL_LETTER_ER                            = "\u{0420}";
420
    public const string CYRILLIC_CAPITAL_LETTER_ES                            = "\u{0421}";
421
    public const string CYRILLIC_CAPITAL_LETTER_TE                            = "\u{0422}";
422
    public const string CYRILLIC_CAPITAL_LETTER_U                             = "\u{0423}";
423
    public const string CYRILLIC_CAPITAL_LETTER_EF                            = "\u{0424}";
424
    public const string CYRILLIC_CAPITAL_LETTER_HA                            = "\u{0425}";
425
    public const string CYRILLIC_CAPITAL_LETTER_TSE                           = "\u{0426}";
426
    public const string CYRILLIC_CAPITAL_LETTER_CHE                           = "\u{0427}";
427
    public const string CYRILLIC_CAPITAL_LETTER_SHA                           = "\u{0428}";
428
    public const string CYRILLIC_CAPITAL_LETTER_SHCHA                         = "\u{0429}";
429
    public const string CYRILLIC_CAPITAL_LETTER_HARD_SIGN                     = "\u{042A}";
430
    public const string CYRILLIC_CAPITAL_LETTER_YERU                          = "\u{042B}";
431
    public const string CYRILLIC_CAPITAL_LETTER_SOFT_SIGN                     = "\u{042C}";
432
    public const string CYRILLIC_CAPITAL_LETTER_E                             = "\u{042D}";
433
    public const string CYRILLIC_CAPITAL_LETTER_YU                            = "\u{042E}";
434
    public const string CYRILLIC_CAPITAL_LETTER_YA                            = "\u{042F}";
435
    public const string CYRILLIC_SMALL_LETTER_A                               = "\u{0430}";
436
    public const string CYRILLIC_SMALL_LETTER_BE                              = "\u{0431}";
437
    public const string CYRILLIC_SMALL_LETTER_VE                              = "\u{0432}";
438
    public const string CYRILLIC_SMALL_LETTER_GHE                             = "\u{0433}";
439
    public const string CYRILLIC_SMALL_LETTER_DE                              = "\u{0434}";
440
    public const string CYRILLIC_SMALL_LETTER_IE                              = "\u{0435}";
441
    public const string CYRILLIC_SMALL_LETTER_ZHE                             = "\u{0436}";
442
    public const string CYRILLIC_SMALL_LETTER_ZE                              = "\u{0437}";
443
    public const string CYRILLIC_SMALL_LETTER_I                               = "\u{0438}";
444
    public const string CYRILLIC_SMALL_LETTER_SHORT_I                         = "\u{0439}";
445
    public const string CYRILLIC_SMALL_LETTER_KA                              = "\u{043A}";
446
    public const string CYRILLIC_SMALL_LETTER_EL                              = "\u{043B}";
447
    public const string CYRILLIC_SMALL_LETTER_EM                              = "\u{043C}";
448
    public const string CYRILLIC_SMALL_LETTER_EN                              = "\u{043D}";
449
    public const string CYRILLIC_SMALL_LETTER_O                               = "\u{043E}";
450
    public const string CYRILLIC_SMALL_LETTER_PE                              = "\u{043F}";
451
    public const string CYRILLIC_SMALL_LETTER_ER                              = "\u{0440}";
452
    public const string CYRILLIC_SMALL_LETTER_ES                              = "\u{0441}";
453
    public const string CYRILLIC_SMALL_LETTER_TE                              = "\u{0442}";
454
    public const string CYRILLIC_SMALL_LETTER_U                               = "\u{0443}";
455
    public const string CYRILLIC_SMALL_LETTER_EF                              = "\u{0444}";
456
    public const string CYRILLIC_SMALL_LETTER_HA                              = "\u{0445}";
457
    public const string CYRILLIC_SMALL_LETTER_TSE                             = "\u{0446}";
458
    public const string CYRILLIC_SMALL_LETTER_CHE                             = "\u{0447}";
459
    public const string CYRILLIC_SMALL_LETTER_SHA                             = "\u{0448}";
460
    public const string CYRILLIC_SMALL_LETTER_SHCHA                           = "\u{0449}";
461
    public const string CYRILLIC_SMALL_LETTER_HARD_SIGN                       = "\u{044A}";
462
    public const string CYRILLIC_SMALL_LETTER_YERU                            = "\u{044B}";
463
    public const string CYRILLIC_SMALL_LETTER_SOFT_SIGN                       = "\u{044C}";
464
    public const string CYRILLIC_SMALL_LETTER_E                               = "\u{044D}";
465
    public const string CYRILLIC_SMALL_LETTER_YU                              = "\u{044E}";
466
    public const string CYRILLIC_SMALL_LETTER_YA                              = "\u{044F}";
467
    public const string CYRILLIC_SMALL_LETTER_IO                              = "\u{0451}";
468
    public const string CYRILLIC_SMALL_LETTER_DJE                             = "\u{0452}";
469
    public const string CYRILLIC_SMALL_LETTER_GJE                             = "\u{0453}";
470
    public const string CYRILLIC_SMALL_LETTER_UKRANIAN_IE                     = "\u{0454}";
471
    public const string CYRILLIC_SMALL_LETTER_DZE                             = "\u{0455}";
472
    public const string CYRILLIC_SMALL_LETTER_BYELORUSSIAN_UKRAINIAN_I        = "\u{0456}";
473
    public const string CYRILLIC_SMALL_LETTER_YI                              = "\u{0457}";
474
    public const string CYRILLIC_SMALL_LETTER_JE                              = "\u{0458}";
475
    public const string CYRILLIC_SMALL_LETTER_LJE                             = "\u{0459}";
476
    public const string CYRILLIC_SMALL_LETTER_NJE                             = "\u{045A}";
477
    public const string CYRILLIC_SMALL_LETTER_TSHE                            = "\u{045B}";
478
    public const string CYRILLIC_SMALL_LETTER_KJE                             = "\u{045C}";
479
    public const string CYRILLIC_SMALL_LETTER_SHORT_U                         = "\u{045E}";
480
    public const string CYRILLIC_SMALL_LETTER_DZHE                            = "\u{045F}";
481
    public const string CYRILLIC_CAPITAL_LETTER_GHE_WITH_UPTURN               = "\u{0490}";
482
    public const string CYRILLIC_SMALL_LETTER_GHE_WITH_UPTURN                 = "\u{0491}";
483
    public const string ARABIC_LETTER_HAMZA                                   = "\u{0621}";
484
    public const string ARABIC_LETTER_ALEF                                    = "\u{0627}";
485
    public const string ARABIC_LETTER_BEH                                     = "\u{0628}";
486
    public const string ARABIC_LETTER_TEH_MARBUTA                             = "\u{0629}";
487
    public const string ARABIC_LETTER_TEH                                     = "\u{062A}";
488
    public const string ARABIC_LETTER_THEH                                    = "\u{062B}";
489
    public const string ARABIC_LETTER_JEEM                                    = "\u{062C}";
490
    public const string ARABIC_LETTER_HAH                                     = "\u{062D}";
491
    public const string ARABIC_LETTER_KHAH                                    = "\u{062E}";
492
    public const string ARABIC_LETTER_DAL                                     = "\u{062F}";
493
    public const string ARABIC_LETTER_THAL                                    = "\u{0630}";
494
    public const string ARABIC_LETTER_REH                                     = "\u{0631}";
495
    public const string ARABIC_LETTER_ZAIN                                    = "\u{0632}";
496
    public const string ARABIC_LETTER_SEEN                                    = "\u{0633}";
497
    public const string ARABIC_LETTER_SHEEN                                   = "\u{0634}";
498
    public const string ARABIC_LETTER_SAD                                     = "\u{0635}";
499
    public const string ARABIC_LETTER_DAD                                     = "\u{0636}";
500
    public const string ARABIC_LETTER_TAH                                     = "\u{0637}";
501
    public const string ARABIC_LETTER_ZAH                                     = "\u{0638}";
502
    public const string ARABIC_LETTER_AIN                                     = "\u{0639}";
503
    public const string ARABIC_LETTER_GHAIN                                   = "\u{063A}";
504
    public const string ARABIC_LETTER_FEH                                     = "\u{0641}";
505
    public const string ARABIC_LETTER_QAF                                     = "\u{0642}";
506
    public const string ARABIC_LETTER_KAF                                     = "\u{0643}";
507
    public const string ARABIC_LETTER_LAM                                     = "\u{0644}";
508
    public const string ARABIC_LETTER_MEEM                                    = "\u{0645}";
509
    public const string ARABIC_LETTER_NOON                                    = "\u{0646}";
510
    public const string ARABIC_LETTER_HEH                                     = "\u{0647}";
511
    public const string ARABIC_LETTER_WAW                                     = "\u{0648}";
512
    public const string ARABIC_LETTER_ALEF_MAKSURA                            = "\u{0649}";
513
    public const string ARABIC_LETTER_YEH                                     = "\u{064A}";
514
    public const string LATIN_CAPITAL_LETTER_A_WITH_RING_BELOW                = "\u{1E00}";
515
    public const string LATIN_SMALL_LETTER_A_WITH_RING_BELOW                  = "\u{1E01}";
516
    public const string LATIN_CAPITAL_LETTER_B_WITH_DOT_ABOVE                 = "\u{1E02}";
517
    public const string LATIN_SMALL_LETTER_B_WITH_DOT_ABOVE                   = "\u{1E03}";
518
    public const string LATIN_CAPITAL_LETTER_B_WITH_DOT_BELOW                 = "\u{1E04}";
519
    public const string LATIN_SMALL_LETTER_B_WITH_DOT_BELOW                   = "\u{1E05}";
520
    public const string LATIN_CAPITAL_LETTER_C_WITH_CEDILLA_AND_ACUTE         = "\u{1E08}";
521
    public const string LATIN_SMALL_LETTER_C_WITH_CEDILLA_AND_ACUTE           = "\u{1E09}";
522
    public const string LATIN_CAPITAL_LETTER_D_WITH_DOT_ABOVE                 = "\u{1E0A}";
523
    public const string LATIN_SMALL_LETTER_D_WITH_DOT_ABOVE                   = "\u{1E0B}";
524
    public const string LATIN_CAPITAL_LETTER_D_WITH_DOT_BELOW                 = "\u{1E0C}";
525
    public const string LATIN_SMALL_LETTER_D_WITH_DOT_BELOW                   = "\u{1E0D}";
526
    public const string LATIN_CAPITAL_LETTER_SHARP_S                          = "\u{1E9E}";
527
    public const string LATIN_CAPITAL_LETTER_D_WITH_CEDILLA                   = "\u{1E10}";
528
    public const string LATIN_SMALL_LETTER_D_WITH_CEDILLA                     = "\u{1E11}";
529
    public const string LATIN_CAPITAL_LETTER_E_WITH_MACRON_AND_GRAVE          = "\u{1E14}";
530
    public const string LATIN_SMALL_LETTER_E_WITH_MACRON_AND_GRAVE            = "\u{1E15}";
531
    public const string LATIN_CAPITAL_LETTER_E_WITH_MACRON_AND_ACUTE          = "\u{1E16}";
532
    public const string LATIN_SMALL_LETTER_E_WITH_MACRON_AND_ACUTE            = "\u{1E17}";
533
    public const string LATIN_CAPITAL_LETTER_E_WITH_CEDILLA_AND_BREVE         = "\u{1E1C}";
534
    public const string LATIN_SMALL_LETTER_E_WITH_CEDILLA_AND_BREVE           = "\u{1E1D}";
535
    public const string LATIN_CAPITAL_LETTER_F_WITH_DOT_ABOVE                 = "\u{1E1E}";
536
    public const string LATIN_SMALL_LETTER_F_WITH_DOT_ABOVE                   = "\u{1E1F}";
537
    public const string LATIN_CAPITAL_LETTER_G_WITH_MACRON                    = "\u{1E20}";
538
    public const string LATIN_SMALL_LETTER_G_WITH_MACRON                      = "\u{1E21}";
539
    public const string LATIN_CAPITAL_LETTER_H_WITH_DOT_ABOVE                 = "\u{1E22}";
540
    public const string LATIN_SMALL_LETTER_H_WITH_DOT_ABOVE                   = "\u{1E23}";
541
    public const string LATIN_CAPITAL_LETTER_H_WITH_DOT_BELOW                 = "\u{1E24}";
542
    public const string LATIN_SMALL_LETTER_H_WITH_DOT_BELOW                   = "\u{1E25}";
543
    public const string LATIN_CAPITAL_LETTER_H_WITH_DIAERESIS                 = "\u{1E26}";
544
    public const string LATIN_SMALL_LETTER_H_WITH_DIAERESIS                   = "\u{1E27}";
545
    public const string LATIN_CAPITAL_LETTER_H_WITH_CEDILLA                   = "\u{1E28}";
546
    public const string LATIN_SMALL_LETTER_H_WITH_CEDILLA                     = "\u{1E29}";
547
    public const string LATIN_CAPITAL_LETTER_H_WITH_BREVE_BELOW               = "\u{1E2A}";
548
    public const string LATIN_SMALL_LETTER_H_WITH_BREVE_BELOW                 = "\u{1E2B}";
549
    public const string LATIN_CAPITAL_LETTER_I_WITH_DIAERESIS_AND_ACUTE       = "\u{1E2E}";
550
    public const string LATIN_SMALL_LETTER_I_WITH_DIAERESIS_AND_ACUTE         = "\u{1E2F}";
551
    public const string LATIN_CAPITAL_LETTER_K_WITH_ACUTE                     = "\u{1E30}";
552
    public const string LATIN_SMALL_LETTER_K_WITH_ACUTE                       = "\u{1E31}";
553
    public const string LATIN_CAPITAL_LETTER_K_WITH_DOT_BELOW                 = "\u{1E32}";
554
    public const string LATIN_SMALL_LETTER_K_WITH_DOT_BELOW                   = "\u{1E33}";
555
    public const string LATIN_CAPITAL_LETTER_L_WITH_DOT_BELOW                 = "\u{1E36}";
556
    public const string LATIN_SMALL_LETTER_L_WITH_DOT_BELOW                   = "\u{1E37}";
557
    public const string LATIN_CAPITAL_LETTER_L_WITH_DOT_BELOW_AND_MACRON      = "\u{1E38}";
558
    public const string LATIN_SMALL_LETTER_L_WITH_DOT_BELOW_AND_MACRON        = "\u{1E39}";
559
    public const string LATIN_CAPITAL_LETTER_M_WITH_ACUTE                     = "\u{1E3E}";
560
    public const string LATIN_SMALL_LETTER_M_WITH_ACUTE                       = "\u{1E3F}";
561
    public const string LATIN_CAPITAL_LETTER_M_WITH_DOT_ABOVE                 = "\u{1E40}";
562
    public const string LATIN_SMALL_LETTER_M_WITH_DOT_ABOVE                   = "\u{1E41}";
563
    public const string LATIN_CAPITAL_LETTER_M_WITH_DOT_BELOW                 = "\u{1E42}";
564
    public const string LATIN_SMALL_LETTER_M_WITH_DOT_BELOW                   = "\u{1E43}";
565
    public const string LATIN_CAPITAL_LETTER_N_WITH_DOT_ABOVE                 = "\u{1E44}";
566
    public const string LATIN_SMALL_LETTER_N_WITH_DOT_ABOVE                   = "\u{1E45}";
567
    public const string LATIN_CAPITAL_LETTER_N_WITH_DOT_BELOW                 = "\u{1E46}";
568
    public const string LATIN_SMALL_LETTER_N_WITH_DOT_BELOW                   = "\u{1E47}";
569
    public const string LATIN_CAPITAL_LETTER_O_WITH_TILDE_AND_ACUTE           = "\u{1E4C}";
570
    public const string LATIN_SMALL_LETTER_O_WITH_TILDE_AND_ACUTE             = "\u{1E4D}";
571
    public const string LATIN_CAPITAL_LETTER_O_WITH_TILDE_AND_DIAERESIS       = "\u{1E4E}";
572
    public const string LATIN_SMALL_LETTER_O_WITH_TILDE_AND_DIAERESIS         = "\u{1E4F}";
573
    public const string LATIN_CAPITAL_LETTER_O_WITH_MACRON_AND_GRAVE          = "\u{1E50}";
574
    public const string LATIN_SMALL_LETTER_O_WITH_MACRON_AND_GRAVE            = "\u{1E51}";
575
    public const string LATIN_CAPITAL_LETTER_O_WITH_MACRON_AND_ACUTE          = "\u{1E52}";
576
    public const string LATIN_SMALL_LETTER_O_WITH_MACRON_AND_ACUTE            = "\u{1E53}";
577
    public const string LATIN_CAPITAL_LETTER_P_WITH_ACUTE                     = "\u{1E54}";
578
    public const string LATIN_SMALL_LETTER_P_WITH_ACUTE                       = "\u{1E55}";
579
    public const string LATIN_CAPITAL_LETTER_P_WITH_DOT_ABOVE                 = "\u{1E56}";
580
    public const string LATIN_SMALL_LETTER_P_WITH_DOT_ABOVE                   = "\u{1E57}";
581
    public const string LATIN_CAPITAL_LETTER_R_WITH_DOT_ABOVE                 = "\u{1E58}";
582
    public const string LATIN_SMALL_LETTER_R_WITH_DOT_ABOVE                   = "\u{1E59}";
583
    public const string LATIN_CAPITAL_LETTER_R_WITH_DOT_BELOW                 = "\u{1E5A}";
584
    public const string LATIN_SMALL_LETTER_R_WITH_DOT_BELOW                   = "\u{1E5B}";
585
    public const string LATIN_CAPITAL_LETTER_R_WITH_DOT_BELOW_AND_MACRON      = "\u{1E5C}";
586
    public const string LATIN_SMALL_LETTER_R_WITH_DOT_BELOW_AND_MACRON        = "\u{1E5D}";
587
    public const string LATIN_CAPITAL_LETTER_S_WITH_DOT_ABOVE                 = "\u{1E60}";
588
    public const string LATIN_SMALL_LETTER_S_WITH_DOT_ABOVE                   = "\u{1E61}";
589
    public const string LATIN_CAPITAL_LETTER_S_WITH_DOT_BELOW                 = "\u{1E62}";
590
    public const string LATIN_SMALL_LETTER_S_WITH_DOT_BELOW                   = "\u{1E63}";
591
    public const string LATIN_CAPITAL_LETTER_S_WITH_ACUTE_AND_DOT_ABOVE       = "\u{1E64}";
592
    public const string LATIN_SMALL_LETTER_S_WITH_ACUTE_AND_DOT_ABOVE         = "\u{1E65}";
593
    public const string LATIN_CAPITAL_LETTER_S_WITH_CARON_AND_DOT_ABOVE       = "\u{1E66}";
594
    public const string LATIN_SMALL_LETTER_S_WITH_CARON_AND_DOT_ABOVE         = "\u{1E67}";
595
    public const string LATIN_CAPITAL_LETTER_S_WITH_DOT_BELOW_AND_DOT_ABOVE   = "\u{1E68}";
596
    public const string LATIN_SMALL_LETTER_S_WITH_DOT_BELOW_AND_DOT_ABOVE     = "\u{1E69}";
597
    public const string LATIN_CAPITAL_LETTER_T_WITH_DOT_ABOVE                 = "\u{1E6A}";
598
    public const string LATIN_SMALL_LETTER_T_WITH_DOT_ABOVE                   = "\u{1E6B}";
599
    public const string LATIN_CAPITAL_LETTER_T_WITH_DOT_BELOW                 = "\u{1E6C}";
600
    public const string LATIN_SMALL_LETTER_T_WITH_DOT_BELOW                   = "\u{1E6D}";
601
    public const string LATIN_CAPITAL_LETTER_U_WITH_DIAERESIS_BELOW           = "\u{1E72}";
602
    public const string LATIN_SMALL_LETTER_U_WITH_DIAERESIS_BELOW             = "\u{1E73}";
603
    public const string LATIN_CAPITAL_LETTER_U_WITH_TILDE_AND_ACUTE           = "\u{1E78}";
604
    public const string LATIN_SMALL_LETTER_U_WITH_TILDE_AND_ACUTE             = "\u{1E79}";
605
    public const string LATIN_CAPITAL_LETTER_U_WITH_MACRON_AND_DIAERESIS      = "\u{1E7A}";
606
    public const string LATIN_SMALL_LETTER_U_WITH_MACRON_AND_DIAERESIS        = "\u{1E7B}";
607
    public const string LATIN_CAPITAL_LETTER_V_WITH_TILDE                     = "\u{1E7C}";
608
    public const string LATIN_SMALL_LETTER_V_WITH_TILDE                       = "\u{1E7D}";
609
    public const string LATIN_CAPITAL_LETTER_V_WITH_DOT_BELOW                 = "\u{1E7E}";
610
    public const string LATIN_SMALL_LETTER_V_WITH_DOT_BELOW                   = "\u{1E7F}";
611
    public const string LATIN_CAPITAL_LETTER_W_WITH_GRAVE                     = "\u{1E80}";
612
    public const string LATIN_SMALL_LETTER_W_WITH_GRAVE                       = "\u{1E81}";
613
    public const string LATIN_CAPITAL_LETTER_W_WITH_ACUTE                     = "\u{1E82}";
614
    public const string LATIN_SMALL_LETTER_W_WITH_ACUTE                       = "\u{1E83}";
615
    public const string LATIN_CAPITAL_LETTER_W_WITH_DIAERESIS                 = "\u{1E84}";
616
    public const string LATIN_SMALL_LETTER_W_WITH_DIAERESIS                   = "\u{1E85}";
617
    public const string LATIN_CAPITAL_LETTER_W_WITH_DOT_ABOVE                 = "\u{1E86}";
618
    public const string LATIN_SMALL_LETTER_W_WITH_DOT_ABOVE                   = "\u{1E87}";
619
    public const string LATIN_CAPITAL_LETTER_W_WITH_DOT_BELOW                 = "\u{1E88}";
620
    public const string LATIN_SMALL_LETTER_W_WITH_DOT_BELOW                   = "\u{1E89}";
621
    public const string LATIN_CAPITAL_LETTER_X_WITH_DOT_ABOVE                 = "\u{1E8A}";
622
    public const string LATIN_SMALL_LETTER_X_WITH_DOT_ABOVE                   = "\u{1E8B}";
623
    public const string LATIN_CAPITAL_LETTER_X_WITH_DIAERESIS                 = "\u{1E8C}";
624
    public const string LATIN_SMALL_LETTER_X_WITH_DIAERESIS                   = "\u{1E8D}";
625
    public const string LATIN_CAPITAL_LETTER_Y_WITH_DOT_ABOVE                 = "\u{1E8E}";
626
    public const string LATIN_SMALL_LETTER_Y_WITH_DOT_ABOVE                   = "\u{1E8F}";
627
    public const string LATIN_CAPITAL_LETTER_Z_WITH_CIRCUMFLEX                = "\u{1E90}";
628
    public const string LATIN_SMALL_LETTER_Z_WITH_CIRCUMFLEX                  = "\u{1E91}";
629
    public const string LATIN_CAPITAL_LETTER_Z_WITH_DOT_BELOW                 = "\u{1E92}";
630
    public const string LATIN_SMALL_LETTER_Z_WITH_DOT_BELOW                   = "\u{1E93}";
631
    public const string LATIN_SMALL_LETTER_T_WITH_DIAERESIS                   = "\u{1E97}";
632
    public const string LATIN_SMALL_LETTER_W_WITH_RING_ABOVE                  = "\u{1E98}";
633
    public const string LATIN_SMALL_LETTER_Y_WITH_RING_ABOVE                  = "\u{1E99}";
634
    public const string LATIN_CAPITAL_LETTER_A_WITH_DOT_BELOW                 = "\u{1EA0}";
635
    public const string LATIN_SMALL_LETTER_A_WITH_DOT_BELOW                   = "\u{1EA1}";
636
    public const string LATIN_CAPITAL_LETTER_A_WITH_HOOK_ABOVE                = "\u{1EA2}";
637
    public const string LATIN_SMALL_LETTER_A_WITH_HOOK_ABOVE                  = "\u{1EA3}";
638
    public const string LATIN_CAPITAL_LETTER_A_WITH_CIRCUMFLEX_AND_ACUTE      = "\u{1EA4}";
639
    public const string LATIN_SMALL_LETTER_A_WITH_CIRCUMFLEX_AND_ACUTE        = "\u{1EA5}";
640
    public const string LATIN_CAPITAL_LETTER_A_WITH_CIRCUMFLEX_AND_GRAVE      = "\u{1EA6}";
641
    public const string LATIN_SMALL_LETTER_A_WITH_CIRCUMFLEX_AND_GRAVE        = "\u{1EA7}";
642
    public const string LATIN_CAPITAL_LETTER_A_WITH_CIRCUMFLEX_AND_HOOK_ABOVE = "\u{1EA8}";
643
    public const string LATIN_SMALL_LETTER_A_WITH_CIRCUMFLEX_AND_HOOK_ABOVE   = "\u{1EA9}";
644
    public const string LATIN_CAPITAL_LETTER_A_WITH_CIRCUMFLEX_AND_TILDE      = "\u{1EAA}";
645
    public const string LATIN_SMALL_LETTER_A_WITH_CIRCUMFLEX_AND_TILDE        = "\u{1EAB}";
646
    public const string LATIN_CAPITAL_LETTER_A_WITH_CIRCUMFLEX_AND_DOT_BELOW  = "\u{1EAC}";
647
    public const string LATIN_SMALL_LETTER_A_WITH_CIRCUMFLEX_AND_DOT_BELOW    = "\u{1EAD}";
648
    public const string LATIN_CAPITAL_LETTER_A_WITH_BREVE_AND_ACUTE           = "\u{1EAE}";
649
    public const string LATIN_SMALL_LETTER_A_WITH_BREVE_AND_ACUTE             = "\u{1EAF}";
650
    public const string LATIN_CAPITAL_LETTER_A_WITH_BREVE_AND_GRAVE           = "\u{1EB0}";
651
    public const string LATIN_SMALL_LETTER_A_WITH_BREVE_AND_GRAVE             = "\u{1EB1}";
652
    public const string LATIN_CAPITAL_LETTER_A_WITH_BREVE_AND_HOOK_ABOVE      = "\u{1EB2}";
653
    public const string LATIN_SMALL_LETTER_A_WITH_BREVE_AND_HOOK_ABOVE        = "\u{1EB3}";
654
    public const string LATIN_CAPITAL_LETTER_A_WITH_BREVE_AND_TILDE           = "\u{1EB4}";
655
    public const string LATIN_SMALL_LETTER_A_WITH_BREVE_AND_TILDE             = "\u{1EB5}";
656
    public const string LATIN_CAPITAL_LETTER_A_WITH_BREVE_AND_DOT_BELOW       = "\u{1EB6}";
657
    public const string LATIN_SMALL_LETTER_A_WITH_BREVE_AND_DOT_BELOW         = "\u{1EB7}";
658
    public const string LATIN_CAPITAL_LETTER_E_WITH_DOT_BELOW                 = "\u{1EB8}";
659
    public const string LATIN_SMALL_LETTER_E_WITH_DOT_BELOW                   = "\u{1EB9}";
660
    public const string LATIN_CAPITAL_LETTER_E_WITH_HOOK_ABOVE                = "\u{1EBA}";
661
    public const string LATIN_SMALL_LETTER_E_WITH_HOOK_ABOVE                  = "\u{1EBB}";
662
    public const string LATIN_CAPITAL_LETTER_E_WITH_TILDE                     = "\u{1EBC}";
663
    public const string LATIN_SMALL_LETTER_E_WITH_TILDE                       = "\u{1EBD}";
664
    public const string LATIN_CAPITAL_LETTER_E_WITH_CIRCUMFLEX_AND_ACUTE      = "\u{1EBE}";
665
    public const string LATIN_SMALL_LETTER_E_WITH_CIRCUMFLEX_AND_ACUTE        = "\u{1EBF}";
666
    public const string LATIN_CAPITAL_LETTER_E_WITH_CIRCUMFLEX_AND_GRAVE      = "\u{1EC0}";
667
    public const string LATIN_SMALL_LETTER_E_WITH_CIRCUMFLEX_AND_GRAVE        = "\u{1EC1}";
668
    public const string LATIN_CAPITAL_LETTER_E_WITH_CIRCUMFLEX_AND_HOOK_ABOVE = "\u{1EC2}";
669
    public const string LATIN_SMALL_LETTER_E_WITH_CIRCUMFLEX_AND_HOOK_ABOVE   = "\u{1EC3}";
670
    public const string LATIN_CAPITAL_LETTER_E_WITH_CIRCUMFLEX_AND_TILDE      = "\u{1EC4}";
671
    public const string LATIN_SMALL_LETTER_E_WITH_CIRCUMFLEX_AND_TILDE        = "\u{1EC5}";
672
    public const string LATIN_CAPITAL_LETTER_E_WITH_CIRCUMFLEX_AND_DOT_BELOW  = "\u{1EC6}";
673
    public const string LATIN_SMALL_LETTER_E_WITH_CIRCUMFLEX_AND_DOT_BELOW    = "\u{1EC7}";
674
    public const string LATIN_CAPITAL_LETTER_I_WITH_HOOK_ABOVE                = "\u{1EC8}";
675
    public const string LATIN_SMALL_LETTER_I_WITH_HOOK_ABOVE                  = "\u{1EC9}";
676
    public const string LATIN_CAPITAL_LETTER_I_WITH_DOT_BELOW                 = "\u{1ECA}";
677
    public const string LATIN_SMALL_LETTER_I_WITH_DOT_BELOW                   = "\u{1ECB}";
678
    public const string LATIN_CAPITAL_LETTER_O_WITH_DOT_BELOW                 = "\u{1ECC}";
679
    public const string LATIN_SMALL_LETTER_O_WITH_DOT_BELOW                   = "\u{1ECD}";
680
    public const string LATIN_CAPITAL_LETTER_O_WITH_HOOK_ABOVE                = "\u{1ECE}";
681
    public const string LATIN_SMALL_LETTER_O_WITH_HOOK_ABOVE                  = "\u{1ECF}";
682
    public const string LATIN_CAPITAL_LETTER_O_WITH_CIRCUMFLEX_AND_ACUTE      = "\u{1ED0}";
683
    public const string LATIN_SMALL_LETTER_O_WITH_CIRCUMFLEX_AND_ACUTE        = "\u{1ED1}";
684
    public const string LATIN_CAPITAL_LETTER_O_WITH_CIRCUMFLEX_AND_GRAVE      = "\u{1ED2}";
685
    public const string LATIN_SMALL_LETTER_O_WITH_CIRCUMFLEX_AND_GRAVE        = "\u{1ED3}";
686
    public const string LATIN_CAPITAL_LETTER_O_WITH_CIRCUMFLEX_AND_HOOK_ABOVE = "\u{1ED4}";
687
    public const string LATIN_SMALL_LETTER_O_WITH_CIRCUMFLEX_AND_HOOK_ABOVE   = "\u{1ED5}";
688
    public const string LATIN_CAPITAL_LETTER_O_WITH_CIRCUMFLEX_AND_TILDE      = "\u{1ED6}";
689
    public const string LATIN_SMALL_LETTER_O_WITH_CIRCUMFLEX_AND_TILDE        = "\u{1ED7}";
690
    public const string LATIN_CAPITAL_LETTER_O_WITH_CIRCUMFLEX_AND_DOT_BELOW  = "\u{1ED8}";
691
    public const string LATIN_SMALL_LETTER_O_WITH_CIRCUMFLEX_AND_DOT_BELOW    = "\u{1ED9}";
692
    public const string LATIN_CAPITAL_LETTER_U_WITH_DOT_BELOW                 = "\u{1EE4}";
693
    public const string LATIN_SMALL_LETTER_U_WITH_DOT_BELOW                   = "\u{1EE5}";
694
    public const string LATIN_CAPITAL_LETTER_U_WITH_HOOK_ABOVE                = "\u{1EE6}";
695
    public const string LATIN_SMALL_LETTER_U_WITH_HOOK_ABOVE                  = "\u{1EE7}";
696
    public const string LATIN_CAPITAL_LETTER_Y_WITH_GRAVE                     = "\u{1EF2}";
697
    public const string LATIN_SMALL_LETTER_Y_WITH_GRAVE                       = "\u{1EF3}";
698
    public const string LATIN_CAPITAL_LETTER_Y_WITH_DOT_BELOW                 = "\u{1EF4}";
699
    public const string LATIN_SMALL_LETTER_Y_WITH_DOT_BELOW                   = "\u{1EF5}";
700
    public const string LATIN_CAPITAL_LETTER_Y_WITH_HOOK_ABOVE                = "\u{1EF6}";
701
    public const string LATIN_SMALL_LETTER_Y_WITH_HOOK_ABOVE                  = "\u{1EF7}";
702
    public const string LATIN_CAPITAL_LETTER_Y_WITH_TILDE                     = "\u{1EF8}";
703
    public const string LATIN_SMALL_LETTER_Y_WITH_TILDE                       = "\u{1EF9}";
704
    public const string ZERO_WIDTH_NON_JOINER                                 = "\u{200C}";
705
    public const string ZERO_WIDTH_JOINER                                     = "\u{200D}";
706
    public const string EN_DASH                                               = "\u{2013}";
707
    public const string EM_DASH                                               = "\u{2014}";
708
    public const string DOUBLE_LOW_LINE                                       = "\u{2017}";
709
    public const string LEFT_SINGLE_QUOTATION_MARK                            = "\u{2018}";
710
    public const string RIGHT_SINGLE_QUOTATION_MARK                           = "\u{2019}";
711
    public const string SINGLE_LOW_9_QUOTATION_MARK                           = "\u{201A}";
712
    public const string LEFT_DOUBLE_QUOTATION_MARK                            = "\u{201C}";
713
    public const string RIGHT_DOUBLE_QUOTATION_MARK                           = "\u{201D}";
714
    public const string DOUBLE_LOW_9_QUOTATION_MARK                           = "\u{201E}";
715
    public const string DAGGER                                                = "\u{2020}";
716
    public const string DOUBLE_DAGGER                                         = "\u{2021}";
717
    public const string BULLET                                                = "\u{2022}";
718
    public const string HORIZONTAL_ELLIPSIS                                   = "\u{2026}";
719
    public const string PER_MILLE_SIGN                                        = "\u{2030}";
720
    public const string SINGLE_LEFT_POINTING_ANGLE_QUOTATION_MARK             = "\u{2039}";
721
    public const string SINGLE_RIGHT_POINTING_ANGLE_QUOTATION_MARK            = "\u{203A}";
722
    public const string FRACTION_SLASH                                        = "\u{2044}";
723
    public const string SUPERSCRIPT_LATIN_SMALL_LETTER_N                      = "\u{207F}";
724
    public const string PESETA_SIGN                                           = "\u{20A7}";
725
    public const string EURO_SIGN                                             = "\u{20AC}";
726
    public const string SCRIPT_SMALL_L                                        = "\u{2113}";
727
    public const string NUMERO_SIGN                                           = "\u{2116}";
728
    public const string SOUND_RECORDING_COPYRIGHT                             = "\u{2117}";
729
    public const string TRADE_MARK_SIGN                                       = "\u{2122}";
730
    public const string PARTIAL_DIFFERENTIAL                                  = "\u{2202}";
731
    public const string INCREMENT                                             = "\u{2206}";
732
    public const string N_ARY_PRODUCT                                         = "\u{220F}";
733
    public const string N_ARY_SUMMATION                                       = "\u{2211}";
734
    public const string BULLET_OPERATOR                                       = "\u{2219}";
735
    public const string SQUARE_ROOT                                           = "\u{221A}";
736
    public const string INFINITY                                              = "\u{221E}";
737
    public const string INTERSECTION                                          = "\u{2229}";
738
    public const string INTEGRAL                                              = "\u{222B}";
739
    public const string ALMOST_EQUAL_TO                                       = "\u{2248}";
740
    public const string NOT_EQUAL_TO                                          = "\u{2260}";
741
    public const string IDENTICAL_TO                                          = "\u{2261}";
742
    public const string LESS_THAN_OR_EQUAL_TO                                 = "\u{2264}";
743
    public const string GREATER_THAN_OR_EQUAL_TO                              = "\u{2265}";
744
    public const string REVERSED_NOT_SIGN                                     = "\u{2310}";
745
    public const string TOP_HALF_INTEGRAL                                     = "\u{2320}";
746
    public const string BOTTOM_HALF_INTEGRAL                                  = "\u{2321}";
747
    public const string BOX_DRAWINGS_LIGHT_HORIZONTAL                         = "\u{2500}";
748
    public const string BOX_DRAWINGS_LIGHT_VERTICAL                           = "\u{2502}";
749
    public const string BOX_DRAWINGS_LIGHT_DOWN_AND_RIGHT                     = "\u{250C}";
750
    public const string BOX_DRAWINGS_LIGHT_DOWN_AND_LEFT                      = "\u{2510}";
751
    public const string BOX_DRAWINGS_LIGHT_UP_AND_LEFT                        = "\u{2518}";
752
    public const string BOX_DRAWINGS_LIGHT_UP_AND_RIGHT                       = "\u{2514}";
753
    public const string BOX_DRAWINGS_LIGHT_VERTICAL_AND_RIGHT                 = "\u{251C}";
754
    public const string BOX_DRAWINGS_LIGHT_VERTICAL_AND_LEFT                  = "\u{2524}";
755
    public const string BOX_DRAWINGS_LIGHT_DOWN_AND_HORIZONTAL                = "\u{252C}";
756
    public const string BOX_DRAWINGS_LIGHT_UP_AND_HORIZONTAL                  = "\u{2534}";
757
    public const string BOX_DRAWINGS_LIGHT_VERTICAL_AND_HORIZONTAL            = "\u{253C}";
758
    public const string BOX_DRAWINGS_DOUBLE_HORIZONTAL                        = "\u{2550}";
759
    public const string BOX_DRAWINGS_DOUBLE_VERTICAL                          = "\u{2551}";
760
    public const string BOX_DRAWINGS_DOWN_SINGLE_AND_RIGHT_DOUBLE             = "\u{2552}";
761
    public const string BOX_DRAWINGS_DOWN_DOUBLE_AND_RIGHT_SINGLE             = "\u{2553}";
762
    public const string BOX_DRAWINGS_DOUBLE_DOWN_AND_RIGHT                    = "\u{2554}";
763
    public const string BOX_DRAWINGS_DOWN_SINGLE_AND_LEFT_DOUBLE              = "\u{2555}";
764
    public const string BOX_DRAWINGS_DOWN_DOUBLE_AND_LEFT_SINGLE              = "\u{2556}";
765
    public const string BOX_DRAWINGS_DOUBLE_DOWN_AND_LEFT                     = "\u{2557}";
766
    public const string BOX_DRAWINGS_UP_SINGLE_AND_RIGHT_DOUBLE               = "\u{2558}";
767
    public const string BOX_DRAWINGS_UP_DOUBLE_AND_RIGHT_SINGLE               = "\u{2559}";
768
    public const string BOX_DRAWINGS_DOUBLE_UP_AND_RIGHT                      = "\u{255A}";
769
    public const string BOX_DRAWINGS_UP_SINGLE_AND_LEFT_DOUBLE                = "\u{255B}";
770
    public const string BOX_DRAWINGS_UP_DOUBLE_AND_LEFT_SINGLE                = "\u{255C}";
771
    public const string BOX_DRAWINGS_DOUBLE_UP_AND_LEFT                       = "\u{255D}";
772
    public const string BOX_DRAWINGS_VERTICAL_SINGLE_AND_RIGHT_DOUBLE         = "\u{255E}";
773
    public const string BOX_DRAWINGS_VERTICAL_DOUBLE_AND_RIGHT_SINGLE         = "\u{255F}";
774
    public const string BOX_DRAWINGS_DOUBLE_VERTICAL_AND_RIGHT                = "\u{2560}";
775
    public const string BOX_DRAWINGS_VERTICAL_SINGLE_AND_LEFT_DOUBLE          = "\u{2561}";
776
    public const string BOX_DRAWINGS_VERTICAL_DOUBLE_AND_LEFT_SINGLE          = "\u{2562}";
777
    public const string BOX_DRAWINGS_DOUBLE_VERTICAL_AND_LEFT                 = "\u{2563}";
778
    public const string BOX_DRAWINGS_DOWN_SINGLE_AND_HORIZONTAL_DOUBLE        = "\u{2564}";
779
    public const string BOX_DRAWINGS_DOWN_DOUBLE_AND_HORIZONTAL_SINGLE        = "\u{2565}";
780
    public const string BOX_DRAWINGS_DOUBLE_DOWN_AND_HORIZONTAL               = "\u{2566}";
781
    public const string BOX_DRAWINGS_UP_SINGLE_AND_HORIZONTAL_DOUBLE          = "\u{2567}";
782
    public const string BOX_DRAWINGS_UP_DOUBLE_AND_HORIZONTAL_SINGLE          = "\u{2568}";
783
    public const string BOX_DRAWINGS_BOX_DRAWINGS_DOUBLE_UP_AND_HORIZONTAL    = "\u{2569}";
784
    public const string BOX_DRAWINGS_VERTICAL_SINGLE_AND_HORIZONTAL_DOUBLE    = "\u{256A}";
785
    public const string BOX_DRAWINGS_VERTICAL_DOUBLE_AND_HORIZONTAL_SINGLE    = "\u{256B}";
786
    public const string BOX_DRAWINGS_DOUBLE_VERTICAL_AND_HORIZONTAL           = "\u{256C}";
787
    public const string UPPER_HALF_BLOCK                                      = "\u{2580}";
788
    public const string LOWER_HALF_BLOCK                                      = "\u{2584}";
789
    public const string FULL_BLOCK                                            = "\u{2588}";
790
    public const string LEFT_HALF_BLOCK                                       = "\u{258C}";
791
    public const string RIGHT_HALF_BLOCK                                      = "\u{2590}";
792
    public const string LIGHT_SHADE                                           = "\u{2591}";
793
    public const string MEDIUM_SHADE                                          = "\u{2592}";
794
    public const string DARK_SHADE                                            = "\u{2593}";
795
    public const string BLACK_SQUARE                                          = "\u{25A0}";
796
    public const string WHITE_SQUARE                                          = "\u{25A1}";
797
    public const string LOZENGE                                               = "\u{25CA}";
798
    public const string MUSIC_FLAT_SIGN                                       = "\u{266D}";
799
    public const string MUSIC_SHARP_SIGN                                      = "\u{266F}";
800
    public const string LATIN_SMALL_LIGATURE_FI                               = "\u{FB01}";
801
    public const string LATIN_SMALL_LIGATURE_FL                               = "\u{FB02}";
802
    public const string BYTE_ORDER_MARK                                       = "\u{FEFF}";
803
    public const string REPLACEMENT_CHARACTER                                 = "\u{FFFD}";
804
805
    /**
806
     * Convert text from (potentially invalid) UTF-8 to UTF-8.
807
     *
808
     * @param string $text
809
     *
810
     * @return string
811
     */
812
    public function fromUtf8(string $text): string
813
    {
814
        if (preg_match('//u', $text) === false) {
815
            // Not UTF8?
816
            mb_substitute_character(0xFFFD);
817
818
            return mb_convert_encoding($text, 'UTF-8', 'UTF-8');
819
        }
820
821
        return $text;
822
    }
823
824
    /**
825
     * Convert text from (potentially invalid) UTF-8 to UTF-8.
826
     *
827
     * @param string $text
828
     *
829
     * @return string
830
     */
831
    public function toUtf8(string $text): string
832
    {
833
        return $this->fromUtf8($text);
834
    }
835
836
    /**
837
     * Create a UTF8 character from a code.
838
     *
839
     * @param int $code
840
     *
841
     * @return string
842
     */
843
    public static function chr(int $code): string
844
    {
845
        if ($code < 0 || $code > 0x1FFFFF) {
846
            throw new InvalidArgumentException((string)$code);
847
        }
848
849
        if ($code <= 0x7F) {
850
            return chr($code);
851
        }
852
853
        if ($code <= 0x7FF) {
854
            return
855
                chr(($code >> 6) + 0xC0) .
856
                chr(($code & 0x3F) + 0x80);
857
        }
858
859
        if ($code <= 0xFFFF) {
860
            return
861
                chr(($code >> 12) + 0xE0) .
862
                chr((($code >> 6) & 0x3F) + 0x80) .
863
                chr(($code & 0x3F) + 0x80);
864
        }
865
866
        return
867
            chr(($code >> 18) + 0xF0) .
868
            chr((($code >> 12) & 0x3F) + 0x80) .
869
            chr((($code >> 6) & 0x3F) + 0x80) .
870
            chr(($code & 0x3F) + 0x80);
871
    }
872
}
873