diff options
author | Khaled Hosny <khaledhosny@eglug.org> | 2011-03-02 20:10:46 +0200 |
---|---|---|
committer | Khaled Hosny <khaledhosny@eglug.org> | 2011-03-02 20:57:11 +0200 |
commit | 654f5f46c8c7bc43b73ce46035f3f6c1d5e9bbe5 (patch) | |
tree | 3df613c3e05ca044d521bfc872f0d28028cb15f8 | |
parent | a0e1a5594231d9f3789c51f04fdfb24680ca2516 (diff) | |
download | luaotfload-654f5f46c8c7bc43b73ce46035f3f6c1d5e9bbe5.tar.gz |
Sync with ConTeXt 2011.02.25 22:03
This commit overrides all our local modification to ConTeXt file and is
not tested at all.
-rw-r--r-- | luaotfload.dtx | 31 | ||||
-rw-r--r-- | otfl-data-con.lua | 4 | ||||
-rw-r--r-- | otfl-font-age.lua | 3743 | ||||
-rw-r--r-- | otfl-font-agl.lua | 3699 | ||||
-rw-r--r-- | otfl-font-cid.lua | 2 | ||||
-rw-r--r-- | otfl-font-def.lua | 308 | ||||
-rw-r--r-- | otfl-font-dum.lua | 48 | ||||
-rw-r--r-- | otfl-font-ini.lua | 37 | ||||
-rw-r--r-- | otfl-font-lua.lua | 45 | ||||
-rw-r--r-- | otfl-font-map.lua | 10 | ||||
-rw-r--r-- | otfl-font-ota.lua | 2 | ||||
-rw-r--r-- | otfl-font-otb.lua | 2 | ||||
-rw-r--r-- | otfl-font-otc.lua | 24 | ||||
-rw-r--r-- | otfl-font-otd.lua | 4 | ||||
-rw-r--r-- | otfl-font-otf.lua | 225 | ||||
-rw-r--r-- | otfl-font-otn.lua | 14 | ||||
-rw-r--r-- | otfl-font-tfm.lua | 89 | ||||
-rw-r--r-- | otfl-font-xtx.lua | 142 | ||||
-rw-r--r-- | otfl-luat-dum.lua | 54 | ||||
-rw-r--r-- | otfl-node-inj.lua | 24 |
20 files changed, 4271 insertions, 4236 deletions
diff --git a/luaotfload.dtx b/luaotfload.dtx index 68750df..3fd9812 100644 --- a/luaotfload.dtx +++ b/luaotfload.dtx @@ -394,25 +394,27 @@ and the derived files % % \begin{multicols}{3} % \begin{itemize*} -% \item |luat-dum.lua| % \item |data-con.lua| -% \item |node-inj.lua| -% \item |node-dum.lua| -% \item |font-ini.lua| -% \item |font-tfm.lua| +% \item |font-age.lua| % \item |font-cid.lua| -% \item |font-ott.lua| -% \item |font-otf.lua| +% \item |font-def.lua| +% \item |font-dum.lua| +% \item |font-ini.lua| +% \item |font-lua.lua| +% \item |font-map.lua| +% \item |font-ota.lua| +% \item |font-otb.lua| +% \item |font-otc.lua| % \item |font-otd.lua| +% \item |font-otf.lua| % \item |font-oti.lua| -% \item |font-otb.lua| % \item |font-otn.lua| -% \item |font-ota.lua| -% \item |font-otc.lua| -% \item |font-def.lua| +% \item |font-ott.lua| +% \item |font-tfm.lua| % \item |font-xtx.lua| -% \item |font-map.lua| -% \item |font-dum.lua| +% \item |luat-dum.lua| +% \item |node-dum.lua| +% \item |node-inj.lua| % \end{itemize*} % \end{multicols} % @@ -570,6 +572,7 @@ luaotfload.loadmodule('font-tfm.lua') luaotfload.loadmodule('font-cid.lua') luaotfload.loadmodule('font-ott.lua') luaotfload.loadmodule('font-map.lua') +luaotfload.loadmodule('font-lua.lua') luaotfload.loadmodule('font-otf.lua') luaotfload.loadmodule('font-otd.lua') luaotfload.loadmodule('font-oti.lua') @@ -577,7 +580,7 @@ luaotfload.loadmodule('font-otb.lua') luaotfload.loadmodule('font-otn.lua') luaotfload.loadmodule('font-ota.lua') luaotfload.loadmodule('font-otc.lua') -luaotfload.loadmodule('font-agl.lua') +luaotfload.loadmodule('font-age.lua') luaotfload.loadmodule('font-def.lua') luaotfload.loadmodule('font-xtx.lua') luaotfload.loadmodule('font-dum.lua') diff --git a/otfl-data-con.lua b/otfl-data-con.lua index 5d9650f..ed4f2de 100644 --- a/otfl-data-con.lua +++ b/otfl-data-con.lua @@ -29,11 +29,11 @@ containers = containers or { } local containers = containers containers.usecache = true -local report_cache = logs.new("cache") +local report_containers = logs.reporter("resolvers","containers") local function report(container,tag,name) if trace_cache or trace_containers then - report_cache("container: %s, tag: %s, name: %s",container.subcategory,tag,name or 'invalid') + report_containers("container: %s, tag: %s, name: %s",container.subcategory,tag,name or 'invalid') end end diff --git a/otfl-font-age.lua b/otfl-font-age.lua new file mode 100644 index 0000000..5c19d41 --- /dev/null +++ b/otfl-font-age.lua @@ -0,0 +1,3743 @@ +if not modules then modules = { } end modules ['font-map'] = { + version = 1.001, + comment = "companion to font-ini.mkiv", + author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", + copyright = "derived from http://www.adobe.com/devnet/opentype/archives/glyphlist.txt", + original = "Adobe Glyph List, version 2.0, September 20, 2002", +} + +fonts = fonts or { } +fonts.enc = fonts.enc or { } +fonts.enc.agl = fonts.enc.agl or { } + +fonts.enc.agl.unicodes = { -- generated + ["A"]=65, + ["AE"]=198, + ["AEacute"]=508, + ["AEmacron"]=482, + ["Aacute"]=193, + ["Abreve"]=258, + ["Abreveacute"]=7854, + ["Abrevecyrillic"]=1232, + ["Abrevedotbelow"]=7862, + ["Abrevegrave"]=7856, + ["Abrevehookabove"]=7858, + ["Abrevetilde"]=7860, + ["Acaron"]=461, + ["Acircle"]=9398, + ["Acircumflex"]=194, + ["Acircumflexacute"]=7844, + ["Acircumflexdotbelow"]=7852, + ["Acircumflexgrave"]=7846, + ["Acircumflexhookabove"]=7848, + ["Acircumflextilde"]=7850, + ["Adblgrave"]=512, + ["Adieresis"]=196, + ["Adieresiscyrillic"]=1234, + ["Adieresismacron"]=478, + ["Adotbelow"]=7840, + ["Adotmacron"]=480, + ["Agrave"]=192, + ["Ahookabove"]=7842, + ["Aiecyrillic"]=1236, + ["Ainvertedbreve"]=514, + ["Alpha"]=913, + ["Alphatonos"]=902, + ["Amacron"]=256, + ["Amonospace"]=65313, + ["Aogonek"]=260, + ["Aring"]=197, + ["Aringacute"]=506, + ["Aringbelow"]=7680, + ["Atilde"]=195, + ["Aybarmenian"]=1329, + ["B"]=66, + ["Bcircle"]=9399, + ["Bdotaccent"]=7682, + ["Bdotbelow"]=7684, + ["Benarmenian"]=1330, + ["Beta"]=914, + ["Bhook"]=385, + ["Blinebelow"]=7686, + ["Bmonospace"]=65314, + ["Btopbar"]=386, + ["C"]=67, + ["Caarmenian"]=1342, + ["Cacute"]=262, + ["Ccaron"]=268, + ["Ccedilla"]=199, + ["Ccedillaacute"]=7688, + ["Ccircle"]=9400, + ["Ccircumflex"]=264, + ["Cdotaccent"]=266, + ["Chaarmenian"]=1353, + ["Cheabkhasiancyrillic"]=1212, + ["Chedescenderabkhasiancyrillic"]=1214, + ["Chedescendercyrillic"]=1206, + ["Chedieresiscyrillic"]=1268, + ["Cheharmenian"]=1347, + ["Chekhakassiancyrillic"]=1227, + ["Cheverticalstrokecyrillic"]=1208, + ["Chi"]=935, + ["Chook"]=391, + ["Cmonospace"]=65315, + ["Coarmenian"]=1361, + ["D"]=68, + ["DZ"]=497, + ["DZcaron"]=452, + ["Daarmenian"]=1332, + ["Dafrican"]=393, + ["Dcaron"]=270, + ["Dcedilla"]=7696, + ["Dcircle"]=9401, + ["Dcircumflexbelow"]=7698, + ["Ddotaccent"]=7690, + ["Ddotbelow"]=7692, + ["Deicoptic"]=1006, + ["Deltagreek"]=916, + ["Dhook"]=394, + ["Digammagreek"]=988, + ["Dlinebelow"]=7694, + ["Dmonospace"]=65316, + ["Dslash"]=272, + ["Dtopbar"]=395, + ["Dz"]=498, + ["Dzcaron"]=453, + ["Dzeabkhasiancyrillic"]=1248, + ["E"]=69, + ["Eacute"]=201, + ["Ebreve"]=276, + ["Ecaron"]=282, + ["Ecedillabreve"]=7708, + ["Echarmenian"]=1333, + ["Ecircle"]=9402, + ["Ecircumflex"]=202, + ["Ecircumflexacute"]=7870, + ["Ecircumflexbelow"]=7704, + ["Ecircumflexdotbelow"]=7878, + ["Ecircumflexgrave"]=7872, + ["Ecircumflexhookabove"]=7874, + ["Ecircumflextilde"]=7876, + ["Edblgrave"]=516, + ["Edieresis"]=203, + ["Edotaccent"]=278, + ["Edotbelow"]=7864, + ["Egrave"]=200, + ["Eharmenian"]=1335, + ["Ehookabove"]=7866, + ["Eightroman"]=8551, + ["Einvertedbreve"]=518, + ["Eiotifiedcyrillic"]=1124, + ["Elevenroman"]=8554, + ["Emacron"]=274, + ["Emacronacute"]=7702, + ["Emacrongrave"]=7700, + ["Emonospace"]=65317, + ["Endescendercyrillic"]=1186, + ["Eng"]=330, + ["Enghecyrillic"]=1188, + ["Enhookcyrillic"]=1223, + ["Eogonek"]=280, + ["Eopen"]=400, + ["Epsilon"]=917, + ["Epsilontonos"]=904, + ["Ereversed"]=398, + ["Esdescendercyrillic"]=1194, + ["Esh"]=425, + ["Eta"]=919, + ["Etarmenian"]=1336, + ["Etatonos"]=905, + ["Eth"]=208, + ["Etilde"]=7868, + ["Etildebelow"]=7706, + ["Ezh"]=439, + ["Ezhcaron"]=494, + ["Ezhreversed"]=440, + ["F"]=70, + ["Fcircle"]=9403, + ["Fdotaccent"]=7710, + ["Feharmenian"]=1366, + ["Feicoptic"]=996, + ["Fhook"]=401, + ["Fiveroman"]=8548, + ["Fmonospace"]=65318, + ["Fourroman"]=8547, + ["G"]=71, + ["GBsquare"]=13191, + ["Gacute"]=500, + ["Gamma"]=915, + ["Gammaafrican"]=404, + ["Gangiacoptic"]=1002, + ["Gbreve"]=286, + ["Gcaron"]=486, + ["Gcircle"]=9404, + ["Gcircumflex"]=284, + ["Gcommaaccent"]=290, + ["Gdotaccent"]=288, + ["Ghadarmenian"]=1346, + ["Ghemiddlehookcyrillic"]=1172, + ["Ghestrokecyrillic"]=1170, + ["Ghook"]=403, + ["Gimarmenian"]=1331, + ["Gmacron"]=7712, + ["Gmonospace"]=65319, + ["Gsmallhook"]=667, + ["Gstroke"]=484, + ["H"]=72, + ["HPsquare"]=13259, + ["Haabkhasiancyrillic"]=1192, + ["Hadescendercyrillic"]=1202, + ["Hbar"]=294, + ["Hbrevebelow"]=7722, + ["Hcedilla"]=7720, + ["Hcircle"]=9405, + ["Hcircumflex"]=292, + ["Hdieresis"]=7718, + ["Hdotaccent"]=7714, + ["Hdotbelow"]=7716, + ["Hmonospace"]=65320, + ["Hoarmenian"]=1344, + ["Horicoptic"]=1000, + ["Hzsquare"]=13200, + ["I"]=73, + ["IJ"]=306, + ["Iacute"]=205, + ["Ibreve"]=300, + ["Icaron"]=463, + ["Icircle"]=9406, + ["Icircumflex"]=206, + ["Idblgrave"]=520, + ["Idieresis"]=207, + ["Idieresisacute"]=7726, + ["Idieresiscyrillic"]=1252, + ["Idotaccent"]=304, + ["Idotbelow"]=7882, + ["Iebrevecyrillic"]=1238, + ["Ifraktur"]=8465, + ["Igrave"]=204, + ["Ihookabove"]=7880, + ["Iinvertedbreve"]=522, + ["Imacron"]=298, + ["Imacroncyrillic"]=1250, + ["Imonospace"]=65321, + ["Iniarmenian"]=1339, + ["Iogonek"]=302, + ["Iota"]=921, + ["Iotaafrican"]=406, + ["Iotadieresis"]=938, + ["Iotatonos"]=906, + ["Istroke"]=407, + ["Itilde"]=296, + ["Itildebelow"]=7724, + ["Izhitsadblgravecyrillic"]=1142, + ["J"]=74, + ["Jaarmenian"]=1345, + ["Jcircle"]=9407, + ["Jcircumflex"]=308, + ["Jheharmenian"]=1355, + ["Jmonospace"]=65322, + ["K"]=75, + ["KBsquare"]=13189, + ["KKsquare"]=13261, + ["Kabashkircyrillic"]=1184, + ["Kacute"]=7728, + ["Kadescendercyrillic"]=1178, + ["Kahookcyrillic"]=1219, + ["Kappa"]=922, + ["Kastrokecyrillic"]=1182, + ["Kaverticalstrokecyrillic"]=1180, + ["Kcaron"]=488, + ["Kcircle"]=9408, + ["Kcommaaccent"]=310, + ["Kdotbelow"]=7730, + ["Keharmenian"]=1364, + ["Kenarmenian"]=1343, + ["Kheicoptic"]=998, + ["Khook"]=408, + ["Klinebelow"]=7732, + ["Kmonospace"]=65323, + ["Koppacyrillic"]=1152, + ["Koppagreek"]=990, + ["Ksicyrillic"]=1134, + ["L"]=76, + ["LJ"]=455, + ["Lacute"]=313, + ["Lambda"]=923, + ["Lcaron"]=317, + ["Lcircle"]=9409, + ["Lcircumflexbelow"]=7740, + ["Lcommaaccent"]=315, + ["Ldotaccent"]=319, + ["Ldotbelow"]=7734, + ["Ldotbelowmacron"]=7736, + ["Liwnarmenian"]=1340, + ["Lj"]=456, + ["Llinebelow"]=7738, + ["Lmonospace"]=65324, + ["Lslash"]=321, + ["M"]=77, + ["MBsquare"]=13190, + ["Macute"]=7742, + ["Mcircle"]=9410, + ["Mdotaccent"]=7744, + ["Mdotbelow"]=7746, + ["Menarmenian"]=1348, + ["Mmonospace"]=65325, + ["Mturned"]=412, + ["Mu"]=924, + ["N"]=78, + ["NJ"]=458, + ["Nacute"]=323, + ["Ncaron"]=327, + ["Ncircle"]=9411, + ["Ncircumflexbelow"]=7754, + ["Ncommaaccent"]=325, + ["Ndotaccent"]=7748, + ["Ndotbelow"]=7750, + ["Nhookleft"]=413, + ["Nineroman"]=8552, + ["Nj"]=459, + ["Nlinebelow"]=7752, + ["Nmonospace"]=65326, + ["Nowarmenian"]=1350, + ["Ntilde"]=209, + ["Nu"]=925, + ["O"]=79, + ["OE"]=338, + ["Oacute"]=211, + ["Obarredcyrillic"]=1256, + ["Obarreddieresiscyrillic"]=1258, + ["Obreve"]=334, + ["Ocaron"]=465, + ["Ocenteredtilde"]=415, + ["Ocircle"]=9412, + ["Ocircumflex"]=212, + ["Ocircumflexacute"]=7888, + ["Ocircumflexdotbelow"]=7896, + ["Ocircumflexgrave"]=7890, + ["Ocircumflexhookabove"]=7892, + ["Ocircumflextilde"]=7894, + ["Odblgrave"]=524, + ["Odieresis"]=214, + ["Odieresiscyrillic"]=1254, + ["Odotbelow"]=7884, + ["Ograve"]=210, + ["Oharmenian"]=1365, + ["Ohookabove"]=7886, + ["Ohorn"]=416, + ["Ohornacute"]=7898, + ["Ohorndotbelow"]=7906, + ["Ohorngrave"]=7900, + ["Ohornhookabove"]=7902, + ["Ohorntilde"]=7904, + ["Ohungarumlaut"]=336, + ["Oi"]=418, + ["Oinvertedbreve"]=526, + ["Omacron"]=332, + ["Omacronacute"]=7762, + ["Omacrongrave"]=7760, + ["Omega"]=8486, + ["Omegacyrillic"]=1120, + ["Omegagreek"]=937, + ["Omegaroundcyrillic"]=1146, + ["Omegatitlocyrillic"]=1148, + ["Omegatonos"]=911, + ["Omicron"]=927, + ["Omicrontonos"]=908, + ["Omonospace"]=65327, + ["Oneroman"]=8544, + ["Oogonek"]=490, + ["Oogonekmacron"]=492, + ["Oopen"]=390, + ["Oslash"]=216, + ["Ostrokeacute"]=510, + ["Otcyrillic"]=1150, + ["Otilde"]=213, + ["Otildeacute"]=7756, + ["Otildedieresis"]=7758, + ["P"]=80, + ["Pacute"]=7764, + ["Pcircle"]=9413, + ["Pdotaccent"]=7766, + ["Peharmenian"]=1354, + ["Pemiddlehookcyrillic"]=1190, + ["Phi"]=934, + ["Phook"]=420, + ["Pi"]=928, + ["Piwrarmenian"]=1363, + ["Pmonospace"]=65328, + ["Psi"]=936, + ["Psicyrillic"]=1136, + ["Q"]=81, + ["Qcircle"]=9414, + ["Qmonospace"]=65329, + ["R"]=82, + ["Raarmenian"]=1356, + ["Racute"]=340, + ["Rcaron"]=344, + ["Rcircle"]=9415, + ["Rcommaaccent"]=342, + ["Rdblgrave"]=528, + ["Rdotaccent"]=7768, + ["Rdotbelow"]=7770, + ["Rdotbelowmacron"]=7772, + ["Reharmenian"]=1360, + ["Rfraktur"]=8476, + ["Rho"]=929, + ["Rinvertedbreve"]=530, + ["Rlinebelow"]=7774, + ["Rmonospace"]=65330, + ["Rsmallinverted"]=641, + ["Rsmallinvertedsuperior"]=694, + ["S"]=83, + ["SF010000"]=9484, + ["SF020000"]=9492, + ["SF030000"]=9488, + ["SF040000"]=9496, + ["SF050000"]=9532, + ["SF060000"]=9516, + ["SF070000"]=9524, + ["SF080000"]=9500, + ["SF090000"]=9508, + ["SF100000"]=9472, + ["SF110000"]=9474, + ["SF190000"]=9569, + ["SF200000"]=9570, + ["SF210000"]=9558, + ["SF220000"]=9557, + ["SF230000"]=9571, + ["SF240000"]=9553, + ["SF250000"]=9559, + ["SF260000"]=9565, + ["SF270000"]=9564, + ["SF280000"]=9563, + ["SF360000"]=9566, + ["SF370000"]=9567, + ["SF380000"]=9562, + ["SF390000"]=9556, + ["SF400000"]=9577, + ["SF410000"]=9574, + ["SF420000"]=9568, + ["SF430000"]=9552, + ["SF440000"]=9580, + ["SF450000"]=9575, + ["SF460000"]=9576, + ["SF470000"]=9572, + ["SF480000"]=9573, + ["SF490000"]=9561, + ["SF500000"]=9560, + ["SF510000"]=9554, + ["SF520000"]=9555, + ["SF530000"]=9579, + ["SF540000"]=9578, + ["Sacute"]=346, + ["Sacutedotaccent"]=7780, + ["Sampigreek"]=992, + ["Scaron"]=352, + ["Scarondotaccent"]=7782, + ["Scedilla"]=350, + ["Schwa"]=399, + ["Schwacyrillic"]=1240, + ["Schwadieresiscyrillic"]=1242, + ["Scircle"]=9416, + ["Scircumflex"]=348, + ["Scommaaccent"]=536, + ["Sdotaccent"]=7776, + ["Sdotbelow"]=7778, + ["Sdotbelowdotaccent"]=7784, + ["Seharmenian"]=1357, + ["Sevenroman"]=8550, + ["Shaarmenian"]=1351, + ["Sheicoptic"]=994, + ["Shhacyrillic"]=1210, + ["Shimacoptic"]=1004, + ["Sigma"]=931, + ["Sixroman"]=8549, + ["Smonospace"]=65331, + ["Stigmagreek"]=986, + ["T"]=84, + ["Tau"]=932, + ["Tbar"]=358, + ["Tcaron"]=356, + ["Tcircle"]=9417, + ["Tcircumflexbelow"]=7792, + ["Tcommaaccent"]=354, + ["Tdotaccent"]=7786, + ["Tdotbelow"]=7788, + ["Tedescendercyrillic"]=1196, + ["Tenroman"]=8553, + ["Tetsecyrillic"]=1204, + ["Theta"]=920, + ["Thook"]=428, + ["Thorn"]=222, + ["Threeroman"]=8546, + ["Tiwnarmenian"]=1359, + ["Tlinebelow"]=7790, + ["Tmonospace"]=65332, + ["Toarmenian"]=1337, + ["Tonefive"]=444, + ["Tonesix"]=388, + ["Tonetwo"]=423, + ["Tretroflexhook"]=430, + ["Twelveroman"]=8555, + ["Tworoman"]=8545, + ["U"]=85, + ["Uacute"]=218, + ["Ubreve"]=364, + ["Ucaron"]=467, + ["Ucircle"]=9418, + ["Ucircumflex"]=219, + ["Ucircumflexbelow"]=7798, + ["Udblgrave"]=532, + ["Udieresis"]=220, + ["Udieresisacute"]=471, + ["Udieresisbelow"]=7794, + ["Udieresiscaron"]=473, + ["Udieresiscyrillic"]=1264, + ["Udieresisgrave"]=475, + ["Udieresismacron"]=469, + ["Udotbelow"]=7908, + ["Ugrave"]=217, + ["Uhookabove"]=7910, + ["Uhorn"]=431, + ["Uhornacute"]=7912, + ["Uhorndotbelow"]=7920, + ["Uhorngrave"]=7914, + ["Uhornhookabove"]=7916, + ["Uhorntilde"]=7918, + ["Uhungarumlaut"]=368, + ["Uhungarumlautcyrillic"]=1266, + ["Uinvertedbreve"]=534, + ["Ukcyrillic"]=1144, + ["Umacron"]=362, + ["Umacroncyrillic"]=1262, + ["Umacrondieresis"]=7802, + ["Umonospace"]=65333, + ["Uogonek"]=370, + ["Upsilon"]=933, + ["Upsilonacutehooksymbolgreek"]=979, + ["Upsilonafrican"]=433, + ["Upsilondieresis"]=939, + ["Upsilondieresishooksymbolgreek"]=980, + ["Upsilonhooksymbol"]=978, + ["Upsilontonos"]=910, + ["Uring"]=366, + ["Ustraightcyrillic"]=1198, + ["Ustraightstrokecyrillic"]=1200, + ["Utilde"]=360, + ["Utildeacute"]=7800, + ["Utildebelow"]=7796, + ["V"]=86, + ["Vcircle"]=9419, + ["Vdotbelow"]=7806, + ["Vewarmenian"]=1358, + ["Vhook"]=434, + ["Vmonospace"]=65334, + ["Voarmenian"]=1352, + ["Vtilde"]=7804, + ["W"]=87, + ["Wacute"]=7810, + ["Wcircle"]=9420, + ["Wcircumflex"]=372, + ["Wdieresis"]=7812, + ["Wdotaccent"]=7814, + ["Wdotbelow"]=7816, + ["Wgrave"]=7808, + ["Wmonospace"]=65335, + ["X"]=88, + ["Xcircle"]=9421, + ["Xdieresis"]=7820, + ["Xdotaccent"]=7818, + ["Xeharmenian"]=1341, + ["Xi"]=926, + ["Xmonospace"]=65336, + ["Y"]=89, + ["Yacute"]=221, + ["Ycircle"]=9422, + ["Ycircumflex"]=374, + ["Ydieresis"]=376, + ["Ydotaccent"]=7822, + ["Ydotbelow"]=7924, + ["Yerudieresiscyrillic"]=1272, + ["Ygrave"]=7922, + ["Yhook"]=435, + ["Yhookabove"]=7926, + ["Yiarmenian"]=1349, + ["Yiwnarmenian"]=1362, + ["Ymonospace"]=65337, + ["Ytilde"]=7928, + ["Yusbigcyrillic"]=1130, + ["Yusbigiotifiedcyrillic"]=1132, + ["Yuslittlecyrillic"]=1126, + ["Yuslittleiotifiedcyrillic"]=1128, + ["Z"]=90, + ["Zaarmenian"]=1334, + ["Zacute"]=377, + ["Zcaron"]=381, + ["Zcircle"]=9423, + ["Zcircumflex"]=7824, + ["Zdotaccent"]=379, + ["Zdotbelow"]=7826, + ["Zedescendercyrillic"]=1176, + ["Zedieresiscyrillic"]=1246, + ["Zeta"]=918, + ["Zhearmenian"]=1338, + ["Zhebrevecyrillic"]=1217, + ["Zhedescendercyrillic"]=1174, + ["Zhedieresiscyrillic"]=1244, + ["Zlinebelow"]=7828, + ["Zmonospace"]=65338, + ["Zstroke"]=437, + ["a"]=97, + ["aabengali"]=2438, + ["aacute"]=225, + ["aadeva"]=2310, + ["aagujarati"]=2694, + ["aagurmukhi"]=2566, + ["aamatragurmukhi"]=2622, + ["aarusquare"]=13059, + ["aavowelsignbengali"]=2494, + ["aavowelsigndeva"]=2366, + ["aavowelsigngujarati"]=2750, + ["abbreviationmarkarmenian"]=1375, + ["abbreviationsigndeva"]=2416, + ["abengali"]=2437, + ["abopomofo"]=12570, + ["abreve"]=259, + ["abreveacute"]=7855, + ["abrevecyrillic"]=1233, + ["abrevedotbelow"]=7863, + ["abrevegrave"]=7857, + ["abrevehookabove"]=7859, + ["abrevetilde"]=7861, + ["acaron"]=462, + ["acircle"]=9424, + ["acircumflex"]=226, + ["acircumflexacute"]=7845, + ["acircumflexdotbelow"]=7853, + ["acircumflexgrave"]=7847, + ["acircumflexhookabove"]=7849, + ["acircumflextilde"]=7851, + ["acute"]=180, + ["acutebelowcmb"]=791, + ["acutecomb"]=769, + ["acutedeva"]=2388, + ["acutelowmod"]=719, + ["acutetonecmb"]=833, + ["adblgrave"]=513, + ["addakgurmukhi"]=2673, + ["adeva"]=2309, + ["adieresis"]=228, + ["adieresiscyrillic"]=1235, + ["adieresismacron"]=479, + ["adotbelow"]=7841, + ["adotmacron"]=481, + ["ae"]=230, + ["aeacute"]=509, + ["aekorean"]=12624, + ["aemacron"]=483, + ["afii10017"]=1040, + ["afii10018"]=1041, + ["afii10019"]=1042, + ["afii10020"]=1043, + ["afii10021"]=1044, + ["afii10022"]=1045, + ["afii10023"]=1025, + ["afii10024"]=1046, + ["afii10025"]=1047, + ["afii10026"]=1048, + ["afii10027"]=1049, + ["afii10028"]=1050, + ["afii10029"]=1051, + ["afii10030"]=1052, + ["afii10031"]=1053, + ["afii10032"]=1054, + ["afii10033"]=1055, + ["afii10034"]=1056, + ["afii10035"]=1057, + ["afii10036"]=1058, + ["afii10037"]=1059, + ["afii10038"]=1060, + ["afii10039"]=1061, + ["afii10040"]=1062, + ["afii10041"]=1063, + ["afii10042"]=1064, + ["afii10043"]=1065, + ["afii10044"]=1066, + ["afii10045"]=1067, + ["afii10046"]=1068, + ["afii10047"]=1069, + ["afii10048"]=1070, + ["afii10049"]=1071, + ["afii10050"]=1168, + ["afii10051"]=1026, + ["afii10052"]=1027, + ["afii10053"]=1028, + ["afii10054"]=1029, + ["afii10055"]=1030, + ["afii10056"]=1031, + ["afii10057"]=1032, + ["afii10058"]=1033, + ["afii10059"]=1034, + ["afii10060"]=1035, + ["afii10061"]=1036, + ["afii10062"]=1038, + ["afii10065"]=1072, + ["afii10145"]=1039, + ["afii10146"]=1122, + ["afii10147"]=1138, + ["afii10148"]=1140, + ["afii299"]=8206, + ["afii300"]=8207, + ["afii301"]=8205, + ["afii57534"]=1749, + ["afii61573"]=8236, + ["afii61574"]=8237, + ["afii61575"]=8238, + ["agrave"]=224, + ["agujarati"]=2693, + ["agurmukhi"]=2565, + ["ahiragana"]=12354, + ["ahookabove"]=7843, + ["aibengali"]=2448, + ["aibopomofo"]=12574, + ["aideva"]=2320, + ["aiecyrillic"]=1237, + ["aigujarati"]=2704, + ["aigurmukhi"]=2576, + ["aimatragurmukhi"]=2632, + ["ainarabic"]=1593, + ["ainfinalarabic"]=65226, + ["aininitialarabic"]=65227, + ["ainmedialarabic"]=65228, + ["ainvertedbreve"]=515, + ["aivowelsignbengali"]=2504, + ["aivowelsigndeva"]=2376, + ["aivowelsigngujarati"]=2760, + ["akatakana"]=12450, + ["akatakanahalfwidth"]=65393, + ["akorean"]=12623, + ["alefarabic"]=1575, + ["alefdageshhebrew"]=64304, + ["aleffinalarabic"]=65166, + ["alefhamzaabovearabic"]=1571, + ["alefhamzaabovefinalarabic"]=65156, + ["alefhamzabelowarabic"]=1573, + ["alefhamzabelowfinalarabic"]=65160, + ["alefhebrew"]=1488, + ["aleflamedhebrew"]=64335, + ["alefmaddaabovearabic"]=1570, + ["alefmaddaabovefinalarabic"]=65154, + ["alefmaksuraarabic"]=1609, + ["alefmaksurafinalarabic"]=65264, + ["alefpatahhebrew"]=64302, + ["alefqamatshebrew"]=64303, + ["aleph"]=8501, + ["allequal"]=8780, + ["alpha"]=945, + ["alphatonos"]=940, + ["amacron"]=257, + ["amonospace"]=65345, + ["ampersand"]=38, + ["ampersandmonospace"]=65286, + ["amsquare"]=13250, + ["anbopomofo"]=12578, + ["angbopomofo"]=12580, + ["angkhankhuthai"]=3674, + ["angle"]=8736, + ["anglebracketleft"]=12296, + ["anglebracketleftvertical"]=65087, + ["anglebracketright"]=12297, + ["anglebracketrightvertical"]=65088, + ["angleleft"]=9001, + ["angleright"]=9002, + ["angstrom"]=8491, + ["anoteleia"]=903, + ["anudattadeva"]=2386, + ["anusvarabengali"]=2434, + ["anusvaradeva"]=2306, + ["anusvaragujarati"]=2690, + ["aogonek"]=261, + ["apaatosquare"]=13056, + ["aparen"]=9372, + ["apostrophearmenian"]=1370, + ["apostrophemod"]=700, + ["apple"]=63743, + ["approaches"]=8784, + ["approxequal"]=8776, + ["approxequalorimage"]=8786, + ["araeaekorean"]=12686, + ["araeakorean"]=12685, + ["arc"]=8978, + ["arighthalfring"]=7834, + ["aring"]=229, + ["aringacute"]=507, + ["aringbelow"]=7681, + ["arrowboth"]=8596, + ["arrowdashdown"]=8675, + ["arrowdashleft"]=8672, + ["arrowdashright"]=8674, + ["arrowdashup"]=8673, + ["arrowdbldown"]=8659, + ["arrowdblup"]=8657, + ["arrowdown"]=8595, + ["arrowdownleft"]=8601, + ["arrowdownright"]=8600, + ["arrowdownwhite"]=8681, + ["arrowheaddownmod"]=709, + ["arrowheadleftmod"]=706, + ["arrowheadrightmod"]=707, + ["arrowheadupmod"]=708, + ["arrowleft"]=8592, + ["arrowleftdbl"]=8656, + ["arrowleftdblstroke"]=8653, + ["arrowleftoverright"]=8646, + ["arrowleftwhite"]=8678, + ["arrowright"]=8594, + ["arrowrightdblstroke"]=8655, + ["arrowrightheavy"]=10142, + ["arrowrightoverleft"]=8644, + ["arrowrightwhite"]=8680, + ["arrowtableft"]=8676, + ["arrowtabright"]=8677, + ["arrowup"]=8593, + ["arrowupdn"]=8597, + ["arrowupdownbase"]=8616, + ["arrowupleft"]=8598, + ["arrowupleftofdown"]=8645, + ["arrowupright"]=8599, + ["arrowupwhite"]=8679, + ["asciicircum"]=94, + ["asciicircummonospace"]=65342, + ["asciitilde"]=126, + ["asciitildemonospace"]=65374, + ["ascript"]=593, + ["ascriptturned"]=594, + ["asmallhiragana"]=12353, + ["asmallkatakana"]=12449, + ["asmallkatakanahalfwidth"]=65383, + ["asterisk"]=42, + ["asteriskarabic"]=1645, + ["asteriskmath"]=8727, + ["asteriskmonospace"]=65290, + ["asterisksmall"]=65121, + ["asterism"]=8258, + ["asymptoticallyequal"]=8771, + ["at"]=64, + ["atilde"]=227, + ["atmonospace"]=65312, + ["atsmall"]=65131, + ["aturned"]=592, + ["aubengali"]=2452, + ["aubopomofo"]=12576, + ["audeva"]=2324, + ["augujarati"]=2708, + ["augurmukhi"]=2580, + ["aulengthmarkbengali"]=2519, + ["aumatragurmukhi"]=2636, + ["auvowelsignbengali"]=2508, + ["auvowelsigndeva"]=2380, + ["auvowelsigngujarati"]=2764, + ["avagrahadeva"]=2365, + ["aybarmenian"]=1377, + ["ayinaltonehebrew"]=64288, + ["ayinhebrew"]=1506, + ["b"]=98, + ["babengali"]=2476, + ["backslash"]=92, + ["backslashmonospace"]=65340, + ["badeva"]=2348, + ["bagujarati"]=2732, + ["bagurmukhi"]=2604, + ["bahiragana"]=12400, + ["bahtthai"]=3647, + ["bakatakana"]=12496, + ["barmonospace"]=65372, + ["bbopomofo"]=12549, + ["bcircle"]=9425, + ["bdotaccent"]=7683, + ["bdotbelow"]=7685, + ["beamedsixteenthnotes"]=9836, + ["because"]=8757, + ["becyrillic"]=1073, + ["beharabic"]=1576, + ["behfinalarabic"]=65168, + ["behinitialarabic"]=65169, + ["behiragana"]=12409, + ["behmedialarabic"]=65170, + ["behmeeminitialarabic"]=64671, + ["behmeemisolatedarabic"]=64520, + ["behnoonfinalarabic"]=64621, + ["bekatakana"]=12505, + ["benarmenian"]=1378, + ["beta"]=946, + ["betasymbolgreek"]=976, + ["betdageshhebrew"]=64305, + ["bethebrew"]=1489, + ["betrafehebrew"]=64332, + ["bhabengali"]=2477, + ["bhadeva"]=2349, + ["bhagujarati"]=2733, + ["bhagurmukhi"]=2605, + ["bhook"]=595, + ["bihiragana"]=12403, + ["bikatakana"]=12499, + ["bilabialclick"]=664, + ["bindigurmukhi"]=2562, + ["birusquare"]=13105, + ["blackcircle"]=9679, + ["blackdiamond"]=9670, + ["blackleftpointingtriangle"]=9664, + ["blacklenticularbracketleft"]=12304, + ["blacklenticularbracketleftvertical"]=65083, + ["blacklenticularbracketright"]=12305, + ["blacklenticularbracketrightvertical"]=65084, + ["blacklowerlefttriangle"]=9699, + ["blacklowerrighttriangle"]=9698, + ["blackrightpointingtriangle"]=9654, + ["blacksmallsquare"]=9642, + ["blackstar"]=9733, + ["blackupperlefttriangle"]=9700, + ["blackupperrighttriangle"]=9701, + ["blackuppointingsmalltriangle"]=9652, + ["blank"]=9251, + ["blinebelow"]=7687, + ["block"]=9608, + ["bmonospace"]=65346, + ["bobaimaithai"]=3610, + ["bohiragana"]=12412, + ["bokatakana"]=12508, + ["bparen"]=9373, + ["bqsquare"]=13251, + ["braceleft"]=123, + ["braceleftmonospace"]=65371, + ["braceleftsmall"]=65115, + ["braceleftvertical"]=65079, + ["braceright"]=125, + ["bracerightmonospace"]=65373, + ["bracerightsmall"]=65116, + ["bracerightvertical"]=65080, + ["bracketleft"]=91, + ["bracketleftmonospace"]=65339, + ["bracketright"]=93, + ["bracketrightmonospace"]=65341, + ["breve"]=728, + ["brevebelowcmb"]=814, + ["brevecmb"]=774, + ["breveinvertedbelowcmb"]=815, + ["breveinvertedcmb"]=785, + ["breveinverteddoublecmb"]=865, + ["bridgebelowcmb"]=810, + ["bridgeinvertedbelowcmb"]=826, + ["brokenbar"]=166, + ["bstroke"]=384, + ["btopbar"]=387, + ["buhiragana"]=12406, + ["bukatakana"]=12502, + ["bullet"]=8226, + ["bulletoperator"]=8729, + ["bullseye"]=9678, + ["c"]=99, + ["caarmenian"]=1390, + ["cabengali"]=2458, + ["cacute"]=263, + ["cadeva"]=2330, + ["cagujarati"]=2714, + ["cagurmukhi"]=2586, + ["calsquare"]=13192, + ["candrabindubengali"]=2433, + ["candrabinducmb"]=784, + ["candrabindudeva"]=2305, + ["candrabindugujarati"]=2689, + ["capslock"]=8682, + ["careof"]=8453, + ["caron"]=711, + ["caronbelowcmb"]=812, + ["caroncmb"]=780, + ["carriagereturn"]=8629, + ["cbopomofo"]=12568, + ["ccaron"]=269, + ["ccedilla"]=231, + ["ccedillaacute"]=7689, + ["ccircle"]=9426, + ["ccircumflex"]=265, + ["ccurl"]=597, + ["cdotaccent"]=267, + ["cdsquare"]=13253, + ["cedilla"]=184, + ["cedillacmb"]=807, + ["cent"]=162, + ["centigrade"]=8451, + ["centmonospace"]=65504, + ["chaarmenian"]=1401, + ["chabengali"]=2459, + ["chadeva"]=2331, + ["chagujarati"]=2715, + ["chagurmukhi"]=2587, + ["chbopomofo"]=12564, + ["cheabkhasiancyrillic"]=1213, + ["checkmark"]=10003, + ["checyrillic"]=1095, + ["chedescenderabkhasiancyrillic"]=1215, + ["chedescendercyrillic"]=1207, + ["chedieresiscyrillic"]=1269, + ["cheharmenian"]=1395, + ["chekhakassiancyrillic"]=1228, + ["cheverticalstrokecyrillic"]=1209, + ["chi"]=967, + ["chieuchacirclekorean"]=12919, + ["chieuchaparenkorean"]=12823, + ["chieuchcirclekorean"]=12905, + ["chieuchkorean"]=12618, + ["chieuchparenkorean"]=12809, + ["chochangthai"]=3594, + ["chochanthai"]=3592, + ["chochingthai"]=3593, + ["chochoethai"]=3596, + ["chook"]=392, + ["cieucacirclekorean"]=12918, + ["cieucaparenkorean"]=12822, + ["cieuccirclekorean"]=12904, + ["cieuckorean"]=12616, + ["cieucparenkorean"]=12808, + ["cieucuparenkorean"]=12828, + ["circleot"]=8857, + ["circlepostalmark"]=12342, + ["circlewithlefthalfblack"]=9680, + ["circlewithrighthalfblack"]=9681, + ["circumflex"]=710, + ["circumflexbelowcmb"]=813, + ["circumflexcmb"]=770, + ["clear"]=8999, + ["clickalveolar"]=450, + ["clickdental"]=448, + ["clicklateral"]=449, + ["clickretroflex"]=451, + ["clubsuitblack"]=9827, + ["clubsuitwhite"]=9831, + ["cmcubedsquare"]=13220, + ["cmonospace"]=65347, + ["cmsquaredsquare"]=13216, + ["coarmenian"]=1409, + ["colon"]=58, + ["colonmonospace"]=65306, + ["colonsign"]=8353, + ["colonsmall"]=65109, + ["colontriangularhalfmod"]=721, + ["colontriangularmod"]=720, + ["comma"]=44, + ["commaabovecmb"]=787, + ["commaaboverightcmb"]=789, + ["commaarabic"]=1548, + ["commaarmenian"]=1373, + ["commamonospace"]=65292, + ["commareversedabovecmb"]=788, + ["commareversedmod"]=701, + ["commasmall"]=65104, + ["commaturnedabovecmb"]=786, + ["commaturnedmod"]=699, + ["congruent"]=8773, + ["contourintegral"]=8750, + ["control"]=8963, + ["controlACK"]=6, + ["controlBEL"]=7, + ["controlBS"]=8, + ["controlCAN"]=24, + ["controlCR"]=13, + ["controlDC1"]=17, + ["controlDC2"]=18, + ["controlDC3"]=19, + ["controlDC4"]=20, + ["controlDEL"]=127, + ["controlDLE"]=16, + ["controlEM"]=25, + ["controlENQ"]=5, + ["controlEOT"]=4, + ["controlESC"]=27, + ["controlETB"]=23, + ["controlETX"]=3, + ["controlFF"]=12, + ["controlFS"]=28, + ["controlGS"]=29, + ["controlHT"]=9, + ["controlLF"]=10, + ["controlNAK"]=21, + ["controlRS"]=30, + ["controlSI"]=15, + ["controlSO"]=14, + ["controlSOT"]=2, + ["controlSTX"]=1, + ["controlSUB"]=26, + ["controlSYN"]=22, + ["controlUS"]=31, + ["controlVT"]=11, + ["copyright"]=169, + ["cornerbracketleft"]=12300, + ["cornerbracketlefthalfwidth"]=65378, + ["cornerbracketleftvertical"]=65089, + ["cornerbracketright"]=12301, + ["cornerbracketrighthalfwidth"]=65379, + ["cornerbracketrightvertical"]=65090, + ["corporationsquare"]=13183, + ["cosquare"]=13255, + ["coverkgsquare"]=13254, + ["cparen"]=9374, + ["cruzeiro"]=8354, + ["cstretched"]=663, + ["curlyand"]=8911, + ["curlyor"]=8910, + ["currency"]=164, + ["d"]=100, + ["daarmenian"]=1380, + ["dabengali"]=2470, + ["dadarabic"]=1590, + ["dadeva"]=2342, + ["dadfinalarabic"]=65214, + ["dadinitialarabic"]=65215, + ["dadmedialarabic"]=65216, + ["dageshhebrew"]=1468, + ["dagger"]=8224, + ["daggerdbl"]=8225, + ["dagujarati"]=2726, + ["dagurmukhi"]=2598, + ["dahiragana"]=12384, + ["dakatakana"]=12480, + ["dalarabic"]=1583, + ["daletdageshhebrew"]=64307, + ["dalettserehebrew"]=1491, + ["dalfinalarabic"]=65194, + ["dammalowarabic"]=1615, + ["dammatanarabic"]=1612, + ["danda"]=2404, + ["dargalefthebrew"]=1447, + ["dasiapneumatacyrilliccmb"]=1157, + ["dblanglebracketleft"]=12298, + ["dblanglebracketleftvertical"]=65085, + ["dblanglebracketright"]=12299, + ["dblanglebracketrightvertical"]=65086, + ["dblarchinvertedbelowcmb"]=811, + ["dblarrowleft"]=8660, + ["dblarrowright"]=8658, + ["dbldanda"]=2405, + ["dblgravecmb"]=783, + ["dblintegral"]=8748, + ["dbllowlinecmb"]=819, + ["dbloverlinecmb"]=831, + ["dblprimemod"]=698, + ["dblverticalbar"]=8214, + ["dblverticallineabovecmb"]=782, + ["dbopomofo"]=12553, + ["dbsquare"]=13256, + ["dcaron"]=271, + ["dcedilla"]=7697, + ["dcircle"]=9427, + ["dcircumflexbelow"]=7699, + ["ddabengali"]=2465, + ["ddadeva"]=2337, + ["ddagujarati"]=2721, + ["ddagurmukhi"]=2593, + ["ddalarabic"]=1672, + ["ddalfinalarabic"]=64393, + ["dddhadeva"]=2396, + ["ddhabengali"]=2466, + ["ddhadeva"]=2338, + ["ddhagujarati"]=2722, + ["ddhagurmukhi"]=2594, + ["ddotaccent"]=7691, + ["ddotbelow"]=7693, + ["decimalseparatorpersian"]=1643, + ["decyrillic"]=1076, + ["degree"]=176, + ["dehihebrew"]=1453, + ["dehiragana"]=12391, + ["deicoptic"]=1007, + ["dekatakana"]=12487, + ["deleteleft"]=9003, + ["deleteright"]=8998, + ["delta"]=948, + ["deltaturned"]=397, + ["denominatorminusonenumeratorbengali"]=2552, + ["dezh"]=676, + ["dhabengali"]=2471, + ["dhadeva"]=2343, + ["dhagujarati"]=2727, + ["dhagurmukhi"]=2599, + ["dhook"]=599, + ["dialytikatonoscmb"]=836, + ["diamond"]=9830, + ["diamondsuitwhite"]=9826, + ["dieresis"]=168, + ["dieresisbelowcmb"]=804, + ["dieresiscmb"]=776, + ["dieresistonos"]=901, + ["dihiragana"]=12386, + ["dikatakana"]=12482, + ["dittomark"]=12291, + ["divide"]=247, + ["divides"]=8739, + ["divisionslash"]=8725, + ["djecyrillic"]=1106, + ["dlinebelow"]=7695, + ["dlsquare"]=13207, + ["dmacron"]=273, + ["dmonospace"]=65348, + ["dnblock"]=9604, + ["dochadathai"]=3598, + ["dodekthai"]=3604, + ["dohiragana"]=12393, + ["dokatakana"]=12489, + ["dollar"]=36, + ["dollarmonospace"]=65284, + ["dollarsmall"]=65129, + ["dong"]=8363, + ["dorusquare"]=13094, + ["dotaccent"]=729, + ["dotaccentcmb"]=775, + ["dotbelowcomb"]=803, + ["dotkatakana"]=12539, + ["dotlessi"]=305, + ["dotlessjstrokehook"]=644, + ["dotmath"]=8901, + ["dottedcircle"]=9676, + ["downtackbelowcmb"]=798, + ["downtackmod"]=725, + ["dparen"]=9375, + ["dtail"]=598, + ["dtopbar"]=396, + ["duhiragana"]=12389, + ["dukatakana"]=12485, + ["dz"]=499, + ["dzaltone"]=675, + ["dzcaron"]=454, + ["dzcurl"]=677, + ["dzeabkhasiancyrillic"]=1249, + ["dzecyrillic"]=1109, + ["dzhecyrillic"]=1119, + ["e"]=101, + ["eacute"]=233, + ["earth"]=9793, + ["ebengali"]=2447, + ["ebopomofo"]=12572, + ["ebreve"]=277, + ["ecandradeva"]=2317, + ["ecandragujarati"]=2701, + ["ecandravowelsigndeva"]=2373, + ["ecandravowelsigngujarati"]=2757, + ["ecaron"]=283, + ["ecedillabreve"]=7709, + ["echarmenian"]=1381, + ["echyiwnarmenian"]=1415, + ["ecircle"]=9428, + ["ecircumflex"]=234, + ["ecircumflexacute"]=7871, + ["ecircumflexbelow"]=7705, + ["ecircumflexdotbelow"]=7879, + ["ecircumflexgrave"]=7873, + ["ecircumflexhookabove"]=7875, + ["ecircumflextilde"]=7877, + ["ecyrillic"]=1108, + ["edblgrave"]=517, + ["edeva"]=2319, + ["edieresis"]=235, + ["edotaccent"]=279, + ["edotbelow"]=7865, + ["eegurmukhi"]=2575, + ["eematragurmukhi"]=2631, + ["efcyrillic"]=1092, + ["egrave"]=232, + ["egujarati"]=2703, + ["eharmenian"]=1383, + ["ehbopomofo"]=12573, + ["ehiragana"]=12360, + ["ehookabove"]=7867, + ["eibopomofo"]=12575, + ["eight"]=56, + ["eightbengali"]=2542, + ["eightcircle"]=9319, + ["eightcircleinversesansserif"]=10129, + ["eightdeva"]=2414, + ["eighteencircle"]=9329, + ["eighteenparen"]=9349, + ["eighteenperiod"]=9369, + ["eightgujarati"]=2798, + ["eightgurmukhi"]=2670, + ["eighthackarabic"]=1640, + ["eighthangzhou"]=12328, + ["eightideographicparen"]=12839, + ["eightinferior"]=8328, + ["eightmonospace"]=65304, + ["eightparen"]=9339, + ["eightperiod"]=9359, + ["eightpersian"]=1784, + ["eightroman"]=8567, + ["eightsuperior"]=8312, + ["eightthai"]=3672, + ["einvertedbreve"]=519, + ["eiotifiedcyrillic"]=1125, + ["ekatakana"]=12456, + ["ekatakanahalfwidth"]=65396, + ["ekonkargurmukhi"]=2676, + ["ekorean"]=12628, + ["elcyrillic"]=1083, + ["element"]=8712, + ["elevencircle"]=9322, + ["elevenparen"]=9342, + ["elevenperiod"]=9362, + ["elevenroman"]=8570, + ["ellipsis"]=8230, + ["ellipsisvertical"]=8942, + ["emacron"]=275, + ["emacronacute"]=7703, + ["emacrongrave"]=7701, + ["emcyrillic"]=1084, + ["emdash"]=8212, + ["emdashvertical"]=65073, + ["emonospace"]=65349, + ["emphasismarkarmenian"]=1371, + ["emptyset"]=8709, + ["enbopomofo"]=12579, + ["encyrillic"]=1085, + ["endash"]=8211, + ["endashvertical"]=65074, + ["endescendercyrillic"]=1187, + ["eng"]=331, + ["engbopomofo"]=12581, + ["enghecyrillic"]=1189, + ["enhookcyrillic"]=1224, + ["enspace"]=8194, + ["eogonek"]=281, + ["eokorean"]=12627, + ["eopen"]=603, + ["eopenclosed"]=666, + ["eopenreversed"]=604, + ["eopenreversedclosed"]=606, + ["eopenreversedhook"]=605, + ["eparen"]=9376, + ["epsilon"]=949, + ["epsilontonos"]=941, + ["equal"]=61, + ["equalmonospace"]=65309, + ["equalsmall"]=65126, + ["equalsuperior"]=8316, + ["equivalence"]=8801, + ["erbopomofo"]=12582, + ["ercyrillic"]=1088, + ["ereversed"]=600, + ["ereversedcyrillic"]=1101, + ["escyrillic"]=1089, + ["esdescendercyrillic"]=1195, + ["esh"]=643, + ["eshcurl"]=646, + ["eshortdeva"]=2318, + ["eshortvowelsigndeva"]=2374, + ["eshreversedloop"]=426, + ["eshsquatreversed"]=645, + ["esmallhiragana"]=12359, + ["esmallkatakana"]=12455, + ["esmallkatakanahalfwidth"]=65386, + ["estimated"]=8494, + ["eta"]=951, + ["etarmenian"]=1384, + ["etatonos"]=942, + ["eth"]=240, + ["etilde"]=7869, + ["etildebelow"]=7707, + ["etnahtalefthebrew"]=1425, + ["eturned"]=477, + ["eukorean"]=12641, + ["euro"]=8364, + ["evowelsignbengali"]=2503, + ["evowelsigndeva"]=2375, + ["evowelsigngujarati"]=2759, + ["exclam"]=33, + ["exclamarmenian"]=1372, + ["exclamdbl"]=8252, + ["exclamdown"]=161, + ["exclammonospace"]=65281, + ["ezh"]=658, + ["ezhcaron"]=495, + ["ezhcurl"]=659, + ["ezhreversed"]=441, + ["ezhtail"]=442, + ["f"]=102, + ["fadeva"]=2398, + ["fagurmukhi"]=2654, + ["fahrenheit"]=8457, + ["fathalowarabic"]=1614, + ["fathatanarabic"]=1611, + ["fbopomofo"]=12552, + ["fcircle"]=9429, + ["fdotaccent"]=7711, + ["feharabic"]=1601, + ["feharmenian"]=1414, + ["fehfinalarabic"]=65234, + ["fehinitialarabic"]=65235, + ["fehmedialarabic"]=65236, + ["feicoptic"]=997, + ["ff"]=64256, + ["ffi"]=64259, + ["ffl"]=64260, + ["fi"]=64257, + ["fifteencircle"]=9326, + ["fifteenparen"]=9346, + ["fifteenperiod"]=9366, + ["figuredash"]=8210, + ["filledbox"]=9632, + ["filledrect"]=9644, + ["finalkafdageshhebrew"]=64314, + ["finalkafshevahebrew"]=1498, + ["finalmemhebrew"]=1501, + ["finalnunhebrew"]=1503, + ["finalpehebrew"]=1507, + ["finaltsadihebrew"]=1509, + ["firsttonechinese"]=713, + ["fisheye"]=9673, + ["fitacyrillic"]=1139, + ["five"]=53, + ["fivebengali"]=2539, + ["fivecircle"]=9316, + ["fivecircleinversesansserif"]=10126, + ["fivedeva"]=2411, + ["fiveeighths"]=8541, + ["fivegujarati"]=2795, + ["fivegurmukhi"]=2667, + ["fivehackarabic"]=1637, + ["fivehangzhou"]=12325, + ["fiveideographicparen"]=12836, + ["fiveinferior"]=8325, + ["fivemonospace"]=65301, + ["fiveparen"]=9336, + ["fiveperiod"]=9356, + ["fivepersian"]=1781, + ["fiveroman"]=8564, + ["fivesuperior"]=8309, + ["fivethai"]=3669, + ["fl"]=64258, + ["florin"]=402, + ["fmonospace"]=65350, + ["fmsquare"]=13209, + ["fofanthai"]=3615, + ["fofathai"]=3613, + ["fongmanthai"]=3663, + ["four"]=52, + ["fourbengali"]=2538, + ["fourcircle"]=9315, + ["fourcircleinversesansserif"]=10125, + ["fourdeva"]=2410, + ["fourgujarati"]=2794, + ["fourgurmukhi"]=2666, + ["fourhackarabic"]=1636, + ["fourhangzhou"]=12324, + ["fourideographicparen"]=12835, + ["fourinferior"]=8324, + ["fourmonospace"]=65300, + ["fournumeratorbengali"]=2551, + ["fourparen"]=9335, + ["fourperiod"]=9355, + ["fourpersian"]=1780, + ["fourroman"]=8563, + ["foursuperior"]=8308, + ["fourteencircle"]=9325, + ["fourteenparen"]=9345, + ["fourteenperiod"]=9365, + ["fourthai"]=3668, + ["fourthtonechinese"]=715, + ["fparen"]=9377, + ["fraction"]=8260, + ["franc"]=8355, + ["g"]=103, + ["gabengali"]=2455, + ["gacute"]=501, + ["gadeva"]=2327, + ["gafarabic"]=1711, + ["gaffinalarabic"]=64403, + ["gafinitialarabic"]=64404, + ["gafmedialarabic"]=64405, + ["gagujarati"]=2711, + ["gagurmukhi"]=2583, + ["gahiragana"]=12364, + ["gakatakana"]=12460, + ["gamma"]=947, + ["gammalatinsmall"]=611, + ["gammasuperior"]=736, + ["gangiacoptic"]=1003, + ["gbopomofo"]=12557, + ["gbreve"]=287, + ["gcaron"]=487, + ["gcircle"]=9430, + ["gcircumflex"]=285, + ["gcommaaccent"]=291, + ["gdotaccent"]=289, + ["gecyrillic"]=1075, + ["gehiragana"]=12370, + ["gekatakana"]=12466, + ["geometricallyequal"]=8785, + ["gereshaccenthebrew"]=1436, + ["gereshhebrew"]=1523, + ["gereshmuqdamhebrew"]=1437, + ["germandbls"]=223, + ["gershayimaccenthebrew"]=1438, + ["gershayimhebrew"]=1524, + ["getamark"]=12307, + ["ghabengali"]=2456, + ["ghadarmenian"]=1394, + ["ghadeva"]=2328, + ["ghagujarati"]=2712, + ["ghagurmukhi"]=2584, + ["ghainarabic"]=1594, + ["ghainfinalarabic"]=65230, + ["ghaininitialarabic"]=65231, + ["ghainmedialarabic"]=65232, + ["ghemiddlehookcyrillic"]=1173, + ["ghestrokecyrillic"]=1171, + ["gheupturncyrillic"]=1169, + ["ghhadeva"]=2394, + ["ghhagurmukhi"]=2650, + ["ghook"]=608, + ["ghzsquare"]=13203, + ["gihiragana"]=12366, + ["gikatakana"]=12462, + ["gimarmenian"]=1379, + ["gimeldageshhebrew"]=64306, + ["gimelhebrew"]=1490, + ["gjecyrillic"]=1107, + ["glottalinvertedstroke"]=446, + ["glottalstop"]=660, + ["glottalstopinverted"]=662, + ["glottalstopmod"]=704, + ["glottalstopreversed"]=661, + ["glottalstopreversedmod"]=705, + ["glottalstopreversedsuperior"]=740, + ["glottalstopstroke"]=673, + ["glottalstopstrokereversed"]=674, + ["gmacron"]=7713, + ["gmonospace"]=65351, + ["gohiragana"]=12372, + ["gokatakana"]=12468, + ["gparen"]=9378, + ["gpasquare"]=13228, + ["grave"]=96, + ["gravebelowcmb"]=790, + ["gravecomb"]=768, + ["gravedeva"]=2387, + ["gravelowmod"]=718, + ["gravemonospace"]=65344, + ["gravetonecmb"]=832, + ["greater"]=62, + ["greaterequal"]=8805, + ["greaterequalorless"]=8923, + ["greatermonospace"]=65310, + ["greaterorequivalent"]=8819, + ["greaterorless"]=8823, + ["greateroverequal"]=8807, + ["greatersmall"]=65125, + ["gscript"]=609, + ["gstroke"]=485, + ["guhiragana"]=12368, + ["guillemotleft"]=171, + ["guillemotright"]=187, + ["guilsinglleft"]=8249, + ["guilsinglright"]=8250, + ["gukatakana"]=12464, + ["guramusquare"]=13080, + ["gysquare"]=13257, + ["h"]=104, + ["haabkhasiancyrillic"]=1193, + ["habengali"]=2489, + ["hadescendercyrillic"]=1203, + ["hadeva"]=2361, + ["hagujarati"]=2745, + ["hagurmukhi"]=2617, + ["haharabic"]=1581, + ["hahfinalarabic"]=65186, + ["hahinitialarabic"]=65187, + ["hahiragana"]=12399, + ["hahmedialarabic"]=65188, + ["haitusquare"]=13098, + ["hakatakana"]=12495, + ["hakatakanahalfwidth"]=65418, + ["halantgurmukhi"]=2637, + ["hamzasukunarabic"]=1569, + ["hangulfiller"]=12644, + ["hardsigncyrillic"]=1098, + ["harpoonleftbarbup"]=8636, + ["harpoonrightbarbup"]=8640, + ["hasquare"]=13258, + ["hatafpatahwidehebrew"]=1458, + ["hatafqamatswidehebrew"]=1459, + ["hatafsegolwidehebrew"]=1457, + ["hbar"]=295, + ["hbopomofo"]=12559, + ["hbrevebelow"]=7723, + ["hcedilla"]=7721, + ["hcircle"]=9431, + ["hcircumflex"]=293, + ["hdieresis"]=7719, + ["hdotaccent"]=7715, + ["hdotbelow"]=7717, + ["heartsuitblack"]=9829, + ["heartsuitwhite"]=9825, + ["hedageshhebrew"]=64308, + ["hehaltonearabic"]=1729, + ["heharabic"]=1607, + ["hehebrew"]=1492, + ["hehfinalaltonearabic"]=64423, + ["hehfinalarabic"]=65258, + ["hehhamzaabovefinalarabic"]=64421, + ["hehhamzaaboveisolatedarabic"]=64420, + ["hehinitialaltonearabic"]=64424, + ["hehinitialarabic"]=65259, + ["hehiragana"]=12408, + ["hehmedialaltonearabic"]=64425, + ["hehmedialarabic"]=65260, + ["heiseierasquare"]=13179, + ["hekatakana"]=12504, + ["hekatakanahalfwidth"]=65421, + ["hekutaarusquare"]=13110, + ["henghook"]=615, + ["herutusquare"]=13113, + ["hethebrew"]=1495, + ["hhook"]=614, + ["hhooksuperior"]=689, + ["hieuhacirclekorean"]=12923, + ["hieuhaparenkorean"]=12827, + ["hieuhcirclekorean"]=12909, + ["hieuhkorean"]=12622, + ["hieuhparenkorean"]=12813, + ["hihiragana"]=12402, + ["hikatakana"]=12498, + ["hikatakanahalfwidth"]=65419, + ["hiriqwidehebrew"]=1460, + ["hlinebelow"]=7830, + ["hmonospace"]=65352, + ["hoarmenian"]=1392, + ["hohipthai"]=3627, + ["hohiragana"]=12411, + ["hokatakana"]=12507, + ["hokatakanahalfwidth"]=65422, + ["holamwidehebrew"]=1465, + ["honokhukthai"]=3630, + ["hookcmb"]=777, + ["hookpalatalizedbelowcmb"]=801, + ["hookretroflexbelowcmb"]=802, + ["hoonsquare"]=13122, + ["horicoptic"]=1001, + ["horizontalbar"]=8213, + ["horncmb"]=795, + ["hotsprings"]=9832, + ["house"]=8962, + ["hparen"]=9379, + ["hsuperior"]=688, + ["hturned"]=613, + ["huhiragana"]=12405, + ["huiitosquare"]=13107, + ["hukatakana"]=12501, + ["hukatakanahalfwidth"]=65420, + ["hungarumlaut"]=733, + ["hungarumlautcmb"]=779, + ["hv"]=405, + ["hyphen"]=45, + ["hyphenmonospace"]=65293, + ["hyphensmall"]=65123, + ["hyphentwo"]=8208, + ["i"]=105, + ["iacute"]=237, + ["iacyrillic"]=1103, + ["ibengali"]=2439, + ["ibopomofo"]=12583, + ["ibreve"]=301, + ["icaron"]=464, + ["icircle"]=9432, + ["icircumflex"]=238, + ["icyrillic"]=1110, + ["idblgrave"]=521, + ["ideographearthcircle"]=12943, + ["ideographfirecircle"]=12939, + ["ideographicallianceparen"]=12863, + ["ideographiccallparen"]=12858, + ["ideographiccentrecircle"]=12965, + ["ideographicclose"]=12294, + ["ideographiccomma"]=12289, + ["ideographiccommaleft"]=65380, + ["ideographiccongratulationparen"]=12855, + ["ideographiccorrectcircle"]=12963, + ["ideographicearthparen"]=12847, + ["ideographicenterpriseparen"]=12861, + ["ideographicexcellentcircle"]=12957, + ["ideographicfestivalparen"]=12864, + ["ideographicfinancialcircle"]=12950, + ["ideographicfinancialparen"]=12854, + ["ideographicfireparen"]=12843, + ["ideographichaveparen"]=12850, + ["ideographichighcircle"]=12964, + ["ideographiciterationmark"]=12293, + ["ideographiclaborcircle"]=12952, + ["ideographiclaborparen"]=12856, + ["ideographicleftcircle"]=12967, + ["ideographiclowcircle"]=12966, + ["ideographicmedicinecircle"]=12969, + ["ideographicmetalparen"]=12846, + ["ideographicmoonparen"]=12842, + ["ideographicnameparen"]=12852, + ["ideographicperiod"]=12290, + ["ideographicprintcircle"]=12958, + ["ideographicreachparen"]=12867, + ["ideographicrepresentparen"]=12857, + ["ideographicresourceparen"]=12862, + ["ideographicrightcircle"]=12968, + ["ideographicsecretcircle"]=12953, + ["ideographicselfparen"]=12866, + ["ideographicsocietyparen"]=12851, + ["ideographicspace"]=12288, + ["ideographicspecialparen"]=12853, + ["ideographicstockparen"]=12849, + ["ideographicstudyparen"]=12859, + ["ideographicsunparen"]=12848, + ["ideographicsuperviseparen"]=12860, + ["ideographicwaterparen"]=12844, + ["ideographicwoodparen"]=12845, + ["ideographiczero"]=12295, + ["ideographmetalcircle"]=12942, + ["ideographmooncircle"]=12938, + ["ideographnamecircle"]=12948, + ["ideographsuncircle"]=12944, + ["ideographwatercircle"]=12940, + ["ideographwoodcircle"]=12941, + ["ideva"]=2311, + ["idieresis"]=239, + ["idieresisacute"]=7727, + ["idieresiscyrillic"]=1253, + ["idotbelow"]=7883, + ["iebrevecyrillic"]=1239, + ["iecyrillic"]=1077, + ["ieungacirclekorean"]=12917, + ["ieungaparenkorean"]=12821, + ["ieungcirclekorean"]=12903, + ["ieungkorean"]=12615, + ["ieungparenkorean"]=12807, + ["igrave"]=236, + ["igujarati"]=2695, + ["igurmukhi"]=2567, + ["ihiragana"]=12356, + ["ihookabove"]=7881, + ["iibengali"]=2440, + ["iicyrillic"]=1080, + ["iideva"]=2312, + ["iigujarati"]=2696, + ["iigurmukhi"]=2568, + ["iimatragurmukhi"]=2624, + ["iinvertedbreve"]=523, + ["iishortcyrillic"]=1081, + ["iivowelsignbengali"]=2496, + ["iivowelsigndeva"]=2368, + ["iivowelsigngujarati"]=2752, + ["ij"]=307, + ["ikatakana"]=12452, + ["ikatakanahalfwidth"]=65394, + ["ikorean"]=12643, + ["iluyhebrew"]=1452, + ["imacron"]=299, + ["imacroncyrillic"]=1251, + ["imageorapproximatelyequal"]=8787, + ["imatragurmukhi"]=2623, + ["imonospace"]=65353, + ["increment"]=8710, + ["infinity"]=8734, + ["iniarmenian"]=1387, + ["integral"]=8747, + ["integralbt"]=8993, + ["integraltp"]=8992, + ["intersection"]=8745, + ["intisquare"]=13061, + ["invbullet"]=9688, + ["invsmileface"]=9787, + ["iocyrillic"]=1105, + ["iogonek"]=303, + ["iota"]=953, + ["iotadieresis"]=970, + ["iotadieresistonos"]=912, + ["iotalatin"]=617, + ["iotatonos"]=943, + ["iparen"]=9380, + ["irigurmukhi"]=2674, + ["ismallhiragana"]=12355, + ["ismallkatakana"]=12451, + ["ismallkatakanahalfwidth"]=65384, + ["issharbengali"]=2554, + ["istroke"]=616, + ["iterationhiragana"]=12445, + ["iterationkatakana"]=12541, + ["itilde"]=297, + ["itildebelow"]=7725, + ["iubopomofo"]=12585, + ["iucyrillic"]=1102, + ["ivowelsignbengali"]=2495, + ["ivowelsigndeva"]=2367, + ["ivowelsigngujarati"]=2751, + ["izhitsacyrillic"]=1141, + ["izhitsadblgravecyrillic"]=1143, + ["j"]=106, + ["jaarmenian"]=1393, + ["jabengali"]=2460, + ["jadeva"]=2332, + ["jagujarati"]=2716, + ["jagurmukhi"]=2588, + ["jbopomofo"]=12560, + ["jcaron"]=496, + ["jcircle"]=9433, + ["jcircumflex"]=309, + ["jcrossedtail"]=669, + ["jdotlessstroke"]=607, + ["jecyrillic"]=1112, + ["jeemarabic"]=1580, + ["jeemfinalarabic"]=65182, + ["jeeminitialarabic"]=65183, + ["jeemmedialarabic"]=65184, + ["jeharabic"]=1688, + ["jehfinalarabic"]=64395, + ["jhabengali"]=2461, + ["jhadeva"]=2333, + ["jhagujarati"]=2717, + ["jhagurmukhi"]=2589, + ["jheharmenian"]=1403, + ["jis"]=12292, + ["jmonospace"]=65354, + ["jparen"]=9381, + ["jsuperior"]=690, + ["k"]=107, + ["kabashkircyrillic"]=1185, + ["kabengali"]=2453, + ["kacute"]=7729, + ["kacyrillic"]=1082, + ["kadescendercyrillic"]=1179, + ["kadeva"]=2325, + ["kafarabic"]=1603, + ["kafdageshhebrew"]=64315, + ["kaffinalarabic"]=65242, + ["kafhebrew"]=1499, + ["kafinitialarabic"]=65243, + ["kafmedialarabic"]=65244, + ["kafrafehebrew"]=64333, + ["kagujarati"]=2709, + ["kagurmukhi"]=2581, + ["kahiragana"]=12363, + ["kahookcyrillic"]=1220, + ["kakatakana"]=12459, + ["kakatakanahalfwidth"]=65398, + ["kappa"]=954, + ["kappasymbolgreek"]=1008, + ["kapyeounmieumkorean"]=12657, + ["kapyeounphieuphkorean"]=12676, + ["kapyeounpieupkorean"]=12664, + ["kapyeounssangpieupkorean"]=12665, + ["karoriisquare"]=13069, + ["kasmallkatakana"]=12533, + ["kasquare"]=13188, + ["kasraarabic"]=1616, + ["kasratanarabic"]=1613, + ["kastrokecyrillic"]=1183, + ["katahiraprolongmarkhalfwidth"]=65392, + ["kaverticalstrokecyrillic"]=1181, + ["kbopomofo"]=12558, + ["kcalsquare"]=13193, + ["kcaron"]=489, + ["kcircle"]=9434, + ["kcommaaccent"]=311, + ["kdotbelow"]=7731, + ["keharmenian"]=1412, + ["kehiragana"]=12369, + ["kekatakana"]=12465, + ["kekatakanahalfwidth"]=65401, + ["kenarmenian"]=1391, + ["kesmallkatakana"]=12534, + ["kgreenlandic"]=312, + ["khabengali"]=2454, + ["khacyrillic"]=1093, + ["khadeva"]=2326, + ["khagujarati"]=2710, + ["khagurmukhi"]=2582, + ["khaharabic"]=1582, + ["khahfinalarabic"]=65190, + ["khahinitialarabic"]=65191, + ["khahmedialarabic"]=65192, + ["kheicoptic"]=999, + ["khhadeva"]=2393, + ["khhagurmukhi"]=2649, + ["khieukhacirclekorean"]=12920, + ["khieukhaparenkorean"]=12824, + ["khieukhcirclekorean"]=12906, + ["khieukhkorean"]=12619, + ["khieukhparenkorean"]=12810, + ["khokhaithai"]=3586, + ["khokhonthai"]=3589, + ["khokhuatthai"]=3587, + ["khokhwaithai"]=3588, + ["khomutthai"]=3675, + ["khook"]=409, + ["khorakhangthai"]=3590, + ["khzsquare"]=13201, + ["kihiragana"]=12365, + ["kikatakana"]=12461, + ["kikatakanahalfwidth"]=65399, + ["kiroguramusquare"]=13077, + ["kiromeetorusquare"]=13078, + ["kirosquare"]=13076, + ["kiyeokacirclekorean"]=12910, + ["kiyeokaparenkorean"]=12814, + ["kiyeokcirclekorean"]=12896, + ["kiyeokkorean"]=12593, + ["kiyeokparenkorean"]=12800, + ["kiyeoksioskorean"]=12595, + ["kjecyrillic"]=1116, + ["klinebelow"]=7733, + ["klsquare"]=13208, + ["kmcubedsquare"]=13222, + ["kmonospace"]=65355, + ["kmsquaredsquare"]=13218, + ["kohiragana"]=12371, + ["kohmsquare"]=13248, + ["kokaithai"]=3585, + ["kokatakana"]=12467, + ["kokatakanahalfwidth"]=65402, + ["kooposquare"]=13086, + ["koppacyrillic"]=1153, + ["koreanstandardsymbol"]=12927, + ["koroniscmb"]=835, + ["kparen"]=9382, + ["kpasquare"]=13226, + ["ksicyrillic"]=1135, + ["ktsquare"]=13263, + ["kturned"]=670, + ["kuhiragana"]=12367, + ["kukatakana"]=12463, + ["kukatakanahalfwidth"]=65400, + ["kvsquare"]=13240, + ["kwsquare"]=13246, + ["l"]=108, + ["labengali"]=2482, + ["lacute"]=314, + ["ladeva"]=2354, + ["lagujarati"]=2738, + ["lagurmukhi"]=2610, + ["lakkhangyaothai"]=3653, + ["lamaleffinalarabic"]=65276, + ["lamalefhamzaabovefinalarabic"]=65272, + ["lamalefhamzaaboveisolatedarabic"]=65271, + ["lamalefhamzabelowfinalarabic"]=65274, + ["lamalefhamzabelowisolatedarabic"]=65273, + ["lamalefisolatedarabic"]=65275, + ["lamalefmaddaabovefinalarabic"]=65270, + ["lamalefmaddaaboveisolatedarabic"]=65269, + ["lamarabic"]=1604, + ["lambda"]=955, + ["lambdastroke"]=411, + ["lameddageshhebrew"]=64316, + ["lamedholamhebrew"]=1500, + ["lamfinalarabic"]=65246, + ["lamhahinitialarabic"]=64714, + ["lamjeeminitialarabic"]=64713, + ["lamkhahinitialarabic"]=64715, + ["lamlamhehisolatedarabic"]=65010, + ["lammedialarabic"]=65248, + ["lammeemhahinitialarabic"]=64904, + ["lammeeminitialarabic"]=64716, + ["lammeemkhahinitialarabic"]=65247, + ["largecircle"]=9711, + ["lbar"]=410, + ["lbelt"]=620, + ["lbopomofo"]=12556, + ["lcaron"]=318, + ["lcircle"]=9435, + ["lcircumflexbelow"]=7741, + ["lcommaaccent"]=316, + ["ldotaccent"]=320, + ["ldotbelow"]=7735, + ["ldotbelowmacron"]=7737, + ["leftangleabovecmb"]=794, + ["lefttackbelowcmb"]=792, + ["less"]=60, + ["lessequal"]=8804, + ["lessequalorgreater"]=8922, + ["lessmonospace"]=65308, + ["lessorequivalent"]=8818, + ["lessorgreater"]=8822, + ["lessoverequal"]=8806, + ["lesssmall"]=65124, + ["lezh"]=622, + ["lfblock"]=9612, + ["lhookretroflex"]=621, + ["lira"]=8356, + ["liwnarmenian"]=1388, + ["lj"]=457, + ["ljecyrillic"]=1113, + ["lladeva"]=2355, + ["llagujarati"]=2739, + ["llinebelow"]=7739, + ["llladeva"]=2356, + ["llvocalicbengali"]=2529, + ["llvocalicdeva"]=2401, + ["llvocalicvowelsignbengali"]=2531, + ["llvocalicvowelsigndeva"]=2403, + ["lmiddletilde"]=619, + ["lmonospace"]=65356, + ["lmsquare"]=13264, + ["lochulathai"]=3628, + ["logicaland"]=8743, + ["logicalnot"]=172, + ["logicalor"]=8744, + ["lolingthai"]=3621, + ["lowlinecenterline"]=65102, + ["lowlinecmb"]=818, + ["lowlinedashed"]=65101, + ["lozenge"]=9674, + ["lparen"]=9383, + ["lslash"]=322, + ["lsquare"]=8467, + ["luthai"]=3622, + ["lvocalicbengali"]=2444, + ["lvocalicdeva"]=2316, + ["lvocalicvowelsignbengali"]=2530, + ["lvocalicvowelsigndeva"]=2402, + ["lxsquare"]=13267, + ["m"]=109, + ["mabengali"]=2478, + ["macron"]=175, + ["macronbelowcmb"]=817, + ["macroncmb"]=772, + ["macronlowmod"]=717, + ["macronmonospace"]=65507, + ["macute"]=7743, + ["madeva"]=2350, + ["magujarati"]=2734, + ["magurmukhi"]=2606, + ["mahapakhlefthebrew"]=1444, + ["mahiragana"]=12414, + ["maichattawathai"]=3659, + ["maiekthai"]=3656, + ["maihanakatthai"]=3633, + ["maitaikhuthai"]=3655, + ["maithothai"]=3657, + ["maitrithai"]=3658, + ["maiyamokthai"]=3654, + ["makatakana"]=12510, + ["makatakanahalfwidth"]=65423, + ["mansyonsquare"]=13127, + ["maqafhebrew"]=1470, + ["mars"]=9794, + ["masoracirclehebrew"]=1455, + ["masquare"]=13187, + ["mbopomofo"]=12551, + ["mbsquare"]=13268, + ["mcircle"]=9436, + ["mcubedsquare"]=13221, + ["mdotaccent"]=7745, + ["mdotbelow"]=7747, + ["meemarabic"]=1605, + ["meemfinalarabic"]=65250, + ["meeminitialarabic"]=65251, + ["meemmedialarabic"]=65252, + ["meemmeeminitialarabic"]=64721, + ["meemmeemisolatedarabic"]=64584, + ["meetorusquare"]=13133, + ["mehiragana"]=12417, + ["meizierasquare"]=13182, + ["mekatakana"]=12513, + ["mekatakanahalfwidth"]=65426, + ["memdageshhebrew"]=64318, + ["memhebrew"]=1502, + ["menarmenian"]=1396, + ["merkhakefulalefthebrew"]=1446, + ["merkhalefthebrew"]=1445, + ["mhook"]=625, + ["mhzsquare"]=13202, + ["middledotkatakanahalfwidth"]=65381, + ["mieumacirclekorean"]=12914, + ["mieumaparenkorean"]=12818, + ["mieumcirclekorean"]=12900, + ["mieumkorean"]=12609, + ["mieumpansioskorean"]=12656, + ["mieumparenkorean"]=12804, + ["mieumpieupkorean"]=12654, + ["mieumsioskorean"]=12655, + ["mihiragana"]=12415, + ["mikatakana"]=12511, + ["mikatakanahalfwidth"]=65424, + ["minus"]=8722, + ["minusbelowcmb"]=800, + ["minuscircle"]=8854, + ["minusmod"]=727, + ["minusplus"]=8723, + ["minute"]=8242, + ["miribaarusquare"]=13130, + ["mirisquare"]=13129, + ["mlonglegturned"]=624, + ["mlsquare"]=13206, + ["mmcubedsquare"]=13219, + ["mmonospace"]=65357, + ["mmsquaredsquare"]=13215, + ["mohiragana"]=12418, + ["mohmsquare"]=13249, + ["mokatakana"]=12514, + ["mokatakanahalfwidth"]=65427, + ["molsquare"]=13270, + ["momathai"]=3617, + ["moverssquare"]=13223, + ["moverssquaredsquare"]=13224, + ["mparen"]=9384, + ["mpasquare"]=13227, + ["mssquare"]=13235, + ["mturned"]=623, + ["mu1"]=181, + ["muasquare"]=13186, + ["muchgreater"]=8811, + ["muchless"]=8810, + ["mufsquare"]=13196, + ["mugreek"]=956, + ["mugsquare"]=13197, + ["muhiragana"]=12416, + ["mukatakana"]=12512, + ["mukatakanahalfwidth"]=65425, + ["mulsquare"]=13205, + ["multiply"]=215, + ["mumsquare"]=13211, + ["munahlefthebrew"]=1443, + ["musicalnote"]=9834, + ["musicalnotedbl"]=9835, + ["musicflatsign"]=9837, + ["musicsharpsign"]=9839, + ["mussquare"]=13234, + ["muvsquare"]=13238, + ["muwsquare"]=13244, + ["mvmegasquare"]=13241, + ["mvsquare"]=13239, + ["mwmegasquare"]=13247, + ["mwsquare"]=13245, + ["n"]=110, + ["nabengali"]=2472, + ["nabla"]=8711, + ["nacute"]=324, + ["nadeva"]=2344, + ["nagujarati"]=2728, + ["nagurmukhi"]=2600, + ["nahiragana"]=12394, + ["nakatakana"]=12490, + ["nakatakanahalfwidth"]=65413, + ["nasquare"]=13185, + ["nbopomofo"]=12555, + ["ncaron"]=328, + ["ncircle"]=9437, + ["ncircumflexbelow"]=7755, + ["ncommaaccent"]=326, + ["ndotaccent"]=7749, + ["ndotbelow"]=7751, + ["nehiragana"]=12397, + ["nekatakana"]=12493, + ["nekatakanahalfwidth"]=65416, + ["nfsquare"]=13195, + ["ngabengali"]=2457, + ["ngadeva"]=2329, + ["ngagujarati"]=2713, + ["ngagurmukhi"]=2585, + ["ngonguthai"]=3591, + ["nhiragana"]=12435, + ["nhookleft"]=626, + ["nhookretroflex"]=627, + ["nieunacirclekorean"]=12911, + ["nieunaparenkorean"]=12815, + ["nieuncieuckorean"]=12597, + ["nieuncirclekorean"]=12897, + ["nieunhieuhkorean"]=12598, + ["nieunkorean"]=12596, + ["nieunpansioskorean"]=12648, + ["nieunparenkorean"]=12801, + ["nieunsioskorean"]=12647, + ["nieuntikeutkorean"]=12646, + ["nihiragana"]=12395, + ["nikatakana"]=12491, + ["nikatakanahalfwidth"]=65414, + ["nikhahitthai"]=3661, + ["nine"]=57, + ["ninebengali"]=2543, + ["ninecircle"]=9320, + ["ninecircleinversesansserif"]=10130, + ["ninedeva"]=2415, + ["ninegujarati"]=2799, + ["ninegurmukhi"]=2671, + ["ninehackarabic"]=1641, + ["ninehangzhou"]=12329, + ["nineideographicparen"]=12840, + ["nineinferior"]=8329, + ["ninemonospace"]=65305, + ["nineparen"]=9340, + ["nineperiod"]=9360, + ["ninepersian"]=1785, + ["nineroman"]=8568, + ["ninesuperior"]=8313, + ["nineteencircle"]=9330, + ["nineteenparen"]=9350, + ["nineteenperiod"]=9370, + ["ninethai"]=3673, + ["nj"]=460, + ["njecyrillic"]=1114, + ["nkatakana"]=12531, + ["nkatakanahalfwidth"]=65437, + ["nlegrightlong"]=414, + ["nlinebelow"]=7753, + ["nmonospace"]=65358, + ["nmsquare"]=13210, + ["nnabengali"]=2467, + ["nnadeva"]=2339, + ["nnagujarati"]=2723, + ["nnagurmukhi"]=2595, + ["nnnadeva"]=2345, + ["nohiragana"]=12398, + ["nokatakana"]=12494, + ["nokatakanahalfwidth"]=65417, + ["nonbreakingspace"]=160, + ["nonenthai"]=3603, + ["nonuthai"]=3609, + ["noonarabic"]=1606, + ["noonfinalarabic"]=65254, + ["noonghunnaarabic"]=1722, + ["noonghunnafinalarabic"]=64415, + ["nooninitialarabic"]=65255, + ["noonjeeminitialarabic"]=64722, + ["noonjeemisolatedarabic"]=64587, + ["noonmedialarabic"]=65256, + ["noonmeeminitialarabic"]=64725, + ["noonmeemisolatedarabic"]=64590, + ["noonnoonfinalarabic"]=64653, + ["notcontains"]=8716, + ["notelementof"]=8713, + ["notequal"]=8800, + ["notgreater"]=8815, + ["notgreaternorequal"]=8817, + ["notgreaternorless"]=8825, + ["notidentical"]=8802, + ["notless"]=8814, + ["notlessnorequal"]=8816, + ["notparallel"]=8742, + ["notprecedes"]=8832, + ["notsubset"]=8836, + ["notsucceeds"]=8833, + ["notsuperset"]=8837, + ["nowarmenian"]=1398, + ["nparen"]=9385, + ["nssquare"]=13233, + ["nsuperior"]=8319, + ["ntilde"]=241, + ["nu"]=957, + ["nuhiragana"]=12396, + ["nukatakana"]=12492, + ["nukatakanahalfwidth"]=65415, + ["nuktabengali"]=2492, + ["nuktadeva"]=2364, + ["nuktagujarati"]=2748, + ["nuktagurmukhi"]=2620, + ["numbersign"]=35, + ["numbersignmonospace"]=65283, + ["numbersignsmall"]=65119, + ["numeralsigngreek"]=884, + ["numeralsignlowergreek"]=885, + ["numero"]=8470, + ["nundageshhebrew"]=64320, + ["nunhebrew"]=1504, + ["nvsquare"]=13237, + ["nwsquare"]=13243, + ["nyabengali"]=2462, + ["nyadeva"]=2334, + ["nyagujarati"]=2718, + ["nyagurmukhi"]=2590, + ["o"]=111, + ["oacute"]=243, + ["oangthai"]=3629, + ["obarred"]=629, + ["obarredcyrillic"]=1257, + ["obarreddieresiscyrillic"]=1259, + ["obengali"]=2451, + ["obopomofo"]=12571, + ["obreve"]=335, + ["ocandradeva"]=2321, + ["ocandragujarati"]=2705, + ["ocandravowelsigndeva"]=2377, + ["ocandravowelsigngujarati"]=2761, + ["ocaron"]=466, + ["ocircle"]=9438, + ["ocircumflex"]=244, + ["ocircumflexacute"]=7889, + ["ocircumflexdotbelow"]=7897, + ["ocircumflexgrave"]=7891, + ["ocircumflexhookabove"]=7893, + ["ocircumflextilde"]=7895, + ["ocyrillic"]=1086, + ["odblgrave"]=525, + ["odeva"]=2323, + ["odieresis"]=246, + ["odieresiscyrillic"]=1255, + ["odotbelow"]=7885, + ["oe"]=339, + ["oekorean"]=12634, + ["ogonek"]=731, + ["ogonekcmb"]=808, + ["ograve"]=242, + ["ogujarati"]=2707, + ["oharmenian"]=1413, + ["ohiragana"]=12362, + ["ohookabove"]=7887, + ["ohorn"]=417, + ["ohornacute"]=7899, + ["ohorndotbelow"]=7907, + ["ohorngrave"]=7901, + ["ohornhookabove"]=7903, + ["ohorntilde"]=7905, + ["ohungarumlaut"]=337, + ["oi"]=419, + ["oinvertedbreve"]=527, + ["okatakana"]=12458, + ["okatakanahalfwidth"]=65397, + ["okorean"]=12631, + ["olehebrew"]=1451, + ["omacron"]=333, + ["omacronacute"]=7763, + ["omacrongrave"]=7761, + ["omdeva"]=2384, + ["omega"]=969, + ["omegacyrillic"]=1121, + ["omegalatinclosed"]=631, + ["omegaroundcyrillic"]=1147, + ["omegatitlocyrillic"]=1149, + ["omegatonos"]=974, + ["omgujarati"]=2768, + ["omicron"]=959, + ["omicrontonos"]=972, + ["omonospace"]=65359, + ["one"]=49, + ["onebengali"]=2535, + ["onecircle"]=9312, + ["onecircleinversesansserif"]=10122, + ["onedeva"]=2407, + ["onedotenleader"]=8228, + ["oneeighth"]=8539, + ["onegujarati"]=2791, + ["onegurmukhi"]=2663, + ["onehackarabic"]=1633, + ["onehalf"]=189, + ["onehangzhou"]=12321, + ["oneideographicparen"]=12832, + ["oneinferior"]=8321, + ["onemonospace"]=65297, + ["onenumeratorbengali"]=2548, + ["oneparen"]=9332, + ["oneperiod"]=9352, + ["onepersian"]=1777, + ["onequarter"]=188, + ["oneroman"]=8560, + ["onesuperior"]=185, + ["onethai"]=3665, + ["onethird"]=8531, + ["oogonek"]=491, + ["oogonekmacron"]=493, + ["oogurmukhi"]=2579, + ["oomatragurmukhi"]=2635, + ["oopen"]=596, + ["oparen"]=9386, + ["option"]=8997, + ["ordfeminine"]=170, + ["ordmasculine"]=186, + ["oshortdeva"]=2322, + ["oshortvowelsigndeva"]=2378, + ["oslash"]=248, + ["osmallhiragana"]=12361, + ["osmallkatakana"]=12457, + ["osmallkatakanahalfwidth"]=65387, + ["ostrokeacute"]=511, + ["otcyrillic"]=1151, + ["otilde"]=245, + ["otildeacute"]=7757, + ["otildedieresis"]=7759, + ["oubopomofo"]=12577, + ["overline"]=8254, + ["overlinecenterline"]=65098, + ["overlinecmb"]=773, + ["overlinedashed"]=65097, + ["overlinedblwavy"]=65100, + ["overlinewavy"]=65099, + ["ovowelsignbengali"]=2507, + ["ovowelsigndeva"]=2379, + ["ovowelsigngujarati"]=2763, + ["p"]=112, + ["paampssquare"]=13184, + ["paasentosquare"]=13099, + ["pabengali"]=2474, + ["pacute"]=7765, + ["padeva"]=2346, + ["pagedown"]=8671, + ["pageup"]=8670, + ["pagujarati"]=2730, + ["pagurmukhi"]=2602, + ["pahiragana"]=12401, + ["paiyannoithai"]=3631, + ["pakatakana"]=12497, + ["palatalizationcyrilliccmb"]=1156, + ["palochkacyrillic"]=1216, + ["pansioskorean"]=12671, + ["paragraph"]=182, + ["parallel"]=8741, + ["parenleft"]=40, + ["parenleftaltonearabic"]=64830, + ["parenleftinferior"]=8333, + ["parenleftmonospace"]=65288, + ["parenleftsmall"]=65113, + ["parenleftsuperior"]=8317, + ["parenleftvertical"]=65077, + ["parenright"]=41, + ["parenrightaltonearabic"]=64831, + ["parenrightinferior"]=8334, + ["parenrightmonospace"]=65289, + ["parenrightsmall"]=65114, + ["parenrightsuperior"]=8318, + ["parenrightvertical"]=65078, + ["partialdiff"]=8706, + ["paseqhebrew"]=1472, + ["pashtahebrew"]=1433, + ["pasquare"]=13225, + ["patahwidehebrew"]=1463, + ["pazerhebrew"]=1441, + ["pbopomofo"]=12550, + ["pcircle"]=9439, + ["pdotaccent"]=7767, + ["pecyrillic"]=1087, + ["pedageshhebrew"]=64324, + ["peezisquare"]=13115, + ["pefinaldageshhebrew"]=64323, + ["peharabic"]=1662, + ["peharmenian"]=1402, + ["pehebrew"]=1508, + ["pehfinalarabic"]=64343, + ["pehinitialarabic"]=64344, + ["pehiragana"]=12410, + ["pehmedialarabic"]=64345, + ["pekatakana"]=12506, + ["pemiddlehookcyrillic"]=1191, + ["perafehebrew"]=64334, + ["percent"]=37, + ["percentarabic"]=1642, + ["percentmonospace"]=65285, + ["percentsmall"]=65130, + ["period"]=46, + ["periodarmenian"]=1417, + ["periodcentered"]=183, + ["periodhalfwidth"]=65377, + ["periodmonospace"]=65294, + ["periodsmall"]=65106, + ["perispomenigreekcmb"]=834, + ["perpendicular"]=8869, + ["perthousand"]=8240, + ["peseta"]=8359, + ["pfsquare"]=13194, + ["phabengali"]=2475, + ["phadeva"]=2347, + ["phagujarati"]=2731, + ["phagurmukhi"]=2603, + ["phi"]=966, + ["phieuphacirclekorean"]=12922, + ["phieuphaparenkorean"]=12826, + ["phieuphcirclekorean"]=12908, + ["phieuphkorean"]=12621, + ["phieuphparenkorean"]=12812, + ["philatin"]=632, + ["phinthuthai"]=3642, + ["phisymbolgreek"]=981, + ["phook"]=421, + ["phophanthai"]=3614, + ["phophungthai"]=3612, + ["phosamphaothai"]=3616, + ["pi"]=960, + ["pieupacirclekorean"]=12915, + ["pieupaparenkorean"]=12819, + ["pieupcieuckorean"]=12662, + ["pieupcirclekorean"]=12901, + ["pieupkiyeokkorean"]=12658, + ["pieupkorean"]=12610, + ["pieupparenkorean"]=12805, + ["pieupsioskiyeokkorean"]=12660, + ["pieupsioskorean"]=12612, + ["pieupsiostikeutkorean"]=12661, + ["pieupthieuthkorean"]=12663, + ["pieuptikeutkorean"]=12659, + ["pihiragana"]=12404, + ["pikatakana"]=12500, + ["pisymbolgreek"]=982, + ["piwrarmenian"]=1411, + ["plus"]=43, + ["plusbelowcmb"]=799, + ["pluscircle"]=8853, + ["plusminus"]=177, + ["plusmod"]=726, + ["plusmonospace"]=65291, + ["plussmall"]=65122, + ["plussuperior"]=8314, + ["pmonospace"]=65360, + ["pmsquare"]=13272, + ["pohiragana"]=12413, + ["pointingindexdownwhite"]=9759, + ["pointingindexleftwhite"]=9756, + ["pointingindexrightwhite"]=9758, + ["pointingindexupwhite"]=9757, + ["pokatakana"]=12509, + ["poplathai"]=3611, + ["postalmark"]=12306, + ["postalmarkface"]=12320, + ["pparen"]=9387, + ["precedes"]=8826, + ["prescription"]=8478, + ["primemod"]=697, + ["primereversed"]=8245, + ["product"]=8719, + ["projective"]=8965, + ["prolongedkana"]=12540, + ["propellor"]=8984, + ["proportion"]=8759, + ["proportional"]=8733, + ["psi"]=968, + ["psicyrillic"]=1137, + ["psilipneumatacyrilliccmb"]=1158, + ["pssquare"]=13232, + ["puhiragana"]=12407, + ["pukatakana"]=12503, + ["pvsquare"]=13236, + ["pwsquare"]=13242, + ["q"]=113, + ["qadeva"]=2392, + ["qadmahebrew"]=1448, + ["qafarabic"]=1602, + ["qaffinalarabic"]=65238, + ["qafinitialarabic"]=65239, + ["qafmedialarabic"]=65240, + ["qamatswidehebrew"]=1464, + ["qarneyparahebrew"]=1439, + ["qbopomofo"]=12561, + ["qcircle"]=9440, + ["qhook"]=672, + ["qmonospace"]=65361, + ["qofdageshhebrew"]=64327, + ["qoftserehebrew"]=1511, + ["qparen"]=9388, + ["quarternote"]=9833, + ["qubutswidehebrew"]=1467, + ["question"]=63, + ["questionarabic"]=1567, + ["questionarmenian"]=1374, + ["questiondown"]=191, + ["questiongreek"]=894, + ["questionmonospace"]=65311, + ["quotedbl"]=34, + ["quotedblbase"]=8222, + ["quotedblleft"]=8220, + ["quotedblmonospace"]=65282, + ["quotedblprime"]=12318, + ["quotedblprimereversed"]=12317, + ["quotedblright"]=8221, + ["quoteleft"]=8216, + ["quotereversed"]=8219, + ["quoteright"]=8217, + ["quoterightn"]=329, + ["quotesinglbase"]=8218, + ["quotesingle"]=39, + ["quotesinglemonospace"]=65287, + ["r"]=114, + ["raarmenian"]=1404, + ["rabengali"]=2480, + ["racute"]=341, + ["radeva"]=2352, + ["radical"]=8730, + ["radoverssquare"]=13230, + ["radoverssquaredsquare"]=13231, + ["radsquare"]=13229, + ["rafehebrew"]=1471, + ["ragujarati"]=2736, + ["ragurmukhi"]=2608, + ["rahiragana"]=12425, + ["rakatakana"]=12521, + ["rakatakanahalfwidth"]=65431, + ["ralowerdiagonalbengali"]=2545, + ["ramiddlediagonalbengali"]=2544, + ["ramshorn"]=612, + ["ratio"]=8758, + ["rbopomofo"]=12566, + ["rcaron"]=345, + ["rcircle"]=9441, + ["rcommaaccent"]=343, + ["rdblgrave"]=529, + ["rdotaccent"]=7769, + ["rdotbelow"]=7771, + ["rdotbelowmacron"]=7773, + ["referencemark"]=8251, + ["registered"]=174, + ["reharmenian"]=1408, + ["rehfinalarabic"]=65198, + ["rehiragana"]=12428, + ["rehyehaleflamarabic"]=1585, + ["rekatakana"]=12524, + ["rekatakanahalfwidth"]=65434, + ["reshdageshhebrew"]=64328, + ["reshtserehebrew"]=1512, + ["reversedtilde"]=8765, + ["reviamugrashhebrew"]=1431, + ["revlogicalnot"]=8976, + ["rfishhook"]=638, + ["rfishhookreversed"]=639, + ["rhabengali"]=2525, + ["rhadeva"]=2397, + ["rho"]=961, + ["rhook"]=637, + ["rhookturned"]=635, + ["rhookturnedsuperior"]=693, + ["rhosymbolgreek"]=1009, + ["rhotichookmod"]=734, + ["rieulacirclekorean"]=12913, + ["rieulaparenkorean"]=12817, + ["rieulcirclekorean"]=12899, + ["rieulhieuhkorean"]=12608, + ["rieulkiyeokkorean"]=12602, + ["rieulkiyeoksioskorean"]=12649, + ["rieulkorean"]=12601, + ["rieulmieumkorean"]=12603, + ["rieulpansioskorean"]=12652, + ["rieulparenkorean"]=12803, + ["rieulphieuphkorean"]=12607, + ["rieulpieupkorean"]=12604, + ["rieulpieupsioskorean"]=12651, + ["rieulsioskorean"]=12605, + ["rieulthieuthkorean"]=12606, + ["rieultikeutkorean"]=12650, + ["rieulyeorinhieuhkorean"]=12653, + ["rightangle"]=8735, + ["righttackbelowcmb"]=793, + ["righttriangle"]=8895, + ["rihiragana"]=12426, + ["rikatakana"]=12522, + ["rikatakanahalfwidth"]=65432, + ["ring"]=730, + ["ringbelowcmb"]=805, + ["ringcmb"]=778, + ["ringhalfleft"]=703, + ["ringhalfleftarmenian"]=1369, + ["ringhalfleftbelowcmb"]=796, + ["ringhalfleftcentered"]=723, + ["ringhalfright"]=702, + ["ringhalfrightbelowcmb"]=825, + ["ringhalfrightcentered"]=722, + ["rinvertedbreve"]=531, + ["rittorusquare"]=13137, + ["rlinebelow"]=7775, + ["rlongleg"]=636, + ["rlonglegturned"]=634, + ["rmonospace"]=65362, + ["rohiragana"]=12429, + ["rokatakana"]=12525, + ["rokatakanahalfwidth"]=65435, + ["roruathai"]=3619, + ["rparen"]=9389, + ["rrabengali"]=2524, + ["rradeva"]=2353, + ["rragurmukhi"]=2652, + ["rreharabic"]=1681, + ["rrehfinalarabic"]=64397, + ["rrvocalicbengali"]=2528, + ["rrvocalicdeva"]=2400, + ["rrvocalicgujarati"]=2784, + ["rrvocalicvowelsignbengali"]=2500, + ["rrvocalicvowelsigndeva"]=2372, + ["rrvocalicvowelsigngujarati"]=2756, + ["rtblock"]=9616, + ["rturned"]=633, + ["rturnedsuperior"]=692, + ["ruhiragana"]=12427, + ["rukatakana"]=12523, + ["rukatakanahalfwidth"]=65433, + ["rupeemarkbengali"]=2546, + ["rupeesignbengali"]=2547, + ["ruthai"]=3620, + ["rvocalicbengali"]=2443, + ["rvocalicdeva"]=2315, + ["rvocalicgujarati"]=2699, + ["rvocalicvowelsignbengali"]=2499, + ["rvocalicvowelsigndeva"]=2371, + ["rvocalicvowelsigngujarati"]=2755, + ["s"]=115, + ["sabengali"]=2488, + ["sacute"]=347, + ["sacutedotaccent"]=7781, + ["sadarabic"]=1589, + ["sadeva"]=2360, + ["sadfinalarabic"]=65210, + ["sadinitialarabic"]=65211, + ["sadmedialarabic"]=65212, + ["sagujarati"]=2744, + ["sagurmukhi"]=2616, + ["sahiragana"]=12373, + ["sakatakana"]=12469, + ["sakatakanahalfwidth"]=65403, + ["sallallahoualayhewasallamarabic"]=65018, + ["samekhdageshhebrew"]=64321, + ["samekhhebrew"]=1505, + ["saraaathai"]=3634, + ["saraaethai"]=3649, + ["saraaimaimalaithai"]=3652, + ["saraaimaimuanthai"]=3651, + ["saraamthai"]=3635, + ["saraathai"]=3632, + ["saraethai"]=3648, + ["saraiithai"]=3637, + ["saraithai"]=3636, + ["saraothai"]=3650, + ["saraueethai"]=3639, + ["sarauethai"]=3638, + ["sarauthai"]=3640, + ["sarauuthai"]=3641, + ["sbopomofo"]=12569, + ["scaron"]=353, + ["scarondotaccent"]=7783, + ["scedilla"]=351, + ["schwa"]=601, + ["schwacyrillic"]=1241, + ["schwadieresiscyrillic"]=1243, + ["schwahook"]=602, + ["scircle"]=9442, + ["scircumflex"]=349, + ["scommaaccent"]=537, + ["sdotaccent"]=7777, + ["sdotbelow"]=7779, + ["sdotbelowdotaccent"]=7785, + ["seagullbelowcmb"]=828, + ["second"]=8243, + ["secondtonechinese"]=714, + ["section"]=167, + ["seenarabic"]=1587, + ["seenfinalarabic"]=65202, + ["seeninitialarabic"]=65203, + ["seenmedialarabic"]=65204, + ["segoltahebrew"]=1426, + ["segolwidehebrew"]=1462, + ["seharmenian"]=1405, + ["sehiragana"]=12379, + ["sekatakana"]=12475, + ["sekatakanahalfwidth"]=65406, + ["semicolon"]=59, + ["semicolonarabic"]=1563, + ["semicolonmonospace"]=65307, + ["semicolonsmall"]=65108, + ["semivoicedmarkkana"]=12444, + ["semivoicedmarkkanahalfwidth"]=65439, + ["sentisquare"]=13090, + ["sentosquare"]=13091, + ["seven"]=55, + ["sevenbengali"]=2541, + ["sevencircle"]=9318, + ["sevencircleinversesansserif"]=10128, + ["sevendeva"]=2413, + ["seveneighths"]=8542, + ["sevengujarati"]=2797, + ["sevengurmukhi"]=2669, + ["sevenhackarabic"]=1639, + ["sevenhangzhou"]=12327, + ["sevenideographicparen"]=12838, + ["seveninferior"]=8327, + ["sevenmonospace"]=65303, + ["sevenparen"]=9338, + ["sevenperiod"]=9358, + ["sevenpersian"]=1783, + ["sevenroman"]=8566, + ["sevensuperior"]=8311, + ["seventeencircle"]=9328, + ["seventeenparen"]=9348, + ["seventeenperiod"]=9368, + ["seventhai"]=3671, + ["shaarmenian"]=1399, + ["shabengali"]=2486, + ["shacyrillic"]=1096, + ["shaddadammaarabic"]=64609, + ["shaddadammatanarabic"]=64606, + ["shaddafathaarabic"]=64608, + ["shaddafathatanarabic"]=1617, + ["shaddakasraarabic"]=64610, + ["shaddakasratanarabic"]=64607, + ["shadedark"]=9619, + ["shadelight"]=9617, + ["shademedium"]=9618, + ["shadeva"]=2358, + ["shagujarati"]=2742, + ["shagurmukhi"]=2614, + ["shalshelethebrew"]=1427, + ["shbopomofo"]=12565, + ["shchacyrillic"]=1097, + ["sheenarabic"]=1588, + ["sheenfinalarabic"]=65206, + ["sheeninitialarabic"]=65207, + ["sheenmedialarabic"]=65208, + ["sheicoptic"]=995, + ["sheqelhebrew"]=8362, + ["shevawidehebrew"]=1456, + ["shhacyrillic"]=1211, + ["shimacoptic"]=1005, + ["shindageshhebrew"]=64329, + ["shindageshshindothebrew"]=64300, + ["shindageshsindothebrew"]=64301, + ["shindothebrew"]=1473, + ["shinhebrew"]=1513, + ["shinshindothebrew"]=64298, + ["shinsindothebrew"]=64299, + ["shook"]=642, + ["sigma"]=963, + ["sigmafinal"]=962, + ["sigmalunatesymbolgreek"]=1010, + ["sihiragana"]=12375, + ["sikatakana"]=12471, + ["sikatakanahalfwidth"]=65404, + ["siluqlefthebrew"]=1469, + ["sindothebrew"]=1474, + ["siosacirclekorean"]=12916, + ["siosaparenkorean"]=12820, + ["sioscieuckorean"]=12670, + ["sioscirclekorean"]=12902, + ["sioskiyeokkorean"]=12666, + ["sioskorean"]=12613, + ["siosnieunkorean"]=12667, + ["siosparenkorean"]=12806, + ["siospieupkorean"]=12669, + ["siostikeutkorean"]=12668, + ["six"]=54, + ["sixbengali"]=2540, + ["sixcircle"]=9317, + ["sixcircleinversesansserif"]=10127, + ["sixdeva"]=2412, + ["sixgujarati"]=2796, + ["sixgurmukhi"]=2668, + ["sixhackarabic"]=1638, + ["sixhangzhou"]=12326, + ["sixideographicparen"]=12837, + ["sixinferior"]=8326, + ["sixmonospace"]=65302, + ["sixparen"]=9337, + ["sixperiod"]=9357, + ["sixpersian"]=1782, + ["sixroman"]=8565, + ["sixsuperior"]=8310, + ["sixteencircle"]=9327, + ["sixteencurrencydenominatorbengali"]=2553, + ["sixteenparen"]=9347, + ["sixteenperiod"]=9367, + ["sixthai"]=3670, + ["slash"]=47, + ["slashmonospace"]=65295, + ["slong"]=383, + ["slongdotaccent"]=7835, + ["smonospace"]=65363, + ["sofpasuqhebrew"]=1475, + ["softhyphen"]=173, + ["softsigncyrillic"]=1100, + ["sohiragana"]=12381, + ["sokatakana"]=12477, + ["sokatakanahalfwidth"]=65407, + ["soliduslongoverlaycmb"]=824, + ["solidusshortoverlaycmb"]=823, + ["sorusithai"]=3625, + ["sosalathai"]=3624, + ["sosothai"]=3595, + ["sosuathai"]=3626, + ["space"]=32, + ["spadesuitblack"]=9824, + ["spadesuitwhite"]=9828, + ["sparen"]=9390, + ["squarebelowcmb"]=827, + ["squarecc"]=13252, + ["squarecm"]=13213, + ["squarediagonalcrosshatchfill"]=9641, + ["squarehorizontalfill"]=9636, + ["squarekg"]=13199, + ["squarekm"]=13214, + ["squarekmcapital"]=13262, + ["squareln"]=13265, + ["squarelog"]=13266, + ["squaremg"]=13198, + ["squaremil"]=13269, + ["squaremm"]=13212, + ["squaremsquared"]=13217, + ["squareorthogonalcrosshatchfill"]=9638, + ["squareupperlefttolowerrightfill"]=9639, + ["squareupperrighttolowerleftfill"]=9640, + ["squareverticalfill"]=9637, + ["squarewhitewithsmallblack"]=9635, + ["srsquare"]=13275, + ["ssabengali"]=2487, + ["ssadeva"]=2359, + ["ssagujarati"]=2743, + ["ssangcieuckorean"]=12617, + ["ssanghieuhkorean"]=12677, + ["ssangieungkorean"]=12672, + ["ssangkiyeokkorean"]=12594, + ["ssangnieunkorean"]=12645, + ["ssangpieupkorean"]=12611, + ["ssangsioskorean"]=12614, + ["ssangtikeutkorean"]=12600, + ["sterling"]=163, + ["sterlingmonospace"]=65505, + ["strokelongoverlaycmb"]=822, + ["strokeshortoverlaycmb"]=821, + ["subset"]=8834, + ["subsetnotequal"]=8842, + ["subsetorequal"]=8838, + ["succeeds"]=8827, + ["suchthat"]=8715, + ["suhiragana"]=12377, + ["sukatakana"]=12473, + ["sukatakanahalfwidth"]=65405, + ["sukunarabic"]=1618, + ["summation"]=8721, + ["sun"]=9788, + ["superset"]=8835, + ["supersetnotequal"]=8843, + ["supersetorequal"]=8839, + ["svsquare"]=13276, + ["syouwaerasquare"]=13180, + ["t"]=116, + ["tabengali"]=2468, + ["tackdown"]=8868, + ["tackleft"]=8867, + ["tadeva"]=2340, + ["tagujarati"]=2724, + ["tagurmukhi"]=2596, + ["taharabic"]=1591, + ["tahfinalarabic"]=65218, + ["tahinitialarabic"]=65219, + ["tahiragana"]=12383, + ["tahmedialarabic"]=65220, + ["taisyouerasquare"]=13181, + ["takatakana"]=12479, + ["takatakanahalfwidth"]=65408, + ["tatweelarabic"]=1600, + ["tau"]=964, + ["tavdageshhebrew"]=64330, + ["tavhebrew"]=1514, + ["tbar"]=359, + ["tbopomofo"]=12554, + ["tcaron"]=357, + ["tccurl"]=680, + ["tcheharabic"]=1670, + ["tchehfinalarabic"]=64379, + ["tchehmedialarabic"]=64381, + ["tchehmeeminitialarabic"]=64380, + ["tcircle"]=9443, + ["tcircumflexbelow"]=7793, + ["tcommaaccent"]=355, + ["tdieresis"]=7831, + ["tdotaccent"]=7787, + ["tdotbelow"]=7789, + ["tecyrillic"]=1090, + ["tedescendercyrillic"]=1197, + ["teharabic"]=1578, + ["tehfinalarabic"]=65174, + ["tehhahinitialarabic"]=64674, + ["tehhahisolatedarabic"]=64524, + ["tehinitialarabic"]=65175, + ["tehiragana"]=12390, + ["tehjeeminitialarabic"]=64673, + ["tehjeemisolatedarabic"]=64523, + ["tehmarbutaarabic"]=1577, + ["tehmarbutafinalarabic"]=65172, + ["tehmedialarabic"]=65176, + ["tehmeeminitialarabic"]=64676, + ["tehmeemisolatedarabic"]=64526, + ["tehnoonfinalarabic"]=64627, + ["tekatakana"]=12486, + ["tekatakanahalfwidth"]=65411, + ["telephone"]=8481, + ["telephoneblack"]=9742, + ["telishagedolahebrew"]=1440, + ["telishaqetanahebrew"]=1449, + ["tencircle"]=9321, + ["tenideographicparen"]=12841, + ["tenparen"]=9341, + ["tenperiod"]=9361, + ["tenroman"]=8569, + ["tesh"]=679, + ["tetdageshhebrew"]=64312, + ["tethebrew"]=1496, + ["tetsecyrillic"]=1205, + ["tevirlefthebrew"]=1435, + ["thabengali"]=2469, + ["thadeva"]=2341, + ["thagujarati"]=2725, + ["thagurmukhi"]=2597, + ["thalarabic"]=1584, + ["thalfinalarabic"]=65196, + ["thanthakhatthai"]=3660, + ["theharabic"]=1579, + ["thehfinalarabic"]=65178, + ["thehinitialarabic"]=65179, + ["thehmedialarabic"]=65180, + ["thereexists"]=8707, + ["therefore"]=8756, + ["theta"]=952, + ["thetasymbolgreek"]=977, + ["thieuthacirclekorean"]=12921, + ["thieuthaparenkorean"]=12825, + ["thieuthcirclekorean"]=12907, + ["thieuthkorean"]=12620, + ["thieuthparenkorean"]=12811, + ["thirteencircle"]=9324, + ["thirteenparen"]=9344, + ["thirteenperiod"]=9364, + ["thonangmonthothai"]=3601, + ["thook"]=429, + ["thophuthaothai"]=3602, + ["thorn"]=254, + ["thothahanthai"]=3607, + ["thothanthai"]=3600, + ["thothongthai"]=3608, + ["thothungthai"]=3606, + ["thousandcyrillic"]=1154, + ["thousandsseparatorpersian"]=1644, + ["three"]=51, + ["threebengali"]=2537, + ["threecircle"]=9314, + ["threecircleinversesansserif"]=10124, + ["threedeva"]=2409, + ["threeeighths"]=8540, + ["threegujarati"]=2793, + ["threegurmukhi"]=2665, + ["threehackarabic"]=1635, + ["threehangzhou"]=12323, + ["threeideographicparen"]=12834, + ["threeinferior"]=8323, + ["threemonospace"]=65299, + ["threenumeratorbengali"]=2550, + ["threeparen"]=9334, + ["threeperiod"]=9354, + ["threepersian"]=1779, + ["threequarters"]=190, + ["threeroman"]=8562, + ["threesuperior"]=179, + ["threethai"]=3667, + ["thzsquare"]=13204, + ["tihiragana"]=12385, + ["tikatakana"]=12481, + ["tikatakanahalfwidth"]=65409, + ["tikeutacirclekorean"]=12912, + ["tikeutaparenkorean"]=12816, + ["tikeutcirclekorean"]=12898, + ["tikeutkorean"]=12599, + ["tikeutparenkorean"]=12802, + ["tilde"]=732, + ["tildebelowcmb"]=816, + ["tildecomb"]=771, + ["tildedoublecmb"]=864, + ["tildeoperator"]=8764, + ["tildeoverlaycmb"]=820, + ["tildeverticalcmb"]=830, + ["timescircle"]=8855, + ["tipehalefthebrew"]=1430, + ["tippigurmukhi"]=2672, + ["titlocyrilliccmb"]=1155, + ["tiwnarmenian"]=1407, + ["tlinebelow"]=7791, + ["tmonospace"]=65364, + ["toarmenian"]=1385, + ["tohiragana"]=12392, + ["tokatakana"]=12488, + ["tokatakanahalfwidth"]=65412, + ["tonebarextrahighmod"]=741, + ["tonebarextralowmod"]=745, + ["tonebarhighmod"]=742, + ["tonebarlowmod"]=744, + ["tonebarmidmod"]=743, + ["tonefive"]=445, + ["tonesix"]=389, + ["tonetwo"]=424, + ["tonos"]=900, + ["tonsquare"]=13095, + ["topatakthai"]=3599, + ["tortoiseshellbracketleft"]=12308, + ["tortoiseshellbracketleftsmall"]=65117, + ["tortoiseshellbracketleftvertical"]=65081, + ["tortoiseshellbracketright"]=12309, + ["tortoiseshellbracketrightsmall"]=65118, + ["tortoiseshellbracketrightvertical"]=65082, + ["totaothai"]=3605, + ["tpalatalhook"]=427, + ["tparen"]=9391, + ["trademark"]=8482, + ["tretroflexhook"]=648, + ["triagdn"]=9660, + ["triaglf"]=9668, + ["triagrt"]=9658, + ["triagup"]=9650, + ["ts"]=678, + ["tsadidageshhebrew"]=64326, + ["tsadihebrew"]=1510, + ["tsecyrillic"]=1094, + ["tserewidehebrew"]=1461, + ["tshecyrillic"]=1115, + ["ttabengali"]=2463, + ["ttadeva"]=2335, + ["ttagujarati"]=2719, + ["ttagurmukhi"]=2591, + ["tteharabic"]=1657, + ["ttehfinalarabic"]=64359, + ["ttehinitialarabic"]=64360, + ["ttehmedialarabic"]=64361, + ["tthabengali"]=2464, + ["tthadeva"]=2336, + ["tthagujarati"]=2720, + ["tthagurmukhi"]=2592, + ["tturned"]=647, + ["tuhiragana"]=12388, + ["tukatakana"]=12484, + ["tukatakanahalfwidth"]=65410, + ["tusmallhiragana"]=12387, + ["tusmallkatakana"]=12483, + ["tusmallkatakanahalfwidth"]=65391, + ["twelvecircle"]=9323, + ["twelveparen"]=9343, + ["twelveperiod"]=9363, + ["twelveroman"]=8571, + ["twentycircle"]=9331, + ["twentyparen"]=9351, + ["twentyperiod"]=9371, + ["two"]=50, + ["twobengali"]=2536, + ["twocircle"]=9313, + ["twocircleinversesansserif"]=10123, + ["twodeva"]=2408, + ["twodotleader"]=8229, + ["twodotleadervertical"]=65072, + ["twogujarati"]=2792, + ["twogurmukhi"]=2664, + ["twohackarabic"]=1634, + ["twohangzhou"]=12322, + ["twoideographicparen"]=12833, + ["twoinferior"]=8322, + ["twomonospace"]=65298, + ["twonumeratorbengali"]=2549, + ["twoparen"]=9333, + ["twoperiod"]=9353, + ["twopersian"]=1778, + ["tworoman"]=8561, + ["twostroke"]=443, + ["twosuperior"]=178, + ["twothai"]=3666, + ["twothirds"]=8532, + ["u"]=117, + ["uacute"]=250, + ["ubar"]=649, + ["ubengali"]=2441, + ["ubopomofo"]=12584, + ["ubreve"]=365, + ["ucaron"]=468, + ["ucircle"]=9444, + ["ucircumflex"]=251, + ["ucircumflexbelow"]=7799, + ["ucyrillic"]=1091, + ["udattadeva"]=2385, + ["udblgrave"]=533, + ["udeva"]=2313, + ["udieresis"]=252, + ["udieresisacute"]=472, + ["udieresisbelow"]=7795, + ["udieresiscaron"]=474, + ["udieresiscyrillic"]=1265, + ["udieresisgrave"]=476, + ["udieresismacron"]=470, + ["udotbelow"]=7909, + ["ugrave"]=249, + ["ugujarati"]=2697, + ["ugurmukhi"]=2569, + ["uhiragana"]=12358, + ["uhookabove"]=7911, + ["uhorn"]=432, + ["uhornacute"]=7913, + ["uhorndotbelow"]=7921, + ["uhorngrave"]=7915, + ["uhornhookabove"]=7917, + ["uhorntilde"]=7919, + ["uhungarumlaut"]=369, + ["uhungarumlautcyrillic"]=1267, + ["uinvertedbreve"]=535, + ["ukatakana"]=12454, + ["ukatakanahalfwidth"]=65395, + ["ukcyrillic"]=1145, + ["ukorean"]=12636, + ["umacron"]=363, + ["umacroncyrillic"]=1263, + ["umacrondieresis"]=7803, + ["umatragurmukhi"]=2625, + ["umonospace"]=65365, + ["underscore"]=95, + ["underscoredbl"]=8215, + ["underscoremonospace"]=65343, + ["underscorevertical"]=65075, + ["underscorewavy"]=65103, + ["union"]=8746, + ["universal"]=8704, + ["uogonek"]=371, + ["uparen"]=9392, + ["upblock"]=9600, + ["upperdothebrew"]=1476, + ["upsilon"]=965, + ["upsilondieresis"]=971, + ["upsilondieresistonos"]=944, + ["upsilonlatin"]=650, + ["upsilontonos"]=973, + ["uptackbelowcmb"]=797, + ["uptackmod"]=724, + ["uragurmukhi"]=2675, + ["uring"]=367, + ["ushortcyrillic"]=1118, + ["usmallhiragana"]=12357, + ["usmallkatakana"]=12453, + ["usmallkatakanahalfwidth"]=65385, + ["ustraightcyrillic"]=1199, + ["ustraightstrokecyrillic"]=1201, + ["utilde"]=361, + ["utildeacute"]=7801, + ["utildebelow"]=7797, + ["uubengali"]=2442, + ["uudeva"]=2314, + ["uugujarati"]=2698, + ["uugurmukhi"]=2570, + ["uumatragurmukhi"]=2626, + ["uuvowelsignbengali"]=2498, + ["uuvowelsigndeva"]=2370, + ["uuvowelsigngujarati"]=2754, + ["uvowelsignbengali"]=2497, + ["uvowelsigndeva"]=2369, + ["uvowelsigngujarati"]=2753, + ["v"]=118, + ["vadeva"]=2357, + ["vagujarati"]=2741, + ["vagurmukhi"]=2613, + ["vakatakana"]=12535, + ["vavdageshhebrew"]=64309, + ["vavhebrew"]=1493, + ["vavholamhebrew"]=64331, + ["vavvavhebrew"]=1520, + ["vavyodhebrew"]=1521, + ["vcircle"]=9445, + ["vdotbelow"]=7807, + ["vecyrillic"]=1074, + ["veharabic"]=1700, + ["vehfinalarabic"]=64363, + ["vehinitialarabic"]=64364, + ["vehmedialarabic"]=64365, + ["vekatakana"]=12537, + ["venus"]=9792, + ["verticalbar"]=124, + ["verticallineabovecmb"]=781, + ["verticallinebelowcmb"]=809, + ["verticallinelowmod"]=716, + ["verticallinemod"]=712, + ["vewarmenian"]=1406, + ["vhook"]=651, + ["vikatakana"]=12536, + ["viramabengali"]=2509, + ["viramadeva"]=2381, + ["viramagujarati"]=2765, + ["visargabengali"]=2435, + ["visargadeva"]=2307, + ["visargagujarati"]=2691, + ["vmonospace"]=65366, + ["voarmenian"]=1400, + ["voicediterationhiragana"]=12446, + ["voicediterationkatakana"]=12542, + ["voicedmarkkana"]=12443, + ["voicedmarkkanahalfwidth"]=65438, + ["vokatakana"]=12538, + ["vparen"]=9393, + ["vtilde"]=7805, + ["vturned"]=652, + ["vuhiragana"]=12436, + ["vukatakana"]=12532, + ["w"]=119, + ["wacute"]=7811, + ["waekorean"]=12633, + ["wahiragana"]=12431, + ["wakatakana"]=12527, + ["wakatakanahalfwidth"]=65436, + ["wakorean"]=12632, + ["wasmallhiragana"]=12430, + ["wasmallkatakana"]=12526, + ["wattosquare"]=13143, + ["wavedash"]=12316, + ["wavyunderscorevertical"]=65076, + ["wawarabic"]=1608, + ["wawfinalarabic"]=65262, + ["wawhamzaabovearabic"]=1572, + ["wawhamzaabovefinalarabic"]=65158, + ["wbsquare"]=13277, + ["wcircle"]=9446, + ["wcircumflex"]=373, + ["wdieresis"]=7813, + ["wdotaccent"]=7815, + ["wdotbelow"]=7817, + ["wehiragana"]=12433, + ["weierstrass"]=8472, + ["wekatakana"]=12529, + ["wekorean"]=12638, + ["weokorean"]=12637, + ["wgrave"]=7809, + ["whitebullet"]=9702, + ["whitecircle"]=9675, + ["whitecircleinverse"]=9689, + ["whitecornerbracketleft"]=12302, + ["whitecornerbracketleftvertical"]=65091, + ["whitecornerbracketright"]=12303, + ["whitecornerbracketrightvertical"]=65092, + ["whitediamond"]=9671, + ["whitediamondcontainingblacksmalldiamond"]=9672, + ["whitedownpointingsmalltriangle"]=9663, + ["whitedownpointingtriangle"]=9661, + ["whiteleftpointingsmalltriangle"]=9667, + ["whiteleftpointingtriangle"]=9665, + ["whitelenticularbracketleft"]=12310, + ["whitelenticularbracketright"]=12311, + ["whiterightpointingsmalltriangle"]=9657, + ["whiterightpointingtriangle"]=9655, + ["whitesmallsquare"]=9643, + ["whitesmilingface"]=9786, + ["whitesquare"]=9633, + ["whitestar"]=9734, + ["whitetelephone"]=9743, + ["whitetortoiseshellbracketleft"]=12312, + ["whitetortoiseshellbracketright"]=12313, + ["whiteuppointingsmalltriangle"]=9653, + ["whiteuppointingtriangle"]=9651, + ["wihiragana"]=12432, + ["wikatakana"]=12528, + ["wikorean"]=12639, + ["wmonospace"]=65367, + ["wohiragana"]=12434, + ["wokatakana"]=12530, + ["wokatakanahalfwidth"]=65382, + ["won"]=8361, + ["wonmonospace"]=65510, + ["wowaenthai"]=3623, + ["wparen"]=9394, + ["wring"]=7832, + ["wsuperior"]=695, + ["wturned"]=653, + ["wynn"]=447, + ["x"]=120, + ["xabovecmb"]=829, + ["xbopomofo"]=12562, + ["xcircle"]=9447, + ["xdieresis"]=7821, + ["xdotaccent"]=7819, + ["xeharmenian"]=1389, + ["xi"]=958, + ["xmonospace"]=65368, + ["xparen"]=9395, + ["xsuperior"]=739, + ["y"]=121, + ["yaadosquare"]=13134, + ["yabengali"]=2479, + ["yacute"]=253, + ["yadeva"]=2351, + ["yaekorean"]=12626, + ["yagujarati"]=2735, + ["yagurmukhi"]=2607, + ["yahiragana"]=12420, + ["yakatakana"]=12516, + ["yakatakanahalfwidth"]=65428, + ["yakorean"]=12625, + ["yamakkanthai"]=3662, + ["yasmallhiragana"]=12419, + ["yasmallkatakana"]=12515, + ["yasmallkatakanahalfwidth"]=65388, + ["yatcyrillic"]=1123, + ["ycircle"]=9448, + ["ycircumflex"]=375, + ["ydieresis"]=255, + ["ydotaccent"]=7823, + ["ydotbelow"]=7925, + ["yeharabic"]=1610, + ["yehbarreearabic"]=1746, + ["yehbarreefinalarabic"]=64431, + ["yehfinalarabic"]=65266, + ["yehhamzaabovearabic"]=1574, + ["yehhamzaabovefinalarabic"]=65162, + ["yehhamzaaboveinitialarabic"]=65163, + ["yehhamzaabovemedialarabic"]=65164, + ["yehinitialarabic"]=65267, + ["yehmedialarabic"]=65268, + ["yehmeeminitialarabic"]=64733, + ["yehmeemisolatedarabic"]=64600, + ["yehnoonfinalarabic"]=64660, + ["yehthreedotsbelowarabic"]=1745, + ["yekorean"]=12630, + ["yen"]=165, + ["yenmonospace"]=65509, + ["yeokorean"]=12629, + ["yeorinhieuhkorean"]=12678, + ["yerahbenyomolefthebrew"]=1450, + ["yericyrillic"]=1099, + ["yerudieresiscyrillic"]=1273, + ["yesieungkorean"]=12673, + ["yesieungpansioskorean"]=12675, + ["yesieungsioskorean"]=12674, + ["yetivhebrew"]=1434, + ["ygrave"]=7923, + ["yhook"]=436, + ["yhookabove"]=7927, + ["yiarmenian"]=1397, + ["yicyrillic"]=1111, + ["yikorean"]=12642, + ["yinyang"]=9775, + ["yiwnarmenian"]=1410, + ["ymonospace"]=65369, + ["yoddageshhebrew"]=64313, + ["yodhebrew"]=1497, + ["yodyodhebrew"]=1522, + ["yodyodpatahhebrew"]=64287, + ["yohiragana"]=12424, + ["yoikorean"]=12681, + ["yokatakana"]=12520, + ["yokatakanahalfwidth"]=65430, + ["yokorean"]=12635, + ["yosmallhiragana"]=12423, + ["yosmallkatakana"]=12519, + ["yosmallkatakanahalfwidth"]=65390, + ["yotgreek"]=1011, + ["yoyaekorean"]=12680, + ["yoyakorean"]=12679, + ["yoyakthai"]=3618, + ["yoyingthai"]=3597, + ["yparen"]=9396, + ["ypogegrammeni"]=890, + ["ypogegrammenigreekcmb"]=837, + ["yr"]=422, + ["yring"]=7833, + ["ysuperior"]=696, + ["ytilde"]=7929, + ["yturned"]=654, + ["yuhiragana"]=12422, + ["yuikorean"]=12684, + ["yukatakana"]=12518, + ["yukatakanahalfwidth"]=65429, + ["yukorean"]=12640, + ["yusbigcyrillic"]=1131, + ["yusbigiotifiedcyrillic"]=1133, + ["yuslittlecyrillic"]=1127, + ["yuslittleiotifiedcyrillic"]=1129, + ["yusmallhiragana"]=12421, + ["yusmallkatakana"]=12517, + ["yusmallkatakanahalfwidth"]=65389, + ["yuyekorean"]=12683, + ["yuyeokorean"]=12682, + ["yyabengali"]=2527, + ["yyadeva"]=2399, + ["z"]=122, + ["zaarmenian"]=1382, + ["zacute"]=378, + ["zadeva"]=2395, + ["zagurmukhi"]=2651, + ["zaharabic"]=1592, + ["zahfinalarabic"]=65222, + ["zahinitialarabic"]=65223, + ["zahiragana"]=12374, + ["zahmedialarabic"]=65224, + ["zainarabic"]=1586, + ["zainfinalarabic"]=65200, + ["zakatakana"]=12470, + ["zaqefgadolhebrew"]=1429, + ["zaqefqatanhebrew"]=1428, + ["zarqahebrew"]=1432, + ["zayindageshhebrew"]=64310, + ["zayinhebrew"]=1494, + ["zbopomofo"]=12567, + ["zcaron"]=382, + ["zcircle"]=9449, + ["zcircumflex"]=7825, + ["zcurl"]=657, + ["zdotaccent"]=380, + ["zdotbelow"]=7827, + ["zecyrillic"]=1079, + ["zedescendercyrillic"]=1177, + ["zedieresiscyrillic"]=1247, + ["zehiragana"]=12380, + ["zekatakana"]=12476, + ["zero"]=48, + ["zerobengali"]=2534, + ["zerodeva"]=2406, + ["zerogujarati"]=2790, + ["zerogurmukhi"]=2662, + ["zerohackarabic"]=1632, + ["zeroinferior"]=8320, + ["zeromonospace"]=65296, + ["zeropersian"]=1776, + ["zerosuperior"]=8304, + ["zerothai"]=3664, + ["zerowidthjoiner"]=65279, + ["zerowidthnonjoiner"]=8204, + ["zerowidthspace"]=8203, + ["zeta"]=950, + ["zhbopomofo"]=12563, + ["zhearmenian"]=1386, + ["zhebrevecyrillic"]=1218, + ["zhecyrillic"]=1078, + ["zhedescendercyrillic"]=1175, + ["zhedieresiscyrillic"]=1245, + ["zihiragana"]=12376, + ["zikatakana"]=12472, + ["zinorhebrew"]=1454, + ["zlinebelow"]=7829, + ["zmonospace"]=65370, + ["zohiragana"]=12382, + ["zokatakana"]=12478, + ["zparen"]=9397, + ["zretroflexhook"]=656, + ["zstroke"]=438, + ["zuhiragana"]=12378, + ["zukatakana"]=12474, + + -- extras + + ["Dcroat"]=272, + ["Delta"]=8710, + ["Euro"]=8364, + ["H18533"]=9679, + ["H18543"]=9642, + ["H18551"]=9643, + ["H22073"]=9633, + ["Ldot"]=319, + ["Oslashacute"]=510, + ["SF10000"]=9484, + ["SF20000"]=9492, + ["SF30000"]=9488, + ["SF40000"]=9496, + ["SF50000"]=9532, + ["SF60000"]=9516, + ["SF70000"]=9524, + ["SF80000"]=9500, + ["SF90000"]=9508, + ["Upsilon1"]=978, + ["afii10066"]=1073, + ["afii10067"]=1074, + ["afii10068"]=1075, + ["afii10069"]=1076, + ["afii10070"]=1077, + ["afii10071"]=1105, + ["afii10072"]=1078, + ["afii10073"]=1079, + ["afii10074"]=1080, + ["afii10075"]=1081, + ["afii10076"]=1082, + ["afii10077"]=1083, + ["afii10078"]=1084, + ["afii10079"]=1085, + ["afii10080"]=1086, + ["afii10081"]=1087, + ["afii10082"]=1088, + ["afii10083"]=1089, + ["afii10084"]=1090, + ["afii10085"]=1091, + ["afii10086"]=1092, + ["afii10087"]=1093, + ["afii10088"]=1094, + ["afii10089"]=1095, + ["afii10090"]=1096, + ["afii10091"]=1097, + ["afii10092"]=1098, + ["afii10093"]=1099, + ["afii10094"]=1100, + ["afii10095"]=1101, + ["afii10096"]=1102, + ["afii10097"]=1103, + ["afii10098"]=1169, + ["afii10099"]=1106, + ["afii10100"]=1107, + ["afii10101"]=1108, + ["afii10102"]=1109, + ["afii10103"]=1110, + ["afii10104"]=1111, + ["afii10105"]=1112, + ["afii10106"]=1113, + ["afii10107"]=1114, + ["afii10108"]=1115, + ["afii10109"]=1116, + ["afii10110"]=1118, + ["afii10193"]=1119, + ["afii10194"]=1123, + ["afii10195"]=1139, + ["afii10196"]=1141, + ["afii10846"]=1241, + ["afii208"]=8213, + ["afii57381"]=1642, + ["afii57388"]=1548, + ["afii57392"]=1632, + ["afii57393"]=1633, + ["afii57394"]=1634, + ["afii57395"]=1635, + ["afii57396"]=1636, + ["afii57397"]=1637, + ["afii57398"]=1638, + ["afii57399"]=1639, + ["afii57400"]=1640, + ["afii57401"]=1641, + ["afii57403"]=1563, + ["afii57407"]=1567, + ["afii57409"]=1569, + ["afii57410"]=1570, + ["afii57411"]=1571, + ["afii57412"]=1572, + ["afii57413"]=1573, + ["afii57414"]=1574, + ["afii57415"]=1575, + ["afii57416"]=1576, + ["afii57417"]=1577, + ["afii57418"]=1578, + ["afii57419"]=1579, + ["afii57420"]=1580, + ["afii57421"]=1581, + ["afii57422"]=1582, + ["afii57423"]=1583, + ["afii57424"]=1584, + ["afii57425"]=1585, + ["afii57426"]=1586, + ["afii57427"]=1587, + ["afii57428"]=1588, + ["afii57429"]=1589, + ["afii57430"]=1590, + ["afii57431"]=1591, + ["afii57432"]=1592, + ["afii57433"]=1593, + ["afii57434"]=1594, + ["afii57440"]=1600, + ["afii57441"]=1601, + ["afii57442"]=1602, + ["afii57443"]=1603, + ["afii57444"]=1604, + ["afii57445"]=1605, + ["afii57446"]=1606, + ["afii57448"]=1608, + ["afii57449"]=1609, + ["afii57450"]=1610, + ["afii57451"]=1611, + ["afii57452"]=1612, + ["afii57453"]=1613, + ["afii57454"]=1614, + ["afii57455"]=1615, + ["afii57456"]=1616, + ["afii57457"]=1617, + ["afii57458"]=1618, + ["afii57470"]=1607, + ["afii57505"]=1700, + ["afii57506"]=1662, + ["afii57507"]=1670, + ["afii57508"]=1688, + ["afii57509"]=1711, + ["afii57511"]=1657, + ["afii57512"]=1672, + ["afii57513"]=1681, + ["afii57514"]=1722, + ["afii57519"]=1746, + ["afii57636"]=8362, + ["afii57645"]=1470, + ["afii57658"]=1475, + ["afii57664"]=1488, + ["afii57665"]=1489, + ["afii57666"]=1490, + ["afii57667"]=1491, + ["afii57668"]=1492, + ["afii57669"]=1493, + ["afii57670"]=1494, + ["afii57671"]=1495, + ["afii57672"]=1496, + ["afii57673"]=1497, + ["afii57674"]=1498, + ["afii57675"]=1499, + ["afii57676"]=1500, + ["afii57677"]=1501, + ["afii57678"]=1502, + ["afii57679"]=1503, + ["afii57680"]=1504, + ["afii57681"]=1505, + ["afii57682"]=1506, + ["afii57683"]=1507, + ["afii57684"]=1508, + ["afii57685"]=1509, + ["afii57686"]=1510, + ["afii57687"]=1511, + ["afii57688"]=1512, + ["afii57689"]=1513, + ["afii57690"]=1514, + ["afii57716"]=1520, + ["afii57717"]=1521, + ["afii57718"]=1522, + ["afii57793"]=1460, + ["afii57794"]=1461, + ["afii57795"]=1462, + ["afii57796"]=1467, + ["afii57797"]=1464, + ["afii57798"]=1463, + ["afii57799"]=1456, + ["afii57800"]=1458, + ["afii57801"]=1457, + ["afii57802"]=1459, + ["afii57803"]=1474, + ["afii57804"]=1473, + ["afii57806"]=1465, + ["afii57807"]=1468, + ["afii57839"]=1469, + ["afii57841"]=1471, + ["afii57842"]=1472, + ["afii57929"]=700, + ["afii61248"]=8453, + ["afii61289"]=8467, + ["afii61352"]=8470, + ["afii61664"]=8204, + ["afii63167"]=1645, + ["afii64937"]=701, + ["arrowdblboth"]=8660, + ["arrowdblleft"]=8656, + ["arrowdblright"]=8658, + ["arrowupdnbse"]=8616, + ["bar"]=124, + ["circle"]=9675, + ["circlemultiply"]=8855, + ["circleplus"]=8853, + ["club"]=9827, + ["colonmonetary"]=8353, + ["dcroat"]=273, + ["dkshade"]=9619, + ["existential"]=8707, + ["female"]=9792, + ["gradient"]=8711, + ["heart"]=9829, + ["hookabovecomb"]=777, + ["invcircle"]=9689, + ["ldot"]=320, + ["longs"]=383, + ["ltshade"]=9617, + ["male"]=9794, + ["mu"]=181, + ["napostrophe"]=329, + ["notelement"]=8713, + ["omega1"]=982, + ["openbullet"]=9702, + ["orthogonal"]=8735, + ["oslashacute"]=511, + ["phi1"]=981, + ["propersubset"]=8834, + ["propersuperset"]=8835, + ["reflexsubset"]=8838, + ["reflexsuperset"]=8839, + ["shade"]=9618, + ["sigma1"]=962, + ["similar"]=8764, + ["smileface"]=9786, + ["spacehackarabic"]=32, + ["spade"]=9824, + ["theta1"]=977, + ["twodotenleader"]=8229, +} diff --git a/otfl-font-agl.lua b/otfl-font-agl.lua deleted file mode 100644 index 820600a..0000000 --- a/otfl-font-agl.lua +++ /dev/null @@ -1,3699 +0,0 @@ -if not modules then modules = { } end modules ['font-map'] = { - version = 1.001, - comment = "companion to font-ini.mkiv", - author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", - copyright = "derived from http://www.adobe.com/devnet/opentype/archives/glyphlist.txt", - comment = "Adobe Glyph List, version 2.0, September 20, 2002", -} - -local allocate = utilities.storage.allocate - -fonts.enc = fonts.enc or { } -local enc = fonts.enc -local agl = { } -enc.agl = agl - -agl.names = allocate { -- to name - "controlSTX", - "controlSOT", - "controlETX", - "controlEOT", - "controlENQ", - "controlACK", - "controlBEL", - "controlBS", - "controlHT", - "controlLF", - "controlVT", - "controlFF", - "controlCR", - "controlSO", - "controlSI", - "controlDLE", - "controlDC1", - "controlDC2", - "controlDC3", - "controlDC4", - "controlNAK", - "controlSYN", - "controlETB", - "controlCAN", - "controlEM", - "controlSUB", - "controlESC", - "controlFS", - "controlGS", - "controlRS", - "controlUS", - "spacehackarabic", - "exclam", - "quotedbl", - "numbersign", - "dollar", - "percent", - "ampersand", - "quotesingle", - "parenleft", - "parenright", - "asterisk", - "plus", - "comma", - "hyphen", - "period", - "slash", - "zero", - "one", - "two", - "three", - "four", - "five", - "six", - "seven", - "eight", - "nine", - "colon", - "semicolon", - "less", - "equal", - "greater", - "question", - "at", - "A", - "B", - "C", - "D", - "E", - "F", - "G", - "H", - "I", - "J", - "K", - "L", - "M", - "N", - "O", - "P", - "Q", - "R", - "S", - "T", - "U", - "V", - "W", - "X", - "Y", - "Z", - "bracketleft", - "backslash", - "bracketright", - "asciicircum", - "underscore", - "grave", - "a", - "b", - "c", - "d", - "e", - "f", - "g", - "h", - "i", - "j", - "k", - "l", - "m", - "n", - "o", - "p", - "q", - "r", - "s", - "t", - "u", - "v", - "w", - "x", - "y", - "z", - "braceleft", - "verticalbar", - "braceright", - "asciitilde", - "controlDEL", - [0x00A0] = "nonbreakingspace", - [0x00A1] = "exclamdown", - [0x00A2] = "cent", - [0x00A3] = "sterling", - [0x00A4] = "currency", - [0x00A5] = "yen", - [0x00A6] = "brokenbar", - [0x00A7] = "section", - [0x00A8] = "dieresis", - [0x00A9] = "copyright", - [0x00AA] = "ordfeminine", - [0x00AB] = "guillemotleft", - [0x00AC] = "logicalnot", - [0x00AD] = "softhyphen", - [0x00AE] = "registered", - [0x00AF] = "overscore", - [0x00B0] = "degree", - [0x00B1] = "plusminus", - [0x00B2] = "twosuperior", - [0x00B3] = "threesuperior", - [0x00B4] = "acute", - [0x00B5] = "mu1", - [0x00B6] = "paragraph", - [0x00B7] = "periodcentered", - [0x00B8] = "cedilla", - [0x00B9] = "onesuperior", - [0x00BA] = "ordmasculine", - [0x00BB] = "guillemotright", - [0x00BC] = "onequarter", - [0x00BD] = "onehalf", - [0x00BE] = "threequarters", - [0x00BF] = "questiondown", - [0x00C0] = "Agrave", - [0x00C1] = "Aacute", - [0x00C2] = "Acircumflex", - [0x00C3] = "Atilde", - [0x00C4] = "Adieresis", - [0x00C5] = "Aring", - [0x00C6] = "AE", - [0x00C7] = "Ccedilla", - [0x00C8] = "Egrave", - [0x00C9] = "Eacute", - [0x00CA] = "Ecircumflex", - [0x00CB] = "Edieresis", - [0x00CC] = "Igrave", - [0x00CD] = "Iacute", - [0x00CE] = "Icircumflex", - [0x00CF] = "Idieresis", - [0x00D0] = "Eth", - [0x00D1] = "Ntilde", - [0x00D2] = "Ograve", - [0x00D3] = "Oacute", - [0x00D4] = "Ocircumflex", - [0x00D5] = "Otilde", - [0x00D6] = "Odieresis", - [0x00D7] = "multiply", - [0x00D8] = "Oslash", - [0x00D9] = "Ugrave", - [0x00DA] = "Uacute", - [0x00DB] = "Ucircumflex", - [0x00DC] = "Udieresis", - [0x00DD] = "Yacute", - [0x00DE] = "Thorn", - [0x00DF] = "germandbls", - [0x00E0] = "agrave", - [0x00E1] = "aacute", - [0x00E2] = "acircumflex", - [0x00E3] = "atilde", - [0x00E4] = "adieresis", - [0x00E5] = "aring", - [0x00E6] = "ae", - [0x00E7] = "ccedilla", - [0x00E8] = "egrave", - [0x00E9] = "eacute", - [0x00EA] = "ecircumflex", - [0x00EB] = "edieresis", - [0x00EC] = "igrave", - [0x00ED] = "iacute", - [0x00EE] = "icircumflex", - [0x00EF] = "idieresis", - [0x00F0] = "eth", - [0x00F1] = "ntilde", - [0x00F2] = "ograve", - [0x00F3] = "oacute", - [0x00F4] = "ocircumflex", - [0x00F5] = "otilde", - [0x00F6] = "odieresis", - [0x00F7] = "divide", - [0x00F8] = "oslash", - [0x00F9] = "ugrave", - [0x00FA] = "uacute", - [0x00FB] = "ucircumflex", - [0x00FC] = "udieresis", - [0x00FD] = "yacute", - [0x00FE] = "thorn", - [0x00FF] = "ydieresis", - [0x0100] = "Amacron", - [0x0101] = "amacron", - [0x0102] = "Abreve", - [0x0103] = "abreve", - [0x0104] = "Aogonek", - [0x0105] = "aogonek", - [0x0106] = "Cacute", - [0x0107] = "cacute", - [0x0108] = "Ccircumflex", - [0x0109] = "ccircumflex", - [0x010A] = "Cdotaccent", - [0x010B] = "cdotaccent", - [0x010C] = "Ccaron", - [0x010D] = "ccaron", - [0x010E] = "Dcaron", - [0x010F] = "dcaron", - [0x0110] = "Dslash", - [0x0111] = "dmacron", - [0x0112] = "Emacron", - [0x0113] = "emacron", - [0x0114] = "Ebreve", - [0x0115] = "ebreve", - [0x0116] = "Edotaccent", - [0x0117] = "edotaccent", - [0x0118] = "Eogonek", - [0x0119] = "eogonek", - [0x011A] = "Ecaron", - [0x011B] = "ecaron", - [0x011C] = "Gcircumflex", - [0x011D] = "gcircumflex", - [0x011E] = "Gbreve", - [0x011F] = "gbreve", - [0x0120] = "Gdotaccent", - [0x0121] = "gdotaccent", - [0x0122] = "Gcommaaccent", - [0x0123] = "gcommaaccent", - [0x0124] = "Hcircumflex", - [0x0125] = "hcircumflex", - [0x0126] = "Hbar", - [0x0127] = "hbar", - [0x0128] = "Itilde", - [0x0129] = "itilde", - [0x012A] = "Imacron", - [0x012B] = "imacron", - [0x012C] = "Ibreve", - [0x012D] = "ibreve", - [0x012E] = "Iogonek", - [0x012F] = "iogonek", - [0x0130] = "Idotaccent", - [0x0131] = "dotlessi", - [0x0132] = "IJ", - [0x0133] = "ij", - [0x0134] = "Jcircumflex", - [0x0135] = "jcircumflex", - [0x0136] = "Kcommaaccent", - [0x0137] = "kcommaaccent", - [0x0138] = "kgreenlandic", - [0x0139] = "Lacute", - [0x013A] = "lacute", - [0x013B] = "Lcommaaccent", - [0x013C] = "lcommaaccent", - [0x013D] = "Lcaron", - [0x013E] = "lcaron", - [0x013F] = "Ldotaccent", - [0x0140] = "ldotaccent", - [0x0141] = "Lslash", - [0x0142] = "lslash", - [0x0143] = "Nacute", - [0x0144] = "nacute", - [0x0145] = "Ncommaaccent", - [0x0146] = "ncommaaccent", - [0x0147] = "Ncaron", - [0x0148] = "ncaron", - [0x0149] = "quoterightn", - [0x014A] = "Eng", - [0x014B] = "eng", - [0x014C] = "Omacron", - [0x014D] = "omacron", - [0x014E] = "Obreve", - [0x014F] = "obreve", - [0x0150] = "Ohungarumlaut", - [0x0151] = "ohungarumlaut", - [0x0152] = "OE", - [0x0153] = "oe", - [0x0154] = "Racute", - [0x0155] = "racute", - [0x0156] = "Rcommaaccent", - [0x0157] = "rcommaaccent", - [0x0158] = "Rcaron", - [0x0159] = "rcaron", - [0x015A] = "Sacute", - [0x015B] = "sacute", - [0x015C] = "Scircumflex", - [0x015D] = "scircumflex", - [0x015E] = "Scedilla", - [0x015F] = "scedilla", - [0x0160] = "Scaron", - [0x0161] = "scaron", - [0x0162] = "Tcommaaccent", - [0x0163] = "tcommaaccent", - [0x0164] = "Tcaron", - [0x0165] = "tcaron", - [0x0166] = "Tbar", - [0x0167] = "tbar", - [0x0168] = "Utilde", - [0x0169] = "utilde", - [0x016A] = "Umacron", - [0x016B] = "umacron", - [0x016C] = "Ubreve", - [0x016D] = "ubreve", - [0x016E] = "Uring", - [0x016F] = "uring", - [0x0170] = "Uhungarumlaut", - [0x0171] = "uhungarumlaut", - [0x0172] = "Uogonek", - [0x0173] = "uogonek", - [0x0174] = "Wcircumflex", - [0x0175] = "wcircumflex", - [0x0176] = "Ycircumflex", - [0x0177] = "ycircumflex", - [0x0178] = "Ydieresis", - [0x0179] = "Zacute", - [0x017A] = "zacute", - [0x017B] = "Zdotaccent", - [0x017C] = "zdotaccent", - [0x017D] = "Zcaron", - [0x017E] = "zcaron", - [0x017F] = "slong", - [0x0180] = "bstroke", - [0x0181] = "Bhook", - [0x0182] = "Btopbar", - [0x0183] = "btopbar", - [0x0184] = "Tonesix", - [0x0185] = "tonesix", - [0x0186] = "Oopen", - [0x0187] = "Chook", - [0x0188] = "chook", - [0x0189] = "Dafrican", - [0x018A] = "Dhook", - [0x018B] = "Dtopbar", - [0x018C] = "dtopbar", - [0x018D] = "deltaturned", - [0x018E] = "Ereversed", - [0x018F] = "Schwa", - [0x0190] = "Eopen", - [0x0191] = "Fhook", - [0x0192] = "florin", - [0x0193] = "Ghook", - [0x0194] = "Gammaafrican", - [0x0195] = "hv", - [0x0196] = "Iotaafrican", - [0x0197] = "Istroke", - [0x0198] = "Khook", - [0x0199] = "khook", - [0x019A] = "lbar", - [0x019B] = "lambdastroke", - [0x019C] = "Mturned", - [0x019D] = "Nhookleft", - [0x019E] = "nlegrightlong", - [0x019F] = "Ocenteredtilde", - [0x01A0] = "Ohorn", - [0x01A1] = "ohorn", - [0x01A2] = "Oi", - [0x01A3] = "oi", - [0x01A4] = "Phook", - [0x01A5] = "phook", - [0x01A6] = "yr", - [0x01A7] = "Tonetwo", - [0x01A8] = "tonetwo", - [0x01A9] = "Esh", - [0x01AA] = "eshreversedloop", - [0x01AB] = "tpalatalhook", - [0x01AC] = "Thook", - [0x01AD] = "thook", - [0x01AE] = "Tretroflexhook", - [0x01AF] = "Uhorn", - [0x01B0] = "uhorn", - [0x01B1] = "Upsilonafrican", - [0x01B2] = "Vhook", - [0x01B3] = "Yhook", - [0x01B4] = "yhook", - [0x01B5] = "Zstroke", - [0x01B6] = "zstroke", - [0x01B7] = "Ezh", - [0x01B8] = "Ezhreversed", - [0x01B9] = "ezhreversed", - [0x01BA] = "ezhtail", - [0x01BB] = "twostroke", - [0x01BC] = "Tonefive", - [0x01BD] = "tonefive", - [0x01BE] = "glottalinvertedstroke", - [0x01BF] = "wynn", - [0x01C0] = "clickdental", - [0x01C1] = "clicklateral", - [0x01C2] = "clickalveolar", - [0x01C3] = "clickretroflex", - [0x01C4] = "DZcaron", - [0x01C5] = "Dzcaron", - [0x01C6] = "dzcaron", - [0x01C7] = "LJ", - [0x01C8] = "Lj", - [0x01C9] = "lj", - [0x01CA] = "NJ", - [0x01CB] = "Nj", - [0x01CC] = "nj", - [0x01CD] = "Acaron", - [0x01CE] = "acaron", - [0x01CF] = "Icaron", - [0x01D0] = "icaron", - [0x01D1] = "Ocaron", - [0x01D2] = "ocaron", - [0x01D3] = "Ucaron", - [0x01D4] = "ucaron", - [0x01D5] = "Udieresismacron", - [0x01D6] = "udieresismacron", - [0x01D7] = "Udieresisacute", - [0x01D8] = "udieresisacute", - [0x01D9] = "Udieresiscaron", - [0x01DA] = "udieresiscaron", - [0x01DB] = "Udieresisgrave", - [0x01DC] = "udieresisgrave", - [0x01DD] = "eturned", - [0x01DE] = "Adieresismacron", - [0x01DF] = "adieresismacron", - [0x01E0] = "Adotmacron", - [0x01E1] = "adotmacron", - [0x01E2] = "AEmacron", - [0x01E3] = "aemacron", - [0x01E4] = "Gstroke", - [0x01E5] = "gstroke", - [0x01E6] = "Gcaron", - [0x01E7] = "gcaron", - [0x01E8] = "Kcaron", - [0x01E9] = "kcaron", - [0x01EA] = "Oogonek", - [0x01EB] = "oogonek", - [0x01EC] = "Oogonekmacron", - [0x01ED] = "oogonekmacron", - [0x01EE] = "Ezhcaron", - [0x01EF] = "ezhcaron", - [0x01F0] = "jcaron", - [0x01F1] = "DZ", - [0x01F2] = "Dz", - [0x01F3] = "dz", - [0x01F4] = "Gacute", - [0x01F5] = "gacute", - [0x01FA] = "Aringacute", - [0x01FB] = "aringacute", - [0x01FC] = "AEacute", - [0x01FD] = "aeacute", - [0x01FE] = "Ostrokeacute", - [0x01FF] = "ostrokeacute", - [0x0200] = "Adblgrave", - [0x0201] = "adblgrave", - [0x0202] = "Ainvertedbreve", - [0x0203] = "ainvertedbreve", - [0x0204] = "Edblgrave", - [0x0205] = "edblgrave", - [0x0206] = "Einvertedbreve", - [0x0207] = "einvertedbreve", - [0x0208] = "Idblgrave", - [0x0209] = "idblgrave", - [0x020A] = "Iinvertedbreve", - [0x020B] = "iinvertedbreve", - [0x020C] = "Odblgrave", - [0x020D] = "odblgrave", - [0x020E] = "Oinvertedbreve", - [0x020F] = "oinvertedbreve", - [0x0210] = "Rdblgrave", - [0x0211] = "rdblgrave", - [0x0212] = "Rinvertedbreve", - [0x0213] = "rinvertedbreve", - [0x0214] = "Udblgrave", - [0x0215] = "udblgrave", - [0x0216] = "Uinvertedbreve", - [0x0217] = "uinvertedbreve", - [0x0218] = "Scommaaccent", - [0x0219] = "scommaaccent", - [0x0250] = "aturned", - [0x0251] = "ascript", - [0x0252] = "ascriptturned", - [0x0253] = "bhook", - [0x0254] = "oopen", - [0x0255] = "ccurl", - [0x0256] = "dtail", - [0x0257] = "dhook", - [0x0258] = "ereversed", - [0x0259] = "schwa", - [0x025A] = "schwahook", - [0x025B] = "eopen", - [0x025C] = "eopenreversed", - [0x025D] = "eopenreversedhook", - [0x025E] = "eopenreversedclosed", - [0x025F] = "jdotlessstroke", - [0x0260] = "ghook", - [0x0261] = "gscript", - [0x0263] = "gammalatinsmall", - [0x0264] = "ramshorn", - [0x0265] = "hturned", - [0x0266] = "hhook", - [0x0267] = "henghook", - [0x0268] = "istroke", - [0x0269] = "iotalatin", - [0x026B] = "lmiddletilde", - [0x026C] = "lbelt", - [0x026D] = "lhookretroflex", - [0x026E] = "lezh", - [0x026F] = "mturned", - [0x0270] = "mlonglegturned", - [0x0271] = "mhook", - [0x0272] = "nhookleft", - [0x0273] = "nhookretroflex", - [0x0275] = "obarred", - [0x0277] = "omegalatinclosed", - [0x0278] = "philatin", - [0x0279] = "rturned", - [0x027A] = "rlonglegturned", - [0x027B] = "rhookturned", - [0x027C] = "rlongleg", - [0x027D] = "rhook", - [0x027E] = "rfishhook", - [0x027F] = "rfishhookreversed", - [0x0281] = "Rsmallinverted", - [0x0282] = "shook", - [0x0283] = "esh", - [0x0284] = "dotlessjstrokehook", - [0x0285] = "eshsquatreversed", - [0x0286] = "eshcurl", - [0x0287] = "tturned", - [0x0288] = "tretroflexhook", - [0x0289] = "ubar", - [0x028A] = "upsilonlatin", - [0x028B] = "vhook", - [0x028C] = "vturned", - [0x028D] = "wturned", - [0x028E] = "yturned", - [0x0290] = "zretroflexhook", - [0x0291] = "zcurl", - [0x0292] = "ezh", - [0x0293] = "ezhcurl", - [0x0294] = "glottalstop", - [0x0295] = "glottalstopreversed", - [0x0296] = "glottalstopinverted", - [0x0297] = "cstretched", - [0x0298] = "bilabialclick", - [0x029A] = "eopenclosed", - [0x029B] = "Gsmallhook", - [0x029D] = "jcrossedtail", - [0x029E] = "kturned", - [0x02A0] = "qhook", - [0x02A1] = "glottalstopstroke", - [0x02A2] = "glottalstopstrokereversed", - [0x02A3] = "dzaltone", - [0x02A4] = "dezh", - [0x02A5] = "dzcurl", - [0x02A6] = "ts", - [0x02A7] = "tesh", - [0x02A8] = "tccurl", - [0x02B0] = "hsuperior", - [0x02B1] = "hhooksuperior", - [0x02B2] = "jsuperior", - [0x02B4] = "rturnedsuperior", - [0x02B5] = "rhookturnedsuperior", - [0x02B6] = "Rsmallinvertedsuperior", - [0x02B7] = "wsuperior", - [0x02B8] = "ysuperior", - [0x02B9] = "primemod", - [0x02BA] = "dblprimemod", - [0x02BB] = "commaturnedmod", - [0x02BC] = "apostrophemod", - [0x02BD] = "commareversedmod", - [0x02BE] = "ringhalfright", - [0x02BF] = "ringhalfleft", - [0x02C0] = "glottalstopmod", - [0x02C1] = "glottalstopreversedmod", - [0x02C2] = "arrowheadleftmod", - [0x02C3] = "arrowheadrightmod", - [0x02C4] = "arrowheadupmod", - [0x02C5] = "arrowheaddownmod", - [0x02C6] = "circumflex", - [0x02C7] = "caron", - [0x02C8] = "verticallinemod", - [0x02C9] = "firsttonechinese", - [0x02CA] = "secondtonechinese", - [0x02CB] = "fourthtonechinese", - [0x02CC] = "verticallinelowmod", - [0x02CD] = "macronlowmod", - [0x02CE] = "gravelowmod", - [0x02CF] = "acutelowmod", - [0x02D0] = "colontriangularmod", - [0x02D1] = "colontriangularhalfmod", - [0x02D2] = "ringhalfrightcentered", - [0x02D3] = "ringhalfleftcentered", - [0x02D4] = "uptackmod", - [0x02D5] = "downtackmod", - [0x02D6] = "plusmod", - [0x02D7] = "minusmod", - [0x02D8] = "breve", - [0x02D9] = "dotaccent", - [0x02DA] = "ring", - [0x02DB] = "ogonek", - [0x02DC] = "tilde", - [0x02DD] = "hungarumlaut", - [0x02DE] = "rhotichookmod", - [0x02E0] = "gammasuperior", - [0x02E3] = "xsuperior", - [0x02E4] = "glottalstopreversedsuperior", - [0x02E5] = "tonebarextrahighmod", - [0x02E6] = "tonebarhighmod", - [0x02E7] = "tonebarmidmod", - [0x02E8] = "tonebarlowmod", - [0x02E9] = "tonebarextralowmod", - [0x0300] = "gravecomb", - [0x0301] = "acutecomb", - [0x0302] = "circumflexcmb", - [0x0303] = "tildecomb", - [0x0304] = "macroncmb", - [0x0305] = "overlinecmb", - [0x0306] = "brevecmb", - [0x0307] = "dotaccentcmb", - [0x0308] = "dieresiscmb", - [0x0309] = "hookcmb", - [0x030A] = "ringcmb", - [0x030B] = "hungarumlautcmb", - [0x030C] = "caroncmb", - [0x030D] = "verticallineabovecmb", - [0x030E] = "dblverticallineabovecmb", - [0x030F] = "dblgravecmb", - [0x0310] = "candrabinducmb", - [0x0311] = "breveinvertedcmb", - [0x0312] = "commaturnedabovecmb", - [0x0313] = "commaabovecmb", - [0x0314] = "commareversedabovecmb", - [0x0315] = "commaaboverightcmb", - [0x0316] = "gravebelowcmb", - [0x0317] = "acutebelowcmb", - [0x0318] = "lefttackbelowcmb", - [0x0319] = "righttackbelowcmb", - [0x031A] = "leftangleabovecmb", - [0x031B] = "horncmb", - [0x031C] = "ringhalfleftbelowcmb", - [0x031D] = "uptackbelowcmb", - [0x031E] = "downtackbelowcmb", - [0x031F] = "plusbelowcmb", - [0x0320] = "minusbelowcmb", - [0x0321] = "hookpalatalizedbelowcmb", - [0x0322] = "hookretroflexbelowcmb", - [0x0323] = "dotbelowcomb", - [0x0324] = "dieresisbelowcmb", - [0x0325] = "ringbelowcmb", - [0x0327] = "cedillacmb", - [0x0328] = "ogonekcmb", - [0x0329] = "verticallinebelowcmb", - [0x032A] = "bridgebelowcmb", - [0x032B] = "dblarchinvertedbelowcmb", - [0x032C] = "caronbelowcmb", - [0x032D] = "circumflexbelowcmb", - [0x032E] = "brevebelowcmb", - [0x032F] = "breveinvertedbelowcmb", - [0x0330] = "tildebelowcmb", - [0x0331] = "macronbelowcmb", - [0x0332] = "lowlinecmb", - [0x0333] = "dbllowlinecmb", - [0x0334] = "tildeoverlaycmb", - [0x0335] = "strokeshortoverlaycmb", - [0x0336] = "strokelongoverlaycmb", - [0x0337] = "solidusshortoverlaycmb", - [0x0338] = "soliduslongoverlaycmb", - [0x0339] = "ringhalfrightbelowcmb", - [0x033A] = "bridgeinvertedbelowcmb", - [0x033B] = "squarebelowcmb", - [0x033C] = "seagullbelowcmb", - [0x033D] = "xabovecmb", - [0x033E] = "tildeverticalcmb", - [0x033F] = "dbloverlinecmb", - [0x0340] = "gravetonecmb", - [0x0341] = "acutetonecmb", - [0x0342] = "perispomenigreekcmb", - [0x0343] = "koroniscmb", - [0x0344] = "dialytikatonoscmb", - [0x0345] = "ypogegrammenigreekcmb", - [0x0360] = "tildedoublecmb", - [0x0361] = "breveinverteddoublecmb", - [0x0374] = "numeralsigngreek", - [0x0375] = "numeralsignlowergreek", - [0x037A] = "ypogegrammeni", - [0x037E] = "questiongreek", - [0x0384] = "tonos", - [0x0385] = "dieresistonos", - [0x0386] = "Alphatonos", - [0x0387] = "anoteleia", - [0x0388] = "Epsilontonos", - [0x0389] = "Etatonos", - [0x038A] = "Iotatonos", - [0x038C] = "Omicrontonos", - [0x038E] = "Upsilontonos", - [0x038F] = "Omegatonos", - [0x0390] = "iotadieresistonos", - [0x0391] = "Alpha", - [0x0392] = "Beta", - [0x0393] = "Gamma", - [0x0394] = "Deltagreek", - [0x0395] = "Epsilon", - [0x0396] = "Zeta", - [0x0397] = "Eta", - [0x0398] = "Theta", - [0x0399] = "Iota", - [0x039A] = "Kappa", - [0x039B] = "Lambda", - [0x039C] = "Mu", - [0x039D] = "Nu", - [0x039E] = "Xi", - [0x039F] = "Omicron", - [0x03A0] = "Pi", - [0x03A1] = "Rho", - [0x03A3] = "Sigma", - [0x03A4] = "Tau", - [0x03A5] = "Upsilon", - [0x03A6] = "Phi", - [0x03A7] = "Chi", - [0x03A8] = "Psi", - [0x03A9] = "Omegagreek", - [0x03AA] = "Iotadieresis", - [0x03AB] = "Upsilondieresis", - [0x03AC] = "alphatonos", - [0x03AD] = "epsilontonos", - [0x03AE] = "etatonos", - [0x03AF] = "iotatonos", - [0x03B0] = "upsilondieresistonos", - [0x03B1] = "alpha", - [0x03B2] = "beta", - [0x03B3] = "gamma", - [0x03B4] = "delta", - [0x03B5] = "epsilon", - [0x03B6] = "zeta", - [0x03B7] = "eta", - [0x03B8] = "theta", - [0x03B9] = "iota", - [0x03BA] = "kappa", - [0x03BB] = "lambda", - [0x03BC] = "mugreek", - [0x03BD] = "nu", - [0x03BE] = "xi", - [0x03BF] = "omicron", - [0x03C0] = "pi", - [0x03C1] = "rho", - [0x03C2] = "sigmafinal", - [0x03C3] = "sigma", - [0x03C4] = "tau", - [0x03C5] = "upsilon", - [0x03C6] = "phi", - [0x03C7] = "chi", - [0x03C8] = "psi", - [0x03C9] = "omega", - [0x03CA] = "iotadieresis", - [0x03CB] = "upsilondieresis", - [0x03CC] = "omicrontonos", - [0x03CD] = "upsilontonos", - [0x03CE] = "omegatonos", - [0x03D0] = "betasymbolgreek", - [0x03D1] = "thetasymbolgreek", - [0x03D2] = "Upsilonhooksymbol", - [0x03D3] = "Upsilonacutehooksymbolgreek", - [0x03D4] = "Upsilondieresishooksymbolgreek", - [0x03D5] = "phisymbolgreek", - [0x03D6] = "pisymbolgreek", - [0x03DA] = "Stigmagreek", - [0x03DC] = "Digammagreek", - [0x03DE] = "Koppagreek", - [0x03E0] = "Sampigreek", - [0x03E2] = "Sheicoptic", - [0x03E3] = "sheicoptic", - [0x03E4] = "Feicoptic", - [0x03E5] = "feicoptic", - [0x03E6] = "Kheicoptic", - [0x03E7] = "kheicoptic", - [0x03E8] = "Horicoptic", - [0x03E9] = "horicoptic", - [0x03EA] = "Gangiacoptic", - [0x03EB] = "gangiacoptic", - [0x03EC] = "Shimacoptic", - [0x03ED] = "shimacoptic", - [0x03EE] = "Deicoptic", - [0x03EF] = "deicoptic", - [0x03F0] = "kappasymbolgreek", - [0x03F1] = "rhosymbolgreek", - [0x03F2] = "sigmalunatesymbolgreek", - [0x03F3] = "yotgreek", - [0x0401] = "afii10023", - [0x0402] = "afii10051", - [0x0403] = "afii10052", - [0x0404] = "afii10053", - [0x0405] = "afii10054", - [0x0406] = "afii10055", - [0x0407] = "afii10056", - [0x0408] = "afii10057", - [0x0409] = "afii10058", - [0x040A] = "afii10059", - [0x040B] = "afii10060", - [0x040C] = "afii10061", - [0x040E] = "afii10062", - [0x040F] = "afii10145", - [0x0410] = "afii10017", - [0x0411] = "afii10018", - [0x0412] = "afii10019", - [0x0413] = "afii10020", - [0x0414] = "afii10021", - [0x0415] = "afii10022", - [0x0416] = "afii10024", - [0x0417] = "afii10025", - [0x0418] = "afii10026", - [0x0419] = "afii10027", - [0x041A] = "afii10028", - [0x041B] = "afii10029", - [0x041C] = "afii10030", - [0x041D] = "afii10031", - [0x041E] = "afii10032", - [0x041F] = "afii10033", - [0x0420] = "afii10034", - [0x0421] = "afii10035", - [0x0422] = "afii10036", - [0x0423] = "afii10037", - [0x0424] = "afii10038", - [0x0425] = "afii10039", - [0x0426] = "afii10040", - [0x0427] = "afii10041", - [0x0428] = "afii10042", - [0x0429] = "afii10043", - [0x042A] = "afii10044", - [0x042B] = "afii10045", - [0x042C] = "afii10046", - [0x042D] = "afii10047", - [0x042E] = "afii10048", - [0x042F] = "afii10049", - [0x0430] = "afii10065", - [0x0431] = "becyrillic", - [0x0432] = "vecyrillic", - [0x0433] = "gecyrillic", - [0x0434] = "decyrillic", - [0x0435] = "iecyrillic", - [0x0436] = "zhecyrillic", - [0x0437] = "zecyrillic", - [0x0438] = "iicyrillic", - [0x0439] = "iishortcyrillic", - [0x043A] = "kacyrillic", - [0x043B] = "elcyrillic", - [0x043C] = "emcyrillic", - [0x043D] = "encyrillic", - [0x043E] = "ocyrillic", - [0x043F] = "pecyrillic", - [0x0440] = "ercyrillic", - [0x0441] = "escyrillic", - [0x0442] = "tecyrillic", - [0x0443] = "ucyrillic", - [0x0444] = "efcyrillic", - [0x0445] = "khacyrillic", - [0x0446] = "tsecyrillic", - [0x0447] = "checyrillic", - [0x0448] = "shacyrillic", - [0x0449] = "shchacyrillic", - [0x044A] = "hardsigncyrillic", - [0x044B] = "yericyrillic", - [0x044C] = "softsigncyrillic", - [0x044D] = "ereversedcyrillic", - [0x044E] = "iucyrillic", - [0x044F] = "iacyrillic", - [0x0451] = "iocyrillic", - [0x0452] = "djecyrillic", - [0x0453] = "gjecyrillic", - [0x0454] = "ecyrillic", - [0x0455] = "dzecyrillic", - [0x0456] = "icyrillic", - [0x0457] = "yicyrillic", - [0x0458] = "jecyrillic", - [0x0459] = "ljecyrillic", - [0x045A] = "njecyrillic", - [0x045B] = "tshecyrillic", - [0x045C] = "kjecyrillic", - [0x045E] = "ushortcyrillic", - [0x045F] = "dzhecyrillic", - [0x0460] = "Omegacyrillic", - [0x0461] = "omegacyrillic", - [0x0462] = "afii10146", - [0x0463] = "yatcyrillic", - [0x0464] = "Eiotifiedcyrillic", - [0x0465] = "eiotifiedcyrillic", - [0x0466] = "Yuslittlecyrillic", - [0x0467] = "yuslittlecyrillic", - [0x0468] = "Yuslittleiotifiedcyrillic", - [0x0469] = "yuslittleiotifiedcyrillic", - [0x046A] = "Yusbigcyrillic", - [0x046B] = "yusbigcyrillic", - [0x046C] = "Yusbigiotifiedcyrillic", - [0x046D] = "yusbigiotifiedcyrillic", - [0x046E] = "Ksicyrillic", - [0x046F] = "ksicyrillic", - [0x0470] = "Psicyrillic", - [0x0471] = "psicyrillic", - [0x0472] = "afii10147", - [0x0473] = "fitacyrillic", - [0x0474] = "afii10148", - [0x0475] = "izhitsacyrillic", - [0x0476] = "Izhitsadblgravecyrillic", - [0x0477] = "izhitsadblgravecyrillic", - [0x0478] = "Ukcyrillic", - [0x0479] = "ukcyrillic", - [0x047A] = "Omegaroundcyrillic", - [0x047B] = "omegaroundcyrillic", - [0x047C] = "Omegatitlocyrillic", - [0x047D] = "omegatitlocyrillic", - [0x047E] = "Otcyrillic", - [0x047F] = "otcyrillic", - [0x0480] = "Koppacyrillic", - [0x0481] = "koppacyrillic", - [0x0482] = "thousandcyrillic", - [0x0483] = "titlocyrilliccmb", - [0x0484] = "palatalizationcyrilliccmb", - [0x0485] = "dasiapneumatacyrilliccmb", - [0x0486] = "psilipneumatacyrilliccmb", - [0x0490] = "afii10050", - [0x0491] = "gheupturncyrillic", - [0x0492] = "Ghestrokecyrillic", - [0x0493] = "ghestrokecyrillic", - [0x0494] = "Ghemiddlehookcyrillic", - [0x0495] = "ghemiddlehookcyrillic", - [0x0496] = "Zhedescendercyrillic", - [0x0497] = "zhedescendercyrillic", - [0x0498] = "Zedescendercyrillic", - [0x0499] = "zedescendercyrillic", - [0x049A] = "Kadescendercyrillic", - [0x049B] = "kadescendercyrillic", - [0x049C] = "Kaverticalstrokecyrillic", - [0x049D] = "kaverticalstrokecyrillic", - [0x049E] = "Kastrokecyrillic", - [0x049F] = "kastrokecyrillic", - [0x04A0] = "Kabashkircyrillic", - [0x04A1] = "kabashkircyrillic", - [0x04A2] = "Endescendercyrillic", - [0x04A3] = "endescendercyrillic", - [0x04A4] = "Enghecyrillic", - [0x04A5] = "enghecyrillic", - [0x04A6] = "Pemiddlehookcyrillic", - [0x04A7] = "pemiddlehookcyrillic", - [0x04A8] = "Haabkhasiancyrillic", - [0x04A9] = "haabkhasiancyrillic", - [0x04AA] = "Esdescendercyrillic", - [0x04AB] = "esdescendercyrillic", - [0x04AC] = "Tedescendercyrillic", - [0x04AD] = "tedescendercyrillic", - [0x04AE] = "Ustraightcyrillic", - [0x04AF] = "ustraightcyrillic", - [0x04B0] = "Ustraightstrokecyrillic", - [0x04B1] = "ustraightstrokecyrillic", - [0x04B2] = "Hadescendercyrillic", - [0x04B3] = "hadescendercyrillic", - [0x04B4] = "Tetsecyrillic", - [0x04B5] = "tetsecyrillic", - [0x04B6] = "Chedescendercyrillic", - [0x04B7] = "chedescendercyrillic", - [0x04B8] = "Cheverticalstrokecyrillic", - [0x04B9] = "cheverticalstrokecyrillic", - [0x04BA] = "Shhacyrillic", - [0x04BB] = "shhacyrillic", - [0x04BC] = "Cheabkhasiancyrillic", - [0x04BD] = "cheabkhasiancyrillic", - [0x04BE] = "Chedescenderabkhasiancyrillic", - [0x04BF] = "chedescenderabkhasiancyrillic", - [0x04C0] = "palochkacyrillic", - [0x04C1] = "Zhebrevecyrillic", - [0x04C2] = "zhebrevecyrillic", - [0x04C3] = "Kahookcyrillic", - [0x04C4] = "kahookcyrillic", - [0x04C7] = "Enhookcyrillic", - [0x04C8] = "enhookcyrillic", - [0x04CB] = "Chekhakassiancyrillic", - [0x04CC] = "chekhakassiancyrillic", - [0x04D0] = "Abrevecyrillic", - [0x04D1] = "abrevecyrillic", - [0x04D2] = "Adieresiscyrillic", - [0x04D3] = "adieresiscyrillic", - [0x04D4] = "Aiecyrillic", - [0x04D5] = "aiecyrillic", - [0x04D6] = "Iebrevecyrillic", - [0x04D7] = "iebrevecyrillic", - [0x04D8] = "Schwacyrillic", - [0x04D9] = "schwacyrillic", - [0x04DA] = "Schwadieresiscyrillic", - [0x04DB] = "schwadieresiscyrillic", - [0x04DC] = "Zhedieresiscyrillic", - [0x04DD] = "zhedieresiscyrillic", - [0x04DE] = "Zedieresiscyrillic", - [0x04DF] = "zedieresiscyrillic", - [0x04E0] = "Dzeabkhasiancyrillic", - [0x04E1] = "dzeabkhasiancyrillic", - [0x04E2] = "Imacroncyrillic", - [0x04E3] = "imacroncyrillic", - [0x04E4] = "Idieresiscyrillic", - [0x04E5] = "idieresiscyrillic", - [0x04E6] = "Odieresiscyrillic", - [0x04E7] = "odieresiscyrillic", - [0x04E8] = "Obarredcyrillic", - [0x04E9] = "obarredcyrillic", - [0x04EA] = "Obarreddieresiscyrillic", - [0x04EB] = "obarreddieresiscyrillic", - [0x04EE] = "Umacroncyrillic", - [0x04EF] = "umacroncyrillic", - [0x04F0] = "Udieresiscyrillic", - [0x04F1] = "udieresiscyrillic", - [0x04F2] = "Uhungarumlautcyrillic", - [0x04F3] = "uhungarumlautcyrillic", - [0x04F4] = "Chedieresiscyrillic", - [0x04F5] = "chedieresiscyrillic", - [0x04F8] = "Yerudieresiscyrillic", - [0x04F9] = "yerudieresiscyrillic", - [0x0531] = "Aybarmenian", - [0x0532] = "Benarmenian", - [0x0533] = "Gimarmenian", - [0x0534] = "Daarmenian", - [0x0535] = "Echarmenian", - [0x0536] = "Zaarmenian", - [0x0537] = "Eharmenian", - [0x0538] = "Etarmenian", - [0x0539] = "Toarmenian", - [0x053A] = "Zhearmenian", - [0x053B] = "Iniarmenian", - [0x053C] = "Liwnarmenian", - [0x053D] = "Xeharmenian", - [0x053E] = "Caarmenian", - [0x053F] = "Kenarmenian", - [0x0540] = "Hoarmenian", - [0x0541] = "Jaarmenian", - [0x0542] = "Ghadarmenian", - [0x0543] = "Cheharmenian", - [0x0544] = "Menarmenian", - [0x0545] = "Yiarmenian", - [0x0546] = "Nowarmenian", - [0x0547] = "Shaarmenian", - [0x0548] = "Voarmenian", - [0x0549] = "Chaarmenian", - [0x054A] = "Peharmenian", - [0x054B] = "Jheharmenian", - [0x054C] = "Raarmenian", - [0x054D] = "Seharmenian", - [0x054E] = "Vewarmenian", - [0x054F] = "Tiwnarmenian", - [0x0550] = "Reharmenian", - [0x0551] = "Coarmenian", - [0x0552] = "Yiwnarmenian", - [0x0553] = "Piwrarmenian", - [0x0554] = "Keharmenian", - [0x0555] = "Oharmenian", - [0x0556] = "Feharmenian", - [0x0559] = "ringhalfleftarmenian", - [0x055A] = "apostrophearmenian", - [0x055B] = "emphasismarkarmenian", - [0x055C] = "exclamarmenian", - [0x055D] = "commaarmenian", - [0x055E] = "questionarmenian", - [0x055F] = "abbreviationmarkarmenian", - [0x0561] = "aybarmenian", - [0x0562] = "benarmenian", - [0x0563] = "gimarmenian", - [0x0564] = "daarmenian", - [0x0565] = "echarmenian", - [0x0566] = "zaarmenian", - [0x0567] = "eharmenian", - [0x0568] = "etarmenian", - [0x0569] = "toarmenian", - [0x056A] = "zhearmenian", - [0x056B] = "iniarmenian", - [0x056C] = "liwnarmenian", - [0x056D] = "xeharmenian", - [0x056E] = "caarmenian", - [0x056F] = "kenarmenian", - [0x0570] = "hoarmenian", - [0x0571] = "jaarmenian", - [0x0572] = "ghadarmenian", - [0x0573] = "cheharmenian", - [0x0574] = "menarmenian", - [0x0575] = "yiarmenian", - [0x0576] = "nowarmenian", - [0x0577] = "shaarmenian", - [0x0578] = "voarmenian", - [0x0579] = "chaarmenian", - [0x057A] = "peharmenian", - [0x057B] = "jheharmenian", - [0x057C] = "raarmenian", - [0x057D] = "seharmenian", - [0x057E] = "vewarmenian", - [0x057F] = "tiwnarmenian", - [0x0580] = "reharmenian", - [0x0581] = "coarmenian", - [0x0582] = "yiwnarmenian", - [0x0583] = "piwrarmenian", - [0x0584] = "keharmenian", - [0x0585] = "oharmenian", - [0x0586] = "feharmenian", - [0x0587] = "echyiwnarmenian", - [0x0589] = "periodarmenian", - [0x0591] = "etnahtalefthebrew", - [0x0592] = "segoltahebrew", - [0x0593] = "shalshelethebrew", - [0x0594] = "zaqefqatanhebrew", - [0x0595] = "zaqefgadolhebrew", - [0x0596] = "tipehalefthebrew", - [0x0597] = "reviamugrashhebrew", - [0x0598] = "zarqahebrew", - [0x0599] = "pashtahebrew", - [0x059A] = "yetivhebrew", - [0x059B] = "tevirlefthebrew", - [0x059C] = "gereshaccenthebrew", - [0x059D] = "gereshmuqdamhebrew", - [0x059E] = "gershayimaccenthebrew", - [0x059F] = "qarneyparahebrew", - [0x05A0] = "telishagedolahebrew", - [0x05A1] = "pazerhebrew", - [0x05A3] = "munahlefthebrew", - [0x05A4] = "mahapakhlefthebrew", - [0x05A5] = "merkhalefthebrew", - [0x05A6] = "merkhakefulalefthebrew", - [0x05A7] = "dargalefthebrew", - [0x05A8] = "qadmahebrew", - [0x05A9] = "telishaqetanahebrew", - [0x05AA] = "yerahbenyomolefthebrew", - [0x05AB] = "olehebrew", - [0x05AC] = "iluyhebrew", - [0x05AD] = "dehihebrew", - [0x05AE] = "zinorhebrew", - [0x05AF] = "masoracirclehebrew", - [0x05B0] = "shevawidehebrew", - [0x05B1] = "hatafsegolwidehebrew", - [0x05B2] = "hatafpatahwidehebrew", - [0x05B3] = "hatafqamatswidehebrew", - [0x05B4] = "hiriqwidehebrew", - [0x05B5] = "tserewidehebrew", - [0x05B6] = "segolwidehebrew", - [0x05B7] = "patahwidehebrew", - [0x05B8] = "qamatswidehebrew", - [0x05B9] = "holamwidehebrew", - [0x05BB] = "qubutswidehebrew", - [0x05BC] = "dageshhebrew", - [0x05BD] = "siluqlefthebrew", - [0x05BE] = "maqafhebrew", - [0x05BF] = "rafehebrew", - [0x05C0] = "paseqhebrew", - [0x05C1] = "shindothebrew", - [0x05C2] = "sindothebrew", - [0x05C3] = "sofpasuqhebrew", - [0x05C4] = "upperdothebrew", - [0x05D0] = "alefhebrew", - [0x05D1] = "bethebrew", - [0x05D2] = "gimelhebrew", - [0x05D3] = "dalettserehebrew", - [0x05D4] = "hehebrew", - [0x05D5] = "vavhebrew", - [0x05D6] = "zayinhebrew", - [0x05D7] = "hethebrew", - [0x05D8] = "tethebrew", - [0x05D9] = "yodhebrew", - [0x05DA] = "finalkafshevahebrew", - [0x05DB] = "kafhebrew", - [0x05DC] = "lamedholamhebrew", - [0x05DD] = "finalmemhebrew", - [0x05DE] = "memhebrew", - [0x05DF] = "finalnunhebrew", - [0x05E0] = "nunhebrew", - [0x05E1] = "samekhhebrew", - [0x05E2] = "ayinhebrew", - [0x05E3] = "finalpehebrew", - [0x05E4] = "pehebrew", - [0x05E5] = "finaltsadihebrew", - [0x05E6] = "tsadihebrew", - [0x05E7] = "qoftserehebrew", - [0x05E8] = "reshtserehebrew", - [0x05E9] = "shinhebrew", - [0x05EA] = "tavhebrew", - [0x05F0] = "vavvavhebrew", - [0x05F1] = "vavyodhebrew", - [0x05F2] = "yodyodhebrew", - [0x05F3] = "gereshhebrew", - [0x05F4] = "gershayimhebrew", - [0x060C] = "commaarabic", - [0x061B] = "semicolonarabic", - [0x061F] = "questionarabic", - [0x0621] = "hamzasukunarabic", - [0x0622] = "alefmaddaabovearabic", - [0x0623] = "alefhamzaabovearabic", - [0x0624] = "wawhamzaabovearabic", - [0x0625] = "alefhamzabelowarabic", - [0x0626] = "yehhamzaabovearabic", - [0x0627] = "alefarabic", - [0x0628] = "beharabic", - [0x0629] = "tehmarbutaarabic", - [0x062A] = "teharabic", - [0x062B] = "theharabic", - [0x062C] = "jeemarabic", - [0x062D] = "haharabic", - [0x062E] = "khaharabic", - [0x062F] = "dalarabic", - [0x0630] = "thalarabic", - [0x0631] = "rehyehaleflamarabic", - [0x0632] = "zainarabic", - [0x0633] = "seenarabic", - [0x0634] = "sheenarabic", - [0x0635] = "sadarabic", - [0x0636] = "dadarabic", - [0x0637] = "taharabic", - [0x0638] = "zaharabic", - [0x0639] = "ainarabic", - [0x063A] = "ghainarabic", - [0x0640] = "tatweelarabic", - [0x0641] = "feharabic", - [0x0642] = "qafarabic", - [0x0643] = "kafarabic", - [0x0644] = "lamarabic", - [0x0645] = "meemarabic", - [0x0646] = "noonarabic", - [0x0647] = "heharabic", - [0x0648] = "wawarabic", - [0x0649] = "alefmaksuraarabic", - [0x064A] = "yeharabic", - [0x064B] = "fathatanarabic", - [0x064C] = "dammatanarabic", - [0x064D] = "kasratanarabic", - [0x064E] = "fathalowarabic", - [0x064F] = "dammalowarabic", - [0x0650] = "kasraarabic", - [0x0651] = "shaddafathatanarabic", - [0x0652] = "sukunarabic", - [0x0660] = "zerohackarabic", - [0x0661] = "onehackarabic", - [0x0662] = "twohackarabic", - [0x0663] = "threehackarabic", - [0x0664] = "fourhackarabic", - [0x0665] = "fivehackarabic", - [0x0666] = "sixhackarabic", - [0x0667] = "sevenhackarabic", - [0x0668] = "eighthackarabic", - [0x0669] = "ninehackarabic", - [0x066A] = "percentarabic", - [0x066B] = "decimalseparatorpersian", - [0x066C] = "thousandsseparatorpersian", - [0x066D] = "asteriskarabic", - [0x0679] = "tteharabic", - [0x067E] = "peharabic", - [0x0686] = "tcheharabic", - [0x0688] = "ddalarabic", - [0x0691] = "rreharabic", - [0x0698] = "jeharabic", - [0x06A4] = "veharabic", - [0x06AF] = "gafarabic", - [0x06BA] = "noonghunnaarabic", - [0x06C1] = "hehaltonearabic", - [0x06D1] = "yehthreedotsbelowarabic", - [0x06D2] = "yehbarreearabic", - [0x06D5] = "afii57534", - [0x06F0] = "zeropersian", - [0x06F1] = "onepersian", - [0x06F2] = "twopersian", - [0x06F3] = "threepersian", - [0x06F4] = "fourpersian", - [0x06F5] = "fivepersian", - [0x06F6] = "sixpersian", - [0x06F7] = "sevenpersian", - [0x06F8] = "eightpersian", - [0x06F9] = "ninepersian", - [0x0901] = "candrabindudeva", - [0x0902] = "anusvaradeva", - [0x0903] = "visargadeva", - [0x0905] = "adeva", - [0x0906] = "aadeva", - [0x0907] = "ideva", - [0x0908] = "iideva", - [0x0909] = "udeva", - [0x090A] = "uudeva", - [0x090B] = "rvocalicdeva", - [0x090C] = "lvocalicdeva", - [0x090D] = "ecandradeva", - [0x090E] = "eshortdeva", - [0x090F] = "edeva", - [0x0910] = "aideva", - [0x0911] = "ocandradeva", - [0x0912] = "oshortdeva", - [0x0913] = "odeva", - [0x0914] = "audeva", - [0x0915] = "kadeva", - [0x0916] = "khadeva", - [0x0917] = "gadeva", - [0x0918] = "ghadeva", - [0x0919] = "ngadeva", - [0x091A] = "cadeva", - [0x091B] = "chadeva", - [0x091C] = "jadeva", - [0x091D] = "jhadeva", - [0x091E] = "nyadeva", - [0x091F] = "ttadeva", - [0x0920] = "tthadeva", - [0x0921] = "ddadeva", - [0x0922] = "ddhadeva", - [0x0923] = "nnadeva", - [0x0924] = "tadeva", - [0x0925] = "thadeva", - [0x0926] = "dadeva", - [0x0927] = "dhadeva", - [0x0928] = "nadeva", - [0x0929] = "nnnadeva", - [0x092A] = "padeva", - [0x092B] = "phadeva", - [0x092C] = "badeva", - [0x092D] = "bhadeva", - [0x092E] = "madeva", - [0x092F] = "yadeva", - [0x0930] = "radeva", - [0x0931] = "rradeva", - [0x0932] = "ladeva", - [0x0933] = "lladeva", - [0x0934] = "llladeva", - [0x0935] = "vadeva", - [0x0936] = "shadeva", - [0x0937] = "ssadeva", - [0x0938] = "sadeva", - [0x0939] = "hadeva", - [0x093C] = "nuktadeva", - [0x093D] = "avagrahadeva", - [0x093E] = "aavowelsigndeva", - [0x093F] = "ivowelsigndeva", - [0x0940] = "iivowelsigndeva", - [0x0941] = "uvowelsigndeva", - [0x0942] = "uuvowelsigndeva", - [0x0943] = "rvocalicvowelsigndeva", - [0x0944] = "rrvocalicvowelsigndeva", - [0x0945] = "ecandravowelsigndeva", - [0x0946] = "eshortvowelsigndeva", - [0x0947] = "evowelsigndeva", - [0x0948] = "aivowelsigndeva", - [0x0949] = "ocandravowelsigndeva", - [0x094A] = "oshortvowelsigndeva", - [0x094B] = "ovowelsigndeva", - [0x094C] = "auvowelsigndeva", - [0x094D] = "viramadeva", - [0x0950] = "omdeva", - [0x0951] = "udattadeva", - [0x0952] = "anudattadeva", - [0x0953] = "gravedeva", - [0x0954] = "acutedeva", - [0x0958] = "qadeva", - [0x0959] = "khhadeva", - [0x095A] = "ghhadeva", - [0x095B] = "zadeva", - [0x095C] = "dddhadeva", - [0x095D] = "rhadeva", - [0x095E] = "fadeva", - [0x095F] = "yyadeva", - [0x0960] = "rrvocalicdeva", - [0x0961] = "llvocalicdeva", - [0x0962] = "lvocalicvowelsigndeva", - [0x0963] = "llvocalicvowelsigndeva", - [0x0964] = "danda", - [0x0965] = "dbldanda", - [0x0966] = "zerodeva", - [0x0967] = "onedeva", - [0x0968] = "twodeva", - [0x0969] = "threedeva", - [0x096A] = "fourdeva", - [0x096B] = "fivedeva", - [0x096C] = "sixdeva", - [0x096D] = "sevendeva", - [0x096E] = "eightdeva", - [0x096F] = "ninedeva", - [0x0970] = "abbreviationsigndeva", - [0x0981] = "candrabindubengali", - [0x0982] = "anusvarabengali", - [0x0983] = "visargabengali", - [0x0985] = "abengali", - [0x0986] = "aabengali", - [0x0987] = "ibengali", - [0x0988] = "iibengali", - [0x0989] = "ubengali", - [0x098A] = "uubengali", - [0x098B] = "rvocalicbengali", - [0x098C] = "lvocalicbengali", - [0x098F] = "ebengali", - [0x0990] = "aibengali", - [0x0993] = "obengali", - [0x0994] = "aubengali", - [0x0995] = "kabengali", - [0x0996] = "khabengali", - [0x0997] = "gabengali", - [0x0998] = "ghabengali", - [0x0999] = "ngabengali", - [0x099A] = "cabengali", - [0x099B] = "chabengali", - [0x099C] = "jabengali", - [0x099D] = "jhabengali", - [0x099E] = "nyabengali", - [0x099F] = "ttabengali", - [0x09A0] = "tthabengali", - [0x09A1] = "ddabengali", - [0x09A2] = "ddhabengali", - [0x09A3] = "nnabengali", - [0x09A4] = "tabengali", - [0x09A5] = "thabengali", - [0x09A6] = "dabengali", - [0x09A7] = "dhabengali", - [0x09A8] = "nabengali", - [0x09AA] = "pabengali", - [0x09AB] = "phabengali", - [0x09AC] = "babengali", - [0x09AD] = "bhabengali", - [0x09AE] = "mabengali", - [0x09AF] = "yabengali", - [0x09B0] = "rabengali", - [0x09B2] = "labengali", - [0x09B6] = "shabengali", - [0x09B7] = "ssabengali", - [0x09B8] = "sabengali", - [0x09B9] = "habengali", - [0x09BC] = "nuktabengali", - [0x09BE] = "aavowelsignbengali", - [0x09BF] = "ivowelsignbengali", - [0x09C0] = "iivowelsignbengali", - [0x09C1] = "uvowelsignbengali", - [0x09C2] = "uuvowelsignbengali", - [0x09C3] = "rvocalicvowelsignbengali", - [0x09C4] = "rrvocalicvowelsignbengali", - [0x09C7] = "evowelsignbengali", - [0x09C8] = "aivowelsignbengali", - [0x09CB] = "ovowelsignbengali", - [0x09CC] = "auvowelsignbengali", - [0x09CD] = "viramabengali", - [0x09D7] = "aulengthmarkbengali", - [0x09DC] = "rrabengali", - [0x09DD] = "rhabengali", - [0x09DF] = "yyabengali", - [0x09E0] = "rrvocalicbengali", - [0x09E1] = "llvocalicbengali", - [0x09E2] = "lvocalicvowelsignbengali", - [0x09E3] = "llvocalicvowelsignbengali", - [0x09E6] = "zerobengali", - [0x09E7] = "onebengali", - [0x09E8] = "twobengali", - [0x09E9] = "threebengali", - [0x09EA] = "fourbengali", - [0x09EB] = "fivebengali", - [0x09EC] = "sixbengali", - [0x09ED] = "sevenbengali", - [0x09EE] = "eightbengali", - [0x09EF] = "ninebengali", - [0x09F0] = "ramiddlediagonalbengali", - [0x09F1] = "ralowerdiagonalbengali", - [0x09F2] = "rupeemarkbengali", - [0x09F3] = "rupeesignbengali", - [0x09F4] = "onenumeratorbengali", - [0x09F5] = "twonumeratorbengali", - [0x09F6] = "threenumeratorbengali", - [0x09F7] = "fournumeratorbengali", - [0x09F8] = "denominatorminusonenumeratorbengali", - [0x09F9] = "sixteencurrencydenominatorbengali", - [0x09FA] = "issharbengali", - [0x0A02] = "bindigurmukhi", - [0x0A05] = "agurmukhi", - [0x0A06] = "aagurmukhi", - [0x0A07] = "igurmukhi", - [0x0A08] = "iigurmukhi", - [0x0A09] = "ugurmukhi", - [0x0A0A] = "uugurmukhi", - [0x0A0F] = "eegurmukhi", - [0x0A10] = "aigurmukhi", - [0x0A13] = "oogurmukhi", - [0x0A14] = "augurmukhi", - [0x0A15] = "kagurmukhi", - [0x0A16] = "khagurmukhi", - [0x0A17] = "gagurmukhi", - [0x0A18] = "ghagurmukhi", - [0x0A19] = "ngagurmukhi", - [0x0A1A] = "cagurmukhi", - [0x0A1B] = "chagurmukhi", - [0x0A1C] = "jagurmukhi", - [0x0A1D] = "jhagurmukhi", - [0x0A1E] = "nyagurmukhi", - [0x0A1F] = "ttagurmukhi", - [0x0A20] = "tthagurmukhi", - [0x0A21] = "ddagurmukhi", - [0x0A22] = "ddhagurmukhi", - [0x0A23] = "nnagurmukhi", - [0x0A24] = "tagurmukhi", - [0x0A25] = "thagurmukhi", - [0x0A26] = "dagurmukhi", - [0x0A27] = "dhagurmukhi", - [0x0A28] = "nagurmukhi", - [0x0A2A] = "pagurmukhi", - [0x0A2B] = "phagurmukhi", - [0x0A2C] = "bagurmukhi", - [0x0A2D] = "bhagurmukhi", - [0x0A2E] = "magurmukhi", - [0x0A2F] = "yagurmukhi", - [0x0A30] = "ragurmukhi", - [0x0A32] = "lagurmukhi", - [0x0A35] = "vagurmukhi", - [0x0A36] = "shagurmukhi", - [0x0A38] = "sagurmukhi", - [0x0A39] = "hagurmukhi", - [0x0A3C] = "nuktagurmukhi", - [0x0A3E] = "aamatragurmukhi", - [0x0A3F] = "imatragurmukhi", - [0x0A40] = "iimatragurmukhi", - [0x0A41] = "umatragurmukhi", - [0x0A42] = "uumatragurmukhi", - [0x0A47] = "eematragurmukhi", - [0x0A48] = "aimatragurmukhi", - [0x0A4B] = "oomatragurmukhi", - [0x0A4C] = "aumatragurmukhi", - [0x0A4D] = "halantgurmukhi", - [0x0A59] = "khhagurmukhi", - [0x0A5A] = "ghhagurmukhi", - [0x0A5B] = "zagurmukhi", - [0x0A5C] = "rragurmukhi", - [0x0A5E] = "fagurmukhi", - [0x0A66] = "zerogurmukhi", - [0x0A67] = "onegurmukhi", - [0x0A68] = "twogurmukhi", - [0x0A69] = "threegurmukhi", - [0x0A6A] = "fourgurmukhi", - [0x0A6B] = "fivegurmukhi", - [0x0A6C] = "sixgurmukhi", - [0x0A6D] = "sevengurmukhi", - [0x0A6E] = "eightgurmukhi", - [0x0A6F] = "ninegurmukhi", - [0x0A70] = "tippigurmukhi", - [0x0A71] = "addakgurmukhi", - [0x0A72] = "irigurmukhi", - [0x0A73] = "uragurmukhi", - [0x0A74] = "ekonkargurmukhi", - [0x0A81] = "candrabindugujarati", - [0x0A82] = "anusvaragujarati", - [0x0A83] = "visargagujarati", - [0x0A85] = "agujarati", - [0x0A86] = "aagujarati", - [0x0A87] = "igujarati", - [0x0A88] = "iigujarati", - [0x0A89] = "ugujarati", - [0x0A8A] = "uugujarati", - [0x0A8B] = "rvocalicgujarati", - [0x0A8D] = "ecandragujarati", - [0x0A8F] = "egujarati", - [0x0A90] = "aigujarati", - [0x0A91] = "ocandragujarati", - [0x0A93] = "ogujarati", - [0x0A94] = "augujarati", - [0x0A95] = "kagujarati", - [0x0A96] = "khagujarati", - [0x0A97] = "gagujarati", - [0x0A98] = "ghagujarati", - [0x0A99] = "ngagujarati", - [0x0A9A] = "cagujarati", - [0x0A9B] = "chagujarati", - [0x0A9C] = "jagujarati", - [0x0A9D] = "jhagujarati", - [0x0A9E] = "nyagujarati", - [0x0A9F] = "ttagujarati", - [0x0AA0] = "tthagujarati", - [0x0AA1] = "ddagujarati", - [0x0AA2] = "ddhagujarati", - [0x0AA3] = "nnagujarati", - [0x0AA4] = "tagujarati", - [0x0AA5] = "thagujarati", - [0x0AA6] = "dagujarati", - [0x0AA7] = "dhagujarati", - [0x0AA8] = "nagujarati", - [0x0AAA] = "pagujarati", - [0x0AAB] = "phagujarati", - [0x0AAC] = "bagujarati", - [0x0AAD] = "bhagujarati", - [0x0AAE] = "magujarati", - [0x0AAF] = "yagujarati", - [0x0AB0] = "ragujarati", - [0x0AB2] = "lagujarati", - [0x0AB3] = "llagujarati", - [0x0AB5] = "vagujarati", - [0x0AB6] = "shagujarati", - [0x0AB7] = "ssagujarati", - [0x0AB8] = "sagujarati", - [0x0AB9] = "hagujarati", - [0x0ABC] = "nuktagujarati", - [0x0ABE] = "aavowelsigngujarati", - [0x0ABF] = "ivowelsigngujarati", - [0x0AC0] = "iivowelsigngujarati", - [0x0AC1] = "uvowelsigngujarati", - [0x0AC2] = "uuvowelsigngujarati", - [0x0AC3] = "rvocalicvowelsigngujarati", - [0x0AC4] = "rrvocalicvowelsigngujarati", - [0x0AC5] = "ecandravowelsigngujarati", - [0x0AC7] = "evowelsigngujarati", - [0x0AC8] = "aivowelsigngujarati", - [0x0AC9] = "ocandravowelsigngujarati", - [0x0ACB] = "ovowelsigngujarati", - [0x0ACC] = "auvowelsigngujarati", - [0x0ACD] = "viramagujarati", - [0x0AD0] = "omgujarati", - [0x0AE0] = "rrvocalicgujarati", - [0x0AE6] = "zerogujarati", - [0x0AE7] = "onegujarati", - [0x0AE8] = "twogujarati", - [0x0AE9] = "threegujarati", - [0x0AEA] = "fourgujarati", - [0x0AEB] = "fivegujarati", - [0x0AEC] = "sixgujarati", - [0x0AED] = "sevengujarati", - [0x0AEE] = "eightgujarati", - [0x0AEF] = "ninegujarati", - [0x0E01] = "kokaithai", - [0x0E02] = "khokhaithai", - [0x0E03] = "khokhuatthai", - [0x0E04] = "khokhwaithai", - [0x0E05] = "khokhonthai", - [0x0E06] = "khorakhangthai", - [0x0E07] = "ngonguthai", - [0x0E08] = "chochanthai", - [0x0E09] = "chochingthai", - [0x0E0A] = "chochangthai", - [0x0E0B] = "sosothai", - [0x0E0C] = "chochoethai", - [0x0E0D] = "yoyingthai", - [0x0E0E] = "dochadathai", - [0x0E0F] = "topatakthai", - [0x0E10] = "thothanthai", - [0x0E11] = "thonangmonthothai", - [0x0E12] = "thophuthaothai", - [0x0E13] = "nonenthai", - [0x0E14] = "dodekthai", - [0x0E15] = "totaothai", - [0x0E16] = "thothungthai", - [0x0E17] = "thothahanthai", - [0x0E18] = "thothongthai", - [0x0E19] = "nonuthai", - [0x0E1A] = "bobaimaithai", - [0x0E1B] = "poplathai", - [0x0E1C] = "phophungthai", - [0x0E1D] = "fofathai", - [0x0E1E] = "phophanthai", - [0x0E1F] = "fofanthai", - [0x0E20] = "phosamphaothai", - [0x0E21] = "momathai", - [0x0E22] = "yoyakthai", - [0x0E23] = "roruathai", - [0x0E24] = "ruthai", - [0x0E25] = "lolingthai", - [0x0E26] = "luthai", - [0x0E27] = "wowaenthai", - [0x0E28] = "sosalathai", - [0x0E29] = "sorusithai", - [0x0E2A] = "sosuathai", - [0x0E2B] = "hohipthai", - [0x0E2C] = "lochulathai", - [0x0E2D] = "oangthai", - [0x0E2E] = "honokhukthai", - [0x0E2F] = "paiyannoithai", - [0x0E30] = "saraathai", - [0x0E31] = "maihanakatthai", - [0x0E32] = "saraaathai", - [0x0E33] = "saraamthai", - [0x0E34] = "saraithai", - [0x0E35] = "saraiithai", - [0x0E36] = "sarauethai", - [0x0E37] = "saraueethai", - [0x0E38] = "sarauthai", - [0x0E39] = "sarauuthai", - [0x0E3A] = "phinthuthai", - [0x0E3F] = "bahtthai", - [0x0E40] = "saraethai", - [0x0E41] = "saraaethai", - [0x0E42] = "saraothai", - [0x0E43] = "saraaimaimuanthai", - [0x0E44] = "saraaimaimalaithai", - [0x0E45] = "lakkhangyaothai", - [0x0E46] = "maiyamokthai", - [0x0E47] = "maitaikhuthai", - [0x0E48] = "maiekthai", - [0x0E49] = "maithothai", - [0x0E4A] = "maitrithai", - [0x0E4B] = "maichattawathai", - [0x0E4C] = "thanthakhatthai", - [0x0E4D] = "nikhahitthai", - [0x0E4E] = "yamakkanthai", - [0x0E4F] = "fongmanthai", - [0x0E50] = "zerothai", - [0x0E51] = "onethai", - [0x0E52] = "twothai", - [0x0E53] = "threethai", - [0x0E54] = "fourthai", - [0x0E55] = "fivethai", - [0x0E56] = "sixthai", - [0x0E57] = "seventhai", - [0x0E58] = "eightthai", - [0x0E59] = "ninethai", - [0x0E5A] = "angkhankhuthai", - [0x0E5B] = "khomutthai", - [0x1E00] = "Aringbelow", - [0x1E01] = "aringbelow", - [0x1E02] = "Bdotaccent", - [0x1E03] = "bdotaccent", - [0x1E04] = "Bdotbelow", - [0x1E05] = "bdotbelow", - [0x1E06] = "Blinebelow", - [0x1E07] = "blinebelow", - [0x1E08] = "Ccedillaacute", - [0x1E09] = "ccedillaacute", - [0x1E0A] = "Ddotaccent", - [0x1E0B] = "ddotaccent", - [0x1E0C] = "Ddotbelow", - [0x1E0D] = "ddotbelow", - [0x1E0E] = "Dlinebelow", - [0x1E0F] = "dlinebelow", - [0x1E10] = "Dcedilla", - [0x1E11] = "dcedilla", - [0x1E12] = "Dcircumflexbelow", - [0x1E13] = "dcircumflexbelow", - [0x1E14] = "Emacrongrave", - [0x1E15] = "emacrongrave", - [0x1E16] = "Emacronacute", - [0x1E17] = "emacronacute", - [0x1E18] = "Ecircumflexbelow", - [0x1E19] = "ecircumflexbelow", - [0x1E1A] = "Etildebelow", - [0x1E1B] = "etildebelow", - [0x1E1C] = "Ecedillabreve", - [0x1E1D] = "ecedillabreve", - [0x1E1E] = "Fdotaccent", - [0x1E1F] = "fdotaccent", - [0x1E20] = "Gmacron", - [0x1E21] = "gmacron", - [0x1E22] = "Hdotaccent", - [0x1E23] = "hdotaccent", - [0x1E24] = "Hdotbelow", - [0x1E25] = "hdotbelow", - [0x1E26] = "Hdieresis", - [0x1E27] = "hdieresis", - [0x1E28] = "Hcedilla", - [0x1E29] = "hcedilla", - [0x1E2A] = "Hbrevebelow", - [0x1E2B] = "hbrevebelow", - [0x1E2C] = "Itildebelow", - [0x1E2D] = "itildebelow", - [0x1E2E] = "Idieresisacute", - [0x1E2F] = "idieresisacute", - [0x1E30] = "Kacute", - [0x1E31] = "kacute", - [0x1E32] = "Kdotbelow", - [0x1E33] = "kdotbelow", - [0x1E34] = "Klinebelow", - [0x1E35] = "klinebelow", - [0x1E36] = "Ldotbelow", - [0x1E37] = "ldotbelow", - [0x1E38] = "Ldotbelowmacron", - [0x1E39] = "ldotbelowmacron", - [0x1E3A] = "Llinebelow", - [0x1E3B] = "llinebelow", - [0x1E3C] = "Lcircumflexbelow", - [0x1E3D] = "lcircumflexbelow", - [0x1E3E] = "Macute", - [0x1E3F] = "macute", - [0x1E40] = "Mdotaccent", - [0x1E41] = "mdotaccent", - [0x1E42] = "Mdotbelow", - [0x1E43] = "mdotbelow", - [0x1E44] = "Ndotaccent", - [0x1E45] = "ndotaccent", - [0x1E46] = "Ndotbelow", - [0x1E47] = "ndotbelow", - [0x1E48] = "Nlinebelow", - [0x1E49] = "nlinebelow", - [0x1E4A] = "Ncircumflexbelow", - [0x1E4B] = "ncircumflexbelow", - [0x1E4C] = "Otildeacute", - [0x1E4D] = "otildeacute", - [0x1E4E] = "Otildedieresis", - [0x1E4F] = "otildedieresis", - [0x1E50] = "Omacrongrave", - [0x1E51] = "omacrongrave", - [0x1E52] = "Omacronacute", - [0x1E53] = "omacronacute", - [0x1E54] = "Pacute", - [0x1E55] = "pacute", - [0x1E56] = "Pdotaccent", - [0x1E57] = "pdotaccent", - [0x1E58] = "Rdotaccent", - [0x1E59] = "rdotaccent", - [0x1E5A] = "Rdotbelow", - [0x1E5B] = "rdotbelow", - [0x1E5C] = "Rdotbelowmacron", - [0x1E5D] = "rdotbelowmacron", - [0x1E5E] = "Rlinebelow", - [0x1E5F] = "rlinebelow", - [0x1E60] = "Sdotaccent", - [0x1E61] = "sdotaccent", - [0x1E62] = "Sdotbelow", - [0x1E63] = "sdotbelow", - [0x1E64] = "Sacutedotaccent", - [0x1E65] = "sacutedotaccent", - [0x1E66] = "Scarondotaccent", - [0x1E67] = "scarondotaccent", - [0x1E68] = "Sdotbelowdotaccent", - [0x1E69] = "sdotbelowdotaccent", - [0x1E6A] = "Tdotaccent", - [0x1E6B] = "tdotaccent", - [0x1E6C] = "Tdotbelow", - [0x1E6D] = "tdotbelow", - [0x1E6E] = "Tlinebelow", - [0x1E6F] = "tlinebelow", - [0x1E70] = "Tcircumflexbelow", - [0x1E71] = "tcircumflexbelow", - [0x1E72] = "Udieresisbelow", - [0x1E73] = "udieresisbelow", - [0x1E74] = "Utildebelow", - [0x1E75] = "utildebelow", - [0x1E76] = "Ucircumflexbelow", - [0x1E77] = "ucircumflexbelow", - [0x1E78] = "Utildeacute", - [0x1E79] = "utildeacute", - [0x1E7A] = "Umacrondieresis", - [0x1E7B] = "umacrondieresis", - [0x1E7C] = "Vtilde", - [0x1E7D] = "vtilde", - [0x1E7E] = "Vdotbelow", - [0x1E7F] = "vdotbelow", - [0x1E80] = "Wgrave", - [0x1E81] = "wgrave", - [0x1E82] = "Wacute", - [0x1E83] = "wacute", - [0x1E84] = "Wdieresis", - [0x1E85] = "wdieresis", - [0x1E86] = "Wdotaccent", - [0x1E87] = "wdotaccent", - [0x1E88] = "Wdotbelow", - [0x1E89] = "wdotbelow", - [0x1E8A] = "Xdotaccent", - [0x1E8B] = "xdotaccent", - [0x1E8C] = "Xdieresis", - [0x1E8D] = "xdieresis", - [0x1E8E] = "Ydotaccent", - [0x1E8F] = "ydotaccent", - [0x1E90] = "Zcircumflex", - [0x1E91] = "zcircumflex", - [0x1E92] = "Zdotbelow", - [0x1E93] = "zdotbelow", - [0x1E94] = "Zlinebelow", - [0x1E95] = "zlinebelow", - [0x1E96] = "hlinebelow", - [0x1E97] = "tdieresis", - [0x1E98] = "wring", - [0x1E99] = "yring", - [0x1E9A] = "arighthalfring", - [0x1E9B] = "slongdotaccent", - [0x1EA0] = "Adotbelow", - [0x1EA1] = "adotbelow", - [0x1EA2] = "Ahookabove", - [0x1EA3] = "ahookabove", - [0x1EA4] = "Acircumflexacute", - [0x1EA5] = "acircumflexacute", - [0x1EA6] = "Acircumflexgrave", - [0x1EA7] = "acircumflexgrave", - [0x1EA8] = "Acircumflexhookabove", - [0x1EA9] = "acircumflexhookabove", - [0x1EAA] = "Acircumflextilde", - [0x1EAB] = "acircumflextilde", - [0x1EAC] = "Acircumflexdotbelow", - [0x1EAD] = "acircumflexdotbelow", - [0x1EAE] = "Abreveacute", - [0x1EAF] = "abreveacute", - [0x1EB0] = "Abrevegrave", - [0x1EB1] = "abrevegrave", - [0x1EB2] = "Abrevehookabove", - [0x1EB3] = "abrevehookabove", - [0x1EB4] = "Abrevetilde", - [0x1EB5] = "abrevetilde", - [0x1EB6] = "Abrevedotbelow", - [0x1EB7] = "abrevedotbelow", - [0x1EB8] = "Edotbelow", - [0x1EB9] = "edotbelow", - [0x1EBA] = "Ehookabove", - [0x1EBB] = "ehookabove", - [0x1EBC] = "Etilde", - [0x1EBD] = "etilde", - [0x1EBE] = "Ecircumflexacute", - [0x1EBF] = "ecircumflexacute", - [0x1EC0] = "Ecircumflexgrave", - [0x1EC1] = "ecircumflexgrave", - [0x1EC2] = "Ecircumflexhookabove", - [0x1EC3] = "ecircumflexhookabove", - [0x1EC4] = "Ecircumflextilde", - [0x1EC5] = "ecircumflextilde", - [0x1EC6] = "Ecircumflexdotbelow", - [0x1EC7] = "ecircumflexdotbelow", - [0x1EC8] = "Ihookabove", - [0x1EC9] = "ihookabove", - [0x1ECA] = "Idotbelow", - [0x1ECB] = "idotbelow", - [0x1ECC] = "Odotbelow", - [0x1ECD] = "odotbelow", - [0x1ECE] = "Ohookabove", - [0x1ECF] = "ohookabove", - [0x1ED0] = "Ocircumflexacute", - [0x1ED1] = "ocircumflexacute", - [0x1ED2] = "Ocircumflexgrave", - [0x1ED3] = "ocircumflexgrave", - [0x1ED4] = "Ocircumflexhookabove", - [0x1ED5] = "ocircumflexhookabove", - [0x1ED6] = "Ocircumflextilde", - [0x1ED7] = "ocircumflextilde", - [0x1ED8] = "Ocircumflexdotbelow", - [0x1ED9] = "ocircumflexdotbelow", - [0x1EDA] = "Ohornacute", - [0x1EDB] = "ohornacute", - [0x1EDC] = "Ohorngrave", - [0x1EDD] = "ohorngrave", - [0x1EDE] = "Ohornhookabove", - [0x1EDF] = "ohornhookabove", - [0x1EE0] = "Ohorntilde", - [0x1EE1] = "ohorntilde", - [0x1EE2] = "Ohorndotbelow", - [0x1EE3] = "ohorndotbelow", - [0x1EE4] = "Udotbelow", - [0x1EE5] = "udotbelow", - [0x1EE6] = "Uhookabove", - [0x1EE7] = "uhookabove", - [0x1EE8] = "Uhornacute", - [0x1EE9] = "uhornacute", - [0x1EEA] = "Uhorngrave", - [0x1EEB] = "uhorngrave", - [0x1EEC] = "Uhornhookabove", - [0x1EED] = "uhornhookabove", - [0x1EEE] = "Uhorntilde", - [0x1EEF] = "uhorntilde", - [0x1EF0] = "Uhorndotbelow", - [0x1EF1] = "uhorndotbelow", - [0x1EF2] = "Ygrave", - [0x1EF3] = "ygrave", - [0x1EF4] = "Ydotbelow", - [0x1EF5] = "ydotbelow", - [0x1EF6] = "Yhookabove", - [0x1EF7] = "yhookabove", - [0x1EF8] = "Ytilde", - [0x1EF9] = "ytilde", - [0x2002] = "enspace", - [0x200B] = "zerowidthspace", - [0x200C] = "zerowidthnonjoiner", - [0x200D] = "afii301", - [0x200E] = "afii299", - [0x200F] = "afii300", - [0x2010] = "hyphentwo", - [0x2012] = "figuredash", - [0x2013] = "endash", - [0x2014] = "emdash", - [0x2015] = "horizontalbar", - [0x2016] = "dblverticalbar", - [0x2017] = "underscoredbl", - [0x2018] = "quoteleft", - [0x2019] = "quoteright", - [0x201A] = "quotesinglbase", - [0x201B] = "quotereversed", - [0x201C] = "quotedblleft", - [0x201D] = "quotedblright", - [0x201E] = "quotedblbase", - [0x2020] = "dagger", - [0x2021] = "daggerdbl", - [0x2022] = "bullet", - [0x2024] = "onedotenleader", - [0x2025] = "twodotleader", - [0x2026] = "ellipsis", - [0x202C] = "afii61573", - [0x202D] = "afii61574", - [0x202E] = "afii61575", - [0x2030] = "perthousand", - [0x2032] = "minute", - [0x2033] = "second", - [0x2035] = "primereversed", - [0x2039] = "guilsinglleft", - [0x203A] = "guilsinglright", - [0x203B] = "referencemark", - [0x203C] = "exclamdbl", - [0x203E] = "overline", - [0x2042] = "asterism", - [0x2044] = "fraction", - [0x2070] = "zerosuperior", - [0x2074] = "foursuperior", - [0x2075] = "fivesuperior", - [0x2076] = "sixsuperior", - [0x2077] = "sevensuperior", - [0x2078] = "eightsuperior", - [0x2079] = "ninesuperior", - [0x207A] = "plussuperior", - [0x207C] = "equalsuperior", - [0x207D] = "parenleftsuperior", - [0x207E] = "parenrightsuperior", - [0x207F] = "nsuperior", - [0x2080] = "zeroinferior", - [0x2081] = "oneinferior", - [0x2082] = "twoinferior", - [0x2083] = "threeinferior", - [0x2084] = "fourinferior", - [0x2085] = "fiveinferior", - [0x2086] = "sixinferior", - [0x2087] = "seveninferior", - [0x2088] = "eightinferior", - [0x2089] = "nineinferior", - [0x208D] = "parenleftinferior", - [0x208E] = "parenrightinferior", - [0x20A1] = "colonsign", - [0x20A2] = "cruzeiro", - [0x20A3] = "franc", - [0x20A4] = "lira", - [0x20A7] = "peseta", - [0x20A9] = "won", - [0x20AA] = "sheqelhebrew", - [0x20AB] = "dong", - [0x20AC] = "euro", - [0x2103] = "centigrade", - [0x2105] = "careof", - [0x2109] = "fahrenheit", - [0x2111] = "Ifraktur", - [0x2113] = "lsquare", - [0x2116] = "numero", - [0x2118] = "weierstrass", - [0x211C] = "Rfraktur", - [0x211E] = "prescription", - [0x2121] = "telephone", - [0x2122] = "trademark", - [0x2126] = "Omega", - [0x212B] = "angstrom", - [0x212E] = "estimated", - [0x2135] = "aleph", - [0x2153] = "onethird", - [0x2154] = "twothirds", - [0x215B] = "oneeighth", - [0x215C] = "threeeighths", - [0x215D] = "fiveeighths", - [0x215E] = "seveneighths", - [0x2160] = "Oneroman", - [0x2161] = "Tworoman", - [0x2162] = "Threeroman", - [0x2163] = "Fourroman", - [0x2164] = "Fiveroman", - [0x2165] = "Sixroman", - [0x2166] = "Sevenroman", - [0x2167] = "Eightroman", - [0x2168] = "Nineroman", - [0x2169] = "Tenroman", - [0x216A] = "Elevenroman", - [0x216B] = "Twelveroman", - [0x2170] = "oneroman", - [0x2171] = "tworoman", - [0x2172] = "threeroman", - [0x2173] = "fourroman", - [0x2174] = "fiveroman", - [0x2175] = "sixroman", - [0x2176] = "sevenroman", - [0x2177] = "eightroman", - [0x2178] = "nineroman", - [0x2179] = "tenroman", - [0x217A] = "elevenroman", - [0x217B] = "twelveroman", - [0x2190] = "arrowleft", - [0x2191] = "arrowup", - [0x2192] = "arrowright", - [0x2193] = "arrowdown", - [0x2194] = "arrowboth", - [0x2195] = "arrowupdn", - [0x2196] = "arrowupleft", - [0x2197] = "arrowupright", - [0x2198] = "arrowdownright", - [0x2199] = "arrowdownleft", - [0x21A8] = "arrowupdownbase", - [0x21B5] = "carriagereturn", - [0x21BC] = "harpoonleftbarbup", - [0x21C0] = "harpoonrightbarbup", - [0x21C4] = "arrowrightoverleft", - [0x21C5] = "arrowupleftofdown", - [0x21C6] = "arrowleftoverright", - [0x21CD] = "arrowleftdblstroke", - [0x21CF] = "arrowrightdblstroke", - [0x21D0] = "arrowleftdbl", - [0x21D1] = "arrowdblup", - [0x21D2] = "dblarrowright", - [0x21D3] = "arrowdbldown", - [0x21D4] = "dblarrowleft", - [0x21DE] = "pageup", - [0x21DF] = "pagedown", - [0x21E0] = "arrowdashleft", - [0x21E1] = "arrowdashup", - [0x21E2] = "arrowdashright", - [0x21E3] = "arrowdashdown", - [0x21E4] = "arrowtableft", - [0x21E5] = "arrowtabright", - [0x21E6] = "arrowleftwhite", - [0x21E7] = "arrowupwhite", - [0x21E8] = "arrowrightwhite", - [0x21E9] = "arrowdownwhite", - [0x21EA] = "capslock", - [0x2200] = "universal", - [0x2202] = "partialdiff", - [0x2203] = "thereexists", - [0x2205] = "emptyset", - [0x2206] = "increment", - [0x2207] = "nabla", - [0x2208] = "element", - [0x2209] = "notelementof", - [0x220B] = "suchthat", - [0x220C] = "notcontains", - [0x220F] = "product", - [0x2211] = "summation", - [0x2212] = "minus", - [0x2213] = "minusplus", - [0x2215] = "divisionslash", - [0x2217] = "asteriskmath", - [0x2219] = "bulletoperator", - [0x221A] = "radical", - [0x221D] = "proportional", - [0x221E] = "infinity", - [0x221F] = "rightangle", - [0x2220] = "angle", - [0x2223] = "divides", - [0x2225] = "parallel", - [0x2226] = "notparallel", - [0x2227] = "logicaland", - [0x2228] = "logicalor", - [0x2229] = "intersection", - [0x222A] = "union", - [0x222B] = "integral", - [0x222C] = "dblintegral", - [0x222E] = "contourintegral", - [0x2234] = "therefore", - [0x2235] = "because", - [0x2236] = "ratio", - [0x2237] = "proportion", - [0x223C] = "tildeoperator", - [0x223D] = "reversedtilde", - [0x2243] = "asymptoticallyequal", - [0x2245] = "congruent", - [0x2248] = "approxequal", - [0x224C] = "allequal", - [0x2250] = "approaches", - [0x2251] = "geometricallyequal", - [0x2252] = "approxequalorimage", - [0x2253] = "imageorapproximatelyequal", - [0x2260] = "notequal", - [0x2261] = "equivalence", - [0x2262] = "notidentical", - [0x2264] = "lessequal", - [0x2265] = "greaterequal", - [0x2266] = "lessoverequal", - [0x2267] = "greateroverequal", - [0x226A] = "muchless", - [0x226B] = "muchgreater", - [0x226E] = "notless", - [0x226F] = "notgreater", - [0x2270] = "notlessnorequal", - [0x2271] = "notgreaternorequal", - [0x2272] = "lessorequivalent", - [0x2273] = "greaterorequivalent", - [0x2276] = "lessorgreater", - [0x2277] = "greaterorless", - [0x2279] = "notgreaternorless", - [0x227A] = "precedes", - [0x227B] = "succeeds", - [0x2280] = "notprecedes", - [0x2281] = "notsucceeds", - [0x2282] = "subset", - [0x2283] = "superset", - [0x2284] = "notsubset", - [0x2285] = "notsuperset", - [0x2286] = "subsetorequal", - [0x2287] = "supersetorequal", - [0x228A] = "subsetnotequal", - [0x228B] = "supersetnotequal", - [0x2295] = "pluscircle", - [0x2296] = "minuscircle", - [0x2297] = "timescircle", - [0x2299] = "circleot", - [0x22A3] = "tackleft", - [0x22A4] = "tackdown", - [0x22A5] = "perpendicular", - [0x22BF] = "righttriangle", - [0x22C5] = "dotmath", - [0x22CE] = "curlyor", - [0x22CF] = "curlyand", - [0x22DA] = "lessequalorgreater", - [0x22DB] = "greaterequalorless", - [0x22EE] = "ellipsisvertical", - [0x2302] = "house", - [0x2303] = "control", - [0x2305] = "projective", - [0x2310] = "revlogicalnot", - [0x2312] = "arc", - [0x2318] = "propellor", - [0x2320] = "integraltp", - [0x2321] = "integralbt", - [0x2325] = "option", - [0x2326] = "deleteright", - [0x2327] = "clear", - [0x2329] = "angleleft", - [0x232A] = "angleright", - [0x232B] = "deleteleft", - [0x2423] = "blank", - [0x2460] = "onecircle", - [0x2461] = "twocircle", - [0x2462] = "threecircle", - [0x2463] = "fourcircle", - [0x2464] = "fivecircle", - [0x2465] = "sixcircle", - [0x2466] = "sevencircle", - [0x2467] = "eightcircle", - [0x2468] = "ninecircle", - [0x2469] = "tencircle", - [0x246A] = "elevencircle", - [0x246B] = "twelvecircle", - [0x246C] = "thirteencircle", - [0x246D] = "fourteencircle", - [0x246E] = "fifteencircle", - [0x246F] = "sixteencircle", - [0x2470] = "seventeencircle", - [0x2471] = "eighteencircle", - [0x2472] = "nineteencircle", - [0x2473] = "twentycircle", - [0x2474] = "oneparen", - [0x2475] = "twoparen", - [0x2476] = "threeparen", - [0x2477] = "fourparen", - [0x2478] = "fiveparen", - [0x2479] = "sixparen", - [0x247A] = "sevenparen", - [0x247B] = "eightparen", - [0x247C] = "nineparen", - [0x247D] = "tenparen", - [0x247E] = "elevenparen", - [0x247F] = "twelveparen", - [0x2480] = "thirteenparen", - [0x2481] = "fourteenparen", - [0x2482] = "fifteenparen", - [0x2483] = "sixteenparen", - [0x2484] = "seventeenparen", - [0x2485] = "eighteenparen", - [0x2486] = "nineteenparen", - [0x2487] = "twentyparen", - [0x2488] = "oneperiod", - [0x2489] = "twoperiod", - [0x248A] = "threeperiod", - [0x248B] = "fourperiod", - [0x248C] = "fiveperiod", - [0x248D] = "sixperiod", - [0x248E] = "sevenperiod", - [0x248F] = "eightperiod", - [0x2490] = "nineperiod", - [0x2491] = "tenperiod", - [0x2492] = "elevenperiod", - [0x2493] = "twelveperiod", - [0x2494] = "thirteenperiod", - [0x2495] = "fourteenperiod", - [0x2496] = "fifteenperiod", - [0x2497] = "sixteenperiod", - [0x2498] = "seventeenperiod", - [0x2499] = "eighteenperiod", - [0x249A] = "nineteenperiod", - [0x249B] = "twentyperiod", - [0x249C] = "aparen", - [0x249D] = "bparen", - [0x249E] = "cparen", - [0x249F] = "dparen", - [0x24A0] = "eparen", - [0x24A1] = "fparen", - [0x24A2] = "gparen", - [0x24A3] = "hparen", - [0x24A4] = "iparen", - [0x24A5] = "jparen", - [0x24A6] = "kparen", - [0x24A7] = "lparen", - [0x24A8] = "mparen", - [0x24A9] = "nparen", - [0x24AA] = "oparen", - [0x24AB] = "pparen", - [0x24AC] = "qparen", - [0x24AD] = "rparen", - [0x24AE] = "sparen", - [0x24AF] = "tparen", - [0x24B0] = "uparen", - [0x24B1] = "vparen", - [0x24B2] = "wparen", - [0x24B3] = "xparen", - [0x24B4] = "yparen", - [0x24B5] = "zparen", - [0x24B6] = "Acircle", - [0x24B7] = "Bcircle", - [0x24B8] = "Ccircle", - [0x24B9] = "Dcircle", - [0x24BA] = "Ecircle", - [0x24BB] = "Fcircle", - [0x24BC] = "Gcircle", - [0x24BD] = "Hcircle", - [0x24BE] = "Icircle", - [0x24BF] = "Jcircle", - [0x24C0] = "Kcircle", - [0x24C1] = "Lcircle", - [0x24C2] = "Mcircle", - [0x24C3] = "Ncircle", - [0x24C4] = "Ocircle", - [0x24C5] = "Pcircle", - [0x24C6] = "Qcircle", - [0x24C7] = "Rcircle", - [0x24C8] = "Scircle", - [0x24C9] = "Tcircle", - [0x24CA] = "Ucircle", - [0x24CB] = "Vcircle", - [0x24CC] = "Wcircle", - [0x24CD] = "Xcircle", - [0x24CE] = "Ycircle", - [0x24CF] = "Zcircle", - [0x24D0] = "acircle", - [0x24D1] = "bcircle", - [0x24D2] = "ccircle", - [0x24D3] = "dcircle", - [0x24D4] = "ecircle", - [0x24D5] = "fcircle", - [0x24D6] = "gcircle", - [0x24D7] = "hcircle", - [0x24D8] = "icircle", - [0x24D9] = "jcircle", - [0x24DA] = "kcircle", - [0x24DB] = "lcircle", - [0x24DC] = "mcircle", - [0x24DD] = "ncircle", - [0x24DE] = "ocircle", - [0x24DF] = "pcircle", - [0x24E0] = "qcircle", - [0x24E1] = "rcircle", - [0x24E2] = "scircle", - [0x24E3] = "tcircle", - [0x24E4] = "ucircle", - [0x24E5] = "vcircle", - [0x24E6] = "wcircle", - [0x24E7] = "xcircle", - [0x24E8] = "ycircle", - [0x24E9] = "zcircle", - [0x2500] = "SF100000", - [0x2502] = "SF110000", - [0x250C] = "SF010000", - [0x2510] = "SF030000", - [0x2514] = "SF020000", - [0x2518] = "SF040000", - [0x251C] = "SF080000", - [0x2524] = "SF090000", - [0x252C] = "SF060000", - [0x2534] = "SF070000", - [0x253C] = "SF050000", - [0x2550] = "SF430000", - [0x2551] = "SF240000", - [0x2552] = "SF510000", - [0x2553] = "SF520000", - [0x2554] = "SF390000", - [0x2555] = "SF220000", - [0x2556] = "SF210000", - [0x2557] = "SF250000", - [0x2558] = "SF500000", - [0x2559] = "SF490000", - [0x255A] = "SF380000", - [0x255B] = "SF280000", - [0x255C] = "SF270000", - [0x255D] = "SF260000", - [0x255E] = "SF360000", - [0x255F] = "SF370000", - [0x2560] = "SF420000", - [0x2561] = "SF190000", - [0x2562] = "SF200000", - [0x2563] = "SF230000", - [0x2564] = "SF470000", - [0x2565] = "SF480000", - [0x2566] = "SF410000", - [0x2567] = "SF450000", - [0x2568] = "SF460000", - [0x2569] = "SF400000", - [0x256A] = "SF540000", - [0x256B] = "SF530000", - [0x256C] = "SF440000", - [0x2580] = "upblock", - [0x2584] = "dnblock", - [0x2588] = "block", - [0x258C] = "lfblock", - [0x2590] = "rtblock", - [0x2591] = "shadelight", - [0x2592] = "shademedium", - [0x2593] = "shadedark", - [0x25A0] = "filledbox", - [0x25A1] = "whitesquare", - [0x25A3] = "squarewhitewithsmallblack", - [0x25A4] = "squarehorizontalfill", - [0x25A5] = "squareverticalfill", - [0x25A6] = "squareorthogonalcrosshatchfill", - [0x25A7] = "squareupperlefttolowerrightfill", - [0x25A8] = "squareupperrighttolowerleftfill", - [0x25A9] = "squarediagonalcrosshatchfill", - [0x25AA] = "blacksmallsquare", - [0x25AB] = "whitesmallsquare", - [0x25AC] = "filledrect", - [0x25B2] = "triagup", - [0x25B3] = "whiteuppointingtriangle", - [0x25B4] = "blackuppointingsmalltriangle", - [0x25B5] = "whiteuppointingsmalltriangle", - [0x25B6] = "blackrightpointingtriangle", - [0x25B7] = "whiterightpointingtriangle", - [0x25B9] = "whiterightpointingsmalltriangle", - [0x25BA] = "triagrt", - [0x25BC] = "triagdn", - [0x25BD] = "whitedownpointingtriangle", - [0x25BF] = "whitedownpointingsmalltriangle", - [0x25C0] = "blackleftpointingtriangle", - [0x25C1] = "whiteleftpointingtriangle", - [0x25C3] = "whiteleftpointingsmalltriangle", - [0x25C4] = "triaglf", - [0x25C6] = "blackdiamond", - [0x25C7] = "whitediamond", - [0x25C8] = "whitediamondcontainingblacksmalldiamond", - [0x25C9] = "fisheye", - [0x25CA] = "lozenge", - [0x25CB] = "whitecircle", - [0x25CC] = "dottedcircle", - [0x25CE] = "bullseye", - [0x25CF] = "blackcircle", - [0x25D0] = "circlewithlefthalfblack", - [0x25D1] = "circlewithrighthalfblack", - [0x25D8] = "invbullet", - [0x25D9] = "whitecircleinverse", - [0x25E2] = "blacklowerrighttriangle", - [0x25E3] = "blacklowerlefttriangle", - [0x25E4] = "blackupperlefttriangle", - [0x25E5] = "blackupperrighttriangle", - [0x25E6] = "whitebullet", - [0x25EF] = "largecircle", - [0x2605] = "blackstar", - [0x2606] = "whitestar", - [0x260E] = "telephoneblack", - [0x260F] = "whitetelephone", - [0x261C] = "pointingindexleftwhite", - [0x261D] = "pointingindexupwhite", - [0x261E] = "pointingindexrightwhite", - [0x261F] = "pointingindexdownwhite", - [0x262F] = "yinyang", - [0x263A] = "whitesmilingface", - [0x263B] = "invsmileface", - [0x263C] = "sun", - [0x2640] = "venus", - [0x2641] = "earth", - [0x2642] = "mars", - [0x2660] = "spadesuitblack", - [0x2661] = "heartsuitwhite", - [0x2662] = "diamondsuitwhite", - [0x2663] = "clubsuitblack", - [0x2664] = "spadesuitwhite", - [0x2665] = "heartsuitblack", - [0x2666] = "diamond", - [0x2667] = "clubsuitwhite", - [0x2668] = "hotsprings", - [0x2669] = "quarternote", - [0x266A] = "musicalnote", - [0x266B] = "musicalnotedbl", - [0x266C] = "beamedsixteenthnotes", - [0x266D] = "musicflatsign", - [0x266F] = "musicsharpsign", - [0x2713] = "checkmark", - [0x278A] = "onecircleinversesansserif", - [0x278B] = "twocircleinversesansserif", - [0x278C] = "threecircleinversesansserif", - [0x278D] = "fourcircleinversesansserif", - [0x278E] = "fivecircleinversesansserif", - [0x278F] = "sixcircleinversesansserif", - [0x2790] = "sevencircleinversesansserif", - [0x2791] = "eightcircleinversesansserif", - [0x2792] = "ninecircleinversesansserif", - [0x279E] = "arrowrightheavy", - [0x3000] = "ideographicspace", - [0x3001] = "ideographiccomma", - [0x3002] = "ideographicperiod", - [0x3003] = "dittomark", - [0x3004] = "jis", - [0x3005] = "ideographiciterationmark", - [0x3006] = "ideographicclose", - [0x3007] = "ideographiczero", - [0x3008] = "anglebracketleft", - [0x3009] = "anglebracketright", - [0x300A] = "dblanglebracketleft", - [0x300B] = "dblanglebracketright", - [0x300C] = "cornerbracketleft", - [0x300D] = "cornerbracketright", - [0x300E] = "whitecornerbracketleft", - [0x300F] = "whitecornerbracketright", - [0x3010] = "blacklenticularbracketleft", - [0x3011] = "blacklenticularbracketright", - [0x3012] = "postalmark", - [0x3013] = "getamark", - [0x3014] = "tortoiseshellbracketleft", - [0x3015] = "tortoiseshellbracketright", - [0x3016] = "whitelenticularbracketleft", - [0x3017] = "whitelenticularbracketright", - [0x3018] = "whitetortoiseshellbracketleft", - [0x3019] = "whitetortoiseshellbracketright", - [0x301C] = "wavedash", - [0x301D] = "quotedblprimereversed", - [0x301E] = "quotedblprime", - [0x3020] = "postalmarkface", - [0x3021] = "onehangzhou", - [0x3022] = "twohangzhou", - [0x3023] = "threehangzhou", - [0x3024] = "fourhangzhou", - [0x3025] = "fivehangzhou", - [0x3026] = "sixhangzhou", - [0x3027] = "sevenhangzhou", - [0x3028] = "eighthangzhou", - [0x3029] = "ninehangzhou", - [0x3036] = "circlepostalmark", - [0x3041] = "asmallhiragana", - [0x3042] = "ahiragana", - [0x3043] = "ismallhiragana", - [0x3044] = "ihiragana", - [0x3045] = "usmallhiragana", - [0x3046] = "uhiragana", - [0x3047] = "esmallhiragana", - [0x3048] = "ehiragana", - [0x3049] = "osmallhiragana", - [0x304A] = "ohiragana", - [0x304B] = "kahiragana", - [0x304C] = "gahiragana", - [0x304D] = "kihiragana", - [0x304E] = "gihiragana", - [0x304F] = "kuhiragana", - [0x3050] = "guhiragana", - [0x3051] = "kehiragana", - [0x3052] = "gehiragana", - [0x3053] = "kohiragana", - [0x3054] = "gohiragana", - [0x3055] = "sahiragana", - [0x3056] = "zahiragana", - [0x3057] = "sihiragana", - [0x3058] = "zihiragana", - [0x3059] = "suhiragana", - [0x305A] = "zuhiragana", - [0x305B] = "sehiragana", - [0x305C] = "zehiragana", - [0x305D] = "sohiragana", - [0x305E] = "zohiragana", - [0x305F] = "tahiragana", - [0x3060] = "dahiragana", - [0x3061] = "tihiragana", - [0x3062] = "dihiragana", - [0x3063] = "tusmallhiragana", - [0x3064] = "tuhiragana", - [0x3065] = "duhiragana", - [0x3066] = "tehiragana", - [0x3067] = "dehiragana", - [0x3068] = "tohiragana", - [0x3069] = "dohiragana", - [0x306A] = "nahiragana", - [0x306B] = "nihiragana", - [0x306C] = "nuhiragana", - [0x306D] = "nehiragana", - [0x306E] = "nohiragana", - [0x306F] = "hahiragana", - [0x3070] = "bahiragana", - [0x3071] = "pahiragana", - [0x3072] = "hihiragana", - [0x3073] = "bihiragana", - [0x3074] = "pihiragana", - [0x3075] = "huhiragana", - [0x3076] = "buhiragana", - [0x3077] = "puhiragana", - [0x3078] = "hehiragana", - [0x3079] = "behiragana", - [0x307A] = "pehiragana", - [0x307B] = "hohiragana", - [0x307C] = "bohiragana", - [0x307D] = "pohiragana", - [0x307E] = "mahiragana", - [0x307F] = "mihiragana", - [0x3080] = "muhiragana", - [0x3081] = "mehiragana", - [0x3082] = "mohiragana", - [0x3083] = "yasmallhiragana", - [0x3084] = "yahiragana", - [0x3085] = "yusmallhiragana", - [0x3086] = "yuhiragana", - [0x3087] = "yosmallhiragana", - [0x3088] = "yohiragana", - [0x3089] = "rahiragana", - [0x308A] = "rihiragana", - [0x308B] = "ruhiragana", - [0x308C] = "rehiragana", - [0x308D] = "rohiragana", - [0x308E] = "wasmallhiragana", - [0x308F] = "wahiragana", - [0x3090] = "wihiragana", - [0x3091] = "wehiragana", - [0x3092] = "wohiragana", - [0x3093] = "nhiragana", - [0x3094] = "vuhiragana", - [0x309B] = "voicedmarkkana", - [0x309C] = "semivoicedmarkkana", - [0x309D] = "iterationhiragana", - [0x309E] = "voicediterationhiragana", - [0x30A1] = "asmallkatakana", - [0x30A2] = "akatakana", - [0x30A3] = "ismallkatakana", - [0x30A4] = "ikatakana", - [0x30A5] = "usmallkatakana", - [0x30A6] = "ukatakana", - [0x30A7] = "esmallkatakana", - [0x30A8] = "ekatakana", - [0x30A9] = "osmallkatakana", - [0x30AA] = "okatakana", - [0x30AB] = "kakatakana", - [0x30AC] = "gakatakana", - [0x30AD] = "kikatakana", - [0x30AE] = "gikatakana", - [0x30AF] = "kukatakana", - [0x30B0] = "gukatakana", - [0x30B1] = "kekatakana", - [0x30B2] = "gekatakana", - [0x30B3] = "kokatakana", - [0x30B4] = "gokatakana", - [0x30B5] = "sakatakana", - [0x30B6] = "zakatakana", - [0x30B7] = "sikatakana", - [0x30B8] = "zikatakana", - [0x30B9] = "sukatakana", - [0x30BA] = "zukatakana", - [0x30BB] = "sekatakana", - [0x30BC] = "zekatakana", - [0x30BD] = "sokatakana", - [0x30BE] = "zokatakana", - [0x30BF] = "takatakana", - [0x30C0] = "dakatakana", - [0x30C1] = "tikatakana", - [0x30C2] = "dikatakana", - [0x30C3] = "tusmallkatakana", - [0x30C4] = "tukatakana", - [0x30C5] = "dukatakana", - [0x30C6] = "tekatakana", - [0x30C7] = "dekatakana", - [0x30C8] = "tokatakana", - [0x30C9] = "dokatakana", - [0x30CA] = "nakatakana", - [0x30CB] = "nikatakana", - [0x30CC] = "nukatakana", - [0x30CD] = "nekatakana", - [0x30CE] = "nokatakana", - [0x30CF] = "hakatakana", - [0x30D0] = "bakatakana", - [0x30D1] = "pakatakana", - [0x30D2] = "hikatakana", - [0x30D3] = "bikatakana", - [0x30D4] = "pikatakana", - [0x30D5] = "hukatakana", - [0x30D6] = "bukatakana", - [0x30D7] = "pukatakana", - [0x30D8] = "hekatakana", - [0x30D9] = "bekatakana", - [0x30DA] = "pekatakana", - [0x30DB] = "hokatakana", - [0x30DC] = "bokatakana", - [0x30DD] = "pokatakana", - [0x30DE] = "makatakana", - [0x30DF] = "mikatakana", - [0x30E0] = "mukatakana", - [0x30E1] = "mekatakana", - [0x30E2] = "mokatakana", - [0x30E3] = "yasmallkatakana", - [0x30E4] = "yakatakana", - [0x30E5] = "yusmallkatakana", - [0x30E6] = "yukatakana", - [0x30E7] = "yosmallkatakana", - [0x30E8] = "yokatakana", - [0x30E9] = "rakatakana", - [0x30EA] = "rikatakana", - [0x30EB] = "rukatakana", - [0x30EC] = "rekatakana", - [0x30ED] = "rokatakana", - [0x30EE] = "wasmallkatakana", - [0x30EF] = "wakatakana", - [0x30F0] = "wikatakana", - [0x30F1] = "wekatakana", - [0x30F2] = "wokatakana", - [0x30F3] = "nkatakana", - [0x30F4] = "vukatakana", - [0x30F5] = "kasmallkatakana", - [0x30F6] = "kesmallkatakana", - [0x30F7] = "vakatakana", - [0x30F8] = "vikatakana", - [0x30F9] = "vekatakana", - [0x30FA] = "vokatakana", - [0x30FB] = "dotkatakana", - [0x30FC] = "prolongedkana", - [0x30FD] = "iterationkatakana", - [0x30FE] = "voicediterationkatakana", - [0x3105] = "bbopomofo", - [0x3106] = "pbopomofo", - [0x3107] = "mbopomofo", - [0x3108] = "fbopomofo", - [0x3109] = "dbopomofo", - [0x310A] = "tbopomofo", - [0x310B] = "nbopomofo", - [0x310C] = "lbopomofo", - [0x310D] = "gbopomofo", - [0x310E] = "kbopomofo", - [0x310F] = "hbopomofo", - [0x3110] = "jbopomofo", - [0x3111] = "qbopomofo", - [0x3112] = "xbopomofo", - [0x3113] = "zhbopomofo", - [0x3114] = "chbopomofo", - [0x3115] = "shbopomofo", - [0x3116] = "rbopomofo", - [0x3117] = "zbopomofo", - [0x3118] = "cbopomofo", - [0x3119] = "sbopomofo", - [0x311A] = "abopomofo", - [0x311B] = "obopomofo", - [0x311C] = "ebopomofo", - [0x311D] = "ehbopomofo", - [0x311E] = "aibopomofo", - [0x311F] = "eibopomofo", - [0x3120] = "aubopomofo", - [0x3121] = "oubopomofo", - [0x3122] = "anbopomofo", - [0x3123] = "enbopomofo", - [0x3124] = "angbopomofo", - [0x3125] = "engbopomofo", - [0x3126] = "erbopomofo", - [0x3127] = "ibopomofo", - [0x3128] = "ubopomofo", - [0x3129] = "iubopomofo", - [0x3131] = "kiyeokkorean", - [0x3132] = "ssangkiyeokkorean", - [0x3133] = "kiyeoksioskorean", - [0x3134] = "nieunkorean", - [0x3135] = "nieuncieuckorean", - [0x3136] = "nieunhieuhkorean", - [0x3137] = "tikeutkorean", - [0x3138] = "ssangtikeutkorean", - [0x3139] = "rieulkorean", - [0x313A] = "rieulkiyeokkorean", - [0x313B] = "rieulmieumkorean", - [0x313C] = "rieulpieupkorean", - [0x313D] = "rieulsioskorean", - [0x313E] = "rieulthieuthkorean", - [0x313F] = "rieulphieuphkorean", - [0x3140] = "rieulhieuhkorean", - [0x3141] = "mieumkorean", - [0x3142] = "pieupkorean", - [0x3143] = "ssangpieupkorean", - [0x3144] = "pieupsioskorean", - [0x3145] = "sioskorean", - [0x3146] = "ssangsioskorean", - [0x3147] = "ieungkorean", - [0x3148] = "cieuckorean", - [0x3149] = "ssangcieuckorean", - [0x314A] = "chieuchkorean", - [0x314B] = "khieukhkorean", - [0x314C] = "thieuthkorean", - [0x314D] = "phieuphkorean", - [0x314E] = "hieuhkorean", - [0x314F] = "akorean", - [0x3150] = "aekorean", - [0x3151] = "yakorean", - [0x3152] = "yaekorean", - [0x3153] = "eokorean", - [0x3154] = "ekorean", - [0x3155] = "yeokorean", - [0x3156] = "yekorean", - [0x3157] = "okorean", - [0x3158] = "wakorean", - [0x3159] = "waekorean", - [0x315A] = "oekorean", - [0x315B] = "yokorean", - [0x315C] = "ukorean", - [0x315D] = "weokorean", - [0x315E] = "wekorean", - [0x315F] = "wikorean", - [0x3160] = "yukorean", - [0x3161] = "eukorean", - [0x3162] = "yikorean", - [0x3163] = "ikorean", - [0x3164] = "hangulfiller", - [0x3165] = "ssangnieunkorean", - [0x3166] = "nieuntikeutkorean", - [0x3167] = "nieunsioskorean", - [0x3168] = "nieunpansioskorean", - [0x3169] = "rieulkiyeoksioskorean", - [0x316A] = "rieultikeutkorean", - [0x316B] = "rieulpieupsioskorean", - [0x316C] = "rieulpansioskorean", - [0x316D] = "rieulyeorinhieuhkorean", - [0x316E] = "mieumpieupkorean", - [0x316F] = "mieumsioskorean", - [0x3170] = "mieumpansioskorean", - [0x3171] = "kapyeounmieumkorean", - [0x3172] = "pieupkiyeokkorean", - [0x3173] = "pieuptikeutkorean", - [0x3174] = "pieupsioskiyeokkorean", - [0x3175] = "pieupsiostikeutkorean", - [0x3176] = "pieupcieuckorean", - [0x3177] = "pieupthieuthkorean", - [0x3178] = "kapyeounpieupkorean", - [0x3179] = "kapyeounssangpieupkorean", - [0x317A] = "sioskiyeokkorean", - [0x317B] = "siosnieunkorean", - [0x317C] = "siostikeutkorean", - [0x317D] = "siospieupkorean", - [0x317E] = "sioscieuckorean", - [0x317F] = "pansioskorean", - [0x3180] = "ssangieungkorean", - [0x3181] = "yesieungkorean", - [0x3182] = "yesieungsioskorean", - [0x3183] = "yesieungpansioskorean", - [0x3184] = "kapyeounphieuphkorean", - [0x3185] = "ssanghieuhkorean", - [0x3186] = "yeorinhieuhkorean", - [0x3187] = "yoyakorean", - [0x3188] = "yoyaekorean", - [0x3189] = "yoikorean", - [0x318A] = "yuyeokorean", - [0x318B] = "yuyekorean", - [0x318C] = "yuikorean", - [0x318D] = "araeakorean", - [0x318E] = "araeaekorean", - [0x3200] = "kiyeokparenkorean", - [0x3201] = "nieunparenkorean", - [0x3202] = "tikeutparenkorean", - [0x3203] = "rieulparenkorean", - [0x3204] = "mieumparenkorean", - [0x3205] = "pieupparenkorean", - [0x3206] = "siosparenkorean", - [0x3207] = "ieungparenkorean", - [0x3208] = "cieucparenkorean", - [0x3209] = "chieuchparenkorean", - [0x320A] = "khieukhparenkorean", - [0x320B] = "thieuthparenkorean", - [0x320C] = "phieuphparenkorean", - [0x320D] = "hieuhparenkorean", - [0x320E] = "kiyeokaparenkorean", - [0x320F] = "nieunaparenkorean", - [0x3210] = "tikeutaparenkorean", - [0x3211] = "rieulaparenkorean", - [0x3212] = "mieumaparenkorean", - [0x3213] = "pieupaparenkorean", - [0x3214] = "siosaparenkorean", - [0x3215] = "ieungaparenkorean", - [0x3216] = "cieucaparenkorean", - [0x3217] = "chieuchaparenkorean", - [0x3218] = "khieukhaparenkorean", - [0x3219] = "thieuthaparenkorean", - [0x321A] = "phieuphaparenkorean", - [0x321B] = "hieuhaparenkorean", - [0x321C] = "cieucuparenkorean", - [0x3220] = "oneideographicparen", - [0x3221] = "twoideographicparen", - [0x3222] = "threeideographicparen", - [0x3223] = "fourideographicparen", - [0x3224] = "fiveideographicparen", - [0x3225] = "sixideographicparen", - [0x3226] = "sevenideographicparen", - [0x3227] = "eightideographicparen", - [0x3228] = "nineideographicparen", - [0x3229] = "tenideographicparen", - [0x322A] = "ideographicmoonparen", - [0x322B] = "ideographicfireparen", - [0x322C] = "ideographicwaterparen", - [0x322D] = "ideographicwoodparen", - [0x322E] = "ideographicmetalparen", - [0x322F] = "ideographicearthparen", - [0x3230] = "ideographicsunparen", - [0x3231] = "ideographicstockparen", - [0x3232] = "ideographichaveparen", - [0x3233] = "ideographicsocietyparen", - [0x3234] = "ideographicnameparen", - [0x3235] = "ideographicspecialparen", - [0x3236] = "ideographicfinancialparen", - [0x3237] = "ideographiccongratulationparen", - [0x3238] = "ideographiclaborparen", - [0x3239] = "ideographicrepresentparen", - [0x323A] = "ideographiccallparen", - [0x323B] = "ideographicstudyparen", - [0x323C] = "ideographicsuperviseparen", - [0x323D] = "ideographicenterpriseparen", - [0x323E] = "ideographicresourceparen", - [0x323F] = "ideographicallianceparen", - [0x3240] = "ideographicfestivalparen", - [0x3242] = "ideographicselfparen", - [0x3243] = "ideographicreachparen", - [0x3260] = "kiyeokcirclekorean", - [0x3261] = "nieuncirclekorean", - [0x3262] = "tikeutcirclekorean", - [0x3263] = "rieulcirclekorean", - [0x3264] = "mieumcirclekorean", - [0x3265] = "pieupcirclekorean", - [0x3266] = "sioscirclekorean", - [0x3267] = "ieungcirclekorean", - [0x3268] = "cieuccirclekorean", - [0x3269] = "chieuchcirclekorean", - [0x326A] = "khieukhcirclekorean", - [0x326B] = "thieuthcirclekorean", - [0x326C] = "phieuphcirclekorean", - [0x326D] = "hieuhcirclekorean", - [0x326E] = "kiyeokacirclekorean", - [0x326F] = "nieunacirclekorean", - [0x3270] = "tikeutacirclekorean", - [0x3271] = "rieulacirclekorean", - [0x3272] = "mieumacirclekorean", - [0x3273] = "pieupacirclekorean", - [0x3274] = "siosacirclekorean", - [0x3275] = "ieungacirclekorean", - [0x3276] = "cieucacirclekorean", - [0x3277] = "chieuchacirclekorean", - [0x3278] = "khieukhacirclekorean", - [0x3279] = "thieuthacirclekorean", - [0x327A] = "phieuphacirclekorean", - [0x327B] = "hieuhacirclekorean", - [0x327F] = "koreanstandardsymbol", - [0x328A] = "ideographmooncircle", - [0x328B] = "ideographfirecircle", - [0x328C] = "ideographwatercircle", - [0x328D] = "ideographwoodcircle", - [0x328E] = "ideographmetalcircle", - [0x328F] = "ideographearthcircle", - [0x3290] = "ideographsuncircle", - [0x3294] = "ideographnamecircle", - [0x3296] = "ideographicfinancialcircle", - [0x3298] = "ideographiclaborcircle", - [0x3299] = "ideographicsecretcircle", - [0x329D] = "ideographicexcellentcircle", - [0x329E] = "ideographicprintcircle", - [0x32A3] = "ideographiccorrectcircle", - [0x32A4] = "ideographichighcircle", - [0x32A5] = "ideographiccentrecircle", - [0x32A6] = "ideographiclowcircle", - [0x32A7] = "ideographicleftcircle", - [0x32A8] = "ideographicrightcircle", - [0x32A9] = "ideographicmedicinecircle", - [0x3300] = "apaatosquare", - [0x3303] = "aarusquare", - [0x3305] = "intisquare", - [0x330D] = "karoriisquare", - [0x3314] = "kirosquare", - [0x3315] = "kiroguramusquare", - [0x3316] = "kiromeetorusquare", - [0x3318] = "guramusquare", - [0x331E] = "kooposquare", - [0x3322] = "sentisquare", - [0x3323] = "sentosquare", - [0x3326] = "dorusquare", - [0x3327] = "tonsquare", - [0x332A] = "haitusquare", - [0x332B] = "paasentosquare", - [0x3331] = "birusquare", - [0x3333] = "huiitosquare", - [0x3336] = "hekutaarusquare", - [0x3339] = "herutusquare", - [0x333B] = "peezisquare", - [0x3342] = "hoonsquare", - [0x3347] = "mansyonsquare", - [0x3349] = "mirisquare", - [0x334A] = "miribaarusquare", - [0x334D] = "meetorusquare", - [0x334E] = "yaadosquare", - [0x3351] = "rittorusquare", - [0x3357] = "wattosquare", - [0x337B] = "heiseierasquare", - [0x337C] = "syouwaerasquare", - [0x337D] = "taisyouerasquare", - [0x337E] = "meizierasquare", - [0x337F] = "corporationsquare", - [0x3380] = "paampssquare", - [0x3381] = "nasquare", - [0x3382] = "muasquare", - [0x3383] = "masquare", - [0x3384] = "kasquare", - [0x3385] = "KBsquare", - [0x3386] = "MBsquare", - [0x3387] = "GBsquare", - [0x3388] = "calsquare", - [0x3389] = "kcalsquare", - [0x338A] = "pfsquare", - [0x338B] = "nfsquare", - [0x338C] = "mufsquare", - [0x338D] = "mugsquare", - [0x338E] = "squaremg", - [0x338F] = "squarekg", - [0x3390] = "Hzsquare", - [0x3391] = "khzsquare", - [0x3392] = "mhzsquare", - [0x3393] = "ghzsquare", - [0x3394] = "thzsquare", - [0x3395] = "mulsquare", - [0x3396] = "mlsquare", - [0x3397] = "dlsquare", - [0x3398] = "klsquare", - [0x3399] = "fmsquare", - [0x339A] = "nmsquare", - [0x339B] = "mumsquare", - [0x339C] = "squaremm", - [0x339D] = "squarecm", - [0x339E] = "squarekm", - [0x339F] = "mmsquaredsquare", - [0x33A0] = "cmsquaredsquare", - [0x33A1] = "squaremsquared", - [0x33A2] = "kmsquaredsquare", - [0x33A3] = "mmcubedsquare", - [0x33A4] = "cmcubedsquare", - [0x33A5] = "mcubedsquare", - [0x33A6] = "kmcubedsquare", - [0x33A7] = "moverssquare", - [0x33A8] = "moverssquaredsquare", - [0x33A9] = "pasquare", - [0x33AA] = "kpasquare", - [0x33AB] = "mpasquare", - [0x33AC] = "gpasquare", - [0x33AD] = "radsquare", - [0x33AE] = "radoverssquare", - [0x33AF] = "radoverssquaredsquare", - [0x33B0] = "pssquare", - [0x33B1] = "nssquare", - [0x33B2] = "mussquare", - [0x33B3] = "mssquare", - [0x33B4] = "pvsquare", - [0x33B5] = "nvsquare", - [0x33B6] = "muvsquare", - [0x33B7] = "mvsquare", - [0x33B8] = "kvsquare", - [0x33B9] = "mvmegasquare", - [0x33BA] = "pwsquare", - [0x33BB] = "nwsquare", - [0x33BC] = "muwsquare", - [0x33BD] = "mwsquare", - [0x33BE] = "kwsquare", - [0x33BF] = "mwmegasquare", - [0x33C0] = "kohmsquare", - [0x33C1] = "mohmsquare", - [0x33C2] = "amsquare", - [0x33C3] = "bqsquare", - [0x33C4] = "squarecc", - [0x33C5] = "cdsquare", - [0x33C6] = "coverkgsquare", - [0x33C7] = "cosquare", - [0x33C8] = "dbsquare", - [0x33C9] = "gysquare", - [0x33CA] = "hasquare", - [0x33CB] = "HPsquare", - [0x33CD] = "KKsquare", - [0x33CE] = "squarekmcapital", - [0x33CF] = "ktsquare", - [0x33D0] = "lmsquare", - [0x33D1] = "squareln", - [0x33D2] = "squarelog", - [0x33D3] = "lxsquare", - [0x33D4] = "mbsquare", - [0x33D5] = "squaremil", - [0x33D6] = "molsquare", - [0x33D8] = "pmsquare", - [0x33DB] = "srsquare", - [0x33DC] = "svsquare", - [0x33DD] = "wbsquare", - [0x5344] = "twentyhangzhou", - [0xF6BE] = "dotlessj", - [0xF6BF] = "LL", - [0xF6C0] = "ll", - [0xF6C3] = "commaaccent", - [0xF6C4] = "afii10063", - [0xF6C5] = "afii10064", - [0xF6C6] = "afii10192", - [0xF6C7] = "afii10831", - [0xF6C8] = "afii10832", - [0xF6C9] = "Acute", - [0xF6CA] = "Caron", - [0xF6CB] = "Dieresis", - [0xF6CC] = "DieresisAcute", - [0xF6CD] = "DieresisGrave", - [0xF6CE] = "Grave", - [0xF6CF] = "Hungarumlaut", - [0xF6D0] = "Macron", - [0xF6D1] = "cyrBreve", - [0xF6D2] = "cyrFlex", - [0xF6D3] = "dblGrave", - [0xF6D4] = "cyrbreve", - [0xF6D5] = "cyrflex", - [0xF6D6] = "dblgrave", - [0xF6D7] = "dieresisacute", - [0xF6D8] = "dieresisgrave", - [0xF6D9] = "copyrightserif", - [0xF6DA] = "registerserif", - [0xF6DB] = "trademarkserif", - [0xF6DC] = "onefitted", - [0xF6DD] = "rupiah", - [0xF6DE] = "threequartersemdash", - [0xF6DF] = "centinferior", - [0xF6E0] = "centsuperior", - [0xF6E1] = "commainferior", - [0xF6E2] = "commasuperior", - [0xF6E3] = "dollarinferior", - [0xF6E4] = "dollarsuperior", - [0xF6E5] = "hypheninferior", - [0xF6E6] = "hyphensuperior", - [0xF6E7] = "periodinferior", - [0xF6E8] = "periodsuperior", - [0xF6E9] = "asuperior", - [0xF6EA] = "bsuperior", - [0xF6EB] = "dsuperior", - [0xF6EC] = "esuperior", - [0xF6ED] = "isuperior", - [0xF6EE] = "lsuperior", - [0xF6EF] = "msuperior", - [0xF6F0] = "osuperior", - [0xF6F1] = "rsuperior", - [0xF6F2] = "ssuperior", - [0xF6F3] = "tsuperior", - [0xF6F4] = "Brevesmall", - [0xF6F5] = "Caronsmall", - [0xF6F6] = "Circumflexsmall", - [0xF6F7] = "Dotaccentsmall", - [0xF6F8] = "Hungarumlautsmall", - [0xF6F9] = "Lslashsmall", - [0xF6FA] = "OEsmall", - [0xF6FB] = "Ogoneksmall", - [0xF6FC] = "Ringsmall", - [0xF6FD] = "Scaronsmall", - [0xF6FE] = "Tildesmall", - [0xF6FF] = "Zcaronsmall", - [0xF721] = "exclamsmall", - [0xF724] = "dollaroldstyle", - [0xF726] = "ampersandsmall", - [0xF730] = "zerooldstyle", - [0xF731] = "oneoldstyle", - [0xF732] = "twooldstyle", - [0xF733] = "threeoldstyle", - [0xF734] = "fouroldstyle", - [0xF735] = "fiveoldstyle", - [0xF736] = "sixoldstyle", - [0xF737] = "sevenoldstyle", - [0xF738] = "eightoldstyle", - [0xF739] = "nineoldstyle", - [0xF73F] = "questionsmall", - [0xF760] = "Gravesmall", - [0xF761] = "Asmall", - [0xF762] = "Bsmall", - [0xF763] = "Csmall", - [0xF764] = "Dsmall", - [0xF765] = "Esmall", - [0xF766] = "Fsmall", - [0xF767] = "Gsmall", - [0xF768] = "Hsmall", - [0xF769] = "Ismall", - [0xF76A] = "Jsmall", - [0xF76B] = "Ksmall", - [0xF76C] = "Lsmall", - [0xF76D] = "Msmall", - [0xF76E] = "Nsmall", - [0xF76F] = "Osmall", - [0xF770] = "Psmall", - [0xF771] = "Qsmall", - [0xF772] = "Rsmall", - [0xF773] = "Ssmall", - [0xF774] = "Tsmall", - [0xF775] = "Usmall", - [0xF776] = "Vsmall", - [0xF777] = "Wsmall", - [0xF778] = "Xsmall", - [0xF779] = "Ysmall", - [0xF77A] = "Zsmall", - [0xF7A1] = "exclamdownsmall", - [0xF7A2] = "centoldstyle", - [0xF7A8] = "Dieresissmall", - [0xF7AF] = "Macronsmall", - [0xF7B4] = "Acutesmall", - [0xF7B8] = "Cedillasmall", - [0xF7BF] = "questiondownsmall", - [0xF7E0] = "Agravesmall", - [0xF7E1] = "Aacutesmall", - [0xF7E2] = "Acircumflexsmall", - [0xF7E3] = "Atildesmall", - [0xF7E4] = "Adieresissmall", - [0xF7E5] = "Aringsmall", - [0xF7E6] = "AEsmall", - [0xF7E7] = "Ccedillasmall", - [0xF7E8] = "Egravesmall", - [0xF7E9] = "Eacutesmall", - [0xF7EA] = "Ecircumflexsmall", - [0xF7EB] = "Edieresissmall", - [0xF7EC] = "Igravesmall", - [0xF7ED] = "Iacutesmall", - [0xF7EE] = "Icircumflexsmall", - [0xF7EF] = "Idieresissmall", - [0xF7F0] = "Ethsmall", - [0xF7F1] = "Ntildesmall", - [0xF7F2] = "Ogravesmall", - [0xF7F3] = "Oacutesmall", - [0xF7F4] = "Ocircumflexsmall", - [0xF7F5] = "Otildesmall", - [0xF7F6] = "Odieresissmall", - [0xF7F8] = "Oslashsmall", - [0xF7F9] = "Ugravesmall", - [0xF7FA] = "Uacutesmall", - [0xF7FB] = "Ucircumflexsmall", - [0xF7FC] = "Udieresissmall", - [0xF7FD] = "Yacutesmall", - [0xF7FE] = "Thornsmall", - [0xF7FF] = "Ydieresissmall", - [0xF884] = "maihanakatleftthai", - [0xF885] = "saraileftthai", - [0xF886] = "saraiileftthai", - [0xF887] = "saraueleftthai", - [0xF888] = "saraueeleftthai", - [0xF889] = "maitaikhuleftthai", - [0xF88A] = "maiekupperleftthai", - [0xF88B] = "maieklowrightthai", - [0xF88C] = "maieklowleftthai", - [0xF88D] = "maithoupperleftthai", - [0xF88E] = "maitholowrightthai", - [0xF88F] = "maitholowleftthai", - [0xF890] = "maitriupperleftthai", - [0xF891] = "maitrilowrightthai", - [0xF892] = "maitrilowleftthai", - [0xF893] = "maichattawaupperleftthai", - [0xF894] = "maichattawalowrightthai", - [0xF895] = "maichattawalowleftthai", - [0xF896] = "thanthakhatupperleftthai", - [0xF897] = "thanthakhatlowrightthai", - [0xF898] = "thanthakhatlowleftthai", - [0xF899] = "nikhahitleftthai", - [0xF8E5] = "radicalex", - [0xF8E6] = "arrowvertex", - [0xF8E7] = "arrowhorizex", - [0xF8E8] = "registersans", - [0xF8E9] = "copyrightsans", - [0xF8EA] = "trademarksans", - [0xF8EB] = "parenlefttp", - [0xF8EC] = "parenleftex", - [0xF8ED] = "parenleftbt", - [0xF8EE] = "bracketlefttp", - [0xF8EF] = "bracketleftex", - [0xF8F0] = "bracketleftbt", - [0xF8F1] = "bracelefttp", - [0xF8F2] = "braceleftmid", - [0xF8F3] = "braceleftbt", - [0xF8F4] = "braceex", - [0xF8F5] = "integralex", - [0xF8F6] = "parenrighttp", - [0xF8F7] = "parenrightex", - [0xF8F8] = "parenrightbt", - [0xF8F9] = "bracketrighttp", - [0xF8FA] = "bracketrightex", - [0xF8FB] = "bracketrightbt", - [0xF8FC] = "bracerighttp", - [0xF8FD] = "bracerightmid", - [0xF8FE] = "bracerightbt", - [0xF8FF] = "apple", - [0xFB00] = "ff", - [0xFB01] = "fi", - [0xFB02] = "fl", - [0xFB03] = "ffi", - [0xFB04] = "ffl", - [0xFB1F] = "yodyodpatahhebrew", - [0xFB20] = "ayinaltonehebrew", - [0xFB2A] = "shinshindothebrew", - [0xFB2B] = "shinsindothebrew", - [0xFB2C] = "shindageshshindothebrew", - [0xFB2D] = "shindageshsindothebrew", - [0xFB2E] = "alefpatahhebrew", - [0xFB2F] = "alefqamatshebrew", - [0xFB30] = "alefdageshhebrew", - [0xFB31] = "betdageshhebrew", - [0xFB32] = "gimeldageshhebrew", - [0xFB33] = "daletdageshhebrew", - [0xFB34] = "hedageshhebrew", - [0xFB35] = "vavdageshhebrew", - [0xFB36] = "zayindageshhebrew", - [0xFB38] = "tetdageshhebrew", - [0xFB39] = "yoddageshhebrew", - [0xFB3A] = "finalkafdageshhebrew", - [0xFB3B] = "kafdageshhebrew", - [0xFB3C] = "lameddageshhebrew", - [0xFB3E] = "memdageshhebrew", - [0xFB40] = "nundageshhebrew", - [0xFB41] = "samekhdageshhebrew", - [0xFB43] = "pefinaldageshhebrew", - [0xFB44] = "pedageshhebrew", - [0xFB46] = "tsadidageshhebrew", - [0xFB47] = "qofdageshhebrew", - [0xFB48] = "reshdageshhebrew", - [0xFB49] = "shindageshhebrew", - [0xFB4A] = "tavdageshhebrew", - [0xFB4B] = "vavholamhebrew", - [0xFB4C] = "betrafehebrew", - [0xFB4D] = "kafrafehebrew", - [0xFB4E] = "perafehebrew", - [0xFB4F] = "aleflamedhebrew", - [0xFB57] = "pehfinalarabic", - [0xFB58] = "pehinitialarabic", - [0xFB59] = "pehmedialarabic", - [0xFB67] = "ttehfinalarabic", - [0xFB68] = "ttehinitialarabic", - [0xFB69] = "ttehmedialarabic", - [0xFB6B] = "vehfinalarabic", - [0xFB6C] = "vehinitialarabic", - [0xFB6D] = "vehmedialarabic", - [0xFB7B] = "tchehfinalarabic", - [0xFB7C] = "tchehmeeminitialarabic", - [0xFB7D] = "tchehmedialarabic", - [0xFB89] = "ddalfinalarabic", - [0xFB8B] = "jehfinalarabic", - [0xFB8D] = "rrehfinalarabic", - [0xFB93] = "gaffinalarabic", - [0xFB94] = "gafinitialarabic", - [0xFB95] = "gafmedialarabic", - [0xFB9F] = "noonghunnafinalarabic", - [0xFBA4] = "hehhamzaaboveisolatedarabic", - [0xFBA5] = "hehhamzaabovefinalarabic", - [0xFBA7] = "hehfinalaltonearabic", - [0xFBA8] = "hehinitialaltonearabic", - [0xFBA9] = "hehmedialaltonearabic", - [0xFBAF] = "yehbarreefinalarabic", - [0xFC08] = "behmeemisolatedarabic", - [0xFC0B] = "tehjeemisolatedarabic", - [0xFC0C] = "tehhahisolatedarabic", - [0xFC0E] = "tehmeemisolatedarabic", - [0xFC48] = "meemmeemisolatedarabic", - [0xFC4B] = "noonjeemisolatedarabic", - [0xFC4E] = "noonmeemisolatedarabic", - [0xFC58] = "yehmeemisolatedarabic", - [0xFC5E] = "shaddadammatanarabic", - [0xFC5F] = "shaddakasratanarabic", - [0xFC60] = "shaddafathaarabic", - [0xFC61] = "shaddadammaarabic", - [0xFC62] = "shaddakasraarabic", - [0xFC6D] = "behnoonfinalarabic", - [0xFC73] = "tehnoonfinalarabic", - [0xFC8D] = "noonnoonfinalarabic", - [0xFC94] = "yehnoonfinalarabic", - [0xFC9F] = "behmeeminitialarabic", - [0xFCA1] = "tehjeeminitialarabic", - [0xFCA2] = "tehhahinitialarabic", - [0xFCA4] = "tehmeeminitialarabic", - [0xFCC9] = "lamjeeminitialarabic", - [0xFCCA] = "lamhahinitialarabic", - [0xFCCB] = "lamkhahinitialarabic", - [0xFCCC] = "lammeeminitialarabic", - [0xFCD1] = "meemmeeminitialarabic", - [0xFCD2] = "noonjeeminitialarabic", - [0xFCD5] = "noonmeeminitialarabic", - [0xFCDD] = "yehmeeminitialarabic", - [0xFD3E] = "parenleftaltonearabic", - [0xFD3F] = "parenrightaltonearabic", - [0xFD88] = "lammeemhahinitialarabic", - [0xFDF2] = "lamlamhehisolatedarabic", - [0xFDFA] = "sallallahoualayhewasallamarabic", - [0xFE30] = "twodotleadervertical", - [0xFE31] = "emdashvertical", - [0xFE32] = "endashvertical", - [0xFE33] = "underscorevertical", - [0xFE34] = "wavyunderscorevertical", - [0xFE35] = "parenleftvertical", - [0xFE36] = "parenrightvertical", - [0xFE37] = "braceleftvertical", - [0xFE38] = "bracerightvertical", - [0xFE39] = "tortoiseshellbracketleftvertical", - [0xFE3A] = "tortoiseshellbracketrightvertical", - [0xFE3B] = "blacklenticularbracketleftvertical", - [0xFE3C] = "blacklenticularbracketrightvertical", - [0xFE3D] = "dblanglebracketleftvertical", - [0xFE3E] = "dblanglebracketrightvertical", - [0xFE3F] = "anglebracketleftvertical", - [0xFE40] = "anglebracketrightvertical", - [0xFE41] = "cornerbracketleftvertical", - [0xFE42] = "cornerbracketrightvertical", - [0xFE43] = "whitecornerbracketleftvertical", - [0xFE44] = "whitecornerbracketrightvertical", - [0xFE49] = "overlinedashed", - [0xFE4A] = "overlinecenterline", - [0xFE4B] = "overlinewavy", - [0xFE4C] = "overlinedblwavy", - [0xFE4D] = "lowlinedashed", - [0xFE4E] = "lowlinecenterline", - [0xFE4F] = "underscorewavy", - [0xFE50] = "commasmall", - [0xFE52] = "periodsmall", - [0xFE54] = "semicolonsmall", - [0xFE55] = "colonsmall", - [0xFE59] = "parenleftsmall", - [0xFE5A] = "parenrightsmall", - [0xFE5B] = "braceleftsmall", - [0xFE5C] = "bracerightsmall", - [0xFE5D] = "tortoiseshellbracketleftsmall", - [0xFE5E] = "tortoiseshellbracketrightsmall", - [0xFE5F] = "numbersignsmall", - [0xFE61] = "asterisksmall", - [0xFE62] = "plussmall", - [0xFE63] = "hyphensmall", - [0xFE64] = "lesssmall", - [0xFE65] = "greatersmall", - [0xFE66] = "equalsmall", - [0xFE69] = "dollarsmall", - [0xFE6A] = "percentsmall", - [0xFE6B] = "atsmall", - [0xFE82] = "alefmaddaabovefinalarabic", - [0xFE84] = "alefhamzaabovefinalarabic", - [0xFE86] = "wawhamzaabovefinalarabic", - [0xFE88] = "alefhamzabelowfinalarabic", - [0xFE8A] = "yehhamzaabovefinalarabic", - [0xFE8B] = "yehhamzaaboveinitialarabic", - [0xFE8C] = "yehhamzaabovemedialarabic", - [0xFE8E] = "aleffinalarabic", - [0xFE90] = "behfinalarabic", - [0xFE91] = "behinitialarabic", - [0xFE92] = "behmedialarabic", - [0xFE94] = "tehmarbutafinalarabic", - [0xFE96] = "tehfinalarabic", - [0xFE97] = "tehinitialarabic", - [0xFE98] = "tehmedialarabic", - [0xFE9A] = "thehfinalarabic", - [0xFE9B] = "thehinitialarabic", - [0xFE9C] = "thehmedialarabic", - [0xFE9E] = "jeemfinalarabic", - [0xFE9F] = "jeeminitialarabic", - [0xFEA0] = "jeemmedialarabic", - [0xFEA2] = "hahfinalarabic", - [0xFEA3] = "hahinitialarabic", - [0xFEA4] = "hahmedialarabic", - [0xFEA6] = "khahfinalarabic", - [0xFEA7] = "khahinitialarabic", - [0xFEA8] = "khahmedialarabic", - [0xFEAA] = "dalfinalarabic", - [0xFEAC] = "thalfinalarabic", - [0xFEAE] = "rehfinalarabic", - [0xFEB0] = "zainfinalarabic", - [0xFEB2] = "seenfinalarabic", - [0xFEB3] = "seeninitialarabic", - [0xFEB4] = "seenmedialarabic", - [0xFEB6] = "sheenfinalarabic", - [0xFEB7] = "sheeninitialarabic", - [0xFEB8] = "sheenmedialarabic", - [0xFEBA] = "sadfinalarabic", - [0xFEBB] = "sadinitialarabic", - [0xFEBC] = "sadmedialarabic", - [0xFEBE] = "dadfinalarabic", - [0xFEBF] = "dadinitialarabic", - [0xFEC0] = "dadmedialarabic", - [0xFEC2] = "tahfinalarabic", - [0xFEC3] = "tahinitialarabic", - [0xFEC4] = "tahmedialarabic", - [0xFEC6] = "zahfinalarabic", - [0xFEC7] = "zahinitialarabic", - [0xFEC8] = "zahmedialarabic", - [0xFECA] = "ainfinalarabic", - [0xFECB] = "aininitialarabic", - [0xFECC] = "ainmedialarabic", - [0xFECE] = "ghainfinalarabic", - [0xFECF] = "ghaininitialarabic", - [0xFED0] = "ghainmedialarabic", - [0xFED2] = "fehfinalarabic", - [0xFED3] = "fehinitialarabic", - [0xFED4] = "fehmedialarabic", - [0xFED6] = "qaffinalarabic", - [0xFED7] = "qafinitialarabic", - [0xFED8] = "qafmedialarabic", - [0xFEDA] = "kaffinalarabic", - [0xFEDB] = "kafinitialarabic", - [0xFEDC] = "kafmedialarabic", - [0xFEDE] = "lamfinalarabic", - [0xFEDF] = "lammeemkhahinitialarabic", - [0xFEE0] = "lammedialarabic", - [0xFEE2] = "meemfinalarabic", - [0xFEE3] = "meeminitialarabic", - [0xFEE4] = "meemmedialarabic", - [0xFEE6] = "noonfinalarabic", - [0xFEE7] = "nooninitialarabic", - [0xFEE8] = "noonmedialarabic", - [0xFEEA] = "hehfinalarabic", - [0xFEEB] = "hehinitialarabic", - [0xFEEC] = "hehmedialarabic", - [0xFEEE] = "wawfinalarabic", - [0xFEF0] = "alefmaksurafinalarabic", - [0xFEF2] = "yehfinalarabic", - [0xFEF3] = "yehinitialarabic", - [0xFEF4] = "yehmedialarabic", - [0xFEF5] = "lamalefmaddaaboveisolatedarabic", - [0xFEF6] = "lamalefmaddaabovefinalarabic", - [0xFEF7] = "lamalefhamzaaboveisolatedarabic", - [0xFEF8] = "lamalefhamzaabovefinalarabic", - [0xFEF9] = "lamalefhamzabelowisolatedarabic", - [0xFEFA] = "lamalefhamzabelowfinalarabic", - [0xFEFB] = "lamalefisolatedarabic", - [0xFEFC] = "lamaleffinalarabic", - [0xFEFF] = "zerowidthjoiner", - [0xFF01] = "exclammonospace", - [0xFF02] = "quotedblmonospace", - [0xFF03] = "numbersignmonospace", - [0xFF04] = "dollarmonospace", - [0xFF05] = "percentmonospace", - [0xFF06] = "ampersandmonospace", - [0xFF07] = "quotesinglemonospace", - [0xFF08] = "parenleftmonospace", - [0xFF09] = "parenrightmonospace", - [0xFF0A] = "asteriskmonospace", - [0xFF0B] = "plusmonospace", - [0xFF0C] = "commamonospace", - [0xFF0D] = "hyphenmonospace", - [0xFF0E] = "periodmonospace", - [0xFF0F] = "slashmonospace", - [0xFF10] = "zeromonospace", - [0xFF11] = "onemonospace", - [0xFF12] = "twomonospace", - [0xFF13] = "threemonospace", - [0xFF14] = "fourmonospace", - [0xFF15] = "fivemonospace", - [0xFF16] = "sixmonospace", - [0xFF17] = "sevenmonospace", - [0xFF18] = "eightmonospace", - [0xFF19] = "ninemonospace", - [0xFF1A] = "colonmonospace", - [0xFF1B] = "semicolonmonospace", - [0xFF1C] = "lessmonospace", - [0xFF1D] = "equalmonospace", - [0xFF1E] = "greatermonospace", - [0xFF1F] = "questionmonospace", - [0xFF20] = "atmonospace", - [0xFF21] = "Amonospace", - [0xFF22] = "Bmonospace", - [0xFF23] = "Cmonospace", - [0xFF24] = "Dmonospace", - [0xFF25] = "Emonospace", - [0xFF26] = "Fmonospace", - [0xFF27] = "Gmonospace", - [0xFF28] = "Hmonospace", - [0xFF29] = "Imonospace", - [0xFF2A] = "Jmonospace", - [0xFF2B] = "Kmonospace", - [0xFF2C] = "Lmonospace", - [0xFF2D] = "Mmonospace", - [0xFF2E] = "Nmonospace", - [0xFF2F] = "Omonospace", - [0xFF30] = "Pmonospace", - [0xFF31] = "Qmonospace", - [0xFF32] = "Rmonospace", - [0xFF33] = "Smonospace", - [0xFF34] = "Tmonospace", - [0xFF35] = "Umonospace", - [0xFF36] = "Vmonospace", - [0xFF37] = "Wmonospace", - [0xFF38] = "Xmonospace", - [0xFF39] = "Ymonospace", - [0xFF3A] = "Zmonospace", - [0xFF3B] = "bracketleftmonospace", - [0xFF3C] = "backslashmonospace", - [0xFF3D] = "bracketrightmonospace", - [0xFF3E] = "asciicircummonospace", - [0xFF3F] = "underscoremonospace", - [0xFF40] = "gravemonospace", - [0xFF41] = "amonospace", - [0xFF42] = "bmonospace", - [0xFF43] = "cmonospace", - [0xFF44] = "dmonospace", - [0xFF45] = "emonospace", - [0xFF46] = "fmonospace", - [0xFF47] = "gmonospace", - [0xFF48] = "hmonospace", - [0xFF49] = "imonospace", - [0xFF4A] = "jmonospace", - [0xFF4B] = "kmonospace", - [0xFF4C] = "lmonospace", - [0xFF4D] = "mmonospace", - [0xFF4E] = "nmonospace", - [0xFF4F] = "omonospace", - [0xFF50] = "pmonospace", - [0xFF51] = "qmonospace", - [0xFF52] = "rmonospace", - [0xFF53] = "smonospace", - [0xFF54] = "tmonospace", - [0xFF55] = "umonospace", - [0xFF56] = "vmonospace", - [0xFF57] = "wmonospace", - [0xFF58] = "xmonospace", - [0xFF59] = "ymonospace", - [0xFF5A] = "zmonospace", - [0xFF5B] = "braceleftmonospace", - [0xFF5C] = "barmonospace", - [0xFF5D] = "bracerightmonospace", - [0xFF5E] = "asciitildemonospace", - [0xFF61] = "periodhalfwidth", - [0xFF62] = "cornerbracketlefthalfwidth", - [0xFF63] = "cornerbracketrighthalfwidth", - [0xFF64] = "ideographiccommaleft", - [0xFF65] = "middledotkatakanahalfwidth", - [0xFF66] = "wokatakanahalfwidth", - [0xFF67] = "asmallkatakanahalfwidth", - [0xFF68] = "ismallkatakanahalfwidth", - [0xFF69] = "usmallkatakanahalfwidth", - [0xFF6A] = "esmallkatakanahalfwidth", - [0xFF6B] = "osmallkatakanahalfwidth", - [0xFF6C] = "yasmallkatakanahalfwidth", - [0xFF6D] = "yusmallkatakanahalfwidth", - [0xFF6E] = "yosmallkatakanahalfwidth", - [0xFF6F] = "tusmallkatakanahalfwidth", - [0xFF70] = "katahiraprolongmarkhalfwidth", - [0xFF71] = "akatakanahalfwidth", - [0xFF72] = "ikatakanahalfwidth", - [0xFF73] = "ukatakanahalfwidth", - [0xFF74] = "ekatakanahalfwidth", - [0xFF75] = "okatakanahalfwidth", - [0xFF76] = "kakatakanahalfwidth", - [0xFF77] = "kikatakanahalfwidth", - [0xFF78] = "kukatakanahalfwidth", - [0xFF79] = "kekatakanahalfwidth", - [0xFF7A] = "kokatakanahalfwidth", - [0xFF7B] = "sakatakanahalfwidth", - [0xFF7C] = "sikatakanahalfwidth", - [0xFF7D] = "sukatakanahalfwidth", - [0xFF7E] = "sekatakanahalfwidth", - [0xFF7F] = "sokatakanahalfwidth", - [0xFF80] = "takatakanahalfwidth", - [0xFF81] = "tikatakanahalfwidth", - [0xFF82] = "tukatakanahalfwidth", - [0xFF83] = "tekatakanahalfwidth", - [0xFF84] = "tokatakanahalfwidth", - [0xFF85] = "nakatakanahalfwidth", - [0xFF86] = "nikatakanahalfwidth", - [0xFF87] = "nukatakanahalfwidth", - [0xFF88] = "nekatakanahalfwidth", - [0xFF89] = "nokatakanahalfwidth", - [0xFF8A] = "hakatakanahalfwidth", - [0xFF8B] = "hikatakanahalfwidth", - [0xFF8C] = "hukatakanahalfwidth", - [0xFF8D] = "hekatakanahalfwidth", - [0xFF8E] = "hokatakanahalfwidth", - [0xFF8F] = "makatakanahalfwidth", - [0xFF90] = "mikatakanahalfwidth", - [0xFF91] = "mukatakanahalfwidth", - [0xFF92] = "mekatakanahalfwidth", - [0xFF93] = "mokatakanahalfwidth", - [0xFF94] = "yakatakanahalfwidth", - [0xFF95] = "yukatakanahalfwidth", - [0xFF96] = "yokatakanahalfwidth", - [0xFF97] = "rakatakanahalfwidth", - [0xFF98] = "rikatakanahalfwidth", - [0xFF99] = "rukatakanahalfwidth", - [0xFF9A] = "rekatakanahalfwidth", - [0xFF9B] = "rokatakanahalfwidth", - [0xFF9C] = "wakatakanahalfwidth", - [0xFF9D] = "nkatakanahalfwidth", - [0xFF9E] = "voicedmarkkanahalfwidth", - [0xFF9F] = "semivoicedmarkkanahalfwidth", - [0xFFE0] = "centmonospace", - [0xFFE1] = "sterlingmonospace", - [0xFFE3] = "macronmonospace", - [0xFFE5] = "yenmonospace", - [0xFFE6] = "wonmonospace", -} - -agl.unicodes = allocate(table.swapped(agl.names)) -- to unicode diff --git a/otfl-font-cid.lua b/otfl-font-cid.lua index 1d03bca..a9bd3c5 100644 --- a/otfl-font-cid.lua +++ b/otfl-font-cid.lua @@ -12,7 +12,7 @@ local lpegmatch = lpeg.match local trace_loading = false trackers.register("otf.loading", function(v) trace_loading = v end) -local report_otf = logs.new("load otf") +local report_otf = logs.reporter("fonts","otf loading") local fonts = fonts diff --git a/otfl-font-def.lua b/otfl-font-def.lua index e87fee4..3a09b66 100644 --- a/otfl-font-def.lua +++ b/otfl-font-def.lua @@ -6,7 +6,8 @@ if not modules then modules = { } end modules ['font-def'] = { license = "see context related readme files" } -local format, concat, gmatch, match, find, lower = string.format, table.concat, string.gmatch, string.match, string.find, string.lower +local concat = table.concat +local format, gmatch, match, find, lower, gsub = string.format, string.gmatch, string.match, string.find, string.lower, string.gsub local tostring, next = tostring, next local lpegmatch = lpeg.match @@ -18,8 +19,7 @@ local directive_embedall = false directives.register("fonts.embedall", function trackers.register("fonts.loading", "fonts.defining", "otf.loading", "afm.loading", "tfm.loading") trackers.register("fonts.all", "fonts.*", "otf.*", "afm.*", "tfm.*") -local report_define = logs.new("define fonts") -local report_afm = logs.new("load afm") +local report_defining = logs.reporter("fonts","defining") --[[ldx-- <p>Here we deal with defining fonts. We do so by intercepting the @@ -29,16 +29,14 @@ default loader that only handles <l n='tfm'/>.</p> local fonts = fonts local tfm = fonts.tfm local vf = fonts.vf -local fontcsnames = fonts.csnames fonts.used = allocate() tfm.readers = tfm.readers or { } tfm.fonts = allocate() -tfm.internalized = allocate() -- internal tex numbers local readers = tfm.readers -local sequence = allocate { 'otf', 'ttf', 'afm', 'tfm' } +local sequence = allocate { 'otf', 'ttf', 'afm', 'tfm', 'lua' } readers.sequence = sequence tfm.version = 1.01 @@ -125,15 +123,18 @@ end definers.getspecification = getspecification -function definers.registersplit(symbol,action) +function definers.registersplit(symbol,action,verbosename) addspecifier(symbol) variants[symbol] = action + if verbosename then + variants[verbosename] = action + end end function definers.makespecification(specification, lookup, name, sub, method, detail, size) size = size or 655360 if trace_defining then - report_define("%s -> lookup: %s, name: %s, sub: %s, method: %s, detail: %s", + report_defining("%s -> lookup: %s, name: %s, sub: %s, method: %s, detail: %s", specification, (lookup ~= "" and lookup) or "[file]", (name ~= "" and name) or "-", (sub ~= "" and sub) or "-", (method ~= "" and method) or "-", (detail ~= "" and detail) or "-") end @@ -191,10 +192,10 @@ function tfm.hashfeatures(specification) t[tn] = v .. '=' .. tostring(vtf[v]) end end - --~ if specification.mathsize then - --~ tn = tn + 1 - --~ t[tn] = "mathsize=" .. specification.mathsize - --~ end + -- if specification.mathsize then + -- tn = tn + 1 + -- t[tn] = "mathsize=" .. specification.mathsize + -- end if tn > 0 then return concat(t,"+") end @@ -222,21 +223,21 @@ function tfm.hashinstance(specification,force) size = math.round(tfm.scaled(size,fonts.designsizes[hash])) specification.size = size end ---~ local mathsize = specification.mathsize or 0 ---~ if mathsize > 0 then ---~ local textsize = specification.textsize ---~ if fallbacks then ---~ return hash .. ' @ ' .. tostring(size) .. ' [ ' .. tostring(mathsize) .. ' : ' .. tostring(textsize) .. ' ] @ ' .. fallbacks ---~ else ---~ return hash .. ' @ ' .. tostring(size) .. ' [ ' .. tostring(mathsize) .. ' : ' .. tostring(textsize) .. ' ]' ---~ end ---~ else + -- local mathsize = specification.mathsize or 0 + -- if mathsize > 0 then + -- local textsize = specification.textsize + -- if fallbacks then + -- return hash .. ' @ ' .. tostring(size) .. ' [ ' .. tostring(mathsize) .. ' : ' .. tostring(textsize) .. ' ] @ ' .. fallbacks + -- else + -- return hash .. ' @ ' .. tostring(size) .. ' [ ' .. tostring(mathsize) .. ' : ' .. tostring(textsize) .. ' ]' + -- end + -- else if fallbacks then return hash .. ' @ ' .. tostring(size) .. ' @ ' .. fallbacks else return hash .. ' @ ' .. tostring(size) end ---~ end + -- end end --[[ldx-- @@ -259,7 +260,7 @@ end function resolvers.name(specification) local resolve = fonts.names.resolve if resolve then - local resolved, sub = fonts.names.resolve(specification) + local resolved, sub = fonts.names.resolve(specification.name,specification.sub) specification.resolved, specification.sub = resolved, sub if resolved then local suffix = file.suffix(resolved) @@ -278,7 +279,7 @@ end function resolvers.spec(specification) local resolvespec = fonts.names.resolvespec if resolvespec then - specification.resolved, specification.sub = fonts.names.resolvespec(specification) + specification.resolved, specification.sub = fonts.names.resolvespec(specification.name,specification.sub) if specification.resolved then specification.forced = file.extname(specification.resolved) specification.name = file.removesuffix(specification.resolved) @@ -338,16 +339,17 @@ function tfm.read(specification) if not tfmtable then local forced = specification.forced or "" if forced ~= "" then - tfmtable = readers[lower(forced)](specification) + local reader = readers[lower(forced)] + tfmtable = reader and reader(specification) if not tfmtable then - report_define("forced type %s of %s not found",forced,specification.name) + report_defining("forced type %s of %s not found",forced,specification.name) end else for s=1,#sequence do -- reader sequence local reader = sequence[s] if readers[reader] then -- not really needed if trace_defining then - report_define("trying (reader sequence driven) type %s for %s with file %s",reader,specification.name,specification.filename or "unknown") + report_defining("trying (reader sequence driven) type %s for %s with file %s",reader,specification.name,specification.filename or "unknown") end tfmtable = readers[reader](specification) if tfmtable then @@ -366,13 +368,26 @@ function tfm.read(specification) else tfmtable.embedding = "subset" end + -- fonts.goodies.postprocessors.apply(tfmdata) -- only here + local postprocessors = tfmtable.postprocessors + if postprocessors then + for i=1,#postprocessors do + local extrahash = postprocessors[i](tfmtable) -- after scaling etc + if type(extrahash) == "string" and extrahash ~= "" then + -- e.g. a reencoding needs this + extrahash = gsub(lower(extrahash),"[^a-z]","-") + tfmtable.fullname = format("%s-%s",tfmtable.fullname,extrahash) + end + end + end + -- tfm.fonts[hash] = tfmtable fonts.designsizes[specification.hash] = tfmtable.designsize -- we only know this for sure after loading once --~ tfmtable.mode = specification.features.normal.mode or "base" end end if not tfmtable then - report_define("font with name %s is not found",specification.name) + report_defining("font with asked name '%s' is not found using lookup '%s'",specification.name,specification.lookup) end return tfmtable end @@ -391,153 +406,20 @@ function tfm.readanddefine(name,size) -- no id local hash = tfm.hashinstance(specification) local id = definers.registered(hash) if not id then - local fontdata = tfm.read(specification) - if fontdata then - fontdata.hash = hash - id = font.define(fontdata) - definers.register(fontdata,id) - tfm.cleanuptable(fontdata) + local tfmdata = tfm.read(specification) + if tfmdata then + tfmdata.hash = hash + id = font.define(tfmdata) + definers.register(tfmdata,id) + tfm.cleanuptable(tfmdata) else id = 0 -- signal end end - return fonts.ids[id], id + return fonts.identifiers[id], id end --[[ldx-- -<p>Next follow the readers. This code was written while <l n='luatex'/> -evolved. Each one has its own way of dealing with its format.</p> ---ldx]]-- - -local function check_tfm(specification,fullname) - -- ofm directive blocks local path search unless set; btw, in context we - -- don't support ofm files anyway as this format is obsolete - local foundname = findbinfile(fullname, 'tfm') or "" -- just to be sure - if foundname == "" then - foundname = findbinfile(fullname, 'ofm') or "" -- bonus for usage outside context - end - if foundname == "" then - foundname = fonts.names.getfilename(fullname,"tfm") - end - if foundname ~= "" then - specification.filename, specification.format = foundname, "ofm" - return tfm.read_from_tfm(specification) - end -end - -local function check_afm(specification,fullname) - local foundname = findbinfile(fullname, 'afm') or "" -- just to be sure - if foundname == "" then - foundname = fonts.names.getfilename(fullname,"afm") - end - if foundname == "" and tfm.autoprefixedafm then - local encoding, shortname = match(fullname,"^(.-)%-(.*)$") -- context: encoding-name.* - if encoding and shortname and fonts.enc.known[encoding] then - shortname = findbinfile(shortname,'afm') or "" -- just to be sure - if shortname ~= "" then - foundname = shortname - if trace_loading then - report_afm("stripping encoding prefix from filename %s",afmname) - end - end - end - end - if foundname ~= "" then - specification.filename, specification.format = foundname, "afm" - return tfm.read_from_afm(specification) - end -end - -function readers.tfm(specification) - local fullname, tfmtable = specification.filename or "", nil - if fullname == "" then - local forced = specification.forced or "" - if forced ~= "" then - tfmtable = check_tfm(specification,specification.name .. "." .. forced) - end - if not tfmtable then - tfmtable = check_tfm(specification,specification.name) - end - else - tfmtable = check_tfm(specification,fullname) - end - return tfmtable -end - -function readers.afm(specification,method) - local fullname, tfmtable = specification.filename or "", nil - if fullname == "" then - local forced = specification.forced or "" - if forced ~= "" then - tfmtable = check_afm(specification,specification.name .. "." .. forced) - end - if not tfmtable then - method = method or definers.method or "afm or tfm" - if method == "tfm" then - tfmtable = check_tfm(specification,specification.name) - elseif method == "afm" then - tfmtable = check_afm(specification,specification.name) - elseif method == "tfm or afm" then - tfmtable = check_tfm(specification,specification.name) or check_afm(specification,specification.name) - else -- method == "afm or tfm" or method == "" then - tfmtable = check_afm(specification,specification.name) or check_tfm(specification,specification.name) - end - end - else - tfmtable = check_afm(specification,fullname) - end - return tfmtable -end - --- maybe some day a set of names - -local function check_otf(forced,specification,suffix,what) - local name = specification.name - if forced then - name = file.addsuffix(name,suffix,true) - end - local fullname, tfmtable = findbinfile(name,suffix) or "", nil -- one shot - -- if false then -- can be enabled again when needed - -- if fullname == "" then - -- local fb = fonts.names.old_to_new[name] - -- if fb then - -- fullname = findbinfile(fb,suffix) or "" - -- end - -- end - -- if fullname == "" then - -- local fb = fonts.names.new_to_old[name] - -- if fb then - -- fullname = findbinfile(fb,suffix) or "" - -- end - -- end - -- end - if fullname == "" then - fullname = fonts.names.getfilename(name,suffix) - end - if fullname ~= "" then - specification.filename, specification.format = fullname, what -- hm, so we do set the filename, then - tfmtable = tfm.read_from_otf(specification) -- we need to do it for all matches / todo - end - return tfmtable -end - -function readers.opentype(specification,suffix,what) - local forced = specification.forced or "" - if forced == "otf" then - return check_otf(true,specification,forced,"opentype") - elseif forced == "ttf" or forced == "ttc" or forced == "dfont" then - return check_otf(true,specification,forced,"truetype") - else - return check_otf(false,specification,suffix,what) - end -end - -function readers.otf (specification) return readers.opentype(specification,"otf","opentype") end -function readers.ttf (specification) return readers.opentype(specification,"ttf","truetype") end -function readers.ttc (specification) return readers.opentype(specification,"ttf","truetype") end -- !! -function readers.dfont(specification) return readers.opentype(specification,"ttf","truetype") end -- !! - ---[[ldx-- <p>We need to check for default features. For this we provide a helper function.</p> --ldx]]-- @@ -568,31 +450,29 @@ not gain much. By the way, passing id's back to in the callback was introduced later in the development.</p> --ldx]]-- -local lastdefined = nil -- we don't want this one to end up in s-tra-02 +local lastdefined = nil -- we don't want this one to end up in s-tra-02 +local internalized = { } function definers.current() -- or maybe current return lastdefined end -function definers.register(fontdata,id) - if fontdata and id then - local hash = fontdata.hash - if not tfm.internalized[hash] then +function definers.register(tfmdata,id) -- will be overloaded + if tfmdata and id then + local hash = tfmdata.hash + if not internalized[hash] then if trace_defining then - report_define("loading at 2 id %s, hash: %s",id or "?",hash or "?") + report_defining("registering font, id: %s, hash: %s",id or "?",hash or "?") end - fonts.identifiers[id] = fontdata - fonts.characters [id] = fontdata.characters - fonts.quads [id] = fontdata.parameters and fontdata.parameters.quad - -- todo: extra functions, e.g. setdigitwidth etc in list - tfm.internalized[hash] = id + fonts.identifiers[id] = tfmdata + internalized[hash] = id end end end -function definers.registered(hash) - local id = tfm.internalized[hash] - return id, id and fonts.ids[id] +function definers.registered(hash) -- will be overloaded + local id = internalized[hash] + return id, id and fonts.identifiers[id] end local cache_them = false @@ -625,49 +505,45 @@ function definers.read(specification,size,id) -- id can be optional, name can al specification = definers.resolve(specification) local hash = tfm.hashinstance(specification) if cache_them then - local fontdata = containers.read(fonts.cache,hash) -- for tracing purposes + local tfmdata = containers.read(fonts.cache,hash) -- for tracing purposes end - local fontdata = definers.registered(hash) -- id - if not fontdata then + local tfmdata = definers.registered(hash) -- id + if not tfmdata then if specification.features.vtf and specification.features.vtf.preset then - fontdata = tfm.make(specification) + tfmdata = tfm.make(specification) else - fontdata = tfm.read(specification) - if fontdata then - tfm.checkvirtualid(fontdata) + tfmdata = tfm.read(specification) + if tfmdata then + tfm.checkvirtualid(tfmdata) end end if cache_them then - fontdata = containers.write(fonts.cache,hash,fontdata) -- for tracing purposes + tfmdata = containers.write(fonts.cache,hash,tfmdata) -- for tracing purposes end - if fontdata then - fontdata.hash = hash - fontdata.cache = "no" + if tfmdata then + tfmdata.hash = hash + tfmdata.cache = "no" if id then - definers.register(fontdata,id) + definers.register(tfmdata,id) end end end - lastdefined = fontdata or id -- todo ! ! ! ! ! - if not fontdata then -- or id? - report_define( "unknown font %s, loading aborted",specification.name) - elseif trace_defining and type(fontdata) == "table" then - report_define("using %s font with id %s, name:%s size:%s bytes:%s encoding:%s fullname:%s filename:%s", - fontdata.type or "unknown", - id or "?", - fontdata.name or "?", - fontdata.size or "default", - fontdata.encodingbytes or "?", - fontdata.encodingname or "unicode", - fontdata.fullname or "?", - file.basename(fontdata.filename or "?")) - end - local cs = specification.cs - if cs then - fontcsnames[cs] = fontdata -- new (beware: locals can be forgotten) + lastdefined = tfmdata or id -- todo ! ! ! ! ! + if not tfmdata then -- or id? + report_defining( "unknown font %s, loading aborted",specification.name) + elseif trace_defining and type(tfmdata) == "table" then + report_defining("using %s font with id %s, name:%s size:%s bytes:%s encoding:%s fullname:%s filename:%s", + tfmdata.type or "unknown", + id or "?", + tfmdata.name or "?", + tfmdata.size or "default", + tfmdata.encodingbytes or "?", + tfmdata.encodingname or "unicode", + tfmdata.fullname or "?", + file.basename(tfmdata.filename or "?")) end statistics.stoptiming(fonts) - return fontdata + return tfmdata end function vf.find(name) @@ -676,18 +552,18 @@ function vf.find(name) local format = fonts.logger.format(name) if format == 'tfm' or format == 'ofm' then if trace_defining then - report_define("locating vf for %s",name) + report_defining("locating vf for %s",name) end return findbinfile(name,"ovf") else if trace_defining then - report_define("vf for %s is already taken care of",name) + report_defining("vf for %s is already taken care of",name) end return nil -- "" end else if trace_defining then - report_define("locating vf for %s",name) + report_defining("locating vf for %s",name) end return findbinfile(name,"ovf") end @@ -698,4 +574,4 @@ end --ldx]]-- callbacks.register('define_font' , definers.read, "definition of fonts (tfmtable preparation)") -callbacks.register('find_vf_file', vf.find , "locating virtual fonts, insofar needed") -- not that relevant any more +callbacks.register('find_vf_file', vf.find, "locating virtual fonts, insofar needed") -- not that relevant any more diff --git a/otfl-font-dum.lua b/otfl-font-dum.lua index 14d155a..54b631d 100644 --- a/otfl-font-dum.lua +++ b/otfl-font-dum.lua @@ -11,13 +11,13 @@ fonts = fonts or { } -- general fonts.otf.pack = false -- only makes sense in context -fonts.tfm.resolvevirtualtoo = false -- context specific (du eto resolver) +fonts.tfm.resolvevirtualtoo = false -- context specific (due to resolver) fonts.tfm.fontnamemode = "specification" -- somehow latex needs this (changed name!) -- readers fonts.tfm.readers = fonts.tfm.readers or { } -fonts.tfm.readers.sequence = { 'otf', 'ttf', 'tfm' } +fonts.tfm.readers.sequence = { 'otf', 'ttf', 'tfm', 'lua' } fonts.tfm.readers.afm = nil -- define @@ -275,7 +275,7 @@ end -- bonus function fonts.otf.nametoslot(name) - local tfmdata = fonts.ids[font.current()] + local tfmdata = fonts.identifiers[font.current()] if tfmdata and tfmdata.shared then local otfdata = tfmdata.shared.otfdata local unicode = otfdata.luatex.unicodes[name] @@ -310,3 +310,45 @@ fonts.strippables = table.tohash { 0xE0077, 0xE0078, 0xE0079, 0xE007A, 0xE007B, 0xE007C, 0xE007D, 0xE007E, 0xE007F, } +-- \font\test=file:somefont:reencode=mymessup +-- +-- fonts.enc.reencodings.mymessup = { +-- [109] = 110, -- m +-- [110] = 109, -- n +-- } + +fonts.enc = fonts.enc or {} +local reencodings = { } +fonts.enc.reencodings = reencodings + +local function specialreencode(tfmdata,value) + -- we forget about kerns as we assume symbols and we + -- could issue a message if ther are kerns but it's + -- a hack anyway so we odn't care too much here + local encoding = value and reencodings[value] + if encoding then + local temp = { } + local char = tfmdata.characters + for k, v in next, encoding do + temp[k] = char[v] + end + for k, v in next, temp do + char[k] = temp[k] + end + -- if we use the font otherwise luatex gets confused so + -- we return an additional hash component for fullname + return string.format("reencoded:%s",value) + end +end + +local function reencode(tfmdata,value) + tfmdata.postprocessors = tfmdata.postprocessors or { } + table.insert(tfmdata.postprocessors, + function(tfmdata) + return specialreencode(tfmdata,value) + end + ) +end + +table.insert(fonts.manipulators,"reencode") +fonts.initializers.base.otf.reencode = reencode diff --git a/otfl-font-ini.lua b/otfl-font-ini.lua index 6082c1d..df534c6 100644 --- a/otfl-font-ini.lua +++ b/otfl-font-ini.lua @@ -6,6 +6,9 @@ if not modules then modules = { } end modules ['font-ini'] = { license = "see context related readme files" } +-- The font code will be upgraded and reorganized so that we have a +-- leaner generic code base and can do more tuning for context. + --[[ldx-- <p>Not much is happening here.</p> --ldx]]-- @@ -16,7 +19,7 @@ local write_nl = texio.write_nl local lower = string.lower local allocate, mark = utilities.storage.allocate, utilities.storage.mark -local report_define = logs.new("define fonts") +local report_defining = logs.reporter("fonts","defining") fontloader.totable = fontloader.to_table @@ -25,14 +28,18 @@ fontloader.totable = fontloader.to_table fonts = fonts or { } --- we will also have des and fam hashes +-- beware, some already defined --- beware, soem alreadyu defined +fonts.identifiers = mark(fonts.identifiers or { }) -- fontdata +-----.characters = mark(fonts.characters or { }) -- chardata +-----.csnames = mark(fonts.csnames or { }) -- namedata +-----.quads = mark(fonts.quads or { }) -- quaddata -fonts.ids = mark(fonts.ids or { }) fonts.identifiers = fonts.ids -- aka fontdata -fonts.chr = mark(fonts.chr or { }) fonts.characters = fonts.chr -- aka chardata -fonts.qua = mark(fonts.qua or { }) fonts.quads = fonts.qua -- aka quaddata -fonts.css = mark(fonts.css or { }) fonts.csnames = fonts.css -- aka namedata +--~ fonts.identifiers[0] = { -- nullfont +--~ characters = { }, +--~ descriptions = { }, +--~ name = "nullfont", +--~ } fonts.tfm = fonts.tfm or { } fonts.vf = fonts.vf or { } @@ -41,15 +48,7 @@ fonts.pfb = fonts.pfb or { } fonts.otf = fonts.otf or { } fonts.privateoffset = 0xF0000 -- 0x10FFFF -fonts.verbose = false -- more verbose cache tables - -fonts.ids[0] = { -- nullfont - characters = { }, - descriptions = { }, - name = "nullfont", -} - -fonts.chr[0] = { } +fonts.verbose = false -- more verbose cache tables (will move to context namespace) fonts.methods = fonts.methods or { base = { tfm = { }, afm = { }, otf = { }, vtf = { }, fix = { } }, @@ -109,7 +108,11 @@ function fonts.fontformat(filename,default) if format then return format else - report_define("unable to determine font format for '%s'",filename) + report_defining("unable to determine font format for '%s'",filename) return default end end + +-- readers + +fonts.tfm.readers = fonts.tfm.readers or { } diff --git a/otfl-font-lua.lua b/otfl-font-lua.lua new file mode 100644 index 0000000..a6fcc16 --- /dev/null +++ b/otfl-font-lua.lua @@ -0,0 +1,45 @@ +if not modules then modules = { } end modules ['font-lua'] = { + version = 1.001, + comment = "companion to font-ini.mkiv", + author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", + copyright = "PRAGMA ADE / ConTeXt Development Team", + license = "see context related readme files" +} + +local trace_defining = false trackers.register("fonts.defining", function(v) trace_defining = v end) + +local report_lua = logs.reporter("fonts","lua loading") + +fonts.formats.lua = "lua" + +local readers = fonts.tfm.readers + +local function check_lua(specification,fullname) + -- standard tex file lookup + local fullname = resolvers.findfile(fullname) or "" + if fullname ~= "" then + local loader = loadfile(fullname) + loader = loader and loader() + return loader and loader(specification) + end +end + +function readers.lua(specification) + local original = specification.specification + if trace_defining then + report_lua("using lua reader for '%s'",original) + end + local fullname, tfmtable = specification.filename or "", nil + if fullname == "" then + local forced = specification.forced or "" + if forced ~= "" then + tfmtable = check_lua(specification,specification.name .. "." .. forced) + end + if not tfmtable then + tfmtable = check_lua(specification,specification.name) + end + else + tfmtable = check_lua(specification,fullname) + end + return tfmtable +end diff --git a/otfl-font-map.lua b/otfl-font-map.lua index b206632..26b22b6 100644 --- a/otfl-font-map.lua +++ b/otfl-font-map.lua @@ -14,7 +14,7 @@ local utfbyte = utf.byte local trace_loading = false trackers.register("otf.loading", function(v) trace_loading = v end) local trace_unimapping = false trackers.register("otf.unimapping", function(v) trace_unimapping = v end) -local report_otf = logs.new("load otf") +local report_otf = logs.reporter("fonts","otf loading") --[[ldx-- <p>Eventually this code will disappear because map files are kind @@ -163,11 +163,11 @@ fonts.map.addtounicode = function(data,filename) cidcodes = usedmap.unicodes end uparser = makenameparser() - local aglmap = fonts.enc and fonts.enc.agl -- to name + local unicodevector = fonts.enc.agl.unicodes -- loaded runtime in context for index, glyph in next, data.glyphs do local name, unic = glyph.name, glyph.unicode or -1 -- play safe if unic == -1 or unic >= private or (unic >= 0xE000 and unic <= 0xF8FF) or unic == 0xFFFE or unic == 0xFFFF then - local unicode = (lumunic and lumunic[name]) or (aglmap and aglmap[name]) + local unicode = (lumunic and lumunic[name]) or unicodevector[name] if unicode then originals[index], tounicode[index], ns = unicode, tounicode16(unicode), ns + 1 end @@ -211,7 +211,7 @@ fonts.map.addtounicode = function(data,filename) -- skip elseif nplit == 1 then local base = split[1] - unicode = unicodes[base] or (aglmap and aglmap[base]) + unicode = unicodes[base] or unicodevector[base] if unicode then if type(unicode) == "table" then unicode = unicode[1] @@ -222,7 +222,7 @@ fonts.map.addtounicode = function(data,filename) local t, n = { }, 0 for l=1,nplit do local base = split[l] - local u = unicodes[base] or (aglmap and aglmap[base]) + local u = unicodes[base] or unicodevector[base] if not u then break elseif type(u) == "table" then diff --git a/otfl-font-ota.lua b/otfl-font-ota.lua index 18b0bf2..f972d28 100644 --- a/otfl-font-ota.lua +++ b/otfl-font-ota.lua @@ -40,7 +40,7 @@ local has_attribute = node.has_attribute local traverse_id = node.traverse_id local traverse_node_list = node.traverse -local fontdata = fonts.ids +local fontdata = fonts.identifiers local state = attributes.private('state') local categories = characters and characters.categories or { } -- sorry, only in context diff --git a/otfl-font-otb.lua b/otfl-font-otb.lua index 241845f..8ee39b8 100644 --- a/otfl-font-otb.lua +++ b/otfl-font-otb.lua @@ -23,7 +23,7 @@ local trace_ligatures = false trackers.register("otf.ligatures", function local trace_kerns = false trackers.register("otf.kerns", function(v) trace_kerns = v end) local trace_preparing = false trackers.register("otf.preparing", function(v) trace_preparing = v end) -local report_prepare = logs.new("otf prepare") +local report_prepare = logs.reporter("fonts","otf prepare") local wildcard = "*" local default = "dflt" diff --git a/otfl-font-otc.lua b/otfl-font-otc.lua index cc7f0ab..93b942f 100644 --- a/otfl-font-otc.lua +++ b/otfl-font-otc.lua @@ -16,7 +16,7 @@ local trace_loading = false trackers.register("otf.loading", function(v) trace_ local fonts = fonts local otf = fonts.otf -local report_otf = logs.new("load otf") +local report_otf = logs.reporter("fonts","otf loading") -- instead of "script = "DFLT", langs = { 'dflt' }" we now use wildcards (we used to -- have always); some day we can write a "force always when true" trick for other @@ -35,22 +35,18 @@ local extra_lists = { { endash = "hyphen hyphen", emdash = "hyphen hyphen hyphen", - quotedblleft = "quoteleft quoteleft", - quotedblright = "quoteright quoteright", - quotedblleft = "grave grave", - quotedblright = "quotesingle quotesingle", - quotedblbase = "comma comma", - exclamdown = "exclam grave", - questiondown = "question grave", - guillemotleft = "less less", - guillemotright= "greater greater", + -- quotedblleft = "quoteleft quoteleft", + -- quotedblright = "quoteright quoteright", + -- quotedblleft = "grave grave", + -- quotedblright = "quotesingle quotesingle", + -- quotedblbase = "comma comma", }, }, trep = { { - [0x0022] = 0x201D, + -- [0x0022] = 0x201D, [0x0027] = 0x2019, - [0x0060] = 0x2018, + -- [0x0060] = 0x2018, }, }, anum = { @@ -102,14 +98,14 @@ local extra_features = { -- maybe just 1..n so that we prescribe order }, anum = { { - features = { arab = { FAR = true, dflt = true } }, + features = { arab = { URD = true, dflt = true } }, name = "ctx_anum_1", subtables = { "ctx_anum_1_s" }, type = "gsub_single", flags = { }, }, { - features = { arab = { FAR = true } }, + features = { arab = { URD = true } }, name = "ctx_anum_2", subtables = { "ctx_anum_2_s" }, type = "gsub_single", diff --git a/otfl-font-otd.lua b/otfl-font-otd.lua index 910725a..4754816 100644 --- a/otfl-font-otd.lua +++ b/otfl-font-otd.lua @@ -8,11 +8,11 @@ if not modules then modules = { } end modules ['font-otd'] = { local trace_dynamics = false trackers.register("otf.dynamics", function(v) trace_dynamics = v end) -local report_otf = logs.new("load otf") +local report_otf = logs.reporter("fonts","otf loading") local fonts = fonts local otf = fonts.otf -local fontdata = fonts.ids +local fontdata = fonts.identifiers otf.features = otf.features or { } otf.features.default = otf.features.default or { } diff --git a/otfl-font-otf.lua b/otfl-font-otf.lua index 7656f13..c974d89 100644 --- a/otfl-font-otf.lua +++ b/otfl-font-otf.lua @@ -32,44 +32,53 @@ local trace_sequences = false trackers.register("otf.sequences", function(v) local trace_math = false trackers.register("otf.math", function(v) trace_math = v end) local trace_defining = false trackers.register("fonts.defining", function(v) trace_defining = v end) -local report_otf = logs.new("load otf") +local report_otf = logs.reporter("fonts","otf loading") local starttiming, stoptiming, elapsedtime = statistics.starttiming, statistics.stoptiming, statistics.elapsedtime -local fonts = fonts +local findbinfile = resolvers.findbinfile -fonts.otf = fonts.otf or { } -local otf = fonts.otf -local tfm = fonts.tfm +local fonts = fonts -local fontdata = fonts.ids -local chardata = characters and characters.data -- not used +fonts.otf = fonts.otf or { } +local otf = fonts.otf +local tfm = fonts.tfm -otf.features = otf.features or { } -otf.features.list = otf.features.list or { } -otf.features.default = otf.features.default or { } +local fontdata = fonts.identifiers +local chardata = characters and characters.data -- not used -otf.enhancers = allocate() -local enhancers = otf.enhancers -enhancers.patches = { } +-- todo: probably first time so local first -local definers = fonts.definers +otf.features = otf.features or { } +local features = otf.features +features.list = features.list or { } +local featurelist = features.list +features.default = features.default or { } +local defaultfeatures = features.default -otf.glists = { "gsub", "gpos" } +otf.enhancers = allocate() +local enhancers = otf.enhancers +enhancers.patches = { } +local patches = enhancers.patches -otf.version = 2.706 -- beware: also sync font-mis.lua -otf.cache = containers.define("fonts", "otf", otf.version, true) +local definers = fonts.definers +local readers = fonts.tfm.readers -local loadmethod = "table" -- table, mixed, sparse -local forceload = false -local cleanup = 0 -local usemetatables = false -- .4 slower on mk but 30 M less mem so we might change the default -- will be directive -local packdata = true -local syncspace = true -local forcenotdef = false +otf.glists = { "gsub", "gpos" } -local wildcard = "*" -local default = "dflt" +otf.version = 2.710 -- beware: also sync font-mis.lua +otf.cache = containers.define("fonts", "otf", otf.version, true) + +local loadmethod = "table" -- table, mixed, sparse +local forceload = false +local cleanup = 0 +local usemetatables = false -- .4 slower on mk but 30 M less mem so we might change the default -- will be directive +local packdata = true +local syncspace = true +local forcenotdef = false + +local wildcard = "*" +local default = "dflt" local fontloaderfields = fontloader.fields local mainfields = nil @@ -264,11 +273,11 @@ local ordered_enhancers = { local actions = { } -enhancers.patches.before = allocate() -enhancers.patches.after = allocate() +patches.before = allocate() +patches.after = allocate() -local before = enhancers.patches.before -local after = enhancers.patches.after +local before = patches.before +local after = patches.after local function enhance(name,data,filename,raw,verbose) local enhancer = actions[name] @@ -312,9 +321,9 @@ function enhancers.apply(data,filename,raw,verbose) ioflush() -- we want instant messages end --- enhancers.patches.register("before","migrate metadata","cambria",function() end) +-- patches.register("before","migrate metadata","cambria",function() end) -function enhancers.patches.register(what,where,pattern,action) +function patches.register(what,where,pattern,action) local ww = what[where] if ww then ww[pattern] = action @@ -323,6 +332,12 @@ function enhancers.patches.register(what,where,pattern,action) end end +function patches.report(fmt,...) + if trace_loading then + report_otf("patching: " ..fmt,...) + end +end + function enhancers.register(what,action) -- only already registered can be overloaded actions[what] = action end @@ -332,9 +347,7 @@ function otf.load(filename,format,sub,featurefile) local attr = lfs.attributes(filename) local size, time = attr and attr.size or 0, attr and attr.modification or 0 if featurefile then - local fattr = lfs.attributes(featurefile) - local fsize, ftime = fattr and fattr.size or 0, fattr and fattr.modification or 0 - name = name .. "@" .. file.removesuffix(file.basename(featurefile)) .. ftime .. fsize + name = name .. "@" .. file.removesuffix(file.basename(featurefile)) end if sub == "" then sub = false end local hash = name @@ -435,6 +448,7 @@ function otf.load(filename,format,sub,featurefile) end data.size = size data.time = time + data.format = format if featurefiles then data.featuredata = featurefiles end @@ -545,7 +559,7 @@ end actions["prepare tables"] = function(data,filename,raw) local luatex = { - filename = filename, + filename = resolvers.unresolve(filename), -- no shortcut version = otf.version, creator = "context mkiv", } @@ -966,23 +980,27 @@ actions["reorganize subtables"] = function(data,filename,raw) end end +-- the next one is still messy but will get better when we have +-- flattened map/enc tables in the font loader + actions["prepare unicodes"] = function(data,filename,raw) local luatex = data.luatex - local indices, unicodes, multiples, internals = { }, { }, { }, { } - local mapmap = data.map or raw.map - local mapenc = nil -- will go away - if not mapmap then - report_otf("no map in %s",filename) + local indices, unicodes, multiples, internals= { }, { }, { }, { } + local mapdata = data.map or raw.map -- map already moved + local mapmap + if not mapdata then + report_otf("no mapdata in '%s'",filename) mapmap = { } - data.map = { map = mapmap } - elseif not mapmap.map then - report_otf("no unicode map in %s",filename) + mapdata = { map = mapmap } + data.map = mapdata + elseif not mapdata.map then + report_otf("no map in mapdata of '%s'",filename) mapmap = { } - data.map.map = mapmap + mapdata.map = mapmap else - mapenc = mapmap.enc -- will go away - mapmap = mapmap.map + mapmap = mapdata.map end + local encname = lower(data.enc_name or raw.enc_name or mapdata.enc_name or "") local criterium = fonts.privateoffset local private = criterium local glyphs = data.glyphs @@ -1028,11 +1046,9 @@ actions["prepare unicodes"] = function(data,filename,raw) end end -- beware: the indices table is used to initialize the tfm table - local encname = lower(data.enc_name or (mapenc and mapenc[1] and mapenc[1].enc_name) or "") -- mapenc will go away - -- will become: local encname = lower(data.enc_name or "") - if encname == "" or encname == "unicodebmp" or encname == "unicodefull" then -- maybe find(encname,"unicode") + if find(encname,"unicode") then -- unicodebmp, unicodefull, ... if trace_loading then - report_otf("using extra unicode map") + report_otf("using embedded unicode map '%s'",encname) end -- ok -- we can also consider using the altuni for unicode, index in next, mapmap do @@ -1394,7 +1410,7 @@ actions["check metadata"] = function(data,filename,raw) data.map = nil end -local private_math_parameters = { +local private_mathparameters = { "FractionDelimiterSize", "FractionDelimiterDisplayStyleSize", } @@ -1402,8 +1418,8 @@ local private_math_parameters = { actions["check math parameters"] = function(data,filename,raw) local mathdata = data.metadata.math if mathdata then - for m=1,#private_math_parameters do - local pmp = private_math_parameters[m] + for m=1,#private_mathparameters do + local pmp = private_mathparameters[m] if not mathdata[pmp] then if trace_loading then report_otf("setting math parameter '%s' to 0", pmp) @@ -1523,9 +1539,12 @@ end -- -- -- -- -- -- -- -- -- -- -- -- -function otf.features.register(name,default) - otf.features.list[#otf.features.list+1] = name - otf.features.default[name] = default +function features.register(name,default,description) + featurelist[#featurelist+1] = name + defaultfeatures[name] = default + if description and description ~= "" then + fonts.otf.tables.features[name] = description + end end -- for context this will become a task handler @@ -1604,11 +1623,6 @@ end -- we cannot share descriptions as virtual fonts might extend them (ok, we could -- use a cache with a hash -fonts.formats.dfont = "truetype" -fonts.formats.ttc = "truetype" -fonts.formats.ttf = "truetype" -fonts.formats.otf = "opentype" - local function copytotfm(data,cache_id) -- we can save a copy when we reorder the tma to unicode (nasty due to one->many) if data then local glyphs, pfminfo, metadata = data.glyphs or { }, data.pfminfo or { }, data.metadata or { } @@ -1616,13 +1630,15 @@ local function copytotfm(data,cache_id) -- we can save a copy when we reorder th local unicodes = luatex.unicodes -- names to unicodes local indices = luatex.indices local mode = data.mode or "base" - local characters, parameters, math_parameters, descriptions = { }, { }, { }, { } + local characters, parameters, mathparameters, descriptions = { }, { }, { }, { } local designsize = metadata.designsize or metadata.design_size or 100 if designsize == 0 then designsize = 100 end local spaceunits, spacer = 500, "space" -- indices maps from unicodes to indices + -- this wil stay as we can manipulate indices + -- beforehand for u, i in next, indices do characters[u] = { } -- we need this because for instance we add protruding info and loop over characters descriptions[u] = glyphs[i] @@ -1631,7 +1647,7 @@ local function copytotfm(data,cache_id) -- we can save a copy when we reorder th if metadata.math then -- parameters for name, value in next, metadata.math do - math_parameters[name] = value + mathparameters[name] = value end -- we could use a subset for u, char in next, characters do @@ -1678,10 +1694,10 @@ local function copytotfm(data,cache_id) -- we can save a copy when we reorder th end end -- end math - local endash, emdash, space = 0x20, 0x2014, "space" -- unicodes['space'], unicodes['emdash'] + local space, emdash = 0x20, 0x2014 -- unicodes['space'], unicodes['emdash'] if metadata.isfixedpitch then - if descriptions[endash] then - spaceunits, spacer = descriptions[endash].width, "space" + if descriptions[space] then + spaceunits, spacer = descriptions[space].width, "space" end if not spaceunits and descriptions[emdash] then spaceunits, spacer = descriptions[emdash].width, "emdash" @@ -1690,8 +1706,8 @@ local function copytotfm(data,cache_id) -- we can save a copy when we reorder th spaceunits, spacer = metadata.charwidth, "charwidth" end else - if descriptions[endash] then - spaceunits, spacer = descriptions[endash].width, "space" + if descriptions[space] then + spaceunits, spacer = descriptions[space].width, "space" end if not spaceunits and descriptions[emdash] then spaceunits, spacer = descriptions[emdash].width/2, "emdash/2" @@ -1700,7 +1716,7 @@ local function copytotfm(data,cache_id) -- we can save a copy when we reorder th spaceunits, spacer = metadata.charwidth, "charwidth" end end - spaceunits = tonumber(spaceunits) or tfm.units/2 -- 500 -- brrr + spaceunits = tonumber(spaceunits) or 500 -- brrr -- we need a runtime lookup because of running from cdrom or zip, brrr (shouldn't we use the basename then?) local filename = fonts.tfm.checkedfilename(luatex) local fontname = metadata.fontname @@ -1743,10 +1759,14 @@ local function copytotfm(data,cache_id) -- we can save a copy when we reorder th end end -- + local fileformat = data.format or fonts.fontformat(filename,"opentype") + if units > 1000 then + fileformat = "truetype" + end return { characters = characters, parameters = parameters, - math_parameters = math_parameters, + mathparameters = mathparameters, descriptions = descriptions, indices = indices, unicodes = unicodes, @@ -1755,7 +1775,6 @@ local function copytotfm(data,cache_id) -- we can save a copy when we reorder th boundarychar_label = 0, boundarychar = 65536, designsize = (designsize/10)*65536, - spacer = "500 units", encodingbytes = 2, mode = mode, filename = filename, @@ -1764,7 +1783,7 @@ local function copytotfm(data,cache_id) -- we can save a copy when we reorder th psname = fontname or fullname, name = filename or fullname, units = units, - format = fonts.fontformat(filename,"opentype"), + format = fileformat, cidinfo = cidinfo, ascender = abs(metadata.ascent or 0), descender = abs(metadata.descent or 0), @@ -1814,7 +1833,8 @@ local function otftotfm(specification) tfmdata.has_italic = otfdata.metadata.has_italic if not tfmdata.language then tfmdata.language = 'dflt' end if not tfmdata.script then tfmdata.script = 'dflt' end - shared.processes, shared.features = otf.setfeatures(tfmdata,definers.check(features,otf.features.default)) + -- at this moment no characters are assinged yet, only empty slots + shared.processes, shared.features = otf.setfeatures(tfmdata,definers.check(features,defaultfeatures)) end end containers.write(tfm.cache,cache_id,tfmdata) @@ -1822,9 +1842,9 @@ local function otftotfm(specification) return tfmdata end -otf.features.register('mathsize') +features.register('mathsize') -function tfm.read_from_otf(specification) -- wrong namespace +local function read_from_otf(specification) -- wrong namespace local tfmtable = otftotfm(specification) if tfmtable then local otfdata = tfmtable.shared.otfdata @@ -1910,3 +1930,56 @@ function otf.collectlookups(otfdata,kind,script,language) end return nil, nil end + +-- readers + +fonts.formats.dfont = "truetype" +fonts.formats.ttc = "truetype" +fonts.formats.ttf = "truetype" +fonts.formats.otf = "opentype" + +local function check_otf(forced,specification,suffix,what) + local name = specification.name + if forced then + name = file.addsuffix(name,suffix,true) + end + local fullname, tfmtable = findbinfile(name,suffix) or "", nil -- one shot + -- if false then -- can be enabled again when needed + -- if fullname == "" then + -- local fb = fonts.names.old_to_new[name] + -- if fb then + -- fullname = findbinfile(fb,suffix) or "" + -- end + -- end + -- if fullname == "" then + -- local fb = fonts.names.new_to_old[name] + -- if fb then + -- fullname = findbinfile(fb,suffix) or "" + -- end + -- end + -- end + if fullname == "" then + fullname = fonts.names.getfilename(name,suffix) + end + if fullname ~= "" then + specification.filename, specification.format = fullname, what -- hm, so we do set the filename, then + tfmtable = read_from_otf(specification) -- we need to do it for all matches / todo + end + return tfmtable +end + +function readers.opentype(specification,suffix,what) + local forced = specification.forced or "" + if forced == "otf" then + return check_otf(true,specification,forced,"opentype") + elseif forced == "ttf" or forced == "ttc" or forced == "dfont" then + return check_otf(true,specification,forced,"truetype") + else + return check_otf(false,specification,suffix,what) + end +end + +function readers.otf (specification) return readers.opentype(specification,"otf","opentype") end +function readers.ttf (specification) return readers.opentype(specification,"ttf","truetype") end +function readers.ttc (specification) return readers.opentype(specification,"ttf","truetype") end -- !! +function readers.dfont(specification) return readers.opentype(specification,"ttf","truetype") end -- !! diff --git a/otfl-font-otn.lua b/otfl-font-otn.lua index ec246d2..6c5ba12 100644 --- a/otfl-font-otn.lua +++ b/otfl-font-otn.lua @@ -148,11 +148,11 @@ local trace_steps = false trackers.register("otf.steps", function local trace_skips = false trackers.register("otf.skips", function(v) trace_skips = v end) local trace_directions = false trackers.register("otf.directions", function(v) trace_directions = v end) -local report_direct = logs.new("otf direct") -local report_subchain = logs.new("otf subchain") -local report_chain = logs.new("otf chain") -local report_process = logs.new("otf process") -local report_prepare = logs.new("otf prepare") +local report_direct = logs.reporter("fonts","otf direct") +local report_subchain = logs.reporter("fonts","otf subchain") +local report_chain = logs.reporter("fonts","otf chain") +local report_process = logs.reporter("fonts","otf process") +local report_prepare = logs.reporter("fonts","otf prepare") trackers.register("otf.verbose_chain", function(v) otf.setcontextchain(v and "verbose") end) trackers.register("otf.normal_chain", function(v) otf.setcontextchain(v and "normal") end) @@ -211,7 +211,7 @@ local markonce = true local cursonce = true local kernonce = true -local fontdata = fonts.ids +local fontdata = fonts.identifiers otf.features.process = { } @@ -239,7 +239,7 @@ local contextsetups = specifiers.contextsetups local contextnumbers = specifiers.contextnumbers local contextmerged = specifiers.contextmerged --- we cannot optimize with "start = first_character(head)" because then we don't +-- we cannot optimize with "start = first_glyph(head)" because then we don't -- know which rlmode we're in which messes up cursive handling later on -- -- head is always a whatsit so we can safely assume that head is not changed diff --git a/otfl-font-tfm.lua b/otfl-font-tfm.lua index e8b2427..5e841b2 100644 --- a/otfl-font-tfm.lua +++ b/otfl-font-tfm.lua @@ -16,7 +16,7 @@ local allocate = utilities.storage.allocate local trace_defining = false trackers.register("fonts.defining", function(v) trace_defining = v end) local trace_scaling = false trackers.register("fonts.scaling" , function(v) trace_scaling = v end) -local report_define = logs.new("define fonts") +local report_defining = logs.reporter("fonts","defining") -- tfmdata has also fast access to indices and unicodes -- to be checked: otf -> tfm -> tfmscaled @@ -37,8 +37,10 @@ fonts.initializers = fonts.initializers or { } fonts.initializers.common = fonts.initializers.common or { } local set_attribute = node.set_attribute +local findbinfile = resolvers.findbinfile -local fontdata = fonts.ids +local readers = fonts.tfm.readers +local fontdata = fonts.identifiers local nodecodes = nodes.nodecodes local disc_code = nodecodes.disc @@ -56,20 +58,18 @@ tfm.fontnamemode = "fullpath" tfm.enhance = tfm.enhance or function() end -fonts.formats.tfm = "type1" -- we need to have at least a value here - -function tfm.read_from_tfm(specification) +local function read_from_tfm(specification) local fname, tfmdata = specification.filename or "", nil if fname ~= "" then if trace_defining then - report_define("loading tfm file %s at size %s",fname,specification.size) + report_defining("loading tfm file %s at size %s",fname,specification.size) end tfmdata = font.read_tfm(fname,specification.size) -- not cached, fast enough if tfmdata then tfmdata.descriptions = tfmdata.descriptions or { } if tfm.resolvevirtualtoo then fonts.logger.save(tfmdata,file.extname(fname),specification) -- strange, why here - fname = resolvers.findbinfile(specification.name, 'ovf') + fname = findbinfile(specification.name, 'ovf') if fname and fname ~= "" then local vfdata = font.read_vf(fname,specification.size) -- not cached, fast enough if vfdata then @@ -85,7 +85,7 @@ function tfm.read_from_tfm(specification) tfm.enhance(tfmdata,specification) end elseif trace_defining then - report_define("loading tfm with name %s fails",specification.name) + report_defining("loading tfm with name %s fails",specification.name) end return tfmdata end @@ -279,7 +279,9 @@ function tfm.scale(tfmtable, scaledpoints, relativeid) -- tfm.prepare_base_kerns(tfmtable) -- optimalization local t = { } -- the new table local scaledpoints, delta, units = tfm.calculatescale(tfmtable, scaledpoints, relativeid) + -- is just a trigger for the backend t.units_per_em = units or 1000 + -- local hdelta, vdelta = delta, delta -- unicoded unique descriptions shared cidinfo characters changed parameters indices for k,v in next, tfmtable do @@ -304,7 +306,7 @@ function tfm.scale(tfmtable, scaledpoints, relativeid) end -- status local isvirtual = tfmtable.type == "virtual" or tfmtable.virtualized - local hasmath = (tfmtable.math_parameters ~= nil and next(tfmtable.math_parameters) ~= nil) or (tfmtable.MathConstants ~= nil and next(tfmtable.MathConstants) ~= nil) + local hasmath = (tfmtable.mathparameters ~= nil and next(tfmtable.mathparameters) ~= nil) or (tfmtable.MathConstants ~= nil and next(tfmtable.MathConstants) ~= nil) local nodemode = tfmtable.mode == "node" local hasquality = tfmtable.auto_expand or tfmtable.auto_protrude local hasitalic = tfmtable.has_italic @@ -322,15 +324,18 @@ function tfm.scale(tfmtable, scaledpoints, relativeid) t.unicodes = tfmtable.unicodes t.indices = tfmtable.indices t.marks = tfmtable.marks + -- this will move to some subtable so that it is copied at once t.goodies = tfmtable.goodies t.colorscheme = tfmtable.colorscheme + t.postprocessors = tfmtable.postprocessors + -- -- t.embedding = tfmtable.embedding t.descriptions = descriptions if tfmtable.fonts then t.fonts = table.fastcopy(tfmtable.fonts) -- hm also at the end end local tp = t.parameters - local mp = t.math_parameters + local mp = t.mathparameters local tfmp = tfmtable.parameters -- let's check for indexes -- tp.slant = (tfmp.slant or tfmp[1] or 0) @@ -421,7 +426,7 @@ function tfm.scale(tfmtable, scaledpoints, relativeid) end end -- if trace_scaling then - -- report_define("t=%s, u=%s, i=%s, n=%s c=%s",k,chr.tounicode or k,description.index,description.name or '-',description.class or '-') + -- report_defining("t=%s, u=%s, i=%s, n=%s c=%s",k,chr.tounicode or "",index or 0,description.name or '-',description.class or '-') -- end if tounicode then local tu = tounicode[index] -- nb: index! @@ -458,7 +463,7 @@ function tfm.scale(tfmtable, scaledpoints, relativeid) if vn then chr.next = vn --~ if v.vert_variants or v.horiz_variants then - --~ report_define("glyph 0x%05X has combination of next, vert_variants and horiz_variants",index) + --~ report_defining("glyph 0x%05X has combination of next, vert_variants and horiz_variants",index) --~ end else local vv = v.vert_variants @@ -592,6 +597,7 @@ function tfm.scale(tfmtable, scaledpoints, relativeid) else chr.commands = vc end + chr.index = nil end end tc[k] = chr @@ -629,11 +635,11 @@ function tfm.scale(tfmtable, scaledpoints, relativeid) -- can have multiple subfonts if hasmath then if trace_defining then - report_define("math enabled for: name '%s', fullname: '%s', filename: '%s'",t.name or "noname",t.fullname or "nofullname",t.filename or "nofilename") + report_defining("math enabled for: name '%s', fullname: '%s', filename: '%s'",t.name or "noname",t.fullname or "nofullname",t.filename or "nofilename") end else if trace_defining then - report_define("math disabled for: name '%s', fullname: '%s', filename: '%s'",t.name or "noname",t.fullname or "nofullname",t.filename or "nofilename") + report_defining("math disabled for: name '%s', fullname: '%s', filename: '%s'",t.name or "noname",t.fullname or "nofullname",t.filename or "nofilename") end t.nomath, t.MathConstants = true, nil end @@ -642,8 +648,8 @@ function tfm.scale(tfmtable, scaledpoints, relativeid) t.psname = t.fontname or (t.fullname and fonts.names.cleanname(t.fullname)) end if trace_defining then - report_define("used for accessing (sub)font: '%s'",t.psname or "nopsname") - report_define("used for subsetting: '%s'",t.fontname or "nofontname") + report_defining("used for accessing (sub)font: '%s'",t.psname or "nopsname") + report_defining("used for subsetting: '%s'",t.fontname or "nofontname") end -- this will move up (side effect of merging split call) t.factor = delta @@ -743,20 +749,21 @@ function tfm.checkedfilename(metadata,whatever) if not foundfilename then local askedfilename = metadata.filename or "" if askedfilename ~= "" then - foundfilename = resolvers.findbinfile(askedfilename,"") or "" + askedfilename = resolvers.resolve(askedfilename) -- no shortcut + foundfilename = findbinfile(askedfilename,"") or "" if foundfilename == "" then - report_define("source file '%s' is not found",askedfilename) - foundfilename = resolvers.findbinfile(file.basename(askedfilename),"") or "" + report_defining("source file '%s' is not found",askedfilename) + foundfilename = findbinfile(file.basename(askedfilename),"") or "" if foundfilename ~= "" then - report_define("using source file '%s' (cache mismatch)",foundfilename) + report_defining("using source file '%s' (cache mismatch)",foundfilename) end end elseif whatever then - report_define("no source file for '%s'",whatever) + report_defining("no source file for '%s'",whatever) foundfilename = "" end metadata.foundfilename = foundfilename - -- report_define("using source file '%s'",foundfilename) + -- report_defining("using source file '%s'",foundfilename) end return foundfilename end @@ -766,3 +773,41 @@ end statistics.register("fonts load time", function() return statistics.elapsedseconds(fonts) end) + +-- readers + +fonts.formats.tfm = "type1" -- we need to have at least a value here + +local function check_tfm(specification,fullname) + -- ofm directive blocks local path search unless set; btw, in context we + -- don't support ofm files anyway as this format is obsolete + local foundname = findbinfile(fullname, 'tfm') or "" -- just to be sure + if foundname == "" then + foundname = findbinfile(fullname, 'ofm') or "" -- bonus for usage outside context + end + if foundname == "" then + foundname = fonts.names.getfilename(fullname,"tfm") + end + if foundname ~= "" then + specification.filename, specification.format = foundname, "ofm" + return read_from_tfm(specification) + end +end + +readers.check_tfm = check_tfm + +function readers.tfm(specification) + local fullname, tfmtable = specification.filename or "", nil + if fullname == "" then + local forced = specification.forced or "" + if forced ~= "" then + tfmtable = check_tfm(specification,specification.name .. "." .. forced) + end + if not tfmtable then + tfmtable = check_tfm(specification,specification.name) + end + else + tfmtable = check_tfm(specification,fullname) + end + return tfmtable +end diff --git a/otfl-font-xtx.lua b/otfl-font-xtx.lua index 574e161..505e085 100644 --- a/otfl-font-xtx.lua +++ b/otfl-font-xtx.lua @@ -40,155 +40,47 @@ local list = { } specifiers.colonizedpreference = "file" -local function isstyle(s) - local style = string.lower(s):split("/") - for _,v in ipairs(style) do - if v == "b" then - list.style = "bold" - elseif v == "i" then - list.style = "italic" - elseif v == "bi" or v == "ib" then - list.style = "bolditalic" - elseif v:find("^s=") then - list.optsize = v:split("=")[2] - elseif v == "aat" or v == "icu" or v == "gr" then - logs.report("load font", "unsupported font option: %s", v) - elseif not v:is_empty() then - list.style = v:gsub("[^%a%d]", "") - end - end -end - -fonts = fonts or { } -fonts.otf = fonts.otf or { } - -local otf = fonts.otf - -otf.tables = otf.tables or { } - -otf.tables.defaults = { - dflt = { - "ccmp", "locl", "rlig", "liga", "clig", - "kern", "mark", "mkmk", - }, - arab = { - "ccmp", "locl", "isol", "fina", "fin2", - "fin3", "medi", "med2", "init", "rlig", - "calt", "liga", "cswh", "mset", "curs", - "kern", "mark", "mkmk", - }, - deva = { - "ccmp", "locl", "init", "nukt", "akhn", - "rphf", "blwf", "half", "pstf", "vatu", - "pres", "blws", "abvs", "psts", "haln", - "calt", "blwm", "abvm", "dist", "kern", - "mark", "mkmk", - }, - khmr = { - "ccmp", "locl", "pref", "blwf", "abvf", - "pstf", "pres", "blws", "abvs", "psts", - "clig", "calt", "blwm", "abvm", "dist", - "kern", "mark", "mkmk", - }, - thai = { - "ccmp", "locl", "liga", "kern", "mark", - "mkmk", - }, - hang = { - "ccmp", "ljmo", "vjmo", "tjmo", - }, -} - -otf.tables.defaults.beng = otf.tables.defaults.deva -otf.tables.defaults.guru = otf.tables.defaults.deva -otf.tables.defaults.gujr = otf.tables.defaults.deva -otf.tables.defaults.orya = otf.tables.defaults.deva -otf.tables.defaults.taml = otf.tables.defaults.deva -otf.tables.defaults.telu = otf.tables.defaults.deva -otf.tables.defaults.knda = otf.tables.defaults.deva -otf.tables.defaults.mlym = otf.tables.defaults.deva -otf.tables.defaults.sinh = otf.tables.defaults.deva - -otf.tables.defaults.syrc = otf.tables.defaults.arab -otf.tables.defaults.mong = otf.tables.defaults.arab -otf.tables.defaults.nko = otf.tables.defaults.arab - -otf.tables.defaults.tibt = otf.tables.defaults.khmr - -otf.tables.defaults.lao = otf.tables.defaults.thai - -local function parse_script(script) - if otf.tables.scripts[script] then - local dflt - if otf.tables.defaults[script] then - logs.report("load font", "auto-selecting default features for script: %s", script) - dflt = otf.tables.defaults[script] - else - logs.report("load font", "auto-selecting default features for script: dflt (was %s)", script) - dflt = otf.tables.defaults["dflt"] - end - for _,v in next, dflt do - list[v] = "yes" - end - else - logs.report("load font", "unknown script: %s", script) - end -end - -specifiers.colonizedpreference = "file" - local function issome () list.lookup = specifiers.colonizedpreference end local function isfile () list.lookup = 'file' end local function isname () list.lookup = 'name' end local function thename(s) list.name = s end local function issub (v) list.sub = v end +local function iscrap (s) list.crap = string.lower(s) end +local function istrue (s) list[s] = 'yes' end +local function isfalse(s) list[s] = 'no' end +local function iskey (k,v) list[k] = v end + local function istrue (s) list[s] = true end local function isfalse(s) list[s] = false end -local function iskey (k,v) - if k == "script" then - parse_script(v) - end - list[k] = v -end local P, S, R, C = lpeg.P, lpeg.S, lpeg.R, lpeg.C local spaces = P(" ")^0 local namespec = (1-S("/:("))^0 -- was: (1-S("/: ("))^0 -local filespec = (R("az", "AZ") * P(":"))^-1 * (1-S(":("))^1 -local stylespec = spaces * P("/") * (((1-P(":"))^0)/isstyle) * spaces -local filename = (P("file:")/isfile * (filespec/thename)) + (P("[") * P(true)/isname * (((1-P("]"))^0)/thename) * P("]")) +local crapspec = spaces * P("/") * (((1-P(":"))^0)/iscrap) * spaces +local filename = (P("file:")/isfile * (namespec/thename)) + (P("[") * P(true)/isname * (((1-P("]"))^0)/thename) * P("]")) local fontname = (P("name:")/isname * (namespec/thename)) + P(true)/issome * (namespec/thename) local sometext = (R("az","AZ","09") + S("+-."))^1 local truevalue = P("+") * spaces * (sometext/istrue) local falsevalue = P("-") * spaces * (sometext/isfalse) -local keyvalue = P("+") + (C(sometext) * spaces * P("=") * spaces * C(sometext))/iskey +local keyvalue = (C(sometext) * spaces * P("=") * spaces * C(sometext))/iskey local somevalue = sometext/istrue local subvalue = P("(") * (C(P(1-S("()"))^1)/issub) * P(")") -- for Kim local option = spaces * (keyvalue + falsevalue + truevalue + somevalue) * spaces local options = P(":") * spaces * (P(";")^0 * option)^0 -local pattern = (filename + fontname) * subvalue^0 * stylespec^0 * options^0 +local pattern = (filename + fontname) * subvalue^0 * crapspec^0 * options^0 local function colonized(specification) -- xetex mode list = { } lpegmatch(pattern,specification.specification) - if list.style then - specification.style = list.style - list.style = nil - end - if list.optsize then - specification.optsize = list.optsize - list.optsize = nil - end + -- for k, v in next, list do + -- list[k] = is_boolean(v) + -- if type(list[a]) == "nil" then + -- list[k] = v + -- end + -- end + list.crap = nil -- style not supported, maybe some day if list.name then - if resolvers.findfile(list.name, "tfm") then - list.lookup = "file" - list.name = file.addsuffix(list.name, "tfm") - elseif resolvers.findfile(list.name, "ofm") then - list.lookup = "file" - list.name = file.addsuffix(list.name, "ofm") - end - specification.name = list.name list.name = nil end @@ -205,4 +97,4 @@ local function colonized(specification) -- xetex mode return specification end -definers.registersplit(":",colonized) +definers.registersplit(":",colonized,"cryptic") diff --git a/otfl-luat-dum.lua b/otfl-luat-dum.lua index bd10e89..e0b6292 100644 --- a/otfl-luat-dum.lua +++ b/otfl-luat-dum.lua @@ -7,6 +7,7 @@ if not modules then modules = { } end modules ['luat-dum'] = { } local dummyfunction = function() end +local dummyreporter = function(c) return function(...) texio.write(c .. " : " .. string.format(...)) end end statistics = { register = dummyfunction, @@ -34,9 +35,10 @@ storage = { -- probably no longer needed shared = { }, } logs = { - new = function() return dummyfunction end, + new = dummyreporter, + reporter = dummyreporter, + messenger = dummyreporter, report = dummyfunction, - simple = dummyfunction, } callbacks = { register = function(n,f) return callback.register(n,f) end, @@ -62,15 +64,19 @@ local remapper = { otf = "opentype fonts", ttf = "truetype fonts", ttc = "truetype fonts", - dfont = "truetype fonts", + dfont = "truetype fonts", -- "truetype dictionary", cid = "cid maps", fea = "font feature files", } function resolvers.findfile(name,kind) name = string.gsub(name,"\\","\/") - kind = string.lower(kind) - return kpse.find_file(name,(kind and kind ~= "" and (remapper[kind] or kind)) or file.extname(name,"tex")) + kind = kind and string.lower(kind) + local found = kpse.find_file(name,(kind and kind ~= "" and (remapper[kind] or kind)) or file.extname(name,"tex")) + if not found or found == "" then + found = kpse.find_file(name,"other text file") + end + return found end function resolvers.findbinfile(name,kind) @@ -80,6 +86,14 @@ function resolvers.findbinfile(name,kind) return resolvers.findfile(name,(kind and remapper[kind]) or kind) end +function resolvers.resolve(s) + return s +end + +function resolvers.unresolve(s) + return s +end + -- Caches ... I will make a real stupid version some day when I'm in the -- mood. After all, the generic code does not need the more advanced -- ConTeXt features. Cached data is not shared between ConTeXt and other @@ -98,41 +112,43 @@ end do - local cachepaths + local cachepaths = kpse.expand_path('$TEXMFCACHE') or "" + + if cachepaths == "" then + cachepaths = kpse.expand_path('$TEXMFVAR') + end - if kpse.expand_var('$TEXMFCACHE') ~= '$TEXMFCACHE' then - cachepaths = kpse.expand_var('$TEXMFCACHE') - elseif kpse.expand_var('$TEXMFVAR') ~= '$TEXMFVAR' then - cachepaths = kpse.expand_var('$TEXMFVAR') + if cachepaths == "" then + cachepaths = kpse.expand_path('$VARTEXMF') end - if not cachepaths then + if cachepaths == "" then cachepaths = "." end cachepaths = string.split(cachepaths,os.type == "windows" and ";" or ":") for i=1,#cachepaths do - local done - writable = file.join(cachepaths[i], "luatex-cache") - writable = file.join(writable,caches.namespace) - writable, done = dir.mkdirs(writable) - if done then + if file.is_writable(cachepaths[i]) then + writable = file.join(cachepaths[i],"luatex-cache") + lfs.mkdir(writable) + writable = file.join(writable,caches.namespace) + lfs.mkdir(writable) break end end for i=1,#cachepaths do - if file.isreadable(cachepaths[i]) then + if file.is_readable(cachepaths[i]) then readables[#readables+1] = file.join(cachepaths[i],"luatex-cache",caches.namespace) end end if not writable then - texio.write_nl("quiting: fix your writable cache path\n") + texio.write_nl("quiting: fix your writable cache path") os.exit() elseif #readables == 0 then - texio.write_nl("quiting: fix your readable cache path\n") + texio.write_nl("quiting: fix your readable cache path") os.exit() elseif #readables == 1 and readables[1] == writable then texio.write(string.format("(using cache: %s)",writable)) diff --git a/otfl-node-inj.lua b/otfl-node-inj.lua index e4380a4..bf6a609 100644 --- a/otfl-node-inj.lua +++ b/otfl-node-inj.lua @@ -6,7 +6,7 @@ if not modules then modules = { } end modules ['node-inj'] = { license = "see context related readme files" } --- tricky ... fonts.ids is not yet defined .. to be solved (maybe general tex ini) +-- tricky ... fonts.identifiers is not yet defined .. to be solved (maybe general tex ini) -- This is very experimental (this will change when we have luatex > .50 and -- a few pending thingies are available. Also, Idris needs to make a few more @@ -17,22 +17,22 @@ local next = next local trace_injections = false trackers.register("nodes.injections", function(v) trace_injections = v end) -local report_injections = logs.new("injections") +local report_injections = logs.reporter("nodes","injections") local attributes, nodes, node = attributes, nodes, node -fonts = fonts or { } -fonts.tfm = fonts.tfm or { } -fonts.ids = fonts.ids or { } +fonts = fonts or { } +fonts.tfm = fonts.tfm or { } +fonts.identifiers = fonts.identifiers or { } -nodes.injections = nodes.injections or { } -local injections = nodes.injections +nodes.injections = nodes.injections or { } +local injections = nodes.injections -local fontdata = fonts.ids -local nodecodes = nodes.nodecodes -local glyph_code = nodecodes.glyph -local nodepool = nodes.pool -local newkern = nodepool.kern +local fontdata = fonts.identifiers +local nodecodes = nodes.nodecodes +local glyph_code = nodecodes.glyph +local nodepool = nodes.pool +local newkern = nodepool.kern local traverse_id = node.traverse_id local unset_attribute = node.unset_attribute |