Explorar o código

LibPDF: Implement most of the spec algorithm for picking TrueType glyphs

Non-CID-keyed fonts in PDFs have 8-bit codepoints which are mapped from
bytes to character names via encoding.

TrueType fonts don't index glyphs by name (Type1 fonts do), so the fix
(codified in the spec) was to make a list of all possible glyph names
and map those to (16-bit) unicode values, and then pass those into the
truetype cmap.

(As a fallback, we're supposed to look at the optional names in the
font's "post" table. That part isn't implemented here yet.)

(Note that this affects the behavior of fallback fonts for TrueType
fonts, but not yet fallback fonts for Type1 fonts, and neither the
behavior of the 14 built-in Type1 fonts (which we implement as
fallback fonts), since the TrueType fallback in Type1Font.cpp does
not use this algorithm yet. This will be fixed in a future patch.)
Nico Weber hai 1 ano
pai
achega
83128d093e

+ 1 - 0
Userland/Libraries/LibPDF/CMakeLists.txt

@@ -6,6 +6,7 @@ set(SOURCES
     Encoding.cpp
     Encryption.cpp
     Filter.cpp
+    Fonts/AdobeGlyphList.cpp
     Fonts/CFF.cpp
     Fonts/PDFFont.cpp
     Fonts/PS1FontProgram.cpp

+ 4247 - 0
Userland/Libraries/LibPDF/Fonts/AdobeGlyphList.cpp

@@ -0,0 +1,4247 @@
+/*
+ * Copyright (c) 2023, Nico Weber <thakis@chromium.org>
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+/*
+Contains the Adobe Glyph List, transformed into C++ via this script:
+
+```py
+#!/usr/bin/env python3
+
+import sys
+
+print(f'static HashMap<StringView, u32> constexpr glyph_list = {{')
+for line in open('glyphlist.txt'):
+    line = line.strip()
+    if line.startswith('#'):
+        continue
+
+    name, codepoint = line.split(';')
+
+    if ' ' in codepoint:
+        print(f'skipping {name}, multiple codepoints', file=sys.stderr)
+        continue
+
+    print(f'    {{ "{name}"sv, 0x{codepoint} }},')
+print(f'}};')
+```
+
+where glyphlist.txt is from https://github.com/adobe-type-tools/agl-aglfn/blob/master/glyphlist.txt
+*/
+
+#include <AK/HashMap.h>
+#include <LibPDF/Fonts/AdobeGlyphList.h>
+
+namespace PDF {
+
+static HashMap<StringView, u32> const glyph_list = {
+    { "A"sv, 0x0041 },
+    { "AE"sv, 0x00C6 },
+    { "AEacute"sv, 0x01FC },
+    { "AEmacron"sv, 0x01E2 },
+    { "AEsmall"sv, 0xF7E6 },
+    { "Aacute"sv, 0x00C1 },
+    { "Aacutesmall"sv, 0xF7E1 },
+    { "Abreve"sv, 0x0102 },
+    { "Abreveacute"sv, 0x1EAE },
+    { "Abrevecyrillic"sv, 0x04D0 },
+    { "Abrevedotbelow"sv, 0x1EB6 },
+    { "Abrevegrave"sv, 0x1EB0 },
+    { "Abrevehookabove"sv, 0x1EB2 },
+    { "Abrevetilde"sv, 0x1EB4 },
+    { "Acaron"sv, 0x01CD },
+    { "Acircle"sv, 0x24B6 },
+    { "Acircumflex"sv, 0x00C2 },
+    { "Acircumflexacute"sv, 0x1EA4 },
+    { "Acircumflexdotbelow"sv, 0x1EAC },
+    { "Acircumflexgrave"sv, 0x1EA6 },
+    { "Acircumflexhookabove"sv, 0x1EA8 },
+    { "Acircumflexsmall"sv, 0xF7E2 },
+    { "Acircumflextilde"sv, 0x1EAA },
+    { "Acute"sv, 0xF6C9 },
+    { "Acutesmall"sv, 0xF7B4 },
+    { "Acyrillic"sv, 0x0410 },
+    { "Adblgrave"sv, 0x0200 },
+    { "Adieresis"sv, 0x00C4 },
+    { "Adieresiscyrillic"sv, 0x04D2 },
+    { "Adieresismacron"sv, 0x01DE },
+    { "Adieresissmall"sv, 0xF7E4 },
+    { "Adotbelow"sv, 0x1EA0 },
+    { "Adotmacron"sv, 0x01E0 },
+    { "Agrave"sv, 0x00C0 },
+    { "Agravesmall"sv, 0xF7E0 },
+    { "Ahookabove"sv, 0x1EA2 },
+    { "Aiecyrillic"sv, 0x04D4 },
+    { "Ainvertedbreve"sv, 0x0202 },
+    { "Alpha"sv, 0x0391 },
+    { "Alphatonos"sv, 0x0386 },
+    { "Amacron"sv, 0x0100 },
+    { "Amonospace"sv, 0xFF21 },
+    { "Aogonek"sv, 0x0104 },
+    { "Aring"sv, 0x00C5 },
+    { "Aringacute"sv, 0x01FA },
+    { "Aringbelow"sv, 0x1E00 },
+    { "Aringsmall"sv, 0xF7E5 },
+    { "Asmall"sv, 0xF761 },
+    { "Atilde"sv, 0x00C3 },
+    { "Atildesmall"sv, 0xF7E3 },
+    { "Aybarmenian"sv, 0x0531 },
+    { "B"sv, 0x0042 },
+    { "Bcircle"sv, 0x24B7 },
+    { "Bdotaccent"sv, 0x1E02 },
+    { "Bdotbelow"sv, 0x1E04 },
+    { "Becyrillic"sv, 0x0411 },
+    { "Benarmenian"sv, 0x0532 },
+    { "Beta"sv, 0x0392 },
+    { "Bhook"sv, 0x0181 },
+    { "Blinebelow"sv, 0x1E06 },
+    { "Bmonospace"sv, 0xFF22 },
+    { "Brevesmall"sv, 0xF6F4 },
+    { "Bsmall"sv, 0xF762 },
+    { "Btopbar"sv, 0x0182 },
+    { "C"sv, 0x0043 },
+    { "Caarmenian"sv, 0x053E },
+    { "Cacute"sv, 0x0106 },
+    { "Caron"sv, 0xF6CA },
+    { "Caronsmall"sv, 0xF6F5 },
+    { "Ccaron"sv, 0x010C },
+    { "Ccedilla"sv, 0x00C7 },
+    { "Ccedillaacute"sv, 0x1E08 },
+    { "Ccedillasmall"sv, 0xF7E7 },
+    { "Ccircle"sv, 0x24B8 },
+    { "Ccircumflex"sv, 0x0108 },
+    { "Cdot"sv, 0x010A },
+    { "Cdotaccent"sv, 0x010A },
+    { "Cedillasmall"sv, 0xF7B8 },
+    { "Chaarmenian"sv, 0x0549 },
+    { "Cheabkhasiancyrillic"sv, 0x04BC },
+    { "Checyrillic"sv, 0x0427 },
+    { "Chedescenderabkhasiancyrillic"sv, 0x04BE },
+    { "Chedescendercyrillic"sv, 0x04B6 },
+    { "Chedieresiscyrillic"sv, 0x04F4 },
+    { "Cheharmenian"sv, 0x0543 },
+    { "Chekhakassiancyrillic"sv, 0x04CB },
+    { "Cheverticalstrokecyrillic"sv, 0x04B8 },
+    { "Chi"sv, 0x03A7 },
+    { "Chook"sv, 0x0187 },
+    { "Circumflexsmall"sv, 0xF6F6 },
+    { "Cmonospace"sv, 0xFF23 },
+    { "Coarmenian"sv, 0x0551 },
+    { "Csmall"sv, 0xF763 },
+    { "D"sv, 0x0044 },
+    { "DZ"sv, 0x01F1 },
+    { "DZcaron"sv, 0x01C4 },
+    { "Daarmenian"sv, 0x0534 },
+    { "Dafrican"sv, 0x0189 },
+    { "Dcaron"sv, 0x010E },
+    { "Dcedilla"sv, 0x1E10 },
+    { "Dcircle"sv, 0x24B9 },
+    { "Dcircumflexbelow"sv, 0x1E12 },
+    { "Dcroat"sv, 0x0110 },
+    { "Ddotaccent"sv, 0x1E0A },
+    { "Ddotbelow"sv, 0x1E0C },
+    { "Decyrillic"sv, 0x0414 },
+    { "Deicoptic"sv, 0x03EE },
+    { "Delta"sv, 0x2206 },
+    { "Deltagreek"sv, 0x0394 },
+    { "Dhook"sv, 0x018A },
+    { "Dieresis"sv, 0xF6CB },
+    { "DieresisAcute"sv, 0xF6CC },
+    { "DieresisGrave"sv, 0xF6CD },
+    { "Dieresissmall"sv, 0xF7A8 },
+    { "Digammagreek"sv, 0x03DC },
+    { "Djecyrillic"sv, 0x0402 },
+    { "Dlinebelow"sv, 0x1E0E },
+    { "Dmonospace"sv, 0xFF24 },
+    { "Dotaccentsmall"sv, 0xF6F7 },
+    { "Dslash"sv, 0x0110 },
+    { "Dsmall"sv, 0xF764 },
+    { "Dtopbar"sv, 0x018B },
+    { "Dz"sv, 0x01F2 },
+    { "Dzcaron"sv, 0x01C5 },
+    { "Dzeabkhasiancyrillic"sv, 0x04E0 },
+    { "Dzecyrillic"sv, 0x0405 },
+    { "Dzhecyrillic"sv, 0x040F },
+    { "E"sv, 0x0045 },
+    { "Eacute"sv, 0x00C9 },
+    { "Eacutesmall"sv, 0xF7E9 },
+    { "Ebreve"sv, 0x0114 },
+    { "Ecaron"sv, 0x011A },
+    { "Ecedillabreve"sv, 0x1E1C },
+    { "Echarmenian"sv, 0x0535 },
+    { "Ecircle"sv, 0x24BA },
+    { "Ecircumflex"sv, 0x00CA },
+    { "Ecircumflexacute"sv, 0x1EBE },
+    { "Ecircumflexbelow"sv, 0x1E18 },
+    { "Ecircumflexdotbelow"sv, 0x1EC6 },
+    { "Ecircumflexgrave"sv, 0x1EC0 },
+    { "Ecircumflexhookabove"sv, 0x1EC2 },
+    { "Ecircumflexsmall"sv, 0xF7EA },
+    { "Ecircumflextilde"sv, 0x1EC4 },
+    { "Ecyrillic"sv, 0x0404 },
+    { "Edblgrave"sv, 0x0204 },
+    { "Edieresis"sv, 0x00CB },
+    { "Edieresissmall"sv, 0xF7EB },
+    { "Edot"sv, 0x0116 },
+    { "Edotaccent"sv, 0x0116 },
+    { "Edotbelow"sv, 0x1EB8 },
+    { "Efcyrillic"sv, 0x0424 },
+    { "Egrave"sv, 0x00C8 },
+    { "Egravesmall"sv, 0xF7E8 },
+    { "Eharmenian"sv, 0x0537 },
+    { "Ehookabove"sv, 0x1EBA },
+    { "Eightroman"sv, 0x2167 },
+    { "Einvertedbreve"sv, 0x0206 },
+    { "Eiotifiedcyrillic"sv, 0x0464 },
+    { "Elcyrillic"sv, 0x041B },
+    { "Elevenroman"sv, 0x216A },
+    { "Emacron"sv, 0x0112 },
+    { "Emacronacute"sv, 0x1E16 },
+    { "Emacrongrave"sv, 0x1E14 },
+    { "Emcyrillic"sv, 0x041C },
+    { "Emonospace"sv, 0xFF25 },
+    { "Encyrillic"sv, 0x041D },
+    { "Endescendercyrillic"sv, 0x04A2 },
+    { "Eng"sv, 0x014A },
+    { "Enghecyrillic"sv, 0x04A4 },
+    { "Enhookcyrillic"sv, 0x04C7 },
+    { "Eogonek"sv, 0x0118 },
+    { "Eopen"sv, 0x0190 },
+    { "Epsilon"sv, 0x0395 },
+    { "Epsilontonos"sv, 0x0388 },
+    { "Ercyrillic"sv, 0x0420 },
+    { "Ereversed"sv, 0x018E },
+    { "Ereversedcyrillic"sv, 0x042D },
+    { "Escyrillic"sv, 0x0421 },
+    { "Esdescendercyrillic"sv, 0x04AA },
+    { "Esh"sv, 0x01A9 },
+    { "Esmall"sv, 0xF765 },
+    { "Eta"sv, 0x0397 },
+    { "Etarmenian"sv, 0x0538 },
+    { "Etatonos"sv, 0x0389 },
+    { "Eth"sv, 0x00D0 },
+    { "Ethsmall"sv, 0xF7F0 },
+    { "Etilde"sv, 0x1EBC },
+    { "Etildebelow"sv, 0x1E1A },
+    { "Euro"sv, 0x20AC },
+    { "Ezh"sv, 0x01B7 },
+    { "Ezhcaron"sv, 0x01EE },
+    { "Ezhreversed"sv, 0x01B8 },
+    { "F"sv, 0x0046 },
+    { "Fcircle"sv, 0x24BB },
+    { "Fdotaccent"sv, 0x1E1E },
+    { "Feharmenian"sv, 0x0556 },
+    { "Feicoptic"sv, 0x03E4 },
+    { "Fhook"sv, 0x0191 },
+    { "Fitacyrillic"sv, 0x0472 },
+    { "Fiveroman"sv, 0x2164 },
+    { "Fmonospace"sv, 0xFF26 },
+    { "Fourroman"sv, 0x2163 },
+    { "Fsmall"sv, 0xF766 },
+    { "G"sv, 0x0047 },
+    { "GBsquare"sv, 0x3387 },
+    { "Gacute"sv, 0x01F4 },
+    { "Gamma"sv, 0x0393 },
+    { "Gammaafrican"sv, 0x0194 },
+    { "Gangiacoptic"sv, 0x03EA },
+    { "Gbreve"sv, 0x011E },
+    { "Gcaron"sv, 0x01E6 },
+    { "Gcedilla"sv, 0x0122 },
+    { "Gcircle"sv, 0x24BC },
+    { "Gcircumflex"sv, 0x011C },
+    { "Gcommaaccent"sv, 0x0122 },
+    { "Gdot"sv, 0x0120 },
+    { "Gdotaccent"sv, 0x0120 },
+    { "Gecyrillic"sv, 0x0413 },
+    { "Ghadarmenian"sv, 0x0542 },
+    { "Ghemiddlehookcyrillic"sv, 0x0494 },
+    { "Ghestrokecyrillic"sv, 0x0492 },
+    { "Gheupturncyrillic"sv, 0x0490 },
+    { "Ghook"sv, 0x0193 },
+    { "Gimarmenian"sv, 0x0533 },
+    { "Gjecyrillic"sv, 0x0403 },
+    { "Gmacron"sv, 0x1E20 },
+    { "Gmonospace"sv, 0xFF27 },
+    { "Grave"sv, 0xF6CE },
+    { "Gravesmall"sv, 0xF760 },
+    { "Gsmall"sv, 0xF767 },
+    { "Gsmallhook"sv, 0x029B },
+    { "Gstroke"sv, 0x01E4 },
+    { "H"sv, 0x0048 },
+    { "H18533"sv, 0x25CF },
+    { "H18543"sv, 0x25AA },
+    { "H18551"sv, 0x25AB },
+    { "H22073"sv, 0x25A1 },
+    { "HPsquare"sv, 0x33CB },
+    { "Haabkhasiancyrillic"sv, 0x04A8 },
+    { "Hadescendercyrillic"sv, 0x04B2 },
+    { "Hardsigncyrillic"sv, 0x042A },
+    { "Hbar"sv, 0x0126 },
+    { "Hbrevebelow"sv, 0x1E2A },
+    { "Hcedilla"sv, 0x1E28 },
+    { "Hcircle"sv, 0x24BD },
+    { "Hcircumflex"sv, 0x0124 },
+    { "Hdieresis"sv, 0x1E26 },
+    { "Hdotaccent"sv, 0x1E22 },
+    { "Hdotbelow"sv, 0x1E24 },
+    { "Hmonospace"sv, 0xFF28 },
+    { "Hoarmenian"sv, 0x0540 },
+    { "Horicoptic"sv, 0x03E8 },
+    { "Hsmall"sv, 0xF768 },
+    { "Hungarumlaut"sv, 0xF6CF },
+    { "Hungarumlautsmall"sv, 0xF6F8 },
+    { "Hzsquare"sv, 0x3390 },
+    { "I"sv, 0x0049 },
+    { "IAcyrillic"sv, 0x042F },
+    { "IJ"sv, 0x0132 },
+    { "IUcyrillic"sv, 0x042E },
+    { "Iacute"sv, 0x00CD },
+    { "Iacutesmall"sv, 0xF7ED },
+    { "Ibreve"sv, 0x012C },
+    { "Icaron"sv, 0x01CF },
+    { "Icircle"sv, 0x24BE },
+    { "Icircumflex"sv, 0x00CE },
+    { "Icircumflexsmall"sv, 0xF7EE },
+    { "Icyrillic"sv, 0x0406 },
+    { "Idblgrave"sv, 0x0208 },
+    { "Idieresis"sv, 0x00CF },
+    { "Idieresisacute"sv, 0x1E2E },
+    { "Idieresiscyrillic"sv, 0x04E4 },
+    { "Idieresissmall"sv, 0xF7EF },
+    { "Idot"sv, 0x0130 },
+    { "Idotaccent"sv, 0x0130 },
+    { "Idotbelow"sv, 0x1ECA },
+    { "Iebrevecyrillic"sv, 0x04D6 },
+    { "Iecyrillic"sv, 0x0415 },
+    { "Ifraktur"sv, 0x2111 },
+    { "Igrave"sv, 0x00CC },
+    { "Igravesmall"sv, 0xF7EC },
+    { "Ihookabove"sv, 0x1EC8 },
+    { "Iicyrillic"sv, 0x0418 },
+    { "Iinvertedbreve"sv, 0x020A },
+    { "Iishortcyrillic"sv, 0x0419 },
+    { "Imacron"sv, 0x012A },
+    { "Imacroncyrillic"sv, 0x04E2 },
+    { "Imonospace"sv, 0xFF29 },
+    { "Iniarmenian"sv, 0x053B },
+    { "Iocyrillic"sv, 0x0401 },
+    { "Iogonek"sv, 0x012E },
+    { "Iota"sv, 0x0399 },
+    { "Iotaafrican"sv, 0x0196 },
+    { "Iotadieresis"sv, 0x03AA },
+    { "Iotatonos"sv, 0x038A },
+    { "Ismall"sv, 0xF769 },
+    { "Istroke"sv, 0x0197 },
+    { "Itilde"sv, 0x0128 },
+    { "Itildebelow"sv, 0x1E2C },
+    { "Izhitsacyrillic"sv, 0x0474 },
+    { "Izhitsadblgravecyrillic"sv, 0x0476 },
+    { "J"sv, 0x004A },
+    { "Jaarmenian"sv, 0x0541 },
+    { "Jcircle"sv, 0x24BF },
+    { "Jcircumflex"sv, 0x0134 },
+    { "Jecyrillic"sv, 0x0408 },
+    { "Jheharmenian"sv, 0x054B },
+    { "Jmonospace"sv, 0xFF2A },
+    { "Jsmall"sv, 0xF76A },
+    { "K"sv, 0x004B },
+    { "KBsquare"sv, 0x3385 },
+    { "KKsquare"sv, 0x33CD },
+    { "Kabashkircyrillic"sv, 0x04A0 },
+    { "Kacute"sv, 0x1E30 },
+    { "Kacyrillic"sv, 0x041A },
+    { "Kadescendercyrillic"sv, 0x049A },
+    { "Kahookcyrillic"sv, 0x04C3 },
+    { "Kappa"sv, 0x039A },
+    { "Kastrokecyrillic"sv, 0x049E },
+    { "Kaverticalstrokecyrillic"sv, 0x049C },
+    { "Kcaron"sv, 0x01E8 },
+    { "Kcedilla"sv, 0x0136 },
+    { "Kcircle"sv, 0x24C0 },
+    { "Kcommaaccent"sv, 0x0136 },
+    { "Kdotbelow"sv, 0x1E32 },
+    { "Keharmenian"sv, 0x0554 },
+    { "Kenarmenian"sv, 0x053F },
+    { "Khacyrillic"sv, 0x0425 },
+    { "Kheicoptic"sv, 0x03E6 },
+    { "Khook"sv, 0x0198 },
+    { "Kjecyrillic"sv, 0x040C },
+    { "Klinebelow"sv, 0x1E34 },
+    { "Kmonospace"sv, 0xFF2B },
+    { "Koppacyrillic"sv, 0x0480 },
+    { "Koppagreek"sv, 0x03DE },
+    { "Ksicyrillic"sv, 0x046E },
+    { "Ksmall"sv, 0xF76B },
+    { "L"sv, 0x004C },
+    { "LJ"sv, 0x01C7 },
+    { "LL"sv, 0xF6BF },
+    { "Lacute"sv, 0x0139 },
+    { "Lambda"sv, 0x039B },
+    { "Lcaron"sv, 0x013D },
+    { "Lcedilla"sv, 0x013B },
+    { "Lcircle"sv, 0x24C1 },
+    { "Lcircumflexbelow"sv, 0x1E3C },
+    { "Lcommaaccent"sv, 0x013B },
+    { "Ldot"sv, 0x013F },
+    { "Ldotaccent"sv, 0x013F },
+    { "Ldotbelow"sv, 0x1E36 },
+    { "Ldotbelowmacron"sv, 0x1E38 },
+    { "Liwnarmenian"sv, 0x053C },
+    { "Lj"sv, 0x01C8 },
+    { "Ljecyrillic"sv, 0x0409 },
+    { "Llinebelow"sv, 0x1E3A },
+    { "Lmonospace"sv, 0xFF2C },
+    { "Lslash"sv, 0x0141 },
+    { "Lslashsmall"sv, 0xF6F9 },
+    { "Lsmall"sv, 0xF76C },
+    { "M"sv, 0x004D },
+    { "MBsquare"sv, 0x3386 },
+    { "Macron"sv, 0xF6D0 },
+    { "Macronsmall"sv, 0xF7AF },
+    { "Macute"sv, 0x1E3E },
+    { "Mcircle"sv, 0x24C2 },
+    { "Mdotaccent"sv, 0x1E40 },
+    { "Mdotbelow"sv, 0x1E42 },
+    { "Menarmenian"sv, 0x0544 },
+    { "Mmonospace"sv, 0xFF2D },
+    { "Msmall"sv, 0xF76D },
+    { "Mturned"sv, 0x019C },
+    { "Mu"sv, 0x039C },
+    { "N"sv, 0x004E },
+    { "NJ"sv, 0x01CA },
+    { "Nacute"sv, 0x0143 },
+    { "Ncaron"sv, 0x0147 },
+    { "Ncedilla"sv, 0x0145 },
+    { "Ncircle"sv, 0x24C3 },
+    { "Ncircumflexbelow"sv, 0x1E4A },
+    { "Ncommaaccent"sv, 0x0145 },
+    { "Ndotaccent"sv, 0x1E44 },
+    { "Ndotbelow"sv, 0x1E46 },
+    { "Nhookleft"sv, 0x019D },
+    { "Nineroman"sv, 0x2168 },
+    { "Nj"sv, 0x01CB },
+    { "Njecyrillic"sv, 0x040A },
+    { "Nlinebelow"sv, 0x1E48 },
+    { "Nmonospace"sv, 0xFF2E },
+    { "Nowarmenian"sv, 0x0546 },
+    { "Nsmall"sv, 0xF76E },
+    { "Ntilde"sv, 0x00D1 },
+    { "Ntildesmall"sv, 0xF7F1 },
+    { "Nu"sv, 0x039D },
+    { "O"sv, 0x004F },
+    { "OE"sv, 0x0152 },
+    { "OEsmall"sv, 0xF6FA },
+    { "Oacute"sv, 0x00D3 },
+    { "Oacutesmall"sv, 0xF7F3 },
+    { "Obarredcyrillic"sv, 0x04E8 },
+    { "Obarreddieresiscyrillic"sv, 0x04EA },
+    { "Obreve"sv, 0x014E },
+    { "Ocaron"sv, 0x01D1 },
+    { "Ocenteredtilde"sv, 0x019F },
+    { "Ocircle"sv, 0x24C4 },
+    { "Ocircumflex"sv, 0x00D4 },
+    { "Ocircumflexacute"sv, 0x1ED0 },
+    { "Ocircumflexdotbelow"sv, 0x1ED8 },
+    { "Ocircumflexgrave"sv, 0x1ED2 },
+    { "Ocircumflexhookabove"sv, 0x1ED4 },
+    { "Ocircumflexsmall"sv, 0xF7F4 },
+    { "Ocircumflextilde"sv, 0x1ED6 },
+    { "Ocyrillic"sv, 0x041E },
+    { "Odblacute"sv, 0x0150 },
+    { "Odblgrave"sv, 0x020C },
+    { "Odieresis"sv, 0x00D6 },
+    { "Odieresiscyrillic"sv, 0x04E6 },
+    { "Odieresissmall"sv, 0xF7F6 },
+    { "Odotbelow"sv, 0x1ECC },
+    { "Ogoneksmall"sv, 0xF6FB },
+    { "Ograve"sv, 0x00D2 },
+    { "Ogravesmall"sv, 0xF7F2 },
+    { "Oharmenian"sv, 0x0555 },
+    { "Ohm"sv, 0x2126 },
+    { "Ohookabove"sv, 0x1ECE },
+    { "Ohorn"sv, 0x01A0 },
+    { "Ohornacute"sv, 0x1EDA },
+    { "Ohorndotbelow"sv, 0x1EE2 },
+    { "Ohorngrave"sv, 0x1EDC },
+    { "Ohornhookabove"sv, 0x1EDE },
+    { "Ohorntilde"sv, 0x1EE0 },
+    { "Ohungarumlaut"sv, 0x0150 },
+    { "Oi"sv, 0x01A2 },
+    { "Oinvertedbreve"sv, 0x020E },
+    { "Omacron"sv, 0x014C },
+    { "Omacronacute"sv, 0x1E52 },
+    { "Omacrongrave"sv, 0x1E50 },
+    { "Omega"sv, 0x2126 },
+    { "Omegacyrillic"sv, 0x0460 },
+    { "Omegagreek"sv, 0x03A9 },
+    { "Omegaroundcyrillic"sv, 0x047A },
+    { "Omegatitlocyrillic"sv, 0x047C },
+    { "Omegatonos"sv, 0x038F },
+    { "Omicron"sv, 0x039F },
+    { "Omicrontonos"sv, 0x038C },
+    { "Omonospace"sv, 0xFF2F },
+    { "Oneroman"sv, 0x2160 },
+    { "Oogonek"sv, 0x01EA },
+    { "Oogonekmacron"sv, 0x01EC },
+    { "Oopen"sv, 0x0186 },
+    { "Oslash"sv, 0x00D8 },
+    { "Oslashacute"sv, 0x01FE },
+    { "Oslashsmall"sv, 0xF7F8 },
+    { "Osmall"sv, 0xF76F },
+    { "Ostrokeacute"sv, 0x01FE },
+    { "Otcyrillic"sv, 0x047E },
+    { "Otilde"sv, 0x00D5 },
+    { "Otildeacute"sv, 0x1E4C },
+    { "Otildedieresis"sv, 0x1E4E },
+    { "Otildesmall"sv, 0xF7F5 },
+    { "P"sv, 0x0050 },
+    { "Pacute"sv, 0x1E54 },
+    { "Pcircle"sv, 0x24C5 },
+    { "Pdotaccent"sv, 0x1E56 },
+    { "Pecyrillic"sv, 0x041F },
+    { "Peharmenian"sv, 0x054A },
+    { "Pemiddlehookcyrillic"sv, 0x04A6 },
+    { "Phi"sv, 0x03A6 },
+    { "Phook"sv, 0x01A4 },
+    { "Pi"sv, 0x03A0 },
+    { "Piwrarmenian"sv, 0x0553 },
+    { "Pmonospace"sv, 0xFF30 },
+    { "Psi"sv, 0x03A8 },
+    { "Psicyrillic"sv, 0x0470 },
+    { "Psmall"sv, 0xF770 },
+    { "Q"sv, 0x0051 },
+    { "Qcircle"sv, 0x24C6 },
+    { "Qmonospace"sv, 0xFF31 },
+    { "Qsmall"sv, 0xF771 },
+    { "R"sv, 0x0052 },
+    { "Raarmenian"sv, 0x054C },
+    { "Racute"sv, 0x0154 },
+    { "Rcaron"sv, 0x0158 },
+    { "Rcedilla"sv, 0x0156 },
+    { "Rcircle"sv, 0x24C7 },
+    { "Rcommaaccent"sv, 0x0156 },
+    { "Rdblgrave"sv, 0x0210 },
+    { "Rdotaccent"sv, 0x1E58 },
+    { "Rdotbelow"sv, 0x1E5A },
+    { "Rdotbelowmacron"sv, 0x1E5C },
+    { "Reharmenian"sv, 0x0550 },
+    { "Rfraktur"sv, 0x211C },
+    { "Rho"sv, 0x03A1 },
+    { "Ringsmall"sv, 0xF6FC },
+    { "Rinvertedbreve"sv, 0x0212 },
+    { "Rlinebelow"sv, 0x1E5E },
+    { "Rmonospace"sv, 0xFF32 },
+    { "Rsmall"sv, 0xF772 },
+    { "Rsmallinverted"sv, 0x0281 },
+    { "Rsmallinvertedsuperior"sv, 0x02B6 },
+    { "S"sv, 0x0053 },
+    { "SF010000"sv, 0x250C },
+    { "SF020000"sv, 0x2514 },
+    { "SF030000"sv, 0x2510 },
+    { "SF040000"sv, 0x2518 },
+    { "SF050000"sv, 0x253C },
+    { "SF060000"sv, 0x252C },
+    { "SF070000"sv, 0x2534 },
+    { "SF080000"sv, 0x251C },
+    { "SF090000"sv, 0x2524 },
+    { "SF100000"sv, 0x2500 },
+    { "SF110000"sv, 0x2502 },
+    { "SF190000"sv, 0x2561 },
+    { "SF200000"sv, 0x2562 },
+    { "SF210000"sv, 0x2556 },
+    { "SF220000"sv, 0x2555 },
+    { "SF230000"sv, 0x2563 },
+    { "SF240000"sv, 0x2551 },
+    { "SF250000"sv, 0x2557 },
+    { "SF260000"sv, 0x255D },
+    { "SF270000"sv, 0x255C },
+    { "SF280000"sv, 0x255B },
+    { "SF360000"sv, 0x255E },
+    { "SF370000"sv, 0x255F },
+    { "SF380000"sv, 0x255A },
+    { "SF390000"sv, 0x2554 },
+    { "SF400000"sv, 0x2569 },
+    { "SF410000"sv, 0x2566 },
+    { "SF420000"sv, 0x2560 },
+    { "SF430000"sv, 0x2550 },
+    { "SF440000"sv, 0x256C },
+    { "SF450000"sv, 0x2567 },
+    { "SF460000"sv, 0x2568 },
+    { "SF470000"sv, 0x2564 },
+    { "SF480000"sv, 0x2565 },
+    { "SF490000"sv, 0x2559 },
+    { "SF500000"sv, 0x2558 },
+    { "SF510000"sv, 0x2552 },
+    { "SF520000"sv, 0x2553 },
+    { "SF530000"sv, 0x256B },
+    { "SF540000"sv, 0x256A },
+    { "Sacute"sv, 0x015A },
+    { "Sacutedotaccent"sv, 0x1E64 },
+    { "Sampigreek"sv, 0x03E0 },
+    { "Scaron"sv, 0x0160 },
+    { "Scarondotaccent"sv, 0x1E66 },
+    { "Scaronsmall"sv, 0xF6FD },
+    { "Scedilla"sv, 0x015E },
+    { "Schwa"sv, 0x018F },
+    { "Schwacyrillic"sv, 0x04D8 },
+    { "Schwadieresiscyrillic"sv, 0x04DA },
+    { "Scircle"sv, 0x24C8 },
+    { "Scircumflex"sv, 0x015C },
+    { "Scommaaccent"sv, 0x0218 },
+    { "Sdotaccent"sv, 0x1E60 },
+    { "Sdotbelow"sv, 0x1E62 },
+    { "Sdotbelowdotaccent"sv, 0x1E68 },
+    { "Seharmenian"sv, 0x054D },
+    { "Sevenroman"sv, 0x2166 },
+    { "Shaarmenian"sv, 0x0547 },
+    { "Shacyrillic"sv, 0x0428 },
+    { "Shchacyrillic"sv, 0x0429 },
+    { "Sheicoptic"sv, 0x03E2 },
+    { "Shhacyrillic"sv, 0x04BA },
+    { "Shimacoptic"sv, 0x03EC },
+    { "Sigma"sv, 0x03A3 },
+    { "Sixroman"sv, 0x2165 },
+    { "Smonospace"sv, 0xFF33 },
+    { "Softsigncyrillic"sv, 0x042C },
+    { "Ssmall"sv, 0xF773 },
+    { "Stigmagreek"sv, 0x03DA },
+    { "T"sv, 0x0054 },
+    { "Tau"sv, 0x03A4 },
+    { "Tbar"sv, 0x0166 },
+    { "Tcaron"sv, 0x0164 },
+    { "Tcedilla"sv, 0x0162 },
+    { "Tcircle"sv, 0x24C9 },
+    { "Tcircumflexbelow"sv, 0x1E70 },
+    { "Tcommaaccent"sv, 0x0162 },
+    { "Tdotaccent"sv, 0x1E6A },
+    { "Tdotbelow"sv, 0x1E6C },
+    { "Tecyrillic"sv, 0x0422 },
+    { "Tedescendercyrillic"sv, 0x04AC },
+    { "Tenroman"sv, 0x2169 },
+    { "Tetsecyrillic"sv, 0x04B4 },
+    { "Theta"sv, 0x0398 },
+    { "Thook"sv, 0x01AC },
+    { "Thorn"sv, 0x00DE },
+    { "Thornsmall"sv, 0xF7FE },
+    { "Threeroman"sv, 0x2162 },
+    { "Tildesmall"sv, 0xF6FE },
+    { "Tiwnarmenian"sv, 0x054F },
+    { "Tlinebelow"sv, 0x1E6E },
+    { "Tmonospace"sv, 0xFF34 },
+    { "Toarmenian"sv, 0x0539 },
+    { "Tonefive"sv, 0x01BC },
+    { "Tonesix"sv, 0x0184 },
+    { "Tonetwo"sv, 0x01A7 },
+    { "Tretroflexhook"sv, 0x01AE },
+    { "Tsecyrillic"sv, 0x0426 },
+    { "Tshecyrillic"sv, 0x040B },
+    { "Tsmall"sv, 0xF774 },
+    { "Twelveroman"sv, 0x216B },
+    { "Tworoman"sv, 0x2161 },
+    { "U"sv, 0x0055 },
+    { "Uacute"sv, 0x00DA },
+    { "Uacutesmall"sv, 0xF7FA },
+    { "Ubreve"sv, 0x016C },
+    { "Ucaron"sv, 0x01D3 },
+    { "Ucircle"sv, 0x24CA },
+    { "Ucircumflex"sv, 0x00DB },
+    { "Ucircumflexbelow"sv, 0x1E76 },
+    { "Ucircumflexsmall"sv, 0xF7FB },
+    { "Ucyrillic"sv, 0x0423 },
+    { "Udblacute"sv, 0x0170 },
+    { "Udblgrave"sv, 0x0214 },
+    { "Udieresis"sv, 0x00DC },
+    { "Udieresisacute"sv, 0x01D7 },
+    { "Udieresisbelow"sv, 0x1E72 },
+    { "Udieresiscaron"sv, 0x01D9 },
+    { "Udieresiscyrillic"sv, 0x04F0 },
+    { "Udieresisgrave"sv, 0x01DB },
+    { "Udieresismacron"sv, 0x01D5 },
+    { "Udieresissmall"sv, 0xF7FC },
+    { "Udotbelow"sv, 0x1EE4 },
+    { "Ugrave"sv, 0x00D9 },
+    { "Ugravesmall"sv, 0xF7F9 },
+    { "Uhookabove"sv, 0x1EE6 },
+    { "Uhorn"sv, 0x01AF },
+    { "Uhornacute"sv, 0x1EE8 },
+    { "Uhorndotbelow"sv, 0x1EF0 },
+    { "Uhorngrave"sv, 0x1EEA },
+    { "Uhornhookabove"sv, 0x1EEC },
+    { "Uhorntilde"sv, 0x1EEE },
+    { "Uhungarumlaut"sv, 0x0170 },
+    { "Uhungarumlautcyrillic"sv, 0x04F2 },
+    { "Uinvertedbreve"sv, 0x0216 },
+    { "Ukcyrillic"sv, 0x0478 },
+    { "Umacron"sv, 0x016A },
+    { "Umacroncyrillic"sv, 0x04EE },
+    { "Umacrondieresis"sv, 0x1E7A },
+    { "Umonospace"sv, 0xFF35 },
+    { "Uogonek"sv, 0x0172 },
+    { "Upsilon"sv, 0x03A5 },
+    { "Upsilon1"sv, 0x03D2 },
+    { "Upsilonacutehooksymbolgreek"sv, 0x03D3 },
+    { "Upsilonafrican"sv, 0x01B1 },
+    { "Upsilondieresis"sv, 0x03AB },
+    { "Upsilondieresishooksymbolgreek"sv, 0x03D4 },
+    { "Upsilonhooksymbol"sv, 0x03D2 },
+    { "Upsilontonos"sv, 0x038E },
+    { "Uring"sv, 0x016E },
+    { "Ushortcyrillic"sv, 0x040E },
+    { "Usmall"sv, 0xF775 },
+    { "Ustraightcyrillic"sv, 0x04AE },
+    { "Ustraightstrokecyrillic"sv, 0x04B0 },
+    { "Utilde"sv, 0x0168 },
+    { "Utildeacute"sv, 0x1E78 },
+    { "Utildebelow"sv, 0x1E74 },
+    { "V"sv, 0x0056 },
+    { "Vcircle"sv, 0x24CB },
+    { "Vdotbelow"sv, 0x1E7E },
+    { "Vecyrillic"sv, 0x0412 },
+    { "Vewarmenian"sv, 0x054E },
+    { "Vhook"sv, 0x01B2 },
+    { "Vmonospace"sv, 0xFF36 },
+    { "Voarmenian"sv, 0x0548 },
+    { "Vsmall"sv, 0xF776 },
+    { "Vtilde"sv, 0x1E7C },
+    { "W"sv, 0x0057 },
+    { "Wacute"sv, 0x1E82 },
+    { "Wcircle"sv, 0x24CC },
+    { "Wcircumflex"sv, 0x0174 },
+    { "Wdieresis"sv, 0x1E84 },
+    { "Wdotaccent"sv, 0x1E86 },
+    { "Wdotbelow"sv, 0x1E88 },
+    { "Wgrave"sv, 0x1E80 },
+    { "Wmonospace"sv, 0xFF37 },
+    { "Wsmall"sv, 0xF777 },
+    { "X"sv, 0x0058 },
+    { "Xcircle"sv, 0x24CD },
+    { "Xdieresis"sv, 0x1E8C },
+    { "Xdotaccent"sv, 0x1E8A },
+    { "Xeharmenian"sv, 0x053D },
+    { "Xi"sv, 0x039E },
+    { "Xmonospace"sv, 0xFF38 },
+    { "Xsmall"sv, 0xF778 },
+    { "Y"sv, 0x0059 },
+    { "Yacute"sv, 0x00DD },
+    { "Yacutesmall"sv, 0xF7FD },
+    { "Yatcyrillic"sv, 0x0462 },
+    { "Ycircle"sv, 0x24CE },
+    { "Ycircumflex"sv, 0x0176 },
+    { "Ydieresis"sv, 0x0178 },
+    { "Ydieresissmall"sv, 0xF7FF },
+    { "Ydotaccent"sv, 0x1E8E },
+    { "Ydotbelow"sv, 0x1EF4 },
+    { "Yericyrillic"sv, 0x042B },
+    { "Yerudieresiscyrillic"sv, 0x04F8 },
+    { "Ygrave"sv, 0x1EF2 },
+    { "Yhook"sv, 0x01B3 },
+    { "Yhookabove"sv, 0x1EF6 },
+    { "Yiarmenian"sv, 0x0545 },
+    { "Yicyrillic"sv, 0x0407 },
+    { "Yiwnarmenian"sv, 0x0552 },
+    { "Ymonospace"sv, 0xFF39 },
+    { "Ysmall"sv, 0xF779 },
+    { "Ytilde"sv, 0x1EF8 },
+    { "Yusbigcyrillic"sv, 0x046A },
+    { "Yusbigiotifiedcyrillic"sv, 0x046C },
+    { "Yuslittlecyrillic"sv, 0x0466 },
+    { "Yuslittleiotifiedcyrillic"sv, 0x0468 },
+    { "Z"sv, 0x005A },
+    { "Zaarmenian"sv, 0x0536 },
+    { "Zacute"sv, 0x0179 },
+    { "Zcaron"sv, 0x017D },
+    { "Zcaronsmall"sv, 0xF6FF },
+    { "Zcircle"sv, 0x24CF },
+    { "Zcircumflex"sv, 0x1E90 },
+    { "Zdot"sv, 0x017B },
+    { "Zdotaccent"sv, 0x017B },
+    { "Zdotbelow"sv, 0x1E92 },
+    { "Zecyrillic"sv, 0x0417 },
+    { "Zedescendercyrillic"sv, 0x0498 },
+    { "Zedieresiscyrillic"sv, 0x04DE },
+    { "Zeta"sv, 0x0396 },
+    { "Zhearmenian"sv, 0x053A },
+    { "Zhebrevecyrillic"sv, 0x04C1 },
+    { "Zhecyrillic"sv, 0x0416 },
+    { "Zhedescendercyrillic"sv, 0x0496 },
+    { "Zhedieresiscyrillic"sv, 0x04DC },
+    { "Zlinebelow"sv, 0x1E94 },
+    { "Zmonospace"sv, 0xFF3A },
+    { "Zsmall"sv, 0xF77A },
+    { "Zstroke"sv, 0x01B5 },
+    { "a"sv, 0x0061 },
+    { "aabengali"sv, 0x0986 },
+    { "aacute"sv, 0x00E1 },
+    { "aadeva"sv, 0x0906 },
+    { "aagujarati"sv, 0x0A86 },
+    { "aagurmukhi"sv, 0x0A06 },
+    { "aamatragurmukhi"sv, 0x0A3E },
+    { "aarusquare"sv, 0x3303 },
+    { "aavowelsignbengali"sv, 0x09BE },
+    { "aavowelsigndeva"sv, 0x093E },
+    { "aavowelsigngujarati"sv, 0x0ABE },
+    { "abbreviationmarkarmenian"sv, 0x055F },
+    { "abbreviationsigndeva"sv, 0x0970 },
+    { "abengali"sv, 0x0985 },
+    { "abopomofo"sv, 0x311A },
+    { "abreve"sv, 0x0103 },
+    { "abreveacute"sv, 0x1EAF },
+    { "abrevecyrillic"sv, 0x04D1 },
+    { "abrevedotbelow"sv, 0x1EB7 },
+    { "abrevegrave"sv, 0x1EB1 },
+    { "abrevehookabove"sv, 0x1EB3 },
+    { "abrevetilde"sv, 0x1EB5 },
+    { "acaron"sv, 0x01CE },
+    { "acircle"sv, 0x24D0 },
+    { "acircumflex"sv, 0x00E2 },
+    { "acircumflexacute"sv, 0x1EA5 },
+    { "acircumflexdotbelow"sv, 0x1EAD },
+    { "acircumflexgrave"sv, 0x1EA7 },
+    { "acircumflexhookabove"sv, 0x1EA9 },
+    { "acircumflextilde"sv, 0x1EAB },
+    { "acute"sv, 0x00B4 },
+    { "acutebelowcmb"sv, 0x0317 },
+    { "acutecmb"sv, 0x0301 },
+    { "acutecomb"sv, 0x0301 },
+    { "acutedeva"sv, 0x0954 },
+    { "acutelowmod"sv, 0x02CF },
+    { "acutetonecmb"sv, 0x0341 },
+    { "acyrillic"sv, 0x0430 },
+    { "adblgrave"sv, 0x0201 },
+    { "addakgurmukhi"sv, 0x0A71 },
+    { "adeva"sv, 0x0905 },
+    { "adieresis"sv, 0x00E4 },
+    { "adieresiscyrillic"sv, 0x04D3 },
+    { "adieresismacron"sv, 0x01DF },
+    { "adotbelow"sv, 0x1EA1 },
+    { "adotmacron"sv, 0x01E1 },
+    { "ae"sv, 0x00E6 },
+    { "aeacute"sv, 0x01FD },
+    { "aekorean"sv, 0x3150 },
+    { "aemacron"sv, 0x01E3 },
+    { "afii00208"sv, 0x2015 },
+    { "afii08941"sv, 0x20A4 },
+    { "afii10017"sv, 0x0410 },
+    { "afii10018"sv, 0x0411 },
+    { "afii10019"sv, 0x0412 },
+    { "afii10020"sv, 0x0413 },
+    { "afii10021"sv, 0x0414 },
+    { "afii10022"sv, 0x0415 },
+    { "afii10023"sv, 0x0401 },
+    { "afii10024"sv, 0x0416 },
+    { "afii10025"sv, 0x0417 },
+    { "afii10026"sv, 0x0418 },
+    { "afii10027"sv, 0x0419 },
+    { "afii10028"sv, 0x041A },
+    { "afii10029"sv, 0x041B },
+    { "afii10030"sv, 0x041C },
+    { "afii10031"sv, 0x041D },
+    { "afii10032"sv, 0x041E },
+    { "afii10033"sv, 0x041F },
+    { "afii10034"sv, 0x0420 },
+    { "afii10035"sv, 0x0421 },
+    { "afii10036"sv, 0x0422 },
+    { "afii10037"sv, 0x0423 },
+    { "afii10038"sv, 0x0424 },
+    { "afii10039"sv, 0x0425 },
+    { "afii10040"sv, 0x0426 },
+    { "afii10041"sv, 0x0427 },
+    { "afii10042"sv, 0x0428 },
+    { "afii10043"sv, 0x0429 },
+    { "afii10044"sv, 0x042A },
+    { "afii10045"sv, 0x042B },
+    { "afii10046"sv, 0x042C },
+    { "afii10047"sv, 0x042D },
+    { "afii10048"sv, 0x042E },
+    { "afii10049"sv, 0x042F },
+    { "afii10050"sv, 0x0490 },
+    { "afii10051"sv, 0x0402 },
+    { "afii10052"sv, 0x0403 },
+    { "afii10053"sv, 0x0404 },
+    { "afii10054"sv, 0x0405 },
+    { "afii10055"sv, 0x0406 },
+    { "afii10056"sv, 0x0407 },
+    { "afii10057"sv, 0x0408 },
+    { "afii10058"sv, 0x0409 },
+    { "afii10059"sv, 0x040A },
+    { "afii10060"sv, 0x040B },
+    { "afii10061"sv, 0x040C },
+    { "afii10062"sv, 0x040E },
+    { "afii10063"sv, 0xF6C4 },
+    { "afii10064"sv, 0xF6C5 },
+    { "afii10065"sv, 0x0430 },
+    { "afii10066"sv, 0x0431 },
+    { "afii10067"sv, 0x0432 },
+    { "afii10068"sv, 0x0433 },
+    { "afii10069"sv, 0x0434 },
+    { "afii10070"sv, 0x0435 },
+    { "afii10071"sv, 0x0451 },
+    { "afii10072"sv, 0x0436 },
+    { "afii10073"sv, 0x0437 },
+    { "afii10074"sv, 0x0438 },
+    { "afii10075"sv, 0x0439 },
+    { "afii10076"sv, 0x043A },
+    { "afii10077"sv, 0x043B },
+    { "afii10078"sv, 0x043C },
+    { "afii10079"sv, 0x043D },
+    { "afii10080"sv, 0x043E },
+    { "afii10081"sv, 0x043F },
+    { "afii10082"sv, 0x0440 },
+    { "afii10083"sv, 0x0441 },
+    { "afii10084"sv, 0x0442 },
+    { "afii10085"sv, 0x0443 },
+    { "afii10086"sv, 0x0444 },
+    { "afii10087"sv, 0x0445 },
+    { "afii10088"sv, 0x0446 },
+    { "afii10089"sv, 0x0447 },
+    { "afii10090"sv, 0x0448 },
+    { "afii10091"sv, 0x0449 },
+    { "afii10092"sv, 0x044A },
+    { "afii10093"sv, 0x044B },
+    { "afii10094"sv, 0x044C },
+    { "afii10095"sv, 0x044D },
+    { "afii10096"sv, 0x044E },
+    { "afii10097"sv, 0x044F },
+    { "afii10098"sv, 0x0491 },
+    { "afii10099"sv, 0x0452 },
+    { "afii10100"sv, 0x0453 },
+    { "afii10101"sv, 0x0454 },
+    { "afii10102"sv, 0x0455 },
+    { "afii10103"sv, 0x0456 },
+    { "afii10104"sv, 0x0457 },
+    { "afii10105"sv, 0x0458 },
+    { "afii10106"sv, 0x0459 },
+    { "afii10107"sv, 0x045A },
+    { "afii10108"sv, 0x045B },
+    { "afii10109"sv, 0x045C },
+    { "afii10110"sv, 0x045E },
+    { "afii10145"sv, 0x040F },
+    { "afii10146"sv, 0x0462 },
+    { "afii10147"sv, 0x0472 },
+    { "afii10148"sv, 0x0474 },
+    { "afii10192"sv, 0xF6C6 },
+    { "afii10193"sv, 0x045F },
+    { "afii10194"sv, 0x0463 },
+    { "afii10195"sv, 0x0473 },
+    { "afii10196"sv, 0x0475 },
+    { "afii10831"sv, 0xF6C7 },
+    { "afii10832"sv, 0xF6C8 },
+    { "afii10846"sv, 0x04D9 },
+    { "afii299"sv, 0x200E },
+    { "afii300"sv, 0x200F },
+    { "afii301"sv, 0x200D },
+    { "afii57381"sv, 0x066A },
+    { "afii57388"sv, 0x060C },
+    { "afii57392"sv, 0x0660 },
+    { "afii57393"sv, 0x0661 },
+    { "afii57394"sv, 0x0662 },
+    { "afii57395"sv, 0x0663 },
+    { "afii57396"sv, 0x0664 },
+    { "afii57397"sv, 0x0665 },
+    { "afii57398"sv, 0x0666 },
+    { "afii57399"sv, 0x0667 },
+    { "afii57400"sv, 0x0668 },
+    { "afii57401"sv, 0x0669 },
+    { "afii57403"sv, 0x061B },
+    { "afii57407"sv, 0x061F },
+    { "afii57409"sv, 0x0621 },
+    { "afii57410"sv, 0x0622 },
+    { "afii57411"sv, 0x0623 },
+    { "afii57412"sv, 0x0624 },
+    { "afii57413"sv, 0x0625 },
+    { "afii57414"sv, 0x0626 },
+    { "afii57415"sv, 0x0627 },
+    { "afii57416"sv, 0x0628 },
+    { "afii57417"sv, 0x0629 },
+    { "afii57418"sv, 0x062A },
+    { "afii57419"sv, 0x062B },
+    { "afii57420"sv, 0x062C },
+    { "afii57421"sv, 0x062D },
+    { "afii57422"sv, 0x062E },
+    { "afii57423"sv, 0x062F },
+    { "afii57424"sv, 0x0630 },
+    { "afii57425"sv, 0x0631 },
+    { "afii57426"sv, 0x0632 },
+    { "afii57427"sv, 0x0633 },
+    { "afii57428"sv, 0x0634 },
+    { "afii57429"sv, 0x0635 },
+    { "afii57430"sv, 0x0636 },
+    { "afii57431"sv, 0x0637 },
+    { "afii57432"sv, 0x0638 },
+    { "afii57433"sv, 0x0639 },
+    { "afii57434"sv, 0x063A },
+    { "afii57440"sv, 0x0640 },
+    { "afii57441"sv, 0x0641 },
+    { "afii57442"sv, 0x0642 },
+    { "afii57443"sv, 0x0643 },
+    { "afii57444"sv, 0x0644 },
+    { "afii57445"sv, 0x0645 },
+    { "afii57446"sv, 0x0646 },
+    { "afii57448"sv, 0x0648 },
+    { "afii57449"sv, 0x0649 },
+    { "afii57450"sv, 0x064A },
+    { "afii57451"sv, 0x064B },
+    { "afii57452"sv, 0x064C },
+    { "afii57453"sv, 0x064D },
+    { "afii57454"sv, 0x064E },
+    { "afii57455"sv, 0x064F },
+    { "afii57456"sv, 0x0650 },
+    { "afii57457"sv, 0x0651 },
+    { "afii57458"sv, 0x0652 },
+    { "afii57470"sv, 0x0647 },
+    { "afii57505"sv, 0x06A4 },
+    { "afii57506"sv, 0x067E },
+    { "afii57507"sv, 0x0686 },
+    { "afii57508"sv, 0x0698 },
+    { "afii57509"sv, 0x06AF },
+    { "afii57511"sv, 0x0679 },
+    { "afii57512"sv, 0x0688 },
+    { "afii57513"sv, 0x0691 },
+    { "afii57514"sv, 0x06BA },
+    { "afii57519"sv, 0x06D2 },
+    { "afii57534"sv, 0x06D5 },
+    { "afii57636"sv, 0x20AA },
+    { "afii57645"sv, 0x05BE },
+    { "afii57658"sv, 0x05C3 },
+    { "afii57664"sv, 0x05D0 },
+    { "afii57665"sv, 0x05D1 },
+    { "afii57666"sv, 0x05D2 },
+    { "afii57667"sv, 0x05D3 },
+    { "afii57668"sv, 0x05D4 },
+    { "afii57669"sv, 0x05D5 },
+    { "afii57670"sv, 0x05D6 },
+    { "afii57671"sv, 0x05D7 },
+    { "afii57672"sv, 0x05D8 },
+    { "afii57673"sv, 0x05D9 },
+    { "afii57674"sv, 0x05DA },
+    { "afii57675"sv, 0x05DB },
+    { "afii57676"sv, 0x05DC },
+    { "afii57677"sv, 0x05DD },
+    { "afii57678"sv, 0x05DE },
+    { "afii57679"sv, 0x05DF },
+    { "afii57680"sv, 0x05E0 },
+    { "afii57681"sv, 0x05E1 },
+    { "afii57682"sv, 0x05E2 },
+    { "afii57683"sv, 0x05E3 },
+    { "afii57684"sv, 0x05E4 },
+    { "afii57685"sv, 0x05E5 },
+    { "afii57686"sv, 0x05E6 },
+    { "afii57687"sv, 0x05E7 },
+    { "afii57688"sv, 0x05E8 },
+    { "afii57689"sv, 0x05E9 },
+    { "afii57690"sv, 0x05EA },
+    { "afii57694"sv, 0xFB2A },
+    { "afii57695"sv, 0xFB2B },
+    { "afii57700"sv, 0xFB4B },
+    { "afii57705"sv, 0xFB1F },
+    { "afii57716"sv, 0x05F0 },
+    { "afii57717"sv, 0x05F1 },
+    { "afii57718"sv, 0x05F2 },
+    { "afii57723"sv, 0xFB35 },
+    { "afii57793"sv, 0x05B4 },
+    { "afii57794"sv, 0x05B5 },
+    { "afii57795"sv, 0x05B6 },
+    { "afii57796"sv, 0x05BB },
+    { "afii57797"sv, 0x05B8 },
+    { "afii57798"sv, 0x05B7 },
+    { "afii57799"sv, 0x05B0 },
+    { "afii57800"sv, 0x05B2 },
+    { "afii57801"sv, 0x05B1 },
+    { "afii57802"sv, 0x05B3 },
+    { "afii57803"sv, 0x05C2 },
+    { "afii57804"sv, 0x05C1 },
+    { "afii57806"sv, 0x05B9 },
+    { "afii57807"sv, 0x05BC },
+    { "afii57839"sv, 0x05BD },
+    { "afii57841"sv, 0x05BF },
+    { "afii57842"sv, 0x05C0 },
+    { "afii57929"sv, 0x02BC },
+    { "afii61248"sv, 0x2105 },
+    { "afii61289"sv, 0x2113 },
+    { "afii61352"sv, 0x2116 },
+    { "afii61573"sv, 0x202C },
+    { "afii61574"sv, 0x202D },
+    { "afii61575"sv, 0x202E },
+    { "afii61664"sv, 0x200C },
+    { "afii63167"sv, 0x066D },
+    { "afii64937"sv, 0x02BD },
+    { "agrave"sv, 0x00E0 },
+    { "agujarati"sv, 0x0A85 },
+    { "agurmukhi"sv, 0x0A05 },
+    { "ahiragana"sv, 0x3042 },
+    { "ahookabove"sv, 0x1EA3 },
+    { "aibengali"sv, 0x0990 },
+    { "aibopomofo"sv, 0x311E },
+    { "aideva"sv, 0x0910 },
+    { "aiecyrillic"sv, 0x04D5 },
+    { "aigujarati"sv, 0x0A90 },
+    { "aigurmukhi"sv, 0x0A10 },
+    { "aimatragurmukhi"sv, 0x0A48 },
+    { "ainarabic"sv, 0x0639 },
+    { "ainfinalarabic"sv, 0xFECA },
+    { "aininitialarabic"sv, 0xFECB },
+    { "ainmedialarabic"sv, 0xFECC },
+    { "ainvertedbreve"sv, 0x0203 },
+    { "aivowelsignbengali"sv, 0x09C8 },
+    { "aivowelsigndeva"sv, 0x0948 },
+    { "aivowelsigngujarati"sv, 0x0AC8 },
+    { "akatakana"sv, 0x30A2 },
+    { "akatakanahalfwidth"sv, 0xFF71 },
+    { "akorean"sv, 0x314F },
+    { "alef"sv, 0x05D0 },
+    { "alefarabic"sv, 0x0627 },
+    { "alefdageshhebrew"sv, 0xFB30 },
+    { "aleffinalarabic"sv, 0xFE8E },
+    { "alefhamzaabovearabic"sv, 0x0623 },
+    { "alefhamzaabovefinalarabic"sv, 0xFE84 },
+    { "alefhamzabelowarabic"sv, 0x0625 },
+    { "alefhamzabelowfinalarabic"sv, 0xFE88 },
+    { "alefhebrew"sv, 0x05D0 },
+    { "aleflamedhebrew"sv, 0xFB4F },
+    { "alefmaddaabovearabic"sv, 0x0622 },
+    { "alefmaddaabovefinalarabic"sv, 0xFE82 },
+    { "alefmaksuraarabic"sv, 0x0649 },
+    { "alefmaksurafinalarabic"sv, 0xFEF0 },
+    { "alefmaksurainitialarabic"sv, 0xFEF3 },
+    { "alefmaksuramedialarabic"sv, 0xFEF4 },
+    { "alefpatahhebrew"sv, 0xFB2E },
+    { "alefqamatshebrew"sv, 0xFB2F },
+    { "aleph"sv, 0x2135 },
+    { "allequal"sv, 0x224C },
+    { "alpha"sv, 0x03B1 },
+    { "alphatonos"sv, 0x03AC },
+    { "amacron"sv, 0x0101 },
+    { "amonospace"sv, 0xFF41 },
+    { "ampersand"sv, 0x0026 },
+    { "ampersandmonospace"sv, 0xFF06 },
+    { "ampersandsmall"sv, 0xF726 },
+    { "amsquare"sv, 0x33C2 },
+    { "anbopomofo"sv, 0x3122 },
+    { "angbopomofo"sv, 0x3124 },
+    { "angkhankhuthai"sv, 0x0E5A },
+    { "angle"sv, 0x2220 },
+    { "anglebracketleft"sv, 0x3008 },
+    { "anglebracketleftvertical"sv, 0xFE3F },
+    { "anglebracketright"sv, 0x3009 },
+    { "anglebracketrightvertical"sv, 0xFE40 },
+    { "angleleft"sv, 0x2329 },
+    { "angleright"sv, 0x232A },
+    { "angstrom"sv, 0x212B },
+    { "anoteleia"sv, 0x0387 },
+    { "anudattadeva"sv, 0x0952 },
+    { "anusvarabengali"sv, 0x0982 },
+    { "anusvaradeva"sv, 0x0902 },
+    { "anusvaragujarati"sv, 0x0A82 },
+    { "aogonek"sv, 0x0105 },
+    { "apaatosquare"sv, 0x3300 },
+    { "aparen"sv, 0x249C },
+    { "apostrophearmenian"sv, 0x055A },
+    { "apostrophemod"sv, 0x02BC },
+    { "apple"sv, 0xF8FF },
+    { "approaches"sv, 0x2250 },
+    { "approxequal"sv, 0x2248 },
+    { "approxequalorimage"sv, 0x2252 },
+    { "approximatelyequal"sv, 0x2245 },
+    { "araeaekorean"sv, 0x318E },
+    { "araeakorean"sv, 0x318D },
+    { "arc"sv, 0x2312 },
+    { "arighthalfring"sv, 0x1E9A },
+    { "aring"sv, 0x00E5 },
+    { "aringacute"sv, 0x01FB },
+    { "aringbelow"sv, 0x1E01 },
+    { "arrowboth"sv, 0x2194 },
+    { "arrowdashdown"sv, 0x21E3 },
+    { "arrowdashleft"sv, 0x21E0 },
+    { "arrowdashright"sv, 0x21E2 },
+    { "arrowdashup"sv, 0x21E1 },
+    { "arrowdblboth"sv, 0x21D4 },
+    { "arrowdbldown"sv, 0x21D3 },
+    { "arrowdblleft"sv, 0x21D0 },
+    { "arrowdblright"sv, 0x21D2 },
+    { "arrowdblup"sv, 0x21D1 },
+    { "arrowdown"sv, 0x2193 },
+    { "arrowdownleft"sv, 0x2199 },
+    { "arrowdownright"sv, 0x2198 },
+    { "arrowdownwhite"sv, 0x21E9 },
+    { "arrowheaddownmod"sv, 0x02C5 },
+    { "arrowheadleftmod"sv, 0x02C2 },
+    { "arrowheadrightmod"sv, 0x02C3 },
+    { "arrowheadupmod"sv, 0x02C4 },
+    { "arrowhorizex"sv, 0xF8E7 },
+    { "arrowleft"sv, 0x2190 },
+    { "arrowleftdbl"sv, 0x21D0 },
+    { "arrowleftdblstroke"sv, 0x21CD },
+    { "arrowleftoverright"sv, 0x21C6 },
+    { "arrowleftwhite"sv, 0x21E6 },
+    { "arrowright"sv, 0x2192 },
+    { "arrowrightdblstroke"sv, 0x21CF },
+    { "arrowrightheavy"sv, 0x279E },
+    { "arrowrightoverleft"sv, 0x21C4 },
+    { "arrowrightwhite"sv, 0x21E8 },
+    { "arrowtableft"sv, 0x21E4 },
+    { "arrowtabright"sv, 0x21E5 },
+    { "arrowup"sv, 0x2191 },
+    { "arrowupdn"sv, 0x2195 },
+    { "arrowupdnbse"sv, 0x21A8 },
+    { "arrowupdownbase"sv, 0x21A8 },
+    { "arrowupleft"sv, 0x2196 },
+    { "arrowupleftofdown"sv, 0x21C5 },
+    { "arrowupright"sv, 0x2197 },
+    { "arrowupwhite"sv, 0x21E7 },
+    { "arrowvertex"sv, 0xF8E6 },
+    { "asciicircum"sv, 0x005E },
+    { "asciicircummonospace"sv, 0xFF3E },
+    { "asciitilde"sv, 0x007E },
+    { "asciitildemonospace"sv, 0xFF5E },
+    { "ascript"sv, 0x0251 },
+    { "ascriptturned"sv, 0x0252 },
+    { "asmallhiragana"sv, 0x3041 },
+    { "asmallkatakana"sv, 0x30A1 },
+    { "asmallkatakanahalfwidth"sv, 0xFF67 },
+    { "asterisk"sv, 0x002A },
+    { "asteriskaltonearabic"sv, 0x066D },
+    { "asteriskarabic"sv, 0x066D },
+    { "asteriskmath"sv, 0x2217 },
+    { "asteriskmonospace"sv, 0xFF0A },
+    { "asterisksmall"sv, 0xFE61 },
+    { "asterism"sv, 0x2042 },
+    { "asuperior"sv, 0xF6E9 },
+    { "asymptoticallyequal"sv, 0x2243 },
+    { "at"sv, 0x0040 },
+    { "atilde"sv, 0x00E3 },
+    { "atmonospace"sv, 0xFF20 },
+    { "atsmall"sv, 0xFE6B },
+    { "aturned"sv, 0x0250 },
+    { "aubengali"sv, 0x0994 },
+    { "aubopomofo"sv, 0x3120 },
+    { "audeva"sv, 0x0914 },
+    { "augujarati"sv, 0x0A94 },
+    { "augurmukhi"sv, 0x0A14 },
+    { "aulengthmarkbengali"sv, 0x09D7 },
+    { "aumatragurmukhi"sv, 0x0A4C },
+    { "auvowelsignbengali"sv, 0x09CC },
+    { "auvowelsigndeva"sv, 0x094C },
+    { "auvowelsigngujarati"sv, 0x0ACC },
+    { "avagrahadeva"sv, 0x093D },
+    { "aybarmenian"sv, 0x0561 },
+    { "ayin"sv, 0x05E2 },
+    { "ayinaltonehebrew"sv, 0xFB20 },
+    { "ayinhebrew"sv, 0x05E2 },
+    { "b"sv, 0x0062 },
+    { "babengali"sv, 0x09AC },
+    { "backslash"sv, 0x005C },
+    { "backslashmonospace"sv, 0xFF3C },
+    { "badeva"sv, 0x092C },
+    { "bagujarati"sv, 0x0AAC },
+    { "bagurmukhi"sv, 0x0A2C },
+    { "bahiragana"sv, 0x3070 },
+    { "bahtthai"sv, 0x0E3F },
+    { "bakatakana"sv, 0x30D0 },
+    { "bar"sv, 0x007C },
+    { "barmonospace"sv, 0xFF5C },
+    { "bbopomofo"sv, 0x3105 },
+    { "bcircle"sv, 0x24D1 },
+    { "bdotaccent"sv, 0x1E03 },
+    { "bdotbelow"sv, 0x1E05 },
+    { "beamedsixteenthnotes"sv, 0x266C },
+    { "because"sv, 0x2235 },
+    { "becyrillic"sv, 0x0431 },
+    { "beharabic"sv, 0x0628 },
+    { "behfinalarabic"sv, 0xFE90 },
+    { "behinitialarabic"sv, 0xFE91 },
+    { "behiragana"sv, 0x3079 },
+    { "behmedialarabic"sv, 0xFE92 },
+    { "behmeeminitialarabic"sv, 0xFC9F },
+    { "behmeemisolatedarabic"sv, 0xFC08 },
+    { "behnoonfinalarabic"sv, 0xFC6D },
+    { "bekatakana"sv, 0x30D9 },
+    { "benarmenian"sv, 0x0562 },
+    { "bet"sv, 0x05D1 },
+    { "beta"sv, 0x03B2 },
+    { "betasymbolgreek"sv, 0x03D0 },
+    { "betdagesh"sv, 0xFB31 },
+    { "betdageshhebrew"sv, 0xFB31 },
+    { "bethebrew"sv, 0x05D1 },
+    { "betrafehebrew"sv, 0xFB4C },
+    { "bhabengali"sv, 0x09AD },
+    { "bhadeva"sv, 0x092D },
+    { "bhagujarati"sv, 0x0AAD },
+    { "bhagurmukhi"sv, 0x0A2D },
+    { "bhook"sv, 0x0253 },
+    { "bihiragana"sv, 0x3073 },
+    { "bikatakana"sv, 0x30D3 },
+    { "bilabialclick"sv, 0x0298 },
+    { "bindigurmukhi"sv, 0x0A02 },
+    { "birusquare"sv, 0x3331 },
+    { "blackcircle"sv, 0x25CF },
+    { "blackdiamond"sv, 0x25C6 },
+    { "blackdownpointingtriangle"sv, 0x25BC },
+    { "blackleftpointingpointer"sv, 0x25C4 },
+    { "blackleftpointingtriangle"sv, 0x25C0 },
+    { "blacklenticularbracketleft"sv, 0x3010 },
+    { "blacklenticularbracketleftvertical"sv, 0xFE3B },
+    { "blacklenticularbracketright"sv, 0x3011 },
+    { "blacklenticularbracketrightvertical"sv, 0xFE3C },
+    { "blacklowerlefttriangle"sv, 0x25E3 },
+    { "blacklowerrighttriangle"sv, 0x25E2 },
+    { "blackrectangle"sv, 0x25AC },
+    { "blackrightpointingpointer"sv, 0x25BA },
+    { "blackrightpointingtriangle"sv, 0x25B6 },
+    { "blacksmallsquare"sv, 0x25AA },
+    { "blacksmilingface"sv, 0x263B },
+    { "blacksquare"sv, 0x25A0 },
+    { "blackstar"sv, 0x2605 },
+    { "blackupperlefttriangle"sv, 0x25E4 },
+    { "blackupperrighttriangle"sv, 0x25E5 },
+    { "blackuppointingsmalltriangle"sv, 0x25B4 },
+    { "blackuppointingtriangle"sv, 0x25B2 },
+    { "blank"sv, 0x2423 },
+    { "blinebelow"sv, 0x1E07 },
+    { "block"sv, 0x2588 },
+    { "bmonospace"sv, 0xFF42 },
+    { "bobaimaithai"sv, 0x0E1A },
+    { "bohiragana"sv, 0x307C },
+    { "bokatakana"sv, 0x30DC },
+    { "bparen"sv, 0x249D },
+    { "bqsquare"sv, 0x33C3 },
+    { "braceex"sv, 0xF8F4 },
+    { "braceleft"sv, 0x007B },
+    { "braceleftbt"sv, 0xF8F3 },
+    { "braceleftmid"sv, 0xF8F2 },
+    { "braceleftmonospace"sv, 0xFF5B },
+    { "braceleftsmall"sv, 0xFE5B },
+    { "bracelefttp"sv, 0xF8F1 },
+    { "braceleftvertical"sv, 0xFE37 },
+    { "braceright"sv, 0x007D },
+    { "bracerightbt"sv, 0xF8FE },
+    { "bracerightmid"sv, 0xF8FD },
+    { "bracerightmonospace"sv, 0xFF5D },
+    { "bracerightsmall"sv, 0xFE5C },
+    { "bracerighttp"sv, 0xF8FC },
+    { "bracerightvertical"sv, 0xFE38 },
+    { "bracketleft"sv, 0x005B },
+    { "bracketleftbt"sv, 0xF8F0 },
+    { "bracketleftex"sv, 0xF8EF },
+    { "bracketleftmonospace"sv, 0xFF3B },
+    { "bracketlefttp"sv, 0xF8EE },
+    { "bracketright"sv, 0x005D },
+    { "bracketrightbt"sv, 0xF8FB },
+    { "bracketrightex"sv, 0xF8FA },
+    { "bracketrightmonospace"sv, 0xFF3D },
+    { "bracketrighttp"sv, 0xF8F9 },
+    { "breve"sv, 0x02D8 },
+    { "brevebelowcmb"sv, 0x032E },
+    { "brevecmb"sv, 0x0306 },
+    { "breveinvertedbelowcmb"sv, 0x032F },
+    { "breveinvertedcmb"sv, 0x0311 },
+    { "breveinverteddoublecmb"sv, 0x0361 },
+    { "bridgebelowcmb"sv, 0x032A },
+    { "bridgeinvertedbelowcmb"sv, 0x033A },
+    { "brokenbar"sv, 0x00A6 },
+    { "bstroke"sv, 0x0180 },
+    { "bsuperior"sv, 0xF6EA },
+    { "btopbar"sv, 0x0183 },
+    { "buhiragana"sv, 0x3076 },
+    { "bukatakana"sv, 0x30D6 },
+    { "bullet"sv, 0x2022 },
+    { "bulletinverse"sv, 0x25D8 },
+    { "bulletoperator"sv, 0x2219 },
+    { "bullseye"sv, 0x25CE },
+    { "c"sv, 0x0063 },
+    { "caarmenian"sv, 0x056E },
+    { "cabengali"sv, 0x099A },
+    { "cacute"sv, 0x0107 },
+    { "cadeva"sv, 0x091A },
+    { "cagujarati"sv, 0x0A9A },
+    { "cagurmukhi"sv, 0x0A1A },
+    { "calsquare"sv, 0x3388 },
+    { "candrabindubengali"sv, 0x0981 },
+    { "candrabinducmb"sv, 0x0310 },
+    { "candrabindudeva"sv, 0x0901 },
+    { "candrabindugujarati"sv, 0x0A81 },
+    { "capslock"sv, 0x21EA },
+    { "careof"sv, 0x2105 },
+    { "caron"sv, 0x02C7 },
+    { "caronbelowcmb"sv, 0x032C },
+    { "caroncmb"sv, 0x030C },
+    { "carriagereturn"sv, 0x21B5 },
+    { "cbopomofo"sv, 0x3118 },
+    { "ccaron"sv, 0x010D },
+    { "ccedilla"sv, 0x00E7 },
+    { "ccedillaacute"sv, 0x1E09 },
+    { "ccircle"sv, 0x24D2 },
+    { "ccircumflex"sv, 0x0109 },
+    { "ccurl"sv, 0x0255 },
+    { "cdot"sv, 0x010B },
+    { "cdotaccent"sv, 0x010B },
+    { "cdsquare"sv, 0x33C5 },
+    { "cedilla"sv, 0x00B8 },
+    { "cedillacmb"sv, 0x0327 },
+    { "cent"sv, 0x00A2 },
+    { "centigrade"sv, 0x2103 },
+    { "centinferior"sv, 0xF6DF },
+    { "centmonospace"sv, 0xFFE0 },
+    { "centoldstyle"sv, 0xF7A2 },
+    { "centsuperior"sv, 0xF6E0 },
+    { "chaarmenian"sv, 0x0579 },
+    { "chabengali"sv, 0x099B },
+    { "chadeva"sv, 0x091B },
+    { "chagujarati"sv, 0x0A9B },
+    { "chagurmukhi"sv, 0x0A1B },
+    { "chbopomofo"sv, 0x3114 },
+    { "cheabkhasiancyrillic"sv, 0x04BD },
+    { "checkmark"sv, 0x2713 },
+    { "checyrillic"sv, 0x0447 },
+    { "chedescenderabkhasiancyrillic"sv, 0x04BF },
+    { "chedescendercyrillic"sv, 0x04B7 },
+    { "chedieresiscyrillic"sv, 0x04F5 },
+    { "cheharmenian"sv, 0x0573 },
+    { "chekhakassiancyrillic"sv, 0x04CC },
+    { "cheverticalstrokecyrillic"sv, 0x04B9 },
+    { "chi"sv, 0x03C7 },
+    { "chieuchacirclekorean"sv, 0x3277 },
+    { "chieuchaparenkorean"sv, 0x3217 },
+    { "chieuchcirclekorean"sv, 0x3269 },
+    { "chieuchkorean"sv, 0x314A },
+    { "chieuchparenkorean"sv, 0x3209 },
+    { "chochangthai"sv, 0x0E0A },
+    { "chochanthai"sv, 0x0E08 },
+    { "chochingthai"sv, 0x0E09 },
+    { "chochoethai"sv, 0x0E0C },
+    { "chook"sv, 0x0188 },
+    { "cieucacirclekorean"sv, 0x3276 },
+    { "cieucaparenkorean"sv, 0x3216 },
+    { "cieuccirclekorean"sv, 0x3268 },
+    { "cieuckorean"sv, 0x3148 },
+    { "cieucparenkorean"sv, 0x3208 },
+    { "cieucuparenkorean"sv, 0x321C },
+    { "circle"sv, 0x25CB },
+    { "circlemultiply"sv, 0x2297 },
+    { "circleot"sv, 0x2299 },
+    { "circleplus"sv, 0x2295 },
+    { "circlepostalmark"sv, 0x3036 },
+    { "circlewithlefthalfblack"sv, 0x25D0 },
+    { "circlewithrighthalfblack"sv, 0x25D1 },
+    { "circumflex"sv, 0x02C6 },
+    { "circumflexbelowcmb"sv, 0x032D },
+    { "circumflexcmb"sv, 0x0302 },
+    { "clear"sv, 0x2327 },
+    { "clickalveolar"sv, 0x01C2 },
+    { "clickdental"sv, 0x01C0 },
+    { "clicklateral"sv, 0x01C1 },
+    { "clickretroflex"sv, 0x01C3 },
+    { "club"sv, 0x2663 },
+    { "clubsuitblack"sv, 0x2663 },
+    { "clubsuitwhite"sv, 0x2667 },
+    { "cmcubedsquare"sv, 0x33A4 },
+    { "cmonospace"sv, 0xFF43 },
+    { "cmsquaredsquare"sv, 0x33A0 },
+    { "coarmenian"sv, 0x0581 },
+    { "colon"sv, 0x003A },
+    { "colonmonetary"sv, 0x20A1 },
+    { "colonmonospace"sv, 0xFF1A },
+    { "colonsign"sv, 0x20A1 },
+    { "colonsmall"sv, 0xFE55 },
+    { "colontriangularhalfmod"sv, 0x02D1 },
+    { "colontriangularmod"sv, 0x02D0 },
+    { "comma"sv, 0x002C },
+    { "commaabovecmb"sv, 0x0313 },
+    { "commaaboverightcmb"sv, 0x0315 },
+    { "commaaccent"sv, 0xF6C3 },
+    { "commaarabic"sv, 0x060C },
+    { "commaarmenian"sv, 0x055D },
+    { "commainferior"sv, 0xF6E1 },
+    { "commamonospace"sv, 0xFF0C },
+    { "commareversedabovecmb"sv, 0x0314 },
+    { "commareversedmod"sv, 0x02BD },
+    { "commasmall"sv, 0xFE50 },
+    { "commasuperior"sv, 0xF6E2 },
+    { "commaturnedabovecmb"sv, 0x0312 },
+    { "commaturnedmod"sv, 0x02BB },
+    { "compass"sv, 0x263C },
+    { "congruent"sv, 0x2245 },
+    { "contourintegral"sv, 0x222E },
+    { "control"sv, 0x2303 },
+    { "controlACK"sv, 0x0006 },
+    { "controlBEL"sv, 0x0007 },
+    { "controlBS"sv, 0x0008 },
+    { "controlCAN"sv, 0x0018 },
+    { "controlCR"sv, 0x000D },
+    { "controlDC1"sv, 0x0011 },
+    { "controlDC2"sv, 0x0012 },
+    { "controlDC3"sv, 0x0013 },
+    { "controlDC4"sv, 0x0014 },
+    { "controlDEL"sv, 0x007F },
+    { "controlDLE"sv, 0x0010 },
+    { "controlEM"sv, 0x0019 },
+    { "controlENQ"sv, 0x0005 },
+    { "controlEOT"sv, 0x0004 },
+    { "controlESC"sv, 0x001B },
+    { "controlETB"sv, 0x0017 },
+    { "controlETX"sv, 0x0003 },
+    { "controlFF"sv, 0x000C },
+    { "controlFS"sv, 0x001C },
+    { "controlGS"sv, 0x001D },
+    { "controlHT"sv, 0x0009 },
+    { "controlLF"sv, 0x000A },
+    { "controlNAK"sv, 0x0015 },
+    { "controlRS"sv, 0x001E },
+    { "controlSI"sv, 0x000F },
+    { "controlSO"sv, 0x000E },
+    { "controlSOT"sv, 0x0002 },
+    { "controlSTX"sv, 0x0001 },
+    { "controlSUB"sv, 0x001A },
+    { "controlSYN"sv, 0x0016 },
+    { "controlUS"sv, 0x001F },
+    { "controlVT"sv, 0x000B },
+    { "copyright"sv, 0x00A9 },
+    { "copyrightsans"sv, 0xF8E9 },
+    { "copyrightserif"sv, 0xF6D9 },
+    { "cornerbracketleft"sv, 0x300C },
+    { "cornerbracketlefthalfwidth"sv, 0xFF62 },
+    { "cornerbracketleftvertical"sv, 0xFE41 },
+    { "cornerbracketright"sv, 0x300D },
+    { "cornerbracketrighthalfwidth"sv, 0xFF63 },
+    { "cornerbracketrightvertical"sv, 0xFE42 },
+    { "corporationsquare"sv, 0x337F },
+    { "cosquare"sv, 0x33C7 },
+    { "coverkgsquare"sv, 0x33C6 },
+    { "cparen"sv, 0x249E },
+    { "cruzeiro"sv, 0x20A2 },
+    { "cstretched"sv, 0x0297 },
+    { "curlyand"sv, 0x22CF },
+    { "curlyor"sv, 0x22CE },
+    { "currency"sv, 0x00A4 },
+    { "cyrBreve"sv, 0xF6D1 },
+    { "cyrFlex"sv, 0xF6D2 },
+    { "cyrbreve"sv, 0xF6D4 },
+    { "cyrflex"sv, 0xF6D5 },
+    { "d"sv, 0x0064 },
+    { "daarmenian"sv, 0x0564 },
+    { "dabengali"sv, 0x09A6 },
+    { "dadarabic"sv, 0x0636 },
+    { "dadeva"sv, 0x0926 },
+    { "dadfinalarabic"sv, 0xFEBE },
+    { "dadinitialarabic"sv, 0xFEBF },
+    { "dadmedialarabic"sv, 0xFEC0 },
+    { "dagesh"sv, 0x05BC },
+    { "dageshhebrew"sv, 0x05BC },
+    { "dagger"sv, 0x2020 },
+    { "daggerdbl"sv, 0x2021 },
+    { "dagujarati"sv, 0x0AA6 },
+    { "dagurmukhi"sv, 0x0A26 },
+    { "dahiragana"sv, 0x3060 },
+    { "dakatakana"sv, 0x30C0 },
+    { "dalarabic"sv, 0x062F },
+    { "dalet"sv, 0x05D3 },
+    { "daletdagesh"sv, 0xFB33 },
+    { "daletdageshhebrew"sv, 0xFB33 },
+    { "dalethebrew"sv, 0x05D3 },
+    { "dalfinalarabic"sv, 0xFEAA },
+    { "dammaarabic"sv, 0x064F },
+    { "dammalowarabic"sv, 0x064F },
+    { "dammatanaltonearabic"sv, 0x064C },
+    { "dammatanarabic"sv, 0x064C },
+    { "danda"sv, 0x0964 },
+    { "dargahebrew"sv, 0x05A7 },
+    { "dargalefthebrew"sv, 0x05A7 },
+    { "dasiapneumatacyrilliccmb"sv, 0x0485 },
+    { "dblGrave"sv, 0xF6D3 },
+    { "dblanglebracketleft"sv, 0x300A },
+    { "dblanglebracketleftvertical"sv, 0xFE3D },
+    { "dblanglebracketright"sv, 0x300B },
+    { "dblanglebracketrightvertical"sv, 0xFE3E },
+    { "dblarchinvertedbelowcmb"sv, 0x032B },
+    { "dblarrowleft"sv, 0x21D4 },
+    { "dblarrowright"sv, 0x21D2 },
+    { "dbldanda"sv, 0x0965 },
+    { "dblgrave"sv, 0xF6D6 },
+    { "dblgravecmb"sv, 0x030F },
+    { "dblintegral"sv, 0x222C },
+    { "dbllowline"sv, 0x2017 },
+    { "dbllowlinecmb"sv, 0x0333 },
+    { "dbloverlinecmb"sv, 0x033F },
+    { "dblprimemod"sv, 0x02BA },
+    { "dblverticalbar"sv, 0x2016 },
+    { "dblverticallineabovecmb"sv, 0x030E },
+    { "dbopomofo"sv, 0x3109 },
+    { "dbsquare"sv, 0x33C8 },
+    { "dcaron"sv, 0x010F },
+    { "dcedilla"sv, 0x1E11 },
+    { "dcircle"sv, 0x24D3 },
+    { "dcircumflexbelow"sv, 0x1E13 },
+    { "dcroat"sv, 0x0111 },
+    { "ddabengali"sv, 0x09A1 },
+    { "ddadeva"sv, 0x0921 },
+    { "ddagujarati"sv, 0x0AA1 },
+    { "ddagurmukhi"sv, 0x0A21 },
+    { "ddalarabic"sv, 0x0688 },
+    { "ddalfinalarabic"sv, 0xFB89 },
+    { "dddhadeva"sv, 0x095C },
+    { "ddhabengali"sv, 0x09A2 },
+    { "ddhadeva"sv, 0x0922 },
+    { "ddhagujarati"sv, 0x0AA2 },
+    { "ddhagurmukhi"sv, 0x0A22 },
+    { "ddotaccent"sv, 0x1E0B },
+    { "ddotbelow"sv, 0x1E0D },
+    { "decimalseparatorarabic"sv, 0x066B },
+    { "decimalseparatorpersian"sv, 0x066B },
+    { "decyrillic"sv, 0x0434 },
+    { "degree"sv, 0x00B0 },
+    { "dehihebrew"sv, 0x05AD },
+    { "dehiragana"sv, 0x3067 },
+    { "deicoptic"sv, 0x03EF },
+    { "dekatakana"sv, 0x30C7 },
+    { "deleteleft"sv, 0x232B },
+    { "deleteright"sv, 0x2326 },
+    { "delta"sv, 0x03B4 },
+    { "deltaturned"sv, 0x018D },
+    { "denominatorminusonenumeratorbengali"sv, 0x09F8 },
+    { "dezh"sv, 0x02A4 },
+    { "dhabengali"sv, 0x09A7 },
+    { "dhadeva"sv, 0x0927 },
+    { "dhagujarati"sv, 0x0AA7 },
+    { "dhagurmukhi"sv, 0x0A27 },
+    { "dhook"sv, 0x0257 },
+    { "dialytikatonos"sv, 0x0385 },
+    { "dialytikatonoscmb"sv, 0x0344 },
+    { "diamond"sv, 0x2666 },
+    { "diamondsuitwhite"sv, 0x2662 },
+    { "dieresis"sv, 0x00A8 },
+    { "dieresisacute"sv, 0xF6D7 },
+    { "dieresisbelowcmb"sv, 0x0324 },
+    { "dieresiscmb"sv, 0x0308 },
+    { "dieresisgrave"sv, 0xF6D8 },
+    { "dieresistonos"sv, 0x0385 },
+    { "dihiragana"sv, 0x3062 },
+    { "dikatakana"sv, 0x30C2 },
+    { "dittomark"sv, 0x3003 },
+    { "divide"sv, 0x00F7 },
+    { "divides"sv, 0x2223 },
+    { "divisionslash"sv, 0x2215 },
+    { "djecyrillic"sv, 0x0452 },
+    { "dkshade"sv, 0x2593 },
+    { "dlinebelow"sv, 0x1E0F },
+    { "dlsquare"sv, 0x3397 },
+    { "dmacron"sv, 0x0111 },
+    { "dmonospace"sv, 0xFF44 },
+    { "dnblock"sv, 0x2584 },
+    { "dochadathai"sv, 0x0E0E },
+    { "dodekthai"sv, 0x0E14 },
+    { "dohiragana"sv, 0x3069 },
+    { "dokatakana"sv, 0x30C9 },
+    { "dollar"sv, 0x0024 },
+    { "dollarinferior"sv, 0xF6E3 },
+    { "dollarmonospace"sv, 0xFF04 },
+    { "dollaroldstyle"sv, 0xF724 },
+    { "dollarsmall"sv, 0xFE69 },
+    { "dollarsuperior"sv, 0xF6E4 },
+    { "dong"sv, 0x20AB },
+    { "dorusquare"sv, 0x3326 },
+    { "dotaccent"sv, 0x02D9 },
+    { "dotaccentcmb"sv, 0x0307 },
+    { "dotbelowcmb"sv, 0x0323 },
+    { "dotbelowcomb"sv, 0x0323 },
+    { "dotkatakana"sv, 0x30FB },
+    { "dotlessi"sv, 0x0131 },
+    { "dotlessj"sv, 0xF6BE },
+    { "dotlessjstrokehook"sv, 0x0284 },
+    { "dotmath"sv, 0x22C5 },
+    { "dottedcircle"sv, 0x25CC },
+    { "doubleyodpatah"sv, 0xFB1F },
+    { "doubleyodpatahhebrew"sv, 0xFB1F },
+    { "downtackbelowcmb"sv, 0x031E },
+    { "downtackmod"sv, 0x02D5 },
+    { "dparen"sv, 0x249F },
+    { "dsuperior"sv, 0xF6EB },
+    { "dtail"sv, 0x0256 },
+    { "dtopbar"sv, 0x018C },
+    { "duhiragana"sv, 0x3065 },
+    { "dukatakana"sv, 0x30C5 },
+    { "dz"sv, 0x01F3 },
+    { "dzaltone"sv, 0x02A3 },
+    { "dzcaron"sv, 0x01C6 },
+    { "dzcurl"sv, 0x02A5 },
+    { "dzeabkhasiancyrillic"sv, 0x04E1 },
+    { "dzecyrillic"sv, 0x0455 },
+    { "dzhecyrillic"sv, 0x045F },
+    { "e"sv, 0x0065 },
+    { "eacute"sv, 0x00E9 },
+    { "earth"sv, 0x2641 },
+    { "ebengali"sv, 0x098F },
+    { "ebopomofo"sv, 0x311C },
+    { "ebreve"sv, 0x0115 },
+    { "ecandradeva"sv, 0x090D },
+    { "ecandragujarati"sv, 0x0A8D },
+    { "ecandravowelsigndeva"sv, 0x0945 },
+    { "ecandravowelsigngujarati"sv, 0x0AC5 },
+    { "ecaron"sv, 0x011B },
+    { "ecedillabreve"sv, 0x1E1D },
+    { "echarmenian"sv, 0x0565 },
+    { "echyiwnarmenian"sv, 0x0587 },
+    { "ecircle"sv, 0x24D4 },
+    { "ecircumflex"sv, 0x00EA },
+    { "ecircumflexacute"sv, 0x1EBF },
+    { "ecircumflexbelow"sv, 0x1E19 },
+    { "ecircumflexdotbelow"sv, 0x1EC7 },
+    { "ecircumflexgrave"sv, 0x1EC1 },
+    { "ecircumflexhookabove"sv, 0x1EC3 },
+    { "ecircumflextilde"sv, 0x1EC5 },
+    { "ecyrillic"sv, 0x0454 },
+    { "edblgrave"sv, 0x0205 },
+    { "edeva"sv, 0x090F },
+    { "edieresis"sv, 0x00EB },
+    { "edot"sv, 0x0117 },
+    { "edotaccent"sv, 0x0117 },
+    { "edotbelow"sv, 0x1EB9 },
+    { "eegurmukhi"sv, 0x0A0F },
+    { "eematragurmukhi"sv, 0x0A47 },
+    { "efcyrillic"sv, 0x0444 },
+    { "egrave"sv, 0x00E8 },
+    { "egujarati"sv, 0x0A8F },
+    { "eharmenian"sv, 0x0567 },
+    { "ehbopomofo"sv, 0x311D },
+    { "ehiragana"sv, 0x3048 },
+    { "ehookabove"sv, 0x1EBB },
+    { "eibopomofo"sv, 0x311F },
+    { "eight"sv, 0x0038 },
+    { "eightarabic"sv, 0x0668 },
+    { "eightbengali"sv, 0x09EE },
+    { "eightcircle"sv, 0x2467 },
+    { "eightcircleinversesansserif"sv, 0x2791 },
+    { "eightdeva"sv, 0x096E },
+    { "eighteencircle"sv, 0x2471 },
+    { "eighteenparen"sv, 0x2485 },
+    { "eighteenperiod"sv, 0x2499 },
+    { "eightgujarati"sv, 0x0AEE },
+    { "eightgurmukhi"sv, 0x0A6E },
+    { "eighthackarabic"sv, 0x0668 },
+    { "eighthangzhou"sv, 0x3028 },
+    { "eighthnotebeamed"sv, 0x266B },
+    { "eightideographicparen"sv, 0x3227 },
+    { "eightinferior"sv, 0x2088 },
+    { "eightmonospace"sv, 0xFF18 },
+    { "eightoldstyle"sv, 0xF738 },
+    { "eightparen"sv, 0x247B },
+    { "eightperiod"sv, 0x248F },
+    { "eightpersian"sv, 0x06F8 },
+    { "eightroman"sv, 0x2177 },
+    { "eightsuperior"sv, 0x2078 },
+    { "eightthai"sv, 0x0E58 },
+    { "einvertedbreve"sv, 0x0207 },
+    { "eiotifiedcyrillic"sv, 0x0465 },
+    { "ekatakana"sv, 0x30A8 },
+    { "ekatakanahalfwidth"sv, 0xFF74 },
+    { "ekonkargurmukhi"sv, 0x0A74 },
+    { "ekorean"sv, 0x3154 },
+    { "elcyrillic"sv, 0x043B },
+    { "element"sv, 0x2208 },
+    { "elevencircle"sv, 0x246A },
+    { "elevenparen"sv, 0x247E },
+    { "elevenperiod"sv, 0x2492 },
+    { "elevenroman"sv, 0x217A },
+    { "ellipsis"sv, 0x2026 },
+    { "ellipsisvertical"sv, 0x22EE },
+    { "emacron"sv, 0x0113 },
+    { "emacronacute"sv, 0x1E17 },
+    { "emacrongrave"sv, 0x1E15 },
+    { "emcyrillic"sv, 0x043C },
+    { "emdash"sv, 0x2014 },
+    { "emdashvertical"sv, 0xFE31 },
+    { "emonospace"sv, 0xFF45 },
+    { "emphasismarkarmenian"sv, 0x055B },
+    { "emptyset"sv, 0x2205 },
+    { "enbopomofo"sv, 0x3123 },
+    { "encyrillic"sv, 0x043D },
+    { "endash"sv, 0x2013 },
+    { "endashvertical"sv, 0xFE32 },
+    { "endescendercyrillic"sv, 0x04A3 },
+    { "eng"sv, 0x014B },
+    { "engbopomofo"sv, 0x3125 },
+    { "enghecyrillic"sv, 0x04A5 },
+    { "enhookcyrillic"sv, 0x04C8 },
+    { "enspace"sv, 0x2002 },
+    { "eogonek"sv, 0x0119 },
+    { "eokorean"sv, 0x3153 },
+    { "eopen"sv, 0x025B },
+    { "eopenclosed"sv, 0x029A },
+    { "eopenreversed"sv, 0x025C },
+    { "eopenreversedclosed"sv, 0x025E },
+    { "eopenreversedhook"sv, 0x025D },
+    { "eparen"sv, 0x24A0 },
+    { "epsilon"sv, 0x03B5 },
+    { "epsilontonos"sv, 0x03AD },
+    { "equal"sv, 0x003D },
+    { "equalmonospace"sv, 0xFF1D },
+    { "equalsmall"sv, 0xFE66 },
+    { "equalsuperior"sv, 0x207C },
+    { "equivalence"sv, 0x2261 },
+    { "erbopomofo"sv, 0x3126 },
+    { "ercyrillic"sv, 0x0440 },
+    { "ereversed"sv, 0x0258 },
+    { "ereversedcyrillic"sv, 0x044D },
+    { "escyrillic"sv, 0x0441 },
+    { "esdescendercyrillic"sv, 0x04AB },
+    { "esh"sv, 0x0283 },
+    { "eshcurl"sv, 0x0286 },
+    { "eshortdeva"sv, 0x090E },
+    { "eshortvowelsigndeva"sv, 0x0946 },
+    { "eshreversedloop"sv, 0x01AA },
+    { "eshsquatreversed"sv, 0x0285 },
+    { "esmallhiragana"sv, 0x3047 },
+    { "esmallkatakana"sv, 0x30A7 },
+    { "esmallkatakanahalfwidth"sv, 0xFF6A },
+    { "estimated"sv, 0x212E },
+    { "esuperior"sv, 0xF6EC },
+    { "eta"sv, 0x03B7 },
+    { "etarmenian"sv, 0x0568 },
+    { "etatonos"sv, 0x03AE },
+    { "eth"sv, 0x00F0 },
+    { "etilde"sv, 0x1EBD },
+    { "etildebelow"sv, 0x1E1B },
+    { "etnahtafoukhhebrew"sv, 0x0591 },
+    { "etnahtafoukhlefthebrew"sv, 0x0591 },
+    { "etnahtahebrew"sv, 0x0591 },
+    { "etnahtalefthebrew"sv, 0x0591 },
+    { "eturned"sv, 0x01DD },
+    { "eukorean"sv, 0x3161 },
+    { "euro"sv, 0x20AC },
+    { "evowelsignbengali"sv, 0x09C7 },
+    { "evowelsigndeva"sv, 0x0947 },
+    { "evowelsigngujarati"sv, 0x0AC7 },
+    { "exclam"sv, 0x0021 },
+    { "exclamarmenian"sv, 0x055C },
+    { "exclamdbl"sv, 0x203C },
+    { "exclamdown"sv, 0x00A1 },
+    { "exclamdownsmall"sv, 0xF7A1 },
+    { "exclammonospace"sv, 0xFF01 },
+    { "exclamsmall"sv, 0xF721 },
+    { "existential"sv, 0x2203 },
+    { "ezh"sv, 0x0292 },
+    { "ezhcaron"sv, 0x01EF },
+    { "ezhcurl"sv, 0x0293 },
+    { "ezhreversed"sv, 0x01B9 },
+    { "ezhtail"sv, 0x01BA },
+    { "f"sv, 0x0066 },
+    { "fadeva"sv, 0x095E },
+    { "fagurmukhi"sv, 0x0A5E },
+    { "fahrenheit"sv, 0x2109 },
+    { "fathaarabic"sv, 0x064E },
+    { "fathalowarabic"sv, 0x064E },
+    { "fathatanarabic"sv, 0x064B },
+    { "fbopomofo"sv, 0x3108 },
+    { "fcircle"sv, 0x24D5 },
+    { "fdotaccent"sv, 0x1E1F },
+    { "feharabic"sv, 0x0641 },
+    { "feharmenian"sv, 0x0586 },
+    { "fehfinalarabic"sv, 0xFED2 },
+    { "fehinitialarabic"sv, 0xFED3 },
+    { "fehmedialarabic"sv, 0xFED4 },
+    { "feicoptic"sv, 0x03E5 },
+    { "female"sv, 0x2640 },
+    { "ff"sv, 0xFB00 },
+    { "ffi"sv, 0xFB03 },
+    { "ffl"sv, 0xFB04 },
+    { "fi"sv, 0xFB01 },
+    { "fifteencircle"sv, 0x246E },
+    { "fifteenparen"sv, 0x2482 },
+    { "fifteenperiod"sv, 0x2496 },
+    { "figuredash"sv, 0x2012 },
+    { "filledbox"sv, 0x25A0 },
+    { "filledrect"sv, 0x25AC },
+    { "finalkaf"sv, 0x05DA },
+    { "finalkafdagesh"sv, 0xFB3A },
+    { "finalkafdageshhebrew"sv, 0xFB3A },
+    { "finalkafhebrew"sv, 0x05DA },
+    { "finalmem"sv, 0x05DD },
+    { "finalmemhebrew"sv, 0x05DD },
+    { "finalnun"sv, 0x05DF },
+    { "finalnunhebrew"sv, 0x05DF },
+    { "finalpe"sv, 0x05E3 },
+    { "finalpehebrew"sv, 0x05E3 },
+    { "finaltsadi"sv, 0x05E5 },
+    { "finaltsadihebrew"sv, 0x05E5 },
+    { "firsttonechinese"sv, 0x02C9 },
+    { "fisheye"sv, 0x25C9 },
+    { "fitacyrillic"sv, 0x0473 },
+    { "five"sv, 0x0035 },
+    { "fivearabic"sv, 0x0665 },
+    { "fivebengali"sv, 0x09EB },
+    { "fivecircle"sv, 0x2464 },
+    { "fivecircleinversesansserif"sv, 0x278E },
+    { "fivedeva"sv, 0x096B },
+    { "fiveeighths"sv, 0x215D },
+    { "fivegujarati"sv, 0x0AEB },
+    { "fivegurmukhi"sv, 0x0A6B },
+    { "fivehackarabic"sv, 0x0665 },
+    { "fivehangzhou"sv, 0x3025 },
+    { "fiveideographicparen"sv, 0x3224 },
+    { "fiveinferior"sv, 0x2085 },
+    { "fivemonospace"sv, 0xFF15 },
+    { "fiveoldstyle"sv, 0xF735 },
+    { "fiveparen"sv, 0x2478 },
+    { "fiveperiod"sv, 0x248C },
+    { "fivepersian"sv, 0x06F5 },
+    { "fiveroman"sv, 0x2174 },
+    { "fivesuperior"sv, 0x2075 },
+    { "fivethai"sv, 0x0E55 },
+    { "fl"sv, 0xFB02 },
+    { "florin"sv, 0x0192 },
+    { "fmonospace"sv, 0xFF46 },
+    { "fmsquare"sv, 0x3399 },
+    { "fofanthai"sv, 0x0E1F },
+    { "fofathai"sv, 0x0E1D },
+    { "fongmanthai"sv, 0x0E4F },
+    { "forall"sv, 0x2200 },
+    { "four"sv, 0x0034 },
+    { "fourarabic"sv, 0x0664 },
+    { "fourbengali"sv, 0x09EA },
+    { "fourcircle"sv, 0x2463 },
+    { "fourcircleinversesansserif"sv, 0x278D },
+    { "fourdeva"sv, 0x096A },
+    { "fourgujarati"sv, 0x0AEA },
+    { "fourgurmukhi"sv, 0x0A6A },
+    { "fourhackarabic"sv, 0x0664 },
+    { "fourhangzhou"sv, 0x3024 },
+    { "fourideographicparen"sv, 0x3223 },
+    { "fourinferior"sv, 0x2084 },
+    { "fourmonospace"sv, 0xFF14 },
+    { "fournumeratorbengali"sv, 0x09F7 },
+    { "fouroldstyle"sv, 0xF734 },
+    { "fourparen"sv, 0x2477 },
+    { "fourperiod"sv, 0x248B },
+    { "fourpersian"sv, 0x06F4 },
+    { "fourroman"sv, 0x2173 },
+    { "foursuperior"sv, 0x2074 },
+    { "fourteencircle"sv, 0x246D },
+    { "fourteenparen"sv, 0x2481 },
+    { "fourteenperiod"sv, 0x2495 },
+    { "fourthai"sv, 0x0E54 },
+    { "fourthtonechinese"sv, 0x02CB },
+    { "fparen"sv, 0x24A1 },
+    { "fraction"sv, 0x2044 },
+    { "franc"sv, 0x20A3 },
+    { "g"sv, 0x0067 },
+    { "gabengali"sv, 0x0997 },
+    { "gacute"sv, 0x01F5 },
+    { "gadeva"sv, 0x0917 },
+    { "gafarabic"sv, 0x06AF },
+    { "gaffinalarabic"sv, 0xFB93 },
+    { "gafinitialarabic"sv, 0xFB94 },
+    { "gafmedialarabic"sv, 0xFB95 },
+    { "gagujarati"sv, 0x0A97 },
+    { "gagurmukhi"sv, 0x0A17 },
+    { "gahiragana"sv, 0x304C },
+    { "gakatakana"sv, 0x30AC },
+    { "gamma"sv, 0x03B3 },
+    { "gammalatinsmall"sv, 0x0263 },
+    { "gammasuperior"sv, 0x02E0 },
+    { "gangiacoptic"sv, 0x03EB },
+    { "gbopomofo"sv, 0x310D },
+    { "gbreve"sv, 0x011F },
+    { "gcaron"sv, 0x01E7 },
+    { "gcedilla"sv, 0x0123 },
+    { "gcircle"sv, 0x24D6 },
+    { "gcircumflex"sv, 0x011D },
+    { "gcommaaccent"sv, 0x0123 },
+    { "gdot"sv, 0x0121 },
+    { "gdotaccent"sv, 0x0121 },
+    { "gecyrillic"sv, 0x0433 },
+    { "gehiragana"sv, 0x3052 },
+    { "gekatakana"sv, 0x30B2 },
+    { "geometricallyequal"sv, 0x2251 },
+    { "gereshaccenthebrew"sv, 0x059C },
+    { "gereshhebrew"sv, 0x05F3 },
+    { "gereshmuqdamhebrew"sv, 0x059D },
+    { "germandbls"sv, 0x00DF },
+    { "gershayimaccenthebrew"sv, 0x059E },
+    { "gershayimhebrew"sv, 0x05F4 },
+    { "getamark"sv, 0x3013 },
+    { "ghabengali"sv, 0x0998 },
+    { "ghadarmenian"sv, 0x0572 },
+    { "ghadeva"sv, 0x0918 },
+    { "ghagujarati"sv, 0x0A98 },
+    { "ghagurmukhi"sv, 0x0A18 },
+    { "ghainarabic"sv, 0x063A },
+    { "ghainfinalarabic"sv, 0xFECE },
+    { "ghaininitialarabic"sv, 0xFECF },
+    { "ghainmedialarabic"sv, 0xFED0 },
+    { "ghemiddlehookcyrillic"sv, 0x0495 },
+    { "ghestrokecyrillic"sv, 0x0493 },
+    { "gheupturncyrillic"sv, 0x0491 },
+    { "ghhadeva"sv, 0x095A },
+    { "ghhagurmukhi"sv, 0x0A5A },
+    { "ghook"sv, 0x0260 },
+    { "ghzsquare"sv, 0x3393 },
+    { "gihiragana"sv, 0x304E },
+    { "gikatakana"sv, 0x30AE },
+    { "gimarmenian"sv, 0x0563 },
+    { "gimel"sv, 0x05D2 },
+    { "gimeldagesh"sv, 0xFB32 },
+    { "gimeldageshhebrew"sv, 0xFB32 },
+    { "gimelhebrew"sv, 0x05D2 },
+    { "gjecyrillic"sv, 0x0453 },
+    { "glottalinvertedstroke"sv, 0x01BE },
+    { "glottalstop"sv, 0x0294 },
+    { "glottalstopinverted"sv, 0x0296 },
+    { "glottalstopmod"sv, 0x02C0 },
+    { "glottalstopreversed"sv, 0x0295 },
+    { "glottalstopreversedmod"sv, 0x02C1 },
+    { "glottalstopreversedsuperior"sv, 0x02E4 },
+    { "glottalstopstroke"sv, 0x02A1 },
+    { "glottalstopstrokereversed"sv, 0x02A2 },
+    { "gmacron"sv, 0x1E21 },
+    { "gmonospace"sv, 0xFF47 },
+    { "gohiragana"sv, 0x3054 },
+    { "gokatakana"sv, 0x30B4 },
+    { "gparen"sv, 0x24A2 },
+    { "gpasquare"sv, 0x33AC },
+    { "gradient"sv, 0x2207 },
+    { "grave"sv, 0x0060 },
+    { "gravebelowcmb"sv, 0x0316 },
+    { "gravecmb"sv, 0x0300 },
+    { "gravecomb"sv, 0x0300 },
+    { "gravedeva"sv, 0x0953 },
+    { "gravelowmod"sv, 0x02CE },
+    { "gravemonospace"sv, 0xFF40 },
+    { "gravetonecmb"sv, 0x0340 },
+    { "greater"sv, 0x003E },
+    { "greaterequal"sv, 0x2265 },
+    { "greaterequalorless"sv, 0x22DB },
+    { "greatermonospace"sv, 0xFF1E },
+    { "greaterorequivalent"sv, 0x2273 },
+    { "greaterorless"sv, 0x2277 },
+    { "greateroverequal"sv, 0x2267 },
+    { "greatersmall"sv, 0xFE65 },
+    { "gscript"sv, 0x0261 },
+    { "gstroke"sv, 0x01E5 },
+    { "guhiragana"sv, 0x3050 },
+    { "guillemotleft"sv, 0x00AB },
+    { "guillemotright"sv, 0x00BB },
+    { "guilsinglleft"sv, 0x2039 },
+    { "guilsinglright"sv, 0x203A },
+    { "gukatakana"sv, 0x30B0 },
+    { "guramusquare"sv, 0x3318 },
+    { "gysquare"sv, 0x33C9 },
+    { "h"sv, 0x0068 },
+    { "haabkhasiancyrillic"sv, 0x04A9 },
+    { "haaltonearabic"sv, 0x06C1 },
+    { "habengali"sv, 0x09B9 },
+    { "hadescendercyrillic"sv, 0x04B3 },
+    { "hadeva"sv, 0x0939 },
+    { "hagujarati"sv, 0x0AB9 },
+    { "hagurmukhi"sv, 0x0A39 },
+    { "haharabic"sv, 0x062D },
+    { "hahfinalarabic"sv, 0xFEA2 },
+    { "hahinitialarabic"sv, 0xFEA3 },
+    { "hahiragana"sv, 0x306F },
+    { "hahmedialarabic"sv, 0xFEA4 },
+    { "haitusquare"sv, 0x332A },
+    { "hakatakana"sv, 0x30CF },
+    { "hakatakanahalfwidth"sv, 0xFF8A },
+    { "halantgurmukhi"sv, 0x0A4D },
+    { "hamzaarabic"sv, 0x0621 },
+    { "hamzalowarabic"sv, 0x0621 },
+    { "hangulfiller"sv, 0x3164 },
+    { "hardsigncyrillic"sv, 0x044A },
+    { "harpoonleftbarbup"sv, 0x21BC },
+    { "harpoonrightbarbup"sv, 0x21C0 },
+    { "hasquare"sv, 0x33CA },
+    { "hatafpatah"sv, 0x05B2 },
+    { "hatafpatah16"sv, 0x05B2 },
+    { "hatafpatah23"sv, 0x05B2 },
+    { "hatafpatah2f"sv, 0x05B2 },
+    { "hatafpatahhebrew"sv, 0x05B2 },
+    { "hatafpatahnarrowhebrew"sv, 0x05B2 },
+    { "hatafpatahquarterhebrew"sv, 0x05B2 },
+    { "hatafpatahwidehebrew"sv, 0x05B2 },
+    { "hatafqamats"sv, 0x05B3 },
+    { "hatafqamats1b"sv, 0x05B3 },
+    { "hatafqamats28"sv, 0x05B3 },
+    { "hatafqamats34"sv, 0x05B3 },
+    { "hatafqamatshebrew"sv, 0x05B3 },
+    { "hatafqamatsnarrowhebrew"sv, 0x05B3 },
+    { "hatafqamatsquarterhebrew"sv, 0x05B3 },
+    { "hatafqamatswidehebrew"sv, 0x05B3 },
+    { "hatafsegol"sv, 0x05B1 },
+    { "hatafsegol17"sv, 0x05B1 },
+    { "hatafsegol24"sv, 0x05B1 },
+    { "hatafsegol30"sv, 0x05B1 },
+    { "hatafsegolhebrew"sv, 0x05B1 },
+    { "hatafsegolnarrowhebrew"sv, 0x05B1 },
+    { "hatafsegolquarterhebrew"sv, 0x05B1 },
+    { "hatafsegolwidehebrew"sv, 0x05B1 },
+    { "hbar"sv, 0x0127 },
+    { "hbopomofo"sv, 0x310F },
+    { "hbrevebelow"sv, 0x1E2B },
+    { "hcedilla"sv, 0x1E29 },
+    { "hcircle"sv, 0x24D7 },
+    { "hcircumflex"sv, 0x0125 },
+    { "hdieresis"sv, 0x1E27 },
+    { "hdotaccent"sv, 0x1E23 },
+    { "hdotbelow"sv, 0x1E25 },
+    { "he"sv, 0x05D4 },
+    { "heart"sv, 0x2665 },
+    { "heartsuitblack"sv, 0x2665 },
+    { "heartsuitwhite"sv, 0x2661 },
+    { "hedagesh"sv, 0xFB34 },
+    { "hedageshhebrew"sv, 0xFB34 },
+    { "hehaltonearabic"sv, 0x06C1 },
+    { "heharabic"sv, 0x0647 },
+    { "hehebrew"sv, 0x05D4 },
+    { "hehfinalaltonearabic"sv, 0xFBA7 },
+    { "hehfinalalttwoarabic"sv, 0xFEEA },
+    { "hehfinalarabic"sv, 0xFEEA },
+    { "hehhamzaabovefinalarabic"sv, 0xFBA5 },
+    { "hehhamzaaboveisolatedarabic"sv, 0xFBA4 },
+    { "hehinitialaltonearabic"sv, 0xFBA8 },
+    { "hehinitialarabic"sv, 0xFEEB },
+    { "hehiragana"sv, 0x3078 },
+    { "hehmedialaltonearabic"sv, 0xFBA9 },
+    { "hehmedialarabic"sv, 0xFEEC },
+    { "heiseierasquare"sv, 0x337B },
+    { "hekatakana"sv, 0x30D8 },
+    { "hekatakanahalfwidth"sv, 0xFF8D },
+    { "hekutaarusquare"sv, 0x3336 },
+    { "henghook"sv, 0x0267 },
+    { "herutusquare"sv, 0x3339 },
+    { "het"sv, 0x05D7 },
+    { "hethebrew"sv, 0x05D7 },
+    { "hhook"sv, 0x0266 },
+    { "hhooksuperior"sv, 0x02B1 },
+    { "hieuhacirclekorean"sv, 0x327B },
+    { "hieuhaparenkorean"sv, 0x321B },
+    { "hieuhcirclekorean"sv, 0x326D },
+    { "hieuhkorean"sv, 0x314E },
+    { "hieuhparenkorean"sv, 0x320D },
+    { "hihiragana"sv, 0x3072 },
+    { "hikatakana"sv, 0x30D2 },
+    { "hikatakanahalfwidth"sv, 0xFF8B },
+    { "hiriq"sv, 0x05B4 },
+    { "hiriq14"sv, 0x05B4 },
+    { "hiriq21"sv, 0x05B4 },
+    { "hiriq2d"sv, 0x05B4 },
+    { "hiriqhebrew"sv, 0x05B4 },
+    { "hiriqnarrowhebrew"sv, 0x05B4 },
+    { "hiriqquarterhebrew"sv, 0x05B4 },
+    { "hiriqwidehebrew"sv, 0x05B4 },
+    { "hlinebelow"sv, 0x1E96 },
+    { "hmonospace"sv, 0xFF48 },
+    { "hoarmenian"sv, 0x0570 },
+    { "hohipthai"sv, 0x0E2B },
+    { "hohiragana"sv, 0x307B },
+    { "hokatakana"sv, 0x30DB },
+    { "hokatakanahalfwidth"sv, 0xFF8E },
+    { "holam"sv, 0x05B9 },
+    { "holam19"sv, 0x05B9 },
+    { "holam26"sv, 0x05B9 },
+    { "holam32"sv, 0x05B9 },
+    { "holamhebrew"sv, 0x05B9 },
+    { "holamnarrowhebrew"sv, 0x05B9 },
+    { "holamquarterhebrew"sv, 0x05B9 },
+    { "holamwidehebrew"sv, 0x05B9 },
+    { "honokhukthai"sv, 0x0E2E },
+    { "hookabovecomb"sv, 0x0309 },
+    { "hookcmb"sv, 0x0309 },
+    { "hookpalatalizedbelowcmb"sv, 0x0321 },
+    { "hookretroflexbelowcmb"sv, 0x0322 },
+    { "hoonsquare"sv, 0x3342 },
+    { "horicoptic"sv, 0x03E9 },
+    { "horizontalbar"sv, 0x2015 },
+    { "horncmb"sv, 0x031B },
+    { "hotsprings"sv, 0x2668 },
+    { "house"sv, 0x2302 },
+    { "hparen"sv, 0x24A3 },
+    { "hsuperior"sv, 0x02B0 },
+    { "hturned"sv, 0x0265 },
+    { "huhiragana"sv, 0x3075 },
+    { "huiitosquare"sv, 0x3333 },
+    { "hukatakana"sv, 0x30D5 },
+    { "hukatakanahalfwidth"sv, 0xFF8C },
+    { "hungarumlaut"sv, 0x02DD },
+    { "hungarumlautcmb"sv, 0x030B },
+    { "hv"sv, 0x0195 },
+    { "hyphen"sv, 0x002D },
+    { "hypheninferior"sv, 0xF6E5 },
+    { "hyphenmonospace"sv, 0xFF0D },
+    { "hyphensmall"sv, 0xFE63 },
+    { "hyphensuperior"sv, 0xF6E6 },
+    { "hyphentwo"sv, 0x2010 },
+    { "i"sv, 0x0069 },
+    { "iacute"sv, 0x00ED },
+    { "iacyrillic"sv, 0x044F },
+    { "ibengali"sv, 0x0987 },
+    { "ibopomofo"sv, 0x3127 },
+    { "ibreve"sv, 0x012D },
+    { "icaron"sv, 0x01D0 },
+    { "icircle"sv, 0x24D8 },
+    { "icircumflex"sv, 0x00EE },
+    { "icyrillic"sv, 0x0456 },
+    { "idblgrave"sv, 0x0209 },
+    { "ideographearthcircle"sv, 0x328F },
+    { "ideographfirecircle"sv, 0x328B },
+    { "ideographicallianceparen"sv, 0x323F },
+    { "ideographiccallparen"sv, 0x323A },
+    { "ideographiccentrecircle"sv, 0x32A5 },
+    { "ideographicclose"sv, 0x3006 },
+    { "ideographiccomma"sv, 0x3001 },
+    { "ideographiccommaleft"sv, 0xFF64 },
+    { "ideographiccongratulationparen"sv, 0x3237 },
+    { "ideographiccorrectcircle"sv, 0x32A3 },
+    { "ideographicearthparen"sv, 0x322F },
+    { "ideographicenterpriseparen"sv, 0x323D },
+    { "ideographicexcellentcircle"sv, 0x329D },
+    { "ideographicfestivalparen"sv, 0x3240 },
+    { "ideographicfinancialcircle"sv, 0x3296 },
+    { "ideographicfinancialparen"sv, 0x3236 },
+    { "ideographicfireparen"sv, 0x322B },
+    { "ideographichaveparen"sv, 0x3232 },
+    { "ideographichighcircle"sv, 0x32A4 },
+    { "ideographiciterationmark"sv, 0x3005 },
+    { "ideographiclaborcircle"sv, 0x3298 },
+    { "ideographiclaborparen"sv, 0x3238 },
+    { "ideographicleftcircle"sv, 0x32A7 },
+    { "ideographiclowcircle"sv, 0x32A6 },
+    { "ideographicmedicinecircle"sv, 0x32A9 },
+    { "ideographicmetalparen"sv, 0x322E },
+    { "ideographicmoonparen"sv, 0x322A },
+    { "ideographicnameparen"sv, 0x3234 },
+    { "ideographicperiod"sv, 0x3002 },
+    { "ideographicprintcircle"sv, 0x329E },
+    { "ideographicreachparen"sv, 0x3243 },
+    { "ideographicrepresentparen"sv, 0x3239 },
+    { "ideographicresourceparen"sv, 0x323E },
+    { "ideographicrightcircle"sv, 0x32A8 },
+    { "ideographicsecretcircle"sv, 0x3299 },
+    { "ideographicselfparen"sv, 0x3242 },
+    { "ideographicsocietyparen"sv, 0x3233 },
+    { "ideographicspace"sv, 0x3000 },
+    { "ideographicspecialparen"sv, 0x3235 },
+    { "ideographicstockparen"sv, 0x3231 },
+    { "ideographicstudyparen"sv, 0x323B },
+    { "ideographicsunparen"sv, 0x3230 },
+    { "ideographicsuperviseparen"sv, 0x323C },
+    { "ideographicwaterparen"sv, 0x322C },
+    { "ideographicwoodparen"sv, 0x322D },
+    { "ideographiczero"sv, 0x3007 },
+    { "ideographmetalcircle"sv, 0x328E },
+    { "ideographmooncircle"sv, 0x328A },
+    { "ideographnamecircle"sv, 0x3294 },
+    { "ideographsuncircle"sv, 0x3290 },
+    { "ideographwatercircle"sv, 0x328C },
+    { "ideographwoodcircle"sv, 0x328D },
+    { "ideva"sv, 0x0907 },
+    { "idieresis"sv, 0x00EF },
+    { "idieresisacute"sv, 0x1E2F },
+    { "idieresiscyrillic"sv, 0x04E5 },
+    { "idotbelow"sv, 0x1ECB },
+    { "iebrevecyrillic"sv, 0x04D7 },
+    { "iecyrillic"sv, 0x0435 },
+    { "ieungacirclekorean"sv, 0x3275 },
+    { "ieungaparenkorean"sv, 0x3215 },
+    { "ieungcirclekorean"sv, 0x3267 },
+    { "ieungkorean"sv, 0x3147 },
+    { "ieungparenkorean"sv, 0x3207 },
+    { "igrave"sv, 0x00EC },
+    { "igujarati"sv, 0x0A87 },
+    { "igurmukhi"sv, 0x0A07 },
+    { "ihiragana"sv, 0x3044 },
+    { "ihookabove"sv, 0x1EC9 },
+    { "iibengali"sv, 0x0988 },
+    { "iicyrillic"sv, 0x0438 },
+    { "iideva"sv, 0x0908 },
+    { "iigujarati"sv, 0x0A88 },
+    { "iigurmukhi"sv, 0x0A08 },
+    { "iimatragurmukhi"sv, 0x0A40 },
+    { "iinvertedbreve"sv, 0x020B },
+    { "iishortcyrillic"sv, 0x0439 },
+    { "iivowelsignbengali"sv, 0x09C0 },
+    { "iivowelsigndeva"sv, 0x0940 },
+    { "iivowelsigngujarati"sv, 0x0AC0 },
+    { "ij"sv, 0x0133 },
+    { "ikatakana"sv, 0x30A4 },
+    { "ikatakanahalfwidth"sv, 0xFF72 },
+    { "ikorean"sv, 0x3163 },
+    { "ilde"sv, 0x02DC },
+    { "iluyhebrew"sv, 0x05AC },
+    { "imacron"sv, 0x012B },
+    { "imacroncyrillic"sv, 0x04E3 },
+    { "imageorapproximatelyequal"sv, 0x2253 },
+    { "imatragurmukhi"sv, 0x0A3F },
+    { "imonospace"sv, 0xFF49 },
+    { "increment"sv, 0x2206 },
+    { "infinity"sv, 0x221E },
+    { "iniarmenian"sv, 0x056B },
+    { "integral"sv, 0x222B },
+    { "integralbottom"sv, 0x2321 },
+    { "integralbt"sv, 0x2321 },
+    { "integralex"sv, 0xF8F5 },
+    { "integraltop"sv, 0x2320 },
+    { "integraltp"sv, 0x2320 },
+    { "intersection"sv, 0x2229 },
+    { "intisquare"sv, 0x3305 },
+    { "invbullet"sv, 0x25D8 },
+    { "invcircle"sv, 0x25D9 },
+    { "invsmileface"sv, 0x263B },
+    { "iocyrillic"sv, 0x0451 },
+    { "iogonek"sv, 0x012F },
+    { "iota"sv, 0x03B9 },
+    { "iotadieresis"sv, 0x03CA },
+    { "iotadieresistonos"sv, 0x0390 },
+    { "iotalatin"sv, 0x0269 },
+    { "iotatonos"sv, 0x03AF },
+    { "iparen"sv, 0x24A4 },
+    { "irigurmukhi"sv, 0x0A72 },
+    { "ismallhiragana"sv, 0x3043 },
+    { "ismallkatakana"sv, 0x30A3 },
+    { "ismallkatakanahalfwidth"sv, 0xFF68 },
+    { "issharbengali"sv, 0x09FA },
+    { "istroke"sv, 0x0268 },
+    { "isuperior"sv, 0xF6ED },
+    { "iterationhiragana"sv, 0x309D },
+    { "iterationkatakana"sv, 0x30FD },
+    { "itilde"sv, 0x0129 },
+    { "itildebelow"sv, 0x1E2D },
+    { "iubopomofo"sv, 0x3129 },
+    { "iucyrillic"sv, 0x044E },
+    { "ivowelsignbengali"sv, 0x09BF },
+    { "ivowelsigndeva"sv, 0x093F },
+    { "ivowelsigngujarati"sv, 0x0ABF },
+    { "izhitsacyrillic"sv, 0x0475 },
+    { "izhitsadblgravecyrillic"sv, 0x0477 },
+    { "j"sv, 0x006A },
+    { "jaarmenian"sv, 0x0571 },
+    { "jabengali"sv, 0x099C },
+    { "jadeva"sv, 0x091C },
+    { "jagujarati"sv, 0x0A9C },
+    { "jagurmukhi"sv, 0x0A1C },
+    { "jbopomofo"sv, 0x3110 },
+    { "jcaron"sv, 0x01F0 },
+    { "jcircle"sv, 0x24D9 },
+    { "jcircumflex"sv, 0x0135 },
+    { "jcrossedtail"sv, 0x029D },
+    { "jdotlessstroke"sv, 0x025F },
+    { "jecyrillic"sv, 0x0458 },
+    { "jeemarabic"sv, 0x062C },
+    { "jeemfinalarabic"sv, 0xFE9E },
+    { "jeeminitialarabic"sv, 0xFE9F },
+    { "jeemmedialarabic"sv, 0xFEA0 },
+    { "jeharabic"sv, 0x0698 },
+    { "jehfinalarabic"sv, 0xFB8B },
+    { "jhabengali"sv, 0x099D },
+    { "jhadeva"sv, 0x091D },
+    { "jhagujarati"sv, 0x0A9D },
+    { "jhagurmukhi"sv, 0x0A1D },
+    { "jheharmenian"sv, 0x057B },
+    { "jis"sv, 0x3004 },
+    { "jmonospace"sv, 0xFF4A },
+    { "jparen"sv, 0x24A5 },
+    { "jsuperior"sv, 0x02B2 },
+    { "k"sv, 0x006B },
+    { "kabashkircyrillic"sv, 0x04A1 },
+    { "kabengali"sv, 0x0995 },
+    { "kacute"sv, 0x1E31 },
+    { "kacyrillic"sv, 0x043A },
+    { "kadescendercyrillic"sv, 0x049B },
+    { "kadeva"sv, 0x0915 },
+    { "kaf"sv, 0x05DB },
+    { "kafarabic"sv, 0x0643 },
+    { "kafdagesh"sv, 0xFB3B },
+    { "kafdageshhebrew"sv, 0xFB3B },
+    { "kaffinalarabic"sv, 0xFEDA },
+    { "kafhebrew"sv, 0x05DB },
+    { "kafinitialarabic"sv, 0xFEDB },
+    { "kafmedialarabic"sv, 0xFEDC },
+    { "kafrafehebrew"sv, 0xFB4D },
+    { "kagujarati"sv, 0x0A95 },
+    { "kagurmukhi"sv, 0x0A15 },
+    { "kahiragana"sv, 0x304B },
+    { "kahookcyrillic"sv, 0x04C4 },
+    { "kakatakana"sv, 0x30AB },
+    { "kakatakanahalfwidth"sv, 0xFF76 },
+    { "kappa"sv, 0x03BA },
+    { "kappasymbolgreek"sv, 0x03F0 },
+    { "kapyeounmieumkorean"sv, 0x3171 },
+    { "kapyeounphieuphkorean"sv, 0x3184 },
+    { "kapyeounpieupkorean"sv, 0x3178 },
+    { "kapyeounssangpieupkorean"sv, 0x3179 },
+    { "karoriisquare"sv, 0x330D },
+    { "kashidaautoarabic"sv, 0x0640 },
+    { "kashidaautonosidebearingarabic"sv, 0x0640 },
+    { "kasmallkatakana"sv, 0x30F5 },
+    { "kasquare"sv, 0x3384 },
+    { "kasraarabic"sv, 0x0650 },
+    { "kasratanarabic"sv, 0x064D },
+    { "kastrokecyrillic"sv, 0x049F },
+    { "katahiraprolongmarkhalfwidth"sv, 0xFF70 },
+    { "kaverticalstrokecyrillic"sv, 0x049D },
+    { "kbopomofo"sv, 0x310E },
+    { "kcalsquare"sv, 0x3389 },
+    { "kcaron"sv, 0x01E9 },
+    { "kcedilla"sv, 0x0137 },
+    { "kcircle"sv, 0x24DA },
+    { "kcommaaccent"sv, 0x0137 },
+    { "kdotbelow"sv, 0x1E33 },
+    { "keharmenian"sv, 0x0584 },
+    { "kehiragana"sv, 0x3051 },
+    { "kekatakana"sv, 0x30B1 },
+    { "kekatakanahalfwidth"sv, 0xFF79 },
+    { "kenarmenian"sv, 0x056F },
+    { "kesmallkatakana"sv, 0x30F6 },
+    { "kgreenlandic"sv, 0x0138 },
+    { "khabengali"sv, 0x0996 },
+    { "khacyrillic"sv, 0x0445 },
+    { "khadeva"sv, 0x0916 },
+    { "khagujarati"sv, 0x0A96 },
+    { "khagurmukhi"sv, 0x0A16 },
+    { "khaharabic"sv, 0x062E },
+    { "khahfinalarabic"sv, 0xFEA6 },
+    { "khahinitialarabic"sv, 0xFEA7 },
+    { "khahmedialarabic"sv, 0xFEA8 },
+    { "kheicoptic"sv, 0x03E7 },
+    { "khhadeva"sv, 0x0959 },
+    { "khhagurmukhi"sv, 0x0A59 },
+    { "khieukhacirclekorean"sv, 0x3278 },
+    { "khieukhaparenkorean"sv, 0x3218 },
+    { "khieukhcirclekorean"sv, 0x326A },
+    { "khieukhkorean"sv, 0x314B },
+    { "khieukhparenkorean"sv, 0x320A },
+    { "khokhaithai"sv, 0x0E02 },
+    { "khokhonthai"sv, 0x0E05 },
+    { "khokhuatthai"sv, 0x0E03 },
+    { "khokhwaithai"sv, 0x0E04 },
+    { "khomutthai"sv, 0x0E5B },
+    { "khook"sv, 0x0199 },
+    { "khorakhangthai"sv, 0x0E06 },
+    { "khzsquare"sv, 0x3391 },
+    { "kihiragana"sv, 0x304D },
+    { "kikatakana"sv, 0x30AD },
+    { "kikatakanahalfwidth"sv, 0xFF77 },
+    { "kiroguramusquare"sv, 0x3315 },
+    { "kiromeetorusquare"sv, 0x3316 },
+    { "kirosquare"sv, 0x3314 },
+    { "kiyeokacirclekorean"sv, 0x326E },
+    { "kiyeokaparenkorean"sv, 0x320E },
+    { "kiyeokcirclekorean"sv, 0x3260 },
+    { "kiyeokkorean"sv, 0x3131 },
+    { "kiyeokparenkorean"sv, 0x3200 },
+    { "kiyeoksioskorean"sv, 0x3133 },
+    { "kjecyrillic"sv, 0x045C },
+    { "klinebelow"sv, 0x1E35 },
+    { "klsquare"sv, 0x3398 },
+    { "kmcubedsquare"sv, 0x33A6 },
+    { "kmonospace"sv, 0xFF4B },
+    { "kmsquaredsquare"sv, 0x33A2 },
+    { "kohiragana"sv, 0x3053 },
+    { "kohmsquare"sv, 0x33C0 },
+    { "kokaithai"sv, 0x0E01 },
+    { "kokatakana"sv, 0x30B3 },
+    { "kokatakanahalfwidth"sv, 0xFF7A },
+    { "kooposquare"sv, 0x331E },
+    { "koppacyrillic"sv, 0x0481 },
+    { "koreanstandardsymbol"sv, 0x327F },
+    { "koroniscmb"sv, 0x0343 },
+    { "kparen"sv, 0x24A6 },
+    { "kpasquare"sv, 0x33AA },
+    { "ksicyrillic"sv, 0x046F },
+    { "ktsquare"sv, 0x33CF },
+    { "kturned"sv, 0x029E },
+    { "kuhiragana"sv, 0x304F },
+    { "kukatakana"sv, 0x30AF },
+    { "kukatakanahalfwidth"sv, 0xFF78 },
+    { "kvsquare"sv, 0x33B8 },
+    { "kwsquare"sv, 0x33BE },
+    { "l"sv, 0x006C },
+    { "labengali"sv, 0x09B2 },
+    { "lacute"sv, 0x013A },
+    { "ladeva"sv, 0x0932 },
+    { "lagujarati"sv, 0x0AB2 },
+    { "lagurmukhi"sv, 0x0A32 },
+    { "lakkhangyaothai"sv, 0x0E45 },
+    { "lamaleffinalarabic"sv, 0xFEFC },
+    { "lamalefhamzaabovefinalarabic"sv, 0xFEF8 },
+    { "lamalefhamzaaboveisolatedarabic"sv, 0xFEF7 },
+    { "lamalefhamzabelowfinalarabic"sv, 0xFEFA },
+    { "lamalefhamzabelowisolatedarabic"sv, 0xFEF9 },
+    { "lamalefisolatedarabic"sv, 0xFEFB },
+    { "lamalefmaddaabovefinalarabic"sv, 0xFEF6 },
+    { "lamalefmaddaaboveisolatedarabic"sv, 0xFEF5 },
+    { "lamarabic"sv, 0x0644 },
+    { "lambda"sv, 0x03BB },
+    { "lambdastroke"sv, 0x019B },
+    { "lamed"sv, 0x05DC },
+    { "lameddagesh"sv, 0xFB3C },
+    { "lameddageshhebrew"sv, 0xFB3C },
+    { "lamedhebrew"sv, 0x05DC },
+    { "lamfinalarabic"sv, 0xFEDE },
+    { "lamhahinitialarabic"sv, 0xFCCA },
+    { "laminitialarabic"sv, 0xFEDF },
+    { "lamjeeminitialarabic"sv, 0xFCC9 },
+    { "lamkhahinitialarabic"sv, 0xFCCB },
+    { "lamlamhehisolatedarabic"sv, 0xFDF2 },
+    { "lammedialarabic"sv, 0xFEE0 },
+    { "lammeemhahinitialarabic"sv, 0xFD88 },
+    { "lammeeminitialarabic"sv, 0xFCCC },
+    { "largecircle"sv, 0x25EF },
+    { "lbar"sv, 0x019A },
+    { "lbelt"sv, 0x026C },
+    { "lbopomofo"sv, 0x310C },
+    { "lcaron"sv, 0x013E },
+    { "lcedilla"sv, 0x013C },
+    { "lcircle"sv, 0x24DB },
+    { "lcircumflexbelow"sv, 0x1E3D },
+    { "lcommaaccent"sv, 0x013C },
+    { "ldot"sv, 0x0140 },
+    { "ldotaccent"sv, 0x0140 },
+    { "ldotbelow"sv, 0x1E37 },
+    { "ldotbelowmacron"sv, 0x1E39 },
+    { "leftangleabovecmb"sv, 0x031A },
+    { "lefttackbelowcmb"sv, 0x0318 },
+    { "less"sv, 0x003C },
+    { "lessequal"sv, 0x2264 },
+    { "lessequalorgreater"sv, 0x22DA },
+    { "lessmonospace"sv, 0xFF1C },
+    { "lessorequivalent"sv, 0x2272 },
+    { "lessorgreater"sv, 0x2276 },
+    { "lessoverequal"sv, 0x2266 },
+    { "lesssmall"sv, 0xFE64 },
+    { "lezh"sv, 0x026E },
+    { "lfblock"sv, 0x258C },
+    { "lhookretroflex"sv, 0x026D },
+    { "lira"sv, 0x20A4 },
+    { "liwnarmenian"sv, 0x056C },
+    { "lj"sv, 0x01C9 },
+    { "ljecyrillic"sv, 0x0459 },
+    { "ll"sv, 0xF6C0 },
+    { "lladeva"sv, 0x0933 },
+    { "llagujarati"sv, 0x0AB3 },
+    { "llinebelow"sv, 0x1E3B },
+    { "llladeva"sv, 0x0934 },
+    { "llvocalicbengali"sv, 0x09E1 },
+    { "llvocalicdeva"sv, 0x0961 },
+    { "llvocalicvowelsignbengali"sv, 0x09E3 },
+    { "llvocalicvowelsigndeva"sv, 0x0963 },
+    { "lmiddletilde"sv, 0x026B },
+    { "lmonospace"sv, 0xFF4C },
+    { "lmsquare"sv, 0x33D0 },
+    { "lochulathai"sv, 0x0E2C },
+    { "logicaland"sv, 0x2227 },
+    { "logicalnot"sv, 0x00AC },
+    { "logicalnotreversed"sv, 0x2310 },
+    { "logicalor"sv, 0x2228 },
+    { "lolingthai"sv, 0x0E25 },
+    { "longs"sv, 0x017F },
+    { "lowlinecenterline"sv, 0xFE4E },
+    { "lowlinecmb"sv, 0x0332 },
+    { "lowlinedashed"sv, 0xFE4D },
+    { "lozenge"sv, 0x25CA },
+    { "lparen"sv, 0x24A7 },
+    { "lslash"sv, 0x0142 },
+    { "lsquare"sv, 0x2113 },
+    { "lsuperior"sv, 0xF6EE },
+    { "ltshade"sv, 0x2591 },
+    { "luthai"sv, 0x0E26 },
+    { "lvocalicbengali"sv, 0x098C },
+    { "lvocalicdeva"sv, 0x090C },
+    { "lvocalicvowelsignbengali"sv, 0x09E2 },
+    { "lvocalicvowelsigndeva"sv, 0x0962 },
+    { "lxsquare"sv, 0x33D3 },
+    { "m"sv, 0x006D },
+    { "mabengali"sv, 0x09AE },
+    { "macron"sv, 0x00AF },
+    { "macronbelowcmb"sv, 0x0331 },
+    { "macroncmb"sv, 0x0304 },
+    { "macronlowmod"sv, 0x02CD },
+    { "macronmonospace"sv, 0xFFE3 },
+    { "macute"sv, 0x1E3F },
+    { "madeva"sv, 0x092E },
+    { "magujarati"sv, 0x0AAE },
+    { "magurmukhi"sv, 0x0A2E },
+    { "mahapakhhebrew"sv, 0x05A4 },
+    { "mahapakhlefthebrew"sv, 0x05A4 },
+    { "mahiragana"sv, 0x307E },
+    { "maichattawalowleftthai"sv, 0xF895 },
+    { "maichattawalowrightthai"sv, 0xF894 },
+    { "maichattawathai"sv, 0x0E4B },
+    { "maichattawaupperleftthai"sv, 0xF893 },
+    { "maieklowleftthai"sv, 0xF88C },
+    { "maieklowrightthai"sv, 0xF88B },
+    { "maiekthai"sv, 0x0E48 },
+    { "maiekupperleftthai"sv, 0xF88A },
+    { "maihanakatleftthai"sv, 0xF884 },
+    { "maihanakatthai"sv, 0x0E31 },
+    { "maitaikhuleftthai"sv, 0xF889 },
+    { "maitaikhuthai"sv, 0x0E47 },
+    { "maitholowleftthai"sv, 0xF88F },
+    { "maitholowrightthai"sv, 0xF88E },
+    { "maithothai"sv, 0x0E49 },
+    { "maithoupperleftthai"sv, 0xF88D },
+    { "maitrilowleftthai"sv, 0xF892 },
+    { "maitrilowrightthai"sv, 0xF891 },
+    { "maitrithai"sv, 0x0E4A },
+    { "maitriupperleftthai"sv, 0xF890 },
+    { "maiyamokthai"sv, 0x0E46 },
+    { "makatakana"sv, 0x30DE },
+    { "makatakanahalfwidth"sv, 0xFF8F },
+    { "male"sv, 0x2642 },
+    { "mansyonsquare"sv, 0x3347 },
+    { "maqafhebrew"sv, 0x05BE },
+    { "mars"sv, 0x2642 },
+    { "masoracirclehebrew"sv, 0x05AF },
+    { "masquare"sv, 0x3383 },
+    { "mbopomofo"sv, 0x3107 },
+    { "mbsquare"sv, 0x33D4 },
+    { "mcircle"sv, 0x24DC },
+    { "mcubedsquare"sv, 0x33A5 },
+    { "mdotaccent"sv, 0x1E41 },
+    { "mdotbelow"sv, 0x1E43 },
+    { "meemarabic"sv, 0x0645 },
+    { "meemfinalarabic"sv, 0xFEE2 },
+    { "meeminitialarabic"sv, 0xFEE3 },
+    { "meemmedialarabic"sv, 0xFEE4 },
+    { "meemmeeminitialarabic"sv, 0xFCD1 },
+    { "meemmeemisolatedarabic"sv, 0xFC48 },
+    { "meetorusquare"sv, 0x334D },
+    { "mehiragana"sv, 0x3081 },
+    { "meizierasquare"sv, 0x337E },
+    { "mekatakana"sv, 0x30E1 },
+    { "mekatakanahalfwidth"sv, 0xFF92 },
+    { "mem"sv, 0x05DE },
+    { "memdagesh"sv, 0xFB3E },
+    { "memdageshhebrew"sv, 0xFB3E },
+    { "memhebrew"sv, 0x05DE },
+    { "menarmenian"sv, 0x0574 },
+    { "merkhahebrew"sv, 0x05A5 },
+    { "merkhakefulahebrew"sv, 0x05A6 },
+    { "merkhakefulalefthebrew"sv, 0x05A6 },
+    { "merkhalefthebrew"sv, 0x05A5 },
+    { "mhook"sv, 0x0271 },
+    { "mhzsquare"sv, 0x3392 },
+    { "middledotkatakanahalfwidth"sv, 0xFF65 },
+    { "middot"sv, 0x00B7 },
+    { "mieumacirclekorean"sv, 0x3272 },
+    { "mieumaparenkorean"sv, 0x3212 },
+    { "mieumcirclekorean"sv, 0x3264 },
+    { "mieumkorean"sv, 0x3141 },
+    { "mieumpansioskorean"sv, 0x3170 },
+    { "mieumparenkorean"sv, 0x3204 },
+    { "mieumpieupkorean"sv, 0x316E },
+    { "mieumsioskorean"sv, 0x316F },
+    { "mihiragana"sv, 0x307F },
+    { "mikatakana"sv, 0x30DF },
+    { "mikatakanahalfwidth"sv, 0xFF90 },
+    { "minus"sv, 0x2212 },
+    { "minusbelowcmb"sv, 0x0320 },
+    { "minuscircle"sv, 0x2296 },
+    { "minusmod"sv, 0x02D7 },
+    { "minusplus"sv, 0x2213 },
+    { "minute"sv, 0x2032 },
+    { "miribaarusquare"sv, 0x334A },
+    { "mirisquare"sv, 0x3349 },
+    { "mlonglegturned"sv, 0x0270 },
+    { "mlsquare"sv, 0x3396 },
+    { "mmcubedsquare"sv, 0x33A3 },
+    { "mmonospace"sv, 0xFF4D },
+    { "mmsquaredsquare"sv, 0x339F },
+    { "mohiragana"sv, 0x3082 },
+    { "mohmsquare"sv, 0x33C1 },
+    { "mokatakana"sv, 0x30E2 },
+    { "mokatakanahalfwidth"sv, 0xFF93 },
+    { "molsquare"sv, 0x33D6 },
+    { "momathai"sv, 0x0E21 },
+    { "moverssquare"sv, 0x33A7 },
+    { "moverssquaredsquare"sv, 0x33A8 },
+    { "mparen"sv, 0x24A8 },
+    { "mpasquare"sv, 0x33AB },
+    { "mssquare"sv, 0x33B3 },
+    { "msuperior"sv, 0xF6EF },
+    { "mturned"sv, 0x026F },
+    { "mu"sv, 0x00B5 },
+    { "mu1"sv, 0x00B5 },
+    { "muasquare"sv, 0x3382 },
+    { "muchgreater"sv, 0x226B },
+    { "muchless"sv, 0x226A },
+    { "mufsquare"sv, 0x338C },
+    { "mugreek"sv, 0x03BC },
+    { "mugsquare"sv, 0x338D },
+    { "muhiragana"sv, 0x3080 },
+    { "mukatakana"sv, 0x30E0 },
+    { "mukatakanahalfwidth"sv, 0xFF91 },
+    { "mulsquare"sv, 0x3395 },
+    { "multiply"sv, 0x00D7 },
+    { "mumsquare"sv, 0x339B },
+    { "munahhebrew"sv, 0x05A3 },
+    { "munahlefthebrew"sv, 0x05A3 },
+    { "musicalnote"sv, 0x266A },
+    { "musicalnotedbl"sv, 0x266B },
+    { "musicflatsign"sv, 0x266D },
+    { "musicsharpsign"sv, 0x266F },
+    { "mussquare"sv, 0x33B2 },
+    { "muvsquare"sv, 0x33B6 },
+    { "muwsquare"sv, 0x33BC },
+    { "mvmegasquare"sv, 0x33B9 },
+    { "mvsquare"sv, 0x33B7 },
+    { "mwmegasquare"sv, 0x33BF },
+    { "mwsquare"sv, 0x33BD },
+    { "n"sv, 0x006E },
+    { "nabengali"sv, 0x09A8 },
+    { "nabla"sv, 0x2207 },
+    { "nacute"sv, 0x0144 },
+    { "nadeva"sv, 0x0928 },
+    { "nagujarati"sv, 0x0AA8 },
+    { "nagurmukhi"sv, 0x0A28 },
+    { "nahiragana"sv, 0x306A },
+    { "nakatakana"sv, 0x30CA },
+    { "nakatakanahalfwidth"sv, 0xFF85 },
+    { "napostrophe"sv, 0x0149 },
+    { "nasquare"sv, 0x3381 },
+    { "nbopomofo"sv, 0x310B },
+    { "nbspace"sv, 0x00A0 },
+    { "ncaron"sv, 0x0148 },
+    { "ncedilla"sv, 0x0146 },
+    { "ncircle"sv, 0x24DD },
+    { "ncircumflexbelow"sv, 0x1E4B },
+    { "ncommaaccent"sv, 0x0146 },
+    { "ndotaccent"sv, 0x1E45 },
+    { "ndotbelow"sv, 0x1E47 },
+    { "nehiragana"sv, 0x306D },
+    { "nekatakana"sv, 0x30CD },
+    { "nekatakanahalfwidth"sv, 0xFF88 },
+    { "newsheqelsign"sv, 0x20AA },
+    { "nfsquare"sv, 0x338B },
+    { "ngabengali"sv, 0x0999 },
+    { "ngadeva"sv, 0x0919 },
+    { "ngagujarati"sv, 0x0A99 },
+    { "ngagurmukhi"sv, 0x0A19 },
+    { "ngonguthai"sv, 0x0E07 },
+    { "nhiragana"sv, 0x3093 },
+    { "nhookleft"sv, 0x0272 },
+    { "nhookretroflex"sv, 0x0273 },
+    { "nieunacirclekorean"sv, 0x326F },
+    { "nieunaparenkorean"sv, 0x320F },
+    { "nieuncieuckorean"sv, 0x3135 },
+    { "nieuncirclekorean"sv, 0x3261 },
+    { "nieunhieuhkorean"sv, 0x3136 },
+    { "nieunkorean"sv, 0x3134 },
+    { "nieunpansioskorean"sv, 0x3168 },
+    { "nieunparenkorean"sv, 0x3201 },
+    { "nieunsioskorean"sv, 0x3167 },
+    { "nieuntikeutkorean"sv, 0x3166 },
+    { "nihiragana"sv, 0x306B },
+    { "nikatakana"sv, 0x30CB },
+    { "nikatakanahalfwidth"sv, 0xFF86 },
+    { "nikhahitleftthai"sv, 0xF899 },
+    { "nikhahitthai"sv, 0x0E4D },
+    { "nine"sv, 0x0039 },
+    { "ninearabic"sv, 0x0669 },
+    { "ninebengali"sv, 0x09EF },
+    { "ninecircle"sv, 0x2468 },
+    { "ninecircleinversesansserif"sv, 0x2792 },
+    { "ninedeva"sv, 0x096F },
+    { "ninegujarati"sv, 0x0AEF },
+    { "ninegurmukhi"sv, 0x0A6F },
+    { "ninehackarabic"sv, 0x0669 },
+    { "ninehangzhou"sv, 0x3029 },
+    { "nineideographicparen"sv, 0x3228 },
+    { "nineinferior"sv, 0x2089 },
+    { "ninemonospace"sv, 0xFF19 },
+    { "nineoldstyle"sv, 0xF739 },
+    { "nineparen"sv, 0x247C },
+    { "nineperiod"sv, 0x2490 },
+    { "ninepersian"sv, 0x06F9 },
+    { "nineroman"sv, 0x2178 },
+    { "ninesuperior"sv, 0x2079 },
+    { "nineteencircle"sv, 0x2472 },
+    { "nineteenparen"sv, 0x2486 },
+    { "nineteenperiod"sv, 0x249A },
+    { "ninethai"sv, 0x0E59 },
+    { "nj"sv, 0x01CC },
+    { "njecyrillic"sv, 0x045A },
+    { "nkatakana"sv, 0x30F3 },
+    { "nkatakanahalfwidth"sv, 0xFF9D },
+    { "nlegrightlong"sv, 0x019E },
+    { "nlinebelow"sv, 0x1E49 },
+    { "nmonospace"sv, 0xFF4E },
+    { "nmsquare"sv, 0x339A },
+    { "nnabengali"sv, 0x09A3 },
+    { "nnadeva"sv, 0x0923 },
+    { "nnagujarati"sv, 0x0AA3 },
+    { "nnagurmukhi"sv, 0x0A23 },
+    { "nnnadeva"sv, 0x0929 },
+    { "nohiragana"sv, 0x306E },
+    { "nokatakana"sv, 0x30CE },
+    { "nokatakanahalfwidth"sv, 0xFF89 },
+    { "nonbreakingspace"sv, 0x00A0 },
+    { "nonenthai"sv, 0x0E13 },
+    { "nonuthai"sv, 0x0E19 },
+    { "noonarabic"sv, 0x0646 },
+    { "noonfinalarabic"sv, 0xFEE6 },
+    { "noonghunnaarabic"sv, 0x06BA },
+    { "noonghunnafinalarabic"sv, 0xFB9F },
+    { "nooninitialarabic"sv, 0xFEE7 },
+    { "noonjeeminitialarabic"sv, 0xFCD2 },
+    { "noonjeemisolatedarabic"sv, 0xFC4B },
+    { "noonmedialarabic"sv, 0xFEE8 },
+    { "noonmeeminitialarabic"sv, 0xFCD5 },
+    { "noonmeemisolatedarabic"sv, 0xFC4E },
+    { "noonnoonfinalarabic"sv, 0xFC8D },
+    { "notcontains"sv, 0x220C },
+    { "notelement"sv, 0x2209 },
+    { "notelementof"sv, 0x2209 },
+    { "notequal"sv, 0x2260 },
+    { "notgreater"sv, 0x226F },
+    { "notgreaternorequal"sv, 0x2271 },
+    { "notgreaternorless"sv, 0x2279 },
+    { "notidentical"sv, 0x2262 },
+    { "notless"sv, 0x226E },
+    { "notlessnorequal"sv, 0x2270 },
+    { "notparallel"sv, 0x2226 },
+    { "notprecedes"sv, 0x2280 },
+    { "notsubset"sv, 0x2284 },
+    { "notsucceeds"sv, 0x2281 },
+    { "notsuperset"sv, 0x2285 },
+    { "nowarmenian"sv, 0x0576 },
+    { "nparen"sv, 0x24A9 },
+    { "nssquare"sv, 0x33B1 },
+    { "nsuperior"sv, 0x207F },
+    { "ntilde"sv, 0x00F1 },
+    { "nu"sv, 0x03BD },
+    { "nuhiragana"sv, 0x306C },
+    { "nukatakana"sv, 0x30CC },
+    { "nukatakanahalfwidth"sv, 0xFF87 },
+    { "nuktabengali"sv, 0x09BC },
+    { "nuktadeva"sv, 0x093C },
+    { "nuktagujarati"sv, 0x0ABC },
+    { "nuktagurmukhi"sv, 0x0A3C },
+    { "numbersign"sv, 0x0023 },
+    { "numbersignmonospace"sv, 0xFF03 },
+    { "numbersignsmall"sv, 0xFE5F },
+    { "numeralsigngreek"sv, 0x0374 },
+    { "numeralsignlowergreek"sv, 0x0375 },
+    { "numero"sv, 0x2116 },
+    { "nun"sv, 0x05E0 },
+    { "nundagesh"sv, 0xFB40 },
+    { "nundageshhebrew"sv, 0xFB40 },
+    { "nunhebrew"sv, 0x05E0 },
+    { "nvsquare"sv, 0x33B5 },
+    { "nwsquare"sv, 0x33BB },
+    { "nyabengali"sv, 0x099E },
+    { "nyadeva"sv, 0x091E },
+    { "nyagujarati"sv, 0x0A9E },
+    { "nyagurmukhi"sv, 0x0A1E },
+    { "o"sv, 0x006F },
+    { "oacute"sv, 0x00F3 },
+    { "oangthai"sv, 0x0E2D },
+    { "obarred"sv, 0x0275 },
+    { "obarredcyrillic"sv, 0x04E9 },
+    { "obarreddieresiscyrillic"sv, 0x04EB },
+    { "obengali"sv, 0x0993 },
+    { "obopomofo"sv, 0x311B },
+    { "obreve"sv, 0x014F },
+    { "ocandradeva"sv, 0x0911 },
+    { "ocandragujarati"sv, 0x0A91 },
+    { "ocandravowelsigndeva"sv, 0x0949 },
+    { "ocandravowelsigngujarati"sv, 0x0AC9 },
+    { "ocaron"sv, 0x01D2 },
+    { "ocircle"sv, 0x24DE },
+    { "ocircumflex"sv, 0x00F4 },
+    { "ocircumflexacute"sv, 0x1ED1 },
+    { "ocircumflexdotbelow"sv, 0x1ED9 },
+    { "ocircumflexgrave"sv, 0x1ED3 },
+    { "ocircumflexhookabove"sv, 0x1ED5 },
+    { "ocircumflextilde"sv, 0x1ED7 },
+    { "ocyrillic"sv, 0x043E },
+    { "odblacute"sv, 0x0151 },
+    { "odblgrave"sv, 0x020D },
+    { "odeva"sv, 0x0913 },
+    { "odieresis"sv, 0x00F6 },
+    { "odieresiscyrillic"sv, 0x04E7 },
+    { "odotbelow"sv, 0x1ECD },
+    { "oe"sv, 0x0153 },
+    { "oekorean"sv, 0x315A },
+    { "ogonek"sv, 0x02DB },
+    { "ogonekcmb"sv, 0x0328 },
+    { "ograve"sv, 0x00F2 },
+    { "ogujarati"sv, 0x0A93 },
+    { "oharmenian"sv, 0x0585 },
+    { "ohiragana"sv, 0x304A },
+    { "ohookabove"sv, 0x1ECF },
+    { "ohorn"sv, 0x01A1 },
+    { "ohornacute"sv, 0x1EDB },
+    { "ohorndotbelow"sv, 0x1EE3 },
+    { "ohorngrave"sv, 0x1EDD },
+    { "ohornhookabove"sv, 0x1EDF },
+    { "ohorntilde"sv, 0x1EE1 },
+    { "ohungarumlaut"sv, 0x0151 },
+    { "oi"sv, 0x01A3 },
+    { "oinvertedbreve"sv, 0x020F },
+    { "okatakana"sv, 0x30AA },
+    { "okatakanahalfwidth"sv, 0xFF75 },
+    { "okorean"sv, 0x3157 },
+    { "olehebrew"sv, 0x05AB },
+    { "omacron"sv, 0x014D },
+    { "omacronacute"sv, 0x1E53 },
+    { "omacrongrave"sv, 0x1E51 },
+    { "omdeva"sv, 0x0950 },
+    { "omega"sv, 0x03C9 },
+    { "omega1"sv, 0x03D6 },
+    { "omegacyrillic"sv, 0x0461 },
+    { "omegalatinclosed"sv, 0x0277 },
+    { "omegaroundcyrillic"sv, 0x047B },
+    { "omegatitlocyrillic"sv, 0x047D },
+    { "omegatonos"sv, 0x03CE },
+    { "omgujarati"sv, 0x0AD0 },
+    { "omicron"sv, 0x03BF },
+    { "omicrontonos"sv, 0x03CC },
+    { "omonospace"sv, 0xFF4F },
+    { "one"sv, 0x0031 },
+    { "onearabic"sv, 0x0661 },
+    { "onebengali"sv, 0x09E7 },
+    { "onecircle"sv, 0x2460 },
+    { "onecircleinversesansserif"sv, 0x278A },
+    { "onedeva"sv, 0x0967 },
+    { "onedotenleader"sv, 0x2024 },
+    { "oneeighth"sv, 0x215B },
+    { "onefitted"sv, 0xF6DC },
+    { "onegujarati"sv, 0x0AE7 },
+    { "onegurmukhi"sv, 0x0A67 },
+    { "onehackarabic"sv, 0x0661 },
+    { "onehalf"sv, 0x00BD },
+    { "onehangzhou"sv, 0x3021 },
+    { "oneideographicparen"sv, 0x3220 },
+    { "oneinferior"sv, 0x2081 },
+    { "onemonospace"sv, 0xFF11 },
+    { "onenumeratorbengali"sv, 0x09F4 },
+    { "oneoldstyle"sv, 0xF731 },
+    { "oneparen"sv, 0x2474 },
+    { "oneperiod"sv, 0x2488 },
+    { "onepersian"sv, 0x06F1 },
+    { "onequarter"sv, 0x00BC },
+    { "oneroman"sv, 0x2170 },
+    { "onesuperior"sv, 0x00B9 },
+    { "onethai"sv, 0x0E51 },
+    { "onethird"sv, 0x2153 },
+    { "oogonek"sv, 0x01EB },
+    { "oogonekmacron"sv, 0x01ED },
+    { "oogurmukhi"sv, 0x0A13 },
+    { "oomatragurmukhi"sv, 0x0A4B },
+    { "oopen"sv, 0x0254 },
+    { "oparen"sv, 0x24AA },
+    { "openbullet"sv, 0x25E6 },
+    { "option"sv, 0x2325 },
+    { "ordfeminine"sv, 0x00AA },
+    { "ordmasculine"sv, 0x00BA },
+    { "orthogonal"sv, 0x221F },
+    { "oshortdeva"sv, 0x0912 },
+    { "oshortvowelsigndeva"sv, 0x094A },
+    { "oslash"sv, 0x00F8 },
+    { "oslashacute"sv, 0x01FF },
+    { "osmallhiragana"sv, 0x3049 },
+    { "osmallkatakana"sv, 0x30A9 },
+    { "osmallkatakanahalfwidth"sv, 0xFF6B },
+    { "ostrokeacute"sv, 0x01FF },
+    { "osuperior"sv, 0xF6F0 },
+    { "otcyrillic"sv, 0x047F },
+    { "otilde"sv, 0x00F5 },
+    { "otildeacute"sv, 0x1E4D },
+    { "otildedieresis"sv, 0x1E4F },
+    { "oubopomofo"sv, 0x3121 },
+    { "overline"sv, 0x203E },
+    { "overlinecenterline"sv, 0xFE4A },
+    { "overlinecmb"sv, 0x0305 },
+    { "overlinedashed"sv, 0xFE49 },
+    { "overlinedblwavy"sv, 0xFE4C },
+    { "overlinewavy"sv, 0xFE4B },
+    { "overscore"sv, 0x00AF },
+    { "ovowelsignbengali"sv, 0x09CB },
+    { "ovowelsigndeva"sv, 0x094B },
+    { "ovowelsigngujarati"sv, 0x0ACB },
+    { "p"sv, 0x0070 },
+    { "paampssquare"sv, 0x3380 },
+    { "paasentosquare"sv, 0x332B },
+    { "pabengali"sv, 0x09AA },
+    { "pacute"sv, 0x1E55 },
+    { "padeva"sv, 0x092A },
+    { "pagedown"sv, 0x21DF },
+    { "pageup"sv, 0x21DE },
+    { "pagujarati"sv, 0x0AAA },
+    { "pagurmukhi"sv, 0x0A2A },
+    { "pahiragana"sv, 0x3071 },
+    { "paiyannoithai"sv, 0x0E2F },
+    { "pakatakana"sv, 0x30D1 },
+    { "palatalizationcyrilliccmb"sv, 0x0484 },
+    { "palochkacyrillic"sv, 0x04C0 },
+    { "pansioskorean"sv, 0x317F },
+    { "paragraph"sv, 0x00B6 },
+    { "parallel"sv, 0x2225 },
+    { "parenleft"sv, 0x0028 },
+    { "parenleftaltonearabic"sv, 0xFD3E },
+    { "parenleftbt"sv, 0xF8ED },
+    { "parenleftex"sv, 0xF8EC },
+    { "parenleftinferior"sv, 0x208D },
+    { "parenleftmonospace"sv, 0xFF08 },
+    { "parenleftsmall"sv, 0xFE59 },
+    { "parenleftsuperior"sv, 0x207D },
+    { "parenlefttp"sv, 0xF8EB },
+    { "parenleftvertical"sv, 0xFE35 },
+    { "parenright"sv, 0x0029 },
+    { "parenrightaltonearabic"sv, 0xFD3F },
+    { "parenrightbt"sv, 0xF8F8 },
+    { "parenrightex"sv, 0xF8F7 },
+    { "parenrightinferior"sv, 0x208E },
+    { "parenrightmonospace"sv, 0xFF09 },
+    { "parenrightsmall"sv, 0xFE5A },
+    { "parenrightsuperior"sv, 0x207E },
+    { "parenrighttp"sv, 0xF8F6 },
+    { "parenrightvertical"sv, 0xFE36 },
+    { "partialdiff"sv, 0x2202 },
+    { "paseqhebrew"sv, 0x05C0 },
+    { "pashtahebrew"sv, 0x0599 },
+    { "pasquare"sv, 0x33A9 },
+    { "patah"sv, 0x05B7 },
+    { "patah11"sv, 0x05B7 },
+    { "patah1d"sv, 0x05B7 },
+    { "patah2a"sv, 0x05B7 },
+    { "patahhebrew"sv, 0x05B7 },
+    { "patahnarrowhebrew"sv, 0x05B7 },
+    { "patahquarterhebrew"sv, 0x05B7 },
+    { "patahwidehebrew"sv, 0x05B7 },
+    { "pazerhebrew"sv, 0x05A1 },
+    { "pbopomofo"sv, 0x3106 },
+    { "pcircle"sv, 0x24DF },
+    { "pdotaccent"sv, 0x1E57 },
+    { "pe"sv, 0x05E4 },
+    { "pecyrillic"sv, 0x043F },
+    { "pedagesh"sv, 0xFB44 },
+    { "pedageshhebrew"sv, 0xFB44 },
+    { "peezisquare"sv, 0x333B },
+    { "pefinaldageshhebrew"sv, 0xFB43 },
+    { "peharabic"sv, 0x067E },
+    { "peharmenian"sv, 0x057A },
+    { "pehebrew"sv, 0x05E4 },
+    { "pehfinalarabic"sv, 0xFB57 },
+    { "pehinitialarabic"sv, 0xFB58 },
+    { "pehiragana"sv, 0x307A },
+    { "pehmedialarabic"sv, 0xFB59 },
+    { "pekatakana"sv, 0x30DA },
+    { "pemiddlehookcyrillic"sv, 0x04A7 },
+    { "perafehebrew"sv, 0xFB4E },
+    { "percent"sv, 0x0025 },
+    { "percentarabic"sv, 0x066A },
+    { "percentmonospace"sv, 0xFF05 },
+    { "percentsmall"sv, 0xFE6A },
+    { "period"sv, 0x002E },
+    { "periodarmenian"sv, 0x0589 },
+    { "periodcentered"sv, 0x00B7 },
+    { "periodhalfwidth"sv, 0xFF61 },
+    { "periodinferior"sv, 0xF6E7 },
+    { "periodmonospace"sv, 0xFF0E },
+    { "periodsmall"sv, 0xFE52 },
+    { "periodsuperior"sv, 0xF6E8 },
+    { "perispomenigreekcmb"sv, 0x0342 },
+    { "perpendicular"sv, 0x22A5 },
+    { "perthousand"sv, 0x2030 },
+    { "peseta"sv, 0x20A7 },
+    { "pfsquare"sv, 0x338A },
+    { "phabengali"sv, 0x09AB },
+    { "phadeva"sv, 0x092B },
+    { "phagujarati"sv, 0x0AAB },
+    { "phagurmukhi"sv, 0x0A2B },
+    { "phi"sv, 0x03C6 },
+    { "phi1"sv, 0x03D5 },
+    { "phieuphacirclekorean"sv, 0x327A },
+    { "phieuphaparenkorean"sv, 0x321A },
+    { "phieuphcirclekorean"sv, 0x326C },
+    { "phieuphkorean"sv, 0x314D },
+    { "phieuphparenkorean"sv, 0x320C },
+    { "philatin"sv, 0x0278 },
+    { "phinthuthai"sv, 0x0E3A },
+    { "phisymbolgreek"sv, 0x03D5 },
+    { "phook"sv, 0x01A5 },
+    { "phophanthai"sv, 0x0E1E },
+    { "phophungthai"sv, 0x0E1C },
+    { "phosamphaothai"sv, 0x0E20 },
+    { "pi"sv, 0x03C0 },
+    { "pieupacirclekorean"sv, 0x3273 },
+    { "pieupaparenkorean"sv, 0x3213 },
+    { "pieupcieuckorean"sv, 0x3176 },
+    { "pieupcirclekorean"sv, 0x3265 },
+    { "pieupkiyeokkorean"sv, 0x3172 },
+    { "pieupkorean"sv, 0x3142 },
+    { "pieupparenkorean"sv, 0x3205 },
+    { "pieupsioskiyeokkorean"sv, 0x3174 },
+    { "pieupsioskorean"sv, 0x3144 },
+    { "pieupsiostikeutkorean"sv, 0x3175 },
+    { "pieupthieuthkorean"sv, 0x3177 },
+    { "pieuptikeutkorean"sv, 0x3173 },
+    { "pihiragana"sv, 0x3074 },
+    { "pikatakana"sv, 0x30D4 },
+    { "pisymbolgreek"sv, 0x03D6 },
+    { "piwrarmenian"sv, 0x0583 },
+    { "plus"sv, 0x002B },
+    { "plusbelowcmb"sv, 0x031F },
+    { "pluscircle"sv, 0x2295 },
+    { "plusminus"sv, 0x00B1 },
+    { "plusmod"sv, 0x02D6 },
+    { "plusmonospace"sv, 0xFF0B },
+    { "plussmall"sv, 0xFE62 },
+    { "plussuperior"sv, 0x207A },
+    { "pmonospace"sv, 0xFF50 },
+    { "pmsquare"sv, 0x33D8 },
+    { "pohiragana"sv, 0x307D },
+    { "pointingindexdownwhite"sv, 0x261F },
+    { "pointingindexleftwhite"sv, 0x261C },
+    { "pointingindexrightwhite"sv, 0x261E },
+    { "pointingindexupwhite"sv, 0x261D },
+    { "pokatakana"sv, 0x30DD },
+    { "poplathai"sv, 0x0E1B },
+    { "postalmark"sv, 0x3012 },
+    { "postalmarkface"sv, 0x3020 },
+    { "pparen"sv, 0x24AB },
+    { "precedes"sv, 0x227A },
+    { "prescription"sv, 0x211E },
+    { "primemod"sv, 0x02B9 },
+    { "primereversed"sv, 0x2035 },
+    { "product"sv, 0x220F },
+    { "projective"sv, 0x2305 },
+    { "prolongedkana"sv, 0x30FC },
+    { "propellor"sv, 0x2318 },
+    { "propersubset"sv, 0x2282 },
+    { "propersuperset"sv, 0x2283 },
+    { "proportion"sv, 0x2237 },
+    { "proportional"sv, 0x221D },
+    { "psi"sv, 0x03C8 },
+    { "psicyrillic"sv, 0x0471 },
+    { "psilipneumatacyrilliccmb"sv, 0x0486 },
+    { "pssquare"sv, 0x33B0 },
+    { "puhiragana"sv, 0x3077 },
+    { "pukatakana"sv, 0x30D7 },
+    { "pvsquare"sv, 0x33B4 },
+    { "pwsquare"sv, 0x33BA },
+    { "q"sv, 0x0071 },
+    { "qadeva"sv, 0x0958 },
+    { "qadmahebrew"sv, 0x05A8 },
+    { "qafarabic"sv, 0x0642 },
+    { "qaffinalarabic"sv, 0xFED6 },
+    { "qafinitialarabic"sv, 0xFED7 },
+    { "qafmedialarabic"sv, 0xFED8 },
+    { "qamats"sv, 0x05B8 },
+    { "qamats10"sv, 0x05B8 },
+    { "qamats1a"sv, 0x05B8 },
+    { "qamats1c"sv, 0x05B8 },
+    { "qamats27"sv, 0x05B8 },
+    { "qamats29"sv, 0x05B8 },
+    { "qamats33"sv, 0x05B8 },
+    { "qamatsde"sv, 0x05B8 },
+    { "qamatshebrew"sv, 0x05B8 },
+    { "qamatsnarrowhebrew"sv, 0x05B8 },
+    { "qamatsqatanhebrew"sv, 0x05B8 },
+    { "qamatsqatannarrowhebrew"sv, 0x05B8 },
+    { "qamatsqatanquarterhebrew"sv, 0x05B8 },
+    { "qamatsqatanwidehebrew"sv, 0x05B8 },
+    { "qamatsquarterhebrew"sv, 0x05B8 },
+    { "qamatswidehebrew"sv, 0x05B8 },
+    { "qarneyparahebrew"sv, 0x059F },
+    { "qbopomofo"sv, 0x3111 },
+    { "qcircle"sv, 0x24E0 },
+    { "qhook"sv, 0x02A0 },
+    { "qmonospace"sv, 0xFF51 },
+    { "qof"sv, 0x05E7 },
+    { "qofdagesh"sv, 0xFB47 },
+    { "qofdageshhebrew"sv, 0xFB47 },
+    { "qofhebrew"sv, 0x05E7 },
+    { "qparen"sv, 0x24AC },
+    { "quarternote"sv, 0x2669 },
+    { "qubuts"sv, 0x05BB },
+    { "qubuts18"sv, 0x05BB },
+    { "qubuts25"sv, 0x05BB },
+    { "qubuts31"sv, 0x05BB },
+    { "qubutshebrew"sv, 0x05BB },
+    { "qubutsnarrowhebrew"sv, 0x05BB },
+    { "qubutsquarterhebrew"sv, 0x05BB },
+    { "qubutswidehebrew"sv, 0x05BB },
+    { "question"sv, 0x003F },
+    { "questionarabic"sv, 0x061F },
+    { "questionarmenian"sv, 0x055E },
+    { "questiondown"sv, 0x00BF },
+    { "questiondownsmall"sv, 0xF7BF },
+    { "questiongreek"sv, 0x037E },
+    { "questionmonospace"sv, 0xFF1F },
+    { "questionsmall"sv, 0xF73F },
+    { "quotedbl"sv, 0x0022 },
+    { "quotedblbase"sv, 0x201E },
+    { "quotedblleft"sv, 0x201C },
+    { "quotedblmonospace"sv, 0xFF02 },
+    { "quotedblprime"sv, 0x301E },
+    { "quotedblprimereversed"sv, 0x301D },
+    { "quotedblright"sv, 0x201D },
+    { "quoteleft"sv, 0x2018 },
+    { "quoteleftreversed"sv, 0x201B },
+    { "quotereversed"sv, 0x201B },
+    { "quoteright"sv, 0x2019 },
+    { "quoterightn"sv, 0x0149 },
+    { "quotesinglbase"sv, 0x201A },
+    { "quotesingle"sv, 0x0027 },
+    { "quotesinglemonospace"sv, 0xFF07 },
+    { "r"sv, 0x0072 },
+    { "raarmenian"sv, 0x057C },
+    { "rabengali"sv, 0x09B0 },
+    { "racute"sv, 0x0155 },
+    { "radeva"sv, 0x0930 },
+    { "radical"sv, 0x221A },
+    { "radicalex"sv, 0xF8E5 },
+    { "radoverssquare"sv, 0x33AE },
+    { "radoverssquaredsquare"sv, 0x33AF },
+    { "radsquare"sv, 0x33AD },
+    { "rafe"sv, 0x05BF },
+    { "rafehebrew"sv, 0x05BF },
+    { "ragujarati"sv, 0x0AB0 },
+    { "ragurmukhi"sv, 0x0A30 },
+    { "rahiragana"sv, 0x3089 },
+    { "rakatakana"sv, 0x30E9 },
+    { "rakatakanahalfwidth"sv, 0xFF97 },
+    { "ralowerdiagonalbengali"sv, 0x09F1 },
+    { "ramiddlediagonalbengali"sv, 0x09F0 },
+    { "ramshorn"sv, 0x0264 },
+    { "ratio"sv, 0x2236 },
+    { "rbopomofo"sv, 0x3116 },
+    { "rcaron"sv, 0x0159 },
+    { "rcedilla"sv, 0x0157 },
+    { "rcircle"sv, 0x24E1 },
+    { "rcommaaccent"sv, 0x0157 },
+    { "rdblgrave"sv, 0x0211 },
+    { "rdotaccent"sv, 0x1E59 },
+    { "rdotbelow"sv, 0x1E5B },
+    { "rdotbelowmacron"sv, 0x1E5D },
+    { "referencemark"sv, 0x203B },
+    { "reflexsubset"sv, 0x2286 },
+    { "reflexsuperset"sv, 0x2287 },
+    { "registered"sv, 0x00AE },
+    { "registersans"sv, 0xF8E8 },
+    { "registerserif"sv, 0xF6DA },
+    { "reharabic"sv, 0x0631 },
+    { "reharmenian"sv, 0x0580 },
+    { "rehfinalarabic"sv, 0xFEAE },
+    { "rehiragana"sv, 0x308C },
+    { "rekatakana"sv, 0x30EC },
+    { "rekatakanahalfwidth"sv, 0xFF9A },
+    { "resh"sv, 0x05E8 },
+    { "reshdageshhebrew"sv, 0xFB48 },
+    { "reshhebrew"sv, 0x05E8 },
+    { "reversedtilde"sv, 0x223D },
+    { "reviahebrew"sv, 0x0597 },
+    { "reviamugrashhebrew"sv, 0x0597 },
+    { "revlogicalnot"sv, 0x2310 },
+    { "rfishhook"sv, 0x027E },
+    { "rfishhookreversed"sv, 0x027F },
+    { "rhabengali"sv, 0x09DD },
+    { "rhadeva"sv, 0x095D },
+    { "rho"sv, 0x03C1 },
+    { "rhook"sv, 0x027D },
+    { "rhookturned"sv, 0x027B },
+    { "rhookturnedsuperior"sv, 0x02B5 },
+    { "rhosymbolgreek"sv, 0x03F1 },
+    { "rhotichookmod"sv, 0x02DE },
+    { "rieulacirclekorean"sv, 0x3271 },
+    { "rieulaparenkorean"sv, 0x3211 },
+    { "rieulcirclekorean"sv, 0x3263 },
+    { "rieulhieuhkorean"sv, 0x3140 },
+    { "rieulkiyeokkorean"sv, 0x313A },
+    { "rieulkiyeoksioskorean"sv, 0x3169 },
+    { "rieulkorean"sv, 0x3139 },
+    { "rieulmieumkorean"sv, 0x313B },
+    { "rieulpansioskorean"sv, 0x316C },
+    { "rieulparenkorean"sv, 0x3203 },
+    { "rieulphieuphkorean"sv, 0x313F },
+    { "rieulpieupkorean"sv, 0x313C },
+    { "rieulpieupsioskorean"sv, 0x316B },
+    { "rieulsioskorean"sv, 0x313D },
+    { "rieulthieuthkorean"sv, 0x313E },
+    { "rieultikeutkorean"sv, 0x316A },
+    { "rieulyeorinhieuhkorean"sv, 0x316D },
+    { "rightangle"sv, 0x221F },
+    { "righttackbelowcmb"sv, 0x0319 },
+    { "righttriangle"sv, 0x22BF },
+    { "rihiragana"sv, 0x308A },
+    { "rikatakana"sv, 0x30EA },
+    { "rikatakanahalfwidth"sv, 0xFF98 },
+    { "ring"sv, 0x02DA },
+    { "ringbelowcmb"sv, 0x0325 },
+    { "ringcmb"sv, 0x030A },
+    { "ringhalfleft"sv, 0x02BF },
+    { "ringhalfleftarmenian"sv, 0x0559 },
+    { "ringhalfleftbelowcmb"sv, 0x031C },
+    { "ringhalfleftcentered"sv, 0x02D3 },
+    { "ringhalfright"sv, 0x02BE },
+    { "ringhalfrightbelowcmb"sv, 0x0339 },
+    { "ringhalfrightcentered"sv, 0x02D2 },
+    { "rinvertedbreve"sv, 0x0213 },
+    { "rittorusquare"sv, 0x3351 },
+    { "rlinebelow"sv, 0x1E5F },
+    { "rlongleg"sv, 0x027C },
+    { "rlonglegturned"sv, 0x027A },
+    { "rmonospace"sv, 0xFF52 },
+    { "rohiragana"sv, 0x308D },
+    { "rokatakana"sv, 0x30ED },
+    { "rokatakanahalfwidth"sv, 0xFF9B },
+    { "roruathai"sv, 0x0E23 },
+    { "rparen"sv, 0x24AD },
+    { "rrabengali"sv, 0x09DC },
+    { "rradeva"sv, 0x0931 },
+    { "rragurmukhi"sv, 0x0A5C },
+    { "rreharabic"sv, 0x0691 },
+    { "rrehfinalarabic"sv, 0xFB8D },
+    { "rrvocalicbengali"sv, 0x09E0 },
+    { "rrvocalicdeva"sv, 0x0960 },
+    { "rrvocalicgujarati"sv, 0x0AE0 },
+    { "rrvocalicvowelsignbengali"sv, 0x09C4 },
+    { "rrvocalicvowelsigndeva"sv, 0x0944 },
+    { "rrvocalicvowelsigngujarati"sv, 0x0AC4 },
+    { "rsuperior"sv, 0xF6F1 },
+    { "rtblock"sv, 0x2590 },
+    { "rturned"sv, 0x0279 },
+    { "rturnedsuperior"sv, 0x02B4 },
+    { "ruhiragana"sv, 0x308B },
+    { "rukatakana"sv, 0x30EB },
+    { "rukatakanahalfwidth"sv, 0xFF99 },
+    { "rupeemarkbengali"sv, 0x09F2 },
+    { "rupeesignbengali"sv, 0x09F3 },
+    { "rupiah"sv, 0xF6DD },
+    { "ruthai"sv, 0x0E24 },
+    { "rvocalicbengali"sv, 0x098B },
+    { "rvocalicdeva"sv, 0x090B },
+    { "rvocalicgujarati"sv, 0x0A8B },
+    { "rvocalicvowelsignbengali"sv, 0x09C3 },
+    { "rvocalicvowelsigndeva"sv, 0x0943 },
+    { "rvocalicvowelsigngujarati"sv, 0x0AC3 },
+    { "s"sv, 0x0073 },
+    { "sabengali"sv, 0x09B8 },
+    { "sacute"sv, 0x015B },
+    { "sacutedotaccent"sv, 0x1E65 },
+    { "sadarabic"sv, 0x0635 },
+    { "sadeva"sv, 0x0938 },
+    { "sadfinalarabic"sv, 0xFEBA },
+    { "sadinitialarabic"sv, 0xFEBB },
+    { "sadmedialarabic"sv, 0xFEBC },
+    { "sagujarati"sv, 0x0AB8 },
+    { "sagurmukhi"sv, 0x0A38 },
+    { "sahiragana"sv, 0x3055 },
+    { "sakatakana"sv, 0x30B5 },
+    { "sakatakanahalfwidth"sv, 0xFF7B },
+    { "sallallahoualayhewasallamarabic"sv, 0xFDFA },
+    { "samekh"sv, 0x05E1 },
+    { "samekhdagesh"sv, 0xFB41 },
+    { "samekhdageshhebrew"sv, 0xFB41 },
+    { "samekhhebrew"sv, 0x05E1 },
+    { "saraaathai"sv, 0x0E32 },
+    { "saraaethai"sv, 0x0E41 },
+    { "saraaimaimalaithai"sv, 0x0E44 },
+    { "saraaimaimuanthai"sv, 0x0E43 },
+    { "saraamthai"sv, 0x0E33 },
+    { "saraathai"sv, 0x0E30 },
+    { "saraethai"sv, 0x0E40 },
+    { "saraiileftthai"sv, 0xF886 },
+    { "saraiithai"sv, 0x0E35 },
+    { "saraileftthai"sv, 0xF885 },
+    { "saraithai"sv, 0x0E34 },
+    { "saraothai"sv, 0x0E42 },
+    { "saraueeleftthai"sv, 0xF888 },
+    { "saraueethai"sv, 0x0E37 },
+    { "saraueleftthai"sv, 0xF887 },
+    { "sarauethai"sv, 0x0E36 },
+    { "sarauthai"sv, 0x0E38 },
+    { "sarauuthai"sv, 0x0E39 },
+    { "sbopomofo"sv, 0x3119 },
+    { "scaron"sv, 0x0161 },
+    { "scarondotaccent"sv, 0x1E67 },
+    { "scedilla"sv, 0x015F },
+    { "schwa"sv, 0x0259 },
+    { "schwacyrillic"sv, 0x04D9 },
+    { "schwadieresiscyrillic"sv, 0x04DB },
+    { "schwahook"sv, 0x025A },
+    { "scircle"sv, 0x24E2 },
+    { "scircumflex"sv, 0x015D },
+    { "scommaaccent"sv, 0x0219 },
+    { "sdotaccent"sv, 0x1E61 },
+    { "sdotbelow"sv, 0x1E63 },
+    { "sdotbelowdotaccent"sv, 0x1E69 },
+    { "seagullbelowcmb"sv, 0x033C },
+    { "second"sv, 0x2033 },
+    { "secondtonechinese"sv, 0x02CA },
+    { "section"sv, 0x00A7 },
+    { "seenarabic"sv, 0x0633 },
+    { "seenfinalarabic"sv, 0xFEB2 },
+    { "seeninitialarabic"sv, 0xFEB3 },
+    { "seenmedialarabic"sv, 0xFEB4 },
+    { "segol"sv, 0x05B6 },
+    { "segol13"sv, 0x05B6 },
+    { "segol1f"sv, 0x05B6 },
+    { "segol2c"sv, 0x05B6 },
+    { "segolhebrew"sv, 0x05B6 },
+    { "segolnarrowhebrew"sv, 0x05B6 },
+    { "segolquarterhebrew"sv, 0x05B6 },
+    { "segoltahebrew"sv, 0x0592 },
+    { "segolwidehebrew"sv, 0x05B6 },
+    { "seharmenian"sv, 0x057D },
+    { "sehiragana"sv, 0x305B },
+    { "sekatakana"sv, 0x30BB },
+    { "sekatakanahalfwidth"sv, 0xFF7E },
+    { "semicolon"sv, 0x003B },
+    { "semicolonarabic"sv, 0x061B },
+    { "semicolonmonospace"sv, 0xFF1B },
+    { "semicolonsmall"sv, 0xFE54 },
+    { "semivoicedmarkkana"sv, 0x309C },
+    { "semivoicedmarkkanahalfwidth"sv, 0xFF9F },
+    { "sentisquare"sv, 0x3322 },
+    { "sentosquare"sv, 0x3323 },
+    { "seven"sv, 0x0037 },
+    { "sevenarabic"sv, 0x0667 },
+    { "sevenbengali"sv, 0x09ED },
+    { "sevencircle"sv, 0x2466 },
+    { "sevencircleinversesansserif"sv, 0x2790 },
+    { "sevendeva"sv, 0x096D },
+    { "seveneighths"sv, 0x215E },
+    { "sevengujarati"sv, 0x0AED },
+    { "sevengurmukhi"sv, 0x0A6D },
+    { "sevenhackarabic"sv, 0x0667 },
+    { "sevenhangzhou"sv, 0x3027 },
+    { "sevenideographicparen"sv, 0x3226 },
+    { "seveninferior"sv, 0x2087 },
+    { "sevenmonospace"sv, 0xFF17 },
+    { "sevenoldstyle"sv, 0xF737 },
+    { "sevenparen"sv, 0x247A },
+    { "sevenperiod"sv, 0x248E },
+    { "sevenpersian"sv, 0x06F7 },
+    { "sevenroman"sv, 0x2176 },
+    { "sevensuperior"sv, 0x2077 },
+    { "seventeencircle"sv, 0x2470 },
+    { "seventeenparen"sv, 0x2484 },
+    { "seventeenperiod"sv, 0x2498 },
+    { "seventhai"sv, 0x0E57 },
+    { "sfthyphen"sv, 0x00AD },
+    { "shaarmenian"sv, 0x0577 },
+    { "shabengali"sv, 0x09B6 },
+    { "shacyrillic"sv, 0x0448 },
+    { "shaddaarabic"sv, 0x0651 },
+    { "shaddadammaarabic"sv, 0xFC61 },
+    { "shaddadammatanarabic"sv, 0xFC5E },
+    { "shaddafathaarabic"sv, 0xFC60 },
+    { "shaddakasraarabic"sv, 0xFC62 },
+    { "shaddakasratanarabic"sv, 0xFC5F },
+    { "shade"sv, 0x2592 },
+    { "shadedark"sv, 0x2593 },
+    { "shadelight"sv, 0x2591 },
+    { "shademedium"sv, 0x2592 },
+    { "shadeva"sv, 0x0936 },
+    { "shagujarati"sv, 0x0AB6 },
+    { "shagurmukhi"sv, 0x0A36 },
+    { "shalshelethebrew"sv, 0x0593 },
+    { "shbopomofo"sv, 0x3115 },
+    { "shchacyrillic"sv, 0x0449 },
+    { "sheenarabic"sv, 0x0634 },
+    { "sheenfinalarabic"sv, 0xFEB6 },
+    { "sheeninitialarabic"sv, 0xFEB7 },
+    { "sheenmedialarabic"sv, 0xFEB8 },
+    { "sheicoptic"sv, 0x03E3 },
+    { "sheqel"sv, 0x20AA },
+    { "sheqelhebrew"sv, 0x20AA },
+    { "sheva"sv, 0x05B0 },
+    { "sheva115"sv, 0x05B0 },
+    { "sheva15"sv, 0x05B0 },
+    { "sheva22"sv, 0x05B0 },
+    { "sheva2e"sv, 0x05B0 },
+    { "shevahebrew"sv, 0x05B0 },
+    { "shevanarrowhebrew"sv, 0x05B0 },
+    { "shevaquarterhebrew"sv, 0x05B0 },
+    { "shevawidehebrew"sv, 0x05B0 },
+    { "shhacyrillic"sv, 0x04BB },
+    { "shimacoptic"sv, 0x03ED },
+    { "shin"sv, 0x05E9 },
+    { "shindagesh"sv, 0xFB49 },
+    { "shindageshhebrew"sv, 0xFB49 },
+    { "shindageshshindot"sv, 0xFB2C },
+    { "shindageshshindothebrew"sv, 0xFB2C },
+    { "shindageshsindot"sv, 0xFB2D },
+    { "shindageshsindothebrew"sv, 0xFB2D },
+    { "shindothebrew"sv, 0x05C1 },
+    { "shinhebrew"sv, 0x05E9 },
+    { "shinshindot"sv, 0xFB2A },
+    { "shinshindothebrew"sv, 0xFB2A },
+    { "shinsindot"sv, 0xFB2B },
+    { "shinsindothebrew"sv, 0xFB2B },
+    { "shook"sv, 0x0282 },
+    { "sigma"sv, 0x03C3 },
+    { "sigma1"sv, 0x03C2 },
+    { "sigmafinal"sv, 0x03C2 },
+    { "sigmalunatesymbolgreek"sv, 0x03F2 },
+    { "sihiragana"sv, 0x3057 },
+    { "sikatakana"sv, 0x30B7 },
+    { "sikatakanahalfwidth"sv, 0xFF7C },
+    { "siluqhebrew"sv, 0x05BD },
+    { "siluqlefthebrew"sv, 0x05BD },
+    { "similar"sv, 0x223C },
+    { "sindothebrew"sv, 0x05C2 },
+    { "siosacirclekorean"sv, 0x3274 },
+    { "siosaparenkorean"sv, 0x3214 },
+    { "sioscieuckorean"sv, 0x317E },
+    { "sioscirclekorean"sv, 0x3266 },
+    { "sioskiyeokkorean"sv, 0x317A },
+    { "sioskorean"sv, 0x3145 },
+    { "siosnieunkorean"sv, 0x317B },
+    { "siosparenkorean"sv, 0x3206 },
+    { "siospieupkorean"sv, 0x317D },
+    { "siostikeutkorean"sv, 0x317C },
+    { "six"sv, 0x0036 },
+    { "sixarabic"sv, 0x0666 },
+    { "sixbengali"sv, 0x09EC },
+    { "sixcircle"sv, 0x2465 },
+    { "sixcircleinversesansserif"sv, 0x278F },
+    { "sixdeva"sv, 0x096C },
+    { "sixgujarati"sv, 0x0AEC },
+    { "sixgurmukhi"sv, 0x0A6C },
+    { "sixhackarabic"sv, 0x0666 },
+    { "sixhangzhou"sv, 0x3026 },
+    { "sixideographicparen"sv, 0x3225 },
+    { "sixinferior"sv, 0x2086 },
+    { "sixmonospace"sv, 0xFF16 },
+    { "sixoldstyle"sv, 0xF736 },
+    { "sixparen"sv, 0x2479 },
+    { "sixperiod"sv, 0x248D },
+    { "sixpersian"sv, 0x06F6 },
+    { "sixroman"sv, 0x2175 },
+    { "sixsuperior"sv, 0x2076 },
+    { "sixteencircle"sv, 0x246F },
+    { "sixteencurrencydenominatorbengali"sv, 0x09F9 },
+    { "sixteenparen"sv, 0x2483 },
+    { "sixteenperiod"sv, 0x2497 },
+    { "sixthai"sv, 0x0E56 },
+    { "slash"sv, 0x002F },
+    { "slashmonospace"sv, 0xFF0F },
+    { "slong"sv, 0x017F },
+    { "slongdotaccent"sv, 0x1E9B },
+    { "smileface"sv, 0x263A },
+    { "smonospace"sv, 0xFF53 },
+    { "sofpasuqhebrew"sv, 0x05C3 },
+    { "softhyphen"sv, 0x00AD },
+    { "softsigncyrillic"sv, 0x044C },
+    { "sohiragana"sv, 0x305D },
+    { "sokatakana"sv, 0x30BD },
+    { "sokatakanahalfwidth"sv, 0xFF7F },
+    { "soliduslongoverlaycmb"sv, 0x0338 },
+    { "solidusshortoverlaycmb"sv, 0x0337 },
+    { "sorusithai"sv, 0x0E29 },
+    { "sosalathai"sv, 0x0E28 },
+    { "sosothai"sv, 0x0E0B },
+    { "sosuathai"sv, 0x0E2A },
+    { "space"sv, 0x0020 },
+    { "spacehackarabic"sv, 0x0020 },
+    { "spade"sv, 0x2660 },
+    { "spadesuitblack"sv, 0x2660 },
+    { "spadesuitwhite"sv, 0x2664 },
+    { "sparen"sv, 0x24AE },
+    { "squarebelowcmb"sv, 0x033B },
+    { "squarecc"sv, 0x33C4 },
+    { "squarecm"sv, 0x339D },
+    { "squarediagonalcrosshatchfill"sv, 0x25A9 },
+    { "squarehorizontalfill"sv, 0x25A4 },
+    { "squarekg"sv, 0x338F },
+    { "squarekm"sv, 0x339E },
+    { "squarekmcapital"sv, 0x33CE },
+    { "squareln"sv, 0x33D1 },
+    { "squarelog"sv, 0x33D2 },
+    { "squaremg"sv, 0x338E },
+    { "squaremil"sv, 0x33D5 },
+    { "squaremm"sv, 0x339C },
+    { "squaremsquared"sv, 0x33A1 },
+    { "squareorthogonalcrosshatchfill"sv, 0x25A6 },
+    { "squareupperlefttolowerrightfill"sv, 0x25A7 },
+    { "squareupperrighttolowerleftfill"sv, 0x25A8 },
+    { "squareverticalfill"sv, 0x25A5 },
+    { "squarewhitewithsmallblack"sv, 0x25A3 },
+    { "srsquare"sv, 0x33DB },
+    { "ssabengali"sv, 0x09B7 },
+    { "ssadeva"sv, 0x0937 },
+    { "ssagujarati"sv, 0x0AB7 },
+    { "ssangcieuckorean"sv, 0x3149 },
+    { "ssanghieuhkorean"sv, 0x3185 },
+    { "ssangieungkorean"sv, 0x3180 },
+    { "ssangkiyeokkorean"sv, 0x3132 },
+    { "ssangnieunkorean"sv, 0x3165 },
+    { "ssangpieupkorean"sv, 0x3143 },
+    { "ssangsioskorean"sv, 0x3146 },
+    { "ssangtikeutkorean"sv, 0x3138 },
+    { "ssuperior"sv, 0xF6F2 },
+    { "sterling"sv, 0x00A3 },
+    { "sterlingmonospace"sv, 0xFFE1 },
+    { "strokelongoverlaycmb"sv, 0x0336 },
+    { "strokeshortoverlaycmb"sv, 0x0335 },
+    { "subset"sv, 0x2282 },
+    { "subsetnotequal"sv, 0x228A },
+    { "subsetorequal"sv, 0x2286 },
+    { "succeeds"sv, 0x227B },
+    { "suchthat"sv, 0x220B },
+    { "suhiragana"sv, 0x3059 },
+    { "sukatakana"sv, 0x30B9 },
+    { "sukatakanahalfwidth"sv, 0xFF7D },
+    { "sukunarabic"sv, 0x0652 },
+    { "summation"sv, 0x2211 },
+    { "sun"sv, 0x263C },
+    { "superset"sv, 0x2283 },
+    { "supersetnotequal"sv, 0x228B },
+    { "supersetorequal"sv, 0x2287 },
+    { "svsquare"sv, 0x33DC },
+    { "syouwaerasquare"sv, 0x337C },
+    { "t"sv, 0x0074 },
+    { "tabengali"sv, 0x09A4 },
+    { "tackdown"sv, 0x22A4 },
+    { "tackleft"sv, 0x22A3 },
+    { "tadeva"sv, 0x0924 },
+    { "tagujarati"sv, 0x0AA4 },
+    { "tagurmukhi"sv, 0x0A24 },
+    { "taharabic"sv, 0x0637 },
+    { "tahfinalarabic"sv, 0xFEC2 },
+    { "tahinitialarabic"sv, 0xFEC3 },
+    { "tahiragana"sv, 0x305F },
+    { "tahmedialarabic"sv, 0xFEC4 },
+    { "taisyouerasquare"sv, 0x337D },
+    { "takatakana"sv, 0x30BF },
+    { "takatakanahalfwidth"sv, 0xFF80 },
+    { "tatweelarabic"sv, 0x0640 },
+    { "tau"sv, 0x03C4 },
+    { "tav"sv, 0x05EA },
+    { "tavdages"sv, 0xFB4A },
+    { "tavdagesh"sv, 0xFB4A },
+    { "tavdageshhebrew"sv, 0xFB4A },
+    { "tavhebrew"sv, 0x05EA },
+    { "tbar"sv, 0x0167 },
+    { "tbopomofo"sv, 0x310A },
+    { "tcaron"sv, 0x0165 },
+    { "tccurl"sv, 0x02A8 },
+    { "tcedilla"sv, 0x0163 },
+    { "tcheharabic"sv, 0x0686 },
+    { "tchehfinalarabic"sv, 0xFB7B },
+    { "tchehinitialarabic"sv, 0xFB7C },
+    { "tchehmedialarabic"sv, 0xFB7D },
+    { "tcircle"sv, 0x24E3 },
+    { "tcircumflexbelow"sv, 0x1E71 },
+    { "tcommaaccent"sv, 0x0163 },
+    { "tdieresis"sv, 0x1E97 },
+    { "tdotaccent"sv, 0x1E6B },
+    { "tdotbelow"sv, 0x1E6D },
+    { "tecyrillic"sv, 0x0442 },
+    { "tedescendercyrillic"sv, 0x04AD },
+    { "teharabic"sv, 0x062A },
+    { "tehfinalarabic"sv, 0xFE96 },
+    { "tehhahinitialarabic"sv, 0xFCA2 },
+    { "tehhahisolatedarabic"sv, 0xFC0C },
+    { "tehinitialarabic"sv, 0xFE97 },
+    { "tehiragana"sv, 0x3066 },
+    { "tehjeeminitialarabic"sv, 0xFCA1 },
+    { "tehjeemisolatedarabic"sv, 0xFC0B },
+    { "tehmarbutaarabic"sv, 0x0629 },
+    { "tehmarbutafinalarabic"sv, 0xFE94 },
+    { "tehmedialarabic"sv, 0xFE98 },
+    { "tehmeeminitialarabic"sv, 0xFCA4 },
+    { "tehmeemisolatedarabic"sv, 0xFC0E },
+    { "tehnoonfinalarabic"sv, 0xFC73 },
+    { "tekatakana"sv, 0x30C6 },
+    { "tekatakanahalfwidth"sv, 0xFF83 },
+    { "telephone"sv, 0x2121 },
+    { "telephoneblack"sv, 0x260E },
+    { "telishagedolahebrew"sv, 0x05A0 },
+    { "telishaqetanahebrew"sv, 0x05A9 },
+    { "tencircle"sv, 0x2469 },
+    { "tenideographicparen"sv, 0x3229 },
+    { "tenparen"sv, 0x247D },
+    { "tenperiod"sv, 0x2491 },
+    { "tenroman"sv, 0x2179 },
+    { "tesh"sv, 0x02A7 },
+    { "tet"sv, 0x05D8 },
+    { "tetdagesh"sv, 0xFB38 },
+    { "tetdageshhebrew"sv, 0xFB38 },
+    { "tethebrew"sv, 0x05D8 },
+    { "tetsecyrillic"sv, 0x04B5 },
+    { "tevirhebrew"sv, 0x059B },
+    { "tevirlefthebrew"sv, 0x059B },
+    { "thabengali"sv, 0x09A5 },
+    { "thadeva"sv, 0x0925 },
+    { "thagujarati"sv, 0x0AA5 },
+    { "thagurmukhi"sv, 0x0A25 },
+    { "thalarabic"sv, 0x0630 },
+    { "thalfinalarabic"sv, 0xFEAC },
+    { "thanthakhatlowleftthai"sv, 0xF898 },
+    { "thanthakhatlowrightthai"sv, 0xF897 },
+    { "thanthakhatthai"sv, 0x0E4C },
+    { "thanthakhatupperleftthai"sv, 0xF896 },
+    { "theharabic"sv, 0x062B },
+    { "thehfinalarabic"sv, 0xFE9A },
+    { "thehinitialarabic"sv, 0xFE9B },
+    { "thehmedialarabic"sv, 0xFE9C },
+    { "thereexists"sv, 0x2203 },
+    { "therefore"sv, 0x2234 },
+    { "theta"sv, 0x03B8 },
+    { "theta1"sv, 0x03D1 },
+    { "thetasymbolgreek"sv, 0x03D1 },
+    { "thieuthacirclekorean"sv, 0x3279 },
+    { "thieuthaparenkorean"sv, 0x3219 },
+    { "thieuthcirclekorean"sv, 0x326B },
+    { "thieuthkorean"sv, 0x314C },
+    { "thieuthparenkorean"sv, 0x320B },
+    { "thirteencircle"sv, 0x246C },
+    { "thirteenparen"sv, 0x2480 },
+    { "thirteenperiod"sv, 0x2494 },
+    { "thonangmonthothai"sv, 0x0E11 },
+    { "thook"sv, 0x01AD },
+    { "thophuthaothai"sv, 0x0E12 },
+    { "thorn"sv, 0x00FE },
+    { "thothahanthai"sv, 0x0E17 },
+    { "thothanthai"sv, 0x0E10 },
+    { "thothongthai"sv, 0x0E18 },
+    { "thothungthai"sv, 0x0E16 },
+    { "thousandcyrillic"sv, 0x0482 },
+    { "thousandsseparatorarabic"sv, 0x066C },
+    { "thousandsseparatorpersian"sv, 0x066C },
+    { "three"sv, 0x0033 },
+    { "threearabic"sv, 0x0663 },
+    { "threebengali"sv, 0x09E9 },
+    { "threecircle"sv, 0x2462 },
+    { "threecircleinversesansserif"sv, 0x278C },
+    { "threedeva"sv, 0x0969 },
+    { "threeeighths"sv, 0x215C },
+    { "threegujarati"sv, 0x0AE9 },
+    { "threegurmukhi"sv, 0x0A69 },
+    { "threehackarabic"sv, 0x0663 },
+    { "threehangzhou"sv, 0x3023 },
+    { "threeideographicparen"sv, 0x3222 },
+    { "threeinferior"sv, 0x2083 },
+    { "threemonospace"sv, 0xFF13 },
+    { "threenumeratorbengali"sv, 0x09F6 },
+    { "threeoldstyle"sv, 0xF733 },
+    { "threeparen"sv, 0x2476 },
+    { "threeperiod"sv, 0x248A },
+    { "threepersian"sv, 0x06F3 },
+    { "threequarters"sv, 0x00BE },
+    { "threequartersemdash"sv, 0xF6DE },
+    { "threeroman"sv, 0x2172 },
+    { "threesuperior"sv, 0x00B3 },
+    { "threethai"sv, 0x0E53 },
+    { "thzsquare"sv, 0x3394 },
+    { "tihiragana"sv, 0x3061 },
+    { "tikatakana"sv, 0x30C1 },
+    { "tikatakanahalfwidth"sv, 0xFF81 },
+    { "tikeutacirclekorean"sv, 0x3270 },
+    { "tikeutaparenkorean"sv, 0x3210 },
+    { "tikeutcirclekorean"sv, 0x3262 },
+    { "tikeutkorean"sv, 0x3137 },
+    { "tikeutparenkorean"sv, 0x3202 },
+    { "tilde"sv, 0x02DC },
+    { "tildebelowcmb"sv, 0x0330 },
+    { "tildecmb"sv, 0x0303 },
+    { "tildecomb"sv, 0x0303 },
+    { "tildedoublecmb"sv, 0x0360 },
+    { "tildeoperator"sv, 0x223C },
+    { "tildeoverlaycmb"sv, 0x0334 },
+    { "tildeverticalcmb"sv, 0x033E },
+    { "timescircle"sv, 0x2297 },
+    { "tipehahebrew"sv, 0x0596 },
+    { "tipehalefthebrew"sv, 0x0596 },
+    { "tippigurmukhi"sv, 0x0A70 },
+    { "titlocyrilliccmb"sv, 0x0483 },
+    { "tiwnarmenian"sv, 0x057F },
+    { "tlinebelow"sv, 0x1E6F },
+    { "tmonospace"sv, 0xFF54 },
+    { "toarmenian"sv, 0x0569 },
+    { "tohiragana"sv, 0x3068 },
+    { "tokatakana"sv, 0x30C8 },
+    { "tokatakanahalfwidth"sv, 0xFF84 },
+    { "tonebarextrahighmod"sv, 0x02E5 },
+    { "tonebarextralowmod"sv, 0x02E9 },
+    { "tonebarhighmod"sv, 0x02E6 },
+    { "tonebarlowmod"sv, 0x02E8 },
+    { "tonebarmidmod"sv, 0x02E7 },
+    { "tonefive"sv, 0x01BD },
+    { "tonesix"sv, 0x0185 },
+    { "tonetwo"sv, 0x01A8 },
+    { "tonos"sv, 0x0384 },
+    { "tonsquare"sv, 0x3327 },
+    { "topatakthai"sv, 0x0E0F },
+    { "tortoiseshellbracketleft"sv, 0x3014 },
+    { "tortoiseshellbracketleftsmall"sv, 0xFE5D },
+    { "tortoiseshellbracketleftvertical"sv, 0xFE39 },
+    { "tortoiseshellbracketright"sv, 0x3015 },
+    { "tortoiseshellbracketrightsmall"sv, 0xFE5E },
+    { "tortoiseshellbracketrightvertical"sv, 0xFE3A },
+    { "totaothai"sv, 0x0E15 },
+    { "tpalatalhook"sv, 0x01AB },
+    { "tparen"sv, 0x24AF },
+    { "trademark"sv, 0x2122 },
+    { "trademarksans"sv, 0xF8EA },
+    { "trademarkserif"sv, 0xF6DB },
+    { "tretroflexhook"sv, 0x0288 },
+    { "triagdn"sv, 0x25BC },
+    { "triaglf"sv, 0x25C4 },
+    { "triagrt"sv, 0x25BA },
+    { "triagup"sv, 0x25B2 },
+    { "ts"sv, 0x02A6 },
+    { "tsadi"sv, 0x05E6 },
+    { "tsadidagesh"sv, 0xFB46 },
+    { "tsadidageshhebrew"sv, 0xFB46 },
+    { "tsadihebrew"sv, 0x05E6 },
+    { "tsecyrillic"sv, 0x0446 },
+    { "tsere"sv, 0x05B5 },
+    { "tsere12"sv, 0x05B5 },
+    { "tsere1e"sv, 0x05B5 },
+    { "tsere2b"sv, 0x05B5 },
+    { "tserehebrew"sv, 0x05B5 },
+    { "tserenarrowhebrew"sv, 0x05B5 },
+    { "tserequarterhebrew"sv, 0x05B5 },
+    { "tserewidehebrew"sv, 0x05B5 },
+    { "tshecyrillic"sv, 0x045B },
+    { "tsuperior"sv, 0xF6F3 },
+    { "ttabengali"sv, 0x099F },
+    { "ttadeva"sv, 0x091F },
+    { "ttagujarati"sv, 0x0A9F },
+    { "ttagurmukhi"sv, 0x0A1F },
+    { "tteharabic"sv, 0x0679 },
+    { "ttehfinalarabic"sv, 0xFB67 },
+    { "ttehinitialarabic"sv, 0xFB68 },
+    { "ttehmedialarabic"sv, 0xFB69 },
+    { "tthabengali"sv, 0x09A0 },
+    { "tthadeva"sv, 0x0920 },
+    { "tthagujarati"sv, 0x0AA0 },
+    { "tthagurmukhi"sv, 0x0A20 },
+    { "tturned"sv, 0x0287 },
+    { "tuhiragana"sv, 0x3064 },
+    { "tukatakana"sv, 0x30C4 },
+    { "tukatakanahalfwidth"sv, 0xFF82 },
+    { "tusmallhiragana"sv, 0x3063 },
+    { "tusmallkatakana"sv, 0x30C3 },
+    { "tusmallkatakanahalfwidth"sv, 0xFF6F },
+    { "twelvecircle"sv, 0x246B },
+    { "twelveparen"sv, 0x247F },
+    { "twelveperiod"sv, 0x2493 },
+    { "twelveroman"sv, 0x217B },
+    { "twentycircle"sv, 0x2473 },
+    { "twentyhangzhou"sv, 0x5344 },
+    { "twentyparen"sv, 0x2487 },
+    { "twentyperiod"sv, 0x249B },
+    { "two"sv, 0x0032 },
+    { "twoarabic"sv, 0x0662 },
+    { "twobengali"sv, 0x09E8 },
+    { "twocircle"sv, 0x2461 },
+    { "twocircleinversesansserif"sv, 0x278B },
+    { "twodeva"sv, 0x0968 },
+    { "twodotenleader"sv, 0x2025 },
+    { "twodotleader"sv, 0x2025 },
+    { "twodotleadervertical"sv, 0xFE30 },
+    { "twogujarati"sv, 0x0AE8 },
+    { "twogurmukhi"sv, 0x0A68 },
+    { "twohackarabic"sv, 0x0662 },
+    { "twohangzhou"sv, 0x3022 },
+    { "twoideographicparen"sv, 0x3221 },
+    { "twoinferior"sv, 0x2082 },
+    { "twomonospace"sv, 0xFF12 },
+    { "twonumeratorbengali"sv, 0x09F5 },
+    { "twooldstyle"sv, 0xF732 },
+    { "twoparen"sv, 0x2475 },
+    { "twoperiod"sv, 0x2489 },
+    { "twopersian"sv, 0x06F2 },
+    { "tworoman"sv, 0x2171 },
+    { "twostroke"sv, 0x01BB },
+    { "twosuperior"sv, 0x00B2 },
+    { "twothai"sv, 0x0E52 },
+    { "twothirds"sv, 0x2154 },
+    { "u"sv, 0x0075 },
+    { "uacute"sv, 0x00FA },
+    { "ubar"sv, 0x0289 },
+    { "ubengali"sv, 0x0989 },
+    { "ubopomofo"sv, 0x3128 },
+    { "ubreve"sv, 0x016D },
+    { "ucaron"sv, 0x01D4 },
+    { "ucircle"sv, 0x24E4 },
+    { "ucircumflex"sv, 0x00FB },
+    { "ucircumflexbelow"sv, 0x1E77 },
+    { "ucyrillic"sv, 0x0443 },
+    { "udattadeva"sv, 0x0951 },
+    { "udblacute"sv, 0x0171 },
+    { "udblgrave"sv, 0x0215 },
+    { "udeva"sv, 0x0909 },
+    { "udieresis"sv, 0x00FC },
+    { "udieresisacute"sv, 0x01D8 },
+    { "udieresisbelow"sv, 0x1E73 },
+    { "udieresiscaron"sv, 0x01DA },
+    { "udieresiscyrillic"sv, 0x04F1 },
+    { "udieresisgrave"sv, 0x01DC },
+    { "udieresismacron"sv, 0x01D6 },
+    { "udotbelow"sv, 0x1EE5 },
+    { "ugrave"sv, 0x00F9 },
+    { "ugujarati"sv, 0x0A89 },
+    { "ugurmukhi"sv, 0x0A09 },
+    { "uhiragana"sv, 0x3046 },
+    { "uhookabove"sv, 0x1EE7 },
+    { "uhorn"sv, 0x01B0 },
+    { "uhornacute"sv, 0x1EE9 },
+    { "uhorndotbelow"sv, 0x1EF1 },
+    { "uhorngrave"sv, 0x1EEB },
+    { "uhornhookabove"sv, 0x1EED },
+    { "uhorntilde"sv, 0x1EEF },
+    { "uhungarumlaut"sv, 0x0171 },
+    { "uhungarumlautcyrillic"sv, 0x04F3 },
+    { "uinvertedbreve"sv, 0x0217 },
+    { "ukatakana"sv, 0x30A6 },
+    { "ukatakanahalfwidth"sv, 0xFF73 },
+    { "ukcyrillic"sv, 0x0479 },
+    { "ukorean"sv, 0x315C },
+    { "umacron"sv, 0x016B },
+    { "umacroncyrillic"sv, 0x04EF },
+    { "umacrondieresis"sv, 0x1E7B },
+    { "umatragurmukhi"sv, 0x0A41 },
+    { "umonospace"sv, 0xFF55 },
+    { "underscore"sv, 0x005F },
+    { "underscoredbl"sv, 0x2017 },
+    { "underscoremonospace"sv, 0xFF3F },
+    { "underscorevertical"sv, 0xFE33 },
+    { "underscorewavy"sv, 0xFE4F },
+    { "union"sv, 0x222A },
+    { "universal"sv, 0x2200 },
+    { "uogonek"sv, 0x0173 },
+    { "uparen"sv, 0x24B0 },
+    { "upblock"sv, 0x2580 },
+    { "upperdothebrew"sv, 0x05C4 },
+    { "upsilon"sv, 0x03C5 },
+    { "upsilondieresis"sv, 0x03CB },
+    { "upsilondieresistonos"sv, 0x03B0 },
+    { "upsilonlatin"sv, 0x028A },
+    { "upsilontonos"sv, 0x03CD },
+    { "uptackbelowcmb"sv, 0x031D },
+    { "uptackmod"sv, 0x02D4 },
+    { "uragurmukhi"sv, 0x0A73 },
+    { "uring"sv, 0x016F },
+    { "ushortcyrillic"sv, 0x045E },
+    { "usmallhiragana"sv, 0x3045 },
+    { "usmallkatakana"sv, 0x30A5 },
+    { "usmallkatakanahalfwidth"sv, 0xFF69 },
+    { "ustraightcyrillic"sv, 0x04AF },
+    { "ustraightstrokecyrillic"sv, 0x04B1 },
+    { "utilde"sv, 0x0169 },
+    { "utildeacute"sv, 0x1E79 },
+    { "utildebelow"sv, 0x1E75 },
+    { "uubengali"sv, 0x098A },
+    { "uudeva"sv, 0x090A },
+    { "uugujarati"sv, 0x0A8A },
+    { "uugurmukhi"sv, 0x0A0A },
+    { "uumatragurmukhi"sv, 0x0A42 },
+    { "uuvowelsignbengali"sv, 0x09C2 },
+    { "uuvowelsigndeva"sv, 0x0942 },
+    { "uuvowelsigngujarati"sv, 0x0AC2 },
+    { "uvowelsignbengali"sv, 0x09C1 },
+    { "uvowelsigndeva"sv, 0x0941 },
+    { "uvowelsigngujarati"sv, 0x0AC1 },
+    { "v"sv, 0x0076 },
+    { "vadeva"sv, 0x0935 },
+    { "vagujarati"sv, 0x0AB5 },
+    { "vagurmukhi"sv, 0x0A35 },
+    { "vakatakana"sv, 0x30F7 },
+    { "vav"sv, 0x05D5 },
+    { "vavdagesh"sv, 0xFB35 },
+    { "vavdagesh65"sv, 0xFB35 },
+    { "vavdageshhebrew"sv, 0xFB35 },
+    { "vavhebrew"sv, 0x05D5 },
+    { "vavholam"sv, 0xFB4B },
+    { "vavholamhebrew"sv, 0xFB4B },
+    { "vavvavhebrew"sv, 0x05F0 },
+    { "vavyodhebrew"sv, 0x05F1 },
+    { "vcircle"sv, 0x24E5 },
+    { "vdotbelow"sv, 0x1E7F },
+    { "vecyrillic"sv, 0x0432 },
+    { "veharabic"sv, 0x06A4 },
+    { "vehfinalarabic"sv, 0xFB6B },
+    { "vehinitialarabic"sv, 0xFB6C },
+    { "vehmedialarabic"sv, 0xFB6D },
+    { "vekatakana"sv, 0x30F9 },
+    { "venus"sv, 0x2640 },
+    { "verticalbar"sv, 0x007C },
+    { "verticallineabovecmb"sv, 0x030D },
+    { "verticallinebelowcmb"sv, 0x0329 },
+    { "verticallinelowmod"sv, 0x02CC },
+    { "verticallinemod"sv, 0x02C8 },
+    { "vewarmenian"sv, 0x057E },
+    { "vhook"sv, 0x028B },
+    { "vikatakana"sv, 0x30F8 },
+    { "viramabengali"sv, 0x09CD },
+    { "viramadeva"sv, 0x094D },
+    { "viramagujarati"sv, 0x0ACD },
+    { "visargabengali"sv, 0x0983 },
+    { "visargadeva"sv, 0x0903 },
+    { "visargagujarati"sv, 0x0A83 },
+    { "vmonospace"sv, 0xFF56 },
+    { "voarmenian"sv, 0x0578 },
+    { "voicediterationhiragana"sv, 0x309E },
+    { "voicediterationkatakana"sv, 0x30FE },
+    { "voicedmarkkana"sv, 0x309B },
+    { "voicedmarkkanahalfwidth"sv, 0xFF9E },
+    { "vokatakana"sv, 0x30FA },
+    { "vparen"sv, 0x24B1 },
+    { "vtilde"sv, 0x1E7D },
+    { "vturned"sv, 0x028C },
+    { "vuhiragana"sv, 0x3094 },
+    { "vukatakana"sv, 0x30F4 },
+    { "w"sv, 0x0077 },
+    { "wacute"sv, 0x1E83 },
+    { "waekorean"sv, 0x3159 },
+    { "wahiragana"sv, 0x308F },
+    { "wakatakana"sv, 0x30EF },
+    { "wakatakanahalfwidth"sv, 0xFF9C },
+    { "wakorean"sv, 0x3158 },
+    { "wasmallhiragana"sv, 0x308E },
+    { "wasmallkatakana"sv, 0x30EE },
+    { "wattosquare"sv, 0x3357 },
+    { "wavedash"sv, 0x301C },
+    { "wavyunderscorevertical"sv, 0xFE34 },
+    { "wawarabic"sv, 0x0648 },
+    { "wawfinalarabic"sv, 0xFEEE },
+    { "wawhamzaabovearabic"sv, 0x0624 },
+    { "wawhamzaabovefinalarabic"sv, 0xFE86 },
+    { "wbsquare"sv, 0x33DD },
+    { "wcircle"sv, 0x24E6 },
+    { "wcircumflex"sv, 0x0175 },
+    { "wdieresis"sv, 0x1E85 },
+    { "wdotaccent"sv, 0x1E87 },
+    { "wdotbelow"sv, 0x1E89 },
+    { "wehiragana"sv, 0x3091 },
+    { "weierstrass"sv, 0x2118 },
+    { "wekatakana"sv, 0x30F1 },
+    { "wekorean"sv, 0x315E },
+    { "weokorean"sv, 0x315D },
+    { "wgrave"sv, 0x1E81 },
+    { "whitebullet"sv, 0x25E6 },
+    { "whitecircle"sv, 0x25CB },
+    { "whitecircleinverse"sv, 0x25D9 },
+    { "whitecornerbracketleft"sv, 0x300E },
+    { "whitecornerbracketleftvertical"sv, 0xFE43 },
+    { "whitecornerbracketright"sv, 0x300F },
+    { "whitecornerbracketrightvertical"sv, 0xFE44 },
+    { "whitediamond"sv, 0x25C7 },
+    { "whitediamondcontainingblacksmalldiamond"sv, 0x25C8 },
+    { "whitedownpointingsmalltriangle"sv, 0x25BF },
+    { "whitedownpointingtriangle"sv, 0x25BD },
+    { "whiteleftpointingsmalltriangle"sv, 0x25C3 },
+    { "whiteleftpointingtriangle"sv, 0x25C1 },
+    { "whitelenticularbracketleft"sv, 0x3016 },
+    { "whitelenticularbracketright"sv, 0x3017 },
+    { "whiterightpointingsmalltriangle"sv, 0x25B9 },
+    { "whiterightpointingtriangle"sv, 0x25B7 },
+    { "whitesmallsquare"sv, 0x25AB },
+    { "whitesmilingface"sv, 0x263A },
+    { "whitesquare"sv, 0x25A1 },
+    { "whitestar"sv, 0x2606 },
+    { "whitetelephone"sv, 0x260F },
+    { "whitetortoiseshellbracketleft"sv, 0x3018 },
+    { "whitetortoiseshellbracketright"sv, 0x3019 },
+    { "whiteuppointingsmalltriangle"sv, 0x25B5 },
+    { "whiteuppointingtriangle"sv, 0x25B3 },
+    { "wihiragana"sv, 0x3090 },
+    { "wikatakana"sv, 0x30F0 },
+    { "wikorean"sv, 0x315F },
+    { "wmonospace"sv, 0xFF57 },
+    { "wohiragana"sv, 0x3092 },
+    { "wokatakana"sv, 0x30F2 },
+    { "wokatakanahalfwidth"sv, 0xFF66 },
+    { "won"sv, 0x20A9 },
+    { "wonmonospace"sv, 0xFFE6 },
+    { "wowaenthai"sv, 0x0E27 },
+    { "wparen"sv, 0x24B2 },
+    { "wring"sv, 0x1E98 },
+    { "wsuperior"sv, 0x02B7 },
+    { "wturned"sv, 0x028D },
+    { "wynn"sv, 0x01BF },
+    { "x"sv, 0x0078 },
+    { "xabovecmb"sv, 0x033D },
+    { "xbopomofo"sv, 0x3112 },
+    { "xcircle"sv, 0x24E7 },
+    { "xdieresis"sv, 0x1E8D },
+    { "xdotaccent"sv, 0x1E8B },
+    { "xeharmenian"sv, 0x056D },
+    { "xi"sv, 0x03BE },
+    { "xmonospace"sv, 0xFF58 },
+    { "xparen"sv, 0x24B3 },
+    { "xsuperior"sv, 0x02E3 },
+    { "y"sv, 0x0079 },
+    { "yaadosquare"sv, 0x334E },
+    { "yabengali"sv, 0x09AF },
+    { "yacute"sv, 0x00FD },
+    { "yadeva"sv, 0x092F },
+    { "yaekorean"sv, 0x3152 },
+    { "yagujarati"sv, 0x0AAF },
+    { "yagurmukhi"sv, 0x0A2F },
+    { "yahiragana"sv, 0x3084 },
+    { "yakatakana"sv, 0x30E4 },
+    { "yakatakanahalfwidth"sv, 0xFF94 },
+    { "yakorean"sv, 0x3151 },
+    { "yamakkanthai"sv, 0x0E4E },
+    { "yasmallhiragana"sv, 0x3083 },
+    { "yasmallkatakana"sv, 0x30E3 },
+    { "yasmallkatakanahalfwidth"sv, 0xFF6C },
+    { "yatcyrillic"sv, 0x0463 },
+    { "ycircle"sv, 0x24E8 },
+    { "ycircumflex"sv, 0x0177 },
+    { "ydieresis"sv, 0x00FF },
+    { "ydotaccent"sv, 0x1E8F },
+    { "ydotbelow"sv, 0x1EF5 },
+    { "yeharabic"sv, 0x064A },
+    { "yehbarreearabic"sv, 0x06D2 },
+    { "yehbarreefinalarabic"sv, 0xFBAF },
+    { "yehfinalarabic"sv, 0xFEF2 },
+    { "yehhamzaabovearabic"sv, 0x0626 },
+    { "yehhamzaabovefinalarabic"sv, 0xFE8A },
+    { "yehhamzaaboveinitialarabic"sv, 0xFE8B },
+    { "yehhamzaabovemedialarabic"sv, 0xFE8C },
+    { "yehinitialarabic"sv, 0xFEF3 },
+    { "yehmedialarabic"sv, 0xFEF4 },
+    { "yehmeeminitialarabic"sv, 0xFCDD },
+    { "yehmeemisolatedarabic"sv, 0xFC58 },
+    { "yehnoonfinalarabic"sv, 0xFC94 },
+    { "yehthreedotsbelowarabic"sv, 0x06D1 },
+    { "yekorean"sv, 0x3156 },
+    { "yen"sv, 0x00A5 },
+    { "yenmonospace"sv, 0xFFE5 },
+    { "yeokorean"sv, 0x3155 },
+    { "yeorinhieuhkorean"sv, 0x3186 },
+    { "yerahbenyomohebrew"sv, 0x05AA },
+    { "yerahbenyomolefthebrew"sv, 0x05AA },
+    { "yericyrillic"sv, 0x044B },
+    { "yerudieresiscyrillic"sv, 0x04F9 },
+    { "yesieungkorean"sv, 0x3181 },
+    { "yesieungpansioskorean"sv, 0x3183 },
+    { "yesieungsioskorean"sv, 0x3182 },
+    { "yetivhebrew"sv, 0x059A },
+    { "ygrave"sv, 0x1EF3 },
+    { "yhook"sv, 0x01B4 },
+    { "yhookabove"sv, 0x1EF7 },
+    { "yiarmenian"sv, 0x0575 },
+    { "yicyrillic"sv, 0x0457 },
+    { "yikorean"sv, 0x3162 },
+    { "yinyang"sv, 0x262F },
+    { "yiwnarmenian"sv, 0x0582 },
+    { "ymonospace"sv, 0xFF59 },
+    { "yod"sv, 0x05D9 },
+    { "yoddagesh"sv, 0xFB39 },
+    { "yoddageshhebrew"sv, 0xFB39 },
+    { "yodhebrew"sv, 0x05D9 },
+    { "yodyodhebrew"sv, 0x05F2 },
+    { "yodyodpatahhebrew"sv, 0xFB1F },
+    { "yohiragana"sv, 0x3088 },
+    { "yoikorean"sv, 0x3189 },
+    { "yokatakana"sv, 0x30E8 },
+    { "yokatakanahalfwidth"sv, 0xFF96 },
+    { "yokorean"sv, 0x315B },
+    { "yosmallhiragana"sv, 0x3087 },
+    { "yosmallkatakana"sv, 0x30E7 },
+    { "yosmallkatakanahalfwidth"sv, 0xFF6E },
+    { "yotgreek"sv, 0x03F3 },
+    { "yoyaekorean"sv, 0x3188 },
+    { "yoyakorean"sv, 0x3187 },
+    { "yoyakthai"sv, 0x0E22 },
+    { "yoyingthai"sv, 0x0E0D },
+    { "yparen"sv, 0x24B4 },
+    { "ypogegrammeni"sv, 0x037A },
+    { "ypogegrammenigreekcmb"sv, 0x0345 },
+    { "yr"sv, 0x01A6 },
+    { "yring"sv, 0x1E99 },
+    { "ysuperior"sv, 0x02B8 },
+    { "ytilde"sv, 0x1EF9 },
+    { "yturned"sv, 0x028E },
+    { "yuhiragana"sv, 0x3086 },
+    { "yuikorean"sv, 0x318C },
+    { "yukatakana"sv, 0x30E6 },
+    { "yukatakanahalfwidth"sv, 0xFF95 },
+    { "yukorean"sv, 0x3160 },
+    { "yusbigcyrillic"sv, 0x046B },
+    { "yusbigiotifiedcyrillic"sv, 0x046D },
+    { "yuslittlecyrillic"sv, 0x0467 },
+    { "yuslittleiotifiedcyrillic"sv, 0x0469 },
+    { "yusmallhiragana"sv, 0x3085 },
+    { "yusmallkatakana"sv, 0x30E5 },
+    { "yusmallkatakanahalfwidth"sv, 0xFF6D },
+    { "yuyekorean"sv, 0x318B },
+    { "yuyeokorean"sv, 0x318A },
+    { "yyabengali"sv, 0x09DF },
+    { "yyadeva"sv, 0x095F },
+    { "z"sv, 0x007A },
+    { "zaarmenian"sv, 0x0566 },
+    { "zacute"sv, 0x017A },
+    { "zadeva"sv, 0x095B },
+    { "zagurmukhi"sv, 0x0A5B },
+    { "zaharabic"sv, 0x0638 },
+    { "zahfinalarabic"sv, 0xFEC6 },
+    { "zahinitialarabic"sv, 0xFEC7 },
+    { "zahiragana"sv, 0x3056 },
+    { "zahmedialarabic"sv, 0xFEC8 },
+    { "zainarabic"sv, 0x0632 },
+    { "zainfinalarabic"sv, 0xFEB0 },
+    { "zakatakana"sv, 0x30B6 },
+    { "zaqefgadolhebrew"sv, 0x0595 },
+    { "zaqefqatanhebrew"sv, 0x0594 },
+    { "zarqahebrew"sv, 0x0598 },
+    { "zayin"sv, 0x05D6 },
+    { "zayindagesh"sv, 0xFB36 },
+    { "zayindageshhebrew"sv, 0xFB36 },
+    { "zayinhebrew"sv, 0x05D6 },
+    { "zbopomofo"sv, 0x3117 },
+    { "zcaron"sv, 0x017E },
+    { "zcircle"sv, 0x24E9 },
+    { "zcircumflex"sv, 0x1E91 },
+    { "zcurl"sv, 0x0291 },
+    { "zdot"sv, 0x017C },
+    { "zdotaccent"sv, 0x017C },
+    { "zdotbelow"sv, 0x1E93 },
+    { "zecyrillic"sv, 0x0437 },
+    { "zedescendercyrillic"sv, 0x0499 },
+    { "zedieresiscyrillic"sv, 0x04DF },
+    { "zehiragana"sv, 0x305C },
+    { "zekatakana"sv, 0x30BC },
+    { "zero"sv, 0x0030 },
+    { "zeroarabic"sv, 0x0660 },
+    { "zerobengali"sv, 0x09E6 },
+    { "zerodeva"sv, 0x0966 },
+    { "zerogujarati"sv, 0x0AE6 },
+    { "zerogurmukhi"sv, 0x0A66 },
+    { "zerohackarabic"sv, 0x0660 },
+    { "zeroinferior"sv, 0x2080 },
+    { "zeromonospace"sv, 0xFF10 },
+    { "zerooldstyle"sv, 0xF730 },
+    { "zeropersian"sv, 0x06F0 },
+    { "zerosuperior"sv, 0x2070 },
+    { "zerothai"sv, 0x0E50 },
+    { "zerowidthjoiner"sv, 0xFEFF },
+    { "zerowidthnonjoiner"sv, 0x200C },
+    { "zerowidthspace"sv, 0x200B },
+    { "zeta"sv, 0x03B6 },
+    { "zhbopomofo"sv, 0x3113 },
+    { "zhearmenian"sv, 0x056A },
+    { "zhebrevecyrillic"sv, 0x04C2 },
+    { "zhecyrillic"sv, 0x0436 },
+    { "zhedescendercyrillic"sv, 0x0497 },
+    { "zhedieresiscyrillic"sv, 0x04DD },
+    { "zihiragana"sv, 0x3058 },
+    { "zikatakana"sv, 0x30B8 },
+    { "zinorhebrew"sv, 0x05AE },
+    { "zlinebelow"sv, 0x1E95 },
+    { "zmonospace"sv, 0xFF5A },
+    { "zohiragana"sv, 0x305E },
+    { "zokatakana"sv, 0x30BE },
+    { "zparen"sv, 0x24B5 },
+    { "zretroflexhook"sv, 0x0290 },
+    { "zstroke"sv, 0x01B6 },
+    { "zuhiragana"sv, 0x305A },
+    { "zukatakana"sv, 0x30BA },
+};
+
+Optional<u32> glyph_name_to_unicode(StringView name)
+{
+    return glyph_list.get(name);
+}
+
+}

+ 15 - 0
Userland/Libraries/LibPDF/Fonts/AdobeGlyphList.h

@@ -0,0 +1,15 @@
+/*
+ * Copyright (c) 2023, Nico Weber <thakis@chromium.org>
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#pragma once
+
+#include <AK/StringView.h>
+
+namespace PDF {
+
+Optional<u32> glyph_name_to_unicode(StringView);
+
+}

+ 104 - 7
Userland/Libraries/LibPDF/Fonts/TrueTypeFont.cpp

@@ -9,6 +9,7 @@
 #include <LibGfx/Font/ScaledFont.h>
 #include <LibGfx/Painter.h>
 #include <LibPDF/CommonNames.h>
+#include <LibPDF/Fonts/AdobeGlyphList.h>
 #include <LibPDF/Fonts/TrueTypeFont.h>
 #include <LibPDF/Renderer.h>
 
@@ -18,6 +19,15 @@ PDFErrorOr<void> TrueTypeFont::initialize(Document* document, NonnullRefPtr<Dict
 {
     TRY(SimpleFont::initialize(document, dict, font_size));
 
+    if (dict->contains(CommonNames::Encoding)) {
+        auto encoding_object = MUST(dict->get_object(document, CommonNames::Encoding));
+        if (encoding_object->is<NameObject>()) {
+            auto name = encoding_object->cast<NameObject>()->name();
+            if (name == "MacRomanEncoding" || name == "WinAnsiEncoding")
+                m_encoding_is_mac_roman_or_win_ansi = true;
+        }
+    }
+
     m_base_font_name = TRY(dict->get_name(document, CommonNames::BaseFont))->name();
 
     // If there's an embedded font program we use that; otherwise we try to find a replacement font
@@ -33,8 +43,26 @@ PDFErrorOr<void> TrueTypeFont::initialize(Document* document, NonnullRefPtr<Dict
     if (!m_font) {
         m_font = TRY(replacement_for(base_font_name().to_lowercase(), font_size));
     }
-
     VERIFY(m_font);
+
+    // See long spec comment in TrueTypeFont::draw_glyp().
+    if (!dict->contains(CommonNames::Encoding) || is_symbolic()) {
+        // FIXME: Looks like this is never hit in the test set (?).
+        for (u8 prefix : { 0x00, 0xF0, 0xF1, 0xF2 }) {
+            bool has_all = true;
+            for (unsigned suffix = 0x00; suffix <= 0xFF; ++suffix) {
+                if (!m_font->contains_glyph((prefix << 8) | suffix)) {
+                    has_all = false;
+                    break;
+                }
+            }
+            if (has_all) {
+                m_high_byte = prefix;
+                break;
+            }
+        }
+    }
+
     return {};
 }
 
@@ -48,6 +76,18 @@ void TrueTypeFont::set_font_size(float font_size)
     m_font = m_font->with_size((font_size * POINTS_PER_INCH) / DEFAULT_DPI);
 }
 
+static void do_draw_glyph(Gfx::Painter& painter, Gfx::FloatPoint position, float width, u32 unicode, Gfx::Font const& font, ColorOrStyle const& style)
+{
+    if (style.has<Color>()) {
+        painter.draw_glyph(position, unicode, font, style.get<Color>());
+    } else {
+        // FIXME: Bounding box and sample point look to be pretty wrong
+        style.get<NonnullRefPtr<Gfx::PaintStyle>>()->paint(Gfx::IntRect(position.x(), position.y(), width, 0), [&](auto sample) {
+            painter.draw_glyph(position, unicode, font, sample(Gfx::IntPoint(position.x(), position.y())));
+        });
+    }
+}
+
 PDFErrorOr<void> TrueTypeFont::draw_glyph(Gfx::Painter& painter, Gfx::FloatPoint point, float width, u8 char_code, Renderer const& renderer)
 {
     auto style = renderer.state().paint_style;
@@ -55,14 +95,71 @@ PDFErrorOr<void> TrueTypeFont::draw_glyph(Gfx::Painter& painter, Gfx::FloatPoint
     // Undo shift in Glyf::Glyph::append_simple_path() via OpenType::Font::rasterize_glyph().
     auto position = point.translated(0, -m_font->pixel_metrics().ascent);
 
-    if (style.has<Color>()) {
-        painter.draw_glyph(position, char_code, *m_font, style.get<Color>());
+    // 5.5.5 Character Encoding, Encodings for TrueType Fonts
+    u32 unicode;
+
+    // "If the font has a named Encoding entry of either MacRomanEncoding or WinAnsiEncoding,
+    //  or if the font descriptor’s Nonsymbolic flag (see Table 5.20) is set, the viewer creates
+    //  a table that maps from character codes to glyph names:
+    if (m_encoding_is_mac_roman_or_win_ansi || is_nonsymbolic()) {
+        //  • If the Encoding entry is one of the names MacRomanEncoding or WinAnsiEncoding,
+        //    the table is initialized with the mappings described in Appendix D.
+        //  • If the Encoding entry is a dictionary, the table is initialized with the entries
+        //    from the dictionary’s BaseEncoding entry (see Table 5.11). Any entries in the
+        //    Differences array are used to update the table. Finally, any undefined entries in
+        //    the table are filled using StandardEncoding."
+        // Implementor's note: This is (mostly) done in SimpleFont::initialize() and encoding() returns the result.
+        auto effective_encoding = encoding();
+        if (!effective_encoding)
+            effective_encoding = Encoding::standard_encoding();
+
+        // "If a (3, 1) “cmap” subtable (Microsoft Unicode) is present:
+        //  • A character code is first mapped to a glyph name using the table described above.
+        //  • The glyph name is then mapped to a Unicode value by consulting the Adobe Glyph List (see the Bibliography).
+        //  • Finally, the Unicode value is mapped to a glyph description according to the (3, 1) subtable.
+        //
+        //  If no (3, 1) subtable is present but a (1, 0) subtable (Macintosh Roman) is present:
+        //  • A character code is first mapped to a glyph name using the table described above.
+        //  • The glyph name is then mapped back to a character code according to the standard
+        //    Roman encoding used on Mac OS (see note below).
+        //  • Finally, the code is mapped to a glyph description according to the (1, 0) subtable."
+        // Implementor's note: We currently don't know which tables are present, so we for now we always
+        // use the (3, 1) algorithm.
+        // FIXME: Implement (1, 0) subtable support.
+        auto char_name = effective_encoding->get_name(char_code);
+        u32 unicode = glyph_name_to_unicode(char_name).value_or(char_code);
+        if (m_font->contains_glyph(unicode)) {
+            do_draw_glyph(painter, position, width, unicode, *m_font, style);
+            return {};
+        }
+
+        // "In either of the cases above, if the glyph name cannot be mapped as specified, the glyph name is looked up
+        //  in the font program’s “post” table (if one is present) and the associated glyph description is used."
+        // FIXME: Implement this.
+        return Error::rendering_unsupported_error("Looking up glyph in 'post' table not yet implemented.");
+    } else if (m_high_byte.has_value()) {
+        // "When the font has no Encoding entry, or the font descriptor’s Symbolic flag is set (in which case the
+        //  Encoding entry is ignored), the following occurs:
+        //
+        //  • If the font contains a (3, 0) subtable, the range of character codes must be one of the following:
+        //    0x0000 - 0x00FF, 0xF000 - 0xF0FF, 0xF100 - 0xF1FF, or 0xF200 - 0xF2FF. Depending on the range of codes,
+        //    each byte from the string is prepended with the high byte of the range, to form a two-byte character,
+        //    which is used to select the associated glyph description from the subtable.
+        //  • Otherwise, if the font contains a (1, 0) subtable, single bytes from the string are used to look up the
+        //    associated glyph descriptions from the subtable."
+        // Implementor's note: We currently don't know which tables are present, so we for now we always use the (3, 0) algorithm.
+        unicode = (m_high_byte.value() << 8) | char_code;
     } else {
-        // FIXME: Bounding box and sample point look to be pretty wrong
-        style.get<NonnullRefPtr<Gfx::PaintStyle>>()->paint(Gfx::IntRect(position.x(), position.y(), width, 0), [&](auto sample) {
-            painter.draw_glyph(position, char_code, *m_font, sample(Gfx::IntPoint(position.x(), position.y())));
-        });
+        // "If a character cannot be mapped in any of the ways described above, the results are implementation-dependent."
+        // FIXME: Do something smarter?
+        auto effective_encoding = encoding();
+        if (!effective_encoding)
+            effective_encoding = Encoding::standard_encoding();
+        auto char_name = effective_encoding->get_name(char_code);
+        unicode = glyph_name_to_unicode(char_name).value_or(char_code);
     }
+
+    do_draw_glyph(painter, position, width, unicode, *m_font, style);
     return {};
 }
 

+ 2 - 0
Userland/Libraries/LibPDF/Fonts/TrueTypeFont.h

@@ -26,6 +26,8 @@ protected:
 private:
     DeprecatedFlyString m_base_font_name;
     RefPtr<Gfx::Font> m_font;
+    bool m_encoding_is_mac_roman_or_win_ansi { false };
+    Optional<u8> m_high_byte;
 };
 
 }