summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/context/base
diff options
context:
space:
mode:
authorTaco Hoekwater <taco@elvenkind.com>2008-06-12 10:42:53 +0000
committerTaco Hoekwater <taco@elvenkind.com>2008-06-12 10:42:53 +0000
commit0d01365d53c456d246da0ca1f0b3cd9868f02b35 (patch)
tree01a655c8028e17cfb371456b299c1848fe08c05b /Master/texmf-dist/tex/context/base
parent44f3714442da07fdfc36a7f2a8dcd5d4294c5d26 (diff)
ConTeXt release 2008.05.21
git-svn-id: svn://tug.org/texlive/trunk@8691 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/context/base')
-rw-r--r--Master/texmf-dist/tex/context/base/attr-ini.lua885
-rw-r--r--Master/texmf-dist/tex/context/base/attr-ini.tex249
-rw-r--r--Master/texmf-dist/tex/context/base/char-cmp.lua265
-rw-r--r--Master/texmf-dist/tex/context/base/char-def.lua122169
-rw-r--r--Master/texmf-dist/tex/context/base/char-def.tex50
-rw-r--r--Master/texmf-dist/tex/context/base/char-ini.lua408
-rw-r--r--Master/texmf-dist/tex/context/base/char-ini.tex29
-rw-r--r--Master/texmf-dist/tex/context/base/char-map.lua1072
-rw-r--r--Master/texmf-dist/tex/context/base/char-syn.lua140
-rw-r--r--Master/texmf-dist/tex/context/base/char-utf.lua477
-rw-r--r--Master/texmf-dist/tex/context/base/char-utf.tex65
-rw-r--r--Master/texmf-dist/tex/context/base/colo-hex.tex4
-rw-r--r--Master/texmf-dist/tex/context/base/colo-ini.tex383
-rw-r--r--Master/texmf-dist/tex/context/base/colo-new.lua547
-rw-r--r--Master/texmf-dist/tex/context/base/colo-new.mkii1857
-rw-r--r--Master/texmf-dist/tex/context/base/colo-new.mkiv331
-rw-r--r--Master/texmf-dist/tex/context/base/colo-new.tex1051
-rw-r--r--Master/texmf-dist/tex/context/base/colo-run.tex65
-rw-r--r--Master/texmf-dist/tex/context/base/cont-log.tex75
-rw-r--r--Master/texmf-dist/tex/context/base/cont-mtx.tex25
-rw-r--r--Master/texmf-dist/tex/context/base/cont-new.mkii2
-rw-r--r--Master/texmf-dist/tex/context/base/cont-new.mkiv157
-rw-r--r--Master/texmf-dist/tex/context/base/cont-new.tex297
-rw-r--r--Master/texmf-dist/tex/context/base/cont-sys.ori10
-rw-r--r--Master/texmf-dist/tex/context/base/cont-usr.ori2
-rw-r--r--Master/texmf-dist/tex/context/base/context-characters.lmx104
-rw-r--r--Master/texmf-dist/tex/context/base/context-debug.lmx108
-rw-r--r--Master/texmf-dist/tex/context/base/context-error.lmx55
-rw-r--r--Master/texmf-dist/tex/context/base/context.css226
-rw-r--r--Master/texmf-dist/tex/context/base/context.tex55
-rw-r--r--Master/texmf-dist/tex/context/base/core-bar.tex17
-rw-r--r--Master/texmf-dist/tex/context/base/core-blk.tex16
-rw-r--r--Master/texmf-dist/tex/context/base/core-box.tex44
-rw-r--r--Master/texmf-dist/tex/context/base/core-buf.lua471
-rw-r--r--Master/texmf-dist/tex/context/base/core-buf.mkii17
-rw-r--r--Master/texmf-dist/tex/context/base/core-buf.mkiv109
-rw-r--r--Master/texmf-dist/tex/context/base/core-buf.tex7
-rw-r--r--Master/texmf-dist/tex/context/base/core-con.lua168
-rw-r--r--Master/texmf-dist/tex/context/base/core-con.mkiv90
-rw-r--r--Master/texmf-dist/tex/context/base/core-con.tex14
-rw-r--r--Master/texmf-dist/tex/context/base/core-ctx.tex22
-rw-r--r--Master/texmf-dist/tex/context/base/core-def.tex13
-rw-r--r--Master/texmf-dist/tex/context/base/core-des.tex153
-rw-r--r--Master/texmf-dist/tex/context/base/core-fig.tex1296
-rw-r--r--Master/texmf-dist/tex/context/base/core-fil.tex24
-rw-r--r--Master/texmf-dist/tex/context/base/core-fld.tex2
-rw-r--r--Master/texmf-dist/tex/context/base/core-fnt.tex17
-rw-r--r--Master/texmf-dist/tex/context/base/core-grd.tex148
-rw-r--r--Master/texmf-dist/tex/context/base/core-inc.lua822
-rw-r--r--Master/texmf-dist/tex/context/base/core-inc.mkii1326
-rw-r--r--Master/texmf-dist/tex/context/base/core-inc.mkiv409
-rw-r--r--Master/texmf-dist/tex/context/base/core-inc.tex18
-rw-r--r--Master/texmf-dist/tex/context/base/core-int.tex775
-rw-r--r--Master/texmf-dist/tex/context/base/core-itm.tex499
-rw-r--r--Master/texmf-dist/tex/context/base/core-job.lua146
-rw-r--r--Master/texmf-dist/tex/context/base/core-job.mkii86
-rw-r--r--Master/texmf-dist/tex/context/base/core-job.mkiv28
-rw-r--r--Master/texmf-dist/tex/context/base/core-job.tex167
-rw-r--r--Master/texmf-dist/tex/context/base/core-lnt.tex2
-rw-r--r--Master/texmf-dist/tex/context/base/core-lst.tex69
-rw-r--r--Master/texmf-dist/tex/context/base/core-ltb.tex111
-rw-r--r--Master/texmf-dist/tex/context/base/core-mat.tex300
-rw-r--r--Master/texmf-dist/tex/context/base/core-mis.tex133
-rw-r--r--Master/texmf-dist/tex/context/base/core-nav.tex2
-rw-r--r--Master/texmf-dist/tex/context/base/core-new.tex70
-rw-r--r--Master/texmf-dist/tex/context/base/core-not.tex41
-rw-r--r--Master/texmf-dist/tex/context/base/core-ntb.tex1146
-rw-r--r--Master/texmf-dist/tex/context/base/core-num.tex4
-rw-r--r--Master/texmf-dist/tex/context/base/core-obj.lua36
-rw-r--r--Master/texmf-dist/tex/context/base/core-obj.mkii2
-rw-r--r--Master/texmf-dist/tex/context/base/core-obj.mkiv55
-rw-r--r--Master/texmf-dist/tex/context/base/core-obj.tex14
-rw-r--r--Master/texmf-dist/tex/context/base/core-par.tex6
-rw-r--r--Master/texmf-dist/tex/context/base/core-pgr.tex292
-rw-r--r--Master/texmf-dist/tex/context/base/core-pos.lua94
-rw-r--r--Master/texmf-dist/tex/context/base/core-pos.mkiv65
-rw-r--r--Master/texmf-dist/tex/context/base/core-pos.tex26
-rw-r--r--Master/texmf-dist/tex/context/base/core-ref.tex21
-rw-r--r--Master/texmf-dist/tex/context/base/core-reg.lua185
-rw-r--r--Master/texmf-dist/tex/context/base/core-reg.mkii33
-rw-r--r--Master/texmf-dist/tex/context/base/core-reg.mkiv57
-rw-r--r--Master/texmf-dist/tex/context/base/core-reg.tex195
-rw-r--r--Master/texmf-dist/tex/context/base/core-rul.tex160
-rw-r--r--Master/texmf-dist/tex/context/base/core-sec.tex187
-rw-r--r--Master/texmf-dist/tex/context/base/core-spa.lua1072
-rw-r--r--Master/texmf-dist/tex/context/base/core-spa.mkii46
-rw-r--r--Master/texmf-dist/tex/context/base/core-spa.mkiv369
-rw-r--r--Master/texmf-dist/tex/context/base/core-spa.tex947
-rw-r--r--Master/texmf-dist/tex/context/base/core-swd.tex129
-rw-r--r--Master/texmf-dist/tex/context/base/core-syn.lua116
-rw-r--r--Master/texmf-dist/tex/context/base/core-syn.mkii28
-rw-r--r--Master/texmf-dist/tex/context/base/core-syn.mkiv51
-rw-r--r--Master/texmf-dist/tex/context/base/core-syn.tex83
-rw-r--r--Master/texmf-dist/tex/context/base/core-sys.mkiv23
-rw-r--r--Master/texmf-dist/tex/context/base/core-sys.tex99
-rw-r--r--Master/texmf-dist/tex/context/base/core-tab.tex159
-rw-r--r--Master/texmf-dist/tex/context/base/core-tbl.tex206
-rw-r--r--Master/texmf-dist/tex/context/base/core-trf.tex13
-rw-r--r--Master/texmf-dist/tex/context/base/core-tsp.tex21
-rw-r--r--Master/texmf-dist/tex/context/base/core-two.lua83
-rw-r--r--Master/texmf-dist/tex/context/base/core-two.mkii26
-rw-r--r--Master/texmf-dist/tex/context/base/core-two.mkiv83
-rw-r--r--Master/texmf-dist/tex/context/base/core-two.tex1
-rw-r--r--Master/texmf-dist/tex/context/base/core-uti.lua29
-rw-r--r--Master/texmf-dist/tex/context/base/core-uti.mkii4
-rw-r--r--Master/texmf-dist/tex/context/base/core-uti.mkiv122
-rw-r--r--Master/texmf-dist/tex/context/base/core-uti.tex136
-rw-r--r--Master/texmf-dist/tex/context/base/core-var.tex87
-rw-r--r--Master/texmf-dist/tex/context/base/core-ver.mkii4
-rw-r--r--Master/texmf-dist/tex/context/base/core-ver.mkiv208
-rw-r--r--Master/texmf-dist/tex/context/base/core-ver.tex48
-rw-r--r--Master/texmf-dist/tex/context/base/enco-032.tex2
-rw-r--r--Master/texmf-dist/tex/context/base/enco-agr.tex90
-rw-r--r--Master/texmf-dist/tex/context/base/enco-cyr.tex20
-rw-r--r--Master/texmf-dist/tex/context/base/enco-def.tex18
-rw-r--r--Master/texmf-dist/tex/context/base/enco-ini.mkii34
-rw-r--r--Master/texmf-dist/tex/context/base/enco-ini.mkiv94
-rw-r--r--Master/texmf-dist/tex/context/base/enco-ini.tex101
-rw-r--r--Master/texmf-dist/tex/context/base/enco-pfr.mkiv22
-rw-r--r--Master/texmf-dist/tex/context/base/enco-pfr.tex50
-rw-r--r--Master/texmf-dist/tex/context/base/enco-raw.tex5
-rw-r--r--Master/texmf-dist/tex/context/base/enco-run.tex2
-rw-r--r--Master/texmf-dist/tex/context/base/enco-utf.tex5084
-rw-r--r--Master/texmf-dist/tex/context/base/filt-ini.tex2
-rw-r--r--Master/texmf-dist/tex/context/base/font-afm.lua745
-rw-r--r--Master/texmf-dist/tex/context/base/font-def.lua684
-rw-r--r--Master/texmf-dist/tex/context/base/font-enc.lua120
-rw-r--r--Master/texmf-dist/tex/context/base/font-ext.lua225
-rw-r--r--Master/texmf-dist/tex/context/base/font-fbk.lua236
-rw-r--r--Master/texmf-dist/tex/context/base/font-ini.lua68
-rw-r--r--Master/texmf-dist/tex/context/base/font-ini.mkii57
-rw-r--r--Master/texmf-dist/tex/context/base/font-ini.mkiv124
-rw-r--r--Master/texmf-dist/tex/context/base/font-ini.tex1125
-rw-r--r--Master/texmf-dist/tex/context/base/font-map.lua121
-rw-r--r--Master/texmf-dist/tex/context/base/font-otf.lua4811
-rw-r--r--Master/texmf-dist/tex/context/base/font-run.tex7
-rw-r--r--Master/texmf-dist/tex/context/base/font-syn.lua380
-rw-r--r--Master/texmf-dist/tex/context/base/font-tfm.lua721
-rw-r--r--Master/texmf-dist/tex/context/base/font-vf.lua246
-rw-r--r--Master/texmf-dist/tex/context/base/hand-ini.mkii698
-rw-r--r--Master/texmf-dist/tex/context/base/hand-ini.mkiv50
-rw-r--r--Master/texmf-dist/tex/context/base/hand-ini.tex671
-rw-r--r--Master/texmf-dist/tex/context/base/java-ini.tex2
-rw-r--r--Master/texmf-dist/tex/context/base/l-aux.lua110
-rw-r--r--Master/texmf-dist/tex/context/base/l-boolean.lua52
-rw-r--r--Master/texmf-dist/tex/context/base/l-dir.lua368
-rw-r--r--Master/texmf-dist/tex/context/base/l-file.lua166
-rw-r--r--Master/texmf-dist/tex/context/base/l-io.lua242
-rw-r--r--Master/texmf-dist/tex/context/base/l-lpeg.lua58
-rw-r--r--Master/texmf-dist/tex/context/base/l-math.lua25
-rw-r--r--Master/texmf-dist/tex/context/base/l-md5.lua18
-rw-r--r--Master/texmf-dist/tex/context/base/l-number.lua46
-rw-r--r--Master/texmf-dist/tex/context/base/l-os.lua69
-rw-r--r--Master/texmf-dist/tex/context/base/l-set.lua70
-rw-r--r--Master/texmf-dist/tex/context/base/l-string.lua358
-rw-r--r--Master/texmf-dist/tex/context/base/l-table.lua646
-rw-r--r--Master/texmf-dist/tex/context/base/l-tex.lua114
-rw-r--r--Master/texmf-dist/tex/context/base/l-unicode.lua148
-rw-r--r--Master/texmf-dist/tex/context/base/l-url.lua103
-rw-r--r--Master/texmf-dist/tex/context/base/l-utils.lua132
-rw-r--r--Master/texmf-dist/tex/context/base/l-xml-edu.lua381
-rw-r--r--Master/texmf-dist/tex/context/base/l-xml.lua2315
-rw-r--r--Master/texmf-dist/tex/context/base/lang-dis.tex50
-rw-r--r--Master/texmf-dist/tex/context/base/lang-ger.tex45
-rw-r--r--Master/texmf-dist/tex/context/base/lang-ind.tex2
-rw-r--r--Master/texmf-dist/tex/context/base/lang-ini.lua453
-rw-r--r--Master/texmf-dist/tex/context/base/lang-ini.mkii169
-rw-r--r--Master/texmf-dist/tex/context/base/lang-ini.mkiv82
-rw-r--r--Master/texmf-dist/tex/context/base/lang-ini.tex418
-rw-r--r--Master/texmf-dist/tex/context/base/lang-mis.tex350
-rw-r--r--Master/texmf-dist/tex/context/base/lang-sla.mkiv17
-rw-r--r--Master/texmf-dist/tex/context/base/lang-sla.tex65
-rw-r--r--Master/texmf-dist/tex/context/base/lang-url.lua92
-rw-r--r--Master/texmf-dist/tex/context/base/lang-url.mkii232
-rw-r--r--Master/texmf-dist/tex/context/base/lang-url.mkiv64
-rw-r--r--Master/texmf-dist/tex/context/base/lang-url.tex70
-rw-r--r--Master/texmf-dist/tex/context/base/luat-cbk.lua151
-rw-r--r--Master/texmf-dist/tex/context/base/luat-crl.lua53
-rw-r--r--Master/texmf-dist/tex/context/base/luat-deb.lua154
-rw-r--r--Master/texmf-dist/tex/context/base/luat-deb.tex49
-rw-r--r--Master/texmf-dist/tex/context/base/luat-env.lua218
-rw-r--r--Master/texmf-dist/tex/context/base/luat-env.tex172
-rw-r--r--Master/texmf-dist/tex/context/base/luat-exe.lua68
-rw-r--r--Master/texmf-dist/tex/context/base/luat-ini.lua26
-rw-r--r--Master/texmf-dist/tex/context/base/luat-ini.tex103
-rw-r--r--Master/texmf-dist/tex/context/base/luat-inp.lua2259
-rw-r--r--Master/texmf-dist/tex/context/base/luat-iop.lua157
-rw-r--r--Master/texmf-dist/tex/context/base/luat-kps.lua102
-rw-r--r--Master/texmf-dist/tex/context/base/luat-lib.lua160
-rw-r--r--Master/texmf-dist/tex/context/base/luat-lib.tex90
-rw-r--r--Master/texmf-dist/tex/context/base/luat-lmx.lua141
-rw-r--r--Master/texmf-dist/tex/context/base/luat-lmx.tex16
-rw-r--r--Master/texmf-dist/tex/context/base/luat-log.lua128
-rw-r--r--Master/texmf-dist/tex/context/base/luat-sta.lua183
-rw-r--r--Master/texmf-dist/tex/context/base/luat-tex.lua516
-rw-r--r--Master/texmf-dist/tex/context/base/luat-tmp.lua408
-rw-r--r--Master/texmf-dist/tex/context/base/luat-tra.lua108
-rw-r--r--Master/texmf-dist/tex/context/base/luat-tre.lua45
-rw-r--r--Master/texmf-dist/tex/context/base/luat-uni.lua23
-rw-r--r--Master/texmf-dist/tex/context/base/luat-uni.tex33
-rw-r--r--Master/texmf-dist/tex/context/base/luat-zip.lua220
-rw-r--r--Master/texmf-dist/tex/context/base/lxml-ini.lua791
-rw-r--r--Master/texmf-dist/tex/context/base/lxml-ini.tex304
-rw-r--r--Master/texmf-dist/tex/context/base/m-chart.tex7
-rw-r--r--Master/texmf-dist/tex/context/base/m-chemic.tex18
-rw-r--r--Master/texmf-dist/tex/context/base/m-cweb.tex12
-rw-r--r--Master/texmf-dist/tex/context/base/m-database.tex2
-rw-r--r--Master/texmf-dist/tex/context/base/m-edtsnc.tex2
-rw-r--r--Master/texmf-dist/tex/context/base/m-narrowtt.tex9
-rw-r--r--Master/texmf-dist/tex/context/base/m-newmat.tex60
-rw-r--r--Master/texmf-dist/tex/context/base/m-pdfsnc.tex2
-rw-r--r--Master/texmf-dist/tex/context/base/m-steps.tex4
-rw-r--r--Master/texmf-dist/tex/context/base/m-streams.tex3
-rw-r--r--Master/texmf-dist/tex/context/base/m-timing.tex249
-rw-r--r--Master/texmf-dist/tex/context/base/m-visual.tex7
-rw-r--r--Master/texmf-dist/tex/context/base/math-def.lua3035
-rw-r--r--Master/texmf-dist/tex/context/base/math-ent.lua2097
-rw-r--r--Master/texmf-dist/tex/context/base/math-ext.tex287
-rw-r--r--Master/texmf-dist/tex/context/base/math-ini.lua432
-rw-r--r--Master/texmf-dist/tex/context/base/math-ini.mkii14
-rw-r--r--Master/texmf-dist/tex/context/base/math-ini.mkiv46
-rw-r--r--Master/texmf-dist/tex/context/base/math-ini.tex102
-rw-r--r--Master/texmf-dist/tex/context/base/math-mis.tex2
-rw-r--r--Master/texmf-dist/tex/context/base/math-pln.tex10
-rw-r--r--Master/texmf-dist/tex/context/base/math-run.tex4
-rw-r--r--Master/texmf-dist/tex/context/base/math-tex.tex106
-rw-r--r--Master/texmf-dist/tex/context/base/meta-dum.tex38
-rw-r--r--Master/texmf-dist/tex/context/base/meta-fig.mkii89
-rw-r--r--Master/texmf-dist/tex/context/base/meta-fig.mkiv84
-rw-r--r--Master/texmf-dist/tex/context/base/meta-ini.mkii1083
-rw-r--r--Master/texmf-dist/tex/context/base/meta-ini.mkiv1124
-rw-r--r--Master/texmf-dist/tex/context/base/meta-mis.tex2
-rw-r--r--Master/texmf-dist/tex/context/base/meta-pag.tex22
-rw-r--r--Master/texmf-dist/tex/context/base/meta-pdf.lua620
-rw-r--r--Master/texmf-dist/tex/context/base/meta-pdf.mkii49
-rw-r--r--Master/texmf-dist/tex/context/base/meta-pdf.mkiv155
-rw-r--r--Master/texmf-dist/tex/context/base/meta-pdf.tex52
-rw-r--r--Master/texmf-dist/tex/context/base/meta-tex.mkii349
-rw-r--r--Master/texmf-dist/tex/context/base/meta-tex.mkiv35
-rw-r--r--Master/texmf-dist/tex/context/base/meta-txt.tex29
-rw-r--r--Master/texmf-dist/tex/context/base/meta-xml.tex2
-rw-r--r--Master/texmf-dist/tex/context/base/mlib-ctx.lua39
-rw-r--r--Master/texmf-dist/tex/context/base/mlib-ctx.tex81
-rw-r--r--Master/texmf-dist/tex/context/base/mlib-pdf.lua526
-rw-r--r--Master/texmf-dist/tex/context/base/mlib-pdf.tex90
-rw-r--r--Master/texmf-dist/tex/context/base/mlib-pps.lua832
-rw-r--r--Master/texmf-dist/tex/context/base/mlib-pps.tex61
-rw-r--r--Master/texmf-dist/tex/context/base/mlib-run.lua250
-rw-r--r--Master/texmf-dist/tex/context/base/mult-com.tex2
-rw-r--r--Master/texmf-dist/tex/context/base/mult-con.tex305
-rw-r--r--Master/texmf-dist/tex/context/base/mult-ini.lua56
-rw-r--r--Master/texmf-dist/tex/context/base/mult-ini.mkii131
-rw-r--r--Master/texmf-dist/tex/context/base/mult-ini.mkiv41
-rw-r--r--Master/texmf-dist/tex/context/base/mult-ini.tex318
-rw-r--r--Master/texmf-dist/tex/context/base/mult-sys.tex38
-rw-r--r--Master/texmf-dist/tex/context/base/node-ini.lua1042
-rw-r--r--Master/texmf-dist/tex/context/base/node-ini.tex56
-rw-r--r--Master/texmf-dist/tex/context/base/page-bck.tex2
-rw-r--r--Master/texmf-dist/tex/context/base/page-flt.tex595
-rw-r--r--Master/texmf-dist/tex/context/base/page-imp.tex18
-rw-r--r--Master/texmf-dist/tex/context/base/page-ini.tex51
-rw-r--r--Master/texmf-dist/tex/context/base/page-lin.lua236
-rw-r--r--Master/texmf-dist/tex/context/base/page-lin.mkii312
-rw-r--r--Master/texmf-dist/tex/context/base/page-lin.mkiv434
-rw-r--r--Master/texmf-dist/tex/context/base/page-log.tex2
-rw-r--r--Master/texmf-dist/tex/context/base/page-lyr.tex30
-rw-r--r--Master/texmf-dist/tex/context/base/page-mar.tex12
-rw-r--r--Master/texmf-dist/tex/context/base/page-mul.tex212
-rw-r--r--Master/texmf-dist/tex/context/base/page-new.tex12
-rw-r--r--Master/texmf-dist/tex/context/base/page-num.tex4
-rw-r--r--Master/texmf-dist/tex/context/base/page-one.tex73
-rw-r--r--Master/texmf-dist/tex/context/base/page-par.tex58
-rw-r--r--Master/texmf-dist/tex/context/base/page-str.tex4
-rw-r--r--Master/texmf-dist/tex/context/base/page-txt.tex5
-rw-r--r--Master/texmf-dist/tex/context/base/ppchtex.tex57
-rw-r--r--Master/texmf-dist/tex/context/base/prop-ini.tex41
-rw-r--r--Master/texmf-dist/tex/context/base/prop-lay.tex8
-rw-r--r--Master/texmf-dist/tex/context/base/prop-mis.mkii155
-rw-r--r--Master/texmf-dist/tex/context/base/prop-mis.mkiv46
-rw-r--r--Master/texmf-dist/tex/context/base/prop-mis.tex191
-rw-r--r--Master/texmf-dist/tex/context/base/regi-8859-1.lua26
-rw-r--r--Master/texmf-dist/tex/context/base/regi-8859-1.tex2
-rw-r--r--Master/texmf-dist/tex/context/base/regi-8859-10.lua26
-rw-r--r--Master/texmf-dist/tex/context/base/regi-8859-11.lua26
-rw-r--r--Master/texmf-dist/tex/context/base/regi-8859-13.lua26
-rw-r--r--Master/texmf-dist/tex/context/base/regi-8859-14.lua26
-rw-r--r--Master/texmf-dist/tex/context/base/regi-8859-15.lua26
-rw-r--r--Master/texmf-dist/tex/context/base/regi-8859-16.lua26
-rw-r--r--Master/texmf-dist/tex/context/base/regi-8859-2.lua26
-rw-r--r--Master/texmf-dist/tex/context/base/regi-8859-3.lua26
-rw-r--r--Master/texmf-dist/tex/context/base/regi-8859-4.lua26
-rw-r--r--Master/texmf-dist/tex/context/base/regi-8859-5.lua26
-rw-r--r--Master/texmf-dist/tex/context/base/regi-8859-6.lua26
-rw-r--r--Master/texmf-dist/tex/context/base/regi-8859-7.lua26
-rw-r--r--Master/texmf-dist/tex/context/base/regi-8859-8.lua26
-rw-r--r--Master/texmf-dist/tex/context/base/regi-8859-9.lua26
-rw-r--r--Master/texmf-dist/tex/context/base/regi-cp1250.lua26
-rw-r--r--Master/texmf-dist/tex/context/base/regi-cp1251.lua26
-rw-r--r--Master/texmf-dist/tex/context/base/regi-cp1252.lua26
-rw-r--r--Master/texmf-dist/tex/context/base/regi-cp1252.tex2
-rw-r--r--Master/texmf-dist/tex/context/base/regi-cp1253.lua26
-rw-r--r--Master/texmf-dist/tex/context/base/regi-cp1254.lua26
-rw-r--r--Master/texmf-dist/tex/context/base/regi-cp1255.lua26
-rw-r--r--Master/texmf-dist/tex/context/base/regi-cp1256.lua26
-rw-r--r--Master/texmf-dist/tex/context/base/regi-cp1257.lua26
-rw-r--r--Master/texmf-dist/tex/context/base/regi-cp1258.lua26
-rw-r--r--Master/texmf-dist/tex/context/base/regi-ini.lua110
-rw-r--r--Master/texmf-dist/tex/context/base/regi-ini.mkii58
-rw-r--r--Master/texmf-dist/tex/context/base/regi-ini.mkiv39
-rw-r--r--Master/texmf-dist/tex/context/base/regi-ini.tex2
-rw-r--r--Master/texmf-dist/tex/context/base/regi-utf.tex4
-rw-r--r--Master/texmf-dist/tex/context/base/rlxcache.rlx71
-rw-r--r--Master/texmf-dist/tex/context/base/s-abr-01.tex145
-rw-r--r--Master/texmf-dist/tex/context/base/s-cdr-01.tex131
-rw-r--r--Master/texmf-dist/tex/context/base/s-fnt-02.tex39
-rw-r--r--Master/texmf-dist/tex/context/base/s-mag-01.tex7
-rw-r--r--Master/texmf-dist/tex/context/base/s-map-10.tex6
-rw-r--r--Master/texmf-dist/tex/context/base/s-mod-02.tex7
-rw-r--r--Master/texmf-dist/tex/context/base/s-pre-64.tex203
-rw-r--r--Master/texmf-dist/tex/context/base/s-sys-01.tex61
-rw-r--r--Master/texmf-dist/tex/context/base/sort-def.mkii450
-rw-r--r--Master/texmf-dist/tex/context/base/sort-def.mkiv16
-rw-r--r--Master/texmf-dist/tex/context/base/sort-def.tex432
-rw-r--r--Master/texmf-dist/tex/context/base/sort-ini.lua181
-rw-r--r--Master/texmf-dist/tex/context/base/sort-ini.mkii149
-rw-r--r--Master/texmf-dist/tex/context/base/sort-ini.mkiv21
-rw-r--r--Master/texmf-dist/tex/context/base/sort-ini.tex133
-rw-r--r--Master/texmf-dist/tex/context/base/sort-lan.lua287
-rw-r--r--Master/texmf-dist/tex/context/base/sort-lan.mkii203
-rw-r--r--Master/texmf-dist/tex/context/base/sort-lan.mkiv16
-rw-r--r--Master/texmf-dist/tex/context/base/sort-lan.tex189
-rw-r--r--Master/texmf-dist/tex/context/base/spec-def.mkiv19
-rw-r--r--Master/texmf-dist/tex/context/base/spec-def.tex10
-rw-r--r--Master/texmf-dist/tex/context/base/spec-dpx.tex29
-rw-r--r--Master/texmf-dist/tex/context/base/spec-fdf.mkii2
-rw-r--r--Master/texmf-dist/tex/context/base/spec-fdf.mkiv19
-rw-r--r--Master/texmf-dist/tex/context/base/spec-fdf.tex99
-rw-r--r--Master/texmf-dist/tex/context/base/spec-mis.tex9
-rw-r--r--Master/texmf-dist/tex/context/base/spec-pdf.lua28
-rw-r--r--Master/texmf-dist/tex/context/base/spec-tpd.tex35
-rw-r--r--Master/texmf-dist/tex/context/base/spec-tst.tex2
-rw-r--r--Master/texmf-dist/tex/context/base/spec-xet.tex66
-rw-r--r--Master/texmf-dist/tex/context/base/spec-xtx.tex60
-rw-r--r--Master/texmf-dist/tex/context/base/supp-box.tex37
-rw-r--r--Master/texmf-dist/tex/context/base/supp-fil.lua79
-rw-r--r--Master/texmf-dist/tex/context/base/supp-fil.mkii4
-rw-r--r--Master/texmf-dist/tex/context/base/supp-fil.mkiv32
-rw-r--r--Master/texmf-dist/tex/context/base/supp-fil.tex165
-rw-r--r--Master/texmf-dist/tex/context/base/supp-fun.tex11
-rw-r--r--Master/texmf-dist/tex/context/base/supp-lan.tex34
-rw-r--r--Master/texmf-dist/tex/context/base/supp-mat.tex98
-rw-r--r--Master/texmf-dist/tex/context/base/supp-mps.tex33
-rw-r--r--Master/texmf-dist/tex/context/base/supp-pat.tex2
-rw-r--r--Master/texmf-dist/tex/context/base/supp-tpi.tex14
-rw-r--r--Master/texmf-dist/tex/context/base/symb-eur.tex2
-rw-r--r--Master/texmf-dist/tex/context/base/symb-glm.tex3
-rw-r--r--Master/texmf-dist/tex/context/base/symb-was.tex2
-rw-r--r--Master/texmf-dist/tex/context/base/syst-cat.mkiv120
-rw-r--r--Master/texmf-dist/tex/context/base/syst-cat.tex66
-rw-r--r--Master/texmf-dist/tex/context/base/syst-con.lua35
-rw-r--r--Master/texmf-dist/tex/context/base/syst-con.mkiv27
-rw-r--r--Master/texmf-dist/tex/context/base/syst-etx.tex4
-rw-r--r--Master/texmf-dist/tex/context/base/syst-ext.tex183
-rw-r--r--Master/texmf-dist/tex/context/base/syst-gen.tex8
-rw-r--r--Master/texmf-dist/tex/context/base/syst-mtx.tex4
-rw-r--r--Master/texmf-dist/tex/context/base/syst-new.tex29
-rw-r--r--Master/texmf-dist/tex/context/base/syst-omg.tex10
-rw-r--r--Master/texmf-dist/tex/context/base/syst-pdt.tex5
-rw-r--r--Master/texmf-dist/tex/context/base/syst-prm.tex46
-rw-r--r--Master/texmf-dist/tex/context/base/syst-rtp.mkiv18
-rw-r--r--Master/texmf-dist/tex/context/base/syst-str.mkiv27
-rw-r--r--Master/texmf-dist/tex/context/base/syst-xtx.tex8
-rw-r--r--Master/texmf-dist/tex/context/base/thrd-pic.tex6
-rw-r--r--Master/texmf-dist/tex/context/base/thrd-tab.tex101
-rw-r--r--Master/texmf-dist/tex/context/base/thrd-trg.tex54
-rw-r--r--Master/texmf-dist/tex/context/base/todo-mkii.tex1
-rw-r--r--Master/texmf-dist/tex/context/base/todo-mkiv.tex6
-rw-r--r--Master/texmf-dist/tex/context/base/toks-ini.lua323
-rw-r--r--Master/texmf-dist/tex/context/base/toks-ini.tex78
-rw-r--r--Master/texmf-dist/tex/context/base/type-buy.tex1074
-rw-r--r--Master/texmf-dist/tex/context/base/type-cbg.tex145
-rw-r--r--Master/texmf-dist/tex/context/base/type-cow.tex2
-rw-r--r--Master/texmf-dist/tex/context/base/type-def.tex122
-rw-r--r--Master/texmf-dist/tex/context/base/type-enc.tex110
-rw-r--r--Master/texmf-dist/tex/context/base/type-exa.tex241
-rw-r--r--Master/texmf-dist/tex/context/base/type-exp.tex95
-rw-r--r--Master/texmf-dist/tex/context/base/type-fsf.tex143
-rw-r--r--Master/texmf-dist/tex/context/base/type-ghz.tex84
-rw-r--r--Master/texmf-dist/tex/context/base/type-gyr.tex214
-rw-r--r--Master/texmf-dist/tex/context/base/type-ini.tex65
-rw-r--r--Master/texmf-dist/tex/context/base/type-map.tex144
-rw-r--r--Master/texmf-dist/tex/context/base/type-msw.tex50
-rw-r--r--Master/texmf-dist/tex/context/base/type-one.tex1175
-rw-r--r--Master/texmf-dist/tex/context/base/type-otf.tex767
-rw-r--r--Master/texmf-dist/tex/context/base/type-siz.tex21
-rw-r--r--Master/texmf-dist/tex/context/base/type-syn.tex335
-rw-r--r--Master/texmf-dist/tex/context/base/type-tmf.tex1090
-rw-r--r--Master/texmf-dist/tex/context/base/type-xtx.tex290
-rw-r--r--Master/texmf-dist/tex/context/base/unic-001.tex1
-rw-r--r--Master/texmf-dist/tex/context/base/unic-003.tex10
-rw-r--r--Master/texmf-dist/tex/context/base/unic-cjk.tex4
-rw-r--r--Master/texmf-dist/tex/context/base/unic-ini.mkii802
-rw-r--r--Master/texmf-dist/tex/context/base/unic-ini.mkiv48
-rw-r--r--Master/texmf-dist/tex/context/base/verb-ini.tex15
-rw-r--r--Master/texmf-dist/tex/context/base/verb-lua.lua212
-rw-r--r--Master/texmf-dist/tex/context/base/verb-mp.lua234
-rw-r--r--Master/texmf-dist/tex/context/base/verb-tex.lua122
-rw-r--r--Master/texmf-dist/tex/context/base/verb-xml.tex30
-rw-r--r--Master/texmf-dist/tex/context/base/x-cals.mkiv178
-rw-r--r--Master/texmf-dist/tex/context/base/x-cml.mkiv262
-rw-r--r--Master/texmf-dist/tex/context/base/x-contml.tex18
-rw-r--r--Master/texmf-dist/tex/context/base/x-ct.mkiv202
-rw-r--r--Master/texmf-dist/tex/context/base/x-fig-00.tex147
-rw-r--r--Master/texmf-dist/tex/context/base/x-fo.tex4
-rw-r--r--Master/texmf-dist/tex/context/base/x-ldx.ctx23
-rw-r--r--Master/texmf-dist/tex/context/base/x-ldx.tex133
-rw-r--r--Master/texmf-dist/tex/context/base/x-mathml.lua300
-rw-r--r--Master/texmf-dist/tex/context/base/x-mmb.mkiv256
-rw-r--r--Master/texmf-dist/tex/context/base/x-mmc.mkiv2201
-rw-r--r--Master/texmf-dist/tex/context/base/x-mml.mkiv49
-rw-r--r--Master/texmf-dist/tex/context/base/x-mmp.mkiv497
-rw-r--r--Master/texmf-dist/tex/context/base/x-newcml.tex4
-rw-r--r--Master/texmf-dist/tex/context/base/x-newmme.tex22
-rw-r--r--Master/texmf-dist/tex/context/base/x-newmml.tex352
-rw-r--r--Master/texmf-dist/tex/context/base/x-newmmo.tex92
-rw-r--r--Master/texmf-dist/tex/context/base/x-om2cml.xsl67
-rw-r--r--Master/texmf-dist/tex/context/base/x-res-01.tex5
-rw-r--r--Master/texmf-dist/tex/context/base/x-res-04.tex99
-rw-r--r--Master/texmf-dist/tex/context/base/x-res-08.tex13
-rw-r--r--Master/texmf-dist/tex/context/base/x-res-12.tex2
-rw-r--r--Master/texmf-dist/tex/context/base/x-res-20.tex2
-rw-r--r--Master/texmf-dist/tex/context/base/x-set-11.mkii39
-rw-r--r--Master/texmf-dist/tex/context/base/x-set-11.mkiv98
-rw-r--r--Master/texmf-dist/tex/context/base/x-set-11.tex68
-rw-r--r--Master/texmf-dist/tex/context/base/x-sm2om.xsl4
-rw-r--r--Master/texmf-dist/tex/context/base/x-xml-02.tex4
-rw-r--r--Master/texmf-dist/tex/context/base/xtag-ent.tex9
-rw-r--r--Master/texmf-dist/tex/context/base/xtag-exp.tex6
-rw-r--r--Master/texmf-dist/tex/context/base/xtag-ext.tex27
-rw-r--r--Master/texmf-dist/tex/context/base/xtag-ini.tex24
-rw-r--r--Master/texmf-dist/tex/context/base/xtag-map.tex2
-rw-r--r--Master/texmf-dist/tex/context/base/xtag-mml.tex2
-rw-r--r--Master/texmf-dist/tex/context/base/xtag-mmp.tex4
-rw-r--r--Master/texmf-dist/tex/context/base/xtag-pre.tex2
-rw-r--r--Master/texmf-dist/tex/context/base/xtag-run.tex2
-rw-r--r--Master/texmf-dist/tex/context/base/xtag-stk.tex2
446 files changed, 198115 insertions, 13450 deletions
diff --git a/Master/texmf-dist/tex/context/base/attr-ini.lua b/Master/texmf-dist/tex/context/base/attr-ini.lua
new file mode 100644
index 00000000000..c339d467214
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/attr-ini.lua
@@ -0,0 +1,885 @@
+if not modules then modules = { } end modules ['attr-ini'] = {
+ version = 1.001,
+ comment = "companion to attr-ini.tex",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- todo: document this
+
+-- nb: attributes: color etc is much slower than normal (marks + literals) but ...
+-- nb. too many "0 g"s
+
+--
+-- nodes
+--
+
+nodes = nodes or { }
+
+local format, concat = string.format, table.concat
+
+-- This is not the most ideal place, but it will do. Maybe we need to move
+-- attributes to node-att.lua.
+
+do
+
+ -- just for testing
+
+ local reserved = { }
+
+ function nodes.register(n)
+ reserved[#reserved+1] = n
+ end
+
+ function nodes.cleanup_reserved(nofboxes) -- todo
+ local nr, free = #reserved, node.free
+ for i=1,nr do
+ free(reserved[i])
+ end
+ local nl, tb, flush = 0, tex.box, node.flush_list
+ if nofboxes then
+ for i=1,nofboxes do
+ local l = tb[i]
+ if l then
+ -- flush(l)
+ tb[i] = nil
+ nl = nl + 1
+ end
+ end
+ end
+ reserved = { }
+ return nr, nl, nofboxes
+ end
+
+end
+
+do
+
+ local pdfliteral = node.new("whatsit",8) pdfliteral.next, pdfliteral.prev = nil, nil pdfliteral.mode = 1
+ local disc = node.new("disc") disc.next, disc.prev = nil, nil
+ local kern = node.new("kern",1) kern.next, kern.prev = nil, nil
+ local penalty = node.new("penalty") penalty.next, penalty.prev = nil, nil
+ local glue = node.new("glue") glue.next, glue.prev = nil, nil
+ local glue_spec = node.new("glue_spec") glue_spec.next, glue_spec.prev = nil, nil
+ local glyph = node.new("glyph",0) glyph.next, glyph.prev = nil, nil
+
+ nodes.register(pdfliteral)
+ nodes.register(disc)
+ nodes.register(kern)
+ nodes.register(penalty)
+ nodes.register(glue)
+ nodes.register(glue_spec)
+ nodes.register(glyph)
+
+ local copy = node.copy
+
+ function nodes.glyph(fnt,chr)
+ local n = copy(glyph)
+ if fnt then n.font = fnt end
+ if chr then n.char = chr end
+ return n
+ end
+ function nodes.penalty(p)
+ local n = copy(penalty)
+ n.penalty = p
+ return n
+ end
+ function nodes.kern(k)
+ local n = copy(kern)
+ n.kern = k
+ return n
+ end
+ function nodes.glue(width,stretch,shrink)
+ local n = copy(glue)
+ local s = copy(glue_spec)
+ s.width, s.stretch, s.shrink = width, stretch, shrink
+ n.spec = s
+ return n
+ end
+ function nodes.glue_spec(width,stretch,shrink)
+ local s = copy(glue_spec)
+ s.width, s.stretch, s.shrink = width, stretch, shrink
+ return s
+ end
+
+ function nodes.disc()
+ return copy(disc)
+ end
+
+ function nodes.pdfliteral(str)
+ local t = copy(pdfliteral)
+ t.data = str
+ return t
+ end
+
+end
+
+function tex.node_mem_status()
+ -- todo: lpeg
+ local s = status.node_mem_usage
+ local t = { }
+ for n, tag in s:gmatch("(%d+) ([a-z_]+)") do
+ t[tag] = n
+ end
+ return t
+end
+
+--
+-- attributes
+--
+
+attributes = attributes or { }
+
+attributes.names = attributes.names or { }
+attributes.numbers = attributes.numbers or { }
+attributes.list = attributes.list or { }
+
+input.storage.register(false,"attributes/names", attributes.names, "attributes.names")
+input.storage.register(false,"attributes/numbers", attributes.numbers, "attributes.numbers")
+input.storage.register(false,"attributes/list", attributes.list, "attributes.list")
+
+function attributes.define(name,number)
+ attributes.numbers[name], attributes.names[number], attributes.list[number] = number, name, { }
+end
+
+-- We can distinguish between rules and glyphs but it's not worth the trouble. A
+-- first implementation did that and while it saves a bit for glyphs and rules, it
+-- costs more resourses for transparencies. So why bother.
+
+-- namespace for all those features / plural becomes singular
+
+-- i will do the resource stuff later, when we have an interface to pdf (ok, i can
+-- fake it with tokens but it will take some coding
+
+function totokens(str)
+ local t = { }
+--~ for c in string.bytes(str) do
+ for c in str:bytes() do
+ t[#t+1] = { 12, c }
+ end
+ return t
+end
+
+-- temp hack, will be proper driver stuff
+
+backends = backends or { }
+backends.pdf = backends.pdf or { }
+backend = backend or backends.pdf
+
+do
+
+ local pdfliteral, register = nodes.pdfliteral, nodes.register
+
+ function backends.pdf.literal(str)
+ local t = pdfliteral(str)
+ register(t)
+ return t
+ end
+
+end
+
+-- shipouts
+
+shipouts = shipouts or { }
+shipouts.plugins = shipouts.plugins or { }
+
+do
+
+ local pairs = pairs -- in theory faster
+
+ local hlist, vlist = node.id('hlist'), node.id('vlist')
+
+ local has_attribute = node.has_attribute
+
+ nodes.trigger = nodes.trigger or false
+ nodes.triggering = nodes.triggering or false
+
+ -- we used to do the main processor loop here and call processor for each node
+ -- but eventually this was too much a slow down (1 sec on 23 for 120 pages mk)
+ -- so that we moved looping to the processor itself; this may lead to a bit of
+ -- duplicate code once that we have more state handlers
+
+ local starttiming, stoptiming = input.starttiming, input.stoptiming
+
+ local function process_attributes(head,plugins)
+ if head then -- is already tested
+ starttiming(attributes)
+ local done, used = false, { }
+ local trigger, numbers = nodes.trigger, attributes.numbers
+ for name, plugin in pairs(plugins) do
+ local attribute = numbers[name]
+ if attribute then
+ local namespace = plugin.namespace
+ if namespace.enabled then
+ local initializer = plugin.initializer
+ local processor = plugin.processor
+ local finalizer = plugin.finalizer
+ local resolver = plugin.resolver
+ if initializer then
+ initializer(namespace,attribute,head)
+ end
+ if processor then
+ local inheritance = (resolver and resolver()) or -1
+ local ok -- = false
+ head, ok = processor(namespace,attribute,head,inheritance)
+ done = done or ok
+ end
+ if finalizer then -- no need when not ok
+ local ok -- = false
+ head, ok, used[attribute] = finalizer(namespace,attribute,head)
+ done = done or ok
+ end
+ end
+ else
+ texio.write_nl(format("undefined attribute %s",name))
+ end
+ end
+ if done then
+ for name, plugin in pairs(plugins) do
+ local attribute = numbers[name]
+ if used[attribute] then
+ local namespace = plugin.namespace
+ if namespace.enabled then
+ local flusher = plugin.flusher
+ if flusher then
+ local h, d = flusher(namespace,attribute,head,used[attribute])
+ head = h
+ end
+ end
+ end
+ end
+ end
+ stoptiming(attributes)
+ return head, done
+ else
+ return head, false
+ end
+ end
+
+ nodes.process_attributes = process_attributes
+
+ --~ glyph = 746876
+ --~ glue = 376096
+ --~ hlist = 152284
+ --~ disc = 47224
+ --~ kern = 41504
+ --~ penalty = 31964
+ --~ whatsit = 29048
+ --~ vlist = 20136
+ --~ rule = 13292
+ --~ mark = 4304
+ --~ math = 1072
+
+ local disc, mark, free = node.id('disc'), node.id('mark'), node.free
+
+ local function cleanup_page(head) -- rough
+ local prev, start = nil, head
+ while start do
+ local id, nx = start.id, start.next
+ if id == disc or id == mark then
+ if prev then
+ prev.next = nx
+ end
+ if start == head then
+ head = nx
+ end
+ local tmp = start
+ start = nx
+ free(tmp)
+ elseif id == hlist or id == vlist then
+ local sl = start.list
+ if sl then
+ start.list = cleanup_page(sl)
+ end
+ prev, start = start, nx
+ else
+ prev, start = start, nx
+ end
+ end
+ return head
+ end
+
+ nodes.cleanup_page = cleanup_page
+
+ nodes.cleanup_page_first = false
+
+ function nodes.process_page(head)
+ if nodes.cleanup_page_first then
+ head = cleanup_page(head)
+ end
+ return process_attributes(head,shipouts.plugins)
+ end
+
+end
+
+--
+-- generic handlers
+--
+
+states = { }
+
+do
+
+ local glyph, rule, whatsit, hlist, vlist = node.id('glyph'), node.id('rule'), node.id('whatsit'), node.id('hlist'), node.id('vlist')
+
+ local has_attribute, copy = node.has_attribute, node.copy
+
+ local current, used, done = 0, { }, false
+
+ function states.initialize(what, attribute, stack)
+ current, used, done = 0, { }, false
+ end
+
+ local function insert(n,stack,previous,head) -- there is a helper, we need previous because we are not slided
+ if n then
+ n = copy(n)
+ n.next = stack
+ if previous then
+ previous.next = n
+ else
+ head = n
+ end
+ previous = n
+ end
+ return stack, head
+ end
+
+ function states.finalize(namespace,attribute,head) -- is this one ok?
+ if current > 0 then
+ local nn = namespace.none
+ if nn then
+ local id = head.id
+ if id == hlist or id == vlist then
+ local list = head.list
+ if list then
+ local _, h = insert(nn,list,nil,list)
+ head.list = h
+ end
+ else
+ stack, head = insert(nn,head,nil,head)
+ end
+ return head, true, true
+ end
+ end
+ return head, false, false
+ end
+
+ local function process(namespace,attribute,head,inheritance,default) -- one attribute
+ local trigger = namespace.triggering and nodes.triggering and nodes.trigger
+ local stack, previous, done = head, nil, false
+ local nsdata, nsreviver, nsnone = namespace.data, namespace.reviver, namespace.none
+ while stack do
+ local id = stack.id
+ if id == glyph or id == whatsit or id == rule then -- or disc
+ local c = has_attribute(stack,attribute)
+ if c then
+ if default and c == inheritance then
+ if current ~= default then
+ local data = nsdata[default] or nsreviver(default)
+ stack, head = insert(data,stack,previous,head)
+ current, done, used[default] = default, true, true
+ end
+ elseif current ~= c then
+ local data = nsdata[c] or nsreviver(c)
+ stack, head = insert(data,stack,previous,head)
+ current, done, used[c] = c, true, true
+ end
+ elseif default and inheritance then
+ if current ~= default then
+ local data = nsdata[default] or nsreviver(default)
+ stack, head = insert(data,stack,previous,head)
+ current, done, used[default] = default, true, true
+ end
+ elseif current > 0 then
+ stack, head = insert(nsnone,stack,previous,head)
+ current, done, used[0] = 0, true, true
+ end
+ elseif id == hlist or id == vlist then
+ local content = stack.list
+ if content then
+ local ok = false
+ if trigger and has_attribute(stack,trigger) then
+ local outer = has_attribute(stack,attribute)
+ if outer ~= inheritance then
+ stack.list, ok = process(namespace,attribute,content,inheritance,outer)
+ else
+ stack.list, ok = process(namespace,attribute,content,inheritance,default)
+ end
+ else
+ stack.list, ok = process(namespace,attribute,content,inheritance,default)
+ end
+ done = done or ok
+ end
+ end
+ previous = stack
+ stack = stack.next
+ end
+ return head, done
+ end
+
+ states.process = process
+
+ -- we can force a selector, e.g. document wide color spaces, saves a little
+
+ local function selective(namespace,attribute,head,inheritance,default) -- two attributes
+ local trigger = namespace.triggering and nodes.triggering and nodes.trigger
+ local stack, previous, done = head, nil, false
+ local nsselector, nsforced, nsselector = namespace.default, namespace.forced, namespace.selector
+ local nsdata, nsreviver, nsnone = namespace.data, namespace.reviver, namespace.none
+ while stack do
+ local id = stack.id
+ if id == glyph or id == whatsit or id == rule then -- or disc
+ -- todo: maybe track two states, also selector
+ local c = has_attribute(stack,attribute)
+ if c then
+ if default and c == inheritance then
+ if current ~= default then
+ local data = nsdata[default] or nsreviver(default)
+ stack, head = insert(data[nsforced or has_attribute(stack,nsselector) or nsselector],stack,previous,head)
+ current, done, used[default] = default, true, true
+ end
+ elseif current ~= c then
+ local data = nsdata[c] or nsreviver(c)
+ stack, head = insert(data[nsforced or has_attribute(stack,nsselector) or nsselector],stack,previous,head)
+ current, done, used[c] = c, true, true
+ end
+ elseif default and inheritance then
+ if current ~= default then
+ local data = nsdata[default] or nsreviver(default)
+ stack, head = insert(data[nsforced or has_attribute(stack,nsselector) or nsselector],stack,previous,head)
+ current, done, used[default] = default, true, true
+ end
+ elseif current > 0 then
+ stack, head = insert(nsnone,stack,previous,head)
+ current, done, used[0] = 0, true, true
+ end
+ elseif id == hlist or id == vlist then
+ local content = stack.list
+ if content then
+ local ok = false
+ if trigger and has_attribute(stack,trigger) then
+ local outer = has_attribute(stack,attribute)
+ if outer ~= inheritance then
+ stack.list, ok = selective(namespace,attribute,content,inheritance,outer)
+ else
+ stack.list, ok = selective(namespace,attribute,content,inheritance,default)
+ end
+ else
+ stack.list, ok = selective(namespace,attribute,content,inheritance,default)
+ end
+ done = done or ok
+ end
+ end
+ previous = stack
+ stack = stack.next
+ end
+ return head, done
+ end
+
+ states.selective = selective
+
+end
+
+states = states or { }
+states.collected = states.collected or { }
+
+input.storage.register(false,"states/collected", states.collected, "states.collected")
+
+function states.collect(str)
+ local collected = states.collected
+ collected[#collected+1] = str
+end
+
+function states.flush()
+ local collected = states.collected
+ if #collected > 0 then
+ for i=1,#collected do
+ tex.sprint(tex.ctxcatcodes,collected[i]) -- we're in context mode anyway
+ end
+ states.collected = { }
+ end
+end
+
+function states.check()
+ texio.write_nl(concat(states.collected,"\n"))
+end
+
+--
+-- colors
+--
+
+-- we can also collapse the two attributes: n, n+1, n+2 and then
+-- at the tex end add 0, 1, 2, but this is not faster and less
+-- flexible (since sometimes we freeze color attribute values at
+-- the lua end of the game
+
+-- we also need to store the colorvalues because we need then in mp
+
+colors = colors or { }
+colors.data = colors.data or { }
+colors.values = colors.values or { }
+colors.registered = colors.registered or { }
+colors.enabled = true
+colors.weightgray = true
+colors.attribute = 0
+colors.selector = 0
+colors.default = 1
+colors.main = nil
+colors.triggering = true
+
+-- This is a compromis between speed and simplicity. We used to store the
+-- values and data in one array, which made in neccessary to store the
+-- converters that need node constructor into strings and evaluate them
+-- at runtime (after reading from storage). Think of:
+--
+-- colors.strings = colors.strings or { }
+--
+-- if environment.initex then
+-- colors.strings[color] = "return colors." .. colorspace .. "(" .. concat({...},",") .. ")"
+-- end
+--
+-- input.storage.register(true,"colors/data", colors.strings, "colors.data") -- evaluated
+--
+-- We assume that only processcolors are defined in the format.
+
+input.storage.register(false,"colors/values", colors.values, "colors.values")
+input.storage.register(false,"colors/registered", colors.registered, "colors.registered")
+
+colors.stamps = {
+ rgb = "r:%s:%s:%s",
+ cmyk = "c:%s:%s:%s:%s",
+ gray = "s:%s",
+ spot = "p:%s:%s:%s:%s"
+}
+
+colors.models = {
+ all = 1,
+ gray = 2,
+ rgb = 3,
+ cmyk = 4,
+}
+
+colors.model = "all"
+
+do
+
+ local min = math.min
+ local max = math.max
+
+ local function rgbdata(r,g,b) -- dodo: backends.pdf.rgbdata
+ return backends.pdf.literal(format("%s %s %s rg %s %s %s RG",r,g,b,r,g,b))
+ end
+
+ local function cmykdata(c,m,y,k)
+ return backends.pdf.literal(format("%s %s %s %s k %s %s %s %s K",c,m,y,k,c,m,y,k))
+ end
+
+ local function graydata(s)
+ return backends.pdf.literal(format("%s g %s G",s,s))
+ end
+
+ local function spotdata(n,f,d,p)
+ if type(p) == "string" then
+ p = p:gsub(","," ") -- brr misuse of spot
+ end
+ return backends.pdf.literal(format("/%s cs /%s CS %s SCN %s scn",n,n,p,p))
+ end
+
+ local function rgbtocmyk(r,g,b) -- we could reduce
+ return 1-r, 1-g, 1-b, 0
+ end
+
+ local function cmyktorgb(c,m,y,k)
+ return 1.0 - min(1.0,c+k), 1.0 - min(1.0,m+k), 1.0 - min(1.0,y+k)
+ end
+
+ local function rgbtogray(r,g,b)
+ if colors.weightgray then
+ return .30*r+.59*g+.11*b
+ else
+ return r/3+g/3+b/3
+ end
+ end
+
+ local function cmyktogray(c,m,y,k)
+ return rgbtogray(cmyktorgb(c,m,y,k))
+ end
+
+ colors.rgbtocmyk = rgbtocmyk
+ colors.rgbtogray = rgbtogray
+ colors.cmyktorgb = cmyktorgb
+ colors.cmyktogray = cmyktogray
+
+ -- we can share some *data by using s, rgb and cmyk hashes, but
+ -- normally the amount of colors is not that large; storing the
+ -- components costs a bit of extra runtime, but we expect to gain
+ -- some back because we have them at hand; the number indicates the
+ -- default color space
+
+ function colors.gray(s)
+ return { 2, s, s, s, s, 0, 0, 0, 1-s }
+ end
+
+ function colors.rgb(r,g,b)
+ local s = rgbtogray(r,g,b)
+ local c, m, y, k = rgbtocmyk(r,g,b)
+ return { 3, s, r, g, b, c, m, y, k }
+ end
+
+ function colors.cmyk(c,m,y,k)
+ local s = cmyktogray(c,m,y,k)
+ local r, g, b = cmyktorgb(c,m,y,k)
+ return { 4, s, r, g, b, c, m, y, k }
+ end
+
+ function colors.spot(parent,f,d,p)
+--~ if type(p) == "string" and p:find(",") then
+--~ -- use converted replacement (combination color)
+--~ else
+--~ -- todo: map gray, rgb, cmyk onto fraction*parent
+--~ end
+ return { 5, .5, .5, .5, .5, 0, 0, 0, .5, parent, f, d, p }
+ end
+
+ function colors.reviver(n)
+ local d = colors.data[n]
+ if not d then
+ local v = colors.values[n]
+ if not v then
+ local gray = graydata(0)
+ d = { gray, gray, gray, gray }
+ logs.report("attributes",format("unable to revive color %s",n or "?"))
+ else
+ local kind, gray, rgb, cmyk = v[1], graydata(v[2]), rgbdata(v[3],v[4],v[5]), cmykdata(v[6],v[7],v[8],v[9])
+ if kind == 2 then
+ d = { gray, gray, gray, gray }
+ elseif kind == 3 then
+ d = { rgb, gray, rgb, cmyk }
+ elseif kind == 4 then
+ d = { cmyk, gray, rgb, cmyk }
+ elseif kind == 5 then
+ local spot = spotdata(v[10],v[11],v[12],v[13])
+ d = { spot, gray, rgb, cmyk }
+ end
+ end
+ colors.data[n] = d
+ end
+ return d
+ end
+
+ function colors.filter(n)
+ return concat(colors.data[n],":",5)
+ end
+
+ colors.none = graydata(0)
+
+end
+
+function colors.setmodel(attribute,name)
+ colors.model = name
+ colors.selector = attributes.numbers[attribute]
+ colors.default = colors.models[name] or 1
+ return colors.default
+end
+
+function colors.register(attribute, name, colorspace, ...) -- passing 9 vars is faster
+ local stamp = format(colors.stamps[colorspace], ...)
+ local color = colors.registered[stamp]
+ if not color then
+ color = #colors.values+1
+ colors.values[color] = colors[colorspace](...)
+ colors.registered[stamp] = color
+ colors.reviver(color)
+ end
+ if name then
+ attributes.list[attributes.numbers[attribute]][name] = color -- not grouped, so only global colors
+ end
+ return colors.registered[stamp]
+end
+
+function colors.value(id)
+ return colors.values[id]
+end
+
+shipouts.plugins.color = {
+ namespace = colors,
+ initializer = states.initialize,
+ finalizer = states.finalize,
+ processor = states.selective,
+ resolver = function(...) return colors.main end,
+}
+
+-- transparencies
+
+-- for the moment we manage transparencies in the pdf driver because
+-- first we need a nice interface to some pdf things
+
+transparencies = transparencies or { }
+transparencies.registered = transparencies.registered or { }
+transparencies.data = transparencies.data or { }
+transparencies.values = transparencies.values or { }
+transparencies.enabled = false
+transparencies.template = "%s:%s"
+transparencies.triggering = true
+
+input.storage.register(false, "transparencies/registered", transparencies.registered, "transparencies.registered")
+input.storage.register(false, "transparencies/values", transparencies.values, "transparencies.values")
+
+function transparencies.reference(n)
+ return backends.pdf.literal(format("/Tr%s gs",n))
+end
+
+function transparencies.register(name,a,t)
+ local stamp = format(transparencies.template,a,t)
+ local n = transparencies.registered[stamp]
+ if not n then
+ n = #transparencies.data+1
+ transparencies.data[n] = transparencies.reference(n)
+ transparencies.values[n] = { a, t }
+ transparencies.registered[stamp] = n
+ states.collect(format("\\presetPDFtransparencybynumber{%s}{%s}{%s}",n,a,t)) -- too many, but experimental anyway
+ end
+ return transparencies.registered[stamp]
+end
+
+function transparencies.reviver(n)
+ local d = transparencies.data[n]
+ if not d then
+ local v = transparencies.values[n]
+ if not v then
+ d = transparencies.reference(0)
+ logs.report("attributes",format("unable to revive transparency %s",n or "?"))
+ else
+ d = transparencies.reference(n)
+ states.collect(format("\\presetPDFtransparencybynumber{%s}{%s}{%s}",n,v[1],v[2]))
+ end
+ transparencies.data[n] = d
+ end
+ return d
+end
+
+-- check if there is an identity
+
+--~ transparencies.none = transparencies.reference(transparencies.register(nil,1,1))
+
+transparencies.none = transparencies.reference(0) -- for the moment the pdf backend does this
+
+function transparencies.value(id)
+ return transparencies.values[id]
+end
+
+shipouts.plugins.transparency = {
+ namespace = transparencies,
+ initializer = states.initialize,
+ finalizer = states.finalize ,
+ processor = states.process ,
+}
+
+--- overprint / knockout
+
+overprints = overprints or { }
+overprints.data = overprints.data or { }
+overprints.enabled = false
+
+overprints.data[1] = backends.pdf.literal(format("/GSoverprint gs"))
+overprints.data[2] = backends.pdf.literal(format("/GSknockout gs"))
+
+overprints.none = overprints.data[1]
+
+overprints.registered = {
+ overprint = 1,
+ knockout = 2,
+}
+
+function overprints.register(stamp)
+-- states.collect(tex.sprint(tex.ctxcatcodes,"\\initializePDFoverprint")) -- to be testd
+ return overprints.registered[stamp] or overprints.registered.overprint
+end
+
+shipouts.plugins.overprint = {
+ namespace = overprints,
+ initializer = states.initialize,
+ finalizer = states.finalize ,
+ processor = states.process ,
+}
+
+--- negative / positive
+
+negatives = netatives or { }
+negatives.data = negatives.data or { }
+negatives.enabled = false
+
+negatives.data[1] = backends.pdf.literal(format("/GSpositive gs"))
+negatives.data[2] = backends.pdf.literal(format("/GSnegative gs"))
+
+negatives.none = negatives.data[1]
+
+negatives.registered = {
+ positive = 1,
+ negative = 2,
+}
+
+function negatives.register(stamp)
+-- states.collect(tex.sprint(tex.ctxcatcodes,"\\initializePDFnegative")) -- to be testd
+ return negatives.registered[stamp] or negatives.registered.positive
+end
+
+shipouts.plugins.negative = {
+ namespace = negatives,
+ initializer = states.initialize,
+ finalizer = states.finalize,
+ processor = states.process,
+}
+
+-- effects
+
+effects = effects or { }
+effects.data = effects.data or { }
+effects.registered = effects.registered or { }
+effects.enabled = false
+effects.stamp = "%s:%s:%s"
+
+input.storage.register(false, "effects/registered", effects.registered, "effects.registered")
+input.storage.register(false, "effects/data", effects.data, "effects.data")
+
+function effects.register(effect,stretch,rulethickness)
+ local stamp = format(effects.stamp,effect,stretch,rulethickness)
+ local n = effects.registered[stamp]
+ if not n then
+ n = #effects.data+1
+ effects.data[n] = effects.reference(effect,stretch,rulethickness)
+ effects.registered[stamp] = n
+ -- states.collect("") -- nothing
+ end
+ return effects.registered[stamp]
+end
+
+backends.pdf.effects = {
+ normal = 0,
+ inner = 0,
+ outer = 1,
+ both = 2,
+ hidden = 3,
+}
+
+function effects.reference(effect,stretch,rulethickness)
+ -- always, no zero test (removed)
+ rulethickness = number.dimenfactors["bp"]*rulethickness
+ effect = backends.pdf.effects[effect] or backends.pdf.effects['normal']
+ return backends.pdf.literal(format("%s Tc %s w %s Tr",stretch,rulethickness,effect)) -- watch order
+end
+
+effects.none = effects.reference(0,0,0) -- faster: backends.pdf.literal("0 Tc 0 w 0 Tr")
+
+shipouts.plugins.effect = {
+ namespace = effects,
+ initializer = states.initialize,
+ finalizer = states.finalize,
+ processor = states.process,
+}
+
+-- layers
+
+--~ /OC /somename BDC
+--~ EMC
diff --git a/Master/texmf-dist/tex/context/base/attr-ini.tex b/Master/texmf-dist/tex/context/base/attr-ini.tex
new file mode 100644
index 00000000000..5cd49818c27
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/attr-ini.tex
@@ -0,0 +1,249 @@
+%D \module
+%D [ file=attr-ini,
+%D version=2007.06.06,
+%D title=\CONTEXT\ Attribute Macros,
+%D subtitle=Initialization,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright=PRAGMA-ADE]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{Context Attribute Macros / initialization}
+
+%D Although it's still somewhat experimental, here we introduce code
+%D related to attributes.
+
+\unprotect
+
+\registerctxluafile{attr-ini}{1.001}
+
+\newcount\attdefcounter
+
+% \def\newattribute#1%
+% {\global\advance\attdefcounter\plusone
+% \global\attributedef#1\attdefcounter
+% \ctxlua{attributes.define("\strippedcsname#1",\number\attdefcounter)}}
+
+% \newattribute\statusattribute
+% \newattribute\colorattribute
+% \newattribute\skipattribute
+% \newattribute\penaltyattribute
+
+\newtoks \attributesresetlist
+
+\def\defineattribute[#1]% alternatively we can let lua do the housekeeping
+ {\global\advance\attdefcounter\plusone
+ \expandafter \xdef\csname :attr:#1\endcsname{\number\attdefcounter}%
+ \global\expandafter\attributedef\csname @attr@#1\endcsname \attdefcounter
+ \writestatus\m!systems{defining attribute #1 with number \the\attdefcounter}%
+ \appendetoks\csname @attr@#1\endcsname\minusone\to\attributesresetlist
+ \ctxlua{attributes.define("#1",\number\attdefcounter)}}
+
+% expandable so we can \edef them for speed
+
+\def\dosetattribute#1#2{\csname @attr@#1\endcsname#2\relax}
+\def\doresetattribute#1{\csname @attr@#1\endcsname\minusone}
+\def\dogetattribute #1{\number\csname @attr@#1\endcsname}
+\def\dogetattributeid#1{\csname :attr:#1\endcsname}
+
+\let\dompattribute\gobbletwoarguments
+
+\defineattribute[mark]
+% \defineattribute[status] % used ? maybe combine with
+\defineattribute[state]
+\defineattribute[trigger] % feature inheritance
+\defineattribute[skip]
+\defineattribute[penalty]
+
+\startruntimectxluacode
+ nodes.trigger = \dogetattributeid{trigger}
+\stopruntimectxluacode
+
+% \defineattribute[ignore]
+%
+% \edef\startignorecontent{\dosetattribute{ignore}\plusone}
+% \edef\stopignorecontent {\doresetattribute{ignore}}
+%
+% \startruntimectxluacode
+% nodes.ignore = \dogetattributeid{ignore}
+% \stopruntimectxluacode
+
+% \dosetattribute{status}{1}
+
+% temp here / will be indirect ! just for testing
+
+\defineattribute[colormodel]
+\defineattribute[color]
+
+% todo: no need for 'color' argument, we can set that once at startup; currently
+% a bit inconsistent
+
+% 1=off 2=gray 3=spot 4=rgb 5=cmyk 6=cmy % only 1/2/4/5 are supported
+%
+% We could combine this in one attribute but this is not faster and also
+% less flexible because sometimes we want to freeze the attribute bit.
+%
+% Watch out: real color support will be implemented later.
+
+\newcount\currentcolormodel
+
+\def\setcolormodel#1%
+ {\currentcolormodel\ctxlua{tex.print(colors.setmodel('colormodel','#1'))}%
+ \dosetattribute{colormodel}{\the\currentcolormodel}}
+
+\setcolormodel{all}
+
+\appendtoks
+ \setcolormodel{all}% redundant?
+\to \everyjob
+
+\def\registerrgbcolor #1#2#3#4{\ctxlua{colors.register('color','#1','rgb' ,#2,#3,#4)}}
+\def\registercmykcolor#1#2#3#4#5{\ctxlua{colors.register('color','#1','cmyk',#2,#3,#4,#5)}}
+\def\registergraycolor #1#2{\ctxlua{colors.register('color','#1','gray',#2)}}
+
+% transparency
+
+\defineattribute[transparency]
+
+\def\registertransparency#1#2#3%
+ {\setevalue{(ts:#1)}{\dosetattribute{transparency}{\ctxlua{tex.print(transparencies.register(#2,#3))}}}}
+
+\def\sometransparencyswitch#1{\csname(ts:#1)\endcsname}
+
+\def\sometransparencyswitch
+ {\ctxlua{transparencies.enabled=true}%
+ \gdef\sometransparencyswitch##1{\csname(ts:##1)\endcsname}%
+ \sometransparencyswitch}
+
+% \registertransparency {one} {1} {.5}
+% \registertransparency {two} {1} {.6}
+
+% overprint
+
+\defineattribute[overprint]
+
+\def\registeroverprint#1#2%
+ {\initializePDFoverprint % temp here, to be tested in la code (states.collect)
+ \setvalue{(os:#1)}{\dosetattribute{overprint}{\ctxlua{tex.print(overprints.register('#2'))}}}}
+
+\def\dotriggeroverprint
+ {\ctxlua{overprints.enabled=true}%
+ \gdef\dotriggeroverprint##1{\csname(os:##1)\endcsname}%
+ \dotriggeroverprint}
+
+% \registeroverprint{knockout} {knockout}
+% \registeroverprint{overprint}{overprint}
+
+% negative
+
+\defineattribute[negative]
+
+\def\registernegative#1#2%
+ {\initializePDFnegative % temp here, to be tested in la code (states.collect)
+ \setvalue{(ns:#1)}{\dosetattribute{negative}{\ctxlua{tex.print(negatives.register('#2'))}}}}
+
+\def\dotriggernegative
+ {\ctxlua{negatives.enabled=true}%
+ \gdef\dotriggernegative##1{\csname(ns:##1)\endcsname}%
+ \dotriggernegative}
+
+% \registernegative{positive}{positive}
+% \registernegative{negative}{negative}
+
+% effect
+
+\defineattribute[effect]
+
+\def\registereffect#1#2#3% #2=stretch #3=rulethickness
+ {\setxvalue{(es:#1:#2:\number\dimexpr#3\relax)}%
+ {\dosetattribute{effect}{\ctxlua{tex.print(effects.register('#1',#2,\number\dimexpr#3\relax))}}}}
+
+\def\dotriggereffect
+ {\ctxlua{effects.enabled=true}%
+ \gdef\dotriggereffect##1##2##3%
+ {\ifcsname(es:##1:##2:\number\dimexpr##3\relax)\endcsname\else\registereffect{##1}{##2}{##3}\fi
+ \csname(es:##1:##2:\number\dimexpr##3\relax)\endcsname}%
+ \dotriggereffect}
+
+% \registereffect{normal}
+% \registereffect{inner}
+% \registereffect{outer}
+% \registereffect{both}
+% \registereffect{hidden}
+
+% ugly solution
+%
+% \def\shipout
+% {%\writestatus{SHIPOUT}{CALLED AT PAGE \realfolio}%
+% \dowithnextbox
+% {\ctxlua{callbacks.push('hpack_filter',nodes.process_page)}%
+% %\writestatus{SHIPOUT}{START PACKAGING}%
+% \setbox\nextbox\hbox{\box\nextbox}%
+% %\writestatus{SHIPOUT}{STOP PACKAGING}%
+% \ctxlua{callbacks.pop('hpack_filter')}%
+% \primitive\shipout\box\nextbox}}
+
+% \def\shipout
+% {\dowithnextbox
+% {\ctxlua{nodes.process_page(tex.box[\number\nextbox])}%
+% \primitive\shipout\box\nextbox}}
+
+% Objects are processed indepently \unknown\ actually we may need a proper callback.
+
+\newbox\finalizedshipoutbox
+
+\def\finalizeobjectbox#1{\ctxlua{nodes.process_page(tex.box[\number#1])}}
+
+\def\finalizeshipoutbox#1% % hack till we have access to pdf backend
+ {\global\setbox\finalizedshipoutbox\hbox{#1}%
+ \finalizeobjectbox\finalizedshipoutbox
+ \hbox{\ctxlua{states.flush()}\box\finalizedshipoutbox}}
+
+\let\normalshipout\shipout
+
+% tricky stuff:
+
+\newcount\attributeboxcount
+
+\edef\startinheritattributes{\dosetattribute {trigger}{1}}
+\edef\stopinheritattributes {\doresetattribute{trigger}}
+
+\def\doattributedcopy {\afterassignment\dodoattributedcopy\attributeboxcount}
+\def\doattributedbox {\afterassignment\dodoattributedbox \attributeboxcount}
+
+\def\dodoattributedcopy
+ {\startinheritattributes
+ \ifvbox\attributeboxcount
+ \vbox{\unvcopy\attributeboxcount}%
+ \else
+ \hbox{\unhcopy\attributeboxcount}%
+ \fi
+ \stopinheritattributes}
+
+\def\dodoattributedbox
+ {\startinheritattributes
+ \ifvbox\attributeboxcount
+ \vbox{\unvbox\attributeboxcount}%
+ \else
+ \hbox{\unhbox\attributeboxcount}%
+ \fi
+ \stopinheritattributes}
+
+\def\enableattributeinheritance
+ {\ctxlua{nodes.triggering=true}%
+ \let\attributedcopy\doattributedcopy
+ \let\attributedbox \doattributedbox}
+
+\def\disableattributeinheritance
+ {\ctxlua{nodes.triggering=false}%
+ \let\attributedcopy\copy
+ \let\attributedbox \box}
+
+\disableattributeinheritance
+
+% \enableattributeinheritance % will become default
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/char-cmp.lua b/Master/texmf-dist/tex/context/base/char-cmp.lua
new file mode 100644
index 00000000000..e995f510fe3
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/char-cmp.lua
@@ -0,0 +1,265 @@
+if not modules then modules = { } end modules ['char-cmp'] = {
+ version = 1.001,
+ comment = "companion to char-ini.tex",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+characters = characters or { }
+characters.uncomposed = characters.uncomposed or { }
+
+--[[ldx--
+<p>The code defined here may move to the big character table.</p>
+--ldx]]--
+
+characters.basedigits = {
+ ['zero'] = 48, ['one'] = 49,
+ ['two'] = 50, ['three'] = 51,
+ ['four'] = 52, ['five'] = 53,
+ ['six'] = 54, ['seven'] = 55,
+ ['eight'] = 56, ['nine'] = 57
+}
+
+--[[ldx--
+<p>The next three tables can for instance be be used to enhance
+kerning tables that lack kerning pairs for these special characters.
+Of course they may come in handy elsewhere too</p>
+--ldx]]--
+
+-- we can use shcodes, but then we also need slcode and srcode
+--
+-- AEligature
+-- => slcode == ub('A')
+-- => srcode == ub('E')
+-- or
+-- => shcode == { ub('A'), ub('E') }
+-- => reduction = "AE"
+--
+-- eacute
+-- => shcode == ub('A')
+-- or
+-- => shcode == { ub('a') }
+-- => reduction = "a"
+
+characters.uncomposed.left = {
+ AEligature = "A", aeligature = "a",
+ OEligature = "O", oeligature = "o",
+ IJligature = "I", ijligature = "i",
+ AE = "A", ae = "a",
+ OE = "O", oe = "o",
+ IJ = "I", ij = "i",
+ Ssharp = "S", ssharp = "s",
+}
+
+characters.uncomposed.right = {
+ AEligature = "E", aeligature = "e",
+ OEligature = "E", oeligature = "e",
+ IJligature = "J", ijligature = "j",
+ AE = "E", ae = "e",
+ OE = "E", oe = "e",
+ IJ = "J", ij = "j",
+ Ssharp = "S", ssharp = "s",
+}
+
+characters.uncomposed.both = {
+ Acircumflex = "A", acircumflex = "a",
+ Ccircumflex = "C", ccircumflex = "c",
+ Ecircumflex = "E", ecircumflex = "e",
+ Gcircumflex = "G", gcircumflex = "g",
+ Hcircumflex = "H", hcircumflex = "h",
+ Icircumflex = "I", icircumflex = "i",
+ Jcircumflex = "J", jcircumflex = "j",
+ Ocircumflex = "O", ocircumflex = "o",
+ Scircumflex = "S", scircumflex = "s",
+ Ucircumflex = "U", ucircumflex = "u",
+ Wcircumflex = "W", wcircumflex = "w",
+ Ycircumflex = "Y", ycircumflex = "y",
+
+ Agrave = "A", agrave = "a",
+ Egrave = "E", egrave = "e",
+ Igrave = "I", igrave = "i",
+ Ograve = "O", ograve = "o",
+ Ugrave = "U", ugrave = "u",
+ Ygrave = "Y", ygrave = "y",
+
+ Atilde = "A", atilde = "a",
+ Itilde = "I", itilde = "i",
+ Otilde = "O", otilde = "o",
+ Utilde = "U", utilde = "u",
+ Ntilde = "N", ntilde = "n",
+
+ Adiaeresis = "A", adiaeresis = "a", Adieresis = "A", adieresis = "a",
+ Ediaeresis = "E", ediaeresis = "e", Edieresis = "E", edieresis = "e",
+ Idiaeresis = "I", idiaeresis = "i", Idieresis = "I", idieresis = "i",
+ Odiaeresis = "O", odiaeresis = "o", Odieresis = "O", odieresis = "o",
+ Udiaeresis = "U", udiaeresis = "u", Udieresis = "U", udieresis = "u",
+ Ydiaeresis = "Y", ydiaeresis = "y", Ydieresis = "Y", ydieresis = "y",
+
+ Aacute = "A", aacute = "a",
+ Cacute = "C", cacute = "c",
+ Eacute = "E", eacute = "e",
+ Iacute = "I", iacute = "i",
+ Lacute = "L", lacute = "l",
+ Nacute = "N", nacute = "n",
+ Oacute = "O", oacute = "o",
+ Racute = "R", racute = "r",
+ Sacute = "S", sacute = "s",
+ Uacute = "U", uacute = "u",
+ Yacute = "Y", yacute = "y",
+ Zacute = "Z", zacute = "z",
+
+ Dstroke = "D", dstroke = "d",
+ Hstroke = "H", hstroke = "h",
+ Tstroke = "T", tstroke = "t",
+
+ Cdotaccent = "C", cdotaccent = "c",
+ Edotaccent = "E", edotaccent = "e",
+ Gdotaccent = "G", gdotaccent = "g",
+ Idotaccent = "I", idotaccent = "i",
+ Zdotaccent = "Z", zdotaccent = "z",
+
+ Amacron = "A", amacron = "a",
+ Emacron = "E", emacron = "e",
+ Imacron = "I", imacron = "i",
+ Omacron = "O", omacron = "o",
+ Umacron = "U", umacron = "u",
+
+ Ccedilla = "C", ccedilla = "c",
+ Kcedilla = "K", kcedilla = "k",
+ Lcedilla = "L", lcedilla = "l",
+ Ncedilla = "N", ncedilla = "n",
+ Rcedilla = "R", rcedilla = "r",
+ Scedilla = "S", scedilla = "s",
+ Tcedilla = "T", tcedilla = "t",
+
+ Ohungarumlaut = "O", ohungarumlaut = "o",
+ Uhungarumlaut = "U", uhungarumlaut = "u",
+
+ Aogonek = "A", aogonek = "a",
+ Eogonek = "E", eogonek = "e",
+ Iogonek = "I", iogonek = "i",
+ Uogonek = "U", uogonek = "u",
+
+ Aring = "A", aring = "a",
+ Uring = "U", uring = "u",
+
+ Abreve = "A", abreve = "a",
+ Ebreve = "E", ebreve = "e",
+ Gbreve = "G", gbreve = "g",
+ Ibreve = "I", ibreve = "i",
+ Obreve = "O", obreve = "o",
+ Ubreve = "U", ubreve = "u",
+
+ Ccaron = "C", ccaron = "c",
+ Dcaron = "D", dcaron = "d",
+ Ecaron = "E", ecaron = "e",
+ Lcaron = "L", lcaron = "l",
+ Ncaron = "N", ncaron = "n",
+ Rcaron = "R", rcaron = "r",
+ Scaron = "S", scaron = "s",
+ Tcaron = "T", tcaron = "t",
+ Zcaron = "Z", zcaron = "z",
+
+ dotlessI = "I", dotlessi = "i",
+ dotlessJ = "J", dotlessj = "j",
+
+ AEligature = "AE", aeligature = "ae", AE = "AE", ae = "ae",
+ OEligature = "OE", oeligature = "oe", OE = "OE", oe = "oe",
+ IJligature = "IJ", ijligature = "ij", IJ = "IJ", ij = "ij",
+
+ Lstroke = "L", lstroke = "l", Lslash = "L", lslash = "l",
+ Ostroke = "O", ostroke = "o", Oslash = "O", oslash = "o",
+
+ Ssharp = "SS", ssharp = "ss",
+
+ Aumlaut = "A", aumlaut = "a",
+ Eumlaut = "E", eumlaut = "e",
+ Iumlaut = "I", iumlaut = "i",
+ Oumlaut = "O", oumlaut = "o",
+ Uumlaut = "U", uumlaut = "u",
+
+}
+
+--[[ldx--
+<p>The following function is used in the indexing code, where
+we need some sort of default fallback mapping.</p>
+--ldx]]--
+
+function characters.uncompose(n) -- n == string|number, returns string
+ local cdn
+ if type(n) == "string" then
+ cdn = characters.data[utf.byte(n)]
+ else
+ cdn = characters.data[n]
+ end
+ -- return characters.shape(n)
+ if cdn then
+ local shcode = cdn.shcode
+ if not shcode then
+ return characters.uncomposed.both[cdn.contextname] or n
+ elseif type(shcode) == "table" then
+ return utf.char(unpack(cdn.shcode))
+ else
+ return utf.char(cdn.shcode)
+ end
+ end
+ return n
+end
+
+--[[ldx--
+<p>Only characters with a code smaller than 128 make sense,
+anything larger is encoding dependent. An interesting complication
+is that a character can be in an encoding twice but is hashed
+once.</p>
+--ldx]]--
+
+characters.ligatures = {
+ ['f'] = {
+ { 'f', 'ff' },
+ { 'i', 'fi' },
+ { 'l', 'fl' },
+ },
+ ['ff'] = {
+ { 'i', 'ffi' }
+ },
+ ['fi'] = {
+ { 'i', 'fii' }
+ },
+ ['fl'] = {
+ { 'i', 'fli' }
+ },
+ ['s'] = {
+ { 't', 'st' }
+ },
+ ['i'] = {
+ { 'j', 'ij' }
+ },
+}
+
+characters.texligatures = {
+ -- ['space'] = {
+ -- { 'L', 'Lslash' },
+ -- { 'l', 'lslash' }
+ -- },
+ -- ['question'] = {
+ -- { 'quoteleft', 'questiondown' }
+ -- },
+ -- ['exclam'] = {
+ -- { 'quoteleft', 'exclamdown' }
+ -- },
+ ['quoteleft'] = {
+ { 'quoteleft', 'quotedblleft' }
+ },
+ ['quoteright'] = {
+ { 'quoteright', 'quotedblright' }
+ },
+ ['hyphen'] = {
+ { 'hyphen', 'endash' }
+ },
+ ['endash'] = {
+ { 'hyphen', 'emdash' }
+ }
+}
+
+--~ U+2019: right single quotation mark / quoteright
diff --git a/Master/texmf-dist/tex/context/base/char-def.lua b/Master/texmf-dist/tex/context/base/char-def.lua
new file mode 100644
index 00000000000..35bb99a98fc
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/char-def.lua
@@ -0,0 +1,122169 @@
+-- filename : char-def.lua
+-- comment : companion to char-def.tex (in ConTeXt)
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+-- remark : compact version
+
+-- 0x2061 FUNCTION APPLICATION -> relax
+
+if not versions then versions = { } end versions['char-def'] = 1.001
+if not characters then characters = { } end
+
+characters.data={
+ [0x0000]={
+ ["category"]="cc",
+ ["description"]="NULL",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0000,
+ },
+ {
+ ["category"]="cc",
+ ["description"]="START OF HEADING",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0001,
+ },
+ {
+ ["category"]="cc",
+ ["description"]="START OF TEXT",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0002,
+ },
+ {
+ ["category"]="cc",
+ ["description"]="END OF TEXT",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0003,
+ },
+ {
+ ["category"]="cc",
+ ["description"]="END OF TRANSMISSION",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0004,
+ },
+ {
+ ["category"]="cc",
+ ["description"]="ENQUIRY",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0005,
+ },
+ {
+ ["category"]="cc",
+ ["description"]="ACKNOWLEDGE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0006,
+ },
+ {
+ ["category"]="cc",
+ ["description"]="BELL",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0007,
+ },
+ {
+ ["category"]="cc",
+ ["description"]="BACKSPACE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0008,
+ },
+ {
+ ["category"]="cc",
+ ["description"]="CHARACTER TABULATION",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x0009, --
+ },
+ {
+ ["category"]="cc",
+ ["description"]="LINE FEED (LF)",
+ ["linebreak"]="lf",
+ ["unicodeslot"]=0x000A, --
+
+ },
+ {
+ ["category"]="cc",
+ ["description"]="LINE TABULATION",
+ ["linebreak"]="bk",
+ ["unicodeslot"]=0x000B,
+ },
+ {
+ ["category"]="cc",
+ ["description"]="FORM FEED (FF)",
+ ["linebreak"]="bk",
+ ["unicodeslot"]=0x000C,
+ },
+ {
+ ["category"]="cc",
+ ["description"]="CARRIAGE RETURN (CR)",
+ ["linebreak"]="cr",
+ ["unicodeslot"]=0x000D, --
+ },
+ {
+ ["category"]="cc",
+ ["description"]="SHIFT OUT",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x000E,
+ },
+ {
+ ["category"]="cc",
+ ["description"]="SHIFT IN",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x000F,
+ },
+ {
+ ["category"]="cc",
+ ["description"]="DATA LINK ESCAPE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0010,
+ },
+ {
+ ["category"]="cc",
+ ["description"]="DEVICE CONTROL ONE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0011,
+ },
+ {
+ ["category"]="cc",
+ ["description"]="DEVICE CONTROL TWO",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0012,
+ },
+ {
+ ["category"]="cc",
+ ["description"]="DEVICE CONTROL THREE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0013,
+ },
+ {
+ ["category"]="cc",
+ ["description"]="DEVICE CONTROL FOUR",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0014,
+ },
+ {
+ ["category"]="cc",
+ ["description"]="NEGATIVE ACKNOWLEDGE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0015,
+ },
+ {
+ ["category"]="cc",
+ ["description"]="SYNCHRONOUS IDLE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0016,
+ },
+ {
+ ["category"]="cc",
+ ["description"]="END OF TRANSMISSION BLOCK",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0017,
+ },
+ {
+ ["category"]="cc",
+ ["description"]="CANCEL",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0018,
+ },
+ {
+ ["category"]="cc",
+ ["description"]="END OF MEDIUM",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0019,
+ },
+ {
+ ["category"]="cc",
+ ["description"]="SUBSTITUTE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x001A,
+ },
+ {
+ ["category"]="cc",
+ ["description"]="ESCAPE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x001B,
+ },
+ {
+ ["category"]="cc",
+ ["description"]="INFORMATION SEPARATOR FOUR",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x001C,
+ },
+ {
+ ["category"]="cc",
+ ["description"]="INFORMATION SEPARATOR THREE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x001D,
+ },
+ {
+ ["category"]="cc",
+ ["description"]="INFORMATION SEPARATOR TWO",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x001E,
+ },
+ {
+ ["category"]="cc",
+ ["description"]="INFORMATION SEPARATOR ONE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x001F,
+ },
+ {
+ ["adobename"]="space",
+ ["category"]="zs",
+ ["cjkwd"]="na",
+ ["description"]="SPACE",
+ ["linebreak"]="sp",
+ ["unicodeslot"]=0x0020, --
+ },
+ {
+ ["adobename"]="exclam",
+ ["category"]="po",
+ ["cjkwd"]="na",
+ ["description"]="EXCLAMATION MARK",
+ ["linebreak"]="ex",
+ ["mathclass"]="close",
+ ["unicodeslot"]=0x0021, -- !
+ },
+ {
+ ["adobename"]="quotedbl",
+ ["category"]="po",
+ ["cjkwd"]="na",
+ ["contextname"]="quotedbl",
+ ["description"]="QUOTATION MARK",
+ ["linebreak"]="qu",
+ ["unicodeslot"]=0x0022, -- "
+ },
+ {
+ ["adobename"]="numbersign",
+ ["category"]="po",
+ ["cjkwd"]="na",
+ ["description"]="NUMBER SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0023, -- #
+ },
+ {
+ ["adobename"]="dollar",
+ ["category"]="sc",
+ ["cjkwd"]="na",
+ ["description"]="DOLLAR SIGN",
+ ["linebreak"]="pr",
+ ["unicodeslot"]=0x0024, -- $
+ },
+ {
+ ["adobename"]="percent",
+ ["category"]="po",
+ ["cjkwd"]="na",
+ ["contextname"]="percent",
+ ["description"]="PERCENT SIGN",
+ ["linebreak"]="po",
+ ["unicodeslot"]=0x0025, -- %
+ },
+ {
+ ["adobename"]="ampersand",
+ ["category"]="po",
+ ["cjkwd"]="na",
+ ["description"]="AMPERSAND",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0026, -- &
+ },
+ {
+ ["adobename"]="quotesingle",
+ ["category"]="po",
+ ["cjkwd"]="na",
+ ["description"]="APOSTROPHE",
+ ["linebreak"]="qu",
+ ["unicodeslot"]=0x0027, -- '
+ },
+ {
+ ["adobename"]="parenleft",
+ ["category"]="ps",
+ ["cjkwd"]="na",
+ ["description"]="LEFT PARENTHESIS",
+ ["linebreak"]="op",
+ ["mathclass"]="open",
+ ["mathname"]="lparent",
+ ["unicodeslot"]=0x0028, -- (
+ },
+ {
+ ["adobename"]="parenright",
+ ["category"]="pe",
+ ["cjkwd"]="na",
+ ["description"]="RIGHT PARENTHESIS",
+ ["linebreak"]="cl",
+ ["mathclass"]="close",
+ ["mathname"]="rparent",
+ ["unicodeslot"]=0x0029, -- )
+ },
+ {
+ ["adobename"]="asterisk",
+ ["category"]="po",
+ ["cjkwd"]="na",
+ ["description"]="ASTERISK",
+ ["linebreak"]="al",
+ ["mathclass"]="binary",
+ ["unicodeslot"]=0x002A, -- *
+ },
+ {
+ ["adobename"]="plus",
+ ["category"]="sm",
+ ["cjkwd"]="na",
+ ["description"]="PLUS SIGN",
+ ["linebreak"]="pr",
+ ["mathclass"]="binary",
+ ["unicodeslot"]=0x002B, -- +
+ },
+ {
+ ["adobename"]="comma",
+ ["category"]="po",
+ ["cjkwd"]="na",
+ ["description"]="COMMA",
+ ["linebreak"]="is",
+ ["mathclass"]="punctuation",
+ ["unicodeslot"]=0x002C, -- ,
+ },
+ {
+ ["adobename"]="hyphen",
+ ["category"]="pd",
+ ["cjkwd"]="na",
+ ["description"]="HYPHEN-MINUS",
+ ["linebreak"]="hy",
+ ["mathclass"]="binary",
+ ["unicodeslot"]=0x002D, -- -
+ },
+ {
+ ["adobename"]="period",
+ ["category"]="po",
+ ["cjkwd"]="na",
+ ["description"]="FULL STOP",
+ ["linebreak"]="is",
+ ["mathclass"]="punctuation",
+ ["unicodeslot"]=0x002E, -- .
+ },
+ {
+ ["adobename"]="slash",
+ ["category"]="po",
+ ["cjkwd"]="na",
+ ["description"]="SOLIDUS",
+ ["linebreak"]="sy",
+ ["mathclass"]="binary",
+ ["unicodeslot"]=0x002F, -- /
+ },
+ {
+ ["adobename"]="zero",
+ ["category"]="nd",
+ ["cjkwd"]="na",
+ ["description"]="DIGIT ZERO",
+ ["linebreak"]="nu",
+ ["mathclass"]="number",
+ ["unicodeslot"]=0x0030, -- 0x0000
+ },
+ {
+ ["adobename"]="one",
+ ["category"]="nd",
+ ["cjkwd"]="na",
+ ["description"]="DIGIT ONE",
+ ["linebreak"]="nu",
+ ["mathclass"]="number",
+ ["unicodeslot"]=0x0031, -- 0x0001
+ },
+ {
+ ["adobename"]="two",
+ ["category"]="nd",
+ ["cjkwd"]="na",
+ ["description"]="DIGIT TWO",
+ ["linebreak"]="nu",
+ ["mathclass"]="number",
+ ["unicodeslot"]=0x0032, -- 0x0002
+ },
+ {
+ ["adobename"]="three",
+ ["category"]="nd",
+ ["cjkwd"]="na",
+ ["description"]="DIGIT THREE",
+ ["linebreak"]="nu",
+ ["mathclass"]="number",
+ ["unicodeslot"]=0x0033, -- 0x0003
+ },
+ {
+ ["adobename"]="four",
+ ["category"]="nd",
+ ["cjkwd"]="na",
+ ["description"]="DIGIT FOUR",
+ ["linebreak"]="nu",
+ ["mathclass"]="number",
+ ["unicodeslot"]=0x0034, -- 0x0004
+ },
+ {
+ ["adobename"]="five",
+ ["category"]="nd",
+ ["cjkwd"]="na",
+ ["description"]="DIGIT FIVE",
+ ["linebreak"]="nu",
+ ["mathclass"]="number",
+ ["unicodeslot"]=0x0035, -- 0x0005
+ },
+ {
+ ["adobename"]="six",
+ ["category"]="nd",
+ ["cjkwd"]="na",
+ ["description"]="DIGIT SIX",
+ ["linebreak"]="nu",
+ ["mathclass"]="number",
+ ["unicodeslot"]=0x0036, -- 0x0006
+ },
+ {
+ ["adobename"]="seven",
+ ["category"]="nd",
+ ["cjkwd"]="na",
+ ["description"]="DIGIT SEVEN",
+ ["linebreak"]="nu",
+ ["mathclass"]="number",
+ ["unicodeslot"]=0x0037, -- 0x0007
+ },
+ {
+ ["adobename"]="eight",
+ ["category"]="nd",
+ ["cjkwd"]="na",
+ ["description"]="DIGIT EIGHT",
+ ["linebreak"]="nu",
+ ["mathclass"]="number",
+ ["unicodeslot"]=0x0038, -- 0x0008
+ },
+ {
+ ["adobename"]="nine",
+ ["category"]="nd",
+ ["cjkwd"]="na",
+ ["description"]="DIGIT NINE",
+ ["linebreak"]="nu",
+ ["mathclass"]="number",
+ ["unicodeslot"]=0x0039, -- 0x0009
+ },
+ {
+ ["adobename"]="colon",
+ ["category"]="po",
+ ["cjkwd"]="na",
+ ["description"]="COLON",
+ ["linebreak"]="is",
+ ["mathclass"]="punctuation",
+ ["unicodeslot"]=0x003A, -- :
+ },
+ {
+ ["adobename"]="semicolon",
+ ["category"]="po",
+ ["cjkwd"]="na",
+ ["description"]="SEMICOLON",
+ ["linebreak"]="is",
+ ["mathclass"]="punctuation",
+ ["unicodeslot"]=0x003B, -- ;
+ },
+ {
+ ["adobename"]="less",
+ ["category"]="sm",
+ ["cjkwd"]="na",
+ ["description"]="LESS-THAN SIGN",
+ ["linebreak"]="al",
+ ["mathclass"]="binary",
+ ["mathname"]="lt",
+ ["unicodeslot"]=0x003C, -- <
+ },
+ {
+ ["adobename"]="equal",
+ ["category"]="sm",
+ ["cjkwd"]="na",
+ ["description"]="EQUALS SIGN",
+ ["linebreak"]="al",
+ ["mathclass"]="binary",
+ ["mathname"]="eq",
+ ["unicodeslot"]=0x003D, -- =
+ },
+ {
+ ["adobename"]="greater",
+ ["category"]="sm",
+ ["cjkwd"]="na",
+ ["description"]="GREATER-THAN SIGN",
+ ["linebreak"]="al",
+ ["mathclass"]="binary",
+ ["mathname"]="gt",
+ ["unicodeslot"]=0x003E, -- >
+ },
+ {
+ ["adobename"]="question",
+ ["category"]="po",
+ ["cjkwd"]="na",
+ ["description"]="QUESTION MARK",
+ ["linebreak"]="ex",
+ ["mathclass"]="close",
+ ["unicodeslot"]=0x003F, -- ?
+ },
+ {
+ ["adobename"]="at",
+ ["category"]="po",
+ ["cjkwd"]="na",
+ ["description"]="COMMERCIAL AT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0040, -- @
+ },
+ {
+ ["adobename"]="A",
+ ["category"]="lu",
+ ["cjkwd"]="na",
+ ["description"]="LATIN CAPITAL LETTER A",
+ ["lccode"]=0x0061,
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["unicodeslot"]=0x0041, -- A
+ },
+ {
+ ["adobename"]="B",
+ ["category"]="lu",
+ ["cjkwd"]="na",
+ ["description"]="LATIN CAPITAL LETTER B",
+ ["lccode"]=0x0062,
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["unicodeslot"]=0x0042, -- B
+ },
+ {
+ ["adobename"]="C",
+ ["category"]="lu",
+ ["cjkwd"]="na",
+ ["description"]="LATIN CAPITAL LETTER C",
+ ["lccode"]=0x0063,
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["unicodeslot"]=0x0043, -- C
+ },
+ {
+ ["adobename"]="D",
+ ["category"]="lu",
+ ["cjkwd"]="na",
+ ["description"]="LATIN CAPITAL LETTER D",
+ ["lccode"]=0x0064,
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["unicodeslot"]=0x0044, -- D
+ },
+ {
+ ["adobename"]="E",
+ ["category"]="lu",
+ ["cjkwd"]="na",
+ ["description"]="LATIN CAPITAL LETTER E",
+ ["lccode"]=0x0065,
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["unicodeslot"]=0x0045, -- E
+ },
+ {
+ ["adobename"]="F",
+ ["category"]="lu",
+ ["cjkwd"]="na",
+ ["description"]="LATIN CAPITAL LETTER F",
+ ["lccode"]=0x0066,
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["unicodeslot"]=0x0046, -- F
+ },
+ {
+ ["adobename"]="G",
+ ["category"]="lu",
+ ["cjkwd"]="na",
+ ["description"]="LATIN CAPITAL LETTER G",
+ ["lccode"]=0x0067,
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["unicodeslot"]=0x0047, -- G
+ },
+ {
+ ["adobename"]="H",
+ ["category"]="lu",
+ ["cjkwd"]="na",
+ ["description"]="LATIN CAPITAL LETTER H",
+ ["lccode"]=0x0068,
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["unicodeslot"]=0x0048, -- H
+ },
+ {
+ ["adobename"]="I",
+ ["category"]="lu",
+ ["cjkwd"]="na",
+ ["description"]="LATIN CAPITAL LETTER I",
+ ["lccode"]=0x0069,
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["unicodeslot"]=0x0049, -- I
+ },
+ {
+ ["adobename"]="J",
+ ["category"]="lu",
+ ["cjkwd"]="na",
+ ["description"]="LATIN CAPITAL LETTER J",
+ ["lccode"]=0x006A,
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["unicodeslot"]=0x004A, -- J
+ },
+ {
+ ["adobename"]="K",
+ ["category"]="lu",
+ ["cjkwd"]="na",
+ ["description"]="LATIN CAPITAL LETTER K",
+ ["lccode"]=0x006B,
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["unicodeslot"]=0x004B, -- K
+ },
+ {
+ ["adobename"]="L",
+ ["category"]="lu",
+ ["cjkwd"]="na",
+ ["description"]="LATIN CAPITAL LETTER L",
+ ["lccode"]=0x006C,
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["unicodeslot"]=0x004C, -- L
+ },
+ {
+ ["adobename"]="M",
+ ["category"]="lu",
+ ["cjkwd"]="na",
+ ["description"]="LATIN CAPITAL LETTER M",
+ ["lccode"]=0x006D,
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["unicodeslot"]=0x004D, -- M
+ },
+ {
+ ["adobename"]="N",
+ ["category"]="lu",
+ ["cjkwd"]="na",
+ ["description"]="LATIN CAPITAL LETTER N",
+ ["lccode"]=0x006E,
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["unicodeslot"]=0x004E, -- N
+ },
+ {
+ ["adobename"]="O",
+ ["category"]="lu",
+ ["cjkwd"]="na",
+ ["description"]="LATIN CAPITAL LETTER O",
+ ["lccode"]=0x006F,
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["unicodeslot"]=0x004F, -- O
+ },
+ {
+ ["adobename"]="P",
+ ["category"]="lu",
+ ["cjkwd"]="na",
+ ["description"]="LATIN CAPITAL LETTER P",
+ ["lccode"]=0x0070,
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["unicodeslot"]=0x0050, -- P
+ },
+ {
+ ["adobename"]="Q",
+ ["category"]="lu",
+ ["cjkwd"]="na",
+ ["description"]="LATIN CAPITAL LETTER Q",
+ ["lccode"]=0x0071,
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["unicodeslot"]=0x0051, -- Q
+ },
+ {
+ ["adobename"]="R",
+ ["category"]="lu",
+ ["cjkwd"]="na",
+ ["description"]="LATIN CAPITAL LETTER R",
+ ["lccode"]=0x0072,
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["unicodeslot"]=0x0052, -- R
+ },
+ {
+ ["adobename"]="S",
+ ["category"]="lu",
+ ["cjkwd"]="na",
+ ["description"]="LATIN CAPITAL LETTER S",
+ ["lccode"]=0x0073,
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["unicodeslot"]=0x0053, -- S
+ },
+ {
+ ["adobename"]="T",
+ ["category"]="lu",
+ ["cjkwd"]="na",
+ ["description"]="LATIN CAPITAL LETTER T",
+ ["lccode"]=0x0074,
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["unicodeslot"]=0x0054, -- T
+ },
+ {
+ ["adobename"]="U",
+ ["category"]="lu",
+ ["cjkwd"]="na",
+ ["description"]="LATIN CAPITAL LETTER U",
+ ["lccode"]=0x0075,
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["unicodeslot"]=0x0055, -- U
+ },
+ {
+ ["adobename"]="V",
+ ["category"]="lu",
+ ["cjkwd"]="na",
+ ["description"]="LATIN CAPITAL LETTER V",
+ ["lccode"]=0x0076,
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["unicodeslot"]=0x0056, -- V
+ },
+ {
+ ["adobename"]="W",
+ ["category"]="lu",
+ ["cjkwd"]="na",
+ ["description"]="LATIN CAPITAL LETTER W",
+ ["lccode"]=0x0077,
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["unicodeslot"]=0x0057, -- W
+ },
+ {
+ ["adobename"]="X",
+ ["category"]="lu",
+ ["cjkwd"]="na",
+ ["description"]="LATIN CAPITAL LETTER X",
+ ["lccode"]=0x0078,
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["unicodeslot"]=0x0058, -- X
+ },
+ {
+ ["adobename"]="Y",
+ ["category"]="lu",
+ ["cjkwd"]="na",
+ ["description"]="LATIN CAPITAL LETTER Y",
+ ["lccode"]=0x0079,
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["unicodeslot"]=0x0059, -- Y
+ },
+ {
+ ["adobename"]="Z",
+ ["category"]="lu",
+ ["cjkwd"]="na",
+ ["description"]="LATIN CAPITAL LETTER Z",
+ ["lccode"]=0x007A,
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["unicodeslot"]=0x005A, -- Z
+ },
+ {
+ ["adobename"]="bracketleft",
+ ["category"]="ps",
+ ["cjkwd"]="na",
+ ["description"]="LEFT SQUARE BRACKET",
+ ["linebreak"]="op",
+ ["mathclass"]="open",
+ ["unicodeslot"]=0x005B, -- [
+ },
+ {
+ ["adobename"]="backslash",
+ ["category"]="po",
+ ["cjkwd"]="na",
+ ["contextname"]="textbackslash",
+ ["description"]="REVERSE SOLIDUS",
+ ["linebreak"]="pr",
+ ["mathclass"]="binary",
+ ["unicodeslot"]=0x005C, -- \
+ },
+ {
+ ["adobename"]="bracketright",
+ ["category"]="pe",
+ ["cjkwd"]="na",
+ ["description"]="RIGHT SQUARE BRACKET",
+ ["linebreak"]="cl",
+ ["mathclass"]="close",
+ ["unicodeslot"]=0x005D, -- ]
+ },
+ {
+ ["adobename"]="asciicircum",
+ ["category"]="sk",
+ ["cjkwd"]="na",
+ ["contextname"]="textasciicircum",
+ ["description"]="CIRCUMFLEX ACCENT",
+ ["mathclass"]="accent",
+ ["mathname"]="widehat",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x005E, -- ^
+ },
+ {
+ ["adobename"]="underscore",
+ ["category"]="pc",
+ ["cjkwd"]="na",
+ ["contextname"]="textunderscore",
+ ["description"]="LOW LINE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x005F, -- _
+ },
+ {
+ ["adobename"]="grave",
+ ["category"]="sk",
+ ["cjkwd"]="na",
+ ["contextname"]="textgrave",
+ ["description"]="GRAVE ACCENT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0060, -- `
+ },
+ {
+ ["adobename"]="a",
+ ["category"]="ll",
+ ["cjkwd"]="na",
+ ["description"]="LATIN SMALL LETTER A",
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["uccode"]=0x0041,
+ ["unicodeslot"]=0x0061, -- a
+ },
+ {
+ ["adobename"]="b",
+ ["category"]="ll",
+ ["cjkwd"]="na",
+ ["description"]="LATIN SMALL LETTER B",
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["uccode"]=0x0042,
+ ["unicodeslot"]=0x0062, -- b
+ },
+ {
+ ["adobename"]="c",
+ ["category"]="ll",
+ ["cjkwd"]="na",
+ ["description"]="LATIN SMALL LETTER C",
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["uccode"]=0x0043,
+ ["unicodeslot"]=0x0063, -- c
+ },
+ {
+ ["adobename"]="d",
+ ["category"]="ll",
+ ["cjkwd"]="na",
+ ["description"]="LATIN SMALL LETTER D",
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["uccode"]=0x0044,
+ ["unicodeslot"]=0x0064, -- d
+ },
+ {
+ ["adobename"]="e",
+ ["category"]="ll",
+ ["cjkwd"]="na",
+ ["description"]="LATIN SMALL LETTER E",
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["uccode"]=0x0045,
+ ["unicodeslot"]=0x0065, -- e
+ },
+ {
+ ["adobename"]="f",
+ ["category"]="ll",
+ ["cjkwd"]="na",
+ ["description"]="LATIN SMALL LETTER F",
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["uccode"]=0x0046,
+ ["unicodeslot"]=0x0066, -- f
+ },
+ {
+ ["adobename"]="g",
+ ["category"]="ll",
+ ["cjkwd"]="na",
+ ["description"]="LATIN SMALL LETTER G",
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["uccode"]=0x0047,
+ ["unicodeslot"]=0x0067, -- g
+ },
+ {
+ ["adobename"]="h",
+ ["category"]="ll",
+ ["cjkwd"]="na",
+ ["description"]="LATIN SMALL LETTER H",
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["uccode"]=0x0048,
+ ["unicodeslot"]=0x0068, -- h
+ },
+ {
+ ["adobename"]="i",
+ ["category"]="ll",
+ ["cjkwd"]="na",
+ ["description"]="LATIN SMALL LETTER I",
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["uccode"]=0x0049,
+ ["unicodeslot"]=0x0069, -- i
+ },
+ {
+ ["adobename"]="j",
+ ["category"]="ll",
+ ["cjkwd"]="na",
+ ["description"]="LATIN SMALL LETTER J",
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["uccode"]=0x004A,
+ ["unicodeslot"]=0x006A, -- j
+ },
+ {
+ ["adobename"]="k",
+ ["category"]="ll",
+ ["cjkwd"]="na",
+ ["description"]="LATIN SMALL LETTER K",
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["uccode"]=0x004B,
+ ["unicodeslot"]=0x006B, -- k
+ },
+ {
+ ["adobename"]="l",
+ ["category"]="ll",
+ ["cjkwd"]="na",
+ ["description"]="LATIN SMALL LETTER L",
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["uccode"]=0x004C,
+ ["unicodeslot"]=0x006C, -- l
+ },
+ {
+ ["adobename"]="m",
+ ["category"]="ll",
+ ["cjkwd"]="na",
+ ["description"]="LATIN SMALL LETTER M",
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["uccode"]=0x004D,
+ ["unicodeslot"]=0x006D, -- m
+ },
+ {
+ ["adobename"]="n",
+ ["category"]="ll",
+ ["cjkwd"]="na",
+ ["description"]="LATIN SMALL LETTER N",
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["uccode"]=0x004E,
+ ["unicodeslot"]=0x006E, -- n
+ },
+ {
+ ["adobename"]="o",
+ ["category"]="ll",
+ ["cjkwd"]="na",
+ ["description"]="LATIN SMALL LETTER O",
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["uccode"]=0x004F,
+ ["unicodeslot"]=0x006F, -- o
+ },
+ {
+ ["adobename"]="p",
+ ["category"]="ll",
+ ["cjkwd"]="na",
+ ["description"]="LATIN SMALL LETTER P",
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["uccode"]=0x0050,
+ ["unicodeslot"]=0x0070, -- p
+ },
+ {
+ ["adobename"]="q",
+ ["category"]="ll",
+ ["cjkwd"]="na",
+ ["description"]="LATIN SMALL LETTER Q",
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["uccode"]=0x0051,
+ ["unicodeslot"]=0x0071, -- q
+ },
+ {
+ ["adobename"]="r",
+ ["category"]="ll",
+ ["cjkwd"]="na",
+ ["description"]="LATIN SMALL LETTER R",
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["uccode"]=0x0052,
+ ["unicodeslot"]=0x0072, -- r
+ },
+ {
+ ["adobename"]="s",
+ ["category"]="ll",
+ ["cjkwd"]="na",
+ ["description"]="LATIN SMALL LETTER S",
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["uccode"]=0x0053,
+ ["unicodeslot"]=0x0073, -- s
+ },
+ {
+ ["adobename"]="t",
+ ["category"]="ll",
+ ["cjkwd"]="na",
+ ["description"]="LATIN SMALL LETTER T",
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["uccode"]=0x0054,
+ ["unicodeslot"]=0x0074, -- t
+ },
+ {
+ ["adobename"]="u",
+ ["category"]="ll",
+ ["cjkwd"]="na",
+ ["description"]="LATIN SMALL LETTER U",
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["uccode"]=0x0055,
+ ["unicodeslot"]=0x0075, -- u
+ },
+ {
+ ["adobename"]="v",
+ ["category"]="ll",
+ ["cjkwd"]="na",
+ ["description"]="LATIN SMALL LETTER V",
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["uccode"]=0x0056,
+ ["unicodeslot"]=0x0076, -- v
+ },
+ {
+ ["adobename"]="w",
+ ["category"]="ll",
+ ["cjkwd"]="na",
+ ["description"]="LATIN SMALL LETTER W",
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["uccode"]=0x0057,
+ ["unicodeslot"]=0x0077, -- w
+ },
+ {
+ ["adobename"]="x",
+ ["category"]="ll",
+ ["cjkwd"]="na",
+ ["description"]="LATIN SMALL LETTER X",
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["uccode"]=0x0058,
+ ["unicodeslot"]=0x0078, -- x
+ },
+ {
+ ["adobename"]="y",
+ ["category"]="ll",
+ ["cjkwd"]="na",
+ ["description"]="LATIN SMALL LETTER Y",
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["uccode"]=0x0059,
+ ["unicodeslot"]=0x0079, -- y
+ },
+ {
+ ["adobename"]="z",
+ ["category"]="ll",
+ ["cjkwd"]="na",
+ ["description"]="LATIN SMALL LETTER Z",
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["uccode"]=0x005A,
+ ["unicodeslot"]=0x007A, -- z
+ },
+ {
+ ["adobename"]="braceleft",
+ ["category"]="ps",
+ ["cjkwd"]="na",
+ ["contextname"]="textbraceleft",
+ ["description"]="LEFT CURLY BRACKET",
+ ["linebreak"]="op",
+ ["mathclass"]="open",
+ ["mathname"]="lbrace",
+ ["unicodeslot"]=0x007B, -- {
+ },
+ {
+ ["adobename"]="bar",
+ ["category"]="sm",
+ ["cjkwd"]="na",
+ ["contextname"]="textbar",
+ ["description"]="VERTICAL LINE",
+ ["linebreak"]="ba",
+ ["mathclass"]="binary",
+ ["mathname"]="bar",
+ ["unicodeslot"]=0x007C, -- |
+ },
+ {
+ ["adobename"]="braceright",
+ ["category"]="pe",
+ ["cjkwd"]="na",
+ ["contextname"]="textbraceright",
+ ["description"]="RIGHT CURLY BRACKET",
+ ["linebreak"]="cl",
+ ["mathclass"]="close",
+ ["mathname"]="rbrace",
+ ["unicodeslot"]=0x007D, -- }
+ },
+ {
+ ["adobename"]="asciitilde",
+ ["category"]="sm",
+ ["cjkwd"]="na",
+ ["contextname"]="textasciitilde",
+ ["description"]="TILDE",
+ ["linebreak"]="al",
+ ["mathclass"]="accent",
+ ["mathname"]="widetilde",
+ ["unicodeslot"]=0x007E, -- ~
+ },
+ {
+ ["category"]="cc",
+ ["description"]="DELETE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x007F, -- 
+ },
+ {
+ ["category"]="cc",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0080, -- €
+ },
+ {
+ ["category"]="cc",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0081, -- Â
+ },
+ {
+ ["category"]="cc",
+ ["description"]="BREAK PERMITTED HERE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0082, -- ‚
+ },
+ {
+ ["category"]="cc",
+ ["description"]="NO BREAK HERE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0083, -- ƒ
+ },
+ {
+ ["category"]="cc",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0084, -- „
+ },
+ {
+ ["category"]="cc",
+ ["description"]="NEXT LINE (NEL)",
+ ["linebreak"]="nl",
+ ["unicodeslot"]=0x0085, -- Â…
+ },
+ {
+ ["category"]="cc",
+ ["description"]="START OF SELECTED AREA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0086, -- †
+ },
+ {
+ ["category"]="cc",
+ ["description"]="END OF SELECTED AREA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0087, -- ‡
+ },
+ {
+ ["category"]="cc",
+ ["description"]="CHARACTER TABULATION SET",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0088, -- ˆ
+ },
+ {
+ ["category"]="cc",
+ ["description"]="CHARACTER TABULATION WITH JUSTIFICATION",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0089, -- ‰
+ },
+ {
+ ["category"]="cc",
+ ["description"]="LINE TABULATION SET",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x008A, -- Š
+ },
+ {
+ ["category"]="cc",
+ ["description"]="PARTIAL LINE FORWARD",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x008B, -- ‹
+ },
+ {
+ ["category"]="cc",
+ ["description"]="PARTIAL LINE BACKWARD",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x008C, -- Œ
+ },
+ {
+ ["category"]="cc",
+ ["description"]="REVERSE LINE FEED",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x008D, -- Â
+ },
+ {
+ ["category"]="cc",
+ ["description"]="SINGLE SHIFT TWO",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x008E, -- ÂŽ
+ },
+ {
+ ["category"]="cc",
+ ["description"]="SINGLE SHIFT THREE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x008F, -- Â
+ },
+ {
+ ["category"]="cc",
+ ["description"]="DEVICE CONTROL STRING",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0090, -- Â
+ },
+ {
+ ["category"]="cc",
+ ["description"]="PRIVATE USE ONE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0091, -- ‘
+ },
+ {
+ ["category"]="cc",
+ ["description"]="PRIVATE USE TWO",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0092, -- Â’
+ },
+ {
+ ["category"]="cc",
+ ["description"]="SET TRANSMIT STATE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0093, -- “
+ },
+ {
+ ["category"]="cc",
+ ["description"]="CANCEL CHARACTER",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0094, -- ”
+ },
+ {
+ ["category"]="cc",
+ ["description"]="MESSAGE WAITING",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0095, -- •
+ },
+ {
+ ["category"]="cc",
+ ["description"]="START OF GUARDED AREA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0096, -- –
+ },
+ {
+ ["category"]="cc",
+ ["description"]="END OF GUARDED AREA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0097, -- —
+ },
+ {
+ ["category"]="cc",
+ ["description"]="START OF STRING",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0098, -- ˜
+ },
+ {
+ ["category"]="cc",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0099, -- ™
+ },
+ {
+ ["category"]="cc",
+ ["description"]="SINGLE CHARACTER INTRODUCER",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x009A, -- š
+ },
+ {
+ ["category"]="cc",
+ ["description"]="CONTROL SEQUENCE INTRODUCER",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x009B, -- ›
+ },
+ {
+ ["category"]="cc",
+ ["description"]="STRING TERMINATOR",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x009C, -- œ
+ },
+ {
+ ["category"]="cc",
+ ["description"]="OPERATING SYSTEM COMMAND",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x009D, -- Â
+ },
+ {
+ ["category"]="cc",
+ ["description"]="PRIVACY MESSAGE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x009E, -- ž
+ },
+ {
+ ["category"]="cc",
+ ["description"]="APPLICATION PROGRAM COMMAND",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x009F, -- Ÿ
+ },
+ {
+ ["category"]="zs",
+ ["contextname"]="nonbreakablespace",
+ ["description"]="NO-BREAK SPACE",
+ ["linebreak"]="gl",
+ ["specials"]={ "nobreak", 0x0020 },
+ ["unicodeslot"]=0x00A0, --  
+ },
+ {
+ ["adobename"]="exclamdown",
+ ["category"]="po",
+ ["cjkwd"]="a",
+ ["contextname"]="exclamdown",
+ ["description"]="INVERTED EXCLAMATION MARK",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x00A1, -- ¡
+ },
+ {
+ ["adobename"]="cent",
+ ["category"]="sc",
+ ["cjkwd"]="na",
+ ["contextname"]="textcent",
+ ["description"]="CENT SIGN",
+ ["linebreak"]="po",
+ ["unicodeslot"]=0x00A2, -- ¢
+ },
+ {
+ ["adobename"]="sterling",
+ ["category"]="sc",
+ ["cjkwd"]="na",
+ ["contextname"]="textsterling",
+ ["description"]="POUND SIGN",
+ ["linebreak"]="pr",
+ ["unicodeslot"]=0x00A3, -- £
+ },
+ {
+ ["adobename"]="currency",
+ ["category"]="sc",
+ ["cjkwd"]="a",
+ ["contextname"]="textcurrency",
+ ["description"]="CURRENCY SIGN",
+ ["linebreak"]="pr",
+ ["unicodeslot"]=0x00A4, -- ¤
+ },
+ {
+ ["adobename"]="yen",
+ ["category"]="sc",
+ ["cjkwd"]="na",
+ ["contextname"]="textyen",
+ ["description"]="YEN SIGN",
+ ["linebreak"]="pr",
+ ["unicodeslot"]=0x00A5, -- ¥
+ },
+ {
+ ["adobename"]="brokenbar",
+ ["category"]="so",
+ ["cjkwd"]="na",
+ ["contextname"]="textbrokenbar",
+ ["description"]="BROKEN BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x00A6, -- ¦
+ },
+ {
+ ["adobename"]="section",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["contextname"]="sectionmark",
+ ["description"]="SECTION SIGN",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x00A7, -- §
+ },
+ {
+ ["adobename"]="dieresis",
+ ["category"]="sk",
+ ["cjkwd"]="a",
+ ["contextname"]="textdiaeresis",
+ ["description"]="DIAERESIS",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0020, 0x0308 },
+ ["unicodeslot"]=0x00A8, -- ¨
+ },
+ {
+ ["adobename"]="copyright",
+ ["category"]="so",
+ ["contextname"]="copyright",
+ ["description"]="COPYRIGHT SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x00A9, -- ©
+ },
+ {
+ ["adobename"]="ordfeminine",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="ordfeminine",
+ ["description"]="FEMININE ORDINAL INDICATOR",
+ ["linebreak"]="ai",
+ ["specials"]={ "super", 0x0061 },
+ ["unicodeslot"]=0x00AA, -- ª
+ },
+ {
+ ["adobename"]="guillemotleft",
+ ["category"]="pi",
+ ["contextname"]="leftguillemot",
+ ["description"]="LEFT-POINTING DOUBLE ANGLE QUOTATION MARK",
+ ["linebreak"]="qu",
+ ["unicodeslot"]=0x00AB, -- «
+ },
+ {
+ ["adobename"]="logicalnot",
+ ["category"]="sm",
+ ["cjkwd"]="na",
+ ["contextname"]="textlognot",
+ ["description"]="NOT SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x00AC, -- ¬
+ },
+ {
+ ["category"]="cf",
+ ["cjkwd"]="a",
+ ["contextname"]="softhyphen",
+ ["description"]="SOFT HYPHEN",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x00AD, -- ­
+ },
+ {
+ ["adobename"]="registered",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["contextname"]="registered",
+ ["description"]="REGISTERED SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x00AE, -- ®
+ },
+ {
+ ["adobename"]="macron",
+ ["category"]="sk",
+ ["cjkwd"]="na",
+ ["contextname"]="textmacron",
+ ["description"]="MACRON",
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x0020, 0x0304 },
+ ["unicodeslot"]=0x00AF, -- ¯
+ },
+ {
+ ["adobename"]="degree",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["contextname"]="textdegree",
+ ["description"]="DEGREE SIGN",
+ ["linebreak"]="po",
+ ["unicodeslot"]=0x00B0, -- °
+ },
+ {
+ ["adobename"]="plusminus",
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["contextname"]="textpm",
+ ["description"]="PLUS-MINUS SIGN",
+ ["linebreak"]="pr",
+ ["mathclass"]="binary",
+ ["mathname"]="pm",
+ ["unicodeslot"]=0x00B1, -- ±
+ },
+ {
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["contextname"]="twosuperior",
+ ["description"]="SUPERSCRIPT TWO",
+ ["linebreak"]="ai",
+ ["specials"]={ "super", 0x0032 },
+ ["unicodeslot"]=0x00B2, -- ²
+ },
+ {
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["contextname"]="threesuperior",
+ ["description"]="SUPERSCRIPT THREE",
+ ["linebreak"]="ai",
+ ["specials"]={ "super", 0x0033 },
+ ["unicodeslot"]=0x00B3, -- ³
+ },
+ {
+ ["adobename"]="acute",
+ ["category"]="sk",
+ ["cjkwd"]="a",
+ ["contextname"]="textacute",
+ ["description"]="ACUTE ACCENT",
+ ["linebreak"]="bb",
+ ["specials"]={ "compat", 0x0020, 0x0301 },
+ ["unicodeslot"]=0x00B4, -- ´
+ },
+ {
+ ["adobename"]="mu",
+ ["category"]="ll",
+ ["contextname"]="textmu",
+ ["description"]="MICRO SIGN",
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x03BC },
+ ["uccode"]=0x039C,
+ ["unicodeslot"]=0x00B5, -- µ
+ },
+ {
+ ["adobename"]="paragraph",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["contextname"]="paragraphmark",
+ ["description"]="PILCROW SIGN",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x00B6, -- ¶
+ },
+ {
+ ["adobename"]="periodcentered",
+ ["category"]="po",
+ ["cjkwd"]="a",
+ ["contextname"]="periodcentered",
+ ["description"]="MIDDLE DOT",
+ ["linebreak"]="ai",
+ ["mathclass"]="binary",
+ ["unicodeslot"]=0x00B7, -- ·
+ },
+ {
+ ["adobename"]="cedilla",
+ ["category"]="sk",
+ ["cjkwd"]="a",
+ ["contextname"]="textcedilla",
+ ["description"]="CEDILLA",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0020, 0x0327 },
+ ["unicodeslot"]=0x00B8, -- ¸
+ },
+ {
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["contextname"]="onesuperior",
+ ["description"]="SUPERSCRIPT ONE",
+ ["linebreak"]="ai",
+ ["specials"]={ "super", 0x0031 },
+ ["unicodeslot"]=0x00B9, -- ¹
+ },
+ {
+ ["adobename"]="ordmasculine",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="ordmasculine",
+ ["description"]="MASCULINE ORDINAL INDICATOR",
+ ["linebreak"]="ai",
+ ["specials"]={ "super", 0x006F },
+ ["unicodeslot"]=0x00BA, -- º
+ },
+ {
+ ["adobename"]="guillemotright",
+ ["category"]="pf",
+ ["contextname"]="rightguillemot",
+ ["description"]="RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK",
+ ["linebreak"]="qu",
+ ["unicodeslot"]=0x00BB, -- »
+ },
+ {
+ ["adobename"]="onequarter",
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["contextname"]="onequarter",
+ ["description"]="VULGAR FRACTION ONE QUARTER",
+ ["linebreak"]="ai",
+ ["specials"]={ "fraction", 0x0031, 0x2044, 0x0034 },
+ ["unicodeslot"]=0x00BC, -- ¼
+ },
+ {
+ ["adobename"]="onehalf",
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["contextname"]="onehalf",
+ ["description"]="VULGAR FRACTION ONE HALF",
+ ["linebreak"]="ai",
+ ["specials"]={ "fraction", 0x0031, 0x2044, 0x0032 },
+ ["unicodeslot"]=0x00BD, -- ½
+ },
+ {
+ ["adobename"]="threequarters",
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["contextname"]="threequarter",
+ ["description"]="VULGAR FRACTION THREE QUARTERS",
+ ["linebreak"]="ai",
+ ["specials"]={ "fraction", 0x0033, 0x2044, 0x0034 },
+ ["unicodeslot"]=0x00BE, -- ¾
+ },
+ {
+ ["adobename"]="questiondown",
+ ["category"]="po",
+ ["cjkwd"]="a",
+ ["contextname"]="questiondown",
+ ["description"]="INVERTED QUESTION MARK",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x00BF, -- ¿
+ },
+ {
+ ["adobename"]="Agrave",
+ ["category"]="lu",
+ ["contextname"]="Agrave",
+ ["description"]="LATIN CAPITAL LETTER A WITH GRAVE",
+ ["lccode"]=0x00E0,
+ ["linebreak"]="al",
+ ["shcode"]=0x0041,
+ ["specials"]={ "char", 0x0041, 0x0300 },
+ ["unicodeslot"]=0x00C0, -- À
+ },
+ {
+ ["adobename"]="Aacute",
+ ["category"]="lu",
+ ["contextname"]="Aacute",
+ ["description"]="LATIN CAPITAL LETTER A WITH ACUTE",
+ ["lccode"]=0x00E1,
+ ["linebreak"]="al",
+ ["shcode"]=0x0041,
+ ["specials"]={ "char", 0x0041, 0x0301 },
+ ["unicodeslot"]=0x00C1, -- Ã
+ },
+ {
+ ["adobename"]="Acircumflex",
+ ["category"]="lu",
+ ["contextname"]="Acircumflex",
+ ["description"]="LATIN CAPITAL LETTER A WITH CIRCUMFLEX",
+ ["lccode"]=0x00E2,
+ ["linebreak"]="al",
+ ["shcode"]=0x0041,
+ ["specials"]={ "char", 0x0041, 0x0302 },
+ ["unicodeslot"]=0x00C2, -- Â
+ },
+ {
+ ["adobename"]="Atilde",
+ ["category"]="lu",
+ ["contextname"]="Atilde",
+ ["description"]="LATIN CAPITAL LETTER A WITH TILDE",
+ ["lccode"]=0x00E3,
+ ["linebreak"]="al",
+ ["shcode"]=0x0041,
+ ["specials"]={ "char", 0x0041, 0x0303 },
+ ["unicodeslot"]=0x00C3, -- Ã
+ },
+ {
+ ["adobename"]="Adieresis",
+ ["category"]="lu",
+ ["contextname"]="Adiaeresis",
+ ["description"]="LATIN CAPITAL LETTER A WITH DIAERESIS",
+ ["lccode"]=0x00E4,
+ ["linebreak"]="al",
+ ["shcode"]=0x0041,
+ ["specials"]={ "char", 0x0041, 0x0308 },
+ ["unicodeslot"]=0x00C4, -- Ä
+ },
+ {
+ ["adobename"]="Aring",
+ ["category"]="lu",
+ ["contextname"]="Aring",
+ ["description"]="LATIN CAPITAL LETTER A WITH RING ABOVE",
+ ["lccode"]=0x00E5,
+ ["linebreak"]="al",
+ ["shcode"]=0x0041,
+ ["specials"]={ "char", 0x0041, 0x030A },
+ ["unicodeslot"]=0x00C5, -- Ã…
+ },
+ {
+ ["adobename"]="AE",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="AEligature",
+ ["description"]="LATIN CAPITAL LETTER AE",
+ ["lccode"]=0x00E6,
+ ["linebreak"]="al",
+ ["shcode"]= { 0x0041, 0x0045 },
+ ["unicodeslot"]=0x00C6, -- Æ
+ },
+ {
+ ["adobename"]="Ccedilla",
+ ["category"]="lu",
+ ["contextname"]="Ccedilla",
+ ["description"]="LATIN CAPITAL LETTER C WITH CEDILLA",
+ ["lccode"]=0x00E7,
+ ["linebreak"]="al",
+ ["shcode"]=0x0043,
+ ["specials"]={ "char", 0x0043, 0x0327 },
+ ["unicodeslot"]=0x00C7, -- Ç
+ },
+ {
+ ["adobename"]="Egrave",
+ ["category"]="lu",
+ ["contextname"]="Egrave",
+ ["description"]="LATIN CAPITAL LETTER E WITH GRAVE",
+ ["lccode"]=0x00E8,
+ ["linebreak"]="al",
+ ["shcode"]=0x0045,
+ ["specials"]={ "char", 0x0045, 0x0300 },
+ ["unicodeslot"]=0x00C8, -- È
+ },
+ {
+ ["adobename"]="Eacute",
+ ["category"]="lu",
+ ["contextname"]="Eacute",
+ ["description"]="LATIN CAPITAL LETTER E WITH ACUTE",
+ ["lccode"]=0x00E9,
+ ["linebreak"]="al",
+ ["shcode"]=0x0045,
+ ["specials"]={ "char", 0x0045, 0x0301 },
+ ["unicodeslot"]=0x00C9, -- É
+ },
+ {
+ ["adobename"]="Ecircumflex",
+ ["category"]="lu",
+ ["contextname"]="Ecircumflex",
+ ["description"]="LATIN CAPITAL LETTER E WITH CIRCUMFLEX",
+ ["lccode"]=0x00EA,
+ ["linebreak"]="al",
+ ["shcode"]=0x0045,
+ ["specials"]={ "char", 0x0045, 0x0302 },
+ ["unicodeslot"]=0x00CA, -- Ê
+ },
+ {
+ ["adobename"]="Edieresis",
+ ["category"]="lu",
+ ["contextname"]="Ediaeresis",
+ ["description"]="LATIN CAPITAL LETTER E WITH DIAERESIS",
+ ["lccode"]=0x00EB,
+ ["linebreak"]="al",
+ ["shcode"]=0x0045,
+ ["specials"]={ "char", 0x0045, 0x0308 },
+ ["unicodeslot"]=0x00CB, -- Ë
+ },
+ {
+ ["adobename"]="Igrave",
+ ["category"]="lu",
+ ["contextname"]="Igrave",
+ ["description"]="LATIN CAPITAL LETTER I WITH GRAVE",
+ ["lccode"]=0x00EC,
+ ["linebreak"]="al",
+ ["shcode"]=0x0049,
+ ["specials"]={ "char", 0x0049, 0x0300 },
+ ["unicodeslot"]=0x00CC, -- Ì
+ },
+ {
+ ["adobename"]="Iacute",
+ ["category"]="lu",
+ ["contextname"]="Iacute",
+ ["description"]="LATIN CAPITAL LETTER I WITH ACUTE",
+ ["lccode"]=0x00ED,
+ ["linebreak"]="al",
+ ["shcode"]=0x0049,
+ ["specials"]={ "char", 0x0049, 0x0301 },
+ ["unicodeslot"]=0x00CD, -- Ã
+ },
+ {
+ ["adobename"]="Icircumflex",
+ ["category"]="lu",
+ ["contextname"]="Icircumflex",
+ ["description"]="LATIN CAPITAL LETTER I WITH CIRCUMFLEX",
+ ["lccode"]=0x00EE,
+ ["linebreak"]="al",
+ ["shcode"]=0x0049,
+ ["specials"]={ "char", 0x0049, 0x0302 },
+ ["unicodeslot"]=0x00CE, -- ÃŽ
+ },
+ {
+ ["adobename"]="Idieresis",
+ ["category"]="lu",
+ ["contextname"]="Idiaeresis",
+ ["description"]="LATIN CAPITAL LETTER I WITH DIAERESIS",
+ ["lccode"]=0x00EF,
+ ["linebreak"]="al",
+ ["shcode"]=0x0049,
+ ["specials"]={ "char", 0x0049, 0x0308 },
+ ["unicodeslot"]=0x00CF, -- Ã
+ },
+ {
+ ["adobename"]="Eth",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="Eth",
+ ["description"]="LATIN CAPITAL LETTER ETH",
+ ["lccode"]=0x00F0,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x00D0, -- Ã
+ },
+ {
+ ["adobename"]="Ntilde",
+ ["category"]="lu",
+ ["contextname"]="Ntilde",
+ ["description"]="LATIN CAPITAL LETTER N WITH TILDE",
+ ["lccode"]=0x00F1,
+ ["linebreak"]="al",
+ ["shcode"]=0x004E,
+ ["specials"]={ "char", 0x004E, 0x0303 },
+ ["unicodeslot"]=0x00D1, -- Ñ
+ },
+ {
+ ["adobename"]="Ograve",
+ ["category"]="lu",
+ ["contextname"]="Ograve",
+ ["description"]="LATIN CAPITAL LETTER O WITH GRAVE",
+ ["lccode"]=0x00F2,
+ ["linebreak"]="al",
+ ["shcode"]=0x004F,
+ ["specials"]={ "char", 0x004F, 0x0300 },
+ ["unicodeslot"]=0x00D2, -- Ã’
+ },
+ {
+ ["adobename"]="Oacute",
+ ["category"]="lu",
+ ["contextname"]="Oacute",
+ ["description"]="LATIN CAPITAL LETTER O WITH ACUTE",
+ ["lccode"]=0x00F3,
+ ["linebreak"]="al",
+ ["shcode"]=0x004F,
+ ["specials"]={ "char", 0x004F, 0x0301 },
+ ["unicodeslot"]=0x00D3, -- Ó
+ },
+ {
+ ["adobename"]="Ocircumflex",
+ ["category"]="lu",
+ ["contextname"]="Ocircumflex",
+ ["description"]="LATIN CAPITAL LETTER O WITH CIRCUMFLEX",
+ ["lccode"]=0x00F4,
+ ["linebreak"]="al",
+ ["shcode"]=0x004F,
+ ["specials"]={ "char", 0x004F, 0x0302 },
+ ["unicodeslot"]=0x00D4, -- Ô
+ },
+ {
+ ["adobename"]="Otilde",
+ ["category"]="lu",
+ ["contextname"]="Otilde",
+ ["description"]="LATIN CAPITAL LETTER O WITH TILDE",
+ ["lccode"]=0x00F5,
+ ["linebreak"]="al",
+ ["shcode"]=0x004F,
+ ["specials"]={ "char", 0x004F, 0x0303 },
+ ["unicodeslot"]=0x00D5, -- Õ
+ },
+ {
+ ["adobename"]="Odieresis",
+ ["category"]="lu",
+ ["contextname"]="Odiaeresis",
+ ["description"]="LATIN CAPITAL LETTER O WITH DIAERESIS",
+ ["lccode"]=0x00F6,
+ ["linebreak"]="al",
+ ["shcode"]=0x004F,
+ ["specials"]={ "char", 0x004F, 0x0308 },
+ ["unicodeslot"]=0x00D6, -- Ö
+ },
+ {
+ ["adobename"]="multiply",
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["contextname"]="textmultiply",
+ ["description"]="MULTIPLICATION SIGN",
+ ["linebreak"]="ai",
+ ["mathclass"]="binary",
+ ["mathname"]="times",
+ ["unicodeslot"]=0x00D7, -- ×
+ },
+ {
+ ["adobename"]="Oslash",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="Ostroke",
+ ["description"]="LATIN CAPITAL LETTER O WITH STROKE",
+ ["lccode"]=0x00F8,
+ ["linebreak"]="al",
+ ["shcode"]=0x004F,
+ ["unicodeslot"]=0x00D8, -- Ø
+ },
+ {
+ ["adobename"]="Ugrave",
+ ["category"]="lu",
+ ["contextname"]="Ugrave",
+ ["description"]="LATIN CAPITAL LETTER U WITH GRAVE",
+ ["lccode"]=0x00F9,
+ ["linebreak"]="al",
+ ["shcode"]=0x0055,
+ ["specials"]={ "char", 0x0055, 0x0300 },
+ ["unicodeslot"]=0x00D9, -- Ù
+ },
+ {
+ ["adobename"]="Uacute",
+ ["category"]="lu",
+ ["contextname"]="Uacute",
+ ["description"]="LATIN CAPITAL LETTER U WITH ACUTE",
+ ["lccode"]=0x00FA,
+ ["linebreak"]="al",
+ ["shcode"]=0x0055,
+ ["specials"]={ "char", 0x0055, 0x0301 },
+ ["unicodeslot"]=0x00DA, -- Ú
+ },
+ {
+ ["adobename"]="Ucircumflex",
+ ["category"]="lu",
+ ["contextname"]="Ucircumflex",
+ ["description"]="LATIN CAPITAL LETTER U WITH CIRCUMFLEX",
+ ["lccode"]=0x00FB,
+ ["linebreak"]="al",
+ ["shcode"]=0x0055,
+ ["specials"]={ "char", 0x0055, 0x0302 },
+ ["unicodeslot"]=0x00DB, -- Û
+ },
+ {
+ ["adobename"]="Udieresis",
+ ["category"]="lu",
+ ["contextname"]="Udiaeresis",
+ ["description"]="LATIN CAPITAL LETTER U WITH DIAERESIS",
+ ["lccode"]=0x00FC,
+ ["linebreak"]="al",
+ ["shcode"]=0x0055,
+ ["specials"]={ "char", 0x0055, 0x0308 },
+ ["unicodeslot"]=0x00DC, -- Ü
+ },
+ {
+ ["adobename"]="Yacute",
+ ["category"]="lu",
+ ["contextname"]="Yacute",
+ ["description"]="LATIN CAPITAL LETTER Y WITH ACUTE",
+ ["lccode"]=0x00FD,
+ ["linebreak"]="al",
+ ["shcode"]=0x0059,
+ ["specials"]={ "char", 0x0059, 0x0301 },
+ ["unicodeslot"]=0x00DD, -- Ã
+ },
+ {
+ ["adobename"]="Thorn",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="Thorn",
+ ["description"]="LATIN CAPITAL LETTER THORN",
+ ["lccode"]=0x00FE,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x00DE, -- Þ
+ },
+ {
+ ["adobename"]="germandbls",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="ssharp",
+ ["description"]="LATIN SMALL LETTER SHARP S",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x00DF, -- ß
+ ["uccodes"]={0x0053,0x0053},
+ },
+ {
+ ["adobename"]="agrave",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="agrave",
+ ["description"]="LATIN SMALL LETTER A WITH GRAVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0061,
+ ["specials"]={ "char", 0x0061, 0x0300 },
+ ["uccode"]=0x00C0,
+ ["unicodeslot"]=0x00E0, -- à
+ },
+ {
+ ["adobename"]="aacute",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="aacute",
+ ["description"]="LATIN SMALL LETTER A WITH ACUTE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0061,
+ ["specials"]={ "char", 0x0061, 0x0301 },
+ ["uccode"]=0x00C1,
+ ["unicodeslot"]=0x00E1, -- á
+ },
+ {
+ ["adobename"]="acircumflex",
+ ["category"]="ll",
+ ["contextname"]="acircumflex",
+ ["description"]="LATIN SMALL LETTER A WITH CIRCUMFLEX",
+ ["linebreak"]="al",
+ ["shcode"]=0x0061,
+ ["specials"]={ "char", 0x0061, 0x0302 },
+ ["uccode"]=0x00C2,
+ ["unicodeslot"]=0x00E2, -- â
+ },
+ {
+ ["adobename"]="atilde",
+ ["category"]="ll",
+ ["contextname"]="atilde",
+ ["description"]="LATIN SMALL LETTER A WITH TILDE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0061,
+ ["specials"]={ "char", 0x0061, 0x0303 },
+ ["uccode"]=0x00C3,
+ ["unicodeslot"]=0x00E3, -- ã
+ },
+ {
+ ["adobename"]="adieresis",
+ ["category"]="ll",
+ ["contextname"]="adiaeresis",
+ ["description"]="LATIN SMALL LETTER A WITH DIAERESIS",
+ ["linebreak"]="al",
+ ["shcode"]=0x0061,
+ ["specials"]={ "char", 0x0061, 0x0308 },
+ ["uccode"]=0x00C4,
+ ["unicodeslot"]=0x00E4, -- ä
+ },
+ {
+ ["adobename"]="aring",
+ ["category"]="ll",
+ ["contextname"]="aring",
+ ["description"]="LATIN SMALL LETTER A WITH RING ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0061,
+ ["specials"]={ "char", 0x0061, 0x030A },
+ ["uccode"]=0x00C5,
+ ["unicodeslot"]=0x00E5, -- å
+ },
+ {
+ ["adobename"]="ae",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="aeligature",
+ ["description"]="LATIN SMALL LETTER AE",
+ ["linebreak"]="al",
+ ["shcode"]= { 0x00E6, 0x00EA },
+ ["uccode"]=0x00C6,
+ ["unicodeslot"]=0x00E6, -- æ
+ },
+ {
+ ["adobename"]="ccedilla",
+ ["category"]="ll",
+ ["contextname"]="ccedilla",
+ ["description"]="LATIN SMALL LETTER C WITH CEDILLA",
+ ["linebreak"]="al",
+ ["shcode"]=0x0063,
+ ["specials"]={ "char", 0x0063, 0x0327 },
+ ["uccode"]=0x00C7,
+ ["unicodeslot"]=0x00E7, -- ç
+ },
+ {
+ ["adobename"]="egrave",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="egrave",
+ ["description"]="LATIN SMALL LETTER E WITH GRAVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0065,
+ ["specials"]={ "char", 0x0065, 0x0300 },
+ ["uccode"]=0x00C8,
+ ["unicodeslot"]=0x00E8, -- è
+ },
+ {
+ ["adobename"]="eacute",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="eacute",
+ ["description"]="LATIN SMALL LETTER E WITH ACUTE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0065,
+ ["specials"]={ "char", 0x0065, 0x0301 },
+ ["uccode"]=0x00C9,
+ ["unicodeslot"]=0x00E9, -- é
+ },
+ {
+ ["adobename"]="ecircumflex",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="ecircumflex",
+ ["description"]="LATIN SMALL LETTER E WITH CIRCUMFLEX",
+ ["linebreak"]="al",
+ ["shcode"]=0x0065,
+ ["specials"]={ "char", 0x0065, 0x0302 },
+ ["uccode"]=0x00CA,
+ ["unicodeslot"]=0x00EA, -- ê
+ },
+ {
+ ["adobename"]="edieresis",
+ ["category"]="ll",
+ ["contextname"]="ediaeresis",
+ ["description"]="LATIN SMALL LETTER E WITH DIAERESIS",
+ ["linebreak"]="al",
+ ["shcode"]=0x0065,
+ ["specials"]={ "char", 0x0065, 0x0308 },
+ ["uccode"]=0x00CB,
+ ["unicodeslot"]=0x00EB, -- ë
+ },
+ {
+ ["adobename"]="igrave",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="igrave",
+ ["description"]="LATIN SMALL LETTER I WITH GRAVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0069,
+ ["specials"]={ "char", 0x0069, 0x0300 },
+ ["uccode"]=0x00CC,
+ ["unicodeslot"]=0x00EC, -- ì
+ },
+ {
+ ["adobename"]="iacute",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="iacute",
+ ["description"]="LATIN SMALL LETTER I WITH ACUTE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0069,
+ ["specials"]={ "char", 0x0069, 0x0301 },
+ ["uccode"]=0x00CD,
+ ["unicodeslot"]=0x00ED, -- í
+ },
+ {
+ ["adobename"]="icircumflex",
+ ["category"]="ll",
+ ["contextname"]="icircumflex",
+ ["description"]="LATIN SMALL LETTER I WITH CIRCUMFLEX",
+ ["linebreak"]="al",
+ ["shcode"]=0x0069,
+ ["specials"]={ "char", 0x0069, 0x0302 },
+ ["uccode"]=0x00CE,
+ ["unicodeslot"]=0x00EE, -- î
+ },
+ {
+ ["adobename"]="idieresis",
+ ["category"]="ll",
+ ["contextname"]="idiaeresis",
+ ["description"]="LATIN SMALL LETTER I WITH DIAERESIS",
+ ["linebreak"]="al",
+ ["shcode"]=0x0069,
+ ["specials"]={ "char", 0x0069, 0x0308 },
+ ["uccode"]=0x00CF,
+ ["unicodeslot"]=0x00EF, -- ï
+ },
+ {
+ ["adobename"]="eth",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="eth",
+ ["description"]="LATIN SMALL LETTER ETH",
+ ["linebreak"]="al",
+ ["uccode"]=0x00D0,
+ ["unicodeslot"]=0x00F0, -- ð
+ },
+ {
+ ["adobename"]="ntilde",
+ ["category"]="ll",
+ ["contextname"]="ntilde",
+ ["description"]="LATIN SMALL LETTER N WITH TILDE",
+ ["linebreak"]="al",
+ ["shcode"]=0x006E,
+ ["specials"]={ "char", 0x006E, 0x0303 },
+ ["uccode"]=0x00D1,
+ ["unicodeslot"]=0x00F1, -- ñ
+ },
+ {
+ ["adobename"]="ograve",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="ograve",
+ ["description"]="LATIN SMALL LETTER O WITH GRAVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x006F,
+ ["specials"]={ "char", 0x006F, 0x0300 },
+ ["uccode"]=0x00D2,
+ ["unicodeslot"]=0x00F2, -- ò
+ },
+ {
+ ["adobename"]="oacute",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="oacute",
+ ["description"]="LATIN SMALL LETTER O WITH ACUTE",
+ ["linebreak"]="al",
+ ["shcode"]=0x006F,
+ ["specials"]={ "char", 0x006F, 0x0301 },
+ ["uccode"]=0x00D3,
+ ["unicodeslot"]=0x00F3, -- ó
+ },
+ {
+ ["adobename"]="ocircumflex",
+ ["category"]="ll",
+ ["contextname"]="ocircumflex",
+ ["description"]="LATIN SMALL LETTER O WITH CIRCUMFLEX",
+ ["linebreak"]="al",
+ ["shcode"]=0x006F,
+ ["specials"]={ "char", 0x006F, 0x0302 },
+ ["uccode"]=0x00D4,
+ ["unicodeslot"]=0x00F4, -- ô
+ },
+ {
+ ["adobename"]="otilde",
+ ["category"]="ll",
+ ["contextname"]="otilde",
+ ["description"]="LATIN SMALL LETTER O WITH TILDE",
+ ["linebreak"]="al",
+ ["shcode"]=0x006F,
+ ["specials"]={ "char", 0x006F, 0x0303 },
+ ["uccode"]=0x00D5,
+ ["unicodeslot"]=0x00F5, -- õ
+ },
+ {
+ ["adobename"]="odieresis",
+ ["category"]="ll",
+ ["contextname"]="odiaeresis",
+ ["description"]="LATIN SMALL LETTER O WITH DIAERESIS",
+ ["linebreak"]="al",
+ ["shcode"]=0x006F,
+ ["specials"]={ "char", 0x006F, 0x0308 },
+ ["uccode"]=0x00D6,
+ ["unicodeslot"]=0x00F6, -- ö
+ },
+ {
+ ["adobename"]="divide",
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["contextname"]="textdiv",
+ ["description"]="DIVISION SIGN",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x00F7, -- ÷
+ },
+ {
+ ["adobename"]="oslash",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="ostroke",
+ ["description"]="LATIN SMALL LETTER O WITH STROKE",
+ ["linebreak"]="al",
+ ["shcode"]=0x006F,
+ ["uccode"]=0x00D8,
+ ["unicodeslot"]=0x00F8, -- ø
+ },
+ {
+ ["adobename"]="ugrave",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="ugrave",
+ ["description"]="LATIN SMALL LETTER U WITH GRAVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0075,
+ ["specials"]={ "char", 0x0075, 0x0300 },
+ ["uccode"]=0x00D9,
+ ["unicodeslot"]=0x00F9, -- ù
+ },
+ {
+ ["adobename"]="uacute",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="uacute",
+ ["description"]="LATIN SMALL LETTER U WITH ACUTE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0075,
+ ["specials"]={ "char", 0x0075, 0x0301 },
+ ["uccode"]=0x00DA,
+ ["unicodeslot"]=0x00FA, -- ú
+ },
+ {
+ ["adobename"]="ucircumflex",
+ ["category"]="ll",
+ ["contextname"]="ucircumflex",
+ ["description"]="LATIN SMALL LETTER U WITH CIRCUMFLEX",
+ ["linebreak"]="al",
+ ["shcode"]=0x0075,
+ ["specials"]={ "char", 0x0075, 0x0302 },
+ ["uccode"]=0x00DB,
+ ["unicodeslot"]=0x00FB, -- û
+ },
+ {
+ ["adobename"]="udieresis",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="udiaeresis",
+ ["description"]="LATIN SMALL LETTER U WITH DIAERESIS",
+ ["linebreak"]="al",
+ ["shcode"]=0x0075,
+ ["specials"]={ "char", 0x0075, 0x0308 },
+ ["uccode"]=0x00DC,
+ ["unicodeslot"]=0x00FC, -- ü
+ },
+ {
+ ["adobename"]="yacute",
+ ["category"]="ll",
+ ["contextname"]="yacute",
+ ["description"]="LATIN SMALL LETTER Y WITH ACUTE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0079,
+ ["specials"]={ "char", 0x0079, 0x0301 },
+ ["uccode"]=0x00DD,
+ ["unicodeslot"]=0x00FD, -- ý
+ },
+ {
+ ["adobename"]="thorn",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="thorn",
+ ["description"]="LATIN SMALL LETTER THORN",
+ ["linebreak"]="al",
+ ["uccode"]=0x00DE,
+ ["unicodeslot"]=0x00FE, -- þ
+ },
+ {
+ ["adobename"]="ydieresis",
+ ["category"]="ll",
+ ["contextname"]="ydiaeresis",
+ ["description"]="LATIN SMALL LETTER Y WITH DIAERESIS",
+ ["linebreak"]="al",
+ ["shcode"]=0x0079,
+ ["specials"]={ "char", 0x0079, 0x0308 },
+ ["uccode"]=0x0178,
+ ["unicodeslot"]=0x00FF, -- ÿ
+ },
+ {
+ ["adobename"]="Amacron",
+ ["category"]="lu",
+ ["contextname"]="Amacron",
+ ["description"]="LATIN CAPITAL LETTER A WITH MACRON",
+ ["lccode"]=0x0101,
+ ["linebreak"]="al",
+ ["shcode"]=0x0041,
+ ["specials"]={ "char", 0x0041, 0x0304 },
+ ["unicodeslot"]=0x0100, -- Ā
+ },
+ {
+ ["adobename"]="amacron",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="amacron",
+ ["description"]="LATIN SMALL LETTER A WITH MACRON",
+ ["linebreak"]="al",
+ ["shcode"]=0x0061,
+ ["specials"]={ "char", 0x0061, 0x0304 },
+ ["uccode"]=0x0100,
+ ["unicodeslot"]=0x0101, -- Ä
+ },
+ {
+ ["adobename"]="Abreve",
+ ["category"]="lu",
+ ["contextname"]="Abreve",
+ ["description"]="LATIN CAPITAL LETTER A WITH BREVE",
+ ["lccode"]=0x0103,
+ ["linebreak"]="al",
+ ["shcode"]=0x0041,
+ ["specials"]={ "char", 0x0041, 0x0306 },
+ ["unicodeslot"]=0x0102, -- Ä‚
+ },
+ {
+ ["adobename"]="abreve",
+ ["category"]="ll",
+ ["contextname"]="abreve",
+ ["description"]="LATIN SMALL LETTER A WITH BREVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0061,
+ ["specials"]={ "char", 0x0061, 0x0306 },
+ ["uccode"]=0x0102,
+ ["unicodeslot"]=0x0103, -- ă
+ },
+ {
+ ["adobename"]="Aogonek",
+ ["category"]="lu",
+ ["contextname"]="Aogonek",
+ ["description"]="LATIN CAPITAL LETTER A WITH OGONEK",
+ ["lccode"]=0x0105,
+ ["linebreak"]="al",
+ ["shcode"]=0x0041,
+ ["specials"]={ "char", 0x0041, 0x0328 },
+ ["unicodeslot"]=0x0104, -- Ä„
+ },
+ {
+ ["adobename"]="aogonek",
+ ["category"]="ll",
+ ["contextname"]="aogonek",
+ ["description"]="LATIN SMALL LETTER A WITH OGONEK",
+ ["linebreak"]="al",
+ ["shcode"]=0x0061,
+ ["specials"]={ "char", 0x0061, 0x0328 },
+ ["uccode"]=0x0104,
+ ["unicodeslot"]=0x0105, -- Ä…
+ },
+ {
+ ["adobename"]="Cacute",
+ ["category"]="lu",
+ ["contextname"]="Cacute",
+ ["description"]="LATIN CAPITAL LETTER C WITH ACUTE",
+ ["lccode"]=0x0107,
+ ["linebreak"]="al",
+ ["shcode"]=0x0043,
+ ["specials"]={ "char", 0x0043, 0x0301 },
+ ["unicodeslot"]=0x0106, -- Ć
+ },
+ {
+ ["adobename"]="cacute",
+ ["category"]="ll",
+ ["contextname"]="cacute",
+ ["description"]="LATIN SMALL LETTER C WITH ACUTE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0063,
+ ["specials"]={ "char", 0x0063, 0x0301 },
+ ["uccode"]=0x0106,
+ ["unicodeslot"]=0x0107, -- ć
+ },
+ {
+ ["adobename"]="Ccircumflex",
+ ["category"]="lu",
+ ["contextname"]="Ccircumflex",
+ ["description"]="LATIN CAPITAL LETTER C WITH CIRCUMFLEX",
+ ["lccode"]=0x0109,
+ ["linebreak"]="al",
+ ["shcode"]=0x0043,
+ ["specials"]={ "char", 0x0043, 0x0302 },
+ ["unicodeslot"]=0x0108, -- Ĉ
+ },
+ {
+ ["adobename"]="ccircumflex",
+ ["category"]="ll",
+ ["contextname"]="ccircumflex",
+ ["description"]="LATIN SMALL LETTER C WITH CIRCUMFLEX",
+ ["linebreak"]="al",
+ ["shcode"]=0x0063,
+ ["specials"]={ "char", 0x0063, 0x0302 },
+ ["uccode"]=0x0108,
+ ["unicodeslot"]=0x0109, -- ĉ
+ },
+ {
+ ["adobename"]="Cdotaccent",
+ ["category"]="lu",
+ ["contextname"]="Cdotaccent",
+ ["description"]="LATIN CAPITAL LETTER C WITH DOT ABOVE",
+ ["lccode"]=0x010B,
+ ["linebreak"]="al",
+ ["shcode"]=0x0043,
+ ["specials"]={ "char", 0x0043, 0x0307 },
+ ["unicodeslot"]=0x010A, -- ÄŠ
+ },
+ {
+ ["adobename"]="cdotaccent",
+ ["category"]="ll",
+ ["contextname"]="cdotaccent",
+ ["description"]="LATIN SMALL LETTER C WITH DOT ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0063,
+ ["specials"]={ "char", 0x0063, 0x0307 },
+ ["uccode"]=0x010A,
+ ["unicodeslot"]=0x010B, -- Ä‹
+ },
+ {
+ ["adobename"]="Ccaron",
+ ["category"]="lu",
+ ["contextname"]="Ccaron",
+ ["description"]="LATIN CAPITAL LETTER C WITH CARON",
+ ["lccode"]=0x010D,
+ ["linebreak"]="al",
+ ["shcode"]=0x0043,
+ ["specials"]={ "char", 0x0043, 0x030C },
+ ["unicodeslot"]=0x010C, -- Č
+ },
+ {
+ ["adobename"]="ccaron",
+ ["category"]="ll",
+ ["contextname"]="ccaron",
+ ["description"]="LATIN SMALL LETTER C WITH CARON",
+ ["linebreak"]="al",
+ ["shcode"]=0x0063,
+ ["specials"]={ "char", 0x0063, 0x030C },
+ ["uccode"]=0x010C,
+ ["unicodeslot"]=0x010D, -- Ä
+ },
+ {
+ ["adobename"]="Dcaron",
+ ["category"]="lu",
+ ["contextname"]="Dcaron",
+ ["description"]="LATIN CAPITAL LETTER D WITH CARON",
+ ["lccode"]=0x010F,
+ ["linebreak"]="al",
+ ["shcode"]=0x0044,
+ ["specials"]={ "char", 0x0044, 0x030C },
+ ["unicodeslot"]=0x010E, -- ÄŽ
+ },
+ {
+ ["adobename"]="dcaron",
+ ["category"]="ll",
+ ["contextname"]="dcaron",
+ ["description"]="LATIN SMALL LETTER D WITH CARON",
+ ["linebreak"]="al",
+ ["shcode"]=0x0064,
+ ["specials"]={ "char", 0x0064, 0x030C },
+ ["uccode"]=0x010E,
+ ["unicodeslot"]=0x010F, -- Ä
+ },
+ {
+ ["adobename"]="Dcroat",
+ ["category"]="lu",
+ ["contextname"]="Dstroke",
+ ["description"]="LATIN CAPITAL LETTER D WITH STROKE",
+ ["lccode"]=0x0111,
+ ["linebreak"]="al",
+ ["shcode"]=0x0044,
+ ["unicodeslot"]=0x0110, -- Ä
+ },
+ {
+ ["adobename"]="dcroat",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="dstroke",
+ ["description"]="LATIN SMALL LETTER D WITH STROKE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0064,
+ ["uccode"]=0x0110,
+ ["unicodeslot"]=0x0111, -- Ä‘
+ },
+ {
+ ["adobename"]="Emacron",
+ ["category"]="lu",
+ ["contextname"]="Emacron",
+ ["description"]="LATIN CAPITAL LETTER E WITH MACRON",
+ ["lccode"]=0x0113,
+ ["linebreak"]="al",
+ ["shcode"]=0x0045,
+ ["specials"]={ "char", 0x0045, 0x0304 },
+ ["unicodeslot"]=0x0112, -- Ä’
+ },
+ {
+ ["adobename"]="emacron",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="emacron",
+ ["description"]="LATIN SMALL LETTER E WITH MACRON",
+ ["linebreak"]="al",
+ ["shcode"]=0x0065,
+ ["specials"]={ "char", 0x0065, 0x0304 },
+ ["uccode"]=0x0112,
+ ["unicodeslot"]=0x0113, -- Ä“
+ },
+ {
+ ["adobename"]="Ebreve",
+ ["category"]="lu",
+ ["contextname"]="Ebreve",
+ ["description"]="LATIN CAPITAL LETTER E WITH BREVE",
+ ["lccode"]=0x0115,
+ ["linebreak"]="al",
+ ["shcode"]=0x0045,
+ ["specials"]={ "char", 0x0045, 0x0306 },
+ ["unicodeslot"]=0x0114, -- Ä”
+ },
+ {
+ ["adobename"]="ebreve",
+ ["category"]="ll",
+ ["contextname"]="ebreve",
+ ["description"]="LATIN SMALL LETTER E WITH BREVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0065,
+ ["specials"]={ "char", 0x0065, 0x0306 },
+ ["uccode"]=0x0114,
+ ["unicodeslot"]=0x0115, -- Ä•
+ },
+ {
+ ["adobename"]="Edotaccent",
+ ["category"]="lu",
+ ["contextname"]="Edotaccent",
+ ["description"]="LATIN CAPITAL LETTER E WITH DOT ABOVE",
+ ["lccode"]=0x0117,
+ ["linebreak"]="al",
+ ["shcode"]=0x0045,
+ ["specials"]={ "char", 0x0045, 0x0307 },
+ ["unicodeslot"]=0x0116, -- Ä–
+ },
+ {
+ ["adobename"]="edotaccent",
+ ["category"]="ll",
+ ["contextname"]="edotaccent",
+ ["description"]="LATIN SMALL LETTER E WITH DOT ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0065,
+ ["specials"]={ "char", 0x0065, 0x0307 },
+ ["uccode"]=0x0116,
+ ["unicodeslot"]=0x0117, -- Ä—
+ },
+ {
+ ["adobename"]="Eogonek",
+ ["category"]="lu",
+ ["contextname"]="Eogonek",
+ ["description"]="LATIN CAPITAL LETTER E WITH OGONEK",
+ ["lccode"]=0x0119,
+ ["linebreak"]="al",
+ ["shcode"]=0x0045,
+ ["specials"]={ "char", 0x0045, 0x0328 },
+ ["unicodeslot"]=0x0118, -- Ę
+ },
+ {
+ ["adobename"]="eogonek",
+ ["category"]="ll",
+ ["contextname"]="eogonek",
+ ["description"]="LATIN SMALL LETTER E WITH OGONEK",
+ ["linebreak"]="al",
+ ["shcode"]=0x0065,
+ ["specials"]={ "char", 0x0065, 0x0328 },
+ ["uccode"]=0x0118,
+ ["unicodeslot"]=0x0119, -- Ä™
+ },
+ {
+ ["adobename"]="Ecaron",
+ ["category"]="lu",
+ ["contextname"]="Ecaron",
+ ["description"]="LATIN CAPITAL LETTER E WITH CARON",
+ ["lccode"]=0x011B,
+ ["linebreak"]="al",
+ ["shcode"]=0x0045,
+ ["specials"]={ "char", 0x0045, 0x030C },
+ ["unicodeslot"]=0x011A, -- Äš
+ },
+ {
+ ["adobename"]="ecaron",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="ecaron",
+ ["description"]="LATIN SMALL LETTER E WITH CARON",
+ ["linebreak"]="al",
+ ["shcode"]=0x0065,
+ ["specials"]={ "char", 0x0065, 0x030C },
+ ["uccode"]=0x011A,
+ ["unicodeslot"]=0x011B, -- Ä›
+ },
+ {
+ ["adobename"]="Gcircumflex",
+ ["category"]="lu",
+ ["contextname"]="Gcircumflex",
+ ["description"]="LATIN CAPITAL LETTER G WITH CIRCUMFLEX",
+ ["lccode"]=0x011D,
+ ["linebreak"]="al",
+ ["shcode"]=0x0047,
+ ["specials"]={ "char", 0x0047, 0x0302 },
+ ["unicodeslot"]=0x011C, -- Ĝ
+ },
+ {
+ ["adobename"]="gcircumflex",
+ ["category"]="ll",
+ ["contextname"]="gcircumflex",
+ ["description"]="LATIN SMALL LETTER G WITH CIRCUMFLEX",
+ ["linebreak"]="al",
+ ["shcode"]=0x0067,
+ ["specials"]={ "char", 0x0067, 0x0302 },
+ ["uccode"]=0x011C,
+ ["unicodeslot"]=0x011D, -- Ä
+ },
+ {
+ ["adobename"]="Gbreve",
+ ["category"]="lu",
+ ["contextname"]="Gbreve",
+ ["description"]="LATIN CAPITAL LETTER G WITH BREVE",
+ ["lccode"]=0x011F,
+ ["linebreak"]="al",
+ ["shcode"]=0x0047,
+ ["specials"]={ "char", 0x0047, 0x0306 },
+ ["unicodeslot"]=0x011E, -- Äž
+ },
+ {
+ ["adobename"]="gbreve",
+ ["category"]="ll",
+ ["contextname"]="gbreve",
+ ["description"]="LATIN SMALL LETTER G WITH BREVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0067,
+ ["specials"]={ "char", 0x0067, 0x0306 },
+ ["uccode"]=0x011E,
+ ["unicodeslot"]=0x011F, -- ÄŸ
+ },
+ {
+ ["adobename"]="Gdotaccent",
+ ["category"]="lu",
+ ["contextname"]="Gdotaccent",
+ ["description"]="LATIN CAPITAL LETTER G WITH DOT ABOVE",
+ ["lccode"]=0x0121,
+ ["linebreak"]="al",
+ ["shcode"]=0x0047,
+ ["specials"]={ "char", 0x0047, 0x0307 },
+ ["unicodeslot"]=0x0120, -- Ä 
+ },
+ {
+ ["adobename"]="gdotaccent",
+ ["category"]="ll",
+ ["contextname"]="gdotaccent",
+ ["description"]="LATIN SMALL LETTER G WITH DOT ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0067,
+ ["specials"]={ "char", 0x0067, 0x0307 },
+ ["uccode"]=0x0120,
+ ["unicodeslot"]=0x0121, -- Ä¡
+ },
+ {
+ ["adobename"]="Gcommaaccent",
+ ["category"]="lu",
+ ["contextname"]="Gcommaaccent",
+ ["description"]="LATIN CAPITAL LETTER G WITH CEDILLA",
+ ["lccode"]=0x0123,
+ ["linebreak"]="al",
+ ["shcode"]=0x0047,
+ ["specials"]={ "char", 0x0047, 0x0327 },
+ ["unicodeslot"]=0x0122, -- Ģ
+ },
+ {
+ ["adobename"]="gcommaaccent",
+ ["category"]="ll",
+ ["contextname"]="gcommaaccent",
+ ["description"]="LATIN SMALL LETTER G WITH CEDILLA",
+ ["linebreak"]="al",
+ ["shcode"]=0x0067,
+ ["specials"]={ "char", 0x0067, 0x0327 },
+ ["uccode"]=0x0122,
+ ["unicodeslot"]=0x0123, -- ģ
+ },
+ {
+ ["adobename"]="Hcircumflex",
+ ["category"]="lu",
+ ["contextname"]="Hcircumflex",
+ ["description"]="LATIN CAPITAL LETTER H WITH CIRCUMFLEX",
+ ["lccode"]=0x0125,
+ ["linebreak"]="al",
+ ["shcode"]=0x0048,
+ ["specials"]={ "char", 0x0048, 0x0302 },
+ ["unicodeslot"]=0x0124, -- Ĥ
+ },
+ {
+ ["adobename"]="hcircumflex",
+ ["category"]="ll",
+ ["contextname"]="hcircumflex",
+ ["description"]="LATIN SMALL LETTER H WITH CIRCUMFLEX",
+ ["linebreak"]="al",
+ ["shcode"]=0x0068,
+ ["specials"]={ "char", 0x0068, 0x0302 },
+ ["uccode"]=0x0124,
+ ["unicodeslot"]=0x0125, -- ĥ
+ },
+ {
+ ["adobename"]="Hbar",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="Hstroke",
+ ["description"]="LATIN CAPITAL LETTER H WITH STROKE",
+ ["lccode"]=0x0127,
+ ["linebreak"]="al",
+ ["shcode"]=0x0048,
+ ["unicodeslot"]=0x0126, -- Ħ
+ },
+ {
+ ["adobename"]="hbar",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="hstroke",
+ ["description"]="LATIN SMALL LETTER H WITH STROKE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0068,
+ ["uccode"]=0x0126,
+ ["unicodeslot"]=0x0127, -- ħ
+ },
+ {
+ ["adobename"]="Itilde",
+ ["category"]="lu",
+ ["contextname"]="Itilde",
+ ["description"]="LATIN CAPITAL LETTER I WITH TILDE",
+ ["lccode"]=0x0129,
+ ["linebreak"]="al",
+ ["shcode"]=0x0049,
+ ["specials"]={ "char", 0x0049, 0x0303 },
+ ["unicodeslot"]=0x0128, -- Ĩ
+ },
+ {
+ ["adobename"]="itilde",
+ ["category"]="ll",
+ ["contextname"]="itilde",
+ ["description"]="LATIN SMALL LETTER I WITH TILDE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0069,
+ ["specials"]={ "char", 0x0069, 0x0303 },
+ ["uccode"]=0x0128,
+ ["unicodeslot"]=0x0129, -- Ä©
+ },
+ {
+ ["adobename"]="Imacron",
+ ["category"]="lu",
+ ["contextname"]="Imacron",
+ ["description"]="LATIN CAPITAL LETTER I WITH MACRON",
+ ["lccode"]=0x012B,
+ ["linebreak"]="al",
+ ["shcode"]=0x0049,
+ ["specials"]={ "char", 0x0049, 0x0304 },
+ ["unicodeslot"]=0x012A, -- Ī
+ },
+ {
+ ["adobename"]="imacron",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="imacron",
+ ["description"]="LATIN SMALL LETTER I WITH MACRON",
+ ["linebreak"]="al",
+ ["shcode"]=0x0069,
+ ["specials"]={ "char", 0x0069, 0x0304 },
+ ["uccode"]=0x012A,
+ ["unicodeslot"]=0x012B, -- Ä«
+ },
+ {
+ ["adobename"]="Ibreve",
+ ["category"]="lu",
+ ["contextname"]="Ibreve",
+ ["description"]="LATIN CAPITAL LETTER I WITH BREVE",
+ ["lccode"]=0x012D,
+ ["linebreak"]="al",
+ ["shcode"]=0x0049,
+ ["specials"]={ "char", 0x0049, 0x0306 },
+ ["unicodeslot"]=0x012C, -- Ĭ
+ },
+ {
+ ["adobename"]="ibreve",
+ ["category"]="ll",
+ ["contextname"]="ibreve",
+ ["description"]="LATIN SMALL LETTER I WITH BREVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0069,
+ ["specials"]={ "char", 0x0069, 0x0306 },
+ ["uccode"]=0x012C,
+ ["unicodeslot"]=0x012D, -- Ä­
+ },
+ {
+ ["adobename"]="Iogonek",
+ ["category"]="lu",
+ ["contextname"]="Iogonek",
+ ["description"]="LATIN CAPITAL LETTER I WITH OGONEK",
+ ["lccode"]=0x012F,
+ ["linebreak"]="al",
+ ["shcode"]=0x0049,
+ ["specials"]={ "char", 0x0049, 0x0328 },
+ ["unicodeslot"]=0x012E, -- Ä®
+ },
+ {
+ ["adobename"]="iogonek",
+ ["category"]="ll",
+ ["contextname"]="iogonek",
+ ["description"]="LATIN SMALL LETTER I WITH OGONEK",
+ ["linebreak"]="al",
+ ["shcode"]=0x0069,
+ ["specials"]={ "char", 0x0069, 0x0328 },
+ ["uccode"]=0x012E,
+ ["unicodeslot"]=0x012F, -- į
+ },
+ {
+ ["adobename"]="Idotaccent",
+ ["category"]="lu",
+ ["contextname"]="Idotaccent",
+ ["description"]="LATIN CAPITAL LETTER I WITH DOT ABOVE",
+ ["lccode"]=0x0069,
+ ["linebreak"]="al",
+ ["shcode"]=0x0049,
+ ["specials"]={ "char", 0x0049, 0x0307 },
+ ["unicodeslot"]=0x0130, -- Ä°
+ },
+ {
+ ["adobename"]="dotlessi",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="dotlessi",
+ ["description"]="LATIN SMALL LETTER DOTLESS I",
+ ["linebreak"]="al",
+ ["uccode"]=0x0049,
+ ["unicodeslot"]=0x0131, -- ı
+ },
+ {
+ ["adobename"]="IJ",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="IJligature",
+ ["description"]="LATIN CAPITAL LIGATURE IJ",
+ ["lccode"]=0x0133,
+ ["linebreak"]="al",
+ ["shcode"]={ 0x0049, 0x004A },
+ ["specials"]={ "compat", 0x0049, 0x004A },
+ ["unicodeslot"]=0x0132, -- IJ
+ },
+ {
+ ["adobename"]="ij",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="ijligature",
+ ["description"]="LATIN SMALL LIGATURE IJ",
+ ["linebreak"]="al",
+ ["shcode"]={ 0x0069, 0x006A },
+ ["specials"]={ "compat", 0x0069, 0x006A },
+ ["uccode"]=0x0132,
+ ["unicodeslot"]=0x0133, -- ij
+ },
+ {
+ ["adobename"]="Jcircumflex",
+ ["category"]="lu",
+ ["contextname"]="Jcircumflex",
+ ["description"]="LATIN CAPITAL LETTER J WITH CIRCUMFLEX",
+ ["lccode"]=0x0135,
+ ["linebreak"]="al",
+ ["shcode"]=0x004A,
+ ["specials"]={ "char", 0x004A, 0x0302 },
+ ["unicodeslot"]=0x0134, -- Ä´
+ },
+ {
+ ["adobename"]="jcircumflex",
+ ["category"]="ll",
+ ["contextname"]="jcircumflex",
+ ["description"]="LATIN SMALL LETTER J WITH CIRCUMFLEX",
+ ["linebreak"]="al",
+ ["shcode"]=0x006A,
+ ["specials"]={ "char", 0x006A, 0x0302 },
+ ["uccode"]=0x0134,
+ ["unicodeslot"]=0x0135, -- ĵ
+ },
+ {
+ ["adobename"]="Kcommaaccent",
+ ["category"]="lu",
+ ["contextname"]="Kcommaaccent",
+ ["description"]="LATIN CAPITAL LETTER K WITH CEDILLA",
+ ["lccode"]=0x0137,
+ ["linebreak"]="al",
+ ["shcode"]=0x004B,
+ ["specials"]={ "char", 0x004B, 0x0327 },
+ ["unicodeslot"]=0x0136, -- Ķ
+ },
+ {
+ ["adobename"]="kcommaaccent",
+ ["category"]="ll",
+ ["contextname"]="kcommaaccent",
+ ["description"]="LATIN SMALL LETTER K WITH CEDILLA",
+ ["linebreak"]="al",
+ ["shcode"]=0x006B,
+ ["specials"]={ "char", 0x006B, 0x0327 },
+ ["uccode"]=0x0136,
+ ["unicodeslot"]=0x0137, -- Ä·
+ },
+ {
+ ["adobename"]="kgreenlandic",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="kkra",
+ ["description"]="LATIN SMALL LETTER KRA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0138, -- ĸ
+ },
+ {
+ ["adobename"]="Lacute",
+ ["category"]="lu",
+ ["contextname"]="Lacute",
+ ["description"]="LATIN CAPITAL LETTER L WITH ACUTE",
+ ["lccode"]=0x013A,
+ ["linebreak"]="al",
+ ["shcode"]=0x004C,
+ ["specials"]={ "char", 0x004C, 0x0301 },
+ ["unicodeslot"]=0x0139, -- Ĺ
+ },
+ {
+ ["adobename"]="lacute",
+ ["category"]="ll",
+ ["contextname"]="lacute",
+ ["description"]="LATIN SMALL LETTER L WITH ACUTE",
+ ["linebreak"]="al",
+ ["shcode"]=0x006C,
+ ["specials"]={ "char", 0x006C, 0x0301 },
+ ["uccode"]=0x0139,
+ ["unicodeslot"]=0x013A, -- ĺ
+ },
+ {
+ ["adobename"]="Lcommaaccent",
+ ["category"]="lu",
+ ["contextname"]="Lcommaaccent",
+ ["description"]="LATIN CAPITAL LETTER L WITH CEDILLA",
+ ["lccode"]=0x013C,
+ ["linebreak"]="al",
+ ["shcode"]=0x004C,
+ ["specials"]={ "char", 0x004C, 0x0327 },
+ ["unicodeslot"]=0x013B, -- Ä»
+ },
+ {
+ ["adobename"]="lcommaaccent",
+ ["category"]="ll",
+ ["contextname"]="lcommaaccent",
+ ["description"]="LATIN SMALL LETTER L WITH CEDILLA",
+ ["linebreak"]="al",
+ ["shcode"]=0x006C,
+ ["specials"]={ "char", 0x006C, 0x0327 },
+ ["uccode"]=0x013B,
+ ["unicodeslot"]=0x013C, -- ļ
+ },
+ {
+ ["adobename"]="Lcaron",
+ ["category"]="lu",
+ ["contextname"]="Lcaron",
+ ["description"]="LATIN CAPITAL LETTER L WITH CARON",
+ ["lccode"]=0x013E,
+ ["linebreak"]="al",
+ ["shcode"]=0x004C,
+ ["specials"]={ "char", 0x004C, 0x030C },
+ ["unicodeslot"]=0x013D, -- Ľ
+ },
+ {
+ ["adobename"]="lcaron",
+ ["category"]="ll",
+ ["contextname"]="lcaron",
+ ["description"]="LATIN SMALL LETTER L WITH CARON",
+ ["linebreak"]="al",
+ ["shcode"]=0x006C,
+ ["specials"]={ "char", 0x006C, 0x030C },
+ ["uccode"]=0x013D,
+ ["unicodeslot"]=0x013E, -- ľ
+ },
+ {
+ ["adobename"]="Ldot",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="Ldotmiddle",
+ ["description"]="LATIN CAPITAL LETTER L WITH MIDDLE DOT",
+ ["lccode"]=0x0140,
+ ["linebreak"]="al",
+ ["shcode"]=0x004C,
+ ["specials"]={ "compat", 0x004C, 0x00B7 },
+ ["unicodeslot"]=0x013F, -- Ä¿
+ },
+ {
+ ["adobename"]="ldot",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="ldotmiddle",
+ ["description"]="LATIN SMALL LETTER L WITH MIDDLE DOT",
+ ["linebreak"]="al",
+ ["shcode"]=0x006C,
+ ["specials"]={ "compat", 0x006C, 0x00B7 },
+ ["uccode"]=0x013F,
+ ["unicodeslot"]=0x0140, -- ŀ
+ },
+ {
+ ["adobename"]="Lslash",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="Lstroke",
+ ["description"]="LATIN CAPITAL LETTER L WITH STROKE",
+ ["lccode"]=0x0142,
+ ["linebreak"]="al",
+ ["shcode"]=0x004C,
+ ["unicodeslot"]=0x0141, -- Å
+ },
+ {
+ ["adobename"]="lslash",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="lstroke",
+ ["description"]="LATIN SMALL LETTER L WITH STROKE",
+ ["linebreak"]="al",
+ ["shcode"]=0x006C,
+ ["uccode"]=0x0141,
+ ["unicodeslot"]=0x0142, -- Å‚
+ },
+ {
+ ["adobename"]="Nacute",
+ ["category"]="lu",
+ ["contextname"]="Nacute",
+ ["description"]="LATIN CAPITAL LETTER N WITH ACUTE",
+ ["lccode"]=0x0144,
+ ["linebreak"]="al",
+ ["shcode"]=0x004E,
+ ["specials"]={ "char", 0x004E, 0x0301 },
+ ["unicodeslot"]=0x0143, -- Ń
+ },
+ {
+ ["adobename"]="nacute",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="nacute",
+ ["description"]="LATIN SMALL LETTER N WITH ACUTE",
+ ["linebreak"]="al",
+ ["shcode"]=0x006E,
+ ["specials"]={ "char", 0x006E, 0x0301 },
+ ["uccode"]=0x0143,
+ ["unicodeslot"]=0x0144, -- Å„
+ },
+ {
+ ["adobename"]="Ncommaaccent",
+ ["category"]="lu",
+ ["contextname"]="Ncommaaccent",
+ ["description"]="LATIN CAPITAL LETTER N WITH CEDILLA",
+ ["lccode"]=0x0146,
+ ["linebreak"]="al",
+ ["shcode"]=0x004E,
+ ["specials"]={ "char", 0x004E, 0x0327 },
+ ["unicodeslot"]=0x0145, -- Å…
+ },
+ {
+ ["adobename"]="ncommaaccent",
+ ["category"]="ll",
+ ["contextname"]="ncommaaccent",
+ ["description"]="LATIN SMALL LETTER N WITH CEDILLA",
+ ["linebreak"]="al",
+ ["shcode"]=0x006E,
+ ["specials"]={ "char", 0x006E, 0x0327 },
+ ["uccode"]=0x0145,
+ ["unicodeslot"]=0x0146, -- ņ
+ },
+ {
+ ["adobename"]="Ncaron",
+ ["category"]="lu",
+ ["contextname"]="Ncaron",
+ ["description"]="LATIN CAPITAL LETTER N WITH CARON",
+ ["lccode"]=0x0148,
+ ["linebreak"]="al",
+ ["shcode"]=0x004E,
+ ["specials"]={ "char", 0x004E, 0x030C },
+ ["unicodeslot"]=0x0147, -- Ň
+ },
+ {
+ ["adobename"]="ncaron",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="ncaron",
+ ["description"]="LATIN SMALL LETTER N WITH CARON",
+ ["linebreak"]="al",
+ ["shcode"]=0x006E,
+ ["specials"]={ "char", 0x006E, 0x030C },
+ ["uccode"]=0x0147,
+ ["unicodeslot"]=0x0148, -- ň
+ },
+ {
+ ["adobename"]="napostrophe",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="napostrophe",
+ ["description"]="LATIN SMALL LETTER N PRECEDED BY APOSTROPHE",
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x02BC, 0x006E },
+ ["unicodeslot"]=0x0149, -- ʼn
+ },
+ {
+ ["adobename"]="Eng",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="Neng",
+ ["description"]="LATIN CAPITAL LETTER ENG",
+ ["lccode"]=0x014B,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x014A, -- ÅŠ
+ },
+ {
+ ["adobename"]="eng",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="neng",
+ ["description"]="LATIN SMALL LETTER ENG",
+ ["linebreak"]="al",
+ ["uccode"]=0x014A,
+ ["unicodeslot"]=0x014B, -- Å‹
+ },
+ {
+ ["adobename"]="Omacron",
+ ["category"]="lu",
+ ["contextname"]="Omacron",
+ ["description"]="LATIN CAPITAL LETTER O WITH MACRON",
+ ["lccode"]=0x014D,
+ ["linebreak"]="al",
+ ["shcode"]=0x004F,
+ ["specials"]={ "char", 0x004F, 0x0304 },
+ ["unicodeslot"]=0x014C, -- Ō
+ },
+ {
+ ["adobename"]="omacron",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="omacron",
+ ["description"]="LATIN SMALL LETTER O WITH MACRON",
+ ["linebreak"]="al",
+ ["shcode"]=0x006F,
+ ["specials"]={ "char", 0x006F, 0x0304 },
+ ["uccode"]=0x014C,
+ ["unicodeslot"]=0x014D, -- Å
+ },
+ {
+ ["adobename"]="Obreve",
+ ["category"]="lu",
+ ["contextname"]="Obreve",
+ ["description"]="LATIN CAPITAL LETTER O WITH BREVE",
+ ["lccode"]=0x014F,
+ ["linebreak"]="al",
+ ["shcode"]=0x004F,
+ ["specials"]={ "char", 0x004F, 0x0306 },
+ ["unicodeslot"]=0x014E, -- ÅŽ
+ },
+ {
+ ["adobename"]="obreve",
+ ["category"]="ll",
+ ["contextname"]="obreve",
+ ["description"]="LATIN SMALL LETTER O WITH BREVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x006F,
+ ["specials"]={ "char", 0x006F, 0x0306 },
+ ["uccode"]=0x014E,
+ ["unicodeslot"]=0x014F, -- Å
+ },
+ {
+ ["adobename"]="Ohungarumlaut",
+ ["category"]="lu",
+ ["contextname"]="Ohungarumlaut",
+ ["description"]="LATIN CAPITAL LETTER O WITH DOUBLE ACUTE",
+ ["lccode"]=0x0151,
+ ["linebreak"]="al",
+ ["shcode"]=0x004F,
+ ["specials"]={ "char", 0x004F, 0x030B },
+ ["unicodeslot"]=0x0150, -- Å
+ },
+ {
+ ["adobename"]="ohungarumlaut",
+ ["category"]="ll",
+ ["contextname"]="ohungarumlaut",
+ ["description"]="LATIN SMALL LETTER O WITH DOUBLE ACUTE",
+ ["linebreak"]="al",
+ ["shcode"]=0x006F,
+ ["specials"]={ "char", 0x006F, 0x030B },
+ ["uccode"]=0x0150,
+ ["unicodeslot"]=0x0151, -- Å‘
+ },
+ {
+ ["adobename"]="OE",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="OEligature",
+ ["description"]="LATIN CAPITAL LIGATURE OE",
+ ["lccode"]=0x0153,
+ ["linebreak"]="al",
+ ["shcode"]={ 0x004F, 0x0045 },
+ ["unicodeslot"]=0x0152, -- Å’
+ },
+ {
+ ["adobename"]="oe",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="oeligature",
+ ["description"]="LATIN SMALL LIGATURE OE",
+ ["linebreak"]="al",
+ ["shcode"]={ 0x006F, 0x0065 },
+ ["uccode"]=0x0152,
+ ["unicodeslot"]=0x0153, -- Å“
+ },
+ {
+ ["adobename"]="Racute",
+ ["category"]="lu",
+ ["contextname"]="Racute",
+ ["description"]="LATIN CAPITAL LETTER R WITH ACUTE",
+ ["lccode"]=0x0155,
+ ["linebreak"]="al",
+ ["shcode"]=0x0052,
+ ["specials"]={ "char", 0x0052, 0x0301 },
+ ["unicodeslot"]=0x0154, -- Å”
+ },
+ {
+ ["adobename"]="racute",
+ ["category"]="ll",
+ ["contextname"]="racute",
+ ["description"]="LATIN SMALL LETTER R WITH ACUTE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0072,
+ ["specials"]={ "char", 0x0072, 0x0301 },
+ ["uccode"]=0x0154,
+ ["unicodeslot"]=0x0155, -- Å•
+ },
+ {
+ ["adobename"]="Rcommaaccent",
+ ["category"]="lu",
+ ["contextname"]="Rcommaaccent",
+ ["description"]="LATIN CAPITAL LETTER R WITH CEDILLA",
+ ["lccode"]=0x0157,
+ ["linebreak"]="al",
+ ["shcode"]=0x0052,
+ ["specials"]={ "char", 0x0052, 0x0327 },
+ ["unicodeslot"]=0x0156, -- Å–
+ },
+ {
+ ["adobename"]="rcommaaccent",
+ ["category"]="ll",
+ ["contextname"]="rcommaaccent",
+ ["description"]="LATIN SMALL LETTER R WITH CEDILLA",
+ ["linebreak"]="al",
+ ["shcode"]=0x0072,
+ ["specials"]={ "char", 0x0072, 0x0327 },
+ ["uccode"]=0x0156,
+ ["unicodeslot"]=0x0157, -- Å—
+ },
+ {
+ ["adobename"]="Rcaron",
+ ["category"]="lu",
+ ["contextname"]="Rcaron",
+ ["description"]="LATIN CAPITAL LETTER R WITH CARON",
+ ["lccode"]=0x0159,
+ ["linebreak"]="al",
+ ["shcode"]=0x0052,
+ ["specials"]={ "char", 0x0052, 0x030C },
+ ["unicodeslot"]=0x0158, -- Ř
+ },
+ {
+ ["adobename"]="rcaron",
+ ["category"]="ll",
+ ["contextname"]="rcaron",
+ ["description"]="LATIN SMALL LETTER R WITH CARON",
+ ["linebreak"]="al",
+ ["shcode"]=0x0072,
+ ["specials"]={ "char", 0x0072, 0x030C },
+ ["uccode"]=0x0158,
+ ["unicodeslot"]=0x0159, -- Å™
+ },
+ {
+ ["adobename"]="Sacute",
+ ["category"]="lu",
+ ["contextname"]="Sacute",
+ ["description"]="LATIN CAPITAL LETTER S WITH ACUTE",
+ ["lccode"]=0x015B,
+ ["linebreak"]="al",
+ ["shcode"]=0x0053,
+ ["specials"]={ "char", 0x0053, 0x0301 },
+ ["unicodeslot"]=0x015A, -- Åš
+ },
+ {
+ ["adobename"]="sacute",
+ ["category"]="ll",
+ ["contextname"]="sacute",
+ ["description"]="LATIN SMALL LETTER S WITH ACUTE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0073,
+ ["specials"]={ "char", 0x0073, 0x0301 },
+ ["uccode"]=0x015A,
+ ["unicodeslot"]=0x015B, -- Å›
+ },
+ {
+ ["adobename"]="Scircumflex",
+ ["category"]="lu",
+ ["contextname"]="Scircumflex",
+ ["description"]="LATIN CAPITAL LETTER S WITH CIRCUMFLEX",
+ ["lccode"]=0x015D,
+ ["linebreak"]="al",
+ ["shcode"]=0x0053,
+ ["specials"]={ "char", 0x0053, 0x0302 },
+ ["unicodeslot"]=0x015C, -- Ŝ
+ },
+ {
+ ["adobename"]="scircumflex",
+ ["category"]="ll",
+ ["contextname"]="scircumflex",
+ ["description"]="LATIN SMALL LETTER S WITH CIRCUMFLEX",
+ ["linebreak"]="al",
+ ["shcode"]=0x0073,
+ ["specials"]={ "char", 0x0073, 0x0302 },
+ ["uccode"]=0x015C,
+ ["unicodeslot"]=0x015D, -- Å
+ },
+ {
+ ["adobename"]="Scedilla",
+ ["category"]="lu",
+ ["contextname"]="Scedilla",
+ ["description"]="LATIN CAPITAL LETTER S WITH CEDILLA",
+ ["lccode"]=0x015F,
+ ["linebreak"]="al",
+ ["shcode"]=0x0053,
+ ["specials"]={ "char", 0x0053, 0x0327 },
+ ["unicodeslot"]=0x015E, -- Åž
+ },
+ {
+ ["adobename"]="scedilla",
+ ["category"]="ll",
+ ["contextname"]="scedilla",
+ ["description"]="LATIN SMALL LETTER S WITH CEDILLA",
+ ["linebreak"]="al",
+ ["shcode"]=0x0073,
+ ["specials"]={ "char", 0x0073, 0x0327 },
+ ["uccode"]=0x015E,
+ ["unicodeslot"]=0x015F, -- ÅŸ
+ },
+ {
+ ["adobename"]="Scaron",
+ ["category"]="lu",
+ ["contextname"]="Scaron",
+ ["description"]="LATIN CAPITAL LETTER S WITH CARON",
+ ["lccode"]=0x0161,
+ ["linebreak"]="al",
+ ["shcode"]=0x0053,
+ ["specials"]={ "char", 0x0053, 0x030C },
+ ["unicodeslot"]=0x0160, -- Å 
+ },
+ {
+ ["adobename"]="scaron",
+ ["category"]="ll",
+ ["contextname"]="scaron",
+ ["description"]="LATIN SMALL LETTER S WITH CARON",
+ ["linebreak"]="al",
+ ["shcode"]=0x0073,
+ ["specials"]={ "char", 0x0073, 0x030C },
+ ["uccode"]=0x0160,
+ ["unicodeslot"]=0x0161, -- Å¡
+ },
+ {
+ ["adobename"]="Tcommaaccent",
+ ["category"]="lu",
+ ["contextname"]="Tcedilla",
+ ["description"]="LATIN CAPITAL LETTER T WITH CEDILLA",
+ ["lccode"]=0x0163,
+ ["linebreak"]="al",
+ ["shcode"]=0x0054,
+ ["specials"]={ "char", 0x0054, 0x0327 },
+ ["unicodeslot"]=0x0162, -- Ţ
+ },
+ {
+ ["adobename"]="tcommaaccent",
+ ["category"]="ll",
+ ["contextname"]="tcedilla",
+ ["description"]="LATIN SMALL LETTER T WITH CEDILLA",
+ ["linebreak"]="al",
+ ["shcode"]=0x0074,
+ ["specials"]={ "char", 0x0074, 0x0327 },
+ ["uccode"]=0x0162,
+ ["unicodeslot"]=0x0163, -- ţ
+ },
+ {
+ ["adobename"]="Tcaron",
+ ["category"]="lu",
+ ["contextname"]="Tcaron",
+ ["description"]="LATIN CAPITAL LETTER T WITH CARON",
+ ["lccode"]=0x0165,
+ ["linebreak"]="al",
+ ["shcode"]=0x0054,
+ ["specials"]={ "char", 0x0054, 0x030C },
+ ["unicodeslot"]=0x0164, -- Ť
+ },
+ {
+ ["adobename"]="tcaron",
+ ["category"]="ll",
+ ["contextname"]="tcaron",
+ ["description"]="LATIN SMALL LETTER T WITH CARON",
+ ["linebreak"]="al",
+ ["shcode"]=0x0074,
+ ["specials"]={ "char", 0x0074, 0x030C },
+ ["uccode"]=0x0164,
+ ["unicodeslot"]=0x0165, -- ť
+ },
+ {
+ ["adobename"]="Tbar",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="Tstroke",
+ ["description"]="LATIN CAPITAL LETTER T WITH STROKE",
+ ["lccode"]=0x0167,
+ ["linebreak"]="al",
+ ["shcode"]=0x0054,
+ ["unicodeslot"]=0x0166, -- Ŧ
+ },
+ {
+ ["adobename"]="tbar",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="tstroke",
+ ["description"]="LATIN SMALL LETTER T WITH STROKE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0074,
+ ["uccode"]=0x0166,
+ ["unicodeslot"]=0x0167, -- ŧ
+ },
+ {
+ ["adobename"]="Utilde",
+ ["category"]="lu",
+ ["contextname"]="Utilde",
+ ["description"]="LATIN CAPITAL LETTER U WITH TILDE",
+ ["lccode"]=0x0169,
+ ["linebreak"]="al",
+ ["shcode"]=0x0055,
+ ["specials"]={ "char", 0x0055, 0x0303 },
+ ["unicodeslot"]=0x0168, -- Ũ
+ },
+ {
+ ["adobename"]="utilde",
+ ["category"]="ll",
+ ["contextname"]="utilde",
+ ["description"]="LATIN SMALL LETTER U WITH TILDE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0075,
+ ["specials"]={ "char", 0x0075, 0x0303 },
+ ["uccode"]=0x0168,
+ ["unicodeslot"]=0x0169, -- Å©
+ },
+ {
+ ["adobename"]="Umacron",
+ ["category"]="lu",
+ ["contextname"]="Umacron",
+ ["description"]="LATIN CAPITAL LETTER U WITH MACRON",
+ ["lccode"]=0x016B,
+ ["linebreak"]="al",
+ ["shcode"]=0x0055,
+ ["specials"]={ "char", 0x0055, 0x0304 },
+ ["unicodeslot"]=0x016A, -- Ū
+ },
+ {
+ ["adobename"]="umacron",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="umacron",
+ ["description"]="LATIN SMALL LETTER U WITH MACRON",
+ ["linebreak"]="al",
+ ["shcode"]=0x0075,
+ ["specials"]={ "char", 0x0075, 0x0304 },
+ ["uccode"]=0x016A,
+ ["unicodeslot"]=0x016B, -- Å«
+ },
+ {
+ ["adobename"]="Ubreve",
+ ["category"]="lu",
+ ["contextname"]="Ubreve",
+ ["description"]="LATIN CAPITAL LETTER U WITH BREVE",
+ ["lccode"]=0x016D,
+ ["linebreak"]="al",
+ ["shcode"]=0x0055,
+ ["specials"]={ "char", 0x0055, 0x0306 },
+ ["unicodeslot"]=0x016C, -- Ŭ
+ },
+ {
+ ["adobename"]="ubreve",
+ ["category"]="ll",
+ ["contextname"]="ubreve",
+ ["description"]="LATIN SMALL LETTER U WITH BREVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0075,
+ ["specials"]={ "char", 0x0075, 0x0306 },
+ ["uccode"]=0x016C,
+ ["unicodeslot"]=0x016D, -- Å­
+ },
+ {
+ ["adobename"]="Uring",
+ ["category"]="lu",
+ ["contextname"]="Uring",
+ ["description"]="LATIN CAPITAL LETTER U WITH RING ABOVE",
+ ["lccode"]=0x016F,
+ ["linebreak"]="al",
+ ["shcode"]=0x0055,
+ ["specials"]={ "char", 0x0055, 0x030A },
+ ["unicodeslot"]=0x016E, -- Å®
+ },
+ {
+ ["adobename"]="uring",
+ ["category"]="ll",
+ ["contextname"]="uring",
+ ["description"]="LATIN SMALL LETTER U WITH RING ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0075,
+ ["specials"]={ "char", 0x0075, 0x030A },
+ ["uccode"]=0x016E,
+ ["unicodeslot"]=0x016F, -- ů
+ },
+ {
+ ["adobename"]="Uhungarumlaut",
+ ["category"]="lu",
+ ["contextname"]="Uhungarumlaut",
+ ["description"]="LATIN CAPITAL LETTER U WITH DOUBLE ACUTE",
+ ["lccode"]=0x0171,
+ ["linebreak"]="al",
+ ["shcode"]=0x0055,
+ ["specials"]={ "char", 0x0055, 0x030B },
+ ["unicodeslot"]=0x0170, -- Å°
+ },
+ {
+ ["adobename"]="uhungarumlaut",
+ ["category"]="ll",
+ ["contextname"]="uhungarumlaut",
+ ["description"]="LATIN SMALL LETTER U WITH DOUBLE ACUTE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0075,
+ ["specials"]={ "char", 0x0075, 0x030B },
+ ["uccode"]=0x0170,
+ ["unicodeslot"]=0x0171, -- ű
+ },
+ {
+ ["adobename"]="Uogonek",
+ ["category"]="lu",
+ ["contextname"]="Uogonek",
+ ["description"]="LATIN CAPITAL LETTER U WITH OGONEK",
+ ["lccode"]=0x0173,
+ ["linebreak"]="al",
+ ["shcode"]=0x0055,
+ ["specials"]={ "char", 0x0055, 0x0328 },
+ ["unicodeslot"]=0x0172, -- Ų
+ },
+ {
+ ["adobename"]="uogonek",
+ ["category"]="ll",
+ ["contextname"]="uogonek",
+ ["description"]="LATIN SMALL LETTER U WITH OGONEK",
+ ["linebreak"]="al",
+ ["shcode"]=0x0075,
+ ["specials"]={ "char", 0x0075, 0x0328 },
+ ["uccode"]=0x0172,
+ ["unicodeslot"]=0x0173, -- ų
+ },
+ {
+ ["adobename"]="Wcircumflex",
+ ["category"]="lu",
+ ["contextname"]="Wcircumflex",
+ ["description"]="LATIN CAPITAL LETTER W WITH CIRCUMFLEX",
+ ["lccode"]=0x0175,
+ ["linebreak"]="al",
+ ["shcode"]=0x0057,
+ ["specials"]={ "char", 0x0057, 0x0302 },
+ ["unicodeslot"]=0x0174, -- Å´
+ },
+ {
+ ["adobename"]="wcircumflex",
+ ["category"]="ll",
+ ["contextname"]="wcircumflex",
+ ["description"]="LATIN SMALL LETTER W WITH CIRCUMFLEX",
+ ["linebreak"]="al",
+ ["shcode"]=0x0077,
+ ["specials"]={ "char", 0x0077, 0x0302 },
+ ["uccode"]=0x0174,
+ ["unicodeslot"]=0x0175, -- ŵ
+ },
+ {
+ ["adobename"]="Ycircumflex",
+ ["category"]="lu",
+ ["contextname"]="Ycircumflex",
+ ["description"]="LATIN CAPITAL LETTER Y WITH CIRCUMFLEX",
+ ["lccode"]=0x0177,
+ ["linebreak"]="al",
+ ["shcode"]=0x0059,
+ ["specials"]={ "char", 0x0059, 0x0302 },
+ ["unicodeslot"]=0x0176, -- Ŷ
+ },
+ {
+ ["adobename"]="ycircumflex",
+ ["category"]="ll",
+ ["contextname"]="ycircumflex",
+ ["description"]="LATIN SMALL LETTER Y WITH CIRCUMFLEX",
+ ["linebreak"]="al",
+ ["shcode"]=0x0079,
+ ["specials"]={ "char", 0x0079, 0x0302 },
+ ["uccode"]=0x0176,
+ ["unicodeslot"]=0x0177, -- Å·
+ },
+ {
+ ["adobename"]="Ydieresis",
+ ["category"]="lu",
+ ["contextname"]="Ydiaeresis",
+ ["description"]="LATIN CAPITAL LETTER Y WITH DIAERESIS",
+ ["lccode"]=0x00FF,
+ ["linebreak"]="al",
+ ["shcode"]=0x0059,
+ ["specials"]={ "char", 0x0059, 0x0308 },
+ ["unicodeslot"]=0x0178, -- Ÿ
+ },
+ {
+ ["adobename"]="Zacute",
+ ["category"]="lu",
+ ["contextname"]="Zacute",
+ ["description"]="LATIN CAPITAL LETTER Z WITH ACUTE",
+ ["lccode"]=0x017A,
+ ["linebreak"]="al",
+ ["shcode"]=0x005A,
+ ["specials"]={ "char", 0x005A, 0x0301 },
+ ["unicodeslot"]=0x0179, -- Ź
+ },
+ {
+ ["adobename"]="zacute",
+ ["category"]="ll",
+ ["contextname"]="zacute",
+ ["description"]="LATIN SMALL LETTER Z WITH ACUTE",
+ ["linebreak"]="al",
+ ["shcode"]=0x007A,
+ ["specials"]={ "char", 0x007A, 0x0301 },
+ ["uccode"]=0x0179,
+ ["unicodeslot"]=0x017A, -- ź
+ },
+ {
+ ["adobename"]="Zdotaccent",
+ ["category"]="lu",
+ ["contextname"]="Zdotaccent",
+ ["description"]="LATIN CAPITAL LETTER Z WITH DOT ABOVE",
+ ["lccode"]=0x017C,
+ ["linebreak"]="al",
+ ["shcode"]=0x005A,
+ ["specials"]={ "char", 0x005A, 0x0307 },
+ ["unicodeslot"]=0x017B, -- Å»
+ },
+ {
+ ["adobename"]="zdotaccent",
+ ["category"]="ll",
+ ["contextname"]="zdotaccent",
+ ["description"]="LATIN SMALL LETTER Z WITH DOT ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x007A,
+ ["specials"]={ "char", 0x007A, 0x0307 },
+ ["uccode"]=0x017B,
+ ["unicodeslot"]=0x017C, -- ż
+ },
+ {
+ ["adobename"]="Zcaron",
+ ["category"]="lu",
+ ["contextname"]="Zcaron",
+ ["description"]="LATIN CAPITAL LETTER Z WITH CARON",
+ ["lccode"]=0x017E,
+ ["linebreak"]="al",
+ ["shcode"]=0x005A,
+ ["specials"]={ "char", 0x005A, 0x030C },
+ ["unicodeslot"]=0x017D, -- Ž
+ },
+ {
+ ["adobename"]="zcaron",
+ ["category"]="ll",
+ ["contextname"]="zcaron",
+ ["description"]="LATIN SMALL LETTER Z WITH CARON",
+ ["linebreak"]="al",
+ ["shcode"]=0x007A,
+ ["specials"]={ "char", 0x007A, 0x030C },
+ ["uccode"]=0x017D,
+ ["unicodeslot"]=0x017E, -- ž
+ },
+ {
+ ["adobename"]="longs",
+ ["category"]="ll",
+ ["contextname"]="slong",
+ ["description"]="LATIN SMALL LETTER LONG S",
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x0073 },
+ ["uccode"]=0x0053,
+ ["unicodeslot"]=0x017F, -- Å¿
+ },
+ {
+ ["category"]="ll",
+ ["contextname"]="bstroke",
+ ["description"]="LATIN SMALL LETTER B WITH STROKE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0062,
+ ["uccode"]=0x0243,
+ ["unicodeslot"]=0x0180, -- ƀ
+ },
+ {
+ ["category"]="lu",
+ ["contextname"]="Bhook",
+ ["description"]="LATIN CAPITAL LETTER B WITH HOOK",
+ ["lccode"]=0x0253,
+ ["linebreak"]="al",
+ ["shcode"]=0x0042,
+ ["unicodeslot"]=0x0181, -- Æ
+ },
+ {
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER B WITH TOPBAR",
+ ["lccode"]=0x0183,
+ ["linebreak"]="al",
+ ["shcode"]=0x0042,
+ ["unicodeslot"]=0x0182, -- Æ‚
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER B WITH TOPBAR",
+ ["linebreak"]="al",
+ ["shcode"]=0x0062,
+ ["uccode"]=0x0182,
+ ["unicodeslot"]=0x0183, -- ƃ
+ },
+ {
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER TONE SIX",
+ ["lccode"]=0x0185,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0184, -- Æ„
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER TONE SIX",
+ ["linebreak"]="al",
+ ["uccode"]=0x0184,
+ ["unicodeslot"]=0x0185, -- Æ…
+ },
+ {
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER OPEN O",
+ ["lccode"]=0x0254,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0186, -- Ɔ
+ },
+ {
+ ["category"]="lu",
+ ["contextname"]="Chook",
+ ["description"]="LATIN CAPITAL LETTER C WITH HOOK",
+ ["lccode"]=0x0188,
+ ["linebreak"]="al",
+ ["shcode"]=0x0043,
+ ["unicodeslot"]=0x0187, -- Ƈ
+ },
+ {
+ ["category"]="ll",
+ ["contextname"]="chook",
+ ["description"]="LATIN SMALL LETTER C WITH HOOK",
+ ["linebreak"]="al",
+ ["shcode"]=0x0063,
+ ["uccode"]=0x0187,
+ ["unicodeslot"]=0x0188, -- ƈ
+ },
+ {
+ ["category"]="lu",
+ ["contextname"]="Dafrican",
+ ["description"]="LATIN CAPITAL LETTER AFRICAN D",
+ ["lccode"]=0x0256,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0189, -- Ɖ
+ },
+ {
+ ["category"]="lu",
+ ["contextname"]="Dhook",
+ ["description"]="LATIN CAPITAL LETTER D WITH HOOK",
+ ["lccode"]=0x0257,
+ ["linebreak"]="al",
+ ["shcode"]=0x0044,
+ ["unicodeslot"]=0x018A, -- ÆŠ
+ },
+ {
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER D WITH TOPBAR",
+ ["lccode"]=0x018C,
+ ["linebreak"]="al",
+ ["shcode"]=0x0044,
+ ["unicodeslot"]=0x018B, -- Æ‹
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER D WITH TOPBAR",
+ ["linebreak"]="al",
+ ["shcode"]=0x0064,
+ ["uccode"]=0x018B,
+ ["unicodeslot"]=0x018C, -- ƌ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER TURNED DELTA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x018D, -- Æ
+ },
+ {
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER REVERSED E",
+ ["lccode"]=0x01DD,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x018E, -- ÆŽ
+ },
+ {
+ ["category"]="lu",
+ ["contextname"]="Schwa",
+ ["description"]="LATIN CAPITAL LETTER SCHWA",
+ ["lccode"]=0x0259,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x018F, -- Æ
+ },
+ {
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER OPEN E",
+ ["lccode"]=0x025B,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0190, -- Æ
+ },
+ {
+ ["category"]="lu",
+ ["contextname"]="Fhook",
+ ["description"]="LATIN CAPITAL LETTER F WITH HOOK",
+ ["lccode"]=0x0192,
+ ["linebreak"]="al",
+ ["shcode"]=0x0046,
+ ["unicodeslot"]=0x0191, -- Æ‘
+ },
+ {
+ ["adobename"]="florin",
+ ["category"]="ll",
+ ["contextname"]="fhook",
+ ["description"]="LATIN SMALL LETTER F WITH HOOK",
+ ["linebreak"]="al",
+ ["shcode"]=0x0066,
+ ["uccode"]=0x0191,
+ ["unicodeslot"]=0x0192, -- Æ’
+ },
+ {
+ ["category"]="lu",
+ ["contextname"]="Ghook",
+ ["description"]="LATIN CAPITAL LETTER G WITH HOOK",
+ ["lccode"]=0x0260,
+ ["linebreak"]="al",
+ ["shcode"]=0x0047,
+ ["unicodeslot"]=0x0193, -- Æ“
+ },
+ {
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER GAMMA",
+ ["lccode"]=0x0263,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0194, -- Æ”
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER HV",
+ ["linebreak"]="al",
+ ["uccode"]=0x01F6,
+ ["unicodeslot"]=0x0195, -- Æ•
+ },
+ {
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER IOTA",
+ ["lccode"]=0x0269,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0196, -- Æ–
+ },
+ {
+ ["category"]="lu",
+ ["contextname"]="Istroke",
+ ["description"]="LATIN CAPITAL LETTER I WITH STROKE",
+ ["lccode"]=0x0268,
+ ["linebreak"]="al",
+ ["shcode"]=0x0049,
+ ["unicodeslot"]=0x0197, -- Æ—
+ },
+ {
+ ["category"]="lu",
+ ["contextname"]="Khook",
+ ["description"]="LATIN CAPITAL LETTER K WITH HOOK",
+ ["lccode"]=0x0199,
+ ["linebreak"]="al",
+ ["shcode"]=0x004B,
+ ["unicodeslot"]=0x0198, -- Ƙ
+ },
+ {
+ ["category"]="ll",
+ ["contextname"]="khook",
+ ["description"]="LATIN SMALL LETTER K WITH HOOK",
+ ["linebreak"]="al",
+ ["shcode"]=0x006B,
+ ["uccode"]=0x0198,
+ ["unicodeslot"]=0x0199, -- Æ™
+ },
+ {
+ ["category"]="ll",
+ ["contextname"]="lbar",
+ ["description"]="LATIN SMALL LETTER L WITH BAR",
+ ["linebreak"]="al",
+ ["shcode"]=0x006C,
+ ["uccode"]=0x023D,
+ ["unicodeslot"]=0x019A, -- Æš
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER LAMBDA WITH STROKE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x019B, -- Æ›
+ },
+ {
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER TURNED M",
+ ["lccode"]=0x026F,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x019C, -- Ɯ
+ },
+ {
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER N WITH LEFT HOOK",
+ ["lccode"]=0x0272,
+ ["linebreak"]="al",
+ ["shcode"]=0x004E,
+ ["unicodeslot"]=0x019D, -- Æ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER N WITH LONG RIGHT LEG",
+ ["linebreak"]="al",
+ ["shcode"]=0x006E,
+ ["uccode"]=0x0220,
+ ["unicodeslot"]=0x019E, -- Æž
+ },
+ {
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER O WITH MIDDLE TILDE",
+ ["lccode"]=0x0275,
+ ["linebreak"]="al",
+ ["shcode"]=0x004F,
+ ["unicodeslot"]=0x019F, -- ÆŸ
+ },
+ {
+ ["adobename"]="Ohorn",
+ ["category"]="lu",
+ ["contextname"]="Ohorn",
+ ["description"]="LATIN CAPITAL LETTER O WITH HORN",
+ ["lccode"]=0x01A1,
+ ["linebreak"]="al",
+ ["shcode"]=0x004F,
+ ["specials"]={ "char", 0x004F, 0x031B },
+ ["unicodeslot"]=0x01A0, -- Æ 
+ },
+ {
+ ["adobename"]="ohorn",
+ ["category"]="ll",
+ ["contextname"]="ohorn",
+ ["description"]="LATIN SMALL LETTER O WITH HORN",
+ ["linebreak"]="al",
+ ["shcode"]=0x006F,
+ ["specials"]={ "char", 0x006F, 0x031B },
+ ["uccode"]=0x01A0,
+ ["unicodeslot"]=0x01A1, -- Æ¡
+ },
+ {
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER OI",
+ ["lccode"]=0x01A3,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x01A2, -- Ƣ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER OI",
+ ["linebreak"]="al",
+ ["uccode"]=0x01A2,
+ ["unicodeslot"]=0x01A3, -- ƣ
+ },
+ {
+ ["category"]="lu",
+ ["contextname"]="Phook",
+ ["description"]="LATIN CAPITAL LETTER P WITH HOOK",
+ ["lccode"]=0x01A5,
+ ["linebreak"]="al",
+ ["shcode"]=0x0050,
+ ["unicodeslot"]=0x01A4, -- Ƥ
+ },
+ {
+ ["category"]="ll",
+ ["contextname"]="phook",
+ ["description"]="LATIN SMALL LETTER P WITH HOOK",
+ ["linebreak"]="al",
+ ["shcode"]=0x0070,
+ ["uccode"]=0x01A4,
+ ["unicodeslot"]=0x01A5, -- ƥ
+ },
+ {
+ ["category"]="lu",
+ ["description"]="LATIN LETTER YR",
+ ["lccode"]=0x0280,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x01A6, -- Ʀ
+ },
+ {
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER TONE TWO",
+ ["lccode"]=0x01A8,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x01A7, -- Ƨ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER TONE TWO",
+ ["linebreak"]="al",
+ ["uccode"]=0x01A7,
+ ["unicodeslot"]=0x01A8, -- ƨ
+ },
+ {
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER ESH",
+ ["lccode"]=0x0283,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x01A9, -- Æ©
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN LETTER REVERSED ESH LOOP",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x01AA, -- ƪ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER T WITH PALATAL HOOK",
+ ["linebreak"]="al",
+ ["shcode"]=0x0074,
+ ["unicodeslot"]=0x01AB, -- Æ«
+ },
+ {
+ ["category"]="lu",
+ ["contextname"]="Thook",
+ ["description"]="LATIN CAPITAL LETTER T WITH HOOK",
+ ["lccode"]=0x01AD,
+ ["linebreak"]="al",
+ ["shcode"]=0x0054,
+ ["unicodeslot"]=0x01AC, -- Ƭ
+ },
+ {
+ ["category"]="ll",
+ ["contextname"]="thook",
+ ["description"]="LATIN SMALL LETTER T WITH HOOK",
+ ["linebreak"]="al",
+ ["shcode"]=0x0074,
+ ["uccode"]=0x01AC,
+ ["unicodeslot"]=0x01AD, -- Æ­
+ },
+ {
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER T WITH RETROFLEX HOOK",
+ ["lccode"]=0x0288,
+ ["linebreak"]="al",
+ ["shcode"]=0x0054,
+ ["unicodeslot"]=0x01AE, -- Æ®
+ },
+ {
+ ["adobename"]="Uhorn",
+ ["category"]="lu",
+ ["contextname"]="Uhorn",
+ ["description"]="LATIN CAPITAL LETTER U WITH HORN",
+ ["lccode"]=0x01B0,
+ ["linebreak"]="al",
+ ["shcode"]=0x0055,
+ ["specials"]={ "char", 0x0055, 0x031B },
+ ["unicodeslot"]=0x01AF, -- Ư
+ },
+ {
+ ["adobename"]="uhorn",
+ ["category"]="ll",
+ ["contextname"]="uhorn",
+ ["description"]="LATIN SMALL LETTER U WITH HORN",
+ ["linebreak"]="al",
+ ["shcode"]=0x0075,
+ ["specials"]={ "char", 0x0075, 0x031B },
+ ["uccode"]=0x01AF,
+ ["unicodeslot"]=0x01B0, -- Æ°
+ },
+ {
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER UPSILON",
+ ["lccode"]=0x028A,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x01B1, -- Ʊ
+ },
+ {
+ ["category"]="lu",
+ ["contextname"]="Uhook",
+ ["description"]="LATIN CAPITAL LETTER V WITH HOOK",
+ ["lccode"]=0x028B,
+ ["linebreak"]="al",
+ ["shcode"]=0x0056,
+ ["unicodeslot"]=0x01B2, -- Ʋ
+ },
+ {
+ ["category"]="lu",
+ ["contextname"]="Yhook",
+ ["description"]="LATIN CAPITAL LETTER Y WITH HOOK",
+ ["lccode"]=0x01B4,
+ ["linebreak"]="al",
+ ["shcode"]=0x0059,
+ ["unicodeslot"]=0x01B3, -- Ƴ
+ },
+ {
+ ["category"]="ll",
+ ["contextname"]="yhook",
+ ["description"]="LATIN SMALL LETTER Y WITH HOOK",
+ ["linebreak"]="al",
+ ["shcode"]=0x0079,
+ ["uccode"]=0x01B3,
+ ["unicodeslot"]=0x01B4, -- Æ´
+ },
+ {
+ ["category"]="lu",
+ ["contextname"]="Zstroke",
+ ["description"]="LATIN CAPITAL LETTER Z WITH STROKE",
+ ["lccode"]=0x01B6,
+ ["linebreak"]="al",
+ ["shcode"]=0x005A,
+ ["unicodeslot"]=0x01B5, -- Ƶ
+ },
+ {
+ ["category"]="ll",
+ ["contextname"]="zstroke",
+ ["description"]="LATIN SMALL LETTER Z WITH STROKE",
+ ["linebreak"]="al",
+ ["shcode"]=0x007A,
+ ["uccode"]=0x01B5,
+ ["unicodeslot"]=0x01B6, -- ƶ
+ },
+ {
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER EZH",
+ ["lccode"]=0x0292,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x01B7, -- Æ·
+ },
+ {
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER EZH REVERSED",
+ ["lccode"]=0x01B9,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x01B8, -- Ƹ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER EZH REVERSED",
+ ["linebreak"]="al",
+ ["uccode"]=0x01B8,
+ ["unicodeslot"]=0x01B9, -- ƹ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER EZH WITH TAIL",
+ ["linebreak"]="al",
+ ["shcode"]=0x0292,
+ ["unicodeslot"]=0x01BA, -- ƺ
+ },
+ {
+ ["category"]="lo",
+ ["description"]="LATIN LETTER TWO WITH STROKE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x01BB, -- Æ»
+ },
+ {
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER TONE FIVE",
+ ["lccode"]=0x01BD,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x01BC, -- Ƽ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER TONE FIVE",
+ ["linebreak"]="al",
+ ["uccode"]=0x01BC,
+ ["unicodeslot"]=0x01BD, -- ƽ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x01BE, -- ƾ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN LETTER WYNN",
+ ["linebreak"]="al",
+ ["uccode"]=0x01F7,
+ ["unicodeslot"]=0x01BF, -- Æ¿
+ },
+ {
+ ["category"]="lo",
+ ["description"]="LATIN LETTER DENTAL CLICK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x01C0, -- ǀ
+ },
+ {
+ ["category"]="lo",
+ ["description"]="LATIN LETTER LATERAL CLICK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x01C1, -- Ç
+ },
+ {
+ ["category"]="lo",
+ ["description"]="LATIN LETTER ALVEOLAR CLICK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x01C2, -- Ç‚
+ },
+ {
+ ["category"]="lo",
+ ["description"]="LATIN LETTER RETROFLEX CLICK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x01C3, -- ǃ
+ },
+ {
+ ["category"]="lu",
+ ["contextname"]="DZcaronligature",
+ ["description"]="LATIN CAPITAL LETTER DZ WITH CARON",
+ ["lccode"]=0x01C6,
+ ["linebreak"]="al",
+ ["shcode"]=0x01F1,
+ ["specials"]={ "compat", 0x0044, 0x017D },
+ ["uccode"]=0x01C5,
+ ["unicodeslot"]=0x01C4, -- Ç„
+ },
+ {
+ ["category"]="lt",
+ ["contextname"]="Dzcaronligature",
+ ["description"]="LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON",
+ ["lccode"]=0x01C6,
+ ["linebreak"]="al",
+ ["shcode"]=0x01F2,
+ ["specials"]={ "compat", 0x0044, 0x017E },
+ ["uccode"]=0x01C4,
+ ["unicodeslot"]=0x01C5, -- Ç…
+ },
+ {
+ ["category"]="ll",
+ ["contextname"]="dzcaronligature",
+ ["description"]="LATIN SMALL LETTER DZ WITH CARON",
+ ["linebreak"]="al",
+ ["shcode"]=0x01F3,
+ ["specials"]={ "compat", 0x0064, 0x017E },
+ ["uccode"]=0x01C4,
+ ["unicodeslot"]=0x01C6, -- dž
+ },
+ {
+ ["category"]="lu",
+ ["contextname"]="LJligature",
+ ["description"]="LATIN CAPITAL LETTER LJ",
+ ["lccode"]=0x01C9,
+ ["linebreak"]="al",
+ ["shcode"]={ 0x004C, 0x004A },
+ ["specials"]={ "compat", 0x004C, 0x004A },
+ ["uccode"]=0x01C8,
+ ["unicodeslot"]=0x01C7, -- LJ
+ },
+ {
+ ["category"]="lt",
+ ["contextname"]="Ljligature",
+ ["description"]="LATIN CAPITAL LETTER L WITH SMALL LETTER J",
+ ["lccode"]=0x01C9,
+ ["linebreak"]="al",
+ ["shcode"]={ 0x004C, 0x006A },
+ ["specials"]={ "compat", 0x004C, 0x006A },
+ ["uccode"]=0x01C7,
+ ["unicodeslot"]=0x01C8, -- Lj
+ },
+ {
+ ["category"]="ll",
+ ["contextname"]="ljligature",
+ ["description"]="LATIN SMALL LETTER LJ",
+ ["linebreak"]="al",
+ ["shcode"]={ 0x006C, 0x006A },
+ ["specials"]={ "compat", 0x006C, 0x006A },
+ ["uccode"]=0x01C7,
+ ["unicodeslot"]=0x01C9, -- lj
+ },
+ {
+ ["category"]="lu",
+ ["contextname"]="NJligature",
+ ["description"]="LATIN CAPITAL LETTER NJ",
+ ["lccode"]=0x01CC,
+ ["linebreak"]="al",
+ ["shcode"]={ 0x004E, 0x004A },
+ ["specials"]={ "compat", 0x004E, 0x004A },
+ ["uccode"]=0x01CB,
+ ["unicodeslot"]=0x01CA, -- ÇŠ
+ },
+ {
+ ["category"]="lt",
+ ["contextname"]="Njligature",
+ ["description"]="LATIN CAPITAL LETTER N WITH SMALL LETTER J",
+ ["lccode"]=0x01CC,
+ ["linebreak"]="al",
+ ["shcode"]={ 0x004E, 0x006A },
+ ["shcode"]=0x004E,
+ ["specials"]={ "compat", 0x004E, 0x006A },
+ ["uccode"]=0x01CA,
+ ["unicodeslot"]=0x01CB, -- Ç‹
+ },
+ {
+ ["category"]="ll",
+ ["contextname"]="njligature",
+ ["description"]="LATIN SMALL LETTER NJ",
+ ["linebreak"]="al",
+ ["shcode"]={ 0x006E, 0x006A },
+ ["specials"]={ "compat", 0x006E, 0x006A },
+ ["uccode"]=0x01CA,
+ ["unicodeslot"]=0x01CC, -- nj
+ },
+ {
+ ["category"]="lu",
+ ["contextname"]="Acaron",
+ ["description"]="LATIN CAPITAL LETTER A WITH CARON",
+ ["lccode"]=0x01CE,
+ ["linebreak"]="al",
+ ["shcode"]=0x0041,
+ ["specials"]={ "char", 0x0041, 0x030C },
+ ["unicodeslot"]=0x01CD, -- Ç
+ },
+ {
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="acaron",
+ ["description"]="LATIN SMALL LETTER A WITH CARON",
+ ["linebreak"]="al",
+ ["shcode"]=0x0061,
+ ["specials"]={ "char", 0x0061, 0x030C },
+ ["uccode"]=0x01CD,
+ ["unicodeslot"]=0x01CE, -- ÇŽ
+ },
+ {
+ ["category"]="lu",
+ ["contextname"]="Icaron",
+ ["description"]="LATIN CAPITAL LETTER I WITH CARON",
+ ["lccode"]=0x01D0,
+ ["linebreak"]="al",
+ ["shcode"]=0x0049,
+ ["specials"]={ "char", 0x0049, 0x030C },
+ ["unicodeslot"]=0x01CF, -- Ç
+ },
+ {
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="icaron",
+ ["description"]="LATIN SMALL LETTER I WITH CARON",
+ ["linebreak"]="al",
+ ["shcode"]=0x0069,
+ ["specials"]={ "char", 0x0069, 0x030C },
+ ["uccode"]=0x01CF,
+ ["unicodeslot"]=0x01D0, -- Ç
+ },
+ {
+ ["category"]="lu",
+ ["contextname"]="Ocaron",
+ ["description"]="LATIN CAPITAL LETTER O WITH CARON",
+ ["lccode"]=0x01D2,
+ ["linebreak"]="al",
+ ["shcode"]=0x004F,
+ ["specials"]={ "char", 0x004F, 0x030C },
+ ["unicodeslot"]=0x01D1, -- Ç‘
+ },
+ {
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="ocaron",
+ ["description"]="LATIN SMALL LETTER O WITH CARON",
+ ["linebreak"]="al",
+ ["shcode"]=0x006F,
+ ["specials"]={ "char", 0x006F, 0x030C },
+ ["uccode"]=0x01D1,
+ ["unicodeslot"]=0x01D2, -- Ç’
+ },
+ {
+ ["category"]="lu",
+ ["contextname"]="Ucaron",
+ ["description"]="LATIN CAPITAL LETTER U WITH CARON",
+ ["lccode"]=0x01D4,
+ ["linebreak"]="al",
+ ["shcode"]=0x0055,
+ ["specials"]={ "char", 0x0055, 0x030C },
+ ["unicodeslot"]=0x01D3, -- Ç“
+ },
+ {
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="ucaron",
+ ["description"]="LATIN SMALL LETTER U WITH CARON",
+ ["linebreak"]="al",
+ ["shcode"]=0x0075,
+ ["specials"]={ "char", 0x0075, 0x030C },
+ ["uccode"]=0x01D3,
+ ["unicodeslot"]=0x01D4, -- Ç”
+ },
+ {
+ ["category"]="lu",
+ ["contextname"]="Udiaeresismacron",
+ ["description"]="LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON",
+ ["lccode"]=0x01D6,
+ ["linebreak"]="al",
+ ["shcode"]=0x0055,
+ ["specials"]={ "char", 0x00DC, 0x0304 },
+ ["unicodeslot"]=0x01D5, -- Ç•
+ },
+ {
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="udiaeresismacron",
+ ["description"]="LATIN SMALL LETTER U WITH DIAERESIS AND MACRON",
+ ["linebreak"]="al",
+ ["shcode"]=0x0075,
+ ["specials"]={ "char", 0x00FC, 0x0304 },
+ ["uccode"]=0x01D5,
+ ["unicodeslot"]=0x01D6, -- Ç–
+ },
+ {
+ ["category"]="lu",
+ ["contextname"]="Udiaeresisacute",
+ ["description"]="LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE",
+ ["lccode"]=0x01D8,
+ ["linebreak"]="al",
+ ["shcode"]=0x0055,
+ ["specials"]={ "char", 0x00DC, 0x0301 },
+ ["unicodeslot"]=0x01D7, -- Ç—
+ },
+ {
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="udiaeresisacute",
+ ["description"]="LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0075,
+ ["specials"]={ "char", 0x00FC, 0x0301 },
+ ["uccode"]=0x01D7,
+ ["unicodeslot"]=0x01D8, -- ǘ
+ },
+ {
+ ["category"]="lu",
+ ["contextname"]="Udiaeresiscaron",
+ ["description"]="LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON",
+ ["lccode"]=0x01DA,
+ ["linebreak"]="al",
+ ["shcode"]=0x0055,
+ ["specials"]={ "char", 0x00DC, 0x030C },
+ ["unicodeslot"]=0x01D9, -- Ç™
+ },
+ {
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="udiaeresiscaron",
+ ["description"]="LATIN SMALL LETTER U WITH DIAERESIS AND CARON",
+ ["linebreak"]="al",
+ ["shcode"]=0x0075,
+ ["specials"]={ "char", 0x00FC, 0x030C },
+ ["uccode"]=0x01D9,
+ ["unicodeslot"]=0x01DA, -- Çš
+ },
+ {
+ ["category"]="lu",
+ ["contextname"]="Udiaeresisgrave",
+ ["description"]="LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE",
+ ["lccode"]=0x01DC,
+ ["linebreak"]="al",
+ ["shcode"]=0x0055,
+ ["specials"]={ "char", 0x00DC, 0x0300 },
+ ["unicodeslot"]=0x01DB, -- Ç›
+ },
+ {
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="udiaeresisgrave",
+ ["description"]="LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0075,
+ ["specials"]={ "char", 0x00FC, 0x0300 },
+ ["uccode"]=0x01DB,
+ ["unicodeslot"]=0x01DC, -- ǜ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER TURNED E",
+ ["linebreak"]="al",
+ ["uccode"]=0x018E,
+ ["unicodeslot"]=0x01DD, -- Ç
+ },
+ {
+ ["category"]="lu",
+ ["contextname"]="Adiaeresismacron",
+ ["description"]="LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON",
+ ["lccode"]=0x01DF,
+ ["linebreak"]="al",
+ ["shcode"]=0x0041,
+ ["specials"]={ "char", 0x00C4, 0x0304 },
+ ["unicodeslot"]=0x01DE, -- Çž
+ },
+ {
+ ["category"]="ll",
+ ["contextname"]="adiaeresismacron",
+ ["description"]="LATIN SMALL LETTER A WITH DIAERESIS AND MACRON",
+ ["linebreak"]="al",
+ ["shcode"]=0x0061,
+ ["specials"]={ "char", 0x00E4, 0x0304 },
+ ["uccode"]=0x01DE,
+ ["unicodeslot"]=0x01DF, -- ÇŸ
+ },
+ {
+ ["category"]="lu",
+ ["contextname"]="Adotaccentmacron",
+ ["description"]="LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON",
+ ["lccode"]=0x01E1,
+ ["linebreak"]="al",
+ ["shcode"]=0x0041,
+ ["specials"]={ "char", 0x0226, 0x0304 },
+ ["unicodeslot"]=0x01E0, -- Ç 
+ },
+ {
+ ["category"]="ll",
+ ["contextname"]="adotaccentmacron",
+ ["description"]="LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON",
+ ["linebreak"]="al",
+ ["shcode"]=0x0061,
+ ["specials"]={ "char", 0x0227, 0x0304 },
+ ["uccode"]=0x01E0,
+ ["unicodeslot"]=0x01E1, -- Ç¡
+ },
+ {
+ ["category"]="lu",
+ ["contextname"]="AEmacron",
+ ["description"]="LATIN CAPITAL LETTER AE WITH MACRON",
+ ["lccode"]=0x01E3,
+ ["linebreak"]="al",
+ ["shcode"]=0x00C6,
+ ["specials"]={ "char", 0x00C6, 0x0304 },
+ ["unicodeslot"]=0x01E2, -- Ǣ
+ },
+ {
+ ["category"]="ll",
+ ["contextname"]="aemacron",
+ ["description"]="LATIN SMALL LETTER AE WITH MACRON",
+ ["linebreak"]="al",
+ ["shcode"]=0x00E6,
+ ["specials"]={ "char", 0x00E6, 0x0304 },
+ ["uccode"]=0x01E2,
+ ["unicodeslot"]=0x01E3, -- ǣ
+ },
+ {
+ ["category"]="lu",
+ ["contextname"]="Gstroke",
+ ["description"]="LATIN CAPITAL LETTER G WITH STROKE",
+ ["lccode"]=0x01E5,
+ ["linebreak"]="al",
+ ["shcode"]=0x0047,
+ ["unicodeslot"]=0x01E4, -- Ǥ
+ },
+ {
+ ["category"]="ll",
+ ["contextname"]="gstroke",
+ ["description"]="LATIN SMALL LETTER G WITH STROKE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0067,
+ ["uccode"]=0x01E4,
+ ["unicodeslot"]=0x01E5, -- ǥ
+ },
+ {
+ ["adobename"]="Gcaron",
+ ["category"]="lu",
+ ["contextname"]="Gcaron",
+ ["description"]="LATIN CAPITAL LETTER G WITH CARON",
+ ["lccode"]=0x01E7,
+ ["linebreak"]="al",
+ ["shcode"]=0x0047,
+ ["specials"]={ "char", 0x0047, 0x030C },
+ ["unicodeslot"]=0x01E6, -- Ǧ
+ },
+ {
+ ["adobename"]="gcaron",
+ ["category"]="ll",
+ ["contextname"]="gcaron",
+ ["description"]="LATIN SMALL LETTER G WITH CARON",
+ ["linebreak"]="al",
+ ["shcode"]=0x0067,
+ ["specials"]={ "char", 0x0067, 0x030C },
+ ["uccode"]=0x01E6,
+ ["unicodeslot"]=0x01E7, -- ǧ
+ },
+ {
+ ["category"]="lu",
+ ["contextname"]="Kcaron",
+ ["description"]="LATIN CAPITAL LETTER K WITH CARON",
+ ["lccode"]=0x01E9,
+ ["linebreak"]="al",
+ ["shcode"]=0x004B,
+ ["specials"]={ "char", 0x004B, 0x030C },
+ ["unicodeslot"]=0x01E8, -- Ǩ
+ },
+ {
+ ["category"]="ll",
+ ["contextname"]="kcaron",
+ ["description"]="LATIN SMALL LETTER K WITH CARON",
+ ["linebreak"]="al",
+ ["shcode"]=0x006B,
+ ["specials"]={ "char", 0x006B, 0x030C },
+ ["uccode"]=0x01E8,
+ ["unicodeslot"]=0x01E9, -- Ç©
+ },
+ {
+ ["category"]="lu",
+ ["contextname"]="Oogonek",
+ ["description"]="LATIN CAPITAL LETTER O WITH OGONEK",
+ ["lccode"]=0x01EB,
+ ["linebreak"]="al",
+ ["shcode"]=0x004F,
+ ["specials"]={ "char", 0x004F, 0x0328 },
+ ["unicodeslot"]=0x01EA, -- Ǫ
+ },
+ {
+ ["category"]="ll",
+ ["contextname"]="oogonek",
+ ["description"]="LATIN SMALL LETTER O WITH OGONEK",
+ ["linebreak"]="al",
+ ["shcode"]=0x006F,
+ ["specials"]={ "char", 0x006F, 0x0328 },
+ ["uccode"]=0x01EA,
+ ["unicodeslot"]=0x01EB, -- Ç«
+ },
+ {
+ ["category"]="lu",
+ ["contextname"]="Oogonekmacron",
+ ["description"]="LATIN CAPITAL LETTER O WITH OGONEK AND MACRON",
+ ["lccode"]=0x01ED,
+ ["linebreak"]="al",
+ ["shcode"]=0x004F,
+ ["specials"]={ "char", 0x01EA, 0x0304 },
+ ["unicodeslot"]=0x01EC, -- Ǭ
+ },
+ {
+ ["category"]="ll",
+ ["contextname"]="oogonekmacron",
+ ["description"]="LATIN SMALL LETTER O WITH OGONEK AND MACRON",
+ ["linebreak"]="al",
+ ["shcode"]=0x006F,
+ ["specials"]={ "char", 0x01EB, 0x0304 },
+ ["uccode"]=0x01EC,
+ ["unicodeslot"]=0x01ED, -- Ç­
+ },
+ {
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER EZH WITH CARON",
+ ["lccode"]=0x01EF,
+ ["linebreak"]="al",
+ ["shcode"]=0x01B7,
+ ["specials"]={ "char", 0x01B7, 0x030C },
+ ["unicodeslot"]=0x01EE, -- Ç®
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER EZH WITH CARON",
+ ["linebreak"]="al",
+ ["shcode"]=0x0292,
+ ["specials"]={ "char", 0x0292, 0x030C },
+ ["uccode"]=0x01EE,
+ ["unicodeslot"]=0x01EF, -- ǯ
+ },
+ {
+ ["category"]="ll",
+ ["contextname"]="jcaron",
+ ["description"]="LATIN SMALL LETTER J WITH CARON",
+ ["linebreak"]="al",
+ ["shcode"]=0x006A,
+ ["specials"]={ "char", 0x006A, 0x030C },
+ ["unicodeslot"]=0x01F0, -- Ç°
+ },
+ {
+ ["category"]="lu",
+ ["contextname"]="DZligature",
+ ["description"]="LATIN CAPITAL LETTER DZ",
+ ["lccode"]=0x01F3,
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x0044, 0x005A },
+ ["uccode"]=0x01F2,
+ ["unicodeslot"]=0x01F1, -- DZ
+ },
+ {
+ ["category"]="lt",
+ ["contextname"]="Dzligature",
+ ["description"]="LATIN CAPITAL LETTER D WITH SMALL LETTER Z",
+ ["lccode"]=0x01F3,
+ ["linebreak"]="al",
+ ["shcode"]=0x0044,
+ ["specials"]={ "compat", 0x0044, 0x007A },
+ ["uccode"]=0x01F1,
+ ["unicodeslot"]=0x01F2, -- Dz
+ },
+ {
+ ["category"]="ll",
+ ["contextname"]="dzligature",
+ ["description"]="LATIN SMALL LETTER DZ",
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x0064, 0x007A },
+ ["uccode"]=0x01F1,
+ ["unicodeslot"]=0x01F3, -- dz
+ },
+ {
+ ["category"]="lu",
+ ["contextname"]="Gacute",
+ ["description"]="LATIN CAPITAL LETTER G WITH ACUTE",
+ ["lccode"]=0x01F5,
+ ["linebreak"]="al",
+ ["shcode"]=0x0047,
+ ["specials"]={ "char", 0x0047, 0x0301 },
+ ["unicodeslot"]=0x01F4, -- Ç´
+ },
+ {
+ ["category"]="ll",
+ ["contextname"]="gacute",
+ ["description"]="LATIN SMALL LETTER G WITH ACUTE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0067,
+ ["specials"]={ "char", 0x0067, 0x0301 },
+ ["uccode"]=0x01F4,
+ ["unicodeslot"]=0x01F5, -- ǵ
+ },
+ {
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER HWAIR",
+ ["lccode"]=0x0195,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x01F6, -- Ƕ
+ },
+ {
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER WYNN",
+ ["lccode"]=0x01BF,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x01F7, -- Ç·
+ },
+ {
+ ["category"]="lu",
+ ["contextname"]="Ngrave",
+ ["description"]="LATIN CAPITAL LETTER N WITH GRAVE",
+ ["lccode"]=0x01F9,
+ ["linebreak"]="al",
+ ["shcode"]=0x004E,
+ ["specials"]={ "char", 0x004E, 0x0300 },
+ ["unicodeslot"]=0x01F8, -- Ǹ
+ },
+ {
+ ["category"]="ll",
+ ["contextname"]="ngrave",
+ ["description"]="LATIN SMALL LETTER N WITH GRAVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x006E,
+ ["specials"]={ "char", 0x006E, 0x0300 },
+ ["uccode"]=0x01F8,
+ ["unicodeslot"]=0x01F9, -- ǹ
+ },
+ {
+ ["adobename"]="Aringacute",
+ ["category"]="lu",
+ ["contextname"]="Aringacute",
+ ["description"]="LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE",
+ ["lccode"]=0x01FB,
+ ["linebreak"]="al",
+ ["shcode"]=0x0041,
+ ["specials"]={ "char", 0x00C5, 0x0301 },
+ ["unicodeslot"]=0x01FA, -- Ǻ
+ },
+ {
+ ["adobename"]="aringacute",
+ ["category"]="ll",
+ ["contextname"]="aringacute",
+ ["description"]="LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0061,
+ ["specials"]={ "char", 0x00E5, 0x0301 },
+ ["uccode"]=0x01FA,
+ ["unicodeslot"]=0x01FB, -- Ç»
+ },
+ {
+ ["adobename"]="AEacute",
+ ["category"]="lu",
+ ["contextname"]="AEacute",
+ ["description"]="LATIN CAPITAL LETTER AE WITH ACUTE",
+ ["lccode"]=0x01FD,
+ ["linebreak"]="al",
+ ["shcode"]=0x00C6,
+ ["specials"]={ "char", 0x00C6, 0x0301 },
+ ["unicodeslot"]=0x01FC, -- Ǽ
+ },
+ {
+ ["adobename"]="aeacute",
+ ["category"]="ll",
+ ["contextname"]="aeacute",
+ ["description"]="LATIN SMALL LETTER AE WITH ACUTE",
+ ["linebreak"]="al",
+ ["shcode"]=0x00E6,
+ ["specials"]={ "char", 0x00E6, 0x0301 },
+ ["uccode"]=0x01FC,
+ ["unicodeslot"]=0x01FD, -- ǽ
+ },
+ {
+ ["adobename"]="Oslashacute",
+ ["category"]="lu",
+ ["contextname"]="Ostrokeacute",
+ ["description"]="LATIN CAPITAL LETTER O WITH STROKE AND ACUTE",
+ ["lccode"]=0x01FF,
+ ["linebreak"]="al",
+ ["shcode"]=0x004F,
+ ["specials"]={ "char", 0x00D8, 0x0301 },
+ ["unicodeslot"]=0x01FE, -- Ǿ
+ },
+ {
+ ["adobename"]="oslashacute",
+ ["category"]="ll",
+ ["contextname"]="ostrokeacute",
+ ["description"]="LATIN SMALL LETTER O WITH STROKE AND ACUTE",
+ ["linebreak"]="al",
+ ["shcode"]=0x006F,
+ ["specials"]={ "char", 0x00F8, 0x0301 },
+ ["uccode"]=0x01FE,
+ ["unicodeslot"]=0x01FF, -- Ç¿
+ },
+ {
+ ["category"]="lu",
+ ["contextname"]="Adoublegrave",
+ ["description"]="LATIN CAPITAL LETTER A WITH DOUBLE GRAVE",
+ ["lccode"]=0x0201,
+ ["linebreak"]="al",
+ ["shcode"]=0x0041,
+ ["specials"]={ "char", 0x0041, 0x030F },
+ ["unicodeslot"]=0x0200, -- Ȁ
+ },
+ {
+ ["category"]="ll",
+ ["contextname"]="adoublegrave",
+ ["description"]="LATIN SMALL LETTER A WITH DOUBLE GRAVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0061,
+ ["specials"]={ "char", 0x0061, 0x030F },
+ ["uccode"]=0x0200,
+ ["unicodeslot"]=0x0201, -- È
+ },
+ {
+ ["category"]="lu",
+ ["contextname"]="Ainvertedbreve",
+ ["description"]="LATIN CAPITAL LETTER A WITH INVERTED BREVE",
+ ["lccode"]=0x0203,
+ ["linebreak"]="al",
+ ["shcode"]=0x0041,
+ ["specials"]={ "char", 0x0041, 0x0311 },
+ ["unicodeslot"]=0x0202, -- È‚
+ },
+ {
+ ["category"]="ll",
+ ["contextname"]="ainvertedbreve",
+ ["description"]="LATIN SMALL LETTER A WITH INVERTED BREVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0061,
+ ["specials"]={ "char", 0x0061, 0x0311 },
+ ["uccode"]=0x0202,
+ ["unicodeslot"]=0x0203, -- ȃ
+ },
+ {
+ ["category"]="lu",
+ ["contextname"]="Edoublegrave",
+ ["description"]="LATIN CAPITAL LETTER E WITH DOUBLE GRAVE",
+ ["lccode"]=0x0205,
+ ["linebreak"]="al",
+ ["shcode"]=0x0045,
+ ["specials"]={ "char", 0x0045, 0x030F },
+ ["unicodeslot"]=0x0204, -- È„
+ },
+ {
+ ["category"]="ll",
+ ["contextname"]="edoublegrave",
+ ["description"]="LATIN SMALL LETTER E WITH DOUBLE GRAVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0065,
+ ["specials"]={ "char", 0x0065, 0x030F },
+ ["uccode"]=0x0204,
+ ["unicodeslot"]=0x0205, -- È…
+ },
+ {
+ ["category"]="lu",
+ ["contextname"]="Einvertedbreve",
+ ["description"]="LATIN CAPITAL LETTER E WITH INVERTED BREVE",
+ ["lccode"]=0x0207,
+ ["linebreak"]="al",
+ ["shcode"]=0x0045,
+ ["specials"]={ "char", 0x0045, 0x0311 },
+ ["unicodeslot"]=0x0206, -- Ȇ
+ },
+ {
+ ["category"]="ll",
+ ["contextname"]="einvertedbreve",
+ ["description"]="LATIN SMALL LETTER E WITH INVERTED BREVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0065,
+ ["specials"]={ "char", 0x0065, 0x0311 },
+ ["uccode"]=0x0206,
+ ["unicodeslot"]=0x0207, -- ȇ
+ },
+ {
+ ["category"]="lu",
+ ["contextname"]="Idoublegrave",
+ ["description"]="LATIN CAPITAL LETTER I WITH DOUBLE GRAVE",
+ ["lccode"]=0x0209,
+ ["linebreak"]="al",
+ ["shcode"]=0x0049,
+ ["specials"]={ "char", 0x0049, 0x030F },
+ ["unicodeslot"]=0x0208, -- Ȉ
+ },
+ {
+ ["category"]="ll",
+ ["contextname"]="idoublegrave",
+ ["description"]="LATIN SMALL LETTER I WITH DOUBLE GRAVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0069,
+ ["specials"]={ "char", 0x0069, 0x030F },
+ ["uccode"]=0x0208,
+ ["unicodeslot"]=0x0209, -- ȉ
+ },
+ {
+ ["category"]="lu",
+ ["contextname"]="Iinvertedbreve",
+ ["description"]="LATIN CAPITAL LETTER I WITH INVERTED BREVE",
+ ["lccode"]=0x020B,
+ ["linebreak"]="al",
+ ["shcode"]=0x0049,
+ ["specials"]={ "char", 0x0049, 0x0311 },
+ ["unicodeslot"]=0x020A, -- ÈŠ
+ },
+ {
+ ["category"]="ll",
+ ["contextname"]="iinvertedbreve",
+ ["description"]="LATIN SMALL LETTER I WITH INVERTED BREVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0069,
+ ["specials"]={ "char", 0x0069, 0x0311 },
+ ["uccode"]=0x020A,
+ ["unicodeslot"]=0x020B, -- È‹
+ },
+ {
+ ["category"]="lu",
+ ["contextname"]="Odoublegrave",
+ ["description"]="LATIN CAPITAL LETTER O WITH DOUBLE GRAVE",
+ ["lccode"]=0x020D,
+ ["linebreak"]="al",
+ ["shcode"]=0x004F,
+ ["specials"]={ "char", 0x004F, 0x030F },
+ ["unicodeslot"]=0x020C, -- Ȍ
+ },
+ {
+ ["category"]="ll",
+ ["contextname"]="odoublegrave",
+ ["description"]="LATIN SMALL LETTER O WITH DOUBLE GRAVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x006F,
+ ["specials"]={ "char", 0x006F, 0x030F },
+ ["uccode"]=0x020C,
+ ["unicodeslot"]=0x020D, -- È
+ },
+ {
+ ["category"]="lu",
+ ["contextname"]="Oinvertedbreve",
+ ["description"]="LATIN CAPITAL LETTER O WITH INVERTED BREVE",
+ ["lccode"]=0x020F,
+ ["linebreak"]="al",
+ ["shcode"]=0x004F,
+ ["specials"]={ "char", 0x004F, 0x0311 },
+ ["unicodeslot"]=0x020E, -- ÈŽ
+ },
+ {
+ ["category"]="ll",
+ ["contextname"]="oinvertedbreve",
+ ["description"]="LATIN SMALL LETTER O WITH INVERTED BREVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x006F,
+ ["specials"]={ "char", 0x006F, 0x0311 },
+ ["uccode"]=0x020E,
+ ["unicodeslot"]=0x020F, -- È
+ },
+ {
+ ["category"]="lu",
+ ["contextname"]="Rdoublegrave",
+ ["description"]="LATIN CAPITAL LETTER R WITH DOUBLE GRAVE",
+ ["lccode"]=0x0211,
+ ["linebreak"]="al",
+ ["shcode"]=0x0052,
+ ["specials"]={ "char", 0x0052, 0x030F },
+ ["unicodeslot"]=0x0210, -- È
+ },
+ {
+ ["category"]="ll",
+ ["contextname"]="rdoublegrave",
+ ["description"]="LATIN SMALL LETTER R WITH DOUBLE GRAVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0072,
+ ["specials"]={ "char", 0x0072, 0x030F },
+ ["uccode"]=0x0210,
+ ["unicodeslot"]=0x0211, -- È‘
+ },
+ {
+ ["category"]="lu",
+ ["contextname"]="Rinvertedbreve",
+ ["description"]="LATIN CAPITAL LETTER R WITH INVERTED BREVE",
+ ["lccode"]=0x0213,
+ ["linebreak"]="al",
+ ["shcode"]=0x0052,
+ ["specials"]={ "char", 0x0052, 0x0311 },
+ ["unicodeslot"]=0x0212, -- È’
+ },
+ {
+ ["category"]="ll",
+ ["contextname"]="rinvertedbreve",
+ ["description"]="LATIN SMALL LETTER R WITH INVERTED BREVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0072,
+ ["specials"]={ "char", 0x0072, 0x0311 },
+ ["uccode"]=0x0212,
+ ["unicodeslot"]=0x0213, -- È“
+ },
+ {
+ ["category"]="lu",
+ ["contextname"]="Udoublegrave",
+ ["description"]="LATIN CAPITAL LETTER U WITH DOUBLE GRAVE",
+ ["lccode"]=0x0215,
+ ["linebreak"]="al",
+ ["shcode"]=0x0055,
+ ["specials"]={ "char", 0x0055, 0x030F },
+ ["unicodeslot"]=0x0214, -- È”
+ },
+ {
+ ["category"]="ll",
+ ["contextname"]="udoublegrave",
+ ["description"]="LATIN SMALL LETTER U WITH DOUBLE GRAVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0075,
+ ["specials"]={ "char", 0x0075, 0x030F },
+ ["uccode"]=0x0214,
+ ["unicodeslot"]=0x0215, -- È•
+ },
+ {
+ ["category"]="lu",
+ ["contextname"]="Uinvertedbreve",
+ ["description"]="LATIN CAPITAL LETTER U WITH INVERTED BREVE",
+ ["lccode"]=0x0217,
+ ["linebreak"]="al",
+ ["shcode"]=0x0055,
+ ["specials"]={ "char", 0x0055, 0x0311 },
+ ["unicodeslot"]=0x0216, -- È–
+ },
+ {
+ ["category"]="ll",
+ ["contextname"]="uinvertedbreve",
+ ["description"]="LATIN SMALL LETTER U WITH INVERTED BREVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0075,
+ ["specials"]={ "char", 0x0075, 0x0311 },
+ ["uccode"]=0x0216,
+ ["unicodeslot"]=0x0217, -- È—
+ },
+ {
+ ["adobename"]="Scommaaccent",
+ ["category"]="lu",
+ ["contextname"]="Scommaaccent",
+ ["description"]="LATIN CAPITAL LETTER S WITH COMMA BELOW",
+ ["lccode"]=0x0219,
+ ["linebreak"]="al",
+ ["shcode"]=0x0053,
+ ["specials"]={ "char", 0x0053, 0x0326 },
+ ["unicodeslot"]=0x0218, -- Ș
+ },
+ {
+ ["adobename"]="scommaaccent",
+ ["category"]="ll",
+ ["contextname"]="scommaaccent",
+ ["description"]="LATIN SMALL LETTER S WITH COMMA BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x0073,
+ ["specials"]={ "char", 0x0073, 0x0326 },
+ ["uccode"]=0x0218,
+ ["unicodeslot"]=0x0219, -- È™
+ },
+ {
+ ["category"]="lu",
+ ["contextname"]="Tcommaaccent",
+ ["description"]="LATIN CAPITAL LETTER T WITH COMMA BELOW",
+ ["lccode"]=0x021B,
+ ["linebreak"]="al",
+ ["shcode"]=0x0054,
+ ["specials"]={ "char", 0x0054, 0x0326 },
+ ["unicodeslot"]=0x021A, -- Èš
+ },
+ {
+ ["category"]="ll",
+ ["contextname"]="tcommaaccent",
+ ["description"]="LATIN SMALL LETTER T WITH COMMA BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x0074,
+ ["specials"]={ "char", 0x0074, 0x0326 },
+ ["uccode"]=0x021A,
+ ["unicodeslot"]=0x021B, -- È›
+ },
+ {
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER YOGH",
+ ["lccode"]=0x021D,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x021C, -- Ȝ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER YOGH",
+ ["linebreak"]="al",
+ ["uccode"]=0x021C,
+ ["unicodeslot"]=0x021D, -- È
+ },
+ {
+ ["category"]="lu",
+ ["contextname"]="Hcaron",
+ ["description"]="LATIN CAPITAL LETTER H WITH CARON",
+ ["lccode"]=0x021F,
+ ["linebreak"]="al",
+ ["shcode"]=0x0048,
+ ["specials"]={ "char", 0x0048, 0x030C },
+ ["unicodeslot"]=0x021E, -- Èž
+ },
+ {
+ ["category"]="ll",
+ ["contextname"]="hcaron",
+ ["description"]="LATIN SMALL LETTER H WITH CARON",
+ ["linebreak"]="al",
+ ["shcode"]=0x0068,
+ ["specials"]={ "char", 0x0068, 0x030C },
+ ["uccode"]=0x021E,
+ ["unicodeslot"]=0x021F, -- ÈŸ
+ },
+ {
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER N WITH LONG RIGHT LEG",
+ ["lccode"]=0x019E,
+ ["linebreak"]="al",
+ ["shcode"]=0x004E,
+ ["unicodeslot"]=0x0220, -- È 
+ },
+ {
+ ["category"]="ll",
+ ["contextname"]="dcurl",
+ ["description"]="LATIN SMALL LETTER D WITH CURL",
+ ["linebreak"]="al",
+ ["shcode"]=0x0064,
+ ["unicodeslot"]=0x0221, -- È¡
+ },
+ {
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER OU",
+ ["lccode"]=0x0223,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0222, -- Ȣ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER OU",
+ ["linebreak"]="al",
+ ["uccode"]=0x0222,
+ ["unicodeslot"]=0x0223, -- ȣ
+ },
+ {
+ ["category"]="lu",
+ ["contextname"]="Zhook",
+ ["description"]="LATIN CAPITAL LETTER Z WITH HOOK",
+ ["lccode"]=0x0225,
+ ["linebreak"]="al",
+ ["shcode"]=0x005A,
+ ["unicodeslot"]=0x0224, -- Ȥ
+ },
+ {
+ ["category"]="ll",
+ ["contextname"]="zhook",
+ ["description"]="LATIN SMALL LETTER Z WITH HOOK",
+ ["linebreak"]="al",
+ ["shcode"]=0x007A,
+ ["uccode"]=0x0224,
+ ["unicodeslot"]=0x0225, -- ȥ
+ },
+ {
+ ["category"]="lu",
+ ["contextname"]="Adotaccent",
+ ["description"]="LATIN CAPITAL LETTER A WITH DOT ABOVE",
+ ["lccode"]=0x0227,
+ ["linebreak"]="al",
+ ["shcode"]=0x0041,
+ ["specials"]={ "char", 0x0041, 0x0307 },
+ ["unicodeslot"]=0x0226, -- Ȧ
+ },
+ {
+ ["category"]="ll",
+ ["contextname"]="adotaccent",
+ ["description"]="LATIN SMALL LETTER A WITH DOT ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0061,
+ ["specials"]={ "char", 0x0061, 0x0307 },
+ ["uccode"]=0x0226,
+ ["unicodeslot"]=0x0227, -- ȧ
+ },
+ {
+ ["category"]="lu",
+ ["contextname"]="Ecedilla",
+ ["description"]="LATIN CAPITAL LETTER E WITH CEDILLA",
+ ["lccode"]=0x0229,
+ ["linebreak"]="al",
+ ["shcode"]=0x0045,
+ ["specials"]={ "char", 0x0045, 0x0327 },
+ ["unicodeslot"]=0x0228, -- Ȩ
+ },
+ {
+ ["category"]="ll",
+ ["contextname"]="ecedilla",
+ ["description"]="LATIN SMALL LETTER E WITH CEDILLA",
+ ["linebreak"]="al",
+ ["shcode"]=0x0065,
+ ["specials"]={ "char", 0x0065, 0x0327 },
+ ["uccode"]=0x0228,
+ ["unicodeslot"]=0x0229, -- È©
+ },
+ {
+ ["category"]="lu",
+ ["contextname"]="Odiaeresismacron",
+ ["description"]="LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON",
+ ["lccode"]=0x022B,
+ ["linebreak"]="al",
+ ["shcode"]=0x004F,
+ ["specials"]={ "char", 0x00D6, 0x0304 },
+ ["unicodeslot"]=0x022A, -- Ȫ
+ },
+ {
+ ["category"]="ll",
+ ["contextname"]="odiaeresismacron",
+ ["description"]="LATIN SMALL LETTER O WITH DIAERESIS AND MACRON",
+ ["linebreak"]="al",
+ ["shcode"]=0x006F,
+ ["specials"]={ "char", 0x00F6, 0x0304 },
+ ["uccode"]=0x022A,
+ ["unicodeslot"]=0x022B, -- È«
+ },
+ {
+ ["category"]="lu",
+ ["contextname"]="Otildemacron",
+ ["description"]="LATIN CAPITAL LETTER O WITH TILDE AND MACRON",
+ ["lccode"]=0x022D,
+ ["linebreak"]="al",
+ ["shcode"]=0x004F,
+ ["specials"]={ "char", 0x00D5, 0x0304 },
+ ["unicodeslot"]=0x022C, -- Ȭ
+ },
+ {
+ ["category"]="ll",
+ ["contextname"]="otildemacron",
+ ["description"]="LATIN SMALL LETTER O WITH TILDE AND MACRON",
+ ["linebreak"]="al",
+ ["shcode"]=0x006F,
+ ["specials"]={ "char", 0x00F5, 0x0304 },
+ ["uccode"]=0x022C,
+ ["unicodeslot"]=0x022D, -- È­
+ },
+ {
+ ["category"]="lu",
+ ["contextname"]="Odotaccent",
+ ["description"]="LATIN CAPITAL LETTER O WITH DOT ABOVE",
+ ["lccode"]=0x022F,
+ ["linebreak"]="al",
+ ["shcode"]=0x004F,
+ ["specials"]={ "char", 0x004F, 0x0307 },
+ ["unicodeslot"]=0x022E, -- È®
+ },
+ {
+ ["category"]="ll",
+ ["contextname"]="odotaccent",
+ ["description"]="LATIN SMALL LETTER O WITH DOT ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x006F,
+ ["specials"]={ "char", 0x006F, 0x0307 },
+ ["uccode"]=0x022E,
+ ["unicodeslot"]=0x022F, -- ȯ
+ },
+ {
+ ["category"]="lu",
+ ["contextname"]="Odotaccentmacron",
+ ["description"]="LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON",
+ ["lccode"]=0x0231,
+ ["linebreak"]="al",
+ ["shcode"]=0x004F,
+ ["specials"]={ "char", 0x022E, 0x0304 },
+ ["unicodeslot"]=0x0230, -- È°
+ },
+ {
+ ["category"]="ll",
+ ["contextname"]="odotaccentmacron",
+ ["description"]="LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON",
+ ["linebreak"]="al",
+ ["shcode"]=0x006F,
+ ["specials"]={ "char", 0x022F, 0x0304 },
+ ["uccode"]=0x0230,
+ ["unicodeslot"]=0x0231, -- ȱ
+ },
+ {
+ ["category"]="lu",
+ ["contextname"]="Ymacron",
+ ["description"]="LATIN CAPITAL LETTER Y WITH MACRON",
+ ["lccode"]=0x0233,
+ ["linebreak"]="al",
+ ["shcode"]=0x0059,
+ ["specials"]={ "char", 0x0059, 0x0304 },
+ ["unicodeslot"]=0x0232, -- Ȳ
+ },
+ {
+ ["category"]="ll",
+ ["contextname"]="ymacron",
+ ["description"]="LATIN SMALL LETTER Y WITH MACRON",
+ ["linebreak"]="al",
+ ["shcode"]=0x0079,
+ ["specials"]={ "char", 0x0079, 0x0304 },
+ ["uccode"]=0x0232,
+ ["unicodeslot"]=0x0233, -- ȳ
+ },
+ {
+ ["category"]="ll",
+ ["contextname"]="lcurl",
+ ["description"]="LATIN SMALL LETTER L WITH CURL",
+ ["linebreak"]="al",
+ ["shcode"]=0x006C,
+ ["unicodeslot"]=0x0234, -- È´
+ },
+ {
+ ["category"]="ll",
+ ["contextname"]="ncurl",
+ ["description"]="LATIN SMALL LETTER N WITH CURL",
+ ["linebreak"]="al",
+ ["shcode"]=0x006E,
+ ["unicodeslot"]=0x0235, -- ȵ
+ },
+ {
+ ["category"]="ll",
+ ["contextname"]="tcurl",
+ ["description"]="LATIN SMALL LETTER T WITH CURL",
+ ["linebreak"]="al",
+ ["shcode"]=0x0074,
+ ["unicodeslot"]=0x0236, -- ȶ
+ },
+ {
+ ["category"]="ll",
+ ["contextname"]="dotlessj",
+ ["description"]="LATIN SMALL LETTER DOTLESS J",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0237, -- È·
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER DB DIGRAPH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0238, -- ȸ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER QP DIGRAPH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0239, -- ȹ
+ },
+ {
+ ["category"]="lu",
+ ["contextname"]="Astroke",
+ ["description"]="LATIN CAPITAL LETTER A WITH STROKE",
+ ["lccode"]=0x2C65,
+ ["linebreak"]="al",
+ ["shcode"]=0x0041,
+ ["unicodeslot"]=0x023A, -- Ⱥ
+ },
+ {
+ ["category"]="lu",
+ ["contextname"]="Cstroke",
+ ["description"]="LATIN CAPITAL LETTER C WITH STROKE",
+ ["lccode"]=0x023C,
+ ["linebreak"]="al",
+ ["shcode"]=0x0043,
+ ["unicodeslot"]=0x023B, -- È»
+ },
+ {
+ ["category"]="ll",
+ ["contextname"]="cstroke",
+ ["description"]="LATIN SMALL LETTER C WITH STROKE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0063,
+ ["uccode"]=0x023B,
+ ["unicodeslot"]=0x023C, -- ȼ
+ },
+ {
+ ["category"]="lu",
+ ["contextname"]="Lbar",
+ ["description"]="LATIN CAPITAL LETTER L WITH BAR",
+ ["lccode"]=0x019A,
+ ["linebreak"]="al",
+ ["shcode"]=0x004C,
+ ["unicodeslot"]=0x023D, -- Ƚ
+ },
+ {
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER T WITH DIAGONAL STROKE",
+ ["lccode"]=0x2C66,
+ ["linebreak"]="al",
+ ["shcode"]=0x0054,
+ ["unicodeslot"]=0x023E, -- Ⱦ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER S WITH SWASH TAIL",
+ ["linebreak"]="al",
+ ["shcode"]=0x0073,
+ ["unicodeslot"]=0x023F, -- È¿
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER Z WITH SWASH TAIL",
+ ["linebreak"]="al",
+ ["shcode"]=0x007A,
+ ["unicodeslot"]=0x0240, -- ɀ
+ },
+ {
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER GLOTTAL STOP",
+ ["lccode"]=0x0242,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0241, -- É
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER GLOTTAL STOP",
+ ["linebreak"]="al",
+ ["uccode"]=0x0241,
+ ["unicodeslot"]=0x0242, -- É‚
+ },
+ {
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER B WITH STROKE",
+ ["lccode"]=0x0180,
+ ["linebreak"]="al",
+ ["shcode"]=0x0042,
+ ["unicodeslot"]=0x0243, -- Ƀ
+ },
+ {
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER U BAR",
+ ["lccode"]=0x0289,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0244, -- É„
+ },
+ {
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER TURNED V",
+ ["lccode"]=0x028C,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0245, -- É…
+ },
+ {
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER E WITH STROKE",
+ ["lccode"]=0x0247,
+ ["linebreak"]="al",
+ ["shcode"]=0x0045,
+ ["unicodeslot"]=0x0246, -- Ɇ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER E WITH STROKE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0065,
+ ["uccode"]=0x0246,
+ ["unicodeslot"]=0x0247, -- ɇ
+ },
+ {
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER J WITH STROKE",
+ ["lccode"]=0x0249,
+ ["linebreak"]="al",
+ ["shcode"]=0x004A,
+ ["unicodeslot"]=0x0248, -- Ɉ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER J WITH STROKE",
+ ["linebreak"]="al",
+ ["shcode"]=0x006A,
+ ["uccode"]=0x0248,
+ ["unicodeslot"]=0x0249, -- ɉ
+ },
+ {
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL",
+ ["lccode"]=0x024B,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x024A, -- ÉŠ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER Q WITH HOOK TAIL",
+ ["linebreak"]="al",
+ ["shcode"]=0x0071,
+ ["uccode"]=0x024A,
+ ["unicodeslot"]=0x024B, -- É‹
+ },
+ {
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER R WITH STROKE",
+ ["lccode"]=0x024D,
+ ["linebreak"]="al",
+ ["shcode"]=0x0052,
+ ["unicodeslot"]=0x024C, -- Ɍ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER R WITH STROKE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0072,
+ ["uccode"]=0x024C,
+ ["unicodeslot"]=0x024D, -- É
+ },
+ {
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER Y WITH STROKE",
+ ["lccode"]=0x024F,
+ ["linebreak"]="al",
+ ["shcode"]=0x0059,
+ ["unicodeslot"]=0x024E, -- ÉŽ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER Y WITH STROKE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0079,
+ ["uccode"]=0x024E,
+ ["unicodeslot"]=0x024F, -- É
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER TURNED A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0250, -- É
+ },
+ {
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["description"]="LATIN SMALL LETTER ALPHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0251, -- É‘
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER TURNED ALPHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0252, -- É’
+ },
+ {
+ ["category"]="ll",
+ ["contextname"]="bhook",
+ ["description"]="LATIN SMALL LETTER B WITH HOOK",
+ ["linebreak"]="al",
+ ["shcode"]=0x0062,
+ ["uccode"]=0x0181,
+ ["unicodeslot"]=0x0253, -- É“
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER OPEN O",
+ ["linebreak"]="al",
+ ["uccode"]=0x0186,
+ ["unicodeslot"]=0x0254, -- É”
+ },
+ {
+ ["category"]="ll",
+ ["contextname"]="ccurl",
+ ["description"]="LATIN SMALL LETTER C WITH CURL",
+ ["linebreak"]="al",
+ ["shcode"]=0x0063,
+ ["unicodeslot"]=0x0255, -- É•
+ },
+ {
+ ["category"]="ll",
+ ["contextname"]="dtail",
+ ["description"]="LATIN SMALL LETTER D WITH TAIL",
+ ["linebreak"]="al",
+ ["shcode"]=0x0064,
+ ["uccode"]=0x0189,
+ ["unicodeslot"]=0x0256, -- É–
+ },
+ {
+ ["category"]="ll",
+ ["contextname"]="dhook",
+ ["description"]="LATIN SMALL LETTER D WITH HOOK",
+ ["linebreak"]="al",
+ ["shcode"]=0x0064,
+ ["uccode"]=0x018A,
+ ["unicodeslot"]=0x0257, -- É—
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER REVERSED E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0258, -- ɘ
+ },
+ {
+ ["category"]="ll",
+ ["contextname"]="schwa",
+ ["description"]="LATIN SMALL LETTER SCHWA",
+ ["linebreak"]="al",
+ ["uccode"]=0x018F,
+ ["unicodeslot"]=0x0259, -- É™
+ },
+ {
+ ["category"]="ll",
+ ["contextname"]="schwahook",
+ ["description"]="LATIN SMALL LETTER SCHWA WITH HOOK",
+ ["linebreak"]="al",
+ ["shcode"]=0x0259,
+ ["unicodeslot"]=0x025A, -- Éš
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER OPEN E",
+ ["linebreak"]="al",
+ ["uccode"]=0x0190,
+ ["unicodeslot"]=0x025B, -- É›
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER REVERSED OPEN E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x025C, -- ɜ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER REVERSED OPEN E WITH HOOK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x025D, -- É
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER CLOSED REVERSED OPEN E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x025E, -- Éž
+ },
+ {
+ ["category"]="ll",
+ ["contextname"]="dotlessjstroke",
+ ["description"]="LATIN SMALL LETTER DOTLESS J WITH STROKE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x025F, -- ÉŸ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER G WITH HOOK",
+ ["linebreak"]="al",
+ ["shcode"]=0x0067,
+ ["uccode"]=0x0193,
+ ["unicodeslot"]=0x0260, -- É 
+ },
+ {
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["description"]="LATIN SMALL LETTER SCRIPT G",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0261, -- É¡
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN LETTER SMALL CAPITAL G",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0262, -- ɢ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER GAMMA",
+ ["linebreak"]="al",
+ ["uccode"]=0x0194,
+ ["unicodeslot"]=0x0263, -- ɣ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER RAMS HORN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0264, -- ɤ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER TURNED H",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0265, -- ɥ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER H WITH HOOK",
+ ["linebreak"]="al",
+ ["shcode"]=0x0068,
+ ["unicodeslot"]=0x0266, -- ɦ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER HENG WITH HOOK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0267, -- ɧ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER I WITH STROKE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0069,
+ ["uccode"]=0x0197,
+ ["unicodeslot"]=0x0268, -- ɨ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER IOTA",
+ ["linebreak"]="al",
+ ["uccode"]=0x0196,
+ ["unicodeslot"]=0x0269, -- É©
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN LETTER SMALL CAPITAL I",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x026A, -- ɪ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER L WITH MIDDLE TILDE",
+ ["linebreak"]="al",
+ ["shcode"]=0x006C,
+ ["uccode"]=0x2C62,
+ ["unicodeslot"]=0x026B, -- É«
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER L WITH BELT",
+ ["linebreak"]="al",
+ ["shcode"]=0x006C,
+ ["unicodeslot"]=0x026C, -- ɬ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER L WITH RETROFLEX HOOK",
+ ["linebreak"]="al",
+ ["shcode"]=0x006C,
+ ["unicodeslot"]=0x026D, -- É­
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER LEZH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x026E, -- É®
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER TURNED M",
+ ["linebreak"]="al",
+ ["uccode"]=0x019C,
+ ["unicodeslot"]=0x026F, -- ɯ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER TURNED M WITH LONG LEG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0270, -- É°
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER M WITH HOOK",
+ ["linebreak"]="al",
+ ["shcode"]=0x006D,
+ ["unicodeslot"]=0x0271, -- ɱ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER N WITH LEFT HOOK",
+ ["linebreak"]="al",
+ ["shcode"]=0x006E,
+ ["uccode"]=0x019D,
+ ["unicodeslot"]=0x0272, -- ɲ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER N WITH RETROFLEX HOOK",
+ ["linebreak"]="al",
+ ["shcode"]=0x006E,
+ ["unicodeslot"]=0x0273, -- ɳ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN LETTER SMALL CAPITAL N",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0274, -- É´
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER BARRED O",
+ ["linebreak"]="al",
+ ["uccode"]=0x019F,
+ ["unicodeslot"]=0x0275, -- ɵ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN LETTER SMALL CAPITAL OE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0276, -- ɶ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER CLOSED OMEGA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0277, -- É·
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER PHI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0278, -- ɸ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER TURNED R",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0279, -- ɹ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER TURNED R WITH LONG LEG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x027A, -- ɺ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER TURNED R WITH HOOK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x027B, -- É»
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER R WITH LONG LEG",
+ ["linebreak"]="al",
+ ["shcode"]=0x0072,
+ ["unicodeslot"]=0x027C, -- ɼ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER R WITH TAIL",
+ ["linebreak"]="al",
+ ["shcode"]=0x0072,
+ ["uccode"]=0x2C64,
+ ["unicodeslot"]=0x027D, -- ɽ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER R WITH FISHHOOK",
+ ["linebreak"]="al",
+ ["shcode"]=0x0072,
+ ["unicodeslot"]=0x027E, -- ɾ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER REVERSED R WITH FISHHOOK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x027F, -- É¿
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN LETTER SMALL CAPITAL R",
+ ["linebreak"]="al",
+ ["uccode"]=0x01A6,
+ ["unicodeslot"]=0x0280, -- ʀ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN LETTER SMALL CAPITAL INVERTED R",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0281, -- Ê
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER S WITH HOOK",
+ ["linebreak"]="al",
+ ["shcode"]=0x0073,
+ ["unicodeslot"]=0x0282, -- Ê‚
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER ESH",
+ ["linebreak"]="al",
+ ["uccode"]=0x01A9,
+ ["unicodeslot"]=0x0283, -- ʃ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0284, -- Ê„
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER SQUAT REVERSED ESH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0285, -- Ê…
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER ESH WITH CURL",
+ ["linebreak"]="al",
+ ["shcode"]=0x0283,
+ ["unicodeslot"]=0x0286, -- ʆ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER TURNED T",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0287, -- ʇ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER T WITH RETROFLEX HOOK",
+ ["linebreak"]="al",
+ ["shcode"]=0x0074,
+ ["uccode"]=0x01AE,
+ ["unicodeslot"]=0x0288, -- ʈ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER U BAR",
+ ["linebreak"]="al",
+ ["uccode"]=0x0244,
+ ["unicodeslot"]=0x0289, -- ʉ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER UPSILON",
+ ["linebreak"]="al",
+ ["uccode"]=0x01B1,
+ ["unicodeslot"]=0x028A, -- ÊŠ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER V WITH HOOK",
+ ["linebreak"]="al",
+ ["shcode"]=0x0076,
+ ["uccode"]=0x01B2,
+ ["unicodeslot"]=0x028B, -- Ê‹
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER TURNED V",
+ ["linebreak"]="al",
+ ["uccode"]=0x0245,
+ ["unicodeslot"]=0x028C, -- ʌ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER TURNED W",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x028D, -- Ê
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER TURNED Y",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x028E, -- ÊŽ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN LETTER SMALL CAPITAL Y",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x028F, -- Ê
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER Z WITH RETROFLEX HOOK",
+ ["linebreak"]="al",
+ ["shcode"]=0x007A,
+ ["unicodeslot"]=0x0290, -- Ê
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER Z WITH CURL",
+ ["linebreak"]="al",
+ ["shcode"]=0x007A,
+ ["unicodeslot"]=0x0291, -- Ê‘
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER EZH",
+ ["linebreak"]="al",
+ ["uccode"]=0x01B7,
+ ["unicodeslot"]=0x0292, -- Ê’
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER EZH WITH CURL",
+ ["linebreak"]="al",
+ ["shcode"]=0x0292,
+ ["unicodeslot"]=0x0293, -- Ê“
+ },
+ {
+ ["category"]="lo",
+ ["description"]="LATIN LETTER GLOTTAL STOP",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0294, -- Ê”
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN LETTER PHARYNGEAL VOICED FRICATIVE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0295, -- Ê•
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN LETTER INVERTED GLOTTAL STOP",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0296, -- Ê–
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN LETTER STRETCHED C",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0297, -- Ê—
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN LETTER BILABIAL CLICK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0298, -- ʘ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN LETTER SMALL CAPITAL B",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0299, -- Ê™
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER CLOSED OPEN E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x029A, -- Êš
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN LETTER SMALL CAPITAL G WITH HOOK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x029B, -- Ê›
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN LETTER SMALL CAPITAL H",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x029C, -- ʜ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER J WITH CROSSED-TAIL",
+ ["linebreak"]="al",
+ ["shcode"]=0x006A,
+ ["unicodeslot"]=0x029D, -- Ê
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER TURNED K",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x029E, -- Êž
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN LETTER SMALL CAPITAL L",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x029F, -- ÊŸ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER Q WITH HOOK",
+ ["linebreak"]="al",
+ ["shcode"]=0x0071,
+ ["unicodeslot"]=0x02A0, -- Ê 
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN LETTER GLOTTAL STOP WITH STROKE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02A1, -- Ê¡
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02A2, -- ʢ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER DZ DIGRAPH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02A3, -- ʣ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER DEZH DIGRAPH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02A4, -- ʤ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER DZ DIGRAPH WITH CURL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02A5, -- ʥ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER TS DIGRAPH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02A6, -- ʦ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER TESH DIGRAPH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02A7, -- ʧ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER TC DIGRAPH WITH CURL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02A8, -- ʨ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER FENG DIGRAPH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02A9, -- Ê©
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER LS DIGRAPH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02AA, -- ʪ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER LZ DIGRAPH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02AB, -- Ê«
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN LETTER BILABIAL PERCUSSIVE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02AC, -- ʬ
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN LETTER BIDENTAL PERCUSSIVE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02AD, -- Ê­
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER TURNED H WITH FISHHOOK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02AE, -- Ê®
+ },
+ {
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02AF, -- ʯ
+ },
+ {
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL H",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0068 },
+ ["unicodeslot"]=0x02B0, -- Ê°
+ },
+ {
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL H WITH HOOK",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0266 },
+ ["unicodeslot"]=0x02B1, -- ʱ
+ },
+ {
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL J",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x006A },
+ ["unicodeslot"]=0x02B2, -- ʲ
+ },
+ {
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL R",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0072 },
+ ["unicodeslot"]=0x02B3, -- ʳ
+ },
+ {
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL TURNED R",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0279 },
+ ["unicodeslot"]=0x02B4, -- Ê´
+ },
+ {
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL TURNED R WITH HOOK",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x027B },
+ ["unicodeslot"]=0x02B5, -- ʵ
+ },
+ {
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL CAPITAL INVERTED R",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0281 },
+ ["unicodeslot"]=0x02B6, -- ʶ
+ },
+ {
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL W",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0077 },
+ ["unicodeslot"]=0x02B7, -- Ê·
+ },
+ {
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL Y",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0079 },
+ ["unicodeslot"]=0x02B8, -- ʸ
+ },
+ {
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER PRIME",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02B9, -- ʹ
+ },
+ {
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER DOUBLE PRIME",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02BA, -- ʺ
+ },
+ {
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER TURNED COMMA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02BB, -- Ê»
+ },
+ {
+ ["adobename"]="afii57929",
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER APOSTROPHE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02BC, -- ʼ
+ },
+ {
+ ["adobename"]="afii64937",
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER REVERSED COMMA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02BD, -- ʽ
+ },
+ {
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER RIGHT HALF RING",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02BE, -- ʾ
+ },
+ {
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER LEFT HALF RING",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02BF, -- Ê¿
+ },
+ {
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER GLOTTAL STOP",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02C0, -- ˀ
+ },
+ {
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER REVERSED GLOTTAL STOP",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02C1, -- Ë
+ },
+ {
+ ["category"]="sk",
+ ["description"]="MODIFIER LETTER LEFT ARROWHEAD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02C2, -- Ë‚
+ },
+ {
+ ["category"]="sk",
+ ["description"]="MODIFIER LETTER RIGHT ARROWHEAD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02C3, -- ˃
+ },
+ {
+ ["category"]="sk",
+ ["cjkwd"]="a",
+ ["description"]="MODIFIER LETTER UP ARROWHEAD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02C4, -- Ë„
+ },
+ {
+ ["category"]="sk",
+ ["description"]="MODIFIER LETTER DOWN ARROWHEAD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02C5, -- Ë…
+ },
+ {
+ ["adobename"]="circumflex",
+ ["category"]="lm",
+ ["contextname"]="textcircumflex",
+ ["description"]="MODIFIER LETTER CIRCUMFLEX ACCENT",
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x0020, 0x0302 }, -- added by hh
+ ["unicodeslot"]=0x02C6, -- ˆ
+ },
+ {
+ ["adobename"]="caron",
+ ["category"]="lm",
+ ["cjkwd"]="a",
+ ["contextname"]="textcaron",
+ ["description"]="CARON",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0020, 0x030C }, -- added by hh
+ ["unicodeslot"]=0x02C7, -- ˇ
+ },
+ {
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER VERTICAL LINE",
+ ["linebreak"]="bb",
+ ["unicodeslot"]=0x02C8, -- ˈ
+ },
+ {
+ ["category"]="lm",
+ ["cjkwd"]="a",
+ ["description"]="MODIFIER LETTER MACRON",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x02C9, -- ˉ
+ },
+ {
+ ["category"]="lm",
+ ["cjkwd"]="a",
+ ["description"]="MODIFIER LETTER ACUTE ACCENT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x02CA, -- ËŠ
+ },
+ {
+ ["category"]="lm",
+ ["cjkwd"]="a",
+ ["description"]="MODIFIER LETTER GRAVE ACCENT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x02CB, -- Ë‹
+ },
+ {
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER LOW VERTICAL LINE",
+ ["linebreak"]="bb",
+ ["unicodeslot"]=0x02CC, -- ˌ
+ },
+ {
+ ["category"]="lm",
+ ["cjkwd"]="a",
+ ["description"]="MODIFIER LETTER LOW MACRON",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x02CD, -- Ë
+ },
+ {
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER LOW GRAVE ACCENT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02CE, -- ËŽ
+ },
+ {
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER LOW ACUTE ACCENT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02CF, -- Ë
+ },
+ {
+ ["category"]="lm",
+ ["cjkwd"]="a",
+ ["description"]="MODIFIER LETTER TRIANGULAR COLON",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x02D0, -- Ë
+ },
+ {
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER HALF TRIANGULAR COLON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02D1, -- Ë‘
+ },
+ {
+ ["category"]="sk",
+ ["description"]="MODIFIER LETTER CENTRED RIGHT HALF RING",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02D2, -- Ë’
+ },
+ {
+ ["category"]="sk",
+ ["description"]="MODIFIER LETTER CENTRED LEFT HALF RING",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02D3, -- Ë“
+ },
+ {
+ ["category"]="sk",
+ ["description"]="MODIFIER LETTER UP TACK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02D4, -- Ë”
+ },
+ {
+ ["category"]="sk",
+ ["description"]="MODIFIER LETTER DOWN TACK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02D5, -- Ë•
+ },
+ {
+ ["category"]="sk",
+ ["description"]="MODIFIER LETTER PLUS SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02D6, -- Ë–
+ },
+ {
+ ["category"]="sk",
+ ["description"]="MODIFIER LETTER MINUS SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02D7, -- Ë—
+ },
+ {
+ ["adobename"]="breve",
+ ["category"]="sk",
+ ["cjkwd"]="a",
+ ["contextname"]="textbreve",
+ ["description"]="BREVE",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0020, 0x0306 },
+ ["unicodeslot"]=0x02D8, -- ˘
+ },
+ {
+ ["adobename"]="dotaccent",
+ ["category"]="sk",
+ ["cjkwd"]="a",
+ ["contextname"]="textdotaccent",
+ ["description"]="DOT ABOVE",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0020, 0x0307 },
+ ["unicodeslot"]=0x02D9, -- Ë™
+ },
+ {
+ ["adobename"]="ring",
+ ["category"]="sk",
+ ["cjkwd"]="a",
+ ["contextname"]="textring",
+ ["description"]="RING ABOVE",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0020, 0x030A },
+ ["unicodeslot"]=0x02DA, -- Ëš
+ },
+ {
+ ["adobename"]="ogonek",
+ ["category"]="sk",
+ ["cjkwd"]="a",
+ ["contextname"]="textogonek",
+ ["description"]="OGONEK",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0020, 0x0328 },
+ ["unicodeslot"]=0x02DB, -- Ë›
+ },
+ {
+ ["adobename"]="tilde",
+ ["category"]="sk",
+ ["contextname"]="texttilde",
+ ["description"]="SMALL TILDE",
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x0020, 0x0303 },
+ ["unicodeslot"]=0x02DC, -- ˜
+ },
+ {
+ ["adobename"]="hungarumlaut",
+ ["category"]="sk",
+ ["cjkwd"]="a",
+ ["contextname"]="texthungarumlaut",
+ ["description"]="DOUBLE ACUTE ACCENT",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0020, 0x030B },
+ ["unicodeslot"]=0x02DD, -- Ë
+ },
+ {
+ ["category"]="sk",
+ ["description"]="MODIFIER LETTER RHOTIC HOOK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02DE, -- Ëž
+ },
+ {
+ ["category"]="sk",
+ ["cjkwd"]="a",
+ ["description"]="MODIFIER LETTER CROSS ACCENT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02DF, -- ËŸ
+ },
+ {
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL GAMMA",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0263 },
+ ["unicodeslot"]=0x02E0, -- Ë 
+ },
+ {
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL L",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x006C },
+ ["unicodeslot"]=0x02E1, -- Ë¡
+ },
+ {
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL S",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0073 },
+ ["unicodeslot"]=0x02E2, -- ˢ
+ },
+ {
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL X",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0078 },
+ ["unicodeslot"]=0x02E3, -- ˣ
+ },
+ {
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL REVERSED GLOTTAL STOP",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0295 },
+ ["unicodeslot"]=0x02E4, -- ˤ
+ },
+ {
+ ["category"]="sk",
+ ["description"]="MODIFIER LETTER EXTRA-HIGH TONE BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02E5, -- ˥
+ },
+ {
+ ["category"]="sk",
+ ["description"]="MODIFIER LETTER HIGH TONE BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02E6, -- ˦
+ },
+ {
+ ["category"]="sk",
+ ["description"]="MODIFIER LETTER MID TONE BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02E7, -- ˧
+ },
+ {
+ ["category"]="sk",
+ ["description"]="MODIFIER LETTER LOW TONE BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02E8, -- ˨
+ },
+ {
+ ["category"]="sk",
+ ["description"]="MODIFIER LETTER EXTRA-LOW TONE BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02E9, -- Ë©
+ },
+ {
+ ["category"]="sk",
+ ["description"]="MODIFIER LETTER YIN DEPARTING TONE MARK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02EA, -- ˪
+ },
+ {
+ ["category"]="sk",
+ ["description"]="MODIFIER LETTER YANG DEPARTING TONE MARK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02EB, -- Ë«
+ },
+ {
+ ["category"]="sk",
+ ["description"]="MODIFIER LETTER VOICING",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02EC, -- ˬ
+ },
+ {
+ ["category"]="sk",
+ ["description"]="MODIFIER LETTER UNASPIRATED",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02ED, -- Ë­
+ },
+ {
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER DOUBLE APOSTROPHE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02EE, -- Ë®
+ },
+ {
+ ["category"]="sk",
+ ["description"]="MODIFIER LETTER LOW DOWN ARROWHEAD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02EF, -- ˯
+ },
+ {
+ ["category"]="sk",
+ ["description"]="MODIFIER LETTER LOW UP ARROWHEAD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02F0, -- Ë°
+ },
+ {
+ ["category"]="sk",
+ ["description"]="MODIFIER LETTER LOW LEFT ARROWHEAD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02F1, -- ˱
+ },
+ {
+ ["category"]="sk",
+ ["description"]="MODIFIER LETTER LOW RIGHT ARROWHEAD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02F2, -- ˲
+ },
+ {
+ ["category"]="sk",
+ ["description"]="MODIFIER LETTER LOW RING",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02F3, -- ˳
+ },
+ {
+ ["category"]="sk",
+ ["description"]="MODIFIER LETTER MIDDLE GRAVE ACCENT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02F4, -- Ë´
+ },
+ {
+ ["category"]="sk",
+ ["description"]="MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02F5, -- ˵
+ },
+ {
+ ["category"]="sk",
+ ["description"]="MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02F6, -- ˶
+ },
+ {
+ ["category"]="sk",
+ ["description"]="MODIFIER LETTER LOW TILDE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02F7, -- Ë·
+ },
+ {
+ ["category"]="sk",
+ ["description"]="MODIFIER LETTER RAISED COLON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02F8, -- ˸
+ },
+ {
+ ["category"]="sk",
+ ["description"]="MODIFIER LETTER BEGIN HIGH TONE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02F9, -- ˹
+ },
+ {
+ ["category"]="sk",
+ ["description"]="MODIFIER LETTER END HIGH TONE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02FA, -- ˺
+ },
+ {
+ ["category"]="sk",
+ ["description"]="MODIFIER LETTER BEGIN LOW TONE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02FB, -- Ë»
+ },
+ {
+ ["category"]="sk",
+ ["description"]="MODIFIER LETTER END LOW TONE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02FC, -- ˼
+ },
+ {
+ ["category"]="sk",
+ ["description"]="MODIFIER LETTER SHELF",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02FD, -- ˽
+ },
+ {
+ ["category"]="sk",
+ ["description"]="MODIFIER LETTER OPEN SHELF",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02FE, -- ˾
+ },
+ {
+ ["category"]="sk",
+ ["description"]="MODIFIER LETTER LOW LEFT ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x02FF, -- Ë¿
+ },
+ {
+ ["adobename"]="gravecomb",
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING GRAVE ACCENT",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0300, -- ̀
+ },
+ {
+ ["adobename"]="acutecomb",
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING ACUTE ACCENT",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0301, -- Ì
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING CIRCUMFLEX ACCENT",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0302, -- Ì‚
+ },
+ {
+ ["adobename"]="tildecomb",
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING TILDE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0303, -- ̃
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING MACRON",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0304, -- Ì„
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING OVERLINE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0305, -- Ì…
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING BREVE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0306, -- ̆
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING DOT ABOVE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0307, -- ̇
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING DIAERESIS",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0308, -- ̈
+ },
+ {
+ ["adobename"]="hookabovecomb",
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING HOOK ABOVE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0309, -- ̉
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING RING ABOVE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x030A, -- ÌŠ
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING DOUBLE ACUTE ACCENT",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x030B, -- Ì‹
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING CARON",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x030C, -- ̌
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING VERTICAL LINE ABOVE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x030D, -- Ì
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING DOUBLE VERTICAL LINE ABOVE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x030E, -- ÌŽ
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING DOUBLE GRAVE ACCENT",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x030F, -- Ì
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING CANDRABINDU",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0310, -- Ì
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING INVERTED BREVE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0311, -- Ì‘
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING TURNED COMMA ABOVE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0312, -- Ì’
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING COMMA ABOVE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0313, -- Ì“
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING REVERSED COMMA ABOVE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0314, -- Ì”
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING COMMA ABOVE RIGHT",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0315, -- Ì•
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING GRAVE ACCENT BELOW",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0316, -- Ì–
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING ACUTE ACCENT BELOW",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0317, -- Ì—
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING LEFT TACK BELOW",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0318, -- ̘
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING RIGHT TACK BELOW",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0319, -- Ì™
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING LEFT ANGLE ABOVE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x031A, -- Ìš
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING HORN",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x031B, -- Ì›
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING LEFT HALF RING BELOW",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x031C, -- ̜
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING UP TACK BELOW",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x031D, -- Ì
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING DOWN TACK BELOW",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x031E, -- Ìž
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING PLUS SIGN BELOW",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x031F, -- ÌŸ
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING MINUS SIGN BELOW",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0320, -- Ì 
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING PALATALIZED HOOK BELOW",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0321, -- Ì¡
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING RETROFLEX HOOK BELOW",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0322, -- ̢
+ },
+ {
+ ["adobename"]="dotbelowcomb",
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING DOT BELOW",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0323, -- ̣
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING DIAERESIS BELOW",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0324, -- ̤
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING RING BELOW",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0325, -- ̥
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING COMMA BELOW",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0326, -- ̦
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING CEDILLA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0327, -- ̧
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING OGONEK",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0328, -- ̨
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING VERTICAL LINE BELOW",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0329, -- Ì©
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING BRIDGE BELOW",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x032A, -- ̪
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING INVERTED DOUBLE ARCH BELOW",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x032B, -- Ì«
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING CARON BELOW",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x032C, -- ̬
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING CIRCUMFLEX ACCENT BELOW",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x032D, -- Ì­
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING BREVE BELOW",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x032E, -- Ì®
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING INVERTED BREVE BELOW",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x032F, -- ̯
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING TILDE BELOW",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0330, -- Ì°
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING MACRON BELOW",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0331, -- ̱
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING LOW LINE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0332, -- ̲
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING DOUBLE LOW LINE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0333, -- ̳
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING TILDE OVERLAY",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0334, -- Ì´
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING SHORT STROKE OVERLAY",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0335, -- ̵
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING LONG STROKE OVERLAY",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0336, -- ̶
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING SHORT SOLIDUS OVERLAY",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0337, -- Ì·
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING LONG SOLIDUS OVERLAY",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0338, -- ̸
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING RIGHT HALF RING BELOW",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0339, -- ̹
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING INVERTED BRIDGE BELOW",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x033A, -- ̺
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING SQUARE BELOW",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x033B, -- Ì»
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING SEAGULL BELOW",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x033C, -- ̼
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING X ABOVE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x033D, -- ̽
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING VERTICAL TILDE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x033E, -- ̾
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING DOUBLE OVERLINE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x033F, -- Ì¿
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING GRAVE TONE MARK",
+ ["linebreak"]="cm",
+ ["specials"]={ "char", 0x0300 },
+ ["unicodeslot"]=0x0340, -- ̀
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING ACUTE TONE MARK",
+ ["linebreak"]="cm",
+ ["specials"]={ "char", 0x0301 },
+ ["unicodeslot"]=0x0341, -- Í
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING GREEK PERISPOMENI",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0342, -- Í‚
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING GREEK KORONIS",
+ ["linebreak"]="cm",
+ ["specials"]={ "char", 0x0313 },
+ ["unicodeslot"]=0x0343, -- ̓
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING GREEK DIALYTIKA TONOS",
+ ["linebreak"]="cm",
+ ["specials"]={ "char", 0x0308, 0x0301 },
+ ["unicodeslot"]=0x0344, -- Í„
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING GREEK YPOGEGRAMMENI",
+ ["linebreak"]="cm",
+ ["uccode"]=0x0399,
+ ["unicodeslot"]=0x0345, -- Í…
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING BRIDGE ABOVE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0346, -- ͆
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING EQUALS SIGN BELOW",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0347, -- ͇
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING DOUBLE VERTICAL LINE BELOW",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0348, -- ͈
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING LEFT ANGLE BELOW",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0349, -- ͉
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING NOT TILDE ABOVE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x034A, -- ÍŠ
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING HOMOTHETIC ABOVE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x034B, -- Í‹
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING ALMOST EQUAL TO ABOVE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x034C, -- ͌
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING LEFT RIGHT ARROW BELOW",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x034D, -- Í
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING UPWARDS ARROW BELOW",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x034E, -- ÍŽ
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING GRAPHEME JOINER",
+ ["linebreak"]="gl",
+ ["unicodeslot"]=0x034F, -- Í
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING RIGHT ARROWHEAD ABOVE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0350, -- Í
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING LEFT HALF RING ABOVE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0351, -- Í‘
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING FERMATA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0352, -- Í’
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING X BELOW",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0353, -- Í“
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING LEFT ARROWHEAD BELOW",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0354, -- Í”
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING RIGHT ARROWHEAD BELOW",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0355, -- Í•
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0356, -- Í–
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING RIGHT HALF RING ABOVE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0357, -- Í—
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING DOT ABOVE RIGHT",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0358, -- ͘
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING ASTERISK BELOW",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0359, -- Í™
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING DOUBLE RING BELOW",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x035A, -- Íš
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING ZIGZAG ABOVE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x035B, -- Í›
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING DOUBLE BREVE BELOW",
+ ["linebreak"]="gl",
+ ["unicodeslot"]=0x035C, -- ͜
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING DOUBLE BREVE",
+ ["linebreak"]="gl",
+ ["unicodeslot"]=0x035D, -- Í
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING DOUBLE MACRON",
+ ["linebreak"]="gl",
+ ["unicodeslot"]=0x035E, -- Íž
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING DOUBLE MACRON BELOW",
+ ["linebreak"]="gl",
+ ["unicodeslot"]=0x035F, -- ÍŸ
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING DOUBLE TILDE",
+ ["linebreak"]="gl",
+ ["unicodeslot"]=0x0360, -- Í 
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING DOUBLE INVERTED BREVE",
+ ["linebreak"]="gl",
+ ["unicodeslot"]=0x0361, -- Í¡
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING DOUBLE RIGHTWARDS ARROW BELOW",
+ ["linebreak"]="gl",
+ ["unicodeslot"]=0x0362, -- ͢
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING LATIN SMALL LETTER A",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0363, -- ͣ
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING LATIN SMALL LETTER E",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0364, -- ͤ
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING LATIN SMALL LETTER I",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0365, -- ͥ
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING LATIN SMALL LETTER O",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0366, -- ͦ
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING LATIN SMALL LETTER U",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0367, -- ͧ
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING LATIN SMALL LETTER C",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0368, -- ͨ
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING LATIN SMALL LETTER D",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0369, -- Í©
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING LATIN SMALL LETTER H",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x036A, -- ͪ
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING LATIN SMALL LETTER M",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x036B, -- Í«
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING LATIN SMALL LETTER R",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x036C, -- ͬ
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING LATIN SMALL LETTER T",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x036D, -- Í­
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING LATIN SMALL LETTER V",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x036E, -- Í®
+ },
+ {
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="COMBINING LATIN SMALL LETTER X",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x036F, -- ͯ
+ },
+ [0x0374]={
+ ["category"]="sk",
+ ["description"]="GREEK NUMERAL SIGN",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x02B9 },
+ ["unicodeslot"]=0x0374, -- Í´
+ },
+ [0x0375]={
+ ["category"]="sk",
+ ["description"]="GREEK LOWER NUMERAL SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0375, -- ͵
+ },
+ [0x037A]={
+ ["category"]="lm",
+ ["description"]="GREEK YPOGEGRAMMENI",
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x0020, 0x0345 },
+ ["unicodeslot"]=0x037A, -- ͺ
+ },
+ [0x037B]={
+ ["category"]="ll",
+ ["description"]="GREEK SMALL REVERSED LUNATE SIGMA SYMBOL",
+ ["linebreak"]="al",
+ ["uccode"]=0x03FD,
+ ["unicodeslot"]=0x037B, -- Í»
+ },
+ [0x037C]={
+ ["category"]="ll",
+ ["description"]="GREEK SMALL DOTTED LUNATE SIGMA SYMBOL",
+ ["linebreak"]="al",
+ ["uccode"]=0x03FE,
+ ["unicodeslot"]=0x037C, -- ͼ
+ },
+ [0x037D]={
+ ["category"]="ll",
+ ["description"]="GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL",
+ ["linebreak"]="al",
+ ["uccode"]=0x03FF,
+ ["unicodeslot"]=0x037D, -- ͽ
+ },
+ [0x037E]={
+ ["category"]="po",
+ ["description"]="GREEK QUESTION MARK",
+ ["linebreak"]="is",
+ ["specials"]={ "char", 0x003B },
+ ["unicodeslot"]=0x037E, -- ;
+ },
+ [0x0384]={
+ ["adobename"]="tonos",
+ ["category"]="sk",
+ ["contextname"]="greektonos",
+ ["description"]="GREEK TONOS",
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x0020, 0x0301 },
+ ["unicodeslot"]=0x0384, -- ΄
+ },
+ [0x0385]={
+ ["adobename"]="dieresistonos",
+ ["category"]="sk",
+ ["contextname"]="greekdialytikatonos",
+ ["description"]="GREEK DIALYTIKA TONOS",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x00A8, 0x0301 },
+ ["unicodeslot"]=0x0385, -- Î…
+ },
+ [0x0386]={
+ ["adobename"]="Alphatonos",
+ ["category"]="lu",
+ ["contextname"]="greekAlphatonos",
+ ["description"]="GREEK CAPITAL LETTER ALPHA WITH TONOS",
+ ["lccode"]=0x03AC,
+ ["linebreak"]="al",
+ ["shcode"]=0x0391,
+ ["specials"]={ "char", 0x0391, 0x0301 },
+ ["unicodeslot"]=0x0386, -- Ά
+ },
+ [0x0387]={
+ ["adobename"]="anoteleia",
+ ["category"]="po",
+ ["description"]="GREEK ANO TELEIA",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x00B7 },
+ ["unicodeslot"]=0x0387, -- ·
+ },
+ [0x0388]={
+ ["adobename"]="Epsilontonos",
+ ["category"]="lu",
+ ["contextname"]="greekEpsilontonos",
+ ["description"]="GREEK CAPITAL LETTER EPSILON WITH TONOS",
+ ["lccode"]=0x03AD,
+ ["linebreak"]="al",
+ ["shcode"]=0x0395,
+ ["specials"]={ "char", 0x0395, 0x0301 },
+ ["unicodeslot"]=0x0388, -- Έ
+ },
+ [0x0389]={
+ ["adobename"]="Etatonos",
+ ["category"]="lu",
+ ["contextname"]="greekEtatonos",
+ ["description"]="GREEK CAPITAL LETTER ETA WITH TONOS",
+ ["lccode"]=0x03AE,
+ ["linebreak"]="al",
+ ["shcode"]=0x0397,
+ ["specials"]={ "char", 0x0397, 0x0301 },
+ ["unicodeslot"]=0x0389, -- Ή
+ },
+ [0x038A]={
+ ["adobename"]="Iotatonos",
+ ["category"]="lu",
+ ["contextname"]="greekIotatonos",
+ ["description"]="GREEK CAPITAL LETTER IOTA WITH TONOS",
+ ["lccode"]=0x03AF,
+ ["linebreak"]="al",
+ ["shcode"]=0x0399,
+ ["specials"]={ "char", 0x0399, 0x0301 },
+ ["unicodeslot"]=0x038A, -- Ί
+ },
+ [0x038C]={
+ ["adobename"]="Omicrontonos",
+ ["category"]="lu",
+ ["contextname"]="greekOmicrontonos",
+ ["description"]="GREEK CAPITAL LETTER OMICRON WITH TONOS",
+ ["lccode"]=0x03CC,
+ ["linebreak"]="al",
+ ["shcode"]=0x039F,
+ ["specials"]={ "char", 0x039F, 0x0301 },
+ ["unicodeslot"]=0x038C, -- Ό
+ },
+ [0x038E]={
+ ["adobename"]="Upsilontonos",
+ ["category"]="lu",
+ ["contextname"]="greekUpsilontonos",
+ ["description"]="GREEK CAPITAL LETTER UPSILON WITH TONOS",
+ ["lccode"]=0x03CD,
+ ["linebreak"]="al",
+ ["shcode"]=0x03A5,
+ ["specials"]={ "char", 0x03A5, 0x0301 },
+ ["unicodeslot"]=0x038E, -- ÎŽ
+ },
+ [0x038F]={
+ ["adobename"]="Omegatonos",
+ ["category"]="lu",
+ ["contextname"]="greekOmegatonos",
+ ["description"]="GREEK CAPITAL LETTER OMEGA WITH TONOS",
+ ["lccode"]=0x03CE,
+ ["linebreak"]="al",
+ ["shcode"]=0x03A9,
+ ["specials"]={ "char", 0x03A9, 0x0301 },
+ ["unicodeslot"]=0x038F, -- Î
+ },
+ [0x0390]={
+ ["adobename"]="iotadieresistonos",
+ ["category"]="ll",
+ ["contextname"]="greekiotadialytikatonos",
+ ["description"]="GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B9,
+ ["specials"]={ "char", 0x03CA, 0x0301 },
+ ["unicodeslot"]=0x0390, -- Î
+ },
+ [0x0391]={
+ ["adobename"]="Alpha",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="greekAlpha",
+ ["description"]="GREEK CAPITAL LETTER ALPHA",
+ ["lccode"]=0x03B1,
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["mathname"]="Alpha",
+ ["unicodeslot"]=0x0391, -- Α
+ },
+ [0x0392]={
+ ["adobename"]="Beta",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="greekBeta",
+ ["description"]="GREEK CAPITAL LETTER BETA",
+ ["lccode"]=0x03B2,
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["mathname"]="Beta",
+ ["unicodeslot"]=0x0392, -- Î’
+ },
+ [0x0393]={
+ ["adobename"]="Gamma",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="greekGamma",
+ ["description"]="GREEK CAPITAL LETTER GAMMA",
+ ["lccode"]=0x03B3,
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["mathname"]="Gamma",
+ ["unicodeslot"]=0x0393, -- Γ
+ },
+ [0x0394]={
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="greekDelta",
+ ["description"]="GREEK CAPITAL LETTER DELTA",
+ ["lccode"]=0x03B4,
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["mathname"]="Delta",
+ ["unicodeslot"]=0x0394, -- Δ
+ },
+ [0x0395]={
+ ["adobename"]="Epsilon",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="greekEpsilon",
+ ["description"]="GREEK CAPITAL LETTER EPSILON",
+ ["lccode"]=0x03B5,
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["mathname"]="Epsilon",
+ ["unicodeslot"]=0x0395, -- Ε
+ },
+ [0x0396]={
+ ["adobename"]="Zeta",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="greekZeta",
+ ["description"]="GREEK CAPITAL LETTER ZETA",
+ ["lccode"]=0x03B6,
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["mathname"]="Zeta",
+ ["unicodeslot"]=0x0396, -- Ζ
+ },
+ [0x0397]={
+ ["adobename"]="Eta",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="greekEta",
+ ["description"]="GREEK CAPITAL LETTER ETA",
+ ["lccode"]=0x03B7,
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["mathname"]="Eta",
+ ["unicodeslot"]=0x0397, -- Η
+ },
+ [0x0398]={
+ ["adobename"]="Theta",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="greekTheta",
+ ["description"]="GREEK CAPITAL LETTER THETA",
+ ["lccode"]=0x03B8,
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["mathname"]="Theta",
+ ["unicodeslot"]=0x0398, -- Θ
+ },
+ [0x0399]={
+ ["adobename"]="Iota",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="greekIota",
+ ["description"]="GREEK CAPITAL LETTER IOTA",
+ ["lccode"]=0x03B9,
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["mathname"]="Iota",
+ ["unicodeslot"]=0x0399, -- Ι
+ },
+ [0x039A]={
+ ["adobename"]="Kappa",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="greekKappa",
+ ["description"]="GREEK CAPITAL LETTER KAPPA",
+ ["lccode"]=0x03BA,
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["mathname"]="Kappa",
+ ["unicodeslot"]=0x039A, -- Κ
+ },
+ [0x039B]={
+ ["adobename"]="Lambda",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="greekLambda",
+ ["description"]="GREEK CAPITAL LETTER LAMDA",
+ ["lccode"]=0x03BB,
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["mathname"]="Lambda",
+ ["unicodeslot"]=0x039B, -- Λ
+ },
+ [0x039C]={
+ ["adobename"]="Mu",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="greekMu",
+ ["description"]="GREEK CAPITAL LETTER MU",
+ ["lccode"]=0x03BC,
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["mathname"]="Mu",
+ ["unicodeslot"]=0x039C, -- Μ
+ },
+ [0x039D]={
+ ["adobename"]="Nu",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="greekNu",
+ ["description"]="GREEK CAPITAL LETTER NU",
+ ["lccode"]=0x03BD,
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["mathname"]="Nu",
+ ["unicodeslot"]=0x039D, -- Î
+ },
+ [0x039E]={
+ ["adobename"]="Xi",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="greekXi",
+ ["description"]="GREEK CAPITAL LETTER XI",
+ ["lccode"]=0x03BE,
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["mathname"]="Xi",
+ ["unicodeslot"]=0x039E, -- Ξ
+ },
+ [0x039F]={
+ ["adobename"]="Omicron",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="greekOmicron",
+ ["description"]="GREEK CAPITAL LETTER OMICRON",
+ ["lccode"]=0x03BF,
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["mathname"]="Omicron",
+ ["unicodeslot"]=0x039F, -- Ο
+ },
+ [0x03A0]={
+ ["adobename"]="Pi",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="greekPi",
+ ["description"]="GREEK CAPITAL LETTER PI",
+ ["lccode"]=0x03C0,
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["mathname"]="Pi",
+ ["unicodeslot"]=0x03A0, -- Π
+ },
+ [0x03A1]={
+ ["adobename"]="Rho",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="greekRho",
+ ["description"]="GREEK CAPITAL LETTER RHO",
+ ["lccode"]=0x03C1,
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["mathname"]="Rho",
+ ["unicodeslot"]=0x03A1, -- Ρ
+ },
+ [0x03A3]={
+ ["adobename"]="Sigma",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="greekSigma",
+ ["description"]="GREEK CAPITAL LETTER SIGMA",
+ ["lccode"]=0x03C3,
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["mathname"]="Sigma",
+ ["unicodeslot"]=0x03A3, -- Σ
+ },
+ [0x03A4]={
+ ["adobename"]="Tau",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="greekTau",
+ ["description"]="GREEK CAPITAL LETTER TAU",
+ ["lccode"]=0x03C4,
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["mathname"]="Tau",
+ ["unicodeslot"]=0x03A4, -- Τ
+ },
+ [0x03A5]={
+ ["adobename"]="Upsilon",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="greekUpsilon",
+ ["description"]="GREEK CAPITAL LETTER UPSILON",
+ ["lccode"]=0x03C5,
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["mathname"]="Upsilon",
+ ["unicodeslot"]=0x03A5, -- Υ
+ },
+ [0x03A6]={
+ ["adobename"]="Phi",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="greekPhi",
+ ["description"]="GREEK CAPITAL LETTER PHI",
+ ["lccode"]=0x03C6,
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["mathname"]="Phi",
+ ["unicodeslot"]=0x03A6, -- Φ
+ },
+ [0x03A7]={
+ ["adobename"]="Chi",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="greekChi",
+ ["description"]="GREEK CAPITAL LETTER CHI",
+ ["lccode"]=0x03C7,
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["mathname"]="Chi",
+ ["unicodeslot"]=0x03A7, -- Χ
+ },
+ [0x03A8]={
+ ["adobename"]="Psi",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="greekPsi",
+ ["description"]="GREEK CAPITAL LETTER PSI",
+ ["lccode"]=0x03C8,
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["mathname"]="Psi",
+ ["unicodeslot"]=0x03A8, -- Ψ
+ },
+ [0x03A9]={
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="greekOmega",
+ ["description"]="GREEK CAPITAL LETTER OMEGA",
+ ["lccode"]=0x03C9,
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["mathname"]="Omega",
+ ["unicodeslot"]=0x03A9, -- Ω
+ },
+ [0x03AA]={
+ ["adobename"]="Iotadieresis",
+ ["category"]="lu",
+ ["contextname"]="greekIotadialytika",
+ ["description"]="GREEK CAPITAL LETTER IOTA WITH DIALYTIKA",
+ ["lccode"]=0x03CA,
+ ["linebreak"]="al",
+ ["shcode"]=0x0399,
+ ["specials"]={ "char", 0x0399, 0x0308 },
+ ["unicodeslot"]=0x03AA, -- Ϊ
+ },
+ [0x03AB]={
+ ["adobename"]="Upsilondieresis",
+ ["category"]="lu",
+ ["contextname"]="greekUpsilondialytika",
+ ["description"]="GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA",
+ ["lccode"]=0x03CB,
+ ["linebreak"]="al",
+ ["shcode"]=0x03A5,
+ ["specials"]={ "char", 0x03A5, 0x0308 },
+ ["unicodeslot"]=0x03AB, -- Ϋ
+ },
+ [0x03AC]={
+ ["adobename"]="alphatonos",
+ ["category"]="ll",
+ ["contextname"]="greekalphatonos",
+ ["description"]="GREEK SMALL LETTER ALPHA WITH TONOS",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B1,
+ ["specials"]={ "char", 0x03B1, 0x0301 },
+ ["uccode"]=0x0386,
+ ["unicodeslot"]=0x03AC, -- ά
+ },
+ [0x03AD]={
+ ["adobename"]="epsilontonos",
+ ["category"]="ll",
+ ["contextname"]="greekepsilontonos",
+ ["description"]="GREEK SMALL LETTER EPSILON WITH TONOS",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B5,
+ ["specials"]={ "char", 0x03B5, 0x0301 },
+ ["uccode"]=0x0388,
+ ["unicodeslot"]=0x03AD, -- έ
+ },
+ [0x03AE]={
+ ["adobename"]="etatonos",
+ ["category"]="ll",
+ ["contextname"]="greeketatonos",
+ ["description"]="GREEK SMALL LETTER ETA WITH TONOS",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B7,
+ ["specials"]={ "char", 0x03B7, 0x0301 },
+ ["uccode"]=0x0389,
+ ["unicodeslot"]=0x03AE, -- ή
+ },
+ [0x03AF]={
+ ["adobename"]="iotatonos",
+ ["category"]="ll",
+ ["contextname"]="greekiotatonos",
+ ["description"]="GREEK SMALL LETTER IOTA WITH TONOS",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B9,
+ ["specials"]={ "char", 0x03B9, 0x0301 },
+ ["uccode"]=0x038A,
+ ["unicodeslot"]=0x03AF, -- ί
+ },
+ [0x03B0]={
+ ["adobename"]="upsilondieresistonos",
+ ["category"]="ll",
+ ["contextname"]="greekupsilondialytikatonos",
+ ["description"]="GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS",
+ ["linebreak"]="al",
+ ["shcode"]=0x03C5,
+ ["specials"]={ "char", 0x03CB, 0x0301 },
+ ["unicodeslot"]=0x03B0, -- ΰ
+ },
+ [0x03B1]={
+ ["adobename"]="alpha",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="greekalpha",
+ ["description"]="GREEK SMALL LETTER ALPHA",
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["mathname"]="alpha",
+ ["uccode"]=0x0391,
+ ["unicodeslot"]=0x03B1, -- α
+ },
+ [0x03B2]={
+ ["adobename"]="beta",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="greekbeta",
+ ["description"]="GREEK SMALL LETTER BETA",
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["mathname"]="beta",
+ ["uccode"]=0x0392,
+ ["unicodeslot"]=0x03B2, -- β
+ },
+ [0x03B3]={
+ ["adobename"]="gamma",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="greekgamma",
+ ["description"]="GREEK SMALL LETTER GAMMA",
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["mathname"]="gamma",
+ ["uccode"]=0x0393,
+ ["unicodeslot"]=0x03B3, -- γ
+ },
+ [0x03B4]={
+ ["adobename"]="delta",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="greekdelta",
+ ["description"]="GREEK SMALL LETTER DELTA",
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["mathname"]="delta",
+ ["uccode"]=0x0394,
+ ["unicodeslot"]=0x03B4, -- δ
+ },
+ [0x03B5]={
+ ["adobename"]="epsilon",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="greekepsilon",
+ ["description"]="GREEK SMALL LETTER EPSILON",
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["mathname"]="epsilon",
+ ["uccode"]=0x0395,
+ ["unicodeslot"]=0x03B5, -- ε
+ },
+ [0x03B6]={
+ ["adobename"]="zeta",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="greekzeta",
+ ["description"]="GREEK SMALL LETTER ZETA",
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["mathname"]="zeta",
+ ["uccode"]=0x0396,
+ ["unicodeslot"]=0x03B6, -- ζ
+ },
+ [0x03B7]={
+ ["adobename"]="eta",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="greeketa",
+ ["description"]="GREEK SMALL LETTER ETA",
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["mathname"]="eta",
+ ["uccode"]=0x0397,
+ ["unicodeslot"]=0x03B7, -- η
+ },
+ [0x03B8]={
+ ["adobename"]="theta",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="greektheta",
+ ["description"]="GREEK SMALL LETTER THETA",
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["mathname"]="theta",
+ ["uccode"]=0x0398,
+ ["unicodeslot"]=0x03B8, -- θ
+ },
+ [0x03B9]={
+ ["adobename"]="iota",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="greekiota",
+ ["description"]="GREEK SMALL LETTER IOTA",
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["mathname"]="iota",
+ ["uccode"]=0x0399,
+ ["unicodeslot"]=0x03B9, -- ι
+ },
+ [0x03BA]={
+ ["adobename"]="kappa",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="greekkappa",
+ ["description"]="GREEK SMALL LETTER KAPPA",
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["mathname"]="kappa",
+ ["uccode"]=0x039A,
+ ["unicodeslot"]=0x03BA, -- κ
+ },
+ [0x03BB]={
+ ["adobename"]="lambda",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="greeklambda",
+ ["description"]="GREEK SMALL LETTER LAMDA",
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["mathname"]="lambda",
+ ["uccode"]=0x039B,
+ ["unicodeslot"]=0x03BB, -- λ
+ },
+ [0x03BC]={
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="greekmu",
+ ["description"]="GREEK SMALL LETTER MU",
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["mathname"]="mu",
+ ["uccode"]=0x039C,
+ ["unicodeslot"]=0x03BC, -- μ
+ },
+ [0x03BD]={
+ ["adobename"]="nu",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="greeknu",
+ ["description"]="GREEK SMALL LETTER NU",
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["mathname"]="nu",
+ ["uccode"]=0x039D,
+ ["unicodeslot"]=0x03BD, -- ν
+ },
+ [0x03BE]={
+ ["adobename"]="xi",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="greekxi",
+ ["description"]="GREEK SMALL LETTER XI",
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["mathname"]="xi",
+ ["uccode"]=0x039E,
+ ["unicodeslot"]=0x03BE, -- ξ
+ },
+ [0x03BF]={
+ ["adobename"]="omicron",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="greekomicron",
+ ["description"]="GREEK SMALL LETTER OMICRON",
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["mathname"]="omicron",
+ ["uccode"]=0x039F,
+ ["unicodeslot"]=0x03BF, -- ο
+ },
+ [0x03C0]={
+ ["adobename"]="pi",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="greekpi",
+ ["description"]="GREEK SMALL LETTER PI",
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["mathname"]="pi",
+ ["uccode"]=0x03A0,
+ ["unicodeslot"]=0x03C0, -- π
+ },
+ [0x03C1]={
+ ["adobename"]="rho",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="greekrho",
+ ["description"]="GREEK SMALL LETTER RHO",
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["mathname"]="rho",
+ ["uccode"]=0x03A1,
+ ["unicodeslot"]=0x03C1, -- Ï
+ },
+ [0x03C2]={
+ ["adobename"]="sigma1",
+ ["category"]="ll",
+ ["contextname"]="greekfinalsigma",
+ ["description"]="GREEK SMALL LETTER FINAL SIGMA",
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["mathname"]="varsigma",
+ ["uccode"]=0x03A3,
+ ["unicodeslot"]=0x03C2, -- Ï‚
+ },
+ [0x03C3]={
+ ["adobename"]="sigma",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="greeksigma",
+ ["description"]="GREEK SMALL LETTER SIGMA",
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["mathname"]="sigma",
+ ["uccode"]=0x03A3,
+ ["unicodeslot"]=0x03C3, -- σ
+ },
+ [0x03C4]={
+ ["adobename"]="tau",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="greektau",
+ ["description"]="GREEK SMALL LETTER TAU",
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["mathname"]="tau",
+ ["uccode"]=0x03A4,
+ ["unicodeslot"]=0x03C4, -- Ï„
+ },
+ [0x03C5]={
+ ["adobename"]="upsilon",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="greekupsilon",
+ ["description"]="GREEK SMALL LETTER UPSILON",
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["mathname"]="upsilon",
+ ["uccode"]=0x03A5,
+ ["unicodeslot"]=0x03C5, -- Ï…
+ },
+ [0x03C6]={
+ ["adobename"]="phi",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="greekphi",
+ ["description"]="GREEK SMALL LETTER PHI",
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["mathname"]="varphi",
+ ["uccode"]=0x03A6,
+ ["unicodeslot"]=0x03C6, -- φ
+ },
+ [0x03C7]={
+ ["adobename"]="chi",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="greekchi",
+ ["description"]="GREEK SMALL LETTER CHI",
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["mathname"]="chi",
+ ["uccode"]=0x03A7,
+ ["unicodeslot"]=0x03C7, -- χ
+ },
+ [0x03C8]={
+ ["adobename"]="psi",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="greekpsi",
+ ["description"]="GREEK SMALL LETTER PSI",
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["mathname"]="psi",
+ ["uccode"]=0x03A8,
+ ["unicodeslot"]=0x03C8, -- ψ
+ },
+ [0x03C9]={
+ ["adobename"]="omega",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="greekomega",
+ ["description"]="GREEK SMALL LETTER OMEGA",
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["mathname"]="omega",
+ ["uccode"]=0x03A9,
+ ["unicodeslot"]=0x03C9, -- ω
+ },
+ [0x03CA]={
+ ["adobename"]="iotadieresis",
+ ["category"]="ll",
+ ["contextname"]="greekiotadialytika",
+ ["description"]="GREEK SMALL LETTER IOTA WITH DIALYTIKA",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B9,
+ ["specials"]={ "char", 0x03B9, 0x0308 },
+ ["uccode"]=0x03AA,
+ ["unicodeslot"]=0x03CA, -- ÏŠ
+ },
+ [0x03CB]={
+ ["adobename"]="upsilondieresis",
+ ["category"]="ll",
+ ["contextname"]="greekupsilondiaeresis",
+ ["description"]="GREEK SMALL LETTER UPSILON WITH DIALYTIKA",
+ ["linebreak"]="al",
+ ["shcode"]=0x03C5,
+ ["specials"]={ "char", 0x03C5, 0x0308 },
+ ["uccode"]=0x03AB,
+ ["unicodeslot"]=0x03CB, -- Ï‹
+ },
+ [0x03CC]={
+ ["adobename"]="omicrontonos",
+ ["category"]="ll",
+ ["contextname"]="greekomicrontonos",
+ ["description"]="GREEK SMALL LETTER OMICRON WITH TONOS",
+ ["linebreak"]="al",
+ ["shcode"]=0x03BF,
+ ["specials"]={ "char", 0x03BF, 0x0301 },
+ ["uccode"]=0x038C,
+ ["unicodeslot"]=0x03CC, -- ό
+ },
+ [0x03CD]={
+ ["adobename"]="upsilontonos",
+ ["category"]="ll",
+ ["contextname"]="greekupsilontonos",
+ ["description"]="GREEK SMALL LETTER UPSILON WITH TONOS",
+ ["linebreak"]="al",
+ ["shcode"]=0x03C5,
+ ["specials"]={ "char", 0x03C5, 0x0301 },
+ ["uccode"]=0x038E,
+ ["unicodeslot"]=0x03CD, -- Ï
+ },
+ [0x03CE]={
+ ["adobename"]="omegatonos",
+ ["category"]="ll",
+ ["contextname"]="greekomegatonos",
+ ["description"]="GREEK SMALL LETTER OMEGA WITH TONOS",
+ ["linebreak"]="al",
+ ["shcode"]=0x03C9,
+ ["specials"]={ "char", 0x03C9, 0x0301 },
+ ["uccode"]=0x038F,
+ ["unicodeslot"]=0x03CE, -- ÏŽ
+ },
+ [0x03D0]={
+ ["category"]="ll",
+ ["description"]="GREEK BETA SYMBOL",
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x03B2 },
+ ["uccode"]=0x0392,
+ ["unicodeslot"]=0x03D0, -- Ï
+ },
+ [0x03D1]={
+ ["adobename"]="theta1",
+ ["category"]="ll",
+ ["contextname"]="greekthetaalt",
+ ["description"]="GREEK THETA SYMBOL",
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x03B8 },
+ ["mathclass"]="variable",
+ ["mathname"]="vartheta",
+ ["uccode"]=0x0398,
+ ["unicodeslot"]=0x03D1, -- Ï‘
+ },
+ [0x03D2]={
+ ["adobename"]="Upsilon1",
+ ["category"]="lu",
+ ["description"]="GREEK UPSILON WITH HOOK SYMBOL",
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x03A5 },
+ ["unicodeslot"]=0x03D2, -- Ï’
+ },
+ [0x03D3]={
+ ["category"]="lu",
+ ["description"]="GREEK UPSILON WITH ACUTE AND HOOK SYMBOL",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x03D2, 0x0301 },
+ ["unicodeslot"]=0x03D3, -- Ï“
+ },
+ [0x03D4]={
+ ["category"]="lu",
+ ["description"]="GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x03D2, 0x0308 },
+ ["unicodeslot"]=0x03D4, -- Ï”
+ },
+ [0x03D5]={
+ ["adobename"]="phi1",
+ ["category"]="ll",
+ ["contextname"]="greekphialt",
+ ["description"]="GREEK PHI SYMBOL",
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["mathname"]="phi",
+ ["specials"]={ "compat", 0x03C6 },
+ ["uccode"]=0x03A6,
+ ["unicodeslot"]=0x03D5, -- Ï•
+ },
+ [0x03D6]={
+ ["adobename"]="omega1",
+ ["category"]="ll",
+ ["contextname"]="greekpialt",
+ ["description"]="GREEK PI SYMBOL",
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x03C0 },
+ ["mathclass"]="variable",
+ ["mathname"]="varpi",
+ ["uccode"]=0x03A0,
+ ["unicodeslot"]=0x03D6, -- Ï–
+ },
+ [0x03D7]={
+ ["category"]="ll",
+ ["description"]="GREEK KAI SYMBOL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x03D7, -- Ï—
+ },
+ [0x03D8]={
+ ["category"]="lu",
+ ["description"]="GREEK LETTER ARCHAIC KOPPA",
+ ["lccode"]=0x03D9,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x03D8, -- Ϙ
+ },
+ [0x03D9]={
+ ["category"]="ll",
+ ["contextname"]="greekkoppa",
+ ["description"]="GREEK SMALL LETTER ARCHAIC KOPPA",
+ ["linebreak"]="al",
+ ["uccode"]=0x03D8,
+ ["unicodeslot"]=0x03D9, -- Ï™
+ },
+ [0x03DA]={
+ ["category"]="lu",
+ ["description"]="GREEK LETTER STIGMA",
+ ["lccode"]=0x03DB,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x03DA, -- Ïš
+ },
+ [0x03DB]={
+ ["category"]="ll",
+ ["contextname"]="greekstigma",
+ ["description"]="GREEK SMALL LETTER STIGMA",
+ ["linebreak"]="al",
+ ["uccode"]=0x03DA,
+ ["unicodeslot"]=0x03DB, -- Ï›
+ },
+ [0x03DC]={
+ ["category"]="lu",
+ ["description"]="GREEK LETTER DIGAMMA",
+ ["lccode"]=0x03DD,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x03DC, -- Ϝ
+ },
+ [0x03DD]={
+ ["category"]="ll",
+ ["contextname"]="greekdigamma",
+ ["description"]="GREEK SMALL LETTER DIGAMMA",
+ ["linebreak"]="al",
+ ["uccode"]=0x03DC,
+ ["unicodeslot"]=0x03DD, -- Ï
+ },
+ [0x03DE]={
+ ["category"]="lu",
+ ["description"]="GREEK LETTER KOPPA",
+ ["lccode"]=0x03DF,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x03DE, -- Ïž
+ },
+ [0x03DF]={
+ ["category"]="ll",
+ ["contextname"]="greeknumkoppa",
+ ["description"]="GREEK SMALL LETTER KOPPA",
+ ["linebreak"]="al",
+ ["uccode"]=0x03DE,
+ ["unicodeslot"]=0x03DF, -- ÏŸ
+ },
+ [0x03E0]={
+ ["category"]="lu",
+ ["description"]="GREEK LETTER SAMPI",
+ ["lccode"]=0x03E1,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x03E0, -- Ï 
+ },
+ [0x03E1]={
+ ["category"]="ll",
+ ["contextname"]="greeksampi",
+ ["description"]="GREEK SMALL LETTER SAMPI",
+ ["linebreak"]="al",
+ ["uccode"]=0x03E0,
+ ["unicodeslot"]=0x03E1, -- Ï¡
+ },
+ [0x03E2]={
+ ["category"]="lu",
+ ["description"]="COPTIC CAPITAL LETTER SHEI",
+ ["lccode"]=0x03E3,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x03E2, -- Ϣ
+ },
+ [0x03E3]={
+ ["category"]="ll",
+ ["description"]="COPTIC SMALL LETTER SHEI",
+ ["linebreak"]="al",
+ ["uccode"]=0x03E2,
+ ["unicodeslot"]=0x03E3, -- ϣ
+ },
+ [0x03E4]={
+ ["category"]="lu",
+ ["description"]="COPTIC CAPITAL LETTER FEI",
+ ["lccode"]=0x03E5,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x03E4, -- Ϥ
+ },
+ [0x03E5]={
+ ["category"]="ll",
+ ["description"]="COPTIC SMALL LETTER FEI",
+ ["linebreak"]="al",
+ ["uccode"]=0x03E4,
+ ["unicodeslot"]=0x03E5, -- ϥ
+ },
+ [0x03E6]={
+ ["category"]="lu",
+ ["description"]="COPTIC CAPITAL LETTER KHEI",
+ ["lccode"]=0x03E7,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x03E6, -- Ϧ
+ },
+ [0x03E7]={
+ ["category"]="ll",
+ ["description"]="COPTIC SMALL LETTER KHEI",
+ ["linebreak"]="al",
+ ["uccode"]=0x03E6,
+ ["unicodeslot"]=0x03E7, -- ϧ
+ },
+ [0x03E8]={
+ ["category"]="lu",
+ ["description"]="COPTIC CAPITAL LETTER HORI",
+ ["lccode"]=0x03E9,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x03E8, -- Ϩ
+ },
+ [0x03E9]={
+ ["category"]="ll",
+ ["description"]="COPTIC SMALL LETTER HORI",
+ ["linebreak"]="al",
+ ["uccode"]=0x03E8,
+ ["unicodeslot"]=0x03E9, -- Ï©
+ },
+ [0x03EA]={
+ ["category"]="lu",
+ ["description"]="COPTIC CAPITAL LETTER GANGIA",
+ ["lccode"]=0x03EB,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x03EA, -- Ϫ
+ },
+ [0x03EB]={
+ ["category"]="ll",
+ ["description"]="COPTIC SMALL LETTER GANGIA",
+ ["linebreak"]="al",
+ ["uccode"]=0x03EA,
+ ["unicodeslot"]=0x03EB, -- Ï«
+ },
+ [0x03EC]={
+ ["category"]="lu",
+ ["description"]="COPTIC CAPITAL LETTER SHIMA",
+ ["lccode"]=0x03ED,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x03EC, -- Ϭ
+ },
+ [0x03ED]={
+ ["category"]="ll",
+ ["description"]="COPTIC SMALL LETTER SHIMA",
+ ["linebreak"]="al",
+ ["uccode"]=0x03EC,
+ ["unicodeslot"]=0x03ED, -- Ï­
+ },
+ [0x03EE]={
+ ["category"]="lu",
+ ["description"]="COPTIC CAPITAL LETTER DEI",
+ ["lccode"]=0x03EF,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x03EE, -- Ï®
+ },
+ [0x03EF]={
+ ["category"]="ll",
+ ["description"]="COPTIC SMALL LETTER DEI",
+ ["linebreak"]="al",
+ ["uccode"]=0x03EE,
+ ["unicodeslot"]=0x03EF, -- ϯ
+ },
+ [0x03F0]={
+ ["category"]="ll",
+ ["description"]="GREEK KAPPA SYMBOL",
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x03BA },
+ ["uccode"]=0x039A,
+ ["unicodeslot"]=0x03F0, -- Ï°
+ },
+ [0x03F1]={
+ ["category"]="ll",
+ ["contextname"]="greekrhoalt",
+ ["description"]="GREEK RHO SYMBOL",
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x03C1 },
+ ["mathclass"]="variable",
+ ["mathname"]="varrho",
+ ["uccode"]=0x03A1,
+ ["unicodeslot"]=0x03F1, -- ϱ
+ },
+ [0x03F2]={
+ ["category"]="ll",
+ ["contextname"]="greeksigmalunate",
+ ["description"]="GREEK LUNATE SIGMA SYMBOL",
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x03C2 },
+ ["uccode"]=0x03F9,
+ ["unicodeslot"]=0x03F2, -- ϲ
+ },
+ [0x03F3]={
+ ["category"]="ll",
+ ["description"]="GREEK LETTER YOT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x03F3, -- ϳ
+ },
+ [0x03F4]={
+ ["category"]="lu",
+ ["description"]="GREEK CAPITAL THETA SYMBOL",
+ ["lccode"]=0x03B8,
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x0398 },
+ ["unicodeslot"]=0x03F4, -- Ï´
+ },
+ [0x03F5]={
+ ["category"]="ll",
+ ["contextname"]="greekepsilonalt",
+ ["description"]="GREEK LUNATE EPSILON SYMBOL",
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["mathname"]="varepsilon",
+ ["specials"]={ "compat", 0x03B5 },
+ ["uccode"]=0x0395,
+ ["unicodeslot"]=0x03F5, -- ϵ
+ },
+ [0x03F6]={
+ ["category"]="sm",
+ ["description"]="GREEK REVERSED LUNATE EPSILON SYMBOL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x03F6, -- ϶
+ },
+ [0x03F7]={
+ ["category"]="lu",
+ ["description"]="GREEK CAPITAL LETTER SHO",
+ ["lccode"]=0x03F8,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x03F7, -- Ï·
+ },
+ [0x03F8]={
+ ["category"]="ll",
+ ["description"]="GREEK SMALL LETTER SHO",
+ ["linebreak"]="al",
+ ["uccode"]=0x03F7,
+ ["unicodeslot"]=0x03F8, -- ϸ
+ },
+ [0x03F9]={
+ ["category"]="lu",
+ ["contextname"]="greekSigmalunate",
+ ["description"]="GREEK CAPITAL LUNATE SIGMA SYMBOL",
+ ["lccode"]=0x03F2,
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x03A3 },
+ ["unicodeslot"]=0x03F9, -- Ϲ
+ },
+ [0x03FA]={
+ ["category"]="lu",
+ ["description"]="GREEK CAPITAL LETTER SAN",
+ ["lccode"]=0x03FB,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x03FA, -- Ϻ
+ },
+ [0x03FB]={
+ ["category"]="ll",
+ ["description"]="GREEK SMALL LETTER SAN",
+ ["linebreak"]="al",
+ ["uccode"]=0x03FA,
+ ["unicodeslot"]=0x03FB, -- Ï»
+ },
+ [0x03FC]={
+ ["category"]="ll",
+ ["description"]="GREEK RHO WITH STROKE SYMBOL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x03FC, -- ϼ
+ },
+ [0x03FD]={
+ ["category"]="lu",
+ ["description"]="GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL",
+ ["lccode"]=0x037B,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x03FD, -- Ͻ
+ },
+ [0x03FE]={
+ ["category"]="lu",
+ ["description"]="GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL",
+ ["lccode"]=0x037C,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x03FE, -- Ͼ
+ },
+ [0x03FF]={
+ ["category"]="lu",
+ ["description"]="GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL",
+ ["lccode"]=0x037D,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x03FF, -- Ï¿
+ },
+ [0x0400]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicEgrave",
+ ["description"]="CYRILLIC CAPITAL LETTER IE WITH GRAVE",
+ ["lccode"]=0x0450,
+ ["linebreak"]="al",
+ ["shcode"]=0x0415,
+ ["specials"]={ "char", 0x0415, 0x0300 },
+ ["unicodeslot"]=0x0400, -- Ѐ
+ },
+ [0x0401]={
+ ["adobename"]="afii10023",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillicYO",
+ ["description"]="CYRILLIC CAPITAL LETTER IO",
+ ["lccode"]=0x0451,
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x0415, 0x0308 },
+ ["unicodeslot"]=0x0401, -- Ð
+ },
+ [0x0402]={
+ ["adobename"]="afii10051",
+ ["category"]="lu",
+ ["contextname"]="cyrillicDJE",
+ ["description"]="CYRILLIC CAPITAL LETTER DJE",
+ ["lccode"]=0x0452,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0402, -- Ђ
+ },
+ [0x0403]={
+ ["adobename"]="afii10052",
+ ["category"]="lu",
+ ["contextname"]="cyrillicGJE",
+ ["description"]="CYRILLIC CAPITAL LETTER GJE",
+ ["lccode"]=0x0453,
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x0413, 0x0301 },
+ ["unicodeslot"]=0x0403, -- Ѓ
+ },
+ [0x0404]={
+ ["adobename"]="afii10053",
+ ["category"]="lu",
+ ["contextname"]="cyrillicIE",
+ ["description"]="CYRILLIC CAPITAL LETTER UKRAINIAN IE",
+ ["lccode"]=0x0454,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0404, -- Є
+ },
+ [0x0405]={
+ ["adobename"]="afii10054",
+ ["category"]="lu",
+ ["contextname"]="cyrillicDZE",
+ ["description"]="CYRILLIC CAPITAL LETTER DZE",
+ ["lccode"]=0x0455,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0405, -- Ð…
+ },
+ [0x0406]={
+ ["adobename"]="afii10055",
+ ["category"]="lu",
+ ["contextname"]="cyrillicII",
+ ["description"]="CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I",
+ ["lccode"]=0x0456,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0406, -- І
+ },
+ [0x0407]={
+ ["adobename"]="afii10056",
+ ["category"]="lu",
+ ["contextname"]="cyrillicYI",
+ ["description"]="CYRILLIC CAPITAL LETTER YI",
+ ["lccode"]=0x0457,
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x0406, 0x0308 },
+ ["unicodeslot"]=0x0407, -- Ї
+ },
+ [0x0408]={
+ ["adobename"]="afii10057",
+ ["category"]="lu",
+ ["contextname"]="cyrillicJE",
+ ["description"]="CYRILLIC CAPITAL LETTER JE",
+ ["lccode"]=0x0458,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0408, -- Ј
+ },
+ [0x0409]={
+ ["adobename"]="afii10058",
+ ["category"]="lu",
+ ["contextname"]="cyrillicLJE",
+ ["description"]="CYRILLIC CAPITAL LETTER LJE",
+ ["lccode"]=0x0459,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0409, -- Љ
+ },
+ [0x040A]={
+ ["adobename"]="afii10059",
+ ["category"]="lu",
+ ["contextname"]="cyrillicNJE",
+ ["description"]="CYRILLIC CAPITAL LETTER NJE",
+ ["lccode"]=0x045A,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x040A, -- Њ
+ },
+ [0x040B]={
+ ["adobename"]="afii10060",
+ ["category"]="lu",
+ ["contextname"]="cyrillicTSHE",
+ ["description"]="CYRILLIC CAPITAL LETTER TSHE",
+ ["lccode"]=0x045B,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x040B, -- Ћ
+ },
+ [0x040C]={
+ ["adobename"]="afii10061",
+ ["category"]="lu",
+ ["contextname"]="cyrillicKJE",
+ ["description"]="CYRILLIC CAPITAL LETTER KJE",
+ ["lccode"]=0x045C,
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x041A, 0x0301 },
+ ["unicodeslot"]=0x040C, -- Ќ
+ },
+ [0x040D]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicIgrave",
+ ["description"]="CYRILLIC CAPITAL LETTER I WITH GRAVE",
+ ["lccode"]=0x045D,
+ ["linebreak"]="al",
+ ["shcode"]=0x0418,
+ ["specials"]={ "char", 0x0418, 0x0300 },
+ ["unicodeslot"]=0x040D, -- Ð
+ },
+ [0x040E]={
+ ["adobename"]="afii10062",
+ ["category"]="lu",
+ ["contextname"]="cyrillicUSHRT",
+ ["description"]="CYRILLIC CAPITAL LETTER SHORT U",
+ ["lccode"]=0x045E,
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x0423, 0x0306 },
+ ["unicodeslot"]=0x040E, -- ÐŽ
+ },
+ [0x040F]={
+ ["adobename"]="afii10145",
+ ["category"]="lu",
+ ["contextname"]="cyrillicDZHE",
+ ["description"]="CYRILLIC CAPITAL LETTER DZHE",
+ ["lccode"]=0x045F,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x040F, -- Ð
+ },
+ [0x0410]={
+ ["adobename"]="afii10017",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillicA",
+ ["description"]="CYRILLIC CAPITAL LETTER A",
+ ["lccode"]=0x0430,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0410, -- Ð
+ },
+ [0x0411]={
+ ["adobename"]="afii10018",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillicB",
+ ["description"]="CYRILLIC CAPITAL LETTER BE",
+ ["lccode"]=0x0431,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0411, -- Б
+ },
+ [0x0412]={
+ ["adobename"]="afii10019",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillicV",
+ ["description"]="CYRILLIC CAPITAL LETTER VE",
+ ["lccode"]=0x0432,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0412, -- Ð’
+ },
+ [0x0413]={
+ ["adobename"]="afii10020",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillicG",
+ ["description"]="CYRILLIC CAPITAL LETTER GHE",
+ ["lccode"]=0x0433,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0413, -- Г
+ },
+ [0x0414]={
+ ["adobename"]="afii10021",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillicD",
+ ["description"]="CYRILLIC CAPITAL LETTER DE",
+ ["lccode"]=0x0434,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0414, -- Д
+ },
+ [0x0415]={
+ ["adobename"]="afii10022",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillicE",
+ ["description"]="CYRILLIC CAPITAL LETTER IE",
+ ["lccode"]=0x0435,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0415, -- Е
+ },
+ [0x0416]={
+ ["adobename"]="afii10024",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillicZH",
+ ["description"]="CYRILLIC CAPITAL LETTER ZHE",
+ ["lccode"]=0x0436,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0416, -- Ж
+ },
+ [0x0417]={
+ ["adobename"]="afii10025",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillicZ",
+ ["description"]="CYRILLIC CAPITAL LETTER ZE",
+ ["lccode"]=0x0437,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0417, -- З
+ },
+ [0x0418]={
+ ["adobename"]="afii10026",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillicI",
+ ["description"]="CYRILLIC CAPITAL LETTER I",
+ ["lccode"]=0x0438,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0418, -- И
+ },
+ [0x0419]={
+ ["adobename"]="afii10027",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillicISHRT",
+ ["description"]="CYRILLIC CAPITAL LETTER SHORT I",
+ ["lccode"]=0x0439,
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x0418, 0x0306 },
+ ["unicodeslot"]=0x0419, -- Й
+ },
+ [0x041A]={
+ ["adobename"]="afii10028",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillicK",
+ ["description"]="CYRILLIC CAPITAL LETTER KA",
+ ["lccode"]=0x043A,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x041A, -- К
+ },
+ [0x041B]={
+ ["adobename"]="afii10029",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillicL",
+ ["description"]="CYRILLIC CAPITAL LETTER EL",
+ ["lccode"]=0x043B,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x041B, -- Л
+ },
+ [0x041C]={
+ ["adobename"]="afii10030",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillicM",
+ ["description"]="CYRILLIC CAPITAL LETTER EM",
+ ["lccode"]=0x043C,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x041C, -- М
+ },
+ [0x041D]={
+ ["adobename"]="afii10031",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillicN",
+ ["description"]="CYRILLIC CAPITAL LETTER EN",
+ ["lccode"]=0x043D,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x041D, -- Ð
+ },
+ [0x041E]={
+ ["adobename"]="afii10032",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillicO",
+ ["description"]="CYRILLIC CAPITAL LETTER O",
+ ["lccode"]=0x043E,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x041E, -- О
+ },
+ [0x041F]={
+ ["adobename"]="afii10033",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillicP",
+ ["description"]="CYRILLIC CAPITAL LETTER PE",
+ ["lccode"]=0x043F,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x041F, -- П
+ },
+ [0x0420]={
+ ["adobename"]="afii10034",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillicR",
+ ["description"]="CYRILLIC CAPITAL LETTER ER",
+ ["lccode"]=0x0440,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0420, -- Р
+ },
+ [0x0421]={
+ ["adobename"]="afii10035",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillicS",
+ ["description"]="CYRILLIC CAPITAL LETTER ES",
+ ["lccode"]=0x0441,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0421, -- С
+ },
+ [0x0422]={
+ ["adobename"]="afii10036",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillicT",
+ ["description"]="CYRILLIC CAPITAL LETTER TE",
+ ["lccode"]=0x0442,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0422, -- Т
+ },
+ [0x0423]={
+ ["adobename"]="afii10037",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillicU",
+ ["description"]="CYRILLIC CAPITAL LETTER U",
+ ["lccode"]=0x0443,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0423, -- У
+ },
+ [0x0424]={
+ ["adobename"]="afii10038",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillicF",
+ ["description"]="CYRILLIC CAPITAL LETTER EF",
+ ["lccode"]=0x0444,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0424, -- Ф
+ },
+ [0x0425]={
+ ["adobename"]="afii10039",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillicH",
+ ["description"]="CYRILLIC CAPITAL LETTER HA",
+ ["lccode"]=0x0445,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0425, -- Х
+ },
+ [0x0426]={
+ ["adobename"]="afii10040",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillicC",
+ ["description"]="CYRILLIC CAPITAL LETTER TSE",
+ ["lccode"]=0x0446,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0426, -- Ц
+ },
+ [0x0427]={
+ ["adobename"]="afii10041",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillicCH",
+ ["description"]="CYRILLIC CAPITAL LETTER CHE",
+ ["lccode"]=0x0447,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0427, -- Ч
+ },
+ [0x0428]={
+ ["adobename"]="afii10042",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillicSH",
+ ["description"]="CYRILLIC CAPITAL LETTER SHA",
+ ["lccode"]=0x0448,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0428, -- Ш
+ },
+ [0x0429]={
+ ["adobename"]="afii10043",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillicSHCH",
+ ["description"]="CYRILLIC CAPITAL LETTER SHCHA",
+ ["lccode"]=0x0449,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0429, -- Щ
+ },
+ [0x042A]={
+ ["adobename"]="afii10044",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillicHRDSN",
+ ["description"]="CYRILLIC CAPITAL LETTER HARD SIGN",
+ ["lccode"]=0x044A,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x042A, -- Ъ
+ },
+ [0x042B]={
+ ["adobename"]="afii10045",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillicERY",
+ ["description"]="CYRILLIC CAPITAL LETTER YERU",
+ ["lccode"]=0x044B,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x042B, -- Ы
+ },
+ [0x042C]={
+ ["adobename"]="afii10046",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillicSFTSN",
+ ["description"]="CYRILLIC CAPITAL LETTER SOFT SIGN",
+ ["lccode"]=0x044C,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x042C, -- Ь
+ },
+ [0x042D]={
+ ["adobename"]="afii10047",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillicEREV",
+ ["description"]="CYRILLIC CAPITAL LETTER E",
+ ["lccode"]=0x044D,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x042D, -- Э
+ },
+ [0x042E]={
+ ["adobename"]="afii10048",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillicYU",
+ ["description"]="CYRILLIC CAPITAL LETTER YU",
+ ["lccode"]=0x044E,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x042E, -- Ю
+ },
+ [0x042F]={
+ ["adobename"]="afii10049",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillicYA",
+ ["description"]="CYRILLIC CAPITAL LETTER YA",
+ ["lccode"]=0x044F,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x042F, -- Я
+ },
+ [0x0430]={
+ ["adobename"]="afii10065",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillica",
+ ["description"]="CYRILLIC SMALL LETTER A",
+ ["linebreak"]="al",
+ ["uccode"]=0x0410,
+ ["unicodeslot"]=0x0430, -- а
+ },
+ [0x0431]={
+ ["adobename"]="afii10066",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillicb",
+ ["description"]="CYRILLIC SMALL LETTER BE",
+ ["linebreak"]="al",
+ ["uccode"]=0x0411,
+ ["unicodeslot"]=0x0431, -- б
+ },
+ [0x0432]={
+ ["adobename"]="afii10067",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillicv",
+ ["description"]="CYRILLIC SMALL LETTER VE",
+ ["linebreak"]="al",
+ ["uccode"]=0x0412,
+ ["unicodeslot"]=0x0432, -- в
+ },
+ [0x0433]={
+ ["adobename"]="afii10068",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillicg",
+ ["description"]="CYRILLIC SMALL LETTER GHE",
+ ["linebreak"]="al",
+ ["uccode"]=0x0413,
+ ["unicodeslot"]=0x0433, -- г
+ },
+ [0x0434]={
+ ["adobename"]="afii10069",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillicd",
+ ["description"]="CYRILLIC SMALL LETTER DE",
+ ["linebreak"]="al",
+ ["uccode"]=0x0414,
+ ["unicodeslot"]=0x0434, -- д
+ },
+ [0x0435]={
+ ["adobename"]="afii10070",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillice",
+ ["description"]="CYRILLIC SMALL LETTER IE",
+ ["linebreak"]="al",
+ ["uccode"]=0x0415,
+ ["unicodeslot"]=0x0435, -- е
+ },
+ [0x0436]={
+ ["adobename"]="afii10072",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrilliczh",
+ ["description"]="CYRILLIC SMALL LETTER ZHE",
+ ["linebreak"]="al",
+ ["uccode"]=0x0416,
+ ["unicodeslot"]=0x0436, -- ж
+ },
+ [0x0437]={
+ ["adobename"]="afii10073",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillicz",
+ ["description"]="CYRILLIC SMALL LETTER ZE",
+ ["linebreak"]="al",
+ ["uccode"]=0x0417,
+ ["unicodeslot"]=0x0437, -- з
+ },
+ [0x0438]={
+ ["adobename"]="afii10074",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillici",
+ ["description"]="CYRILLIC SMALL LETTER I",
+ ["linebreak"]="al",
+ ["uccode"]=0x0418,
+ ["unicodeslot"]=0x0438, -- и
+ },
+ [0x0439]={
+ ["adobename"]="afii10075",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillicishrt",
+ ["description"]="CYRILLIC SMALL LETTER SHORT I",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x0438, 0x0306 },
+ ["uccode"]=0x0419,
+ ["unicodeslot"]=0x0439, -- й
+ },
+ [0x043A]={
+ ["adobename"]="afii10076",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillick",
+ ["description"]="CYRILLIC SMALL LETTER KA",
+ ["linebreak"]="al",
+ ["uccode"]=0x041A,
+ ["unicodeslot"]=0x043A, -- к
+ },
+ [0x043B]={
+ ["adobename"]="afii10077",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillicl",
+ ["description"]="CYRILLIC SMALL LETTER EL",
+ ["linebreak"]="al",
+ ["uccode"]=0x041B,
+ ["unicodeslot"]=0x043B, -- л
+ },
+ [0x043C]={
+ ["adobename"]="afii10078",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillicm",
+ ["description"]="CYRILLIC SMALL LETTER EM",
+ ["linebreak"]="al",
+ ["uccode"]=0x041C,
+ ["unicodeslot"]=0x043C, -- м
+ },
+ [0x043D]={
+ ["adobename"]="afii10079",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillicn",
+ ["description"]="CYRILLIC SMALL LETTER EN",
+ ["linebreak"]="al",
+ ["uccode"]=0x041D,
+ ["unicodeslot"]=0x043D, -- н
+ },
+ [0x043E]={
+ ["adobename"]="afii10080",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillico",
+ ["description"]="CYRILLIC SMALL LETTER O",
+ ["linebreak"]="al",
+ ["uccode"]=0x041E,
+ ["unicodeslot"]=0x043E, -- о
+ },
+ [0x043F]={
+ ["adobename"]="afii10081",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillicp",
+ ["description"]="CYRILLIC SMALL LETTER PE",
+ ["linebreak"]="al",
+ ["uccode"]=0x041F,
+ ["unicodeslot"]=0x043F, -- п
+ },
+ [0x0440]={
+ ["adobename"]="afii10082",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillicr",
+ ["description"]="CYRILLIC SMALL LETTER ER",
+ ["linebreak"]="al",
+ ["uccode"]=0x0420,
+ ["unicodeslot"]=0x0440, -- р
+ },
+ [0x0441]={
+ ["adobename"]="afii10083",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillics",
+ ["description"]="CYRILLIC SMALL LETTER ES",
+ ["linebreak"]="al",
+ ["uccode"]=0x0421,
+ ["unicodeslot"]=0x0441, -- Ñ
+ },
+ [0x0442]={
+ ["adobename"]="afii10084",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillict",
+ ["description"]="CYRILLIC SMALL LETTER TE",
+ ["linebreak"]="al",
+ ["uccode"]=0x0422,
+ ["unicodeslot"]=0x0442, -- Ñ‚
+ },
+ [0x0443]={
+ ["adobename"]="afii10085",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillicu",
+ ["description"]="CYRILLIC SMALL LETTER U",
+ ["linebreak"]="al",
+ ["uccode"]=0x0423,
+ ["unicodeslot"]=0x0443, -- у
+ },
+ [0x0444]={
+ ["adobename"]="afii10086",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillicf",
+ ["description"]="CYRILLIC SMALL LETTER EF",
+ ["linebreak"]="al",
+ ["uccode"]=0x0424,
+ ["unicodeslot"]=0x0444, -- Ñ„
+ },
+ [0x0445]={
+ ["adobename"]="afii10087",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillich",
+ ["description"]="CYRILLIC SMALL LETTER HA",
+ ["linebreak"]="al",
+ ["uccode"]=0x0425,
+ ["unicodeslot"]=0x0445, -- Ñ…
+ },
+ [0x0446]={
+ ["adobename"]="afii10088",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillicc",
+ ["description"]="CYRILLIC SMALL LETTER TSE",
+ ["linebreak"]="al",
+ ["uccode"]=0x0426,
+ ["unicodeslot"]=0x0446, -- ц
+ },
+ [0x0447]={
+ ["adobename"]="afii10089",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillicch",
+ ["description"]="CYRILLIC SMALL LETTER CHE",
+ ["linebreak"]="al",
+ ["uccode"]=0x0427,
+ ["unicodeslot"]=0x0447, -- ч
+ },
+ [0x0448]={
+ ["adobename"]="afii10090",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillicsh",
+ ["description"]="CYRILLIC SMALL LETTER SHA",
+ ["linebreak"]="al",
+ ["uccode"]=0x0428,
+ ["unicodeslot"]=0x0448, -- ш
+ },
+ [0x0449]={
+ ["adobename"]="afii10091",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillicshch",
+ ["description"]="CYRILLIC SMALL LETTER SHCHA",
+ ["linebreak"]="al",
+ ["uccode"]=0x0429,
+ ["unicodeslot"]=0x0449, -- щ
+ },
+ [0x044A]={
+ ["adobename"]="afii10092",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillichrdsn",
+ ["description"]="CYRILLIC SMALL LETTER HARD SIGN",
+ ["linebreak"]="al",
+ ["uccode"]=0x042A,
+ ["unicodeslot"]=0x044A, -- ÑŠ
+ },
+ [0x044B]={
+ ["adobename"]="afii10093",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillicery",
+ ["description"]="CYRILLIC SMALL LETTER YERU",
+ ["linebreak"]="al",
+ ["uccode"]=0x042B,
+ ["unicodeslot"]=0x044B, -- Ñ‹
+ },
+ [0x044C]={
+ ["adobename"]="afii10094",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillicsftsn",
+ ["description"]="CYRILLIC SMALL LETTER SOFT SIGN",
+ ["linebreak"]="al",
+ ["uccode"]=0x042C,
+ ["unicodeslot"]=0x044C, -- ь
+ },
+ [0x044D]={
+ ["adobename"]="afii10095",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillicerev",
+ ["description"]="CYRILLIC SMALL LETTER E",
+ ["linebreak"]="al",
+ ["uccode"]=0x042D,
+ ["unicodeslot"]=0x044D, -- Ñ
+ },
+ [0x044E]={
+ ["adobename"]="afii10096",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillicyu",
+ ["description"]="CYRILLIC SMALL LETTER YU",
+ ["linebreak"]="al",
+ ["uccode"]=0x042E,
+ ["unicodeslot"]=0x044E, -- ÑŽ
+ },
+ [0x044F]={
+ ["adobename"]="afii10097",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillicya",
+ ["description"]="CYRILLIC SMALL LETTER YA",
+ ["linebreak"]="al",
+ ["uccode"]=0x042F,
+ ["unicodeslot"]=0x044F, -- Ñ
+ },
+ [0x0450]={
+ ["category"]="ll",
+ ["contextname"]="cyrillicegrave",
+ ["description"]="CYRILLIC SMALL LETTER IE WITH GRAVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0435,
+ ["specials"]={ "char", 0x0435, 0x0300 },
+ ["uccode"]=0x0400,
+ ["unicodeslot"]=0x0450, -- Ñ
+ },
+ [0x0451]={
+ ["adobename"]="afii10071",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["contextname"]="cyrillicyo",
+ ["description"]="CYRILLIC SMALL LETTER IO",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x0435, 0x0308 },
+ ["uccode"]=0x0401,
+ ["unicodeslot"]=0x0451, -- Ñ‘
+ },
+ [0x0452]={
+ ["adobename"]="afii10099",
+ ["category"]="ll",
+ ["contextname"]="cyrillicdje",
+ ["description"]="CYRILLIC SMALL LETTER DJE",
+ ["linebreak"]="al",
+ ["uccode"]=0x0402,
+ ["unicodeslot"]=0x0452, -- Ñ’
+ },
+ [0x0453]={
+ ["adobename"]="afii10100",
+ ["category"]="ll",
+ ["contextname"]="cyrillicgje",
+ ["description"]="CYRILLIC SMALL LETTER GJE",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x0433, 0x0301 },
+ ["uccode"]=0x0403,
+ ["unicodeslot"]=0x0453, -- Ñ“
+ },
+ [0x0454]={
+ ["adobename"]="afii10101",
+ ["category"]="ll",
+ ["contextname"]="cyrillicie",
+ ["description"]="CYRILLIC SMALL LETTER UKRAINIAN IE",
+ ["linebreak"]="al",
+ ["uccode"]=0x0404,
+ ["unicodeslot"]=0x0454, -- Ñ”
+ },
+ [0x0455]={
+ ["adobename"]="afii10102",
+ ["category"]="ll",
+ ["contextname"]="cyrillicdze",
+ ["description"]="CYRILLIC SMALL LETTER DZE",
+ ["linebreak"]="al",
+ ["uccode"]=0x0405,
+ ["unicodeslot"]=0x0455, -- Ñ•
+ },
+ [0x0456]={
+ ["adobename"]="afii10103",
+ ["category"]="ll",
+ ["contextname"]="cyrillicii",
+ ["description"]="CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I",
+ ["linebreak"]="al",
+ ["uccode"]=0x0406,
+ ["unicodeslot"]=0x0456, -- Ñ–
+ },
+ [0x0457]={
+ ["adobename"]="afii10104",
+ ["category"]="ll",
+ ["contextname"]="cyrillicyi",
+ ["description"]="CYRILLIC SMALL LETTER YI",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x0456, 0x0308 },
+ ["uccode"]=0x0407,
+ ["unicodeslot"]=0x0457, -- Ñ—
+ },
+ [0x0458]={
+ ["adobename"]="afii10105",
+ ["category"]="ll",
+ ["contextname"]="cyrillicje",
+ ["description"]="CYRILLIC SMALL LETTER JE",
+ ["linebreak"]="al",
+ ["uccode"]=0x0408,
+ ["unicodeslot"]=0x0458, -- ј
+ },
+ [0x0459]={
+ ["adobename"]="afii10106",
+ ["category"]="ll",
+ ["contextname"]="cyrilliclje",
+ ["description"]="CYRILLIC SMALL LETTER LJE",
+ ["linebreak"]="al",
+ ["uccode"]=0x0409,
+ ["unicodeslot"]=0x0459, -- Ñ™
+ },
+ [0x045A]={
+ ["adobename"]="afii10107",
+ ["category"]="ll",
+ ["contextname"]="cyrillicnje",
+ ["description"]="CYRILLIC SMALL LETTER NJE",
+ ["linebreak"]="al",
+ ["uccode"]=0x040A,
+ ["unicodeslot"]=0x045A, -- Ñš
+ },
+ [0x045B]={
+ ["adobename"]="afii10108",
+ ["category"]="ll",
+ ["contextname"]="cyrillictshe",
+ ["description"]="CYRILLIC SMALL LETTER TSHE",
+ ["linebreak"]="al",
+ ["uccode"]=0x040B,
+ ["unicodeslot"]=0x045B, -- Ñ›
+ },
+ [0x045C]={
+ ["adobename"]="afii10109",
+ ["category"]="ll",
+ ["contextname"]="cyrillickje",
+ ["description"]="CYRILLIC SMALL LETTER KJE",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x043A, 0x0301 },
+ ["uccode"]=0x040C,
+ ["unicodeslot"]=0x045C, -- ќ
+ },
+ [0x045D]={
+ ["category"]="ll",
+ ["contextname"]="cyrillicigrave",
+ ["description"]="CYRILLIC SMALL LETTER I WITH GRAVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0438,
+ ["specials"]={ "char", 0x0438, 0x0300 },
+ ["uccode"]=0x040D,
+ ["unicodeslot"]=0x045D, -- Ñ
+ },
+ [0x045E]={
+ ["adobename"]="afii10110",
+ ["category"]="ll",
+ ["contextname"]="cyrillicushrt",
+ ["description"]="CYRILLIC SMALL LETTER SHORT U",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x0443, 0x0306 },
+ ["uccode"]=0x040E,
+ ["unicodeslot"]=0x045E, -- Ñž
+ },
+ [0x045F]={
+ ["adobename"]="afii10193",
+ ["category"]="ll",
+ ["contextname"]="cyrillicdzhe",
+ ["description"]="CYRILLIC SMALL LETTER DZHE",
+ ["linebreak"]="al",
+ ["uccode"]=0x040F,
+ ["unicodeslot"]=0x045F, -- ÑŸ
+ },
+ [0x0460]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicOMEGA",
+ ["description"]="CYRILLIC CAPITAL LETTER OMEGA",
+ ["lccode"]=0x0461,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0460, -- Ñ 
+ },
+ [0x0461]={
+ ["category"]="ll",
+ ["contextname"]="cyrillicomega",
+ ["description"]="CYRILLIC SMALL LETTER OMEGA",
+ ["linebreak"]="al",
+ ["uccode"]=0x0460,
+ ["unicodeslot"]=0x0461, -- Ñ¡
+ },
+ [0x0462]={
+ ["adobename"]="afii10146",
+ ["category"]="lu",
+ ["contextname"]="cyrillicYAT",
+ ["description"]="CYRILLIC CAPITAL LETTER YAT",
+ ["lccode"]=0x0463,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0462, -- Ѣ
+ },
+ [0x0463]={
+ ["adobename"]="afii10194",
+ ["category"]="ll",
+ ["contextname"]="cyrillicyat",
+ ["description"]="CYRILLIC SMALL LETTER YAT",
+ ["linebreak"]="al",
+ ["uccode"]=0x0462,
+ ["unicodeslot"]=0x0463, -- ѣ
+ },
+ [0x0464]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicEiotified",
+ ["description"]="CYRILLIC CAPITAL LETTER IOTIFIED E",
+ ["lccode"]=0x0465,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0464, -- Ѥ
+ },
+ [0x0465]={
+ ["category"]="ll",
+ ["contextname"]="cyrilliceiotified",
+ ["description"]="CYRILLIC SMALL LETTER IOTIFIED E",
+ ["linebreak"]="al",
+ ["uccode"]=0x0464,
+ ["unicodeslot"]=0x0465, -- ѥ
+ },
+ [0x0466]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicLITTLEYUS",
+ ["description"]="CYRILLIC CAPITAL LETTER LITTLE YUS",
+ ["lccode"]=0x0467,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0466, -- Ѧ
+ },
+ [0x0467]={
+ ["category"]="ll",
+ ["contextname"]="cyrilliclittleyus",
+ ["description"]="CYRILLIC SMALL LETTER LITTLE YUS",
+ ["linebreak"]="al",
+ ["uccode"]=0x0466,
+ ["unicodeslot"]=0x0467, -- ѧ
+ },
+ [0x0468]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicLITTLEYUSiotified",
+ ["description"]="CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS",
+ ["lccode"]=0x0469,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0468, -- Ѩ
+ },
+ [0x0469]={
+ ["category"]="ll",
+ ["contextname"]="cyrilliclittleyusiotified",
+ ["description"]="CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS",
+ ["linebreak"]="al",
+ ["uccode"]=0x0468,
+ ["unicodeslot"]=0x0469, -- Ñ©
+ },
+ [0x046A]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicBIGYUS",
+ ["description"]="CYRILLIC CAPITAL LETTER BIG YUS",
+ ["lccode"]=0x046B,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x046A, -- Ѫ
+ },
+ [0x046B]={
+ ["category"]="ll",
+ ["contextname"]="cyrillicbigyus",
+ ["description"]="CYRILLIC SMALL LETTER BIG YUS",
+ ["linebreak"]="al",
+ ["uccode"]=0x046A,
+ ["unicodeslot"]=0x046B, -- Ñ«
+ },
+ [0x046C]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicBIGYUSiotified",
+ ["description"]="CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS",
+ ["lccode"]=0x046D,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x046C, -- Ѭ
+ },
+ [0x046D]={
+ ["category"]="ll",
+ ["contextname"]="cyrillicbigyusiotified",
+ ["description"]="CYRILLIC SMALL LETTER IOTIFIED BIG YUS",
+ ["linebreak"]="al",
+ ["uccode"]=0x046C,
+ ["unicodeslot"]=0x046D, -- Ñ­
+ },
+ [0x046E]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicKSI",
+ ["description"]="CYRILLIC CAPITAL LETTER KSI",
+ ["lccode"]=0x046F,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x046E, -- Ñ®
+ },
+ [0x046F]={
+ ["category"]="ll",
+ ["contextname"]="cyrillicksi",
+ ["description"]="CYRILLIC SMALL LETTER KSI",
+ ["linebreak"]="al",
+ ["uccode"]=0x046E,
+ ["unicodeslot"]=0x046F, -- ѯ
+ },
+ [0x0470]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicPSI",
+ ["description"]="CYRILLIC CAPITAL LETTER PSI",
+ ["lccode"]=0x0471,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0470, -- Ñ°
+ },
+ [0x0471]={
+ ["category"]="ll",
+ ["contextname"]="cyrillicpsi",
+ ["description"]="CYRILLIC SMALL LETTER PSI",
+ ["linebreak"]="al",
+ ["uccode"]=0x0470,
+ ["unicodeslot"]=0x0471, -- ѱ
+ },
+ [0x0472]={
+ ["adobename"]="afii10147",
+ ["category"]="lu",
+ ["contextname"]="cyrillicFITA",
+ ["description"]="CYRILLIC CAPITAL LETTER FITA",
+ ["lccode"]=0x0473,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0472, -- Ѳ
+ },
+ [0x0473]={
+ ["adobename"]="afii10195",
+ ["category"]="ll",
+ ["contextname"]="cyrillicfita",
+ ["description"]="CYRILLIC SMALL LETTER FITA",
+ ["linebreak"]="al",
+ ["uccode"]=0x0472,
+ ["unicodeslot"]=0x0473, -- ѳ
+ },
+ [0x0474]={
+ ["adobename"]="afii10148",
+ ["category"]="lu",
+ ["contextname"]="cyrillicIZHITSA",
+ ["description"]="CYRILLIC CAPITAL LETTER IZHITSA",
+ ["lccode"]=0x0475,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0474, -- Ñ´
+ },
+ [0x0475]={
+ ["adobename"]="afii10196",
+ ["category"]="ll",
+ ["contextname"]="cyrillicizhitsa",
+ ["description"]="CYRILLIC SMALL LETTER IZHITSA",
+ ["linebreak"]="al",
+ ["uccode"]=0x0474,
+ ["unicodeslot"]=0x0475, -- ѵ
+ },
+ [0x0476]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicIZHITSAdoublegrave",
+ ["description"]="CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT",
+ ["lccode"]=0x0477,
+ ["linebreak"]="al",
+ ["shcode"]=0x0474,
+ ["specials"]={ "char", 0x0474, 0x030F },
+ ["unicodeslot"]=0x0476, -- Ѷ
+ },
+ [0x0477]={
+ ["category"]="ll",
+ ["contextname"]="cyrillicizhitsadoublegrave",
+ ["description"]="CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT",
+ ["linebreak"]="al",
+ ["shcode"]=0x0475,
+ ["specials"]={ "char", 0x0475, 0x030F },
+ ["uccode"]=0x0476,
+ ["unicodeslot"]=0x0477, -- Ñ·
+ },
+ [0x0478]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicUK",
+ ["description"]="CYRILLIC CAPITAL LETTER UK",
+ ["lccode"]=0x0479,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0478, -- Ѹ
+ },
+ [0x0479]={
+ ["category"]="ll",
+ ["contextname"]="cyrillicuk",
+ ["description"]="CYRILLIC SMALL LETTER UK",
+ ["linebreak"]="al",
+ ["uccode"]=0x0478,
+ ["unicodeslot"]=0x0479, -- ѹ
+ },
+ [0x047A]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicOMEGAround",
+ ["description"]="CYRILLIC CAPITAL LETTER ROUND OMEGA",
+ ["lccode"]=0x047B,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x047A, -- Ѻ
+ },
+ [0x047B]={
+ ["category"]="ll",
+ ["contextname"]="cyrillicomegaround",
+ ["description"]="CYRILLIC SMALL LETTER ROUND OMEGA",
+ ["linebreak"]="al",
+ ["uccode"]=0x047A,
+ ["unicodeslot"]=0x047B, -- Ñ»
+ },
+ [0x047C]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicOMEGAtitlo",
+ ["description"]="CYRILLIC CAPITAL LETTER OMEGA WITH TITLO",
+ ["lccode"]=0x047D,
+ ["linebreak"]="al",
+ ["shcode"]=0x0460,
+ ["unicodeslot"]=0x047C, -- Ѽ
+ },
+ [0x047D]={
+ ["category"]="ll",
+ ["contextname"]="cyrillicomegatitlo",
+ ["description"]="CYRILLIC SMALL LETTER OMEGA WITH TITLO",
+ ["linebreak"]="al",
+ ["shcode"]=0x0461,
+ ["uccode"]=0x047C,
+ ["unicodeslot"]=0x047D, -- ѽ
+ },
+ [0x047E]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicOT",
+ ["description"]="CYRILLIC CAPITAL LETTER OT",
+ ["lccode"]=0x047F,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x047E, -- Ѿ
+ },
+ [0x047F]={
+ ["category"]="ll",
+ ["contextname"]="cyrillicot",
+ ["description"]="CYRILLIC SMALL LETTER OT",
+ ["linebreak"]="al",
+ ["uccode"]=0x047E,
+ ["unicodeslot"]=0x047F, -- Ñ¿
+ },
+ [0x0480]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicKOPPA",
+ ["description"]="CYRILLIC CAPITAL LETTER KOPPA",
+ ["lccode"]=0x0481,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0480, -- Ò€
+ },
+ [0x0481]={
+ ["category"]="ll",
+ ["contextname"]="cyrillickoppa",
+ ["description"]="CYRILLIC SMALL LETTER KOPPA",
+ ["linebreak"]="al",
+ ["uccode"]=0x0480,
+ ["unicodeslot"]=0x0481, -- Ò
+ },
+ [0x0482]={
+ ["category"]="so",
+ ["description"]="CYRILLIC THOUSANDS SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0482, -- Ò‚
+ },
+ [0x0483]={
+ ["category"]="mn",
+ ["contextname"]="cyrillicTITLO",
+ ["description"]="COMBINING CYRILLIC TITLO",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0483, -- Òƒ
+ },
+ [0x0484]={
+ ["category"]="mn",
+ ["contextname"]="cyrillicPALATALIZATION",
+ ["description"]="COMBINING CYRILLIC PALATALIZATION",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0484, -- Ò„
+ },
+ [0x0485]={
+ ["category"]="mn",
+ ["contextname"]="cyrillicDASIAPNEUMATA",
+ ["description"]="COMBINING CYRILLIC DASIA PNEUMATA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0485, -- Ò…
+ },
+ [0x0486]={
+ ["category"]="mn",
+ ["contextname"]="cyrillicPSILIPNEUMATA",
+ ["description"]="COMBINING CYRILLIC PSILI PNEUMATA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0486, -- Ò†
+ },
+ [0x0488]={
+ ["category"]="me",
+ ["description"]="COMBINING CYRILLIC HUNDRED THOUSANDS SIGN",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0488, -- Òˆ
+ },
+ [0x0489]={
+ ["category"]="me",
+ ["description"]="COMBINING CYRILLIC MILLIONS SIGN",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0489, -- Ò‰
+ },
+ [0x048A]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicISHRTtail",
+ ["description"]="CYRILLIC CAPITAL LETTER SHORT I WITH TAIL",
+ ["lccode"]=0x048B,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x048A, -- ÒŠ
+ },
+ [0x048B]={
+ ["category"]="ll",
+ ["contextname"]="cyrillicishrttail",
+ ["description"]="CYRILLIC SMALL LETTER SHORT I WITH TAIL",
+ ["linebreak"]="al",
+ ["uccode"]=0x048A,
+ ["unicodeslot"]=0x048B, -- Ò‹
+ },
+ [0x048C]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicSEMISOFT",
+ ["description"]="CYRILLIC CAPITAL LETTER SEMISOFT SIGN",
+ ["lccode"]=0x048D,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x048C, -- Ҍ
+ },
+ [0x048D]={
+ ["category"]="ll",
+ ["contextname"]="cyrillicsemisoft",
+ ["description"]="CYRILLIC SMALL LETTER SEMISOFT SIGN",
+ ["linebreak"]="al",
+ ["uccode"]=0x048C,
+ ["unicodeslot"]=0x048D, -- Ò
+ },
+ [0x048E]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicERtick",
+ ["description"]="CYRILLIC CAPITAL LETTER ER WITH TICK",
+ ["lccode"]=0x048F,
+ ["linebreak"]="al",
+ ["shcode"]=0x0420,
+ ["unicodeslot"]=0x048E, -- ÒŽ
+ },
+ [0x048F]={
+ ["category"]="ll",
+ ["contextname"]="cyrillicertick",
+ ["description"]="CYRILLIC SMALL LETTER ER WITH TICK",
+ ["linebreak"]="al",
+ ["shcode"]=0x0440,
+ ["uccode"]=0x048E,
+ ["unicodeslot"]=0x048F, -- Ò
+ },
+ [0x0490]={
+ ["adobename"]="afii10050",
+ ["category"]="lu",
+ ["contextname"]="cyrillicGHEupturn",
+ ["description"]="CYRILLIC CAPITAL LETTER GHE WITH UPTURN",
+ ["lccode"]=0x0491,
+ ["linebreak"]="al",
+ ["shcode"]=0x0413,
+ ["unicodeslot"]=0x0490, -- Ò
+ },
+ [0x0491]={
+ ["adobename"]="afii10098",
+ ["category"]="ll",
+ ["contextname"]="cyrillicgheupturn",
+ ["description"]="CYRILLIC SMALL LETTER GHE WITH UPTURN",
+ ["linebreak"]="al",
+ ["shcode"]=0x0433,
+ ["uccode"]=0x0490,
+ ["unicodeslot"]=0x0491, -- Ò‘
+ },
+ [0x0492]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicGHEstroke",
+ ["description"]="CYRILLIC CAPITAL LETTER GHE WITH STROKE",
+ ["lccode"]=0x0493,
+ ["linebreak"]="al",
+ ["shcode"]=0x0413,
+ ["unicodeslot"]=0x0492, -- Ò’
+ },
+ [0x0493]={
+ ["category"]="ll",
+ ["contextname"]="cyrillicghestroke",
+ ["description"]="CYRILLIC SMALL LETTER GHE WITH STROKE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0433,
+ ["uccode"]=0x0492,
+ ["unicodeslot"]=0x0493, -- Ò“
+ },
+ [0x0494]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicGHEmidhook",
+ ["description"]="CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK",
+ ["lccode"]=0x0495,
+ ["linebreak"]="al",
+ ["shcode"]=0x0413,
+ ["unicodeslot"]=0x0494, -- Ò”
+ },
+ [0x0495]={
+ ["category"]="ll",
+ ["contextname"]="cyrillicghemidhook",
+ ["description"]="CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK",
+ ["linebreak"]="al",
+ ["shcode"]=0x0433,
+ ["uccode"]=0x0494,
+ ["unicodeslot"]=0x0495, -- Ò•
+ },
+ [0x0496]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicZHEdescender",
+ ["description"]="CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER",
+ ["lccode"]=0x0497,
+ ["linebreak"]="al",
+ ["shcode"]=0x0416,
+ ["unicodeslot"]=0x0496, -- Ò–
+ },
+ [0x0497]={
+ ["category"]="ll",
+ ["contextname"]="cyrilliczhedescender",
+ ["description"]="CYRILLIC SMALL LETTER ZHE WITH DESCENDER",
+ ["linebreak"]="al",
+ ["shcode"]=0x0436,
+ ["uccode"]=0x0496,
+ ["unicodeslot"]=0x0497, -- Ò—
+ },
+ [0x0498]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicZDSC",
+ ["description"]="CYRILLIC CAPITAL LETTER ZE WITH DESCENDER",
+ ["lccode"]=0x0499,
+ ["linebreak"]="al",
+ ["shcode"]=0x0417,
+ ["unicodeslot"]=0x0498, -- Ò˜
+ },
+ [0x0499]={
+ ["category"]="ll",
+ ["contextname"]="cyrilliczdsc",
+ ["description"]="CYRILLIC SMALL LETTER ZE WITH DESCENDER",
+ ["linebreak"]="al",
+ ["shcode"]=0x0437,
+ ["uccode"]=0x0498,
+ ["unicodeslot"]=0x0499, -- Ò™
+ },
+ [0x049A]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicKADC",
+ ["description"]="CYRILLIC CAPITAL LETTER KA WITH DESCENDER",
+ ["lccode"]=0x049B,
+ ["linebreak"]="al",
+ ["shcode"]=0x041A,
+ ["unicodeslot"]=0x049A, -- Òš
+ },
+ [0x049B]={
+ ["category"]="ll",
+ ["contextname"]="cyrillickadc",
+ ["description"]="CYRILLIC SMALL LETTER KA WITH DESCENDER",
+ ["linebreak"]="al",
+ ["shcode"]=0x043A,
+ ["uccode"]=0x049A,
+ ["unicodeslot"]=0x049B, -- Ò›
+ },
+ [0x049C]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicKAvertstroke",
+ ["description"]="CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE",
+ ["lccode"]=0x049D,
+ ["linebreak"]="al",
+ ["shcode"]=0x041A,
+ ["unicodeslot"]=0x049C, -- Ҝ
+ },
+ [0x049D]={
+ ["category"]="ll",
+ ["contextname"]="cyrillickavertstroke",
+ ["description"]="CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE",
+ ["linebreak"]="al",
+ ["shcode"]=0x043A,
+ ["uccode"]=0x049C,
+ ["unicodeslot"]=0x049D, -- Ò
+ },
+ [0x049E]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicKAstroke",
+ ["description"]="CYRILLIC CAPITAL LETTER KA WITH STROKE",
+ ["lccode"]=0x049F,
+ ["linebreak"]="al",
+ ["shcode"]=0x041A,
+ ["unicodeslot"]=0x049E, -- Òž
+ },
+ [0x049F]={
+ ["category"]="ll",
+ ["contextname"]="cyrillickastroke",
+ ["description"]="CYRILLIC SMALL LETTER KA WITH STROKE",
+ ["linebreak"]="al",
+ ["shcode"]=0x043A,
+ ["uccode"]=0x049E,
+ ["unicodeslot"]=0x049F, -- ÒŸ
+ },
+ [0x04A0]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicKAbashkir",
+ ["description"]="CYRILLIC CAPITAL LETTER BASHKIR KA",
+ ["lccode"]=0x04A1,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x04A0, -- Ò 
+ },
+ [0x04A1]={
+ ["category"]="ll",
+ ["contextname"]="cyrillickabashkir",
+ ["description"]="CYRILLIC SMALL LETTER BASHKIR KA",
+ ["linebreak"]="al",
+ ["uccode"]=0x04A0,
+ ["unicodeslot"]=0x04A1, -- Ò¡
+ },
+ [0x04A2]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicENDC",
+ ["description"]="CYRILLIC CAPITAL LETTER EN WITH DESCENDER",
+ ["lccode"]=0x04A3,
+ ["linebreak"]="al",
+ ["shcode"]=0x041D,
+ ["unicodeslot"]=0x04A2, -- Ò¢
+ },
+ [0x04A3]={
+ ["category"]="ll",
+ ["contextname"]="cyrillicendc",
+ ["description"]="CYRILLIC SMALL LETTER EN WITH DESCENDER",
+ ["linebreak"]="al",
+ ["shcode"]=0x043D,
+ ["uccode"]=0x04A2,
+ ["unicodeslot"]=0x04A3, -- Ò£
+ },
+ [0x04A4]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicENGHE",
+ ["description"]="CYRILLIC CAPITAL LIGATURE EN GHE",
+ ["lccode"]=0x04A5,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x04A4, -- Ò¤
+ },
+ [0x04A5]={
+ ["category"]="ll",
+ ["contextname"]="cyrillicenghe",
+ ["description"]="CYRILLIC SMALL LIGATURE EN GHE",
+ ["linebreak"]="al",
+ ["uccode"]=0x04A4,
+ ["unicodeslot"]=0x04A5, -- Ò¥
+ },
+ [0x04A6]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicPEmidhook",
+ ["description"]="CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK",
+ ["lccode"]=0x04A7,
+ ["linebreak"]="al",
+ ["shcode"]=0x041F,
+ ["unicodeslot"]=0x04A6, -- Ò¦
+ },
+ [0x04A7]={
+ ["category"]="ll",
+ ["contextname"]="cyrillicpemidhook",
+ ["description"]="CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK",
+ ["linebreak"]="al",
+ ["shcode"]=0x043F,
+ ["uccode"]=0x04A6,
+ ["unicodeslot"]=0x04A7, -- Ò§
+ },
+ [0x04A8]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicHA",
+ ["description"]="CYRILLIC CAPITAL LETTER ABKHASIAN HA",
+ ["lccode"]=0x04A9,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x04A8, -- Ò¨
+ },
+ [0x04A9]={
+ ["category"]="ll",
+ ["contextname"]="cyrillicha",
+ ["description"]="CYRILLIC SMALL LETTER ABKHASIAN HA",
+ ["linebreak"]="al",
+ ["uccode"]=0x04A8,
+ ["unicodeslot"]=0x04A9, -- Ò©
+ },
+ [0x04AA]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicSDSC",
+ ["description"]="CYRILLIC CAPITAL LETTER ES WITH DESCENDER",
+ ["lccode"]=0x04AB,
+ ["linebreak"]="al",
+ ["shcode"]=0x0421,
+ ["unicodeslot"]=0x04AA, -- Òª
+ },
+ [0x04AB]={
+ ["category"]="ll",
+ ["contextname"]="cyrillicsdsc",
+ ["description"]="CYRILLIC SMALL LETTER ES WITH DESCENDER",
+ ["linebreak"]="al",
+ ["shcode"]=0x0441,
+ ["uccode"]=0x04AA,
+ ["unicodeslot"]=0x04AB, -- Ò«
+ },
+ [0x04AC]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicTEDC",
+ ["description"]="CYRILLIC CAPITAL LETTER TE WITH DESCENDER",
+ ["lccode"]=0x04AD,
+ ["linebreak"]="al",
+ ["shcode"]=0x0422,
+ ["unicodeslot"]=0x04AC, -- Ò¬
+ },
+ [0x04AD]={
+ ["category"]="ll",
+ ["contextname"]="cyrillictedc",
+ ["description"]="CYRILLIC SMALL LETTER TE WITH DESCENDER",
+ ["linebreak"]="al",
+ ["shcode"]=0x0442,
+ ["uccode"]=0x04AC,
+ ["unicodeslot"]=0x04AD, -- Ò­
+ },
+ [0x04AE]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicYstr",
+ ["description"]="CYRILLIC CAPITAL LETTER STRAIGHT U",
+ ["lccode"]=0x04AF,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x04AE, -- Ò®
+ },
+ [0x04AF]={
+ ["category"]="ll",
+ ["contextname"]="cyrillicystr",
+ ["description"]="CYRILLIC SMALL LETTER STRAIGHT U",
+ ["linebreak"]="al",
+ ["uccode"]=0x04AE,
+ ["unicodeslot"]=0x04AF, -- Ò¯
+ },
+ [0x04B0]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicYstrstroke",
+ ["description"]="CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE",
+ ["lccode"]=0x04B1,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x04B0, -- Ò°
+ },
+ [0x04B1]={
+ ["category"]="ll",
+ ["contextname"]="cyrillicystrstroke",
+ ["description"]="CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE",
+ ["linebreak"]="al",
+ ["uccode"]=0x04B0,
+ ["unicodeslot"]=0x04B1, -- Ò±
+ },
+ [0x04B2]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicHADC",
+ ["description"]="CYRILLIC CAPITAL LETTER HA WITH DESCENDER",
+ ["lccode"]=0x04B3,
+ ["linebreak"]="al",
+ ["shcode"]=0x0425,
+ ["unicodeslot"]=0x04B2, -- Ò²
+ },
+ [0x04B3]={
+ ["category"]="ll",
+ ["contextname"]="cyrillichadc",
+ ["description"]="CYRILLIC SMALL LETTER HA WITH DESCENDER",
+ ["linebreak"]="al",
+ ["shcode"]=0x0445,
+ ["uccode"]=0x04B2,
+ ["unicodeslot"]=0x04B3, -- Ò³
+ },
+ [0x04B4]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicTETSE",
+ ["description"]="CYRILLIC CAPITAL LIGATURE TE TSE",
+ ["lccode"]=0x04B5,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x04B4, -- Ò´
+ },
+ [0x04B5]={
+ ["category"]="ll",
+ ["contextname"]="cyrillictetse",
+ ["description"]="CYRILLIC SMALL LIGATURE TE TSE",
+ ["linebreak"]="al",
+ ["uccode"]=0x04B4,
+ ["unicodeslot"]=0x04B5, -- Òµ
+ },
+ [0x04B6]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicCHEDC",
+ ["description"]="CYRILLIC CAPITAL LETTER CHE WITH DESCENDER",
+ ["lccode"]=0x04B7,
+ ["linebreak"]="al",
+ ["shcode"]=0x0427,
+ ["unicodeslot"]=0x04B6, -- Ò¶
+ },
+ [0x04B7]={
+ ["category"]="ll",
+ ["contextname"]="cyrillicchedc",
+ ["description"]="CYRILLIC SMALL LETTER CHE WITH DESCENDER",
+ ["linebreak"]="al",
+ ["shcode"]=0x0447,
+ ["uccode"]=0x04B6,
+ ["unicodeslot"]=0x04B7, -- Ò·
+ },
+ [0x04B8]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicCHEvertstroke",
+ ["description"]="CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE",
+ ["lccode"]=0x04B9,
+ ["linebreak"]="al",
+ ["shcode"]=0x0427,
+ ["unicodeslot"]=0x04B8, -- Ò¸
+ },
+ [0x04B9]={
+ ["category"]="ll",
+ ["contextname"]="cyrillicchevertstroke",
+ ["description"]="CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0447,
+ ["uccode"]=0x04B8,
+ ["unicodeslot"]=0x04B9, -- Ò¹
+ },
+ [0x04BA]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicSHHA",
+ ["description"]="CYRILLIC CAPITAL LETTER SHHA",
+ ["lccode"]=0x04BB,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x04BA, -- Òº
+ },
+ [0x04BB]={
+ ["category"]="ll",
+ ["contextname"]="cyrillicshha",
+ ["description"]="CYRILLIC SMALL LETTER SHHA",
+ ["linebreak"]="al",
+ ["uccode"]=0x04BA,
+ ["unicodeslot"]=0x04BB, -- Ò»
+ },
+ [0x04BC]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicCHEabkhasian",
+ ["description"]="CYRILLIC CAPITAL LETTER ABKHASIAN CHE",
+ ["lccode"]=0x04BD,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x04BC, -- Ò¼
+ },
+ [0x04BD]={
+ ["category"]="ll",
+ ["contextname"]="cyrilliccheabkhasian",
+ ["description"]="CYRILLIC SMALL LETTER ABKHASIAN CHE",
+ ["linebreak"]="al",
+ ["uccode"]=0x04BC,
+ ["unicodeslot"]=0x04BD, -- Ò½
+ },
+ [0x04BE]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicCHEDCabkhasian",
+ ["description"]="CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER",
+ ["lccode"]=0x04BF,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x04BE, -- Ò¾
+ },
+ [0x04BF]={
+ ["category"]="ll",
+ ["contextname"]="cyrillicchedcabkhasian",
+ ["description"]="CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER",
+ ["linebreak"]="al",
+ ["uccode"]=0x04BE,
+ ["unicodeslot"]=0x04BF, -- Ò¿
+ },
+ [0x04C0]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicPALOCHKA",
+ ["description"]="CYRILLIC LETTER PALOCHKA",
+ ["lccode"]=0x04CF,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x04C0, -- Ó€
+ },
+ [0x04C1]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicZHEbreve",
+ ["description"]="CYRILLIC CAPITAL LETTER ZHE WITH BREVE",
+ ["lccode"]=0x04C2,
+ ["linebreak"]="al",
+ ["shcode"]=0x0416,
+ ["specials"]={ "char", 0x0416, 0x0306 },
+ ["unicodeslot"]=0x04C1, -- Ó
+ },
+ [0x04C2]={
+ ["category"]="ll",
+ ["contextname"]="cyrilliczhebreve",
+ ["description"]="CYRILLIC SMALL LETTER ZHE WITH BREVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0436,
+ ["specials"]={ "char", 0x0436, 0x0306 },
+ ["uccode"]=0x04C1,
+ ["unicodeslot"]=0x04C2, -- Ó‚
+ },
+ [0x04C3]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicKAhook",
+ ["description"]="CYRILLIC CAPITAL LETTER KA WITH HOOK",
+ ["lccode"]=0x04C4,
+ ["linebreak"]="al",
+ ["shcode"]=0x041A,
+ ["unicodeslot"]=0x04C3, -- Óƒ
+ },
+ [0x04C4]={
+ ["category"]="ll",
+ ["contextname"]="cyrillickahook",
+ ["description"]="CYRILLIC SMALL LETTER KA WITH HOOK",
+ ["linebreak"]="al",
+ ["shcode"]=0x043A,
+ ["uccode"]=0x04C3,
+ ["unicodeslot"]=0x04C4, -- Ó„
+ },
+ [0x04C5]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicELtail",
+ ["description"]="CYRILLIC CAPITAL LETTER EL WITH TAIL",
+ ["lccode"]=0x04C6,
+ ["linebreak"]="al",
+ ["shcode"]=0x041B,
+ ["unicodeslot"]=0x04C5, -- Ó…
+ },
+ [0x04C6]={
+ ["category"]="ll",
+ ["contextname"]="cyrilliceltail",
+ ["description"]="CYRILLIC SMALL LETTER EL WITH TAIL",
+ ["linebreak"]="al",
+ ["shcode"]=0x043B,
+ ["uccode"]=0x04C5,
+ ["unicodeslot"]=0x04C6, -- Ó†
+ },
+ [0x04C7]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicENhook",
+ ["description"]="CYRILLIC CAPITAL LETTER EN WITH HOOK",
+ ["lccode"]=0x04C8,
+ ["linebreak"]="al",
+ ["shcode"]=0x041D,
+ ["unicodeslot"]=0x04C7, -- Ó‡
+ },
+ [0x04C8]={
+ ["category"]="ll",
+ ["contextname"]="cyrillicenhook",
+ ["description"]="CYRILLIC SMALL LETTER EN WITH HOOK",
+ ["linebreak"]="al",
+ ["shcode"]=0x043D,
+ ["uccode"]=0x04C7,
+ ["unicodeslot"]=0x04C8, -- Óˆ
+ },
+ [0x04C9]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicENtail",
+ ["description"]="CYRILLIC CAPITAL LETTER EN WITH TAIL",
+ ["lccode"]=0x04CA,
+ ["linebreak"]="al",
+ ["shcode"]=0x041D,
+ ["unicodeslot"]=0x04C9, -- Ó‰
+ },
+ [0x04CA]={
+ ["category"]="ll",
+ ["contextname"]="cyrillicentail",
+ ["description"]="CYRILLIC SMALL LETTER EN WITH TAIL",
+ ["linebreak"]="al",
+ ["shcode"]=0x043D,
+ ["uccode"]=0x04C9,
+ ["unicodeslot"]=0x04CA, -- ÓŠ
+ },
+ [0x04CB]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicCHEkhakassian",
+ ["description"]="CYRILLIC CAPITAL LETTER KHAKASSIAN CHE",
+ ["lccode"]=0x04CC,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x04CB, -- Ó‹
+ },
+ [0x04CC]={
+ ["category"]="ll",
+ ["contextname"]="cyrillicchekhakassian",
+ ["description"]="CYRILLIC SMALL LETTER KHAKASSIAN CHE",
+ ["linebreak"]="al",
+ ["uccode"]=0x04CB,
+ ["unicodeslot"]=0x04CC, -- ӌ
+ },
+ [0x04CD]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicEMtail",
+ ["description"]="CYRILLIC CAPITAL LETTER EM WITH TAIL",
+ ["lccode"]=0x04CE,
+ ["linebreak"]="al",
+ ["shcode"]=0x041C,
+ ["unicodeslot"]=0x04CD, -- Ó
+ },
+ [0x04CE]={
+ ["category"]="ll",
+ ["contextname"]="cyrillicemtail",
+ ["description"]="CYRILLIC SMALL LETTER EM WITH TAIL",
+ ["linebreak"]="al",
+ ["shcode"]=0x043C,
+ ["uccode"]=0x04CD,
+ ["unicodeslot"]=0x04CE, -- ÓŽ
+ },
+ [0x04CF]={
+ ["category"]="ll",
+ ["description"]="CYRILLIC SMALL LETTER PALOCHKA",
+ ["linebreak"]="al",
+ ["uccode"]=0x04C0,
+ ["unicodeslot"]=0x04CF, -- Ó
+ },
+ [0x04D0]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicAbreve",
+ ["description"]="CYRILLIC CAPITAL LETTER A WITH BREVE",
+ ["lccode"]=0x04D1,
+ ["linebreak"]="al",
+ ["shcode"]=0x0410,
+ ["specials"]={ "char", 0x0410, 0x0306 },
+ ["unicodeslot"]=0x04D0, -- Ó
+ },
+ [0x04D1]={
+ ["category"]="ll",
+ ["contextname"]="cyrillicabreve",
+ ["description"]="CYRILLIC SMALL LETTER A WITH BREVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0430,
+ ["specials"]={ "char", 0x0430, 0x0306 },
+ ["uccode"]=0x04D0,
+ ["unicodeslot"]=0x04D1, -- Ó‘
+ },
+ [0x04D2]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicAdiaeresis",
+ ["description"]="CYRILLIC CAPITAL LETTER A WITH DIAERESIS",
+ ["lccode"]=0x04D3,
+ ["linebreak"]="al",
+ ["shcode"]=0x0410,
+ ["specials"]={ "char", 0x0410, 0x0308 },
+ ["unicodeslot"]=0x04D2, -- Ó’
+ },
+ [0x04D3]={
+ ["category"]="ll",
+ ["contextname"]="cyrillicadiaeresis",
+ ["description"]="CYRILLIC SMALL LETTER A WITH DIAERESIS",
+ ["linebreak"]="al",
+ ["shcode"]=0x0430,
+ ["specials"]={ "char", 0x0430, 0x0308 },
+ ["uccode"]=0x04D2,
+ ["unicodeslot"]=0x04D3, -- Ó“
+ },
+ [0x04D4]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicAE",
+ ["description"]="CYRILLIC CAPITAL LIGATURE A IE",
+ ["lccode"]=0x04D5,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x04D4, -- Ó”
+ },
+ [0x04D5]={
+ ["category"]="ll",
+ ["contextname"]="cyrillicae",
+ ["description"]="CYRILLIC SMALL LIGATURE A IE",
+ ["linebreak"]="al",
+ ["uccode"]=0x04D4,
+ ["unicodeslot"]=0x04D5, -- Ó•
+ },
+ [0x04D6]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicEbreve",
+ ["description"]="CYRILLIC CAPITAL LETTER IE WITH BREVE",
+ ["lccode"]=0x04D7,
+ ["linebreak"]="al",
+ ["shcode"]=0x0415,
+ ["specials"]={ "char", 0x0415, 0x0306 },
+ ["unicodeslot"]=0x04D6, -- Ó–
+ },
+ [0x04D7]={
+ ["category"]="ll",
+ ["contextname"]="cyrillicebreve",
+ ["description"]="CYRILLIC SMALL LETTER IE WITH BREVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0435,
+ ["specials"]={ "char", 0x0435, 0x0306 },
+ ["uccode"]=0x04D6,
+ ["unicodeslot"]=0x04D7, -- Ó—
+ },
+ [0x04D8]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicSCHWA",
+ ["description"]="CYRILLIC CAPITAL LETTER SCHWA",
+ ["lccode"]=0x04D9,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x04D8, -- Ó˜
+ },
+ [0x04D9]={
+ ["adobename"]="afii10846",
+ ["category"]="ll",
+ ["contextname"]="cyrillicschwa",
+ ["description"]="CYRILLIC SMALL LETTER SCHWA",
+ ["linebreak"]="al",
+ ["uccode"]=0x04D8,
+ ["unicodeslot"]=0x04D9, -- Ó™
+ },
+ [0x04DA]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicSCHWAdiaeresis",
+ ["description"]="CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS",
+ ["lccode"]=0x04DB,
+ ["linebreak"]="al",
+ ["shcode"]=0x04D8,
+ ["specials"]={ "char", 0x04D8, 0x0308 },
+ ["unicodeslot"]=0x04DA, -- Óš
+ },
+ [0x04DB]={
+ ["category"]="ll",
+ ["contextname"]="cyrillicschwadiaeresis",
+ ["description"]="CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS",
+ ["linebreak"]="al",
+ ["shcode"]=0x04D9,
+ ["specials"]={ "char", 0x04D9, 0x0308 },
+ ["uccode"]=0x04DA,
+ ["unicodeslot"]=0x04DB, -- Ó›
+ },
+ [0x04DC]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicZHEdiaeresis",
+ ["description"]="CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS",
+ ["lccode"]=0x04DD,
+ ["linebreak"]="al",
+ ["shcode"]=0x0416,
+ ["specials"]={ "char", 0x0416, 0x0308 },
+ ["unicodeslot"]=0x04DC, -- Ӝ
+ },
+ [0x04DD]={
+ ["category"]="ll",
+ ["contextname"]="cyrilliczhediaeresis",
+ ["description"]="CYRILLIC SMALL LETTER ZHE WITH DIAERESIS",
+ ["linebreak"]="al",
+ ["shcode"]=0x0436,
+ ["specials"]={ "char", 0x0436, 0x0308 },
+ ["uccode"]=0x04DC,
+ ["unicodeslot"]=0x04DD, -- Ó
+ },
+ [0x04DE]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicZEdiaeresis",
+ ["description"]="CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS",
+ ["lccode"]=0x04DF,
+ ["linebreak"]="al",
+ ["shcode"]=0x0417,
+ ["specials"]={ "char", 0x0417, 0x0308 },
+ ["unicodeslot"]=0x04DE, -- Óž
+ },
+ [0x04DF]={
+ ["category"]="ll",
+ ["contextname"]="cyrilliczediaeresis",
+ ["description"]="CYRILLIC SMALL LETTER ZE WITH DIAERESIS",
+ ["linebreak"]="al",
+ ["shcode"]=0x0437,
+ ["specials"]={ "char", 0x0437, 0x0308 },
+ ["uccode"]=0x04DE,
+ ["unicodeslot"]=0x04DF, -- ÓŸ
+ },
+ [0x04E0]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicDZEabkhasian",
+ ["description"]="CYRILLIC CAPITAL LETTER ABKHASIAN DZE",
+ ["lccode"]=0x04E1,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x04E0, -- Ó 
+ },
+ [0x04E1]={
+ ["category"]="ll",
+ ["contextname"]="cyrillicdzeabkhasian",
+ ["description"]="CYRILLIC SMALL LETTER ABKHASIAN DZE",
+ ["linebreak"]="al",
+ ["uccode"]=0x04E0,
+ ["unicodeslot"]=0x04E1, -- Ó¡
+ },
+ [0x04E2]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicImacron",
+ ["description"]="CYRILLIC CAPITAL LETTER I WITH MACRON",
+ ["lccode"]=0x04E3,
+ ["linebreak"]="al",
+ ["shcode"]=0x0418,
+ ["specials"]={ "char", 0x0418, 0x0304 },
+ ["unicodeslot"]=0x04E2, -- Ó¢
+ },
+ [0x04E3]={
+ ["category"]="ll",
+ ["contextname"]="cyrillicimacron",
+ ["description"]="CYRILLIC SMALL LETTER I WITH MACRON",
+ ["linebreak"]="al",
+ ["shcode"]=0x0438,
+ ["specials"]={ "char", 0x0438, 0x0304 },
+ ["uccode"]=0x04E2,
+ ["unicodeslot"]=0x04E3, -- Ó£
+ },
+ [0x04E4]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicIdiaeresis",
+ ["description"]="CYRILLIC CAPITAL LETTER I WITH DIAERESIS",
+ ["lccode"]=0x04E5,
+ ["linebreak"]="al",
+ ["shcode"]=0x0418,
+ ["specials"]={ "char", 0x0418, 0x0308 },
+ ["unicodeslot"]=0x04E4, -- Ó¤
+ },
+ [0x04E5]={
+ ["category"]="ll",
+ ["contextname"]="cyrillicidiaeresis",
+ ["description"]="CYRILLIC SMALL LETTER I WITH DIAERESIS",
+ ["linebreak"]="al",
+ ["shcode"]=0x0438,
+ ["specials"]={ "char", 0x0438, 0x0308 },
+ ["uccode"]=0x04E4,
+ ["unicodeslot"]=0x04E5, -- Ó¥
+ },
+ [0x04E6]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicOdiaeresis",
+ ["description"]="CYRILLIC CAPITAL LETTER O WITH DIAERESIS",
+ ["lccode"]=0x04E7,
+ ["linebreak"]="al",
+ ["shcode"]=0x041E,
+ ["specials"]={ "char", 0x041E, 0x0308 },
+ ["unicodeslot"]=0x04E6, -- Ó¦
+ },
+ [0x04E7]={
+ ["category"]="ll",
+ ["contextname"]="cyrillicodiaeresis",
+ ["description"]="CYRILLIC SMALL LETTER O WITH DIAERESIS",
+ ["linebreak"]="al",
+ ["shcode"]=0x043E,
+ ["specials"]={ "char", 0x043E, 0x0308 },
+ ["uccode"]=0x04E6,
+ ["unicodeslot"]=0x04E7, -- Ó§
+ },
+ [0x04E8]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicObarred",
+ ["description"]="CYRILLIC CAPITAL LETTER BARRED O",
+ ["lccode"]=0x04E9,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x04E8, -- Ó¨
+ },
+ [0x04E9]={
+ ["category"]="ll",
+ ["contextname"]="cyrillicobarred",
+ ["description"]="CYRILLIC SMALL LETTER BARRED O",
+ ["linebreak"]="al",
+ ["uccode"]=0x04E8,
+ ["unicodeslot"]=0x04E9, -- Ó©
+ },
+ [0x04EA]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicObarreddiaeresis",
+ ["description"]="CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS",
+ ["lccode"]=0x04EB,
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x04E8, 0x0308 },
+ ["unicodeslot"]=0x04EA, -- Óª
+ },
+ [0x04EB]={
+ ["category"]="ll",
+ ["contextname"]="cyrillicobarreddiaeresis",
+ ["description"]="CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x04E9, 0x0308 },
+ ["uccode"]=0x04EA,
+ ["unicodeslot"]=0x04EB, -- Ó«
+ },
+ [0x04EC]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicEdiaeresis",
+ ["description"]="CYRILLIC CAPITAL LETTER E WITH DIAERESIS",
+ ["lccode"]=0x04ED,
+ ["linebreak"]="al",
+ ["shcode"]=0x042D,
+ ["specials"]={ "char", 0x042D, 0x0308 },
+ ["unicodeslot"]=0x04EC, -- Ó¬
+ },
+ [0x04ED]={
+ ["category"]="ll",
+ ["contextname"]="cyrillicediaeresis",
+ ["description"]="CYRILLIC SMALL LETTER E WITH DIAERESIS",
+ ["linebreak"]="al",
+ ["shcode"]=0x044D,
+ ["specials"]={ "char", 0x044D, 0x0308 },
+ ["uccode"]=0x04EC,
+ ["unicodeslot"]=0x04ED, -- Ó­
+ },
+ [0x04EE]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicUmacron",
+ ["description"]="CYRILLIC CAPITAL LETTER U WITH MACRON",
+ ["lccode"]=0x04EF,
+ ["linebreak"]="al",
+ ["shcode"]=0x0423,
+ ["specials"]={ "char", 0x0423, 0x0304 },
+ ["unicodeslot"]=0x04EE, -- Ó®
+ },
+ [0x04EF]={
+ ["category"]="ll",
+ ["contextname"]="cyrillicumacron",
+ ["description"]="CYRILLIC SMALL LETTER U WITH MACRON",
+ ["linebreak"]="al",
+ ["shcode"]=0x0443,
+ ["specials"]={ "char", 0x0443, 0x0304 },
+ ["uccode"]=0x04EE,
+ ["unicodeslot"]=0x04EF, -- Ó¯
+ },
+ [0x04F0]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicUdiaeresis",
+ ["description"]="CYRILLIC CAPITAL LETTER U WITH DIAERESIS",
+ ["lccode"]=0x04F1,
+ ["linebreak"]="al",
+ ["shcode"]=0x0423,
+ ["specials"]={ "char", 0x0423, 0x0308 },
+ ["unicodeslot"]=0x04F0, -- Ó°
+ },
+ [0x04F1]={
+ ["category"]="ll",
+ ["contextname"]="cyrillicudiaeresis",
+ ["description"]="CYRILLIC SMALL LETTER U WITH DIAERESIS",
+ ["linebreak"]="al",
+ ["shcode"]=0x0443,
+ ["specials"]={ "char", 0x0443, 0x0308 },
+ ["uccode"]=0x04F0,
+ ["unicodeslot"]=0x04F1, -- Ó±
+ },
+ [0x04F2]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicUdoubleacute",
+ ["description"]="CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE",
+ ["lccode"]=0x04F3,
+ ["linebreak"]="al",
+ ["shcode"]=0x0423,
+ ["specials"]={ "char", 0x0423, 0x030B },
+ ["unicodeslot"]=0x04F2, -- Ó²
+ },
+ [0x04F3]={
+ ["category"]="ll",
+ ["contextname"]="cyrillicudoubleacute",
+ ["description"]="CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0443,
+ ["specials"]={ "char", 0x0443, 0x030B },
+ ["uccode"]=0x04F2,
+ ["unicodeslot"]=0x04F3, -- Ó³
+ },
+ [0x04F4]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicCHEdiaeresis",
+ ["description"]="CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS",
+ ["lccode"]=0x04F5,
+ ["linebreak"]="al",
+ ["shcode"]=0x0427,
+ ["specials"]={ "char", 0x0427, 0x0308 },
+ ["unicodeslot"]=0x04F4, -- Ó´
+ },
+ [0x04F5]={
+ ["category"]="ll",
+ ["contextname"]="cyrillicchediaeresis",
+ ["description"]="CYRILLIC SMALL LETTER CHE WITH DIAERESIS",
+ ["linebreak"]="al",
+ ["shcode"]=0x0447,
+ ["specials"]={ "char", 0x0447, 0x0308 },
+ ["uccode"]=0x04F4,
+ ["unicodeslot"]=0x04F5, -- Óµ
+ },
+ [0x04F6]={
+ ["category"]="lu",
+ ["description"]="CYRILLIC CAPITAL LETTER GHE WITH DESCENDER",
+ ["lccode"]=0x04F7,
+ ["linebreak"]="al",
+ ["shcode"]=0x0413,
+ ["unicodeslot"]=0x04F6, -- Ó¶
+ },
+ [0x04F7]={
+ ["category"]="ll",
+ ["description"]="CYRILLIC SMALL LETTER GHE WITH DESCENDER",
+ ["linebreak"]="al",
+ ["shcode"]=0x0433,
+ ["uccode"]=0x04F6,
+ ["unicodeslot"]=0x04F7, -- Ó·
+ },
+ [0x04F8]={
+ ["category"]="lu",
+ ["contextname"]="cyrillicYERUdiaeresis",
+ ["description"]="CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS",
+ ["lccode"]=0x04F9,
+ ["linebreak"]="al",
+ ["shcode"]=0x042B,
+ ["specials"]={ "char", 0x042B, 0x0308 },
+ ["unicodeslot"]=0x04F8, -- Ó¸
+ },
+ [0x04F9]={
+ ["category"]="ll",
+ ["contextname"]="cyrillicyerudiaeresis",
+ ["description"]="CYRILLIC SMALL LETTER YERU WITH DIAERESIS",
+ ["linebreak"]="al",
+ ["shcode"]=0x044B,
+ ["specials"]={ "char", 0x044B, 0x0308 },
+ ["uccode"]=0x04F8,
+ ["unicodeslot"]=0x04F9, -- Ó¹
+ },
+ [0x04FA]={
+ ["category"]="lu",
+ ["description"]="CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK",
+ ["lccode"]=0x04FB,
+ ["linebreak"]="al",
+ ["shcode"]=0x0413,
+ ["unicodeslot"]=0x04FA, -- Óº
+ },
+ [0x04FB]={
+ ["category"]="ll",
+ ["description"]="CYRILLIC SMALL LETTER GHE WITH STROKE AND HOOK",
+ ["linebreak"]="al",
+ ["shcode"]=0x0433,
+ ["uccode"]=0x04FA,
+ ["unicodeslot"]=0x04FB, -- Ó»
+ },
+ [0x04FC]={
+ ["category"]="lu",
+ ["description"]="CYRILLIC CAPITAL LETTER HA WITH HOOK",
+ ["lccode"]=0x04FD,
+ ["linebreak"]="al",
+ ["shcode"]=0x0425,
+ ["unicodeslot"]=0x04FC, -- Ó¼
+ },
+ [0x04FD]={
+ ["category"]="ll",
+ ["description"]="CYRILLIC SMALL LETTER HA WITH HOOK",
+ ["linebreak"]="al",
+ ["shcode"]=0x0445,
+ ["uccode"]=0x04FC,
+ ["unicodeslot"]=0x04FD, -- Ó½
+ },
+ [0x04FE]={
+ ["category"]="lu",
+ ["description"]="CYRILLIC CAPITAL LETTER HA WITH STROKE",
+ ["lccode"]=0x04FF,
+ ["linebreak"]="al",
+ ["shcode"]=0x0425,
+ ["unicodeslot"]=0x04FE, -- Ó¾
+ },
+ [0x04FF]={
+ ["category"]="ll",
+ ["description"]="CYRILLIC SMALL LETTER HA WITH STROKE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0445,
+ ["uccode"]=0x04FE,
+ ["unicodeslot"]=0x04FF, -- Ó¿
+ },
+ [0x0500]={
+ ["category"]="lu",
+ ["description"]="CYRILLIC CAPITAL LETTER KOMI DE",
+ ["lccode"]=0x0501,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0500, -- Ô€
+ },
+ [0x0501]={
+ ["category"]="ll",
+ ["description"]="CYRILLIC SMALL LETTER KOMI DE",
+ ["linebreak"]="al",
+ ["uccode"]=0x0500,
+ ["unicodeslot"]=0x0501, -- Ô
+ },
+ [0x0502]={
+ ["category"]="lu",
+ ["description"]="CYRILLIC CAPITAL LETTER KOMI DJE",
+ ["lccode"]=0x0503,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0502, -- Ô‚
+ },
+ [0x0503]={
+ ["category"]="ll",
+ ["description"]="CYRILLIC SMALL LETTER KOMI DJE",
+ ["linebreak"]="al",
+ ["uccode"]=0x0502,
+ ["unicodeslot"]=0x0503, -- Ôƒ
+ },
+ [0x0504]={
+ ["category"]="lu",
+ ["description"]="CYRILLIC CAPITAL LETTER KOMI ZJE",
+ ["lccode"]=0x0505,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0504, -- Ô„
+ },
+ [0x0505]={
+ ["category"]="ll",
+ ["description"]="CYRILLIC SMALL LETTER KOMI ZJE",
+ ["linebreak"]="al",
+ ["uccode"]=0x0504,
+ ["unicodeslot"]=0x0505, -- Ô…
+ },
+ [0x0506]={
+ ["category"]="lu",
+ ["description"]="CYRILLIC CAPITAL LETTER KOMI DZJE",
+ ["lccode"]=0x0507,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0506, -- Ô†
+ },
+ [0x0507]={
+ ["category"]="ll",
+ ["description"]="CYRILLIC SMALL LETTER KOMI DZJE",
+ ["linebreak"]="al",
+ ["uccode"]=0x0506,
+ ["unicodeslot"]=0x0507, -- Ô‡
+ },
+ [0x0508]={
+ ["category"]="lu",
+ ["description"]="CYRILLIC CAPITAL LETTER KOMI LJE",
+ ["lccode"]=0x0509,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0508, -- Ôˆ
+ },
+ [0x0509]={
+ ["category"]="ll",
+ ["description"]="CYRILLIC SMALL LETTER KOMI LJE",
+ ["linebreak"]="al",
+ ["uccode"]=0x0508,
+ ["unicodeslot"]=0x0509, -- Ô‰
+ },
+ [0x050A]={
+ ["category"]="lu",
+ ["description"]="CYRILLIC CAPITAL LETTER KOMI NJE",
+ ["lccode"]=0x050B,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x050A, -- ÔŠ
+ },
+ [0x050B]={
+ ["category"]="ll",
+ ["description"]="CYRILLIC SMALL LETTER KOMI NJE",
+ ["linebreak"]="al",
+ ["uccode"]=0x050A,
+ ["unicodeslot"]=0x050B, -- Ô‹
+ },
+ [0x050C]={
+ ["category"]="lu",
+ ["description"]="CYRILLIC CAPITAL LETTER KOMI SJE",
+ ["lccode"]=0x050D,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x050C, -- Ԍ
+ },
+ [0x050D]={
+ ["category"]="ll",
+ ["description"]="CYRILLIC SMALL LETTER KOMI SJE",
+ ["linebreak"]="al",
+ ["uccode"]=0x050C,
+ ["unicodeslot"]=0x050D, -- Ô
+ },
+ [0x050E]={
+ ["category"]="lu",
+ ["description"]="CYRILLIC CAPITAL LETTER KOMI TJE",
+ ["lccode"]=0x050F,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x050E, -- ÔŽ
+ },
+ [0x050F]={
+ ["category"]="ll",
+ ["description"]="CYRILLIC SMALL LETTER KOMI TJE",
+ ["linebreak"]="al",
+ ["uccode"]=0x050E,
+ ["unicodeslot"]=0x050F, -- Ô
+ },
+ [0x0510]={
+ ["category"]="lu",
+ ["description"]="CYRILLIC CAPITAL LETTER REVERSED ZE",
+ ["lccode"]=0x0511,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0510, -- Ô
+ },
+ [0x0511]={
+ ["category"]="ll",
+ ["description"]="CYRILLIC SMALL LETTER REVERSED ZE",
+ ["linebreak"]="al",
+ ["uccode"]=0x0510,
+ ["unicodeslot"]=0x0511, -- Ô‘
+ },
+ [0x0512]={
+ ["category"]="lu",
+ ["description"]="CYRILLIC CAPITAL LETTER EL WITH HOOK",
+ ["lccode"]=0x0513,
+ ["linebreak"]="al",
+ ["shcode"]=0x041B,
+ ["unicodeslot"]=0x0512, -- Ô’
+ },
+ [0x0513]={
+ ["category"]="ll",
+ ["description"]="CYRILLIC SMALL LETTER EL WITH HOOK",
+ ["linebreak"]="al",
+ ["shcode"]=0x043B,
+ ["uccode"]=0x0512,
+ ["unicodeslot"]=0x0513, -- Ô“
+ },
+ [0x0531]={
+ ["category"]="lu",
+ ["description"]="ARMENIAN CAPITAL LETTER AYB",
+ ["lccode"]=0x0561,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0531, -- Ô±
+ },
+ [0x0532]={
+ ["category"]="lu",
+ ["description"]="ARMENIAN CAPITAL LETTER BEN",
+ ["lccode"]=0x0562,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0532, -- Ô²
+ },
+ [0x0533]={
+ ["category"]="lu",
+ ["description"]="ARMENIAN CAPITAL LETTER GIM",
+ ["lccode"]=0x0563,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0533, -- Ô³
+ },
+ [0x0534]={
+ ["category"]="lu",
+ ["description"]="ARMENIAN CAPITAL LETTER DA",
+ ["lccode"]=0x0564,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0534, -- Ô´
+ },
+ [0x0535]={
+ ["category"]="lu",
+ ["description"]="ARMENIAN CAPITAL LETTER ECH",
+ ["lccode"]=0x0565,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0535, -- Ôµ
+ },
+ [0x0536]={
+ ["category"]="lu",
+ ["description"]="ARMENIAN CAPITAL LETTER ZA",
+ ["lccode"]=0x0566,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0536, -- Ô¶
+ },
+ [0x0537]={
+ ["category"]="lu",
+ ["description"]="ARMENIAN CAPITAL LETTER EH",
+ ["lccode"]=0x0567,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0537, -- Ô·
+ },
+ [0x0538]={
+ ["category"]="lu",
+ ["description"]="ARMENIAN CAPITAL LETTER ET",
+ ["lccode"]=0x0568,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0538, -- Ô¸
+ },
+ [0x0539]={
+ ["category"]="lu",
+ ["description"]="ARMENIAN CAPITAL LETTER TO",
+ ["lccode"]=0x0569,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0539, -- Ô¹
+ },
+ [0x053A]={
+ ["category"]="lu",
+ ["description"]="ARMENIAN CAPITAL LETTER ZHE",
+ ["lccode"]=0x056A,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x053A, -- Ôº
+ },
+ [0x053B]={
+ ["category"]="lu",
+ ["description"]="ARMENIAN CAPITAL LETTER INI",
+ ["lccode"]=0x056B,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x053B, -- Ô»
+ },
+ [0x053C]={
+ ["category"]="lu",
+ ["description"]="ARMENIAN CAPITAL LETTER LIWN",
+ ["lccode"]=0x056C,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x053C, -- Ô¼
+ },
+ [0x053D]={
+ ["category"]="lu",
+ ["description"]="ARMENIAN CAPITAL LETTER XEH",
+ ["lccode"]=0x056D,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x053D, -- Ô½
+ },
+ [0x053E]={
+ ["category"]="lu",
+ ["description"]="ARMENIAN CAPITAL LETTER CA",
+ ["lccode"]=0x056E,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x053E, -- Ô¾
+ },
+ [0x053F]={
+ ["category"]="lu",
+ ["description"]="ARMENIAN CAPITAL LETTER KEN",
+ ["lccode"]=0x056F,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x053F, -- Ô¿
+ },
+ [0x0540]={
+ ["category"]="lu",
+ ["description"]="ARMENIAN CAPITAL LETTER HO",
+ ["lccode"]=0x0570,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0540, -- Õ€
+ },
+ [0x0541]={
+ ["category"]="lu",
+ ["description"]="ARMENIAN CAPITAL LETTER JA",
+ ["lccode"]=0x0571,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0541, -- Õ
+ },
+ [0x0542]={
+ ["category"]="lu",
+ ["description"]="ARMENIAN CAPITAL LETTER GHAD",
+ ["lccode"]=0x0572,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0542, -- Õ‚
+ },
+ [0x0543]={
+ ["category"]="lu",
+ ["description"]="ARMENIAN CAPITAL LETTER CHEH",
+ ["lccode"]=0x0573,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0543, -- Õƒ
+ },
+ [0x0544]={
+ ["category"]="lu",
+ ["description"]="ARMENIAN CAPITAL LETTER MEN",
+ ["lccode"]=0x0574,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0544, -- Õ„
+ },
+ [0x0545]={
+ ["category"]="lu",
+ ["description"]="ARMENIAN CAPITAL LETTER YI",
+ ["lccode"]=0x0575,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0545, -- Õ…
+ },
+ [0x0546]={
+ ["category"]="lu",
+ ["description"]="ARMENIAN CAPITAL LETTER NOW",
+ ["lccode"]=0x0576,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0546, -- Õ†
+ },
+ [0x0547]={
+ ["category"]="lu",
+ ["description"]="ARMENIAN CAPITAL LETTER SHA",
+ ["lccode"]=0x0577,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0547, -- Õ‡
+ },
+ [0x0548]={
+ ["category"]="lu",
+ ["description"]="ARMENIAN CAPITAL LETTER VO",
+ ["lccode"]=0x0578,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0548, -- Õˆ
+ },
+ [0x0549]={
+ ["category"]="lu",
+ ["description"]="ARMENIAN CAPITAL LETTER CHA",
+ ["lccode"]=0x0579,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0549, -- Õ‰
+ },
+ [0x054A]={
+ ["category"]="lu",
+ ["description"]="ARMENIAN CAPITAL LETTER PEH",
+ ["lccode"]=0x057A,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x054A, -- ÕŠ
+ },
+ [0x054B]={
+ ["category"]="lu",
+ ["description"]="ARMENIAN CAPITAL LETTER JHEH",
+ ["lccode"]=0x057B,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x054B, -- Õ‹
+ },
+ [0x054C]={
+ ["category"]="lu",
+ ["description"]="ARMENIAN CAPITAL LETTER RA",
+ ["lccode"]=0x057C,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x054C, -- Ռ
+ },
+ [0x054D]={
+ ["category"]="lu",
+ ["description"]="ARMENIAN CAPITAL LETTER SEH",
+ ["lccode"]=0x057D,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x054D, -- Õ
+ },
+ [0x054E]={
+ ["category"]="lu",
+ ["description"]="ARMENIAN CAPITAL LETTER VEW",
+ ["lccode"]=0x057E,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x054E, -- ÕŽ
+ },
+ [0x054F]={
+ ["category"]="lu",
+ ["description"]="ARMENIAN CAPITAL LETTER TIWN",
+ ["lccode"]=0x057F,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x054F, -- Õ
+ },
+ [0x0550]={
+ ["category"]="lu",
+ ["description"]="ARMENIAN CAPITAL LETTER REH",
+ ["lccode"]=0x0580,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0550, -- Õ
+ },
+ [0x0551]={
+ ["category"]="lu",
+ ["description"]="ARMENIAN CAPITAL LETTER CO",
+ ["lccode"]=0x0581,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0551, -- Õ‘
+ },
+ [0x0552]={
+ ["category"]="lu",
+ ["description"]="ARMENIAN CAPITAL LETTER YIWN",
+ ["lccode"]=0x0582,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0552, -- Õ’
+ },
+ [0x0553]={
+ ["category"]="lu",
+ ["description"]="ARMENIAN CAPITAL LETTER PIWR",
+ ["lccode"]=0x0583,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0553, -- Õ“
+ },
+ [0x0554]={
+ ["category"]="lu",
+ ["description"]="ARMENIAN CAPITAL LETTER KEH",
+ ["lccode"]=0x0584,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0554, -- Õ”
+ },
+ [0x0555]={
+ ["category"]="lu",
+ ["description"]="ARMENIAN CAPITAL LETTER OH",
+ ["lccode"]=0x0585,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0555, -- Õ•
+ },
+ [0x0556]={
+ ["category"]="lu",
+ ["description"]="ARMENIAN CAPITAL LETTER FEH",
+ ["lccode"]=0x0586,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0556, -- Õ–
+ },
+ [0x0559]={
+ ["category"]="lm",
+ ["description"]="ARMENIAN MODIFIER LETTER LEFT HALF RING",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0559, -- Õ™
+ },
+ [0x055A]={
+ ["category"]="po",
+ ["description"]="ARMENIAN APOSTROPHE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x055A, -- Õš
+ },
+ [0x055B]={
+ ["category"]="po",
+ ["description"]="ARMENIAN EMPHASIS MARK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x055B, -- Õ›
+ },
+ [0x055C]={
+ ["category"]="po",
+ ["description"]="ARMENIAN EXCLAMATION MARK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x055C, -- ՜
+ },
+ [0x055D]={
+ ["category"]="po",
+ ["description"]="ARMENIAN COMMA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x055D, -- Õ
+ },
+ [0x055E]={
+ ["category"]="po",
+ ["description"]="ARMENIAN QUESTION MARK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x055E, -- Õž
+ },
+ [0x055F]={
+ ["category"]="po",
+ ["description"]="ARMENIAN ABBREVIATION MARK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x055F, -- ÕŸ
+ },
+ [0x0561]={
+ ["category"]="ll",
+ ["description"]="ARMENIAN SMALL LETTER AYB",
+ ["linebreak"]="al",
+ ["uccode"]=0x0531,
+ ["unicodeslot"]=0x0561, -- Õ¡
+ },
+ [0x0562]={
+ ["category"]="ll",
+ ["description"]="ARMENIAN SMALL LETTER BEN",
+ ["linebreak"]="al",
+ ["uccode"]=0x0532,
+ ["unicodeslot"]=0x0562, -- Õ¢
+ },
+ [0x0563]={
+ ["category"]="ll",
+ ["description"]="ARMENIAN SMALL LETTER GIM",
+ ["linebreak"]="al",
+ ["uccode"]=0x0533,
+ ["unicodeslot"]=0x0563, -- Õ£
+ },
+ [0x0564]={
+ ["category"]="ll",
+ ["description"]="ARMENIAN SMALL LETTER DA",
+ ["linebreak"]="al",
+ ["uccode"]=0x0534,
+ ["unicodeslot"]=0x0564, -- Õ¤
+ },
+ [0x0565]={
+ ["category"]="ll",
+ ["description"]="ARMENIAN SMALL LETTER ECH",
+ ["linebreak"]="al",
+ ["uccode"]=0x0535,
+ ["unicodeslot"]=0x0565, -- Õ¥
+ },
+ [0x0566]={
+ ["category"]="ll",
+ ["description"]="ARMENIAN SMALL LETTER ZA",
+ ["linebreak"]="al",
+ ["uccode"]=0x0536,
+ ["unicodeslot"]=0x0566, -- Õ¦
+ },
+ [0x0567]={
+ ["category"]="ll",
+ ["description"]="ARMENIAN SMALL LETTER EH",
+ ["linebreak"]="al",
+ ["uccode"]=0x0537,
+ ["unicodeslot"]=0x0567, -- Õ§
+ },
+ [0x0568]={
+ ["category"]="ll",
+ ["description"]="ARMENIAN SMALL LETTER ET",
+ ["linebreak"]="al",
+ ["uccode"]=0x0538,
+ ["unicodeslot"]=0x0568, -- Õ¨
+ },
+ [0x0569]={
+ ["category"]="ll",
+ ["description"]="ARMENIAN SMALL LETTER TO",
+ ["linebreak"]="al",
+ ["uccode"]=0x0539,
+ ["unicodeslot"]=0x0569, -- Õ©
+ },
+ [0x056A]={
+ ["category"]="ll",
+ ["description"]="ARMENIAN SMALL LETTER ZHE",
+ ["linebreak"]="al",
+ ["uccode"]=0x053A,
+ ["unicodeslot"]=0x056A, -- Õª
+ },
+ [0x056B]={
+ ["category"]="ll",
+ ["description"]="ARMENIAN SMALL LETTER INI",
+ ["linebreak"]="al",
+ ["uccode"]=0x053B,
+ ["unicodeslot"]=0x056B, -- Õ«
+ },
+ [0x056C]={
+ ["category"]="ll",
+ ["description"]="ARMENIAN SMALL LETTER LIWN",
+ ["linebreak"]="al",
+ ["uccode"]=0x053C,
+ ["unicodeslot"]=0x056C, -- Õ¬
+ },
+ [0x056D]={
+ ["category"]="ll",
+ ["description"]="ARMENIAN SMALL LETTER XEH",
+ ["linebreak"]="al",
+ ["uccode"]=0x053D,
+ ["unicodeslot"]=0x056D, -- Õ­
+ },
+ [0x056E]={
+ ["category"]="ll",
+ ["description"]="ARMENIAN SMALL LETTER CA",
+ ["linebreak"]="al",
+ ["uccode"]=0x053E,
+ ["unicodeslot"]=0x056E, -- Õ®
+ },
+ [0x056F]={
+ ["category"]="ll",
+ ["description"]="ARMENIAN SMALL LETTER KEN",
+ ["linebreak"]="al",
+ ["uccode"]=0x053F,
+ ["unicodeslot"]=0x056F, -- Õ¯
+ },
+ [0x0570]={
+ ["category"]="ll",
+ ["description"]="ARMENIAN SMALL LETTER HO",
+ ["linebreak"]="al",
+ ["uccode"]=0x0540,
+ ["unicodeslot"]=0x0570, -- Õ°
+ },
+ [0x0571]={
+ ["category"]="ll",
+ ["description"]="ARMENIAN SMALL LETTER JA",
+ ["linebreak"]="al",
+ ["uccode"]=0x0541,
+ ["unicodeslot"]=0x0571, -- Õ±
+ },
+ [0x0572]={
+ ["category"]="ll",
+ ["description"]="ARMENIAN SMALL LETTER GHAD",
+ ["linebreak"]="al",
+ ["uccode"]=0x0542,
+ ["unicodeslot"]=0x0572, -- Õ²
+ },
+ [0x0573]={
+ ["category"]="ll",
+ ["description"]="ARMENIAN SMALL LETTER CHEH",
+ ["linebreak"]="al",
+ ["uccode"]=0x0543,
+ ["unicodeslot"]=0x0573, -- Õ³
+ },
+ [0x0574]={
+ ["category"]="ll",
+ ["description"]="ARMENIAN SMALL LETTER MEN",
+ ["linebreak"]="al",
+ ["uccode"]=0x0544,
+ ["unicodeslot"]=0x0574, -- Õ´
+ },
+ [0x0575]={
+ ["category"]="ll",
+ ["description"]="ARMENIAN SMALL LETTER YI",
+ ["linebreak"]="al",
+ ["uccode"]=0x0545,
+ ["unicodeslot"]=0x0575, -- Õµ
+ },
+ [0x0576]={
+ ["category"]="ll",
+ ["description"]="ARMENIAN SMALL LETTER NOW",
+ ["linebreak"]="al",
+ ["uccode"]=0x0546,
+ ["unicodeslot"]=0x0576, -- Õ¶
+ },
+ [0x0577]={
+ ["category"]="ll",
+ ["description"]="ARMENIAN SMALL LETTER SHA",
+ ["linebreak"]="al",
+ ["uccode"]=0x0547,
+ ["unicodeslot"]=0x0577, -- Õ·
+ },
+ [0x0578]={
+ ["category"]="ll",
+ ["description"]="ARMENIAN SMALL LETTER VO",
+ ["linebreak"]="al",
+ ["uccode"]=0x0548,
+ ["unicodeslot"]=0x0578, -- Õ¸
+ },
+ [0x0579]={
+ ["category"]="ll",
+ ["description"]="ARMENIAN SMALL LETTER CHA",
+ ["linebreak"]="al",
+ ["uccode"]=0x0549,
+ ["unicodeslot"]=0x0579, -- Õ¹
+ },
+ [0x057A]={
+ ["category"]="ll",
+ ["description"]="ARMENIAN SMALL LETTER PEH",
+ ["linebreak"]="al",
+ ["uccode"]=0x054A,
+ ["unicodeslot"]=0x057A, -- Õº
+ },
+ [0x057B]={
+ ["category"]="ll",
+ ["description"]="ARMENIAN SMALL LETTER JHEH",
+ ["linebreak"]="al",
+ ["uccode"]=0x054B,
+ ["unicodeslot"]=0x057B, -- Õ»
+ },
+ [0x057C]={
+ ["category"]="ll",
+ ["description"]="ARMENIAN SMALL LETTER RA",
+ ["linebreak"]="al",
+ ["uccode"]=0x054C,
+ ["unicodeslot"]=0x057C, -- Õ¼
+ },
+ [0x057D]={
+ ["category"]="ll",
+ ["description"]="ARMENIAN SMALL LETTER SEH",
+ ["linebreak"]="al",
+ ["uccode"]=0x054D,
+ ["unicodeslot"]=0x057D, -- Õ½
+ },
+ [0x057E]={
+ ["category"]="ll",
+ ["description"]="ARMENIAN SMALL LETTER VEW",
+ ["linebreak"]="al",
+ ["uccode"]=0x054E,
+ ["unicodeslot"]=0x057E, -- Õ¾
+ },
+ [0x057F]={
+ ["category"]="ll",
+ ["description"]="ARMENIAN SMALL LETTER TIWN",
+ ["linebreak"]="al",
+ ["uccode"]=0x054F,
+ ["unicodeslot"]=0x057F, -- Õ¿
+ },
+ [0x0580]={
+ ["category"]="ll",
+ ["description"]="ARMENIAN SMALL LETTER REH",
+ ["linebreak"]="al",
+ ["uccode"]=0x0550,
+ ["unicodeslot"]=0x0580, -- Ö€
+ },
+ [0x0581]={
+ ["category"]="ll",
+ ["description"]="ARMENIAN SMALL LETTER CO",
+ ["linebreak"]="al",
+ ["uccode"]=0x0551,
+ ["unicodeslot"]=0x0581, -- Ö
+ },
+ [0x0582]={
+ ["category"]="ll",
+ ["description"]="ARMENIAN SMALL LETTER YIWN",
+ ["linebreak"]="al",
+ ["uccode"]=0x0552,
+ ["unicodeslot"]=0x0582, -- Ö‚
+ },
+ [0x0583]={
+ ["category"]="ll",
+ ["description"]="ARMENIAN SMALL LETTER PIWR",
+ ["linebreak"]="al",
+ ["uccode"]=0x0553,
+ ["unicodeslot"]=0x0583, -- Öƒ
+ },
+ [0x0584]={
+ ["category"]="ll",
+ ["description"]="ARMENIAN SMALL LETTER KEH",
+ ["linebreak"]="al",
+ ["uccode"]=0x0554,
+ ["unicodeslot"]=0x0584, -- Ö„
+ },
+ [0x0585]={
+ ["category"]="ll",
+ ["description"]="ARMENIAN SMALL LETTER OH",
+ ["linebreak"]="al",
+ ["uccode"]=0x0555,
+ ["unicodeslot"]=0x0585, -- Ö…
+ },
+ [0x0586]={
+ ["category"]="ll",
+ ["description"]="ARMENIAN SMALL LETTER FEH",
+ ["linebreak"]="al",
+ ["uccode"]=0x0556,
+ ["unicodeslot"]=0x0586, -- Ö†
+ },
+ [0x0587]={
+ ["category"]="ll",
+ ["description"]="ARMENIAN SMALL LIGATURE ECH YIWN",
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x0565, 0x0582 },
+ ["unicodeslot"]=0x0587, -- Ö‡
+ },
+ [0x0589]={
+ ["category"]="po",
+ ["description"]="ARMENIAN FULL STOP",
+ ["linebreak"]="is",
+ ["unicodeslot"]=0x0589, -- Ö‰
+ },
+ [0x058A]={
+ ["category"]="pd",
+ ["description"]="ARMENIAN HYPHEN",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x058A, -- ÖŠ
+ },
+ [0x0591]={
+ ["category"]="mn",
+ ["description"]="HEBREW ACCENT ETNAHTA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0591, -- Ö‘
+ },
+ [0x0592]={
+ ["category"]="mn",
+ ["description"]="HEBREW ACCENT SEGOL",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0592, -- Ö’
+ },
+ [0x0593]={
+ ["category"]="mn",
+ ["description"]="HEBREW ACCENT SHALSHELET",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0593, -- Ö“
+ },
+ [0x0594]={
+ ["category"]="mn",
+ ["description"]="HEBREW ACCENT ZAQEF QATAN",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0594, -- Ö”
+ },
+ [0x0595]={
+ ["category"]="mn",
+ ["description"]="HEBREW ACCENT ZAQEF GADOL",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0595, -- Ö•
+ },
+ [0x0596]={
+ ["category"]="mn",
+ ["description"]="HEBREW ACCENT TIPEHA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0596, -- Ö–
+ },
+ [0x0597]={
+ ["category"]="mn",
+ ["description"]="HEBREW ACCENT REVIA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0597, -- Ö—
+ },
+ [0x0598]={
+ ["category"]="mn",
+ ["description"]="HEBREW ACCENT ZARQA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0598, -- Ö˜
+ },
+ [0x0599]={
+ ["category"]="mn",
+ ["description"]="HEBREW ACCENT PASHTA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0599, -- Ö™
+ },
+ [0x059A]={
+ ["category"]="mn",
+ ["description"]="HEBREW ACCENT YETIV",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x059A, -- Öš
+ },
+ [0x059B]={
+ ["category"]="mn",
+ ["description"]="HEBREW ACCENT TEVIR",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x059B, -- Ö›
+ },
+ [0x059C]={
+ ["category"]="mn",
+ ["description"]="HEBREW ACCENT GERESH",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x059C, -- ֜
+ },
+ [0x059D]={
+ ["category"]="mn",
+ ["description"]="HEBREW ACCENT GERESH MUQDAM",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x059D, -- Ö
+ },
+ [0x059E]={
+ ["category"]="mn",
+ ["description"]="HEBREW ACCENT GERSHAYIM",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x059E, -- Öž
+ },
+ [0x059F]={
+ ["category"]="mn",
+ ["description"]="HEBREW ACCENT QARNEY PARA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x059F, -- ÖŸ
+ },
+ [0x05A0]={
+ ["category"]="mn",
+ ["description"]="HEBREW ACCENT TELISHA GEDOLA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x05A0, -- Ö 
+ },
+ [0x05A1]={
+ ["category"]="mn",
+ ["description"]="HEBREW ACCENT PAZER",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x05A1, -- Ö¡
+ },
+ [0x05A2]={
+ ["category"]="mn",
+ ["description"]="HEBREW ACCENT ATNAH HAFUKH",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x05A2, -- Ö¢
+ },
+ [0x05A3]={
+ ["category"]="mn",
+ ["description"]="HEBREW ACCENT MUNAH",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x05A3, -- Ö£
+ },
+ [0x05A4]={
+ ["category"]="mn",
+ ["description"]="HEBREW ACCENT MAHAPAKH",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x05A4, -- Ö¤
+ },
+ [0x05A5]={
+ ["category"]="mn",
+ ["description"]="HEBREW ACCENT MERKHA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x05A5, -- Ö¥
+ },
+ [0x05A6]={
+ ["category"]="mn",
+ ["description"]="HEBREW ACCENT MERKHA KEFULA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x05A6, -- Ö¦
+ },
+ [0x05A7]={
+ ["category"]="mn",
+ ["description"]="HEBREW ACCENT DARGA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x05A7, -- Ö§
+ },
+ [0x05A8]={
+ ["category"]="mn",
+ ["description"]="HEBREW ACCENT QADMA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x05A8, -- Ö¨
+ },
+ [0x05A9]={
+ ["category"]="mn",
+ ["description"]="HEBREW ACCENT TELISHA QETANA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x05A9, -- Ö©
+ },
+ [0x05AA]={
+ ["category"]="mn",
+ ["description"]="HEBREW ACCENT YERAH BEN YOMO",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x05AA, -- Öª
+ },
+ [0x05AB]={
+ ["category"]="mn",
+ ["description"]="HEBREW ACCENT OLE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x05AB, -- Ö«
+ },
+ [0x05AC]={
+ ["category"]="mn",
+ ["description"]="HEBREW ACCENT ILUY",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x05AC, -- Ö¬
+ },
+ [0x05AD]={
+ ["category"]="mn",
+ ["description"]="HEBREW ACCENT DEHI",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x05AD, -- Ö­
+ },
+ [0x05AE]={
+ ["category"]="mn",
+ ["description"]="HEBREW ACCENT ZINOR",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x05AE, -- Ö®
+ },
+ [0x05AF]={
+ ["category"]="mn",
+ ["description"]="HEBREW MARK MASORA CIRCLE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x05AF, -- Ö¯
+ },
+ [0x05B0]={
+ ["adobename"]="afii57799",
+ ["category"]="mn",
+ ["description"]="HEBREW POINT SHEVA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x05B0, -- Ö°
+ },
+ [0x05B1]={
+ ["adobename"]="afii57801",
+ ["category"]="mn",
+ ["description"]="HEBREW POINT HATAF SEGOL",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x05B1, -- Ö±
+ },
+ [0x05B2]={
+ ["adobename"]="afii57800",
+ ["category"]="mn",
+ ["description"]="HEBREW POINT HATAF PATAH",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x05B2, -- Ö²
+ },
+ [0x05B3]={
+ ["adobename"]="afii57802",
+ ["category"]="mn",
+ ["description"]="HEBREW POINT HATAF QAMATS",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x05B3, -- Ö³
+ },
+ [0x05B4]={
+ ["adobename"]="afii57793",
+ ["category"]="mn",
+ ["description"]="HEBREW POINT HIRIQ",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x05B4, -- Ö´
+ },
+ [0x05B5]={
+ ["adobename"]="afii57794",
+ ["category"]="mn",
+ ["description"]="HEBREW POINT TSERE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x05B5, -- Öµ
+ },
+ [0x05B6]={
+ ["adobename"]="afii57795",
+ ["category"]="mn",
+ ["description"]="HEBREW POINT SEGOL",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x05B6, -- Ö¶
+ },
+ [0x05B7]={
+ ["adobename"]="afii57798",
+ ["category"]="mn",
+ ["description"]="HEBREW POINT PATAH",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x05B7, -- Ö·
+ },
+ [0x05B8]={
+ ["adobename"]="afii57797",
+ ["category"]="mn",
+ ["description"]="HEBREW POINT QAMATS",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x05B8, -- Ö¸
+ },
+ [0x05B9]={
+ ["adobename"]="afii57806",
+ ["category"]="mn",
+ ["description"]="HEBREW POINT HOLAM",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x05B9, -- Ö¹
+ },
+ [0x05BA]={
+ ["category"]="mn",
+ ["description"]="HEBREW POINT HOLAM HASER FOR VAV",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x05BA, -- Öº
+ },
+ [0x05BB]={
+ ["adobename"]="afii57796",
+ ["category"]="mn",
+ ["description"]="HEBREW POINT QUBUTS",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x05BB, -- Ö»
+ },
+ [0x05BC]={
+ ["adobename"]="afii57807",
+ ["category"]="mn",
+ ["description"]="HEBREW POINT DAGESH OR MAPIQ",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x05BC, -- Ö¼
+ },
+ [0x05BD]={
+ ["adobename"]="afii57839",
+ ["category"]="mn",
+ ["description"]="HEBREW POINT METEG",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x05BD, -- Ö½
+ },
+ [0x05BE]={
+ ["adobename"]="afii57645",
+ ["category"]="po",
+ ["description"]="HEBREW PUNCTUATION MAQAF",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x05BE, -- Ö¾
+ },
+ [0x05BF]={
+ ["adobename"]="afii57841",
+ ["category"]="mn",
+ ["description"]="HEBREW POINT RAFE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x05BF, -- Ö¿
+ },
+ [0x05C0]={
+ ["adobename"]="afii57842",
+ ["category"]="po",
+ ["description"]="HEBREW PUNCTUATION PASEQ",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x05C0, -- ×€
+ },
+ [0x05C1]={
+ ["adobename"]="afii57804",
+ ["category"]="mn",
+ ["description"]="HEBREW POINT SHIN DOT",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x05C1, -- ×
+ },
+ [0x05C2]={
+ ["adobename"]="afii57803",
+ ["category"]="mn",
+ ["description"]="HEBREW POINT SIN DOT",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x05C2, -- ׂ
+ },
+ [0x05C3]={
+ ["adobename"]="afii57658",
+ ["category"]="po",
+ ["description"]="HEBREW PUNCTUATION SOF PASUQ",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x05C3, -- ׃
+ },
+ [0x05C4]={
+ ["category"]="mn",
+ ["description"]="HEBREW MARK UPPER DOT",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x05C4, -- ׄ
+ },
+ [0x05C5]={
+ ["category"]="mn",
+ ["description"]="HEBREW MARK LOWER DOT",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x05C5, -- ×…
+ },
+ [0x05C6]={
+ ["category"]="po",
+ ["description"]="HEBREW PUNCTUATION NUN HAFUKHA",
+ ["linebreak"]="ex",
+ ["unicodeslot"]=0x05C6, -- ׆
+ },
+ [0x05C7]={
+ ["category"]="mn",
+ ["description"]="HEBREW POINT QAMATS QATAN",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x05C7, -- ׇ
+ },
+ [0x05D0]={
+ ["adobename"]="afii57664",
+ ["category"]="lo",
+ ["contextname"]="hebrewAlef",
+ ["description"]="HEBREW LETTER ALEF",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x05D0, -- ×
+ },
+ [0x05D1]={
+ ["adobename"]="afii57665",
+ ["category"]="lo",
+ ["contextname"]="hebrewBet",
+ ["description"]="HEBREW LETTER BET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x05D1, -- ב
+ },
+ [0x05D2]={
+ ["adobename"]="afii57666",
+ ["category"]="lo",
+ ["contextname"]="hebrewGimel",
+ ["description"]="HEBREW LETTER GIMEL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x05D2, -- ×’
+ },
+ [0x05D3]={
+ ["adobename"]="afii57667",
+ ["category"]="lo",
+ ["contextname"]="hebrewDalet",
+ ["description"]="HEBREW LETTER DALET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x05D3, -- ד
+ },
+ [0x05D4]={
+ ["adobename"]="afii57668",
+ ["category"]="lo",
+ ["contextname"]="hebrewHe",
+ ["description"]="HEBREW LETTER HE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x05D4, -- ×”
+ },
+ [0x05D5]={
+ ["adobename"]="afii57669",
+ ["category"]="lo",
+ ["contextname"]="hebrewVav",
+ ["description"]="HEBREW LETTER VAV",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x05D5, -- ו
+ },
+ [0x05D6]={
+ ["adobename"]="afii57670",
+ ["category"]="lo",
+ ["contextname"]="hebrewZayin",
+ ["description"]="HEBREW LETTER ZAYIN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x05D6, -- ×–
+ },
+ [0x05D7]={
+ ["adobename"]="afii57671",
+ ["category"]="lo",
+ ["contextname"]="hebrewHet",
+ ["description"]="HEBREW LETTER HET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x05D7, -- ×—
+ },
+ [0x05D8]={
+ ["adobename"]="afii57672",
+ ["category"]="lo",
+ ["contextname"]="hebrewTet",
+ ["description"]="HEBREW LETTER TET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x05D8, -- ט
+ },
+ [0x05D9]={
+ ["adobename"]="afii57673",
+ ["category"]="lo",
+ ["contextname"]="hebrewYod",
+ ["description"]="HEBREW LETTER YOD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x05D9, -- ×™
+ },
+ [0x05DA]={
+ ["adobename"]="afii57674",
+ ["category"]="lo",
+ ["contextname"]="hebrewKaffinal",
+ ["description"]="HEBREW LETTER FINAL KAF",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x05DA, -- ך
+ },
+ [0x05DB]={
+ ["adobename"]="afii57675",
+ ["category"]="lo",
+ ["contextname"]="hebrewKaf",
+ ["description"]="HEBREW LETTER KAF",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x05DB, -- ×›
+ },
+ [0x05DC]={
+ ["adobename"]="afii57676",
+ ["category"]="lo",
+ ["contextname"]="hebrewLamed",
+ ["description"]="HEBREW LETTER LAMED",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x05DC, -- ל
+ },
+ [0x05DD]={
+ ["adobename"]="afii57677",
+ ["category"]="lo",
+ ["contextname"]="hebrewMemfinal",
+ ["description"]="HEBREW LETTER FINAL MEM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x05DD, -- ×
+ },
+ [0x05DE]={
+ ["adobename"]="afii57678",
+ ["category"]="lo",
+ ["contextname"]="hebrewMem",
+ ["description"]="HEBREW LETTER MEM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x05DE, -- מ
+ },
+ [0x05DF]={
+ ["adobename"]="afii57679",
+ ["category"]="lo",
+ ["contextname"]="hebrewNunfinal",
+ ["description"]="HEBREW LETTER FINAL NUN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x05DF, -- ן
+ },
+ [0x05E0]={
+ ["adobename"]="afii57680",
+ ["category"]="lo",
+ ["contextname"]="hebrewNun",
+ ["description"]="HEBREW LETTER NUN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x05E0, -- × 
+ },
+ [0x05E1]={
+ ["adobename"]="afii57681",
+ ["category"]="lo",
+ ["contextname"]="hebrewSamekh",
+ ["description"]="HEBREW LETTER SAMEKH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x05E1, -- ס
+ },
+ [0x05E2]={
+ ["adobename"]="afii57682",
+ ["category"]="lo",
+ ["contextname"]="hebrewAyin",
+ ["description"]="HEBREW LETTER AYIN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x05E2, -- ×¢
+ },
+ [0x05E3]={
+ ["adobename"]="afii57683",
+ ["category"]="lo",
+ ["contextname"]="hebrewPefinal",
+ ["description"]="HEBREW LETTER FINAL PE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x05E3, -- ×£
+ },
+ [0x05E4]={
+ ["adobename"]="afii57684",
+ ["category"]="lo",
+ ["contextname"]="hebrewPe",
+ ["description"]="HEBREW LETTER PE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x05E4, -- פ
+ },
+ [0x05E5]={
+ ["adobename"]="afii57685",
+ ["category"]="lo",
+ ["contextname"]="hebrewTsadifinal",
+ ["description"]="HEBREW LETTER FINAL TSADI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x05E5, -- ×¥
+ },
+ [0x05E6]={
+ ["adobename"]="afii57686",
+ ["category"]="lo",
+ ["contextname"]="hebrewTsadi",
+ ["description"]="HEBREW LETTER TSADI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x05E6, -- צ
+ },
+ [0x05E7]={
+ ["adobename"]="afii57687",
+ ["category"]="lo",
+ ["contextname"]="hebrewQof",
+ ["description"]="HEBREW LETTER QOF",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x05E7, -- ק
+ },
+ [0x05E8]={
+ ["adobename"]="afii57688",
+ ["category"]="lo",
+ ["contextname"]="hebrewResh",
+ ["description"]="HEBREW LETTER RESH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x05E8, -- ר
+ },
+ [0x05E9]={
+ ["adobename"]="afii57689",
+ ["category"]="lo",
+ ["contextname"]="hebrewShin",
+ ["description"]="HEBREW LETTER SHIN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x05E9, -- ש
+ },
+ [0x05EA]={
+ ["adobename"]="afii57690",
+ ["category"]="lo",
+ ["contextname"]="hebrewTav",
+ ["description"]="HEBREW LETTER TAV",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x05EA, -- ת
+ },
+ [0x05F0]={
+ ["adobename"]="afii57716",
+ ["category"]="lo",
+ ["description"]="HEBREW LIGATURE YIDDISH DOUBLE VAV",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x05F0, -- ×°
+ },
+ [0x05F1]={
+ ["adobename"]="afii57717",
+ ["category"]="lo",
+ ["description"]="HEBREW LIGATURE YIDDISH VAV YOD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x05F1, -- ×±
+ },
+ [0x05F2]={
+ ["adobename"]="afii57718",
+ ["category"]="lo",
+ ["description"]="HEBREW LIGATURE YIDDISH DOUBLE YOD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x05F2, -- ײ
+ },
+ [0x05F3]={
+ ["category"]="po",
+ ["description"]="HEBREW PUNCTUATION GERESH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x05F3, -- ׳
+ },
+ [0x05F4]={
+ ["category"]="po",
+ ["description"]="HEBREW PUNCTUATION GERSHAYIM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x05F4, -- ×´
+ },
+ [0x0600]={
+ ["category"]="cf",
+ ["description"]="ARABIC NUMBER SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0600, -- ؀
+ },
+ [0x0601]={
+ ["category"]="cf",
+ ["description"]="ARABIC SIGN SANAH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0601, -- Ø
+ },
+ [0x0602]={
+ ["category"]="cf",
+ ["description"]="ARABIC FOOTNOTE MARKER",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0602, -- Ø‚
+ },
+ [0x0603]={
+ ["category"]="cf",
+ ["description"]="ARABIC SIGN SAFHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0603, -- ؃
+ },
+ [0x060B]={
+ ["category"]="sc",
+ ["description"]="AFGHANI SIGN",
+ ["linebreak"]="po",
+ ["unicodeslot"]=0x060B, -- Ø‹
+ },
+ [0x060C]={
+ ["adobename"]="afii57388",
+ ["category"]="po",
+ ["description"]="ARABIC COMMA",
+ ["linebreak"]="ex",
+ ["unicodeslot"]=0x060C, -- ،
+ },
+ [0x060D]={
+ ["category"]="po",
+ ["description"]="ARABIC DATE SEPARATOR",
+ ["linebreak"]="is",
+ ["unicodeslot"]=0x060D, -- Ø
+ },
+ [0x060E]={
+ ["category"]="so",
+ ["description"]="ARABIC POETIC VERSE SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x060E, -- ØŽ
+ },
+ [0x060F]={
+ ["category"]="so",
+ ["description"]="ARABIC SIGN MISRA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x060F, -- Ø
+ },
+ [0x0610]={
+ ["category"]="mn",
+ ["description"]="ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0610, -- Ø
+ },
+ [0x0611]={
+ ["category"]="mn",
+ ["description"]="ARABIC SIGN ALAYHE ASSALLAM",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0611, -- Ø‘
+ },
+ [0x0612]={
+ ["category"]="mn",
+ ["description"]="ARABIC SIGN RAHMATULLAH ALAYHE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0612, -- Ø’
+ },
+ [0x0613]={
+ ["category"]="mn",
+ ["description"]="ARABIC SIGN RADI ALLAHOU ANHU",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0613, -- Ø“
+ },
+ [0x0614]={
+ ["category"]="mn",
+ ["description"]="ARABIC SIGN TAKHALLUS",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0614, -- Ø”
+ },
+ [0x0615]={
+ ["category"]="mn",
+ ["description"]="ARABIC SMALL HIGH TAH",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0615, -- Ø•
+ },
+ [0x061B]={
+ ["adobename"]="afii57403",
+ ["category"]="po",
+ ["description"]="ARABIC SEMICOLON",
+ ["linebreak"]="ex",
+ ["unicodeslot"]=0x061B, -- Ø›
+ },
+ [0x061E]={
+ ["category"]="po",
+ ["description"]="ARABIC TRIPLE DOT PUNCTUATION MARK",
+ ["linebreak"]="ex",
+ ["unicodeslot"]=0x061E, -- Øž
+ },
+ [0x061F]={
+ ["adobename"]="afii57407",
+ ["category"]="po",
+ ["description"]="ARABIC QUESTION MARK",
+ ["linebreak"]="ex",
+ ["unicodeslot"]=0x061F, -- ØŸ
+ },
+ [0x0621]={
+ ["adobename"]="afii57409",
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER HAMZA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0621, -- Ø¡
+ },
+ [0x0622]={
+ ["adobename"]="afii57410",
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER ALEF WITH MADDA ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0627,
+ ["specials"]={ "char", 0x0627, 0x0653 },
+ ["unicodeslot"]=0x0622, -- آ
+ },
+ [0x0623]={
+ ["adobename"]="afii57411",
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER ALEF WITH HAMZA ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0627,
+ ["specials"]={ "char", 0x0627, 0x0654 },
+ ["unicodeslot"]=0x0623, -- أ
+ },
+ [0x0624]={
+ ["adobename"]="afii57412",
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER WAW WITH HAMZA ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0648,
+ ["specials"]={ "char", 0x0648, 0x0654 },
+ ["unicodeslot"]=0x0624, -- ؤ
+ },
+ [0x0625]={
+ ["adobename"]="afii57413",
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER ALEF WITH HAMZA BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x0627,
+ ["specials"]={ "char", 0x0627, 0x0655 },
+ ["unicodeslot"]=0x0625, -- إ
+ },
+ [0x0626]={
+ ["adobename"]="afii57414",
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER YEH WITH HAMZA ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x064A,
+ ["specials"]={ "char", 0x064A, 0x0654 },
+ ["unicodeslot"]=0x0626, -- ئ
+ },
+ [0x0627]={
+ ["adobename"]="afii57415",
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER ALEF",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0627, -- ا
+ },
+ [0x0628]={
+ ["adobename"]="afii57416",
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER BEH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0628, -- ب
+ },
+ [0x0629]={
+ ["adobename"]="afii57417",
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER TEH MARBUTA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0629, -- Ø©
+ },
+ [0x062A]={
+ ["adobename"]="afii57418",
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER TEH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x062A, -- ت
+ },
+ [0x062B]={
+ ["adobename"]="afii57419",
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER THEH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x062B, -- Ø«
+ },
+ [0x062C]={
+ ["adobename"]="afii57420",
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER JEEM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x062C, -- ج
+ },
+ [0x062D]={
+ ["adobename"]="afii57421",
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER HAH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x062D, -- Ø­
+ },
+ [0x062E]={
+ ["adobename"]="afii57422",
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER KHAH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x062E, -- Ø®
+ },
+ [0x062F]={
+ ["adobename"]="afii57423",
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER DAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x062F, -- د
+ },
+ [0x0630]={
+ ["adobename"]="afii57424",
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER THAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0630, -- Ø°
+ },
+ [0x0631]={
+ ["adobename"]="afii57425",
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER REH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0631, -- ر
+ },
+ [0x0632]={
+ ["adobename"]="afii57426",
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER ZAIN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0632, -- ز
+ },
+ [0x0633]={
+ ["adobename"]="afii57427",
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER SEEN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0633, -- س
+ },
+ [0x0634]={
+ ["adobename"]="afii57428",
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER SHEEN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0634, -- Ø´
+ },
+ [0x0635]={
+ ["adobename"]="afii57429",
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER SAD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0635, -- ص
+ },
+ [0x0636]={
+ ["adobename"]="afii57430",
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER DAD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0636, -- ض
+ },
+ [0x0637]={
+ ["adobename"]="afii57431",
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER TAH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0637, -- Ø·
+ },
+ [0x0638]={
+ ["adobename"]="afii57432",
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER ZAH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0638, -- ظ
+ },
+ [0x0639]={
+ ["adobename"]="afii57433",
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER AIN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0639, -- ع
+ },
+ [0x063A]={
+ ["adobename"]="afii57434",
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER GHAIN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x063A, -- غ
+ },
+ [0x0640]={
+ ["adobename"]="afii57440",
+ ["category"]="lm",
+ ["description"]="ARABIC TATWEEL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0640, -- Ù€
+ },
+ [0x0641]={
+ ["adobename"]="afii57441",
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER FEH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0641, -- Ù
+ },
+ [0x0642]={
+ ["adobename"]="afii57442",
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER QAF",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0642, -- Ù‚
+ },
+ [0x0643]={
+ ["adobename"]="afii57443",
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER KAF",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0643, -- Ùƒ
+ },
+ [0x0644]={
+ ["adobename"]="afii57444",
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER LAM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0644, -- Ù„
+ },
+ [0x0645]={
+ ["adobename"]="afii57445",
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER MEEM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0645, -- Ù…
+ },
+ [0x0646]={
+ ["adobename"]="afii57446",
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER NOON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0646, -- Ù†
+ },
+ [0x0647]={
+ ["adobename"]="afii57470",
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER HEH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0647, -- Ù‡
+ },
+ [0x0648]={
+ ["adobename"]="afii57448",
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER WAW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0648, -- Ùˆ
+ },
+ [0x0649]={
+ ["adobename"]="afii57449",
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER ALEF MAKSURA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0649, -- Ù‰
+ },
+ [0x064A]={
+ ["adobename"]="afii57450",
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER YEH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x064A, -- ÙŠ
+ },
+ [0x064B]={
+ ["adobename"]="afii57451",
+ ["category"]="mn",
+ ["description"]="ARABIC FATHATAN",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x064B, -- Ù‹
+ },
+ [0x064C]={
+ ["adobename"]="afii57452",
+ ["category"]="mn",
+ ["description"]="ARABIC DAMMATAN",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x064C, -- ٌ
+ },
+ [0x064D]={
+ ["adobename"]="afii57453",
+ ["category"]="mn",
+ ["description"]="ARABIC KASRATAN",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x064D, -- Ù
+ },
+ [0x064E]={
+ ["adobename"]="afii57454",
+ ["category"]="mn",
+ ["description"]="ARABIC FATHA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x064E, -- ÙŽ
+ },
+ [0x064F]={
+ ["adobename"]="afii57455",
+ ["category"]="mn",
+ ["description"]="ARABIC DAMMA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x064F, -- Ù
+ },
+ [0x0650]={
+ ["adobename"]="afii57456",
+ ["category"]="mn",
+ ["description"]="ARABIC KASRA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0650, -- Ù
+ },
+ [0x0651]={
+ ["adobename"]="afii57457",
+ ["category"]="mn",
+ ["description"]="ARABIC SHADDA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0651, -- Ù‘
+ },
+ [0x0652]={
+ ["adobename"]="afii57458",
+ ["category"]="mn",
+ ["description"]="ARABIC SUKUN",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0652, -- Ù’
+ },
+ [0x0653]={
+ ["category"]="mn",
+ ["description"]="ARABIC MADDAH ABOVE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0653, -- Ù“
+ },
+ [0x0654]={
+ ["category"]="mn",
+ ["description"]="ARABIC HAMZA ABOVE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0654, -- Ù”
+ },
+ [0x0655]={
+ ["category"]="mn",
+ ["description"]="ARABIC HAMZA BELOW",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0655, -- Ù•
+ },
+ [0x0656]={
+ ["category"]="mn",
+ ["description"]="ARABIC SUBSCRIPT ALEF",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0656, -- Ù–
+ },
+ [0x0657]={
+ ["category"]="mn",
+ ["description"]="ARABIC INVERTED DAMMA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0657, -- Ù—
+ },
+ [0x0658]={
+ ["category"]="mn",
+ ["description"]="ARABIC MARK NOON GHUNNA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0658, -- Ù˜
+ },
+ [0x0659]={
+ ["category"]="mn",
+ ["description"]="ARABIC ZWARAKAY",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0659, -- Ù™
+ },
+ [0x065A]={
+ ["category"]="mn",
+ ["description"]="ARABIC VOWEL SIGN SMALL V ABOVE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x065A, -- Ùš
+ },
+ [0x065B]={
+ ["category"]="mn",
+ ["description"]="ARABIC VOWEL SIGN INVERTED SMALL V ABOVE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x065B, -- Ù›
+ },
+ [0x065C]={
+ ["category"]="mn",
+ ["description"]="ARABIC VOWEL SIGN DOT BELOW",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x065C, -- ٜ
+ },
+ [0x065D]={
+ ["category"]="mn",
+ ["description"]="ARABIC REVERSED DAMMA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x065D, -- Ù
+ },
+ [0x065E]={
+ ["category"]="mn",
+ ["description"]="ARABIC FATHA WITH TWO DOTS",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x065E, -- Ùž
+ },
+ [0x0660]={
+ ["adobename"]="afii57392",
+ ["category"]="nd",
+ ["description"]="ARABIC-INDIC DIGIT ZERO",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0660, -- Ù 
+ },
+ [0x0661]={
+ ["adobename"]="afii57393",
+ ["category"]="nd",
+ ["description"]="ARABIC-INDIC DIGIT ONE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0661, -- Ù¡
+ },
+ [0x0662]={
+ ["adobename"]="afii57394",
+ ["category"]="nd",
+ ["description"]="ARABIC-INDIC DIGIT TWO",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0662, -- Ù¢
+ },
+ [0x0663]={
+ ["adobename"]="afii57395",
+ ["category"]="nd",
+ ["description"]="ARABIC-INDIC DIGIT THREE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0663, -- Ù£
+ },
+ [0x0664]={
+ ["adobename"]="afii57396",
+ ["category"]="nd",
+ ["description"]="ARABIC-INDIC DIGIT FOUR",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0664, -- Ù¤
+ },
+ [0x0665]={
+ ["adobename"]="afii57397",
+ ["category"]="nd",
+ ["description"]="ARABIC-INDIC DIGIT FIVE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0665, -- Ù¥
+ },
+ [0x0666]={
+ ["adobename"]="afii57398",
+ ["category"]="nd",
+ ["description"]="ARABIC-INDIC DIGIT SIX",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0666, -- Ù¦
+ },
+ [0x0667]={
+ ["adobename"]="afii57399",
+ ["category"]="nd",
+ ["description"]="ARABIC-INDIC DIGIT SEVEN",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0667, -- Ù§
+ },
+ [0x0668]={
+ ["adobename"]="afii57400",
+ ["category"]="nd",
+ ["description"]="ARABIC-INDIC DIGIT EIGHT",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0668, -- Ù¨
+ },
+ [0x0669]={
+ ["adobename"]="afii57401",
+ ["category"]="nd",
+ ["description"]="ARABIC-INDIC DIGIT NINE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0669, -- Ù©
+ },
+ [0x066A]={
+ ["adobename"]="afii57381",
+ ["category"]="po",
+ ["description"]="ARABIC PERCENT SIGN",
+ ["linebreak"]="ex",
+ ["unicodeslot"]=0x066A, -- Ùª
+ },
+ [0x066B]={
+ ["category"]="po",
+ ["description"]="ARABIC DECIMAL SEPARATOR",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x066B, -- Ù«
+ },
+ [0x066C]={
+ ["category"]="po",
+ ["description"]="ARABIC THOUSANDS SEPARATOR",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x066C, -- Ù¬
+ },
+ [0x066D]={
+ ["adobename"]="afii63167",
+ ["category"]="po",
+ ["description"]="ARABIC FIVE POINTED STAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x066D, -- Ù­
+ },
+ [0x066E]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER DOTLESS BEH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x066E, -- Ù®
+ },
+ [0x066F]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER DOTLESS QAF",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x066F, -- Ù¯
+ },
+ [0x0670]={
+ ["category"]="mn",
+ ["description"]="ARABIC LETTER SUPERSCRIPT ALEF",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0670, -- Ù°
+ },
+ [0x0671]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER ALEF WASLA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0671, -- Ù±
+ },
+ [0x0672]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0627,
+ ["unicodeslot"]=0x0672, -- Ù²
+ },
+ [0x0673]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER ALEF WITH WAVY HAMZA BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x0627,
+ ["unicodeslot"]=0x0673, -- Ù³
+ },
+ [0x0674]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER HIGH HAMZA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0674, -- Ù´
+ },
+ [0x0675]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER HIGH HAMZA ALEF",
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x0627, 0x0674 },
+ ["unicodeslot"]=0x0675, -- Ùµ
+ },
+ [0x0676]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER HIGH HAMZA WAW",
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x0648, 0x0674 },
+ ["unicodeslot"]=0x0676, -- Ù¶
+ },
+ [0x0677]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER U WITH HAMZA ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x06C7,
+ ["specials"]={ "compat", 0x06C7, 0x0674 },
+ ["unicodeslot"]=0x0677, -- Ù·
+ },
+ [0x0678]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER HIGH HAMZA YEH",
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x064A, 0x0674 },
+ ["unicodeslot"]=0x0678, -- Ù¸
+ },
+ [0x0679]={
+ ["adobename"]="afii57511",
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER TTEH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0679, -- Ù¹
+ },
+ [0x067A]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER TTEHEH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x067A, -- Ùº
+ },
+ [0x067B]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER BEEH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x067B, -- Ù»
+ },
+ [0x067C]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER TEH WITH RING",
+ ["linebreak"]="al",
+ ["shcode"]=0x062A,
+ ["unicodeslot"]=0x067C, -- Ù¼
+ },
+ [0x067D]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS",
+ ["linebreak"]="al",
+ ["shcode"]=0x062A,
+ ["unicodeslot"]=0x067D, -- Ù½
+ },
+ [0x067E]={
+ ["adobename"]="afii57506",
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER PEH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x067E, -- Ù¾
+ },
+ [0x067F]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER TEHEH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x067F, -- Ù¿
+ },
+ [0x0680]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER BEHEH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0680, -- Ú€
+ },
+ [0x0681]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER HAH WITH HAMZA ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x062D,
+ ["unicodeslot"]=0x0681, -- Ú
+ },
+ [0x0682]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x062D,
+ ["unicodeslot"]=0x0682, -- Ú‚
+ },
+ [0x0683]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER NYEH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0683, -- Úƒ
+ },
+ [0x0684]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER DYEH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0684, -- Ú„
+ },
+ [0x0685]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER HAH WITH THREE DOTS ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x062D,
+ ["unicodeslot"]=0x0685, -- Ú…
+ },
+ [0x0686]={
+ ["adobename"]="afii57507",
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER TCHEH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0686, -- Ú†
+ },
+ [0x0687]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER TCHEHEH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0687, -- Ú‡
+ },
+ [0x0688]={
+ ["adobename"]="afii57512",
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER DDAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0688, -- Úˆ
+ },
+ [0x0689]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER DAL WITH RING",
+ ["linebreak"]="al",
+ ["shcode"]=0x062F,
+ ["unicodeslot"]=0x0689, -- Ú‰
+ },
+ [0x068A]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER DAL WITH DOT BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x062F,
+ ["unicodeslot"]=0x068A, -- ÚŠ
+ },
+ [0x068B]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH",
+ ["linebreak"]="al",
+ ["shcode"]=0x062F,
+ ["unicodeslot"]=0x068B, -- Ú‹
+ },
+ [0x068C]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER DAHAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x068C, -- ڌ
+ },
+ [0x068D]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER DDAHAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x068D, -- Ú
+ },
+ [0x068E]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER DUL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x068E, -- ÚŽ
+ },
+ [0x068F]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS",
+ ["linebreak"]="al",
+ ["shcode"]=0x062F,
+ ["unicodeslot"]=0x068F, -- Ú
+ },
+ [0x0690]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER DAL WITH FOUR DOTS ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x062F,
+ ["unicodeslot"]=0x0690, -- Ú
+ },
+ [0x0691]={
+ ["adobename"]="afii57513",
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER RREH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0691, -- Ú‘
+ },
+ [0x0692]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER REH WITH SMALL V",
+ ["linebreak"]="al",
+ ["shcode"]=0x0631,
+ ["unicodeslot"]=0x0692, -- Ú’
+ },
+ [0x0693]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER REH WITH RING",
+ ["linebreak"]="al",
+ ["shcode"]=0x0631,
+ ["unicodeslot"]=0x0693, -- Ú“
+ },
+ [0x0694]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER REH WITH DOT BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x0631,
+ ["unicodeslot"]=0x0694, -- Ú”
+ },
+ [0x0695]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER REH WITH SMALL V BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x0631,
+ ["unicodeslot"]=0x0695, -- Ú•
+ },
+ [0x0696]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0631,
+ ["unicodeslot"]=0x0696, -- Ú–
+ },
+ [0x0697]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER REH WITH TWO DOTS ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0631,
+ ["unicodeslot"]=0x0697, -- Ú—
+ },
+ [0x0698]={
+ ["adobename"]="afii57508",
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER JEH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0698, -- Ú˜
+ },
+ [0x0699]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER REH WITH FOUR DOTS ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0631,
+ ["unicodeslot"]=0x0699, -- Ú™
+ },
+ [0x069A]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0633,
+ ["unicodeslot"]=0x069A, -- Úš
+ },
+ [0x069B]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER SEEN WITH THREE DOTS BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x0633,
+ ["unicodeslot"]=0x069B, -- Ú›
+ },
+ [0x069C]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0633,
+ ["unicodeslot"]=0x069C, -- ڜ
+ },
+ [0x069D]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER SAD WITH TWO DOTS BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x0635,
+ ["unicodeslot"]=0x069D, -- Ú
+ },
+ [0x069E]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER SAD WITH THREE DOTS ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0635,
+ ["unicodeslot"]=0x069E, -- Úž
+ },
+ [0x069F]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER TAH WITH THREE DOTS ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0637,
+ ["unicodeslot"]=0x069F, -- ÚŸ
+ },
+ [0x06A0]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER AIN WITH THREE DOTS ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0639,
+ ["unicodeslot"]=0x06A0, -- Ú 
+ },
+ [0x06A1]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER DOTLESS FEH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x06A1, -- Ú¡
+ },
+ [0x06A2]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER FEH WITH DOT MOVED BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x0641,
+ ["unicodeslot"]=0x06A2, -- Ú¢
+ },
+ [0x06A3]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER FEH WITH DOT BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x0641,
+ ["unicodeslot"]=0x06A3, -- Ú£
+ },
+ [0x06A4]={
+ ["adobename"]="afii57505",
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER VEH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x06A4, -- Ú¤
+ },
+ [0x06A5]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER FEH WITH THREE DOTS BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x0641,
+ ["unicodeslot"]=0x06A5, -- Ú¥
+ },
+ [0x06A6]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER PEHEH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x06A6, -- Ú¦
+ },
+ [0x06A7]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER QAF WITH DOT ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0642,
+ ["unicodeslot"]=0x06A7, -- Ú§
+ },
+ [0x06A8]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER QAF WITH THREE DOTS ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0642,
+ ["unicodeslot"]=0x06A8, -- Ú¨
+ },
+ [0x06A9]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER KEHEH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x06A9, -- Ú©
+ },
+ [0x06AA]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER SWASH KAF",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x06AA, -- Úª
+ },
+ [0x06AB]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER KAF WITH RING",
+ ["linebreak"]="al",
+ ["shcode"]=0x0643,
+ ["unicodeslot"]=0x06AB, -- Ú«
+ },
+ [0x06AC]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER KAF WITH DOT ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0643,
+ ["unicodeslot"]=0x06AC, -- Ú¬
+ },
+ [0x06AD]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER NG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x06AD, -- Ú­
+ },
+ [0x06AE]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER KAF WITH THREE DOTS BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x0643,
+ ["unicodeslot"]=0x06AE, -- Ú®
+ },
+ [0x06AF]={
+ ["adobename"]="afii57509",
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER GAF",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x06AF, -- Ú¯
+ },
+ [0x06B0]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER GAF WITH RING",
+ ["linebreak"]="al",
+ ["shcode"]=0x06AF,
+ ["unicodeslot"]=0x06B0, -- Ú°
+ },
+ [0x06B1]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER NGOEH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x06B1, -- Ú±
+ },
+ [0x06B2]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER GAF WITH TWO DOTS BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x06AF,
+ ["unicodeslot"]=0x06B2, -- Ú²
+ },
+ [0x06B3]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER GUEH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x06B3, -- Ú³
+ },
+ [0x06B4]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER GAF WITH THREE DOTS ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x06AF,
+ ["unicodeslot"]=0x06B4, -- Ú´
+ },
+ [0x06B5]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER LAM WITH SMALL V",
+ ["linebreak"]="al",
+ ["shcode"]=0x0644,
+ ["unicodeslot"]=0x06B5, -- Úµ
+ },
+ [0x06B6]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER LAM WITH DOT ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0644,
+ ["unicodeslot"]=0x06B6, -- Ú¶
+ },
+ [0x06B7]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER LAM WITH THREE DOTS ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0644,
+ ["unicodeslot"]=0x06B7, -- Ú·
+ },
+ [0x06B8]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER LAM WITH THREE DOTS BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x0644,
+ ["unicodeslot"]=0x06B8, -- Ú¸
+ },
+ [0x06B9]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER NOON WITH DOT BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x0646,
+ ["unicodeslot"]=0x06B9, -- Ú¹
+ },
+ [0x06BA]={
+ ["adobename"]="afii57514",
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER NOON GHUNNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x06BA, -- Úº
+ },
+ [0x06BB]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER RNOON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x06BB, -- Ú»
+ },
+ [0x06BC]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER NOON WITH RING",
+ ["linebreak"]="al",
+ ["shcode"]=0x0646,
+ ["unicodeslot"]=0x06BC, -- Ú¼
+ },
+ [0x06BD]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER NOON WITH THREE DOTS ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0646,
+ ["unicodeslot"]=0x06BD, -- Ú½
+ },
+ [0x06BE]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER HEH DOACHASHMEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x06BE, -- Ú¾
+ },
+ [0x06BF]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER TCHEH WITH DOT ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0686,
+ ["unicodeslot"]=0x06BF, -- Ú¿
+ },
+ [0x06C0]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER HEH WITH YEH ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0647,
+ ["specials"]={ "char", 0x06D5, 0x0654 },
+ ["unicodeslot"]=0x06C0, -- Û€
+ },
+ [0x06C1]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER HEH GOAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x06C1, -- Û
+ },
+ [0x06C2]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER HEH GOAL WITH HAMZA ABOVE",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x06C1, 0x0654 },
+ ["unicodeslot"]=0x06C2, -- Û‚
+ },
+ [0x06C3]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER TEH MARBUTA GOAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x06C3, -- Ûƒ
+ },
+ [0x06C4]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER WAW WITH RING",
+ ["linebreak"]="al",
+ ["shcode"]=0x0648,
+ ["unicodeslot"]=0x06C4, -- Û„
+ },
+ [0x06C5]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER KIRGHIZ OE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x06C5, -- Û…
+ },
+ [0x06C6]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER OE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x06C6, -- Û†
+ },
+ [0x06C7]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER U",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x06C7, -- Û‡
+ },
+ [0x06C8]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER YU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x06C8, -- Ûˆ
+ },
+ [0x06C9]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER KIRGHIZ YU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x06C9, -- Û‰
+ },
+ [0x06CA]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER WAW WITH TWO DOTS ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0648,
+ ["unicodeslot"]=0x06CA, -- ÛŠ
+ },
+ [0x06CB]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER VE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x06CB, -- Û‹
+ },
+ [0x06CC]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER FARSI YEH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x06CC, -- ی
+ },
+ [0x06CD]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER YEH WITH TAIL",
+ ["linebreak"]="al",
+ ["shcode"]=0x064A,
+ ["unicodeslot"]=0x06CD, -- Û
+ },
+ [0x06CE]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER YEH WITH SMALL V",
+ ["linebreak"]="al",
+ ["shcode"]=0x064A,
+ ["unicodeslot"]=0x06CE, -- ÛŽ
+ },
+ [0x06CF]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER WAW WITH DOT ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0648,
+ ["unicodeslot"]=0x06CF, -- Û
+ },
+ [0x06D0]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x06D0, -- Û
+ },
+ [0x06D1]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER YEH WITH THREE DOTS BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x064A,
+ ["unicodeslot"]=0x06D1, -- Û‘
+ },
+ [0x06D2]={
+ ["adobename"]="afii57519",
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER YEH BARREE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x06D2, -- Û’
+ },
+ [0x06D3]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER YEH BARREE WITH HAMZA ABOVE",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x06D2, 0x0654 },
+ ["unicodeslot"]=0x06D3, -- Û“
+ },
+ [0x06D4]={
+ ["category"]="po",
+ ["description"]="ARABIC FULL STOP",
+ ["linebreak"]="ex",
+ ["unicodeslot"]=0x06D4, -- Û”
+ },
+ [0x06D5]={
+ ["adobename"]="afii57534",
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER AE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x06D5, -- Û•
+ },
+ [0x06D6]={
+ ["category"]="mn",
+ ["description"]="ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x06D6, -- Û–
+ },
+ [0x06D7]={
+ ["category"]="mn",
+ ["description"]="ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x06D7, -- Û—
+ },
+ [0x06D8]={
+ ["category"]="mn",
+ ["description"]="ARABIC SMALL HIGH MEEM INITIAL FORM",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x06D8, -- Û˜
+ },
+ [0x06D9]={
+ ["category"]="mn",
+ ["description"]="ARABIC SMALL HIGH LAM ALEF",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x06D9, -- Û™
+ },
+ [0x06DA]={
+ ["category"]="mn",
+ ["description"]="ARABIC SMALL HIGH JEEM",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x06DA, -- Ûš
+ },
+ [0x06DB]={
+ ["category"]="mn",
+ ["description"]="ARABIC SMALL HIGH THREE DOTS",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x06DB, -- Û›
+ },
+ [0x06DC]={
+ ["category"]="mn",
+ ["description"]="ARABIC SMALL HIGH SEEN",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x06DC, -- ۜ
+ },
+ [0x06DD]={
+ ["category"]="cf",
+ ["description"]="ARABIC END OF AYAH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x06DD, -- Û
+ },
+ [0x06DE]={
+ ["category"]="me",
+ ["description"]="ARABIC START OF RUB EL HIZB",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x06DE, -- Ûž
+ },
+ [0x06DF]={
+ ["category"]="mn",
+ ["description"]="ARABIC SMALL HIGH ROUNDED ZERO",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x06DF, -- ÛŸ
+ },
+ [0x06E0]={
+ ["category"]="mn",
+ ["description"]="ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x06E0, -- Û 
+ },
+ [0x06E1]={
+ ["category"]="mn",
+ ["description"]="ARABIC SMALL HIGH DOTLESS HEAD OF KHAH",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x06E1, -- Û¡
+ },
+ [0x06E2]={
+ ["category"]="mn",
+ ["description"]="ARABIC SMALL HIGH MEEM ISOLATED FORM",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x06E2, -- Û¢
+ },
+ [0x06E3]={
+ ["category"]="mn",
+ ["description"]="ARABIC SMALL LOW SEEN",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x06E3, -- Û£
+ },
+ [0x06E4]={
+ ["category"]="mn",
+ ["description"]="ARABIC SMALL HIGH MADDA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x06E4, -- Û¤
+ },
+ [0x06E5]={
+ ["category"]="lm",
+ ["description"]="ARABIC SMALL WAW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x06E5, -- Û¥
+ },
+ [0x06E6]={
+ ["category"]="lm",
+ ["description"]="ARABIC SMALL YEH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x06E6, -- Û¦
+ },
+ [0x06E7]={
+ ["category"]="mn",
+ ["description"]="ARABIC SMALL HIGH YEH",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x06E7, -- Û§
+ },
+ [0x06E8]={
+ ["category"]="mn",
+ ["description"]="ARABIC SMALL HIGH NOON",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x06E8, -- Û¨
+ },
+ [0x06E9]={
+ ["category"]="so",
+ ["description"]="ARABIC PLACE OF SAJDAH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x06E9, -- Û©
+ },
+ [0x06EA]={
+ ["category"]="mn",
+ ["description"]="ARABIC EMPTY CENTRE LOW STOP",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x06EA, -- Ûª
+ },
+ [0x06EB]={
+ ["category"]="mn",
+ ["description"]="ARABIC EMPTY CENTRE HIGH STOP",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x06EB, -- Û«
+ },
+ [0x06EC]={
+ ["category"]="mn",
+ ["description"]="ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x06EC, -- Û¬
+ },
+ [0x06ED]={
+ ["category"]="mn",
+ ["description"]="ARABIC SMALL LOW MEEM",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x06ED, -- Û­
+ },
+ [0x06EE]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER DAL WITH INVERTED V",
+ ["linebreak"]="al",
+ ["shcode"]=0x062F,
+ ["unicodeslot"]=0x06EE, -- Û®
+ },
+ [0x06EF]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER REH WITH INVERTED V",
+ ["linebreak"]="al",
+ ["shcode"]=0x0631,
+ ["unicodeslot"]=0x06EF, -- Û¯
+ },
+ [0x06F0]={
+ ["category"]="nd",
+ ["description"]="EXTENDED ARABIC-INDIC DIGIT ZERO",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x06F0, -- Û°
+ },
+ [0x06F1]={
+ ["category"]="nd",
+ ["description"]="EXTENDED ARABIC-INDIC DIGIT ONE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x06F1, -- Û±
+ },
+ [0x06F2]={
+ ["category"]="nd",
+ ["description"]="EXTENDED ARABIC-INDIC DIGIT TWO",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x06F2, -- Û²
+ },
+ [0x06F3]={
+ ["category"]="nd",
+ ["description"]="EXTENDED ARABIC-INDIC DIGIT THREE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x06F3, -- Û³
+ },
+ [0x06F4]={
+ ["category"]="nd",
+ ["description"]="EXTENDED ARABIC-INDIC DIGIT FOUR",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x06F4, -- Û´
+ },
+ [0x06F5]={
+ ["category"]="nd",
+ ["description"]="EXTENDED ARABIC-INDIC DIGIT FIVE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x06F5, -- Ûµ
+ },
+ [0x06F6]={
+ ["category"]="nd",
+ ["description"]="EXTENDED ARABIC-INDIC DIGIT SIX",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x06F6, -- Û¶
+ },
+ [0x06F7]={
+ ["category"]="nd",
+ ["description"]="EXTENDED ARABIC-INDIC DIGIT SEVEN",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x06F7, -- Û·
+ },
+ [0x06F8]={
+ ["category"]="nd",
+ ["description"]="EXTENDED ARABIC-INDIC DIGIT EIGHT",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x06F8, -- Û¸
+ },
+ [0x06F9]={
+ ["category"]="nd",
+ ["description"]="EXTENDED ARABIC-INDIC DIGIT NINE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x06F9, -- Û¹
+ },
+ [0x06FA]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER SHEEN WITH DOT BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x0634,
+ ["unicodeslot"]=0x06FA, -- Ûº
+ },
+ [0x06FB]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER DAD WITH DOT BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x0636,
+ ["unicodeslot"]=0x06FB, -- Û»
+ },
+ [0x06FC]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER GHAIN WITH DOT BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x063A,
+ ["unicodeslot"]=0x06FC, -- Û¼
+ },
+ [0x06FD]={
+ ["category"]="so",
+ ["description"]="ARABIC SIGN SINDHI AMPERSAND",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x06FD, -- Û½
+ },
+ [0x06FE]={
+ ["category"]="so",
+ ["description"]="ARABIC SIGN SINDHI POSTPOSITION MEN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x06FE, -- Û¾
+ },
+ [0x06FF]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER HEH WITH INVERTED V",
+ ["linebreak"]="al",
+ ["shcode"]=0x0647,
+ ["unicodeslot"]=0x06FF, -- Û¿
+ },
+ [0x0700]={
+ ["category"]="po",
+ ["description"]="SYRIAC END OF PARAGRAPH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0700, -- ܀
+ },
+ [0x0701]={
+ ["category"]="po",
+ ["description"]="SYRIAC SUPRALINEAR FULL STOP",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0701, -- Ü
+ },
+ [0x0702]={
+ ["category"]="po",
+ ["description"]="SYRIAC SUBLINEAR FULL STOP",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0702, -- Ü‚
+ },
+ [0x0703]={
+ ["category"]="po",
+ ["description"]="SYRIAC SUPRALINEAR COLON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0703, -- ܃
+ },
+ [0x0704]={
+ ["category"]="po",
+ ["description"]="SYRIAC SUBLINEAR COLON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0704, -- Ü„
+ },
+ [0x0705]={
+ ["category"]="po",
+ ["description"]="SYRIAC HORIZONTAL COLON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0705, -- Ü…
+ },
+ [0x0706]={
+ ["category"]="po",
+ ["description"]="SYRIAC COLON SKEWED LEFT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0706, -- ܆
+ },
+ [0x0707]={
+ ["category"]="po",
+ ["description"]="SYRIAC COLON SKEWED RIGHT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0707, -- ܇
+ },
+ [0x0708]={
+ ["category"]="po",
+ ["description"]="SYRIAC SUPRALINEAR COLON SKEWED LEFT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0708, -- ܈
+ },
+ [0x0709]={
+ ["category"]="po",
+ ["description"]="SYRIAC SUBLINEAR COLON SKEWED RIGHT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0709, -- ܉
+ },
+ [0x070A]={
+ ["category"]="po",
+ ["description"]="SYRIAC CONTRACTION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x070A, -- ÜŠ
+ },
+ [0x070B]={
+ ["category"]="po",
+ ["description"]="SYRIAC HARKLEAN OBELUS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x070B, -- Ü‹
+ },
+ [0x070C]={
+ ["category"]="po",
+ ["description"]="SYRIAC HARKLEAN METOBELUS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x070C, -- ܌
+ },
+ [0x070D]={
+ ["category"]="po",
+ ["description"]="SYRIAC HARKLEAN ASTERISCUS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x070D, -- Ü
+ },
+ [0x070F]={
+ ["category"]="cf",
+ ["description"]="SYRIAC ABBREVIATION MARK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x070F, -- Ü
+ },
+ [0x0710]={
+ ["category"]="lo",
+ ["description"]="SYRIAC LETTER ALAPH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0710, -- Ü
+ },
+ [0x0711]={
+ ["category"]="mn",
+ ["description"]="SYRIAC LETTER SUPERSCRIPT ALAPH",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0711, -- Ü‘
+ },
+ [0x0712]={
+ ["category"]="lo",
+ ["description"]="SYRIAC LETTER BETH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0712, -- Ü’
+ },
+ [0x0713]={
+ ["category"]="lo",
+ ["description"]="SYRIAC LETTER GAMAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0713, -- Ü“
+ },
+ [0x0714]={
+ ["category"]="lo",
+ ["description"]="SYRIAC LETTER GAMAL GARSHUNI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0714, -- Ü”
+ },
+ [0x0715]={
+ ["category"]="lo",
+ ["description"]="SYRIAC LETTER DALATH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0715, -- Ü•
+ },
+ [0x0716]={
+ ["category"]="lo",
+ ["description"]="SYRIAC LETTER DOTLESS DALATH RISH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0716, -- Ü–
+ },
+ [0x0717]={
+ ["category"]="lo",
+ ["description"]="SYRIAC LETTER HE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0717, -- Ü—
+ },
+ [0x0718]={
+ ["category"]="lo",
+ ["description"]="SYRIAC LETTER WAW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0718, -- ܘ
+ },
+ [0x0719]={
+ ["category"]="lo",
+ ["description"]="SYRIAC LETTER ZAIN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0719, -- Ü™
+ },
+ [0x071A]={
+ ["category"]="lo",
+ ["description"]="SYRIAC LETTER HETH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x071A, -- Üš
+ },
+ [0x071B]={
+ ["category"]="lo",
+ ["description"]="SYRIAC LETTER TETH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x071B, -- Ü›
+ },
+ [0x071C]={
+ ["category"]="lo",
+ ["description"]="SYRIAC LETTER TETH GARSHUNI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x071C, -- ܜ
+ },
+ [0x071D]={
+ ["category"]="lo",
+ ["description"]="SYRIAC LETTER YUDH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x071D, -- Ü
+ },
+ [0x071E]={
+ ["category"]="lo",
+ ["description"]="SYRIAC LETTER YUDH HE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x071E, -- Üž
+ },
+ [0x071F]={
+ ["category"]="lo",
+ ["description"]="SYRIAC LETTER KAPH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x071F, -- ÜŸ
+ },
+ [0x0720]={
+ ["category"]="lo",
+ ["description"]="SYRIAC LETTER LAMADH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0720, -- Ü 
+ },
+ [0x0721]={
+ ["category"]="lo",
+ ["description"]="SYRIAC LETTER MIM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0721, -- Ü¡
+ },
+ [0x0722]={
+ ["category"]="lo",
+ ["description"]="SYRIAC LETTER NUN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0722, -- ܢ
+ },
+ [0x0723]={
+ ["category"]="lo",
+ ["description"]="SYRIAC LETTER SEMKATH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0723, -- ܣ
+ },
+ [0x0724]={
+ ["category"]="lo",
+ ["description"]="SYRIAC LETTER FINAL SEMKATH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0724, -- ܤ
+ },
+ [0x0725]={
+ ["category"]="lo",
+ ["description"]="SYRIAC LETTER E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0725, -- ܥ
+ },
+ [0x0726]={
+ ["category"]="lo",
+ ["description"]="SYRIAC LETTER PE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0726, -- ܦ
+ },
+ [0x0727]={
+ ["category"]="lo",
+ ["description"]="SYRIAC LETTER REVERSED PE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0727, -- ܧ
+ },
+ [0x0728]={
+ ["category"]="lo",
+ ["description"]="SYRIAC LETTER SADHE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0728, -- ܨ
+ },
+ [0x0729]={
+ ["category"]="lo",
+ ["description"]="SYRIAC LETTER QAPH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0729, -- Ü©
+ },
+ [0x072A]={
+ ["category"]="lo",
+ ["description"]="SYRIAC LETTER RISH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x072A, -- ܪ
+ },
+ [0x072B]={
+ ["category"]="lo",
+ ["description"]="SYRIAC LETTER SHIN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x072B, -- Ü«
+ },
+ [0x072C]={
+ ["category"]="lo",
+ ["description"]="SYRIAC LETTER TAW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x072C, -- ܬ
+ },
+ [0x072D]={
+ ["category"]="lo",
+ ["description"]="SYRIAC LETTER PERSIAN BHETH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x072D, -- Ü­
+ },
+ [0x072E]={
+ ["category"]="lo",
+ ["description"]="SYRIAC LETTER PERSIAN GHAMAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x072E, -- Ü®
+ },
+ [0x072F]={
+ ["category"]="lo",
+ ["description"]="SYRIAC LETTER PERSIAN DHALATH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x072F, -- ܯ
+ },
+ [0x0730]={
+ ["category"]="mn",
+ ["description"]="SYRIAC PTHAHA ABOVE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0730, -- Ü°
+ },
+ [0x0731]={
+ ["category"]="mn",
+ ["description"]="SYRIAC PTHAHA BELOW",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0731, -- ܱ
+ },
+ [0x0732]={
+ ["category"]="mn",
+ ["description"]="SYRIAC PTHAHA DOTTED",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0732, -- ܲ
+ },
+ [0x0733]={
+ ["category"]="mn",
+ ["description"]="SYRIAC ZQAPHA ABOVE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0733, -- ܳ
+ },
+ [0x0734]={
+ ["category"]="mn",
+ ["description"]="SYRIAC ZQAPHA BELOW",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0734, -- Ü´
+ },
+ [0x0735]={
+ ["category"]="mn",
+ ["description"]="SYRIAC ZQAPHA DOTTED",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0735, -- ܵ
+ },
+ [0x0736]={
+ ["category"]="mn",
+ ["description"]="SYRIAC RBASA ABOVE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0736, -- ܶ
+ },
+ [0x0737]={
+ ["category"]="mn",
+ ["description"]="SYRIAC RBASA BELOW",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0737, -- Ü·
+ },
+ [0x0738]={
+ ["category"]="mn",
+ ["description"]="SYRIAC DOTTED ZLAMA HORIZONTAL",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0738, -- ܸ
+ },
+ [0x0739]={
+ ["category"]="mn",
+ ["description"]="SYRIAC DOTTED ZLAMA ANGULAR",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0739, -- ܹ
+ },
+ [0x073A]={
+ ["category"]="mn",
+ ["description"]="SYRIAC HBASA ABOVE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x073A, -- ܺ
+ },
+ [0x073B]={
+ ["category"]="mn",
+ ["description"]="SYRIAC HBASA BELOW",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x073B, -- Ü»
+ },
+ [0x073C]={
+ ["category"]="mn",
+ ["description"]="SYRIAC HBASA-ESASA DOTTED",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x073C, -- ܼ
+ },
+ [0x073D]={
+ ["category"]="mn",
+ ["description"]="SYRIAC ESASA ABOVE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x073D, -- ܽ
+ },
+ [0x073E]={
+ ["category"]="mn",
+ ["description"]="SYRIAC ESASA BELOW",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x073E, -- ܾ
+ },
+ [0x073F]={
+ ["category"]="mn",
+ ["description"]="SYRIAC RWAHA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x073F, -- Ü¿
+ },
+ [0x0740]={
+ ["category"]="mn",
+ ["description"]="SYRIAC FEMININE DOT",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0740, -- ݀
+ },
+ [0x0741]={
+ ["category"]="mn",
+ ["description"]="SYRIAC QUSHSHAYA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0741, -- Ý
+ },
+ [0x0742]={
+ ["category"]="mn",
+ ["description"]="SYRIAC RUKKAKHA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0742, -- Ý‚
+ },
+ [0x0743]={
+ ["category"]="mn",
+ ["description"]="SYRIAC TWO VERTICAL DOTS ABOVE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0743, -- ݃
+ },
+ [0x0744]={
+ ["category"]="mn",
+ ["description"]="SYRIAC TWO VERTICAL DOTS BELOW",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0744, -- Ý„
+ },
+ [0x0745]={
+ ["category"]="mn",
+ ["description"]="SYRIAC THREE DOTS ABOVE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0745, -- Ý…
+ },
+ [0x0746]={
+ ["category"]="mn",
+ ["description"]="SYRIAC THREE DOTS BELOW",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0746, -- ݆
+ },
+ [0x0747]={
+ ["category"]="mn",
+ ["description"]="SYRIAC OBLIQUE LINE ABOVE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0747, -- ݇
+ },
+ [0x0748]={
+ ["category"]="mn",
+ ["description"]="SYRIAC OBLIQUE LINE BELOW",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0748, -- ݈
+ },
+ [0x0749]={
+ ["category"]="mn",
+ ["description"]="SYRIAC MUSIC",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0749, -- ݉
+ },
+ [0x074A]={
+ ["category"]="mn",
+ ["description"]="SYRIAC BARREKH",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x074A, -- ÝŠ
+ },
+ [0x074D]={
+ ["category"]="lo",
+ ["description"]="SYRIAC LETTER SOGDIAN ZHAIN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x074D, -- Ý
+ },
+ [0x074E]={
+ ["category"]="lo",
+ ["description"]="SYRIAC LETTER SOGDIAN KHAPH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x074E, -- ÝŽ
+ },
+ [0x074F]={
+ ["category"]="lo",
+ ["description"]="SYRIAC LETTER SOGDIAN FE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x074F, -- Ý
+ },
+ [0x0750]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x0628,
+ ["unicodeslot"]=0x0750, -- Ý
+ },
+ [0x0751]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER BEH WITH DOT BELOW AND THREE DOTS ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0628,
+ ["unicodeslot"]=0x0751, -- Ý‘
+ },
+ [0x0752]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x0628,
+ ["unicodeslot"]=0x0752, -- Ý’
+ },
+ [0x0753]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW AND TWO DOTS ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0628,
+ ["unicodeslot"]=0x0753, -- Ý“
+ },
+ [0x0754]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER BEH WITH TWO DOTS BELOW AND DOT ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0628,
+ ["unicodeslot"]=0x0754, -- Ý”
+ },
+ [0x0755]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER BEH WITH INVERTED SMALL V BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x0628,
+ ["unicodeslot"]=0x0755, -- Ý•
+ },
+ [0x0756]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER BEH WITH SMALL V",
+ ["linebreak"]="al",
+ ["shcode"]=0x0628,
+ ["unicodeslot"]=0x0756, -- Ý–
+ },
+ [0x0757]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER HAH WITH TWO DOTS ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x062D,
+ ["unicodeslot"]=0x0757, -- Ý—
+ },
+ [0x0758]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER HAH WITH THREE DOTS POINTING UPWARDS BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x062D,
+ ["unicodeslot"]=0x0758, -- ݘ
+ },
+ [0x0759]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW AND SMALL TAH",
+ ["linebreak"]="al",
+ ["shcode"]=0x062F,
+ ["unicodeslot"]=0x0759, -- Ý™
+ },
+ [0x075A]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER DAL WITH INVERTED SMALL V BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x062F,
+ ["unicodeslot"]=0x075A, -- Ýš
+ },
+ [0x075B]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER REH WITH STROKE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0631,
+ ["unicodeslot"]=0x075B, -- Ý›
+ },
+ [0x075C]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER SEEN WITH FOUR DOTS ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0633,
+ ["unicodeslot"]=0x075C, -- ݜ
+ },
+ [0x075D]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER AIN WITH TWO DOTS ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0639,
+ ["unicodeslot"]=0x075D, -- Ý
+ },
+ [0x075E]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER AIN WITH THREE DOTS POINTING DOWNWARDS ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0639,
+ ["unicodeslot"]=0x075E, -- Ýž
+ },
+ [0x075F]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER AIN WITH TWO DOTS VERTICALLY ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0639,
+ ["unicodeslot"]=0x075F, -- ÝŸ
+ },
+ [0x0760]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER FEH WITH TWO DOTS BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x0641,
+ ["unicodeslot"]=0x0760, -- Ý 
+ },
+ [0x0761]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER FEH WITH THREE DOTS POINTING UPWARDS BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x0641,
+ ["unicodeslot"]=0x0761, -- Ý¡
+ },
+ [0x0762]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER KEHEH WITH DOT ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x06A9,
+ ["unicodeslot"]=0x0762, -- ݢ
+ },
+ [0x0763]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER KEHEH WITH THREE DOTS ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x06A9,
+ ["unicodeslot"]=0x0763, -- ݣ
+ },
+ [0x0764]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER KEHEH WITH THREE DOTS POINTING UPWARDS BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x06A9,
+ ["unicodeslot"]=0x0764, -- ݤ
+ },
+ [0x0765]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER MEEM WITH DOT ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0645,
+ ["unicodeslot"]=0x0765, -- ݥ
+ },
+ [0x0766]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER MEEM WITH DOT BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x0645,
+ ["unicodeslot"]=0x0766, -- ݦ
+ },
+ [0x0767]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER NOON WITH TWO DOTS BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x0646,
+ ["unicodeslot"]=0x0767, -- ݧ
+ },
+ [0x0768]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER NOON WITH SMALL TAH",
+ ["linebreak"]="al",
+ ["shcode"]=0x0646,
+ ["unicodeslot"]=0x0768, -- ݨ
+ },
+ [0x0769]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER NOON WITH SMALL V",
+ ["linebreak"]="al",
+ ["shcode"]=0x0646,
+ ["unicodeslot"]=0x0769, -- Ý©
+ },
+ [0x076A]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER LAM WITH BAR",
+ ["linebreak"]="al",
+ ["shcode"]=0x0644,
+ ["unicodeslot"]=0x076A, -- ݪ
+ },
+ [0x076B]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER REH WITH TWO DOTS VERTICALLY ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0631,
+ ["unicodeslot"]=0x076B, -- Ý«
+ },
+ [0x076C]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER REH WITH HAMZA ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0631,
+ ["unicodeslot"]=0x076C, -- ݬ
+ },
+ [0x076D]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER SEEN WITH TWO DOTS VERTICALLY ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0633,
+ ["unicodeslot"]=0x076D, -- Ý­
+ },
+ [0x0780]={
+ ["category"]="lo",
+ ["description"]="THAANA LETTER HAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0780, -- Þ€
+ },
+ [0x0781]={
+ ["category"]="lo",
+ ["description"]="THAANA LETTER SHAVIYANI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0781, -- Þ
+ },
+ [0x0782]={
+ ["category"]="lo",
+ ["description"]="THAANA LETTER NOONU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0782, -- Þ‚
+ },
+ [0x0783]={
+ ["category"]="lo",
+ ["description"]="THAANA LETTER RAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0783, -- Þƒ
+ },
+ [0x0784]={
+ ["category"]="lo",
+ ["description"]="THAANA LETTER BAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0784, -- Þ„
+ },
+ [0x0785]={
+ ["category"]="lo",
+ ["description"]="THAANA LETTER LHAVIYANI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0785, -- Þ…
+ },
+ [0x0786]={
+ ["category"]="lo",
+ ["description"]="THAANA LETTER KAAFU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0786, -- Þ†
+ },
+ [0x0787]={
+ ["category"]="lo",
+ ["description"]="THAANA LETTER ALIFU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0787, -- Þ‡
+ },
+ [0x0788]={
+ ["category"]="lo",
+ ["description"]="THAANA LETTER VAAVU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0788, -- Þˆ
+ },
+ [0x0789]={
+ ["category"]="lo",
+ ["description"]="THAANA LETTER MEEMU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0789, -- Þ‰
+ },
+ [0x078A]={
+ ["category"]="lo",
+ ["description"]="THAANA LETTER FAAFU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x078A, -- ÞŠ
+ },
+ [0x078B]={
+ ["category"]="lo",
+ ["description"]="THAANA LETTER DHAALU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x078B, -- Þ‹
+ },
+ [0x078C]={
+ ["category"]="lo",
+ ["description"]="THAANA LETTER THAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x078C, -- ތ
+ },
+ [0x078D]={
+ ["category"]="lo",
+ ["description"]="THAANA LETTER LAAMU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x078D, -- Þ
+ },
+ [0x078E]={
+ ["category"]="lo",
+ ["description"]="THAANA LETTER GAAFU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x078E, -- ÞŽ
+ },
+ [0x078F]={
+ ["category"]="lo",
+ ["description"]="THAANA LETTER GNAVIYANI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x078F, -- Þ
+ },
+ [0x0790]={
+ ["category"]="lo",
+ ["description"]="THAANA LETTER SEENU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0790, -- Þ
+ },
+ [0x0791]={
+ ["category"]="lo",
+ ["description"]="THAANA LETTER DAVIYANI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0791, -- Þ‘
+ },
+ [0x0792]={
+ ["category"]="lo",
+ ["description"]="THAANA LETTER ZAVIYANI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0792, -- Þ’
+ },
+ [0x0793]={
+ ["category"]="lo",
+ ["description"]="THAANA LETTER TAVIYANI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0793, -- Þ“
+ },
+ [0x0794]={
+ ["category"]="lo",
+ ["description"]="THAANA LETTER YAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0794, -- Þ”
+ },
+ [0x0795]={
+ ["category"]="lo",
+ ["description"]="THAANA LETTER PAVIYANI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0795, -- Þ•
+ },
+ [0x0796]={
+ ["category"]="lo",
+ ["description"]="THAANA LETTER JAVIYANI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0796, -- Þ–
+ },
+ [0x0797]={
+ ["category"]="lo",
+ ["description"]="THAANA LETTER CHAVIYANI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0797, -- Þ—
+ },
+ [0x0798]={
+ ["category"]="lo",
+ ["description"]="THAANA LETTER TTAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0798, -- Þ˜
+ },
+ [0x0799]={
+ ["category"]="lo",
+ ["description"]="THAANA LETTER HHAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0799, -- Þ™
+ },
+ [0x079A]={
+ ["category"]="lo",
+ ["description"]="THAANA LETTER KHAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x079A, -- Þš
+ },
+ [0x079B]={
+ ["category"]="lo",
+ ["description"]="THAANA LETTER THAALU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x079B, -- Þ›
+ },
+ [0x079C]={
+ ["category"]="lo",
+ ["description"]="THAANA LETTER ZAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x079C, -- ޜ
+ },
+ [0x079D]={
+ ["category"]="lo",
+ ["description"]="THAANA LETTER SHEENU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x079D, -- Þ
+ },
+ [0x079E]={
+ ["category"]="lo",
+ ["description"]="THAANA LETTER SAADHU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x079E, -- Þž
+ },
+ [0x079F]={
+ ["category"]="lo",
+ ["description"]="THAANA LETTER DAADHU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x079F, -- ÞŸ
+ },
+ [0x07A0]={
+ ["category"]="lo",
+ ["description"]="THAANA LETTER TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x07A0, -- Þ 
+ },
+ [0x07A1]={
+ ["category"]="lo",
+ ["description"]="THAANA LETTER ZO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x07A1, -- Þ¡
+ },
+ [0x07A2]={
+ ["category"]="lo",
+ ["description"]="THAANA LETTER AINU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x07A2, -- Þ¢
+ },
+ [0x07A3]={
+ ["category"]="lo",
+ ["description"]="THAANA LETTER GHAINU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x07A3, -- Þ£
+ },
+ [0x07A4]={
+ ["category"]="lo",
+ ["description"]="THAANA LETTER QAAFU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x07A4, -- Þ¤
+ },
+ [0x07A5]={
+ ["category"]="lo",
+ ["description"]="THAANA LETTER WAAVU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x07A5, -- Þ¥
+ },
+ [0x07A6]={
+ ["category"]="mn",
+ ["description"]="THAANA ABAFILI",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x07A6, -- Þ¦
+ },
+ [0x07A7]={
+ ["category"]="mn",
+ ["description"]="THAANA AABAAFILI",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x07A7, -- Þ§
+ },
+ [0x07A8]={
+ ["category"]="mn",
+ ["description"]="THAANA IBIFILI",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x07A8, -- Þ¨
+ },
+ [0x07A9]={
+ ["category"]="mn",
+ ["description"]="THAANA EEBEEFILI",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x07A9, -- Þ©
+ },
+ [0x07AA]={
+ ["category"]="mn",
+ ["description"]="THAANA UBUFILI",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x07AA, -- Þª
+ },
+ [0x07AB]={
+ ["category"]="mn",
+ ["description"]="THAANA OOBOOFILI",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x07AB, -- Þ«
+ },
+ [0x07AC]={
+ ["category"]="mn",
+ ["description"]="THAANA EBEFILI",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x07AC, -- Þ¬
+ },
+ [0x07AD]={
+ ["category"]="mn",
+ ["description"]="THAANA EYBEYFILI",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x07AD, -- Þ­
+ },
+ [0x07AE]={
+ ["category"]="mn",
+ ["description"]="THAANA OBOFILI",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x07AE, -- Þ®
+ },
+ [0x07AF]={
+ ["category"]="mn",
+ ["description"]="THAANA OABOAFILI",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x07AF, -- Þ¯
+ },
+ [0x07B0]={
+ ["category"]="mn",
+ ["description"]="THAANA SUKUN",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x07B0, -- Þ°
+ },
+ [0x07B1]={
+ ["category"]="lo",
+ ["description"]="THAANA LETTER NAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x07B1, -- Þ±
+ },
+ [0x07C0]={
+ ["category"]="nd",
+ ["description"]="NKO DIGIT ZERO",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x07C0, -- ߀
+ },
+ [0x07C1]={
+ ["category"]="nd",
+ ["description"]="NKO DIGIT ONE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x07C1, -- ß
+ },
+ [0x07C2]={
+ ["category"]="nd",
+ ["description"]="NKO DIGIT TWO",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x07C2, -- ß‚
+ },
+ [0x07C3]={
+ ["category"]="nd",
+ ["description"]="NKO DIGIT THREE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x07C3, -- ߃
+ },
+ [0x07C4]={
+ ["category"]="nd",
+ ["description"]="NKO DIGIT FOUR",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x07C4, -- ß„
+ },
+ [0x07C5]={
+ ["category"]="nd",
+ ["description"]="NKO DIGIT FIVE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x07C5, -- ß…
+ },
+ [0x07C6]={
+ ["category"]="nd",
+ ["description"]="NKO DIGIT SIX",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x07C6, -- ߆
+ },
+ [0x07C7]={
+ ["category"]="nd",
+ ["description"]="NKO DIGIT SEVEN",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x07C7, -- ߇
+ },
+ [0x07C8]={
+ ["category"]="nd",
+ ["description"]="NKO DIGIT EIGHT",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x07C8, -- ߈
+ },
+ [0x07C9]={
+ ["category"]="nd",
+ ["description"]="NKO DIGIT NINE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x07C9, -- ߉
+ },
+ [0x07CA]={
+ ["category"]="lo",
+ ["description"]="NKO LETTER A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x07CA, -- ߊ
+ },
+ [0x07CB]={
+ ["category"]="lo",
+ ["description"]="NKO LETTER EE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x07CB, -- ß‹
+ },
+ [0x07CC]={
+ ["category"]="lo",
+ ["description"]="NKO LETTER I",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x07CC, -- ߌ
+ },
+ [0x07CD]={
+ ["category"]="lo",
+ ["description"]="NKO LETTER E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x07CD, -- ß
+ },
+ [0x07CE]={
+ ["category"]="lo",
+ ["description"]="NKO LETTER U",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x07CE, -- ߎ
+ },
+ [0x07CF]={
+ ["category"]="lo",
+ ["description"]="NKO LETTER OO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x07CF, -- ß
+ },
+ [0x07D0]={
+ ["category"]="lo",
+ ["description"]="NKO LETTER O",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x07D0, -- ß
+ },
+ [0x07D1]={
+ ["category"]="lo",
+ ["description"]="NKO LETTER DAGBASINNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x07D1, -- ß‘
+ },
+ [0x07D2]={
+ ["category"]="lo",
+ ["description"]="NKO LETTER N",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x07D2, -- ß’
+ },
+ [0x07D3]={
+ ["category"]="lo",
+ ["description"]="NKO LETTER BA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x07D3, -- ß“
+ },
+ [0x07D4]={
+ ["category"]="lo",
+ ["description"]="NKO LETTER PA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x07D4, -- ß”
+ },
+ [0x07D5]={
+ ["category"]="lo",
+ ["description"]="NKO LETTER TA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x07D5, -- ß•
+ },
+ [0x07D6]={
+ ["category"]="lo",
+ ["description"]="NKO LETTER JA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x07D6, -- ß–
+ },
+ [0x07D7]={
+ ["category"]="lo",
+ ["description"]="NKO LETTER CHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x07D7, -- ß—
+ },
+ [0x07D8]={
+ ["category"]="lo",
+ ["description"]="NKO LETTER DA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x07D8, -- ߘ
+ },
+ [0x07D9]={
+ ["category"]="lo",
+ ["description"]="NKO LETTER RA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x07D9, -- ß™
+ },
+ [0x07DA]={
+ ["category"]="lo",
+ ["description"]="NKO LETTER RRA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x07DA, -- ßš
+ },
+ [0x07DB]={
+ ["category"]="lo",
+ ["description"]="NKO LETTER SA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x07DB, -- ß›
+ },
+ [0x07DC]={
+ ["category"]="lo",
+ ["description"]="NKO LETTER GBA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x07DC, -- ߜ
+ },
+ [0x07DD]={
+ ["category"]="lo",
+ ["description"]="NKO LETTER FA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x07DD, -- ß
+ },
+ [0x07DE]={
+ ["category"]="lo",
+ ["description"]="NKO LETTER KA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x07DE, -- ßž
+ },
+ [0x07DF]={
+ ["category"]="lo",
+ ["description"]="NKO LETTER LA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x07DF, -- ߟ
+ },
+ [0x07E0]={
+ ["category"]="lo",
+ ["description"]="NKO LETTER NA WOLOSO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x07E0, -- ß 
+ },
+ [0x07E1]={
+ ["category"]="lo",
+ ["description"]="NKO LETTER MA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x07E1, -- ß¡
+ },
+ [0x07E2]={
+ ["category"]="lo",
+ ["description"]="NKO LETTER NYA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x07E2, -- ߢ
+ },
+ [0x07E3]={
+ ["category"]="lo",
+ ["description"]="NKO LETTER NA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x07E3, -- ߣ
+ },
+ [0x07E4]={
+ ["category"]="lo",
+ ["description"]="NKO LETTER HA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x07E4, -- ߤ
+ },
+ [0x07E5]={
+ ["category"]="lo",
+ ["description"]="NKO LETTER WA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x07E5, -- ߥ
+ },
+ [0x07E6]={
+ ["category"]="lo",
+ ["description"]="NKO LETTER YA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x07E6, -- ߦ
+ },
+ [0x07E7]={
+ ["category"]="lo",
+ ["description"]="NKO LETTER NYA WOLOSO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x07E7, -- ߧ
+ },
+ [0x07E8]={
+ ["category"]="lo",
+ ["description"]="NKO LETTER JONA JA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x07E8, -- ߨ
+ },
+ [0x07E9]={
+ ["category"]="lo",
+ ["description"]="NKO LETTER JONA CHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x07E9, -- ß©
+ },
+ [0x07EA]={
+ ["category"]="lo",
+ ["description"]="NKO LETTER JONA RA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x07EA, -- ߪ
+ },
+ [0x07EB]={
+ ["category"]="mn",
+ ["description"]="NKO COMBINING SHORT HIGH TONE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x07EB, -- ß«
+ },
+ [0x07EC]={
+ ["category"]="mn",
+ ["description"]="NKO COMBINING SHORT LOW TONE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x07EC, -- ߬
+ },
+ [0x07ED]={
+ ["category"]="mn",
+ ["description"]="NKO COMBINING SHORT RISING TONE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x07ED, -- ß­
+ },
+ [0x07EE]={
+ ["category"]="mn",
+ ["description"]="NKO COMBINING LONG DESCENDING TONE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x07EE, -- ß®
+ },
+ [0x07EF]={
+ ["category"]="mn",
+ ["description"]="NKO COMBINING LONG HIGH TONE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x07EF, -- ߯
+ },
+ [0x07F0]={
+ ["category"]="mn",
+ ["description"]="NKO COMBINING LONG LOW TONE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x07F0, -- ß°
+ },
+ [0x07F1]={
+ ["category"]="mn",
+ ["description"]="NKO COMBINING LONG RISING TONE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x07F1, -- ß±
+ },
+ [0x07F2]={
+ ["category"]="mn",
+ ["description"]="NKO COMBINING NASALIZATION MARK",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x07F2, -- ß²
+ },
+ [0x07F3]={
+ ["category"]="mn",
+ ["description"]="NKO COMBINING DOUBLE DOT ABOVE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x07F3, -- ß³
+ },
+ [0x07F4]={
+ ["category"]="lm",
+ ["description"]="NKO HIGH TONE APOSTROPHE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x07F4, -- ß´
+ },
+ [0x07F5]={
+ ["category"]="lm",
+ ["description"]="NKO LOW TONE APOSTROPHE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x07F5, -- ßµ
+ },
+ [0x07F6]={
+ ["category"]="so",
+ ["description"]="NKO SYMBOL OO DENNEN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x07F6, -- ߶
+ },
+ [0x07F7]={
+ ["category"]="po",
+ ["description"]="NKO SYMBOL GBAKURUNEN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x07F7, -- ß·
+ },
+ [0x07F8]={
+ ["category"]="po",
+ ["description"]="NKO COMMA",
+ ["linebreak"]="is",
+ ["unicodeslot"]=0x07F8, -- ߸
+ },
+ [0x07F9]={
+ ["category"]="po",
+ ["description"]="NKO EXCLAMATION MARK",
+ ["linebreak"]="ex",
+ ["unicodeslot"]=0x07F9, -- ß¹
+ },
+ [0x07FA]={
+ ["category"]="lm",
+ ["description"]="NKO LAJANYALAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x07FA, -- ߺ
+ },
+ [0x0901]={
+ ["category"]="mn",
+ ["description"]="DEVANAGARI SIGN CANDRABINDU",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0901, -- à¤
+ },
+ [0x0902]={
+ ["category"]="mn",
+ ["description"]="DEVANAGARI SIGN ANUSVARA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0902, -- ं
+ },
+ [0x0903]={
+ ["category"]="mc",
+ ["description"]="DEVANAGARI SIGN VISARGA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0903, -- ः
+ },
+ [0x0904]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER SHORT A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0904, -- ऄ
+ },
+ [0x0905]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0905, -- अ
+ },
+ [0x0906]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER AA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0906, -- आ
+ },
+ [0x0907]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER I",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0907, -- इ
+ },
+ [0x0908]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER II",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0908, -- ई
+ },
+ [0x0909]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER U",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0909, -- उ
+ },
+ [0x090A]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER UU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x090A, -- ऊ
+ },
+ [0x090B]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER VOCALIC R",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x090B, -- ऋ
+ },
+ [0x090C]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER VOCALIC L",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x090C, -- ऌ
+ },
+ [0x090D]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER CANDRA E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x090D, -- à¤
+ },
+ [0x090E]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER SHORT E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x090E, -- ऎ
+ },
+ [0x090F]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x090F, -- à¤
+ },
+ [0x0910]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER AI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0910, -- à¤
+ },
+ [0x0911]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER CANDRA O",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0911, -- ऑ
+ },
+ [0x0912]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER SHORT O",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0912, -- ऒ
+ },
+ [0x0913]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER O",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0913, -- ओ
+ },
+ [0x0914]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER AU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0914, -- औ
+ },
+ [0x0915]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER KA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0915, -- क
+ },
+ [0x0916]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER KHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0916, -- ख
+ },
+ [0x0917]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER GA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0917, -- ग
+ },
+ [0x0918]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER GHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0918, -- घ
+ },
+ [0x0919]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER NGA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0919, -- ङ
+ },
+ [0x091A]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER CA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x091A, -- च
+ },
+ [0x091B]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER CHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x091B, -- छ
+ },
+ [0x091C]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER JA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x091C, -- ज
+ },
+ [0x091D]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER JHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x091D, -- à¤
+ },
+ [0x091E]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER NYA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x091E, -- ञ
+ },
+ [0x091F]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER TTA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x091F, -- ट
+ },
+ [0x0920]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER TTHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0920, -- ठ
+ },
+ [0x0921]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER DDA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0921, -- ड
+ },
+ [0x0922]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER DDHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0922, -- ढ
+ },
+ [0x0923]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER NNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0923, -- ण
+ },
+ [0x0924]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER TA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0924, -- त
+ },
+ [0x0925]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER THA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0925, -- थ
+ },
+ [0x0926]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER DA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0926, -- द
+ },
+ [0x0927]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER DHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0927, -- ध
+ },
+ [0x0928]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER NA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0928, -- न
+ },
+ [0x0929]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER NNNA",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x0928, 0x093C },
+ ["unicodeslot"]=0x0929, -- ऩ
+ },
+ [0x092A]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER PA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x092A, -- प
+ },
+ [0x092B]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER PHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x092B, -- फ
+ },
+ [0x092C]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER BA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x092C, -- ब
+ },
+ [0x092D]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER BHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x092D, -- भ
+ },
+ [0x092E]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER MA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x092E, -- म
+ },
+ [0x092F]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER YA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x092F, -- य
+ },
+ [0x0930]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER RA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0930, -- र
+ },
+ [0x0931]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER RRA",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x0930, 0x093C },
+ ["unicodeslot"]=0x0931, -- ऱ
+ },
+ [0x0932]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER LA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0932, -- ल
+ },
+ [0x0933]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER LLA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0933, -- ळ
+ },
+ [0x0934]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER LLLA",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x0933, 0x093C },
+ ["unicodeslot"]=0x0934, -- ऴ
+ },
+ [0x0935]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER VA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0935, -- व
+ },
+ [0x0936]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER SHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0936, -- श
+ },
+ [0x0937]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER SSA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0937, -- ष
+ },
+ [0x0938]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER SA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0938, -- स
+ },
+ [0x0939]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER HA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0939, -- ह
+ },
+ [0x093C]={
+ ["category"]="mn",
+ ["description"]="DEVANAGARI SIGN NUKTA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x093C, -- ़
+ },
+ [0x093D]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI SIGN AVAGRAHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x093D, -- ऽ
+ },
+ [0x093E]={
+ ["category"]="mc",
+ ["description"]="DEVANAGARI VOWEL SIGN AA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x093E, -- ा
+ },
+ [0x093F]={
+ ["category"]="mc",
+ ["description"]="DEVANAGARI VOWEL SIGN I",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x093F, -- ि
+ },
+ [0x0940]={
+ ["category"]="mc",
+ ["description"]="DEVANAGARI VOWEL SIGN II",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0940, -- ी
+ },
+ [0x0941]={
+ ["category"]="mn",
+ ["description"]="DEVANAGARI VOWEL SIGN U",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0941, -- à¥
+ },
+ [0x0942]={
+ ["category"]="mn",
+ ["description"]="DEVANAGARI VOWEL SIGN UU",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0942, -- ू
+ },
+ [0x0943]={
+ ["category"]="mn",
+ ["description"]="DEVANAGARI VOWEL SIGN VOCALIC R",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0943, -- ृ
+ },
+ [0x0944]={
+ ["category"]="mn",
+ ["description"]="DEVANAGARI VOWEL SIGN VOCALIC RR",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0944, -- ॄ
+ },
+ [0x0945]={
+ ["category"]="mn",
+ ["description"]="DEVANAGARI VOWEL SIGN CANDRA E",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0945, -- ॅ
+ },
+ [0x0946]={
+ ["category"]="mn",
+ ["description"]="DEVANAGARI VOWEL SIGN SHORT E",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0946, -- ॆ
+ },
+ [0x0947]={
+ ["category"]="mn",
+ ["description"]="DEVANAGARI VOWEL SIGN E",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0947, -- े
+ },
+ [0x0948]={
+ ["category"]="mn",
+ ["description"]="DEVANAGARI VOWEL SIGN AI",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0948, -- ै
+ },
+ [0x0949]={
+ ["category"]="mc",
+ ["description"]="DEVANAGARI VOWEL SIGN CANDRA O",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0949, -- ॉ
+ },
+ [0x094A]={
+ ["category"]="mc",
+ ["description"]="DEVANAGARI VOWEL SIGN SHORT O",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x094A, -- ॊ
+ },
+ [0x094B]={
+ ["category"]="mc",
+ ["description"]="DEVANAGARI VOWEL SIGN O",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x094B, -- ो
+ },
+ [0x094C]={
+ ["category"]="mc",
+ ["description"]="DEVANAGARI VOWEL SIGN AU",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x094C, -- ौ
+ },
+ [0x094D]={
+ ["category"]="mn",
+ ["description"]="DEVANAGARI SIGN VIRAMA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x094D, -- à¥
+ },
+ [0x0950]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI OM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0950, -- à¥
+ },
+ [0x0951]={
+ ["category"]="mn",
+ ["description"]="DEVANAGARI STRESS SIGN UDATTA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0951, -- ॑
+ },
+ [0x0952]={
+ ["category"]="mn",
+ ["description"]="DEVANAGARI STRESS SIGN ANUDATTA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0952, -- ॒
+ },
+ [0x0953]={
+ ["category"]="mn",
+ ["description"]="DEVANAGARI GRAVE ACCENT",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0953, -- ॓
+ },
+ [0x0954]={
+ ["category"]="mn",
+ ["description"]="DEVANAGARI ACUTE ACCENT",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0954, -- ॔
+ },
+ [0x0958]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER QA",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x0915, 0x093C },
+ ["unicodeslot"]=0x0958, -- क़
+ },
+ [0x0959]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER KHHA",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x0916, 0x093C },
+ ["unicodeslot"]=0x0959, -- ख़
+ },
+ [0x095A]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER GHHA",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x0917, 0x093C },
+ ["unicodeslot"]=0x095A, -- ग़
+ },
+ [0x095B]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER ZA",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x091C, 0x093C },
+ ["unicodeslot"]=0x095B, -- ज़
+ },
+ [0x095C]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER DDDHA",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x0921, 0x093C },
+ ["unicodeslot"]=0x095C, -- ड़
+ },
+ [0x095D]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER RHA",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x0922, 0x093C },
+ ["unicodeslot"]=0x095D, -- à¥
+ },
+ [0x095E]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER FA",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x092B, 0x093C },
+ ["unicodeslot"]=0x095E, -- फ़
+ },
+ [0x095F]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER YYA",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x092F, 0x093C },
+ ["unicodeslot"]=0x095F, -- य़
+ },
+ [0x0960]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER VOCALIC RR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0960, -- ॠ
+ },
+ [0x0961]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER VOCALIC LL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0961, -- ॡ
+ },
+ [0x0962]={
+ ["category"]="mn",
+ ["description"]="DEVANAGARI VOWEL SIGN VOCALIC L",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0962, -- ॢ
+ },
+ [0x0963]={
+ ["category"]="mn",
+ ["description"]="DEVANAGARI VOWEL SIGN VOCALIC LL",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0963, -- ॣ
+ },
+ [0x0964]={
+ ["category"]="po",
+ ["description"]="DEVANAGARI DANDA",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x0964, -- ।
+ },
+ [0x0965]={
+ ["category"]="po",
+ ["description"]="DEVANAGARI DOUBLE DANDA",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x0965, -- ॥
+ },
+ [0x0966]={
+ ["category"]="nd",
+ ["description"]="DEVANAGARI DIGIT ZERO",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0966, -- ०
+ },
+ [0x0967]={
+ ["category"]="nd",
+ ["description"]="DEVANAGARI DIGIT ONE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0967, -- १
+ },
+ [0x0968]={
+ ["category"]="nd",
+ ["description"]="DEVANAGARI DIGIT TWO",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0968, -- २
+ },
+ [0x0969]={
+ ["category"]="nd",
+ ["description"]="DEVANAGARI DIGIT THREE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0969, -- ३
+ },
+ [0x096A]={
+ ["category"]="nd",
+ ["description"]="DEVANAGARI DIGIT FOUR",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x096A, -- ४
+ },
+ [0x096B]={
+ ["category"]="nd",
+ ["description"]="DEVANAGARI DIGIT FIVE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x096B, -- ५
+ },
+ [0x096C]={
+ ["category"]="nd",
+ ["description"]="DEVANAGARI DIGIT SIX",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x096C, -- ६
+ },
+ [0x096D]={
+ ["category"]="nd",
+ ["description"]="DEVANAGARI DIGIT SEVEN",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x096D, -- ७
+ },
+ [0x096E]={
+ ["category"]="nd",
+ ["description"]="DEVANAGARI DIGIT EIGHT",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x096E, -- ८
+ },
+ [0x096F]={
+ ["category"]="nd",
+ ["description"]="DEVANAGARI DIGIT NINE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x096F, -- ९
+ },
+ [0x0970]={
+ ["category"]="po",
+ ["description"]="DEVANAGARI ABBREVIATION SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0970, -- ॰
+ },
+ [0x097B]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER GGA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x097B, -- ॻ
+ },
+ [0x097C]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER JJA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x097C, -- ॼ
+ },
+ [0x097D]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER GLOTTAL STOP",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x097D, -- ॽ
+ },
+ [0x097E]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER DDDA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x097E, -- ॾ
+ },
+ [0x097F]={
+ ["category"]="lo",
+ ["description"]="DEVANAGARI LETTER BBA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x097F, -- ॿ
+ },
+ [0x0981]={
+ ["category"]="mn",
+ ["description"]="BENGALI SIGN CANDRABINDU",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0981, -- à¦
+ },
+ [0x0982]={
+ ["category"]="mc",
+ ["description"]="BENGALI SIGN ANUSVARA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0982, -- ং
+ },
+ [0x0983]={
+ ["category"]="mc",
+ ["description"]="BENGALI SIGN VISARGA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0983, -- ঃ
+ },
+ [0x0985]={
+ ["category"]="lo",
+ ["description"]="BENGALI LETTER A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0985, -- অ
+ },
+ [0x0986]={
+ ["category"]="lo",
+ ["description"]="BENGALI LETTER AA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0986, -- আ
+ },
+ [0x0987]={
+ ["category"]="lo",
+ ["description"]="BENGALI LETTER I",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0987, -- ই
+ },
+ [0x0988]={
+ ["category"]="lo",
+ ["description"]="BENGALI LETTER II",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0988, -- ঈ
+ },
+ [0x0989]={
+ ["category"]="lo",
+ ["description"]="BENGALI LETTER U",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0989, -- উ
+ },
+ [0x098A]={
+ ["category"]="lo",
+ ["description"]="BENGALI LETTER UU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x098A, -- ঊ
+ },
+ [0x098B]={
+ ["category"]="lo",
+ ["description"]="BENGALI LETTER VOCALIC R",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x098B, -- ঋ
+ },
+ [0x098C]={
+ ["category"]="lo",
+ ["description"]="BENGALI LETTER VOCALIC L",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x098C, -- ঌ
+ },
+ [0x098F]={
+ ["category"]="lo",
+ ["description"]="BENGALI LETTER E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x098F, -- à¦
+ },
+ [0x0990]={
+ ["category"]="lo",
+ ["description"]="BENGALI LETTER AI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0990, -- à¦
+ },
+ [0x0993]={
+ ["category"]="lo",
+ ["description"]="BENGALI LETTER O",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0993, -- ও
+ },
+ [0x0994]={
+ ["category"]="lo",
+ ["description"]="BENGALI LETTER AU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0994, -- ঔ
+ },
+ [0x0995]={
+ ["category"]="lo",
+ ["description"]="BENGALI LETTER KA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0995, -- ক
+ },
+ [0x0996]={
+ ["category"]="lo",
+ ["description"]="BENGALI LETTER KHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0996, -- খ
+ },
+ [0x0997]={
+ ["category"]="lo",
+ ["description"]="BENGALI LETTER GA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0997, -- গ
+ },
+ [0x0998]={
+ ["category"]="lo",
+ ["description"]="BENGALI LETTER GHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0998, -- ঘ
+ },
+ [0x0999]={
+ ["category"]="lo",
+ ["description"]="BENGALI LETTER NGA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0999, -- ঙ
+ },
+ [0x099A]={
+ ["category"]="lo",
+ ["description"]="BENGALI LETTER CA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x099A, -- চ
+ },
+ [0x099B]={
+ ["category"]="lo",
+ ["description"]="BENGALI LETTER CHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x099B, -- ছ
+ },
+ [0x099C]={
+ ["category"]="lo",
+ ["description"]="BENGALI LETTER JA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x099C, -- জ
+ },
+ [0x099D]={
+ ["category"]="lo",
+ ["description"]="BENGALI LETTER JHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x099D, -- à¦
+ },
+ [0x099E]={
+ ["category"]="lo",
+ ["description"]="BENGALI LETTER NYA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x099E, -- ঞ
+ },
+ [0x099F]={
+ ["category"]="lo",
+ ["description"]="BENGALI LETTER TTA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x099F, -- ট
+ },
+ [0x09A0]={
+ ["category"]="lo",
+ ["description"]="BENGALI LETTER TTHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x09A0, -- ঠ
+ },
+ [0x09A1]={
+ ["category"]="lo",
+ ["description"]="BENGALI LETTER DDA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x09A1, -- ড
+ },
+ [0x09A2]={
+ ["category"]="lo",
+ ["description"]="BENGALI LETTER DDHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x09A2, -- ঢ
+ },
+ [0x09A3]={
+ ["category"]="lo",
+ ["description"]="BENGALI LETTER NNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x09A3, -- ণ
+ },
+ [0x09A4]={
+ ["category"]="lo",
+ ["description"]="BENGALI LETTER TA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x09A4, -- ত
+ },
+ [0x09A5]={
+ ["category"]="lo",
+ ["description"]="BENGALI LETTER THA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x09A5, -- থ
+ },
+ [0x09A6]={
+ ["category"]="lo",
+ ["description"]="BENGALI LETTER DA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x09A6, -- দ
+ },
+ [0x09A7]={
+ ["category"]="lo",
+ ["description"]="BENGALI LETTER DHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x09A7, -- ধ
+ },
+ [0x09A8]={
+ ["category"]="lo",
+ ["description"]="BENGALI LETTER NA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x09A8, -- ন
+ },
+ [0x09AA]={
+ ["category"]="lo",
+ ["description"]="BENGALI LETTER PA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x09AA, -- প
+ },
+ [0x09AB]={
+ ["category"]="lo",
+ ["description"]="BENGALI LETTER PHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x09AB, -- ফ
+ },
+ [0x09AC]={
+ ["category"]="lo",
+ ["description"]="BENGALI LETTER BA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x09AC, -- ব
+ },
+ [0x09AD]={
+ ["category"]="lo",
+ ["description"]="BENGALI LETTER BHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x09AD, -- ভ
+ },
+ [0x09AE]={
+ ["category"]="lo",
+ ["description"]="BENGALI LETTER MA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x09AE, -- ম
+ },
+ [0x09AF]={
+ ["category"]="lo",
+ ["description"]="BENGALI LETTER YA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x09AF, -- য
+ },
+ [0x09B0]={
+ ["category"]="lo",
+ ["description"]="BENGALI LETTER RA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x09B0, -- র
+ },
+ [0x09B2]={
+ ["category"]="lo",
+ ["description"]="BENGALI LETTER LA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x09B2, -- ল
+ },
+ [0x09B6]={
+ ["category"]="lo",
+ ["description"]="BENGALI LETTER SHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x09B6, -- শ
+ },
+ [0x09B7]={
+ ["category"]="lo",
+ ["description"]="BENGALI LETTER SSA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x09B7, -- ষ
+ },
+ [0x09B8]={
+ ["category"]="lo",
+ ["description"]="BENGALI LETTER SA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x09B8, -- স
+ },
+ [0x09B9]={
+ ["category"]="lo",
+ ["description"]="BENGALI LETTER HA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x09B9, -- হ
+ },
+ [0x09BC]={
+ ["category"]="mn",
+ ["description"]="BENGALI SIGN NUKTA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x09BC, -- ়
+ },
+ [0x09BD]={
+ ["category"]="lo",
+ ["description"]="BENGALI SIGN AVAGRAHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x09BD, -- ঽ
+ },
+ [0x09BE]={
+ ["category"]="mc",
+ ["description"]="BENGALI VOWEL SIGN AA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x09BE, -- া
+ },
+ [0x09BF]={
+ ["category"]="mc",
+ ["description"]="BENGALI VOWEL SIGN I",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x09BF, -- ি
+ },
+ [0x09C0]={
+ ["category"]="mc",
+ ["description"]="BENGALI VOWEL SIGN II",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x09C0, -- ী
+ },
+ [0x09C1]={
+ ["category"]="mn",
+ ["description"]="BENGALI VOWEL SIGN U",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x09C1, -- à§
+ },
+ [0x09C2]={
+ ["category"]="mn",
+ ["description"]="BENGALI VOWEL SIGN UU",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x09C2, -- ূ
+ },
+ [0x09C3]={
+ ["category"]="mn",
+ ["description"]="BENGALI VOWEL SIGN VOCALIC R",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x09C3, -- ৃ
+ },
+ [0x09C4]={
+ ["category"]="mn",
+ ["description"]="BENGALI VOWEL SIGN VOCALIC RR",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x09C4, -- ৄ
+ },
+ [0x09C7]={
+ ["category"]="mc",
+ ["description"]="BENGALI VOWEL SIGN E",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x09C7, -- ে
+ },
+ [0x09C8]={
+ ["category"]="mc",
+ ["description"]="BENGALI VOWEL SIGN AI",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x09C8, -- ৈ
+ },
+ [0x09CB]={
+ ["category"]="mc",
+ ["description"]="BENGALI VOWEL SIGN O",
+ ["linebreak"]="cm",
+ ["specials"]={ "char", 0x09C7, 0x09BE },
+ ["unicodeslot"]=0x09CB, -- ো
+ },
+ [0x09CC]={
+ ["category"]="mc",
+ ["description"]="BENGALI VOWEL SIGN AU",
+ ["linebreak"]="cm",
+ ["specials"]={ "char", 0x09C7, 0x09D7 },
+ ["unicodeslot"]=0x09CC, -- ৌ
+ },
+ [0x09CD]={
+ ["category"]="mn",
+ ["description"]="BENGALI SIGN VIRAMA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x09CD, -- à§
+ },
+ [0x09CE]={
+ ["category"]="lo",
+ ["description"]="BENGALI LETTER KHANDA TA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x09CE, -- ৎ
+ },
+ [0x09D7]={
+ ["category"]="mc",
+ ["description"]="BENGALI AU LENGTH MARK",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x09D7, -- ৗ
+ },
+ [0x09DC]={
+ ["category"]="lo",
+ ["description"]="BENGALI LETTER RRA",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x09A1, 0x09BC },
+ ["unicodeslot"]=0x09DC, -- ড়
+ },
+ [0x09DD]={
+ ["category"]="lo",
+ ["description"]="BENGALI LETTER RHA",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x09A2, 0x09BC },
+ ["unicodeslot"]=0x09DD, -- à§
+ },
+ [0x09DF]={
+ ["category"]="lo",
+ ["description"]="BENGALI LETTER YYA",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x09AF, 0x09BC },
+ ["unicodeslot"]=0x09DF, -- য়
+ },
+ [0x09E0]={
+ ["category"]="lo",
+ ["description"]="BENGALI LETTER VOCALIC RR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x09E0, -- ৠ
+ },
+ [0x09E1]={
+ ["category"]="lo",
+ ["description"]="BENGALI LETTER VOCALIC LL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x09E1, -- ৡ
+ },
+ [0x09E2]={
+ ["category"]="mn",
+ ["description"]="BENGALI VOWEL SIGN VOCALIC L",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x09E2, -- ৢ
+ },
+ [0x09E3]={
+ ["category"]="mn",
+ ["description"]="BENGALI VOWEL SIGN VOCALIC LL",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x09E3, -- ৣ
+ },
+ [0x09E6]={
+ ["category"]="nd",
+ ["description"]="BENGALI DIGIT ZERO",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x09E6, -- ০
+ },
+ [0x09E7]={
+ ["category"]="nd",
+ ["description"]="BENGALI DIGIT ONE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x09E7, -- ১
+ },
+ [0x09E8]={
+ ["category"]="nd",
+ ["description"]="BENGALI DIGIT TWO",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x09E8, -- ২
+ },
+ [0x09E9]={
+ ["category"]="nd",
+ ["description"]="BENGALI DIGIT THREE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x09E9, -- ৩
+ },
+ [0x09EA]={
+ ["category"]="nd",
+ ["description"]="BENGALI DIGIT FOUR",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x09EA, -- ৪
+ },
+ [0x09EB]={
+ ["category"]="nd",
+ ["description"]="BENGALI DIGIT FIVE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x09EB, -- ৫
+ },
+ [0x09EC]={
+ ["category"]="nd",
+ ["description"]="BENGALI DIGIT SIX",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x09EC, -- ৬
+ },
+ [0x09ED]={
+ ["category"]="nd",
+ ["description"]="BENGALI DIGIT SEVEN",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x09ED, -- ৭
+ },
+ [0x09EE]={
+ ["category"]="nd",
+ ["description"]="BENGALI DIGIT EIGHT",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x09EE, -- ৮
+ },
+ [0x09EF]={
+ ["category"]="nd",
+ ["description"]="BENGALI DIGIT NINE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x09EF, -- ৯
+ },
+ [0x09F0]={
+ ["category"]="lo",
+ ["description"]="BENGALI LETTER RA WITH MIDDLE DIAGONAL",
+ ["linebreak"]="al",
+ ["shcode"]=0x09B0,
+ ["unicodeslot"]=0x09F0, -- ৰ
+ },
+ [0x09F1]={
+ ["category"]="lo",
+ ["description"]="BENGALI LETTER RA WITH LOWER DIAGONAL",
+ ["linebreak"]="al",
+ ["shcode"]=0x09B0,
+ ["unicodeslot"]=0x09F1, -- ৱ
+ },
+ [0x09F2]={
+ ["category"]="sc",
+ ["description"]="BENGALI RUPEE MARK",
+ ["linebreak"]="pr",
+ ["unicodeslot"]=0x09F2, -- ৲
+ },
+ [0x09F3]={
+ ["category"]="sc",
+ ["description"]="BENGALI RUPEE SIGN",
+ ["linebreak"]="pr",
+ ["unicodeslot"]=0x09F3, -- ৳
+ },
+ [0x09F4]={
+ ["category"]="no",
+ ["description"]="BENGALI CURRENCY NUMERATOR ONE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x09F4, -- ৴
+ },
+ [0x09F5]={
+ ["category"]="no",
+ ["description"]="BENGALI CURRENCY NUMERATOR TWO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x09F5, -- ৵
+ },
+ [0x09F6]={
+ ["category"]="no",
+ ["description"]="BENGALI CURRENCY NUMERATOR THREE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x09F6, -- ৶
+ },
+ [0x09F7]={
+ ["category"]="no",
+ ["description"]="BENGALI CURRENCY NUMERATOR FOUR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x09F7, -- ৷
+ },
+ [0x09F8]={
+ ["category"]="no",
+ ["description"]="BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x09F8, -- ৸
+ },
+ [0x09F9]={
+ ["category"]="no",
+ ["description"]="BENGALI CURRENCY DENOMINATOR SIXTEEN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x09F9, -- ৹
+ },
+ [0x09FA]={
+ ["category"]="so",
+ ["description"]="BENGALI ISSHAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x09FA, -- ৺
+ },
+ [0x0A01]={
+ ["category"]="mn",
+ ["description"]="GURMUKHI SIGN ADAK BINDI",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0A01, -- à¨
+ },
+ [0x0A02]={
+ ["category"]="mn",
+ ["description"]="GURMUKHI SIGN BINDI",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0A02, -- ਂ
+ },
+ [0x0A03]={
+ ["category"]="mc",
+ ["description"]="GURMUKHI SIGN VISARGA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0A03, -- ਃ
+ },
+ [0x0A05]={
+ ["category"]="lo",
+ ["description"]="GURMUKHI LETTER A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A05, -- ਅ
+ },
+ [0x0A06]={
+ ["category"]="lo",
+ ["description"]="GURMUKHI LETTER AA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A06, -- ਆ
+ },
+ [0x0A07]={
+ ["category"]="lo",
+ ["description"]="GURMUKHI LETTER I",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A07, -- ਇ
+ },
+ [0x0A08]={
+ ["category"]="lo",
+ ["description"]="GURMUKHI LETTER II",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A08, -- ਈ
+ },
+ [0x0A09]={
+ ["category"]="lo",
+ ["description"]="GURMUKHI LETTER U",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A09, -- ਉ
+ },
+ [0x0A0A]={
+ ["category"]="lo",
+ ["description"]="GURMUKHI LETTER UU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A0A, -- ਊ
+ },
+ [0x0A0F]={
+ ["category"]="lo",
+ ["description"]="GURMUKHI LETTER EE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A0F, -- à¨
+ },
+ [0x0A10]={
+ ["category"]="lo",
+ ["description"]="GURMUKHI LETTER AI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A10, -- à¨
+ },
+ [0x0A13]={
+ ["category"]="lo",
+ ["description"]="GURMUKHI LETTER OO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A13, -- ਓ
+ },
+ [0x0A14]={
+ ["category"]="lo",
+ ["description"]="GURMUKHI LETTER AU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A14, -- ਔ
+ },
+ [0x0A15]={
+ ["category"]="lo",
+ ["description"]="GURMUKHI LETTER KA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A15, -- ਕ
+ },
+ [0x0A16]={
+ ["category"]="lo",
+ ["description"]="GURMUKHI LETTER KHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A16, -- ਖ
+ },
+ [0x0A17]={
+ ["category"]="lo",
+ ["description"]="GURMUKHI LETTER GA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A17, -- ਗ
+ },
+ [0x0A18]={
+ ["category"]="lo",
+ ["description"]="GURMUKHI LETTER GHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A18, -- ਘ
+ },
+ [0x0A19]={
+ ["category"]="lo",
+ ["description"]="GURMUKHI LETTER NGA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A19, -- ਙ
+ },
+ [0x0A1A]={
+ ["category"]="lo",
+ ["description"]="GURMUKHI LETTER CA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A1A, -- ਚ
+ },
+ [0x0A1B]={
+ ["category"]="lo",
+ ["description"]="GURMUKHI LETTER CHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A1B, -- ਛ
+ },
+ [0x0A1C]={
+ ["category"]="lo",
+ ["description"]="GURMUKHI LETTER JA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A1C, -- ਜ
+ },
+ [0x0A1D]={
+ ["category"]="lo",
+ ["description"]="GURMUKHI LETTER JHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A1D, -- à¨
+ },
+ [0x0A1E]={
+ ["category"]="lo",
+ ["description"]="GURMUKHI LETTER NYA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A1E, -- ਞ
+ },
+ [0x0A1F]={
+ ["category"]="lo",
+ ["description"]="GURMUKHI LETTER TTA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A1F, -- ਟ
+ },
+ [0x0A20]={
+ ["category"]="lo",
+ ["description"]="GURMUKHI LETTER TTHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A20, -- ਠ
+ },
+ [0x0A21]={
+ ["category"]="lo",
+ ["description"]="GURMUKHI LETTER DDA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A21, -- ਡ
+ },
+ [0x0A22]={
+ ["category"]="lo",
+ ["description"]="GURMUKHI LETTER DDHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A22, -- ਢ
+ },
+ [0x0A23]={
+ ["category"]="lo",
+ ["description"]="GURMUKHI LETTER NNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A23, -- ਣ
+ },
+ [0x0A24]={
+ ["category"]="lo",
+ ["description"]="GURMUKHI LETTER TA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A24, -- ਤ
+ },
+ [0x0A25]={
+ ["category"]="lo",
+ ["description"]="GURMUKHI LETTER THA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A25, -- ਥ
+ },
+ [0x0A26]={
+ ["category"]="lo",
+ ["description"]="GURMUKHI LETTER DA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A26, -- ਦ
+ },
+ [0x0A27]={
+ ["category"]="lo",
+ ["description"]="GURMUKHI LETTER DHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A27, -- ਧ
+ },
+ [0x0A28]={
+ ["category"]="lo",
+ ["description"]="GURMUKHI LETTER NA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A28, -- ਨ
+ },
+ [0x0A2A]={
+ ["category"]="lo",
+ ["description"]="GURMUKHI LETTER PA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A2A, -- ਪ
+ },
+ [0x0A2B]={
+ ["category"]="lo",
+ ["description"]="GURMUKHI LETTER PHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A2B, -- ਫ
+ },
+ [0x0A2C]={
+ ["category"]="lo",
+ ["description"]="GURMUKHI LETTER BA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A2C, -- ਬ
+ },
+ [0x0A2D]={
+ ["category"]="lo",
+ ["description"]="GURMUKHI LETTER BHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A2D, -- ਭ
+ },
+ [0x0A2E]={
+ ["category"]="lo",
+ ["description"]="GURMUKHI LETTER MA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A2E, -- ਮ
+ },
+ [0x0A2F]={
+ ["category"]="lo",
+ ["description"]="GURMUKHI LETTER YA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A2F, -- ਯ
+ },
+ [0x0A30]={
+ ["category"]="lo",
+ ["description"]="GURMUKHI LETTER RA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A30, -- ਰ
+ },
+ [0x0A32]={
+ ["category"]="lo",
+ ["description"]="GURMUKHI LETTER LA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A32, -- ਲ
+ },
+ [0x0A33]={
+ ["category"]="lo",
+ ["description"]="GURMUKHI LETTER LLA",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x0A32, 0x0A3C },
+ ["unicodeslot"]=0x0A33, -- ਲ਼
+ },
+ [0x0A35]={
+ ["category"]="lo",
+ ["description"]="GURMUKHI LETTER VA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A35, -- ਵ
+ },
+ [0x0A36]={
+ ["category"]="lo",
+ ["description"]="GURMUKHI LETTER SHA",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x0A38, 0x0A3C },
+ ["unicodeslot"]=0x0A36, -- ਸ਼
+ },
+ [0x0A38]={
+ ["category"]="lo",
+ ["description"]="GURMUKHI LETTER SA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A38, -- ਸ
+ },
+ [0x0A39]={
+ ["category"]="lo",
+ ["description"]="GURMUKHI LETTER HA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A39, -- ਹ
+ },
+ [0x0A3C]={
+ ["category"]="mn",
+ ["description"]="GURMUKHI SIGN NUKTA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0A3C, -- ਼
+ },
+ [0x0A3E]={
+ ["category"]="mc",
+ ["description"]="GURMUKHI VOWEL SIGN AA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0A3E, -- ਾ
+ },
+ [0x0A3F]={
+ ["category"]="mc",
+ ["description"]="GURMUKHI VOWEL SIGN I",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0A3F, -- ਿ
+ },
+ [0x0A40]={
+ ["category"]="mc",
+ ["description"]="GURMUKHI VOWEL SIGN II",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0A40, -- à©€
+ },
+ [0x0A41]={
+ ["category"]="mn",
+ ["description"]="GURMUKHI VOWEL SIGN U",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0A41, -- à©
+ },
+ [0x0A42]={
+ ["category"]="mn",
+ ["description"]="GURMUKHI VOWEL SIGN UU",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0A42, -- à©‚
+ },
+ [0x0A47]={
+ ["category"]="mn",
+ ["description"]="GURMUKHI VOWEL SIGN EE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0A47, -- ੇ
+ },
+ [0x0A48]={
+ ["category"]="mn",
+ ["description"]="GURMUKHI VOWEL SIGN AI",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0A48, -- ੈ
+ },
+ [0x0A4B]={
+ ["category"]="mn",
+ ["description"]="GURMUKHI VOWEL SIGN OO",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0A4B, -- à©‹
+ },
+ [0x0A4C]={
+ ["category"]="mn",
+ ["description"]="GURMUKHI VOWEL SIGN AU",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0A4C, -- ੌ
+ },
+ [0x0A4D]={
+ ["category"]="mn",
+ ["description"]="GURMUKHI SIGN VIRAMA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0A4D, -- à©
+ },
+ [0x0A59]={
+ ["category"]="lo",
+ ["description"]="GURMUKHI LETTER KHHA",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x0A16, 0x0A3C },
+ ["unicodeslot"]=0x0A59, -- à©™
+ },
+ [0x0A5A]={
+ ["category"]="lo",
+ ["description"]="GURMUKHI LETTER GHHA",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x0A17, 0x0A3C },
+ ["unicodeslot"]=0x0A5A, -- à©š
+ },
+ [0x0A5B]={
+ ["category"]="lo",
+ ["description"]="GURMUKHI LETTER ZA",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x0A1C, 0x0A3C },
+ ["unicodeslot"]=0x0A5B, -- à©›
+ },
+ [0x0A5C]={
+ ["category"]="lo",
+ ["description"]="GURMUKHI LETTER RRA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A5C, -- ੜ
+ },
+ [0x0A5E]={
+ ["category"]="lo",
+ ["description"]="GURMUKHI LETTER FA",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x0A2B, 0x0A3C },
+ ["unicodeslot"]=0x0A5E, -- à©ž
+ },
+ [0x0A66]={
+ ["category"]="nd",
+ ["description"]="GURMUKHI DIGIT ZERO",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0A66, -- ੦
+ },
+ [0x0A67]={
+ ["category"]="nd",
+ ["description"]="GURMUKHI DIGIT ONE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0A67, -- ੧
+ },
+ [0x0A68]={
+ ["category"]="nd",
+ ["description"]="GURMUKHI DIGIT TWO",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0A68, -- ੨
+ },
+ [0x0A69]={
+ ["category"]="nd",
+ ["description"]="GURMUKHI DIGIT THREE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0A69, -- à©©
+ },
+ [0x0A6A]={
+ ["category"]="nd",
+ ["description"]="GURMUKHI DIGIT FOUR",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0A6A, -- ੪
+ },
+ [0x0A6B]={
+ ["category"]="nd",
+ ["description"]="GURMUKHI DIGIT FIVE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0A6B, -- à©«
+ },
+ [0x0A6C]={
+ ["category"]="nd",
+ ["description"]="GURMUKHI DIGIT SIX",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0A6C, -- ੬
+ },
+ [0x0A6D]={
+ ["category"]="nd",
+ ["description"]="GURMUKHI DIGIT SEVEN",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0A6D, -- à©­
+ },
+ [0x0A6E]={
+ ["category"]="nd",
+ ["description"]="GURMUKHI DIGIT EIGHT",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0A6E, -- à©®
+ },
+ [0x0A6F]={
+ ["category"]="nd",
+ ["description"]="GURMUKHI DIGIT NINE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0A6F, -- ੯
+ },
+ [0x0A70]={
+ ["category"]="mn",
+ ["description"]="GURMUKHI TIPPI",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0A70, -- à©°
+ },
+ [0x0A71]={
+ ["category"]="mn",
+ ["description"]="GURMUKHI ADDAK",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0A71, -- ੱ
+ },
+ [0x0A72]={
+ ["category"]="lo",
+ ["description"]="GURMUKHI IRI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A72, -- ੲ
+ },
+ [0x0A73]={
+ ["category"]="lo",
+ ["description"]="GURMUKHI URA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A73, -- ੳ
+ },
+ [0x0A74]={
+ ["category"]="lo",
+ ["description"]="GURMUKHI EK ONKAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A74, -- à©´
+ },
+ [0x0A81]={
+ ["category"]="mn",
+ ["description"]="GUJARATI SIGN CANDRABINDU",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0A81, -- àª
+ },
+ [0x0A82]={
+ ["category"]="mn",
+ ["description"]="GUJARATI SIGN ANUSVARA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0A82, -- ં
+ },
+ [0x0A83]={
+ ["category"]="mc",
+ ["description"]="GUJARATI SIGN VISARGA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0A83, -- ઃ
+ },
+ [0x0A85]={
+ ["category"]="lo",
+ ["description"]="GUJARATI LETTER A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A85, -- અ
+ },
+ [0x0A86]={
+ ["category"]="lo",
+ ["description"]="GUJARATI LETTER AA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A86, -- આ
+ },
+ [0x0A87]={
+ ["category"]="lo",
+ ["description"]="GUJARATI LETTER I",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A87, -- ઇ
+ },
+ [0x0A88]={
+ ["category"]="lo",
+ ["description"]="GUJARATI LETTER II",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A88, -- ઈ
+ },
+ [0x0A89]={
+ ["category"]="lo",
+ ["description"]="GUJARATI LETTER U",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A89, -- ઉ
+ },
+ [0x0A8A]={
+ ["category"]="lo",
+ ["description"]="GUJARATI LETTER UU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A8A, -- ઊ
+ },
+ [0x0A8B]={
+ ["category"]="lo",
+ ["description"]="GUJARATI LETTER VOCALIC R",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A8B, -- ઋ
+ },
+ [0x0A8C]={
+ ["category"]="lo",
+ ["description"]="GUJARATI LETTER VOCALIC L",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A8C, -- ઌ
+ },
+ [0x0A8D]={
+ ["category"]="lo",
+ ["description"]="GUJARATI VOWEL CANDRA E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A8D, -- àª
+ },
+ [0x0A8F]={
+ ["category"]="lo",
+ ["description"]="GUJARATI LETTER E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A8F, -- àª
+ },
+ [0x0A90]={
+ ["category"]="lo",
+ ["description"]="GUJARATI LETTER AI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A90, -- àª
+ },
+ [0x0A91]={
+ ["category"]="lo",
+ ["description"]="GUJARATI VOWEL CANDRA O",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A91, -- ઑ
+ },
+ [0x0A93]={
+ ["category"]="lo",
+ ["description"]="GUJARATI LETTER O",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A93, -- ઓ
+ },
+ [0x0A94]={
+ ["category"]="lo",
+ ["description"]="GUJARATI LETTER AU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A94, -- ઔ
+ },
+ [0x0A95]={
+ ["category"]="lo",
+ ["description"]="GUJARATI LETTER KA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A95, -- ક
+ },
+ [0x0A96]={
+ ["category"]="lo",
+ ["description"]="GUJARATI LETTER KHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A96, -- ખ
+ },
+ [0x0A97]={
+ ["category"]="lo",
+ ["description"]="GUJARATI LETTER GA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A97, -- ગ
+ },
+ [0x0A98]={
+ ["category"]="lo",
+ ["description"]="GUJARATI LETTER GHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A98, -- ઘ
+ },
+ [0x0A99]={
+ ["category"]="lo",
+ ["description"]="GUJARATI LETTER NGA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A99, -- ઙ
+ },
+ [0x0A9A]={
+ ["category"]="lo",
+ ["description"]="GUJARATI LETTER CA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A9A, -- ચ
+ },
+ [0x0A9B]={
+ ["category"]="lo",
+ ["description"]="GUJARATI LETTER CHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A9B, -- છ
+ },
+ [0x0A9C]={
+ ["category"]="lo",
+ ["description"]="GUJARATI LETTER JA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A9C, -- જ
+ },
+ [0x0A9D]={
+ ["category"]="lo",
+ ["description"]="GUJARATI LETTER JHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A9D, -- àª
+ },
+ [0x0A9E]={
+ ["category"]="lo",
+ ["description"]="GUJARATI LETTER NYA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A9E, -- ઞ
+ },
+ [0x0A9F]={
+ ["category"]="lo",
+ ["description"]="GUJARATI LETTER TTA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0A9F, -- ટ
+ },
+ [0x0AA0]={
+ ["category"]="lo",
+ ["description"]="GUJARATI LETTER TTHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0AA0, -- ઠ
+ },
+ [0x0AA1]={
+ ["category"]="lo",
+ ["description"]="GUJARATI LETTER DDA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0AA1, -- ડ
+ },
+ [0x0AA2]={
+ ["category"]="lo",
+ ["description"]="GUJARATI LETTER DDHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0AA2, -- ઢ
+ },
+ [0x0AA3]={
+ ["category"]="lo",
+ ["description"]="GUJARATI LETTER NNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0AA3, -- ણ
+ },
+ [0x0AA4]={
+ ["category"]="lo",
+ ["description"]="GUJARATI LETTER TA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0AA4, -- ત
+ },
+ [0x0AA5]={
+ ["category"]="lo",
+ ["description"]="GUJARATI LETTER THA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0AA5, -- થ
+ },
+ [0x0AA6]={
+ ["category"]="lo",
+ ["description"]="GUJARATI LETTER DA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0AA6, -- દ
+ },
+ [0x0AA7]={
+ ["category"]="lo",
+ ["description"]="GUJARATI LETTER DHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0AA7, -- ધ
+ },
+ [0x0AA8]={
+ ["category"]="lo",
+ ["description"]="GUJARATI LETTER NA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0AA8, -- ન
+ },
+ [0x0AAA]={
+ ["category"]="lo",
+ ["description"]="GUJARATI LETTER PA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0AAA, -- પ
+ },
+ [0x0AAB]={
+ ["category"]="lo",
+ ["description"]="GUJARATI LETTER PHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0AAB, -- ફ
+ },
+ [0x0AAC]={
+ ["category"]="lo",
+ ["description"]="GUJARATI LETTER BA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0AAC, -- બ
+ },
+ [0x0AAD]={
+ ["category"]="lo",
+ ["description"]="GUJARATI LETTER BHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0AAD, -- ભ
+ },
+ [0x0AAE]={
+ ["category"]="lo",
+ ["description"]="GUJARATI LETTER MA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0AAE, -- મ
+ },
+ [0x0AAF]={
+ ["category"]="lo",
+ ["description"]="GUJARATI LETTER YA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0AAF, -- ય
+ },
+ [0x0AB0]={
+ ["category"]="lo",
+ ["description"]="GUJARATI LETTER RA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0AB0, -- ર
+ },
+ [0x0AB2]={
+ ["category"]="lo",
+ ["description"]="GUJARATI LETTER LA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0AB2, -- લ
+ },
+ [0x0AB3]={
+ ["category"]="lo",
+ ["description"]="GUJARATI LETTER LLA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0AB3, -- ળ
+ },
+ [0x0AB5]={
+ ["category"]="lo",
+ ["description"]="GUJARATI LETTER VA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0AB5, -- વ
+ },
+ [0x0AB6]={
+ ["category"]="lo",
+ ["description"]="GUJARATI LETTER SHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0AB6, -- શ
+ },
+ [0x0AB7]={
+ ["category"]="lo",
+ ["description"]="GUJARATI LETTER SSA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0AB7, -- ષ
+ },
+ [0x0AB8]={
+ ["category"]="lo",
+ ["description"]="GUJARATI LETTER SA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0AB8, -- સ
+ },
+ [0x0AB9]={
+ ["category"]="lo",
+ ["description"]="GUJARATI LETTER HA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0AB9, -- હ
+ },
+ [0x0ABC]={
+ ["category"]="mn",
+ ["description"]="GUJARATI SIGN NUKTA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0ABC, -- ઼
+ },
+ [0x0ABD]={
+ ["category"]="lo",
+ ["description"]="GUJARATI SIGN AVAGRAHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0ABD, -- ઽ
+ },
+ [0x0ABE]={
+ ["category"]="mc",
+ ["description"]="GUJARATI VOWEL SIGN AA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0ABE, -- ા
+ },
+ [0x0ABF]={
+ ["category"]="mc",
+ ["description"]="GUJARATI VOWEL SIGN I",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0ABF, -- િ
+ },
+ [0x0AC0]={
+ ["category"]="mc",
+ ["description"]="GUJARATI VOWEL SIGN II",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0AC0, -- à«€
+ },
+ [0x0AC1]={
+ ["category"]="mn",
+ ["description"]="GUJARATI VOWEL SIGN U",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0AC1, -- à«
+ },
+ [0x0AC2]={
+ ["category"]="mn",
+ ["description"]="GUJARATI VOWEL SIGN UU",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0AC2, -- à«‚
+ },
+ [0x0AC3]={
+ ["category"]="mn",
+ ["description"]="GUJARATI VOWEL SIGN VOCALIC R",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0AC3, -- ૃ
+ },
+ [0x0AC4]={
+ ["category"]="mn",
+ ["description"]="GUJARATI VOWEL SIGN VOCALIC RR",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0AC4, -- à«„
+ },
+ [0x0AC5]={
+ ["category"]="mn",
+ ["description"]="GUJARATI VOWEL SIGN CANDRA E",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0AC5, -- à«…
+ },
+ [0x0AC7]={
+ ["category"]="mn",
+ ["description"]="GUJARATI VOWEL SIGN E",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0AC7, -- ે
+ },
+ [0x0AC8]={
+ ["category"]="mn",
+ ["description"]="GUJARATI VOWEL SIGN AI",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0AC8, -- ૈ
+ },
+ [0x0AC9]={
+ ["category"]="mc",
+ ["description"]="GUJARATI VOWEL SIGN CANDRA O",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0AC9, -- ૉ
+ },
+ [0x0ACB]={
+ ["category"]="mc",
+ ["description"]="GUJARATI VOWEL SIGN O",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0ACB, -- à«‹
+ },
+ [0x0ACC]={
+ ["category"]="mc",
+ ["description"]="GUJARATI VOWEL SIGN AU",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0ACC, -- ૌ
+ },
+ [0x0ACD]={
+ ["category"]="mn",
+ ["description"]="GUJARATI SIGN VIRAMA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0ACD, -- à«
+ },
+ [0x0AD0]={
+ ["category"]="lo",
+ ["description"]="GUJARATI OM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0AD0, -- à«
+ },
+ [0x0AE0]={
+ ["category"]="lo",
+ ["description"]="GUJARATI LETTER VOCALIC RR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0AE0, -- à« 
+ },
+ [0x0AE1]={
+ ["category"]="lo",
+ ["description"]="GUJARATI LETTER VOCALIC LL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0AE1, -- à«¡
+ },
+ [0x0AE2]={
+ ["category"]="mn",
+ ["description"]="GUJARATI VOWEL SIGN VOCALIC L",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0AE2, -- à«¢
+ },
+ [0x0AE3]={
+ ["category"]="mn",
+ ["description"]="GUJARATI VOWEL SIGN VOCALIC LL",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0AE3, -- à«£
+ },
+ [0x0AE6]={
+ ["category"]="nd",
+ ["description"]="GUJARATI DIGIT ZERO",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0AE6, -- ૦
+ },
+ [0x0AE7]={
+ ["category"]="nd",
+ ["description"]="GUJARATI DIGIT ONE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0AE7, -- ૧
+ },
+ [0x0AE8]={
+ ["category"]="nd",
+ ["description"]="GUJARATI DIGIT TWO",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0AE8, -- ૨
+ },
+ [0x0AE9]={
+ ["category"]="nd",
+ ["description"]="GUJARATI DIGIT THREE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0AE9, -- à«©
+ },
+ [0x0AEA]={
+ ["category"]="nd",
+ ["description"]="GUJARATI DIGIT FOUR",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0AEA, -- ૪
+ },
+ [0x0AEB]={
+ ["category"]="nd",
+ ["description"]="GUJARATI DIGIT FIVE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0AEB, -- à««
+ },
+ [0x0AEC]={
+ ["category"]="nd",
+ ["description"]="GUJARATI DIGIT SIX",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0AEC, -- ૬
+ },
+ [0x0AED]={
+ ["category"]="nd",
+ ["description"]="GUJARATI DIGIT SEVEN",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0AED, -- à«­
+ },
+ [0x0AEE]={
+ ["category"]="nd",
+ ["description"]="GUJARATI DIGIT EIGHT",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0AEE, -- à«®
+ },
+ [0x0AEF]={
+ ["category"]="nd",
+ ["description"]="GUJARATI DIGIT NINE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0AEF, -- ૯
+ },
+ [0x0AF1]={
+ ["category"]="sc",
+ ["description"]="GUJARATI RUPEE SIGN",
+ ["linebreak"]="pr",
+ ["unicodeslot"]=0x0AF1, -- ૱
+ },
+ [0x0B01]={
+ ["category"]="mn",
+ ["description"]="ORIYA SIGN CANDRABINDU",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0B01, -- à¬
+ },
+ [0x0B02]={
+ ["category"]="mc",
+ ["description"]="ORIYA SIGN ANUSVARA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0B02, -- ଂ
+ },
+ [0x0B03]={
+ ["category"]="mc",
+ ["description"]="ORIYA SIGN VISARGA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0B03, -- ଃ
+ },
+ [0x0B05]={
+ ["category"]="lo",
+ ["description"]="ORIYA LETTER A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B05, -- ଅ
+ },
+ [0x0B06]={
+ ["category"]="lo",
+ ["description"]="ORIYA LETTER AA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B06, -- ଆ
+ },
+ [0x0B07]={
+ ["category"]="lo",
+ ["description"]="ORIYA LETTER I",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B07, -- ଇ
+ },
+ [0x0B08]={
+ ["category"]="lo",
+ ["description"]="ORIYA LETTER II",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B08, -- ଈ
+ },
+ [0x0B09]={
+ ["category"]="lo",
+ ["description"]="ORIYA LETTER U",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B09, -- ଉ
+ },
+ [0x0B0A]={
+ ["category"]="lo",
+ ["description"]="ORIYA LETTER UU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B0A, -- ଊ
+ },
+ [0x0B0B]={
+ ["category"]="lo",
+ ["description"]="ORIYA LETTER VOCALIC R",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B0B, -- ଋ
+ },
+ [0x0B0C]={
+ ["category"]="lo",
+ ["description"]="ORIYA LETTER VOCALIC L",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B0C, -- ଌ
+ },
+ [0x0B0F]={
+ ["category"]="lo",
+ ["description"]="ORIYA LETTER E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B0F, -- à¬
+ },
+ [0x0B10]={
+ ["category"]="lo",
+ ["description"]="ORIYA LETTER AI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B10, -- à¬
+ },
+ [0x0B13]={
+ ["category"]="lo",
+ ["description"]="ORIYA LETTER O",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B13, -- ଓ
+ },
+ [0x0B14]={
+ ["category"]="lo",
+ ["description"]="ORIYA LETTER AU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B14, -- ଔ
+ },
+ [0x0B15]={
+ ["category"]="lo",
+ ["description"]="ORIYA LETTER KA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B15, -- କ
+ },
+ [0x0B16]={
+ ["category"]="lo",
+ ["description"]="ORIYA LETTER KHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B16, -- ଖ
+ },
+ [0x0B17]={
+ ["category"]="lo",
+ ["description"]="ORIYA LETTER GA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B17, -- ଗ
+ },
+ [0x0B18]={
+ ["category"]="lo",
+ ["description"]="ORIYA LETTER GHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B18, -- ଘ
+ },
+ [0x0B19]={
+ ["category"]="lo",
+ ["description"]="ORIYA LETTER NGA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B19, -- ଙ
+ },
+ [0x0B1A]={
+ ["category"]="lo",
+ ["description"]="ORIYA LETTER CA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B1A, -- ଚ
+ },
+ [0x0B1B]={
+ ["category"]="lo",
+ ["description"]="ORIYA LETTER CHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B1B, -- ଛ
+ },
+ [0x0B1C]={
+ ["category"]="lo",
+ ["description"]="ORIYA LETTER JA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B1C, -- ଜ
+ },
+ [0x0B1D]={
+ ["category"]="lo",
+ ["description"]="ORIYA LETTER JHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B1D, -- à¬
+ },
+ [0x0B1E]={
+ ["category"]="lo",
+ ["description"]="ORIYA LETTER NYA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B1E, -- ଞ
+ },
+ [0x0B1F]={
+ ["category"]="lo",
+ ["description"]="ORIYA LETTER TTA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B1F, -- ଟ
+ },
+ [0x0B20]={
+ ["category"]="lo",
+ ["description"]="ORIYA LETTER TTHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B20, -- ଠ
+ },
+ [0x0B21]={
+ ["category"]="lo",
+ ["description"]="ORIYA LETTER DDA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B21, -- ଡ
+ },
+ [0x0B22]={
+ ["category"]="lo",
+ ["description"]="ORIYA LETTER DDHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B22, -- ଢ
+ },
+ [0x0B23]={
+ ["category"]="lo",
+ ["description"]="ORIYA LETTER NNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B23, -- ଣ
+ },
+ [0x0B24]={
+ ["category"]="lo",
+ ["description"]="ORIYA LETTER TA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B24, -- ତ
+ },
+ [0x0B25]={
+ ["category"]="lo",
+ ["description"]="ORIYA LETTER THA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B25, -- ଥ
+ },
+ [0x0B26]={
+ ["category"]="lo",
+ ["description"]="ORIYA LETTER DA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B26, -- ଦ
+ },
+ [0x0B27]={
+ ["category"]="lo",
+ ["description"]="ORIYA LETTER DHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B27, -- ଧ
+ },
+ [0x0B28]={
+ ["category"]="lo",
+ ["description"]="ORIYA LETTER NA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B28, -- ନ
+ },
+ [0x0B2A]={
+ ["category"]="lo",
+ ["description"]="ORIYA LETTER PA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B2A, -- ପ
+ },
+ [0x0B2B]={
+ ["category"]="lo",
+ ["description"]="ORIYA LETTER PHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B2B, -- ଫ
+ },
+ [0x0B2C]={
+ ["category"]="lo",
+ ["description"]="ORIYA LETTER BA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B2C, -- ବ
+ },
+ [0x0B2D]={
+ ["category"]="lo",
+ ["description"]="ORIYA LETTER BHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B2D, -- ଭ
+ },
+ [0x0B2E]={
+ ["category"]="lo",
+ ["description"]="ORIYA LETTER MA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B2E, -- ମ
+ },
+ [0x0B2F]={
+ ["category"]="lo",
+ ["description"]="ORIYA LETTER YA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B2F, -- ଯ
+ },
+ [0x0B30]={
+ ["category"]="lo",
+ ["description"]="ORIYA LETTER RA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B30, -- ର
+ },
+ [0x0B32]={
+ ["category"]="lo",
+ ["description"]="ORIYA LETTER LA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B32, -- ଲ
+ },
+ [0x0B33]={
+ ["category"]="lo",
+ ["description"]="ORIYA LETTER LLA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B33, -- ଳ
+ },
+ [0x0B35]={
+ ["category"]="lo",
+ ["description"]="ORIYA LETTER VA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B35, -- ଵ
+ },
+ [0x0B36]={
+ ["category"]="lo",
+ ["description"]="ORIYA LETTER SHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B36, -- ଶ
+ },
+ [0x0B37]={
+ ["category"]="lo",
+ ["description"]="ORIYA LETTER SSA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B37, -- ଷ
+ },
+ [0x0B38]={
+ ["category"]="lo",
+ ["description"]="ORIYA LETTER SA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B38, -- ସ
+ },
+ [0x0B39]={
+ ["category"]="lo",
+ ["description"]="ORIYA LETTER HA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B39, -- ହ
+ },
+ [0x0B3C]={
+ ["category"]="mn",
+ ["description"]="ORIYA SIGN NUKTA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0B3C, -- ଼
+ },
+ [0x0B3D]={
+ ["category"]="lo",
+ ["description"]="ORIYA SIGN AVAGRAHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B3D, -- ଽ
+ },
+ [0x0B3E]={
+ ["category"]="mc",
+ ["description"]="ORIYA VOWEL SIGN AA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0B3E, -- ା
+ },
+ [0x0B3F]={
+ ["category"]="mn",
+ ["description"]="ORIYA VOWEL SIGN I",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0B3F, -- ି
+ },
+ [0x0B40]={
+ ["category"]="mc",
+ ["description"]="ORIYA VOWEL SIGN II",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0B40, -- à­€
+ },
+ [0x0B41]={
+ ["category"]="mn",
+ ["description"]="ORIYA VOWEL SIGN U",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0B41, -- à­
+ },
+ [0x0B42]={
+ ["category"]="mn",
+ ["description"]="ORIYA VOWEL SIGN UU",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0B42, -- à­‚
+ },
+ [0x0B43]={
+ ["category"]="mn",
+ ["description"]="ORIYA VOWEL SIGN VOCALIC R",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0B43, -- à­ƒ
+ },
+ [0x0B47]={
+ ["category"]="mc",
+ ["description"]="ORIYA VOWEL SIGN E",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0B47, -- à­‡
+ },
+ [0x0B48]={
+ ["category"]="mc",
+ ["description"]="ORIYA VOWEL SIGN AI",
+ ["linebreak"]="cm",
+ ["specials"]={ "char", 0x0B47, 0x0B56 },
+ ["unicodeslot"]=0x0B48, -- à­ˆ
+ },
+ [0x0B4B]={
+ ["category"]="mc",
+ ["description"]="ORIYA VOWEL SIGN O",
+ ["linebreak"]="cm",
+ ["specials"]={ "char", 0x0B47, 0x0B3E },
+ ["unicodeslot"]=0x0B4B, -- à­‹
+ },
+ [0x0B4C]={
+ ["category"]="mc",
+ ["description"]="ORIYA VOWEL SIGN AU",
+ ["linebreak"]="cm",
+ ["specials"]={ "char", 0x0B47, 0x0B57 },
+ ["unicodeslot"]=0x0B4C, -- ୌ
+ },
+ [0x0B4D]={
+ ["category"]="mn",
+ ["description"]="ORIYA SIGN VIRAMA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0B4D, -- à­
+ },
+ [0x0B56]={
+ ["category"]="mn",
+ ["description"]="ORIYA AI LENGTH MARK",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0B56, -- à­–
+ },
+ [0x0B57]={
+ ["category"]="mc",
+ ["description"]="ORIYA AU LENGTH MARK",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0B57, -- à­—
+ },
+ [0x0B5C]={
+ ["category"]="lo",
+ ["description"]="ORIYA LETTER RRA",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x0B21, 0x0B3C },
+ ["unicodeslot"]=0x0B5C, -- ଡ଼
+ },
+ [0x0B5D]={
+ ["category"]="lo",
+ ["description"]="ORIYA LETTER RHA",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x0B22, 0x0B3C },
+ ["unicodeslot"]=0x0B5D, -- à­
+ },
+ [0x0B5F]={
+ ["category"]="lo",
+ ["description"]="ORIYA LETTER YYA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B5F, -- à­Ÿ
+ },
+ [0x0B60]={
+ ["category"]="lo",
+ ["description"]="ORIYA LETTER VOCALIC RR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B60, -- à­ 
+ },
+ [0x0B61]={
+ ["category"]="lo",
+ ["description"]="ORIYA LETTER VOCALIC LL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B61, -- à­¡
+ },
+ [0x0B66]={
+ ["category"]="nd",
+ ["description"]="ORIYA DIGIT ZERO",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0B66, -- à­¦
+ },
+ [0x0B67]={
+ ["category"]="nd",
+ ["description"]="ORIYA DIGIT ONE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0B67, -- à­§
+ },
+ [0x0B68]={
+ ["category"]="nd",
+ ["description"]="ORIYA DIGIT TWO",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0B68, -- à­¨
+ },
+ [0x0B69]={
+ ["category"]="nd",
+ ["description"]="ORIYA DIGIT THREE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0B69, -- à­©
+ },
+ [0x0B6A]={
+ ["category"]="nd",
+ ["description"]="ORIYA DIGIT FOUR",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0B6A, -- à­ª
+ },
+ [0x0B6B]={
+ ["category"]="nd",
+ ["description"]="ORIYA DIGIT FIVE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0B6B, -- à­«
+ },
+ [0x0B6C]={
+ ["category"]="nd",
+ ["description"]="ORIYA DIGIT SIX",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0B6C, -- à­¬
+ },
+ [0x0B6D]={
+ ["category"]="nd",
+ ["description"]="ORIYA DIGIT SEVEN",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0B6D, -- à­­
+ },
+ [0x0B6E]={
+ ["category"]="nd",
+ ["description"]="ORIYA DIGIT EIGHT",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0B6E, -- à­®
+ },
+ [0x0B6F]={
+ ["category"]="nd",
+ ["description"]="ORIYA DIGIT NINE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0B6F, -- à­¯
+ },
+ [0x0B70]={
+ ["category"]="so",
+ ["description"]="ORIYA ISSHAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B70, -- à­°
+ },
+ [0x0B71]={
+ ["category"]="lo",
+ ["description"]="ORIYA LETTER WA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B71, -- à­±
+ },
+ [0x0B82]={
+ ["category"]="mn",
+ ["description"]="TAMIL SIGN ANUSVARA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0B82, -- ஂ
+ },
+ [0x0B83]={
+ ["category"]="lo",
+ ["description"]="TAMIL SIGN VISARGA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B83, -- ஃ
+ },
+ [0x0B85]={
+ ["category"]="lo",
+ ["description"]="TAMIL LETTER A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B85, -- à®…
+ },
+ [0x0B86]={
+ ["category"]="lo",
+ ["description"]="TAMIL LETTER AA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B86, -- ஆ
+ },
+ [0x0B87]={
+ ["category"]="lo",
+ ["description"]="TAMIL LETTER I",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B87, -- இ
+ },
+ [0x0B88]={
+ ["category"]="lo",
+ ["description"]="TAMIL LETTER II",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B88, -- ஈ
+ },
+ [0x0B89]={
+ ["category"]="lo",
+ ["description"]="TAMIL LETTER U",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B89, -- உ
+ },
+ [0x0B8A]={
+ ["category"]="lo",
+ ["description"]="TAMIL LETTER UU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B8A, -- ஊ
+ },
+ [0x0B8E]={
+ ["category"]="lo",
+ ["description"]="TAMIL LETTER E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B8E, -- எ
+ },
+ [0x0B8F]={
+ ["category"]="lo",
+ ["description"]="TAMIL LETTER EE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B8F, -- à®
+ },
+ [0x0B90]={
+ ["category"]="lo",
+ ["description"]="TAMIL LETTER AI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B90, -- à®
+ },
+ [0x0B92]={
+ ["category"]="lo",
+ ["description"]="TAMIL LETTER O",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B92, -- à®’
+ },
+ [0x0B93]={
+ ["category"]="lo",
+ ["description"]="TAMIL LETTER OO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B93, -- ஓ
+ },
+ [0x0B94]={
+ ["category"]="lo",
+ ["description"]="TAMIL LETTER AU",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x0B92, 0x0BD7 },
+ ["unicodeslot"]=0x0B94, -- à®”
+ },
+ [0x0B95]={
+ ["category"]="lo",
+ ["description"]="TAMIL LETTER KA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B95, -- க
+ },
+ [0x0B99]={
+ ["category"]="lo",
+ ["description"]="TAMIL LETTER NGA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B99, -- à®™
+ },
+ [0x0B9A]={
+ ["category"]="lo",
+ ["description"]="TAMIL LETTER CA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B9A, -- ச
+ },
+ [0x0B9C]={
+ ["category"]="lo",
+ ["description"]="TAMIL LETTER JA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B9C, -- ஜ
+ },
+ [0x0B9E]={
+ ["category"]="lo",
+ ["description"]="TAMIL LETTER NYA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B9E, -- ஞ
+ },
+ [0x0B9F]={
+ ["category"]="lo",
+ ["description"]="TAMIL LETTER TTA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0B9F, -- ட
+ },
+ [0x0BA3]={
+ ["category"]="lo",
+ ["description"]="TAMIL LETTER NNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0BA3, -- ண
+ },
+ [0x0BA4]={
+ ["category"]="lo",
+ ["description"]="TAMIL LETTER TA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0BA4, -- த
+ },
+ [0x0BA8]={
+ ["category"]="lo",
+ ["description"]="TAMIL LETTER NA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0BA8, -- ந
+ },
+ [0x0BA9]={
+ ["category"]="lo",
+ ["description"]="TAMIL LETTER NNNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0BA9, -- ன
+ },
+ [0x0BAA]={
+ ["category"]="lo",
+ ["description"]="TAMIL LETTER PA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0BAA, -- ப
+ },
+ [0x0BAE]={
+ ["category"]="lo",
+ ["description"]="TAMIL LETTER MA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0BAE, -- à®®
+ },
+ [0x0BAF]={
+ ["category"]="lo",
+ ["description"]="TAMIL LETTER YA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0BAF, -- ய
+ },
+ [0x0BB0]={
+ ["category"]="lo",
+ ["description"]="TAMIL LETTER RA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0BB0, -- à®°
+ },
+ [0x0BB1]={
+ ["category"]="lo",
+ ["description"]="TAMIL LETTER RRA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0BB1, -- à®±
+ },
+ [0x0BB2]={
+ ["category"]="lo",
+ ["description"]="TAMIL LETTER LA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0BB2, -- ல
+ },
+ [0x0BB3]={
+ ["category"]="lo",
+ ["description"]="TAMIL LETTER LLA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0BB3, -- ள
+ },
+ [0x0BB4]={
+ ["category"]="lo",
+ ["description"]="TAMIL LETTER LLLA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0BB4, -- à®´
+ },
+ [0x0BB5]={
+ ["category"]="lo",
+ ["description"]="TAMIL LETTER VA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0BB5, -- வ
+ },
+ [0x0BB6]={
+ ["category"]="lo",
+ ["description"]="TAMIL LETTER SHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0BB6, -- ஶ
+ },
+ [0x0BB7]={
+ ["category"]="lo",
+ ["description"]="TAMIL LETTER SSA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0BB7, -- à®·
+ },
+ [0x0BB8]={
+ ["category"]="lo",
+ ["description"]="TAMIL LETTER SA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0BB8, -- ஸ
+ },
+ [0x0BB9]={
+ ["category"]="lo",
+ ["description"]="TAMIL LETTER HA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0BB9, -- ஹ
+ },
+ [0x0BBE]={
+ ["category"]="mc",
+ ["description"]="TAMIL VOWEL SIGN AA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0BBE, -- ா
+ },
+ [0x0BBF]={
+ ["category"]="mc",
+ ["description"]="TAMIL VOWEL SIGN I",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0BBF, -- ி
+ },
+ [0x0BC0]={
+ ["category"]="mn",
+ ["description"]="TAMIL VOWEL SIGN II",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0BC0, -- ீ
+ },
+ [0x0BC1]={
+ ["category"]="mc",
+ ["description"]="TAMIL VOWEL SIGN U",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0BC1, -- à¯
+ },
+ [0x0BC2]={
+ ["category"]="mc",
+ ["description"]="TAMIL VOWEL SIGN UU",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0BC2, -- ூ
+ },
+ [0x0BC6]={
+ ["category"]="mc",
+ ["description"]="TAMIL VOWEL SIGN E",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0BC6, -- ெ
+ },
+ [0x0BC7]={
+ ["category"]="mc",
+ ["description"]="TAMIL VOWEL SIGN EE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0BC7, -- ே
+ },
+ [0x0BC8]={
+ ["category"]="mc",
+ ["description"]="TAMIL VOWEL SIGN AI",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0BC8, -- ை
+ },
+ [0x0BCA]={
+ ["category"]="mc",
+ ["description"]="TAMIL VOWEL SIGN O",
+ ["linebreak"]="cm",
+ ["specials"]={ "char", 0x0BC6, 0x0BBE },
+ ["unicodeslot"]=0x0BCA, -- ொ
+ },
+ [0x0BCB]={
+ ["category"]="mc",
+ ["description"]="TAMIL VOWEL SIGN OO",
+ ["linebreak"]="cm",
+ ["specials"]={ "char", 0x0BC7, 0x0BBE },
+ ["unicodeslot"]=0x0BCB, -- ோ
+ },
+ [0x0BCC]={
+ ["category"]="mc",
+ ["description"]="TAMIL VOWEL SIGN AU",
+ ["linebreak"]="cm",
+ ["specials"]={ "char", 0x0BC6, 0x0BD7 },
+ ["unicodeslot"]=0x0BCC, -- ௌ
+ },
+ [0x0BCD]={
+ ["category"]="mn",
+ ["description"]="TAMIL SIGN VIRAMA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0BCD, -- à¯
+ },
+ [0x0BD7]={
+ ["category"]="mc",
+ ["description"]="TAMIL AU LENGTH MARK",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0BD7, -- ௗ
+ },
+ [0x0BE6]={
+ ["category"]="nd",
+ ["description"]="TAMIL DIGIT ZERO",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0BE6, -- ௦
+ },
+ [0x0BE7]={
+ ["category"]="nd",
+ ["description"]="TAMIL DIGIT ONE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0BE7, -- ௧
+ },
+ [0x0BE8]={
+ ["category"]="nd",
+ ["description"]="TAMIL DIGIT TWO",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0BE8, -- ௨
+ },
+ [0x0BE9]={
+ ["category"]="nd",
+ ["description"]="TAMIL DIGIT THREE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0BE9, -- ௩
+ },
+ [0x0BEA]={
+ ["category"]="nd",
+ ["description"]="TAMIL DIGIT FOUR",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0BEA, -- ௪
+ },
+ [0x0BEB]={
+ ["category"]="nd",
+ ["description"]="TAMIL DIGIT FIVE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0BEB, -- ௫
+ },
+ [0x0BEC]={
+ ["category"]="nd",
+ ["description"]="TAMIL DIGIT SIX",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0BEC, -- ௬
+ },
+ [0x0BED]={
+ ["category"]="nd",
+ ["description"]="TAMIL DIGIT SEVEN",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0BED, -- ௭
+ },
+ [0x0BEE]={
+ ["category"]="nd",
+ ["description"]="TAMIL DIGIT EIGHT",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0BEE, -- ௮
+ },
+ [0x0BEF]={
+ ["category"]="nd",
+ ["description"]="TAMIL DIGIT NINE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0BEF, -- ௯
+ },
+ [0x0BF0]={
+ ["category"]="no",
+ ["description"]="TAMIL NUMBER TEN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0BF0, -- ௰
+ },
+ [0x0BF1]={
+ ["category"]="no",
+ ["description"]="TAMIL NUMBER ONE HUNDRED",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0BF1, -- ௱
+ },
+ [0x0BF2]={
+ ["category"]="no",
+ ["description"]="TAMIL NUMBER ONE THOUSAND",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0BF2, -- ௲
+ },
+ [0x0BF3]={
+ ["category"]="so",
+ ["description"]="TAMIL DAY SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0BF3, -- ௳
+ },
+ [0x0BF4]={
+ ["category"]="so",
+ ["description"]="TAMIL MONTH SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0BF4, -- ௴
+ },
+ [0x0BF5]={
+ ["category"]="so",
+ ["description"]="TAMIL YEAR SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0BF5, -- ௵
+ },
+ [0x0BF6]={
+ ["category"]="so",
+ ["description"]="TAMIL DEBIT SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0BF6, -- ௶
+ },
+ [0x0BF7]={
+ ["category"]="so",
+ ["description"]="TAMIL CREDIT SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0BF7, -- ௷
+ },
+ [0x0BF8]={
+ ["category"]="so",
+ ["description"]="TAMIL AS ABOVE SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0BF8, -- ௸
+ },
+ [0x0BF9]={
+ ["category"]="sc",
+ ["description"]="TAMIL RUPEE SIGN",
+ ["linebreak"]="pr",
+ ["unicodeslot"]=0x0BF9, -- ௹
+ },
+ [0x0BFA]={
+ ["category"]="so",
+ ["description"]="TAMIL NUMBER SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0BFA, -- ௺
+ },
+ [0x0C01]={
+ ["category"]="mc",
+ ["description"]="TELUGU SIGN CANDRABINDU",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0C01, -- à°
+ },
+ [0x0C02]={
+ ["category"]="mc",
+ ["description"]="TELUGU SIGN ANUSVARA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0C02, -- à°‚
+ },
+ [0x0C03]={
+ ["category"]="mc",
+ ["description"]="TELUGU SIGN VISARGA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0C03, -- à°ƒ
+ },
+ [0x0C05]={
+ ["category"]="lo",
+ ["description"]="TELUGU LETTER A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C05, -- à°…
+ },
+ [0x0C06]={
+ ["category"]="lo",
+ ["description"]="TELUGU LETTER AA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C06, -- à°†
+ },
+ [0x0C07]={
+ ["category"]="lo",
+ ["description"]="TELUGU LETTER I",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C07, -- à°‡
+ },
+ [0x0C08]={
+ ["category"]="lo",
+ ["description"]="TELUGU LETTER II",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C08, -- à°ˆ
+ },
+ [0x0C09]={
+ ["category"]="lo",
+ ["description"]="TELUGU LETTER U",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C09, -- à°‰
+ },
+ [0x0C0A]={
+ ["category"]="lo",
+ ["description"]="TELUGU LETTER UU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C0A, -- à°Š
+ },
+ [0x0C0B]={
+ ["category"]="lo",
+ ["description"]="TELUGU LETTER VOCALIC R",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C0B, -- à°‹
+ },
+ [0x0C0C]={
+ ["category"]="lo",
+ ["description"]="TELUGU LETTER VOCALIC L",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C0C, -- ఌ
+ },
+ [0x0C0E]={
+ ["category"]="lo",
+ ["description"]="TELUGU LETTER E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C0E, -- à°Ž
+ },
+ [0x0C0F]={
+ ["category"]="lo",
+ ["description"]="TELUGU LETTER EE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C0F, -- à°
+ },
+ [0x0C10]={
+ ["category"]="lo",
+ ["description"]="TELUGU LETTER AI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C10, -- à°
+ },
+ [0x0C12]={
+ ["category"]="lo",
+ ["description"]="TELUGU LETTER O",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C12, -- à°’
+ },
+ [0x0C13]={
+ ["category"]="lo",
+ ["description"]="TELUGU LETTER OO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C13, -- à°“
+ },
+ [0x0C14]={
+ ["category"]="lo",
+ ["description"]="TELUGU LETTER AU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C14, -- à°”
+ },
+ [0x0C15]={
+ ["category"]="lo",
+ ["description"]="TELUGU LETTER KA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C15, -- à°•
+ },
+ [0x0C16]={
+ ["category"]="lo",
+ ["description"]="TELUGU LETTER KHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C16, -- à°–
+ },
+ [0x0C17]={
+ ["category"]="lo",
+ ["description"]="TELUGU LETTER GA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C17, -- à°—
+ },
+ [0x0C18]={
+ ["category"]="lo",
+ ["description"]="TELUGU LETTER GHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C18, -- à°˜
+ },
+ [0x0C19]={
+ ["category"]="lo",
+ ["description"]="TELUGU LETTER NGA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C19, -- à°™
+ },
+ [0x0C1A]={
+ ["category"]="lo",
+ ["description"]="TELUGU LETTER CA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C1A, -- à°š
+ },
+ [0x0C1B]={
+ ["category"]="lo",
+ ["description"]="TELUGU LETTER CHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C1B, -- à°›
+ },
+ [0x0C1C]={
+ ["category"]="lo",
+ ["description"]="TELUGU LETTER JA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C1C, -- జ
+ },
+ [0x0C1D]={
+ ["category"]="lo",
+ ["description"]="TELUGU LETTER JHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C1D, -- à°
+ },
+ [0x0C1E]={
+ ["category"]="lo",
+ ["description"]="TELUGU LETTER NYA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C1E, -- à°ž
+ },
+ [0x0C1F]={
+ ["category"]="lo",
+ ["description"]="TELUGU LETTER TTA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C1F, -- à°Ÿ
+ },
+ [0x0C20]={
+ ["category"]="lo",
+ ["description"]="TELUGU LETTER TTHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C20, -- à° 
+ },
+ [0x0C21]={
+ ["category"]="lo",
+ ["description"]="TELUGU LETTER DDA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C21, -- à°¡
+ },
+ [0x0C22]={
+ ["category"]="lo",
+ ["description"]="TELUGU LETTER DDHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C22, -- à°¢
+ },
+ [0x0C23]={
+ ["category"]="lo",
+ ["description"]="TELUGU LETTER NNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C23, -- à°£
+ },
+ [0x0C24]={
+ ["category"]="lo",
+ ["description"]="TELUGU LETTER TA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C24, -- à°¤
+ },
+ [0x0C25]={
+ ["category"]="lo",
+ ["description"]="TELUGU LETTER THA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C25, -- à°¥
+ },
+ [0x0C26]={
+ ["category"]="lo",
+ ["description"]="TELUGU LETTER DA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C26, -- à°¦
+ },
+ [0x0C27]={
+ ["category"]="lo",
+ ["description"]="TELUGU LETTER DHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C27, -- à°§
+ },
+ [0x0C28]={
+ ["category"]="lo",
+ ["description"]="TELUGU LETTER NA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C28, -- à°¨
+ },
+ [0x0C2A]={
+ ["category"]="lo",
+ ["description"]="TELUGU LETTER PA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C2A, -- à°ª
+ },
+ [0x0C2B]={
+ ["category"]="lo",
+ ["description"]="TELUGU LETTER PHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C2B, -- à°«
+ },
+ [0x0C2C]={
+ ["category"]="lo",
+ ["description"]="TELUGU LETTER BA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C2C, -- à°¬
+ },
+ [0x0C2D]={
+ ["category"]="lo",
+ ["description"]="TELUGU LETTER BHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C2D, -- à°­
+ },
+ [0x0C2E]={
+ ["category"]="lo",
+ ["description"]="TELUGU LETTER MA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C2E, -- à°®
+ },
+ [0x0C2F]={
+ ["category"]="lo",
+ ["description"]="TELUGU LETTER YA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C2F, -- à°¯
+ },
+ [0x0C30]={
+ ["category"]="lo",
+ ["description"]="TELUGU LETTER RA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C30, -- à°°
+ },
+ [0x0C31]={
+ ["category"]="lo",
+ ["description"]="TELUGU LETTER RRA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C31, -- à°±
+ },
+ [0x0C32]={
+ ["category"]="lo",
+ ["description"]="TELUGU LETTER LA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C32, -- à°²
+ },
+ [0x0C33]={
+ ["category"]="lo",
+ ["description"]="TELUGU LETTER LLA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C33, -- à°³
+ },
+ [0x0C35]={
+ ["category"]="lo",
+ ["description"]="TELUGU LETTER VA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C35, -- à°µ
+ },
+ [0x0C36]={
+ ["category"]="lo",
+ ["description"]="TELUGU LETTER SHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C36, -- à°¶
+ },
+ [0x0C37]={
+ ["category"]="lo",
+ ["description"]="TELUGU LETTER SSA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C37, -- à°·
+ },
+ [0x0C38]={
+ ["category"]="lo",
+ ["description"]="TELUGU LETTER SA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C38, -- à°¸
+ },
+ [0x0C39]={
+ ["category"]="lo",
+ ["description"]="TELUGU LETTER HA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C39, -- à°¹
+ },
+ [0x0C3E]={
+ ["category"]="mn",
+ ["description"]="TELUGU VOWEL SIGN AA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0C3E, -- à°¾
+ },
+ [0x0C3F]={
+ ["category"]="mn",
+ ["description"]="TELUGU VOWEL SIGN I",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0C3F, -- à°¿
+ },
+ [0x0C40]={
+ ["category"]="mn",
+ ["description"]="TELUGU VOWEL SIGN II",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0C40, -- à±€
+ },
+ [0x0C41]={
+ ["category"]="mc",
+ ["description"]="TELUGU VOWEL SIGN U",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0C41, -- à±
+ },
+ [0x0C42]={
+ ["category"]="mc",
+ ["description"]="TELUGU VOWEL SIGN UU",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0C42, -- ూ
+ },
+ [0x0C43]={
+ ["category"]="mc",
+ ["description"]="TELUGU VOWEL SIGN VOCALIC R",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0C43, -- ృ
+ },
+ [0x0C44]={
+ ["category"]="mc",
+ ["description"]="TELUGU VOWEL SIGN VOCALIC RR",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0C44, -- ౄ
+ },
+ [0x0C46]={
+ ["category"]="mn",
+ ["description"]="TELUGU VOWEL SIGN E",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0C46, -- ె
+ },
+ [0x0C47]={
+ ["category"]="mn",
+ ["description"]="TELUGU VOWEL SIGN EE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0C47, -- ే
+ },
+ [0x0C48]={
+ ["category"]="mn",
+ ["description"]="TELUGU VOWEL SIGN AI",
+ ["linebreak"]="cm",
+ ["specials"]={ "char", 0x0C46, 0x0C56 },
+ ["unicodeslot"]=0x0C48, -- ై
+ },
+ [0x0C4A]={
+ ["category"]="mn",
+ ["description"]="TELUGU VOWEL SIGN O",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0C4A, -- ొ
+ },
+ [0x0C4B]={
+ ["category"]="mn",
+ ["description"]="TELUGU VOWEL SIGN OO",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0C4B, -- ో
+ },
+ [0x0C4C]={
+ ["category"]="mn",
+ ["description"]="TELUGU VOWEL SIGN AU",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0C4C, -- ౌ
+ },
+ [0x0C4D]={
+ ["category"]="mn",
+ ["description"]="TELUGU SIGN VIRAMA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0C4D, -- à±
+ },
+ [0x0C55]={
+ ["category"]="mn",
+ ["description"]="TELUGU LENGTH MARK",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0C55, -- ౕ
+ },
+ [0x0C56]={
+ ["category"]="mn",
+ ["description"]="TELUGU AI LENGTH MARK",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0C56, -- à±–
+ },
+ [0x0C60]={
+ ["category"]="lo",
+ ["description"]="TELUGU LETTER VOCALIC RR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C60, -- à± 
+ },
+ [0x0C61]={
+ ["category"]="lo",
+ ["description"]="TELUGU LETTER VOCALIC LL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C61, -- ౡ
+ },
+ [0x0C66]={
+ ["category"]="nd",
+ ["description"]="TELUGU DIGIT ZERO",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0C66, -- ౦
+ },
+ [0x0C67]={
+ ["category"]="nd",
+ ["description"]="TELUGU DIGIT ONE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0C67, -- ౧
+ },
+ [0x0C68]={
+ ["category"]="nd",
+ ["description"]="TELUGU DIGIT TWO",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0C68, -- ౨
+ },
+ [0x0C69]={
+ ["category"]="nd",
+ ["description"]="TELUGU DIGIT THREE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0C69, -- ౩
+ },
+ [0x0C6A]={
+ ["category"]="nd",
+ ["description"]="TELUGU DIGIT FOUR",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0C6A, -- ౪
+ },
+ [0x0C6B]={
+ ["category"]="nd",
+ ["description"]="TELUGU DIGIT FIVE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0C6B, -- ౫
+ },
+ [0x0C6C]={
+ ["category"]="nd",
+ ["description"]="TELUGU DIGIT SIX",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0C6C, -- ౬
+ },
+ [0x0C6D]={
+ ["category"]="nd",
+ ["description"]="TELUGU DIGIT SEVEN",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0C6D, -- à±­
+ },
+ [0x0C6E]={
+ ["category"]="nd",
+ ["description"]="TELUGU DIGIT EIGHT",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0C6E, -- à±®
+ },
+ [0x0C6F]={
+ ["category"]="nd",
+ ["description"]="TELUGU DIGIT NINE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0C6F, -- ౯
+ },
+ [0x0C82]={
+ ["category"]="mc",
+ ["description"]="KANNADA SIGN ANUSVARA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0C82, -- ಂ
+ },
+ [0x0C83]={
+ ["category"]="mc",
+ ["description"]="KANNADA SIGN VISARGA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0C83, -- ಃ
+ },
+ [0x0C85]={
+ ["category"]="lo",
+ ["description"]="KANNADA LETTER A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C85, -- ಅ
+ },
+ [0x0C86]={
+ ["category"]="lo",
+ ["description"]="KANNADA LETTER AA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C86, -- ಆ
+ },
+ [0x0C87]={
+ ["category"]="lo",
+ ["description"]="KANNADA LETTER I",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C87, -- ಇ
+ },
+ [0x0C88]={
+ ["category"]="lo",
+ ["description"]="KANNADA LETTER II",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C88, -- ಈ
+ },
+ [0x0C89]={
+ ["category"]="lo",
+ ["description"]="KANNADA LETTER U",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C89, -- ಉ
+ },
+ [0x0C8A]={
+ ["category"]="lo",
+ ["description"]="KANNADA LETTER UU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C8A, -- ಊ
+ },
+ [0x0C8B]={
+ ["category"]="lo",
+ ["description"]="KANNADA LETTER VOCALIC R",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C8B, -- ಋ
+ },
+ [0x0C8C]={
+ ["category"]="lo",
+ ["description"]="KANNADA LETTER VOCALIC L",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C8C, -- ಌ
+ },
+ [0x0C8E]={
+ ["category"]="lo",
+ ["description"]="KANNADA LETTER E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C8E, -- ಎ
+ },
+ [0x0C8F]={
+ ["category"]="lo",
+ ["description"]="KANNADA LETTER EE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C8F, -- à²
+ },
+ [0x0C90]={
+ ["category"]="lo",
+ ["description"]="KANNADA LETTER AI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C90, -- à²
+ },
+ [0x0C92]={
+ ["category"]="lo",
+ ["description"]="KANNADA LETTER O",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C92, -- ಒ
+ },
+ [0x0C93]={
+ ["category"]="lo",
+ ["description"]="KANNADA LETTER OO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C93, -- ಓ
+ },
+ [0x0C94]={
+ ["category"]="lo",
+ ["description"]="KANNADA LETTER AU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C94, -- ಔ
+ },
+ [0x0C95]={
+ ["category"]="lo",
+ ["description"]="KANNADA LETTER KA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C95, -- ಕ
+ },
+ [0x0C96]={
+ ["category"]="lo",
+ ["description"]="KANNADA LETTER KHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C96, -- ಖ
+ },
+ [0x0C97]={
+ ["category"]="lo",
+ ["description"]="KANNADA LETTER GA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C97, -- ಗ
+ },
+ [0x0C98]={
+ ["category"]="lo",
+ ["description"]="KANNADA LETTER GHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C98, -- ಘ
+ },
+ [0x0C99]={
+ ["category"]="lo",
+ ["description"]="KANNADA LETTER NGA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C99, -- ಙ
+ },
+ [0x0C9A]={
+ ["category"]="lo",
+ ["description"]="KANNADA LETTER CA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C9A, -- ಚ
+ },
+ [0x0C9B]={
+ ["category"]="lo",
+ ["description"]="KANNADA LETTER CHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C9B, -- ಛ
+ },
+ [0x0C9C]={
+ ["category"]="lo",
+ ["description"]="KANNADA LETTER JA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C9C, -- ಜ
+ },
+ [0x0C9D]={
+ ["category"]="lo",
+ ["description"]="KANNADA LETTER JHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C9D, -- à²
+ },
+ [0x0C9E]={
+ ["category"]="lo",
+ ["description"]="KANNADA LETTER NYA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C9E, -- ಞ
+ },
+ [0x0C9F]={
+ ["category"]="lo",
+ ["description"]="KANNADA LETTER TTA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0C9F, -- ಟ
+ },
+ [0x0CA0]={
+ ["category"]="lo",
+ ["description"]="KANNADA LETTER TTHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0CA0, -- ಠ
+ },
+ [0x0CA1]={
+ ["category"]="lo",
+ ["description"]="KANNADA LETTER DDA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0CA1, -- ಡ
+ },
+ [0x0CA2]={
+ ["category"]="lo",
+ ["description"]="KANNADA LETTER DDHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0CA2, -- ಢ
+ },
+ [0x0CA3]={
+ ["category"]="lo",
+ ["description"]="KANNADA LETTER NNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0CA3, -- ಣ
+ },
+ [0x0CA4]={
+ ["category"]="lo",
+ ["description"]="KANNADA LETTER TA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0CA4, -- ತ
+ },
+ [0x0CA5]={
+ ["category"]="lo",
+ ["description"]="KANNADA LETTER THA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0CA5, -- ಥ
+ },
+ [0x0CA6]={
+ ["category"]="lo",
+ ["description"]="KANNADA LETTER DA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0CA6, -- ದ
+ },
+ [0x0CA7]={
+ ["category"]="lo",
+ ["description"]="KANNADA LETTER DHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0CA7, -- ಧ
+ },
+ [0x0CA8]={
+ ["category"]="lo",
+ ["description"]="KANNADA LETTER NA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0CA8, -- ನ
+ },
+ [0x0CAA]={
+ ["category"]="lo",
+ ["description"]="KANNADA LETTER PA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0CAA, -- ಪ
+ },
+ [0x0CAB]={
+ ["category"]="lo",
+ ["description"]="KANNADA LETTER PHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0CAB, -- ಫ
+ },
+ [0x0CAC]={
+ ["category"]="lo",
+ ["description"]="KANNADA LETTER BA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0CAC, -- ಬ
+ },
+ [0x0CAD]={
+ ["category"]="lo",
+ ["description"]="KANNADA LETTER BHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0CAD, -- ಭ
+ },
+ [0x0CAE]={
+ ["category"]="lo",
+ ["description"]="KANNADA LETTER MA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0CAE, -- ಮ
+ },
+ [0x0CAF]={
+ ["category"]="lo",
+ ["description"]="KANNADA LETTER YA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0CAF, -- ಯ
+ },
+ [0x0CB0]={
+ ["category"]="lo",
+ ["description"]="KANNADA LETTER RA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0CB0, -- ರ
+ },
+ [0x0CB1]={
+ ["category"]="lo",
+ ["description"]="KANNADA LETTER RRA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0CB1, -- ಱ
+ },
+ [0x0CB2]={
+ ["category"]="lo",
+ ["description"]="KANNADA LETTER LA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0CB2, -- ಲ
+ },
+ [0x0CB3]={
+ ["category"]="lo",
+ ["description"]="KANNADA LETTER LLA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0CB3, -- ಳ
+ },
+ [0x0CB5]={
+ ["category"]="lo",
+ ["description"]="KANNADA LETTER VA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0CB5, -- ವ
+ },
+ [0x0CB6]={
+ ["category"]="lo",
+ ["description"]="KANNADA LETTER SHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0CB6, -- ಶ
+ },
+ [0x0CB7]={
+ ["category"]="lo",
+ ["description"]="KANNADA LETTER SSA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0CB7, -- ಷ
+ },
+ [0x0CB8]={
+ ["category"]="lo",
+ ["description"]="KANNADA LETTER SA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0CB8, -- ಸ
+ },
+ [0x0CB9]={
+ ["category"]="lo",
+ ["description"]="KANNADA LETTER HA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0CB9, -- ಹ
+ },
+ [0x0CBC]={
+ ["category"]="mn",
+ ["description"]="KANNADA SIGN NUKTA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0CBC, -- ಼
+ },
+ [0x0CBD]={
+ ["category"]="lo",
+ ["description"]="KANNADA SIGN AVAGRAHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0CBD, -- ಽ
+ },
+ [0x0CBE]={
+ ["category"]="mc",
+ ["description"]="KANNADA VOWEL SIGN AA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0CBE, -- ಾ
+ },
+ [0x0CBF]={
+ ["category"]="mn",
+ ["description"]="KANNADA VOWEL SIGN I",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0CBF, -- ಿ
+ },
+ [0x0CC0]={
+ ["category"]="mc",
+ ["description"]="KANNADA VOWEL SIGN II",
+ ["linebreak"]="cm",
+ ["specials"]={ "char", 0x0CBF, 0x0CD5 },
+ ["unicodeslot"]=0x0CC0, -- à³€
+ },
+ [0x0CC1]={
+ ["category"]="mc",
+ ["description"]="KANNADA VOWEL SIGN U",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0CC1, -- à³
+ },
+ [0x0CC2]={
+ ["category"]="mc",
+ ["description"]="KANNADA VOWEL SIGN UU",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0CC2, -- ೂ
+ },
+ [0x0CC3]={
+ ["category"]="mc",
+ ["description"]="KANNADA VOWEL SIGN VOCALIC R",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0CC3, -- ೃ
+ },
+ [0x0CC4]={
+ ["category"]="mc",
+ ["description"]="KANNADA VOWEL SIGN VOCALIC RR",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0CC4, -- ೄ
+ },
+ [0x0CC6]={
+ ["category"]="mn",
+ ["description"]="KANNADA VOWEL SIGN E",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0CC6, -- ೆ
+ },
+ [0x0CC7]={
+ ["category"]="mc",
+ ["description"]="KANNADA VOWEL SIGN EE",
+ ["linebreak"]="cm",
+ ["specials"]={ "char", 0x0CC6, 0x0CD5 },
+ ["unicodeslot"]=0x0CC7, -- ೇ
+ },
+ [0x0CC8]={
+ ["category"]="mc",
+ ["description"]="KANNADA VOWEL SIGN AI",
+ ["linebreak"]="cm",
+ ["specials"]={ "char", 0x0CC6, 0x0CD6 },
+ ["unicodeslot"]=0x0CC8, -- ೈ
+ },
+ [0x0CCA]={
+ ["category"]="mc",
+ ["description"]="KANNADA VOWEL SIGN O",
+ ["linebreak"]="cm",
+ ["specials"]={ "char", 0x0CC6, 0x0CC2 },
+ ["unicodeslot"]=0x0CCA, -- ೊ
+ },
+ [0x0CCB]={
+ ["category"]="mc",
+ ["description"]="KANNADA VOWEL SIGN OO",
+ ["linebreak"]="cm",
+ ["specials"]={ "char", 0x0CCA, 0x0CD5 },
+ ["unicodeslot"]=0x0CCB, -- ೋ
+ },
+ [0x0CCC]={
+ ["category"]="mn",
+ ["description"]="KANNADA VOWEL SIGN AU",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0CCC, -- ೌ
+ },
+ [0x0CCD]={
+ ["category"]="mn",
+ ["description"]="KANNADA SIGN VIRAMA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0CCD, -- à³
+ },
+ [0x0CD5]={
+ ["category"]="mc",
+ ["description"]="KANNADA LENGTH MARK",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0CD5, -- ೕ
+ },
+ [0x0CD6]={
+ ["category"]="mc",
+ ["description"]="KANNADA AI LENGTH MARK",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0CD6, -- à³–
+ },
+ [0x0CDE]={
+ ["category"]="lo",
+ ["description"]="KANNADA LETTER FA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0CDE, -- ೞ
+ },
+ [0x0CE0]={
+ ["category"]="lo",
+ ["description"]="KANNADA LETTER VOCALIC RR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0CE0, -- à³ 
+ },
+ [0x0CE1]={
+ ["category"]="lo",
+ ["description"]="KANNADA LETTER VOCALIC LL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0CE1, -- ೡ
+ },
+ [0x0CE2]={
+ ["category"]="mn",
+ ["description"]="KANNADA VOWEL SIGN VOCALIC L",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0CE2, -- à³¢
+ },
+ [0x0CE3]={
+ ["category"]="mn",
+ ["description"]="KANNADA VOWEL SIGN VOCALIC LL",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0CE3, -- à³£
+ },
+ [0x0CE6]={
+ ["category"]="nd",
+ ["description"]="KANNADA DIGIT ZERO",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0CE6, -- ೦
+ },
+ [0x0CE7]={
+ ["category"]="nd",
+ ["description"]="KANNADA DIGIT ONE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0CE7, -- ೧
+ },
+ [0x0CE8]={
+ ["category"]="nd",
+ ["description"]="KANNADA DIGIT TWO",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0CE8, -- ೨
+ },
+ [0x0CE9]={
+ ["category"]="nd",
+ ["description"]="KANNADA DIGIT THREE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0CE9, -- ೩
+ },
+ [0x0CEA]={
+ ["category"]="nd",
+ ["description"]="KANNADA DIGIT FOUR",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0CEA, -- ೪
+ },
+ [0x0CEB]={
+ ["category"]="nd",
+ ["description"]="KANNADA DIGIT FIVE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0CEB, -- ೫
+ },
+ [0x0CEC]={
+ ["category"]="nd",
+ ["description"]="KANNADA DIGIT SIX",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0CEC, -- ೬
+ },
+ [0x0CED]={
+ ["category"]="nd",
+ ["description"]="KANNADA DIGIT SEVEN",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0CED, -- à³­
+ },
+ [0x0CEE]={
+ ["category"]="nd",
+ ["description"]="KANNADA DIGIT EIGHT",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0CEE, -- à³®
+ },
+ [0x0CEF]={
+ ["category"]="nd",
+ ["description"]="KANNADA DIGIT NINE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0CEF, -- ೯
+ },
+ [0x0CF1]={
+ ["category"]="so",
+ ["description"]="KANNADA SIGN JIHVAMULIYA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0CF1, -- à³±
+ },
+ [0x0CF2]={
+ ["category"]="so",
+ ["description"]="KANNADA SIGN UPADHMANIYA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0CF2, -- à³²
+ },
+ [0x0D02]={
+ ["category"]="mc",
+ ["description"]="MALAYALAM SIGN ANUSVARA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0D02, -- à´‚
+ },
+ [0x0D03]={
+ ["category"]="mc",
+ ["description"]="MALAYALAM SIGN VISARGA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0D03, -- à´ƒ
+ },
+ [0x0D05]={
+ ["category"]="lo",
+ ["description"]="MALAYALAM LETTER A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D05, -- à´…
+ },
+ [0x0D06]={
+ ["category"]="lo",
+ ["description"]="MALAYALAM LETTER AA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D06, -- à´†
+ },
+ [0x0D07]={
+ ["category"]="lo",
+ ["description"]="MALAYALAM LETTER I",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D07, -- à´‡
+ },
+ [0x0D08]={
+ ["category"]="lo",
+ ["description"]="MALAYALAM LETTER II",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D08, -- à´ˆ
+ },
+ [0x0D09]={
+ ["category"]="lo",
+ ["description"]="MALAYALAM LETTER U",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D09, -- à´‰
+ },
+ [0x0D0A]={
+ ["category"]="lo",
+ ["description"]="MALAYALAM LETTER UU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D0A, -- à´Š
+ },
+ [0x0D0B]={
+ ["category"]="lo",
+ ["description"]="MALAYALAM LETTER VOCALIC R",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D0B, -- à´‹
+ },
+ [0x0D0C]={
+ ["category"]="lo",
+ ["description"]="MALAYALAM LETTER VOCALIC L",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D0C, -- ഌ
+ },
+ [0x0D0E]={
+ ["category"]="lo",
+ ["description"]="MALAYALAM LETTER E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D0E, -- à´Ž
+ },
+ [0x0D0F]={
+ ["category"]="lo",
+ ["description"]="MALAYALAM LETTER EE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D0F, -- à´
+ },
+ [0x0D10]={
+ ["category"]="lo",
+ ["description"]="MALAYALAM LETTER AI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D10, -- à´
+ },
+ [0x0D12]={
+ ["category"]="lo",
+ ["description"]="MALAYALAM LETTER O",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D12, -- à´’
+ },
+ [0x0D13]={
+ ["category"]="lo",
+ ["description"]="MALAYALAM LETTER OO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D13, -- à´“
+ },
+ [0x0D14]={
+ ["category"]="lo",
+ ["description"]="MALAYALAM LETTER AU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D14, -- à´”
+ },
+ [0x0D15]={
+ ["category"]="lo",
+ ["description"]="MALAYALAM LETTER KA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D15, -- à´•
+ },
+ [0x0D16]={
+ ["category"]="lo",
+ ["description"]="MALAYALAM LETTER KHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D16, -- à´–
+ },
+ [0x0D17]={
+ ["category"]="lo",
+ ["description"]="MALAYALAM LETTER GA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D17, -- à´—
+ },
+ [0x0D18]={
+ ["category"]="lo",
+ ["description"]="MALAYALAM LETTER GHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D18, -- à´˜
+ },
+ [0x0D19]={
+ ["category"]="lo",
+ ["description"]="MALAYALAM LETTER NGA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D19, -- à´™
+ },
+ [0x0D1A]={
+ ["category"]="lo",
+ ["description"]="MALAYALAM LETTER CA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D1A, -- à´š
+ },
+ [0x0D1B]={
+ ["category"]="lo",
+ ["description"]="MALAYALAM LETTER CHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D1B, -- à´›
+ },
+ [0x0D1C]={
+ ["category"]="lo",
+ ["description"]="MALAYALAM LETTER JA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D1C, -- ജ
+ },
+ [0x0D1D]={
+ ["category"]="lo",
+ ["description"]="MALAYALAM LETTER JHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D1D, -- à´
+ },
+ [0x0D1E]={
+ ["category"]="lo",
+ ["description"]="MALAYALAM LETTER NYA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D1E, -- à´ž
+ },
+ [0x0D1F]={
+ ["category"]="lo",
+ ["description"]="MALAYALAM LETTER TTA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D1F, -- à´Ÿ
+ },
+ [0x0D20]={
+ ["category"]="lo",
+ ["description"]="MALAYALAM LETTER TTHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D20, -- à´ 
+ },
+ [0x0D21]={
+ ["category"]="lo",
+ ["description"]="MALAYALAM LETTER DDA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D21, -- à´¡
+ },
+ [0x0D22]={
+ ["category"]="lo",
+ ["description"]="MALAYALAM LETTER DDHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D22, -- à´¢
+ },
+ [0x0D23]={
+ ["category"]="lo",
+ ["description"]="MALAYALAM LETTER NNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D23, -- à´£
+ },
+ [0x0D24]={
+ ["category"]="lo",
+ ["description"]="MALAYALAM LETTER TA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D24, -- à´¤
+ },
+ [0x0D25]={
+ ["category"]="lo",
+ ["description"]="MALAYALAM LETTER THA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D25, -- à´¥
+ },
+ [0x0D26]={
+ ["category"]="lo",
+ ["description"]="MALAYALAM LETTER DA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D26, -- à´¦
+ },
+ [0x0D27]={
+ ["category"]="lo",
+ ["description"]="MALAYALAM LETTER DHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D27, -- à´§
+ },
+ [0x0D28]={
+ ["category"]="lo",
+ ["description"]="MALAYALAM LETTER NA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D28, -- à´¨
+ },
+ [0x0D2A]={
+ ["category"]="lo",
+ ["description"]="MALAYALAM LETTER PA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D2A, -- à´ª
+ },
+ [0x0D2B]={
+ ["category"]="lo",
+ ["description"]="MALAYALAM LETTER PHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D2B, -- à´«
+ },
+ [0x0D2C]={
+ ["category"]="lo",
+ ["description"]="MALAYALAM LETTER BA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D2C, -- à´¬
+ },
+ [0x0D2D]={
+ ["category"]="lo",
+ ["description"]="MALAYALAM LETTER BHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D2D, -- à´­
+ },
+ [0x0D2E]={
+ ["category"]="lo",
+ ["description"]="MALAYALAM LETTER MA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D2E, -- à´®
+ },
+ [0x0D2F]={
+ ["category"]="lo",
+ ["description"]="MALAYALAM LETTER YA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D2F, -- à´¯
+ },
+ [0x0D30]={
+ ["category"]="lo",
+ ["description"]="MALAYALAM LETTER RA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D30, -- à´°
+ },
+ [0x0D31]={
+ ["category"]="lo",
+ ["description"]="MALAYALAM LETTER RRA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D31, -- à´±
+ },
+ [0x0D32]={
+ ["category"]="lo",
+ ["description"]="MALAYALAM LETTER LA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D32, -- à´²
+ },
+ [0x0D33]={
+ ["category"]="lo",
+ ["description"]="MALAYALAM LETTER LLA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D33, -- à´³
+ },
+ [0x0D34]={
+ ["category"]="lo",
+ ["description"]="MALAYALAM LETTER LLLA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D34, -- à´´
+ },
+ [0x0D35]={
+ ["category"]="lo",
+ ["description"]="MALAYALAM LETTER VA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D35, -- à´µ
+ },
+ [0x0D36]={
+ ["category"]="lo",
+ ["description"]="MALAYALAM LETTER SHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D36, -- à´¶
+ },
+ [0x0D37]={
+ ["category"]="lo",
+ ["description"]="MALAYALAM LETTER SSA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D37, -- à´·
+ },
+ [0x0D38]={
+ ["category"]="lo",
+ ["description"]="MALAYALAM LETTER SA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D38, -- à´¸
+ },
+ [0x0D39]={
+ ["category"]="lo",
+ ["description"]="MALAYALAM LETTER HA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D39, -- à´¹
+ },
+ [0x0D3E]={
+ ["category"]="mc",
+ ["description"]="MALAYALAM VOWEL SIGN AA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0D3E, -- à´¾
+ },
+ [0x0D3F]={
+ ["category"]="mc",
+ ["description"]="MALAYALAM VOWEL SIGN I",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0D3F, -- à´¿
+ },
+ [0x0D40]={
+ ["category"]="mc",
+ ["description"]="MALAYALAM VOWEL SIGN II",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0D40, -- ീ
+ },
+ [0x0D41]={
+ ["category"]="mn",
+ ["description"]="MALAYALAM VOWEL SIGN U",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0D41, -- àµ
+ },
+ [0x0D42]={
+ ["category"]="mn",
+ ["description"]="MALAYALAM VOWEL SIGN UU",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0D42, -- ൂ
+ },
+ [0x0D43]={
+ ["category"]="mn",
+ ["description"]="MALAYALAM VOWEL SIGN VOCALIC R",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0D43, -- ൃ
+ },
+ [0x0D46]={
+ ["category"]="mc",
+ ["description"]="MALAYALAM VOWEL SIGN E",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0D46, -- െ
+ },
+ [0x0D47]={
+ ["category"]="mc",
+ ["description"]="MALAYALAM VOWEL SIGN EE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0D47, -- േ
+ },
+ [0x0D48]={
+ ["category"]="mc",
+ ["description"]="MALAYALAM VOWEL SIGN AI",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0D48, -- ൈ
+ },
+ [0x0D4A]={
+ ["category"]="mc",
+ ["description"]="MALAYALAM VOWEL SIGN O",
+ ["linebreak"]="cm",
+ ["specials"]={ "char", 0x0D46, 0x0D3E },
+ ["unicodeslot"]=0x0D4A, -- ൊ
+ },
+ [0x0D4B]={
+ ["category"]="mc",
+ ["description"]="MALAYALAM VOWEL SIGN OO",
+ ["linebreak"]="cm",
+ ["specials"]={ "char", 0x0D47, 0x0D3E },
+ ["unicodeslot"]=0x0D4B, -- ോ
+ },
+ [0x0D4C]={
+ ["category"]="mc",
+ ["description"]="MALAYALAM VOWEL SIGN AU",
+ ["linebreak"]="cm",
+ ["specials"]={ "char", 0x0D46, 0x0D57 },
+ ["unicodeslot"]=0x0D4C, -- ൌ
+ },
+ [0x0D4D]={
+ ["category"]="mn",
+ ["description"]="MALAYALAM SIGN VIRAMA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0D4D, -- àµ
+ },
+ [0x0D57]={
+ ["category"]="mc",
+ ["description"]="MALAYALAM AU LENGTH MARK",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0D57, -- ൗ
+ },
+ [0x0D60]={
+ ["category"]="lo",
+ ["description"]="MALAYALAM LETTER VOCALIC RR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D60, -- ൠ
+ },
+ [0x0D61]={
+ ["category"]="lo",
+ ["description"]="MALAYALAM LETTER VOCALIC LL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D61, -- ൡ
+ },
+ [0x0D66]={
+ ["category"]="nd",
+ ["description"]="MALAYALAM DIGIT ZERO",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0D66, -- ൦
+ },
+ [0x0D67]={
+ ["category"]="nd",
+ ["description"]="MALAYALAM DIGIT ONE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0D67, -- ൧
+ },
+ [0x0D68]={
+ ["category"]="nd",
+ ["description"]="MALAYALAM DIGIT TWO",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0D68, -- ൨
+ },
+ [0x0D69]={
+ ["category"]="nd",
+ ["description"]="MALAYALAM DIGIT THREE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0D69, -- ൩
+ },
+ [0x0D6A]={
+ ["category"]="nd",
+ ["description"]="MALAYALAM DIGIT FOUR",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0D6A, -- ൪
+ },
+ [0x0D6B]={
+ ["category"]="nd",
+ ["description"]="MALAYALAM DIGIT FIVE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0D6B, -- ൫
+ },
+ [0x0D6C]={
+ ["category"]="nd",
+ ["description"]="MALAYALAM DIGIT SIX",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0D6C, -- ൬
+ },
+ [0x0D6D]={
+ ["category"]="nd",
+ ["description"]="MALAYALAM DIGIT SEVEN",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0D6D, -- ൭
+ },
+ [0x0D6E]={
+ ["category"]="nd",
+ ["description"]="MALAYALAM DIGIT EIGHT",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0D6E, -- ൮
+ },
+ [0x0D6F]={
+ ["category"]="nd",
+ ["description"]="MALAYALAM DIGIT NINE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0D6F, -- ൯
+ },
+ [0x0D82]={
+ ["category"]="mc",
+ ["description"]="SINHALA SIGN ANUSVARAYA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0D82, -- ං
+ },
+ [0x0D83]={
+ ["category"]="mc",
+ ["description"]="SINHALA SIGN VISARGAYA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0D83, -- ඃ
+ },
+ [0x0D85]={
+ ["category"]="lo",
+ ["description"]="SINHALA LETTER AYANNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D85, -- අ
+ },
+ [0x0D86]={
+ ["category"]="lo",
+ ["description"]="SINHALA LETTER AAYANNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D86, -- ආ
+ },
+ [0x0D87]={
+ ["category"]="lo",
+ ["description"]="SINHALA LETTER AEYANNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D87, -- ඇ
+ },
+ [0x0D88]={
+ ["category"]="lo",
+ ["description"]="SINHALA LETTER AEEYANNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D88, -- ඈ
+ },
+ [0x0D89]={
+ ["category"]="lo",
+ ["description"]="SINHALA LETTER IYANNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D89, -- ඉ
+ },
+ [0x0D8A]={
+ ["category"]="lo",
+ ["description"]="SINHALA LETTER IIYANNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D8A, -- ඊ
+ },
+ [0x0D8B]={
+ ["category"]="lo",
+ ["description"]="SINHALA LETTER UYANNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D8B, -- උ
+ },
+ [0x0D8C]={
+ ["category"]="lo",
+ ["description"]="SINHALA LETTER UUYANNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D8C, -- ඌ
+ },
+ [0x0D8D]={
+ ["category"]="lo",
+ ["description"]="SINHALA LETTER IRUYANNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D8D, -- à¶
+ },
+ [0x0D8E]={
+ ["category"]="lo",
+ ["description"]="SINHALA LETTER IRUUYANNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D8E, -- ඎ
+ },
+ [0x0D8F]={
+ ["category"]="lo",
+ ["description"]="SINHALA LETTER ILUYANNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D8F, -- à¶
+ },
+ [0x0D90]={
+ ["category"]="lo",
+ ["description"]="SINHALA LETTER ILUUYANNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D90, -- à¶
+ },
+ [0x0D91]={
+ ["category"]="lo",
+ ["description"]="SINHALA LETTER EYANNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D91, -- එ
+ },
+ [0x0D92]={
+ ["category"]="lo",
+ ["description"]="SINHALA LETTER EEYANNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D92, -- ඒ
+ },
+ [0x0D93]={
+ ["category"]="lo",
+ ["description"]="SINHALA LETTER AIYANNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D93, -- ඓ
+ },
+ [0x0D94]={
+ ["category"]="lo",
+ ["description"]="SINHALA LETTER OYANNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D94, -- ඔ
+ },
+ [0x0D95]={
+ ["category"]="lo",
+ ["description"]="SINHALA LETTER OOYANNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D95, -- ඕ
+ },
+ [0x0D96]={
+ ["category"]="lo",
+ ["description"]="SINHALA LETTER AUYANNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D96, -- ඖ
+ },
+ [0x0D9A]={
+ ["category"]="lo",
+ ["description"]="SINHALA LETTER ALPAPRAANA KAYANNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D9A, -- ක
+ },
+ [0x0D9B]={
+ ["category"]="lo",
+ ["description"]="SINHALA LETTER MAHAAPRAANA KAYANNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D9B, -- ඛ
+ },
+ [0x0D9C]={
+ ["category"]="lo",
+ ["description"]="SINHALA LETTER ALPAPRAANA GAYANNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D9C, -- ග
+ },
+ [0x0D9D]={
+ ["category"]="lo",
+ ["description"]="SINHALA LETTER MAHAAPRAANA GAYANNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D9D, -- à¶
+ },
+ [0x0D9E]={
+ ["category"]="lo",
+ ["description"]="SINHALA LETTER KANTAJA NAASIKYAYA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D9E, -- ඞ
+ },
+ [0x0D9F]={
+ ["category"]="lo",
+ ["description"]="SINHALA LETTER SANYAKA GAYANNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0D9F, -- ඟ
+ },
+ [0x0DA0]={
+ ["category"]="lo",
+ ["description"]="SINHALA LETTER ALPAPRAANA CAYANNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0DA0, -- ච
+ },
+ [0x0DA1]={
+ ["category"]="lo",
+ ["description"]="SINHALA LETTER MAHAAPRAANA CAYANNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0DA1, -- ඡ
+ },
+ [0x0DA2]={
+ ["category"]="lo",
+ ["description"]="SINHALA LETTER ALPAPRAANA JAYANNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0DA2, -- ජ
+ },
+ [0x0DA3]={
+ ["category"]="lo",
+ ["description"]="SINHALA LETTER MAHAAPRAANA JAYANNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0DA3, -- ඣ
+ },
+ [0x0DA4]={
+ ["category"]="lo",
+ ["description"]="SINHALA LETTER TAALUJA NAASIKYAYA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0DA4, -- ඤ
+ },
+ [0x0DA5]={
+ ["category"]="lo",
+ ["description"]="SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0DA5, -- ඥ
+ },
+ [0x0DA6]={
+ ["category"]="lo",
+ ["description"]="SINHALA LETTER SANYAKA JAYANNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0DA6, -- ඦ
+ },
+ [0x0DA7]={
+ ["category"]="lo",
+ ["description"]="SINHALA LETTER ALPAPRAANA TTAYANNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0DA7, -- ට
+ },
+ [0x0DA8]={
+ ["category"]="lo",
+ ["description"]="SINHALA LETTER MAHAAPRAANA TTAYANNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0DA8, -- ඨ
+ },
+ [0x0DA9]={
+ ["category"]="lo",
+ ["description"]="SINHALA LETTER ALPAPRAANA DDAYANNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0DA9, -- ඩ
+ },
+ [0x0DAA]={
+ ["category"]="lo",
+ ["description"]="SINHALA LETTER MAHAAPRAANA DDAYANNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0DAA, -- ඪ
+ },
+ [0x0DAB]={
+ ["category"]="lo",
+ ["description"]="SINHALA LETTER MUURDHAJA NAYANNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0DAB, -- ණ
+ },
+ [0x0DAC]={
+ ["category"]="lo",
+ ["description"]="SINHALA LETTER SANYAKA DDAYANNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0DAC, -- ඬ
+ },
+ [0x0DAD]={
+ ["category"]="lo",
+ ["description"]="SINHALA LETTER ALPAPRAANA TAYANNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0DAD, -- ත
+ },
+ [0x0DAE]={
+ ["category"]="lo",
+ ["description"]="SINHALA LETTER MAHAAPRAANA TAYANNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0DAE, -- ථ
+ },
+ [0x0DAF]={
+ ["category"]="lo",
+ ["description"]="SINHALA LETTER ALPAPRAANA DAYANNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0DAF, -- ද
+ },
+ [0x0DB0]={
+ ["category"]="lo",
+ ["description"]="SINHALA LETTER MAHAAPRAANA DAYANNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0DB0, -- ධ
+ },
+ [0x0DB1]={
+ ["category"]="lo",
+ ["description"]="SINHALA LETTER DANTAJA NAYANNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0DB1, -- න
+ },
+ [0x0DB3]={
+ ["category"]="lo",
+ ["description"]="SINHALA LETTER SANYAKA DAYANNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0DB3, -- ඳ
+ },
+ [0x0DB4]={
+ ["category"]="lo",
+ ["description"]="SINHALA LETTER ALPAPRAANA PAYANNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0DB4, -- ප
+ },
+ [0x0DB5]={
+ ["category"]="lo",
+ ["description"]="SINHALA LETTER MAHAAPRAANA PAYANNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0DB5, -- ඵ
+ },
+ [0x0DB6]={
+ ["category"]="lo",
+ ["description"]="SINHALA LETTER ALPAPRAANA BAYANNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0DB6, -- බ
+ },
+ [0x0DB7]={
+ ["category"]="lo",
+ ["description"]="SINHALA LETTER MAHAAPRAANA BAYANNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0DB7, -- භ
+ },
+ [0x0DB8]={
+ ["category"]="lo",
+ ["description"]="SINHALA LETTER MAYANNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0DB8, -- ම
+ },
+ [0x0DB9]={
+ ["category"]="lo",
+ ["description"]="SINHALA LETTER AMBA BAYANNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0DB9, -- ඹ
+ },
+ [0x0DBA]={
+ ["category"]="lo",
+ ["description"]="SINHALA LETTER YAYANNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0DBA, -- ය
+ },
+ [0x0DBB]={
+ ["category"]="lo",
+ ["description"]="SINHALA LETTER RAYANNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0DBB, -- ර
+ },
+ [0x0DBD]={
+ ["category"]="lo",
+ ["description"]="SINHALA LETTER DANTAJA LAYANNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0DBD, -- ල
+ },
+ [0x0DC0]={
+ ["category"]="lo",
+ ["description"]="SINHALA LETTER VAYANNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0DC0, -- à·€
+ },
+ [0x0DC1]={
+ ["category"]="lo",
+ ["description"]="SINHALA LETTER TAALUJA SAYANNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0DC1, -- à·
+ },
+ [0x0DC2]={
+ ["category"]="lo",
+ ["description"]="SINHALA LETTER MUURDHAJA SAYANNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0DC2, -- à·‚
+ },
+ [0x0DC3]={
+ ["category"]="lo",
+ ["description"]="SINHALA LETTER DANTAJA SAYANNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0DC3, -- à·ƒ
+ },
+ [0x0DC4]={
+ ["category"]="lo",
+ ["description"]="SINHALA LETTER HAYANNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0DC4, -- à·„
+ },
+ [0x0DC5]={
+ ["category"]="lo",
+ ["description"]="SINHALA LETTER MUURDHAJA LAYANNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0DC5, -- à·…
+ },
+ [0x0DC6]={
+ ["category"]="lo",
+ ["description"]="SINHALA LETTER FAYANNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0DC6, -- à·†
+ },
+ [0x0DCA]={
+ ["category"]="mn",
+ ["description"]="SINHALA SIGN AL-LAKUNA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0DCA, -- à·Š
+ },
+ [0x0DCF]={
+ ["category"]="mc",
+ ["description"]="SINHALA VOWEL SIGN AELA-PILLA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0DCF, -- à·
+ },
+ [0x0DD0]={
+ ["category"]="mc",
+ ["description"]="SINHALA VOWEL SIGN KETTI AEDA-PILLA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0DD0, -- à·
+ },
+ [0x0DD1]={
+ ["category"]="mc",
+ ["description"]="SINHALA VOWEL SIGN DIGA AEDA-PILLA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0DD1, -- à·‘
+ },
+ [0x0DD2]={
+ ["category"]="mn",
+ ["description"]="SINHALA VOWEL SIGN KETTI IS-PILLA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0DD2, -- à·’
+ },
+ [0x0DD3]={
+ ["category"]="mn",
+ ["description"]="SINHALA VOWEL SIGN DIGA IS-PILLA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0DD3, -- à·“
+ },
+ [0x0DD4]={
+ ["category"]="mn",
+ ["description"]="SINHALA VOWEL SIGN KETTI PAA-PILLA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0DD4, -- à·”
+ },
+ [0x0DD6]={
+ ["category"]="mn",
+ ["description"]="SINHALA VOWEL SIGN DIGA PAA-PILLA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0DD6, -- à·–
+ },
+ [0x0DD8]={
+ ["category"]="mc",
+ ["description"]="SINHALA VOWEL SIGN GAETTA-PILLA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0DD8, -- à·˜
+ },
+ [0x0DD9]={
+ ["category"]="mc",
+ ["description"]="SINHALA VOWEL SIGN KOMBUVA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0DD9, -- à·™
+ },
+ [0x0DDA]={
+ ["category"]="mc",
+ ["description"]="SINHALA VOWEL SIGN DIGA KOMBUVA",
+ ["linebreak"]="cm",
+ ["specials"]={ "char", 0x0DD9, 0x0DCA },
+ ["unicodeslot"]=0x0DDA, -- à·š
+ },
+ [0x0DDB]={
+ ["category"]="mc",
+ ["description"]="SINHALA VOWEL SIGN KOMBU DEKA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0DDB, -- à·›
+ },
+ [0x0DDC]={
+ ["category"]="mc",
+ ["description"]="SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA",
+ ["linebreak"]="cm",
+ ["specials"]={ "char", 0x0DD9, 0x0DCF },
+ ["unicodeslot"]=0x0DDC, -- ො
+ },
+ [0x0DDD]={
+ ["category"]="mc",
+ ["description"]="SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA",
+ ["linebreak"]="cm",
+ ["specials"]={ "char", 0x0DDC, 0x0DCA },
+ ["unicodeslot"]=0x0DDD, -- à·
+ },
+ [0x0DDE]={
+ ["category"]="mc",
+ ["description"]="SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA",
+ ["linebreak"]="cm",
+ ["specials"]={ "char", 0x0DD9, 0x0DDF },
+ ["unicodeslot"]=0x0DDE, -- à·ž
+ },
+ [0x0DDF]={
+ ["category"]="mc",
+ ["description"]="SINHALA VOWEL SIGN GAYANUKITTA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0DDF, -- à·Ÿ
+ },
+ [0x0DF2]={
+ ["category"]="mc",
+ ["description"]="SINHALA VOWEL SIGN DIGA GAETTA-PILLA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0DF2, -- à·²
+ },
+ [0x0DF3]={
+ ["category"]="mc",
+ ["description"]="SINHALA VOWEL SIGN DIGA GAYANUKITTA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0DF3, -- à·³
+ },
+ [0x0DF4]={
+ ["category"]="po",
+ ["description"]="SINHALA PUNCTUATION KUNDDALIYA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0DF4, -- à·´
+ },
+ [0x0E01]={
+ ["category"]="lo",
+ ["description"]="THAI CHARACTER KO KAI",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E01, -- à¸
+ },
+ [0x0E02]={
+ ["category"]="lo",
+ ["description"]="THAI CHARACTER KHO KHAI",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E02, -- ข
+ },
+ [0x0E03]={
+ ["category"]="lo",
+ ["description"]="THAI CHARACTER KHO KHUAT",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E03, -- ฃ
+ },
+ [0x0E04]={
+ ["category"]="lo",
+ ["description"]="THAI CHARACTER KHO KHWAI",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E04, -- ค
+ },
+ [0x0E05]={
+ ["category"]="lo",
+ ["description"]="THAI CHARACTER KHO KHON",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E05, -- ฅ
+ },
+ [0x0E06]={
+ ["category"]="lo",
+ ["description"]="THAI CHARACTER KHO RAKHANG",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E06, -- ฆ
+ },
+ [0x0E07]={
+ ["category"]="lo",
+ ["description"]="THAI CHARACTER NGO NGU",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E07, -- ง
+ },
+ [0x0E08]={
+ ["category"]="lo",
+ ["description"]="THAI CHARACTER CHO CHAN",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E08, -- จ
+ },
+ [0x0E09]={
+ ["category"]="lo",
+ ["description"]="THAI CHARACTER CHO CHING",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E09, -- ฉ
+ },
+ [0x0E0A]={
+ ["category"]="lo",
+ ["description"]="THAI CHARACTER CHO CHANG",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E0A, -- ช
+ },
+ [0x0E0B]={
+ ["category"]="lo",
+ ["description"]="THAI CHARACTER SO SO",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E0B, -- ซ
+ },
+ [0x0E0C]={
+ ["category"]="lo",
+ ["description"]="THAI CHARACTER CHO CHOE",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E0C, -- ฌ
+ },
+ [0x0E0D]={
+ ["category"]="lo",
+ ["description"]="THAI CHARACTER YO YING",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E0D, -- à¸
+ },
+ [0x0E0E]={
+ ["category"]="lo",
+ ["description"]="THAI CHARACTER DO CHADA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E0E, -- ฎ
+ },
+ [0x0E0F]={
+ ["category"]="lo",
+ ["description"]="THAI CHARACTER TO PATAK",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E0F, -- à¸
+ },
+ [0x0E10]={
+ ["category"]="lo",
+ ["description"]="THAI CHARACTER THO THAN",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E10, -- à¸
+ },
+ [0x0E11]={
+ ["category"]="lo",
+ ["description"]="THAI CHARACTER THO NANGMONTHO",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E11, -- ฑ
+ },
+ [0x0E12]={
+ ["category"]="lo",
+ ["description"]="THAI CHARACTER THO PHUTHAO",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E12, -- ฒ
+ },
+ [0x0E13]={
+ ["category"]="lo",
+ ["description"]="THAI CHARACTER NO NEN",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E13, -- ณ
+ },
+ [0x0E14]={
+ ["category"]="lo",
+ ["description"]="THAI CHARACTER DO DEK",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E14, -- ด
+ },
+ [0x0E15]={
+ ["category"]="lo",
+ ["description"]="THAI CHARACTER TO TAO",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E15, -- ต
+ },
+ [0x0E16]={
+ ["category"]="lo",
+ ["description"]="THAI CHARACTER THO THUNG",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E16, -- ถ
+ },
+ [0x0E17]={
+ ["category"]="lo",
+ ["description"]="THAI CHARACTER THO THAHAN",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E17, -- ท
+ },
+ [0x0E18]={
+ ["category"]="lo",
+ ["description"]="THAI CHARACTER THO THONG",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E18, -- ธ
+ },
+ [0x0E19]={
+ ["category"]="lo",
+ ["description"]="THAI CHARACTER NO NU",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E19, -- น
+ },
+ [0x0E1A]={
+ ["category"]="lo",
+ ["description"]="THAI CHARACTER BO BAIMAI",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E1A, -- บ
+ },
+ [0x0E1B]={
+ ["category"]="lo",
+ ["description"]="THAI CHARACTER PO PLA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E1B, -- ป
+ },
+ [0x0E1C]={
+ ["category"]="lo",
+ ["description"]="THAI CHARACTER PHO PHUNG",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E1C, -- ผ
+ },
+ [0x0E1D]={
+ ["category"]="lo",
+ ["description"]="THAI CHARACTER FO FA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E1D, -- à¸
+ },
+ [0x0E1E]={
+ ["category"]="lo",
+ ["description"]="THAI CHARACTER PHO PHAN",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E1E, -- พ
+ },
+ [0x0E1F]={
+ ["category"]="lo",
+ ["description"]="THAI CHARACTER FO FAN",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E1F, -- ฟ
+ },
+ [0x0E20]={
+ ["category"]="lo",
+ ["description"]="THAI CHARACTER PHO SAMPHAO",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E20, -- ภ
+ },
+ [0x0E21]={
+ ["category"]="lo",
+ ["description"]="THAI CHARACTER MO MA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E21, -- ม
+ },
+ [0x0E22]={
+ ["category"]="lo",
+ ["description"]="THAI CHARACTER YO YAK",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E22, -- ย
+ },
+ [0x0E23]={
+ ["category"]="lo",
+ ["description"]="THAI CHARACTER RO RUA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E23, -- ร
+ },
+ [0x0E24]={
+ ["category"]="lo",
+ ["description"]="THAI CHARACTER RU",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E24, -- ฤ
+ },
+ [0x0E25]={
+ ["category"]="lo",
+ ["description"]="THAI CHARACTER LO LING",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E25, -- ล
+ },
+ [0x0E26]={
+ ["category"]="lo",
+ ["description"]="THAI CHARACTER LU",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E26, -- ฦ
+ },
+ [0x0E27]={
+ ["category"]="lo",
+ ["description"]="THAI CHARACTER WO WAEN",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E27, -- ว
+ },
+ [0x0E28]={
+ ["category"]="lo",
+ ["description"]="THAI CHARACTER SO SALA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E28, -- ศ
+ },
+ [0x0E29]={
+ ["category"]="lo",
+ ["description"]="THAI CHARACTER SO RUSI",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E29, -- ษ
+ },
+ [0x0E2A]={
+ ["category"]="lo",
+ ["description"]="THAI CHARACTER SO SUA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E2A, -- ส
+ },
+ [0x0E2B]={
+ ["category"]="lo",
+ ["description"]="THAI CHARACTER HO HIP",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E2B, -- ห
+ },
+ [0x0E2C]={
+ ["category"]="lo",
+ ["description"]="THAI CHARACTER LO CHULA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E2C, -- ฬ
+ },
+ [0x0E2D]={
+ ["category"]="lo",
+ ["description"]="THAI CHARACTER O ANG",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E2D, -- อ
+ },
+ [0x0E2E]={
+ ["category"]="lo",
+ ["description"]="THAI CHARACTER HO NOKHUK",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E2E, -- ฮ
+ },
+ [0x0E2F]={
+ ["category"]="lo",
+ ["description"]="THAI CHARACTER PAIYANNOI",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E2F, -- ฯ
+ },
+ [0x0E30]={
+ ["category"]="lo",
+ ["description"]="THAI CHARACTER SARA A",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E30, -- ะ
+ },
+ [0x0E31]={
+ ["category"]="mn",
+ ["description"]="THAI CHARACTER MAI HAN-AKAT",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E31, -- ั
+ },
+ [0x0E32]={
+ ["category"]="lo",
+ ["description"]="THAI CHARACTER SARA AA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E32, -- า
+ },
+ [0x0E33]={
+ ["category"]="lo",
+ ["description"]="THAI CHARACTER SARA AM",
+ ["linebreak"]="sa",
+ ["specials"]={ "compat", 0x0E4D, 0x0E32 },
+ ["unicodeslot"]=0x0E33, -- ำ
+ },
+ [0x0E34]={
+ ["category"]="mn",
+ ["description"]="THAI CHARACTER SARA I",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E34, -- ิ
+ },
+ [0x0E35]={
+ ["category"]="mn",
+ ["description"]="THAI CHARACTER SARA II",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E35, -- ี
+ },
+ [0x0E36]={
+ ["category"]="mn",
+ ["description"]="THAI CHARACTER SARA UE",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E36, -- ึ
+ },
+ [0x0E37]={
+ ["category"]="mn",
+ ["description"]="THAI CHARACTER SARA UEE",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E37, -- ื
+ },
+ [0x0E38]={
+ ["category"]="mn",
+ ["description"]="THAI CHARACTER SARA U",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E38, -- ุ
+ },
+ [0x0E39]={
+ ["category"]="mn",
+ ["description"]="THAI CHARACTER SARA UU",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E39, -- ู
+ },
+ [0x0E3A]={
+ ["category"]="mn",
+ ["description"]="THAI CHARACTER PHINTHU",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E3A, -- ฺ
+ },
+ [0x0E3F]={
+ ["category"]="sc",
+ ["description"]="THAI CURRENCY SYMBOL BAHT",
+ ["linebreak"]="pr",
+ ["unicodeslot"]=0x0E3F, -- ฿
+ },
+ [0x0E40]={
+ ["category"]="lo",
+ ["description"]="THAI CHARACTER SARA E",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E40, -- เ
+ },
+ [0x0E41]={
+ ["category"]="lo",
+ ["description"]="THAI CHARACTER SARA AE",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E41, -- à¹
+ },
+ [0x0E42]={
+ ["category"]="lo",
+ ["description"]="THAI CHARACTER SARA O",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E42, -- โ
+ },
+ [0x0E43]={
+ ["category"]="lo",
+ ["description"]="THAI CHARACTER SARA AI MAIMUAN",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E43, -- ใ
+ },
+ [0x0E44]={
+ ["category"]="lo",
+ ["description"]="THAI CHARACTER SARA AI MAIMALAI",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E44, -- ไ
+ },
+ [0x0E45]={
+ ["category"]="lo",
+ ["description"]="THAI CHARACTER LAKKHANGYAO",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E45, -- ๅ
+ },
+ [0x0E46]={
+ ["category"]="lm",
+ ["description"]="THAI CHARACTER MAIYAMOK",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E46, -- ๆ
+ },
+ [0x0E47]={
+ ["category"]="mn",
+ ["description"]="THAI CHARACTER MAITAIKHU",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E47, -- ็
+ },
+ [0x0E48]={
+ ["category"]="mn",
+ ["description"]="THAI CHARACTER MAI EK",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E48, -- ่
+ },
+ [0x0E49]={
+ ["category"]="mn",
+ ["description"]="THAI CHARACTER MAI THO",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E49, -- ้
+ },
+ [0x0E4A]={
+ ["category"]="mn",
+ ["description"]="THAI CHARACTER MAI TRI",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E4A, -- ๊
+ },
+ [0x0E4B]={
+ ["category"]="mn",
+ ["description"]="THAI CHARACTER MAI CHATTAWA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E4B, -- ๋
+ },
+ [0x0E4C]={
+ ["category"]="mn",
+ ["description"]="THAI CHARACTER THANTHAKHAT",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E4C, -- ์
+ },
+ [0x0E4D]={
+ ["category"]="mn",
+ ["description"]="THAI CHARACTER NIKHAHIT",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E4D, -- à¹
+ },
+ [0x0E4E]={
+ ["category"]="mn",
+ ["description"]="THAI CHARACTER YAMAKKAN",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E4E, -- ๎
+ },
+ [0x0E4F]={
+ ["category"]="po",
+ ["description"]="THAI CHARACTER FONGMAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0E4F, -- à¹
+ },
+ [0x0E50]={
+ ["category"]="nd",
+ ["description"]="THAI DIGIT ZERO",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0E50, -- à¹
+ },
+ [0x0E51]={
+ ["category"]="nd",
+ ["description"]="THAI DIGIT ONE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0E51, -- ๑
+ },
+ [0x0E52]={
+ ["category"]="nd",
+ ["description"]="THAI DIGIT TWO",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0E52, -- ๒
+ },
+ [0x0E53]={
+ ["category"]="nd",
+ ["description"]="THAI DIGIT THREE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0E53, -- ๓
+ },
+ [0x0E54]={
+ ["category"]="nd",
+ ["description"]="THAI DIGIT FOUR",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0E54, -- ๔
+ },
+ [0x0E55]={
+ ["category"]="nd",
+ ["description"]="THAI DIGIT FIVE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0E55, -- ๕
+ },
+ [0x0E56]={
+ ["category"]="nd",
+ ["description"]="THAI DIGIT SIX",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0E56, -- ๖
+ },
+ [0x0E57]={
+ ["category"]="nd",
+ ["description"]="THAI DIGIT SEVEN",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0E57, -- ๗
+ },
+ [0x0E58]={
+ ["category"]="nd",
+ ["description"]="THAI DIGIT EIGHT",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0E58, -- ๘
+ },
+ [0x0E59]={
+ ["category"]="nd",
+ ["description"]="THAI DIGIT NINE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0E59, -- ๙
+ },
+ [0x0E5A]={
+ ["category"]="po",
+ ["description"]="THAI CHARACTER ANGKHANKHU",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x0E5A, -- ๚
+ },
+ [0x0E5B]={
+ ["category"]="po",
+ ["description"]="THAI CHARACTER KHOMUT",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x0E5B, -- ๛
+ },
+ [0x0E81]={
+ ["category"]="lo",
+ ["description"]="LAO LETTER KO",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E81, -- àº
+ },
+ [0x0E82]={
+ ["category"]="lo",
+ ["description"]="LAO LETTER KHO SUNG",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E82, -- ຂ
+ },
+ [0x0E84]={
+ ["category"]="lo",
+ ["description"]="LAO LETTER KHO TAM",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E84, -- ຄ
+ },
+ [0x0E87]={
+ ["category"]="lo",
+ ["description"]="LAO LETTER NGO",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E87, -- ງ
+ },
+ [0x0E88]={
+ ["category"]="lo",
+ ["description"]="LAO LETTER CO",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E88, -- ຈ
+ },
+ [0x0E8A]={
+ ["category"]="lo",
+ ["description"]="LAO LETTER SO TAM",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E8A, -- ຊ
+ },
+ [0x0E8D]={
+ ["category"]="lo",
+ ["description"]="LAO LETTER NYO",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E8D, -- àº
+ },
+ [0x0E94]={
+ ["category"]="lo",
+ ["description"]="LAO LETTER DO",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E94, -- ດ
+ },
+ [0x0E95]={
+ ["category"]="lo",
+ ["description"]="LAO LETTER TO",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E95, -- ຕ
+ },
+ [0x0E96]={
+ ["category"]="lo",
+ ["description"]="LAO LETTER THO SUNG",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E96, -- ຖ
+ },
+ [0x0E97]={
+ ["category"]="lo",
+ ["description"]="LAO LETTER THO TAM",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E97, -- ທ
+ },
+ [0x0E99]={
+ ["category"]="lo",
+ ["description"]="LAO LETTER NO",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E99, -- ນ
+ },
+ [0x0E9A]={
+ ["category"]="lo",
+ ["description"]="LAO LETTER BO",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E9A, -- ບ
+ },
+ [0x0E9B]={
+ ["category"]="lo",
+ ["description"]="LAO LETTER PO",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E9B, -- ປ
+ },
+ [0x0E9C]={
+ ["category"]="lo",
+ ["description"]="LAO LETTER PHO SUNG",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E9C, -- ຜ
+ },
+ [0x0E9D]={
+ ["category"]="lo",
+ ["description"]="LAO LETTER FO TAM",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E9D, -- àº
+ },
+ [0x0E9E]={
+ ["category"]="lo",
+ ["description"]="LAO LETTER PHO TAM",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E9E, -- ພ
+ },
+ [0x0E9F]={
+ ["category"]="lo",
+ ["description"]="LAO LETTER FO SUNG",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0E9F, -- ຟ
+ },
+ [0x0EA1]={
+ ["category"]="lo",
+ ["description"]="LAO LETTER MO",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0EA1, -- ມ
+ },
+ [0x0EA2]={
+ ["category"]="lo",
+ ["description"]="LAO LETTER YO",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0EA2, -- ຢ
+ },
+ [0x0EA3]={
+ ["category"]="lo",
+ ["description"]="LAO LETTER LO LING",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0EA3, -- ຣ
+ },
+ [0x0EA5]={
+ ["category"]="lo",
+ ["description"]="LAO LETTER LO LOOT",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0EA5, -- ລ
+ },
+ [0x0EA7]={
+ ["category"]="lo",
+ ["description"]="LAO LETTER WO",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0EA7, -- ວ
+ },
+ [0x0EAA]={
+ ["category"]="lo",
+ ["description"]="LAO LETTER SO SUNG",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0EAA, -- ສ
+ },
+ [0x0EAB]={
+ ["category"]="lo",
+ ["description"]="LAO LETTER HO SUNG",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0EAB, -- ຫ
+ },
+ [0x0EAD]={
+ ["category"]="lo",
+ ["description"]="LAO LETTER O",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0EAD, -- ອ
+ },
+ [0x0EAE]={
+ ["category"]="lo",
+ ["description"]="LAO LETTER HO TAM",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0EAE, -- ຮ
+ },
+ [0x0EAF]={
+ ["category"]="lo",
+ ["description"]="LAO ELLIPSIS",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0EAF, -- ຯ
+ },
+ [0x0EB0]={
+ ["category"]="lo",
+ ["description"]="LAO VOWEL SIGN A",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0EB0, -- ະ
+ },
+ [0x0EB1]={
+ ["category"]="mn",
+ ["description"]="LAO VOWEL SIGN MAI KAN",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0EB1, -- ັ
+ },
+ [0x0EB2]={
+ ["category"]="lo",
+ ["description"]="LAO VOWEL SIGN AA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0EB2, -- າ
+ },
+ [0x0EB3]={
+ ["category"]="lo",
+ ["description"]="LAO VOWEL SIGN AM",
+ ["linebreak"]="sa",
+ ["specials"]={ "compat", 0x0ECD, 0x0EB2 },
+ ["unicodeslot"]=0x0EB3, -- ຳ
+ },
+ [0x0EB4]={
+ ["category"]="mn",
+ ["description"]="LAO VOWEL SIGN I",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0EB4, -- ິ
+ },
+ [0x0EB5]={
+ ["category"]="mn",
+ ["description"]="LAO VOWEL SIGN II",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0EB5, -- ີ
+ },
+ [0x0EB6]={
+ ["category"]="mn",
+ ["description"]="LAO VOWEL SIGN Y",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0EB6, -- ຶ
+ },
+ [0x0EB7]={
+ ["category"]="mn",
+ ["description"]="LAO VOWEL SIGN YY",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0EB7, -- ື
+ },
+ [0x0EB8]={
+ ["category"]="mn",
+ ["description"]="LAO VOWEL SIGN U",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0EB8, -- ຸ
+ },
+ [0x0EB9]={
+ ["category"]="mn",
+ ["description"]="LAO VOWEL SIGN UU",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0EB9, -- ູ
+ },
+ [0x0EBB]={
+ ["category"]="mn",
+ ["description"]="LAO VOWEL SIGN MAI KON",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0EBB, -- ົ
+ },
+ [0x0EBC]={
+ ["category"]="mn",
+ ["description"]="LAO SEMIVOWEL SIGN LO",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0EBC, -- ຼ
+ },
+ [0x0EBD]={
+ ["category"]="lo",
+ ["description"]="LAO SEMIVOWEL SIGN NYO",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0EBD, -- ຽ
+ },
+ [0x0EC0]={
+ ["category"]="lo",
+ ["description"]="LAO VOWEL SIGN E",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0EC0, -- ເ
+ },
+ [0x0EC1]={
+ ["category"]="lo",
+ ["description"]="LAO VOWEL SIGN EI",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0EC1, -- à»
+ },
+ [0x0EC2]={
+ ["category"]="lo",
+ ["description"]="LAO VOWEL SIGN O",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0EC2, -- ໂ
+ },
+ [0x0EC3]={
+ ["category"]="lo",
+ ["description"]="LAO VOWEL SIGN AY",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0EC3, -- ໃ
+ },
+ [0x0EC4]={
+ ["category"]="lo",
+ ["description"]="LAO VOWEL SIGN AI",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0EC4, -- ໄ
+ },
+ [0x0EC6]={
+ ["category"]="lm",
+ ["description"]="LAO KO LA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0EC6, -- ໆ
+ },
+ [0x0EC8]={
+ ["category"]="mn",
+ ["description"]="LAO TONE MAI EK",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0EC8, -- ່
+ },
+ [0x0EC9]={
+ ["category"]="mn",
+ ["description"]="LAO TONE MAI THO",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0EC9, -- ້
+ },
+ [0x0ECA]={
+ ["category"]="mn",
+ ["description"]="LAO TONE MAI TI",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0ECA, -- ໊
+ },
+ [0x0ECB]={
+ ["category"]="mn",
+ ["description"]="LAO TONE MAI CATAWA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0ECB, -- ໋
+ },
+ [0x0ECC]={
+ ["category"]="mn",
+ ["description"]="LAO CANCELLATION MARK",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0ECC, -- ໌
+ },
+ [0x0ECD]={
+ ["category"]="mn",
+ ["description"]="LAO NIGGAHITA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x0ECD, -- à»
+ },
+ [0x0ED0]={
+ ["category"]="nd",
+ ["description"]="LAO DIGIT ZERO",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0ED0, -- à»
+ },
+ [0x0ED1]={
+ ["category"]="nd",
+ ["description"]="LAO DIGIT ONE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0ED1, -- ໑
+ },
+ [0x0ED2]={
+ ["category"]="nd",
+ ["description"]="LAO DIGIT TWO",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0ED2, -- à»’
+ },
+ [0x0ED3]={
+ ["category"]="nd",
+ ["description"]="LAO DIGIT THREE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0ED3, -- ໓
+ },
+ [0x0ED4]={
+ ["category"]="nd",
+ ["description"]="LAO DIGIT FOUR",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0ED4, -- à»”
+ },
+ [0x0ED5]={
+ ["category"]="nd",
+ ["description"]="LAO DIGIT FIVE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0ED5, -- ໕
+ },
+ [0x0ED6]={
+ ["category"]="nd",
+ ["description"]="LAO DIGIT SIX",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0ED6, -- à»–
+ },
+ [0x0ED7]={
+ ["category"]="nd",
+ ["description"]="LAO DIGIT SEVEN",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0ED7, -- à»—
+ },
+ [0x0ED8]={
+ ["category"]="nd",
+ ["description"]="LAO DIGIT EIGHT",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0ED8, -- ໘
+ },
+ [0x0ED9]={
+ ["category"]="nd",
+ ["description"]="LAO DIGIT NINE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0ED9, -- à»™
+ },
+ [0x0EDC]={
+ ["category"]="lo",
+ ["description"]="LAO HO NO",
+ ["linebreak"]="sa",
+ ["specials"]={ "compat", 0x0EAB, 0x0E99 },
+ ["unicodeslot"]=0x0EDC, -- ໜ
+ },
+ [0x0EDD]={
+ ["category"]="lo",
+ ["description"]="LAO HO MO",
+ ["linebreak"]="sa",
+ ["specials"]={ "compat", 0x0EAB, 0x0EA1 },
+ ["unicodeslot"]=0x0EDD, -- à»
+ },
+ [0x0F00]={
+ ["category"]="lo",
+ ["description"]="TIBETAN SYLLABLE OM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F00, -- ༀ
+ },
+ [0x0F01]={
+ ["category"]="so",
+ ["description"]="TIBETAN MARK GTER YIG MGO TRUNCATED A",
+ ["linebreak"]="bb",
+ ["unicodeslot"]=0x0F01, -- à¼
+ },
+ [0x0F02]={
+ ["category"]="so",
+ ["description"]="TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA",
+ ["linebreak"]="bb",
+ ["unicodeslot"]=0x0F02, -- ༂
+ },
+ [0x0F03]={
+ ["category"]="so",
+ ["description"]="TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA",
+ ["linebreak"]="bb",
+ ["unicodeslot"]=0x0F03, -- ༃
+ },
+ [0x0F04]={
+ ["category"]="po",
+ ["description"]="TIBETAN MARK INITIAL YIG MGO MDUN MA",
+ ["linebreak"]="bb",
+ ["unicodeslot"]=0x0F04, -- ༄
+ },
+ [0x0F05]={
+ ["category"]="po",
+ ["description"]="TIBETAN MARK CLOSING YIG MGO SGAB MA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F05, -- ༅
+ },
+ [0x0F06]={
+ ["category"]="po",
+ ["description"]="TIBETAN MARK CARET YIG MGO PHUR SHAD MA",
+ ["linebreak"]="bb",
+ ["unicodeslot"]=0x0F06, -- ༆
+ },
+ [0x0F07]={
+ ["category"]="po",
+ ["description"]="TIBETAN MARK YIG MGO TSHEG SHAD MA",
+ ["linebreak"]="bb",
+ ["unicodeslot"]=0x0F07, -- ༇
+ },
+ [0x0F08]={
+ ["category"]="po",
+ ["description"]="TIBETAN MARK SBRUL SHAD",
+ ["linebreak"]="gl",
+ ["unicodeslot"]=0x0F08, -- ༈
+ },
+ [0x0F09]={
+ ["category"]="po",
+ ["description"]="TIBETAN MARK BSKUR YIG MGO",
+ ["linebreak"]="bb",
+ ["unicodeslot"]=0x0F09, -- ༉
+ },
+ [0x0F0A]={
+ ["category"]="po",
+ ["description"]="TIBETAN MARK BKA- SHOG YIG MGO",
+ ["linebreak"]="bb",
+ ["unicodeslot"]=0x0F0A, -- ༊
+ },
+ [0x0F0B]={
+ ["category"]="po",
+ ["description"]="TIBETAN MARK INTERSYLLABIC TSHEG",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x0F0B, -- ་
+ },
+ [0x0F0C]={
+ ["category"]="po",
+ ["description"]="TIBETAN MARK DELIMITER TSHEG BSTAR",
+ ["linebreak"]="gl",
+ ["specials"]={ "nobreak", 0x0F0B },
+ ["unicodeslot"]=0x0F0C, -- ༌
+ },
+ [0x0F0D]={
+ ["category"]="po",
+ ["description"]="TIBETAN MARK SHAD",
+ ["linebreak"]="ex",
+ ["unicodeslot"]=0x0F0D, -- à¼
+ },
+ [0x0F0E]={
+ ["category"]="po",
+ ["description"]="TIBETAN MARK NYIS SHAD",
+ ["linebreak"]="ex",
+ ["unicodeslot"]=0x0F0E, -- ༎
+ },
+ [0x0F0F]={
+ ["category"]="po",
+ ["description"]="TIBETAN MARK TSHEG SHAD",
+ ["linebreak"]="ex",
+ ["unicodeslot"]=0x0F0F, -- à¼
+ },
+ [0x0F10]={
+ ["category"]="po",
+ ["description"]="TIBETAN MARK NYIS TSHEG SHAD",
+ ["linebreak"]="ex",
+ ["unicodeslot"]=0x0F10, -- à¼
+ },
+ [0x0F11]={
+ ["category"]="po",
+ ["description"]="TIBETAN MARK RIN CHEN SPUNGS SHAD",
+ ["linebreak"]="ex",
+ ["unicodeslot"]=0x0F11, -- ༑
+ },
+ [0x0F12]={
+ ["category"]="po",
+ ["description"]="TIBETAN MARK RGYA GRAM SHAD",
+ ["linebreak"]="gl",
+ ["unicodeslot"]=0x0F12, -- ༒
+ },
+ [0x0F13]={
+ ["category"]="so",
+ ["description"]="TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F13, -- ༓
+ },
+ [0x0F14]={
+ ["category"]="so",
+ ["description"]="TIBETAN MARK GTER TSHEG",
+ ["linebreak"]="ex",
+ ["unicodeslot"]=0x0F14, -- ༔
+ },
+ [0x0F15]={
+ ["category"]="so",
+ ["description"]="TIBETAN LOGOTYPE SIGN CHAD RTAGS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F15, -- ༕
+ },
+ [0x0F16]={
+ ["category"]="so",
+ ["description"]="TIBETAN LOGOTYPE SIGN LHAG RTAGS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F16, -- ༖
+ },
+ [0x0F17]={
+ ["category"]="so",
+ ["description"]="TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F17, -- ༗
+ },
+ [0x0F18]={
+ ["category"]="mn",
+ ["description"]="TIBETAN ASTROLOGICAL SIGN -KHYUD PA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0F18, -- ༘
+ },
+ [0x0F19]={
+ ["category"]="mn",
+ ["description"]="TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0F19, -- ༙
+ },
+ [0x0F1A]={
+ ["category"]="so",
+ ["description"]="TIBETAN SIGN RDEL DKAR GCIG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F1A, -- ༚
+ },
+ [0x0F1B]={
+ ["category"]="so",
+ ["description"]="TIBETAN SIGN RDEL DKAR GNYIS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F1B, -- ༛
+ },
+ [0x0F1C]={
+ ["category"]="so",
+ ["description"]="TIBETAN SIGN RDEL DKAR GSUM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F1C, -- ༜
+ },
+ [0x0F1D]={
+ ["category"]="so",
+ ["description"]="TIBETAN SIGN RDEL NAG GCIG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F1D, -- à¼
+ },
+ [0x0F1E]={
+ ["category"]="so",
+ ["description"]="TIBETAN SIGN RDEL NAG GNYIS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F1E, -- ༞
+ },
+ [0x0F1F]={
+ ["category"]="so",
+ ["description"]="TIBETAN SIGN RDEL DKAR RDEL NAG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F1F, -- ༟
+ },
+ [0x0F20]={
+ ["category"]="nd",
+ ["description"]="TIBETAN DIGIT ZERO",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0F20, -- ༠
+ },
+ [0x0F21]={
+ ["category"]="nd",
+ ["description"]="TIBETAN DIGIT ONE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0F21, -- ༡
+ },
+ [0x0F22]={
+ ["category"]="nd",
+ ["description"]="TIBETAN DIGIT TWO",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0F22, -- ༢
+ },
+ [0x0F23]={
+ ["category"]="nd",
+ ["description"]="TIBETAN DIGIT THREE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0F23, -- ༣
+ },
+ [0x0F24]={
+ ["category"]="nd",
+ ["description"]="TIBETAN DIGIT FOUR",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0F24, -- ༤
+ },
+ [0x0F25]={
+ ["category"]="nd",
+ ["description"]="TIBETAN DIGIT FIVE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0F25, -- ༥
+ },
+ [0x0F26]={
+ ["category"]="nd",
+ ["description"]="TIBETAN DIGIT SIX",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0F26, -- ༦
+ },
+ [0x0F27]={
+ ["category"]="nd",
+ ["description"]="TIBETAN DIGIT SEVEN",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0F27, -- ༧
+ },
+ [0x0F28]={
+ ["category"]="nd",
+ ["description"]="TIBETAN DIGIT EIGHT",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0F28, -- ༨
+ },
+ [0x0F29]={
+ ["category"]="nd",
+ ["description"]="TIBETAN DIGIT NINE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x0F29, -- ༩
+ },
+ [0x0F2A]={
+ ["category"]="no",
+ ["description"]="TIBETAN DIGIT HALF ONE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F2A, -- ༪
+ },
+ [0x0F2B]={
+ ["category"]="no",
+ ["description"]="TIBETAN DIGIT HALF TWO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F2B, -- ༫
+ },
+ [0x0F2C]={
+ ["category"]="no",
+ ["description"]="TIBETAN DIGIT HALF THREE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F2C, -- ༬
+ },
+ [0x0F2D]={
+ ["category"]="no",
+ ["description"]="TIBETAN DIGIT HALF FOUR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F2D, -- ༭
+ },
+ [0x0F2E]={
+ ["category"]="no",
+ ["description"]="TIBETAN DIGIT HALF FIVE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F2E, -- ༮
+ },
+ [0x0F2F]={
+ ["category"]="no",
+ ["description"]="TIBETAN DIGIT HALF SIX",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F2F, -- ༯
+ },
+ [0x0F30]={
+ ["category"]="no",
+ ["description"]="TIBETAN DIGIT HALF SEVEN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F30, -- ༰
+ },
+ [0x0F31]={
+ ["category"]="no",
+ ["description"]="TIBETAN DIGIT HALF EIGHT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F31, -- ༱
+ },
+ [0x0F32]={
+ ["category"]="no",
+ ["description"]="TIBETAN DIGIT HALF NINE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F32, -- ༲
+ },
+ [0x0F33]={
+ ["category"]="no",
+ ["description"]="TIBETAN DIGIT HALF ZERO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F33, -- ༳
+ },
+ [0x0F34]={
+ ["category"]="so",
+ ["description"]="TIBETAN MARK BSDUS RTAGS",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x0F34, -- ༴
+ },
+ [0x0F35]={
+ ["category"]="mn",
+ ["description"]="TIBETAN MARK NGAS BZUNG NYI ZLA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0F35, -- ༵
+ },
+ [0x0F36]={
+ ["category"]="so",
+ ["description"]="TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F36, -- ༶
+ },
+ [0x0F37]={
+ ["category"]="mn",
+ ["description"]="TIBETAN MARK NGAS BZUNG SGOR RTAGS",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0F37, -- ༷
+ },
+ [0x0F38]={
+ ["category"]="so",
+ ["description"]="TIBETAN MARK CHE MGO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F38, -- ༸
+ },
+ [0x0F39]={
+ ["category"]="mn",
+ ["description"]="TIBETAN MARK TSA -PHRU",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0F39, -- ༹
+ },
+ [0x0F3A]={
+ ["category"]="ps",
+ ["description"]="TIBETAN MARK GUG RTAGS GYON",
+ ["linebreak"]="op",
+ ["unicodeslot"]=0x0F3A, -- ༺
+ },
+ [0x0F3B]={
+ ["category"]="pe",
+ ["description"]="TIBETAN MARK GUG RTAGS GYAS",
+ ["linebreak"]="cl",
+ ["unicodeslot"]=0x0F3B, -- ༻
+ },
+ [0x0F3C]={
+ ["category"]="ps",
+ ["description"]="TIBETAN MARK ANG KHANG GYON",
+ ["linebreak"]="op",
+ ["unicodeslot"]=0x0F3C, -- ༼
+ },
+ [0x0F3D]={
+ ["category"]="pe",
+ ["description"]="TIBETAN MARK ANG KHANG GYAS",
+ ["linebreak"]="cl",
+ ["unicodeslot"]=0x0F3D, -- ༽
+ },
+ [0x0F3E]={
+ ["category"]="mc",
+ ["description"]="TIBETAN SIGN YAR TSHES",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0F3E, -- ༾
+ },
+ [0x0F3F]={
+ ["category"]="mc",
+ ["description"]="TIBETAN SIGN MAR TSHES",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0F3F, -- ༿
+ },
+ [0x0F40]={
+ ["category"]="lo",
+ ["description"]="TIBETAN LETTER KA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F40, -- ཀ
+ },
+ [0x0F41]={
+ ["category"]="lo",
+ ["description"]="TIBETAN LETTER KHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F41, -- à½
+ },
+ [0x0F42]={
+ ["category"]="lo",
+ ["description"]="TIBETAN LETTER GA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F42, -- ག
+ },
+ [0x0F43]={
+ ["category"]="lo",
+ ["description"]="TIBETAN LETTER GHA",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x0F42, 0x0FB7 },
+ ["unicodeslot"]=0x0F43, -- གྷ
+ },
+ [0x0F44]={
+ ["category"]="lo",
+ ["description"]="TIBETAN LETTER NGA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F44, -- ང
+ },
+ [0x0F45]={
+ ["category"]="lo",
+ ["description"]="TIBETAN LETTER CA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F45, -- ཅ
+ },
+ [0x0F46]={
+ ["category"]="lo",
+ ["description"]="TIBETAN LETTER CHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F46, -- ཆ
+ },
+ [0x0F47]={
+ ["category"]="lo",
+ ["description"]="TIBETAN LETTER JA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F47, -- ཇ
+ },
+ [0x0F49]={
+ ["category"]="lo",
+ ["description"]="TIBETAN LETTER NYA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F49, -- ཉ
+ },
+ [0x0F4A]={
+ ["category"]="lo",
+ ["description"]="TIBETAN LETTER TTA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F4A, -- ཊ
+ },
+ [0x0F4B]={
+ ["category"]="lo",
+ ["description"]="TIBETAN LETTER TTHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F4B, -- ཋ
+ },
+ [0x0F4C]={
+ ["category"]="lo",
+ ["description"]="TIBETAN LETTER DDA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F4C, -- ཌ
+ },
+ [0x0F4D]={
+ ["category"]="lo",
+ ["description"]="TIBETAN LETTER DDHA",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x0F4C, 0x0FB7 },
+ ["unicodeslot"]=0x0F4D, -- à½
+ },
+ [0x0F4E]={
+ ["category"]="lo",
+ ["description"]="TIBETAN LETTER NNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F4E, -- ཎ
+ },
+ [0x0F4F]={
+ ["category"]="lo",
+ ["description"]="TIBETAN LETTER TA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F4F, -- à½
+ },
+ [0x0F50]={
+ ["category"]="lo",
+ ["description"]="TIBETAN LETTER THA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F50, -- à½
+ },
+ [0x0F51]={
+ ["category"]="lo",
+ ["description"]="TIBETAN LETTER DA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F51, -- ད
+ },
+ [0x0F52]={
+ ["category"]="lo",
+ ["description"]="TIBETAN LETTER DHA",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x0F51, 0x0FB7 },
+ ["unicodeslot"]=0x0F52, -- དྷ
+ },
+ [0x0F53]={
+ ["category"]="lo",
+ ["description"]="TIBETAN LETTER NA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F53, -- ན
+ },
+ [0x0F54]={
+ ["category"]="lo",
+ ["description"]="TIBETAN LETTER PA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F54, -- པ
+ },
+ [0x0F55]={
+ ["category"]="lo",
+ ["description"]="TIBETAN LETTER PHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F55, -- ཕ
+ },
+ [0x0F56]={
+ ["category"]="lo",
+ ["description"]="TIBETAN LETTER BA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F56, -- བ
+ },
+ [0x0F57]={
+ ["category"]="lo",
+ ["description"]="TIBETAN LETTER BHA",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x0F56, 0x0FB7 },
+ ["unicodeslot"]=0x0F57, -- བྷ
+ },
+ [0x0F58]={
+ ["category"]="lo",
+ ["description"]="TIBETAN LETTER MA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F58, -- མ
+ },
+ [0x0F59]={
+ ["category"]="lo",
+ ["description"]="TIBETAN LETTER TSA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F59, -- ཙ
+ },
+ [0x0F5A]={
+ ["category"]="lo",
+ ["description"]="TIBETAN LETTER TSHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F5A, -- ཚ
+ },
+ [0x0F5B]={
+ ["category"]="lo",
+ ["description"]="TIBETAN LETTER DZA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F5B, -- ཛ
+ },
+ [0x0F5C]={
+ ["category"]="lo",
+ ["description"]="TIBETAN LETTER DZHA",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x0F5B, 0x0FB7 },
+ ["unicodeslot"]=0x0F5C, -- ཛྷ
+ },
+ [0x0F5D]={
+ ["category"]="lo",
+ ["description"]="TIBETAN LETTER WA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F5D, -- à½
+ },
+ [0x0F5E]={
+ ["category"]="lo",
+ ["description"]="TIBETAN LETTER ZHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F5E, -- ཞ
+ },
+ [0x0F5F]={
+ ["category"]="lo",
+ ["description"]="TIBETAN LETTER ZA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F5F, -- ཟ
+ },
+ [0x0F60]={
+ ["category"]="lo",
+ ["description"]="TIBETAN LETTER -A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F60, -- འ
+ },
+ [0x0F61]={
+ ["category"]="lo",
+ ["description"]="TIBETAN LETTER YA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F61, -- ཡ
+ },
+ [0x0F62]={
+ ["category"]="lo",
+ ["description"]="TIBETAN LETTER RA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F62, -- ར
+ },
+ [0x0F63]={
+ ["category"]="lo",
+ ["description"]="TIBETAN LETTER LA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F63, -- ལ
+ },
+ [0x0F64]={
+ ["category"]="lo",
+ ["description"]="TIBETAN LETTER SHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F64, -- ཤ
+ },
+ [0x0F65]={
+ ["category"]="lo",
+ ["description"]="TIBETAN LETTER SSA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F65, -- ཥ
+ },
+ [0x0F66]={
+ ["category"]="lo",
+ ["description"]="TIBETAN LETTER SA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F66, -- ས
+ },
+ [0x0F67]={
+ ["category"]="lo",
+ ["description"]="TIBETAN LETTER HA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F67, -- ཧ
+ },
+ [0x0F68]={
+ ["category"]="lo",
+ ["description"]="TIBETAN LETTER A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F68, -- ཨ
+ },
+ [0x0F69]={
+ ["category"]="lo",
+ ["description"]="TIBETAN LETTER KSSA",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x0F40, 0x0FB5 },
+ ["unicodeslot"]=0x0F69, -- ཀྵ
+ },
+ [0x0F6A]={
+ ["category"]="lo",
+ ["description"]="TIBETAN LETTER FIXED-FORM RA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F6A, -- ཪ
+ },
+ [0x0F71]={
+ ["category"]="mn",
+ ["description"]="TIBETAN VOWEL SIGN AA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0F71, -- ཱ
+ },
+ [0x0F72]={
+ ["category"]="mn",
+ ["description"]="TIBETAN VOWEL SIGN I",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0F72, -- ི
+ },
+ [0x0F73]={
+ ["category"]="mn",
+ ["description"]="TIBETAN VOWEL SIGN II",
+ ["linebreak"]="cm",
+ ["specials"]={ "char", 0x0F71, 0x0F72 },
+ ["unicodeslot"]=0x0F73, -- ཱི
+ },
+ [0x0F74]={
+ ["category"]="mn",
+ ["description"]="TIBETAN VOWEL SIGN U",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0F74, -- ུ
+ },
+ [0x0F75]={
+ ["category"]="mn",
+ ["description"]="TIBETAN VOWEL SIGN UU",
+ ["linebreak"]="cm",
+ ["specials"]={ "char", 0x0F71, 0x0F74 },
+ ["unicodeslot"]=0x0F75, -- ཱུ
+ },
+ [0x0F76]={
+ ["category"]="mn",
+ ["description"]="TIBETAN VOWEL SIGN VOCALIC R",
+ ["linebreak"]="cm",
+ ["specials"]={ "char", 0x0FB2, 0x0F80 },
+ ["unicodeslot"]=0x0F76, -- ྲྀ
+ },
+ [0x0F77]={
+ ["category"]="mn",
+ ["description"]="TIBETAN VOWEL SIGN VOCALIC RR",
+ ["linebreak"]="cm",
+ ["specials"]={ "compat", 0x0FB2, 0x0F81 },
+ ["unicodeslot"]=0x0F77, -- ཷ
+ },
+ [0x0F78]={
+ ["category"]="mn",
+ ["description"]="TIBETAN VOWEL SIGN VOCALIC L",
+ ["linebreak"]="cm",
+ ["specials"]={ "char", 0x0FB3, 0x0F80 },
+ ["unicodeslot"]=0x0F78, -- ླྀ
+ },
+ [0x0F79]={
+ ["category"]="mn",
+ ["description"]="TIBETAN VOWEL SIGN VOCALIC LL",
+ ["linebreak"]="cm",
+ ["specials"]={ "compat", 0x0FB3, 0x0F81 },
+ ["unicodeslot"]=0x0F79, -- ཹ
+ },
+ [0x0F7A]={
+ ["category"]="mn",
+ ["description"]="TIBETAN VOWEL SIGN E",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0F7A, -- ེ
+ },
+ [0x0F7B]={
+ ["category"]="mn",
+ ["description"]="TIBETAN VOWEL SIGN EE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0F7B, -- ཻ
+ },
+ [0x0F7C]={
+ ["category"]="mn",
+ ["description"]="TIBETAN VOWEL SIGN O",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0F7C, -- ོ
+ },
+ [0x0F7D]={
+ ["category"]="mn",
+ ["description"]="TIBETAN VOWEL SIGN OO",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0F7D, -- ཽ
+ },
+ [0x0F7E]={
+ ["category"]="mn",
+ ["description"]="TIBETAN SIGN RJES SU NGA RO",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0F7E, -- ཾ
+ },
+ [0x0F7F]={
+ ["category"]="mc",
+ ["description"]="TIBETAN SIGN RNAM BCAD",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x0F7F, -- ཿ
+ },
+ [0x0F80]={
+ ["category"]="mn",
+ ["description"]="TIBETAN VOWEL SIGN REVERSED I",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0F80, -- ྀ
+ },
+ [0x0F81]={
+ ["category"]="mn",
+ ["description"]="TIBETAN VOWEL SIGN REVERSED II",
+ ["linebreak"]="cm",
+ ["specials"]={ "char", 0x0F71, 0x0F80 },
+ ["unicodeslot"]=0x0F81, -- à¾
+ },
+ [0x0F82]={
+ ["category"]="mn",
+ ["description"]="TIBETAN SIGN NYI ZLA NAA DA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0F82, -- ྂ
+ },
+ [0x0F83]={
+ ["category"]="mn",
+ ["description"]="TIBETAN SIGN SNA LDAN",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0F83, -- ྃ
+ },
+ [0x0F84]={
+ ["category"]="mn",
+ ["description"]="TIBETAN MARK HALANTA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0F84, -- ྄
+ },
+ [0x0F85]={
+ ["category"]="po",
+ ["description"]="TIBETAN MARK PALUTA",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x0F85, -- ྅
+ },
+ [0x0F86]={
+ ["category"]="mn",
+ ["description"]="TIBETAN SIGN LCI RTAGS",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0F86, -- ྆
+ },
+ [0x0F87]={
+ ["category"]="mn",
+ ["description"]="TIBETAN SIGN YANG RTAGS",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0F87, -- ྇
+ },
+ [0x0F88]={
+ ["category"]="lo",
+ ["description"]="TIBETAN SIGN LCE TSA CAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F88, -- ྈ
+ },
+ [0x0F89]={
+ ["category"]="lo",
+ ["description"]="TIBETAN SIGN MCHU CAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F89, -- ྉ
+ },
+ [0x0F8A]={
+ ["category"]="lo",
+ ["description"]="TIBETAN SIGN GRU CAN RGYINGS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F8A, -- ྊ
+ },
+ [0x0F8B]={
+ ["category"]="lo",
+ ["description"]="TIBETAN SIGN GRU MED RGYINGS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0F8B, -- ྋ
+ },
+ [0x0F90]={
+ ["category"]="mn",
+ ["description"]="TIBETAN SUBJOINED LETTER KA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0F90, -- à¾
+ },
+ [0x0F91]={
+ ["category"]="mn",
+ ["description"]="TIBETAN SUBJOINED LETTER KHA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0F91, -- ྑ
+ },
+ [0x0F92]={
+ ["category"]="mn",
+ ["description"]="TIBETAN SUBJOINED LETTER GA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0F92, -- ྒ
+ },
+ [0x0F93]={
+ ["category"]="mn",
+ ["description"]="TIBETAN SUBJOINED LETTER GHA",
+ ["linebreak"]="cm",
+ ["specials"]={ "char", 0x0F92, 0x0FB7 },
+ ["unicodeslot"]=0x0F93, -- ྒྷ
+ },
+ [0x0F94]={
+ ["category"]="mn",
+ ["description"]="TIBETAN SUBJOINED LETTER NGA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0F94, -- ྔ
+ },
+ [0x0F95]={
+ ["category"]="mn",
+ ["description"]="TIBETAN SUBJOINED LETTER CA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0F95, -- ྕ
+ },
+ [0x0F96]={
+ ["category"]="mn",
+ ["description"]="TIBETAN SUBJOINED LETTER CHA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0F96, -- ྖ
+ },
+ [0x0F97]={
+ ["category"]="mn",
+ ["description"]="TIBETAN SUBJOINED LETTER JA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0F97, -- ྗ
+ },
+ [0x0F99]={
+ ["category"]="mn",
+ ["description"]="TIBETAN SUBJOINED LETTER NYA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0F99, -- ྙ
+ },
+ [0x0F9A]={
+ ["category"]="mn",
+ ["description"]="TIBETAN SUBJOINED LETTER TTA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0F9A, -- ྚ
+ },
+ [0x0F9B]={
+ ["category"]="mn",
+ ["description"]="TIBETAN SUBJOINED LETTER TTHA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0F9B, -- ྛ
+ },
+ [0x0F9C]={
+ ["category"]="mn",
+ ["description"]="TIBETAN SUBJOINED LETTER DDA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0F9C, -- ྜ
+ },
+ [0x0F9D]={
+ ["category"]="mn",
+ ["description"]="TIBETAN SUBJOINED LETTER DDHA",
+ ["linebreak"]="cm",
+ ["specials"]={ "char", 0x0F9C, 0x0FB7 },
+ ["unicodeslot"]=0x0F9D, -- à¾
+ },
+ [0x0F9E]={
+ ["category"]="mn",
+ ["description"]="TIBETAN SUBJOINED LETTER NNA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0F9E, -- ྞ
+ },
+ [0x0F9F]={
+ ["category"]="mn",
+ ["description"]="TIBETAN SUBJOINED LETTER TA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0F9F, -- ྟ
+ },
+ [0x0FA0]={
+ ["category"]="mn",
+ ["description"]="TIBETAN SUBJOINED LETTER THA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0FA0, -- ྠ
+ },
+ [0x0FA1]={
+ ["category"]="mn",
+ ["description"]="TIBETAN SUBJOINED LETTER DA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0FA1, -- ྡ
+ },
+ [0x0FA2]={
+ ["category"]="mn",
+ ["description"]="TIBETAN SUBJOINED LETTER DHA",
+ ["linebreak"]="cm",
+ ["specials"]={ "char", 0x0FA1, 0x0FB7 },
+ ["unicodeslot"]=0x0FA2, -- ྡྷ
+ },
+ [0x0FA3]={
+ ["category"]="mn",
+ ["description"]="TIBETAN SUBJOINED LETTER NA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0FA3, -- ྣ
+ },
+ [0x0FA4]={
+ ["category"]="mn",
+ ["description"]="TIBETAN SUBJOINED LETTER PA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0FA4, -- ྤ
+ },
+ [0x0FA5]={
+ ["category"]="mn",
+ ["description"]="TIBETAN SUBJOINED LETTER PHA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0FA5, -- ྥ
+ },
+ [0x0FA6]={
+ ["category"]="mn",
+ ["description"]="TIBETAN SUBJOINED LETTER BA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0FA6, -- ྦ
+ },
+ [0x0FA7]={
+ ["category"]="mn",
+ ["description"]="TIBETAN SUBJOINED LETTER BHA",
+ ["linebreak"]="cm",
+ ["specials"]={ "char", 0x0FA6, 0x0FB7 },
+ ["unicodeslot"]=0x0FA7, -- ྦྷ
+ },
+ [0x0FA8]={
+ ["category"]="mn",
+ ["description"]="TIBETAN SUBJOINED LETTER MA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0FA8, -- ྨ
+ },
+ [0x0FA9]={
+ ["category"]="mn",
+ ["description"]="TIBETAN SUBJOINED LETTER TSA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0FA9, -- ྩ
+ },
+ [0x0FAA]={
+ ["category"]="mn",
+ ["description"]="TIBETAN SUBJOINED LETTER TSHA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0FAA, -- ྪ
+ },
+ [0x0FAB]={
+ ["category"]="mn",
+ ["description"]="TIBETAN SUBJOINED LETTER DZA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0FAB, -- ྫ
+ },
+ [0x0FAC]={
+ ["category"]="mn",
+ ["description"]="TIBETAN SUBJOINED LETTER DZHA",
+ ["linebreak"]="cm",
+ ["specials"]={ "char", 0x0FAB, 0x0FB7 },
+ ["unicodeslot"]=0x0FAC, -- ྫྷ
+ },
+ [0x0FAD]={
+ ["category"]="mn",
+ ["description"]="TIBETAN SUBJOINED LETTER WA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0FAD, -- ྭ
+ },
+ [0x0FAE]={
+ ["category"]="mn",
+ ["description"]="TIBETAN SUBJOINED LETTER ZHA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0FAE, -- ྮ
+ },
+ [0x0FAF]={
+ ["category"]="mn",
+ ["description"]="TIBETAN SUBJOINED LETTER ZA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0FAF, -- ྯ
+ },
+ [0x0FB0]={
+ ["category"]="mn",
+ ["description"]="TIBETAN SUBJOINED LETTER -A",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0FB0, -- ྰ
+ },
+ [0x0FB1]={
+ ["category"]="mn",
+ ["description"]="TIBETAN SUBJOINED LETTER YA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0FB1, -- ྱ
+ },
+ [0x0FB2]={
+ ["category"]="mn",
+ ["description"]="TIBETAN SUBJOINED LETTER RA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0FB2, -- ྲ
+ },
+ [0x0FB3]={
+ ["category"]="mn",
+ ["description"]="TIBETAN SUBJOINED LETTER LA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0FB3, -- ླ
+ },
+ [0x0FB4]={
+ ["category"]="mn",
+ ["description"]="TIBETAN SUBJOINED LETTER SHA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0FB4, -- ྴ
+ },
+ [0x0FB5]={
+ ["category"]="mn",
+ ["description"]="TIBETAN SUBJOINED LETTER SSA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0FB5, -- ྵ
+ },
+ [0x0FB6]={
+ ["category"]="mn",
+ ["description"]="TIBETAN SUBJOINED LETTER SA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0FB6, -- ྶ
+ },
+ [0x0FB7]={
+ ["category"]="mn",
+ ["description"]="TIBETAN SUBJOINED LETTER HA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0FB7, -- ྷ
+ },
+ [0x0FB8]={
+ ["category"]="mn",
+ ["description"]="TIBETAN SUBJOINED LETTER A",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0FB8, -- ྸ
+ },
+ [0x0FB9]={
+ ["category"]="mn",
+ ["description"]="TIBETAN SUBJOINED LETTER KSSA",
+ ["linebreak"]="cm",
+ ["specials"]={ "char", 0x0F90, 0x0FB5 },
+ ["unicodeslot"]=0x0FB9, -- ྐྵ
+ },
+ [0x0FBA]={
+ ["category"]="mn",
+ ["description"]="TIBETAN SUBJOINED LETTER FIXED-FORM WA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0FBA, -- ྺ
+ },
+ [0x0FBB]={
+ ["category"]="mn",
+ ["description"]="TIBETAN SUBJOINED LETTER FIXED-FORM YA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0FBB, -- ྻ
+ },
+ [0x0FBC]={
+ ["category"]="mn",
+ ["description"]="TIBETAN SUBJOINED LETTER FIXED-FORM RA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0FBC, -- ྼ
+ },
+ [0x0FBE]={
+ ["category"]="so",
+ ["description"]="TIBETAN KU RU KHA",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x0FBE, -- ྾
+ },
+ [0x0FBF]={
+ ["category"]="so",
+ ["description"]="TIBETAN KU RU KHA BZHI MIG CAN",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x0FBF, -- ྿
+ },
+ [0x0FC0]={
+ ["category"]="so",
+ ["description"]="TIBETAN CANTILLATION SIGN HEAVY BEAT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0FC0, -- à¿€
+ },
+ [0x0FC1]={
+ ["category"]="so",
+ ["description"]="TIBETAN CANTILLATION SIGN LIGHT BEAT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0FC1, -- à¿
+ },
+ [0x0FC2]={
+ ["category"]="so",
+ ["description"]="TIBETAN CANTILLATION SIGN CANG TE-U",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0FC2, -- à¿‚
+ },
+ [0x0FC3]={
+ ["category"]="so",
+ ["description"]="TIBETAN CANTILLATION SIGN SBUB -CHAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0FC3, -- ࿃
+ },
+ [0x0FC4]={
+ ["category"]="so",
+ ["description"]="TIBETAN SYMBOL DRIL BU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0FC4, -- à¿„
+ },
+ [0x0FC5]={
+ ["category"]="so",
+ ["description"]="TIBETAN SYMBOL RDO RJE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0FC5, -- à¿…
+ },
+ [0x0FC6]={
+ ["category"]="mn",
+ ["description"]="TIBETAN SYMBOL PADMA GDAN",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x0FC6, -- ࿆
+ },
+ [0x0FC7]={
+ ["category"]="so",
+ ["description"]="TIBETAN SYMBOL RDO RJE RGYA GRAM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0FC7, -- ࿇
+ },
+ [0x0FC8]={
+ ["category"]="so",
+ ["description"]="TIBETAN SYMBOL PHUR PA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0FC8, -- ࿈
+ },
+ [0x0FC9]={
+ ["category"]="so",
+ ["description"]="TIBETAN SYMBOL NOR BU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0FC9, -- ࿉
+ },
+ [0x0FCA]={
+ ["category"]="so",
+ ["description"]="TIBETAN SYMBOL NOR BU NYIS -KHYIL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0FCA, -- à¿Š
+ },
+ [0x0FCB]={
+ ["category"]="so",
+ ["description"]="TIBETAN SYMBOL NOR BU GSUM -KHYIL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0FCB, -- à¿‹
+ },
+ [0x0FCC]={
+ ["category"]="so",
+ ["description"]="TIBETAN SYMBOL NOR BU BZHI -KHYIL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0FCC, -- ࿌
+ },
+ [0x0FCF]={
+ ["category"]="so",
+ ["description"]="TIBETAN SIGN RDEL NAG GSUM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x0FCF, -- à¿
+ },
+ [0x0FD0]={
+ ["category"]="po",
+ ["description"]="TIBETAN MARK BSKA- SHOG GI MGO RGYAN",
+ ["linebreak"]="bb",
+ ["unicodeslot"]=0x0FD0, -- à¿
+ },
+ [0x0FD1]={
+ ["category"]="po",
+ ["description"]="TIBETAN MARK MNYAM YIG GI MGO RGYAN",
+ ["linebreak"]="bb",
+ ["unicodeslot"]=0x0FD1, -- à¿‘
+ },
+ [0x1000]={
+ ["category"]="lo",
+ ["description"]="MYANMAR LETTER KA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1000, -- က
+ },
+ [0x1001]={
+ ["category"]="lo",
+ ["description"]="MYANMAR LETTER KHA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1001, -- á€
+ },
+ [0x1002]={
+ ["category"]="lo",
+ ["description"]="MYANMAR LETTER GA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1002, -- ဂ
+ },
+ [0x1003]={
+ ["category"]="lo",
+ ["description"]="MYANMAR LETTER GHA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1003, -- ဃ
+ },
+ [0x1004]={
+ ["category"]="lo",
+ ["description"]="MYANMAR LETTER NGA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1004, -- င
+ },
+ [0x1005]={
+ ["category"]="lo",
+ ["description"]="MYANMAR LETTER CA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1005, -- စ
+ },
+ [0x1006]={
+ ["category"]="lo",
+ ["description"]="MYANMAR LETTER CHA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1006, -- ဆ
+ },
+ [0x1007]={
+ ["category"]="lo",
+ ["description"]="MYANMAR LETTER JA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1007, -- ဇ
+ },
+ [0x1008]={
+ ["category"]="lo",
+ ["description"]="MYANMAR LETTER JHA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1008, -- ဈ
+ },
+ [0x1009]={
+ ["category"]="lo",
+ ["description"]="MYANMAR LETTER NYA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1009, -- ဉ
+ },
+ [0x100A]={
+ ["category"]="lo",
+ ["description"]="MYANMAR LETTER NNYA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x100A, -- ည
+ },
+ [0x100B]={
+ ["category"]="lo",
+ ["description"]="MYANMAR LETTER TTA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x100B, -- ဋ
+ },
+ [0x100C]={
+ ["category"]="lo",
+ ["description"]="MYANMAR LETTER TTHA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x100C, -- ဌ
+ },
+ [0x100D]={
+ ["category"]="lo",
+ ["description"]="MYANMAR LETTER DDA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x100D, -- á€
+ },
+ [0x100E]={
+ ["category"]="lo",
+ ["description"]="MYANMAR LETTER DDHA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x100E, -- ဎ
+ },
+ [0x100F]={
+ ["category"]="lo",
+ ["description"]="MYANMAR LETTER NNA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x100F, -- á€
+ },
+ [0x1010]={
+ ["category"]="lo",
+ ["description"]="MYANMAR LETTER TA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1010, -- á€
+ },
+ [0x1011]={
+ ["category"]="lo",
+ ["description"]="MYANMAR LETTER THA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1011, -- ထ
+ },
+ [0x1012]={
+ ["category"]="lo",
+ ["description"]="MYANMAR LETTER DA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1012, -- ဒ
+ },
+ [0x1013]={
+ ["category"]="lo",
+ ["description"]="MYANMAR LETTER DHA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1013, -- ဓ
+ },
+ [0x1014]={
+ ["category"]="lo",
+ ["description"]="MYANMAR LETTER NA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1014, -- န
+ },
+ [0x1015]={
+ ["category"]="lo",
+ ["description"]="MYANMAR LETTER PA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1015, -- ပ
+ },
+ [0x1016]={
+ ["category"]="lo",
+ ["description"]="MYANMAR LETTER PHA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1016, -- ဖ
+ },
+ [0x1017]={
+ ["category"]="lo",
+ ["description"]="MYANMAR LETTER BA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1017, -- ဗ
+ },
+ [0x1018]={
+ ["category"]="lo",
+ ["description"]="MYANMAR LETTER BHA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1018, -- ဘ
+ },
+ [0x1019]={
+ ["category"]="lo",
+ ["description"]="MYANMAR LETTER MA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1019, -- မ
+ },
+ [0x101A]={
+ ["category"]="lo",
+ ["description"]="MYANMAR LETTER YA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x101A, -- ယ
+ },
+ [0x101B]={
+ ["category"]="lo",
+ ["description"]="MYANMAR LETTER RA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x101B, -- ရ
+ },
+ [0x101C]={
+ ["category"]="lo",
+ ["description"]="MYANMAR LETTER LA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x101C, -- လ
+ },
+ [0x101D]={
+ ["category"]="lo",
+ ["description"]="MYANMAR LETTER WA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x101D, -- á€
+ },
+ [0x101E]={
+ ["category"]="lo",
+ ["description"]="MYANMAR LETTER SA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x101E, -- သ
+ },
+ [0x101F]={
+ ["category"]="lo",
+ ["description"]="MYANMAR LETTER HA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x101F, -- ဟ
+ },
+ [0x1020]={
+ ["category"]="lo",
+ ["description"]="MYANMAR LETTER LLA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1020, -- ဠ
+ },
+ [0x1021]={
+ ["category"]="lo",
+ ["description"]="MYANMAR LETTER A",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1021, -- အ
+ },
+ [0x1023]={
+ ["category"]="lo",
+ ["description"]="MYANMAR LETTER I",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1023, -- ဣ
+ },
+ [0x1024]={
+ ["category"]="lo",
+ ["description"]="MYANMAR LETTER II",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1024, -- ဤ
+ },
+ [0x1025]={
+ ["category"]="lo",
+ ["description"]="MYANMAR LETTER U",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1025, -- ဥ
+ },
+ [0x1026]={
+ ["category"]="lo",
+ ["description"]="MYANMAR LETTER UU",
+ ["linebreak"]="sa",
+ ["specials"]={ "char", 0x1025, 0x102E },
+ ["unicodeslot"]=0x1026, -- ဦ
+ },
+ [0x1027]={
+ ["category"]="lo",
+ ["description"]="MYANMAR LETTER E",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1027, -- ဧ
+ },
+ [0x1029]={
+ ["category"]="lo",
+ ["description"]="MYANMAR LETTER O",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1029, -- ဩ
+ },
+ [0x102A]={
+ ["category"]="lo",
+ ["description"]="MYANMAR LETTER AU",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x102A, -- ဪ
+ },
+ [0x102C]={
+ ["category"]="mc",
+ ["description"]="MYANMAR VOWEL SIGN AA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x102C, -- ာ
+ },
+ [0x102D]={
+ ["category"]="mn",
+ ["description"]="MYANMAR VOWEL SIGN I",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x102D, -- ိ
+ },
+ [0x102E]={
+ ["category"]="mn",
+ ["description"]="MYANMAR VOWEL SIGN II",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x102E, -- ီ
+ },
+ [0x102F]={
+ ["category"]="mn",
+ ["description"]="MYANMAR VOWEL SIGN U",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x102F, -- ု
+ },
+ [0x1030]={
+ ["category"]="mn",
+ ["description"]="MYANMAR VOWEL SIGN UU",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1030, -- ူ
+ },
+ [0x1031]={
+ ["category"]="mc",
+ ["description"]="MYANMAR VOWEL SIGN E",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1031, -- ေ
+ },
+ [0x1032]={
+ ["category"]="mn",
+ ["description"]="MYANMAR VOWEL SIGN AI",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1032, -- ဲ
+ },
+ [0x1036]={
+ ["category"]="mn",
+ ["description"]="MYANMAR SIGN ANUSVARA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1036, -- ံ
+ },
+ [0x1037]={
+ ["category"]="mn",
+ ["description"]="MYANMAR SIGN DOT BELOW",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1037, -- ့
+ },
+ [0x1038]={
+ ["category"]="mc",
+ ["description"]="MYANMAR SIGN VISARGA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1038, -- း
+ },
+ [0x1039]={
+ ["category"]="mn",
+ ["description"]="MYANMAR SIGN VIRAMA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1039, -- ္
+ },
+ [0x1040]={
+ ["category"]="nd",
+ ["description"]="MYANMAR DIGIT ZERO",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x1040, -- á€
+ },
+ [0x1041]={
+ ["category"]="nd",
+ ["description"]="MYANMAR DIGIT ONE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x1041, -- á
+ },
+ [0x1042]={
+ ["category"]="nd",
+ ["description"]="MYANMAR DIGIT TWO",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x1042, -- á‚
+ },
+ [0x1043]={
+ ["category"]="nd",
+ ["description"]="MYANMAR DIGIT THREE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x1043, -- áƒ
+ },
+ [0x1044]={
+ ["category"]="nd",
+ ["description"]="MYANMAR DIGIT FOUR",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x1044, -- á„
+ },
+ [0x1045]={
+ ["category"]="nd",
+ ["description"]="MYANMAR DIGIT FIVE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x1045, -- á…
+ },
+ [0x1046]={
+ ["category"]="nd",
+ ["description"]="MYANMAR DIGIT SIX",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x1046, -- á†
+ },
+ [0x1047]={
+ ["category"]="nd",
+ ["description"]="MYANMAR DIGIT SEVEN",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x1047, -- á‡
+ },
+ [0x1048]={
+ ["category"]="nd",
+ ["description"]="MYANMAR DIGIT EIGHT",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x1048, -- áˆ
+ },
+ [0x1049]={
+ ["category"]="nd",
+ ["description"]="MYANMAR DIGIT NINE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x1049, -- á‰
+ },
+ [0x104A]={
+ ["category"]="po",
+ ["description"]="MYANMAR SIGN LITTLE SECTION",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x104A, -- áŠ
+ },
+ [0x104B]={
+ ["category"]="po",
+ ["description"]="MYANMAR SIGN SECTION",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x104B, -- á‹
+ },
+ [0x104C]={
+ ["category"]="po",
+ ["description"]="MYANMAR SYMBOL LOCATIVE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x104C, -- áŒ
+ },
+ [0x104D]={
+ ["category"]="po",
+ ["description"]="MYANMAR SYMBOL COMPLETED",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x104D, -- á
+ },
+ [0x104E]={
+ ["category"]="po",
+ ["description"]="MYANMAR SYMBOL AFOREMENTIONED",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x104E, -- áŽ
+ },
+ [0x104F]={
+ ["category"]="po",
+ ["description"]="MYANMAR SYMBOL GENITIVE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x104F, -- á
+ },
+ [0x1050]={
+ ["category"]="lo",
+ ["description"]="MYANMAR LETTER SHA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1050, -- á
+ },
+ [0x1051]={
+ ["category"]="lo",
+ ["description"]="MYANMAR LETTER SSA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1051, -- á‘
+ },
+ [0x1052]={
+ ["category"]="lo",
+ ["description"]="MYANMAR LETTER VOCALIC R",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1052, -- á’
+ },
+ [0x1053]={
+ ["category"]="lo",
+ ["description"]="MYANMAR LETTER VOCALIC RR",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1053, -- á“
+ },
+ [0x1054]={
+ ["category"]="lo",
+ ["description"]="MYANMAR LETTER VOCALIC L",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1054, -- á”
+ },
+ [0x1055]={
+ ["category"]="lo",
+ ["description"]="MYANMAR LETTER VOCALIC LL",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1055, -- á•
+ },
+ [0x1056]={
+ ["category"]="mc",
+ ["description"]="MYANMAR VOWEL SIGN VOCALIC R",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1056, -- á–
+ },
+ [0x1057]={
+ ["category"]="mc",
+ ["description"]="MYANMAR VOWEL SIGN VOCALIC RR",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1057, -- á—
+ },
+ [0x1058]={
+ ["category"]="mn",
+ ["description"]="MYANMAR VOWEL SIGN VOCALIC L",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1058, -- á˜
+ },
+ [0x1059]={
+ ["category"]="mn",
+ ["description"]="MYANMAR VOWEL SIGN VOCALIC LL",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1059, -- á™
+ },
+ [0x10A0]={
+ ["category"]="lu",
+ ["description"]="GEORGIAN CAPITAL LETTER AN",
+ ["lccode"]=0x2D00,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10A0, -- á‚ 
+ },
+ [0x10A1]={
+ ["category"]="lu",
+ ["description"]="GEORGIAN CAPITAL LETTER BAN",
+ ["lccode"]=0x2D01,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10A1, -- á‚¡
+ },
+ [0x10A2]={
+ ["category"]="lu",
+ ["description"]="GEORGIAN CAPITAL LETTER GAN",
+ ["lccode"]=0x2D02,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10A2, -- á‚¢
+ },
+ [0x10A3]={
+ ["category"]="lu",
+ ["description"]="GEORGIAN CAPITAL LETTER DON",
+ ["lccode"]=0x2D03,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10A3, -- á‚£
+ },
+ [0x10A4]={
+ ["category"]="lu",
+ ["description"]="GEORGIAN CAPITAL LETTER EN",
+ ["lccode"]=0x2D04,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10A4, -- Ⴄ
+ },
+ [0x10A5]={
+ ["category"]="lu",
+ ["description"]="GEORGIAN CAPITAL LETTER VIN",
+ ["lccode"]=0x2D05,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10A5, -- á‚¥
+ },
+ [0x10A6]={
+ ["category"]="lu",
+ ["description"]="GEORGIAN CAPITAL LETTER ZEN",
+ ["lccode"]=0x2D06,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10A6, -- Ⴆ
+ },
+ [0x10A7]={
+ ["category"]="lu",
+ ["description"]="GEORGIAN CAPITAL LETTER TAN",
+ ["lccode"]=0x2D07,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10A7, -- Ⴇ
+ },
+ [0x10A8]={
+ ["category"]="lu",
+ ["description"]="GEORGIAN CAPITAL LETTER IN",
+ ["lccode"]=0x2D08,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10A8, -- Ⴈ
+ },
+ [0x10A9]={
+ ["category"]="lu",
+ ["description"]="GEORGIAN CAPITAL LETTER KAN",
+ ["lccode"]=0x2D09,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10A9, -- á‚©
+ },
+ [0x10AA]={
+ ["category"]="lu",
+ ["description"]="GEORGIAN CAPITAL LETTER LAS",
+ ["lccode"]=0x2D0A,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10AA, -- Ⴊ
+ },
+ [0x10AB]={
+ ["category"]="lu",
+ ["description"]="GEORGIAN CAPITAL LETTER MAN",
+ ["lccode"]=0x2D0B,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10AB, -- á‚«
+ },
+ [0x10AC]={
+ ["category"]="lu",
+ ["description"]="GEORGIAN CAPITAL LETTER NAR",
+ ["lccode"]=0x2D0C,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10AC, -- Ⴌ
+ },
+ [0x10AD]={
+ ["category"]="lu",
+ ["description"]="GEORGIAN CAPITAL LETTER ON",
+ ["lccode"]=0x2D0D,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10AD, -- á‚­
+ },
+ [0x10AE]={
+ ["category"]="lu",
+ ["description"]="GEORGIAN CAPITAL LETTER PAR",
+ ["lccode"]=0x2D0E,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10AE, -- á‚®
+ },
+ [0x10AF]={
+ ["category"]="lu",
+ ["description"]="GEORGIAN CAPITAL LETTER ZHAR",
+ ["lccode"]=0x2D0F,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10AF, -- Ⴏ
+ },
+ [0x10B0]={
+ ["category"]="lu",
+ ["description"]="GEORGIAN CAPITAL LETTER RAE",
+ ["lccode"]=0x2D10,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10B0, -- á‚°
+ },
+ [0x10B1]={
+ ["category"]="lu",
+ ["description"]="GEORGIAN CAPITAL LETTER SAN",
+ ["lccode"]=0x2D11,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10B1, -- Ⴑ
+ },
+ [0x10B2]={
+ ["category"]="lu",
+ ["description"]="GEORGIAN CAPITAL LETTER TAR",
+ ["lccode"]=0x2D12,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10B2, -- Ⴒ
+ },
+ [0x10B3]={
+ ["category"]="lu",
+ ["description"]="GEORGIAN CAPITAL LETTER UN",
+ ["lccode"]=0x2D13,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10B3, -- Ⴓ
+ },
+ [0x10B4]={
+ ["category"]="lu",
+ ["description"]="GEORGIAN CAPITAL LETTER PHAR",
+ ["lccode"]=0x2D14,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10B4, -- á‚´
+ },
+ [0x10B5]={
+ ["category"]="lu",
+ ["description"]="GEORGIAN CAPITAL LETTER KHAR",
+ ["lccode"]=0x2D15,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10B5, -- Ⴕ
+ },
+ [0x10B6]={
+ ["category"]="lu",
+ ["description"]="GEORGIAN CAPITAL LETTER GHAN",
+ ["lccode"]=0x2D16,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10B6, -- Ⴖ
+ },
+ [0x10B7]={
+ ["category"]="lu",
+ ["description"]="GEORGIAN CAPITAL LETTER QAR",
+ ["lccode"]=0x2D17,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10B7, -- á‚·
+ },
+ [0x10B8]={
+ ["category"]="lu",
+ ["description"]="GEORGIAN CAPITAL LETTER SHIN",
+ ["lccode"]=0x2D18,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10B8, -- Ⴘ
+ },
+ [0x10B9]={
+ ["category"]="lu",
+ ["description"]="GEORGIAN CAPITAL LETTER CHIN",
+ ["lccode"]=0x2D19,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10B9, -- Ⴙ
+ },
+ [0x10BA]={
+ ["category"]="lu",
+ ["description"]="GEORGIAN CAPITAL LETTER CAN",
+ ["lccode"]=0x2D1A,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10BA, -- Ⴚ
+ },
+ [0x10BB]={
+ ["category"]="lu",
+ ["description"]="GEORGIAN CAPITAL LETTER JIL",
+ ["lccode"]=0x2D1B,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10BB, -- á‚»
+ },
+ [0x10BC]={
+ ["category"]="lu",
+ ["description"]="GEORGIAN CAPITAL LETTER CIL",
+ ["lccode"]=0x2D1C,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10BC, -- Ⴜ
+ },
+ [0x10BD]={
+ ["category"]="lu",
+ ["description"]="GEORGIAN CAPITAL LETTER CHAR",
+ ["lccode"]=0x2D1D,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10BD, -- Ⴝ
+ },
+ [0x10BE]={
+ ["category"]="lu",
+ ["description"]="GEORGIAN CAPITAL LETTER XAN",
+ ["lccode"]=0x2D1E,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10BE, -- Ⴞ
+ },
+ [0x10BF]={
+ ["category"]="lu",
+ ["description"]="GEORGIAN CAPITAL LETTER JHAN",
+ ["lccode"]=0x2D1F,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10BF, -- á‚¿
+ },
+ [0x10C0]={
+ ["category"]="lu",
+ ["description"]="GEORGIAN CAPITAL LETTER HAE",
+ ["lccode"]=0x2D20,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10C0, -- Ⴠ
+ },
+ [0x10C1]={
+ ["category"]="lu",
+ ["description"]="GEORGIAN CAPITAL LETTER HE",
+ ["lccode"]=0x2D21,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10C1, -- áƒ
+ },
+ [0x10C2]={
+ ["category"]="lu",
+ ["description"]="GEORGIAN CAPITAL LETTER HIE",
+ ["lccode"]=0x2D22,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10C2, -- Ⴢ
+ },
+ [0x10C3]={
+ ["category"]="lu",
+ ["description"]="GEORGIAN CAPITAL LETTER WE",
+ ["lccode"]=0x2D23,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10C3, -- Ⴣ
+ },
+ [0x10C4]={
+ ["category"]="lu",
+ ["description"]="GEORGIAN CAPITAL LETTER HAR",
+ ["lccode"]=0x2D24,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10C4, -- Ⴤ
+ },
+ [0x10C5]={
+ ["category"]="lu",
+ ["description"]="GEORGIAN CAPITAL LETTER HOE",
+ ["lccode"]=0x2D25,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10C5, -- Ⴥ
+ },
+ [0x10D0]={
+ ["category"]="lo",
+ ["description"]="GEORGIAN LETTER AN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10D0, -- áƒ
+ },
+ [0x10D1]={
+ ["category"]="lo",
+ ["description"]="GEORGIAN LETTER BAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10D1, -- ბ
+ },
+ [0x10D2]={
+ ["category"]="lo",
+ ["description"]="GEORGIAN LETTER GAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10D2, -- გ
+ },
+ [0x10D3]={
+ ["category"]="lo",
+ ["description"]="GEORGIAN LETTER DON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10D3, -- დ
+ },
+ [0x10D4]={
+ ["category"]="lo",
+ ["description"]="GEORGIAN LETTER EN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10D4, -- ე
+ },
+ [0x10D5]={
+ ["category"]="lo",
+ ["description"]="GEORGIAN LETTER VIN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10D5, -- ვ
+ },
+ [0x10D6]={
+ ["category"]="lo",
+ ["description"]="GEORGIAN LETTER ZEN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10D6, -- ზ
+ },
+ [0x10D7]={
+ ["category"]="lo",
+ ["description"]="GEORGIAN LETTER TAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10D7, -- თ
+ },
+ [0x10D8]={
+ ["category"]="lo",
+ ["description"]="GEORGIAN LETTER IN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10D8, -- ი
+ },
+ [0x10D9]={
+ ["category"]="lo",
+ ["description"]="GEORGIAN LETTER KAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10D9, -- კ
+ },
+ [0x10DA]={
+ ["category"]="lo",
+ ["description"]="GEORGIAN LETTER LAS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10DA, -- ლ
+ },
+ [0x10DB]={
+ ["category"]="lo",
+ ["description"]="GEORGIAN LETTER MAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10DB, -- მ
+ },
+ [0x10DC]={
+ ["category"]="lo",
+ ["description"]="GEORGIAN LETTER NAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10DC, -- ნ
+ },
+ [0x10DD]={
+ ["category"]="lo",
+ ["description"]="GEORGIAN LETTER ON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10DD, -- áƒ
+ },
+ [0x10DE]={
+ ["category"]="lo",
+ ["description"]="GEORGIAN LETTER PAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10DE, -- პ
+ },
+ [0x10DF]={
+ ["category"]="lo",
+ ["description"]="GEORGIAN LETTER ZHAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10DF, -- ჟ
+ },
+ [0x10E0]={
+ ["category"]="lo",
+ ["description"]="GEORGIAN LETTER RAE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10E0, -- რ
+ },
+ [0x10E1]={
+ ["category"]="lo",
+ ["description"]="GEORGIAN LETTER SAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10E1, -- ს
+ },
+ [0x10E2]={
+ ["category"]="lo",
+ ["description"]="GEORGIAN LETTER TAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10E2, -- ტ
+ },
+ [0x10E3]={
+ ["category"]="lo",
+ ["description"]="GEORGIAN LETTER UN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10E3, -- უ
+ },
+ [0x10E4]={
+ ["category"]="lo",
+ ["description"]="GEORGIAN LETTER PHAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10E4, -- ფ
+ },
+ [0x10E5]={
+ ["category"]="lo",
+ ["description"]="GEORGIAN LETTER KHAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10E5, -- ქ
+ },
+ [0x10E6]={
+ ["category"]="lo",
+ ["description"]="GEORGIAN LETTER GHAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10E6, -- ღ
+ },
+ [0x10E7]={
+ ["category"]="lo",
+ ["description"]="GEORGIAN LETTER QAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10E7, -- ყ
+ },
+ [0x10E8]={
+ ["category"]="lo",
+ ["description"]="GEORGIAN LETTER SHIN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10E8, -- შ
+ },
+ [0x10E9]={
+ ["category"]="lo",
+ ["description"]="GEORGIAN LETTER CHIN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10E9, -- ჩ
+ },
+ [0x10EA]={
+ ["category"]="lo",
+ ["description"]="GEORGIAN LETTER CAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10EA, -- ც
+ },
+ [0x10EB]={
+ ["category"]="lo",
+ ["description"]="GEORGIAN LETTER JIL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10EB, -- ძ
+ },
+ [0x10EC]={
+ ["category"]="lo",
+ ["description"]="GEORGIAN LETTER CIL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10EC, -- წ
+ },
+ [0x10ED]={
+ ["category"]="lo",
+ ["description"]="GEORGIAN LETTER CHAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10ED, -- ჭ
+ },
+ [0x10EE]={
+ ["category"]="lo",
+ ["description"]="GEORGIAN LETTER XAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10EE, -- ხ
+ },
+ [0x10EF]={
+ ["category"]="lo",
+ ["description"]="GEORGIAN LETTER JHAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10EF, -- ჯ
+ },
+ [0x10F0]={
+ ["category"]="lo",
+ ["description"]="GEORGIAN LETTER HAE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10F0, -- ჰ
+ },
+ [0x10F1]={
+ ["category"]="lo",
+ ["description"]="GEORGIAN LETTER HE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10F1, -- ჱ
+ },
+ [0x10F2]={
+ ["category"]="lo",
+ ["description"]="GEORGIAN LETTER HIE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10F2, -- ჲ
+ },
+ [0x10F3]={
+ ["category"]="lo",
+ ["description"]="GEORGIAN LETTER WE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10F3, -- ჳ
+ },
+ [0x10F4]={
+ ["category"]="lo",
+ ["description"]="GEORGIAN LETTER HAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10F4, -- ჴ
+ },
+ [0x10F5]={
+ ["category"]="lo",
+ ["description"]="GEORGIAN LETTER HOE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10F5, -- ჵ
+ },
+ [0x10F6]={
+ ["category"]="lo",
+ ["description"]="GEORGIAN LETTER FI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10F6, -- ჶ
+ },
+ [0x10F7]={
+ ["category"]="lo",
+ ["description"]="GEORGIAN LETTER YN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10F7, -- ჷ
+ },
+ [0x10F8]={
+ ["category"]="lo",
+ ["description"]="GEORGIAN LETTER ELIFI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10F8, -- ჸ
+ },
+ [0x10F9]={
+ ["category"]="lo",
+ ["description"]="GEORGIAN LETTER TURNED GAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10F9, -- ჹ
+ },
+ [0x10FA]={
+ ["category"]="lo",
+ ["description"]="GEORGIAN LETTER AIN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10FA, -- ჺ
+ },
+ [0x10FB]={
+ ["category"]="po",
+ ["description"]="GEORGIAN PARAGRAPH SEPARATOR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10FB, -- ჻
+ },
+ [0x10FC]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER GEORGIAN NAR",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x10DC },
+ ["unicodeslot"]=0x10FC, -- ჼ
+ },
+ [0x1100]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG KIYEOK",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x1100, -- á„€
+ },
+ [0x1101]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG SSANGKIYEOK",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x1101, -- á„
+ },
+ [0x1102]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG NIEUN",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x1102, -- á„‚
+ },
+ [0x1103]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG TIKEUT",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x1103, -- ᄃ
+ },
+ [0x1104]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG SSANGTIKEUT",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x1104, -- á„„
+ },
+ [0x1105]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG RIEUL",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x1105, -- á„…
+ },
+ [0x1106]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG MIEUM",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x1106, -- ᄆ
+ },
+ [0x1107]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG PIEUP",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x1107, -- ᄇ
+ },
+ [0x1108]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG SSANGPIEUP",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x1108, -- ᄈ
+ },
+ [0x1109]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG SIOS",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x1109, -- ᄉ
+ },
+ [0x110A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG SSANGSIOS",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x110A, -- á„Š
+ },
+ [0x110B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG IEUNG",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x110B, -- á„‹
+ },
+ [0x110C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG CIEUC",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x110C, -- ᄌ
+ },
+ [0x110D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG SSANGCIEUC",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x110D, -- á„
+ },
+ [0x110E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG CHIEUCH",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x110E, -- á„Ž
+ },
+ [0x110F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG KHIEUKH",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x110F, -- á„
+ },
+ [0x1110]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG THIEUTH",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x1110, -- á„
+ },
+ [0x1111]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG PHIEUPH",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x1111, -- á„‘
+ },
+ [0x1112]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG HIEUH",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x1112, -- á„’
+ },
+ [0x1113]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG NIEUN-KIYEOK",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x1113, -- á„“
+ },
+ [0x1114]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG SSANGNIEUN",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x1114, -- á„”
+ },
+ [0x1115]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG NIEUN-TIKEUT",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x1115, -- á„•
+ },
+ [0x1116]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG NIEUN-PIEUP",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x1116, -- á„–
+ },
+ [0x1117]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG TIKEUT-KIYEOK",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x1117, -- á„—
+ },
+ [0x1118]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG RIEUL-NIEUN",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x1118, -- ᄘ
+ },
+ [0x1119]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG SSANGRIEUL",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x1119, -- á„™
+ },
+ [0x111A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG RIEUL-HIEUH",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x111A, -- á„š
+ },
+ [0x111B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG KAPYEOUNRIEUL",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x111B, -- á„›
+ },
+ [0x111C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG MIEUM-PIEUP",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x111C, -- ᄜ
+ },
+ [0x111D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG KAPYEOUNMIEUM",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x111D, -- á„
+ },
+ [0x111E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG PIEUP-KIYEOK",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x111E, -- á„ž
+ },
+ [0x111F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG PIEUP-NIEUN",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x111F, -- á„Ÿ
+ },
+ [0x1120]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG PIEUP-TIKEUT",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x1120, -- á„ 
+ },
+ [0x1121]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG PIEUP-SIOS",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x1121, -- á„¡
+ },
+ [0x1122]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG PIEUP-SIOS-KIYEOK",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x1122, -- á„¢
+ },
+ [0x1123]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG PIEUP-SIOS-TIKEUT",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x1123, -- á„£
+ },
+ [0x1124]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG PIEUP-SIOS-PIEUP",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x1124, -- ᄤ
+ },
+ [0x1125]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG PIEUP-SSANGSIOS",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x1125, -- á„¥
+ },
+ [0x1126]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG PIEUP-SIOS-CIEUC",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x1126, -- ᄦ
+ },
+ [0x1127]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG PIEUP-CIEUC",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x1127, -- ᄧ
+ },
+ [0x1128]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG PIEUP-CHIEUCH",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x1128, -- ᄨ
+ },
+ [0x1129]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG PIEUP-THIEUTH",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x1129, -- á„©
+ },
+ [0x112A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG PIEUP-PHIEUPH",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x112A, -- ᄪ
+ },
+ [0x112B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG KAPYEOUNPIEUP",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x112B, -- á„«
+ },
+ [0x112C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG KAPYEOUNSSANGPIEUP",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x112C, -- ᄬ
+ },
+ [0x112D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG SIOS-KIYEOK",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x112D, -- á„­
+ },
+ [0x112E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG SIOS-NIEUN",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x112E, -- á„®
+ },
+ [0x112F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG SIOS-TIKEUT",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x112F, -- ᄯ
+ },
+ [0x1130]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG SIOS-RIEUL",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x1130, -- á„°
+ },
+ [0x1131]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG SIOS-MIEUM",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x1131, -- ᄱ
+ },
+ [0x1132]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG SIOS-PIEUP",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x1132, -- ᄲ
+ },
+ [0x1133]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG SIOS-PIEUP-KIYEOK",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x1133, -- ᄳ
+ },
+ [0x1134]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG SIOS-SSANGSIOS",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x1134, -- á„´
+ },
+ [0x1135]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG SIOS-IEUNG",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x1135, -- ᄵ
+ },
+ [0x1136]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG SIOS-CIEUC",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x1136, -- ᄶ
+ },
+ [0x1137]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG SIOS-CHIEUCH",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x1137, -- á„·
+ },
+ [0x1138]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG SIOS-KHIEUKH",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x1138, -- ᄸ
+ },
+ [0x1139]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG SIOS-THIEUTH",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x1139, -- ᄹ
+ },
+ [0x113A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG SIOS-PHIEUPH",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x113A, -- ᄺ
+ },
+ [0x113B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG SIOS-HIEUH",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x113B, -- á„»
+ },
+ [0x113C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG CHITUEUMSIOS",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x113C, -- ᄼ
+ },
+ [0x113D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG CHITUEUMSSANGSIOS",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x113D, -- ᄽ
+ },
+ [0x113E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG CEONGCHIEUMSIOS",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x113E, -- ᄾ
+ },
+ [0x113F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x113F, -- á„¿
+ },
+ [0x1140]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG PANSIOS",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x1140, -- á…€
+ },
+ [0x1141]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG IEUNG-KIYEOK",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x1141, -- á…
+ },
+ [0x1142]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG IEUNG-TIKEUT",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x1142, -- á…‚
+ },
+ [0x1143]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG IEUNG-MIEUM",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x1143, -- á…ƒ
+ },
+ [0x1144]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG IEUNG-PIEUP",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x1144, -- á…„
+ },
+ [0x1145]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG IEUNG-SIOS",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x1145, -- á……
+ },
+ [0x1146]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG IEUNG-PANSIOS",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x1146, -- á…†
+ },
+ [0x1147]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG SSANGIEUNG",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x1147, -- á…‡
+ },
+ [0x1148]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG IEUNG-CIEUC",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x1148, -- á…ˆ
+ },
+ [0x1149]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG IEUNG-CHIEUCH",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x1149, -- á…‰
+ },
+ [0x114A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG IEUNG-THIEUTH",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x114A, -- á…Š
+ },
+ [0x114B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG IEUNG-PHIEUPH",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x114B, -- á…‹
+ },
+ [0x114C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG YESIEUNG",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x114C, -- ᅌ
+ },
+ [0x114D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG CIEUC-IEUNG",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x114D, -- á…
+ },
+ [0x114E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG CHITUEUMCIEUC",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x114E, -- á…Ž
+ },
+ [0x114F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG CHITUEUMSSANGCIEUC",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x114F, -- á…
+ },
+ [0x1150]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG CEONGCHIEUMCIEUC",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x1150, -- á…
+ },
+ [0x1151]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x1151, -- á…‘
+ },
+ [0x1152]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG CHIEUCH-KHIEUKH",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x1152, -- á…’
+ },
+ [0x1153]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG CHIEUCH-HIEUH",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x1153, -- á…“
+ },
+ [0x1154]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG CHITUEUMCHIEUCH",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x1154, -- á…”
+ },
+ [0x1155]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG CEONGCHIEUMCHIEUCH",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x1155, -- á…•
+ },
+ [0x1156]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG PHIEUPH-PIEUP",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x1156, -- á…–
+ },
+ [0x1157]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG KAPYEOUNPHIEUPH",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x1157, -- á…—
+ },
+ [0x1158]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG SSANGHIEUH",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x1158, -- á…˜
+ },
+ [0x1159]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG YEORINHIEUH",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x1159, -- á…™
+ },
+ [0x115F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL CHOSEONG FILLER",
+ ["linebreak"]="jl",
+ ["unicodeslot"]=0x115F, -- á…Ÿ
+ },
+ [0x1160]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG FILLER",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x1160, -- á… 
+ },
+ [0x1161]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG A",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x1161, -- á…¡
+ },
+ [0x1162]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG AE",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x1162, -- á…¢
+ },
+ [0x1163]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG YA",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x1163, -- á…£
+ },
+ [0x1164]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG YAE",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x1164, -- á…¤
+ },
+ [0x1165]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG EO",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x1165, -- á…¥
+ },
+ [0x1166]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG E",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x1166, -- á…¦
+ },
+ [0x1167]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG YEO",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x1167, -- á…§
+ },
+ [0x1168]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG YE",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x1168, -- á…¨
+ },
+ [0x1169]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG O",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x1169, -- á…©
+ },
+ [0x116A]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG WA",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x116A, -- á…ª
+ },
+ [0x116B]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG WAE",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x116B, -- á…«
+ },
+ [0x116C]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG OE",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x116C, -- á…¬
+ },
+ [0x116D]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG YO",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x116D, -- á…­
+ },
+ [0x116E]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG U",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x116E, -- á…®
+ },
+ [0x116F]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG WEO",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x116F, -- á…¯
+ },
+ [0x1170]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG WE",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x1170, -- á…°
+ },
+ [0x1171]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG WI",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x1171, -- á…±
+ },
+ [0x1172]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG YU",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x1172, -- á…²
+ },
+ [0x1173]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG EU",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x1173, -- á…³
+ },
+ [0x1174]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG YI",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x1174, -- á…´
+ },
+ [0x1175]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG I",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x1175, -- á…µ
+ },
+ [0x1176]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG A-O",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x1176, -- á…¶
+ },
+ [0x1177]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG A-U",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x1177, -- á…·
+ },
+ [0x1178]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG YA-O",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x1178, -- á…¸
+ },
+ [0x1179]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG YA-YO",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x1179, -- á…¹
+ },
+ [0x117A]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG EO-O",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x117A, -- á…º
+ },
+ [0x117B]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG EO-U",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x117B, -- á…»
+ },
+ [0x117C]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG EO-EU",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x117C, -- á…¼
+ },
+ [0x117D]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG YEO-O",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x117D, -- á…½
+ },
+ [0x117E]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG YEO-U",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x117E, -- á…¾
+ },
+ [0x117F]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG O-EO",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x117F, -- á…¿
+ },
+ [0x1180]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG O-E",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x1180, -- ᆀ
+ },
+ [0x1181]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG O-YE",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x1181, -- á†
+ },
+ [0x1182]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG O-O",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x1182, -- ᆂ
+ },
+ [0x1183]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG O-U",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x1183, -- ᆃ
+ },
+ [0x1184]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG YO-YA",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x1184, -- ᆄ
+ },
+ [0x1185]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG YO-YAE",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x1185, -- ᆅ
+ },
+ [0x1186]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG YO-YEO",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x1186, -- ᆆ
+ },
+ [0x1187]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG YO-O",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x1187, -- ᆇ
+ },
+ [0x1188]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG YO-I",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x1188, -- ᆈ
+ },
+ [0x1189]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG U-A",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x1189, -- ᆉ
+ },
+ [0x118A]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG U-AE",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x118A, -- ᆊ
+ },
+ [0x118B]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG U-EO-EU",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x118B, -- ᆋ
+ },
+ [0x118C]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG U-YE",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x118C, -- ᆌ
+ },
+ [0x118D]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG U-U",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x118D, -- á†
+ },
+ [0x118E]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG YU-A",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x118E, -- ᆎ
+ },
+ [0x118F]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG YU-EO",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x118F, -- á†
+ },
+ [0x1190]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG YU-E",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x1190, -- á†
+ },
+ [0x1191]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG YU-YEO",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x1191, -- ᆑ
+ },
+ [0x1192]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG YU-YE",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x1192, -- ᆒ
+ },
+ [0x1193]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG YU-U",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x1193, -- ᆓ
+ },
+ [0x1194]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG YU-I",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x1194, -- ᆔ
+ },
+ [0x1195]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG EU-U",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x1195, -- ᆕ
+ },
+ [0x1196]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG EU-EU",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x1196, -- ᆖ
+ },
+ [0x1197]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG YI-U",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x1197, -- ᆗ
+ },
+ [0x1198]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG I-A",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x1198, -- ᆘ
+ },
+ [0x1199]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG I-YA",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x1199, -- ᆙ
+ },
+ [0x119A]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG I-O",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x119A, -- ᆚ
+ },
+ [0x119B]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG I-U",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x119B, -- ᆛ
+ },
+ [0x119C]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG I-EU",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x119C, -- ᆜ
+ },
+ [0x119D]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG I-ARAEA",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x119D, -- á†
+ },
+ [0x119E]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG ARAEA",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x119E, -- ᆞ
+ },
+ [0x119F]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG ARAEA-EO",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x119F, -- ᆟ
+ },
+ [0x11A0]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG ARAEA-U",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x11A0, -- ᆠ
+ },
+ [0x11A1]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG ARAEA-I",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x11A1, -- ᆡ
+ },
+ [0x11A2]={
+ ["category"]="lo",
+ ["description"]="HANGUL JUNGSEONG SSANGARAEA",
+ ["linebreak"]="jv",
+ ["unicodeslot"]=0x11A2, -- ᆢ
+ },
+ [0x11A8]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG KIYEOK",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11A8, -- ᆨ
+ },
+ [0x11A9]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG SSANGKIYEOK",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11A9, -- ᆩ
+ },
+ [0x11AA]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG KIYEOK-SIOS",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11AA, -- ᆪ
+ },
+ [0x11AB]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG NIEUN",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11AB, -- ᆫ
+ },
+ [0x11AC]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG NIEUN-CIEUC",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11AC, -- ᆬ
+ },
+ [0x11AD]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG NIEUN-HIEUH",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11AD, -- ᆭ
+ },
+ [0x11AE]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG TIKEUT",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11AE, -- ᆮ
+ },
+ [0x11AF]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG RIEUL",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11AF, -- ᆯ
+ },
+ [0x11B0]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG RIEUL-KIYEOK",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11B0, -- ᆰ
+ },
+ [0x11B1]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG RIEUL-MIEUM",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11B1, -- ᆱ
+ },
+ [0x11B2]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG RIEUL-PIEUP",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11B2, -- ᆲ
+ },
+ [0x11B3]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG RIEUL-SIOS",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11B3, -- ᆳ
+ },
+ [0x11B4]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG RIEUL-THIEUTH",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11B4, -- ᆴ
+ },
+ [0x11B5]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG RIEUL-PHIEUPH",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11B5, -- ᆵ
+ },
+ [0x11B6]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG RIEUL-HIEUH",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11B6, -- ᆶ
+ },
+ [0x11B7]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG MIEUM",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11B7, -- ᆷ
+ },
+ [0x11B8]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG PIEUP",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11B8, -- ᆸ
+ },
+ [0x11B9]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG PIEUP-SIOS",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11B9, -- ᆹ
+ },
+ [0x11BA]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG SIOS",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11BA, -- ᆺ
+ },
+ [0x11BB]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG SSANGSIOS",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11BB, -- ᆻ
+ },
+ [0x11BC]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG IEUNG",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11BC, -- ᆼ
+ },
+ [0x11BD]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG CIEUC",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11BD, -- ᆽ
+ },
+ [0x11BE]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG CHIEUCH",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11BE, -- ᆾ
+ },
+ [0x11BF]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG KHIEUKH",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11BF, -- ᆿ
+ },
+ [0x11C0]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG THIEUTH",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11C0, -- ᇀ
+ },
+ [0x11C1]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG PHIEUPH",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11C1, -- á‡
+ },
+ [0x11C2]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG HIEUH",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11C2, -- ᇂ
+ },
+ [0x11C3]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG KIYEOK-RIEUL",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11C3, -- ᇃ
+ },
+ [0x11C4]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11C4, -- ᇄ
+ },
+ [0x11C5]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG NIEUN-KIYEOK",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11C5, -- ᇅ
+ },
+ [0x11C6]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG NIEUN-TIKEUT",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11C6, -- ᇆ
+ },
+ [0x11C7]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG NIEUN-SIOS",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11C7, -- ᇇ
+ },
+ [0x11C8]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG NIEUN-PANSIOS",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11C8, -- ᇈ
+ },
+ [0x11C9]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG NIEUN-THIEUTH",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11C9, -- ᇉ
+ },
+ [0x11CA]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG TIKEUT-KIYEOK",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11CA, -- ᇊ
+ },
+ [0x11CB]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG TIKEUT-RIEUL",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11CB, -- ᇋ
+ },
+ [0x11CC]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG RIEUL-KIYEOK-SIOS",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11CC, -- ᇌ
+ },
+ [0x11CD]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG RIEUL-NIEUN",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11CD, -- á‡
+ },
+ [0x11CE]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG RIEUL-TIKEUT",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11CE, -- ᇎ
+ },
+ [0x11CF]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11CF, -- á‡
+ },
+ [0x11D0]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG SSANGRIEUL",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11D0, -- á‡
+ },
+ [0x11D1]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11D1, -- ᇑ
+ },
+ [0x11D2]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG RIEUL-MIEUM-SIOS",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11D2, -- ᇒ
+ },
+ [0x11D3]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG RIEUL-PIEUP-SIOS",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11D3, -- ᇓ
+ },
+ [0x11D4]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG RIEUL-PIEUP-HIEUH",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11D4, -- ᇔ
+ },
+ [0x11D5]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11D5, -- ᇕ
+ },
+ [0x11D6]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG RIEUL-SSANGSIOS",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11D6, -- ᇖ
+ },
+ [0x11D7]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG RIEUL-PANSIOS",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11D7, -- ᇗ
+ },
+ [0x11D8]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG RIEUL-KHIEUKH",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11D8, -- ᇘ
+ },
+ [0x11D9]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG RIEUL-YEORINHIEUH",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11D9, -- ᇙ
+ },
+ [0x11DA]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG MIEUM-KIYEOK",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11DA, -- ᇚ
+ },
+ [0x11DB]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG MIEUM-RIEUL",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11DB, -- ᇛ
+ },
+ [0x11DC]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG MIEUM-PIEUP",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11DC, -- ᇜ
+ },
+ [0x11DD]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG MIEUM-SIOS",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11DD, -- á‡
+ },
+ [0x11DE]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG MIEUM-SSANGSIOS",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11DE, -- ᇞ
+ },
+ [0x11DF]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG MIEUM-PANSIOS",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11DF, -- ᇟ
+ },
+ [0x11E0]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG MIEUM-CHIEUCH",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11E0, -- ᇠ
+ },
+ [0x11E1]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG MIEUM-HIEUH",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11E1, -- ᇡ
+ },
+ [0x11E2]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG KAPYEOUNMIEUM",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11E2, -- ᇢ
+ },
+ [0x11E3]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG PIEUP-RIEUL",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11E3, -- ᇣ
+ },
+ [0x11E4]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG PIEUP-PHIEUPH",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11E4, -- ᇤ
+ },
+ [0x11E5]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG PIEUP-HIEUH",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11E5, -- ᇥ
+ },
+ [0x11E6]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG KAPYEOUNPIEUP",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11E6, -- ᇦ
+ },
+ [0x11E7]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG SIOS-KIYEOK",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11E7, -- ᇧ
+ },
+ [0x11E8]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG SIOS-TIKEUT",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11E8, -- ᇨ
+ },
+ [0x11E9]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG SIOS-RIEUL",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11E9, -- ᇩ
+ },
+ [0x11EA]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG SIOS-PIEUP",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11EA, -- ᇪ
+ },
+ [0x11EB]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG PANSIOS",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11EB, -- ᇫ
+ },
+ [0x11EC]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG IEUNG-KIYEOK",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11EC, -- ᇬ
+ },
+ [0x11ED]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG IEUNG-SSANGKIYEOK",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11ED, -- ᇭ
+ },
+ [0x11EE]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG SSANGIEUNG",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11EE, -- ᇮ
+ },
+ [0x11EF]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG IEUNG-KHIEUKH",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11EF, -- ᇯ
+ },
+ [0x11F0]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG YESIEUNG",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11F0, -- ᇰ
+ },
+ [0x11F1]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG YESIEUNG-SIOS",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11F1, -- ᇱ
+ },
+ [0x11F2]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG YESIEUNG-PANSIOS",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11F2, -- ᇲ
+ },
+ [0x11F3]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG PHIEUPH-PIEUP",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11F3, -- ᇳ
+ },
+ [0x11F4]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG KAPYEOUNPHIEUPH",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11F4, -- ᇴ
+ },
+ [0x11F5]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG HIEUH-NIEUN",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11F5, -- ᇵ
+ },
+ [0x11F6]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG HIEUH-RIEUL",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11F6, -- ᇶ
+ },
+ [0x11F7]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG HIEUH-MIEUM",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11F7, -- ᇷ
+ },
+ [0x11F8]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG HIEUH-PIEUP",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11F8, -- ᇸ
+ },
+ [0x11F9]={
+ ["category"]="lo",
+ ["description"]="HANGUL JONGSEONG YEORINHIEUH",
+ ["linebreak"]="jt",
+ ["unicodeslot"]=0x11F9, -- ᇹ
+ },
+ [0x1200]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE HA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1200, -- ሀ
+ },
+ [0x1201]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE HU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1201, -- áˆ
+ },
+ [0x1202]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE HI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1202, -- ሂ
+ },
+ [0x1203]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE HAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1203, -- ሃ
+ },
+ [0x1204]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE HEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1204, -- ሄ
+ },
+ [0x1205]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE HE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1205, -- ህ
+ },
+ [0x1206]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE HO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1206, -- ሆ
+ },
+ [0x1207]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE HOA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1207, -- ሇ
+ },
+ [0x1208]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE LA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1208, -- ለ
+ },
+ [0x1209]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE LU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1209, -- ሉ
+ },
+ [0x120A]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE LI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120A, -- ሊ
+ },
+ [0x120B]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE LAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120B, -- ላ
+ },
+ [0x120C]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE LEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120C, -- ሌ
+ },
+ [0x120D]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE LE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120D, -- áˆ
+ },
+ [0x120E]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE LO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120E, -- ሎ
+ },
+ [0x120F]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE LWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120F, -- áˆ
+ },
+ [0x1210]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE HHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1210, -- áˆ
+ },
+ [0x1211]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE HHU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1211, -- ሑ
+ },
+ [0x1212]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE HHI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1212, -- ሒ
+ },
+ [0x1213]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE HHAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1213, -- ሓ
+ },
+ [0x1214]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE HHEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1214, -- ሔ
+ },
+ [0x1215]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE HHE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1215, -- ሕ
+ },
+ [0x1216]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE HHO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1216, -- ሖ
+ },
+ [0x1217]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE HHWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1217, -- ሗ
+ },
+ [0x1218]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE MA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1218, -- መ
+ },
+ [0x1219]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE MU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1219, -- ሙ
+ },
+ [0x121A]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE MI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121A, -- ሚ
+ },
+ [0x121B]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE MAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121B, -- ማ
+ },
+ [0x121C]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE MEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121C, -- ሜ
+ },
+ [0x121D]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE ME",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121D, -- áˆ
+ },
+ [0x121E]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE MO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121E, -- ሞ
+ },
+ [0x121F]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE MWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121F, -- ሟ
+ },
+ [0x1220]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE SZA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1220, -- ሠ
+ },
+ [0x1221]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE SZU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1221, -- ሡ
+ },
+ [0x1222]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE SZI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1222, -- ሢ
+ },
+ [0x1223]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE SZAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1223, -- ሣ
+ },
+ [0x1224]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE SZEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1224, -- ሤ
+ },
+ [0x1225]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE SZE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1225, -- ሥ
+ },
+ [0x1226]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE SZO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1226, -- ሦ
+ },
+ [0x1227]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE SZWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1227, -- ሧ
+ },
+ [0x1228]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE RA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1228, -- ረ
+ },
+ [0x1229]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE RU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1229, -- ሩ
+ },
+ [0x122A]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE RI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122A, -- ሪ
+ },
+ [0x122B]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE RAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122B, -- ራ
+ },
+ [0x122C]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE REE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122C, -- ሬ
+ },
+ [0x122D]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE RE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122D, -- ር
+ },
+ [0x122E]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE RO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122E, -- ሮ
+ },
+ [0x122F]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE RWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122F, -- ሯ
+ },
+ [0x1230]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE SA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1230, -- ሰ
+ },
+ [0x1231]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE SU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1231, -- ሱ
+ },
+ [0x1232]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE SI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1232, -- ሲ
+ },
+ [0x1233]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE SAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1233, -- ሳ
+ },
+ [0x1234]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE SEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1234, -- ሴ
+ },
+ [0x1235]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE SE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1235, -- ስ
+ },
+ [0x1236]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE SO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1236, -- ሶ
+ },
+ [0x1237]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE SWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1237, -- ሷ
+ },
+ [0x1238]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE SHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1238, -- ሸ
+ },
+ [0x1239]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE SHU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1239, -- ሹ
+ },
+ [0x123A]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE SHI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x123A, -- ሺ
+ },
+ [0x123B]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE SHAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x123B, -- ሻ
+ },
+ [0x123C]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE SHEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x123C, -- ሼ
+ },
+ [0x123D]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE SHE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x123D, -- ሽ
+ },
+ [0x123E]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE SHO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x123E, -- ሾ
+ },
+ [0x123F]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE SHWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x123F, -- ሿ
+ },
+ [0x1240]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE QA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1240, -- ቀ
+ },
+ [0x1241]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE QU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1241, -- á‰
+ },
+ [0x1242]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE QI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1242, -- ቂ
+ },
+ [0x1243]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE QAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1243, -- ቃ
+ },
+ [0x1244]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE QEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1244, -- ቄ
+ },
+ [0x1245]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE QE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1245, -- ቅ
+ },
+ [0x1246]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE QO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1246, -- ቆ
+ },
+ [0x1247]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE QOA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1247, -- ቇ
+ },
+ [0x1248]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE QWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1248, -- ቈ
+ },
+ [0x124A]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE QWI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x124A, -- ቊ
+ },
+ [0x124B]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE QWAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x124B, -- ቋ
+ },
+ [0x124C]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE QWEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x124C, -- ቌ
+ },
+ [0x124D]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE QWE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x124D, -- á‰
+ },
+ [0x1250]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE QHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1250, -- á‰
+ },
+ [0x1251]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE QHU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1251, -- ቑ
+ },
+ [0x1252]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE QHI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1252, -- ቒ
+ },
+ [0x1253]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE QHAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1253, -- ቓ
+ },
+ [0x1254]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE QHEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1254, -- ቔ
+ },
+ [0x1255]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE QHE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1255, -- ቕ
+ },
+ [0x1256]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE QHO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1256, -- ቖ
+ },
+ [0x1258]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE QHWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1258, -- ቘ
+ },
+ [0x125A]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE QHWI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x125A, -- ቚ
+ },
+ [0x125B]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE QHWAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x125B, -- ቛ
+ },
+ [0x125C]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE QHWEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x125C, -- ቜ
+ },
+ [0x125D]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE QHWE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x125D, -- á‰
+ },
+ [0x1260]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE BA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1260, -- በ
+ },
+ [0x1261]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE BU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1261, -- ቡ
+ },
+ [0x1262]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE BI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1262, -- ቢ
+ },
+ [0x1263]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE BAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1263, -- ባ
+ },
+ [0x1264]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE BEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1264, -- ቤ
+ },
+ [0x1265]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE BE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1265, -- ብ
+ },
+ [0x1266]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE BO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1266, -- ቦ
+ },
+ [0x1267]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE BWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1267, -- ቧ
+ },
+ [0x1268]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE VA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1268, -- ቨ
+ },
+ [0x1269]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE VU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1269, -- ቩ
+ },
+ [0x126A]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE VI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x126A, -- ቪ
+ },
+ [0x126B]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE VAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x126B, -- ቫ
+ },
+ [0x126C]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE VEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x126C, -- ቬ
+ },
+ [0x126D]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE VE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x126D, -- ቭ
+ },
+ [0x126E]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE VO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x126E, -- ቮ
+ },
+ [0x126F]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE VWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x126F, -- ቯ
+ },
+ [0x1270]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE TA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1270, -- ተ
+ },
+ [0x1271]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE TU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1271, -- ቱ
+ },
+ [0x1272]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE TI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1272, -- ቲ
+ },
+ [0x1273]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE TAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1273, -- ታ
+ },
+ [0x1274]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE TEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1274, -- ቴ
+ },
+ [0x1275]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE TE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1275, -- ት
+ },
+ [0x1276]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1276, -- ቶ
+ },
+ [0x1277]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE TWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1277, -- ቷ
+ },
+ [0x1278]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE CA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1278, -- ቸ
+ },
+ [0x1279]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE CU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1279, -- ቹ
+ },
+ [0x127A]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE CI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x127A, -- ቺ
+ },
+ [0x127B]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE CAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x127B, -- ቻ
+ },
+ [0x127C]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE CEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x127C, -- ቼ
+ },
+ [0x127D]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE CE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x127D, -- ች
+ },
+ [0x127E]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE CO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x127E, -- ቾ
+ },
+ [0x127F]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE CWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x127F, -- ቿ
+ },
+ [0x1280]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE XA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1280, -- ኀ
+ },
+ [0x1281]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE XU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1281, -- áŠ
+ },
+ [0x1282]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE XI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1282, -- ኂ
+ },
+ [0x1283]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE XAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1283, -- ኃ
+ },
+ [0x1284]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE XEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1284, -- ኄ
+ },
+ [0x1285]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE XE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1285, -- ኅ
+ },
+ [0x1286]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE XO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1286, -- ኆ
+ },
+ [0x1287]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE XOA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1287, -- ኇ
+ },
+ [0x1288]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE XWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1288, -- ኈ
+ },
+ [0x128A]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE XWI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x128A, -- ኊ
+ },
+ [0x128B]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE XWAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x128B, -- ኋ
+ },
+ [0x128C]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE XWEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x128C, -- ኌ
+ },
+ [0x128D]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE XWE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x128D, -- áŠ
+ },
+ [0x1290]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE NA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1290, -- áŠ
+ },
+ [0x1291]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE NU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1291, -- ኑ
+ },
+ [0x1292]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE NI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1292, -- ኒ
+ },
+ [0x1293]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE NAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1293, -- ና
+ },
+ [0x1294]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE NEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1294, -- ኔ
+ },
+ [0x1295]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE NE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1295, -- ን
+ },
+ [0x1296]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE NO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1296, -- ኖ
+ },
+ [0x1297]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE NWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1297, -- ኗ
+ },
+ [0x1298]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE NYA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1298, -- ኘ
+ },
+ [0x1299]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE NYU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1299, -- ኙ
+ },
+ [0x129A]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE NYI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x129A, -- ኚ
+ },
+ [0x129B]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE NYAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x129B, -- ኛ
+ },
+ [0x129C]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE NYEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x129C, -- ኜ
+ },
+ [0x129D]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE NYE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x129D, -- áŠ
+ },
+ [0x129E]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE NYO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x129E, -- ኞ
+ },
+ [0x129F]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE NYWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x129F, -- ኟ
+ },
+ [0x12A0]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE GLOTTAL A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12A0, -- አ
+ },
+ [0x12A1]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE GLOTTAL U",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12A1, -- ኡ
+ },
+ [0x12A2]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE GLOTTAL I",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12A2, -- ኢ
+ },
+ [0x12A3]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE GLOTTAL AA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12A3, -- ኣ
+ },
+ [0x12A4]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE GLOTTAL EE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12A4, -- ኤ
+ },
+ [0x12A5]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE GLOTTAL E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12A5, -- እ
+ },
+ [0x12A6]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE GLOTTAL O",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12A6, -- ኦ
+ },
+ [0x12A7]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE GLOTTAL WA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12A7, -- ኧ
+ },
+ [0x12A8]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE KA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12A8, -- ከ
+ },
+ [0x12A9]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE KU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12A9, -- ኩ
+ },
+ [0x12AA]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE KI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12AA, -- ኪ
+ },
+ [0x12AB]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE KAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12AB, -- ካ
+ },
+ [0x12AC]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE KEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12AC, -- ኬ
+ },
+ [0x12AD]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE KE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12AD, -- ክ
+ },
+ [0x12AE]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE KO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12AE, -- ኮ
+ },
+ [0x12AF]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE KOA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12AF, -- ኯ
+ },
+ [0x12B0]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE KWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12B0, -- ኰ
+ },
+ [0x12B2]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE KWI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12B2, -- ኲ
+ },
+ [0x12B3]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE KWAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12B3, -- ኳ
+ },
+ [0x12B4]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE KWEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12B4, -- ኴ
+ },
+ [0x12B5]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE KWE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12B5, -- ኵ
+ },
+ [0x12B8]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE KXA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12B8, -- ኸ
+ },
+ [0x12B9]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE KXU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12B9, -- ኹ
+ },
+ [0x12BA]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE KXI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12BA, -- ኺ
+ },
+ [0x12BB]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE KXAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12BB, -- ኻ
+ },
+ [0x12BC]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE KXEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12BC, -- ኼ
+ },
+ [0x12BD]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE KXE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12BD, -- ኽ
+ },
+ [0x12BE]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE KXO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12BE, -- ኾ
+ },
+ [0x12C0]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE KXWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12C0, -- á‹€
+ },
+ [0x12C2]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE KXWI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12C2, -- á‹‚
+ },
+ [0x12C3]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE KXWAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12C3, -- ዃ
+ },
+ [0x12C4]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE KXWEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12C4, -- á‹„
+ },
+ [0x12C5]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE KXWE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12C5, -- á‹…
+ },
+ [0x12C8]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE WA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12C8, -- ወ
+ },
+ [0x12C9]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE WU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12C9, -- ዉ
+ },
+ [0x12CA]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE WI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12CA, -- á‹Š
+ },
+ [0x12CB]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE WAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12CB, -- á‹‹
+ },
+ [0x12CC]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE WEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12CC, -- ዌ
+ },
+ [0x12CD]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE WE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12CD, -- á‹
+ },
+ [0x12CE]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE WO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12CE, -- á‹Ž
+ },
+ [0x12CF]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE WOA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12CF, -- á‹
+ },
+ [0x12D0]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE PHARYNGEAL A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12D0, -- á‹
+ },
+ [0x12D1]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE PHARYNGEAL U",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12D1, -- á‹‘
+ },
+ [0x12D2]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE PHARYNGEAL I",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12D2, -- á‹’
+ },
+ [0x12D3]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE PHARYNGEAL AA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12D3, -- á‹“
+ },
+ [0x12D4]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE PHARYNGEAL EE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12D4, -- á‹”
+ },
+ [0x12D5]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE PHARYNGEAL E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12D5, -- á‹•
+ },
+ [0x12D6]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE PHARYNGEAL O",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12D6, -- á‹–
+ },
+ [0x12D8]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE ZA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12D8, -- ዘ
+ },
+ [0x12D9]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE ZU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12D9, -- á‹™
+ },
+ [0x12DA]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE ZI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12DA, -- á‹š
+ },
+ [0x12DB]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE ZAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12DB, -- á‹›
+ },
+ [0x12DC]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE ZEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12DC, -- ዜ
+ },
+ [0x12DD]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE ZE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12DD, -- á‹
+ },
+ [0x12DE]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE ZO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12DE, -- á‹ž
+ },
+ [0x12DF]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE ZWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12DF, -- á‹Ÿ
+ },
+ [0x12E0]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE ZHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12E0, -- á‹ 
+ },
+ [0x12E1]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE ZHU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12E1, -- á‹¡
+ },
+ [0x12E2]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE ZHI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12E2, -- á‹¢
+ },
+ [0x12E3]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE ZHAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12E3, -- á‹£
+ },
+ [0x12E4]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE ZHEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12E4, -- ዤ
+ },
+ [0x12E5]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE ZHE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12E5, -- á‹¥
+ },
+ [0x12E6]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE ZHO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12E6, -- ዦ
+ },
+ [0x12E7]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE ZHWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12E7, -- ዧ
+ },
+ [0x12E8]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE YA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12E8, -- የ
+ },
+ [0x12E9]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE YU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12E9, -- á‹©
+ },
+ [0x12EA]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE YI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12EA, -- ዪ
+ },
+ [0x12EB]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE YAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12EB, -- á‹«
+ },
+ [0x12EC]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE YEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12EC, -- ዬ
+ },
+ [0x12ED]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE YE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12ED, -- á‹­
+ },
+ [0x12EE]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE YO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12EE, -- á‹®
+ },
+ [0x12EF]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE YOA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12EF, -- ዯ
+ },
+ [0x12F0]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE DA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12F0, -- á‹°
+ },
+ [0x12F1]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE DU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12F1, -- ዱ
+ },
+ [0x12F2]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE DI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12F2, -- ዲ
+ },
+ [0x12F3]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE DAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12F3, -- ዳ
+ },
+ [0x12F4]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE DEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12F4, -- á‹´
+ },
+ [0x12F5]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE DE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12F5, -- ድ
+ },
+ [0x12F6]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE DO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12F6, -- ዶ
+ },
+ [0x12F7]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE DWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12F7, -- á‹·
+ },
+ [0x12F8]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE DDA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12F8, -- ዸ
+ },
+ [0x12F9]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE DDU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12F9, -- ዹ
+ },
+ [0x12FA]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE DDI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12FA, -- ዺ
+ },
+ [0x12FB]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE DDAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12FB, -- á‹»
+ },
+ [0x12FC]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE DDEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12FC, -- ዼ
+ },
+ [0x12FD]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE DDE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12FD, -- ዽ
+ },
+ [0x12FE]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE DDO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12FE, -- ዾ
+ },
+ [0x12FF]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE DDWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12FF, -- á‹¿
+ },
+ [0x1300]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE JA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1300, -- ጀ
+ },
+ [0x1301]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE JU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1301, -- áŒ
+ },
+ [0x1302]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE JI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1302, -- ጂ
+ },
+ [0x1303]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE JAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1303, -- ጃ
+ },
+ [0x1304]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE JEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1304, -- ጄ
+ },
+ [0x1305]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE JE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1305, -- ጅ
+ },
+ [0x1306]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE JO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1306, -- ጆ
+ },
+ [0x1307]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE JWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1307, -- ጇ
+ },
+ [0x1308]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE GA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1308, -- ገ
+ },
+ [0x1309]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE GU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1309, -- ጉ
+ },
+ [0x130A]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE GI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x130A, -- ጊ
+ },
+ [0x130B]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE GAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x130B, -- ጋ
+ },
+ [0x130C]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE GEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x130C, -- ጌ
+ },
+ [0x130D]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE GE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x130D, -- áŒ
+ },
+ [0x130E]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE GO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x130E, -- ጎ
+ },
+ [0x130F]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE GOA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x130F, -- áŒ
+ },
+ [0x1310]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE GWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1310, -- áŒ
+ },
+ [0x1312]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE GWI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1312, -- ጒ
+ },
+ [0x1313]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE GWAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1313, -- ጓ
+ },
+ [0x1314]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE GWEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1314, -- ጔ
+ },
+ [0x1315]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE GWE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1315, -- ጕ
+ },
+ [0x1318]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE GGA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1318, -- ጘ
+ },
+ [0x1319]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE GGU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1319, -- ጙ
+ },
+ [0x131A]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE GGI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x131A, -- ጚ
+ },
+ [0x131B]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE GGAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x131B, -- ጛ
+ },
+ [0x131C]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE GGEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x131C, -- ጜ
+ },
+ [0x131D]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE GGE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x131D, -- áŒ
+ },
+ [0x131E]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE GGO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x131E, -- ጞ
+ },
+ [0x131F]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE GGWAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x131F, -- ጟ
+ },
+ [0x1320]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE THA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1320, -- ጠ
+ },
+ [0x1321]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE THU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1321, -- ጡ
+ },
+ [0x1322]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE THI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1322, -- ጢ
+ },
+ [0x1323]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE THAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1323, -- ጣ
+ },
+ [0x1324]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE THEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1324, -- ጤ
+ },
+ [0x1325]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE THE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1325, -- ጥ
+ },
+ [0x1326]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE THO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1326, -- ጦ
+ },
+ [0x1327]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE THWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1327, -- ጧ
+ },
+ [0x1328]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE CHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1328, -- ጨ
+ },
+ [0x1329]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE CHU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1329, -- ጩ
+ },
+ [0x132A]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE CHI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x132A, -- ጪ
+ },
+ [0x132B]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE CHAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x132B, -- ጫ
+ },
+ [0x132C]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE CHEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x132C, -- ጬ
+ },
+ [0x132D]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE CHE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x132D, -- ጭ
+ },
+ [0x132E]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE CHO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x132E, -- ጮ
+ },
+ [0x132F]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE CHWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x132F, -- ጯ
+ },
+ [0x1330]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE PHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1330, -- ጰ
+ },
+ [0x1331]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE PHU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1331, -- ጱ
+ },
+ [0x1332]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE PHI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1332, -- ጲ
+ },
+ [0x1333]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE PHAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1333, -- ጳ
+ },
+ [0x1334]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE PHEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1334, -- ጴ
+ },
+ [0x1335]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE PHE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1335, -- ጵ
+ },
+ [0x1336]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE PHO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1336, -- ጶ
+ },
+ [0x1337]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE PHWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1337, -- ጷ
+ },
+ [0x1338]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE TSA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1338, -- ጸ
+ },
+ [0x1339]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE TSU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1339, -- ጹ
+ },
+ [0x133A]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE TSI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x133A, -- ጺ
+ },
+ [0x133B]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE TSAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x133B, -- ጻ
+ },
+ [0x133C]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE TSEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x133C, -- ጼ
+ },
+ [0x133D]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE TSE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x133D, -- ጽ
+ },
+ [0x133E]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE TSO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x133E, -- ጾ
+ },
+ [0x133F]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE TSWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x133F, -- ጿ
+ },
+ [0x1340]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE TZA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1340, -- á€
+ },
+ [0x1341]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE TZU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1341, -- á
+ },
+ [0x1342]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE TZI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1342, -- á‚
+ },
+ [0x1343]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE TZAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1343, -- áƒ
+ },
+ [0x1344]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE TZEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1344, -- á„
+ },
+ [0x1345]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE TZE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1345, -- á…
+ },
+ [0x1346]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE TZO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1346, -- á†
+ },
+ [0x1347]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE TZOA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1347, -- á‡
+ },
+ [0x1348]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE FA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1348, -- áˆ
+ },
+ [0x1349]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE FU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1349, -- á‰
+ },
+ [0x134A]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE FI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x134A, -- áŠ
+ },
+ [0x134B]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE FAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x134B, -- á‹
+ },
+ [0x134C]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE FEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x134C, -- áŒ
+ },
+ [0x134D]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE FE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x134D, -- á
+ },
+ [0x134E]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE FO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x134E, -- áŽ
+ },
+ [0x134F]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE FWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x134F, -- á
+ },
+ [0x1350]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE PA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1350, -- á
+ },
+ [0x1351]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE PU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1351, -- á‘
+ },
+ [0x1352]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE PI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1352, -- á’
+ },
+ [0x1353]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE PAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1353, -- á“
+ },
+ [0x1354]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE PEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1354, -- á”
+ },
+ [0x1355]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE PE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1355, -- á•
+ },
+ [0x1356]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE PO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1356, -- á–
+ },
+ [0x1357]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE PWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1357, -- á—
+ },
+ [0x1358]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE RYA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1358, -- á˜
+ },
+ [0x1359]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE MYA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1359, -- á™
+ },
+ [0x135A]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE FYA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x135A, -- áš
+ },
+ [0x135F]={
+ ["category"]="mn",
+ ["description"]="ETHIOPIC COMBINING GEMINATION MARK",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x135F, -- áŸ
+ },
+ [0x1360]={
+ ["category"]="so",
+ ["description"]="ETHIOPIC SECTION MARK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1360, -- á 
+ },
+ [0x1361]={
+ ["category"]="po",
+ ["description"]="ETHIOPIC WORDSPACE",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x1361, -- á¡
+ },
+ [0x1362]={
+ ["category"]="po",
+ ["description"]="ETHIOPIC FULL STOP",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1362, -- á¢
+ },
+ [0x1363]={
+ ["category"]="po",
+ ["description"]="ETHIOPIC COMMA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1363, -- á£
+ },
+ [0x1364]={
+ ["category"]="po",
+ ["description"]="ETHIOPIC SEMICOLON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1364, -- á¤
+ },
+ [0x1365]={
+ ["category"]="po",
+ ["description"]="ETHIOPIC COLON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1365, -- á¥
+ },
+ [0x1366]={
+ ["category"]="po",
+ ["description"]="ETHIOPIC PREFACE COLON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1366, -- á¦
+ },
+ [0x1367]={
+ ["category"]="po",
+ ["description"]="ETHIOPIC QUESTION MARK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1367, -- á§
+ },
+ [0x1368]={
+ ["category"]="po",
+ ["description"]="ETHIOPIC PARAGRAPH SEPARATOR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1368, -- á¨
+ },
+ [0x1369]={
+ ["category"]="no",
+ ["description"]="ETHIOPIC DIGIT ONE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1369, -- á©
+ },
+ [0x136A]={
+ ["category"]="no",
+ ["description"]="ETHIOPIC DIGIT TWO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x136A, -- áª
+ },
+ [0x136B]={
+ ["category"]="no",
+ ["description"]="ETHIOPIC DIGIT THREE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x136B, -- á«
+ },
+ [0x136C]={
+ ["category"]="no",
+ ["description"]="ETHIOPIC DIGIT FOUR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x136C, -- á¬
+ },
+ [0x136D]={
+ ["category"]="no",
+ ["description"]="ETHIOPIC DIGIT FIVE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x136D, -- á­
+ },
+ [0x136E]={
+ ["category"]="no",
+ ["description"]="ETHIOPIC DIGIT SIX",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x136E, -- á®
+ },
+ [0x136F]={
+ ["category"]="no",
+ ["description"]="ETHIOPIC DIGIT SEVEN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x136F, -- á¯
+ },
+ [0x1370]={
+ ["category"]="no",
+ ["description"]="ETHIOPIC DIGIT EIGHT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1370, -- á°
+ },
+ [0x1371]={
+ ["category"]="no",
+ ["description"]="ETHIOPIC DIGIT NINE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1371, -- á±
+ },
+ [0x1372]={
+ ["category"]="no",
+ ["description"]="ETHIOPIC NUMBER TEN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1372, -- á²
+ },
+ [0x1373]={
+ ["category"]="no",
+ ["description"]="ETHIOPIC NUMBER TWENTY",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1373, -- á³
+ },
+ [0x1374]={
+ ["category"]="no",
+ ["description"]="ETHIOPIC NUMBER THIRTY",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1374, -- á´
+ },
+ [0x1375]={
+ ["category"]="no",
+ ["description"]="ETHIOPIC NUMBER FORTY",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1375, -- áµ
+ },
+ [0x1376]={
+ ["category"]="no",
+ ["description"]="ETHIOPIC NUMBER FIFTY",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1376, -- á¶
+ },
+ [0x1377]={
+ ["category"]="no",
+ ["description"]="ETHIOPIC NUMBER SIXTY",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1377, -- á·
+ },
+ [0x1378]={
+ ["category"]="no",
+ ["description"]="ETHIOPIC NUMBER SEVENTY",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1378, -- á¸
+ },
+ [0x1379]={
+ ["category"]="no",
+ ["description"]="ETHIOPIC NUMBER EIGHTY",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1379, -- á¹
+ },
+ [0x137A]={
+ ["category"]="no",
+ ["description"]="ETHIOPIC NUMBER NINETY",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x137A, -- áº
+ },
+ [0x137B]={
+ ["category"]="no",
+ ["description"]="ETHIOPIC NUMBER HUNDRED",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x137B, -- á»
+ },
+ [0x137C]={
+ ["category"]="no",
+ ["description"]="ETHIOPIC NUMBER TEN THOUSAND",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x137C, -- á¼
+ },
+ [0x1380]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE SEBATBEIT MWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1380, -- ᎀ
+ },
+ [0x1381]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE MWI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1381, -- áŽ
+ },
+ [0x1382]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE MWEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1382, -- ᎂ
+ },
+ [0x1383]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE MWE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1383, -- ᎃ
+ },
+ [0x1384]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE SEBATBEIT BWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1384, -- ᎄ
+ },
+ [0x1385]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE BWI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1385, -- ᎅ
+ },
+ [0x1386]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE BWEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1386, -- ᎆ
+ },
+ [0x1387]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE BWE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1387, -- ᎇ
+ },
+ [0x1388]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE SEBATBEIT FWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1388, -- ᎈ
+ },
+ [0x1389]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE FWI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1389, -- ᎉ
+ },
+ [0x138A]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE FWEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x138A, -- ᎊ
+ },
+ [0x138B]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE FWE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x138B, -- ᎋ
+ },
+ [0x138C]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE SEBATBEIT PWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x138C, -- ᎌ
+ },
+ [0x138D]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE PWI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x138D, -- áŽ
+ },
+ [0x138E]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE PWEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x138E, -- ᎎ
+ },
+ [0x138F]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE PWE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x138F, -- áŽ
+ },
+ [0x1390]={
+ ["category"]="so",
+ ["description"]="ETHIOPIC TONAL MARK YIZET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1390, -- áŽ
+ },
+ [0x1391]={
+ ["category"]="so",
+ ["description"]="ETHIOPIC TONAL MARK DERET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1391, -- ᎑
+ },
+ [0x1392]={
+ ["category"]="so",
+ ["description"]="ETHIOPIC TONAL MARK RIKRIK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1392, -- ᎒
+ },
+ [0x1393]={
+ ["category"]="so",
+ ["description"]="ETHIOPIC TONAL MARK SHORT RIKRIK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1393, -- ᎓
+ },
+ [0x1394]={
+ ["category"]="so",
+ ["description"]="ETHIOPIC TONAL MARK DIFAT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1394, -- ᎔
+ },
+ [0x1395]={
+ ["category"]="so",
+ ["description"]="ETHIOPIC TONAL MARK KENAT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1395, -- ᎕
+ },
+ [0x1396]={
+ ["category"]="so",
+ ["description"]="ETHIOPIC TONAL MARK CHIRET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1396, -- ᎖
+ },
+ [0x1397]={
+ ["category"]="so",
+ ["description"]="ETHIOPIC TONAL MARK HIDET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1397, -- ᎗
+ },
+ [0x1398]={
+ ["category"]="so",
+ ["description"]="ETHIOPIC TONAL MARK DERET-HIDET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1398, -- ᎘
+ },
+ [0x1399]={
+ ["category"]="so",
+ ["description"]="ETHIOPIC TONAL MARK KURT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1399, -- ᎙
+ },
+ [0x13A0]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13A0, -- Ꭰ
+ },
+ [0x13A1]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13A1, -- Ꭱ
+ },
+ [0x13A2]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER I",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13A2, -- Ꭲ
+ },
+ [0x13A3]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER O",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13A3, -- Ꭳ
+ },
+ [0x13A4]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER U",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13A4, -- Ꭴ
+ },
+ [0x13A5]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER V",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13A5, -- Ꭵ
+ },
+ [0x13A6]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER GA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13A6, -- Ꭶ
+ },
+ [0x13A7]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER KA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13A7, -- Ꭷ
+ },
+ [0x13A8]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER GE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13A8, -- Ꭸ
+ },
+ [0x13A9]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER GI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13A9, -- Ꭹ
+ },
+ [0x13AA]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER GO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13AA, -- Ꭺ
+ },
+ [0x13AB]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER GU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13AB, -- Ꭻ
+ },
+ [0x13AC]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER GV",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13AC, -- Ꭼ
+ },
+ [0x13AD]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER HA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13AD, -- Ꭽ
+ },
+ [0x13AE]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER HE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13AE, -- Ꭾ
+ },
+ [0x13AF]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER HI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13AF, -- Ꭿ
+ },
+ [0x13B0]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER HO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13B0, -- Ꮀ
+ },
+ [0x13B1]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER HU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13B1, -- Ꮁ
+ },
+ [0x13B2]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER HV",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13B2, -- Ꮂ
+ },
+ [0x13B3]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER LA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13B3, -- Ꮃ
+ },
+ [0x13B4]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER LE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13B4, -- Ꮄ
+ },
+ [0x13B5]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER LI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13B5, -- Ꮅ
+ },
+ [0x13B6]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER LO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13B6, -- Ꮆ
+ },
+ [0x13B7]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER LU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13B7, -- Ꮇ
+ },
+ [0x13B8]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER LV",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13B8, -- Ꮈ
+ },
+ [0x13B9]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER MA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13B9, -- Ꮉ
+ },
+ [0x13BA]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER ME",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13BA, -- Ꮊ
+ },
+ [0x13BB]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER MI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13BB, -- Ꮋ
+ },
+ [0x13BC]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER MO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13BC, -- Ꮌ
+ },
+ [0x13BD]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER MU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13BD, -- Ꮍ
+ },
+ [0x13BE]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER NA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13BE, -- Ꮎ
+ },
+ [0x13BF]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER HNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13BF, -- Ꮏ
+ },
+ [0x13C0]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER NAH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13C0, -- á€
+ },
+ [0x13C1]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER NE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13C1, -- á
+ },
+ [0x13C2]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER NI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13C2, -- á‚
+ },
+ [0x13C3]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER NO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13C3, -- áƒ
+ },
+ [0x13C4]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER NU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13C4, -- á„
+ },
+ [0x13C5]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER NV",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13C5, -- á…
+ },
+ [0x13C6]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER QUA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13C6, -- á†
+ },
+ [0x13C7]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER QUE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13C7, -- á‡
+ },
+ [0x13C8]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER QUI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13C8, -- áˆ
+ },
+ [0x13C9]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER QUO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13C9, -- á‰
+ },
+ [0x13CA]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER QUU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13CA, -- áŠ
+ },
+ [0x13CB]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER QUV",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13CB, -- á‹
+ },
+ [0x13CC]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER SA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13CC, -- áŒ
+ },
+ [0x13CD]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER S",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13CD, -- á
+ },
+ [0x13CE]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER SE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13CE, -- áŽ
+ },
+ [0x13CF]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER SI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13CF, -- á
+ },
+ [0x13D0]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER SO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13D0, -- á
+ },
+ [0x13D1]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER SU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13D1, -- á‘
+ },
+ [0x13D2]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER SV",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13D2, -- á’
+ },
+ [0x13D3]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER DA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13D3, -- á“
+ },
+ [0x13D4]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER TA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13D4, -- á”
+ },
+ [0x13D5]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER DE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13D5, -- á•
+ },
+ [0x13D6]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER TE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13D6, -- á–
+ },
+ [0x13D7]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER DI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13D7, -- á—
+ },
+ [0x13D8]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER TI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13D8, -- á˜
+ },
+ [0x13D9]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER DO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13D9, -- á™
+ },
+ [0x13DA]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER DU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13DA, -- áš
+ },
+ [0x13DB]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER DV",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13DB, -- á›
+ },
+ [0x13DC]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER DLA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13DC, -- áœ
+ },
+ [0x13DD]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER TLA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13DD, -- á
+ },
+ [0x13DE]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER TLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13DE, -- áž
+ },
+ [0x13DF]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER TLI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13DF, -- áŸ
+ },
+ [0x13E0]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER TLO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13E0, -- á 
+ },
+ [0x13E1]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER TLU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13E1, -- á¡
+ },
+ [0x13E2]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER TLV",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13E2, -- á¢
+ },
+ [0x13E3]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER TSA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13E3, -- á£
+ },
+ [0x13E4]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER TSE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13E4, -- á¤
+ },
+ [0x13E5]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER TSI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13E5, -- á¥
+ },
+ [0x13E6]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER TSO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13E6, -- á¦
+ },
+ [0x13E7]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER TSU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13E7, -- á§
+ },
+ [0x13E8]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER TSV",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13E8, -- á¨
+ },
+ [0x13E9]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER WA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13E9, -- á©
+ },
+ [0x13EA]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER WE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13EA, -- áª
+ },
+ [0x13EB]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER WI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13EB, -- á«
+ },
+ [0x13EC]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER WO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13EC, -- á¬
+ },
+ [0x13ED]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER WU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13ED, -- á­
+ },
+ [0x13EE]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER WV",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13EE, -- á®
+ },
+ [0x13EF]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER YA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13EF, -- á¯
+ },
+ [0x13F0]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER YE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13F0, -- á°
+ },
+ [0x13F1]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER YI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13F1, -- á±
+ },
+ [0x13F2]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER YO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13F2, -- á²
+ },
+ [0x13F3]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER YU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13F3, -- á³
+ },
+ [0x13F4]={
+ ["category"]="lo",
+ ["description"]="CHEROKEE LETTER YV",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x13F4, -- á´
+ },
+ [0x1401]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1401, -- á
+ },
+ [0x1402]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS AAI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1402, -- á‚
+ },
+ [0x1403]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS I",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1403, -- áƒ
+ },
+ [0x1404]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS II",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1404, -- á„
+ },
+ [0x1405]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS O",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1405, -- á…
+ },
+ [0x1406]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS OO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1406, -- á†
+ },
+ [0x1407]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS Y-CREE OO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1407, -- á‡
+ },
+ [0x1408]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER EE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1408, -- áˆ
+ },
+ [0x1409]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER I",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1409, -- á‰
+ },
+ [0x140A]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x140A, -- áŠ
+ },
+ [0x140B]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS AA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x140B, -- á‹
+ },
+ [0x140C]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x140C, -- áŒ
+ },
+ [0x140D]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE WE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x140D, -- á
+ },
+ [0x140E]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x140E, -- áŽ
+ },
+ [0x140F]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE WI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x140F, -- á
+ },
+ [0x1410]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WII",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1410, -- á
+ },
+ [0x1411]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE WII",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1411, -- á‘
+ },
+ [0x1412]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1412, -- á’
+ },
+ [0x1413]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE WO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1413, -- á“
+ },
+ [0x1414]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WOO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1414, -- á”
+ },
+ [0x1415]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE WOO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1415, -- á•
+ },
+ [0x1416]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS NASKAPI WOO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1416, -- á–
+ },
+ [0x1417]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1417, -- á—
+ },
+ [0x1418]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE WA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1418, -- á˜
+ },
+ [0x1419]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1419, -- á™
+ },
+ [0x141A]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE WAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x141A, -- áš
+ },
+ [0x141B]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS NASKAPI WAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x141B, -- á›
+ },
+ [0x141C]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS AI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x141C, -- áœ
+ },
+ [0x141D]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS Y-CREE W",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x141D, -- á
+ },
+ [0x141E]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS GLOTTAL STOP",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x141E, -- áž
+ },
+ [0x141F]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS FINAL ACUTE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x141F, -- áŸ
+ },
+ [0x1420]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS FINAL GRAVE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1420, -- á 
+ },
+ [0x1421]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS FINAL BOTTOM HALF RING",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1421, -- á¡
+ },
+ [0x1422]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS FINAL TOP HALF RING",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1422, -- á¢
+ },
+ [0x1423]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS FINAL RIGHT HALF RING",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1423, -- á£
+ },
+ [0x1424]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS FINAL RING",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1424, -- á¤
+ },
+ [0x1425]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS FINAL DOUBLE ACUTE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1425, -- á¥
+ },
+ [0x1426]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS FINAL DOUBLE SHORT VERTICAL STROKES",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1426, -- á¦
+ },
+ [0x1427]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS FINAL MIDDLE DOT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1427, -- á§
+ },
+ [0x1428]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS FINAL SHORT HORIZONTAL STROKE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1428, -- á¨
+ },
+ [0x1429]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS FINAL PLUS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1429, -- á©
+ },
+ [0x142A]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS FINAL DOWN TACK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x142A, -- áª
+ },
+ [0x142B]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS EN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x142B, -- á«
+ },
+ [0x142C]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS IN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x142C, -- á¬
+ },
+ [0x142D]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS ON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x142D, -- á­
+ },
+ [0x142E]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS AN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x142E, -- á®
+ },
+ [0x142F]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS PE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x142F, -- á¯
+ },
+ [0x1430]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS PAAI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1430, -- á°
+ },
+ [0x1431]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS PI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1431, -- á±
+ },
+ [0x1432]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS PII",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1432, -- á²
+ },
+ [0x1433]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS PO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1433, -- á³
+ },
+ [0x1434]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS POO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1434, -- á´
+ },
+ [0x1435]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS Y-CREE POO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1435, -- áµ
+ },
+ [0x1436]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER HEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1436, -- á¶
+ },
+ [0x1437]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER HI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1437, -- á·
+ },
+ [0x1438]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS PA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1438, -- á¸
+ },
+ [0x1439]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS PAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1439, -- á¹
+ },
+ [0x143A]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS PWE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x143A, -- áº
+ },
+ [0x143B]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE PWE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x143B, -- á»
+ },
+ [0x143C]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS PWI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x143C, -- á¼
+ },
+ [0x143D]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE PWI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x143D, -- á½
+ },
+ [0x143E]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS PWII",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x143E, -- á¾
+ },
+ [0x143F]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE PWII",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x143F, -- á¿
+ },
+ [0x1440]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS PWO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1440, -- á‘€
+ },
+ [0x1441]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE PWO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1441, -- á‘
+ },
+ [0x1442]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS PWOO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1442, -- á‘‚
+ },
+ [0x1443]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE PWOO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1443, -- ᑃ
+ },
+ [0x1444]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS PWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1444, -- á‘„
+ },
+ [0x1445]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE PWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1445, -- á‘…
+ },
+ [0x1446]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS PWAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1446, -- ᑆ
+ },
+ [0x1447]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE PWAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1447, -- ᑇ
+ },
+ [0x1448]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS Y-CREE PWAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1448, -- ᑈ
+ },
+ [0x1449]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS P",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1449, -- ᑉ
+ },
+ [0x144A]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE P",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x144A, -- á‘Š
+ },
+ [0x144B]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER H",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x144B, -- á‘‹
+ },
+ [0x144C]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS TE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x144C, -- ᑌ
+ },
+ [0x144D]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS TAAI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x144D, -- á‘
+ },
+ [0x144E]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS TI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x144E, -- á‘Ž
+ },
+ [0x144F]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS TII",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x144F, -- á‘
+ },
+ [0x1450]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1450, -- á‘
+ },
+ [0x1451]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS TOO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1451, -- á‘‘
+ },
+ [0x1452]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS Y-CREE TOO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1452, -- á‘’
+ },
+ [0x1453]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER DEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1453, -- á‘“
+ },
+ [0x1454]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER DI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1454, -- á‘”
+ },
+ [0x1455]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS TA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1455, -- á‘•
+ },
+ [0x1456]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS TAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1456, -- á‘–
+ },
+ [0x1457]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS TWE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1457, -- á‘—
+ },
+ [0x1458]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE TWE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1458, -- ᑘ
+ },
+ [0x1459]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS TWI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1459, -- á‘™
+ },
+ [0x145A]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE TWI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x145A, -- á‘š
+ },
+ [0x145B]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS TWII",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x145B, -- á‘›
+ },
+ [0x145C]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE TWII",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x145C, -- ᑜ
+ },
+ [0x145D]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS TWO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x145D, -- á‘
+ },
+ [0x145E]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE TWO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x145E, -- á‘ž
+ },
+ [0x145F]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS TWOO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x145F, -- á‘Ÿ
+ },
+ [0x1460]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE TWOO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1460, -- á‘ 
+ },
+ [0x1461]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS TWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1461, -- á‘¡
+ },
+ [0x1462]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE TWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1462, -- á‘¢
+ },
+ [0x1463]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS TWAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1463, -- á‘£
+ },
+ [0x1464]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE TWAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1464, -- ᑤ
+ },
+ [0x1465]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS NASKAPI TWAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1465, -- á‘¥
+ },
+ [0x1466]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS T",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1466, -- ᑦ
+ },
+ [0x1467]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS TTE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1467, -- ᑧ
+ },
+ [0x1468]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS TTI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1468, -- ᑨ
+ },
+ [0x1469]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS TTO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1469, -- á‘©
+ },
+ [0x146A]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS TTA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x146A, -- ᑪ
+ },
+ [0x146B]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS KE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x146B, -- á‘«
+ },
+ [0x146C]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS KAAI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x146C, -- ᑬ
+ },
+ [0x146D]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS KI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x146D, -- á‘­
+ },
+ [0x146E]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS KII",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x146E, -- á‘®
+ },
+ [0x146F]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS KO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x146F, -- ᑯ
+ },
+ [0x1470]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS KOO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1470, -- á‘°
+ },
+ [0x1471]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS Y-CREE KOO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1471, -- ᑱ
+ },
+ [0x1472]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS KA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1472, -- ᑲ
+ },
+ [0x1473]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS KAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1473, -- ᑳ
+ },
+ [0x1474]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS KWE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1474, -- á‘´
+ },
+ [0x1475]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE KWE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1475, -- ᑵ
+ },
+ [0x1476]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS KWI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1476, -- ᑶ
+ },
+ [0x1477]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE KWI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1477, -- á‘·
+ },
+ [0x1478]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS KWII",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1478, -- ᑸ
+ },
+ [0x1479]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE KWII",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1479, -- ᑹ
+ },
+ [0x147A]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS KWO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x147A, -- ᑺ
+ },
+ [0x147B]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE KWO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x147B, -- á‘»
+ },
+ [0x147C]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS KWOO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x147C, -- ᑼ
+ },
+ [0x147D]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE KWOO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x147D, -- ᑽ
+ },
+ [0x147E]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS KWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x147E, -- ᑾ
+ },
+ [0x147F]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE KWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x147F, -- á‘¿
+ },
+ [0x1480]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS KWAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1480, -- á’€
+ },
+ [0x1481]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE KWAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1481, -- á’
+ },
+ [0x1482]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS NASKAPI KWAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1482, -- á’‚
+ },
+ [0x1483]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS K",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1483, -- á’ƒ
+ },
+ [0x1484]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS KW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1484, -- á’„
+ },
+ [0x1485]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS SOUTH-SLAVEY KEH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1485, -- á’…
+ },
+ [0x1486]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS SOUTH-SLAVEY KIH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1486, -- á’†
+ },
+ [0x1487]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS SOUTH-SLAVEY KOH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1487, -- á’‡
+ },
+ [0x1488]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS SOUTH-SLAVEY KAH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1488, -- á’ˆ
+ },
+ [0x1489]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1489, -- á’‰
+ },
+ [0x148A]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CAAI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x148A, -- á’Š
+ },
+ [0x148B]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x148B, -- á’‹
+ },
+ [0x148C]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CII",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x148C, -- ᒌ
+ },
+ [0x148D]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x148D, -- á’
+ },
+ [0x148E]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS COO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x148E, -- á’Ž
+ },
+ [0x148F]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS Y-CREE COO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x148F, -- á’
+ },
+ [0x1490]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1490, -- á’
+ },
+ [0x1491]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1491, -- á’‘
+ },
+ [0x1492]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CWE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1492, -- á’’
+ },
+ [0x1493]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE CWE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1493, -- á’“
+ },
+ [0x1494]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CWI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1494, -- á’”
+ },
+ [0x1495]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE CWI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1495, -- á’•
+ },
+ [0x1496]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CWII",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1496, -- á’–
+ },
+ [0x1497]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE CWII",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1497, -- á’—
+ },
+ [0x1498]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CWO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1498, -- á’˜
+ },
+ [0x1499]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE CWO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1499, -- á’™
+ },
+ [0x149A]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CWOO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x149A, -- á’š
+ },
+ [0x149B]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE CWOO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x149B, -- á’›
+ },
+ [0x149C]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x149C, -- ᒜ
+ },
+ [0x149D]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE CWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x149D, -- á’
+ },
+ [0x149E]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CWAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x149E, -- á’ž
+ },
+ [0x149F]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE CWAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x149F, -- á’Ÿ
+ },
+ [0x14A0]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS NASKAPI CWAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14A0, -- á’ 
+ },
+ [0x14A1]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS C",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14A1, -- á’¡
+ },
+ [0x14A2]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS SAYISI TH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14A2, -- á’¢
+ },
+ [0x14A3]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS ME",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14A3, -- á’£
+ },
+ [0x14A4]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS MAAI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14A4, -- á’¤
+ },
+ [0x14A5]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS MI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14A5, -- á’¥
+ },
+ [0x14A6]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS MII",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14A6, -- á’¦
+ },
+ [0x14A7]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS MO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14A7, -- á’§
+ },
+ [0x14A8]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS MOO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14A8, -- á’¨
+ },
+ [0x14A9]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS Y-CREE MOO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14A9, -- á’©
+ },
+ [0x14AA]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS MA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14AA, -- á’ª
+ },
+ [0x14AB]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS MAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14AB, -- á’«
+ },
+ [0x14AC]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS MWE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14AC, -- á’¬
+ },
+ [0x14AD]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE MWE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14AD, -- á’­
+ },
+ [0x14AE]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS MWI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14AE, -- á’®
+ },
+ [0x14AF]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE MWI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14AF, -- á’¯
+ },
+ [0x14B0]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS MWII",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14B0, -- á’°
+ },
+ [0x14B1]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE MWII",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14B1, -- á’±
+ },
+ [0x14B2]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS MWO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14B2, -- á’²
+ },
+ [0x14B3]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE MWO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14B3, -- á’³
+ },
+ [0x14B4]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS MWOO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14B4, -- á’´
+ },
+ [0x14B5]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE MWOO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14B5, -- á’µ
+ },
+ [0x14B6]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS MWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14B6, -- á’¶
+ },
+ [0x14B7]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE MWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14B7, -- á’·
+ },
+ [0x14B8]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS MWAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14B8, -- á’¸
+ },
+ [0x14B9]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE MWAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14B9, -- á’¹
+ },
+ [0x14BA]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS NASKAPI MWAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14BA, -- á’º
+ },
+ [0x14BB]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS M",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14BB, -- á’»
+ },
+ [0x14BC]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE M",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14BC, -- á’¼
+ },
+ [0x14BD]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS MH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14BD, -- á’½
+ },
+ [0x14BE]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS ATHAPASCAN M",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14BE, -- á’¾
+ },
+ [0x14BF]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS SAYISI M",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14BF, -- á’¿
+ },
+ [0x14C0]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS NE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14C0, -- á“€
+ },
+ [0x14C1]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS NAAI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14C1, -- á“
+ },
+ [0x14C2]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS NI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14C2, -- á“‚
+ },
+ [0x14C3]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS NII",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14C3, -- ᓃ
+ },
+ [0x14C4]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS NO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14C4, -- á“„
+ },
+ [0x14C5]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS NOO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14C5, -- á“…
+ },
+ [0x14C6]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS Y-CREE NOO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14C6, -- ᓆ
+ },
+ [0x14C7]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS NA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14C7, -- ᓇ
+ },
+ [0x14C8]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS NAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14C8, -- ᓈ
+ },
+ [0x14C9]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS NWE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14C9, -- ᓉ
+ },
+ [0x14CA]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE NWE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14CA, -- á“Š
+ },
+ [0x14CB]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS NWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14CB, -- á“‹
+ },
+ [0x14CC]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE NWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14CC, -- ᓌ
+ },
+ [0x14CD]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS NWAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14CD, -- á“
+ },
+ [0x14CE]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE NWAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14CE, -- á“Ž
+ },
+ [0x14CF]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS NASKAPI NWAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14CF, -- á“
+ },
+ [0x14D0]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS N",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14D0, -- á“
+ },
+ [0x14D1]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER NG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14D1, -- á“‘
+ },
+ [0x14D2]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS NH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14D2, -- á“’
+ },
+ [0x14D3]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS LE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14D3, -- á““
+ },
+ [0x14D4]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS LAAI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14D4, -- á“”
+ },
+ [0x14D5]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS LI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14D5, -- á“•
+ },
+ [0x14D6]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS LII",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14D6, -- á“–
+ },
+ [0x14D7]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS LO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14D7, -- á“—
+ },
+ [0x14D8]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS LOO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14D8, -- ᓘ
+ },
+ [0x14D9]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS Y-CREE LOO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14D9, -- á“™
+ },
+ [0x14DA]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS LA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14DA, -- á“š
+ },
+ [0x14DB]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS LAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14DB, -- á“›
+ },
+ [0x14DC]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS LWE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14DC, -- ᓜ
+ },
+ [0x14DD]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE LWE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14DD, -- á“
+ },
+ [0x14DE]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS LWI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14DE, -- á“ž
+ },
+ [0x14DF]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE LWI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14DF, -- á“Ÿ
+ },
+ [0x14E0]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS LWII",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14E0, -- á“ 
+ },
+ [0x14E1]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE LWII",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14E1, -- á“¡
+ },
+ [0x14E2]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS LWO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14E2, -- á“¢
+ },
+ [0x14E3]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE LWO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14E3, -- á“£
+ },
+ [0x14E4]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS LWOO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14E4, -- ᓤ
+ },
+ [0x14E5]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE LWOO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14E5, -- á“¥
+ },
+ [0x14E6]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS LWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14E6, -- ᓦ
+ },
+ [0x14E7]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE LWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14E7, -- ᓧ
+ },
+ [0x14E8]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS LWAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14E8, -- ᓨ
+ },
+ [0x14E9]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE LWAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14E9, -- á“©
+ },
+ [0x14EA]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS L",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14EA, -- ᓪ
+ },
+ [0x14EB]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE L",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14EB, -- á“«
+ },
+ [0x14EC]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS MEDIAL L",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14EC, -- ᓬ
+ },
+ [0x14ED]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS SE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14ED, -- á“­
+ },
+ [0x14EE]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS SAAI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14EE, -- á“®
+ },
+ [0x14EF]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS SI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14EF, -- ᓯ
+ },
+ [0x14F0]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS SII",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14F0, -- á“°
+ },
+ [0x14F1]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS SO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14F1, -- ᓱ
+ },
+ [0x14F2]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS SOO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14F2, -- ᓲ
+ },
+ [0x14F3]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS Y-CREE SOO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14F3, -- ᓳ
+ },
+ [0x14F4]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS SA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14F4, -- á“´
+ },
+ [0x14F5]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS SAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14F5, -- ᓵ
+ },
+ [0x14F6]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS SWE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14F6, -- ᓶ
+ },
+ [0x14F7]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE SWE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14F7, -- á“·
+ },
+ [0x14F8]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS SWI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14F8, -- ᓸ
+ },
+ [0x14F9]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE SWI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14F9, -- ᓹ
+ },
+ [0x14FA]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS SWII",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14FA, -- ᓺ
+ },
+ [0x14FB]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE SWII",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14FB, -- á“»
+ },
+ [0x14FC]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS SWO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14FC, -- ᓼ
+ },
+ [0x14FD]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE SWO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14FD, -- ᓽ
+ },
+ [0x14FE]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS SWOO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14FE, -- ᓾ
+ },
+ [0x14FF]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE SWOO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x14FF, -- á“¿
+ },
+ [0x1500]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS SWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1500, -- ᔀ
+ },
+ [0x1501]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE SWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1501, -- á”
+ },
+ [0x1502]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS SWAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1502, -- ᔂ
+ },
+ [0x1503]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE SWAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1503, -- ᔃ
+ },
+ [0x1504]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS NASKAPI SWAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1504, -- ᔄ
+ },
+ [0x1505]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS S",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1505, -- á”…
+ },
+ [0x1506]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS ATHAPASCAN S",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1506, -- ᔆ
+ },
+ [0x1507]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS SW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1507, -- ᔇ
+ },
+ [0x1508]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS BLACKFOOT S",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1508, -- ᔈ
+ },
+ [0x1509]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS MOOSE-CREE SK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1509, -- ᔉ
+ },
+ [0x150A]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS NASKAPI SKW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x150A, -- ᔊ
+ },
+ [0x150B]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS NASKAPI S-W",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x150B, -- ᔋ
+ },
+ [0x150C]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS NASKAPI SPWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x150C, -- ᔌ
+ },
+ [0x150D]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS NASKAPI STWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x150D, -- á”
+ },
+ [0x150E]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS NASKAPI SKWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x150E, -- ᔎ
+ },
+ [0x150F]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS NASKAPI SCWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x150F, -- á”
+ },
+ [0x1510]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS SHE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1510, -- á”
+ },
+ [0x1511]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS SHI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1511, -- ᔑ
+ },
+ [0x1512]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS SHII",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1512, -- á”’
+ },
+ [0x1513]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS SHO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1513, -- ᔓ
+ },
+ [0x1514]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS SHOO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1514, -- á””
+ },
+ [0x1515]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS SHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1515, -- ᔕ
+ },
+ [0x1516]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS SHAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1516, -- á”–
+ },
+ [0x1517]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS SHWE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1517, -- á”—
+ },
+ [0x1518]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE SHWE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1518, -- ᔘ
+ },
+ [0x1519]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS SHWI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1519, -- á”™
+ },
+ [0x151A]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE SHWI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x151A, -- ᔚ
+ },
+ [0x151B]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS SHWII",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x151B, -- á”›
+ },
+ [0x151C]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE SHWII",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x151C, -- ᔜ
+ },
+ [0x151D]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS SHWO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x151D, -- á”
+ },
+ [0x151E]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE SHWO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x151E, -- ᔞ
+ },
+ [0x151F]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS SHWOO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x151F, -- ᔟ
+ },
+ [0x1520]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE SHWOO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1520, -- á” 
+ },
+ [0x1521]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS SHWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1521, -- ᔡ
+ },
+ [0x1522]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE SHWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1522, -- ᔢ
+ },
+ [0x1523]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS SHWAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1523, -- ᔣ
+ },
+ [0x1524]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE SHWAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1524, -- ᔤ
+ },
+ [0x1525]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS SH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1525, -- ᔥ
+ },
+ [0x1526]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS YE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1526, -- ᔦ
+ },
+ [0x1527]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS YAAI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1527, -- ᔧ
+ },
+ [0x1528]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS YI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1528, -- ᔨ
+ },
+ [0x1529]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS YII",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1529, -- ᔩ
+ },
+ [0x152A]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS YO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x152A, -- ᔪ
+ },
+ [0x152B]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS YOO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x152B, -- ᔫ
+ },
+ [0x152C]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS Y-CREE YOO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x152C, -- ᔬ
+ },
+ [0x152D]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS YA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x152D, -- á”­
+ },
+ [0x152E]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS YAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x152E, -- á”®
+ },
+ [0x152F]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS YWE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x152F, -- ᔯ
+ },
+ [0x1530]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE YWE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1530, -- á”°
+ },
+ [0x1531]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS YWI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1531, -- á”±
+ },
+ [0x1532]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE YWI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1532, -- ᔲ
+ },
+ [0x1533]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS YWII",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1533, -- ᔳ
+ },
+ [0x1534]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE YWII",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1534, -- á”´
+ },
+ [0x1535]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS YWO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1535, -- ᔵ
+ },
+ [0x1536]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE YWO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1536, -- ᔶ
+ },
+ [0x1537]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS YWOO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1537, -- á”·
+ },
+ [0x1538]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE YWOO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1538, -- ᔸ
+ },
+ [0x1539]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS YWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1539, -- ᔹ
+ },
+ [0x153A]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE YWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x153A, -- ᔺ
+ },
+ [0x153B]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS YWAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x153B, -- á”»
+ },
+ [0x153C]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE YWAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x153C, -- ᔼ
+ },
+ [0x153D]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS NASKAPI YWAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x153D, -- ᔽ
+ },
+ [0x153E]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS Y",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x153E, -- ᔾ
+ },
+ [0x153F]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS BIBLE-CREE Y",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x153F, -- ᔿ
+ },
+ [0x1540]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE Y",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1540, -- á•€
+ },
+ [0x1541]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS SAYISI YI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1541, -- á•
+ },
+ [0x1542]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS RE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1542, -- á•‚
+ },
+ [0x1543]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS R-CREE RE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1543, -- ᕃ
+ },
+ [0x1544]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE LE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1544, -- á•„
+ },
+ [0x1545]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS RAAI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1545, -- á•…
+ },
+ [0x1546]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS RI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1546, -- ᕆ
+ },
+ [0x1547]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS RII",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1547, -- ᕇ
+ },
+ [0x1548]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS RO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1548, -- ᕈ
+ },
+ [0x1549]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS ROO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1549, -- ᕉ
+ },
+ [0x154A]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE LO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x154A, -- á•Š
+ },
+ [0x154B]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS RA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x154B, -- á•‹
+ },
+ [0x154C]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS RAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x154C, -- ᕌ
+ },
+ [0x154D]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE LA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x154D, -- á•
+ },
+ [0x154E]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS RWAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x154E, -- á•Ž
+ },
+ [0x154F]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE RWAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x154F, -- á•
+ },
+ [0x1550]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS R",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1550, -- á•
+ },
+ [0x1551]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE R",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1551, -- á•‘
+ },
+ [0x1552]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS MEDIAL R",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1552, -- á•’
+ },
+ [0x1553]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS FE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1553, -- á•“
+ },
+ [0x1554]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS FAAI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1554, -- á•”
+ },
+ [0x1555]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS FI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1555, -- á••
+ },
+ [0x1556]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS FII",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1556, -- á•–
+ },
+ [0x1557]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS FO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1557, -- á•—
+ },
+ [0x1558]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS FOO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1558, -- ᕘ
+ },
+ [0x1559]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS FA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1559, -- á•™
+ },
+ [0x155A]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS FAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x155A, -- á•š
+ },
+ [0x155B]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS FWAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x155B, -- á•›
+ },
+ [0x155C]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE FWAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x155C, -- ᕜ
+ },
+ [0x155D]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS F",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x155D, -- á•
+ },
+ [0x155E]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS THE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x155E, -- á•ž
+ },
+ [0x155F]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS N-CREE THE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x155F, -- á•Ÿ
+ },
+ [0x1560]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS THI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1560, -- á• 
+ },
+ [0x1561]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS N-CREE THI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1561, -- á•¡
+ },
+ [0x1562]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS THII",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1562, -- á•¢
+ },
+ [0x1563]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS N-CREE THII",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1563, -- á•£
+ },
+ [0x1564]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS THO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1564, -- ᕤ
+ },
+ [0x1565]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS THOO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1565, -- á•¥
+ },
+ [0x1566]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS THA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1566, -- ᕦ
+ },
+ [0x1567]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS THAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1567, -- ᕧ
+ },
+ [0x1568]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS THWAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1568, -- ᕨ
+ },
+ [0x1569]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE THWAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1569, -- á•©
+ },
+ [0x156A]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS TH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x156A, -- ᕪ
+ },
+ [0x156B]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS TTHE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x156B, -- á•«
+ },
+ [0x156C]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS TTHI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x156C, -- ᕬ
+ },
+ [0x156D]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS TTHO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x156D, -- á•­
+ },
+ [0x156E]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS TTHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x156E, -- á•®
+ },
+ [0x156F]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS TTH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x156F, -- ᕯ
+ },
+ [0x1570]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS TYE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1570, -- á•°
+ },
+ [0x1571]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS TYI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1571, -- ᕱ
+ },
+ [0x1572]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS TYO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1572, -- ᕲ
+ },
+ [0x1573]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS TYA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1573, -- ᕳ
+ },
+ [0x1574]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS NUNAVIK HE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1574, -- á•´
+ },
+ [0x1575]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS NUNAVIK HI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1575, -- ᕵ
+ },
+ [0x1576]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS NUNAVIK HII",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1576, -- ᕶ
+ },
+ [0x1577]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS NUNAVIK HO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1577, -- á•·
+ },
+ [0x1578]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS NUNAVIK HOO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1578, -- ᕸ
+ },
+ [0x1579]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS NUNAVIK HA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1579, -- ᕹ
+ },
+ [0x157A]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS NUNAVIK HAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x157A, -- ᕺ
+ },
+ [0x157B]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS NUNAVIK H",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x157B, -- á•»
+ },
+ [0x157C]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS NUNAVUT H",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x157C, -- ᕼ
+ },
+ [0x157D]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS HK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x157D, -- ᕽ
+ },
+ [0x157E]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS QAAI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x157E, -- ᕾ
+ },
+ [0x157F]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS QI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x157F, -- á•¿
+ },
+ [0x1580]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS QII",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1580, -- á–€
+ },
+ [0x1581]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS QO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1581, -- á–
+ },
+ [0x1582]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS QOO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1582, -- á–‚
+ },
+ [0x1583]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS QA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1583, -- á–ƒ
+ },
+ [0x1584]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS QAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1584, -- á–„
+ },
+ [0x1585]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS Q",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1585, -- á–…
+ },
+ [0x1586]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS TLHE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1586, -- á–†
+ },
+ [0x1587]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS TLHI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1587, -- á–‡
+ },
+ [0x1588]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS TLHO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1588, -- á–ˆ
+ },
+ [0x1589]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS TLHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1589, -- á–‰
+ },
+ [0x158A]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE RE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x158A, -- á–Š
+ },
+ [0x158B]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE RI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x158B, -- á–‹
+ },
+ [0x158C]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE RO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x158C, -- ᖌ
+ },
+ [0x158D]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WEST-CREE RA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x158D, -- á–
+ },
+ [0x158E]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS NGAAI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x158E, -- á–Ž
+ },
+ [0x158F]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS NGI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x158F, -- á–
+ },
+ [0x1590]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS NGII",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1590, -- á–
+ },
+ [0x1591]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS NGO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1591, -- á–‘
+ },
+ [0x1592]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS NGOO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1592, -- á–’
+ },
+ [0x1593]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS NGA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1593, -- á–“
+ },
+ [0x1594]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS NGAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1594, -- á–”
+ },
+ [0x1595]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS NG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1595, -- á–•
+ },
+ [0x1596]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS NNG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1596, -- á––
+ },
+ [0x1597]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS SAYISI SHE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1597, -- á–—
+ },
+ [0x1598]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS SAYISI SHI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1598, -- á–˜
+ },
+ [0x1599]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS SAYISI SHO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1599, -- á–™
+ },
+ [0x159A]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS SAYISI SHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x159A, -- á–š
+ },
+ [0x159B]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WOODS-CREE THE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x159B, -- á–›
+ },
+ [0x159C]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WOODS-CREE THI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x159C, -- ᖜ
+ },
+ [0x159D]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WOODS-CREE THO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x159D, -- á–
+ },
+ [0x159E]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WOODS-CREE THA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x159E, -- á–ž
+ },
+ [0x159F]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS WOODS-CREE TH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x159F, -- á–Ÿ
+ },
+ [0x15A0]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS LHI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15A0, -- á– 
+ },
+ [0x15A1]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS LHII",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15A1, -- á–¡
+ },
+ [0x15A2]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS LHO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15A2, -- á–¢
+ },
+ [0x15A3]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS LHOO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15A3, -- á–£
+ },
+ [0x15A4]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS LHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15A4, -- á–¤
+ },
+ [0x15A5]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS LHAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15A5, -- á–¥
+ },
+ [0x15A6]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS LH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15A6, -- á–¦
+ },
+ [0x15A7]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS TH-CREE THE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15A7, -- á–§
+ },
+ [0x15A8]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS TH-CREE THI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15A8, -- á–¨
+ },
+ [0x15A9]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS TH-CREE THII",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15A9, -- á–©
+ },
+ [0x15AA]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS TH-CREE THO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15AA, -- á–ª
+ },
+ [0x15AB]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS TH-CREE THOO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15AB, -- á–«
+ },
+ [0x15AC]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS TH-CREE THA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15AC, -- á–¬
+ },
+ [0x15AD]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS TH-CREE THAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15AD, -- á–­
+ },
+ [0x15AE]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS TH-CREE TH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15AE, -- á–®
+ },
+ [0x15AF]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS AIVILIK B",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15AF, -- á–¯
+ },
+ [0x15B0]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS BLACKFOOT E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15B0, -- á–°
+ },
+ [0x15B1]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS BLACKFOOT I",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15B1, -- á–±
+ },
+ [0x15B2]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS BLACKFOOT O",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15B2, -- á–²
+ },
+ [0x15B3]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS BLACKFOOT A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15B3, -- á–³
+ },
+ [0x15B4]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS BLACKFOOT WE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15B4, -- á–´
+ },
+ [0x15B5]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS BLACKFOOT WI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15B5, -- á–µ
+ },
+ [0x15B6]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS BLACKFOOT WO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15B6, -- á–¶
+ },
+ [0x15B7]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS BLACKFOOT WA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15B7, -- á–·
+ },
+ [0x15B8]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS BLACKFOOT NE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15B8, -- á–¸
+ },
+ [0x15B9]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS BLACKFOOT NI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15B9, -- á–¹
+ },
+ [0x15BA]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS BLACKFOOT NO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15BA, -- á–º
+ },
+ [0x15BB]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS BLACKFOOT NA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15BB, -- á–»
+ },
+ [0x15BC]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS BLACKFOOT KE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15BC, -- á–¼
+ },
+ [0x15BD]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS BLACKFOOT KI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15BD, -- á–½
+ },
+ [0x15BE]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS BLACKFOOT KO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15BE, -- á–¾
+ },
+ [0x15BF]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS BLACKFOOT KA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15BF, -- á–¿
+ },
+ [0x15C0]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS SAYISI HE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15C0, -- á—€
+ },
+ [0x15C1]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS SAYISI HI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15C1, -- á—
+ },
+ [0x15C2]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS SAYISI HO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15C2, -- á—‚
+ },
+ [0x15C3]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS SAYISI HA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15C3, -- á—ƒ
+ },
+ [0x15C4]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER GHU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15C4, -- á—„
+ },
+ [0x15C5]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER GHO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15C5, -- á—…
+ },
+ [0x15C6]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER GHE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15C6, -- á—†
+ },
+ [0x15C7]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER GHEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15C7, -- á—‡
+ },
+ [0x15C8]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER GHI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15C8, -- á—ˆ
+ },
+ [0x15C9]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER GHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15C9, -- á—‰
+ },
+ [0x15CA]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER RU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15CA, -- á—Š
+ },
+ [0x15CB]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER RO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15CB, -- á—‹
+ },
+ [0x15CC]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER RE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15CC, -- ᗌ
+ },
+ [0x15CD]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER REE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15CD, -- á—
+ },
+ [0x15CE]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER RI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15CE, -- á—Ž
+ },
+ [0x15CF]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER RA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15CF, -- á—
+ },
+ [0x15D0]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER WU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15D0, -- á—
+ },
+ [0x15D1]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER WO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15D1, -- á—‘
+ },
+ [0x15D2]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER WE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15D2, -- á—’
+ },
+ [0x15D3]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER WEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15D3, -- á—“
+ },
+ [0x15D4]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER WI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15D4, -- á—”
+ },
+ [0x15D5]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER WA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15D5, -- á—•
+ },
+ [0x15D6]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER HWU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15D6, -- á—–
+ },
+ [0x15D7]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER HWO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15D7, -- á——
+ },
+ [0x15D8]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER HWE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15D8, -- á—˜
+ },
+ [0x15D9]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER HWEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15D9, -- á—™
+ },
+ [0x15DA]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER HWI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15DA, -- á—š
+ },
+ [0x15DB]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER HWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15DB, -- á—›
+ },
+ [0x15DC]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER THU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15DC, -- ᗜ
+ },
+ [0x15DD]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER THO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15DD, -- á—
+ },
+ [0x15DE]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER THE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15DE, -- á—ž
+ },
+ [0x15DF]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER THEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15DF, -- á—Ÿ
+ },
+ [0x15E0]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER THI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15E0, -- á— 
+ },
+ [0x15E1]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER THA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15E1, -- á—¡
+ },
+ [0x15E2]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER TTU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15E2, -- á—¢
+ },
+ [0x15E3]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER TTO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15E3, -- á—£
+ },
+ [0x15E4]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER TTE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15E4, -- á—¤
+ },
+ [0x15E5]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER TTEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15E5, -- á—¥
+ },
+ [0x15E6]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER TTI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15E6, -- á—¦
+ },
+ [0x15E7]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER TTA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15E7, -- á—§
+ },
+ [0x15E8]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER PU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15E8, -- á—¨
+ },
+ [0x15E9]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER PO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15E9, -- á—©
+ },
+ [0x15EA]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER PE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15EA, -- á—ª
+ },
+ [0x15EB]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER PEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15EB, -- á—«
+ },
+ [0x15EC]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER PI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15EC, -- á—¬
+ },
+ [0x15ED]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER PA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15ED, -- á—­
+ },
+ [0x15EE]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER P",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15EE, -- á—®
+ },
+ [0x15EF]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER GU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15EF, -- á—¯
+ },
+ [0x15F0]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER GO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15F0, -- á—°
+ },
+ [0x15F1]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER GE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15F1, -- á—±
+ },
+ [0x15F2]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER GEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15F2, -- á—²
+ },
+ [0x15F3]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER GI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15F3, -- á—³
+ },
+ [0x15F4]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER GA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15F4, -- á—´
+ },
+ [0x15F5]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER KHU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15F5, -- á—µ
+ },
+ [0x15F6]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER KHO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15F6, -- á—¶
+ },
+ [0x15F7]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER KHE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15F7, -- á—·
+ },
+ [0x15F8]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER KHEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15F8, -- á—¸
+ },
+ [0x15F9]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER KHI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15F9, -- á—¹
+ },
+ [0x15FA]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER KHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15FA, -- á—º
+ },
+ [0x15FB]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER KKU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15FB, -- á—»
+ },
+ [0x15FC]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER KKO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15FC, -- á—¼
+ },
+ [0x15FD]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER KKE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15FD, -- á—½
+ },
+ [0x15FE]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER KKEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15FE, -- á—¾
+ },
+ [0x15FF]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER KKI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x15FF, -- á—¿
+ },
+ [0x1600]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER KKA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1600, -- ᘀ
+ },
+ [0x1601]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER KK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1601, -- á˜
+ },
+ [0x1602]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER NU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1602, -- ᘂ
+ },
+ [0x1603]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER NO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1603, -- ᘃ
+ },
+ [0x1604]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER NE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1604, -- ᘄ
+ },
+ [0x1605]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER NEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1605, -- ᘅ
+ },
+ [0x1606]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER NI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1606, -- ᘆ
+ },
+ [0x1607]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER NA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1607, -- ᘇ
+ },
+ [0x1608]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER MU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1608, -- ᘈ
+ },
+ [0x1609]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER MO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1609, -- ᘉ
+ },
+ [0x160A]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER ME",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x160A, -- ᘊ
+ },
+ [0x160B]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER MEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x160B, -- ᘋ
+ },
+ [0x160C]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER MI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x160C, -- ᘌ
+ },
+ [0x160D]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER MA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x160D, -- á˜
+ },
+ [0x160E]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER YU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x160E, -- ᘎ
+ },
+ [0x160F]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER YO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x160F, -- á˜
+ },
+ [0x1610]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER YE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1610, -- á˜
+ },
+ [0x1611]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER YEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1611, -- ᘑ
+ },
+ [0x1612]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER YI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1612, -- ᘒ
+ },
+ [0x1613]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER YA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1613, -- ᘓ
+ },
+ [0x1614]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER JU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1614, -- ᘔ
+ },
+ [0x1615]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS SAYISI JU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1615, -- ᘕ
+ },
+ [0x1616]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER JO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1616, -- ᘖ
+ },
+ [0x1617]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER JE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1617, -- ᘗ
+ },
+ [0x1618]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER JEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1618, -- ᘘ
+ },
+ [0x1619]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER JI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1619, -- ᘙ
+ },
+ [0x161A]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS SAYISI JI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x161A, -- ᘚ
+ },
+ [0x161B]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER JA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x161B, -- ᘛ
+ },
+ [0x161C]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER JJU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x161C, -- ᘜ
+ },
+ [0x161D]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER JJO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x161D, -- á˜
+ },
+ [0x161E]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER JJE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x161E, -- ᘞ
+ },
+ [0x161F]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER JJEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x161F, -- ᘟ
+ },
+ [0x1620]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER JJI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1620, -- ᘠ
+ },
+ [0x1621]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER JJA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1621, -- ᘡ
+ },
+ [0x1622]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER LU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1622, -- ᘢ
+ },
+ [0x1623]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER LO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1623, -- ᘣ
+ },
+ [0x1624]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER LE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1624, -- ᘤ
+ },
+ [0x1625]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER LEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1625, -- ᘥ
+ },
+ [0x1626]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER LI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1626, -- ᘦ
+ },
+ [0x1627]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER LA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1627, -- ᘧ
+ },
+ [0x1628]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER DLU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1628, -- ᘨ
+ },
+ [0x1629]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER DLO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1629, -- ᘩ
+ },
+ [0x162A]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER DLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x162A, -- ᘪ
+ },
+ [0x162B]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER DLEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x162B, -- ᘫ
+ },
+ [0x162C]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER DLI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x162C, -- ᘬ
+ },
+ [0x162D]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER DLA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x162D, -- ᘭ
+ },
+ [0x162E]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER LHU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x162E, -- ᘮ
+ },
+ [0x162F]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER LHO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x162F, -- ᘯ
+ },
+ [0x1630]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER LHE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1630, -- ᘰ
+ },
+ [0x1631]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER LHEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1631, -- ᘱ
+ },
+ [0x1632]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER LHI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1632, -- ᘲ
+ },
+ [0x1633]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER LHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1633, -- ᘳ
+ },
+ [0x1634]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER TLHU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1634, -- ᘴ
+ },
+ [0x1635]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER TLHO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1635, -- ᘵ
+ },
+ [0x1636]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER TLHE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1636, -- ᘶ
+ },
+ [0x1637]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER TLHEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1637, -- ᘷ
+ },
+ [0x1638]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER TLHI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1638, -- ᘸ
+ },
+ [0x1639]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER TLHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1639, -- ᘹ
+ },
+ [0x163A]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER TLU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x163A, -- ᘺ
+ },
+ [0x163B]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER TLO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x163B, -- ᘻ
+ },
+ [0x163C]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER TLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x163C, -- ᘼ
+ },
+ [0x163D]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER TLEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x163D, -- ᘽ
+ },
+ [0x163E]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER TLI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x163E, -- ᘾ
+ },
+ [0x163F]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER TLA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x163F, -- ᘿ
+ },
+ [0x1640]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER ZU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1640, -- ᙀ
+ },
+ [0x1641]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER ZO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1641, -- á™
+ },
+ [0x1642]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER ZE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1642, -- ᙂ
+ },
+ [0x1643]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER ZEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1643, -- ᙃ
+ },
+ [0x1644]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER ZI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1644, -- ᙄ
+ },
+ [0x1645]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER ZA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1645, -- á™…
+ },
+ [0x1646]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER Z",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1646, -- ᙆ
+ },
+ [0x1647]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER INITIAL Z",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1647, -- ᙇ
+ },
+ [0x1648]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER DZU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1648, -- ᙈ
+ },
+ [0x1649]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER DZO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1649, -- ᙉ
+ },
+ [0x164A]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER DZE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x164A, -- ᙊ
+ },
+ [0x164B]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER DZEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x164B, -- ᙋ
+ },
+ [0x164C]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER DZI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x164C, -- ᙌ
+ },
+ [0x164D]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER DZA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x164D, -- á™
+ },
+ [0x164E]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER SU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x164E, -- ᙎ
+ },
+ [0x164F]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER SO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x164F, -- á™
+ },
+ [0x1650]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER SE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1650, -- á™
+ },
+ [0x1651]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER SEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1651, -- ᙑ
+ },
+ [0x1652]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER SI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1652, -- á™’
+ },
+ [0x1653]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER SA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1653, -- ᙓ
+ },
+ [0x1654]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER SHU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1654, -- á™”
+ },
+ [0x1655]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER SHO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1655, -- ᙕ
+ },
+ [0x1656]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER SHE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1656, -- á™–
+ },
+ [0x1657]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER SHEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1657, -- á™—
+ },
+ [0x1658]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER SHI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1658, -- ᙘ
+ },
+ [0x1659]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER SHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1659, -- á™™
+ },
+ [0x165A]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER SH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x165A, -- ᙚ
+ },
+ [0x165B]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER TSU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x165B, -- á™›
+ },
+ [0x165C]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER TSO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x165C, -- ᙜ
+ },
+ [0x165D]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER TSE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x165D, -- á™
+ },
+ [0x165E]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER TSEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x165E, -- ᙞ
+ },
+ [0x165F]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER TSI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x165F, -- ᙟ
+ },
+ [0x1660]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER TSA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1660, -- á™ 
+ },
+ [0x1661]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER CHU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1661, -- ᙡ
+ },
+ [0x1662]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER CHO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1662, -- ᙢ
+ },
+ [0x1663]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER CHE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1663, -- ᙣ
+ },
+ [0x1664]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER CHEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1664, -- ᙤ
+ },
+ [0x1665]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER CHI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1665, -- ᙥ
+ },
+ [0x1666]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER CHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1666, -- ᙦ
+ },
+ [0x1667]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER TTSU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1667, -- ᙧ
+ },
+ [0x1668]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER TTSO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1668, -- ᙨ
+ },
+ [0x1669]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER TTSE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1669, -- ᙩ
+ },
+ [0x166A]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER TTSEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x166A, -- ᙪ
+ },
+ [0x166B]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER TTSI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x166B, -- ᙫ
+ },
+ [0x166C]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS CARRIER TTSA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x166C, -- ᙬ
+ },
+ [0x166D]={
+ ["category"]="po",
+ ["description"]="CANADIAN SYLLABICS CHI SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x166D, -- á™­
+ },
+ [0x166E]={
+ ["category"]="po",
+ ["description"]="CANADIAN SYLLABICS FULL STOP",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x166E, -- á™®
+ },
+ [0x166F]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS QAI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x166F, -- ᙯ
+ },
+ [0x1670]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS NGAI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1670, -- á™°
+ },
+ [0x1671]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS NNGI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1671, -- á™±
+ },
+ [0x1672]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS NNGII",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1672, -- ᙲ
+ },
+ [0x1673]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS NNGO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1673, -- ᙳ
+ },
+ [0x1674]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS NNGOO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1674, -- á™´
+ },
+ [0x1675]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS NNGA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1675, -- ᙵ
+ },
+ [0x1676]={
+ ["category"]="lo",
+ ["description"]="CANADIAN SYLLABICS NNGAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1676, -- ᙶ
+ },
+ [0x1680]={
+ ["category"]="zs",
+ ["description"]="OGHAM SPACE MARK",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x1680, --  
+ },
+ [0x1681]={
+ ["category"]="lo",
+ ["description"]="OGHAM LETTER BEITH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1681, -- áš
+ },
+ [0x1682]={
+ ["category"]="lo",
+ ["description"]="OGHAM LETTER LUIS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1682, -- áš‚
+ },
+ [0x1683]={
+ ["category"]="lo",
+ ["description"]="OGHAM LETTER FEARN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1683, -- ᚃ
+ },
+ [0x1684]={
+ ["category"]="lo",
+ ["description"]="OGHAM LETTER SAIL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1684, -- áš„
+ },
+ [0x1685]={
+ ["category"]="lo",
+ ["description"]="OGHAM LETTER NION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1685, -- áš…
+ },
+ [0x1686]={
+ ["category"]="lo",
+ ["description"]="OGHAM LETTER UATH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1686, -- ᚆ
+ },
+ [0x1687]={
+ ["category"]="lo",
+ ["description"]="OGHAM LETTER DAIR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1687, -- ᚇ
+ },
+ [0x1688]={
+ ["category"]="lo",
+ ["description"]="OGHAM LETTER TINNE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1688, -- ᚈ
+ },
+ [0x1689]={
+ ["category"]="lo",
+ ["description"]="OGHAM LETTER COLL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1689, -- ᚉ
+ },
+ [0x168A]={
+ ["category"]="lo",
+ ["description"]="OGHAM LETTER CEIRT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x168A, -- ᚊ
+ },
+ [0x168B]={
+ ["category"]="lo",
+ ["description"]="OGHAM LETTER MUIN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x168B, -- áš‹
+ },
+ [0x168C]={
+ ["category"]="lo",
+ ["description"]="OGHAM LETTER GORT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x168C, -- ᚌ
+ },
+ [0x168D]={
+ ["category"]="lo",
+ ["description"]="OGHAM LETTER NGEADAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x168D, -- áš
+ },
+ [0x168E]={
+ ["category"]="lo",
+ ["description"]="OGHAM LETTER STRAIF",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x168E, -- ᚎ
+ },
+ [0x168F]={
+ ["category"]="lo",
+ ["description"]="OGHAM LETTER RUIS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x168F, -- áš
+ },
+ [0x1690]={
+ ["category"]="lo",
+ ["description"]="OGHAM LETTER AILM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1690, -- áš
+ },
+ [0x1691]={
+ ["category"]="lo",
+ ["description"]="OGHAM LETTER ONN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1691, -- áš‘
+ },
+ [0x1692]={
+ ["category"]="lo",
+ ["description"]="OGHAM LETTER UR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1692, -- áš’
+ },
+ [0x1693]={
+ ["category"]="lo",
+ ["description"]="OGHAM LETTER EADHADH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1693, -- áš“
+ },
+ [0x1694]={
+ ["category"]="lo",
+ ["description"]="OGHAM LETTER IODHADH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1694, -- áš”
+ },
+ [0x1695]={
+ ["category"]="lo",
+ ["description"]="OGHAM LETTER EABHADH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1695, -- áš•
+ },
+ [0x1696]={
+ ["category"]="lo",
+ ["description"]="OGHAM LETTER OR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1696, -- áš–
+ },
+ [0x1697]={
+ ["category"]="lo",
+ ["description"]="OGHAM LETTER UILLEANN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1697, -- áš—
+ },
+ [0x1698]={
+ ["category"]="lo",
+ ["description"]="OGHAM LETTER IFIN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1698, -- ᚘ
+ },
+ [0x1699]={
+ ["category"]="lo",
+ ["description"]="OGHAM LETTER EAMHANCHOLL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1699, -- áš™
+ },
+ [0x169A]={
+ ["category"]="lo",
+ ["description"]="OGHAM LETTER PEITH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x169A, -- ášš
+ },
+ [0x169B]={
+ ["category"]="ps",
+ ["description"]="OGHAM FEATHER MARK",
+ ["linebreak"]="op",
+ ["unicodeslot"]=0x169B, -- áš›
+ },
+ [0x169C]={
+ ["category"]="pe",
+ ["description"]="OGHAM REVERSED FEATHER MARK",
+ ["linebreak"]="cl",
+ ["unicodeslot"]=0x169C, -- ᚜
+ },
+ [0x16A0]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER FEHU FEOH FE F",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16A0, -- áš 
+ },
+ [0x16A1]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER V",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16A1, -- áš¡
+ },
+ [0x16A2]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER URUZ UR U",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16A2, -- ᚢ
+ },
+ [0x16A3]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER YR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16A3, -- ᚣ
+ },
+ [0x16A4]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER Y",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16A4, -- ᚤ
+ },
+ [0x16A5]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER W",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16A5, -- ᚥ
+ },
+ [0x16A6]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER THURISAZ THURS THORN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16A6, -- ᚦ
+ },
+ [0x16A7]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER ETH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16A7, -- ᚧ
+ },
+ [0x16A8]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER ANSUZ A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16A8, -- ᚨ
+ },
+ [0x16A9]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER OS O",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16A9, -- áš©
+ },
+ [0x16AA]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER AC A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16AA, -- ᚪ
+ },
+ [0x16AB]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER AESC",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16AB, -- áš«
+ },
+ [0x16AC]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER LONG-BRANCH-OSS O",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16AC, -- ᚬ
+ },
+ [0x16AD]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER SHORT-TWIG-OSS O",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16AD, -- áš­
+ },
+ [0x16AE]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER O",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16AE, -- áš®
+ },
+ [0x16AF]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER OE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16AF, -- ᚯ
+ },
+ [0x16B0]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER ON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16B0, -- áš°
+ },
+ [0x16B1]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER RAIDO RAD REID R",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16B1, -- áš±
+ },
+ [0x16B2]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER KAUNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16B2, -- áš²
+ },
+ [0x16B3]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER CEN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16B3, -- áš³
+ },
+ [0x16B4]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER KAUN K",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16B4, -- áš´
+ },
+ [0x16B5]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER G",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16B5, -- ášµ
+ },
+ [0x16B6]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER ENG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16B6, -- ᚶ
+ },
+ [0x16B7]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER GEBO GYFU G",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16B7, -- áš·
+ },
+ [0x16B8]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER GAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16B8, -- ᚸ
+ },
+ [0x16B9]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER WUNJO WYNN W",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16B9, -- áš¹
+ },
+ [0x16BA]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER HAGLAZ H",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16BA, -- ᚺ
+ },
+ [0x16BB]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER HAEGL H",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16BB, -- áš»
+ },
+ [0x16BC]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER LONG-BRANCH-HAGALL H",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16BC, -- áš¼
+ },
+ [0x16BD]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER SHORT-TWIG-HAGALL H",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16BD, -- áš½
+ },
+ [0x16BE]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER NAUDIZ NYD NAUD N",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16BE, -- áš¾
+ },
+ [0x16BF]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER SHORT-TWIG-NAUD N",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16BF, -- áš¿
+ },
+ [0x16C0]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER DOTTED-N",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16C0, -- ᛀ
+ },
+ [0x16C1]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER ISAZ IS ISS I",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16C1, -- á›
+ },
+ [0x16C2]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16C2, -- ᛂ
+ },
+ [0x16C3]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER JERAN J",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16C3, -- ᛃ
+ },
+ [0x16C4]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER GER",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16C4, -- ᛄ
+ },
+ [0x16C5]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER LONG-BRANCH-AR AE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16C5, -- á›…
+ },
+ [0x16C6]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER SHORT-TWIG-AR A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16C6, -- ᛆ
+ },
+ [0x16C7]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER IWAZ EOH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16C7, -- ᛇ
+ },
+ [0x16C8]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER PERTHO PEORTH P",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16C8, -- ᛈ
+ },
+ [0x16C9]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER ALGIZ EOLHX",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16C9, -- ᛉ
+ },
+ [0x16CA]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER SOWILO S",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16CA, -- ᛊ
+ },
+ [0x16CB]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER SIGEL LONG-BRANCH-SOL S",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16CB, -- ᛋ
+ },
+ [0x16CC]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER SHORT-TWIG-SOL S",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16CC, -- ᛌ
+ },
+ [0x16CD]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER C",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16CD, -- á›
+ },
+ [0x16CE]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER Z",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16CE, -- ᛎ
+ },
+ [0x16CF]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER TIWAZ TIR TYR T",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16CF, -- á›
+ },
+ [0x16D0]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER SHORT-TWIG-TYR T",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16D0, -- á›
+ },
+ [0x16D1]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER D",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16D1, -- ᛑ
+ },
+ [0x16D2]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER BERKANAN BEORC BJARKAN B",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16D2, -- á›’
+ },
+ [0x16D3]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER SHORT-TWIG-BJARKAN B",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16D3, -- ᛓ
+ },
+ [0x16D4]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER DOTTED-P",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16D4, -- á›”
+ },
+ [0x16D5]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER OPEN-P",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16D5, -- ᛕ
+ },
+ [0x16D6]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER EHWAZ EH E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16D6, -- á›–
+ },
+ [0x16D7]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER MANNAZ MAN M",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16D7, -- á›—
+ },
+ [0x16D8]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER LONG-BRANCH-MADR M",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16D8, -- ᛘ
+ },
+ [0x16D9]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER SHORT-TWIG-MADR M",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16D9, -- á›™
+ },
+ [0x16DA]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER LAUKAZ LAGU LOGR L",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16DA, -- ᛚ
+ },
+ [0x16DB]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER DOTTED-L",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16DB, -- á››
+ },
+ [0x16DC]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER INGWAZ",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16DC, -- ᛜ
+ },
+ [0x16DD]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER ING",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16DD, -- á›
+ },
+ [0x16DE]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER DAGAZ DAEG D",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16DE, -- ᛞ
+ },
+ [0x16DF]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER OTHALAN ETHEL O",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16DF, -- ᛟ
+ },
+ [0x16E0]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER EAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16E0, -- á› 
+ },
+ [0x16E1]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER IOR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16E1, -- ᛡ
+ },
+ [0x16E2]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER CWEORTH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16E2, -- ᛢ
+ },
+ [0x16E3]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER CALC",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16E3, -- ᛣ
+ },
+ [0x16E4]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER CEALC",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16E4, -- ᛤ
+ },
+ [0x16E5]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER STAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16E5, -- ᛥ
+ },
+ [0x16E6]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER LONG-BRANCH-YR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16E6, -- ᛦ
+ },
+ [0x16E7]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER SHORT-TWIG-YR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16E7, -- ᛧ
+ },
+ [0x16E8]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER ICELANDIC-YR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16E8, -- ᛨ
+ },
+ [0x16E9]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER Q",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16E9, -- ᛩ
+ },
+ [0x16EA]={
+ ["category"]="lo",
+ ["description"]="RUNIC LETTER X",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16EA, -- ᛪ
+ },
+ [0x16EB]={
+ ["category"]="po",
+ ["description"]="RUNIC SINGLE PUNCTUATION",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x16EB, -- ᛫
+ },
+ [0x16EC]={
+ ["category"]="po",
+ ["description"]="RUNIC MULTIPLE PUNCTUATION",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x16EC, -- ᛬
+ },
+ [0x16ED]={
+ ["category"]="po",
+ ["description"]="RUNIC CROSS PUNCTUATION",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x16ED, -- á›­
+ },
+ [0x16EE]={
+ ["category"]="nl",
+ ["description"]="RUNIC ARLAUG SYMBOL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16EE, -- á›®
+ },
+ [0x16EF]={
+ ["category"]="nl",
+ ["description"]="RUNIC TVIMADUR SYMBOL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16EF, -- ᛯ
+ },
+ [0x16F0]={
+ ["category"]="nl",
+ ["description"]="RUNIC BELGTHOR SYMBOL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x16F0, -- á›°
+ },
+ [0x1700]={
+ ["category"]="lo",
+ ["description"]="TAGALOG LETTER A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1700, -- ᜀ
+ },
+ [0x1701]={
+ ["category"]="lo",
+ ["description"]="TAGALOG LETTER I",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1701, -- áœ
+ },
+ [0x1702]={
+ ["category"]="lo",
+ ["description"]="TAGALOG LETTER U",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1702, -- ᜂ
+ },
+ [0x1703]={
+ ["category"]="lo",
+ ["description"]="TAGALOG LETTER KA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1703, -- ᜃ
+ },
+ [0x1704]={
+ ["category"]="lo",
+ ["description"]="TAGALOG LETTER GA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1704, -- ᜄ
+ },
+ [0x1705]={
+ ["category"]="lo",
+ ["description"]="TAGALOG LETTER NGA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1705, -- ᜅ
+ },
+ [0x1706]={
+ ["category"]="lo",
+ ["description"]="TAGALOG LETTER TA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1706, -- ᜆ
+ },
+ [0x1707]={
+ ["category"]="lo",
+ ["description"]="TAGALOG LETTER DA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1707, -- ᜇ
+ },
+ [0x1708]={
+ ["category"]="lo",
+ ["description"]="TAGALOG LETTER NA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1708, -- ᜈ
+ },
+ [0x1709]={
+ ["category"]="lo",
+ ["description"]="TAGALOG LETTER PA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1709, -- ᜉ
+ },
+ [0x170A]={
+ ["category"]="lo",
+ ["description"]="TAGALOG LETTER BA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x170A, -- ᜊ
+ },
+ [0x170B]={
+ ["category"]="lo",
+ ["description"]="TAGALOG LETTER MA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x170B, -- ᜋ
+ },
+ [0x170C]={
+ ["category"]="lo",
+ ["description"]="TAGALOG LETTER YA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x170C, -- ᜌ
+ },
+ [0x170E]={
+ ["category"]="lo",
+ ["description"]="TAGALOG LETTER LA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x170E, -- ᜎ
+ },
+ [0x170F]={
+ ["category"]="lo",
+ ["description"]="TAGALOG LETTER WA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x170F, -- áœ
+ },
+ [0x1710]={
+ ["category"]="lo",
+ ["description"]="TAGALOG LETTER SA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1710, -- áœ
+ },
+ [0x1711]={
+ ["category"]="lo",
+ ["description"]="TAGALOG LETTER HA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1711, -- ᜑ
+ },
+ [0x1712]={
+ ["category"]="mn",
+ ["description"]="TAGALOG VOWEL SIGN I",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1712, -- ᜒ
+ },
+ [0x1713]={
+ ["category"]="mn",
+ ["description"]="TAGALOG VOWEL SIGN U",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1713, -- ᜓ
+ },
+ [0x1714]={
+ ["category"]="mn",
+ ["description"]="TAGALOG SIGN VIRAMA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1714, -- ᜔
+ },
+ [0x1720]={
+ ["category"]="lo",
+ ["description"]="HANUNOO LETTER A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1720, -- ᜠ
+ },
+ [0x1721]={
+ ["category"]="lo",
+ ["description"]="HANUNOO LETTER I",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1721, -- ᜡ
+ },
+ [0x1722]={
+ ["category"]="lo",
+ ["description"]="HANUNOO LETTER U",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1722, -- ᜢ
+ },
+ [0x1723]={
+ ["category"]="lo",
+ ["description"]="HANUNOO LETTER KA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1723, -- ᜣ
+ },
+ [0x1724]={
+ ["category"]="lo",
+ ["description"]="HANUNOO LETTER GA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1724, -- ᜤ
+ },
+ [0x1725]={
+ ["category"]="lo",
+ ["description"]="HANUNOO LETTER NGA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1725, -- ᜥ
+ },
+ [0x1726]={
+ ["category"]="lo",
+ ["description"]="HANUNOO LETTER TA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1726, -- ᜦ
+ },
+ [0x1727]={
+ ["category"]="lo",
+ ["description"]="HANUNOO LETTER DA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1727, -- ᜧ
+ },
+ [0x1728]={
+ ["category"]="lo",
+ ["description"]="HANUNOO LETTER NA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1728, -- ᜨ
+ },
+ [0x1729]={
+ ["category"]="lo",
+ ["description"]="HANUNOO LETTER PA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1729, -- ᜩ
+ },
+ [0x172A]={
+ ["category"]="lo",
+ ["description"]="HANUNOO LETTER BA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x172A, -- ᜪ
+ },
+ [0x172B]={
+ ["category"]="lo",
+ ["description"]="HANUNOO LETTER MA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x172B, -- ᜫ
+ },
+ [0x172C]={
+ ["category"]="lo",
+ ["description"]="HANUNOO LETTER YA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x172C, -- ᜬ
+ },
+ [0x172D]={
+ ["category"]="lo",
+ ["description"]="HANUNOO LETTER RA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x172D, -- ᜭ
+ },
+ [0x172E]={
+ ["category"]="lo",
+ ["description"]="HANUNOO LETTER LA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x172E, -- ᜮ
+ },
+ [0x172F]={
+ ["category"]="lo",
+ ["description"]="HANUNOO LETTER WA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x172F, -- ᜯ
+ },
+ [0x1730]={
+ ["category"]="lo",
+ ["description"]="HANUNOO LETTER SA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1730, -- ᜰ
+ },
+ [0x1731]={
+ ["category"]="lo",
+ ["description"]="HANUNOO LETTER HA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1731, -- ᜱ
+ },
+ [0x1732]={
+ ["category"]="mn",
+ ["description"]="HANUNOO VOWEL SIGN I",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1732, -- ᜲ
+ },
+ [0x1733]={
+ ["category"]="mn",
+ ["description"]="HANUNOO VOWEL SIGN U",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1733, -- ᜳ
+ },
+ [0x1734]={
+ ["category"]="mn",
+ ["description"]="HANUNOO SIGN PAMUDPOD",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1734, -- ᜴
+ },
+ [0x1735]={
+ ["category"]="po",
+ ["description"]="PHILIPPINE SINGLE PUNCTUATION",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x1735, -- ᜵
+ },
+ [0x1736]={
+ ["category"]="po",
+ ["description"]="PHILIPPINE DOUBLE PUNCTUATION",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x1736, -- ᜶
+ },
+ [0x1740]={
+ ["category"]="lo",
+ ["description"]="BUHID LETTER A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1740, -- á€
+ },
+ [0x1741]={
+ ["category"]="lo",
+ ["description"]="BUHID LETTER I",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1741, -- á
+ },
+ [0x1742]={
+ ["category"]="lo",
+ ["description"]="BUHID LETTER U",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1742, -- á‚
+ },
+ [0x1743]={
+ ["category"]="lo",
+ ["description"]="BUHID LETTER KA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1743, -- áƒ
+ },
+ [0x1744]={
+ ["category"]="lo",
+ ["description"]="BUHID LETTER GA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1744, -- á„
+ },
+ [0x1745]={
+ ["category"]="lo",
+ ["description"]="BUHID LETTER NGA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1745, -- á…
+ },
+ [0x1746]={
+ ["category"]="lo",
+ ["description"]="BUHID LETTER TA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1746, -- á†
+ },
+ [0x1747]={
+ ["category"]="lo",
+ ["description"]="BUHID LETTER DA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1747, -- á‡
+ },
+ [0x1748]={
+ ["category"]="lo",
+ ["description"]="BUHID LETTER NA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1748, -- áˆ
+ },
+ [0x1749]={
+ ["category"]="lo",
+ ["description"]="BUHID LETTER PA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1749, -- á‰
+ },
+ [0x174A]={
+ ["category"]="lo",
+ ["description"]="BUHID LETTER BA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x174A, -- áŠ
+ },
+ [0x174B]={
+ ["category"]="lo",
+ ["description"]="BUHID LETTER MA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x174B, -- á‹
+ },
+ [0x174C]={
+ ["category"]="lo",
+ ["description"]="BUHID LETTER YA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x174C, -- áŒ
+ },
+ [0x174D]={
+ ["category"]="lo",
+ ["description"]="BUHID LETTER RA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x174D, -- á
+ },
+ [0x174E]={
+ ["category"]="lo",
+ ["description"]="BUHID LETTER LA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x174E, -- áŽ
+ },
+ [0x174F]={
+ ["category"]="lo",
+ ["description"]="BUHID LETTER WA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x174F, -- á
+ },
+ [0x1750]={
+ ["category"]="lo",
+ ["description"]="BUHID LETTER SA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1750, -- á
+ },
+ [0x1751]={
+ ["category"]="lo",
+ ["description"]="BUHID LETTER HA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1751, -- á‘
+ },
+ [0x1752]={
+ ["category"]="mn",
+ ["description"]="BUHID VOWEL SIGN I",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1752, -- á’
+ },
+ [0x1753]={
+ ["category"]="mn",
+ ["description"]="BUHID VOWEL SIGN U",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1753, -- á“
+ },
+ [0x1760]={
+ ["category"]="lo",
+ ["description"]="TAGBANWA LETTER A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1760, -- á 
+ },
+ [0x1761]={
+ ["category"]="lo",
+ ["description"]="TAGBANWA LETTER I",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1761, -- á¡
+ },
+ [0x1762]={
+ ["category"]="lo",
+ ["description"]="TAGBANWA LETTER U",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1762, -- á¢
+ },
+ [0x1763]={
+ ["category"]="lo",
+ ["description"]="TAGBANWA LETTER KA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1763, -- á£
+ },
+ [0x1764]={
+ ["category"]="lo",
+ ["description"]="TAGBANWA LETTER GA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1764, -- á¤
+ },
+ [0x1765]={
+ ["category"]="lo",
+ ["description"]="TAGBANWA LETTER NGA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1765, -- á¥
+ },
+ [0x1766]={
+ ["category"]="lo",
+ ["description"]="TAGBANWA LETTER TA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1766, -- á¦
+ },
+ [0x1767]={
+ ["category"]="lo",
+ ["description"]="TAGBANWA LETTER DA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1767, -- á§
+ },
+ [0x1768]={
+ ["category"]="lo",
+ ["description"]="TAGBANWA LETTER NA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1768, -- á¨
+ },
+ [0x1769]={
+ ["category"]="lo",
+ ["description"]="TAGBANWA LETTER PA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1769, -- á©
+ },
+ [0x176A]={
+ ["category"]="lo",
+ ["description"]="TAGBANWA LETTER BA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x176A, -- áª
+ },
+ [0x176B]={
+ ["category"]="lo",
+ ["description"]="TAGBANWA LETTER MA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x176B, -- á«
+ },
+ [0x176C]={
+ ["category"]="lo",
+ ["description"]="TAGBANWA LETTER YA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x176C, -- á¬
+ },
+ [0x176E]={
+ ["category"]="lo",
+ ["description"]="TAGBANWA LETTER LA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x176E, -- á®
+ },
+ [0x176F]={
+ ["category"]="lo",
+ ["description"]="TAGBANWA LETTER WA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x176F, -- á¯
+ },
+ [0x1770]={
+ ["category"]="lo",
+ ["description"]="TAGBANWA LETTER SA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1770, -- á°
+ },
+ [0x1772]={
+ ["category"]="mn",
+ ["description"]="TAGBANWA VOWEL SIGN I",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1772, -- á²
+ },
+ [0x1773]={
+ ["category"]="mn",
+ ["description"]="TAGBANWA VOWEL SIGN U",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1773, -- á³
+ },
+ [0x1780]={
+ ["category"]="lo",
+ ["description"]="KHMER LETTER KA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1780, -- ក
+ },
+ [0x1781]={
+ ["category"]="lo",
+ ["description"]="KHMER LETTER KHA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1781, -- áž
+ },
+ [0x1782]={
+ ["category"]="lo",
+ ["description"]="KHMER LETTER KO",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1782, -- áž‚
+ },
+ [0x1783]={
+ ["category"]="lo",
+ ["description"]="KHMER LETTER KHO",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1783, -- ឃ
+ },
+ [0x1784]={
+ ["category"]="lo",
+ ["description"]="KHMER LETTER NGO",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1784, -- áž„
+ },
+ [0x1785]={
+ ["category"]="lo",
+ ["description"]="KHMER LETTER CA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1785, -- áž…
+ },
+ [0x1786]={
+ ["category"]="lo",
+ ["description"]="KHMER LETTER CHA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1786, -- ឆ
+ },
+ [0x1787]={
+ ["category"]="lo",
+ ["description"]="KHMER LETTER CO",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1787, -- ជ
+ },
+ [0x1788]={
+ ["category"]="lo",
+ ["description"]="KHMER LETTER CHO",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1788, -- ឈ
+ },
+ [0x1789]={
+ ["category"]="lo",
+ ["description"]="KHMER LETTER NYO",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1789, -- ញ
+ },
+ [0x178A]={
+ ["category"]="lo",
+ ["description"]="KHMER LETTER DA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x178A, -- ដ
+ },
+ [0x178B]={
+ ["category"]="lo",
+ ["description"]="KHMER LETTER TTHA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x178B, -- áž‹
+ },
+ [0x178C]={
+ ["category"]="lo",
+ ["description"]="KHMER LETTER DO",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x178C, -- ឌ
+ },
+ [0x178D]={
+ ["category"]="lo",
+ ["description"]="KHMER LETTER TTHO",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x178D, -- áž
+ },
+ [0x178E]={
+ ["category"]="lo",
+ ["description"]="KHMER LETTER NNO",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x178E, -- ណ
+ },
+ [0x178F]={
+ ["category"]="lo",
+ ["description"]="KHMER LETTER TA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x178F, -- áž
+ },
+ [0x1790]={
+ ["category"]="lo",
+ ["description"]="KHMER LETTER THA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1790, -- áž
+ },
+ [0x1791]={
+ ["category"]="lo",
+ ["description"]="KHMER LETTER TO",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1791, -- áž‘
+ },
+ [0x1792]={
+ ["category"]="lo",
+ ["description"]="KHMER LETTER THO",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1792, -- áž’
+ },
+ [0x1793]={
+ ["category"]="lo",
+ ["description"]="KHMER LETTER NO",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1793, -- áž“
+ },
+ [0x1794]={
+ ["category"]="lo",
+ ["description"]="KHMER LETTER BA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1794, -- áž”
+ },
+ [0x1795]={
+ ["category"]="lo",
+ ["description"]="KHMER LETTER PHA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1795, -- áž•
+ },
+ [0x1796]={
+ ["category"]="lo",
+ ["description"]="KHMER LETTER PO",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1796, -- áž–
+ },
+ [0x1797]={
+ ["category"]="lo",
+ ["description"]="KHMER LETTER PHO",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1797, -- áž—
+ },
+ [0x1798]={
+ ["category"]="lo",
+ ["description"]="KHMER LETTER MO",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1798, -- ម
+ },
+ [0x1799]={
+ ["category"]="lo",
+ ["description"]="KHMER LETTER YO",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1799, -- áž™
+ },
+ [0x179A]={
+ ["category"]="lo",
+ ["description"]="KHMER LETTER RO",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x179A, -- ážš
+ },
+ [0x179B]={
+ ["category"]="lo",
+ ["description"]="KHMER LETTER LO",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x179B, -- áž›
+ },
+ [0x179C]={
+ ["category"]="lo",
+ ["description"]="KHMER LETTER VO",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x179C, -- វ
+ },
+ [0x179D]={
+ ["category"]="lo",
+ ["description"]="KHMER LETTER SHA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x179D, -- áž
+ },
+ [0x179E]={
+ ["category"]="lo",
+ ["description"]="KHMER LETTER SSO",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x179E, -- ážž
+ },
+ [0x179F]={
+ ["category"]="lo",
+ ["description"]="KHMER LETTER SA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x179F, -- ស
+ },
+ [0x17A0]={
+ ["category"]="lo",
+ ["description"]="KHMER LETTER HA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x17A0, -- áž 
+ },
+ [0x17A1]={
+ ["category"]="lo",
+ ["description"]="KHMER LETTER LA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x17A1, -- áž¡
+ },
+ [0x17A2]={
+ ["category"]="lo",
+ ["description"]="KHMER LETTER QA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x17A2, -- អ
+ },
+ [0x17A3]={
+ ["category"]="lo",
+ ["description"]="KHMER INDEPENDENT VOWEL QAQ",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x17A3, -- ឣ
+ },
+ [0x17A4]={
+ ["category"]="lo",
+ ["description"]="KHMER INDEPENDENT VOWEL QAA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x17A4, -- ឤ
+ },
+ [0x17A5]={
+ ["category"]="lo",
+ ["description"]="KHMER INDEPENDENT VOWEL QI",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x17A5, -- ឥ
+ },
+ [0x17A6]={
+ ["category"]="lo",
+ ["description"]="KHMER INDEPENDENT VOWEL QII",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x17A6, -- ឦ
+ },
+ [0x17A7]={
+ ["category"]="lo",
+ ["description"]="KHMER INDEPENDENT VOWEL QU",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x17A7, -- ឧ
+ },
+ [0x17A8]={
+ ["category"]="lo",
+ ["description"]="KHMER INDEPENDENT VOWEL QUK",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x17A8, -- ឨ
+ },
+ [0x17A9]={
+ ["category"]="lo",
+ ["description"]="KHMER INDEPENDENT VOWEL QUU",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x17A9, -- áž©
+ },
+ [0x17AA]={
+ ["category"]="lo",
+ ["description"]="KHMER INDEPENDENT VOWEL QUUV",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x17AA, -- ឪ
+ },
+ [0x17AB]={
+ ["category"]="lo",
+ ["description"]="KHMER INDEPENDENT VOWEL RY",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x17AB, -- áž«
+ },
+ [0x17AC]={
+ ["category"]="lo",
+ ["description"]="KHMER INDEPENDENT VOWEL RYY",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x17AC, -- ឬ
+ },
+ [0x17AD]={
+ ["category"]="lo",
+ ["description"]="KHMER INDEPENDENT VOWEL LY",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x17AD, -- áž­
+ },
+ [0x17AE]={
+ ["category"]="lo",
+ ["description"]="KHMER INDEPENDENT VOWEL LYY",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x17AE, -- áž®
+ },
+ [0x17AF]={
+ ["category"]="lo",
+ ["description"]="KHMER INDEPENDENT VOWEL QE",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x17AF, -- ឯ
+ },
+ [0x17B0]={
+ ["category"]="lo",
+ ["description"]="KHMER INDEPENDENT VOWEL QAI",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x17B0, -- áž°
+ },
+ [0x17B1]={
+ ["category"]="lo",
+ ["description"]="KHMER INDEPENDENT VOWEL QOO TYPE ONE",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x17B1, -- áž±
+ },
+ [0x17B2]={
+ ["category"]="lo",
+ ["description"]="KHMER INDEPENDENT VOWEL QOO TYPE TWO",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x17B2, -- áž²
+ },
+ [0x17B3]={
+ ["category"]="lo",
+ ["description"]="KHMER INDEPENDENT VOWEL QAU",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x17B3, -- áž³
+ },
+ [0x17B4]={
+ ["category"]="cf",
+ ["description"]="KHMER VOWEL INHERENT AQ",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x17B4, -- áž´
+ },
+ [0x17B5]={
+ ["category"]="cf",
+ ["description"]="KHMER VOWEL INHERENT AA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x17B5, -- ážµ
+ },
+ [0x17B6]={
+ ["category"]="mc",
+ ["description"]="KHMER VOWEL SIGN AA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x17B6, -- ា
+ },
+ [0x17B7]={
+ ["category"]="mn",
+ ["description"]="KHMER VOWEL SIGN I",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x17B7, -- áž·
+ },
+ [0x17B8]={
+ ["category"]="mn",
+ ["description"]="KHMER VOWEL SIGN II",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x17B8, -- ី
+ },
+ [0x17B9]={
+ ["category"]="mn",
+ ["description"]="KHMER VOWEL SIGN Y",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x17B9, -- áž¹
+ },
+ [0x17BA]={
+ ["category"]="mn",
+ ["description"]="KHMER VOWEL SIGN YY",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x17BA, -- ឺ
+ },
+ [0x17BB]={
+ ["category"]="mn",
+ ["description"]="KHMER VOWEL SIGN U",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x17BB, -- áž»
+ },
+ [0x17BC]={
+ ["category"]="mn",
+ ["description"]="KHMER VOWEL SIGN UU",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x17BC, -- áž¼
+ },
+ [0x17BD]={
+ ["category"]="mn",
+ ["description"]="KHMER VOWEL SIGN UA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x17BD, -- áž½
+ },
+ [0x17BE]={
+ ["category"]="mc",
+ ["description"]="KHMER VOWEL SIGN OE",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x17BE, -- áž¾
+ },
+ [0x17BF]={
+ ["category"]="mc",
+ ["description"]="KHMER VOWEL SIGN YA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x17BF, -- áž¿
+ },
+ [0x17C0]={
+ ["category"]="mc",
+ ["description"]="KHMER VOWEL SIGN IE",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x17C0, -- ៀ
+ },
+ [0x17C1]={
+ ["category"]="mc",
+ ["description"]="KHMER VOWEL SIGN E",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x17C1, -- áŸ
+ },
+ [0x17C2]={
+ ["category"]="mc",
+ ["description"]="KHMER VOWEL SIGN AE",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x17C2, -- ែ
+ },
+ [0x17C3]={
+ ["category"]="mc",
+ ["description"]="KHMER VOWEL SIGN AI",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x17C3, -- ៃ
+ },
+ [0x17C4]={
+ ["category"]="mc",
+ ["description"]="KHMER VOWEL SIGN OO",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x17C4, -- ោ
+ },
+ [0x17C5]={
+ ["category"]="mc",
+ ["description"]="KHMER VOWEL SIGN AU",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x17C5, -- ៅ
+ },
+ [0x17C6]={
+ ["category"]="mn",
+ ["description"]="KHMER SIGN NIKAHIT",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x17C6, -- ំ
+ },
+ [0x17C7]={
+ ["category"]="mc",
+ ["description"]="KHMER SIGN REAHMUK",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x17C7, -- ះ
+ },
+ [0x17C8]={
+ ["category"]="mc",
+ ["description"]="KHMER SIGN YUUKALEAPINTU",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x17C8, -- ៈ
+ },
+ [0x17C9]={
+ ["category"]="mn",
+ ["description"]="KHMER SIGN MUUSIKATOAN",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x17C9, -- ៉
+ },
+ [0x17CA]={
+ ["category"]="mn",
+ ["description"]="KHMER SIGN TRIISAP",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x17CA, -- ៊
+ },
+ [0x17CB]={
+ ["category"]="mn",
+ ["description"]="KHMER SIGN BANTOC",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x17CB, -- ់
+ },
+ [0x17CC]={
+ ["category"]="mn",
+ ["description"]="KHMER SIGN ROBAT",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x17CC, -- ៌
+ },
+ [0x17CD]={
+ ["category"]="mn",
+ ["description"]="KHMER SIGN TOANDAKHIAT",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x17CD, -- áŸ
+ },
+ [0x17CE]={
+ ["category"]="mn",
+ ["description"]="KHMER SIGN KAKABAT",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x17CE, -- ៎
+ },
+ [0x17CF]={
+ ["category"]="mn",
+ ["description"]="KHMER SIGN AHSDA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x17CF, -- áŸ
+ },
+ [0x17D0]={
+ ["category"]="mn",
+ ["description"]="KHMER SIGN SAMYOK SANNYA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x17D0, -- áŸ
+ },
+ [0x17D1]={
+ ["category"]="mn",
+ ["description"]="KHMER SIGN VIRIAM",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x17D1, -- ៑
+ },
+ [0x17D2]={
+ ["category"]="mn",
+ ["description"]="KHMER SIGN COENG",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x17D2, -- ្
+ },
+ [0x17D3]={
+ ["category"]="mn",
+ ["description"]="KHMER SIGN BATHAMASAT",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x17D3, -- ៓
+ },
+ [0x17D4]={
+ ["category"]="po",
+ ["description"]="KHMER SIGN KHAN",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x17D4, -- ។
+ },
+ [0x17D5]={
+ ["category"]="po",
+ ["description"]="KHMER SIGN BARIYOOSAN",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x17D5, -- ៕
+ },
+ [0x17D6]={
+ ["category"]="po",
+ ["description"]="KHMER SIGN CAMNUC PII KUUH",
+ ["linebreak"]="ns",
+ ["unicodeslot"]=0x17D6, -- ៖
+ },
+ [0x17D7]={
+ ["category"]="lm",
+ ["description"]="KHMER SIGN LEK TOO",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x17D7, -- ៗ
+ },
+ [0x17D8]={
+ ["category"]="po",
+ ["description"]="KHMER SIGN BEYYAL",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x17D8, -- ៘
+ },
+ [0x17D9]={
+ ["category"]="po",
+ ["description"]="KHMER SIGN PHNAEK MUAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x17D9, -- ៙
+ },
+ [0x17DA]={
+ ["category"]="po",
+ ["description"]="KHMER SIGN KOOMUUT",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x17DA, -- ៚
+ },
+ [0x17DB]={
+ ["category"]="sc",
+ ["description"]="KHMER CURRENCY SYMBOL RIEL",
+ ["linebreak"]="pr",
+ ["unicodeslot"]=0x17DB, -- ៛
+ },
+ [0x17DC]={
+ ["category"]="lo",
+ ["description"]="KHMER SIGN AVAKRAHASANYA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x17DC, -- ៜ
+ },
+ [0x17DD]={
+ ["category"]="mn",
+ ["description"]="KHMER SIGN ATTHACAN",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x17DD, -- áŸ
+ },
+ [0x17E0]={
+ ["category"]="nd",
+ ["description"]="KHMER DIGIT ZERO",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x17E0, -- ០
+ },
+ [0x17E1]={
+ ["category"]="nd",
+ ["description"]="KHMER DIGIT ONE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x17E1, -- ១
+ },
+ [0x17E2]={
+ ["category"]="nd",
+ ["description"]="KHMER DIGIT TWO",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x17E2, -- ២
+ },
+ [0x17E3]={
+ ["category"]="nd",
+ ["description"]="KHMER DIGIT THREE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x17E3, -- ៣
+ },
+ [0x17E4]={
+ ["category"]="nd",
+ ["description"]="KHMER DIGIT FOUR",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x17E4, -- ៤
+ },
+ [0x17E5]={
+ ["category"]="nd",
+ ["description"]="KHMER DIGIT FIVE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x17E5, -- ៥
+ },
+ [0x17E6]={
+ ["category"]="nd",
+ ["description"]="KHMER DIGIT SIX",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x17E6, -- ៦
+ },
+ [0x17E7]={
+ ["category"]="nd",
+ ["description"]="KHMER DIGIT SEVEN",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x17E7, -- ៧
+ },
+ [0x17E8]={
+ ["category"]="nd",
+ ["description"]="KHMER DIGIT EIGHT",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x17E8, -- ៨
+ },
+ [0x17E9]={
+ ["category"]="nd",
+ ["description"]="KHMER DIGIT NINE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x17E9, -- ៩
+ },
+ [0x17F0]={
+ ["category"]="no",
+ ["description"]="KHMER SYMBOL LEK ATTAK SON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x17F0, -- ៰
+ },
+ [0x17F1]={
+ ["category"]="no",
+ ["description"]="KHMER SYMBOL LEK ATTAK MUOY",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x17F1, -- ៱
+ },
+ [0x17F2]={
+ ["category"]="no",
+ ["description"]="KHMER SYMBOL LEK ATTAK PII",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x17F2, -- ៲
+ },
+ [0x17F3]={
+ ["category"]="no",
+ ["description"]="KHMER SYMBOL LEK ATTAK BEI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x17F3, -- ៳
+ },
+ [0x17F4]={
+ ["category"]="no",
+ ["description"]="KHMER SYMBOL LEK ATTAK BUON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x17F4, -- ៴
+ },
+ [0x17F5]={
+ ["category"]="no",
+ ["description"]="KHMER SYMBOL LEK ATTAK PRAM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x17F5, -- ៵
+ },
+ [0x17F6]={
+ ["category"]="no",
+ ["description"]="KHMER SYMBOL LEK ATTAK PRAM-MUOY",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x17F6, -- ៶
+ },
+ [0x17F7]={
+ ["category"]="no",
+ ["description"]="KHMER SYMBOL LEK ATTAK PRAM-PII",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x17F7, -- ៷
+ },
+ [0x17F8]={
+ ["category"]="no",
+ ["description"]="KHMER SYMBOL LEK ATTAK PRAM-BEI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x17F8, -- ៸
+ },
+ [0x17F9]={
+ ["category"]="no",
+ ["description"]="KHMER SYMBOL LEK ATTAK PRAM-BUON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x17F9, -- ៹
+ },
+ [0x1800]={
+ ["category"]="po",
+ ["description"]="MONGOLIAN BIRGA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1800, -- á €
+ },
+ [0x1801]={
+ ["category"]="po",
+ ["description"]="MONGOLIAN ELLIPSIS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1801, -- á 
+ },
+ [0x1802]={
+ ["category"]="po",
+ ["description"]="MONGOLIAN COMMA",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x1802, -- á ‚
+ },
+ [0x1803]={
+ ["category"]="po",
+ ["description"]="MONGOLIAN FULL STOP",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x1803, -- á ƒ
+ },
+ [0x1804]={
+ ["category"]="po",
+ ["description"]="MONGOLIAN COLON",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x1804, -- á „
+ },
+ [0x1805]={
+ ["category"]="po",
+ ["description"]="MONGOLIAN FOUR DOTS",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x1805, -- á …
+ },
+ [0x1806]={
+ ["category"]="pd",
+ ["description"]="MONGOLIAN TODO SOFT HYPHEN",
+ ["linebreak"]="bb",
+ ["unicodeslot"]=0x1806, -- á †
+ },
+ [0x1807]={
+ ["category"]="po",
+ ["description"]="MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1807, -- á ‡
+ },
+ [0x1808]={
+ ["category"]="po",
+ ["description"]="MONGOLIAN MANCHU COMMA",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x1808, -- á ˆ
+ },
+ [0x1809]={
+ ["category"]="po",
+ ["description"]="MONGOLIAN MANCHU FULL STOP",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x1809, -- á ‰
+ },
+ [0x180A]={
+ ["category"]="po",
+ ["description"]="MONGOLIAN NIRUGU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x180A, -- á Š
+ },
+ [0x180B]={
+ ["category"]="mn",
+ ["description"]="MONGOLIAN FREE VARIATION SELECTOR ONE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x180B, -- á ‹
+ },
+ [0x180C]={
+ ["category"]="mn",
+ ["description"]="MONGOLIAN FREE VARIATION SELECTOR TWO",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x180C, -- ᠌
+ },
+ [0x180D]={
+ ["category"]="mn",
+ ["description"]="MONGOLIAN FREE VARIATION SELECTOR THREE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x180D, -- á 
+ },
+ [0x180E]={
+ ["category"]="zs",
+ ["description"]="MONGOLIAN VOWEL SEPARATOR",
+ ["linebreak"]="gl",
+ ["unicodeslot"]=0x180E, -- á Ž
+ },
+ [0x1810]={
+ ["category"]="nd",
+ ["description"]="MONGOLIAN DIGIT ZERO",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x1810, -- á 
+ },
+ [0x1811]={
+ ["category"]="nd",
+ ["description"]="MONGOLIAN DIGIT ONE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x1811, -- á ‘
+ },
+ [0x1812]={
+ ["category"]="nd",
+ ["description"]="MONGOLIAN DIGIT TWO",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x1812, -- á ’
+ },
+ [0x1813]={
+ ["category"]="nd",
+ ["description"]="MONGOLIAN DIGIT THREE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x1813, -- á “
+ },
+ [0x1814]={
+ ["category"]="nd",
+ ["description"]="MONGOLIAN DIGIT FOUR",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x1814, -- á ”
+ },
+ [0x1815]={
+ ["category"]="nd",
+ ["description"]="MONGOLIAN DIGIT FIVE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x1815, -- á •
+ },
+ [0x1816]={
+ ["category"]="nd",
+ ["description"]="MONGOLIAN DIGIT SIX",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x1816, -- á –
+ },
+ [0x1817]={
+ ["category"]="nd",
+ ["description"]="MONGOLIAN DIGIT SEVEN",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x1817, -- á —
+ },
+ [0x1818]={
+ ["category"]="nd",
+ ["description"]="MONGOLIAN DIGIT EIGHT",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x1818, -- á ˜
+ },
+ [0x1819]={
+ ["category"]="nd",
+ ["description"]="MONGOLIAN DIGIT NINE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x1819, -- á ™
+ },
+ [0x1820]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1820, -- á  
+ },
+ [0x1821]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1821, -- á ¡
+ },
+ [0x1822]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER I",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1822, -- á ¢
+ },
+ [0x1823]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER O",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1823, -- á £
+ },
+ [0x1824]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER U",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1824, -- á ¤
+ },
+ [0x1825]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER OE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1825, -- á ¥
+ },
+ [0x1826]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER UE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1826, -- á ¦
+ },
+ [0x1827]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER EE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1827, -- á §
+ },
+ [0x1828]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER NA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1828, -- á ¨
+ },
+ [0x1829]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER ANG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1829, -- á ©
+ },
+ [0x182A]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER BA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x182A, -- á ª
+ },
+ [0x182B]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER PA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x182B, -- á «
+ },
+ [0x182C]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER QA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x182C, -- á ¬
+ },
+ [0x182D]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER GA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x182D, -- á ­
+ },
+ [0x182E]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER MA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x182E, -- á ®
+ },
+ [0x182F]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER LA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x182F, -- á ¯
+ },
+ [0x1830]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER SA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1830, -- á °
+ },
+ [0x1831]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER SHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1831, -- á ±
+ },
+ [0x1832]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER TA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1832, -- á ²
+ },
+ [0x1833]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER DA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1833, -- á ³
+ },
+ [0x1834]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER CHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1834, -- á ´
+ },
+ [0x1835]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER JA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1835, -- á µ
+ },
+ [0x1836]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER YA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1836, -- á ¶
+ },
+ [0x1837]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER RA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1837, -- á ·
+ },
+ [0x1838]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER WA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1838, -- á ¸
+ },
+ [0x1839]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER FA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1839, -- á ¹
+ },
+ [0x183A]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER KA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x183A, -- á º
+ },
+ [0x183B]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER KHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x183B, -- á »
+ },
+ [0x183C]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER TSA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x183C, -- á ¼
+ },
+ [0x183D]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER ZA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x183D, -- á ½
+ },
+ [0x183E]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER HAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x183E, -- á ¾
+ },
+ [0x183F]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER ZRA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x183F, -- á ¿
+ },
+ [0x1840]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER LHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1840, -- á¡€
+ },
+ [0x1841]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER ZHI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1841, -- á¡
+ },
+ [0x1842]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER CHI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1842, -- á¡‚
+ },
+ [0x1843]={
+ ["category"]="lm",
+ ["description"]="MONGOLIAN LETTER TODO LONG VOWEL SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1843, -- ᡃ
+ },
+ [0x1844]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER TODO E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1844, -- á¡„
+ },
+ [0x1845]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER TODO I",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1845, -- á¡…
+ },
+ [0x1846]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER TODO O",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1846, -- ᡆ
+ },
+ [0x1847]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER TODO U",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1847, -- ᡇ
+ },
+ [0x1848]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER TODO OE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1848, -- ᡈ
+ },
+ [0x1849]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER TODO UE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1849, -- ᡉ
+ },
+ [0x184A]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER TODO ANG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x184A, -- á¡Š
+ },
+ [0x184B]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER TODO BA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x184B, -- á¡‹
+ },
+ [0x184C]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER TODO PA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x184C, -- ᡌ
+ },
+ [0x184D]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER TODO QA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x184D, -- á¡
+ },
+ [0x184E]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER TODO GA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x184E, -- á¡Ž
+ },
+ [0x184F]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER TODO MA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x184F, -- á¡
+ },
+ [0x1850]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER TODO TA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1850, -- á¡
+ },
+ [0x1851]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER TODO DA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1851, -- á¡‘
+ },
+ [0x1852]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER TODO CHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1852, -- á¡’
+ },
+ [0x1853]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER TODO JA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1853, -- á¡“
+ },
+ [0x1854]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER TODO TSA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1854, -- á¡”
+ },
+ [0x1855]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER TODO YA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1855, -- á¡•
+ },
+ [0x1856]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER TODO WA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1856, -- á¡–
+ },
+ [0x1857]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER TODO KA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1857, -- á¡—
+ },
+ [0x1858]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER TODO GAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1858, -- ᡘ
+ },
+ [0x1859]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER TODO HAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1859, -- á¡™
+ },
+ [0x185A]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER TODO JIA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x185A, -- á¡š
+ },
+ [0x185B]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER TODO NIA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x185B, -- á¡›
+ },
+ [0x185C]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER TODO DZA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x185C, -- ᡜ
+ },
+ [0x185D]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER SIBE E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x185D, -- á¡
+ },
+ [0x185E]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER SIBE I",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x185E, -- á¡ž
+ },
+ [0x185F]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER SIBE IY",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x185F, -- á¡Ÿ
+ },
+ [0x1860]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER SIBE UE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1860, -- á¡ 
+ },
+ [0x1861]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER SIBE U",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1861, -- á¡¡
+ },
+ [0x1862]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER SIBE ANG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1862, -- á¡¢
+ },
+ [0x1863]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER SIBE KA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1863, -- á¡£
+ },
+ [0x1864]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER SIBE GA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1864, -- ᡤ
+ },
+ [0x1865]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER SIBE HA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1865, -- á¡¥
+ },
+ [0x1866]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER SIBE PA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1866, -- ᡦ
+ },
+ [0x1867]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER SIBE SHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1867, -- ᡧ
+ },
+ [0x1868]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER SIBE TA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1868, -- ᡨ
+ },
+ [0x1869]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER SIBE DA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1869, -- á¡©
+ },
+ [0x186A]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER SIBE JA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x186A, -- ᡪ
+ },
+ [0x186B]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER SIBE FA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x186B, -- á¡«
+ },
+ [0x186C]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER SIBE GAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x186C, -- ᡬ
+ },
+ [0x186D]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER SIBE HAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x186D, -- á¡­
+ },
+ [0x186E]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER SIBE TSA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x186E, -- á¡®
+ },
+ [0x186F]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER SIBE ZA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x186F, -- ᡯ
+ },
+ [0x1870]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER SIBE RAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1870, -- á¡°
+ },
+ [0x1871]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER SIBE CHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1871, -- ᡱ
+ },
+ [0x1872]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER SIBE ZHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1872, -- ᡲ
+ },
+ [0x1873]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER MANCHU I",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1873, -- ᡳ
+ },
+ [0x1874]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER MANCHU KA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1874, -- á¡´
+ },
+ [0x1875]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER MANCHU RA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1875, -- ᡵ
+ },
+ [0x1876]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER MANCHU FA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1876, -- ᡶ
+ },
+ [0x1877]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER MANCHU ZHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1877, -- á¡·
+ },
+ [0x1880]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER ALI GALI ANUSVARA ONE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1880, -- ᢀ
+ },
+ [0x1881]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER ALI GALI VISARGA ONE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1881, -- á¢
+ },
+ [0x1882]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER ALI GALI DAMARU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1882, -- ᢂ
+ },
+ [0x1883]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER ALI GALI UBADAMA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1883, -- ᢃ
+ },
+ [0x1884]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER ALI GALI INVERTED UBADAMA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1884, -- ᢄ
+ },
+ [0x1885]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER ALI GALI BALUDA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1885, -- ᢅ
+ },
+ [0x1886]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER ALI GALI THREE BALUDA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1886, -- ᢆ
+ },
+ [0x1887]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER ALI GALI A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1887, -- ᢇ
+ },
+ [0x1888]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER ALI GALI I",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1888, -- ᢈ
+ },
+ [0x1889]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER ALI GALI KA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1889, -- ᢉ
+ },
+ [0x188A]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER ALI GALI NGA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x188A, -- ᢊ
+ },
+ [0x188B]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER ALI GALI CA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x188B, -- ᢋ
+ },
+ [0x188C]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER ALI GALI TTA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x188C, -- ᢌ
+ },
+ [0x188D]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER ALI GALI TTHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x188D, -- á¢
+ },
+ [0x188E]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER ALI GALI DDA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x188E, -- ᢎ
+ },
+ [0x188F]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER ALI GALI NNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x188F, -- á¢
+ },
+ [0x1890]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER ALI GALI TA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1890, -- á¢
+ },
+ [0x1891]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER ALI GALI DA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1891, -- ᢑ
+ },
+ [0x1892]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER ALI GALI PA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1892, -- ᢒ
+ },
+ [0x1893]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER ALI GALI PHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1893, -- ᢓ
+ },
+ [0x1894]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER ALI GALI SSA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1894, -- ᢔ
+ },
+ [0x1895]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER ALI GALI ZHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1895, -- ᢕ
+ },
+ [0x1896]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER ALI GALI ZA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1896, -- ᢖ
+ },
+ [0x1897]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER ALI GALI AH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1897, -- ᢗ
+ },
+ [0x1898]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER TODO ALI GALI TA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1898, -- ᢘ
+ },
+ [0x1899]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER TODO ALI GALI ZHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1899, -- ᢙ
+ },
+ [0x189A]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER MANCHU ALI GALI GHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x189A, -- ᢚ
+ },
+ [0x189B]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER MANCHU ALI GALI NGA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x189B, -- ᢛ
+ },
+ [0x189C]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER MANCHU ALI GALI CA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x189C, -- ᢜ
+ },
+ [0x189D]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER MANCHU ALI GALI JHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x189D, -- á¢
+ },
+ [0x189E]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER MANCHU ALI GALI TTA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x189E, -- ᢞ
+ },
+ [0x189F]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER MANCHU ALI GALI DDHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x189F, -- ᢟ
+ },
+ [0x18A0]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER MANCHU ALI GALI TA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x18A0, -- ᢠ
+ },
+ [0x18A1]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER MANCHU ALI GALI DHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x18A1, -- ᢡ
+ },
+ [0x18A2]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER MANCHU ALI GALI SSA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x18A2, -- ᢢ
+ },
+ [0x18A3]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER MANCHU ALI GALI CYA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x18A3, -- ᢣ
+ },
+ [0x18A4]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER MANCHU ALI GALI ZHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x18A4, -- ᢤ
+ },
+ [0x18A5]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER MANCHU ALI GALI ZA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x18A5, -- ᢥ
+ },
+ [0x18A6]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER ALI GALI HALF U",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x18A6, -- ᢦ
+ },
+ [0x18A7]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER ALI GALI HALF YA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x18A7, -- ᢧ
+ },
+ [0x18A8]={
+ ["category"]="lo",
+ ["description"]="MONGOLIAN LETTER MANCHU ALI GALI BHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x18A8, -- ᢨ
+ },
+ [0x18A9]={
+ ["category"]="mn",
+ ["description"]="MONGOLIAN LETTER ALI GALI DAGALGA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x18A9, -- ᢩ
+ },
+ [0x1900]={
+ ["category"]="lo",
+ ["description"]="LIMBU VOWEL-CARRIER LETTER",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1900, -- ᤀ
+ },
+ [0x1901]={
+ ["category"]="lo",
+ ["description"]="LIMBU LETTER KA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1901, -- á¤
+ },
+ [0x1902]={
+ ["category"]="lo",
+ ["description"]="LIMBU LETTER KHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1902, -- ᤂ
+ },
+ [0x1903]={
+ ["category"]="lo",
+ ["description"]="LIMBU LETTER GA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1903, -- ᤃ
+ },
+ [0x1904]={
+ ["category"]="lo",
+ ["description"]="LIMBU LETTER GHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1904, -- ᤄ
+ },
+ [0x1905]={
+ ["category"]="lo",
+ ["description"]="LIMBU LETTER NGA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1905, -- ᤅ
+ },
+ [0x1906]={
+ ["category"]="lo",
+ ["description"]="LIMBU LETTER CA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1906, -- ᤆ
+ },
+ [0x1907]={
+ ["category"]="lo",
+ ["description"]="LIMBU LETTER CHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1907, -- ᤇ
+ },
+ [0x1908]={
+ ["category"]="lo",
+ ["description"]="LIMBU LETTER JA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1908, -- ᤈ
+ },
+ [0x1909]={
+ ["category"]="lo",
+ ["description"]="LIMBU LETTER JHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1909, -- ᤉ
+ },
+ [0x190A]={
+ ["category"]="lo",
+ ["description"]="LIMBU LETTER YAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x190A, -- ᤊ
+ },
+ [0x190B]={
+ ["category"]="lo",
+ ["description"]="LIMBU LETTER TA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x190B, -- ᤋ
+ },
+ [0x190C]={
+ ["category"]="lo",
+ ["description"]="LIMBU LETTER THA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x190C, -- ᤌ
+ },
+ [0x190D]={
+ ["category"]="lo",
+ ["description"]="LIMBU LETTER DA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x190D, -- á¤
+ },
+ [0x190E]={
+ ["category"]="lo",
+ ["description"]="LIMBU LETTER DHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x190E, -- ᤎ
+ },
+ [0x190F]={
+ ["category"]="lo",
+ ["description"]="LIMBU LETTER NA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x190F, -- á¤
+ },
+ [0x1910]={
+ ["category"]="lo",
+ ["description"]="LIMBU LETTER PA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1910, -- á¤
+ },
+ [0x1911]={
+ ["category"]="lo",
+ ["description"]="LIMBU LETTER PHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1911, -- ᤑ
+ },
+ [0x1912]={
+ ["category"]="lo",
+ ["description"]="LIMBU LETTER BA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1912, -- ᤒ
+ },
+ [0x1913]={
+ ["category"]="lo",
+ ["description"]="LIMBU LETTER BHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1913, -- ᤓ
+ },
+ [0x1914]={
+ ["category"]="lo",
+ ["description"]="LIMBU LETTER MA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1914, -- ᤔ
+ },
+ [0x1915]={
+ ["category"]="lo",
+ ["description"]="LIMBU LETTER YA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1915, -- ᤕ
+ },
+ [0x1916]={
+ ["category"]="lo",
+ ["description"]="LIMBU LETTER RA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1916, -- ᤖ
+ },
+ [0x1917]={
+ ["category"]="lo",
+ ["description"]="LIMBU LETTER LA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1917, -- ᤗ
+ },
+ [0x1918]={
+ ["category"]="lo",
+ ["description"]="LIMBU LETTER WA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1918, -- ᤘ
+ },
+ [0x1919]={
+ ["category"]="lo",
+ ["description"]="LIMBU LETTER SHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1919, -- ᤙ
+ },
+ [0x191A]={
+ ["category"]="lo",
+ ["description"]="LIMBU LETTER SSA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x191A, -- ᤚ
+ },
+ [0x191B]={
+ ["category"]="lo",
+ ["description"]="LIMBU LETTER SA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x191B, -- ᤛ
+ },
+ [0x191C]={
+ ["category"]="lo",
+ ["description"]="LIMBU LETTER HA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x191C, -- ᤜ
+ },
+ [0x1920]={
+ ["category"]="mn",
+ ["description"]="LIMBU VOWEL SIGN A",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1920, -- ᤠ
+ },
+ [0x1921]={
+ ["category"]="mn",
+ ["description"]="LIMBU VOWEL SIGN I",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1921, -- ᤡ
+ },
+ [0x1922]={
+ ["category"]="mn",
+ ["description"]="LIMBU VOWEL SIGN U",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1922, -- ᤢ
+ },
+ [0x1923]={
+ ["category"]="mc",
+ ["description"]="LIMBU VOWEL SIGN EE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1923, -- ᤣ
+ },
+ [0x1924]={
+ ["category"]="mc",
+ ["description"]="LIMBU VOWEL SIGN AI",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1924, -- ᤤ
+ },
+ [0x1925]={
+ ["category"]="mc",
+ ["description"]="LIMBU VOWEL SIGN OO",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1925, -- ᤥ
+ },
+ [0x1926]={
+ ["category"]="mc",
+ ["description"]="LIMBU VOWEL SIGN AU",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1926, -- ᤦ
+ },
+ [0x1927]={
+ ["category"]="mn",
+ ["description"]="LIMBU VOWEL SIGN E",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1927, -- ᤧ
+ },
+ [0x1928]={
+ ["category"]="mn",
+ ["description"]="LIMBU VOWEL SIGN O",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1928, -- ᤨ
+ },
+ [0x1929]={
+ ["category"]="mc",
+ ["description"]="LIMBU SUBJOINED LETTER YA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1929, -- ᤩ
+ },
+ [0x192A]={
+ ["category"]="mc",
+ ["description"]="LIMBU SUBJOINED LETTER RA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x192A, -- ᤪ
+ },
+ [0x192B]={
+ ["category"]="mc",
+ ["description"]="LIMBU SUBJOINED LETTER WA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x192B, -- ᤫ
+ },
+ [0x1930]={
+ ["category"]="mc",
+ ["description"]="LIMBU SMALL LETTER KA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1930, -- ᤰ
+ },
+ [0x1931]={
+ ["category"]="mc",
+ ["description"]="LIMBU SMALL LETTER NGA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1931, -- ᤱ
+ },
+ [0x1932]={
+ ["category"]="mn",
+ ["description"]="LIMBU SMALL LETTER ANUSVARA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1932, -- ᤲ
+ },
+ [0x1933]={
+ ["category"]="mc",
+ ["description"]="LIMBU SMALL LETTER TA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1933, -- ᤳ
+ },
+ [0x1934]={
+ ["category"]="mc",
+ ["description"]="LIMBU SMALL LETTER NA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1934, -- ᤴ
+ },
+ [0x1935]={
+ ["category"]="mc",
+ ["description"]="LIMBU SMALL LETTER PA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1935, -- ᤵ
+ },
+ [0x1936]={
+ ["category"]="mc",
+ ["description"]="LIMBU SMALL LETTER MA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1936, -- ᤶ
+ },
+ [0x1937]={
+ ["category"]="mc",
+ ["description"]="LIMBU SMALL LETTER RA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1937, -- ᤷ
+ },
+ [0x1938]={
+ ["category"]="mc",
+ ["description"]="LIMBU SMALL LETTER LA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1938, -- ᤸ
+ },
+ [0x1939]={
+ ["category"]="mn",
+ ["description"]="LIMBU SIGN MUKPHRENG",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1939, -- ᤹
+ },
+ [0x193A]={
+ ["category"]="mn",
+ ["description"]="LIMBU SIGN KEMPHRENG",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x193A, -- ᤺
+ },
+ [0x193B]={
+ ["category"]="mn",
+ ["description"]="LIMBU SIGN SA-I",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x193B, -- ᤻
+ },
+ [0x1940]={
+ ["category"]="so",
+ ["description"]="LIMBU SIGN LOO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1940, -- ᥀
+ },
+ [0x1944]={
+ ["category"]="po",
+ ["description"]="LIMBU EXCLAMATION MARK",
+ ["linebreak"]="ex",
+ ["unicodeslot"]=0x1944, -- ᥄
+ },
+ [0x1945]={
+ ["category"]="po",
+ ["description"]="LIMBU QUESTION MARK",
+ ["linebreak"]="ex",
+ ["unicodeslot"]=0x1945, -- ᥅
+ },
+ [0x1946]={
+ ["category"]="nd",
+ ["description"]="LIMBU DIGIT ZERO",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x1946, -- ᥆
+ },
+ [0x1947]={
+ ["category"]="nd",
+ ["description"]="LIMBU DIGIT ONE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x1947, -- ᥇
+ },
+ [0x1948]={
+ ["category"]="nd",
+ ["description"]="LIMBU DIGIT TWO",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x1948, -- ᥈
+ },
+ [0x1949]={
+ ["category"]="nd",
+ ["description"]="LIMBU DIGIT THREE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x1949, -- ᥉
+ },
+ [0x194A]={
+ ["category"]="nd",
+ ["description"]="LIMBU DIGIT FOUR",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x194A, -- ᥊
+ },
+ [0x194B]={
+ ["category"]="nd",
+ ["description"]="LIMBU DIGIT FIVE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x194B, -- ᥋
+ },
+ [0x194C]={
+ ["category"]="nd",
+ ["description"]="LIMBU DIGIT SIX",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x194C, -- ᥌
+ },
+ [0x194D]={
+ ["category"]="nd",
+ ["description"]="LIMBU DIGIT SEVEN",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x194D, -- á¥
+ },
+ [0x194E]={
+ ["category"]="nd",
+ ["description"]="LIMBU DIGIT EIGHT",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x194E, -- ᥎
+ },
+ [0x194F]={
+ ["category"]="nd",
+ ["description"]="LIMBU DIGIT NINE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x194F, -- á¥
+ },
+ [0x1950]={
+ ["category"]="lo",
+ ["description"]="TAI LE LETTER KA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1950, -- á¥
+ },
+ [0x1951]={
+ ["category"]="lo",
+ ["description"]="TAI LE LETTER XA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1951, -- ᥑ
+ },
+ [0x1952]={
+ ["category"]="lo",
+ ["description"]="TAI LE LETTER NGA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1952, -- ᥒ
+ },
+ [0x1953]={
+ ["category"]="lo",
+ ["description"]="TAI LE LETTER TSA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1953, -- ᥓ
+ },
+ [0x1954]={
+ ["category"]="lo",
+ ["description"]="TAI LE LETTER SA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1954, -- ᥔ
+ },
+ [0x1955]={
+ ["category"]="lo",
+ ["description"]="TAI LE LETTER YA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1955, -- ᥕ
+ },
+ [0x1956]={
+ ["category"]="lo",
+ ["description"]="TAI LE LETTER TA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1956, -- ᥖ
+ },
+ [0x1957]={
+ ["category"]="lo",
+ ["description"]="TAI LE LETTER THA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1957, -- ᥗ
+ },
+ [0x1958]={
+ ["category"]="lo",
+ ["description"]="TAI LE LETTER LA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1958, -- ᥘ
+ },
+ [0x1959]={
+ ["category"]="lo",
+ ["description"]="TAI LE LETTER PA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1959, -- ᥙ
+ },
+ [0x195A]={
+ ["category"]="lo",
+ ["description"]="TAI LE LETTER PHA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x195A, -- ᥚ
+ },
+ [0x195B]={
+ ["category"]="lo",
+ ["description"]="TAI LE LETTER MA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x195B, -- ᥛ
+ },
+ [0x195C]={
+ ["category"]="lo",
+ ["description"]="TAI LE LETTER FA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x195C, -- ᥜ
+ },
+ [0x195D]={
+ ["category"]="lo",
+ ["description"]="TAI LE LETTER VA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x195D, -- á¥
+ },
+ [0x195E]={
+ ["category"]="lo",
+ ["description"]="TAI LE LETTER HA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x195E, -- ᥞ
+ },
+ [0x195F]={
+ ["category"]="lo",
+ ["description"]="TAI LE LETTER QA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x195F, -- ᥟ
+ },
+ [0x1960]={
+ ["category"]="lo",
+ ["description"]="TAI LE LETTER KHA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1960, -- ᥠ
+ },
+ [0x1961]={
+ ["category"]="lo",
+ ["description"]="TAI LE LETTER TSHA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1961, -- ᥡ
+ },
+ [0x1962]={
+ ["category"]="lo",
+ ["description"]="TAI LE LETTER NA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1962, -- ᥢ
+ },
+ [0x1963]={
+ ["category"]="lo",
+ ["description"]="TAI LE LETTER A",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1963, -- ᥣ
+ },
+ [0x1964]={
+ ["category"]="lo",
+ ["description"]="TAI LE LETTER I",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1964, -- ᥤ
+ },
+ [0x1965]={
+ ["category"]="lo",
+ ["description"]="TAI LE LETTER EE",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1965, -- ᥥ
+ },
+ [0x1966]={
+ ["category"]="lo",
+ ["description"]="TAI LE LETTER EH",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1966, -- ᥦ
+ },
+ [0x1967]={
+ ["category"]="lo",
+ ["description"]="TAI LE LETTER U",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1967, -- ᥧ
+ },
+ [0x1968]={
+ ["category"]="lo",
+ ["description"]="TAI LE LETTER OO",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1968, -- ᥨ
+ },
+ [0x1969]={
+ ["category"]="lo",
+ ["description"]="TAI LE LETTER O",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1969, -- ᥩ
+ },
+ [0x196A]={
+ ["category"]="lo",
+ ["description"]="TAI LE LETTER UE",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x196A, -- ᥪ
+ },
+ [0x196B]={
+ ["category"]="lo",
+ ["description"]="TAI LE LETTER E",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x196B, -- ᥫ
+ },
+ [0x196C]={
+ ["category"]="lo",
+ ["description"]="TAI LE LETTER AUE",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x196C, -- ᥬ
+ },
+ [0x196D]={
+ ["category"]="lo",
+ ["description"]="TAI LE LETTER AI",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x196D, -- ᥭ
+ },
+ [0x1970]={
+ ["category"]="lo",
+ ["description"]="TAI LE LETTER TONE-0x0002",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1970, -- ᥰ
+ },
+ [0x1971]={
+ ["category"]="lo",
+ ["description"]="TAI LE LETTER TONE-0x0003",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1971, -- ᥱ
+ },
+ [0x1972]={
+ ["category"]="lo",
+ ["description"]="TAI LE LETTER TONE-0x0004",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1972, -- ᥲ
+ },
+ [0x1973]={
+ ["category"]="lo",
+ ["description"]="TAI LE LETTER TONE-0x0005",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1973, -- ᥳ
+ },
+ [0x1974]={
+ ["category"]="lo",
+ ["description"]="TAI LE LETTER TONE-0x0006",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1974, -- ᥴ
+ },
+ [0x1980]={
+ ["category"]="lo",
+ ["description"]="NEW TAI LUE LETTER HIGH QA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1980, -- ᦀ
+ },
+ [0x1981]={
+ ["category"]="lo",
+ ["description"]="NEW TAI LUE LETTER LOW QA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1981, -- á¦
+ },
+ [0x1982]={
+ ["category"]="lo",
+ ["description"]="NEW TAI LUE LETTER HIGH KA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1982, -- ᦂ
+ },
+ [0x1983]={
+ ["category"]="lo",
+ ["description"]="NEW TAI LUE LETTER HIGH XA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1983, -- ᦃ
+ },
+ [0x1984]={
+ ["category"]="lo",
+ ["description"]="NEW TAI LUE LETTER HIGH NGA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1984, -- ᦄ
+ },
+ [0x1985]={
+ ["category"]="lo",
+ ["description"]="NEW TAI LUE LETTER LOW KA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1985, -- ᦅ
+ },
+ [0x1986]={
+ ["category"]="lo",
+ ["description"]="NEW TAI LUE LETTER LOW XA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1986, -- ᦆ
+ },
+ [0x1987]={
+ ["category"]="lo",
+ ["description"]="NEW TAI LUE LETTER LOW NGA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1987, -- ᦇ
+ },
+ [0x1988]={
+ ["category"]="lo",
+ ["description"]="NEW TAI LUE LETTER HIGH TSA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1988, -- ᦈ
+ },
+ [0x1989]={
+ ["category"]="lo",
+ ["description"]="NEW TAI LUE LETTER HIGH SA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1989, -- ᦉ
+ },
+ [0x198A]={
+ ["category"]="lo",
+ ["description"]="NEW TAI LUE LETTER HIGH YA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x198A, -- ᦊ
+ },
+ [0x198B]={
+ ["category"]="lo",
+ ["description"]="NEW TAI LUE LETTER LOW TSA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x198B, -- ᦋ
+ },
+ [0x198C]={
+ ["category"]="lo",
+ ["description"]="NEW TAI LUE LETTER LOW SA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x198C, -- ᦌ
+ },
+ [0x198D]={
+ ["category"]="lo",
+ ["description"]="NEW TAI LUE LETTER LOW YA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x198D, -- á¦
+ },
+ [0x198E]={
+ ["category"]="lo",
+ ["description"]="NEW TAI LUE LETTER HIGH TA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x198E, -- ᦎ
+ },
+ [0x198F]={
+ ["category"]="lo",
+ ["description"]="NEW TAI LUE LETTER HIGH THA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x198F, -- á¦
+ },
+ [0x1990]={
+ ["category"]="lo",
+ ["description"]="NEW TAI LUE LETTER HIGH NA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1990, -- á¦
+ },
+ [0x1991]={
+ ["category"]="lo",
+ ["description"]="NEW TAI LUE LETTER LOW TA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1991, -- ᦑ
+ },
+ [0x1992]={
+ ["category"]="lo",
+ ["description"]="NEW TAI LUE LETTER LOW THA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1992, -- ᦒ
+ },
+ [0x1993]={
+ ["category"]="lo",
+ ["description"]="NEW TAI LUE LETTER LOW NA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1993, -- ᦓ
+ },
+ [0x1994]={
+ ["category"]="lo",
+ ["description"]="NEW TAI LUE LETTER HIGH PA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1994, -- ᦔ
+ },
+ [0x1995]={
+ ["category"]="lo",
+ ["description"]="NEW TAI LUE LETTER HIGH PHA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1995, -- ᦕ
+ },
+ [0x1996]={
+ ["category"]="lo",
+ ["description"]="NEW TAI LUE LETTER HIGH MA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1996, -- ᦖ
+ },
+ [0x1997]={
+ ["category"]="lo",
+ ["description"]="NEW TAI LUE LETTER LOW PA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1997, -- ᦗ
+ },
+ [0x1998]={
+ ["category"]="lo",
+ ["description"]="NEW TAI LUE LETTER LOW PHA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1998, -- ᦘ
+ },
+ [0x1999]={
+ ["category"]="lo",
+ ["description"]="NEW TAI LUE LETTER LOW MA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x1999, -- ᦙ
+ },
+ [0x199A]={
+ ["category"]="lo",
+ ["description"]="NEW TAI LUE LETTER HIGH FA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x199A, -- ᦚ
+ },
+ [0x199B]={
+ ["category"]="lo",
+ ["description"]="NEW TAI LUE LETTER HIGH VA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x199B, -- ᦛ
+ },
+ [0x199C]={
+ ["category"]="lo",
+ ["description"]="NEW TAI LUE LETTER HIGH LA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x199C, -- ᦜ
+ },
+ [0x199D]={
+ ["category"]="lo",
+ ["description"]="NEW TAI LUE LETTER LOW FA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x199D, -- á¦
+ },
+ [0x199E]={
+ ["category"]="lo",
+ ["description"]="NEW TAI LUE LETTER LOW VA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x199E, -- ᦞ
+ },
+ [0x199F]={
+ ["category"]="lo",
+ ["description"]="NEW TAI LUE LETTER LOW LA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x199F, -- ᦟ
+ },
+ [0x19A0]={
+ ["category"]="lo",
+ ["description"]="NEW TAI LUE LETTER HIGH HA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x19A0, -- ᦠ
+ },
+ [0x19A1]={
+ ["category"]="lo",
+ ["description"]="NEW TAI LUE LETTER HIGH DA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x19A1, -- ᦡ
+ },
+ [0x19A2]={
+ ["category"]="lo",
+ ["description"]="NEW TAI LUE LETTER HIGH BA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x19A2, -- ᦢ
+ },
+ [0x19A3]={
+ ["category"]="lo",
+ ["description"]="NEW TAI LUE LETTER LOW HA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x19A3, -- ᦣ
+ },
+ [0x19A4]={
+ ["category"]="lo",
+ ["description"]="NEW TAI LUE LETTER LOW DA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x19A4, -- ᦤ
+ },
+ [0x19A5]={
+ ["category"]="lo",
+ ["description"]="NEW TAI LUE LETTER LOW BA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x19A5, -- ᦥ
+ },
+ [0x19A6]={
+ ["category"]="lo",
+ ["description"]="NEW TAI LUE LETTER HIGH KVA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x19A6, -- ᦦ
+ },
+ [0x19A7]={
+ ["category"]="lo",
+ ["description"]="NEW TAI LUE LETTER HIGH XVA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x19A7, -- ᦧ
+ },
+ [0x19A8]={
+ ["category"]="lo",
+ ["description"]="NEW TAI LUE LETTER LOW KVA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x19A8, -- ᦨ
+ },
+ [0x19A9]={
+ ["category"]="lo",
+ ["description"]="NEW TAI LUE LETTER LOW XVA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x19A9, -- ᦩ
+ },
+ [0x19B0]={
+ ["category"]="mc",
+ ["description"]="NEW TAI LUE VOWEL SIGN VOWEL SHORTENER",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x19B0, -- ᦰ
+ },
+ [0x19B1]={
+ ["category"]="mc",
+ ["description"]="NEW TAI LUE VOWEL SIGN AA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x19B1, -- ᦱ
+ },
+ [0x19B2]={
+ ["category"]="mc",
+ ["description"]="NEW TAI LUE VOWEL SIGN II",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x19B2, -- ᦲ
+ },
+ [0x19B3]={
+ ["category"]="mc",
+ ["description"]="NEW TAI LUE VOWEL SIGN U",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x19B3, -- ᦳ
+ },
+ [0x19B4]={
+ ["category"]="mc",
+ ["description"]="NEW TAI LUE VOWEL SIGN UU",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x19B4, -- ᦴ
+ },
+ [0x19B5]={
+ ["category"]="mc",
+ ["description"]="NEW TAI LUE VOWEL SIGN E",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x19B5, -- ᦵ
+ },
+ [0x19B6]={
+ ["category"]="mc",
+ ["description"]="NEW TAI LUE VOWEL SIGN AE",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x19B6, -- ᦶ
+ },
+ [0x19B7]={
+ ["category"]="mc",
+ ["description"]="NEW TAI LUE VOWEL SIGN O",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x19B7, -- ᦷ
+ },
+ [0x19B8]={
+ ["category"]="mc",
+ ["description"]="NEW TAI LUE VOWEL SIGN OA",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x19B8, -- ᦸ
+ },
+ [0x19B9]={
+ ["category"]="mc",
+ ["description"]="NEW TAI LUE VOWEL SIGN UE",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x19B9, -- ᦹ
+ },
+ [0x19BA]={
+ ["category"]="mc",
+ ["description"]="NEW TAI LUE VOWEL SIGN AY",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x19BA, -- ᦺ
+ },
+ [0x19BB]={
+ ["category"]="mc",
+ ["description"]="NEW TAI LUE VOWEL SIGN AAY",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x19BB, -- ᦻ
+ },
+ [0x19BC]={
+ ["category"]="mc",
+ ["description"]="NEW TAI LUE VOWEL SIGN UY",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x19BC, -- ᦼ
+ },
+ [0x19BD]={
+ ["category"]="mc",
+ ["description"]="NEW TAI LUE VOWEL SIGN OY",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x19BD, -- ᦽ
+ },
+ [0x19BE]={
+ ["category"]="mc",
+ ["description"]="NEW TAI LUE VOWEL SIGN OAY",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x19BE, -- ᦾ
+ },
+ [0x19BF]={
+ ["category"]="mc",
+ ["description"]="NEW TAI LUE VOWEL SIGN UEY",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x19BF, -- ᦿ
+ },
+ [0x19C0]={
+ ["category"]="mc",
+ ["description"]="NEW TAI LUE VOWEL SIGN IY",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x19C0, -- ᧀ
+ },
+ [0x19C1]={
+ ["category"]="lo",
+ ["description"]="NEW TAI LUE LETTER FINAL V",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x19C1, -- á§
+ },
+ [0x19C2]={
+ ["category"]="lo",
+ ["description"]="NEW TAI LUE LETTER FINAL NG",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x19C2, -- ᧂ
+ },
+ [0x19C3]={
+ ["category"]="lo",
+ ["description"]="NEW TAI LUE LETTER FINAL N",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x19C3, -- ᧃ
+ },
+ [0x19C4]={
+ ["category"]="lo",
+ ["description"]="NEW TAI LUE LETTER FINAL M",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x19C4, -- ᧄ
+ },
+ [0x19C5]={
+ ["category"]="lo",
+ ["description"]="NEW TAI LUE LETTER FINAL K",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x19C5, -- ᧅ
+ },
+ [0x19C6]={
+ ["category"]="lo",
+ ["description"]="NEW TAI LUE LETTER FINAL D",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x19C6, -- ᧆ
+ },
+ [0x19C7]={
+ ["category"]="lo",
+ ["description"]="NEW TAI LUE LETTER FINAL B",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x19C7, -- ᧇ
+ },
+ [0x19C8]={
+ ["category"]="mc",
+ ["description"]="NEW TAI LUE TONE MARK-0x0001",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x19C8, -- ᧈ
+ },
+ [0x19C9]={
+ ["category"]="mc",
+ ["description"]="NEW TAI LUE TONE MARK-0x0002",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x19C9, -- ᧉ
+ },
+ [0x19D0]={
+ ["category"]="nd",
+ ["description"]="NEW TAI LUE DIGIT ZERO",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x19D0, -- á§
+ },
+ [0x19D1]={
+ ["category"]="nd",
+ ["description"]="NEW TAI LUE DIGIT ONE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x19D1, -- ᧑
+ },
+ [0x19D2]={
+ ["category"]="nd",
+ ["description"]="NEW TAI LUE DIGIT TWO",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x19D2, -- ᧒
+ },
+ [0x19D3]={
+ ["category"]="nd",
+ ["description"]="NEW TAI LUE DIGIT THREE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x19D3, -- ᧓
+ },
+ [0x19D4]={
+ ["category"]="nd",
+ ["description"]="NEW TAI LUE DIGIT FOUR",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x19D4, -- ᧔
+ },
+ [0x19D5]={
+ ["category"]="nd",
+ ["description"]="NEW TAI LUE DIGIT FIVE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x19D5, -- ᧕
+ },
+ [0x19D6]={
+ ["category"]="nd",
+ ["description"]="NEW TAI LUE DIGIT SIX",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x19D6, -- ᧖
+ },
+ [0x19D7]={
+ ["category"]="nd",
+ ["description"]="NEW TAI LUE DIGIT SEVEN",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x19D7, -- ᧗
+ },
+ [0x19D8]={
+ ["category"]="nd",
+ ["description"]="NEW TAI LUE DIGIT EIGHT",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x19D8, -- ᧘
+ },
+ [0x19D9]={
+ ["category"]="nd",
+ ["description"]="NEW TAI LUE DIGIT NINE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x19D9, -- ᧙
+ },
+ [0x19DE]={
+ ["category"]="po",
+ ["description"]="NEW TAI LUE SIGN LAE",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x19DE, -- ᧞
+ },
+ [0x19DF]={
+ ["category"]="po",
+ ["description"]="NEW TAI LUE SIGN LAEV",
+ ["linebreak"]="sa",
+ ["unicodeslot"]=0x19DF, -- ᧟
+ },
+ [0x19E0]={
+ ["category"]="so",
+ ["description"]="KHMER SYMBOL PATHAMASAT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x19E0, -- ᧠
+ },
+ [0x19E1]={
+ ["category"]="so",
+ ["description"]="KHMER SYMBOL MUOY KOET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x19E1, -- ᧡
+ },
+ [0x19E2]={
+ ["category"]="so",
+ ["description"]="KHMER SYMBOL PII KOET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x19E2, -- ᧢
+ },
+ [0x19E3]={
+ ["category"]="so",
+ ["description"]="KHMER SYMBOL BEI KOET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x19E3, -- ᧣
+ },
+ [0x19E4]={
+ ["category"]="so",
+ ["description"]="KHMER SYMBOL BUON KOET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x19E4, -- ᧤
+ },
+ [0x19E5]={
+ ["category"]="so",
+ ["description"]="KHMER SYMBOL PRAM KOET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x19E5, -- ᧥
+ },
+ [0x19E6]={
+ ["category"]="so",
+ ["description"]="KHMER SYMBOL PRAM-MUOY KOET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x19E6, -- ᧦
+ },
+ [0x19E7]={
+ ["category"]="so",
+ ["description"]="KHMER SYMBOL PRAM-PII KOET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x19E7, -- ᧧
+ },
+ [0x19E8]={
+ ["category"]="so",
+ ["description"]="KHMER SYMBOL PRAM-BEI KOET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x19E8, -- ᧨
+ },
+ [0x19E9]={
+ ["category"]="so",
+ ["description"]="KHMER SYMBOL PRAM-BUON KOET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x19E9, -- ᧩
+ },
+ [0x19EA]={
+ ["category"]="so",
+ ["description"]="KHMER SYMBOL DAP KOET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x19EA, -- ᧪
+ },
+ [0x19EB]={
+ ["category"]="so",
+ ["description"]="KHMER SYMBOL DAP-MUOY KOET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x19EB, -- ᧫
+ },
+ [0x19EC]={
+ ["category"]="so",
+ ["description"]="KHMER SYMBOL DAP-PII KOET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x19EC, -- ᧬
+ },
+ [0x19ED]={
+ ["category"]="so",
+ ["description"]="KHMER SYMBOL DAP-BEI KOET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x19ED, -- ᧭
+ },
+ [0x19EE]={
+ ["category"]="so",
+ ["description"]="KHMER SYMBOL DAP-BUON KOET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x19EE, -- ᧮
+ },
+ [0x19EF]={
+ ["category"]="so",
+ ["description"]="KHMER SYMBOL DAP-PRAM KOET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x19EF, -- ᧯
+ },
+ [0x19F0]={
+ ["category"]="so",
+ ["description"]="KHMER SYMBOL TUTEYASAT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x19F0, -- ᧰
+ },
+ [0x19F1]={
+ ["category"]="so",
+ ["description"]="KHMER SYMBOL MUOY ROC",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x19F1, -- ᧱
+ },
+ [0x19F2]={
+ ["category"]="so",
+ ["description"]="KHMER SYMBOL PII ROC",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x19F2, -- ᧲
+ },
+ [0x19F3]={
+ ["category"]="so",
+ ["description"]="KHMER SYMBOL BEI ROC",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x19F3, -- ᧳
+ },
+ [0x19F4]={
+ ["category"]="so",
+ ["description"]="KHMER SYMBOL BUON ROC",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x19F4, -- ᧴
+ },
+ [0x19F5]={
+ ["category"]="so",
+ ["description"]="KHMER SYMBOL PRAM ROC",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x19F5, -- ᧵
+ },
+ [0x19F6]={
+ ["category"]="so",
+ ["description"]="KHMER SYMBOL PRAM-MUOY ROC",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x19F6, -- ᧶
+ },
+ [0x19F7]={
+ ["category"]="so",
+ ["description"]="KHMER SYMBOL PRAM-PII ROC",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x19F7, -- ᧷
+ },
+ [0x19F8]={
+ ["category"]="so",
+ ["description"]="KHMER SYMBOL PRAM-BEI ROC",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x19F8, -- ᧸
+ },
+ [0x19F9]={
+ ["category"]="so",
+ ["description"]="KHMER SYMBOL PRAM-BUON ROC",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x19F9, -- ᧹
+ },
+ [0x19FA]={
+ ["category"]="so",
+ ["description"]="KHMER SYMBOL DAP ROC",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x19FA, -- ᧺
+ },
+ [0x19FB]={
+ ["category"]="so",
+ ["description"]="KHMER SYMBOL DAP-MUOY ROC",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x19FB, -- ᧻
+ },
+ [0x19FC]={
+ ["category"]="so",
+ ["description"]="KHMER SYMBOL DAP-PII ROC",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x19FC, -- ᧼
+ },
+ [0x19FD]={
+ ["category"]="so",
+ ["description"]="KHMER SYMBOL DAP-BEI ROC",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x19FD, -- ᧽
+ },
+ [0x19FE]={
+ ["category"]="so",
+ ["description"]="KHMER SYMBOL DAP-BUON ROC",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x19FE, -- ᧾
+ },
+ [0x19FF]={
+ ["category"]="so",
+ ["description"]="KHMER SYMBOL DAP-PRAM ROC",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x19FF, -- ᧿
+ },
+ [0x1A00]={
+ ["category"]="lo",
+ ["description"]="BUGINESE LETTER KA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1A00, -- ᨀ
+ },
+ [0x1A01]={
+ ["category"]="lo",
+ ["description"]="BUGINESE LETTER GA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1A01, -- á¨
+ },
+ [0x1A02]={
+ ["category"]="lo",
+ ["description"]="BUGINESE LETTER NGA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1A02, -- ᨂ
+ },
+ [0x1A03]={
+ ["category"]="lo",
+ ["description"]="BUGINESE LETTER NGKA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1A03, -- ᨃ
+ },
+ [0x1A04]={
+ ["category"]="lo",
+ ["description"]="BUGINESE LETTER PA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1A04, -- ᨄ
+ },
+ [0x1A05]={
+ ["category"]="lo",
+ ["description"]="BUGINESE LETTER BA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1A05, -- ᨅ
+ },
+ [0x1A06]={
+ ["category"]="lo",
+ ["description"]="BUGINESE LETTER MA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1A06, -- ᨆ
+ },
+ [0x1A07]={
+ ["category"]="lo",
+ ["description"]="BUGINESE LETTER MPA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1A07, -- ᨇ
+ },
+ [0x1A08]={
+ ["category"]="lo",
+ ["description"]="BUGINESE LETTER TA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1A08, -- ᨈ
+ },
+ [0x1A09]={
+ ["category"]="lo",
+ ["description"]="BUGINESE LETTER DA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1A09, -- ᨉ
+ },
+ [0x1A0A]={
+ ["category"]="lo",
+ ["description"]="BUGINESE LETTER NA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1A0A, -- ᨊ
+ },
+ [0x1A0B]={
+ ["category"]="lo",
+ ["description"]="BUGINESE LETTER NRA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1A0B, -- ᨋ
+ },
+ [0x1A0C]={
+ ["category"]="lo",
+ ["description"]="BUGINESE LETTER CA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1A0C, -- ᨌ
+ },
+ [0x1A0D]={
+ ["category"]="lo",
+ ["description"]="BUGINESE LETTER JA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1A0D, -- á¨
+ },
+ [0x1A0E]={
+ ["category"]="lo",
+ ["description"]="BUGINESE LETTER NYA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1A0E, -- ᨎ
+ },
+ [0x1A0F]={
+ ["category"]="lo",
+ ["description"]="BUGINESE LETTER NYCA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1A0F, -- á¨
+ },
+ [0x1A10]={
+ ["category"]="lo",
+ ["description"]="BUGINESE LETTER YA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1A10, -- á¨
+ },
+ [0x1A11]={
+ ["category"]="lo",
+ ["description"]="BUGINESE LETTER RA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1A11, -- ᨑ
+ },
+ [0x1A12]={
+ ["category"]="lo",
+ ["description"]="BUGINESE LETTER LA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1A12, -- ᨒ
+ },
+ [0x1A13]={
+ ["category"]="lo",
+ ["description"]="BUGINESE LETTER VA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1A13, -- ᨓ
+ },
+ [0x1A14]={
+ ["category"]="lo",
+ ["description"]="BUGINESE LETTER SA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1A14, -- ᨔ
+ },
+ [0x1A15]={
+ ["category"]="lo",
+ ["description"]="BUGINESE LETTER A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1A15, -- ᨕ
+ },
+ [0x1A16]={
+ ["category"]="lo",
+ ["description"]="BUGINESE LETTER HA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1A16, -- ᨖ
+ },
+ [0x1A17]={
+ ["category"]="mn",
+ ["description"]="BUGINESE VOWEL SIGN I",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1A17, -- ᨗ
+ },
+ [0x1A18]={
+ ["category"]="mn",
+ ["description"]="BUGINESE VOWEL SIGN U",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1A18, -- ᨘ
+ },
+ [0x1A19]={
+ ["category"]="mc",
+ ["description"]="BUGINESE VOWEL SIGN E",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1A19, -- ᨙ
+ },
+ [0x1A1A]={
+ ["category"]="mc",
+ ["description"]="BUGINESE VOWEL SIGN O",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1A1A, -- ᨚ
+ },
+ [0x1A1B]={
+ ["category"]="mc",
+ ["description"]="BUGINESE VOWEL SIGN AE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1A1B, -- ᨛ
+ },
+ [0x1A1E]={
+ ["category"]="po",
+ ["description"]="BUGINESE PALLAWA",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x1A1E, -- ᨞
+ },
+ [0x1A1F]={
+ ["category"]="po",
+ ["description"]="BUGINESE END OF SECTION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1A1F, -- ᨟
+ },
+ [0x1B00]={
+ ["category"]="mn",
+ ["description"]="BALINESE SIGN ULU RICEM",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1B00, -- ᬀ
+ },
+ [0x1B01]={
+ ["category"]="mn",
+ ["description"]="BALINESE SIGN ULU CANDRA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1B01, -- á¬
+ },
+ [0x1B02]={
+ ["category"]="mn",
+ ["description"]="BALINESE SIGN CECEK",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1B02, -- ᬂ
+ },
+ [0x1B03]={
+ ["category"]="mn",
+ ["description"]="BALINESE SIGN SURANG",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1B03, -- ᬃ
+ },
+ [0x1B04]={
+ ["category"]="mc",
+ ["description"]="BALINESE SIGN BISAH",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1B04, -- ᬄ
+ },
+ [0x1B05]={
+ ["category"]="lo",
+ ["description"]="BALINESE LETTER AKARA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B05, -- ᬅ
+ },
+ [0x1B06]={
+ ["category"]="lo",
+ ["description"]="BALINESE LETTER AKARA TEDUNG",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x1B05, 0x1B35 },
+ ["unicodeslot"]=0x1B06, -- ᬆ
+ },
+ [0x1B07]={
+ ["category"]="lo",
+ ["description"]="BALINESE LETTER IKARA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B07, -- ᬇ
+ },
+ [0x1B08]={
+ ["category"]="lo",
+ ["description"]="BALINESE LETTER IKARA TEDUNG",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x1B07, 0x1B35 },
+ ["unicodeslot"]=0x1B08, -- ᬈ
+ },
+ [0x1B09]={
+ ["category"]="lo",
+ ["description"]="BALINESE LETTER UKARA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B09, -- ᬉ
+ },
+ [0x1B0A]={
+ ["category"]="lo",
+ ["description"]="BALINESE LETTER UKARA TEDUNG",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x1B09, 0x1B35 },
+ ["unicodeslot"]=0x1B0A, -- ᬊ
+ },
+ [0x1B0B]={
+ ["category"]="lo",
+ ["description"]="BALINESE LETTER RA REPA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B0B, -- ᬋ
+ },
+ [0x1B0C]={
+ ["category"]="lo",
+ ["description"]="BALINESE LETTER RA REPA TEDUNG",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x1B0B, 0x1B35 },
+ ["unicodeslot"]=0x1B0C, -- ᬌ
+ },
+ [0x1B0D]={
+ ["category"]="lo",
+ ["description"]="BALINESE LETTER LA LENGA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B0D, -- á¬
+ },
+ [0x1B0E]={
+ ["category"]="lo",
+ ["description"]="BALINESE LETTER LA LENGA TEDUNG",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x1B0D, 0x1B35 },
+ ["unicodeslot"]=0x1B0E, -- ᬎ
+ },
+ [0x1B0F]={
+ ["category"]="lo",
+ ["description"]="BALINESE LETTER EKARA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B0F, -- á¬
+ },
+ [0x1B10]={
+ ["category"]="lo",
+ ["description"]="BALINESE LETTER AIKARA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B10, -- á¬
+ },
+ [0x1B11]={
+ ["category"]="lo",
+ ["description"]="BALINESE LETTER OKARA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B11, -- ᬑ
+ },
+ [0x1B12]={
+ ["category"]="lo",
+ ["description"]="BALINESE LETTER OKARA TEDUNG",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x1B11, 0x1B35 },
+ ["unicodeslot"]=0x1B12, -- ᬒ
+ },
+ [0x1B13]={
+ ["category"]="lo",
+ ["description"]="BALINESE LETTER KA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B13, -- ᬓ
+ },
+ [0x1B14]={
+ ["category"]="lo",
+ ["description"]="BALINESE LETTER KA MAHAPRANA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B14, -- ᬔ
+ },
+ [0x1B15]={
+ ["category"]="lo",
+ ["description"]="BALINESE LETTER GA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B15, -- ᬕ
+ },
+ [0x1B16]={
+ ["category"]="lo",
+ ["description"]="BALINESE LETTER GA GORA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B16, -- ᬖ
+ },
+ [0x1B17]={
+ ["category"]="lo",
+ ["description"]="BALINESE LETTER NGA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B17, -- ᬗ
+ },
+ [0x1B18]={
+ ["category"]="lo",
+ ["description"]="BALINESE LETTER CA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B18, -- ᬘ
+ },
+ [0x1B19]={
+ ["category"]="lo",
+ ["description"]="BALINESE LETTER CA LACA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B19, -- ᬙ
+ },
+ [0x1B1A]={
+ ["category"]="lo",
+ ["description"]="BALINESE LETTER JA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B1A, -- ᬚ
+ },
+ [0x1B1B]={
+ ["category"]="lo",
+ ["description"]="BALINESE LETTER JA JERA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B1B, -- ᬛ
+ },
+ [0x1B1C]={
+ ["category"]="lo",
+ ["description"]="BALINESE LETTER NYA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B1C, -- ᬜ
+ },
+ [0x1B1D]={
+ ["category"]="lo",
+ ["description"]="BALINESE LETTER TA LATIK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B1D, -- á¬
+ },
+ [0x1B1E]={
+ ["category"]="lo",
+ ["description"]="BALINESE LETTER TA MURDA MAHAPRANA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B1E, -- ᬞ
+ },
+ [0x1B1F]={
+ ["category"]="lo",
+ ["description"]="BALINESE LETTER DA MURDA ALPAPRANA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B1F, -- ᬟ
+ },
+ [0x1B20]={
+ ["category"]="lo",
+ ["description"]="BALINESE LETTER DA MURDA MAHAPRANA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B20, -- ᬠ
+ },
+ [0x1B21]={
+ ["category"]="lo",
+ ["description"]="BALINESE LETTER NA RAMBAT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B21, -- ᬡ
+ },
+ [0x1B22]={
+ ["category"]="lo",
+ ["description"]="BALINESE LETTER TA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B22, -- ᬢ
+ },
+ [0x1B23]={
+ ["category"]="lo",
+ ["description"]="BALINESE LETTER TA TAWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B23, -- ᬣ
+ },
+ [0x1B24]={
+ ["category"]="lo",
+ ["description"]="BALINESE LETTER DA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B24, -- ᬤ
+ },
+ [0x1B25]={
+ ["category"]="lo",
+ ["description"]="BALINESE LETTER DA MADU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B25, -- ᬥ
+ },
+ [0x1B26]={
+ ["category"]="lo",
+ ["description"]="BALINESE LETTER NA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B26, -- ᬦ
+ },
+ [0x1B27]={
+ ["category"]="lo",
+ ["description"]="BALINESE LETTER PA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B27, -- ᬧ
+ },
+ [0x1B28]={
+ ["category"]="lo",
+ ["description"]="BALINESE LETTER PA KAPAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B28, -- ᬨ
+ },
+ [0x1B29]={
+ ["category"]="lo",
+ ["description"]="BALINESE LETTER BA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B29, -- ᬩ
+ },
+ [0x1B2A]={
+ ["category"]="lo",
+ ["description"]="BALINESE LETTER BA KEMBANG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B2A, -- ᬪ
+ },
+ [0x1B2B]={
+ ["category"]="lo",
+ ["description"]="BALINESE LETTER MA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B2B, -- ᬫ
+ },
+ [0x1B2C]={
+ ["category"]="lo",
+ ["description"]="BALINESE LETTER YA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B2C, -- ᬬ
+ },
+ [0x1B2D]={
+ ["category"]="lo",
+ ["description"]="BALINESE LETTER RA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B2D, -- ᬭ
+ },
+ [0x1B2E]={
+ ["category"]="lo",
+ ["description"]="BALINESE LETTER LA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B2E, -- ᬮ
+ },
+ [0x1B2F]={
+ ["category"]="lo",
+ ["description"]="BALINESE LETTER WA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B2F, -- ᬯ
+ },
+ [0x1B30]={
+ ["category"]="lo",
+ ["description"]="BALINESE LETTER SA SAGA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B30, -- ᬰ
+ },
+ [0x1B31]={
+ ["category"]="lo",
+ ["description"]="BALINESE LETTER SA SAPA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B31, -- ᬱ
+ },
+ [0x1B32]={
+ ["category"]="lo",
+ ["description"]="BALINESE LETTER SA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B32, -- ᬲ
+ },
+ [0x1B33]={
+ ["category"]="lo",
+ ["description"]="BALINESE LETTER HA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B33, -- ᬳ
+ },
+ [0x1B34]={
+ ["category"]="mn",
+ ["description"]="BALINESE SIGN REREKAN",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1B34, -- ᬴
+ },
+ [0x1B35]={
+ ["category"]="mc",
+ ["description"]="BALINESE VOWEL SIGN TEDUNG",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1B35, -- ᬵ
+ },
+ [0x1B36]={
+ ["category"]="mn",
+ ["description"]="BALINESE VOWEL SIGN ULU",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1B36, -- ᬶ
+ },
+ [0x1B37]={
+ ["category"]="mn",
+ ["description"]="BALINESE VOWEL SIGN ULU SARI",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1B37, -- ᬷ
+ },
+ [0x1B38]={
+ ["category"]="mn",
+ ["description"]="BALINESE VOWEL SIGN SUKU",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1B38, -- ᬸ
+ },
+ [0x1B39]={
+ ["category"]="mn",
+ ["description"]="BALINESE VOWEL SIGN SUKU ILUT",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1B39, -- ᬹ
+ },
+ [0x1B3A]={
+ ["category"]="mn",
+ ["description"]="BALINESE VOWEL SIGN RA REPA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1B3A, -- ᬺ
+ },
+ [0x1B3B]={
+ ["category"]="mc",
+ ["description"]="BALINESE VOWEL SIGN RA REPA TEDUNG",
+ ["linebreak"]="cm",
+ ["specials"]={ "char", 0x1B3A, 0x1B35 },
+ ["unicodeslot"]=0x1B3B, -- ᬻ
+ },
+ [0x1B3C]={
+ ["category"]="mn",
+ ["description"]="BALINESE VOWEL SIGN LA LENGA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1B3C, -- ᬼ
+ },
+ [0x1B3D]={
+ ["category"]="mc",
+ ["description"]="BALINESE VOWEL SIGN LA LENGA TEDUNG",
+ ["linebreak"]="cm",
+ ["specials"]={ "char", 0x1B3C, 0x1B35 },
+ ["unicodeslot"]=0x1B3D, -- ᬽ
+ },
+ [0x1B3E]={
+ ["category"]="mc",
+ ["description"]="BALINESE VOWEL SIGN TALING",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1B3E, -- ᬾ
+ },
+ [0x1B3F]={
+ ["category"]="mc",
+ ["description"]="BALINESE VOWEL SIGN TALING REPA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1B3F, -- ᬿ
+ },
+ [0x1B40]={
+ ["category"]="mc",
+ ["description"]="BALINESE VOWEL SIGN TALING TEDUNG",
+ ["linebreak"]="cm",
+ ["specials"]={ "char", 0x1B3E, 0x1B35 },
+ ["unicodeslot"]=0x1B40, -- á­€
+ },
+ [0x1B41]={
+ ["category"]="mc",
+ ["description"]="BALINESE VOWEL SIGN TALING REPA TEDUNG",
+ ["linebreak"]="cm",
+ ["specials"]={ "char", 0x1B3F, 0x1B35 },
+ ["unicodeslot"]=0x1B41, -- á­
+ },
+ [0x1B42]={
+ ["category"]="mn",
+ ["description"]="BALINESE VOWEL SIGN PEPET",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1B42, -- á­‚
+ },
+ [0x1B43]={
+ ["category"]="mc",
+ ["description"]="BALINESE VOWEL SIGN PEPET TEDUNG",
+ ["linebreak"]="cm",
+ ["specials"]={ "char", 0x1B42, 0x1B35 },
+ ["unicodeslot"]=0x1B43, -- á­ƒ
+ },
+ [0x1B44]={
+ ["category"]="mc",
+ ["description"]="BALINESE ADEG ADEG",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1B44, -- á­„
+ },
+ [0x1B45]={
+ ["category"]="lo",
+ ["description"]="BALINESE LETTER KAF SASAK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B45, -- á­…
+ },
+ [0x1B46]={
+ ["category"]="lo",
+ ["description"]="BALINESE LETTER KHOT SASAK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B46, -- á­†
+ },
+ [0x1B47]={
+ ["category"]="lo",
+ ["description"]="BALINESE LETTER TZIR SASAK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B47, -- á­‡
+ },
+ [0x1B48]={
+ ["category"]="lo",
+ ["description"]="BALINESE LETTER EF SASAK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B48, -- á­ˆ
+ },
+ [0x1B49]={
+ ["category"]="lo",
+ ["description"]="BALINESE LETTER VE SASAK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B49, -- á­‰
+ },
+ [0x1B4A]={
+ ["category"]="lo",
+ ["description"]="BALINESE LETTER ZAL SASAK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B4A, -- á­Š
+ },
+ [0x1B4B]={
+ ["category"]="lo",
+ ["description"]="BALINESE LETTER ASYURA SASAK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B4B, -- á­‹
+ },
+ [0x1B50]={
+ ["category"]="nd",
+ ["description"]="BALINESE DIGIT ZERO",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x1B50, -- á­
+ },
+ [0x1B51]={
+ ["category"]="nd",
+ ["description"]="BALINESE DIGIT ONE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x1B51, -- á­‘
+ },
+ [0x1B52]={
+ ["category"]="nd",
+ ["description"]="BALINESE DIGIT TWO",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x1B52, -- á­’
+ },
+ [0x1B53]={
+ ["category"]="nd",
+ ["description"]="BALINESE DIGIT THREE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x1B53, -- á­“
+ },
+ [0x1B54]={
+ ["category"]="nd",
+ ["description"]="BALINESE DIGIT FOUR",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x1B54, -- á­”
+ },
+ [0x1B55]={
+ ["category"]="nd",
+ ["description"]="BALINESE DIGIT FIVE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x1B55, -- á­•
+ },
+ [0x1B56]={
+ ["category"]="nd",
+ ["description"]="BALINESE DIGIT SIX",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x1B56, -- á­–
+ },
+ [0x1B57]={
+ ["category"]="nd",
+ ["description"]="BALINESE DIGIT SEVEN",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x1B57, -- á­—
+ },
+ [0x1B58]={
+ ["category"]="nd",
+ ["description"]="BALINESE DIGIT EIGHT",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x1B58, -- á­˜
+ },
+ [0x1B59]={
+ ["category"]="nd",
+ ["description"]="BALINESE DIGIT NINE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x1B59, -- á­™
+ },
+ [0x1B5A]={
+ ["category"]="po",
+ ["description"]="BALINESE PANTI",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x1B5A, -- á­š
+ },
+ [0x1B5B]={
+ ["category"]="po",
+ ["description"]="BALINESE PAMADA",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x1B5B, -- á­›
+ },
+ [0x1B5C]={
+ ["category"]="po",
+ ["description"]="BALINESE WINDU",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x1B5C, -- ᭜
+ },
+ [0x1B5D]={
+ ["category"]="po",
+ ["description"]="BALINESE CARIK PAMUNGKAH",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x1B5D, -- á­
+ },
+ [0x1B5E]={
+ ["category"]="po",
+ ["description"]="BALINESE CARIK SIKI",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x1B5E, -- á­ž
+ },
+ [0x1B5F]={
+ ["category"]="po",
+ ["description"]="BALINESE CARIK PAREREN",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x1B5F, -- á­Ÿ
+ },
+ [0x1B60]={
+ ["category"]="po",
+ ["description"]="BALINESE PAMENENG",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x1B60, -- á­ 
+ },
+ [0x1B61]={
+ ["category"]="so",
+ ["description"]="BALINESE MUSICAL SYMBOL DONG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B61, -- á­¡
+ },
+ [0x1B62]={
+ ["category"]="so",
+ ["description"]="BALINESE MUSICAL SYMBOL DENG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B62, -- á­¢
+ },
+ [0x1B63]={
+ ["category"]="so",
+ ["description"]="BALINESE MUSICAL SYMBOL DUNG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B63, -- á­£
+ },
+ [0x1B64]={
+ ["category"]="so",
+ ["description"]="BALINESE MUSICAL SYMBOL DANG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B64, -- á­¤
+ },
+ [0x1B65]={
+ ["category"]="so",
+ ["description"]="BALINESE MUSICAL SYMBOL DANG SURANG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B65, -- á­¥
+ },
+ [0x1B66]={
+ ["category"]="so",
+ ["description"]="BALINESE MUSICAL SYMBOL DING",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B66, -- á­¦
+ },
+ [0x1B67]={
+ ["category"]="so",
+ ["description"]="BALINESE MUSICAL SYMBOL DAENG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B67, -- á­§
+ },
+ [0x1B68]={
+ ["category"]="so",
+ ["description"]="BALINESE MUSICAL SYMBOL DEUNG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B68, -- á­¨
+ },
+ [0x1B69]={
+ ["category"]="so",
+ ["description"]="BALINESE MUSICAL SYMBOL DAING",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B69, -- á­©
+ },
+ [0x1B6A]={
+ ["category"]="so",
+ ["description"]="BALINESE MUSICAL SYMBOL DANG GEDE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B6A, -- á­ª
+ },
+ [0x1B6B]={
+ ["category"]="mn",
+ ["description"]="BALINESE MUSICAL SYMBOL COMBINING TEGEH",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1B6B, -- á­«
+ },
+ [0x1B6C]={
+ ["category"]="mn",
+ ["description"]="BALINESE MUSICAL SYMBOL COMBINING ENDEP",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1B6C, -- á­¬
+ },
+ [0x1B6D]={
+ ["category"]="mn",
+ ["description"]="BALINESE MUSICAL SYMBOL COMBINING KEMPUL",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1B6D, -- á­­
+ },
+ [0x1B6E]={
+ ["category"]="mn",
+ ["description"]="BALINESE MUSICAL SYMBOL COMBINING KEMPLI",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1B6E, -- á­®
+ },
+ [0x1B6F]={
+ ["category"]="mn",
+ ["description"]="BALINESE MUSICAL SYMBOL COMBINING JEGOGAN",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1B6F, -- á­¯
+ },
+ [0x1B70]={
+ ["category"]="mn",
+ ["description"]="BALINESE MUSICAL SYMBOL COMBINING KEMPUL WITH JEGOGAN",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1B70, -- á­°
+ },
+ [0x1B71]={
+ ["category"]="mn",
+ ["description"]="BALINESE MUSICAL SYMBOL COMBINING KEMPLI WITH JEGOGAN",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1B71, -- á­±
+ },
+ [0x1B72]={
+ ["category"]="mn",
+ ["description"]="BALINESE MUSICAL SYMBOL COMBINING BENDE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1B72, -- á­²
+ },
+ [0x1B73]={
+ ["category"]="mn",
+ ["description"]="BALINESE MUSICAL SYMBOL COMBINING GONG",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1B73, -- á­³
+ },
+ [0x1B74]={
+ ["category"]="so",
+ ["description"]="BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B74, -- á­´
+ },
+ [0x1B75]={
+ ["category"]="so",
+ ["description"]="BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DAG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B75, -- á­µ
+ },
+ [0x1B76]={
+ ["category"]="so",
+ ["description"]="BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TUK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B76, -- á­¶
+ },
+ [0x1B77]={
+ ["category"]="so",
+ ["description"]="BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TAK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B77, -- á­·
+ },
+ [0x1B78]={
+ ["category"]="so",
+ ["description"]="BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PANG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B78, -- á­¸
+ },
+ [0x1B79]={
+ ["category"]="so",
+ ["description"]="BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PUNG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B79, -- á­¹
+ },
+ [0x1B7A]={
+ ["category"]="so",
+ ["description"]="BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLAK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B7A, -- á­º
+ },
+ [0x1B7B]={
+ ["category"]="so",
+ ["description"]="BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLUK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B7B, -- á­»
+ },
+ [0x1B7C]={
+ ["category"]="so",
+ ["description"]="BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1B7C, -- á­¼
+ },
+ [0x1D00]={
+ ["category"]="ll",
+ ["description"]="LATIN LETTER SMALL CAPITAL A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D00, -- á´€
+ },
+ [0x1D01]={
+ ["category"]="ll",
+ ["description"]="LATIN LETTER SMALL CAPITAL AE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D01, -- á´
+ },
+ [0x1D02]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER TURNED AE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D02, -- á´‚
+ },
+ [0x1D03]={
+ ["category"]="ll",
+ ["description"]="LATIN LETTER SMALL CAPITAL BARRED B",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D03, -- á´ƒ
+ },
+ [0x1D04]={
+ ["category"]="ll",
+ ["description"]="LATIN LETTER SMALL CAPITAL C",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D04, -- á´„
+ },
+ [0x1D05]={
+ ["category"]="ll",
+ ["description"]="LATIN LETTER SMALL CAPITAL D",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D05, -- á´…
+ },
+ [0x1D06]={
+ ["category"]="ll",
+ ["description"]="LATIN LETTER SMALL CAPITAL ETH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D06, -- á´†
+ },
+ [0x1D07]={
+ ["category"]="ll",
+ ["description"]="LATIN LETTER SMALL CAPITAL E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D07, -- á´‡
+ },
+ [0x1D08]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER TURNED OPEN E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D08, -- á´ˆ
+ },
+ [0x1D09]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER TURNED I",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D09, -- á´‰
+ },
+ [0x1D0A]={
+ ["category"]="ll",
+ ["description"]="LATIN LETTER SMALL CAPITAL J",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0A, -- á´Š
+ },
+ [0x1D0B]={
+ ["category"]="ll",
+ ["description"]="LATIN LETTER SMALL CAPITAL K",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0B, -- á´‹
+ },
+ [0x1D0C]={
+ ["category"]="ll",
+ ["description"]="LATIN LETTER SMALL CAPITAL L WITH STROKE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0C, -- ᴌ
+ },
+ [0x1D0D]={
+ ["category"]="ll",
+ ["description"]="LATIN LETTER SMALL CAPITAL M",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0D, -- á´
+ },
+ [0x1D0E]={
+ ["category"]="ll",
+ ["description"]="LATIN LETTER SMALL CAPITAL REVERSED N",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0E, -- á´Ž
+ },
+ [0x1D0F]={
+ ["category"]="ll",
+ ["description"]="LATIN LETTER SMALL CAPITAL O",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0F, -- á´
+ },
+ [0x1D10]={
+ ["category"]="ll",
+ ["description"]="LATIN LETTER SMALL CAPITAL OPEN O",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D10, -- á´
+ },
+ [0x1D11]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER SIDEWAYS O",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D11, -- á´‘
+ },
+ [0x1D12]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER SIDEWAYS OPEN O",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D12, -- á´’
+ },
+ [0x1D13]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER SIDEWAYS O WITH STROKE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D13, -- á´“
+ },
+ [0x1D14]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER TURNED OE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D14, -- á´”
+ },
+ [0x1D15]={
+ ["category"]="ll",
+ ["description"]="LATIN LETTER SMALL CAPITAL OU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D15, -- á´•
+ },
+ [0x1D16]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER TOP HALF O",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D16, -- á´–
+ },
+ [0x1D17]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER BOTTOM HALF O",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D17, -- á´—
+ },
+ [0x1D18]={
+ ["category"]="ll",
+ ["description"]="LATIN LETTER SMALL CAPITAL P",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D18, -- á´˜
+ },
+ [0x1D19]={
+ ["category"]="ll",
+ ["description"]="LATIN LETTER SMALL CAPITAL REVERSED R",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D19, -- á´™
+ },
+ [0x1D1A]={
+ ["category"]="ll",
+ ["description"]="LATIN LETTER SMALL CAPITAL TURNED R",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D1A, -- á´š
+ },
+ [0x1D1B]={
+ ["category"]="ll",
+ ["description"]="LATIN LETTER SMALL CAPITAL T",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D1B, -- á´›
+ },
+ [0x1D1C]={
+ ["category"]="ll",
+ ["description"]="LATIN LETTER SMALL CAPITAL U",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D1C, -- ᴜ
+ },
+ [0x1D1D]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER SIDEWAYS U",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D1D, -- á´
+ },
+ [0x1D1E]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER SIDEWAYS DIAERESIZED U",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D1E, -- á´ž
+ },
+ [0x1D1F]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER SIDEWAYS TURNED M",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D1F, -- á´Ÿ
+ },
+ [0x1D20]={
+ ["category"]="ll",
+ ["description"]="LATIN LETTER SMALL CAPITAL V",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D20, -- á´ 
+ },
+ [0x1D21]={
+ ["category"]="ll",
+ ["description"]="LATIN LETTER SMALL CAPITAL W",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D21, -- á´¡
+ },
+ [0x1D22]={
+ ["category"]="ll",
+ ["description"]="LATIN LETTER SMALL CAPITAL Z",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D22, -- á´¢
+ },
+ [0x1D23]={
+ ["category"]="ll",
+ ["description"]="LATIN LETTER SMALL CAPITAL EZH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D23, -- á´£
+ },
+ [0x1D24]={
+ ["category"]="ll",
+ ["description"]="LATIN LETTER VOICED LARYNGEAL SPIRANT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D24, -- á´¤
+ },
+ [0x1D25]={
+ ["category"]="ll",
+ ["description"]="LATIN LETTER AIN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D25, -- á´¥
+ },
+ [0x1D26]={
+ ["category"]="ll",
+ ["description"]="GREEK LETTER SMALL CAPITAL GAMMA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D26, -- á´¦
+ },
+ [0x1D27]={
+ ["category"]="ll",
+ ["description"]="GREEK LETTER SMALL CAPITAL LAMDA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D27, -- á´§
+ },
+ [0x1D28]={
+ ["category"]="ll",
+ ["description"]="GREEK LETTER SMALL CAPITAL PI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D28, -- á´¨
+ },
+ [0x1D29]={
+ ["category"]="ll",
+ ["description"]="GREEK LETTER SMALL CAPITAL RHO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D29, -- á´©
+ },
+ [0x1D2A]={
+ ["category"]="ll",
+ ["description"]="GREEK LETTER SMALL CAPITAL PSI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D2A, -- á´ª
+ },
+ [0x1D2B]={
+ ["category"]="ll",
+ ["description"]="CYRILLIC LETTER SMALL CAPITAL EL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D2B, -- á´«
+ },
+ [0x1D2C]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER CAPITAL A",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0041 },
+ ["unicodeslot"]=0x1D2C, -- á´¬
+ },
+ [0x1D2D]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER CAPITAL AE",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x00C6 },
+ ["unicodeslot"]=0x1D2D, -- á´­
+ },
+ [0x1D2E]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER CAPITAL B",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0042 },
+ ["unicodeslot"]=0x1D2E, -- á´®
+ },
+ [0x1D2F]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER CAPITAL BARRED B",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D2F, -- á´¯
+ },
+ [0x1D30]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER CAPITAL D",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0044 },
+ ["unicodeslot"]=0x1D30, -- á´°
+ },
+ [0x1D31]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER CAPITAL E",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0045 },
+ ["unicodeslot"]=0x1D31, -- á´±
+ },
+ [0x1D32]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER CAPITAL REVERSED E",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x018E },
+ ["unicodeslot"]=0x1D32, -- á´²
+ },
+ [0x1D33]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER CAPITAL G",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0047 },
+ ["unicodeslot"]=0x1D33, -- á´³
+ },
+ [0x1D34]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER CAPITAL H",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0048 },
+ ["unicodeslot"]=0x1D34, -- á´´
+ },
+ [0x1D35]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER CAPITAL I",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0049 },
+ ["unicodeslot"]=0x1D35, -- á´µ
+ },
+ [0x1D36]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER CAPITAL J",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x004A },
+ ["unicodeslot"]=0x1D36, -- á´¶
+ },
+ [0x1D37]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER CAPITAL K",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x004B },
+ ["unicodeslot"]=0x1D37, -- á´·
+ },
+ [0x1D38]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER CAPITAL L",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x004C },
+ ["unicodeslot"]=0x1D38, -- á´¸
+ },
+ [0x1D39]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER CAPITAL M",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x004D },
+ ["unicodeslot"]=0x1D39, -- á´¹
+ },
+ [0x1D3A]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER CAPITAL N",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x004E },
+ ["unicodeslot"]=0x1D3A, -- á´º
+ },
+ [0x1D3B]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER CAPITAL REVERSED N",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D3B, -- á´»
+ },
+ [0x1D3C]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER CAPITAL O",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x004F },
+ ["unicodeslot"]=0x1D3C, -- á´¼
+ },
+ [0x1D3D]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER CAPITAL OU",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0222 },
+ ["unicodeslot"]=0x1D3D, -- á´½
+ },
+ [0x1D3E]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER CAPITAL P",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0050 },
+ ["unicodeslot"]=0x1D3E, -- á´¾
+ },
+ [0x1D3F]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER CAPITAL R",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0052 },
+ ["unicodeslot"]=0x1D3F, -- á´¿
+ },
+ [0x1D40]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER CAPITAL T",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0054 },
+ ["unicodeslot"]=0x1D40, -- áµ€
+ },
+ [0x1D41]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER CAPITAL U",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0055 },
+ ["unicodeslot"]=0x1D41, -- áµ
+ },
+ [0x1D42]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER CAPITAL W",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0057 },
+ ["unicodeslot"]=0x1D42, -- ᵂ
+ },
+ [0x1D43]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL A",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0061 },
+ ["unicodeslot"]=0x1D43, -- ᵃ
+ },
+ [0x1D44]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL TURNED A",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0250 },
+ ["unicodeslot"]=0x1D44, -- ᵄ
+ },
+ [0x1D45]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL ALPHA",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0251 },
+ ["unicodeslot"]=0x1D45, -- áµ…
+ },
+ [0x1D46]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL TURNED AE",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x1D02 },
+ ["unicodeslot"]=0x1D46, -- ᵆ
+ },
+ [0x1D47]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL B",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0062 },
+ ["unicodeslot"]=0x1D47, -- ᵇ
+ },
+ [0x1D48]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL D",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0064 },
+ ["unicodeslot"]=0x1D48, -- ᵈ
+ },
+ [0x1D49]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL E",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0065 },
+ ["unicodeslot"]=0x1D49, -- ᵉ
+ },
+ [0x1D4A]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL SCHWA",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0259 },
+ ["unicodeslot"]=0x1D4A, -- ᵊ
+ },
+ [0x1D4B]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL OPEN E",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x025B },
+ ["unicodeslot"]=0x1D4B, -- ᵋ
+ },
+ [0x1D4C]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL TURNED OPEN E",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x025C },
+ ["unicodeslot"]=0x1D4C, -- ᵌ
+ },
+ [0x1D4D]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL G",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0067 },
+ ["unicodeslot"]=0x1D4D, -- áµ
+ },
+ [0x1D4E]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL TURNED I",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D4E, -- ᵎ
+ },
+ [0x1D4F]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL K",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x006B },
+ ["unicodeslot"]=0x1D4F, -- áµ
+ },
+ [0x1D50]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL M",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x006D },
+ ["unicodeslot"]=0x1D50, -- áµ
+ },
+ [0x1D51]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL ENG",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x014B },
+ ["unicodeslot"]=0x1D51, -- ᵑ
+ },
+ [0x1D52]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL O",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x006F },
+ ["unicodeslot"]=0x1D52, -- áµ’
+ },
+ [0x1D53]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL OPEN O",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0254 },
+ ["unicodeslot"]=0x1D53, -- ᵓ
+ },
+ [0x1D54]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL TOP HALF O",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x1D16 },
+ ["unicodeslot"]=0x1D54, -- áµ”
+ },
+ [0x1D55]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL BOTTOM HALF O",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x1D17 },
+ ["unicodeslot"]=0x1D55, -- ᵕ
+ },
+ [0x1D56]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL P",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0070 },
+ ["unicodeslot"]=0x1D56, -- áµ–
+ },
+ [0x1D57]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL T",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0074 },
+ ["unicodeslot"]=0x1D57, -- áµ—
+ },
+ [0x1D58]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL U",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0075 },
+ ["unicodeslot"]=0x1D58, -- ᵘ
+ },
+ [0x1D59]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL SIDEWAYS U",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x1D1D },
+ ["unicodeslot"]=0x1D59, -- áµ™
+ },
+ [0x1D5A]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL TURNED M",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x026F },
+ ["unicodeslot"]=0x1D5A, -- ᵚ
+ },
+ [0x1D5B]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL V",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0076 },
+ ["unicodeslot"]=0x1D5B, -- áµ›
+ },
+ [0x1D5C]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL AIN",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x1D25 },
+ ["unicodeslot"]=0x1D5C, -- ᵜ
+ },
+ [0x1D5D]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL BETA",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x03B2 },
+ ["unicodeslot"]=0x1D5D, -- áµ
+ },
+ [0x1D5E]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL GREEK GAMMA",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x03B3 },
+ ["unicodeslot"]=0x1D5E, -- ᵞ
+ },
+ [0x1D5F]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL DELTA",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x03B4 },
+ ["unicodeslot"]=0x1D5F, -- ᵟ
+ },
+ [0x1D60]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL GREEK PHI",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x03C6 },
+ ["unicodeslot"]=0x1D60, -- áµ 
+ },
+ [0x1D61]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL CHI",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x03C7 },
+ ["unicodeslot"]=0x1D61, -- ᵡ
+ },
+ [0x1D62]={
+ ["category"]="ll",
+ ["description"]="LATIN SUBSCRIPT SMALL LETTER I",
+ ["linebreak"]="al",
+ ["specials"]={ "sub", 0x0069 },
+ ["unicodeslot"]=0x1D62, -- áµ¢
+ },
+ [0x1D63]={
+ ["category"]="ll",
+ ["description"]="LATIN SUBSCRIPT SMALL LETTER R",
+ ["linebreak"]="al",
+ ["specials"]={ "sub", 0x0072 },
+ ["unicodeslot"]=0x1D63, -- áµ£
+ },
+ [0x1D64]={
+ ["category"]="ll",
+ ["description"]="LATIN SUBSCRIPT SMALL LETTER U",
+ ["linebreak"]="al",
+ ["specials"]={ "sub", 0x0075 },
+ ["unicodeslot"]=0x1D64, -- ᵤ
+ },
+ [0x1D65]={
+ ["category"]="ll",
+ ["description"]="LATIN SUBSCRIPT SMALL LETTER V",
+ ["linebreak"]="al",
+ ["specials"]={ "sub", 0x0076 },
+ ["unicodeslot"]=0x1D65, -- áµ¥
+ },
+ [0x1D66]={
+ ["category"]="ll",
+ ["description"]="GREEK SUBSCRIPT SMALL LETTER BETA",
+ ["linebreak"]="al",
+ ["specials"]={ "sub", 0x03B2 },
+ ["unicodeslot"]=0x1D66, -- ᵦ
+ },
+ [0x1D67]={
+ ["category"]="ll",
+ ["description"]="GREEK SUBSCRIPT SMALL LETTER GAMMA",
+ ["linebreak"]="al",
+ ["specials"]={ "sub", 0x03B3 },
+ ["unicodeslot"]=0x1D67, -- ᵧ
+ },
+ [0x1D68]={
+ ["category"]="ll",
+ ["description"]="GREEK SUBSCRIPT SMALL LETTER RHO",
+ ["linebreak"]="al",
+ ["specials"]={ "sub", 0x03C1 },
+ ["unicodeslot"]=0x1D68, -- ᵨ
+ },
+ [0x1D69]={
+ ["category"]="ll",
+ ["description"]="GREEK SUBSCRIPT SMALL LETTER PHI",
+ ["linebreak"]="al",
+ ["specials"]={ "sub", 0x03C6 },
+ ["unicodeslot"]=0x1D69, -- ᵩ
+ },
+ [0x1D6A]={
+ ["category"]="ll",
+ ["description"]="GREEK SUBSCRIPT SMALL LETTER CHI",
+ ["linebreak"]="al",
+ ["specials"]={ "sub", 0x03C7 },
+ ["unicodeslot"]=0x1D6A, -- ᵪ
+ },
+ [0x1D6B]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER UE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D6B, -- ᵫ
+ },
+ [0x1D6C]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER B WITH MIDDLE TILDE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0062,
+ ["unicodeslot"]=0x1D6C, -- ᵬ
+ },
+ [0x1D6D]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER D WITH MIDDLE TILDE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0064,
+ ["unicodeslot"]=0x1D6D, -- áµ­
+ },
+ [0x1D6E]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER F WITH MIDDLE TILDE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0066,
+ ["unicodeslot"]=0x1D6E, -- áµ®
+ },
+ [0x1D6F]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER M WITH MIDDLE TILDE",
+ ["linebreak"]="al",
+ ["shcode"]=0x006D,
+ ["unicodeslot"]=0x1D6F, -- ᵯ
+ },
+ [0x1D70]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER N WITH MIDDLE TILDE",
+ ["linebreak"]="al",
+ ["shcode"]=0x006E,
+ ["unicodeslot"]=0x1D70, -- áµ°
+ },
+ [0x1D71]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER P WITH MIDDLE TILDE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0070,
+ ["unicodeslot"]=0x1D71, -- áµ±
+ },
+ [0x1D72]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER R WITH MIDDLE TILDE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0072,
+ ["unicodeslot"]=0x1D72, -- áµ²
+ },
+ [0x1D73]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0072,
+ ["unicodeslot"]=0x1D73, -- áµ³
+ },
+ [0x1D74]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER S WITH MIDDLE TILDE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0073,
+ ["unicodeslot"]=0x1D74, -- áµ´
+ },
+ [0x1D75]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER T WITH MIDDLE TILDE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0074,
+ ["unicodeslot"]=0x1D75, -- áµµ
+ },
+ [0x1D76]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER Z WITH MIDDLE TILDE",
+ ["linebreak"]="al",
+ ["shcode"]=0x007A,
+ ["unicodeslot"]=0x1D76, -- ᵶ
+ },
+ [0x1D77]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER TURNED G",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D77, -- áµ·
+ },
+ [0x1D78]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER CYRILLIC EN",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x043D },
+ ["unicodeslot"]=0x1D78, -- ᵸ
+ },
+ [0x1D79]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER INSULAR G",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D79, -- áµ¹
+ },
+ [0x1D7A]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER TH WITH STRIKETHROUGH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D7A, -- ᵺ
+ },
+ [0x1D7B]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL CAPITAL LETTER I WITH STROKE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D7B, -- áµ»
+ },
+ [0x1D7C]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER IOTA WITH STROKE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0269,
+ ["unicodeslot"]=0x1D7C, -- áµ¼
+ },
+ [0x1D7D]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER P WITH STROKE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0070,
+ ["uccode"]=0x2C63,
+ ["unicodeslot"]=0x1D7D, -- áµ½
+ },
+ [0x1D7E]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL CAPITAL LETTER U WITH STROKE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D7E, -- áµ¾
+ },
+ [0x1D7F]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER UPSILON WITH STROKE",
+ ["linebreak"]="al",
+ ["shcode"]=0x028A,
+ ["unicodeslot"]=0x1D7F, -- ᵿ
+ },
+ [0x1D80]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER B WITH PALATAL HOOK",
+ ["linebreak"]="al",
+ ["shcode"]=0x0062,
+ ["unicodeslot"]=0x1D80, -- ᶀ
+ },
+ [0x1D81]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER D WITH PALATAL HOOK",
+ ["linebreak"]="al",
+ ["shcode"]=0x0064,
+ ["unicodeslot"]=0x1D81, -- á¶
+ },
+ [0x1D82]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER F WITH PALATAL HOOK",
+ ["linebreak"]="al",
+ ["shcode"]=0x0066,
+ ["unicodeslot"]=0x1D82, -- ᶂ
+ },
+ [0x1D83]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER G WITH PALATAL HOOK",
+ ["linebreak"]="al",
+ ["shcode"]=0x0067,
+ ["unicodeslot"]=0x1D83, -- ᶃ
+ },
+ [0x1D84]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER K WITH PALATAL HOOK",
+ ["linebreak"]="al",
+ ["shcode"]=0x006B,
+ ["unicodeslot"]=0x1D84, -- ᶄ
+ },
+ [0x1D85]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER L WITH PALATAL HOOK",
+ ["linebreak"]="al",
+ ["shcode"]=0x006C,
+ ["unicodeslot"]=0x1D85, -- ᶅ
+ },
+ [0x1D86]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER M WITH PALATAL HOOK",
+ ["linebreak"]="al",
+ ["shcode"]=0x006D,
+ ["unicodeslot"]=0x1D86, -- ᶆ
+ },
+ [0x1D87]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER N WITH PALATAL HOOK",
+ ["linebreak"]="al",
+ ["shcode"]=0x006E,
+ ["unicodeslot"]=0x1D87, -- ᶇ
+ },
+ [0x1D88]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER P WITH PALATAL HOOK",
+ ["linebreak"]="al",
+ ["shcode"]=0x0070,
+ ["unicodeslot"]=0x1D88, -- ᶈ
+ },
+ [0x1D89]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER R WITH PALATAL HOOK",
+ ["linebreak"]="al",
+ ["shcode"]=0x0072,
+ ["unicodeslot"]=0x1D89, -- ᶉ
+ },
+ [0x1D8A]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER S WITH PALATAL HOOK",
+ ["linebreak"]="al",
+ ["shcode"]=0x0073,
+ ["unicodeslot"]=0x1D8A, -- ᶊ
+ },
+ [0x1D8B]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER ESH WITH PALATAL HOOK",
+ ["linebreak"]="al",
+ ["shcode"]=0x0283,
+ ["unicodeslot"]=0x1D8B, -- ᶋ
+ },
+ [0x1D8C]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER V WITH PALATAL HOOK",
+ ["linebreak"]="al",
+ ["shcode"]=0x0076,
+ ["unicodeslot"]=0x1D8C, -- ᶌ
+ },
+ [0x1D8D]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER X WITH PALATAL HOOK",
+ ["linebreak"]="al",
+ ["shcode"]=0x0078,
+ ["unicodeslot"]=0x1D8D, -- á¶
+ },
+ [0x1D8E]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER Z WITH PALATAL HOOK",
+ ["linebreak"]="al",
+ ["shcode"]=0x007A,
+ ["unicodeslot"]=0x1D8E, -- ᶎ
+ },
+ [0x1D8F]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER A WITH RETROFLEX HOOK",
+ ["linebreak"]="al",
+ ["shcode"]=0x0061,
+ ["unicodeslot"]=0x1D8F, -- á¶
+ },
+ [0x1D90]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK",
+ ["linebreak"]="al",
+ ["shcode"]=0x0251,
+ ["unicodeslot"]=0x1D90, -- á¶
+ },
+ [0x1D91]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER D WITH HOOK AND TAIL",
+ ["linebreak"]="al",
+ ["shcode"]=0x0064,
+ ["unicodeslot"]=0x1D91, -- ᶑ
+ },
+ [0x1D92]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER E WITH RETROFLEX HOOK",
+ ["linebreak"]="al",
+ ["shcode"]=0x0065,
+ ["unicodeslot"]=0x1D92, -- ᶒ
+ },
+ [0x1D93]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D93, -- ᶓ
+ },
+ [0x1D94]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D94, -- ᶔ
+ },
+ [0x1D95]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK",
+ ["linebreak"]="al",
+ ["shcode"]=0x0259,
+ ["unicodeslot"]=0x1D95, -- ᶕ
+ },
+ [0x1D96]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER I WITH RETROFLEX HOOK",
+ ["linebreak"]="al",
+ ["shcode"]=0x0069,
+ ["unicodeslot"]=0x1D96, -- ᶖ
+ },
+ [0x1D97]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D97, -- ᶗ
+ },
+ [0x1D98]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER ESH WITH RETROFLEX HOOK",
+ ["linebreak"]="al",
+ ["shcode"]=0x0283,
+ ["unicodeslot"]=0x1D98, -- ᶘ
+ },
+ [0x1D99]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER U WITH RETROFLEX HOOK",
+ ["linebreak"]="al",
+ ["shcode"]=0x0075,
+ ["unicodeslot"]=0x1D99, -- ᶙ
+ },
+ [0x1D9A]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER EZH WITH RETROFLEX HOOK",
+ ["linebreak"]="al",
+ ["shcode"]=0x0292,
+ ["unicodeslot"]=0x1D9A, -- ᶚ
+ },
+ [0x1D9B]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL TURNED ALPHA",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0252 },
+ ["unicodeslot"]=0x1D9B, -- ᶛ
+ },
+ [0x1D9C]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL C",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0063 },
+ ["unicodeslot"]=0x1D9C, -- ᶜ
+ },
+ [0x1D9D]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL C WITH CURL",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0255 },
+ ["unicodeslot"]=0x1D9D, -- á¶
+ },
+ [0x1D9E]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL ETH",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x00F0 },
+ ["unicodeslot"]=0x1D9E, -- ᶞ
+ },
+ [0x1D9F]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL REVERSED OPEN E",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x025C },
+ ["unicodeslot"]=0x1D9F, -- ᶟ
+ },
+ [0x1DA0]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL F",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0066 },
+ ["unicodeslot"]=0x1DA0, -- ᶠ
+ },
+ [0x1DA1]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL DOTLESS J WITH STROKE",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x025F },
+ ["unicodeslot"]=0x1DA1, -- ᶡ
+ },
+ [0x1DA2]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL SCRIPT G",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0261 },
+ ["unicodeslot"]=0x1DA2, -- ᶢ
+ },
+ [0x1DA3]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL TURNED H",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0265 },
+ ["unicodeslot"]=0x1DA3, -- ᶣ
+ },
+ [0x1DA4]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL I WITH STROKE",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0268 },
+ ["unicodeslot"]=0x1DA4, -- ᶤ
+ },
+ [0x1DA5]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL IOTA",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0269 },
+ ["unicodeslot"]=0x1DA5, -- ᶥ
+ },
+ [0x1DA6]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL CAPITAL I",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x026A },
+ ["unicodeslot"]=0x1DA6, -- ᶦ
+ },
+ [0x1DA7]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL CAPITAL I WITH STROKE",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x1D7B },
+ ["unicodeslot"]=0x1DA7, -- ᶧ
+ },
+ [0x1DA8]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL J WITH CROSSED-TAIL",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x029D },
+ ["unicodeslot"]=0x1DA8, -- ᶨ
+ },
+ [0x1DA9]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL L WITH RETROFLEX HOOK",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x026D },
+ ["unicodeslot"]=0x1DA9, -- ᶩ
+ },
+ [0x1DAA]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL L WITH PALATAL HOOK",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x1D85 },
+ ["unicodeslot"]=0x1DAA, -- ᶪ
+ },
+ [0x1DAB]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL CAPITAL L",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x029F },
+ ["unicodeslot"]=0x1DAB, -- ᶫ
+ },
+ [0x1DAC]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL M WITH HOOK",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0271 },
+ ["unicodeslot"]=0x1DAC, -- ᶬ
+ },
+ [0x1DAD]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL TURNED M WITH LONG LEG",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0270 },
+ ["unicodeslot"]=0x1DAD, -- ᶭ
+ },
+ [0x1DAE]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL N WITH LEFT HOOK",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0272 },
+ ["unicodeslot"]=0x1DAE, -- ᶮ
+ },
+ [0x1DAF]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL N WITH RETROFLEX HOOK",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0273 },
+ ["unicodeslot"]=0x1DAF, -- ᶯ
+ },
+ [0x1DB0]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL CAPITAL N",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0274 },
+ ["unicodeslot"]=0x1DB0, -- ᶰ
+ },
+ [0x1DB1]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL BARRED O",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0275 },
+ ["unicodeslot"]=0x1DB1, -- ᶱ
+ },
+ [0x1DB2]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL PHI",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0278 },
+ ["unicodeslot"]=0x1DB2, -- ᶲ
+ },
+ [0x1DB3]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL S WITH HOOK",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0282 },
+ ["unicodeslot"]=0x1DB3, -- ᶳ
+ },
+ [0x1DB4]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL ESH",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0283 },
+ ["unicodeslot"]=0x1DB4, -- ᶴ
+ },
+ [0x1DB5]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL T WITH PALATAL HOOK",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x01AB },
+ ["unicodeslot"]=0x1DB5, -- ᶵ
+ },
+ [0x1DB6]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL U BAR",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0289 },
+ ["unicodeslot"]=0x1DB6, -- ᶶ
+ },
+ [0x1DB7]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL UPSILON",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x028A },
+ ["unicodeslot"]=0x1DB7, -- ᶷ
+ },
+ [0x1DB8]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL CAPITAL U",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x1D1C },
+ ["unicodeslot"]=0x1DB8, -- ᶸ
+ },
+ [0x1DB9]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL V WITH HOOK",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x028B },
+ ["unicodeslot"]=0x1DB9, -- ᶹ
+ },
+ [0x1DBA]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL TURNED V",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x028C },
+ ["unicodeslot"]=0x1DBA, -- ᶺ
+ },
+ [0x1DBB]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL Z",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x007A },
+ ["unicodeslot"]=0x1DBB, -- ᶻ
+ },
+ [0x1DBC]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0290 },
+ ["unicodeslot"]=0x1DBC, -- ᶼ
+ },
+ [0x1DBD]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL Z WITH CURL",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0291 },
+ ["unicodeslot"]=0x1DBD, -- ᶽ
+ },
+ [0x1DBE]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL EZH",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0292 },
+ ["unicodeslot"]=0x1DBE, -- ᶾ
+ },
+ [0x1DBF]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER SMALL THETA",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x03B8 },
+ ["unicodeslot"]=0x1DBF, -- ᶿ
+ },
+ [0x1DC0]={
+ ["category"]="mn",
+ ["description"]="COMBINING DOTTED GRAVE ACCENT",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1DC0, -- á·€
+ },
+ [0x1DC1]={
+ ["category"]="mn",
+ ["description"]="COMBINING DOTTED ACUTE ACCENT",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1DC1, -- á·
+ },
+ [0x1DC2]={
+ ["category"]="mn",
+ ["description"]="COMBINING SNAKE BELOW",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1DC2, -- á·‚
+ },
+ [0x1DC3]={
+ ["category"]="mn",
+ ["description"]="COMBINING SUSPENSION MARK",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1DC3, -- á·ƒ
+ },
+ [0x1DC4]={
+ ["category"]="mn",
+ ["description"]="COMBINING MACRON-ACUTE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1DC4, -- á·„
+ },
+ [0x1DC5]={
+ ["category"]="mn",
+ ["description"]="COMBINING GRAVE-MACRON",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1DC5, -- á·…
+ },
+ [0x1DC6]={
+ ["category"]="mn",
+ ["description"]="COMBINING MACRON-GRAVE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1DC6, -- á·†
+ },
+ [0x1DC7]={
+ ["category"]="mn",
+ ["description"]="COMBINING ACUTE-MACRON",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1DC7, -- á·‡
+ },
+ [0x1DC8]={
+ ["category"]="mn",
+ ["description"]="COMBINING GRAVE-ACUTE-GRAVE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1DC8, -- á·ˆ
+ },
+ [0x1DC9]={
+ ["category"]="mn",
+ ["description"]="COMBINING ACUTE-GRAVE-ACUTE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1DC9, -- á·‰
+ },
+ [0x1DCA]={
+ ["category"]="mn",
+ ["description"]="COMBINING LATIN SMALL LETTER R BELOW",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1DCA, -- á·Š
+ },
+ [0x1DFE]={
+ ["category"]="mn",
+ ["description"]="COMBINING LEFT ARROWHEAD ABOVE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1DFE, -- á·¾
+ },
+ [0x1DFF]={
+ ["category"]="mn",
+ ["description"]="COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1DFF, -- á·¿
+ },
+ [0x1E00]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER A WITH RING BELOW",
+ ["lccode"]=0x1E01,
+ ["linebreak"]="al",
+ ["shcode"]=0x0041,
+ ["specials"]={ "char", 0x0041, 0x0325 },
+ ["unicodeslot"]=0x1E00, -- Ḁ
+ },
+ [0x1E01]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER A WITH RING BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x0061,
+ ["specials"]={ "char", 0x0061, 0x0325 },
+ ["uccode"]=0x1E00,
+ ["unicodeslot"]=0x1E01, -- á¸
+ },
+ [0x1E02]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER B WITH DOT ABOVE",
+ ["lccode"]=0x1E03,
+ ["linebreak"]="al",
+ ["shcode"]=0x0042,
+ ["specials"]={ "char", 0x0042, 0x0307 },
+ ["unicodeslot"]=0x1E02, -- Ḃ
+ },
+ [0x1E03]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER B WITH DOT ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0062,
+ ["specials"]={ "char", 0x0062, 0x0307 },
+ ["uccode"]=0x1E02,
+ ["unicodeslot"]=0x1E03, -- ḃ
+ },
+ [0x1E04]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER B WITH DOT BELOW",
+ ["lccode"]=0x1E05,
+ ["linebreak"]="al",
+ ["shcode"]=0x0042,
+ ["specials"]={ "char", 0x0042, 0x0323 },
+ ["unicodeslot"]=0x1E04, -- Ḅ
+ },
+ [0x1E05]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER B WITH DOT BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x0062,
+ ["specials"]={ "char", 0x0062, 0x0323 },
+ ["uccode"]=0x1E04,
+ ["unicodeslot"]=0x1E05, -- ḅ
+ },
+ [0x1E06]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER B WITH LINE BELOW",
+ ["lccode"]=0x1E07,
+ ["linebreak"]="al",
+ ["shcode"]=0x0042,
+ ["specials"]={ "char", 0x0042, 0x0331 },
+ ["unicodeslot"]=0x1E06, -- Ḇ
+ },
+ [0x1E07]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER B WITH LINE BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x0062,
+ ["specials"]={ "char", 0x0062, 0x0331 },
+ ["uccode"]=0x1E06,
+ ["unicodeslot"]=0x1E07, -- ḇ
+ },
+ [0x1E08]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE",
+ ["lccode"]=0x1E09,
+ ["linebreak"]="al",
+ ["shcode"]=0x0043,
+ ["specials"]={ "char", 0x00C7, 0x0301 },
+ ["unicodeslot"]=0x1E08, -- Ḉ
+ },
+ [0x1E09]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER C WITH CEDILLA AND ACUTE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0063,
+ ["specials"]={ "char", 0x00E7, 0x0301 },
+ ["uccode"]=0x1E08,
+ ["unicodeslot"]=0x1E09, -- ḉ
+ },
+ [0x1E0A]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER D WITH DOT ABOVE",
+ ["lccode"]=0x1E0B,
+ ["linebreak"]="al",
+ ["shcode"]=0x0044,
+ ["specials"]={ "char", 0x0044, 0x0307 },
+ ["unicodeslot"]=0x1E0A, -- Ḋ
+ },
+ [0x1E0B]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER D WITH DOT ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0064,
+ ["specials"]={ "char", 0x0064, 0x0307 },
+ ["uccode"]=0x1E0A,
+ ["unicodeslot"]=0x1E0B, -- ḋ
+ },
+ [0x1E0C]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER D WITH DOT BELOW",
+ ["lccode"]=0x1E0D,
+ ["linebreak"]="al",
+ ["shcode"]=0x0044,
+ ["specials"]={ "char", 0x0044, 0x0323 },
+ ["unicodeslot"]=0x1E0C, -- Ḍ
+ },
+ [0x1E0D]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER D WITH DOT BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x0064,
+ ["specials"]={ "char", 0x0064, 0x0323 },
+ ["uccode"]=0x1E0C,
+ ["unicodeslot"]=0x1E0D, -- á¸
+ },
+ [0x1E0E]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER D WITH LINE BELOW",
+ ["lccode"]=0x1E0F,
+ ["linebreak"]="al",
+ ["shcode"]=0x0044,
+ ["specials"]={ "char", 0x0044, 0x0331 },
+ ["unicodeslot"]=0x1E0E, -- Ḏ
+ },
+ [0x1E0F]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER D WITH LINE BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x0064,
+ ["specials"]={ "char", 0x0064, 0x0331 },
+ ["uccode"]=0x1E0E,
+ ["unicodeslot"]=0x1E0F, -- á¸
+ },
+ [0x1E10]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER D WITH CEDILLA",
+ ["lccode"]=0x1E11,
+ ["linebreak"]="al",
+ ["shcode"]=0x0044,
+ ["specials"]={ "char", 0x0044, 0x0327 },
+ ["unicodeslot"]=0x1E10, -- á¸
+ },
+ [0x1E11]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER D WITH CEDILLA",
+ ["linebreak"]="al",
+ ["shcode"]=0x0064,
+ ["specials"]={ "char", 0x0064, 0x0327 },
+ ["uccode"]=0x1E10,
+ ["unicodeslot"]=0x1E11, -- ḑ
+ },
+ [0x1E12]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW",
+ ["lccode"]=0x1E13,
+ ["linebreak"]="al",
+ ["shcode"]=0x0044,
+ ["specials"]={ "char", 0x0044, 0x032D },
+ ["unicodeslot"]=0x1E12, -- Ḓ
+ },
+ [0x1E13]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x0064,
+ ["specials"]={ "char", 0x0064, 0x032D },
+ ["uccode"]=0x1E12,
+ ["unicodeslot"]=0x1E13, -- ḓ
+ },
+ [0x1E14]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER E WITH MACRON AND GRAVE",
+ ["lccode"]=0x1E15,
+ ["linebreak"]="al",
+ ["shcode"]=0x0045,
+ ["specials"]={ "char", 0x0112, 0x0300 },
+ ["unicodeslot"]=0x1E14, -- Ḕ
+ },
+ [0x1E15]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER E WITH MACRON AND GRAVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0065,
+ ["specials"]={ "char", 0x0113, 0x0300 },
+ ["uccode"]=0x1E14,
+ ["unicodeslot"]=0x1E15, -- ḕ
+ },
+ [0x1E16]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER E WITH MACRON AND ACUTE",
+ ["lccode"]=0x1E17,
+ ["linebreak"]="al",
+ ["shcode"]=0x0045,
+ ["specials"]={ "char", 0x0112, 0x0301 },
+ ["unicodeslot"]=0x1E16, -- Ḗ
+ },
+ [0x1E17]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER E WITH MACRON AND ACUTE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0065,
+ ["specials"]={ "char", 0x0113, 0x0301 },
+ ["uccode"]=0x1E16,
+ ["unicodeslot"]=0x1E17, -- ḗ
+ },
+ [0x1E18]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW",
+ ["lccode"]=0x1E19,
+ ["linebreak"]="al",
+ ["shcode"]=0x0045,
+ ["specials"]={ "char", 0x0045, 0x032D },
+ ["unicodeslot"]=0x1E18, -- Ḙ
+ },
+ [0x1E19]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x0065,
+ ["specials"]={ "char", 0x0065, 0x032D },
+ ["uccode"]=0x1E18,
+ ["unicodeslot"]=0x1E19, -- ḙ
+ },
+ [0x1E1A]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER E WITH TILDE BELOW",
+ ["lccode"]=0x1E1B,
+ ["linebreak"]="al",
+ ["shcode"]=0x0045,
+ ["specials"]={ "char", 0x0045, 0x0330 },
+ ["unicodeslot"]=0x1E1A, -- Ḛ
+ },
+ [0x1E1B]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER E WITH TILDE BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x0065,
+ ["specials"]={ "char", 0x0065, 0x0330 },
+ ["uccode"]=0x1E1A,
+ ["unicodeslot"]=0x1E1B, -- ḛ
+ },
+ [0x1E1C]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE",
+ ["lccode"]=0x1E1D,
+ ["linebreak"]="al",
+ ["shcode"]=0x0045,
+ ["specials"]={ "char", 0x0228, 0x0306 },
+ ["unicodeslot"]=0x1E1C, -- Ḝ
+ },
+ [0x1E1D]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER E WITH CEDILLA AND BREVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0065,
+ ["specials"]={ "char", 0x0229, 0x0306 },
+ ["uccode"]=0x1E1C,
+ ["unicodeslot"]=0x1E1D, -- á¸
+ },
+ [0x1E1E]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER F WITH DOT ABOVE",
+ ["lccode"]=0x1E1F,
+ ["linebreak"]="al",
+ ["shcode"]=0x0046,
+ ["specials"]={ "char", 0x0046, 0x0307 },
+ ["unicodeslot"]=0x1E1E, -- Ḟ
+ },
+ [0x1E1F]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER F WITH DOT ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0066,
+ ["specials"]={ "char", 0x0066, 0x0307 },
+ ["uccode"]=0x1E1E,
+ ["unicodeslot"]=0x1E1F, -- ḟ
+ },
+ [0x1E20]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER G WITH MACRON",
+ ["lccode"]=0x1E21,
+ ["linebreak"]="al",
+ ["shcode"]=0x0047,
+ ["specials"]={ "char", 0x0047, 0x0304 },
+ ["unicodeslot"]=0x1E20, -- Ḡ
+ },
+ [0x1E21]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER G WITH MACRON",
+ ["linebreak"]="al",
+ ["shcode"]=0x0067,
+ ["specials"]={ "char", 0x0067, 0x0304 },
+ ["uccode"]=0x1E20,
+ ["unicodeslot"]=0x1E21, -- ḡ
+ },
+ [0x1E22]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER H WITH DOT ABOVE",
+ ["lccode"]=0x1E23,
+ ["linebreak"]="al",
+ ["shcode"]=0x0048,
+ ["specials"]={ "char", 0x0048, 0x0307 },
+ ["unicodeslot"]=0x1E22, -- Ḣ
+ },
+ [0x1E23]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER H WITH DOT ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0068,
+ ["specials"]={ "char", 0x0068, 0x0307 },
+ ["uccode"]=0x1E22,
+ ["unicodeslot"]=0x1E23, -- ḣ
+ },
+ [0x1E24]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER H WITH DOT BELOW",
+ ["lccode"]=0x1E25,
+ ["linebreak"]="al",
+ ["shcode"]=0x0048,
+ ["specials"]={ "char", 0x0048, 0x0323 },
+ ["unicodeslot"]=0x1E24, -- Ḥ
+ },
+ [0x1E25]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER H WITH DOT BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x0068,
+ ["specials"]={ "char", 0x0068, 0x0323 },
+ ["uccode"]=0x1E24,
+ ["unicodeslot"]=0x1E25, -- ḥ
+ },
+ [0x1E26]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER H WITH DIAERESIS",
+ ["lccode"]=0x1E27,
+ ["linebreak"]="al",
+ ["shcode"]=0x0048,
+ ["specials"]={ "char", 0x0048, 0x0308 },
+ ["unicodeslot"]=0x1E26, -- Ḧ
+ },
+ [0x1E27]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER H WITH DIAERESIS",
+ ["linebreak"]="al",
+ ["shcode"]=0x0068,
+ ["specials"]={ "char", 0x0068, 0x0308 },
+ ["uccode"]=0x1E26,
+ ["unicodeslot"]=0x1E27, -- ḧ
+ },
+ [0x1E28]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER H WITH CEDILLA",
+ ["lccode"]=0x1E29,
+ ["linebreak"]="al",
+ ["shcode"]=0x0048,
+ ["specials"]={ "char", 0x0048, 0x0327 },
+ ["unicodeslot"]=0x1E28, -- Ḩ
+ },
+ [0x1E29]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER H WITH CEDILLA",
+ ["linebreak"]="al",
+ ["shcode"]=0x0068,
+ ["specials"]={ "char", 0x0068, 0x0327 },
+ ["uccode"]=0x1E28,
+ ["unicodeslot"]=0x1E29, -- ḩ
+ },
+ [0x1E2A]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER H WITH BREVE BELOW",
+ ["lccode"]=0x1E2B,
+ ["linebreak"]="al",
+ ["shcode"]=0x0048,
+ ["specials"]={ "char", 0x0048, 0x032E },
+ ["unicodeslot"]=0x1E2A, -- Ḫ
+ },
+ [0x1E2B]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER H WITH BREVE BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x0068,
+ ["specials"]={ "char", 0x0068, 0x032E },
+ ["uccode"]=0x1E2A,
+ ["unicodeslot"]=0x1E2B, -- ḫ
+ },
+ [0x1E2C]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER I WITH TILDE BELOW",
+ ["lccode"]=0x1E2D,
+ ["linebreak"]="al",
+ ["shcode"]=0x0049,
+ ["specials"]={ "char", 0x0049, 0x0330 },
+ ["unicodeslot"]=0x1E2C, -- Ḭ
+ },
+ [0x1E2D]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER I WITH TILDE BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x0069,
+ ["specials"]={ "char", 0x0069, 0x0330 },
+ ["uccode"]=0x1E2C,
+ ["unicodeslot"]=0x1E2D, -- ḭ
+ },
+ [0x1E2E]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE",
+ ["lccode"]=0x1E2F,
+ ["linebreak"]="al",
+ ["shcode"]=0x0049,
+ ["specials"]={ "char", 0x00CF, 0x0301 },
+ ["unicodeslot"]=0x1E2E, -- Ḯ
+ },
+ [0x1E2F]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0069,
+ ["specials"]={ "char", 0x00EF, 0x0301 },
+ ["uccode"]=0x1E2E,
+ ["unicodeslot"]=0x1E2F, -- ḯ
+ },
+ [0x1E30]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER K WITH ACUTE",
+ ["lccode"]=0x1E31,
+ ["linebreak"]="al",
+ ["shcode"]=0x004B,
+ ["specials"]={ "char", 0x004B, 0x0301 },
+ ["unicodeslot"]=0x1E30, -- Ḱ
+ },
+ [0x1E31]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER K WITH ACUTE",
+ ["linebreak"]="al",
+ ["shcode"]=0x006B,
+ ["specials"]={ "char", 0x006B, 0x0301 },
+ ["uccode"]=0x1E30,
+ ["unicodeslot"]=0x1E31, -- ḱ
+ },
+ [0x1E32]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER K WITH DOT BELOW",
+ ["lccode"]=0x1E33,
+ ["linebreak"]="al",
+ ["shcode"]=0x004B,
+ ["specials"]={ "char", 0x004B, 0x0323 },
+ ["unicodeslot"]=0x1E32, -- Ḳ
+ },
+ [0x1E33]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER K WITH DOT BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x006B,
+ ["specials"]={ "char", 0x006B, 0x0323 },
+ ["uccode"]=0x1E32,
+ ["unicodeslot"]=0x1E33, -- ḳ
+ },
+ [0x1E34]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER K WITH LINE BELOW",
+ ["lccode"]=0x1E35,
+ ["linebreak"]="al",
+ ["shcode"]=0x004B,
+ ["specials"]={ "char", 0x004B, 0x0331 },
+ ["unicodeslot"]=0x1E34, -- Ḵ
+ },
+ [0x1E35]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER K WITH LINE BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x006B,
+ ["specials"]={ "char", 0x006B, 0x0331 },
+ ["uccode"]=0x1E34,
+ ["unicodeslot"]=0x1E35, -- ḵ
+ },
+ [0x1E36]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER L WITH DOT BELOW",
+ ["lccode"]=0x1E37,
+ ["linebreak"]="al",
+ ["shcode"]=0x004C,
+ ["specials"]={ "char", 0x004C, 0x0323 },
+ ["unicodeslot"]=0x1E36, -- Ḷ
+ },
+ [0x1E37]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER L WITH DOT BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x006C,
+ ["specials"]={ "char", 0x006C, 0x0323 },
+ ["uccode"]=0x1E36,
+ ["unicodeslot"]=0x1E37, -- ḷ
+ },
+ [0x1E38]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON",
+ ["lccode"]=0x1E39,
+ ["linebreak"]="al",
+ ["shcode"]=0x004C,
+ ["specials"]={ "char", 0x1E36, 0x0304 },
+ ["unicodeslot"]=0x1E38, -- Ḹ
+ },
+ [0x1E39]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER L WITH DOT BELOW AND MACRON",
+ ["linebreak"]="al",
+ ["shcode"]=0x006C,
+ ["specials"]={ "char", 0x1E37, 0x0304 },
+ ["uccode"]=0x1E38,
+ ["unicodeslot"]=0x1E39, -- ḹ
+ },
+ [0x1E3A]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER L WITH LINE BELOW",
+ ["lccode"]=0x1E3B,
+ ["linebreak"]="al",
+ ["shcode"]=0x004C,
+ ["specials"]={ "char", 0x004C, 0x0331 },
+ ["unicodeslot"]=0x1E3A, -- Ḻ
+ },
+ [0x1E3B]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER L WITH LINE BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x006C,
+ ["specials"]={ "char", 0x006C, 0x0331 },
+ ["uccode"]=0x1E3A,
+ ["unicodeslot"]=0x1E3B, -- ḻ
+ },
+ [0x1E3C]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW",
+ ["lccode"]=0x1E3D,
+ ["linebreak"]="al",
+ ["shcode"]=0x004C,
+ ["specials"]={ "char", 0x004C, 0x032D },
+ ["unicodeslot"]=0x1E3C, -- Ḽ
+ },
+ [0x1E3D]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x006C,
+ ["specials"]={ "char", 0x006C, 0x032D },
+ ["uccode"]=0x1E3C,
+ ["unicodeslot"]=0x1E3D, -- ḽ
+ },
+ [0x1E3E]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER M WITH ACUTE",
+ ["lccode"]=0x1E3F,
+ ["linebreak"]="al",
+ ["shcode"]=0x004D,
+ ["specials"]={ "char", 0x004D, 0x0301 },
+ ["unicodeslot"]=0x1E3E, -- Ḿ
+ },
+ [0x1E3F]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER M WITH ACUTE",
+ ["linebreak"]="al",
+ ["shcode"]=0x006D,
+ ["specials"]={ "char", 0x006D, 0x0301 },
+ ["uccode"]=0x1E3E,
+ ["unicodeslot"]=0x1E3F, -- ḿ
+ },
+ [0x1E40]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER M WITH DOT ABOVE",
+ ["lccode"]=0x1E41,
+ ["linebreak"]="al",
+ ["shcode"]=0x004D,
+ ["specials"]={ "char", 0x004D, 0x0307 },
+ ["unicodeslot"]=0x1E40, -- á¹€
+ },
+ [0x1E41]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER M WITH DOT ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x006D,
+ ["specials"]={ "char", 0x006D, 0x0307 },
+ ["uccode"]=0x1E40,
+ ["unicodeslot"]=0x1E41, -- á¹
+ },
+ [0x1E42]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER M WITH DOT BELOW",
+ ["lccode"]=0x1E43,
+ ["linebreak"]="al",
+ ["shcode"]=0x004D,
+ ["specials"]={ "char", 0x004D, 0x0323 },
+ ["unicodeslot"]=0x1E42, -- Ṃ
+ },
+ [0x1E43]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER M WITH DOT BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x006D,
+ ["specials"]={ "char", 0x006D, 0x0323 },
+ ["uccode"]=0x1E42,
+ ["unicodeslot"]=0x1E43, -- ṃ
+ },
+ [0x1E44]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER N WITH DOT ABOVE",
+ ["lccode"]=0x1E45,
+ ["linebreak"]="al",
+ ["shcode"]=0x004E,
+ ["specials"]={ "char", 0x004E, 0x0307 },
+ ["unicodeslot"]=0x1E44, -- Ṅ
+ },
+ [0x1E45]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER N WITH DOT ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x006E,
+ ["specials"]={ "char", 0x006E, 0x0307 },
+ ["uccode"]=0x1E44,
+ ["unicodeslot"]=0x1E45, -- á¹…
+ },
+ [0x1E46]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER N WITH DOT BELOW",
+ ["lccode"]=0x1E47,
+ ["linebreak"]="al",
+ ["shcode"]=0x004E,
+ ["specials"]={ "char", 0x004E, 0x0323 },
+ ["unicodeslot"]=0x1E46, -- Ṇ
+ },
+ [0x1E47]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER N WITH DOT BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x006E,
+ ["specials"]={ "char", 0x006E, 0x0323 },
+ ["uccode"]=0x1E46,
+ ["unicodeslot"]=0x1E47, -- ṇ
+ },
+ [0x1E48]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER N WITH LINE BELOW",
+ ["lccode"]=0x1E49,
+ ["linebreak"]="al",
+ ["shcode"]=0x004E,
+ ["specials"]={ "char", 0x004E, 0x0331 },
+ ["unicodeslot"]=0x1E48, -- Ṉ
+ },
+ [0x1E49]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER N WITH LINE BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x006E,
+ ["specials"]={ "char", 0x006E, 0x0331 },
+ ["uccode"]=0x1E48,
+ ["unicodeslot"]=0x1E49, -- ṉ
+ },
+ [0x1E4A]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW",
+ ["lccode"]=0x1E4B,
+ ["linebreak"]="al",
+ ["shcode"]=0x004E,
+ ["specials"]={ "char", 0x004E, 0x032D },
+ ["unicodeslot"]=0x1E4A, -- Ṋ
+ },
+ [0x1E4B]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x006E,
+ ["specials"]={ "char", 0x006E, 0x032D },
+ ["uccode"]=0x1E4A,
+ ["unicodeslot"]=0x1E4B, -- ṋ
+ },
+ [0x1E4C]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER O WITH TILDE AND ACUTE",
+ ["lccode"]=0x1E4D,
+ ["linebreak"]="al",
+ ["shcode"]=0x004F,
+ ["specials"]={ "char", 0x00D5, 0x0301 },
+ ["unicodeslot"]=0x1E4C, -- Ṍ
+ },
+ [0x1E4D]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER O WITH TILDE AND ACUTE",
+ ["linebreak"]="al",
+ ["shcode"]=0x006F,
+ ["specials"]={ "char", 0x00F5, 0x0301 },
+ ["uccode"]=0x1E4C,
+ ["unicodeslot"]=0x1E4D, -- á¹
+ },
+ [0x1E4E]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS",
+ ["lccode"]=0x1E4F,
+ ["linebreak"]="al",
+ ["shcode"]=0x004F,
+ ["specials"]={ "char", 0x00D5, 0x0308 },
+ ["unicodeslot"]=0x1E4E, -- Ṏ
+ },
+ [0x1E4F]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER O WITH TILDE AND DIAERESIS",
+ ["linebreak"]="al",
+ ["shcode"]=0x006F,
+ ["specials"]={ "char", 0x00F5, 0x0308 },
+ ["uccode"]=0x1E4E,
+ ["unicodeslot"]=0x1E4F, -- á¹
+ },
+ [0x1E50]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER O WITH MACRON AND GRAVE",
+ ["lccode"]=0x1E51,
+ ["linebreak"]="al",
+ ["shcode"]=0x004F,
+ ["specials"]={ "char", 0x014C, 0x0300 },
+ ["unicodeslot"]=0x1E50, -- á¹
+ },
+ [0x1E51]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER O WITH MACRON AND GRAVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x006F,
+ ["specials"]={ "char", 0x014D, 0x0300 },
+ ["uccode"]=0x1E50,
+ ["unicodeslot"]=0x1E51, -- ṑ
+ },
+ [0x1E52]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER O WITH MACRON AND ACUTE",
+ ["lccode"]=0x1E53,
+ ["linebreak"]="al",
+ ["shcode"]=0x004F,
+ ["specials"]={ "char", 0x014C, 0x0301 },
+ ["unicodeslot"]=0x1E52, -- á¹’
+ },
+ [0x1E53]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER O WITH MACRON AND ACUTE",
+ ["linebreak"]="al",
+ ["shcode"]=0x006F,
+ ["specials"]={ "char", 0x014D, 0x0301 },
+ ["uccode"]=0x1E52,
+ ["unicodeslot"]=0x1E53, -- ṓ
+ },
+ [0x1E54]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER P WITH ACUTE",
+ ["lccode"]=0x1E55,
+ ["linebreak"]="al",
+ ["shcode"]=0x0050,
+ ["specials"]={ "char", 0x0050, 0x0301 },
+ ["unicodeslot"]=0x1E54, -- á¹”
+ },
+ [0x1E55]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER P WITH ACUTE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0070,
+ ["specials"]={ "char", 0x0070, 0x0301 },
+ ["uccode"]=0x1E54,
+ ["unicodeslot"]=0x1E55, -- ṕ
+ },
+ [0x1E56]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER P WITH DOT ABOVE",
+ ["lccode"]=0x1E57,
+ ["linebreak"]="al",
+ ["shcode"]=0x0050,
+ ["specials"]={ "char", 0x0050, 0x0307 },
+ ["unicodeslot"]=0x1E56, -- á¹–
+ },
+ [0x1E57]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER P WITH DOT ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0070,
+ ["specials"]={ "char", 0x0070, 0x0307 },
+ ["uccode"]=0x1E56,
+ ["unicodeslot"]=0x1E57, -- á¹—
+ },
+ [0x1E58]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER R WITH DOT ABOVE",
+ ["lccode"]=0x1E59,
+ ["linebreak"]="al",
+ ["shcode"]=0x0052,
+ ["specials"]={ "char", 0x0052, 0x0307 },
+ ["unicodeslot"]=0x1E58, -- Ṙ
+ },
+ [0x1E59]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER R WITH DOT ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0072,
+ ["specials"]={ "char", 0x0072, 0x0307 },
+ ["uccode"]=0x1E58,
+ ["unicodeslot"]=0x1E59, -- á¹™
+ },
+ [0x1E5A]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER R WITH DOT BELOW",
+ ["lccode"]=0x1E5B,
+ ["linebreak"]="al",
+ ["shcode"]=0x0052,
+ ["specials"]={ "char", 0x0052, 0x0323 },
+ ["unicodeslot"]=0x1E5A, -- Ṛ
+ },
+ [0x1E5B]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER R WITH DOT BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x0072,
+ ["specials"]={ "char", 0x0072, 0x0323 },
+ ["uccode"]=0x1E5A,
+ ["unicodeslot"]=0x1E5B, -- á¹›
+ },
+ [0x1E5C]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON",
+ ["lccode"]=0x1E5D,
+ ["linebreak"]="al",
+ ["shcode"]=0x0052,
+ ["specials"]={ "char", 0x1E5A, 0x0304 },
+ ["unicodeslot"]=0x1E5C, -- Ṝ
+ },
+ [0x1E5D]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER R WITH DOT BELOW AND MACRON",
+ ["linebreak"]="al",
+ ["shcode"]=0x0072,
+ ["specials"]={ "char", 0x1E5B, 0x0304 },
+ ["uccode"]=0x1E5C,
+ ["unicodeslot"]=0x1E5D, -- á¹
+ },
+ [0x1E5E]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER R WITH LINE BELOW",
+ ["lccode"]=0x1E5F,
+ ["linebreak"]="al",
+ ["shcode"]=0x0052,
+ ["specials"]={ "char", 0x0052, 0x0331 },
+ ["unicodeslot"]=0x1E5E, -- Ṟ
+ },
+ [0x1E5F]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER R WITH LINE BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x0072,
+ ["specials"]={ "char", 0x0072, 0x0331 },
+ ["uccode"]=0x1E5E,
+ ["unicodeslot"]=0x1E5F, -- ṟ
+ },
+ [0x1E60]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER S WITH DOT ABOVE",
+ ["lccode"]=0x1E61,
+ ["linebreak"]="al",
+ ["shcode"]=0x0053,
+ ["specials"]={ "char", 0x0053, 0x0307 },
+ ["unicodeslot"]=0x1E60, -- á¹ 
+ },
+ [0x1E61]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER S WITH DOT ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0073,
+ ["specials"]={ "char", 0x0073, 0x0307 },
+ ["uccode"]=0x1E60,
+ ["unicodeslot"]=0x1E61, -- ṡ
+ },
+ [0x1E62]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER S WITH DOT BELOW",
+ ["lccode"]=0x1E63,
+ ["linebreak"]="al",
+ ["shcode"]=0x0053,
+ ["specials"]={ "char", 0x0053, 0x0323 },
+ ["unicodeslot"]=0x1E62, -- á¹¢
+ },
+ [0x1E63]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER S WITH DOT BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x0073,
+ ["specials"]={ "char", 0x0073, 0x0323 },
+ ["uccode"]=0x1E62,
+ ["unicodeslot"]=0x1E63, -- á¹£
+ },
+ [0x1E64]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE",
+ ["lccode"]=0x1E65,
+ ["linebreak"]="al",
+ ["shcode"]=0x0053,
+ ["specials"]={ "char", 0x015A, 0x0307 },
+ ["unicodeslot"]=0x1E64, -- Ṥ
+ },
+ [0x1E65]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0073,
+ ["specials"]={ "char", 0x015B, 0x0307 },
+ ["uccode"]=0x1E64,
+ ["unicodeslot"]=0x1E65, -- á¹¥
+ },
+ [0x1E66]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE",
+ ["lccode"]=0x1E67,
+ ["linebreak"]="al",
+ ["shcode"]=0x0053,
+ ["specials"]={ "char", 0x0160, 0x0307 },
+ ["unicodeslot"]=0x1E66, -- Ṧ
+ },
+ [0x1E67]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER S WITH CARON AND DOT ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0073,
+ ["specials"]={ "char", 0x0161, 0x0307 },
+ ["uccode"]=0x1E66,
+ ["unicodeslot"]=0x1E67, -- ṧ
+ },
+ [0x1E68]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE",
+ ["lccode"]=0x1E69,
+ ["linebreak"]="al",
+ ["shcode"]=0x0053,
+ ["specials"]={ "char", 0x1E62, 0x0307 },
+ ["unicodeslot"]=0x1E68, -- Ṩ
+ },
+ [0x1E69]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0073,
+ ["specials"]={ "char", 0x1E63, 0x0307 },
+ ["uccode"]=0x1E68,
+ ["unicodeslot"]=0x1E69, -- ṩ
+ },
+ [0x1E6A]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER T WITH DOT ABOVE",
+ ["lccode"]=0x1E6B,
+ ["linebreak"]="al",
+ ["shcode"]=0x0054,
+ ["specials"]={ "char", 0x0054, 0x0307 },
+ ["unicodeslot"]=0x1E6A, -- Ṫ
+ },
+ [0x1E6B]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER T WITH DOT ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0074,
+ ["specials"]={ "char", 0x0074, 0x0307 },
+ ["uccode"]=0x1E6A,
+ ["unicodeslot"]=0x1E6B, -- ṫ
+ },
+ [0x1E6C]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER T WITH DOT BELOW",
+ ["lccode"]=0x1E6D,
+ ["linebreak"]="al",
+ ["shcode"]=0x0054,
+ ["specials"]={ "char", 0x0054, 0x0323 },
+ ["unicodeslot"]=0x1E6C, -- Ṭ
+ },
+ [0x1E6D]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER T WITH DOT BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x0074,
+ ["specials"]={ "char", 0x0074, 0x0323 },
+ ["uccode"]=0x1E6C,
+ ["unicodeslot"]=0x1E6D, -- á¹­
+ },
+ [0x1E6E]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER T WITH LINE BELOW",
+ ["lccode"]=0x1E6F,
+ ["linebreak"]="al",
+ ["shcode"]=0x0054,
+ ["specials"]={ "char", 0x0054, 0x0331 },
+ ["unicodeslot"]=0x1E6E, -- á¹®
+ },
+ [0x1E6F]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER T WITH LINE BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x0074,
+ ["specials"]={ "char", 0x0074, 0x0331 },
+ ["uccode"]=0x1E6E,
+ ["unicodeslot"]=0x1E6F, -- ṯ
+ },
+ [0x1E70]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW",
+ ["lccode"]=0x1E71,
+ ["linebreak"]="al",
+ ["shcode"]=0x0054,
+ ["specials"]={ "char", 0x0054, 0x032D },
+ ["unicodeslot"]=0x1E70, -- á¹°
+ },
+ [0x1E71]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x0074,
+ ["specials"]={ "char", 0x0074, 0x032D },
+ ["uccode"]=0x1E70,
+ ["unicodeslot"]=0x1E71, -- á¹±
+ },
+ [0x1E72]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER U WITH DIAERESIS BELOW",
+ ["lccode"]=0x1E73,
+ ["linebreak"]="al",
+ ["shcode"]=0x0055,
+ ["specials"]={ "char", 0x0055, 0x0324 },
+ ["unicodeslot"]=0x1E72, -- á¹²
+ },
+ [0x1E73]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER U WITH DIAERESIS BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x0075,
+ ["specials"]={ "char", 0x0075, 0x0324 },
+ ["uccode"]=0x1E72,
+ ["unicodeslot"]=0x1E73, -- á¹³
+ },
+ [0x1E74]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER U WITH TILDE BELOW",
+ ["lccode"]=0x1E75,
+ ["linebreak"]="al",
+ ["shcode"]=0x0055,
+ ["specials"]={ "char", 0x0055, 0x0330 },
+ ["unicodeslot"]=0x1E74, -- á¹´
+ },
+ [0x1E75]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER U WITH TILDE BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x0075,
+ ["specials"]={ "char", 0x0075, 0x0330 },
+ ["uccode"]=0x1E74,
+ ["unicodeslot"]=0x1E75, -- á¹µ
+ },
+ [0x1E76]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW",
+ ["lccode"]=0x1E77,
+ ["linebreak"]="al",
+ ["shcode"]=0x0055,
+ ["specials"]={ "char", 0x0055, 0x032D },
+ ["unicodeslot"]=0x1E76, -- Ṷ
+ },
+ [0x1E77]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x0075,
+ ["specials"]={ "char", 0x0075, 0x032D },
+ ["uccode"]=0x1E76,
+ ["unicodeslot"]=0x1E77, -- á¹·
+ },
+ [0x1E78]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER U WITH TILDE AND ACUTE",
+ ["lccode"]=0x1E79,
+ ["linebreak"]="al",
+ ["shcode"]=0x0055,
+ ["specials"]={ "char", 0x0168, 0x0301 },
+ ["unicodeslot"]=0x1E78, -- Ṹ
+ },
+ [0x1E79]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER U WITH TILDE AND ACUTE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0075,
+ ["specials"]={ "char", 0x0169, 0x0301 },
+ ["uccode"]=0x1E78,
+ ["unicodeslot"]=0x1E79, -- á¹¹
+ },
+ [0x1E7A]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS",
+ ["lccode"]=0x1E7B,
+ ["linebreak"]="al",
+ ["shcode"]=0x0055,
+ ["specials"]={ "char", 0x016A, 0x0308 },
+ ["unicodeslot"]=0x1E7A, -- Ṻ
+ },
+ [0x1E7B]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER U WITH MACRON AND DIAERESIS",
+ ["linebreak"]="al",
+ ["shcode"]=0x0075,
+ ["specials"]={ "char", 0x016B, 0x0308 },
+ ["uccode"]=0x1E7A,
+ ["unicodeslot"]=0x1E7B, -- á¹»
+ },
+ [0x1E7C]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER V WITH TILDE",
+ ["lccode"]=0x1E7D,
+ ["linebreak"]="al",
+ ["shcode"]=0x0056,
+ ["specials"]={ "char", 0x0056, 0x0303 },
+ ["unicodeslot"]=0x1E7C, -- á¹¼
+ },
+ [0x1E7D]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER V WITH TILDE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0076,
+ ["specials"]={ "char", 0x0076, 0x0303 },
+ ["uccode"]=0x1E7C,
+ ["unicodeslot"]=0x1E7D, -- á¹½
+ },
+ [0x1E7E]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER V WITH DOT BELOW",
+ ["lccode"]=0x1E7F,
+ ["linebreak"]="al",
+ ["shcode"]=0x0056,
+ ["specials"]={ "char", 0x0056, 0x0323 },
+ ["unicodeslot"]=0x1E7E, -- á¹¾
+ },
+ [0x1E7F]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER V WITH DOT BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x0076,
+ ["specials"]={ "char", 0x0076, 0x0323 },
+ ["uccode"]=0x1E7E,
+ ["unicodeslot"]=0x1E7F, -- ṿ
+ },
+ [0x1E80]={
+ ["adobename"]="Wgrave",
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER W WITH GRAVE",
+ ["lccode"]=0x1E81,
+ ["linebreak"]="al",
+ ["shcode"]=0x0057,
+ ["specials"]={ "char", 0x0057, 0x0300 },
+ ["unicodeslot"]=0x1E80, -- Ẁ
+ },
+ [0x1E81]={
+ ["adobename"]="wgrave",
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER W WITH GRAVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0077,
+ ["specials"]={ "char", 0x0077, 0x0300 },
+ ["uccode"]=0x1E80,
+ ["unicodeslot"]=0x1E81, -- áº
+ },
+ [0x1E82]={
+ ["adobename"]="Wacute",
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER W WITH ACUTE",
+ ["lccode"]=0x1E83,
+ ["linebreak"]="al",
+ ["shcode"]=0x0057,
+ ["specials"]={ "char", 0x0057, 0x0301 },
+ ["unicodeslot"]=0x1E82, -- Ẃ
+ },
+ [0x1E83]={
+ ["adobename"]="wacute",
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER W WITH ACUTE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0077,
+ ["specials"]={ "char", 0x0077, 0x0301 },
+ ["uccode"]=0x1E82,
+ ["unicodeslot"]=0x1E83, -- ẃ
+ },
+ [0x1E84]={
+ ["adobename"]="Wdieresis",
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER W WITH DIAERESIS",
+ ["lccode"]=0x1E85,
+ ["linebreak"]="al",
+ ["shcode"]=0x0057,
+ ["specials"]={ "char", 0x0057, 0x0308 },
+ ["unicodeslot"]=0x1E84, -- Ẅ
+ },
+ [0x1E85]={
+ ["adobename"]="wdieresis",
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER W WITH DIAERESIS",
+ ["linebreak"]="al",
+ ["shcode"]=0x0077,
+ ["specials"]={ "char", 0x0077, 0x0308 },
+ ["uccode"]=0x1E84,
+ ["unicodeslot"]=0x1E85, -- ẅ
+ },
+ [0x1E86]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER W WITH DOT ABOVE",
+ ["lccode"]=0x1E87,
+ ["linebreak"]="al",
+ ["shcode"]=0x0057,
+ ["specials"]={ "char", 0x0057, 0x0307 },
+ ["unicodeslot"]=0x1E86, -- Ẇ
+ },
+ [0x1E87]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER W WITH DOT ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0077,
+ ["specials"]={ "char", 0x0077, 0x0307 },
+ ["uccode"]=0x1E86,
+ ["unicodeslot"]=0x1E87, -- ẇ
+ },
+ [0x1E88]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER W WITH DOT BELOW",
+ ["lccode"]=0x1E89,
+ ["linebreak"]="al",
+ ["shcode"]=0x0057,
+ ["specials"]={ "char", 0x0057, 0x0323 },
+ ["unicodeslot"]=0x1E88, -- Ẉ
+ },
+ [0x1E89]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER W WITH DOT BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x0077,
+ ["specials"]={ "char", 0x0077, 0x0323 },
+ ["uccode"]=0x1E88,
+ ["unicodeslot"]=0x1E89, -- ẉ
+ },
+ [0x1E8A]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER X WITH DOT ABOVE",
+ ["lccode"]=0x1E8B,
+ ["linebreak"]="al",
+ ["shcode"]=0x0058,
+ ["specials"]={ "char", 0x0058, 0x0307 },
+ ["unicodeslot"]=0x1E8A, -- Ẋ
+ },
+ [0x1E8B]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER X WITH DOT ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0078,
+ ["specials"]={ "char", 0x0078, 0x0307 },
+ ["uccode"]=0x1E8A,
+ ["unicodeslot"]=0x1E8B, -- ẋ
+ },
+ [0x1E8C]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER X WITH DIAERESIS",
+ ["lccode"]=0x1E8D,
+ ["linebreak"]="al",
+ ["shcode"]=0x0058,
+ ["specials"]={ "char", 0x0058, 0x0308 },
+ ["unicodeslot"]=0x1E8C, -- Ẍ
+ },
+ [0x1E8D]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER X WITH DIAERESIS",
+ ["linebreak"]="al",
+ ["shcode"]=0x0078,
+ ["specials"]={ "char", 0x0078, 0x0308 },
+ ["uccode"]=0x1E8C,
+ ["unicodeslot"]=0x1E8D, -- áº
+ },
+ [0x1E8E]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER Y WITH DOT ABOVE",
+ ["lccode"]=0x1E8F,
+ ["linebreak"]="al",
+ ["shcode"]=0x0059,
+ ["specials"]={ "char", 0x0059, 0x0307 },
+ ["unicodeslot"]=0x1E8E, -- Ẏ
+ },
+ [0x1E8F]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER Y WITH DOT ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0079,
+ ["specials"]={ "char", 0x0079, 0x0307 },
+ ["uccode"]=0x1E8E,
+ ["unicodeslot"]=0x1E8F, -- áº
+ },
+ [0x1E90]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER Z WITH CIRCUMFLEX",
+ ["lccode"]=0x1E91,
+ ["linebreak"]="al",
+ ["shcode"]=0x005A,
+ ["specials"]={ "char", 0x005A, 0x0302 },
+ ["unicodeslot"]=0x1E90, -- áº
+ },
+ [0x1E91]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER Z WITH CIRCUMFLEX",
+ ["linebreak"]="al",
+ ["shcode"]=0x007A,
+ ["specials"]={ "char", 0x007A, 0x0302 },
+ ["uccode"]=0x1E90,
+ ["unicodeslot"]=0x1E91, -- ẑ
+ },
+ [0x1E92]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER Z WITH DOT BELOW",
+ ["lccode"]=0x1E93,
+ ["linebreak"]="al",
+ ["shcode"]=0x005A,
+ ["specials"]={ "char", 0x005A, 0x0323 },
+ ["unicodeslot"]=0x1E92, -- Ẓ
+ },
+ [0x1E93]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER Z WITH DOT BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x007A,
+ ["specials"]={ "char", 0x007A, 0x0323 },
+ ["uccode"]=0x1E92,
+ ["unicodeslot"]=0x1E93, -- ẓ
+ },
+ [0x1E94]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER Z WITH LINE BELOW",
+ ["lccode"]=0x1E95,
+ ["linebreak"]="al",
+ ["shcode"]=0x005A,
+ ["specials"]={ "char", 0x005A, 0x0331 },
+ ["unicodeslot"]=0x1E94, -- Ẕ
+ },
+ [0x1E95]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER Z WITH LINE BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x007A,
+ ["specials"]={ "char", 0x007A, 0x0331 },
+ ["uccode"]=0x1E94,
+ ["unicodeslot"]=0x1E95, -- ẕ
+ },
+ [0x1E96]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER H WITH LINE BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x0068,
+ ["specials"]={ "char", 0x0068, 0x0331 },
+ ["unicodeslot"]=0x1E96, -- ẖ
+ },
+ [0x1E97]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER T WITH DIAERESIS",
+ ["linebreak"]="al",
+ ["shcode"]=0x0074,
+ ["specials"]={ "char", 0x0074, 0x0308 },
+ ["unicodeslot"]=0x1E97, -- ẗ
+ },
+ [0x1E98]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER W WITH RING ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0077,
+ ["specials"]={ "char", 0x0077, 0x030A },
+ ["unicodeslot"]=0x1E98, -- ẘ
+ },
+ [0x1E99]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER Y WITH RING ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0079,
+ ["specials"]={ "char", 0x0079, 0x030A },
+ ["unicodeslot"]=0x1E99, -- ẙ
+ },
+ [0x1E9A]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER A WITH RIGHT HALF RING",
+ ["linebreak"]="al",
+ ["shcode"]=0x0061,
+ ["specials"]={ "compat", 0x0061, 0x02BE },
+ ["unicodeslot"]=0x1E9A, -- ẚ
+ },
+ [0x1E9B]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER LONG S WITH DOT ABOVE",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x017F, 0x0307 },
+ ["uccode"]=0x1E60,
+ ["unicodeslot"]=0x1E9B, -- ẛ
+ },
+ [0x1EA0]={
+ ["category"]="lu",
+ ["contextname"]="Adotbelow",
+ ["description"]="LATIN CAPITAL LETTER A WITH DOT BELOW",
+ ["lccode"]=0x1EA1,
+ ["linebreak"]="al",
+ ["shcode"]=0x0041,
+ ["specials"]={ "char", 0x0041, 0x0323 },
+ ["unicodeslot"]=0x1EA0, -- Ạ
+ },
+ [0x1EA1]={
+ ["category"]="ll",
+ ["contextname"]="adotbelow",
+ ["description"]="LATIN SMALL LETTER A WITH DOT BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x0061,
+ ["specials"]={ "char", 0x0061, 0x0323 },
+ ["uccode"]=0x1EA0,
+ ["unicodeslot"]=0x1EA1, -- ạ
+ },
+ [0x1EA2]={
+ ["category"]="lu",
+ ["contextname"]="Ahook",
+ ["description"]="LATIN CAPITAL LETTER A WITH HOOK ABOVE",
+ ["lccode"]=0x1EA3,
+ ["linebreak"]="al",
+ ["shcode"]=0x0041,
+ ["specials"]={ "char", 0x0041, 0x0309 },
+ ["unicodeslot"]=0x1EA2, -- Ả
+ },
+ [0x1EA3]={
+ ["category"]="ll",
+ ["contextname"]="ahook",
+ ["description"]="LATIN SMALL LETTER A WITH HOOK ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0061,
+ ["specials"]={ "char", 0x0061, 0x0309 },
+ ["uccode"]=0x1EA2,
+ ["unicodeslot"]=0x1EA3, -- ả
+ },
+ [0x1EA4]={
+ ["category"]="lu",
+ ["contextname"]="Acircumflexacute",
+ ["description"]="LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE",
+ ["lccode"]=0x1EA5,
+ ["linebreak"]="al",
+ ["shcode"]=0x0041,
+ ["specials"]={ "char", 0x00C2, 0x0301 },
+ ["unicodeslot"]=0x1EA4, -- Ấ
+ },
+ [0x1EA5]={
+ ["category"]="ll",
+ ["contextname"]="acircumflexacute",
+ ["description"]="LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0061,
+ ["specials"]={ "char", 0x00E2, 0x0301 },
+ ["uccode"]=0x1EA4,
+ ["unicodeslot"]=0x1EA5, -- ấ
+ },
+ [0x1EA6]={
+ ["category"]="lu",
+ ["contextname"]="Acircumflexgrave",
+ ["description"]="LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE",
+ ["lccode"]=0x1EA7,
+ ["linebreak"]="al",
+ ["shcode"]=0x0041,
+ ["specials"]={ "char", 0x00C2, 0x0300 },
+ ["unicodeslot"]=0x1EA6, -- Ầ
+ },
+ [0x1EA7]={
+ ["category"]="ll",
+ ["contextname"]="acircumflexgrave",
+ ["description"]="LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0061,
+ ["specials"]={ "char", 0x00E2, 0x0300 },
+ ["uccode"]=0x1EA6,
+ ["unicodeslot"]=0x1EA7, -- ầ
+ },
+ [0x1EA8]={
+ ["category"]="lu",
+ ["contextname"]="Acircumflexhook",
+ ["description"]="LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE",
+ ["lccode"]=0x1EA9,
+ ["linebreak"]="al",
+ ["shcode"]=0x0041,
+ ["specials"]={ "char", 0x00C2, 0x0309 },
+ ["unicodeslot"]=0x1EA8, -- Ẩ
+ },
+ [0x1EA9]={
+ ["category"]="ll",
+ ["contextname"]="acircumflexhook",
+ ["description"]="LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0061,
+ ["specials"]={ "char", 0x00E2, 0x0309 },
+ ["uccode"]=0x1EA8,
+ ["unicodeslot"]=0x1EA9, -- ẩ
+ },
+ [0x1EAA]={
+ ["category"]="lu",
+ ["contextname"]="Acircumflextilde",
+ ["description"]="LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE",
+ ["lccode"]=0x1EAB,
+ ["linebreak"]="al",
+ ["shcode"]=0x0041,
+ ["specials"]={ "char", 0x00C2, 0x0303 },
+ ["unicodeslot"]=0x1EAA, -- Ẫ
+ },
+ [0x1EAB]={
+ ["category"]="ll",
+ ["contextname"]="acircumflextilde",
+ ["description"]="LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0061,
+ ["specials"]={ "char", 0x00E2, 0x0303 },
+ ["uccode"]=0x1EAA,
+ ["unicodeslot"]=0x1EAB, -- ẫ
+ },
+ [0x1EAC]={
+ ["category"]="lu",
+ ["contextname"]="Acircumflexdotbelow",
+ ["description"]="LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW",
+ ["lccode"]=0x1EAD,
+ ["linebreak"]="al",
+ ["shcode"]=0x0041,
+ ["specials"]={ "char", 0x1EA0, 0x0302 },
+ ["unicodeslot"]=0x1EAC, -- Ậ
+ },
+ [0x1EAD]={
+ ["category"]="ll",
+ ["contextname"]="acircumflexdotbelow",
+ ["description"]="LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x0061,
+ ["specials"]={ "char", 0x1EA1, 0x0302 },
+ ["uccode"]=0x1EAC,
+ ["unicodeslot"]=0x1EAD, -- ậ
+ },
+ [0x1EAE]={
+ ["category"]="lu",
+ ["contextname"]="Abreveacute",
+ ["description"]="LATIN CAPITAL LETTER A WITH BREVE AND ACUTE",
+ ["lccode"]=0x1EAF,
+ ["linebreak"]="al",
+ ["shcode"]=0x0041,
+ ["specials"]={ "char", 0x0102, 0x0301 },
+ ["unicodeslot"]=0x1EAE, -- Ắ
+ },
+ [0x1EAF]={
+ ["category"]="ll",
+ ["contextname"]="abreveacute",
+ ["description"]="LATIN SMALL LETTER A WITH BREVE AND ACUTE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0061,
+ ["specials"]={ "char", 0x0103, 0x0301 },
+ ["uccode"]=0x1EAE,
+ ["unicodeslot"]=0x1EAF, -- ắ
+ },
+ [0x1EB0]={
+ ["category"]="lu",
+ ["contextname"]="Abrevegrave",
+ ["description"]="LATIN CAPITAL LETTER A WITH BREVE AND GRAVE",
+ ["lccode"]=0x1EB1,
+ ["linebreak"]="al",
+ ["shcode"]=0x0041,
+ ["specials"]={ "char", 0x0102, 0x0300 },
+ ["unicodeslot"]=0x1EB0, -- Ằ
+ },
+ [0x1EB1]={
+ ["category"]="ll",
+ ["contextname"]="abrevegrave",
+ ["description"]="LATIN SMALL LETTER A WITH BREVE AND GRAVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0061,
+ ["specials"]={ "char", 0x0103, 0x0300 },
+ ["uccode"]=0x1EB0,
+ ["unicodeslot"]=0x1EB1, -- ằ
+ },
+ [0x1EB2]={
+ ["category"]="lu",
+ ["contextname"]="Abrevehook",
+ ["description"]="LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE",
+ ["lccode"]=0x1EB3,
+ ["linebreak"]="al",
+ ["shcode"]=0x0041,
+ ["specials"]={ "char", 0x0102, 0x0309 },
+ ["unicodeslot"]=0x1EB2, -- Ẳ
+ },
+ [0x1EB3]={
+ ["category"]="ll",
+ ["contextname"]="abrevehook",
+ ["description"]="LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0061,
+ ["specials"]={ "char", 0x0103, 0x0309 },
+ ["uccode"]=0x1EB2,
+ ["unicodeslot"]=0x1EB3, -- ẳ
+ },
+ [0x1EB4]={
+ ["category"]="lu",
+ ["contextname"]="Abrevetilde",
+ ["description"]="LATIN CAPITAL LETTER A WITH BREVE AND TILDE",
+ ["lccode"]=0x1EB5,
+ ["linebreak"]="al",
+ ["shcode"]=0x0041,
+ ["specials"]={ "char", 0x0102, 0x0303 },
+ ["unicodeslot"]=0x1EB4, -- Ẵ
+ },
+ [0x1EB5]={
+ ["category"]="ll",
+ ["contextname"]="abrevetilde",
+ ["description"]="LATIN SMALL LETTER A WITH BREVE AND TILDE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0061,
+ ["specials"]={ "char", 0x0103, 0x0303 },
+ ["uccode"]=0x1EB4,
+ ["unicodeslot"]=0x1EB5, -- ẵ
+ },
+ [0x1EB6]={
+ ["category"]="lu",
+ ["contextname"]="Abrevedotbelow",
+ ["description"]="LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW",
+ ["lccode"]=0x1EB7,
+ ["linebreak"]="al",
+ ["shcode"]=0x0041,
+ ["specials"]={ "char", 0x1EA0, 0x0306 },
+ ["unicodeslot"]=0x1EB6, -- Ặ
+ },
+ [0x1EB7]={
+ ["category"]="ll",
+ ["contextname"]="abrevedotbelow",
+ ["description"]="LATIN SMALL LETTER A WITH BREVE AND DOT BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x0061,
+ ["specials"]={ "char", 0x1EA1, 0x0306 },
+ ["uccode"]=0x1EB6,
+ ["unicodeslot"]=0x1EB7, -- ặ
+ },
+ [0x1EB8]={
+ ["category"]="lu",
+ ["contextname"]="Edotbelow",
+ ["description"]="LATIN CAPITAL LETTER E WITH DOT BELOW",
+ ["lccode"]=0x1EB9,
+ ["linebreak"]="al",
+ ["shcode"]=0x0045,
+ ["specials"]={ "char", 0x0045, 0x0323 },
+ ["unicodeslot"]=0x1EB8, -- Ẹ
+ },
+ [0x1EB9]={
+ ["category"]="ll",
+ ["contextname"]="edotbelow",
+ ["description"]="LATIN SMALL LETTER E WITH DOT BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x0065,
+ ["specials"]={ "char", 0x0065, 0x0323 },
+ ["uccode"]=0x1EB8,
+ ["unicodeslot"]=0x1EB9, -- ẹ
+ },
+ [0x1EBA]={
+ ["category"]="lu",
+ ["contextname"]="Ehook",
+ ["description"]="LATIN CAPITAL LETTER E WITH HOOK ABOVE",
+ ["lccode"]=0x1EBB,
+ ["linebreak"]="al",
+ ["shcode"]=0x0045,
+ ["specials"]={ "char", 0x0045, 0x0309 },
+ ["unicodeslot"]=0x1EBA, -- Ẻ
+ },
+ [0x1EBB]={
+ ["category"]="ll",
+ ["contextname"]="ehook",
+ ["description"]="LATIN SMALL LETTER E WITH HOOK ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0065,
+ ["specials"]={ "char", 0x0065, 0x0309 },
+ ["uccode"]=0x1EBA,
+ ["unicodeslot"]=0x1EBB, -- ẻ
+ },
+ [0x1EBC]={
+ ["category"]="lu",
+ ["contextname"]="Etilde",
+ ["description"]="LATIN CAPITAL LETTER E WITH TILDE",
+ ["lccode"]=0x1EBD,
+ ["linebreak"]="al",
+ ["shcode"]=0x0045,
+ ["specials"]={ "char", 0x0045, 0x0303 },
+ ["unicodeslot"]=0x1EBC, -- Ẽ
+ },
+ [0x1EBD]={
+ ["category"]="ll",
+ ["contextname"]="etilde",
+ ["description"]="LATIN SMALL LETTER E WITH TILDE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0065,
+ ["specials"]={ "char", 0x0065, 0x0303 },
+ ["uccode"]=0x1EBC,
+ ["unicodeslot"]=0x1EBD, -- ẽ
+ },
+ [0x1EBE]={
+ ["category"]="lu",
+ ["contextname"]="Ecircumflexacute",
+ ["description"]="LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE",
+ ["lccode"]=0x1EBF,
+ ["linebreak"]="al",
+ ["shcode"]=0x0045,
+ ["specials"]={ "char", 0x00CA, 0x0301 },
+ ["unicodeslot"]=0x1EBE, -- Ế
+ },
+ [0x1EBF]={
+ ["category"]="ll",
+ ["contextname"]="ecircumflexacute",
+ ["description"]="LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0065,
+ ["specials"]={ "char", 0x00EA, 0x0301 },
+ ["uccode"]=0x1EBE,
+ ["unicodeslot"]=0x1EBF, -- ế
+ },
+ [0x1EC0]={
+ ["category"]="lu",
+ ["contextname"]="Ecircumflexgrave",
+ ["description"]="LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE",
+ ["lccode"]=0x1EC1,
+ ["linebreak"]="al",
+ ["shcode"]=0x0045,
+ ["specials"]={ "char", 0x00CA, 0x0300 },
+ ["unicodeslot"]=0x1EC0, -- Ề
+ },
+ [0x1EC1]={
+ ["category"]="ll",
+ ["contextname"]="ecircumflexgrave",
+ ["description"]="LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0065,
+ ["specials"]={ "char", 0x00EA, 0x0300 },
+ ["uccode"]=0x1EC0,
+ ["unicodeslot"]=0x1EC1, -- á»
+ },
+ [0x1EC2]={
+ ["category"]="lu",
+ ["contextname"]="Ecircumflexhook",
+ ["description"]="LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE",
+ ["lccode"]=0x1EC3,
+ ["linebreak"]="al",
+ ["shcode"]=0x0045,
+ ["specials"]={ "char", 0x00CA, 0x0309 },
+ ["unicodeslot"]=0x1EC2, -- Ể
+ },
+ [0x1EC3]={
+ ["category"]="ll",
+ ["contextname"]="ecircumflexhook",
+ ["description"]="LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0065,
+ ["specials"]={ "char", 0x00EA, 0x0309 },
+ ["uccode"]=0x1EC2,
+ ["unicodeslot"]=0x1EC3, -- ể
+ },
+ [0x1EC4]={
+ ["category"]="lu",
+ ["contextname"]="Ecircumflextilde",
+ ["description"]="LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE",
+ ["lccode"]=0x1EC5,
+ ["linebreak"]="al",
+ ["shcode"]=0x0045,
+ ["specials"]={ "char", 0x00CA, 0x0303 },
+ ["unicodeslot"]=0x1EC4, -- Ễ
+ },
+ [0x1EC5]={
+ ["category"]="ll",
+ ["contextname"]="ecircumflextilde",
+ ["description"]="LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0065,
+ ["specials"]={ "char", 0x00EA, 0x0303 },
+ ["uccode"]=0x1EC4,
+ ["unicodeslot"]=0x1EC5, -- á»…
+ },
+ [0x1EC6]={
+ ["category"]="lu",
+ ["contextname"]="Ecircumflexdotbelow",
+ ["description"]="LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW",
+ ["lccode"]=0x1EC7,
+ ["linebreak"]="al",
+ ["shcode"]=0x0045,
+ ["specials"]={ "char", 0x1EB8, 0x0302 },
+ ["unicodeslot"]=0x1EC6, -- Ệ
+ },
+ [0x1EC7]={
+ ["category"]="ll",
+ ["contextname"]="ecircumflexdotbelow",
+ ["description"]="LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x0065,
+ ["specials"]={ "char", 0x1EB9, 0x0302 },
+ ["uccode"]=0x1EC6,
+ ["unicodeslot"]=0x1EC7, -- ệ
+ },
+ [0x1EC8]={
+ ["category"]="lu",
+ ["contextname"]="Ihook",
+ ["description"]="LATIN CAPITAL LETTER I WITH HOOK ABOVE",
+ ["lccode"]=0x1EC9,
+ ["linebreak"]="al",
+ ["shcode"]=0x0049,
+ ["specials"]={ "char", 0x0049, 0x0309 },
+ ["unicodeslot"]=0x1EC8, -- Ỉ
+ },
+ [0x1EC9]={
+ ["category"]="ll",
+ ["contextname"]="ihook",
+ ["description"]="LATIN SMALL LETTER I WITH HOOK ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0069,
+ ["specials"]={ "char", 0x0069, 0x0309 },
+ ["uccode"]=0x1EC8,
+ ["unicodeslot"]=0x1EC9, -- ỉ
+ },
+ [0x1ECA]={
+ ["category"]="lu",
+ ["contextname"]="Idotbelow",
+ ["description"]="LATIN CAPITAL LETTER I WITH DOT BELOW",
+ ["lccode"]=0x1ECB,
+ ["linebreak"]="al",
+ ["shcode"]=0x0049,
+ ["specials"]={ "char", 0x0049, 0x0323 },
+ ["unicodeslot"]=0x1ECA, -- Ị
+ },
+ [0x1ECB]={
+ ["category"]="ll",
+ ["contextname"]="idotbelow",
+ ["description"]="LATIN SMALL LETTER I WITH DOT BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x0069,
+ ["specials"]={ "char", 0x0069, 0x0323 },
+ ["uccode"]=0x1ECA,
+ ["unicodeslot"]=0x1ECB, -- ị
+ },
+ [0x1ECC]={
+ ["category"]="lu",
+ ["contextname"]="Odotbelow",
+ ["description"]="LATIN CAPITAL LETTER O WITH DOT BELOW",
+ ["lccode"]=0x1ECD,
+ ["linebreak"]="al",
+ ["shcode"]=0x004F,
+ ["specials"]={ "char", 0x004F, 0x0323 },
+ ["unicodeslot"]=0x1ECC, -- Ọ
+ },
+ [0x1ECD]={
+ ["category"]="ll",
+ ["contextname"]="odotbelow",
+ ["description"]="LATIN SMALL LETTER O WITH DOT BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x006F,
+ ["specials"]={ "char", 0x006F, 0x0323 },
+ ["uccode"]=0x1ECC,
+ ["unicodeslot"]=0x1ECD, -- á»
+ },
+ [0x1ECE]={
+ ["category"]="lu",
+ ["contextname"]="Ohook",
+ ["description"]="LATIN CAPITAL LETTER O WITH HOOK ABOVE",
+ ["lccode"]=0x1ECF,
+ ["linebreak"]="al",
+ ["shcode"]=0x004F,
+ ["specials"]={ "char", 0x004F, 0x0309 },
+ ["unicodeslot"]=0x1ECE, -- Ỏ
+ },
+ [0x1ECF]={
+ ["category"]="ll",
+ ["contextname"]="ohook",
+ ["description"]="LATIN SMALL LETTER O WITH HOOK ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x006F,
+ ["specials"]={ "char", 0x006F, 0x0309 },
+ ["uccode"]=0x1ECE,
+ ["unicodeslot"]=0x1ECF, -- á»
+ },
+ [0x1ED0]={
+ ["category"]="lu",
+ ["contextname"]="Ocircumflexacute",
+ ["description"]="LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE",
+ ["lccode"]=0x1ED1,
+ ["linebreak"]="al",
+ ["shcode"]=0x004F,
+ ["specials"]={ "char", 0x00D4, 0x0301 },
+ ["unicodeslot"]=0x1ED0, -- á»
+ },
+ [0x1ED1]={
+ ["category"]="ll",
+ ["contextname"]="ocircumflexacute",
+ ["description"]="LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE",
+ ["linebreak"]="al",
+ ["shcode"]=0x006F,
+ ["specials"]={ "char", 0x00F4, 0x0301 },
+ ["uccode"]=0x1ED0,
+ ["unicodeslot"]=0x1ED1, -- ố
+ },
+ [0x1ED2]={
+ ["category"]="lu",
+ ["contextname"]="Ocircumflexgrave",
+ ["description"]="LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE",
+ ["lccode"]=0x1ED3,
+ ["linebreak"]="al",
+ ["shcode"]=0x004F,
+ ["specials"]={ "char", 0x00D4, 0x0300 },
+ ["unicodeslot"]=0x1ED2, -- á»’
+ },
+ [0x1ED3]={
+ ["category"]="ll",
+ ["contextname"]="ocircumflexgrave",
+ ["description"]="LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x006F,
+ ["specials"]={ "char", 0x00F4, 0x0300 },
+ ["uccode"]=0x1ED2,
+ ["unicodeslot"]=0x1ED3, -- ồ
+ },
+ [0x1ED4]={
+ ["category"]="lu",
+ ["contextname"]="Ocircumflexhook",
+ ["description"]="LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE",
+ ["lccode"]=0x1ED5,
+ ["linebreak"]="al",
+ ["shcode"]=0x004F,
+ ["specials"]={ "char", 0x00D4, 0x0309 },
+ ["unicodeslot"]=0x1ED4, -- á»”
+ },
+ [0x1ED5]={
+ ["category"]="ll",
+ ["contextname"]="ocircumflexhook",
+ ["description"]="LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x006F,
+ ["specials"]={ "char", 0x00F4, 0x0309 },
+ ["uccode"]=0x1ED4,
+ ["unicodeslot"]=0x1ED5, -- ổ
+ },
+ [0x1ED6]={
+ ["category"]="lu",
+ ["contextname"]="Ocircumflextilde",
+ ["description"]="LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE",
+ ["lccode"]=0x1ED7,
+ ["linebreak"]="al",
+ ["shcode"]=0x004F,
+ ["specials"]={ "char", 0x00D4, 0x0303 },
+ ["unicodeslot"]=0x1ED6, -- á»–
+ },
+ [0x1ED7]={
+ ["category"]="ll",
+ ["contextname"]="ocircumflextilde",
+ ["description"]="LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE",
+ ["linebreak"]="al",
+ ["shcode"]=0x006F,
+ ["specials"]={ "char", 0x00F4, 0x0303 },
+ ["uccode"]=0x1ED6,
+ ["unicodeslot"]=0x1ED7, -- á»—
+ },
+ [0x1ED8]={
+ ["category"]="lu",
+ ["contextname"]="Ocircumflexdotbelow",
+ ["description"]="LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW",
+ ["lccode"]=0x1ED9,
+ ["linebreak"]="al",
+ ["shcode"]=0x004F,
+ ["specials"]={ "char", 0x1ECC, 0x0302 },
+ ["unicodeslot"]=0x1ED8, -- Ộ
+ },
+ [0x1ED9]={
+ ["category"]="ll",
+ ["contextname"]="ocircumflexdotbelow",
+ ["description"]="LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x006F,
+ ["specials"]={ "char", 0x1ECD, 0x0302 },
+ ["uccode"]=0x1ED8,
+ ["unicodeslot"]=0x1ED9, -- á»™
+ },
+ [0x1EDA]={
+ ["category"]="lu",
+ ["contextname"]="Ohornacute",
+ ["description"]="LATIN CAPITAL LETTER O WITH HORN AND ACUTE",
+ ["lccode"]=0x1EDB,
+ ["linebreak"]="al",
+ ["shcode"]=0x004F,
+ ["specials"]={ "char", 0x01A0, 0x0301 },
+ ["unicodeslot"]=0x1EDA, -- Ớ
+ },
+ [0x1EDB]={
+ ["category"]="ll",
+ ["contextname"]="ohornacute",
+ ["description"]="LATIN SMALL LETTER O WITH HORN AND ACUTE",
+ ["linebreak"]="al",
+ ["shcode"]=0x006F,
+ ["specials"]={ "char", 0x01A1, 0x0301 },
+ ["uccode"]=0x1EDA,
+ ["unicodeslot"]=0x1EDB, -- á»›
+ },
+ [0x1EDC]={
+ ["category"]="lu",
+ ["contextname"]="Ohorngrave",
+ ["description"]="LATIN CAPITAL LETTER O WITH HORN AND GRAVE",
+ ["lccode"]=0x1EDD,
+ ["linebreak"]="al",
+ ["shcode"]=0x004F,
+ ["specials"]={ "char", 0x01A0, 0x0300 },
+ ["unicodeslot"]=0x1EDC, -- Ờ
+ },
+ [0x1EDD]={
+ ["category"]="ll",
+ ["contextname"]="ohorngrave",
+ ["description"]="LATIN SMALL LETTER O WITH HORN AND GRAVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x006F,
+ ["specials"]={ "char", 0x01A1, 0x0300 },
+ ["uccode"]=0x1EDC,
+ ["unicodeslot"]=0x1EDD, -- á»
+ },
+ [0x1EDE]={
+ ["category"]="lu",
+ ["contextname"]="Ohornhook",
+ ["description"]="LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE",
+ ["lccode"]=0x1EDF,
+ ["linebreak"]="al",
+ ["shcode"]=0x004F,
+ ["specials"]={ "char", 0x01A0, 0x0309 },
+ ["unicodeslot"]=0x1EDE, -- Ở
+ },
+ [0x1EDF]={
+ ["category"]="ll",
+ ["contextname"]="ohornhook",
+ ["description"]="LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x006F,
+ ["specials"]={ "char", 0x01A1, 0x0309 },
+ ["uccode"]=0x1EDE,
+ ["unicodeslot"]=0x1EDF, -- ở
+ },
+ [0x1EE0]={
+ ["category"]="lu",
+ ["contextname"]="Ohorntilde",
+ ["description"]="LATIN CAPITAL LETTER O WITH HORN AND TILDE",
+ ["lccode"]=0x1EE1,
+ ["linebreak"]="al",
+ ["shcode"]=0x004F,
+ ["specials"]={ "char", 0x01A0, 0x0303 },
+ ["unicodeslot"]=0x1EE0, -- á» 
+ },
+ [0x1EE1]={
+ ["category"]="ll",
+ ["contextname"]="ohorntilde",
+ ["description"]="LATIN SMALL LETTER O WITH HORN AND TILDE",
+ ["linebreak"]="al",
+ ["shcode"]=0x006F,
+ ["specials"]={ "char", 0x01A1, 0x0303 },
+ ["uccode"]=0x1EE0,
+ ["unicodeslot"]=0x1EE1, -- ỡ
+ },
+ [0x1EE2]={
+ ["category"]="lu",
+ ["contextname"]="Ohorndotbelow",
+ ["description"]="LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW",
+ ["lccode"]=0x1EE3,
+ ["linebreak"]="al",
+ ["shcode"]=0x004F,
+ ["specials"]={ "char", 0x01A0, 0x0323 },
+ ["unicodeslot"]=0x1EE2, -- Ợ
+ },
+ [0x1EE3]={
+ ["category"]="ll",
+ ["contextname"]="ohorndotbelow",
+ ["description"]="LATIN SMALL LETTER O WITH HORN AND DOT BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x006F,
+ ["specials"]={ "char", 0x01A1, 0x0323 },
+ ["uccode"]=0x1EE2,
+ ["unicodeslot"]=0x1EE3, -- ợ
+ },
+ [0x1EE4]={
+ ["category"]="lu",
+ ["contextname"]="Udotbelow",
+ ["description"]="LATIN CAPITAL LETTER U WITH DOT BELOW",
+ ["lccode"]=0x1EE5,
+ ["linebreak"]="al",
+ ["shcode"]=0x0055,
+ ["specials"]={ "char", 0x0055, 0x0323 },
+ ["unicodeslot"]=0x1EE4, -- Ụ
+ },
+ [0x1EE5]={
+ ["category"]="ll",
+ ["contextname"]="udotbelow",
+ ["description"]="LATIN SMALL LETTER U WITH DOT BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x0075,
+ ["specials"]={ "char", 0x0075, 0x0323 },
+ ["uccode"]=0x1EE4,
+ ["unicodeslot"]=0x1EE5, -- ụ
+ },
+ [0x1EE6]={
+ ["category"]="lu",
+ ["contextname"]="Uhook",
+ ["description"]="LATIN CAPITAL LETTER U WITH HOOK ABOVE",
+ ["lccode"]=0x1EE7,
+ ["linebreak"]="al",
+ ["shcode"]=0x0055,
+ ["specials"]={ "char", 0x0055, 0x0309 },
+ ["unicodeslot"]=0x1EE6, -- Ủ
+ },
+ [0x1EE7]={
+ ["category"]="ll",
+ ["contextname"]="uhook",
+ ["description"]="LATIN SMALL LETTER U WITH HOOK ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0075,
+ ["specials"]={ "char", 0x0075, 0x0309 },
+ ["uccode"]=0x1EE6,
+ ["unicodeslot"]=0x1EE7, -- ủ
+ },
+ [0x1EE8]={
+ ["category"]="lu",
+ ["contextname"]="Uhornacute",
+ ["description"]="LATIN CAPITAL LETTER U WITH HORN AND ACUTE",
+ ["lccode"]=0x1EE9,
+ ["linebreak"]="al",
+ ["shcode"]=0x0055,
+ ["specials"]={ "char", 0x01AF, 0x0301 },
+ ["unicodeslot"]=0x1EE8, -- Ứ
+ },
+ [0x1EE9]={
+ ["category"]="ll",
+ ["contextname"]="uhornacute",
+ ["description"]="LATIN SMALL LETTER U WITH HORN AND ACUTE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0075,
+ ["specials"]={ "char", 0x01B0, 0x0301 },
+ ["uccode"]=0x1EE8,
+ ["unicodeslot"]=0x1EE9, -- ứ
+ },
+ [0x1EEA]={
+ ["category"]="lu",
+ ["contextname"]="Uhorngrave",
+ ["description"]="LATIN CAPITAL LETTER U WITH HORN AND GRAVE",
+ ["lccode"]=0x1EEB,
+ ["linebreak"]="al",
+ ["shcode"]=0x0055,
+ ["specials"]={ "char", 0x01AF, 0x0300 },
+ ["unicodeslot"]=0x1EEA, -- Ừ
+ },
+ [0x1EEB]={
+ ["category"]="ll",
+ ["contextname"]="uhorngrave",
+ ["description"]="LATIN SMALL LETTER U WITH HORN AND GRAVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0075,
+ ["specials"]={ "char", 0x01B0, 0x0300 },
+ ["uccode"]=0x1EEA,
+ ["unicodeslot"]=0x1EEB, -- ừ
+ },
+ [0x1EEC]={
+ ["category"]="lu",
+ ["contextname"]="Uhornhook",
+ ["description"]="LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE",
+ ["lccode"]=0x1EED,
+ ["linebreak"]="al",
+ ["shcode"]=0x0055,
+ ["specials"]={ "char", 0x01AF, 0x0309 },
+ ["unicodeslot"]=0x1EEC, -- Ử
+ },
+ [0x1EED]={
+ ["category"]="ll",
+ ["contextname"]="uhornhook",
+ ["description"]="LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0075,
+ ["specials"]={ "char", 0x01B0, 0x0309 },
+ ["uccode"]=0x1EEC,
+ ["unicodeslot"]=0x1EED, -- á»­
+ },
+ [0x1EEE]={
+ ["category"]="lu",
+ ["contextname"]="Uhorntilde",
+ ["description"]="LATIN CAPITAL LETTER U WITH HORN AND TILDE",
+ ["lccode"]=0x1EEF,
+ ["linebreak"]="al",
+ ["shcode"]=0x0055,
+ ["specials"]={ "char", 0x01AF, 0x0303 },
+ ["unicodeslot"]=0x1EEE, -- á»®
+ },
+ [0x1EEF]={
+ ["category"]="ll",
+ ["contextname"]="uhorntilde",
+ ["description"]="LATIN SMALL LETTER U WITH HORN AND TILDE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0075,
+ ["specials"]={ "char", 0x01B0, 0x0303 },
+ ["uccode"]=0x1EEE,
+ ["unicodeslot"]=0x1EEF, -- ữ
+ },
+ [0x1EF0]={
+ ["category"]="lu",
+ ["contextname"]="Uhorndotbelow",
+ ["description"]="LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW",
+ ["lccode"]=0x1EF1,
+ ["linebreak"]="al",
+ ["shcode"]=0x0055,
+ ["specials"]={ "char", 0x01AF, 0x0323 },
+ ["unicodeslot"]=0x1EF0, -- á»°
+ },
+ [0x1EF1]={
+ ["category"]="ll",
+ ["contextname"]="uhorndotbelow",
+ ["description"]="LATIN SMALL LETTER U WITH HORN AND DOT BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x0075,
+ ["specials"]={ "char", 0x01B0, 0x0323 },
+ ["uccode"]=0x1EF0,
+ ["unicodeslot"]=0x1EF1, -- á»±
+ },
+ [0x1EF2]={
+ ["adobename"]="Ygrave",
+ ["category"]="lu",
+ ["contextname"]="Ygrave",
+ ["description"]="LATIN CAPITAL LETTER Y WITH GRAVE",
+ ["lccode"]=0x1EF3,
+ ["linebreak"]="al",
+ ["shcode"]=0x0059,
+ ["specials"]={ "char", 0x0059, 0x0300 },
+ ["unicodeslot"]=0x1EF2, -- Ỳ
+ },
+ [0x1EF3]={
+ ["adobename"]="ygrave",
+ ["category"]="ll",
+ ["contextname"]="ygrave",
+ ["description"]="LATIN SMALL LETTER Y WITH GRAVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0079,
+ ["specials"]={ "char", 0x0079, 0x0300 },
+ ["uccode"]=0x1EF2,
+ ["unicodeslot"]=0x1EF3, -- ỳ
+ },
+ [0x1EF4]={
+ ["category"]="lu",
+ ["contextname"]="Ydotbelow",
+ ["description"]="LATIN CAPITAL LETTER Y WITH DOT BELOW",
+ ["lccode"]=0x1EF5,
+ ["linebreak"]="al",
+ ["shcode"]=0x0059,
+ ["specials"]={ "char", 0x0059, 0x0323 },
+ ["unicodeslot"]=0x1EF4, -- á»´
+ },
+ [0x1EF5]={
+ ["category"]="ll",
+ ["contextname"]="ydotbelow",
+ ["description"]="LATIN SMALL LETTER Y WITH DOT BELOW",
+ ["linebreak"]="al",
+ ["shcode"]=0x0079,
+ ["specials"]={ "char", 0x0079, 0x0323 },
+ ["uccode"]=0x1EF4,
+ ["unicodeslot"]=0x1EF5, -- ỵ
+ },
+ [0x1EF6]={
+ ["category"]="lu",
+ ["contextname"]="Yhook",
+ ["description"]="LATIN CAPITAL LETTER Y WITH HOOK ABOVE",
+ ["lccode"]=0x1EF7,
+ ["linebreak"]="al",
+ ["shcode"]=0x0059,
+ ["specials"]={ "char", 0x0059, 0x0309 },
+ ["unicodeslot"]=0x1EF6, -- Ỷ
+ },
+ [0x1EF7]={
+ ["category"]="ll",
+ ["contextname"]="yhook",
+ ["description"]="LATIN SMALL LETTER Y WITH HOOK ABOVE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0079,
+ ["specials"]={ "char", 0x0079, 0x0309 },
+ ["uccode"]=0x1EF6,
+ ["unicodeslot"]=0x1EF7, -- á»·
+ },
+ [0x1EF8]={
+ ["category"]="lu",
+ ["contextname"]="Ytilde",
+ ["description"]="LATIN CAPITAL LETTER Y WITH TILDE",
+ ["lccode"]=0x1EF9,
+ ["linebreak"]="al",
+ ["shcode"]=0x0059,
+ ["specials"]={ "char", 0x0059, 0x0303 },
+ ["unicodeslot"]=0x1EF8, -- Ỹ
+ },
+ [0x1EF9]={
+ ["category"]="ll",
+ ["contextname"]="ytilde",
+ ["description"]="LATIN SMALL LETTER Y WITH TILDE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0079,
+ ["specials"]={ "char", 0x0079, 0x0303 },
+ ["uccode"]=0x1EF8,
+ ["unicodeslot"]=0x1EF9, -- ỹ
+ },
+ [0x1F00]={
+ ["category"]="ll",
+ ["contextname"]="greekalphapsili",
+ ["description"]="GREEK SMALL LETTER ALPHA WITH PSILI",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B1,
+ ["specials"]={ "char", 0x03B1, 0x0313 },
+ ["uccode"]=0x1F08,
+ ["unicodeslot"]=0x1F00, -- á¼€
+ },
+ [0x1F01]={
+ ["category"]="ll",
+ ["contextname"]="greekalphadasia",
+ ["description"]="GREEK SMALL LETTER ALPHA WITH DASIA",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B1,
+ ["specials"]={ "char", 0x03B1, 0x0314 },
+ ["uccode"]=0x1F09,
+ ["unicodeslot"]=0x1F01, -- á¼
+ },
+ [0x1F02]={
+ ["category"]="ll",
+ ["contextname"]="greekalphapsilivaria",
+ ["description"]="GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B1,
+ ["specials"]={ "char", 0x1F00, 0x0300 },
+ ["uccode"]=0x1F0A,
+ ["unicodeslot"]=0x1F02, -- ἂ
+ },
+ [0x1F03]={
+ ["category"]="ll",
+ ["contextname"]="greekalphadasiavaria",
+ ["description"]="GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B1,
+ ["specials"]={ "char", 0x1F01, 0x0300 },
+ ["uccode"]=0x1F0B,
+ ["unicodeslot"]=0x1F03, -- ἃ
+ },
+ [0x1F04]={
+ ["category"]="ll",
+ ["contextname"]="greekalphapsilitonos",
+ ["description"]="GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B1,
+ ["specials"]={ "char", 0x1F00, 0x0301 },
+ ["uccode"]=0x1F0C,
+ ["unicodeslot"]=0x1F04, -- ἄ
+ },
+ [0x1F05]={
+ ["category"]="ll",
+ ["contextname"]="greekalphadasiatonos",
+ ["description"]="GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B1,
+ ["specials"]={ "char", 0x1F01, 0x0301 },
+ ["uccode"]=0x1F0D,
+ ["unicodeslot"]=0x1F05, -- á¼…
+ },
+ [0x1F06]={
+ ["category"]="ll",
+ ["contextname"]="greekalphapsiliperispomeni",
+ ["description"]="GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B1,
+ ["specials"]={ "char", 0x1F00, 0x0342 },
+ ["uccode"]=0x1F0E,
+ ["unicodeslot"]=0x1F06, -- ἆ
+ },
+ [0x1F07]={
+ ["category"]="ll",
+ ["contextname"]="greekalphadasiaperispomeni",
+ ["description"]="GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B1,
+ ["specials"]={ "char", 0x1F01, 0x0342 },
+ ["uccode"]=0x1F0F,
+ ["unicodeslot"]=0x1F07, -- ἇ
+ },
+ [0x1F08]={
+ ["category"]="lu",
+ ["contextname"]="greekAlphapsili",
+ ["description"]="GREEK CAPITAL LETTER ALPHA WITH PSILI",
+ ["lccode"]=0x1F00,
+ ["linebreak"]="al",
+ ["shcode"]=0x0391,
+ ["specials"]={ "char", 0x0391, 0x0313 },
+ ["unicodeslot"]=0x1F08, -- Ἀ
+ },
+ [0x1F09]={
+ ["category"]="lu",
+ ["contextname"]="greekAlphadasia",
+ ["description"]="GREEK CAPITAL LETTER ALPHA WITH DASIA",
+ ["lccode"]=0x1F01,
+ ["linebreak"]="al",
+ ["shcode"]=0x0391,
+ ["specials"]={ "char", 0x0391, 0x0314 },
+ ["unicodeslot"]=0x1F09, -- Ἁ
+ },
+ [0x1F0A]={
+ ["category"]="lu",
+ ["contextname"]="greekAlphapsilivaria",
+ ["description"]="GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA",
+ ["lccode"]=0x1F02,
+ ["linebreak"]="al",
+ ["shcode"]=0x0391,
+ ["specials"]={ "char", 0x1F08, 0x0300 },
+ ["unicodeslot"]=0x1F0A, -- Ἂ
+ },
+ [0x1F0B]={
+ ["category"]="lu",
+ ["contextname"]="greekAlphadasiavaria",
+ ["description"]="GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA",
+ ["lccode"]=0x1F03,
+ ["linebreak"]="al",
+ ["shcode"]=0x0391,
+ ["specials"]={ "char", 0x1F09, 0x0300 },
+ ["unicodeslot"]=0x1F0B, -- Ἃ
+ },
+ [0x1F0C]={
+ ["category"]="lu",
+ ["contextname"]="greekAlphapsilitonos",
+ ["description"]="GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA",
+ ["lccode"]=0x1F04,
+ ["linebreak"]="al",
+ ["shcode"]=0x0391,
+ ["specials"]={ "char", 0x1F08, 0x0301 },
+ ["unicodeslot"]=0x1F0C, -- Ἄ
+ },
+ [0x1F0D]={
+ ["category"]="lu",
+ ["contextname"]="greekAlphadasiatonos",
+ ["description"]="GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA",
+ ["lccode"]=0x1F05,
+ ["linebreak"]="al",
+ ["shcode"]=0x0391,
+ ["specials"]={ "char", 0x1F09, 0x0301 },
+ ["unicodeslot"]=0x1F0D, -- á¼
+ },
+ [0x1F0E]={
+ ["category"]="lu",
+ ["contextname"]="greekAlphapsiliperispomeni",
+ ["description"]="GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI",
+ ["lccode"]=0x1F06,
+ ["linebreak"]="al",
+ ["shcode"]=0x0391,
+ ["specials"]={ "char", 0x1F08, 0x0342 },
+ ["unicodeslot"]=0x1F0E, -- Ἆ
+ },
+ [0x1F0F]={
+ ["category"]="lu",
+ ["contextname"]="greekAlphadasiaperispomeni",
+ ["description"]="GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI",
+ ["lccode"]=0x1F07,
+ ["linebreak"]="al",
+ ["shcode"]=0x0391,
+ ["specials"]={ "char", 0x1F09, 0x0342 },
+ ["unicodeslot"]=0x1F0F, -- á¼
+ },
+ [0x1F10]={
+ ["category"]="ll",
+ ["contextname"]="greekepsilonpsili",
+ ["description"]="GREEK SMALL LETTER EPSILON WITH PSILI",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B5,
+ ["specials"]={ "char", 0x03B5, 0x0313 },
+ ["uccode"]=0x1F18,
+ ["unicodeslot"]=0x1F10, -- á¼
+ },
+ [0x1F11]={
+ ["category"]="ll",
+ ["contextname"]="greekepsilondasia",
+ ["description"]="GREEK SMALL LETTER EPSILON WITH DASIA",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B5,
+ ["specials"]={ "char", 0x03B5, 0x0314 },
+ ["uccode"]=0x1F19,
+ ["unicodeslot"]=0x1F11, -- ἑ
+ },
+ [0x1F12]={
+ ["category"]="ll",
+ ["contextname"]="greekepsilonpsilivaria",
+ ["description"]="GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B5,
+ ["specials"]={ "char", 0x1F10, 0x0300 },
+ ["uccode"]=0x1F1A,
+ ["unicodeslot"]=0x1F12, -- á¼’
+ },
+ [0x1F13]={
+ ["category"]="ll",
+ ["contextname"]="greekepsilondasiavaria",
+ ["description"]="GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B5,
+ ["specials"]={ "char", 0x1F11, 0x0300 },
+ ["uccode"]=0x1F1B,
+ ["unicodeslot"]=0x1F13, -- ἓ
+ },
+ [0x1F14]={
+ ["category"]="ll",
+ ["contextname"]="greekepsilonpsilitonos",
+ ["description"]="GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B5,
+ ["specials"]={ "char", 0x1F10, 0x0301 },
+ ["uccode"]=0x1F1C,
+ ["unicodeslot"]=0x1F14, -- á¼”
+ },
+ [0x1F15]={
+ ["category"]="ll",
+ ["contextname"]="greekepsilondasiatonos",
+ ["description"]="GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B5,
+ ["specials"]={ "char", 0x1F11, 0x0301 },
+ ["uccode"]=0x1F1D,
+ ["unicodeslot"]=0x1F15, -- ἕ
+ },
+ [0x1F18]={
+ ["category"]="lu",
+ ["contextname"]="greekEpsilonpsili",
+ ["description"]="GREEK CAPITAL LETTER EPSILON WITH PSILI",
+ ["lccode"]=0x1F10,
+ ["linebreak"]="al",
+ ["shcode"]=0x0395,
+ ["specials"]={ "char", 0x0395, 0x0313 },
+ ["unicodeslot"]=0x1F18, -- Ἐ
+ },
+ [0x1F19]={
+ ["category"]="lu",
+ ["contextname"]="greekEpsilondasia",
+ ["description"]="GREEK CAPITAL LETTER EPSILON WITH DASIA",
+ ["lccode"]=0x1F11,
+ ["linebreak"]="al",
+ ["shcode"]=0x0395,
+ ["specials"]={ "char", 0x0395, 0x0314 },
+ ["unicodeslot"]=0x1F19, -- á¼™
+ },
+ [0x1F1A]={
+ ["category"]="lu",
+ ["contextname"]="greekEpsilonpsilivaria",
+ ["description"]="GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA",
+ ["lccode"]=0x1F12,
+ ["linebreak"]="al",
+ ["shcode"]=0x0395,
+ ["specials"]={ "char", 0x1F18, 0x0300 },
+ ["unicodeslot"]=0x1F1A, -- Ἒ
+ },
+ [0x1F1B]={
+ ["category"]="lu",
+ ["contextname"]="greekEpsilondasiavaria",
+ ["description"]="GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA",
+ ["lccode"]=0x1F13,
+ ["linebreak"]="al",
+ ["shcode"]=0x0395,
+ ["specials"]={ "char", 0x1F19, 0x0300 },
+ ["unicodeslot"]=0x1F1B, -- á¼›
+ },
+ [0x1F1C]={
+ ["category"]="lu",
+ ["contextname"]="greekEpsilonpsilitonos",
+ ["description"]="GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA",
+ ["lccode"]=0x1F14,
+ ["linebreak"]="al",
+ ["shcode"]=0x0395,
+ ["specials"]={ "char", 0x1F18, 0x0301 },
+ ["unicodeslot"]=0x1F1C, -- Ἔ
+ },
+ [0x1F1D]={
+ ["category"]="lu",
+ ["contextname"]="greekEpsilondasiatonos",
+ ["description"]="GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA",
+ ["lccode"]=0x1F15,
+ ["linebreak"]="al",
+ ["shcode"]=0x0395,
+ ["specials"]={ "char", 0x1F19, 0x0301 },
+ ["unicodeslot"]=0x1F1D, -- á¼
+ },
+ [0x1F20]={
+ ["category"]="ll",
+ ["contextname"]="greeketapsili",
+ ["description"]="GREEK SMALL LETTER ETA WITH PSILI",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B7,
+ ["specials"]={ "char", 0x03B7, 0x0313 },
+ ["uccode"]=0x1F28,
+ ["unicodeslot"]=0x1F20, -- á¼ 
+ },
+ [0x1F21]={
+ ["category"]="ll",
+ ["contextname"]="greeketadasia",
+ ["description"]="GREEK SMALL LETTER ETA WITH DASIA",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B7,
+ ["specials"]={ "char", 0x03B7, 0x0314 },
+ ["uccode"]=0x1F29,
+ ["unicodeslot"]=0x1F21, -- ἡ
+ },
+ [0x1F22]={
+ ["category"]="ll",
+ ["contextname"]="greeketapsilivaria",
+ ["description"]="GREEK SMALL LETTER ETA WITH PSILI AND VARIA",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B7,
+ ["specials"]={ "char", 0x1F20, 0x0300 },
+ ["uccode"]=0x1F2A,
+ ["unicodeslot"]=0x1F22, -- á¼¢
+ },
+ [0x1F23]={
+ ["category"]="ll",
+ ["contextname"]="greeketadasiavaria",
+ ["description"]="GREEK SMALL LETTER ETA WITH DASIA AND VARIA",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B7,
+ ["specials"]={ "char", 0x1F21, 0x0300 },
+ ["uccode"]=0x1F2B,
+ ["unicodeslot"]=0x1F23, -- á¼£
+ },
+ [0x1F24]={
+ ["category"]="ll",
+ ["contextname"]="greeketapsilitonos",
+ ["description"]="GREEK SMALL LETTER ETA WITH PSILI AND OXIA",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B7,
+ ["specials"]={ "char", 0x1F20, 0x0301 },
+ ["uccode"]=0x1F2C,
+ ["unicodeslot"]=0x1F24, -- ἤ
+ },
+ [0x1F25]={
+ ["category"]="ll",
+ ["contextname"]="greeketadasiatonos",
+ ["description"]="GREEK SMALL LETTER ETA WITH DASIA AND OXIA",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B7,
+ ["specials"]={ "char", 0x1F21, 0x0301 },
+ ["uccode"]=0x1F2D,
+ ["unicodeslot"]=0x1F25, -- á¼¥
+ },
+ [0x1F26]={
+ ["category"]="ll",
+ ["contextname"]="greeketapsiliperispomeni",
+ ["description"]="GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B7,
+ ["specials"]={ "char", 0x1F20, 0x0342 },
+ ["uccode"]=0x1F2E,
+ ["unicodeslot"]=0x1F26, -- ἦ
+ },
+ [0x1F27]={
+ ["category"]="ll",
+ ["contextname"]="greeketadasiaperispomeni",
+ ["description"]="GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B7,
+ ["specials"]={ "char", 0x1F21, 0x0342 },
+ ["uccode"]=0x1F2F,
+ ["unicodeslot"]=0x1F27, -- ἧ
+ },
+ [0x1F28]={
+ ["category"]="lu",
+ ["contextname"]="greekEtapsili",
+ ["description"]="GREEK CAPITAL LETTER ETA WITH PSILI",
+ ["lccode"]=0x1F20,
+ ["linebreak"]="al",
+ ["shcode"]=0x0397,
+ ["specials"]={ "char", 0x0397, 0x0313 },
+ ["unicodeslot"]=0x1F28, -- Ἠ
+ },
+ [0x1F29]={
+ ["category"]="lu",
+ ["contextname"]="greekEtadasia",
+ ["description"]="GREEK CAPITAL LETTER ETA WITH DASIA",
+ ["lccode"]=0x1F21,
+ ["linebreak"]="al",
+ ["shcode"]=0x0397,
+ ["specials"]={ "char", 0x0397, 0x0314 },
+ ["unicodeslot"]=0x1F29, -- Ἡ
+ },
+ [0x1F2A]={
+ ["category"]="lu",
+ ["contextname"]="greekEtapsilivaria",
+ ["description"]="GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA",
+ ["lccode"]=0x1F22,
+ ["linebreak"]="al",
+ ["shcode"]=0x0397,
+ ["specials"]={ "char", 0x1F28, 0x0300 },
+ ["unicodeslot"]=0x1F2A, -- Ἢ
+ },
+ [0x1F2B]={
+ ["category"]="lu",
+ ["contextname"]="greekEtadasiavaria",
+ ["description"]="GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA",
+ ["lccode"]=0x1F23,
+ ["linebreak"]="al",
+ ["shcode"]=0x0397,
+ ["specials"]={ "char", 0x1F29, 0x0300 },
+ ["unicodeslot"]=0x1F2B, -- Ἣ
+ },
+ [0x1F2C]={
+ ["category"]="lu",
+ ["contextname"]="greekEtapsilitonos",
+ ["description"]="GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA",
+ ["lccode"]=0x1F24,
+ ["linebreak"]="al",
+ ["shcode"]=0x0397,
+ ["specials"]={ "char", 0x1F28, 0x0301 },
+ ["unicodeslot"]=0x1F2C, -- Ἤ
+ },
+ [0x1F2D]={
+ ["category"]="lu",
+ ["contextname"]="greekEtadasiatonos",
+ ["description"]="GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA",
+ ["lccode"]=0x1F25,
+ ["linebreak"]="al",
+ ["shcode"]=0x0397,
+ ["specials"]={ "char", 0x1F29, 0x0301 },
+ ["unicodeslot"]=0x1F2D, -- á¼­
+ },
+ [0x1F2E]={
+ ["category"]="lu",
+ ["contextname"]="greekEtapsiliperispomeni",
+ ["description"]="GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI",
+ ["lccode"]=0x1F26,
+ ["linebreak"]="al",
+ ["shcode"]=0x0397,
+ ["specials"]={ "char", 0x1F28, 0x0342 },
+ ["unicodeslot"]=0x1F2E, -- á¼®
+ },
+ [0x1F2F]={
+ ["category"]="lu",
+ ["contextname"]="greekEtadasiaperispomeni",
+ ["description"]="GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI",
+ ["lccode"]=0x1F27,
+ ["linebreak"]="al",
+ ["shcode"]=0x0397,
+ ["specials"]={ "char", 0x1F29, 0x0342 },
+ ["unicodeslot"]=0x1F2F, -- Ἧ
+ },
+ [0x1F30]={
+ ["category"]="ll",
+ ["contextname"]="greekiotapsili",
+ ["description"]="GREEK SMALL LETTER IOTA WITH PSILI",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B9,
+ ["specials"]={ "char", 0x03B9, 0x0313 },
+ ["uccode"]=0x1F38,
+ ["unicodeslot"]=0x1F30, -- á¼°
+ },
+ [0x1F31]={
+ ["category"]="ll",
+ ["contextname"]="greekiotadasia",
+ ["description"]="GREEK SMALL LETTER IOTA WITH DASIA",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B9,
+ ["specials"]={ "char", 0x03B9, 0x0314 },
+ ["uccode"]=0x1F39,
+ ["unicodeslot"]=0x1F31, -- á¼±
+ },
+ [0x1F32]={
+ ["category"]="ll",
+ ["contextname"]="greekiotapsilivaria",
+ ["description"]="GREEK SMALL LETTER IOTA WITH PSILI AND VARIA",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B9,
+ ["specials"]={ "char", 0x1F30, 0x0300 },
+ ["uccode"]=0x1F3A,
+ ["unicodeslot"]=0x1F32, -- á¼²
+ },
+ [0x1F33]={
+ ["category"]="ll",
+ ["contextname"]="greekiotadasiavaria",
+ ["description"]="GREEK SMALL LETTER IOTA WITH DASIA AND VARIA",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B9,
+ ["specials"]={ "char", 0x1F31, 0x0300 },
+ ["uccode"]=0x1F3B,
+ ["unicodeslot"]=0x1F33, -- á¼³
+ },
+ [0x1F34]={
+ ["category"]="ll",
+ ["contextname"]="greekiotapsilitonos",
+ ["description"]="GREEK SMALL LETTER IOTA WITH PSILI AND OXIA",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B9,
+ ["specials"]={ "char", 0x1F30, 0x0301 },
+ ["uccode"]=0x1F3C,
+ ["unicodeslot"]=0x1F34, -- á¼´
+ },
+ [0x1F35]={
+ ["category"]="ll",
+ ["contextname"]="greekiotadasiatonos",
+ ["description"]="GREEK SMALL LETTER IOTA WITH DASIA AND OXIA",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B9,
+ ["specials"]={ "char", 0x1F31, 0x0301 },
+ ["uccode"]=0x1F3D,
+ ["unicodeslot"]=0x1F35, -- á¼µ
+ },
+ [0x1F36]={
+ ["category"]="ll",
+ ["contextname"]="greekiotapsiliperispomeni",
+ ["description"]="GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B9,
+ ["specials"]={ "char", 0x1F30, 0x0342 },
+ ["uccode"]=0x1F3E,
+ ["unicodeslot"]=0x1F36, -- ἶ
+ },
+ [0x1F37]={
+ ["category"]="ll",
+ ["contextname"]="greekiotadasiaperispomeni",
+ ["description"]="GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B9,
+ ["specials"]={ "char", 0x1F31, 0x0342 },
+ ["uccode"]=0x1F3F,
+ ["unicodeslot"]=0x1F37, -- á¼·
+ },
+ [0x1F38]={
+ ["category"]="lu",
+ ["contextname"]="greekIotapsili",
+ ["description"]="GREEK CAPITAL LETTER IOTA WITH PSILI",
+ ["lccode"]=0x1F30,
+ ["linebreak"]="al",
+ ["shcode"]=0x0399,
+ ["specials"]={ "char", 0x0399, 0x0313 },
+ ["unicodeslot"]=0x1F38, -- Ἰ
+ },
+ [0x1F39]={
+ ["category"]="lu",
+ ["contextname"]="greekIotadasia",
+ ["description"]="GREEK CAPITAL LETTER IOTA WITH DASIA",
+ ["lccode"]=0x1F31,
+ ["linebreak"]="al",
+ ["shcode"]=0x0399,
+ ["specials"]={ "char", 0x0399, 0x0314 },
+ ["unicodeslot"]=0x1F39, -- á¼¹
+ },
+ [0x1F3A]={
+ ["category"]="lu",
+ ["contextname"]="greekIotapsilivaria",
+ ["description"]="GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA",
+ ["lccode"]=0x1F32,
+ ["linebreak"]="al",
+ ["shcode"]=0x0399,
+ ["specials"]={ "char", 0x1F38, 0x0300 },
+ ["unicodeslot"]=0x1F3A, -- Ἲ
+ },
+ [0x1F3B]={
+ ["category"]="lu",
+ ["contextname"]="greekIotadasiavaria",
+ ["description"]="GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA",
+ ["lccode"]=0x1F33,
+ ["linebreak"]="al",
+ ["shcode"]=0x0399,
+ ["specials"]={ "char", 0x1F39, 0x0300 },
+ ["unicodeslot"]=0x1F3B, -- á¼»
+ },
+ [0x1F3C]={
+ ["category"]="lu",
+ ["contextname"]="greekIotapsilitonos",
+ ["description"]="GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA",
+ ["lccode"]=0x1F34,
+ ["linebreak"]="al",
+ ["shcode"]=0x0399,
+ ["specials"]={ "char", 0x1F38, 0x0301 },
+ ["unicodeslot"]=0x1F3C, -- á¼¼
+ },
+ [0x1F3D]={
+ ["category"]="lu",
+ ["contextname"]="greekIotadasiatonos",
+ ["description"]="GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA",
+ ["lccode"]=0x1F35,
+ ["linebreak"]="al",
+ ["shcode"]=0x0399,
+ ["specials"]={ "char", 0x1F39, 0x0301 },
+ ["unicodeslot"]=0x1F3D, -- á¼½
+ },
+ [0x1F3E]={
+ ["category"]="lu",
+ ["contextname"]="greekIotapsiliperispomeni",
+ ["description"]="GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI",
+ ["lccode"]=0x1F36,
+ ["linebreak"]="al",
+ ["shcode"]=0x0399,
+ ["specials"]={ "char", 0x1F38, 0x0342 },
+ ["unicodeslot"]=0x1F3E, -- á¼¾
+ },
+ [0x1F3F]={
+ ["category"]="lu",
+ ["contextname"]="greekIotadasiaperispomeni",
+ ["description"]="GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI",
+ ["lccode"]=0x1F37,
+ ["linebreak"]="al",
+ ["shcode"]=0x0399,
+ ["specials"]={ "char", 0x1F39, 0x0342 },
+ ["unicodeslot"]=0x1F3F, -- Ἷ
+ },
+ [0x1F40]={
+ ["category"]="ll",
+ ["contextname"]="greekomicronpsili",
+ ["description"]="GREEK SMALL LETTER OMICRON WITH PSILI",
+ ["linebreak"]="al",
+ ["shcode"]=0x03BF,
+ ["specials"]={ "char", 0x03BF, 0x0313 },
+ ["uccode"]=0x1F48,
+ ["unicodeslot"]=0x1F40, -- á½€
+ },
+ [0x1F41]={
+ ["category"]="ll",
+ ["contextname"]="greekomicrondasia",
+ ["description"]="GREEK SMALL LETTER OMICRON WITH DASIA",
+ ["linebreak"]="al",
+ ["shcode"]=0x03BF,
+ ["specials"]={ "char", 0x03BF, 0x0314 },
+ ["uccode"]=0x1F49,
+ ["unicodeslot"]=0x1F41, -- á½
+ },
+ [0x1F42]={
+ ["category"]="ll",
+ ["contextname"]="greekomicronpsilivaria",
+ ["description"]="GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA",
+ ["linebreak"]="al",
+ ["shcode"]=0x03BF,
+ ["specials"]={ "char", 0x1F40, 0x0300 },
+ ["uccode"]=0x1F4A,
+ ["unicodeslot"]=0x1F42, -- ὂ
+ },
+ [0x1F43]={
+ ["category"]="ll",
+ ["contextname"]="greekomicrondasiavaria",
+ ["description"]="GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA",
+ ["linebreak"]="al",
+ ["shcode"]=0x03BF,
+ ["specials"]={ "char", 0x1F41, 0x0300 },
+ ["uccode"]=0x1F4B,
+ ["unicodeslot"]=0x1F43, -- ὃ
+ },
+ [0x1F44]={
+ ["category"]="ll",
+ ["contextname"]="greekomicronpsilitonos",
+ ["description"]="GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA",
+ ["linebreak"]="al",
+ ["shcode"]=0x03BF,
+ ["specials"]={ "char", 0x1F40, 0x0301 },
+ ["uccode"]=0x1F4C,
+ ["unicodeslot"]=0x1F44, -- ὄ
+ },
+ [0x1F45]={
+ ["category"]="ll",
+ ["contextname"]="greekomicrondasiatonos",
+ ["description"]="GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA",
+ ["linebreak"]="al",
+ ["shcode"]=0x03BF,
+ ["specials"]={ "char", 0x1F41, 0x0301 },
+ ["uccode"]=0x1F4D,
+ ["unicodeslot"]=0x1F45, -- á½…
+ },
+ [0x1F48]={
+ ["category"]="lu",
+ ["contextname"]="greekOmicronpsili",
+ ["description"]="GREEK CAPITAL LETTER OMICRON WITH PSILI",
+ ["lccode"]=0x1F40,
+ ["linebreak"]="al",
+ ["shcode"]=0x039F,
+ ["specials"]={ "char", 0x039F, 0x0313 },
+ ["unicodeslot"]=0x1F48, -- Ὀ
+ },
+ [0x1F49]={
+ ["category"]="lu",
+ ["contextname"]="greekOmicrondasia",
+ ["description"]="GREEK CAPITAL LETTER OMICRON WITH DASIA",
+ ["lccode"]=0x1F41,
+ ["linebreak"]="al",
+ ["shcode"]=0x039F,
+ ["specials"]={ "char", 0x039F, 0x0314 },
+ ["unicodeslot"]=0x1F49, -- Ὁ
+ },
+ [0x1F4A]={
+ ["category"]="lu",
+ ["contextname"]="greekOmicronpsilivaria",
+ ["description"]="GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA",
+ ["lccode"]=0x1F42,
+ ["linebreak"]="al",
+ ["shcode"]=0x039F,
+ ["specials"]={ "char", 0x1F48, 0x0300 },
+ ["unicodeslot"]=0x1F4A, -- Ὂ
+ },
+ [0x1F4B]={
+ ["category"]="lu",
+ ["contextname"]="greekOmicrondasiavaria",
+ ["description"]="GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA",
+ ["lccode"]=0x1F43,
+ ["linebreak"]="al",
+ ["shcode"]=0x039F,
+ ["specials"]={ "char", 0x1F49, 0x0300 },
+ ["unicodeslot"]=0x1F4B, -- Ὃ
+ },
+ [0x1F4C]={
+ ["category"]="lu",
+ ["contextname"]="greekOmicronpsilitonos",
+ ["description"]="GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA",
+ ["lccode"]=0x1F44,
+ ["linebreak"]="al",
+ ["shcode"]=0x039F,
+ ["specials"]={ "char", 0x1F48, 0x0301 },
+ ["unicodeslot"]=0x1F4C, -- Ὄ
+ },
+ [0x1F4D]={
+ ["category"]="lu",
+ ["contextname"]="greekOmicrondasiatonos",
+ ["description"]="GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA",
+ ["lccode"]=0x1F45,
+ ["linebreak"]="al",
+ ["shcode"]=0x039F,
+ ["specials"]={ "char", 0x1F49, 0x0301 },
+ ["unicodeslot"]=0x1F4D, -- á½
+ },
+ [0x1F50]={
+ ["category"]="ll",
+ ["contextname"]="greekupsilonpsili",
+ ["description"]="GREEK SMALL LETTER UPSILON WITH PSILI",
+ ["linebreak"]="al",
+ ["shcode"]=0x03C5,
+ ["specials"]={ "char", 0x03C5, 0x0313 },
+ ["unicodeslot"]=0x1F50, -- á½
+ },
+ [0x1F51]={
+ ["category"]="ll",
+ ["contextname"]="greekupsilondasia",
+ ["description"]="GREEK SMALL LETTER UPSILON WITH DASIA",
+ ["linebreak"]="al",
+ ["shcode"]=0x03C5,
+ ["specials"]={ "char", 0x03C5, 0x0314 },
+ ["uccode"]=0x1F59,
+ ["unicodeslot"]=0x1F51, -- ὑ
+ },
+ [0x1F52]={
+ ["category"]="ll",
+ ["contextname"]="greekupsilonpsilivaria",
+ ["description"]="GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA",
+ ["linebreak"]="al",
+ ["shcode"]=0x03C5,
+ ["specials"]={ "char", 0x1F50, 0x0300 },
+ ["unicodeslot"]=0x1F52, -- á½’
+ },
+ [0x1F53]={
+ ["category"]="ll",
+ ["contextname"]="greekupsilondasiavaria",
+ ["description"]="GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA",
+ ["linebreak"]="al",
+ ["shcode"]=0x03C5,
+ ["specials"]={ "char", 0x1F51, 0x0300 },
+ ["uccode"]=0x1F5B,
+ ["unicodeslot"]=0x1F53, -- ὓ
+ },
+ [0x1F54]={
+ ["category"]="ll",
+ ["contextname"]="greekupsilonpsilitonos",
+ ["description"]="GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA",
+ ["linebreak"]="al",
+ ["shcode"]=0x03C5,
+ ["specials"]={ "char", 0x1F50, 0x0301 },
+ ["unicodeslot"]=0x1F54, -- á½”
+ },
+ [0x1F55]={
+ ["category"]="ll",
+ ["contextname"]="greekupsilondasiatonos",
+ ["description"]="GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA",
+ ["linebreak"]="al",
+ ["shcode"]=0x03C5,
+ ["specials"]={ "char", 0x1F51, 0x0301 },
+ ["uccode"]=0x1F5D,
+ ["unicodeslot"]=0x1F55, -- ὕ
+ },
+ [0x1F56]={
+ ["category"]="ll",
+ ["contextname"]="greekupsilonpsiliperispomeni",
+ ["description"]="GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI",
+ ["linebreak"]="al",
+ ["shcode"]=0x03C5,
+ ["specials"]={ "char", 0x1F50, 0x0342 },
+ ["unicodeslot"]=0x1F56, -- á½–
+ },
+ [0x1F57]={
+ ["category"]="ll",
+ ["contextname"]="greekupsilondasiaperispomeni",
+ ["description"]="GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI",
+ ["linebreak"]="al",
+ ["shcode"]=0x03C5,
+ ["specials"]={ "char", 0x1F51, 0x0342 },
+ ["uccode"]=0x1F5F,
+ ["unicodeslot"]=0x1F57, -- á½—
+ },
+ [0x1F59]={
+ ["category"]="lu",
+ ["contextname"]="greekUpsilondasia",
+ ["description"]="GREEK CAPITAL LETTER UPSILON WITH DASIA",
+ ["lccode"]=0x1F51,
+ ["linebreak"]="al",
+ ["shcode"]=0x03A5,
+ ["specials"]={ "char", 0x03A5, 0x0314 },
+ ["unicodeslot"]=0x1F59, -- á½™
+ },
+ [0x1F5B]={
+ ["category"]="lu",
+ ["contextname"]="greekUpsilondasiavaria",
+ ["description"]="GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA",
+ ["lccode"]=0x1F53,
+ ["linebreak"]="al",
+ ["shcode"]=0x03A5,
+ ["specials"]={ "char", 0x1F59, 0x0300 },
+ ["unicodeslot"]=0x1F5B, -- á½›
+ },
+ [0x1F5D]={
+ ["category"]="lu",
+ ["contextname"]="greekUpsilondasiatonos",
+ ["description"]="GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA",
+ ["lccode"]=0x1F55,
+ ["linebreak"]="al",
+ ["shcode"]=0x03A5,
+ ["specials"]={ "char", 0x1F59, 0x0301 },
+ ["unicodeslot"]=0x1F5D, -- á½
+ },
+ [0x1F5F]={
+ ["category"]="lu",
+ ["contextname"]="greekUpsilondasiaperispomeni",
+ ["description"]="GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI",
+ ["lccode"]=0x1F57,
+ ["linebreak"]="al",
+ ["shcode"]=0x03A5,
+ ["specials"]={ "char", 0x1F59, 0x0342 },
+ ["unicodeslot"]=0x1F5F, -- Ὗ
+ },
+ [0x1F60]={
+ ["category"]="ll",
+ ["contextname"]="greekomegapsili",
+ ["description"]="GREEK SMALL LETTER OMEGA WITH PSILI",
+ ["linebreak"]="al",
+ ["shcode"]=0x03C9,
+ ["specials"]={ "char", 0x03C9, 0x0313 },
+ ["uccode"]=0x1F68,
+ ["unicodeslot"]=0x1F60, -- á½ 
+ },
+ [0x1F61]={
+ ["category"]="ll",
+ ["contextname"]="greekomegadasia",
+ ["description"]="GREEK SMALL LETTER OMEGA WITH DASIA",
+ ["linebreak"]="al",
+ ["shcode"]=0x03C9,
+ ["specials"]={ "char", 0x03C9, 0x0314 },
+ ["uccode"]=0x1F69,
+ ["unicodeslot"]=0x1F61, -- ὡ
+ },
+ [0x1F62]={
+ ["category"]="ll",
+ ["contextname"]="greekomegapsilivaria",
+ ["description"]="GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA",
+ ["linebreak"]="al",
+ ["shcode"]=0x03C9,
+ ["specials"]={ "char", 0x1F60, 0x0300 },
+ ["uccode"]=0x1F6A,
+ ["unicodeslot"]=0x1F62, -- á½¢
+ },
+ [0x1F63]={
+ ["category"]="ll",
+ ["contextname"]="greekomegadasiavaria",
+ ["description"]="GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA",
+ ["linebreak"]="al",
+ ["shcode"]=0x03C9,
+ ["specials"]={ "char", 0x1F61, 0x0300 },
+ ["uccode"]=0x1F6B,
+ ["unicodeslot"]=0x1F63, -- á½£
+ },
+ [0x1F64]={
+ ["category"]="ll",
+ ["contextname"]="greekomegapsilitonos",
+ ["description"]="GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA",
+ ["linebreak"]="al",
+ ["shcode"]=0x03C9,
+ ["specials"]={ "char", 0x1F60, 0x0301 },
+ ["uccode"]=0x1F6C,
+ ["unicodeslot"]=0x1F64, -- ὤ
+ },
+ [0x1F65]={
+ ["category"]="ll",
+ ["contextname"]="greekomegadasiatonos",
+ ["description"]="GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA",
+ ["linebreak"]="al",
+ ["shcode"]=0x03C9,
+ ["specials"]={ "char", 0x1F61, 0x0301 },
+ ["uccode"]=0x1F6D,
+ ["unicodeslot"]=0x1F65, -- á½¥
+ },
+ [0x1F66]={
+ ["category"]="ll",
+ ["contextname"]="greekomegapsiliperispomeni",
+ ["description"]="GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI",
+ ["linebreak"]="al",
+ ["shcode"]=0x03C9,
+ ["specials"]={ "char", 0x1F60, 0x0342 },
+ ["uccode"]=0x1F6E,
+ ["unicodeslot"]=0x1F66, -- ὦ
+ },
+ [0x1F67]={
+ ["category"]="ll",
+ ["contextname"]="greekomegadasiaperispomeni",
+ ["description"]="GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI",
+ ["linebreak"]="al",
+ ["shcode"]=0x03C9,
+ ["specials"]={ "char", 0x1F61, 0x0342 },
+ ["uccode"]=0x1F6F,
+ ["unicodeslot"]=0x1F67, -- ὧ
+ },
+ [0x1F68]={
+ ["category"]="lu",
+ ["contextname"]="greekOmegapsili",
+ ["description"]="GREEK CAPITAL LETTER OMEGA WITH PSILI",
+ ["lccode"]=0x1F60,
+ ["linebreak"]="al",
+ ["shcode"]=0x03A9,
+ ["specials"]={ "char", 0x03A9, 0x0313 },
+ ["unicodeslot"]=0x1F68, -- Ὠ
+ },
+ [0x1F69]={
+ ["category"]="lu",
+ ["contextname"]="greekOmegadasia",
+ ["description"]="GREEK CAPITAL LETTER OMEGA WITH DASIA",
+ ["lccode"]=0x1F61,
+ ["linebreak"]="al",
+ ["shcode"]=0x03A9,
+ ["specials"]={ "char", 0x03A9, 0x0314 },
+ ["unicodeslot"]=0x1F69, -- Ὡ
+ },
+ [0x1F6A]={
+ ["category"]="lu",
+ ["contextname"]="greekOmegapsilivaria",
+ ["description"]="GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA",
+ ["lccode"]=0x1F62,
+ ["linebreak"]="al",
+ ["shcode"]=0x03A9,
+ ["specials"]={ "char", 0x1F68, 0x0300 },
+ ["unicodeslot"]=0x1F6A, -- Ὢ
+ },
+ [0x1F6B]={
+ ["category"]="lu",
+ ["contextname"]="greekOmegadasiavaria",
+ ["description"]="GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA",
+ ["lccode"]=0x1F63,
+ ["linebreak"]="al",
+ ["shcode"]=0x03A9,
+ ["specials"]={ "char", 0x1F69, 0x0300 },
+ ["unicodeslot"]=0x1F6B, -- Ὣ
+ },
+ [0x1F6C]={
+ ["category"]="lu",
+ ["contextname"]="greekOmegapsilitonos",
+ ["description"]="GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA",
+ ["lccode"]=0x1F64,
+ ["linebreak"]="al",
+ ["shcode"]=0x03A9,
+ ["specials"]={ "char", 0x1F68, 0x0301 },
+ ["unicodeslot"]=0x1F6C, -- Ὤ
+ },
+ [0x1F6D]={
+ ["category"]="lu",
+ ["contextname"]="greekOmegadasiatonos",
+ ["description"]="GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA",
+ ["lccode"]=0x1F65,
+ ["linebreak"]="al",
+ ["shcode"]=0x03A9,
+ ["specials"]={ "char", 0x1F69, 0x0301 },
+ ["unicodeslot"]=0x1F6D, -- á½­
+ },
+ [0x1F6E]={
+ ["category"]="lu",
+ ["contextname"]="greekOmegapsiliperispomeni",
+ ["description"]="GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI",
+ ["lccode"]=0x1F66,
+ ["linebreak"]="al",
+ ["shcode"]=0x03A9,
+ ["specials"]={ "char", 0x1F68, 0x0342 },
+ ["unicodeslot"]=0x1F6E, -- á½®
+ },
+ [0x1F6F]={
+ ["category"]="lu",
+ ["contextname"]="greekOmegadasiaperispomeni",
+ ["description"]="GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI",
+ ["lccode"]=0x1F67,
+ ["linebreak"]="al",
+ ["shcode"]=0x03A9,
+ ["specials"]={ "char", 0x1F69, 0x0342 },
+ ["unicodeslot"]=0x1F6F, -- Ὧ
+ },
+ [0x1F70]={
+ ["category"]="ll",
+ ["contextname"]="greekalphavaria",
+ ["description"]="GREEK SMALL LETTER ALPHA WITH VARIA",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B1,
+ ["specials"]={ "char", 0x03B1, 0x0300 },
+ ["uccode"]=0x1FBA,
+ ["unicodeslot"]=0x1F70, -- á½°
+ },
+ [0x1F71]={
+ ["category"]="ll",
+ ["contextname"]="greekalphaoxia",
+ ["description"]="GREEK SMALL LETTER ALPHA WITH OXIA",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B1,
+ ["specials"]={ "char", 0x03AC },
+ ["uccode"]=0x1FBB,
+ ["unicodeslot"]=0x1F71, -- á½±
+ },
+ [0x1F72]={
+ ["category"]="ll",
+ ["contextname"]="greekepsilonvaria",
+ ["description"]="GREEK SMALL LETTER EPSILON WITH VARIA",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B5,
+ ["specials"]={ "char", 0x03B5, 0x0300 },
+ ["uccode"]=0x1FC8,
+ ["unicodeslot"]=0x1F72, -- á½²
+ },
+ [0x1F73]={
+ ["category"]="ll",
+ ["contextname"]="greekepsilonoxia",
+ ["description"]="GREEK SMALL LETTER EPSILON WITH OXIA",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B5,
+ ["specials"]={ "char", 0x03AD },
+ ["uccode"]=0x1FC9,
+ ["unicodeslot"]=0x1F73, -- á½³
+ },
+ [0x1F74]={
+ ["category"]="ll",
+ ["contextname"]="greeketavaria",
+ ["description"]="GREEK SMALL LETTER ETA WITH VARIA",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B7,
+ ["specials"]={ "char", 0x03B7, 0x0300 },
+ ["uccode"]=0x1FCA,
+ ["unicodeslot"]=0x1F74, -- á½´
+ },
+ [0x1F75]={
+ ["category"]="ll",
+ ["contextname"]="greeketaoxia",
+ ["description"]="GREEK SMALL LETTER ETA WITH OXIA",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B7,
+ ["specials"]={ "char", 0x03AE },
+ ["uccode"]=0x1FCB,
+ ["unicodeslot"]=0x1F75, -- á½µ
+ },
+ [0x1F76]={
+ ["category"]="ll",
+ ["contextname"]="greekiotavaria",
+ ["description"]="GREEK SMALL LETTER IOTA WITH VARIA",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B9,
+ ["specials"]={ "char", 0x03B9, 0x0300 },
+ ["uccode"]=0x1FDA,
+ ["unicodeslot"]=0x1F76, -- ὶ
+ },
+ [0x1F77]={
+ ["category"]="ll",
+ ["contextname"]="greekiotaoxia",
+ ["description"]="GREEK SMALL LETTER IOTA WITH OXIA",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B9,
+ ["specials"]={ "char", 0x03AF },
+ ["uccode"]=0x1FDB,
+ ["unicodeslot"]=0x1F77, -- á½·
+ },
+ [0x1F78]={
+ ["category"]="ll",
+ ["contextname"]="greekomicronvaria",
+ ["description"]="GREEK SMALL LETTER OMICRON WITH VARIA",
+ ["linebreak"]="al",
+ ["shcode"]=0x03BF,
+ ["specials"]={ "char", 0x03BF, 0x0300 },
+ ["uccode"]=0x1FF8,
+ ["unicodeslot"]=0x1F78, -- ὸ
+ },
+ [0x1F79]={
+ ["category"]="ll",
+ ["contextname"]="greekomicronoxia",
+ ["description"]="GREEK SMALL LETTER OMICRON WITH OXIA",
+ ["linebreak"]="al",
+ ["shcode"]=0x03BF,
+ ["specials"]={ "char", 0x03CC },
+ ["uccode"]=0x1FF9,
+ ["unicodeslot"]=0x1F79, -- á½¹
+ },
+ [0x1F7A]={
+ ["category"]="ll",
+ ["contextname"]="greekupsilonvaria",
+ ["description"]="GREEK SMALL LETTER UPSILON WITH VARIA",
+ ["linebreak"]="al",
+ ["shcode"]=0x03C5,
+ ["specials"]={ "char", 0x03C5, 0x0300 },
+ ["uccode"]=0x1FEA,
+ ["unicodeslot"]=0x1F7A, -- ὺ
+ },
+ [0x1F7B]={
+ ["category"]="ll",
+ ["contextname"]="greekupsilonoxia",
+ ["description"]="GREEK SMALL LETTER UPSILON WITH OXIA",
+ ["linebreak"]="al",
+ ["shcode"]=0x03C5,
+ ["specials"]={ "char", 0x03CD },
+ ["uccode"]=0x1FEB,
+ ["unicodeslot"]=0x1F7B, -- á½»
+ },
+ [0x1F7C]={
+ ["category"]="ll",
+ ["contextname"]="greekomegavaria",
+ ["description"]="GREEK SMALL LETTER OMEGA WITH VARIA",
+ ["linebreak"]="al",
+ ["shcode"]=0x03C9,
+ ["specials"]={ "char", 0x03C9, 0x0300 },
+ ["uccode"]=0x1FFA,
+ ["unicodeslot"]=0x1F7C, -- á½¼
+ },
+ [0x1F7D]={
+ ["category"]="ll",
+ ["contextname"]="greekomegaoxia",
+ ["description"]="GREEK SMALL LETTER OMEGA WITH OXIA",
+ ["linebreak"]="al",
+ ["shcode"]=0x03C9,
+ ["specials"]={ "char", 0x03CE },
+ ["uccode"]=0x1FFB,
+ ["unicodeslot"]=0x1F7D, -- á½½
+ },
+ [0x1F80]={
+ ["category"]="ll",
+ ["contextname"]="greekalphaiotasubpsili",
+ ["description"]="GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B1,
+ ["specials"]={ "char", 0x1F00, 0x0345 },
+ ["uccode"]=0x1F88,
+ ["unicodeslot"]=0x1F80, -- á¾€
+ },
+ [0x1F81]={
+ ["category"]="ll",
+ ["contextname"]="greekalphaiotasubdasia",
+ ["description"]="GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B1,
+ ["specials"]={ "char", 0x1F01, 0x0345 },
+ ["uccode"]=0x1F89,
+ ["unicodeslot"]=0x1F81, -- á¾
+ },
+ [0x1F82]={
+ ["category"]="ll",
+ ["contextname"]="greekalphaiotasubpsilivaria",
+ ["description"]="GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B1,
+ ["specials"]={ "char", 0x1F02, 0x0345 },
+ ["uccode"]=0x1F8A,
+ ["unicodeslot"]=0x1F82, -- ᾂ
+ },
+ [0x1F83]={
+ ["category"]="ll",
+ ["contextname"]="greekalphaiotasubdasiavaria",
+ ["description"]="GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B1,
+ ["specials"]={ "char", 0x1F03, 0x0345 },
+ ["uccode"]=0x1F8B,
+ ["unicodeslot"]=0x1F83, -- ᾃ
+ },
+ [0x1F84]={
+ ["category"]="ll",
+ ["contextname"]="greekalphaiotasubpsilitonos",
+ ["description"]="GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B1,
+ ["specials"]={ "char", 0x1F04, 0x0345 },
+ ["uccode"]=0x1F8C,
+ ["unicodeslot"]=0x1F84, -- ᾄ
+ },
+ [0x1F85]={
+ ["category"]="ll",
+ ["contextname"]="greekalphaiotasubdasiatonos",
+ ["description"]="GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B1,
+ ["specials"]={ "char", 0x1F05, 0x0345 },
+ ["uccode"]=0x1F8D,
+ ["unicodeslot"]=0x1F85, -- á¾…
+ },
+ [0x1F86]={
+ ["category"]="ll",
+ ["contextname"]="greekalphaiotasubpsiliperispomeni",
+ ["description"]="GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B1,
+ ["specials"]={ "char", 0x1F06, 0x0345 },
+ ["uccode"]=0x1F8E,
+ ["unicodeslot"]=0x1F86, -- ᾆ
+ },
+ [0x1F87]={
+ ["category"]="ll",
+ ["contextname"]="greekalphaiotasubdasiaperispomeni",
+ ["description"]="GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B1,
+ ["specials"]={ "char", 0x1F07, 0x0345 },
+ ["uccode"]=0x1F8F,
+ ["unicodeslot"]=0x1F87, -- ᾇ
+ },
+ [0x1F88]={
+ ["category"]="lt",
+ ["contextname"]="greekAlphaiotasubpsili",
+ ["description"]="GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI",
+ ["lccode"]=0x1F80,
+ ["linebreak"]="al",
+ ["shcode"]=0x0391,
+ ["specials"]={ "char", 0x1F08, 0x0345 },
+ ["unicodeslot"]=0x1F88, -- ᾈ
+ },
+ [0x1F89]={
+ ["category"]="lt",
+ ["contextname"]="greekAlphaiotasubdasia",
+ ["description"]="GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI",
+ ["lccode"]=0x1F81,
+ ["linebreak"]="al",
+ ["shcode"]=0x0391,
+ ["specials"]={ "char", 0x1F09, 0x0345 },
+ ["unicodeslot"]=0x1F89, -- ᾉ
+ },
+ [0x1F8A]={
+ ["category"]="lt",
+ ["contextname"]="greekAlphaiotasubpsilivaria",
+ ["description"]="GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI",
+ ["lccode"]=0x1F82,
+ ["linebreak"]="al",
+ ["shcode"]=0x0391,
+ ["specials"]={ "char", 0x1F0A, 0x0345 },
+ ["unicodeslot"]=0x1F8A, -- ᾊ
+ },
+ [0x1F8B]={
+ ["category"]="lt",
+ ["contextname"]="greekAlphaiotasubdasiavaria",
+ ["description"]="GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI",
+ ["lccode"]=0x1F83,
+ ["linebreak"]="al",
+ ["shcode"]=0x0391,
+ ["specials"]={ "char", 0x1F0B, 0x0345 },
+ ["unicodeslot"]=0x1F8B, -- ᾋ
+ },
+ [0x1F8C]={
+ ["category"]="lt",
+ ["contextname"]="greekAlphaiotasubpsilitonos",
+ ["description"]="GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI",
+ ["lccode"]=0x1F84,
+ ["linebreak"]="al",
+ ["shcode"]=0x0391,
+ ["specials"]={ "char", 0x1F0C, 0x0345 },
+ ["unicodeslot"]=0x1F8C, -- ᾌ
+ },
+ [0x1F8D]={
+ ["category"]="lt",
+ ["contextname"]="greekAlphaiotasubdasiatonos",
+ ["description"]="GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI",
+ ["lccode"]=0x1F85,
+ ["linebreak"]="al",
+ ["shcode"]=0x0391,
+ ["specials"]={ "char", 0x1F0D, 0x0345 },
+ ["unicodeslot"]=0x1F8D, -- á¾
+ },
+ [0x1F8E]={
+ ["category"]="lt",
+ ["contextname"]="greekAlphaiotasubpsiliperispomeni",
+ ["description"]="GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI",
+ ["lccode"]=0x1F86,
+ ["linebreak"]="al",
+ ["shcode"]=0x0391,
+ ["specials"]={ "char", 0x1F0E, 0x0345 },
+ ["unicodeslot"]=0x1F8E, -- ᾎ
+ },
+ [0x1F8F]={
+ ["category"]="lt",
+ ["contextname"]="greekAlphaiotasubdasiaperispomeni",
+ ["description"]="GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI",
+ ["lccode"]=0x1F87,
+ ["linebreak"]="al",
+ ["shcode"]=0x0391,
+ ["specials"]={ "char", 0x1F0F, 0x0345 },
+ ["unicodeslot"]=0x1F8F, -- á¾
+ },
+ [0x1F90]={
+ ["category"]="ll",
+ ["contextname"]="greeketaiotasubpsili",
+ ["description"]="GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B7,
+ ["specials"]={ "char", 0x1F20, 0x0345 },
+ ["uccode"]=0x1F98,
+ ["unicodeslot"]=0x1F90, -- á¾
+ },
+ [0x1F91]={
+ ["category"]="ll",
+ ["contextname"]="greeketaiotasubdasia",
+ ["description"]="GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B7,
+ ["specials"]={ "char", 0x1F21, 0x0345 },
+ ["uccode"]=0x1F99,
+ ["unicodeslot"]=0x1F91, -- ᾑ
+ },
+ [0x1F92]={
+ ["category"]="ll",
+ ["contextname"]="greeketaiotasubpsilivaria",
+ ["description"]="GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B7,
+ ["specials"]={ "char", 0x1F22, 0x0345 },
+ ["uccode"]=0x1F9A,
+ ["unicodeslot"]=0x1F92, -- á¾’
+ },
+ [0x1F93]={
+ ["category"]="ll",
+ ["contextname"]="greeketaiotasubdasiavaria",
+ ["description"]="GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B7,
+ ["specials"]={ "char", 0x1F23, 0x0345 },
+ ["uccode"]=0x1F9B,
+ ["unicodeslot"]=0x1F93, -- ᾓ
+ },
+ [0x1F94]={
+ ["category"]="ll",
+ ["contextname"]="greeketaiotasubpsilitonos",
+ ["description"]="GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B7,
+ ["specials"]={ "char", 0x1F24, 0x0345 },
+ ["uccode"]=0x1F9C,
+ ["unicodeslot"]=0x1F94, -- á¾”
+ },
+ [0x1F95]={
+ ["category"]="ll",
+ ["contextname"]="greeketaiotasubdasiatonos",
+ ["description"]="GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B7,
+ ["specials"]={ "char", 0x1F25, 0x0345 },
+ ["uccode"]=0x1F9D,
+ ["unicodeslot"]=0x1F95, -- ᾕ
+ },
+ [0x1F96]={
+ ["category"]="ll",
+ ["contextname"]="greeketaiotasubpsiliperispomeni",
+ ["description"]="GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B7,
+ ["specials"]={ "char", 0x1F26, 0x0345 },
+ ["uccode"]=0x1F9E,
+ ["unicodeslot"]=0x1F96, -- á¾–
+ },
+ [0x1F97]={
+ ["category"]="ll",
+ ["contextname"]="greeketaiotasubdasiaperispomeni",
+ ["description"]="GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B7,
+ ["specials"]={ "char", 0x1F27, 0x0345 },
+ ["uccode"]=0x1F9F,
+ ["unicodeslot"]=0x1F97, -- á¾—
+ },
+ [0x1F98]={
+ ["category"]="lt",
+ ["contextname"]="greekEtaiotasubpsili",
+ ["description"]="GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI",
+ ["lccode"]=0x1F90,
+ ["linebreak"]="al",
+ ["shcode"]=0x0397,
+ ["specials"]={ "char", 0x1F28, 0x0345 },
+ ["unicodeslot"]=0x1F98, -- ᾘ
+ },
+ [0x1F99]={
+ ["category"]="lt",
+ ["contextname"]="greekEtaiotasubdasia",
+ ["description"]="GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI",
+ ["lccode"]=0x1F91,
+ ["linebreak"]="al",
+ ["shcode"]=0x0397,
+ ["specials"]={ "char", 0x1F29, 0x0345 },
+ ["unicodeslot"]=0x1F99, -- á¾™
+ },
+ [0x1F9A]={
+ ["category"]="lt",
+ ["contextname"]="greekEtaiotasubpsilivaria",
+ ["description"]="GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI",
+ ["lccode"]=0x1F92,
+ ["linebreak"]="al",
+ ["shcode"]=0x0397,
+ ["specials"]={ "char", 0x1F2A, 0x0345 },
+ ["unicodeslot"]=0x1F9A, -- ᾚ
+ },
+ [0x1F9B]={
+ ["category"]="lt",
+ ["contextname"]="greekEtaiotasubdasiavaria",
+ ["description"]="GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI",
+ ["lccode"]=0x1F93,
+ ["linebreak"]="al",
+ ["shcode"]=0x0397,
+ ["specials"]={ "char", 0x1F2B, 0x0345 },
+ ["unicodeslot"]=0x1F9B, -- á¾›
+ },
+ [0x1F9C]={
+ ["category"]="lt",
+ ["contextname"]="greekEtaiotasubpsilitonos",
+ ["description"]="GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI",
+ ["lccode"]=0x1F94,
+ ["linebreak"]="al",
+ ["shcode"]=0x0397,
+ ["specials"]={ "char", 0x1F2C, 0x0345 },
+ ["unicodeslot"]=0x1F9C, -- ᾜ
+ },
+ [0x1F9D]={
+ ["category"]="lt",
+ ["contextname"]="greekEtaiotasubdasiatonos",
+ ["description"]="GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI",
+ ["lccode"]=0x1F95,
+ ["linebreak"]="al",
+ ["shcode"]=0x0397,
+ ["specials"]={ "char", 0x1F2D, 0x0345 },
+ ["unicodeslot"]=0x1F9D, -- á¾
+ },
+ [0x1F9E]={
+ ["category"]="lt",
+ ["contextname"]="greekEtaiotasubpsiliperispomeni",
+ ["description"]="GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI",
+ ["lccode"]=0x1F96,
+ ["linebreak"]="al",
+ ["shcode"]=0x0397,
+ ["specials"]={ "char", 0x1F2E, 0x0345 },
+ ["unicodeslot"]=0x1F9E, -- ᾞ
+ },
+ [0x1F9F]={
+ ["category"]="lt",
+ ["contextname"]="greekEtaiotasubdasiaperispomeni",
+ ["description"]="GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI",
+ ["lccode"]=0x1F97,
+ ["linebreak"]="al",
+ ["shcode"]=0x0397,
+ ["specials"]={ "char", 0x1F2F, 0x0345 },
+ ["unicodeslot"]=0x1F9F, -- ᾟ
+ },
+ [0x1FA0]={
+ ["category"]="ll",
+ ["contextname"]="greekomegaiotasubpsili",
+ ["description"]="GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI",
+ ["linebreak"]="al",
+ ["shcode"]=0x03C9,
+ ["specials"]={ "char", 0x1F60, 0x0345 },
+ ["uccode"]=0x1FA8,
+ ["unicodeslot"]=0x1FA0, -- á¾ 
+ },
+ [0x1FA1]={
+ ["category"]="ll",
+ ["contextname"]="greekomegaiotasubdasia",
+ ["description"]="GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI",
+ ["linebreak"]="al",
+ ["shcode"]=0x03C9,
+ ["specials"]={ "char", 0x1F61, 0x0345 },
+ ["uccode"]=0x1FA9,
+ ["unicodeslot"]=0x1FA1, -- ᾡ
+ },
+ [0x1FA2]={
+ ["category"]="ll",
+ ["contextname"]="greekomegaiotasubpsilivaria",
+ ["description"]="GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI",
+ ["linebreak"]="al",
+ ["shcode"]=0x03C9,
+ ["specials"]={ "char", 0x1F62, 0x0345 },
+ ["uccode"]=0x1FAA,
+ ["unicodeslot"]=0x1FA2, -- á¾¢
+ },
+ [0x1FA3]={
+ ["category"]="ll",
+ ["contextname"]="greekomegaiotasubdasiavaria",
+ ["description"]="GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI",
+ ["linebreak"]="al",
+ ["shcode"]=0x03C9,
+ ["specials"]={ "char", 0x1F63, 0x0345 },
+ ["uccode"]=0x1FAB,
+ ["unicodeslot"]=0x1FA3, -- á¾£
+ },
+ [0x1FA4]={
+ ["category"]="ll",
+ ["contextname"]="greekomegaiotasubpsilitonos",
+ ["description"]="GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI",
+ ["linebreak"]="al",
+ ["shcode"]=0x03C9,
+ ["specials"]={ "char", 0x1F64, 0x0345 },
+ ["uccode"]=0x1FAC,
+ ["unicodeslot"]=0x1FA4, -- ᾤ
+ },
+ [0x1FA5]={
+ ["category"]="ll",
+ ["contextname"]="greekomegaiotasubdasiatonos",
+ ["description"]="GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI",
+ ["linebreak"]="al",
+ ["shcode"]=0x03C9,
+ ["specials"]={ "char", 0x1F65, 0x0345 },
+ ["uccode"]=0x1FAD,
+ ["unicodeslot"]=0x1FA5, -- á¾¥
+ },
+ [0x1FA6]={
+ ["category"]="ll",
+ ["contextname"]="greekomegaiotasubpsiliperispomeni",
+ ["description"]="GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI",
+ ["linebreak"]="al",
+ ["shcode"]=0x03C9,
+ ["specials"]={ "char", 0x1F66, 0x0345 },
+ ["uccode"]=0x1FAE,
+ ["unicodeslot"]=0x1FA6, -- ᾦ
+ },
+ [0x1FA7]={
+ ["category"]="ll",
+ ["contextname"]="greekomegaiotasubdasiaperispomeni",
+ ["description"]="GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI",
+ ["linebreak"]="al",
+ ["shcode"]=0x03C9,
+ ["specials"]={ "char", 0x1F67, 0x0345 },
+ ["uccode"]=0x1FAF,
+ ["unicodeslot"]=0x1FA7, -- ᾧ
+ },
+ [0x1FA8]={
+ ["category"]="lt",
+ ["contextname"]="greekOmegaiotasubpsili",
+ ["description"]="GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI",
+ ["lccode"]=0x1FA0,
+ ["linebreak"]="al",
+ ["shcode"]=0x03A9,
+ ["specials"]={ "char", 0x1F68, 0x0345 },
+ ["unicodeslot"]=0x1FA8, -- ᾨ
+ },
+ [0x1FA9]={
+ ["category"]="lt",
+ ["contextname"]="greekOmegaiotasubdasia",
+ ["description"]="GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI",
+ ["lccode"]=0x1FA1,
+ ["linebreak"]="al",
+ ["shcode"]=0x03A9,
+ ["specials"]={ "char", 0x1F69, 0x0345 },
+ ["unicodeslot"]=0x1FA9, -- ᾩ
+ },
+ [0x1FAA]={
+ ["category"]="lt",
+ ["contextname"]="greekOmegaiotasubpsilivaria",
+ ["description"]="GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI",
+ ["lccode"]=0x1FA2,
+ ["linebreak"]="al",
+ ["shcode"]=0x03A9,
+ ["specials"]={ "char", 0x1F6A, 0x0345 },
+ ["unicodeslot"]=0x1FAA, -- ᾪ
+ },
+ [0x1FAB]={
+ ["category"]="lt",
+ ["contextname"]="greekOmegaiotasubdasiavaria",
+ ["description"]="GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI",
+ ["lccode"]=0x1FA3,
+ ["linebreak"]="al",
+ ["shcode"]=0x03A9,
+ ["specials"]={ "char", 0x1F6B, 0x0345 },
+ ["unicodeslot"]=0x1FAB, -- ᾫ
+ },
+ [0x1FAC]={
+ ["category"]="lt",
+ ["contextname"]="greekOmegaiotasubpsilitonos",
+ ["description"]="GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI",
+ ["lccode"]=0x1FA4,
+ ["linebreak"]="al",
+ ["shcode"]=0x03A9,
+ ["specials"]={ "char", 0x1F6C, 0x0345 },
+ ["unicodeslot"]=0x1FAC, -- ᾬ
+ },
+ [0x1FAD]={
+ ["category"]="lt",
+ ["contextname"]="greekOmegaiotasubdasiatonos",
+ ["description"]="GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI",
+ ["lccode"]=0x1FA5,
+ ["linebreak"]="al",
+ ["shcode"]=0x03A9,
+ ["specials"]={ "char", 0x1F6D, 0x0345 },
+ ["unicodeslot"]=0x1FAD, -- á¾­
+ },
+ [0x1FAE]={
+ ["category"]="lt",
+ ["contextname"]="greekOmegaiotasubpsiliperispomeni",
+ ["description"]="GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI",
+ ["lccode"]=0x1FA6,
+ ["linebreak"]="al",
+ ["shcode"]=0x03A9,
+ ["specials"]={ "char", 0x1F6E, 0x0345 },
+ ["unicodeslot"]=0x1FAE, -- á¾®
+ },
+ [0x1FAF]={
+ ["category"]="lt",
+ ["contextname"]="greekOmegaiotasubdasiaperispomeni",
+ ["description"]="GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI",
+ ["lccode"]=0x1FA7,
+ ["linebreak"]="al",
+ ["shcode"]=0x03A9,
+ ["specials"]={ "char", 0x1F6F, 0x0345 },
+ ["unicodeslot"]=0x1FAF, -- ᾯ
+ },
+ [0x1FB0]={
+ ["category"]="ll",
+ ["contextname"]="greekalphavrachy",
+ ["description"]="GREEK SMALL LETTER ALPHA WITH VRACHY",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B1,
+ ["specials"]={ "char", 0x03B1, 0x0306 },
+ ["uccode"]=0x1FB8,
+ ["unicodeslot"]=0x1FB0, -- á¾°
+ },
+ [0x1FB1]={
+ ["category"]="ll",
+ ["contextname"]="greekalphamacron",
+ ["description"]="GREEK SMALL LETTER ALPHA WITH MACRON",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B1,
+ ["specials"]={ "char", 0x03B1, 0x0304 },
+ ["uccode"]=0x1FB9,
+ ["unicodeslot"]=0x1FB1, -- á¾±
+ },
+ [0x1FB2]={
+ ["category"]="ll",
+ ["contextname"]="greekalphaiotasubvaria",
+ ["description"]="GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B1,
+ ["specials"]={ "char", 0x1F70, 0x0345 },
+ ["unicodeslot"]=0x1FB2, -- á¾²
+ },
+ [0x1FB3]={
+ ["category"]="ll",
+ ["contextname"]="greekalphaiotasub",
+ ["description"]="GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B1,
+ ["specials"]={ "char", 0x03B1, 0x0345 },
+ ["uccode"]=0x1FBC,
+ ["unicodeslot"]=0x1FB3, -- á¾³
+ },
+ [0x1FB4]={
+ ["category"]="ll",
+ ["contextname"]="greekalphaiotasubtonos",
+ ["description"]="GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B1,
+ ["specials"]={ "char", 0x03AC, 0x0345 },
+ ["unicodeslot"]=0x1FB4, -- á¾´
+ },
+ [0x1FB6]={
+ ["category"]="ll",
+ ["contextname"]="greekalphaperispomeni",
+ ["description"]="GREEK SMALL LETTER ALPHA WITH PERISPOMENI",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B1,
+ ["specials"]={ "char", 0x03B1, 0x0342 },
+ ["unicodeslot"]=0x1FB6, -- ᾶ
+ },
+ [0x1FB7]={
+ ["category"]="ll",
+ ["contextname"]="greekalphaiotasubperispomeni",
+ ["description"]="GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B1,
+ ["specials"]={ "char", 0x1FB6, 0x0345 },
+ ["unicodeslot"]=0x1FB7, -- á¾·
+ },
+ [0x1FB8]={
+ ["category"]="lu",
+ ["contextname"]="greekAlphavrachy",
+ ["description"]="GREEK CAPITAL LETTER ALPHA WITH VRACHY",
+ ["lccode"]=0x1FB0,
+ ["linebreak"]="al",
+ ["shcode"]=0x0391,
+ ["specials"]={ "char", 0x0391, 0x0306 },
+ ["unicodeslot"]=0x1FB8, -- Ᾰ
+ },
+ [0x1FB9]={
+ ["category"]="lu",
+ ["contextname"]="greekAlphamacron",
+ ["description"]="GREEK CAPITAL LETTER ALPHA WITH MACRON",
+ ["lccode"]=0x1FB1,
+ ["linebreak"]="al",
+ ["shcode"]=0x0391,
+ ["specials"]={ "char", 0x0391, 0x0304 },
+ ["unicodeslot"]=0x1FB9, -- á¾¹
+ },
+ [0x1FBA]={
+ ["category"]="lu",
+ ["contextname"]="greekAlphavaria",
+ ["description"]="GREEK CAPITAL LETTER ALPHA WITH VARIA",
+ ["lccode"]=0x1F70,
+ ["linebreak"]="al",
+ ["shcode"]=0x0391,
+ ["specials"]={ "char", 0x0391, 0x0300 },
+ ["unicodeslot"]=0x1FBA, -- Ὰ
+ },
+ [0x1FBB]={
+ ["category"]="lu",
+ ["contextname"]="greekAlphatonos",
+ ["description"]="GREEK CAPITAL LETTER ALPHA WITH OXIA",
+ ["lccode"]=0x1F71,
+ ["linebreak"]="al",
+ ["shcode"]=0x0391,
+ ["specials"]={ "char", 0x0386 },
+ ["unicodeslot"]=0x1FBB, -- á¾»
+ },
+ [0x1FBC]={
+ ["category"]="lt",
+ ["contextname"]="greekAlphaiotasub",
+ ["description"]="GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI",
+ ["lccode"]=0x1FB3,
+ ["linebreak"]="al",
+ ["shcode"]=0x0391,
+ ["specials"]={ "char", 0x0391, 0x0345 },
+ ["unicodeslot"]=0x1FBC, -- á¾¼
+ },
+ [0x1FBD]={
+ ["category"]="sk",
+ ["contextname"]="greekCoronis",
+ ["description"]="GREEK KORONIS",
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x0020, 0x0313 },
+ ["unicodeslot"]=0x1FBD, -- á¾½
+ },
+ [0x1FBE]={
+ ["category"]="ll",
+ ["contextname"]="greekprosgegrammeni",
+ ["description"]="GREEK PROSGEGRAMMENI",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x03B9 },
+ ["uccode"]=0x0399,
+ ["unicodeslot"]=0x1FBE, -- á¾¾
+ },
+ [0x1FBF]={
+ ["category"]="sk",
+ ["contextname"]="greekpsili",
+ ["description"]="GREEK PSILI",
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x0020, 0x0313 },
+ ["unicodeslot"]=0x1FBF, -- ᾿
+ },
+ [0x1FC0]={
+ ["category"]="sk",
+ ["contextname"]="greekperispomeni",
+ ["description"]="GREEK PERISPOMENI",
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x0020, 0x0342 },
+ ["unicodeslot"]=0x1FC0, -- á¿€
+ },
+ [0x1FC1]={
+ ["category"]="sk",
+ ["contextname"]="greekdialytikaperispomeni",
+ ["description"]="GREEK DIALYTIKA AND PERISPOMENI",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x00A8, 0x0342 },
+ ["unicodeslot"]=0x1FC1, -- á¿
+ },
+ [0x1FC2]={
+ ["category"]="ll",
+ ["contextname"]="greeketaiotasubvaria",
+ ["description"]="GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B7,
+ ["specials"]={ "char", 0x1F74, 0x0345 },
+ ["unicodeslot"]=0x1FC2, -- á¿‚
+ },
+ [0x1FC3]={
+ ["category"]="ll",
+ ["contextname"]="greeketaiotasub",
+ ["description"]="GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B7,
+ ["specials"]={ "char", 0x03B7, 0x0345 },
+ ["uccode"]=0x1FCC,
+ ["unicodeslot"]=0x1FC3, -- ῃ
+ },
+ [0x1FC4]={
+ ["category"]="ll",
+ ["contextname"]="greeketaiotasubtonos",
+ ["description"]="GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B7,
+ ["specials"]={ "char", 0x03AE, 0x0345 },
+ ["unicodeslot"]=0x1FC4, -- á¿„
+ },
+ [0x1FC6]={
+ ["category"]="ll",
+ ["contextname"]="greeketaperispomeni",
+ ["description"]="GREEK SMALL LETTER ETA WITH PERISPOMENI",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B7,
+ ["specials"]={ "char", 0x03B7, 0x0342 },
+ ["unicodeslot"]=0x1FC6, -- ῆ
+ },
+ [0x1FC7]={
+ ["category"]="ll",
+ ["contextname"]="greeketaiotasubperispomeni",
+ ["description"]="GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B7,
+ ["specials"]={ "char", 0x1FC6, 0x0345 },
+ ["unicodeslot"]=0x1FC7, -- ῇ
+ },
+ [0x1FC8]={
+ ["category"]="lu",
+ ["contextname"]="greekEpsilonvaria",
+ ["description"]="GREEK CAPITAL LETTER EPSILON WITH VARIA",
+ ["lccode"]=0x1F72,
+ ["linebreak"]="al",
+ ["shcode"]=0x0395,
+ ["specials"]={ "char", 0x0395, 0x0300 },
+ ["unicodeslot"]=0x1FC8, -- Ὲ
+ },
+ [0x1FC9]={
+ ["category"]="lu",
+ ["contextname"]="greekEpsilontonos",
+ ["description"]="GREEK CAPITAL LETTER EPSILON WITH OXIA",
+ ["lccode"]=0x1F73,
+ ["linebreak"]="al",
+ ["shcode"]=0x0395,
+ ["specials"]={ "char", 0x0388 },
+ ["unicodeslot"]=0x1FC9, -- Έ
+ },
+ [0x1FCA]={
+ ["category"]="lu",
+ ["contextname"]="greekEtavaria",
+ ["description"]="GREEK CAPITAL LETTER ETA WITH VARIA",
+ ["lccode"]=0x1F74,
+ ["linebreak"]="al",
+ ["shcode"]=0x0397,
+ ["specials"]={ "char", 0x0397, 0x0300 },
+ ["unicodeslot"]=0x1FCA, -- á¿Š
+ },
+ [0x1FCB]={
+ ["category"]="lu",
+ ["contextname"]="greekEtatonos",
+ ["description"]="GREEK CAPITAL LETTER ETA WITH OXIA",
+ ["lccode"]=0x1F75,
+ ["linebreak"]="al",
+ ["shcode"]=0x0397,
+ ["specials"]={ "char", 0x0389 },
+ ["unicodeslot"]=0x1FCB, -- á¿‹
+ },
+ [0x1FCC]={
+ ["category"]="lt",
+ ["contextname"]="greekEtaiotasub",
+ ["description"]="GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI",
+ ["lccode"]=0x1FC3,
+ ["linebreak"]="al",
+ ["shcode"]=0x0397,
+ ["specials"]={ "char", 0x0397, 0x0345 },
+ ["unicodeslot"]=0x1FCC, -- ῌ
+ },
+ [0x1FCD]={
+ ["category"]="sk",
+ ["contextname"]="greekpsilivaria",
+ ["description"]="GREEK PSILI AND VARIA",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x1FBF, 0x0300 },
+ ["unicodeslot"]=0x1FCD, -- á¿
+ },
+ [0x1FCE]={
+ ["category"]="sk",
+ ["contextname"]="greekpsilitonos",
+ ["description"]="GREEK PSILI AND OXIA",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x1FBF, 0x0301 },
+ ["unicodeslot"]=0x1FCE, -- á¿Ž
+ },
+ [0x1FCF]={
+ ["category"]="sk",
+ ["contextname"]="greekpsiliperispomeni",
+ ["description"]="GREEK PSILI AND PERISPOMENI",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x1FBF, 0x0342 },
+ ["unicodeslot"]=0x1FCF, -- á¿
+ },
+ [0x1FD0]={
+ ["category"]="ll",
+ ["contextname"]="greekiotavrachy",
+ ["description"]="GREEK SMALL LETTER IOTA WITH VRACHY",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B9,
+ ["specials"]={ "char", 0x03B9, 0x0306 },
+ ["uccode"]=0x1FD8,
+ ["unicodeslot"]=0x1FD0, -- á¿
+ },
+ [0x1FD1]={
+ ["category"]="ll",
+ ["contextname"]="greekiotamacron",
+ ["description"]="GREEK SMALL LETTER IOTA WITH MACRON",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B9,
+ ["specials"]={ "char", 0x03B9, 0x0304 },
+ ["uccode"]=0x1FD9,
+ ["unicodeslot"]=0x1FD1, -- á¿‘
+ },
+ [0x1FD2]={
+ ["category"]="ll",
+ ["contextname"]="greekiotadialytikavaria",
+ ["description"]="GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B9,
+ ["specials"]={ "char", 0x03CA, 0x0300 },
+ ["unicodeslot"]=0x1FD2, -- á¿’
+ },
+ [0x1FD3]={
+ ["category"]="ll",
+ ["contextname"]="greekiotadialytikatonos",
+ ["description"]="GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B9,
+ ["specials"]={ "char", 0x0390 },
+ ["unicodeslot"]=0x1FD3, -- á¿“
+ },
+ [0x1FD6]={
+ ["category"]="ll",
+ ["contextname"]="greekiotaperispomeni",
+ ["description"]="GREEK SMALL LETTER IOTA WITH PERISPOMENI",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B9,
+ ["specials"]={ "char", 0x03B9, 0x0342 },
+ ["unicodeslot"]=0x1FD6, -- á¿–
+ },
+ [0x1FD7]={
+ ["category"]="ll",
+ ["contextname"]="greekiotadialytikaperispomeni",
+ ["description"]="GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI",
+ ["linebreak"]="al",
+ ["shcode"]=0x03B9,
+ ["specials"]={ "char", 0x03CA, 0x0342 },
+ ["unicodeslot"]=0x1FD7, -- á¿—
+ },
+ [0x1FD8]={
+ ["category"]="lu",
+ ["contextname"]="greekIotavrachy",
+ ["description"]="GREEK CAPITAL LETTER IOTA WITH VRACHY",
+ ["lccode"]=0x1FD0,
+ ["linebreak"]="al",
+ ["shcode"]=0x0399,
+ ["specials"]={ "char", 0x0399, 0x0306 },
+ ["unicodeslot"]=0x1FD8, -- Ῐ
+ },
+ [0x1FD9]={
+ ["category"]="lu",
+ ["contextname"]="greekIotamacron",
+ ["description"]="GREEK CAPITAL LETTER IOTA WITH MACRON",
+ ["lccode"]=0x1FD1,
+ ["linebreak"]="al",
+ ["shcode"]=0x0399,
+ ["specials"]={ "char", 0x0399, 0x0304 },
+ ["unicodeslot"]=0x1FD9, -- á¿™
+ },
+ [0x1FDA]={
+ ["category"]="lu",
+ ["contextname"]="greekIotavaria",
+ ["description"]="GREEK CAPITAL LETTER IOTA WITH VARIA",
+ ["lccode"]=0x1F76,
+ ["linebreak"]="al",
+ ["shcode"]=0x0399,
+ ["specials"]={ "char", 0x0399, 0x0300 },
+ ["unicodeslot"]=0x1FDA, -- á¿š
+ },
+ [0x1FDB]={
+ ["category"]="lu",
+ ["contextname"]="greekIotatonos",
+ ["description"]="GREEK CAPITAL LETTER IOTA WITH OXIA",
+ ["lccode"]=0x1F77,
+ ["linebreak"]="al",
+ ["shcode"]=0x0399,
+ ["specials"]={ "char", 0x038A },
+ ["unicodeslot"]=0x1FDB, -- á¿›
+ },
+ [0x1FDD]={
+ ["category"]="sk",
+ ["contextname"]="greekdasiavaria",
+ ["description"]="GREEK DASIA AND VARIA",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x1FFE, 0x0300 },
+ ["unicodeslot"]=0x1FDD, -- á¿
+ },
+ [0x1FDE]={
+ ["category"]="sk",
+ ["contextname"]="greekdasiatonos",
+ ["description"]="GREEK DASIA AND OXIA",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x1FFE, 0x0301 },
+ ["unicodeslot"]=0x1FDE, -- á¿ž
+ },
+ [0x1FDF]={
+ ["category"]="sk",
+ ["contextname"]="greekdasiaperispomeni",
+ ["description"]="GREEK DASIA AND PERISPOMENI",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x1FFE, 0x0342 },
+ ["unicodeslot"]=0x1FDF, -- á¿Ÿ
+ },
+ [0x1FE0]={
+ ["category"]="ll",
+ ["contextname"]="greekupsilonvrachy",
+ ["description"]="GREEK SMALL LETTER UPSILON WITH VRACHY",
+ ["linebreak"]="al",
+ ["shcode"]=0x03C5,
+ ["specials"]={ "char", 0x03C5, 0x0306 },
+ ["uccode"]=0x1FE8,
+ ["unicodeslot"]=0x1FE0, -- á¿ 
+ },
+ [0x1FE1]={
+ ["category"]="ll",
+ ["contextname"]="greekupsilonmacron",
+ ["description"]="GREEK SMALL LETTER UPSILON WITH MACRON",
+ ["linebreak"]="al",
+ ["shcode"]=0x03C5,
+ ["specials"]={ "char", 0x03C5, 0x0304 },
+ ["uccode"]=0x1FE9,
+ ["unicodeslot"]=0x1FE1, -- á¿¡
+ },
+ [0x1FE2]={
+ ["category"]="ll",
+ ["contextname"]="greekupsilondialytikavaria",
+ ["description"]="GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA",
+ ["linebreak"]="al",
+ ["shcode"]=0x03C5,
+ ["specials"]={ "char", 0x03CB, 0x0300 },
+ ["unicodeslot"]=0x1FE2, -- á¿¢
+ },
+ [0x1FE3]={
+ ["category"]="ll",
+ ["contextname"]="greekupsilondialytikatonos",
+ ["description"]="GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA",
+ ["linebreak"]="al",
+ ["shcode"]=0x03C5,
+ ["specials"]={ "char", 0x03B0 },
+ ["unicodeslot"]=0x1FE3, -- á¿£
+ },
+ [0x1FE4]={
+ ["category"]="ll",
+ ["contextname"]="greekrhopsili",
+ ["description"]="GREEK SMALL LETTER RHO WITH PSILI",
+ ["linebreak"]="al",
+ ["shcode"]=0x03C1,
+ ["specials"]={ "char", 0x03C1, 0x0313 },
+ ["unicodeslot"]=0x1FE4, -- ῤ
+ },
+ [0x1FE5]={
+ ["category"]="ll",
+ ["contextname"]="greekrhodasia",
+ ["description"]="GREEK SMALL LETTER RHO WITH DASIA",
+ ["linebreak"]="al",
+ ["shcode"]=0x03C1,
+ ["specials"]={ "char", 0x03C1, 0x0314 },
+ ["uccode"]=0x1FEC,
+ ["unicodeslot"]=0x1FE5, -- á¿¥
+ },
+ [0x1FE6]={
+ ["category"]="ll",
+ ["contextname"]="greekupsilonperispomeni",
+ ["description"]="GREEK SMALL LETTER UPSILON WITH PERISPOMENI",
+ ["linebreak"]="al",
+ ["shcode"]=0x03C5,
+ ["specials"]={ "char", 0x03C5, 0x0342 },
+ ["unicodeslot"]=0x1FE6, -- ῦ
+ },
+ [0x1FE7]={
+ ["category"]="ll",
+ ["contextname"]="greekupsilondialytikaperispomeni",
+ ["description"]="GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI",
+ ["linebreak"]="al",
+ ["shcode"]=0x03C5,
+ ["specials"]={ "char", 0x03CB, 0x0342 },
+ ["unicodeslot"]=0x1FE7, -- ῧ
+ },
+ [0x1FE8]={
+ ["category"]="lu",
+ ["contextname"]="greekUpsilonvrachy",
+ ["description"]="GREEK CAPITAL LETTER UPSILON WITH VRACHY",
+ ["lccode"]=0x1FE0,
+ ["linebreak"]="al",
+ ["shcode"]=0x03A5,
+ ["specials"]={ "char", 0x03A5, 0x0306 },
+ ["unicodeslot"]=0x1FE8, -- Ῠ
+ },
+ [0x1FE9]={
+ ["category"]="lu",
+ ["contextname"]="greekUpsilonmacron",
+ ["description"]="GREEK CAPITAL LETTER UPSILON WITH MACRON",
+ ["lccode"]=0x1FE1,
+ ["linebreak"]="al",
+ ["shcode"]=0x03A5,
+ ["specials"]={ "char", 0x03A5, 0x0304 },
+ ["unicodeslot"]=0x1FE9, -- á¿©
+ },
+ [0x1FEA]={
+ ["category"]="lu",
+ ["contextname"]="greekUpsilonvaria",
+ ["description"]="GREEK CAPITAL LETTER UPSILON WITH VARIA",
+ ["lccode"]=0x1F7A,
+ ["linebreak"]="al",
+ ["shcode"]=0x03A5,
+ ["specials"]={ "char", 0x03A5, 0x0300 },
+ ["unicodeslot"]=0x1FEA, -- Ὺ
+ },
+ [0x1FEB]={
+ ["category"]="lu",
+ ["contextname"]="greekUpsilontonos",
+ ["description"]="GREEK CAPITAL LETTER UPSILON WITH OXIA",
+ ["lccode"]=0x1F7B,
+ ["linebreak"]="al",
+ ["shcode"]=0x03A5,
+ ["specials"]={ "char", 0x038E },
+ ["unicodeslot"]=0x1FEB, -- á¿«
+ },
+ [0x1FEC]={
+ ["category"]="lu",
+ ["contextname"]="greekRhodasia",
+ ["description"]="GREEK CAPITAL LETTER RHO WITH DASIA",
+ ["lccode"]=0x1FE5,
+ ["linebreak"]="al",
+ ["shcode"]=0x03A1,
+ ["specials"]={ "char", 0x03A1, 0x0314 },
+ ["unicodeslot"]=0x1FEC, -- Ῥ
+ },
+ [0x1FED]={
+ ["category"]="sk",
+ ["contextname"]="greekdialytikavaria",
+ ["description"]="GREEK DIALYTIKA AND VARIA",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x00A8, 0x0300 },
+ ["unicodeslot"]=0x1FED, -- á¿­
+ },
+ [0x1FEE]={
+ ["category"]="sk",
+ ["contextname"]="greekdialytikatonos",
+ ["description"]="GREEK DIALYTIKA AND OXIA",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x0385 },
+ ["unicodeslot"]=0x1FEE, -- á¿®
+ },
+ [0x1FEF]={
+ ["category"]="sk",
+ ["contextname"]="greekvaria",
+ ["description"]="GREEK VARIA",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x0060 },
+ ["unicodeslot"]=0x1FEF, -- `
+ },
+ [0x1FF2]={
+ ["category"]="ll",
+ ["contextname"]="greekomegaiotasubvaria",
+ ["description"]="GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI",
+ ["linebreak"]="al",
+ ["shcode"]=0x03C9,
+ ["specials"]={ "char", 0x1F7C, 0x0345 },
+ ["unicodeslot"]=0x1FF2, -- ῲ
+ },
+ [0x1FF3]={
+ ["category"]="ll",
+ ["contextname"]="greekomegaiotasub",
+ ["description"]="GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI",
+ ["linebreak"]="al",
+ ["shcode"]=0x03C9,
+ ["specials"]={ "char", 0x03C9, 0x0345 },
+ ["uccode"]=0x1FFC,
+ ["unicodeslot"]=0x1FF3, -- ῳ
+ },
+ [0x1FF4]={
+ ["category"]="ll",
+ ["contextname"]="greekomegaiotasubtonos",
+ ["description"]="GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI",
+ ["linebreak"]="al",
+ ["shcode"]=0x03C9,
+ ["specials"]={ "char", 0x03CE, 0x0345 },
+ ["unicodeslot"]=0x1FF4, -- á¿´
+ },
+ [0x1FF6]={
+ ["category"]="ll",
+ ["contextname"]="greekomegaperispomeni",
+ ["description"]="GREEK SMALL LETTER OMEGA WITH PERISPOMENI",
+ ["linebreak"]="al",
+ ["shcode"]=0x03C9,
+ ["specials"]={ "char", 0x03C9, 0x0342 },
+ ["unicodeslot"]=0x1FF6, -- ῶ
+ },
+ [0x1FF7]={
+ ["category"]="ll",
+ ["contextname"]="greekomegaiotasubperispomeni",
+ ["description"]="GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI",
+ ["linebreak"]="al",
+ ["shcode"]=0x03C9,
+ ["specials"]={ "char", 0x1FF6, 0x0345 },
+ ["unicodeslot"]=0x1FF7, -- á¿·
+ },
+ [0x1FF8]={
+ ["category"]="lu",
+ ["contextname"]="greekOmicronvaria",
+ ["description"]="GREEK CAPITAL LETTER OMICRON WITH VARIA",
+ ["lccode"]=0x1F78,
+ ["linebreak"]="al",
+ ["shcode"]=0x039F,
+ ["specials"]={ "char", 0x039F, 0x0300 },
+ ["unicodeslot"]=0x1FF8, -- Ὸ
+ },
+ [0x1FF9]={
+ ["category"]="lu",
+ ["contextname"]="greekOmicrontonos",
+ ["description"]="GREEK CAPITAL LETTER OMICRON WITH OXIA",
+ ["lccode"]=0x1F79,
+ ["linebreak"]="al",
+ ["shcode"]=0x039F,
+ ["specials"]={ "char", 0x038C },
+ ["unicodeslot"]=0x1FF9, -- Ό
+ },
+ [0x1FFA]={
+ ["category"]="lu",
+ ["contextname"]="greekOmegavaria",
+ ["description"]="GREEK CAPITAL LETTER OMEGA WITH VARIA",
+ ["lccode"]=0x1F7C,
+ ["linebreak"]="al",
+ ["shcode"]=0x03A9,
+ ["specials"]={ "char", 0x03A9, 0x0300 },
+ ["unicodeslot"]=0x1FFA, -- Ὼ
+ },
+ [0x1FFB]={
+ ["category"]="lu",
+ ["contextname"]="greekOmegatonos",
+ ["description"]="GREEK CAPITAL LETTER OMEGA WITH OXIA",
+ ["lccode"]=0x1F7D,
+ ["linebreak"]="al",
+ ["shcode"]=0x03A9,
+ ["specials"]={ "char", 0x038F },
+ ["unicodeslot"]=0x1FFB, -- á¿»
+ },
+ [0x1FFC]={
+ ["category"]="lt",
+ ["contextname"]="greekOmegaiotasub",
+ ["description"]="GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI",
+ ["lccode"]=0x1FF3,
+ ["linebreak"]="al",
+ ["shcode"]=0x03A9,
+ ["specials"]={ "char", 0x03A9, 0x0345 },
+ ["unicodeslot"]=0x1FFC, -- ῼ
+ },
+ [0x1FFD]={
+ ["category"]="sk",
+ ["contextname"]="greekoxia",
+ ["description"]="GREEK OXIA",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x00B4 },
+ ["unicodeslot"]=0x1FFD, -- ´
+ },
+ [0x1FFE]={
+ ["category"]="sk",
+ ["contextname"]="greekdasia",
+ ["description"]="GREEK DASIA",
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x0020, 0x0314 },
+ ["unicodeslot"]=0x1FFE, -- ῾
+ },
+ [0x2000]={
+ ["category"]="zs",
+ ["description"]="EN QUAD",
+ ["linebreak"]="ba",
+ ["specials"]={ "char", 0x2002 },
+ ["unicodeslot"]=0x2000, --  
+ },
+ [0x2001]={
+ ["category"]="zs",
+ ["description"]="EM QUAD",
+ ["linebreak"]="ba",
+ ["specials"]={ "char", 0x2003 },
+ ["unicodeslot"]=0x2001, -- â€
+ },
+ [0x2002]={
+ ["category"]="zs",
+ ["contextname"]="enspace",
+ ["description"]="EN SPACE",
+ ["linebreak"]="ba",
+ ["specials"]={ "compat", 0x0020 },
+ ["unicodeslot"]=0x2002, --  
+ },
+ [0x2003]={
+ ["category"]="zs",
+ ["contextname"]="emspace",
+ ["description"]="EM SPACE",
+ ["linebreak"]="ba",
+ ["specials"]={ "compat", 0x0020 },
+ ["unicodeslot"]=0x2003, --  
+ },
+ [0x2004]={
+ ["category"]="zs",
+ ["description"]="THREE-PER-EM SPACE",
+ ["linebreak"]="ba",
+ ["specials"]={ "compat", 0x0020 },
+ ["unicodeslot"]=0x2004, --  
+ },
+ [0x2005]={
+ ["category"]="zs",
+ ["description"]="FOUR-PER-EM SPACE",
+ ["linebreak"]="ba",
+ ["specials"]={ "compat", 0x0020 },
+ ["unicodeslot"]=0x2005, --  
+ },
+ [0x2006]={
+ ["category"]="zs",
+ ["description"]="SIX-PER-EM SPACE",
+ ["linebreak"]="ba",
+ ["specials"]={ "compat", 0x0020 },
+ ["unicodeslot"]=0x2006, --  
+ },
+ [0x2007]={
+ ["category"]="zs",
+ ["description"]="FIGURE SPACE",
+ ["linebreak"]="gl",
+ ["specials"]={ "nobreak", 0x0020 },
+ ["unicodeslot"]=0x2007, --  
+ },
+ [0x2008]={
+ ["category"]="zs",
+ ["description"]="PUNCTUATION SPACE",
+ ["linebreak"]="ba",
+ ["specials"]={ "compat", 0x0020 },
+ ["unicodeslot"]=0x2008, --  
+ },
+ [0x2009]={
+ ["category"]="zs",
+ ["contextname"]="thinspace",
+ ["description"]="THIN SPACE",
+ ["linebreak"]="ba",
+ ["specials"]={ "compat", 0x0020 },
+ ["unicodeslot"]=0x2009, --  
+ },
+ [0x200A]={
+ ["category"]="zs",
+ ["contextname"]="hairspace",
+ ["description"]="HAIR SPACE",
+ ["linebreak"]="ba",
+ ["specials"]={ "compat", 0x0020 },
+ ["unicodeslot"]=0x200A, --  
+ },
+ [0x200B]={
+ ["category"]="cf",
+ ["description"]="ZERO WIDTH SPACE",
+ ["linebreak"]="zw",
+ ["unicodeslot"]=0x200B, -- ​
+ },
+ [0x200C]={
+ ["adobename"]="afii61664",
+ ["category"]="cf",
+ ["description"]="ZERO WIDTH NON-JOINER",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x200C, -- ‌
+ },
+ [0x200D]={
+ ["adobename"]="afii301",
+ ["category"]="cf",
+ ["description"]="ZERO WIDTH JOINER",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x200D, -- â€
+ },
+ [0x200E]={
+ ["adobename"]="afii299",
+ ["category"]="cf",
+ ["description"]="LEFT-TO-RIGHT MARK",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x200E, -- ‎
+ },
+ [0x200F]={
+ ["adobename"]="afii300",
+ ["category"]="cf",
+ ["description"]="RIGHT-TO-LEFT MARK",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x200F, -- â€
+ },
+ [0x2010]={
+ ["category"]="pd",
+ ["cjkwd"]="a",
+ ["description"]="HYPHEN",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x2010, -- â€
+ },
+ [0x2011]={
+ ["category"]="pd",
+ ["description"]="NON-BREAKING HYPHEN",
+ ["linebreak"]="gl",
+ ["specials"]={ "nobreak", 0x2010 },
+ ["unicodeslot"]=0x2011, -- ‑
+ },
+ [0x2012]={
+ ["adobename"]="figuredash",
+ ["category"]="pd",
+ ["contextname"]="textminus",
+ ["description"]="FIGURE DASH",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x2012, -- ‒
+ },
+ [0x2013]={
+ ["adobename"]="endash",
+ ["category"]="pd",
+ ["cjkwd"]="a",
+ ["contextname"]="endash",
+ ["description"]="EN DASH",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x2013, -- –
+ },
+ [0x2014]={
+ ["adobename"]="emdash",
+ ["category"]="pd",
+ ["cjkwd"]="a",
+ ["contextname"]="emdash",
+ ["description"]="EM DASH",
+ ["linebreak"]="b2",
+ ["unicodeslot"]=0x2014, -- —
+ },
+ [0x2015]={
+ ["adobename"]="afii208",
+ ["category"]="pd",
+ ["cjkwd"]="a",
+ ["contextname"]="texthorizontalbar",
+ ["description"]="HORIZONTAL BAR",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2015, -- ―
+ },
+ [0x2016]={
+ ["category"]="po",
+ ["cjkwd"]="a",
+ ["description"]="DOUBLE VERTICAL LINE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2016, -- ‖
+ },
+ [0x2017]={
+ ["adobename"]="underscoredbl",
+ ["category"]="po",
+ ["description"]="DOUBLE LOW LINE",
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x0020, 0x0333 },
+ ["unicodeslot"]=0x2017, -- ‗
+ },
+ [0x2018]={
+ ["adobename"]="quoteleft",
+ ["category"]="pi",
+ ["cjkwd"]="a",
+ ["contextname"]="quoteleft",
+ ["description"]="LEFT SINGLE QUOTATION MARK",
+ ["linebreak"]="qu",
+ ["unicodeslot"]=0x2018, -- ‘
+ },
+ [0x2019]={
+ ["adobename"]="quoteright",
+ ["category"]="pf",
+ ["cjkwd"]="a",
+ ["contextname"]="quoteright",
+ ["description"]="RIGHT SINGLE QUOTATION MARK",
+ ["linebreak"]="qu",
+ ["unicodeslot"]=0x2019, -- ’
+ },
+ [0x201A]={
+ ["adobename"]="quotesinglbase",
+ ["category"]="ps",
+ ["contextname"]="quotesinglebase",
+ ["description"]="SINGLE LOW-0x0009 QUOTATION MARK",
+ ["linebreak"]="op",
+ ["unicodeslot"]=0x201A, -- ‚
+ },
+ [0x201B]={
+ ["adobename"]="quotereversed",
+ ["category"]="pi",
+ ["description"]="SINGLE HIGH-REVERSED-0x0009 QUOTATION MARK",
+ ["linebreak"]="qu",
+ ["unicodeslot"]=0x201B, -- ‛
+ },
+ [0x201C]={
+ ["adobename"]="quotedblleft",
+ ["category"]="pi",
+ ["cjkwd"]="a",
+ ["contextname"]="quotedblleft",
+ ["description"]="LEFT DOUBLE QUOTATION MARK",
+ ["linebreak"]="qu",
+ ["unicodeslot"]=0x201C, -- “
+ },
+ [0x201D]={
+ ["adobename"]="quotedblright",
+ ["category"]="pf",
+ ["cjkwd"]="a",
+ ["contextname"]="quotedblright",
+ ["description"]="RIGHT DOUBLE QUOTATION MARK",
+ ["linebreak"]="qu",
+ ["unicodeslot"]=0x201D, -- â€
+ },
+ [0x201E]={
+ ["adobename"]="quotedblbase",
+ ["category"]="ps",
+ ["contextname"]="quotedblbase",
+ ["description"]="DOUBLE LOW-0x0009 QUOTATION MARK",
+ ["linebreak"]="op",
+ ["unicodeslot"]=0x201E, -- „
+ },
+ [0x201F]={
+ ["category"]="pi",
+ ["description"]="DOUBLE HIGH-REVERSED-0x0009 QUOTATION MARK",
+ ["linebreak"]="qu",
+ ["unicodeslot"]=0x201F, -- ‟
+ },
+ [0x2020]={
+ ["adobename"]="dagger",
+ ["category"]="po",
+ ["cjkwd"]="a",
+ ["contextname"]="textdag",
+ ["description"]="DAGGER",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2020, -- †
+ },
+ [0x2021]={
+ ["adobename"]="daggerdbl",
+ ["category"]="po",
+ ["cjkwd"]="a",
+ ["contextname"]="textddag",
+ ["description"]="DOUBLE DAGGER",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2021, -- ‡
+ },
+ [0x2022]={
+ ["adobename"]="bullet",
+ ["category"]="po",
+ ["cjkwd"]="a",
+ ["contextname"]="textbullet",
+ ["mathclass"]="binary", -- ok? AM: yes
+ ["mathname"] = "bullet",
+ ["description"]="BULLET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2022, -- •
+ },
+ [0x2023]={
+ ["category"]="po",
+ ["description"]="TRIANGULAR BULLET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2023, -- ‣
+ },
+ [0x2024]={
+ ["adobename"]="onedotenleader",
+ ["category"]="po",
+ ["cjkwd"]="a",
+ ["description"]="ONE DOT LEADER",
+ ["linebreak"]="in",
+ ["specials"]={ "compat", 0x002E },
+ ["unicodeslot"]=0x2024, -- ․
+ },
+ [0x2025]={
+ ["adobename"]="twodotenleader",
+ ["category"]="po",
+ ["cjkwd"]="a",
+ ["description"]="TWO DOT LEADER",
+ ["linebreak"]="in",
+ ["specials"]={ "compat", 0x002E, 0x002E },
+ ["unicodeslot"]=0x2025, -- ‥
+ },
+ [0x2026]={
+ ["adobename"]="ellipsis",
+ ["category"]="po",
+ ["cjkwd"]="a",
+ ["contextname"]="textellipsis",
+ ["description"]="HORIZONTAL ELLIPSIS",
+ ["linebreak"]="in",
+ ["specials"]={ "compat", 0x002E, 0x002E, 0x002E },
+ ["unicodeslot"]=0x2026, -- …
+ },
+ [0x2027]={
+ ["category"]="po",
+ ["cjkwd"]="a",
+ ["description"]="HYPHENATION POINT",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x2027, -- ‧
+ },
+ [0x2028]={
+ ["category"]="zl",
+ ["description"]="LINE SEPARATOR",
+ ["linebreak"]="bk",
+ ["unicodeslot"]=0x2028, -- 

+ },
+ [0x2029]={
+ ["category"]="zp",
+ ["description"]="PARAGRAPH SEPARATOR",
+ ["linebreak"]="bk",
+ ["unicodeslot"]=0x2029, -- 

+ },
+ [0x202A]={
+ ["category"]="cf",
+ ["description"]="LEFT-TO-RIGHT EMBEDDING",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x202A, -- ‪
+ },
+ [0x202B]={
+ ["category"]="cf",
+ ["description"]="RIGHT-TO-LEFT EMBEDDING",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x202B, -- ‫
+ },
+ [0x202C]={
+ ["adobename"]="afii61573",
+ ["category"]="cf",
+ ["description"]="POP DIRECTIONAL FORMATTING",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x202C, -- ‬
+ },
+ [0x202D]={
+ ["adobename"]="afii61574",
+ ["category"]="cf",
+ ["description"]="LEFT-TO-RIGHT OVERRIDE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x202D, -- ‭
+ },
+ [0x202E]={
+ ["adobename"]="afii61575",
+ ["category"]="cf",
+ ["description"]="RIGHT-TO-LEFT OVERRIDE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x202E, -- ‮
+ },
+ [0x202F]={
+ ["category"]="zs",
+ ["description"]="NARROW NO-BREAK SPACE",
+ ["linebreak"]="gl",
+ ["specials"]={ "nobreak", 0x0020 },
+ ["unicodeslot"]=0x202F, --  
+ },
+ [0x2030]={
+ ["adobename"]="perthousand",
+ ["category"]="po",
+ ["cjkwd"]="a",
+ ["contextname"]="perthousand",
+ ["description"]="PER MILLE SIGN",
+ ["linebreak"]="po",
+ ["unicodeslot"]=0x2030, -- ‰
+ },
+ [0x2031]={
+ ["category"]="po",
+ ["description"]="PER TEN THOUSAND SIGN",
+ ["linebreak"]="po",
+ ["unicodeslot"]=0x2031, -- ‱
+ },
+ [0x2032]={
+ ["adobename"]="minute",
+ ["category"]="po",
+ ["cjkwd"]="a",
+ ["description"]="PRIME",
+ ["linebreak"]="po",
+ ["unicodeslot"]=0x2032, -- ′
+ },
+ [0x2033]={
+ ["adobename"]="second",
+ ["category"]="po",
+ ["cjkwd"]="a",
+ ["description"]="DOUBLE PRIME",
+ ["linebreak"]="po",
+ ["specials"]={ "compat", 0x2032, 0x2032 },
+ ["unicodeslot"]=0x2033, -- ″
+ },
+ [0x2034]={
+ ["category"]="po",
+ ["description"]="TRIPLE PRIME",
+ ["linebreak"]="po",
+ ["specials"]={ "compat", 0x2032, 0x2032, 0x2032 },
+ ["unicodeslot"]=0x2034, -- ‴
+ },
+ [0x2035]={
+ ["category"]="po",
+ ["cjkwd"]="a",
+ ["description"]="REVERSED PRIME",
+ ["linebreak"]="po",
+ ["unicodeslot"]=0x2035, -- ‵
+ },
+ [0x2036]={
+ ["category"]="po",
+ ["description"]="REVERSED DOUBLE PRIME",
+ ["linebreak"]="po",
+ ["specials"]={ "compat", 0x2035, 0x2035 },
+ ["unicodeslot"]=0x2036, -- ‶
+ },
+ [0x2037]={
+ ["category"]="po",
+ ["description"]="REVERSED TRIPLE PRIME",
+ ["linebreak"]="po",
+ ["specials"]={ "compat", 0x2035, 0x2035, 0x2035 },
+ ["unicodeslot"]=0x2037, -- ‷
+ },
+ [0x2038]={
+ ["category"]="po",
+ ["description"]="CARET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2038, -- ‸
+ },
+ [0x2039]={
+ ["adobename"]="guilsinglleft",
+ ["category"]="pi",
+ ["contextname"]="guilsingleleft",
+ ["description"]="SINGLE LEFT-POINTING ANGLE QUOTATION MARK",
+ ["linebreak"]="qu",
+ ["unicodeslot"]=0x2039, -- ‹
+ },
+ [0x203A]={
+ ["adobename"]="guilsinglright",
+ ["category"]="pf",
+ ["contextname"]="guilsingleright",
+ ["description"]="SINGLE RIGHT-POINTING ANGLE QUOTATION MARK",
+ ["linebreak"]="qu",
+ ["unicodeslot"]=0x203A, -- ›
+ },
+ [0x203B]={
+ ["category"]="po",
+ ["cjkwd"]="a",
+ ["description"]="REFERENCE MARK",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x203B, -- ※
+ },
+ [0x203C]={
+ ["adobename"]="exclamdbl",
+ ["category"]="po",
+ ["description"]="DOUBLE EXCLAMATION MARK",
+ ["linebreak"]="ns",
+ ["specials"]={ "compat", 0x0021, 0x0021 },
+ ["unicodeslot"]=0x203C, -- ‼
+ },
+ [0x203D]={
+ ["category"]="po",
+ ["description"]="INTERROBANG",
+ ["linebreak"]="ns",
+ ["unicodeslot"]=0x203D, -- ‽
+ },
+ [0x203E]={
+ ["category"]="po",
+ ["cjkwd"]="a",
+ ["description"]="OVERLINE",
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x0020, 0x0305 },
+ ["unicodeslot"]=0x203E, -- ‾
+ },
+ [0x203F]={
+ ["category"]="pc",
+ ["description"]="UNDERTIE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x203F, -- ‿
+ },
+ [0x2040]={
+ ["category"]="pc",
+ ["description"]="CHARACTER TIE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2040, -- â€
+ },
+ [0x2041]={
+ ["category"]="po",
+ ["description"]="CARET INSERTION POINT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2041, -- â
+ },
+ [0x2042]={
+ ["category"]="po",
+ ["description"]="ASTERISM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2042, -- â‚
+ },
+ [0x2043]={
+ ["category"]="po",
+ ["description"]="HYPHEN BULLET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2043, -- âƒ
+ },
+ [0x2044]={
+ ["adobename"]="fraction",
+ ["category"]="sm",
+ ["description"]="FRACTION SLASH",
+ ["linebreak"]="is",
+ ["unicodeslot"]=0x2044, -- â„
+ },
+ [0x2045]={
+ ["category"]="ps",
+ ["description"]="LEFT SQUARE BRACKET WITH QUILL",
+ ["linebreak"]="op",
+ ["unicodeslot"]=0x2045, -- â…
+ },
+ [0x2046]={
+ ["category"]="pe",
+ ["description"]="RIGHT SQUARE BRACKET WITH QUILL",
+ ["linebreak"]="cl",
+ ["unicodeslot"]=0x2046, -- â†
+ },
+ [0x2047]={
+ ["category"]="po",
+ ["description"]="DOUBLE QUESTION MARK",
+ ["linebreak"]="ns",
+ ["specials"]={ "compat", 0x003F, 0x003F },
+ ["unicodeslot"]=0x2047, -- â‡
+ },
+ [0x2048]={
+ ["category"]="po",
+ ["description"]="QUESTION EXCLAMATION MARK",
+ ["linebreak"]="ns",
+ ["specials"]={ "compat", 0x003F, 0x0021 },
+ ["unicodeslot"]=0x2048, -- âˆ
+ },
+ [0x2049]={
+ ["category"]="po",
+ ["description"]="EXCLAMATION QUESTION MARK",
+ ["linebreak"]="ns",
+ ["specials"]={ "compat", 0x0021, 0x003F },
+ ["unicodeslot"]=0x2049, -- â‰
+ },
+ [0x204A]={
+ ["category"]="po",
+ ["description"]="TIRONIAN SIGN ET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x204A, -- âŠ
+ },
+ [0x204B]={
+ ["category"]="po",
+ ["description"]="REVERSED PILCROW SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x204B, -- â‹
+ },
+ [0x204C]={
+ ["category"]="po",
+ ["description"]="BLACK LEFTWARDS BULLET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x204C, -- âŒ
+ },
+ [0x204D]={
+ ["category"]="po",
+ ["description"]="BLACK RIGHTWARDS BULLET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x204D, -- â
+ },
+ [0x204E]={
+ ["category"]="po",
+ ["description"]="LOW ASTERISK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x204E, -- âŽ
+ },
+ [0x204F]={
+ ["category"]="po",
+ ["description"]="REVERSED SEMICOLON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x204F, -- â
+ },
+ [0x2050]={
+ ["category"]="po",
+ ["description"]="CLOSE UP",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2050, -- â
+ },
+ [0x2051]={
+ ["category"]="po",
+ ["description"]="TWO ASTERISKS ALIGNED VERTICALLY",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2051, -- â‘
+ },
+ [0x2052]={
+ ["category"]="sm",
+ ["description"]="COMMERCIAL MINUS SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2052, -- â’
+ },
+ [0x2053]={
+ ["category"]="po",
+ ["description"]="SWUNG DASH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2053, -- â“
+ },
+ [0x2054]={
+ ["category"]="pc",
+ ["description"]="INVERTED UNDERTIE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2054, -- â”
+ },
+ [0x2055]={
+ ["category"]="po",
+ ["description"]="FLOWER PUNCTUATION MARK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2055, -- â•
+ },
+ [0x2056]={
+ ["category"]="po",
+ ["description"]="THREE DOT PUNCTUATION",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x2056, -- â–
+ },
+ [0x2057]={
+ ["category"]="po",
+ ["description"]="QUADRUPLE PRIME",
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x2032, 0x2032, 0x2032, 0x2032 },
+ ["unicodeslot"]=0x2057, -- â—
+ },
+ [0x2058]={
+ ["category"]="po",
+ ["description"]="FOUR DOT PUNCTUATION",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x2058, -- â˜
+ },
+ [0x2059]={
+ ["category"]="po",
+ ["description"]="FIVE DOT PUNCTUATION",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x2059, -- â™
+ },
+ [0x205A]={
+ ["category"]="po",
+ ["description"]="TWO DOT PUNCTUATION",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x205A, -- âš
+ },
+ [0x205B]={
+ ["category"]="po",
+ ["description"]="FOUR DOT MARK",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x205B, -- â›
+ },
+ [0x205C]={
+ ["category"]="po",
+ ["description"]="DOTTED CROSS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x205C, -- âœ
+ },
+ [0x205D]={
+ ["category"]="po",
+ ["description"]="TRICOLON",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x205D, -- â
+ },
+ [0x205E]={
+ ["category"]="po",
+ ["description"]="VERTICAL FOUR DOTS",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x205E, -- âž
+ },
+ [0x205F]={
+ ["category"]="zs",
+ ["description"]="MEDIUM MATHEMATICAL SPACE",
+ ["linebreak"]="ba",
+ ["specials"]={ "compat", 0x0020 },
+ ["unicodeslot"]=0x205F, -- âŸ
+ },
+ [0x2060]={
+ ["category"]="cf",
+ ["description"]="WORD JOINER",
+ ["linebreak"]="wj",
+ ["unicodeslot"]=0x2060, -- â 
+ },
+ [0x2061]={
+ ["category"]="cf",
+ ["contextcommand"]="relax",
+ ["comment"]="maybe: nulloperator",
+ ["description"]="FUNCTION APPLICATION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2061, -- â¡
+ },
+ [0x2062]={
+ ["category"]="cf",
+ ["description"]="INVISIBLE TIMES",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2062, -- â¢
+ },
+ [0x2063]={
+ ["category"]="cf",
+ ["description"]="INVISIBLE SEPARATOR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2063, -- â£
+ },
+ [0x206A]={
+ ["category"]="cf",
+ ["description"]="INHIBIT SYMMETRIC SWAPPING",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x206A, -- âª
+ },
+ [0x206B]={
+ ["category"]="cf",
+ ["description"]="ACTIVATE SYMMETRIC SWAPPING",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x206B, -- â«
+ },
+ [0x206C]={
+ ["category"]="cf",
+ ["description"]="INHIBIT ARABIC FORM SHAPING",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x206C, -- â¬
+ },
+ [0x206D]={
+ ["category"]="cf",
+ ["description"]="ACTIVATE ARABIC FORM SHAPING",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x206D, -- â­
+ },
+ [0x206E]={
+ ["category"]="cf",
+ ["description"]="NATIONAL DIGIT SHAPES",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x206E, -- â®
+ },
+ [0x206F]={
+ ["category"]="cf",
+ ["description"]="NOMINAL DIGIT SHAPES",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x206F, -- â¯
+ },
+ [0x2070]={
+ ["category"]="no",
+ ["description"]="SUPERSCRIPT ZERO",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0030 },
+ ["unicodeslot"]=0x2070, -- â°
+ },
+ [0x2071]={
+ ["category"]="ll",
+ ["description"]="SUPERSCRIPT LATIN SMALL LETTER I",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0069 },
+ ["unicodeslot"]=0x2071, -- â±
+ },
+ [0x2074]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="SUPERSCRIPT FOUR",
+ ["linebreak"]="ai",
+ ["specials"]={ "super", 0x0034 },
+ ["unicodeslot"]=0x2074, -- â´
+ },
+ [0x2075]={
+ ["category"]="no",
+ ["description"]="SUPERSCRIPT FIVE",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0035 },
+ ["unicodeslot"]=0x2075, -- âµ
+ },
+ [0x2076]={
+ ["category"]="no",
+ ["description"]="SUPERSCRIPT SIX",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0036 },
+ ["unicodeslot"]=0x2076, -- â¶
+ },
+ [0x2077]={
+ ["category"]="no",
+ ["description"]="SUPERSCRIPT SEVEN",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0037 },
+ ["unicodeslot"]=0x2077, -- â·
+ },
+ [0x2078]={
+ ["category"]="no",
+ ["description"]="SUPERSCRIPT EIGHT",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0038 },
+ ["unicodeslot"]=0x2078, -- â¸
+ },
+ [0x2079]={
+ ["category"]="no",
+ ["description"]="SUPERSCRIPT NINE",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0039 },
+ ["unicodeslot"]=0x2079, -- â¹
+ },
+ [0x207A]={
+ ["category"]="sm",
+ ["description"]="SUPERSCRIPT PLUS SIGN",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x002B },
+ ["unicodeslot"]=0x207A, -- âº
+ },
+ [0x207B]={
+ ["category"]="sm",
+ ["description"]="SUPERSCRIPT MINUS",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x2212 },
+ ["unicodeslot"]=0x207B, -- â»
+ },
+ [0x207C]={
+ ["category"]="sm",
+ ["description"]="SUPERSCRIPT EQUALS SIGN",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x003D },
+ ["unicodeslot"]=0x207C, -- â¼
+ },
+ [0x207D]={
+ ["category"]="ps",
+ ["description"]="SUPERSCRIPT LEFT PARENTHESIS",
+ ["linebreak"]="op",
+ ["specials"]={ "super", 0x0028 },
+ ["unicodeslot"]=0x207D, -- â½
+ },
+ [0x207E]={
+ ["category"]="pe",
+ ["description"]="SUPERSCRIPT RIGHT PARENTHESIS",
+ ["linebreak"]="cl",
+ ["specials"]={ "super", 0x0029 },
+ ["unicodeslot"]=0x207E, -- â¾
+ },
+ [0x207F]={
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["description"]="SUPERSCRIPT LATIN SMALL LETTER N",
+ ["linebreak"]="ai",
+ ["specials"]={ "super", 0x006E },
+ ["unicodeslot"]=0x207F, -- â¿
+ },
+ [0x2080]={
+ ["category"]="no",
+ ["description"]="SUBSCRIPT ZERO",
+ ["linebreak"]="al",
+ ["specials"]={ "sub", 0x0030 },
+ ["unicodeslot"]=0x2080, -- â‚€
+ },
+ [0x2081]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="SUBSCRIPT ONE",
+ ["linebreak"]="ai",
+ ["specials"]={ "sub", 0x0031 },
+ ["unicodeslot"]=0x2081, -- â‚
+ },
+ [0x2082]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="SUBSCRIPT TWO",
+ ["linebreak"]="ai",
+ ["specials"]={ "sub", 0x0032 },
+ ["unicodeslot"]=0x2082, -- â‚‚
+ },
+ [0x2083]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="SUBSCRIPT THREE",
+ ["linebreak"]="ai",
+ ["specials"]={ "sub", 0x0033 },
+ ["unicodeslot"]=0x2083, -- ₃
+ },
+ [0x2084]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="SUBSCRIPT FOUR",
+ ["linebreak"]="ai",
+ ["specials"]={ "sub", 0x0034 },
+ ["unicodeslot"]=0x2084, -- â‚„
+ },
+ [0x2085]={
+ ["category"]="no",
+ ["description"]="SUBSCRIPT FIVE",
+ ["linebreak"]="al",
+ ["specials"]={ "sub", 0x0035 },
+ ["unicodeslot"]=0x2085, -- â‚…
+ },
+ [0x2086]={
+ ["category"]="no",
+ ["description"]="SUBSCRIPT SIX",
+ ["linebreak"]="al",
+ ["specials"]={ "sub", 0x0036 },
+ ["unicodeslot"]=0x2086, -- ₆
+ },
+ [0x2087]={
+ ["category"]="no",
+ ["description"]="SUBSCRIPT SEVEN",
+ ["linebreak"]="al",
+ ["specials"]={ "sub", 0x0037 },
+ ["unicodeslot"]=0x2087, -- ₇
+ },
+ [0x2088]={
+ ["category"]="no",
+ ["description"]="SUBSCRIPT EIGHT",
+ ["linebreak"]="al",
+ ["specials"]={ "sub", 0x0038 },
+ ["unicodeslot"]=0x2088, -- ₈
+ },
+ [0x2089]={
+ ["category"]="no",
+ ["description"]="SUBSCRIPT NINE",
+ ["linebreak"]="al",
+ ["specials"]={ "sub", 0x0039 },
+ ["unicodeslot"]=0x2089, -- ₉
+ },
+ [0x208A]={
+ ["category"]="sm",
+ ["description"]="SUBSCRIPT PLUS SIGN",
+ ["linebreak"]="al",
+ ["specials"]={ "sub", 0x002B },
+ ["unicodeslot"]=0x208A, -- â‚Š
+ },
+ [0x208B]={
+ ["category"]="sm",
+ ["description"]="SUBSCRIPT MINUS",
+ ["linebreak"]="al",
+ ["specials"]={ "sub", 0x2212 },
+ ["unicodeslot"]=0x208B, -- â‚‹
+ },
+ [0x208C]={
+ ["category"]="sm",
+ ["description"]="SUBSCRIPT EQUALS SIGN",
+ ["linebreak"]="al",
+ ["specials"]={ "sub", 0x003D },
+ ["unicodeslot"]=0x208C, -- ₌
+ },
+ [0x208D]={
+ ["category"]="ps",
+ ["description"]="SUBSCRIPT LEFT PARENTHESIS",
+ ["linebreak"]="op",
+ ["specials"]={ "sub", 0x0028 },
+ ["unicodeslot"]=0x208D, -- â‚
+ },
+ [0x208E]={
+ ["category"]="pe",
+ ["description"]="SUBSCRIPT RIGHT PARENTHESIS",
+ ["linebreak"]="cl",
+ ["specials"]={ "sub", 0x0029 },
+ ["unicodeslot"]=0x208E, -- â‚Ž
+ },
+ [0x2090]={
+ ["category"]="lm",
+ ["description"]="LATIN SUBSCRIPT SMALL LETTER A",
+ ["linebreak"]="al",
+ ["specials"]={ "sub", 0x0061 },
+ ["unicodeslot"]=0x2090, -- â‚
+ },
+ [0x2091]={
+ ["category"]="lm",
+ ["description"]="LATIN SUBSCRIPT SMALL LETTER E",
+ ["linebreak"]="al",
+ ["specials"]={ "sub", 0x0065 },
+ ["unicodeslot"]=0x2091, -- â‚‘
+ },
+ [0x2092]={
+ ["category"]="lm",
+ ["description"]="LATIN SUBSCRIPT SMALL LETTER O",
+ ["linebreak"]="al",
+ ["specials"]={ "sub", 0x006F },
+ ["unicodeslot"]=0x2092, -- â‚’
+ },
+ [0x2093]={
+ ["category"]="lm",
+ ["description"]="LATIN SUBSCRIPT SMALL LETTER X",
+ ["linebreak"]="al",
+ ["specials"]={ "sub", 0x0078 },
+ ["unicodeslot"]=0x2093, -- â‚“
+ },
+ [0x2094]={
+ ["category"]="lm",
+ ["description"]="LATIN SUBSCRIPT SMALL LETTER SCHWA",
+ ["linebreak"]="al",
+ ["specials"]={ "sub", 0x0259 },
+ ["unicodeslot"]=0x2094, -- â‚”
+ },
+ [0x20A0]={
+ ["category"]="sc",
+ ["description"]="EURO-CURRENCY SIGN",
+ ["linebreak"]="pr",
+ ["unicodeslot"]=0x20A0, -- â‚ 
+ },
+ [0x20A1]={
+ ["adobename"]="colonmonetary",
+ ["category"]="sc",
+ ["description"]="COLON SIGN",
+ ["linebreak"]="pr",
+ ["unicodeslot"]=0x20A1, -- â‚¡
+ },
+ [0x20A2]={
+ ["category"]="sc",
+ ["description"]="CRUZEIRO SIGN",
+ ["linebreak"]="pr",
+ ["unicodeslot"]=0x20A2, -- â‚¢
+ },
+ [0x20A3]={
+ ["adobename"]="franc",
+ ["category"]="sc",
+ ["description"]="FRENCH FRANC SIGN",
+ ["linebreak"]="pr",
+ ["unicodeslot"]=0x20A3, -- â‚£
+ },
+ [0x20A4]={
+ ["adobename"]="lira",
+ ["category"]="sc",
+ ["description"]="LIRA SIGN",
+ ["linebreak"]="pr",
+ ["unicodeslot"]=0x20A4, -- ₤
+ },
+ [0x20A5]={
+ ["category"]="sc",
+ ["description"]="MILL SIGN",
+ ["linebreak"]="pr",
+ ["unicodeslot"]=0x20A5, -- â‚¥
+ },
+ [0x20A6]={
+ ["category"]="sc",
+ ["description"]="NAIRA SIGN",
+ ["linebreak"]="pr",
+ ["unicodeslot"]=0x20A6, -- ₦
+ },
+ [0x20A7]={
+ ["adobename"]="peseta",
+ ["category"]="sc",
+ ["description"]="PESETA SIGN",
+ ["linebreak"]="po",
+ ["unicodeslot"]=0x20A7, -- ₧
+ },
+ [0x20A8]={
+ ["category"]="sc",
+ ["description"]="RUPEE SIGN",
+ ["linebreak"]="pr",
+ ["specials"]={ "compat", 0x0052, 0x0073 },
+ ["unicodeslot"]=0x20A8, -- ₨
+ },
+ [0x20A9]={
+ ["category"]="sc",
+ ["cjkwd"]="h",
+ ["description"]="WON SIGN",
+ ["linebreak"]="pr",
+ ["unicodeslot"]=0x20A9, -- â‚©
+ },
+ [0x20AA]={
+ ["adobename"]="afii57636",
+ ["category"]="sc",
+ ["description"]="NEW SHEQEL SIGN",
+ ["linebreak"]="pr",
+ ["unicodeslot"]=0x20AA, -- ₪
+ },
+ [0x20AB]={
+ ["adobename"]="dong",
+ ["category"]="sc",
+ ["contextname"]="textdong",
+ ["description"]="DONG SIGN",
+ ["linebreak"]="pr",
+ ["unicodeslot"]=0x20AB, -- â‚«
+ },
+ [0x20AC]={
+ ["adobename"]="Euro",
+ ["category"]="sc",
+ ["cjkwd"]="a",
+ ["contextname"]="texteuro",
+ ["description"]="EURO SIGN",
+ ["linebreak"]="pr",
+ ["unicodeslot"]=0x20AC, -- €
+ },
+ [0x20AD]={
+ ["category"]="sc",
+ ["description"]="KIP SIGN",
+ ["linebreak"]="pr",
+ ["unicodeslot"]=0x20AD, -- â‚­
+ },
+ [0x20AE]={
+ ["category"]="sc",
+ ["description"]="TUGRIK SIGN",
+ ["linebreak"]="pr",
+ ["unicodeslot"]=0x20AE, -- â‚®
+ },
+ [0x20AF]={
+ ["category"]="sc",
+ ["description"]="DRACHMA SIGN",
+ ["linebreak"]="pr",
+ ["unicodeslot"]=0x20AF, -- ₯
+ },
+ [0x20B0]={
+ ["category"]="sc",
+ ["description"]="GERMAN PENNY SIGN",
+ ["linebreak"]="pr",
+ ["unicodeslot"]=0x20B0, -- â‚°
+ },
+ [0x20B1]={
+ ["category"]="sc",
+ ["description"]="PESO SIGN",
+ ["linebreak"]="pr",
+ ["unicodeslot"]=0x20B1, -- ₱
+ },
+ [0x20B2]={
+ ["category"]="sc",
+ ["description"]="GUARANI SIGN",
+ ["linebreak"]="pr",
+ ["unicodeslot"]=0x20B2, -- ₲
+ },
+ [0x20B3]={
+ ["category"]="sc",
+ ["description"]="AUSTRAL SIGN",
+ ["linebreak"]="pr",
+ ["unicodeslot"]=0x20B3, -- ₳
+ },
+ [0x20B4]={
+ ["category"]="sc",
+ ["description"]="HRYVNIA SIGN",
+ ["linebreak"]="pr",
+ ["unicodeslot"]=0x20B4, -- â‚´
+ },
+ [0x20B5]={
+ ["category"]="sc",
+ ["description"]="CEDI SIGN",
+ ["linebreak"]="pr",
+ ["unicodeslot"]=0x20B5, -- ₵
+ },
+ [0x20D0]={
+ ["category"]="mn",
+ ["description"]="COMBINING LEFT HARPOON ABOVE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x20D0, -- âƒ
+ },
+ [0x20D1]={
+ ["category"]="mn",
+ ["description"]="COMBINING RIGHT HARPOON ABOVE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x20D1, -- ⃑
+ },
+ [0x20D2]={
+ ["category"]="mn",
+ ["description"]="COMBINING LONG VERTICAL LINE OVERLAY",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x20D2, -- ⃒
+ },
+ [0x20D3]={
+ ["category"]="mn",
+ ["description"]="COMBINING SHORT VERTICAL LINE OVERLAY",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x20D3, -- ⃓
+ },
+ [0x20D4]={
+ ["category"]="mn",
+ ["description"]="COMBINING ANTICLOCKWISE ARROW ABOVE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x20D4, -- ⃔
+ },
+ [0x20D5]={
+ ["category"]="mn",
+ ["description"]="COMBINING CLOCKWISE ARROW ABOVE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x20D5, -- ⃕
+ },
+ [0x20D6]={
+ ["category"]="mn",
+ ["description"]="COMBINING LEFT ARROW ABOVE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x20D6, -- ⃖
+ },
+ [0x20D7]={
+ ["category"]="mn",
+ ["description"]="COMBINING RIGHT ARROW ABOVE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x20D7, -- ⃗
+ },
+ [0x20D8]={
+ ["category"]="mn",
+ ["description"]="COMBINING RING OVERLAY",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x20D8, -- ⃘
+ },
+ [0x20D9]={
+ ["category"]="mn",
+ ["description"]="COMBINING CLOCKWISE RING OVERLAY",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x20D9, -- ⃙
+ },
+ [0x20DA]={
+ ["category"]="mn",
+ ["description"]="COMBINING ANTICLOCKWISE RING OVERLAY",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x20DA, -- ⃚
+ },
+ [0x20DB]={
+ ["category"]="mn",
+ ["description"]="COMBINING THREE DOTS ABOVE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x20DB, -- ⃛
+ },
+ [0x20DC]={
+ ["category"]="mn",
+ ["description"]="COMBINING FOUR DOTS ABOVE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x20DC, -- ⃜
+ },
+ [0x20DD]={
+ ["category"]="me",
+ ["description"]="COMBINING ENCLOSING CIRCLE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x20DD, -- âƒ
+ },
+ [0x20DE]={
+ ["category"]="me",
+ ["description"]="COMBINING ENCLOSING SQUARE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x20DE, -- ⃞
+ },
+ [0x20DF]={
+ ["category"]="me",
+ ["description"]="COMBINING ENCLOSING DIAMOND",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x20DF, -- ⃟
+ },
+ [0x20E0]={
+ ["category"]="me",
+ ["description"]="COMBINING ENCLOSING CIRCLE BACKSLASH",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x20E0, -- ⃠
+ },
+ [0x20E1]={
+ ["category"]="mn",
+ ["description"]="COMBINING LEFT RIGHT ARROW ABOVE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x20E1, -- ⃡
+ },
+ [0x20E2]={
+ ["category"]="me",
+ ["description"]="COMBINING ENCLOSING SCREEN",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x20E2, -- ⃢
+ },
+ [0x20E3]={
+ ["category"]="me",
+ ["description"]="COMBINING ENCLOSING KEYCAP",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x20E3, -- ⃣
+ },
+ [0x20E4]={
+ ["category"]="me",
+ ["description"]="COMBINING ENCLOSING UPWARD POINTING TRIANGLE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x20E4, -- ⃤
+ },
+ [0x20E5]={
+ ["category"]="mn",
+ ["description"]="COMBINING REVERSE SOLIDUS OVERLAY",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x20E5, -- ⃥
+ },
+ [0x20E6]={
+ ["category"]="mn",
+ ["description"]="COMBINING DOUBLE VERTICAL STROKE OVERLAY",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x20E6, -- ⃦
+ },
+ [0x20E7]={
+ ["category"]="mn",
+ ["description"]="COMBINING ANNUITY SYMBOL",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x20E7, -- ⃧
+ },
+ [0x20E8]={
+ ["category"]="mn",
+ ["description"]="COMBINING TRIPLE UNDERDOT",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x20E8, -- ⃨
+ },
+ [0x20E9]={
+ ["category"]="mn",
+ ["description"]="COMBINING WIDE BRIDGE ABOVE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x20E9, -- ⃩
+ },
+ [0x20EA]={
+ ["category"]="mn",
+ ["description"]="COMBINING LEFTWARDS ARROW OVERLAY",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x20EA, -- ⃪
+ },
+ [0x20EB]={
+ ["category"]="mn",
+ ["description"]="COMBINING LONG DOUBLE SOLIDUS OVERLAY",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x20EB, -- ⃫
+ },
+ [0x20EC]={
+ ["category"]="mn",
+ ["description"]="COMBINING RIGHTWARDS HARPOON WITH BARB DOWNWARDS",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x20EC, -- ⃬
+ },
+ [0x20ED]={
+ ["category"]="mn",
+ ["description"]="COMBINING LEFTWARDS HARPOON WITH BARB DOWNWARDS",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x20ED, -- ⃭
+ },
+ [0x20EE]={
+ ["category"]="mn",
+ ["description"]="COMBINING LEFT ARROW BELOW",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x20EE, -- ⃮
+ },
+ [0x20EF]={
+ ["category"]="mn",
+ ["description"]="COMBINING RIGHT ARROW BELOW",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x20EF, -- ⃯
+ },
+ [0x2100]={
+ ["category"]="so",
+ ["description"]="ACCOUNT OF",
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x0061, 0x002F, 0x0063 },
+ ["unicodeslot"]=0x2100, -- â„€
+ },
+ [0x2101]={
+ ["category"]="so",
+ ["description"]="ADDRESSED TO THE SUBJECT",
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x0061, 0x002F, 0x0073 },
+ ["unicodeslot"]=0x2101, -- â„
+ },
+ [0x2102]={
+ ["category"]="lu",
+ ["description"]="DOUBLE-STRUCK CAPITAL C",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0043 },
+ ["unicodeslot"]=0x2102, -- â„‚
+ },
+ [0x2103]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="DEGREE CELSIUS",
+ ["linebreak"]="po",
+ ["specials"]={ "compat", 0x00B0, 0x0043 },
+ ["unicodeslot"]=0x2103, -- ℃
+ },
+ [0x2104]={
+ ["category"]="so",
+ ["description"]="CENTRE LINE SYMBOL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2104, -- â„„
+ },
+ [0x2105]={
+ ["adobename"]="afii61248",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="CARE OF",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0063, 0x002F, 0x006F },
+ ["unicodeslot"]=0x2105, -- â„…
+ },
+ [0x2106]={
+ ["category"]="so",
+ ["description"]="CADA UNA",
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x0063, 0x002F, 0x0075 },
+ ["unicodeslot"]=0x2106, -- ℆
+ },
+ [0x2107]={
+ ["category"]="lu",
+ ["description"]="EULER CONSTANT",
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x0190 },
+ ["unicodeslot"]=0x2107, -- ℇ
+ },
+ [0x2108]={
+ ["category"]="so",
+ ["description"]="SCRUPLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2108, -- ℈
+ },
+ [0x2109]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="DEGREE FAHRENHEIT",
+ ["linebreak"]="po",
+ ["specials"]={ "compat", 0x00B0, 0x0046 },
+ ["unicodeslot"]=0x2109, -- ℉
+ },
+ [0x210A]={
+ ["category"]="ll",
+ ["description"]="SCRIPT SMALL G",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0067 },
+ ["unicodeslot"]=0x210A, -- â„Š
+ },
+ [0x210B]={
+ ["category"]="lu",
+ ["description"]="SCRIPT CAPITAL H",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0048 },
+ ["unicodeslot"]=0x210B, -- â„‹
+ },
+ [0x210C]={
+ ["category"]="lu",
+ ["description"]="BLACK-LETTER CAPITAL H",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0048 },
+ ["unicodeslot"]=0x210C, -- ℌ
+ },
+ [0x210D]={
+ ["category"]="lu",
+ ["description"]="DOUBLE-STRUCK CAPITAL H",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0048 },
+ ["unicodeslot"]=0x210D, -- â„
+ },
+ [0x210E]={
+ ["category"]="ll",
+ ["description"]="PLANCK CONSTANT",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0068 },
+ ["unicodeslot"]=0x210E, -- â„Ž
+ },
+ [0x210F]={
+ ["category"]="ll",
+ ["description"]="PLANCK CONSTANT OVER TWO PI",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0127 },
+ ["unicodeslot"]=0x210F, -- â„
+ },
+ [0x2110]={
+ ["category"]="lu",
+ ["description"]="SCRIPT CAPITAL I",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0049 },
+ ["unicodeslot"]=0x2110, -- â„
+ },
+ [0x2111]={
+ ["adobename"]="Ifraktur",
+ ["category"]="lu",
+ ["description"]="BLACK-LETTER CAPITAL I",
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["mathname"]="Im",
+ ["specials"]={ "font", 0x0049 },
+ ["unicodeslot"]=0x2111, -- â„‘
+ },
+ [0x2112]={
+ ["category"]="lu",
+ ["description"]="SCRIPT CAPITAL L",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004C },
+ ["unicodeslot"]=0x2112, -- â„’
+ },
+ [0x2113]={
+ ["adobename"]="afii61289",
+ ["category"]="ll",
+ ["cjkwd"]="a",
+ ["description"]="SCRIPT SMALL L",
+ ["linebreak"]="ai",
+ ["mathclass"]="variable",
+ ["mathname"]="ell",
+ ["specials"]={ "font", 0x006C },
+ ["unicodeslot"]=0x2113, -- â„“
+ },
+ [0x2114]={
+ ["category"]="so",
+ ["description"]="L B BAR SYMBOL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2114, -- â„”
+ },
+ [0x2115]={
+ ["category"]="lu",
+ ["description"]="DOUBLE-STRUCK CAPITAL N",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004E },
+ ["unicodeslot"]=0x2115, -- â„•
+ },
+ [0x2116]={
+ ["adobename"]="afii61352",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["contextname"]="textnumero",
+ ["description"]="NUMERO SIGN",
+ ["linebreak"]="pr",
+ ["specials"]={ "compat", 0x004E, 0x006F },
+ ["unicodeslot"]=0x2116, -- â„–
+ },
+ [0x2117]={
+ ["category"]="so",
+ ["description"]="SOUND RECORDING COPYRIGHT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2117, -- â„—
+ },
+ [0x2118]={
+ ["adobename"]="weierstrass",
+ ["category"]="so",
+ ["description"]="SCRIPT CAPITAL P",
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["mathname"]="wp",
+ ["unicodeslot"]=0x2118, -- ℘
+ },
+ [0x2119]={
+ ["category"]="lu",
+ ["description"]="DOUBLE-STRUCK CAPITAL P",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0050 },
+ ["unicodeslot"]=0x2119, -- â„™
+ },
+ [0x211A]={
+ ["category"]="lu",
+ ["description"]="DOUBLE-STRUCK CAPITAL Q",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0051 },
+ ["unicodeslot"]=0x211A, -- â„š
+ },
+ [0x211B]={
+ ["category"]="lu",
+ ["description"]="SCRIPT CAPITAL R",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0052 },
+ ["unicodeslot"]=0x211B, -- â„›
+ },
+ [0x211C]={
+ ["adobename"]="Rfraktur",
+ ["category"]="lu",
+ ["description"]="BLACK-LETTER CAPITAL R",
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["mathname"]="Re",
+ ["specials"]={ "font", 0x0052 },
+ ["unicodeslot"]=0x211C, -- ℜ
+ },
+ [0x211D]={
+ ["category"]="lu",
+ ["description"]="DOUBLE-STRUCK CAPITAL R",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0052 },
+ ["unicodeslot"]=0x211D, -- â„
+ },
+ [0x211E]={
+ ["adobename"]="prescription",
+ ["category"]="so",
+ ["description"]="PRESCRIPTION TAKE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x211E, -- â„ž
+ },
+ [0x211F]={
+ ["category"]="so",
+ ["description"]="RESPONSE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x211F, -- â„Ÿ
+ },
+ [0x2120]={
+ ["category"]="so",
+ ["description"]="SERVICE MARK",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x0053, 0x004D },
+ ["unicodeslot"]=0x2120, -- â„ 
+ },
+ [0x2121]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="TELEPHONE SIGN",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0054, 0x0045, 0x004C },
+ ["unicodeslot"]=0x2121, -- â„¡
+ },
+ [0x2122]={
+ ["adobename"]="trademark",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["contextname"]="trademark",
+ ["description"]="TRADE MARK SIGN",
+ ["linebreak"]="ai",
+ ["specials"]={ "super", 0x0054, 0x004D },
+ ["unicodeslot"]=0x2122, -- â„¢
+ },
+ [0x2123]={
+ ["category"]="so",
+ ["description"]="VERSICLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2123, -- â„£
+ },
+ [0x2124]={
+ ["category"]="lu",
+ ["description"]="DOUBLE-STRUCK CAPITAL Z",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x005A },
+ ["unicodeslot"]=0x2124, -- ℤ
+ },
+ [0x2125]={
+ ["category"]="so",
+ ["description"]="OUNCE SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2125, -- â„¥
+ },
+ [0x2126]={
+ ["adobename"]="Omega",
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["description"]="OHM SIGN",
+ ["lccode"]=0x03C9,
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x03A9 },
+ ["unicodeslot"]=0x2126, -- Ω
+ },
+ [0x2127]={
+ ["category"]="so",
+ ["description"]="INVERTED OHM SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2127, -- ℧
+ },
+ [0x2128]={
+ ["category"]="lu",
+ ["description"]="BLACK-LETTER CAPITAL Z",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x005A },
+ ["unicodeslot"]=0x2128, -- ℨ
+ },
+ [0x2129]={
+ ["category"]="so",
+ ["description"]="TURNED GREEK SMALL LETTER IOTA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2129, -- â„©
+ },
+ [0x212A]={
+ ["category"]="lu",
+ ["description"]="KELVIN SIGN",
+ ["lccode"]=0x006B,
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x004B },
+ ["unicodeslot"]=0x212A, -- K
+ },
+ [0x212B]={
+ ["category"]="lu",
+ ["cjkwd"]="a",
+ ["description"]="ANGSTROM SIGN",
+ ["lccode"]=0x00E5,
+ ["linebreak"]="ai",
+ ["specials"]={ "char", 0x00C5 },
+ ["unicodeslot"]=0x212B, -- â„«
+ },
+ [0x212C]={
+ ["category"]="lu",
+ ["description"]="SCRIPT CAPITAL B",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0042 },
+ ["unicodeslot"]=0x212C, -- ℬ
+ },
+ [0x212D]={
+ ["category"]="lu",
+ ["description"]="BLACK-LETTER CAPITAL C",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0043 },
+ ["unicodeslot"]=0x212D, -- â„­
+ },
+ [0x212E]={
+ ["adobename"]="estimated",
+ ["category"]="so",
+ ["description"]="ESTIMATED SYMBOL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x212E, -- â„®
+ },
+ [0x212F]={
+ ["category"]="ll",
+ ["description"]="SCRIPT SMALL E",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0065 },
+ ["unicodeslot"]=0x212F, -- ℯ
+ },
+ [0x2130]={
+ ["category"]="lu",
+ ["description"]="SCRIPT CAPITAL E",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0045 },
+ ["unicodeslot"]=0x2130, -- â„°
+ },
+ [0x2131]={
+ ["category"]="lu",
+ ["description"]="SCRIPT CAPITAL F",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0046 },
+ ["unicodeslot"]=0x2131, -- ℱ
+ },
+ [0x2132]={
+ ["category"]="lu",
+ ["description"]="TURNED CAPITAL F",
+ ["lccode"]=0x214E,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2132, -- Ⅎ
+ },
+ [0x2133]={
+ ["category"]="lu",
+ ["description"]="SCRIPT CAPITAL M",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004D },
+ ["unicodeslot"]=0x2133, -- ℳ
+ },
+ [0x2134]={
+ ["category"]="ll",
+ ["description"]="SCRIPT SMALL O",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006F },
+ ["unicodeslot"]=0x2134, -- â„´
+ },
+ [0x2135]={
+ ["adobename"]="aleph",
+ ["category"]="lo",
+ ["description"]="ALEF SYMBOL",
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["mathname"]="aleph",
+ ["specials"]={ "compat", 0x05D0 },
+ ["unicodeslot"]=0x2135, -- ℵ
+ },
+ [0x2136]={
+ ["category"]="lo",
+ ["description"]="BET SYMBOL",
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x05D1 },
+ ["unicodeslot"]=0x2136, -- ℶ
+ },
+ [0x2137]={
+ ["category"]="lo",
+ ["description"]="GIMEL SYMBOL",
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x05D2 },
+ ["unicodeslot"]=0x2137, -- â„·
+ },
+ [0x2138]={
+ ["category"]="lo",
+ ["description"]="DALET SYMBOL",
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x05D3 },
+ ["unicodeslot"]=0x2138, -- ℸ
+ },
+ [0x2139]={
+ ["category"]="ll",
+ ["description"]="INFORMATION SOURCE",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0069 },
+ ["unicodeslot"]=0x2139, -- ℹ
+ },
+ [0x213A]={
+ ["category"]="so",
+ ["description"]="ROTATED CAPITAL Q",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x213A, -- ℺
+ },
+ [0x213B]={
+ ["category"]="so",
+ ["description"]="FACSIMILE SIGN",
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x0046, 0x0041, 0x0058 },
+ ["unicodeslot"]=0x213B, -- â„»
+ },
+ [0x213C]={
+ ["category"]="ll",
+ ["description"]="DOUBLE-STRUCK SMALL PI",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03C0 },
+ ["unicodeslot"]=0x213C, -- ℼ
+ },
+ [0x213D]={
+ ["category"]="ll",
+ ["description"]="DOUBLE-STRUCK SMALL GAMMA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03B3 },
+ ["unicodeslot"]=0x213D, -- ℽ
+ },
+ [0x213E]={
+ ["category"]="lu",
+ ["description"]="DOUBLE-STRUCK CAPITAL GAMMA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0393 },
+ ["unicodeslot"]=0x213E, -- ℾ
+ },
+ [0x213F]={
+ ["category"]="lu",
+ ["description"]="DOUBLE-STRUCK CAPITAL PI",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03A0 },
+ ["unicodeslot"]=0x213F, -- â„¿
+ },
+ [0x2140]={
+ ["category"]="sm",
+ ["description"]="DOUBLE-STRUCK N-ARY SUMMATION",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x2211 },
+ ["unicodeslot"]=0x2140, -- â…€
+ },
+ [0x2141]={
+ ["category"]="sm",
+ ["description"]="TURNED SANS-SERIF CAPITAL G",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2141, -- â…
+ },
+ [0x2142]={
+ ["category"]="sm",
+ ["description"]="TURNED SANS-SERIF CAPITAL L",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2142, -- â…‚
+ },
+ [0x2143]={
+ ["category"]="sm",
+ ["description"]="REVERSED SANS-SERIF CAPITAL L",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2143, -- â…ƒ
+ },
+ [0x2144]={
+ ["category"]="sm",
+ ["description"]="TURNED SANS-SERIF CAPITAL Y",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2144, -- â…„
+ },
+ [0x2145]={
+ ["category"]="lu",
+ ["description"]="DOUBLE-STRUCK ITALIC CAPITAL D",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0044 },
+ ["unicodeslot"]=0x2145, -- â……
+ },
+ [0x2146]={
+ ["category"]="ll",
+ ["description"]="DOUBLE-STRUCK ITALIC SMALL D",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0064 },
+ ["unicodeslot"]=0x2146, -- â…†
+ },
+ [0x2147]={
+ ["category"]="ll",
+ ["description"]="DOUBLE-STRUCK ITALIC SMALL E",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0065 },
+ ["unicodeslot"]=0x2147, -- â…‡
+ },
+ [0x2148]={
+ ["category"]="ll",
+ ["description"]="DOUBLE-STRUCK ITALIC SMALL I",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0069 },
+ ["unicodeslot"]=0x2148, -- â…ˆ
+ },
+ [0x2149]={
+ ["category"]="ll",
+ ["description"]="DOUBLE-STRUCK ITALIC SMALL J",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006A },
+ ["unicodeslot"]=0x2149, -- â…‰
+ },
+ [0x214A]={
+ ["category"]="so",
+ ["description"]="PROPERTY LINE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x214A, -- â…Š
+ },
+ [0x214B]={
+ ["category"]="sm",
+ ["description"]="TURNED AMPERSAND",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x214B, -- â…‹
+ },
+ [0x214C]={
+ ["category"]="so",
+ ["description"]="PER SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x214C, -- ⅌
+ },
+ [0x214D]={
+ ["category"]="so",
+ ["description"]="AKTIESELSKAB",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x214D, -- â…
+ },
+ [0x214E]={
+ ["category"]="ll",
+ ["description"]="TURNED SMALL F",
+ ["linebreak"]="al",
+ ["uccode"]=0x2132,
+ ["unicodeslot"]=0x214E, -- â…Ž
+ },
+ [0x2153]={
+ ["adobename"]="onethird",
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["contextname"]="onethird",
+ ["description"]="VULGAR FRACTION ONE THIRD",
+ ["linebreak"]="al",
+ ["specials"]={ "fraction", 0x0031, 0x2044, 0x0033 },
+ ["unicodeslot"]=0x2153, -- â…“
+ },
+ [0x2154]={
+ ["adobename"]="twothirds",
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["contextname"]="twothirds",
+ ["description"]="VULGAR FRACTION TWO THIRDS",
+ ["linebreak"]="ai",
+ ["specials"]={ "fraction", 0x0032, 0x2044, 0x0033 },
+ ["unicodeslot"]=0x2154, -- â…”
+ },
+ [0x2155]={
+ ["category"]="no",
+ ["contextname"]="onefifth",
+ ["description"]="VULGAR FRACTION ONE FIFTH",
+ ["linebreak"]="ai",
+ ["specials"]={ "fraction", 0x0031, 0x2044, 0x0035 },
+ ["unicodeslot"]=0x2155, -- â…•
+ },
+ [0x2156]={
+ ["category"]="no",
+ ["contextname"]="twofifths",
+ ["description"]="VULGAR FRACTION TWO FIFTHS",
+ ["linebreak"]="al",
+ ["specials"]={ "fraction", 0x0032, 0x2044, 0x0035 },
+ ["unicodeslot"]=0x2156, -- â…–
+ },
+ [0x2157]={
+ ["category"]="no",
+ ["contextname"]="threefifths",
+ ["description"]="VULGAR FRACTION THREE FIFTHS",
+ ["linebreak"]="al",
+ ["specials"]={ "fraction", 0x0033, 0x2044, 0x0035 },
+ ["unicodeslot"]=0x2157, -- â…—
+ },
+ [0x2158]={
+ ["category"]="no",
+ ["contextname"]="fourfifths",
+ ["description"]="VULGAR FRACTION FOUR FIFTHS",
+ ["linebreak"]="al",
+ ["specials"]={ "fraction", 0x0034, 0x2044, 0x0035 },
+ ["unicodeslot"]=0x2158, -- â…˜
+ },
+ [0x2159]={
+ ["category"]="no",
+ ["contextname"]="onesixth",
+ ["description"]="VULGAR FRACTION ONE SIXTH",
+ ["linebreak"]="al",
+ ["specials"]={ "fraction", 0x0031, 0x2044, 0x0036 },
+ ["unicodeslot"]=0x2159, -- â…™
+ },
+ [0x215A]={
+ ["category"]="no",
+ ["contextname"]="fivesixths",
+ ["description"]="VULGAR FRACTION FIVE SIXTHS",
+ ["linebreak"]="al",
+ ["specials"]={ "fraction", 0x0035, 0x2044, 0x0036 },
+ ["unicodeslot"]=0x215A, -- â…š
+ },
+ [0x215B]={
+ ["adobename"]="oneeighth",
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["contextname"]="oneeighth",
+ ["description"]="VULGAR FRACTION ONE EIGHTH",
+ ["linebreak"]="ai",
+ ["specials"]={ "fraction", 0x0031, 0x2044, 0x0038 },
+ ["unicodeslot"]=0x215B, -- â…›
+ },
+ [0x215C]={
+ ["adobename"]="threeeighths",
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["contextname"]="threeeighths",
+ ["description"]="VULGAR FRACTION THREE EIGHTHS",
+ ["linebreak"]="al",
+ ["specials"]={ "fraction", 0x0033, 0x2044, 0x0038 },
+ ["unicodeslot"]=0x215C, -- ⅜
+ },
+ [0x215D]={
+ ["adobename"]="fiveeighths",
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["contextname"]="fiveeighths",
+ ["description"]="VULGAR FRACTION FIVE EIGHTHS",
+ ["linebreak"]="al",
+ ["specials"]={ "fraction", 0x0035, 0x2044, 0x0038 },
+ ["unicodeslot"]=0x215D, -- â…
+ },
+ [0x215E]={
+ ["adobename"]="seveneighths",
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["contextname"]="seveneighths",
+ ["description"]="VULGAR FRACTION SEVEN EIGHTHS",
+ ["linebreak"]="ai",
+ ["specials"]={ "fraction", 0x0037, 0x2044, 0x0038 },
+ ["unicodeslot"]=0x215E, -- â…ž
+ },
+ [0x215F]={
+ ["category"]="no",
+ ["description"]="FRACTION NUMERATOR ONE",
+ ["linebreak"]="al",
+ ["specials"]={ "fraction", 0x0031, 0x2044 },
+ ["unicodeslot"]=0x215F, -- â…Ÿ
+ },
+ [0x2160]={
+ ["category"]="nl",
+ ["cjkwd"]="a",
+ ["contextname"]="romanI",
+ ["description"]="ROMAN NUMERAL ONE",
+ ["lccode"]=0x2170,
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0049 },
+ ["unicodeslot"]=0x2160, -- â… 
+ },
+ [0x2161]={
+ ["category"]="nl",
+ ["cjkwd"]="a",
+ ["contextname"]="romanII",
+ ["description"]="ROMAN NUMERAL TWO",
+ ["lccode"]=0x2171,
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0049, 0x0049 },
+ ["unicodeslot"]=0x2161, -- â…¡
+ },
+ [0x2162]={
+ ["category"]="nl",
+ ["cjkwd"]="a",
+ ["contextname"]="romanIII",
+ ["description"]="ROMAN NUMERAL THREE",
+ ["lccode"]=0x2172,
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0049, 0x0049, 0x0049 },
+ ["unicodeslot"]=0x2162, -- â…¢
+ },
+ [0x2163]={
+ ["category"]="nl",
+ ["cjkwd"]="a",
+ ["contextname"]="romanIV",
+ ["description"]="ROMAN NUMERAL FOUR",
+ ["lccode"]=0x2173,
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0049, 0x0056 },
+ ["unicodeslot"]=0x2163, -- â…£
+ },
+ [0x2164]={
+ ["category"]="nl",
+ ["cjkwd"]="a",
+ ["contextname"]="romanV",
+ ["description"]="ROMAN NUMERAL FIVE",
+ ["lccode"]=0x2174,
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0056 },
+ ["unicodeslot"]=0x2164, -- â…¤
+ },
+ [0x2165]={
+ ["category"]="nl",
+ ["cjkwd"]="a",
+ ["contextname"]="romanVI",
+ ["description"]="ROMAN NUMERAL SIX",
+ ["lccode"]=0x2175,
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0056, 0x0049 },
+ ["unicodeslot"]=0x2165, -- â…¥
+ },
+ [0x2166]={
+ ["category"]="nl",
+ ["cjkwd"]="a",
+ ["contextname"]="romanVII",
+ ["description"]="ROMAN NUMERAL SEVEN",
+ ["lccode"]=0x2176,
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0056, 0x0049, 0x0049 },
+ ["unicodeslot"]=0x2166, -- â…¦
+ },
+ [0x2167]={
+ ["category"]="nl",
+ ["cjkwd"]="a",
+ ["contextname"]="romanVIII",
+ ["description"]="ROMAN NUMERAL EIGHT",
+ ["lccode"]=0x2177,
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0056, 0x0049, 0x0049, 0x0049 },
+ ["unicodeslot"]=0x2167, -- â…§
+ },
+ [0x2168]={
+ ["category"]="nl",
+ ["cjkwd"]="a",
+ ["contextname"]="romanIX",
+ ["description"]="ROMAN NUMERAL NINE",
+ ["lccode"]=0x2178,
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0049, 0x0058 },
+ ["unicodeslot"]=0x2168, -- â…¨
+ },
+ [0x2169]={
+ ["category"]="nl",
+ ["cjkwd"]="a",
+ ["contextname"]="romanX",
+ ["description"]="ROMAN NUMERAL TEN",
+ ["lccode"]=0x2179,
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0058 },
+ ["unicodeslot"]=0x2169, -- â…©
+ },
+ [0x216A]={
+ ["category"]="nl",
+ ["cjkwd"]="a",
+ ["contextname"]="romanXI",
+ ["description"]="ROMAN NUMERAL ELEVEN",
+ ["lccode"]=0x217A,
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0058, 0x0049 },
+ ["unicodeslot"]=0x216A, -- â…ª
+ },
+ [0x216B]={
+ ["category"]="nl",
+ ["cjkwd"]="a",
+ ["contextname"]="romanXII",
+ ["description"]="ROMAN NUMERAL TWELVE",
+ ["lccode"]=0x217B,
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0058, 0x0049, 0x0049 },
+ ["unicodeslot"]=0x216B, -- â…«
+ },
+ [0x216C]={
+ ["category"]="nl",
+ ["contextname"]="romanL",
+ ["description"]="ROMAN NUMERAL FIFTY",
+ ["lccode"]=0x217C,
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x004C },
+ ["unicodeslot"]=0x216C, -- â…¬
+ },
+ [0x216D]={
+ ["category"]="nl",
+ ["contextname"]="romanC",
+ ["description"]="ROMAN NUMERAL ONE HUNDRED",
+ ["lccode"]=0x217D,
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x0043 },
+ ["unicodeslot"]=0x216D, -- â…­
+ },
+ [0x216E]={
+ ["category"]="nl",
+ ["contextname"]="romanD",
+ ["description"]="ROMAN NUMERAL FIVE HUNDRED",
+ ["lccode"]=0x217E,
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x0044 },
+ ["unicodeslot"]=0x216E, -- â…®
+ },
+ [0x216F]={
+ ["category"]="nl",
+ ["contextname"]="romanM",
+ ["description"]="ROMAN NUMERAL ONE THOUSAND",
+ ["lccode"]=0x217F,
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x004D },
+ ["unicodeslot"]=0x216F, -- â…¯
+ },
+ [0x2170]={
+ ["category"]="nl",
+ ["cjkwd"]="a",
+ ["contextname"]="romani",
+ ["description"]="SMALL ROMAN NUMERAL ONE",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0069 },
+ ["uccode"]=0x2160,
+ ["unicodeslot"]=0x2170, -- â…°
+ },
+ [0x2171]={
+ ["category"]="nl",
+ ["cjkwd"]="a",
+ ["contextname"]="romanii",
+ ["description"]="SMALL ROMAN NUMERAL TWO",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0069, 0x0069 },
+ ["uccode"]=0x2161,
+ ["unicodeslot"]=0x2171, -- â…±
+ },
+ [0x2172]={
+ ["category"]="nl",
+ ["cjkwd"]="a",
+ ["contextname"]="romaniii",
+ ["description"]="SMALL ROMAN NUMERAL THREE",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0069, 0x0069, 0x0069 },
+ ["uccode"]=0x2162,
+ ["unicodeslot"]=0x2172, -- â…²
+ },
+ [0x2173]={
+ ["category"]="nl",
+ ["cjkwd"]="a",
+ ["contextname"]="romaniv",
+ ["description"]="SMALL ROMAN NUMERAL FOUR",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0069, 0x0076 },
+ ["uccode"]=0x2163,
+ ["unicodeslot"]=0x2173, -- â…³
+ },
+ [0x2174]={
+ ["category"]="nl",
+ ["cjkwd"]="a",
+ ["contextname"]="romanv",
+ ["description"]="SMALL ROMAN NUMERAL FIVE",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0076 },
+ ["uccode"]=0x2164,
+ ["unicodeslot"]=0x2174, -- â…´
+ },
+ [0x2175]={
+ ["category"]="nl",
+ ["cjkwd"]="a",
+ ["contextname"]="romanvi",
+ ["description"]="SMALL ROMAN NUMERAL SIX",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0076, 0x0069 },
+ ["uccode"]=0x2165,
+ ["unicodeslot"]=0x2175, -- â…µ
+ },
+ [0x2176]={
+ ["category"]="nl",
+ ["cjkwd"]="a",
+ ["contextname"]="romanvii",
+ ["description"]="SMALL ROMAN NUMERAL SEVEN",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0076, 0x0069, 0x0069 },
+ ["uccode"]=0x2166,
+ ["unicodeslot"]=0x2176, -- â…¶
+ },
+ [0x2177]={
+ ["category"]="nl",
+ ["cjkwd"]="a",
+ ["contextname"]="romanviii",
+ ["description"]="SMALL ROMAN NUMERAL EIGHT",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0076, 0x0069, 0x0069, 0x0069 },
+ ["uccode"]=0x2167,
+ ["unicodeslot"]=0x2177, -- â…·
+ },
+ [0x2178]={
+ ["category"]="nl",
+ ["cjkwd"]="a",
+ ["contextname"]="romanix",
+ ["description"]="SMALL ROMAN NUMERAL NINE",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0069, 0x0078 },
+ ["uccode"]=0x2168,
+ ["unicodeslot"]=0x2178, -- â…¸
+ },
+ [0x2179]={
+ ["category"]="nl",
+ ["cjkwd"]="a",
+ ["contextname"]="romanx",
+ ["description"]="SMALL ROMAN NUMERAL TEN",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0078 },
+ ["uccode"]=0x2169,
+ ["unicodeslot"]=0x2179, -- â…¹
+ },
+ [0x217A]={
+ ["category"]="nl",
+ ["contextname"]="romanxi",
+ ["description"]="SMALL ROMAN NUMERAL ELEVEN",
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x0078, 0x0069 },
+ ["uccode"]=0x216A,
+ ["unicodeslot"]=0x217A, -- â…º
+ },
+ [0x217B]={
+ ["category"]="nl",
+ ["contextname"]="romanxii",
+ ["description"]="SMALL ROMAN NUMERAL TWELVE",
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x0078, 0x0069, 0x0069 },
+ ["uccode"]=0x216B,
+ ["unicodeslot"]=0x217B, -- â…»
+ },
+ [0x217C]={
+ ["category"]="nl",
+ ["contextname"]="romanl",
+ ["description"]="SMALL ROMAN NUMERAL FIFTY",
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x006C },
+ ["uccode"]=0x216C,
+ ["unicodeslot"]=0x217C, -- â…¼
+ },
+ [0x217D]={
+ ["category"]="nl",
+ ["contextname"]="romanc",
+ ["description"]="SMALL ROMAN NUMERAL ONE HUNDRED",
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x0063 },
+ ["uccode"]=0x216D,
+ ["unicodeslot"]=0x217D, -- â…½
+ },
+ [0x217E]={
+ ["category"]="nl",
+ ["contextname"]="romand",
+ ["description"]="SMALL ROMAN NUMERAL FIVE HUNDRED",
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x0064 },
+ ["uccode"]=0x216E,
+ ["unicodeslot"]=0x217E, -- â…¾
+ },
+ [0x217F]={
+ ["category"]="nl",
+ ["contextname"]="romanm",
+ ["description"]="SMALL ROMAN NUMERAL ONE THOUSAND",
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x006D },
+ ["uccode"]=0x216F,
+ ["unicodeslot"]=0x217F, -- â…¿
+ },
+ [0x2180]={
+ ["category"]="nl",
+ ["description"]="ROMAN NUMERAL ONE THOUSAND C D",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2180, -- ↀ
+ },
+ [0x2181]={
+ ["category"]="nl",
+ ["description"]="ROMAN NUMERAL FIVE THOUSAND",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2181, -- â†
+ },
+ [0x2182]={
+ ["category"]="nl",
+ ["description"]="ROMAN NUMERAL TEN THOUSAND",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2182, -- ↂ
+ },
+ [0x2183]={
+ ["category"]="lu",
+ ["description"]="ROMAN NUMERAL REVERSED ONE HUNDRED",
+ ["lccode"]=0x2184,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2183, -- Ↄ
+ },
+ [0x2184]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER REVERSED C",
+ ["linebreak"]="al",
+ ["uccode"]=0x2183,
+ ["unicodeslot"]=0x2184, -- ↄ
+ },
+ [0x2190]={
+ ["adobename"]="arrowleft",
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["description"]="LEFTWARDS ARROW",
+ ["linebreak"]="ai",
+ ["mathclass"]="relation",
+ ["mathname"]="leftarrow",
+ ["unicodeslot"]=0x2190, -- â†
+ },
+ [0x2191]={
+ ["adobename"]="arrowup",
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["description"]="UPWARDS ARROW",
+ ["linebreak"]="ai",
+ ["mathclass"]="relation",
+ ["mathname"]="uparraow",
+ ["unicodeslot"]=0x2191, -- ↑
+ },
+ [0x2192]={
+ ["adobename"]="arrowright",
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["description"]="RIGHTWARDS ARROW",
+ ["linebreak"]="ai",
+ ["mathclass"]="relation",
+ ["mathname"]="rightarrow",
+ ["unicodeslot"]=0x2192, -- →
+ },
+ [0x2193]={
+ ["adobename"]="arrowdown",
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["description"]="DOWNWARDS ARROW",
+ ["linebreak"]="ai",
+ ["mathclass"]="relation",
+ ["mathname"]="downarrow",
+ ["unicodeslot"]=0x2193, -- ↓
+ },
+ [0x2194]={
+ ["adobename"]="arrowboth",
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["description"]="LEFT RIGHT ARROW",
+ ["linebreak"]="ai",
+ ["mathclass"]="relation",
+ ["mathname"]="leftrightarrow",
+ ["unicodeslot"]=0x2194, -- ↔
+ },
+ [0x2195]={
+ ["adobename"]="arrowupdn",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="UP DOWN ARROW",
+ ["linebreak"]="ai",
+ ["mathclass"]="relation",
+ ["mathname"]="updownarrow",
+ ["unicodeslot"]=0x2195, -- ↕
+ },
+ [0x2196]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="NORTH WEST ARROW",
+ ["linebreak"]="ai",
+ ["mathclass"]="relation",
+ ["mathname"]="nwarrow",
+ ["unicodeslot"]=0x2196, -- ↖
+ },
+ [0x2197]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="NORTH EAST ARROW",
+ ["linebreak"]="ai",
+ ["mathclass"]="relation",
+ ["mathname"]="nearrow",
+ ["unicodeslot"]=0x2197, -- ↗
+ },
+ [0x2198]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="SOUTH EAST ARROW",
+ ["linebreak"]="ai",
+ ["mathclass"]="relation",
+ ["mathname"]="searrow",
+ ["unicodeslot"]=0x2198, -- ↘
+ },
+ [0x2199]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="SOUTH WEST ARROW",
+ ["linebreak"]="ai",
+ ["mathclass"]="relation",
+ ["mathname"]="swarrow",
+ ["unicodeslot"]=0x2199, -- ↙
+ },
+ [0x219A]={
+ ["category"]="sm",
+ ["description"]="LEFTWARDS ARROW WITH STROKE",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x2190, 0x0338 },
+ ["unicodeslot"]=0x219A, -- ↚
+ },
+ [0x219B]={
+ ["category"]="sm",
+ ["description"]="RIGHTWARDS ARROW WITH STROKE",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x2192, 0x0338 },
+ ["unicodeslot"]=0x219B, -- ↛
+ },
+ [0x219C]={
+ ["category"]="so",
+ ["description"]="LEFTWARDS WAVE ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x219C, -- ↜
+ },
+ [0x219D]={
+ ["category"]="so",
+ ["description"]="RIGHTWARDS WAVE ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x219D, -- â†
+ },
+ [0x219E]={
+ ["category"]="so",
+ ["description"]="LEFTWARDS TWO HEADED ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x219E, -- ↞
+ },
+ [0x219F]={
+ ["category"]="so",
+ ["description"]="UPWARDS TWO HEADED ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x219F, -- ↟
+ },
+ [0x21A0]={
+ ["category"]="sm",
+ ["description"]="RIGHTWARDS TWO HEADED ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21A0, -- ↠
+ },
+ [0x21A1]={
+ ["category"]="so",
+ ["description"]="DOWNWARDS TWO HEADED ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21A1, -- ↡
+ },
+ [0x21A2]={
+ ["category"]="so",
+ ["description"]="LEFTWARDS ARROW WITH TAIL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21A2, -- ↢
+ },
+ [0x21A3]={
+ ["category"]="sm",
+ ["description"]="RIGHTWARDS ARROW WITH TAIL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21A3, -- ↣
+ },
+ [0x21A4]={
+ ["category"]="so",
+ ["description"]="LEFTWARDS ARROW FROM BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21A4, -- ↤
+ },
+ [0x21A5]={
+ ["category"]="so",
+ ["description"]="UPWARDS ARROW FROM BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21A5, -- ↥
+ },
+ [0x21A6]={
+ ["category"]="sm",
+ ["description"]="RIGHTWARDS ARROW FROM BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21A6, -- ↦
+ },
+ [0x21A7]={
+ ["category"]="so",
+ ["description"]="DOWNWARDS ARROW FROM BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21A7, -- ↧
+ },
+ [0x21A8]={
+ ["adobename"]="arrowupdnbse",
+ ["category"]="so",
+ ["description"]="UP DOWN ARROW WITH BASE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21A8, -- ↨
+ },
+ [0x21A9]={
+ ["category"]="so",
+ ["description"]="LEFTWARDS ARROW WITH HOOK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21A9, -- ↩
+ },
+ [0x21AA]={
+ ["category"]="so",
+ ["description"]="RIGHTWARDS ARROW WITH HOOK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21AA, -- ↪
+ },
+ [0x21AB]={
+ ["category"]="so",
+ ["description"]="LEFTWARDS ARROW WITH LOOP",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21AB, -- ↫
+ },
+ [0x21AC]={
+ ["category"]="so",
+ ["description"]="RIGHTWARDS ARROW WITH LOOP",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21AC, -- ↬
+ },
+ [0x21AD]={
+ ["category"]="so",
+ ["description"]="LEFT RIGHT WAVE ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21AD, -- ↭
+ },
+ [0x21AE]={
+ ["category"]="sm",
+ ["description"]="LEFT RIGHT ARROW WITH STROKE",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x2194, 0x0338 },
+ ["unicodeslot"]=0x21AE, -- ↮
+ },
+ [0x21AF]={
+ ["category"]="so",
+ ["description"]="DOWNWARDS ZIGZAG ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21AF, -- ↯
+ },
+ [0x21B0]={
+ ["category"]="so",
+ ["description"]="UPWARDS ARROW WITH TIP LEFTWARDS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21B0, -- ↰
+ },
+ [0x21B1]={
+ ["category"]="so",
+ ["description"]="UPWARDS ARROW WITH TIP RIGHTWARDS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21B1, -- ↱
+ },
+ [0x21B2]={
+ ["category"]="so",
+ ["description"]="DOWNWARDS ARROW WITH TIP LEFTWARDS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21B2, -- ↲
+ },
+ [0x21B3]={
+ ["category"]="so",
+ ["description"]="DOWNWARDS ARROW WITH TIP RIGHTWARDS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21B3, -- ↳
+ },
+ [0x21B4]={
+ ["category"]="so",
+ ["description"]="RIGHTWARDS ARROW WITH CORNER DOWNWARDS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21B4, -- ↴
+ },
+ [0x21B5]={
+ ["adobename"]="carriagereturn",
+ ["category"]="so",
+ ["description"]="DOWNWARDS ARROW WITH CORNER LEFTWARDS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21B5, -- ↵
+ },
+ [0x21B6]={
+ ["category"]="so",
+ ["description"]="ANTICLOCKWISE TOP SEMICIRCLE ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21B6, -- ↶
+ },
+ [0x21B7]={
+ ["category"]="so",
+ ["description"]="CLOCKWISE TOP SEMICIRCLE ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21B7, -- ↷
+ },
+ [0x21B8]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="NORTH WEST ARROW TO LONG BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21B8, -- ↸
+ },
+ [0x21B9]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21B9, -- ↹
+ },
+ [0x21BA]={
+ ["category"]="so",
+ ["description"]="ANTICLOCKWISE OPEN CIRCLE ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21BA, -- ↺
+ },
+ [0x21BB]={
+ ["category"]="so",
+ ["description"]="CLOCKWISE OPEN CIRCLE ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21BB, -- ↻
+ },
+ [0x21BC]={
+ ["category"]="so",
+ ["description"]="LEFTWARDS HARPOON WITH BARB UPWARDS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21BC, -- ↼
+ },
+ [0x21BD]={
+ ["category"]="so",
+ ["description"]="LEFTWARDS HARPOON WITH BARB DOWNWARDS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21BD, -- ↽
+ },
+ [0x21BE]={
+ ["category"]="so",
+ ["description"]="UPWARDS HARPOON WITH BARB RIGHTWARDS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21BE, -- ↾
+ },
+ [0x21BF]={
+ ["category"]="so",
+ ["description"]="UPWARDS HARPOON WITH BARB LEFTWARDS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21BF, -- ↿
+ },
+ [0x21C0]={
+ ["category"]="so",
+ ["description"]="RIGHTWARDS HARPOON WITH BARB UPWARDS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21C0, -- ⇀
+ },
+ [0x21C1]={
+ ["category"]="so",
+ ["description"]="RIGHTWARDS HARPOON WITH BARB DOWNWARDS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21C1, -- â‡
+ },
+ [0x21C2]={
+ ["category"]="so",
+ ["description"]="DOWNWARDS HARPOON WITH BARB RIGHTWARDS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21C2, -- ⇂
+ },
+ [0x21C3]={
+ ["category"]="so",
+ ["description"]="DOWNWARDS HARPOON WITH BARB LEFTWARDS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21C3, -- ⇃
+ },
+ [0x21C4]={
+ ["category"]="so",
+ ["description"]="RIGHTWARDS ARROW OVER LEFTWARDS ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21C4, -- ⇄
+ },
+ [0x21C5]={
+ ["category"]="so",
+ ["description"]="UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21C5, -- ⇅
+ },
+ [0x21C6]={
+ ["category"]="so",
+ ["description"]="LEFTWARDS ARROW OVER RIGHTWARDS ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21C6, -- ⇆
+ },
+ [0x21C7]={
+ ["category"]="so",
+ ["description"]="LEFTWARDS PAIRED ARROWS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21C7, -- ⇇
+ },
+ [0x21C8]={
+ ["category"]="so",
+ ["description"]="UPWARDS PAIRED ARROWS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21C8, -- ⇈
+ },
+ [0x21C9]={
+ ["category"]="so",
+ ["description"]="RIGHTWARDS PAIRED ARROWS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21C9, -- ⇉
+ },
+ [0x21CA]={
+ ["category"]="so",
+ ["description"]="DOWNWARDS PAIRED ARROWS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21CA, -- ⇊
+ },
+ [0x21CB]={
+ ["category"]="so",
+ ["description"]="LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21CB, -- ⇋
+ },
+ [0x21CC]={
+ ["category"]="so",
+ ["description"]="RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21CC, -- ⇌
+ },
+ [0x21CD]={
+ ["category"]="so",
+ ["description"]="LEFTWARDS DOUBLE ARROW WITH STROKE",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x21D0, 0x0338 },
+ ["unicodeslot"]=0x21CD, -- â‡
+ },
+ [0x21CE]={
+ ["category"]="sm",
+ ["description"]="LEFT RIGHT DOUBLE ARROW WITH STROKE",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x21D4, 0x0338 },
+ ["unicodeslot"]=0x21CE, -- ⇎
+ },
+ [0x21CF]={
+ ["category"]="sm",
+ ["description"]="RIGHTWARDS DOUBLE ARROW WITH STROKE",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x21D2, 0x0338 },
+ ["unicodeslot"]=0x21CF, -- â‡
+ },
+ [0x21D0]={
+ ["adobename"]="arrowdblleft",
+ ["category"]="so",
+ ["description"]="LEFTWARDS DOUBLE ARROW",
+ ["linebreak"]="al",
+ ["mathclass"]="relation",
+ ["mathname"]="Leftarrow",
+ ["unicodeslot"]=0x21D0, -- â‡
+ },
+ [0x21D1]={
+ ["adobename"]="arrowdblup",
+ ["category"]="so",
+ ["description"]="UPWARDS DOUBLE ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21D1, -- ⇑
+ },
+ [0x21D2]={
+ ["adobename"]="arrowdblright",
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["description"]="RIGHTWARDS DOUBLE ARROW",
+ ["linebreak"]="ai",
+ ["mathclass"]="relation",
+ ["mathname"]="Rightarrow",
+ ["unicodeslot"]=0x21D2, -- ⇒
+ },
+ [0x21D3]={
+ ["adobename"]="arrowdbldown",
+ ["category"]="so",
+ ["description"]="DOWNWARDS DOUBLE ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21D3, -- ⇓
+ },
+ [0x21D4]={
+ ["adobename"]="arrowdblboth",
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["description"]="LEFT RIGHT DOUBLE ARROW",
+ ["linebreak"]="ai",
+ ["mathclass"]="relation",
+ ["mathname"]="Leftrightarrow",
+ ["unicodeslot"]=0x21D4, -- ⇔
+ },
+ [0x21D5]={
+ ["category"]="so",
+ ["description"]="UP DOWN DOUBLE ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21D5, -- ⇕
+ },
+ [0x21D6]={
+ ["category"]="so",
+ ["description"]="NORTH WEST DOUBLE ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21D6, -- ⇖
+ },
+ [0x21D7]={
+ ["category"]="so",
+ ["description"]="NORTH EAST DOUBLE ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21D7, -- ⇗
+ },
+ [0x21D8]={
+ ["category"]="so",
+ ["description"]="SOUTH EAST DOUBLE ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21D8, -- ⇘
+ },
+ [0x21D9]={
+ ["category"]="so",
+ ["description"]="SOUTH WEST DOUBLE ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21D9, -- ⇙
+ },
+ [0x21DA]={
+ ["category"]="so",
+ ["description"]="LEFTWARDS TRIPLE ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21DA, -- ⇚
+ },
+ [0x21DB]={
+ ["category"]="so",
+ ["description"]="RIGHTWARDS TRIPLE ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21DB, -- ⇛
+ },
+ [0x21DC]={
+ ["category"]="so",
+ ["description"]="LEFTWARDS SQUIGGLE ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21DC, -- ⇜
+ },
+ [0x21DD]={
+ ["category"]="so",
+ ["description"]="RIGHTWARDS SQUIGGLE ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21DD, -- â‡
+ },
+ [0x21DE]={
+ ["category"]="so",
+ ["description"]="UPWARDS ARROW WITH DOUBLE STROKE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21DE, -- ⇞
+ },
+ [0x21DF]={
+ ["category"]="so",
+ ["description"]="DOWNWARDS ARROW WITH DOUBLE STROKE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21DF, -- ⇟
+ },
+ [0x21E0]={
+ ["category"]="so",
+ ["description"]="LEFTWARDS DASHED ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21E0, -- ⇠
+ },
+ [0x21E1]={
+ ["category"]="so",
+ ["description"]="UPWARDS DASHED ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21E1, -- ⇡
+ },
+ [0x21E2]={
+ ["category"]="so",
+ ["description"]="RIGHTWARDS DASHED ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21E2, -- ⇢
+ },
+ [0x21E3]={
+ ["category"]="so",
+ ["description"]="DOWNWARDS DASHED ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21E3, -- ⇣
+ },
+ [0x21E4]={
+ ["category"]="so",
+ ["description"]="LEFTWARDS ARROW TO BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21E4, -- ⇤
+ },
+ [0x21E5]={
+ ["category"]="so",
+ ["description"]="RIGHTWARDS ARROW TO BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21E5, -- ⇥
+ },
+ [0x21E6]={
+ ["category"]="so",
+ ["description"]="LEFTWARDS WHITE ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21E6, -- ⇦
+ },
+ [0x21E7]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="UPWARDS WHITE ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21E7, -- ⇧
+ },
+ [0x21E8]={
+ ["category"]="so",
+ ["description"]="RIGHTWARDS WHITE ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21E8, -- ⇨
+ },
+ [0x21E9]={
+ ["category"]="so",
+ ["description"]="DOWNWARDS WHITE ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21E9, -- ⇩
+ },
+ [0x21EA]={
+ ["category"]="so",
+ ["description"]="UPWARDS WHITE ARROW FROM BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21EA, -- ⇪
+ },
+ [0x21EB]={
+ ["category"]="so",
+ ["description"]="UPWARDS WHITE ARROW ON PEDESTAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21EB, -- ⇫
+ },
+ [0x21EC]={
+ ["category"]="so",
+ ["description"]="UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21EC, -- ⇬
+ },
+ [0x21ED]={
+ ["category"]="so",
+ ["description"]="UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21ED, -- ⇭
+ },
+ [0x21EE]={
+ ["category"]="so",
+ ["description"]="UPWARDS WHITE DOUBLE ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21EE, -- ⇮
+ },
+ [0x21EF]={
+ ["category"]="so",
+ ["description"]="UPWARDS WHITE DOUBLE ARROW ON PEDESTAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21EF, -- ⇯
+ },
+ [0x21F0]={
+ ["category"]="so",
+ ["description"]="RIGHTWARDS WHITE ARROW FROM WALL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21F0, -- ⇰
+ },
+ [0x21F1]={
+ ["category"]="so",
+ ["description"]="NORTH WEST ARROW TO CORNER",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21F1, -- ⇱
+ },
+ [0x21F2]={
+ ["category"]="so",
+ ["description"]="SOUTH EAST ARROW TO CORNER",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21F2, -- ⇲
+ },
+ [0x21F3]={
+ ["category"]="so",
+ ["description"]="UP DOWN WHITE ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21F3, -- ⇳
+ },
+ [0x21F4]={
+ ["category"]="sm",
+ ["description"]="RIGHT ARROW WITH SMALL CIRCLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21F4, -- ⇴
+ },
+ [0x21F5]={
+ ["category"]="sm",
+ ["description"]="DOWNWARDS ARROW LEFTWARDS OF UPWARDS ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21F5, -- ⇵
+ },
+ [0x21F6]={
+ ["category"]="sm",
+ ["description"]="THREE RIGHTWARDS ARROWS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21F6, -- ⇶
+ },
+ [0x21F7]={
+ ["category"]="sm",
+ ["description"]="LEFTWARDS ARROW WITH VERTICAL STROKE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21F7, -- ⇷
+ },
+ [0x21F8]={
+ ["category"]="sm",
+ ["description"]="RIGHTWARDS ARROW WITH VERTICAL STROKE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21F8, -- ⇸
+ },
+ [0x21F9]={
+ ["category"]="sm",
+ ["description"]="LEFT RIGHT ARROW WITH VERTICAL STROKE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21F9, -- ⇹
+ },
+ [0x21FA]={
+ ["category"]="sm",
+ ["description"]="LEFTWARDS ARROW WITH DOUBLE VERTICAL STROKE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21FA, -- ⇺
+ },
+ [0x21FB]={
+ ["category"]="sm",
+ ["description"]="RIGHTWARDS ARROW WITH DOUBLE VERTICAL STROKE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21FB, -- ⇻
+ },
+ [0x21FC]={
+ ["category"]="sm",
+ ["description"]="LEFT RIGHT ARROW WITH DOUBLE VERTICAL STROKE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21FC, -- ⇼
+ },
+ [0x21FD]={
+ ["category"]="sm",
+ ["description"]="LEFTWARDS OPEN-HEADED ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21FD, -- ⇽
+ },
+ [0x21FE]={
+ ["category"]="sm",
+ ["description"]="RIGHTWARDS OPEN-HEADED ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21FE, -- ⇾
+ },
+ [0x21FF]={
+ ["category"]="sm",
+ ["description"]="LEFT RIGHT OPEN-HEADED ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x21FF, -- ⇿
+ },
+ [0x2200]={
+ ["adobename"]="universal",
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["description"]="FOR ALL",
+ ["mathclass"]="ord",
+ ["mathname"]="forall",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2200, -- ∀
+ },
+ [0x2201]={
+ ["category"]="sm",
+ ["description"]="COMPLEMENT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2201, -- âˆ
+ },
+ [0x2202]={
+ ["adobename"]="partialdiff",
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["description"]="PARTIAL DIFFERENTIAL",
+ ["linebreak"]="ai",
+ ["mathclass"]="variable",
+ ["mathname"]="partial",
+ ["unicodeslot"]=0x2202, -- ∂
+ },
+ [0x2203]={
+ ["adobename"]="existential",
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["description"]="THERE EXISTS",
+ ["linebreak"]="ai",
+ ["mathclass"]="ord",
+ ["mathname"]="exists",
+ ["unicodeslot"]=0x2203, -- ∃
+ },
+ [0x2204]={
+ ["category"]="sm",
+ ["description"]="THERE DOES NOT EXIST",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x2203, 0x0338 },
+ ["unicodeslot"]=0x2204, -- ∄
+ },
+ [0x2205]={
+ ["adobename"]="emptyset",
+ ["category"]="sm",
+ ["description"]="EMPTY SET",
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["mathname"]="emptyset",
+ ["unicodeslot"]=0x2205, -- ∅
+ },
+ [0x2206]={
+ ["adobename"]="Delta",
+ ["category"]="sm",
+ ["description"]="INCREMENT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2206, -- ∆
+ },
+ [0x2207]={
+ ["adobename"]="gradient",
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["description"]="NABLA",
+ ["mathclass"]="variable",
+ ["mathname"]="nabla",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2207, -- ∇
+ },
+ [0x2208]={
+ ["adobename"]="element",
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["description"]="ELEMENT OF",
+ ["linebreak"]="ai",
+ ["mathclass"]="relation",
+ ["mathname"]=false, -- "in"
+ ["unicodeslot"]=0x2208, -- ∈
+ },
+ [0x2209]={
+ ["adobename"]="notelement",
+ ["category"]="sm",
+ ["description"]="NOT AN ELEMENT OF",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x2208, 0x0338 },
+ ["mathclass"]="relation",
+ ["mathname"]="ni",
+ ["unicodeslot"]=0x2209, -- ∉
+ },
+ [0x220A]={
+ ["category"]="sm",
+ ["description"]="SMALL ELEMENT OF",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x220A, -- ∊
+ },
+ [0x220B]={
+ ["adobename"]="suchthat",
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["description"]="CONTAINS AS MEMBER",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x220B, -- ∋
+ },
+ [0x220C]={
+ ["category"]="sm",
+ ["description"]="DOES NOT CONTAIN AS MEMBER",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x220B, 0x0338 },
+ ["unicodeslot"]=0x220C, -- ∌
+ },
+ [0x220D]={
+ ["category"]="sm",
+ ["description"]="SMALL CONTAINS AS MEMBER",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x220D, -- âˆ
+ },
+ [0x220E]={
+ ["category"]="sm",
+ ["description"]="END OF PROOF",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x220E, -- ∎
+ },
+ [0x220F]={
+ ["adobename"]="product",
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["description"]="N-ARY PRODUCT",
+ ["linebreak"]="ai",
+ ["mathclass"]="limop",
+ ["mathname"]="prod",
+ ["unicodeslot"]=0x220F, -- âˆ
+ },
+ [0x2210]={
+ ["category"]="sm",
+ ["description"]="N-ARY COPRODUCT",
+ ["linebreak"]="al",
+ ["mathclass"]="relation",
+ ["mathname"]="coprod",
+ ["unicodeslot"]=0x2210, -- âˆ
+ },
+ [0x2211]={
+ ["adobename"]="summation",
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["description"]="N-ARY SUMMATION",
+ ["linebreak"]="ai",
+ ["mathclass"]="limop",
+ ["mathname"]="sum",
+ ["unicodeslot"]=0x2211, -- ∑
+ },
+ [0x2212]={
+ ["adobename"]="minus",
+ ["category"]="sm",
+ ["description"]="MINUS SIGN",
+ ["linebreak"]="pr",
+ ["unicodeslot"]=0x2212, -- −
+ ["mathclass"]="binary",
+ },
+ [0x2213]={
+ ["category"]="sm",
+ ["description"]="MINUS-OR-PLUS SIGN",
+ ["linebreak"]="pr",
+ ["mathclass"]="binary",
+ ["mathname"]="mp",
+ ["unicodeslot"]=0x2213, -- ∓
+ },
+ [0x2214]={
+ ["category"]="sm",
+ ["description"]="DOT PLUS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2214, -- ∔
+ },
+ [0x2215]={
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["description"]="DIVISION SLASH",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2215, -- ∕
+ },
+ [0x2216]={
+ ["category"]="sm",
+ ["description"]="SET MINUS",
+ ["linebreak"]="al",
+ ["mathclass"]="binary",
+ ["mathname"]="setminus",
+ ["unicodeslot"]=0x2216, -- ∖
+ },
+ [0x2217]={
+ ["adobename"]="asteriskmath",
+ ["category"]="sm",
+ ["description"]="ASTERISK OPERATOR",
+ ["linebreak"]="al",
+ ["mathclass"]="binary",
+ ["mathname"]="ast",
+ ["unicodeslot"]=0x2217, -- ∗
+ },
+ [0x2218]={
+ ["category"]="sm",
+ ["description"]="RING OPERATOR",
+ ["linebreak"]="al",
+ ["mathclass"]="binary",
+ ["mathname"]="circ",
+ ["unicodeslot"]=0x2218, -- ∘
+ },
+ [0x2219]={
+ ["category"]="sm",
+ ["description"]="BULLET OPERATOR",
+ ["linebreak"]="al",
+ ["mathclass"]="binary",
+ ["mathname"]="bullet",
+ ["unicodeslot"]=0x2219, -- ∙
+ },
+ [0x221A]={
+ ["adobename"]="radical",
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["description"]="SQUARE ROOT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x221A, -- √
+ },
+ [0x221B]={
+ ["category"]="sm",
+ ["description"]="CUBE ROOT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x221B, -- ∛
+ },
+ [0x221C]={
+ ["category"]="sm",
+ ["description"]="FOURTH ROOT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x221C, -- ∜
+ },
+ [0x221D]={
+ ["adobename"]="proportional",
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["description"]="PROPORTIONAL TO",
+ ["mathclass"]="relation",
+ ["mathname"]="propto",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x221D, -- âˆ
+ },
+ [0x221E]={
+ ["adobename"]="infinity",
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["description"]="INFINITY",
+ ["linebreak"]="ai",
+ ["mathclass"]="variable",
+ ["mathname"]="infty",
+ ["unicodeslot"]=0x221E, -- ∞
+ },
+ [0x221F]={
+ ["adobename"]="orthogonal",
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["description"]="RIGHT ANGLE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x221F, -- ∟
+ },
+ [0x2220]={
+ ["adobename"]="angle",
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["description"]="ANGLE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2220, -- ∠
+ },
+ [0x2221]={
+ ["category"]="sm",
+ ["description"]="MEASURED ANGLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2221, -- ∡
+ },
+ [0x2222]={
+ ["category"]="sm",
+ ["description"]="SPHERICAL ANGLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2222, -- ∢
+ },
+ [0x2223]={
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["description"]="DIVIDES",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2223, -- ∣
+ },
+ [0x2224]={
+ ["category"]="sm",
+ ["description"]="DOES NOT DIVIDE",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x2223, 0x0338 },
+ ["unicodeslot"]=0x2224, -- ∤
+ },
+ [0x2225]={
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["description"]="PARALLEL TO",
+ ["linebreak"]="ai",
+ ["mathclass"]="relation",
+ ["mathname"]="parallel",
+ ["unicodeslot"]=0x2225, -- ∥
+ },
+ [0x2226]={
+ ["category"]="sm",
+ ["description"]="NOT PARALLEL TO",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x2225, 0x0338 },
+ ["unicodeslot"]=0x2226, -- ∦
+ },
+ [0x2227]={
+ ["adobename"]="logicaland",
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["description"]="LOGICAL AND",
+ ["linebreak"]="ai",
+ ["mathclass"]="limop",
+ ["mathname"]="wedge",
+ ["unicodeslot"]=0x2227, -- ∧
+ },
+ [0x2228]={
+ ["adobename"]="logicalor",
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["description"]="LOGICAL OR",
+ ["linebreak"]="ai",
+ ["mathclass"]="limop",
+ ["mathname"]="vee",
+ ["unicodeslot"]=0x2228, -- ∨
+ },
+ [0x2229]={
+ ["adobename"]="intersection",
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["description"]="INTERSECTION",
+ ["linebreak"]="ai",
+ ["mathclass"]="limop",
+ ["mathname"]="cap",
+ ["unicodeslot"]=0x2229, -- ∩
+ },
+ [0x222A]={
+ ["adobename"]="union",
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["description"]="UNION",
+ ["linebreak"]="ai",
+ ["mathclass"]="limop",
+ ["mathname"]="cup",
+ ["unicodeslot"]=0x222A, -- ∪
+ },
+ [0x222B]={
+ ["adobename"]="integral",
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["description"]="INTEGRAL",
+ ["linebreak"]="ai",
+ ["mathclass"]="limop",
+ ["mathname"]="intop",
+ ["unicodeslot"]=0x222B, -- ∫
+ },
+ [0x222C]={
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["description"]="DOUBLE INTEGRAL",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x222B, 0x222B },
+ ["unicodeslot"]=0x222C, -- ∬
+ },
+ [0x222D]={
+ ["category"]="sm",
+ ["description"]="TRIPLE INTEGRAL",
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x222B, 0x222B, 0x222B },
+ ["unicodeslot"]=0x222D, -- ∭
+ },
+ [0x222E]={
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["description"]="CONTOUR INTEGRAL",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x222E, -- ∮
+ },
+ [0x222F]={
+ ["category"]="sm",
+ ["description"]="SURFACE INTEGRAL",
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x222E, 0x222E },
+ ["unicodeslot"]=0x222F, -- ∯
+ },
+ [0x2230]={
+ ["category"]="sm",
+ ["description"]="VOLUME INTEGRAL",
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x222E, 0x222E, 0x222E },
+ ["unicodeslot"]=0x2230, -- ∰
+ },
+ [0x2231]={
+ ["category"]="sm",
+ ["description"]="CLOCKWISE INTEGRAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2231, -- ∱
+ },
+ [0x2232]={
+ ["category"]="sm",
+ ["description"]="CLOCKWISE CONTOUR INTEGRAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2232, -- ∲
+ },
+ [0x2233]={
+ ["category"]="sm",
+ ["description"]="ANTICLOCKWISE CONTOUR INTEGRAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2233, -- ∳
+ },
+ [0x2234]={
+ ["adobename"]="therefore",
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["description"]="THEREFORE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2234, -- ∴
+ },
+ [0x2235]={
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["description"]="BECAUSE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2235, -- ∵
+ },
+ [0x2236]={
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["description"]="RATIO",
+ ["linebreak"]="ai",
+ ["mathclass"]="punctuation", -- AM: Not sure
+ ["mathname"]="colon",
+ ["unicodeslot"]=0x2236, -- ∶
+ },
+ [0x2237]={
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["description"]="PROPORTION",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2237, -- ∷
+ },
+ [0x2238]={
+ ["category"]="sm",
+ ["description"]="DOT MINUS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2238, -- ∸
+ },
+ [0x2239]={
+ ["category"]="sm",
+ ["description"]="EXCESS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2239, -- ∹
+ },
+ [0x223A]={
+ ["category"]="sm",
+ ["description"]="GEOMETRIC PROPORTION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x223A, -- ∺
+ },
+ [0x223B]={
+ ["category"]="sm",
+ ["description"]="HOMOTHETIC",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x223B, -- ∻
+ },
+ [0x223C]={
+ ["adobename"]="similar",
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["description"]="TILDE OPERATOR",
+ ["linebreak"]="ai",
+ ["mathclass"]="relation",
+ ["mathname"]="sim",
+ ["unicodeslot"]=0x223C, -- ∼
+ },
+ [0x223D]={
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["description"]="REVERSED TILDE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x223D, -- ∽
+ },
+ [0x223E]={
+ ["category"]="sm",
+ ["description"]="INVERTED LAZY S",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x223E, -- ∾
+ },
+ [0x223F]={
+ ["category"]="sm",
+ ["description"]="SINE WAVE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x223F, -- ∿
+ },
+ [0x2240]={
+ ["category"]="sm",
+ ["description"]="WREATH PRODUCT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2240, -- ≀
+ },
+ [0x2241]={
+ ["category"]="sm",
+ ["description"]="NOT TILDE",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x223C, 0x0338 },
+ ["unicodeslot"]=0x2241, -- â‰
+ },
+ [0x2242]={
+ ["category"]="sm",
+ ["description"]="MINUS TILDE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2242, -- ≂
+ },
+ [0x2243]={
+ ["category"]="sm",
+ ["description"]="ASYMPTOTICALLY EQUAL TO",
+ ["linebreak"]="al",
+ ["mathclass"]="relation",
+ ["mathname"]="simeq",
+ ["unicodeslot"]=0x2243, -- ≃
+ },
+ [0x2244]={
+ ["category"]="sm",
+ ["description"]="NOT ASYMPTOTICALLY EQUAL TO",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x2243, 0x0338 },
+ ["unicodeslot"]=0x2244, -- ≄
+ },
+ [0x2245]={
+ ["adobename"]="congruent",
+ ["category"]="sm",
+ ["description"]="APPROXIMATELY EQUAL TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2245, -- ≅
+ },
+ [0x2246]={
+ ["category"]="sm",
+ ["description"]="APPROXIMATELY BUT NOT ACTUALLY EQUAL TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2246, -- ≆
+ },
+ [0x2247]={
+ ["category"]="sm",
+ ["description"]="NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x2245, 0x0338 },
+ ["unicodeslot"]=0x2247, -- ≇
+ },
+ [0x2248]={
+ ["adobename"]="approxequal",
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["description"]="ALMOST EQUAL TO",
+ ["linebreak"]="ai",
+ ["mathclass"]="relation",
+ ["mathname"]="approx",
+ ["unicodeslot"]=0x2248, -- ≈
+ },
+ [0x2249]={
+ ["category"]="sm",
+ ["description"]="NOT ALMOST EQUAL TO",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x2248, 0x0338 },
+ ["unicodeslot"]=0x2249, -- ≉
+ },
+ [0x224A]={
+ ["category"]="sm",
+ ["description"]="ALMOST EQUAL OR EQUAL TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x224A, -- ≊
+ },
+ [0x224B]={
+ ["category"]="sm",
+ ["description"]="TRIPLE TILDE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x224B, -- ≋
+ },
+ [0x224C]={
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["description"]="ALL EQUAL TO",
+ ["linebreak"]="ai",
+ ["mathclass"]="relation",
+ ["mathname"]="equiv",
+ ["unicodeslot"]=0x224C, -- ≌
+ },
+ [0x224D]={
+ ["category"]="sm",
+ ["description"]="EQUIVALENT TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x224D, -- â‰
+ },
+ [0x224E]={
+ ["category"]="sm",
+ ["description"]="GEOMETRICALLY EQUIVALENT TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x224E, -- ≎
+ },
+ [0x224F]={
+ ["category"]="sm",
+ ["description"]="DIFFERENCE BETWEEN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x224F, -- â‰
+ },
+ [0x2250]={
+ ["category"]="sm",
+ ["description"]="APPROACHES THE LIMIT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2250, -- â‰
+ },
+ [0x2251]={
+ ["category"]="sm",
+ ["description"]="GEOMETRICALLY EQUAL TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2251, -- ≑
+ },
+ [0x2252]={
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["description"]="APPROXIMATELY EQUAL TO OR THE IMAGE OF",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2252, -- ≒
+ },
+ [0x2253]={
+ ["category"]="sm",
+ ["description"]="IMAGE OF OR APPROXIMATELY EQUAL TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2253, -- ≓
+ },
+ [0x2254]={
+ ["category"]="sm",
+ ["description"]="COLON EQUALS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2254, -- ≔
+ },
+ [0x2255]={
+ ["category"]="sm",
+ ["description"]="EQUALS COLON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2255, -- ≕
+ },
+ [0x2256]={
+ ["category"]="sm",
+ ["description"]="RING IN EQUAL TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2256, -- ≖
+ },
+ [0x2257]={
+ ["category"]="sm",
+ ["description"]="RING EQUAL TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2257, -- ≗
+ },
+ [0x2258]={
+ ["category"]="sm",
+ ["description"]="CORRESPONDS TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2258, -- ≘
+ },
+ [0x2259]={
+ ["category"]="sm",
+ ["description"]="ESTIMATES",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2259, -- ≙
+ },
+ [0x225A]={
+ ["category"]="sm",
+ ["description"]="EQUIANGULAR TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x225A, -- ≚
+ },
+ [0x225B]={
+ ["category"]="sm",
+ ["description"]="STAR EQUALS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x225B, -- ≛
+ },
+ [0x225C]={
+ ["category"]="sm",
+ ["description"]="DELTA EQUAL TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x225C, -- ≜
+ },
+ [0x225D]={
+ ["category"]="sm",
+ ["description"]="EQUAL TO BY DEFINITION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x225D, -- â‰
+ },
+ [0x225E]={
+ ["category"]="sm",
+ ["description"]="MEASURED BY",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x225E, -- ≞
+ },
+ [0x225F]={
+ ["category"]="sm",
+ ["description"]="QUESTIONED EQUAL TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x225F, -- ≟
+ },
+ [0x2260]={
+ ["adobename"]="notequal",
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["description"]="NOT EQUAL TO",
+ ["linebreak"]="ai",
+ ["specials"]={ "char", 0x003D, 0x0338 },
+ ["unicodeslot"]=0x2260, -- ≠
+ },
+ [0x2261]={
+ ["adobename"]="equivalence",
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["description"]="IDENTICAL TO",
+ ["linebreak"]="ai",
+ ["mathclass"]="relation",
+ ["mathname"]="equiv",
+ ["unicodeslot"]=0x2261, -- ≡
+ },
+ [0x2262]={
+ ["category"]="sm",
+ ["description"]="NOT IDENTICAL TO",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x2261, 0x0338 },
+ ["unicodeslot"]=0x2262, -- ≢
+ },
+ [0x2263]={
+ ["category"]="sm",
+ ["description"]="STRICTLY EQUIVALENT TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2263, -- ≣
+ },
+ [0x2264]={
+ ["adobename"]="lessequal",
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["description"]="LESS-THAN OR EQUAL TO",
+ ["linebreak"]="ai",
+ ["mathclass"]="relation",
+ ["mathname"]="leq",
+ ["unicodeslot"]=0x2264, -- ≤
+ },
+ [0x2265]={
+ ["adobename"]="greaterequal",
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["description"]="GREATER-THAN OR EQUAL TO",
+ ["linebreak"]="ai",
+ ["mathclass"]="relation",
+ ["mathname"]="geq",
+ ["unicodeslot"]=0x2265, -- ≥
+ },
+ [0x2266]={
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["description"]="LESS-THAN OVER EQUAL TO",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2266, -- ≦
+ },
+ [0x2267]={
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["description"]="GREATER-THAN OVER EQUAL TO",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2267, -- ≧
+ },
+ [0x2268]={
+ ["category"]="sm",
+ ["description"]="LESS-THAN BUT NOT EQUAL TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2268, -- ≨
+ },
+ [0x2269]={
+ ["category"]="sm",
+ ["description"]="GREATER-THAN BUT NOT EQUAL TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2269, -- ≩
+ },
+ [0x226A]={
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["description"]="MUCH LESS-THAN",
+ ["linebreak"]="ai",
+ ["mathclass"]="relation",
+ ["mathname"]="ll",
+ ["unicodeslot"]=0x226A, -- ≪
+ },
+ [0x226B]={
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["description"]="MUCH GREATER-THAN",
+ ["linebreak"]="ai",
+ ["mathclass"]="relation",
+ ["mathname"]="gg",
+ ["unicodeslot"]=0x226B, -- ≫
+ },
+ [0x226C]={
+ ["category"]="sm",
+ ["description"]="BETWEEN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x226C, -- ≬
+ },
+ [0x226D]={
+ ["category"]="sm",
+ ["description"]="NOT EQUIVALENT TO",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x224D, 0x0338 },
+ ["unicodeslot"]=0x226D, -- ≭
+ },
+ [0x226E]={
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["description"]="NOT LESS-THAN",
+ ["linebreak"]="ai",
+ ["specials"]={ "char", 0x003C, 0x0338 },
+ ["unicodeslot"]=0x226E, -- ≮
+ },
+ [0x226F]={
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["description"]="NOT GREATER-THAN",
+ ["linebreak"]="ai",
+ ["specials"]={ "char", 0x003E, 0x0338 },
+ ["unicodeslot"]=0x226F, -- ≯
+ },
+ [0x2270]={
+ ["category"]="sm",
+ ["description"]="NEITHER LESS-THAN NOR EQUAL TO",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x2264, 0x0338 },
+ ["unicodeslot"]=0x2270, -- ≰
+ },
+ [0x2271]={
+ ["category"]="sm",
+ ["description"]="NEITHER GREATER-THAN NOR EQUAL TO",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x2265, 0x0338 },
+ ["unicodeslot"]=0x2271, -- ≱
+ },
+ [0x2272]={
+ ["category"]="sm",
+ ["description"]="LESS-THAN OR EQUIVALENT TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2272, -- ≲
+ },
+ [0x2273]={
+ ["category"]="sm",
+ ["description"]="GREATER-THAN OR EQUIVALENT TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2273, -- ≳
+ },
+ [0x2274]={
+ ["category"]="sm",
+ ["description"]="NEITHER LESS-THAN NOR EQUIVALENT TO",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x2272, 0x0338 },
+ ["unicodeslot"]=0x2274, -- ≴
+ },
+ [0x2275]={
+ ["category"]="sm",
+ ["description"]="NEITHER GREATER-THAN NOR EQUIVALENT TO",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x2273, 0x0338 },
+ ["unicodeslot"]=0x2275, -- ≵
+ },
+ [0x2276]={
+ ["category"]="sm",
+ ["description"]="LESS-THAN OR GREATER-THAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2276, -- ≶
+ },
+ [0x2277]={
+ ["category"]="sm",
+ ["description"]="GREATER-THAN OR LESS-THAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2277, -- ≷
+ },
+ [0x2278]={
+ ["category"]="sm",
+ ["description"]="NEITHER LESS-THAN NOR GREATER-THAN",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x2276, 0x0338 },
+ ["unicodeslot"]=0x2278, -- ≸
+ },
+ [0x2279]={
+ ["category"]="sm",
+ ["description"]="NEITHER GREATER-THAN NOR LESS-THAN",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x2277, 0x0338 },
+ ["unicodeslot"]=0x2279, -- ≹
+ },
+ [0x227A]={
+ ["category"]="sm",
+ ["description"]="PRECEDES",
+ ["mathclass"]="relation",
+ ["mathname"]="prec",
+ ["linebreak"]="al",
+ ["mathclass"]="relation",
+ ["mathname"]="prec",
+ ["unicodeslot"]=0x227A, -- ≺
+ },
+ [0x227B]={
+ ["category"]="sm",
+ ["description"]="SUCCEEDS",
+ ["mathclass"]="relation",
+ ["mathname"]="succ",
+ ["linebreak"]="al",
+ ["mathclass"]="relation",
+ ["mathname"]="succ",
+ ["unicodeslot"]=0x227B, -- ≻
+ },
+ [0x227C]={
+ ["category"]="sm",
+ ["description"]="PRECEDES OR EQUAL TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x227C, -- ≼
+ },
+ [0x227D]={
+ ["category"]="sm",
+ ["description"]="SUCCEEDS OR EQUAL TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x227D, -- ≽
+ },
+ [0x227E]={
+ ["category"]="sm",
+ ["description"]="PRECEDES OR EQUIVALENT TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x227E, -- ≾
+ },
+ [0x227F]={
+ ["category"]="sm",
+ ["description"]="SUCCEEDS OR EQUIVALENT TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x227F, -- ≿
+ },
+ [0x2280]={
+ ["category"]="sm",
+ ["description"]="DOES NOT PRECEDE",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x227A, 0x0338 },
+ ["unicodeslot"]=0x2280, -- ⊀
+ },
+ [0x2281]={
+ ["category"]="sm",
+ ["description"]="DOES NOT SUCCEED",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x227B, 0x0338 },
+ ["unicodeslot"]=0x2281, -- âŠ
+ },
+ [0x2282]={
+ ["adobename"]="propersubset",
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["description"]="SUBSET OF",
+ ["linebreak"]="ai",
+ ["mathclass"]="relation",
+ ["mathname"]="subset",
+ ["unicodeslot"]=0x2282, -- ⊂
+ },
+ [0x2283]={
+ ["adobename"]="propersuperset",
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["description"]="SUPERSET OF",
+ ["linebreak"]="ai",
+ ["mathclass"]="relation",
+ ["mathname"]="supset",
+ ["unicodeslot"]=0x2283, -- ⊃
+ },
+ [0x2284]={
+ ["adobename"]="notsubset",
+ ["category"]="sm",
+ ["description"]="NOT A SUBSET OF",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x2282, 0x0338 },
+ ["unicodeslot"]=0x2284, -- ⊄
+ },
+ [0x2285]={
+ ["category"]="sm",
+ ["description"]="NOT A SUPERSET OF",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x2283, 0x0338 },
+ ["unicodeslot"]=0x2285, -- ⊅
+ },
+ [0x2286]={
+ ["adobename"]="reflexsubset",
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["description"]="SUBSET OF OR EQUAL TO",
+ ["linebreak"]="ai",
+ ["mathclass"]="relation",
+ ["mathname"]="subseteq",
+ ["unicodeslot"]=0x2286, -- ⊆
+ },
+ [0x2287]={
+ ["adobename"]="reflexsuperset",
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["description"]="SUPERSET OF OR EQUAL TO",
+ ["linebreak"]="ai",
+ ["mathclass"]="relation",
+ ["mathname"]="supseteq",
+ ["unicodeslot"]=0x2287, -- ⊇
+ },
+ [0x2288]={
+ ["category"]="sm",
+ ["description"]="NEITHER A SUBSET OF NOR EQUAL TO",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x2286, 0x0338 },
+ ["unicodeslot"]=0x2288, -- ⊈
+ },
+ [0x2289]={
+ ["category"]="sm",
+ ["description"]="NEITHER A SUPERSET OF NOR EQUAL TO",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x2287, 0x0338 },
+ ["unicodeslot"]=0x2289, -- ⊉
+ },
+ [0x228A]={
+ ["category"]="sm",
+ ["description"]="SUBSET OF WITH NOT EQUAL TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x228A, -- ⊊
+ },
+ [0x228B]={
+ ["category"]="sm",
+ ["description"]="SUPERSET OF WITH NOT EQUAL TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x228B, -- ⊋
+ },
+ [0x228C]={
+ ["category"]="sm",
+ ["description"]="MULTISET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x228C, -- ⊌
+ },
+ [0x228D]={
+ ["category"]="sm",
+ ["description"]="MULTISET MULTIPLICATION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x228D, -- âŠ
+ },
+ [0x228E]={
+ ["category"]="sm",
+ ["description"]="MULTISET UNION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x228E, -- ⊎
+ },
+ [0x228F]={
+ ["category"]="sm",
+ ["description"]="SQUARE IMAGE OF",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x228F, -- âŠ
+ },
+ [0x2290]={
+ ["category"]="sm",
+ ["description"]="SQUARE ORIGINAL OF",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2290, -- âŠ
+ },
+ [0x2291]={
+ ["category"]="sm",
+ ["description"]="SQUARE IMAGE OF OR EQUAL TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2291, -- ⊑
+ },
+ [0x2292]={
+ ["category"]="sm",
+ ["description"]="SQUARE ORIGINAL OF OR EQUAL TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2292, -- ⊒
+ },
+ [0x2293]={
+ ["category"]="sm",
+ ["description"]="SQUARE CAP",
+ ["linebreak"]="al",
+ ["mathclass"]="relation",
+ ["mathname"]="sqcap",
+ ["unicodeslot"]=0x2293, -- ⊓
+ },
+ [0x2294]={
+ ["category"]="sm",
+ ["description"]="SQUARE CUP",
+ ["linebreak"]="al",
+ ["mathclass"]="relation",
+ ["mathname"]="sqcup",
+ ["unicodeslot"]=0x2294, -- ⊔
+ },
+ [0x2295]={
+ ["adobename"]="circleplus",
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED PLUS",
+ ["linebreak"]="ai",
+ ["mathclass"]="binary",
+ ["mathname"]="oplus",
+ ["unicodeslot"]=0x2295, -- ⊕
+ },
+ [0x2296]={
+ ["category"]="sm",
+ ["description"]="CIRCLED MINUS",
+ ["linebreak"]="al",
+ ["mathclass"]="binary",
+ ["mathname"]="ominus",
+ ["unicodeslot"]=0x2296, -- ⊖
+ },
+ [0x2297]={
+ ["adobename"]="circlemultiply",
+ ["category"]="sm",
+ ["description"]="CIRCLED TIMES",
+ ["linebreak"]="al",
+ ["mathclass"]="binary",
+ ["mathname"]="otimes",
+ ["unicodeslot"]=0x2297, -- ⊗
+ },
+ [0x2298]={
+ ["category"]="sm",
+ ["description"]="CIRCLED DIVISION SLASH",
+ ["linebreak"]="al",
+ ["mathclass"]="binary",
+ ["mathname"]="oslash",
+ ["unicodeslot"]=0x2298, -- ⊘
+ },
+ [0x2299]={
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED DOT OPERATOR",
+ ["linebreak"]="ai",
+ ["mathclass"]="binary",
+ ["mathname"]="odot",
+ ["unicodeslot"]=0x2299, -- ⊙
+ },
+ [0x229A]={
+ ["category"]="sm",
+ ["description"]="CIRCLED RING OPERATOR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x229A, -- ⊚
+ },
+ [0x229B]={
+ ["category"]="sm",
+ ["description"]="CIRCLED ASTERISK OPERATOR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x229B, -- ⊛
+ },
+ [0x229C]={
+ ["category"]="sm",
+ ["description"]="CIRCLED EQUALS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x229C, -- ⊜
+ },
+ [0x229D]={
+ ["category"]="sm",
+ ["description"]="CIRCLED DASH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x229D, -- âŠ
+ },
+ [0x229E]={
+ ["category"]="sm",
+ ["description"]="SQUARED PLUS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x229E, -- ⊞
+ },
+ [0x229F]={
+ ["category"]="sm",
+ ["description"]="SQUARED MINUS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x229F, -- ⊟
+ },
+ [0x22A0]={
+ ["category"]="sm",
+ ["description"]="SQUARED TIMES",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22A0, -- ⊠
+ },
+ [0x22A1]={
+ ["category"]="sm",
+ ["description"]="SQUARED DOT OPERATOR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22A1, -- ⊡
+ },
+ [0x22A2]={
+ ["category"]="sm",
+ ["description"]="RIGHT TACK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22A2, -- ⊢
+ },
+ [0x22A3]={
+ ["category"]="sm",
+ ["description"]="LEFT TACK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22A3, -- ⊣
+ },
+ [0x22A4]={
+ ["category"]="sm",
+ ["description"]="DOWN TACK",
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["mathname"]="bot",
+ ["unicodeslot"]=0x22A4, -- ⊤
+ },
+ [0x22A5]={
+ ["adobename"]="perpendicular",
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["description"]="UP TACK",
+ ["linebreak"]="ai",
+ ["mathclass"]="variable",
+ ["mathname"]="top",
+ ["unicodeslot"]=0x22A5, -- ⊥
+ },
+ [0x22A6]={
+ ["category"]="sm",
+ ["description"]="ASSERTION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22A6, -- ⊦
+ },
+ [0x22A7]={
+ ["category"]="sm",
+ ["description"]="MODELS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22A7, -- ⊧
+ },
+ [0x22A8]={
+ ["category"]="sm",
+ ["description"]="TRUE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22A8, -- ⊨
+ },
+ [0x22A9]={
+ ["category"]="sm",
+ ["description"]="FORCES",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22A9, -- ⊩
+ },
+ [0x22AA]={
+ ["category"]="sm",
+ ["description"]="TRIPLE VERTICAL BAR RIGHT TURNSTILE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22AA, -- ⊪
+ },
+ [0x22AB]={
+ ["category"]="sm",
+ ["description"]="DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22AB, -- ⊫
+ },
+ [0x22AC]={
+ ["category"]="sm",
+ ["description"]="DOES NOT PROVE",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x22A2, 0x0338 },
+ ["unicodeslot"]=0x22AC, -- ⊬
+ },
+ [0x22AD]={
+ ["category"]="sm",
+ ["description"]="NOT TRUE",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x22A8, 0x0338 },
+ ["unicodeslot"]=0x22AD, -- ⊭
+ },
+ [0x22AE]={
+ ["category"]="sm",
+ ["description"]="DOES NOT FORCE",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x22A9, 0x0338 },
+ ["unicodeslot"]=0x22AE, -- ⊮
+ },
+ [0x22AF]={
+ ["category"]="sm",
+ ["description"]="NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x22AB, 0x0338 },
+ ["unicodeslot"]=0x22AF, -- ⊯
+ },
+ [0x22B0]={
+ ["category"]="sm",
+ ["description"]="PRECEDES UNDER RELATION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22B0, -- ⊰
+ },
+ [0x22B1]={
+ ["category"]="sm",
+ ["description"]="SUCCEEDS UNDER RELATION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22B1, -- ⊱
+ },
+ [0x22B2]={
+ ["category"]="sm",
+ ["description"]="NORMAL SUBGROUP OF",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22B2, -- ⊲
+ },
+ [0x22B3]={
+ ["category"]="sm",
+ ["description"]="CONTAINS AS NORMAL SUBGROUP",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22B3, -- ⊳
+ },
+ [0x22B4]={
+ ["category"]="sm",
+ ["description"]="NORMAL SUBGROUP OF OR EQUAL TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22B4, -- ⊴
+ },
+ [0x22B5]={
+ ["category"]="sm",
+ ["description"]="CONTAINS AS NORMAL SUBGROUP OR EQUAL TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22B5, -- ⊵
+ },
+ [0x22B6]={
+ ["category"]="sm",
+ ["description"]="ORIGINAL OF",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22B6, -- ⊶
+ },
+ [0x22B7]={
+ ["category"]="sm",
+ ["description"]="IMAGE OF",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22B7, -- ⊷
+ },
+ [0x22B8]={
+ ["category"]="sm",
+ ["description"]="MULTIMAP",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22B8, -- ⊸
+ },
+ [0x22B9]={
+ ["category"]="sm",
+ ["description"]="HERMITIAN CONJUGATE MATRIX",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22B9, -- ⊹
+ },
+ [0x22BA]={
+ ["category"]="sm",
+ ["description"]="INTERCALATE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22BA, -- ⊺
+ },
+ [0x22BB]={
+ ["category"]="sm",
+ ["description"]="XOR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22BB, -- ⊻
+ },
+ [0x22BC]={
+ ["category"]="sm",
+ ["description"]="NAND",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22BC, -- ⊼
+ },
+ [0x22BD]={
+ ["category"]="sm",
+ ["description"]="NOR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22BD, -- ⊽
+ },
+ [0x22BE]={
+ ["category"]="sm",
+ ["description"]="RIGHT ANGLE WITH ARC",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22BE, -- ⊾
+ },
+ [0x22BF]={
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["description"]="RIGHT TRIANGLE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x22BF, -- ⊿
+ },
+ [0x22C0]={
+ ["category"]="sm",
+ ["description"]="N-ARY LOGICAL AND",
+ ["linebreak"]="al",
+ ["mathclass"]="limop",
+ ["mathname"]="bigwedge",
+ ["unicodeslot"]=0x22C0, -- â‹€
+ },
+ [0x22C1]={
+ ["category"]="sm",
+ ["description"]="N-ARY LOGICAL OR",
+ ["linebreak"]="al",
+ ["mathclass"]="limop",
+ ["mathname"]="bigvee",
+ ["unicodeslot"]=0x22C1, -- â‹
+ },
+ [0x22C2]={
+ ["category"]="sm",
+ ["description"]="N-ARY INTERSECTION",
+ ["linebreak"]="al",
+ ["mathclass"]="limop",
+ ["mathname"]="bigcap",
+ ["unicodeslot"]=0x22C2, -- â‹‚
+ },
+ [0x22C3]={
+ ["category"]="sm",
+ ["description"]="N-ARY UNION",
+ ["linebreak"]="al",
+ ["mathclass"]="limop",
+ ["mathname"]="bigcup",
+ ["unicodeslot"]=0x22C3, -- ⋃
+ },
+ [0x22C4]={
+ ["category"]="sm",
+ ["description"]="DIAMOND OPERATOR",
+ ["linebreak"]="al",
+ ["mathclass"]="binary",
+ ["mathname"]="diamond",
+ ["unicodeslot"]=0x22C4, -- â‹„
+ },
+ [0x22C5]={
+ ["adobename"]="dotmath",
+ ["category"]="sm",
+ ["description"]="DOT OPERATOR",
+ ["linebreak"]="al",
+ ["mathclass"]="binary",
+ ["mathname"]="cdot",
+ ["unicodeslot"]=0x22C5, -- â‹…
+ },
+ [0x22C6]={
+ ["category"]="sm",
+ ["description"]="STAR OPERATOR",
+ ["linebreak"]="al",
+ ["mathclass"]="binary",
+ ["mathname"]="star",
+ ["unicodeslot"]=0x22C6, -- ⋆
+ },
+ [0x22C7]={
+ ["category"]="sm",
+ ["description"]="DIVISION TIMES",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22C7, -- ⋇
+ },
+ [0x22C8]={
+ ["category"]="sm",
+ ["description"]="BOWTIE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22C8, -- ⋈
+ },
+ [0x22C9]={
+ ["category"]="sm",
+ ["description"]="LEFT NORMAL FACTOR SEMIDIRECT PRODUCT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22C9, -- ⋉
+ },
+ [0x22CA]={
+ ["category"]="sm",
+ ["description"]="RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22CA, -- â‹Š
+ },
+ [0x22CB]={
+ ["category"]="sm",
+ ["description"]="LEFT SEMIDIRECT PRODUCT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22CB, -- â‹‹
+ },
+ [0x22CC]={
+ ["category"]="sm",
+ ["description"]="RIGHT SEMIDIRECT PRODUCT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22CC, -- ⋌
+ },
+ [0x22CD]={
+ ["category"]="sm",
+ ["description"]="REVERSED TILDE EQUALS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22CD, -- â‹
+ },
+ [0x22CE]={
+ ["category"]="sm",
+ ["description"]="CURLY LOGICAL OR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22CE, -- â‹Ž
+ },
+ [0x22CF]={
+ ["category"]="sm",
+ ["description"]="CURLY LOGICAL AND",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22CF, -- â‹
+ },
+ [0x22D0]={
+ ["category"]="sm",
+ ["description"]="DOUBLE SUBSET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22D0, -- â‹
+ },
+ [0x22D1]={
+ ["category"]="sm",
+ ["description"]="DOUBLE SUPERSET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22D1, -- â‹‘
+ },
+ [0x22D2]={
+ ["category"]="sm",
+ ["description"]="DOUBLE INTERSECTION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22D2, -- â‹’
+ },
+ [0x22D3]={
+ ["category"]="sm",
+ ["description"]="DOUBLE UNION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22D3, -- â‹“
+ },
+ [0x22D4]={
+ ["category"]="sm",
+ ["description"]="PITCHFORK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22D4, -- â‹”
+ },
+ [0x22D5]={
+ ["category"]="sm",
+ ["description"]="EQUAL AND PARALLEL TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22D5, -- â‹•
+ },
+ [0x22D6]={
+ ["category"]="sm",
+ ["description"]="LESS-THAN WITH DOT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22D6, -- â‹–
+ },
+ [0x22D7]={
+ ["category"]="sm",
+ ["description"]="GREATER-THAN WITH DOT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22D7, -- â‹—
+ },
+ [0x22D8]={
+ ["category"]="sm",
+ ["description"]="VERY MUCH LESS-THAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22D8, -- ⋘
+ },
+ [0x22D9]={
+ ["category"]="sm",
+ ["description"]="VERY MUCH GREATER-THAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22D9, -- â‹™
+ },
+ [0x22DA]={
+ ["category"]="sm",
+ ["description"]="LESS-THAN EQUAL TO OR GREATER-THAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22DA, -- â‹š
+ },
+ [0x22DB]={
+ ["category"]="sm",
+ ["description"]="GREATER-THAN EQUAL TO OR LESS-THAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22DB, -- â‹›
+ },
+ [0x22DC]={
+ ["category"]="sm",
+ ["description"]="EQUAL TO OR LESS-THAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22DC, -- ⋜
+ },
+ [0x22DD]={
+ ["category"]="sm",
+ ["description"]="EQUAL TO OR GREATER-THAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22DD, -- â‹
+ },
+ [0x22DE]={
+ ["category"]="sm",
+ ["description"]="EQUAL TO OR PRECEDES",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22DE, -- â‹ž
+ },
+ [0x22DF]={
+ ["category"]="sm",
+ ["description"]="EQUAL TO OR SUCCEEDS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22DF, -- â‹Ÿ
+ },
+ [0x22E0]={
+ ["category"]="sm",
+ ["description"]="DOES NOT PRECEDE OR EQUAL",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x227C, 0x0338 },
+ ["unicodeslot"]=0x22E0, -- â‹ 
+ },
+ [0x22E1]={
+ ["category"]="sm",
+ ["description"]="DOES NOT SUCCEED OR EQUAL",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x227D, 0x0338 },
+ ["unicodeslot"]=0x22E1, -- â‹¡
+ },
+ [0x22E2]={
+ ["category"]="sm",
+ ["description"]="NOT SQUARE IMAGE OF OR EQUAL TO",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x2291, 0x0338 },
+ ["unicodeslot"]=0x22E2, -- â‹¢
+ },
+ [0x22E3]={
+ ["category"]="sm",
+ ["description"]="NOT SQUARE ORIGINAL OF OR EQUAL TO",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x2292, 0x0338 },
+ ["unicodeslot"]=0x22E3, -- â‹£
+ },
+ [0x22E4]={
+ ["category"]="sm",
+ ["description"]="SQUARE IMAGE OF OR NOT EQUAL TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22E4, -- ⋤
+ },
+ [0x22E5]={
+ ["category"]="sm",
+ ["description"]="SQUARE ORIGINAL OF OR NOT EQUAL TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22E5, -- â‹¥
+ },
+ [0x22E6]={
+ ["category"]="sm",
+ ["description"]="LESS-THAN BUT NOT EQUIVALENT TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22E6, -- ⋦
+ },
+ [0x22E7]={
+ ["category"]="sm",
+ ["description"]="GREATER-THAN BUT NOT EQUIVALENT TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22E7, -- ⋧
+ },
+ [0x22E8]={
+ ["category"]="sm",
+ ["description"]="PRECEDES BUT NOT EQUIVALENT TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22E8, -- ⋨
+ },
+ [0x22E9]={
+ ["category"]="sm",
+ ["description"]="SUCCEEDS BUT NOT EQUIVALENT TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22E9, -- â‹©
+ },
+ [0x22EA]={
+ ["category"]="sm",
+ ["description"]="NOT NORMAL SUBGROUP OF",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x22B2, 0x0338 },
+ ["unicodeslot"]=0x22EA, -- ⋪
+ },
+ [0x22EB]={
+ ["category"]="sm",
+ ["description"]="DOES NOT CONTAIN AS NORMAL SUBGROUP",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x22B3, 0x0338 },
+ ["unicodeslot"]=0x22EB, -- â‹«
+ },
+ [0x22EC]={
+ ["category"]="sm",
+ ["description"]="NOT NORMAL SUBGROUP OF OR EQUAL TO",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x22B4, 0x0338 },
+ ["unicodeslot"]=0x22EC, -- ⋬
+ },
+ [0x22ED]={
+ ["category"]="sm",
+ ["description"]="DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x22B5, 0x0338 },
+ ["unicodeslot"]=0x22ED, -- â‹­
+ },
+ [0x22EE]={
+ ["category"]="sm",
+ ["description"]="VERTICAL ELLIPSIS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22EE, -- â‹®
+ },
+ [0x22EF]={
+ ["category"]="sm",
+ ["description"]="MIDLINE HORIZONTAL ELLIPSIS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22EF, -- ⋯
+ },
+ [0x22F0]={
+ ["category"]="sm",
+ ["description"]="UP RIGHT DIAGONAL ELLIPSIS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22F0, -- â‹°
+ },
+ [0x22F1]={
+ ["category"]="sm",
+ ["description"]="DOWN RIGHT DIAGONAL ELLIPSIS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22F1, -- ⋱
+ },
+ [0x22F2]={
+ ["category"]="sm",
+ ["description"]="ELEMENT OF WITH LONG HORIZONTAL STROKE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22F2, -- ⋲
+ },
+ [0x22F3]={
+ ["category"]="sm",
+ ["description"]="ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22F3, -- ⋳
+ },
+ [0x22F4]={
+ ["category"]="sm",
+ ["description"]="SMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22F4, -- â‹´
+ },
+ [0x22F5]={
+ ["category"]="sm",
+ ["description"]="ELEMENT OF WITH DOT ABOVE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22F5, -- ⋵
+ },
+ [0x22F6]={
+ ["category"]="sm",
+ ["description"]="ELEMENT OF WITH OVERBAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22F6, -- ⋶
+ },
+ [0x22F7]={
+ ["category"]="sm",
+ ["description"]="SMALL ELEMENT OF WITH OVERBAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22F7, -- â‹·
+ },
+ [0x22F8]={
+ ["category"]="sm",
+ ["description"]="ELEMENT OF WITH UNDERBAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22F8, -- ⋸
+ },
+ [0x22F9]={
+ ["category"]="sm",
+ ["description"]="ELEMENT OF WITH TWO HORIZONTAL STROKES",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22F9, -- ⋹
+ },
+ [0x22FA]={
+ ["category"]="sm",
+ ["description"]="CONTAINS WITH LONG HORIZONTAL STROKE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22FA, -- ⋺
+ },
+ [0x22FB]={
+ ["category"]="sm",
+ ["description"]="CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22FB, -- â‹»
+ },
+ [0x22FC]={
+ ["category"]="sm",
+ ["description"]="SMALL CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22FC, -- ⋼
+ },
+ [0x22FD]={
+ ["category"]="sm",
+ ["description"]="CONTAINS WITH OVERBAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22FD, -- ⋽
+ },
+ [0x22FE]={
+ ["category"]="sm",
+ ["description"]="SMALL CONTAINS WITH OVERBAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22FE, -- ⋾
+ },
+ [0x22FF]={
+ ["category"]="sm",
+ ["description"]="Z NOTATION BAG MEMBERSHIP",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x22FF, -- â‹¿
+ },
+ [0x2300]={
+ ["category"]="so",
+ ["description"]="DIAMETER SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2300, -- ⌀
+ },
+ [0x2301]={
+ ["category"]="so",
+ ["description"]="ELECTRIC ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2301, -- âŒ
+ },
+ [0x2302]={
+ ["adobename"]="house",
+ ["category"]="so",
+ ["description"]="HOUSE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2302, -- ⌂
+ },
+ [0x2303]={
+ ["category"]="so",
+ ["description"]="UP ARROWHEAD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2303, -- ⌃
+ },
+ [0x2304]={
+ ["category"]="so",
+ ["description"]="DOWN ARROWHEAD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2304, -- ⌄
+ },
+ [0x2305]={
+ ["category"]="so",
+ ["description"]="PROJECTIVE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2305, -- ⌅
+ },
+ [0x2306]={
+ ["category"]="so",
+ ["description"]="PERSPECTIVE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2306, -- ⌆
+ },
+ [0x2307]={
+ ["category"]="so",
+ ["description"]="WAVY LINE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2307, -- ⌇
+ },
+ [0x2308]={
+ ["category"]="sm",
+ ["description"]="LEFT CEILING",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2308, -- ⌈
+ },
+ [0x2309]={
+ ["category"]="sm",
+ ["description"]="RIGHT CEILING",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2309, -- ⌉
+ },
+ [0x230A]={
+ ["category"]="sm",
+ ["description"]="LEFT FLOOR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x230A, -- ⌊
+ },
+ [0x230B]={
+ ["category"]="sm",
+ ["description"]="RIGHT FLOOR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x230B, -- ⌋
+ },
+ [0x230C]={
+ ["category"]="so",
+ ["description"]="BOTTOM RIGHT CROP",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x230C, -- ⌌
+ },
+ [0x230D]={
+ ["category"]="so",
+ ["description"]="BOTTOM LEFT CROP",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x230D, -- âŒ
+ },
+ [0x230E]={
+ ["category"]="so",
+ ["description"]="TOP RIGHT CROP",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x230E, -- ⌎
+ },
+ [0x230F]={
+ ["category"]="so",
+ ["description"]="TOP LEFT CROP",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x230F, -- âŒ
+ },
+ [0x2310]={
+ ["adobename"]="revlogicalnot",
+ ["category"]="so",
+ ["description"]="REVERSED NOT SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2310, -- âŒ
+ },
+ [0x2311]={
+ ["category"]="so",
+ ["description"]="SQUARE LOZENGE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2311, -- ⌑
+ },
+ [0x2312]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="ARC",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2312, -- ⌒
+ },
+ [0x2313]={
+ ["category"]="so",
+ ["description"]="SEGMENT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2313, -- ⌓
+ },
+ [0x2314]={
+ ["category"]="so",
+ ["description"]="SECTOR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2314, -- ⌔
+ },
+ [0x2315]={
+ ["category"]="so",
+ ["description"]="TELEPHONE RECORDER",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2315, -- ⌕
+ },
+ [0x2316]={
+ ["category"]="so",
+ ["description"]="POSITION INDICATOR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2316, -- ⌖
+ },
+ [0x2317]={
+ ["category"]="so",
+ ["description"]="VIEWDATA SQUARE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2317, -- ⌗
+ },
+ [0x2318]={
+ ["category"]="so",
+ ["description"]="PLACE OF INTEREST SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2318, -- ⌘
+ },
+ [0x2319]={
+ ["category"]="so",
+ ["description"]="TURNED NOT SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2319, -- ⌙
+ },
+ [0x231A]={
+ ["category"]="so",
+ ["description"]="WATCH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x231A, -- ⌚
+ },
+ [0x231B]={
+ ["category"]="so",
+ ["description"]="HOURGLASS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x231B, -- ⌛
+ },
+ [0x231C]={
+ ["category"]="so",
+ ["description"]="TOP LEFT CORNER",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x231C, -- ⌜
+ },
+ [0x231D]={
+ ["category"]="so",
+ ["description"]="TOP RIGHT CORNER",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x231D, -- âŒ
+ },
+ [0x231E]={
+ ["category"]="so",
+ ["description"]="BOTTOM LEFT CORNER",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x231E, -- ⌞
+ },
+ [0x231F]={
+ ["category"]="so",
+ ["description"]="BOTTOM RIGHT CORNER",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x231F, -- ⌟
+ },
+ [0x2320]={
+ ["adobename"]="integraltp",
+ ["category"]="sm",
+ ["description"]="TOP HALF INTEGRAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2320, -- ⌠
+ },
+ [0x2321]={
+ ["adobename"]="integralbt",
+ ["category"]="sm",
+ ["description"]="BOTTOM HALF INTEGRAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2321, -- ⌡
+ },
+ [0x2322]={
+ ["category"]="so",
+ ["description"]="FROWN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2322, -- ⌢
+ },
+ [0x2323]={
+ ["category"]="so",
+ ["description"]="SMILE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2323, -- ⌣
+ },
+ [0x2324]={
+ ["category"]="so",
+ ["description"]="UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2324, -- ⌤
+ },
+ [0x2325]={
+ ["category"]="so",
+ ["description"]="OPTION KEY",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2325, -- ⌥
+ },
+ [0x2326]={
+ ["category"]="so",
+ ["description"]="ERASE TO THE RIGHT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2326, -- ⌦
+ },
+ [0x2327]={
+ ["category"]="so",
+ ["description"]="X IN A RECTANGLE BOX",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2327, -- ⌧
+ },
+ [0x2328]={
+ ["category"]="so",
+ ["description"]="KEYBOARD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2328, -- ⌨
+ },
+ [0x2329]={
+ ["adobename"]="angleleft",
+ ["category"]="ps",
+ ["cjkwd"]="w",
+ ["description"]="LEFT-POINTING ANGLE BRACKET",
+ ["linebreak"]="op",
+ ["specials"]={ "char", 0x3008 },
+ ["unicodeslot"]=0x2329, -- 〈
+ },
+ [0x232A]={
+ ["adobename"]="angleright",
+ ["category"]="pe",
+ ["cjkwd"]="w",
+ ["description"]="RIGHT-POINTING ANGLE BRACKET",
+ ["linebreak"]="cl",
+ ["specials"]={ "char", 0x3009 },
+ ["unicodeslot"]=0x232A, -- 〉
+ },
+ [0x232B]={
+ ["category"]="so",
+ ["description"]="ERASE TO THE LEFT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x232B, -- ⌫
+ },
+ [0x232C]={
+ ["category"]="so",
+ ["description"]="BENZENE RING",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x232C, -- ⌬
+ },
+ [0x232D]={
+ ["category"]="so",
+ ["description"]="CYLINDRICITY",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x232D, -- ⌭
+ },
+ [0x232E]={
+ ["category"]="so",
+ ["description"]="ALL AROUND-PROFILE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x232E, -- ⌮
+ },
+ [0x232F]={
+ ["category"]="so",
+ ["description"]="SYMMETRY",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x232F, -- ⌯
+ },
+ [0x2330]={
+ ["category"]="so",
+ ["description"]="TOTAL RUNOUT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2330, -- ⌰
+ },
+ [0x2331]={
+ ["category"]="so",
+ ["description"]="DIMENSION ORIGIN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2331, -- ⌱
+ },
+ [0x2332]={
+ ["category"]="so",
+ ["description"]="CONICAL TAPER",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2332, -- ⌲
+ },
+ [0x2333]={
+ ["category"]="so",
+ ["description"]="SLOPE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2333, -- ⌳
+ },
+ [0x2334]={
+ ["category"]="so",
+ ["description"]="COUNTERBORE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2334, -- ⌴
+ },
+ [0x2335]={
+ ["category"]="so",
+ ["description"]="COUNTERSINK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2335, -- ⌵
+ },
+ [0x2336]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL I-BEAM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2336, -- ⌶
+ },
+ [0x2337]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL SQUISH QUAD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2337, -- ⌷
+ },
+ [0x2338]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL QUAD EQUAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2338, -- ⌸
+ },
+ [0x2339]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL QUAD DIVIDE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2339, -- ⌹
+ },
+ [0x233A]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL QUAD DIAMOND",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x233A, -- ⌺
+ },
+ [0x233B]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL QUAD JOT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x233B, -- ⌻
+ },
+ [0x233C]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL QUAD CIRCLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x233C, -- ⌼
+ },
+ [0x233D]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL CIRCLE STILE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x233D, -- ⌽
+ },
+ [0x233E]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL CIRCLE JOT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x233E, -- ⌾
+ },
+ [0x233F]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL SLASH BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x233F, -- ⌿
+ },
+ [0x2340]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL BACKSLASH BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2340, -- â€
+ },
+ [0x2341]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL QUAD SLASH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2341, -- â
+ },
+ [0x2342]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL QUAD BACKSLASH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2342, -- â‚
+ },
+ [0x2343]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL QUAD LESS-THAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2343, -- âƒ
+ },
+ [0x2344]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL QUAD GREATER-THAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2344, -- â„
+ },
+ [0x2345]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL LEFTWARDS VANE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2345, -- â…
+ },
+ [0x2346]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL RIGHTWARDS VANE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2346, -- â†
+ },
+ [0x2347]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2347, -- â‡
+ },
+ [0x2348]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2348, -- âˆ
+ },
+ [0x2349]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2349, -- â‰
+ },
+ [0x234A]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x234A, -- âŠ
+ },
+ [0x234B]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL DELTA STILE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x234B, -- â‹
+ },
+ [0x234C]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL QUAD DOWN CARET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x234C, -- âŒ
+ },
+ [0x234D]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL QUAD DELTA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x234D, -- â
+ },
+ [0x234E]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL DOWN TACK JOT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x234E, -- âŽ
+ },
+ [0x234F]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL UPWARDS VANE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x234F, -- â
+ },
+ [0x2350]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2350, -- â
+ },
+ [0x2351]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL UP TACK OVERBAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2351, -- â‘
+ },
+ [0x2352]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL DEL STILE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2352, -- â’
+ },
+ [0x2353]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL QUAD UP CARET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2353, -- â“
+ },
+ [0x2354]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL QUAD DEL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2354, -- â”
+ },
+ [0x2355]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL UP TACK JOT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2355, -- â•
+ },
+ [0x2356]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL DOWNWARDS VANE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2356, -- â–
+ },
+ [0x2357]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2357, -- â—
+ },
+ [0x2358]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL QUOTE UNDERBAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2358, -- â˜
+ },
+ [0x2359]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL DELTA UNDERBAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2359, -- â™
+ },
+ [0x235A]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x235A, -- âš
+ },
+ [0x235B]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL JOT UNDERBAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x235B, -- â›
+ },
+ [0x235C]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x235C, -- âœ
+ },
+ [0x235D]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL UP SHOE JOT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x235D, -- â
+ },
+ [0x235E]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL QUOTE QUAD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x235E, -- âž
+ },
+ [0x235F]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL CIRCLE STAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x235F, -- âŸ
+ },
+ [0x2360]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL QUAD COLON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2360, -- â 
+ },
+ [0x2361]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL UP TACK DIAERESIS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2361, -- â¡
+ },
+ [0x2362]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL DEL DIAERESIS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2362, -- â¢
+ },
+ [0x2363]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL STAR DIAERESIS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2363, -- â£
+ },
+ [0x2364]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL JOT DIAERESIS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2364, -- â¤
+ },
+ [0x2365]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2365, -- â¥
+ },
+ [0x2366]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL DOWN SHOE STILE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2366, -- â¦
+ },
+ [0x2367]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL LEFT SHOE STILE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2367, -- â§
+ },
+ [0x2368]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL TILDE DIAERESIS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2368, -- â¨
+ },
+ [0x2369]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2369, -- â©
+ },
+ [0x236A]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL COMMA BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x236A, -- âª
+ },
+ [0x236B]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL DEL TILDE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x236B, -- â«
+ },
+ [0x236C]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL ZILDE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x236C, -- â¬
+ },
+ [0x236D]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL STILE TILDE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x236D, -- â­
+ },
+ [0x236E]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x236E, -- â®
+ },
+ [0x236F]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL QUAD NOT EQUAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x236F, -- â¯
+ },
+ [0x2370]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL QUAD QUESTION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2370, -- â°
+ },
+ [0x2371]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL DOWN CARET TILDE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2371, -- â±
+ },
+ [0x2372]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL UP CARET TILDE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2372, -- â²
+ },
+ [0x2373]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL IOTA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2373, -- â³
+ },
+ [0x2374]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL RHO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2374, -- â´
+ },
+ [0x2375]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL OMEGA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2375, -- âµ
+ },
+ [0x2376]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL ALPHA UNDERBAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2376, -- â¶
+ },
+ [0x2377]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL EPSILON UNDERBAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2377, -- â·
+ },
+ [0x2378]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL IOTA UNDERBAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2378, -- â¸
+ },
+ [0x2379]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL OMEGA UNDERBAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2379, -- â¹
+ },
+ [0x237A]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL ALPHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x237A, -- âº
+ },
+ [0x237B]={
+ ["category"]="so",
+ ["description"]="NOT CHECK MARK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x237B, -- â»
+ },
+ [0x237C]={
+ ["category"]="sm",
+ ["description"]="RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x237C, -- â¼
+ },
+ [0x237D]={
+ ["category"]="so",
+ ["description"]="SHOULDERED OPEN BOX",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x237D, -- â½
+ },
+ [0x237E]={
+ ["category"]="so",
+ ["description"]="BELL SYMBOL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x237E, -- â¾
+ },
+ [0x237F]={
+ ["category"]="so",
+ ["description"]="VERTICAL LINE WITH MIDDLE DOT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x237F, -- â¿
+ },
+ [0x2380]={
+ ["category"]="so",
+ ["description"]="INSERTION SYMBOL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2380, -- ⎀
+ },
+ [0x2381]={
+ ["category"]="so",
+ ["description"]="CONTINUOUS UNDERLINE SYMBOL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2381, -- âŽ
+ },
+ [0x2382]={
+ ["category"]="so",
+ ["description"]="DISCONTINUOUS UNDERLINE SYMBOL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2382, -- ⎂
+ },
+ [0x2383]={
+ ["category"]="so",
+ ["description"]="EMPHASIS SYMBOL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2383, -- ⎃
+ },
+ [0x2384]={
+ ["category"]="so",
+ ["description"]="COMPOSITION SYMBOL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2384, -- ⎄
+ },
+ [0x2385]={
+ ["category"]="so",
+ ["description"]="WHITE SQUARE WITH CENTRE VERTICAL LINE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2385, -- ⎅
+ },
+ [0x2386]={
+ ["category"]="so",
+ ["description"]="ENTER SYMBOL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2386, -- ⎆
+ },
+ [0x2387]={
+ ["category"]="so",
+ ["description"]="ALTERNATIVE KEY SYMBOL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2387, -- ⎇
+ },
+ [0x2388]={
+ ["category"]="so",
+ ["description"]="HELM SYMBOL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2388, -- ⎈
+ },
+ [0x2389]={
+ ["category"]="so",
+ ["description"]="CIRCLED HORIZONTAL BAR WITH NOTCH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2389, -- ⎉
+ },
+ [0x238A]={
+ ["category"]="so",
+ ["description"]="CIRCLED TRIANGLE DOWN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x238A, -- ⎊
+ },
+ [0x238B]={
+ ["category"]="so",
+ ["description"]="BROKEN CIRCLE WITH NORTHWEST ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x238B, -- ⎋
+ },
+ [0x238C]={
+ ["category"]="so",
+ ["description"]="UNDO SYMBOL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x238C, -- ⎌
+ },
+ [0x238D]={
+ ["category"]="so",
+ ["description"]="MONOSTABLE SYMBOL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x238D, -- âŽ
+ },
+ [0x238E]={
+ ["category"]="so",
+ ["description"]="HYSTERESIS SYMBOL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x238E, -- ⎎
+ },
+ [0x238F]={
+ ["category"]="so",
+ ["description"]="OPEN-CIRCUIT-OUTPUT H-TYPE SYMBOL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x238F, -- âŽ
+ },
+ [0x2390]={
+ ["category"]="so",
+ ["description"]="OPEN-CIRCUIT-OUTPUT L-TYPE SYMBOL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2390, -- âŽ
+ },
+ [0x2391]={
+ ["category"]="so",
+ ["description"]="PASSIVE-PULL-DOWN-OUTPUT SYMBOL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2391, -- ⎑
+ },
+ [0x2392]={
+ ["category"]="so",
+ ["description"]="PASSIVE-PULL-UP-OUTPUT SYMBOL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2392, -- ⎒
+ },
+ [0x2393]={
+ ["category"]="so",
+ ["description"]="DIRECT CURRENT SYMBOL FORM TWO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2393, -- ⎓
+ },
+ [0x2394]={
+ ["category"]="so",
+ ["description"]="SOFTWARE-FUNCTION SYMBOL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2394, -- ⎔
+ },
+ [0x2395]={
+ ["category"]="so",
+ ["description"]="APL FUNCTIONAL SYMBOL QUAD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2395, -- ⎕
+ },
+ [0x2396]={
+ ["category"]="so",
+ ["description"]="DECIMAL SEPARATOR KEY SYMBOL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2396, -- ⎖
+ },
+ [0x2397]={
+ ["category"]="so",
+ ["description"]="PREVIOUS PAGE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2397, -- ⎗
+ },
+ [0x2398]={
+ ["category"]="so",
+ ["description"]="NEXT PAGE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2398, -- ⎘
+ },
+ [0x2399]={
+ ["category"]="so",
+ ["description"]="PRINT SCREEN SYMBOL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2399, -- ⎙
+ },
+ [0x239A]={
+ ["category"]="so",
+ ["description"]="CLEAR SCREEN SYMBOL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x239A, -- ⎚
+ },
+ [0x239B]={
+ ["category"]="sm",
+ ["description"]="LEFT PARENTHESIS UPPER HOOK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x239B, -- ⎛
+ },
+ [0x239C]={
+ ["category"]="sm",
+ ["description"]="LEFT PARENTHESIS EXTENSION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x239C, -- ⎜
+ },
+ [0x239D]={
+ ["category"]="sm",
+ ["description"]="LEFT PARENTHESIS LOWER HOOK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x239D, -- âŽ
+ },
+ [0x239E]={
+ ["category"]="sm",
+ ["description"]="RIGHT PARENTHESIS UPPER HOOK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x239E, -- ⎞
+ },
+ [0x239F]={
+ ["category"]="sm",
+ ["description"]="RIGHT PARENTHESIS EXTENSION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x239F, -- ⎟
+ },
+ [0x23A0]={
+ ["category"]="sm",
+ ["description"]="RIGHT PARENTHESIS LOWER HOOK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23A0, -- ⎠
+ },
+ [0x23A1]={
+ ["category"]="sm",
+ ["description"]="LEFT SQUARE BRACKET UPPER CORNER",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23A1, -- ⎡
+ },
+ [0x23A2]={
+ ["category"]="sm",
+ ["description"]="LEFT SQUARE BRACKET EXTENSION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23A2, -- ⎢
+ },
+ [0x23A3]={
+ ["category"]="sm",
+ ["description"]="LEFT SQUARE BRACKET LOWER CORNER",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23A3, -- ⎣
+ },
+ [0x23A4]={
+ ["category"]="sm",
+ ["description"]="RIGHT SQUARE BRACKET UPPER CORNER",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23A4, -- ⎤
+ },
+ [0x23A5]={
+ ["category"]="sm",
+ ["description"]="RIGHT SQUARE BRACKET EXTENSION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23A5, -- ⎥
+ },
+ [0x23A6]={
+ ["category"]="sm",
+ ["description"]="RIGHT SQUARE BRACKET LOWER CORNER",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23A6, -- ⎦
+ },
+ [0x23A7]={
+ ["category"]="sm",
+ ["description"]="LEFT CURLY BRACKET UPPER HOOK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23A7, -- ⎧
+ },
+ [0x23A8]={
+ ["category"]="sm",
+ ["description"]="LEFT CURLY BRACKET MIDDLE PIECE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23A8, -- ⎨
+ },
+ [0x23A9]={
+ ["category"]="sm",
+ ["description"]="LEFT CURLY BRACKET LOWER HOOK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23A9, -- ⎩
+ },
+ [0x23AA]={
+ ["category"]="sm",
+ ["description"]="CURLY BRACKET EXTENSION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23AA, -- ⎪
+ },
+ [0x23AB]={
+ ["category"]="sm",
+ ["description"]="RIGHT CURLY BRACKET UPPER HOOK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23AB, -- ⎫
+ },
+ [0x23AC]={
+ ["category"]="sm",
+ ["description"]="RIGHT CURLY BRACKET MIDDLE PIECE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23AC, -- ⎬
+ },
+ [0x23AD]={
+ ["category"]="sm",
+ ["description"]="RIGHT CURLY BRACKET LOWER HOOK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23AD, -- ⎭
+ },
+ [0x23AE]={
+ ["category"]="sm",
+ ["description"]="INTEGRAL EXTENSION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23AE, -- ⎮
+ },
+ [0x23AF]={
+ ["category"]="sm",
+ ["description"]="HORIZONTAL LINE EXTENSION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23AF, -- ⎯
+ },
+ [0x23B0]={
+ ["category"]="sm",
+ ["description"]="UPPER LEFT OR LOWER RIGHT CURLY BRACKET SECTION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23B0, -- ⎰
+ },
+ [0x23B1]={
+ ["category"]="sm",
+ ["description"]="UPPER RIGHT OR LOWER LEFT CURLY BRACKET SECTION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23B1, -- ⎱
+ },
+ [0x23B2]={
+ ["category"]="sm",
+ ["description"]="SUMMATION TOP",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23B2, -- ⎲
+ },
+ [0x23B3]={
+ ["category"]="sm",
+ ["description"]="SUMMATION BOTTOM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23B3, -- ⎳
+ },
+ [0x23B4]={
+ ["category"]="so",
+ ["description"]="TOP SQUARE BRACKET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23B4, -- ⎴
+ },
+ [0x23B5]={
+ ["category"]="so",
+ ["description"]="BOTTOM SQUARE BRACKET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23B5, -- ⎵
+ },
+ [0x23B6]={
+ ["category"]="so",
+ ["description"]="BOTTOM SQUARE BRACKET OVER TOP SQUARE BRACKET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23B6, -- ⎶
+ },
+ [0x23B7]={
+ ["category"]="so",
+ ["description"]="RADICAL SYMBOL BOTTOM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23B7, -- ⎷
+ },
+ [0x23B8]={
+ ["category"]="so",
+ ["description"]="LEFT VERTICAL BOX LINE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23B8, -- ⎸
+ },
+ [0x23B9]={
+ ["category"]="so",
+ ["description"]="RIGHT VERTICAL BOX LINE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23B9, -- ⎹
+ },
+ [0x23BA]={
+ ["category"]="so",
+ ["description"]="HORIZONTAL SCAN LINE-0x0001",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23BA, -- ⎺
+ },
+ [0x23BB]={
+ ["category"]="so",
+ ["description"]="HORIZONTAL SCAN LINE-0x0003",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23BB, -- ⎻
+ },
+ [0x23BC]={
+ ["category"]="so",
+ ["description"]="HORIZONTAL SCAN LINE-0x0007",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23BC, -- ⎼
+ },
+ [0x23BD]={
+ ["category"]="so",
+ ["description"]="HORIZONTAL SCAN LINE-0x0009",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23BD, -- ⎽
+ },
+ [0x23BE]={
+ ["category"]="so",
+ ["description"]="DENTISTRY SYMBOL LIGHT VERTICAL AND TOP RIGHT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23BE, -- ⎾
+ },
+ [0x23BF]={
+ ["category"]="so",
+ ["description"]="DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM RIGHT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23BF, -- ⎿
+ },
+ [0x23C0]={
+ ["category"]="so",
+ ["description"]="DENTISTRY SYMBOL LIGHT VERTICAL WITH CIRCLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23C0, -- â€
+ },
+ [0x23C1]={
+ ["category"]="so",
+ ["description"]="DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH CIRCLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23C1, -- â
+ },
+ [0x23C2]={
+ ["category"]="so",
+ ["description"]="DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH CIRCLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23C2, -- â‚
+ },
+ [0x23C3]={
+ ["category"]="so",
+ ["description"]="DENTISTRY SYMBOL LIGHT VERTICAL WITH TRIANGLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23C3, -- âƒ
+ },
+ [0x23C4]={
+ ["category"]="so",
+ ["description"]="DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH TRIANGLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23C4, -- â„
+ },
+ [0x23C5]={
+ ["category"]="so",
+ ["description"]="DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH TRIANGLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23C5, -- â…
+ },
+ [0x23C6]={
+ ["category"]="so",
+ ["description"]="DENTISTRY SYMBOL LIGHT VERTICAL AND WAVE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23C6, -- â†
+ },
+ [0x23C7]={
+ ["category"]="so",
+ ["description"]="DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH WAVE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23C7, -- â‡
+ },
+ [0x23C8]={
+ ["category"]="so",
+ ["description"]="DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH WAVE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23C8, -- âˆ
+ },
+ [0x23C9]={
+ ["category"]="so",
+ ["description"]="DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23C9, -- â‰
+ },
+ [0x23CA]={
+ ["category"]="so",
+ ["description"]="DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23CA, -- âŠ
+ },
+ [0x23CB]={
+ ["category"]="so",
+ ["description"]="DENTISTRY SYMBOL LIGHT VERTICAL AND TOP LEFT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23CB, -- â‹
+ },
+ [0x23CC]={
+ ["category"]="so",
+ ["description"]="DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM LEFT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23CC, -- âŒ
+ },
+ [0x23CD]={
+ ["category"]="so",
+ ["description"]="SQUARE FOOT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23CD, -- â
+ },
+ [0x23CE]={
+ ["category"]="so",
+ ["description"]="RETURN SYMBOL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23CE, -- âŽ
+ },
+ [0x23CF]={
+ ["category"]="so",
+ ["description"]="EJECT SYMBOL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23CF, -- â
+ },
+ [0x23D0]={
+ ["category"]="so",
+ ["description"]="VERTICAL LINE EXTENSION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23D0, -- â
+ },
+ [0x23D1]={
+ ["category"]="so",
+ ["description"]="METRICAL BREVE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23D1, -- â‘
+ },
+ [0x23D2]={
+ ["category"]="so",
+ ["description"]="METRICAL LONG OVER SHORT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23D2, -- â’
+ },
+ [0x23D3]={
+ ["category"]="so",
+ ["description"]="METRICAL SHORT OVER LONG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23D3, -- â“
+ },
+ [0x23D4]={
+ ["category"]="so",
+ ["description"]="METRICAL LONG OVER TWO SHORTS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23D4, -- â”
+ },
+ [0x23D5]={
+ ["category"]="so",
+ ["description"]="METRICAL TWO SHORTS OVER LONG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23D5, -- â•
+ },
+ [0x23D6]={
+ ["category"]="so",
+ ["description"]="METRICAL TWO SHORTS JOINED",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23D6, -- â–
+ },
+ [0x23D7]={
+ ["category"]="so",
+ ["description"]="METRICAL TRISEME",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23D7, -- â—
+ },
+ [0x23D8]={
+ ["category"]="so",
+ ["description"]="METRICAL TETRASEME",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23D8, -- â˜
+ },
+ [0x23D9]={
+ ["category"]="so",
+ ["description"]="METRICAL PENTASEME",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23D9, -- â™
+ },
+ [0x23DA]={
+ ["category"]="so",
+ ["description"]="EARTH GROUND",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23DA, -- âš
+ },
+ [0x23DB]={
+ ["category"]="so",
+ ["description"]="FUSE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23DB, -- â›
+ },
+ [0x23DC]={
+ ["category"]="sm",
+ ["description"]="TOP PARENTHESIS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23DC, -- âœ
+ },
+ [0x23DD]={
+ ["category"]="sm",
+ ["description"]="BOTTOM PARENTHESIS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23DD, -- â
+ },
+ [0x23DE]={
+ ["category"]="sm",
+ ["description"]="TOP CURLY BRACKET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23DE, -- âž
+ },
+ [0x23DF]={
+ ["category"]="sm",
+ ["description"]="BOTTOM CURLY BRACKET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23DF, -- âŸ
+ },
+ [0x23E0]={
+ ["category"]="sm",
+ ["description"]="TOP TORTOISE SHELL BRACKET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23E0, -- â 
+ },
+ [0x23E1]={
+ ["category"]="sm",
+ ["description"]="BOTTOM TORTOISE SHELL BRACKET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23E1, -- â¡
+ },
+ [0x23E2]={
+ ["category"]="so",
+ ["description"]="WHITE TRAPEZIUM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23E2, -- â¢
+ },
+ [0x23E3]={
+ ["category"]="so",
+ ["description"]="BENZENE RING WITH CIRCLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23E3, -- â£
+ },
+ [0x23E4]={
+ ["category"]="so",
+ ["description"]="STRAIGHTNESS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23E4, -- â¤
+ },
+ [0x23E5]={
+ ["category"]="so",
+ ["description"]="FLATNESS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23E5, -- â¥
+ },
+ [0x23E6]={
+ ["category"]="so",
+ ["description"]="AC CURRENT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23E6, -- â¦
+ },
+ [0x23E7]={
+ ["category"]="so",
+ ["description"]="ELECTRICAL INTERSECTION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x23E7, -- â§
+ },
+ [0x2400]={
+ ["category"]="so",
+ ["description"]="SYMBOL FOR NULL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2400, -- â€
+ },
+ [0x2401]={
+ ["category"]="so",
+ ["description"]="SYMBOL FOR START OF HEADING",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2401, -- â
+ },
+ [0x2402]={
+ ["category"]="so",
+ ["description"]="SYMBOL FOR START OF TEXT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2402, -- â‚
+ },
+ [0x2403]={
+ ["category"]="so",
+ ["description"]="SYMBOL FOR END OF TEXT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2403, -- âƒ
+ },
+ [0x2404]={
+ ["category"]="so",
+ ["description"]="SYMBOL FOR END OF TRANSMISSION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2404, -- â„
+ },
+ [0x2405]={
+ ["category"]="so",
+ ["description"]="SYMBOL FOR ENQUIRY",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2405, -- â…
+ },
+ [0x2406]={
+ ["category"]="so",
+ ["description"]="SYMBOL FOR ACKNOWLEDGE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2406, -- â†
+ },
+ [0x2407]={
+ ["category"]="so",
+ ["description"]="SYMBOL FOR BELL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2407, -- â‡
+ },
+ [0x2408]={
+ ["category"]="so",
+ ["description"]="SYMBOL FOR BACKSPACE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2408, -- âˆ
+ },
+ [0x2409]={
+ ["category"]="so",
+ ["description"]="SYMBOL FOR HORIZONTAL TABULATION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2409, -- â‰
+ },
+ [0x240A]={
+ ["category"]="so",
+ ["description"]="SYMBOL FOR LINE FEED",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x240A, -- âŠ
+ },
+ [0x240B]={
+ ["category"]="so",
+ ["description"]="SYMBOL FOR VERTICAL TABULATION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x240B, -- â‹
+ },
+ [0x240C]={
+ ["category"]="so",
+ ["description"]="SYMBOL FOR FORM FEED",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x240C, -- âŒ
+ },
+ [0x240D]={
+ ["category"]="so",
+ ["description"]="SYMBOL FOR CARRIAGE RETURN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x240D, -- â
+ },
+ [0x240E]={
+ ["category"]="so",
+ ["description"]="SYMBOL FOR SHIFT OUT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x240E, -- âŽ
+ },
+ [0x240F]={
+ ["category"]="so",
+ ["description"]="SYMBOL FOR SHIFT IN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x240F, -- â
+ },
+ [0x2410]={
+ ["category"]="so",
+ ["description"]="SYMBOL FOR DATA LINK ESCAPE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2410, -- â
+ },
+ [0x2411]={
+ ["category"]="so",
+ ["description"]="SYMBOL FOR DEVICE CONTROL ONE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2411, -- â‘
+ },
+ [0x2412]={
+ ["category"]="so",
+ ["description"]="SYMBOL FOR DEVICE CONTROL TWO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2412, -- â’
+ },
+ [0x2413]={
+ ["category"]="so",
+ ["description"]="SYMBOL FOR DEVICE CONTROL THREE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2413, -- â“
+ },
+ [0x2414]={
+ ["category"]="so",
+ ["description"]="SYMBOL FOR DEVICE CONTROL FOUR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2414, -- â”
+ },
+ [0x2415]={
+ ["category"]="so",
+ ["description"]="SYMBOL FOR NEGATIVE ACKNOWLEDGE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2415, -- â•
+ },
+ [0x2416]={
+ ["category"]="so",
+ ["description"]="SYMBOL FOR SYNCHRONOUS IDLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2416, -- â–
+ },
+ [0x2417]={
+ ["category"]="so",
+ ["description"]="SYMBOL FOR END OF TRANSMISSION BLOCK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2417, -- â—
+ },
+ [0x2418]={
+ ["category"]="so",
+ ["description"]="SYMBOL FOR CANCEL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2418, -- â˜
+ },
+ [0x2419]={
+ ["category"]="so",
+ ["description"]="SYMBOL FOR END OF MEDIUM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2419, -- â™
+ },
+ [0x241A]={
+ ["category"]="so",
+ ["description"]="SYMBOL FOR SUBSTITUTE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x241A, -- âš
+ },
+ [0x241B]={
+ ["category"]="so",
+ ["description"]="SYMBOL FOR ESCAPE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x241B, -- â›
+ },
+ [0x241C]={
+ ["category"]="so",
+ ["description"]="SYMBOL FOR FILE SEPARATOR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x241C, -- âœ
+ },
+ [0x241D]={
+ ["category"]="so",
+ ["description"]="SYMBOL FOR GROUP SEPARATOR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x241D, -- â
+ },
+ [0x241E]={
+ ["category"]="so",
+ ["description"]="SYMBOL FOR RECORD SEPARATOR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x241E, -- âž
+ },
+ [0x241F]={
+ ["category"]="so",
+ ["description"]="SYMBOL FOR UNIT SEPARATOR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x241F, -- âŸ
+ },
+ [0x2420]={
+ ["category"]="so",
+ ["description"]="SYMBOL FOR SPACE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2420, -- â 
+ },
+ [0x2421]={
+ ["category"]="so",
+ ["description"]="SYMBOL FOR DELETE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2421, -- â¡
+ },
+ [0x2422]={
+ ["category"]="so",
+ ["description"]="BLANK SYMBOL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2422, -- â¢
+ },
+ [0x2423]={
+ ["category"]="so",
+ ["description"]="OPEN BOX",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2423, -- â£
+ },
+ [0x2424]={
+ ["category"]="so",
+ ["description"]="SYMBOL FOR NEWLINE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2424, -- â¤
+ },
+ [0x2425]={
+ ["category"]="so",
+ ["description"]="SYMBOL FOR DELETE FORM TWO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2425, -- â¥
+ },
+ [0x2426]={
+ ["category"]="so",
+ ["description"]="SYMBOL FOR SUBSTITUTE FORM TWO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2426, -- â¦
+ },
+ [0x2440]={
+ ["category"]="so",
+ ["description"]="OCR HOOK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2440, -- â‘€
+ },
+ [0x2441]={
+ ["category"]="so",
+ ["description"]="OCR CHAIR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2441, -- â‘
+ },
+ [0x2442]={
+ ["category"]="so",
+ ["description"]="OCR FORK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2442, -- â‘‚
+ },
+ [0x2443]={
+ ["category"]="so",
+ ["description"]="OCR INVERTED FORK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2443, -- ⑃
+ },
+ [0x2444]={
+ ["category"]="so",
+ ["description"]="OCR BELT BUCKLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2444, -- â‘„
+ },
+ [0x2445]={
+ ["category"]="so",
+ ["description"]="OCR BOW TIE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2445, -- â‘…
+ },
+ [0x2446]={
+ ["category"]="so",
+ ["description"]="OCR BRANCH BANK IDENTIFICATION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2446, -- ⑆
+ },
+ [0x2447]={
+ ["category"]="so",
+ ["description"]="OCR AMOUNT OF CHECK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2447, -- ⑇
+ },
+ [0x2448]={
+ ["category"]="so",
+ ["description"]="OCR DASH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2448, -- ⑈
+ },
+ [0x2449]={
+ ["category"]="so",
+ ["description"]="OCR CUSTOMER ACCOUNT NUMBER",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2449, -- ⑉
+ },
+ [0x244A]={
+ ["category"]="so",
+ ["description"]="OCR DOUBLE BACKSLASH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x244A, -- â‘Š
+ },
+ [0x2460]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED DIGIT ONE",
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x0031 },
+ ["unicodeslot"]=0x2460, -- â‘ 
+ },
+ [0x2461]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED DIGIT TWO",
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x0032 },
+ ["unicodeslot"]=0x2461, -- â‘¡
+ },
+ [0x2462]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED DIGIT THREE",
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x0033 },
+ ["unicodeslot"]=0x2462, -- â‘¢
+ },
+ [0x2463]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED DIGIT FOUR",
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x0034 },
+ ["unicodeslot"]=0x2463, -- â‘£
+ },
+ [0x2464]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED DIGIT FIVE",
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x0035 },
+ ["unicodeslot"]=0x2464, -- ⑤
+ },
+ [0x2465]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED DIGIT SIX",
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x0036 },
+ ["unicodeslot"]=0x2465, -- â‘¥
+ },
+ [0x2466]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED DIGIT SEVEN",
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x0037 },
+ ["unicodeslot"]=0x2466, -- ⑦
+ },
+ [0x2467]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED DIGIT EIGHT",
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x0038 },
+ ["unicodeslot"]=0x2467, -- ⑧
+ },
+ [0x2468]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED DIGIT NINE",
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x0039 },
+ ["unicodeslot"]=0x2468, -- ⑨
+ },
+ [0x2469]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED NUMBER TEN",
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x0031, 0x0030 },
+ ["unicodeslot"]=0x2469, -- â‘©
+ },
+ [0x246A]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED NUMBER ELEVEN",
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x0031, 0x0031 },
+ ["unicodeslot"]=0x246A, -- ⑪
+ },
+ [0x246B]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED NUMBER TWELVE",
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x0031, 0x0032 },
+ ["unicodeslot"]=0x246B, -- â‘«
+ },
+ [0x246C]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED NUMBER THIRTEEN",
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x0031, 0x0033 },
+ ["unicodeslot"]=0x246C, -- ⑬
+ },
+ [0x246D]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED NUMBER FOURTEEN",
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x0031, 0x0034 },
+ ["unicodeslot"]=0x246D, -- â‘­
+ },
+ [0x246E]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED NUMBER FIFTEEN",
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x0031, 0x0035 },
+ ["unicodeslot"]=0x246E, -- â‘®
+ },
+ [0x246F]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED NUMBER SIXTEEN",
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x0031, 0x0036 },
+ ["unicodeslot"]=0x246F, -- ⑯
+ },
+ [0x2470]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED NUMBER SEVENTEEN",
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x0031, 0x0037 },
+ ["unicodeslot"]=0x2470, -- â‘°
+ },
+ [0x2471]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED NUMBER EIGHTEEN",
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x0031, 0x0038 },
+ ["unicodeslot"]=0x2471, -- ⑱
+ },
+ [0x2472]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED NUMBER NINETEEN",
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x0031, 0x0039 },
+ ["unicodeslot"]=0x2472, -- ⑲
+ },
+ [0x2473]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED NUMBER TWENTY",
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x0032, 0x0030 },
+ ["unicodeslot"]=0x2473, -- ⑳
+ },
+ [0x2474]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="PARENTHESIZED DIGIT ONE",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0028, 0x0031, 0x0029 },
+ ["unicodeslot"]=0x2474, -- â‘´
+ },
+ [0x2475]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="PARENTHESIZED DIGIT TWO",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0028, 0x0032, 0x0029 },
+ ["unicodeslot"]=0x2475, -- ⑵
+ },
+ [0x2476]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="PARENTHESIZED DIGIT THREE",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0028, 0x0033, 0x0029 },
+ ["unicodeslot"]=0x2476, -- ⑶
+ },
+ [0x2477]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="PARENTHESIZED DIGIT FOUR",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0028, 0x0034, 0x0029 },
+ ["unicodeslot"]=0x2477, -- â‘·
+ },
+ [0x2478]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="PARENTHESIZED DIGIT FIVE",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0028, 0x0035, 0x0029 },
+ ["unicodeslot"]=0x2478, -- ⑸
+ },
+ [0x2479]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="PARENTHESIZED DIGIT SIX",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0028, 0x0036, 0x0029 },
+ ["unicodeslot"]=0x2479, -- ⑹
+ },
+ [0x247A]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="PARENTHESIZED DIGIT SEVEN",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0028, 0x0037, 0x0029 },
+ ["unicodeslot"]=0x247A, -- ⑺
+ },
+ [0x247B]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="PARENTHESIZED DIGIT EIGHT",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0028, 0x0038, 0x0029 },
+ ["unicodeslot"]=0x247B, -- â‘»
+ },
+ [0x247C]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="PARENTHESIZED DIGIT NINE",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0028, 0x0039, 0x0029 },
+ ["unicodeslot"]=0x247C, -- ⑼
+ },
+ [0x247D]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="PARENTHESIZED NUMBER TEN",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0028, 0x0031, 0x0030, 0x0029 },
+ ["unicodeslot"]=0x247D, -- ⑽
+ },
+ [0x247E]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="PARENTHESIZED NUMBER ELEVEN",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0028, 0x0031, 0x0031, 0x0029 },
+ ["unicodeslot"]=0x247E, -- ⑾
+ },
+ [0x247F]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="PARENTHESIZED NUMBER TWELVE",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0028, 0x0031, 0x0032, 0x0029 },
+ ["unicodeslot"]=0x247F, -- â‘¿
+ },
+ [0x2480]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="PARENTHESIZED NUMBER THIRTEEN",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0028, 0x0031, 0x0033, 0x0029 },
+ ["unicodeslot"]=0x2480, -- â’€
+ },
+ [0x2481]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="PARENTHESIZED NUMBER FOURTEEN",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0028, 0x0031, 0x0034, 0x0029 },
+ ["unicodeslot"]=0x2481, -- â’
+ },
+ [0x2482]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="PARENTHESIZED NUMBER FIFTEEN",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0028, 0x0031, 0x0035, 0x0029 },
+ ["unicodeslot"]=0x2482, -- â’‚
+ },
+ [0x2483]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="PARENTHESIZED NUMBER SIXTEEN",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0028, 0x0031, 0x0036, 0x0029 },
+ ["unicodeslot"]=0x2483, -- â’ƒ
+ },
+ [0x2484]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="PARENTHESIZED NUMBER SEVENTEEN",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0028, 0x0031, 0x0037, 0x0029 },
+ ["unicodeslot"]=0x2484, -- â’„
+ },
+ [0x2485]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="PARENTHESIZED NUMBER EIGHTEEN",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0028, 0x0031, 0x0038, 0x0029 },
+ ["unicodeslot"]=0x2485, -- â’…
+ },
+ [0x2486]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="PARENTHESIZED NUMBER NINETEEN",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0028, 0x0031, 0x0039, 0x0029 },
+ ["unicodeslot"]=0x2486, -- â’†
+ },
+ [0x2487]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="PARENTHESIZED NUMBER TWENTY",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0028, 0x0032, 0x0030, 0x0029 },
+ ["unicodeslot"]=0x2487, -- â’‡
+ },
+ [0x2488]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="DIGIT ONE FULL STOP",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0031, 0x002E },
+ ["unicodeslot"]=0x2488, -- â’ˆ
+ },
+ [0x2489]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="DIGIT TWO FULL STOP",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0032, 0x002E },
+ ["unicodeslot"]=0x2489, -- â’‰
+ },
+ [0x248A]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="DIGIT THREE FULL STOP",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0033, 0x002E },
+ ["unicodeslot"]=0x248A, -- â’Š
+ },
+ [0x248B]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="DIGIT FOUR FULL STOP",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0034, 0x002E },
+ ["unicodeslot"]=0x248B, -- â’‹
+ },
+ [0x248C]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="DIGIT FIVE FULL STOP",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0035, 0x002E },
+ ["unicodeslot"]=0x248C, -- ⒌
+ },
+ [0x248D]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="DIGIT SIX FULL STOP",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0036, 0x002E },
+ ["unicodeslot"]=0x248D, -- â’
+ },
+ [0x248E]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="DIGIT SEVEN FULL STOP",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0037, 0x002E },
+ ["unicodeslot"]=0x248E, -- â’Ž
+ },
+ [0x248F]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="DIGIT EIGHT FULL STOP",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0038, 0x002E },
+ ["unicodeslot"]=0x248F, -- â’
+ },
+ [0x2490]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="DIGIT NINE FULL STOP",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0039, 0x002E },
+ ["unicodeslot"]=0x2490, -- â’
+ },
+ [0x2491]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="NUMBER TEN FULL STOP",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0031, 0x0030, 0x002E },
+ ["unicodeslot"]=0x2491, -- â’‘
+ },
+ [0x2492]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="NUMBER ELEVEN FULL STOP",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0031, 0x0031, 0x002E },
+ ["unicodeslot"]=0x2492, -- â’’
+ },
+ [0x2493]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="NUMBER TWELVE FULL STOP",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0031, 0x0032, 0x002E },
+ ["unicodeslot"]=0x2493, -- â’“
+ },
+ [0x2494]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="NUMBER THIRTEEN FULL STOP",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0031, 0x0033, 0x002E },
+ ["unicodeslot"]=0x2494, -- â’”
+ },
+ [0x2495]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="NUMBER FOURTEEN FULL STOP",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0031, 0x0034, 0x002E },
+ ["unicodeslot"]=0x2495, -- â’•
+ },
+ [0x2496]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="NUMBER FIFTEEN FULL STOP",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0031, 0x0035, 0x002E },
+ ["unicodeslot"]=0x2496, -- â’–
+ },
+ [0x2497]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="NUMBER SIXTEEN FULL STOP",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0031, 0x0036, 0x002E },
+ ["unicodeslot"]=0x2497, -- â’—
+ },
+ [0x2498]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="NUMBER SEVENTEEN FULL STOP",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0031, 0x0037, 0x002E },
+ ["unicodeslot"]=0x2498, -- â’˜
+ },
+ [0x2499]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="NUMBER EIGHTEEN FULL STOP",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0031, 0x0038, 0x002E },
+ ["unicodeslot"]=0x2499, -- â’™
+ },
+ [0x249A]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="NUMBER NINETEEN FULL STOP",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0031, 0x0039, 0x002E },
+ ["unicodeslot"]=0x249A, -- â’š
+ },
+ [0x249B]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="NUMBER TWENTY FULL STOP",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0032, 0x0030, 0x002E },
+ ["unicodeslot"]=0x249B, -- â’›
+ },
+ [0x249C]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="PARENTHESIZED LATIN SMALL LETTER A",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0028, 0x0061, 0x0029 },
+ ["unicodeslot"]=0x249C, -- ⒜
+ },
+ [0x249D]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="PARENTHESIZED LATIN SMALL LETTER B",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0028, 0x0062, 0x0029 },
+ ["unicodeslot"]=0x249D, -- â’
+ },
+ [0x249E]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="PARENTHESIZED LATIN SMALL LETTER C",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0028, 0x0063, 0x0029 },
+ ["unicodeslot"]=0x249E, -- â’ž
+ },
+ [0x249F]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="PARENTHESIZED LATIN SMALL LETTER D",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0028, 0x0064, 0x0029 },
+ ["unicodeslot"]=0x249F, -- â’Ÿ
+ },
+ [0x24A0]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="PARENTHESIZED LATIN SMALL LETTER E",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0028, 0x0065, 0x0029 },
+ ["unicodeslot"]=0x24A0, -- â’ 
+ },
+ [0x24A1]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="PARENTHESIZED LATIN SMALL LETTER F",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0028, 0x0066, 0x0029 },
+ ["unicodeslot"]=0x24A1, -- â’¡
+ },
+ [0x24A2]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="PARENTHESIZED LATIN SMALL LETTER G",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0028, 0x0067, 0x0029 },
+ ["unicodeslot"]=0x24A2, -- â’¢
+ },
+ [0x24A3]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="PARENTHESIZED LATIN SMALL LETTER H",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0028, 0x0068, 0x0029 },
+ ["unicodeslot"]=0x24A3, -- â’£
+ },
+ [0x24A4]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="PARENTHESIZED LATIN SMALL LETTER I",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0028, 0x0069, 0x0029 },
+ ["unicodeslot"]=0x24A4, -- â’¤
+ },
+ [0x24A5]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="PARENTHESIZED LATIN SMALL LETTER J",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0028, 0x006A, 0x0029 },
+ ["unicodeslot"]=0x24A5, -- â’¥
+ },
+ [0x24A6]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="PARENTHESIZED LATIN SMALL LETTER K",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0028, 0x006B, 0x0029 },
+ ["unicodeslot"]=0x24A6, -- â’¦
+ },
+ [0x24A7]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="PARENTHESIZED LATIN SMALL LETTER L",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0028, 0x006C, 0x0029 },
+ ["unicodeslot"]=0x24A7, -- â’§
+ },
+ [0x24A8]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="PARENTHESIZED LATIN SMALL LETTER M",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0028, 0x006D, 0x0029 },
+ ["unicodeslot"]=0x24A8, -- â’¨
+ },
+ [0x24A9]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="PARENTHESIZED LATIN SMALL LETTER N",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0028, 0x006E, 0x0029 },
+ ["unicodeslot"]=0x24A9, -- â’©
+ },
+ [0x24AA]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="PARENTHESIZED LATIN SMALL LETTER O",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0028, 0x006F, 0x0029 },
+ ["unicodeslot"]=0x24AA, -- â’ª
+ },
+ [0x24AB]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="PARENTHESIZED LATIN SMALL LETTER P",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0028, 0x0070, 0x0029 },
+ ["unicodeslot"]=0x24AB, -- â’«
+ },
+ [0x24AC]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="PARENTHESIZED LATIN SMALL LETTER Q",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0028, 0x0071, 0x0029 },
+ ["unicodeslot"]=0x24AC, -- â’¬
+ },
+ [0x24AD]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="PARENTHESIZED LATIN SMALL LETTER R",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0028, 0x0072, 0x0029 },
+ ["unicodeslot"]=0x24AD, -- â’­
+ },
+ [0x24AE]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="PARENTHESIZED LATIN SMALL LETTER S",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0028, 0x0073, 0x0029 },
+ ["unicodeslot"]=0x24AE, -- â’®
+ },
+ [0x24AF]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="PARENTHESIZED LATIN SMALL LETTER T",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0028, 0x0074, 0x0029 },
+ ["unicodeslot"]=0x24AF, -- â’¯
+ },
+ [0x24B0]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="PARENTHESIZED LATIN SMALL LETTER U",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0028, 0x0075, 0x0029 },
+ ["unicodeslot"]=0x24B0, -- â’°
+ },
+ [0x24B1]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="PARENTHESIZED LATIN SMALL LETTER V",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0028, 0x0076, 0x0029 },
+ ["unicodeslot"]=0x24B1, -- â’±
+ },
+ [0x24B2]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="PARENTHESIZED LATIN SMALL LETTER W",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0028, 0x0077, 0x0029 },
+ ["unicodeslot"]=0x24B2, -- â’²
+ },
+ [0x24B3]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="PARENTHESIZED LATIN SMALL LETTER X",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0028, 0x0078, 0x0029 },
+ ["unicodeslot"]=0x24B3, -- â’³
+ },
+ [0x24B4]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="PARENTHESIZED LATIN SMALL LETTER Y",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0028, 0x0079, 0x0029 },
+ ["unicodeslot"]=0x24B4, -- â’´
+ },
+ [0x24B5]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="PARENTHESIZED LATIN SMALL LETTER Z",
+ ["linebreak"]="ai",
+ ["specials"]={ "compat", 0x0028, 0x007A, 0x0029 },
+ ["unicodeslot"]=0x24B5, -- â’µ
+ },
+ [0x24B6]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED LATIN CAPITAL LETTER A",
+ ["lccode"]=0x24D0,
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x0041 },
+ ["unicodeslot"]=0x24B6, -- â’¶
+ },
+ [0x24B7]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED LATIN CAPITAL LETTER B",
+ ["lccode"]=0x24D1,
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x0042 },
+ ["unicodeslot"]=0x24B7, -- â’·
+ },
+ [0x24B8]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED LATIN CAPITAL LETTER C",
+ ["lccode"]=0x24D2,
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x0043 },
+ ["unicodeslot"]=0x24B8, -- â’¸
+ },
+ [0x24B9]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED LATIN CAPITAL LETTER D",
+ ["lccode"]=0x24D3,
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x0044 },
+ ["unicodeslot"]=0x24B9, -- â’¹
+ },
+ [0x24BA]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED LATIN CAPITAL LETTER E",
+ ["lccode"]=0x24D4,
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x0045 },
+ ["unicodeslot"]=0x24BA, -- â’º
+ },
+ [0x24BB]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED LATIN CAPITAL LETTER F",
+ ["lccode"]=0x24D5,
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x0046 },
+ ["unicodeslot"]=0x24BB, -- â’»
+ },
+ [0x24BC]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED LATIN CAPITAL LETTER G",
+ ["lccode"]=0x24D6,
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x0047 },
+ ["unicodeslot"]=0x24BC, -- â’¼
+ },
+ [0x24BD]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED LATIN CAPITAL LETTER H",
+ ["lccode"]=0x24D7,
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x0048 },
+ ["unicodeslot"]=0x24BD, -- â’½
+ },
+ [0x24BE]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED LATIN CAPITAL LETTER I",
+ ["lccode"]=0x24D8,
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x0049 },
+ ["unicodeslot"]=0x24BE, -- â’¾
+ },
+ [0x24BF]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED LATIN CAPITAL LETTER J",
+ ["lccode"]=0x24D9,
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x004A },
+ ["unicodeslot"]=0x24BF, -- â’¿
+ },
+ [0x24C0]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED LATIN CAPITAL LETTER K",
+ ["lccode"]=0x24DA,
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x004B },
+ ["unicodeslot"]=0x24C0, -- â“€
+ },
+ [0x24C1]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED LATIN CAPITAL LETTER L",
+ ["lccode"]=0x24DB,
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x004C },
+ ["unicodeslot"]=0x24C1, -- â“
+ },
+ [0x24C2]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED LATIN CAPITAL LETTER M",
+ ["lccode"]=0x24DC,
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x004D },
+ ["unicodeslot"]=0x24C2, -- â“‚
+ },
+ [0x24C3]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED LATIN CAPITAL LETTER N",
+ ["lccode"]=0x24DD,
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x004E },
+ ["unicodeslot"]=0x24C3, -- Ⓝ
+ },
+ [0x24C4]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED LATIN CAPITAL LETTER O",
+ ["lccode"]=0x24DE,
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x004F },
+ ["unicodeslot"]=0x24C4, -- â“„
+ },
+ [0x24C5]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED LATIN CAPITAL LETTER P",
+ ["lccode"]=0x24DF,
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x0050 },
+ ["unicodeslot"]=0x24C5, -- â“…
+ },
+ [0x24C6]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED LATIN CAPITAL LETTER Q",
+ ["lccode"]=0x24E0,
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x0051 },
+ ["unicodeslot"]=0x24C6, -- Ⓠ
+ },
+ [0x24C7]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED LATIN CAPITAL LETTER R",
+ ["lccode"]=0x24E1,
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x0052 },
+ ["unicodeslot"]=0x24C7, -- Ⓡ
+ },
+ [0x24C8]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED LATIN CAPITAL LETTER S",
+ ["lccode"]=0x24E2,
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x0053 },
+ ["unicodeslot"]=0x24C8, -- Ⓢ
+ },
+ [0x24C9]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED LATIN CAPITAL LETTER T",
+ ["lccode"]=0x24E3,
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x0054 },
+ ["unicodeslot"]=0x24C9, -- Ⓣ
+ },
+ [0x24CA]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED LATIN CAPITAL LETTER U",
+ ["lccode"]=0x24E4,
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x0055 },
+ ["unicodeslot"]=0x24CA, -- â“Š
+ },
+ [0x24CB]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED LATIN CAPITAL LETTER V",
+ ["lccode"]=0x24E5,
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x0056 },
+ ["unicodeslot"]=0x24CB, -- â“‹
+ },
+ [0x24CC]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED LATIN CAPITAL LETTER W",
+ ["lccode"]=0x24E6,
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x0057 },
+ ["unicodeslot"]=0x24CC, -- Ⓦ
+ },
+ [0x24CD]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED LATIN CAPITAL LETTER X",
+ ["lccode"]=0x24E7,
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x0058 },
+ ["unicodeslot"]=0x24CD, -- â“
+ },
+ [0x24CE]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED LATIN CAPITAL LETTER Y",
+ ["lccode"]=0x24E8,
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x0059 },
+ ["unicodeslot"]=0x24CE, -- â“Ž
+ },
+ [0x24CF]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED LATIN CAPITAL LETTER Z",
+ ["lccode"]=0x24E9,
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x005A },
+ ["unicodeslot"]=0x24CF, -- â“
+ },
+ [0x24D0]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED LATIN SMALL LETTER A",
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x0061 },
+ ["uccode"]=0x24B6,
+ ["unicodeslot"]=0x24D0, -- â“
+ },
+ [0x24D1]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED LATIN SMALL LETTER B",
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x0062 },
+ ["uccode"]=0x24B7,
+ ["unicodeslot"]=0x24D1, -- â“‘
+ },
+ [0x24D2]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED LATIN SMALL LETTER C",
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x0063 },
+ ["uccode"]=0x24B8,
+ ["unicodeslot"]=0x24D2, -- â“’
+ },
+ [0x24D3]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED LATIN SMALL LETTER D",
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x0064 },
+ ["uccode"]=0x24B9,
+ ["unicodeslot"]=0x24D3, -- â““
+ },
+ [0x24D4]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED LATIN SMALL LETTER E",
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x0065 },
+ ["uccode"]=0x24BA,
+ ["unicodeslot"]=0x24D4, -- â“”
+ },
+ [0x24D5]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED LATIN SMALL LETTER F",
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x0066 },
+ ["uccode"]=0x24BB,
+ ["unicodeslot"]=0x24D5, -- â“•
+ },
+ [0x24D6]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED LATIN SMALL LETTER G",
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x0067 },
+ ["uccode"]=0x24BC,
+ ["unicodeslot"]=0x24D6, -- â“–
+ },
+ [0x24D7]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED LATIN SMALL LETTER H",
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x0068 },
+ ["uccode"]=0x24BD,
+ ["unicodeslot"]=0x24D7, -- â“—
+ },
+ [0x24D8]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED LATIN SMALL LETTER I",
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x0069 },
+ ["uccode"]=0x24BE,
+ ["unicodeslot"]=0x24D8, -- ⓘ
+ },
+ [0x24D9]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED LATIN SMALL LETTER J",
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x006A },
+ ["uccode"]=0x24BF,
+ ["unicodeslot"]=0x24D9, -- â“™
+ },
+ [0x24DA]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED LATIN SMALL LETTER K",
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x006B },
+ ["uccode"]=0x24C0,
+ ["unicodeslot"]=0x24DA, -- â“š
+ },
+ [0x24DB]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED LATIN SMALL LETTER L",
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x006C },
+ ["uccode"]=0x24C1,
+ ["unicodeslot"]=0x24DB, -- â“›
+ },
+ [0x24DC]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED LATIN SMALL LETTER M",
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x006D },
+ ["uccode"]=0x24C2,
+ ["unicodeslot"]=0x24DC, -- ⓜ
+ },
+ [0x24DD]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED LATIN SMALL LETTER N",
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x006E },
+ ["uccode"]=0x24C3,
+ ["unicodeslot"]=0x24DD, -- â“
+ },
+ [0x24DE]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED LATIN SMALL LETTER O",
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x006F },
+ ["uccode"]=0x24C4,
+ ["unicodeslot"]=0x24DE, -- â“ž
+ },
+ [0x24DF]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED LATIN SMALL LETTER P",
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x0070 },
+ ["uccode"]=0x24C5,
+ ["unicodeslot"]=0x24DF, -- â“Ÿ
+ },
+ [0x24E0]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED LATIN SMALL LETTER Q",
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x0071 },
+ ["uccode"]=0x24C6,
+ ["unicodeslot"]=0x24E0, -- â“ 
+ },
+ [0x24E1]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED LATIN SMALL LETTER R",
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x0072 },
+ ["uccode"]=0x24C7,
+ ["unicodeslot"]=0x24E1, -- â“¡
+ },
+ [0x24E2]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED LATIN SMALL LETTER S",
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x0073 },
+ ["uccode"]=0x24C8,
+ ["unicodeslot"]=0x24E2, -- â“¢
+ },
+ [0x24E3]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED LATIN SMALL LETTER T",
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x0074 },
+ ["uccode"]=0x24C9,
+ ["unicodeslot"]=0x24E3, -- â“£
+ },
+ [0x24E4]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED LATIN SMALL LETTER U",
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x0075 },
+ ["uccode"]=0x24CA,
+ ["unicodeslot"]=0x24E4, -- ⓤ
+ },
+ [0x24E5]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED LATIN SMALL LETTER V",
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x0076 },
+ ["uccode"]=0x24CB,
+ ["unicodeslot"]=0x24E5, -- â“¥
+ },
+ [0x24E6]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED LATIN SMALL LETTER W",
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x0077 },
+ ["uccode"]=0x24CC,
+ ["unicodeslot"]=0x24E6, -- ⓦ
+ },
+ [0x24E7]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED LATIN SMALL LETTER X",
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x0078 },
+ ["uccode"]=0x24CD,
+ ["unicodeslot"]=0x24E7, -- ⓧ
+ },
+ [0x24E8]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED LATIN SMALL LETTER Y",
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x0079 },
+ ["uccode"]=0x24CE,
+ ["unicodeslot"]=0x24E8, -- ⓨ
+ },
+ [0x24E9]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLED LATIN SMALL LETTER Z",
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x007A },
+ ["uccode"]=0x24CF,
+ ["unicodeslot"]=0x24E9, -- â“©
+ },
+ [0x24EA]={
+ ["category"]="no",
+ ["description"]="CIRCLED DIGIT ZERO",
+ ["linebreak"]="ai",
+ ["specials"]={ "circle", 0x0030 },
+ ["unicodeslot"]=0x24EA, -- ⓪
+ },
+ [0x24EB]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="NEGATIVE CIRCLED NUMBER ELEVEN",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x24EB, -- â“«
+ },
+ [0x24EC]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="NEGATIVE CIRCLED NUMBER TWELVE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x24EC, -- ⓬
+ },
+ [0x24ED]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="NEGATIVE CIRCLED NUMBER THIRTEEN",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x24ED, -- â“­
+ },
+ [0x24EE]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="NEGATIVE CIRCLED NUMBER FOURTEEN",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x24EE, -- â“®
+ },
+ [0x24EF]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="NEGATIVE CIRCLED NUMBER FIFTEEN",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x24EF, -- ⓯
+ },
+ [0x24F0]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="NEGATIVE CIRCLED NUMBER SIXTEEN",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x24F0, -- â“°
+ },
+ [0x24F1]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="NEGATIVE CIRCLED NUMBER SEVENTEEN",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x24F1, -- ⓱
+ },
+ [0x24F2]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="NEGATIVE CIRCLED NUMBER EIGHTEEN",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x24F2, -- ⓲
+ },
+ [0x24F3]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="NEGATIVE CIRCLED NUMBER NINETEEN",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x24F3, -- ⓳
+ },
+ [0x24F4]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="NEGATIVE CIRCLED NUMBER TWENTY",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x24F4, -- â“´
+ },
+ [0x24F5]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="DOUBLE CIRCLED DIGIT ONE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x24F5, -- ⓵
+ },
+ [0x24F6]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="DOUBLE CIRCLED DIGIT TWO",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x24F6, -- ⓶
+ },
+ [0x24F7]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="DOUBLE CIRCLED DIGIT THREE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x24F7, -- â“·
+ },
+ [0x24F8]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="DOUBLE CIRCLED DIGIT FOUR",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x24F8, -- ⓸
+ },
+ [0x24F9]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="DOUBLE CIRCLED DIGIT FIVE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x24F9, -- ⓹
+ },
+ [0x24FA]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="DOUBLE CIRCLED DIGIT SIX",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x24FA, -- ⓺
+ },
+ [0x24FB]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="DOUBLE CIRCLED DIGIT SEVEN",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x24FB, -- â“»
+ },
+ [0x24FC]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="DOUBLE CIRCLED DIGIT EIGHT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x24FC, -- ⓼
+ },
+ [0x24FD]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="DOUBLE CIRCLED DIGIT NINE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x24FD, -- ⓽
+ },
+ [0x24FE]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="DOUBLE CIRCLED NUMBER TEN",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x24FE, -- ⓾
+ },
+ [0x24FF]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="NEGATIVE CIRCLED DIGIT ZERO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x24FF, -- â“¿
+ },
+ [0x2500]={
+ ["adobename"]="SF100000",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS LIGHT HORIZONTAL",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2500, -- ─
+ },
+ [0x2501]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS HEAVY HORIZONTAL",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2501, -- â”
+ },
+ [0x2502]={
+ ["adobename"]="SF110000",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS LIGHT VERTICAL",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2502, -- │
+ },
+ [0x2503]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS HEAVY VERTICAL",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2503, -- ┃
+ },
+ [0x2504]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2504, -- ┄
+ },
+ [0x2505]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2505, -- â”…
+ },
+ [0x2506]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2506, -- ┆
+ },
+ [0x2507]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2507, -- ┇
+ },
+ [0x2508]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2508, -- ┈
+ },
+ [0x2509]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2509, -- ┉
+ },
+ [0x250A]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x250A, -- ┊
+ },
+ [0x250B]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x250B, -- ┋
+ },
+ [0x250C]={
+ ["adobename"]="SF10000",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS LIGHT DOWN AND RIGHT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x250C, -- ┌
+ },
+ [0x250D]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x250D, -- â”
+ },
+ [0x250E]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x250E, -- ┎
+ },
+ [0x250F]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS HEAVY DOWN AND RIGHT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x250F, -- â”
+ },
+ [0x2510]={
+ ["adobename"]="SF30000",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS LIGHT DOWN AND LEFT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2510, -- â”
+ },
+ [0x2511]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2511, -- ┑
+ },
+ [0x2512]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2512, -- â”’
+ },
+ [0x2513]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS HEAVY DOWN AND LEFT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2513, -- ┓
+ },
+ [0x2514]={
+ ["adobename"]="SF20000",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS LIGHT UP AND RIGHT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2514, -- â””
+ },
+ [0x2515]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS UP LIGHT AND RIGHT HEAVY",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2515, -- ┕
+ },
+ [0x2516]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS UP HEAVY AND RIGHT LIGHT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2516, -- â”–
+ },
+ [0x2517]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS HEAVY UP AND RIGHT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2517, -- â”—
+ },
+ [0x2518]={
+ ["adobename"]="SF40000",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS LIGHT UP AND LEFT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2518, -- ┘
+ },
+ [0x2519]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS UP LIGHT AND LEFT HEAVY",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2519, -- â”™
+ },
+ [0x251A]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS UP HEAVY AND LEFT LIGHT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x251A, -- ┚
+ },
+ [0x251B]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS HEAVY UP AND LEFT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x251B, -- â”›
+ },
+ [0x251C]={
+ ["adobename"]="SF80000",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS LIGHT VERTICAL AND RIGHT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x251C, -- ├
+ },
+ [0x251D]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x251D, -- â”
+ },
+ [0x251E]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x251E, -- ┞
+ },
+ [0x251F]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x251F, -- ┟
+ },
+ [0x2520]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2520, -- â” 
+ },
+ [0x2521]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2521, -- ┡
+ },
+ [0x2522]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2522, -- ┢
+ },
+ [0x2523]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS HEAVY VERTICAL AND RIGHT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2523, -- ┣
+ },
+ [0x2524]={
+ ["adobename"]="SF90000",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS LIGHT VERTICAL AND LEFT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2524, -- ┤
+ },
+ [0x2525]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2525, -- ┥
+ },
+ [0x2526]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2526, -- ┦
+ },
+ [0x2527]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2527, -- ┧
+ },
+ [0x2528]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2528, -- ┨
+ },
+ [0x2529]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2529, -- ┩
+ },
+ [0x252A]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x252A, -- ┪
+ },
+ [0x252B]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS HEAVY VERTICAL AND LEFT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x252B, -- ┫
+ },
+ [0x252C]={
+ ["adobename"]="SF60000",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS LIGHT DOWN AND HORIZONTAL",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x252C, -- ┬
+ },
+ [0x252D]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x252D, -- â”­
+ },
+ [0x252E]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x252E, -- â”®
+ },
+ [0x252F]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x252F, -- ┯
+ },
+ [0x2530]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2530, -- â”°
+ },
+ [0x2531]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2531, -- â”±
+ },
+ [0x2532]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2532, -- ┲
+ },
+ [0x2533]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS HEAVY DOWN AND HORIZONTAL",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2533, -- ┳
+ },
+ [0x2534]={
+ ["adobename"]="SF70000",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS LIGHT UP AND HORIZONTAL",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2534, -- â”´
+ },
+ [0x2535]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2535, -- ┵
+ },
+ [0x2536]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2536, -- ┶
+ },
+ [0x2537]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2537, -- â”·
+ },
+ [0x2538]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2538, -- ┸
+ },
+ [0x2539]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2539, -- ┹
+ },
+ [0x253A]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x253A, -- ┺
+ },
+ [0x253B]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS HEAVY UP AND HORIZONTAL",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x253B, -- â”»
+ },
+ [0x253C]={
+ ["adobename"]="SF50000",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x253C, -- ┼
+ },
+ [0x253D]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x253D, -- ┽
+ },
+ [0x253E]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x253E, -- ┾
+ },
+ [0x253F]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x253F, -- ┿
+ },
+ [0x2540]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2540, -- â•€
+ },
+ [0x2541]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2541, -- â•
+ },
+ [0x2542]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2542, -- â•‚
+ },
+ [0x2543]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2543, -- ╃
+ },
+ [0x2544]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2544, -- â•„
+ },
+ [0x2545]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2545, -- â•…
+ },
+ [0x2546]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2546, -- ╆
+ },
+ [0x2547]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2547, -- ╇
+ },
+ [0x2548]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2548, -- ╈
+ },
+ [0x2549]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2549, -- ╉
+ },
+ [0x254A]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x254A, -- â•Š
+ },
+ [0x254B]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x254B, -- â•‹
+ },
+ [0x254C]={
+ ["category"]="so",
+ ["description"]="BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x254C, -- ╌
+ },
+ [0x254D]={
+ ["category"]="so",
+ ["description"]="BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x254D, -- â•
+ },
+ [0x254E]={
+ ["category"]="so",
+ ["description"]="BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x254E, -- â•Ž
+ },
+ [0x254F]={
+ ["category"]="so",
+ ["description"]="BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x254F, -- â•
+ },
+ [0x2550]={
+ ["adobename"]="SF430000",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS DOUBLE HORIZONTAL",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2550, -- â•
+ },
+ [0x2551]={
+ ["adobename"]="SF240000",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS DOUBLE VERTICAL",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2551, -- â•‘
+ },
+ [0x2552]={
+ ["adobename"]="SF510000",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2552, -- â•’
+ },
+ [0x2553]={
+ ["adobename"]="SF520000",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2553, -- â•“
+ },
+ [0x2554]={
+ ["adobename"]="SF390000",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS DOUBLE DOWN AND RIGHT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2554, -- â•”
+ },
+ [0x2555]={
+ ["adobename"]="SF220000",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2555, -- â••
+ },
+ [0x2556]={
+ ["adobename"]="SF210000",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2556, -- â•–
+ },
+ [0x2557]={
+ ["adobename"]="SF250000",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS DOUBLE DOWN AND LEFT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2557, -- â•—
+ },
+ [0x2558]={
+ ["adobename"]="SF500000",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2558, -- ╘
+ },
+ [0x2559]={
+ ["adobename"]="SF490000",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2559, -- â•™
+ },
+ [0x255A]={
+ ["adobename"]="SF380000",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS DOUBLE UP AND RIGHT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x255A, -- â•š
+ },
+ [0x255B]={
+ ["adobename"]="SF280000",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS UP SINGLE AND LEFT DOUBLE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x255B, -- â•›
+ },
+ [0x255C]={
+ ["adobename"]="SF270000",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS UP DOUBLE AND LEFT SINGLE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x255C, -- ╜
+ },
+ [0x255D]={
+ ["adobename"]="SF260000",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS DOUBLE UP AND LEFT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x255D, -- â•
+ },
+ [0x255E]={
+ ["adobename"]="SF360000",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x255E, -- â•ž
+ },
+ [0x255F]={
+ ["adobename"]="SF370000",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x255F, -- â•Ÿ
+ },
+ [0x2560]={
+ ["adobename"]="SF420000",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS DOUBLE VERTICAL AND RIGHT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2560, -- â• 
+ },
+ [0x2561]={
+ ["adobename"]="SF190000",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2561, -- â•¡
+ },
+ [0x2562]={
+ ["adobename"]="SF200000",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2562, -- â•¢
+ },
+ [0x2563]={
+ ["adobename"]="SF230000",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS DOUBLE VERTICAL AND LEFT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2563, -- â•£
+ },
+ [0x2564]={
+ ["adobename"]="SF470000",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2564, -- ╤
+ },
+ [0x2565]={
+ ["adobename"]="SF480000",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2565, -- â•¥
+ },
+ [0x2566]={
+ ["adobename"]="SF410000",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2566, -- ╦
+ },
+ [0x2567]={
+ ["adobename"]="SF450000",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2567, -- ╧
+ },
+ [0x2568]={
+ ["adobename"]="SF460000",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2568, -- ╨
+ },
+ [0x2569]={
+ ["adobename"]="SF400000",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS DOUBLE UP AND HORIZONTAL",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2569, -- â•©
+ },
+ [0x256A]={
+ ["adobename"]="SF540000",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x256A, -- ╪
+ },
+ [0x256B]={
+ ["adobename"]="SF530000",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x256B, -- â•«
+ },
+ [0x256C]={
+ ["adobename"]="SF440000",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x256C, -- ╬
+ },
+ [0x256D]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS LIGHT ARC DOWN AND RIGHT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x256D, -- â•­
+ },
+ [0x256E]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS LIGHT ARC DOWN AND LEFT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x256E, -- â•®
+ },
+ [0x256F]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS LIGHT ARC UP AND LEFT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x256F, -- ╯
+ },
+ [0x2570]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS LIGHT ARC UP AND RIGHT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2570, -- â•°
+ },
+ [0x2571]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2571, -- ╱
+ },
+ [0x2572]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2572, -- ╲
+ },
+ [0x2573]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BOX DRAWINGS LIGHT DIAGONAL CROSS",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2573, -- ╳
+ },
+ [0x2574]={
+ ["category"]="so",
+ ["description"]="BOX DRAWINGS LIGHT LEFT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2574, -- â•´
+ },
+ [0x2575]={
+ ["category"]="so",
+ ["description"]="BOX DRAWINGS LIGHT UP",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2575, -- ╵
+ },
+ [0x2576]={
+ ["category"]="so",
+ ["description"]="BOX DRAWINGS LIGHT RIGHT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2576, -- ╶
+ },
+ [0x2577]={
+ ["category"]="so",
+ ["description"]="BOX DRAWINGS LIGHT DOWN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2577, -- â•·
+ },
+ [0x2578]={
+ ["category"]="so",
+ ["description"]="BOX DRAWINGS HEAVY LEFT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2578, -- ╸
+ },
+ [0x2579]={
+ ["category"]="so",
+ ["description"]="BOX DRAWINGS HEAVY UP",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2579, -- ╹
+ },
+ [0x257A]={
+ ["category"]="so",
+ ["description"]="BOX DRAWINGS HEAVY RIGHT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x257A, -- ╺
+ },
+ [0x257B]={
+ ["category"]="so",
+ ["description"]="BOX DRAWINGS HEAVY DOWN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x257B, -- â•»
+ },
+ [0x257C]={
+ ["category"]="so",
+ ["description"]="BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x257C, -- ╼
+ },
+ [0x257D]={
+ ["category"]="so",
+ ["description"]="BOX DRAWINGS LIGHT UP AND HEAVY DOWN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x257D, -- ╽
+ },
+ [0x257E]={
+ ["category"]="so",
+ ["description"]="BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x257E, -- ╾
+ },
+ [0x257F]={
+ ["category"]="so",
+ ["description"]="BOX DRAWINGS HEAVY UP AND LIGHT DOWN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x257F, -- â•¿
+ },
+ [0x2580]={
+ ["adobename"]="upblock",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="UPPER HALF BLOCK",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2580, -- â–€
+ },
+ [0x2581]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="LOWER ONE EIGHTH BLOCK",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2581, -- â–
+ },
+ [0x2582]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="LOWER ONE QUARTER BLOCK",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2582, -- â–‚
+ },
+ [0x2583]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="LOWER THREE EIGHTHS BLOCK",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2583, -- â–ƒ
+ },
+ [0x2584]={
+ ["adobename"]="dnblock",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="LOWER HALF BLOCK",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2584, -- â–„
+ },
+ [0x2585]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="LOWER FIVE EIGHTHS BLOCK",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2585, -- â–…
+ },
+ [0x2586]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="LOWER THREE QUARTERS BLOCK",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2586, -- â–†
+ },
+ [0x2587]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="LOWER SEVEN EIGHTHS BLOCK",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2587, -- â–‡
+ },
+ [0x2588]={
+ ["adobename"]="block",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="FULL BLOCK",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2588, -- â–ˆ
+ },
+ [0x2589]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="LEFT SEVEN EIGHTHS BLOCK",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2589, -- â–‰
+ },
+ [0x258A]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="LEFT THREE QUARTERS BLOCK",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x258A, -- â–Š
+ },
+ [0x258B]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="LEFT FIVE EIGHTHS BLOCK",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x258B, -- â–‹
+ },
+ [0x258C]={
+ ["adobename"]="lfblock",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="LEFT HALF BLOCK",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x258C, -- ▌
+ },
+ [0x258D]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="LEFT THREE EIGHTHS BLOCK",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x258D, -- â–
+ },
+ [0x258E]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="LEFT ONE QUARTER BLOCK",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x258E, -- â–Ž
+ },
+ [0x258F]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="LEFT ONE EIGHTH BLOCK",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x258F, -- â–
+ },
+ [0x2590]={
+ ["adobename"]="rtblock",
+ ["category"]="so",
+ ["description"]="RIGHT HALF BLOCK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2590, -- â–
+ },
+ [0x2591]={
+ ["adobename"]="ltshade",
+ ["category"]="so",
+ ["description"]="LIGHT SHADE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2591, -- â–‘
+ },
+ [0x2592]={
+ ["adobename"]="shade",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="MEDIUM SHADE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2592, -- â–’
+ },
+ [0x2593]={
+ ["adobename"]="dkshade",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="DARK SHADE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2593, -- â–“
+ },
+ [0x2594]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="UPPER ONE EIGHTH BLOCK",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2594, -- â–”
+ },
+ [0x2595]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="RIGHT ONE EIGHTH BLOCK",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2595, -- â–•
+ },
+ [0x2596]={
+ ["category"]="so",
+ ["description"]="QUADRANT LOWER LEFT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2596, -- â––
+ },
+ [0x2597]={
+ ["category"]="so",
+ ["description"]="QUADRANT LOWER RIGHT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2597, -- â–—
+ },
+ [0x2598]={
+ ["category"]="so",
+ ["description"]="QUADRANT UPPER LEFT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2598, -- â–˜
+ },
+ [0x2599]={
+ ["category"]="so",
+ ["description"]="QUADRANT UPPER LEFT AND LOWER LEFT AND LOWER RIGHT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2599, -- â–™
+ },
+ [0x259A]={
+ ["category"]="so",
+ ["description"]="QUADRANT UPPER LEFT AND LOWER RIGHT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x259A, -- â–š
+ },
+ [0x259B]={
+ ["category"]="so",
+ ["description"]="QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER LEFT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x259B, -- â–›
+ },
+ [0x259C]={
+ ["category"]="so",
+ ["description"]="QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER RIGHT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x259C, -- ▜
+ },
+ [0x259D]={
+ ["category"]="so",
+ ["description"]="QUADRANT UPPER RIGHT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x259D, -- â–
+ },
+ [0x259E]={
+ ["category"]="so",
+ ["description"]="QUADRANT UPPER RIGHT AND LOWER LEFT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x259E, -- â–ž
+ },
+ [0x259F]={
+ ["category"]="so",
+ ["description"]="QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x259F, -- â–Ÿ
+ },
+ [0x25A0]={
+ ["adobename"]="filledbox",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BLACK SQUARE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x25A0, -- â– 
+ },
+ [0x25A1]={
+ ["adobename"]="H22073",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="WHITE SQUARE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x25A1, -- â–¡
+ },
+ [0x25A2]={
+ ["category"]="so",
+ ["description"]="WHITE SQUARE WITH ROUNDED CORNERS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25A2, -- â–¢
+ },
+ [0x25A3]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="WHITE SQUARE CONTAINING BLACK SMALL SQUARE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x25A3, -- â–£
+ },
+ [0x25A4]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="SQUARE WITH HORIZONTAL FILL",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x25A4, -- â–¤
+ },
+ [0x25A5]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="SQUARE WITH VERTICAL FILL",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x25A5, -- â–¥
+ },
+ [0x25A6]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="SQUARE WITH ORTHOGONAL CROSSHATCH FILL",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x25A6, -- â–¦
+ },
+ [0x25A7]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x25A7, -- â–§
+ },
+ [0x25A8]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x25A8, -- â–¨
+ },
+ [0x25A9]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="SQUARE WITH DIAGONAL CROSSHATCH FILL",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x25A9, -- â–©
+ },
+ [0x25AA]={
+ ["adobename"]="H18543",
+ ["category"]="so",
+ ["description"]="BLACK SMALL SQUARE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25AA, -- â–ª
+ },
+ [0x25AB]={
+ ["adobename"]="H18551",
+ ["category"]="so",
+ ["description"]="WHITE SMALL SQUARE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25AB, -- â–«
+ },
+ [0x25AC]={
+ ["adobename"]="filledrect",
+ ["category"]="so",
+ ["description"]="BLACK RECTANGLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25AC, -- â–¬
+ },
+ [0x25AD]={
+ ["category"]="so",
+ ["description"]="WHITE RECTANGLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25AD, -- â–­
+ },
+ [0x25AE]={
+ ["category"]="so",
+ ["description"]="BLACK VERTICAL RECTANGLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25AE, -- â–®
+ },
+ [0x25AF]={
+ ["category"]="so",
+ ["description"]="WHITE VERTICAL RECTANGLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25AF, -- â–¯
+ },
+ [0x25B0]={
+ ["category"]="so",
+ ["description"]="BLACK PARALLELOGRAM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25B0, -- â–°
+ },
+ [0x25B1]={
+ ["category"]="so",
+ ["description"]="WHITE PARALLELOGRAM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25B1, -- â–±
+ },
+ [0x25B2]={
+ ["adobename"]="triagup",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BLACK UP-POINTING TRIANGLE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x25B2, -- â–²
+ },
+ [0x25B3]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="WHITE UP-POINTING TRIANGLE",
+ ["linebreak"]="ai",
+ ["mathclass"]="ord",
+ ["mathname"]="triangle",
+ ["unicodeslot"]=0x25B3, -- â–³
+ },
+ [0x25B4]={
+ ["category"]="so",
+ ["description"]="BLACK UP-POINTING SMALL TRIANGLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25B4, -- â–´
+ },
+ [0x25B5]={
+ ["category"]="so",
+ ["description"]="WHITE UP-POINTING SMALL TRIANGLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25B5, -- â–µ
+ },
+ [0x25B6]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BLACK RIGHT-POINTING TRIANGLE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x25B6, -- â–¶
+ },
+ [0x25B7]={
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["description"]="WHITE RIGHT-POINTING TRIANGLE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x25B7, -- â–·
+ },
+ [0x25B8]={
+ ["category"]="so",
+ ["description"]="BLACK RIGHT-POINTING SMALL TRIANGLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25B8, -- â–¸
+ },
+ [0x25B9]={
+ ["category"]="so",
+ ["description"]="WHITE RIGHT-POINTING SMALL TRIANGLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25B9, -- â–¹
+ },
+ [0x25BA]={
+ ["adobename"]="triagrt",
+ ["category"]="so",
+ ["description"]="BLACK RIGHT-POINTING POINTER",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25BA, -- â–º
+ },
+ [0x25BB]={
+ ["category"]="so",
+ ["description"]="WHITE RIGHT-POINTING POINTER",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25BB, -- â–»
+ },
+ [0x25BC]={
+ ["adobename"]="triagdn",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BLACK DOWN-POINTING TRIANGLE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x25BC, -- â–¼
+ },
+ [0x25BD]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="WHITE DOWN-POINTING TRIANGLE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x25BD, -- â–½
+ },
+ [0x25BE]={
+ ["category"]="so",
+ ["description"]="BLACK DOWN-POINTING SMALL TRIANGLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25BE, -- â–¾
+ },
+ [0x25BF]={
+ ["category"]="so",
+ ["description"]="WHITE DOWN-POINTING SMALL TRIANGLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25BF, -- â–¿
+ },
+ [0x25C0]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BLACK LEFT-POINTING TRIANGLE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x25C0, -- â—€
+ },
+ [0x25C1]={
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["description"]="WHITE LEFT-POINTING TRIANGLE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x25C1, -- â—
+ },
+ [0x25C2]={
+ ["category"]="so",
+ ["description"]="BLACK LEFT-POINTING SMALL TRIANGLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25C2, -- â—‚
+ },
+ [0x25C3]={
+ ["category"]="so",
+ ["description"]="WHITE LEFT-POINTING SMALL TRIANGLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25C3, -- â—ƒ
+ },
+ [0x25C4]={
+ ["adobename"]="triaglf",
+ ["category"]="so",
+ ["description"]="BLACK LEFT-POINTING POINTER",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25C4, -- â—„
+ },
+ [0x25C5]={
+ ["category"]="so",
+ ["description"]="WHITE LEFT-POINTING POINTER",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25C5, -- â—…
+ },
+ [0x25C6]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BLACK DIAMOND",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x25C6, -- â—†
+ },
+ [0x25C7]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="WHITE DIAMOND",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x25C7, -- â—‡
+ },
+ [0x25C8]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x25C8, -- â—ˆ
+ },
+ [0x25C9]={
+ ["category"]="so",
+ ["description"]="FISHEYE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25C9, -- â—‰
+ },
+ [0x25CA]={
+ ["adobename"]="lozenge",
+ ["category"]="so",
+ ["description"]="LOZENGE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25CA, -- â—Š
+ },
+ [0x25CB]={
+ ["adobename"]="circle",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="WHITE CIRCLE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x25CB, -- â—‹
+ },
+ [0x25CC]={
+ ["category"]="so",
+ ["description"]="DOTTED CIRCLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25CC, -- ◌
+ },
+ [0x25CD]={
+ ["category"]="so",
+ ["description"]="CIRCLE WITH VERTICAL FILL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25CD, -- â—
+ },
+ [0x25CE]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BULLSEYE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x25CE, -- â—Ž
+ },
+ [0x25CF]={
+ ["adobename"]="H18533",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BLACK CIRCLE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x25CF, -- â—
+ },
+ [0x25D0]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLE WITH LEFT HALF BLACK",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x25D0, -- â—
+ },
+ [0x25D1]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="CIRCLE WITH RIGHT HALF BLACK",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x25D1, -- â—‘
+ },
+ [0x25D2]={
+ ["category"]="so",
+ ["description"]="CIRCLE WITH LOWER HALF BLACK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25D2, -- â—’
+ },
+ [0x25D3]={
+ ["category"]="so",
+ ["description"]="CIRCLE WITH UPPER HALF BLACK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25D3, -- â—“
+ },
+ [0x25D4]={
+ ["category"]="so",
+ ["description"]="CIRCLE WITH UPPER RIGHT QUADRANT BLACK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25D4, -- â—”
+ },
+ [0x25D5]={
+ ["category"]="so",
+ ["description"]="CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25D5, -- â—•
+ },
+ [0x25D6]={
+ ["category"]="so",
+ ["description"]="LEFT HALF BLACK CIRCLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25D6, -- â—–
+ },
+ [0x25D7]={
+ ["category"]="so",
+ ["description"]="RIGHT HALF BLACK CIRCLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25D7, -- â——
+ },
+ [0x25D8]={
+ ["adobename"]="invbullet",
+ ["category"]="so",
+ ["description"]="INVERSE BULLET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25D8, -- â—˜
+ },
+ [0x25D9]={
+ ["adobename"]="invcircle",
+ ["category"]="so",
+ ["description"]="INVERSE WHITE CIRCLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25D9, -- â—™
+ },
+ [0x25DA]={
+ ["category"]="so",
+ ["description"]="UPPER HALF INVERSE WHITE CIRCLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25DA, -- â—š
+ },
+ [0x25DB]={
+ ["category"]="so",
+ ["description"]="LOWER HALF INVERSE WHITE CIRCLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25DB, -- â—›
+ },
+ [0x25DC]={
+ ["category"]="so",
+ ["description"]="UPPER LEFT QUADRANT CIRCULAR ARC",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25DC, -- ◜
+ },
+ [0x25DD]={
+ ["category"]="so",
+ ["description"]="UPPER RIGHT QUADRANT CIRCULAR ARC",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25DD, -- â—
+ },
+ [0x25DE]={
+ ["category"]="so",
+ ["description"]="LOWER RIGHT QUADRANT CIRCULAR ARC",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25DE, -- â—ž
+ },
+ [0x25DF]={
+ ["category"]="so",
+ ["description"]="LOWER LEFT QUADRANT CIRCULAR ARC",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25DF, -- â—Ÿ
+ },
+ [0x25E0]={
+ ["category"]="so",
+ ["description"]="UPPER HALF CIRCLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25E0, -- â— 
+ },
+ [0x25E1]={
+ ["category"]="so",
+ ["description"]="LOWER HALF CIRCLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25E1, -- â—¡
+ },
+ [0x25E2]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BLACK LOWER RIGHT TRIANGLE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x25E2, -- â—¢
+ },
+ [0x25E3]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BLACK LOWER LEFT TRIANGLE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x25E3, -- â—£
+ },
+ [0x25E4]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BLACK UPPER LEFT TRIANGLE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x25E4, -- â—¤
+ },
+ [0x25E5]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BLACK UPPER RIGHT TRIANGLE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x25E5, -- â—¥
+ },
+ [0x25E6]={
+ ["adobename"]="openbullet",
+ ["category"]="so",
+ ["description"]="WHITE BULLET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25E6, -- â—¦
+ },
+ [0x25E7]={
+ ["category"]="so",
+ ["description"]="SQUARE WITH LEFT HALF BLACK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25E7, -- â—§
+ },
+ [0x25E8]={
+ ["category"]="so",
+ ["description"]="SQUARE WITH RIGHT HALF BLACK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25E8, -- â—¨
+ },
+ [0x25E9]={
+ ["category"]="so",
+ ["description"]="SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25E9, -- â—©
+ },
+ [0x25EA]={
+ ["category"]="so",
+ ["description"]="SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25EA, -- â—ª
+ },
+ [0x25EB]={
+ ["category"]="so",
+ ["description"]="WHITE SQUARE WITH VERTICAL BISECTING LINE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25EB, -- â—«
+ },
+ [0x25EC]={
+ ["category"]="so",
+ ["description"]="WHITE UP-POINTING TRIANGLE WITH DOT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25EC, -- â—¬
+ },
+ [0x25ED]={
+ ["category"]="so",
+ ["description"]="UP-POINTING TRIANGLE WITH LEFT HALF BLACK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25ED, -- â—­
+ },
+ [0x25EE]={
+ ["category"]="so",
+ ["description"]="UP-POINTING TRIANGLE WITH RIGHT HALF BLACK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25EE, -- â—®
+ },
+ [0x25EF]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="LARGE CIRCLE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x25EF, -- â—¯
+ },
+ [0x25F0]={
+ ["category"]="so",
+ ["description"]="WHITE SQUARE WITH UPPER LEFT QUADRANT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25F0, -- â—°
+ },
+ [0x25F1]={
+ ["category"]="so",
+ ["description"]="WHITE SQUARE WITH LOWER LEFT QUADRANT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25F1, -- â—±
+ },
+ [0x25F2]={
+ ["category"]="so",
+ ["description"]="WHITE SQUARE WITH LOWER RIGHT QUADRANT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25F2, -- â—²
+ },
+ [0x25F3]={
+ ["category"]="so",
+ ["description"]="WHITE SQUARE WITH UPPER RIGHT QUADRANT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25F3, -- â—³
+ },
+ [0x25F4]={
+ ["category"]="so",
+ ["description"]="WHITE CIRCLE WITH UPPER LEFT QUADRANT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25F4, -- â—´
+ },
+ [0x25F5]={
+ ["category"]="so",
+ ["description"]="WHITE CIRCLE WITH LOWER LEFT QUADRANT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25F5, -- â—µ
+ },
+ [0x25F6]={
+ ["category"]="so",
+ ["description"]="WHITE CIRCLE WITH LOWER RIGHT QUADRANT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25F6, -- â—¶
+ },
+ [0x25F7]={
+ ["category"]="so",
+ ["description"]="WHITE CIRCLE WITH UPPER RIGHT QUADRANT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25F7, -- â—·
+ },
+ [0x25F8]={
+ ["category"]="sm",
+ ["description"]="UPPER LEFT TRIANGLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25F8, -- â—¸
+ },
+ [0x25F9]={
+ ["category"]="sm",
+ ["description"]="UPPER RIGHT TRIANGLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25F9, -- â—¹
+ },
+ [0x25FA]={
+ ["category"]="sm",
+ ["description"]="LOWER LEFT TRIANGLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25FA, -- â—º
+ },
+ [0x25FB]={
+ ["category"]="sm",
+ ["description"]="WHITE MEDIUM SQUARE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25FB, -- â—»
+ },
+ [0x25FC]={
+ ["category"]="sm",
+ ["description"]="BLACK MEDIUM SQUARE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25FC, -- â—¼
+ },
+ [0x25FD]={
+ ["category"]="sm",
+ ["description"]="WHITE MEDIUM SMALL SQUARE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25FD, -- â—½
+ },
+ [0x25FE]={
+ ["category"]="sm",
+ ["description"]="BLACK MEDIUM SMALL SQUARE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25FE, -- â—¾
+ },
+ [0x25FF]={
+ ["category"]="sm",
+ ["description"]="LOWER RIGHT TRIANGLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x25FF, -- â—¿
+ },
+ [0x2600]={
+ ["category"]="so",
+ ["description"]="BLACK SUN WITH RAYS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2600, -- ☀
+ },
+ [0x2601]={
+ ["category"]="so",
+ ["description"]="CLOUD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2601, -- â˜
+ },
+ [0x2602]={
+ ["category"]="so",
+ ["description"]="UMBRELLA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2602, -- ☂
+ },
+ [0x2603]={
+ ["category"]="so",
+ ["description"]="SNOWMAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2603, -- ☃
+ },
+ [0x2604]={
+ ["category"]="so",
+ ["description"]="COMET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2604, -- ☄
+ },
+ [0x2605]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BLACK STAR",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2605, -- ★
+ },
+ [0x2606]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="WHITE STAR",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2606, -- ☆
+ },
+ [0x2607]={
+ ["category"]="so",
+ ["description"]="LIGHTNING",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2607, -- ☇
+ },
+ [0x2608]={
+ ["category"]="so",
+ ["description"]="THUNDERSTORM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2608, -- ☈
+ },
+ [0x2609]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="SUN",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2609, -- ☉
+ },
+ [0x260A]={
+ ["category"]="so",
+ ["description"]="ASCENDING NODE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x260A, -- ☊
+ },
+ [0x260B]={
+ ["category"]="so",
+ ["description"]="DESCENDING NODE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x260B, -- ☋
+ },
+ [0x260C]={
+ ["category"]="so",
+ ["description"]="CONJUNCTION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x260C, -- ☌
+ },
+ [0x260D]={
+ ["category"]="so",
+ ["description"]="OPPOSITION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x260D, -- â˜
+ },
+ [0x260E]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BLACK TELEPHONE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x260E, -- ☎
+ },
+ [0x260F]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="WHITE TELEPHONE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x260F, -- â˜
+ },
+ [0x2610]={
+ ["category"]="so",
+ ["description"]="BALLOT BOX",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2610, -- â˜
+ },
+ [0x2611]={
+ ["category"]="so",
+ ["description"]="BALLOT BOX WITH CHECK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2611, -- ☑
+ },
+ [0x2612]={
+ ["category"]="so",
+ ["description"]="BALLOT BOX WITH X",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2612, -- ☒
+ },
+ [0x2613]={
+ ["category"]="so",
+ ["description"]="SALTIRE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2613, -- ☓
+ },
+ [0x2614]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="UMBRELLA WITH RAIN DROPS",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2614, -- ☔
+ },
+ [0x2615]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="HOT BEVERAGE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2615, -- ☕
+ },
+ [0x2616]={
+ ["category"]="so",
+ ["description"]="WHITE SHOGI PIECE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2616, -- ☖
+ },
+ [0x2617]={
+ ["category"]="so",
+ ["description"]="BLACK SHOGI PIECE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2617, -- ☗
+ },
+ [0x2618]={
+ ["category"]="so",
+ ["description"]="SHAMROCK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2618, -- ☘
+ },
+ [0x2619]={
+ ["category"]="so",
+ ["description"]="REVERSED ROTATED FLORAL HEART BULLET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2619, -- ☙
+ },
+ [0x261A]={
+ ["category"]="so",
+ ["description"]="BLACK LEFT POINTING INDEX",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x261A, -- ☚
+ },
+ [0x261B]={
+ ["category"]="so",
+ ["description"]="BLACK RIGHT POINTING INDEX",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x261B, -- ☛
+ },
+ [0x261C]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="WHITE LEFT POINTING INDEX",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x261C, -- ☜
+ },
+ [0x261D]={
+ ["category"]="so",
+ ["description"]="WHITE UP POINTING INDEX",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x261D, -- â˜
+ },
+ [0x261E]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="WHITE RIGHT POINTING INDEX",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x261E, -- ☞
+ },
+ [0x261F]={
+ ["category"]="so",
+ ["description"]="WHITE DOWN POINTING INDEX",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x261F, -- ☟
+ },
+ [0x2620]={
+ ["category"]="so",
+ ["description"]="SKULL AND CROSSBONES",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2620, -- ☠
+ },
+ [0x2621]={
+ ["category"]="so",
+ ["description"]="CAUTION SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2621, -- ☡
+ },
+ [0x2622]={
+ ["category"]="so",
+ ["description"]="RADIOACTIVE SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2622, -- ☢
+ },
+ [0x2623]={
+ ["category"]="so",
+ ["description"]="BIOHAZARD SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2623, -- ☣
+ },
+ [0x2624]={
+ ["category"]="so",
+ ["description"]="CADUCEUS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2624, -- ☤
+ },
+ [0x2625]={
+ ["category"]="so",
+ ["description"]="ANKH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2625, -- ☥
+ },
+ [0x2626]={
+ ["category"]="so",
+ ["description"]="ORTHODOX CROSS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2626, -- ☦
+ },
+ [0x2627]={
+ ["category"]="so",
+ ["description"]="CHI RHO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2627, -- ☧
+ },
+ [0x2628]={
+ ["category"]="so",
+ ["description"]="CROSS OF LORRAINE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2628, -- ☨
+ },
+ [0x2629]={
+ ["category"]="so",
+ ["description"]="CROSS OF JERUSALEM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2629, -- ☩
+ },
+ [0x262A]={
+ ["category"]="so",
+ ["description"]="STAR AND CRESCENT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x262A, -- ☪
+ },
+ [0x262B]={
+ ["category"]="so",
+ ["description"]="FARSI SYMBOL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x262B, -- ☫
+ },
+ [0x262C]={
+ ["category"]="so",
+ ["description"]="ADI SHAKTI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x262C, -- ☬
+ },
+ [0x262D]={
+ ["category"]="so",
+ ["description"]="HAMMER AND SICKLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x262D, -- ☭
+ },
+ [0x262E]={
+ ["category"]="so",
+ ["description"]="PEACE SYMBOL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x262E, -- ☮
+ },
+ [0x262F]={
+ ["category"]="so",
+ ["description"]="YIN YANG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x262F, -- ☯
+ },
+ [0x2630]={
+ ["category"]="so",
+ ["description"]="TRIGRAM FOR HEAVEN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2630, -- ☰
+ },
+ [0x2631]={
+ ["category"]="so",
+ ["description"]="TRIGRAM FOR LAKE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2631, -- ☱
+ },
+ [0x2632]={
+ ["category"]="so",
+ ["description"]="TRIGRAM FOR FIRE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2632, -- ☲
+ },
+ [0x2633]={
+ ["category"]="so",
+ ["description"]="TRIGRAM FOR THUNDER",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2633, -- ☳
+ },
+ [0x2634]={
+ ["category"]="so",
+ ["description"]="TRIGRAM FOR WIND",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2634, -- ☴
+ },
+ [0x2635]={
+ ["category"]="so",
+ ["description"]="TRIGRAM FOR WATER",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2635, -- ☵
+ },
+ [0x2636]={
+ ["category"]="so",
+ ["description"]="TRIGRAM FOR MOUNTAIN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2636, -- ☶
+ },
+ [0x2637]={
+ ["category"]="so",
+ ["description"]="TRIGRAM FOR EARTH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2637, -- ☷
+ },
+ [0x2638]={
+ ["category"]="so",
+ ["description"]="WHEEL OF DHARMA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2638, -- ☸
+ },
+ [0x2639]={
+ ["category"]="so",
+ ["description"]="WHITE FROWNING FACE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2639, -- ☹
+ },
+ [0x263A]={
+ ["adobename"]="smileface",
+ ["category"]="so",
+ ["description"]="WHITE SMILING FACE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x263A, -- ☺
+ },
+ [0x263B]={
+ ["adobename"]="invsmileface",
+ ["category"]="so",
+ ["description"]="BLACK SMILING FACE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x263B, -- ☻
+ },
+ [0x263C]={
+ ["adobename"]="sun",
+ ["category"]="so",
+ ["description"]="WHITE SUN WITH RAYS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x263C, -- ☼
+ },
+ [0x263D]={
+ ["category"]="so",
+ ["description"]="FIRST QUARTER MOON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x263D, -- ☽
+ },
+ [0x263E]={
+ ["category"]="so",
+ ["description"]="LAST QUARTER MOON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x263E, -- ☾
+ },
+ [0x263F]={
+ ["category"]="so",
+ ["description"]="MERCURY",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x263F, -- ☿
+ },
+ [0x2640]={
+ ["adobename"]="female",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="FEMALE SIGN",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2640, -- ♀
+ },
+ [0x2641]={
+ ["category"]="so",
+ ["description"]="EARTH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2641, -- â™
+ },
+ [0x2642]={
+ ["adobename"]="male",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="MALE SIGN",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2642, -- ♂
+ },
+ [0x2643]={
+ ["category"]="so",
+ ["description"]="JUPITER",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2643, -- ♃
+ },
+ [0x2644]={
+ ["category"]="so",
+ ["description"]="SATURN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2644, -- ♄
+ },
+ [0x2645]={
+ ["category"]="so",
+ ["description"]="URANUS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2645, -- â™…
+ },
+ [0x2646]={
+ ["category"]="so",
+ ["description"]="NEPTUNE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2646, -- ♆
+ },
+ [0x2647]={
+ ["category"]="so",
+ ["description"]="PLUTO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2647, -- ♇
+ },
+ [0x2648]={
+ ["category"]="so",
+ ["description"]="ARIES",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2648, -- ♈
+ },
+ [0x2649]={
+ ["category"]="so",
+ ["description"]="TAURUS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2649, -- ♉
+ },
+ [0x264A]={
+ ["category"]="so",
+ ["description"]="GEMINI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x264A, -- ♊
+ },
+ [0x264B]={
+ ["category"]="so",
+ ["description"]="CANCER",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x264B, -- ♋
+ },
+ [0x264C]={
+ ["category"]="so",
+ ["description"]="LEO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x264C, -- ♌
+ },
+ [0x264D]={
+ ["category"]="so",
+ ["description"]="VIRGO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x264D, -- â™
+ },
+ [0x264E]={
+ ["category"]="so",
+ ["description"]="LIBRA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x264E, -- ♎
+ },
+ [0x264F]={
+ ["category"]="so",
+ ["description"]="SCORPIUS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x264F, -- â™
+ },
+ [0x2650]={
+ ["category"]="so",
+ ["description"]="SAGITTARIUS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2650, -- â™
+ },
+ [0x2651]={
+ ["category"]="so",
+ ["description"]="CAPRICORN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2651, -- ♑
+ },
+ [0x2652]={
+ ["category"]="so",
+ ["description"]="AQUARIUS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2652, -- â™’
+ },
+ [0x2653]={
+ ["category"]="so",
+ ["description"]="PISCES",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2653, -- ♓
+ },
+ [0x2654]={
+ ["category"]="so",
+ ["description"]="WHITE CHESS KING",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2654, -- â™”
+ },
+ [0x2655]={
+ ["category"]="so",
+ ["description"]="WHITE CHESS QUEEN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2655, -- ♕
+ },
+ [0x2656]={
+ ["category"]="so",
+ ["description"]="WHITE CHESS ROOK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2656, -- â™–
+ },
+ [0x2657]={
+ ["category"]="so",
+ ["description"]="WHITE CHESS BISHOP",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2657, -- â™—
+ },
+ [0x2658]={
+ ["category"]="so",
+ ["description"]="WHITE CHESS KNIGHT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2658, -- ♘
+ },
+ [0x2659]={
+ ["category"]="so",
+ ["description"]="WHITE CHESS PAWN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2659, -- â™™
+ },
+ [0x265A]={
+ ["category"]="so",
+ ["description"]="BLACK CHESS KING",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x265A, -- ♚
+ },
+ [0x265B]={
+ ["category"]="so",
+ ["description"]="BLACK CHESS QUEEN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x265B, -- â™›
+ },
+ [0x265C]={
+ ["category"]="so",
+ ["description"]="BLACK CHESS ROOK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x265C, -- ♜
+ },
+ [0x265D]={
+ ["category"]="so",
+ ["description"]="BLACK CHESS BISHOP",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x265D, -- â™
+ },
+ [0x265E]={
+ ["category"]="so",
+ ["description"]="BLACK CHESS KNIGHT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x265E, -- ♞
+ },
+ [0x265F]={
+ ["category"]="so",
+ ["description"]="BLACK CHESS PAWN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x265F, -- ♟
+ },
+ [0x2660]={
+ ["adobename"]="spade",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BLACK SPADE SUIT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2660, -- â™ 
+ },
+ [0x2661]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="WHITE HEART SUIT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2661, -- ♡
+ },
+ [0x2662]={
+ ["category"]="so",
+ ["description"]="WHITE DIAMOND SUIT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2662, -- ♢
+ },
+ [0x2663]={
+ ["adobename"]="club",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BLACK CLUB SUIT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2663, -- ♣
+ },
+ [0x2664]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="WHITE SPADE SUIT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2664, -- ♤
+ },
+ [0x2665]={
+ ["adobename"]="heart",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BLACK HEART SUIT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2665, -- ♥
+ },
+ [0x2666]={
+ ["adobename"]="diamond",
+ ["category"]="so",
+ ["description"]="BLACK DIAMOND SUIT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2666, -- ♦
+ },
+ [0x2667]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="WHITE CLUB SUIT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2667, -- ♧
+ },
+ [0x2668]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="HOT SPRINGS",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2668, -- ♨
+ },
+ [0x2669]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="QUARTER NOTE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2669, -- ♩
+ },
+ [0x266A]={
+ ["adobename"]="musicalnote",
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="EIGHTH NOTE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x266A, -- ♪
+ },
+ [0x266B]={
+ ["adobename"]="musicalnotedbl",
+ ["category"]="so",
+ ["description"]="BEAMED EIGHTH NOTES",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x266B, -- ♫
+ },
+ [0x266C]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="BEAMED SIXTEENTH NOTES",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x266C, -- ♬
+ },
+ [0x266D]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="MUSIC FLAT SIGN",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x266D, -- â™­
+ },
+ [0x266E]={
+ ["category"]="so",
+ ["description"]="MUSIC NATURAL SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x266E, -- â™®
+ },
+ [0x266F]={
+ ["category"]="sm",
+ ["cjkwd"]="a",
+ ["description"]="MUSIC SHARP SIGN",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x266F, -- ♯
+ },
+ [0x2670]={
+ ["category"]="so",
+ ["description"]="WEST SYRIAC CROSS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2670, -- â™°
+ },
+ [0x2671]={
+ ["category"]="so",
+ ["description"]="EAST SYRIAC CROSS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2671, -- â™±
+ },
+ [0x2672]={
+ ["category"]="so",
+ ["description"]="UNIVERSAL RECYCLING SYMBOL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2672, -- ♲
+ },
+ [0x2673]={
+ ["category"]="so",
+ ["description"]="RECYCLING SYMBOL FOR TYPE-0x0001 PLASTICS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2673, -- ♳
+ },
+ [0x2674]={
+ ["category"]="so",
+ ["description"]="RECYCLING SYMBOL FOR TYPE-0x0002 PLASTICS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2674, -- â™´
+ },
+ [0x2675]={
+ ["category"]="so",
+ ["description"]="RECYCLING SYMBOL FOR TYPE-0x0003 PLASTICS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2675, -- ♵
+ },
+ [0x2676]={
+ ["category"]="so",
+ ["description"]="RECYCLING SYMBOL FOR TYPE-0x0004 PLASTICS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2676, -- ♶
+ },
+ [0x2677]={
+ ["category"]="so",
+ ["description"]="RECYCLING SYMBOL FOR TYPE-0x0005 PLASTICS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2677, -- â™·
+ },
+ [0x2678]={
+ ["category"]="so",
+ ["description"]="RECYCLING SYMBOL FOR TYPE-0x0006 PLASTICS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2678, -- ♸
+ },
+ [0x2679]={
+ ["category"]="so",
+ ["description"]="RECYCLING SYMBOL FOR TYPE-0x0007 PLASTICS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2679, -- ♹
+ },
+ [0x267A]={
+ ["category"]="so",
+ ["description"]="RECYCLING SYMBOL FOR GENERIC MATERIALS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x267A, -- ♺
+ },
+ [0x267B]={
+ ["category"]="so",
+ ["description"]="BLACK UNIVERSAL RECYCLING SYMBOL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x267B, -- â™»
+ },
+ [0x267C]={
+ ["category"]="so",
+ ["description"]="RECYCLED PAPER SYMBOL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x267C, -- ♼
+ },
+ [0x267D]={
+ ["category"]="so",
+ ["description"]="PARTIALLY-RECYCLED PAPER SYMBOL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x267D, -- ♽
+ },
+ [0x267E]={
+ ["category"]="so",
+ ["description"]="PERMANENT PAPER SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x267E, -- ♾
+ },
+ [0x267F]={
+ ["category"]="so",
+ ["description"]="WHEELCHAIR SYMBOL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x267F, -- ♿
+ },
+ [0x2680]={
+ ["category"]="so",
+ ["description"]="DIE FACE-0x0001",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2680, -- ⚀
+ },
+ [0x2681]={
+ ["category"]="so",
+ ["description"]="DIE FACE-0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2681, -- âš
+ },
+ [0x2682]={
+ ["category"]="so",
+ ["description"]="DIE FACE-0x0003",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2682, -- âš‚
+ },
+ [0x2683]={
+ ["category"]="so",
+ ["description"]="DIE FACE-0x0004",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2683, -- ⚃
+ },
+ [0x2684]={
+ ["category"]="so",
+ ["description"]="DIE FACE-0x0005",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2684, -- âš„
+ },
+ [0x2685]={
+ ["category"]="so",
+ ["description"]="DIE FACE-0x0006",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2685, -- âš…
+ },
+ [0x2686]={
+ ["category"]="so",
+ ["description"]="WHITE CIRCLE WITH DOT RIGHT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2686, -- ⚆
+ },
+ [0x2687]={
+ ["category"]="so",
+ ["description"]="WHITE CIRCLE WITH TWO DOTS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2687, -- ⚇
+ },
+ [0x2688]={
+ ["category"]="so",
+ ["description"]="BLACK CIRCLE WITH WHITE DOT RIGHT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2688, -- ⚈
+ },
+ [0x2689]={
+ ["category"]="so",
+ ["description"]="BLACK CIRCLE WITH TWO WHITE DOTS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2689, -- ⚉
+ },
+ [0x268A]={
+ ["category"]="so",
+ ["description"]="MONOGRAM FOR YANG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x268A, -- ⚊
+ },
+ [0x268B]={
+ ["category"]="so",
+ ["description"]="MONOGRAM FOR YIN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x268B, -- âš‹
+ },
+ [0x268C]={
+ ["category"]="so",
+ ["description"]="DIGRAM FOR GREATER YANG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x268C, -- ⚌
+ },
+ [0x268D]={
+ ["category"]="so",
+ ["description"]="DIGRAM FOR LESSER YIN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x268D, -- âš
+ },
+ [0x268E]={
+ ["category"]="so",
+ ["description"]="DIGRAM FOR LESSER YANG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x268E, -- ⚎
+ },
+ [0x268F]={
+ ["category"]="so",
+ ["description"]="DIGRAM FOR GREATER YIN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x268F, -- âš
+ },
+ [0x2690]={
+ ["category"]="so",
+ ["description"]="WHITE FLAG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2690, -- âš
+ },
+ [0x2691]={
+ ["category"]="so",
+ ["description"]="BLACK FLAG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2691, -- âš‘
+ },
+ [0x2692]={
+ ["category"]="so",
+ ["description"]="HAMMER AND PICK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2692, -- âš’
+ },
+ [0x2693]={
+ ["category"]="so",
+ ["description"]="ANCHOR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2693, -- âš“
+ },
+ [0x2694]={
+ ["category"]="so",
+ ["description"]="CROSSED SWORDS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2694, -- âš”
+ },
+ [0x2695]={
+ ["category"]="so",
+ ["description"]="STAFF OF AESCULAPIUS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2695, -- âš•
+ },
+ [0x2696]={
+ ["category"]="so",
+ ["description"]="SCALES",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2696, -- âš–
+ },
+ [0x2697]={
+ ["category"]="so",
+ ["description"]="ALEMBIC",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2697, -- âš—
+ },
+ [0x2698]={
+ ["category"]="so",
+ ["description"]="FLOWER",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2698, -- ⚘
+ },
+ [0x2699]={
+ ["category"]="so",
+ ["description"]="GEAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2699, -- âš™
+ },
+ [0x269A]={
+ ["category"]="so",
+ ["description"]="STAFF OF HERMES",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x269A, -- âšš
+ },
+ [0x269B]={
+ ["category"]="so",
+ ["description"]="ATOM SYMBOL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x269B, -- âš›
+ },
+ [0x269C]={
+ ["category"]="so",
+ ["description"]="FLEUR-DE-LIS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x269C, -- ⚜
+ },
+ [0x26A0]={
+ ["category"]="so",
+ ["description"]="WARNING SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x26A0, -- âš 
+ },
+ [0x26A1]={
+ ["category"]="so",
+ ["description"]="HIGH VOLTAGE SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x26A1, -- âš¡
+ },
+ [0x26A2]={
+ ["category"]="so",
+ ["description"]="DOUBLED FEMALE SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x26A2, -- ⚢
+ },
+ [0x26A3]={
+ ["category"]="so",
+ ["description"]="DOUBLED MALE SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x26A3, -- ⚣
+ },
+ [0x26A4]={
+ ["category"]="so",
+ ["description"]="INTERLOCKED FEMALE AND MALE SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x26A4, -- ⚤
+ },
+ [0x26A5]={
+ ["category"]="so",
+ ["description"]="MALE AND FEMALE SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x26A5, -- ⚥
+ },
+ [0x26A6]={
+ ["category"]="so",
+ ["description"]="MALE WITH STROKE SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x26A6, -- ⚦
+ },
+ [0x26A7]={
+ ["category"]="so",
+ ["description"]="MALE WITH STROKE AND MALE AND FEMALE SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x26A7, -- ⚧
+ },
+ [0x26A8]={
+ ["category"]="so",
+ ["description"]="VERTICAL MALE WITH STROKE SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x26A8, -- ⚨
+ },
+ [0x26A9]={
+ ["category"]="so",
+ ["description"]="HORIZONTAL MALE WITH STROKE SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x26A9, -- âš©
+ },
+ [0x26AA]={
+ ["category"]="so",
+ ["description"]="MEDIUM WHITE CIRCLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x26AA, -- ⚪
+ },
+ [0x26AB]={
+ ["category"]="so",
+ ["description"]="MEDIUM BLACK CIRCLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x26AB, -- âš«
+ },
+ [0x26AC]={
+ ["category"]="so",
+ ["description"]="MEDIUM SMALL WHITE CIRCLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x26AC, -- ⚬
+ },
+ [0x26AD]={
+ ["category"]="so",
+ ["description"]="MARRIAGE SYMBOL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x26AD, -- âš­
+ },
+ [0x26AE]={
+ ["category"]="so",
+ ["description"]="DIVORCE SYMBOL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x26AE, -- âš®
+ },
+ [0x26AF]={
+ ["category"]="so",
+ ["description"]="UNMARRIED PARTNERSHIP SYMBOL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x26AF, -- ⚯
+ },
+ [0x26B0]={
+ ["category"]="so",
+ ["description"]="COFFIN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x26B0, -- âš°
+ },
+ [0x26B1]={
+ ["category"]="so",
+ ["description"]="FUNERAL URN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x26B1, -- âš±
+ },
+ [0x26B2]={
+ ["category"]="so",
+ ["description"]="NEUTER",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x26B2, -- âš²
+ },
+ [0x2701]={
+ ["category"]="so",
+ ["description"]="UPPER BLADE SCISSORS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2701, -- âœ
+ },
+ [0x2702]={
+ ["category"]="so",
+ ["description"]="BLACK SCISSORS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2702, -- ✂
+ },
+ [0x2703]={
+ ["category"]="so",
+ ["description"]="LOWER BLADE SCISSORS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2703, -- ✃
+ },
+ [0x2704]={
+ ["category"]="so",
+ ["description"]="WHITE SCISSORS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2704, -- ✄
+ },
+ [0x2706]={
+ ["category"]="so",
+ ["description"]="TELEPHONE LOCATION SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2706, -- ✆
+ },
+ [0x2707]={
+ ["category"]="so",
+ ["description"]="TAPE DRIVE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2707, -- ✇
+ },
+ [0x2708]={
+ ["category"]="so",
+ ["description"]="AIRPLANE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2708, -- ✈
+ },
+ [0x2709]={
+ ["category"]="so",
+ ["description"]="ENVELOPE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2709, -- ✉
+ },
+ [0x270C]={
+ ["category"]="so",
+ ["description"]="VICTORY HAND",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x270C, -- ✌
+ },
+ [0x270D]={
+ ["category"]="so",
+ ["description"]="WRITING HAND",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x270D, -- âœ
+ },
+ [0x270E]={
+ ["category"]="so",
+ ["description"]="LOWER RIGHT PENCIL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x270E, -- ✎
+ },
+ [0x270F]={
+ ["category"]="so",
+ ["description"]="PENCIL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x270F, -- âœ
+ },
+ [0x2710]={
+ ["category"]="so",
+ ["description"]="UPPER RIGHT PENCIL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2710, -- âœ
+ },
+ [0x2711]={
+ ["category"]="so",
+ ["description"]="WHITE NIB",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2711, -- ✑
+ },
+ [0x2712]={
+ ["category"]="so",
+ ["description"]="BLACK NIB",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2712, -- ✒
+ },
+ [0x2713]={
+ ["category"]="so",
+ ["description"]="CHECK MARK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2713, -- ✓
+ },
+ [0x2714]={
+ ["category"]="so",
+ ["description"]="HEAVY CHECK MARK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2714, -- ✔
+ },
+ [0x2715]={
+ ["category"]="so",
+ ["description"]="MULTIPLICATION X",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2715, -- ✕
+ },
+ [0x2716]={
+ ["category"]="so",
+ ["description"]="HEAVY MULTIPLICATION X",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2716, -- ✖
+ },
+ [0x2717]={
+ ["category"]="so",
+ ["description"]="BALLOT X",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2717, -- ✗
+ },
+ [0x2718]={
+ ["category"]="so",
+ ["description"]="HEAVY BALLOT X",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2718, -- ✘
+ },
+ [0x2719]={
+ ["category"]="so",
+ ["description"]="OUTLINED GREEK CROSS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2719, -- ✙
+ },
+ [0x271A]={
+ ["category"]="so",
+ ["description"]="HEAVY GREEK CROSS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x271A, -- ✚
+ },
+ [0x271B]={
+ ["category"]="so",
+ ["description"]="OPEN CENTRE CROSS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x271B, -- ✛
+ },
+ [0x271C]={
+ ["category"]="so",
+ ["description"]="HEAVY OPEN CENTRE CROSS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x271C, -- ✜
+ },
+ [0x271D]={
+ ["category"]="so",
+ ["description"]="LATIN CROSS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x271D, -- âœ
+ },
+ [0x271E]={
+ ["category"]="so",
+ ["description"]="SHADOWED WHITE LATIN CROSS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x271E, -- ✞
+ },
+ [0x271F]={
+ ["category"]="so",
+ ["description"]="OUTLINED LATIN CROSS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x271F, -- ✟
+ },
+ [0x2720]={
+ ["category"]="so",
+ ["description"]="MALTESE CROSS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2720, -- ✠
+ },
+ [0x2721]={
+ ["category"]="so",
+ ["description"]="STAR OF DAVID",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2721, -- ✡
+ },
+ [0x2722]={
+ ["category"]="so",
+ ["description"]="FOUR TEARDROP-SPOKED ASTERISK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2722, -- ✢
+ },
+ [0x2723]={
+ ["category"]="so",
+ ["description"]="FOUR BALLOON-SPOKED ASTERISK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2723, -- ✣
+ },
+ [0x2724]={
+ ["category"]="so",
+ ["description"]="HEAVY FOUR BALLOON-SPOKED ASTERISK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2724, -- ✤
+ },
+ [0x2725]={
+ ["category"]="so",
+ ["description"]="FOUR CLUB-SPOKED ASTERISK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2725, -- ✥
+ },
+ [0x2726]={
+ ["category"]="so",
+ ["description"]="BLACK FOUR POINTED STAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2726, -- ✦
+ },
+ [0x2727]={
+ ["category"]="so",
+ ["description"]="WHITE FOUR POINTED STAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2727, -- ✧
+ },
+ [0x2729]={
+ ["category"]="so",
+ ["description"]="STRESS OUTLINED WHITE STAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2729, -- ✩
+ },
+ [0x272A]={
+ ["category"]="so",
+ ["description"]="CIRCLED WHITE STAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x272A, -- ✪
+ },
+ [0x272B]={
+ ["category"]="so",
+ ["description"]="OPEN CENTRE BLACK STAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x272B, -- ✫
+ },
+ [0x272C]={
+ ["category"]="so",
+ ["description"]="BLACK CENTRE WHITE STAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x272C, -- ✬
+ },
+ [0x272D]={
+ ["category"]="so",
+ ["description"]="OUTLINED BLACK STAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x272D, -- ✭
+ },
+ [0x272E]={
+ ["category"]="so",
+ ["description"]="HEAVY OUTLINED BLACK STAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x272E, -- ✮
+ },
+ [0x272F]={
+ ["category"]="so",
+ ["description"]="PINWHEEL STAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x272F, -- ✯
+ },
+ [0x2730]={
+ ["category"]="so",
+ ["description"]="SHADOWED WHITE STAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2730, -- ✰
+ },
+ [0x2731]={
+ ["category"]="so",
+ ["description"]="HEAVY ASTERISK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2731, -- ✱
+ },
+ [0x2732]={
+ ["category"]="so",
+ ["description"]="OPEN CENTRE ASTERISK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2732, -- ✲
+ },
+ [0x2733]={
+ ["category"]="so",
+ ["description"]="EIGHT SPOKED ASTERISK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2733, -- ✳
+ },
+ [0x2734]={
+ ["category"]="so",
+ ["description"]="EIGHT POINTED BLACK STAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2734, -- ✴
+ },
+ [0x2735]={
+ ["category"]="so",
+ ["description"]="EIGHT POINTED PINWHEEL STAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2735, -- ✵
+ },
+ [0x2736]={
+ ["category"]="so",
+ ["description"]="SIX POINTED BLACK STAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2736, -- ✶
+ },
+ [0x2737]={
+ ["category"]="so",
+ ["description"]="EIGHT POINTED RECTILINEAR BLACK STAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2737, -- ✷
+ },
+ [0x2738]={
+ ["category"]="so",
+ ["description"]="HEAVY EIGHT POINTED RECTILINEAR BLACK STAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2738, -- ✸
+ },
+ [0x2739]={
+ ["category"]="so",
+ ["description"]="TWELVE POINTED BLACK STAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2739, -- ✹
+ },
+ [0x273A]={
+ ["category"]="so",
+ ["description"]="SIXTEEN POINTED ASTERISK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x273A, -- ✺
+ },
+ [0x273B]={
+ ["category"]="so",
+ ["description"]="TEARDROP-SPOKED ASTERISK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x273B, -- ✻
+ },
+ [0x273C]={
+ ["category"]="so",
+ ["description"]="OPEN CENTRE TEARDROP-SPOKED ASTERISK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x273C, -- ✼
+ },
+ [0x273D]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="HEAVY TEARDROP-SPOKED ASTERISK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x273D, -- ✽
+ },
+ [0x273E]={
+ ["category"]="so",
+ ["description"]="SIX PETALLED BLACK AND WHITE FLORETTE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x273E, -- ✾
+ },
+ [0x273F]={
+ ["category"]="so",
+ ["description"]="BLACK FLORETTE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x273F, -- ✿
+ },
+ [0x2740]={
+ ["category"]="so",
+ ["description"]="WHITE FLORETTE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2740, -- â€
+ },
+ [0x2741]={
+ ["category"]="so",
+ ["description"]="EIGHT PETALLED OUTLINED BLACK FLORETTE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2741, -- â
+ },
+ [0x2742]={
+ ["category"]="so",
+ ["description"]="CIRCLED OPEN CENTRE EIGHT POINTED STAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2742, -- â‚
+ },
+ [0x2743]={
+ ["category"]="so",
+ ["description"]="HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2743, -- âƒ
+ },
+ [0x2744]={
+ ["category"]="so",
+ ["description"]="SNOWFLAKE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2744, -- â„
+ },
+ [0x2745]={
+ ["category"]="so",
+ ["description"]="TIGHT TRIFOLIATE SNOWFLAKE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2745, -- â…
+ },
+ [0x2746]={
+ ["category"]="so",
+ ["description"]="HEAVY CHEVRON SNOWFLAKE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2746, -- â†
+ },
+ [0x2747]={
+ ["category"]="so",
+ ["description"]="SPARKLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2747, -- â‡
+ },
+ [0x2748]={
+ ["category"]="so",
+ ["description"]="HEAVY SPARKLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2748, -- âˆ
+ },
+ [0x2749]={
+ ["category"]="so",
+ ["description"]="BALLOON-SPOKED ASTERISK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2749, -- â‰
+ },
+ [0x274A]={
+ ["category"]="so",
+ ["description"]="EIGHT TEARDROP-SPOKED PROPELLER ASTERISK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x274A, -- âŠ
+ },
+ [0x274B]={
+ ["category"]="so",
+ ["description"]="HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x274B, -- â‹
+ },
+ [0x274D]={
+ ["category"]="so",
+ ["description"]="SHADOWED WHITE CIRCLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x274D, -- â
+ },
+ [0x274F]={
+ ["category"]="so",
+ ["description"]="LOWER RIGHT DROP-SHADOWED WHITE SQUARE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x274F, -- â
+ },
+ [0x2750]={
+ ["category"]="so",
+ ["description"]="UPPER RIGHT DROP-SHADOWED WHITE SQUARE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2750, -- â
+ },
+ [0x2751]={
+ ["category"]="so",
+ ["description"]="LOWER RIGHT SHADOWED WHITE SQUARE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2751, -- â‘
+ },
+ [0x2752]={
+ ["category"]="so",
+ ["description"]="UPPER RIGHT SHADOWED WHITE SQUARE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2752, -- â’
+ },
+ [0x2756]={
+ ["category"]="so",
+ ["description"]="BLACK DIAMOND MINUS WHITE X",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2756, -- â–
+ },
+ [0x2758]={
+ ["category"]="so",
+ ["description"]="LIGHT VERTICAL BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2758, -- â˜
+ },
+ [0x2759]={
+ ["category"]="so",
+ ["description"]="MEDIUM VERTICAL BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2759, -- â™
+ },
+ [0x275A]={
+ ["category"]="so",
+ ["description"]="HEAVY VERTICAL BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x275A, -- âš
+ },
+ [0x275B]={
+ ["category"]="so",
+ ["description"]="HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT",
+ ["linebreak"]="qu",
+ ["unicodeslot"]=0x275B, -- â›
+ },
+ [0x275C]={
+ ["category"]="so",
+ ["description"]="HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT",
+ ["linebreak"]="qu",
+ ["unicodeslot"]=0x275C, -- âœ
+ },
+ [0x275D]={
+ ["category"]="so",
+ ["description"]="HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT",
+ ["linebreak"]="qu",
+ ["unicodeslot"]=0x275D, -- â
+ },
+ [0x275E]={
+ ["category"]="so",
+ ["description"]="HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT",
+ ["linebreak"]="qu",
+ ["unicodeslot"]=0x275E, -- âž
+ },
+ [0x2761]={
+ ["category"]="so",
+ ["description"]="CURVED STEM PARAGRAPH SIGN ORNAMENT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2761, -- â¡
+ },
+ [0x2762]={
+ ["category"]="so",
+ ["description"]="HEAVY EXCLAMATION MARK ORNAMENT",
+ ["linebreak"]="ex",
+ ["unicodeslot"]=0x2762, -- â¢
+ },
+ [0x2763]={
+ ["category"]="so",
+ ["description"]="HEAVY HEART EXCLAMATION MARK ORNAMENT",
+ ["linebreak"]="ex",
+ ["unicodeslot"]=0x2763, -- â£
+ },
+ [0x2764]={
+ ["category"]="so",
+ ["description"]="HEAVY BLACK HEART",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2764, -- â¤
+ },
+ [0x2765]={
+ ["category"]="so",
+ ["description"]="ROTATED HEAVY BLACK HEART BULLET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2765, -- â¥
+ },
+ [0x2766]={
+ ["category"]="so",
+ ["description"]="FLORAL HEART",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2766, -- â¦
+ },
+ [0x2767]={
+ ["category"]="so",
+ ["description"]="ROTATED FLORAL HEART BULLET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2767, -- â§
+ },
+ [0x2768]={
+ ["category"]="ps",
+ ["description"]="MEDIUM LEFT PARENTHESIS ORNAMENT",
+ ["linebreak"]="op",
+ ["unicodeslot"]=0x2768, -- â¨
+ },
+ [0x2769]={
+ ["category"]="pe",
+ ["description"]="MEDIUM RIGHT PARENTHESIS ORNAMENT",
+ ["linebreak"]="cl",
+ ["unicodeslot"]=0x2769, -- â©
+ },
+ [0x276A]={
+ ["category"]="ps",
+ ["description"]="MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT",
+ ["linebreak"]="op",
+ ["unicodeslot"]=0x276A, -- âª
+ },
+ [0x276B]={
+ ["category"]="pe",
+ ["description"]="MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT",
+ ["linebreak"]="cl",
+ ["unicodeslot"]=0x276B, -- â«
+ },
+ [0x276C]={
+ ["category"]="ps",
+ ["description"]="MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT",
+ ["linebreak"]="op",
+ ["unicodeslot"]=0x276C, -- â¬
+ },
+ [0x276D]={
+ ["category"]="pe",
+ ["description"]="MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT",
+ ["linebreak"]="cl",
+ ["unicodeslot"]=0x276D, -- â­
+ },
+ [0x276E]={
+ ["category"]="ps",
+ ["description"]="HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT",
+ ["linebreak"]="op",
+ ["unicodeslot"]=0x276E, -- â®
+ },
+ [0x276F]={
+ ["category"]="pe",
+ ["description"]="HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT",
+ ["linebreak"]="cl",
+ ["unicodeslot"]=0x276F, -- â¯
+ },
+ [0x2770]={
+ ["category"]="ps",
+ ["description"]="HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT",
+ ["linebreak"]="op",
+ ["unicodeslot"]=0x2770, -- â°
+ },
+ [0x2771]={
+ ["category"]="pe",
+ ["description"]="HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT",
+ ["linebreak"]="cl",
+ ["unicodeslot"]=0x2771, -- â±
+ },
+ [0x2772]={
+ ["category"]="ps",
+ ["description"]="LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT",
+ ["linebreak"]="op",
+ ["unicodeslot"]=0x2772, -- â²
+ },
+ [0x2773]={
+ ["category"]="pe",
+ ["description"]="LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT",
+ ["linebreak"]="cl",
+ ["unicodeslot"]=0x2773, -- â³
+ },
+ [0x2774]={
+ ["category"]="ps",
+ ["description"]="MEDIUM LEFT CURLY BRACKET ORNAMENT",
+ ["linebreak"]="op",
+ ["unicodeslot"]=0x2774, -- â´
+ },
+ [0x2775]={
+ ["category"]="pe",
+ ["description"]="MEDIUM RIGHT CURLY BRACKET ORNAMENT",
+ ["linebreak"]="cl",
+ ["unicodeslot"]=0x2775, -- âµ
+ },
+ [0x2776]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="DINGBAT NEGATIVE CIRCLED DIGIT ONE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2776, -- â¶
+ },
+ [0x2777]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="DINGBAT NEGATIVE CIRCLED DIGIT TWO",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2777, -- â·
+ },
+ [0x2778]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="DINGBAT NEGATIVE CIRCLED DIGIT THREE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2778, -- â¸
+ },
+ [0x2779]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="DINGBAT NEGATIVE CIRCLED DIGIT FOUR",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2779, -- â¹
+ },
+ [0x277A]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="DINGBAT NEGATIVE CIRCLED DIGIT FIVE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x277A, -- âº
+ },
+ [0x277B]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="DINGBAT NEGATIVE CIRCLED DIGIT SIX",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x277B, -- â»
+ },
+ [0x277C]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="DINGBAT NEGATIVE CIRCLED DIGIT SEVEN",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x277C, -- â¼
+ },
+ [0x277D]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="DINGBAT NEGATIVE CIRCLED DIGIT EIGHT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x277D, -- â½
+ },
+ [0x277E]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="DINGBAT NEGATIVE CIRCLED DIGIT NINE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x277E, -- â¾
+ },
+ [0x277F]={
+ ["category"]="no",
+ ["cjkwd"]="a",
+ ["description"]="DINGBAT NEGATIVE CIRCLED NUMBER TEN",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x277F, -- â¿
+ },
+ [0x2780]={
+ ["category"]="no",
+ ["description"]="DINGBAT CIRCLED SANS-SERIF DIGIT ONE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2780, -- ➀
+ },
+ [0x2781]={
+ ["category"]="no",
+ ["description"]="DINGBAT CIRCLED SANS-SERIF DIGIT TWO",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2781, -- âž
+ },
+ [0x2782]={
+ ["category"]="no",
+ ["description"]="DINGBAT CIRCLED SANS-SERIF DIGIT THREE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2782, -- âž‚
+ },
+ [0x2783]={
+ ["category"]="no",
+ ["description"]="DINGBAT CIRCLED SANS-SERIF DIGIT FOUR",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2783, -- ➃
+ },
+ [0x2784]={
+ ["category"]="no",
+ ["description"]="DINGBAT CIRCLED SANS-SERIF DIGIT FIVE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2784, -- âž„
+ },
+ [0x2785]={
+ ["category"]="no",
+ ["description"]="DINGBAT CIRCLED SANS-SERIF DIGIT SIX",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2785, -- âž…
+ },
+ [0x2786]={
+ ["category"]="no",
+ ["description"]="DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2786, -- ➆
+ },
+ [0x2787]={
+ ["category"]="no",
+ ["description"]="DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2787, -- ➇
+ },
+ [0x2788]={
+ ["category"]="no",
+ ["description"]="DINGBAT CIRCLED SANS-SERIF DIGIT NINE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2788, -- ➈
+ },
+ [0x2789]={
+ ["category"]="no",
+ ["description"]="DINGBAT CIRCLED SANS-SERIF NUMBER TEN",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2789, -- ➉
+ },
+ [0x278A]={
+ ["category"]="no",
+ ["description"]="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x278A, -- ➊
+ },
+ [0x278B]={
+ ["category"]="no",
+ ["description"]="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x278B, -- âž‹
+ },
+ [0x278C]={
+ ["category"]="no",
+ ["description"]="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x278C, -- ➌
+ },
+ [0x278D]={
+ ["category"]="no",
+ ["description"]="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x278D, -- âž
+ },
+ [0x278E]={
+ ["category"]="no",
+ ["description"]="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x278E, -- ➎
+ },
+ [0x278F]={
+ ["category"]="no",
+ ["description"]="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x278F, -- âž
+ },
+ [0x2790]={
+ ["category"]="no",
+ ["description"]="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2790, -- âž
+ },
+ [0x2791]={
+ ["category"]="no",
+ ["description"]="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2791, -- âž‘
+ },
+ [0x2792]={
+ ["category"]="no",
+ ["description"]="DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2792, -- âž’
+ },
+ [0x2793]={
+ ["category"]="no",
+ ["description"]="DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0x2793, -- âž“
+ },
+ [0x2794]={
+ ["category"]="so",
+ ["description"]="HEAVY WIDE-HEADED RIGHTWARDS ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2794, -- âž”
+ },
+ [0x2798]={
+ ["category"]="so",
+ ["description"]="HEAVY SOUTH EAST ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2798, -- ➘
+ },
+ [0x2799]={
+ ["category"]="so",
+ ["description"]="HEAVY RIGHTWARDS ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2799, -- âž™
+ },
+ [0x279A]={
+ ["category"]="so",
+ ["description"]="HEAVY NORTH EAST ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x279A, -- âžš
+ },
+ [0x279B]={
+ ["category"]="so",
+ ["description"]="DRAFTING POINT RIGHTWARDS ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x279B, -- âž›
+ },
+ [0x279C]={
+ ["category"]="so",
+ ["description"]="HEAVY ROUND-TIPPED RIGHTWARDS ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x279C, -- ➜
+ },
+ [0x279D]={
+ ["category"]="so",
+ ["description"]="TRIANGLE-HEADED RIGHTWARDS ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x279D, -- âž
+ },
+ [0x279E]={
+ ["category"]="so",
+ ["description"]="HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x279E, -- âžž
+ },
+ [0x279F]={
+ ["category"]="so",
+ ["description"]="DASHED TRIANGLE-HEADED RIGHTWARDS ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x279F, -- ➟
+ },
+ [0x27A0]={
+ ["category"]="so",
+ ["description"]="HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27A0, -- âž 
+ },
+ [0x27A1]={
+ ["category"]="so",
+ ["description"]="BLACK RIGHTWARDS ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27A1, -- âž¡
+ },
+ [0x27A2]={
+ ["category"]="so",
+ ["description"]="THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27A2, -- ➢
+ },
+ [0x27A3]={
+ ["category"]="so",
+ ["description"]="THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27A3, -- ➣
+ },
+ [0x27A4]={
+ ["category"]="so",
+ ["description"]="BLACK RIGHTWARDS ARROWHEAD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27A4, -- ➤
+ },
+ [0x27A5]={
+ ["category"]="so",
+ ["description"]="HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27A5, -- ➥
+ },
+ [0x27A6]={
+ ["category"]="so",
+ ["description"]="HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27A6, -- ➦
+ },
+ [0x27A7]={
+ ["category"]="so",
+ ["description"]="SQUAT BLACK RIGHTWARDS ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27A7, -- ➧
+ },
+ [0x27A8]={
+ ["category"]="so",
+ ["description"]="HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27A8, -- ➨
+ },
+ [0x27A9]={
+ ["category"]="so",
+ ["description"]="RIGHT-SHADED WHITE RIGHTWARDS ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27A9, -- âž©
+ },
+ [0x27AA]={
+ ["category"]="so",
+ ["description"]="LEFT-SHADED WHITE RIGHTWARDS ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27AA, -- ➪
+ },
+ [0x27AB]={
+ ["category"]="so",
+ ["description"]="BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27AB, -- âž«
+ },
+ [0x27AC]={
+ ["category"]="so",
+ ["description"]="FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27AC, -- ➬
+ },
+ [0x27AD]={
+ ["category"]="so",
+ ["description"]="HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27AD, -- âž­
+ },
+ [0x27AE]={
+ ["category"]="so",
+ ["description"]="HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27AE, -- âž®
+ },
+ [0x27AF]={
+ ["category"]="so",
+ ["description"]="NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27AF, -- ➯
+ },
+ [0x27B1]={
+ ["category"]="so",
+ ["description"]="NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27B1, -- âž±
+ },
+ [0x27B2]={
+ ["category"]="so",
+ ["description"]="CIRCLED HEAVY WHITE RIGHTWARDS ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27B2, -- âž²
+ },
+ [0x27B3]={
+ ["category"]="so",
+ ["description"]="WHITE-FEATHERED RIGHTWARDS ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27B3, -- âž³
+ },
+ [0x27B4]={
+ ["category"]="so",
+ ["description"]="BLACK-FEATHERED SOUTH EAST ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27B4, -- âž´
+ },
+ [0x27B5]={
+ ["category"]="so",
+ ["description"]="BLACK-FEATHERED RIGHTWARDS ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27B5, -- âžµ
+ },
+ [0x27B6]={
+ ["category"]="so",
+ ["description"]="BLACK-FEATHERED NORTH EAST ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27B6, -- ➶
+ },
+ [0x27B7]={
+ ["category"]="so",
+ ["description"]="HEAVY BLACK-FEATHERED SOUTH EAST ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27B7, -- âž·
+ },
+ [0x27B8]={
+ ["category"]="so",
+ ["description"]="HEAVY BLACK-FEATHERED RIGHTWARDS ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27B8, -- ➸
+ },
+ [0x27B9]={
+ ["category"]="so",
+ ["description"]="HEAVY BLACK-FEATHERED NORTH EAST ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27B9, -- âž¹
+ },
+ [0x27BA]={
+ ["category"]="so",
+ ["description"]="TEARDROP-BARBED RIGHTWARDS ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27BA, -- ➺
+ },
+ [0x27BB]={
+ ["category"]="so",
+ ["description"]="HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27BB, -- âž»
+ },
+ [0x27BC]={
+ ["category"]="so",
+ ["description"]="WEDGE-TAILED RIGHTWARDS ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27BC, -- âž¼
+ },
+ [0x27BD]={
+ ["category"]="so",
+ ["description"]="HEAVY WEDGE-TAILED RIGHTWARDS ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27BD, -- âž½
+ },
+ [0x27BE]={
+ ["category"]="so",
+ ["description"]="OPEN-OUTLINED RIGHTWARDS ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27BE, -- âž¾
+ },
+ [0x27C0]={
+ ["category"]="sm",
+ ["description"]="THREE DIMENSIONAL ANGLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27C0, -- ⟀
+ },
+ [0x27C1]={
+ ["category"]="sm",
+ ["description"]="WHITE TRIANGLE CONTAINING SMALL WHITE TRIANGLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27C1, -- âŸ
+ },
+ [0x27C2]={
+ ["category"]="sm",
+ ["description"]="PERPENDICULAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27C2, -- ⟂
+ },
+ [0x27C3]={
+ ["category"]="sm",
+ ["description"]="OPEN SUBSET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27C3, -- ⟃
+ },
+ [0x27C4]={
+ ["category"]="sm",
+ ["description"]="OPEN SUPERSET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27C4, -- ⟄
+ },
+ [0x27C5]={
+ ["category"]="ps",
+ ["description"]="LEFT S-SHAPED BAG DELIMITER",
+ ["linebreak"]="op",
+ ["unicodeslot"]=0x27C5, -- ⟅
+ },
+ [0x27C6]={
+ ["category"]="pe",
+ ["description"]="RIGHT S-SHAPED BAG DELIMITER",
+ ["linebreak"]="cl",
+ ["unicodeslot"]=0x27C6, -- ⟆
+ },
+ [0x27C7]={
+ ["category"]="sm",
+ ["description"]="OR WITH DOT INSIDE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27C7, -- ⟇
+ },
+ [0x27C8]={
+ ["category"]="sm",
+ ["description"]="REVERSE SOLIDUS PRECEDING SUBSET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27C8, -- ⟈
+ },
+ [0x27C9]={
+ ["category"]="sm",
+ ["description"]="SUPERSET PRECEDING SOLIDUS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27C9, -- ⟉
+ },
+ [0x27CA]={
+ ["category"]="sm",
+ ["description"]="VERTICAL BAR WITH HORIZONTAL STROKE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27CA, -- ⟊
+ },
+ [0x27D0]={
+ ["category"]="sm",
+ ["description"]="WHITE DIAMOND WITH CENTRED DOT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27D0, -- âŸ
+ },
+ [0x27D1]={
+ ["category"]="sm",
+ ["description"]="AND WITH DOT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27D1, -- ⟑
+ },
+ [0x27D2]={
+ ["category"]="sm",
+ ["description"]="ELEMENT OF OPENING UPWARDS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27D2, -- ⟒
+ },
+ [0x27D3]={
+ ["category"]="sm",
+ ["description"]="LOWER RIGHT CORNER WITH DOT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27D3, -- ⟓
+ },
+ [0x27D4]={
+ ["category"]="sm",
+ ["description"]="UPPER LEFT CORNER WITH DOT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27D4, -- ⟔
+ },
+ [0x27D5]={
+ ["category"]="sm",
+ ["description"]="LEFT OUTER JOIN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27D5, -- ⟕
+ },
+ [0x27D6]={
+ ["category"]="sm",
+ ["description"]="RIGHT OUTER JOIN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27D6, -- ⟖
+ },
+ [0x27D7]={
+ ["category"]="sm",
+ ["description"]="FULL OUTER JOIN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27D7, -- ⟗
+ },
+ [0x27D8]={
+ ["category"]="sm",
+ ["description"]="LARGE UP TACK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27D8, -- ⟘
+ },
+ [0x27D9]={
+ ["category"]="sm",
+ ["description"]="LARGE DOWN TACK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27D9, -- ⟙
+ },
+ [0x27DA]={
+ ["category"]="sm",
+ ["description"]="LEFT AND RIGHT DOUBLE TURNSTILE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27DA, -- ⟚
+ },
+ [0x27DB]={
+ ["category"]="sm",
+ ["description"]="LEFT AND RIGHT TACK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27DB, -- ⟛
+ },
+ [0x27DC]={
+ ["category"]="sm",
+ ["description"]="LEFT MULTIMAP",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27DC, -- ⟜
+ },
+ [0x27DD]={
+ ["category"]="sm",
+ ["description"]="LONG RIGHT TACK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27DD, -- âŸ
+ },
+ [0x27DE]={
+ ["category"]="sm",
+ ["description"]="LONG LEFT TACK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27DE, -- ⟞
+ },
+ [0x27DF]={
+ ["category"]="sm",
+ ["description"]="UP TACK WITH CIRCLE ABOVE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27DF, -- ⟟
+ },
+ [0x27E0]={
+ ["category"]="sm",
+ ["description"]="LOZENGE DIVIDED BY HORIZONTAL RULE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27E0, -- ⟠
+ },
+ [0x27E1]={
+ ["category"]="sm",
+ ["description"]="WHITE CONCAVE-SIDED DIAMOND",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27E1, -- ⟡
+ },
+ [0x27E2]={
+ ["category"]="sm",
+ ["description"]="WHITE CONCAVE-SIDED DIAMOND WITH LEFTWARDS TICK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27E2, -- ⟢
+ },
+ [0x27E3]={
+ ["category"]="sm",
+ ["description"]="WHITE CONCAVE-SIDED DIAMOND WITH RIGHTWARDS TICK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27E3, -- ⟣
+ },
+ [0x27E4]={
+ ["category"]="sm",
+ ["description"]="WHITE SQUARE WITH LEFTWARDS TICK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27E4, -- ⟤
+ },
+ [0x27E5]={
+ ["category"]="sm",
+ ["description"]="WHITE SQUARE WITH RIGHTWARDS TICK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27E5, -- ⟥
+ },
+ [0x27E6]={
+ ["category"]="ps",
+ ["cjkwd"]="na",
+ ["description"]="MATHEMATICAL LEFT WHITE SQUARE BRACKET",
+ ["linebreak"]="op",
+ ["unicodeslot"]=0x27E6, -- ⟦
+ },
+ [0x27E7]={
+ ["category"]="pe",
+ ["cjkwd"]="na",
+ ["description"]="MATHEMATICAL RIGHT WHITE SQUARE BRACKET",
+ ["linebreak"]="cl",
+ ["unicodeslot"]=0x27E7, -- ⟧
+ },
+ [0x27E8]={
+ ["category"]="ps",
+ ["cjkwd"]="na",
+ ["description"]="MATHEMATICAL LEFT ANGLE BRACKET",
+ ["linebreak"]="op",
+ ["unicodeslot"]=0x27E8, -- ⟨
+ },
+ [0x27E9]={
+ ["category"]="pe",
+ ["cjkwd"]="na",
+ ["description"]="MATHEMATICAL RIGHT ANGLE BRACKET",
+ ["linebreak"]="cl",
+ ["unicodeslot"]=0x27E9, -- ⟩
+ },
+ [0x27EA]={
+ ["category"]="ps",
+ ["cjkwd"]="na",
+ ["description"]="MATHEMATICAL LEFT DOUBLE ANGLE BRACKET",
+ ["linebreak"]="op",
+ ["unicodeslot"]=0x27EA, -- ⟪
+ },
+ [0x27EB]={
+ ["category"]="pe",
+ ["cjkwd"]="na",
+ ["description"]="MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET",
+ ["linebreak"]="cl",
+ ["unicodeslot"]=0x27EB, -- ⟫
+ },
+ [0x27F0]={
+ ["category"]="sm",
+ ["description"]="UPWARDS QUADRUPLE ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27F0, -- ⟰
+ },
+ [0x27F1]={
+ ["category"]="sm",
+ ["description"]="DOWNWARDS QUADRUPLE ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27F1, -- ⟱
+ },
+ [0x27F2]={
+ ["category"]="sm",
+ ["description"]="ANTICLOCKWISE GAPPED CIRCLE ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27F2, -- ⟲
+ },
+ [0x27F3]={
+ ["category"]="sm",
+ ["description"]="CLOCKWISE GAPPED CIRCLE ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27F3, -- ⟳
+ },
+ [0x27F4]={
+ ["category"]="sm",
+ ["description"]="RIGHT ARROW WITH CIRCLED PLUS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27F4, -- ⟴
+ },
+ [0x27F5]={
+ ["category"]="sm",
+ ["description"]="LONG LEFTWARDS ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27F5, -- ⟵
+ },
+ [0x27F6]={
+ ["category"]="sm",
+ ["description"]="LONG RIGHTWARDS ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27F6, -- ⟶
+ },
+ [0x27F7]={
+ ["category"]="sm",
+ ["description"]="LONG LEFT RIGHT ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27F7, -- ⟷
+ },
+ [0x27F8]={
+ ["category"]="sm",
+ ["description"]="LONG LEFTWARDS DOUBLE ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27F8, -- ⟸
+ },
+ [0x27F9]={
+ ["category"]="sm",
+ ["description"]="LONG RIGHTWARDS DOUBLE ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27F9, -- ⟹
+ },
+ [0x27FA]={
+ ["category"]="sm",
+ ["description"]="LONG LEFT RIGHT DOUBLE ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27FA, -- ⟺
+ },
+ [0x27FB]={
+ ["category"]="sm",
+ ["description"]="LONG LEFTWARDS ARROW FROM BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27FB, -- ⟻
+ },
+ [0x27FC]={
+ ["category"]="sm",
+ ["description"]="LONG RIGHTWARDS ARROW FROM BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27FC, -- ⟼
+ },
+ [0x27FD]={
+ ["category"]="sm",
+ ["description"]="LONG LEFTWARDS DOUBLE ARROW FROM BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27FD, -- ⟽
+ },
+ [0x27FE]={
+ ["category"]="sm",
+ ["description"]="LONG RIGHTWARDS DOUBLE ARROW FROM BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27FE, -- ⟾
+ },
+ [0x27FF]={
+ ["category"]="sm",
+ ["description"]="LONG RIGHTWARDS SQUIGGLE ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x27FF, -- ⟿
+ },
+ [0x2800]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN BLANK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2800, -- â €
+ },
+ [0x2801]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0001",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2801, -- â 
+ },
+ [0x2802]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2802, -- â ‚
+ },
+ [0x2803]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x000C",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2803, -- â ƒ
+ },
+ [0x2804]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0003",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2804, -- â „
+ },
+ [0x2805]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x000D",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2805, -- â …
+ },
+ [0x2806]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0017",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2806, -- â †
+ },
+ [0x2807]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x007B",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2807, -- â ‡
+ },
+ [0x2808]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0004",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2808, -- â ˆ
+ },
+ [0x2809]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x000E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2809, -- â ‰
+ },
+ [0x280A]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0018",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x280A, -- â Š
+ },
+ [0x280B]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x007C",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x280B, -- â ‹
+ },
+ [0x280C]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0022",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x280C, -- ⠌
+ },
+ [0x280D]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0086",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x280D, -- â 
+ },
+ [0x280E]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x00EA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x280E, -- â Ž
+ },
+ [0x280F]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x04D2",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x280F, -- â 
+ },
+ [0x2810]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0005",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2810, -- â 
+ },
+ [0x2811]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x000F",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2811, -- â ‘
+ },
+ [0x2812]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0019",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2812, -- â ’
+ },
+ [0x2813]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x007D",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2813, -- â “
+ },
+ [0x2814]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0023",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2814, -- â ”
+ },
+ [0x2815]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0087",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2815, -- â •
+ },
+ [0x2816]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x00EB",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2816, -- â –
+ },
+ [0x2817]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x04D3",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2817, -- â —
+ },
+ [0x2818]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x002D",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2818, -- â ˜
+ },
+ [0x2819]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0091",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2819, -- â ™
+ },
+ [0x281A]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x00F5",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x281A, -- â š
+ },
+ [0x281B]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x04DD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x281B, -- â ›
+ },
+ [0x281C]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0159",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x281C, -- ⠜
+ },
+ [0x281D]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0541",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x281D, -- â 
+ },
+ [0x281E]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0929",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x281E, -- â ž
+ },
+ [0x281F]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x3039",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x281F, -- â Ÿ
+ },
+ [0x2820]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0006",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2820, -- â  
+ },
+ [0x2821]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0010",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2821, -- â ¡
+ },
+ [0x2822]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x001A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2822, -- â ¢
+ },
+ [0x2823]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x007E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2823, -- â £
+ },
+ [0x2824]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0024",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2824, -- â ¤
+ },
+ [0x2825]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0088",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2825, -- â ¥
+ },
+ [0x2826]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x00EC",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2826, -- â ¦
+ },
+ [0x2827]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x04D4",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2827, -- â §
+ },
+ [0x2828]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x002E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2828, -- â ¨
+ },
+ [0x2829]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0092",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2829, -- â ©
+ },
+ [0x282A]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x00F6",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x282A, -- â ª
+ },
+ [0x282B]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x04DE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x282B, -- â «
+ },
+ [0x282C]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x015A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x282C, -- â ¬
+ },
+ [0x282D]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0542",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x282D, -- â ­
+ },
+ [0x282E]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x092A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x282E, -- â ®
+ },
+ [0x282F]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x303A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x282F, -- â ¯
+ },
+ [0x2830]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0038",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2830, -- â °
+ },
+ [0x2831]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x009C",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2831, -- â ±
+ },
+ [0x2832]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0100",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2832, -- â ²
+ },
+ [0x2833]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x04E8",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2833, -- â ³
+ },
+ [0x2834]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0164",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2834, -- â ´
+ },
+ [0x2835]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x054C",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2835, -- â µ
+ },
+ [0x2836]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0934",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2836, -- â ¶
+ },
+ [0x2837]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x3044",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2837, -- â ·
+ },
+ [0x2838]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x01C8",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2838, -- â ¸
+ },
+ [0x2839]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x05B0",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2839, -- â ¹
+ },
+ [0x283A]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0998",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x283A, -- â º
+ },
+ [0x283B]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x30A8",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x283B, -- â »
+ },
+ [0x283C]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0D80",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x283C, -- â ¼
+ },
+ [0x283D]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x3490",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x283D, -- â ½
+ },
+ [0x283E]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x5BA0",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x283E, -- â ¾
+ },
+ [0x283F]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x1E240",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x283F, -- â ¿
+ },
+ [0x2840]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0007",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2840, -- â¡€
+ },
+ [0x2841]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0011",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2841, -- â¡
+ },
+ [0x2842]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x001B",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2842, -- â¡‚
+ },
+ [0x2843]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x007F",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2843, -- ⡃
+ },
+ [0x2844]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0025",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2844, -- â¡„
+ },
+ [0x2845]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0089",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2845, -- â¡…
+ },
+ [0x2846]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x00ED",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2846, -- ⡆
+ },
+ [0x2847]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x04D5",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2847, -- ⡇
+ },
+ [0x2848]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x002F",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2848, -- ⡈
+ },
+ [0x2849]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0093",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2849, -- ⡉
+ },
+ [0x284A]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x00F7",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x284A, -- â¡Š
+ },
+ [0x284B]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x04DF",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x284B, -- â¡‹
+ },
+ [0x284C]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x015B",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x284C, -- ⡌
+ },
+ [0x284D]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0543",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x284D, -- â¡
+ },
+ [0x284E]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x092B",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x284E, -- â¡Ž
+ },
+ [0x284F]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x303B",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x284F, -- â¡
+ },
+ [0x2850]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0039",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2850, -- â¡
+ },
+ [0x2851]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x009D",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2851, -- â¡‘
+ },
+ [0x2852]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0101",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2852, -- â¡’
+ },
+ [0x2853]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x04E9",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2853, -- â¡“
+ },
+ [0x2854]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0165",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2854, -- â¡”
+ },
+ [0x2855]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x054D",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2855, -- â¡•
+ },
+ [0x2856]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0935",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2856, -- â¡–
+ },
+ [0x2857]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x3045",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2857, -- â¡—
+ },
+ [0x2858]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x01C9",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2858, -- ⡘
+ },
+ [0x2859]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x05B1",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2859, -- â¡™
+ },
+ [0x285A]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0999",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x285A, -- â¡š
+ },
+ [0x285B]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x30A9",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x285B, -- â¡›
+ },
+ [0x285C]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0D81",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x285C, -- ⡜
+ },
+ [0x285D]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x3491",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x285D, -- â¡
+ },
+ [0x285E]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x5BA1",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x285E, -- â¡ž
+ },
+ [0x285F]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x1E241",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x285F, -- â¡Ÿ
+ },
+ [0x2860]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0043",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2860, -- â¡ 
+ },
+ [0x2861]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x00A7",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2861, -- â¡¡
+ },
+ [0x2862]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x010B",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2862, -- â¡¢
+ },
+ [0x2863]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x04F3",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2863, -- â¡£
+ },
+ [0x2864]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x016F",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2864, -- ⡤
+ },
+ [0x2865]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0557",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2865, -- â¡¥
+ },
+ [0x2866]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x093F",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2866, -- ⡦
+ },
+ [0x2867]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x304F",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2867, -- ⡧
+ },
+ [0x2868]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x01D3",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2868, -- ⡨
+ },
+ [0x2869]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x05BB",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2869, -- â¡©
+ },
+ [0x286A]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x09A3",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x286A, -- ⡪
+ },
+ [0x286B]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x30B3",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x286B, -- â¡«
+ },
+ [0x286C]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0D8B",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x286C, -- ⡬
+ },
+ [0x286D]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x349B",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x286D, -- â¡­
+ },
+ [0x286E]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x5BAB",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x286E, -- â¡®
+ },
+ [0x286F]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x1E24B",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x286F, -- ⡯
+ },
+ [0x2870]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0237",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2870, -- â¡°
+ },
+ [0x2871]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x061F",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2871, -- ⡱
+ },
+ [0x2872]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0A07",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2872, -- ⡲
+ },
+ [0x2873]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x3117",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2873, -- ⡳
+ },
+ [0x2874]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0DEF",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2874, -- â¡´
+ },
+ [0x2875]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x34FF",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2875, -- ⡵
+ },
+ [0x2876]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x5C0F",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2876, -- ⡶
+ },
+ [0x2877]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x1E2AF",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2877, -- â¡·
+ },
+ [0x2878]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x11D7",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2878, -- ⡸
+ },
+ [0x2879]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x38E7",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2879, -- ⡹
+ },
+ [0x287A]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x5FF7",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x287A, -- ⡺
+ },
+ [0x287B]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x1E697",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x287B, -- â¡»
+ },
+ [0x287C]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x8707",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x287C, -- ⡼
+ },
+ [0x287D]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x20DA7",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x287D, -- ⡽
+ },
+ [0x287E]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x39447",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x287E, -- ⡾
+ },
+ [0x287F]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x12D687",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x287F, -- â¡¿
+ },
+ [0x2880]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0008",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2880, -- ⢀
+ },
+ [0x2881]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0012",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2881, -- â¢
+ },
+ [0x2882]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x001C",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2882, -- ⢂
+ },
+ [0x2883]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0080",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2883, -- ⢃
+ },
+ [0x2884]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0026",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2884, -- ⢄
+ },
+ [0x2885]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x008A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2885, -- ⢅
+ },
+ [0x2886]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x00EE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2886, -- ⢆
+ },
+ [0x2887]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x04D6",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2887, -- ⢇
+ },
+ [0x2888]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0030",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2888, -- ⢈
+ },
+ [0x2889]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0094",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2889, -- ⢉
+ },
+ [0x288A]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x00F8",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x288A, -- ⢊
+ },
+ [0x288B]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x04E0",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x288B, -- ⢋
+ },
+ [0x288C]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x015C",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x288C, -- ⢌
+ },
+ [0x288D]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0544",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x288D, -- â¢
+ },
+ [0x288E]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x092C",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x288E, -- ⢎
+ },
+ [0x288F]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x303C",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x288F, -- â¢
+ },
+ [0x2890]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x003A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2890, -- â¢
+ },
+ [0x2891]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x009E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2891, -- ⢑
+ },
+ [0x2892]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0102",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2892, -- ⢒
+ },
+ [0x2893]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x04EA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2893, -- ⢓
+ },
+ [0x2894]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0166",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2894, -- ⢔
+ },
+ [0x2895]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x054E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2895, -- ⢕
+ },
+ [0x2896]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0936",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2896, -- ⢖
+ },
+ [0x2897]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x3046",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2897, -- ⢗
+ },
+ [0x2898]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x01CA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2898, -- ⢘
+ },
+ [0x2899]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x05B2",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2899, -- ⢙
+ },
+ [0x289A]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x099A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x289A, -- ⢚
+ },
+ [0x289B]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x30AA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x289B, -- ⢛
+ },
+ [0x289C]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0D82",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x289C, -- ⢜
+ },
+ [0x289D]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x3492",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x289D, -- â¢
+ },
+ [0x289E]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x5BA2",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x289E, -- ⢞
+ },
+ [0x289F]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x1E242",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x289F, -- ⢟
+ },
+ [0x28A0]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0044",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28A0, -- ⢠
+ },
+ [0x28A1]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x00A8",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28A1, -- ⢡
+ },
+ [0x28A2]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x010C",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28A2, -- ⢢
+ },
+ [0x28A3]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x04F4",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28A3, -- ⢣
+ },
+ [0x28A4]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0170",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28A4, -- ⢤
+ },
+ [0x28A5]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0558",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28A5, -- ⢥
+ },
+ [0x28A6]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0940",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28A6, -- ⢦
+ },
+ [0x28A7]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x3050",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28A7, -- ⢧
+ },
+ [0x28A8]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x01D4",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28A8, -- ⢨
+ },
+ [0x28A9]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x05BC",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28A9, -- ⢩
+ },
+ [0x28AA]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x09A4",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28AA, -- ⢪
+ },
+ [0x28AB]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x30B4",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28AB, -- ⢫
+ },
+ [0x28AC]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0D8C",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28AC, -- ⢬
+ },
+ [0x28AD]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x349C",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28AD, -- ⢭
+ },
+ [0x28AE]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x5BAC",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28AE, -- ⢮
+ },
+ [0x28AF]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x1E24C",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28AF, -- ⢯
+ },
+ [0x28B0]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0238",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28B0, -- ⢰
+ },
+ [0x28B1]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0620",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28B1, -- ⢱
+ },
+ [0x28B2]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0A08",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28B2, -- ⢲
+ },
+ [0x28B3]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x3118",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28B3, -- ⢳
+ },
+ [0x28B4]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0DF0",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28B4, -- ⢴
+ },
+ [0x28B5]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x3500",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28B5, -- ⢵
+ },
+ [0x28B6]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x5C10",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28B6, -- ⢶
+ },
+ [0x28B7]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x1E2B0",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28B7, -- ⢷
+ },
+ [0x28B8]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x11D8",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28B8, -- ⢸
+ },
+ [0x28B9]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x38E8",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28B9, -- ⢹
+ },
+ [0x28BA]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x5FF8",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28BA, -- ⢺
+ },
+ [0x28BB]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x1E698",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28BB, -- ⢻
+ },
+ [0x28BC]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x8708",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28BC, -- ⢼
+ },
+ [0x28BD]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x20DA8",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28BD, -- ⢽
+ },
+ [0x28BE]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x39448",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28BE, -- ⢾
+ },
+ [0x28BF]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x12D688",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28BF, -- ⢿
+ },
+ [0x28C0]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x004E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28C0, -- ⣀
+ },
+ [0x28C1]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x00B2",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28C1, -- â£
+ },
+ [0x28C2]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0116",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28C2, -- ⣂
+ },
+ [0x28C3]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x04FE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28C3, -- ⣃
+ },
+ [0x28C4]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x017A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28C4, -- ⣄
+ },
+ [0x28C5]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0562",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28C5, -- ⣅
+ },
+ [0x28C6]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x094A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28C6, -- ⣆
+ },
+ [0x28C7]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x305A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28C7, -- ⣇
+ },
+ [0x28C8]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x01DE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28C8, -- ⣈
+ },
+ [0x28C9]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x05C6",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28C9, -- ⣉
+ },
+ [0x28CA]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x09AE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28CA, -- ⣊
+ },
+ [0x28CB]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x30BE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28CB, -- ⣋
+ },
+ [0x28CC]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0D96",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28CC, -- ⣌
+ },
+ [0x28CD]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x34A6",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28CD, -- â£
+ },
+ [0x28CE]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x5BB6",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28CE, -- ⣎
+ },
+ [0x28CF]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x1E256",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28CF, -- â£
+ },
+ [0x28D0]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0242",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28D0, -- â£
+ },
+ [0x28D1]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x062A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28D1, -- ⣑
+ },
+ [0x28D2]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0A12",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28D2, -- ⣒
+ },
+ [0x28D3]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x3122",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28D3, -- ⣓
+ },
+ [0x28D4]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0DFA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28D4, -- ⣔
+ },
+ [0x28D5]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x350A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28D5, -- ⣕
+ },
+ [0x28D6]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x5C1A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28D6, -- ⣖
+ },
+ [0x28D7]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x1E2BA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28D7, -- ⣗
+ },
+ [0x28D8]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x11E2",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28D8, -- ⣘
+ },
+ [0x28D9]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x38F2",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28D9, -- ⣙
+ },
+ [0x28DA]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x6002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28DA, -- ⣚
+ },
+ [0x28DB]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x1E6A2",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28DB, -- ⣛
+ },
+ [0x28DC]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x8712",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28DC, -- ⣜
+ },
+ [0x28DD]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x20DB2",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28DD, -- â£
+ },
+ [0x28DE]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x39452",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28DE, -- ⣞
+ },
+ [0x28DF]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x12D692",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28DF, -- ⣟
+ },
+ [0x28E0]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x02A6",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28E0, -- ⣠
+ },
+ [0x28E1]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x068E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28E1, -- ⣡
+ },
+ [0x28E2]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0A76",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28E2, -- ⣢
+ },
+ [0x28E3]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x3186",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28E3, -- ⣣
+ },
+ [0x28E4]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x0E5E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28E4, -- ⣤
+ },
+ [0x28E5]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x356E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28E5, -- ⣥
+ },
+ [0x28E6]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x5C7E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28E6, -- ⣦
+ },
+ [0x28E7]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x1E31E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28E7, -- ⣧
+ },
+ [0x28E8]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x1246",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28E8, -- ⣨
+ },
+ [0x28E9]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x3956",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28E9, -- ⣩
+ },
+ [0x28EA]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x6066",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28EA, -- ⣪
+ },
+ [0x28EB]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x1E706",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28EB, -- ⣫
+ },
+ [0x28EC]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x8776",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28EC, -- ⣬
+ },
+ [0x28ED]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x20E16",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28ED, -- ⣭
+ },
+ [0x28EE]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x394B6",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28EE, -- ⣮
+ },
+ [0x28EF]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x12D6F6",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28EF, -- ⣯
+ },
+ [0x28F0]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x162E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28F0, -- ⣰
+ },
+ [0x28F1]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x3D3E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28F1, -- ⣱
+ },
+ [0x28F2]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x644E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28F2, -- ⣲
+ },
+ [0x28F3]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x1EAEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28F3, -- ⣳
+ },
+ [0x28F4]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x8B5E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28F4, -- ⣴
+ },
+ [0x28F5]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x211FE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28F5, -- ⣵
+ },
+ [0x28F6]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x3989E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28F6, -- ⣶
+ },
+ [0x28F7]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x12DADE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28F7, -- ⣷
+ },
+ [0x28F8]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0xB26E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28F8, -- ⣸
+ },
+ [0x28F9]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x2390E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28F9, -- ⣹
+ },
+ [0x28FA]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x3BFAE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28FA, -- ⣺
+ },
+ [0x28FB]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x1301EE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28FB, -- ⣻
+ },
+ [0x28FC]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x5464E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28FC, -- ⣼
+ },
+ [0x28FD]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x14888E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28FD, -- ⣽
+ },
+ [0x28FE]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0x23CACE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28FE, -- ⣾
+ },
+ [0x28FF]={
+ ["category"]="so",
+ ["description"]="BRAILLE PATTERN DOTS-0xBC614E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x28FF, -- ⣿
+ },
+ [0x2900]={
+ ["category"]="sm",
+ ["description"]="RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2900, -- ⤀
+ },
+ [0x2901]={
+ ["category"]="sm",
+ ["description"]="RIGHTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2901, -- â¤
+ },
+ [0x2902]={
+ ["category"]="sm",
+ ["description"]="LEFTWARDS DOUBLE ARROW WITH VERTICAL STROKE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2902, -- ⤂
+ },
+ [0x2903]={
+ ["category"]="sm",
+ ["description"]="RIGHTWARDS DOUBLE ARROW WITH VERTICAL STROKE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2903, -- ⤃
+ },
+ [0x2904]={
+ ["category"]="sm",
+ ["description"]="LEFT RIGHT DOUBLE ARROW WITH VERTICAL STROKE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2904, -- ⤄
+ },
+ [0x2905]={
+ ["category"]="sm",
+ ["description"]="RIGHTWARDS TWO-HEADED ARROW FROM BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2905, -- ⤅
+ },
+ [0x2906]={
+ ["category"]="sm",
+ ["description"]="LEFTWARDS DOUBLE ARROW FROM BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2906, -- ⤆
+ },
+ [0x2907]={
+ ["category"]="sm",
+ ["description"]="RIGHTWARDS DOUBLE ARROW FROM BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2907, -- ⤇
+ },
+ [0x2908]={
+ ["category"]="sm",
+ ["description"]="DOWNWARDS ARROW WITH HORIZONTAL STROKE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2908, -- ⤈
+ },
+ [0x2909]={
+ ["category"]="sm",
+ ["description"]="UPWARDS ARROW WITH HORIZONTAL STROKE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2909, -- ⤉
+ },
+ [0x290A]={
+ ["category"]="sm",
+ ["description"]="UPWARDS TRIPLE ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x290A, -- ⤊
+ },
+ [0x290B]={
+ ["category"]="sm",
+ ["description"]="DOWNWARDS TRIPLE ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x290B, -- ⤋
+ },
+ [0x290C]={
+ ["category"]="sm",
+ ["description"]="LEFTWARDS DOUBLE DASH ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x290C, -- ⤌
+ },
+ [0x290D]={
+ ["category"]="sm",
+ ["description"]="RIGHTWARDS DOUBLE DASH ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x290D, -- â¤
+ },
+ [0x290E]={
+ ["category"]="sm",
+ ["description"]="LEFTWARDS TRIPLE DASH ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x290E, -- ⤎
+ },
+ [0x290F]={
+ ["category"]="sm",
+ ["description"]="RIGHTWARDS TRIPLE DASH ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x290F, -- â¤
+ },
+ [0x2910]={
+ ["category"]="sm",
+ ["description"]="RIGHTWARDS TWO-HEADED TRIPLE DASH ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2910, -- â¤
+ },
+ [0x2911]={
+ ["category"]="sm",
+ ["description"]="RIGHTWARDS ARROW WITH DOTTED STEM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2911, -- ⤑
+ },
+ [0x2912]={
+ ["category"]="sm",
+ ["description"]="UPWARDS ARROW TO BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2912, -- ⤒
+ },
+ [0x2913]={
+ ["category"]="sm",
+ ["description"]="DOWNWARDS ARROW TO BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2913, -- ⤓
+ },
+ [0x2914]={
+ ["category"]="sm",
+ ["description"]="RIGHTWARDS ARROW WITH TAIL WITH VERTICAL STROKE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2914, -- ⤔
+ },
+ [0x2915]={
+ ["category"]="sm",
+ ["description"]="RIGHTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2915, -- ⤕
+ },
+ [0x2916]={
+ ["category"]="sm",
+ ["description"]="RIGHTWARDS TWO-HEADED ARROW WITH TAIL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2916, -- ⤖
+ },
+ [0x2917]={
+ ["category"]="sm",
+ ["description"]="RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2917, -- ⤗
+ },
+ [0x2918]={
+ ["category"]="sm",
+ ["description"]="RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2918, -- ⤘
+ },
+ [0x2919]={
+ ["category"]="sm",
+ ["description"]="LEFTWARDS ARROW-TAIL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2919, -- ⤙
+ },
+ [0x291A]={
+ ["category"]="sm",
+ ["description"]="RIGHTWARDS ARROW-TAIL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x291A, -- ⤚
+ },
+ [0x291B]={
+ ["category"]="sm",
+ ["description"]="LEFTWARDS DOUBLE ARROW-TAIL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x291B, -- ⤛
+ },
+ [0x291C]={
+ ["category"]="sm",
+ ["description"]="RIGHTWARDS DOUBLE ARROW-TAIL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x291C, -- ⤜
+ },
+ [0x291D]={
+ ["category"]="sm",
+ ["description"]="LEFTWARDS ARROW TO BLACK DIAMOND",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x291D, -- â¤
+ },
+ [0x291E]={
+ ["category"]="sm",
+ ["description"]="RIGHTWARDS ARROW TO BLACK DIAMOND",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x291E, -- ⤞
+ },
+ [0x291F]={
+ ["category"]="sm",
+ ["description"]="LEFTWARDS ARROW FROM BAR TO BLACK DIAMOND",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x291F, -- ⤟
+ },
+ [0x2920]={
+ ["category"]="sm",
+ ["description"]="RIGHTWARDS ARROW FROM BAR TO BLACK DIAMOND",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2920, -- ⤠
+ },
+ [0x2921]={
+ ["category"]="sm",
+ ["description"]="NORTH WEST AND SOUTH EAST ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2921, -- ⤡
+ },
+ [0x2922]={
+ ["category"]="sm",
+ ["description"]="NORTH EAST AND SOUTH WEST ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2922, -- ⤢
+ },
+ [0x2923]={
+ ["category"]="sm",
+ ["description"]="NORTH WEST ARROW WITH HOOK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2923, -- ⤣
+ },
+ [0x2924]={
+ ["category"]="sm",
+ ["description"]="NORTH EAST ARROW WITH HOOK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2924, -- ⤤
+ },
+ [0x2925]={
+ ["category"]="sm",
+ ["description"]="SOUTH EAST ARROW WITH HOOK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2925, -- ⤥
+ },
+ [0x2926]={
+ ["category"]="sm",
+ ["description"]="SOUTH WEST ARROW WITH HOOK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2926, -- ⤦
+ },
+ [0x2927]={
+ ["category"]="sm",
+ ["description"]="NORTH WEST ARROW AND NORTH EAST ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2927, -- ⤧
+ },
+ [0x2928]={
+ ["category"]="sm",
+ ["description"]="NORTH EAST ARROW AND SOUTH EAST ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2928, -- ⤨
+ },
+ [0x2929]={
+ ["category"]="sm",
+ ["description"]="SOUTH EAST ARROW AND SOUTH WEST ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2929, -- ⤩
+ },
+ [0x292A]={
+ ["category"]="sm",
+ ["description"]="SOUTH WEST ARROW AND NORTH WEST ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x292A, -- ⤪
+ },
+ [0x292B]={
+ ["category"]="sm",
+ ["description"]="RISING DIAGONAL CROSSING FALLING DIAGONAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x292B, -- ⤫
+ },
+ [0x292C]={
+ ["category"]="sm",
+ ["description"]="FALLING DIAGONAL CROSSING RISING DIAGONAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x292C, -- ⤬
+ },
+ [0x292D]={
+ ["category"]="sm",
+ ["description"]="SOUTH EAST ARROW CROSSING NORTH EAST ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x292D, -- ⤭
+ },
+ [0x292E]={
+ ["category"]="sm",
+ ["description"]="NORTH EAST ARROW CROSSING SOUTH EAST ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x292E, -- ⤮
+ },
+ [0x292F]={
+ ["category"]="sm",
+ ["description"]="FALLING DIAGONAL CROSSING NORTH EAST ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x292F, -- ⤯
+ },
+ [0x2930]={
+ ["category"]="sm",
+ ["description"]="RISING DIAGONAL CROSSING SOUTH EAST ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2930, -- ⤰
+ },
+ [0x2931]={
+ ["category"]="sm",
+ ["description"]="NORTH EAST ARROW CROSSING NORTH WEST ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2931, -- ⤱
+ },
+ [0x2932]={
+ ["category"]="sm",
+ ["description"]="NORTH WEST ARROW CROSSING NORTH EAST ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2932, -- ⤲
+ },
+ [0x2933]={
+ ["category"]="sm",
+ ["description"]="WAVE ARROW POINTING DIRECTLY RIGHT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2933, -- ⤳
+ },
+ [0x2934]={
+ ["category"]="sm",
+ ["description"]="ARROW POINTING RIGHTWARDS THEN CURVING UPWARDS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2934, -- ⤴
+ },
+ [0x2935]={
+ ["category"]="sm",
+ ["description"]="ARROW POINTING RIGHTWARDS THEN CURVING DOWNWARDS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2935, -- ⤵
+ },
+ [0x2936]={
+ ["category"]="sm",
+ ["description"]="ARROW POINTING DOWNWARDS THEN CURVING LEFTWARDS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2936, -- ⤶
+ },
+ [0x2937]={
+ ["category"]="sm",
+ ["description"]="ARROW POINTING DOWNWARDS THEN CURVING RIGHTWARDS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2937, -- ⤷
+ },
+ [0x2938]={
+ ["category"]="sm",
+ ["description"]="RIGHT-SIDE ARC CLOCKWISE ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2938, -- ⤸
+ },
+ [0x2939]={
+ ["category"]="sm",
+ ["description"]="LEFT-SIDE ARC ANTICLOCKWISE ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2939, -- ⤹
+ },
+ [0x293A]={
+ ["category"]="sm",
+ ["description"]="TOP ARC ANTICLOCKWISE ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x293A, -- ⤺
+ },
+ [0x293B]={
+ ["category"]="sm",
+ ["description"]="BOTTOM ARC ANTICLOCKWISE ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x293B, -- ⤻
+ },
+ [0x293C]={
+ ["category"]="sm",
+ ["description"]="TOP ARC CLOCKWISE ARROW WITH MINUS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x293C, -- ⤼
+ },
+ [0x293D]={
+ ["category"]="sm",
+ ["description"]="TOP ARC ANTICLOCKWISE ARROW WITH PLUS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x293D, -- ⤽
+ },
+ [0x293E]={
+ ["category"]="sm",
+ ["description"]="LOWER RIGHT SEMICIRCULAR CLOCKWISE ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x293E, -- ⤾
+ },
+ [0x293F]={
+ ["category"]="sm",
+ ["description"]="LOWER LEFT SEMICIRCULAR ANTICLOCKWISE ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x293F, -- ⤿
+ },
+ [0x2940]={
+ ["category"]="sm",
+ ["description"]="ANTICLOCKWISE CLOSED CIRCLE ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2940, -- ⥀
+ },
+ [0x2941]={
+ ["category"]="sm",
+ ["description"]="CLOCKWISE CLOSED CIRCLE ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2941, -- â¥
+ },
+ [0x2942]={
+ ["category"]="sm",
+ ["description"]="RIGHTWARDS ARROW ABOVE SHORT LEFTWARDS ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2942, -- ⥂
+ },
+ [0x2943]={
+ ["category"]="sm",
+ ["description"]="LEFTWARDS ARROW ABOVE SHORT RIGHTWARDS ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2943, -- ⥃
+ },
+ [0x2944]={
+ ["category"]="sm",
+ ["description"]="SHORT RIGHTWARDS ARROW ABOVE LEFTWARDS ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2944, -- ⥄
+ },
+ [0x2945]={
+ ["category"]="sm",
+ ["description"]="RIGHTWARDS ARROW WITH PLUS BELOW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2945, -- ⥅
+ },
+ [0x2946]={
+ ["category"]="sm",
+ ["description"]="LEFTWARDS ARROW WITH PLUS BELOW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2946, -- ⥆
+ },
+ [0x2947]={
+ ["category"]="sm",
+ ["description"]="RIGHTWARDS ARROW THROUGH X",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2947, -- ⥇
+ },
+ [0x2948]={
+ ["category"]="sm",
+ ["description"]="LEFT RIGHT ARROW THROUGH SMALL CIRCLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2948, -- ⥈
+ },
+ [0x2949]={
+ ["category"]="sm",
+ ["description"]="UPWARDS TWO-HEADED ARROW FROM SMALL CIRCLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2949, -- ⥉
+ },
+ [0x294A]={
+ ["category"]="sm",
+ ["description"]="LEFT BARB UP RIGHT BARB DOWN HARPOON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x294A, -- ⥊
+ },
+ [0x294B]={
+ ["category"]="sm",
+ ["description"]="LEFT BARB DOWN RIGHT BARB UP HARPOON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x294B, -- ⥋
+ },
+ [0x294C]={
+ ["category"]="sm",
+ ["description"]="UP BARB RIGHT DOWN BARB LEFT HARPOON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x294C, -- ⥌
+ },
+ [0x294D]={
+ ["category"]="sm",
+ ["description"]="UP BARB LEFT DOWN BARB RIGHT HARPOON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x294D, -- â¥
+ },
+ [0x294E]={
+ ["category"]="sm",
+ ["description"]="LEFT BARB UP RIGHT BARB UP HARPOON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x294E, -- ⥎
+ },
+ [0x294F]={
+ ["category"]="sm",
+ ["description"]="UP BARB RIGHT DOWN BARB RIGHT HARPOON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x294F, -- â¥
+ },
+ [0x2950]={
+ ["category"]="sm",
+ ["description"]="LEFT BARB DOWN RIGHT BARB DOWN HARPOON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2950, -- â¥
+ },
+ [0x2951]={
+ ["category"]="sm",
+ ["description"]="UP BARB LEFT DOWN BARB LEFT HARPOON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2951, -- ⥑
+ },
+ [0x2952]={
+ ["category"]="sm",
+ ["description"]="LEFTWARDS HARPOON WITH BARB UP TO BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2952, -- ⥒
+ },
+ [0x2953]={
+ ["category"]="sm",
+ ["description"]="RIGHTWARDS HARPOON WITH BARB UP TO BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2953, -- ⥓
+ },
+ [0x2954]={
+ ["category"]="sm",
+ ["description"]="UPWARDS HARPOON WITH BARB RIGHT TO BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2954, -- ⥔
+ },
+ [0x2955]={
+ ["category"]="sm",
+ ["description"]="DOWNWARDS HARPOON WITH BARB RIGHT TO BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2955, -- ⥕
+ },
+ [0x2956]={
+ ["category"]="sm",
+ ["description"]="LEFTWARDS HARPOON WITH BARB DOWN TO BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2956, -- ⥖
+ },
+ [0x2957]={
+ ["category"]="sm",
+ ["description"]="RIGHTWARDS HARPOON WITH BARB DOWN TO BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2957, -- ⥗
+ },
+ [0x2958]={
+ ["category"]="sm",
+ ["description"]="UPWARDS HARPOON WITH BARB LEFT TO BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2958, -- ⥘
+ },
+ [0x2959]={
+ ["category"]="sm",
+ ["description"]="DOWNWARDS HARPOON WITH BARB LEFT TO BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2959, -- ⥙
+ },
+ [0x295A]={
+ ["category"]="sm",
+ ["description"]="LEFTWARDS HARPOON WITH BARB UP FROM BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x295A, -- ⥚
+ },
+ [0x295B]={
+ ["category"]="sm",
+ ["description"]="RIGHTWARDS HARPOON WITH BARB UP FROM BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x295B, -- ⥛
+ },
+ [0x295C]={
+ ["category"]="sm",
+ ["description"]="UPWARDS HARPOON WITH BARB RIGHT FROM BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x295C, -- ⥜
+ },
+ [0x295D]={
+ ["category"]="sm",
+ ["description"]="DOWNWARDS HARPOON WITH BARB RIGHT FROM BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x295D, -- â¥
+ },
+ [0x295E]={
+ ["category"]="sm",
+ ["description"]="LEFTWARDS HARPOON WITH BARB DOWN FROM BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x295E, -- ⥞
+ },
+ [0x295F]={
+ ["category"]="sm",
+ ["description"]="RIGHTWARDS HARPOON WITH BARB DOWN FROM BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x295F, -- ⥟
+ },
+ [0x2960]={
+ ["category"]="sm",
+ ["description"]="UPWARDS HARPOON WITH BARB LEFT FROM BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2960, -- ⥠
+ },
+ [0x2961]={
+ ["category"]="sm",
+ ["description"]="DOWNWARDS HARPOON WITH BARB LEFT FROM BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2961, -- ⥡
+ },
+ [0x2962]={
+ ["category"]="sm",
+ ["description"]="LEFTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB DOWN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2962, -- ⥢
+ },
+ [0x2963]={
+ ["category"]="sm",
+ ["description"]="UPWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2963, -- ⥣
+ },
+ [0x2964]={
+ ["category"]="sm",
+ ["description"]="RIGHTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB DOWN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2964, -- ⥤
+ },
+ [0x2965]={
+ ["category"]="sm",
+ ["description"]="DOWNWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2965, -- ⥥
+ },
+ [0x2966]={
+ ["category"]="sm",
+ ["description"]="LEFTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB UP",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2966, -- ⥦
+ },
+ [0x2967]={
+ ["category"]="sm",
+ ["description"]="LEFTWARDS HARPOON WITH BARB DOWN ABOVE RIGHTWARDS HARPOON WITH BARB DOWN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2967, -- ⥧
+ },
+ [0x2968]={
+ ["category"]="sm",
+ ["description"]="RIGHTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB UP",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2968, -- ⥨
+ },
+ [0x2969]={
+ ["category"]="sm",
+ ["description"]="RIGHTWARDS HARPOON WITH BARB DOWN ABOVE LEFTWARDS HARPOON WITH BARB DOWN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2969, -- ⥩
+ },
+ [0x296A]={
+ ["category"]="sm",
+ ["description"]="LEFTWARDS HARPOON WITH BARB UP ABOVE LONG DASH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x296A, -- ⥪
+ },
+ [0x296B]={
+ ["category"]="sm",
+ ["description"]="LEFTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x296B, -- ⥫
+ },
+ [0x296C]={
+ ["category"]="sm",
+ ["description"]="RIGHTWARDS HARPOON WITH BARB UP ABOVE LONG DASH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x296C, -- ⥬
+ },
+ [0x296D]={
+ ["category"]="sm",
+ ["description"]="RIGHTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x296D, -- ⥭
+ },
+ [0x296E]={
+ ["category"]="sm",
+ ["description"]="UPWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x296E, -- ⥮
+ },
+ [0x296F]={
+ ["category"]="sm",
+ ["description"]="DOWNWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x296F, -- ⥯
+ },
+ [0x2970]={
+ ["category"]="sm",
+ ["description"]="RIGHT DOUBLE ARROW WITH ROUNDED HEAD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2970, -- ⥰
+ },
+ [0x2971]={
+ ["category"]="sm",
+ ["description"]="EQUALS SIGN ABOVE RIGHTWARDS ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2971, -- ⥱
+ },
+ [0x2972]={
+ ["category"]="sm",
+ ["description"]="TILDE OPERATOR ABOVE RIGHTWARDS ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2972, -- ⥲
+ },
+ [0x2973]={
+ ["category"]="sm",
+ ["description"]="LEFTWARDS ARROW ABOVE TILDE OPERATOR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2973, -- ⥳
+ },
+ [0x2974]={
+ ["category"]="sm",
+ ["description"]="RIGHTWARDS ARROW ABOVE TILDE OPERATOR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2974, -- ⥴
+ },
+ [0x2975]={
+ ["category"]="sm",
+ ["description"]="RIGHTWARDS ARROW ABOVE ALMOST EQUAL TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2975, -- ⥵
+ },
+ [0x2976]={
+ ["category"]="sm",
+ ["description"]="LESS-THAN ABOVE LEFTWARDS ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2976, -- ⥶
+ },
+ [0x2977]={
+ ["category"]="sm",
+ ["description"]="LEFTWARDS ARROW THROUGH LESS-THAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2977, -- ⥷
+ },
+ [0x2978]={
+ ["category"]="sm",
+ ["description"]="GREATER-THAN ABOVE RIGHTWARDS ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2978, -- ⥸
+ },
+ [0x2979]={
+ ["category"]="sm",
+ ["description"]="SUBSET ABOVE RIGHTWARDS ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2979, -- ⥹
+ },
+ [0x297A]={
+ ["category"]="sm",
+ ["description"]="LEFTWARDS ARROW THROUGH SUBSET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x297A, -- ⥺
+ },
+ [0x297B]={
+ ["category"]="sm",
+ ["description"]="SUPERSET ABOVE LEFTWARDS ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x297B, -- ⥻
+ },
+ [0x297C]={
+ ["category"]="sm",
+ ["description"]="LEFT FISH TAIL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x297C, -- ⥼
+ },
+ [0x297D]={
+ ["category"]="sm",
+ ["description"]="RIGHT FISH TAIL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x297D, -- ⥽
+ },
+ [0x297E]={
+ ["category"]="sm",
+ ["description"]="UP FISH TAIL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x297E, -- ⥾
+ },
+ [0x297F]={
+ ["category"]="sm",
+ ["description"]="DOWN FISH TAIL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x297F, -- ⥿
+ },
+ [0x2980]={
+ ["category"]="sm",
+ ["description"]="TRIPLE VERTICAL BAR DELIMITER",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2980, -- ⦀
+ },
+ [0x2981]={
+ ["category"]="sm",
+ ["description"]="Z NOTATION SPOT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2981, -- â¦
+ },
+ [0x2982]={
+ ["category"]="sm",
+ ["description"]="Z NOTATION TYPE COLON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2982, -- ⦂
+ },
+ [0x2983]={
+ ["category"]="ps",
+ ["description"]="LEFT WHITE CURLY BRACKET",
+ ["linebreak"]="op",
+ ["unicodeslot"]=0x2983, -- ⦃
+ },
+ [0x2984]={
+ ["category"]="pe",
+ ["description"]="RIGHT WHITE CURLY BRACKET",
+ ["linebreak"]="cl",
+ ["unicodeslot"]=0x2984, -- ⦄
+ },
+ [0x2985]={
+ ["category"]="ps",
+ ["cjkwd"]="na",
+ ["description"]="LEFT WHITE PARENTHESIS",
+ ["linebreak"]="op",
+ ["unicodeslot"]=0x2985, -- ⦅
+ },
+ [0x2986]={
+ ["category"]="pe",
+ ["cjkwd"]="na",
+ ["description"]="RIGHT WHITE PARENTHESIS",
+ ["linebreak"]="cl",
+ ["unicodeslot"]=0x2986, -- ⦆
+ },
+ [0x2987]={
+ ["category"]="ps",
+ ["description"]="Z NOTATION LEFT IMAGE BRACKET",
+ ["linebreak"]="op",
+ ["unicodeslot"]=0x2987, -- ⦇
+ },
+ [0x2988]={
+ ["category"]="pe",
+ ["description"]="Z NOTATION RIGHT IMAGE BRACKET",
+ ["linebreak"]="cl",
+ ["unicodeslot"]=0x2988, -- ⦈
+ },
+ [0x2989]={
+ ["category"]="ps",
+ ["description"]="Z NOTATION LEFT BINDING BRACKET",
+ ["linebreak"]="op",
+ ["unicodeslot"]=0x2989, -- ⦉
+ },
+ [0x298A]={
+ ["category"]="pe",
+ ["description"]="Z NOTATION RIGHT BINDING BRACKET",
+ ["linebreak"]="cl",
+ ["unicodeslot"]=0x298A, -- ⦊
+ },
+ [0x298B]={
+ ["category"]="ps",
+ ["description"]="LEFT SQUARE BRACKET WITH UNDERBAR",
+ ["linebreak"]="op",
+ ["unicodeslot"]=0x298B, -- ⦋
+ },
+ [0x298C]={
+ ["category"]="pe",
+ ["description"]="RIGHT SQUARE BRACKET WITH UNDERBAR",
+ ["linebreak"]="cl",
+ ["unicodeslot"]=0x298C, -- ⦌
+ },
+ [0x298D]={
+ ["category"]="ps",
+ ["description"]="LEFT SQUARE BRACKET WITH TICK IN TOP CORNER",
+ ["linebreak"]="op",
+ ["unicodeslot"]=0x298D, -- â¦
+ },
+ [0x298E]={
+ ["category"]="pe",
+ ["description"]="RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER",
+ ["linebreak"]="cl",
+ ["unicodeslot"]=0x298E, -- ⦎
+ },
+ [0x298F]={
+ ["category"]="ps",
+ ["description"]="LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER",
+ ["linebreak"]="op",
+ ["unicodeslot"]=0x298F, -- â¦
+ },
+ [0x2990]={
+ ["category"]="pe",
+ ["description"]="RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER",
+ ["linebreak"]="cl",
+ ["unicodeslot"]=0x2990, -- â¦
+ },
+ [0x2991]={
+ ["category"]="ps",
+ ["description"]="LEFT ANGLE BRACKET WITH DOT",
+ ["linebreak"]="op",
+ ["unicodeslot"]=0x2991, -- ⦑
+ },
+ [0x2992]={
+ ["category"]="pe",
+ ["description"]="RIGHT ANGLE BRACKET WITH DOT",
+ ["linebreak"]="cl",
+ ["unicodeslot"]=0x2992, -- ⦒
+ },
+ [0x2993]={
+ ["category"]="ps",
+ ["description"]="LEFT ARC LESS-THAN BRACKET",
+ ["linebreak"]="op",
+ ["unicodeslot"]=0x2993, -- ⦓
+ },
+ [0x2994]={
+ ["category"]="pe",
+ ["description"]="RIGHT ARC GREATER-THAN BRACKET",
+ ["linebreak"]="cl",
+ ["unicodeslot"]=0x2994, -- ⦔
+ },
+ [0x2995]={
+ ["category"]="ps",
+ ["description"]="DOUBLE LEFT ARC GREATER-THAN BRACKET",
+ ["linebreak"]="op",
+ ["unicodeslot"]=0x2995, -- ⦕
+ },
+ [0x2996]={
+ ["category"]="pe",
+ ["description"]="DOUBLE RIGHT ARC LESS-THAN BRACKET",
+ ["linebreak"]="cl",
+ ["unicodeslot"]=0x2996, -- ⦖
+ },
+ [0x2997]={
+ ["category"]="ps",
+ ["description"]="LEFT BLACK TORTOISE SHELL BRACKET",
+ ["linebreak"]="op",
+ ["unicodeslot"]=0x2997, -- ⦗
+ },
+ [0x2998]={
+ ["category"]="pe",
+ ["description"]="RIGHT BLACK TORTOISE SHELL BRACKET",
+ ["linebreak"]="cl",
+ ["unicodeslot"]=0x2998, -- ⦘
+ },
+ [0x2999]={
+ ["category"]="sm",
+ ["description"]="DOTTED FENCE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2999, -- ⦙
+ },
+ [0x299A]={
+ ["category"]="sm",
+ ["description"]="VERTICAL ZIGZAG LINE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x299A, -- ⦚
+ },
+ [0x299B]={
+ ["category"]="sm",
+ ["description"]="MEASURED ANGLE OPENING LEFT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x299B, -- ⦛
+ },
+ [0x299C]={
+ ["category"]="sm",
+ ["description"]="RIGHT ANGLE VARIANT WITH SQUARE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x299C, -- ⦜
+ },
+ [0x299D]={
+ ["category"]="sm",
+ ["description"]="MEASURED RIGHT ANGLE WITH DOT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x299D, -- â¦
+ },
+ [0x299E]={
+ ["category"]="sm",
+ ["description"]="ANGLE WITH S INSIDE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x299E, -- ⦞
+ },
+ [0x299F]={
+ ["category"]="sm",
+ ["description"]="ACUTE ANGLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x299F, -- ⦟
+ },
+ [0x29A0]={
+ ["category"]="sm",
+ ["description"]="SPHERICAL ANGLE OPENING LEFT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29A0, -- ⦠
+ },
+ [0x29A1]={
+ ["category"]="sm",
+ ["description"]="SPHERICAL ANGLE OPENING UP",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29A1, -- ⦡
+ },
+ [0x29A2]={
+ ["category"]="sm",
+ ["description"]="TURNED ANGLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29A2, -- ⦢
+ },
+ [0x29A3]={
+ ["category"]="sm",
+ ["description"]="REVERSED ANGLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29A3, -- ⦣
+ },
+ [0x29A4]={
+ ["category"]="sm",
+ ["description"]="ANGLE WITH UNDERBAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29A4, -- ⦤
+ },
+ [0x29A5]={
+ ["category"]="sm",
+ ["description"]="REVERSED ANGLE WITH UNDERBAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29A5, -- ⦥
+ },
+ [0x29A6]={
+ ["category"]="sm",
+ ["description"]="OBLIQUE ANGLE OPENING UP",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29A6, -- ⦦
+ },
+ [0x29A7]={
+ ["category"]="sm",
+ ["description"]="OBLIQUE ANGLE OPENING DOWN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29A7, -- ⦧
+ },
+ [0x29A8]={
+ ["category"]="sm",
+ ["description"]="MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND RIGHT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29A8, -- ⦨
+ },
+ [0x29A9]={
+ ["category"]="sm",
+ ["description"]="MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND LEFT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29A9, -- ⦩
+ },
+ [0x29AA]={
+ ["category"]="sm",
+ ["description"]="MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND RIGHT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29AA, -- ⦪
+ },
+ [0x29AB]={
+ ["category"]="sm",
+ ["description"]="MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND LEFT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29AB, -- ⦫
+ },
+ [0x29AC]={
+ ["category"]="sm",
+ ["description"]="MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND UP",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29AC, -- ⦬
+ },
+ [0x29AD]={
+ ["category"]="sm",
+ ["description"]="MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND UP",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29AD, -- ⦭
+ },
+ [0x29AE]={
+ ["category"]="sm",
+ ["description"]="MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND DOWN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29AE, -- ⦮
+ },
+ [0x29AF]={
+ ["category"]="sm",
+ ["description"]="MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND DOWN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29AF, -- ⦯
+ },
+ [0x29B0]={
+ ["category"]="sm",
+ ["description"]="REVERSED EMPTY SET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29B0, -- ⦰
+ },
+ [0x29B1]={
+ ["category"]="sm",
+ ["description"]="EMPTY SET WITH OVERBAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29B1, -- ⦱
+ },
+ [0x29B2]={
+ ["category"]="sm",
+ ["description"]="EMPTY SET WITH SMALL CIRCLE ABOVE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29B2, -- ⦲
+ },
+ [0x29B3]={
+ ["category"]="sm",
+ ["description"]="EMPTY SET WITH RIGHT ARROW ABOVE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29B3, -- ⦳
+ },
+ [0x29B4]={
+ ["category"]="sm",
+ ["description"]="EMPTY SET WITH LEFT ARROW ABOVE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29B4, -- ⦴
+ },
+ [0x29B5]={
+ ["category"]="sm",
+ ["description"]="CIRCLE WITH HORIZONTAL BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29B5, -- ⦵
+ },
+ [0x29B6]={
+ ["category"]="sm",
+ ["description"]="CIRCLED VERTICAL BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29B6, -- ⦶
+ },
+ [0x29B7]={
+ ["category"]="sm",
+ ["description"]="CIRCLED PARALLEL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29B7, -- ⦷
+ },
+ [0x29B8]={
+ ["category"]="sm",
+ ["description"]="CIRCLED REVERSE SOLIDUS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29B8, -- ⦸
+ },
+ [0x29B9]={
+ ["category"]="sm",
+ ["description"]="CIRCLED PERPENDICULAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29B9, -- ⦹
+ },
+ [0x29BA]={
+ ["category"]="sm",
+ ["description"]="CIRCLE DIVIDED BY HORIZONTAL BAR AND TOP HALF DIVIDED BY VERTICAL BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29BA, -- ⦺
+ },
+ [0x29BB]={
+ ["category"]="sm",
+ ["description"]="CIRCLE WITH SUPERIMPOSED X",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29BB, -- ⦻
+ },
+ [0x29BC]={
+ ["category"]="sm",
+ ["description"]="CIRCLED ANTICLOCKWISE-ROTATED DIVISION SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29BC, -- ⦼
+ },
+ [0x29BD]={
+ ["category"]="sm",
+ ["description"]="UP ARROW THROUGH CIRCLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29BD, -- ⦽
+ },
+ [0x29BE]={
+ ["category"]="sm",
+ ["description"]="CIRCLED WHITE BULLET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29BE, -- ⦾
+ },
+ [0x29BF]={
+ ["category"]="sm",
+ ["description"]="CIRCLED BULLET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29BF, -- ⦿
+ },
+ [0x29C0]={
+ ["category"]="sm",
+ ["description"]="CIRCLED LESS-THAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29C0, -- ⧀
+ },
+ [0x29C1]={
+ ["category"]="sm",
+ ["description"]="CIRCLED GREATER-THAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29C1, -- â§
+ },
+ [0x29C2]={
+ ["category"]="sm",
+ ["description"]="CIRCLE WITH SMALL CIRCLE TO THE RIGHT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29C2, -- ⧂
+ },
+ [0x29C3]={
+ ["category"]="sm",
+ ["description"]="CIRCLE WITH TWO HORIZONTAL STROKES TO THE RIGHT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29C3, -- ⧃
+ },
+ [0x29C4]={
+ ["category"]="sm",
+ ["description"]="SQUARED RISING DIAGONAL SLASH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29C4, -- ⧄
+ },
+ [0x29C5]={
+ ["category"]="sm",
+ ["description"]="SQUARED FALLING DIAGONAL SLASH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29C5, -- ⧅
+ },
+ [0x29C6]={
+ ["category"]="sm",
+ ["description"]="SQUARED ASTERISK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29C6, -- ⧆
+ },
+ [0x29C7]={
+ ["category"]="sm",
+ ["description"]="SQUARED SMALL CIRCLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29C7, -- ⧇
+ },
+ [0x29C8]={
+ ["category"]="sm",
+ ["description"]="SQUARED SQUARE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29C8, -- ⧈
+ },
+ [0x29C9]={
+ ["category"]="sm",
+ ["description"]="TWO JOINED SQUARES",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29C9, -- ⧉
+ },
+ [0x29CA]={
+ ["category"]="sm",
+ ["description"]="TRIANGLE WITH DOT ABOVE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29CA, -- ⧊
+ },
+ [0x29CB]={
+ ["category"]="sm",
+ ["description"]="TRIANGLE WITH UNDERBAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29CB, -- ⧋
+ },
+ [0x29CC]={
+ ["category"]="sm",
+ ["description"]="S IN TRIANGLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29CC, -- ⧌
+ },
+ [0x29CD]={
+ ["category"]="sm",
+ ["description"]="TRIANGLE WITH SERIFS AT BOTTOM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29CD, -- â§
+ },
+ [0x29CE]={
+ ["category"]="sm",
+ ["description"]="RIGHT TRIANGLE ABOVE LEFT TRIANGLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29CE, -- ⧎
+ },
+ [0x29CF]={
+ ["category"]="sm",
+ ["description"]="LEFT TRIANGLE BESIDE VERTICAL BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29CF, -- â§
+ },
+ [0x29D0]={
+ ["category"]="sm",
+ ["description"]="VERTICAL BAR BESIDE RIGHT TRIANGLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29D0, -- â§
+ },
+ [0x29D1]={
+ ["category"]="sm",
+ ["description"]="BOWTIE WITH LEFT HALF BLACK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29D1, -- ⧑
+ },
+ [0x29D2]={
+ ["category"]="sm",
+ ["description"]="BOWTIE WITH RIGHT HALF BLACK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29D2, -- ⧒
+ },
+ [0x29D3]={
+ ["category"]="sm",
+ ["description"]="BLACK BOWTIE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29D3, -- ⧓
+ },
+ [0x29D4]={
+ ["category"]="sm",
+ ["description"]="TIMES WITH LEFT HALF BLACK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29D4, -- ⧔
+ },
+ [0x29D5]={
+ ["category"]="sm",
+ ["description"]="TIMES WITH RIGHT HALF BLACK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29D5, -- ⧕
+ },
+ [0x29D6]={
+ ["category"]="sm",
+ ["description"]="WHITE HOURGLASS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29D6, -- ⧖
+ },
+ [0x29D7]={
+ ["category"]="sm",
+ ["description"]="BLACK HOURGLASS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29D7, -- ⧗
+ },
+ [0x29D8]={
+ ["category"]="ps",
+ ["description"]="LEFT WIGGLY FENCE",
+ ["linebreak"]="op",
+ ["unicodeslot"]=0x29D8, -- ⧘
+ },
+ [0x29D9]={
+ ["category"]="pe",
+ ["description"]="RIGHT WIGGLY FENCE",
+ ["linebreak"]="cl",
+ ["unicodeslot"]=0x29D9, -- ⧙
+ },
+ [0x29DA]={
+ ["category"]="ps",
+ ["description"]="LEFT DOUBLE WIGGLY FENCE",
+ ["linebreak"]="op",
+ ["unicodeslot"]=0x29DA, -- ⧚
+ },
+ [0x29DB]={
+ ["category"]="pe",
+ ["description"]="RIGHT DOUBLE WIGGLY FENCE",
+ ["linebreak"]="cl",
+ ["unicodeslot"]=0x29DB, -- ⧛
+ },
+ [0x29DC]={
+ ["category"]="sm",
+ ["description"]="INCOMPLETE INFINITY",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29DC, -- ⧜
+ },
+ [0x29DD]={
+ ["category"]="sm",
+ ["description"]="TIE OVER INFINITY",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29DD, -- â§
+ },
+ [0x29DE]={
+ ["category"]="sm",
+ ["description"]="INFINITY NEGATED WITH VERTICAL BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29DE, -- ⧞
+ },
+ [0x29DF]={
+ ["category"]="sm",
+ ["description"]="DOUBLE-ENDED MULTIMAP",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29DF, -- ⧟
+ },
+ [0x29E0]={
+ ["category"]="sm",
+ ["description"]="SQUARE WITH CONTOURED OUTLINE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29E0, -- ⧠
+ },
+ [0x29E1]={
+ ["category"]="sm",
+ ["description"]="INCREASES AS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29E1, -- ⧡
+ },
+ [0x29E2]={
+ ["category"]="sm",
+ ["description"]="SHUFFLE PRODUCT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29E2, -- ⧢
+ },
+ [0x29E3]={
+ ["category"]="sm",
+ ["description"]="EQUALS SIGN AND SLANTED PARALLEL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29E3, -- ⧣
+ },
+ [0x29E4]={
+ ["category"]="sm",
+ ["description"]="EQUALS SIGN AND SLANTED PARALLEL WITH TILDE ABOVE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29E4, -- ⧤
+ },
+ [0x29E5]={
+ ["category"]="sm",
+ ["description"]="IDENTICAL TO AND SLANTED PARALLEL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29E5, -- ⧥
+ },
+ [0x29E6]={
+ ["category"]="sm",
+ ["description"]="GLEICH STARK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29E6, -- ⧦
+ },
+ [0x29E7]={
+ ["category"]="sm",
+ ["description"]="THERMODYNAMIC",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29E7, -- ⧧
+ },
+ [0x29E8]={
+ ["category"]="sm",
+ ["description"]="DOWN-POINTING TRIANGLE WITH LEFT HALF BLACK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29E8, -- ⧨
+ },
+ [0x29E9]={
+ ["category"]="sm",
+ ["description"]="DOWN-POINTING TRIANGLE WITH RIGHT HALF BLACK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29E9, -- ⧩
+ },
+ [0x29EA]={
+ ["category"]="sm",
+ ["description"]="BLACK DIAMOND WITH DOWN ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29EA, -- ⧪
+ },
+ [0x29EB]={
+ ["category"]="sm",
+ ["description"]="BLACK LOZENGE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29EB, -- ⧫
+ },
+ [0x29EC]={
+ ["category"]="sm",
+ ["description"]="WHITE CIRCLE WITH DOWN ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29EC, -- ⧬
+ },
+ [0x29ED]={
+ ["category"]="sm",
+ ["description"]="BLACK CIRCLE WITH DOWN ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29ED, -- ⧭
+ },
+ [0x29EE]={
+ ["category"]="sm",
+ ["description"]="ERROR-BARRED WHITE SQUARE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29EE, -- ⧮
+ },
+ [0x29EF]={
+ ["category"]="sm",
+ ["description"]="ERROR-BARRED BLACK SQUARE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29EF, -- ⧯
+ },
+ [0x29F0]={
+ ["category"]="sm",
+ ["description"]="ERROR-BARRED WHITE DIAMOND",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29F0, -- ⧰
+ },
+ [0x29F1]={
+ ["category"]="sm",
+ ["description"]="ERROR-BARRED BLACK DIAMOND",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29F1, -- ⧱
+ },
+ [0x29F2]={
+ ["category"]="sm",
+ ["description"]="ERROR-BARRED WHITE CIRCLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29F2, -- ⧲
+ },
+ [0x29F3]={
+ ["category"]="sm",
+ ["description"]="ERROR-BARRED BLACK CIRCLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29F3, -- ⧳
+ },
+ [0x29F4]={
+ ["category"]="sm",
+ ["description"]="RULE-DELAYED",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29F4, -- ⧴
+ },
+ [0x29F5]={
+ ["category"]="sm",
+ ["description"]="REVERSE SOLIDUS OPERATOR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29F5, -- ⧵
+ },
+ [0x29F6]={
+ ["category"]="sm",
+ ["description"]="SOLIDUS WITH OVERBAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29F6, -- ⧶
+ },
+ [0x29F7]={
+ ["category"]="sm",
+ ["description"]="REVERSE SOLIDUS WITH HORIZONTAL STROKE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29F7, -- ⧷
+ },
+ [0x29F8]={
+ ["category"]="sm",
+ ["description"]="BIG SOLIDUS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29F8, -- ⧸
+ },
+ [0x29F9]={
+ ["category"]="sm",
+ ["description"]="BIG REVERSE SOLIDUS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29F9, -- ⧹
+ },
+ [0x29FA]={
+ ["category"]="sm",
+ ["description"]="DOUBLE PLUS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29FA, -- ⧺
+ },
+ [0x29FB]={
+ ["category"]="sm",
+ ["description"]="TRIPLE PLUS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29FB, -- ⧻
+ },
+ [0x29FC]={
+ ["category"]="ps",
+ ["description"]="LEFT-POINTING CURVED ANGLE BRACKET",
+ ["linebreak"]="op",
+ ["unicodeslot"]=0x29FC, -- ⧼
+ },
+ [0x29FD]={
+ ["category"]="pe",
+ ["description"]="RIGHT-POINTING CURVED ANGLE BRACKET",
+ ["linebreak"]="cl",
+ ["unicodeslot"]=0x29FD, -- ⧽
+ },
+ [0x29FE]={
+ ["category"]="sm",
+ ["description"]="TINY",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29FE, -- ⧾
+ },
+ [0x29FF]={
+ ["category"]="sm",
+ ["description"]="MINY",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x29FF, -- ⧿
+ },
+ [0x2A00]={
+ ["category"]="sm",
+ ["description"]="N-ARY CIRCLED DOT OPERATOR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A00, -- ⨀
+ },
+ [0x2A01]={
+ ["category"]="sm",
+ ["description"]="N-ARY CIRCLED PLUS OPERATOR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A01, -- â¨
+ },
+ [0x2A02]={
+ ["category"]="sm",
+ ["description"]="N-ARY CIRCLED TIMES OPERATOR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A02, -- ⨂
+ },
+ [0x2A03]={
+ ["category"]="sm",
+ ["description"]="N-ARY UNION OPERATOR WITH DOT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A03, -- ⨃
+ },
+ [0x2A04]={
+ ["category"]="sm",
+ ["description"]="N-ARY UNION OPERATOR WITH PLUS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A04, -- ⨄
+ },
+ [0x2A05]={
+ ["category"]="sm",
+ ["description"]="N-ARY SQUARE INTERSECTION OPERATOR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A05, -- ⨅
+ },
+ [0x2A06]={
+ ["category"]="sm",
+ ["description"]="N-ARY SQUARE UNION OPERATOR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A06, -- ⨆
+ },
+ [0x2A07]={
+ ["category"]="sm",
+ ["description"]="TWO LOGICAL AND OPERATOR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A07, -- ⨇
+ },
+ [0x2A08]={
+ ["category"]="sm",
+ ["description"]="TWO LOGICAL OR OPERATOR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A08, -- ⨈
+ },
+ [0x2A09]={
+ ["category"]="sm",
+ ["description"]="N-ARY TIMES OPERATOR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A09, -- ⨉
+ },
+ [0x2A0A]={
+ ["category"]="sm",
+ ["description"]="MODULO TWO SUM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A0A, -- ⨊
+ },
+ [0x2A0B]={
+ ["category"]="sm",
+ ["description"]="SUMMATION WITH INTEGRAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A0B, -- ⨋
+ },
+ [0x2A0C]={
+ ["category"]="sm",
+ ["description"]="QUADRUPLE INTEGRAL OPERATOR",
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x222B, 0x222B, 0x222B, 0x222B },
+ ["unicodeslot"]=0x2A0C, -- ⨌
+ },
+ [0x2A0D]={
+ ["category"]="sm",
+ ["description"]="FINITE PART INTEGRAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A0D, -- â¨
+ },
+ [0x2A0E]={
+ ["category"]="sm",
+ ["description"]="INTEGRAL WITH DOUBLE STROKE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A0E, -- ⨎
+ },
+ [0x2A0F]={
+ ["category"]="sm",
+ ["description"]="INTEGRAL AVERAGE WITH SLASH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A0F, -- â¨
+ },
+ [0x2A10]={
+ ["category"]="sm",
+ ["description"]="CIRCULATION FUNCTION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A10, -- â¨
+ },
+ [0x2A11]={
+ ["category"]="sm",
+ ["description"]="ANTICLOCKWISE INTEGRATION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A11, -- ⨑
+ },
+ [0x2A12]={
+ ["category"]="sm",
+ ["description"]="LINE INTEGRATION WITH RECTANGULAR PATH AROUND POLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A12, -- ⨒
+ },
+ [0x2A13]={
+ ["category"]="sm",
+ ["description"]="LINE INTEGRATION WITH SEMICIRCULAR PATH AROUND POLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A13, -- ⨓
+ },
+ [0x2A14]={
+ ["category"]="sm",
+ ["description"]="LINE INTEGRATION NOT INCLUDING THE POLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A14, -- ⨔
+ },
+ [0x2A15]={
+ ["category"]="sm",
+ ["description"]="INTEGRAL AROUND A POINT OPERATOR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A15, -- ⨕
+ },
+ [0x2A16]={
+ ["category"]="sm",
+ ["description"]="QUATERNION INTEGRAL OPERATOR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A16, -- ⨖
+ },
+ [0x2A17]={
+ ["category"]="sm",
+ ["description"]="INTEGRAL WITH LEFTWARDS ARROW WITH HOOK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A17, -- ⨗
+ },
+ [0x2A18]={
+ ["category"]="sm",
+ ["description"]="INTEGRAL WITH TIMES SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A18, -- ⨘
+ },
+ [0x2A19]={
+ ["category"]="sm",
+ ["description"]="INTEGRAL WITH INTERSECTION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A19, -- ⨙
+ },
+ [0x2A1A]={
+ ["category"]="sm",
+ ["description"]="INTEGRAL WITH UNION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A1A, -- ⨚
+ },
+ [0x2A1B]={
+ ["category"]="sm",
+ ["description"]="INTEGRAL WITH OVERBAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A1B, -- ⨛
+ },
+ [0x2A1C]={
+ ["category"]="sm",
+ ["description"]="INTEGRAL WITH UNDERBAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A1C, -- ⨜
+ },
+ [0x2A1D]={
+ ["category"]="sm",
+ ["description"]="JOIN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A1D, -- â¨
+ },
+ [0x2A1E]={
+ ["category"]="sm",
+ ["description"]="LARGE LEFT TRIANGLE OPERATOR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A1E, -- ⨞
+ },
+ [0x2A1F]={
+ ["category"]="sm",
+ ["description"]="Z NOTATION SCHEMA COMPOSITION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A1F, -- ⨟
+ },
+ [0x2A20]={
+ ["category"]="sm",
+ ["description"]="Z NOTATION SCHEMA PIPING",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A20, -- ⨠
+ },
+ [0x2A21]={
+ ["category"]="sm",
+ ["description"]="Z NOTATION SCHEMA PROJECTION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A21, -- ⨡
+ },
+ [0x2A22]={
+ ["category"]="sm",
+ ["description"]="PLUS SIGN WITH SMALL CIRCLE ABOVE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A22, -- ⨢
+ },
+ [0x2A23]={
+ ["category"]="sm",
+ ["description"]="PLUS SIGN WITH CIRCUMFLEX ACCENT ABOVE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A23, -- ⨣
+ },
+ [0x2A24]={
+ ["category"]="sm",
+ ["description"]="PLUS SIGN WITH TILDE ABOVE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A24, -- ⨤
+ },
+ [0x2A25]={
+ ["category"]="sm",
+ ["description"]="PLUS SIGN WITH DOT BELOW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A25, -- ⨥
+ },
+ [0x2A26]={
+ ["category"]="sm",
+ ["description"]="PLUS SIGN WITH TILDE BELOW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A26, -- ⨦
+ },
+ [0x2A27]={
+ ["category"]="sm",
+ ["description"]="PLUS SIGN WITH SUBSCRIPT TWO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A27, -- ⨧
+ },
+ [0x2A28]={
+ ["category"]="sm",
+ ["description"]="PLUS SIGN WITH BLACK TRIANGLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A28, -- ⨨
+ },
+ [0x2A29]={
+ ["category"]="sm",
+ ["description"]="MINUS SIGN WITH COMMA ABOVE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A29, -- ⨩
+ },
+ [0x2A2A]={
+ ["category"]="sm",
+ ["description"]="MINUS SIGN WITH DOT BELOW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A2A, -- ⨪
+ },
+ [0x2A2B]={
+ ["category"]="sm",
+ ["description"]="MINUS SIGN WITH FALLING DOTS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A2B, -- ⨫
+ },
+ [0x2A2C]={
+ ["category"]="sm",
+ ["description"]="MINUS SIGN WITH RISING DOTS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A2C, -- ⨬
+ },
+ [0x2A2D]={
+ ["category"]="sm",
+ ["description"]="PLUS SIGN IN LEFT HALF CIRCLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A2D, -- ⨭
+ },
+ [0x2A2E]={
+ ["category"]="sm",
+ ["description"]="PLUS SIGN IN RIGHT HALF CIRCLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A2E, -- ⨮
+ },
+ [0x2A2F]={
+ ["category"]="sm",
+ ["description"]="VECTOR OR CROSS PRODUCT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A2F, -- ⨯
+ },
+ [0x2A30]={
+ ["category"]="sm",
+ ["description"]="MULTIPLICATION SIGN WITH DOT ABOVE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A30, -- ⨰
+ },
+ [0x2A31]={
+ ["category"]="sm",
+ ["description"]="MULTIPLICATION SIGN WITH UNDERBAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A31, -- ⨱
+ },
+ [0x2A32]={
+ ["category"]="sm",
+ ["description"]="SEMIDIRECT PRODUCT WITH BOTTOM CLOSED",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A32, -- ⨲
+ },
+ [0x2A33]={
+ ["category"]="sm",
+ ["description"]="SMASH PRODUCT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A33, -- ⨳
+ },
+ [0x2A34]={
+ ["category"]="sm",
+ ["description"]="MULTIPLICATION SIGN IN LEFT HALF CIRCLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A34, -- ⨴
+ },
+ [0x2A35]={
+ ["category"]="sm",
+ ["description"]="MULTIPLICATION SIGN IN RIGHT HALF CIRCLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A35, -- ⨵
+ },
+ [0x2A36]={
+ ["category"]="sm",
+ ["description"]="CIRCLED MULTIPLICATION SIGN WITH CIRCUMFLEX ACCENT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A36, -- ⨶
+ },
+ [0x2A37]={
+ ["category"]="sm",
+ ["description"]="MULTIPLICATION SIGN IN DOUBLE CIRCLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A37, -- ⨷
+ },
+ [0x2A38]={
+ ["category"]="sm",
+ ["description"]="CIRCLED DIVISION SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A38, -- ⨸
+ },
+ [0x2A39]={
+ ["category"]="sm",
+ ["description"]="PLUS SIGN IN TRIANGLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A39, -- ⨹
+ },
+ [0x2A3A]={
+ ["category"]="sm",
+ ["description"]="MINUS SIGN IN TRIANGLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A3A, -- ⨺
+ },
+ [0x2A3B]={
+ ["category"]="sm",
+ ["description"]="MULTIPLICATION SIGN IN TRIANGLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A3B, -- ⨻
+ },
+ [0x2A3C]={
+ ["category"]="sm",
+ ["description"]="INTERIOR PRODUCT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A3C, -- ⨼
+ },
+ [0x2A3D]={
+ ["category"]="sm",
+ ["description"]="RIGHTHAND INTERIOR PRODUCT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A3D, -- ⨽
+ },
+ [0x2A3E]={
+ ["category"]="sm",
+ ["description"]="Z NOTATION RELATIONAL COMPOSITION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A3E, -- ⨾
+ },
+ [0x2A3F]={
+ ["category"]="sm",
+ ["description"]="AMALGAMATION OR COPRODUCT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A3F, -- ⨿
+ },
+ [0x2A40]={
+ ["category"]="sm",
+ ["description"]="INTERSECTION WITH DOT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A40, -- â©€
+ },
+ [0x2A41]={
+ ["category"]="sm",
+ ["description"]="UNION WITH MINUS SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A41, -- â©
+ },
+ [0x2A42]={
+ ["category"]="sm",
+ ["description"]="UNION WITH OVERBAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A42, -- â©‚
+ },
+ [0x2A43]={
+ ["category"]="sm",
+ ["description"]="INTERSECTION WITH OVERBAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A43, -- ⩃
+ },
+ [0x2A44]={
+ ["category"]="sm",
+ ["description"]="INTERSECTION WITH LOGICAL AND",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A44, -- â©„
+ },
+ [0x2A45]={
+ ["category"]="sm",
+ ["description"]="UNION WITH LOGICAL OR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A45, -- â©…
+ },
+ [0x2A46]={
+ ["category"]="sm",
+ ["description"]="UNION ABOVE INTERSECTION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A46, -- ⩆
+ },
+ [0x2A47]={
+ ["category"]="sm",
+ ["description"]="INTERSECTION ABOVE UNION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A47, -- ⩇
+ },
+ [0x2A48]={
+ ["category"]="sm",
+ ["description"]="UNION ABOVE BAR ABOVE INTERSECTION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A48, -- ⩈
+ },
+ [0x2A49]={
+ ["category"]="sm",
+ ["description"]="INTERSECTION ABOVE BAR ABOVE UNION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A49, -- ⩉
+ },
+ [0x2A4A]={
+ ["category"]="sm",
+ ["description"]="UNION BESIDE AND JOINED WITH UNION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A4A, -- â©Š
+ },
+ [0x2A4B]={
+ ["category"]="sm",
+ ["description"]="INTERSECTION BESIDE AND JOINED WITH INTERSECTION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A4B, -- â©‹
+ },
+ [0x2A4C]={
+ ["category"]="sm",
+ ["description"]="CLOSED UNION WITH SERIFS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A4C, -- ⩌
+ },
+ [0x2A4D]={
+ ["category"]="sm",
+ ["description"]="CLOSED INTERSECTION WITH SERIFS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A4D, -- â©
+ },
+ [0x2A4E]={
+ ["category"]="sm",
+ ["description"]="DOUBLE SQUARE INTERSECTION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A4E, -- â©Ž
+ },
+ [0x2A4F]={
+ ["category"]="sm",
+ ["description"]="DOUBLE SQUARE UNION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A4F, -- â©
+ },
+ [0x2A50]={
+ ["category"]="sm",
+ ["description"]="CLOSED UNION WITH SERIFS AND SMASH PRODUCT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A50, -- â©
+ },
+ [0x2A51]={
+ ["category"]="sm",
+ ["description"]="LOGICAL AND WITH DOT ABOVE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A51, -- â©‘
+ },
+ [0x2A52]={
+ ["category"]="sm",
+ ["description"]="LOGICAL OR WITH DOT ABOVE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A52, -- â©’
+ },
+ [0x2A53]={
+ ["category"]="sm",
+ ["description"]="DOUBLE LOGICAL AND",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A53, -- â©“
+ },
+ [0x2A54]={
+ ["category"]="sm",
+ ["description"]="DOUBLE LOGICAL OR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A54, -- â©”
+ },
+ [0x2A55]={
+ ["category"]="sm",
+ ["description"]="TWO INTERSECTING LOGICAL AND",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A55, -- â©•
+ },
+ [0x2A56]={
+ ["category"]="sm",
+ ["description"]="TWO INTERSECTING LOGICAL OR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A56, -- â©–
+ },
+ [0x2A57]={
+ ["category"]="sm",
+ ["description"]="SLOPING LARGE OR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A57, -- â©—
+ },
+ [0x2A58]={
+ ["category"]="sm",
+ ["description"]="SLOPING LARGE AND",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A58, -- ⩘
+ },
+ [0x2A59]={
+ ["category"]="sm",
+ ["description"]="LOGICAL OR OVERLAPPING LOGICAL AND",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A59, -- â©™
+ },
+ [0x2A5A]={
+ ["category"]="sm",
+ ["description"]="LOGICAL AND WITH MIDDLE STEM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A5A, -- â©š
+ },
+ [0x2A5B]={
+ ["category"]="sm",
+ ["description"]="LOGICAL OR WITH MIDDLE STEM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A5B, -- â©›
+ },
+ [0x2A5C]={
+ ["category"]="sm",
+ ["description"]="LOGICAL AND WITH HORIZONTAL DASH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A5C, -- ⩜
+ },
+ [0x2A5D]={
+ ["category"]="sm",
+ ["description"]="LOGICAL OR WITH HORIZONTAL DASH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A5D, -- â©
+ },
+ [0x2A5E]={
+ ["category"]="sm",
+ ["description"]="LOGICAL AND WITH DOUBLE OVERBAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A5E, -- â©ž
+ },
+ [0x2A5F]={
+ ["category"]="sm",
+ ["description"]="LOGICAL AND WITH UNDERBAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A5F, -- â©Ÿ
+ },
+ [0x2A60]={
+ ["category"]="sm",
+ ["description"]="LOGICAL AND WITH DOUBLE UNDERBAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A60, -- â© 
+ },
+ [0x2A61]={
+ ["category"]="sm",
+ ["description"]="SMALL VEE WITH UNDERBAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A61, -- â©¡
+ },
+ [0x2A62]={
+ ["category"]="sm",
+ ["description"]="LOGICAL OR WITH DOUBLE OVERBAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A62, -- â©¢
+ },
+ [0x2A63]={
+ ["category"]="sm",
+ ["description"]="LOGICAL OR WITH DOUBLE UNDERBAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A63, -- â©£
+ },
+ [0x2A64]={
+ ["category"]="sm",
+ ["description"]="Z NOTATION DOMAIN ANTIRESTRICTION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A64, -- ⩤
+ },
+ [0x2A65]={
+ ["category"]="sm",
+ ["description"]="Z NOTATION RANGE ANTIRESTRICTION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A65, -- â©¥
+ },
+ [0x2A66]={
+ ["category"]="sm",
+ ["description"]="EQUALS SIGN WITH DOT BELOW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A66, -- ⩦
+ },
+ [0x2A67]={
+ ["category"]="sm",
+ ["description"]="IDENTICAL WITH DOT ABOVE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A67, -- ⩧
+ },
+ [0x2A68]={
+ ["category"]="sm",
+ ["description"]="TRIPLE HORIZONTAL BAR WITH DOUBLE VERTICAL STROKE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A68, -- ⩨
+ },
+ [0x2A69]={
+ ["category"]="sm",
+ ["description"]="TRIPLE HORIZONTAL BAR WITH TRIPLE VERTICAL STROKE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A69, -- â©©
+ },
+ [0x2A6A]={
+ ["category"]="sm",
+ ["description"]="TILDE OPERATOR WITH DOT ABOVE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A6A, -- ⩪
+ },
+ [0x2A6B]={
+ ["category"]="sm",
+ ["description"]="TILDE OPERATOR WITH RISING DOTS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A6B, -- â©«
+ },
+ [0x2A6C]={
+ ["category"]="sm",
+ ["description"]="SIMILAR MINUS SIMILAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A6C, -- ⩬
+ },
+ [0x2A6D]={
+ ["category"]="sm",
+ ["description"]="CONGRUENT WITH DOT ABOVE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A6D, -- â©­
+ },
+ [0x2A6E]={
+ ["category"]="sm",
+ ["description"]="EQUALS WITH ASTERISK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A6E, -- â©®
+ },
+ [0x2A6F]={
+ ["category"]="sm",
+ ["description"]="ALMOST EQUAL TO WITH CIRCUMFLEX ACCENT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A6F, -- ⩯
+ },
+ [0x2A70]={
+ ["category"]="sm",
+ ["description"]="APPROXIMATELY EQUAL OR EQUAL TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A70, -- â©°
+ },
+ [0x2A71]={
+ ["category"]="sm",
+ ["description"]="EQUALS SIGN ABOVE PLUS SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A71, -- ⩱
+ },
+ [0x2A72]={
+ ["category"]="sm",
+ ["description"]="PLUS SIGN ABOVE EQUALS SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A72, -- ⩲
+ },
+ [0x2A73]={
+ ["category"]="sm",
+ ["description"]="EQUALS SIGN ABOVE TILDE OPERATOR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A73, -- ⩳
+ },
+ [0x2A74]={
+ ["category"]="sm",
+ ["description"]="DOUBLE COLON EQUAL",
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x003A, 0x003A, 0x003D },
+ ["unicodeslot"]=0x2A74, -- â©´
+ },
+ [0x2A75]={
+ ["category"]="sm",
+ ["description"]="TWO CONSECUTIVE EQUALS SIGNS",
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x003D, 0x003D },
+ ["unicodeslot"]=0x2A75, -- ⩵
+ },
+ [0x2A76]={
+ ["category"]="sm",
+ ["description"]="THREE CONSECUTIVE EQUALS SIGNS",
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x003D, 0x003D, 0x003D },
+ ["unicodeslot"]=0x2A76, -- ⩶
+ },
+ [0x2A77]={
+ ["category"]="sm",
+ ["description"]="EQUALS SIGN WITH TWO DOTS ABOVE AND TWO DOTS BELOW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A77, -- â©·
+ },
+ [0x2A78]={
+ ["category"]="sm",
+ ["description"]="EQUIVALENT WITH FOUR DOTS ABOVE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A78, -- ⩸
+ },
+ [0x2A79]={
+ ["category"]="sm",
+ ["description"]="LESS-THAN WITH CIRCLE INSIDE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A79, -- ⩹
+ },
+ [0x2A7A]={
+ ["category"]="sm",
+ ["description"]="GREATER-THAN WITH CIRCLE INSIDE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A7A, -- ⩺
+ },
+ [0x2A7B]={
+ ["category"]="sm",
+ ["description"]="LESS-THAN WITH QUESTION MARK ABOVE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A7B, -- â©»
+ },
+ [0x2A7C]={
+ ["category"]="sm",
+ ["description"]="GREATER-THAN WITH QUESTION MARK ABOVE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A7C, -- ⩼
+ },
+ [0x2A7D]={
+ ["category"]="sm",
+ ["description"]="LESS-THAN OR SLANTED EQUAL TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A7D, -- ⩽
+ },
+ [0x2A7E]={
+ ["category"]="sm",
+ ["description"]="GREATER-THAN OR SLANTED EQUAL TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A7E, -- ⩾
+ },
+ [0x2A7F]={
+ ["category"]="sm",
+ ["description"]="LESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A7F, -- â©¿
+ },
+ [0x2A80]={
+ ["category"]="sm",
+ ["description"]="GREATER-THAN OR SLANTED EQUAL TO WITH DOT INSIDE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A80, -- ⪀
+ },
+ [0x2A81]={
+ ["category"]="sm",
+ ["description"]="LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A81, -- âª
+ },
+ [0x2A82]={
+ ["category"]="sm",
+ ["description"]="GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A82, -- ⪂
+ },
+ [0x2A83]={
+ ["category"]="sm",
+ ["description"]="LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A83, -- ⪃
+ },
+ [0x2A84]={
+ ["category"]="sm",
+ ["description"]="GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A84, -- ⪄
+ },
+ [0x2A85]={
+ ["category"]="sm",
+ ["description"]="LESS-THAN OR APPROXIMATE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A85, -- ⪅
+ },
+ [0x2A86]={
+ ["category"]="sm",
+ ["description"]="GREATER-THAN OR APPROXIMATE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A86, -- ⪆
+ },
+ [0x2A87]={
+ ["category"]="sm",
+ ["description"]="LESS-THAN AND SINGLE-LINE NOT EQUAL TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A87, -- ⪇
+ },
+ [0x2A88]={
+ ["category"]="sm",
+ ["description"]="GREATER-THAN AND SINGLE-LINE NOT EQUAL TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A88, -- ⪈
+ },
+ [0x2A89]={
+ ["category"]="sm",
+ ["description"]="LESS-THAN AND NOT APPROXIMATE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A89, -- ⪉
+ },
+ [0x2A8A]={
+ ["category"]="sm",
+ ["description"]="GREATER-THAN AND NOT APPROXIMATE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A8A, -- ⪊
+ },
+ [0x2A8B]={
+ ["category"]="sm",
+ ["description"]="LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A8B, -- ⪋
+ },
+ [0x2A8C]={
+ ["category"]="sm",
+ ["description"]="GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A8C, -- ⪌
+ },
+ [0x2A8D]={
+ ["category"]="sm",
+ ["description"]="LESS-THAN ABOVE SIMILAR OR EQUAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A8D, -- âª
+ },
+ [0x2A8E]={
+ ["category"]="sm",
+ ["description"]="GREATER-THAN ABOVE SIMILAR OR EQUAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A8E, -- ⪎
+ },
+ [0x2A8F]={
+ ["category"]="sm",
+ ["description"]="LESS-THAN ABOVE SIMILAR ABOVE GREATER-THAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A8F, -- âª
+ },
+ [0x2A90]={
+ ["category"]="sm",
+ ["description"]="GREATER-THAN ABOVE SIMILAR ABOVE LESS-THAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A90, -- âª
+ },
+ [0x2A91]={
+ ["category"]="sm",
+ ["description"]="LESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A91, -- ⪑
+ },
+ [0x2A92]={
+ ["category"]="sm",
+ ["description"]="GREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A92, -- ⪒
+ },
+ [0x2A93]={
+ ["category"]="sm",
+ ["description"]="LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A93, -- ⪓
+ },
+ [0x2A94]={
+ ["category"]="sm",
+ ["description"]="GREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABOVE SLANTED EQUAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A94, -- ⪔
+ },
+ [0x2A95]={
+ ["category"]="sm",
+ ["description"]="SLANTED EQUAL TO OR LESS-THAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A95, -- ⪕
+ },
+ [0x2A96]={
+ ["category"]="sm",
+ ["description"]="SLANTED EQUAL TO OR GREATER-THAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A96, -- ⪖
+ },
+ [0x2A97]={
+ ["category"]="sm",
+ ["description"]="SLANTED EQUAL TO OR LESS-THAN WITH DOT INSIDE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A97, -- ⪗
+ },
+ [0x2A98]={
+ ["category"]="sm",
+ ["description"]="SLANTED EQUAL TO OR GREATER-THAN WITH DOT INSIDE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A98, -- ⪘
+ },
+ [0x2A99]={
+ ["category"]="sm",
+ ["description"]="DOUBLE-LINE EQUAL TO OR LESS-THAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A99, -- ⪙
+ },
+ [0x2A9A]={
+ ["category"]="sm",
+ ["description"]="DOUBLE-LINE EQUAL TO OR GREATER-THAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A9A, -- ⪚
+ },
+ [0x2A9B]={
+ ["category"]="sm",
+ ["description"]="DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A9B, -- ⪛
+ },
+ [0x2A9C]={
+ ["category"]="sm",
+ ["description"]="DOUBLE-LINE SLANTED EQUAL TO OR GREATER-THAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A9C, -- ⪜
+ },
+ [0x2A9D]={
+ ["category"]="sm",
+ ["description"]="SIMILAR OR LESS-THAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A9D, -- âª
+ },
+ [0x2A9E]={
+ ["category"]="sm",
+ ["description"]="SIMILAR OR GREATER-THAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A9E, -- ⪞
+ },
+ [0x2A9F]={
+ ["category"]="sm",
+ ["description"]="SIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2A9F, -- ⪟
+ },
+ [0x2AA0]={
+ ["category"]="sm",
+ ["description"]="SIMILAR ABOVE GREATER-THAN ABOVE EQUALS SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AA0, -- ⪠
+ },
+ [0x2AA1]={
+ ["category"]="sm",
+ ["description"]="DOUBLE NESTED LESS-THAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AA1, -- ⪡
+ },
+ [0x2AA2]={
+ ["category"]="sm",
+ ["description"]="DOUBLE NESTED GREATER-THAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AA2, -- ⪢
+ },
+ [0x2AA3]={
+ ["category"]="sm",
+ ["description"]="DOUBLE NESTED LESS-THAN WITH UNDERBAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AA3, -- ⪣
+ },
+ [0x2AA4]={
+ ["category"]="sm",
+ ["description"]="GREATER-THAN OVERLAPPING LESS-THAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AA4, -- ⪤
+ },
+ [0x2AA5]={
+ ["category"]="sm",
+ ["description"]="GREATER-THAN BESIDE LESS-THAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AA5, -- ⪥
+ },
+ [0x2AA6]={
+ ["category"]="sm",
+ ["description"]="LESS-THAN CLOSED BY CURVE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AA6, -- ⪦
+ },
+ [0x2AA7]={
+ ["category"]="sm",
+ ["description"]="GREATER-THAN CLOSED BY CURVE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AA7, -- ⪧
+ },
+ [0x2AA8]={
+ ["category"]="sm",
+ ["description"]="LESS-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AA8, -- ⪨
+ },
+ [0x2AA9]={
+ ["category"]="sm",
+ ["description"]="GREATER-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AA9, -- ⪩
+ },
+ [0x2AAA]={
+ ["category"]="sm",
+ ["description"]="SMALLER THAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AAA, -- ⪪
+ },
+ [0x2AAB]={
+ ["category"]="sm",
+ ["description"]="LARGER THAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AAB, -- ⪫
+ },
+ [0x2AAC]={
+ ["category"]="sm",
+ ["description"]="SMALLER THAN OR EQUAL TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AAC, -- ⪬
+ },
+ [0x2AAD]={
+ ["category"]="sm",
+ ["description"]="LARGER THAN OR EQUAL TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AAD, -- ⪭
+ },
+ [0x2AAE]={
+ ["category"]="sm",
+ ["description"]="EQUALS SIGN WITH BUMPY ABOVE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AAE, -- ⪮
+ },
+ [0x2AAF]={
+ ["category"]="sm",
+ ["description"]="PRECEDES ABOVE SINGLE-LINE EQUALS SIGN",
+ ["mathclass"]="relation",
+ ["mathname"]="preceq",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AAF, -- ⪯
+ },
+ [0x2AB0]={
+ ["category"]="sm",
+ ["description"]="SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN",
+ ["mathclass"]="relation",
+ ["mathname"]="succeq",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AB0, -- ⪰
+ },
+ [0x2AB1]={
+ ["category"]="sm",
+ ["description"]="PRECEDES ABOVE SINGLE-LINE NOT EQUAL TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AB1, -- ⪱
+ },
+ [0x2AB2]={
+ ["category"]="sm",
+ ["description"]="SUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AB2, -- ⪲
+ },
+ [0x2AB3]={
+ ["category"]="sm",
+ ["description"]="PRECEDES ABOVE EQUALS SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AB3, -- ⪳
+ },
+ [0x2AB4]={
+ ["category"]="sm",
+ ["description"]="SUCCEEDS ABOVE EQUALS SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AB4, -- ⪴
+ },
+ [0x2AB5]={
+ ["category"]="sm",
+ ["description"]="PRECEDES ABOVE NOT EQUAL TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AB5, -- ⪵
+ },
+ [0x2AB6]={
+ ["category"]="sm",
+ ["description"]="SUCCEEDS ABOVE NOT EQUAL TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AB6, -- ⪶
+ },
+ [0x2AB7]={
+ ["category"]="sm",
+ ["description"]="PRECEDES ABOVE ALMOST EQUAL TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AB7, -- ⪷
+ },
+ [0x2AB8]={
+ ["category"]="sm",
+ ["description"]="SUCCEEDS ABOVE ALMOST EQUAL TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AB8, -- ⪸
+ },
+ [0x2AB9]={
+ ["category"]="sm",
+ ["description"]="PRECEDES ABOVE NOT ALMOST EQUAL TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AB9, -- ⪹
+ },
+ [0x2ABA]={
+ ["category"]="sm",
+ ["description"]="SUCCEEDS ABOVE NOT ALMOST EQUAL TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2ABA, -- ⪺
+ },
+ [0x2ABB]={
+ ["category"]="sm",
+ ["description"]="DOUBLE PRECEDES",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2ABB, -- ⪻
+ },
+ [0x2ABC]={
+ ["category"]="sm",
+ ["description"]="DOUBLE SUCCEEDS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2ABC, -- ⪼
+ },
+ [0x2ABD]={
+ ["category"]="sm",
+ ["description"]="SUBSET WITH DOT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2ABD, -- ⪽
+ },
+ [0x2ABE]={
+ ["category"]="sm",
+ ["description"]="SUPERSET WITH DOT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2ABE, -- ⪾
+ },
+ [0x2ABF]={
+ ["category"]="sm",
+ ["description"]="SUBSET WITH PLUS SIGN BELOW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2ABF, -- ⪿
+ },
+ [0x2AC0]={
+ ["category"]="sm",
+ ["description"]="SUPERSET WITH PLUS SIGN BELOW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AC0, -- â«€
+ },
+ [0x2AC1]={
+ ["category"]="sm",
+ ["description"]="SUBSET WITH MULTIPLICATION SIGN BELOW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AC1, -- â«
+ },
+ [0x2AC2]={
+ ["category"]="sm",
+ ["description"]="SUPERSET WITH MULTIPLICATION SIGN BELOW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AC2, -- â«‚
+ },
+ [0x2AC3]={
+ ["category"]="sm",
+ ["description"]="SUBSET OF OR EQUAL TO WITH DOT ABOVE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AC3, -- ⫃
+ },
+ [0x2AC4]={
+ ["category"]="sm",
+ ["description"]="SUPERSET OF OR EQUAL TO WITH DOT ABOVE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AC4, -- â«„
+ },
+ [0x2AC5]={
+ ["category"]="sm",
+ ["description"]="SUBSET OF ABOVE EQUALS SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AC5, -- â«…
+ },
+ [0x2AC6]={
+ ["category"]="sm",
+ ["description"]="SUPERSET OF ABOVE EQUALS SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AC6, -- ⫆
+ },
+ [0x2AC7]={
+ ["category"]="sm",
+ ["description"]="SUBSET OF ABOVE TILDE OPERATOR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AC7, -- ⫇
+ },
+ [0x2AC8]={
+ ["category"]="sm",
+ ["description"]="SUPERSET OF ABOVE TILDE OPERATOR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AC8, -- ⫈
+ },
+ [0x2AC9]={
+ ["category"]="sm",
+ ["description"]="SUBSET OF ABOVE ALMOST EQUAL TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AC9, -- ⫉
+ },
+ [0x2ACA]={
+ ["category"]="sm",
+ ["description"]="SUPERSET OF ABOVE ALMOST EQUAL TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2ACA, -- â«Š
+ },
+ [0x2ACB]={
+ ["category"]="sm",
+ ["description"]="SUBSET OF ABOVE NOT EQUAL TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2ACB, -- â«‹
+ },
+ [0x2ACC]={
+ ["category"]="sm",
+ ["description"]="SUPERSET OF ABOVE NOT EQUAL TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2ACC, -- ⫌
+ },
+ [0x2ACD]={
+ ["category"]="sm",
+ ["description"]="SQUARE LEFT OPEN BOX OPERATOR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2ACD, -- â«
+ },
+ [0x2ACE]={
+ ["category"]="sm",
+ ["description"]="SQUARE RIGHT OPEN BOX OPERATOR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2ACE, -- â«Ž
+ },
+ [0x2ACF]={
+ ["category"]="sm",
+ ["description"]="CLOSED SUBSET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2ACF, -- â«
+ },
+ [0x2AD0]={
+ ["category"]="sm",
+ ["description"]="CLOSED SUPERSET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AD0, -- â«
+ },
+ [0x2AD1]={
+ ["category"]="sm",
+ ["description"]="CLOSED SUBSET OR EQUAL TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AD1, -- â«‘
+ },
+ [0x2AD2]={
+ ["category"]="sm",
+ ["description"]="CLOSED SUPERSET OR EQUAL TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AD2, -- â«’
+ },
+ [0x2AD3]={
+ ["category"]="sm",
+ ["description"]="SUBSET ABOVE SUPERSET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AD3, -- â«“
+ },
+ [0x2AD4]={
+ ["category"]="sm",
+ ["description"]="SUPERSET ABOVE SUBSET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AD4, -- â«”
+ },
+ [0x2AD5]={
+ ["category"]="sm",
+ ["description"]="SUBSET ABOVE SUBSET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AD5, -- â«•
+ },
+ [0x2AD6]={
+ ["category"]="sm",
+ ["description"]="SUPERSET ABOVE SUPERSET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AD6, -- â«–
+ },
+ [0x2AD7]={
+ ["category"]="sm",
+ ["description"]="SUPERSET BESIDE SUBSET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AD7, -- â«—
+ },
+ [0x2AD8]={
+ ["category"]="sm",
+ ["description"]="SUPERSET BESIDE AND JOINED BY DASH WITH SUBSET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AD8, -- ⫘
+ },
+ [0x2AD9]={
+ ["category"]="sm",
+ ["description"]="ELEMENT OF OPENING DOWNWARDS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AD9, -- â«™
+ },
+ [0x2ADA]={
+ ["category"]="sm",
+ ["description"]="PITCHFORK WITH TEE TOP",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2ADA, -- â«š
+ },
+ [0x2ADB]={
+ ["category"]="sm",
+ ["description"]="TRANSVERSAL INTERSECTION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2ADB, -- â«›
+ },
+ [0x2ADC]={
+ ["category"]="sm",
+ ["description"]="FORKING",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x2ADD, 0x0338 },
+ ["unicodeslot"]=0x2ADC, -- ⫝̸
+ },
+ [0x2ADD]={
+ ["category"]="sm",
+ ["description"]="NONFORKING",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2ADD, -- â«
+ },
+ [0x2ADE]={
+ ["category"]="sm",
+ ["description"]="SHORT LEFT TACK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2ADE, -- â«ž
+ },
+ [0x2ADF]={
+ ["category"]="sm",
+ ["description"]="SHORT DOWN TACK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2ADF, -- â«Ÿ
+ },
+ [0x2AE0]={
+ ["category"]="sm",
+ ["description"]="SHORT UP TACK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AE0, -- â« 
+ },
+ [0x2AE1]={
+ ["category"]="sm",
+ ["description"]="PERPENDICULAR WITH S",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AE1, -- â«¡
+ },
+ [0x2AE2]={
+ ["category"]="sm",
+ ["description"]="VERTICAL BAR TRIPLE RIGHT TURNSTILE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AE2, -- â«¢
+ },
+ [0x2AE3]={
+ ["category"]="sm",
+ ["description"]="DOUBLE VERTICAL BAR LEFT TURNSTILE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AE3, -- â«£
+ },
+ [0x2AE4]={
+ ["category"]="sm",
+ ["description"]="VERTICAL BAR DOUBLE LEFT TURNSTILE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AE4, -- ⫤
+ },
+ [0x2AE5]={
+ ["category"]="sm",
+ ["description"]="DOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AE5, -- â«¥
+ },
+ [0x2AE6]={
+ ["category"]="sm",
+ ["description"]="LONG DASH FROM LEFT MEMBER OF DOUBLE VERTICAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AE6, -- ⫦
+ },
+ [0x2AE7]={
+ ["category"]="sm",
+ ["description"]="SHORT DOWN TACK WITH OVERBAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AE7, -- ⫧
+ },
+ [0x2AE8]={
+ ["category"]="sm",
+ ["description"]="SHORT UP TACK WITH UNDERBAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AE8, -- ⫨
+ },
+ [0x2AE9]={
+ ["category"]="sm",
+ ["description"]="SHORT UP TACK ABOVE SHORT DOWN TACK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AE9, -- â«©
+ },
+ [0x2AEA]={
+ ["category"]="sm",
+ ["description"]="DOUBLE DOWN TACK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AEA, -- ⫪
+ },
+ [0x2AEB]={
+ ["category"]="sm",
+ ["description"]="DOUBLE UP TACK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AEB, -- â««
+ },
+ [0x2AEC]={
+ ["category"]="sm",
+ ["description"]="DOUBLE STROKE NOT SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AEC, -- ⫬
+ },
+ [0x2AED]={
+ ["category"]="sm",
+ ["description"]="REVERSED DOUBLE STROKE NOT SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AED, -- â«­
+ },
+ [0x2AEE]={
+ ["category"]="sm",
+ ["description"]="DOES NOT DIVIDE WITH REVERSED NEGATION SLASH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AEE, -- â«®
+ },
+ [0x2AEF]={
+ ["category"]="sm",
+ ["description"]="VERTICAL LINE WITH CIRCLE ABOVE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AEF, -- ⫯
+ },
+ [0x2AF0]={
+ ["category"]="sm",
+ ["description"]="VERTICAL LINE WITH CIRCLE BELOW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AF0, -- â«°
+ },
+ [0x2AF1]={
+ ["category"]="sm",
+ ["description"]="DOWN TACK WITH CIRCLE BELOW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AF1, -- ⫱
+ },
+ [0x2AF2]={
+ ["category"]="sm",
+ ["description"]="PARALLEL WITH HORIZONTAL STROKE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AF2, -- ⫲
+ },
+ [0x2AF3]={
+ ["category"]="sm",
+ ["description"]="PARALLEL WITH TILDE OPERATOR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AF3, -- ⫳
+ },
+ [0x2AF4]={
+ ["category"]="sm",
+ ["description"]="TRIPLE VERTICAL BAR BINARY RELATION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AF4, -- â«´
+ },
+ [0x2AF5]={
+ ["category"]="sm",
+ ["description"]="TRIPLE VERTICAL BAR WITH HORIZONTAL STROKE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AF5, -- ⫵
+ },
+ [0x2AF6]={
+ ["category"]="sm",
+ ["description"]="TRIPLE COLON OPERATOR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AF6, -- ⫶
+ },
+ [0x2AF7]={
+ ["category"]="sm",
+ ["description"]="TRIPLE NESTED LESS-THAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AF7, -- â«·
+ },
+ [0x2AF8]={
+ ["category"]="sm",
+ ["description"]="TRIPLE NESTED GREATER-THAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AF8, -- ⫸
+ },
+ [0x2AF9]={
+ ["category"]="sm",
+ ["description"]="DOUBLE-LINE SLANTED LESS-THAN OR EQUAL TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AF9, -- ⫹
+ },
+ [0x2AFA]={
+ ["category"]="sm",
+ ["description"]="DOUBLE-LINE SLANTED GREATER-THAN OR EQUAL TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AFA, -- ⫺
+ },
+ [0x2AFB]={
+ ["category"]="sm",
+ ["description"]="TRIPLE SOLIDUS BINARY RELATION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AFB, -- â«»
+ },
+ [0x2AFC]={
+ ["category"]="sm",
+ ["description"]="LARGE TRIPLE VERTICAL BAR OPERATOR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AFC, -- ⫼
+ },
+ [0x2AFD]={
+ ["category"]="sm",
+ ["description"]="DOUBLE SOLIDUS OPERATOR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AFD, -- ⫽
+ },
+ [0x2AFE]={
+ ["category"]="sm",
+ ["description"]="WHITE VERTICAL BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AFE, -- ⫾
+ },
+ [0x2AFF]={
+ ["category"]="sm",
+ ["description"]="N-ARY WHITE VERTICAL BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2AFF, -- â«¿
+ },
+ [0x2B00]={
+ ["category"]="so",
+ ["description"]="NORTH EAST WHITE ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2B00, -- ⬀
+ },
+ [0x2B01]={
+ ["category"]="so",
+ ["description"]="NORTH WEST WHITE ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2B01, -- â¬
+ },
+ [0x2B02]={
+ ["category"]="so",
+ ["description"]="SOUTH EAST WHITE ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2B02, -- ⬂
+ },
+ [0x2B03]={
+ ["category"]="so",
+ ["description"]="SOUTH WEST WHITE ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2B03, -- ⬃
+ },
+ [0x2B04]={
+ ["category"]="so",
+ ["description"]="LEFT RIGHT WHITE ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2B04, -- ⬄
+ },
+ [0x2B05]={
+ ["category"]="so",
+ ["description"]="LEFTWARDS BLACK ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2B05, -- ⬅
+ },
+ [0x2B06]={
+ ["category"]="so",
+ ["description"]="UPWARDS BLACK ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2B06, -- ⬆
+ },
+ [0x2B07]={
+ ["category"]="so",
+ ["description"]="DOWNWARDS BLACK ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2B07, -- ⬇
+ },
+ [0x2B08]={
+ ["category"]="so",
+ ["description"]="NORTH EAST BLACK ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2B08, -- ⬈
+ },
+ [0x2B09]={
+ ["category"]="so",
+ ["description"]="NORTH WEST BLACK ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2B09, -- ⬉
+ },
+ [0x2B0A]={
+ ["category"]="so",
+ ["description"]="SOUTH EAST BLACK ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2B0A, -- ⬊
+ },
+ [0x2B0B]={
+ ["category"]="so",
+ ["description"]="SOUTH WEST BLACK ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2B0B, -- ⬋
+ },
+ [0x2B0C]={
+ ["category"]="so",
+ ["description"]="LEFT RIGHT BLACK ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2B0C, -- ⬌
+ },
+ [0x2B0D]={
+ ["category"]="so",
+ ["description"]="UP DOWN BLACK ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2B0D, -- â¬
+ },
+ [0x2B0E]={
+ ["category"]="so",
+ ["description"]="RIGHTWARDS ARROW WITH TIP DOWNWARDS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2B0E, -- ⬎
+ },
+ [0x2B0F]={
+ ["category"]="so",
+ ["description"]="RIGHTWARDS ARROW WITH TIP UPWARDS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2B0F, -- â¬
+ },
+ [0x2B10]={
+ ["category"]="so",
+ ["description"]="LEFTWARDS ARROW WITH TIP DOWNWARDS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2B10, -- â¬
+ },
+ [0x2B11]={
+ ["category"]="so",
+ ["description"]="LEFTWARDS ARROW WITH TIP UPWARDS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2B11, -- ⬑
+ },
+ [0x2B12]={
+ ["category"]="so",
+ ["description"]="SQUARE WITH TOP HALF BLACK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2B12, -- ⬒
+ },
+ [0x2B13]={
+ ["category"]="so",
+ ["description"]="SQUARE WITH BOTTOM HALF BLACK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2B13, -- ⬓
+ },
+ [0x2B14]={
+ ["category"]="so",
+ ["description"]="SQUARE WITH UPPER RIGHT DIAGONAL HALF BLACK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2B14, -- ⬔
+ },
+ [0x2B15]={
+ ["category"]="so",
+ ["description"]="SQUARE WITH LOWER LEFT DIAGONAL HALF BLACK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2B15, -- ⬕
+ },
+ [0x2B16]={
+ ["category"]="so",
+ ["description"]="DIAMOND WITH LEFT HALF BLACK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2B16, -- ⬖
+ },
+ [0x2B17]={
+ ["category"]="so",
+ ["description"]="DIAMOND WITH RIGHT HALF BLACK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2B17, -- ⬗
+ },
+ [0x2B18]={
+ ["category"]="so",
+ ["description"]="DIAMOND WITH TOP HALF BLACK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2B18, -- ⬘
+ },
+ [0x2B19]={
+ ["category"]="so",
+ ["description"]="DIAMOND WITH BOTTOM HALF BLACK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2B19, -- ⬙
+ },
+ [0x2B1A]={
+ ["category"]="so",
+ ["description"]="DOTTED SQUARE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2B1A, -- ⬚
+ },
+ [0x2B20]={
+ ["category"]="so",
+ ["description"]="WHITE PENTAGON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2B20, -- ⬠
+ },
+ [0x2B21]={
+ ["category"]="so",
+ ["description"]="WHITE HEXAGON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2B21, -- ⬡
+ },
+ [0x2B22]={
+ ["category"]="so",
+ ["description"]="BLACK HEXAGON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2B22, -- ⬢
+ },
+ [0x2B23]={
+ ["category"]="so",
+ ["description"]="HORIZONTAL BLACK HEXAGON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2B23, -- ⬣
+ },
+ [0x2C00]={
+ ["category"]="lu",
+ ["description"]="GLAGOLITIC CAPITAL LETTER AZU",
+ ["lccode"]=0x2C30,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C00, -- â°€
+ },
+ [0x2C01]={
+ ["category"]="lu",
+ ["description"]="GLAGOLITIC CAPITAL LETTER BUKY",
+ ["lccode"]=0x2C31,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C01, -- â°
+ },
+ [0x2C02]={
+ ["category"]="lu",
+ ["description"]="GLAGOLITIC CAPITAL LETTER VEDE",
+ ["lccode"]=0x2C32,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C02, -- â°‚
+ },
+ [0x2C03]={
+ ["category"]="lu",
+ ["description"]="GLAGOLITIC CAPITAL LETTER GLAGOLI",
+ ["lccode"]=0x2C33,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C03, -- â°ƒ
+ },
+ [0x2C04]={
+ ["category"]="lu",
+ ["description"]="GLAGOLITIC CAPITAL LETTER DOBRO",
+ ["lccode"]=0x2C34,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C04, -- â°„
+ },
+ [0x2C05]={
+ ["category"]="lu",
+ ["description"]="GLAGOLITIC CAPITAL LETTER YESTU",
+ ["lccode"]=0x2C35,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C05, -- â°…
+ },
+ [0x2C06]={
+ ["category"]="lu",
+ ["description"]="GLAGOLITIC CAPITAL LETTER ZHIVETE",
+ ["lccode"]=0x2C36,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C06, -- â°†
+ },
+ [0x2C07]={
+ ["category"]="lu",
+ ["description"]="GLAGOLITIC CAPITAL LETTER DZELO",
+ ["lccode"]=0x2C37,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C07, -- â°‡
+ },
+ [0x2C08]={
+ ["category"]="lu",
+ ["description"]="GLAGOLITIC CAPITAL LETTER ZEMLJA",
+ ["lccode"]=0x2C38,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C08, -- â°ˆ
+ },
+ [0x2C09]={
+ ["category"]="lu",
+ ["description"]="GLAGOLITIC CAPITAL LETTER IZHE",
+ ["lccode"]=0x2C39,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C09, -- â°‰
+ },
+ [0x2C0A]={
+ ["category"]="lu",
+ ["description"]="GLAGOLITIC CAPITAL LETTER INITIAL IZHE",
+ ["lccode"]=0x2C3A,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C0A, -- â°Š
+ },
+ [0x2C0B]={
+ ["category"]="lu",
+ ["description"]="GLAGOLITIC CAPITAL LETTER I",
+ ["lccode"]=0x2C3B,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C0B, -- â°‹
+ },
+ [0x2C0C]={
+ ["category"]="lu",
+ ["description"]="GLAGOLITIC CAPITAL LETTER DJERVI",
+ ["lccode"]=0x2C3C,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C0C, -- Ⰼ
+ },
+ [0x2C0D]={
+ ["category"]="lu",
+ ["description"]="GLAGOLITIC CAPITAL LETTER KAKO",
+ ["lccode"]=0x2C3D,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C0D, -- â°
+ },
+ [0x2C0E]={
+ ["category"]="lu",
+ ["description"]="GLAGOLITIC CAPITAL LETTER LJUDIJE",
+ ["lccode"]=0x2C3E,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C0E, -- â°Ž
+ },
+ [0x2C0F]={
+ ["category"]="lu",
+ ["description"]="GLAGOLITIC CAPITAL LETTER MYSLITE",
+ ["lccode"]=0x2C3F,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C0F, -- â°
+ },
+ [0x2C10]={
+ ["category"]="lu",
+ ["description"]="GLAGOLITIC CAPITAL LETTER NASHI",
+ ["lccode"]=0x2C40,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C10, -- â°
+ },
+ [0x2C11]={
+ ["category"]="lu",
+ ["description"]="GLAGOLITIC CAPITAL LETTER ONU",
+ ["lccode"]=0x2C41,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C11, -- â°‘
+ },
+ [0x2C12]={
+ ["category"]="lu",
+ ["description"]="GLAGOLITIC CAPITAL LETTER POKOJI",
+ ["lccode"]=0x2C42,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C12, -- â°’
+ },
+ [0x2C13]={
+ ["category"]="lu",
+ ["description"]="GLAGOLITIC CAPITAL LETTER RITSI",
+ ["lccode"]=0x2C43,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C13, -- â°“
+ },
+ [0x2C14]={
+ ["category"]="lu",
+ ["description"]="GLAGOLITIC CAPITAL LETTER SLOVO",
+ ["lccode"]=0x2C44,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C14, -- â°”
+ },
+ [0x2C15]={
+ ["category"]="lu",
+ ["description"]="GLAGOLITIC CAPITAL LETTER TVRIDO",
+ ["lccode"]=0x2C45,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C15, -- â°•
+ },
+ [0x2C16]={
+ ["category"]="lu",
+ ["description"]="GLAGOLITIC CAPITAL LETTER UKU",
+ ["lccode"]=0x2C46,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C16, -- â°–
+ },
+ [0x2C17]={
+ ["category"]="lu",
+ ["description"]="GLAGOLITIC CAPITAL LETTER FRITU",
+ ["lccode"]=0x2C47,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C17, -- â°—
+ },
+ [0x2C18]={
+ ["category"]="lu",
+ ["description"]="GLAGOLITIC CAPITAL LETTER HERU",
+ ["lccode"]=0x2C48,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C18, -- â°˜
+ },
+ [0x2C19]={
+ ["category"]="lu",
+ ["description"]="GLAGOLITIC CAPITAL LETTER OTU",
+ ["lccode"]=0x2C49,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C19, -- â°™
+ },
+ [0x2C1A]={
+ ["category"]="lu",
+ ["description"]="GLAGOLITIC CAPITAL LETTER PE",
+ ["lccode"]=0x2C4A,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C1A, -- â°š
+ },
+ [0x2C1B]={
+ ["category"]="lu",
+ ["description"]="GLAGOLITIC CAPITAL LETTER SHTA",
+ ["lccode"]=0x2C4B,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C1B, -- â°›
+ },
+ [0x2C1C]={
+ ["category"]="lu",
+ ["description"]="GLAGOLITIC CAPITAL LETTER TSI",
+ ["lccode"]=0x2C4C,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C1C, -- Ⱌ
+ },
+ [0x2C1D]={
+ ["category"]="lu",
+ ["description"]="GLAGOLITIC CAPITAL LETTER CHRIVI",
+ ["lccode"]=0x2C4D,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C1D, -- â°
+ },
+ [0x2C1E]={
+ ["category"]="lu",
+ ["description"]="GLAGOLITIC CAPITAL LETTER SHA",
+ ["lccode"]=0x2C4E,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C1E, -- â°ž
+ },
+ [0x2C1F]={
+ ["category"]="lu",
+ ["description"]="GLAGOLITIC CAPITAL LETTER YERU",
+ ["lccode"]=0x2C4F,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C1F, -- â°Ÿ
+ },
+ [0x2C20]={
+ ["category"]="lu",
+ ["description"]="GLAGOLITIC CAPITAL LETTER YERI",
+ ["lccode"]=0x2C50,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C20, -- â° 
+ },
+ [0x2C21]={
+ ["category"]="lu",
+ ["description"]="GLAGOLITIC CAPITAL LETTER YATI",
+ ["lccode"]=0x2C51,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C21, -- â°¡
+ },
+ [0x2C22]={
+ ["category"]="lu",
+ ["description"]="GLAGOLITIC CAPITAL LETTER SPIDERY HA",
+ ["lccode"]=0x2C52,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C22, -- â°¢
+ },
+ [0x2C23]={
+ ["category"]="lu",
+ ["description"]="GLAGOLITIC CAPITAL LETTER YU",
+ ["lccode"]=0x2C53,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C23, -- â°£
+ },
+ [0x2C24]={
+ ["category"]="lu",
+ ["description"]="GLAGOLITIC CAPITAL LETTER SMALL YUS",
+ ["lccode"]=0x2C54,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C24, -- â°¤
+ },
+ [0x2C25]={
+ ["category"]="lu",
+ ["description"]="GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL",
+ ["lccode"]=0x2C55,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C25, -- â°¥
+ },
+ [0x2C26]={
+ ["category"]="lu",
+ ["description"]="GLAGOLITIC CAPITAL LETTER YO",
+ ["lccode"]=0x2C56,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C26, -- â°¦
+ },
+ [0x2C27]={
+ ["category"]="lu",
+ ["description"]="GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS",
+ ["lccode"]=0x2C57,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C27, -- â°§
+ },
+ [0x2C28]={
+ ["category"]="lu",
+ ["description"]="GLAGOLITIC CAPITAL LETTER BIG YUS",
+ ["lccode"]=0x2C58,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C28, -- â°¨
+ },
+ [0x2C29]={
+ ["category"]="lu",
+ ["description"]="GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS",
+ ["lccode"]=0x2C59,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C29, -- â°©
+ },
+ [0x2C2A]={
+ ["category"]="lu",
+ ["description"]="GLAGOLITIC CAPITAL LETTER FITA",
+ ["lccode"]=0x2C5A,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C2A, -- â°ª
+ },
+ [0x2C2B]={
+ ["category"]="lu",
+ ["description"]="GLAGOLITIC CAPITAL LETTER IZHITSA",
+ ["lccode"]=0x2C5B,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C2B, -- â°«
+ },
+ [0x2C2C]={
+ ["category"]="lu",
+ ["description"]="GLAGOLITIC CAPITAL LETTER SHTAPIC",
+ ["lccode"]=0x2C5C,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C2C, -- â°¬
+ },
+ [0x2C2D]={
+ ["category"]="lu",
+ ["description"]="GLAGOLITIC CAPITAL LETTER TROKUTASTI A",
+ ["lccode"]=0x2C5D,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C2D, -- â°­
+ },
+ [0x2C2E]={
+ ["category"]="lu",
+ ["description"]="GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE",
+ ["lccode"]=0x2C5E,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C2E, -- â°®
+ },
+ [0x2C30]={
+ ["category"]="ll",
+ ["description"]="GLAGOLITIC SMALL LETTER AZU",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C00,
+ ["unicodeslot"]=0x2C30, -- â°°
+ },
+ [0x2C31]={
+ ["category"]="ll",
+ ["description"]="GLAGOLITIC SMALL LETTER BUKY",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C01,
+ ["unicodeslot"]=0x2C31, -- â°±
+ },
+ [0x2C32]={
+ ["category"]="ll",
+ ["description"]="GLAGOLITIC SMALL LETTER VEDE",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C02,
+ ["unicodeslot"]=0x2C32, -- â°²
+ },
+ [0x2C33]={
+ ["category"]="ll",
+ ["description"]="GLAGOLITIC SMALL LETTER GLAGOLI",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C03,
+ ["unicodeslot"]=0x2C33, -- â°³
+ },
+ [0x2C34]={
+ ["category"]="ll",
+ ["description"]="GLAGOLITIC SMALL LETTER DOBRO",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C04,
+ ["unicodeslot"]=0x2C34, -- â°´
+ },
+ [0x2C35]={
+ ["category"]="ll",
+ ["description"]="GLAGOLITIC SMALL LETTER YESTU",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C05,
+ ["unicodeslot"]=0x2C35, -- â°µ
+ },
+ [0x2C36]={
+ ["category"]="ll",
+ ["description"]="GLAGOLITIC SMALL LETTER ZHIVETE",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C06,
+ ["unicodeslot"]=0x2C36, -- â°¶
+ },
+ [0x2C37]={
+ ["category"]="ll",
+ ["description"]="GLAGOLITIC SMALL LETTER DZELO",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C07,
+ ["unicodeslot"]=0x2C37, -- â°·
+ },
+ [0x2C38]={
+ ["category"]="ll",
+ ["description"]="GLAGOLITIC SMALL LETTER ZEMLJA",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C08,
+ ["unicodeslot"]=0x2C38, -- â°¸
+ },
+ [0x2C39]={
+ ["category"]="ll",
+ ["description"]="GLAGOLITIC SMALL LETTER IZHE",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C09,
+ ["unicodeslot"]=0x2C39, -- â°¹
+ },
+ [0x2C3A]={
+ ["category"]="ll",
+ ["description"]="GLAGOLITIC SMALL LETTER INITIAL IZHE",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C0A,
+ ["unicodeslot"]=0x2C3A, -- â°º
+ },
+ [0x2C3B]={
+ ["category"]="ll",
+ ["description"]="GLAGOLITIC SMALL LETTER I",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C0B,
+ ["unicodeslot"]=0x2C3B, -- â°»
+ },
+ [0x2C3C]={
+ ["category"]="ll",
+ ["description"]="GLAGOLITIC SMALL LETTER DJERVI",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C0C,
+ ["unicodeslot"]=0x2C3C, -- â°¼
+ },
+ [0x2C3D]={
+ ["category"]="ll",
+ ["description"]="GLAGOLITIC SMALL LETTER KAKO",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C0D,
+ ["unicodeslot"]=0x2C3D, -- â°½
+ },
+ [0x2C3E]={
+ ["category"]="ll",
+ ["description"]="GLAGOLITIC SMALL LETTER LJUDIJE",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C0E,
+ ["unicodeslot"]=0x2C3E, -- â°¾
+ },
+ [0x2C3F]={
+ ["category"]="ll",
+ ["description"]="GLAGOLITIC SMALL LETTER MYSLITE",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C0F,
+ ["unicodeslot"]=0x2C3F, -- â°¿
+ },
+ [0x2C40]={
+ ["category"]="ll",
+ ["description"]="GLAGOLITIC SMALL LETTER NASHI",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C10,
+ ["unicodeslot"]=0x2C40, -- â±€
+ },
+ [0x2C41]={
+ ["category"]="ll",
+ ["description"]="GLAGOLITIC SMALL LETTER ONU",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C11,
+ ["unicodeslot"]=0x2C41, -- â±
+ },
+ [0x2C42]={
+ ["category"]="ll",
+ ["description"]="GLAGOLITIC SMALL LETTER POKOJI",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C12,
+ ["unicodeslot"]=0x2C42, -- ⱂ
+ },
+ [0x2C43]={
+ ["category"]="ll",
+ ["description"]="GLAGOLITIC SMALL LETTER RITSI",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C13,
+ ["unicodeslot"]=0x2C43, -- ⱃ
+ },
+ [0x2C44]={
+ ["category"]="ll",
+ ["description"]="GLAGOLITIC SMALL LETTER SLOVO",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C14,
+ ["unicodeslot"]=0x2C44, -- ⱄ
+ },
+ [0x2C45]={
+ ["category"]="ll",
+ ["description"]="GLAGOLITIC SMALL LETTER TVRIDO",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C15,
+ ["unicodeslot"]=0x2C45, -- â±…
+ },
+ [0x2C46]={
+ ["category"]="ll",
+ ["description"]="GLAGOLITIC SMALL LETTER UKU",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C16,
+ ["unicodeslot"]=0x2C46, -- ⱆ
+ },
+ [0x2C47]={
+ ["category"]="ll",
+ ["description"]="GLAGOLITIC SMALL LETTER FRITU",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C17,
+ ["unicodeslot"]=0x2C47, -- ⱇ
+ },
+ [0x2C48]={
+ ["category"]="ll",
+ ["description"]="GLAGOLITIC SMALL LETTER HERU",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C18,
+ ["unicodeslot"]=0x2C48, -- ⱈ
+ },
+ [0x2C49]={
+ ["category"]="ll",
+ ["description"]="GLAGOLITIC SMALL LETTER OTU",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C19,
+ ["unicodeslot"]=0x2C49, -- ⱉ
+ },
+ [0x2C4A]={
+ ["category"]="ll",
+ ["description"]="GLAGOLITIC SMALL LETTER PE",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C1A,
+ ["unicodeslot"]=0x2C4A, -- ⱊ
+ },
+ [0x2C4B]={
+ ["category"]="ll",
+ ["description"]="GLAGOLITIC SMALL LETTER SHTA",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C1B,
+ ["unicodeslot"]=0x2C4B, -- ⱋ
+ },
+ [0x2C4C]={
+ ["category"]="ll",
+ ["description"]="GLAGOLITIC SMALL LETTER TSI",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C1C,
+ ["unicodeslot"]=0x2C4C, -- ⱌ
+ },
+ [0x2C4D]={
+ ["category"]="ll",
+ ["description"]="GLAGOLITIC SMALL LETTER CHRIVI",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C1D,
+ ["unicodeslot"]=0x2C4D, -- â±
+ },
+ [0x2C4E]={
+ ["category"]="ll",
+ ["description"]="GLAGOLITIC SMALL LETTER SHA",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C1E,
+ ["unicodeslot"]=0x2C4E, -- ⱎ
+ },
+ [0x2C4F]={
+ ["category"]="ll",
+ ["description"]="GLAGOLITIC SMALL LETTER YERU",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C1F,
+ ["unicodeslot"]=0x2C4F, -- â±
+ },
+ [0x2C50]={
+ ["category"]="ll",
+ ["description"]="GLAGOLITIC SMALL LETTER YERI",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C20,
+ ["unicodeslot"]=0x2C50, -- â±
+ },
+ [0x2C51]={
+ ["category"]="ll",
+ ["description"]="GLAGOLITIC SMALL LETTER YATI",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C21,
+ ["unicodeslot"]=0x2C51, -- ⱑ
+ },
+ [0x2C52]={
+ ["category"]="ll",
+ ["description"]="GLAGOLITIC SMALL LETTER SPIDERY HA",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C22,
+ ["unicodeslot"]=0x2C52, -- â±’
+ },
+ [0x2C53]={
+ ["category"]="ll",
+ ["description"]="GLAGOLITIC SMALL LETTER YU",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C23,
+ ["unicodeslot"]=0x2C53, -- ⱓ
+ },
+ [0x2C54]={
+ ["category"]="ll",
+ ["description"]="GLAGOLITIC SMALL LETTER SMALL YUS",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C24,
+ ["unicodeslot"]=0x2C54, -- â±”
+ },
+ [0x2C55]={
+ ["category"]="ll",
+ ["description"]="GLAGOLITIC SMALL LETTER SMALL YUS WITH TAIL",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C25,
+ ["unicodeslot"]=0x2C55, -- ⱕ
+ },
+ [0x2C56]={
+ ["category"]="ll",
+ ["description"]="GLAGOLITIC SMALL LETTER YO",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C26,
+ ["unicodeslot"]=0x2C56, -- â±–
+ },
+ [0x2C57]={
+ ["category"]="ll",
+ ["description"]="GLAGOLITIC SMALL LETTER IOTATED SMALL YUS",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C27,
+ ["unicodeslot"]=0x2C57, -- â±—
+ },
+ [0x2C58]={
+ ["category"]="ll",
+ ["description"]="GLAGOLITIC SMALL LETTER BIG YUS",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C28,
+ ["unicodeslot"]=0x2C58, -- ⱘ
+ },
+ [0x2C59]={
+ ["category"]="ll",
+ ["description"]="GLAGOLITIC SMALL LETTER IOTATED BIG YUS",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C29,
+ ["unicodeslot"]=0x2C59, -- â±™
+ },
+ [0x2C5A]={
+ ["category"]="ll",
+ ["description"]="GLAGOLITIC SMALL LETTER FITA",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C2A,
+ ["unicodeslot"]=0x2C5A, -- ⱚ
+ },
+ [0x2C5B]={
+ ["category"]="ll",
+ ["description"]="GLAGOLITIC SMALL LETTER IZHITSA",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C2B,
+ ["unicodeslot"]=0x2C5B, -- â±›
+ },
+ [0x2C5C]={
+ ["category"]="ll",
+ ["description"]="GLAGOLITIC SMALL LETTER SHTAPIC",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C2C,
+ ["unicodeslot"]=0x2C5C, -- ⱜ
+ },
+ [0x2C5D]={
+ ["category"]="ll",
+ ["description"]="GLAGOLITIC SMALL LETTER TROKUTASTI A",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C2D,
+ ["unicodeslot"]=0x2C5D, -- â±
+ },
+ [0x2C5E]={
+ ["category"]="ll",
+ ["description"]="GLAGOLITIC SMALL LETTER LATINATE MYSLITE",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C2E,
+ ["unicodeslot"]=0x2C5E, -- ⱞ
+ },
+ [0x2C60]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER L WITH DOUBLE BAR",
+ ["lccode"]=0x2C61,
+ ["linebreak"]="al",
+ ["shcode"]=0x004C,
+ ["unicodeslot"]=0x2C60, -- â± 
+ },
+ [0x2C61]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER L WITH DOUBLE BAR",
+ ["linebreak"]="al",
+ ["shcode"]=0x006C,
+ ["uccode"]=0x2C60,
+ ["unicodeslot"]=0x2C61, -- ⱡ
+ },
+ [0x2C62]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER L WITH MIDDLE TILDE",
+ ["lccode"]=0x026B,
+ ["linebreak"]="al",
+ ["shcode"]=0x004C,
+ ["unicodeslot"]=0x2C62, -- â±¢
+ },
+ [0x2C63]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER P WITH STROKE",
+ ["lccode"]=0x1D7D,
+ ["linebreak"]="al",
+ ["shcode"]=0x0050,
+ ["unicodeslot"]=0x2C63, -- â±£
+ },
+ [0x2C64]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER R WITH TAIL",
+ ["lccode"]=0x027D,
+ ["linebreak"]="al",
+ ["shcode"]=0x0052,
+ ["unicodeslot"]=0x2C64, -- Ɽ
+ },
+ [0x2C65]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER A WITH STROKE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0061,
+ ["uccode"]=0x023A,
+ ["unicodeslot"]=0x2C65, -- â±¥
+ },
+ [0x2C66]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER T WITH DIAGONAL STROKE",
+ ["linebreak"]="al",
+ ["shcode"]=0x0074,
+ ["uccode"]=0x023E,
+ ["unicodeslot"]=0x2C66, -- ⱦ
+ },
+ [0x2C67]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER H WITH DESCENDER",
+ ["lccode"]=0x2C68,
+ ["linebreak"]="al",
+ ["shcode"]=0x0048,
+ ["unicodeslot"]=0x2C67, -- Ⱨ
+ },
+ [0x2C68]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER H WITH DESCENDER",
+ ["linebreak"]="al",
+ ["shcode"]=0x0068,
+ ["uccode"]=0x2C67,
+ ["unicodeslot"]=0x2C68, -- ⱨ
+ },
+ [0x2C69]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER K WITH DESCENDER",
+ ["lccode"]=0x2C6A,
+ ["linebreak"]="al",
+ ["shcode"]=0x004B,
+ ["unicodeslot"]=0x2C69, -- Ⱪ
+ },
+ [0x2C6A]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER K WITH DESCENDER",
+ ["linebreak"]="al",
+ ["shcode"]=0x006B,
+ ["uccode"]=0x2C69,
+ ["unicodeslot"]=0x2C6A, -- ⱪ
+ },
+ [0x2C6B]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER Z WITH DESCENDER",
+ ["lccode"]=0x2C6C,
+ ["linebreak"]="al",
+ ["shcode"]=0x005A,
+ ["unicodeslot"]=0x2C6B, -- Ⱬ
+ },
+ [0x2C6C]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER Z WITH DESCENDER",
+ ["linebreak"]="al",
+ ["shcode"]=0x007A,
+ ["uccode"]=0x2C6B,
+ ["unicodeslot"]=0x2C6C, -- ⱬ
+ },
+ [0x2C74]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER V WITH CURL",
+ ["linebreak"]="al",
+ ["shcode"]=0x0076,
+ ["unicodeslot"]=0x2C74, -- â±´
+ },
+ [0x2C75]={
+ ["category"]="lu",
+ ["description"]="LATIN CAPITAL LETTER HALF H",
+ ["lccode"]=0x2C76,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C75, -- â±µ
+ },
+ [0x2C76]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER HALF H",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C75,
+ ["unicodeslot"]=0x2C76, -- ⱶ
+ },
+ [0x2C77]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LETTER TAILLESS PHI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C77, -- â±·
+ },
+ [0x2C80]={
+ ["category"]="lu",
+ ["description"]="COPTIC CAPITAL LETTER ALFA",
+ ["lccode"]=0x2C81,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C80, -- â²€
+ },
+ [0x2C81]={
+ ["category"]="ll",
+ ["description"]="COPTIC SMALL LETTER ALFA",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C80,
+ ["unicodeslot"]=0x2C81, -- â²
+ },
+ [0x2C82]={
+ ["category"]="lu",
+ ["description"]="COPTIC CAPITAL LETTER VIDA",
+ ["lccode"]=0x2C83,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C82, -- Ⲃ
+ },
+ [0x2C83]={
+ ["category"]="ll",
+ ["description"]="COPTIC SMALL LETTER VIDA",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C82,
+ ["unicodeslot"]=0x2C83, -- ⲃ
+ },
+ [0x2C84]={
+ ["category"]="lu",
+ ["description"]="COPTIC CAPITAL LETTER GAMMA",
+ ["lccode"]=0x2C85,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C84, -- Ⲅ
+ },
+ [0x2C85]={
+ ["category"]="ll",
+ ["description"]="COPTIC SMALL LETTER GAMMA",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C84,
+ ["unicodeslot"]=0x2C85, -- â²…
+ },
+ [0x2C86]={
+ ["category"]="lu",
+ ["description"]="COPTIC CAPITAL LETTER DALDA",
+ ["lccode"]=0x2C87,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C86, -- Ⲇ
+ },
+ [0x2C87]={
+ ["category"]="ll",
+ ["description"]="COPTIC SMALL LETTER DALDA",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C86,
+ ["unicodeslot"]=0x2C87, -- ⲇ
+ },
+ [0x2C88]={
+ ["category"]="lu",
+ ["description"]="COPTIC CAPITAL LETTER EIE",
+ ["lccode"]=0x2C89,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C88, -- Ⲉ
+ },
+ [0x2C89]={
+ ["category"]="ll",
+ ["description"]="COPTIC SMALL LETTER EIE",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C88,
+ ["unicodeslot"]=0x2C89, -- ⲉ
+ },
+ [0x2C8A]={
+ ["category"]="lu",
+ ["description"]="COPTIC CAPITAL LETTER SOU",
+ ["lccode"]=0x2C8B,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C8A, -- Ⲋ
+ },
+ [0x2C8B]={
+ ["category"]="ll",
+ ["description"]="COPTIC SMALL LETTER SOU",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C8A,
+ ["unicodeslot"]=0x2C8B, -- ⲋ
+ },
+ [0x2C8C]={
+ ["category"]="lu",
+ ["description"]="COPTIC CAPITAL LETTER ZATA",
+ ["lccode"]=0x2C8D,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C8C, -- Ⲍ
+ },
+ [0x2C8D]={
+ ["category"]="ll",
+ ["description"]="COPTIC SMALL LETTER ZATA",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C8C,
+ ["unicodeslot"]=0x2C8D, -- â²
+ },
+ [0x2C8E]={
+ ["category"]="lu",
+ ["description"]="COPTIC CAPITAL LETTER HATE",
+ ["lccode"]=0x2C8F,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C8E, -- Ⲏ
+ },
+ [0x2C8F]={
+ ["category"]="ll",
+ ["description"]="COPTIC SMALL LETTER HATE",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C8E,
+ ["unicodeslot"]=0x2C8F, -- â²
+ },
+ [0x2C90]={
+ ["category"]="lu",
+ ["description"]="COPTIC CAPITAL LETTER THETHE",
+ ["lccode"]=0x2C91,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C90, -- â²
+ },
+ [0x2C91]={
+ ["category"]="ll",
+ ["description"]="COPTIC SMALL LETTER THETHE",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C90,
+ ["unicodeslot"]=0x2C91, -- ⲑ
+ },
+ [0x2C92]={
+ ["category"]="lu",
+ ["description"]="COPTIC CAPITAL LETTER IAUDA",
+ ["lccode"]=0x2C93,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C92, -- â²’
+ },
+ [0x2C93]={
+ ["category"]="ll",
+ ["description"]="COPTIC SMALL LETTER IAUDA",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C92,
+ ["unicodeslot"]=0x2C93, -- ⲓ
+ },
+ [0x2C94]={
+ ["category"]="lu",
+ ["description"]="COPTIC CAPITAL LETTER KAPA",
+ ["lccode"]=0x2C95,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C94, -- â²”
+ },
+ [0x2C95]={
+ ["category"]="ll",
+ ["description"]="COPTIC SMALL LETTER KAPA",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C94,
+ ["unicodeslot"]=0x2C95, -- ⲕ
+ },
+ [0x2C96]={
+ ["category"]="lu",
+ ["description"]="COPTIC CAPITAL LETTER LAULA",
+ ["lccode"]=0x2C97,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C96, -- â²–
+ },
+ [0x2C97]={
+ ["category"]="ll",
+ ["description"]="COPTIC SMALL LETTER LAULA",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C96,
+ ["unicodeslot"]=0x2C97, -- â²—
+ },
+ [0x2C98]={
+ ["category"]="lu",
+ ["description"]="COPTIC CAPITAL LETTER MI",
+ ["lccode"]=0x2C99,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C98, -- Ⲙ
+ },
+ [0x2C99]={
+ ["category"]="ll",
+ ["description"]="COPTIC SMALL LETTER MI",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C98,
+ ["unicodeslot"]=0x2C99, -- â²™
+ },
+ [0x2C9A]={
+ ["category"]="lu",
+ ["description"]="COPTIC CAPITAL LETTER NI",
+ ["lccode"]=0x2C9B,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C9A, -- Ⲛ
+ },
+ [0x2C9B]={
+ ["category"]="ll",
+ ["description"]="COPTIC SMALL LETTER NI",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C9A,
+ ["unicodeslot"]=0x2C9B, -- â²›
+ },
+ [0x2C9C]={
+ ["category"]="lu",
+ ["description"]="COPTIC CAPITAL LETTER KSI",
+ ["lccode"]=0x2C9D,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C9C, -- Ⲝ
+ },
+ [0x2C9D]={
+ ["category"]="ll",
+ ["description"]="COPTIC SMALL LETTER KSI",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C9C,
+ ["unicodeslot"]=0x2C9D, -- â²
+ },
+ [0x2C9E]={
+ ["category"]="lu",
+ ["description"]="COPTIC CAPITAL LETTER O",
+ ["lccode"]=0x2C9F,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2C9E, -- Ⲟ
+ },
+ [0x2C9F]={
+ ["category"]="ll",
+ ["description"]="COPTIC SMALL LETTER O",
+ ["linebreak"]="al",
+ ["uccode"]=0x2C9E,
+ ["unicodeslot"]=0x2C9F, -- ⲟ
+ },
+ [0x2CA0]={
+ ["category"]="lu",
+ ["description"]="COPTIC CAPITAL LETTER PI",
+ ["lccode"]=0x2CA1,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2CA0, -- â² 
+ },
+ [0x2CA1]={
+ ["category"]="ll",
+ ["description"]="COPTIC SMALL LETTER PI",
+ ["linebreak"]="al",
+ ["uccode"]=0x2CA0,
+ ["unicodeslot"]=0x2CA1, -- ⲡ
+ },
+ [0x2CA2]={
+ ["category"]="lu",
+ ["description"]="COPTIC CAPITAL LETTER RO",
+ ["lccode"]=0x2CA3,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2CA2, -- â²¢
+ },
+ [0x2CA3]={
+ ["category"]="ll",
+ ["description"]="COPTIC SMALL LETTER RO",
+ ["linebreak"]="al",
+ ["uccode"]=0x2CA2,
+ ["unicodeslot"]=0x2CA3, -- â²£
+ },
+ [0x2CA4]={
+ ["category"]="lu",
+ ["description"]="COPTIC CAPITAL LETTER SIMA",
+ ["lccode"]=0x2CA5,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2CA4, -- Ⲥ
+ },
+ [0x2CA5]={
+ ["category"]="ll",
+ ["description"]="COPTIC SMALL LETTER SIMA",
+ ["linebreak"]="al",
+ ["uccode"]=0x2CA4,
+ ["unicodeslot"]=0x2CA5, -- â²¥
+ },
+ [0x2CA6]={
+ ["category"]="lu",
+ ["description"]="COPTIC CAPITAL LETTER TAU",
+ ["lccode"]=0x2CA7,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2CA6, -- Ⲧ
+ },
+ [0x2CA7]={
+ ["category"]="ll",
+ ["description"]="COPTIC SMALL LETTER TAU",
+ ["linebreak"]="al",
+ ["uccode"]=0x2CA6,
+ ["unicodeslot"]=0x2CA7, -- ⲧ
+ },
+ [0x2CA8]={
+ ["category"]="lu",
+ ["description"]="COPTIC CAPITAL LETTER UA",
+ ["lccode"]=0x2CA9,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2CA8, -- Ⲩ
+ },
+ [0x2CA9]={
+ ["category"]="ll",
+ ["description"]="COPTIC SMALL LETTER UA",
+ ["linebreak"]="al",
+ ["uccode"]=0x2CA8,
+ ["unicodeslot"]=0x2CA9, -- ⲩ
+ },
+ [0x2CAA]={
+ ["category"]="lu",
+ ["description"]="COPTIC CAPITAL LETTER FI",
+ ["lccode"]=0x2CAB,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2CAA, -- Ⲫ
+ },
+ [0x2CAB]={
+ ["category"]="ll",
+ ["description"]="COPTIC SMALL LETTER FI",
+ ["linebreak"]="al",
+ ["uccode"]=0x2CAA,
+ ["unicodeslot"]=0x2CAB, -- ⲫ
+ },
+ [0x2CAC]={
+ ["category"]="lu",
+ ["description"]="COPTIC CAPITAL LETTER KHI",
+ ["lccode"]=0x2CAD,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2CAC, -- Ⲭ
+ },
+ [0x2CAD]={
+ ["category"]="ll",
+ ["description"]="COPTIC SMALL LETTER KHI",
+ ["linebreak"]="al",
+ ["uccode"]=0x2CAC,
+ ["unicodeslot"]=0x2CAD, -- â²­
+ },
+ [0x2CAE]={
+ ["category"]="lu",
+ ["description"]="COPTIC CAPITAL LETTER PSI",
+ ["lccode"]=0x2CAF,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2CAE, -- â²®
+ },
+ [0x2CAF]={
+ ["category"]="ll",
+ ["description"]="COPTIC SMALL LETTER PSI",
+ ["linebreak"]="al",
+ ["uccode"]=0x2CAE,
+ ["unicodeslot"]=0x2CAF, -- ⲯ
+ },
+ [0x2CB0]={
+ ["category"]="lu",
+ ["description"]="COPTIC CAPITAL LETTER OOU",
+ ["lccode"]=0x2CB1,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2CB0, -- â²°
+ },
+ [0x2CB1]={
+ ["category"]="ll",
+ ["description"]="COPTIC SMALL LETTER OOU",
+ ["linebreak"]="al",
+ ["uccode"]=0x2CB0,
+ ["unicodeslot"]=0x2CB1, -- â²±
+ },
+ [0x2CB2]={
+ ["category"]="lu",
+ ["description"]="COPTIC CAPITAL LETTER DIALECT-P ALEF",
+ ["lccode"]=0x2CB3,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2CB2, -- â²²
+ },
+ [0x2CB3]={
+ ["category"]="ll",
+ ["description"]="COPTIC SMALL LETTER DIALECT-P ALEF",
+ ["linebreak"]="al",
+ ["uccode"]=0x2CB2,
+ ["unicodeslot"]=0x2CB3, -- â²³
+ },
+ [0x2CB4]={
+ ["category"]="lu",
+ ["description"]="COPTIC CAPITAL LETTER OLD COPTIC AIN",
+ ["lccode"]=0x2CB5,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2CB4, -- â²´
+ },
+ [0x2CB5]={
+ ["category"]="ll",
+ ["description"]="COPTIC SMALL LETTER OLD COPTIC AIN",
+ ["linebreak"]="al",
+ ["uccode"]=0x2CB4,
+ ["unicodeslot"]=0x2CB5, -- â²µ
+ },
+ [0x2CB6]={
+ ["category"]="lu",
+ ["description"]="COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE",
+ ["lccode"]=0x2CB7,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2CB6, -- Ⲷ
+ },
+ [0x2CB7]={
+ ["category"]="ll",
+ ["description"]="COPTIC SMALL LETTER CRYPTOGRAMMIC EIE",
+ ["linebreak"]="al",
+ ["uccode"]=0x2CB6,
+ ["unicodeslot"]=0x2CB7, -- â²·
+ },
+ [0x2CB8]={
+ ["category"]="lu",
+ ["description"]="COPTIC CAPITAL LETTER DIALECT-P KAPA",
+ ["lccode"]=0x2CB9,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2CB8, -- Ⲹ
+ },
+ [0x2CB9]={
+ ["category"]="ll",
+ ["description"]="COPTIC SMALL LETTER DIALECT-P KAPA",
+ ["linebreak"]="al",
+ ["uccode"]=0x2CB8,
+ ["unicodeslot"]=0x2CB9, -- â²¹
+ },
+ [0x2CBA]={
+ ["category"]="lu",
+ ["description"]="COPTIC CAPITAL LETTER DIALECT-P NI",
+ ["lccode"]=0x2CBB,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2CBA, -- Ⲻ
+ },
+ [0x2CBB]={
+ ["category"]="ll",
+ ["description"]="COPTIC SMALL LETTER DIALECT-P NI",
+ ["linebreak"]="al",
+ ["uccode"]=0x2CBA,
+ ["unicodeslot"]=0x2CBB, -- â²»
+ },
+ [0x2CBC]={
+ ["category"]="lu",
+ ["description"]="COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI",
+ ["lccode"]=0x2CBD,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2CBC, -- â²¼
+ },
+ [0x2CBD]={
+ ["category"]="ll",
+ ["description"]="COPTIC SMALL LETTER CRYPTOGRAMMIC NI",
+ ["linebreak"]="al",
+ ["uccode"]=0x2CBC,
+ ["unicodeslot"]=0x2CBD, -- â²½
+ },
+ [0x2CBE]={
+ ["category"]="lu",
+ ["description"]="COPTIC CAPITAL LETTER OLD COPTIC OOU",
+ ["lccode"]=0x2CBF,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2CBE, -- â²¾
+ },
+ [0x2CBF]={
+ ["category"]="ll",
+ ["description"]="COPTIC SMALL LETTER OLD COPTIC OOU",
+ ["linebreak"]="al",
+ ["uccode"]=0x2CBE,
+ ["unicodeslot"]=0x2CBF, -- ⲿ
+ },
+ [0x2CC0]={
+ ["category"]="lu",
+ ["description"]="COPTIC CAPITAL LETTER SAMPI",
+ ["lccode"]=0x2CC1,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2CC0, -- â³€
+ },
+ [0x2CC1]={
+ ["category"]="ll",
+ ["description"]="COPTIC SMALL LETTER SAMPI",
+ ["linebreak"]="al",
+ ["uccode"]=0x2CC0,
+ ["unicodeslot"]=0x2CC1, -- â³
+ },
+ [0x2CC2]={
+ ["category"]="lu",
+ ["description"]="COPTIC CAPITAL LETTER CROSSED SHEI",
+ ["lccode"]=0x2CC3,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2CC2, -- Ⳃ
+ },
+ [0x2CC3]={
+ ["category"]="ll",
+ ["description"]="COPTIC SMALL LETTER CROSSED SHEI",
+ ["linebreak"]="al",
+ ["uccode"]=0x2CC2,
+ ["unicodeslot"]=0x2CC3, -- ⳃ
+ },
+ [0x2CC4]={
+ ["category"]="lu",
+ ["description"]="COPTIC CAPITAL LETTER OLD COPTIC SHEI",
+ ["lccode"]=0x2CC5,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2CC4, -- Ⳅ
+ },
+ [0x2CC5]={
+ ["category"]="ll",
+ ["description"]="COPTIC SMALL LETTER OLD COPTIC SHEI",
+ ["linebreak"]="al",
+ ["uccode"]=0x2CC4,
+ ["unicodeslot"]=0x2CC5, -- â³…
+ },
+ [0x2CC6]={
+ ["category"]="lu",
+ ["description"]="COPTIC CAPITAL LETTER OLD COPTIC ESH",
+ ["lccode"]=0x2CC7,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2CC6, -- Ⳇ
+ },
+ [0x2CC7]={
+ ["category"]="ll",
+ ["description"]="COPTIC SMALL LETTER OLD COPTIC ESH",
+ ["linebreak"]="al",
+ ["uccode"]=0x2CC6,
+ ["unicodeslot"]=0x2CC7, -- ⳇ
+ },
+ [0x2CC8]={
+ ["category"]="lu",
+ ["description"]="COPTIC CAPITAL LETTER AKHMIMIC KHEI",
+ ["lccode"]=0x2CC9,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2CC8, -- Ⳉ
+ },
+ [0x2CC9]={
+ ["category"]="ll",
+ ["description"]="COPTIC SMALL LETTER AKHMIMIC KHEI",
+ ["linebreak"]="al",
+ ["uccode"]=0x2CC8,
+ ["unicodeslot"]=0x2CC9, -- ⳉ
+ },
+ [0x2CCA]={
+ ["category"]="lu",
+ ["description"]="COPTIC CAPITAL LETTER DIALECT-P HORI",
+ ["lccode"]=0x2CCB,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2CCA, -- Ⳋ
+ },
+ [0x2CCB]={
+ ["category"]="ll",
+ ["description"]="COPTIC SMALL LETTER DIALECT-P HORI",
+ ["linebreak"]="al",
+ ["uccode"]=0x2CCA,
+ ["unicodeslot"]=0x2CCB, -- ⳋ
+ },
+ [0x2CCC]={
+ ["category"]="lu",
+ ["description"]="COPTIC CAPITAL LETTER OLD COPTIC HORI",
+ ["lccode"]=0x2CCD,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2CCC, -- Ⳍ
+ },
+ [0x2CCD]={
+ ["category"]="ll",
+ ["description"]="COPTIC SMALL LETTER OLD COPTIC HORI",
+ ["linebreak"]="al",
+ ["uccode"]=0x2CCC,
+ ["unicodeslot"]=0x2CCD, -- â³
+ },
+ [0x2CCE]={
+ ["category"]="lu",
+ ["description"]="COPTIC CAPITAL LETTER OLD COPTIC HA",
+ ["lccode"]=0x2CCF,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2CCE, -- Ⳏ
+ },
+ [0x2CCF]={
+ ["category"]="ll",
+ ["description"]="COPTIC SMALL LETTER OLD COPTIC HA",
+ ["linebreak"]="al",
+ ["uccode"]=0x2CCE,
+ ["unicodeslot"]=0x2CCF, -- â³
+ },
+ [0x2CD0]={
+ ["category"]="lu",
+ ["description"]="COPTIC CAPITAL LETTER L-SHAPED HA",
+ ["lccode"]=0x2CD1,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2CD0, -- â³
+ },
+ [0x2CD1]={
+ ["category"]="ll",
+ ["description"]="COPTIC SMALL LETTER L-SHAPED HA",
+ ["linebreak"]="al",
+ ["uccode"]=0x2CD0,
+ ["unicodeslot"]=0x2CD1, -- ⳑ
+ },
+ [0x2CD2]={
+ ["category"]="lu",
+ ["description"]="COPTIC CAPITAL LETTER OLD COPTIC HEI",
+ ["lccode"]=0x2CD3,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2CD2, -- â³’
+ },
+ [0x2CD3]={
+ ["category"]="ll",
+ ["description"]="COPTIC SMALL LETTER OLD COPTIC HEI",
+ ["linebreak"]="al",
+ ["uccode"]=0x2CD2,
+ ["unicodeslot"]=0x2CD3, -- ⳓ
+ },
+ [0x2CD4]={
+ ["category"]="lu",
+ ["description"]="COPTIC CAPITAL LETTER OLD COPTIC HAT",
+ ["lccode"]=0x2CD5,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2CD4, -- â³”
+ },
+ [0x2CD5]={
+ ["category"]="ll",
+ ["description"]="COPTIC SMALL LETTER OLD COPTIC HAT",
+ ["linebreak"]="al",
+ ["uccode"]=0x2CD4,
+ ["unicodeslot"]=0x2CD5, -- ⳕ
+ },
+ [0x2CD6]={
+ ["category"]="lu",
+ ["description"]="COPTIC CAPITAL LETTER OLD COPTIC GANGIA",
+ ["lccode"]=0x2CD7,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2CD6, -- â³–
+ },
+ [0x2CD7]={
+ ["category"]="ll",
+ ["description"]="COPTIC SMALL LETTER OLD COPTIC GANGIA",
+ ["linebreak"]="al",
+ ["uccode"]=0x2CD6,
+ ["unicodeslot"]=0x2CD7, -- â³—
+ },
+ [0x2CD8]={
+ ["category"]="lu",
+ ["description"]="COPTIC CAPITAL LETTER OLD COPTIC DJA",
+ ["lccode"]=0x2CD9,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2CD8, -- Ⳙ
+ },
+ [0x2CD9]={
+ ["category"]="ll",
+ ["description"]="COPTIC SMALL LETTER OLD COPTIC DJA",
+ ["linebreak"]="al",
+ ["uccode"]=0x2CD8,
+ ["unicodeslot"]=0x2CD9, -- â³™
+ },
+ [0x2CDA]={
+ ["category"]="lu",
+ ["description"]="COPTIC CAPITAL LETTER OLD COPTIC SHIMA",
+ ["lccode"]=0x2CDB,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2CDA, -- Ⳛ
+ },
+ [0x2CDB]={
+ ["category"]="ll",
+ ["description"]="COPTIC SMALL LETTER OLD COPTIC SHIMA",
+ ["linebreak"]="al",
+ ["uccode"]=0x2CDA,
+ ["unicodeslot"]=0x2CDB, -- â³›
+ },
+ [0x2CDC]={
+ ["category"]="lu",
+ ["description"]="COPTIC CAPITAL LETTER OLD NUBIAN SHIMA",
+ ["lccode"]=0x2CDD,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2CDC, -- Ⳝ
+ },
+ [0x2CDD]={
+ ["category"]="ll",
+ ["description"]="COPTIC SMALL LETTER OLD NUBIAN SHIMA",
+ ["linebreak"]="al",
+ ["uccode"]=0x2CDC,
+ ["unicodeslot"]=0x2CDD, -- â³
+ },
+ [0x2CDE]={
+ ["category"]="lu",
+ ["description"]="COPTIC CAPITAL LETTER OLD NUBIAN NGI",
+ ["lccode"]=0x2CDF,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2CDE, -- Ⳟ
+ },
+ [0x2CDF]={
+ ["category"]="ll",
+ ["description"]="COPTIC SMALL LETTER OLD NUBIAN NGI",
+ ["linebreak"]="al",
+ ["uccode"]=0x2CDE,
+ ["unicodeslot"]=0x2CDF, -- ⳟ
+ },
+ [0x2CE0]={
+ ["category"]="lu",
+ ["description"]="COPTIC CAPITAL LETTER OLD NUBIAN NYI",
+ ["lccode"]=0x2CE1,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2CE0, -- â³ 
+ },
+ [0x2CE1]={
+ ["category"]="ll",
+ ["description"]="COPTIC SMALL LETTER OLD NUBIAN NYI",
+ ["linebreak"]="al",
+ ["uccode"]=0x2CE0,
+ ["unicodeslot"]=0x2CE1, -- ⳡ
+ },
+ [0x2CE2]={
+ ["category"]="lu",
+ ["description"]="COPTIC CAPITAL LETTER OLD NUBIAN WAU",
+ ["lccode"]=0x2CE3,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2CE2, -- â³¢
+ },
+ [0x2CE3]={
+ ["category"]="ll",
+ ["description"]="COPTIC SMALL LETTER OLD NUBIAN WAU",
+ ["linebreak"]="al",
+ ["uccode"]=0x2CE2,
+ ["unicodeslot"]=0x2CE3, -- â³£
+ },
+ [0x2CE4]={
+ ["category"]="ll",
+ ["description"]="COPTIC SYMBOL KAI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2CE4, -- ⳤ
+ },
+ [0x2CE5]={
+ ["category"]="so",
+ ["description"]="COPTIC SYMBOL MI RO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2CE5, -- â³¥
+ },
+ [0x2CE6]={
+ ["category"]="so",
+ ["description"]="COPTIC SYMBOL PI RO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2CE6, -- ⳦
+ },
+ [0x2CE7]={
+ ["category"]="so",
+ ["description"]="COPTIC SYMBOL STAUROS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2CE7, -- ⳧
+ },
+ [0x2CE8]={
+ ["category"]="so",
+ ["description"]="COPTIC SYMBOL TAU RO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2CE8, -- ⳨
+ },
+ [0x2CE9]={
+ ["category"]="so",
+ ["description"]="COPTIC SYMBOL KHI RO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2CE9, -- ⳩
+ },
+ [0x2CEA]={
+ ["category"]="so",
+ ["description"]="COPTIC SYMBOL SHIMA SIMA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2CEA, -- ⳪
+ },
+ [0x2CF9]={
+ ["category"]="po",
+ ["description"]="COPTIC OLD NUBIAN FULL STOP",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x2CF9, -- â³¹
+ },
+ [0x2CFA]={
+ ["category"]="po",
+ ["description"]="COPTIC OLD NUBIAN DIRECT QUESTION MARK",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x2CFA, -- ⳺
+ },
+ [0x2CFB]={
+ ["category"]="po",
+ ["description"]="COPTIC OLD NUBIAN INDIRECT QUESTION MARK",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x2CFB, -- â³»
+ },
+ [0x2CFC]={
+ ["category"]="po",
+ ["description"]="COPTIC OLD NUBIAN VERSE DIVIDER",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x2CFC, -- â³¼
+ },
+ [0x2CFD]={
+ ["category"]="no",
+ ["description"]="COPTIC FRACTION ONE HALF",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2CFD, -- â³½
+ },
+ [0x2CFE]={
+ ["category"]="po",
+ ["description"]="COPTIC FULL STOP",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x2CFE, -- â³¾
+ },
+ [0x2CFF]={
+ ["category"]="po",
+ ["description"]="COPTIC MORPHOLOGICAL DIVIDER",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x2CFF, -- ⳿
+ },
+ [0x2D00]={
+ ["category"]="ll",
+ ["description"]="GEORGIAN SMALL LETTER AN",
+ ["linebreak"]="al",
+ ["uccode"]=0x10A0,
+ ["unicodeslot"]=0x2D00, -- â´€
+ },
+ [0x2D01]={
+ ["category"]="ll",
+ ["description"]="GEORGIAN SMALL LETTER BAN",
+ ["linebreak"]="al",
+ ["uccode"]=0x10A1,
+ ["unicodeslot"]=0x2D01, -- â´
+ },
+ [0x2D02]={
+ ["category"]="ll",
+ ["description"]="GEORGIAN SMALL LETTER GAN",
+ ["linebreak"]="al",
+ ["uccode"]=0x10A2,
+ ["unicodeslot"]=0x2D02, -- â´‚
+ },
+ [0x2D03]={
+ ["category"]="ll",
+ ["description"]="GEORGIAN SMALL LETTER DON",
+ ["linebreak"]="al",
+ ["uccode"]=0x10A3,
+ ["unicodeslot"]=0x2D03, -- â´ƒ
+ },
+ [0x2D04]={
+ ["category"]="ll",
+ ["description"]="GEORGIAN SMALL LETTER EN",
+ ["linebreak"]="al",
+ ["uccode"]=0x10A4,
+ ["unicodeslot"]=0x2D04, -- â´„
+ },
+ [0x2D05]={
+ ["category"]="ll",
+ ["description"]="GEORGIAN SMALL LETTER VIN",
+ ["linebreak"]="al",
+ ["uccode"]=0x10A5,
+ ["unicodeslot"]=0x2D05, -- â´…
+ },
+ [0x2D06]={
+ ["category"]="ll",
+ ["description"]="GEORGIAN SMALL LETTER ZEN",
+ ["linebreak"]="al",
+ ["uccode"]=0x10A6,
+ ["unicodeslot"]=0x2D06, -- â´†
+ },
+ [0x2D07]={
+ ["category"]="ll",
+ ["description"]="GEORGIAN SMALL LETTER TAN",
+ ["linebreak"]="al",
+ ["uccode"]=0x10A7,
+ ["unicodeslot"]=0x2D07, -- â´‡
+ },
+ [0x2D08]={
+ ["category"]="ll",
+ ["description"]="GEORGIAN SMALL LETTER IN",
+ ["linebreak"]="al",
+ ["uccode"]=0x10A8,
+ ["unicodeslot"]=0x2D08, -- â´ˆ
+ },
+ [0x2D09]={
+ ["category"]="ll",
+ ["description"]="GEORGIAN SMALL LETTER KAN",
+ ["linebreak"]="al",
+ ["uccode"]=0x10A9,
+ ["unicodeslot"]=0x2D09, -- â´‰
+ },
+ [0x2D0A]={
+ ["category"]="ll",
+ ["description"]="GEORGIAN SMALL LETTER LAS",
+ ["linebreak"]="al",
+ ["uccode"]=0x10AA,
+ ["unicodeslot"]=0x2D0A, -- â´Š
+ },
+ [0x2D0B]={
+ ["category"]="ll",
+ ["description"]="GEORGIAN SMALL LETTER MAN",
+ ["linebreak"]="al",
+ ["uccode"]=0x10AB,
+ ["unicodeslot"]=0x2D0B, -- â´‹
+ },
+ [0x2D0C]={
+ ["category"]="ll",
+ ["description"]="GEORGIAN SMALL LETTER NAR",
+ ["linebreak"]="al",
+ ["uccode"]=0x10AC,
+ ["unicodeslot"]=0x2D0C, -- ⴌ
+ },
+ [0x2D0D]={
+ ["category"]="ll",
+ ["description"]="GEORGIAN SMALL LETTER ON",
+ ["linebreak"]="al",
+ ["uccode"]=0x10AD,
+ ["unicodeslot"]=0x2D0D, -- â´
+ },
+ [0x2D0E]={
+ ["category"]="ll",
+ ["description"]="GEORGIAN SMALL LETTER PAR",
+ ["linebreak"]="al",
+ ["uccode"]=0x10AE,
+ ["unicodeslot"]=0x2D0E, -- â´Ž
+ },
+ [0x2D0F]={
+ ["category"]="ll",
+ ["description"]="GEORGIAN SMALL LETTER ZHAR",
+ ["linebreak"]="al",
+ ["uccode"]=0x10AF,
+ ["unicodeslot"]=0x2D0F, -- â´
+ },
+ [0x2D10]={
+ ["category"]="ll",
+ ["description"]="GEORGIAN SMALL LETTER RAE",
+ ["linebreak"]="al",
+ ["uccode"]=0x10B0,
+ ["unicodeslot"]=0x2D10, -- â´
+ },
+ [0x2D11]={
+ ["category"]="ll",
+ ["description"]="GEORGIAN SMALL LETTER SAN",
+ ["linebreak"]="al",
+ ["uccode"]=0x10B1,
+ ["unicodeslot"]=0x2D11, -- â´‘
+ },
+ [0x2D12]={
+ ["category"]="ll",
+ ["description"]="GEORGIAN SMALL LETTER TAR",
+ ["linebreak"]="al",
+ ["uccode"]=0x10B2,
+ ["unicodeslot"]=0x2D12, -- â´’
+ },
+ [0x2D13]={
+ ["category"]="ll",
+ ["description"]="GEORGIAN SMALL LETTER UN",
+ ["linebreak"]="al",
+ ["uccode"]=0x10B3,
+ ["unicodeslot"]=0x2D13, -- â´“
+ },
+ [0x2D14]={
+ ["category"]="ll",
+ ["description"]="GEORGIAN SMALL LETTER PHAR",
+ ["linebreak"]="al",
+ ["uccode"]=0x10B4,
+ ["unicodeslot"]=0x2D14, -- â´”
+ },
+ [0x2D15]={
+ ["category"]="ll",
+ ["description"]="GEORGIAN SMALL LETTER KHAR",
+ ["linebreak"]="al",
+ ["uccode"]=0x10B5,
+ ["unicodeslot"]=0x2D15, -- â´•
+ },
+ [0x2D16]={
+ ["category"]="ll",
+ ["description"]="GEORGIAN SMALL LETTER GHAN",
+ ["linebreak"]="al",
+ ["uccode"]=0x10B6,
+ ["unicodeslot"]=0x2D16, -- â´–
+ },
+ [0x2D17]={
+ ["category"]="ll",
+ ["description"]="GEORGIAN SMALL LETTER QAR",
+ ["linebreak"]="al",
+ ["uccode"]=0x10B7,
+ ["unicodeslot"]=0x2D17, -- â´—
+ },
+ [0x2D18]={
+ ["category"]="ll",
+ ["description"]="GEORGIAN SMALL LETTER SHIN",
+ ["linebreak"]="al",
+ ["uccode"]=0x10B8,
+ ["unicodeslot"]=0x2D18, -- â´˜
+ },
+ [0x2D19]={
+ ["category"]="ll",
+ ["description"]="GEORGIAN SMALL LETTER CHIN",
+ ["linebreak"]="al",
+ ["uccode"]=0x10B9,
+ ["unicodeslot"]=0x2D19, -- â´™
+ },
+ [0x2D1A]={
+ ["category"]="ll",
+ ["description"]="GEORGIAN SMALL LETTER CAN",
+ ["linebreak"]="al",
+ ["uccode"]=0x10BA,
+ ["unicodeslot"]=0x2D1A, -- â´š
+ },
+ [0x2D1B]={
+ ["category"]="ll",
+ ["description"]="GEORGIAN SMALL LETTER JIL",
+ ["linebreak"]="al",
+ ["uccode"]=0x10BB,
+ ["unicodeslot"]=0x2D1B, -- â´›
+ },
+ [0x2D1C]={
+ ["category"]="ll",
+ ["description"]="GEORGIAN SMALL LETTER CIL",
+ ["linebreak"]="al",
+ ["uccode"]=0x10BC,
+ ["unicodeslot"]=0x2D1C, -- ⴜ
+ },
+ [0x2D1D]={
+ ["category"]="ll",
+ ["description"]="GEORGIAN SMALL LETTER CHAR",
+ ["linebreak"]="al",
+ ["uccode"]=0x10BD,
+ ["unicodeslot"]=0x2D1D, -- â´
+ },
+ [0x2D1E]={
+ ["category"]="ll",
+ ["description"]="GEORGIAN SMALL LETTER XAN",
+ ["linebreak"]="al",
+ ["uccode"]=0x10BE,
+ ["unicodeslot"]=0x2D1E, -- â´ž
+ },
+ [0x2D1F]={
+ ["category"]="ll",
+ ["description"]="GEORGIAN SMALL LETTER JHAN",
+ ["linebreak"]="al",
+ ["uccode"]=0x10BF,
+ ["unicodeslot"]=0x2D1F, -- â´Ÿ
+ },
+ [0x2D20]={
+ ["category"]="ll",
+ ["description"]="GEORGIAN SMALL LETTER HAE",
+ ["linebreak"]="al",
+ ["uccode"]=0x10C0,
+ ["unicodeslot"]=0x2D20, -- â´ 
+ },
+ [0x2D21]={
+ ["category"]="ll",
+ ["description"]="GEORGIAN SMALL LETTER HE",
+ ["linebreak"]="al",
+ ["uccode"]=0x10C1,
+ ["unicodeslot"]=0x2D21, -- â´¡
+ },
+ [0x2D22]={
+ ["category"]="ll",
+ ["description"]="GEORGIAN SMALL LETTER HIE",
+ ["linebreak"]="al",
+ ["uccode"]=0x10C2,
+ ["unicodeslot"]=0x2D22, -- â´¢
+ },
+ [0x2D23]={
+ ["category"]="ll",
+ ["description"]="GEORGIAN SMALL LETTER WE",
+ ["linebreak"]="al",
+ ["uccode"]=0x10C3,
+ ["unicodeslot"]=0x2D23, -- â´£
+ },
+ [0x2D24]={
+ ["category"]="ll",
+ ["description"]="GEORGIAN SMALL LETTER HAR",
+ ["linebreak"]="al",
+ ["uccode"]=0x10C4,
+ ["unicodeslot"]=0x2D24, -- â´¤
+ },
+ [0x2D25]={
+ ["category"]="ll",
+ ["description"]="GEORGIAN SMALL LETTER HOE",
+ ["linebreak"]="al",
+ ["uccode"]=0x10C5,
+ ["unicodeslot"]=0x2D25, -- â´¥
+ },
+ [0x2D30]={
+ ["category"]="lo",
+ ["description"]="TIFINAGH LETTER YA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D30, -- â´°
+ },
+ [0x2D31]={
+ ["category"]="lo",
+ ["description"]="TIFINAGH LETTER YAB",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D31, -- â´±
+ },
+ [0x2D32]={
+ ["category"]="lo",
+ ["description"]="TIFINAGH LETTER YABH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D32, -- â´²
+ },
+ [0x2D33]={
+ ["category"]="lo",
+ ["description"]="TIFINAGH LETTER YAG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D33, -- â´³
+ },
+ [0x2D34]={
+ ["category"]="lo",
+ ["description"]="TIFINAGH LETTER YAGHH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D34, -- â´´
+ },
+ [0x2D35]={
+ ["category"]="lo",
+ ["description"]="TIFINAGH LETTER BERBER ACADEMY YAJ",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D35, -- â´µ
+ },
+ [0x2D36]={
+ ["category"]="lo",
+ ["description"]="TIFINAGH LETTER YAJ",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D36, -- â´¶
+ },
+ [0x2D37]={
+ ["category"]="lo",
+ ["description"]="TIFINAGH LETTER YAD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D37, -- â´·
+ },
+ [0x2D38]={
+ ["category"]="lo",
+ ["description"]="TIFINAGH LETTER YADH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D38, -- â´¸
+ },
+ [0x2D39]={
+ ["category"]="lo",
+ ["description"]="TIFINAGH LETTER YADD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D39, -- â´¹
+ },
+ [0x2D3A]={
+ ["category"]="lo",
+ ["description"]="TIFINAGH LETTER YADDH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D3A, -- â´º
+ },
+ [0x2D3B]={
+ ["category"]="lo",
+ ["description"]="TIFINAGH LETTER YEY",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D3B, -- â´»
+ },
+ [0x2D3C]={
+ ["category"]="lo",
+ ["description"]="TIFINAGH LETTER YAF",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D3C, -- â´¼
+ },
+ [0x2D3D]={
+ ["category"]="lo",
+ ["description"]="TIFINAGH LETTER YAK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D3D, -- â´½
+ },
+ [0x2D3E]={
+ ["category"]="lo",
+ ["description"]="TIFINAGH LETTER TUAREG YAK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D3E, -- â´¾
+ },
+ [0x2D3F]={
+ ["category"]="lo",
+ ["description"]="TIFINAGH LETTER YAKHH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D3F, -- â´¿
+ },
+ [0x2D40]={
+ ["category"]="lo",
+ ["description"]="TIFINAGH LETTER YAH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D40, -- âµ€
+ },
+ [0x2D41]={
+ ["category"]="lo",
+ ["description"]="TIFINAGH LETTER BERBER ACADEMY YAH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D41, -- âµ
+ },
+ [0x2D42]={
+ ["category"]="lo",
+ ["description"]="TIFINAGH LETTER TUAREG YAH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D42, -- ⵂ
+ },
+ [0x2D43]={
+ ["category"]="lo",
+ ["description"]="TIFINAGH LETTER YAHH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D43, -- ⵃ
+ },
+ [0x2D44]={
+ ["category"]="lo",
+ ["description"]="TIFINAGH LETTER YAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D44, -- ⵄ
+ },
+ [0x2D45]={
+ ["category"]="lo",
+ ["description"]="TIFINAGH LETTER YAKH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D45, -- âµ…
+ },
+ [0x2D46]={
+ ["category"]="lo",
+ ["description"]="TIFINAGH LETTER TUAREG YAKH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D46, -- ⵆ
+ },
+ [0x2D47]={
+ ["category"]="lo",
+ ["description"]="TIFINAGH LETTER YAQ",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D47, -- ⵇ
+ },
+ [0x2D48]={
+ ["category"]="lo",
+ ["description"]="TIFINAGH LETTER TUAREG YAQ",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D48, -- ⵈ
+ },
+ [0x2D49]={
+ ["category"]="lo",
+ ["description"]="TIFINAGH LETTER YI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D49, -- ⵉ
+ },
+ [0x2D4A]={
+ ["category"]="lo",
+ ["description"]="TIFINAGH LETTER YAZH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D4A, -- ⵊ
+ },
+ [0x2D4B]={
+ ["category"]="lo",
+ ["description"]="TIFINAGH LETTER AHAGGAR YAZH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D4B, -- ⵋ
+ },
+ [0x2D4C]={
+ ["category"]="lo",
+ ["description"]="TIFINAGH LETTER TUAREG YAZH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D4C, -- ⵌ
+ },
+ [0x2D4D]={
+ ["category"]="lo",
+ ["description"]="TIFINAGH LETTER YAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D4D, -- âµ
+ },
+ [0x2D4E]={
+ ["category"]="lo",
+ ["description"]="TIFINAGH LETTER YAM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D4E, -- ⵎ
+ },
+ [0x2D4F]={
+ ["category"]="lo",
+ ["description"]="TIFINAGH LETTER YAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D4F, -- âµ
+ },
+ [0x2D50]={
+ ["category"]="lo",
+ ["description"]="TIFINAGH LETTER TUAREG YAGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D50, -- âµ
+ },
+ [0x2D51]={
+ ["category"]="lo",
+ ["description"]="TIFINAGH LETTER TUAREG YANG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D51, -- ⵑ
+ },
+ [0x2D52]={
+ ["category"]="lo",
+ ["description"]="TIFINAGH LETTER YAP",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D52, -- âµ’
+ },
+ [0x2D53]={
+ ["category"]="lo",
+ ["description"]="TIFINAGH LETTER YU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D53, -- ⵓ
+ },
+ [0x2D54]={
+ ["category"]="lo",
+ ["description"]="TIFINAGH LETTER YAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D54, -- âµ”
+ },
+ [0x2D55]={
+ ["category"]="lo",
+ ["description"]="TIFINAGH LETTER YARR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D55, -- ⵕ
+ },
+ [0x2D56]={
+ ["category"]="lo",
+ ["description"]="TIFINAGH LETTER YAGH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D56, -- âµ–
+ },
+ [0x2D57]={
+ ["category"]="lo",
+ ["description"]="TIFINAGH LETTER TUAREG YAGH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D57, -- âµ—
+ },
+ [0x2D58]={
+ ["category"]="lo",
+ ["description"]="TIFINAGH LETTER AYER YAGH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D58, -- ⵘ
+ },
+ [0x2D59]={
+ ["category"]="lo",
+ ["description"]="TIFINAGH LETTER YAS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D59, -- âµ™
+ },
+ [0x2D5A]={
+ ["category"]="lo",
+ ["description"]="TIFINAGH LETTER YASS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D5A, -- ⵚ
+ },
+ [0x2D5B]={
+ ["category"]="lo",
+ ["description"]="TIFINAGH LETTER YASH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D5B, -- âµ›
+ },
+ [0x2D5C]={
+ ["category"]="lo",
+ ["description"]="TIFINAGH LETTER YAT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D5C, -- ⵜ
+ },
+ [0x2D5D]={
+ ["category"]="lo",
+ ["description"]="TIFINAGH LETTER YATH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D5D, -- âµ
+ },
+ [0x2D5E]={
+ ["category"]="lo",
+ ["description"]="TIFINAGH LETTER YACH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D5E, -- ⵞ
+ },
+ [0x2D5F]={
+ ["category"]="lo",
+ ["description"]="TIFINAGH LETTER YATT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D5F, -- ⵟ
+ },
+ [0x2D60]={
+ ["category"]="lo",
+ ["description"]="TIFINAGH LETTER YAV",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D60, -- âµ 
+ },
+ [0x2D61]={
+ ["category"]="lo",
+ ["description"]="TIFINAGH LETTER YAW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D61, -- ⵡ
+ },
+ [0x2D62]={
+ ["category"]="lo",
+ ["description"]="TIFINAGH LETTER YAY",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D62, -- âµ¢
+ },
+ [0x2D63]={
+ ["category"]="lo",
+ ["description"]="TIFINAGH LETTER YAZ",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D63, -- âµ£
+ },
+ [0x2D64]={
+ ["category"]="lo",
+ ["description"]="TIFINAGH LETTER TAWELLEMET YAZ",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D64, -- ⵤ
+ },
+ [0x2D65]={
+ ["category"]="lo",
+ ["description"]="TIFINAGH LETTER YAZZ",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D65, -- âµ¥
+ },
+ [0x2D6F]={
+ ["category"]="lm",
+ ["description"]="TIFINAGH MODIFIER LETTER LABIALIZATION MARK",
+ ["linebreak"]="al",
+ ["specials"]={ "super", 0x2D61 },
+ ["unicodeslot"]=0x2D6F, -- ⵯ
+ },
+ [0x2D80]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE LOA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D80, -- ⶀ
+ },
+ [0x2D81]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE MOA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D81, -- â¶
+ },
+ [0x2D82]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE ROA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D82, -- ⶂ
+ },
+ [0x2D83]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE SOA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D83, -- ⶃ
+ },
+ [0x2D84]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE SHOA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D84, -- ⶄ
+ },
+ [0x2D85]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE BOA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D85, -- ⶅ
+ },
+ [0x2D86]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE TOA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D86, -- ⶆ
+ },
+ [0x2D87]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE COA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D87, -- ⶇ
+ },
+ [0x2D88]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE NOA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D88, -- ⶈ
+ },
+ [0x2D89]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE NYOA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D89, -- ⶉ
+ },
+ [0x2D8A]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE GLOTTAL OA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D8A, -- ⶊ
+ },
+ [0x2D8B]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE ZOA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D8B, -- ⶋ
+ },
+ [0x2D8C]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE DOA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D8C, -- ⶌ
+ },
+ [0x2D8D]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE DDOA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D8D, -- â¶
+ },
+ [0x2D8E]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE JOA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D8E, -- ⶎ
+ },
+ [0x2D8F]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE THOA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D8F, -- â¶
+ },
+ [0x2D90]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE CHOA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D90, -- â¶
+ },
+ [0x2D91]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE PHOA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D91, -- ⶑ
+ },
+ [0x2D92]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE POA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D92, -- ⶒ
+ },
+ [0x2D93]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE GGWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D93, -- ⶓ
+ },
+ [0x2D94]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE GGWI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D94, -- ⶔ
+ },
+ [0x2D95]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE GGWEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D95, -- ⶕ
+ },
+ [0x2D96]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE GGWE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2D96, -- ⶖ
+ },
+ [0x2DA0]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE SSA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2DA0, -- ⶠ
+ },
+ [0x2DA1]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE SSU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2DA1, -- ⶡ
+ },
+ [0x2DA2]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE SSI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2DA2, -- ⶢ
+ },
+ [0x2DA3]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE SSAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2DA3, -- ⶣ
+ },
+ [0x2DA4]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE SSEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2DA4, -- ⶤ
+ },
+ [0x2DA5]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE SSE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2DA5, -- ⶥ
+ },
+ [0x2DA6]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE SSO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2DA6, -- ⶦ
+ },
+ [0x2DA8]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE CCA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2DA8, -- ⶨ
+ },
+ [0x2DA9]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE CCU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2DA9, -- ⶩ
+ },
+ [0x2DAA]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE CCI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2DAA, -- ⶪ
+ },
+ [0x2DAB]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE CCAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2DAB, -- ⶫ
+ },
+ [0x2DAC]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE CCEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2DAC, -- ⶬ
+ },
+ [0x2DAD]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE CCE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2DAD, -- ⶭ
+ },
+ [0x2DAE]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE CCO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2DAE, -- ⶮ
+ },
+ [0x2DB0]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE ZZA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2DB0, -- ⶰ
+ },
+ [0x2DB1]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE ZZU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2DB1, -- ⶱ
+ },
+ [0x2DB2]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE ZZI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2DB2, -- ⶲ
+ },
+ [0x2DB3]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE ZZAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2DB3, -- ⶳ
+ },
+ [0x2DB4]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE ZZEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2DB4, -- ⶴ
+ },
+ [0x2DB5]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE ZZE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2DB5, -- ⶵ
+ },
+ [0x2DB6]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE ZZO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2DB6, -- ⶶ
+ },
+ [0x2DB8]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE CCHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2DB8, -- ⶸ
+ },
+ [0x2DB9]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE CCHU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2DB9, -- ⶹ
+ },
+ [0x2DBA]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE CCHI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2DBA, -- ⶺ
+ },
+ [0x2DBB]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE CCHAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2DBB, -- ⶻ
+ },
+ [0x2DBC]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE CCHEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2DBC, -- ⶼ
+ },
+ [0x2DBD]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE CCHE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2DBD, -- ⶽ
+ },
+ [0x2DBE]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE CCHO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2DBE, -- ⶾ
+ },
+ [0x2DC0]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE QYA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2DC0, -- â·€
+ },
+ [0x2DC1]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE QYU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2DC1, -- â·
+ },
+ [0x2DC2]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE QYI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2DC2, -- â·‚
+ },
+ [0x2DC3]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE QYAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2DC3, -- â·ƒ
+ },
+ [0x2DC4]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE QYEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2DC4, -- â·„
+ },
+ [0x2DC5]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE QYE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2DC5, -- â·…
+ },
+ [0x2DC6]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE QYO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2DC6, -- â·†
+ },
+ [0x2DC8]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE KYA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2DC8, -- â·ˆ
+ },
+ [0x2DC9]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE KYU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2DC9, -- â·‰
+ },
+ [0x2DCA]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE KYI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2DCA, -- â·Š
+ },
+ [0x2DCB]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE KYAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2DCB, -- â·‹
+ },
+ [0x2DCC]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE KYEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2DCC, -- ⷌ
+ },
+ [0x2DCD]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE KYE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2DCD, -- â·
+ },
+ [0x2DCE]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE KYO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2DCE, -- â·Ž
+ },
+ [0x2DD0]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE XYA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2DD0, -- â·
+ },
+ [0x2DD1]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE XYU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2DD1, -- â·‘
+ },
+ [0x2DD2]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE XYI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2DD2, -- â·’
+ },
+ [0x2DD3]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE XYAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2DD3, -- â·“
+ },
+ [0x2DD4]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE XYEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2DD4, -- â·”
+ },
+ [0x2DD5]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE XYE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2DD5, -- â·•
+ },
+ [0x2DD6]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE XYO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2DD6, -- â·–
+ },
+ [0x2DD8]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE GYA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2DD8, -- â·˜
+ },
+ [0x2DD9]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE GYU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2DD9, -- â·™
+ },
+ [0x2DDA]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE GYI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2DDA, -- â·š
+ },
+ [0x2DDB]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE GYAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2DDB, -- â·›
+ },
+ [0x2DDC]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE GYEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2DDC, -- ⷜ
+ },
+ [0x2DDD]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE GYE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2DDD, -- â·
+ },
+ [0x2DDE]={
+ ["category"]="lo",
+ ["description"]="ETHIOPIC SYLLABLE GYO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2DDE, -- â·ž
+ },
+ [0x2E00]={
+ ["category"]="po",
+ ["description"]="RIGHT ANGLE SUBSTITUTION MARKER",
+ ["linebreak"]="qu",
+ ["unicodeslot"]=0x2E00, -- ⸀
+ },
+ [0x2E01]={
+ ["category"]="po",
+ ["description"]="RIGHT ANGLE DOTTED SUBSTITUTION MARKER",
+ ["linebreak"]="qu",
+ ["unicodeslot"]=0x2E01, -- â¸
+ },
+ [0x2E02]={
+ ["category"]="pi",
+ ["description"]="LEFT SUBSTITUTION BRACKET",
+ ["linebreak"]="qu",
+ ["unicodeslot"]=0x2E02, -- ⸂
+ },
+ [0x2E03]={
+ ["category"]="pf",
+ ["description"]="RIGHT SUBSTITUTION BRACKET",
+ ["linebreak"]="qu",
+ ["unicodeslot"]=0x2E03, -- ⸃
+ },
+ [0x2E04]={
+ ["category"]="pi",
+ ["description"]="LEFT DOTTED SUBSTITUTION BRACKET",
+ ["linebreak"]="qu",
+ ["unicodeslot"]=0x2E04, -- ⸄
+ },
+ [0x2E05]={
+ ["category"]="pf",
+ ["description"]="RIGHT DOTTED SUBSTITUTION BRACKET",
+ ["linebreak"]="qu",
+ ["unicodeslot"]=0x2E05, -- ⸅
+ },
+ [0x2E06]={
+ ["category"]="po",
+ ["description"]="RAISED INTERPOLATION MARKER",
+ ["linebreak"]="qu",
+ ["unicodeslot"]=0x2E06, -- ⸆
+ },
+ [0x2E07]={
+ ["category"]="po",
+ ["description"]="RAISED DOTTED INTERPOLATION MARKER",
+ ["linebreak"]="qu",
+ ["unicodeslot"]=0x2E07, -- ⸇
+ },
+ [0x2E08]={
+ ["category"]="po",
+ ["description"]="DOTTED TRANSPOSITION MARKER",
+ ["linebreak"]="qu",
+ ["unicodeslot"]=0x2E08, -- ⸈
+ },
+ [0x2E09]={
+ ["category"]="pi",
+ ["description"]="LEFT TRANSPOSITION BRACKET",
+ ["linebreak"]="qu",
+ ["unicodeslot"]=0x2E09, -- ⸉
+ },
+ [0x2E0A]={
+ ["category"]="pf",
+ ["description"]="RIGHT TRANSPOSITION BRACKET",
+ ["linebreak"]="qu",
+ ["unicodeslot"]=0x2E0A, -- ⸊
+ },
+ [0x2E0B]={
+ ["category"]="po",
+ ["description"]="RAISED SQUARE",
+ ["linebreak"]="qu",
+ ["unicodeslot"]=0x2E0B, -- ⸋
+ },
+ [0x2E0C]={
+ ["category"]="pi",
+ ["description"]="LEFT RAISED OMISSION BRACKET",
+ ["linebreak"]="qu",
+ ["unicodeslot"]=0x2E0C, -- ⸌
+ },
+ [0x2E0D]={
+ ["category"]="pf",
+ ["description"]="RIGHT RAISED OMISSION BRACKET",
+ ["linebreak"]="qu",
+ ["unicodeslot"]=0x2E0D, -- â¸
+ },
+ [0x2E0E]={
+ ["category"]="po",
+ ["description"]="EDITORIAL CORONIS",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x2E0E, -- ⸎
+ },
+ [0x2E0F]={
+ ["category"]="po",
+ ["description"]="PARAGRAPHOS",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x2E0F, -- â¸
+ },
+ [0x2E10]={
+ ["category"]="po",
+ ["description"]="FORKED PARAGRAPHOS",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x2E10, -- â¸
+ },
+ [0x2E11]={
+ ["category"]="po",
+ ["description"]="REVERSED FORKED PARAGRAPHOS",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x2E11, -- ⸑
+ },
+ [0x2E12]={
+ ["category"]="po",
+ ["description"]="HYPODIASTOLE",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x2E12, -- ⸒
+ },
+ [0x2E13]={
+ ["category"]="po",
+ ["description"]="DOTTED OBELOS",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x2E13, -- ⸓
+ },
+ [0x2E14]={
+ ["category"]="po",
+ ["description"]="DOWNWARDS ANCORA",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x2E14, -- ⸔
+ },
+ [0x2E15]={
+ ["category"]="po",
+ ["description"]="UPWARDS ANCORA",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x2E15, -- ⸕
+ },
+ [0x2E16]={
+ ["category"]="po",
+ ["description"]="DOTTED RIGHT-POINTING ANGLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x2E16, -- ⸖
+ },
+ [0x2E17]={
+ ["category"]="pd",
+ ["description"]="DOUBLE OBLIQUE HYPHEN",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x2E17, -- ⸗
+ },
+ [0x2E1C]={
+ ["category"]="pi",
+ ["description"]="LEFT LOW PARAPHRASE BRACKET",
+ ["linebreak"]="qu",
+ ["unicodeslot"]=0x2E1C, -- ⸜
+ },
+ [0x2E1D]={
+ ["category"]="pf",
+ ["description"]="RIGHT LOW PARAPHRASE BRACKET",
+ ["linebreak"]="qu",
+ ["unicodeslot"]=0x2E1D, -- â¸
+ },
+ [0x2E80]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL REPEAT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2E80, -- ⺀
+ },
+ [0x2E81]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL CLIFF",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2E81, -- âº
+ },
+ [0x2E82]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL SECOND ONE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2E82, -- ⺂
+ },
+ [0x2E83]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL SECOND TWO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2E83, -- ⺃
+ },
+ [0x2E84]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL SECOND THREE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2E84, -- ⺄
+ },
+ [0x2E85]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL PERSON",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2E85, -- ⺅
+ },
+ [0x2E86]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL BOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2E86, -- ⺆
+ },
+ [0x2E87]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL TABLE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2E87, -- ⺇
+ },
+ [0x2E88]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL KNIFE ONE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2E88, -- ⺈
+ },
+ [0x2E89]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL KNIFE TWO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2E89, -- ⺉
+ },
+ [0x2E8A]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL DIVINATION",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2E8A, -- ⺊
+ },
+ [0x2E8B]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL SEAL",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2E8B, -- ⺋
+ },
+ [0x2E8C]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL SMALL ONE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2E8C, -- ⺌
+ },
+ [0x2E8D]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL SMALL TWO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2E8D, -- âº
+ },
+ [0x2E8E]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL LAME ONE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2E8E, -- ⺎
+ },
+ [0x2E8F]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL LAME TWO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2E8F, -- âº
+ },
+ [0x2E90]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL LAME THREE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2E90, -- âº
+ },
+ [0x2E91]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL LAME FOUR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2E91, -- ⺑
+ },
+ [0x2E92]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL SNAKE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2E92, -- ⺒
+ },
+ [0x2E93]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL THREAD",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2E93, -- ⺓
+ },
+ [0x2E94]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL SNOUT ONE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2E94, -- ⺔
+ },
+ [0x2E95]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL SNOUT TWO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2E95, -- ⺕
+ },
+ [0x2E96]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL HEART ONE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2E96, -- ⺖
+ },
+ [0x2E97]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL HEART TWO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2E97, -- ⺗
+ },
+ [0x2E98]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL HAND",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2E98, -- ⺘
+ },
+ [0x2E99]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL RAP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2E99, -- ⺙
+ },
+ [0x2E9B]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL CHOKE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2E9B, -- ⺛
+ },
+ [0x2E9C]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL SUN",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2E9C, -- ⺜
+ },
+ [0x2E9D]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL MOON",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2E9D, -- âº
+ },
+ [0x2E9E]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL DEATH",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2E9E, -- ⺞
+ },
+ [0x2E9F]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL MOTHER",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x6BCD },
+ ["unicodeslot"]=0x2E9F, -- ⺟
+ },
+ [0x2EA0]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL CIVILIAN",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EA0, -- ⺠
+ },
+ [0x2EA1]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL WATER ONE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EA1, -- ⺡
+ },
+ [0x2EA2]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL WATER TWO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EA2, -- ⺢
+ },
+ [0x2EA3]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL FIRE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EA3, -- ⺣
+ },
+ [0x2EA4]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL PAW ONE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EA4, -- ⺤
+ },
+ [0x2EA5]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL PAW TWO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EA5, -- ⺥
+ },
+ [0x2EA6]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL SIMPLIFIED HALF TREE TRUNK",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EA6, -- ⺦
+ },
+ [0x2EA7]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL COW",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EA7, -- ⺧
+ },
+ [0x2EA8]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL DOG",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EA8, -- ⺨
+ },
+ [0x2EA9]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL JADE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EA9, -- ⺩
+ },
+ [0x2EAA]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL BOLT OF CLOTH",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EAA, -- ⺪
+ },
+ [0x2EAB]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL EYE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EAB, -- ⺫
+ },
+ [0x2EAC]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL SPIRIT ONE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EAC, -- ⺬
+ },
+ [0x2EAD]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL SPIRIT TWO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EAD, -- ⺭
+ },
+ [0x2EAE]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL BAMBOO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EAE, -- ⺮
+ },
+ [0x2EAF]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL SILK",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EAF, -- ⺯
+ },
+ [0x2EB0]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL C-SIMPLIFIED SILK",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EB0, -- ⺰
+ },
+ [0x2EB1]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL NET ONE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EB1, -- ⺱
+ },
+ [0x2EB2]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL NET TWO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EB2, -- ⺲
+ },
+ [0x2EB3]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL NET THREE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EB3, -- ⺳
+ },
+ [0x2EB4]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL NET FOUR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EB4, -- ⺴
+ },
+ [0x2EB5]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL MESH",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EB5, -- ⺵
+ },
+ [0x2EB6]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL SHEEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EB6, -- ⺶
+ },
+ [0x2EB7]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL RAM",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EB7, -- ⺷
+ },
+ [0x2EB8]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL EWE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EB8, -- ⺸
+ },
+ [0x2EB9]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL OLD",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EB9, -- ⺹
+ },
+ [0x2EBA]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL BRUSH ONE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EBA, -- ⺺
+ },
+ [0x2EBB]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL BRUSH TWO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EBB, -- ⺻
+ },
+ [0x2EBC]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL MEAT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EBC, -- ⺼
+ },
+ [0x2EBD]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL MORTAR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EBD, -- ⺽
+ },
+ [0x2EBE]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL GRASS ONE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EBE, -- ⺾
+ },
+ [0x2EBF]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL GRASS TWO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EBF, -- ⺿
+ },
+ [0x2EC0]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL GRASS THREE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EC0, -- ⻀
+ },
+ [0x2EC1]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL TIGER",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EC1, -- â»
+ },
+ [0x2EC2]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL CLOTHES",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EC2, -- ⻂
+ },
+ [0x2EC3]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL WEST ONE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EC3, -- ⻃
+ },
+ [0x2EC4]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL WEST TWO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EC4, -- ⻄
+ },
+ [0x2EC5]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL C-SIMPLIFIED SEE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EC5, -- â»…
+ },
+ [0x2EC6]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL SIMPLIFIED HORN",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EC6, -- ⻆
+ },
+ [0x2EC7]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL HORN",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EC7, -- ⻇
+ },
+ [0x2EC8]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL C-SIMPLIFIED SPEECH",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EC8, -- ⻈
+ },
+ [0x2EC9]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL C-SIMPLIFIED SHELL",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EC9, -- ⻉
+ },
+ [0x2ECA]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL FOOT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2ECA, -- ⻊
+ },
+ [0x2ECB]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL C-SIMPLIFIED CART",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2ECB, -- ⻋
+ },
+ [0x2ECC]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL SIMPLIFIED WALK",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2ECC, -- ⻌
+ },
+ [0x2ECD]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL WALK ONE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2ECD, -- â»
+ },
+ [0x2ECE]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL WALK TWO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2ECE, -- ⻎
+ },
+ [0x2ECF]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL CITY",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2ECF, -- â»
+ },
+ [0x2ED0]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL C-SIMPLIFIED GOLD",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2ED0, -- â»
+ },
+ [0x2ED1]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL LONG ONE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2ED1, -- ⻑
+ },
+ [0x2ED2]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL LONG TWO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2ED2, -- â»’
+ },
+ [0x2ED3]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL C-SIMPLIFIED LONG",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2ED3, -- ⻓
+ },
+ [0x2ED4]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL C-SIMPLIFIED GATE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2ED4, -- â»”
+ },
+ [0x2ED5]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL MOUND ONE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2ED5, -- ⻕
+ },
+ [0x2ED6]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL MOUND TWO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2ED6, -- â»–
+ },
+ [0x2ED7]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL RAIN",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2ED7, -- â»—
+ },
+ [0x2ED8]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL BLUE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2ED8, -- ⻘
+ },
+ [0x2ED9]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL C-SIMPLIFIED TANNED LEATHER",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2ED9, -- â»™
+ },
+ [0x2EDA]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL C-SIMPLIFIED LEAF",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EDA, -- ⻚
+ },
+ [0x2EDB]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL C-SIMPLIFIED WIND",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EDB, -- â»›
+ },
+ [0x2EDC]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL C-SIMPLIFIED FLY",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EDC, -- ⻜
+ },
+ [0x2EDD]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL EAT ONE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EDD, -- â»
+ },
+ [0x2EDE]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL EAT TWO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EDE, -- ⻞
+ },
+ [0x2EDF]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL EAT THREE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EDF, -- ⻟
+ },
+ [0x2EE0]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL C-SIMPLIFIED EAT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EE0, -- â» 
+ },
+ [0x2EE1]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL HEAD",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EE1, -- ⻡
+ },
+ [0x2EE2]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL C-SIMPLIFIED HORSE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EE2, -- ⻢
+ },
+ [0x2EE3]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL BONE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EE3, -- ⻣
+ },
+ [0x2EE4]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL GHOST",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EE4, -- ⻤
+ },
+ [0x2EE5]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL C-SIMPLIFIED FISH",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EE5, -- ⻥
+ },
+ [0x2EE6]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL C-SIMPLIFIED BIRD",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EE6, -- ⻦
+ },
+ [0x2EE7]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL C-SIMPLIFIED SALT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EE7, -- ⻧
+ },
+ [0x2EE8]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL SIMPLIFIED WHEAT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EE8, -- ⻨
+ },
+ [0x2EE9]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL SIMPLIFIED YELLOW",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EE9, -- ⻩
+ },
+ [0x2EEA]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL C-SIMPLIFIED FROG",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EEA, -- ⻪
+ },
+ [0x2EEB]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL J-SIMPLIFIED EVEN",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EEB, -- ⻫
+ },
+ [0x2EEC]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL C-SIMPLIFIED EVEN",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EEC, -- ⻬
+ },
+ [0x2EED]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL J-SIMPLIFIED TOOTH",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EED, -- â»­
+ },
+ [0x2EEE]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL C-SIMPLIFIED TOOTH",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EEE, -- â»®
+ },
+ [0x2EEF]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL J-SIMPLIFIED DRAGON",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EEF, -- ⻯
+ },
+ [0x2EF0]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL C-SIMPLIFIED DRAGON",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EF0, -- â»°
+ },
+ [0x2EF1]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL TURTLE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EF1, -- â»±
+ },
+ [0x2EF2]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL J-SIMPLIFIED TURTLE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2EF2, -- ⻲
+ },
+ [0x2EF3]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK RADICAL C-SIMPLIFIED TURTLE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x9F9F },
+ ["unicodeslot"]=0x2EF3, -- ⻳
+ },
+ [0x2F00]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL ONE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x4E00 },
+ ["unicodeslot"]=0x2F00, -- â¼€
+ },
+ [0x2F01]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL LINE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x4E28 },
+ ["unicodeslot"]=0x2F01, -- â¼
+ },
+ [0x2F02]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL DOT",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x4E36 },
+ ["unicodeslot"]=0x2F02, -- ⼂
+ },
+ [0x2F03]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL SLASH",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x4E3F },
+ ["unicodeslot"]=0x2F03, -- ⼃
+ },
+ [0x2F04]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL SECOND",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x4E59 },
+ ["unicodeslot"]=0x2F04, -- ⼄
+ },
+ [0x2F05]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL HOOK",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x4E85 },
+ ["unicodeslot"]=0x2F05, -- â¼…
+ },
+ [0x2F06]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL TWO",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x4E8C },
+ ["unicodeslot"]=0x2F06, -- ⼆
+ },
+ [0x2F07]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL LID",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x4EA0 },
+ ["unicodeslot"]=0x2F07, -- ⼇
+ },
+ [0x2F08]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL MAN",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x4EBA },
+ ["unicodeslot"]=0x2F08, -- ⼈
+ },
+ [0x2F09]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL LEGS",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x513F },
+ ["unicodeslot"]=0x2F09, -- ⼉
+ },
+ [0x2F0A]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL ENTER",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x5165 },
+ ["unicodeslot"]=0x2F0A, -- ⼊
+ },
+ [0x2F0B]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL EIGHT",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x516B },
+ ["unicodeslot"]=0x2F0B, -- ⼋
+ },
+ [0x2F0C]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL DOWN BOX",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x5182 },
+ ["unicodeslot"]=0x2F0C, -- ⼌
+ },
+ [0x2F0D]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL COVER",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x5196 },
+ ["unicodeslot"]=0x2F0D, -- â¼
+ },
+ [0x2F0E]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL ICE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x51AB },
+ ["unicodeslot"]=0x2F0E, -- ⼎
+ },
+ [0x2F0F]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL TABLE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x51E0 },
+ ["unicodeslot"]=0x2F0F, -- â¼
+ },
+ [0x2F10]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL OPEN BOX",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x51F5 },
+ ["unicodeslot"]=0x2F10, -- â¼
+ },
+ [0x2F11]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL KNIFE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x5200 },
+ ["unicodeslot"]=0x2F11, -- ⼑
+ },
+ [0x2F12]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL POWER",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x529B },
+ ["unicodeslot"]=0x2F12, -- â¼’
+ },
+ [0x2F13]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL WRAP",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x52F9 },
+ ["unicodeslot"]=0x2F13, -- ⼓
+ },
+ [0x2F14]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL SPOON",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x5315 },
+ ["unicodeslot"]=0x2F14, -- â¼”
+ },
+ [0x2F15]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL RIGHT OPEN BOX",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x531A },
+ ["unicodeslot"]=0x2F15, -- ⼕
+ },
+ [0x2F16]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL HIDING ENCLOSURE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x5338 },
+ ["unicodeslot"]=0x2F16, -- â¼–
+ },
+ [0x2F17]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL TEN",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x5341 },
+ ["unicodeslot"]=0x2F17, -- â¼—
+ },
+ [0x2F18]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL DIVINATION",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x535C },
+ ["unicodeslot"]=0x2F18, -- ⼘
+ },
+ [0x2F19]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL SEAL",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x5369 },
+ ["unicodeslot"]=0x2F19, -- â¼™
+ },
+ [0x2F1A]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL CLIFF",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x5382 },
+ ["unicodeslot"]=0x2F1A, -- ⼚
+ },
+ [0x2F1B]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL PRIVATE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x53B6 },
+ ["unicodeslot"]=0x2F1B, -- â¼›
+ },
+ [0x2F1C]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL AGAIN",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x53C8 },
+ ["unicodeslot"]=0x2F1C, -- ⼜
+ },
+ [0x2F1D]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL MOUTH",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x53E3 },
+ ["unicodeslot"]=0x2F1D, -- â¼
+ },
+ [0x2F1E]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL ENCLOSURE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x56D7 },
+ ["unicodeslot"]=0x2F1E, -- ⼞
+ },
+ [0x2F1F]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL EARTH",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x571F },
+ ["unicodeslot"]=0x2F1F, -- ⼟
+ },
+ [0x2F20]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL SCHOLAR",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x58EB },
+ ["unicodeslot"]=0x2F20, -- â¼ 
+ },
+ [0x2F21]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL GO",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x5902 },
+ ["unicodeslot"]=0x2F21, -- ⼡
+ },
+ [0x2F22]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL GO SLOWLY",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x590A },
+ ["unicodeslot"]=0x2F22, -- â¼¢
+ },
+ [0x2F23]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL EVENING",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x5915 },
+ ["unicodeslot"]=0x2F23, -- â¼£
+ },
+ [0x2F24]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL BIG",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x5927 },
+ ["unicodeslot"]=0x2F24, -- ⼤
+ },
+ [0x2F25]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL WOMAN",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x5973 },
+ ["unicodeslot"]=0x2F25, -- â¼¥
+ },
+ [0x2F26]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL CHILD",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x5B50 },
+ ["unicodeslot"]=0x2F26, -- ⼦
+ },
+ [0x2F27]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL ROOF",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x5B80 },
+ ["unicodeslot"]=0x2F27, -- ⼧
+ },
+ [0x2F28]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL INCH",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x5BF8 },
+ ["unicodeslot"]=0x2F28, -- ⼨
+ },
+ [0x2F29]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL SMALL",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x5C0F },
+ ["unicodeslot"]=0x2F29, -- ⼩
+ },
+ [0x2F2A]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL LAME",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x5C22 },
+ ["unicodeslot"]=0x2F2A, -- ⼪
+ },
+ [0x2F2B]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL CORPSE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x5C38 },
+ ["unicodeslot"]=0x2F2B, -- ⼫
+ },
+ [0x2F2C]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL SPROUT",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x5C6E },
+ ["unicodeslot"]=0x2F2C, -- ⼬
+ },
+ [0x2F2D]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL MOUNTAIN",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x5C71 },
+ ["unicodeslot"]=0x2F2D, -- â¼­
+ },
+ [0x2F2E]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL RIVER",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x5DDB },
+ ["unicodeslot"]=0x2F2E, -- â¼®
+ },
+ [0x2F2F]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL WORK",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x5DE5 },
+ ["unicodeslot"]=0x2F2F, -- ⼯
+ },
+ [0x2F30]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL ONESELF",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x5DF1 },
+ ["unicodeslot"]=0x2F30, -- â¼°
+ },
+ [0x2F31]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL TURBAN",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x5DFE },
+ ["unicodeslot"]=0x2F31, -- â¼±
+ },
+ [0x2F32]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL DRY",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x5E72 },
+ ["unicodeslot"]=0x2F32, -- â¼²
+ },
+ [0x2F33]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL SHORT THREAD",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x5E7A },
+ ["unicodeslot"]=0x2F33, -- â¼³
+ },
+ [0x2F34]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL DOTTED CLIFF",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x5E7F },
+ ["unicodeslot"]=0x2F34, -- â¼´
+ },
+ [0x2F35]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL LONG STRIDE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x5EF4 },
+ ["unicodeslot"]=0x2F35, -- â¼µ
+ },
+ [0x2F36]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL TWO HANDS",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x5EFE },
+ ["unicodeslot"]=0x2F36, -- ⼶
+ },
+ [0x2F37]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL SHOOT",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x5F0B },
+ ["unicodeslot"]=0x2F37, -- â¼·
+ },
+ [0x2F38]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL BOW",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x5F13 },
+ ["unicodeslot"]=0x2F38, -- ⼸
+ },
+ [0x2F39]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL SNOUT",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x5F50 },
+ ["unicodeslot"]=0x2F39, -- â¼¹
+ },
+ [0x2F3A]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL BRISTLE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x5F61 },
+ ["unicodeslot"]=0x2F3A, -- ⼺
+ },
+ [0x2F3B]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL STEP",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x5F73 },
+ ["unicodeslot"]=0x2F3B, -- â¼»
+ },
+ [0x2F3C]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL HEART",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x5FC3 },
+ ["unicodeslot"]=0x2F3C, -- â¼¼
+ },
+ [0x2F3D]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL HALBERD",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x6208 },
+ ["unicodeslot"]=0x2F3D, -- â¼½
+ },
+ [0x2F3E]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL DOOR",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x6236 },
+ ["unicodeslot"]=0x2F3E, -- â¼¾
+ },
+ [0x2F3F]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL HAND",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x624B },
+ ["unicodeslot"]=0x2F3F, -- ⼿
+ },
+ [0x2F40]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL BRANCH",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x652F },
+ ["unicodeslot"]=0x2F40, -- â½€
+ },
+ [0x2F41]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL RAP",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x6534 },
+ ["unicodeslot"]=0x2F41, -- â½
+ },
+ [0x2F42]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL SCRIPT",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x6587 },
+ ["unicodeslot"]=0x2F42, -- ⽂
+ },
+ [0x2F43]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL DIPPER",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x6597 },
+ ["unicodeslot"]=0x2F43, -- ⽃
+ },
+ [0x2F44]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL AXE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x65A4 },
+ ["unicodeslot"]=0x2F44, -- ⽄
+ },
+ [0x2F45]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL SQUARE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x65B9 },
+ ["unicodeslot"]=0x2F45, -- â½…
+ },
+ [0x2F46]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL NOT",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x65E0 },
+ ["unicodeslot"]=0x2F46, -- ⽆
+ },
+ [0x2F47]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL SUN",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x65E5 },
+ ["unicodeslot"]=0x2F47, -- ⽇
+ },
+ [0x2F48]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL SAY",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x66F0 },
+ ["unicodeslot"]=0x2F48, -- ⽈
+ },
+ [0x2F49]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL MOON",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x6708 },
+ ["unicodeslot"]=0x2F49, -- ⽉
+ },
+ [0x2F4A]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL TREE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x6728 },
+ ["unicodeslot"]=0x2F4A, -- ⽊
+ },
+ [0x2F4B]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL LACK",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x6B20 },
+ ["unicodeslot"]=0x2F4B, -- ⽋
+ },
+ [0x2F4C]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL STOP",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x6B62 },
+ ["unicodeslot"]=0x2F4C, -- ⽌
+ },
+ [0x2F4D]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL DEATH",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x6B79 },
+ ["unicodeslot"]=0x2F4D, -- â½
+ },
+ [0x2F4E]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL WEAPON",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x6BB3 },
+ ["unicodeslot"]=0x2F4E, -- ⽎
+ },
+ [0x2F4F]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL DO NOT",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x6BCB },
+ ["unicodeslot"]=0x2F4F, -- â½
+ },
+ [0x2F50]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL COMPARE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x6BD4 },
+ ["unicodeslot"]=0x2F50, -- â½
+ },
+ [0x2F51]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL FUR",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x6BDB },
+ ["unicodeslot"]=0x2F51, -- ⽑
+ },
+ [0x2F52]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL CLAN",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x6C0F },
+ ["unicodeslot"]=0x2F52, -- â½’
+ },
+ [0x2F53]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL STEAM",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x6C14 },
+ ["unicodeslot"]=0x2F53, -- ⽓
+ },
+ [0x2F54]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL WATER",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x6C34 },
+ ["unicodeslot"]=0x2F54, -- â½”
+ },
+ [0x2F55]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL FIRE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x706B },
+ ["unicodeslot"]=0x2F55, -- ⽕
+ },
+ [0x2F56]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL CLAW",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x722A },
+ ["unicodeslot"]=0x2F56, -- â½–
+ },
+ [0x2F57]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL FATHER",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x7236 },
+ ["unicodeslot"]=0x2F57, -- â½—
+ },
+ [0x2F58]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL DOUBLE X",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x723B },
+ ["unicodeslot"]=0x2F58, -- ⽘
+ },
+ [0x2F59]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL HALF TREE TRUNK",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x723F },
+ ["unicodeslot"]=0x2F59, -- â½™
+ },
+ [0x2F5A]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL SLICE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x7247 },
+ ["unicodeslot"]=0x2F5A, -- ⽚
+ },
+ [0x2F5B]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL FANG",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x7259 },
+ ["unicodeslot"]=0x2F5B, -- â½›
+ },
+ [0x2F5C]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL COW",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x725B },
+ ["unicodeslot"]=0x2F5C, -- ⽜
+ },
+ [0x2F5D]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL DOG",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x72AC },
+ ["unicodeslot"]=0x2F5D, -- â½
+ },
+ [0x2F5E]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL PROFOUND",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x7384 },
+ ["unicodeslot"]=0x2F5E, -- ⽞
+ },
+ [0x2F5F]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL JADE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x7389 },
+ ["unicodeslot"]=0x2F5F, -- ⽟
+ },
+ [0x2F60]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL MELON",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x74DC },
+ ["unicodeslot"]=0x2F60, -- â½ 
+ },
+ [0x2F61]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL TILE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x74E6 },
+ ["unicodeslot"]=0x2F61, -- ⽡
+ },
+ [0x2F62]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL SWEET",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x7518 },
+ ["unicodeslot"]=0x2F62, -- â½¢
+ },
+ [0x2F63]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL LIFE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x751F },
+ ["unicodeslot"]=0x2F63, -- â½£
+ },
+ [0x2F64]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL USE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x7528 },
+ ["unicodeslot"]=0x2F64, -- ⽤
+ },
+ [0x2F65]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL FIELD",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x7530 },
+ ["unicodeslot"]=0x2F65, -- â½¥
+ },
+ [0x2F66]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL BOLT OF CLOTH",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x758B },
+ ["unicodeslot"]=0x2F66, -- ⽦
+ },
+ [0x2F67]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL SICKNESS",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x7592 },
+ ["unicodeslot"]=0x2F67, -- ⽧
+ },
+ [0x2F68]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL DOTTED TENT",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x7676 },
+ ["unicodeslot"]=0x2F68, -- ⽨
+ },
+ [0x2F69]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL WHITE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x767D },
+ ["unicodeslot"]=0x2F69, -- ⽩
+ },
+ [0x2F6A]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL SKIN",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x76AE },
+ ["unicodeslot"]=0x2F6A, -- ⽪
+ },
+ [0x2F6B]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL DISH",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x76BF },
+ ["unicodeslot"]=0x2F6B, -- ⽫
+ },
+ [0x2F6C]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL EYE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x76EE },
+ ["unicodeslot"]=0x2F6C, -- ⽬
+ },
+ [0x2F6D]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL SPEAR",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x77DB },
+ ["unicodeslot"]=0x2F6D, -- â½­
+ },
+ [0x2F6E]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL ARROW",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x77E2 },
+ ["unicodeslot"]=0x2F6E, -- â½®
+ },
+ [0x2F6F]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL STONE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x77F3 },
+ ["unicodeslot"]=0x2F6F, -- ⽯
+ },
+ [0x2F70]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL SPIRIT",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x793A },
+ ["unicodeslot"]=0x2F70, -- â½°
+ },
+ [0x2F71]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL TRACK",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x79B8 },
+ ["unicodeslot"]=0x2F71, -- â½±
+ },
+ [0x2F72]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL GRAIN",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x79BE },
+ ["unicodeslot"]=0x2F72, -- â½²
+ },
+ [0x2F73]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL CAVE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x7A74 },
+ ["unicodeslot"]=0x2F73, -- â½³
+ },
+ [0x2F74]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL STAND",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x7ACB },
+ ["unicodeslot"]=0x2F74, -- â½´
+ },
+ [0x2F75]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL BAMBOO",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x7AF9 },
+ ["unicodeslot"]=0x2F75, -- â½µ
+ },
+ [0x2F76]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL RICE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x7C73 },
+ ["unicodeslot"]=0x2F76, -- ⽶
+ },
+ [0x2F77]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL SILK",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x7CF8 },
+ ["unicodeslot"]=0x2F77, -- â½·
+ },
+ [0x2F78]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL JAR",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x7F36 },
+ ["unicodeslot"]=0x2F78, -- ⽸
+ },
+ [0x2F79]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL NET",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x7F51 },
+ ["unicodeslot"]=0x2F79, -- â½¹
+ },
+ [0x2F7A]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL SHEEP",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x7F8A },
+ ["unicodeslot"]=0x2F7A, -- ⽺
+ },
+ [0x2F7B]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL FEATHER",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x7FBD },
+ ["unicodeslot"]=0x2F7B, -- â½»
+ },
+ [0x2F7C]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL OLD",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x8001 },
+ ["unicodeslot"]=0x2F7C, -- â½¼
+ },
+ [0x2F7D]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL AND",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x800C },
+ ["unicodeslot"]=0x2F7D, -- â½½
+ },
+ [0x2F7E]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL PLOW",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x8012 },
+ ["unicodeslot"]=0x2F7E, -- â½¾
+ },
+ [0x2F7F]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL EAR",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x8033 },
+ ["unicodeslot"]=0x2F7F, -- ⽿
+ },
+ [0x2F80]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL BRUSH",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x807F },
+ ["unicodeslot"]=0x2F80, -- â¾€
+ },
+ [0x2F81]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL MEAT",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x8089 },
+ ["unicodeslot"]=0x2F81, -- â¾
+ },
+ [0x2F82]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL MINISTER",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x81E3 },
+ ["unicodeslot"]=0x2F82, -- ⾂
+ },
+ [0x2F83]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL SELF",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x81EA },
+ ["unicodeslot"]=0x2F83, -- ⾃
+ },
+ [0x2F84]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL ARRIVE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x81F3 },
+ ["unicodeslot"]=0x2F84, -- ⾄
+ },
+ [0x2F85]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL MORTAR",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x81FC },
+ ["unicodeslot"]=0x2F85, -- â¾…
+ },
+ [0x2F86]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL TONGUE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x820C },
+ ["unicodeslot"]=0x2F86, -- ⾆
+ },
+ [0x2F87]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL OPPOSE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x821B },
+ ["unicodeslot"]=0x2F87, -- ⾇
+ },
+ [0x2F88]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL BOAT",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x821F },
+ ["unicodeslot"]=0x2F88, -- ⾈
+ },
+ [0x2F89]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL STOPPING",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x826E },
+ ["unicodeslot"]=0x2F89, -- ⾉
+ },
+ [0x2F8A]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL COLOR",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x8272 },
+ ["unicodeslot"]=0x2F8A, -- ⾊
+ },
+ [0x2F8B]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL GRASS",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x8278 },
+ ["unicodeslot"]=0x2F8B, -- ⾋
+ },
+ [0x2F8C]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL TIGER",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x864D },
+ ["unicodeslot"]=0x2F8C, -- ⾌
+ },
+ [0x2F8D]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL INSECT",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x866B },
+ ["unicodeslot"]=0x2F8D, -- â¾
+ },
+ [0x2F8E]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL BLOOD",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x8840 },
+ ["unicodeslot"]=0x2F8E, -- ⾎
+ },
+ [0x2F8F]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL WALK ENCLOSURE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x884C },
+ ["unicodeslot"]=0x2F8F, -- â¾
+ },
+ [0x2F90]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL CLOTHES",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x8863 },
+ ["unicodeslot"]=0x2F90, -- â¾
+ },
+ [0x2F91]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL WEST",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x897E },
+ ["unicodeslot"]=0x2F91, -- ⾑
+ },
+ [0x2F92]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL SEE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x898B },
+ ["unicodeslot"]=0x2F92, -- â¾’
+ },
+ [0x2F93]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL HORN",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x89D2 },
+ ["unicodeslot"]=0x2F93, -- ⾓
+ },
+ [0x2F94]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL SPEECH",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x8A00 },
+ ["unicodeslot"]=0x2F94, -- â¾”
+ },
+ [0x2F95]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL VALLEY",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x8C37 },
+ ["unicodeslot"]=0x2F95, -- ⾕
+ },
+ [0x2F96]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL BEAN",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x8C46 },
+ ["unicodeslot"]=0x2F96, -- â¾–
+ },
+ [0x2F97]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL PIG",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x8C55 },
+ ["unicodeslot"]=0x2F97, -- â¾—
+ },
+ [0x2F98]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL BADGER",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x8C78 },
+ ["unicodeslot"]=0x2F98, -- ⾘
+ },
+ [0x2F99]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL SHELL",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x8C9D },
+ ["unicodeslot"]=0x2F99, -- â¾™
+ },
+ [0x2F9A]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL RED",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x8D64 },
+ ["unicodeslot"]=0x2F9A, -- ⾚
+ },
+ [0x2F9B]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL RUN",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x8D70 },
+ ["unicodeslot"]=0x2F9B, -- â¾›
+ },
+ [0x2F9C]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL FOOT",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x8DB3 },
+ ["unicodeslot"]=0x2F9C, -- ⾜
+ },
+ [0x2F9D]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL BODY",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x8EAB },
+ ["unicodeslot"]=0x2F9D, -- â¾
+ },
+ [0x2F9E]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL CART",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x8ECA },
+ ["unicodeslot"]=0x2F9E, -- ⾞
+ },
+ [0x2F9F]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL BITTER",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x8F9B },
+ ["unicodeslot"]=0x2F9F, -- ⾟
+ },
+ [0x2FA0]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL MORNING",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x8FB0 },
+ ["unicodeslot"]=0x2FA0, -- â¾ 
+ },
+ [0x2FA1]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL WALK",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x8FB5 },
+ ["unicodeslot"]=0x2FA1, -- ⾡
+ },
+ [0x2FA2]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL CITY",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x9091 },
+ ["unicodeslot"]=0x2FA2, -- â¾¢
+ },
+ [0x2FA3]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL WINE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x9149 },
+ ["unicodeslot"]=0x2FA3, -- â¾£
+ },
+ [0x2FA4]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL DISTINGUISH",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x91C6 },
+ ["unicodeslot"]=0x2FA4, -- ⾤
+ },
+ [0x2FA5]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL VILLAGE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x91CC },
+ ["unicodeslot"]=0x2FA5, -- â¾¥
+ },
+ [0x2FA6]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL GOLD",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x91D1 },
+ ["unicodeslot"]=0x2FA6, -- ⾦
+ },
+ [0x2FA7]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL LONG",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x9577 },
+ ["unicodeslot"]=0x2FA7, -- ⾧
+ },
+ [0x2FA8]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL GATE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x9580 },
+ ["unicodeslot"]=0x2FA8, -- ⾨
+ },
+ [0x2FA9]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL MOUND",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x961C },
+ ["unicodeslot"]=0x2FA9, -- ⾩
+ },
+ [0x2FAA]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL SLAVE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x96B6 },
+ ["unicodeslot"]=0x2FAA, -- ⾪
+ },
+ [0x2FAB]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL SHORT TAILED BIRD",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x96B9 },
+ ["unicodeslot"]=0x2FAB, -- ⾫
+ },
+ [0x2FAC]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL RAIN",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x96E8 },
+ ["unicodeslot"]=0x2FAC, -- ⾬
+ },
+ [0x2FAD]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL BLUE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x9751 },
+ ["unicodeslot"]=0x2FAD, -- â¾­
+ },
+ [0x2FAE]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL WRONG",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x975E },
+ ["unicodeslot"]=0x2FAE, -- â¾®
+ },
+ [0x2FAF]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL FACE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x9762 },
+ ["unicodeslot"]=0x2FAF, -- ⾯
+ },
+ [0x2FB0]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL LEATHER",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x9769 },
+ ["unicodeslot"]=0x2FB0, -- â¾°
+ },
+ [0x2FB1]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL TANNED LEATHER",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x97CB },
+ ["unicodeslot"]=0x2FB1, -- â¾±
+ },
+ [0x2FB2]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL LEEK",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x97ED },
+ ["unicodeslot"]=0x2FB2, -- â¾²
+ },
+ [0x2FB3]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL SOUND",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x97F3 },
+ ["unicodeslot"]=0x2FB3, -- â¾³
+ },
+ [0x2FB4]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL LEAF",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x9801 },
+ ["unicodeslot"]=0x2FB4, -- â¾´
+ },
+ [0x2FB5]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL WIND",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x98A8 },
+ ["unicodeslot"]=0x2FB5, -- â¾µ
+ },
+ [0x2FB6]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL FLY",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x98DB },
+ ["unicodeslot"]=0x2FB6, -- ⾶
+ },
+ [0x2FB7]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL EAT",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x98DF },
+ ["unicodeslot"]=0x2FB7, -- â¾·
+ },
+ [0x2FB8]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL HEAD",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x9996 },
+ ["unicodeslot"]=0x2FB8, -- ⾸
+ },
+ [0x2FB9]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL FRAGRANT",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x9999 },
+ ["unicodeslot"]=0x2FB9, -- â¾¹
+ },
+ [0x2FBA]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL HORSE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x99AC },
+ ["unicodeslot"]=0x2FBA, -- ⾺
+ },
+ [0x2FBB]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL BONE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x9AA8 },
+ ["unicodeslot"]=0x2FBB, -- â¾»
+ },
+ [0x2FBC]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL TALL",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x9AD8 },
+ ["unicodeslot"]=0x2FBC, -- â¾¼
+ },
+ [0x2FBD]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL HAIR",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x9ADF },
+ ["unicodeslot"]=0x2FBD, -- â¾½
+ },
+ [0x2FBE]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL FIGHT",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x9B25 },
+ ["unicodeslot"]=0x2FBE, -- â¾¾
+ },
+ [0x2FBF]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL SACRIFICIAL WINE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x9B2F },
+ ["unicodeslot"]=0x2FBF, -- ⾿
+ },
+ [0x2FC0]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL CAULDRON",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x9B32 },
+ ["unicodeslot"]=0x2FC0, -- â¿€
+ },
+ [0x2FC1]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL GHOST",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x9B3C },
+ ["unicodeslot"]=0x2FC1, -- â¿
+ },
+ [0x2FC2]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL FISH",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x9B5A },
+ ["unicodeslot"]=0x2FC2, -- â¿‚
+ },
+ [0x2FC3]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL BIRD",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x9CE5 },
+ ["unicodeslot"]=0x2FC3, -- ⿃
+ },
+ [0x2FC4]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL SALT",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x9E75 },
+ ["unicodeslot"]=0x2FC4, -- â¿„
+ },
+ [0x2FC5]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL DEER",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x9E7F },
+ ["unicodeslot"]=0x2FC5, -- â¿…
+ },
+ [0x2FC6]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL WHEAT",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x9EA5 },
+ ["unicodeslot"]=0x2FC6, -- ⿆
+ },
+ [0x2FC7]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL HEMP",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x9EBB },
+ ["unicodeslot"]=0x2FC7, -- ⿇
+ },
+ [0x2FC8]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL YELLOW",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x9EC3 },
+ ["unicodeslot"]=0x2FC8, -- ⿈
+ },
+ [0x2FC9]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL MILLET",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x9ECD },
+ ["unicodeslot"]=0x2FC9, -- ⿉
+ },
+ [0x2FCA]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL BLACK",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x9ED1 },
+ ["unicodeslot"]=0x2FCA, -- â¿Š
+ },
+ [0x2FCB]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL EMBROIDERY",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x9EF9 },
+ ["unicodeslot"]=0x2FCB, -- â¿‹
+ },
+ [0x2FCC]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL FROG",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x9EFD },
+ ["unicodeslot"]=0x2FCC, -- ⿌
+ },
+ [0x2FCD]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL TRIPOD",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x9F0E },
+ ["unicodeslot"]=0x2FCD, -- â¿
+ },
+ [0x2FCE]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL DRUM",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x9F13 },
+ ["unicodeslot"]=0x2FCE, -- â¿Ž
+ },
+ [0x2FCF]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL RAT",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x9F20 },
+ ["unicodeslot"]=0x2FCF, -- â¿
+ },
+ [0x2FD0]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL NOSE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x9F3B },
+ ["unicodeslot"]=0x2FD0, -- â¿
+ },
+ [0x2FD1]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL EVEN",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x9F4A },
+ ["unicodeslot"]=0x2FD1, -- â¿‘
+ },
+ [0x2FD2]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL TOOTH",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x9F52 },
+ ["unicodeslot"]=0x2FD2, -- â¿’
+ },
+ [0x2FD3]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL DRAGON",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x9F8D },
+ ["unicodeslot"]=0x2FD3, -- â¿“
+ },
+ [0x2FD4]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL TURTLE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x9F9C },
+ ["unicodeslot"]=0x2FD4, -- â¿”
+ },
+ [0x2FD5]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KANGXI RADICAL FLUTE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x9FA0 },
+ ["unicodeslot"]=0x2FD5, -- â¿•
+ },
+ [0x2FF0]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2FF0, -- â¿°
+ },
+ [0x2FF1]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOW",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2FF1, -- ⿱
+ },
+ [0x2FF2]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2FF2, -- ⿲
+ },
+ [0x2FF3]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO MIDDLE AND BELOW",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2FF3, -- ⿳
+ },
+ [0x2FF4]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2FF4, -- â¿´
+ },
+ [0x2FF5]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM ABOVE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2FF5, -- ⿵
+ },
+ [0x2FF6]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM BELOW",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2FF6, -- ⿶
+ },
+ [0x2FF7]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LEFT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2FF7, -- â¿·
+ },
+ [0x2FF8]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER LEFT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2FF8, -- ⿸
+ },
+ [0x2FF9]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER RIGHT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2FF9, -- ⿹
+ },
+ [0x2FFA]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER LEFT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2FFA, -- ⿺
+ },
+ [0x2FFB]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2FFB, -- â¿»
+ },
+ [0x3000]={
+ ["category"]="zs",
+ ["cjkwd"]="f",
+ ["description"]="IDEOGRAPHIC SPACE",
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x0020 },
+ ["unicodeslot"]=0x3000, --  
+ },
+ [0x3001]={
+ ["category"]="po",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC COMMA",
+ ["linebreak"]="cl",
+ ["unicodeslot"]=0x3001, -- ã€
+ },
+ [0x3002]={
+ ["category"]="po",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC FULL STOP",
+ ["linebreak"]="cl",
+ ["unicodeslot"]=0x3002, -- 。
+ },
+ [0x3003]={
+ ["category"]="po",
+ ["cjkwd"]="w",
+ ["description"]="DITTO MARK",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3003, -- 〃
+ },
+ [0x3004]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="JAPANESE INDUSTRIAL STANDARD SYMBOL",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3004, -- 〄
+ },
+ [0x3005]={
+ ["category"]="lm",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC ITERATION MARK",
+ ["linebreak"]="ns",
+ ["unicodeslot"]=0x3005, -- 々
+ },
+ [0x3006]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC CLOSING MARK",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3006, -- 〆
+ },
+ [0x3007]={
+ ["category"]="nl",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC NUMBER ZERO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3007, -- 〇
+ },
+ [0x3008]={
+ ["category"]="ps",
+ ["cjkwd"]="w",
+ ["description"]="LEFT ANGLE BRACKET",
+ ["linebreak"]="op",
+ ["unicodeslot"]=0x3008, -- 〈
+ },
+ [0x3009]={
+ ["category"]="pe",
+ ["cjkwd"]="w",
+ ["description"]="RIGHT ANGLE BRACKET",
+ ["linebreak"]="cl",
+ ["unicodeslot"]=0x3009, -- 〉
+ },
+ [0x300A]={
+ ["category"]="ps",
+ ["cjkwd"]="w",
+ ["description"]="LEFT DOUBLE ANGLE BRACKET",
+ ["linebreak"]="op",
+ ["unicodeslot"]=0x300A, -- 《
+ },
+ [0x300B]={
+ ["category"]="pe",
+ ["cjkwd"]="w",
+ ["description"]="RIGHT DOUBLE ANGLE BRACKET",
+ ["linebreak"]="cl",
+ ["unicodeslot"]=0x300B, -- 》
+ },
+ [0x300C]={
+ ["category"]="ps",
+ ["cjkwd"]="w",
+ ["description"]="LEFT CORNER BRACKET",
+ ["linebreak"]="op",
+ ["unicodeslot"]=0x300C, -- 「
+ },
+ [0x300D]={
+ ["category"]="pe",
+ ["cjkwd"]="w",
+ ["description"]="RIGHT CORNER BRACKET",
+ ["linebreak"]="cl",
+ ["unicodeslot"]=0x300D, -- ã€
+ },
+ [0x300E]={
+ ["category"]="ps",
+ ["cjkwd"]="w",
+ ["description"]="LEFT WHITE CORNER BRACKET",
+ ["linebreak"]="op",
+ ["unicodeslot"]=0x300E, -- 『
+ },
+ [0x300F]={
+ ["category"]="pe",
+ ["cjkwd"]="w",
+ ["description"]="RIGHT WHITE CORNER BRACKET",
+ ["linebreak"]="cl",
+ ["unicodeslot"]=0x300F, -- ã€
+ },
+ [0x3010]={
+ ["category"]="ps",
+ ["cjkwd"]="w",
+ ["description"]="LEFT BLACK LENTICULAR BRACKET",
+ ["linebreak"]="op",
+ ["unicodeslot"]=0x3010, -- ã€
+ },
+ [0x3011]={
+ ["category"]="pe",
+ ["cjkwd"]="w",
+ ["description"]="RIGHT BLACK LENTICULAR BRACKET",
+ ["linebreak"]="cl",
+ ["unicodeslot"]=0x3011, -- 】
+ },
+ [0x3012]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="POSTAL MARK",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3012, -- 〒
+ },
+ [0x3013]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="GETA MARK",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3013, -- 〓
+ },
+ [0x3014]={
+ ["category"]="ps",
+ ["cjkwd"]="w",
+ ["description"]="LEFT TORTOISE SHELL BRACKET",
+ ["linebreak"]="op",
+ ["unicodeslot"]=0x3014, -- 〔
+ },
+ [0x3015]={
+ ["category"]="pe",
+ ["cjkwd"]="w",
+ ["description"]="RIGHT TORTOISE SHELL BRACKET",
+ ["linebreak"]="cl",
+ ["unicodeslot"]=0x3015, -- 〕
+ },
+ [0x3016]={
+ ["category"]="ps",
+ ["cjkwd"]="w",
+ ["description"]="LEFT WHITE LENTICULAR BRACKET",
+ ["linebreak"]="op",
+ ["unicodeslot"]=0x3016, -- 〖
+ },
+ [0x3017]={
+ ["category"]="pe",
+ ["cjkwd"]="w",
+ ["description"]="RIGHT WHITE LENTICULAR BRACKET",
+ ["linebreak"]="cl",
+ ["unicodeslot"]=0x3017, -- 〗
+ },
+ [0x3018]={
+ ["category"]="ps",
+ ["cjkwd"]="w",
+ ["description"]="LEFT WHITE TORTOISE SHELL BRACKET",
+ ["linebreak"]="op",
+ ["unicodeslot"]=0x3018, -- 〘
+ },
+ [0x3019]={
+ ["category"]="pe",
+ ["cjkwd"]="w",
+ ["description"]="RIGHT WHITE TORTOISE SHELL BRACKET",
+ ["linebreak"]="cl",
+ ["unicodeslot"]=0x3019, -- 〙
+ },
+ [0x301A]={
+ ["category"]="ps",
+ ["cjkwd"]="w",
+ ["description"]="LEFT WHITE SQUARE BRACKET",
+ ["linebreak"]="op",
+ ["unicodeslot"]=0x301A, -- 〚
+ },
+ [0x301B]={
+ ["category"]="pe",
+ ["cjkwd"]="w",
+ ["description"]="RIGHT WHITE SQUARE BRACKET",
+ ["linebreak"]="cl",
+ ["unicodeslot"]=0x301B, -- 〛
+ },
+ [0x301C]={
+ ["category"]="pd",
+ ["cjkwd"]="w",
+ ["description"]="WAVE DASH",
+ ["linebreak"]="ns",
+ ["unicodeslot"]=0x301C, -- 〜
+ },
+ [0x301D]={
+ ["category"]="ps",
+ ["cjkwd"]="w",
+ ["description"]="REVERSED DOUBLE PRIME QUOTATION MARK",
+ ["linebreak"]="op",
+ ["unicodeslot"]=0x301D, -- ã€
+ },
+ [0x301E]={
+ ["category"]="pe",
+ ["cjkwd"]="w",
+ ["description"]="DOUBLE PRIME QUOTATION MARK",
+ ["linebreak"]="cl",
+ ["unicodeslot"]=0x301E, -- 〞
+ },
+ [0x301F]={
+ ["category"]="pe",
+ ["cjkwd"]="w",
+ ["description"]="LOW DOUBLE PRIME QUOTATION MARK",
+ ["linebreak"]="cl",
+ ["unicodeslot"]=0x301F, -- 〟
+ },
+ [0x3020]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="POSTAL MARK FACE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3020, -- 〠
+ },
+ [0x3021]={
+ ["category"]="nl",
+ ["cjkwd"]="w",
+ ["description"]="HANGZHOU NUMERAL ONE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3021, -- 〡
+ },
+ [0x3022]={
+ ["category"]="nl",
+ ["cjkwd"]="w",
+ ["description"]="HANGZHOU NUMERAL TWO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3022, -- 〢
+ },
+ [0x3023]={
+ ["category"]="nl",
+ ["cjkwd"]="w",
+ ["description"]="HANGZHOU NUMERAL THREE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3023, -- 〣
+ },
+ [0x3024]={
+ ["category"]="nl",
+ ["cjkwd"]="w",
+ ["description"]="HANGZHOU NUMERAL FOUR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3024, -- 〤
+ },
+ [0x3025]={
+ ["category"]="nl",
+ ["cjkwd"]="w",
+ ["description"]="HANGZHOU NUMERAL FIVE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3025, -- 〥
+ },
+ [0x3026]={
+ ["category"]="nl",
+ ["cjkwd"]="w",
+ ["description"]="HANGZHOU NUMERAL SIX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3026, -- 〦
+ },
+ [0x3027]={
+ ["category"]="nl",
+ ["cjkwd"]="w",
+ ["description"]="HANGZHOU NUMERAL SEVEN",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3027, -- 〧
+ },
+ [0x3028]={
+ ["category"]="nl",
+ ["cjkwd"]="w",
+ ["description"]="HANGZHOU NUMERAL EIGHT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3028, -- 〨
+ },
+ [0x3029]={
+ ["category"]="nl",
+ ["cjkwd"]="w",
+ ["description"]="HANGZHOU NUMERAL NINE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3029, -- 〩
+ },
+ [0x302A]={
+ ["category"]="mn",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC LEVEL TONE MARK",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x302A, -- 〪
+ },
+ [0x302B]={
+ ["category"]="mn",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC RISING TONE MARK",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x302B, -- 〫
+ },
+ [0x302C]={
+ ["category"]="mn",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC DEPARTING TONE MARK",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x302C, -- 〬
+ },
+ [0x302D]={
+ ["category"]="mn",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC ENTERING TONE MARK",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x302D, -- 〭
+ },
+ [0x302E]={
+ ["category"]="mn",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL SINGLE DOT TONE MARK",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x302E, -- 〮
+ },
+ [0x302F]={
+ ["category"]="mn",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL DOUBLE DOT TONE MARK",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x302F, -- 〯
+ },
+ [0x3030]={
+ ["category"]="pd",
+ ["cjkwd"]="w",
+ ["description"]="WAVY DASH",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3030, -- 〰
+ },
+ [0x3031]={
+ ["category"]="lm",
+ ["cjkwd"]="w",
+ ["description"]="VERTICAL KANA REPEAT MARK",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3031, -- 〱
+ },
+ [0x3032]={
+ ["category"]="lm",
+ ["cjkwd"]="w",
+ ["description"]="VERTICAL KANA REPEAT WITH VOICED SOUND MARK",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3032, -- 〲
+ },
+ [0x3033]={
+ ["category"]="lm",
+ ["cjkwd"]="w",
+ ["description"]="VERTICAL KANA REPEAT MARK UPPER HALF",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3033, -- 〳
+ },
+ [0x3034]={
+ ["category"]="lm",
+ ["cjkwd"]="w",
+ ["description"]="VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3034, -- 〴
+ },
+ [0x3035]={
+ ["category"]="lm",
+ ["cjkwd"]="w",
+ ["description"]="VERTICAL KANA REPEAT MARK LOWER HALF",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3035, -- 〵
+ },
+ [0x3036]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED POSTAL MARK",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x3012 },
+ ["unicodeslot"]=0x3036, -- 〶
+ },
+ [0x3037]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3037, -- 〷
+ },
+ [0x3038]={
+ ["category"]="nl",
+ ["cjkwd"]="w",
+ ["description"]="HANGZHOU NUMERAL TEN",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x5341 },
+ ["unicodeslot"]=0x3038, -- 〸
+ },
+ [0x3039]={
+ ["category"]="nl",
+ ["cjkwd"]="w",
+ ["description"]="HANGZHOU NUMERAL TWENTY",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x5344 },
+ ["unicodeslot"]=0x3039, -- 〹
+ },
+ [0x303A]={
+ ["category"]="nl",
+ ["cjkwd"]="w",
+ ["description"]="HANGZHOU NUMERAL THIRTY",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x5345 },
+ ["unicodeslot"]=0x303A, -- 〺
+ },
+ [0x303B]={
+ ["category"]="lm",
+ ["cjkwd"]="w",
+ ["description"]="VERTICAL IDEOGRAPHIC ITERATION MARK",
+ ["linebreak"]="ns",
+ ["unicodeslot"]=0x303B, -- 〻
+ },
+ [0x303C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="MASU MARK",
+ ["linebreak"]="ns",
+ ["unicodeslot"]=0x303C, -- 〼
+ },
+ [0x303D]={
+ ["category"]="po",
+ ["cjkwd"]="w",
+ ["description"]="PART ALTERNATION MARK",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x303D, -- 〽
+ },
+ [0x303E]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC VARIATION INDICATOR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x303E, -- 〾
+ },
+ [0x303F]={
+ ["category"]="so",
+ ["description"]="IDEOGRAPHIC HALF FILL SPACE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x303F, -- 〿
+ },
+ [0x3041]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER SMALL A",
+ ["linebreak"]="ns",
+ ["unicodeslot"]=0x3041, -- ã
+ },
+ [0x3042]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER A",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3042, -- ã‚
+ },
+ [0x3043]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER SMALL I",
+ ["linebreak"]="ns",
+ ["unicodeslot"]=0x3043, -- ãƒ
+ },
+ [0x3044]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER I",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3044, -- ã„
+ },
+ [0x3045]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER SMALL U",
+ ["linebreak"]="ns",
+ ["unicodeslot"]=0x3045, -- ã…
+ },
+ [0x3046]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER U",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3046, -- ã†
+ },
+ [0x3047]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER SMALL E",
+ ["linebreak"]="ns",
+ ["unicodeslot"]=0x3047, -- ã‡
+ },
+ [0x3048]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER E",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3048, -- ãˆ
+ },
+ [0x3049]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER SMALL O",
+ ["linebreak"]="ns",
+ ["unicodeslot"]=0x3049, -- ã‰
+ },
+ [0x304A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER O",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x304A, -- ãŠ
+ },
+ [0x304B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER KA",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x304B, -- ã‹
+ },
+ [0x304C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER GA",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x304B, 0x3099 },
+ ["unicodeslot"]=0x304C, -- ãŒ
+ },
+ [0x304D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER KI",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x304D, -- ã
+ },
+ [0x304E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER GI",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x304D, 0x3099 },
+ ["unicodeslot"]=0x304E, -- ãŽ
+ },
+ [0x304F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER KU",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x304F, -- ã
+ },
+ [0x3050]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER GU",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x304F, 0x3099 },
+ ["unicodeslot"]=0x3050, -- ã
+ },
+ [0x3051]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER KE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3051, -- ã‘
+ },
+ [0x3052]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER GE",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x3051, 0x3099 },
+ ["unicodeslot"]=0x3052, -- ã’
+ },
+ [0x3053]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER KO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3053, -- ã“
+ },
+ [0x3054]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER GO",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x3053, 0x3099 },
+ ["unicodeslot"]=0x3054, -- ã”
+ },
+ [0x3055]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER SA",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3055, -- ã•
+ },
+ [0x3056]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER ZA",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x3055, 0x3099 },
+ ["unicodeslot"]=0x3056, -- ã–
+ },
+ [0x3057]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER SI",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3057, -- ã—
+ },
+ [0x3058]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER ZI",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x3057, 0x3099 },
+ ["unicodeslot"]=0x3058, -- ã˜
+ },
+ [0x3059]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER SU",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3059, -- ã™
+ },
+ [0x305A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER ZU",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x3059, 0x3099 },
+ ["unicodeslot"]=0x305A, -- ãš
+ },
+ [0x305B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER SE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x305B, -- ã›
+ },
+ [0x305C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER ZE",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x305B, 0x3099 },
+ ["unicodeslot"]=0x305C, -- ãœ
+ },
+ [0x305D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER SO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x305D, -- ã
+ },
+ [0x305E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER ZO",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x305D, 0x3099 },
+ ["unicodeslot"]=0x305E, -- ãž
+ },
+ [0x305F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER TA",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x305F, -- ãŸ
+ },
+ [0x3060]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER DA",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x305F, 0x3099 },
+ ["unicodeslot"]=0x3060, -- ã 
+ },
+ [0x3061]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER TI",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3061, -- ã¡
+ },
+ [0x3062]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER DI",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x3061, 0x3099 },
+ ["unicodeslot"]=0x3062, -- ã¢
+ },
+ [0x3063]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER SMALL TU",
+ ["linebreak"]="ns",
+ ["unicodeslot"]=0x3063, -- ã£
+ },
+ [0x3064]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER TU",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3064, -- ã¤
+ },
+ [0x3065]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER DU",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x3064, 0x3099 },
+ ["unicodeslot"]=0x3065, -- ã¥
+ },
+ [0x3066]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER TE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3066, -- ã¦
+ },
+ [0x3067]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER DE",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x3066, 0x3099 },
+ ["unicodeslot"]=0x3067, -- ã§
+ },
+ [0x3068]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER TO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3068, -- ã¨
+ },
+ [0x3069]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER DO",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x3068, 0x3099 },
+ ["unicodeslot"]=0x3069, -- ã©
+ },
+ [0x306A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER NA",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x306A, -- ãª
+ },
+ [0x306B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER NI",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x306B, -- ã«
+ },
+ [0x306C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER NU",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x306C, -- ã¬
+ },
+ [0x306D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER NE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x306D, -- ã­
+ },
+ [0x306E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER NO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x306E, -- ã®
+ },
+ [0x306F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER HA",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x306F, -- ã¯
+ },
+ [0x3070]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER BA",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x306F, 0x3099 },
+ ["unicodeslot"]=0x3070, -- ã°
+ },
+ [0x3071]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER PA",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x306F, 0x309A },
+ ["unicodeslot"]=0x3071, -- ã±
+ },
+ [0x3072]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER HI",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3072, -- ã²
+ },
+ [0x3073]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER BI",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x3072, 0x3099 },
+ ["unicodeslot"]=0x3073, -- ã³
+ },
+ [0x3074]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER PI",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x3072, 0x309A },
+ ["unicodeslot"]=0x3074, -- ã´
+ },
+ [0x3075]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER HU",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3075, -- ãµ
+ },
+ [0x3076]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER BU",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x3075, 0x3099 },
+ ["unicodeslot"]=0x3076, -- ã¶
+ },
+ [0x3077]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER PU",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x3075, 0x309A },
+ ["unicodeslot"]=0x3077, -- ã·
+ },
+ [0x3078]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER HE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3078, -- ã¸
+ },
+ [0x3079]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER BE",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x3078, 0x3099 },
+ ["unicodeslot"]=0x3079, -- ã¹
+ },
+ [0x307A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER PE",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x3078, 0x309A },
+ ["unicodeslot"]=0x307A, -- ãº
+ },
+ [0x307B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER HO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x307B, -- ã»
+ },
+ [0x307C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER BO",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x307B, 0x3099 },
+ ["unicodeslot"]=0x307C, -- ã¼
+ },
+ [0x307D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER PO",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x307B, 0x309A },
+ ["unicodeslot"]=0x307D, -- ã½
+ },
+ [0x307E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER MA",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x307E, -- ã¾
+ },
+ [0x307F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER MI",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x307F, -- ã¿
+ },
+ [0x3080]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER MU",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3080, -- ã‚€
+ },
+ [0x3081]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER ME",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3081, -- ã‚
+ },
+ [0x3082]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER MO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3082, -- ã‚‚
+ },
+ [0x3083]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER SMALL YA",
+ ["linebreak"]="ns",
+ ["unicodeslot"]=0x3083, -- ゃ
+ },
+ [0x3084]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER YA",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3084, -- ã‚„
+ },
+ [0x3085]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER SMALL YU",
+ ["linebreak"]="ns",
+ ["unicodeslot"]=0x3085, -- ã‚…
+ },
+ [0x3086]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER YU",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3086, -- ゆ
+ },
+ [0x3087]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER SMALL YO",
+ ["linebreak"]="ns",
+ ["unicodeslot"]=0x3087, -- ょ
+ },
+ [0x3088]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER YO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3088, -- よ
+ },
+ [0x3089]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER RA",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3089, -- ら
+ },
+ [0x308A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER RI",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x308A, -- ã‚Š
+ },
+ [0x308B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER RU",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x308B, -- ã‚‹
+ },
+ [0x308C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER RE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x308C, -- れ
+ },
+ [0x308D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER RO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x308D, -- ã‚
+ },
+ [0x308E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER SMALL WA",
+ ["linebreak"]="ns",
+ ["unicodeslot"]=0x308E, -- ã‚Ž
+ },
+ [0x308F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER WA",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x308F, -- ã‚
+ },
+ [0x3090]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER WI",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3090, -- ã‚
+ },
+ [0x3091]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER WE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3091, -- ã‚‘
+ },
+ [0x3092]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER WO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3092, -- ã‚’
+ },
+ [0x3093]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER N",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3093, -- ã‚“
+ },
+ [0x3094]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER VU",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x3046, 0x3099 },
+ ["unicodeslot"]=0x3094, -- ã‚”
+ },
+ [0x3095]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER SMALL KA",
+ ["linebreak"]="ns",
+ ["unicodeslot"]=0x3095, -- ã‚•
+ },
+ [0x3096]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA LETTER SMALL KE",
+ ["linebreak"]="ns",
+ ["unicodeslot"]=0x3096, -- ã‚–
+ },
+ [0x3099]={
+ ["category"]="mn",
+ ["cjkwd"]="w",
+ ["description"]="COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x3099, -- ã‚™
+ },
+ [0x309A]={
+ ["category"]="mn",
+ ["cjkwd"]="w",
+ ["description"]="COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x309A, -- ã‚š
+ },
+ [0x309B]={
+ ["category"]="sk",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA-HIRAGANA VOICED SOUND MARK",
+ ["linebreak"]="ns",
+ ["specials"]={ "compat", 0x0020, 0x3099 },
+ ["unicodeslot"]=0x309B, -- ã‚›
+ },
+ [0x309C]={
+ ["category"]="sk",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK",
+ ["linebreak"]="ns",
+ ["specials"]={ "compat", 0x0020, 0x309A },
+ ["unicodeslot"]=0x309C, -- ゜
+ },
+ [0x309D]={
+ ["category"]="lm",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA ITERATION MARK",
+ ["linebreak"]="ns",
+ ["unicodeslot"]=0x309D, -- ã‚
+ },
+ [0x309E]={
+ ["category"]="lm",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA VOICED ITERATION MARK",
+ ["linebreak"]="ns",
+ ["specials"]={ "char", 0x309D, 0x3099 },
+ ["unicodeslot"]=0x309E, -- ã‚ž
+ },
+ [0x309F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HIRAGANA DIGRAPH YORI",
+ ["linebreak"]="id",
+ ["specials"]={ "vertical", 0x3088, 0x308A },
+ ["unicodeslot"]=0x309F, -- ã‚Ÿ
+ },
+ [0x30A0]={
+ ["category"]="pd",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA-HIRAGANA DOUBLE HYPHEN",
+ ["linebreak"]="ns",
+ ["unicodeslot"]=0x30A0, -- ã‚ 
+ },
+ [0x30A1]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER SMALL A",
+ ["linebreak"]="ns",
+ ["unicodeslot"]=0x30A1, -- ã‚¡
+ },
+ [0x30A2]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER A",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x30A2, -- ã‚¢
+ },
+ [0x30A3]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER SMALL I",
+ ["linebreak"]="ns",
+ ["unicodeslot"]=0x30A3, -- ã‚£
+ },
+ [0x30A4]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER I",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x30A4, -- イ
+ },
+ [0x30A5]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER SMALL U",
+ ["linebreak"]="ns",
+ ["unicodeslot"]=0x30A5, -- ã‚¥
+ },
+ [0x30A6]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER U",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x30A6, -- ウ
+ },
+ [0x30A7]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER SMALL E",
+ ["linebreak"]="ns",
+ ["unicodeslot"]=0x30A7, -- ェ
+ },
+ [0x30A8]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER E",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x30A8, -- エ
+ },
+ [0x30A9]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER SMALL O",
+ ["linebreak"]="ns",
+ ["unicodeslot"]=0x30A9, -- ã‚©
+ },
+ [0x30AA]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER O",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x30AA, -- オ
+ },
+ [0x30AB]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER KA",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x30AB, -- ã‚«
+ },
+ [0x30AC]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER GA",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x30AB, 0x3099 },
+ ["unicodeslot"]=0x30AC, -- ガ
+ },
+ [0x30AD]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER KI",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x30AD, -- ã‚­
+ },
+ [0x30AE]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER GI",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x30AD, 0x3099 },
+ ["unicodeslot"]=0x30AE, -- ã‚®
+ },
+ [0x30AF]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER KU",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x30AF, -- ク
+ },
+ [0x30B0]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER GU",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x30AF, 0x3099 },
+ ["unicodeslot"]=0x30B0, -- ã‚°
+ },
+ [0x30B1]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER KE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x30B1, -- ケ
+ },
+ [0x30B2]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER GE",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x30B1, 0x3099 },
+ ["unicodeslot"]=0x30B2, -- ゲ
+ },
+ [0x30B3]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER KO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x30B3, -- コ
+ },
+ [0x30B4]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER GO",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x30B3, 0x3099 },
+ ["unicodeslot"]=0x30B4, -- ã‚´
+ },
+ [0x30B5]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER SA",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x30B5, -- サ
+ },
+ [0x30B6]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER ZA",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x30B5, 0x3099 },
+ ["unicodeslot"]=0x30B6, -- ザ
+ },
+ [0x30B7]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER SI",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x30B7, -- ã‚·
+ },
+ [0x30B8]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER ZI",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x30B7, 0x3099 },
+ ["unicodeslot"]=0x30B8, -- ジ
+ },
+ [0x30B9]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER SU",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x30B9, -- ス
+ },
+ [0x30BA]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER ZU",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x30B9, 0x3099 },
+ ["unicodeslot"]=0x30BA, -- ズ
+ },
+ [0x30BB]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER SE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x30BB, -- ã‚»
+ },
+ [0x30BC]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER ZE",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x30BB, 0x3099 },
+ ["unicodeslot"]=0x30BC, -- ゼ
+ },
+ [0x30BD]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER SO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x30BD, -- ソ
+ },
+ [0x30BE]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER ZO",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x30BD, 0x3099 },
+ ["unicodeslot"]=0x30BE, -- ゾ
+ },
+ [0x30BF]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER TA",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x30BF, -- ã‚¿
+ },
+ [0x30C0]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER DA",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x30BF, 0x3099 },
+ ["unicodeslot"]=0x30C0, -- ダ
+ },
+ [0x30C1]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER TI",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x30C1, -- ãƒ
+ },
+ [0x30C2]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER DI",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x30C1, 0x3099 },
+ ["unicodeslot"]=0x30C2, -- ヂ
+ },
+ [0x30C3]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER SMALL TU",
+ ["linebreak"]="ns",
+ ["unicodeslot"]=0x30C3, -- ッ
+ },
+ [0x30C4]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER TU",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x30C4, -- ツ
+ },
+ [0x30C5]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER DU",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x30C4, 0x3099 },
+ ["unicodeslot"]=0x30C5, -- ヅ
+ },
+ [0x30C6]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER TE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x30C6, -- テ
+ },
+ [0x30C7]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER DE",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x30C6, 0x3099 },
+ ["unicodeslot"]=0x30C7, -- デ
+ },
+ [0x30C8]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER TO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x30C8, -- ト
+ },
+ [0x30C9]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER DO",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x30C8, 0x3099 },
+ ["unicodeslot"]=0x30C9, -- ド
+ },
+ [0x30CA]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER NA",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x30CA, -- ナ
+ },
+ [0x30CB]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER NI",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x30CB, -- ニ
+ },
+ [0x30CC]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER NU",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x30CC, -- ヌ
+ },
+ [0x30CD]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER NE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x30CD, -- ãƒ
+ },
+ [0x30CE]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER NO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x30CE, -- ノ
+ },
+ [0x30CF]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER HA",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x30CF, -- ãƒ
+ },
+ [0x30D0]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER BA",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x30CF, 0x3099 },
+ ["unicodeslot"]=0x30D0, -- ãƒ
+ },
+ [0x30D1]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER PA",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x30CF, 0x309A },
+ ["unicodeslot"]=0x30D1, -- パ
+ },
+ [0x30D2]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER HI",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x30D2, -- ヒ
+ },
+ [0x30D3]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER BI",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x30D2, 0x3099 },
+ ["unicodeslot"]=0x30D3, -- ビ
+ },
+ [0x30D4]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER PI",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x30D2, 0x309A },
+ ["unicodeslot"]=0x30D4, -- ピ
+ },
+ [0x30D5]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER HU",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x30D5, -- フ
+ },
+ [0x30D6]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER BU",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x30D5, 0x3099 },
+ ["unicodeslot"]=0x30D6, -- ブ
+ },
+ [0x30D7]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER PU",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x30D5, 0x309A },
+ ["unicodeslot"]=0x30D7, -- プ
+ },
+ [0x30D8]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER HE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x30D8, -- ヘ
+ },
+ [0x30D9]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER BE",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x30D8, 0x3099 },
+ ["unicodeslot"]=0x30D9, -- ベ
+ },
+ [0x30DA]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER PE",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x30D8, 0x309A },
+ ["unicodeslot"]=0x30DA, -- ペ
+ },
+ [0x30DB]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER HO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x30DB, -- ホ
+ },
+ [0x30DC]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER BO",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x30DB, 0x3099 },
+ ["unicodeslot"]=0x30DC, -- ボ
+ },
+ [0x30DD]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER PO",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x30DB, 0x309A },
+ ["unicodeslot"]=0x30DD, -- ãƒ
+ },
+ [0x30DE]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER MA",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x30DE, -- マ
+ },
+ [0x30DF]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER MI",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x30DF, -- ミ
+ },
+ [0x30E0]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER MU",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x30E0, -- ム
+ },
+ [0x30E1]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER ME",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x30E1, -- メ
+ },
+ [0x30E2]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER MO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x30E2, -- モ
+ },
+ [0x30E3]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER SMALL YA",
+ ["linebreak"]="ns",
+ ["unicodeslot"]=0x30E3, -- ャ
+ },
+ [0x30E4]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER YA",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x30E4, -- ヤ
+ },
+ [0x30E5]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER SMALL YU",
+ ["linebreak"]="ns",
+ ["unicodeslot"]=0x30E5, -- ュ
+ },
+ [0x30E6]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER YU",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x30E6, -- ユ
+ },
+ [0x30E7]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER SMALL YO",
+ ["linebreak"]="ns",
+ ["unicodeslot"]=0x30E7, -- ョ
+ },
+ [0x30E8]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER YO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x30E8, -- ヨ
+ },
+ [0x30E9]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER RA",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x30E9, -- ラ
+ },
+ [0x30EA]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER RI",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x30EA, -- リ
+ },
+ [0x30EB]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER RU",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x30EB, -- ル
+ },
+ [0x30EC]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER RE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x30EC, -- レ
+ },
+ [0x30ED]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER RO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x30ED, -- ロ
+ },
+ [0x30EE]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER SMALL WA",
+ ["linebreak"]="ns",
+ ["unicodeslot"]=0x30EE, -- ヮ
+ },
+ [0x30EF]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER WA",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x30EF, -- ワ
+ },
+ [0x30F0]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER WI",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x30F0, -- ヰ
+ },
+ [0x30F1]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER WE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x30F1, -- ヱ
+ },
+ [0x30F2]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER WO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x30F2, -- ヲ
+ },
+ [0x30F3]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER N",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x30F3, -- ン
+ },
+ [0x30F4]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER VU",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x30A6, 0x3099 },
+ ["unicodeslot"]=0x30F4, -- ヴ
+ },
+ [0x30F5]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER SMALL KA",
+ ["linebreak"]="ns",
+ ["unicodeslot"]=0x30F5, -- ヵ
+ },
+ [0x30F6]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER SMALL KE",
+ ["linebreak"]="ns",
+ ["unicodeslot"]=0x30F6, -- ヶ
+ },
+ [0x30F7]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER VA",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x30EF, 0x3099 },
+ ["unicodeslot"]=0x30F7, -- ヷ
+ },
+ [0x30F8]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER VI",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x30F0, 0x3099 },
+ ["unicodeslot"]=0x30F8, -- ヸ
+ },
+ [0x30F9]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER VE",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x30F1, 0x3099 },
+ ["unicodeslot"]=0x30F9, -- ヹ
+ },
+ [0x30FA]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER VO",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x30F2, 0x3099 },
+ ["unicodeslot"]=0x30FA, -- ヺ
+ },
+ [0x30FB]={
+ ["category"]="po",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA MIDDLE DOT",
+ ["linebreak"]="ns",
+ ["unicodeslot"]=0x30FB, -- ・
+ },
+ [0x30FC]={
+ ["category"]="lm",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA-HIRAGANA PROLONGED SOUND MARK",
+ ["linebreak"]="ns",
+ ["unicodeslot"]=0x30FC, -- ー
+ },
+ [0x30FD]={
+ ["category"]="lm",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA ITERATION MARK",
+ ["linebreak"]="ns",
+ ["unicodeslot"]=0x30FD, -- ヽ
+ },
+ [0x30FE]={
+ ["category"]="lm",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA VOICED ITERATION MARK",
+ ["linebreak"]="ns",
+ ["specials"]={ "char", 0x30FD, 0x3099 },
+ ["unicodeslot"]=0x30FE, -- ヾ
+ },
+ [0x30FF]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA DIGRAPH KOTO",
+ ["linebreak"]="id",
+ ["specials"]={ "vertical", 0x30B3, 0x30C8 },
+ ["unicodeslot"]=0x30FF, -- ヿ
+ },
+ [0x3105]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO LETTER B",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3105, -- ã„…
+ },
+ [0x3106]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO LETTER P",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3106, -- ㄆ
+ },
+ [0x3107]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO LETTER M",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3107, -- ㄇ
+ },
+ [0x3108]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO LETTER F",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3108, -- ㄈ
+ },
+ [0x3109]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO LETTER D",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3109, -- ㄉ
+ },
+ [0x310A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO LETTER T",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x310A, -- ã„Š
+ },
+ [0x310B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO LETTER N",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x310B, -- ã„‹
+ },
+ [0x310C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO LETTER L",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x310C, -- ㄌ
+ },
+ [0x310D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO LETTER G",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x310D, -- ã„
+ },
+ [0x310E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO LETTER K",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x310E, -- ã„Ž
+ },
+ [0x310F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO LETTER H",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x310F, -- ã„
+ },
+ [0x3110]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO LETTER J",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3110, -- ã„
+ },
+ [0x3111]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO LETTER Q",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3111, -- ã„‘
+ },
+ [0x3112]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO LETTER X",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3112, -- ã„’
+ },
+ [0x3113]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO LETTER ZH",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3113, -- ã„“
+ },
+ [0x3114]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO LETTER CH",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3114, -- ã„”
+ },
+ [0x3115]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO LETTER SH",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3115, -- ã„•
+ },
+ [0x3116]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO LETTER R",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3116, -- ã„–
+ },
+ [0x3117]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO LETTER Z",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3117, -- ã„—
+ },
+ [0x3118]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO LETTER C",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3118, -- ㄘ
+ },
+ [0x3119]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO LETTER S",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3119, -- ã„™
+ },
+ [0x311A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO LETTER A",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x311A, -- ã„š
+ },
+ [0x311B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO LETTER O",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x311B, -- ã„›
+ },
+ [0x311C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO LETTER E",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x311C, -- ㄜ
+ },
+ [0x311D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO LETTER EH",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x311D, -- ã„
+ },
+ [0x311E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO LETTER AI",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x311E, -- ã„ž
+ },
+ [0x311F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO LETTER EI",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x311F, -- ã„Ÿ
+ },
+ [0x3120]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO LETTER AU",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3120, -- ã„ 
+ },
+ [0x3121]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO LETTER OU",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3121, -- ã„¡
+ },
+ [0x3122]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO LETTER AN",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3122, -- ã„¢
+ },
+ [0x3123]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO LETTER EN",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3123, -- ã„£
+ },
+ [0x3124]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO LETTER ANG",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3124, -- ㄤ
+ },
+ [0x3125]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO LETTER ENG",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3125, -- ã„¥
+ },
+ [0x3126]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO LETTER ER",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3126, -- ㄦ
+ },
+ [0x3127]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO LETTER I",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3127, -- ㄧ
+ },
+ [0x3128]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO LETTER U",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3128, -- ㄨ
+ },
+ [0x3129]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO LETTER IU",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3129, -- ã„©
+ },
+ [0x312A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO LETTER V",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x312A, -- ㄪ
+ },
+ [0x312B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO LETTER NG",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x312B, -- ã„«
+ },
+ [0x312C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO LETTER GN",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x312C, -- ㄬ
+ },
+ [0x3131]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER KIYEOK",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x1100 },
+ ["unicodeslot"]=0x3131, -- ㄱ
+ },
+ [0x3132]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER SSANGKIYEOK",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x1101 },
+ ["unicodeslot"]=0x3132, -- ㄲ
+ },
+ [0x3133]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER KIYEOK-SIOS",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x11AA },
+ ["unicodeslot"]=0x3133, -- ㄳ
+ },
+ [0x3134]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER NIEUN",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x1102 },
+ ["unicodeslot"]=0x3134, -- ã„´
+ },
+ [0x3135]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER NIEUN-CIEUC",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x11AC },
+ ["unicodeslot"]=0x3135, -- ㄵ
+ },
+ [0x3136]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER NIEUN-HIEUH",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x11AD },
+ ["unicodeslot"]=0x3136, -- ㄶ
+ },
+ [0x3137]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER TIKEUT",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x1103 },
+ ["unicodeslot"]=0x3137, -- ã„·
+ },
+ [0x3138]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER SSANGTIKEUT",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x1104 },
+ ["unicodeslot"]=0x3138, -- ㄸ
+ },
+ [0x3139]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER RIEUL",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x1105 },
+ ["unicodeslot"]=0x3139, -- ㄹ
+ },
+ [0x313A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER RIEUL-KIYEOK",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x11B0 },
+ ["unicodeslot"]=0x313A, -- ㄺ
+ },
+ [0x313B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER RIEUL-MIEUM",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x11B1 },
+ ["unicodeslot"]=0x313B, -- ã„»
+ },
+ [0x313C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER RIEUL-PIEUP",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x11B2 },
+ ["unicodeslot"]=0x313C, -- ㄼ
+ },
+ [0x313D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER RIEUL-SIOS",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x11B3 },
+ ["unicodeslot"]=0x313D, -- ㄽ
+ },
+ [0x313E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER RIEUL-THIEUTH",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x11B4 },
+ ["unicodeslot"]=0x313E, -- ㄾ
+ },
+ [0x313F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER RIEUL-PHIEUPH",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x11B5 },
+ ["unicodeslot"]=0x313F, -- ã„¿
+ },
+ [0x3140]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER RIEUL-HIEUH",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x111A },
+ ["unicodeslot"]=0x3140, -- ã…€
+ },
+ [0x3141]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER MIEUM",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x1106 },
+ ["unicodeslot"]=0x3141, -- ã…
+ },
+ [0x3142]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER PIEUP",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x1107 },
+ ["unicodeslot"]=0x3142, -- ã…‚
+ },
+ [0x3143]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER SSANGPIEUP",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x1108 },
+ ["unicodeslot"]=0x3143, -- ã…ƒ
+ },
+ [0x3144]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER PIEUP-SIOS",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x1121 },
+ ["unicodeslot"]=0x3144, -- ã…„
+ },
+ [0x3145]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER SIOS",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x1109 },
+ ["unicodeslot"]=0x3145, -- ã……
+ },
+ [0x3146]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER SSANGSIOS",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x110A },
+ ["unicodeslot"]=0x3146, -- ã…†
+ },
+ [0x3147]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER IEUNG",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x110B },
+ ["unicodeslot"]=0x3147, -- ã…‡
+ },
+ [0x3148]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER CIEUC",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x110C },
+ ["unicodeslot"]=0x3148, -- ã…ˆ
+ },
+ [0x3149]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER SSANGCIEUC",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x110D },
+ ["unicodeslot"]=0x3149, -- ã…‰
+ },
+ [0x314A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER CHIEUCH",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x110E },
+ ["unicodeslot"]=0x314A, -- ã…Š
+ },
+ [0x314B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER KHIEUKH",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x110F },
+ ["unicodeslot"]=0x314B, -- ã…‹
+ },
+ [0x314C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER THIEUTH",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x1110 },
+ ["unicodeslot"]=0x314C, -- ㅌ
+ },
+ [0x314D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER PHIEUPH",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x1111 },
+ ["unicodeslot"]=0x314D, -- ã…
+ },
+ [0x314E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER HIEUH",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x1112 },
+ ["unicodeslot"]=0x314E, -- ã…Ž
+ },
+ [0x314F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER A",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x1161 },
+ ["unicodeslot"]=0x314F, -- ã…
+ },
+ [0x3150]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER AE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x1162 },
+ ["unicodeslot"]=0x3150, -- ã…
+ },
+ [0x3151]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER YA",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x1163 },
+ ["unicodeslot"]=0x3151, -- ã…‘
+ },
+ [0x3152]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER YAE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x1164 },
+ ["unicodeslot"]=0x3152, -- ã…’
+ },
+ [0x3153]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER EO",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x1165 },
+ ["unicodeslot"]=0x3153, -- ã…“
+ },
+ [0x3154]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER E",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x1166 },
+ ["unicodeslot"]=0x3154, -- ã…”
+ },
+ [0x3155]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER YEO",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x1167 },
+ ["unicodeslot"]=0x3155, -- ã…•
+ },
+ [0x3156]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER YE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x1168 },
+ ["unicodeslot"]=0x3156, -- ã…–
+ },
+ [0x3157]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER O",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x1169 },
+ ["unicodeslot"]=0x3157, -- ã…—
+ },
+ [0x3158]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER WA",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x116A },
+ ["unicodeslot"]=0x3158, -- ã…˜
+ },
+ [0x3159]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER WAE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x116B },
+ ["unicodeslot"]=0x3159, -- ã…™
+ },
+ [0x315A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER OE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x116C },
+ ["unicodeslot"]=0x315A, -- ã…š
+ },
+ [0x315B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER YO",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x116D },
+ ["unicodeslot"]=0x315B, -- ã…›
+ },
+ [0x315C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER U",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x116E },
+ ["unicodeslot"]=0x315C, -- ㅜ
+ },
+ [0x315D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER WEO",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x116F },
+ ["unicodeslot"]=0x315D, -- ã…
+ },
+ [0x315E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER WE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x1170 },
+ ["unicodeslot"]=0x315E, -- ã…ž
+ },
+ [0x315F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER WI",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x1171 },
+ ["unicodeslot"]=0x315F, -- ã…Ÿ
+ },
+ [0x3160]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER YU",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x1172 },
+ ["unicodeslot"]=0x3160, -- ã… 
+ },
+ [0x3161]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER EU",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x1173 },
+ ["unicodeslot"]=0x3161, -- ã…¡
+ },
+ [0x3162]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER YI",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x1174 },
+ ["unicodeslot"]=0x3162, -- ã…¢
+ },
+ [0x3163]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER I",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x1175 },
+ ["unicodeslot"]=0x3163, -- ã…£
+ },
+ [0x3164]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL FILLER",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x1160 },
+ ["unicodeslot"]=0x3164, -- ã…¤
+ },
+ [0x3165]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER SSANGNIEUN",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x1114 },
+ ["unicodeslot"]=0x3165, -- ã…¥
+ },
+ [0x3166]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER NIEUN-TIKEUT",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x1115 },
+ ["unicodeslot"]=0x3166, -- ã…¦
+ },
+ [0x3167]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER NIEUN-SIOS",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x11C7 },
+ ["unicodeslot"]=0x3167, -- ã…§
+ },
+ [0x3168]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER NIEUN-PANSIOS",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x11C8 },
+ ["unicodeslot"]=0x3168, -- ã…¨
+ },
+ [0x3169]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER RIEUL-KIYEOK-SIOS",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x11CC },
+ ["unicodeslot"]=0x3169, -- ã…©
+ },
+ [0x316A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER RIEUL-TIKEUT",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x11CE },
+ ["unicodeslot"]=0x316A, -- ã…ª
+ },
+ [0x316B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER RIEUL-PIEUP-SIOS",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x11D3 },
+ ["unicodeslot"]=0x316B, -- ã…«
+ },
+ [0x316C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER RIEUL-PANSIOS",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x11D7 },
+ ["unicodeslot"]=0x316C, -- ã…¬
+ },
+ [0x316D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER RIEUL-YEORINHIEUH",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x11D9 },
+ ["unicodeslot"]=0x316D, -- ã…­
+ },
+ [0x316E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER MIEUM-PIEUP",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x111C },
+ ["unicodeslot"]=0x316E, -- ã…®
+ },
+ [0x316F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER MIEUM-SIOS",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x11DD },
+ ["unicodeslot"]=0x316F, -- ã…¯
+ },
+ [0x3170]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER MIEUM-PANSIOS",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x11DF },
+ ["unicodeslot"]=0x3170, -- ã…°
+ },
+ [0x3171]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER KAPYEOUNMIEUM",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x111D },
+ ["unicodeslot"]=0x3171, -- ã…±
+ },
+ [0x3172]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER PIEUP-KIYEOK",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x111E },
+ ["unicodeslot"]=0x3172, -- ã…²
+ },
+ [0x3173]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER PIEUP-TIKEUT",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x1120 },
+ ["unicodeslot"]=0x3173, -- ã…³
+ },
+ [0x3174]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER PIEUP-SIOS-KIYEOK",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x1122 },
+ ["unicodeslot"]=0x3174, -- ã…´
+ },
+ [0x3175]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER PIEUP-SIOS-TIKEUT",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x1123 },
+ ["unicodeslot"]=0x3175, -- ã…µ
+ },
+ [0x3176]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER PIEUP-CIEUC",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x1127 },
+ ["unicodeslot"]=0x3176, -- ã…¶
+ },
+ [0x3177]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER PIEUP-THIEUTH",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x1129 },
+ ["unicodeslot"]=0x3177, -- ã…·
+ },
+ [0x3178]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER KAPYEOUNPIEUP",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x112B },
+ ["unicodeslot"]=0x3178, -- ã…¸
+ },
+ [0x3179]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER KAPYEOUNSSANGPIEUP",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x112C },
+ ["unicodeslot"]=0x3179, -- ã…¹
+ },
+ [0x317A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER SIOS-KIYEOK",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x112D },
+ ["unicodeslot"]=0x317A, -- ã…º
+ },
+ [0x317B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER SIOS-NIEUN",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x112E },
+ ["unicodeslot"]=0x317B, -- ã…»
+ },
+ [0x317C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER SIOS-TIKEUT",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x112F },
+ ["unicodeslot"]=0x317C, -- ã…¼
+ },
+ [0x317D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER SIOS-PIEUP",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x1132 },
+ ["unicodeslot"]=0x317D, -- ã…½
+ },
+ [0x317E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER SIOS-CIEUC",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x1136 },
+ ["unicodeslot"]=0x317E, -- ã…¾
+ },
+ [0x317F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER PANSIOS",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x1140 },
+ ["unicodeslot"]=0x317F, -- ã…¿
+ },
+ [0x3180]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER SSANGIEUNG",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x1147 },
+ ["unicodeslot"]=0x3180, -- ㆀ
+ },
+ [0x3181]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER YESIEUNG",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x114C },
+ ["unicodeslot"]=0x3181, -- ã†
+ },
+ [0x3182]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER YESIEUNG-SIOS",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x11F1 },
+ ["unicodeslot"]=0x3182, -- ㆂ
+ },
+ [0x3183]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER YESIEUNG-PANSIOS",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x11F2 },
+ ["unicodeslot"]=0x3183, -- ㆃ
+ },
+ [0x3184]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER KAPYEOUNPHIEUPH",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x1157 },
+ ["unicodeslot"]=0x3184, -- ㆄ
+ },
+ [0x3185]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER SSANGHIEUH",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x1158 },
+ ["unicodeslot"]=0x3185, -- ㆅ
+ },
+ [0x3186]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER YEORINHIEUH",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x1159 },
+ ["unicodeslot"]=0x3186, -- ㆆ
+ },
+ [0x3187]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER YO-YA",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x1184 },
+ ["unicodeslot"]=0x3187, -- ㆇ
+ },
+ [0x3188]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER YO-YAE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x1185 },
+ ["unicodeslot"]=0x3188, -- ㆈ
+ },
+ [0x3189]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER YO-I",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x1188 },
+ ["unicodeslot"]=0x3189, -- ㆉ
+ },
+ [0x318A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER YU-YEO",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x1191 },
+ ["unicodeslot"]=0x318A, -- ㆊ
+ },
+ [0x318B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER YU-YE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x1192 },
+ ["unicodeslot"]=0x318B, -- ㆋ
+ },
+ [0x318C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER YU-I",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x1194 },
+ ["unicodeslot"]=0x318C, -- ㆌ
+ },
+ [0x318D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER ARAEA",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x119E },
+ ["unicodeslot"]=0x318D, -- ã†
+ },
+ [0x318E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="HANGUL LETTER ARAEAE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x11A1 },
+ ["unicodeslot"]=0x318E, -- ㆎ
+ },
+ [0x3190]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC ANNOTATION LINKING MARK",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3190, -- ã†
+ },
+ [0x3191]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC ANNOTATION REVERSE MARK",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3191, -- ㆑
+ },
+ [0x3192]={
+ ["category"]="no",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC ANNOTATION ONE MARK",
+ ["linebreak"]="id",
+ ["specials"]={ "super", 0x4E00 },
+ ["unicodeslot"]=0x3192, -- ㆒
+ },
+ [0x3193]={
+ ["category"]="no",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC ANNOTATION TWO MARK",
+ ["linebreak"]="id",
+ ["specials"]={ "super", 0x4E8C },
+ ["unicodeslot"]=0x3193, -- ㆓
+ },
+ [0x3194]={
+ ["category"]="no",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC ANNOTATION THREE MARK",
+ ["linebreak"]="id",
+ ["specials"]={ "super", 0x4E09 },
+ ["unicodeslot"]=0x3194, -- ㆔
+ },
+ [0x3195]={
+ ["category"]="no",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC ANNOTATION FOUR MARK",
+ ["linebreak"]="id",
+ ["specials"]={ "super", 0x56DB },
+ ["unicodeslot"]=0x3195, -- ㆕
+ },
+ [0x3196]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC ANNOTATION TOP MARK",
+ ["linebreak"]="id",
+ ["specials"]={ "super", 0x4E0A },
+ ["unicodeslot"]=0x3196, -- ㆖
+ },
+ [0x3197]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC ANNOTATION MIDDLE MARK",
+ ["linebreak"]="id",
+ ["specials"]={ "super", 0x4E2D },
+ ["unicodeslot"]=0x3197, -- ㆗
+ },
+ [0x3198]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC ANNOTATION BOTTOM MARK",
+ ["linebreak"]="id",
+ ["specials"]={ "super", 0x4E0B },
+ ["unicodeslot"]=0x3198, -- ㆘
+ },
+ [0x3199]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC ANNOTATION FIRST MARK",
+ ["linebreak"]="id",
+ ["specials"]={ "super", 0x7532 },
+ ["unicodeslot"]=0x3199, -- ㆙
+ },
+ [0x319A]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC ANNOTATION SECOND MARK",
+ ["linebreak"]="id",
+ ["specials"]={ "super", 0x4E59 },
+ ["unicodeslot"]=0x319A, -- ㆚
+ },
+ [0x319B]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC ANNOTATION THIRD MARK",
+ ["linebreak"]="id",
+ ["specials"]={ "super", 0x4E19 },
+ ["unicodeslot"]=0x319B, -- ㆛
+ },
+ [0x319C]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC ANNOTATION FOURTH MARK",
+ ["linebreak"]="id",
+ ["specials"]={ "super", 0x4E01 },
+ ["unicodeslot"]=0x319C, -- ㆜
+ },
+ [0x319D]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC ANNOTATION HEAVEN MARK",
+ ["linebreak"]="id",
+ ["specials"]={ "super", 0x5929 },
+ ["unicodeslot"]=0x319D, -- ã†
+ },
+ [0x319E]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC ANNOTATION EARTH MARK",
+ ["linebreak"]="id",
+ ["specials"]={ "super", 0x5730 },
+ ["unicodeslot"]=0x319E, -- ㆞
+ },
+ [0x319F]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC ANNOTATION MAN MARK",
+ ["linebreak"]="id",
+ ["specials"]={ "super", 0x4EBA },
+ ["unicodeslot"]=0x319F, -- ㆟
+ },
+ [0x31A0]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO LETTER BU",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x31A0, -- ㆠ
+ },
+ [0x31A1]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO LETTER ZI",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x31A1, -- ㆡ
+ },
+ [0x31A2]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO LETTER JI",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x31A2, -- ㆢ
+ },
+ [0x31A3]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO LETTER GU",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x31A3, -- ㆣ
+ },
+ [0x31A4]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO LETTER EE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x31A4, -- ㆤ
+ },
+ [0x31A5]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO LETTER ENN",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x31A5, -- ㆥ
+ },
+ [0x31A6]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO LETTER OO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x31A6, -- ㆦ
+ },
+ [0x31A7]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO LETTER ONN",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x31A7, -- ㆧ
+ },
+ [0x31A8]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO LETTER IR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x31A8, -- ㆨ
+ },
+ [0x31A9]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO LETTER ANN",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x31A9, -- ㆩ
+ },
+ [0x31AA]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO LETTER INN",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x31AA, -- ㆪ
+ },
+ [0x31AB]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO LETTER UNN",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x31AB, -- ㆫ
+ },
+ [0x31AC]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO LETTER IM",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x31AC, -- ㆬ
+ },
+ [0x31AD]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO LETTER NGG",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x31AD, -- ㆭ
+ },
+ [0x31AE]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO LETTER AINN",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x31AE, -- ㆮ
+ },
+ [0x31AF]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO LETTER AUNN",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x31AF, -- ㆯ
+ },
+ [0x31B0]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO LETTER AM",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x31B0, -- ㆰ
+ },
+ [0x31B1]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO LETTER OM",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x31B1, -- ㆱ
+ },
+ [0x31B2]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO LETTER ONG",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x31B2, -- ㆲ
+ },
+ [0x31B3]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO LETTER INNN",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x31B3, -- ㆳ
+ },
+ [0x31B4]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO FINAL LETTER P",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x31B4, -- ㆴ
+ },
+ [0x31B5]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO FINAL LETTER T",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x31B5, -- ㆵ
+ },
+ [0x31B6]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO FINAL LETTER K",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x31B6, -- ㆶ
+ },
+ [0x31B7]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="BOPOMOFO FINAL LETTER H",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x31B7, -- ㆷ
+ },
+ [0x31C0]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK STROKE T",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x31C0, -- ㇀
+ },
+ [0x31C1]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK STROKE WG",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x31C1, -- ã‡
+ },
+ [0x31C2]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK STROKE XG",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x31C2, -- ㇂
+ },
+ [0x31C3]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK STROKE BXG",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x31C3, -- ㇃
+ },
+ [0x31C4]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK STROKE SW",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x31C4, -- ㇄
+ },
+ [0x31C5]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK STROKE HZZ",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x31C5, -- ㇅
+ },
+ [0x31C6]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK STROKE HZG",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x31C6, -- ㇆
+ },
+ [0x31C7]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK STROKE HP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x31C7, -- ㇇
+ },
+ [0x31C8]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK STROKE HZWG",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x31C8, -- ㇈
+ },
+ [0x31C9]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK STROKE SZWG",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x31C9, -- ㇉
+ },
+ [0x31CA]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK STROKE HZT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x31CA, -- ㇊
+ },
+ [0x31CB]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK STROKE HZZP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x31CB, -- ㇋
+ },
+ [0x31CC]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK STROKE HPWG",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x31CC, -- ㇌
+ },
+ [0x31CD]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK STROKE HZW",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x31CD, -- ã‡
+ },
+ [0x31CE]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK STROKE HZZZ",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x31CE, -- ㇎
+ },
+ [0x31CF]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CJK STROKE N",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x31CF, -- ã‡
+ },
+ [0x31F0]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER SMALL KU",
+ ["linebreak"]="ns",
+ ["unicodeslot"]=0x31F0, -- ㇰ
+ },
+ [0x31F1]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER SMALL SI",
+ ["linebreak"]="ns",
+ ["unicodeslot"]=0x31F1, -- ㇱ
+ },
+ [0x31F2]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER SMALL SU",
+ ["linebreak"]="ns",
+ ["unicodeslot"]=0x31F2, -- ㇲ
+ },
+ [0x31F3]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER SMALL TO",
+ ["linebreak"]="ns",
+ ["unicodeslot"]=0x31F3, -- ㇳ
+ },
+ [0x31F4]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER SMALL NU",
+ ["linebreak"]="ns",
+ ["unicodeslot"]=0x31F4, -- ㇴ
+ },
+ [0x31F5]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER SMALL HA",
+ ["linebreak"]="ns",
+ ["unicodeslot"]=0x31F5, -- ㇵ
+ },
+ [0x31F6]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER SMALL HI",
+ ["linebreak"]="ns",
+ ["unicodeslot"]=0x31F6, -- ㇶ
+ },
+ [0x31F7]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER SMALL HU",
+ ["linebreak"]="ns",
+ ["unicodeslot"]=0x31F7, -- ㇷ
+ },
+ [0x31F8]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER SMALL HE",
+ ["linebreak"]="ns",
+ ["unicodeslot"]=0x31F8, -- ㇸ
+ },
+ [0x31F9]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER SMALL HO",
+ ["linebreak"]="ns",
+ ["unicodeslot"]=0x31F9, -- ㇹ
+ },
+ [0x31FA]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER SMALL MU",
+ ["linebreak"]="ns",
+ ["unicodeslot"]=0x31FA, -- ㇺ
+ },
+ [0x31FB]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER SMALL RA",
+ ["linebreak"]="ns",
+ ["unicodeslot"]=0x31FB, -- ㇻ
+ },
+ [0x31FC]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER SMALL RI",
+ ["linebreak"]="ns",
+ ["unicodeslot"]=0x31FC, -- ㇼ
+ },
+ [0x31FD]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER SMALL RU",
+ ["linebreak"]="ns",
+ ["unicodeslot"]=0x31FD, -- ㇽ
+ },
+ [0x31FE]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER SMALL RE",
+ ["linebreak"]="ns",
+ ["unicodeslot"]=0x31FE, -- ㇾ
+ },
+ [0x31FF]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="KATAKANA LETTER SMALL RO",
+ ["linebreak"]="ns",
+ ["unicodeslot"]=0x31FF, -- ㇿ
+ },
+ [0x3200]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED HANGUL KIYEOK",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x1100, 0x0029 },
+ ["unicodeslot"]=0x3200, -- ㈀
+ },
+ [0x3201]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED HANGUL NIEUN",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x1102, 0x0029 },
+ ["unicodeslot"]=0x3201, -- ãˆ
+ },
+ [0x3202]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED HANGUL TIKEUT",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x1103, 0x0029 },
+ ["unicodeslot"]=0x3202, -- ㈂
+ },
+ [0x3203]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED HANGUL RIEUL",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x1105, 0x0029 },
+ ["unicodeslot"]=0x3203, -- ㈃
+ },
+ [0x3204]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED HANGUL MIEUM",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x1106, 0x0029 },
+ ["unicodeslot"]=0x3204, -- ㈄
+ },
+ [0x3205]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED HANGUL PIEUP",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x1107, 0x0029 },
+ ["unicodeslot"]=0x3205, -- ㈅
+ },
+ [0x3206]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED HANGUL SIOS",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x1109, 0x0029 },
+ ["unicodeslot"]=0x3206, -- ㈆
+ },
+ [0x3207]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED HANGUL IEUNG",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x110B, 0x0029 },
+ ["unicodeslot"]=0x3207, -- ㈇
+ },
+ [0x3208]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED HANGUL CIEUC",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x110C, 0x0029 },
+ ["unicodeslot"]=0x3208, -- ㈈
+ },
+ [0x3209]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED HANGUL CHIEUCH",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x110E, 0x0029 },
+ ["unicodeslot"]=0x3209, -- ㈉
+ },
+ [0x320A]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED HANGUL KHIEUKH",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x110F, 0x0029 },
+ ["unicodeslot"]=0x320A, -- ㈊
+ },
+ [0x320B]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED HANGUL THIEUTH",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x1110, 0x0029 },
+ ["unicodeslot"]=0x320B, -- ㈋
+ },
+ [0x320C]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED HANGUL PHIEUPH",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x1111, 0x0029 },
+ ["unicodeslot"]=0x320C, -- ㈌
+ },
+ [0x320D]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED HANGUL HIEUH",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x1112, 0x0029 },
+ ["unicodeslot"]=0x320D, -- ãˆ
+ },
+ [0x320E]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED HANGUL KIYEOK A",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x1100, 0x1161, 0x0029 },
+ ["unicodeslot"]=0x320E, -- ㈎
+ },
+ [0x320F]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED HANGUL NIEUN A",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x1102, 0x1161, 0x0029 },
+ ["unicodeslot"]=0x320F, -- ãˆ
+ },
+ [0x3210]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED HANGUL TIKEUT A",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x1103, 0x1161, 0x0029 },
+ ["unicodeslot"]=0x3210, -- ãˆ
+ },
+ [0x3211]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED HANGUL RIEUL A",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x1105, 0x1161, 0x0029 },
+ ["unicodeslot"]=0x3211, -- ㈑
+ },
+ [0x3212]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED HANGUL MIEUM A",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x1106, 0x1161, 0x0029 },
+ ["unicodeslot"]=0x3212, -- ㈒
+ },
+ [0x3213]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED HANGUL PIEUP A",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x1107, 0x1161, 0x0029 },
+ ["unicodeslot"]=0x3213, -- ㈓
+ },
+ [0x3214]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED HANGUL SIOS A",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x1109, 0x1161, 0x0029 },
+ ["unicodeslot"]=0x3214, -- ㈔
+ },
+ [0x3215]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED HANGUL IEUNG A",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x110B, 0x1161, 0x0029 },
+ ["unicodeslot"]=0x3215, -- ㈕
+ },
+ [0x3216]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED HANGUL CIEUC A",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x110C, 0x1161, 0x0029 },
+ ["unicodeslot"]=0x3216, -- ㈖
+ },
+ [0x3217]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED HANGUL CHIEUCH A",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x110E, 0x1161, 0x0029 },
+ ["unicodeslot"]=0x3217, -- ㈗
+ },
+ [0x3218]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED HANGUL KHIEUKH A",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x110F, 0x1161, 0x0029 },
+ ["unicodeslot"]=0x3218, -- ㈘
+ },
+ [0x3219]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED HANGUL THIEUTH A",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x1110, 0x1161, 0x0029 },
+ ["unicodeslot"]=0x3219, -- ㈙
+ },
+ [0x321A]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED HANGUL PHIEUPH A",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x1111, 0x1161, 0x0029 },
+ ["unicodeslot"]=0x321A, -- ㈚
+ },
+ [0x321B]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED HANGUL HIEUH A",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x1112, 0x1161, 0x0029 },
+ ["unicodeslot"]=0x321B, -- ㈛
+ },
+ [0x321C]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED HANGUL CIEUC U",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x110C, 0x116E, 0x0029 },
+ ["unicodeslot"]=0x321C, -- ㈜
+ },
+ [0x321D]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED KOREAN CHARACTER OJEON",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x110B, 0x1169, 0x110C, 0x1165, 0x11AB, 0x0029 },
+ ["unicodeslot"]=0x321D, -- ãˆ
+ },
+ [0x321E]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED KOREAN CHARACTER O HU",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x110B, 0x1169, 0x1112, 0x116E, 0x0029 },
+ ["unicodeslot"]=0x321E, -- ㈞
+ },
+ [0x3220]={
+ ["category"]="no",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED IDEOGRAPH ONE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x4E00, 0x0029 },
+ ["unicodeslot"]=0x3220, -- ㈠
+ },
+ [0x3221]={
+ ["category"]="no",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED IDEOGRAPH TWO",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x4E8C, 0x0029 },
+ ["unicodeslot"]=0x3221, -- ㈡
+ },
+ [0x3222]={
+ ["category"]="no",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED IDEOGRAPH THREE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x4E09, 0x0029 },
+ ["unicodeslot"]=0x3222, -- ㈢
+ },
+ [0x3223]={
+ ["category"]="no",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED IDEOGRAPH FOUR",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x56DB, 0x0029 },
+ ["unicodeslot"]=0x3223, -- ㈣
+ },
+ [0x3224]={
+ ["category"]="no",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED IDEOGRAPH FIVE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x4E94, 0x0029 },
+ ["unicodeslot"]=0x3224, -- ㈤
+ },
+ [0x3225]={
+ ["category"]="no",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED IDEOGRAPH SIX",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x516D, 0x0029 },
+ ["unicodeslot"]=0x3225, -- ㈥
+ },
+ [0x3226]={
+ ["category"]="no",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED IDEOGRAPH SEVEN",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x4E03, 0x0029 },
+ ["unicodeslot"]=0x3226, -- ㈦
+ },
+ [0x3227]={
+ ["category"]="no",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED IDEOGRAPH EIGHT",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x516B, 0x0029 },
+ ["unicodeslot"]=0x3227, -- ㈧
+ },
+ [0x3228]={
+ ["category"]="no",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED IDEOGRAPH NINE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x4E5D, 0x0029 },
+ ["unicodeslot"]=0x3228, -- ㈨
+ },
+ [0x3229]={
+ ["category"]="no",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED IDEOGRAPH TEN",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x5341, 0x0029 },
+ ["unicodeslot"]=0x3229, -- ㈩
+ },
+ [0x322A]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED IDEOGRAPH MOON",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x6708, 0x0029 },
+ ["unicodeslot"]=0x322A, -- ㈪
+ },
+ [0x322B]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED IDEOGRAPH FIRE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x706B, 0x0029 },
+ ["unicodeslot"]=0x322B, -- ㈫
+ },
+ [0x322C]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED IDEOGRAPH WATER",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x6C34, 0x0029 },
+ ["unicodeslot"]=0x322C, -- ㈬
+ },
+ [0x322D]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED IDEOGRAPH WOOD",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x6728, 0x0029 },
+ ["unicodeslot"]=0x322D, -- ㈭
+ },
+ [0x322E]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED IDEOGRAPH METAL",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x91D1, 0x0029 },
+ ["unicodeslot"]=0x322E, -- ㈮
+ },
+ [0x322F]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED IDEOGRAPH EARTH",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x571F, 0x0029 },
+ ["unicodeslot"]=0x322F, -- ㈯
+ },
+ [0x3230]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED IDEOGRAPH SUN",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x65E5, 0x0029 },
+ ["unicodeslot"]=0x3230, -- ㈰
+ },
+ [0x3231]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED IDEOGRAPH STOCK",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x682A, 0x0029 },
+ ["unicodeslot"]=0x3231, -- ㈱
+ },
+ [0x3232]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED IDEOGRAPH HAVE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x6709, 0x0029 },
+ ["unicodeslot"]=0x3232, -- ㈲
+ },
+ [0x3233]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED IDEOGRAPH SOCIETY",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x793E, 0x0029 },
+ ["unicodeslot"]=0x3233, -- ㈳
+ },
+ [0x3234]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED IDEOGRAPH NAME",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x540D, 0x0029 },
+ ["unicodeslot"]=0x3234, -- ㈴
+ },
+ [0x3235]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED IDEOGRAPH SPECIAL",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x7279, 0x0029 },
+ ["unicodeslot"]=0x3235, -- ㈵
+ },
+ [0x3236]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED IDEOGRAPH FINANCIAL",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x8CA1, 0x0029 },
+ ["unicodeslot"]=0x3236, -- ㈶
+ },
+ [0x3237]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED IDEOGRAPH CONGRATULATION",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x795D, 0x0029 },
+ ["unicodeslot"]=0x3237, -- ㈷
+ },
+ [0x3238]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED IDEOGRAPH LABOR",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x52B4, 0x0029 },
+ ["unicodeslot"]=0x3238, -- ㈸
+ },
+ [0x3239]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED IDEOGRAPH REPRESENT",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x4EE3, 0x0029 },
+ ["unicodeslot"]=0x3239, -- ㈹
+ },
+ [0x323A]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED IDEOGRAPH CALL",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x547C, 0x0029 },
+ ["unicodeslot"]=0x323A, -- ㈺
+ },
+ [0x323B]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED IDEOGRAPH STUDY",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x5B66, 0x0029 },
+ ["unicodeslot"]=0x323B, -- ㈻
+ },
+ [0x323C]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED IDEOGRAPH SUPERVISE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x76E3, 0x0029 },
+ ["unicodeslot"]=0x323C, -- ㈼
+ },
+ [0x323D]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED IDEOGRAPH ENTERPRISE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x4F01, 0x0029 },
+ ["unicodeslot"]=0x323D, -- ㈽
+ },
+ [0x323E]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED IDEOGRAPH RESOURCE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x8CC7, 0x0029 },
+ ["unicodeslot"]=0x323E, -- ㈾
+ },
+ [0x323F]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED IDEOGRAPH ALLIANCE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x5354, 0x0029 },
+ ["unicodeslot"]=0x323F, -- ㈿
+ },
+ [0x3240]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED IDEOGRAPH FESTIVAL",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x796D, 0x0029 },
+ ["unicodeslot"]=0x3240, -- ㉀
+ },
+ [0x3241]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED IDEOGRAPH REST",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x4F11, 0x0029 },
+ ["unicodeslot"]=0x3241, -- ã‰
+ },
+ [0x3242]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED IDEOGRAPH SELF",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x81EA, 0x0029 },
+ ["unicodeslot"]=0x3242, -- ㉂
+ },
+ [0x3243]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="PARENTHESIZED IDEOGRAPH REACH",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0028, 0x81F3, 0x0029 },
+ ["unicodeslot"]=0x3243, -- ㉃
+ },
+ [0x3250]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="PARTNERSHIP SIGN",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x0050, 0x0054, 0x0045 },
+ ["unicodeslot"]=0x3250, -- ã‰
+ },
+ [0x3251]={
+ ["category"]="no",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED NUMBER TWENTY ONE",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x0032, 0x0031 },
+ ["unicodeslot"]=0x3251, -- ㉑
+ },
+ [0x3252]={
+ ["category"]="no",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED NUMBER TWENTY TWO",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x0032, 0x0032 },
+ ["unicodeslot"]=0x3252, -- ㉒
+ },
+ [0x3253]={
+ ["category"]="no",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED NUMBER TWENTY THREE",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x0032, 0x0033 },
+ ["unicodeslot"]=0x3253, -- ㉓
+ },
+ [0x3254]={
+ ["category"]="no",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED NUMBER TWENTY FOUR",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x0032, 0x0034 },
+ ["unicodeslot"]=0x3254, -- ㉔
+ },
+ [0x3255]={
+ ["category"]="no",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED NUMBER TWENTY FIVE",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x0032, 0x0035 },
+ ["unicodeslot"]=0x3255, -- ㉕
+ },
+ [0x3256]={
+ ["category"]="no",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED NUMBER TWENTY SIX",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x0032, 0x0036 },
+ ["unicodeslot"]=0x3256, -- ㉖
+ },
+ [0x3257]={
+ ["category"]="no",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED NUMBER TWENTY SEVEN",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x0032, 0x0037 },
+ ["unicodeslot"]=0x3257, -- ㉗
+ },
+ [0x3258]={
+ ["category"]="no",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED NUMBER TWENTY EIGHT",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x0032, 0x0038 },
+ ["unicodeslot"]=0x3258, -- ㉘
+ },
+ [0x3259]={
+ ["category"]="no",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED NUMBER TWENTY NINE",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x0032, 0x0039 },
+ ["unicodeslot"]=0x3259, -- ㉙
+ },
+ [0x325A]={
+ ["category"]="no",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED NUMBER THIRTY",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x0033, 0x0030 },
+ ["unicodeslot"]=0x325A, -- ㉚
+ },
+ [0x325B]={
+ ["category"]="no",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED NUMBER THIRTY ONE",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x0033, 0x0031 },
+ ["unicodeslot"]=0x325B, -- ㉛
+ },
+ [0x325C]={
+ ["category"]="no",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED NUMBER THIRTY TWO",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x0033, 0x0032 },
+ ["unicodeslot"]=0x325C, -- ㉜
+ },
+ [0x325D]={
+ ["category"]="no",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED NUMBER THIRTY THREE",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x0033, 0x0033 },
+ ["unicodeslot"]=0x325D, -- ã‰
+ },
+ [0x325E]={
+ ["category"]="no",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED NUMBER THIRTY FOUR",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x0033, 0x0034 },
+ ["unicodeslot"]=0x325E, -- ㉞
+ },
+ [0x325F]={
+ ["category"]="no",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED NUMBER THIRTY FIVE",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x0033, 0x0035 },
+ ["unicodeslot"]=0x325F, -- ㉟
+ },
+ [0x3260]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED HANGUL KIYEOK",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x1100 },
+ ["unicodeslot"]=0x3260, -- ㉠
+ },
+ [0x3261]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED HANGUL NIEUN",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x1102 },
+ ["unicodeslot"]=0x3261, -- ㉡
+ },
+ [0x3262]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED HANGUL TIKEUT",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x1103 },
+ ["unicodeslot"]=0x3262, -- ㉢
+ },
+ [0x3263]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED HANGUL RIEUL",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x1105 },
+ ["unicodeslot"]=0x3263, -- ㉣
+ },
+ [0x3264]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED HANGUL MIEUM",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x1106 },
+ ["unicodeslot"]=0x3264, -- ㉤
+ },
+ [0x3265]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED HANGUL PIEUP",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x1107 },
+ ["unicodeslot"]=0x3265, -- ㉥
+ },
+ [0x3266]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED HANGUL SIOS",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x1109 },
+ ["unicodeslot"]=0x3266, -- ㉦
+ },
+ [0x3267]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED HANGUL IEUNG",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x110B },
+ ["unicodeslot"]=0x3267, -- ㉧
+ },
+ [0x3268]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED HANGUL CIEUC",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x110C },
+ ["unicodeslot"]=0x3268, -- ㉨
+ },
+ [0x3269]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED HANGUL CHIEUCH",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x110E },
+ ["unicodeslot"]=0x3269, -- ㉩
+ },
+ [0x326A]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED HANGUL KHIEUKH",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x110F },
+ ["unicodeslot"]=0x326A, -- ㉪
+ },
+ [0x326B]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED HANGUL THIEUTH",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x1110 },
+ ["unicodeslot"]=0x326B, -- ㉫
+ },
+ [0x326C]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED HANGUL PHIEUPH",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x1111 },
+ ["unicodeslot"]=0x326C, -- ㉬
+ },
+ [0x326D]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED HANGUL HIEUH",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x1112 },
+ ["unicodeslot"]=0x326D, -- ㉭
+ },
+ [0x326E]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED HANGUL KIYEOK A",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x1100, 0x1161 },
+ ["unicodeslot"]=0x326E, -- ㉮
+ },
+ [0x326F]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED HANGUL NIEUN A",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x1102, 0x1161 },
+ ["unicodeslot"]=0x326F, -- ㉯
+ },
+ [0x3270]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED HANGUL TIKEUT A",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x1103, 0x1161 },
+ ["unicodeslot"]=0x3270, -- ㉰
+ },
+ [0x3271]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED HANGUL RIEUL A",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x1105, 0x1161 },
+ ["unicodeslot"]=0x3271, -- ㉱
+ },
+ [0x3272]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED HANGUL MIEUM A",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x1106, 0x1161 },
+ ["unicodeslot"]=0x3272, -- ㉲
+ },
+ [0x3273]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED HANGUL PIEUP A",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x1107, 0x1161 },
+ ["unicodeslot"]=0x3273, -- ㉳
+ },
+ [0x3274]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED HANGUL SIOS A",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x1109, 0x1161 },
+ ["unicodeslot"]=0x3274, -- ㉴
+ },
+ [0x3275]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED HANGUL IEUNG A",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x110B, 0x1161 },
+ ["unicodeslot"]=0x3275, -- ㉵
+ },
+ [0x3276]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED HANGUL CIEUC A",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x110C, 0x1161 },
+ ["unicodeslot"]=0x3276, -- ㉶
+ },
+ [0x3277]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED HANGUL CHIEUCH A",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x110E, 0x1161 },
+ ["unicodeslot"]=0x3277, -- ㉷
+ },
+ [0x3278]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED HANGUL KHIEUKH A",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x110F, 0x1161 },
+ ["unicodeslot"]=0x3278, -- ㉸
+ },
+ [0x3279]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED HANGUL THIEUTH A",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x1110, 0x1161 },
+ ["unicodeslot"]=0x3279, -- ㉹
+ },
+ [0x327A]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED HANGUL PHIEUPH A",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x1111, 0x1161 },
+ ["unicodeslot"]=0x327A, -- ㉺
+ },
+ [0x327B]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED HANGUL HIEUH A",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x1112, 0x1161 },
+ ["unicodeslot"]=0x327B, -- ㉻
+ },
+ [0x327C]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED KOREAN CHARACTER CHAMKO",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x110E, 0x1161, 0x11B7, 0x1100, 0x1169 },
+ ["unicodeslot"]=0x327C, -- ㉼
+ },
+ [0x327D]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED KOREAN CHARACTER JUEUI",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x110C, 0x116E, 0x110B, 0x1174 },
+ ["unicodeslot"]=0x327D, -- ㉽
+ },
+ [0x327E]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED HANGUL IEUNG U",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x110B, 0x116E },
+ ["unicodeslot"]=0x327E, -- ㉾
+ },
+ [0x327F]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="KOREAN STANDARD SYMBOL",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x327F, -- ㉿
+ },
+ [0x3280]={
+ ["category"]="no",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED IDEOGRAPH ONE",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x4E00 },
+ ["unicodeslot"]=0x3280, -- ㊀
+ },
+ [0x3281]={
+ ["category"]="no",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED IDEOGRAPH TWO",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x4E8C },
+ ["unicodeslot"]=0x3281, -- ãŠ
+ },
+ [0x3282]={
+ ["category"]="no",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED IDEOGRAPH THREE",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x4E09 },
+ ["unicodeslot"]=0x3282, -- ㊂
+ },
+ [0x3283]={
+ ["category"]="no",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED IDEOGRAPH FOUR",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x56DB },
+ ["unicodeslot"]=0x3283, -- ㊃
+ },
+ [0x3284]={
+ ["category"]="no",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED IDEOGRAPH FIVE",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x4E94 },
+ ["unicodeslot"]=0x3284, -- ㊄
+ },
+ [0x3285]={
+ ["category"]="no",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED IDEOGRAPH SIX",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x516D },
+ ["unicodeslot"]=0x3285, -- ㊅
+ },
+ [0x3286]={
+ ["category"]="no",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED IDEOGRAPH SEVEN",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x4E03 },
+ ["unicodeslot"]=0x3286, -- ㊆
+ },
+ [0x3287]={
+ ["category"]="no",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED IDEOGRAPH EIGHT",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x516B },
+ ["unicodeslot"]=0x3287, -- ㊇
+ },
+ [0x3288]={
+ ["category"]="no",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED IDEOGRAPH NINE",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x4E5D },
+ ["unicodeslot"]=0x3288, -- ㊈
+ },
+ [0x3289]={
+ ["category"]="no",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED IDEOGRAPH TEN",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x5341 },
+ ["unicodeslot"]=0x3289, -- ㊉
+ },
+ [0x328A]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED IDEOGRAPH MOON",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x6708 },
+ ["unicodeslot"]=0x328A, -- ㊊
+ },
+ [0x328B]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED IDEOGRAPH FIRE",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x706B },
+ ["unicodeslot"]=0x328B, -- ㊋
+ },
+ [0x328C]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED IDEOGRAPH WATER",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x6C34 },
+ ["unicodeslot"]=0x328C, -- ㊌
+ },
+ [0x328D]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED IDEOGRAPH WOOD",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x6728 },
+ ["unicodeslot"]=0x328D, -- ãŠ
+ },
+ [0x328E]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED IDEOGRAPH METAL",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x91D1 },
+ ["unicodeslot"]=0x328E, -- ㊎
+ },
+ [0x328F]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED IDEOGRAPH EARTH",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x571F },
+ ["unicodeslot"]=0x328F, -- ãŠ
+ },
+ [0x3290]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED IDEOGRAPH SUN",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x65E5 },
+ ["unicodeslot"]=0x3290, -- ãŠ
+ },
+ [0x3291]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED IDEOGRAPH STOCK",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x682A },
+ ["unicodeslot"]=0x3291, -- ㊑
+ },
+ [0x3292]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED IDEOGRAPH HAVE",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x6709 },
+ ["unicodeslot"]=0x3292, -- ㊒
+ },
+ [0x3293]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED IDEOGRAPH SOCIETY",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x793E },
+ ["unicodeslot"]=0x3293, -- ㊓
+ },
+ [0x3294]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED IDEOGRAPH NAME",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x540D },
+ ["unicodeslot"]=0x3294, -- ㊔
+ },
+ [0x3295]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED IDEOGRAPH SPECIAL",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x7279 },
+ ["unicodeslot"]=0x3295, -- ㊕
+ },
+ [0x3296]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED IDEOGRAPH FINANCIAL",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x8CA1 },
+ ["unicodeslot"]=0x3296, -- ㊖
+ },
+ [0x3297]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED IDEOGRAPH CONGRATULATION",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x795D },
+ ["unicodeslot"]=0x3297, -- ㊗
+ },
+ [0x3298]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED IDEOGRAPH LABOR",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x52B4 },
+ ["unicodeslot"]=0x3298, -- ㊘
+ },
+ [0x3299]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED IDEOGRAPH SECRET",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x79D8 },
+ ["unicodeslot"]=0x3299, -- ㊙
+ },
+ [0x329A]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED IDEOGRAPH MALE",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x7537 },
+ ["unicodeslot"]=0x329A, -- ㊚
+ },
+ [0x329B]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED IDEOGRAPH FEMALE",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x5973 },
+ ["unicodeslot"]=0x329B, -- ㊛
+ },
+ [0x329C]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED IDEOGRAPH SUITABLE",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x9069 },
+ ["unicodeslot"]=0x329C, -- ㊜
+ },
+ [0x329D]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED IDEOGRAPH EXCELLENT",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x512A },
+ ["unicodeslot"]=0x329D, -- ãŠ
+ },
+ [0x329E]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED IDEOGRAPH PRINT",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x5370 },
+ ["unicodeslot"]=0x329E, -- ㊞
+ },
+ [0x329F]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED IDEOGRAPH ATTENTION",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x6CE8 },
+ ["unicodeslot"]=0x329F, -- ㊟
+ },
+ [0x32A0]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED IDEOGRAPH ITEM",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x9805 },
+ ["unicodeslot"]=0x32A0, -- ㊠
+ },
+ [0x32A1]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED IDEOGRAPH REST",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x4F11 },
+ ["unicodeslot"]=0x32A1, -- ㊡
+ },
+ [0x32A2]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED IDEOGRAPH COPY",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x5199 },
+ ["unicodeslot"]=0x32A2, -- ㊢
+ },
+ [0x32A3]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED IDEOGRAPH CORRECT",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x6B63 },
+ ["unicodeslot"]=0x32A3, -- ㊣
+ },
+ [0x32A4]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED IDEOGRAPH HIGH",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x4E0A },
+ ["unicodeslot"]=0x32A4, -- ㊤
+ },
+ [0x32A5]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED IDEOGRAPH CENTRE",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x4E2D },
+ ["unicodeslot"]=0x32A5, -- ㊥
+ },
+ [0x32A6]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED IDEOGRAPH LOW",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x4E0B },
+ ["unicodeslot"]=0x32A6, -- ㊦
+ },
+ [0x32A7]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED IDEOGRAPH LEFT",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x5DE6 },
+ ["unicodeslot"]=0x32A7, -- ㊧
+ },
+ [0x32A8]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED IDEOGRAPH RIGHT",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x53F3 },
+ ["unicodeslot"]=0x32A8, -- ㊨
+ },
+ [0x32A9]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED IDEOGRAPH MEDICINE",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x533B },
+ ["unicodeslot"]=0x32A9, -- ㊩
+ },
+ [0x32AA]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED IDEOGRAPH RELIGION",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x5B97 },
+ ["unicodeslot"]=0x32AA, -- ㊪
+ },
+ [0x32AB]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED IDEOGRAPH STUDY",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x5B66 },
+ ["unicodeslot"]=0x32AB, -- ㊫
+ },
+ [0x32AC]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED IDEOGRAPH SUPERVISE",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x76E3 },
+ ["unicodeslot"]=0x32AC, -- ㊬
+ },
+ [0x32AD]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED IDEOGRAPH ENTERPRISE",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x4F01 },
+ ["unicodeslot"]=0x32AD, -- ㊭
+ },
+ [0x32AE]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED IDEOGRAPH RESOURCE",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x8CC7 },
+ ["unicodeslot"]=0x32AE, -- ㊮
+ },
+ [0x32AF]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED IDEOGRAPH ALLIANCE",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x5354 },
+ ["unicodeslot"]=0x32AF, -- ㊯
+ },
+ [0x32B0]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED IDEOGRAPH NIGHT",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x591C },
+ ["unicodeslot"]=0x32B0, -- ㊰
+ },
+ [0x32B1]={
+ ["category"]="no",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED NUMBER THIRTY SIX",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x0033, 0x0036 },
+ ["unicodeslot"]=0x32B1, -- ㊱
+ },
+ [0x32B2]={
+ ["category"]="no",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED NUMBER THIRTY SEVEN",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x0033, 0x0037 },
+ ["unicodeslot"]=0x32B2, -- ㊲
+ },
+ [0x32B3]={
+ ["category"]="no",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED NUMBER THIRTY EIGHT",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x0033, 0x0038 },
+ ["unicodeslot"]=0x32B3, -- ㊳
+ },
+ [0x32B4]={
+ ["category"]="no",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED NUMBER THIRTY NINE",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x0033, 0x0039 },
+ ["unicodeslot"]=0x32B4, -- ㊴
+ },
+ [0x32B5]={
+ ["category"]="no",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED NUMBER FORTY",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x0034, 0x0030 },
+ ["unicodeslot"]=0x32B5, -- ㊵
+ },
+ [0x32B6]={
+ ["category"]="no",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED NUMBER FORTY ONE",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x0034, 0x0031 },
+ ["unicodeslot"]=0x32B6, -- ㊶
+ },
+ [0x32B7]={
+ ["category"]="no",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED NUMBER FORTY TWO",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x0034, 0x0032 },
+ ["unicodeslot"]=0x32B7, -- ㊷
+ },
+ [0x32B8]={
+ ["category"]="no",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED NUMBER FORTY THREE",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x0034, 0x0033 },
+ ["unicodeslot"]=0x32B8, -- ㊸
+ },
+ [0x32B9]={
+ ["category"]="no",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED NUMBER FORTY FOUR",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x0034, 0x0034 },
+ ["unicodeslot"]=0x32B9, -- ㊹
+ },
+ [0x32BA]={
+ ["category"]="no",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED NUMBER FORTY FIVE",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x0034, 0x0035 },
+ ["unicodeslot"]=0x32BA, -- ㊺
+ },
+ [0x32BB]={
+ ["category"]="no",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED NUMBER FORTY SIX",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x0034, 0x0036 },
+ ["unicodeslot"]=0x32BB, -- ㊻
+ },
+ [0x32BC]={
+ ["category"]="no",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED NUMBER FORTY SEVEN",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x0034, 0x0037 },
+ ["unicodeslot"]=0x32BC, -- ㊼
+ },
+ [0x32BD]={
+ ["category"]="no",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED NUMBER FORTY EIGHT",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x0034, 0x0038 },
+ ["unicodeslot"]=0x32BD, -- ㊽
+ },
+ [0x32BE]={
+ ["category"]="no",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED NUMBER FORTY NINE",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x0034, 0x0039 },
+ ["unicodeslot"]=0x32BE, -- ㊾
+ },
+ [0x32BF]={
+ ["category"]="no",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED NUMBER FIFTY",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x0035, 0x0030 },
+ ["unicodeslot"]=0x32BF, -- ㊿
+ },
+ [0x32C0]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0031, 0x6708 },
+ ["unicodeslot"]=0x32C0, -- ã‹€
+ },
+ [0x32C1]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0032, 0x6708 },
+ ["unicodeslot"]=0x32C1, -- ã‹
+ },
+ [0x32C2]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0033, 0x6708 },
+ ["unicodeslot"]=0x32C2, -- ã‹‚
+ },
+ [0x32C3]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0034, 0x6708 },
+ ["unicodeslot"]=0x32C3, -- ㋃
+ },
+ [0x32C4]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0035, 0x6708 },
+ ["unicodeslot"]=0x32C4, -- ã‹„
+ },
+ [0x32C5]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0036, 0x6708 },
+ ["unicodeslot"]=0x32C5, -- ã‹…
+ },
+ [0x32C6]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0037, 0x6708 },
+ ["unicodeslot"]=0x32C6, -- ㋆
+ },
+ [0x32C7]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0038, 0x6708 },
+ ["unicodeslot"]=0x32C7, -- ㋇
+ },
+ [0x32C8]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0039, 0x6708 },
+ ["unicodeslot"]=0x32C8, -- ㋈
+ },
+ [0x32C9]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0031, 0x0030, 0x6708 },
+ ["unicodeslot"]=0x32C9, -- ㋉
+ },
+ [0x32CA]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0031, 0x0031, 0x6708 },
+ ["unicodeslot"]=0x32CA, -- ã‹Š
+ },
+ [0x32CB]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0031, 0x0032, 0x6708 },
+ ["unicodeslot"]=0x32CB, -- ã‹‹
+ },
+ [0x32CC]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE HG",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x0048, 0x0067 },
+ ["unicodeslot"]=0x32CC, -- ㋌
+ },
+ [0x32CD]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE ERG",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x0065, 0x0072, 0x0067 },
+ ["unicodeslot"]=0x32CD, -- ã‹
+ },
+ [0x32CE]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE EV",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x0065, 0x0056 },
+ ["unicodeslot"]=0x32CE, -- ã‹Ž
+ },
+ [0x32CF]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="LIMITED LIABILITY SIGN",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x004C, 0x0054, 0x0044 },
+ ["unicodeslot"]=0x32CF, -- ã‹
+ },
+ [0x32D0]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED KATAKANA A",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x30A2 },
+ ["unicodeslot"]=0x32D0, -- ã‹
+ },
+ [0x32D1]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED KATAKANA I",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x30A4 },
+ ["unicodeslot"]=0x32D1, -- ã‹‘
+ },
+ [0x32D2]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED KATAKANA U",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x30A6 },
+ ["unicodeslot"]=0x32D2, -- ã‹’
+ },
+ [0x32D3]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED KATAKANA E",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x30A8 },
+ ["unicodeslot"]=0x32D3, -- ã‹“
+ },
+ [0x32D4]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED KATAKANA O",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x30AA },
+ ["unicodeslot"]=0x32D4, -- ã‹”
+ },
+ [0x32D5]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED KATAKANA KA",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x30AB },
+ ["unicodeslot"]=0x32D5, -- ã‹•
+ },
+ [0x32D6]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED KATAKANA KI",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x30AD },
+ ["unicodeslot"]=0x32D6, -- ã‹–
+ },
+ [0x32D7]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED KATAKANA KU",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x30AF },
+ ["unicodeslot"]=0x32D7, -- ã‹—
+ },
+ [0x32D8]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED KATAKANA KE",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x30B1 },
+ ["unicodeslot"]=0x32D8, -- ㋘
+ },
+ [0x32D9]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED KATAKANA KO",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x30B3 },
+ ["unicodeslot"]=0x32D9, -- ã‹™
+ },
+ [0x32DA]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED KATAKANA SA",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x30B5 },
+ ["unicodeslot"]=0x32DA, -- ã‹š
+ },
+ [0x32DB]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED KATAKANA SI",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x30B7 },
+ ["unicodeslot"]=0x32DB, -- ã‹›
+ },
+ [0x32DC]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED KATAKANA SU",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x30B9 },
+ ["unicodeslot"]=0x32DC, -- ㋜
+ },
+ [0x32DD]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED KATAKANA SE",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x30BB },
+ ["unicodeslot"]=0x32DD, -- ã‹
+ },
+ [0x32DE]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED KATAKANA SO",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x30BD },
+ ["unicodeslot"]=0x32DE, -- ã‹ž
+ },
+ [0x32DF]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED KATAKANA TA",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x30BF },
+ ["unicodeslot"]=0x32DF, -- ã‹Ÿ
+ },
+ [0x32E0]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED KATAKANA TI",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x30C1 },
+ ["unicodeslot"]=0x32E0, -- ã‹ 
+ },
+ [0x32E1]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED KATAKANA TU",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x30C4 },
+ ["unicodeslot"]=0x32E1, -- ã‹¡
+ },
+ [0x32E2]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED KATAKANA TE",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x30C6 },
+ ["unicodeslot"]=0x32E2, -- ã‹¢
+ },
+ [0x32E3]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED KATAKANA TO",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x30C8 },
+ ["unicodeslot"]=0x32E3, -- ã‹£
+ },
+ [0x32E4]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED KATAKANA NA",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x30CA },
+ ["unicodeslot"]=0x32E4, -- ㋤
+ },
+ [0x32E5]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED KATAKANA NI",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x30CB },
+ ["unicodeslot"]=0x32E5, -- ã‹¥
+ },
+ [0x32E6]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED KATAKANA NU",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x30CC },
+ ["unicodeslot"]=0x32E6, -- ㋦
+ },
+ [0x32E7]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED KATAKANA NE",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x30CD },
+ ["unicodeslot"]=0x32E7, -- ㋧
+ },
+ [0x32E8]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED KATAKANA NO",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x30CE },
+ ["unicodeslot"]=0x32E8, -- ㋨
+ },
+ [0x32E9]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED KATAKANA HA",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x30CF },
+ ["unicodeslot"]=0x32E9, -- ã‹©
+ },
+ [0x32EA]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED KATAKANA HI",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x30D2 },
+ ["unicodeslot"]=0x32EA, -- ㋪
+ },
+ [0x32EB]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED KATAKANA HU",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x30D5 },
+ ["unicodeslot"]=0x32EB, -- ã‹«
+ },
+ [0x32EC]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED KATAKANA HE",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x30D8 },
+ ["unicodeslot"]=0x32EC, -- ㋬
+ },
+ [0x32ED]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED KATAKANA HO",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x30DB },
+ ["unicodeslot"]=0x32ED, -- ã‹­
+ },
+ [0x32EE]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED KATAKANA MA",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x30DE },
+ ["unicodeslot"]=0x32EE, -- ã‹®
+ },
+ [0x32EF]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED KATAKANA MI",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x30DF },
+ ["unicodeslot"]=0x32EF, -- ㋯
+ },
+ [0x32F0]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED KATAKANA MU",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x30E0 },
+ ["unicodeslot"]=0x32F0, -- ã‹°
+ },
+ [0x32F1]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED KATAKANA ME",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x30E1 },
+ ["unicodeslot"]=0x32F1, -- ㋱
+ },
+ [0x32F2]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED KATAKANA MO",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x30E2 },
+ ["unicodeslot"]=0x32F2, -- ㋲
+ },
+ [0x32F3]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED KATAKANA YA",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x30E4 },
+ ["unicodeslot"]=0x32F3, -- ㋳
+ },
+ [0x32F4]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED KATAKANA YU",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x30E6 },
+ ["unicodeslot"]=0x32F4, -- ã‹´
+ },
+ [0x32F5]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED KATAKANA YO",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x30E8 },
+ ["unicodeslot"]=0x32F5, -- ㋵
+ },
+ [0x32F6]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED KATAKANA RA",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x30E9 },
+ ["unicodeslot"]=0x32F6, -- ㋶
+ },
+ [0x32F7]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED KATAKANA RI",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x30EA },
+ ["unicodeslot"]=0x32F7, -- ã‹·
+ },
+ [0x32F8]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED KATAKANA RU",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x30EB },
+ ["unicodeslot"]=0x32F8, -- ㋸
+ },
+ [0x32F9]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED KATAKANA RE",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x30EC },
+ ["unicodeslot"]=0x32F9, -- ㋹
+ },
+ [0x32FA]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED KATAKANA RO",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x30ED },
+ ["unicodeslot"]=0x32FA, -- ㋺
+ },
+ [0x32FB]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED KATAKANA WA",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x30EF },
+ ["unicodeslot"]=0x32FB, -- ã‹»
+ },
+ [0x32FC]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED KATAKANA WI",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x30F0 },
+ ["unicodeslot"]=0x32FC, -- ㋼
+ },
+ [0x32FD]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED KATAKANA WE",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x30F1 },
+ ["unicodeslot"]=0x32FD, -- ㋽
+ },
+ [0x32FE]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="CIRCLED KATAKANA WO",
+ ["linebreak"]="id",
+ ["specials"]={ "circle", 0x30F2 },
+ ["unicodeslot"]=0x32FE, -- ㋾
+ },
+ [0x3300]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE APAATO",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30A2, 0x30D1, 0x30FC, 0x30C8 },
+ ["unicodeslot"]=0x3300, -- ㌀
+ },
+ [0x3301]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE ARUHUA",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30A2, 0x30EB, 0x30D5, 0x30A1 },
+ ["unicodeslot"]=0x3301, -- ãŒ
+ },
+ [0x3302]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE ANPEA",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30A2, 0x30F3, 0x30DA, 0x30A2 },
+ ["unicodeslot"]=0x3302, -- ㌂
+ },
+ [0x3303]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE AARU",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30A2, 0x30FC, 0x30EB },
+ ["unicodeslot"]=0x3303, -- ㌃
+ },
+ [0x3304]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE ININGU",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30A4, 0x30CB, 0x30F3, 0x30B0 },
+ ["unicodeslot"]=0x3304, -- ㌄
+ },
+ [0x3305]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE INTI",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30A4, 0x30F3, 0x30C1 },
+ ["unicodeslot"]=0x3305, -- ㌅
+ },
+ [0x3306]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE UON",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30A6, 0x30A9, 0x30F3 },
+ ["unicodeslot"]=0x3306, -- ㌆
+ },
+ [0x3307]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE ESUKUUDO",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30A8, 0x30B9, 0x30AF, 0x30FC, 0x30C9 },
+ ["unicodeslot"]=0x3307, -- ㌇
+ },
+ [0x3308]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE EEKAA",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30A8, 0x30FC, 0x30AB, 0x30FC },
+ ["unicodeslot"]=0x3308, -- ㌈
+ },
+ [0x3309]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE ONSU",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30AA, 0x30F3, 0x30B9 },
+ ["unicodeslot"]=0x3309, -- ㌉
+ },
+ [0x330A]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE OOMU",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30AA, 0x30FC, 0x30E0 },
+ ["unicodeslot"]=0x330A, -- ㌊
+ },
+ [0x330B]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE KAIRI",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30AB, 0x30A4, 0x30EA },
+ ["unicodeslot"]=0x330B, -- ㌋
+ },
+ [0x330C]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE KARATTO",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30AB, 0x30E9, 0x30C3, 0x30C8 },
+ ["unicodeslot"]=0x330C, -- ㌌
+ },
+ [0x330D]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE KARORII",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30AB, 0x30ED, 0x30EA, 0x30FC },
+ ["unicodeslot"]=0x330D, -- ãŒ
+ },
+ [0x330E]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE GARON",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30AC, 0x30ED, 0x30F3 },
+ ["unicodeslot"]=0x330E, -- ㌎
+ },
+ [0x330F]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE GANMA",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30AC, 0x30F3, 0x30DE },
+ ["unicodeslot"]=0x330F, -- ãŒ
+ },
+ [0x3310]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE GIGA",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30AE, 0x30AC },
+ ["unicodeslot"]=0x3310, -- ãŒ
+ },
+ [0x3311]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE GINII",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30AE, 0x30CB, 0x30FC },
+ ["unicodeslot"]=0x3311, -- ㌑
+ },
+ [0x3312]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE KYURII",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30AD, 0x30E5, 0x30EA, 0x30FC },
+ ["unicodeslot"]=0x3312, -- ㌒
+ },
+ [0x3313]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE GIRUDAA",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30AE, 0x30EB, 0x30C0, 0x30FC },
+ ["unicodeslot"]=0x3313, -- ㌓
+ },
+ [0x3314]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE KIRO",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30AD, 0x30ED },
+ ["unicodeslot"]=0x3314, -- ㌔
+ },
+ [0x3315]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE KIROGURAMU",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30AD, 0x30ED, 0x30B0, 0x30E9, 0x30E0 },
+ ["unicodeslot"]=0x3315, -- ㌕
+ },
+ [0x3316]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE KIROMEETORU",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30AD, 0x30ED, 0x30E1, 0x30FC, 0x30C8, 0x30EB },
+ ["unicodeslot"]=0x3316, -- ㌖
+ },
+ [0x3317]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE KIROWATTO",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30AD, 0x30ED, 0x30EF, 0x30C3, 0x30C8 },
+ ["unicodeslot"]=0x3317, -- ㌗
+ },
+ [0x3318]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE GURAMU",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30B0, 0x30E9, 0x30E0 },
+ ["unicodeslot"]=0x3318, -- ㌘
+ },
+ [0x3319]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE GURAMUTON",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30B0, 0x30E9, 0x30E0, 0x30C8, 0x30F3 },
+ ["unicodeslot"]=0x3319, -- ㌙
+ },
+ [0x331A]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE KURUZEIRO",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30AF, 0x30EB, 0x30BC, 0x30A4, 0x30ED },
+ ["unicodeslot"]=0x331A, -- ㌚
+ },
+ [0x331B]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE KUROONE",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30AF, 0x30ED, 0x30FC, 0x30CD },
+ ["unicodeslot"]=0x331B, -- ㌛
+ },
+ [0x331C]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE KEESU",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30B1, 0x30FC, 0x30B9 },
+ ["unicodeslot"]=0x331C, -- ㌜
+ },
+ [0x331D]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE KORUNA",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30B3, 0x30EB, 0x30CA },
+ ["unicodeslot"]=0x331D, -- ãŒ
+ },
+ [0x331E]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE KOOPO",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30B3, 0x30FC, 0x30DD },
+ ["unicodeslot"]=0x331E, -- ㌞
+ },
+ [0x331F]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE SAIKURU",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30B5, 0x30A4, 0x30AF, 0x30EB },
+ ["unicodeslot"]=0x331F, -- ㌟
+ },
+ [0x3320]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE SANTIIMU",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30B5, 0x30F3, 0x30C1, 0x30FC, 0x30E0 },
+ ["unicodeslot"]=0x3320, -- ㌠
+ },
+ [0x3321]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE SIRINGU",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30B7, 0x30EA, 0x30F3, 0x30B0 },
+ ["unicodeslot"]=0x3321, -- ㌡
+ },
+ [0x3322]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE SENTI",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30BB, 0x30F3, 0x30C1 },
+ ["unicodeslot"]=0x3322, -- ㌢
+ },
+ [0x3323]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE SENTO",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30BB, 0x30F3, 0x30C8 },
+ ["unicodeslot"]=0x3323, -- ㌣
+ },
+ [0x3324]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE DAASU",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30C0, 0x30FC, 0x30B9 },
+ ["unicodeslot"]=0x3324, -- ㌤
+ },
+ [0x3325]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE DESI",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30C7, 0x30B7 },
+ ["unicodeslot"]=0x3325, -- ㌥
+ },
+ [0x3326]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE DORU",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30C9, 0x30EB },
+ ["unicodeslot"]=0x3326, -- ㌦
+ },
+ [0x3327]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE TON",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30C8, 0x30F3 },
+ ["unicodeslot"]=0x3327, -- ㌧
+ },
+ [0x3328]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE NANO",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30CA, 0x30CE },
+ ["unicodeslot"]=0x3328, -- ㌨
+ },
+ [0x3329]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE NOTTO",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30CE, 0x30C3, 0x30C8 },
+ ["unicodeslot"]=0x3329, -- ㌩
+ },
+ [0x332A]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE HAITU",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30CF, 0x30A4, 0x30C4 },
+ ["unicodeslot"]=0x332A, -- ㌪
+ },
+ [0x332B]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE PAASENTO",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30D1, 0x30FC, 0x30BB, 0x30F3, 0x30C8 },
+ ["unicodeslot"]=0x332B, -- ㌫
+ },
+ [0x332C]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE PAATU",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30D1, 0x30FC, 0x30C4 },
+ ["unicodeslot"]=0x332C, -- ㌬
+ },
+ [0x332D]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE BAARERU",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30D0, 0x30FC, 0x30EC, 0x30EB },
+ ["unicodeslot"]=0x332D, -- ㌭
+ },
+ [0x332E]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE PIASUTORU",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30D4, 0x30A2, 0x30B9, 0x30C8, 0x30EB },
+ ["unicodeslot"]=0x332E, -- ㌮
+ },
+ [0x332F]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE PIKURU",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30D4, 0x30AF, 0x30EB },
+ ["unicodeslot"]=0x332F, -- ㌯
+ },
+ [0x3330]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE PIKO",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30D4, 0x30B3 },
+ ["unicodeslot"]=0x3330, -- ㌰
+ },
+ [0x3331]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE BIRU",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30D3, 0x30EB },
+ ["unicodeslot"]=0x3331, -- ㌱
+ },
+ [0x3332]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE HUARADDO",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30D5, 0x30A1, 0x30E9, 0x30C3, 0x30C9 },
+ ["unicodeslot"]=0x3332, -- ㌲
+ },
+ [0x3333]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE HUIITO",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30D5, 0x30A3, 0x30FC, 0x30C8 },
+ ["unicodeslot"]=0x3333, -- ㌳
+ },
+ [0x3334]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE BUSSYERU",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30D6, 0x30C3, 0x30B7, 0x30A7, 0x30EB },
+ ["unicodeslot"]=0x3334, -- ㌴
+ },
+ [0x3335]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE HURAN",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30D5, 0x30E9, 0x30F3 },
+ ["unicodeslot"]=0x3335, -- ㌵
+ },
+ [0x3336]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE HEKUTAARU",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30D8, 0x30AF, 0x30BF, 0x30FC, 0x30EB },
+ ["unicodeslot"]=0x3336, -- ㌶
+ },
+ [0x3337]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE PESO",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30DA, 0x30BD },
+ ["unicodeslot"]=0x3337, -- ㌷
+ },
+ [0x3338]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE PENIHI",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30DA, 0x30CB, 0x30D2 },
+ ["unicodeslot"]=0x3338, -- ㌸
+ },
+ [0x3339]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE HERUTU",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30D8, 0x30EB, 0x30C4 },
+ ["unicodeslot"]=0x3339, -- ㌹
+ },
+ [0x333A]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE PENSU",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30DA, 0x30F3, 0x30B9 },
+ ["unicodeslot"]=0x333A, -- ㌺
+ },
+ [0x333B]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE PEEZI",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30DA, 0x30FC, 0x30B8 },
+ ["unicodeslot"]=0x333B, -- ㌻
+ },
+ [0x333C]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE BEETA",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30D9, 0x30FC, 0x30BF },
+ ["unicodeslot"]=0x333C, -- ㌼
+ },
+ [0x333D]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE POINTO",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30DD, 0x30A4, 0x30F3, 0x30C8 },
+ ["unicodeslot"]=0x333D, -- ㌽
+ },
+ [0x333E]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE BORUTO",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30DC, 0x30EB, 0x30C8 },
+ ["unicodeslot"]=0x333E, -- ㌾
+ },
+ [0x333F]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE HON",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30DB, 0x30F3 },
+ ["unicodeslot"]=0x333F, -- ㌿
+ },
+ [0x3340]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE PONDO",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30DD, 0x30F3, 0x30C9 },
+ ["unicodeslot"]=0x3340, -- ã€
+ },
+ [0x3341]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE HOORU",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30DB, 0x30FC, 0x30EB },
+ ["unicodeslot"]=0x3341, -- ã
+ },
+ [0x3342]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE HOON",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30DB, 0x30FC, 0x30F3 },
+ ["unicodeslot"]=0x3342, -- ã‚
+ },
+ [0x3343]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE MAIKURO",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30DE, 0x30A4, 0x30AF, 0x30ED },
+ ["unicodeslot"]=0x3343, -- ãƒ
+ },
+ [0x3344]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE MAIRU",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30DE, 0x30A4, 0x30EB },
+ ["unicodeslot"]=0x3344, -- ã„
+ },
+ [0x3345]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE MAHHA",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30DE, 0x30C3, 0x30CF },
+ ["unicodeslot"]=0x3345, -- ã…
+ },
+ [0x3346]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE MARUKU",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30DE, 0x30EB, 0x30AF },
+ ["unicodeslot"]=0x3346, -- ã†
+ },
+ [0x3347]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE MANSYON",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30DE, 0x30F3, 0x30B7, 0x30E7, 0x30F3 },
+ ["unicodeslot"]=0x3347, -- ã‡
+ },
+ [0x3348]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE MIKURON",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30DF, 0x30AF, 0x30ED, 0x30F3 },
+ ["unicodeslot"]=0x3348, -- ãˆ
+ },
+ [0x3349]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE MIRI",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30DF, 0x30EA },
+ ["unicodeslot"]=0x3349, -- ã‰
+ },
+ [0x334A]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE MIRIBAARU",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30DF, 0x30EA, 0x30D0, 0x30FC, 0x30EB },
+ ["unicodeslot"]=0x334A, -- ãŠ
+ },
+ [0x334B]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE MEGA",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30E1, 0x30AC },
+ ["unicodeslot"]=0x334B, -- ã‹
+ },
+ [0x334C]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE MEGATON",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30E1, 0x30AC, 0x30C8, 0x30F3 },
+ ["unicodeslot"]=0x334C, -- ãŒ
+ },
+ [0x334D]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE MEETORU",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30E1, 0x30FC, 0x30C8, 0x30EB },
+ ["unicodeslot"]=0x334D, -- ã
+ },
+ [0x334E]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE YAADO",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30E4, 0x30FC, 0x30C9 },
+ ["unicodeslot"]=0x334E, -- ãŽ
+ },
+ [0x334F]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE YAARU",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30E4, 0x30FC, 0x30EB },
+ ["unicodeslot"]=0x334F, -- ã
+ },
+ [0x3350]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE YUAN",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30E6, 0x30A2, 0x30F3 },
+ ["unicodeslot"]=0x3350, -- ã
+ },
+ [0x3351]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE RITTORU",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30EA, 0x30C3, 0x30C8, 0x30EB },
+ ["unicodeslot"]=0x3351, -- ã‘
+ },
+ [0x3352]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE RIRA",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30EA, 0x30E9 },
+ ["unicodeslot"]=0x3352, -- ã’
+ },
+ [0x3353]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE RUPII",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30EB, 0x30D4, 0x30FC },
+ ["unicodeslot"]=0x3353, -- ã“
+ },
+ [0x3354]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE RUUBURU",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30EB, 0x30FC, 0x30D6, 0x30EB },
+ ["unicodeslot"]=0x3354, -- ã”
+ },
+ [0x3355]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE REMU",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30EC, 0x30E0 },
+ ["unicodeslot"]=0x3355, -- ã•
+ },
+ [0x3356]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE RENTOGEN",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30EC, 0x30F3, 0x30C8, 0x30B2, 0x30F3 },
+ ["unicodeslot"]=0x3356, -- ã–
+ },
+ [0x3357]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE WATTO",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x30EF, 0x30C3, 0x30C8 },
+ ["unicodeslot"]=0x3357, -- ã—
+ },
+ [0x3358]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0030, 0x70B9 },
+ ["unicodeslot"]=0x3358, -- ã˜
+ },
+ [0x3359]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0031, 0x70B9 },
+ ["unicodeslot"]=0x3359, -- ã™
+ },
+ [0x335A]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0032, 0x70B9 },
+ ["unicodeslot"]=0x335A, -- ãš
+ },
+ [0x335B]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0033, 0x70B9 },
+ ["unicodeslot"]=0x335B, -- ã›
+ },
+ [0x335C]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0034, 0x70B9 },
+ ["unicodeslot"]=0x335C, -- ãœ
+ },
+ [0x335D]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0035, 0x70B9 },
+ ["unicodeslot"]=0x335D, -- ã
+ },
+ [0x335E]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0036, 0x70B9 },
+ ["unicodeslot"]=0x335E, -- ãž
+ },
+ [0x335F]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0037, 0x70B9 },
+ ["unicodeslot"]=0x335F, -- ãŸ
+ },
+ [0x3360]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0038, 0x70B9 },
+ ["unicodeslot"]=0x3360, -- ã 
+ },
+ [0x3361]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0039, 0x70B9 },
+ ["unicodeslot"]=0x3361, -- ã¡
+ },
+ [0x3362]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0031, 0x0030, 0x70B9 },
+ ["unicodeslot"]=0x3362, -- ã¢
+ },
+ [0x3363]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0031, 0x0031, 0x70B9 },
+ ["unicodeslot"]=0x3363, -- ã£
+ },
+ [0x3364]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0031, 0x0032, 0x70B9 },
+ ["unicodeslot"]=0x3364, -- ã¤
+ },
+ [0x3365]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0031, 0x0033, 0x70B9 },
+ ["unicodeslot"]=0x3365, -- ã¥
+ },
+ [0x3366]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0031, 0x0034, 0x70B9 },
+ ["unicodeslot"]=0x3366, -- ã¦
+ },
+ [0x3367]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0031, 0x0035, 0x70B9 },
+ ["unicodeslot"]=0x3367, -- ã§
+ },
+ [0x3368]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0031, 0x0036, 0x70B9 },
+ ["unicodeslot"]=0x3368, -- ã¨
+ },
+ [0x3369]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0031, 0x0037, 0x70B9 },
+ ["unicodeslot"]=0x3369, -- ã©
+ },
+ [0x336A]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0031, 0x0038, 0x70B9 },
+ ["unicodeslot"]=0x336A, -- ãª
+ },
+ [0x336B]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0031, 0x0039, 0x70B9 },
+ ["unicodeslot"]=0x336B, -- ã«
+ },
+ [0x336C]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0032, 0x0030, 0x70B9 },
+ ["unicodeslot"]=0x336C, -- ã¬
+ },
+ [0x336D]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0032, 0x0031, 0x70B9 },
+ ["unicodeslot"]=0x336D, -- ã­
+ },
+ [0x336E]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0032, 0x0032, 0x70B9 },
+ ["unicodeslot"]=0x336E, -- ã®
+ },
+ [0x336F]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0032, 0x0033, 0x70B9 },
+ ["unicodeslot"]=0x336F, -- ã¯
+ },
+ [0x3370]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0032, 0x0034, 0x70B9 },
+ ["unicodeslot"]=0x3370, -- ã°
+ },
+ [0x3371]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE HPA",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x0068, 0x0050, 0x0061 },
+ ["unicodeslot"]=0x3371, -- ã±
+ },
+ [0x3372]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE DA",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x0064, 0x0061 },
+ ["unicodeslot"]=0x3372, -- ã²
+ },
+ [0x3373]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE AU",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x0041, 0x0055 },
+ ["unicodeslot"]=0x3373, -- ã³
+ },
+ [0x3374]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE BAR",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x0062, 0x0061, 0x0072 },
+ ["unicodeslot"]=0x3374, -- ã´
+ },
+ [0x3375]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE OV",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x006F, 0x0056 },
+ ["unicodeslot"]=0x3375, -- ãµ
+ },
+ [0x3376]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE PC",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x0070, 0x0063 },
+ ["unicodeslot"]=0x3376, -- ã¶
+ },
+ [0x3377]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE DM",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x0064, 0x006D },
+ ["unicodeslot"]=0x3377, -- ã·
+ },
+ [0x3378]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE DM SQUARED",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x0064, 0x006D, 0x00B2 },
+ ["unicodeslot"]=0x3378, -- ã¸
+ },
+ [0x3379]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE DM CUBED",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x0064, 0x006D, 0x00B3 },
+ ["unicodeslot"]=0x3379, -- ã¹
+ },
+ [0x337A]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE IU",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x0049, 0x0055 },
+ ["unicodeslot"]=0x337A, -- ãº
+ },
+ [0x337B]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE ERA NAME HEISEI",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x5E73, 0x6210 },
+ ["unicodeslot"]=0x337B, -- ã»
+ },
+ [0x337C]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE ERA NAME SYOUWA",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x662D, 0x548C },
+ ["unicodeslot"]=0x337C, -- ã¼
+ },
+ [0x337D]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE ERA NAME TAISYOU",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x5927, 0x6B63 },
+ ["unicodeslot"]=0x337D, -- ã½
+ },
+ [0x337E]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE ERA NAME MEIZI",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x660E, 0x6CBB },
+ ["unicodeslot"]=0x337E, -- ã¾
+ },
+ [0x337F]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE CORPORATION",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x682A, 0x5F0F, 0x4F1A, 0x793E },
+ ["unicodeslot"]=0x337F, -- ã¿
+ },
+ [0x3380]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE PA AMPS",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x0070, 0x0041 },
+ ["unicodeslot"]=0x3380, -- ㎀
+ },
+ [0x3381]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE NA",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x006E, 0x0041 },
+ ["unicodeslot"]=0x3381, -- ãŽ
+ },
+ [0x3382]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE MU A",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x03BC, 0x0041 },
+ ["unicodeslot"]=0x3382, -- ㎂
+ },
+ [0x3383]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE MA",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x006D, 0x0041 },
+ ["unicodeslot"]=0x3383, -- ㎃
+ },
+ [0x3384]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE KA",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x006B, 0x0041 },
+ ["unicodeslot"]=0x3384, -- ㎄
+ },
+ [0x3385]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE KB",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x004B, 0x0042 },
+ ["unicodeslot"]=0x3385, -- ㎅
+ },
+ [0x3386]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE MB",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x004D, 0x0042 },
+ ["unicodeslot"]=0x3386, -- ㎆
+ },
+ [0x3387]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE GB",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x0047, 0x0042 },
+ ["unicodeslot"]=0x3387, -- ㎇
+ },
+ [0x3388]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE CAL",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x0063, 0x0061, 0x006C },
+ ["unicodeslot"]=0x3388, -- ㎈
+ },
+ [0x3389]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE KCAL",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x006B, 0x0063, 0x0061, 0x006C },
+ ["unicodeslot"]=0x3389, -- ㎉
+ },
+ [0x338A]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE PF",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x0070, 0x0046 },
+ ["unicodeslot"]=0x338A, -- ㎊
+ },
+ [0x338B]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE NF",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x006E, 0x0046 },
+ ["unicodeslot"]=0x338B, -- ㎋
+ },
+ [0x338C]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE MU F",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x03BC, 0x0046 },
+ ["unicodeslot"]=0x338C, -- ㎌
+ },
+ [0x338D]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE MU G",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x03BC, 0x0067 },
+ ["unicodeslot"]=0x338D, -- ãŽ
+ },
+ [0x338E]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE MG",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x006D, 0x0067 },
+ ["unicodeslot"]=0x338E, -- ㎎
+ },
+ [0x338F]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE KG",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x006B, 0x0067 },
+ ["unicodeslot"]=0x338F, -- ãŽ
+ },
+ [0x3390]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE HZ",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x0048, 0x007A },
+ ["unicodeslot"]=0x3390, -- ãŽ
+ },
+ [0x3391]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE KHZ",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x006B, 0x0048, 0x007A },
+ ["unicodeslot"]=0x3391, -- ㎑
+ },
+ [0x3392]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE MHZ",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x004D, 0x0048, 0x007A },
+ ["unicodeslot"]=0x3392, -- ㎒
+ },
+ [0x3393]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE GHZ",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x0047, 0x0048, 0x007A },
+ ["unicodeslot"]=0x3393, -- ㎓
+ },
+ [0x3394]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE THZ",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x0054, 0x0048, 0x007A },
+ ["unicodeslot"]=0x3394, -- ㎔
+ },
+ [0x3395]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE MU L",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x03BC, 0x2113 },
+ ["unicodeslot"]=0x3395, -- ㎕
+ },
+ [0x3396]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE ML",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x006D, 0x2113 },
+ ["unicodeslot"]=0x3396, -- ㎖
+ },
+ [0x3397]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE DL",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x0064, 0x2113 },
+ ["unicodeslot"]=0x3397, -- ㎗
+ },
+ [0x3398]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE KL",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x006B, 0x2113 },
+ ["unicodeslot"]=0x3398, -- ㎘
+ },
+ [0x3399]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE FM",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x0066, 0x006D },
+ ["unicodeslot"]=0x3399, -- ㎙
+ },
+ [0x339A]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE NM",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x006E, 0x006D },
+ ["unicodeslot"]=0x339A, -- ㎚
+ },
+ [0x339B]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE MU M",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x03BC, 0x006D },
+ ["unicodeslot"]=0x339B, -- ㎛
+ },
+ [0x339C]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE MM",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x006D, 0x006D },
+ ["unicodeslot"]=0x339C, -- ㎜
+ },
+ [0x339D]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE CM",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x0063, 0x006D },
+ ["unicodeslot"]=0x339D, -- ãŽ
+ },
+ [0x339E]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE KM",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x006B, 0x006D },
+ ["unicodeslot"]=0x339E, -- ㎞
+ },
+ [0x339F]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE MM SQUARED",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x006D, 0x006D, 0x00B2 },
+ ["unicodeslot"]=0x339F, -- ㎟
+ },
+ [0x33A0]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE CM SQUARED",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x0063, 0x006D, 0x00B2 },
+ ["unicodeslot"]=0x33A0, -- ㎠
+ },
+ [0x33A1]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE M SQUARED",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x006D, 0x00B2 },
+ ["unicodeslot"]=0x33A1, -- ㎡
+ },
+ [0x33A2]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE KM SQUARED",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x006B, 0x006D, 0x00B2 },
+ ["unicodeslot"]=0x33A2, -- ㎢
+ },
+ [0x33A3]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE MM CUBED",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x006D, 0x006D, 0x00B3 },
+ ["unicodeslot"]=0x33A3, -- ㎣
+ },
+ [0x33A4]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE CM CUBED",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x0063, 0x006D, 0x00B3 },
+ ["unicodeslot"]=0x33A4, -- ㎤
+ },
+ [0x33A5]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE M CUBED",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x006D, 0x00B3 },
+ ["unicodeslot"]=0x33A5, -- ㎥
+ },
+ [0x33A6]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE KM CUBED",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x006B, 0x006D, 0x00B3 },
+ ["unicodeslot"]=0x33A6, -- ㎦
+ },
+ [0x33A7]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE M OVER S",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x006D, 0x2215, 0x0073 },
+ ["unicodeslot"]=0x33A7, -- ㎧
+ },
+ [0x33A8]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE M OVER S SQUARED",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x006D, 0x2215, 0x0073, 0x00B2 },
+ ["unicodeslot"]=0x33A8, -- ㎨
+ },
+ [0x33A9]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE PA",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x0050, 0x0061 },
+ ["unicodeslot"]=0x33A9, -- ㎩
+ },
+ [0x33AA]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE KPA",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x006B, 0x0050, 0x0061 },
+ ["unicodeslot"]=0x33AA, -- ㎪
+ },
+ [0x33AB]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE MPA",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x004D, 0x0050, 0x0061 },
+ ["unicodeslot"]=0x33AB, -- ㎫
+ },
+ [0x33AC]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE GPA",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x0047, 0x0050, 0x0061 },
+ ["unicodeslot"]=0x33AC, -- ㎬
+ },
+ [0x33AD]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE RAD",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x0072, 0x0061, 0x0064 },
+ ["unicodeslot"]=0x33AD, -- ㎭
+ },
+ [0x33AE]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE RAD OVER S",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x0072, 0x0061, 0x0064, 0x2215, 0x0073 },
+ ["unicodeslot"]=0x33AE, -- ㎮
+ },
+ [0x33AF]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE RAD OVER S SQUARED",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x0072, 0x0061, 0x0064, 0x2215, 0x0073, 0x00B2 },
+ ["unicodeslot"]=0x33AF, -- ㎯
+ },
+ [0x33B0]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE PS",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x0070, 0x0073 },
+ ["unicodeslot"]=0x33B0, -- ㎰
+ },
+ [0x33B1]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE NS",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x006E, 0x0073 },
+ ["unicodeslot"]=0x33B1, -- ㎱
+ },
+ [0x33B2]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE MU S",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x03BC, 0x0073 },
+ ["unicodeslot"]=0x33B2, -- ㎲
+ },
+ [0x33B3]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE MS",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x006D, 0x0073 },
+ ["unicodeslot"]=0x33B3, -- ㎳
+ },
+ [0x33B4]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE PV",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x0070, 0x0056 },
+ ["unicodeslot"]=0x33B4, -- ㎴
+ },
+ [0x33B5]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE NV",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x006E, 0x0056 },
+ ["unicodeslot"]=0x33B5, -- ㎵
+ },
+ [0x33B6]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE MU V",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x03BC, 0x0056 },
+ ["unicodeslot"]=0x33B6, -- ㎶
+ },
+ [0x33B7]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE MV",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x006D, 0x0056 },
+ ["unicodeslot"]=0x33B7, -- ㎷
+ },
+ [0x33B8]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE KV",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x006B, 0x0056 },
+ ["unicodeslot"]=0x33B8, -- ㎸
+ },
+ [0x33B9]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE MV MEGA",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x004D, 0x0056 },
+ ["unicodeslot"]=0x33B9, -- ㎹
+ },
+ [0x33BA]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE PW",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x0070, 0x0057 },
+ ["unicodeslot"]=0x33BA, -- ㎺
+ },
+ [0x33BB]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE NW",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x006E, 0x0057 },
+ ["unicodeslot"]=0x33BB, -- ㎻
+ },
+ [0x33BC]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE MU W",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x03BC, 0x0057 },
+ ["unicodeslot"]=0x33BC, -- ㎼
+ },
+ [0x33BD]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE MW",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x006D, 0x0057 },
+ ["unicodeslot"]=0x33BD, -- ㎽
+ },
+ [0x33BE]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE KW",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x006B, 0x0057 },
+ ["unicodeslot"]=0x33BE, -- ㎾
+ },
+ [0x33BF]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE MW MEGA",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x004D, 0x0057 },
+ ["unicodeslot"]=0x33BF, -- ㎿
+ },
+ [0x33C0]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE K OHM",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x006B, 0x03A9 },
+ ["unicodeslot"]=0x33C0, -- ã€
+ },
+ [0x33C1]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE M OHM",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x004D, 0x03A9 },
+ ["unicodeslot"]=0x33C1, -- ã
+ },
+ [0x33C2]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE AM",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x0061, 0x002E, 0x006D, 0x002E },
+ ["unicodeslot"]=0x33C2, -- ã‚
+ },
+ [0x33C3]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE BQ",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x0042, 0x0071 },
+ ["unicodeslot"]=0x33C3, -- ãƒ
+ },
+ [0x33C4]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE CC",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x0063, 0x0063 },
+ ["unicodeslot"]=0x33C4, -- ã„
+ },
+ [0x33C5]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE CD",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x0063, 0x0064 },
+ ["unicodeslot"]=0x33C5, -- ã…
+ },
+ [0x33C6]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE C OVER KG",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x0043, 0x2215, 0x006B, 0x0067 },
+ ["unicodeslot"]=0x33C6, -- ã†
+ },
+ [0x33C7]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE CO",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x0043, 0x006F, 0x002E },
+ ["unicodeslot"]=0x33C7, -- ã‡
+ },
+ [0x33C8]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE DB",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x0064, 0x0042 },
+ ["unicodeslot"]=0x33C8, -- ãˆ
+ },
+ [0x33C9]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE GY",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x0047, 0x0079 },
+ ["unicodeslot"]=0x33C9, -- ã‰
+ },
+ [0x33CA]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE HA",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x0068, 0x0061 },
+ ["unicodeslot"]=0x33CA, -- ãŠ
+ },
+ [0x33CB]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE HP",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x0048, 0x0050 },
+ ["unicodeslot"]=0x33CB, -- ã‹
+ },
+ [0x33CC]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE IN",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x0069, 0x006E },
+ ["unicodeslot"]=0x33CC, -- ãŒ
+ },
+ [0x33CD]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE KK",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x004B, 0x004B },
+ ["unicodeslot"]=0x33CD, -- ã
+ },
+ [0x33CE]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE KM CAPITAL",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x004B, 0x004D },
+ ["unicodeslot"]=0x33CE, -- ãŽ
+ },
+ [0x33CF]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE KT",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x006B, 0x0074 },
+ ["unicodeslot"]=0x33CF, -- ã
+ },
+ [0x33D0]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE LM",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x006C, 0x006D },
+ ["unicodeslot"]=0x33D0, -- ã
+ },
+ [0x33D1]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE LN",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x006C, 0x006E },
+ ["unicodeslot"]=0x33D1, -- ã‘
+ },
+ [0x33D2]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE LOG",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x006C, 0x006F, 0x0067 },
+ ["unicodeslot"]=0x33D2, -- ã’
+ },
+ [0x33D3]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE LX",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x006C, 0x0078 },
+ ["unicodeslot"]=0x33D3, -- ã“
+ },
+ [0x33D4]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE MB SMALL",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x006D, 0x0062 },
+ ["unicodeslot"]=0x33D4, -- ã”
+ },
+ [0x33D5]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE MIL",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x006D, 0x0069, 0x006C },
+ ["unicodeslot"]=0x33D5, -- ã•
+ },
+ [0x33D6]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE MOL",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x006D, 0x006F, 0x006C },
+ ["unicodeslot"]=0x33D6, -- ã–
+ },
+ [0x33D7]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE PH",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x0050, 0x0048 },
+ ["unicodeslot"]=0x33D7, -- ã—
+ },
+ [0x33D8]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE PM",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x0070, 0x002E, 0x006D, 0x002E },
+ ["unicodeslot"]=0x33D8, -- ã˜
+ },
+ [0x33D9]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE PPM",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x0050, 0x0050, 0x004D },
+ ["unicodeslot"]=0x33D9, -- ã™
+ },
+ [0x33DA]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE PR",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x0050, 0x0052 },
+ ["unicodeslot"]=0x33DA, -- ãš
+ },
+ [0x33DB]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE SR",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x0073, 0x0072 },
+ ["unicodeslot"]=0x33DB, -- ã›
+ },
+ [0x33DC]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE SV",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x0053, 0x0076 },
+ ["unicodeslot"]=0x33DC, -- ãœ
+ },
+ [0x33DD]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE WB",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x0057, 0x0062 },
+ ["unicodeslot"]=0x33DD, -- ã
+ },
+ [0x33DE]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE V OVER M",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x0056, 0x2215, 0x006D },
+ ["unicodeslot"]=0x33DE, -- ãž
+ },
+ [0x33DF]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE A OVER M",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x0041, 0x2215, 0x006D },
+ ["unicodeslot"]=0x33DF, -- ãŸ
+ },
+ [0x33E0]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0031, 0x65E5 },
+ ["unicodeslot"]=0x33E0, -- ã 
+ },
+ [0x33E1]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0032, 0x65E5 },
+ ["unicodeslot"]=0x33E1, -- ã¡
+ },
+ [0x33E2]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0033, 0x65E5 },
+ ["unicodeslot"]=0x33E2, -- ã¢
+ },
+ [0x33E3]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0034, 0x65E5 },
+ ["unicodeslot"]=0x33E3, -- ã£
+ },
+ [0x33E4]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0035, 0x65E5 },
+ ["unicodeslot"]=0x33E4, -- ã¤
+ },
+ [0x33E5]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0036, 0x65E5 },
+ ["unicodeslot"]=0x33E5, -- ã¥
+ },
+ [0x33E6]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0037, 0x65E5 },
+ ["unicodeslot"]=0x33E6, -- ã¦
+ },
+ [0x33E7]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0038, 0x65E5 },
+ ["unicodeslot"]=0x33E7, -- ã§
+ },
+ [0x33E8]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0039, 0x65E5 },
+ ["unicodeslot"]=0x33E8, -- ã¨
+ },
+ [0x33E9]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0031, 0x0030, 0x65E5 },
+ ["unicodeslot"]=0x33E9, -- ã©
+ },
+ [0x33EA]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0031, 0x0031, 0x65E5 },
+ ["unicodeslot"]=0x33EA, -- ãª
+ },
+ [0x33EB]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0031, 0x0032, 0x65E5 },
+ ["unicodeslot"]=0x33EB, -- ã«
+ },
+ [0x33EC]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0031, 0x0033, 0x65E5 },
+ ["unicodeslot"]=0x33EC, -- ã¬
+ },
+ [0x33ED]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0031, 0x0034, 0x65E5 },
+ ["unicodeslot"]=0x33ED, -- ã­
+ },
+ [0x33EE]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0031, 0x0035, 0x65E5 },
+ ["unicodeslot"]=0x33EE, -- ã®
+ },
+ [0x33EF]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0031, 0x0036, 0x65E5 },
+ ["unicodeslot"]=0x33EF, -- ã¯
+ },
+ [0x33F0]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0031, 0x0037, 0x65E5 },
+ ["unicodeslot"]=0x33F0, -- ã°
+ },
+ [0x33F1]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0031, 0x0038, 0x65E5 },
+ ["unicodeslot"]=0x33F1, -- ã±
+ },
+ [0x33F2]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0031, 0x0039, 0x65E5 },
+ ["unicodeslot"]=0x33F2, -- ã²
+ },
+ [0x33F3]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0032, 0x0030, 0x65E5 },
+ ["unicodeslot"]=0x33F3, -- ã³
+ },
+ [0x33F4]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0032, 0x0031, 0x65E5 },
+ ["unicodeslot"]=0x33F4, -- ã´
+ },
+ [0x33F5]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0032, 0x0032, 0x65E5 },
+ ["unicodeslot"]=0x33F5, -- ãµ
+ },
+ [0x33F6]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0032, 0x0033, 0x65E5 },
+ ["unicodeslot"]=0x33F6, -- ã¶
+ },
+ [0x33F7]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0032, 0x0034, 0x65E5 },
+ ["unicodeslot"]=0x33F7, -- ã·
+ },
+ [0x33F8]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0032, 0x0035, 0x65E5 },
+ ["unicodeslot"]=0x33F8, -- ã¸
+ },
+ [0x33F9]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0032, 0x0036, 0x65E5 },
+ ["unicodeslot"]=0x33F9, -- ã¹
+ },
+ [0x33FA]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0032, 0x0037, 0x65E5 },
+ ["unicodeslot"]=0x33FA, -- ãº
+ },
+ [0x33FB]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0032, 0x0038, 0x65E5 },
+ ["unicodeslot"]=0x33FB, -- ã»
+ },
+ [0x33FC]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0032, 0x0039, 0x65E5 },
+ ["unicodeslot"]=0x33FC, -- ã¼
+ },
+ [0x33FD]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0033, 0x0030, 0x65E5 },
+ ["unicodeslot"]=0x33FD, -- ã½
+ },
+ [0x33FE]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x0033, 0x0031, 0x65E5 },
+ ["unicodeslot"]=0x33FE, -- ã¾
+ },
+ [0x33FF]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="SQUARE GAL",
+ ["linebreak"]="id",
+ ["specials"]={ "square", 0x0067, 0x0061, 0x006C },
+ ["unicodeslot"]=0x33FF, -- ã¿
+ },
+ [0x3400]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="<CJK Ideograph Extension A, First>",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x3400, -- ã€
+ },
+ [0x4DB5]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="<CJK Ideograph Extension A, Last>",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x4DB5, -- 䶵
+ },
+ [0x4DC0]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR THE CREATIVE HEAVEN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DC0, -- ä·€
+ },
+ [0x4DC1]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR THE RECEPTIVE EARTH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DC1, -- ä·
+ },
+ [0x4DC2]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR DIFFICULTY AT THE BEGINNING",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DC2, -- ä·‚
+ },
+ [0x4DC3]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR YOUTHFUL FOLLY",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DC3, -- ä·ƒ
+ },
+ [0x4DC4]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR WAITING",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DC4, -- ä·„
+ },
+ [0x4DC5]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR CONFLICT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DC5, -- ä·…
+ },
+ [0x4DC6]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR THE ARMY",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DC6, -- ä·†
+ },
+ [0x4DC7]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR HOLDING TOGETHER",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DC7, -- ä·‡
+ },
+ [0x4DC8]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR SMALL TAMING",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DC8, -- ä·ˆ
+ },
+ [0x4DC9]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR TREADING",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DC9, -- ä·‰
+ },
+ [0x4DCA]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR PEACE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DCA, -- ä·Š
+ },
+ [0x4DCB]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR STANDSTILL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DCB, -- ä·‹
+ },
+ [0x4DCC]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR FELLOWSHIP",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DCC, -- ䷌
+ },
+ [0x4DCD]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR GREAT POSSESSION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DCD, -- ä·
+ },
+ [0x4DCE]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR MODESTY",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DCE, -- ä·Ž
+ },
+ [0x4DCF]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR ENTHUSIASM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DCF, -- ä·
+ },
+ [0x4DD0]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR FOLLOWING",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DD0, -- ä·
+ },
+ [0x4DD1]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR WORK ON THE DECAYED",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DD1, -- ä·‘
+ },
+ [0x4DD2]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR APPROACH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DD2, -- ä·’
+ },
+ [0x4DD3]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR CONTEMPLATION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DD3, -- ä·“
+ },
+ [0x4DD4]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR BITING THROUGH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DD4, -- ä·”
+ },
+ [0x4DD5]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR GRACE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DD5, -- ä·•
+ },
+ [0x4DD6]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR SPLITTING APART",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DD6, -- ä·–
+ },
+ [0x4DD7]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR RETURN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DD7, -- ä·—
+ },
+ [0x4DD8]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR INNOCENCE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DD8, -- ä·˜
+ },
+ [0x4DD9]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR GREAT TAMING",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DD9, -- ä·™
+ },
+ [0x4DDA]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR MOUTH CORNERS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DDA, -- ä·š
+ },
+ [0x4DDB]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR GREAT PREPONDERANCE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DDB, -- ä·›
+ },
+ [0x4DDC]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR THE ABYSMAL WATER",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DDC, -- ䷜
+ },
+ [0x4DDD]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR THE CLINGING FIRE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DDD, -- ä·
+ },
+ [0x4DDE]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR INFLUENCE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DDE, -- ä·ž
+ },
+ [0x4DDF]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR DURATION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DDF, -- ä·Ÿ
+ },
+ [0x4DE0]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR RETREAT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DE0, -- ä· 
+ },
+ [0x4DE1]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR GREAT POWER",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DE1, -- ä·¡
+ },
+ [0x4DE2]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR PROGRESS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DE2, -- ä·¢
+ },
+ [0x4DE3]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR DARKENING OF THE LIGHT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DE3, -- ä·£
+ },
+ [0x4DE4]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR THE FAMILY",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DE4, -- ä·¤
+ },
+ [0x4DE5]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR OPPOSITION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DE5, -- ä·¥
+ },
+ [0x4DE6]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR OBSTRUCTION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DE6, -- ä·¦
+ },
+ [0x4DE7]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR DELIVERANCE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DE7, -- ä·§
+ },
+ [0x4DE8]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR DECREASE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DE8, -- ä·¨
+ },
+ [0x4DE9]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR INCREASE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DE9, -- ä·©
+ },
+ [0x4DEA]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR BREAKTHROUGH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DEA, -- ä·ª
+ },
+ [0x4DEB]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR COMING TO MEET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DEB, -- ä·«
+ },
+ [0x4DEC]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR GATHERING TOGETHER",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DEC, -- ä·¬
+ },
+ [0x4DED]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR PUSHING UPWARD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DED, -- ä·­
+ },
+ [0x4DEE]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR OPPRESSION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DEE, -- ä·®
+ },
+ [0x4DEF]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR THE WELL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DEF, -- ä·¯
+ },
+ [0x4DF0]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR REVOLUTION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DF0, -- ä·°
+ },
+ [0x4DF1]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR THE CAULDRON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DF1, -- ä·±
+ },
+ [0x4DF2]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR THE AROUSING THUNDER",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DF2, -- ä·²
+ },
+ [0x4DF3]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR THE KEEPING STILL MOUNTAIN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DF3, -- ä·³
+ },
+ [0x4DF4]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR DEVELOPMENT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DF4, -- ä·´
+ },
+ [0x4DF5]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR THE MARRYING MAIDEN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DF5, -- ä·µ
+ },
+ [0x4DF6]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR ABUNDANCE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DF6, -- ä·¶
+ },
+ [0x4DF7]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR THE WANDERER",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DF7, -- ä··
+ },
+ [0x4DF8]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR THE GENTLE WIND",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DF8, -- ä·¸
+ },
+ [0x4DF9]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR THE JOYOUS LAKE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DF9, -- ä·¹
+ },
+ [0x4DFA]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR DISPERSION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DFA, -- ä·º
+ },
+ [0x4DFB]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR LIMITATION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DFB, -- ä·»
+ },
+ [0x4DFC]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR INNER TRUTH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DFC, -- ä·¼
+ },
+ [0x4DFD]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR SMALL PREPONDERANCE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DFD, -- ä·½
+ },
+ [0x4DFE]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR AFTER COMPLETION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DFE, -- ä·¾
+ },
+ [0x4DFF]={
+ ["category"]="so",
+ ["description"]="HEXAGRAM FOR BEFORE COMPLETION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x4DFF, -- ä·¿
+ },
+ [0x4E00]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="<CJK Ideograph, First>",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x4E00, -- 一
+ },
+ [0x9FBB]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="<CJK Ideograph, Last>",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x9FBB, -- é¾»
+ },
+ [0xA000]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE IT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA000, -- ꀀ
+ },
+ [0xA001]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE IX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA001, -- ê€
+ },
+ [0xA002]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE I",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA002, -- ꀂ
+ },
+ [0xA003]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE IP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA003, -- ꀃ
+ },
+ [0xA004]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE IET",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA004, -- ꀄ
+ },
+ [0xA005]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE IEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA005, -- ꀅ
+ },
+ [0xA006]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE IE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA006, -- ꀆ
+ },
+ [0xA007]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE IEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA007, -- ꀇ
+ },
+ [0xA008]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE AT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA008, -- ꀈ
+ },
+ [0xA009]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE AX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA009, -- ꀉ
+ },
+ [0xA00A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE A",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA00A, -- ꀊ
+ },
+ [0xA00B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE AP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA00B, -- ꀋ
+ },
+ [0xA00C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE UOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA00C, -- ꀌ
+ },
+ [0xA00D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE UO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA00D, -- ê€
+ },
+ [0xA00E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE UOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA00E, -- ꀎ
+ },
+ [0xA00F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE OT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA00F, -- ê€
+ },
+ [0xA010]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE OX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA010, -- ê€
+ },
+ [0xA011]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE O",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA011, -- ꀑ
+ },
+ [0xA012]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE OP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA012, -- ꀒ
+ },
+ [0xA013]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE EX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA013, -- ꀓ
+ },
+ [0xA014]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE E",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA014, -- ꀔ
+ },
+ [0xA015]={
+ ["category"]="lm",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE WU",
+ ["linebreak"]="ns",
+ ["unicodeslot"]=0xA015, -- ꀕ
+ },
+ [0xA016]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BIT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA016, -- ꀖ
+ },
+ [0xA017]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BIX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA017, -- ꀗ
+ },
+ [0xA018]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BI",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA018, -- ꀘ
+ },
+ [0xA019]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BIP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA019, -- ꀙ
+ },
+ [0xA01A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BIET",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA01A, -- ꀚ
+ },
+ [0xA01B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BIEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA01B, -- ꀛ
+ },
+ [0xA01C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BIE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA01C, -- ꀜ
+ },
+ [0xA01D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BIEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA01D, -- ê€
+ },
+ [0xA01E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BAT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA01E, -- ꀞ
+ },
+ [0xA01F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BAX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA01F, -- ꀟ
+ },
+ [0xA020]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BA",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA020, -- ꀠ
+ },
+ [0xA021]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BAP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA021, -- ꀡ
+ },
+ [0xA022]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BUOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA022, -- ꀢ
+ },
+ [0xA023]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BUO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA023, -- ꀣ
+ },
+ [0xA024]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BUOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA024, -- ꀤ
+ },
+ [0xA025]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BOT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA025, -- ꀥ
+ },
+ [0xA026]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA026, -- ꀦ
+ },
+ [0xA027]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA027, -- ꀧ
+ },
+ [0xA028]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA028, -- ꀨ
+ },
+ [0xA029]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA029, -- ꀩ
+ },
+ [0xA02A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA02A, -- ꀪ
+ },
+ [0xA02B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA02B, -- ꀫ
+ },
+ [0xA02C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BUT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA02C, -- ꀬ
+ },
+ [0xA02D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BUX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA02D, -- ꀭ
+ },
+ [0xA02E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BU",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA02E, -- ꀮ
+ },
+ [0xA02F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BUP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA02F, -- ꀯ
+ },
+ [0xA030]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BURX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA030, -- ꀰ
+ },
+ [0xA031]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BUR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA031, -- ꀱ
+ },
+ [0xA032]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BYT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA032, -- ꀲ
+ },
+ [0xA033]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BYX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA033, -- ꀳ
+ },
+ [0xA034]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BY",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA034, -- ꀴ
+ },
+ [0xA035]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BYP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA035, -- ꀵ
+ },
+ [0xA036]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BYRX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA036, -- ꀶ
+ },
+ [0xA037]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BYR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA037, -- ꀷ
+ },
+ [0xA038]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE PIT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA038, -- ꀸ
+ },
+ [0xA039]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE PIX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA039, -- ꀹ
+ },
+ [0xA03A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE PI",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA03A, -- ꀺ
+ },
+ [0xA03B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE PIP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA03B, -- ꀻ
+ },
+ [0xA03C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE PIEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA03C, -- ꀼ
+ },
+ [0xA03D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE PIE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA03D, -- ꀽ
+ },
+ [0xA03E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE PIEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA03E, -- ꀾ
+ },
+ [0xA03F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE PAT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA03F, -- ꀿ
+ },
+ [0xA040]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE PAX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA040, -- ê€
+ },
+ [0xA041]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE PA",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA041, -- ê
+ },
+ [0xA042]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE PAP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA042, -- ê‚
+ },
+ [0xA043]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE PUOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA043, -- êƒ
+ },
+ [0xA044]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE PUO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA044, -- ê„
+ },
+ [0xA045]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE PUOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA045, -- ê…
+ },
+ [0xA046]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE POT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA046, -- ê†
+ },
+ [0xA047]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE POX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA047, -- ê‡
+ },
+ [0xA048]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE PO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA048, -- êˆ
+ },
+ [0xA049]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE POP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA049, -- ê‰
+ },
+ [0xA04A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE PUT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA04A, -- êŠ
+ },
+ [0xA04B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE PUX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA04B, -- ê‹
+ },
+ [0xA04C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE PU",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA04C, -- êŒ
+ },
+ [0xA04D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE PUP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA04D, -- ê
+ },
+ [0xA04E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE PURX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA04E, -- êŽ
+ },
+ [0xA04F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE PUR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA04F, -- ê
+ },
+ [0xA050]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE PYT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA050, -- ê
+ },
+ [0xA051]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE PYX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA051, -- ê‘
+ },
+ [0xA052]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE PY",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA052, -- ê’
+ },
+ [0xA053]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE PYP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA053, -- ê“
+ },
+ [0xA054]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE PYRX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA054, -- ê”
+ },
+ [0xA055]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE PYR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA055, -- ê•
+ },
+ [0xA056]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BBIT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA056, -- ê–
+ },
+ [0xA057]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BBIX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA057, -- ê—
+ },
+ [0xA058]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BBI",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA058, -- ê˜
+ },
+ [0xA059]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BBIP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA059, -- ê™
+ },
+ [0xA05A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BBIET",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA05A, -- êš
+ },
+ [0xA05B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BBIEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA05B, -- ê›
+ },
+ [0xA05C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BBIE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA05C, -- êœ
+ },
+ [0xA05D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BBIEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA05D, -- ê
+ },
+ [0xA05E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BBAT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA05E, -- êž
+ },
+ [0xA05F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BBAX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA05F, -- êŸ
+ },
+ [0xA060]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BBA",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA060, -- ê 
+ },
+ [0xA061]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BBAP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA061, -- ê¡
+ },
+ [0xA062]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BBUOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA062, -- ê¢
+ },
+ [0xA063]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BBUO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA063, -- ê£
+ },
+ [0xA064]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BBUOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA064, -- ê¤
+ },
+ [0xA065]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BBOT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA065, -- ê¥
+ },
+ [0xA066]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BBOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA066, -- ê¦
+ },
+ [0xA067]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BBO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA067, -- ê§
+ },
+ [0xA068]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BBOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA068, -- ê¨
+ },
+ [0xA069]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BBEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA069, -- ê©
+ },
+ [0xA06A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BBE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA06A, -- êª
+ },
+ [0xA06B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BBEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA06B, -- ê«
+ },
+ [0xA06C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BBUT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA06C, -- ê¬
+ },
+ [0xA06D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BBUX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA06D, -- ê­
+ },
+ [0xA06E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BBU",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA06E, -- ê®
+ },
+ [0xA06F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BBUP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA06F, -- ê¯
+ },
+ [0xA070]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BBURX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA070, -- ê°
+ },
+ [0xA071]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BBUR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA071, -- ê±
+ },
+ [0xA072]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BBYT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA072, -- ê²
+ },
+ [0xA073]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BBYX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA073, -- ê³
+ },
+ [0xA074]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BBY",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA074, -- ê´
+ },
+ [0xA075]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE BBYP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA075, -- êµ
+ },
+ [0xA076]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NBIT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA076, -- ê¶
+ },
+ [0xA077]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NBIX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA077, -- ê·
+ },
+ [0xA078]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NBI",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA078, -- ê¸
+ },
+ [0xA079]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NBIP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA079, -- ê¹
+ },
+ [0xA07A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NBIEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA07A, -- êº
+ },
+ [0xA07B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NBIE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA07B, -- ê»
+ },
+ [0xA07C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NBIEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA07C, -- ê¼
+ },
+ [0xA07D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NBAT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA07D, -- ê½
+ },
+ [0xA07E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NBAX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA07E, -- ê¾
+ },
+ [0xA07F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NBA",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA07F, -- ê¿
+ },
+ [0xA080]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NBAP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA080, -- ê‚€
+ },
+ [0xA081]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NBOT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA081, -- ê‚
+ },
+ [0xA082]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NBOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA082, -- ê‚‚
+ },
+ [0xA083]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NBO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA083, -- ꂃ
+ },
+ [0xA084]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NBOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA084, -- ê‚„
+ },
+ [0xA085]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NBUT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA085, -- ê‚…
+ },
+ [0xA086]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NBUX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA086, -- ꂆ
+ },
+ [0xA087]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NBU",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA087, -- ꂇ
+ },
+ [0xA088]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NBUP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA088, -- ꂈ
+ },
+ [0xA089]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NBURX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA089, -- ꂉ
+ },
+ [0xA08A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NBUR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA08A, -- ê‚Š
+ },
+ [0xA08B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NBYT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA08B, -- ê‚‹
+ },
+ [0xA08C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NBYX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA08C, -- ꂌ
+ },
+ [0xA08D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NBY",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA08D, -- ê‚
+ },
+ [0xA08E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NBYP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA08E, -- ê‚Ž
+ },
+ [0xA08F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NBYRX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA08F, -- ê‚
+ },
+ [0xA090]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NBYR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA090, -- ê‚
+ },
+ [0xA091]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HMIT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA091, -- ê‚‘
+ },
+ [0xA092]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HMIX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA092, -- ê‚’
+ },
+ [0xA093]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HMI",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA093, -- ê‚“
+ },
+ [0xA094]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HMIP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA094, -- ê‚”
+ },
+ [0xA095]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HMIEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA095, -- ê‚•
+ },
+ [0xA096]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HMIE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA096, -- ê‚–
+ },
+ [0xA097]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HMIEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA097, -- ê‚—
+ },
+ [0xA098]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HMAT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA098, -- ꂘ
+ },
+ [0xA099]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HMAX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA099, -- ê‚™
+ },
+ [0xA09A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HMA",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA09A, -- ê‚š
+ },
+ [0xA09B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HMAP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA09B, -- ê‚›
+ },
+ [0xA09C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HMUOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA09C, -- ꂜ
+ },
+ [0xA09D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HMUO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA09D, -- ê‚
+ },
+ [0xA09E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HMUOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA09E, -- ê‚ž
+ },
+ [0xA09F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HMOT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA09F, -- ê‚Ÿ
+ },
+ [0xA0A0]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HMOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0A0, -- ê‚ 
+ },
+ [0xA0A1]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HMO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0A1, -- ê‚¡
+ },
+ [0xA0A2]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HMOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0A2, -- ê‚¢
+ },
+ [0xA0A3]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HMUT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0A3, -- ê‚£
+ },
+ [0xA0A4]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HMUX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0A4, -- ꂤ
+ },
+ [0xA0A5]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HMU",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0A5, -- ê‚¥
+ },
+ [0xA0A6]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HMUP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0A6, -- ꂦ
+ },
+ [0xA0A7]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HMURX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0A7, -- ꂧ
+ },
+ [0xA0A8]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HMUR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0A8, -- ꂨ
+ },
+ [0xA0A9]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HMYX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0A9, -- ê‚©
+ },
+ [0xA0AA]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HMY",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0AA, -- ꂪ
+ },
+ [0xA0AB]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HMYP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0AB, -- ê‚«
+ },
+ [0xA0AC]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HMYRX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0AC, -- ꂬ
+ },
+ [0xA0AD]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HMYR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0AD, -- ê‚­
+ },
+ [0xA0AE]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE MIT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0AE, -- ê‚®
+ },
+ [0xA0AF]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE MIX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0AF, -- ꂯ
+ },
+ [0xA0B0]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE MI",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0B0, -- ê‚°
+ },
+ [0xA0B1]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE MIP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0B1, -- ꂱ
+ },
+ [0xA0B2]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE MIEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0B2, -- ꂲ
+ },
+ [0xA0B3]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE MIE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0B3, -- ꂳ
+ },
+ [0xA0B4]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE MIEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0B4, -- ê‚´
+ },
+ [0xA0B5]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE MAT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0B5, -- ꂵ
+ },
+ [0xA0B6]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE MAX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0B6, -- ꂶ
+ },
+ [0xA0B7]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE MA",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0B7, -- ê‚·
+ },
+ [0xA0B8]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE MAP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0B8, -- ꂸ
+ },
+ [0xA0B9]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE MUOT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0B9, -- ꂹ
+ },
+ [0xA0BA]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE MUOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0BA, -- ꂺ
+ },
+ [0xA0BB]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE MUO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0BB, -- ê‚»
+ },
+ [0xA0BC]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE MUOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0BC, -- ꂼ
+ },
+ [0xA0BD]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE MOT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0BD, -- ꂽ
+ },
+ [0xA0BE]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE MOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0BE, -- ꂾ
+ },
+ [0xA0BF]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE MO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0BF, -- ê‚¿
+ },
+ [0xA0C0]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE MOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0C0, -- ꃀ
+ },
+ [0xA0C1]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE MEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0C1, -- êƒ
+ },
+ [0xA0C2]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ME",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0C2, -- ꃂ
+ },
+ [0xA0C3]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE MUT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0C3, -- ꃃ
+ },
+ [0xA0C4]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE MUX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0C4, -- ꃄ
+ },
+ [0xA0C5]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE MU",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0C5, -- ꃅ
+ },
+ [0xA0C6]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE MUP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0C6, -- ꃆ
+ },
+ [0xA0C7]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE MURX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0C7, -- ꃇ
+ },
+ [0xA0C8]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE MUR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0C8, -- ꃈ
+ },
+ [0xA0C9]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE MYT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0C9, -- ꃉ
+ },
+ [0xA0CA]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE MYX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0CA, -- ꃊ
+ },
+ [0xA0CB]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE MY",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0CB, -- ꃋ
+ },
+ [0xA0CC]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE MYP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0CC, -- ꃌ
+ },
+ [0xA0CD]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE FIT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0CD, -- êƒ
+ },
+ [0xA0CE]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE FIX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0CE, -- ꃎ
+ },
+ [0xA0CF]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE FI",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0CF, -- êƒ
+ },
+ [0xA0D0]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE FIP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0D0, -- êƒ
+ },
+ [0xA0D1]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE FAT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0D1, -- ꃑ
+ },
+ [0xA0D2]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE FAX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0D2, -- ꃒ
+ },
+ [0xA0D3]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE FA",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0D3, -- ꃓ
+ },
+ [0xA0D4]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE FAP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0D4, -- ꃔ
+ },
+ [0xA0D5]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE FOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0D5, -- ꃕ
+ },
+ [0xA0D6]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE FO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0D6, -- ꃖ
+ },
+ [0xA0D7]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE FOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0D7, -- ꃗ
+ },
+ [0xA0D8]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE FUT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0D8, -- ꃘ
+ },
+ [0xA0D9]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE FUX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0D9, -- ꃙ
+ },
+ [0xA0DA]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE FU",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0DA, -- ꃚ
+ },
+ [0xA0DB]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE FUP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0DB, -- ꃛ
+ },
+ [0xA0DC]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE FURX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0DC, -- ꃜ
+ },
+ [0xA0DD]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE FUR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0DD, -- êƒ
+ },
+ [0xA0DE]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE FYT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0DE, -- ꃞ
+ },
+ [0xA0DF]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE FYX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0DF, -- ꃟ
+ },
+ [0xA0E0]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE FY",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0E0, -- ꃠ
+ },
+ [0xA0E1]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE FYP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0E1, -- ꃡ
+ },
+ [0xA0E2]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE VIT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0E2, -- ꃢ
+ },
+ [0xA0E3]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE VIX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0E3, -- ꃣ
+ },
+ [0xA0E4]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE VI",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0E4, -- ꃤ
+ },
+ [0xA0E5]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE VIP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0E5, -- ꃥ
+ },
+ [0xA0E6]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE VIET",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0E6, -- ꃦ
+ },
+ [0xA0E7]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE VIEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0E7, -- ꃧ
+ },
+ [0xA0E8]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE VIE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0E8, -- ꃨ
+ },
+ [0xA0E9]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE VIEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0E9, -- ꃩ
+ },
+ [0xA0EA]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE VAT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0EA, -- ꃪ
+ },
+ [0xA0EB]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE VAX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0EB, -- ꃫ
+ },
+ [0xA0EC]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE VA",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0EC, -- ꃬ
+ },
+ [0xA0ED]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE VAP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0ED, -- ꃭ
+ },
+ [0xA0EE]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE VOT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0EE, -- ꃮ
+ },
+ [0xA0EF]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE VOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0EF, -- ꃯ
+ },
+ [0xA0F0]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE VO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0F0, -- ꃰ
+ },
+ [0xA0F1]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE VOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0F1, -- ꃱ
+ },
+ [0xA0F2]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE VEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0F2, -- ꃲ
+ },
+ [0xA0F3]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE VEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0F3, -- ꃳ
+ },
+ [0xA0F4]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE VUT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0F4, -- ꃴ
+ },
+ [0xA0F5]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE VUX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0F5, -- ꃵ
+ },
+ [0xA0F6]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE VU",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0F6, -- ꃶ
+ },
+ [0xA0F7]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE VUP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0F7, -- ꃷ
+ },
+ [0xA0F8]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE VURX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0F8, -- ꃸ
+ },
+ [0xA0F9]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE VUR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0F9, -- ꃹ
+ },
+ [0xA0FA]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE VYT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0FA, -- ꃺ
+ },
+ [0xA0FB]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE VYX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0FB, -- ꃻ
+ },
+ [0xA0FC]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE VY",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0FC, -- ꃼ
+ },
+ [0xA0FD]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE VYP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0FD, -- ꃽ
+ },
+ [0xA0FE]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE VYRX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0FE, -- ꃾ
+ },
+ [0xA0FF]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE VYR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA0FF, -- ꃿ
+ },
+ [0xA100]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE DIT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA100, -- ê„€
+ },
+ [0xA101]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE DIX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA101, -- ê„
+ },
+ [0xA102]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE DI",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA102, -- ê„‚
+ },
+ [0xA103]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE DIP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA103, -- ꄃ
+ },
+ [0xA104]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE DIEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA104, -- ê„„
+ },
+ [0xA105]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE DIE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA105, -- ê„…
+ },
+ [0xA106]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE DIEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA106, -- ꄆ
+ },
+ [0xA107]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE DAT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA107, -- ꄇ
+ },
+ [0xA108]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE DAX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA108, -- ꄈ
+ },
+ [0xA109]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE DA",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA109, -- ꄉ
+ },
+ [0xA10A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE DAP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA10A, -- ê„Š
+ },
+ [0xA10B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE DUOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA10B, -- ê„‹
+ },
+ [0xA10C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE DUO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA10C, -- ꄌ
+ },
+ [0xA10D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE DOT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA10D, -- ê„
+ },
+ [0xA10E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE DOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA10E, -- ê„Ž
+ },
+ [0xA10F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE DO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA10F, -- ê„
+ },
+ [0xA110]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE DOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA110, -- ê„
+ },
+ [0xA111]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE DEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA111, -- ê„‘
+ },
+ [0xA112]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE DE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA112, -- ê„’
+ },
+ [0xA113]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE DEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA113, -- ê„“
+ },
+ [0xA114]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE DUT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA114, -- ê„”
+ },
+ [0xA115]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE DUX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA115, -- ê„•
+ },
+ [0xA116]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE DU",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA116, -- ê„–
+ },
+ [0xA117]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE DUP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA117, -- ê„—
+ },
+ [0xA118]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE DURX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA118, -- ꄘ
+ },
+ [0xA119]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE DUR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA119, -- ê„™
+ },
+ [0xA11A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE TIT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA11A, -- ê„š
+ },
+ [0xA11B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE TIX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA11B, -- ê„›
+ },
+ [0xA11C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE TI",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA11C, -- ꄜ
+ },
+ [0xA11D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE TIP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA11D, -- ê„
+ },
+ [0xA11E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE TIEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA11E, -- ê„ž
+ },
+ [0xA11F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE TIE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA11F, -- ê„Ÿ
+ },
+ [0xA120]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE TIEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA120, -- ê„ 
+ },
+ [0xA121]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE TAT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA121, -- ê„¡
+ },
+ [0xA122]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE TAX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA122, -- ê„¢
+ },
+ [0xA123]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE TA",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA123, -- ê„£
+ },
+ [0xA124]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE TAP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA124, -- ꄤ
+ },
+ [0xA125]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE TUOT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA125, -- ê„¥
+ },
+ [0xA126]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE TUOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA126, -- ꄦ
+ },
+ [0xA127]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE TUO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA127, -- ꄧ
+ },
+ [0xA128]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE TUOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA128, -- ꄨ
+ },
+ [0xA129]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE TOT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA129, -- ê„©
+ },
+ [0xA12A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE TOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA12A, -- ꄪ
+ },
+ [0xA12B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE TO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA12B, -- ê„«
+ },
+ [0xA12C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE TOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA12C, -- ꄬ
+ },
+ [0xA12D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE TEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA12D, -- ê„­
+ },
+ [0xA12E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE TE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA12E, -- ê„®
+ },
+ [0xA12F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE TEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA12F, -- ꄯ
+ },
+ [0xA130]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE TUT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA130, -- ê„°
+ },
+ [0xA131]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE TUX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA131, -- ꄱ
+ },
+ [0xA132]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE TU",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA132, -- ꄲ
+ },
+ [0xA133]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE TUP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA133, -- ꄳ
+ },
+ [0xA134]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE TURX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA134, -- ê„´
+ },
+ [0xA135]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE TUR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA135, -- ꄵ
+ },
+ [0xA136]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE DDIT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA136, -- ꄶ
+ },
+ [0xA137]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE DDIX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA137, -- ê„·
+ },
+ [0xA138]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE DDI",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA138, -- ꄸ
+ },
+ [0xA139]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE DDIP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA139, -- ꄹ
+ },
+ [0xA13A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE DDIEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA13A, -- ꄺ
+ },
+ [0xA13B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE DDIE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA13B, -- ê„»
+ },
+ [0xA13C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE DDIEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA13C, -- ꄼ
+ },
+ [0xA13D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE DDAT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA13D, -- ꄽ
+ },
+ [0xA13E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE DDAX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA13E, -- ꄾ
+ },
+ [0xA13F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE DDA",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA13F, -- ê„¿
+ },
+ [0xA140]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE DDAP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA140, -- ê…€
+ },
+ [0xA141]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE DDUOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA141, -- ê…
+ },
+ [0xA142]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE DDUO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA142, -- ê…‚
+ },
+ [0xA143]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE DDUOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA143, -- ê…ƒ
+ },
+ [0xA144]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE DDOT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA144, -- ê…„
+ },
+ [0xA145]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE DDOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA145, -- ê……
+ },
+ [0xA146]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE DDO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA146, -- ê…†
+ },
+ [0xA147]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE DDOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA147, -- ê…‡
+ },
+ [0xA148]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE DDEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA148, -- ê…ˆ
+ },
+ [0xA149]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE DDE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA149, -- ê…‰
+ },
+ [0xA14A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE DDEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA14A, -- ê…Š
+ },
+ [0xA14B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE DDUT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA14B, -- ê…‹
+ },
+ [0xA14C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE DDUX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA14C, -- ꅌ
+ },
+ [0xA14D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE DDU",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA14D, -- ê…
+ },
+ [0xA14E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE DDUP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA14E, -- ê…Ž
+ },
+ [0xA14F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE DDURX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA14F, -- ê…
+ },
+ [0xA150]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE DDUR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA150, -- ê…
+ },
+ [0xA151]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NDIT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA151, -- ê…‘
+ },
+ [0xA152]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NDIX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA152, -- ê…’
+ },
+ [0xA153]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NDI",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA153, -- ê…“
+ },
+ [0xA154]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NDIP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA154, -- ê…”
+ },
+ [0xA155]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NDIEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA155, -- ê…•
+ },
+ [0xA156]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NDIE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA156, -- ê…–
+ },
+ [0xA157]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NDAT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA157, -- ê…—
+ },
+ [0xA158]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NDAX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA158, -- ê…˜
+ },
+ [0xA159]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NDA",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA159, -- ê…™
+ },
+ [0xA15A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NDAP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA15A, -- ê…š
+ },
+ [0xA15B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NDOT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA15B, -- ê…›
+ },
+ [0xA15C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NDOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA15C, -- ꅜ
+ },
+ [0xA15D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NDO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA15D, -- ê…
+ },
+ [0xA15E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NDOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA15E, -- ê…ž
+ },
+ [0xA15F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NDEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA15F, -- ê…Ÿ
+ },
+ [0xA160]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NDE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA160, -- ê… 
+ },
+ [0xA161]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NDEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA161, -- ê…¡
+ },
+ [0xA162]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NDUT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA162, -- ê…¢
+ },
+ [0xA163]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NDUX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA163, -- ê…£
+ },
+ [0xA164]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NDU",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA164, -- ê…¤
+ },
+ [0xA165]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NDUP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA165, -- ê…¥
+ },
+ [0xA166]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NDURX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA166, -- ê…¦
+ },
+ [0xA167]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NDUR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA167, -- ê…§
+ },
+ [0xA168]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HNIT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA168, -- ê…¨
+ },
+ [0xA169]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HNIX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA169, -- ê…©
+ },
+ [0xA16A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HNI",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA16A, -- ê…ª
+ },
+ [0xA16B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HNIP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA16B, -- ê…«
+ },
+ [0xA16C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HNIET",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA16C, -- ê…¬
+ },
+ [0xA16D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HNIEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA16D, -- ê…­
+ },
+ [0xA16E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HNIE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA16E, -- ê…®
+ },
+ [0xA16F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HNIEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA16F, -- ê…¯
+ },
+ [0xA170]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HNAT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA170, -- ê…°
+ },
+ [0xA171]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HNAX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA171, -- ê…±
+ },
+ [0xA172]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HNA",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA172, -- ê…²
+ },
+ [0xA173]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HNAP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA173, -- ê…³
+ },
+ [0xA174]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HNUOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA174, -- ê…´
+ },
+ [0xA175]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HNUO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA175, -- ê…µ
+ },
+ [0xA176]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HNOT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA176, -- ê…¶
+ },
+ [0xA177]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HNOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA177, -- ê…·
+ },
+ [0xA178]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HNOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA178, -- ê…¸
+ },
+ [0xA179]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HNEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA179, -- ê…¹
+ },
+ [0xA17A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HNE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA17A, -- ê…º
+ },
+ [0xA17B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HNEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA17B, -- ê…»
+ },
+ [0xA17C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HNUT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA17C, -- ê…¼
+ },
+ [0xA17D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NIT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA17D, -- ê…½
+ },
+ [0xA17E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NIX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA17E, -- ê…¾
+ },
+ [0xA17F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NI",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA17F, -- ê…¿
+ },
+ [0xA180]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NIP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA180, -- ꆀ
+ },
+ [0xA181]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NIEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA181, -- ê†
+ },
+ [0xA182]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NIE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA182, -- ꆂ
+ },
+ [0xA183]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NIEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA183, -- ꆃ
+ },
+ [0xA184]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NAX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA184, -- ꆄ
+ },
+ [0xA185]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NA",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA185, -- ꆅ
+ },
+ [0xA186]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NAP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA186, -- ꆆ
+ },
+ [0xA187]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NUOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA187, -- ꆇ
+ },
+ [0xA188]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NUO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA188, -- ꆈ
+ },
+ [0xA189]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NUOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA189, -- ꆉ
+ },
+ [0xA18A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NOT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA18A, -- ꆊ
+ },
+ [0xA18B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA18B, -- ꆋ
+ },
+ [0xA18C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA18C, -- ꆌ
+ },
+ [0xA18D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA18D, -- ê†
+ },
+ [0xA18E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA18E, -- ꆎ
+ },
+ [0xA18F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA18F, -- ê†
+ },
+ [0xA190]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA190, -- ê†
+ },
+ [0xA191]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NUT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA191, -- ꆑ
+ },
+ [0xA192]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NUX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA192, -- ꆒ
+ },
+ [0xA193]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NU",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA193, -- ꆓ
+ },
+ [0xA194]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NUP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA194, -- ꆔ
+ },
+ [0xA195]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NURX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA195, -- ꆕ
+ },
+ [0xA196]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NUR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA196, -- ꆖ
+ },
+ [0xA197]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HLIT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA197, -- ꆗ
+ },
+ [0xA198]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HLIX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA198, -- ꆘ
+ },
+ [0xA199]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HLI",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA199, -- ꆙ
+ },
+ [0xA19A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HLIP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA19A, -- ꆚ
+ },
+ [0xA19B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HLIEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA19B, -- ꆛ
+ },
+ [0xA19C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HLIE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA19C, -- ꆜ
+ },
+ [0xA19D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HLIEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA19D, -- ê†
+ },
+ [0xA19E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HLAT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA19E, -- ꆞ
+ },
+ [0xA19F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HLAX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA19F, -- ꆟ
+ },
+ [0xA1A0]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HLA",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1A0, -- ꆠ
+ },
+ [0xA1A1]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HLAP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1A1, -- ꆡ
+ },
+ [0xA1A2]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HLUOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1A2, -- ꆢ
+ },
+ [0xA1A3]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HLUO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1A3, -- ꆣ
+ },
+ [0xA1A4]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HLUOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1A4, -- ꆤ
+ },
+ [0xA1A5]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HLOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1A5, -- ꆥ
+ },
+ [0xA1A6]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HLO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1A6, -- ꆦ
+ },
+ [0xA1A7]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HLOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1A7, -- ꆧ
+ },
+ [0xA1A8]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HLEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1A8, -- ꆨ
+ },
+ [0xA1A9]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HLE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1A9, -- ꆩ
+ },
+ [0xA1AA]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HLEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1AA, -- ꆪ
+ },
+ [0xA1AB]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HLUT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1AB, -- ꆫ
+ },
+ [0xA1AC]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HLUX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1AC, -- ꆬ
+ },
+ [0xA1AD]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HLU",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1AD, -- ꆭ
+ },
+ [0xA1AE]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HLUP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1AE, -- ꆮ
+ },
+ [0xA1AF]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HLURX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1AF, -- ꆯ
+ },
+ [0xA1B0]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HLUR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1B0, -- ꆰ
+ },
+ [0xA1B1]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HLYT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1B1, -- ꆱ
+ },
+ [0xA1B2]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HLYX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1B2, -- ꆲ
+ },
+ [0xA1B3]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HLY",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1B3, -- ꆳ
+ },
+ [0xA1B4]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HLYP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1B4, -- ꆴ
+ },
+ [0xA1B5]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HLYRX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1B5, -- ꆵ
+ },
+ [0xA1B6]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HLYR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1B6, -- ꆶ
+ },
+ [0xA1B7]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE LIT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1B7, -- ꆷ
+ },
+ [0xA1B8]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE LIX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1B8, -- ꆸ
+ },
+ [0xA1B9]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE LI",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1B9, -- ꆹ
+ },
+ [0xA1BA]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE LIP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1BA, -- ꆺ
+ },
+ [0xA1BB]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE LIET",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1BB, -- ꆻ
+ },
+ [0xA1BC]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE LIEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1BC, -- ꆼ
+ },
+ [0xA1BD]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE LIE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1BD, -- ꆽ
+ },
+ [0xA1BE]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE LIEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1BE, -- ꆾ
+ },
+ [0xA1BF]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE LAT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1BF, -- ꆿ
+ },
+ [0xA1C0]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE LAX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1C0, -- ꇀ
+ },
+ [0xA1C1]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE LA",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1C1, -- ê‡
+ },
+ [0xA1C2]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE LAP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1C2, -- ꇂ
+ },
+ [0xA1C3]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE LUOT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1C3, -- ꇃ
+ },
+ [0xA1C4]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE LUOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1C4, -- ꇄ
+ },
+ [0xA1C5]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE LUO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1C5, -- ꇅ
+ },
+ [0xA1C6]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE LUOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1C6, -- ꇆ
+ },
+ [0xA1C7]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE LOT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1C7, -- ꇇ
+ },
+ [0xA1C8]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE LOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1C8, -- ꇈ
+ },
+ [0xA1C9]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE LO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1C9, -- ꇉ
+ },
+ [0xA1CA]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE LOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1CA, -- ꇊ
+ },
+ [0xA1CB]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE LEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1CB, -- ꇋ
+ },
+ [0xA1CC]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE LE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1CC, -- ꇌ
+ },
+ [0xA1CD]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE LEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1CD, -- ê‡
+ },
+ [0xA1CE]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE LUT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1CE, -- ꇎ
+ },
+ [0xA1CF]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE LUX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1CF, -- ê‡
+ },
+ [0xA1D0]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE LU",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1D0, -- ê‡
+ },
+ [0xA1D1]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE LUP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1D1, -- ꇑ
+ },
+ [0xA1D2]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE LURX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1D2, -- ꇒ
+ },
+ [0xA1D3]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE LUR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1D3, -- ꇓ
+ },
+ [0xA1D4]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE LYT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1D4, -- ꇔ
+ },
+ [0xA1D5]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE LYX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1D5, -- ꇕ
+ },
+ [0xA1D6]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE LY",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1D6, -- ꇖ
+ },
+ [0xA1D7]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE LYP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1D7, -- ꇗ
+ },
+ [0xA1D8]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE LYRX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1D8, -- ꇘ
+ },
+ [0xA1D9]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE LYR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1D9, -- ꇙ
+ },
+ [0xA1DA]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE GIT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1DA, -- ꇚ
+ },
+ [0xA1DB]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE GIX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1DB, -- ꇛ
+ },
+ [0xA1DC]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE GI",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1DC, -- ꇜ
+ },
+ [0xA1DD]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE GIP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1DD, -- ê‡
+ },
+ [0xA1DE]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE GIET",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1DE, -- ꇞ
+ },
+ [0xA1DF]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE GIEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1DF, -- ꇟ
+ },
+ [0xA1E0]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE GIE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1E0, -- ꇠ
+ },
+ [0xA1E1]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE GIEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1E1, -- ꇡ
+ },
+ [0xA1E2]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE GAT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1E2, -- ꇢ
+ },
+ [0xA1E3]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE GAX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1E3, -- ꇣ
+ },
+ [0xA1E4]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE GA",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1E4, -- ꇤ
+ },
+ [0xA1E5]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE GAP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1E5, -- ꇥ
+ },
+ [0xA1E6]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE GUOT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1E6, -- ꇦ
+ },
+ [0xA1E7]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE GUOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1E7, -- ꇧ
+ },
+ [0xA1E8]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE GUO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1E8, -- ꇨ
+ },
+ [0xA1E9]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE GUOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1E9, -- ꇩ
+ },
+ [0xA1EA]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE GOT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1EA, -- ꇪ
+ },
+ [0xA1EB]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE GOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1EB, -- ꇫ
+ },
+ [0xA1EC]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE GO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1EC, -- ꇬ
+ },
+ [0xA1ED]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE GOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1ED, -- ꇭ
+ },
+ [0xA1EE]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE GET",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1EE, -- ꇮ
+ },
+ [0xA1EF]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE GEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1EF, -- ꇯ
+ },
+ [0xA1F0]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE GE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1F0, -- ꇰ
+ },
+ [0xA1F1]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE GEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1F1, -- ꇱ
+ },
+ [0xA1F2]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE GUT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1F2, -- ꇲ
+ },
+ [0xA1F3]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE GUX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1F3, -- ꇳ
+ },
+ [0xA1F4]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE GU",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1F4, -- ꇴ
+ },
+ [0xA1F5]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE GUP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1F5, -- ꇵ
+ },
+ [0xA1F6]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE GURX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1F6, -- ꇶ
+ },
+ [0xA1F7]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE GUR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1F7, -- ꇷ
+ },
+ [0xA1F8]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE KIT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1F8, -- ꇸ
+ },
+ [0xA1F9]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE KIX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1F9, -- ꇹ
+ },
+ [0xA1FA]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE KI",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1FA, -- ꇺ
+ },
+ [0xA1FB]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE KIP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1FB, -- ꇻ
+ },
+ [0xA1FC]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE KIEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1FC, -- ꇼ
+ },
+ [0xA1FD]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE KIE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1FD, -- ꇽ
+ },
+ [0xA1FE]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE KIEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1FE, -- ꇾ
+ },
+ [0xA1FF]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE KAT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA1FF, -- ꇿ
+ },
+ [0xA200]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE KAX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA200, -- ꈀ
+ },
+ [0xA201]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE KA",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA201, -- êˆ
+ },
+ [0xA202]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE KAP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA202, -- ꈂ
+ },
+ [0xA203]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE KUOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA203, -- ꈃ
+ },
+ [0xA204]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE KUO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA204, -- ꈄ
+ },
+ [0xA205]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE KUOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA205, -- ꈅ
+ },
+ [0xA206]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE KOT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA206, -- ꈆ
+ },
+ [0xA207]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE KOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA207, -- ꈇ
+ },
+ [0xA208]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE KO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA208, -- ꈈ
+ },
+ [0xA209]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE KOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA209, -- ꈉ
+ },
+ [0xA20A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE KET",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA20A, -- ꈊ
+ },
+ [0xA20B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE KEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA20B, -- ꈋ
+ },
+ [0xA20C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE KE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA20C, -- ꈌ
+ },
+ [0xA20D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE KEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA20D, -- êˆ
+ },
+ [0xA20E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE KUT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA20E, -- ꈎ
+ },
+ [0xA20F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE KUX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA20F, -- êˆ
+ },
+ [0xA210]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE KU",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA210, -- êˆ
+ },
+ [0xA211]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE KUP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA211, -- ꈑ
+ },
+ [0xA212]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE KURX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA212, -- ꈒ
+ },
+ [0xA213]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE KUR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA213, -- ꈓ
+ },
+ [0xA214]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE GGIT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA214, -- ꈔ
+ },
+ [0xA215]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE GGIX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA215, -- ꈕ
+ },
+ [0xA216]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE GGI",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA216, -- ꈖ
+ },
+ [0xA217]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE GGIEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA217, -- ꈗ
+ },
+ [0xA218]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE GGIE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA218, -- ꈘ
+ },
+ [0xA219]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE GGIEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA219, -- ꈙ
+ },
+ [0xA21A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE GGAT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA21A, -- ꈚ
+ },
+ [0xA21B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE GGAX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA21B, -- ꈛ
+ },
+ [0xA21C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE GGA",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA21C, -- ꈜ
+ },
+ [0xA21D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE GGAP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA21D, -- êˆ
+ },
+ [0xA21E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE GGUOT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA21E, -- ꈞ
+ },
+ [0xA21F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE GGUOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA21F, -- ꈟ
+ },
+ [0xA220]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE GGUO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA220, -- ꈠ
+ },
+ [0xA221]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE GGUOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA221, -- ꈡ
+ },
+ [0xA222]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE GGOT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA222, -- ꈢ
+ },
+ [0xA223]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE GGOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA223, -- ꈣ
+ },
+ [0xA224]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE GGO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA224, -- ꈤ
+ },
+ [0xA225]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE GGOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA225, -- ꈥ
+ },
+ [0xA226]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE GGET",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA226, -- ꈦ
+ },
+ [0xA227]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE GGEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA227, -- ꈧ
+ },
+ [0xA228]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE GGE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA228, -- ꈨ
+ },
+ [0xA229]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE GGEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA229, -- ꈩ
+ },
+ [0xA22A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE GGUT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA22A, -- ꈪ
+ },
+ [0xA22B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE GGUX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA22B, -- ꈫ
+ },
+ [0xA22C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE GGU",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA22C, -- ꈬ
+ },
+ [0xA22D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE GGUP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA22D, -- ꈭ
+ },
+ [0xA22E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE GGURX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA22E, -- ꈮ
+ },
+ [0xA22F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE GGUR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA22F, -- ꈯ
+ },
+ [0xA230]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE MGIEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA230, -- ꈰ
+ },
+ [0xA231]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE MGIE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA231, -- ꈱ
+ },
+ [0xA232]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE MGAT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA232, -- ꈲ
+ },
+ [0xA233]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE MGAX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA233, -- ꈳ
+ },
+ [0xA234]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE MGA",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA234, -- ꈴ
+ },
+ [0xA235]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE MGAP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA235, -- ꈵ
+ },
+ [0xA236]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE MGUOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA236, -- ꈶ
+ },
+ [0xA237]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE MGUO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA237, -- ꈷ
+ },
+ [0xA238]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE MGUOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA238, -- ꈸ
+ },
+ [0xA239]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE MGOT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA239, -- ꈹ
+ },
+ [0xA23A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE MGOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA23A, -- ꈺ
+ },
+ [0xA23B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE MGO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA23B, -- ꈻ
+ },
+ [0xA23C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE MGOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA23C, -- ꈼ
+ },
+ [0xA23D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE MGEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA23D, -- ꈽ
+ },
+ [0xA23E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE MGE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA23E, -- ꈾ
+ },
+ [0xA23F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE MGEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA23F, -- ꈿ
+ },
+ [0xA240]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE MGUT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA240, -- ꉀ
+ },
+ [0xA241]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE MGUX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA241, -- ê‰
+ },
+ [0xA242]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE MGU",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA242, -- ꉂ
+ },
+ [0xA243]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE MGUP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA243, -- ꉃ
+ },
+ [0xA244]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE MGURX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA244, -- ꉄ
+ },
+ [0xA245]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE MGUR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA245, -- ꉅ
+ },
+ [0xA246]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HXIT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA246, -- ꉆ
+ },
+ [0xA247]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HXIX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA247, -- ꉇ
+ },
+ [0xA248]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HXI",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA248, -- ꉈ
+ },
+ [0xA249]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HXIP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA249, -- ꉉ
+ },
+ [0xA24A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HXIET",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA24A, -- ꉊ
+ },
+ [0xA24B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HXIEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA24B, -- ꉋ
+ },
+ [0xA24C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HXIE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA24C, -- ꉌ
+ },
+ [0xA24D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HXIEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA24D, -- ê‰
+ },
+ [0xA24E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HXAT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA24E, -- ꉎ
+ },
+ [0xA24F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HXAX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA24F, -- ê‰
+ },
+ [0xA250]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HXA",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA250, -- ê‰
+ },
+ [0xA251]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HXAP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA251, -- ꉑ
+ },
+ [0xA252]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HXUOT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA252, -- ꉒ
+ },
+ [0xA253]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HXUOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA253, -- ꉓ
+ },
+ [0xA254]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HXUO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA254, -- ꉔ
+ },
+ [0xA255]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HXUOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA255, -- ꉕ
+ },
+ [0xA256]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HXOT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA256, -- ꉖ
+ },
+ [0xA257]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HXOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA257, -- ꉗ
+ },
+ [0xA258]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HXO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA258, -- ꉘ
+ },
+ [0xA259]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HXOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA259, -- ꉙ
+ },
+ [0xA25A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HXEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA25A, -- ꉚ
+ },
+ [0xA25B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HXE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA25B, -- ꉛ
+ },
+ [0xA25C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HXEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA25C, -- ꉜ
+ },
+ [0xA25D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NGIEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA25D, -- ê‰
+ },
+ [0xA25E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NGIE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA25E, -- ꉞ
+ },
+ [0xA25F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NGIEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA25F, -- ꉟ
+ },
+ [0xA260]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NGAT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA260, -- ꉠ
+ },
+ [0xA261]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NGAX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA261, -- ꉡ
+ },
+ [0xA262]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NGA",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA262, -- ꉢ
+ },
+ [0xA263]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NGAP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA263, -- ꉣ
+ },
+ [0xA264]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NGUOT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA264, -- ꉤ
+ },
+ [0xA265]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NGUOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA265, -- ꉥ
+ },
+ [0xA266]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NGUO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA266, -- ꉦ
+ },
+ [0xA267]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NGOT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA267, -- ꉧ
+ },
+ [0xA268]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NGOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA268, -- ꉨ
+ },
+ [0xA269]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NGO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA269, -- ꉩ
+ },
+ [0xA26A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NGOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA26A, -- ꉪ
+ },
+ [0xA26B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NGEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA26B, -- ꉫ
+ },
+ [0xA26C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NGE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA26C, -- ꉬ
+ },
+ [0xA26D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NGEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA26D, -- ꉭ
+ },
+ [0xA26E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HIT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA26E, -- ꉮ
+ },
+ [0xA26F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HIEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA26F, -- ꉯ
+ },
+ [0xA270]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HIE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA270, -- ꉰ
+ },
+ [0xA271]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HAT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA271, -- ꉱ
+ },
+ [0xA272]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HAX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA272, -- ꉲ
+ },
+ [0xA273]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HA",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA273, -- ꉳ
+ },
+ [0xA274]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HAP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA274, -- ꉴ
+ },
+ [0xA275]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HUOT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA275, -- ꉵ
+ },
+ [0xA276]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HUOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA276, -- ꉶ
+ },
+ [0xA277]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HUO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA277, -- ꉷ
+ },
+ [0xA278]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HUOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA278, -- ꉸ
+ },
+ [0xA279]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HOT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA279, -- ꉹ
+ },
+ [0xA27A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA27A, -- ꉺ
+ },
+ [0xA27B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA27B, -- ꉻ
+ },
+ [0xA27C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA27C, -- ꉼ
+ },
+ [0xA27D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA27D, -- ꉽ
+ },
+ [0xA27E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA27E, -- ꉾ
+ },
+ [0xA27F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE HEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA27F, -- ꉿ
+ },
+ [0xA280]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE WAT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA280, -- ꊀ
+ },
+ [0xA281]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE WAX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA281, -- êŠ
+ },
+ [0xA282]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE WA",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA282, -- ꊂ
+ },
+ [0xA283]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE WAP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA283, -- ꊃ
+ },
+ [0xA284]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE WUOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA284, -- ꊄ
+ },
+ [0xA285]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE WUO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA285, -- ꊅ
+ },
+ [0xA286]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE WUOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA286, -- ꊆ
+ },
+ [0xA287]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE WOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA287, -- ꊇ
+ },
+ [0xA288]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE WO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA288, -- ꊈ
+ },
+ [0xA289]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE WOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA289, -- ꊉ
+ },
+ [0xA28A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE WEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA28A, -- ꊊ
+ },
+ [0xA28B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE WE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA28B, -- ꊋ
+ },
+ [0xA28C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE WEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA28C, -- ꊌ
+ },
+ [0xA28D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZIT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA28D, -- êŠ
+ },
+ [0xA28E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZIX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA28E, -- ꊎ
+ },
+ [0xA28F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZI",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA28F, -- êŠ
+ },
+ [0xA290]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZIP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA290, -- êŠ
+ },
+ [0xA291]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZIEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA291, -- ꊑ
+ },
+ [0xA292]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZIE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA292, -- ꊒ
+ },
+ [0xA293]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZIEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA293, -- ꊓ
+ },
+ [0xA294]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZAT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA294, -- ꊔ
+ },
+ [0xA295]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZAX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA295, -- ꊕ
+ },
+ [0xA296]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZA",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA296, -- ꊖ
+ },
+ [0xA297]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZAP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA297, -- ꊗ
+ },
+ [0xA298]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZUOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA298, -- ꊘ
+ },
+ [0xA299]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZUO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA299, -- ꊙ
+ },
+ [0xA29A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZUOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA29A, -- ꊚ
+ },
+ [0xA29B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZOT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA29B, -- ꊛ
+ },
+ [0xA29C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA29C, -- ꊜ
+ },
+ [0xA29D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA29D, -- êŠ
+ },
+ [0xA29E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA29E, -- ꊞ
+ },
+ [0xA29F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA29F, -- ꊟ
+ },
+ [0xA2A0]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2A0, -- ꊠ
+ },
+ [0xA2A1]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2A1, -- ꊡ
+ },
+ [0xA2A2]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZUT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2A2, -- ꊢ
+ },
+ [0xA2A3]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZUX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2A3, -- ꊣ
+ },
+ [0xA2A4]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZU",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2A4, -- ꊤ
+ },
+ [0xA2A5]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZUP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2A5, -- ꊥ
+ },
+ [0xA2A6]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZURX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2A6, -- ꊦ
+ },
+ [0xA2A7]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZUR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2A7, -- ꊧ
+ },
+ [0xA2A8]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZYT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2A8, -- ꊨ
+ },
+ [0xA2A9]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZYX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2A9, -- ꊩ
+ },
+ [0xA2AA]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZY",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2AA, -- ꊪ
+ },
+ [0xA2AB]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZYP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2AB, -- ꊫ
+ },
+ [0xA2AC]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZYRX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2AC, -- ꊬ
+ },
+ [0xA2AD]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZYR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2AD, -- ꊭ
+ },
+ [0xA2AE]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE CIT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2AE, -- ꊮ
+ },
+ [0xA2AF]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE CIX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2AF, -- ꊯ
+ },
+ [0xA2B0]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE CI",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2B0, -- ꊰ
+ },
+ [0xA2B1]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE CIP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2B1, -- ꊱ
+ },
+ [0xA2B2]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE CIET",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2B2, -- ꊲ
+ },
+ [0xA2B3]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE CIEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2B3, -- ꊳ
+ },
+ [0xA2B4]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE CIE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2B4, -- ꊴ
+ },
+ [0xA2B5]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE CIEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2B5, -- ꊵ
+ },
+ [0xA2B6]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE CAT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2B6, -- ꊶ
+ },
+ [0xA2B7]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE CAX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2B7, -- ꊷ
+ },
+ [0xA2B8]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE CA",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2B8, -- ꊸ
+ },
+ [0xA2B9]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE CAP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2B9, -- ꊹ
+ },
+ [0xA2BA]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE CUOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2BA, -- ꊺ
+ },
+ [0xA2BB]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE CUO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2BB, -- ꊻ
+ },
+ [0xA2BC]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE CUOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2BC, -- ꊼ
+ },
+ [0xA2BD]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE COT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2BD, -- ꊽ
+ },
+ [0xA2BE]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE COX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2BE, -- ꊾ
+ },
+ [0xA2BF]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE CO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2BF, -- ꊿ
+ },
+ [0xA2C0]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE COP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2C0, -- ê‹€
+ },
+ [0xA2C1]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE CEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2C1, -- ê‹
+ },
+ [0xA2C2]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE CE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2C2, -- ê‹‚
+ },
+ [0xA2C3]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE CEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2C3, -- ꋃ
+ },
+ [0xA2C4]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE CUT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2C4, -- ê‹„
+ },
+ [0xA2C5]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE CUX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2C5, -- ê‹…
+ },
+ [0xA2C6]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE CU",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2C6, -- ꋆ
+ },
+ [0xA2C7]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE CUP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2C7, -- ꋇ
+ },
+ [0xA2C8]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE CURX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2C8, -- ꋈ
+ },
+ [0xA2C9]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE CUR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2C9, -- ꋉ
+ },
+ [0xA2CA]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE CYT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2CA, -- ê‹Š
+ },
+ [0xA2CB]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE CYX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2CB, -- ê‹‹
+ },
+ [0xA2CC]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE CY",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2CC, -- ꋌ
+ },
+ [0xA2CD]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE CYP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2CD, -- ê‹
+ },
+ [0xA2CE]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE CYRX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2CE, -- ê‹Ž
+ },
+ [0xA2CF]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE CYR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2CF, -- ê‹
+ },
+ [0xA2D0]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZZIT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2D0, -- ê‹
+ },
+ [0xA2D1]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZZIX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2D1, -- ê‹‘
+ },
+ [0xA2D2]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZZI",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2D2, -- ê‹’
+ },
+ [0xA2D3]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZZIP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2D3, -- ê‹“
+ },
+ [0xA2D4]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZZIET",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2D4, -- ê‹”
+ },
+ [0xA2D5]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZZIEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2D5, -- ê‹•
+ },
+ [0xA2D6]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZZIE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2D6, -- ê‹–
+ },
+ [0xA2D7]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZZIEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2D7, -- ê‹—
+ },
+ [0xA2D8]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZZAT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2D8, -- ꋘ
+ },
+ [0xA2D9]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZZAX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2D9, -- ê‹™
+ },
+ [0xA2DA]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZZA",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2DA, -- ê‹š
+ },
+ [0xA2DB]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZZAP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2DB, -- ê‹›
+ },
+ [0xA2DC]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZZOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2DC, -- ꋜ
+ },
+ [0xA2DD]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZZO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2DD, -- ê‹
+ },
+ [0xA2DE]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZZOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2DE, -- ê‹ž
+ },
+ [0xA2DF]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZZEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2DF, -- ê‹Ÿ
+ },
+ [0xA2E0]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZZE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2E0, -- ê‹ 
+ },
+ [0xA2E1]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZZEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2E1, -- ê‹¡
+ },
+ [0xA2E2]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZZUX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2E2, -- ê‹¢
+ },
+ [0xA2E3]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZZU",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2E3, -- ê‹£
+ },
+ [0xA2E4]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZZUP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2E4, -- ꋤ
+ },
+ [0xA2E5]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZZURX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2E5, -- ê‹¥
+ },
+ [0xA2E6]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZZUR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2E6, -- ꋦ
+ },
+ [0xA2E7]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZZYT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2E7, -- ꋧ
+ },
+ [0xA2E8]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZZYX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2E8, -- ꋨ
+ },
+ [0xA2E9]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZZY",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2E9, -- ê‹©
+ },
+ [0xA2EA]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZZYP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2EA, -- ꋪ
+ },
+ [0xA2EB]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZZYRX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2EB, -- ê‹«
+ },
+ [0xA2EC]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZZYR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2EC, -- ꋬ
+ },
+ [0xA2ED]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NZIT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2ED, -- ê‹­
+ },
+ [0xA2EE]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NZIX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2EE, -- ê‹®
+ },
+ [0xA2EF]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NZI",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2EF, -- ꋯ
+ },
+ [0xA2F0]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NZIP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2F0, -- ê‹°
+ },
+ [0xA2F1]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NZIEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2F1, -- ꋱ
+ },
+ [0xA2F2]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NZIE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2F2, -- ꋲ
+ },
+ [0xA2F3]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NZIEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2F3, -- ꋳ
+ },
+ [0xA2F4]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NZAT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2F4, -- ê‹´
+ },
+ [0xA2F5]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NZAX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2F5, -- ꋵ
+ },
+ [0xA2F6]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NZA",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2F6, -- ꋶ
+ },
+ [0xA2F7]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NZAP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2F7, -- ê‹·
+ },
+ [0xA2F8]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NZUOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2F8, -- ꋸ
+ },
+ [0xA2F9]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NZUO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2F9, -- ꋹ
+ },
+ [0xA2FA]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NZOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2FA, -- ꋺ
+ },
+ [0xA2FB]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NZOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2FB, -- ê‹»
+ },
+ [0xA2FC]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NZEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2FC, -- ꋼ
+ },
+ [0xA2FD]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NZE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2FD, -- ꋽ
+ },
+ [0xA2FE]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NZUX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2FE, -- ꋾ
+ },
+ [0xA2FF]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NZU",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA2FF, -- ê‹¿
+ },
+ [0xA300]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NZUP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA300, -- ꌀ
+ },
+ [0xA301]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NZURX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA301, -- êŒ
+ },
+ [0xA302]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NZUR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA302, -- ꌂ
+ },
+ [0xA303]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NZYT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA303, -- ꌃ
+ },
+ [0xA304]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NZYX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA304, -- ꌄ
+ },
+ [0xA305]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NZY",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA305, -- ꌅ
+ },
+ [0xA306]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NZYP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA306, -- ꌆ
+ },
+ [0xA307]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NZYRX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA307, -- ꌇ
+ },
+ [0xA308]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NZYR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA308, -- ꌈ
+ },
+ [0xA309]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SIT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA309, -- ꌉ
+ },
+ [0xA30A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SIX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA30A, -- ꌊ
+ },
+ [0xA30B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SI",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA30B, -- ꌋ
+ },
+ [0xA30C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SIP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA30C, -- ꌌ
+ },
+ [0xA30D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SIEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA30D, -- êŒ
+ },
+ [0xA30E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SIE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA30E, -- ꌎ
+ },
+ [0xA30F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SIEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA30F, -- êŒ
+ },
+ [0xA310]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SAT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA310, -- êŒ
+ },
+ [0xA311]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SAX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA311, -- ꌑ
+ },
+ [0xA312]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SA",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA312, -- ꌒ
+ },
+ [0xA313]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SAP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA313, -- ꌓ
+ },
+ [0xA314]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SUOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA314, -- ꌔ
+ },
+ [0xA315]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SUO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA315, -- ꌕ
+ },
+ [0xA316]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SUOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA316, -- ꌖ
+ },
+ [0xA317]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SOT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA317, -- ꌗ
+ },
+ [0xA318]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA318, -- ꌘ
+ },
+ [0xA319]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA319, -- ꌙ
+ },
+ [0xA31A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA31A, -- ꌚ
+ },
+ [0xA31B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA31B, -- ꌛ
+ },
+ [0xA31C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA31C, -- ꌜ
+ },
+ [0xA31D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA31D, -- êŒ
+ },
+ [0xA31E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SUT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA31E, -- ꌞ
+ },
+ [0xA31F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SUX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA31F, -- ꌟ
+ },
+ [0xA320]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SU",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA320, -- ꌠ
+ },
+ [0xA321]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SUP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA321, -- ꌡ
+ },
+ [0xA322]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SURX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA322, -- ꌢ
+ },
+ [0xA323]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SUR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA323, -- ꌣ
+ },
+ [0xA324]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SYT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA324, -- ꌤ
+ },
+ [0xA325]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SYX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA325, -- ꌥ
+ },
+ [0xA326]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SY",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA326, -- ꌦ
+ },
+ [0xA327]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SYP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA327, -- ꌧ
+ },
+ [0xA328]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SYRX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA328, -- ꌨ
+ },
+ [0xA329]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SYR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA329, -- ꌩ
+ },
+ [0xA32A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SSIT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA32A, -- ꌪ
+ },
+ [0xA32B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SSIX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA32B, -- ꌫ
+ },
+ [0xA32C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SSI",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA32C, -- ꌬ
+ },
+ [0xA32D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SSIP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA32D, -- ꌭ
+ },
+ [0xA32E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SSIEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA32E, -- ꌮ
+ },
+ [0xA32F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SSIE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA32F, -- ꌯ
+ },
+ [0xA330]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SSIEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA330, -- ꌰ
+ },
+ [0xA331]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SSAT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA331, -- ꌱ
+ },
+ [0xA332]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SSAX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA332, -- ꌲ
+ },
+ [0xA333]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SSA",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA333, -- ꌳ
+ },
+ [0xA334]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SSAP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA334, -- ꌴ
+ },
+ [0xA335]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SSOT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA335, -- ꌵ
+ },
+ [0xA336]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SSOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA336, -- ꌶ
+ },
+ [0xA337]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SSO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA337, -- ꌷ
+ },
+ [0xA338]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SSOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA338, -- ꌸ
+ },
+ [0xA339]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SSEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA339, -- ꌹ
+ },
+ [0xA33A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SSE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA33A, -- ꌺ
+ },
+ [0xA33B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SSEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA33B, -- ꌻ
+ },
+ [0xA33C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SSUT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA33C, -- ꌼ
+ },
+ [0xA33D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SSUX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA33D, -- ꌽ
+ },
+ [0xA33E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SSU",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA33E, -- ꌾ
+ },
+ [0xA33F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SSUP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA33F, -- ꌿ
+ },
+ [0xA340]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SSYT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA340, -- ê€
+ },
+ [0xA341]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SSYX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA341, -- ê
+ },
+ [0xA342]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SSY",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA342, -- ê‚
+ },
+ [0xA343]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SSYP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA343, -- êƒ
+ },
+ [0xA344]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SSYRX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA344, -- ê„
+ },
+ [0xA345]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SSYR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA345, -- ê…
+ },
+ [0xA346]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZHAT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA346, -- ê†
+ },
+ [0xA347]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZHAX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA347, -- ê‡
+ },
+ [0xA348]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZHA",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA348, -- êˆ
+ },
+ [0xA349]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZHAP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA349, -- ê‰
+ },
+ [0xA34A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZHUOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA34A, -- êŠ
+ },
+ [0xA34B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZHUO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA34B, -- ê‹
+ },
+ [0xA34C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZHUOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA34C, -- êŒ
+ },
+ [0xA34D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZHOT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA34D, -- ê
+ },
+ [0xA34E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZHOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA34E, -- êŽ
+ },
+ [0xA34F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZHO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA34F, -- ê
+ },
+ [0xA350]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZHOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA350, -- ê
+ },
+ [0xA351]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZHET",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA351, -- ê‘
+ },
+ [0xA352]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZHEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA352, -- ê’
+ },
+ [0xA353]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZHE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA353, -- ê“
+ },
+ [0xA354]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZHEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA354, -- ê”
+ },
+ [0xA355]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZHUT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA355, -- ê•
+ },
+ [0xA356]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZHUX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA356, -- ê–
+ },
+ [0xA357]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZHU",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA357, -- ê—
+ },
+ [0xA358]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZHUP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA358, -- ê˜
+ },
+ [0xA359]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZHURX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA359, -- ê™
+ },
+ [0xA35A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZHUR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA35A, -- êš
+ },
+ [0xA35B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZHYT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA35B, -- ê›
+ },
+ [0xA35C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZHYX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA35C, -- êœ
+ },
+ [0xA35D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZHY",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA35D, -- ê
+ },
+ [0xA35E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZHYP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA35E, -- êž
+ },
+ [0xA35F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZHYRX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA35F, -- êŸ
+ },
+ [0xA360]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ZHYR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA360, -- ê 
+ },
+ [0xA361]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE CHAT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA361, -- ê¡
+ },
+ [0xA362]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE CHAX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA362, -- ê¢
+ },
+ [0xA363]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE CHA",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA363, -- ê£
+ },
+ [0xA364]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE CHAP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA364, -- ê¤
+ },
+ [0xA365]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE CHUOT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA365, -- ê¥
+ },
+ [0xA366]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE CHUOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA366, -- ê¦
+ },
+ [0xA367]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE CHUO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA367, -- ê§
+ },
+ [0xA368]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE CHUOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA368, -- ê¨
+ },
+ [0xA369]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE CHOT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA369, -- ê©
+ },
+ [0xA36A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE CHOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA36A, -- êª
+ },
+ [0xA36B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE CHO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA36B, -- ê«
+ },
+ [0xA36C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE CHOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA36C, -- ê¬
+ },
+ [0xA36D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE CHET",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA36D, -- ê­
+ },
+ [0xA36E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE CHEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA36E, -- ê®
+ },
+ [0xA36F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE CHE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA36F, -- ê¯
+ },
+ [0xA370]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE CHEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA370, -- ê°
+ },
+ [0xA371]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE CHUX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA371, -- ê±
+ },
+ [0xA372]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE CHU",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA372, -- ê²
+ },
+ [0xA373]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE CHUP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA373, -- ê³
+ },
+ [0xA374]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE CHURX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA374, -- ê´
+ },
+ [0xA375]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE CHUR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA375, -- êµ
+ },
+ [0xA376]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE CHYT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA376, -- ê¶
+ },
+ [0xA377]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE CHYX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA377, -- ê·
+ },
+ [0xA378]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE CHY",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA378, -- ê¸
+ },
+ [0xA379]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE CHYP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA379, -- ê¹
+ },
+ [0xA37A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE CHYRX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA37A, -- êº
+ },
+ [0xA37B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE CHYR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA37B, -- ê»
+ },
+ [0xA37C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE RRAX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA37C, -- ê¼
+ },
+ [0xA37D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE RRA",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA37D, -- ê½
+ },
+ [0xA37E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE RRUOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA37E, -- ê¾
+ },
+ [0xA37F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE RRUO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA37F, -- ê¿
+ },
+ [0xA380]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE RROT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA380, -- ꎀ
+ },
+ [0xA381]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE RROX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA381, -- êŽ
+ },
+ [0xA382]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE RRO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA382, -- ꎂ
+ },
+ [0xA383]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE RROP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA383, -- ꎃ
+ },
+ [0xA384]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE RRET",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA384, -- ꎄ
+ },
+ [0xA385]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE RREX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA385, -- ꎅ
+ },
+ [0xA386]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE RRE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA386, -- ꎆ
+ },
+ [0xA387]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE RREP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA387, -- ꎇ
+ },
+ [0xA388]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE RRUT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA388, -- ꎈ
+ },
+ [0xA389]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE RRUX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA389, -- ꎉ
+ },
+ [0xA38A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE RRU",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA38A, -- ꎊ
+ },
+ [0xA38B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE RRUP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA38B, -- ꎋ
+ },
+ [0xA38C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE RRURX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA38C, -- ꎌ
+ },
+ [0xA38D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE RRUR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA38D, -- êŽ
+ },
+ [0xA38E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE RRYT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA38E, -- ꎎ
+ },
+ [0xA38F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE RRYX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA38F, -- êŽ
+ },
+ [0xA390]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE RRY",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA390, -- êŽ
+ },
+ [0xA391]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE RRYP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA391, -- ꎑ
+ },
+ [0xA392]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE RRYRX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA392, -- ꎒ
+ },
+ [0xA393]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE RRYR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA393, -- ꎓ
+ },
+ [0xA394]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NRAT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA394, -- ꎔ
+ },
+ [0xA395]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NRAX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA395, -- ꎕ
+ },
+ [0xA396]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NRA",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA396, -- ꎖ
+ },
+ [0xA397]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NRAP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA397, -- ꎗ
+ },
+ [0xA398]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NROX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA398, -- ꎘ
+ },
+ [0xA399]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NRO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA399, -- ꎙ
+ },
+ [0xA39A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NROP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA39A, -- ꎚ
+ },
+ [0xA39B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NRET",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA39B, -- ꎛ
+ },
+ [0xA39C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NREX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA39C, -- ꎜ
+ },
+ [0xA39D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NRE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA39D, -- êŽ
+ },
+ [0xA39E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NREP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA39E, -- ꎞ
+ },
+ [0xA39F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NRUT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA39F, -- ꎟ
+ },
+ [0xA3A0]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NRUX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3A0, -- ꎠ
+ },
+ [0xA3A1]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NRU",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3A1, -- ꎡ
+ },
+ [0xA3A2]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NRUP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3A2, -- ꎢ
+ },
+ [0xA3A3]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NRURX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3A3, -- ꎣ
+ },
+ [0xA3A4]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NRUR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3A4, -- ꎤ
+ },
+ [0xA3A5]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NRYT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3A5, -- ꎥ
+ },
+ [0xA3A6]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NRYX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3A6, -- ꎦ
+ },
+ [0xA3A7]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NRY",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3A7, -- ꎧ
+ },
+ [0xA3A8]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NRYP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3A8, -- ꎨ
+ },
+ [0xA3A9]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NRYRX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3A9, -- ꎩ
+ },
+ [0xA3AA]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NRYR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3AA, -- ꎪ
+ },
+ [0xA3AB]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SHAT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3AB, -- ꎫ
+ },
+ [0xA3AC]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SHAX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3AC, -- ꎬ
+ },
+ [0xA3AD]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SHA",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3AD, -- ꎭ
+ },
+ [0xA3AE]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SHAP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3AE, -- ꎮ
+ },
+ [0xA3AF]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SHUOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3AF, -- ꎯ
+ },
+ [0xA3B0]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SHUO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3B0, -- ꎰ
+ },
+ [0xA3B1]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SHUOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3B1, -- ꎱ
+ },
+ [0xA3B2]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SHOT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3B2, -- ꎲ
+ },
+ [0xA3B3]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SHOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3B3, -- ꎳ
+ },
+ [0xA3B4]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SHO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3B4, -- ꎴ
+ },
+ [0xA3B5]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SHOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3B5, -- ꎵ
+ },
+ [0xA3B6]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SHET",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3B6, -- ꎶ
+ },
+ [0xA3B7]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SHEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3B7, -- ꎷ
+ },
+ [0xA3B8]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SHE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3B8, -- ꎸ
+ },
+ [0xA3B9]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SHEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3B9, -- ꎹ
+ },
+ [0xA3BA]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SHUT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3BA, -- ꎺ
+ },
+ [0xA3BB]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SHUX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3BB, -- ꎻ
+ },
+ [0xA3BC]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SHU",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3BC, -- ꎼ
+ },
+ [0xA3BD]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SHUP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3BD, -- ꎽ
+ },
+ [0xA3BE]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SHURX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3BE, -- ꎾ
+ },
+ [0xA3BF]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SHUR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3BF, -- ꎿ
+ },
+ [0xA3C0]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SHYT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3C0, -- ê€
+ },
+ [0xA3C1]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SHYX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3C1, -- ê
+ },
+ [0xA3C2]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SHY",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3C2, -- ê‚
+ },
+ [0xA3C3]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SHYP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3C3, -- êƒ
+ },
+ [0xA3C4]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SHYRX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3C4, -- ê„
+ },
+ [0xA3C5]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE SHYR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3C5, -- ê…
+ },
+ [0xA3C6]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE RAT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3C6, -- ê†
+ },
+ [0xA3C7]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE RAX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3C7, -- ê‡
+ },
+ [0xA3C8]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE RA",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3C8, -- êˆ
+ },
+ [0xA3C9]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE RAP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3C9, -- ê‰
+ },
+ [0xA3CA]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE RUOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3CA, -- êŠ
+ },
+ [0xA3CB]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE RUO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3CB, -- ê‹
+ },
+ [0xA3CC]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE RUOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3CC, -- êŒ
+ },
+ [0xA3CD]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ROT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3CD, -- ê
+ },
+ [0xA3CE]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ROX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3CE, -- êŽ
+ },
+ [0xA3CF]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE RO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3CF, -- ê
+ },
+ [0xA3D0]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE ROP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3D0, -- ê
+ },
+ [0xA3D1]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE REX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3D1, -- ê‘
+ },
+ [0xA3D2]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE RE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3D2, -- ê’
+ },
+ [0xA3D3]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE REP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3D3, -- ê“
+ },
+ [0xA3D4]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE RUT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3D4, -- ê”
+ },
+ [0xA3D5]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE RUX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3D5, -- ê•
+ },
+ [0xA3D6]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE RU",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3D6, -- ê–
+ },
+ [0xA3D7]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE RUP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3D7, -- ê—
+ },
+ [0xA3D8]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE RURX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3D8, -- ê˜
+ },
+ [0xA3D9]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE RUR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3D9, -- ê™
+ },
+ [0xA3DA]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE RYT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3DA, -- êš
+ },
+ [0xA3DB]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE RYX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3DB, -- ê›
+ },
+ [0xA3DC]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE RY",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3DC, -- êœ
+ },
+ [0xA3DD]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE RYP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3DD, -- ê
+ },
+ [0xA3DE]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE RYRX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3DE, -- êž
+ },
+ [0xA3DF]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE RYR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3DF, -- êŸ
+ },
+ [0xA3E0]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE JIT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3E0, -- ê 
+ },
+ [0xA3E1]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE JIX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3E1, -- ê¡
+ },
+ [0xA3E2]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE JI",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3E2, -- ê¢
+ },
+ [0xA3E3]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE JIP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3E3, -- ê£
+ },
+ [0xA3E4]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE JIET",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3E4, -- ê¤
+ },
+ [0xA3E5]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE JIEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3E5, -- ê¥
+ },
+ [0xA3E6]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE JIE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3E6, -- ê¦
+ },
+ [0xA3E7]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE JIEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3E7, -- ê§
+ },
+ [0xA3E8]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE JUOT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3E8, -- ê¨
+ },
+ [0xA3E9]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE JUOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3E9, -- ê©
+ },
+ [0xA3EA]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE JUO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3EA, -- êª
+ },
+ [0xA3EB]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE JUOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3EB, -- ê«
+ },
+ [0xA3EC]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE JOT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3EC, -- ê¬
+ },
+ [0xA3ED]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE JOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3ED, -- ê­
+ },
+ [0xA3EE]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE JO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3EE, -- ê®
+ },
+ [0xA3EF]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE JOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3EF, -- ê¯
+ },
+ [0xA3F0]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE JUT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3F0, -- ê°
+ },
+ [0xA3F1]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE JUX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3F1, -- ê±
+ },
+ [0xA3F2]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE JU",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3F2, -- ê²
+ },
+ [0xA3F3]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE JUP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3F3, -- ê³
+ },
+ [0xA3F4]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE JURX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3F4, -- ê´
+ },
+ [0xA3F5]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE JUR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3F5, -- êµ
+ },
+ [0xA3F6]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE JYT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3F6, -- ê¶
+ },
+ [0xA3F7]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE JYX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3F7, -- ê·
+ },
+ [0xA3F8]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE JY",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3F8, -- ê¸
+ },
+ [0xA3F9]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE JYP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3F9, -- ê¹
+ },
+ [0xA3FA]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE JYRX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3FA, -- êº
+ },
+ [0xA3FB]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE JYR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3FB, -- ê»
+ },
+ [0xA3FC]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE QIT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3FC, -- ê¼
+ },
+ [0xA3FD]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE QIX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3FD, -- ê½
+ },
+ [0xA3FE]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE QI",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3FE, -- ê¾
+ },
+ [0xA3FF]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE QIP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA3FF, -- ê¿
+ },
+ [0xA400]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE QIET",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA400, -- ê€
+ },
+ [0xA401]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE QIEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA401, -- ê
+ },
+ [0xA402]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE QIE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA402, -- ê‚
+ },
+ [0xA403]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE QIEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA403, -- êƒ
+ },
+ [0xA404]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE QUOT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA404, -- ê„
+ },
+ [0xA405]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE QUOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA405, -- ê…
+ },
+ [0xA406]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE QUO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA406, -- ê†
+ },
+ [0xA407]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE QUOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA407, -- ê‡
+ },
+ [0xA408]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE QOT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA408, -- êˆ
+ },
+ [0xA409]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE QOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA409, -- ê‰
+ },
+ [0xA40A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE QO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA40A, -- êŠ
+ },
+ [0xA40B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE QOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA40B, -- ê‹
+ },
+ [0xA40C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE QUT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA40C, -- êŒ
+ },
+ [0xA40D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE QUX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA40D, -- ê
+ },
+ [0xA40E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE QU",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA40E, -- êŽ
+ },
+ [0xA40F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE QUP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA40F, -- ê
+ },
+ [0xA410]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE QURX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA410, -- ê
+ },
+ [0xA411]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE QUR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA411, -- ê‘
+ },
+ [0xA412]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE QYT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA412, -- ê’
+ },
+ [0xA413]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE QYX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA413, -- ê“
+ },
+ [0xA414]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE QY",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA414, -- ê”
+ },
+ [0xA415]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE QYP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA415, -- ê•
+ },
+ [0xA416]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE QYRX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA416, -- ê–
+ },
+ [0xA417]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE QYR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA417, -- ê—
+ },
+ [0xA418]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE JJIT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA418, -- ê˜
+ },
+ [0xA419]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE JJIX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA419, -- ê™
+ },
+ [0xA41A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE JJI",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA41A, -- êš
+ },
+ [0xA41B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE JJIP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA41B, -- ê›
+ },
+ [0xA41C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE JJIET",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA41C, -- êœ
+ },
+ [0xA41D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE JJIEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA41D, -- ê
+ },
+ [0xA41E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE JJIE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA41E, -- êž
+ },
+ [0xA41F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE JJIEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA41F, -- êŸ
+ },
+ [0xA420]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE JJUOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA420, -- ê 
+ },
+ [0xA421]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE JJUO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA421, -- ê¡
+ },
+ [0xA422]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE JJUOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA422, -- ê¢
+ },
+ [0xA423]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE JJOT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA423, -- ê£
+ },
+ [0xA424]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE JJOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA424, -- ê¤
+ },
+ [0xA425]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE JJO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA425, -- ê¥
+ },
+ [0xA426]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE JJOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA426, -- ê¦
+ },
+ [0xA427]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE JJUT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA427, -- ê§
+ },
+ [0xA428]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE JJUX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA428, -- ê¨
+ },
+ [0xA429]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE JJU",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA429, -- ê©
+ },
+ [0xA42A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE JJUP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA42A, -- êª
+ },
+ [0xA42B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE JJURX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA42B, -- ê«
+ },
+ [0xA42C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE JJUR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA42C, -- ê¬
+ },
+ [0xA42D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE JJYT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA42D, -- ê­
+ },
+ [0xA42E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE JJYX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA42E, -- ê®
+ },
+ [0xA42F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE JJY",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA42F, -- ê¯
+ },
+ [0xA430]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE JJYP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA430, -- ê°
+ },
+ [0xA431]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NJIT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA431, -- ê±
+ },
+ [0xA432]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NJIX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA432, -- ê²
+ },
+ [0xA433]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NJI",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA433, -- ê³
+ },
+ [0xA434]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NJIP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA434, -- ê´
+ },
+ [0xA435]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NJIET",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA435, -- êµ
+ },
+ [0xA436]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NJIEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA436, -- ê¶
+ },
+ [0xA437]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NJIE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA437, -- ê·
+ },
+ [0xA438]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NJIEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA438, -- ê¸
+ },
+ [0xA439]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NJUOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA439, -- ê¹
+ },
+ [0xA43A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NJUO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA43A, -- êº
+ },
+ [0xA43B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NJOT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA43B, -- ê»
+ },
+ [0xA43C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NJOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA43C, -- ê¼
+ },
+ [0xA43D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NJO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA43D, -- ê½
+ },
+ [0xA43E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NJOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA43E, -- ê¾
+ },
+ [0xA43F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NJUX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA43F, -- ê¿
+ },
+ [0xA440]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NJU",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA440, -- ê‘€
+ },
+ [0xA441]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NJUP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA441, -- ê‘
+ },
+ [0xA442]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NJURX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA442, -- ê‘‚
+ },
+ [0xA443]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NJUR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA443, -- ꑃ
+ },
+ [0xA444]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NJYT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA444, -- ê‘„
+ },
+ [0xA445]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NJYX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA445, -- ê‘…
+ },
+ [0xA446]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NJY",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA446, -- ꑆ
+ },
+ [0xA447]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NJYP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA447, -- ꑇ
+ },
+ [0xA448]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NJYRX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA448, -- ꑈ
+ },
+ [0xA449]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NJYR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA449, -- ꑉ
+ },
+ [0xA44A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NYIT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA44A, -- ê‘Š
+ },
+ [0xA44B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NYIX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA44B, -- ê‘‹
+ },
+ [0xA44C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NYI",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA44C, -- ꑌ
+ },
+ [0xA44D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NYIP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA44D, -- ê‘
+ },
+ [0xA44E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NYIET",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA44E, -- ê‘Ž
+ },
+ [0xA44F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NYIEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA44F, -- ê‘
+ },
+ [0xA450]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NYIE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA450, -- ê‘
+ },
+ [0xA451]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NYIEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA451, -- ê‘‘
+ },
+ [0xA452]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NYUOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA452, -- ê‘’
+ },
+ [0xA453]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NYUO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA453, -- ê‘“
+ },
+ [0xA454]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NYUOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA454, -- ê‘”
+ },
+ [0xA455]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NYOT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA455, -- ê‘•
+ },
+ [0xA456]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NYOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA456, -- ê‘–
+ },
+ [0xA457]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NYO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA457, -- ê‘—
+ },
+ [0xA458]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NYOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA458, -- ꑘ
+ },
+ [0xA459]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NYUT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA459, -- ê‘™
+ },
+ [0xA45A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NYUX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA45A, -- ê‘š
+ },
+ [0xA45B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NYU",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA45B, -- ê‘›
+ },
+ [0xA45C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE NYUP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA45C, -- ꑜ
+ },
+ [0xA45D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE XIT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA45D, -- ê‘
+ },
+ [0xA45E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE XIX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA45E, -- ê‘ž
+ },
+ [0xA45F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE XI",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA45F, -- ê‘Ÿ
+ },
+ [0xA460]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE XIP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA460, -- ê‘ 
+ },
+ [0xA461]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE XIET",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA461, -- ê‘¡
+ },
+ [0xA462]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE XIEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA462, -- ê‘¢
+ },
+ [0xA463]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE XIE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA463, -- ê‘£
+ },
+ [0xA464]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE XIEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA464, -- ꑤ
+ },
+ [0xA465]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE XUOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA465, -- ê‘¥
+ },
+ [0xA466]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE XUO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA466, -- ꑦ
+ },
+ [0xA467]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE XOT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA467, -- ꑧ
+ },
+ [0xA468]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE XOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA468, -- ꑨ
+ },
+ [0xA469]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE XO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA469, -- ê‘©
+ },
+ [0xA46A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE XOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA46A, -- ꑪ
+ },
+ [0xA46B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE XYT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA46B, -- ê‘«
+ },
+ [0xA46C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE XYX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA46C, -- ꑬ
+ },
+ [0xA46D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE XY",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA46D, -- ê‘­
+ },
+ [0xA46E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE XYP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA46E, -- ê‘®
+ },
+ [0xA46F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE XYRX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA46F, -- ꑯ
+ },
+ [0xA470]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE XYR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA470, -- ê‘°
+ },
+ [0xA471]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE YIT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA471, -- ꑱ
+ },
+ [0xA472]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE YIX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA472, -- ꑲ
+ },
+ [0xA473]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE YI",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA473, -- ꑳ
+ },
+ [0xA474]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE YIP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA474, -- ê‘´
+ },
+ [0xA475]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE YIET",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA475, -- ꑵ
+ },
+ [0xA476]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE YIEX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA476, -- ꑶ
+ },
+ [0xA477]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE YIE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA477, -- ê‘·
+ },
+ [0xA478]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE YIEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA478, -- ꑸ
+ },
+ [0xA479]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE YUOT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA479, -- ꑹ
+ },
+ [0xA47A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE YUOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA47A, -- ꑺ
+ },
+ [0xA47B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE YUO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA47B, -- ê‘»
+ },
+ [0xA47C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE YUOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA47C, -- ꑼ
+ },
+ [0xA47D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE YOT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA47D, -- ꑽ
+ },
+ [0xA47E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE YOX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA47E, -- ꑾ
+ },
+ [0xA47F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE YO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA47F, -- ê‘¿
+ },
+ [0xA480]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE YOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA480, -- ê’€
+ },
+ [0xA481]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE YUT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA481, -- ê’
+ },
+ [0xA482]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE YUX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA482, -- ê’‚
+ },
+ [0xA483]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE YU",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA483, -- ê’ƒ
+ },
+ [0xA484]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE YUP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA484, -- ê’„
+ },
+ [0xA485]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE YURX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA485, -- ê’…
+ },
+ [0xA486]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE YUR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA486, -- ê’†
+ },
+ [0xA487]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE YYT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA487, -- ê’‡
+ },
+ [0xA488]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE YYX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA488, -- ê’ˆ
+ },
+ [0xA489]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE YY",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA489, -- ê’‰
+ },
+ [0xA48A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE YYP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA48A, -- ê’Š
+ },
+ [0xA48B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE YYRX",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA48B, -- ê’‹
+ },
+ [0xA48C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="YI SYLLABLE YYR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA48C, -- ꒌ
+ },
+ [0xA490]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="YI RADICAL QOT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA490, -- ê’
+ },
+ [0xA491]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="YI RADICAL LI",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA491, -- ê’‘
+ },
+ [0xA492]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="YI RADICAL KIT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA492, -- ê’’
+ },
+ [0xA493]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="YI RADICAL NYIP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA493, -- ê’“
+ },
+ [0xA494]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="YI RADICAL CYP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA494, -- ê’”
+ },
+ [0xA495]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="YI RADICAL SSI",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA495, -- ê’•
+ },
+ [0xA496]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="YI RADICAL GGOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA496, -- ê’–
+ },
+ [0xA497]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="YI RADICAL GEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA497, -- ê’—
+ },
+ [0xA498]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="YI RADICAL MI",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA498, -- ê’˜
+ },
+ [0xA499]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="YI RADICAL HXIT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA499, -- ê’™
+ },
+ [0xA49A]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="YI RADICAL LYR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA49A, -- ê’š
+ },
+ [0xA49B]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="YI RADICAL BBUT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA49B, -- ê’›
+ },
+ [0xA49C]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="YI RADICAL MOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA49C, -- ꒜
+ },
+ [0xA49D]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="YI RADICAL YO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA49D, -- ê’
+ },
+ [0xA49E]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="YI RADICAL PUT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA49E, -- ê’ž
+ },
+ [0xA49F]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="YI RADICAL HXUO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA49F, -- ê’Ÿ
+ },
+ [0xA4A0]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="YI RADICAL TAT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA4A0, -- ê’ 
+ },
+ [0xA4A1]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="YI RADICAL GA",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA4A1, -- ê’¡
+ },
+ [0xA4A2]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="YI RADICAL ZUP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA4A2, -- ê’¢
+ },
+ [0xA4A3]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="YI RADICAL CYT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA4A3, -- ê’£
+ },
+ [0xA4A4]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="YI RADICAL DDUR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA4A4, -- ê’¤
+ },
+ [0xA4A5]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="YI RADICAL BUR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA4A5, -- ê’¥
+ },
+ [0xA4A6]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="YI RADICAL GGUO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA4A6, -- ê’¦
+ },
+ [0xA4A7]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="YI RADICAL NYOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA4A7, -- ê’§
+ },
+ [0xA4A8]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="YI RADICAL TU",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA4A8, -- ê’¨
+ },
+ [0xA4A9]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="YI RADICAL OP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA4A9, -- ê’©
+ },
+ [0xA4AA]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="YI RADICAL JJUT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA4AA, -- ê’ª
+ },
+ [0xA4AB]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="YI RADICAL ZOT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA4AB, -- ê’«
+ },
+ [0xA4AC]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="YI RADICAL PYT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA4AC, -- ê’¬
+ },
+ [0xA4AD]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="YI RADICAL HMO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA4AD, -- ê’­
+ },
+ [0xA4AE]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="YI RADICAL YIT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA4AE, -- ê’®
+ },
+ [0xA4AF]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="YI RADICAL VUR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA4AF, -- ê’¯
+ },
+ [0xA4B0]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="YI RADICAL SHY",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA4B0, -- ê’°
+ },
+ [0xA4B1]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="YI RADICAL VEP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA4B1, -- ê’±
+ },
+ [0xA4B2]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="YI RADICAL ZA",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA4B2, -- ê’²
+ },
+ [0xA4B3]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="YI RADICAL JO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA4B3, -- ê’³
+ },
+ [0xA4B4]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="YI RADICAL NZUP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA4B4, -- ê’´
+ },
+ [0xA4B5]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="YI RADICAL JJY",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA4B5, -- ê’µ
+ },
+ [0xA4B6]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="YI RADICAL GOT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA4B6, -- ê’¶
+ },
+ [0xA4B7]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="YI RADICAL JJIE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA4B7, -- ê’·
+ },
+ [0xA4B8]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="YI RADICAL WO",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA4B8, -- ê’¸
+ },
+ [0xA4B9]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="YI RADICAL DU",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA4B9, -- ê’¹
+ },
+ [0xA4BA]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="YI RADICAL SHUR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA4BA, -- ê’º
+ },
+ [0xA4BB]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="YI RADICAL LIE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA4BB, -- ê’»
+ },
+ [0xA4BC]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="YI RADICAL CY",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA4BC, -- ê’¼
+ },
+ [0xA4BD]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="YI RADICAL CUOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA4BD, -- ê’½
+ },
+ [0xA4BE]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="YI RADICAL CIP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA4BE, -- ê’¾
+ },
+ [0xA4BF]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="YI RADICAL HXOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA4BF, -- ê’¿
+ },
+ [0xA4C0]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="YI RADICAL SHAT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA4C0, -- ê“€
+ },
+ [0xA4C1]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="YI RADICAL ZUR",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA4C1, -- ê“
+ },
+ [0xA4C2]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="YI RADICAL SHOP",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA4C2, -- ê“‚
+ },
+ [0xA4C3]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="YI RADICAL CHE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA4C3, -- ꓃
+ },
+ [0xA4C4]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="YI RADICAL ZZIET",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA4C4, -- ê“„
+ },
+ [0xA4C5]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="YI RADICAL NBIE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA4C5, -- ê“…
+ },
+ [0xA4C6]={
+ ["category"]="so",
+ ["cjkwd"]="w",
+ ["description"]="YI RADICAL KE",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xA4C6, -- ꓆
+ },
+ [0xA700]={
+ ["category"]="sk",
+ ["description"]="MODIFIER LETTER CHINESE TONE YIN PING",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA700, -- ꜀
+ },
+ [0xA701]={
+ ["category"]="sk",
+ ["description"]="MODIFIER LETTER CHINESE TONE YANG PING",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA701, -- êœ
+ },
+ [0xA702]={
+ ["category"]="sk",
+ ["description"]="MODIFIER LETTER CHINESE TONE YIN SHANG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA702, -- ꜂
+ },
+ [0xA703]={
+ ["category"]="sk",
+ ["description"]="MODIFIER LETTER CHINESE TONE YANG SHANG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA703, -- ꜃
+ },
+ [0xA704]={
+ ["category"]="sk",
+ ["description"]="MODIFIER LETTER CHINESE TONE YIN QU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA704, -- ꜄
+ },
+ [0xA705]={
+ ["category"]="sk",
+ ["description"]="MODIFIER LETTER CHINESE TONE YANG QU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA705, -- ꜅
+ },
+ [0xA706]={
+ ["category"]="sk",
+ ["description"]="MODIFIER LETTER CHINESE TONE YIN RU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA706, -- ꜆
+ },
+ [0xA707]={
+ ["category"]="sk",
+ ["description"]="MODIFIER LETTER CHINESE TONE YANG RU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA707, -- ꜇
+ },
+ [0xA708]={
+ ["category"]="sk",
+ ["description"]="MODIFIER LETTER EXTRA-HIGH DOTTED TONE BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA708, -- ꜈
+ },
+ [0xA709]={
+ ["category"]="sk",
+ ["description"]="MODIFIER LETTER HIGH DOTTED TONE BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA709, -- ꜉
+ },
+ [0xA70A]={
+ ["category"]="sk",
+ ["description"]="MODIFIER LETTER MID DOTTED TONE BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA70A, -- ꜊
+ },
+ [0xA70B]={
+ ["category"]="sk",
+ ["description"]="MODIFIER LETTER LOW DOTTED TONE BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA70B, -- ꜋
+ },
+ [0xA70C]={
+ ["category"]="sk",
+ ["description"]="MODIFIER LETTER EXTRA-LOW DOTTED TONE BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA70C, -- ꜌
+ },
+ [0xA70D]={
+ ["category"]="sk",
+ ["description"]="MODIFIER LETTER EXTRA-HIGH DOTTED LEFT-STEM TONE BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA70D, -- êœ
+ },
+ [0xA70E]={
+ ["category"]="sk",
+ ["description"]="MODIFIER LETTER HIGH DOTTED LEFT-STEM TONE BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA70E, -- ꜎
+ },
+ [0xA70F]={
+ ["category"]="sk",
+ ["description"]="MODIFIER LETTER MID DOTTED LEFT-STEM TONE BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA70F, -- êœ
+ },
+ [0xA710]={
+ ["category"]="sk",
+ ["description"]="MODIFIER LETTER LOW DOTTED LEFT-STEM TONE BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA710, -- êœ
+ },
+ [0xA711]={
+ ["category"]="sk",
+ ["description"]="MODIFIER LETTER EXTRA-LOW DOTTED LEFT-STEM TONE BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA711, -- ꜑
+ },
+ [0xA712]={
+ ["category"]="sk",
+ ["description"]="MODIFIER LETTER EXTRA-HIGH LEFT-STEM TONE BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA712, -- ꜒
+ },
+ [0xA713]={
+ ["category"]="sk",
+ ["description"]="MODIFIER LETTER HIGH LEFT-STEM TONE BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA713, -- ꜓
+ },
+ [0xA714]={
+ ["category"]="sk",
+ ["description"]="MODIFIER LETTER MID LEFT-STEM TONE BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA714, -- ꜔
+ },
+ [0xA715]={
+ ["category"]="sk",
+ ["description"]="MODIFIER LETTER LOW LEFT-STEM TONE BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA715, -- ꜕
+ },
+ [0xA716]={
+ ["category"]="sk",
+ ["description"]="MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA716, -- ꜖
+ },
+ [0xA717]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER DOT VERTICAL BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA717, -- ꜗ
+ },
+ [0xA718]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER DOT SLASH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA718, -- ꜘ
+ },
+ [0xA719]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER DOT HORIZONTAL BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA719, -- ꜙ
+ },
+ [0xA71A]={
+ ["category"]="lm",
+ ["description"]="MODIFIER LETTER LOWER RIGHT CORNER ANGLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA71A, -- ꜚ
+ },
+ [0xA720]={
+ ["category"]="sk",
+ ["description"]="MODIFIER LETTER STRESS AND HIGH TONE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA720, -- ꜠
+ },
+ [0xA721]={
+ ["category"]="sk",
+ ["description"]="MODIFIER LETTER STRESS AND LOW TONE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA721, -- ꜡
+ },
+ [0xA800]={
+ ["category"]="lo",
+ ["description"]="SYLOTI NAGRI LETTER A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA800, -- ê €
+ },
+ [0xA801]={
+ ["category"]="lo",
+ ["description"]="SYLOTI NAGRI LETTER I",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA801, -- ê 
+ },
+ [0xA802]={
+ ["category"]="mc",
+ ["description"]="SYLOTI NAGRI SIGN DVISVARA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xA802, -- ê ‚
+ },
+ [0xA803]={
+ ["category"]="lo",
+ ["description"]="SYLOTI NAGRI LETTER U",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA803, -- ê ƒ
+ },
+ [0xA804]={
+ ["category"]="lo",
+ ["description"]="SYLOTI NAGRI LETTER E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA804, -- ê „
+ },
+ [0xA805]={
+ ["category"]="lo",
+ ["description"]="SYLOTI NAGRI LETTER O",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA805, -- ê …
+ },
+ [0xA806]={
+ ["category"]="mn",
+ ["description"]="SYLOTI NAGRI SIGN HASANTA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xA806, -- ê †
+ },
+ [0xA807]={
+ ["category"]="lo",
+ ["description"]="SYLOTI NAGRI LETTER KO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA807, -- ê ‡
+ },
+ [0xA808]={
+ ["category"]="lo",
+ ["description"]="SYLOTI NAGRI LETTER KHO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA808, -- ê ˆ
+ },
+ [0xA809]={
+ ["category"]="lo",
+ ["description"]="SYLOTI NAGRI LETTER GO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA809, -- ê ‰
+ },
+ [0xA80A]={
+ ["category"]="lo",
+ ["description"]="SYLOTI NAGRI LETTER GHO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA80A, -- ê Š
+ },
+ [0xA80B]={
+ ["category"]="mn",
+ ["description"]="SYLOTI NAGRI SIGN ANUSVARA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xA80B, -- ê ‹
+ },
+ [0xA80C]={
+ ["category"]="lo",
+ ["description"]="SYLOTI NAGRI LETTER CO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA80C, -- ꠌ
+ },
+ [0xA80D]={
+ ["category"]="lo",
+ ["description"]="SYLOTI NAGRI LETTER CHO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA80D, -- ê 
+ },
+ [0xA80E]={
+ ["category"]="lo",
+ ["description"]="SYLOTI NAGRI LETTER JO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA80E, -- ê Ž
+ },
+ [0xA80F]={
+ ["category"]="lo",
+ ["description"]="SYLOTI NAGRI LETTER JHO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA80F, -- ê 
+ },
+ [0xA810]={
+ ["category"]="lo",
+ ["description"]="SYLOTI NAGRI LETTER TTO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA810, -- ê 
+ },
+ [0xA811]={
+ ["category"]="lo",
+ ["description"]="SYLOTI NAGRI LETTER TTHO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA811, -- ê ‘
+ },
+ [0xA812]={
+ ["category"]="lo",
+ ["description"]="SYLOTI NAGRI LETTER DDO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA812, -- ê ’
+ },
+ [0xA813]={
+ ["category"]="lo",
+ ["description"]="SYLOTI NAGRI LETTER DDHO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA813, -- ê “
+ },
+ [0xA814]={
+ ["category"]="lo",
+ ["description"]="SYLOTI NAGRI LETTER TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA814, -- ê ”
+ },
+ [0xA815]={
+ ["category"]="lo",
+ ["description"]="SYLOTI NAGRI LETTER THO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA815, -- ê •
+ },
+ [0xA816]={
+ ["category"]="lo",
+ ["description"]="SYLOTI NAGRI LETTER DO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA816, -- ê –
+ },
+ [0xA817]={
+ ["category"]="lo",
+ ["description"]="SYLOTI NAGRI LETTER DHO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA817, -- ê —
+ },
+ [0xA818]={
+ ["category"]="lo",
+ ["description"]="SYLOTI NAGRI LETTER NO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA818, -- ê ˜
+ },
+ [0xA819]={
+ ["category"]="lo",
+ ["description"]="SYLOTI NAGRI LETTER PO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA819, -- ê ™
+ },
+ [0xA81A]={
+ ["category"]="lo",
+ ["description"]="SYLOTI NAGRI LETTER PHO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA81A, -- ê š
+ },
+ [0xA81B]={
+ ["category"]="lo",
+ ["description"]="SYLOTI NAGRI LETTER BO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA81B, -- ê ›
+ },
+ [0xA81C]={
+ ["category"]="lo",
+ ["description"]="SYLOTI NAGRI LETTER BHO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA81C, -- ꠜ
+ },
+ [0xA81D]={
+ ["category"]="lo",
+ ["description"]="SYLOTI NAGRI LETTER MO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA81D, -- ê 
+ },
+ [0xA81E]={
+ ["category"]="lo",
+ ["description"]="SYLOTI NAGRI LETTER RO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA81E, -- ê ž
+ },
+ [0xA81F]={
+ ["category"]="lo",
+ ["description"]="SYLOTI NAGRI LETTER LO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA81F, -- ê Ÿ
+ },
+ [0xA820]={
+ ["category"]="lo",
+ ["description"]="SYLOTI NAGRI LETTER RRO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA820, -- ê  
+ },
+ [0xA821]={
+ ["category"]="lo",
+ ["description"]="SYLOTI NAGRI LETTER SO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA821, -- ê ¡
+ },
+ [0xA822]={
+ ["category"]="lo",
+ ["description"]="SYLOTI NAGRI LETTER HO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA822, -- ê ¢
+ },
+ [0xA823]={
+ ["category"]="mc",
+ ["description"]="SYLOTI NAGRI VOWEL SIGN A",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xA823, -- ê £
+ },
+ [0xA824]={
+ ["category"]="mc",
+ ["description"]="SYLOTI NAGRI VOWEL SIGN I",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xA824, -- ê ¤
+ },
+ [0xA825]={
+ ["category"]="mn",
+ ["description"]="SYLOTI NAGRI VOWEL SIGN U",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xA825, -- ê ¥
+ },
+ [0xA826]={
+ ["category"]="mn",
+ ["description"]="SYLOTI NAGRI VOWEL SIGN E",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xA826, -- ê ¦
+ },
+ [0xA827]={
+ ["category"]="mc",
+ ["description"]="SYLOTI NAGRI VOWEL SIGN OO",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xA827, -- ê §
+ },
+ [0xA828]={
+ ["category"]="so",
+ ["description"]="SYLOTI NAGRI POETRY MARK-0x0001",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA828, -- ê ¨
+ },
+ [0xA829]={
+ ["category"]="so",
+ ["description"]="SYLOTI NAGRI POETRY MARK-0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA829, -- ê ©
+ },
+ [0xA82A]={
+ ["category"]="so",
+ ["description"]="SYLOTI NAGRI POETRY MARK-0x0003",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA82A, -- ê ª
+ },
+ [0xA82B]={
+ ["category"]="so",
+ ["description"]="SYLOTI NAGRI POETRY MARK-0x0004",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA82B, -- ê «
+ },
+ [0xA840]={
+ ["category"]="lo",
+ ["description"]="PHAGS-PA LETTER KA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA840, -- ê¡€
+ },
+ [0xA841]={
+ ["category"]="lo",
+ ["description"]="PHAGS-PA LETTER KHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA841, -- ê¡
+ },
+ [0xA842]={
+ ["category"]="lo",
+ ["description"]="PHAGS-PA LETTER GA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA842, -- ê¡‚
+ },
+ [0xA843]={
+ ["category"]="lo",
+ ["description"]="PHAGS-PA LETTER NGA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA843, -- ꡃ
+ },
+ [0xA844]={
+ ["category"]="lo",
+ ["description"]="PHAGS-PA LETTER CA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA844, -- ê¡„
+ },
+ [0xA845]={
+ ["category"]="lo",
+ ["description"]="PHAGS-PA LETTER CHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA845, -- ê¡…
+ },
+ [0xA846]={
+ ["category"]="lo",
+ ["description"]="PHAGS-PA LETTER JA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA846, -- ꡆ
+ },
+ [0xA847]={
+ ["category"]="lo",
+ ["description"]="PHAGS-PA LETTER NYA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA847, -- ꡇ
+ },
+ [0xA848]={
+ ["category"]="lo",
+ ["description"]="PHAGS-PA LETTER TA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA848, -- ꡈ
+ },
+ [0xA849]={
+ ["category"]="lo",
+ ["description"]="PHAGS-PA LETTER THA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA849, -- ꡉ
+ },
+ [0xA84A]={
+ ["category"]="lo",
+ ["description"]="PHAGS-PA LETTER DA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA84A, -- ê¡Š
+ },
+ [0xA84B]={
+ ["category"]="lo",
+ ["description"]="PHAGS-PA LETTER NA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA84B, -- ê¡‹
+ },
+ [0xA84C]={
+ ["category"]="lo",
+ ["description"]="PHAGS-PA LETTER PA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA84C, -- ꡌ
+ },
+ [0xA84D]={
+ ["category"]="lo",
+ ["description"]="PHAGS-PA LETTER PHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA84D, -- ê¡
+ },
+ [0xA84E]={
+ ["category"]="lo",
+ ["description"]="PHAGS-PA LETTER BA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA84E, -- ê¡Ž
+ },
+ [0xA84F]={
+ ["category"]="lo",
+ ["description"]="PHAGS-PA LETTER MA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA84F, -- ê¡
+ },
+ [0xA850]={
+ ["category"]="lo",
+ ["description"]="PHAGS-PA LETTER TSA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA850, -- ê¡
+ },
+ [0xA851]={
+ ["category"]="lo",
+ ["description"]="PHAGS-PA LETTER TSHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA851, -- ê¡‘
+ },
+ [0xA852]={
+ ["category"]="lo",
+ ["description"]="PHAGS-PA LETTER DZA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA852, -- ê¡’
+ },
+ [0xA853]={
+ ["category"]="lo",
+ ["description"]="PHAGS-PA LETTER WA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA853, -- ê¡“
+ },
+ [0xA854]={
+ ["category"]="lo",
+ ["description"]="PHAGS-PA LETTER ZHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA854, -- ê¡”
+ },
+ [0xA855]={
+ ["category"]="lo",
+ ["description"]="PHAGS-PA LETTER ZA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA855, -- ê¡•
+ },
+ [0xA856]={
+ ["category"]="lo",
+ ["description"]="PHAGS-PA LETTER SMALL A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA856, -- ê¡–
+ },
+ [0xA857]={
+ ["category"]="lo",
+ ["description"]="PHAGS-PA LETTER YA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA857, -- ê¡—
+ },
+ [0xA858]={
+ ["category"]="lo",
+ ["description"]="PHAGS-PA LETTER RA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA858, -- ꡘ
+ },
+ [0xA859]={
+ ["category"]="lo",
+ ["description"]="PHAGS-PA LETTER LA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA859, -- ê¡™
+ },
+ [0xA85A]={
+ ["category"]="lo",
+ ["description"]="PHAGS-PA LETTER SHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA85A, -- ê¡š
+ },
+ [0xA85B]={
+ ["category"]="lo",
+ ["description"]="PHAGS-PA LETTER SA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA85B, -- ê¡›
+ },
+ [0xA85C]={
+ ["category"]="lo",
+ ["description"]="PHAGS-PA LETTER HA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA85C, -- ꡜ
+ },
+ [0xA85D]={
+ ["category"]="lo",
+ ["description"]="PHAGS-PA LETTER A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA85D, -- ê¡
+ },
+ [0xA85E]={
+ ["category"]="lo",
+ ["description"]="PHAGS-PA LETTER I",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA85E, -- ê¡ž
+ },
+ [0xA85F]={
+ ["category"]="lo",
+ ["description"]="PHAGS-PA LETTER U",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA85F, -- ê¡Ÿ
+ },
+ [0xA860]={
+ ["category"]="lo",
+ ["description"]="PHAGS-PA LETTER E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA860, -- ê¡ 
+ },
+ [0xA861]={
+ ["category"]="lo",
+ ["description"]="PHAGS-PA LETTER O",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA861, -- ê¡¡
+ },
+ [0xA862]={
+ ["category"]="lo",
+ ["description"]="PHAGS-PA LETTER QA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA862, -- ê¡¢
+ },
+ [0xA863]={
+ ["category"]="lo",
+ ["description"]="PHAGS-PA LETTER XA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA863, -- ê¡£
+ },
+ [0xA864]={
+ ["category"]="lo",
+ ["description"]="PHAGS-PA LETTER FA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA864, -- ꡤ
+ },
+ [0xA865]={
+ ["category"]="lo",
+ ["description"]="PHAGS-PA LETTER GGA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA865, -- ê¡¥
+ },
+ [0xA866]={
+ ["category"]="lo",
+ ["description"]="PHAGS-PA LETTER EE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA866, -- ꡦ
+ },
+ [0xA867]={
+ ["category"]="lo",
+ ["description"]="PHAGS-PA SUBJOINED LETTER WA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA867, -- ꡧ
+ },
+ [0xA868]={
+ ["category"]="lo",
+ ["description"]="PHAGS-PA SUBJOINED LETTER YA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA868, -- ꡨ
+ },
+ [0xA869]={
+ ["category"]="lo",
+ ["description"]="PHAGS-PA LETTER TTA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA869, -- ê¡©
+ },
+ [0xA86A]={
+ ["category"]="lo",
+ ["description"]="PHAGS-PA LETTER TTHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA86A, -- ꡪ
+ },
+ [0xA86B]={
+ ["category"]="lo",
+ ["description"]="PHAGS-PA LETTER DDA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA86B, -- ê¡«
+ },
+ [0xA86C]={
+ ["category"]="lo",
+ ["description"]="PHAGS-PA LETTER NNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA86C, -- ꡬ
+ },
+ [0xA86D]={
+ ["category"]="lo",
+ ["description"]="PHAGS-PA LETTER ALTERNATE YA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA86D, -- ê¡­
+ },
+ [0xA86E]={
+ ["category"]="lo",
+ ["description"]="PHAGS-PA LETTER VOICELESS SHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA86E, -- ê¡®
+ },
+ [0xA86F]={
+ ["category"]="lo",
+ ["description"]="PHAGS-PA LETTER VOICED HA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA86F, -- ꡯ
+ },
+ [0xA870]={
+ ["category"]="lo",
+ ["description"]="PHAGS-PA LETTER ASPIRATED FA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA870, -- ê¡°
+ },
+ [0xA871]={
+ ["category"]="lo",
+ ["description"]="PHAGS-PA SUBJOINED LETTER RA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA871, -- ꡱ
+ },
+ [0xA872]={
+ ["category"]="lo",
+ ["description"]="PHAGS-PA SUPERFIXED LETTER RA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA872, -- ꡲ
+ },
+ [0xA873]={
+ ["category"]="lo",
+ ["description"]="PHAGS-PA LETTER CANDRABINDU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xA873, -- ꡳ
+ },
+ [0xA874]={
+ ["category"]="po",
+ ["description"]="PHAGS-PA SINGLE HEAD MARK",
+ ["linebreak"]="bb",
+ ["unicodeslot"]=0xA874, -- ê¡´
+ },
+ [0xA875]={
+ ["category"]="po",
+ ["description"]="PHAGS-PA DOUBLE HEAD MARK",
+ ["linebreak"]="bb",
+ ["unicodeslot"]=0xA875, -- ꡵
+ },
+ [0xA876]={
+ ["category"]="po",
+ ["description"]="PHAGS-PA MARK SHAD",
+ ["linebreak"]="ex",
+ ["unicodeslot"]=0xA876, -- ꡶
+ },
+ [0xA877]={
+ ["category"]="po",
+ ["description"]="PHAGS-PA MARK DOUBLE SHAD",
+ ["linebreak"]="ex",
+ ["unicodeslot"]=0xA877, -- ê¡·
+ },
+ [0xAC00]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="<Hangul Syllable, First>",
+ ["linebreak"]="h2",
+ ["unicodeslot"]=0xAC00, -- ê°€
+ },
+ [0xD7A3]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="<Hangul Syllable, Last>",
+ ["linebreak"]="h3",
+ ["unicodeslot"]=0xD7A3, -- 힣
+ },
+ [0xD800]={
+ ["category"]="cs",
+ ["description"]="<Non Private Use High Surrogate, First>",
+ ["linebreak"]="sg",
+ ["unicodeslot"]=0xD800, -- í €
+ },
+ [0xDB7F]={
+ ["category"]="cs",
+ ["description"]="<Non Private Use High Surrogate, Last>",
+ ["linebreak"]="sg",
+ ["unicodeslot"]=0xDB7F, -- í­¿
+ },
+ [0xDB80]={
+ ["category"]="cs",
+ ["description"]="<Private Use High Surrogate, First>",
+ ["linebreak"]="sg",
+ ["unicodeslot"]=0xDB80, -- í®€
+ },
+ [0xDBFF]={
+ ["category"]="cs",
+ ["description"]="<Private Use High Surrogate, Last>",
+ ["linebreak"]="sg",
+ ["unicodeslot"]=0xDBFF, -- í¯¿
+ },
+ [0xDC00]={
+ ["category"]="cs",
+ ["description"]="<Low Surrogate, First>",
+ ["linebreak"]="sg",
+ ["unicodeslot"]=0xDC00, -- í°€
+ },
+ [0xDFFF]={
+ ["category"]="cs",
+ ["description"]="<Low Surrogate, Last>",
+ ["linebreak"]="sg",
+ ["unicodeslot"]=0xDFFF, -- í¿¿
+ },
+ [0xE000]={
+ ["category"]="co",
+ ["cjkwd"]="a",
+ ["description"]="<Private Use, First>",
+ ["unicodeslot"]=0xE000, -- 
+ },
+ [0xF8FF]={
+ ["category"]="co",
+ ["cjkwd"]="a",
+ ["description"]="<Private Use, Last>",
+ ["unicodeslot"]=0xF8FF, -- 
+ },
+ [0xF900]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0384",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8C48 },
+ ["unicodeslot"]=0xF900, -- 豈
+ },
+ [0xF901]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0385",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x66F4 },
+ ["unicodeslot"]=0xF901, -- ï¤
+ },
+ [0xF902]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0386",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8ECA },
+ ["unicodeslot"]=0xF902, -- 車
+ },
+ [0xF903]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0387",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8CC8 },
+ ["unicodeslot"]=0xF903, -- 賈
+ },
+ [0xF904]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0388",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6ED1 },
+ ["unicodeslot"]=0xF904, -- 滑
+ },
+ [0xF905]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0389",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x4E32 },
+ ["unicodeslot"]=0xF905, -- 串
+ },
+ [0xF906]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x038A",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x53E5 },
+ ["unicodeslot"]=0xF906, -- 句
+ },
+ [0xF907]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x038B",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x9F9C },
+ ["unicodeslot"]=0xF907, -- 龜
+ },
+ [0xF908]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x038C",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x9F9C },
+ ["unicodeslot"]=0xF908, -- 龜
+ },
+ [0xF909]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x038D",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5951 },
+ ["unicodeslot"]=0xF909, -- 契
+ },
+ [0xF90A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x005AA",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x91D1 },
+ ["unicodeslot"]=0xF90A, -- 金
+ },
+ [0xF90B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x005AB",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5587 },
+ ["unicodeslot"]=0xF90B, -- 喇
+ },
+ [0xF90C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x005AC",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5948 },
+ ["unicodeslot"]=0xF90C, -- 奈
+ },
+ [0xF90D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x005AD",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x61F6 },
+ ["unicodeslot"]=0xF90D, -- ï¤
+ },
+ [0xF90E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x005AE",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7669 },
+ ["unicodeslot"]=0xF90E, -- 癩
+ },
+ [0xF90F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x005AF",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7F85 },
+ ["unicodeslot"]=0xF90F, -- ï¤
+ },
+ [0xF910]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x038E",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x863F },
+ ["unicodeslot"]=0xF910, -- ï¤
+ },
+ [0xF911]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x038F",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x87BA },
+ ["unicodeslot"]=0xF911, -- 螺
+ },
+ [0xF912]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0390",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x88F8 },
+ ["unicodeslot"]=0xF912, -- 裸
+ },
+ [0xF913]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0391",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x908F },
+ ["unicodeslot"]=0xF913, -- 邏
+ },
+ [0xF914]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0392",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6A02 },
+ ["unicodeslot"]=0xF914, -- 樂
+ },
+ [0xF915]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0393",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6D1B },
+ ["unicodeslot"]=0xF915, -- 洛
+ },
+ [0xF916]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0394",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x70D9 },
+ ["unicodeslot"]=0xF916, -- 烙
+ },
+ [0xF917]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0395",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x73DE },
+ ["unicodeslot"]=0xF917, -- 珞
+ },
+ [0xF918]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0396",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x843D },
+ ["unicodeslot"]=0xF918, -- 落
+ },
+ [0xF919]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0397",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x916A },
+ ["unicodeslot"]=0xF919, -- 酪
+ },
+ [0xF91A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x005BA",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x99F1 },
+ ["unicodeslot"]=0xF91A, -- 駱
+ },
+ [0xF91B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x005BB",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x4E82 },
+ ["unicodeslot"]=0xF91B, -- 亂
+ },
+ [0xF91C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x005BC",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5375 },
+ ["unicodeslot"]=0xF91C, -- 卵
+ },
+ [0xF91D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x005BD",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6B04 },
+ ["unicodeslot"]=0xF91D, -- ï¤
+ },
+ [0xF91E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x005BE",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x721B },
+ ["unicodeslot"]=0xF91E, -- 爛
+ },
+ [0xF91F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x005BF",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x862D },
+ ["unicodeslot"]=0xF91F, -- 蘭
+ },
+ [0xF920]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0398",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x9E1E },
+ ["unicodeslot"]=0xF920, -- 鸞
+ },
+ [0xF921]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0399",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5D50 },
+ ["unicodeslot"]=0xF921, -- 嵐
+ },
+ [0xF922]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x039A",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6FEB },
+ ["unicodeslot"]=0xF922, -- 濫
+ },
+ [0xF923]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x039B",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x85CD },
+ ["unicodeslot"]=0xF923, -- 藍
+ },
+ [0xF924]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x039C",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8964 },
+ ["unicodeslot"]=0xF924, -- 襤
+ },
+ [0xF925]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x039D",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x62C9 },
+ ["unicodeslot"]=0xF925, -- 拉
+ },
+ [0xF926]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x039E",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x81D8 },
+ ["unicodeslot"]=0xF926, -- 臘
+ },
+ [0xF927]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x039F",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x881F },
+ ["unicodeslot"]=0xF927, -- 蠟
+ },
+ [0xF928]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03A0",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5ECA },
+ ["unicodeslot"]=0xF928, -- 廊
+ },
+ [0xF929]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03A1",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6717 },
+ ["unicodeslot"]=0xF929, -- 朗
+ },
+ [0xF92A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x005CA",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6D6A },
+ ["unicodeslot"]=0xF92A, -- 浪
+ },
+ [0xF92B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x005CB",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x72FC },
+ ["unicodeslot"]=0xF92B, -- 狼
+ },
+ [0xF92C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x005CC",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x90CE },
+ ["unicodeslot"]=0xF92C, -- 郎
+ },
+ [0xF92D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x005CD",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x4F86 },
+ ["unicodeslot"]=0xF92D, -- 來
+ },
+ [0xF92E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x005CE",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x51B7 },
+ ["unicodeslot"]=0xF92E, -- 冷
+ },
+ [0xF92F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x005CF",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x52DE },
+ ["unicodeslot"]=0xF92F, -- 勞
+ },
+ [0xF930]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03A2",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x64C4 },
+ ["unicodeslot"]=0xF930, -- 擄
+ },
+ [0xF931]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03A3",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6AD3 },
+ ["unicodeslot"]=0xF931, -- 櫓
+ },
+ [0xF932]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03A4",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7210 },
+ ["unicodeslot"]=0xF932, -- 爐
+ },
+ [0xF933]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03A5",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x76E7 },
+ ["unicodeslot"]=0xF933, -- 盧
+ },
+ [0xF934]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03A6",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8001 },
+ ["unicodeslot"]=0xF934, -- 老
+ },
+ [0xF935]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03A7",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8606 },
+ ["unicodeslot"]=0xF935, -- 蘆
+ },
+ [0xF936]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03A8",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x865C },
+ ["unicodeslot"]=0xF936, -- 虜
+ },
+ [0xF937]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03A9",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8DEF },
+ ["unicodeslot"]=0xF937, -- 路
+ },
+ [0xF938]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03AA",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x9732 },
+ ["unicodeslot"]=0xF938, -- 露
+ },
+ [0xF939]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03AB",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x9B6F },
+ ["unicodeslot"]=0xF939, -- 魯
+ },
+ [0xF93A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x005DA",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x9DFA },
+ ["unicodeslot"]=0xF93A, -- 鷺
+ },
+ [0xF93B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x005DB",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x788C },
+ ["unicodeslot"]=0xF93B, -- 碌
+ },
+ [0xF93C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x005DC",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x797F },
+ ["unicodeslot"]=0xF93C, -- 祿
+ },
+ [0xF93D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x005DD",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7DA0 },
+ ["unicodeslot"]=0xF93D, -- 綠
+ },
+ [0xF93E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x005DE",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x83C9 },
+ ["unicodeslot"]=0xF93E, -- 菉
+ },
+ [0xF93F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x005DF",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x9304 },
+ ["unicodeslot"]=0xF93F, -- 錄
+ },
+ [0xF940]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03AC",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x9E7F },
+ ["unicodeslot"]=0xF940, -- 鹿
+ },
+ [0xF941]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03AD",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8AD6 },
+ ["unicodeslot"]=0xF941, -- ï¥
+ },
+ [0xF942]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03AE",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x58DF },
+ ["unicodeslot"]=0xF942, -- 壟
+ },
+ [0xF943]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03AF",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5F04 },
+ ["unicodeslot"]=0xF943, -- 弄
+ },
+ [0xF944]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03B0",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7C60 },
+ ["unicodeslot"]=0xF944, -- 籠
+ },
+ [0xF945]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03B1",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x807E },
+ ["unicodeslot"]=0xF945, -- 聾
+ },
+ [0xF946]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03B2",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7262 },
+ ["unicodeslot"]=0xF946, -- 牢
+ },
+ [0xF947]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03B3",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x78CA },
+ ["unicodeslot"]=0xF947, -- 磊
+ },
+ [0xF948]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03B4",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8CC2 },
+ ["unicodeslot"]=0xF948, -- 賂
+ },
+ [0xF949]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03B5",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x96F7 },
+ ["unicodeslot"]=0xF949, -- 雷
+ },
+ [0xF94A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x005EA",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x58D8 },
+ ["unicodeslot"]=0xF94A, -- 壘
+ },
+ [0xF94B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x005EB",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5C62 },
+ ["unicodeslot"]=0xF94B, -- 屢
+ },
+ [0xF94C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x005EC",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6A13 },
+ ["unicodeslot"]=0xF94C, -- 樓
+ },
+ [0xF94D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x005ED",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6DDA },
+ ["unicodeslot"]=0xF94D, -- ï¥
+ },
+ [0xF94E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x005EE",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6F0F },
+ ["unicodeslot"]=0xF94E, -- 漏
+ },
+ [0xF94F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x005EF",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7D2F },
+ ["unicodeslot"]=0xF94F, -- ï¥
+ },
+ [0xF950]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03B6",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7E37 },
+ ["unicodeslot"]=0xF950, -- ï¥
+ },
+ [0xF951]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03B7",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x964B },
+ ["unicodeslot"]=0xF951, -- 陋
+ },
+ [0xF952]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03B8",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x52D2 },
+ ["unicodeslot"]=0xF952, -- 勒
+ },
+ [0xF953]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03B9",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x808B },
+ ["unicodeslot"]=0xF953, -- 肋
+ },
+ [0xF954]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03BA",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x51DC },
+ ["unicodeslot"]=0xF954, -- 凜
+ },
+ [0xF955]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03BB",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x51CC },
+ ["unicodeslot"]=0xF955, -- 凌
+ },
+ [0xF956]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03BC",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7A1C },
+ ["unicodeslot"]=0xF956, -- 稜
+ },
+ [0xF957]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03BD",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7DBE },
+ ["unicodeslot"]=0xF957, -- 綾
+ },
+ [0xF958]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03BE",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x83F1 },
+ ["unicodeslot"]=0xF958, -- 菱
+ },
+ [0xF959]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03BF",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x9675 },
+ ["unicodeslot"]=0xF959, -- 陵
+ },
+ [0xF95A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x005FA",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8B80 },
+ ["unicodeslot"]=0xF95A, -- 讀
+ },
+ [0xF95B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x005FB",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x62CF },
+ ["unicodeslot"]=0xF95B, -- 拏
+ },
+ [0xF95C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x005FC",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6A02 },
+ ["unicodeslot"]=0xF95C, -- 樂
+ },
+ [0xF95D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x005FD",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8AFE },
+ ["unicodeslot"]=0xF95D, -- ï¥
+ },
+ [0xF95E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x005FE",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x4E39 },
+ ["unicodeslot"]=0xF95E, -- 丹
+ },
+ [0xF95F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x005FF",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5BE7 },
+ ["unicodeslot"]=0xF95F, -- 寧
+ },
+ [0xF960]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03C0",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6012 },
+ ["unicodeslot"]=0xF960, -- 怒
+ },
+ [0xF961]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03C1",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7387 },
+ ["unicodeslot"]=0xF961, -- 率
+ },
+ [0xF962]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03C2",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7570 },
+ ["unicodeslot"]=0xF962, -- 異
+ },
+ [0xF963]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03C3",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5317 },
+ ["unicodeslot"]=0xF963, -- 北
+ },
+ [0xF964]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03C4",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x78FB },
+ ["unicodeslot"]=0xF964, -- 磻
+ },
+ [0xF965]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03C5",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x4FBF },
+ ["unicodeslot"]=0xF965, -- 便
+ },
+ [0xF966]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03C6",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5FA9 },
+ ["unicodeslot"]=0xF966, -- 復
+ },
+ [0xF967]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03C7",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x4E0D },
+ ["unicodeslot"]=0xF967, -- 不
+ },
+ [0xF968]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03C8",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6CCC },
+ ["unicodeslot"]=0xF968, -- 泌
+ },
+ [0xF969]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03C9",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6578 },
+ ["unicodeslot"]=0xF969, -- 數
+ },
+ [0xF96A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0060A",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7D22 },
+ ["unicodeslot"]=0xF96A, -- 索
+ },
+ [0xF96B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0060B",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x53C3 },
+ ["unicodeslot"]=0xF96B, -- 參
+ },
+ [0xF96C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0060C",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x585E },
+ ["unicodeslot"]=0xF96C, -- 塞
+ },
+ [0xF96D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0060D",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7701 },
+ ["unicodeslot"]=0xF96D, -- 省
+ },
+ [0xF96E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0060E",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8449 },
+ ["unicodeslot"]=0xF96E, -- 葉
+ },
+ [0xF96F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0060F",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8AAA },
+ ["unicodeslot"]=0xF96F, -- 說
+ },
+ [0xF970]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03CA",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6BBA },
+ ["unicodeslot"]=0xF970, -- 殺
+ },
+ [0xF971]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03CB",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8FB0 },
+ ["unicodeslot"]=0xF971, -- 辰
+ },
+ [0xF972]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03CC",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6C88 },
+ ["unicodeslot"]=0xF972, -- 沈
+ },
+ [0xF973]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03CD",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x62FE },
+ ["unicodeslot"]=0xF973, -- 拾
+ },
+ [0xF974]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03CE",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x82E5 },
+ ["unicodeslot"]=0xF974, -- 若
+ },
+ [0xF975]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03CF",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x63A0 },
+ ["unicodeslot"]=0xF975, -- 掠
+ },
+ [0xF976]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03D0",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7565 },
+ ["unicodeslot"]=0xF976, -- 略
+ },
+ [0xF977]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03D1",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x4EAE },
+ ["unicodeslot"]=0xF977, -- 亮
+ },
+ [0xF978]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03D2",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5169 },
+ ["unicodeslot"]=0xF978, -- 兩
+ },
+ [0xF979]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03D3",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x51C9 },
+ ["unicodeslot"]=0xF979, -- 凉
+ },
+ [0xF97A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0061A",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6881 },
+ ["unicodeslot"]=0xF97A, -- 梁
+ },
+ [0xF97B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0061B",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7CE7 },
+ ["unicodeslot"]=0xF97B, -- 糧
+ },
+ [0xF97C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0061C",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x826F },
+ ["unicodeslot"]=0xF97C, -- 良
+ },
+ [0xF97D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0061D",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8AD2 },
+ ["unicodeslot"]=0xF97D, -- 諒
+ },
+ [0xF97E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0061E",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x91CF },
+ ["unicodeslot"]=0xF97E, -- 量
+ },
+ [0xF97F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0061F",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x52F5 },
+ ["unicodeslot"]=0xF97F, -- 勵
+ },
+ [0xF980]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03D4",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5442 },
+ ["unicodeslot"]=0xF980, -- 呂
+ },
+ [0xF981]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03D5",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5973 },
+ ["unicodeslot"]=0xF981, -- ï¦
+ },
+ [0xF982]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03D6",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5EEC },
+ ["unicodeslot"]=0xF982, -- 廬
+ },
+ [0xF983]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03D7",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x65C5 },
+ ["unicodeslot"]=0xF983, -- 旅
+ },
+ [0xF984]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03D8",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6FFE },
+ ["unicodeslot"]=0xF984, -- 濾
+ },
+ [0xF985]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03D9",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x792A },
+ ["unicodeslot"]=0xF985, -- 礪
+ },
+ [0xF986]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03DA",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x95AD },
+ ["unicodeslot"]=0xF986, -- 閭
+ },
+ [0xF987]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03DB",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x9A6A },
+ ["unicodeslot"]=0xF987, -- 驪
+ },
+ [0xF988]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03DC",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x9E97 },
+ ["unicodeslot"]=0xF988, -- 麗
+ },
+ [0xF989]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03DD",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x9ECE },
+ ["unicodeslot"]=0xF989, -- 黎
+ },
+ [0xF98A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0062A",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x529B },
+ ["unicodeslot"]=0xF98A, -- 力
+ },
+ [0xF98B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0062B",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x66C6 },
+ ["unicodeslot"]=0xF98B, -- 曆
+ },
+ [0xF98C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0062C",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6B77 },
+ ["unicodeslot"]=0xF98C, -- 歷
+ },
+ [0xF98D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0062D",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8F62 },
+ ["unicodeslot"]=0xF98D, -- ï¦
+ },
+ [0xF98E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0062E",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5E74 },
+ ["unicodeslot"]=0xF98E, -- 年
+ },
+ [0xF98F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0062F",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6190 },
+ ["unicodeslot"]=0xF98F, -- ï¦
+ },
+ [0xF990]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03DE",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6200 },
+ ["unicodeslot"]=0xF990, -- ï¦
+ },
+ [0xF991]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03DF",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x649A },
+ ["unicodeslot"]=0xF991, -- 撚
+ },
+ [0xF992]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03E0",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6F23 },
+ ["unicodeslot"]=0xF992, -- 漣
+ },
+ [0xF993]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03E1",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7149 },
+ ["unicodeslot"]=0xF993, -- 煉
+ },
+ [0xF994]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03E2",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7489 },
+ ["unicodeslot"]=0xF994, -- 璉
+ },
+ [0xF995]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03E3",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x79CA },
+ ["unicodeslot"]=0xF995, -- 秊
+ },
+ [0xF996]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03E4",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7DF4 },
+ ["unicodeslot"]=0xF996, -- 練
+ },
+ [0xF997]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03E5",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x806F },
+ ["unicodeslot"]=0xF997, -- 聯
+ },
+ [0xF998]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03E6",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8F26 },
+ ["unicodeslot"]=0xF998, -- 輦
+ },
+ [0xF999]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x03E7",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x84EE },
+ ["unicodeslot"]=0xF999, -- 蓮
+ },
+ [0xF99A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0063A",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x9023 },
+ ["unicodeslot"]=0xF99A, -- 連
+ },
+ [0xF99B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0063B",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x934A },
+ ["unicodeslot"]=0xF99B, -- 鍊
+ },
+ [0xF99C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0063C",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5217 },
+ ["unicodeslot"]=0xF99C, -- 列
+ },
+ [0xF99D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0063D",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x52A3 },
+ ["unicodeslot"]=0xF99D, -- ï¦
+ },
+ [0xF99E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0063E",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x54BD },
+ ["unicodeslot"]=0xF99E, -- 咽
+ },
+ [0xF99F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0063F",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x70C8 },
+ ["unicodeslot"]=0xF99F, -- 烈
+ },
+ [0xF9A0]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009A0x0000",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x88C2 },
+ ["unicodeslot"]=0xF9A0, -- 裂
+ },
+ [0xF9A1]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009A0x0001",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8AAA },
+ ["unicodeslot"]=0xF9A1, -- 說
+ },
+ [0xF9A2]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009A0x0002",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5EC9 },
+ ["unicodeslot"]=0xF9A2, -- 廉
+ },
+ [0xF9A3]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009A0x0003",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5FF5 },
+ ["unicodeslot"]=0xF9A3, -- 念
+ },
+ [0xF9A4]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009A0x0004",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x637B },
+ ["unicodeslot"]=0xF9A4, -- 捻
+ },
+ [0xF9A5]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009A0x0005",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6BAE },
+ ["unicodeslot"]=0xF9A5, -- 殮
+ },
+ [0xF9A6]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009A0x0006",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7C3E },
+ ["unicodeslot"]=0xF9A6, -- 簾
+ },
+ [0xF9A7]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009A0x0007",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7375 },
+ ["unicodeslot"]=0xF9A7, -- 獵
+ },
+ [0xF9A8]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009A0x0008",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x4EE4 },
+ ["unicodeslot"]=0xF9A8, -- 令
+ },
+ [0xF9A9]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009A0x0009",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x56F9 },
+ ["unicodeslot"]=0xF9A9, -- 囹
+ },
+ [0xF9AA]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009AA",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5BE7 },
+ ["unicodeslot"]=0xF9AA, -- 寧
+ },
+ [0xF9AB]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009AB",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5DBA },
+ ["unicodeslot"]=0xF9AB, -- 嶺
+ },
+ [0xF9AC]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009AC",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x601C },
+ ["unicodeslot"]=0xF9AC, -- 怜
+ },
+ [0xF9AD]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009AD",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x73B2 },
+ ["unicodeslot"]=0xF9AD, -- 玲
+ },
+ [0xF9AE]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009AE",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7469 },
+ ["unicodeslot"]=0xF9AE, -- 瑩
+ },
+ [0xF9AF]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009AF",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7F9A },
+ ["unicodeslot"]=0xF9AF, -- 羚
+ },
+ [0xF9B0]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009B0x0000",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8046 },
+ ["unicodeslot"]=0xF9B0, -- 聆
+ },
+ [0xF9B1]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009B0x0001",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x9234 },
+ ["unicodeslot"]=0xF9B1, -- 鈴
+ },
+ [0xF9B2]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009B0x0002",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x96F6 },
+ ["unicodeslot"]=0xF9B2, -- 零
+ },
+ [0xF9B3]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009B0x0003",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x9748 },
+ ["unicodeslot"]=0xF9B3, -- 靈
+ },
+ [0xF9B4]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009B0x0004",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x9818 },
+ ["unicodeslot"]=0xF9B4, -- 領
+ },
+ [0xF9B5]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009B0x0005",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x4F8B },
+ ["unicodeslot"]=0xF9B5, -- 例
+ },
+ [0xF9B6]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009B0x0006",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x79AE },
+ ["unicodeslot"]=0xF9B6, -- 禮
+ },
+ [0xF9B7]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009B0x0007",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x91B4 },
+ ["unicodeslot"]=0xF9B7, -- 醴
+ },
+ [0xF9B8]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009B0x0008",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x96B8 },
+ ["unicodeslot"]=0xF9B8, -- 隸
+ },
+ [0xF9B9]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009B0x0009",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x60E1 },
+ ["unicodeslot"]=0xF9B9, -- 惡
+ },
+ [0xF9BA]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009BA",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x4E86 },
+ ["unicodeslot"]=0xF9BA, -- 了
+ },
+ [0xF9BB]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009BB",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x50DA },
+ ["unicodeslot"]=0xF9BB, -- 僚
+ },
+ [0xF9BC]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009BC",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5BEE },
+ ["unicodeslot"]=0xF9BC, -- 寮
+ },
+ [0xF9BD]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009BD",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5C3F },
+ ["unicodeslot"]=0xF9BD, -- 尿
+ },
+ [0xF9BE]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009BE",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6599 },
+ ["unicodeslot"]=0xF9BE, -- 料
+ },
+ [0xF9BF]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009BF",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6A02 },
+ ["unicodeslot"]=0xF9BF, -- 樂
+ },
+ [0xF9C0]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009C0x0000",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x71CE },
+ ["unicodeslot"]=0xF9C0, -- 燎
+ },
+ [0xF9C1]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009C0x0001",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7642 },
+ ["unicodeslot"]=0xF9C1, -- ï§
+ },
+ [0xF9C2]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009C0x0002",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x84FC },
+ ["unicodeslot"]=0xF9C2, -- 蓼
+ },
+ [0xF9C3]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009C0x0003",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x907C },
+ ["unicodeslot"]=0xF9C3, -- 遼
+ },
+ [0xF9C4]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009C0x0004",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x9F8D },
+ ["unicodeslot"]=0xF9C4, -- 龍
+ },
+ [0xF9C5]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009C0x0005",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6688 },
+ ["unicodeslot"]=0xF9C5, -- 暈
+ },
+ [0xF9C6]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009C0x0006",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x962E },
+ ["unicodeslot"]=0xF9C6, -- 阮
+ },
+ [0xF9C7]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009C0x0007",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5289 },
+ ["unicodeslot"]=0xF9C7, -- 劉
+ },
+ [0xF9C8]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009C0x0008",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x677B },
+ ["unicodeslot"]=0xF9C8, -- 杻
+ },
+ [0xF9C9]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009C0x0009",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x67F3 },
+ ["unicodeslot"]=0xF9C9, -- 柳
+ },
+ [0xF9CA]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009CA",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6D41 },
+ ["unicodeslot"]=0xF9CA, -- 流
+ },
+ [0xF9CB]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009CB",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6E9C },
+ ["unicodeslot"]=0xF9CB, -- 溜
+ },
+ [0xF9CC]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009CC",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7409 },
+ ["unicodeslot"]=0xF9CC, -- 琉
+ },
+ [0xF9CD]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009CD",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7559 },
+ ["unicodeslot"]=0xF9CD, -- ï§
+ },
+ [0xF9CE]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009CE",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x786B },
+ ["unicodeslot"]=0xF9CE, -- 硫
+ },
+ [0xF9CF]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009CF",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7D10 },
+ ["unicodeslot"]=0xF9CF, -- ï§
+ },
+ [0xF9D0]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009D0x0000",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x985E },
+ ["unicodeslot"]=0xF9D0, -- ï§
+ },
+ [0xF9D1]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009D0x0001",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x516D },
+ ["unicodeslot"]=0xF9D1, -- 六
+ },
+ [0xF9D2]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009D0x0002",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x622E },
+ ["unicodeslot"]=0xF9D2, -- 戮
+ },
+ [0xF9D3]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009D0x0003",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x9678 },
+ ["unicodeslot"]=0xF9D3, -- 陸
+ },
+ [0xF9D4]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009D0x0004",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x502B },
+ ["unicodeslot"]=0xF9D4, -- 倫
+ },
+ [0xF9D5]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009D0x0005",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5D19 },
+ ["unicodeslot"]=0xF9D5, -- 崙
+ },
+ [0xF9D6]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009D0x0006",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6DEA },
+ ["unicodeslot"]=0xF9D6, -- 淪
+ },
+ [0xF9D7]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009D0x0007",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8F2A },
+ ["unicodeslot"]=0xF9D7, -- 輪
+ },
+ [0xF9D8]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009D0x0008",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5F8B },
+ ["unicodeslot"]=0xF9D8, -- 律
+ },
+ [0xF9D9]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009D0x0009",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6144 },
+ ["unicodeslot"]=0xF9D9, -- 慄
+ },
+ [0xF9DA]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009DA",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6817 },
+ ["unicodeslot"]=0xF9DA, -- 栗
+ },
+ [0xF9DB]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009DB",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7387 },
+ ["unicodeslot"]=0xF9DB, -- 率
+ },
+ [0xF9DC]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009DC",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x9686 },
+ ["unicodeslot"]=0xF9DC, -- 隆
+ },
+ [0xF9DD]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009DD",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5229 },
+ ["unicodeslot"]=0xF9DD, -- ï§
+ },
+ [0xF9DE]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009DE",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x540F },
+ ["unicodeslot"]=0xF9DE, -- 吏
+ },
+ [0xF9DF]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009DF",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5C65 },
+ ["unicodeslot"]=0xF9DF, -- 履
+ },
+ [0xF9E0]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009E0x0000",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6613 },
+ ["unicodeslot"]=0xF9E0, -- 易
+ },
+ [0xF9E1]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009E0x0001",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x674E },
+ ["unicodeslot"]=0xF9E1, -- 李
+ },
+ [0xF9E2]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009E0x0002",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x68A8 },
+ ["unicodeslot"]=0xF9E2, -- 梨
+ },
+ [0xF9E3]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009E0x0003",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6CE5 },
+ ["unicodeslot"]=0xF9E3, -- 泥
+ },
+ [0xF9E4]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009E0x0004",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7406 },
+ ["unicodeslot"]=0xF9E4, -- 理
+ },
+ [0xF9E5]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009E0x0005",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x75E2 },
+ ["unicodeslot"]=0xF9E5, -- 痢
+ },
+ [0xF9E6]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009E0x0006",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7F79 },
+ ["unicodeslot"]=0xF9E6, -- 罹
+ },
+ [0xF9E7]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009E0x0007",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x88CF },
+ ["unicodeslot"]=0xF9E7, -- 裏
+ },
+ [0xF9E8]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009E0x0008",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x88E1 },
+ ["unicodeslot"]=0xF9E8, -- 裡
+ },
+ [0xF9E9]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009E0x0009",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x91CC },
+ ["unicodeslot"]=0xF9E9, -- 里
+ },
+ [0xF9EA]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009EA",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x96E2 },
+ ["unicodeslot"]=0xF9EA, -- 離
+ },
+ [0xF9EB]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009EB",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x533F },
+ ["unicodeslot"]=0xF9EB, -- 匿
+ },
+ [0xF9EC]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009EC",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6EBA },
+ ["unicodeslot"]=0xF9EC, -- 溺
+ },
+ [0xF9ED]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009ED",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x541D },
+ ["unicodeslot"]=0xF9ED, -- 吝
+ },
+ [0xF9EE]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009EE",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x71D0 },
+ ["unicodeslot"]=0xF9EE, -- 燐
+ },
+ [0xF9EF]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009EF",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7498 },
+ ["unicodeslot"]=0xF9EF, -- 璘
+ },
+ [0xF9F0]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009F0x0000",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x85FA },
+ ["unicodeslot"]=0xF9F0, -- 藺
+ },
+ [0xF9F1]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009F0x0001",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x96A3 },
+ ["unicodeslot"]=0xF9F1, -- 隣
+ },
+ [0xF9F2]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009F0x0002",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x9C57 },
+ ["unicodeslot"]=0xF9F2, -- 鱗
+ },
+ [0xF9F3]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009F0x0003",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x9E9F },
+ ["unicodeslot"]=0xF9F3, -- 麟
+ },
+ [0xF9F4]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009F0x0004",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6797 },
+ ["unicodeslot"]=0xF9F4, -- 林
+ },
+ [0xF9F5]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009F0x0005",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6DCB },
+ ["unicodeslot"]=0xF9F5, -- 淋
+ },
+ [0xF9F6]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009F0x0006",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x81E8 },
+ ["unicodeslot"]=0xF9F6, -- 臨
+ },
+ [0xF9F7]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009F0x0007",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7ACB },
+ ["unicodeslot"]=0xF9F7, -- 立
+ },
+ [0xF9F8]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009F0x0008",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7B20 },
+ ["unicodeslot"]=0xF9F8, -- 笠
+ },
+ [0xF9F9]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009F0x0009",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7C92 },
+ ["unicodeslot"]=0xF9F9, -- 粒
+ },
+ [0xF9FA]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009FA",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x72C0 },
+ ["unicodeslot"]=0xF9FA, -- 狀
+ },
+ [0xF9FB]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009FB",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7099 },
+ ["unicodeslot"]=0xF9FB, -- 炙
+ },
+ [0xF9FC]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009FC",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8B58 },
+ ["unicodeslot"]=0xF9FC, -- 識
+ },
+ [0xF9FD]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009FD",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x4EC0 },
+ ["unicodeslot"]=0xF9FD, -- 什
+ },
+ [0xF9FE]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009FE",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8336 },
+ ["unicodeslot"]=0xF9FE, -- 茶
+ },
+ [0xF9FF]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-F0x0009FF",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x523A },
+ ["unicodeslot"]=0xF9FF, -- 刺
+ },
+ [0xFA00]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0000",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5207 },
+ ["unicodeslot"]=0xFA00, -- 切
+ },
+ [0xFA01]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0001",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5EA6 },
+ ["unicodeslot"]=0xFA01, -- ï¨
+ },
+ [0xFA02]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0002",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x62D3 },
+ ["unicodeslot"]=0xFA02, -- 拓
+ },
+ [0xFA03]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0003",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7CD6 },
+ ["unicodeslot"]=0xFA03, -- 糖
+ },
+ [0xFA04]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0004",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5B85 },
+ ["unicodeslot"]=0xFA04, -- 宅
+ },
+ [0xFA05]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0005",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6D1E },
+ ["unicodeslot"]=0xFA05, -- 洞
+ },
+ [0xFA06]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0006",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x66B4 },
+ ["unicodeslot"]=0xFA06, -- 暴
+ },
+ [0xFA07]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0007",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8F3B },
+ ["unicodeslot"]=0xFA07, -- 輻
+ },
+ [0xFA08]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0008",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x884C },
+ ["unicodeslot"]=0xFA08, -- 行
+ },
+ [0xFA09]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0009",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x964D },
+ ["unicodeslot"]=0xFA09, -- 降
+ },
+ [0xFA0A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0000A",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x898B },
+ ["unicodeslot"]=0xFA0A, -- 見
+ },
+ [0xFA0B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0000B",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5ED3 },
+ ["unicodeslot"]=0xFA0B, -- 廓
+ },
+ [0xFA0C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0000C",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5140 },
+ ["unicodeslot"]=0xFA0C, -- 兀
+ },
+ [0xFA0D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0000D",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x55C0 },
+ ["unicodeslot"]=0xFA0D, -- ï¨
+ },
+ [0xFA0E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0000E",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xFA0E, -- 﨎
+ },
+ [0xFA0F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0000F",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xFA0F, -- ï¨
+ },
+ [0xFA10]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x000A",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x585A },
+ ["unicodeslot"]=0xFA10, -- ï¨
+ },
+ [0xFA11]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x000B",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xFA11, -- 﨑
+ },
+ [0xFA12]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x000C",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6674 },
+ ["unicodeslot"]=0xFA12, -- 晴
+ },
+ [0xFA13]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x000D",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xFA13, -- 﨓
+ },
+ [0xFA14]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x000E",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xFA14, -- 﨔
+ },
+ [0xFA15]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x000F",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x51DE },
+ ["unicodeslot"]=0xFA15, -- 凞
+ },
+ [0xFA16]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0010",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x732A },
+ ["unicodeslot"]=0xFA16, -- 猪
+ },
+ [0xFA17]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0011",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x76CA },
+ ["unicodeslot"]=0xFA17, -- 益
+ },
+ [0xFA18]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0012",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x793C },
+ ["unicodeslot"]=0xFA18, -- 礼
+ },
+ [0xFA19]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0013",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x795E },
+ ["unicodeslot"]=0xFA19, -- 神
+ },
+ [0xFA1A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0001A",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7965 },
+ ["unicodeslot"]=0xFA1A, -- 祥
+ },
+ [0xFA1B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0001B",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x798F },
+ ["unicodeslot"]=0xFA1B, -- 福
+ },
+ [0xFA1C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0001C",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x9756 },
+ ["unicodeslot"]=0xFA1C, -- 靖
+ },
+ [0xFA1D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0001D",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7CBE },
+ ["unicodeslot"]=0xFA1D, -- ï¨
+ },
+ [0xFA1E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0001E",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7FBD },
+ ["unicodeslot"]=0xFA1E, -- 羽
+ },
+ [0xFA1F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0001F",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xFA1F, -- 﨟
+ },
+ [0xFA20]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0014",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8612 },
+ ["unicodeslot"]=0xFA20, -- 蘒
+ },
+ [0xFA21]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0015",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xFA21, -- 﨡
+ },
+ [0xFA22]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0016",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8AF8 },
+ ["unicodeslot"]=0xFA22, -- 諸
+ },
+ [0xFA23]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0017",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xFA23, -- 﨣
+ },
+ [0xFA24]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0018",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xFA24, -- 﨤
+ },
+ [0xFA25]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0019",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x9038 },
+ ["unicodeslot"]=0xFA25, -- 逸
+ },
+ [0xFA26]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x001A",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x90FD },
+ ["unicodeslot"]=0xFA26, -- 都
+ },
+ [0xFA27]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x001B",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xFA27, -- 﨧
+ },
+ [0xFA28]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x001C",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xFA28, -- 﨨
+ },
+ [0xFA29]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x001D",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xFA29, -- 﨩
+ },
+ [0xFA2A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0002A",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x98EF },
+ ["unicodeslot"]=0xFA2A, -- 飯
+ },
+ [0xFA2B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0002B",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x98FC },
+ ["unicodeslot"]=0xFA2B, -- 飼
+ },
+ [0xFA2C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0002C",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x9928 },
+ ["unicodeslot"]=0xFA2C, -- 館
+ },
+ [0xFA2D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0002D",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x9DB4 },
+ ["unicodeslot"]=0xFA2D, -- 鶴
+ },
+ [0xFA30]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x001E",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x4FAE },
+ ["unicodeslot"]=0xFA30, -- 侮
+ },
+ [0xFA31]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x001F",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x50E7 },
+ ["unicodeslot"]=0xFA31, -- 僧
+ },
+ [0xFA32]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0020",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x514D },
+ ["unicodeslot"]=0xFA32, -- 免
+ },
+ [0xFA33]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0021",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x52C9 },
+ ["unicodeslot"]=0xFA33, -- 勉
+ },
+ [0xFA34]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0022",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x52E4 },
+ ["unicodeslot"]=0xFA34, -- 勤
+ },
+ [0xFA35]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0023",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5351 },
+ ["unicodeslot"]=0xFA35, -- 卑
+ },
+ [0xFA36]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0024",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x559D },
+ ["unicodeslot"]=0xFA36, -- 喝
+ },
+ [0xFA37]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0025",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5606 },
+ ["unicodeslot"]=0xFA37, -- 嘆
+ },
+ [0xFA38]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0026",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5668 },
+ ["unicodeslot"]=0xFA38, -- 器
+ },
+ [0xFA39]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0027",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5840 },
+ ["unicodeslot"]=0xFA39, -- 塀
+ },
+ [0xFA3A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0003A",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x58A8 },
+ ["unicodeslot"]=0xFA3A, -- 墨
+ },
+ [0xFA3B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0003B",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5C64 },
+ ["unicodeslot"]=0xFA3B, -- 層
+ },
+ [0xFA3C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0003C",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5C6E },
+ ["unicodeslot"]=0xFA3C, -- 屮
+ },
+ [0xFA3D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0003D",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6094 },
+ ["unicodeslot"]=0xFA3D, -- 悔
+ },
+ [0xFA3E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0003E",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6168 },
+ ["unicodeslot"]=0xFA3E, -- 慨
+ },
+ [0xFA3F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0003F",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x618E },
+ ["unicodeslot"]=0xFA3F, -- 憎
+ },
+ [0xFA40]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0028",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x61F2 },
+ ["unicodeslot"]=0xFA40, -- ï©€
+ },
+ [0xFA41]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0029",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x654F },
+ ["unicodeslot"]=0xFA41, -- ï©
+ },
+ [0xFA42]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x002A",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x65E2 },
+ ["unicodeslot"]=0xFA42, -- ï©‚
+ },
+ [0xFA43]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x002B",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6691 },
+ ["unicodeslot"]=0xFA43, -- 暑
+ },
+ [0xFA44]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x002C",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6885 },
+ ["unicodeslot"]=0xFA44, -- ï©„
+ },
+ [0xFA45]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x002D",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6D77 },
+ ["unicodeslot"]=0xFA45, -- ï©…
+ },
+ [0xFA46]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x002E",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6E1A },
+ ["unicodeslot"]=0xFA46, -- 渚
+ },
+ [0xFA47]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x002F",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6F22 },
+ ["unicodeslot"]=0xFA47, -- 漢
+ },
+ [0xFA48]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0030",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x716E },
+ ["unicodeslot"]=0xFA48, -- 煮
+ },
+ [0xFA49]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0031",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x722B },
+ ["unicodeslot"]=0xFA49, -- 爫
+ },
+ [0xFA4A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0004A",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7422 },
+ ["unicodeslot"]=0xFA4A, -- ï©Š
+ },
+ [0xFA4B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0004B",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7891 },
+ ["unicodeslot"]=0xFA4B, -- ï©‹
+ },
+ [0xFA4C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0004C",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x793E },
+ ["unicodeslot"]=0xFA4C, -- 社
+ },
+ [0xFA4D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0004D",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7949 },
+ ["unicodeslot"]=0xFA4D, -- ï©
+ },
+ [0xFA4E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0004E",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7948 },
+ ["unicodeslot"]=0xFA4E, -- ï©Ž
+ },
+ [0xFA4F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0004F",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7950 },
+ ["unicodeslot"]=0xFA4F, -- ï©
+ },
+ [0xFA50]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0032",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7956 },
+ ["unicodeslot"]=0xFA50, -- ï©
+ },
+ [0xFA51]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0033",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x795D },
+ ["unicodeslot"]=0xFA51, -- ï©‘
+ },
+ [0xFA52]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0034",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x798D },
+ ["unicodeslot"]=0xFA52, -- ï©’
+ },
+ [0xFA53]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0035",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x798E },
+ ["unicodeslot"]=0xFA53, -- ï©“
+ },
+ [0xFA54]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0036",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7A40 },
+ ["unicodeslot"]=0xFA54, -- ï©”
+ },
+ [0xFA55]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0037",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7A81 },
+ ["unicodeslot"]=0xFA55, -- ï©•
+ },
+ [0xFA56]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0038",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7BC0 },
+ ["unicodeslot"]=0xFA56, -- ï©–
+ },
+ [0xFA57]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0039",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7DF4 },
+ ["unicodeslot"]=0xFA57, -- ï©—
+ },
+ [0xFA58]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x003A",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7E09 },
+ ["unicodeslot"]=0xFA58, -- 縉
+ },
+ [0xFA59]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x003B",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7E41 },
+ ["unicodeslot"]=0xFA59, -- ï©™
+ },
+ [0xFA5A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0005A",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7F72 },
+ ["unicodeslot"]=0xFA5A, -- ï©š
+ },
+ [0xFA5B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0005B",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8005 },
+ ["unicodeslot"]=0xFA5B, -- ï©›
+ },
+ [0xFA5C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0005C",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x81ED },
+ ["unicodeslot"]=0xFA5C, -- 臭
+ },
+ [0xFA5D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0005D",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8279 },
+ ["unicodeslot"]=0xFA5D, -- ï©
+ },
+ [0xFA5E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0005E",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8279 },
+ ["unicodeslot"]=0xFA5E, -- ï©ž
+ },
+ [0xFA5F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0005F",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8457 },
+ ["unicodeslot"]=0xFA5F, -- ï©Ÿ
+ },
+ [0xFA60]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x003C",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8910 },
+ ["unicodeslot"]=0xFA60, -- ï© 
+ },
+ [0xFA61]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x003D",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8996 },
+ ["unicodeslot"]=0xFA61, -- ï©¡
+ },
+ [0xFA62]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x003E",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8B01 },
+ ["unicodeslot"]=0xFA62, -- ï©¢
+ },
+ [0xFA63]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x003F",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8B39 },
+ ["unicodeslot"]=0xFA63, -- ï©£
+ },
+ [0xFA64]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0040",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8CD3 },
+ ["unicodeslot"]=0xFA64, -- 賓
+ },
+ [0xFA65]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0041",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8D08 },
+ ["unicodeslot"]=0xFA65, -- ï©¥
+ },
+ [0xFA66]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0042",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8FB6 },
+ ["unicodeslot"]=0xFA66, -- 辶
+ },
+ [0xFA67]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0043",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x9038 },
+ ["unicodeslot"]=0xFA67, -- 逸
+ },
+ [0xFA68]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0044",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x96E3 },
+ ["unicodeslot"]=0xFA68, -- 難
+ },
+ [0xFA69]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0045",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x97FF },
+ ["unicodeslot"]=0xFA69, -- ï©©
+ },
+ [0xFA6A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0006A",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x983B },
+ ["unicodeslot"]=0xFA6A, -- 頻
+ },
+ [0xFA70]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0046",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x4E26 },
+ ["unicodeslot"]=0xFA70, -- ï©°
+ },
+ [0xFA71]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0047",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x51B5 },
+ ["unicodeslot"]=0xFA71, -- 况
+ },
+ [0xFA72]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0048",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5168 },
+ ["unicodeslot"]=0xFA72, -- 全
+ },
+ [0xFA73]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0049",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x4F80 },
+ ["unicodeslot"]=0xFA73, -- 侀
+ },
+ [0xFA74]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x004A",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5145 },
+ ["unicodeslot"]=0xFA74, -- ï©´
+ },
+ [0xFA75]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x004B",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5180 },
+ ["unicodeslot"]=0xFA75, -- 冀
+ },
+ [0xFA76]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x004C",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x52C7 },
+ ["unicodeslot"]=0xFA76, -- 勇
+ },
+ [0xFA77]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x004D",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x52FA },
+ ["unicodeslot"]=0xFA77, -- ï©·
+ },
+ [0xFA78]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x004E",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x559D },
+ ["unicodeslot"]=0xFA78, -- 喝
+ },
+ [0xFA79]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x004F",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5555 },
+ ["unicodeslot"]=0xFA79, -- 啕
+ },
+ [0xFA7A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0007A",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5599 },
+ ["unicodeslot"]=0xFA7A, -- 喙
+ },
+ [0xFA7B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0007B",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x55E2 },
+ ["unicodeslot"]=0xFA7B, -- ï©»
+ },
+ [0xFA7C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0007C",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x585A },
+ ["unicodeslot"]=0xFA7C, -- 塚
+ },
+ [0xFA7D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0007D",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x58B3 },
+ ["unicodeslot"]=0xFA7D, -- 墳
+ },
+ [0xFA7E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0007E",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5944 },
+ ["unicodeslot"]=0xFA7E, -- 奄
+ },
+ [0xFA7F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0007F",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5954 },
+ ["unicodeslot"]=0xFA7F, -- ï©¿
+ },
+ [0xFA80]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0050",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5A62 },
+ ["unicodeslot"]=0xFA80, -- 婢
+ },
+ [0xFA81]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0051",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5B28 },
+ ["unicodeslot"]=0xFA81, -- ïª
+ },
+ [0xFA82]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0052",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5ED2 },
+ ["unicodeslot"]=0xFA82, -- 廒
+ },
+ [0xFA83]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0053",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5ED9 },
+ ["unicodeslot"]=0xFA83, -- 廙
+ },
+ [0xFA84]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0054",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5F69 },
+ ["unicodeslot"]=0xFA84, -- 彩
+ },
+ [0xFA85]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0055",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5FAD },
+ ["unicodeslot"]=0xFA85, -- 徭
+ },
+ [0xFA86]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0056",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x60D8 },
+ ["unicodeslot"]=0xFA86, -- 惘
+ },
+ [0xFA87]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0057",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x614E },
+ ["unicodeslot"]=0xFA87, -- 慎
+ },
+ [0xFA88]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0058",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6108 },
+ ["unicodeslot"]=0xFA88, -- 愈
+ },
+ [0xFA89]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0059",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x618E },
+ ["unicodeslot"]=0xFA89, -- 憎
+ },
+ [0xFA8A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0008A",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6160 },
+ ["unicodeslot"]=0xFA8A, -- 慠
+ },
+ [0xFA8B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0008B",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x61F2 },
+ ["unicodeslot"]=0xFA8B, -- 懲
+ },
+ [0xFA8C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0008C",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6234 },
+ ["unicodeslot"]=0xFA8C, -- 戴
+ },
+ [0xFA8D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0008D",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x63C4 },
+ ["unicodeslot"]=0xFA8D, -- ïª
+ },
+ [0xFA8E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0008E",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x641C },
+ ["unicodeslot"]=0xFA8E, -- 搜
+ },
+ [0xFA8F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0008F",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6452 },
+ ["unicodeslot"]=0xFA8F, -- ïª
+ },
+ [0xFA90]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x005A",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6556 },
+ ["unicodeslot"]=0xFA90, -- ïª
+ },
+ [0xFA91]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x005B",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6674 },
+ ["unicodeslot"]=0xFA91, -- 晴
+ },
+ [0xFA92]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x005C",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6717 },
+ ["unicodeslot"]=0xFA92, -- 朗
+ },
+ [0xFA93]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x005D",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x671B },
+ ["unicodeslot"]=0xFA93, -- 望
+ },
+ [0xFA94]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x005E",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6756 },
+ ["unicodeslot"]=0xFA94, -- 杖
+ },
+ [0xFA95]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x005F",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6B79 },
+ ["unicodeslot"]=0xFA95, -- 歹
+ },
+ [0xFA96]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0060",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6BBA },
+ ["unicodeslot"]=0xFA96, -- 殺
+ },
+ [0xFA97]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0061",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6D41 },
+ ["unicodeslot"]=0xFA97, -- 流
+ },
+ [0xFA98]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0062",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6EDB },
+ ["unicodeslot"]=0xFA98, -- 滛
+ },
+ [0xFA99]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0063",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6ECB },
+ ["unicodeslot"]=0xFA99, -- 滋
+ },
+ [0xFA9A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0009A",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6F22 },
+ ["unicodeslot"]=0xFA9A, -- 漢
+ },
+ [0xFA9B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0009B",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x701E },
+ ["unicodeslot"]=0xFA9B, -- 瀞
+ },
+ [0xFA9C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0009C",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x716E },
+ ["unicodeslot"]=0xFA9C, -- 煮
+ },
+ [0xFA9D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0009D",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x77A7 },
+ ["unicodeslot"]=0xFA9D, -- ïª
+ },
+ [0xFA9E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0009E",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7235 },
+ ["unicodeslot"]=0xFA9E, -- 爵
+ },
+ [0xFA9F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FA0x0009F",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x72AF },
+ ["unicodeslot"]=0xFA9F, -- 犯
+ },
+ [0xFAA0]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FAA0x0000",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x732A },
+ ["unicodeslot"]=0xFAA0, -- 猪
+ },
+ [0xFAA1]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FAA0x0001",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7471 },
+ ["unicodeslot"]=0xFAA1, -- 瑱
+ },
+ [0xFAA2]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FAA0x0002",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7506 },
+ ["unicodeslot"]=0xFAA2, -- 甆
+ },
+ [0xFAA3]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FAA0x0003",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x753B },
+ ["unicodeslot"]=0xFAA3, -- 画
+ },
+ [0xFAA4]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FAA0x0004",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x761D },
+ ["unicodeslot"]=0xFAA4, -- 瘝
+ },
+ [0xFAA5]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FAA0x0005",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x761F },
+ ["unicodeslot"]=0xFAA5, -- 瘟
+ },
+ [0xFAA6]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FAA0x0006",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x76CA },
+ ["unicodeslot"]=0xFAA6, -- 益
+ },
+ [0xFAA7]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FAA0x0007",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x76DB },
+ ["unicodeslot"]=0xFAA7, -- 盛
+ },
+ [0xFAA8]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FAA0x0008",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x76F4 },
+ ["unicodeslot"]=0xFAA8, -- 直
+ },
+ [0xFAA9]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FAA0x0009",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x774A },
+ ["unicodeslot"]=0xFAA9, -- 睊
+ },
+ [0xFAAA]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FAAA",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7740 },
+ ["unicodeslot"]=0xFAAA, -- 着
+ },
+ [0xFAAB]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FAAB",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x78CC },
+ ["unicodeslot"]=0xFAAB, -- 磌
+ },
+ [0xFAAC]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FAAC",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7AB1 },
+ ["unicodeslot"]=0xFAAC, -- 窱
+ },
+ [0xFAAD]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FAAD",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7BC0 },
+ ["unicodeslot"]=0xFAAD, -- 節
+ },
+ [0xFAAE]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FAAE",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7C7B },
+ ["unicodeslot"]=0xFAAE, -- 类
+ },
+ [0xFAAF]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FAAF",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7D5B },
+ ["unicodeslot"]=0xFAAF, -- 絛
+ },
+ [0xFAB0]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FAB0x0000",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7DF4 },
+ ["unicodeslot"]=0xFAB0, -- 練
+ },
+ [0xFAB1]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FAB0x0001",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7F3E },
+ ["unicodeslot"]=0xFAB1, -- 缾
+ },
+ [0xFAB2]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FAB0x0002",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8005 },
+ ["unicodeslot"]=0xFAB2, -- 者
+ },
+ [0xFAB3]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FAB0x0003",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8352 },
+ ["unicodeslot"]=0xFAB3, -- 荒
+ },
+ [0xFAB4]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FAB0x0004",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x83EF },
+ ["unicodeslot"]=0xFAB4, -- 華
+ },
+ [0xFAB5]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FAB0x0005",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8779 },
+ ["unicodeslot"]=0xFAB5, -- 蝹
+ },
+ [0xFAB6]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FAB0x0006",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8941 },
+ ["unicodeslot"]=0xFAB6, -- 襁
+ },
+ [0xFAB7]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FAB0x0007",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8986 },
+ ["unicodeslot"]=0xFAB7, -- 覆
+ },
+ [0xFAB8]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FAB0x0008",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8996 },
+ ["unicodeslot"]=0xFAB8, -- 視
+ },
+ [0xFAB9]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FAB0x0009",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8ABF },
+ ["unicodeslot"]=0xFAB9, -- 調
+ },
+ [0xFABA]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FABA",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8AF8 },
+ ["unicodeslot"]=0xFABA, -- 諸
+ },
+ [0xFABB]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FABB",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8ACB },
+ ["unicodeslot"]=0xFABB, -- 請
+ },
+ [0xFABC]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FABC",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8B01 },
+ ["unicodeslot"]=0xFABC, -- 謁
+ },
+ [0xFABD]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FABD",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8AFE },
+ ["unicodeslot"]=0xFABD, -- 諾
+ },
+ [0xFABE]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FABE",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8AED },
+ ["unicodeslot"]=0xFABE, -- 諭
+ },
+ [0xFABF]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FABF",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8B39 },
+ ["unicodeslot"]=0xFABF, -- 謹
+ },
+ [0xFAC0]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FAC0x0000",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8B8A },
+ ["unicodeslot"]=0xFAC0, -- ï«€
+ },
+ [0xFAC1]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FAC0x0001",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8D08 },
+ ["unicodeslot"]=0xFAC1, -- ï«
+ },
+ [0xFAC2]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FAC0x0002",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8F38 },
+ ["unicodeslot"]=0xFAC2, -- ï«‚
+ },
+ [0xFAC3]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FAC0x0003",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x9072 },
+ ["unicodeslot"]=0xFAC3, -- 遲
+ },
+ [0xFAC4]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FAC0x0004",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x9199 },
+ ["unicodeslot"]=0xFAC4, -- ï«„
+ },
+ [0xFAC5]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FAC0x0005",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x9276 },
+ ["unicodeslot"]=0xFAC5, -- ï«…
+ },
+ [0xFAC6]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FAC0x0006",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x967C },
+ ["unicodeslot"]=0xFAC6, -- 陼
+ },
+ [0xFAC7]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FAC0x0007",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x96E3 },
+ ["unicodeslot"]=0xFAC7, -- 難
+ },
+ [0xFAC8]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FAC0x0008",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x9756 },
+ ["unicodeslot"]=0xFAC8, -- 靖
+ },
+ [0xFAC9]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FAC0x0009",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x97DB },
+ ["unicodeslot"]=0xFAC9, -- 韛
+ },
+ [0xFACA]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FACA",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x97FF },
+ ["unicodeslot"]=0xFACA, -- ï«Š
+ },
+ [0xFACB]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FACB",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x980B },
+ ["unicodeslot"]=0xFACB, -- ï«‹
+ },
+ [0xFACC]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FACC",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x983B },
+ ["unicodeslot"]=0xFACC, -- 頻
+ },
+ [0xFACD]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FACD",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x9B12 },
+ ["unicodeslot"]=0xFACD, -- ï«
+ },
+ [0xFACE]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FACE",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x9F9C },
+ ["unicodeslot"]=0xFACE, -- ï«Ž
+ },
+ [0xFACF]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FACF",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x2284A },
+ ["unicodeslot"]=0xFACF, -- ï«
+ },
+ [0xFAD0]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FAD0x0000",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x22844 },
+ ["unicodeslot"]=0xFAD0, -- ï«
+ },
+ [0xFAD1]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FAD0x0001",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x233D5 },
+ ["unicodeslot"]=0xFAD1, -- ï«‘
+ },
+ [0xFAD2]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FAD0x0002",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x3B9D },
+ ["unicodeslot"]=0xFAD2, -- ï«’
+ },
+ [0xFAD3]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FAD0x0003",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x4018 },
+ ["unicodeslot"]=0xFAD3, -- ï«“
+ },
+ [0xFAD4]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FAD0x0004",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x4039 },
+ ["unicodeslot"]=0xFAD4, -- ï«”
+ },
+ [0xFAD5]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FAD0x0005",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x25249 },
+ ["unicodeslot"]=0xFAD5, -- ï«•
+ },
+ [0xFAD6]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FAD0x0006",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x25CD0 },
+ ["unicodeslot"]=0xFAD6, -- ï«–
+ },
+ [0xFAD7]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FAD0x0007",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x27ED3 },
+ ["unicodeslot"]=0xFAD7, -- ï«—
+ },
+ [0xFAD8]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FAD0x0008",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x9F43 },
+ ["unicodeslot"]=0xFAD8, -- 齃
+ },
+ [0xFAD9]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-FAD0x0009",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x9F8E },
+ ["unicodeslot"]=0xFAD9, -- ï«™
+ },
+ [0xFB00]={
+ ["category"]="ll",
+ ["contextname"]="ffligature",
+ ["description"]="LATIN SMALL LIGATURE FF",
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x0066, 0x0066 },
+ ["unicodeslot"]=0xFB00, -- ff
+ },
+ [0xFB01]={
+ ["category"]="ll",
+ ["contextname"]="filigature",
+ ["description"]="LATIN SMALL LIGATURE FI",
+ ["linebreak"]="al",
+ ["shcode"]={ 0x0066, 0x0069 },
+ ["specials"]={ "compat", 0x0066, 0x0069 },
+ ["unicodeslot"]=0xFB01, -- ï¬
+ },
+ [0xFB02]={
+ ["category"]="ll",
+ ["contextname"]="flligature",
+ ["description"]="LATIN SMALL LIGATURE FL",
+ ["linebreak"]="al",
+ ["shcode"]={ 0x0066, 0x006C },
+ ["specials"]={ "compat", 0x0066, 0x006C },
+ ["unicodeslot"]=0xFB02, -- fl
+ },
+ [0xFB03]={
+ ["category"]="ll",
+ ["contextname"]="ffiligature",
+ ["description"]="LATIN SMALL LIGATURE FFI",
+ ["linebreak"]="al",
+ ["shcode"]={ 0x0066, 0x0069 },
+ ["specials"]={ "compat", 0x0066, 0x0066, 0x0069 },
+ ["unicodeslot"]=0xFB03, -- ffi
+ },
+ [0xFB04]={
+ ["category"]="ll",
+ ["contextname"]="fflligature",
+ ["description"]="LATIN SMALL LIGATURE FFL",
+ ["linebreak"]="al",
+ ["shcode"]={ 0x0066, 0x006C },
+ ["specials"]={ "compat", 0x0066, 0x0066, 0x006C },
+ ["unicodeslot"]=0xFB04, -- ffl
+ },
+ [0xFB05]={
+ ["category"]="ll",
+ ["description"]="LATIN SMALL LIGATURE LONG S T",
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x017F, 0x0074 },
+ ["unicodeslot"]=0xFB05, -- ſt
+ },
+ [0xFB06]={
+ ["category"]="ll",
+ ["contextname"]="stligature",
+ ["description"]="LATIN SMALL LIGATURE ST",
+ ["linebreak"]="al",
+ ["shcode"]={ 0x0073, 0x0074 },
+ ["specials"]={ "compat", 0x0073, 0x0074 },
+ ["unicodeslot"]=0xFB06, -- st
+ },
+ [0xFB13]={
+ ["category"]="ll",
+ ["description"]="ARMENIAN SMALL LIGATURE MEN NOW",
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x0574, 0x0576 },
+ ["unicodeslot"]=0xFB13, -- ﬓ
+ },
+ [0xFB14]={
+ ["category"]="ll",
+ ["description"]="ARMENIAN SMALL LIGATURE MEN ECH",
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x0574, 0x0565 },
+ ["unicodeslot"]=0xFB14, -- ﬔ
+ },
+ [0xFB15]={
+ ["category"]="ll",
+ ["description"]="ARMENIAN SMALL LIGATURE MEN INI",
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x0574, 0x056B },
+ ["unicodeslot"]=0xFB15, -- ﬕ
+ },
+ [0xFB16]={
+ ["category"]="ll",
+ ["description"]="ARMENIAN SMALL LIGATURE VEW NOW",
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x057E, 0x0576 },
+ ["unicodeslot"]=0xFB16, -- ﬖ
+ },
+ [0xFB17]={
+ ["category"]="ll",
+ ["description"]="ARMENIAN SMALL LIGATURE MEN XEH",
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x0574, 0x056D },
+ ["unicodeslot"]=0xFB17, -- ﬗ
+ },
+ [0xFB1D]={
+ ["category"]="lo",
+ ["description"]="HEBREW LETTER YOD WITH HIRIQ",
+ ["linebreak"]="al",
+ ["shcode"]=0x05D9,
+ ["specials"]={ "char", 0x05D9, 0x05B4 },
+ ["unicodeslot"]=0xFB1D, -- ï¬
+ },
+ [0xFB1E]={
+ ["category"]="mn",
+ ["description"]="HEBREW POINT JUDEO-SPANISH VARIKA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xFB1E, -- ﬞ
+ },
+ [0xFB1F]={
+ ["category"]="lo",
+ ["description"]="HEBREW LIGATURE YIDDISH YOD YOD PATAH",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x05F2, 0x05B7 },
+ ["unicodeslot"]=0xFB1F, -- ײַ
+ },
+ [0xFB20]={
+ ["category"]="lo",
+ ["description"]="HEBREW LETTER ALTERNATIVE AYIN",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x05E2 },
+ ["unicodeslot"]=0xFB20, -- ﬠ
+ },
+ [0xFB21]={
+ ["category"]="lo",
+ ["description"]="HEBREW LETTER WIDE ALEF",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x05D0 },
+ ["unicodeslot"]=0xFB21, -- ﬡ
+ },
+ [0xFB22]={
+ ["category"]="lo",
+ ["description"]="HEBREW LETTER WIDE DALET",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x05D3 },
+ ["unicodeslot"]=0xFB22, -- ﬢ
+ },
+ [0xFB23]={
+ ["category"]="lo",
+ ["description"]="HEBREW LETTER WIDE HE",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x05D4 },
+ ["unicodeslot"]=0xFB23, -- ﬣ
+ },
+ [0xFB24]={
+ ["category"]="lo",
+ ["description"]="HEBREW LETTER WIDE KAF",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x05DB },
+ ["unicodeslot"]=0xFB24, -- ﬤ
+ },
+ [0xFB25]={
+ ["category"]="lo",
+ ["description"]="HEBREW LETTER WIDE LAMED",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x05DC },
+ ["unicodeslot"]=0xFB25, -- ﬥ
+ },
+ [0xFB26]={
+ ["category"]="lo",
+ ["description"]="HEBREW LETTER WIDE FINAL MEM",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x05DD },
+ ["unicodeslot"]=0xFB26, -- ﬦ
+ },
+ [0xFB27]={
+ ["category"]="lo",
+ ["description"]="HEBREW LETTER WIDE RESH",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x05E8 },
+ ["unicodeslot"]=0xFB27, -- ﬧ
+ },
+ [0xFB28]={
+ ["category"]="lo",
+ ["description"]="HEBREW LETTER WIDE TAV",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x05EA },
+ ["unicodeslot"]=0xFB28, -- ﬨ
+ },
+ [0xFB29]={
+ ["category"]="sm",
+ ["description"]="HEBREW LETTER ALTERNATIVE PLUS SIGN",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x002B },
+ ["unicodeslot"]=0xFB29, -- ﬩
+ },
+ [0xFB2A]={
+ ["category"]="lo",
+ ["description"]="HEBREW LETTER SHIN WITH SHIN DOT",
+ ["linebreak"]="al",
+ ["shcode"]=0x05E9,
+ ["specials"]={ "char", 0x05E9, 0x05C1 },
+ ["unicodeslot"]=0xFB2A, -- שׁ
+ },
+ [0xFB2B]={
+ ["category"]="lo",
+ ["description"]="HEBREW LETTER SHIN WITH SIN DOT",
+ ["linebreak"]="al",
+ ["shcode"]=0x05E9,
+ ["specials"]={ "char", 0x05E9, 0x05C2 },
+ ["unicodeslot"]=0xFB2B, -- שׂ
+ },
+ [0xFB2C]={
+ ["category"]="lo",
+ ["description"]="HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT",
+ ["linebreak"]="al",
+ ["shcode"]=0x05E9,
+ ["specials"]={ "char", 0xFB49, 0x05C1 },
+ ["unicodeslot"]=0xFB2C, -- שּׁ
+ },
+ [0xFB2D]={
+ ["category"]="lo",
+ ["description"]="HEBREW LETTER SHIN WITH DAGESH AND SIN DOT",
+ ["linebreak"]="al",
+ ["shcode"]=0x05E9,
+ ["specials"]={ "char", 0xFB49, 0x05C2 },
+ ["unicodeslot"]=0xFB2D, -- שּׂ
+ },
+ [0xFB2E]={
+ ["category"]="lo",
+ ["description"]="HEBREW LETTER ALEF WITH PATAH",
+ ["linebreak"]="al",
+ ["shcode"]=0x05D0,
+ ["specials"]={ "char", 0x05D0, 0x05B7 },
+ ["unicodeslot"]=0xFB2E, -- אַ
+ },
+ [0xFB2F]={
+ ["category"]="lo",
+ ["description"]="HEBREW LETTER ALEF WITH QAMATS",
+ ["linebreak"]="al",
+ ["shcode"]=0x05D0,
+ ["specials"]={ "char", 0x05D0, 0x05B8 },
+ ["unicodeslot"]=0xFB2F, -- אָ
+ },
+ [0xFB30]={
+ ["category"]="lo",
+ ["description"]="HEBREW LETTER ALEF WITH MAPIQ",
+ ["linebreak"]="al",
+ ["shcode"]=0x05D0,
+ ["specials"]={ "char", 0x05D0, 0x05BC },
+ ["unicodeslot"]=0xFB30, -- אּ
+ },
+ [0xFB31]={
+ ["category"]="lo",
+ ["description"]="HEBREW LETTER BET WITH DAGESH",
+ ["linebreak"]="al",
+ ["shcode"]=0x05D1,
+ ["specials"]={ "char", 0x05D1, 0x05BC },
+ ["unicodeslot"]=0xFB31, -- בּ
+ },
+ [0xFB32]={
+ ["category"]="lo",
+ ["description"]="HEBREW LETTER GIMEL WITH DAGESH",
+ ["linebreak"]="al",
+ ["shcode"]=0x05D2,
+ ["specials"]={ "char", 0x05D2, 0x05BC },
+ ["unicodeslot"]=0xFB32, -- גּ
+ },
+ [0xFB33]={
+ ["category"]="lo",
+ ["description"]="HEBREW LETTER DALET WITH DAGESH",
+ ["linebreak"]="al",
+ ["shcode"]=0x05D3,
+ ["specials"]={ "char", 0x05D3, 0x05BC },
+ ["unicodeslot"]=0xFB33, -- דּ
+ },
+ [0xFB34]={
+ ["category"]="lo",
+ ["description"]="HEBREW LETTER HE WITH MAPIQ",
+ ["linebreak"]="al",
+ ["shcode"]=0x05D4,
+ ["specials"]={ "char", 0x05D4, 0x05BC },
+ ["unicodeslot"]=0xFB34, -- הּ
+ },
+ [0xFB35]={
+ ["category"]="lo",
+ ["description"]="HEBREW LETTER VAV WITH DAGESH",
+ ["linebreak"]="al",
+ ["shcode"]=0x05D5,
+ ["specials"]={ "char", 0x05D5, 0x05BC },
+ ["unicodeslot"]=0xFB35, -- וּ
+ },
+ [0xFB36]={
+ ["category"]="lo",
+ ["description"]="HEBREW LETTER ZAYIN WITH DAGESH",
+ ["linebreak"]="al",
+ ["shcode"]=0x05D6,
+ ["specials"]={ "char", 0x05D6, 0x05BC },
+ ["unicodeslot"]=0xFB36, -- זּ
+ },
+ [0xFB38]={
+ ["category"]="lo",
+ ["description"]="HEBREW LETTER TET WITH DAGESH",
+ ["linebreak"]="al",
+ ["shcode"]=0x05D8,
+ ["specials"]={ "char", 0x05D8, 0x05BC },
+ ["unicodeslot"]=0xFB38, -- טּ
+ },
+ [0xFB39]={
+ ["category"]="lo",
+ ["description"]="HEBREW LETTER YOD WITH DAGESH",
+ ["linebreak"]="al",
+ ["shcode"]=0x05D9,
+ ["specials"]={ "char", 0x05D9, 0x05BC },
+ ["unicodeslot"]=0xFB39, -- יּ
+ },
+ [0xFB3A]={
+ ["category"]="lo",
+ ["description"]="HEBREW LETTER FINAL KAF WITH DAGESH",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x05DA, 0x05BC },
+ ["unicodeslot"]=0xFB3A, -- ךּ
+ },
+ [0xFB3B]={
+ ["category"]="lo",
+ ["description"]="HEBREW LETTER KAF WITH DAGESH",
+ ["linebreak"]="al",
+ ["shcode"]=0x05DB,
+ ["specials"]={ "char", 0x05DB, 0x05BC },
+ ["unicodeslot"]=0xFB3B, -- כּ
+ },
+ [0xFB3C]={
+ ["category"]="lo",
+ ["description"]="HEBREW LETTER LAMED WITH DAGESH",
+ ["linebreak"]="al",
+ ["shcode"]=0x05DC,
+ ["specials"]={ "char", 0x05DC, 0x05BC },
+ ["unicodeslot"]=0xFB3C, -- לּ
+ },
+ [0xFB3E]={
+ ["category"]="lo",
+ ["description"]="HEBREW LETTER MEM WITH DAGESH",
+ ["linebreak"]="al",
+ ["shcode"]=0x05DE,
+ ["specials"]={ "char", 0x05DE, 0x05BC },
+ ["unicodeslot"]=0xFB3E, -- מּ
+ },
+ [0xFB40]={
+ ["category"]="lo",
+ ["description"]="HEBREW LETTER NUN WITH DAGESH",
+ ["linebreak"]="al",
+ ["shcode"]=0x05E0,
+ ["specials"]={ "char", 0x05E0, 0x05BC },
+ ["unicodeslot"]=0xFB40, -- ï­€
+ },
+ [0xFB41]={
+ ["category"]="lo",
+ ["description"]="HEBREW LETTER SAMEKH WITH DAGESH",
+ ["linebreak"]="al",
+ ["shcode"]=0x05E1,
+ ["specials"]={ "char", 0x05E1, 0x05BC },
+ ["unicodeslot"]=0xFB41, -- ï­
+ },
+ [0xFB43]={
+ ["category"]="lo",
+ ["description"]="HEBREW LETTER FINAL PE WITH DAGESH",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x05E3, 0x05BC },
+ ["unicodeslot"]=0xFB43, -- ï­ƒ
+ },
+ [0xFB44]={
+ ["category"]="lo",
+ ["description"]="HEBREW LETTER PE WITH DAGESH",
+ ["linebreak"]="al",
+ ["shcode"]=0x05E4,
+ ["specials"]={ "char", 0x05E4, 0x05BC },
+ ["unicodeslot"]=0xFB44, -- ï­„
+ },
+ [0xFB46]={
+ ["category"]="lo",
+ ["description"]="HEBREW LETTER TSADI WITH DAGESH",
+ ["linebreak"]="al",
+ ["shcode"]=0x05E6,
+ ["specials"]={ "char", 0x05E6, 0x05BC },
+ ["unicodeslot"]=0xFB46, -- ï­†
+ },
+ [0xFB47]={
+ ["category"]="lo",
+ ["description"]="HEBREW LETTER QOF WITH DAGESH",
+ ["linebreak"]="al",
+ ["shcode"]=0x05E7,
+ ["specials"]={ "char", 0x05E7, 0x05BC },
+ ["unicodeslot"]=0xFB47, -- ï­‡
+ },
+ [0xFB48]={
+ ["category"]="lo",
+ ["description"]="HEBREW LETTER RESH WITH DAGESH",
+ ["linebreak"]="al",
+ ["shcode"]=0x05E8,
+ ["specials"]={ "char", 0x05E8, 0x05BC },
+ ["unicodeslot"]=0xFB48, -- ï­ˆ
+ },
+ [0xFB49]={
+ ["category"]="lo",
+ ["description"]="HEBREW LETTER SHIN WITH DAGESH",
+ ["linebreak"]="al",
+ ["shcode"]=0x05E9,
+ ["specials"]={ "char", 0x05E9, 0x05BC },
+ ["unicodeslot"]=0xFB49, -- ï­‰
+ },
+ [0xFB4A]={
+ ["category"]="lo",
+ ["description"]="HEBREW LETTER TAV WITH DAGESH",
+ ["linebreak"]="al",
+ ["shcode"]=0x05EA,
+ ["specials"]={ "char", 0x05EA, 0x05BC },
+ ["unicodeslot"]=0xFB4A, -- ï­Š
+ },
+ [0xFB4B]={
+ ["category"]="lo",
+ ["description"]="HEBREW LETTER VAV WITH HOLAM",
+ ["linebreak"]="al",
+ ["shcode"]=0x05D5,
+ ["specials"]={ "char", 0x05D5, 0x05B9 },
+ ["unicodeslot"]=0xFB4B, -- ï­‹
+ },
+ [0xFB4C]={
+ ["category"]="lo",
+ ["description"]="HEBREW LETTER BET WITH RAFE",
+ ["linebreak"]="al",
+ ["shcode"]=0x05D1,
+ ["specials"]={ "char", 0x05D1, 0x05BF },
+ ["unicodeslot"]=0xFB4C, -- בֿ
+ },
+ [0xFB4D]={
+ ["category"]="lo",
+ ["description"]="HEBREW LETTER KAF WITH RAFE",
+ ["linebreak"]="al",
+ ["shcode"]=0x05DB,
+ ["specials"]={ "char", 0x05DB, 0x05BF },
+ ["unicodeslot"]=0xFB4D, -- ï­
+ },
+ [0xFB4E]={
+ ["category"]="lo",
+ ["description"]="HEBREW LETTER PE WITH RAFE",
+ ["linebreak"]="al",
+ ["shcode"]=0x05E4,
+ ["specials"]={ "char", 0x05E4, 0x05BF },
+ ["unicodeslot"]=0xFB4E, -- ï­Ž
+ },
+ [0xFB4F]={
+ ["category"]="lo",
+ ["description"]="HEBREW LIGATURE ALEF LAMED",
+ ["linebreak"]="al",
+ ["specials"]={ "compat", 0x05D0, 0x05DC },
+ ["unicodeslot"]=0xFB4F, -- ï­
+ },
+ [0xFB50]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER ALEF WASLA ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0671 },
+ ["unicodeslot"]=0xFB50, -- ï­
+ },
+ [0xFB51]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER ALEF WASLA FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0671 },
+ ["unicodeslot"]=0xFB51, -- ï­‘
+ },
+ [0xFB52]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER BEEH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x067B },
+ ["unicodeslot"]=0xFB52, -- ï­’
+ },
+ [0xFB53]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER BEEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x067B },
+ ["unicodeslot"]=0xFB53, -- ï­“
+ },
+ [0xFB54]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER BEEH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x067B },
+ ["unicodeslot"]=0xFB54, -- ï­”
+ },
+ [0xFB55]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER BEEH MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x067B },
+ ["unicodeslot"]=0xFB55, -- ï­•
+ },
+ [0xFB56]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER PEH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x067E },
+ ["unicodeslot"]=0xFB56, -- ï­–
+ },
+ [0xFB57]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER PEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x067E },
+ ["unicodeslot"]=0xFB57, -- ï­—
+ },
+ [0xFB58]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER PEH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x067E },
+ ["unicodeslot"]=0xFB58, -- ï­˜
+ },
+ [0xFB59]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER PEH MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x067E },
+ ["unicodeslot"]=0xFB59, -- ï­™
+ },
+ [0xFB5A]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER BEHEH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0680 },
+ ["unicodeslot"]=0xFB5A, -- ï­š
+ },
+ [0xFB5B]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER BEHEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0680 },
+ ["unicodeslot"]=0xFB5B, -- ï­›
+ },
+ [0xFB5C]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER BEHEH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0680 },
+ ["unicodeslot"]=0xFB5C, -- ﭜ
+ },
+ [0xFB5D]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER BEHEH MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x0680 },
+ ["unicodeslot"]=0xFB5D, -- ï­
+ },
+ [0xFB5E]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER TTEHEH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x067A },
+ ["unicodeslot"]=0xFB5E, -- ï­ž
+ },
+ [0xFB5F]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER TTEHEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x067A },
+ ["unicodeslot"]=0xFB5F, -- ï­Ÿ
+ },
+ [0xFB60]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER TTEHEH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x067A },
+ ["unicodeslot"]=0xFB60, -- ï­ 
+ },
+ [0xFB61]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER TTEHEH MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x067A },
+ ["unicodeslot"]=0xFB61, -- ï­¡
+ },
+ [0xFB62]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER TEHEH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x067F },
+ ["unicodeslot"]=0xFB62, -- ï­¢
+ },
+ [0xFB63]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER TEHEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x067F },
+ ["unicodeslot"]=0xFB63, -- ï­£
+ },
+ [0xFB64]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER TEHEH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x067F },
+ ["unicodeslot"]=0xFB64, -- ï­¤
+ },
+ [0xFB65]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER TEHEH MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x067F },
+ ["unicodeslot"]=0xFB65, -- ï­¥
+ },
+ [0xFB66]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER TTEH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0679 },
+ ["unicodeslot"]=0xFB66, -- ï­¦
+ },
+ [0xFB67]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER TTEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0679 },
+ ["unicodeslot"]=0xFB67, -- ï­§
+ },
+ [0xFB68]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER TTEH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0679 },
+ ["unicodeslot"]=0xFB68, -- ï­¨
+ },
+ [0xFB69]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER TTEH MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x0679 },
+ ["unicodeslot"]=0xFB69, -- ï­©
+ },
+ [0xFB6A]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER VEH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x06A4 },
+ ["unicodeslot"]=0xFB6A, -- ï­ª
+ },
+ [0xFB6B]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER VEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x06A4 },
+ ["unicodeslot"]=0xFB6B, -- ï­«
+ },
+ [0xFB6C]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER VEH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x06A4 },
+ ["unicodeslot"]=0xFB6C, -- ï­¬
+ },
+ [0xFB6D]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER VEH MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x06A4 },
+ ["unicodeslot"]=0xFB6D, -- ï­­
+ },
+ [0xFB6E]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER PEHEH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x06A6 },
+ ["unicodeslot"]=0xFB6E, -- ï­®
+ },
+ [0xFB6F]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER PEHEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x06A6 },
+ ["unicodeslot"]=0xFB6F, -- ï­¯
+ },
+ [0xFB70]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER PEHEH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x06A6 },
+ ["unicodeslot"]=0xFB70, -- ï­°
+ },
+ [0xFB71]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER PEHEH MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x06A6 },
+ ["unicodeslot"]=0xFB71, -- ï­±
+ },
+ [0xFB72]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER DYEH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0684 },
+ ["unicodeslot"]=0xFB72, -- ï­²
+ },
+ [0xFB73]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER DYEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0684 },
+ ["unicodeslot"]=0xFB73, -- ï­³
+ },
+ [0xFB74]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER DYEH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0684 },
+ ["unicodeslot"]=0xFB74, -- ï­´
+ },
+ [0xFB75]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER DYEH MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x0684 },
+ ["unicodeslot"]=0xFB75, -- ï­µ
+ },
+ [0xFB76]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER NYEH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0683 },
+ ["unicodeslot"]=0xFB76, -- ï­¶
+ },
+ [0xFB77]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER NYEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0683 },
+ ["unicodeslot"]=0xFB77, -- ï­·
+ },
+ [0xFB78]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER NYEH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0683 },
+ ["unicodeslot"]=0xFB78, -- ï­¸
+ },
+ [0xFB79]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER NYEH MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x0683 },
+ ["unicodeslot"]=0xFB79, -- ï­¹
+ },
+ [0xFB7A]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER TCHEH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0686 },
+ ["unicodeslot"]=0xFB7A, -- ï­º
+ },
+ [0xFB7B]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER TCHEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0686 },
+ ["unicodeslot"]=0xFB7B, -- ï­»
+ },
+ [0xFB7C]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER TCHEH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0686 },
+ ["unicodeslot"]=0xFB7C, -- ï­¼
+ },
+ [0xFB7D]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER TCHEH MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x0686 },
+ ["unicodeslot"]=0xFB7D, -- ï­½
+ },
+ [0xFB7E]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER TCHEHEH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0687 },
+ ["unicodeslot"]=0xFB7E, -- ï­¾
+ },
+ [0xFB7F]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER TCHEHEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0687 },
+ ["unicodeslot"]=0xFB7F, -- ï­¿
+ },
+ [0xFB80]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER TCHEHEH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0687 },
+ ["unicodeslot"]=0xFB80, -- ﮀ
+ },
+ [0xFB81]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER TCHEHEH MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x0687 },
+ ["unicodeslot"]=0xFB81, -- ï®
+ },
+ [0xFB82]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER DDAHAL ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x068D },
+ ["unicodeslot"]=0xFB82, -- ﮂ
+ },
+ [0xFB83]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER DDAHAL FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x068D },
+ ["unicodeslot"]=0xFB83, -- ﮃ
+ },
+ [0xFB84]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER DAHAL ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x068C },
+ ["unicodeslot"]=0xFB84, -- ﮄ
+ },
+ [0xFB85]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER DAHAL FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x068C },
+ ["unicodeslot"]=0xFB85, -- ï®…
+ },
+ [0xFB86]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER DUL ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x068E },
+ ["unicodeslot"]=0xFB86, -- ﮆ
+ },
+ [0xFB87]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER DUL FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x068E },
+ ["unicodeslot"]=0xFB87, -- ﮇ
+ },
+ [0xFB88]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER DDAL ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0688 },
+ ["unicodeslot"]=0xFB88, -- ﮈ
+ },
+ [0xFB89]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER DDAL FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0688 },
+ ["unicodeslot"]=0xFB89, -- ﮉ
+ },
+ [0xFB8A]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER JEH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0698 },
+ ["unicodeslot"]=0xFB8A, -- ﮊ
+ },
+ [0xFB8B]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER JEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0698 },
+ ["unicodeslot"]=0xFB8B, -- ﮋ
+ },
+ [0xFB8C]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER RREH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0691 },
+ ["unicodeslot"]=0xFB8C, -- ﮌ
+ },
+ [0xFB8D]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER RREH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0691 },
+ ["unicodeslot"]=0xFB8D, -- ï®
+ },
+ [0xFB8E]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER KEHEH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x06A9 },
+ ["unicodeslot"]=0xFB8E, -- ﮎ
+ },
+ [0xFB8F]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER KEHEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x06A9 },
+ ["unicodeslot"]=0xFB8F, -- ï®
+ },
+ [0xFB90]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER KEHEH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x06A9 },
+ ["unicodeslot"]=0xFB90, -- ï®
+ },
+ [0xFB91]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER KEHEH MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x06A9 },
+ ["unicodeslot"]=0xFB91, -- ﮑ
+ },
+ [0xFB92]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER GAF ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x06AF },
+ ["unicodeslot"]=0xFB92, -- ï®’
+ },
+ [0xFB93]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER GAF FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x06AF },
+ ["unicodeslot"]=0xFB93, -- ﮓ
+ },
+ [0xFB94]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER GAF INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x06AF },
+ ["unicodeslot"]=0xFB94, -- ï®”
+ },
+ [0xFB95]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER GAF MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x06AF },
+ ["unicodeslot"]=0xFB95, -- ﮕ
+ },
+ [0xFB96]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER GUEH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x06B3 },
+ ["unicodeslot"]=0xFB96, -- ï®–
+ },
+ [0xFB97]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER GUEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x06B3 },
+ ["unicodeslot"]=0xFB97, -- ï®—
+ },
+ [0xFB98]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER GUEH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x06B3 },
+ ["unicodeslot"]=0xFB98, -- ﮘ
+ },
+ [0xFB99]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER GUEH MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x06B3 },
+ ["unicodeslot"]=0xFB99, -- ï®™
+ },
+ [0xFB9A]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER NGOEH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x06B1 },
+ ["unicodeslot"]=0xFB9A, -- ﮚ
+ },
+ [0xFB9B]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER NGOEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x06B1 },
+ ["unicodeslot"]=0xFB9B, -- ï®›
+ },
+ [0xFB9C]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER NGOEH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x06B1 },
+ ["unicodeslot"]=0xFB9C, -- ﮜ
+ },
+ [0xFB9D]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER NGOEH MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x06B1 },
+ ["unicodeslot"]=0xFB9D, -- ï®
+ },
+ [0xFB9E]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER NOON GHUNNA ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x06BA },
+ ["unicodeslot"]=0xFB9E, -- ﮞ
+ },
+ [0xFB9F]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER NOON GHUNNA FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x06BA },
+ ["unicodeslot"]=0xFB9F, -- ﮟ
+ },
+ [0xFBA0]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER RNOON ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x06BB },
+ ["unicodeslot"]=0xFBA0, -- ï® 
+ },
+ [0xFBA1]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER RNOON FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x06BB },
+ ["unicodeslot"]=0xFBA1, -- ﮡ
+ },
+ [0xFBA2]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER RNOON INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x06BB },
+ ["unicodeslot"]=0xFBA2, -- ﮢ
+ },
+ [0xFBA3]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER RNOON MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x06BB },
+ ["unicodeslot"]=0xFBA3, -- ﮣ
+ },
+ [0xFBA4]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM",
+ ["linebreak"]="al",
+ ["shcode"]=0x0647,
+ ["specials"]={ "isolated", 0x06C0 },
+ ["unicodeslot"]=0xFBA4, -- ﮤ
+ },
+ [0xFBA5]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM",
+ ["linebreak"]="al",
+ ["shcode"]=0x0647,
+ ["specials"]={ "final", 0x06C0 },
+ ["unicodeslot"]=0xFBA5, -- ﮥ
+ },
+ [0xFBA6]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER HEH GOAL ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x06C1 },
+ ["unicodeslot"]=0xFBA6, -- ﮦ
+ },
+ [0xFBA7]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER HEH GOAL FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x06C1 },
+ ["unicodeslot"]=0xFBA7, -- ﮧ
+ },
+ [0xFBA8]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER HEH GOAL INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x06C1 },
+ ["unicodeslot"]=0xFBA8, -- ﮨ
+ },
+ [0xFBA9]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER HEH GOAL MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x06C1 },
+ ["unicodeslot"]=0xFBA9, -- ﮩ
+ },
+ [0xFBAA]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x06BE },
+ ["unicodeslot"]=0xFBAA, -- ﮪ
+ },
+ [0xFBAB]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER HEH DOACHASHMEE FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x06BE },
+ ["unicodeslot"]=0xFBAB, -- ﮫ
+ },
+ [0xFBAC]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER HEH DOACHASHMEE INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x06BE },
+ ["unicodeslot"]=0xFBAC, -- ﮬ
+ },
+ [0xFBAD]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x06BE },
+ ["unicodeslot"]=0xFBAD, -- ï®­
+ },
+ [0xFBAE]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER YEH BARREE ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x06D2 },
+ ["unicodeslot"]=0xFBAE, -- ï®®
+ },
+ [0xFBAF]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER YEH BARREE FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x06D2 },
+ ["unicodeslot"]=0xFBAF, -- ﮯ
+ },
+ [0xFBB0]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x06D3 },
+ ["unicodeslot"]=0xFBB0, -- ï®°
+ },
+ [0xFBB1]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x06D3 },
+ ["unicodeslot"]=0xFBB1, -- ï®±
+ },
+ [0xFBD3]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER NG ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x06AD },
+ ["unicodeslot"]=0xFBD3, -- ﯓ
+ },
+ [0xFBD4]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER NG FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x06AD },
+ ["unicodeslot"]=0xFBD4, -- ﯔ
+ },
+ [0xFBD5]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER NG INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x06AD },
+ ["unicodeslot"]=0xFBD5, -- ﯕ
+ },
+ [0xFBD6]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER NG MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x06AD },
+ ["unicodeslot"]=0xFBD6, -- ﯖ
+ },
+ [0xFBD7]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER U ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x06C7 },
+ ["unicodeslot"]=0xFBD7, -- ﯗ
+ },
+ [0xFBD8]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER U FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x06C7 },
+ ["unicodeslot"]=0xFBD8, -- ﯘ
+ },
+ [0xFBD9]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER OE ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x06C6 },
+ ["unicodeslot"]=0xFBD9, -- ﯙ
+ },
+ [0xFBDA]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER OE FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x06C6 },
+ ["unicodeslot"]=0xFBDA, -- ﯚ
+ },
+ [0xFBDB]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER YU ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x06C8 },
+ ["unicodeslot"]=0xFBDB, -- ﯛ
+ },
+ [0xFBDC]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER YU FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x06C8 },
+ ["unicodeslot"]=0xFBDC, -- ﯜ
+ },
+ [0xFBDD]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM",
+ ["linebreak"]="al",
+ ["shcode"]=0x06C7,
+ ["specials"]={ "isolated", 0x0677 },
+ ["unicodeslot"]=0xFBDD, -- ï¯
+ },
+ [0xFBDE]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER VE ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x06CB },
+ ["unicodeslot"]=0xFBDE, -- ﯞ
+ },
+ [0xFBDF]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER VE FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x06CB },
+ ["unicodeslot"]=0xFBDF, -- ﯟ
+ },
+ [0xFBE0]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER KIRGHIZ OE ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x06C5 },
+ ["unicodeslot"]=0xFBE0, -- ﯠ
+ },
+ [0xFBE1]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER KIRGHIZ OE FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x06C5 },
+ ["unicodeslot"]=0xFBE1, -- ﯡ
+ },
+ [0xFBE2]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER KIRGHIZ YU ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x06C9 },
+ ["unicodeslot"]=0xFBE2, -- ﯢ
+ },
+ [0xFBE3]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER KIRGHIZ YU FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x06C9 },
+ ["unicodeslot"]=0xFBE3, -- ﯣ
+ },
+ [0xFBE4]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER E ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x06D0 },
+ ["unicodeslot"]=0xFBE4, -- ﯤ
+ },
+ [0xFBE5]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER E FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x06D0 },
+ ["unicodeslot"]=0xFBE5, -- ﯥ
+ },
+ [0xFBE6]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER E INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x06D0 },
+ ["unicodeslot"]=0xFBE6, -- ﯦ
+ },
+ [0xFBE7]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER E MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x06D0 },
+ ["unicodeslot"]=0xFBE7, -- ﯧ
+ },
+ [0xFBE8]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0649 },
+ ["unicodeslot"]=0xFBE8, -- ﯨ
+ },
+ [0xFBE9]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x0649 },
+ ["unicodeslot"]=0xFBE9, -- ﯩ
+ },
+ [0xFBEA]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0626, 0x0627 },
+ ["unicodeslot"]=0xFBEA, -- ﯪ
+ },
+ [0xFBEB]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0626, 0x0627 },
+ ["unicodeslot"]=0xFBEB, -- ﯫ
+ },
+ [0xFBEC]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0626, 0x06D5 },
+ ["unicodeslot"]=0xFBEC, -- ﯬ
+ },
+ [0xFBED]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0626, 0x06D5 },
+ ["unicodeslot"]=0xFBED, -- ﯭ
+ },
+ [0xFBEE]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0626, 0x0648 },
+ ["unicodeslot"]=0xFBEE, -- ﯮ
+ },
+ [0xFBEF]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0626, 0x0648 },
+ ["unicodeslot"]=0xFBEF, -- ﯯ
+ },
+ [0xFBF0]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0626, 0x06C7 },
+ ["unicodeslot"]=0xFBF0, -- ﯰ
+ },
+ [0xFBF1]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0626, 0x06C7 },
+ ["unicodeslot"]=0xFBF1, -- ﯱ
+ },
+ [0xFBF2]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0626, 0x06C6 },
+ ["unicodeslot"]=0xFBF2, -- ﯲ
+ },
+ [0xFBF3]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0626, 0x06C6 },
+ ["unicodeslot"]=0xFBF3, -- ﯳ
+ },
+ [0xFBF4]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0626, 0x06C8 },
+ ["unicodeslot"]=0xFBF4, -- ﯴ
+ },
+ [0xFBF5]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0626, 0x06C8 },
+ ["unicodeslot"]=0xFBF5, -- ﯵ
+ },
+ [0xFBF6]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0626, 0x06D0 },
+ ["unicodeslot"]=0xFBF6, -- ﯶ
+ },
+ [0xFBF7]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0626, 0x06D0 },
+ ["unicodeslot"]=0xFBF7, -- ﯷ
+ },
+ [0xFBF8]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0626, 0x06D0 },
+ ["unicodeslot"]=0xFBF8, -- ﯸ
+ },
+ [0xFBF9]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0626, 0x0649 },
+ ["unicodeslot"]=0xFBF9, -- ﯹ
+ },
+ [0xFBFA]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0626, 0x0649 },
+ ["unicodeslot"]=0xFBFA, -- ﯺ
+ },
+ [0xFBFB]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0626, 0x0649 },
+ ["unicodeslot"]=0xFBFB, -- ﯻ
+ },
+ [0xFBFC]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER FARSI YEH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x06CC },
+ ["unicodeslot"]=0xFBFC, -- ﯼ
+ },
+ [0xFBFD]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER FARSI YEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x06CC },
+ ["unicodeslot"]=0xFBFD, -- ﯽ
+ },
+ [0xFBFE]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER FARSI YEH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x06CC },
+ ["unicodeslot"]=0xFBFE, -- ﯾ
+ },
+ [0xFBFF]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER FARSI YEH MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x06CC },
+ ["unicodeslot"]=0xFBFF, -- ﯿ
+ },
+ [0xFC00]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0626, 0x062C },
+ ["unicodeslot"]=0xFC00, -- ï°€
+ },
+ [0xFC01]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0626, 0x062D },
+ ["unicodeslot"]=0xFC01, -- ï°
+ },
+ [0xFC02]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0626, 0x0645 },
+ ["unicodeslot"]=0xFC02, -- ï°‚
+ },
+ [0xFC03]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0626, 0x0649 },
+ ["unicodeslot"]=0xFC03, -- ï°ƒ
+ },
+ [0xFC04]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0626, 0x064A },
+ ["unicodeslot"]=0xFC04, -- ï°„
+ },
+ [0xFC05]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0628, 0x062C },
+ ["unicodeslot"]=0xFC05, -- ï°…
+ },
+ [0xFC06]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE BEH WITH HAH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0628, 0x062D },
+ ["unicodeslot"]=0xFC06, -- ï°†
+ },
+ [0xFC07]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0628, 0x062E },
+ ["unicodeslot"]=0xFC07, -- ï°‡
+ },
+ [0xFC08]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0628, 0x0645 },
+ ["unicodeslot"]=0xFC08, -- ï°ˆ
+ },
+ [0xFC09]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0628, 0x0649 },
+ ["unicodeslot"]=0xFC09, -- ï°‰
+ },
+ [0xFC0A]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE BEH WITH YEH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0628, 0x064A },
+ ["unicodeslot"]=0xFC0A, -- ï°Š
+ },
+ [0xFC0B]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x062A, 0x062C },
+ ["unicodeslot"]=0xFC0B, -- ï°‹
+ },
+ [0xFC0C]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE TEH WITH HAH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x062A, 0x062D },
+ ["unicodeslot"]=0xFC0C, -- ﰌ
+ },
+ [0xFC0D]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x062A, 0x062E },
+ ["unicodeslot"]=0xFC0D, -- ï°
+ },
+ [0xFC0E]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x062A, 0x0645 },
+ ["unicodeslot"]=0xFC0E, -- ï°Ž
+ },
+ [0xFC0F]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x062A, 0x0649 },
+ ["unicodeslot"]=0xFC0F, -- ï°
+ },
+ [0xFC10]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE TEH WITH YEH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x062A, 0x064A },
+ ["unicodeslot"]=0xFC10, -- ï°
+ },
+ [0xFC11]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x062B, 0x062C },
+ ["unicodeslot"]=0xFC11, -- ï°‘
+ },
+ [0xFC12]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x062B, 0x0645 },
+ ["unicodeslot"]=0xFC12, -- ï°’
+ },
+ [0xFC13]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x062B, 0x0649 },
+ ["unicodeslot"]=0xFC13, -- ï°“
+ },
+ [0xFC14]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE THEH WITH YEH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x062B, 0x064A },
+ ["unicodeslot"]=0xFC14, -- ï°”
+ },
+ [0xFC15]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x062C, 0x062D },
+ ["unicodeslot"]=0xFC15, -- ï°•
+ },
+ [0xFC16]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x062C, 0x0645 },
+ ["unicodeslot"]=0xFC16, -- ï°–
+ },
+ [0xFC17]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x062D, 0x062C },
+ ["unicodeslot"]=0xFC17, -- ï°—
+ },
+ [0xFC18]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x062D, 0x0645 },
+ ["unicodeslot"]=0xFC18, -- ï°˜
+ },
+ [0xFC19]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x062E, 0x062C },
+ ["unicodeslot"]=0xFC19, -- ï°™
+ },
+ [0xFC1A]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x062E, 0x062D },
+ ["unicodeslot"]=0xFC1A, -- ï°š
+ },
+ [0xFC1B]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x062E, 0x0645 },
+ ["unicodeslot"]=0xFC1B, -- ï°›
+ },
+ [0xFC1C]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0633, 0x062C },
+ ["unicodeslot"]=0xFC1C, -- ﰜ
+ },
+ [0xFC1D]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0633, 0x062D },
+ ["unicodeslot"]=0xFC1D, -- ï°
+ },
+ [0xFC1E]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0633, 0x062E },
+ ["unicodeslot"]=0xFC1E, -- ï°ž
+ },
+ [0xFC1F]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0633, 0x0645 },
+ ["unicodeslot"]=0xFC1F, -- ï°Ÿ
+ },
+ [0xFC20]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SAD WITH HAH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0635, 0x062D },
+ ["unicodeslot"]=0xFC20, -- ï° 
+ },
+ [0xFC21]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0635, 0x0645 },
+ ["unicodeslot"]=0xFC21, -- ï°¡
+ },
+ [0xFC22]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0636, 0x062C },
+ ["unicodeslot"]=0xFC22, -- ï°¢
+ },
+ [0xFC23]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE DAD WITH HAH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0636, 0x062D },
+ ["unicodeslot"]=0xFC23, -- ï°£
+ },
+ [0xFC24]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0636, 0x062E },
+ ["unicodeslot"]=0xFC24, -- ï°¤
+ },
+ [0xFC25]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0636, 0x0645 },
+ ["unicodeslot"]=0xFC25, -- ï°¥
+ },
+ [0xFC26]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE TAH WITH HAH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0637, 0x062D },
+ ["unicodeslot"]=0xFC26, -- ï°¦
+ },
+ [0xFC27]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0637, 0x0645 },
+ ["unicodeslot"]=0xFC27, -- ï°§
+ },
+ [0xFC28]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0638, 0x0645 },
+ ["unicodeslot"]=0xFC28, -- ï°¨
+ },
+ [0xFC29]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0639, 0x062C },
+ ["unicodeslot"]=0xFC29, -- ï°©
+ },
+ [0xFC2A]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0639, 0x0645 },
+ ["unicodeslot"]=0xFC2A, -- ï°ª
+ },
+ [0xFC2B]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x063A, 0x062C },
+ ["unicodeslot"]=0xFC2B, -- ï°«
+ },
+ [0xFC2C]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x063A, 0x0645 },
+ ["unicodeslot"]=0xFC2C, -- ï°¬
+ },
+ [0xFC2D]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0641, 0x062C },
+ ["unicodeslot"]=0xFC2D, -- ï°­
+ },
+ [0xFC2E]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE FEH WITH HAH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0641, 0x062D },
+ ["unicodeslot"]=0xFC2E, -- ï°®
+ },
+ [0xFC2F]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0641, 0x062E },
+ ["unicodeslot"]=0xFC2F, -- ï°¯
+ },
+ [0xFC30]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0641, 0x0645 },
+ ["unicodeslot"]=0xFC30, -- ï°°
+ },
+ [0xFC31]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0641, 0x0649 },
+ ["unicodeslot"]=0xFC31, -- ï°±
+ },
+ [0xFC32]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE FEH WITH YEH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0641, 0x064A },
+ ["unicodeslot"]=0xFC32, -- ï°²
+ },
+ [0xFC33]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE QAF WITH HAH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0642, 0x062D },
+ ["unicodeslot"]=0xFC33, -- ï°³
+ },
+ [0xFC34]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0642, 0x0645 },
+ ["unicodeslot"]=0xFC34, -- ï°´
+ },
+ [0xFC35]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0642, 0x0649 },
+ ["unicodeslot"]=0xFC35, -- ï°µ
+ },
+ [0xFC36]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE QAF WITH YEH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0642, 0x064A },
+ ["unicodeslot"]=0xFC36, -- ï°¶
+ },
+ [0xFC37]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0643, 0x0627 },
+ ["unicodeslot"]=0xFC37, -- ï°·
+ },
+ [0xFC38]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0643, 0x062C },
+ ["unicodeslot"]=0xFC38, -- ï°¸
+ },
+ [0xFC39]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE KAF WITH HAH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0643, 0x062D },
+ ["unicodeslot"]=0xFC39, -- ï°¹
+ },
+ [0xFC3A]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0643, 0x062E },
+ ["unicodeslot"]=0xFC3A, -- ï°º
+ },
+ [0xFC3B]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE KAF WITH LAM ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0643, 0x0644 },
+ ["unicodeslot"]=0xFC3B, -- ï°»
+ },
+ [0xFC3C]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0643, 0x0645 },
+ ["unicodeslot"]=0xFC3C, -- ï°¼
+ },
+ [0xFC3D]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0643, 0x0649 },
+ ["unicodeslot"]=0xFC3D, -- ï°½
+ },
+ [0xFC3E]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE KAF WITH YEH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0643, 0x064A },
+ ["unicodeslot"]=0xFC3E, -- ï°¾
+ },
+ [0xFC3F]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0644, 0x062C },
+ ["unicodeslot"]=0xFC3F, -- ï°¿
+ },
+ [0xFC40]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE LAM WITH HAH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0644, 0x062D },
+ ["unicodeslot"]=0xFC40, -- ï±€
+ },
+ [0xFC41]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0644, 0x062E },
+ ["unicodeslot"]=0xFC41, -- ï±
+ },
+ [0xFC42]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0644, 0x0645 },
+ ["unicodeslot"]=0xFC42, -- ﱂ
+ },
+ [0xFC43]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0644, 0x0649 },
+ ["unicodeslot"]=0xFC43, -- ﱃ
+ },
+ [0xFC44]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE LAM WITH YEH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0644, 0x064A },
+ ["unicodeslot"]=0xFC44, -- ﱄ
+ },
+ [0xFC45]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0645, 0x062C },
+ ["unicodeslot"]=0xFC45, -- ï±…
+ },
+ [0xFC46]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0645, 0x062D },
+ ["unicodeslot"]=0xFC46, -- ﱆ
+ },
+ [0xFC47]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0645, 0x062E },
+ ["unicodeslot"]=0xFC47, -- ﱇ
+ },
+ [0xFC48]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0645, 0x0645 },
+ ["unicodeslot"]=0xFC48, -- ﱈ
+ },
+ [0xFC49]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0645, 0x0649 },
+ ["unicodeslot"]=0xFC49, -- ﱉ
+ },
+ [0xFC4A]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0645, 0x064A },
+ ["unicodeslot"]=0xFC4A, -- ﱊ
+ },
+ [0xFC4B]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0646, 0x062C },
+ ["unicodeslot"]=0xFC4B, -- ﱋ
+ },
+ [0xFC4C]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE NOON WITH HAH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0646, 0x062D },
+ ["unicodeslot"]=0xFC4C, -- ﱌ
+ },
+ [0xFC4D]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0646, 0x062E },
+ ["unicodeslot"]=0xFC4D, -- ï±
+ },
+ [0xFC4E]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0646, 0x0645 },
+ ["unicodeslot"]=0xFC4E, -- ﱎ
+ },
+ [0xFC4F]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0646, 0x0649 },
+ ["unicodeslot"]=0xFC4F, -- ï±
+ },
+ [0xFC50]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE NOON WITH YEH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0646, 0x064A },
+ ["unicodeslot"]=0xFC50, -- ï±
+ },
+ [0xFC51]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0647, 0x062C },
+ ["unicodeslot"]=0xFC51, -- ﱑ
+ },
+ [0xFC52]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0647, 0x0645 },
+ ["unicodeslot"]=0xFC52, -- ï±’
+ },
+ [0xFC53]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0647, 0x0649 },
+ ["unicodeslot"]=0xFC53, -- ﱓ
+ },
+ [0xFC54]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE HEH WITH YEH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0647, 0x064A },
+ ["unicodeslot"]=0xFC54, -- ï±”
+ },
+ [0xFC55]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x064A, 0x062C },
+ ["unicodeslot"]=0xFC55, -- ﱕ
+ },
+ [0xFC56]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE YEH WITH HAH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x064A, 0x062D },
+ ["unicodeslot"]=0xFC56, -- ï±–
+ },
+ [0xFC57]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x064A, 0x062E },
+ ["unicodeslot"]=0xFC57, -- ï±—
+ },
+ [0xFC58]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x064A, 0x0645 },
+ ["unicodeslot"]=0xFC58, -- ﱘ
+ },
+ [0xFC59]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x064A, 0x0649 },
+ ["unicodeslot"]=0xFC59, -- ï±™
+ },
+ [0xFC5A]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE YEH WITH YEH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x064A, 0x064A },
+ ["unicodeslot"]=0xFC5A, -- ﱚ
+ },
+ [0xFC5B]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0630, 0x0670 },
+ ["unicodeslot"]=0xFC5B, -- ï±›
+ },
+ [0xFC5C]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0631, 0x0670 },
+ ["unicodeslot"]=0xFC5C, -- ﱜ
+ },
+ [0xFC5D]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0649, 0x0670 },
+ ["unicodeslot"]=0xFC5D, -- ï±
+ },
+ [0xFC5E]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0020, 0x064C, 0x0651 },
+ ["unicodeslot"]=0xFC5E, -- ﱞ
+ },
+ [0xFC5F]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0020, 0x064D, 0x0651 },
+ ["unicodeslot"]=0xFC5F, -- ﱟ
+ },
+ [0xFC60]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0020, 0x064E, 0x0651 },
+ ["unicodeslot"]=0xFC60, -- ï± 
+ },
+ [0xFC61]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0020, 0x064F, 0x0651 },
+ ["unicodeslot"]=0xFC61, -- ﱡ
+ },
+ [0xFC62]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0020, 0x0650, 0x0651 },
+ ["unicodeslot"]=0xFC62, -- ï±¢
+ },
+ [0xFC63]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0020, 0x0651, 0x0670 },
+ ["unicodeslot"]=0xFC63, -- ï±£
+ },
+ [0xFC64]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0626, 0x0631 },
+ ["unicodeslot"]=0xFC64, -- ﱤ
+ },
+ [0xFC65]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0626, 0x0632 },
+ ["unicodeslot"]=0xFC65, -- ï±¥
+ },
+ [0xFC66]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0626, 0x0645 },
+ ["unicodeslot"]=0xFC66, -- ﱦ
+ },
+ [0xFC67]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0626, 0x0646 },
+ ["unicodeslot"]=0xFC67, -- ﱧ
+ },
+ [0xFC68]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0626, 0x0649 },
+ ["unicodeslot"]=0xFC68, -- ﱨ
+ },
+ [0xFC69]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0626, 0x064A },
+ ["unicodeslot"]=0xFC69, -- ﱩ
+ },
+ [0xFC6A]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE BEH WITH REH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0628, 0x0631 },
+ ["unicodeslot"]=0xFC6A, -- ﱪ
+ },
+ [0xFC6B]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE BEH WITH ZAIN FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0628, 0x0632 },
+ ["unicodeslot"]=0xFC6B, -- ﱫ
+ },
+ [0xFC6C]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE BEH WITH MEEM FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0628, 0x0645 },
+ ["unicodeslot"]=0xFC6C, -- ﱬ
+ },
+ [0xFC6D]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE BEH WITH NOON FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0628, 0x0646 },
+ ["unicodeslot"]=0xFC6D, -- ï±­
+ },
+ [0xFC6E]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0628, 0x0649 },
+ ["unicodeslot"]=0xFC6E, -- ï±®
+ },
+ [0xFC6F]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE BEH WITH YEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0628, 0x064A },
+ ["unicodeslot"]=0xFC6F, -- ﱯ
+ },
+ [0xFC70]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE TEH WITH REH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x062A, 0x0631 },
+ ["unicodeslot"]=0xFC70, -- ï±°
+ },
+ [0xFC71]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE TEH WITH ZAIN FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x062A, 0x0632 },
+ ["unicodeslot"]=0xFC71, -- ï±±
+ },
+ [0xFC72]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE TEH WITH MEEM FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x062A, 0x0645 },
+ ["unicodeslot"]=0xFC72, -- ï±²
+ },
+ [0xFC73]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE TEH WITH NOON FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x062A, 0x0646 },
+ ["unicodeslot"]=0xFC73, -- ï±³
+ },
+ [0xFC74]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x062A, 0x0649 },
+ ["unicodeslot"]=0xFC74, -- ï±´
+ },
+ [0xFC75]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE TEH WITH YEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x062A, 0x064A },
+ ["unicodeslot"]=0xFC75, -- ï±µ
+ },
+ [0xFC76]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE THEH WITH REH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x062B, 0x0631 },
+ ["unicodeslot"]=0xFC76, -- ﱶ
+ },
+ [0xFC77]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE THEH WITH ZAIN FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x062B, 0x0632 },
+ ["unicodeslot"]=0xFC77, -- ï±·
+ },
+ [0xFC78]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE THEH WITH MEEM FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x062B, 0x0645 },
+ ["unicodeslot"]=0xFC78, -- ﱸ
+ },
+ [0xFC79]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE THEH WITH NOON FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x062B, 0x0646 },
+ ["unicodeslot"]=0xFC79, -- ï±¹
+ },
+ [0xFC7A]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x062B, 0x0649 },
+ ["unicodeslot"]=0xFC7A, -- ﱺ
+ },
+ [0xFC7B]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE THEH WITH YEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x062B, 0x064A },
+ ["unicodeslot"]=0xFC7B, -- ï±»
+ },
+ [0xFC7C]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0641, 0x0649 },
+ ["unicodeslot"]=0xFC7C, -- ï±¼
+ },
+ [0xFC7D]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE FEH WITH YEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0641, 0x064A },
+ ["unicodeslot"]=0xFC7D, -- ï±½
+ },
+ [0xFC7E]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0642, 0x0649 },
+ ["unicodeslot"]=0xFC7E, -- ï±¾
+ },
+ [0xFC7F]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE QAF WITH YEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0642, 0x064A },
+ ["unicodeslot"]=0xFC7F, -- ﱿ
+ },
+ [0xFC80]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE KAF WITH ALEF FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0643, 0x0627 },
+ ["unicodeslot"]=0xFC80, -- ï²€
+ },
+ [0xFC81]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE KAF WITH LAM FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0643, 0x0644 },
+ ["unicodeslot"]=0xFC81, -- ï²
+ },
+ [0xFC82]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE KAF WITH MEEM FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0643, 0x0645 },
+ ["unicodeslot"]=0xFC82, -- ﲂ
+ },
+ [0xFC83]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0643, 0x0649 },
+ ["unicodeslot"]=0xFC83, -- ﲃ
+ },
+ [0xFC84]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE KAF WITH YEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0643, 0x064A },
+ ["unicodeslot"]=0xFC84, -- ﲄ
+ },
+ [0xFC85]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE LAM WITH MEEM FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0644, 0x0645 },
+ ["unicodeslot"]=0xFC85, -- ï²…
+ },
+ [0xFC86]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0644, 0x0649 },
+ ["unicodeslot"]=0xFC86, -- ﲆ
+ },
+ [0xFC87]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE LAM WITH YEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0644, 0x064A },
+ ["unicodeslot"]=0xFC87, -- ﲇ
+ },
+ [0xFC88]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE MEEM WITH ALEF FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0645, 0x0627 },
+ ["unicodeslot"]=0xFC88, -- ﲈ
+ },
+ [0xFC89]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE MEEM WITH MEEM FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0645, 0x0645 },
+ ["unicodeslot"]=0xFC89, -- ﲉ
+ },
+ [0xFC8A]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE NOON WITH REH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0646, 0x0631 },
+ ["unicodeslot"]=0xFC8A, -- ﲊ
+ },
+ [0xFC8B]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE NOON WITH ZAIN FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0646, 0x0632 },
+ ["unicodeslot"]=0xFC8B, -- ﲋ
+ },
+ [0xFC8C]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE NOON WITH MEEM FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0646, 0x0645 },
+ ["unicodeslot"]=0xFC8C, -- ﲌ
+ },
+ [0xFC8D]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE NOON WITH NOON FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0646, 0x0646 },
+ ["unicodeslot"]=0xFC8D, -- ï²
+ },
+ [0xFC8E]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0646, 0x0649 },
+ ["unicodeslot"]=0xFC8E, -- ﲎ
+ },
+ [0xFC8F]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE NOON WITH YEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0646, 0x064A },
+ ["unicodeslot"]=0xFC8F, -- ï²
+ },
+ [0xFC90]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0649, 0x0670 },
+ ["unicodeslot"]=0xFC90, -- ï²
+ },
+ [0xFC91]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE YEH WITH REH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x064A, 0x0631 },
+ ["unicodeslot"]=0xFC91, -- ﲑ
+ },
+ [0xFC92]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE YEH WITH ZAIN FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x064A, 0x0632 },
+ ["unicodeslot"]=0xFC92, -- ï²’
+ },
+ [0xFC93]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE YEH WITH MEEM FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x064A, 0x0645 },
+ ["unicodeslot"]=0xFC93, -- ﲓ
+ },
+ [0xFC94]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE YEH WITH NOON FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x064A, 0x0646 },
+ ["unicodeslot"]=0xFC94, -- ï²”
+ },
+ [0xFC95]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x064A, 0x0649 },
+ ["unicodeslot"]=0xFC95, -- ﲕ
+ },
+ [0xFC96]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE YEH WITH YEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x064A, 0x064A },
+ ["unicodeslot"]=0xFC96, -- ï²–
+ },
+ [0xFC97]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0626, 0x062C },
+ ["unicodeslot"]=0xFC97, -- ï²—
+ },
+ [0xFC98]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0626, 0x062D },
+ ["unicodeslot"]=0xFC98, -- ﲘ
+ },
+ [0xFC99]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0626, 0x062E },
+ ["unicodeslot"]=0xFC99, -- ï²™
+ },
+ [0xFC9A]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0626, 0x0645 },
+ ["unicodeslot"]=0xFC9A, -- ﲚ
+ },
+ [0xFC9B]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0626, 0x0647 },
+ ["unicodeslot"]=0xFC9B, -- ï²›
+ },
+ [0xFC9C]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE BEH WITH JEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0628, 0x062C },
+ ["unicodeslot"]=0xFC9C, -- ﲜ
+ },
+ [0xFC9D]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE BEH WITH HAH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0628, 0x062D },
+ ["unicodeslot"]=0xFC9D, -- ï²
+ },
+ [0xFC9E]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE BEH WITH KHAH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0628, 0x062E },
+ ["unicodeslot"]=0xFC9E, -- ﲞ
+ },
+ [0xFC9F]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE BEH WITH MEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0628, 0x0645 },
+ ["unicodeslot"]=0xFC9F, -- ﲟ
+ },
+ [0xFCA0]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE BEH WITH HEH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0628, 0x0647 },
+ ["unicodeslot"]=0xFCA0, -- ï² 
+ },
+ [0xFCA1]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE TEH WITH JEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x062A, 0x062C },
+ ["unicodeslot"]=0xFCA1, -- ﲡ
+ },
+ [0xFCA2]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE TEH WITH HAH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x062A, 0x062D },
+ ["unicodeslot"]=0xFCA2, -- ï²¢
+ },
+ [0xFCA3]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE TEH WITH KHAH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x062A, 0x062E },
+ ["unicodeslot"]=0xFCA3, -- ï²£
+ },
+ [0xFCA4]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE TEH WITH MEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x062A, 0x0645 },
+ ["unicodeslot"]=0xFCA4, -- ﲤ
+ },
+ [0xFCA5]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE TEH WITH HEH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x062A, 0x0647 },
+ ["unicodeslot"]=0xFCA5, -- ï²¥
+ },
+ [0xFCA6]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE THEH WITH MEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x062B, 0x0645 },
+ ["unicodeslot"]=0xFCA6, -- ﲦ
+ },
+ [0xFCA7]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE JEEM WITH HAH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x062C, 0x062D },
+ ["unicodeslot"]=0xFCA7, -- ﲧ
+ },
+ [0xFCA8]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x062C, 0x0645 },
+ ["unicodeslot"]=0xFCA8, -- ﲨ
+ },
+ [0xFCA9]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE HAH WITH JEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x062D, 0x062C },
+ ["unicodeslot"]=0xFCA9, -- ﲩ
+ },
+ [0xFCAA]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE HAH WITH MEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x062D, 0x0645 },
+ ["unicodeslot"]=0xFCAA, -- ﲪ
+ },
+ [0xFCAB]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x062E, 0x062C },
+ ["unicodeslot"]=0xFCAB, -- ﲫ
+ },
+ [0xFCAC]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x062E, 0x0645 },
+ ["unicodeslot"]=0xFCAC, -- ﲬ
+ },
+ [0xFCAD]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0633, 0x062C },
+ ["unicodeslot"]=0xFCAD, -- ï²­
+ },
+ [0xFCAE]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SEEN WITH HAH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0633, 0x062D },
+ ["unicodeslot"]=0xFCAE, -- ï²®
+ },
+ [0xFCAF]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0633, 0x062E },
+ ["unicodeslot"]=0xFCAF, -- ﲯ
+ },
+ [0xFCB0]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0633, 0x0645 },
+ ["unicodeslot"]=0xFCB0, -- ï²°
+ },
+ [0xFCB1]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SAD WITH HAH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0635, 0x062D },
+ ["unicodeslot"]=0xFCB1, -- ï²±
+ },
+ [0xFCB2]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SAD WITH KHAH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0635, 0x062E },
+ ["unicodeslot"]=0xFCB2, -- ï²²
+ },
+ [0xFCB3]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SAD WITH MEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0635, 0x0645 },
+ ["unicodeslot"]=0xFCB3, -- ï²³
+ },
+ [0xFCB4]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE DAD WITH JEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0636, 0x062C },
+ ["unicodeslot"]=0xFCB4, -- ï²´
+ },
+ [0xFCB5]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE DAD WITH HAH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0636, 0x062D },
+ ["unicodeslot"]=0xFCB5, -- ï²µ
+ },
+ [0xFCB6]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE DAD WITH KHAH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0636, 0x062E },
+ ["unicodeslot"]=0xFCB6, -- ﲶ
+ },
+ [0xFCB7]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE DAD WITH MEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0636, 0x0645 },
+ ["unicodeslot"]=0xFCB7, -- ï²·
+ },
+ [0xFCB8]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE TAH WITH HAH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0637, 0x062D },
+ ["unicodeslot"]=0xFCB8, -- ﲸ
+ },
+ [0xFCB9]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0638, 0x0645 },
+ ["unicodeslot"]=0xFCB9, -- ï²¹
+ },
+ [0xFCBA]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE AIN WITH JEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0639, 0x062C },
+ ["unicodeslot"]=0xFCBA, -- ﲺ
+ },
+ [0xFCBB]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE AIN WITH MEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0639, 0x0645 },
+ ["unicodeslot"]=0xFCBB, -- ï²»
+ },
+ [0xFCBC]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x063A, 0x062C },
+ ["unicodeslot"]=0xFCBC, -- ï²¼
+ },
+ [0xFCBD]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x063A, 0x0645 },
+ ["unicodeslot"]=0xFCBD, -- ï²½
+ },
+ [0xFCBE]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE FEH WITH JEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0641, 0x062C },
+ ["unicodeslot"]=0xFCBE, -- ï²¾
+ },
+ [0xFCBF]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE FEH WITH HAH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0641, 0x062D },
+ ["unicodeslot"]=0xFCBF, -- ﲿ
+ },
+ [0xFCC0]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE FEH WITH KHAH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0641, 0x062E },
+ ["unicodeslot"]=0xFCC0, -- ï³€
+ },
+ [0xFCC1]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE FEH WITH MEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0641, 0x0645 },
+ ["unicodeslot"]=0xFCC1, -- ï³
+ },
+ [0xFCC2]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE QAF WITH HAH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0642, 0x062D },
+ ["unicodeslot"]=0xFCC2, -- ﳂ
+ },
+ [0xFCC3]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE QAF WITH MEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0642, 0x0645 },
+ ["unicodeslot"]=0xFCC3, -- ﳃ
+ },
+ [0xFCC4]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE KAF WITH JEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0643, 0x062C },
+ ["unicodeslot"]=0xFCC4, -- ﳄ
+ },
+ [0xFCC5]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE KAF WITH HAH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0643, 0x062D },
+ ["unicodeslot"]=0xFCC5, -- ï³…
+ },
+ [0xFCC6]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE KAF WITH KHAH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0643, 0x062E },
+ ["unicodeslot"]=0xFCC6, -- ﳆ
+ },
+ [0xFCC7]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE KAF WITH LAM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0643, 0x0644 },
+ ["unicodeslot"]=0xFCC7, -- ﳇ
+ },
+ [0xFCC8]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE KAF WITH MEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0643, 0x0645 },
+ ["unicodeslot"]=0xFCC8, -- ﳈ
+ },
+ [0xFCC9]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE LAM WITH JEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0644, 0x062C },
+ ["unicodeslot"]=0xFCC9, -- ﳉ
+ },
+ [0xFCCA]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE LAM WITH HAH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0644, 0x062D },
+ ["unicodeslot"]=0xFCCA, -- ﳊ
+ },
+ [0xFCCB]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE LAM WITH KHAH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0644, 0x062E },
+ ["unicodeslot"]=0xFCCB, -- ﳋ
+ },
+ [0xFCCC]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE LAM WITH MEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0644, 0x0645 },
+ ["unicodeslot"]=0xFCCC, -- ﳌ
+ },
+ [0xFCCD]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE LAM WITH HEH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0644, 0x0647 },
+ ["unicodeslot"]=0xFCCD, -- ï³
+ },
+ [0xFCCE]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0645, 0x062C },
+ ["unicodeslot"]=0xFCCE, -- ﳎ
+ },
+ [0xFCCF]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE MEEM WITH HAH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0645, 0x062D },
+ ["unicodeslot"]=0xFCCF, -- ï³
+ },
+ [0xFCD0]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0645, 0x062E },
+ ["unicodeslot"]=0xFCD0, -- ï³
+ },
+ [0xFCD1]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0645, 0x0645 },
+ ["unicodeslot"]=0xFCD1, -- ﳑ
+ },
+ [0xFCD2]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE NOON WITH JEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0646, 0x062C },
+ ["unicodeslot"]=0xFCD2, -- ï³’
+ },
+ [0xFCD3]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE NOON WITH HAH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0646, 0x062D },
+ ["unicodeslot"]=0xFCD3, -- ﳓ
+ },
+ [0xFCD4]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE NOON WITH KHAH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0646, 0x062E },
+ ["unicodeslot"]=0xFCD4, -- ï³”
+ },
+ [0xFCD5]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE NOON WITH MEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0646, 0x0645 },
+ ["unicodeslot"]=0xFCD5, -- ﳕ
+ },
+ [0xFCD6]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE NOON WITH HEH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0646, 0x0647 },
+ ["unicodeslot"]=0xFCD6, -- ï³–
+ },
+ [0xFCD7]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE HEH WITH JEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0647, 0x062C },
+ ["unicodeslot"]=0xFCD7, -- ï³—
+ },
+ [0xFCD8]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE HEH WITH MEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0647, 0x0645 },
+ ["unicodeslot"]=0xFCD8, -- ﳘ
+ },
+ [0xFCD9]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0647, 0x0670 },
+ ["unicodeslot"]=0xFCD9, -- ï³™
+ },
+ [0xFCDA]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE YEH WITH JEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x064A, 0x062C },
+ ["unicodeslot"]=0xFCDA, -- ﳚ
+ },
+ [0xFCDB]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE YEH WITH HAH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x064A, 0x062D },
+ ["unicodeslot"]=0xFCDB, -- ï³›
+ },
+ [0xFCDC]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE YEH WITH KHAH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x064A, 0x062E },
+ ["unicodeslot"]=0xFCDC, -- ﳜ
+ },
+ [0xFCDD]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE YEH WITH MEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x064A, 0x0645 },
+ ["unicodeslot"]=0xFCDD, -- ï³
+ },
+ [0xFCDE]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE YEH WITH HEH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x064A, 0x0647 },
+ ["unicodeslot"]=0xFCDE, -- ﳞ
+ },
+ [0xFCDF]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x0626, 0x0645 },
+ ["unicodeslot"]=0xFCDF, -- ﳟ
+ },
+ [0xFCE0]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x0626, 0x0647 },
+ ["unicodeslot"]=0xFCE0, -- ï³ 
+ },
+ [0xFCE1]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x0628, 0x0645 },
+ ["unicodeslot"]=0xFCE1, -- ﳡ
+ },
+ [0xFCE2]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE BEH WITH HEH MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x0628, 0x0647 },
+ ["unicodeslot"]=0xFCE2, -- ï³¢
+ },
+ [0xFCE3]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x062A, 0x0645 },
+ ["unicodeslot"]=0xFCE3, -- ï³£
+ },
+ [0xFCE4]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE TEH WITH HEH MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x062A, 0x0647 },
+ ["unicodeslot"]=0xFCE4, -- ﳤ
+ },
+ [0xFCE5]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x062B, 0x0645 },
+ ["unicodeslot"]=0xFCE5, -- ï³¥
+ },
+ [0xFCE6]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE THEH WITH HEH MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x062B, 0x0647 },
+ ["unicodeslot"]=0xFCE6, -- ﳦ
+ },
+ [0xFCE7]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x0633, 0x0645 },
+ ["unicodeslot"]=0xFCE7, -- ﳧ
+ },
+ [0xFCE8]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x0633, 0x0647 },
+ ["unicodeslot"]=0xFCE8, -- ﳨ
+ },
+ [0xFCE9]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x0634, 0x0645 },
+ ["unicodeslot"]=0xFCE9, -- ﳩ
+ },
+ [0xFCEA]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x0634, 0x0647 },
+ ["unicodeslot"]=0xFCEA, -- ﳪ
+ },
+ [0xFCEB]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE KAF WITH LAM MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x0643, 0x0644 },
+ ["unicodeslot"]=0xFCEB, -- ﳫ
+ },
+ [0xFCEC]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x0643, 0x0645 },
+ ["unicodeslot"]=0xFCEC, -- ﳬ
+ },
+ [0xFCED]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x0644, 0x0645 },
+ ["unicodeslot"]=0xFCED, -- ï³­
+ },
+ [0xFCEE]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x0646, 0x0645 },
+ ["unicodeslot"]=0xFCEE, -- ï³®
+ },
+ [0xFCEF]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE NOON WITH HEH MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x0646, 0x0647 },
+ ["unicodeslot"]=0xFCEF, -- ﳯ
+ },
+ [0xFCF0]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x064A, 0x0645 },
+ ["unicodeslot"]=0xFCF0, -- ï³°
+ },
+ [0xFCF1]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE YEH WITH HEH MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x064A, 0x0647 },
+ ["unicodeslot"]=0xFCF1, -- ï³±
+ },
+ [0xFCF2]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x0640, 0x064E, 0x0651 },
+ ["unicodeslot"]=0xFCF2, -- ï³²
+ },
+ [0xFCF3]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x0640, 0x064F, 0x0651 },
+ ["unicodeslot"]=0xFCF3, -- ï³³
+ },
+ [0xFCF4]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x0640, 0x0650, 0x0651 },
+ ["unicodeslot"]=0xFCF4, -- ï³´
+ },
+ [0xFCF5]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0637, 0x0649 },
+ ["unicodeslot"]=0xFCF5, -- ï³µ
+ },
+ [0xFCF6]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE TAH WITH YEH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0637, 0x064A },
+ ["unicodeslot"]=0xFCF6, -- ﳶ
+ },
+ [0xFCF7]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0639, 0x0649 },
+ ["unicodeslot"]=0xFCF7, -- ï³·
+ },
+ [0xFCF8]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE AIN WITH YEH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0639, 0x064A },
+ ["unicodeslot"]=0xFCF8, -- ﳸ
+ },
+ [0xFCF9]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x063A, 0x0649 },
+ ["unicodeslot"]=0xFCF9, -- ï³¹
+ },
+ [0xFCFA]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x063A, 0x064A },
+ ["unicodeslot"]=0xFCFA, -- ﳺ
+ },
+ [0xFCFB]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0633, 0x0649 },
+ ["unicodeslot"]=0xFCFB, -- ï³»
+ },
+ [0xFCFC]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0633, 0x064A },
+ ["unicodeslot"]=0xFCFC, -- ï³¼
+ },
+ [0xFCFD]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0634, 0x0649 },
+ ["unicodeslot"]=0xFCFD, -- ï³½
+ },
+ [0xFCFE]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0634, 0x064A },
+ ["unicodeslot"]=0xFCFE, -- ï³¾
+ },
+ [0xFCFF]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x062D, 0x0649 },
+ ["unicodeslot"]=0xFCFF, -- ﳿ
+ },
+ [0xFD00]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE HAH WITH YEH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x062D, 0x064A },
+ ["unicodeslot"]=0xFD00, -- ï´€
+ },
+ [0xFD01]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x062C, 0x0649 },
+ ["unicodeslot"]=0xFD01, -- ï´
+ },
+ [0xFD02]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x062C, 0x064A },
+ ["unicodeslot"]=0xFD02, -- ï´‚
+ },
+ [0xFD03]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x062E, 0x0649 },
+ ["unicodeslot"]=0xFD03, -- ï´ƒ
+ },
+ [0xFD04]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x062E, 0x064A },
+ ["unicodeslot"]=0xFD04, -- ï´„
+ },
+ [0xFD05]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0635, 0x0649 },
+ ["unicodeslot"]=0xFD05, -- ï´…
+ },
+ [0xFD06]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SAD WITH YEH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0635, 0x064A },
+ ["unicodeslot"]=0xFD06, -- ï´†
+ },
+ [0xFD07]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0636, 0x0649 },
+ ["unicodeslot"]=0xFD07, -- ï´‡
+ },
+ [0xFD08]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE DAD WITH YEH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0636, 0x064A },
+ ["unicodeslot"]=0xFD08, -- ï´ˆ
+ },
+ [0xFD09]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0634, 0x062C },
+ ["unicodeslot"]=0xFD09, -- ï´‰
+ },
+ [0xFD0A]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0634, 0x062D },
+ ["unicodeslot"]=0xFD0A, -- ï´Š
+ },
+ [0xFD0B]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0634, 0x062E },
+ ["unicodeslot"]=0xFD0B, -- ï´‹
+ },
+ [0xFD0C]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0634, 0x0645 },
+ ["unicodeslot"]=0xFD0C, -- ﴌ
+ },
+ [0xFD0D]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0634, 0x0631 },
+ ["unicodeslot"]=0xFD0D, -- ï´
+ },
+ [0xFD0E]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SEEN WITH REH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0633, 0x0631 },
+ ["unicodeslot"]=0xFD0E, -- ï´Ž
+ },
+ [0xFD0F]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SAD WITH REH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0635, 0x0631 },
+ ["unicodeslot"]=0xFD0F, -- ï´
+ },
+ [0xFD10]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE DAD WITH REH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0636, 0x0631 },
+ ["unicodeslot"]=0xFD10, -- ï´
+ },
+ [0xFD11]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0637, 0x0649 },
+ ["unicodeslot"]=0xFD11, -- ï´‘
+ },
+ [0xFD12]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE TAH WITH YEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0637, 0x064A },
+ ["unicodeslot"]=0xFD12, -- ï´’
+ },
+ [0xFD13]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0639, 0x0649 },
+ ["unicodeslot"]=0xFD13, -- ï´“
+ },
+ [0xFD14]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE AIN WITH YEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0639, 0x064A },
+ ["unicodeslot"]=0xFD14, -- ï´”
+ },
+ [0xFD15]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x063A, 0x0649 },
+ ["unicodeslot"]=0xFD15, -- ï´•
+ },
+ [0xFD16]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE GHAIN WITH YEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x063A, 0x064A },
+ ["unicodeslot"]=0xFD16, -- ï´–
+ },
+ [0xFD17]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0633, 0x0649 },
+ ["unicodeslot"]=0xFD17, -- ï´—
+ },
+ [0xFD18]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SEEN WITH YEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0633, 0x064A },
+ ["unicodeslot"]=0xFD18, -- ï´˜
+ },
+ [0xFD19]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0634, 0x0649 },
+ ["unicodeslot"]=0xFD19, -- ï´™
+ },
+ [0xFD1A]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SHEEN WITH YEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0634, 0x064A },
+ ["unicodeslot"]=0xFD1A, -- ï´š
+ },
+ [0xFD1B]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x062D, 0x0649 },
+ ["unicodeslot"]=0xFD1B, -- ï´›
+ },
+ [0xFD1C]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE HAH WITH YEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x062D, 0x064A },
+ ["unicodeslot"]=0xFD1C, -- ﴜ
+ },
+ [0xFD1D]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x062C, 0x0649 },
+ ["unicodeslot"]=0xFD1D, -- ï´
+ },
+ [0xFD1E]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE JEEM WITH YEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x062C, 0x064A },
+ ["unicodeslot"]=0xFD1E, -- ï´ž
+ },
+ [0xFD1F]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x062E, 0x0649 },
+ ["unicodeslot"]=0xFD1F, -- ï´Ÿ
+ },
+ [0xFD20]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE KHAH WITH YEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x062E, 0x064A },
+ ["unicodeslot"]=0xFD20, -- ï´ 
+ },
+ [0xFD21]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0635, 0x0649 },
+ ["unicodeslot"]=0xFD21, -- ï´¡
+ },
+ [0xFD22]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SAD WITH YEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0635, 0x064A },
+ ["unicodeslot"]=0xFD22, -- ï´¢
+ },
+ [0xFD23]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0636, 0x0649 },
+ ["unicodeslot"]=0xFD23, -- ï´£
+ },
+ [0xFD24]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE DAD WITH YEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0636, 0x064A },
+ ["unicodeslot"]=0xFD24, -- ï´¤
+ },
+ [0xFD25]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0634, 0x062C },
+ ["unicodeslot"]=0xFD25, -- ï´¥
+ },
+ [0xFD26]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SHEEN WITH HAH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0634, 0x062D },
+ ["unicodeslot"]=0xFD26, -- ï´¦
+ },
+ [0xFD27]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0634, 0x062E },
+ ["unicodeslot"]=0xFD27, -- ï´§
+ },
+ [0xFD28]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0634, 0x0645 },
+ ["unicodeslot"]=0xFD28, -- ï´¨
+ },
+ [0xFD29]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SHEEN WITH REH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0634, 0x0631 },
+ ["unicodeslot"]=0xFD29, -- ï´©
+ },
+ [0xFD2A]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SEEN WITH REH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0633, 0x0631 },
+ ["unicodeslot"]=0xFD2A, -- ï´ª
+ },
+ [0xFD2B]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SAD WITH REH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0635, 0x0631 },
+ ["unicodeslot"]=0xFD2B, -- ï´«
+ },
+ [0xFD2C]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE DAD WITH REH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0636, 0x0631 },
+ ["unicodeslot"]=0xFD2C, -- ï´¬
+ },
+ [0xFD2D]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0634, 0x062C },
+ ["unicodeslot"]=0xFD2D, -- ï´­
+ },
+ [0xFD2E]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0634, 0x062D },
+ ["unicodeslot"]=0xFD2E, -- ï´®
+ },
+ [0xFD2F]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0634, 0x062E },
+ ["unicodeslot"]=0xFD2F, -- ï´¯
+ },
+ [0xFD30]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0634, 0x0645 },
+ ["unicodeslot"]=0xFD30, -- ï´°
+ },
+ [0xFD31]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SEEN WITH HEH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0633, 0x0647 },
+ ["unicodeslot"]=0xFD31, -- ï´±
+ },
+ [0xFD32]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0634, 0x0647 },
+ ["unicodeslot"]=0xFD32, -- ï´²
+ },
+ [0xFD33]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE TAH WITH MEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0637, 0x0645 },
+ ["unicodeslot"]=0xFD33, -- ï´³
+ },
+ [0xFD34]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x0633, 0x062C },
+ ["unicodeslot"]=0xFD34, -- ï´´
+ },
+ [0xFD35]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x0633, 0x062D },
+ ["unicodeslot"]=0xFD35, -- ï´µ
+ },
+ [0xFD36]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x0633, 0x062E },
+ ["unicodeslot"]=0xFD36, -- ï´¶
+ },
+ [0xFD37]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x0634, 0x062C },
+ ["unicodeslot"]=0xFD37, -- ï´·
+ },
+ [0xFD38]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x0634, 0x062D },
+ ["unicodeslot"]=0xFD38, -- ï´¸
+ },
+ [0xFD39]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x0634, 0x062E },
+ ["unicodeslot"]=0xFD39, -- ï´¹
+ },
+ [0xFD3A]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x0637, 0x0645 },
+ ["unicodeslot"]=0xFD3A, -- ï´º
+ },
+ [0xFD3B]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x0638, 0x0645 },
+ ["unicodeslot"]=0xFD3B, -- ï´»
+ },
+ [0xFD3C]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0627, 0x064B },
+ ["unicodeslot"]=0xFD3C, -- ï´¼
+ },
+ [0xFD3D]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0627, 0x064B },
+ ["unicodeslot"]=0xFD3D, -- ï´½
+ },
+ [0xFD3E]={
+ ["category"]="ps",
+ ["description"]="ORNATE LEFT PARENTHESIS",
+ ["linebreak"]="op",
+ ["unicodeslot"]=0xFD3E, -- ï´¾
+ },
+ [0xFD3F]={
+ ["category"]="pe",
+ ["description"]="ORNATE RIGHT PARENTHESIS",
+ ["linebreak"]="cl",
+ ["unicodeslot"]=0xFD3F, -- ï´¿
+ },
+ [0xFD50]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x062A, 0x062C, 0x0645 },
+ ["unicodeslot"]=0xFD50, -- ïµ
+ },
+ [0xFD51]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x062A, 0x062D, 0x062C },
+ ["unicodeslot"]=0xFD51, -- ﵑ
+ },
+ [0xFD52]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x062A, 0x062D, 0x062C },
+ ["unicodeslot"]=0xFD52, -- ïµ’
+ },
+ [0xFD53]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x062A, 0x062D, 0x0645 },
+ ["unicodeslot"]=0xFD53, -- ﵓ
+ },
+ [0xFD54]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x062A, 0x062E, 0x0645 },
+ ["unicodeslot"]=0xFD54, -- ïµ”
+ },
+ [0xFD55]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x062A, 0x0645, 0x062C },
+ ["unicodeslot"]=0xFD55, -- ﵕ
+ },
+ [0xFD56]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x062A, 0x0645, 0x062D },
+ ["unicodeslot"]=0xFD56, -- ïµ–
+ },
+ [0xFD57]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x062A, 0x0645, 0x062E },
+ ["unicodeslot"]=0xFD57, -- ïµ—
+ },
+ [0xFD58]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x062C, 0x0645, 0x062D },
+ ["unicodeslot"]=0xFD58, -- ﵘ
+ },
+ [0xFD59]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x062C, 0x0645, 0x062D },
+ ["unicodeslot"]=0xFD59, -- ïµ™
+ },
+ [0xFD5A]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x062D, 0x0645, 0x064A },
+ ["unicodeslot"]=0xFD5A, -- ﵚ
+ },
+ [0xFD5B]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x062D, 0x0645, 0x0649 },
+ ["unicodeslot"]=0xFD5B, -- ïµ›
+ },
+ [0xFD5C]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0633, 0x062D, 0x062C },
+ ["unicodeslot"]=0xFD5C, -- ﵜ
+ },
+ [0xFD5D]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0633, 0x062C, 0x062D },
+ ["unicodeslot"]=0xFD5D, -- ïµ
+ },
+ [0xFD5E]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0633, 0x062C, 0x0649 },
+ ["unicodeslot"]=0xFD5E, -- ﵞ
+ },
+ [0xFD5F]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0633, 0x0645, 0x062D },
+ ["unicodeslot"]=0xFD5F, -- ﵟ
+ },
+ [0xFD60]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0633, 0x0645, 0x062D },
+ ["unicodeslot"]=0xFD60, -- ïµ 
+ },
+ [0xFD61]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0633, 0x0645, 0x062C },
+ ["unicodeslot"]=0xFD61, -- ﵡ
+ },
+ [0xFD62]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0633, 0x0645, 0x0645 },
+ ["unicodeslot"]=0xFD62, -- ïµ¢
+ },
+ [0xFD63]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0633, 0x0645, 0x0645 },
+ ["unicodeslot"]=0xFD63, -- ïµ£
+ },
+ [0xFD64]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0635, 0x062D, 0x062D },
+ ["unicodeslot"]=0xFD64, -- ﵤ
+ },
+ [0xFD65]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0635, 0x062D, 0x062D },
+ ["unicodeslot"]=0xFD65, -- ïµ¥
+ },
+ [0xFD66]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0635, 0x0645, 0x0645 },
+ ["unicodeslot"]=0xFD66, -- ﵦ
+ },
+ [0xFD67]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0634, 0x062D, 0x0645 },
+ ["unicodeslot"]=0xFD67, -- ﵧ
+ },
+ [0xFD68]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0634, 0x062D, 0x0645 },
+ ["unicodeslot"]=0xFD68, -- ﵨ
+ },
+ [0xFD69]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0634, 0x062C, 0x064A },
+ ["unicodeslot"]=0xFD69, -- ﵩ
+ },
+ [0xFD6A]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0634, 0x0645, 0x062E },
+ ["unicodeslot"]=0xFD6A, -- ﵪ
+ },
+ [0xFD6B]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0634, 0x0645, 0x062E },
+ ["unicodeslot"]=0xFD6B, -- ﵫ
+ },
+ [0xFD6C]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0634, 0x0645, 0x0645 },
+ ["unicodeslot"]=0xFD6C, -- ﵬ
+ },
+ [0xFD6D]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0634, 0x0645, 0x0645 },
+ ["unicodeslot"]=0xFD6D, -- ïµ­
+ },
+ [0xFD6E]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0636, 0x062D, 0x0649 },
+ ["unicodeslot"]=0xFD6E, -- ïµ®
+ },
+ [0xFD6F]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0636, 0x062E, 0x0645 },
+ ["unicodeslot"]=0xFD6F, -- ﵯ
+ },
+ [0xFD70]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0636, 0x062E, 0x0645 },
+ ["unicodeslot"]=0xFD70, -- ïµ°
+ },
+ [0xFD71]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0637, 0x0645, 0x062D },
+ ["unicodeslot"]=0xFD71, -- ïµ±
+ },
+ [0xFD72]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0637, 0x0645, 0x062D },
+ ["unicodeslot"]=0xFD72, -- ïµ²
+ },
+ [0xFD73]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0637, 0x0645, 0x0645 },
+ ["unicodeslot"]=0xFD73, -- ïµ³
+ },
+ [0xFD74]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0637, 0x0645, 0x064A },
+ ["unicodeslot"]=0xFD74, -- ïµ´
+ },
+ [0xFD75]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0639, 0x062C, 0x0645 },
+ ["unicodeslot"]=0xFD75, -- ïµµ
+ },
+ [0xFD76]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0639, 0x0645, 0x0645 },
+ ["unicodeslot"]=0xFD76, -- ﵶ
+ },
+ [0xFD77]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0639, 0x0645, 0x0645 },
+ ["unicodeslot"]=0xFD77, -- ïµ·
+ },
+ [0xFD78]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0639, 0x0645, 0x0649 },
+ ["unicodeslot"]=0xFD78, -- ﵸ
+ },
+ [0xFD79]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x063A, 0x0645, 0x0645 },
+ ["unicodeslot"]=0xFD79, -- ïµ¹
+ },
+ [0xFD7A]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x063A, 0x0645, 0x064A },
+ ["unicodeslot"]=0xFD7A, -- ﵺ
+ },
+ [0xFD7B]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x063A, 0x0645, 0x0649 },
+ ["unicodeslot"]=0xFD7B, -- ïµ»
+ },
+ [0xFD7C]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0641, 0x062E, 0x0645 },
+ ["unicodeslot"]=0xFD7C, -- ïµ¼
+ },
+ [0xFD7D]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0641, 0x062E, 0x0645 },
+ ["unicodeslot"]=0xFD7D, -- ïµ½
+ },
+ [0xFD7E]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0642, 0x0645, 0x062D },
+ ["unicodeslot"]=0xFD7E, -- ïµ¾
+ },
+ [0xFD7F]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0642, 0x0645, 0x0645 },
+ ["unicodeslot"]=0xFD7F, -- ﵿ
+ },
+ [0xFD80]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0644, 0x062D, 0x0645 },
+ ["unicodeslot"]=0xFD80, -- ﶀ
+ },
+ [0xFD81]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0644, 0x062D, 0x064A },
+ ["unicodeslot"]=0xFD81, -- ï¶
+ },
+ [0xFD82]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0644, 0x062D, 0x0649 },
+ ["unicodeslot"]=0xFD82, -- ﶂ
+ },
+ [0xFD83]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0644, 0x062C, 0x062C },
+ ["unicodeslot"]=0xFD83, -- ﶃ
+ },
+ [0xFD84]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0644, 0x062C, 0x062C },
+ ["unicodeslot"]=0xFD84, -- ﶄ
+ },
+ [0xFD85]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0644, 0x062E, 0x0645 },
+ ["unicodeslot"]=0xFD85, -- ﶅ
+ },
+ [0xFD86]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0644, 0x062E, 0x0645 },
+ ["unicodeslot"]=0xFD86, -- ﶆ
+ },
+ [0xFD87]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0644, 0x0645, 0x062D },
+ ["unicodeslot"]=0xFD87, -- ﶇ
+ },
+ [0xFD88]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0644, 0x0645, 0x062D },
+ ["unicodeslot"]=0xFD88, -- ﶈ
+ },
+ [0xFD89]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0645, 0x062D, 0x062C },
+ ["unicodeslot"]=0xFD89, -- ﶉ
+ },
+ [0xFD8A]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0645, 0x062D, 0x0645 },
+ ["unicodeslot"]=0xFD8A, -- ﶊ
+ },
+ [0xFD8B]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0645, 0x062D, 0x064A },
+ ["unicodeslot"]=0xFD8B, -- ﶋ
+ },
+ [0xFD8C]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0645, 0x062C, 0x062D },
+ ["unicodeslot"]=0xFD8C, -- ﶌ
+ },
+ [0xFD8D]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0645, 0x062C, 0x0645 },
+ ["unicodeslot"]=0xFD8D, -- ï¶
+ },
+ [0xFD8E]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0645, 0x062E, 0x062C },
+ ["unicodeslot"]=0xFD8E, -- ﶎ
+ },
+ [0xFD8F]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0645, 0x062E, 0x0645 },
+ ["unicodeslot"]=0xFD8F, -- ï¶
+ },
+ [0xFD92]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0645, 0x062C, 0x062E },
+ ["unicodeslot"]=0xFD92, -- ﶒ
+ },
+ [0xFD93]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0647, 0x0645, 0x062C },
+ ["unicodeslot"]=0xFD93, -- ﶓ
+ },
+ [0xFD94]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0647, 0x0645, 0x0645 },
+ ["unicodeslot"]=0xFD94, -- ﶔ
+ },
+ [0xFD95]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0646, 0x062D, 0x0645 },
+ ["unicodeslot"]=0xFD95, -- ﶕ
+ },
+ [0xFD96]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0646, 0x062D, 0x0649 },
+ ["unicodeslot"]=0xFD96, -- ﶖ
+ },
+ [0xFD97]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0646, 0x062C, 0x0645 },
+ ["unicodeslot"]=0xFD97, -- ﶗ
+ },
+ [0xFD98]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0646, 0x062C, 0x0645 },
+ ["unicodeslot"]=0xFD98, -- ﶘ
+ },
+ [0xFD99]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0646, 0x062C, 0x0649 },
+ ["unicodeslot"]=0xFD99, -- ﶙ
+ },
+ [0xFD9A]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0646, 0x0645, 0x064A },
+ ["unicodeslot"]=0xFD9A, -- ﶚ
+ },
+ [0xFD9B]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0646, 0x0645, 0x0649 },
+ ["unicodeslot"]=0xFD9B, -- ﶛ
+ },
+ [0xFD9C]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x064A, 0x0645, 0x0645 },
+ ["unicodeslot"]=0xFD9C, -- ﶜ
+ },
+ [0xFD9D]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x064A, 0x0645, 0x0645 },
+ ["unicodeslot"]=0xFD9D, -- ï¶
+ },
+ [0xFD9E]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0628, 0x062E, 0x064A },
+ ["unicodeslot"]=0xFD9E, -- ﶞ
+ },
+ [0xFD9F]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x062A, 0x062C, 0x064A },
+ ["unicodeslot"]=0xFD9F, -- ﶟ
+ },
+ [0xFDA0]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x062A, 0x062C, 0x0649 },
+ ["unicodeslot"]=0xFDA0, -- ﶠ
+ },
+ [0xFDA1]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x062A, 0x062E, 0x064A },
+ ["unicodeslot"]=0xFDA1, -- ﶡ
+ },
+ [0xFDA2]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x062A, 0x062E, 0x0649 },
+ ["unicodeslot"]=0xFDA2, -- ﶢ
+ },
+ [0xFDA3]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x062A, 0x0645, 0x064A },
+ ["unicodeslot"]=0xFDA3, -- ﶣ
+ },
+ [0xFDA4]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x062A, 0x0645, 0x0649 },
+ ["unicodeslot"]=0xFDA4, -- ﶤ
+ },
+ [0xFDA5]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x062C, 0x0645, 0x064A },
+ ["unicodeslot"]=0xFDA5, -- ﶥ
+ },
+ [0xFDA6]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x062C, 0x062D, 0x0649 },
+ ["unicodeslot"]=0xFDA6, -- ﶦ
+ },
+ [0xFDA7]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x062C, 0x0645, 0x0649 },
+ ["unicodeslot"]=0xFDA7, -- ﶧ
+ },
+ [0xFDA8]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0633, 0x062E, 0x0649 },
+ ["unicodeslot"]=0xFDA8, -- ﶨ
+ },
+ [0xFDA9]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0635, 0x062D, 0x064A },
+ ["unicodeslot"]=0xFDA9, -- ﶩ
+ },
+ [0xFDAA]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0634, 0x062D, 0x064A },
+ ["unicodeslot"]=0xFDAA, -- ﶪ
+ },
+ [0xFDAB]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0636, 0x062D, 0x064A },
+ ["unicodeslot"]=0xFDAB, -- ﶫ
+ },
+ [0xFDAC]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0644, 0x062C, 0x064A },
+ ["unicodeslot"]=0xFDAC, -- ﶬ
+ },
+ [0xFDAD]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0644, 0x0645, 0x064A },
+ ["unicodeslot"]=0xFDAD, -- ﶭ
+ },
+ [0xFDAE]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x064A, 0x062D, 0x064A },
+ ["unicodeslot"]=0xFDAE, -- ﶮ
+ },
+ [0xFDAF]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x064A, 0x062C, 0x064A },
+ ["unicodeslot"]=0xFDAF, -- ﶯ
+ },
+ [0xFDB0]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x064A, 0x0645, 0x064A },
+ ["unicodeslot"]=0xFDB0, -- ﶰ
+ },
+ [0xFDB1]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0645, 0x0645, 0x064A },
+ ["unicodeslot"]=0xFDB1, -- ﶱ
+ },
+ [0xFDB2]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0642, 0x0645, 0x064A },
+ ["unicodeslot"]=0xFDB2, -- ﶲ
+ },
+ [0xFDB3]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0646, 0x062D, 0x064A },
+ ["unicodeslot"]=0xFDB3, -- ﶳ
+ },
+ [0xFDB4]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0642, 0x0645, 0x062D },
+ ["unicodeslot"]=0xFDB4, -- ﶴ
+ },
+ [0xFDB5]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0644, 0x062D, 0x0645 },
+ ["unicodeslot"]=0xFDB5, -- ﶵ
+ },
+ [0xFDB6]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0639, 0x0645, 0x064A },
+ ["unicodeslot"]=0xFDB6, -- ﶶ
+ },
+ [0xFDB7]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0643, 0x0645, 0x064A },
+ ["unicodeslot"]=0xFDB7, -- ﶷ
+ },
+ [0xFDB8]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0646, 0x062C, 0x062D },
+ ["unicodeslot"]=0xFDB8, -- ﶸ
+ },
+ [0xFDB9]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0645, 0x062E, 0x064A },
+ ["unicodeslot"]=0xFDB9, -- ﶹ
+ },
+ [0xFDBA]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0644, 0x062C, 0x0645 },
+ ["unicodeslot"]=0xFDBA, -- ﶺ
+ },
+ [0xFDBB]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0643, 0x0645, 0x0645 },
+ ["unicodeslot"]=0xFDBB, -- ﶻ
+ },
+ [0xFDBC]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0644, 0x062C, 0x0645 },
+ ["unicodeslot"]=0xFDBC, -- ﶼ
+ },
+ [0xFDBD]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0646, 0x062C, 0x062D },
+ ["unicodeslot"]=0xFDBD, -- ﶽ
+ },
+ [0xFDBE]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x062C, 0x062D, 0x064A },
+ ["unicodeslot"]=0xFDBE, -- ﶾ
+ },
+ [0xFDBF]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x062D, 0x062C, 0x064A },
+ ["unicodeslot"]=0xFDBF, -- ﶿ
+ },
+ [0xFDC0]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0645, 0x062C, 0x064A },
+ ["unicodeslot"]=0xFDC0, -- ï·€
+ },
+ [0xFDC1]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0641, 0x0645, 0x064A },
+ ["unicodeslot"]=0xFDC1, -- ï·
+ },
+ [0xFDC2]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0628, 0x062D, 0x064A },
+ ["unicodeslot"]=0xFDC2, -- ï·‚
+ },
+ [0xFDC3]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0643, 0x0645, 0x0645 },
+ ["unicodeslot"]=0xFDC3, -- ï·ƒ
+ },
+ [0xFDC4]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0639, 0x062C, 0x0645 },
+ ["unicodeslot"]=0xFDC4, -- ï·„
+ },
+ [0xFDC5]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0635, 0x0645, 0x0645 },
+ ["unicodeslot"]=0xFDC5, -- ï·…
+ },
+ [0xFDC6]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0633, 0x062E, 0x064A },
+ ["unicodeslot"]=0xFDC6, -- ï·†
+ },
+ [0xFDC7]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0646, 0x062C, 0x064A },
+ ["unicodeslot"]=0xFDC7, -- ï·‡
+ },
+ [0xFDF0]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0635, 0x0644, 0x06D2 },
+ ["unicodeslot"]=0xFDF0, -- ï·°
+ },
+ [0xFDF1]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0642, 0x0644, 0x06D2 },
+ ["unicodeslot"]=0xFDF1, -- ï·±
+ },
+ [0xFDF2]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE ALLAH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0627, 0x0644, 0x0644, 0x0647 },
+ ["unicodeslot"]=0xFDF2, -- ï·²
+ },
+ [0xFDF3]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE AKBAR ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0627, 0x0643, 0x0628, 0x0631 },
+ ["unicodeslot"]=0xFDF3, -- ï·³
+ },
+ [0xFDF4]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE MOHAMMAD ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0645, 0x062D, 0x0645, 0x062F },
+ ["unicodeslot"]=0xFDF4, -- ï·´
+ },
+ [0xFDF5]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SALAM ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0635, 0x0644, 0x0639, 0x0645 },
+ ["unicodeslot"]=0xFDF5, -- ï·µ
+ },
+ [0xFDF6]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE RASOUL ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0631, 0x0633, 0x0648, 0x0644 },
+ ["unicodeslot"]=0xFDF6, -- ï·¶
+ },
+ [0xFDF7]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE ALAYHE ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0639, 0x0644, 0x064A, 0x0647 },
+ ["unicodeslot"]=0xFDF7, -- ï··
+ },
+ [0xFDF8]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE WASALLAM ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0648, 0x0633, 0x0644, 0x0645 },
+ ["unicodeslot"]=0xFDF8, -- ï·¸
+ },
+ [0xFDF9]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SALLA ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0635, 0x0644, 0x0649 },
+ ["unicodeslot"]=0xFDF9, -- ï·¹
+ },
+ [0xFDFA]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0635, 0x0644, 0x0649, 0x0020, 0x0627, 0x0644, 0x0644, 0x0647, 0x0020, 0x0639, 0x0644, 0x064A, 0x0647, 0x0020, 0x0648, 0x0633, 0x0644, 0x0645 },
+ ["unicodeslot"]=0xFDFA, -- ï·º
+ },
+ [0xFDFB]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE JALLAJALALOUHOU",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x062C, 0x0644, 0x0020, 0x062C, 0x0644, 0x0627, 0x0644, 0x0647 },
+ ["unicodeslot"]=0xFDFB, -- ï·»
+ },
+ [0xFDFC]={
+ ["category"]="sc",
+ ["description"]="RIAL SIGN",
+ ["linebreak"]="po",
+ ["specials"]={ "isolated", 0x0631, 0x06CC, 0x0627, 0x0644 },
+ ["unicodeslot"]=0xFDFC, -- ï·¼
+ },
+ [0xFDFD]={
+ ["category"]="so",
+ ["description"]="ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xFDFD, -- ï·½
+ },
+ [0xFE00]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0001",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xFE00, -- ︀
+ },
+ [0xFE01]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0002",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xFE01, -- ï¸
+ },
+ [0xFE02]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0003",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xFE02, -- ︂
+ },
+ [0xFE03]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0004",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xFE03, -- ︃
+ },
+ [0xFE04]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0005",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xFE04, -- ︄
+ },
+ [0xFE05]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0006",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xFE05, -- ︅
+ },
+ [0xFE06]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0007",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xFE06, -- ︆
+ },
+ [0xFE07]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0008",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xFE07, -- ︇
+ },
+ [0xFE08]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0009",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xFE08, -- ︈
+ },
+ [0xFE09]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x000A",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xFE09, -- ︉
+ },
+ [0xFE0A]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x000B",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xFE0A, -- ︊
+ },
+ [0xFE0B]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x000C",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xFE0B, -- ︋
+ },
+ [0xFE0C]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x000D",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xFE0C, -- ︌
+ },
+ [0xFE0D]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x000E",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xFE0D, -- ï¸
+ },
+ [0xFE0E]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x000F",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xFE0E, -- ︎
+ },
+ [0xFE0F]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0010",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xFE0F, -- ï¸
+ },
+ [0xFE10]={
+ ["category"]="po",
+ ["cjkwd"]="w",
+ ["description"]="PRESENTATION FORM FOR VERTICAL COMMA",
+ ["linebreak"]="is",
+ ["specials"]={ "vertical", 0x002C },
+ ["unicodeslot"]=0xFE10, -- ï¸
+ },
+ [0xFE11]={
+ ["category"]="po",
+ ["cjkwd"]="w",
+ ["description"]="PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC COMMA",
+ ["linebreak"]="cl",
+ ["specials"]={ "vertical", 0x3001 },
+ ["unicodeslot"]=0xFE11, -- ︑
+ },
+ [0xFE12]={
+ ["category"]="po",
+ ["cjkwd"]="w",
+ ["description"]="PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC FULL STOP",
+ ["linebreak"]="cl",
+ ["specials"]={ "vertical", 0x3002 },
+ ["unicodeslot"]=0xFE12, -- ︒
+ },
+ [0xFE13]={
+ ["category"]="po",
+ ["cjkwd"]="w",
+ ["description"]="PRESENTATION FORM FOR VERTICAL COLON",
+ ["linebreak"]="is",
+ ["specials"]={ "vertical", 0x003A },
+ ["unicodeslot"]=0xFE13, -- ︓
+ },
+ [0xFE14]={
+ ["category"]="po",
+ ["cjkwd"]="w",
+ ["description"]="PRESENTATION FORM FOR VERTICAL SEMICOLON",
+ ["linebreak"]="is",
+ ["specials"]={ "vertical", 0x003B },
+ ["unicodeslot"]=0xFE14, -- ︔
+ },
+ [0xFE15]={
+ ["category"]="po",
+ ["cjkwd"]="w",
+ ["description"]="PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK",
+ ["linebreak"]="ex",
+ ["specials"]={ "vertical", 0x0021 },
+ ["unicodeslot"]=0xFE15, -- ︕
+ },
+ [0xFE16]={
+ ["category"]="po",
+ ["cjkwd"]="w",
+ ["description"]="PRESENTATION FORM FOR VERTICAL QUESTION MARK",
+ ["linebreak"]="ex",
+ ["specials"]={ "vertical", 0x003F },
+ ["unicodeslot"]=0xFE16, -- ︖
+ },
+ [0xFE17]={
+ ["category"]="ps",
+ ["cjkwd"]="w",
+ ["description"]="PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET",
+ ["linebreak"]="op",
+ ["specials"]={ "vertical", 0x3016 },
+ ["unicodeslot"]=0xFE17, -- ︗
+ },
+ [0xFE18]={
+ ["category"]="pe",
+ ["cjkwd"]="w",
+ ["description"]="PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET",
+ ["linebreak"]="cl",
+ ["specials"]={ "vertical", 0x3017 },
+ ["unicodeslot"]=0xFE18, -- ︘
+ },
+ [0xFE19]={
+ ["category"]="po",
+ ["cjkwd"]="w",
+ ["description"]="PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS",
+ ["linebreak"]="in",
+ ["specials"]={ "vertical", 0x2026 },
+ ["unicodeslot"]=0xFE19, -- ︙
+ },
+ [0xFE20]={
+ ["category"]="mn",
+ ["description"]="COMBINING LIGATURE LEFT HALF",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xFE20, -- ︠
+ },
+ [0xFE21]={
+ ["category"]="mn",
+ ["description"]="COMBINING LIGATURE RIGHT HALF",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xFE21, -- ︡
+ },
+ [0xFE22]={
+ ["category"]="mn",
+ ["description"]="COMBINING DOUBLE TILDE LEFT HALF",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xFE22, -- ︢
+ },
+ [0xFE23]={
+ ["category"]="mn",
+ ["description"]="COMBINING DOUBLE TILDE RIGHT HALF",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xFE23, -- ︣
+ },
+ [0xFE30]={
+ ["category"]="po",
+ ["cjkwd"]="w",
+ ["description"]="PRESENTATION FORM FOR VERTICAL TWO DOT LEADER",
+ ["linebreak"]="id",
+ ["specials"]={ "vertical", 0x2025 },
+ ["unicodeslot"]=0xFE30, -- ︰
+ },
+ [0xFE31]={
+ ["category"]="pd",
+ ["cjkwd"]="w",
+ ["description"]="PRESENTATION FORM FOR VERTICAL EM DASH",
+ ["linebreak"]="id",
+ ["specials"]={ "vertical", 0x2014 },
+ ["unicodeslot"]=0xFE31, -- ︱
+ },
+ [0xFE32]={
+ ["category"]="pd",
+ ["cjkwd"]="w",
+ ["description"]="PRESENTATION FORM FOR VERTICAL EN DASH",
+ ["linebreak"]="id",
+ ["specials"]={ "vertical", 0x2013 },
+ ["unicodeslot"]=0xFE32, -- ︲
+ },
+ [0xFE33]={
+ ["category"]="pc",
+ ["cjkwd"]="w",
+ ["description"]="PRESENTATION FORM FOR VERTICAL LOW LINE",
+ ["linebreak"]="id",
+ ["specials"]={ "vertical", 0x005F },
+ ["unicodeslot"]=0xFE33, -- ︳
+ },
+ [0xFE34]={
+ ["category"]="pc",
+ ["cjkwd"]="w",
+ ["description"]="PRESENTATION FORM FOR VERTICAL WAVY LOW LINE",
+ ["linebreak"]="id",
+ ["specials"]={ "vertical", 0x005F },
+ ["unicodeslot"]=0xFE34, -- ︴
+ },
+ [0xFE35]={
+ ["category"]="ps",
+ ["cjkwd"]="w",
+ ["description"]="PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS",
+ ["linebreak"]="op",
+ ["specials"]={ "vertical", 0x0028 },
+ ["unicodeslot"]=0xFE35, -- ︵
+ },
+ [0xFE36]={
+ ["category"]="pe",
+ ["cjkwd"]="w",
+ ["description"]="PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS",
+ ["linebreak"]="cl",
+ ["specials"]={ "vertical", 0x0029 },
+ ["unicodeslot"]=0xFE36, -- ︶
+ },
+ [0xFE37]={
+ ["category"]="ps",
+ ["cjkwd"]="w",
+ ["description"]="PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET",
+ ["linebreak"]="op",
+ ["specials"]={ "vertical", 0x007B },
+ ["unicodeslot"]=0xFE37, -- ︷
+ },
+ [0xFE38]={
+ ["category"]="pe",
+ ["cjkwd"]="w",
+ ["description"]="PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET",
+ ["linebreak"]="cl",
+ ["specials"]={ "vertical", 0x007D },
+ ["unicodeslot"]=0xFE38, -- ︸
+ },
+ [0xFE39]={
+ ["category"]="ps",
+ ["cjkwd"]="w",
+ ["description"]="PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET",
+ ["linebreak"]="op",
+ ["specials"]={ "vertical", 0x3014 },
+ ["unicodeslot"]=0xFE39, -- ︹
+ },
+ [0xFE3A]={
+ ["category"]="pe",
+ ["cjkwd"]="w",
+ ["description"]="PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET",
+ ["linebreak"]="cl",
+ ["specials"]={ "vertical", 0x3015 },
+ ["unicodeslot"]=0xFE3A, -- ︺
+ },
+ [0xFE3B]={
+ ["category"]="ps",
+ ["cjkwd"]="w",
+ ["description"]="PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET",
+ ["linebreak"]="op",
+ ["specials"]={ "vertical", 0x3010 },
+ ["unicodeslot"]=0xFE3B, -- ︻
+ },
+ [0xFE3C]={
+ ["category"]="pe",
+ ["cjkwd"]="w",
+ ["description"]="PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET",
+ ["linebreak"]="cl",
+ ["specials"]={ "vertical", 0x3011 },
+ ["unicodeslot"]=0xFE3C, -- ︼
+ },
+ [0xFE3D]={
+ ["category"]="ps",
+ ["cjkwd"]="w",
+ ["description"]="PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET",
+ ["linebreak"]="op",
+ ["specials"]={ "vertical", 0x300A },
+ ["unicodeslot"]=0xFE3D, -- ︽
+ },
+ [0xFE3E]={
+ ["category"]="pe",
+ ["cjkwd"]="w",
+ ["description"]="PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET",
+ ["linebreak"]="cl",
+ ["specials"]={ "vertical", 0x300B },
+ ["unicodeslot"]=0xFE3E, -- ︾
+ },
+ [0xFE3F]={
+ ["category"]="ps",
+ ["cjkwd"]="w",
+ ["description"]="PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET",
+ ["linebreak"]="op",
+ ["specials"]={ "vertical", 0x3008 },
+ ["unicodeslot"]=0xFE3F, -- ︿
+ },
+ [0xFE40]={
+ ["category"]="pe",
+ ["cjkwd"]="w",
+ ["description"]="PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET",
+ ["linebreak"]="cl",
+ ["specials"]={ "vertical", 0x3009 },
+ ["unicodeslot"]=0xFE40, -- ï¹€
+ },
+ [0xFE41]={
+ ["category"]="ps",
+ ["cjkwd"]="w",
+ ["description"]="PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET",
+ ["linebreak"]="op",
+ ["specials"]={ "vertical", 0x300C },
+ ["unicodeslot"]=0xFE41, -- ï¹
+ },
+ [0xFE42]={
+ ["category"]="pe",
+ ["cjkwd"]="w",
+ ["description"]="PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET",
+ ["linebreak"]="cl",
+ ["specials"]={ "vertical", 0x300D },
+ ["unicodeslot"]=0xFE42, -- ﹂
+ },
+ [0xFE43]={
+ ["category"]="ps",
+ ["cjkwd"]="w",
+ ["description"]="PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET",
+ ["linebreak"]="op",
+ ["specials"]={ "vertical", 0x300E },
+ ["unicodeslot"]=0xFE43, -- ﹃
+ },
+ [0xFE44]={
+ ["category"]="pe",
+ ["cjkwd"]="w",
+ ["description"]="PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET",
+ ["linebreak"]="cl",
+ ["specials"]={ "vertical", 0x300F },
+ ["unicodeslot"]=0xFE44, -- ﹄
+ },
+ [0xFE45]={
+ ["category"]="po",
+ ["cjkwd"]="w",
+ ["description"]="SESAME DOT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xFE45, -- ï¹…
+ },
+ [0xFE46]={
+ ["category"]="po",
+ ["cjkwd"]="w",
+ ["description"]="WHITE SESAME DOT",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0xFE46, -- ﹆
+ },
+ [0xFE47]={
+ ["category"]="ps",
+ ["cjkwd"]="w",
+ ["description"]="PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET",
+ ["linebreak"]="op",
+ ["specials"]={ "vertical", 0x005B },
+ ["unicodeslot"]=0xFE47, -- ﹇
+ },
+ [0xFE48]={
+ ["category"]="pe",
+ ["cjkwd"]="w",
+ ["description"]="PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET",
+ ["linebreak"]="cl",
+ ["specials"]={ "vertical", 0x005D },
+ ["unicodeslot"]=0xFE48, -- ﹈
+ },
+ [0xFE49]={
+ ["category"]="po",
+ ["cjkwd"]="w",
+ ["description"]="DASHED OVERLINE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x203E },
+ ["unicodeslot"]=0xFE49, -- ﹉
+ },
+ [0xFE4A]={
+ ["category"]="po",
+ ["cjkwd"]="w",
+ ["description"]="CENTRELINE OVERLINE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x203E },
+ ["unicodeslot"]=0xFE4A, -- ﹊
+ },
+ [0xFE4B]={
+ ["category"]="po",
+ ["cjkwd"]="w",
+ ["description"]="WAVY OVERLINE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x203E },
+ ["unicodeslot"]=0xFE4B, -- ﹋
+ },
+ [0xFE4C]={
+ ["category"]="po",
+ ["cjkwd"]="w",
+ ["description"]="DOUBLE WAVY OVERLINE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x203E },
+ ["unicodeslot"]=0xFE4C, -- ﹌
+ },
+ [0xFE4D]={
+ ["category"]="pc",
+ ["cjkwd"]="w",
+ ["description"]="DASHED LOW LINE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x005F },
+ ["unicodeslot"]=0xFE4D, -- ï¹
+ },
+ [0xFE4E]={
+ ["category"]="pc",
+ ["cjkwd"]="w",
+ ["description"]="CENTRELINE LOW LINE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x005F },
+ ["unicodeslot"]=0xFE4E, -- ﹎
+ },
+ [0xFE4F]={
+ ["category"]="pc",
+ ["cjkwd"]="w",
+ ["description"]="WAVY LOW LINE",
+ ["linebreak"]="id",
+ ["specials"]={ "compat", 0x005F },
+ ["unicodeslot"]=0xFE4F, -- ï¹
+ },
+ [0xFE50]={
+ ["category"]="po",
+ ["cjkwd"]="w",
+ ["description"]="SMALL COMMA",
+ ["linebreak"]="cl",
+ ["specials"]={ "small", 0x002C },
+ ["unicodeslot"]=0xFE50, -- ï¹
+ },
+ [0xFE51]={
+ ["category"]="po",
+ ["cjkwd"]="w",
+ ["description"]="SMALL IDEOGRAPHIC COMMA",
+ ["linebreak"]="id",
+ ["specials"]={ "small", 0x3001 },
+ ["unicodeslot"]=0xFE51, -- ﹑
+ },
+ [0xFE52]={
+ ["category"]="po",
+ ["cjkwd"]="w",
+ ["description"]="SMALL FULL STOP",
+ ["linebreak"]="cl",
+ ["specials"]={ "small", 0x002E },
+ ["unicodeslot"]=0xFE52, -- ï¹’
+ },
+ [0xFE54]={
+ ["category"]="po",
+ ["cjkwd"]="w",
+ ["description"]="SMALL SEMICOLON",
+ ["linebreak"]="ns",
+ ["specials"]={ "small", 0x003B },
+ ["unicodeslot"]=0xFE54, -- ï¹”
+ },
+ [0xFE55]={
+ ["category"]="po",
+ ["cjkwd"]="w",
+ ["description"]="SMALL COLON",
+ ["linebreak"]="ns",
+ ["specials"]={ "small", 0x003A },
+ ["unicodeslot"]=0xFE55, -- ﹕
+ },
+ [0xFE56]={
+ ["category"]="po",
+ ["cjkwd"]="w",
+ ["description"]="SMALL QUESTION MARK",
+ ["linebreak"]="ex",
+ ["specials"]={ "small", 0x003F },
+ ["unicodeslot"]=0xFE56, -- ï¹–
+ },
+ [0xFE57]={
+ ["category"]="po",
+ ["cjkwd"]="w",
+ ["description"]="SMALL EXCLAMATION MARK",
+ ["linebreak"]="ex",
+ ["specials"]={ "small", 0x0021 },
+ ["unicodeslot"]=0xFE57, -- ï¹—
+ },
+ [0xFE58]={
+ ["category"]="pd",
+ ["cjkwd"]="w",
+ ["description"]="SMALL EM DASH",
+ ["linebreak"]="id",
+ ["specials"]={ "small", 0x2014 },
+ ["unicodeslot"]=0xFE58, -- ﹘
+ },
+ [0xFE59]={
+ ["category"]="ps",
+ ["cjkwd"]="w",
+ ["description"]="SMALL LEFT PARENTHESIS",
+ ["linebreak"]="op",
+ ["specials"]={ "small", 0x0028 },
+ ["unicodeslot"]=0xFE59, -- ï¹™
+ },
+ [0xFE5A]={
+ ["category"]="pe",
+ ["cjkwd"]="w",
+ ["description"]="SMALL RIGHT PARENTHESIS",
+ ["linebreak"]="cl",
+ ["specials"]={ "small", 0x0029 },
+ ["unicodeslot"]=0xFE5A, -- ﹚
+ },
+ [0xFE5B]={
+ ["category"]="ps",
+ ["cjkwd"]="w",
+ ["description"]="SMALL LEFT CURLY BRACKET",
+ ["linebreak"]="op",
+ ["specials"]={ "small", 0x007B },
+ ["unicodeslot"]=0xFE5B, -- ï¹›
+ },
+ [0xFE5C]={
+ ["category"]="pe",
+ ["cjkwd"]="w",
+ ["description"]="SMALL RIGHT CURLY BRACKET",
+ ["linebreak"]="cl",
+ ["specials"]={ "small", 0x007D },
+ ["unicodeslot"]=0xFE5C, -- ﹜
+ },
+ [0xFE5D]={
+ ["category"]="ps",
+ ["cjkwd"]="w",
+ ["description"]="SMALL LEFT TORTOISE SHELL BRACKET",
+ ["linebreak"]="op",
+ ["specials"]={ "small", 0x3014 },
+ ["unicodeslot"]=0xFE5D, -- ï¹
+ },
+ [0xFE5E]={
+ ["category"]="pe",
+ ["cjkwd"]="w",
+ ["description"]="SMALL RIGHT TORTOISE SHELL BRACKET",
+ ["linebreak"]="cl",
+ ["specials"]={ "small", 0x3015 },
+ ["unicodeslot"]=0xFE5E, -- ﹞
+ },
+ [0xFE5F]={
+ ["category"]="po",
+ ["cjkwd"]="w",
+ ["description"]="SMALL NUMBER SIGN",
+ ["linebreak"]="id",
+ ["specials"]={ "small", 0x0023 },
+ ["unicodeslot"]=0xFE5F, -- ﹟
+ },
+ [0xFE60]={
+ ["category"]="po",
+ ["cjkwd"]="w",
+ ["description"]="SMALL AMPERSAND",
+ ["linebreak"]="id",
+ ["specials"]={ "small", 0x0026 },
+ ["unicodeslot"]=0xFE60, -- ï¹ 
+ },
+ [0xFE61]={
+ ["category"]="po",
+ ["cjkwd"]="w",
+ ["description"]="SMALL ASTERISK",
+ ["linebreak"]="id",
+ ["specials"]={ "small", 0x002A },
+ ["unicodeslot"]=0xFE61, -- ﹡
+ },
+ [0xFE62]={
+ ["category"]="sm",
+ ["cjkwd"]="w",
+ ["description"]="SMALL PLUS SIGN",
+ ["linebreak"]="id",
+ ["specials"]={ "small", 0x002B },
+ ["unicodeslot"]=0xFE62, -- ï¹¢
+ },
+ [0xFE63]={
+ ["category"]="pd",
+ ["cjkwd"]="w",
+ ["description"]="SMALL HYPHEN-MINUS",
+ ["linebreak"]="id",
+ ["specials"]={ "small", 0x002D },
+ ["unicodeslot"]=0xFE63, -- ï¹£
+ },
+ [0xFE64]={
+ ["category"]="sm",
+ ["cjkwd"]="w",
+ ["description"]="SMALL LESS-THAN SIGN",
+ ["linebreak"]="id",
+ ["specials"]={ "small", 0x003C },
+ ["unicodeslot"]=0xFE64, -- ﹤
+ },
+ [0xFE65]={
+ ["category"]="sm",
+ ["cjkwd"]="w",
+ ["description"]="SMALL GREATER-THAN SIGN",
+ ["linebreak"]="id",
+ ["specials"]={ "small", 0x003E },
+ ["unicodeslot"]=0xFE65, -- ï¹¥
+ },
+ [0xFE66]={
+ ["category"]="sm",
+ ["cjkwd"]="w",
+ ["description"]="SMALL EQUALS SIGN",
+ ["linebreak"]="id",
+ ["specials"]={ "small", 0x003D },
+ ["unicodeslot"]=0xFE66, -- ﹦
+ },
+ [0xFE68]={
+ ["category"]="po",
+ ["cjkwd"]="w",
+ ["description"]="SMALL REVERSE SOLIDUS",
+ ["linebreak"]="id",
+ ["specials"]={ "small", 0x005C },
+ ["unicodeslot"]=0xFE68, -- ﹨
+ },
+ [0xFE69]={
+ ["category"]="sc",
+ ["cjkwd"]="w",
+ ["description"]="SMALL DOLLAR SIGN",
+ ["linebreak"]="pr",
+ ["specials"]={ "small", 0x0024 },
+ ["unicodeslot"]=0xFE69, -- ﹩
+ },
+ [0xFE6A]={
+ ["category"]="po",
+ ["cjkwd"]="w",
+ ["description"]="SMALL PERCENT SIGN",
+ ["linebreak"]="po",
+ ["specials"]={ "small", 0x0025 },
+ ["unicodeslot"]=0xFE6A, -- ﹪
+ },
+ [0xFE6B]={
+ ["category"]="po",
+ ["cjkwd"]="w",
+ ["description"]="SMALL COMMERCIAL AT",
+ ["linebreak"]="id",
+ ["specials"]={ "small", 0x0040 },
+ ["unicodeslot"]=0xFE6B, -- ﹫
+ },
+ [0xFE70]={
+ ["category"]="lo",
+ ["description"]="ARABIC FATHATAN ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0020, 0x064B },
+ ["unicodeslot"]=0xFE70, -- ï¹°
+ },
+ [0xFE71]={
+ ["category"]="lo",
+ ["description"]="ARABIC TATWEEL WITH FATHATAN ABOVE",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x0640, 0x064B },
+ ["unicodeslot"]=0xFE71, -- ï¹±
+ },
+ [0xFE72]={
+ ["category"]="lo",
+ ["description"]="ARABIC DAMMATAN ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0020, 0x064C },
+ ["unicodeslot"]=0xFE72, -- ï¹²
+ },
+ [0xFE73]={
+ ["category"]="lo",
+ ["description"]="ARABIC TAIL FRAGMENT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0xFE73, -- ï¹³
+ },
+ [0xFE74]={
+ ["category"]="lo",
+ ["description"]="ARABIC KASRATAN ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0020, 0x064D },
+ ["unicodeslot"]=0xFE74, -- ï¹´
+ },
+ [0xFE76]={
+ ["category"]="lo",
+ ["description"]="ARABIC FATHA ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0020, 0x064E },
+ ["unicodeslot"]=0xFE76, -- ﹶ
+ },
+ [0xFE77]={
+ ["category"]="lo",
+ ["description"]="ARABIC FATHA MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x0640, 0x064E },
+ ["unicodeslot"]=0xFE77, -- ï¹·
+ },
+ [0xFE78]={
+ ["category"]="lo",
+ ["description"]="ARABIC DAMMA ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0020, 0x064F },
+ ["unicodeslot"]=0xFE78, -- ﹸ
+ },
+ [0xFE79]={
+ ["category"]="lo",
+ ["description"]="ARABIC DAMMA MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x0640, 0x064F },
+ ["unicodeslot"]=0xFE79, -- ï¹¹
+ },
+ [0xFE7A]={
+ ["category"]="lo",
+ ["description"]="ARABIC KASRA ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0020, 0x0650 },
+ ["unicodeslot"]=0xFE7A, -- ﹺ
+ },
+ [0xFE7B]={
+ ["category"]="lo",
+ ["description"]="ARABIC KASRA MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x0640, 0x0650 },
+ ["unicodeslot"]=0xFE7B, -- ï¹»
+ },
+ [0xFE7C]={
+ ["category"]="lo",
+ ["description"]="ARABIC SHADDA ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0020, 0x0651 },
+ ["unicodeslot"]=0xFE7C, -- ï¹¼
+ },
+ [0xFE7D]={
+ ["category"]="lo",
+ ["description"]="ARABIC SHADDA MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x0640, 0x0651 },
+ ["unicodeslot"]=0xFE7D, -- ï¹½
+ },
+ [0xFE7E]={
+ ["category"]="lo",
+ ["description"]="ARABIC SUKUN ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0020, 0x0652 },
+ ["unicodeslot"]=0xFE7E, -- ï¹¾
+ },
+ [0xFE7F]={
+ ["category"]="lo",
+ ["description"]="ARABIC SUKUN MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x0640, 0x0652 },
+ ["unicodeslot"]=0xFE7F, -- ﹿ
+ },
+ [0xFE80]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER HAMZA ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0621 },
+ ["unicodeslot"]=0xFE80, -- ﺀ
+ },
+ [0xFE81]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM",
+ ["linebreak"]="al",
+ ["shcode"]=0x0627,
+ ["specials"]={ "isolated", 0x0622 },
+ ["unicodeslot"]=0xFE81, -- ïº
+ },
+ [0xFE82]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM",
+ ["linebreak"]="al",
+ ["shcode"]=0x0627,
+ ["specials"]={ "final", 0x0622 },
+ ["unicodeslot"]=0xFE82, -- ﺂ
+ },
+ [0xFE83]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM",
+ ["linebreak"]="al",
+ ["shcode"]=0x0627,
+ ["specials"]={ "isolated", 0x0623 },
+ ["unicodeslot"]=0xFE83, -- ﺃ
+ },
+ [0xFE84]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM",
+ ["linebreak"]="al",
+ ["shcode"]=0x0627,
+ ["specials"]={ "final", 0x0623 },
+ ["unicodeslot"]=0xFE84, -- ﺄ
+ },
+ [0xFE85]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM",
+ ["linebreak"]="al",
+ ["shcode"]=0x0648,
+ ["specials"]={ "isolated", 0x0624 },
+ ["unicodeslot"]=0xFE85, -- ﺅ
+ },
+ [0xFE86]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM",
+ ["linebreak"]="al",
+ ["shcode"]=0x0648,
+ ["specials"]={ "final", 0x0624 },
+ ["unicodeslot"]=0xFE86, -- ﺆ
+ },
+ [0xFE87]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM",
+ ["linebreak"]="al",
+ ["shcode"]=0x0627,
+ ["specials"]={ "isolated", 0x0625 },
+ ["unicodeslot"]=0xFE87, -- ﺇ
+ },
+ [0xFE88]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM",
+ ["linebreak"]="al",
+ ["shcode"]=0x0627,
+ ["specials"]={ "final", 0x0625 },
+ ["unicodeslot"]=0xFE88, -- ﺈ
+ },
+ [0xFE89]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM",
+ ["linebreak"]="al",
+ ["shcode"]=0x064A,
+ ["specials"]={ "isolated", 0x0626 },
+ ["unicodeslot"]=0xFE89, -- ﺉ
+ },
+ [0xFE8A]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM",
+ ["linebreak"]="al",
+ ["shcode"]=0x064A,
+ ["specials"]={ "final", 0x0626 },
+ ["unicodeslot"]=0xFE8A, -- ﺊ
+ },
+ [0xFE8B]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM",
+ ["linebreak"]="al",
+ ["shcode"]=0x064A,
+ ["specials"]={ "initial", 0x0626 },
+ ["unicodeslot"]=0xFE8B, -- ﺋ
+ },
+ [0xFE8C]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM",
+ ["linebreak"]="al",
+ ["shcode"]=0x064A,
+ ["specials"]={ "medial", 0x0626 },
+ ["unicodeslot"]=0xFE8C, -- ﺌ
+ },
+ [0xFE8D]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER ALEF ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0627 },
+ ["unicodeslot"]=0xFE8D, -- ïº
+ },
+ [0xFE8E]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER ALEF FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0627 },
+ ["unicodeslot"]=0xFE8E, -- ﺎ
+ },
+ [0xFE8F]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER BEH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0628 },
+ ["unicodeslot"]=0xFE8F, -- ïº
+ },
+ [0xFE90]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER BEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0628 },
+ ["unicodeslot"]=0xFE90, -- ïº
+ },
+ [0xFE91]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER BEH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0628 },
+ ["unicodeslot"]=0xFE91, -- ﺑ
+ },
+ [0xFE92]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER BEH MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x0628 },
+ ["unicodeslot"]=0xFE92, -- ﺒ
+ },
+ [0xFE93]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER TEH MARBUTA ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0629 },
+ ["unicodeslot"]=0xFE93, -- ﺓ
+ },
+ [0xFE94]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER TEH MARBUTA FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0629 },
+ ["unicodeslot"]=0xFE94, -- ﺔ
+ },
+ [0xFE95]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER TEH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x062A },
+ ["unicodeslot"]=0xFE95, -- ﺕ
+ },
+ [0xFE96]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER TEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x062A },
+ ["unicodeslot"]=0xFE96, -- ﺖ
+ },
+ [0xFE97]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER TEH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x062A },
+ ["unicodeslot"]=0xFE97, -- ﺗ
+ },
+ [0xFE98]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER TEH MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x062A },
+ ["unicodeslot"]=0xFE98, -- ﺘ
+ },
+ [0xFE99]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER THEH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x062B },
+ ["unicodeslot"]=0xFE99, -- ﺙ
+ },
+ [0xFE9A]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER THEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x062B },
+ ["unicodeslot"]=0xFE9A, -- ﺚ
+ },
+ [0xFE9B]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER THEH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x062B },
+ ["unicodeslot"]=0xFE9B, -- ﺛ
+ },
+ [0xFE9C]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER THEH MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x062B },
+ ["unicodeslot"]=0xFE9C, -- ﺜ
+ },
+ [0xFE9D]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER JEEM ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x062C },
+ ["unicodeslot"]=0xFE9D, -- ïº
+ },
+ [0xFE9E]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER JEEM FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x062C },
+ ["unicodeslot"]=0xFE9E, -- ﺞ
+ },
+ [0xFE9F]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER JEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x062C },
+ ["unicodeslot"]=0xFE9F, -- ﺟ
+ },
+ [0xFEA0]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER JEEM MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x062C },
+ ["unicodeslot"]=0xFEA0, -- ﺠ
+ },
+ [0xFEA1]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER HAH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x062D },
+ ["unicodeslot"]=0xFEA1, -- ﺡ
+ },
+ [0xFEA2]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER HAH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x062D },
+ ["unicodeslot"]=0xFEA2, -- ﺢ
+ },
+ [0xFEA3]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER HAH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x062D },
+ ["unicodeslot"]=0xFEA3, -- ﺣ
+ },
+ [0xFEA4]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER HAH MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x062D },
+ ["unicodeslot"]=0xFEA4, -- ﺤ
+ },
+ [0xFEA5]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER KHAH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x062E },
+ ["unicodeslot"]=0xFEA5, -- ﺥ
+ },
+ [0xFEA6]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER KHAH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x062E },
+ ["unicodeslot"]=0xFEA6, -- ﺦ
+ },
+ [0xFEA7]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER KHAH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x062E },
+ ["unicodeslot"]=0xFEA7, -- ﺧ
+ },
+ [0xFEA8]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER KHAH MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x062E },
+ ["unicodeslot"]=0xFEA8, -- ﺨ
+ },
+ [0xFEA9]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER DAL ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x062F },
+ ["unicodeslot"]=0xFEA9, -- ﺩ
+ },
+ [0xFEAA]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER DAL FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x062F },
+ ["unicodeslot"]=0xFEAA, -- ﺪ
+ },
+ [0xFEAB]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER THAL ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0630 },
+ ["unicodeslot"]=0xFEAB, -- ﺫ
+ },
+ [0xFEAC]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER THAL FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0630 },
+ ["unicodeslot"]=0xFEAC, -- ﺬ
+ },
+ [0xFEAD]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER REH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0631 },
+ ["unicodeslot"]=0xFEAD, -- ﺭ
+ },
+ [0xFEAE]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER REH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0631 },
+ ["unicodeslot"]=0xFEAE, -- ﺮ
+ },
+ [0xFEAF]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER ZAIN ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0632 },
+ ["unicodeslot"]=0xFEAF, -- ﺯ
+ },
+ [0xFEB0]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER ZAIN FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0632 },
+ ["unicodeslot"]=0xFEB0, -- ﺰ
+ },
+ [0xFEB1]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER SEEN ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0633 },
+ ["unicodeslot"]=0xFEB1, -- ﺱ
+ },
+ [0xFEB2]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER SEEN FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0633 },
+ ["unicodeslot"]=0xFEB2, -- ﺲ
+ },
+ [0xFEB3]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER SEEN INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0633 },
+ ["unicodeslot"]=0xFEB3, -- ﺳ
+ },
+ [0xFEB4]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER SEEN MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x0633 },
+ ["unicodeslot"]=0xFEB4, -- ﺴ
+ },
+ [0xFEB5]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER SHEEN ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0634 },
+ ["unicodeslot"]=0xFEB5, -- ﺵ
+ },
+ [0xFEB6]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER SHEEN FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0634 },
+ ["unicodeslot"]=0xFEB6, -- ﺶ
+ },
+ [0xFEB7]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER SHEEN INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0634 },
+ ["unicodeslot"]=0xFEB7, -- ﺷ
+ },
+ [0xFEB8]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER SHEEN MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x0634 },
+ ["unicodeslot"]=0xFEB8, -- ﺸ
+ },
+ [0xFEB9]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER SAD ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0635 },
+ ["unicodeslot"]=0xFEB9, -- ﺹ
+ },
+ [0xFEBA]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER SAD FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0635 },
+ ["unicodeslot"]=0xFEBA, -- ﺺ
+ },
+ [0xFEBB]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER SAD INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0635 },
+ ["unicodeslot"]=0xFEBB, -- ﺻ
+ },
+ [0xFEBC]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER SAD MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x0635 },
+ ["unicodeslot"]=0xFEBC, -- ﺼ
+ },
+ [0xFEBD]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER DAD ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0636 },
+ ["unicodeslot"]=0xFEBD, -- ﺽ
+ },
+ [0xFEBE]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER DAD FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0636 },
+ ["unicodeslot"]=0xFEBE, -- ﺾ
+ },
+ [0xFEBF]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER DAD INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0636 },
+ ["unicodeslot"]=0xFEBF, -- ﺿ
+ },
+ [0xFEC0]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER DAD MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x0636 },
+ ["unicodeslot"]=0xFEC0, -- ﻀ
+ },
+ [0xFEC1]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER TAH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0637 },
+ ["unicodeslot"]=0xFEC1, -- ï»
+ },
+ [0xFEC2]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER TAH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0637 },
+ ["unicodeslot"]=0xFEC2, -- ﻂ
+ },
+ [0xFEC3]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER TAH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0637 },
+ ["unicodeslot"]=0xFEC3, -- ﻃ
+ },
+ [0xFEC4]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER TAH MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x0637 },
+ ["unicodeslot"]=0xFEC4, -- ﻄ
+ },
+ [0xFEC5]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER ZAH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0638 },
+ ["unicodeslot"]=0xFEC5, -- ï»…
+ },
+ [0xFEC6]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER ZAH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0638 },
+ ["unicodeslot"]=0xFEC6, -- ﻆ
+ },
+ [0xFEC7]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER ZAH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0638 },
+ ["unicodeslot"]=0xFEC7, -- ﻇ
+ },
+ [0xFEC8]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER ZAH MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x0638 },
+ ["unicodeslot"]=0xFEC8, -- ﻈ
+ },
+ [0xFEC9]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER AIN ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0639 },
+ ["unicodeslot"]=0xFEC9, -- ﻉ
+ },
+ [0xFECA]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER AIN FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0639 },
+ ["unicodeslot"]=0xFECA, -- ﻊ
+ },
+ [0xFECB]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER AIN INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0639 },
+ ["unicodeslot"]=0xFECB, -- ﻋ
+ },
+ [0xFECC]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER AIN MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x0639 },
+ ["unicodeslot"]=0xFECC, -- ﻌ
+ },
+ [0xFECD]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER GHAIN ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x063A },
+ ["unicodeslot"]=0xFECD, -- ï»
+ },
+ [0xFECE]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER GHAIN FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x063A },
+ ["unicodeslot"]=0xFECE, -- ﻎ
+ },
+ [0xFECF]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER GHAIN INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x063A },
+ ["unicodeslot"]=0xFECF, -- ï»
+ },
+ [0xFED0]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER GHAIN MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x063A },
+ ["unicodeslot"]=0xFED0, -- ï»
+ },
+ [0xFED1]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER FEH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0641 },
+ ["unicodeslot"]=0xFED1, -- ﻑ
+ },
+ [0xFED2]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER FEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0641 },
+ ["unicodeslot"]=0xFED2, -- ï»’
+ },
+ [0xFED3]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER FEH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0641 },
+ ["unicodeslot"]=0xFED3, -- ﻓ
+ },
+ [0xFED4]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER FEH MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x0641 },
+ ["unicodeslot"]=0xFED4, -- ï»”
+ },
+ [0xFED5]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER QAF ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0642 },
+ ["unicodeslot"]=0xFED5, -- ﻕ
+ },
+ [0xFED6]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER QAF FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0642 },
+ ["unicodeslot"]=0xFED6, -- ï»–
+ },
+ [0xFED7]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER QAF INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0642 },
+ ["unicodeslot"]=0xFED7, -- ï»—
+ },
+ [0xFED8]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER QAF MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x0642 },
+ ["unicodeslot"]=0xFED8, -- ﻘ
+ },
+ [0xFED9]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER KAF ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0643 },
+ ["unicodeslot"]=0xFED9, -- ï»™
+ },
+ [0xFEDA]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER KAF FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0643 },
+ ["unicodeslot"]=0xFEDA, -- ﻚ
+ },
+ [0xFEDB]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER KAF INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0643 },
+ ["unicodeslot"]=0xFEDB, -- ï»›
+ },
+ [0xFEDC]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER KAF MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x0643 },
+ ["unicodeslot"]=0xFEDC, -- ﻜ
+ },
+ [0xFEDD]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER LAM ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0644 },
+ ["unicodeslot"]=0xFEDD, -- ï»
+ },
+ [0xFEDE]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER LAM FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0644 },
+ ["unicodeslot"]=0xFEDE, -- ﻞ
+ },
+ [0xFEDF]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER LAM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0644 },
+ ["unicodeslot"]=0xFEDF, -- ﻟ
+ },
+ [0xFEE0]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER LAM MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x0644 },
+ ["unicodeslot"]=0xFEE0, -- ï» 
+ },
+ [0xFEE1]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER MEEM ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0645 },
+ ["unicodeslot"]=0xFEE1, -- ﻡ
+ },
+ [0xFEE2]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER MEEM FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0645 },
+ ["unicodeslot"]=0xFEE2, -- ﻢ
+ },
+ [0xFEE3]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER MEEM INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0645 },
+ ["unicodeslot"]=0xFEE3, -- ﻣ
+ },
+ [0xFEE4]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER MEEM MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x0645 },
+ ["unicodeslot"]=0xFEE4, -- ﻤ
+ },
+ [0xFEE5]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER NOON ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0646 },
+ ["unicodeslot"]=0xFEE5, -- ﻥ
+ },
+ [0xFEE6]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER NOON FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0646 },
+ ["unicodeslot"]=0xFEE6, -- ﻦ
+ },
+ [0xFEE7]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER NOON INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0646 },
+ ["unicodeslot"]=0xFEE7, -- ﻧ
+ },
+ [0xFEE8]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER NOON MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x0646 },
+ ["unicodeslot"]=0xFEE8, -- ﻨ
+ },
+ [0xFEE9]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER HEH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0647 },
+ ["unicodeslot"]=0xFEE9, -- ﻩ
+ },
+ [0xFEEA]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER HEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0647 },
+ ["unicodeslot"]=0xFEEA, -- ﻪ
+ },
+ [0xFEEB]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER HEH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x0647 },
+ ["unicodeslot"]=0xFEEB, -- ﻫ
+ },
+ [0xFEEC]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER HEH MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x0647 },
+ ["unicodeslot"]=0xFEEC, -- ﻬ
+ },
+ [0xFEED]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER WAW ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0648 },
+ ["unicodeslot"]=0xFEED, -- ï»­
+ },
+ [0xFEEE]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER WAW FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0648 },
+ ["unicodeslot"]=0xFEEE, -- ï»®
+ },
+ [0xFEEF]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER ALEF MAKSURA ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0649 },
+ ["unicodeslot"]=0xFEEF, -- ﻯ
+ },
+ [0xFEF0]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER ALEF MAKSURA FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0649 },
+ ["unicodeslot"]=0xFEF0, -- ï»°
+ },
+ [0xFEF1]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER YEH ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x064A },
+ ["unicodeslot"]=0xFEF1, -- ï»±
+ },
+ [0xFEF2]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER YEH FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x064A },
+ ["unicodeslot"]=0xFEF2, -- ﻲ
+ },
+ [0xFEF3]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER YEH INITIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "initial", 0x064A },
+ ["unicodeslot"]=0xFEF3, -- ﻳ
+ },
+ [0xFEF4]={
+ ["category"]="lo",
+ ["description"]="ARABIC LETTER YEH MEDIAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "medial", 0x064A },
+ ["unicodeslot"]=0xFEF4, -- ï»´
+ },
+ [0xFEF5]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0644, 0x0622 },
+ ["unicodeslot"]=0xFEF5, -- ﻵ
+ },
+ [0xFEF6]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0644, 0x0622 },
+ ["unicodeslot"]=0xFEF6, -- ﻶ
+ },
+ [0xFEF7]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0644, 0x0623 },
+ ["unicodeslot"]=0xFEF7, -- ï»·
+ },
+ [0xFEF8]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0644, 0x0623 },
+ ["unicodeslot"]=0xFEF8, -- ﻸ
+ },
+ [0xFEF9]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0644, 0x0625 },
+ ["unicodeslot"]=0xFEF9, -- ﻹ
+ },
+ [0xFEFA]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0644, 0x0625 },
+ ["unicodeslot"]=0xFEFA, -- ﻺ
+ },
+ [0xFEFB]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "isolated", 0x0644, 0x0627 },
+ ["unicodeslot"]=0xFEFB, -- ï»»
+ },
+ [0xFEFC]={
+ ["category"]="lo",
+ ["description"]="ARABIC LIGATURE LAM WITH ALEF FINAL FORM",
+ ["linebreak"]="al",
+ ["specials"]={ "final", 0x0644, 0x0627 },
+ ["unicodeslot"]=0xFEFC, -- ﻼ
+ },
+ [0xFEFF]={
+ ["category"]="cf",
+ ["description"]="ZERO WIDTH NO-BREAK SPACE",
+ ["linebreak"]="wj",
+ ["unicodeslot"]=0xFEFF, -- 
+ },
+ [0xFF01]={
+ ["category"]="po",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH EXCLAMATION MARK",
+ ["linebreak"]="ex",
+ ["specials"]={ "wide", 0x0021 },
+ ["unicodeslot"]=0xFF01, -- ï¼
+ },
+ [0xFF02]={
+ ["category"]="po",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH QUOTATION MARK",
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x0022 },
+ ["unicodeslot"]=0xFF02, -- "
+ },
+ [0xFF03]={
+ ["category"]="po",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH NUMBER SIGN",
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x0023 },
+ ["unicodeslot"]=0xFF03, -- #
+ },
+ [0xFF04]={
+ ["category"]="sc",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH DOLLAR SIGN",
+ ["linebreak"]="pr",
+ ["specials"]={ "wide", 0x0024 },
+ ["unicodeslot"]=0xFF04, -- $
+ },
+ [0xFF05]={
+ ["category"]="po",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH PERCENT SIGN",
+ ["linebreak"]="po",
+ ["specials"]={ "wide", 0x0025 },
+ ["unicodeslot"]=0xFF05, -- ï¼…
+ },
+ [0xFF06]={
+ ["category"]="po",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH AMPERSAND",
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x0026 },
+ ["unicodeslot"]=0xFF06, -- &
+ },
+ [0xFF07]={
+ ["category"]="po",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH APOSTROPHE",
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x0027 },
+ ["unicodeslot"]=0xFF07, -- '
+ },
+ [0xFF08]={
+ ["category"]="ps",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH LEFT PARENTHESIS",
+ ["linebreak"]="op",
+ ["specials"]={ "wide", 0x0028 },
+ ["unicodeslot"]=0xFF08, -- (
+ },
+ [0xFF09]={
+ ["category"]="pe",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH RIGHT PARENTHESIS",
+ ["linebreak"]="cl",
+ ["specials"]={ "wide", 0x0029 },
+ ["unicodeslot"]=0xFF09, -- )
+ },
+ [0xFF0A]={
+ ["category"]="po",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH ASTERISK",
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x002A },
+ ["unicodeslot"]=0xFF0A, -- *
+ },
+ [0xFF0B]={
+ ["category"]="sm",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH PLUS SIGN",
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x002B },
+ ["unicodeslot"]=0xFF0B, -- +
+ },
+ [0xFF0C]={
+ ["category"]="po",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH COMMA",
+ ["linebreak"]="cl",
+ ["specials"]={ "wide", 0x002C },
+ ["unicodeslot"]=0xFF0C, -- ,
+ },
+ [0xFF0D]={
+ ["category"]="pd",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH HYPHEN-MINUS",
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x002D },
+ ["unicodeslot"]=0xFF0D, -- ï¼
+ },
+ [0xFF0E]={
+ ["category"]="po",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH FULL STOP",
+ ["linebreak"]="cl",
+ ["specials"]={ "wide", 0x002E },
+ ["unicodeslot"]=0xFF0E, -- .
+ },
+ [0xFF0F]={
+ ["category"]="po",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH SOLIDUS",
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x002F },
+ ["unicodeslot"]=0xFF0F, -- ï¼
+ },
+ [0xFF10]={
+ ["category"]="nd",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH DIGIT ZERO",
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x0030 },
+ ["unicodeslot"]=0xFF10, -- ï¼
+ },
+ [0xFF11]={
+ ["category"]="nd",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH DIGIT ONE",
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x0031 },
+ ["unicodeslot"]=0xFF11, -- 1
+ },
+ [0xFF12]={
+ ["category"]="nd",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH DIGIT TWO",
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x0032 },
+ ["unicodeslot"]=0xFF12, -- ï¼’
+ },
+ [0xFF13]={
+ ["category"]="nd",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH DIGIT THREE",
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x0033 },
+ ["unicodeslot"]=0xFF13, -- 3
+ },
+ [0xFF14]={
+ ["category"]="nd",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH DIGIT FOUR",
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x0034 },
+ ["unicodeslot"]=0xFF14, -- ï¼”
+ },
+ [0xFF15]={
+ ["category"]="nd",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH DIGIT FIVE",
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x0035 },
+ ["unicodeslot"]=0xFF15, -- 5
+ },
+ [0xFF16]={
+ ["category"]="nd",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH DIGIT SIX",
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x0036 },
+ ["unicodeslot"]=0xFF16, -- ï¼–
+ },
+ [0xFF17]={
+ ["category"]="nd",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH DIGIT SEVEN",
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x0037 },
+ ["unicodeslot"]=0xFF17, -- ï¼—
+ },
+ [0xFF18]={
+ ["category"]="nd",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH DIGIT EIGHT",
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x0038 },
+ ["unicodeslot"]=0xFF18, -- 8
+ },
+ [0xFF19]={
+ ["category"]="nd",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH DIGIT NINE",
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x0039 },
+ ["unicodeslot"]=0xFF19, -- ï¼™
+ },
+ [0xFF1A]={
+ ["category"]="po",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH COLON",
+ ["linebreak"]="ns",
+ ["specials"]={ "wide", 0x003A },
+ ["unicodeslot"]=0xFF1A, -- :
+ },
+ [0xFF1B]={
+ ["category"]="po",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH SEMICOLON",
+ ["linebreak"]="ns",
+ ["specials"]={ "wide", 0x003B },
+ ["unicodeslot"]=0xFF1B, -- ï¼›
+ },
+ [0xFF1C]={
+ ["category"]="sm",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH LESS-THAN SIGN",
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x003C },
+ ["unicodeslot"]=0xFF1C, -- <
+ },
+ [0xFF1D]={
+ ["category"]="sm",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH EQUALS SIGN",
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x003D },
+ ["unicodeslot"]=0xFF1D, -- ï¼
+ },
+ [0xFF1E]={
+ ["category"]="sm",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH GREATER-THAN SIGN",
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x003E },
+ ["unicodeslot"]=0xFF1E, -- >
+ },
+ [0xFF1F]={
+ ["category"]="po",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH QUESTION MARK",
+ ["linebreak"]="ex",
+ ["specials"]={ "wide", 0x003F },
+ ["unicodeslot"]=0xFF1F, -- ?
+ },
+ [0xFF20]={
+ ["category"]="po",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH COMMERCIAL AT",
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x0040 },
+ ["unicodeslot"]=0xFF20, -- ï¼ 
+ },
+ [0xFF21]={
+ ["category"]="lu",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH LATIN CAPITAL LETTER A",
+ ["lccode"]=0xFF41,
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x0041 },
+ ["unicodeslot"]=0xFF21, -- A
+ },
+ [0xFF22]={
+ ["category"]="lu",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH LATIN CAPITAL LETTER B",
+ ["lccode"]=0xFF42,
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x0042 },
+ ["unicodeslot"]=0xFF22, -- ï¼¢
+ },
+ [0xFF23]={
+ ["category"]="lu",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH LATIN CAPITAL LETTER C",
+ ["lccode"]=0xFF43,
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x0043 },
+ ["unicodeslot"]=0xFF23, -- ï¼£
+ },
+ [0xFF24]={
+ ["category"]="lu",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH LATIN CAPITAL LETTER D",
+ ["lccode"]=0xFF44,
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x0044 },
+ ["unicodeslot"]=0xFF24, -- D
+ },
+ [0xFF25]={
+ ["category"]="lu",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH LATIN CAPITAL LETTER E",
+ ["lccode"]=0xFF45,
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x0045 },
+ ["unicodeslot"]=0xFF25, -- ï¼¥
+ },
+ [0xFF26]={
+ ["category"]="lu",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH LATIN CAPITAL LETTER F",
+ ["lccode"]=0xFF46,
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x0046 },
+ ["unicodeslot"]=0xFF26, -- F
+ },
+ [0xFF27]={
+ ["category"]="lu",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH LATIN CAPITAL LETTER G",
+ ["lccode"]=0xFF47,
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x0047 },
+ ["unicodeslot"]=0xFF27, -- G
+ },
+ [0xFF28]={
+ ["category"]="lu",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH LATIN CAPITAL LETTER H",
+ ["lccode"]=0xFF48,
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x0048 },
+ ["unicodeslot"]=0xFF28, -- H
+ },
+ [0xFF29]={
+ ["category"]="lu",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH LATIN CAPITAL LETTER I",
+ ["lccode"]=0xFF49,
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x0049 },
+ ["unicodeslot"]=0xFF29, -- I
+ },
+ [0xFF2A]={
+ ["category"]="lu",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH LATIN CAPITAL LETTER J",
+ ["lccode"]=0xFF4A,
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x004A },
+ ["unicodeslot"]=0xFF2A, -- J
+ },
+ [0xFF2B]={
+ ["category"]="lu",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH LATIN CAPITAL LETTER K",
+ ["lccode"]=0xFF4B,
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x004B },
+ ["unicodeslot"]=0xFF2B, -- K
+ },
+ [0xFF2C]={
+ ["category"]="lu",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH LATIN CAPITAL LETTER L",
+ ["lccode"]=0xFF4C,
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x004C },
+ ["unicodeslot"]=0xFF2C, -- L
+ },
+ [0xFF2D]={
+ ["category"]="lu",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH LATIN CAPITAL LETTER M",
+ ["lccode"]=0xFF4D,
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x004D },
+ ["unicodeslot"]=0xFF2D, -- ï¼­
+ },
+ [0xFF2E]={
+ ["category"]="lu",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH LATIN CAPITAL LETTER N",
+ ["lccode"]=0xFF4E,
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x004E },
+ ["unicodeslot"]=0xFF2E, -- ï¼®
+ },
+ [0xFF2F]={
+ ["category"]="lu",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH LATIN CAPITAL LETTER O",
+ ["lccode"]=0xFF4F,
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x004F },
+ ["unicodeslot"]=0xFF2F, -- O
+ },
+ [0xFF30]={
+ ["category"]="lu",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH LATIN CAPITAL LETTER P",
+ ["lccode"]=0xFF50,
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x0050 },
+ ["unicodeslot"]=0xFF30, -- ï¼°
+ },
+ [0xFF31]={
+ ["category"]="lu",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH LATIN CAPITAL LETTER Q",
+ ["lccode"]=0xFF51,
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x0051 },
+ ["unicodeslot"]=0xFF31, -- ï¼±
+ },
+ [0xFF32]={
+ ["category"]="lu",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH LATIN CAPITAL LETTER R",
+ ["lccode"]=0xFF52,
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x0052 },
+ ["unicodeslot"]=0xFF32, -- ï¼²
+ },
+ [0xFF33]={
+ ["category"]="lu",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH LATIN CAPITAL LETTER S",
+ ["lccode"]=0xFF53,
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x0053 },
+ ["unicodeslot"]=0xFF33, -- ï¼³
+ },
+ [0xFF34]={
+ ["category"]="lu",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH LATIN CAPITAL LETTER T",
+ ["lccode"]=0xFF54,
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x0054 },
+ ["unicodeslot"]=0xFF34, -- ï¼´
+ },
+ [0xFF35]={
+ ["category"]="lu",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH LATIN CAPITAL LETTER U",
+ ["lccode"]=0xFF55,
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x0055 },
+ ["unicodeslot"]=0xFF35, -- ï¼µ
+ },
+ [0xFF36]={
+ ["category"]="lu",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH LATIN CAPITAL LETTER V",
+ ["lccode"]=0xFF56,
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x0056 },
+ ["unicodeslot"]=0xFF36, -- V
+ },
+ [0xFF37]={
+ ["category"]="lu",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH LATIN CAPITAL LETTER W",
+ ["lccode"]=0xFF57,
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x0057 },
+ ["unicodeslot"]=0xFF37, -- ï¼·
+ },
+ [0xFF38]={
+ ["category"]="lu",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH LATIN CAPITAL LETTER X",
+ ["lccode"]=0xFF58,
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x0058 },
+ ["unicodeslot"]=0xFF38, -- X
+ },
+ [0xFF39]={
+ ["category"]="lu",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH LATIN CAPITAL LETTER Y",
+ ["lccode"]=0xFF59,
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x0059 },
+ ["unicodeslot"]=0xFF39, -- ï¼¹
+ },
+ [0xFF3A]={
+ ["category"]="lu",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH LATIN CAPITAL LETTER Z",
+ ["lccode"]=0xFF5A,
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x005A },
+ ["unicodeslot"]=0xFF3A, -- Z
+ },
+ [0xFF3B]={
+ ["category"]="ps",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH LEFT SQUARE BRACKET",
+ ["linebreak"]="op",
+ ["specials"]={ "wide", 0x005B },
+ ["unicodeslot"]=0xFF3B, -- ï¼»
+ },
+ [0xFF3C]={
+ ["category"]="po",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH REVERSE SOLIDUS",
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x005C },
+ ["unicodeslot"]=0xFF3C, -- ï¼¼
+ },
+ [0xFF3D]={
+ ["category"]="pe",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH RIGHT SQUARE BRACKET",
+ ["linebreak"]="cl",
+ ["specials"]={ "wide", 0x005D },
+ ["unicodeslot"]=0xFF3D, -- ï¼½
+ },
+ [0xFF3E]={
+ ["category"]="sk",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH CIRCUMFLEX ACCENT",
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x005E },
+ ["unicodeslot"]=0xFF3E, -- ï¼¾
+ },
+ [0xFF3F]={
+ ["category"]="pc",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH LOW LINE",
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x005F },
+ ["unicodeslot"]=0xFF3F, -- _
+ },
+ [0xFF40]={
+ ["category"]="sk",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH GRAVE ACCENT",
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x0060 },
+ ["unicodeslot"]=0xFF40, -- ï½€
+ },
+ [0xFF41]={
+ ["category"]="ll",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH LATIN SMALL LETTER A",
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x0061 },
+ ["uccode"]=0xFF21,
+ ["unicodeslot"]=0xFF41, -- ï½
+ },
+ [0xFF42]={
+ ["category"]="ll",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH LATIN SMALL LETTER B",
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x0062 },
+ ["uccode"]=0xFF22,
+ ["unicodeslot"]=0xFF42, -- b
+ },
+ [0xFF43]={
+ ["category"]="ll",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH LATIN SMALL LETTER C",
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x0063 },
+ ["uccode"]=0xFF23,
+ ["unicodeslot"]=0xFF43, -- c
+ },
+ [0xFF44]={
+ ["category"]="ll",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH LATIN SMALL LETTER D",
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x0064 },
+ ["uccode"]=0xFF24,
+ ["unicodeslot"]=0xFF44, -- d
+ },
+ [0xFF45]={
+ ["category"]="ll",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH LATIN SMALL LETTER E",
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x0065 },
+ ["uccode"]=0xFF25,
+ ["unicodeslot"]=0xFF45, -- ï½…
+ },
+ [0xFF46]={
+ ["category"]="ll",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH LATIN SMALL LETTER F",
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x0066 },
+ ["uccode"]=0xFF26,
+ ["unicodeslot"]=0xFF46, -- f
+ },
+ [0xFF47]={
+ ["category"]="ll",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH LATIN SMALL LETTER G",
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x0067 },
+ ["uccode"]=0xFF27,
+ ["unicodeslot"]=0xFF47, -- g
+ },
+ [0xFF48]={
+ ["category"]="ll",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH LATIN SMALL LETTER H",
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x0068 },
+ ["uccode"]=0xFF28,
+ ["unicodeslot"]=0xFF48, -- h
+ },
+ [0xFF49]={
+ ["category"]="ll",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH LATIN SMALL LETTER I",
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x0069 },
+ ["uccode"]=0xFF29,
+ ["unicodeslot"]=0xFF49, -- i
+ },
+ [0xFF4A]={
+ ["category"]="ll",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH LATIN SMALL LETTER J",
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x006A },
+ ["uccode"]=0xFF2A,
+ ["unicodeslot"]=0xFF4A, -- j
+ },
+ [0xFF4B]={
+ ["category"]="ll",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH LATIN SMALL LETTER K",
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x006B },
+ ["uccode"]=0xFF2B,
+ ["unicodeslot"]=0xFF4B, -- k
+ },
+ [0xFF4C]={
+ ["category"]="ll",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH LATIN SMALL LETTER L",
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x006C },
+ ["uccode"]=0xFF2C,
+ ["unicodeslot"]=0xFF4C, -- l
+ },
+ [0xFF4D]={
+ ["category"]="ll",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH LATIN SMALL LETTER M",
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x006D },
+ ["uccode"]=0xFF2D,
+ ["unicodeslot"]=0xFF4D, -- ï½
+ },
+ [0xFF4E]={
+ ["category"]="ll",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH LATIN SMALL LETTER N",
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x006E },
+ ["uccode"]=0xFF2E,
+ ["unicodeslot"]=0xFF4E, -- n
+ },
+ [0xFF4F]={
+ ["category"]="ll",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH LATIN SMALL LETTER O",
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x006F },
+ ["uccode"]=0xFF2F,
+ ["unicodeslot"]=0xFF4F, -- ï½
+ },
+ [0xFF50]={
+ ["category"]="ll",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH LATIN SMALL LETTER P",
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x0070 },
+ ["uccode"]=0xFF30,
+ ["unicodeslot"]=0xFF50, -- ï½
+ },
+ [0xFF51]={
+ ["category"]="ll",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH LATIN SMALL LETTER Q",
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x0071 },
+ ["uccode"]=0xFF31,
+ ["unicodeslot"]=0xFF51, -- q
+ },
+ [0xFF52]={
+ ["category"]="ll",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH LATIN SMALL LETTER R",
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x0072 },
+ ["uccode"]=0xFF32,
+ ["unicodeslot"]=0xFF52, -- ï½’
+ },
+ [0xFF53]={
+ ["category"]="ll",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH LATIN SMALL LETTER S",
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x0073 },
+ ["uccode"]=0xFF33,
+ ["unicodeslot"]=0xFF53, -- s
+ },
+ [0xFF54]={
+ ["category"]="ll",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH LATIN SMALL LETTER T",
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x0074 },
+ ["uccode"]=0xFF34,
+ ["unicodeslot"]=0xFF54, -- ï½”
+ },
+ [0xFF55]={
+ ["category"]="ll",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH LATIN SMALL LETTER U",
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x0075 },
+ ["uccode"]=0xFF35,
+ ["unicodeslot"]=0xFF55, -- u
+ },
+ [0xFF56]={
+ ["category"]="ll",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH LATIN SMALL LETTER V",
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x0076 },
+ ["uccode"]=0xFF36,
+ ["unicodeslot"]=0xFF56, -- ï½–
+ },
+ [0xFF57]={
+ ["category"]="ll",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH LATIN SMALL LETTER W",
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x0077 },
+ ["uccode"]=0xFF37,
+ ["unicodeslot"]=0xFF57, -- ï½—
+ },
+ [0xFF58]={
+ ["category"]="ll",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH LATIN SMALL LETTER X",
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x0078 },
+ ["uccode"]=0xFF38,
+ ["unicodeslot"]=0xFF58, -- x
+ },
+ [0xFF59]={
+ ["category"]="ll",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH LATIN SMALL LETTER Y",
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x0079 },
+ ["uccode"]=0xFF39,
+ ["unicodeslot"]=0xFF59, -- ï½™
+ },
+ [0xFF5A]={
+ ["category"]="ll",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH LATIN SMALL LETTER Z",
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x007A },
+ ["uccode"]=0xFF3A,
+ ["unicodeslot"]=0xFF5A, -- z
+ },
+ [0xFF5B]={
+ ["category"]="ps",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH LEFT CURLY BRACKET",
+ ["linebreak"]="op",
+ ["specials"]={ "wide", 0x007B },
+ ["unicodeslot"]=0xFF5B, -- ï½›
+ },
+ [0xFF5C]={
+ ["category"]="sm",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH VERTICAL LINE",
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x007C },
+ ["unicodeslot"]=0xFF5C, -- |
+ },
+ [0xFF5D]={
+ ["category"]="pe",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH RIGHT CURLY BRACKET",
+ ["linebreak"]="cl",
+ ["specials"]={ "wide", 0x007D },
+ ["unicodeslot"]=0xFF5D, -- ï½
+ },
+ [0xFF5E]={
+ ["category"]="sm",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH TILDE",
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x007E },
+ ["unicodeslot"]=0xFF5E, -- ~
+ },
+ [0xFF5F]={
+ ["category"]="ps",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH LEFT WHITE PARENTHESIS",
+ ["linebreak"]="op",
+ ["specials"]={ "wide", 0x2985 },
+ ["unicodeslot"]=0xFF5F, -- ⦅
+ },
+ [0xFF60]={
+ ["category"]="pe",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH RIGHT WHITE PARENTHESIS",
+ ["linebreak"]="cl",
+ ["specials"]={ "wide", 0x2986 },
+ ["unicodeslot"]=0xFF60, -- ï½ 
+ },
+ [0xFF61]={
+ ["category"]="po",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH IDEOGRAPHIC FULL STOP",
+ ["linebreak"]="cl",
+ ["specials"]={ "narrow", 0x3002 },
+ ["unicodeslot"]=0xFF61, -- 。
+ },
+ [0xFF62]={
+ ["category"]="ps",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH LEFT CORNER BRACKET",
+ ["linebreak"]="op",
+ ["specials"]={ "narrow", 0x300C },
+ ["unicodeslot"]=0xFF62, -- ï½¢
+ },
+ [0xFF63]={
+ ["category"]="pe",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH RIGHT CORNER BRACKET",
+ ["linebreak"]="cl",
+ ["specials"]={ "narrow", 0x300D },
+ ["unicodeslot"]=0xFF63, -- ï½£
+ },
+ [0xFF64]={
+ ["category"]="po",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH IDEOGRAPHIC COMMA",
+ ["linebreak"]="cl",
+ ["specials"]={ "narrow", 0x3001 },
+ ["unicodeslot"]=0xFF64, -- 、
+ },
+ [0xFF65]={
+ ["category"]="po",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH KATAKANA MIDDLE DOT",
+ ["linebreak"]="ns",
+ ["specials"]={ "narrow", 0x30FB },
+ ["unicodeslot"]=0xFF65, -- ï½¥
+ },
+ [0xFF66]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH KATAKANA LETTER WO",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x30F2 },
+ ["unicodeslot"]=0xFF66, -- ヲ
+ },
+ [0xFF67]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH KATAKANA LETTER SMALL A",
+ ["linebreak"]="ns",
+ ["specials"]={ "narrow", 0x30A1 },
+ ["unicodeslot"]=0xFF67, -- ァ
+ },
+ [0xFF68]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH KATAKANA LETTER SMALL I",
+ ["linebreak"]="ns",
+ ["specials"]={ "narrow", 0x30A3 },
+ ["unicodeslot"]=0xFF68, -- ィ
+ },
+ [0xFF69]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH KATAKANA LETTER SMALL U",
+ ["linebreak"]="ns",
+ ["specials"]={ "narrow", 0x30A5 },
+ ["unicodeslot"]=0xFF69, -- ゥ
+ },
+ [0xFF6A]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH KATAKANA LETTER SMALL E",
+ ["linebreak"]="ns",
+ ["specials"]={ "narrow", 0x30A7 },
+ ["unicodeslot"]=0xFF6A, -- ェ
+ },
+ [0xFF6B]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH KATAKANA LETTER SMALL O",
+ ["linebreak"]="ns",
+ ["specials"]={ "narrow", 0x30A9 },
+ ["unicodeslot"]=0xFF6B, -- ォ
+ },
+ [0xFF6C]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH KATAKANA LETTER SMALL YA",
+ ["linebreak"]="ns",
+ ["specials"]={ "narrow", 0x30E3 },
+ ["unicodeslot"]=0xFF6C, -- ャ
+ },
+ [0xFF6D]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH KATAKANA LETTER SMALL YU",
+ ["linebreak"]="ns",
+ ["specials"]={ "narrow", 0x30E5 },
+ ["unicodeslot"]=0xFF6D, -- ï½­
+ },
+ [0xFF6E]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH KATAKANA LETTER SMALL YO",
+ ["linebreak"]="ns",
+ ["specials"]={ "narrow", 0x30E7 },
+ ["unicodeslot"]=0xFF6E, -- ï½®
+ },
+ [0xFF6F]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH KATAKANA LETTER SMALL TU",
+ ["linebreak"]="ns",
+ ["specials"]={ "narrow", 0x30C3 },
+ ["unicodeslot"]=0xFF6F, -- ッ
+ },
+ [0xFF70]={
+ ["category"]="lm",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK",
+ ["linebreak"]="ns",
+ ["specials"]={ "narrow", 0x30FC },
+ ["unicodeslot"]=0xFF70, -- ï½°
+ },
+ [0xFF71]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH KATAKANA LETTER A",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x30A2 },
+ ["unicodeslot"]=0xFF71, -- ï½±
+ },
+ [0xFF72]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH KATAKANA LETTER I",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x30A4 },
+ ["unicodeslot"]=0xFF72, -- ï½²
+ },
+ [0xFF73]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH KATAKANA LETTER U",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x30A6 },
+ ["unicodeslot"]=0xFF73, -- ï½³
+ },
+ [0xFF74]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH KATAKANA LETTER E",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x30A8 },
+ ["unicodeslot"]=0xFF74, -- ï½´
+ },
+ [0xFF75]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH KATAKANA LETTER O",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x30AA },
+ ["unicodeslot"]=0xFF75, -- ï½µ
+ },
+ [0xFF76]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH KATAKANA LETTER KA",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x30AB },
+ ["unicodeslot"]=0xFF76, -- カ
+ },
+ [0xFF77]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH KATAKANA LETTER KI",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x30AD },
+ ["unicodeslot"]=0xFF77, -- ï½·
+ },
+ [0xFF78]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH KATAKANA LETTER KU",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x30AF },
+ ["unicodeslot"]=0xFF78, -- ク
+ },
+ [0xFF79]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH KATAKANA LETTER KE",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x30B1 },
+ ["unicodeslot"]=0xFF79, -- ï½¹
+ },
+ [0xFF7A]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH KATAKANA LETTER KO",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x30B3 },
+ ["unicodeslot"]=0xFF7A, -- コ
+ },
+ [0xFF7B]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH KATAKANA LETTER SA",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x30B5 },
+ ["unicodeslot"]=0xFF7B, -- ï½»
+ },
+ [0xFF7C]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH KATAKANA LETTER SI",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x30B7 },
+ ["unicodeslot"]=0xFF7C, -- ï½¼
+ },
+ [0xFF7D]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH KATAKANA LETTER SU",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x30B9 },
+ ["unicodeslot"]=0xFF7D, -- ï½½
+ },
+ [0xFF7E]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH KATAKANA LETTER SE",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x30BB },
+ ["unicodeslot"]=0xFF7E, -- ï½¾
+ },
+ [0xFF7F]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH KATAKANA LETTER SO",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x30BD },
+ ["unicodeslot"]=0xFF7F, -- ソ
+ },
+ [0xFF80]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH KATAKANA LETTER TA",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x30BF },
+ ["unicodeslot"]=0xFF80, -- ï¾€
+ },
+ [0xFF81]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH KATAKANA LETTER TI",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x30C1 },
+ ["unicodeslot"]=0xFF81, -- ï¾
+ },
+ [0xFF82]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH KATAKANA LETTER TU",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x30C4 },
+ ["unicodeslot"]=0xFF82, -- ツ
+ },
+ [0xFF83]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH KATAKANA LETTER TE",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x30C6 },
+ ["unicodeslot"]=0xFF83, -- テ
+ },
+ [0xFF84]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH KATAKANA LETTER TO",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x30C8 },
+ ["unicodeslot"]=0xFF84, -- ト
+ },
+ [0xFF85]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH KATAKANA LETTER NA",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x30CA },
+ ["unicodeslot"]=0xFF85, -- ï¾…
+ },
+ [0xFF86]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH KATAKANA LETTER NI",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x30CB },
+ ["unicodeslot"]=0xFF86, -- ニ
+ },
+ [0xFF87]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH KATAKANA LETTER NU",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x30CC },
+ ["unicodeslot"]=0xFF87, -- ヌ
+ },
+ [0xFF88]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH KATAKANA LETTER NE",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x30CD },
+ ["unicodeslot"]=0xFF88, -- ネ
+ },
+ [0xFF89]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH KATAKANA LETTER NO",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x30CE },
+ ["unicodeslot"]=0xFF89, -- ノ
+ },
+ [0xFF8A]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH KATAKANA LETTER HA",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x30CF },
+ ["unicodeslot"]=0xFF8A, -- ハ
+ },
+ [0xFF8B]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH KATAKANA LETTER HI",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x30D2 },
+ ["unicodeslot"]=0xFF8B, -- ヒ
+ },
+ [0xFF8C]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH KATAKANA LETTER HU",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x30D5 },
+ ["unicodeslot"]=0xFF8C, -- フ
+ },
+ [0xFF8D]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH KATAKANA LETTER HE",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x30D8 },
+ ["unicodeslot"]=0xFF8D, -- ï¾
+ },
+ [0xFF8E]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH KATAKANA LETTER HO",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x30DB },
+ ["unicodeslot"]=0xFF8E, -- ホ
+ },
+ [0xFF8F]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH KATAKANA LETTER MA",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x30DE },
+ ["unicodeslot"]=0xFF8F, -- ï¾
+ },
+ [0xFF90]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH KATAKANA LETTER MI",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x30DF },
+ ["unicodeslot"]=0xFF90, -- ï¾
+ },
+ [0xFF91]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH KATAKANA LETTER MU",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x30E0 },
+ ["unicodeslot"]=0xFF91, -- ム
+ },
+ [0xFF92]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH KATAKANA LETTER ME",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x30E1 },
+ ["unicodeslot"]=0xFF92, -- ï¾’
+ },
+ [0xFF93]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH KATAKANA LETTER MO",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x30E2 },
+ ["unicodeslot"]=0xFF93, -- モ
+ },
+ [0xFF94]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH KATAKANA LETTER YA",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x30E4 },
+ ["unicodeslot"]=0xFF94, -- ï¾”
+ },
+ [0xFF95]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH KATAKANA LETTER YU",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x30E6 },
+ ["unicodeslot"]=0xFF95, -- ユ
+ },
+ [0xFF96]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH KATAKANA LETTER YO",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x30E8 },
+ ["unicodeslot"]=0xFF96, -- ï¾–
+ },
+ [0xFF97]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH KATAKANA LETTER RA",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x30E9 },
+ ["unicodeslot"]=0xFF97, -- ï¾—
+ },
+ [0xFF98]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH KATAKANA LETTER RI",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x30EA },
+ ["unicodeslot"]=0xFF98, -- リ
+ },
+ [0xFF99]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH KATAKANA LETTER RU",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x30EB },
+ ["unicodeslot"]=0xFF99, -- ï¾™
+ },
+ [0xFF9A]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH KATAKANA LETTER RE",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x30EC },
+ ["unicodeslot"]=0xFF9A, -- レ
+ },
+ [0xFF9B]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH KATAKANA LETTER RO",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x30ED },
+ ["unicodeslot"]=0xFF9B, -- ï¾›
+ },
+ [0xFF9C]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH KATAKANA LETTER WA",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x30EF },
+ ["unicodeslot"]=0xFF9C, -- ワ
+ },
+ [0xFF9D]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH KATAKANA LETTER N",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x30F3 },
+ ["unicodeslot"]=0xFF9D, -- ï¾
+ },
+ [0xFF9E]={
+ ["category"]="lm",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH KATAKANA VOICED SOUND MARK",
+ ["linebreak"]="ns",
+ ["specials"]={ "narrow", 0x3099 },
+ ["unicodeslot"]=0xFF9E, -- ゙
+ },
+ [0xFF9F]={
+ ["category"]="lm",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK",
+ ["linebreak"]="ns",
+ ["specials"]={ "narrow", 0x309A },
+ ["unicodeslot"]=0xFF9F, -- ゚
+ },
+ [0xFFA0]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH HANGUL FILLER",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x3164 },
+ ["unicodeslot"]=0xFFA0, -- ï¾ 
+ },
+ [0xFFA1]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH HANGUL LETTER KIYEOK",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x3131 },
+ ["unicodeslot"]=0xFFA1, -- ᄀ
+ },
+ [0xFFA2]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH HANGUL LETTER SSANGKIYEOK",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x3132 },
+ ["unicodeslot"]=0xFFA2, -- ï¾¢
+ },
+ [0xFFA3]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH HANGUL LETTER KIYEOK-SIOS",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x3133 },
+ ["unicodeslot"]=0xFFA3, -- ï¾£
+ },
+ [0xFFA4]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH HANGUL LETTER NIEUN",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x3134 },
+ ["unicodeslot"]=0xFFA4, -- ᄂ
+ },
+ [0xFFA5]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH HANGUL LETTER NIEUN-CIEUC",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x3135 },
+ ["unicodeslot"]=0xFFA5, -- ï¾¥
+ },
+ [0xFFA6]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH HANGUL LETTER NIEUN-HIEUH",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x3136 },
+ ["unicodeslot"]=0xFFA6, -- ᆭ
+ },
+ [0xFFA7]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH HANGUL LETTER TIKEUT",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x3137 },
+ ["unicodeslot"]=0xFFA7, -- ᄃ
+ },
+ [0xFFA8]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH HANGUL LETTER SSANGTIKEUT",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x3138 },
+ ["unicodeslot"]=0xFFA8, -- ᄄ
+ },
+ [0xFFA9]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH HANGUL LETTER RIEUL",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x3139 },
+ ["unicodeslot"]=0xFFA9, -- ᄅ
+ },
+ [0xFFAA]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH HANGUL LETTER RIEUL-KIYEOK",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x313A },
+ ["unicodeslot"]=0xFFAA, -- ᆰ
+ },
+ [0xFFAB]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH HANGUL LETTER RIEUL-MIEUM",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x313B },
+ ["unicodeslot"]=0xFFAB, -- ᆱ
+ },
+ [0xFFAC]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH HANGUL LETTER RIEUL-PIEUP",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x313C },
+ ["unicodeslot"]=0xFFAC, -- ᆲ
+ },
+ [0xFFAD]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH HANGUL LETTER RIEUL-SIOS",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x313D },
+ ["unicodeslot"]=0xFFAD, -- ï¾­
+ },
+ [0xFFAE]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH HANGUL LETTER RIEUL-THIEUTH",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x313E },
+ ["unicodeslot"]=0xFFAE, -- ï¾®
+ },
+ [0xFFAF]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x313F },
+ ["unicodeslot"]=0xFFAF, -- ᆵ
+ },
+ [0xFFB0]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH HANGUL LETTER RIEUL-HIEUH",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x3140 },
+ ["unicodeslot"]=0xFFB0, -- ï¾°
+ },
+ [0xFFB1]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH HANGUL LETTER MIEUM",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x3141 },
+ ["unicodeslot"]=0xFFB1, -- ï¾±
+ },
+ [0xFFB2]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH HANGUL LETTER PIEUP",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x3142 },
+ ["unicodeslot"]=0xFFB2, -- ï¾²
+ },
+ [0xFFB3]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH HANGUL LETTER SSANGPIEUP",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x3143 },
+ ["unicodeslot"]=0xFFB3, -- ï¾³
+ },
+ [0xFFB4]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH HANGUL LETTER PIEUP-SIOS",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x3144 },
+ ["unicodeslot"]=0xFFB4, -- ï¾´
+ },
+ [0xFFB5]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH HANGUL LETTER SIOS",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x3145 },
+ ["unicodeslot"]=0xFFB5, -- ï¾µ
+ },
+ [0xFFB6]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH HANGUL LETTER SSANGSIOS",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x3146 },
+ ["unicodeslot"]=0xFFB6, -- ᄊ
+ },
+ [0xFFB7]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH HANGUL LETTER IEUNG",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x3147 },
+ ["unicodeslot"]=0xFFB7, -- ï¾·
+ },
+ [0xFFB8]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH HANGUL LETTER CIEUC",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x3148 },
+ ["unicodeslot"]=0xFFB8, -- ᄌ
+ },
+ [0xFFB9]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH HANGUL LETTER SSANGCIEUC",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x3149 },
+ ["unicodeslot"]=0xFFB9, -- ï¾¹
+ },
+ [0xFFBA]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH HANGUL LETTER CHIEUCH",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x314A },
+ ["unicodeslot"]=0xFFBA, -- ᄎ
+ },
+ [0xFFBB]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH HANGUL LETTER KHIEUKH",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x314B },
+ ["unicodeslot"]=0xFFBB, -- ï¾»
+ },
+ [0xFFBC]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH HANGUL LETTER THIEUTH",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x314C },
+ ["unicodeslot"]=0xFFBC, -- ï¾¼
+ },
+ [0xFFBD]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH HANGUL LETTER PHIEUPH",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x314D },
+ ["unicodeslot"]=0xFFBD, -- ï¾½
+ },
+ [0xFFBE]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH HANGUL LETTER HIEUH",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x314E },
+ ["unicodeslot"]=0xFFBE, -- ï¾¾
+ },
+ [0xFFC2]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH HANGUL LETTER A",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x314F },
+ ["unicodeslot"]=0xFFC2, -- ï¿‚
+ },
+ [0xFFC3]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH HANGUL LETTER AE",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x3150 },
+ ["unicodeslot"]=0xFFC3, -- ᅢ
+ },
+ [0xFFC4]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH HANGUL LETTER YA",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x3151 },
+ ["unicodeslot"]=0xFFC4, -- ï¿„
+ },
+ [0xFFC5]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH HANGUL LETTER YAE",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x3152 },
+ ["unicodeslot"]=0xFFC5, -- ï¿…
+ },
+ [0xFFC6]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH HANGUL LETTER EO",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x3153 },
+ ["unicodeslot"]=0xFFC6, -- ᅥ
+ },
+ [0xFFC7]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH HANGUL LETTER E",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x3154 },
+ ["unicodeslot"]=0xFFC7, -- ᅦ
+ },
+ [0xFFCA]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH HANGUL LETTER YEO",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x3155 },
+ ["unicodeslot"]=0xFFCA, -- ï¿Š
+ },
+ [0xFFCB]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH HANGUL LETTER YE",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x3156 },
+ ["unicodeslot"]=0xFFCB, -- ï¿‹
+ },
+ [0xFFCC]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH HANGUL LETTER O",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x3157 },
+ ["unicodeslot"]=0xFFCC, -- ᅩ
+ },
+ [0xFFCD]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH HANGUL LETTER WA",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x3158 },
+ ["unicodeslot"]=0xFFCD, -- ï¿
+ },
+ [0xFFCE]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH HANGUL LETTER WAE",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x3159 },
+ ["unicodeslot"]=0xFFCE, -- ï¿Ž
+ },
+ [0xFFCF]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH HANGUL LETTER OE",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x315A },
+ ["unicodeslot"]=0xFFCF, -- ï¿
+ },
+ [0xFFD2]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH HANGUL LETTER YO",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x315B },
+ ["unicodeslot"]=0xFFD2, -- ï¿’
+ },
+ [0xFFD3]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH HANGUL LETTER U",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x315C },
+ ["unicodeslot"]=0xFFD3, -- ï¿“
+ },
+ [0xFFD4]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH HANGUL LETTER WEO",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x315D },
+ ["unicodeslot"]=0xFFD4, -- ï¿”
+ },
+ [0xFFD5]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH HANGUL LETTER WE",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x315E },
+ ["unicodeslot"]=0xFFD5, -- ï¿•
+ },
+ [0xFFD6]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH HANGUL LETTER WI",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x315F },
+ ["unicodeslot"]=0xFFD6, -- ï¿–
+ },
+ [0xFFD7]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH HANGUL LETTER YU",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x3160 },
+ ["unicodeslot"]=0xFFD7, -- ï¿—
+ },
+ [0xFFDA]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH HANGUL LETTER EU",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x3161 },
+ ["unicodeslot"]=0xFFDA, -- ï¿š
+ },
+ [0xFFDB]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH HANGUL LETTER YI",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x3162 },
+ ["unicodeslot"]=0xFFDB, -- ï¿›
+ },
+ [0xFFDC]={
+ ["category"]="lo",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH HANGUL LETTER I",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x3163 },
+ ["unicodeslot"]=0xFFDC, -- ᅵ
+ },
+ [0xFFE0]={
+ ["category"]="sc",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH CENT SIGN",
+ ["linebreak"]="po",
+ ["specials"]={ "wide", 0x00A2 },
+ ["unicodeslot"]=0xFFE0, -- ï¿ 
+ },
+ [0xFFE1]={
+ ["category"]="sc",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH POUND SIGN",
+ ["linebreak"]="pr",
+ ["specials"]={ "wide", 0x00A3 },
+ ["unicodeslot"]=0xFFE1, -- ï¿¡
+ },
+ [0xFFE2]={
+ ["category"]="sm",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH NOT SIGN",
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x00AC },
+ ["unicodeslot"]=0xFFE2, -- ï¿¢
+ },
+ [0xFFE3]={
+ ["category"]="sk",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH MACRON",
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x00AF },
+ ["unicodeslot"]=0xFFE3, -- ï¿£
+ },
+ [0xFFE4]={
+ ["category"]="so",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH BROKEN BAR",
+ ["linebreak"]="id",
+ ["specials"]={ "wide", 0x00A6 },
+ ["unicodeslot"]=0xFFE4, -- ¦
+ },
+ [0xFFE5]={
+ ["category"]="sc",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH YEN SIGN",
+ ["linebreak"]="pr",
+ ["specials"]={ "wide", 0x00A5 },
+ ["unicodeslot"]=0xFFE5, -- ï¿¥
+ },
+ [0xFFE6]={
+ ["category"]="sc",
+ ["cjkwd"]="f",
+ ["description"]="FULLWIDTH WON SIGN",
+ ["linebreak"]="pr",
+ ["specials"]={ "wide", 0x20A9 },
+ ["unicodeslot"]=0xFFE6, -- ₩
+ },
+ [0xFFE8]={
+ ["category"]="so",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH FORMS LIGHT VERTICAL",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x2502 },
+ ["unicodeslot"]=0xFFE8, -- │
+ },
+ [0xFFE9]={
+ ["category"]="sm",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH LEFTWARDS ARROW",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x2190 },
+ ["unicodeslot"]=0xFFE9, -- ï¿©
+ },
+ [0xFFEA]={
+ ["category"]="sm",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH UPWARDS ARROW",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x2191 },
+ ["unicodeslot"]=0xFFEA, -- ↑
+ },
+ [0xFFEB]={
+ ["category"]="sm",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH RIGHTWARDS ARROW",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x2192 },
+ ["unicodeslot"]=0xFFEB, -- ï¿«
+ },
+ [0xFFEC]={
+ ["category"]="sm",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH DOWNWARDS ARROW",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x2193 },
+ ["unicodeslot"]=0xFFEC, -- ↓
+ },
+ [0xFFED]={
+ ["category"]="so",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH BLACK SQUARE",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x25A0 },
+ ["unicodeslot"]=0xFFED, -- ï¿­
+ },
+ [0xFFEE]={
+ ["category"]="so",
+ ["cjkwd"]="h",
+ ["description"]="HALFWIDTH WHITE CIRCLE",
+ ["linebreak"]="al",
+ ["specials"]={ "narrow", 0x25CB },
+ ["unicodeslot"]=0xFFEE, -- ï¿®
+ },
+ [0xFFF9]={
+ ["category"]="cf",
+ ["description"]="INTERLINEAR ANNOTATION ANCHOR",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xFFF9, -- 
+ },
+ [0xFFFA]={
+ ["category"]="cf",
+ ["description"]="INTERLINEAR ANNOTATION SEPARATOR",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xFFFA, -- 
+ },
+ [0xFFFB]={
+ ["category"]="cf",
+ ["description"]="INTERLINEAR ANNOTATION TERMINATOR",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xFFFB, -- ï¿»
+ },
+ [0xFFFC]={
+ ["category"]="so",
+ ["description"]="OBJECT REPLACEMENT CHARACTER",
+ ["linebreak"]="cb",
+ ["unicodeslot"]=0xFFFC, -- 
+ },
+ [0xFFFD]={
+ ["category"]="so",
+ ["cjkwd"]="a",
+ ["description"]="REPLACEMENT CHARACTER",
+ ["linebreak"]="ai",
+ ["unicodeslot"]=0xFFFD, -- �
+ },
+ [0x10000]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x0008 A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10000, -- ð€€
+ },
+ [0x10001]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x0026 E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10001, -- ð€
+ },
+ [0x10002]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x001C I",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10002, -- ð€‚
+ },
+ [0x10003]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x003D O",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10003, -- ð€ƒ
+ },
+ [0x10004]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x000A U",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10004, -- ð€„
+ },
+ [0x10005]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x0001 DA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10005, -- ð€…
+ },
+ [0x10006]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x002D DE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10006, -- ð€†
+ },
+ [0x10007]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x0007 DI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10007, -- ð€‡
+ },
+ [0x10008]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x000E DO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10008, -- ð€ˆ
+ },
+ [0x10009]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x0033 DU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10009, -- ð€‰
+ },
+ [0x1000A]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x0039 JA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1000A, -- ð€Š
+ },
+ [0x1000B]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x002E JE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1000B, -- ð€‹
+ },
+ [0x1000D]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x0024 JO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1000D, -- ð€
+ },
+ [0x1000E]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x0041 JU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1000E, -- ð€Ž
+ },
+ [0x1000F]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x004D KA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1000F, -- ð€
+ },
+ [0x10010]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x002C KE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10010, -- ð€
+ },
+ [0x10011]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x0043 KI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10011, -- ð€‘
+ },
+ [0x10012]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x0046 KO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10012, -- ð€’
+ },
+ [0x10013]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x0051 KU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10013, -- ð€“
+ },
+ [0x10014]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x0050 MA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10014, -- ð€”
+ },
+ [0x10015]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x000D ME",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10015, -- ð€•
+ },
+ [0x10016]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x0049 MI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10016, -- ð€–
+ },
+ [0x10017]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x000F MO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10017, -- ð€—
+ },
+ [0x10018]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x0017 MU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10018, -- ð€˜
+ },
+ [0x10019]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x0006 NA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10019, -- ð€™
+ },
+ [0x1001A]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x0018 NE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1001A, -- ð€š
+ },
+ [0x1001B]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x001E NI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1001B, -- ð€›
+ },
+ [0x1001C]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x0034 NO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1001C, -- ð€œ
+ },
+ [0x1001D]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x0037 NU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1001D, -- ð€
+ },
+ [0x1001E]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x0003 PA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1001E, -- ð€ž
+ },
+ [0x1001F]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x0048 PE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1001F, -- ð€Ÿ
+ },
+ [0x10020]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x0027 PI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10020, -- ð€ 
+ },
+ [0x10021]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x000B PO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10021, -- ð€¡
+ },
+ [0x10022]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x0032 PU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10022, -- ð€¢
+ },
+ [0x10023]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x0010 QA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10023, -- ð€£
+ },
+ [0x10024]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x004E QE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10024, -- ð€¤
+ },
+ [0x10025]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x0015 QI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10025, -- ð€¥
+ },
+ [0x10026]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x0020 QO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10026, -- ð€¦
+ },
+ [0x10028]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x003C RA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10028, -- ð€¨
+ },
+ [0x10029]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x001B RE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10029, -- ð€©
+ },
+ [0x1002A]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x0035 RI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1002A, -- ð€ª
+ },
+ [0x1002B]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x0002 RO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1002B, -- ð€«
+ },
+ [0x1002C]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x001A RU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1002C, -- ð€¬
+ },
+ [0x1002D]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x001F SA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1002D, -- ð€­
+ },
+ [0x1002E]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x0009 SE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1002E, -- ð€®
+ },
+ [0x1002F]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x0029 SI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1002F, -- ð€¯
+ },
+ [0x10030]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x000C SO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10030, -- ð€°
+ },
+ [0x10031]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x003A SU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10031, -- ð€±
+ },
+ [0x10032]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x003B TA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10032, -- ð€²
+ },
+ [0x10033]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x0004 TE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10033, -- ð€³
+ },
+ [0x10034]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x0025 TI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10034, -- ð€´
+ },
+ [0x10035]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x0005 TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10035, -- ð€µ
+ },
+ [0x10036]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x0045 TU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10036, -- ð€¶
+ },
+ [0x10037]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x0036 WA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10037, -- ð€·
+ },
+ [0x10038]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x004B WE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10038, -- ð€¸
+ },
+ [0x10039]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x0028 WI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10039, -- ð€¹
+ },
+ [0x1003A]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x002A WO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1003A, -- ð€º
+ },
+ [0x1003C]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x0011 ZA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1003C, -- ð€¼
+ },
+ [0x1003D]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x004A ZE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1003D, -- ð€½
+ },
+ [0x1003F]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x0014 ZO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1003F, -- ð€¿
+ },
+ [0x10040]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x0019 A0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10040, -- ð€
+ },
+ [0x10041]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x002B A0x0003",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10041, -- ð
+ },
+ [0x10042]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x0055 AU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10042, -- ð‚
+ },
+ [0x10043]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x0047 DWE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10043, -- ðƒ
+ },
+ [0x10044]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x005A DWO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10044, -- ð„
+ },
+ [0x10045]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x0030 NWA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10045, -- ð…
+ },
+ [0x10046]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x001D PU0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10046, -- ð†
+ },
+ [0x10047]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x003E PTE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10047, -- ð‡
+ },
+ [0x10048]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x004C RA0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10048, -- ðˆ
+ },
+ [0x10049]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x0021 RA0x0003",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10049, -- ð‰
+ },
+ [0x1004A]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x0044 RO0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1004A, -- ðŠ
+ },
+ [0x1004B]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x0042 TA0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1004B, -- ð‹
+ },
+ [0x1004C]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x0057 TWE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1004C, -- ðŒ
+ },
+ [0x1004D]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYLLABLE B0x005B TWO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1004D, -- ð
+ },
+ [0x10050]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYMBOL B0x0012",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10050, -- ð
+ },
+ [0x10051]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYMBOL B0x0013",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10051, -- ð‘
+ },
+ [0x10052]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYMBOL B0x0016",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10052, -- ð’
+ },
+ [0x10053]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYMBOL B0x0022",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10053, -- ð“
+ },
+ [0x10054]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYMBOL B0x002F",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10054, -- ð”
+ },
+ [0x10055]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYMBOL B0x0031",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10055, -- ð•
+ },
+ [0x10056]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYMBOL B0x0038",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10056, -- ð–
+ },
+ [0x10057]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYMBOL B0x003F",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10057, -- ð—
+ },
+ [0x10058]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYMBOL B0x0040",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10058, -- ð˜
+ },
+ [0x10059]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYMBOL B0x004F",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10059, -- ð™
+ },
+ [0x1005A]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYMBOL B0x0052",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1005A, -- ðš
+ },
+ [0x1005B]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYMBOL B0x0053",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1005B, -- ð›
+ },
+ [0x1005C]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYMBOL B0x0056",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1005C, -- ðœ
+ },
+ [0x1005D]={
+ ["category"]="lo",
+ ["description"]="LINEAR B SYMBOL B0x0059",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1005D, -- ð
+ },
+ [0x10080]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x0064 MAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10080, -- ð‚€
+ },
+ [0x10081]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x0066 WOMAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10081, -- ð‚
+ },
+ [0x10082]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x0068 DEER",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10082, -- ð‚‚
+ },
+ [0x10083]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x0069 EQUID",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10083, -- ð‚ƒ
+ },
+ [0x10084]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x0069F MARE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10084, -- ð‚„
+ },
+ [0x10085]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x0069M STALLION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10085, -- ð‚…
+ },
+ [0x10086]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x006AF EWE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10086, -- ð‚†
+ },
+ [0x10087]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x006AM RAM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10087, -- ð‚‡
+ },
+ [0x10088]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x006BF SHE-GOAT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10088, -- ð‚ˆ
+ },
+ [0x10089]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x006BM HE-GOAT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10089, -- ð‚‰
+ },
+ [0x1008A]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x006CF SOW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1008A, -- ð‚Š
+ },
+ [0x1008B]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x006CM BOAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1008B, -- ð‚‹
+ },
+ [0x1008C]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x006DF COW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1008C, -- ð‚Œ
+ },
+ [0x1008D]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x006DM BULL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1008D, -- ð‚
+ },
+ [0x1008E]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x0078 WHEAT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1008E, -- ð‚Ž
+ },
+ [0x1008F]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x0079 BARLEY",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1008F, -- ð‚
+ },
+ [0x10090]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x007A OLIVE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10090, -- ð‚
+ },
+ [0x10091]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x007B SPICE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10091, -- ð‚‘
+ },
+ [0x10092]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x007D CYPERUS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10092, -- ð‚’
+ },
+ [0x10093]={
+ ["category"]="lo",
+ ["description"]="LINEAR B MONOGRAM B0x007F KAPO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10093, -- ð‚“
+ },
+ [0x10094]={
+ ["category"]="lo",
+ ["description"]="LINEAR B MONOGRAM B0x0080 KANAKO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10094, -- ð‚”
+ },
+ [0x10095]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x0082 OIL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10095, -- ð‚•
+ },
+ [0x10096]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x0083 WINE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10096, -- ð‚–
+ },
+ [0x10097]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x0084",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10097, -- ð‚—
+ },
+ [0x10098]={
+ ["category"]="lo",
+ ["description"]="LINEAR B MONOGRAM B0x0085 AREPA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10098, -- ð‚˜
+ },
+ [0x10099]={
+ ["category"]="lo",
+ ["description"]="LINEAR B MONOGRAM B0x0087 MERI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10099, -- ð‚™
+ },
+ [0x1009A]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x008C BRONZE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1009A, -- ð‚š
+ },
+ [0x1009B]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x008D GOLD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1009B, -- ð‚›
+ },
+ [0x1009C]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x008E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1009C, -- ð‚œ
+ },
+ [0x1009D]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x0091 WOOL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1009D, -- ð‚
+ },
+ [0x1009E]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x0092",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1009E, -- ð‚ž
+ },
+ [0x1009F]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x0096",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1009F, -- ð‚Ÿ
+ },
+ [0x100A0]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x0097 HORN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100A0, -- ð‚ 
+ },
+ [0x100A1]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x0098",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100A1, -- ð‚¡
+ },
+ [0x100A2]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x0099",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100A2, -- ð‚¢
+ },
+ [0x100A3]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x009A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100A3, -- ð‚£
+ },
+ [0x100A4]={
+ ["category"]="lo",
+ ["description"]="LINEAR B MONOGRAM B0x009C TURO0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100A4, -- ð‚¤
+ },
+ [0x100A5]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x009D",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100A5, -- ð‚¥
+ },
+ [0x100A6]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x009E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100A6, -- ð‚¦
+ },
+ [0x100A7]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x009F CLOTH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100A7, -- ð‚§
+ },
+ [0x100A8]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x00A0",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100A8, -- ð‚¨
+ },
+ [0x100A9]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x00A1",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100A9, -- ð‚©
+ },
+ [0x100AA]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x00A2 GARMENT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100AA, -- ð‚ª
+ },
+ [0x100AB]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x00A3 ARMOUR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100AB, -- ð‚«
+ },
+ [0x100AC]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x00A4",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100AC, -- ð‚¬
+ },
+ [0x100AD]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x00A5",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100AD, -- ð‚­
+ },
+ [0x100AE]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x00A6",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100AE, -- ð‚®
+ },
+ [0x100AF]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x00A7",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100AF, -- ð‚¯
+ },
+ [0x100B0]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x00A8",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100B0, -- ð‚°
+ },
+ [0x100B1]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x00A9",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100B1, -- ð‚±
+ },
+ [0x100B2]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x00AA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100B2, -- ð‚²
+ },
+ [0x100B3]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x00AB",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100B3, -- ð‚³
+ },
+ [0x100B4]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x00AC",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100B4, -- ð‚´
+ },
+ [0x100B5]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x00AD MONTH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100B5, -- ð‚µ
+ },
+ [0x100B6]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x00AE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100B6, -- ð‚¶
+ },
+ [0x100B7]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x00B0 TREE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100B7, -- ð‚·
+ },
+ [0x100B8]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x00B1",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100B8, -- ð‚¸
+ },
+ [0x100B9]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x00B2",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100B9, -- ð‚¹
+ },
+ [0x100BA]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x00B3",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100BA, -- ð‚º
+ },
+ [0x100BB]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x00B4",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100BB, -- ð‚»
+ },
+ [0x100BC]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x00B5",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100BC, -- ð‚¼
+ },
+ [0x100BD]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x00B6",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100BD, -- ð‚½
+ },
+ [0x100BE]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x00B7",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100BE, -- ð‚¾
+ },
+ [0x100BF]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x00B8",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100BF, -- ð‚¿
+ },
+ [0x100C0]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x00B9",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100C0, -- ðƒ€
+ },
+ [0x100C1]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x00BD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100C1, -- ðƒ
+ },
+ [0x100C2]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x00BE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100C2, -- ðƒ‚
+ },
+ [0x100C3]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x00BF HELMET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100C3, -- ðƒƒ
+ },
+ [0x100C4]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x00DC FOOTSTOOL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100C4, -- ðƒ„
+ },
+ [0x100C5]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x00E1 BATHTUB",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100C5, -- ðƒ…
+ },
+ [0x100C6]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x00E6 SPEAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100C6, -- ðƒ†
+ },
+ [0x100C7]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x00E7 ARROW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100C7, -- ðƒ‡
+ },
+ [0x100C8]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x00E8",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100C8, -- ðƒˆ
+ },
+ [0x100C9]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x00E9 SWORD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100C9, -- ðƒ‰
+ },
+ [0x100CA]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x00EA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100CA, -- ðƒŠ
+ },
+ [0x100CB]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x00EC",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100CB, -- ðƒ‹
+ },
+ [0x100CC]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x00F0 WHEELED CHARIOT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100CC, -- ðƒŒ
+ },
+ [0x100CD]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x00F1 CHARIOT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100CD, -- ðƒ
+ },
+ [0x100CE]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x00F2 CHARIOT FRAME",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100CE, -- ðƒŽ
+ },
+ [0x100CF]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x00F3 WHEEL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100CF, -- ðƒ
+ },
+ [0x100D0]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x00F5",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100D0, -- ðƒ
+ },
+ [0x100D1]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x00F6",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100D1, -- ðƒ‘
+ },
+ [0x100D2]={
+ ["category"]="lo",
+ ["description"]="LINEAR B MONOGRAM B0x00F7 DIPTE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100D2, -- ðƒ’
+ },
+ [0x100D3]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x00F8",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100D3, -- ðƒ“
+ },
+ [0x100D4]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x00F9",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100D4, -- ðƒ”
+ },
+ [0x100D5]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x00FB",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100D5, -- ðƒ•
+ },
+ [0x100D6]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x00FC",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100D6, -- ðƒ–
+ },
+ [0x100D7]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x00FD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100D7, -- ðƒ—
+ },
+ [0x100D8]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x00FE DART",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100D8, -- ðƒ˜
+ },
+ [0x100D9]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x00FF",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100D9, -- ðƒ™
+ },
+ [0x100DA]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x0100",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100DA, -- ðƒš
+ },
+ [0x100DB]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x0101",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100DB, -- ðƒ›
+ },
+ [0x100DC]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x0102",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100DC, -- ðƒœ
+ },
+ [0x100DD]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM B0x0103",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100DD, -- ðƒ
+ },
+ [0x100DE]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM VESSEL B0x009B",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100DE, -- ðƒž
+ },
+ [0x100DF]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM VESSEL B0x00C8",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100DF, -- ðƒŸ
+ },
+ [0x100E0]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM VESSEL B0x00C9",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100E0, -- ðƒ 
+ },
+ [0x100E1]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM VESSEL B0x00CA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100E1, -- ðƒ¡
+ },
+ [0x100E2]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM VESSEL B0x00CB",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100E2, -- ðƒ¢
+ },
+ [0x100E3]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM VESSEL B0x00CC",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100E3, -- ðƒ£
+ },
+ [0x100E4]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM VESSEL B0x00CD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100E4, -- ðƒ¤
+ },
+ [0x100E5]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM VESSEL B0x00CE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100E5, -- ðƒ¥
+ },
+ [0x100E6]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM VESSEL B0x00CF",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100E6, -- ðƒ¦
+ },
+ [0x100E7]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM VESSEL B0x00D0",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100E7, -- ðƒ§
+ },
+ [0x100E8]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM VESSEL B0x00D1",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100E8, -- ðƒ¨
+ },
+ [0x100E9]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM VESSEL B0x00D2",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100E9, -- ðƒ©
+ },
+ [0x100EA]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM VESSEL B0x00D3",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100EA, -- ðƒª
+ },
+ [0x100EB]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM VESSEL B0x00D4",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100EB, -- ðƒ«
+ },
+ [0x100EC]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM VESSEL B0x00D5",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100EC, -- ðƒ¬
+ },
+ [0x100ED]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM VESSEL B0x00D6",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100ED, -- ðƒ­
+ },
+ [0x100EE]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM VESSEL B0x00D7",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100EE, -- ðƒ®
+ },
+ [0x100EF]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM VESSEL B0x00D8",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100EF, -- ðƒ¯
+ },
+ [0x100F0]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM VESSEL B0x00D9",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100F0, -- ðƒ°
+ },
+ [0x100F1]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM VESSEL B0x00DA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100F1, -- ðƒ±
+ },
+ [0x100F2]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM VESSEL B0x00DB",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100F2, -- ðƒ²
+ },
+ [0x100F3]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM VESSEL B0x00DD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100F3, -- ðƒ³
+ },
+ [0x100F4]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM VESSEL B0x00DE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100F4, -- ðƒ´
+ },
+ [0x100F5]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM VESSEL B0x00E2",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100F5, -- ðƒµ
+ },
+ [0x100F6]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM VESSEL B0x00E3",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100F6, -- ðƒ¶
+ },
+ [0x100F7]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM VESSEL B0x00E4",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100F7, -- ðƒ·
+ },
+ [0x100F8]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM VESSEL B0x00E5",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100F8, -- ðƒ¸
+ },
+ [0x100F9]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM VESSEL B0x00FA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100F9, -- ðƒ¹
+ },
+ [0x100FA]={
+ ["category"]="lo",
+ ["description"]="LINEAR B IDEOGRAM VESSEL B0x0131",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x100FA, -- ðƒº
+ },
+ [0x10100]={
+ ["category"]="po",
+ ["description"]="AEGEAN WORD SEPARATOR LINE",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x10100, -- ð„€
+ },
+ [0x10101]={
+ ["category"]="po",
+ ["description"]="AEGEAN WORD SEPARATOR DOT",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x10101, -- ð„
+ },
+ [0x10102]={
+ ["category"]="so",
+ ["description"]="AEGEAN CHECK MARK",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x10102, -- ð„‚
+ },
+ [0x10107]={
+ ["category"]="no",
+ ["description"]="AEGEAN NUMBER ONE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10107, -- ð„‡
+ },
+ [0x10108]={
+ ["category"]="no",
+ ["description"]="AEGEAN NUMBER TWO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10108, -- ð„ˆ
+ },
+ [0x10109]={
+ ["category"]="no",
+ ["description"]="AEGEAN NUMBER THREE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10109, -- ð„‰
+ },
+ [0x1010A]={
+ ["category"]="no",
+ ["description"]="AEGEAN NUMBER FOUR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1010A, -- ð„Š
+ },
+ [0x1010B]={
+ ["category"]="no",
+ ["description"]="AEGEAN NUMBER FIVE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1010B, -- ð„‹
+ },
+ [0x1010C]={
+ ["category"]="no",
+ ["description"]="AEGEAN NUMBER SIX",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1010C, -- ð„Œ
+ },
+ [0x1010D]={
+ ["category"]="no",
+ ["description"]="AEGEAN NUMBER SEVEN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1010D, -- ð„
+ },
+ [0x1010E]={
+ ["category"]="no",
+ ["description"]="AEGEAN NUMBER EIGHT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1010E, -- ð„Ž
+ },
+ [0x1010F]={
+ ["category"]="no",
+ ["description"]="AEGEAN NUMBER NINE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1010F, -- ð„
+ },
+ [0x10110]={
+ ["category"]="no",
+ ["description"]="AEGEAN NUMBER TEN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10110, -- ð„
+ },
+ [0x10111]={
+ ["category"]="no",
+ ["description"]="AEGEAN NUMBER TWENTY",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10111, -- ð„‘
+ },
+ [0x10112]={
+ ["category"]="no",
+ ["description"]="AEGEAN NUMBER THIRTY",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10112, -- ð„’
+ },
+ [0x10113]={
+ ["category"]="no",
+ ["description"]="AEGEAN NUMBER FORTY",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10113, -- ð„“
+ },
+ [0x10114]={
+ ["category"]="no",
+ ["description"]="AEGEAN NUMBER FIFTY",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10114, -- ð„”
+ },
+ [0x10115]={
+ ["category"]="no",
+ ["description"]="AEGEAN NUMBER SIXTY",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10115, -- ð„•
+ },
+ [0x10116]={
+ ["category"]="no",
+ ["description"]="AEGEAN NUMBER SEVENTY",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10116, -- ð„–
+ },
+ [0x10117]={
+ ["category"]="no",
+ ["description"]="AEGEAN NUMBER EIGHTY",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10117, -- ð„—
+ },
+ [0x10118]={
+ ["category"]="no",
+ ["description"]="AEGEAN NUMBER NINETY",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10118, -- ð„˜
+ },
+ [0x10119]={
+ ["category"]="no",
+ ["description"]="AEGEAN NUMBER ONE HUNDRED",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10119, -- ð„™
+ },
+ [0x1011A]={
+ ["category"]="no",
+ ["description"]="AEGEAN NUMBER TWO HUNDRED",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1011A, -- ð„š
+ },
+ [0x1011B]={
+ ["category"]="no",
+ ["description"]="AEGEAN NUMBER THREE HUNDRED",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1011B, -- ð„›
+ },
+ [0x1011C]={
+ ["category"]="no",
+ ["description"]="AEGEAN NUMBER FOUR HUNDRED",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1011C, -- ð„œ
+ },
+ [0x1011D]={
+ ["category"]="no",
+ ["description"]="AEGEAN NUMBER FIVE HUNDRED",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1011D, -- ð„
+ },
+ [0x1011E]={
+ ["category"]="no",
+ ["description"]="AEGEAN NUMBER SIX HUNDRED",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1011E, -- ð„ž
+ },
+ [0x1011F]={
+ ["category"]="no",
+ ["description"]="AEGEAN NUMBER SEVEN HUNDRED",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1011F, -- ð„Ÿ
+ },
+ [0x10120]={
+ ["category"]="no",
+ ["description"]="AEGEAN NUMBER EIGHT HUNDRED",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10120, -- ð„ 
+ },
+ [0x10121]={
+ ["category"]="no",
+ ["description"]="AEGEAN NUMBER NINE HUNDRED",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10121, -- ð„¡
+ },
+ [0x10122]={
+ ["category"]="no",
+ ["description"]="AEGEAN NUMBER ONE THOUSAND",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10122, -- ð„¢
+ },
+ [0x10123]={
+ ["category"]="no",
+ ["description"]="AEGEAN NUMBER TWO THOUSAND",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10123, -- ð„£
+ },
+ [0x10124]={
+ ["category"]="no",
+ ["description"]="AEGEAN NUMBER THREE THOUSAND",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10124, -- ð„¤
+ },
+ [0x10125]={
+ ["category"]="no",
+ ["description"]="AEGEAN NUMBER FOUR THOUSAND",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10125, -- ð„¥
+ },
+ [0x10126]={
+ ["category"]="no",
+ ["description"]="AEGEAN NUMBER FIVE THOUSAND",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10126, -- ð„¦
+ },
+ [0x10127]={
+ ["category"]="no",
+ ["description"]="AEGEAN NUMBER SIX THOUSAND",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10127, -- ð„§
+ },
+ [0x10128]={
+ ["category"]="no",
+ ["description"]="AEGEAN NUMBER SEVEN THOUSAND",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10128, -- ð„¨
+ },
+ [0x10129]={
+ ["category"]="no",
+ ["description"]="AEGEAN NUMBER EIGHT THOUSAND",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10129, -- ð„©
+ },
+ [0x1012A]={
+ ["category"]="no",
+ ["description"]="AEGEAN NUMBER NINE THOUSAND",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1012A, -- ð„ª
+ },
+ [0x1012B]={
+ ["category"]="no",
+ ["description"]="AEGEAN NUMBER TEN THOUSAND",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1012B, -- ð„«
+ },
+ [0x1012C]={
+ ["category"]="no",
+ ["description"]="AEGEAN NUMBER TWENTY THOUSAND",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1012C, -- ð„¬
+ },
+ [0x1012D]={
+ ["category"]="no",
+ ["description"]="AEGEAN NUMBER THIRTY THOUSAND",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1012D, -- ð„­
+ },
+ [0x1012E]={
+ ["category"]="no",
+ ["description"]="AEGEAN NUMBER FORTY THOUSAND",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1012E, -- ð„®
+ },
+ [0x1012F]={
+ ["category"]="no",
+ ["description"]="AEGEAN NUMBER FIFTY THOUSAND",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1012F, -- ð„¯
+ },
+ [0x10130]={
+ ["category"]="no",
+ ["description"]="AEGEAN NUMBER SIXTY THOUSAND",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10130, -- ð„°
+ },
+ [0x10131]={
+ ["category"]="no",
+ ["description"]="AEGEAN NUMBER SEVENTY THOUSAND",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10131, -- ð„±
+ },
+ [0x10132]={
+ ["category"]="no",
+ ["description"]="AEGEAN NUMBER EIGHTY THOUSAND",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10132, -- ð„²
+ },
+ [0x10133]={
+ ["category"]="no",
+ ["description"]="AEGEAN NUMBER NINETY THOUSAND",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10133, -- ð„³
+ },
+ [0x10137]={
+ ["category"]="so",
+ ["description"]="AEGEAN WEIGHT BASE UNIT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10137, -- ð„·
+ },
+ [0x10138]={
+ ["category"]="so",
+ ["description"]="AEGEAN WEIGHT FIRST SUBUNIT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10138, -- ð„¸
+ },
+ [0x10139]={
+ ["category"]="so",
+ ["description"]="AEGEAN WEIGHT SECOND SUBUNIT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10139, -- ð„¹
+ },
+ [0x1013A]={
+ ["category"]="so",
+ ["description"]="AEGEAN WEIGHT THIRD SUBUNIT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1013A, -- ð„º
+ },
+ [0x1013B]={
+ ["category"]="so",
+ ["description"]="AEGEAN WEIGHT FOURTH SUBUNIT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1013B, -- ð„»
+ },
+ [0x1013C]={
+ ["category"]="so",
+ ["description"]="AEGEAN DRY MEASURE FIRST SUBUNIT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1013C, -- ð„¼
+ },
+ [0x1013D]={
+ ["category"]="so",
+ ["description"]="AEGEAN LIQUID MEASURE FIRST SUBUNIT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1013D, -- ð„½
+ },
+ [0x1013E]={
+ ["category"]="so",
+ ["description"]="AEGEAN MEASURE SECOND SUBUNIT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1013E, -- ð„¾
+ },
+ [0x1013F]={
+ ["category"]="so",
+ ["description"]="AEGEAN MEASURE THIRD SUBUNIT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1013F, -- ð„¿
+ },
+ [0x10140]={
+ ["category"]="nl",
+ ["description"]="GREEK ACROPHONIC ATTIC ONE QUARTER",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10140, -- ð…€
+ },
+ [0x10141]={
+ ["category"]="nl",
+ ["description"]="GREEK ACROPHONIC ATTIC ONE HALF",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10141, -- ð…
+ },
+ [0x10142]={
+ ["category"]="nl",
+ ["description"]="GREEK ACROPHONIC ATTIC ONE DRACHMA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10142, -- ð…‚
+ },
+ [0x10143]={
+ ["category"]="nl",
+ ["description"]="GREEK ACROPHONIC ATTIC FIVE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10143, -- ð…ƒ
+ },
+ [0x10144]={
+ ["category"]="nl",
+ ["description"]="GREEK ACROPHONIC ATTIC FIFTY",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10144, -- ð…„
+ },
+ [0x10145]={
+ ["category"]="nl",
+ ["description"]="GREEK ACROPHONIC ATTIC FIVE HUNDRED",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10145, -- ð……
+ },
+ [0x10146]={
+ ["category"]="nl",
+ ["description"]="GREEK ACROPHONIC ATTIC FIVE THOUSAND",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10146, -- ð…†
+ },
+ [0x10147]={
+ ["category"]="nl",
+ ["description"]="GREEK ACROPHONIC ATTIC FIFTY THOUSAND",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10147, -- ð…‡
+ },
+ [0x10148]={
+ ["category"]="nl",
+ ["description"]="GREEK ACROPHONIC ATTIC FIVE TALENTS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10148, -- ð…ˆ
+ },
+ [0x10149]={
+ ["category"]="nl",
+ ["description"]="GREEK ACROPHONIC ATTIC TEN TALENTS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10149, -- ð…‰
+ },
+ [0x1014A]={
+ ["category"]="nl",
+ ["description"]="GREEK ACROPHONIC ATTIC FIFTY TALENTS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1014A, -- ð…Š
+ },
+ [0x1014B]={
+ ["category"]="nl",
+ ["description"]="GREEK ACROPHONIC ATTIC ONE HUNDRED TALENTS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1014B, -- ð…‹
+ },
+ [0x1014C]={
+ ["category"]="nl",
+ ["description"]="GREEK ACROPHONIC ATTIC FIVE HUNDRED TALENTS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1014C, -- ð…Œ
+ },
+ [0x1014D]={
+ ["category"]="nl",
+ ["description"]="GREEK ACROPHONIC ATTIC ONE THOUSAND TALENTS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1014D, -- ð…
+ },
+ [0x1014E]={
+ ["category"]="nl",
+ ["description"]="GREEK ACROPHONIC ATTIC FIVE THOUSAND TALENTS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1014E, -- ð…Ž
+ },
+ [0x1014F]={
+ ["category"]="nl",
+ ["description"]="GREEK ACROPHONIC ATTIC FIVE STATERS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1014F, -- ð…
+ },
+ [0x10150]={
+ ["category"]="nl",
+ ["description"]="GREEK ACROPHONIC ATTIC TEN STATERS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10150, -- ð…
+ },
+ [0x10151]={
+ ["category"]="nl",
+ ["description"]="GREEK ACROPHONIC ATTIC FIFTY STATERS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10151, -- ð…‘
+ },
+ [0x10152]={
+ ["category"]="nl",
+ ["description"]="GREEK ACROPHONIC ATTIC ONE HUNDRED STATERS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10152, -- ð…’
+ },
+ [0x10153]={
+ ["category"]="nl",
+ ["description"]="GREEK ACROPHONIC ATTIC FIVE HUNDRED STATERS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10153, -- ð…“
+ },
+ [0x10154]={
+ ["category"]="nl",
+ ["description"]="GREEK ACROPHONIC ATTIC ONE THOUSAND STATERS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10154, -- ð…”
+ },
+ [0x10155]={
+ ["category"]="nl",
+ ["description"]="GREEK ACROPHONIC ATTIC TEN THOUSAND STATERS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10155, -- ð…•
+ },
+ [0x10156]={
+ ["category"]="nl",
+ ["description"]="GREEK ACROPHONIC ATTIC FIFTY THOUSAND STATERS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10156, -- ð…–
+ },
+ [0x10157]={
+ ["category"]="nl",
+ ["description"]="GREEK ACROPHONIC ATTIC TEN MNAS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10157, -- ð…—
+ },
+ [0x10158]={
+ ["category"]="nl",
+ ["description"]="GREEK ACROPHONIC HERAEUM ONE PLETHRON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10158, -- ð…˜
+ },
+ [0x10159]={
+ ["category"]="nl",
+ ["description"]="GREEK ACROPHONIC THESPIAN ONE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10159, -- ð…™
+ },
+ [0x1015A]={
+ ["category"]="nl",
+ ["description"]="GREEK ACROPHONIC HERMIONIAN ONE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1015A, -- ð…š
+ },
+ [0x1015B]={
+ ["category"]="nl",
+ ["description"]="GREEK ACROPHONIC EPIDAUREAN TWO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1015B, -- ð…›
+ },
+ [0x1015C]={
+ ["category"]="nl",
+ ["description"]="GREEK ACROPHONIC THESPIAN TWO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1015C, -- ð…œ
+ },
+ [0x1015D]={
+ ["category"]="nl",
+ ["description"]="GREEK ACROPHONIC CYRENAIC TWO DRACHMAS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1015D, -- ð…
+ },
+ [0x1015E]={
+ ["category"]="nl",
+ ["description"]="GREEK ACROPHONIC EPIDAUREAN TWO DRACHMAS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1015E, -- ð…ž
+ },
+ [0x1015F]={
+ ["category"]="nl",
+ ["description"]="GREEK ACROPHONIC TROEZENIAN FIVE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1015F, -- ð…Ÿ
+ },
+ [0x10160]={
+ ["category"]="nl",
+ ["description"]="GREEK ACROPHONIC TROEZENIAN TEN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10160, -- ð… 
+ },
+ [0x10161]={
+ ["category"]="nl",
+ ["description"]="GREEK ACROPHONIC TROEZENIAN TEN ALTERNATE FORM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10161, -- ð…¡
+ },
+ [0x10162]={
+ ["category"]="nl",
+ ["description"]="GREEK ACROPHONIC HERMIONIAN TEN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10162, -- ð…¢
+ },
+ [0x10163]={
+ ["category"]="nl",
+ ["description"]="GREEK ACROPHONIC MESSENIAN TEN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10163, -- ð…£
+ },
+ [0x10164]={
+ ["category"]="nl",
+ ["description"]="GREEK ACROPHONIC THESPIAN TEN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10164, -- ð…¤
+ },
+ [0x10165]={
+ ["category"]="nl",
+ ["description"]="GREEK ACROPHONIC THESPIAN THIRTY",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10165, -- ð…¥
+ },
+ [0x10166]={
+ ["category"]="nl",
+ ["description"]="GREEK ACROPHONIC TROEZENIAN FIFTY",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10166, -- ð…¦
+ },
+ [0x10167]={
+ ["category"]="nl",
+ ["description"]="GREEK ACROPHONIC TROEZENIAN FIFTY ALTERNATE FORM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10167, -- ð…§
+ },
+ [0x10168]={
+ ["category"]="nl",
+ ["description"]="GREEK ACROPHONIC HERMIONIAN FIFTY",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10168, -- ð…¨
+ },
+ [0x10169]={
+ ["category"]="nl",
+ ["description"]="GREEK ACROPHONIC THESPIAN FIFTY",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10169, -- ð…©
+ },
+ [0x1016A]={
+ ["category"]="nl",
+ ["description"]="GREEK ACROPHONIC THESPIAN ONE HUNDRED",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1016A, -- ð…ª
+ },
+ [0x1016B]={
+ ["category"]="nl",
+ ["description"]="GREEK ACROPHONIC THESPIAN THREE HUNDRED",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1016B, -- ð…«
+ },
+ [0x1016C]={
+ ["category"]="nl",
+ ["description"]="GREEK ACROPHONIC EPIDAUREAN FIVE HUNDRED",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1016C, -- ð…¬
+ },
+ [0x1016D]={
+ ["category"]="nl",
+ ["description"]="GREEK ACROPHONIC TROEZENIAN FIVE HUNDRED",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1016D, -- ð…­
+ },
+ [0x1016E]={
+ ["category"]="nl",
+ ["description"]="GREEK ACROPHONIC THESPIAN FIVE HUNDRED",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1016E, -- ð…®
+ },
+ [0x1016F]={
+ ["category"]="nl",
+ ["description"]="GREEK ACROPHONIC CARYSTIAN FIVE HUNDRED",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1016F, -- ð…¯
+ },
+ [0x10170]={
+ ["category"]="nl",
+ ["description"]="GREEK ACROPHONIC NAXIAN FIVE HUNDRED",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10170, -- ð…°
+ },
+ [0x10171]={
+ ["category"]="nl",
+ ["description"]="GREEK ACROPHONIC THESPIAN ONE THOUSAND",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10171, -- ð…±
+ },
+ [0x10172]={
+ ["category"]="nl",
+ ["description"]="GREEK ACROPHONIC THESPIAN FIVE THOUSAND",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10172, -- ð…²
+ },
+ [0x10173]={
+ ["category"]="nl",
+ ["description"]="GREEK ACROPHONIC DELPHIC FIVE MNAS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10173, -- ð…³
+ },
+ [0x10174]={
+ ["category"]="nl",
+ ["description"]="GREEK ACROPHONIC STRATIAN FIFTY MNAS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10174, -- ð…´
+ },
+ [0x10175]={
+ ["category"]="no",
+ ["description"]="GREEK ONE HALF SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10175, -- ð…µ
+ },
+ [0x10176]={
+ ["category"]="no",
+ ["description"]="GREEK ONE HALF SIGN ALTERNATE FORM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10176, -- ð…¶
+ },
+ [0x10177]={
+ ["category"]="no",
+ ["description"]="GREEK TWO THIRDS SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10177, -- ð…·
+ },
+ [0x10178]={
+ ["category"]="no",
+ ["description"]="GREEK THREE QUARTERS SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10178, -- ð…¸
+ },
+ [0x10179]={
+ ["category"]="so",
+ ["description"]="GREEK YEAR SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10179, -- ð…¹
+ },
+ [0x1017A]={
+ ["category"]="so",
+ ["description"]="GREEK TALENT SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1017A, -- ð…º
+ },
+ [0x1017B]={
+ ["category"]="so",
+ ["description"]="GREEK DRACHMA SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1017B, -- ð…»
+ },
+ [0x1017C]={
+ ["category"]="so",
+ ["description"]="GREEK OBOL SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1017C, -- ð…¼
+ },
+ [0x1017D]={
+ ["category"]="so",
+ ["description"]="GREEK TWO OBOLS SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1017D, -- ð…½
+ },
+ [0x1017E]={
+ ["category"]="so",
+ ["description"]="GREEK THREE OBOLS SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1017E, -- ð…¾
+ },
+ [0x1017F]={
+ ["category"]="so",
+ ["description"]="GREEK FOUR OBOLS SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1017F, -- ð…¿
+ },
+ [0x10180]={
+ ["category"]="so",
+ ["description"]="GREEK FIVE OBOLS SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10180, -- ð†€
+ },
+ [0x10181]={
+ ["category"]="so",
+ ["description"]="GREEK METRETES SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10181, -- ð†
+ },
+ [0x10182]={
+ ["category"]="so",
+ ["description"]="GREEK KYATHOS BASE SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10182, -- ð†‚
+ },
+ [0x10183]={
+ ["category"]="so",
+ ["description"]="GREEK LITRA SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10183, -- ð†ƒ
+ },
+ [0x10184]={
+ ["category"]="so",
+ ["description"]="GREEK OUNKIA SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10184, -- ð†„
+ },
+ [0x10185]={
+ ["category"]="so",
+ ["description"]="GREEK XESTES SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10185, -- ð†…
+ },
+ [0x10186]={
+ ["category"]="so",
+ ["description"]="GREEK ARTABE SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10186, -- ð††
+ },
+ [0x10187]={
+ ["category"]="so",
+ ["description"]="GREEK AROURA SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10187, -- ð†‡
+ },
+ [0x10188]={
+ ["category"]="so",
+ ["description"]="GREEK GRAMMA SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10188, -- ð†ˆ
+ },
+ [0x10189]={
+ ["category"]="so",
+ ["description"]="GREEK TRYBLION BASE SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10189, -- ð†‰
+ },
+ [0x1018A]={
+ ["category"]="no",
+ ["description"]="GREEK ZERO SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1018A, -- ð†Š
+ },
+ [0x10300]={
+ ["category"]="lo",
+ ["description"]="OLD ITALIC LETTER A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10300, -- ðŒ€
+ },
+ [0x10301]={
+ ["category"]="lo",
+ ["description"]="OLD ITALIC LETTER BE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10301, -- ðŒ
+ },
+ [0x10302]={
+ ["category"]="lo",
+ ["description"]="OLD ITALIC LETTER KE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10302, -- ðŒ‚
+ },
+ [0x10303]={
+ ["category"]="lo",
+ ["description"]="OLD ITALIC LETTER DE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10303, -- ðŒƒ
+ },
+ [0x10304]={
+ ["category"]="lo",
+ ["description"]="OLD ITALIC LETTER E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10304, -- ðŒ„
+ },
+ [0x10305]={
+ ["category"]="lo",
+ ["description"]="OLD ITALIC LETTER VE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10305, -- ðŒ…
+ },
+ [0x10306]={
+ ["category"]="lo",
+ ["description"]="OLD ITALIC LETTER ZE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10306, -- ðŒ†
+ },
+ [0x10307]={
+ ["category"]="lo",
+ ["description"]="OLD ITALIC LETTER HE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10307, -- ðŒ‡
+ },
+ [0x10308]={
+ ["category"]="lo",
+ ["description"]="OLD ITALIC LETTER THE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10308, -- ðŒˆ
+ },
+ [0x10309]={
+ ["category"]="lo",
+ ["description"]="OLD ITALIC LETTER I",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10309, -- ðŒ‰
+ },
+ [0x1030A]={
+ ["category"]="lo",
+ ["description"]="OLD ITALIC LETTER KA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1030A, -- ðŒŠ
+ },
+ [0x1030B]={
+ ["category"]="lo",
+ ["description"]="OLD ITALIC LETTER EL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1030B, -- ðŒ‹
+ },
+ [0x1030C]={
+ ["category"]="lo",
+ ["description"]="OLD ITALIC LETTER EM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1030C, -- ðŒŒ
+ },
+ [0x1030D]={
+ ["category"]="lo",
+ ["description"]="OLD ITALIC LETTER EN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1030D, -- ðŒ
+ },
+ [0x1030E]={
+ ["category"]="lo",
+ ["description"]="OLD ITALIC LETTER ESH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1030E, -- ðŒŽ
+ },
+ [0x1030F]={
+ ["category"]="lo",
+ ["description"]="OLD ITALIC LETTER O",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1030F, -- ðŒ
+ },
+ [0x10310]={
+ ["category"]="lo",
+ ["description"]="OLD ITALIC LETTER PE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10310, -- ðŒ
+ },
+ [0x10311]={
+ ["category"]="lo",
+ ["description"]="OLD ITALIC LETTER SHE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10311, -- ðŒ‘
+ },
+ [0x10312]={
+ ["category"]="lo",
+ ["description"]="OLD ITALIC LETTER KU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10312, -- ðŒ’
+ },
+ [0x10313]={
+ ["category"]="lo",
+ ["description"]="OLD ITALIC LETTER ER",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10313, -- ðŒ“
+ },
+ [0x10314]={
+ ["category"]="lo",
+ ["description"]="OLD ITALIC LETTER ES",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10314, -- ðŒ”
+ },
+ [0x10315]={
+ ["category"]="lo",
+ ["description"]="OLD ITALIC LETTER TE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10315, -- ðŒ•
+ },
+ [0x10316]={
+ ["category"]="lo",
+ ["description"]="OLD ITALIC LETTER U",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10316, -- ðŒ–
+ },
+ [0x10317]={
+ ["category"]="lo",
+ ["description"]="OLD ITALIC LETTER EKS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10317, -- ðŒ—
+ },
+ [0x10318]={
+ ["category"]="lo",
+ ["description"]="OLD ITALIC LETTER PHE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10318, -- ðŒ˜
+ },
+ [0x10319]={
+ ["category"]="lo",
+ ["description"]="OLD ITALIC LETTER KHE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10319, -- ðŒ™
+ },
+ [0x1031A]={
+ ["category"]="lo",
+ ["description"]="OLD ITALIC LETTER EF",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1031A, -- ðŒš
+ },
+ [0x1031B]={
+ ["category"]="lo",
+ ["description"]="OLD ITALIC LETTER ERS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1031B, -- ðŒ›
+ },
+ [0x1031C]={
+ ["category"]="lo",
+ ["description"]="OLD ITALIC LETTER CHE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1031C, -- ðŒœ
+ },
+ [0x1031D]={
+ ["category"]="lo",
+ ["description"]="OLD ITALIC LETTER II",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1031D, -- ðŒ
+ },
+ [0x1031E]={
+ ["category"]="lo",
+ ["description"]="OLD ITALIC LETTER UU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1031E, -- ðŒž
+ },
+ [0x10320]={
+ ["category"]="no",
+ ["description"]="OLD ITALIC NUMERAL ONE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10320, -- ðŒ 
+ },
+ [0x10321]={
+ ["category"]="no",
+ ["description"]="OLD ITALIC NUMERAL FIVE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10321, -- ðŒ¡
+ },
+ [0x10322]={
+ ["category"]="no",
+ ["description"]="OLD ITALIC NUMERAL TEN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10322, -- ðŒ¢
+ },
+ [0x10323]={
+ ["category"]="no",
+ ["description"]="OLD ITALIC NUMERAL FIFTY",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10323, -- ðŒ£
+ },
+ [0x10330]={
+ ["category"]="lo",
+ ["description"]="GOTHIC LETTER AHSA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10330, -- ðŒ°
+ },
+ [0x10331]={
+ ["category"]="lo",
+ ["description"]="GOTHIC LETTER BAIRKAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10331, -- ðŒ±
+ },
+ [0x10332]={
+ ["category"]="lo",
+ ["description"]="GOTHIC LETTER GIBA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10332, -- ðŒ²
+ },
+ [0x10333]={
+ ["category"]="lo",
+ ["description"]="GOTHIC LETTER DAGS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10333, -- ðŒ³
+ },
+ [0x10334]={
+ ["category"]="lo",
+ ["description"]="GOTHIC LETTER AIHVUS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10334, -- ðŒ´
+ },
+ [0x10335]={
+ ["category"]="lo",
+ ["description"]="GOTHIC LETTER QAIRTHRA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10335, -- ðŒµ
+ },
+ [0x10336]={
+ ["category"]="lo",
+ ["description"]="GOTHIC LETTER IUJA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10336, -- ðŒ¶
+ },
+ [0x10337]={
+ ["category"]="lo",
+ ["description"]="GOTHIC LETTER HAGL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10337, -- ðŒ·
+ },
+ [0x10338]={
+ ["category"]="lo",
+ ["description"]="GOTHIC LETTER THIUTH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10338, -- ðŒ¸
+ },
+ [0x10339]={
+ ["category"]="lo",
+ ["description"]="GOTHIC LETTER EIS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10339, -- ðŒ¹
+ },
+ [0x1033A]={
+ ["category"]="lo",
+ ["description"]="GOTHIC LETTER KUSMA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1033A, -- ðŒº
+ },
+ [0x1033B]={
+ ["category"]="lo",
+ ["description"]="GOTHIC LETTER LAGUS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1033B, -- ðŒ»
+ },
+ [0x1033C]={
+ ["category"]="lo",
+ ["description"]="GOTHIC LETTER MANNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1033C, -- ðŒ¼
+ },
+ [0x1033D]={
+ ["category"]="lo",
+ ["description"]="GOTHIC LETTER NAUTHS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1033D, -- ðŒ½
+ },
+ [0x1033E]={
+ ["category"]="lo",
+ ["description"]="GOTHIC LETTER JER",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1033E, -- ðŒ¾
+ },
+ [0x1033F]={
+ ["category"]="lo",
+ ["description"]="GOTHIC LETTER URUS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1033F, -- ðŒ¿
+ },
+ [0x10340]={
+ ["category"]="lo",
+ ["description"]="GOTHIC LETTER PAIRTHRA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10340, -- ð€
+ },
+ [0x10341]={
+ ["category"]="nl",
+ ["description"]="GOTHIC LETTER NINETY",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10341, -- ð
+ },
+ [0x10342]={
+ ["category"]="lo",
+ ["description"]="GOTHIC LETTER RAIDA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10342, -- ð‚
+ },
+ [0x10343]={
+ ["category"]="lo",
+ ["description"]="GOTHIC LETTER SAUIL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10343, -- ðƒ
+ },
+ [0x10344]={
+ ["category"]="lo",
+ ["description"]="GOTHIC LETTER TEIWS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10344, -- ð„
+ },
+ [0x10345]={
+ ["category"]="lo",
+ ["description"]="GOTHIC LETTER WINJA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10345, -- ð…
+ },
+ [0x10346]={
+ ["category"]="lo",
+ ["description"]="GOTHIC LETTER FAIHU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10346, -- ð†
+ },
+ [0x10347]={
+ ["category"]="lo",
+ ["description"]="GOTHIC LETTER IGGWS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10347, -- ð‡
+ },
+ [0x10348]={
+ ["category"]="lo",
+ ["description"]="GOTHIC LETTER HWAIR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10348, -- ðˆ
+ },
+ [0x10349]={
+ ["category"]="lo",
+ ["description"]="GOTHIC LETTER OTHAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10349, -- ð‰
+ },
+ [0x1034A]={
+ ["category"]="nl",
+ ["description"]="GOTHIC LETTER NINE HUNDRED",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1034A, -- ðŠ
+ },
+ [0x10380]={
+ ["category"]="lo",
+ ["description"]="UGARITIC LETTER ALPA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10380, -- ðŽ€
+ },
+ [0x10381]={
+ ["category"]="lo",
+ ["description"]="UGARITIC LETTER BETA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10381, -- ðŽ
+ },
+ [0x10382]={
+ ["category"]="lo",
+ ["description"]="UGARITIC LETTER GAMLA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10382, -- ðŽ‚
+ },
+ [0x10383]={
+ ["category"]="lo",
+ ["description"]="UGARITIC LETTER KHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10383, -- ðŽƒ
+ },
+ [0x10384]={
+ ["category"]="lo",
+ ["description"]="UGARITIC LETTER DELTA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10384, -- ðŽ„
+ },
+ [0x10385]={
+ ["category"]="lo",
+ ["description"]="UGARITIC LETTER HO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10385, -- ðŽ…
+ },
+ [0x10386]={
+ ["category"]="lo",
+ ["description"]="UGARITIC LETTER WO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10386, -- ðŽ†
+ },
+ [0x10387]={
+ ["category"]="lo",
+ ["description"]="UGARITIC LETTER ZETA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10387, -- ðŽ‡
+ },
+ [0x10388]={
+ ["category"]="lo",
+ ["description"]="UGARITIC LETTER HOTA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10388, -- ðŽˆ
+ },
+ [0x10389]={
+ ["category"]="lo",
+ ["description"]="UGARITIC LETTER TET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10389, -- ðŽ‰
+ },
+ [0x1038A]={
+ ["category"]="lo",
+ ["description"]="UGARITIC LETTER YOD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1038A, -- ðŽŠ
+ },
+ [0x1038B]={
+ ["category"]="lo",
+ ["description"]="UGARITIC LETTER KAF",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1038B, -- ðŽ‹
+ },
+ [0x1038C]={
+ ["category"]="lo",
+ ["description"]="UGARITIC LETTER SHIN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1038C, -- ðŽŒ
+ },
+ [0x1038D]={
+ ["category"]="lo",
+ ["description"]="UGARITIC LETTER LAMDA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1038D, -- ðŽ
+ },
+ [0x1038E]={
+ ["category"]="lo",
+ ["description"]="UGARITIC LETTER MEM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1038E, -- ðŽŽ
+ },
+ [0x1038F]={
+ ["category"]="lo",
+ ["description"]="UGARITIC LETTER DHAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1038F, -- ðŽ
+ },
+ [0x10390]={
+ ["category"]="lo",
+ ["description"]="UGARITIC LETTER NUN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10390, -- ðŽ
+ },
+ [0x10391]={
+ ["category"]="lo",
+ ["description"]="UGARITIC LETTER ZU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10391, -- ðŽ‘
+ },
+ [0x10392]={
+ ["category"]="lo",
+ ["description"]="UGARITIC LETTER SAMKA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10392, -- ðŽ’
+ },
+ [0x10393]={
+ ["category"]="lo",
+ ["description"]="UGARITIC LETTER AIN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10393, -- ðŽ“
+ },
+ [0x10394]={
+ ["category"]="lo",
+ ["description"]="UGARITIC LETTER PU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10394, -- ðŽ”
+ },
+ [0x10395]={
+ ["category"]="lo",
+ ["description"]="UGARITIC LETTER SADE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10395, -- ðŽ•
+ },
+ [0x10396]={
+ ["category"]="lo",
+ ["description"]="UGARITIC LETTER QOPA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10396, -- ðŽ–
+ },
+ [0x10397]={
+ ["category"]="lo",
+ ["description"]="UGARITIC LETTER RASHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10397, -- ðŽ—
+ },
+ [0x10398]={
+ ["category"]="lo",
+ ["description"]="UGARITIC LETTER THANNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10398, -- ðŽ˜
+ },
+ [0x10399]={
+ ["category"]="lo",
+ ["description"]="UGARITIC LETTER GHAIN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10399, -- ðŽ™
+ },
+ [0x1039A]={
+ ["category"]="lo",
+ ["description"]="UGARITIC LETTER TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1039A, -- ðŽš
+ },
+ [0x1039B]={
+ ["category"]="lo",
+ ["description"]="UGARITIC LETTER I",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1039B, -- ðŽ›
+ },
+ [0x1039C]={
+ ["category"]="lo",
+ ["description"]="UGARITIC LETTER U",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1039C, -- ðŽœ
+ },
+ [0x1039D]={
+ ["category"]="lo",
+ ["description"]="UGARITIC LETTER SSU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1039D, -- ðŽ
+ },
+ [0x1039F]={
+ ["category"]="po",
+ ["description"]="UGARITIC WORD DIVIDER",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x1039F, -- ðŽŸ
+ },
+ [0x103A0]={
+ ["category"]="lo",
+ ["description"]="OLD PERSIAN SIGN A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x103A0, -- ðŽ 
+ },
+ [0x103A1]={
+ ["category"]="lo",
+ ["description"]="OLD PERSIAN SIGN I",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x103A1, -- ðŽ¡
+ },
+ [0x103A2]={
+ ["category"]="lo",
+ ["description"]="OLD PERSIAN SIGN U",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x103A2, -- ðŽ¢
+ },
+ [0x103A3]={
+ ["category"]="lo",
+ ["description"]="OLD PERSIAN SIGN KA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x103A3, -- ðŽ£
+ },
+ [0x103A4]={
+ ["category"]="lo",
+ ["description"]="OLD PERSIAN SIGN KU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x103A4, -- ðŽ¤
+ },
+ [0x103A5]={
+ ["category"]="lo",
+ ["description"]="OLD PERSIAN SIGN GA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x103A5, -- ðŽ¥
+ },
+ [0x103A6]={
+ ["category"]="lo",
+ ["description"]="OLD PERSIAN SIGN GU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x103A6, -- ðŽ¦
+ },
+ [0x103A7]={
+ ["category"]="lo",
+ ["description"]="OLD PERSIAN SIGN XA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x103A7, -- ðŽ§
+ },
+ [0x103A8]={
+ ["category"]="lo",
+ ["description"]="OLD PERSIAN SIGN CA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x103A8, -- ðŽ¨
+ },
+ [0x103A9]={
+ ["category"]="lo",
+ ["description"]="OLD PERSIAN SIGN JA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x103A9, -- ðŽ©
+ },
+ [0x103AA]={
+ ["category"]="lo",
+ ["description"]="OLD PERSIAN SIGN JI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x103AA, -- ðŽª
+ },
+ [0x103AB]={
+ ["category"]="lo",
+ ["description"]="OLD PERSIAN SIGN TA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x103AB, -- ðŽ«
+ },
+ [0x103AC]={
+ ["category"]="lo",
+ ["description"]="OLD PERSIAN SIGN TU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x103AC, -- ðŽ¬
+ },
+ [0x103AD]={
+ ["category"]="lo",
+ ["description"]="OLD PERSIAN SIGN DA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x103AD, -- ðŽ­
+ },
+ [0x103AE]={
+ ["category"]="lo",
+ ["description"]="OLD PERSIAN SIGN DI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x103AE, -- ðŽ®
+ },
+ [0x103AF]={
+ ["category"]="lo",
+ ["description"]="OLD PERSIAN SIGN DU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x103AF, -- ðŽ¯
+ },
+ [0x103B0]={
+ ["category"]="lo",
+ ["description"]="OLD PERSIAN SIGN THA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x103B0, -- ðŽ°
+ },
+ [0x103B1]={
+ ["category"]="lo",
+ ["description"]="OLD PERSIAN SIGN PA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x103B1, -- ðŽ±
+ },
+ [0x103B2]={
+ ["category"]="lo",
+ ["description"]="OLD PERSIAN SIGN BA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x103B2, -- ðŽ²
+ },
+ [0x103B3]={
+ ["category"]="lo",
+ ["description"]="OLD PERSIAN SIGN FA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x103B3, -- ðŽ³
+ },
+ [0x103B4]={
+ ["category"]="lo",
+ ["description"]="OLD PERSIAN SIGN NA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x103B4, -- ðŽ´
+ },
+ [0x103B5]={
+ ["category"]="lo",
+ ["description"]="OLD PERSIAN SIGN NU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x103B5, -- ðŽµ
+ },
+ [0x103B6]={
+ ["category"]="lo",
+ ["description"]="OLD PERSIAN SIGN MA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x103B6, -- ðŽ¶
+ },
+ [0x103B7]={
+ ["category"]="lo",
+ ["description"]="OLD PERSIAN SIGN MI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x103B7, -- ðŽ·
+ },
+ [0x103B8]={
+ ["category"]="lo",
+ ["description"]="OLD PERSIAN SIGN MU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x103B8, -- ðŽ¸
+ },
+ [0x103B9]={
+ ["category"]="lo",
+ ["description"]="OLD PERSIAN SIGN YA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x103B9, -- ðŽ¹
+ },
+ [0x103BA]={
+ ["category"]="lo",
+ ["description"]="OLD PERSIAN SIGN VA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x103BA, -- ðŽº
+ },
+ [0x103BB]={
+ ["category"]="lo",
+ ["description"]="OLD PERSIAN SIGN VI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x103BB, -- ðŽ»
+ },
+ [0x103BC]={
+ ["category"]="lo",
+ ["description"]="OLD PERSIAN SIGN RA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x103BC, -- ðŽ¼
+ },
+ [0x103BD]={
+ ["category"]="lo",
+ ["description"]="OLD PERSIAN SIGN RU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x103BD, -- ðŽ½
+ },
+ [0x103BE]={
+ ["category"]="lo",
+ ["description"]="OLD PERSIAN SIGN LA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x103BE, -- ðŽ¾
+ },
+ [0x103BF]={
+ ["category"]="lo",
+ ["description"]="OLD PERSIAN SIGN SA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x103BF, -- ðŽ¿
+ },
+ [0x103C0]={
+ ["category"]="lo",
+ ["description"]="OLD PERSIAN SIGN ZA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x103C0, -- ð€
+ },
+ [0x103C1]={
+ ["category"]="lo",
+ ["description"]="OLD PERSIAN SIGN SHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x103C1, -- ð
+ },
+ [0x103C2]={
+ ["category"]="lo",
+ ["description"]="OLD PERSIAN SIGN SSA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x103C2, -- ð‚
+ },
+ [0x103C3]={
+ ["category"]="lo",
+ ["description"]="OLD PERSIAN SIGN HA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x103C3, -- ðƒ
+ },
+ [0x103C8]={
+ ["category"]="lo",
+ ["description"]="OLD PERSIAN SIGN AURAMAZDAA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x103C8, -- ðˆ
+ },
+ [0x103C9]={
+ ["category"]="lo",
+ ["description"]="OLD PERSIAN SIGN AURAMAZDAA-0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x103C9, -- ð‰
+ },
+ [0x103CA]={
+ ["category"]="lo",
+ ["description"]="OLD PERSIAN SIGN AURAMAZDAAHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x103CA, -- ðŠ
+ },
+ [0x103CB]={
+ ["category"]="lo",
+ ["description"]="OLD PERSIAN SIGN XSHAAYATHIYA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x103CB, -- ð‹
+ },
+ [0x103CC]={
+ ["category"]="lo",
+ ["description"]="OLD PERSIAN SIGN DAHYAAUSH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x103CC, -- ðŒ
+ },
+ [0x103CD]={
+ ["category"]="lo",
+ ["description"]="OLD PERSIAN SIGN DAHYAAUSH-0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x103CD, -- ð
+ },
+ [0x103CE]={
+ ["category"]="lo",
+ ["description"]="OLD PERSIAN SIGN BAGA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x103CE, -- ðŽ
+ },
+ [0x103CF]={
+ ["category"]="lo",
+ ["description"]="OLD PERSIAN SIGN BUUMISH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x103CF, -- ð
+ },
+ [0x103D0]={
+ ["category"]="po",
+ ["description"]="OLD PERSIAN WORD DIVIDER",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x103D0, -- ð
+ },
+ [0x103D1]={
+ ["category"]="nl",
+ ["description"]="OLD PERSIAN NUMBER ONE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x103D1, -- ð‘
+ },
+ [0x103D2]={
+ ["category"]="nl",
+ ["description"]="OLD PERSIAN NUMBER TWO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x103D2, -- ð’
+ },
+ [0x103D3]={
+ ["category"]="nl",
+ ["description"]="OLD PERSIAN NUMBER TEN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x103D3, -- ð“
+ },
+ [0x103D4]={
+ ["category"]="nl",
+ ["description"]="OLD PERSIAN NUMBER TWENTY",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x103D4, -- ð”
+ },
+ [0x103D5]={
+ ["category"]="nl",
+ ["description"]="OLD PERSIAN NUMBER HUNDRED",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x103D5, -- ð•
+ },
+ [0x10400]={
+ ["category"]="lu",
+ ["description"]="DESERET CAPITAL LETTER LONG I",
+ ["lccode"]=0x10428,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10400, -- ð€
+ },
+ [0x10401]={
+ ["category"]="lu",
+ ["description"]="DESERET CAPITAL LETTER LONG E",
+ ["lccode"]=0x10429,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10401, -- ð
+ },
+ [0x10402]={
+ ["category"]="lu",
+ ["description"]="DESERET CAPITAL LETTER LONG A",
+ ["lccode"]=0x1042A,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10402, -- ð‚
+ },
+ [0x10403]={
+ ["category"]="lu",
+ ["description"]="DESERET CAPITAL LETTER LONG AH",
+ ["lccode"]=0x1042B,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10403, -- ðƒ
+ },
+ [0x10404]={
+ ["category"]="lu",
+ ["description"]="DESERET CAPITAL LETTER LONG O",
+ ["lccode"]=0x1042C,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10404, -- ð„
+ },
+ [0x10405]={
+ ["category"]="lu",
+ ["description"]="DESERET CAPITAL LETTER LONG OO",
+ ["lccode"]=0x1042D,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10405, -- ð…
+ },
+ [0x10406]={
+ ["category"]="lu",
+ ["description"]="DESERET CAPITAL LETTER SHORT I",
+ ["lccode"]=0x1042E,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10406, -- ð†
+ },
+ [0x10407]={
+ ["category"]="lu",
+ ["description"]="DESERET CAPITAL LETTER SHORT E",
+ ["lccode"]=0x1042F,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10407, -- ð‡
+ },
+ [0x10408]={
+ ["category"]="lu",
+ ["description"]="DESERET CAPITAL LETTER SHORT A",
+ ["lccode"]=0x10430,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10408, -- ðˆ
+ },
+ [0x10409]={
+ ["category"]="lu",
+ ["description"]="DESERET CAPITAL LETTER SHORT AH",
+ ["lccode"]=0x10431,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10409, -- ð‰
+ },
+ [0x1040A]={
+ ["category"]="lu",
+ ["description"]="DESERET CAPITAL LETTER SHORT O",
+ ["lccode"]=0x10432,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1040A, -- ðŠ
+ },
+ [0x1040B]={
+ ["category"]="lu",
+ ["description"]="DESERET CAPITAL LETTER SHORT OO",
+ ["lccode"]=0x10433,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1040B, -- ð‹
+ },
+ [0x1040C]={
+ ["category"]="lu",
+ ["description"]="DESERET CAPITAL LETTER AY",
+ ["lccode"]=0x10434,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1040C, -- ðŒ
+ },
+ [0x1040D]={
+ ["category"]="lu",
+ ["description"]="DESERET CAPITAL LETTER OW",
+ ["lccode"]=0x10435,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1040D, -- ð
+ },
+ [0x1040E]={
+ ["category"]="lu",
+ ["description"]="DESERET CAPITAL LETTER WU",
+ ["lccode"]=0x10436,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1040E, -- ðŽ
+ },
+ [0x1040F]={
+ ["category"]="lu",
+ ["description"]="DESERET CAPITAL LETTER YEE",
+ ["lccode"]=0x10437,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1040F, -- ð
+ },
+ [0x10410]={
+ ["category"]="lu",
+ ["description"]="DESERET CAPITAL LETTER H",
+ ["lccode"]=0x10438,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10410, -- ð
+ },
+ [0x10411]={
+ ["category"]="lu",
+ ["description"]="DESERET CAPITAL LETTER PEE",
+ ["lccode"]=0x10439,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10411, -- ð‘
+ },
+ [0x10412]={
+ ["category"]="lu",
+ ["description"]="DESERET CAPITAL LETTER BEE",
+ ["lccode"]=0x1043A,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10412, -- ð’
+ },
+ [0x10413]={
+ ["category"]="lu",
+ ["description"]="DESERET CAPITAL LETTER TEE",
+ ["lccode"]=0x1043B,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10413, -- ð“
+ },
+ [0x10414]={
+ ["category"]="lu",
+ ["description"]="DESERET CAPITAL LETTER DEE",
+ ["lccode"]=0x1043C,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10414, -- ð”
+ },
+ [0x10415]={
+ ["category"]="lu",
+ ["description"]="DESERET CAPITAL LETTER CHEE",
+ ["lccode"]=0x1043D,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10415, -- ð•
+ },
+ [0x10416]={
+ ["category"]="lu",
+ ["description"]="DESERET CAPITAL LETTER JEE",
+ ["lccode"]=0x1043E,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10416, -- ð–
+ },
+ [0x10417]={
+ ["category"]="lu",
+ ["description"]="DESERET CAPITAL LETTER KAY",
+ ["lccode"]=0x1043F,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10417, -- ð—
+ },
+ [0x10418]={
+ ["category"]="lu",
+ ["description"]="DESERET CAPITAL LETTER GAY",
+ ["lccode"]=0x10440,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10418, -- ð˜
+ },
+ [0x10419]={
+ ["category"]="lu",
+ ["description"]="DESERET CAPITAL LETTER EF",
+ ["lccode"]=0x10441,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10419, -- ð™
+ },
+ [0x1041A]={
+ ["category"]="lu",
+ ["description"]="DESERET CAPITAL LETTER VEE",
+ ["lccode"]=0x10442,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1041A, -- ðš
+ },
+ [0x1041B]={
+ ["category"]="lu",
+ ["description"]="DESERET CAPITAL LETTER ETH",
+ ["lccode"]=0x10443,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1041B, -- ð›
+ },
+ [0x1041C]={
+ ["category"]="lu",
+ ["description"]="DESERET CAPITAL LETTER THEE",
+ ["lccode"]=0x10444,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1041C, -- ðœ
+ },
+ [0x1041D]={
+ ["category"]="lu",
+ ["description"]="DESERET CAPITAL LETTER ES",
+ ["lccode"]=0x10445,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1041D, -- ð
+ },
+ [0x1041E]={
+ ["category"]="lu",
+ ["description"]="DESERET CAPITAL LETTER ZEE",
+ ["lccode"]=0x10446,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1041E, -- ðž
+ },
+ [0x1041F]={
+ ["category"]="lu",
+ ["description"]="DESERET CAPITAL LETTER ESH",
+ ["lccode"]=0x10447,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1041F, -- ðŸ
+ },
+ [0x10420]={
+ ["category"]="lu",
+ ["description"]="DESERET CAPITAL LETTER ZHEE",
+ ["lccode"]=0x10448,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10420, -- ð 
+ },
+ [0x10421]={
+ ["category"]="lu",
+ ["description"]="DESERET CAPITAL LETTER ER",
+ ["lccode"]=0x10449,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10421, -- ð¡
+ },
+ [0x10422]={
+ ["category"]="lu",
+ ["description"]="DESERET CAPITAL LETTER EL",
+ ["lccode"]=0x1044A,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10422, -- ð¢
+ },
+ [0x10423]={
+ ["category"]="lu",
+ ["description"]="DESERET CAPITAL LETTER EM",
+ ["lccode"]=0x1044B,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10423, -- ð£
+ },
+ [0x10424]={
+ ["category"]="lu",
+ ["description"]="DESERET CAPITAL LETTER EN",
+ ["lccode"]=0x1044C,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10424, -- ð¤
+ },
+ [0x10425]={
+ ["category"]="lu",
+ ["description"]="DESERET CAPITAL LETTER ENG",
+ ["lccode"]=0x1044D,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10425, -- ð¥
+ },
+ [0x10426]={
+ ["category"]="lu",
+ ["description"]="DESERET CAPITAL LETTER OI",
+ ["lccode"]=0x1044E,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10426, -- ð¦
+ },
+ [0x10427]={
+ ["category"]="lu",
+ ["description"]="DESERET CAPITAL LETTER EW",
+ ["lccode"]=0x1044F,
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10427, -- ð§
+ },
+ [0x10428]={
+ ["category"]="ll",
+ ["description"]="DESERET SMALL LETTER LONG I",
+ ["linebreak"]="al",
+ ["uccode"]=0x10400,
+ ["unicodeslot"]=0x10428, -- ð¨
+ },
+ [0x10429]={
+ ["category"]="ll",
+ ["description"]="DESERET SMALL LETTER LONG E",
+ ["linebreak"]="al",
+ ["uccode"]=0x10401,
+ ["unicodeslot"]=0x10429, -- ð©
+ },
+ [0x1042A]={
+ ["category"]="ll",
+ ["description"]="DESERET SMALL LETTER LONG A",
+ ["linebreak"]="al",
+ ["uccode"]=0x10402,
+ ["unicodeslot"]=0x1042A, -- ðª
+ },
+ [0x1042B]={
+ ["category"]="ll",
+ ["description"]="DESERET SMALL LETTER LONG AH",
+ ["linebreak"]="al",
+ ["uccode"]=0x10403,
+ ["unicodeslot"]=0x1042B, -- ð«
+ },
+ [0x1042C]={
+ ["category"]="ll",
+ ["description"]="DESERET SMALL LETTER LONG O",
+ ["linebreak"]="al",
+ ["uccode"]=0x10404,
+ ["unicodeslot"]=0x1042C, -- ð¬
+ },
+ [0x1042D]={
+ ["category"]="ll",
+ ["description"]="DESERET SMALL LETTER LONG OO",
+ ["linebreak"]="al",
+ ["uccode"]=0x10405,
+ ["unicodeslot"]=0x1042D, -- ð­
+ },
+ [0x1042E]={
+ ["category"]="ll",
+ ["description"]="DESERET SMALL LETTER SHORT I",
+ ["linebreak"]="al",
+ ["uccode"]=0x10406,
+ ["unicodeslot"]=0x1042E, -- ð®
+ },
+ [0x1042F]={
+ ["category"]="ll",
+ ["description"]="DESERET SMALL LETTER SHORT E",
+ ["linebreak"]="al",
+ ["uccode"]=0x10407,
+ ["unicodeslot"]=0x1042F, -- ð¯
+ },
+ [0x10430]={
+ ["category"]="ll",
+ ["description"]="DESERET SMALL LETTER SHORT A",
+ ["linebreak"]="al",
+ ["uccode"]=0x10408,
+ ["unicodeslot"]=0x10430, -- ð°
+ },
+ [0x10431]={
+ ["category"]="ll",
+ ["description"]="DESERET SMALL LETTER SHORT AH",
+ ["linebreak"]="al",
+ ["uccode"]=0x10409,
+ ["unicodeslot"]=0x10431, -- ð±
+ },
+ [0x10432]={
+ ["category"]="ll",
+ ["description"]="DESERET SMALL LETTER SHORT O",
+ ["linebreak"]="al",
+ ["uccode"]=0x1040A,
+ ["unicodeslot"]=0x10432, -- ð²
+ },
+ [0x10433]={
+ ["category"]="ll",
+ ["description"]="DESERET SMALL LETTER SHORT OO",
+ ["linebreak"]="al",
+ ["uccode"]=0x1040B,
+ ["unicodeslot"]=0x10433, -- ð³
+ },
+ [0x10434]={
+ ["category"]="ll",
+ ["description"]="DESERET SMALL LETTER AY",
+ ["linebreak"]="al",
+ ["uccode"]=0x1040C,
+ ["unicodeslot"]=0x10434, -- ð´
+ },
+ [0x10435]={
+ ["category"]="ll",
+ ["description"]="DESERET SMALL LETTER OW",
+ ["linebreak"]="al",
+ ["uccode"]=0x1040D,
+ ["unicodeslot"]=0x10435, -- ðµ
+ },
+ [0x10436]={
+ ["category"]="ll",
+ ["description"]="DESERET SMALL LETTER WU",
+ ["linebreak"]="al",
+ ["uccode"]=0x1040E,
+ ["unicodeslot"]=0x10436, -- ð¶
+ },
+ [0x10437]={
+ ["category"]="ll",
+ ["description"]="DESERET SMALL LETTER YEE",
+ ["linebreak"]="al",
+ ["uccode"]=0x1040F,
+ ["unicodeslot"]=0x10437, -- ð·
+ },
+ [0x10438]={
+ ["category"]="ll",
+ ["description"]="DESERET SMALL LETTER H",
+ ["linebreak"]="al",
+ ["uccode"]=0x10410,
+ ["unicodeslot"]=0x10438, -- ð¸
+ },
+ [0x10439]={
+ ["category"]="ll",
+ ["description"]="DESERET SMALL LETTER PEE",
+ ["linebreak"]="al",
+ ["uccode"]=0x10411,
+ ["unicodeslot"]=0x10439, -- ð¹
+ },
+ [0x1043A]={
+ ["category"]="ll",
+ ["description"]="DESERET SMALL LETTER BEE",
+ ["linebreak"]="al",
+ ["uccode"]=0x10412,
+ ["unicodeslot"]=0x1043A, -- ðº
+ },
+ [0x1043B]={
+ ["category"]="ll",
+ ["description"]="DESERET SMALL LETTER TEE",
+ ["linebreak"]="al",
+ ["uccode"]=0x10413,
+ ["unicodeslot"]=0x1043B, -- ð»
+ },
+ [0x1043C]={
+ ["category"]="ll",
+ ["description"]="DESERET SMALL LETTER DEE",
+ ["linebreak"]="al",
+ ["uccode"]=0x10414,
+ ["unicodeslot"]=0x1043C, -- ð¼
+ },
+ [0x1043D]={
+ ["category"]="ll",
+ ["description"]="DESERET SMALL LETTER CHEE",
+ ["linebreak"]="al",
+ ["uccode"]=0x10415,
+ ["unicodeslot"]=0x1043D, -- ð½
+ },
+ [0x1043E]={
+ ["category"]="ll",
+ ["description"]="DESERET SMALL LETTER JEE",
+ ["linebreak"]="al",
+ ["uccode"]=0x10416,
+ ["unicodeslot"]=0x1043E, -- ð¾
+ },
+ [0x1043F]={
+ ["category"]="ll",
+ ["description"]="DESERET SMALL LETTER KAY",
+ ["linebreak"]="al",
+ ["uccode"]=0x10417,
+ ["unicodeslot"]=0x1043F, -- ð¿
+ },
+ [0x10440]={
+ ["category"]="ll",
+ ["description"]="DESERET SMALL LETTER GAY",
+ ["linebreak"]="al",
+ ["uccode"]=0x10418,
+ ["unicodeslot"]=0x10440, -- ð‘€
+ },
+ [0x10441]={
+ ["category"]="ll",
+ ["description"]="DESERET SMALL LETTER EF",
+ ["linebreak"]="al",
+ ["uccode"]=0x10419,
+ ["unicodeslot"]=0x10441, -- ð‘
+ },
+ [0x10442]={
+ ["category"]="ll",
+ ["description"]="DESERET SMALL LETTER VEE",
+ ["linebreak"]="al",
+ ["uccode"]=0x1041A,
+ ["unicodeslot"]=0x10442, -- ð‘‚
+ },
+ [0x10443]={
+ ["category"]="ll",
+ ["description"]="DESERET SMALL LETTER ETH",
+ ["linebreak"]="al",
+ ["uccode"]=0x1041B,
+ ["unicodeslot"]=0x10443, -- ð‘ƒ
+ },
+ [0x10444]={
+ ["category"]="ll",
+ ["description"]="DESERET SMALL LETTER THEE",
+ ["linebreak"]="al",
+ ["uccode"]=0x1041C,
+ ["unicodeslot"]=0x10444, -- ð‘„
+ },
+ [0x10445]={
+ ["category"]="ll",
+ ["description"]="DESERET SMALL LETTER ES",
+ ["linebreak"]="al",
+ ["uccode"]=0x1041D,
+ ["unicodeslot"]=0x10445, -- ð‘…
+ },
+ [0x10446]={
+ ["category"]="ll",
+ ["description"]="DESERET SMALL LETTER ZEE",
+ ["linebreak"]="al",
+ ["uccode"]=0x1041E,
+ ["unicodeslot"]=0x10446, -- ð‘†
+ },
+ [0x10447]={
+ ["category"]="ll",
+ ["description"]="DESERET SMALL LETTER ESH",
+ ["linebreak"]="al",
+ ["uccode"]=0x1041F,
+ ["unicodeslot"]=0x10447, -- ð‘‡
+ },
+ [0x10448]={
+ ["category"]="ll",
+ ["description"]="DESERET SMALL LETTER ZHEE",
+ ["linebreak"]="al",
+ ["uccode"]=0x10420,
+ ["unicodeslot"]=0x10448, -- ð‘ˆ
+ },
+ [0x10449]={
+ ["category"]="ll",
+ ["description"]="DESERET SMALL LETTER ER",
+ ["linebreak"]="al",
+ ["uccode"]=0x10421,
+ ["unicodeslot"]=0x10449, -- ð‘‰
+ },
+ [0x1044A]={
+ ["category"]="ll",
+ ["description"]="DESERET SMALL LETTER EL",
+ ["linebreak"]="al",
+ ["uccode"]=0x10422,
+ ["unicodeslot"]=0x1044A, -- ð‘Š
+ },
+ [0x1044B]={
+ ["category"]="ll",
+ ["description"]="DESERET SMALL LETTER EM",
+ ["linebreak"]="al",
+ ["uccode"]=0x10423,
+ ["unicodeslot"]=0x1044B, -- ð‘‹
+ },
+ [0x1044C]={
+ ["category"]="ll",
+ ["description"]="DESERET SMALL LETTER EN",
+ ["linebreak"]="al",
+ ["uccode"]=0x10424,
+ ["unicodeslot"]=0x1044C, -- ð‘Œ
+ },
+ [0x1044D]={
+ ["category"]="ll",
+ ["description"]="DESERET SMALL LETTER ENG",
+ ["linebreak"]="al",
+ ["uccode"]=0x10425,
+ ["unicodeslot"]=0x1044D, -- ð‘
+ },
+ [0x1044E]={
+ ["category"]="ll",
+ ["description"]="DESERET SMALL LETTER OI",
+ ["linebreak"]="al",
+ ["uccode"]=0x10426,
+ ["unicodeslot"]=0x1044E, -- ð‘Ž
+ },
+ [0x1044F]={
+ ["category"]="ll",
+ ["description"]="DESERET SMALL LETTER EW",
+ ["linebreak"]="al",
+ ["uccode"]=0x10427,
+ ["unicodeslot"]=0x1044F, -- ð‘
+ },
+ [0x10450]={
+ ["category"]="lo",
+ ["description"]="SHAVIAN LETTER PEEP",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10450, -- ð‘
+ },
+ [0x10451]={
+ ["category"]="lo",
+ ["description"]="SHAVIAN LETTER TOT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10451, -- ð‘‘
+ },
+ [0x10452]={
+ ["category"]="lo",
+ ["description"]="SHAVIAN LETTER KICK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10452, -- ð‘’
+ },
+ [0x10453]={
+ ["category"]="lo",
+ ["description"]="SHAVIAN LETTER FEE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10453, -- ð‘“
+ },
+ [0x10454]={
+ ["category"]="lo",
+ ["description"]="SHAVIAN LETTER THIGH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10454, -- ð‘”
+ },
+ [0x10455]={
+ ["category"]="lo",
+ ["description"]="SHAVIAN LETTER SO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10455, -- ð‘•
+ },
+ [0x10456]={
+ ["category"]="lo",
+ ["description"]="SHAVIAN LETTER SURE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10456, -- ð‘–
+ },
+ [0x10457]={
+ ["category"]="lo",
+ ["description"]="SHAVIAN LETTER CHURCH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10457, -- ð‘—
+ },
+ [0x10458]={
+ ["category"]="lo",
+ ["description"]="SHAVIAN LETTER YEA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10458, -- ð‘˜
+ },
+ [0x10459]={
+ ["category"]="lo",
+ ["description"]="SHAVIAN LETTER HUNG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10459, -- ð‘™
+ },
+ [0x1045A]={
+ ["category"]="lo",
+ ["description"]="SHAVIAN LETTER BIB",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1045A, -- ð‘š
+ },
+ [0x1045B]={
+ ["category"]="lo",
+ ["description"]="SHAVIAN LETTER DEAD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1045B, -- ð‘›
+ },
+ [0x1045C]={
+ ["category"]="lo",
+ ["description"]="SHAVIAN LETTER GAG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1045C, -- ð‘œ
+ },
+ [0x1045D]={
+ ["category"]="lo",
+ ["description"]="SHAVIAN LETTER VOW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1045D, -- ð‘
+ },
+ [0x1045E]={
+ ["category"]="lo",
+ ["description"]="SHAVIAN LETTER THEY",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1045E, -- ð‘ž
+ },
+ [0x1045F]={
+ ["category"]="lo",
+ ["description"]="SHAVIAN LETTER ZOO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1045F, -- ð‘Ÿ
+ },
+ [0x10460]={
+ ["category"]="lo",
+ ["description"]="SHAVIAN LETTER MEASURE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10460, -- ð‘ 
+ },
+ [0x10461]={
+ ["category"]="lo",
+ ["description"]="SHAVIAN LETTER JUDGE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10461, -- ð‘¡
+ },
+ [0x10462]={
+ ["category"]="lo",
+ ["description"]="SHAVIAN LETTER WOE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10462, -- ð‘¢
+ },
+ [0x10463]={
+ ["category"]="lo",
+ ["description"]="SHAVIAN LETTER HA-HA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10463, -- ð‘£
+ },
+ [0x10464]={
+ ["category"]="lo",
+ ["description"]="SHAVIAN LETTER LOLL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10464, -- ð‘¤
+ },
+ [0x10465]={
+ ["category"]="lo",
+ ["description"]="SHAVIAN LETTER MIME",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10465, -- ð‘¥
+ },
+ [0x10466]={
+ ["category"]="lo",
+ ["description"]="SHAVIAN LETTER IF",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10466, -- ð‘¦
+ },
+ [0x10467]={
+ ["category"]="lo",
+ ["description"]="SHAVIAN LETTER EGG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10467, -- ð‘§
+ },
+ [0x10468]={
+ ["category"]="lo",
+ ["description"]="SHAVIAN LETTER ASH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10468, -- ð‘¨
+ },
+ [0x10469]={
+ ["category"]="lo",
+ ["description"]="SHAVIAN LETTER ADO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10469, -- ð‘©
+ },
+ [0x1046A]={
+ ["category"]="lo",
+ ["description"]="SHAVIAN LETTER ON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1046A, -- ð‘ª
+ },
+ [0x1046B]={
+ ["category"]="lo",
+ ["description"]="SHAVIAN LETTER WOOL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1046B, -- ð‘«
+ },
+ [0x1046C]={
+ ["category"]="lo",
+ ["description"]="SHAVIAN LETTER OUT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1046C, -- ð‘¬
+ },
+ [0x1046D]={
+ ["category"]="lo",
+ ["description"]="SHAVIAN LETTER AH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1046D, -- ð‘­
+ },
+ [0x1046E]={
+ ["category"]="lo",
+ ["description"]="SHAVIAN LETTER ROAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1046E, -- ð‘®
+ },
+ [0x1046F]={
+ ["category"]="lo",
+ ["description"]="SHAVIAN LETTER NUN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1046F, -- ð‘¯
+ },
+ [0x10470]={
+ ["category"]="lo",
+ ["description"]="SHAVIAN LETTER EAT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10470, -- ð‘°
+ },
+ [0x10471]={
+ ["category"]="lo",
+ ["description"]="SHAVIAN LETTER AGE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10471, -- ð‘±
+ },
+ [0x10472]={
+ ["category"]="lo",
+ ["description"]="SHAVIAN LETTER ICE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10472, -- ð‘²
+ },
+ [0x10473]={
+ ["category"]="lo",
+ ["description"]="SHAVIAN LETTER UP",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10473, -- ð‘³
+ },
+ [0x10474]={
+ ["category"]="lo",
+ ["description"]="SHAVIAN LETTER OAK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10474, -- ð‘´
+ },
+ [0x10475]={
+ ["category"]="lo",
+ ["description"]="SHAVIAN LETTER OOZE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10475, -- ð‘µ
+ },
+ [0x10476]={
+ ["category"]="lo",
+ ["description"]="SHAVIAN LETTER OIL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10476, -- ð‘¶
+ },
+ [0x10477]={
+ ["category"]="lo",
+ ["description"]="SHAVIAN LETTER AWE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10477, -- ð‘·
+ },
+ [0x10478]={
+ ["category"]="lo",
+ ["description"]="SHAVIAN LETTER ARE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10478, -- ð‘¸
+ },
+ [0x10479]={
+ ["category"]="lo",
+ ["description"]="SHAVIAN LETTER OR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10479, -- ð‘¹
+ },
+ [0x1047A]={
+ ["category"]="lo",
+ ["description"]="SHAVIAN LETTER AIR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1047A, -- ð‘º
+ },
+ [0x1047B]={
+ ["category"]="lo",
+ ["description"]="SHAVIAN LETTER ERR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1047B, -- ð‘»
+ },
+ [0x1047C]={
+ ["category"]="lo",
+ ["description"]="SHAVIAN LETTER ARRAY",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1047C, -- ð‘¼
+ },
+ [0x1047D]={
+ ["category"]="lo",
+ ["description"]="SHAVIAN LETTER EAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1047D, -- ð‘½
+ },
+ [0x1047E]={
+ ["category"]="lo",
+ ["description"]="SHAVIAN LETTER IAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1047E, -- ð‘¾
+ },
+ [0x1047F]={
+ ["category"]="lo",
+ ["description"]="SHAVIAN LETTER YEW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1047F, -- ð‘¿
+ },
+ [0x10480]={
+ ["category"]="lo",
+ ["description"]="OSMANYA LETTER ALEF",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10480, -- ð’€
+ },
+ [0x10481]={
+ ["category"]="lo",
+ ["description"]="OSMANYA LETTER BA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10481, -- ð’
+ },
+ [0x10482]={
+ ["category"]="lo",
+ ["description"]="OSMANYA LETTER TA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10482, -- ð’‚
+ },
+ [0x10483]={
+ ["category"]="lo",
+ ["description"]="OSMANYA LETTER JA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10483, -- ð’ƒ
+ },
+ [0x10484]={
+ ["category"]="lo",
+ ["description"]="OSMANYA LETTER XA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10484, -- ð’„
+ },
+ [0x10485]={
+ ["category"]="lo",
+ ["description"]="OSMANYA LETTER KHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10485, -- ð’…
+ },
+ [0x10486]={
+ ["category"]="lo",
+ ["description"]="OSMANYA LETTER DEEL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10486, -- ð’†
+ },
+ [0x10487]={
+ ["category"]="lo",
+ ["description"]="OSMANYA LETTER RA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10487, -- ð’‡
+ },
+ [0x10488]={
+ ["category"]="lo",
+ ["description"]="OSMANYA LETTER SA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10488, -- ð’ˆ
+ },
+ [0x10489]={
+ ["category"]="lo",
+ ["description"]="OSMANYA LETTER SHIIN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10489, -- ð’‰
+ },
+ [0x1048A]={
+ ["category"]="lo",
+ ["description"]="OSMANYA LETTER DHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1048A, -- ð’Š
+ },
+ [0x1048B]={
+ ["category"]="lo",
+ ["description"]="OSMANYA LETTER CAYN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1048B, -- ð’‹
+ },
+ [0x1048C]={
+ ["category"]="lo",
+ ["description"]="OSMANYA LETTER GA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1048C, -- ð’Œ
+ },
+ [0x1048D]={
+ ["category"]="lo",
+ ["description"]="OSMANYA LETTER FA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1048D, -- ð’
+ },
+ [0x1048E]={
+ ["category"]="lo",
+ ["description"]="OSMANYA LETTER QAAF",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1048E, -- ð’Ž
+ },
+ [0x1048F]={
+ ["category"]="lo",
+ ["description"]="OSMANYA LETTER KAAF",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1048F, -- ð’
+ },
+ [0x10490]={
+ ["category"]="lo",
+ ["description"]="OSMANYA LETTER LAAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10490, -- ð’
+ },
+ [0x10491]={
+ ["category"]="lo",
+ ["description"]="OSMANYA LETTER MIIN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10491, -- ð’‘
+ },
+ [0x10492]={
+ ["category"]="lo",
+ ["description"]="OSMANYA LETTER NUUN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10492, -- ð’’
+ },
+ [0x10493]={
+ ["category"]="lo",
+ ["description"]="OSMANYA LETTER WAW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10493, -- ð’“
+ },
+ [0x10494]={
+ ["category"]="lo",
+ ["description"]="OSMANYA LETTER HA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10494, -- ð’”
+ },
+ [0x10495]={
+ ["category"]="lo",
+ ["description"]="OSMANYA LETTER YA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10495, -- ð’•
+ },
+ [0x10496]={
+ ["category"]="lo",
+ ["description"]="OSMANYA LETTER A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10496, -- ð’–
+ },
+ [0x10497]={
+ ["category"]="lo",
+ ["description"]="OSMANYA LETTER E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10497, -- ð’—
+ },
+ [0x10498]={
+ ["category"]="lo",
+ ["description"]="OSMANYA LETTER I",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10498, -- ð’˜
+ },
+ [0x10499]={
+ ["category"]="lo",
+ ["description"]="OSMANYA LETTER O",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10499, -- ð’™
+ },
+ [0x1049A]={
+ ["category"]="lo",
+ ["description"]="OSMANYA LETTER U",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1049A, -- ð’š
+ },
+ [0x1049B]={
+ ["category"]="lo",
+ ["description"]="OSMANYA LETTER AA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1049B, -- ð’›
+ },
+ [0x1049C]={
+ ["category"]="lo",
+ ["description"]="OSMANYA LETTER EE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1049C, -- ð’œ
+ },
+ [0x1049D]={
+ ["category"]="lo",
+ ["description"]="OSMANYA LETTER OO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1049D, -- ð’
+ },
+ [0x104A0]={
+ ["category"]="nd",
+ ["description"]="OSMANYA DIGIT ZERO",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x104A0, -- ð’ 
+ },
+ [0x104A1]={
+ ["category"]="nd",
+ ["description"]="OSMANYA DIGIT ONE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x104A1, -- ð’¡
+ },
+ [0x104A2]={
+ ["category"]="nd",
+ ["description"]="OSMANYA DIGIT TWO",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x104A2, -- ð’¢
+ },
+ [0x104A3]={
+ ["category"]="nd",
+ ["description"]="OSMANYA DIGIT THREE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x104A3, -- ð’£
+ },
+ [0x104A4]={
+ ["category"]="nd",
+ ["description"]="OSMANYA DIGIT FOUR",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x104A4, -- ð’¤
+ },
+ [0x104A5]={
+ ["category"]="nd",
+ ["description"]="OSMANYA DIGIT FIVE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x104A5, -- ð’¥
+ },
+ [0x104A6]={
+ ["category"]="nd",
+ ["description"]="OSMANYA DIGIT SIX",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x104A6, -- ð’¦
+ },
+ [0x104A7]={
+ ["category"]="nd",
+ ["description"]="OSMANYA DIGIT SEVEN",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x104A7, -- ð’§
+ },
+ [0x104A8]={
+ ["category"]="nd",
+ ["description"]="OSMANYA DIGIT EIGHT",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x104A8, -- ð’¨
+ },
+ [0x104A9]={
+ ["category"]="nd",
+ ["description"]="OSMANYA DIGIT NINE",
+ ["linebreak"]="nu",
+ ["unicodeslot"]=0x104A9, -- ð’©
+ },
+ [0x10800]={
+ ["category"]="lo",
+ ["description"]="CYPRIOT SYLLABLE A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10800, -- ð €
+ },
+ [0x10801]={
+ ["category"]="lo",
+ ["description"]="CYPRIOT SYLLABLE E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10801, -- ð 
+ },
+ [0x10802]={
+ ["category"]="lo",
+ ["description"]="CYPRIOT SYLLABLE I",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10802, -- ð ‚
+ },
+ [0x10803]={
+ ["category"]="lo",
+ ["description"]="CYPRIOT SYLLABLE O",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10803, -- ð ƒ
+ },
+ [0x10804]={
+ ["category"]="lo",
+ ["description"]="CYPRIOT SYLLABLE U",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10804, -- ð „
+ },
+ [0x10805]={
+ ["category"]="lo",
+ ["description"]="CYPRIOT SYLLABLE JA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10805, -- ð …
+ },
+ [0x10808]={
+ ["category"]="lo",
+ ["description"]="CYPRIOT SYLLABLE JO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10808, -- ð ˆ
+ },
+ [0x1080A]={
+ ["category"]="lo",
+ ["description"]="CYPRIOT SYLLABLE KA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1080A, -- ð Š
+ },
+ [0x1080B]={
+ ["category"]="lo",
+ ["description"]="CYPRIOT SYLLABLE KE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1080B, -- ð ‹
+ },
+ [0x1080C]={
+ ["category"]="lo",
+ ["description"]="CYPRIOT SYLLABLE KI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1080C, -- ð Œ
+ },
+ [0x1080D]={
+ ["category"]="lo",
+ ["description"]="CYPRIOT SYLLABLE KO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1080D, -- ð 
+ },
+ [0x1080E]={
+ ["category"]="lo",
+ ["description"]="CYPRIOT SYLLABLE KU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1080E, -- ð Ž
+ },
+ [0x1080F]={
+ ["category"]="lo",
+ ["description"]="CYPRIOT SYLLABLE LA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1080F, -- ð 
+ },
+ [0x10810]={
+ ["category"]="lo",
+ ["description"]="CYPRIOT SYLLABLE LE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10810, -- ð 
+ },
+ [0x10811]={
+ ["category"]="lo",
+ ["description"]="CYPRIOT SYLLABLE LI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10811, -- ð ‘
+ },
+ [0x10812]={
+ ["category"]="lo",
+ ["description"]="CYPRIOT SYLLABLE LO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10812, -- ð ’
+ },
+ [0x10813]={
+ ["category"]="lo",
+ ["description"]="CYPRIOT SYLLABLE LU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10813, -- ð “
+ },
+ [0x10814]={
+ ["category"]="lo",
+ ["description"]="CYPRIOT SYLLABLE MA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10814, -- ð ”
+ },
+ [0x10815]={
+ ["category"]="lo",
+ ["description"]="CYPRIOT SYLLABLE ME",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10815, -- ð •
+ },
+ [0x10816]={
+ ["category"]="lo",
+ ["description"]="CYPRIOT SYLLABLE MI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10816, -- ð –
+ },
+ [0x10817]={
+ ["category"]="lo",
+ ["description"]="CYPRIOT SYLLABLE MO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10817, -- ð —
+ },
+ [0x10818]={
+ ["category"]="lo",
+ ["description"]="CYPRIOT SYLLABLE MU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10818, -- ð ˜
+ },
+ [0x10819]={
+ ["category"]="lo",
+ ["description"]="CYPRIOT SYLLABLE NA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10819, -- ð ™
+ },
+ [0x1081A]={
+ ["category"]="lo",
+ ["description"]="CYPRIOT SYLLABLE NE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1081A, -- ð š
+ },
+ [0x1081B]={
+ ["category"]="lo",
+ ["description"]="CYPRIOT SYLLABLE NI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1081B, -- ð ›
+ },
+ [0x1081C]={
+ ["category"]="lo",
+ ["description"]="CYPRIOT SYLLABLE NO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1081C, -- ð œ
+ },
+ [0x1081D]={
+ ["category"]="lo",
+ ["description"]="CYPRIOT SYLLABLE NU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1081D, -- ð 
+ },
+ [0x1081E]={
+ ["category"]="lo",
+ ["description"]="CYPRIOT SYLLABLE PA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1081E, -- ð ž
+ },
+ [0x1081F]={
+ ["category"]="lo",
+ ["description"]="CYPRIOT SYLLABLE PE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1081F, -- ð Ÿ
+ },
+ [0x10820]={
+ ["category"]="lo",
+ ["description"]="CYPRIOT SYLLABLE PI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10820, -- ð  
+ },
+ [0x10821]={
+ ["category"]="lo",
+ ["description"]="CYPRIOT SYLLABLE PO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10821, -- ð ¡
+ },
+ [0x10822]={
+ ["category"]="lo",
+ ["description"]="CYPRIOT SYLLABLE PU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10822, -- ð ¢
+ },
+ [0x10823]={
+ ["category"]="lo",
+ ["description"]="CYPRIOT SYLLABLE RA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10823, -- ð £
+ },
+ [0x10824]={
+ ["category"]="lo",
+ ["description"]="CYPRIOT SYLLABLE RE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10824, -- ð ¤
+ },
+ [0x10825]={
+ ["category"]="lo",
+ ["description"]="CYPRIOT SYLLABLE RI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10825, -- ð ¥
+ },
+ [0x10826]={
+ ["category"]="lo",
+ ["description"]="CYPRIOT SYLLABLE RO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10826, -- ð ¦
+ },
+ [0x10827]={
+ ["category"]="lo",
+ ["description"]="CYPRIOT SYLLABLE RU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10827, -- ð §
+ },
+ [0x10828]={
+ ["category"]="lo",
+ ["description"]="CYPRIOT SYLLABLE SA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10828, -- ð ¨
+ },
+ [0x10829]={
+ ["category"]="lo",
+ ["description"]="CYPRIOT SYLLABLE SE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10829, -- ð ©
+ },
+ [0x1082A]={
+ ["category"]="lo",
+ ["description"]="CYPRIOT SYLLABLE SI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1082A, -- ð ª
+ },
+ [0x1082B]={
+ ["category"]="lo",
+ ["description"]="CYPRIOT SYLLABLE SO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1082B, -- ð «
+ },
+ [0x1082C]={
+ ["category"]="lo",
+ ["description"]="CYPRIOT SYLLABLE SU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1082C, -- ð ¬
+ },
+ [0x1082D]={
+ ["category"]="lo",
+ ["description"]="CYPRIOT SYLLABLE TA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1082D, -- ð ­
+ },
+ [0x1082E]={
+ ["category"]="lo",
+ ["description"]="CYPRIOT SYLLABLE TE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1082E, -- ð ®
+ },
+ [0x1082F]={
+ ["category"]="lo",
+ ["description"]="CYPRIOT SYLLABLE TI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1082F, -- ð ¯
+ },
+ [0x10830]={
+ ["category"]="lo",
+ ["description"]="CYPRIOT SYLLABLE TO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10830, -- ð °
+ },
+ [0x10831]={
+ ["category"]="lo",
+ ["description"]="CYPRIOT SYLLABLE TU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10831, -- ð ±
+ },
+ [0x10832]={
+ ["category"]="lo",
+ ["description"]="CYPRIOT SYLLABLE WA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10832, -- ð ²
+ },
+ [0x10833]={
+ ["category"]="lo",
+ ["description"]="CYPRIOT SYLLABLE WE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10833, -- ð ³
+ },
+ [0x10834]={
+ ["category"]="lo",
+ ["description"]="CYPRIOT SYLLABLE WI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10834, -- ð ´
+ },
+ [0x10835]={
+ ["category"]="lo",
+ ["description"]="CYPRIOT SYLLABLE WO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10835, -- ð µ
+ },
+ [0x10837]={
+ ["category"]="lo",
+ ["description"]="CYPRIOT SYLLABLE XA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10837, -- ð ·
+ },
+ [0x10838]={
+ ["category"]="lo",
+ ["description"]="CYPRIOT SYLLABLE XE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10838, -- ð ¸
+ },
+ [0x1083C]={
+ ["category"]="lo",
+ ["description"]="CYPRIOT SYLLABLE ZA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1083C, -- ð ¼
+ },
+ [0x1083F]={
+ ["category"]="lo",
+ ["description"]="CYPRIOT SYLLABLE ZO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1083F, -- ð ¿
+ },
+ [0x10900]={
+ ["category"]="lo",
+ ["description"]="PHOENICIAN LETTER ALF",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10900, -- ð¤€
+ },
+ [0x10901]={
+ ["category"]="lo",
+ ["description"]="PHOENICIAN LETTER BET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10901, -- ð¤
+ },
+ [0x10902]={
+ ["category"]="lo",
+ ["description"]="PHOENICIAN LETTER GAML",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10902, -- ð¤‚
+ },
+ [0x10903]={
+ ["category"]="lo",
+ ["description"]="PHOENICIAN LETTER DELT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10903, -- ð¤ƒ
+ },
+ [0x10904]={
+ ["category"]="lo",
+ ["description"]="PHOENICIAN LETTER HE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10904, -- ð¤„
+ },
+ [0x10905]={
+ ["category"]="lo",
+ ["description"]="PHOENICIAN LETTER WAU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10905, -- ð¤…
+ },
+ [0x10906]={
+ ["category"]="lo",
+ ["description"]="PHOENICIAN LETTER ZAI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10906, -- ð¤†
+ },
+ [0x10907]={
+ ["category"]="lo",
+ ["description"]="PHOENICIAN LETTER HET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10907, -- ð¤‡
+ },
+ [0x10908]={
+ ["category"]="lo",
+ ["description"]="PHOENICIAN LETTER TET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10908, -- ð¤ˆ
+ },
+ [0x10909]={
+ ["category"]="lo",
+ ["description"]="PHOENICIAN LETTER YOD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10909, -- ð¤‰
+ },
+ [0x1090A]={
+ ["category"]="lo",
+ ["description"]="PHOENICIAN LETTER KAF",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1090A, -- ð¤Š
+ },
+ [0x1090B]={
+ ["category"]="lo",
+ ["description"]="PHOENICIAN LETTER LAMD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1090B, -- ð¤‹
+ },
+ [0x1090C]={
+ ["category"]="lo",
+ ["description"]="PHOENICIAN LETTER MEM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1090C, -- ð¤Œ
+ },
+ [0x1090D]={
+ ["category"]="lo",
+ ["description"]="PHOENICIAN LETTER NUN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1090D, -- ð¤
+ },
+ [0x1090E]={
+ ["category"]="lo",
+ ["description"]="PHOENICIAN LETTER SEMK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1090E, -- ð¤Ž
+ },
+ [0x1090F]={
+ ["category"]="lo",
+ ["description"]="PHOENICIAN LETTER AIN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1090F, -- ð¤
+ },
+ [0x10910]={
+ ["category"]="lo",
+ ["description"]="PHOENICIAN LETTER PE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10910, -- ð¤
+ },
+ [0x10911]={
+ ["category"]="lo",
+ ["description"]="PHOENICIAN LETTER SADE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10911, -- ð¤‘
+ },
+ [0x10912]={
+ ["category"]="lo",
+ ["description"]="PHOENICIAN LETTER QOF",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10912, -- ð¤’
+ },
+ [0x10913]={
+ ["category"]="lo",
+ ["description"]="PHOENICIAN LETTER ROSH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10913, -- ð¤“
+ },
+ [0x10914]={
+ ["category"]="lo",
+ ["description"]="PHOENICIAN LETTER SHIN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10914, -- ð¤”
+ },
+ [0x10915]={
+ ["category"]="lo",
+ ["description"]="PHOENICIAN LETTER TAU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10915, -- ð¤•
+ },
+ [0x10916]={
+ ["category"]="no",
+ ["description"]="PHOENICIAN NUMBER ONE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10916, -- ð¤–
+ },
+ [0x10917]={
+ ["category"]="no",
+ ["description"]="PHOENICIAN NUMBER TEN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10917, -- ð¤—
+ },
+ [0x10918]={
+ ["category"]="no",
+ ["description"]="PHOENICIAN NUMBER TWENTY",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10918, -- ð¤˜
+ },
+ [0x10919]={
+ ["category"]="no",
+ ["description"]="PHOENICIAN NUMBER ONE HUNDRED",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10919, -- ð¤™
+ },
+ [0x1091F]={
+ ["category"]="po",
+ ["description"]="PHOENICIAN WORD SEPARATOR",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x1091F, -- ð¤Ÿ
+ },
+ [0x10A00]={
+ ["category"]="lo",
+ ["description"]="KHAROSHTHI LETTER A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10A00, -- ð¨€
+ },
+ [0x10A01]={
+ ["category"]="mn",
+ ["description"]="KHAROSHTHI VOWEL SIGN I",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x10A01, -- ð¨
+ },
+ [0x10A02]={
+ ["category"]="mn",
+ ["description"]="KHAROSHTHI VOWEL SIGN U",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x10A02, -- ð¨‚
+ },
+ [0x10A03]={
+ ["category"]="mn",
+ ["description"]="KHAROSHTHI VOWEL SIGN VOCALIC R",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x10A03, -- ð¨ƒ
+ },
+ [0x10A05]={
+ ["category"]="mn",
+ ["description"]="KHAROSHTHI VOWEL SIGN E",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x10A05, -- ð¨…
+ },
+ [0x10A06]={
+ ["category"]="mn",
+ ["description"]="KHAROSHTHI VOWEL SIGN O",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x10A06, -- ð¨†
+ },
+ [0x10A0C]={
+ ["category"]="mn",
+ ["description"]="KHAROSHTHI VOWEL LENGTH MARK",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x10A0C, -- ð¨Œ
+ },
+ [0x10A0D]={
+ ["category"]="mn",
+ ["description"]="KHAROSHTHI SIGN DOUBLE RING BELOW",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x10A0D, -- ð¨
+ },
+ [0x10A0E]={
+ ["category"]="mn",
+ ["description"]="KHAROSHTHI SIGN ANUSVARA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x10A0E, -- ð¨Ž
+ },
+ [0x10A0F]={
+ ["category"]="mn",
+ ["description"]="KHAROSHTHI SIGN VISARGA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x10A0F, -- ð¨
+ },
+ [0x10A10]={
+ ["category"]="lo",
+ ["description"]="KHAROSHTHI LETTER KA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10A10, -- ð¨
+ },
+ [0x10A11]={
+ ["category"]="lo",
+ ["description"]="KHAROSHTHI LETTER KHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10A11, -- ð¨‘
+ },
+ [0x10A12]={
+ ["category"]="lo",
+ ["description"]="KHAROSHTHI LETTER GA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10A12, -- ð¨’
+ },
+ [0x10A13]={
+ ["category"]="lo",
+ ["description"]="KHAROSHTHI LETTER GHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10A13, -- ð¨“
+ },
+ [0x10A15]={
+ ["category"]="lo",
+ ["description"]="KHAROSHTHI LETTER CA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10A15, -- ð¨•
+ },
+ [0x10A16]={
+ ["category"]="lo",
+ ["description"]="KHAROSHTHI LETTER CHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10A16, -- ð¨–
+ },
+ [0x10A17]={
+ ["category"]="lo",
+ ["description"]="KHAROSHTHI LETTER JA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10A17, -- ð¨—
+ },
+ [0x10A19]={
+ ["category"]="lo",
+ ["description"]="KHAROSHTHI LETTER NYA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10A19, -- ð¨™
+ },
+ [0x10A1A]={
+ ["category"]="lo",
+ ["description"]="KHAROSHTHI LETTER TTA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10A1A, -- ð¨š
+ },
+ [0x10A1B]={
+ ["category"]="lo",
+ ["description"]="KHAROSHTHI LETTER TTHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10A1B, -- ð¨›
+ },
+ [0x10A1C]={
+ ["category"]="lo",
+ ["description"]="KHAROSHTHI LETTER DDA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10A1C, -- ð¨œ
+ },
+ [0x10A1D]={
+ ["category"]="lo",
+ ["description"]="KHAROSHTHI LETTER DDHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10A1D, -- ð¨
+ },
+ [0x10A1E]={
+ ["category"]="lo",
+ ["description"]="KHAROSHTHI LETTER NNA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10A1E, -- ð¨ž
+ },
+ [0x10A1F]={
+ ["category"]="lo",
+ ["description"]="KHAROSHTHI LETTER TA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10A1F, -- ð¨Ÿ
+ },
+ [0x10A20]={
+ ["category"]="lo",
+ ["description"]="KHAROSHTHI LETTER THA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10A20, -- ð¨ 
+ },
+ [0x10A21]={
+ ["category"]="lo",
+ ["description"]="KHAROSHTHI LETTER DA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10A21, -- ð¨¡
+ },
+ [0x10A22]={
+ ["category"]="lo",
+ ["description"]="KHAROSHTHI LETTER DHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10A22, -- ð¨¢
+ },
+ [0x10A23]={
+ ["category"]="lo",
+ ["description"]="KHAROSHTHI LETTER NA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10A23, -- ð¨£
+ },
+ [0x10A24]={
+ ["category"]="lo",
+ ["description"]="KHAROSHTHI LETTER PA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10A24, -- ð¨¤
+ },
+ [0x10A25]={
+ ["category"]="lo",
+ ["description"]="KHAROSHTHI LETTER PHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10A25, -- ð¨¥
+ },
+ [0x10A26]={
+ ["category"]="lo",
+ ["description"]="KHAROSHTHI LETTER BA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10A26, -- ð¨¦
+ },
+ [0x10A27]={
+ ["category"]="lo",
+ ["description"]="KHAROSHTHI LETTER BHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10A27, -- ð¨§
+ },
+ [0x10A28]={
+ ["category"]="lo",
+ ["description"]="KHAROSHTHI LETTER MA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10A28, -- ð¨¨
+ },
+ [0x10A29]={
+ ["category"]="lo",
+ ["description"]="KHAROSHTHI LETTER YA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10A29, -- ð¨©
+ },
+ [0x10A2A]={
+ ["category"]="lo",
+ ["description"]="KHAROSHTHI LETTER RA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10A2A, -- ð¨ª
+ },
+ [0x10A2B]={
+ ["category"]="lo",
+ ["description"]="KHAROSHTHI LETTER LA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10A2B, -- ð¨«
+ },
+ [0x10A2C]={
+ ["category"]="lo",
+ ["description"]="KHAROSHTHI LETTER VA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10A2C, -- ð¨¬
+ },
+ [0x10A2D]={
+ ["category"]="lo",
+ ["description"]="KHAROSHTHI LETTER SHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10A2D, -- ð¨­
+ },
+ [0x10A2E]={
+ ["category"]="lo",
+ ["description"]="KHAROSHTHI LETTER SSA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10A2E, -- ð¨®
+ },
+ [0x10A2F]={
+ ["category"]="lo",
+ ["description"]="KHAROSHTHI LETTER SA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10A2F, -- ð¨¯
+ },
+ [0x10A30]={
+ ["category"]="lo",
+ ["description"]="KHAROSHTHI LETTER ZA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10A30, -- ð¨°
+ },
+ [0x10A31]={
+ ["category"]="lo",
+ ["description"]="KHAROSHTHI LETTER HA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10A31, -- ð¨±
+ },
+ [0x10A32]={
+ ["category"]="lo",
+ ["description"]="KHAROSHTHI LETTER KKA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10A32, -- ð¨²
+ },
+ [0x10A33]={
+ ["category"]="lo",
+ ["description"]="KHAROSHTHI LETTER TTTHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10A33, -- ð¨³
+ },
+ [0x10A38]={
+ ["category"]="mn",
+ ["description"]="KHAROSHTHI SIGN BAR ABOVE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x10A38, -- ð¨¸
+ },
+ [0x10A39]={
+ ["category"]="mn",
+ ["description"]="KHAROSHTHI SIGN CAUDA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x10A39, -- ð¨¹
+ },
+ [0x10A3A]={
+ ["category"]="mn",
+ ["description"]="KHAROSHTHI SIGN DOT BELOW",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x10A3A, -- ð¨º
+ },
+ [0x10A3F]={
+ ["category"]="mn",
+ ["description"]="KHAROSHTHI VIRAMA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x10A3F, -- ð¨¿
+ },
+ [0x10A40]={
+ ["category"]="no",
+ ["description"]="KHAROSHTHI DIGIT ONE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10A40, -- ð©€
+ },
+ [0x10A41]={
+ ["category"]="no",
+ ["description"]="KHAROSHTHI DIGIT TWO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10A41, -- ð©
+ },
+ [0x10A42]={
+ ["category"]="no",
+ ["description"]="KHAROSHTHI DIGIT THREE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10A42, -- ð©‚
+ },
+ [0x10A43]={
+ ["category"]="no",
+ ["description"]="KHAROSHTHI DIGIT FOUR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10A43, -- ð©ƒ
+ },
+ [0x10A44]={
+ ["category"]="no",
+ ["description"]="KHAROSHTHI NUMBER TEN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10A44, -- ð©„
+ },
+ [0x10A45]={
+ ["category"]="no",
+ ["description"]="KHAROSHTHI NUMBER TWENTY",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10A45, -- ð©…
+ },
+ [0x10A46]={
+ ["category"]="no",
+ ["description"]="KHAROSHTHI NUMBER ONE HUNDRED",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10A46, -- ð©†
+ },
+ [0x10A47]={
+ ["category"]="no",
+ ["description"]="KHAROSHTHI NUMBER ONE THOUSAND",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10A47, -- ð©‡
+ },
+ [0x10A50]={
+ ["category"]="po",
+ ["description"]="KHAROSHTHI PUNCTUATION DOT",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x10A50, -- ð©
+ },
+ [0x10A51]={
+ ["category"]="po",
+ ["description"]="KHAROSHTHI PUNCTUATION SMALL CIRCLE",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x10A51, -- ð©‘
+ },
+ [0x10A52]={
+ ["category"]="po",
+ ["description"]="KHAROSHTHI PUNCTUATION CIRCLE",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x10A52, -- ð©’
+ },
+ [0x10A53]={
+ ["category"]="po",
+ ["description"]="KHAROSHTHI PUNCTUATION CRESCENT BAR",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x10A53, -- ð©“
+ },
+ [0x10A54]={
+ ["category"]="po",
+ ["description"]="KHAROSHTHI PUNCTUATION MANGALAM",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x10A54, -- ð©”
+ },
+ [0x10A55]={
+ ["category"]="po",
+ ["description"]="KHAROSHTHI PUNCTUATION LOTUS",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x10A55, -- ð©•
+ },
+ [0x10A56]={
+ ["category"]="po",
+ ["description"]="KHAROSHTHI PUNCTUATION DANDA",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x10A56, -- ð©–
+ },
+ [0x10A57]={
+ ["category"]="po",
+ ["description"]="KHAROSHTHI PUNCTUATION DOUBLE DANDA",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x10A57, -- ð©—
+ },
+ [0x10A58]={
+ ["category"]="po",
+ ["description"]="KHAROSHTHI PUNCTUATION LINES",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x10A58, -- ð©˜
+ },
+ [0x12000]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12000, -- ð’€€
+ },
+ [0x12001]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN A TIMES A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12001, -- ð’€
+ },
+ [0x12002]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN A TIMES BAD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12002, -- 𒀂
+ },
+ [0x12003]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN A TIMES GAN0x0002 TENU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12003, -- 𒀃
+ },
+ [0x12004]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN A TIMES HA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12004, -- 𒀄
+ },
+ [0x12005]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN A TIMES IGI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12005, -- ð’€…
+ },
+ [0x12006]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN A TIMES LAGAR GUNU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12006, -- 𒀆
+ },
+ [0x12007]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN A TIMES MUSH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12007, -- 𒀇
+ },
+ [0x12008]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN A TIMES SAG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12008, -- 𒀈
+ },
+ [0x12009]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN A0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12009, -- 𒀉
+ },
+ [0x1200A]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN AB",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1200A, -- 𒀊
+ },
+ [0x1200B]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN AB TIMES ASH0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1200B, -- 𒀋
+ },
+ [0x1200C]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN AB TIMES DUN0x0003 GUNU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1200C, -- 𒀌
+ },
+ [0x1200D]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN AB TIMES GAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1200D, -- ð’€
+ },
+ [0x1200E]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN AB TIMES GAN0x0002 TENU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1200E, -- 𒀎
+ },
+ [0x1200F]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN AB TIMES HA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1200F, -- ð’€
+ },
+ [0x12010]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN AB TIMES IGI GUNU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12010, -- ð’€
+ },
+ [0x12011]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN AB TIMES IMIN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12011, -- 𒀑
+ },
+ [0x12012]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN AB TIMES LAGAB",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12012, -- ð’€’
+ },
+ [0x12013]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN AB TIMES SHESH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12013, -- 𒀓
+ },
+ [0x12014]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN AB TIMES U PLUS U PLUS U",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12014, -- ð’€”
+ },
+ [0x12015]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN AB GUNU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12015, -- 𒀕
+ },
+ [0x12016]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN AB0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12016, -- ð’€–
+ },
+ [0x12017]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN AB0x0002 TIMES BALAG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12017, -- ð’€—
+ },
+ [0x12018]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN AB0x0002 TIMES GAN0x0002 TENU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12018, -- 𒀘
+ },
+ [0x12019]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN AB0x0002 TIMES ME PLUS EN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12019, -- ð’€™
+ },
+ [0x1201A]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN AB0x0002 TIMES SHA0x0003",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1201A, -- 𒀚
+ },
+ [0x1201B]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN AB0x0002 TIMES TAK0x0004",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1201B, -- ð’€›
+ },
+ [0x1201C]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN AD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1201C, -- 𒀜
+ },
+ [0x1201D]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN AK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1201D, -- ð’€
+ },
+ [0x1201E]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN AK TIMES ERIN0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1201E, -- 𒀞
+ },
+ [0x1201F]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN AK TIMES SHITA PLUS GISH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1201F, -- 𒀟
+ },
+ [0x12020]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN AL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12020, -- ð’€ 
+ },
+ [0x12021]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN AL TIMES AL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12021, -- 𒀡
+ },
+ [0x12022]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN AL TIMES DIM0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12022, -- ð’€¢
+ },
+ [0x12023]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN AL TIMES GISH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12023, -- ð’€£
+ },
+ [0x12024]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN AL TIMES HA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12024, -- 𒀤
+ },
+ [0x12025]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN AL TIMES KAD0x0003",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12025, -- ð’€¥
+ },
+ [0x12026]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN AL TIMES KI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12026, -- 𒀦
+ },
+ [0x12027]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN AL TIMES SHE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12027, -- 𒀧
+ },
+ [0x12028]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN AL TIMES USH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12028, -- 𒀨
+ },
+ [0x12029]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN ALAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12029, -- 𒀩
+ },
+ [0x1202A]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN ALEPH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1202A, -- 𒀪
+ },
+ [0x1202B]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN AMAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1202B, -- 𒀫
+ },
+ [0x1202C]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN AMAR TIMES SHE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1202C, -- 𒀬
+ },
+ [0x1202D]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN AN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1202D, -- ð’€­
+ },
+ [0x1202E]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN AN OVER AN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1202E, -- ð’€®
+ },
+ [0x1202F]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN AN THREE TIMES",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1202F, -- 𒀯
+ },
+ [0x12030]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN AN PLUS NAGA OPPOSING AN PLUS NAGA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12030, -- ð’€°
+ },
+ [0x12031]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN AN PLUS NAGA SQUARED",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12031, -- ð’€±
+ },
+ [0x12032]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN ANSHE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12032, -- ð’€²
+ },
+ [0x12033]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN APIN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12033, -- ð’€³
+ },
+ [0x12034]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN ARAD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12034, -- ð’€´
+ },
+ [0x12035]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN ARAD TIMES KUR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12035, -- ð’€µ
+ },
+ [0x12036]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN ARKAB",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12036, -- 𒀶
+ },
+ [0x12037]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN ASAL0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12037, -- ð’€·
+ },
+ [0x12038]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN ASH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12038, -- 𒀸
+ },
+ [0x12039]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN ASH ZIDA TENU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12039, -- ð’€¹
+ },
+ [0x1203A]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN ASH KABA TENU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1203A, -- 𒀺
+ },
+ [0x1203B]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN ASH OVER ASH TUG0x0002 OVER TUG0x0002 TUG0x0002 OVER TUG0x0002 PAP",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1203B, -- ð’€»
+ },
+ [0x1203C]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN ASH OVER ASH OVER ASH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1203C, -- ð’€¼
+ },
+ [0x1203D]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN ASH OVER ASH OVER ASH CROSSING ASH OVER ASH OVER ASH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1203D, -- ð’€½
+ },
+ [0x1203E]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN ASH0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1203E, -- ð’€¾
+ },
+ [0x1203F]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN ASHGAB",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1203F, -- 𒀿
+ },
+ [0x12040]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN BA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12040, -- ð’€
+ },
+ [0x12041]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN BAD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12041, -- ð’
+ },
+ [0x12042]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN BAG0x0003",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12042, -- ð’‚
+ },
+ [0x12043]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN BAHAR0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12043, -- ð’ƒ
+ },
+ [0x12044]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN BAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12044, -- ð’„
+ },
+ [0x12045]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN BAL OVER BAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12045, -- ð’…
+ },
+ [0x12046]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN BALAG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12046, -- ð’†
+ },
+ [0x12047]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12047, -- ð’‡
+ },
+ [0x12048]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN BARA0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12048, -- ð’ˆ
+ },
+ [0x12049]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN BI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12049, -- ð’‰
+ },
+ [0x1204A]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN BI TIMES A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1204A, -- ð’Š
+ },
+ [0x1204B]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN BI TIMES GAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1204B, -- ð’‹
+ },
+ [0x1204C]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN BI TIMES IGI GUNU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1204C, -- ð’Œ
+ },
+ [0x1204D]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN BU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1204D, -- ð’
+ },
+ [0x1204E]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN BU OVER BU AB",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1204E, -- ð’Ž
+ },
+ [0x1204F]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN BU OVER BU UN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1204F, -- ð’
+ },
+ [0x12050]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN BU CROSSING BU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12050, -- ð’
+ },
+ [0x12051]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN BULUG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12051, -- ð’‘
+ },
+ [0x12052]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN BULUG OVER BULUG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12052, -- ð’’
+ },
+ [0x12053]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN BUR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12053, -- ð’“
+ },
+ [0x12054]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN BUR0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12054, -- ð’”
+ },
+ [0x12055]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN DA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12055, -- ð’•
+ },
+ [0x12056]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN DAG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12056, -- ð’–
+ },
+ [0x12057]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN DAG KISIM0x0005 TIMES A PLUS MASH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12057, -- ð’—
+ },
+ [0x12058]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN DAG KISIM0x0005 TIMES AMAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12058, -- ð’˜
+ },
+ [0x12059]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN DAG KISIM0x0005 TIMES BALAG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12059, -- ð’™
+ },
+ [0x1205A]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN DAG KISIM0x0005 TIMES BI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1205A, -- ð’š
+ },
+ [0x1205B]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN DAG KISIM0x0005 TIMES GA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1205B, -- ð’›
+ },
+ [0x1205C]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN DAG KISIM0x0005 TIMES GA PLUS MASH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1205C, -- ð’œ
+ },
+ [0x1205D]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN DAG KISIM0x0005 TIMES GI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1205D, -- ð’
+ },
+ [0x1205E]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN DAG KISIM0x0005 TIMES GIR0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1205E, -- ð’ž
+ },
+ [0x1205F]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN DAG KISIM0x0005 TIMES GUD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1205F, -- ð’Ÿ
+ },
+ [0x12060]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN DAG KISIM0x0005 TIMES HA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12060, -- ð’ 
+ },
+ [0x12061]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN DAG KISIM0x0005 TIMES IR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12061, -- ð’¡
+ },
+ [0x12062]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN DAG KISIM0x0005 TIMES IR PLUS LU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12062, -- ð’¢
+ },
+ [0x12063]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN DAG KISIM0x0005 TIMES KAK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12063, -- ð’£
+ },
+ [0x12064]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN DAG KISIM0x0005 TIMES LA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12064, -- ð’¤
+ },
+ [0x12065]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN DAG KISIM0x0005 TIMES LU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12065, -- ð’¥
+ },
+ [0x12066]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN DAG KISIM0x0005 TIMES LU PLUS MASH0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12066, -- ð’¦
+ },
+ [0x12067]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN DAG KISIM0x0005 TIMES LUM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12067, -- ð’§
+ },
+ [0x12068]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN DAG KISIM0x0005 TIMES NE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12068, -- ð’¨
+ },
+ [0x12069]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN DAG KISIM0x0005 TIMES PAP PLUS PAP",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12069, -- ð’©
+ },
+ [0x1206A]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN DAG KISIM0x0005 TIMES SI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1206A, -- ð’ª
+ },
+ [0x1206B]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN DAG KISIM0x0005 TIMES TAK0x0004",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1206B, -- ð’«
+ },
+ [0x1206C]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN DAG KISIM0x0005 TIMES U0x0002 PLUS GIR0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1206C, -- ð’¬
+ },
+ [0x1206D]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN DAG KISIM0x0005 TIMES USH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1206D, -- ð’­
+ },
+ [0x1206E]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN DAM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1206E, -- ð’®
+ },
+ [0x1206F]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN DAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1206F, -- ð’¯
+ },
+ [0x12070]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN DARA0x0003",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12070, -- ð’°
+ },
+ [0x12071]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN DARA0x0004",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12071, -- ð’±
+ },
+ [0x12072]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN DI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12072, -- ð’²
+ },
+ [0x12073]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN DIB",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12073, -- ð’³
+ },
+ [0x12074]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN DIM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12074, -- ð’´
+ },
+ [0x12075]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN DIM TIMES SHE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12075, -- ð’µ
+ },
+ [0x12076]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN DIM0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12076, -- ð’¶
+ },
+ [0x12077]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN DIN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12077, -- ð’·
+ },
+ [0x12078]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN DIN KASKAL U GUNU DISH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12078, -- ð’¸
+ },
+ [0x12079]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN DISH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12079, -- ð’¹
+ },
+ [0x1207A]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN DU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1207A, -- ð’º
+ },
+ [0x1207B]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN DU OVER DU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1207B, -- ð’»
+ },
+ [0x1207C]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN DU GUNU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1207C, -- ð’¼
+ },
+ [0x1207D]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN DU SHESHIG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1207D, -- ð’½
+ },
+ [0x1207E]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN DUB",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1207E, -- ð’¾
+ },
+ [0x1207F]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN DUB TIMES ESH0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1207F, -- ð’¿
+ },
+ [0x12080]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN DUB0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12080, -- ð’‚€
+ },
+ [0x12081]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN DUG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12081, -- ð’‚
+ },
+ [0x12082]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN DUGUD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12082, -- ð’‚‚
+ },
+ [0x12083]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN DUH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12083, -- 𒂃
+ },
+ [0x12084]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN DUN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12084, -- ð’‚„
+ },
+ [0x12085]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN DUN0x0003",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12085, -- ð’‚…
+ },
+ [0x12086]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN DUN0x0003 GUNU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12086, -- 𒂆
+ },
+ [0x12087]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN DUN0x0003 GUNU GUNU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12087, -- 𒂇
+ },
+ [0x12088]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN DUN0x0004",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12088, -- 𒂈
+ },
+ [0x12089]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN DUR0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12089, -- 𒂉
+ },
+ [0x1208A]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1208A, -- ð’‚Š
+ },
+ [0x1208B]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN E TIMES PAP",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1208B, -- ð’‚‹
+ },
+ [0x1208C]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN E OVER E NUN OVER NUN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1208C, -- 𒂌
+ },
+ [0x1208D]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN E0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1208D, -- ð’‚
+ },
+ [0x1208E]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN E0x0002 TIMES A PLUS HA PLUS DA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1208E, -- ð’‚Ž
+ },
+ [0x1208F]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN E0x0002 TIMES GAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1208F, -- ð’‚
+ },
+ [0x12090]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN E0x0002 TIMES MI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12090, -- ð’‚
+ },
+ [0x12091]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN E0x0002 TIMES SAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12091, -- ð’‚‘
+ },
+ [0x12092]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN E0x0002 TIMES SHE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12092, -- ð’‚’
+ },
+ [0x12093]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN E0x0002 TIMES U",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12093, -- ð’‚“
+ },
+ [0x12094]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN EDIN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12094, -- ð’‚”
+ },
+ [0x12095]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN EGIR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12095, -- ð’‚•
+ },
+ [0x12096]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN EL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12096, -- ð’‚–
+ },
+ [0x12097]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN EN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12097, -- ð’‚—
+ },
+ [0x12098]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN EN TIMES GAN0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12098, -- 𒂘
+ },
+ [0x12099]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN EN TIMES GAN0x0002 TENU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12099, -- ð’‚™
+ },
+ [0x1209A]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN EN TIMES ME",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1209A, -- ð’‚š
+ },
+ [0x1209B]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN EN CROSSING EN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1209B, -- ð’‚›
+ },
+ [0x1209C]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN EN OPPOSING EN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1209C, -- 𒂜
+ },
+ [0x1209D]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN EN SQUARED",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1209D, -- ð’‚
+ },
+ [0x1209E]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN EREN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1209E, -- ð’‚ž
+ },
+ [0x1209F]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN ERIN0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1209F, -- ð’‚Ÿ
+ },
+ [0x120A0]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN ESH0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120A0, -- ð’‚ 
+ },
+ [0x120A1]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN EZEN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120A1, -- ð’‚¡
+ },
+ [0x120A2]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN EZEN TIMES A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120A2, -- ð’‚¢
+ },
+ [0x120A3]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN EZEN TIMES A PLUS LAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120A3, -- ð’‚£
+ },
+ [0x120A4]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN EZEN TIMES A PLUS LAL TIMES LAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120A4, -- 𒂤
+ },
+ [0x120A5]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN EZEN TIMES AN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120A5, -- ð’‚¥
+ },
+ [0x120A6]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN EZEN TIMES BAD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120A6, -- 𒂦
+ },
+ [0x120A7]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN EZEN TIMES DUN0x0003 GUNU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120A7, -- 𒂧
+ },
+ [0x120A8]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN EZEN TIMES DUN0x0003 GUNU GUNU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120A8, -- 𒂨
+ },
+ [0x120A9]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN EZEN TIMES HA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120A9, -- ð’‚©
+ },
+ [0x120AA]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN EZEN TIMES HA GUNU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120AA, -- 𒂪
+ },
+ [0x120AB]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN EZEN TIMES IGI GUNU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120AB, -- ð’‚«
+ },
+ [0x120AC]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN EZEN TIMES KASKAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120AC, -- 𒂬
+ },
+ [0x120AD]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN EZEN TIMES KASKAL SQUARED",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120AD, -- ð’‚­
+ },
+ [0x120AE]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN EZEN TIMES KU0x0003",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120AE, -- ð’‚®
+ },
+ [0x120AF]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN EZEN TIMES LA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120AF, -- 𒂯
+ },
+ [0x120B0]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN EZEN TIMES LAL TIMES LAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120B0, -- ð’‚°
+ },
+ [0x120B1]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN EZEN TIMES LI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120B1, -- ð’‚±
+ },
+ [0x120B2]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN EZEN TIMES LU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120B2, -- ð’‚²
+ },
+ [0x120B3]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN EZEN TIMES U0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120B3, -- ð’‚³
+ },
+ [0x120B4]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN EZEN TIMES UD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120B4, -- ð’‚´
+ },
+ [0x120B5]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120B5, -- ð’‚µ
+ },
+ [0x120B6]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GA GUNU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120B6, -- 𒂶
+ },
+ [0x120B7]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GA0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120B7, -- ð’‚·
+ },
+ [0x120B8]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GA0x0002 TIMES A PLUS DA PLUS HA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120B8, -- 𒂸
+ },
+ [0x120B9]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GA0x0002 TIMES A PLUS HA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120B9, -- ð’‚¹
+ },
+ [0x120BA]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GA0x0002 TIMES A PLUS IGI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120BA, -- 𒂺
+ },
+ [0x120BB]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GA0x0002 TIMES AB0x0002 TENU PLUS TAB",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120BB, -- ð’‚»
+ },
+ [0x120BC]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GA0x0002 TIMES AN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120BC, -- ð’‚¼
+ },
+ [0x120BD]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GA0x0002 TIMES ASH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120BD, -- ð’‚½
+ },
+ [0x120BE]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GA0x0002 TIMES ASH0x0002 PLUS GAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120BE, -- ð’‚¾
+ },
+ [0x120BF]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GA0x0002 TIMES BAD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120BF, -- ð’‚¿
+ },
+ [0x120C0]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GA0x0002 TIMES BAR PLUS RA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120C0, -- 𒃀
+ },
+ [0x120C1]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GA0x0002 TIMES BUR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120C1, -- ð’ƒ
+ },
+ [0x120C2]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GA0x0002 TIMES BUR PLUS RA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120C2, -- 𒃂
+ },
+ [0x120C3]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GA0x0002 TIMES DA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120C3, -- 𒃃
+ },
+ [0x120C4]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GA0x0002 TIMES DI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120C4, -- 𒃄
+ },
+ [0x120C5]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GA0x0002 TIMES DIM TIMES SHE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120C5, -- ð’ƒ…
+ },
+ [0x120C6]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GA0x0002 TIMES DUB",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120C6, -- 𒃆
+ },
+ [0x120C7]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GA0x0002 TIMES EL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120C7, -- 𒃇
+ },
+ [0x120C8]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GA0x0002 TIMES EL PLUS LA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120C8, -- 𒃈
+ },
+ [0x120C9]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GA0x0002 TIMES EN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120C9, -- 𒃉
+ },
+ [0x120CA]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GA0x0002 TIMES EN TIMES GAN0x0002 TENU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120CA, -- 𒃊
+ },
+ [0x120CB]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GA0x0002 TIMES GAN0x0002 TENU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120CB, -- 𒃋
+ },
+ [0x120CC]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GA0x0002 TIMES GAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120CC, -- 𒃌
+ },
+ [0x120CD]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GA0x0002 TIMES GI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120CD, -- ð’ƒ
+ },
+ [0x120CE]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GA0x0002 TIMES GI0x0004",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120CE, -- 𒃎
+ },
+ [0x120CF]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GA0x0002 TIMES GI0x0004 PLUS A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120CF, -- ð’ƒ
+ },
+ [0x120D0]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GA0x0002 TIMES GIR0x0002 PLUS SU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120D0, -- ð’ƒ
+ },
+ [0x120D1]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GA0x0002 TIMES HA PLUS LU PLUS ESH0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120D1, -- 𒃑
+ },
+ [0x120D2]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GA0x0002 TIMES HAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120D2, -- ð’ƒ’
+ },
+ [0x120D3]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GA0x0002 TIMES HAL PLUS LA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120D3, -- 𒃓
+ },
+ [0x120D4]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GA0x0002 TIMES HI PLUS LI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120D4, -- 𒃔
+ },
+ [0x120D5]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GA0x0002 TIMES HUB0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120D5, -- 𒃕
+ },
+ [0x120D6]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GA0x0002 TIMES IGI GUNU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120D6, -- ð’ƒ–
+ },
+ [0x120D7]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GA0x0002 TIMES ISH PLUS HU PLUS ASH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120D7, -- ð’ƒ—
+ },
+ [0x120D8]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GA0x0002 TIMES KAK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120D8, -- 𒃘
+ },
+ [0x120D9]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GA0x0002 TIMES KASKAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120D9, -- 𒃙
+ },
+ [0x120DA]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GA0x0002 TIMES KID",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120DA, -- 𒃚
+ },
+ [0x120DB]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GA0x0002 TIMES KID PLUS LAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120DB, -- 𒃛
+ },
+ [0x120DC]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GA0x0002 TIMES KU0x0003 PLUS AN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120DC, -- 𒃜
+ },
+ [0x120DD]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GA0x0002 TIMES LA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120DD, -- ð’ƒ
+ },
+ [0x120DE]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GA0x0002 TIMES ME PLUS EN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120DE, -- 𒃞
+ },
+ [0x120DF]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GA0x0002 TIMES MI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120DF, -- 𒃟
+ },
+ [0x120E0]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GA0x0002 TIMES NUN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120E0, -- ð’ƒ 
+ },
+ [0x120E1]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GA0x0002 TIMES NUN OVER NUN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120E1, -- 𒃡
+ },
+ [0x120E2]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GA0x0002 TIMES PA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120E2, -- 𒃢
+ },
+ [0x120E3]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GA0x0002 TIMES SAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120E3, -- 𒃣
+ },
+ [0x120E4]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GA0x0002 TIMES SAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120E4, -- 𒃤
+ },
+ [0x120E5]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GA0x0002 TIMES SHE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120E5, -- 𒃥
+ },
+ [0x120E6]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GA0x0002 TIMES SHE PLUS TUR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120E6, -- 𒃦
+ },
+ [0x120E7]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GA0x0002 TIMES SHID",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120E7, -- 𒃧
+ },
+ [0x120E8]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GA0x0002 TIMES SUM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120E8, -- 𒃨
+ },
+ [0x120E9]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GA0x0002 TIMES TAK0x0004",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120E9, -- 𒃩
+ },
+ [0x120EA]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GA0x0002 TIMES U",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120EA, -- 𒃪
+ },
+ [0x120EB]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GA0x0002 TIMES UD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120EB, -- 𒃫
+ },
+ [0x120EC]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GA0x0002 TIMES UD PLUS DU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120EC, -- 𒃬
+ },
+ [0x120ED]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GA0x0002 OVER GA0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120ED, -- ð’ƒ­
+ },
+ [0x120EE]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GABA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120EE, -- 𒃮
+ },
+ [0x120EF]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GABA CROSSING GABA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120EF, -- 𒃯
+ },
+ [0x120F0]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GAD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120F0, -- ð’ƒ°
+ },
+ [0x120F1]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GAD OVER GAD GAR OVER GAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120F1, -- 𒃱
+ },
+ [0x120F2]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120F2, -- 𒃲
+ },
+ [0x120F3]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GAL GAD OVER GAD GAR OVER GAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120F3, -- 𒃳
+ },
+ [0x120F4]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GALAM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120F4, -- ð’ƒ´
+ },
+ [0x120F5]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GAM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120F5, -- 𒃵
+ },
+ [0x120F6]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120F6, -- 𒃶
+ },
+ [0x120F7]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GAN0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120F7, -- ð’ƒ·
+ },
+ [0x120F8]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GAN0x0002 TENU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120F8, -- 𒃸
+ },
+ [0x120F9]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GAN0x0002 OVER GAN0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120F9, -- 𒃹
+ },
+ [0x120FA]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GAN0x0002 CROSSING GAN0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120FA, -- 𒃺
+ },
+ [0x120FB]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120FB, -- 𒃻
+ },
+ [0x120FC]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GAR0x0003",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120FC, -- 𒃼
+ },
+ [0x120FD]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GASHAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120FD, -- 𒃽
+ },
+ [0x120FE]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GESHTIN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120FE, -- 𒃾
+ },
+ [0x120FF]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GESHTIN TIMES KUR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x120FF, -- 𒃿
+ },
+ [0x12100]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12100, -- ð’„€
+ },
+ [0x12101]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GI TIMES E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12101, -- ð’„
+ },
+ [0x12102]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GI TIMES U",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12102, -- ð’„‚
+ },
+ [0x12103]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GI CROSSING GI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12103, -- 𒄃
+ },
+ [0x12104]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GI0x0004",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12104, -- ð’„„
+ },
+ [0x12105]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GI0x0004 OVER GI0x0004",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12105, -- ð’„…
+ },
+ [0x12106]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GI0x0004 CROSSING GI0x0004",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12106, -- 𒄆
+ },
+ [0x12107]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GIDIM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12107, -- 𒄇
+ },
+ [0x12108]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GIR0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12108, -- 𒄈
+ },
+ [0x12109]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GIR0x0002 GUNU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12109, -- 𒄉
+ },
+ [0x1210A]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GIR0x0003",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1210A, -- ð’„Š
+ },
+ [0x1210B]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GIR0x0003 TIMES A PLUS IGI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1210B, -- ð’„‹
+ },
+ [0x1210C]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GIR0x0003 TIMES GAN0x0002 TENU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1210C, -- 𒄌
+ },
+ [0x1210D]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GIR0x0003 TIMES IGI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1210D, -- ð’„
+ },
+ [0x1210E]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GIR0x0003 TIMES LU PLUS IGI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1210E, -- ð’„Ž
+ },
+ [0x1210F]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GIR0x0003 TIMES PA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1210F, -- ð’„
+ },
+ [0x12110]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GISAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12110, -- ð’„
+ },
+ [0x12111]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GISH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12111, -- ð’„‘
+ },
+ [0x12112]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GISH CROSSING GISH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12112, -- ð’„’
+ },
+ [0x12113]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GISH TIMES BAD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12113, -- ð’„“
+ },
+ [0x12114]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GISH TIMES TAK0x0004",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12114, -- ð’„”
+ },
+ [0x12115]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GISH TENU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12115, -- ð’„•
+ },
+ [0x12116]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12116, -- ð’„–
+ },
+ [0x12117]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GU CROSSING GU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12117, -- ð’„—
+ },
+ [0x12118]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GU0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12118, -- 𒄘
+ },
+ [0x12119]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GU0x0002 TIMES KAK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12119, -- ð’„™
+ },
+ [0x1211A]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GU0x0002 TIMES KAK TIMES IGI GUNU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1211A, -- ð’„š
+ },
+ [0x1211B]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GU0x0002 TIMES NUN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1211B, -- ð’„›
+ },
+ [0x1211C]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GU0x0002 TIMES SAL PLUS TUG0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1211C, -- 𒄜
+ },
+ [0x1211D]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GU0x0002 GUNU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1211D, -- ð’„
+ },
+ [0x1211E]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GUD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1211E, -- ð’„ž
+ },
+ [0x1211F]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GUD TIMES A PLUS KUR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1211F, -- ð’„Ÿ
+ },
+ [0x12120]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GUD TIMES KUR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12120, -- ð’„ 
+ },
+ [0x12121]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GUD OVER GUD LUGAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12121, -- ð’„¡
+ },
+ [0x12122]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GUL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12122, -- ð’„¢
+ },
+ [0x12123]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GUM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12123, -- ð’„£
+ },
+ [0x12124]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GUM TIMES SHE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12124, -- 𒄤
+ },
+ [0x12125]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GUR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12125, -- ð’„¥
+ },
+ [0x12126]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GUR0x0007",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12126, -- 𒄦
+ },
+ [0x12127]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GURUN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12127, -- 𒄧
+ },
+ [0x12128]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN GURUSH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12128, -- 𒄨
+ },
+ [0x12129]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN HA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12129, -- ð’„©
+ },
+ [0x1212A]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN HA TENU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1212A, -- 𒄪
+ },
+ [0x1212B]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN HA GUNU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1212B, -- ð’„«
+ },
+ [0x1212C]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN HAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1212C, -- 𒄬
+ },
+ [0x1212D]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN HI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1212D, -- ð’„­
+ },
+ [0x1212E]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN HI TIMES ASH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1212E, -- ð’„®
+ },
+ [0x1212F]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN HI TIMES ASH0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1212F, -- 𒄯
+ },
+ [0x12130]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN HI TIMES BAD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12130, -- ð’„°
+ },
+ [0x12131]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN HI TIMES DISH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12131, -- ð’„±
+ },
+ [0x12132]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN HI TIMES GAD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12132, -- ð’„²
+ },
+ [0x12133]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN HI TIMES KIN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12133, -- ð’„³
+ },
+ [0x12134]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN HI TIMES NUN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12134, -- ð’„´
+ },
+ [0x12135]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN HI TIMES SHE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12135, -- ð’„µ
+ },
+ [0x12136]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN HI TIMES U",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12136, -- 𒄶
+ },
+ [0x12137]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN HU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12137, -- ð’„·
+ },
+ [0x12138]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN HUB0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12138, -- 𒄸
+ },
+ [0x12139]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN HUB0x0002 TIMES AN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12139, -- ð’„¹
+ },
+ [0x1213A]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN HUB0x0002 TIMES HAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1213A, -- 𒄺
+ },
+ [0x1213B]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN HUB0x0002 TIMES KASKAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1213B, -- ð’„»
+ },
+ [0x1213C]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN HUB0x0002 TIMES LISH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1213C, -- ð’„¼
+ },
+ [0x1213D]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN HUB0x0002 TIMES UD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1213D, -- ð’„½
+ },
+ [0x1213E]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN HUL0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1213E, -- ð’„¾
+ },
+ [0x1213F]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN I",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1213F, -- ð’„¿
+ },
+ [0x12140]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN I A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12140, -- ð’…€
+ },
+ [0x12141]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN IB",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12141, -- ð’…
+ },
+ [0x12142]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN IDIM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12142, -- ð’…‚
+ },
+ [0x12143]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN IDIM OVER IDIM BUR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12143, -- ð’…ƒ
+ },
+ [0x12144]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN IDIM OVER IDIM SQUARED",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12144, -- ð’…„
+ },
+ [0x12145]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN IG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12145, -- ð’……
+ },
+ [0x12146]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN IGI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12146, -- ð’…†
+ },
+ [0x12147]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN IGI DIB",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12147, -- ð’…‡
+ },
+ [0x12148]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN IGI RI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12148, -- ð’…ˆ
+ },
+ [0x12149]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN IGI OVER IGI SHIR OVER SHIR UD OVER UD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12149, -- ð’…‰
+ },
+ [0x1214A]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN IGI GUNU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1214A, -- ð’…Š
+ },
+ [0x1214B]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN IL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1214B, -- ð’…‹
+ },
+ [0x1214C]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN IL TIMES GAN0x0002 TENU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1214C, -- 𒅌
+ },
+ [0x1214D]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN IL0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1214D, -- ð’…
+ },
+ [0x1214E]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN IM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1214E, -- ð’…Ž
+ },
+ [0x1214F]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN IM TIMES TAK0x0004",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1214F, -- ð’…
+ },
+ [0x12150]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN IM CROSSING IM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12150, -- ð’…
+ },
+ [0x12151]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN IM OPPOSING IM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12151, -- ð’…‘
+ },
+ [0x12152]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN IM SQUARED",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12152, -- ð’…’
+ },
+ [0x12153]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN IMIN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12153, -- ð’…“
+ },
+ [0x12154]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN IN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12154, -- ð’…”
+ },
+ [0x12155]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN IR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12155, -- ð’…•
+ },
+ [0x12156]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN ISH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12156, -- ð’…–
+ },
+ [0x12157]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12157, -- ð’…—
+ },
+ [0x12158]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KA TIMES A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12158, -- ð’…˜
+ },
+ [0x12159]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KA TIMES AD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12159, -- ð’…™
+ },
+ [0x1215A]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KA TIMES AD PLUS KU0x0003",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1215A, -- ð’…š
+ },
+ [0x1215B]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KA TIMES ASH0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1215B, -- ð’…›
+ },
+ [0x1215C]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KA TIMES BAD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1215C, -- 𒅜
+ },
+ [0x1215D]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KA TIMES BALAG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1215D, -- ð’…
+ },
+ [0x1215E]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KA TIMES BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1215E, -- ð’…ž
+ },
+ [0x1215F]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KA TIMES BI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1215F, -- ð’…Ÿ
+ },
+ [0x12160]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KA TIMES ERIN0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12160, -- ð’… 
+ },
+ [0x12161]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KA TIMES ESH0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12161, -- ð’…¡
+ },
+ [0x12162]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KA TIMES GA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12162, -- ð’…¢
+ },
+ [0x12163]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KA TIMES GAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12163, -- ð’…£
+ },
+ [0x12164]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KA TIMES GAN0x0002 TENU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12164, -- ð’…¤
+ },
+ [0x12165]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KA TIMES GAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12165, -- ð’…¥
+ },
+ [0x12166]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KA TIMES GAR PLUS SHA0x0003 PLUS A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12166, -- ð’…¦
+ },
+ [0x12167]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KA TIMES GI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12167, -- ð’…§
+ },
+ [0x12168]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KA TIMES GIR0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12168, -- ð’…¨
+ },
+ [0x12169]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KA TIMES GISH PLUS SAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12169, -- ð’…©
+ },
+ [0x1216A]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KA TIMES GISH CROSSING GISH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1216A, -- ð’…ª
+ },
+ [0x1216B]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KA TIMES GU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1216B, -- ð’…«
+ },
+ [0x1216C]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KA TIMES GUR0x0007",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1216C, -- ð’…¬
+ },
+ [0x1216D]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KA TIMES IGI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1216D, -- ð’…­
+ },
+ [0x1216E]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KA TIMES IM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1216E, -- ð’…®
+ },
+ [0x1216F]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KA TIMES KAK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1216F, -- ð’…¯
+ },
+ [0x12170]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KA TIMES KI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12170, -- ð’…°
+ },
+ [0x12171]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KA TIMES KID",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12171, -- ð’…±
+ },
+ [0x12172]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KA TIMES LI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12172, -- ð’…²
+ },
+ [0x12173]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KA TIMES LU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12173, -- ð’…³
+ },
+ [0x12174]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KA TIMES ME",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12174, -- ð’…´
+ },
+ [0x12175]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KA TIMES ME PLUS DU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12175, -- ð’…µ
+ },
+ [0x12176]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KA TIMES ME PLUS GI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12176, -- ð’…¶
+ },
+ [0x12177]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KA TIMES ME PLUS TE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12177, -- ð’…·
+ },
+ [0x12178]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KA TIMES MI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12178, -- ð’…¸
+ },
+ [0x12179]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KA TIMES MI PLUS NUNUZ",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12179, -- ð’…¹
+ },
+ [0x1217A]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KA TIMES NE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1217A, -- ð’…º
+ },
+ [0x1217B]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KA TIMES NUN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1217B, -- ð’…»
+ },
+ [0x1217C]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KA TIMES PI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1217C, -- ð’…¼
+ },
+ [0x1217D]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KA TIMES RU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1217D, -- ð’…½
+ },
+ [0x1217E]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KA TIMES SA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1217E, -- ð’…¾
+ },
+ [0x1217F]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KA TIMES SAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1217F, -- ð’…¿
+ },
+ [0x12180]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KA TIMES SHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12180, -- 𒆀
+ },
+ [0x12181]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KA TIMES SHE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12181, -- ð’†
+ },
+ [0x12182]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KA TIMES SHID",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12182, -- 𒆂
+ },
+ [0x12183]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KA TIMES SHU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12183, -- 𒆃
+ },
+ [0x12184]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KA TIMES SIG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12184, -- 𒆄
+ },
+ [0x12185]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KA TIMES SUHUR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12185, -- ð’†…
+ },
+ [0x12186]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KA TIMES TAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12186, -- 𒆆
+ },
+ [0x12187]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KA TIMES U",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12187, -- 𒆇
+ },
+ [0x12188]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KA TIMES U0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12188, -- 𒆈
+ },
+ [0x12189]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KA TIMES UD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12189, -- 𒆉
+ },
+ [0x1218A]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KA TIMES UMUM TIMES PA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1218A, -- 𒆊
+ },
+ [0x1218B]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KA TIMES USH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1218B, -- 𒆋
+ },
+ [0x1218C]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KA TIMES ZI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1218C, -- 𒆌
+ },
+ [0x1218D]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KA0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1218D, -- ð’†
+ },
+ [0x1218E]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KA0x0002 CROSSING KA0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1218E, -- 𒆎
+ },
+ [0x1218F]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KAB",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1218F, -- ð’†
+ },
+ [0x12190]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KAD0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12190, -- ð’†
+ },
+ [0x12191]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KAD0x0003",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12191, -- 𒆑
+ },
+ [0x12192]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KAD0x0004",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12192, -- ð’†’
+ },
+ [0x12193]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KAD0x0005",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12193, -- 𒆓
+ },
+ [0x12194]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KAD0x0005 OVER KAD0x0005",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12194, -- 𒆔
+ },
+ [0x12195]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KAK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12195, -- 𒆕
+ },
+ [0x12196]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KAK TIMES IGI GUNU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12196, -- ð’†–
+ },
+ [0x12197]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12197, -- ð’†—
+ },
+ [0x12198]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KAL TIMES BAD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12198, -- 𒆘
+ },
+ [0x12199]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KAL CROSSING KAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12199, -- 𒆙
+ },
+ [0x1219A]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KAM0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1219A, -- 𒆚
+ },
+ [0x1219B]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KAM0x0004",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1219B, -- 𒆛
+ },
+ [0x1219C]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KASKAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1219C, -- 𒆜
+ },
+ [0x1219D]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KASKAL LAGAB TIMES U OVER LAGAB TIMES U",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1219D, -- ð’†
+ },
+ [0x1219E]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KASKAL OVER KASKAL LAGAB TIMES U OVER LAGAB TIMES U",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1219E, -- 𒆞
+ },
+ [0x1219F]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KESH0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1219F, -- 𒆟
+ },
+ [0x121A0]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121A0, -- ð’† 
+ },
+ [0x121A1]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KI TIMES BAD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121A1, -- 𒆡
+ },
+ [0x121A2]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KI TIMES U",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121A2, -- 𒆢
+ },
+ [0x121A3]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KI TIMES UD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121A3, -- 𒆣
+ },
+ [0x121A4]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KID",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121A4, -- 𒆤
+ },
+ [0x121A5]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KIN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121A5, -- 𒆥
+ },
+ [0x121A6]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KISAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121A6, -- 𒆦
+ },
+ [0x121A7]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KISH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121A7, -- 𒆧
+ },
+ [0x121A8]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KISIM0x0005",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121A8, -- 𒆨
+ },
+ [0x121A9]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KISIM0x0005 OVER KISIM0x0005",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121A9, -- 𒆩
+ },
+ [0x121AA]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121AA, -- 𒆪
+ },
+ [0x121AB]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KU OVER HI TIMES ASH0x0002 KU OVER HI TIMES ASH0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121AB, -- 𒆫
+ },
+ [0x121AC]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KU0x0003",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121AC, -- 𒆬
+ },
+ [0x121AD]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KU0x0004",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121AD, -- ð’†­
+ },
+ [0x121AE]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KU0x0004 VARIANT FORM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121AE, -- 𒆮
+ },
+ [0x121AF]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KU0x0007",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121AF, -- 𒆯
+ },
+ [0x121B0]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KUL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121B0, -- ð’†°
+ },
+ [0x121B1]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KUL GUNU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121B1, -- 𒆱
+ },
+ [0x121B2]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KUN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121B2, -- 𒆲
+ },
+ [0x121B3]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KUR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121B3, -- 𒆳
+ },
+ [0x121B4]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KUR OPPOSING KUR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121B4, -- ð’†´
+ },
+ [0x121B5]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KUSHU0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121B5, -- 𒆵
+ },
+ [0x121B6]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN KWU0x013E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121B6, -- 𒆶
+ },
+ [0x121B7]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121B7, -- ð’†·
+ },
+ [0x121B8]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAGAB",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121B8, -- 𒆸
+ },
+ [0x121B9]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAGAB TIMES A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121B9, -- 𒆹
+ },
+ [0x121BA]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAGAB TIMES A PLUS DA PLUS HA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121BA, -- 𒆺
+ },
+ [0x121BB]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAGAB TIMES A PLUS GAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121BB, -- 𒆻
+ },
+ [0x121BC]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAGAB TIMES A PLUS LAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121BC, -- 𒆼
+ },
+ [0x121BD]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAGAB TIMES AL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121BD, -- 𒆽
+ },
+ [0x121BE]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAGAB TIMES AN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121BE, -- 𒆾
+ },
+ [0x121BF]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAGAB TIMES ASH ZIDA TENU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121BF, -- 𒆿
+ },
+ [0x121C0]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAGAB TIMES BAD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121C0, -- 𒇀
+ },
+ [0x121C1]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAGAB TIMES BI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121C1, -- ð’‡
+ },
+ [0x121C2]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAGAB TIMES DAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121C2, -- 𒇂
+ },
+ [0x121C3]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAGAB TIMES EN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121C3, -- 𒇃
+ },
+ [0x121C4]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAGAB TIMES GA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121C4, -- 𒇄
+ },
+ [0x121C5]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAGAB TIMES GAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121C5, -- ð’‡…
+ },
+ [0x121C6]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAGAB TIMES GUD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121C6, -- 𒇆
+ },
+ [0x121C7]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAGAB TIMES GUD PLUS GUD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121C7, -- 𒇇
+ },
+ [0x121C8]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAGAB TIMES HA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121C8, -- 𒇈
+ },
+ [0x121C9]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAGAB TIMES HAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121C9, -- 𒇉
+ },
+ [0x121CA]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAGAB TIMES HI TIMES NUN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121CA, -- 𒇊
+ },
+ [0x121CB]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAGAB TIMES IGI GUNU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121CB, -- 𒇋
+ },
+ [0x121CC]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAGAB TIMES IM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121CC, -- 𒇌
+ },
+ [0x121CD]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAGAB TIMES IM PLUS HA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121CD, -- ð’‡
+ },
+ [0x121CE]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAGAB TIMES IM PLUS LU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121CE, -- 𒇎
+ },
+ [0x121CF]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAGAB TIMES KI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121CF, -- ð’‡
+ },
+ [0x121D0]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAGAB TIMES KIN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121D0, -- ð’‡
+ },
+ [0x121D1]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAGAB TIMES KU0x0003",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121D1, -- 𒇑
+ },
+ [0x121D2]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAGAB TIMES KUL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121D2, -- ð’‡’
+ },
+ [0x121D3]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAGAB TIMES KUL PLUS HI PLUS A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121D3, -- 𒇓
+ },
+ [0x121D4]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAGAB TIMES LAGAB",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121D4, -- 𒇔
+ },
+ [0x121D5]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAGAB TIMES LISH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121D5, -- 𒇕
+ },
+ [0x121D6]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAGAB TIMES LU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121D6, -- ð’‡–
+ },
+ [0x121D7]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAGAB TIMES LUL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121D7, -- ð’‡—
+ },
+ [0x121D8]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAGAB TIMES ME",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121D8, -- 𒇘
+ },
+ [0x121D9]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAGAB TIMES ME PLUS EN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121D9, -- 𒇙
+ },
+ [0x121DA]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAGAB TIMES MUSH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121DA, -- 𒇚
+ },
+ [0x121DB]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAGAB TIMES NE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121DB, -- 𒇛
+ },
+ [0x121DC]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAGAB TIMES SHE PLUS SUM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121DC, -- 𒇜
+ },
+ [0x121DD]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAGAB TIMES SHITA PLUS GISH PLUS ERIN0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121DD, -- ð’‡
+ },
+ [0x121DE]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAGAB TIMES SHITA PLUS GISH TENU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121DE, -- 𒇞
+ },
+ [0x121DF]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAGAB TIMES SHU0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121DF, -- 𒇟
+ },
+ [0x121E0]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAGAB TIMES SHU0x0002 PLUS SHU0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121E0, -- ð’‡ 
+ },
+ [0x121E1]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAGAB TIMES SUM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121E1, -- 𒇡
+ },
+ [0x121E2]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAGAB TIMES TAG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121E2, -- 𒇢
+ },
+ [0x121E3]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAGAB TIMES TAK0x0004",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121E3, -- 𒇣
+ },
+ [0x121E4]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAGAB TIMES TE PLUS A PLUS SU PLUS NA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121E4, -- 𒇤
+ },
+ [0x121E5]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAGAB TIMES U",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121E5, -- 𒇥
+ },
+ [0x121E6]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAGAB TIMES U PLUS A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121E6, -- 𒇦
+ },
+ [0x121E7]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAGAB TIMES U PLUS U PLUS U",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121E7, -- 𒇧
+ },
+ [0x121E8]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAGAB TIMES U0x0002 PLUS ASH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121E8, -- 𒇨
+ },
+ [0x121E9]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAGAB TIMES UD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121E9, -- 𒇩
+ },
+ [0x121EA]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAGAB TIMES USH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121EA, -- 𒇪
+ },
+ [0x121EB]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAGAB SQUARED",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121EB, -- 𒇫
+ },
+ [0x121EC]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAGAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121EC, -- 𒇬
+ },
+ [0x121ED]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAGAR TIMES SHE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121ED, -- ð’‡­
+ },
+ [0x121EE]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAGAR TIMES SHE PLUS SUM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121EE, -- 𒇮
+ },
+ [0x121EF]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAGAR GUNU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121EF, -- 𒇯
+ },
+ [0x121F0]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAGAR GUNU OVER LAGAR GUNU SHE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121F0, -- ð’‡°
+ },
+ [0x121F1]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAHSHU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121F1, -- 𒇱
+ },
+ [0x121F2]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121F2, -- 𒇲
+ },
+ [0x121F3]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAL TIMES LAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121F3, -- 𒇳
+ },
+ [0x121F4]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121F4, -- ð’‡´
+ },
+ [0x121F5]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAM TIMES KUR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121F5, -- 𒇵
+ },
+ [0x121F6]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LAM TIMES KUR PLUS RU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121F6, -- 𒇶
+ },
+ [0x121F7]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121F7, -- ð’‡·
+ },
+ [0x121F8]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LIL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121F8, -- 𒇸
+ },
+ [0x121F9]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LIMMU0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121F9, -- 𒇹
+ },
+ [0x121FA]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LISH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121FA, -- 𒇺
+ },
+ [0x121FB]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121FB, -- 𒇻
+ },
+ [0x121FC]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LU TIMES BAD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121FC, -- 𒇼
+ },
+ [0x121FD]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LU0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121FD, -- 𒇽
+ },
+ [0x121FE]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LU0x0002 TIMES AL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121FE, -- 𒇾
+ },
+ [0x121FF]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LU0x0002 TIMES BAD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x121FF, -- 𒇿
+ },
+ [0x12200]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LU0x0002 TIMES ESH0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12200, -- 𒈀
+ },
+ [0x12201]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LU0x0002 TIMES ESH0x0002 TENU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12201, -- ð’ˆ
+ },
+ [0x12202]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LU0x0002 TIMES GAN0x0002 TENU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12202, -- 𒈂
+ },
+ [0x12203]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LU0x0002 TIMES HI TIMES BAD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12203, -- 𒈃
+ },
+ [0x12204]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LU0x0002 TIMES IM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12204, -- 𒈄
+ },
+ [0x12205]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LU0x0002 TIMES KAD0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12205, -- ð’ˆ…
+ },
+ [0x12206]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LU0x0002 TIMES KAD0x0003",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12206, -- 𒈆
+ },
+ [0x12207]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LU0x0002 TIMES KAD0x0003 PLUS ASH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12207, -- 𒈇
+ },
+ [0x12208]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LU0x0002 TIMES KI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12208, -- 𒈈
+ },
+ [0x12209]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LU0x0002 TIMES LA PLUS ASH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12209, -- 𒈉
+ },
+ [0x1220A]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LU0x0002 TIMES LAGAB",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1220A, -- 𒈊
+ },
+ [0x1220B]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LU0x0002 TIMES ME PLUS EN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1220B, -- 𒈋
+ },
+ [0x1220C]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LU0x0002 TIMES NE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1220C, -- 𒈌
+ },
+ [0x1220D]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LU0x0002 TIMES NU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1220D, -- ð’ˆ
+ },
+ [0x1220E]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LU0x0002 TIMES SI PLUS ASH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1220E, -- 𒈎
+ },
+ [0x1220F]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LU0x0002 TIMES SIK0x0002 PLUS BU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1220F, -- ð’ˆ
+ },
+ [0x12210]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LU0x0002 TIMES TUG0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12210, -- ð’ˆ
+ },
+ [0x12211]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LU0x0002 TENU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12211, -- 𒈑
+ },
+ [0x12212]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LU0x0002 CROSSING LU0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12212, -- ð’ˆ’
+ },
+ [0x12213]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LU0x0002 OPPOSING LU0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12213, -- 𒈓
+ },
+ [0x12214]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LU0x0002 SQUARED",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12214, -- 𒈔
+ },
+ [0x12215]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LU0x0002 SHESHIG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12215, -- 𒈕
+ },
+ [0x12216]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LU0x0003",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12216, -- ð’ˆ–
+ },
+ [0x12217]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LUGAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12217, -- ð’ˆ—
+ },
+ [0x12218]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LUGAL OVER LUGAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12218, -- 𒈘
+ },
+ [0x12219]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LUGAL OPPOSING LUGAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12219, -- 𒈙
+ },
+ [0x1221A]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LUGAL SHESHIG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1221A, -- 𒈚
+ },
+ [0x1221B]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LUH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1221B, -- 𒈛
+ },
+ [0x1221C]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LUL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1221C, -- 𒈜
+ },
+ [0x1221D]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LUM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1221D, -- ð’ˆ
+ },
+ [0x1221E]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LUM OVER LUM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1221E, -- 𒈞
+ },
+ [0x1221F]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN LUM OVER LUM GAR OVER GAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1221F, -- 𒈟
+ },
+ [0x12220]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN MA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12220, -- ð’ˆ 
+ },
+ [0x12221]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN MA TIMES TAK0x0004",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12221, -- 𒈡
+ },
+ [0x12222]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN MA GUNU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12222, -- 𒈢
+ },
+ [0x12223]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN MA0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12223, -- 𒈣
+ },
+ [0x12224]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN MAH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12224, -- 𒈤
+ },
+ [0x12225]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN MAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12225, -- 𒈥
+ },
+ [0x12226]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN MASH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12226, -- 𒈦
+ },
+ [0x12227]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN MASH0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12227, -- 𒈧
+ },
+ [0x12228]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN ME",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12228, -- 𒈨
+ },
+ [0x12229]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN MES",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12229, -- 𒈩
+ },
+ [0x1222A]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN MI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1222A, -- 𒈪
+ },
+ [0x1222B]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN MIN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1222B, -- 𒈫
+ },
+ [0x1222C]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN MU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1222C, -- 𒈬
+ },
+ [0x1222D]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN MU OVER MU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1222D, -- ð’ˆ­
+ },
+ [0x1222E]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN MUG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1222E, -- 𒈮
+ },
+ [0x1222F]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN MUG GUNU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1222F, -- 𒈯
+ },
+ [0x12230]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN MUNSUB",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12230, -- ð’ˆ°
+ },
+ [0x12231]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN MURGU0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12231, -- 𒈱
+ },
+ [0x12232]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN MUSH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12232, -- 𒈲
+ },
+ [0x12233]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN MUSH TIMES A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12233, -- 𒈳
+ },
+ [0x12234]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN MUSH TIMES KUR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12234, -- ð’ˆ´
+ },
+ [0x12235]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN MUSH TIMES ZA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12235, -- 𒈵
+ },
+ [0x12236]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN MUSH OVER MUSH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12236, -- 𒈶
+ },
+ [0x12237]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN MUSH OVER MUSH TIMES A PLUS NA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12237, -- ð’ˆ·
+ },
+ [0x12238]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN MUSH CROSSING MUSH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12238, -- 𒈸
+ },
+ [0x12239]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN MUSH0x0003",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12239, -- 𒈹
+ },
+ [0x1223A]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN MUSH0x0003 TIMES A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1223A, -- 𒈺
+ },
+ [0x1223B]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN MUSH0x0003 TIMES A PLUS DI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1223B, -- 𒈻
+ },
+ [0x1223C]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN MUSH0x0003 TIMES DI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1223C, -- 𒈼
+ },
+ [0x1223D]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN MUSH0x0003 GUNU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1223D, -- 𒈽
+ },
+ [0x1223E]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN NA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1223E, -- 𒈾
+ },
+ [0x1223F]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN NA0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1223F, -- 𒈿
+ },
+ [0x12240]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN NAGA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12240, -- 𒉀
+ },
+ [0x12241]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN NAGA INVERTED",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12241, -- ð’‰
+ },
+ [0x12242]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN NAGA TIMES SHU TENU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12242, -- 𒉂
+ },
+ [0x12243]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN NAGA OPPOSING NAGA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12243, -- 𒉃
+ },
+ [0x12244]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN NAGAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12244, -- 𒉄
+ },
+ [0x12245]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN NAM NUTILLU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12245, -- ð’‰…
+ },
+ [0x12246]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN NAM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12246, -- 𒉆
+ },
+ [0x12247]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN NAM0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12247, -- 𒉇
+ },
+ [0x12248]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN NE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12248, -- 𒉈
+ },
+ [0x12249]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN NE TIMES A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12249, -- 𒉉
+ },
+ [0x1224A]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN NE TIMES UD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1224A, -- 𒉊
+ },
+ [0x1224B]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN NE SHESHIG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1224B, -- 𒉋
+ },
+ [0x1224C]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN NI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1224C, -- 𒉌
+ },
+ [0x1224D]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN NI TIMES E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1224D, -- ð’‰
+ },
+ [0x1224E]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN NI0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1224E, -- 𒉎
+ },
+ [0x1224F]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN NIM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1224F, -- ð’‰
+ },
+ [0x12250]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN NIM TIMES GAN0x0002 TENU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12250, -- ð’‰
+ },
+ [0x12251]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN NIM TIMES GAR PLUS GAN0x0002 TENU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12251, -- 𒉑
+ },
+ [0x12252]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN NINDA0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12252, -- ð’‰’
+ },
+ [0x12253]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN NINDA0x0002 TIMES AN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12253, -- 𒉓
+ },
+ [0x12254]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN NINDA0x0002 TIMES ASH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12254, -- 𒉔
+ },
+ [0x12255]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN NINDA0x0002 TIMES ASH PLUS ASH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12255, -- 𒉕
+ },
+ [0x12256]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN NINDA0x0002 TIMES GUD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12256, -- ð’‰–
+ },
+ [0x12257]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN NINDA0x0002 TIMES ME PLUS GAN0x0002 TENU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12257, -- ð’‰—
+ },
+ [0x12258]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN NINDA0x0002 TIMES NE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12258, -- 𒉘
+ },
+ [0x12259]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN NINDA0x0002 TIMES NUN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12259, -- 𒉙
+ },
+ [0x1225A]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN NINDA0x0002 TIMES SHE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1225A, -- 𒉚
+ },
+ [0x1225B]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN NINDA0x0002 TIMES SHE PLUS A AN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1225B, -- 𒉛
+ },
+ [0x1225C]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN NINDA0x0002 TIMES SHE PLUS ASH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1225C, -- 𒉜
+ },
+ [0x1225D]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN NINDA0x0002 TIMES SHE PLUS ASH PLUS ASH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1225D, -- ð’‰
+ },
+ [0x1225E]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN NINDA0x0002 TIMES U0x0002 PLUS ASH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1225E, -- 𒉞
+ },
+ [0x1225F]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN NINDA0x0002 TIMES USH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1225F, -- 𒉟
+ },
+ [0x12260]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN NISAG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12260, -- ð’‰ 
+ },
+ [0x12261]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN NU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12261, -- 𒉡
+ },
+ [0x12262]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN NU0x000B",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12262, -- 𒉢
+ },
+ [0x12263]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN NUN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12263, -- 𒉣
+ },
+ [0x12264]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN NUN LAGAR TIMES GAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12264, -- 𒉤
+ },
+ [0x12265]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN NUN LAGAR TIMES MASH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12265, -- 𒉥
+ },
+ [0x12266]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN NUN LAGAR TIMES SAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12266, -- 𒉦
+ },
+ [0x12267]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN NUN LAGAR TIMES SAL OVER NUN LAGAR TIMES SAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12267, -- 𒉧
+ },
+ [0x12268]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN NUN LAGAR TIMES USH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12268, -- 𒉨
+ },
+ [0x12269]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN NUN TENU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12269, -- 𒉩
+ },
+ [0x1226A]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN NUN OVER NUN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1226A, -- 𒉪
+ },
+ [0x1226B]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN NUN CROSSING NUN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1226B, -- 𒉫
+ },
+ [0x1226C]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN NUN CROSSING NUN LAGAR OVER LAGAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1226C, -- 𒉬
+ },
+ [0x1226D]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN NUNUZ",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1226D, -- ð’‰­
+ },
+ [0x1226E]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN NUNUZ AB0x0002 TIMES ASHGAB",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1226E, -- 𒉮
+ },
+ [0x1226F]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN NUNUZ AB0x0002 TIMES BI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1226F, -- 𒉯
+ },
+ [0x12270]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN NUNUZ AB0x0002 TIMES DUG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12270, -- ð’‰°
+ },
+ [0x12271]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN NUNUZ AB0x0002 TIMES GUD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12271, -- 𒉱
+ },
+ [0x12272]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN NUNUZ AB0x0002 TIMES IGI GUNU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12272, -- 𒉲
+ },
+ [0x12273]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN NUNUZ AB0x0002 TIMES KAD0x0003",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12273, -- 𒉳
+ },
+ [0x12274]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN NUNUZ AB0x0002 TIMES LA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12274, -- ð’‰´
+ },
+ [0x12275]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN NUNUZ AB0x0002 TIMES NE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12275, -- 𒉵
+ },
+ [0x12276]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN NUNUZ AB0x0002 TIMES SILA0x0003",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12276, -- 𒉶
+ },
+ [0x12277]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN NUNUZ AB0x0002 TIMES U0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12277, -- ð’‰·
+ },
+ [0x12278]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN NUNUZ KISIM0x0005 TIMES BI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12278, -- 𒉸
+ },
+ [0x12279]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN NUNUZ KISIM0x0005 TIMES BI U",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12279, -- 𒉹
+ },
+ [0x1227A]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN PA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1227A, -- 𒉺
+ },
+ [0x1227B]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN PAD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1227B, -- 𒉻
+ },
+ [0x1227C]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN PAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1227C, -- 𒉼
+ },
+ [0x1227D]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN PAP",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1227D, -- 𒉽
+ },
+ [0x1227E]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN PESH0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1227E, -- 𒉾
+ },
+ [0x1227F]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN PI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1227F, -- 𒉿
+ },
+ [0x12280]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN PI TIMES A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12280, -- ð’Š€
+ },
+ [0x12281]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN PI TIMES AB",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12281, -- ð’Š
+ },
+ [0x12282]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN PI TIMES BI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12282, -- ð’Š‚
+ },
+ [0x12283]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN PI TIMES BU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12283, -- 𒊃
+ },
+ [0x12284]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN PI TIMES E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12284, -- ð’Š„
+ },
+ [0x12285]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN PI TIMES I",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12285, -- ð’Š…
+ },
+ [0x12286]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN PI TIMES IB",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12286, -- 𒊆
+ },
+ [0x12287]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN PI TIMES U",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12287, -- 𒊇
+ },
+ [0x12288]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN PI TIMES U0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12288, -- 𒊈
+ },
+ [0x12289]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN PI CROSSING PI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12289, -- 𒊉
+ },
+ [0x1228A]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN PIRIG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1228A, -- ð’ŠŠ
+ },
+ [0x1228B]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN PIRIG TIMES KAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1228B, -- ð’Š‹
+ },
+ [0x1228C]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN PIRIG TIMES UD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1228C, -- 𒊌
+ },
+ [0x1228D]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN PIRIG TIMES ZA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1228D, -- ð’Š
+ },
+ [0x1228E]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN PIRIG OPPOSING PIRIG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1228E, -- ð’ŠŽ
+ },
+ [0x1228F]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN RA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1228F, -- ð’Š
+ },
+ [0x12290]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN RAB",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12290, -- ð’Š
+ },
+ [0x12291]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN RI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12291, -- ð’Š‘
+ },
+ [0x12292]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN RU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12292, -- ð’Š’
+ },
+ [0x12293]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12293, -- ð’Š“
+ },
+ [0x12294]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SAG NUTILLU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12294, -- ð’Š”
+ },
+ [0x12295]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SAG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12295, -- ð’Š•
+ },
+ [0x12296]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SAG TIMES A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12296, -- ð’Š–
+ },
+ [0x12297]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SAG TIMES DU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12297, -- ð’Š—
+ },
+ [0x12298]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SAG TIMES DUB",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12298, -- 𒊘
+ },
+ [0x12299]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SAG TIMES HA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12299, -- ð’Š™
+ },
+ [0x1229A]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SAG TIMES KAK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1229A, -- ð’Šš
+ },
+ [0x1229B]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SAG TIMES KUR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1229B, -- ð’Š›
+ },
+ [0x1229C]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SAG TIMES LUM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1229C, -- 𒊜
+ },
+ [0x1229D]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SAG TIMES MI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1229D, -- ð’Š
+ },
+ [0x1229E]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SAG TIMES NUN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1229E, -- ð’Šž
+ },
+ [0x1229F]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SAG TIMES SAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1229F, -- ð’ŠŸ
+ },
+ [0x122A0]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SAG TIMES SHID",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122A0, -- ð’Š 
+ },
+ [0x122A1]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SAG TIMES TAB",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122A1, -- ð’Š¡
+ },
+ [0x122A2]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SAG TIMES U0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122A2, -- ð’Š¢
+ },
+ [0x122A3]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SAG TIMES UB",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122A3, -- ð’Š£
+ },
+ [0x122A4]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SAG TIMES UM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122A4, -- 𒊤
+ },
+ [0x122A5]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SAG TIMES UR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122A5, -- ð’Š¥
+ },
+ [0x122A6]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SAG TIMES USH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122A6, -- 𒊦
+ },
+ [0x122A7]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SAG OVER SAG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122A7, -- 𒊧
+ },
+ [0x122A8]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SAG GUNU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122A8, -- 𒊨
+ },
+ [0x122A9]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122A9, -- ð’Š©
+ },
+ [0x122AA]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SAL LAGAB TIMES ASH0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122AA, -- 𒊪
+ },
+ [0x122AB]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SANGA0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122AB, -- ð’Š«
+ },
+ [0x122AC]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122AC, -- 𒊬
+ },
+ [0x122AD]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SHA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122AD, -- ð’Š­
+ },
+ [0x122AE]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SHA0x0003",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122AE, -- ð’Š®
+ },
+ [0x122AF]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SHA0x0003 TIMES A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122AF, -- 𒊯
+ },
+ [0x122B0]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SHA0x0003 TIMES BAD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122B0, -- ð’Š°
+ },
+ [0x122B1]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SHA0x0003 TIMES GISH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122B1, -- 𒊱
+ },
+ [0x122B2]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SHA0x0003 TIMES NE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122B2, -- 𒊲
+ },
+ [0x122B3]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SHA0x0003 TIMES SHU0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122B3, -- 𒊳
+ },
+ [0x122B4]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SHA0x0003 TIMES TUR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122B4, -- ð’Š´
+ },
+ [0x122B5]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SHA0x0003 TIMES U",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122B5, -- 𒊵
+ },
+ [0x122B6]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SHA0x0003 TIMES U PLUS A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122B6, -- 𒊶
+ },
+ [0x122B7]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SHA0x0006",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122B7, -- ð’Š·
+ },
+ [0x122B8]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SHAB0x0006",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122B8, -- 𒊸
+ },
+ [0x122B9]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SHAR0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122B9, -- 𒊹
+ },
+ [0x122BA]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SHE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122BA, -- 𒊺
+ },
+ [0x122BB]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SHE HU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122BB, -- ð’Š»
+ },
+ [0x122BC]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SHE OVER SHE GAD OVER GAD GAR OVER GAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122BC, -- 𒊼
+ },
+ [0x122BD]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SHE OVER SHE TAB OVER TAB GAR OVER GAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122BD, -- 𒊽
+ },
+ [0x122BE]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SHEG0x0009",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122BE, -- 𒊾
+ },
+ [0x122BF]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SHEN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122BF, -- ð’Š¿
+ },
+ [0x122C0]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SHESH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122C0, -- ð’‹€
+ },
+ [0x122C1]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SHESH0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122C1, -- ð’‹
+ },
+ [0x122C2]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SHESHLAM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122C2, -- ð’‹‚
+ },
+ [0x122C3]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SHID",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122C3, -- 𒋃
+ },
+ [0x122C4]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SHID TIMES A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122C4, -- ð’‹„
+ },
+ [0x122C5]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SHID TIMES IM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122C5, -- ð’‹…
+ },
+ [0x122C6]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SHIM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122C6, -- 𒋆
+ },
+ [0x122C7]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SHIM TIMES A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122C7, -- 𒋇
+ },
+ [0x122C8]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SHIM TIMES BAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122C8, -- 𒋈
+ },
+ [0x122C9]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SHIM TIMES BULUG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122C9, -- 𒋉
+ },
+ [0x122CA]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SHIM TIMES DIN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122CA, -- ð’‹Š
+ },
+ [0x122CB]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SHIM TIMES GAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122CB, -- ð’‹‹
+ },
+ [0x122CC]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SHIM TIMES IGI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122CC, -- 𒋌
+ },
+ [0x122CD]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SHIM TIMES IGI GUNU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122CD, -- ð’‹
+ },
+ [0x122CE]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SHIM TIMES KUSHU0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122CE, -- ð’‹Ž
+ },
+ [0x122CF]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SHIM TIMES LUL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122CF, -- ð’‹
+ },
+ [0x122D0]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SHIM TIMES MUG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122D0, -- ð’‹
+ },
+ [0x122D1]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SHIM TIMES SAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122D1, -- ð’‹‘
+ },
+ [0x122D2]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SHINIG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122D2, -- ð’‹’
+ },
+ [0x122D3]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SHIR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122D3, -- ð’‹“
+ },
+ [0x122D4]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SHIR TENU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122D4, -- ð’‹”
+ },
+ [0x122D5]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SHIR OVER SHIR BUR OVER BUR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122D5, -- ð’‹•
+ },
+ [0x122D6]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SHITA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122D6, -- ð’‹–
+ },
+ [0x122D7]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SHU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122D7, -- ð’‹—
+ },
+ [0x122D8]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SHU OVER INVERTED SHU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122D8, -- 𒋘
+ },
+ [0x122D9]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SHU0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122D9, -- ð’‹™
+ },
+ [0x122DA]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SHUBUR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122DA, -- ð’‹š
+ },
+ [0x122DB]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122DB, -- ð’‹›
+ },
+ [0x122DC]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SI GUNU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122DC, -- 𒋜
+ },
+ [0x122DD]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SIG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122DD, -- ð’‹
+ },
+ [0x122DE]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SIG0x0004",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122DE, -- ð’‹ž
+ },
+ [0x122DF]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SIG0x0004 OVER SIG0x0004 SHU0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122DF, -- ð’‹Ÿ
+ },
+ [0x122E0]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SIK0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122E0, -- ð’‹ 
+ },
+ [0x122E1]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SILA0x0003",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122E1, -- ð’‹¡
+ },
+ [0x122E2]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122E2, -- ð’‹¢
+ },
+ [0x122E3]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SU OVER SU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122E3, -- ð’‹£
+ },
+ [0x122E4]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SUD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122E4, -- 𒋤
+ },
+ [0x122E5]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SUD0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122E5, -- ð’‹¥
+ },
+ [0x122E6]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SUHUR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122E6, -- 𒋦
+ },
+ [0x122E7]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SUM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122E7, -- 𒋧
+ },
+ [0x122E8]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SUMASH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122E8, -- 𒋨
+ },
+ [0x122E9]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SUR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122E9, -- ð’‹©
+ },
+ [0x122EA]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN SUR0x0009",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122EA, -- 𒋪
+ },
+ [0x122EB]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN TA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122EB, -- ð’‹«
+ },
+ [0x122EC]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN TA ASTERISK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122EC, -- 𒋬
+ },
+ [0x122ED]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN TA TIMES HI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122ED, -- ð’‹­
+ },
+ [0x122EE]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN TA TIMES MI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122EE, -- ð’‹®
+ },
+ [0x122EF]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN TA GUNU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122EF, -- 𒋯
+ },
+ [0x122F0]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN TAB",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122F0, -- ð’‹°
+ },
+ [0x122F1]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN TAB OVER TAB NI OVER NI DISH OVER DISH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122F1, -- ð’‹±
+ },
+ [0x122F2]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN TAB SQUARED",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122F2, -- ð’‹²
+ },
+ [0x122F3]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN TAG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122F3, -- ð’‹³
+ },
+ [0x122F4]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN TAG TIMES BI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122F4, -- ð’‹´
+ },
+ [0x122F5]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN TAG TIMES GUD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122F5, -- ð’‹µ
+ },
+ [0x122F6]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN TAG TIMES SHE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122F6, -- 𒋶
+ },
+ [0x122F7]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN TAG TIMES SHU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122F7, -- ð’‹·
+ },
+ [0x122F8]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN TAG TIMES TUG0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122F8, -- 𒋸
+ },
+ [0x122F9]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN TAG TIMES UD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122F9, -- ð’‹¹
+ },
+ [0x122FA]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN TAK0x0004",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122FA, -- 𒋺
+ },
+ [0x122FB]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN TAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122FB, -- ð’‹»
+ },
+ [0x122FC]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN TE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122FC, -- ð’‹¼
+ },
+ [0x122FD]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN TE GUNU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122FD, -- ð’‹½
+ },
+ [0x122FE]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN TI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122FE, -- ð’‹¾
+ },
+ [0x122FF]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN TI TENU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x122FF, -- ð’‹¿
+ },
+ [0x12300]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN TIL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12300, -- 𒌀
+ },
+ [0x12301]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN TIR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12301, -- ð’Œ
+ },
+ [0x12302]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN TIR TIMES TAK0x0004",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12302, -- 𒌂
+ },
+ [0x12303]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN TIR OVER TIR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12303, -- 𒌃
+ },
+ [0x12304]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN TIR OVER TIR GAD OVER GAD GAR OVER GAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12304, -- 𒌄
+ },
+ [0x12305]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN TU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12305, -- 𒌅
+ },
+ [0x12306]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN TUG0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12306, -- 𒌆
+ },
+ [0x12307]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN TUK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12307, -- 𒌇
+ },
+ [0x12308]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN TUM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12308, -- 𒌈
+ },
+ [0x12309]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN TUR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12309, -- 𒌉
+ },
+ [0x1230A]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN TUR OVER TUR ZA OVER ZA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1230A, -- 𒌊
+ },
+ [0x1230B]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN U",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1230B, -- 𒌋
+ },
+ [0x1230C]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN U GUD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1230C, -- 𒌌
+ },
+ [0x1230D]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN U U U",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1230D, -- ð’Œ
+ },
+ [0x1230E]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN U OVER U PA OVER PA GAR OVER GAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1230E, -- 𒌎
+ },
+ [0x1230F]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN U OVER U SUR OVER SUR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1230F, -- ð’Œ
+ },
+ [0x12310]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN U OVER U U REVERSED OVER U REVERSED",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12310, -- ð’Œ
+ },
+ [0x12311]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN U0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12311, -- 𒌑
+ },
+ [0x12312]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN UB",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12312, -- 𒌒
+ },
+ [0x12313]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN UD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12313, -- 𒌓
+ },
+ [0x12314]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN UD KUSHU0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12314, -- 𒌔
+ },
+ [0x12315]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN UD TIMES BAD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12315, -- 𒌕
+ },
+ [0x12316]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN UD TIMES MI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12316, -- 𒌖
+ },
+ [0x12317]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN UD TIMES U PLUS U PLUS U",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12317, -- 𒌗
+ },
+ [0x12318]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN UD TIMES U PLUS U PLUS U GUNU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12318, -- 𒌘
+ },
+ [0x12319]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN UD GUNU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12319, -- 𒌙
+ },
+ [0x1231A]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN UD SHESHIG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1231A, -- 𒌚
+ },
+ [0x1231B]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN UD SHESHIG TIMES BAD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1231B, -- 𒌛
+ },
+ [0x1231C]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN UDUG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1231C, -- 𒌜
+ },
+ [0x1231D]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN UM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1231D, -- ð’Œ
+ },
+ [0x1231E]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN UM TIMES LAGAB",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1231E, -- 𒌞
+ },
+ [0x1231F]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN UM TIMES ME PLUS DA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1231F, -- 𒌟
+ },
+ [0x12320]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN UM TIMES SHA0x0003",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12320, -- 𒌠
+ },
+ [0x12321]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN UM TIMES U",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12321, -- 𒌡
+ },
+ [0x12322]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN UMBIN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12322, -- 𒌢
+ },
+ [0x12323]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN UMUM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12323, -- 𒌣
+ },
+ [0x12324]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN UMUM TIMES KASKAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12324, -- 𒌤
+ },
+ [0x12325]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN UMUM TIMES PA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12325, -- 𒌥
+ },
+ [0x12326]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN UN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12326, -- 𒌦
+ },
+ [0x12327]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN UN GUNU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12327, -- 𒌧
+ },
+ [0x12328]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN UR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12328, -- 𒌨
+ },
+ [0x12329]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN UR CROSSING UR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12329, -- 𒌩
+ },
+ [0x1232A]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN UR SHESHIG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1232A, -- 𒌪
+ },
+ [0x1232B]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN UR0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1232B, -- 𒌫
+ },
+ [0x1232C]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN UR0x0002 TIMES A PLUS HA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1232C, -- 𒌬
+ },
+ [0x1232D]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN UR0x0002 TIMES A PLUS NA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1232D, -- 𒌭
+ },
+ [0x1232E]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN UR0x0002 TIMES AL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1232E, -- 𒌮
+ },
+ [0x1232F]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN UR0x0002 TIMES HA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1232F, -- 𒌯
+ },
+ [0x12330]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN UR0x0002 TIMES NUN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12330, -- 𒌰
+ },
+ [0x12331]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN UR0x0002 TIMES U0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12331, -- 𒌱
+ },
+ [0x12332]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN UR0x0002 TIMES U0x0002 PLUS ASH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12332, -- 𒌲
+ },
+ [0x12333]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN UR0x0002 TIMES U0x0002 PLUS BI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12333, -- 𒌳
+ },
+ [0x12334]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN UR0x0004",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12334, -- 𒌴
+ },
+ [0x12335]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN URI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12335, -- 𒌵
+ },
+ [0x12336]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN URI0x0003",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12336, -- 𒌶
+ },
+ [0x12337]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN URU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12337, -- 𒌷
+ },
+ [0x12338]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN URU TIMES A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12338, -- 𒌸
+ },
+ [0x12339]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN URU TIMES ASHGAB",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12339, -- 𒌹
+ },
+ [0x1233A]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN URU TIMES BAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1233A, -- 𒌺
+ },
+ [0x1233B]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN URU TIMES DUN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1233B, -- 𒌻
+ },
+ [0x1233C]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN URU TIMES GA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1233C, -- 𒌼
+ },
+ [0x1233D]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN URU TIMES GAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1233D, -- 𒌽
+ },
+ [0x1233E]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN URU TIMES GAN0x0002 TENU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1233E, -- 𒌾
+ },
+ [0x1233F]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN URU TIMES GAR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1233F, -- 𒌿
+ },
+ [0x12340]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN URU TIMES GU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12340, -- ð’€
+ },
+ [0x12341]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN URU TIMES HA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12341, -- ð’
+ },
+ [0x12342]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN URU TIMES IGI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12342, -- ð’‚
+ },
+ [0x12343]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN URU TIMES IM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12343, -- ð’ƒ
+ },
+ [0x12344]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN URU TIMES ISH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12344, -- ð’„
+ },
+ [0x12345]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN URU TIMES KI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12345, -- ð’…
+ },
+ [0x12346]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN URU TIMES LUM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12346, -- ð’†
+ },
+ [0x12347]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN URU TIMES MIN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12347, -- ð’‡
+ },
+ [0x12348]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN URU TIMES PA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12348, -- ð’ˆ
+ },
+ [0x12349]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN URU TIMES SHE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12349, -- ð’‰
+ },
+ [0x1234A]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN URU TIMES SIG0x0004",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1234A, -- ð’Š
+ },
+ [0x1234B]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN URU TIMES TU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1234B, -- ð’‹
+ },
+ [0x1234C]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN URU TIMES U PLUS GUD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1234C, -- ð’Œ
+ },
+ [0x1234D]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN URU TIMES UD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1234D, -- ð’
+ },
+ [0x1234E]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN URU TIMES URUDA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1234E, -- ð’Ž
+ },
+ [0x1234F]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN URUDA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1234F, -- ð’
+ },
+ [0x12350]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN URUDA TIMES U",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12350, -- ð’
+ },
+ [0x12351]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN USH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12351, -- ð’‘
+ },
+ [0x12352]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN USH TIMES A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12352, -- ð’’
+ },
+ [0x12353]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN USH TIMES KU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12353, -- ð’“
+ },
+ [0x12354]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN USH TIMES KUR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12354, -- ð’”
+ },
+ [0x12355]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN USH TIMES TAK0x0004",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12355, -- ð’•
+ },
+ [0x12356]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN USHX",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12356, -- ð’–
+ },
+ [0x12357]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN USH0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12357, -- ð’—
+ },
+ [0x12358]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN USHUMX",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12358, -- ð’˜
+ },
+ [0x12359]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN UTUKI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12359, -- ð’™
+ },
+ [0x1235A]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN UZ0x0003",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1235A, -- ð’š
+ },
+ [0x1235B]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN UZ0x0003 TIMES KASKAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1235B, -- ð’›
+ },
+ [0x1235C]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN UZU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1235C, -- ð’œ
+ },
+ [0x1235D]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN ZA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1235D, -- ð’
+ },
+ [0x1235E]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN ZA TENU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1235E, -- ð’ž
+ },
+ [0x1235F]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN ZA SQUARED TIMES KUR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1235F, -- ð’Ÿ
+ },
+ [0x12360]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN ZAG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12360, -- ð’ 
+ },
+ [0x12361]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN ZAMX",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12361, -- ð’¡
+ },
+ [0x12362]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN ZE0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12362, -- ð’¢
+ },
+ [0x12363]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN ZI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12363, -- ð’£
+ },
+ [0x12364]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN ZI OVER ZI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12364, -- ð’¤
+ },
+ [0x12365]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN ZI0x0003",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12365, -- ð’¥
+ },
+ [0x12366]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN ZIB",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12366, -- ð’¦
+ },
+ [0x12367]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN ZIB KABA TENU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12367, -- ð’§
+ },
+ [0x12368]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN ZIG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12368, -- ð’¨
+ },
+ [0x12369]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN ZIZ0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12369, -- ð’©
+ },
+ [0x1236A]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN ZU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1236A, -- ð’ª
+ },
+ [0x1236B]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN ZU0x0005",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1236B, -- ð’«
+ },
+ [0x1236C]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN ZU0x0005 TIMES A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1236C, -- ð’¬
+ },
+ [0x1236D]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN ZUBUR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1236D, -- ð’­
+ },
+ [0x1236E]={
+ ["category"]="lo",
+ ["description"]="CUNEIFORM SIGN ZUM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1236E, -- ð’®
+ },
+ [0x12400]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN TWO ASH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12400, -- ð’€
+ },
+ [0x12401]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN THREE ASH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12401, -- ð’
+ },
+ [0x12402]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN FOUR ASH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12402, -- ð’‚
+ },
+ [0x12403]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN FIVE ASH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12403, -- ð’ƒ
+ },
+ [0x12404]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN SIX ASH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12404, -- ð’„
+ },
+ [0x12405]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN SEVEN ASH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12405, -- ð’…
+ },
+ [0x12406]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN EIGHT ASH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12406, -- ð’†
+ },
+ [0x12407]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN NINE ASH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12407, -- ð’‡
+ },
+ [0x12408]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN THREE DISH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12408, -- ð’ˆ
+ },
+ [0x12409]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN FOUR DISH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12409, -- ð’‰
+ },
+ [0x1240A]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN FIVE DISH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1240A, -- ð’Š
+ },
+ [0x1240B]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN SIX DISH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1240B, -- ð’‹
+ },
+ [0x1240C]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN SEVEN DISH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1240C, -- ð’Œ
+ },
+ [0x1240D]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN EIGHT DISH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1240D, -- ð’
+ },
+ [0x1240E]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN NINE DISH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1240E, -- ð’Ž
+ },
+ [0x1240F]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN FOUR U",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1240F, -- ð’
+ },
+ [0x12410]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN FIVE U",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12410, -- ð’
+ },
+ [0x12411]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN SIX U",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12411, -- ð’‘
+ },
+ [0x12412]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN SEVEN U",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12412, -- ð’’
+ },
+ [0x12413]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN EIGHT U",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12413, -- ð’“
+ },
+ [0x12414]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN NINE U",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12414, -- ð’”
+ },
+ [0x12415]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN ONE GESH0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12415, -- ð’•
+ },
+ [0x12416]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN TWO GESH0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12416, -- ð’–
+ },
+ [0x12417]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN THREE GESH0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12417, -- ð’—
+ },
+ [0x12418]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN FOUR GESH0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12418, -- ð’˜
+ },
+ [0x12419]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN FIVE GESH0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12419, -- ð’™
+ },
+ [0x1241A]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN SIX GESH0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1241A, -- ð’š
+ },
+ [0x1241B]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN SEVEN GESH0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1241B, -- ð’›
+ },
+ [0x1241C]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN EIGHT GESH0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1241C, -- ð’œ
+ },
+ [0x1241D]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN NINE GESH0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1241D, -- ð’
+ },
+ [0x1241E]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN ONE GESHU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1241E, -- ð’ž
+ },
+ [0x1241F]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN TWO GESHU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1241F, -- ð’Ÿ
+ },
+ [0x12420]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN THREE GESHU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12420, -- ð’ 
+ },
+ [0x12421]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN FOUR GESHU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12421, -- ð’¡
+ },
+ [0x12422]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN FIVE GESHU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12422, -- ð’¢
+ },
+ [0x12423]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN TWO SHAR0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12423, -- ð’£
+ },
+ [0x12424]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN THREE SHAR0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12424, -- ð’¤
+ },
+ [0x12425]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN THREE SHAR0x0002 VARIANT FORM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12425, -- ð’¥
+ },
+ [0x12426]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN FOUR SHAR0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12426, -- ð’¦
+ },
+ [0x12427]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN FIVE SHAR0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12427, -- ð’§
+ },
+ [0x12428]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN SIX SHAR0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12428, -- ð’¨
+ },
+ [0x12429]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN SEVEN SHAR0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12429, -- ð’©
+ },
+ [0x1242A]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN EIGHT SHAR0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1242A, -- ð’ª
+ },
+ [0x1242B]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN NINE SHAR0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1242B, -- ð’«
+ },
+ [0x1242C]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN ONE SHARU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1242C, -- ð’¬
+ },
+ [0x1242D]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN TWO SHARU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1242D, -- ð’­
+ },
+ [0x1242E]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN THREE SHARU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1242E, -- ð’®
+ },
+ [0x1242F]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN THREE SHARU VARIANT FORM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1242F, -- ð’¯
+ },
+ [0x12430]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN FOUR SHARU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12430, -- ð’°
+ },
+ [0x12431]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN FIVE SHARU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12431, -- ð’±
+ },
+ [0x12432]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN SHAR0x0002 TIMES GAL PLUS DISH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12432, -- ð’²
+ },
+ [0x12433]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN SHAR0x0002 TIMES GAL PLUS MIN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12433, -- ð’³
+ },
+ [0x12434]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN ONE BURU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12434, -- ð’´
+ },
+ [0x12435]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN TWO BURU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12435, -- ð’µ
+ },
+ [0x12436]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN THREE BURU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12436, -- ð’¶
+ },
+ [0x12437]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN THREE BURU VARIANT FORM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12437, -- ð’·
+ },
+ [0x12438]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN FOUR BURU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12438, -- ð’¸
+ },
+ [0x12439]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN FIVE BURU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12439, -- ð’¹
+ },
+ [0x1243A]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN THREE VARIANT FORM ESH0x0010",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1243A, -- ð’º
+ },
+ [0x1243B]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN THREE VARIANT FORM ESH0x0015",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1243B, -- ð’»
+ },
+ [0x1243C]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1243C, -- ð’¼
+ },
+ [0x1243D]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU0x0004",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1243D, -- ð’½
+ },
+ [0x1243E]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1243E, -- ð’¾
+ },
+ [0x1243F]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU B",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1243F, -- ð’¿
+ },
+ [0x12440]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN SIX VARIANT FORM ASH0x0009",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12440, -- ð’‘€
+ },
+ [0x12441]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN0x0003",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12441, -- ð’‘
+ },
+ [0x12442]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12442, -- ð’‘‚
+ },
+ [0x12443]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN B",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12443, -- 𒑃
+ },
+ [0x12444]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN EIGHT VARIANT FORM USSU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12444, -- ð’‘„
+ },
+ [0x12445]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN EIGHT VARIANT FORM USSU0x0003",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12445, -- ð’‘…
+ },
+ [0x12446]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12446, -- 𒑆
+ },
+ [0x12447]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU0x0003",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12447, -- 𒑇
+ },
+ [0x12448]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU0x0004",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12448, -- 𒑈
+ },
+ [0x12449]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12449, -- 𒑉
+ },
+ [0x1244A]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN TWO ASH TENU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1244A, -- ð’‘Š
+ },
+ [0x1244B]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN THREE ASH TENU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1244B, -- ð’‘‹
+ },
+ [0x1244C]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN FOUR ASH TENU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1244C, -- 𒑌
+ },
+ [0x1244D]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN FIVE ASH TENU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1244D, -- ð’‘
+ },
+ [0x1244E]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN SIX ASH TENU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1244E, -- ð’‘Ž
+ },
+ [0x1244F]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN ONE BAN0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1244F, -- ð’‘
+ },
+ [0x12450]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN TWO BAN0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12450, -- ð’‘
+ },
+ [0x12451]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN THREE BAN0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12451, -- ð’‘‘
+ },
+ [0x12452]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN FOUR BAN0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12452, -- ð’‘’
+ },
+ [0x12453]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN FOUR BAN0x0002 VARIANT FORM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12453, -- ð’‘“
+ },
+ [0x12454]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN FIVE BAN0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12454, -- ð’‘”
+ },
+ [0x12455]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN FIVE BAN0x0002 VARIANT FORM",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12455, -- ð’‘•
+ },
+ [0x12456]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN NIGIDAMIN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12456, -- ð’‘–
+ },
+ [0x12457]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN NIGIDAESH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12457, -- ð’‘—
+ },
+ [0x12458]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN ONE ESHE0x0003",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12458, -- 𒑘
+ },
+ [0x12459]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN TWO ESHE0x0003",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12459, -- ð’‘™
+ },
+ [0x1245A]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN ONE THIRD DISH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1245A, -- ð’‘š
+ },
+ [0x1245B]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN TWO THIRDS DISH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1245B, -- ð’‘›
+ },
+ [0x1245C]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN FIVE SIXTHS DISH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1245C, -- 𒑜
+ },
+ [0x1245D]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN ONE THIRD VARIANT FORM A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1245D, -- ð’‘
+ },
+ [0x1245E]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN TWO THIRDS VARIANT FORM A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1245E, -- ð’‘ž
+ },
+ [0x1245F]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN ONE EIGHTH ASH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1245F, -- ð’‘Ÿ
+ },
+ [0x12460]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN ONE QUARTER ASH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12460, -- ð’‘ 
+ },
+ [0x12461]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE SIXTH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12461, -- ð’‘¡
+ },
+ [0x12462]={
+ ["category"]="nl",
+ ["description"]="CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE QUARTER",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x12462, -- ð’‘¢
+ },
+ [0x12470]={
+ ["category"]="po",
+ ["description"]="CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x12470, -- ð’‘°
+ },
+ [0x12471]={
+ ["category"]="po",
+ ["description"]="CUNEIFORM PUNCTUATION SIGN VERTICAL COLON",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x12471, -- ð’‘±
+ },
+ [0x12472]={
+ ["category"]="po",
+ ["description"]="CUNEIFORM PUNCTUATION SIGN DIAGONAL COLON",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x12472, -- ð’‘²
+ },
+ [0x12473]={
+ ["category"]="po",
+ ["description"]="CUNEIFORM PUNCTUATION SIGN DIAGONAL TRICOLON",
+ ["linebreak"]="ba",
+ ["unicodeslot"]=0x12473, -- ð’‘³
+ },
+ [0x1D000]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL PSILI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D000, -- ð€€
+ },
+ [0x1D001]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL DASEIA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D001, -- ð€
+ },
+ [0x1D002]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL PERISPOMENI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D002, -- ð€‚
+ },
+ [0x1D003]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL OXEIA EKFONITIKON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D003, -- ð€ƒ
+ },
+ [0x1D004]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL OXEIA DIPLI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D004, -- ð€„
+ },
+ [0x1D005]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL VAREIA EKFONITIKON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D005, -- ð€…
+ },
+ [0x1D006]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL VAREIA DIPLI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D006, -- ð€†
+ },
+ [0x1D007]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL KATHISTI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D007, -- ð€‡
+ },
+ [0x1D008]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL SYRMATIKI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D008, -- ð€ˆ
+ },
+ [0x1D009]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL PARAKLITIKI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D009, -- ð€‰
+ },
+ [0x1D00A]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL YPOKRISIS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D00A, -- ð€Š
+ },
+ [0x1D00B]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL YPOKRISIS DIPLI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D00B, -- ð€‹
+ },
+ [0x1D00C]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL KREMASTI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D00C, -- ð€Œ
+ },
+ [0x1D00D]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL APESO EKFONITIKON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D00D, -- ð€
+ },
+ [0x1D00E]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL EXO EKFONITIKON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D00E, -- ð€Ž
+ },
+ [0x1D00F]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL TELEIA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D00F, -- ð€
+ },
+ [0x1D010]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL KENTIMATA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D010, -- ð€
+ },
+ [0x1D011]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL APOSTROFOS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D011, -- ð€‘
+ },
+ [0x1D012]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL APOSTROFOS DIPLI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D012, -- ð€’
+ },
+ [0x1D013]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL SYNEVMA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D013, -- ð€“
+ },
+ [0x1D014]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL THITA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D014, -- ð€”
+ },
+ [0x1D015]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL OLIGON ARCHAION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D015, -- ð€•
+ },
+ [0x1D016]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL GORGON ARCHAION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D016, -- ð€–
+ },
+ [0x1D017]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL PSILON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D017, -- ð€—
+ },
+ [0x1D018]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL CHAMILON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D018, -- ð€˜
+ },
+ [0x1D019]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL VATHY",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D019, -- ð€™
+ },
+ [0x1D01A]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL ISON ARCHAION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D01A, -- ð€š
+ },
+ [0x1D01B]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL KENTIMA ARCHAION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D01B, -- ð€›
+ },
+ [0x1D01C]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL KENTIMATA ARCHAION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D01C, -- ð€œ
+ },
+ [0x1D01D]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL SAXIMATA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D01D, -- ð€
+ },
+ [0x1D01E]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL PARICHON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D01E, -- ð€ž
+ },
+ [0x1D01F]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL STAVROS APODEXIA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D01F, -- ð€Ÿ
+ },
+ [0x1D020]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL OXEIAI ARCHAION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D020, -- ð€ 
+ },
+ [0x1D021]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL VAREIAI ARCHAION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D021, -- ð€¡
+ },
+ [0x1D022]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL APODERMA ARCHAION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D022, -- ð€¢
+ },
+ [0x1D023]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL APOTHEMA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D023, -- ð€£
+ },
+ [0x1D024]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL KLASMA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D024, -- ð€¤
+ },
+ [0x1D025]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL REVMA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D025, -- ð€¥
+ },
+ [0x1D026]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL PIASMA ARCHAION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D026, -- ð€¦
+ },
+ [0x1D027]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL TINAGMA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D027, -- ð€§
+ },
+ [0x1D028]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL ANATRICHISMA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D028, -- ð€¨
+ },
+ [0x1D029]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL SEISMA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D029, -- ð€©
+ },
+ [0x1D02A]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL SYNAGMA ARCHAION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D02A, -- ð€ª
+ },
+ [0x1D02B]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL SYNAGMA META STAVROU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D02B, -- ð€«
+ },
+ [0x1D02C]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL OYRANISMA ARCHAION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D02C, -- ð€¬
+ },
+ [0x1D02D]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL THEMA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D02D, -- ð€­
+ },
+ [0x1D02E]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL LEMOI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D02E, -- ð€®
+ },
+ [0x1D02F]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL DYO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D02F, -- ð€¯
+ },
+ [0x1D030]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL TRIA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D030, -- ð€°
+ },
+ [0x1D031]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL TESSERA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D031, -- ð€±
+ },
+ [0x1D032]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL KRATIMATA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D032, -- ð€²
+ },
+ [0x1D033]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL APESO EXO NEO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D033, -- ð€³
+ },
+ [0x1D034]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D034, -- ð€´
+ },
+ [0x1D035]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL IMIFTHORA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D035, -- ð€µ
+ },
+ [0x1D036]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL TROMIKON ARCHAION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D036, -- ð€¶
+ },
+ [0x1D037]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL KATAVA TROMIKON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D037, -- ð€·
+ },
+ [0x1D038]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL PELASTON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D038, -- ð€¸
+ },
+ [0x1D039]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL PSIFISTON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D039, -- ð€¹
+ },
+ [0x1D03A]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL KONTEVMA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D03A, -- ð€º
+ },
+ [0x1D03B]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL CHOREVMA ARCHAION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D03B, -- ð€»
+ },
+ [0x1D03C]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL RAPISMA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D03C, -- ð€¼
+ },
+ [0x1D03D]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL PARAKALESMA ARCHAION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D03D, -- ð€½
+ },
+ [0x1D03E]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL PARAKLITIKI ARCHAION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D03E, -- ð€¾
+ },
+ [0x1D03F]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL ICHADIN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D03F, -- ð€¿
+ },
+ [0x1D040]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL NANA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D040, -- ð€
+ },
+ [0x1D041]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL PETASMA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D041, -- ð
+ },
+ [0x1D042]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL KONTEVMA ALLO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D042, -- ð‚
+ },
+ [0x1D043]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL TROMIKON ALLO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D043, -- ðƒ
+ },
+ [0x1D044]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL STRAGGISMATA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D044, -- ð„
+ },
+ [0x1D045]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL GRONTHISMATA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D045, -- ð…
+ },
+ [0x1D046]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL ISON NEO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D046, -- ð†
+ },
+ [0x1D047]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL OLIGON NEO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D047, -- ð‡
+ },
+ [0x1D048]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL OXEIA NEO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D048, -- ðˆ
+ },
+ [0x1D049]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL PETASTI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D049, -- ð‰
+ },
+ [0x1D04A]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL KOUFISMA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D04A, -- ðŠ
+ },
+ [0x1D04B]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL PETASTOKOUFISMA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D04B, -- ð‹
+ },
+ [0x1D04C]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL KRATIMOKOUFISMA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D04C, -- ðŒ
+ },
+ [0x1D04D]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL PELASTON NEO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D04D, -- ð
+ },
+ [0x1D04E]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL KENTIMATA NEO ANO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D04E, -- ðŽ
+ },
+ [0x1D04F]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL KENTIMA NEO ANO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D04F, -- ð
+ },
+ [0x1D050]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL YPSILI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D050, -- ð
+ },
+ [0x1D051]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL APOSTROFOS NEO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D051, -- ð‘
+ },
+ [0x1D052]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL APOSTROFOI SYNDESMOS NEO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D052, -- ð’
+ },
+ [0x1D053]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL YPORROI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D053, -- ð“
+ },
+ [0x1D054]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL KRATIMOYPORROON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D054, -- ð”
+ },
+ [0x1D055]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL ELAFRON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D055, -- ð•
+ },
+ [0x1D056]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL CHAMILI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D056, -- ð–
+ },
+ [0x1D057]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL MIKRON ISON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D057, -- ð—
+ },
+ [0x1D058]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL VAREIA NEO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D058, -- ð˜
+ },
+ [0x1D059]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL PIASMA NEO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D059, -- ð™
+ },
+ [0x1D05A]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL PSIFISTON NEO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D05A, -- ðš
+ },
+ [0x1D05B]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL OMALON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D05B, -- ð›
+ },
+ [0x1D05C]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL ANTIKENOMA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D05C, -- ðœ
+ },
+ [0x1D05D]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL LYGISMA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D05D, -- ð
+ },
+ [0x1D05E]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL PARAKLITIKI NEO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D05E, -- ðž
+ },
+ [0x1D05F]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL PARAKALESMA NEO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D05F, -- ðŸ
+ },
+ [0x1D060]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL ETERON PARAKALESMA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D060, -- ð 
+ },
+ [0x1D061]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL KYLISMA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D061, -- ð¡
+ },
+ [0x1D062]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL ANTIKENOKYLISMA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D062, -- ð¢
+ },
+ [0x1D063]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL TROMIKON NEO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D063, -- ð£
+ },
+ [0x1D064]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL EKSTREPTON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D064, -- ð¤
+ },
+ [0x1D065]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL SYNAGMA NEO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D065, -- ð¥
+ },
+ [0x1D066]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL SYRMA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D066, -- ð¦
+ },
+ [0x1D067]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL CHOREVMA NEO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D067, -- ð§
+ },
+ [0x1D068]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL EPEGERMA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D068, -- ð¨
+ },
+ [0x1D069]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL SEISMA NEO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D069, -- ð©
+ },
+ [0x1D06A]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL XIRON KLASMA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D06A, -- ðª
+ },
+ [0x1D06B]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL TROMIKOPSIFISTON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D06B, -- ð«
+ },
+ [0x1D06C]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL PSIFISTOLYGISMA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D06C, -- ð¬
+ },
+ [0x1D06D]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL TROMIKOLYGISMA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D06D, -- ð­
+ },
+ [0x1D06E]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL TROMIKOPARAKALESMA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D06E, -- ð®
+ },
+ [0x1D06F]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL PSIFISTOPARAKALESMA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D06F, -- ð¯
+ },
+ [0x1D070]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL TROMIKOSYNAGMA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D070, -- ð°
+ },
+ [0x1D071]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL PSIFISTOSYNAGMA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D071, -- ð±
+ },
+ [0x1D072]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL GORGOSYNTHETON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D072, -- ð²
+ },
+ [0x1D073]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL ARGOSYNTHETON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D073, -- ð³
+ },
+ [0x1D074]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL ETERON ARGOSYNTHETON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D074, -- ð´
+ },
+ [0x1D075]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL OYRANISMA NEO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D075, -- ðµ
+ },
+ [0x1D076]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL THEMATISMOS ESO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D076, -- ð¶
+ },
+ [0x1D077]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL THEMATISMOS EXO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D077, -- ð·
+ },
+ [0x1D078]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL THEMA APLOUN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D078, -- ð¸
+ },
+ [0x1D079]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL THES KAI APOTHES",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D079, -- ð¹
+ },
+ [0x1D07A]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL KATAVASMA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D07A, -- ðº
+ },
+ [0x1D07B]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL ENDOFONON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D07B, -- ð»
+ },
+ [0x1D07C]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL YFEN KATO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D07C, -- ð¼
+ },
+ [0x1D07D]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL YFEN ANO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D07D, -- ð½
+ },
+ [0x1D07E]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL STAVROS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D07E, -- ð¾
+ },
+ [0x1D07F]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL KLASMA ANO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D07F, -- ð¿
+ },
+ [0x1D080]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL DIPLI ARCHAION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D080, -- ð‚€
+ },
+ [0x1D081]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL KRATIMA ARCHAION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D081, -- ð‚
+ },
+ [0x1D082]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL KRATIMA ALLO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D082, -- ð‚‚
+ },
+ [0x1D083]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL KRATIMA NEO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D083, -- ð‚ƒ
+ },
+ [0x1D084]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL APODERMA NEO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D084, -- ð‚„
+ },
+ [0x1D085]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL APLI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D085, -- ð‚…
+ },
+ [0x1D086]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL DIPLI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D086, -- ð‚†
+ },
+ [0x1D087]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL TRIPLI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D087, -- ð‚‡
+ },
+ [0x1D088]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL TETRAPLI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D088, -- ð‚ˆ
+ },
+ [0x1D089]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL KORONIS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D089, -- ð‚‰
+ },
+ [0x1D08A]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL LEIMMA ENOS CHRONOU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D08A, -- ð‚Š
+ },
+ [0x1D08B]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL LEIMMA DYO CHRONON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D08B, -- ð‚‹
+ },
+ [0x1D08C]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL LEIMMA TRION CHRONON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D08C, -- ð‚Œ
+ },
+ [0x1D08D]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL LEIMMA TESSARON CHRONON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D08D, -- ð‚
+ },
+ [0x1D08E]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL LEIMMA IMISEOS CHRONOU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D08E, -- ð‚Ž
+ },
+ [0x1D08F]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL GORGON NEO ANO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D08F, -- ð‚
+ },
+ [0x1D090]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON ARISTERA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D090, -- ð‚
+ },
+ [0x1D091]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON DEXIA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D091, -- ð‚‘
+ },
+ [0x1D092]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL DIGORGON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D092, -- ð‚’
+ },
+ [0x1D093]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA KATO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D093, -- ð‚“
+ },
+ [0x1D094]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA ANO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D094, -- ð‚”
+ },
+ [0x1D095]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON DEXIA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D095, -- ð‚•
+ },
+ [0x1D096]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL TRIGORGON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D096, -- ð‚–
+ },
+ [0x1D097]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL ARGON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D097, -- ð‚—
+ },
+ [0x1D098]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL IMIDIARGON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D098, -- ð‚˜
+ },
+ [0x1D099]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL DIARGON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D099, -- ð‚™
+ },
+ [0x1D09A]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL AGOGI POLI ARGI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D09A, -- ð‚š
+ },
+ [0x1D09B]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL AGOGI ARGOTERI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D09B, -- ð‚›
+ },
+ [0x1D09C]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL AGOGI ARGI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D09C, -- ð‚œ
+ },
+ [0x1D09D]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL AGOGI METRIA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D09D, -- ð‚
+ },
+ [0x1D09E]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL AGOGI MESI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D09E, -- ð‚ž
+ },
+ [0x1D09F]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL AGOGI GORGI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D09F, -- ð‚Ÿ
+ },
+ [0x1D0A0]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL AGOGI GORGOTERI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0A0, -- ð‚ 
+ },
+ [0x1D0A1]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL AGOGI POLI GORGI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0A1, -- ð‚¡
+ },
+ [0x1D0A2]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOS ICHOS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0A2, -- ð‚¢
+ },
+ [0x1D0A3]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI PROTOS ICHOS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0A3, -- ð‚£
+ },
+ [0x1D0A4]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL MARTYRIA DEYTEROS ICHOS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0A4, -- ð‚¤
+ },
+ [0x1D0A5]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI DEYTEROS ICHOS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0A5, -- ð‚¥
+ },
+ [0x1D0A6]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL MARTYRIA TRITOS ICHOS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0A6, -- ð‚¦
+ },
+ [0x1D0A7]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL MARTYRIA TRIFONIAS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0A7, -- ð‚§
+ },
+ [0x1D0A8]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS ICHOS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0A8, -- ð‚¨
+ },
+ [0x1D0A9]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS LEGETOS ICHOS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0A9, -- ð‚©
+ },
+ [0x1D0AA]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL MARTYRIA LEGETOS ICHOS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0AA, -- ð‚ª
+ },
+ [0x1D0AB]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS ICHOS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0AB, -- ð‚«
+ },
+ [0x1D0AC]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL ISAKIA TELOUS ICHIMATOS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0AC, -- ð‚¬
+ },
+ [0x1D0AD]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL APOSTROFOI TELOUS ICHIMATOS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0AD, -- ð‚­
+ },
+ [0x1D0AE]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL FANEROSIS TETRAFONIAS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0AE, -- ð‚®
+ },
+ [0x1D0AF]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL FANEROSIS MONOFONIAS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0AF, -- ð‚¯
+ },
+ [0x1D0B0]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL FANEROSIS DIFONIAS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0B0, -- ð‚°
+ },
+ [0x1D0B1]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL MARTYRIA VARYS ICHOS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0B1, -- ð‚±
+ },
+ [0x1D0B2]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOVARYS ICHOS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0B2, -- ð‚²
+ },
+ [0x1D0B3]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS TETARTOS ICHOS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0B3, -- ð‚³
+ },
+ [0x1D0B4]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL GORTHMIKON N APLOUN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0B4, -- ð‚´
+ },
+ [0x1D0B5]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL GORTHMIKON N DIPLOUN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0B5, -- ð‚µ
+ },
+ [0x1D0B6]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL ENARXIS KAI FTHORA VOU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0B6, -- ð‚¶
+ },
+ [0x1D0B7]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL IMIFONON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0B7, -- ð‚·
+ },
+ [0x1D0B8]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL IMIFTHORON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0B8, -- ð‚¸
+ },
+ [0x1D0B9]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION DEYTEROU ICHOU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0B9, -- ð‚¹
+ },
+ [0x1D0BA]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI PA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0BA, -- ð‚º
+ },
+ [0x1D0BB]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NANA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0BB, -- ð‚»
+ },
+ [0x1D0BC]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL FTHORA NAOS ICHOS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0BC, -- ð‚¼
+ },
+ [0x1D0BD]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI DI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0BD, -- ð‚½
+ },
+ [0x1D0BE]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON DIATONON DI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0BE, -- ð‚¾
+ },
+ [0x1D0BF]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI KE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0BF, -- ð‚¿
+ },
+ [0x1D0C0]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI ZO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0C0, -- ðƒ€
+ },
+ [0x1D0C1]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI KATO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0C1, -- ðƒ
+ },
+ [0x1D0C2]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI ANO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0C2, -- ðƒ‚
+ },
+ [0x1D0C3]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA DIFONIAS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0C3, -- ðƒƒ
+ },
+ [0x1D0C4]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA MONOFONIAS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0C4, -- ðƒ„
+ },
+ [0x1D0C5]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL FHTORA SKLIRON CHROMA VASIS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0C5, -- ðƒ…
+ },
+ [0x1D0C6]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON CHROMA SYNAFI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0C6, -- ðƒ†
+ },
+ [0x1D0C7]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL FTHORA NENANO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0C7, -- ðƒ‡
+ },
+ [0x1D0C8]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL CHROA ZYGOS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0C8, -- ðƒˆ
+ },
+ [0x1D0C9]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL CHROA KLITON",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0C9, -- ðƒ‰
+ },
+ [0x1D0CA]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL CHROA SPATHI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0CA, -- ðƒŠ
+ },
+ [0x1D0CB]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL FTHORA I YFESIS TETARTIMORION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0CB, -- ðƒ‹
+ },
+ [0x1D0CC]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL FTHORA ENARMONIOS ANTIFONIA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0CC, -- ðƒŒ
+ },
+ [0x1D0CD]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL YFESIS TRITIMORION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0CD, -- ðƒ
+ },
+ [0x1D0CE]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL DIESIS TRITIMORION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0CE, -- ðƒŽ
+ },
+ [0x1D0CF]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL DIESIS TETARTIMORION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0CF, -- ðƒ
+ },
+ [0x1D0D0]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL DIESIS APLI DYO DODEKATA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0D0, -- ðƒ
+ },
+ [0x1D0D1]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL DIESIS MONOGRAMMOS TESSERA DODEKATA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0D1, -- ðƒ‘
+ },
+ [0x1D0D2]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL DIESIS DIGRAMMOS EX DODEKATA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0D2, -- ðƒ’
+ },
+ [0x1D0D3]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL DIESIS TRIGRAMMOS OKTO DODEKATA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0D3, -- ðƒ“
+ },
+ [0x1D0D4]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL YFESIS APLI DYO DODEKATA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0D4, -- ðƒ”
+ },
+ [0x1D0D5]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL YFESIS MONOGRAMMOS TESSERA DODEKATA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0D5, -- ðƒ•
+ },
+ [0x1D0D6]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL YFESIS DIGRAMMOS EX DODEKATA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0D6, -- ðƒ–
+ },
+ [0x1D0D7]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL YFESIS TRIGRAMMOS OKTO DODEKATA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0D7, -- ðƒ—
+ },
+ [0x1D0D8]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL GENIKI DIESIS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0D8, -- ðƒ˜
+ },
+ [0x1D0D9]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL GENIKI YFESIS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0D9, -- ðƒ™
+ },
+ [0x1D0DA]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MIKRI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0DA, -- ðƒš
+ },
+ [0x1D0DB]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MEGALI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0DB, -- ðƒ›
+ },
+ [0x1D0DC]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL DIASTOLI DIPLI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0DC, -- ðƒœ
+ },
+ [0x1D0DD]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL DIASTOLI THESEOS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0DD, -- ðƒ
+ },
+ [0x1D0DE]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0DE, -- ðƒž
+ },
+ [0x1D0DF]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS DISIMOU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0DF, -- ðƒŸ
+ },
+ [0x1D0E0]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TRISIMOU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0E0, -- ðƒ 
+ },
+ [0x1D0E1]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TETRASIMOU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0E1, -- ðƒ¡
+ },
+ [0x1D0E2]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0E2, -- ðƒ¢
+ },
+ [0x1D0E3]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS DISIMOU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0E3, -- ðƒ£
+ },
+ [0x1D0E4]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TRISIMOU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0E4, -- ðƒ¤
+ },
+ [0x1D0E5]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TETRASIMOU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0E5, -- ðƒ¥
+ },
+ [0x1D0E6]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL DIGRAMMA GG",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0E6, -- ðƒ¦
+ },
+ [0x1D0E7]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL DIFTOGGOS OU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0E7, -- ðƒ§
+ },
+ [0x1D0E8]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL STIGMA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0E8, -- ðƒ¨
+ },
+ [0x1D0E9]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL ARKTIKO PA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0E9, -- ðƒ©
+ },
+ [0x1D0EA]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL ARKTIKO VOU",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0EA, -- ðƒª
+ },
+ [0x1D0EB]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL ARKTIKO GA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0EB, -- ðƒ«
+ },
+ [0x1D0EC]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL ARKTIKO DI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0EC, -- ðƒ¬
+ },
+ [0x1D0ED]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL ARKTIKO KE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0ED, -- ðƒ­
+ },
+ [0x1D0EE]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL ARKTIKO ZO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0EE, -- ðƒ®
+ },
+ [0x1D0EF]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL ARKTIKO NI",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0EF, -- ðƒ¯
+ },
+ [0x1D0F0]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL KENTIMATA NEO MESO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0F0, -- ðƒ°
+ },
+ [0x1D0F1]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL KENTIMA NEO MESO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0F1, -- ðƒ±
+ },
+ [0x1D0F2]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL KENTIMATA NEO KATO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0F2, -- ðƒ²
+ },
+ [0x1D0F3]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL KENTIMA NEO KATO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0F3, -- ðƒ³
+ },
+ [0x1D0F4]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL KLASMA KATO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0F4, -- ðƒ´
+ },
+ [0x1D0F5]={
+ ["category"]="so",
+ ["description"]="BYZANTINE MUSICAL SYMBOL GORGON NEO KATO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D0F5, -- ðƒµ
+ },
+ [0x1D100]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL SINGLE BARLINE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D100, -- ð„€
+ },
+ [0x1D101]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL DOUBLE BARLINE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D101, -- ð„
+ },
+ [0x1D102]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL FINAL BARLINE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D102, -- ð„‚
+ },
+ [0x1D103]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL REVERSE FINAL BARLINE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D103, -- ð„ƒ
+ },
+ [0x1D104]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL DASHED BARLINE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D104, -- ð„„
+ },
+ [0x1D105]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL SHORT BARLINE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D105, -- ð„…
+ },
+ [0x1D106]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL LEFT REPEAT SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D106, -- ð„†
+ },
+ [0x1D107]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL RIGHT REPEAT SIGN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D107, -- ð„‡
+ },
+ [0x1D108]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL REPEAT DOTS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D108, -- ð„ˆ
+ },
+ [0x1D109]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL DAL SEGNO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D109, -- ð„‰
+ },
+ [0x1D10A]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL DA CAPO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D10A, -- ð„Š
+ },
+ [0x1D10B]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL SEGNO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D10B, -- ð„‹
+ },
+ [0x1D10C]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL CODA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D10C, -- ð„Œ
+ },
+ [0x1D10D]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL REPEATED FIGURE-0x0001",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D10D, -- ð„
+ },
+ [0x1D10E]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL REPEATED FIGURE-0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D10E, -- ð„Ž
+ },
+ [0x1D10F]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL REPEATED FIGURE-0x0003",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D10F, -- ð„
+ },
+ [0x1D110]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL FERMATA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D110, -- ð„
+ },
+ [0x1D111]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL FERMATA BELOW",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D111, -- ð„‘
+ },
+ [0x1D112]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL BREATH MARK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D112, -- ð„’
+ },
+ [0x1D113]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL CAESURA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D113, -- ð„“
+ },
+ [0x1D114]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL BRACE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D114, -- ð„”
+ },
+ [0x1D115]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL BRACKET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D115, -- ð„•
+ },
+ [0x1D116]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL ONE-LINE STAFF",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D116, -- ð„–
+ },
+ [0x1D117]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL TWO-LINE STAFF",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D117, -- ð„—
+ },
+ [0x1D118]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL THREE-LINE STAFF",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D118, -- ð„˜
+ },
+ [0x1D119]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL FOUR-LINE STAFF",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D119, -- ð„™
+ },
+ [0x1D11A]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL FIVE-LINE STAFF",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D11A, -- ð„š
+ },
+ [0x1D11B]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL SIX-LINE STAFF",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D11B, -- ð„›
+ },
+ [0x1D11C]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL SIX-STRING FRETBOARD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D11C, -- ð„œ
+ },
+ [0x1D11D]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL FOUR-STRING FRETBOARD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D11D, -- ð„
+ },
+ [0x1D11E]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL G CLEF",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D11E, -- ð„ž
+ },
+ [0x1D11F]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL G CLEF OTTAVA ALTA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D11F, -- ð„Ÿ
+ },
+ [0x1D120]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL G CLEF OTTAVA BASSA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D120, -- ð„ 
+ },
+ [0x1D121]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL C CLEF",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D121, -- ð„¡
+ },
+ [0x1D122]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL F CLEF",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D122, -- ð„¢
+ },
+ [0x1D123]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL F CLEF OTTAVA ALTA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D123, -- ð„£
+ },
+ [0x1D124]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL F CLEF OTTAVA BASSA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D124, -- ð„¤
+ },
+ [0x1D125]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL DRUM CLEF-0x0001",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D125, -- ð„¥
+ },
+ [0x1D126]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL DRUM CLEF-0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D126, -- ð„¦
+ },
+ [0x1D12A]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL DOUBLE SHARP",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D12A, -- ð„ª
+ },
+ [0x1D12B]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL DOUBLE FLAT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D12B, -- ð„«
+ },
+ [0x1D12C]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL FLAT UP",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D12C, -- ð„¬
+ },
+ [0x1D12D]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL FLAT DOWN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D12D, -- ð„­
+ },
+ [0x1D12E]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL NATURAL UP",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D12E, -- ð„®
+ },
+ [0x1D12F]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL NATURAL DOWN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D12F, -- ð„¯
+ },
+ [0x1D130]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL SHARP UP",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D130, -- ð„°
+ },
+ [0x1D131]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL SHARP DOWN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D131, -- ð„±
+ },
+ [0x1D132]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL QUARTER TONE SHARP",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D132, -- ð„²
+ },
+ [0x1D133]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL QUARTER TONE FLAT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D133, -- ð„³
+ },
+ [0x1D134]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL COMMON TIME",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D134, -- ð„´
+ },
+ [0x1D135]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL CUT TIME",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D135, -- ð„µ
+ },
+ [0x1D136]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL OTTAVA ALTA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D136, -- ð„¶
+ },
+ [0x1D137]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL OTTAVA BASSA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D137, -- ð„·
+ },
+ [0x1D138]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL QUINDICESIMA ALTA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D138, -- ð„¸
+ },
+ [0x1D139]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL QUINDICESIMA BASSA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D139, -- ð„¹
+ },
+ [0x1D13A]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL MULTI REST",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D13A, -- ð„º
+ },
+ [0x1D13B]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL WHOLE REST",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D13B, -- ð„»
+ },
+ [0x1D13C]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL HALF REST",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D13C, -- ð„¼
+ },
+ [0x1D13D]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL QUARTER REST",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D13D, -- ð„½
+ },
+ [0x1D13E]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL EIGHTH REST",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D13E, -- ð„¾
+ },
+ [0x1D13F]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL SIXTEENTH REST",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D13F, -- ð„¿
+ },
+ [0x1D140]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL THIRTY-SECOND REST",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D140, -- ð…€
+ },
+ [0x1D141]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL SIXTY-FOURTH REST",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D141, -- ð…
+ },
+ [0x1D142]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH REST",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D142, -- ð…‚
+ },
+ [0x1D143]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL X NOTEHEAD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D143, -- ð…ƒ
+ },
+ [0x1D144]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL PLUS NOTEHEAD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D144, -- ð…„
+ },
+ [0x1D145]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL CIRCLE X NOTEHEAD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D145, -- ð……
+ },
+ [0x1D146]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL SQUARE NOTEHEAD WHITE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D146, -- ð…†
+ },
+ [0x1D147]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL SQUARE NOTEHEAD BLACK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D147, -- ð…‡
+ },
+ [0x1D148]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL TRIANGLE NOTEHEAD UP WHITE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D148, -- ð…ˆ
+ },
+ [0x1D149]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL TRIANGLE NOTEHEAD UP BLACK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D149, -- ð…‰
+ },
+ [0x1D14A]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT WHITE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D14A, -- ð…Š
+ },
+ [0x1D14B]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT BLACK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D14B, -- ð…‹
+ },
+ [0x1D14C]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT WHITE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D14C, -- ð…Œ
+ },
+ [0x1D14D]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT BLACK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D14D, -- ð…
+ },
+ [0x1D14E]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN WHITE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D14E, -- ð…Ž
+ },
+ [0x1D14F]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN BLACK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D14F, -- ð…
+ },
+ [0x1D150]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT WHITE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D150, -- ð…
+ },
+ [0x1D151]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT BLACK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D151, -- ð…‘
+ },
+ [0x1D152]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL MOON NOTEHEAD WHITE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D152, -- ð…’
+ },
+ [0x1D153]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL MOON NOTEHEAD BLACK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D153, -- ð…“
+ },
+ [0x1D154]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN WHITE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D154, -- ð…”
+ },
+ [0x1D155]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN BLACK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D155, -- ð…•
+ },
+ [0x1D156]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL PARENTHESIS NOTEHEAD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D156, -- ð…–
+ },
+ [0x1D157]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL VOID NOTEHEAD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D157, -- ð…—
+ },
+ [0x1D158]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL NOTEHEAD BLACK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D158, -- ð…˜
+ },
+ [0x1D159]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL NULL NOTEHEAD",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D159, -- ð…™
+ },
+ [0x1D15A]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL CLUSTER NOTEHEAD WHITE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D15A, -- ð…š
+ },
+ [0x1D15B]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL CLUSTER NOTEHEAD BLACK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D15B, -- ð…›
+ },
+ [0x1D15C]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL BREVE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D15C, -- ð…œ
+ },
+ [0x1D15D]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL WHOLE NOTE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D15D, -- ð…
+ },
+ [0x1D15E]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL HALF NOTE",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x1D157, 0x1D165 },
+ ["unicodeslot"]=0x1D15E, -- ð…ž
+ },
+ [0x1D15F]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL QUARTER NOTE",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x1D158, 0x1D165 },
+ ["unicodeslot"]=0x1D15F, -- ð…Ÿ
+ },
+ [0x1D160]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL EIGHTH NOTE",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x1D15F, 0x1D16E },
+ ["unicodeslot"]=0x1D160, -- ð… 
+ },
+ [0x1D161]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL SIXTEENTH NOTE",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x1D15F, 0x1D16F },
+ ["unicodeslot"]=0x1D161, -- ð…¡
+ },
+ [0x1D162]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL THIRTY-SECOND NOTE",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x1D15F, 0x1D170 },
+ ["unicodeslot"]=0x1D162, -- ð…¢
+ },
+ [0x1D163]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL SIXTY-FOURTH NOTE",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x1D15F, 0x1D171 },
+ ["unicodeslot"]=0x1D163, -- ð…£
+ },
+ [0x1D164]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x1D15F, 0x1D172 },
+ ["unicodeslot"]=0x1D164, -- ð…¤
+ },
+ [0x1D165]={
+ ["category"]="mc",
+ ["description"]="MUSICAL SYMBOL COMBINING STEM",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1D165, -- ð…¥
+ },
+ [0x1D166]={
+ ["category"]="mc",
+ ["description"]="MUSICAL SYMBOL COMBINING SPRECHGESANG STEM",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1D166, -- ð…¦
+ },
+ [0x1D167]={
+ ["category"]="mn",
+ ["description"]="MUSICAL SYMBOL COMBINING TREMOLO-0x0001",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1D167, -- ð…§
+ },
+ [0x1D168]={
+ ["category"]="mn",
+ ["description"]="MUSICAL SYMBOL COMBINING TREMOLO-0x0002",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1D168, -- ð…¨
+ },
+ [0x1D169]={
+ ["category"]="mn",
+ ["description"]="MUSICAL SYMBOL COMBINING TREMOLO-0x0003",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1D169, -- ð…©
+ },
+ [0x1D16A]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL FINGERED TREMOLO-0x0001",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D16A, -- ð…ª
+ },
+ [0x1D16B]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL FINGERED TREMOLO-0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D16B, -- ð…«
+ },
+ [0x1D16C]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL FINGERED TREMOLO-0x0003",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D16C, -- ð…¬
+ },
+ [0x1D16D]={
+ ["category"]="mc",
+ ["description"]="MUSICAL SYMBOL COMBINING AUGMENTATION DOT",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1D16D, -- ð…­
+ },
+ [0x1D16E]={
+ ["category"]="mc",
+ ["description"]="MUSICAL SYMBOL COMBINING FLAG-0x0001",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1D16E, -- ð…®
+ },
+ [0x1D16F]={
+ ["category"]="mc",
+ ["description"]="MUSICAL SYMBOL COMBINING FLAG-0x0002",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1D16F, -- ð…¯
+ },
+ [0x1D170]={
+ ["category"]="mc",
+ ["description"]="MUSICAL SYMBOL COMBINING FLAG-0x0003",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1D170, -- ð…°
+ },
+ [0x1D171]={
+ ["category"]="mc",
+ ["description"]="MUSICAL SYMBOL COMBINING FLAG-0x0004",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1D171, -- ð…±
+ },
+ [0x1D172]={
+ ["category"]="mc",
+ ["description"]="MUSICAL SYMBOL COMBINING FLAG-0x0005",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1D172, -- ð…²
+ },
+ [0x1D173]={
+ ["category"]="cf",
+ ["description"]="MUSICAL SYMBOL BEGIN BEAM",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1D173, -- ð…³
+ },
+ [0x1D174]={
+ ["category"]="cf",
+ ["description"]="MUSICAL SYMBOL END BEAM",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1D174, -- ð…´
+ },
+ [0x1D175]={
+ ["category"]="cf",
+ ["description"]="MUSICAL SYMBOL BEGIN TIE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1D175, -- ð…µ
+ },
+ [0x1D176]={
+ ["category"]="cf",
+ ["description"]="MUSICAL SYMBOL END TIE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1D176, -- ð…¶
+ },
+ [0x1D177]={
+ ["category"]="cf",
+ ["description"]="MUSICAL SYMBOL BEGIN SLUR",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1D177, -- ð…·
+ },
+ [0x1D178]={
+ ["category"]="cf",
+ ["description"]="MUSICAL SYMBOL END SLUR",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1D178, -- ð…¸
+ },
+ [0x1D179]={
+ ["category"]="cf",
+ ["description"]="MUSICAL SYMBOL BEGIN PHRASE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1D179, -- ð…¹
+ },
+ [0x1D17A]={
+ ["category"]="cf",
+ ["description"]="MUSICAL SYMBOL END PHRASE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1D17A, -- ð…º
+ },
+ [0x1D17B]={
+ ["category"]="mn",
+ ["description"]="MUSICAL SYMBOL COMBINING ACCENT",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1D17B, -- ð…»
+ },
+ [0x1D17C]={
+ ["category"]="mn",
+ ["description"]="MUSICAL SYMBOL COMBINING STACCATO",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1D17C, -- ð…¼
+ },
+ [0x1D17D]={
+ ["category"]="mn",
+ ["description"]="MUSICAL SYMBOL COMBINING TENUTO",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1D17D, -- ð…½
+ },
+ [0x1D17E]={
+ ["category"]="mn",
+ ["description"]="MUSICAL SYMBOL COMBINING STACCATISSIMO",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1D17E, -- ð…¾
+ },
+ [0x1D17F]={
+ ["category"]="mn",
+ ["description"]="MUSICAL SYMBOL COMBINING MARCATO",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1D17F, -- ð…¿
+ },
+ [0x1D180]={
+ ["category"]="mn",
+ ["description"]="MUSICAL SYMBOL COMBINING MARCATO-STACCATO",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1D180, -- ð†€
+ },
+ [0x1D181]={
+ ["category"]="mn",
+ ["description"]="MUSICAL SYMBOL COMBINING ACCENT-STACCATO",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1D181, -- ð†
+ },
+ [0x1D182]={
+ ["category"]="mn",
+ ["description"]="MUSICAL SYMBOL COMBINING LOURE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1D182, -- ð†‚
+ },
+ [0x1D183]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL ARPEGGIATO UP",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D183, -- ð†ƒ
+ },
+ [0x1D184]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL ARPEGGIATO DOWN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D184, -- ð†„
+ },
+ [0x1D185]={
+ ["category"]="mn",
+ ["description"]="MUSICAL SYMBOL COMBINING DOIT",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1D185, -- ð†…
+ },
+ [0x1D186]={
+ ["category"]="mn",
+ ["description"]="MUSICAL SYMBOL COMBINING RIP",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1D186, -- ð††
+ },
+ [0x1D187]={
+ ["category"]="mn",
+ ["description"]="MUSICAL SYMBOL COMBINING FLIP",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1D187, -- ð†‡
+ },
+ [0x1D188]={
+ ["category"]="mn",
+ ["description"]="MUSICAL SYMBOL COMBINING SMEAR",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1D188, -- ð†ˆ
+ },
+ [0x1D189]={
+ ["category"]="mn",
+ ["description"]="MUSICAL SYMBOL COMBINING BEND",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1D189, -- ð†‰
+ },
+ [0x1D18A]={
+ ["category"]="mn",
+ ["description"]="MUSICAL SYMBOL COMBINING DOUBLE TONGUE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1D18A, -- ð†Š
+ },
+ [0x1D18B]={
+ ["category"]="mn",
+ ["description"]="MUSICAL SYMBOL COMBINING TRIPLE TONGUE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1D18B, -- ð†‹
+ },
+ [0x1D18C]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL RINFORZANDO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D18C, -- ð†Œ
+ },
+ [0x1D18D]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL SUBITO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D18D, -- ð†
+ },
+ [0x1D18E]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL Z",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D18E, -- ð†Ž
+ },
+ [0x1D18F]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL PIANO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D18F, -- ð†
+ },
+ [0x1D190]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL MEZZO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D190, -- ð†
+ },
+ [0x1D191]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL FORTE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D191, -- ð†‘
+ },
+ [0x1D192]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL CRESCENDO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D192, -- ð†’
+ },
+ [0x1D193]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL DECRESCENDO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D193, -- ð†“
+ },
+ [0x1D194]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL GRACE NOTE SLASH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D194, -- ð†”
+ },
+ [0x1D195]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL GRACE NOTE NO SLASH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D195, -- ð†•
+ },
+ [0x1D196]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL TR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D196, -- ð†–
+ },
+ [0x1D197]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL TURN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D197, -- ð†—
+ },
+ [0x1D198]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL INVERTED TURN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D198, -- ð†˜
+ },
+ [0x1D199]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL TURN SLASH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D199, -- ð†™
+ },
+ [0x1D19A]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL TURN UP",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D19A, -- ð†š
+ },
+ [0x1D19B]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL ORNAMENT STROKE-0x0001",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D19B, -- ð†›
+ },
+ [0x1D19C]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL ORNAMENT STROKE-0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D19C, -- ð†œ
+ },
+ [0x1D19D]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL ORNAMENT STROKE-0x0003",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D19D, -- ð†
+ },
+ [0x1D19E]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL ORNAMENT STROKE-0x0004",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D19E, -- ð†ž
+ },
+ [0x1D19F]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL ORNAMENT STROKE-0x0005",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D19F, -- ð†Ÿ
+ },
+ [0x1D1A0]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL ORNAMENT STROKE-0x0006",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D1A0, -- ð† 
+ },
+ [0x1D1A1]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL ORNAMENT STROKE-0x0007",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D1A1, -- ð†¡
+ },
+ [0x1D1A2]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL ORNAMENT STROKE-0x0008",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D1A2, -- ð†¢
+ },
+ [0x1D1A3]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL ORNAMENT STROKE-0x0009",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D1A3, -- ð†£
+ },
+ [0x1D1A4]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL ORNAMENT STROKE-0x000A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D1A4, -- ð†¤
+ },
+ [0x1D1A5]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL ORNAMENT STROKE-0x000B",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D1A5, -- ð†¥
+ },
+ [0x1D1A6]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL HAUPTSTIMME",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D1A6, -- ð†¦
+ },
+ [0x1D1A7]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL NEBENSTIMME",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D1A7, -- ð†§
+ },
+ [0x1D1A8]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL END OF STIMME",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D1A8, -- ð†¨
+ },
+ [0x1D1A9]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL DEGREE SLASH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D1A9, -- ð†©
+ },
+ [0x1D1AA]={
+ ["category"]="mn",
+ ["description"]="MUSICAL SYMBOL COMBINING DOWN BOW",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1D1AA, -- ð†ª
+ },
+ [0x1D1AB]={
+ ["category"]="mn",
+ ["description"]="MUSICAL SYMBOL COMBINING UP BOW",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1D1AB, -- ð†«
+ },
+ [0x1D1AC]={
+ ["category"]="mn",
+ ["description"]="MUSICAL SYMBOL COMBINING HARMONIC",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1D1AC, -- ð†¬
+ },
+ [0x1D1AD]={
+ ["category"]="mn",
+ ["description"]="MUSICAL SYMBOL COMBINING SNAP PIZZICATO",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1D1AD, -- ð†­
+ },
+ [0x1D1AE]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL PEDAL MARK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D1AE, -- ð†®
+ },
+ [0x1D1AF]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL PEDAL UP MARK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D1AF, -- ð†¯
+ },
+ [0x1D1B0]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL HALF PEDAL MARK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D1B0, -- ð†°
+ },
+ [0x1D1B1]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL GLISSANDO UP",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D1B1, -- ð†±
+ },
+ [0x1D1B2]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL GLISSANDO DOWN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D1B2, -- ð†²
+ },
+ [0x1D1B3]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL WITH FINGERNAILS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D1B3, -- ð†³
+ },
+ [0x1D1B4]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL DAMP",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D1B4, -- ð†´
+ },
+ [0x1D1B5]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL DAMP ALL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D1B5, -- ð†µ
+ },
+ [0x1D1B6]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL MAXIMA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D1B6, -- ð†¶
+ },
+ [0x1D1B7]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL LONGA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D1B7, -- ð†·
+ },
+ [0x1D1B8]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL BREVIS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D1B8, -- ð†¸
+ },
+ [0x1D1B9]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL SEMIBREVIS WHITE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D1B9, -- ð†¹
+ },
+ [0x1D1BA]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL SEMIBREVIS BLACK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D1BA, -- ð†º
+ },
+ [0x1D1BB]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL MINIMA",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x1D1B9, 0x1D165 },
+ ["unicodeslot"]=0x1D1BB, -- ð†»
+ },
+ [0x1D1BC]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL MINIMA BLACK",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x1D1BA, 0x1D165 },
+ ["unicodeslot"]=0x1D1BC, -- ð†¼
+ },
+ [0x1D1BD]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL SEMIMINIMA WHITE",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x1D1BB, 0x1D16E },
+ ["unicodeslot"]=0x1D1BD, -- ð†½
+ },
+ [0x1D1BE]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL SEMIMINIMA BLACK",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x1D1BC, 0x1D16E },
+ ["unicodeslot"]=0x1D1BE, -- ð†¾
+ },
+ [0x1D1BF]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL FUSA WHITE",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x1D1BB, 0x1D16F },
+ ["unicodeslot"]=0x1D1BF, -- ð†¿
+ },
+ [0x1D1C0]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL FUSA BLACK",
+ ["linebreak"]="al",
+ ["specials"]={ "char", 0x1D1BC, 0x1D16F },
+ ["unicodeslot"]=0x1D1C0, -- ð‡€
+ },
+ [0x1D1C1]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL LONGA PERFECTA REST",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D1C1, -- ð‡
+ },
+ [0x1D1C2]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL LONGA IMPERFECTA REST",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D1C2, -- ð‡‚
+ },
+ [0x1D1C3]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL BREVIS REST",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D1C3, -- ð‡ƒ
+ },
+ [0x1D1C4]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL SEMIBREVIS REST",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D1C4, -- ð‡„
+ },
+ [0x1D1C5]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL MINIMA REST",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D1C5, -- ð‡…
+ },
+ [0x1D1C6]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL SEMIMINIMA REST",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D1C6, -- ð‡†
+ },
+ [0x1D1C7]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D1C7, -- ð‡‡
+ },
+ [0x1D1C8]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE IMPERFECTA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D1C8, -- ð‡ˆ
+ },
+ [0x1D1C9]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA DIMINUTION-0x0001",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D1C9, -- ð‡‰
+ },
+ [0x1D1CA]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE PERFECTA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D1CA, -- ð‡Š
+ },
+ [0x1D1CB]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D1CB, -- ð‡‹
+ },
+ [0x1D1CC]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-0x0001",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D1CC, -- ð‡Œ
+ },
+ [0x1D1CD]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D1CD, -- ð‡
+ },
+ [0x1D1CE]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-0x0003",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D1CE, -- ð‡Ž
+ },
+ [0x1D1CF]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL CROIX",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D1CF, -- ð‡
+ },
+ [0x1D1D0]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL GREGORIAN C CLEF",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D1D0, -- ð‡
+ },
+ [0x1D1D1]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL GREGORIAN F CLEF",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D1D1, -- ð‡‘
+ },
+ [0x1D1D2]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL SQUARE B",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D1D2, -- ð‡’
+ },
+ [0x1D1D3]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL VIRGA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D1D3, -- ð‡“
+ },
+ [0x1D1D4]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL PODATUS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D1D4, -- ð‡”
+ },
+ [0x1D1D5]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL CLIVIS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D1D5, -- ð‡•
+ },
+ [0x1D1D6]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL SCANDICUS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D1D6, -- ð‡–
+ },
+ [0x1D1D7]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL CLIMACUS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D1D7, -- ð‡—
+ },
+ [0x1D1D8]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL TORCULUS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D1D8, -- ð‡˜
+ },
+ [0x1D1D9]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL PORRECTUS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D1D9, -- ð‡™
+ },
+ [0x1D1DA]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL PORRECTUS FLEXUS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D1DA, -- ð‡š
+ },
+ [0x1D1DB]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL SCANDICUS FLEXUS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D1DB, -- ð‡›
+ },
+ [0x1D1DC]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL TORCULUS RESUPINUS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D1DC, -- ð‡œ
+ },
+ [0x1D1DD]={
+ ["category"]="so",
+ ["description"]="MUSICAL SYMBOL PES SUBPUNCTIS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D1DD, -- ð‡
+ },
+ [0x1D200]={
+ ["category"]="so",
+ ["description"]="GREEK VOCAL NOTATION SYMBOL-0x0001",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D200, -- ðˆ€
+ },
+ [0x1D201]={
+ ["category"]="so",
+ ["description"]="GREEK VOCAL NOTATION SYMBOL-0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D201, -- ðˆ
+ },
+ [0x1D202]={
+ ["category"]="so",
+ ["description"]="GREEK VOCAL NOTATION SYMBOL-0x0003",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D202, -- ðˆ‚
+ },
+ [0x1D203]={
+ ["category"]="so",
+ ["description"]="GREEK VOCAL NOTATION SYMBOL-0x0004",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D203, -- ðˆƒ
+ },
+ [0x1D204]={
+ ["category"]="so",
+ ["description"]="GREEK VOCAL NOTATION SYMBOL-0x0005",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D204, -- ðˆ„
+ },
+ [0x1D205]={
+ ["category"]="so",
+ ["description"]="GREEK VOCAL NOTATION SYMBOL-0x0006",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D205, -- ðˆ…
+ },
+ [0x1D206]={
+ ["category"]="so",
+ ["description"]="GREEK VOCAL NOTATION SYMBOL-0x0007",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D206, -- ðˆ†
+ },
+ [0x1D207]={
+ ["category"]="so",
+ ["description"]="GREEK VOCAL NOTATION SYMBOL-0x0008",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D207, -- ðˆ‡
+ },
+ [0x1D208]={
+ ["category"]="so",
+ ["description"]="GREEK VOCAL NOTATION SYMBOL-0x0009",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D208, -- ðˆˆ
+ },
+ [0x1D209]={
+ ["category"]="so",
+ ["description"]="GREEK VOCAL NOTATION SYMBOL-0x000A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D209, -- ðˆ‰
+ },
+ [0x1D20A]={
+ ["category"]="so",
+ ["description"]="GREEK VOCAL NOTATION SYMBOL-0x000B",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D20A, -- ðˆŠ
+ },
+ [0x1D20B]={
+ ["category"]="so",
+ ["description"]="GREEK VOCAL NOTATION SYMBOL-0x000C",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D20B, -- ðˆ‹
+ },
+ [0x1D20C]={
+ ["category"]="so",
+ ["description"]="GREEK VOCAL NOTATION SYMBOL-0x000D",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D20C, -- ðˆŒ
+ },
+ [0x1D20D]={
+ ["category"]="so",
+ ["description"]="GREEK VOCAL NOTATION SYMBOL-0x000E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D20D, -- ðˆ
+ },
+ [0x1D20E]={
+ ["category"]="so",
+ ["description"]="GREEK VOCAL NOTATION SYMBOL-0x000F",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D20E, -- ðˆŽ
+ },
+ [0x1D20F]={
+ ["category"]="so",
+ ["description"]="GREEK VOCAL NOTATION SYMBOL-0x0010",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D20F, -- ðˆ
+ },
+ [0x1D210]={
+ ["category"]="so",
+ ["description"]="GREEK VOCAL NOTATION SYMBOL-0x0011",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D210, -- ðˆ
+ },
+ [0x1D211]={
+ ["category"]="so",
+ ["description"]="GREEK VOCAL NOTATION SYMBOL-0x0012",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D211, -- ðˆ‘
+ },
+ [0x1D212]={
+ ["category"]="so",
+ ["description"]="GREEK VOCAL NOTATION SYMBOL-0x0013",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D212, -- ðˆ’
+ },
+ [0x1D213]={
+ ["category"]="so",
+ ["description"]="GREEK VOCAL NOTATION SYMBOL-0x0014",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D213, -- ðˆ“
+ },
+ [0x1D214]={
+ ["category"]="so",
+ ["description"]="GREEK VOCAL NOTATION SYMBOL-0x0015",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D214, -- ðˆ”
+ },
+ [0x1D215]={
+ ["category"]="so",
+ ["description"]="GREEK VOCAL NOTATION SYMBOL-0x0016",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D215, -- ðˆ•
+ },
+ [0x1D216]={
+ ["category"]="so",
+ ["description"]="GREEK VOCAL NOTATION SYMBOL-0x0017",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D216, -- ðˆ–
+ },
+ [0x1D217]={
+ ["category"]="so",
+ ["description"]="GREEK VOCAL NOTATION SYMBOL-0x0018",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D217, -- ðˆ—
+ },
+ [0x1D218]={
+ ["category"]="so",
+ ["description"]="GREEK VOCAL NOTATION SYMBOL-0x0032",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D218, -- ðˆ˜
+ },
+ [0x1D219]={
+ ["category"]="so",
+ ["description"]="GREEK VOCAL NOTATION SYMBOL-0x0033",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D219, -- ðˆ™
+ },
+ [0x1D21A]={
+ ["category"]="so",
+ ["description"]="GREEK VOCAL NOTATION SYMBOL-0x0034",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D21A, -- ðˆš
+ },
+ [0x1D21B]={
+ ["category"]="so",
+ ["description"]="GREEK VOCAL NOTATION SYMBOL-0x0035",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D21B, -- ðˆ›
+ },
+ [0x1D21C]={
+ ["category"]="so",
+ ["description"]="GREEK VOCAL NOTATION SYMBOL-0x0036",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D21C, -- ðˆœ
+ },
+ [0x1D21D]={
+ ["category"]="so",
+ ["description"]="GREEK INSTRUMENTAL NOTATION SYMBOL-0x0001",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D21D, -- ðˆ
+ },
+ [0x1D21E]={
+ ["category"]="so",
+ ["description"]="GREEK INSTRUMENTAL NOTATION SYMBOL-0x0002",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D21E, -- ðˆž
+ },
+ [0x1D21F]={
+ ["category"]="so",
+ ["description"]="GREEK INSTRUMENTAL NOTATION SYMBOL-0x0004",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D21F, -- ðˆŸ
+ },
+ [0x1D220]={
+ ["category"]="so",
+ ["description"]="GREEK INSTRUMENTAL NOTATION SYMBOL-0x0005",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D220, -- ðˆ 
+ },
+ [0x1D221]={
+ ["category"]="so",
+ ["description"]="GREEK INSTRUMENTAL NOTATION SYMBOL-0x0007",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D221, -- ðˆ¡
+ },
+ [0x1D222]={
+ ["category"]="so",
+ ["description"]="GREEK INSTRUMENTAL NOTATION SYMBOL-0x0008",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D222, -- ðˆ¢
+ },
+ [0x1D223]={
+ ["category"]="so",
+ ["description"]="GREEK INSTRUMENTAL NOTATION SYMBOL-0x000B",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D223, -- ðˆ£
+ },
+ [0x1D224]={
+ ["category"]="so",
+ ["description"]="GREEK INSTRUMENTAL NOTATION SYMBOL-0x000C",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D224, -- ðˆ¤
+ },
+ [0x1D225]={
+ ["category"]="so",
+ ["description"]="GREEK INSTRUMENTAL NOTATION SYMBOL-0x000D",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D225, -- ðˆ¥
+ },
+ [0x1D226]={
+ ["category"]="so",
+ ["description"]="GREEK INSTRUMENTAL NOTATION SYMBOL-0x000E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D226, -- ðˆ¦
+ },
+ [0x1D227]={
+ ["category"]="so",
+ ["description"]="GREEK INSTRUMENTAL NOTATION SYMBOL-0x0011",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D227, -- ðˆ§
+ },
+ [0x1D228]={
+ ["category"]="so",
+ ["description"]="GREEK INSTRUMENTAL NOTATION SYMBOL-0x0012",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D228, -- ðˆ¨
+ },
+ [0x1D229]={
+ ["category"]="so",
+ ["description"]="GREEK INSTRUMENTAL NOTATION SYMBOL-0x0013",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D229, -- ðˆ©
+ },
+ [0x1D22A]={
+ ["category"]="so",
+ ["description"]="GREEK INSTRUMENTAL NOTATION SYMBOL-0x0017",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D22A, -- ðˆª
+ },
+ [0x1D22B]={
+ ["category"]="so",
+ ["description"]="GREEK INSTRUMENTAL NOTATION SYMBOL-0x0018",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D22B, -- ðˆ«
+ },
+ [0x1D22C]={
+ ["category"]="so",
+ ["description"]="GREEK INSTRUMENTAL NOTATION SYMBOL-0x0019",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D22C, -- ðˆ¬
+ },
+ [0x1D22D]={
+ ["category"]="so",
+ ["description"]="GREEK INSTRUMENTAL NOTATION SYMBOL-0x001A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D22D, -- ðˆ­
+ },
+ [0x1D22E]={
+ ["category"]="so",
+ ["description"]="GREEK INSTRUMENTAL NOTATION SYMBOL-0x001B",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D22E, -- ðˆ®
+ },
+ [0x1D22F]={
+ ["category"]="so",
+ ["description"]="GREEK INSTRUMENTAL NOTATION SYMBOL-0x001D",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D22F, -- ðˆ¯
+ },
+ [0x1D230]={
+ ["category"]="so",
+ ["description"]="GREEK INSTRUMENTAL NOTATION SYMBOL-0x001E",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D230, -- ðˆ°
+ },
+ [0x1D231]={
+ ["category"]="so",
+ ["description"]="GREEK INSTRUMENTAL NOTATION SYMBOL-0x0020",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D231, -- ðˆ±
+ },
+ [0x1D232]={
+ ["category"]="so",
+ ["description"]="GREEK INSTRUMENTAL NOTATION SYMBOL-0x0024",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D232, -- ðˆ²
+ },
+ [0x1D233]={
+ ["category"]="so",
+ ["description"]="GREEK INSTRUMENTAL NOTATION SYMBOL-0x0025",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D233, -- ðˆ³
+ },
+ [0x1D234]={
+ ["category"]="so",
+ ["description"]="GREEK INSTRUMENTAL NOTATION SYMBOL-0x0026",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D234, -- ðˆ´
+ },
+ [0x1D235]={
+ ["category"]="so",
+ ["description"]="GREEK INSTRUMENTAL NOTATION SYMBOL-0x0027",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D235, -- ðˆµ
+ },
+ [0x1D236]={
+ ["category"]="so",
+ ["description"]="GREEK INSTRUMENTAL NOTATION SYMBOL-0x0028",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D236, -- ðˆ¶
+ },
+ [0x1D237]={
+ ["category"]="so",
+ ["description"]="GREEK INSTRUMENTAL NOTATION SYMBOL-0x002A",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D237, -- ðˆ·
+ },
+ [0x1D238]={
+ ["category"]="so",
+ ["description"]="GREEK INSTRUMENTAL NOTATION SYMBOL-0x002B",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D238, -- ðˆ¸
+ },
+ [0x1D239]={
+ ["category"]="so",
+ ["description"]="GREEK INSTRUMENTAL NOTATION SYMBOL-0x002D",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D239, -- ðˆ¹
+ },
+ [0x1D23A]={
+ ["category"]="so",
+ ["description"]="GREEK INSTRUMENTAL NOTATION SYMBOL-0x002F",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D23A, -- ðˆº
+ },
+ [0x1D23B]={
+ ["category"]="so",
+ ["description"]="GREEK INSTRUMENTAL NOTATION SYMBOL-0x0030",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D23B, -- ðˆ»
+ },
+ [0x1D23C]={
+ ["category"]="so",
+ ["description"]="GREEK INSTRUMENTAL NOTATION SYMBOL-0x0031",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D23C, -- ðˆ¼
+ },
+ [0x1D23D]={
+ ["category"]="so",
+ ["description"]="GREEK INSTRUMENTAL NOTATION SYMBOL-0x0032",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D23D, -- ðˆ½
+ },
+ [0x1D23E]={
+ ["category"]="so",
+ ["description"]="GREEK INSTRUMENTAL NOTATION SYMBOL-0x0033",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D23E, -- ðˆ¾
+ },
+ [0x1D23F]={
+ ["category"]="so",
+ ["description"]="GREEK INSTRUMENTAL NOTATION SYMBOL-0x0034",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D23F, -- ðˆ¿
+ },
+ [0x1D240]={
+ ["category"]="so",
+ ["description"]="GREEK INSTRUMENTAL NOTATION SYMBOL-0x0035",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D240, -- ð‰€
+ },
+ [0x1D241]={
+ ["category"]="so",
+ ["description"]="GREEK INSTRUMENTAL NOTATION SYMBOL-0x0036",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D241, -- ð‰
+ },
+ [0x1D242]={
+ ["category"]="mn",
+ ["description"]="COMBINING GREEK MUSICAL TRISEME",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1D242, -- ð‰‚
+ },
+ [0x1D243]={
+ ["category"]="mn",
+ ["description"]="COMBINING GREEK MUSICAL TETRASEME",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1D243, -- ð‰ƒ
+ },
+ [0x1D244]={
+ ["category"]="mn",
+ ["description"]="COMBINING GREEK MUSICAL PENTASEME",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0x1D244, -- ð‰„
+ },
+ [0x1D245]={
+ ["category"]="so",
+ ["description"]="GREEK MUSICAL LEIMMA",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D245, -- ð‰…
+ },
+ [0x1D300]={
+ ["category"]="so",
+ ["description"]="MONOGRAM FOR EARTH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D300, -- ðŒ€
+ },
+ [0x1D301]={
+ ["category"]="so",
+ ["description"]="DIGRAM FOR HEAVENLY EARTH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D301, -- ðŒ
+ },
+ [0x1D302]={
+ ["category"]="so",
+ ["description"]="DIGRAM FOR HUMAN EARTH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D302, -- ðŒ‚
+ },
+ [0x1D303]={
+ ["category"]="so",
+ ["description"]="DIGRAM FOR EARTHLY HEAVEN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D303, -- ðŒƒ
+ },
+ [0x1D304]={
+ ["category"]="so",
+ ["description"]="DIGRAM FOR EARTHLY HUMAN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D304, -- ðŒ„
+ },
+ [0x1D305]={
+ ["category"]="so",
+ ["description"]="DIGRAM FOR EARTH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D305, -- ðŒ…
+ },
+ [0x1D306]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR CENTRE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D306, -- ðŒ†
+ },
+ [0x1D307]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR FULL CIRCLE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D307, -- ðŒ‡
+ },
+ [0x1D308]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR MIRED",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D308, -- ðŒˆ
+ },
+ [0x1D309]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR BARRIER",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D309, -- ðŒ‰
+ },
+ [0x1D30A]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR KEEPING SMALL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D30A, -- ðŒŠ
+ },
+ [0x1D30B]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR CONTRARIETY",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D30B, -- ðŒ‹
+ },
+ [0x1D30C]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR ASCENT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D30C, -- ðŒŒ
+ },
+ [0x1D30D]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR OPPOSITION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D30D, -- ðŒ
+ },
+ [0x1D30E]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR BRANCHING OUT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D30E, -- ðŒŽ
+ },
+ [0x1D30F]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR DEFECTIVENESS OR DISTORTION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D30F, -- ðŒ
+ },
+ [0x1D310]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR DIVERGENCE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D310, -- ðŒ
+ },
+ [0x1D311]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR YOUTHFULNESS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D311, -- ðŒ‘
+ },
+ [0x1D312]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR INCREASE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D312, -- ðŒ’
+ },
+ [0x1D313]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR PENETRATION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D313, -- ðŒ“
+ },
+ [0x1D314]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR REACH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D314, -- ðŒ”
+ },
+ [0x1D315]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR CONTACT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D315, -- ðŒ•
+ },
+ [0x1D316]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR HOLDING BACK",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D316, -- ðŒ–
+ },
+ [0x1D317]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR WAITING",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D317, -- ðŒ—
+ },
+ [0x1D318]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR FOLLOWING",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D318, -- ðŒ˜
+ },
+ [0x1D319]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR ADVANCE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D319, -- ðŒ™
+ },
+ [0x1D31A]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR RELEASE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D31A, -- ðŒš
+ },
+ [0x1D31B]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR RESISTANCE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D31B, -- ðŒ›
+ },
+ [0x1D31C]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR EASE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D31C, -- ðŒœ
+ },
+ [0x1D31D]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR JOY",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D31D, -- ðŒ
+ },
+ [0x1D31E]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR CONTENTION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D31E, -- ðŒž
+ },
+ [0x1D31F]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR ENDEAVOUR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D31F, -- ðŒŸ
+ },
+ [0x1D320]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR DUTIES",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D320, -- ðŒ 
+ },
+ [0x1D321]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR CHANGE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D321, -- ðŒ¡
+ },
+ [0x1D322]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR DECISIVENESS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D322, -- ðŒ¢
+ },
+ [0x1D323]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR BOLD RESOLUTION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D323, -- ðŒ£
+ },
+ [0x1D324]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR PACKING",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D324, -- ðŒ¤
+ },
+ [0x1D325]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR LEGION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D325, -- ðŒ¥
+ },
+ [0x1D326]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR CLOSENESS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D326, -- ðŒ¦
+ },
+ [0x1D327]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR KINSHIP",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D327, -- ðŒ§
+ },
+ [0x1D328]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR GATHERING",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D328, -- ðŒ¨
+ },
+ [0x1D329]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR STRENGTH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D329, -- ðŒ©
+ },
+ [0x1D32A]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR PURITY",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D32A, -- ðŒª
+ },
+ [0x1D32B]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR FULLNESS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D32B, -- ðŒ«
+ },
+ [0x1D32C]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR RESIDENCE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D32C, -- ðŒ¬
+ },
+ [0x1D32D]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR LAW OR MODEL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D32D, -- ðŒ­
+ },
+ [0x1D32E]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR RESPONSE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D32E, -- ðŒ®
+ },
+ [0x1D32F]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR GOING TO MEET",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D32F, -- ðŒ¯
+ },
+ [0x1D330]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR ENCOUNTERS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D330, -- ðŒ°
+ },
+ [0x1D331]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR STOVE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D331, -- ðŒ±
+ },
+ [0x1D332]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR GREATNESS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D332, -- ðŒ²
+ },
+ [0x1D333]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR ENLARGEMENT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D333, -- ðŒ³
+ },
+ [0x1D334]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR PATTERN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D334, -- ðŒ´
+ },
+ [0x1D335]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR RITUAL",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D335, -- ðŒµ
+ },
+ [0x1D336]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR FLIGHT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D336, -- ðŒ¶
+ },
+ [0x1D337]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR VASTNESS OR WASTING",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D337, -- ðŒ·
+ },
+ [0x1D338]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR CONSTANCY",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D338, -- ðŒ¸
+ },
+ [0x1D339]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR MEASURE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D339, -- ðŒ¹
+ },
+ [0x1D33A]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR ETERNITY",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D33A, -- ðŒº
+ },
+ [0x1D33B]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR UNITY",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D33B, -- ðŒ»
+ },
+ [0x1D33C]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR DIMINISHMENT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D33C, -- ðŒ¼
+ },
+ [0x1D33D]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR CLOSED MOUTH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D33D, -- ðŒ½
+ },
+ [0x1D33E]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR GUARDEDNESS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D33E, -- ðŒ¾
+ },
+ [0x1D33F]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR GATHERING IN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D33F, -- ðŒ¿
+ },
+ [0x1D340]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR MASSING",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D340, -- ð€
+ },
+ [0x1D341]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR ACCUMULATION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D341, -- ð
+ },
+ [0x1D342]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR EMBELLISHMENT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D342, -- ð‚
+ },
+ [0x1D343]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR DOUBT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D343, -- ðƒ
+ },
+ [0x1D344]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR WATCH",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D344, -- ð„
+ },
+ [0x1D345]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR SINKING",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D345, -- ð…
+ },
+ [0x1D346]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR INNER",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D346, -- ð†
+ },
+ [0x1D347]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR DEPARTURE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D347, -- ð‡
+ },
+ [0x1D348]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR DARKENING",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D348, -- ðˆ
+ },
+ [0x1D349]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR DIMMING",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D349, -- ð‰
+ },
+ [0x1D34A]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR EXHAUSTION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D34A, -- ðŠ
+ },
+ [0x1D34B]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR SEVERANCE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D34B, -- ð‹
+ },
+ [0x1D34C]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR STOPPAGE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D34C, -- ðŒ
+ },
+ [0x1D34D]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR HARDNESS",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D34D, -- ð
+ },
+ [0x1D34E]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR COMPLETION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D34E, -- ðŽ
+ },
+ [0x1D34F]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR CLOSURE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D34F, -- ð
+ },
+ [0x1D350]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR FAILURE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D350, -- ð
+ },
+ [0x1D351]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR AGGRAVATION",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D351, -- ð‘
+ },
+ [0x1D352]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR COMPLIANCE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D352, -- ð’
+ },
+ [0x1D353]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR ON THE VERGE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D353, -- ð“
+ },
+ [0x1D354]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR DIFFICULTIES",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D354, -- ð”
+ },
+ [0x1D355]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR LABOURING",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D355, -- ð•
+ },
+ [0x1D356]={
+ ["category"]="so",
+ ["description"]="TETRAGRAM FOR FOSTERING",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D356, -- ð–
+ },
+ [0x1D360]={
+ ["category"]="no",
+ ["description"]="COUNTING ROD UNIT DIGIT ONE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D360, -- ð 
+ },
+ [0x1D361]={
+ ["category"]="no",
+ ["description"]="COUNTING ROD UNIT DIGIT TWO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D361, -- ð¡
+ },
+ [0x1D362]={
+ ["category"]="no",
+ ["description"]="COUNTING ROD UNIT DIGIT THREE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D362, -- ð¢
+ },
+ [0x1D363]={
+ ["category"]="no",
+ ["description"]="COUNTING ROD UNIT DIGIT FOUR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D363, -- ð£
+ },
+ [0x1D364]={
+ ["category"]="no",
+ ["description"]="COUNTING ROD UNIT DIGIT FIVE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D364, -- ð¤
+ },
+ [0x1D365]={
+ ["category"]="no",
+ ["description"]="COUNTING ROD UNIT DIGIT SIX",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D365, -- ð¥
+ },
+ [0x1D366]={
+ ["category"]="no",
+ ["description"]="COUNTING ROD UNIT DIGIT SEVEN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D366, -- ð¦
+ },
+ [0x1D367]={
+ ["category"]="no",
+ ["description"]="COUNTING ROD UNIT DIGIT EIGHT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D367, -- ð§
+ },
+ [0x1D368]={
+ ["category"]="no",
+ ["description"]="COUNTING ROD UNIT DIGIT NINE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D368, -- ð¨
+ },
+ [0x1D369]={
+ ["category"]="no",
+ ["description"]="COUNTING ROD TENS DIGIT ONE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D369, -- ð©
+ },
+ [0x1D36A]={
+ ["category"]="no",
+ ["description"]="COUNTING ROD TENS DIGIT TWO",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D36A, -- ðª
+ },
+ [0x1D36B]={
+ ["category"]="no",
+ ["description"]="COUNTING ROD TENS DIGIT THREE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D36B, -- ð«
+ },
+ [0x1D36C]={
+ ["category"]="no",
+ ["description"]="COUNTING ROD TENS DIGIT FOUR",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D36C, -- ð¬
+ },
+ [0x1D36D]={
+ ["category"]="no",
+ ["description"]="COUNTING ROD TENS DIGIT FIVE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D36D, -- ð­
+ },
+ [0x1D36E]={
+ ["category"]="no",
+ ["description"]="COUNTING ROD TENS DIGIT SIX",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D36E, -- ð®
+ },
+ [0x1D36F]={
+ ["category"]="no",
+ ["description"]="COUNTING ROD TENS DIGIT SEVEN",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D36F, -- ð¯
+ },
+ [0x1D370]={
+ ["category"]="no",
+ ["description"]="COUNTING ROD TENS DIGIT EIGHT",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D370, -- ð°
+ },
+ [0x1D371]={
+ ["category"]="no",
+ ["description"]="COUNTING ROD TENS DIGIT NINE",
+ ["linebreak"]="al",
+ ["unicodeslot"]=0x1D371, -- ð±
+ },
+ [0x1D400]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD CAPITAL A",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0041 },
+ ["unicodeslot"]=0x1D400, -- ð€
+ },
+ [0x1D401]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD CAPITAL B",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0042 },
+ ["unicodeslot"]=0x1D401, -- ð
+ },
+ [0x1D402]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD CAPITAL C",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0043 },
+ ["unicodeslot"]=0x1D402, -- ð‚
+ },
+ [0x1D403]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD CAPITAL D",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0044 },
+ ["unicodeslot"]=0x1D403, -- ðƒ
+ },
+ [0x1D404]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD CAPITAL E",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0045 },
+ ["unicodeslot"]=0x1D404, -- ð„
+ },
+ [0x1D405]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD CAPITAL F",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0046 },
+ ["unicodeslot"]=0x1D405, -- ð…
+ },
+ [0x1D406]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD CAPITAL G",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0047 },
+ ["unicodeslot"]=0x1D406, -- ð†
+ },
+ [0x1D407]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD CAPITAL H",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0048 },
+ ["unicodeslot"]=0x1D407, -- ð‡
+ },
+ [0x1D408]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD CAPITAL I",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0049 },
+ ["unicodeslot"]=0x1D408, -- ðˆ
+ },
+ [0x1D409]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD CAPITAL J",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004A },
+ ["unicodeslot"]=0x1D409, -- ð‰
+ },
+ [0x1D40A]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD CAPITAL K",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004B },
+ ["unicodeslot"]=0x1D40A, -- ðŠ
+ },
+ [0x1D40B]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD CAPITAL L",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004C },
+ ["unicodeslot"]=0x1D40B, -- ð‹
+ },
+ [0x1D40C]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD CAPITAL M",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004D },
+ ["unicodeslot"]=0x1D40C, -- ðŒ
+ },
+ [0x1D40D]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD CAPITAL N",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004E },
+ ["unicodeslot"]=0x1D40D, -- ð
+ },
+ [0x1D40E]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD CAPITAL O",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004F },
+ ["unicodeslot"]=0x1D40E, -- ðŽ
+ },
+ [0x1D40F]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD CAPITAL P",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0050 },
+ ["unicodeslot"]=0x1D40F, -- ð
+ },
+ [0x1D410]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD CAPITAL Q",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0051 },
+ ["unicodeslot"]=0x1D410, -- ð
+ },
+ [0x1D411]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD CAPITAL R",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0052 },
+ ["unicodeslot"]=0x1D411, -- ð‘
+ },
+ [0x1D412]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD CAPITAL S",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0053 },
+ ["unicodeslot"]=0x1D412, -- ð’
+ },
+ [0x1D413]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD CAPITAL T",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0054 },
+ ["unicodeslot"]=0x1D413, -- ð“
+ },
+ [0x1D414]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD CAPITAL U",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0055 },
+ ["unicodeslot"]=0x1D414, -- ð”
+ },
+ [0x1D415]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD CAPITAL V",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0056 },
+ ["unicodeslot"]=0x1D415, -- ð•
+ },
+ [0x1D416]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD CAPITAL W",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0057 },
+ ["unicodeslot"]=0x1D416, -- ð–
+ },
+ [0x1D417]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD CAPITAL X",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0058 },
+ ["unicodeslot"]=0x1D417, -- ð—
+ },
+ [0x1D418]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD CAPITAL Y",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0059 },
+ ["unicodeslot"]=0x1D418, -- ð˜
+ },
+ [0x1D419]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD CAPITAL Z",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x005A },
+ ["unicodeslot"]=0x1D419, -- ð™
+ },
+ [0x1D41A]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SMALL A",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0061 },
+ ["unicodeslot"]=0x1D41A, -- ðš
+ },
+ [0x1D41B]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SMALL B",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0062 },
+ ["unicodeslot"]=0x1D41B, -- ð›
+ },
+ [0x1D41C]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SMALL C",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0063 },
+ ["unicodeslot"]=0x1D41C, -- ðœ
+ },
+ [0x1D41D]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SMALL D",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0064 },
+ ["unicodeslot"]=0x1D41D, -- ð
+ },
+ [0x1D41E]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SMALL E",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0065 },
+ ["unicodeslot"]=0x1D41E, -- ðž
+ },
+ [0x1D41F]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SMALL F",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0066 },
+ ["unicodeslot"]=0x1D41F, -- ðŸ
+ },
+ [0x1D420]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SMALL G",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0067 },
+ ["unicodeslot"]=0x1D420, -- ð 
+ },
+ [0x1D421]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SMALL H",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0068 },
+ ["unicodeslot"]=0x1D421, -- ð¡
+ },
+ [0x1D422]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SMALL I",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0069 },
+ ["unicodeslot"]=0x1D422, -- ð¢
+ },
+ [0x1D423]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SMALL J",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006A },
+ ["unicodeslot"]=0x1D423, -- ð£
+ },
+ [0x1D424]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SMALL K",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006B },
+ ["unicodeslot"]=0x1D424, -- ð¤
+ },
+ [0x1D425]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SMALL L",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006C },
+ ["unicodeslot"]=0x1D425, -- ð¥
+ },
+ [0x1D426]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SMALL M",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006D },
+ ["unicodeslot"]=0x1D426, -- ð¦
+ },
+ [0x1D427]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SMALL N",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006E },
+ ["unicodeslot"]=0x1D427, -- ð§
+ },
+ [0x1D428]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SMALL O",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006F },
+ ["unicodeslot"]=0x1D428, -- ð¨
+ },
+ [0x1D429]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SMALL P",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0070 },
+ ["unicodeslot"]=0x1D429, -- ð©
+ },
+ [0x1D42A]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SMALL Q",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0071 },
+ ["unicodeslot"]=0x1D42A, -- ðª
+ },
+ [0x1D42B]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SMALL R",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0072 },
+ ["unicodeslot"]=0x1D42B, -- ð«
+ },
+ [0x1D42C]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SMALL S",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0073 },
+ ["unicodeslot"]=0x1D42C, -- ð¬
+ },
+ [0x1D42D]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SMALL T",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0074 },
+ ["unicodeslot"]=0x1D42D, -- ð­
+ },
+ [0x1D42E]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SMALL U",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0075 },
+ ["unicodeslot"]=0x1D42E, -- ð®
+ },
+ [0x1D42F]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SMALL V",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0076 },
+ ["unicodeslot"]=0x1D42F, -- ð¯
+ },
+ [0x1D430]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SMALL W",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0077 },
+ ["unicodeslot"]=0x1D430, -- ð°
+ },
+ [0x1D431]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SMALL X",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0078 },
+ ["unicodeslot"]=0x1D431, -- ð±
+ },
+ [0x1D432]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SMALL Y",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0079 },
+ ["unicodeslot"]=0x1D432, -- ð²
+ },
+ [0x1D433]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SMALL Z",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x007A },
+ ["unicodeslot"]=0x1D433, -- ð³
+ },
+ [0x1D434]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL ITALIC CAPITAL A",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0041 },
+ ["unicodeslot"]=0x1D434, -- ð´
+ },
+ [0x1D435]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL ITALIC CAPITAL B",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0042 },
+ ["unicodeslot"]=0x1D435, -- ðµ
+ },
+ [0x1D436]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL ITALIC CAPITAL C",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0043 },
+ ["unicodeslot"]=0x1D436, -- ð¶
+ },
+ [0x1D437]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL ITALIC CAPITAL D",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0044 },
+ ["unicodeslot"]=0x1D437, -- ð·
+ },
+ [0x1D438]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL ITALIC CAPITAL E",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0045 },
+ ["unicodeslot"]=0x1D438, -- ð¸
+ },
+ [0x1D439]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL ITALIC CAPITAL F",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0046 },
+ ["unicodeslot"]=0x1D439, -- ð¹
+ },
+ [0x1D43A]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL ITALIC CAPITAL G",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0047 },
+ ["unicodeslot"]=0x1D43A, -- ðº
+ },
+ [0x1D43B]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL ITALIC CAPITAL H",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0048 },
+ ["unicodeslot"]=0x1D43B, -- ð»
+ },
+ [0x1D43C]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL ITALIC CAPITAL I",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0049 },
+ ["unicodeslot"]=0x1D43C, -- ð¼
+ },
+ [0x1D43D]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL ITALIC CAPITAL J",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004A },
+ ["unicodeslot"]=0x1D43D, -- ð½
+ },
+ [0x1D43E]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL ITALIC CAPITAL K",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004B },
+ ["unicodeslot"]=0x1D43E, -- ð¾
+ },
+ [0x1D43F]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL ITALIC CAPITAL L",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004C },
+ ["unicodeslot"]=0x1D43F, -- ð¿
+ },
+ [0x1D440]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL ITALIC CAPITAL M",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004D },
+ ["unicodeslot"]=0x1D440, -- ð‘€
+ },
+ [0x1D441]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL ITALIC CAPITAL N",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004E },
+ ["unicodeslot"]=0x1D441, -- ð‘
+ },
+ [0x1D442]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL ITALIC CAPITAL O",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004F },
+ ["unicodeslot"]=0x1D442, -- ð‘‚
+ },
+ [0x1D443]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL ITALIC CAPITAL P",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0050 },
+ ["unicodeslot"]=0x1D443, -- ð‘ƒ
+ },
+ [0x1D444]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL ITALIC CAPITAL Q",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0051 },
+ ["unicodeslot"]=0x1D444, -- ð‘„
+ },
+ [0x1D445]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL ITALIC CAPITAL R",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0052 },
+ ["unicodeslot"]=0x1D445, -- ð‘…
+ },
+ [0x1D446]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL ITALIC CAPITAL S",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0053 },
+ ["unicodeslot"]=0x1D446, -- ð‘†
+ },
+ [0x1D447]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL ITALIC CAPITAL T",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0054 },
+ ["unicodeslot"]=0x1D447, -- ð‘‡
+ },
+ [0x1D448]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL ITALIC CAPITAL U",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0055 },
+ ["unicodeslot"]=0x1D448, -- ð‘ˆ
+ },
+ [0x1D449]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL ITALIC CAPITAL V",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0056 },
+ ["unicodeslot"]=0x1D449, -- ð‘‰
+ },
+ [0x1D44A]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL ITALIC CAPITAL W",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0057 },
+ ["unicodeslot"]=0x1D44A, -- ð‘Š
+ },
+ [0x1D44B]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL ITALIC CAPITAL X",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0058 },
+ ["unicodeslot"]=0x1D44B, -- ð‘‹
+ },
+ [0x1D44C]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL ITALIC CAPITAL Y",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0059 },
+ ["unicodeslot"]=0x1D44C, -- ð‘Œ
+ },
+ [0x1D44D]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL ITALIC CAPITAL Z",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x005A },
+ ["unicodeslot"]=0x1D44D, -- ð‘
+ },
+ [0x1D44E]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL ITALIC SMALL A",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0061 },
+ ["unicodeslot"]=0x1D44E, -- ð‘Ž
+ },
+ [0x1D44F]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL ITALIC SMALL B",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0062 },
+ ["unicodeslot"]=0x1D44F, -- ð‘
+ },
+ [0x1D450]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL ITALIC SMALL C",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0063 },
+ ["unicodeslot"]=0x1D450, -- ð‘
+ },
+ [0x1D451]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL ITALIC SMALL D",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0064 },
+ ["unicodeslot"]=0x1D451, -- ð‘‘
+ },
+ [0x1D452]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL ITALIC SMALL E",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0065 },
+ ["unicodeslot"]=0x1D452, -- ð‘’
+ },
+ [0x1D453]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL ITALIC SMALL F",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0066 },
+ ["unicodeslot"]=0x1D453, -- ð‘“
+ },
+ [0x1D454]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL ITALIC SMALL G",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0067 },
+ ["unicodeslot"]=0x1D454, -- ð‘”
+ },
+ [0x1D456]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL ITALIC SMALL I",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0069 },
+ ["unicodeslot"]=0x1D456, -- ð‘–
+ },
+ [0x1D457]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL ITALIC SMALL J",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006A },
+ ["unicodeslot"]=0x1D457, -- ð‘—
+ },
+ [0x1D458]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL ITALIC SMALL K",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006B },
+ ["unicodeslot"]=0x1D458, -- ð‘˜
+ },
+ [0x1D459]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL ITALIC SMALL L",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006C },
+ ["unicodeslot"]=0x1D459, -- ð‘™
+ },
+ [0x1D45A]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL ITALIC SMALL M",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006D },
+ ["unicodeslot"]=0x1D45A, -- ð‘š
+ },
+ [0x1D45B]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL ITALIC SMALL N",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006E },
+ ["unicodeslot"]=0x1D45B, -- ð‘›
+ },
+ [0x1D45C]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL ITALIC SMALL O",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006F },
+ ["unicodeslot"]=0x1D45C, -- ð‘œ
+ },
+ [0x1D45D]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL ITALIC SMALL P",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0070 },
+ ["unicodeslot"]=0x1D45D, -- ð‘
+ },
+ [0x1D45E]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL ITALIC SMALL Q",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0071 },
+ ["unicodeslot"]=0x1D45E, -- ð‘ž
+ },
+ [0x1D45F]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL ITALIC SMALL R",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0072 },
+ ["unicodeslot"]=0x1D45F, -- ð‘Ÿ
+ },
+ [0x1D460]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL ITALIC SMALL S",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0073 },
+ ["unicodeslot"]=0x1D460, -- ð‘ 
+ },
+ [0x1D461]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL ITALIC SMALL T",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0074 },
+ ["unicodeslot"]=0x1D461, -- ð‘¡
+ },
+ [0x1D462]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL ITALIC SMALL U",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0075 },
+ ["unicodeslot"]=0x1D462, -- ð‘¢
+ },
+ [0x1D463]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL ITALIC SMALL V",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0076 },
+ ["unicodeslot"]=0x1D463, -- ð‘£
+ },
+ [0x1D464]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL ITALIC SMALL W",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0077 },
+ ["unicodeslot"]=0x1D464, -- ð‘¤
+ },
+ [0x1D465]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL ITALIC SMALL X",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0078 },
+ ["unicodeslot"]=0x1D465, -- ð‘¥
+ },
+ [0x1D466]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL ITALIC SMALL Y",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0079 },
+ ["unicodeslot"]=0x1D466, -- ð‘¦
+ },
+ [0x1D467]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL ITALIC SMALL Z",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x007A },
+ ["unicodeslot"]=0x1D467, -- ð‘§
+ },
+ [0x1D468]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD ITALIC CAPITAL A",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0041 },
+ ["unicodeslot"]=0x1D468, -- ð‘¨
+ },
+ [0x1D469]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD ITALIC CAPITAL B",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0042 },
+ ["unicodeslot"]=0x1D469, -- ð‘©
+ },
+ [0x1D46A]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD ITALIC CAPITAL C",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0043 },
+ ["unicodeslot"]=0x1D46A, -- ð‘ª
+ },
+ [0x1D46B]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD ITALIC CAPITAL D",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0044 },
+ ["unicodeslot"]=0x1D46B, -- ð‘«
+ },
+ [0x1D46C]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD ITALIC CAPITAL E",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0045 },
+ ["unicodeslot"]=0x1D46C, -- ð‘¬
+ },
+ [0x1D46D]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD ITALIC CAPITAL F",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0046 },
+ ["unicodeslot"]=0x1D46D, -- ð‘­
+ },
+ [0x1D46E]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD ITALIC CAPITAL G",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0047 },
+ ["unicodeslot"]=0x1D46E, -- ð‘®
+ },
+ [0x1D46F]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD ITALIC CAPITAL H",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0048 },
+ ["unicodeslot"]=0x1D46F, -- ð‘¯
+ },
+ [0x1D470]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD ITALIC CAPITAL I",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0049 },
+ ["unicodeslot"]=0x1D470, -- ð‘°
+ },
+ [0x1D471]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD ITALIC CAPITAL J",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004A },
+ ["unicodeslot"]=0x1D471, -- ð‘±
+ },
+ [0x1D472]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD ITALIC CAPITAL K",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004B },
+ ["unicodeslot"]=0x1D472, -- ð‘²
+ },
+ [0x1D473]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD ITALIC CAPITAL L",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004C },
+ ["unicodeslot"]=0x1D473, -- ð‘³
+ },
+ [0x1D474]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD ITALIC CAPITAL M",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004D },
+ ["unicodeslot"]=0x1D474, -- ð‘´
+ },
+ [0x1D475]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD ITALIC CAPITAL N",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004E },
+ ["unicodeslot"]=0x1D475, -- ð‘µ
+ },
+ [0x1D476]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD ITALIC CAPITAL O",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004F },
+ ["unicodeslot"]=0x1D476, -- ð‘¶
+ },
+ [0x1D477]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD ITALIC CAPITAL P",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0050 },
+ ["unicodeslot"]=0x1D477, -- ð‘·
+ },
+ [0x1D478]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD ITALIC CAPITAL Q",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0051 },
+ ["unicodeslot"]=0x1D478, -- ð‘¸
+ },
+ [0x1D479]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD ITALIC CAPITAL R",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0052 },
+ ["unicodeslot"]=0x1D479, -- ð‘¹
+ },
+ [0x1D47A]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD ITALIC CAPITAL S",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0053 },
+ ["unicodeslot"]=0x1D47A, -- ð‘º
+ },
+ [0x1D47B]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD ITALIC CAPITAL T",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0054 },
+ ["unicodeslot"]=0x1D47B, -- ð‘»
+ },
+ [0x1D47C]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD ITALIC CAPITAL U",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0055 },
+ ["unicodeslot"]=0x1D47C, -- ð‘¼
+ },
+ [0x1D47D]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD ITALIC CAPITAL V",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0056 },
+ ["unicodeslot"]=0x1D47D, -- ð‘½
+ },
+ [0x1D47E]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD ITALIC CAPITAL W",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0057 },
+ ["unicodeslot"]=0x1D47E, -- ð‘¾
+ },
+ [0x1D47F]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD ITALIC CAPITAL X",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0058 },
+ ["unicodeslot"]=0x1D47F, -- ð‘¿
+ },
+ [0x1D480]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD ITALIC CAPITAL Y",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0059 },
+ ["unicodeslot"]=0x1D480, -- ð’€
+ },
+ [0x1D481]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD ITALIC CAPITAL Z",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x005A },
+ ["unicodeslot"]=0x1D481, -- ð’
+ },
+ [0x1D482]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD ITALIC SMALL A",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0061 },
+ ["unicodeslot"]=0x1D482, -- ð’‚
+ },
+ [0x1D483]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD ITALIC SMALL B",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0062 },
+ ["unicodeslot"]=0x1D483, -- ð’ƒ
+ },
+ [0x1D484]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD ITALIC SMALL C",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0063 },
+ ["unicodeslot"]=0x1D484, -- ð’„
+ },
+ [0x1D485]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD ITALIC SMALL D",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0064 },
+ ["unicodeslot"]=0x1D485, -- ð’…
+ },
+ [0x1D486]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD ITALIC SMALL E",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0065 },
+ ["unicodeslot"]=0x1D486, -- ð’†
+ },
+ [0x1D487]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD ITALIC SMALL F",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0066 },
+ ["unicodeslot"]=0x1D487, -- ð’‡
+ },
+ [0x1D488]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD ITALIC SMALL G",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0067 },
+ ["unicodeslot"]=0x1D488, -- ð’ˆ
+ },
+ [0x1D489]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD ITALIC SMALL H",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0068 },
+ ["unicodeslot"]=0x1D489, -- ð’‰
+ },
+ [0x1D48A]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD ITALIC SMALL I",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0069 },
+ ["unicodeslot"]=0x1D48A, -- ð’Š
+ },
+ [0x1D48B]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD ITALIC SMALL J",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006A },
+ ["unicodeslot"]=0x1D48B, -- ð’‹
+ },
+ [0x1D48C]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD ITALIC SMALL K",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006B },
+ ["unicodeslot"]=0x1D48C, -- ð’Œ
+ },
+ [0x1D48D]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD ITALIC SMALL L",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006C },
+ ["unicodeslot"]=0x1D48D, -- ð’
+ },
+ [0x1D48E]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD ITALIC SMALL M",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006D },
+ ["unicodeslot"]=0x1D48E, -- ð’Ž
+ },
+ [0x1D48F]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD ITALIC SMALL N",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006E },
+ ["unicodeslot"]=0x1D48F, -- ð’
+ },
+ [0x1D490]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD ITALIC SMALL O",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006F },
+ ["unicodeslot"]=0x1D490, -- ð’
+ },
+ [0x1D491]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD ITALIC SMALL P",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0070 },
+ ["unicodeslot"]=0x1D491, -- ð’‘
+ },
+ [0x1D492]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD ITALIC SMALL Q",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0071 },
+ ["unicodeslot"]=0x1D492, -- ð’’
+ },
+ [0x1D493]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD ITALIC SMALL R",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0072 },
+ ["unicodeslot"]=0x1D493, -- ð’“
+ },
+ [0x1D494]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD ITALIC SMALL S",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0073 },
+ ["unicodeslot"]=0x1D494, -- ð’”
+ },
+ [0x1D495]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD ITALIC SMALL T",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0074 },
+ ["unicodeslot"]=0x1D495, -- ð’•
+ },
+ [0x1D496]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD ITALIC SMALL U",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0075 },
+ ["unicodeslot"]=0x1D496, -- ð’–
+ },
+ [0x1D497]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD ITALIC SMALL V",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0076 },
+ ["unicodeslot"]=0x1D497, -- ð’—
+ },
+ [0x1D498]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD ITALIC SMALL W",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0077 },
+ ["unicodeslot"]=0x1D498, -- ð’˜
+ },
+ [0x1D499]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD ITALIC SMALL X",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0078 },
+ ["unicodeslot"]=0x1D499, -- ð’™
+ },
+ [0x1D49A]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD ITALIC SMALL Y",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0079 },
+ ["unicodeslot"]=0x1D49A, -- ð’š
+ },
+ [0x1D49B]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD ITALIC SMALL Z",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x007A },
+ ["unicodeslot"]=0x1D49B, -- ð’›
+ },
+ [0x1D49C]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SCRIPT CAPITAL A",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0041 },
+ ["unicodeslot"]=0x1D49C, -- ð’œ
+ },
+ [0x1D49E]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SCRIPT CAPITAL C",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0043 },
+ ["unicodeslot"]=0x1D49E, -- ð’ž
+ },
+ [0x1D49F]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SCRIPT CAPITAL D",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0044 },
+ ["unicodeslot"]=0x1D49F, -- ð’Ÿ
+ },
+ [0x1D4A2]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SCRIPT CAPITAL G",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0047 },
+ ["unicodeslot"]=0x1D4A2, -- ð’¢
+ },
+ [0x1D4A5]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SCRIPT CAPITAL J",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004A },
+ ["unicodeslot"]=0x1D4A5, -- ð’¥
+ },
+ [0x1D4A6]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SCRIPT CAPITAL K",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004B },
+ ["unicodeslot"]=0x1D4A6, -- ð’¦
+ },
+ [0x1D4A9]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SCRIPT CAPITAL N",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004E },
+ ["unicodeslot"]=0x1D4A9, -- ð’©
+ },
+ [0x1D4AA]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SCRIPT CAPITAL O",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004F },
+ ["unicodeslot"]=0x1D4AA, -- ð’ª
+ },
+ [0x1D4AB]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SCRIPT CAPITAL P",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0050 },
+ ["unicodeslot"]=0x1D4AB, -- ð’«
+ },
+ [0x1D4AC]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SCRIPT CAPITAL Q",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0051 },
+ ["unicodeslot"]=0x1D4AC, -- ð’¬
+ },
+ [0x1D4AE]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SCRIPT CAPITAL S",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0053 },
+ ["unicodeslot"]=0x1D4AE, -- ð’®
+ },
+ [0x1D4AF]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SCRIPT CAPITAL T",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0054 },
+ ["unicodeslot"]=0x1D4AF, -- ð’¯
+ },
+ [0x1D4B0]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SCRIPT CAPITAL U",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0055 },
+ ["unicodeslot"]=0x1D4B0, -- ð’°
+ },
+ [0x1D4B1]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SCRIPT CAPITAL V",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0056 },
+ ["unicodeslot"]=0x1D4B1, -- ð’±
+ },
+ [0x1D4B2]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SCRIPT CAPITAL W",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0057 },
+ ["unicodeslot"]=0x1D4B2, -- ð’²
+ },
+ [0x1D4B3]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SCRIPT CAPITAL X",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0058 },
+ ["unicodeslot"]=0x1D4B3, -- ð’³
+ },
+ [0x1D4B4]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SCRIPT CAPITAL Y",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0059 },
+ ["unicodeslot"]=0x1D4B4, -- ð’´
+ },
+ [0x1D4B5]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SCRIPT CAPITAL Z",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x005A },
+ ["unicodeslot"]=0x1D4B5, -- ð’µ
+ },
+ [0x1D4B6]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SCRIPT SMALL A",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0061 },
+ ["unicodeslot"]=0x1D4B6, -- ð’¶
+ },
+ [0x1D4B7]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SCRIPT SMALL B",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0062 },
+ ["unicodeslot"]=0x1D4B7, -- ð’·
+ },
+ [0x1D4B8]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SCRIPT SMALL C",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0063 },
+ ["unicodeslot"]=0x1D4B8, -- ð’¸
+ },
+ [0x1D4B9]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SCRIPT SMALL D",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0064 },
+ ["unicodeslot"]=0x1D4B9, -- ð’¹
+ },
+ [0x1D4BB]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SCRIPT SMALL F",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0066 },
+ ["unicodeslot"]=0x1D4BB, -- ð’»
+ },
+ [0x1D4BD]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SCRIPT SMALL H",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0068 },
+ ["unicodeslot"]=0x1D4BD, -- ð’½
+ },
+ [0x1D4BE]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SCRIPT SMALL I",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0069 },
+ ["unicodeslot"]=0x1D4BE, -- ð’¾
+ },
+ [0x1D4BF]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SCRIPT SMALL J",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006A },
+ ["unicodeslot"]=0x1D4BF, -- ð’¿
+ },
+ [0x1D4C0]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SCRIPT SMALL K",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006B },
+ ["unicodeslot"]=0x1D4C0, -- ð“€
+ },
+ [0x1D4C1]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SCRIPT SMALL L",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006C },
+ ["unicodeslot"]=0x1D4C1, -- ð“
+ },
+ [0x1D4C2]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SCRIPT SMALL M",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006D },
+ ["unicodeslot"]=0x1D4C2, -- ð“‚
+ },
+ [0x1D4C3]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SCRIPT SMALL N",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006E },
+ ["unicodeslot"]=0x1D4C3, -- ð“ƒ
+ },
+ [0x1D4C5]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SCRIPT SMALL P",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0070 },
+ ["unicodeslot"]=0x1D4C5, -- ð“…
+ },
+ [0x1D4C6]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SCRIPT SMALL Q",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0071 },
+ ["unicodeslot"]=0x1D4C6, -- ð“†
+ },
+ [0x1D4C7]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SCRIPT SMALL R",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0072 },
+ ["unicodeslot"]=0x1D4C7, -- ð“‡
+ },
+ [0x1D4C8]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SCRIPT SMALL S",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0073 },
+ ["unicodeslot"]=0x1D4C8, -- ð“ˆ
+ },
+ [0x1D4C9]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SCRIPT SMALL T",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0074 },
+ ["unicodeslot"]=0x1D4C9, -- ð“‰
+ },
+ [0x1D4CA]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SCRIPT SMALL U",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0075 },
+ ["unicodeslot"]=0x1D4CA, -- ð“Š
+ },
+ [0x1D4CB]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SCRIPT SMALL V",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0076 },
+ ["unicodeslot"]=0x1D4CB, -- ð“‹
+ },
+ [0x1D4CC]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SCRIPT SMALL W",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0077 },
+ ["unicodeslot"]=0x1D4CC, -- ð“Œ
+ },
+ [0x1D4CD]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SCRIPT SMALL X",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0078 },
+ ["unicodeslot"]=0x1D4CD, -- ð“
+ },
+ [0x1D4CE]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SCRIPT SMALL Y",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0079 },
+ ["unicodeslot"]=0x1D4CE, -- ð“Ž
+ },
+ [0x1D4CF]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SCRIPT SMALL Z",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x007A },
+ ["unicodeslot"]=0x1D4CF, -- ð“
+ },
+ [0x1D4D0]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD SCRIPT CAPITAL A",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0041 },
+ ["unicodeslot"]=0x1D4D0, -- ð“
+ },
+ [0x1D4D1]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD SCRIPT CAPITAL B",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0042 },
+ ["unicodeslot"]=0x1D4D1, -- ð“‘
+ },
+ [0x1D4D2]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD SCRIPT CAPITAL C",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0043 },
+ ["unicodeslot"]=0x1D4D2, -- ð“’
+ },
+ [0x1D4D3]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD SCRIPT CAPITAL D",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0044 },
+ ["unicodeslot"]=0x1D4D3, -- ð““
+ },
+ [0x1D4D4]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD SCRIPT CAPITAL E",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0045 },
+ ["unicodeslot"]=0x1D4D4, -- ð“”
+ },
+ [0x1D4D5]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD SCRIPT CAPITAL F",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0046 },
+ ["unicodeslot"]=0x1D4D5, -- ð“•
+ },
+ [0x1D4D6]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD SCRIPT CAPITAL G",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0047 },
+ ["unicodeslot"]=0x1D4D6, -- ð“–
+ },
+ [0x1D4D7]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD SCRIPT CAPITAL H",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0048 },
+ ["unicodeslot"]=0x1D4D7, -- ð“—
+ },
+ [0x1D4D8]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD SCRIPT CAPITAL I",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0049 },
+ ["unicodeslot"]=0x1D4D8, -- ð“˜
+ },
+ [0x1D4D9]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD SCRIPT CAPITAL J",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004A },
+ ["unicodeslot"]=0x1D4D9, -- ð“™
+ },
+ [0x1D4DA]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD SCRIPT CAPITAL K",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004B },
+ ["unicodeslot"]=0x1D4DA, -- ð“š
+ },
+ [0x1D4DB]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD SCRIPT CAPITAL L",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004C },
+ ["unicodeslot"]=0x1D4DB, -- ð“›
+ },
+ [0x1D4DC]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD SCRIPT CAPITAL M",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004D },
+ ["unicodeslot"]=0x1D4DC, -- ð“œ
+ },
+ [0x1D4DD]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD SCRIPT CAPITAL N",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004E },
+ ["unicodeslot"]=0x1D4DD, -- ð“
+ },
+ [0x1D4DE]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD SCRIPT CAPITAL O",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004F },
+ ["unicodeslot"]=0x1D4DE, -- ð“ž
+ },
+ [0x1D4DF]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD SCRIPT CAPITAL P",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0050 },
+ ["unicodeslot"]=0x1D4DF, -- ð“Ÿ
+ },
+ [0x1D4E0]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD SCRIPT CAPITAL Q",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0051 },
+ ["unicodeslot"]=0x1D4E0, -- ð“ 
+ },
+ [0x1D4E1]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD SCRIPT CAPITAL R",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0052 },
+ ["unicodeslot"]=0x1D4E1, -- ð“¡
+ },
+ [0x1D4E2]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD SCRIPT CAPITAL S",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0053 },
+ ["unicodeslot"]=0x1D4E2, -- ð“¢
+ },
+ [0x1D4E3]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD SCRIPT CAPITAL T",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0054 },
+ ["unicodeslot"]=0x1D4E3, -- ð“£
+ },
+ [0x1D4E4]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD SCRIPT CAPITAL U",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0055 },
+ ["unicodeslot"]=0x1D4E4, -- ð“¤
+ },
+ [0x1D4E5]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD SCRIPT CAPITAL V",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0056 },
+ ["unicodeslot"]=0x1D4E5, -- ð“¥
+ },
+ [0x1D4E6]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD SCRIPT CAPITAL W",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0057 },
+ ["unicodeslot"]=0x1D4E6, -- ð“¦
+ },
+ [0x1D4E7]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD SCRIPT CAPITAL X",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0058 },
+ ["unicodeslot"]=0x1D4E7, -- ð“§
+ },
+ [0x1D4E8]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD SCRIPT CAPITAL Y",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0059 },
+ ["unicodeslot"]=0x1D4E8, -- ð“¨
+ },
+ [0x1D4E9]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD SCRIPT CAPITAL Z",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x005A },
+ ["unicodeslot"]=0x1D4E9, -- ð“©
+ },
+ [0x1D4EA]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SCRIPT SMALL A",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0061 },
+ ["unicodeslot"]=0x1D4EA, -- ð“ª
+ },
+ [0x1D4EB]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SCRIPT SMALL B",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0062 },
+ ["unicodeslot"]=0x1D4EB, -- ð“«
+ },
+ [0x1D4EC]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SCRIPT SMALL C",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0063 },
+ ["unicodeslot"]=0x1D4EC, -- ð“¬
+ },
+ [0x1D4ED]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SCRIPT SMALL D",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0064 },
+ ["unicodeslot"]=0x1D4ED, -- ð“­
+ },
+ [0x1D4EE]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SCRIPT SMALL E",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0065 },
+ ["unicodeslot"]=0x1D4EE, -- ð“®
+ },
+ [0x1D4EF]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SCRIPT SMALL F",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0066 },
+ ["unicodeslot"]=0x1D4EF, -- ð“¯
+ },
+ [0x1D4F0]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SCRIPT SMALL G",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0067 },
+ ["unicodeslot"]=0x1D4F0, -- ð“°
+ },
+ [0x1D4F1]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SCRIPT SMALL H",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0068 },
+ ["unicodeslot"]=0x1D4F1, -- ð“±
+ },
+ [0x1D4F2]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SCRIPT SMALL I",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0069 },
+ ["unicodeslot"]=0x1D4F2, -- ð“²
+ },
+ [0x1D4F3]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SCRIPT SMALL J",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006A },
+ ["unicodeslot"]=0x1D4F3, -- ð“³
+ },
+ [0x1D4F4]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SCRIPT SMALL K",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006B },
+ ["unicodeslot"]=0x1D4F4, -- ð“´
+ },
+ [0x1D4F5]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SCRIPT SMALL L",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006C },
+ ["unicodeslot"]=0x1D4F5, -- ð“µ
+ },
+ [0x1D4F6]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SCRIPT SMALL M",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006D },
+ ["unicodeslot"]=0x1D4F6, -- ð“¶
+ },
+ [0x1D4F7]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SCRIPT SMALL N",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006E },
+ ["unicodeslot"]=0x1D4F7, -- ð“·
+ },
+ [0x1D4F8]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SCRIPT SMALL O",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006F },
+ ["unicodeslot"]=0x1D4F8, -- ð“¸
+ },
+ [0x1D4F9]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SCRIPT SMALL P",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0070 },
+ ["unicodeslot"]=0x1D4F9, -- ð“¹
+ },
+ [0x1D4FA]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SCRIPT SMALL Q",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0071 },
+ ["unicodeslot"]=0x1D4FA, -- ð“º
+ },
+ [0x1D4FB]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SCRIPT SMALL R",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0072 },
+ ["unicodeslot"]=0x1D4FB, -- ð“»
+ },
+ [0x1D4FC]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SCRIPT SMALL S",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0073 },
+ ["unicodeslot"]=0x1D4FC, -- ð“¼
+ },
+ [0x1D4FD]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SCRIPT SMALL T",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0074 },
+ ["unicodeslot"]=0x1D4FD, -- ð“½
+ },
+ [0x1D4FE]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SCRIPT SMALL U",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0075 },
+ ["unicodeslot"]=0x1D4FE, -- ð“¾
+ },
+ [0x1D4FF]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SCRIPT SMALL V",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0076 },
+ ["unicodeslot"]=0x1D4FF, -- ð“¿
+ },
+ [0x1D500]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SCRIPT SMALL W",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0077 },
+ ["unicodeslot"]=0x1D500, -- ð”€
+ },
+ [0x1D501]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SCRIPT SMALL X",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0078 },
+ ["unicodeslot"]=0x1D501, -- ð”
+ },
+ [0x1D502]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SCRIPT SMALL Y",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0079 },
+ ["unicodeslot"]=0x1D502, -- ð”‚
+ },
+ [0x1D503]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SCRIPT SMALL Z",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x007A },
+ ["unicodeslot"]=0x1D503, -- ð”ƒ
+ },
+ [0x1D504]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL FRAKTUR CAPITAL A",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0041 },
+ ["unicodeslot"]=0x1D504, -- ð”„
+ },
+ [0x1D505]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL FRAKTUR CAPITAL B",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0042 },
+ ["unicodeslot"]=0x1D505, -- ð”…
+ },
+ [0x1D507]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL FRAKTUR CAPITAL D",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0044 },
+ ["unicodeslot"]=0x1D507, -- ð”‡
+ },
+ [0x1D508]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL FRAKTUR CAPITAL E",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0045 },
+ ["unicodeslot"]=0x1D508, -- ð”ˆ
+ },
+ [0x1D509]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL FRAKTUR CAPITAL F",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0046 },
+ ["unicodeslot"]=0x1D509, -- ð”‰
+ },
+ [0x1D50A]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL FRAKTUR CAPITAL G",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0047 },
+ ["unicodeslot"]=0x1D50A, -- ð”Š
+ },
+ [0x1D50D]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL FRAKTUR CAPITAL J",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004A },
+ ["unicodeslot"]=0x1D50D, -- ð”
+ },
+ [0x1D50E]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL FRAKTUR CAPITAL K",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004B },
+ ["unicodeslot"]=0x1D50E, -- ð”Ž
+ },
+ [0x1D50F]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL FRAKTUR CAPITAL L",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004C },
+ ["unicodeslot"]=0x1D50F, -- ð”
+ },
+ [0x1D510]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL FRAKTUR CAPITAL M",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004D },
+ ["unicodeslot"]=0x1D510, -- ð”
+ },
+ [0x1D511]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL FRAKTUR CAPITAL N",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004E },
+ ["unicodeslot"]=0x1D511, -- ð”‘
+ },
+ [0x1D512]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL FRAKTUR CAPITAL O",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004F },
+ ["unicodeslot"]=0x1D512, -- ð”’
+ },
+ [0x1D513]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL FRAKTUR CAPITAL P",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0050 },
+ ["unicodeslot"]=0x1D513, -- ð”“
+ },
+ [0x1D514]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL FRAKTUR CAPITAL Q",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0051 },
+ ["unicodeslot"]=0x1D514, -- ð””
+ },
+ [0x1D516]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL FRAKTUR CAPITAL S",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0053 },
+ ["unicodeslot"]=0x1D516, -- ð”–
+ },
+ [0x1D517]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL FRAKTUR CAPITAL T",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0054 },
+ ["unicodeslot"]=0x1D517, -- ð”—
+ },
+ [0x1D518]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL FRAKTUR CAPITAL U",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0055 },
+ ["unicodeslot"]=0x1D518, -- ð”˜
+ },
+ [0x1D519]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL FRAKTUR CAPITAL V",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0056 },
+ ["unicodeslot"]=0x1D519, -- ð”™
+ },
+ [0x1D51A]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL FRAKTUR CAPITAL W",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0057 },
+ ["unicodeslot"]=0x1D51A, -- ð”š
+ },
+ [0x1D51B]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL FRAKTUR CAPITAL X",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0058 },
+ ["unicodeslot"]=0x1D51B, -- ð”›
+ },
+ [0x1D51C]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL FRAKTUR CAPITAL Y",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0059 },
+ ["unicodeslot"]=0x1D51C, -- ð”œ
+ },
+ [0x1D51E]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL FRAKTUR SMALL A",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0061 },
+ ["unicodeslot"]=0x1D51E, -- ð”ž
+ },
+ [0x1D51F]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL FRAKTUR SMALL B",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0062 },
+ ["unicodeslot"]=0x1D51F, -- ð”Ÿ
+ },
+ [0x1D520]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL FRAKTUR SMALL C",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0063 },
+ ["unicodeslot"]=0x1D520, -- ð” 
+ },
+ [0x1D521]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL FRAKTUR SMALL D",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0064 },
+ ["unicodeslot"]=0x1D521, -- ð”¡
+ },
+ [0x1D522]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL FRAKTUR SMALL E",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0065 },
+ ["unicodeslot"]=0x1D522, -- ð”¢
+ },
+ [0x1D523]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL FRAKTUR SMALL F",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0066 },
+ ["unicodeslot"]=0x1D523, -- ð”£
+ },
+ [0x1D524]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL FRAKTUR SMALL G",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0067 },
+ ["unicodeslot"]=0x1D524, -- ð”¤
+ },
+ [0x1D525]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL FRAKTUR SMALL H",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0068 },
+ ["unicodeslot"]=0x1D525, -- ð”¥
+ },
+ [0x1D526]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL FRAKTUR SMALL I",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0069 },
+ ["unicodeslot"]=0x1D526, -- ð”¦
+ },
+ [0x1D527]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL FRAKTUR SMALL J",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006A },
+ ["unicodeslot"]=0x1D527, -- ð”§
+ },
+ [0x1D528]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL FRAKTUR SMALL K",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006B },
+ ["unicodeslot"]=0x1D528, -- ð”¨
+ },
+ [0x1D529]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL FRAKTUR SMALL L",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006C },
+ ["unicodeslot"]=0x1D529, -- ð”©
+ },
+ [0x1D52A]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL FRAKTUR SMALL M",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006D },
+ ["unicodeslot"]=0x1D52A, -- ð”ª
+ },
+ [0x1D52B]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL FRAKTUR SMALL N",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006E },
+ ["unicodeslot"]=0x1D52B, -- ð”«
+ },
+ [0x1D52C]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL FRAKTUR SMALL O",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006F },
+ ["unicodeslot"]=0x1D52C, -- ð”¬
+ },
+ [0x1D52D]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL FRAKTUR SMALL P",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0070 },
+ ["unicodeslot"]=0x1D52D, -- ð”­
+ },
+ [0x1D52E]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL FRAKTUR SMALL Q",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0071 },
+ ["unicodeslot"]=0x1D52E, -- ð”®
+ },
+ [0x1D52F]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL FRAKTUR SMALL R",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0072 },
+ ["unicodeslot"]=0x1D52F, -- ð”¯
+ },
+ [0x1D530]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL FRAKTUR SMALL S",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0073 },
+ ["unicodeslot"]=0x1D530, -- ð”°
+ },
+ [0x1D531]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL FRAKTUR SMALL T",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0074 },
+ ["unicodeslot"]=0x1D531, -- ð”±
+ },
+ [0x1D532]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL FRAKTUR SMALL U",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0075 },
+ ["unicodeslot"]=0x1D532, -- ð”²
+ },
+ [0x1D533]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL FRAKTUR SMALL V",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0076 },
+ ["unicodeslot"]=0x1D533, -- ð”³
+ },
+ [0x1D534]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL FRAKTUR SMALL W",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0077 },
+ ["unicodeslot"]=0x1D534, -- ð”´
+ },
+ [0x1D535]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL FRAKTUR SMALL X",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0078 },
+ ["unicodeslot"]=0x1D535, -- ð”µ
+ },
+ [0x1D536]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL FRAKTUR SMALL Y",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0079 },
+ ["unicodeslot"]=0x1D536, -- ð”¶
+ },
+ [0x1D537]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL FRAKTUR SMALL Z",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x007A },
+ ["unicodeslot"]=0x1D537, -- ð”·
+ },
+ [0x1D538]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL DOUBLE-STRUCK CAPITAL A",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0041 },
+ ["unicodeslot"]=0x1D538, -- ð”¸
+ },
+ [0x1D539]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL DOUBLE-STRUCK CAPITAL B",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0042 },
+ ["unicodeslot"]=0x1D539, -- ð”¹
+ },
+ [0x1D53B]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL DOUBLE-STRUCK CAPITAL D",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0044 },
+ ["unicodeslot"]=0x1D53B, -- ð”»
+ },
+ [0x1D53C]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL DOUBLE-STRUCK CAPITAL E",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0045 },
+ ["unicodeslot"]=0x1D53C, -- ð”¼
+ },
+ [0x1D53D]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL DOUBLE-STRUCK CAPITAL F",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0046 },
+ ["unicodeslot"]=0x1D53D, -- ð”½
+ },
+ [0x1D53E]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL DOUBLE-STRUCK CAPITAL G",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0047 },
+ ["unicodeslot"]=0x1D53E, -- ð”¾
+ },
+ [0x1D540]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL DOUBLE-STRUCK CAPITAL I",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0049 },
+ ["unicodeslot"]=0x1D540, -- ð•€
+ },
+ [0x1D541]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL DOUBLE-STRUCK CAPITAL J",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004A },
+ ["unicodeslot"]=0x1D541, -- ð•
+ },
+ [0x1D542]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL DOUBLE-STRUCK CAPITAL K",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004B },
+ ["unicodeslot"]=0x1D542, -- ð•‚
+ },
+ [0x1D543]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL DOUBLE-STRUCK CAPITAL L",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004C },
+ ["unicodeslot"]=0x1D543, -- ð•ƒ
+ },
+ [0x1D544]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL DOUBLE-STRUCK CAPITAL M",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004D },
+ ["unicodeslot"]=0x1D544, -- ð•„
+ },
+ [0x1D546]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL DOUBLE-STRUCK CAPITAL O",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004F },
+ ["unicodeslot"]=0x1D546, -- ð•†
+ },
+ [0x1D54A]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL DOUBLE-STRUCK CAPITAL S",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0053 },
+ ["unicodeslot"]=0x1D54A, -- ð•Š
+ },
+ [0x1D54B]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL DOUBLE-STRUCK CAPITAL T",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0054 },
+ ["unicodeslot"]=0x1D54B, -- ð•‹
+ },
+ [0x1D54C]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL DOUBLE-STRUCK CAPITAL U",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0055 },
+ ["unicodeslot"]=0x1D54C, -- ð•Œ
+ },
+ [0x1D54D]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL DOUBLE-STRUCK CAPITAL V",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0056 },
+ ["unicodeslot"]=0x1D54D, -- ð•
+ },
+ [0x1D54E]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL DOUBLE-STRUCK CAPITAL W",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0057 },
+ ["unicodeslot"]=0x1D54E, -- ð•Ž
+ },
+ [0x1D54F]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL DOUBLE-STRUCK CAPITAL X",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0058 },
+ ["unicodeslot"]=0x1D54F, -- ð•
+ },
+ [0x1D550]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL DOUBLE-STRUCK CAPITAL Y",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0059 },
+ ["unicodeslot"]=0x1D550, -- ð•
+ },
+ [0x1D552]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL DOUBLE-STRUCK SMALL A",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0061 },
+ ["unicodeslot"]=0x1D552, -- ð•’
+ },
+ [0x1D553]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL DOUBLE-STRUCK SMALL B",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0062 },
+ ["unicodeslot"]=0x1D553, -- ð•“
+ },
+ [0x1D554]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL DOUBLE-STRUCK SMALL C",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0063 },
+ ["unicodeslot"]=0x1D554, -- ð•”
+ },
+ [0x1D555]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL DOUBLE-STRUCK SMALL D",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0064 },
+ ["unicodeslot"]=0x1D555, -- ð••
+ },
+ [0x1D556]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL DOUBLE-STRUCK SMALL E",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0065 },
+ ["unicodeslot"]=0x1D556, -- ð•–
+ },
+ [0x1D557]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL DOUBLE-STRUCK SMALL F",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0066 },
+ ["unicodeslot"]=0x1D557, -- ð•—
+ },
+ [0x1D558]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL DOUBLE-STRUCK SMALL G",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0067 },
+ ["unicodeslot"]=0x1D558, -- ð•˜
+ },
+ [0x1D559]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL DOUBLE-STRUCK SMALL H",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0068 },
+ ["unicodeslot"]=0x1D559, -- ð•™
+ },
+ [0x1D55A]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL DOUBLE-STRUCK SMALL I",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0069 },
+ ["unicodeslot"]=0x1D55A, -- ð•š
+ },
+ [0x1D55B]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL DOUBLE-STRUCK SMALL J",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006A },
+ ["unicodeslot"]=0x1D55B, -- ð•›
+ },
+ [0x1D55C]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL DOUBLE-STRUCK SMALL K",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006B },
+ ["unicodeslot"]=0x1D55C, -- ð•œ
+ },
+ [0x1D55D]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL DOUBLE-STRUCK SMALL L",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006C },
+ ["unicodeslot"]=0x1D55D, -- ð•
+ },
+ [0x1D55E]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL DOUBLE-STRUCK SMALL M",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006D },
+ ["unicodeslot"]=0x1D55E, -- ð•ž
+ },
+ [0x1D55F]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL DOUBLE-STRUCK SMALL N",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006E },
+ ["unicodeslot"]=0x1D55F, -- ð•Ÿ
+ },
+ [0x1D560]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL DOUBLE-STRUCK SMALL O",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006F },
+ ["unicodeslot"]=0x1D560, -- ð• 
+ },
+ [0x1D561]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL DOUBLE-STRUCK SMALL P",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0070 },
+ ["unicodeslot"]=0x1D561, -- ð•¡
+ },
+ [0x1D562]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL DOUBLE-STRUCK SMALL Q",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0071 },
+ ["unicodeslot"]=0x1D562, -- ð•¢
+ },
+ [0x1D563]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL DOUBLE-STRUCK SMALL R",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0072 },
+ ["unicodeslot"]=0x1D563, -- ð•£
+ },
+ [0x1D564]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL DOUBLE-STRUCK SMALL S",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0073 },
+ ["unicodeslot"]=0x1D564, -- ð•¤
+ },
+ [0x1D565]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL DOUBLE-STRUCK SMALL T",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0074 },
+ ["unicodeslot"]=0x1D565, -- ð•¥
+ },
+ [0x1D566]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL DOUBLE-STRUCK SMALL U",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0075 },
+ ["unicodeslot"]=0x1D566, -- ð•¦
+ },
+ [0x1D567]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL DOUBLE-STRUCK SMALL V",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0076 },
+ ["unicodeslot"]=0x1D567, -- ð•§
+ },
+ [0x1D568]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL DOUBLE-STRUCK SMALL W",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0077 },
+ ["unicodeslot"]=0x1D568, -- ð•¨
+ },
+ [0x1D569]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL DOUBLE-STRUCK SMALL X",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0078 },
+ ["unicodeslot"]=0x1D569, -- ð•©
+ },
+ [0x1D56A]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL DOUBLE-STRUCK SMALL Y",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0079 },
+ ["unicodeslot"]=0x1D56A, -- ð•ª
+ },
+ [0x1D56B]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL DOUBLE-STRUCK SMALL Z",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x007A },
+ ["unicodeslot"]=0x1D56B, -- ð•«
+ },
+ [0x1D56C]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD FRAKTUR CAPITAL A",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0041 },
+ ["unicodeslot"]=0x1D56C, -- ð•¬
+ },
+ [0x1D56D]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD FRAKTUR CAPITAL B",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0042 },
+ ["unicodeslot"]=0x1D56D, -- ð•­
+ },
+ [0x1D56E]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD FRAKTUR CAPITAL C",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0043 },
+ ["unicodeslot"]=0x1D56E, -- ð•®
+ },
+ [0x1D56F]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD FRAKTUR CAPITAL D",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0044 },
+ ["unicodeslot"]=0x1D56F, -- ð•¯
+ },
+ [0x1D570]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD FRAKTUR CAPITAL E",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0045 },
+ ["unicodeslot"]=0x1D570, -- ð•°
+ },
+ [0x1D571]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD FRAKTUR CAPITAL F",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0046 },
+ ["unicodeslot"]=0x1D571, -- ð•±
+ },
+ [0x1D572]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD FRAKTUR CAPITAL G",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0047 },
+ ["unicodeslot"]=0x1D572, -- ð•²
+ },
+ [0x1D573]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD FRAKTUR CAPITAL H",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0048 },
+ ["unicodeslot"]=0x1D573, -- ð•³
+ },
+ [0x1D574]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD FRAKTUR CAPITAL I",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0049 },
+ ["unicodeslot"]=0x1D574, -- ð•´
+ },
+ [0x1D575]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD FRAKTUR CAPITAL J",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004A },
+ ["unicodeslot"]=0x1D575, -- ð•µ
+ },
+ [0x1D576]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD FRAKTUR CAPITAL K",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004B },
+ ["unicodeslot"]=0x1D576, -- ð•¶
+ },
+ [0x1D577]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD FRAKTUR CAPITAL L",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004C },
+ ["unicodeslot"]=0x1D577, -- ð•·
+ },
+ [0x1D578]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD FRAKTUR CAPITAL M",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004D },
+ ["unicodeslot"]=0x1D578, -- ð•¸
+ },
+ [0x1D579]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD FRAKTUR CAPITAL N",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004E },
+ ["unicodeslot"]=0x1D579, -- ð•¹
+ },
+ [0x1D57A]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD FRAKTUR CAPITAL O",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004F },
+ ["unicodeslot"]=0x1D57A, -- ð•º
+ },
+ [0x1D57B]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD FRAKTUR CAPITAL P",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0050 },
+ ["unicodeslot"]=0x1D57B, -- ð•»
+ },
+ [0x1D57C]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD FRAKTUR CAPITAL Q",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0051 },
+ ["unicodeslot"]=0x1D57C, -- ð•¼
+ },
+ [0x1D57D]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD FRAKTUR CAPITAL R",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0052 },
+ ["unicodeslot"]=0x1D57D, -- ð•½
+ },
+ [0x1D57E]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD FRAKTUR CAPITAL S",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0053 },
+ ["unicodeslot"]=0x1D57E, -- ð•¾
+ },
+ [0x1D57F]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD FRAKTUR CAPITAL T",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0054 },
+ ["unicodeslot"]=0x1D57F, -- ð•¿
+ },
+ [0x1D580]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD FRAKTUR CAPITAL U",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0055 },
+ ["unicodeslot"]=0x1D580, -- ð–€
+ },
+ [0x1D581]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD FRAKTUR CAPITAL V",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0056 },
+ ["unicodeslot"]=0x1D581, -- ð–
+ },
+ [0x1D582]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD FRAKTUR CAPITAL W",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0057 },
+ ["unicodeslot"]=0x1D582, -- ð–‚
+ },
+ [0x1D583]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD FRAKTUR CAPITAL X",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0058 },
+ ["unicodeslot"]=0x1D583, -- ð–ƒ
+ },
+ [0x1D584]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD FRAKTUR CAPITAL Y",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0059 },
+ ["unicodeslot"]=0x1D584, -- ð–„
+ },
+ [0x1D585]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD FRAKTUR CAPITAL Z",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x005A },
+ ["unicodeslot"]=0x1D585, -- ð–…
+ },
+ [0x1D586]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD FRAKTUR SMALL A",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0061 },
+ ["unicodeslot"]=0x1D586, -- ð–†
+ },
+ [0x1D587]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD FRAKTUR SMALL B",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0062 },
+ ["unicodeslot"]=0x1D587, -- ð–‡
+ },
+ [0x1D588]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD FRAKTUR SMALL C",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0063 },
+ ["unicodeslot"]=0x1D588, -- ð–ˆ
+ },
+ [0x1D589]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD FRAKTUR SMALL D",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0064 },
+ ["unicodeslot"]=0x1D589, -- ð–‰
+ },
+ [0x1D58A]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD FRAKTUR SMALL E",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0065 },
+ ["unicodeslot"]=0x1D58A, -- ð–Š
+ },
+ [0x1D58B]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD FRAKTUR SMALL F",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0066 },
+ ["unicodeslot"]=0x1D58B, -- ð–‹
+ },
+ [0x1D58C]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD FRAKTUR SMALL G",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0067 },
+ ["unicodeslot"]=0x1D58C, -- ð–Œ
+ },
+ [0x1D58D]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD FRAKTUR SMALL H",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0068 },
+ ["unicodeslot"]=0x1D58D, -- ð–
+ },
+ [0x1D58E]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD FRAKTUR SMALL I",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0069 },
+ ["unicodeslot"]=0x1D58E, -- ð–Ž
+ },
+ [0x1D58F]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD FRAKTUR SMALL J",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006A },
+ ["unicodeslot"]=0x1D58F, -- ð–
+ },
+ [0x1D590]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD FRAKTUR SMALL K",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006B },
+ ["unicodeslot"]=0x1D590, -- ð–
+ },
+ [0x1D591]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD FRAKTUR SMALL L",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006C },
+ ["unicodeslot"]=0x1D591, -- ð–‘
+ },
+ [0x1D592]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD FRAKTUR SMALL M",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006D },
+ ["unicodeslot"]=0x1D592, -- ð–’
+ },
+ [0x1D593]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD FRAKTUR SMALL N",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006E },
+ ["unicodeslot"]=0x1D593, -- ð–“
+ },
+ [0x1D594]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD FRAKTUR SMALL O",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006F },
+ ["unicodeslot"]=0x1D594, -- ð–”
+ },
+ [0x1D595]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD FRAKTUR SMALL P",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0070 },
+ ["unicodeslot"]=0x1D595, -- ð–•
+ },
+ [0x1D596]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD FRAKTUR SMALL Q",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0071 },
+ ["unicodeslot"]=0x1D596, -- ð––
+ },
+ [0x1D597]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD FRAKTUR SMALL R",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0072 },
+ ["unicodeslot"]=0x1D597, -- ð–—
+ },
+ [0x1D598]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD FRAKTUR SMALL S",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0073 },
+ ["unicodeslot"]=0x1D598, -- ð–˜
+ },
+ [0x1D599]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD FRAKTUR SMALL T",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0074 },
+ ["unicodeslot"]=0x1D599, -- ð–™
+ },
+ [0x1D59A]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD FRAKTUR SMALL U",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0075 },
+ ["unicodeslot"]=0x1D59A, -- ð–š
+ },
+ [0x1D59B]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD FRAKTUR SMALL V",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0076 },
+ ["unicodeslot"]=0x1D59B, -- ð–›
+ },
+ [0x1D59C]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD FRAKTUR SMALL W",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0077 },
+ ["unicodeslot"]=0x1D59C, -- ð–œ
+ },
+ [0x1D59D]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD FRAKTUR SMALL X",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0078 },
+ ["unicodeslot"]=0x1D59D, -- ð–
+ },
+ [0x1D59E]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD FRAKTUR SMALL Y",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0079 },
+ ["unicodeslot"]=0x1D59E, -- ð–ž
+ },
+ [0x1D59F]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD FRAKTUR SMALL Z",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x007A },
+ ["unicodeslot"]=0x1D59F, -- ð–Ÿ
+ },
+ [0x1D5A0]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF CAPITAL A",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0041 },
+ ["unicodeslot"]=0x1D5A0, -- ð– 
+ },
+ [0x1D5A1]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF CAPITAL B",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0042 },
+ ["unicodeslot"]=0x1D5A1, -- ð–¡
+ },
+ [0x1D5A2]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF CAPITAL C",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0043 },
+ ["unicodeslot"]=0x1D5A2, -- ð–¢
+ },
+ [0x1D5A3]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF CAPITAL D",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0044 },
+ ["unicodeslot"]=0x1D5A3, -- ð–£
+ },
+ [0x1D5A4]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF CAPITAL E",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0045 },
+ ["unicodeslot"]=0x1D5A4, -- ð–¤
+ },
+ [0x1D5A5]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF CAPITAL F",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0046 },
+ ["unicodeslot"]=0x1D5A5, -- ð–¥
+ },
+ [0x1D5A6]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF CAPITAL G",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0047 },
+ ["unicodeslot"]=0x1D5A6, -- ð–¦
+ },
+ [0x1D5A7]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF CAPITAL H",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0048 },
+ ["unicodeslot"]=0x1D5A7, -- ð–§
+ },
+ [0x1D5A8]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF CAPITAL I",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0049 },
+ ["unicodeslot"]=0x1D5A8, -- ð–¨
+ },
+ [0x1D5A9]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF CAPITAL J",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004A },
+ ["unicodeslot"]=0x1D5A9, -- ð–©
+ },
+ [0x1D5AA]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF CAPITAL K",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004B },
+ ["unicodeslot"]=0x1D5AA, -- ð–ª
+ },
+ [0x1D5AB]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF CAPITAL L",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004C },
+ ["unicodeslot"]=0x1D5AB, -- ð–«
+ },
+ [0x1D5AC]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF CAPITAL M",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004D },
+ ["unicodeslot"]=0x1D5AC, -- ð–¬
+ },
+ [0x1D5AD]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF CAPITAL N",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004E },
+ ["unicodeslot"]=0x1D5AD, -- ð–­
+ },
+ [0x1D5AE]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF CAPITAL O",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004F },
+ ["unicodeslot"]=0x1D5AE, -- ð–®
+ },
+ [0x1D5AF]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF CAPITAL P",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0050 },
+ ["unicodeslot"]=0x1D5AF, -- ð–¯
+ },
+ [0x1D5B0]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF CAPITAL Q",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0051 },
+ ["unicodeslot"]=0x1D5B0, -- ð–°
+ },
+ [0x1D5B1]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF CAPITAL R",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0052 },
+ ["unicodeslot"]=0x1D5B1, -- ð–±
+ },
+ [0x1D5B2]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF CAPITAL S",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0053 },
+ ["unicodeslot"]=0x1D5B2, -- ð–²
+ },
+ [0x1D5B3]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF CAPITAL T",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0054 },
+ ["unicodeslot"]=0x1D5B3, -- ð–³
+ },
+ [0x1D5B4]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF CAPITAL U",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0055 },
+ ["unicodeslot"]=0x1D5B4, -- ð–´
+ },
+ [0x1D5B5]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF CAPITAL V",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0056 },
+ ["unicodeslot"]=0x1D5B5, -- ð–µ
+ },
+ [0x1D5B6]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF CAPITAL W",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0057 },
+ ["unicodeslot"]=0x1D5B6, -- ð–¶
+ },
+ [0x1D5B7]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF CAPITAL X",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0058 },
+ ["unicodeslot"]=0x1D5B7, -- ð–·
+ },
+ [0x1D5B8]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF CAPITAL Y",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0059 },
+ ["unicodeslot"]=0x1D5B8, -- ð–¸
+ },
+ [0x1D5B9]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF CAPITAL Z",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x005A },
+ ["unicodeslot"]=0x1D5B9, -- ð–¹
+ },
+ [0x1D5BA]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF SMALL A",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0061 },
+ ["unicodeslot"]=0x1D5BA, -- ð–º
+ },
+ [0x1D5BB]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF SMALL B",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0062 },
+ ["unicodeslot"]=0x1D5BB, -- ð–»
+ },
+ [0x1D5BC]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF SMALL C",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0063 },
+ ["unicodeslot"]=0x1D5BC, -- ð–¼
+ },
+ [0x1D5BD]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF SMALL D",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0064 },
+ ["unicodeslot"]=0x1D5BD, -- ð–½
+ },
+ [0x1D5BE]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF SMALL E",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0065 },
+ ["unicodeslot"]=0x1D5BE, -- ð–¾
+ },
+ [0x1D5BF]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF SMALL F",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0066 },
+ ["unicodeslot"]=0x1D5BF, -- ð–¿
+ },
+ [0x1D5C0]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF SMALL G",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0067 },
+ ["unicodeslot"]=0x1D5C0, -- ð—€
+ },
+ [0x1D5C1]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF SMALL H",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0068 },
+ ["unicodeslot"]=0x1D5C1, -- ð—
+ },
+ [0x1D5C2]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF SMALL I",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0069 },
+ ["unicodeslot"]=0x1D5C2, -- ð—‚
+ },
+ [0x1D5C3]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF SMALL J",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006A },
+ ["unicodeslot"]=0x1D5C3, -- ð—ƒ
+ },
+ [0x1D5C4]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF SMALL K",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006B },
+ ["unicodeslot"]=0x1D5C4, -- ð—„
+ },
+ [0x1D5C5]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF SMALL L",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006C },
+ ["unicodeslot"]=0x1D5C5, -- ð—…
+ },
+ [0x1D5C6]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF SMALL M",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006D },
+ ["unicodeslot"]=0x1D5C6, -- ð—†
+ },
+ [0x1D5C7]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF SMALL N",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006E },
+ ["unicodeslot"]=0x1D5C7, -- ð—‡
+ },
+ [0x1D5C8]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF SMALL O",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006F },
+ ["unicodeslot"]=0x1D5C8, -- ð—ˆ
+ },
+ [0x1D5C9]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF SMALL P",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0070 },
+ ["unicodeslot"]=0x1D5C9, -- ð—‰
+ },
+ [0x1D5CA]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF SMALL Q",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0071 },
+ ["unicodeslot"]=0x1D5CA, -- ð—Š
+ },
+ [0x1D5CB]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF SMALL R",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0072 },
+ ["unicodeslot"]=0x1D5CB, -- ð—‹
+ },
+ [0x1D5CC]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF SMALL S",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0073 },
+ ["unicodeslot"]=0x1D5CC, -- ð—Œ
+ },
+ [0x1D5CD]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF SMALL T",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0074 },
+ ["unicodeslot"]=0x1D5CD, -- ð—
+ },
+ [0x1D5CE]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF SMALL U",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0075 },
+ ["unicodeslot"]=0x1D5CE, -- ð—Ž
+ },
+ [0x1D5CF]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF SMALL V",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0076 },
+ ["unicodeslot"]=0x1D5CF, -- ð—
+ },
+ [0x1D5D0]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF SMALL W",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0077 },
+ ["unicodeslot"]=0x1D5D0, -- ð—
+ },
+ [0x1D5D1]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF SMALL X",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0078 },
+ ["unicodeslot"]=0x1D5D1, -- ð—‘
+ },
+ [0x1D5D2]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF SMALL Y",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0079 },
+ ["unicodeslot"]=0x1D5D2, -- ð—’
+ },
+ [0x1D5D3]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF SMALL Z",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x007A },
+ ["unicodeslot"]=0x1D5D3, -- ð—“
+ },
+ [0x1D5D4]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD CAPITAL A",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0041 },
+ ["unicodeslot"]=0x1D5D4, -- ð—”
+ },
+ [0x1D5D5]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD CAPITAL B",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0042 },
+ ["unicodeslot"]=0x1D5D5, -- ð—•
+ },
+ [0x1D5D6]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD CAPITAL C",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0043 },
+ ["unicodeslot"]=0x1D5D6, -- ð—–
+ },
+ [0x1D5D7]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD CAPITAL D",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0044 },
+ ["unicodeslot"]=0x1D5D7, -- ð——
+ },
+ [0x1D5D8]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD CAPITAL E",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0045 },
+ ["unicodeslot"]=0x1D5D8, -- ð—˜
+ },
+ [0x1D5D9]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD CAPITAL F",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0046 },
+ ["unicodeslot"]=0x1D5D9, -- ð—™
+ },
+ [0x1D5DA]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD CAPITAL G",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0047 },
+ ["unicodeslot"]=0x1D5DA, -- ð—š
+ },
+ [0x1D5DB]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD CAPITAL H",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0048 },
+ ["unicodeslot"]=0x1D5DB, -- ð—›
+ },
+ [0x1D5DC]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD CAPITAL I",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0049 },
+ ["unicodeslot"]=0x1D5DC, -- ð—œ
+ },
+ [0x1D5DD]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD CAPITAL J",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004A },
+ ["unicodeslot"]=0x1D5DD, -- ð—
+ },
+ [0x1D5DE]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD CAPITAL K",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004B },
+ ["unicodeslot"]=0x1D5DE, -- ð—ž
+ },
+ [0x1D5DF]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD CAPITAL L",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004C },
+ ["unicodeslot"]=0x1D5DF, -- ð—Ÿ
+ },
+ [0x1D5E0]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD CAPITAL M",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004D },
+ ["unicodeslot"]=0x1D5E0, -- ð— 
+ },
+ [0x1D5E1]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD CAPITAL N",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004E },
+ ["unicodeslot"]=0x1D5E1, -- ð—¡
+ },
+ [0x1D5E2]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD CAPITAL O",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004F },
+ ["unicodeslot"]=0x1D5E2, -- ð—¢
+ },
+ [0x1D5E3]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD CAPITAL P",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0050 },
+ ["unicodeslot"]=0x1D5E3, -- ð—£
+ },
+ [0x1D5E4]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD CAPITAL Q",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0051 },
+ ["unicodeslot"]=0x1D5E4, -- ð—¤
+ },
+ [0x1D5E5]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD CAPITAL R",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0052 },
+ ["unicodeslot"]=0x1D5E5, -- ð—¥
+ },
+ [0x1D5E6]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD CAPITAL S",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0053 },
+ ["unicodeslot"]=0x1D5E6, -- ð—¦
+ },
+ [0x1D5E7]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD CAPITAL T",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0054 },
+ ["unicodeslot"]=0x1D5E7, -- ð—§
+ },
+ [0x1D5E8]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD CAPITAL U",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0055 },
+ ["unicodeslot"]=0x1D5E8, -- ð—¨
+ },
+ [0x1D5E9]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD CAPITAL V",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0056 },
+ ["unicodeslot"]=0x1D5E9, -- ð—©
+ },
+ [0x1D5EA]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD CAPITAL W",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0057 },
+ ["unicodeslot"]=0x1D5EA, -- ð—ª
+ },
+ [0x1D5EB]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD CAPITAL X",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0058 },
+ ["unicodeslot"]=0x1D5EB, -- ð—«
+ },
+ [0x1D5EC]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD CAPITAL Y",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0059 },
+ ["unicodeslot"]=0x1D5EC, -- ð—¬
+ },
+ [0x1D5ED]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD CAPITAL Z",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x005A },
+ ["unicodeslot"]=0x1D5ED, -- ð—­
+ },
+ [0x1D5EE]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD SMALL A",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0061 },
+ ["unicodeslot"]=0x1D5EE, -- ð—®
+ },
+ [0x1D5EF]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD SMALL B",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0062 },
+ ["unicodeslot"]=0x1D5EF, -- ð—¯
+ },
+ [0x1D5F0]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD SMALL C",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0063 },
+ ["unicodeslot"]=0x1D5F0, -- ð—°
+ },
+ [0x1D5F1]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD SMALL D",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0064 },
+ ["unicodeslot"]=0x1D5F1, -- ð—±
+ },
+ [0x1D5F2]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD SMALL E",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0065 },
+ ["unicodeslot"]=0x1D5F2, -- ð—²
+ },
+ [0x1D5F3]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD SMALL F",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0066 },
+ ["unicodeslot"]=0x1D5F3, -- ð—³
+ },
+ [0x1D5F4]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD SMALL G",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0067 },
+ ["unicodeslot"]=0x1D5F4, -- ð—´
+ },
+ [0x1D5F5]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD SMALL H",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0068 },
+ ["unicodeslot"]=0x1D5F5, -- ð—µ
+ },
+ [0x1D5F6]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD SMALL I",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0069 },
+ ["unicodeslot"]=0x1D5F6, -- ð—¶
+ },
+ [0x1D5F7]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD SMALL J",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006A },
+ ["unicodeslot"]=0x1D5F7, -- ð—·
+ },
+ [0x1D5F8]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD SMALL K",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006B },
+ ["unicodeslot"]=0x1D5F8, -- ð—¸
+ },
+ [0x1D5F9]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD SMALL L",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006C },
+ ["unicodeslot"]=0x1D5F9, -- ð—¹
+ },
+ [0x1D5FA]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD SMALL M",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006D },
+ ["unicodeslot"]=0x1D5FA, -- ð—º
+ },
+ [0x1D5FB]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD SMALL N",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006E },
+ ["unicodeslot"]=0x1D5FB, -- ð—»
+ },
+ [0x1D5FC]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD SMALL O",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006F },
+ ["unicodeslot"]=0x1D5FC, -- ð—¼
+ },
+ [0x1D5FD]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD SMALL P",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0070 },
+ ["unicodeslot"]=0x1D5FD, -- ð—½
+ },
+ [0x1D5FE]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD SMALL Q",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0071 },
+ ["unicodeslot"]=0x1D5FE, -- ð—¾
+ },
+ [0x1D5FF]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD SMALL R",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0072 },
+ ["unicodeslot"]=0x1D5FF, -- ð—¿
+ },
+ [0x1D600]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD SMALL S",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0073 },
+ ["unicodeslot"]=0x1D600, -- ð˜€
+ },
+ [0x1D601]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD SMALL T",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0074 },
+ ["unicodeslot"]=0x1D601, -- ð˜
+ },
+ [0x1D602]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD SMALL U",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0075 },
+ ["unicodeslot"]=0x1D602, -- ð˜‚
+ },
+ [0x1D603]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD SMALL V",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0076 },
+ ["unicodeslot"]=0x1D603, -- ð˜ƒ
+ },
+ [0x1D604]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD SMALL W",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0077 },
+ ["unicodeslot"]=0x1D604, -- ð˜„
+ },
+ [0x1D605]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD SMALL X",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0078 },
+ ["unicodeslot"]=0x1D605, -- ð˜…
+ },
+ [0x1D606]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD SMALL Y",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0079 },
+ ["unicodeslot"]=0x1D606, -- ð˜†
+ },
+ [0x1D607]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD SMALL Z",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x007A },
+ ["unicodeslot"]=0x1D607, -- ð˜‡
+ },
+ [0x1D608]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF ITALIC CAPITAL A",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0041 },
+ ["unicodeslot"]=0x1D608, -- ð˜ˆ
+ },
+ [0x1D609]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF ITALIC CAPITAL B",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0042 },
+ ["unicodeslot"]=0x1D609, -- ð˜‰
+ },
+ [0x1D60A]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF ITALIC CAPITAL C",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0043 },
+ ["unicodeslot"]=0x1D60A, -- ð˜Š
+ },
+ [0x1D60B]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF ITALIC CAPITAL D",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0044 },
+ ["unicodeslot"]=0x1D60B, -- ð˜‹
+ },
+ [0x1D60C]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF ITALIC CAPITAL E",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0045 },
+ ["unicodeslot"]=0x1D60C, -- ð˜Œ
+ },
+ [0x1D60D]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF ITALIC CAPITAL F",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0046 },
+ ["unicodeslot"]=0x1D60D, -- ð˜
+ },
+ [0x1D60E]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF ITALIC CAPITAL G",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0047 },
+ ["unicodeslot"]=0x1D60E, -- ð˜Ž
+ },
+ [0x1D60F]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF ITALIC CAPITAL H",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0048 },
+ ["unicodeslot"]=0x1D60F, -- ð˜
+ },
+ [0x1D610]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF ITALIC CAPITAL I",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0049 },
+ ["unicodeslot"]=0x1D610, -- ð˜
+ },
+ [0x1D611]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF ITALIC CAPITAL J",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004A },
+ ["unicodeslot"]=0x1D611, -- ð˜‘
+ },
+ [0x1D612]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF ITALIC CAPITAL K",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004B },
+ ["unicodeslot"]=0x1D612, -- ð˜’
+ },
+ [0x1D613]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF ITALIC CAPITAL L",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004C },
+ ["unicodeslot"]=0x1D613, -- ð˜“
+ },
+ [0x1D614]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF ITALIC CAPITAL M",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004D },
+ ["unicodeslot"]=0x1D614, -- ð˜”
+ },
+ [0x1D615]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF ITALIC CAPITAL N",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004E },
+ ["unicodeslot"]=0x1D615, -- ð˜•
+ },
+ [0x1D616]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF ITALIC CAPITAL O",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004F },
+ ["unicodeslot"]=0x1D616, -- ð˜–
+ },
+ [0x1D617]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF ITALIC CAPITAL P",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0050 },
+ ["unicodeslot"]=0x1D617, -- ð˜—
+ },
+ [0x1D618]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF ITALIC CAPITAL Q",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0051 },
+ ["unicodeslot"]=0x1D618, -- ð˜˜
+ },
+ [0x1D619]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF ITALIC CAPITAL R",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0052 },
+ ["unicodeslot"]=0x1D619, -- ð˜™
+ },
+ [0x1D61A]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF ITALIC CAPITAL S",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0053 },
+ ["unicodeslot"]=0x1D61A, -- ð˜š
+ },
+ [0x1D61B]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF ITALIC CAPITAL T",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0054 },
+ ["unicodeslot"]=0x1D61B, -- ð˜›
+ },
+ [0x1D61C]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF ITALIC CAPITAL U",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0055 },
+ ["unicodeslot"]=0x1D61C, -- ð˜œ
+ },
+ [0x1D61D]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF ITALIC CAPITAL V",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0056 },
+ ["unicodeslot"]=0x1D61D, -- ð˜
+ },
+ [0x1D61E]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF ITALIC CAPITAL W",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0057 },
+ ["unicodeslot"]=0x1D61E, -- ð˜ž
+ },
+ [0x1D61F]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF ITALIC CAPITAL X",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0058 },
+ ["unicodeslot"]=0x1D61F, -- ð˜Ÿ
+ },
+ [0x1D620]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF ITALIC CAPITAL Y",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0059 },
+ ["unicodeslot"]=0x1D620, -- ð˜ 
+ },
+ [0x1D621]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF ITALIC CAPITAL Z",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x005A },
+ ["unicodeslot"]=0x1D621, -- ð˜¡
+ },
+ [0x1D622]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF ITALIC SMALL A",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0061 },
+ ["unicodeslot"]=0x1D622, -- ð˜¢
+ },
+ [0x1D623]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF ITALIC SMALL B",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0062 },
+ ["unicodeslot"]=0x1D623, -- ð˜£
+ },
+ [0x1D624]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF ITALIC SMALL C",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0063 },
+ ["unicodeslot"]=0x1D624, -- ð˜¤
+ },
+ [0x1D625]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF ITALIC SMALL D",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0064 },
+ ["unicodeslot"]=0x1D625, -- ð˜¥
+ },
+ [0x1D626]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF ITALIC SMALL E",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0065 },
+ ["unicodeslot"]=0x1D626, -- ð˜¦
+ },
+ [0x1D627]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF ITALIC SMALL F",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0066 },
+ ["unicodeslot"]=0x1D627, -- ð˜§
+ },
+ [0x1D628]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF ITALIC SMALL G",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0067 },
+ ["unicodeslot"]=0x1D628, -- ð˜¨
+ },
+ [0x1D629]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF ITALIC SMALL H",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0068 },
+ ["unicodeslot"]=0x1D629, -- ð˜©
+ },
+ [0x1D62A]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF ITALIC SMALL I",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0069 },
+ ["unicodeslot"]=0x1D62A, -- ð˜ª
+ },
+ [0x1D62B]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF ITALIC SMALL J",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006A },
+ ["unicodeslot"]=0x1D62B, -- ð˜«
+ },
+ [0x1D62C]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF ITALIC SMALL K",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006B },
+ ["unicodeslot"]=0x1D62C, -- ð˜¬
+ },
+ [0x1D62D]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF ITALIC SMALL L",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006C },
+ ["unicodeslot"]=0x1D62D, -- ð˜­
+ },
+ [0x1D62E]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF ITALIC SMALL M",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006D },
+ ["unicodeslot"]=0x1D62E, -- ð˜®
+ },
+ [0x1D62F]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF ITALIC SMALL N",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006E },
+ ["unicodeslot"]=0x1D62F, -- ð˜¯
+ },
+ [0x1D630]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF ITALIC SMALL O",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006F },
+ ["unicodeslot"]=0x1D630, -- ð˜°
+ },
+ [0x1D631]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF ITALIC SMALL P",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0070 },
+ ["unicodeslot"]=0x1D631, -- ð˜±
+ },
+ [0x1D632]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF ITALIC SMALL Q",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0071 },
+ ["unicodeslot"]=0x1D632, -- ð˜²
+ },
+ [0x1D633]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF ITALIC SMALL R",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0072 },
+ ["unicodeslot"]=0x1D633, -- ð˜³
+ },
+ [0x1D634]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF ITALIC SMALL S",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0073 },
+ ["unicodeslot"]=0x1D634, -- ð˜´
+ },
+ [0x1D635]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF ITALIC SMALL T",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0074 },
+ ["unicodeslot"]=0x1D635, -- ð˜µ
+ },
+ [0x1D636]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF ITALIC SMALL U",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0075 },
+ ["unicodeslot"]=0x1D636, -- ð˜¶
+ },
+ [0x1D637]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF ITALIC SMALL V",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0076 },
+ ["unicodeslot"]=0x1D637, -- ð˜·
+ },
+ [0x1D638]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF ITALIC SMALL W",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0077 },
+ ["unicodeslot"]=0x1D638, -- ð˜¸
+ },
+ [0x1D639]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF ITALIC SMALL X",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0078 },
+ ["unicodeslot"]=0x1D639, -- ð˜¹
+ },
+ [0x1D63A]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF ITALIC SMALL Y",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0079 },
+ ["unicodeslot"]=0x1D63A, -- ð˜º
+ },
+ [0x1D63B]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF ITALIC SMALL Z",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x007A },
+ ["unicodeslot"]=0x1D63B, -- ð˜»
+ },
+ [0x1D63C]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL A",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0041 },
+ ["unicodeslot"]=0x1D63C, -- ð˜¼
+ },
+ [0x1D63D]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL B",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0042 },
+ ["unicodeslot"]=0x1D63D, -- ð˜½
+ },
+ [0x1D63E]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL C",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0043 },
+ ["unicodeslot"]=0x1D63E, -- ð˜¾
+ },
+ [0x1D63F]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL D",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0044 },
+ ["unicodeslot"]=0x1D63F, -- ð˜¿
+ },
+ [0x1D640]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL E",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0045 },
+ ["unicodeslot"]=0x1D640, -- ð™€
+ },
+ [0x1D641]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL F",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0046 },
+ ["unicodeslot"]=0x1D641, -- ð™
+ },
+ [0x1D642]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL G",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0047 },
+ ["unicodeslot"]=0x1D642, -- ð™‚
+ },
+ [0x1D643]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL H",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0048 },
+ ["unicodeslot"]=0x1D643, -- ð™ƒ
+ },
+ [0x1D644]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL I",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0049 },
+ ["unicodeslot"]=0x1D644, -- ð™„
+ },
+ [0x1D645]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL J",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004A },
+ ["unicodeslot"]=0x1D645, -- ð™…
+ },
+ [0x1D646]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL K",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004B },
+ ["unicodeslot"]=0x1D646, -- ð™†
+ },
+ [0x1D647]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL L",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004C },
+ ["unicodeslot"]=0x1D647, -- ð™‡
+ },
+ [0x1D648]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL M",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004D },
+ ["unicodeslot"]=0x1D648, -- ð™ˆ
+ },
+ [0x1D649]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL N",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004E },
+ ["unicodeslot"]=0x1D649, -- ð™‰
+ },
+ [0x1D64A]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL O",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004F },
+ ["unicodeslot"]=0x1D64A, -- ð™Š
+ },
+ [0x1D64B]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL P",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0050 },
+ ["unicodeslot"]=0x1D64B, -- ð™‹
+ },
+ [0x1D64C]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Q",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0051 },
+ ["unicodeslot"]=0x1D64C, -- ð™Œ
+ },
+ [0x1D64D]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL R",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0052 },
+ ["unicodeslot"]=0x1D64D, -- ð™
+ },
+ [0x1D64E]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL S",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0053 },
+ ["unicodeslot"]=0x1D64E, -- ð™Ž
+ },
+ [0x1D64F]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL T",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0054 },
+ ["unicodeslot"]=0x1D64F, -- ð™
+ },
+ [0x1D650]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL U",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0055 },
+ ["unicodeslot"]=0x1D650, -- ð™
+ },
+ [0x1D651]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL V",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0056 },
+ ["unicodeslot"]=0x1D651, -- ð™‘
+ },
+ [0x1D652]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL W",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0057 },
+ ["unicodeslot"]=0x1D652, -- ð™’
+ },
+ [0x1D653]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL X",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0058 },
+ ["unicodeslot"]=0x1D653, -- ð™“
+ },
+ [0x1D654]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Y",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0059 },
+ ["unicodeslot"]=0x1D654, -- ð™”
+ },
+ [0x1D655]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Z",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x005A },
+ ["unicodeslot"]=0x1D655, -- ð™•
+ },
+ [0x1D656]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL A",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0061 },
+ ["unicodeslot"]=0x1D656, -- ð™–
+ },
+ [0x1D657]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL B",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0062 },
+ ["unicodeslot"]=0x1D657, -- ð™—
+ },
+ [0x1D658]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL C",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0063 },
+ ["unicodeslot"]=0x1D658, -- ð™˜
+ },
+ [0x1D659]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL D",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0064 },
+ ["unicodeslot"]=0x1D659, -- ð™™
+ },
+ [0x1D65A]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL E",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0065 },
+ ["unicodeslot"]=0x1D65A, -- ð™š
+ },
+ [0x1D65B]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL F",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0066 },
+ ["unicodeslot"]=0x1D65B, -- ð™›
+ },
+ [0x1D65C]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL G",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0067 },
+ ["unicodeslot"]=0x1D65C, -- ð™œ
+ },
+ [0x1D65D]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL H",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0068 },
+ ["unicodeslot"]=0x1D65D, -- ð™
+ },
+ [0x1D65E]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL I",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0069 },
+ ["unicodeslot"]=0x1D65E, -- ð™ž
+ },
+ [0x1D65F]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL J",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006A },
+ ["unicodeslot"]=0x1D65F, -- ð™Ÿ
+ },
+ [0x1D660]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL K",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006B },
+ ["unicodeslot"]=0x1D660, -- ð™ 
+ },
+ [0x1D661]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL L",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006C },
+ ["unicodeslot"]=0x1D661, -- ð™¡
+ },
+ [0x1D662]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL M",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006D },
+ ["unicodeslot"]=0x1D662, -- ð™¢
+ },
+ [0x1D663]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL N",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006E },
+ ["unicodeslot"]=0x1D663, -- ð™£
+ },
+ [0x1D664]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL O",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006F },
+ ["unicodeslot"]=0x1D664, -- ð™¤
+ },
+ [0x1D665]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL P",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0070 },
+ ["unicodeslot"]=0x1D665, -- ð™¥
+ },
+ [0x1D666]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Q",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0071 },
+ ["unicodeslot"]=0x1D666, -- ð™¦
+ },
+ [0x1D667]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL R",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0072 },
+ ["unicodeslot"]=0x1D667, -- ð™§
+ },
+ [0x1D668]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL S",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0073 },
+ ["unicodeslot"]=0x1D668, -- ð™¨
+ },
+ [0x1D669]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL T",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0074 },
+ ["unicodeslot"]=0x1D669, -- ð™©
+ },
+ [0x1D66A]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL U",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0075 },
+ ["unicodeslot"]=0x1D66A, -- ð™ª
+ },
+ [0x1D66B]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL V",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0076 },
+ ["unicodeslot"]=0x1D66B, -- ð™«
+ },
+ [0x1D66C]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL W",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0077 },
+ ["unicodeslot"]=0x1D66C, -- ð™¬
+ },
+ [0x1D66D]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL X",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0078 },
+ ["unicodeslot"]=0x1D66D, -- ð™­
+ },
+ [0x1D66E]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Y",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0079 },
+ ["unicodeslot"]=0x1D66E, -- ð™®
+ },
+ [0x1D66F]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Z",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x007A },
+ ["unicodeslot"]=0x1D66F, -- ð™¯
+ },
+ [0x1D670]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL MONOSPACE CAPITAL A",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0041 },
+ ["unicodeslot"]=0x1D670, -- ð™°
+ },
+ [0x1D671]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL MONOSPACE CAPITAL B",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0042 },
+ ["unicodeslot"]=0x1D671, -- ð™±
+ },
+ [0x1D672]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL MONOSPACE CAPITAL C",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0043 },
+ ["unicodeslot"]=0x1D672, -- ð™²
+ },
+ [0x1D673]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL MONOSPACE CAPITAL D",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0044 },
+ ["unicodeslot"]=0x1D673, -- ð™³
+ },
+ [0x1D674]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL MONOSPACE CAPITAL E",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0045 },
+ ["unicodeslot"]=0x1D674, -- ð™´
+ },
+ [0x1D675]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL MONOSPACE CAPITAL F",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0046 },
+ ["unicodeslot"]=0x1D675, -- ð™µ
+ },
+ [0x1D676]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL MONOSPACE CAPITAL G",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0047 },
+ ["unicodeslot"]=0x1D676, -- ð™¶
+ },
+ [0x1D677]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL MONOSPACE CAPITAL H",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0048 },
+ ["unicodeslot"]=0x1D677, -- ð™·
+ },
+ [0x1D678]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL MONOSPACE CAPITAL I",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0049 },
+ ["unicodeslot"]=0x1D678, -- ð™¸
+ },
+ [0x1D679]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL MONOSPACE CAPITAL J",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004A },
+ ["unicodeslot"]=0x1D679, -- ð™¹
+ },
+ [0x1D67A]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL MONOSPACE CAPITAL K",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004B },
+ ["unicodeslot"]=0x1D67A, -- ð™º
+ },
+ [0x1D67B]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL MONOSPACE CAPITAL L",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004C },
+ ["unicodeslot"]=0x1D67B, -- ð™»
+ },
+ [0x1D67C]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL MONOSPACE CAPITAL M",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004D },
+ ["unicodeslot"]=0x1D67C, -- ð™¼
+ },
+ [0x1D67D]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL MONOSPACE CAPITAL N",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004E },
+ ["unicodeslot"]=0x1D67D, -- ð™½
+ },
+ [0x1D67E]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL MONOSPACE CAPITAL O",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x004F },
+ ["unicodeslot"]=0x1D67E, -- ð™¾
+ },
+ [0x1D67F]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL MONOSPACE CAPITAL P",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0050 },
+ ["unicodeslot"]=0x1D67F, -- ð™¿
+ },
+ [0x1D680]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL MONOSPACE CAPITAL Q",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0051 },
+ ["unicodeslot"]=0x1D680, -- ðš€
+ },
+ [0x1D681]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL MONOSPACE CAPITAL R",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0052 },
+ ["unicodeslot"]=0x1D681, -- ðš
+ },
+ [0x1D682]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL MONOSPACE CAPITAL S",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0053 },
+ ["unicodeslot"]=0x1D682, -- ðš‚
+ },
+ [0x1D683]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL MONOSPACE CAPITAL T",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0054 },
+ ["unicodeslot"]=0x1D683, -- ðšƒ
+ },
+ [0x1D684]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL MONOSPACE CAPITAL U",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0055 },
+ ["unicodeslot"]=0x1D684, -- ðš„
+ },
+ [0x1D685]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL MONOSPACE CAPITAL V",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0056 },
+ ["unicodeslot"]=0x1D685, -- ðš…
+ },
+ [0x1D686]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL MONOSPACE CAPITAL W",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0057 },
+ ["unicodeslot"]=0x1D686, -- ðš†
+ },
+ [0x1D687]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL MONOSPACE CAPITAL X",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0058 },
+ ["unicodeslot"]=0x1D687, -- ðš‡
+ },
+ [0x1D688]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL MONOSPACE CAPITAL Y",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0059 },
+ ["unicodeslot"]=0x1D688, -- ðšˆ
+ },
+ [0x1D689]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL MONOSPACE CAPITAL Z",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x005A },
+ ["unicodeslot"]=0x1D689, -- ðš‰
+ },
+ [0x1D68A]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL MONOSPACE SMALL A",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0061 },
+ ["unicodeslot"]=0x1D68A, -- ðšŠ
+ },
+ [0x1D68B]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL MONOSPACE SMALL B",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0062 },
+ ["unicodeslot"]=0x1D68B, -- ðš‹
+ },
+ [0x1D68C]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL MONOSPACE SMALL C",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0063 },
+ ["unicodeslot"]=0x1D68C, -- ðšŒ
+ },
+ [0x1D68D]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL MONOSPACE SMALL D",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0064 },
+ ["unicodeslot"]=0x1D68D, -- ðš
+ },
+ [0x1D68E]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL MONOSPACE SMALL E",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0065 },
+ ["unicodeslot"]=0x1D68E, -- ðšŽ
+ },
+ [0x1D68F]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL MONOSPACE SMALL F",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0066 },
+ ["unicodeslot"]=0x1D68F, -- ðš
+ },
+ [0x1D690]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL MONOSPACE SMALL G",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0067 },
+ ["unicodeslot"]=0x1D690, -- ðš
+ },
+ [0x1D691]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL MONOSPACE SMALL H",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0068 },
+ ["unicodeslot"]=0x1D691, -- ðš‘
+ },
+ [0x1D692]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL MONOSPACE SMALL I",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0069 },
+ ["unicodeslot"]=0x1D692, -- ðš’
+ },
+ [0x1D693]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL MONOSPACE SMALL J",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006A },
+ ["unicodeslot"]=0x1D693, -- ðš“
+ },
+ [0x1D694]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL MONOSPACE SMALL K",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006B },
+ ["unicodeslot"]=0x1D694, -- ðš”
+ },
+ [0x1D695]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL MONOSPACE SMALL L",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006C },
+ ["unicodeslot"]=0x1D695, -- ðš•
+ },
+ [0x1D696]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL MONOSPACE SMALL M",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006D },
+ ["unicodeslot"]=0x1D696, -- ðš–
+ },
+ [0x1D697]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL MONOSPACE SMALL N",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006E },
+ ["unicodeslot"]=0x1D697, -- ðš—
+ },
+ [0x1D698]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL MONOSPACE SMALL O",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x006F },
+ ["unicodeslot"]=0x1D698, -- ðš˜
+ },
+ [0x1D699]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL MONOSPACE SMALL P",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0070 },
+ ["unicodeslot"]=0x1D699, -- ðš™
+ },
+ [0x1D69A]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL MONOSPACE SMALL Q",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0071 },
+ ["unicodeslot"]=0x1D69A, -- ðšš
+ },
+ [0x1D69B]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL MONOSPACE SMALL R",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0072 },
+ ["unicodeslot"]=0x1D69B, -- ðš›
+ },
+ [0x1D69C]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL MONOSPACE SMALL S",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0073 },
+ ["unicodeslot"]=0x1D69C, -- ðšœ
+ },
+ [0x1D69D]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL MONOSPACE SMALL T",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0074 },
+ ["unicodeslot"]=0x1D69D, -- ðš
+ },
+ [0x1D69E]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL MONOSPACE SMALL U",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0075 },
+ ["unicodeslot"]=0x1D69E, -- ðšž
+ },
+ [0x1D69F]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL MONOSPACE SMALL V",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0076 },
+ ["unicodeslot"]=0x1D69F, -- ðšŸ
+ },
+ [0x1D6A0]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL MONOSPACE SMALL W",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0077 },
+ ["unicodeslot"]=0x1D6A0, -- ðš 
+ },
+ [0x1D6A1]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL MONOSPACE SMALL X",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0078 },
+ ["unicodeslot"]=0x1D6A1, -- ðš¡
+ },
+ [0x1D6A2]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL MONOSPACE SMALL Y",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0079 },
+ ["unicodeslot"]=0x1D6A2, -- ðš¢
+ },
+ [0x1D6A3]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL MONOSPACE SMALL Z",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x007A },
+ ["unicodeslot"]=0x1D6A3, -- ðš£
+ },
+ [0x1D6A4]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL ITALIC SMALL DOTLESS I",
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["mathname"]="imath",
+ ["specials"]={ "font", 0x0131 },
+ ["unicodeslot"]=0x1D6A4, -- ðš¤
+ },
+ [0x1D6A5]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL ITALIC SMALL DOTLESS J",
+ ["linebreak"]="al",
+ ["mathclass"]="variable",
+ ["mathname"]="jmath",
+ ["specials"]={ "font", 0x0237 },
+ ["unicodeslot"]=0x1D6A5, -- ðš¥
+ },
+ [0x1D6A8]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD CAPITAL ALPHA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0391 },
+ ["unicodeslot"]=0x1D6A8, -- ðš¨
+ },
+ [0x1D6A9]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD CAPITAL BETA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0392 },
+ ["unicodeslot"]=0x1D6A9, -- ðš©
+ },
+ [0x1D6AA]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD CAPITAL GAMMA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0393 },
+ ["unicodeslot"]=0x1D6AA, -- ðšª
+ },
+ [0x1D6AB]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD CAPITAL DELTA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0394 },
+ ["unicodeslot"]=0x1D6AB, -- ðš«
+ },
+ [0x1D6AC]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD CAPITAL EPSILON",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0395 },
+ ["unicodeslot"]=0x1D6AC, -- ðš¬
+ },
+ [0x1D6AD]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD CAPITAL ZETA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0396 },
+ ["unicodeslot"]=0x1D6AD, -- ðš­
+ },
+ [0x1D6AE]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD CAPITAL ETA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0397 },
+ ["unicodeslot"]=0x1D6AE, -- ðš®
+ },
+ [0x1D6AF]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD CAPITAL THETA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0398 },
+ ["unicodeslot"]=0x1D6AF, -- ðš¯
+ },
+ [0x1D6B0]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD CAPITAL IOTA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0399 },
+ ["unicodeslot"]=0x1D6B0, -- ðš°
+ },
+ [0x1D6B1]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD CAPITAL KAPPA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x039A },
+ ["unicodeslot"]=0x1D6B1, -- ðš±
+ },
+ [0x1D6B2]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD CAPITAL LAMDA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x039B },
+ ["unicodeslot"]=0x1D6B2, -- ðš²
+ },
+ [0x1D6B3]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD CAPITAL MU",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x039C },
+ ["unicodeslot"]=0x1D6B3, -- ðš³
+ },
+ [0x1D6B4]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD CAPITAL NU",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x039D },
+ ["unicodeslot"]=0x1D6B4, -- ðš´
+ },
+ [0x1D6B5]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD CAPITAL XI",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x039E },
+ ["unicodeslot"]=0x1D6B5, -- ðšµ
+ },
+ [0x1D6B6]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD CAPITAL OMICRON",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x039F },
+ ["unicodeslot"]=0x1D6B6, -- ðš¶
+ },
+ [0x1D6B7]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD CAPITAL PI",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03A0 },
+ ["unicodeslot"]=0x1D6B7, -- ðš·
+ },
+ [0x1D6B8]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD CAPITAL RHO",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03A1 },
+ ["unicodeslot"]=0x1D6B8, -- ðš¸
+ },
+ [0x1D6B9]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD CAPITAL THETA SYMBOL",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03F4 },
+ ["unicodeslot"]=0x1D6B9, -- ðš¹
+ },
+ [0x1D6BA]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD CAPITAL SIGMA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03A3 },
+ ["unicodeslot"]=0x1D6BA, -- ðšº
+ },
+ [0x1D6BB]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD CAPITAL TAU",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03A4 },
+ ["unicodeslot"]=0x1D6BB, -- ðš»
+ },
+ [0x1D6BC]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD CAPITAL UPSILON",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03A5 },
+ ["unicodeslot"]=0x1D6BC, -- ðš¼
+ },
+ [0x1D6BD]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD CAPITAL PHI",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03A6 },
+ ["unicodeslot"]=0x1D6BD, -- ðš½
+ },
+ [0x1D6BE]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD CAPITAL CHI",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03A7 },
+ ["unicodeslot"]=0x1D6BE, -- ðš¾
+ },
+ [0x1D6BF]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD CAPITAL PSI",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03A8 },
+ ["unicodeslot"]=0x1D6BF, -- ðš¿
+ },
+ [0x1D6C0]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD CAPITAL OMEGA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03A9 },
+ ["unicodeslot"]=0x1D6C0, -- ð›€
+ },
+ [0x1D6C1]={
+ ["category"]="sm",
+ ["description"]="MATHEMATICAL BOLD NABLA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x2207 },
+ ["unicodeslot"]=0x1D6C1, -- ð›
+ },
+ [0x1D6C2]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SMALL ALPHA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03B1 },
+ ["unicodeslot"]=0x1D6C2, -- ð›‚
+ },
+ [0x1D6C3]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SMALL BETA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03B2 },
+ ["unicodeslot"]=0x1D6C3, -- ð›ƒ
+ },
+ [0x1D6C4]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SMALL GAMMA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03B3 },
+ ["unicodeslot"]=0x1D6C4, -- ð›„
+ },
+ [0x1D6C5]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SMALL DELTA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03B4 },
+ ["unicodeslot"]=0x1D6C5, -- ð›…
+ },
+ [0x1D6C6]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SMALL EPSILON",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03B5 },
+ ["unicodeslot"]=0x1D6C6, -- ð›†
+ },
+ [0x1D6C7]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SMALL ZETA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03B6 },
+ ["unicodeslot"]=0x1D6C7, -- ð›‡
+ },
+ [0x1D6C8]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SMALL ETA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03B7 },
+ ["unicodeslot"]=0x1D6C8, -- ð›ˆ
+ },
+ [0x1D6C9]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SMALL THETA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03B8 },
+ ["unicodeslot"]=0x1D6C9, -- ð›‰
+ },
+ [0x1D6CA]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SMALL IOTA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03B9 },
+ ["unicodeslot"]=0x1D6CA, -- ð›Š
+ },
+ [0x1D6CB]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SMALL KAPPA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03BA },
+ ["unicodeslot"]=0x1D6CB, -- ð›‹
+ },
+ [0x1D6CC]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SMALL LAMDA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03BB },
+ ["unicodeslot"]=0x1D6CC, -- ð›Œ
+ },
+ [0x1D6CD]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SMALL MU",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03BC },
+ ["unicodeslot"]=0x1D6CD, -- ð›
+ },
+ [0x1D6CE]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SMALL NU",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03BD },
+ ["unicodeslot"]=0x1D6CE, -- ð›Ž
+ },
+ [0x1D6CF]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SMALL XI",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03BE },
+ ["unicodeslot"]=0x1D6CF, -- ð›
+ },
+ [0x1D6D0]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SMALL OMICRON",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03BF },
+ ["unicodeslot"]=0x1D6D0, -- ð›
+ },
+ [0x1D6D1]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SMALL PI",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03C0 },
+ ["unicodeslot"]=0x1D6D1, -- ð›‘
+ },
+ [0x1D6D2]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SMALL RHO",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03C1 },
+ ["unicodeslot"]=0x1D6D2, -- ð›’
+ },
+ [0x1D6D3]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SMALL FINAL SIGMA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03C2 },
+ ["unicodeslot"]=0x1D6D3, -- ð›“
+ },
+ [0x1D6D4]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SMALL SIGMA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03C3 },
+ ["unicodeslot"]=0x1D6D4, -- ð›”
+ },
+ [0x1D6D5]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SMALL TAU",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03C4 },
+ ["unicodeslot"]=0x1D6D5, -- ð›•
+ },
+ [0x1D6D6]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SMALL UPSILON",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03C5 },
+ ["unicodeslot"]=0x1D6D6, -- ð›–
+ },
+ [0x1D6D7]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SMALL PHI",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03C6 },
+ ["unicodeslot"]=0x1D6D7, -- ð›—
+ },
+ [0x1D6D8]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SMALL CHI",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03C7 },
+ ["unicodeslot"]=0x1D6D8, -- ð›˜
+ },
+ [0x1D6D9]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SMALL PSI",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03C8 },
+ ["unicodeslot"]=0x1D6D9, -- ð›™
+ },
+ [0x1D6DA]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SMALL OMEGA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03C9 },
+ ["unicodeslot"]=0x1D6DA, -- ð›š
+ },
+ [0x1D6DB]={
+ ["category"]="sm",
+ ["description"]="MATHEMATICAL BOLD PARTIAL DIFFERENTIAL",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x2202 },
+ ["unicodeslot"]=0x1D6DB, -- ð››
+ },
+ [0x1D6DC]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD EPSILON SYMBOL",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03F5 },
+ ["unicodeslot"]=0x1D6DC, -- ð›œ
+ },
+ [0x1D6DD]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD THETA SYMBOL",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03D1 },
+ ["unicodeslot"]=0x1D6DD, -- ð›
+ },
+ [0x1D6DE]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD KAPPA SYMBOL",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03F0 },
+ ["unicodeslot"]=0x1D6DE, -- ð›ž
+ },
+ [0x1D6DF]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD PHI SYMBOL",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03D5 },
+ ["unicodeslot"]=0x1D6DF, -- ð›Ÿ
+ },
+ [0x1D6E0]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD RHO SYMBOL",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03F1 },
+ ["unicodeslot"]=0x1D6E0, -- ð› 
+ },
+ [0x1D6E1]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD PI SYMBOL",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03D6 },
+ ["unicodeslot"]=0x1D6E1, -- ð›¡
+ },
+ [0x1D6E2]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL ITALIC CAPITAL ALPHA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0391 },
+ ["unicodeslot"]=0x1D6E2, -- ð›¢
+ },
+ [0x1D6E3]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL ITALIC CAPITAL BETA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0392 },
+ ["unicodeslot"]=0x1D6E3, -- ð›£
+ },
+ [0x1D6E4]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL ITALIC CAPITAL GAMMA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0393 },
+ ["unicodeslot"]=0x1D6E4, -- ð›¤
+ },
+ [0x1D6E5]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL ITALIC CAPITAL DELTA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0394 },
+ ["unicodeslot"]=0x1D6E5, -- ð›¥
+ },
+ [0x1D6E6]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL ITALIC CAPITAL EPSILON",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0395 },
+ ["unicodeslot"]=0x1D6E6, -- ð›¦
+ },
+ [0x1D6E7]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL ITALIC CAPITAL ZETA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0396 },
+ ["unicodeslot"]=0x1D6E7, -- ð›§
+ },
+ [0x1D6E8]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL ITALIC CAPITAL ETA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0397 },
+ ["unicodeslot"]=0x1D6E8, -- ð›¨
+ },
+ [0x1D6E9]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL ITALIC CAPITAL THETA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0398 },
+ ["unicodeslot"]=0x1D6E9, -- ð›©
+ },
+ [0x1D6EA]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL ITALIC CAPITAL IOTA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0399 },
+ ["unicodeslot"]=0x1D6EA, -- ð›ª
+ },
+ [0x1D6EB]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL ITALIC CAPITAL KAPPA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x039A },
+ ["unicodeslot"]=0x1D6EB, -- ð›«
+ },
+ [0x1D6EC]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL ITALIC CAPITAL LAMDA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x039B },
+ ["unicodeslot"]=0x1D6EC, -- ð›¬
+ },
+ [0x1D6ED]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL ITALIC CAPITAL MU",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x039C },
+ ["unicodeslot"]=0x1D6ED, -- ð›­
+ },
+ [0x1D6EE]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL ITALIC CAPITAL NU",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x039D },
+ ["unicodeslot"]=0x1D6EE, -- ð›®
+ },
+ [0x1D6EF]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL ITALIC CAPITAL XI",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x039E },
+ ["unicodeslot"]=0x1D6EF, -- ð›¯
+ },
+ [0x1D6F0]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL ITALIC CAPITAL OMICRON",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x039F },
+ ["unicodeslot"]=0x1D6F0, -- ð›°
+ },
+ [0x1D6F1]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL ITALIC CAPITAL PI",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03A0 },
+ ["unicodeslot"]=0x1D6F1, -- ð›±
+ },
+ [0x1D6F2]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL ITALIC CAPITAL RHO",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03A1 },
+ ["unicodeslot"]=0x1D6F2, -- ð›²
+ },
+ [0x1D6F3]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL ITALIC CAPITAL THETA SYMBOL",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03F4 },
+ ["unicodeslot"]=0x1D6F3, -- ð›³
+ },
+ [0x1D6F4]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL ITALIC CAPITAL SIGMA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03A3 },
+ ["unicodeslot"]=0x1D6F4, -- ð›´
+ },
+ [0x1D6F5]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL ITALIC CAPITAL TAU",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03A4 },
+ ["unicodeslot"]=0x1D6F5, -- ð›µ
+ },
+ [0x1D6F6]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL ITALIC CAPITAL UPSILON",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03A5 },
+ ["unicodeslot"]=0x1D6F6, -- ð›¶
+ },
+ [0x1D6F7]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL ITALIC CAPITAL PHI",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03A6 },
+ ["unicodeslot"]=0x1D6F7, -- ð›·
+ },
+ [0x1D6F8]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL ITALIC CAPITAL CHI",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03A7 },
+ ["unicodeslot"]=0x1D6F8, -- ð›¸
+ },
+ [0x1D6F9]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL ITALIC CAPITAL PSI",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03A8 },
+ ["unicodeslot"]=0x1D6F9, -- ð›¹
+ },
+ [0x1D6FA]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL ITALIC CAPITAL OMEGA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03A9 },
+ ["unicodeslot"]=0x1D6FA, -- ð›º
+ },
+ [0x1D6FB]={
+ ["category"]="sm",
+ ["description"]="MATHEMATICAL ITALIC NABLA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x2207 },
+ ["unicodeslot"]=0x1D6FB, -- ð›»
+ },
+ [0x1D6FC]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL ITALIC SMALL ALPHA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03B1 },
+ ["unicodeslot"]=0x1D6FC, -- ð›¼
+ },
+ [0x1D6FD]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL ITALIC SMALL BETA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03B2 },
+ ["unicodeslot"]=0x1D6FD, -- ð›½
+ },
+ [0x1D6FE]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL ITALIC SMALL GAMMA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03B3 },
+ ["unicodeslot"]=0x1D6FE, -- ð›¾
+ },
+ [0x1D6FF]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL ITALIC SMALL DELTA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03B4 },
+ ["unicodeslot"]=0x1D6FF, -- ð›¿
+ },
+ [0x1D700]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL ITALIC SMALL EPSILON",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03B5 },
+ ["unicodeslot"]=0x1D700, -- ðœ€
+ },
+ [0x1D701]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL ITALIC SMALL ZETA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03B6 },
+ ["unicodeslot"]=0x1D701, -- ðœ
+ },
+ [0x1D702]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL ITALIC SMALL ETA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03B7 },
+ ["unicodeslot"]=0x1D702, -- ðœ‚
+ },
+ [0x1D703]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL ITALIC SMALL THETA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03B8 },
+ ["unicodeslot"]=0x1D703, -- ðœƒ
+ },
+ [0x1D704]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL ITALIC SMALL IOTA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03B9 },
+ ["unicodeslot"]=0x1D704, -- ðœ„
+ },
+ [0x1D705]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL ITALIC SMALL KAPPA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03BA },
+ ["unicodeslot"]=0x1D705, -- ðœ…
+ },
+ [0x1D706]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL ITALIC SMALL LAMDA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03BB },
+ ["unicodeslot"]=0x1D706, -- ðœ†
+ },
+ [0x1D707]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL ITALIC SMALL MU",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03BC },
+ ["unicodeslot"]=0x1D707, -- ðœ‡
+ },
+ [0x1D708]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL ITALIC SMALL NU",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03BD },
+ ["unicodeslot"]=0x1D708, -- ðœˆ
+ },
+ [0x1D709]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL ITALIC SMALL XI",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03BE },
+ ["unicodeslot"]=0x1D709, -- ðœ‰
+ },
+ [0x1D70A]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL ITALIC SMALL OMICRON",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03BF },
+ ["unicodeslot"]=0x1D70A, -- ðœŠ
+ },
+ [0x1D70B]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL ITALIC SMALL PI",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03C0 },
+ ["unicodeslot"]=0x1D70B, -- ðœ‹
+ },
+ [0x1D70C]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL ITALIC SMALL RHO",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03C1 },
+ ["unicodeslot"]=0x1D70C, -- ðœŒ
+ },
+ [0x1D70D]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL ITALIC SMALL FINAL SIGMA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03C2 },
+ ["unicodeslot"]=0x1D70D, -- ðœ
+ },
+ [0x1D70E]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL ITALIC SMALL SIGMA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03C3 },
+ ["unicodeslot"]=0x1D70E, -- ðœŽ
+ },
+ [0x1D70F]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL ITALIC SMALL TAU",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03C4 },
+ ["unicodeslot"]=0x1D70F, -- ðœ
+ },
+ [0x1D710]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL ITALIC SMALL UPSILON",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03C5 },
+ ["unicodeslot"]=0x1D710, -- ðœ
+ },
+ [0x1D711]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL ITALIC SMALL PHI",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03C6 },
+ ["unicodeslot"]=0x1D711, -- ðœ‘
+ },
+ [0x1D712]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL ITALIC SMALL CHI",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03C7 },
+ ["unicodeslot"]=0x1D712, -- ðœ’
+ },
+ [0x1D713]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL ITALIC SMALL PSI",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03C8 },
+ ["unicodeslot"]=0x1D713, -- ðœ“
+ },
+ [0x1D714]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL ITALIC SMALL OMEGA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03C9 },
+ ["unicodeslot"]=0x1D714, -- ðœ”
+ },
+ [0x1D715]={
+ ["category"]="sm",
+ ["description"]="MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x2202 },
+ ["unicodeslot"]=0x1D715, -- ðœ•
+ },
+ [0x1D716]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL ITALIC EPSILON SYMBOL",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03F5 },
+ ["unicodeslot"]=0x1D716, -- ðœ–
+ },
+ [0x1D717]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL ITALIC THETA SYMBOL",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03D1 },
+ ["unicodeslot"]=0x1D717, -- ðœ—
+ },
+ [0x1D718]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL ITALIC KAPPA SYMBOL",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03F0 },
+ ["unicodeslot"]=0x1D718, -- ðœ˜
+ },
+ [0x1D719]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL ITALIC PHI SYMBOL",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03D5 },
+ ["unicodeslot"]=0x1D719, -- ðœ™
+ },
+ [0x1D71A]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL ITALIC RHO SYMBOL",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03F1 },
+ ["unicodeslot"]=0x1D71A, -- ðœš
+ },
+ [0x1D71B]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL ITALIC PI SYMBOL",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03D6 },
+ ["unicodeslot"]=0x1D71B, -- ðœ›
+ },
+ [0x1D71C]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD ITALIC CAPITAL ALPHA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0391 },
+ ["unicodeslot"]=0x1D71C, -- ðœœ
+ },
+ [0x1D71D]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD ITALIC CAPITAL BETA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0392 },
+ ["unicodeslot"]=0x1D71D, -- ðœ
+ },
+ [0x1D71E]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD ITALIC CAPITAL GAMMA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0393 },
+ ["unicodeslot"]=0x1D71E, -- ðœž
+ },
+ [0x1D71F]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD ITALIC CAPITAL DELTA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0394 },
+ ["unicodeslot"]=0x1D71F, -- ðœŸ
+ },
+ [0x1D720]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD ITALIC CAPITAL EPSILON",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0395 },
+ ["unicodeslot"]=0x1D720, -- ðœ 
+ },
+ [0x1D721]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD ITALIC CAPITAL ZETA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0396 },
+ ["unicodeslot"]=0x1D721, -- ðœ¡
+ },
+ [0x1D722]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD ITALIC CAPITAL ETA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0397 },
+ ["unicodeslot"]=0x1D722, -- ðœ¢
+ },
+ [0x1D723]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD ITALIC CAPITAL THETA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0398 },
+ ["unicodeslot"]=0x1D723, -- ðœ£
+ },
+ [0x1D724]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD ITALIC CAPITAL IOTA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0399 },
+ ["unicodeslot"]=0x1D724, -- ðœ¤
+ },
+ [0x1D725]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD ITALIC CAPITAL KAPPA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x039A },
+ ["unicodeslot"]=0x1D725, -- ðœ¥
+ },
+ [0x1D726]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD ITALIC CAPITAL LAMDA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x039B },
+ ["unicodeslot"]=0x1D726, -- ðœ¦
+ },
+ [0x1D727]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD ITALIC CAPITAL MU",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x039C },
+ ["unicodeslot"]=0x1D727, -- ðœ§
+ },
+ [0x1D728]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD ITALIC CAPITAL NU",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x039D },
+ ["unicodeslot"]=0x1D728, -- ðœ¨
+ },
+ [0x1D729]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD ITALIC CAPITAL XI",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x039E },
+ ["unicodeslot"]=0x1D729, -- ðœ©
+ },
+ [0x1D72A]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD ITALIC CAPITAL OMICRON",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x039F },
+ ["unicodeslot"]=0x1D72A, -- ðœª
+ },
+ [0x1D72B]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD ITALIC CAPITAL PI",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03A0 },
+ ["unicodeslot"]=0x1D72B, -- ðœ«
+ },
+ [0x1D72C]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD ITALIC CAPITAL RHO",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03A1 },
+ ["unicodeslot"]=0x1D72C, -- ðœ¬
+ },
+ [0x1D72D]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD ITALIC CAPITAL THETA SYMBOL",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03F4 },
+ ["unicodeslot"]=0x1D72D, -- ðœ­
+ },
+ [0x1D72E]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD ITALIC CAPITAL SIGMA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03A3 },
+ ["unicodeslot"]=0x1D72E, -- ðœ®
+ },
+ [0x1D72F]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD ITALIC CAPITAL TAU",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03A4 },
+ ["unicodeslot"]=0x1D72F, -- ðœ¯
+ },
+ [0x1D730]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD ITALIC CAPITAL UPSILON",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03A5 },
+ ["unicodeslot"]=0x1D730, -- ðœ°
+ },
+ [0x1D731]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD ITALIC CAPITAL PHI",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03A6 },
+ ["unicodeslot"]=0x1D731, -- ðœ±
+ },
+ [0x1D732]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD ITALIC CAPITAL CHI",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03A7 },
+ ["unicodeslot"]=0x1D732, -- ðœ²
+ },
+ [0x1D733]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD ITALIC CAPITAL PSI",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03A8 },
+ ["unicodeslot"]=0x1D733, -- ðœ³
+ },
+ [0x1D734]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD ITALIC CAPITAL OMEGA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03A9 },
+ ["unicodeslot"]=0x1D734, -- ðœ´
+ },
+ [0x1D735]={
+ ["category"]="sm",
+ ["description"]="MATHEMATICAL BOLD ITALIC NABLA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x2207 },
+ ["unicodeslot"]=0x1D735, -- ðœµ
+ },
+ [0x1D736]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD ITALIC SMALL ALPHA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03B1 },
+ ["unicodeslot"]=0x1D736, -- ðœ¶
+ },
+ [0x1D737]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD ITALIC SMALL BETA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03B2 },
+ ["unicodeslot"]=0x1D737, -- ðœ·
+ },
+ [0x1D738]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD ITALIC SMALL GAMMA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03B3 },
+ ["unicodeslot"]=0x1D738, -- ðœ¸
+ },
+ [0x1D739]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD ITALIC SMALL DELTA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03B4 },
+ ["unicodeslot"]=0x1D739, -- ðœ¹
+ },
+ [0x1D73A]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD ITALIC SMALL EPSILON",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03B5 },
+ ["unicodeslot"]=0x1D73A, -- ðœº
+ },
+ [0x1D73B]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD ITALIC SMALL ZETA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03B6 },
+ ["unicodeslot"]=0x1D73B, -- ðœ»
+ },
+ [0x1D73C]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD ITALIC SMALL ETA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03B7 },
+ ["unicodeslot"]=0x1D73C, -- ðœ¼
+ },
+ [0x1D73D]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD ITALIC SMALL THETA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03B8 },
+ ["unicodeslot"]=0x1D73D, -- ðœ½
+ },
+ [0x1D73E]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD ITALIC SMALL IOTA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03B9 },
+ ["unicodeslot"]=0x1D73E, -- ðœ¾
+ },
+ [0x1D73F]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD ITALIC SMALL KAPPA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03BA },
+ ["unicodeslot"]=0x1D73F, -- ðœ¿
+ },
+ [0x1D740]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD ITALIC SMALL LAMDA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03BB },
+ ["unicodeslot"]=0x1D740, -- ð€
+ },
+ [0x1D741]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD ITALIC SMALL MU",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03BC },
+ ["unicodeslot"]=0x1D741, -- ð
+ },
+ [0x1D742]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD ITALIC SMALL NU",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03BD },
+ ["unicodeslot"]=0x1D742, -- ð‚
+ },
+ [0x1D743]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD ITALIC SMALL XI",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03BE },
+ ["unicodeslot"]=0x1D743, -- ðƒ
+ },
+ [0x1D744]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD ITALIC SMALL OMICRON",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03BF },
+ ["unicodeslot"]=0x1D744, -- ð„
+ },
+ [0x1D745]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD ITALIC SMALL PI",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03C0 },
+ ["unicodeslot"]=0x1D745, -- ð…
+ },
+ [0x1D746]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD ITALIC SMALL RHO",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03C1 },
+ ["unicodeslot"]=0x1D746, -- ð†
+ },
+ [0x1D747]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD ITALIC SMALL FINAL SIGMA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03C2 },
+ ["unicodeslot"]=0x1D747, -- ð‡
+ },
+ [0x1D748]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD ITALIC SMALL SIGMA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03C3 },
+ ["unicodeslot"]=0x1D748, -- ðˆ
+ },
+ [0x1D749]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD ITALIC SMALL TAU",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03C4 },
+ ["unicodeslot"]=0x1D749, -- ð‰
+ },
+ [0x1D74A]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD ITALIC SMALL UPSILON",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03C5 },
+ ["unicodeslot"]=0x1D74A, -- ðŠ
+ },
+ [0x1D74B]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD ITALIC SMALL PHI",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03C6 },
+ ["unicodeslot"]=0x1D74B, -- ð‹
+ },
+ [0x1D74C]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD ITALIC SMALL CHI",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03C7 },
+ ["unicodeslot"]=0x1D74C, -- ðŒ
+ },
+ [0x1D74D]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD ITALIC SMALL PSI",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03C8 },
+ ["unicodeslot"]=0x1D74D, -- ð
+ },
+ [0x1D74E]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD ITALIC SMALL OMEGA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03C9 },
+ ["unicodeslot"]=0x1D74E, -- ðŽ
+ },
+ [0x1D74F]={
+ ["category"]="sm",
+ ["description"]="MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x2202 },
+ ["unicodeslot"]=0x1D74F, -- ð
+ },
+ [0x1D750]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD ITALIC EPSILON SYMBOL",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03F5 },
+ ["unicodeslot"]=0x1D750, -- ð
+ },
+ [0x1D751]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD ITALIC THETA SYMBOL",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03D1 },
+ ["unicodeslot"]=0x1D751, -- ð‘
+ },
+ [0x1D752]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD ITALIC KAPPA SYMBOL",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03F0 },
+ ["unicodeslot"]=0x1D752, -- ð’
+ },
+ [0x1D753]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD ITALIC PHI SYMBOL",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03D5 },
+ ["unicodeslot"]=0x1D753, -- ð“
+ },
+ [0x1D754]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD ITALIC RHO SYMBOL",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03F1 },
+ ["unicodeslot"]=0x1D754, -- ð”
+ },
+ [0x1D755]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD ITALIC PI SYMBOL",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03D6 },
+ ["unicodeslot"]=0x1D755, -- ð•
+ },
+ [0x1D756]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD CAPITAL ALPHA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0391 },
+ ["unicodeslot"]=0x1D756, -- ð–
+ },
+ [0x1D757]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD CAPITAL BETA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0392 },
+ ["unicodeslot"]=0x1D757, -- ð—
+ },
+ [0x1D758]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD CAPITAL GAMMA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0393 },
+ ["unicodeslot"]=0x1D758, -- ð˜
+ },
+ [0x1D759]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD CAPITAL DELTA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0394 },
+ ["unicodeslot"]=0x1D759, -- ð™
+ },
+ [0x1D75A]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD CAPITAL EPSILON",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0395 },
+ ["unicodeslot"]=0x1D75A, -- ðš
+ },
+ [0x1D75B]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD CAPITAL ZETA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0396 },
+ ["unicodeslot"]=0x1D75B, -- ð›
+ },
+ [0x1D75C]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD CAPITAL ETA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0397 },
+ ["unicodeslot"]=0x1D75C, -- ðœ
+ },
+ [0x1D75D]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0398 },
+ ["unicodeslot"]=0x1D75D, -- ð
+ },
+ [0x1D75E]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD CAPITAL IOTA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0399 },
+ ["unicodeslot"]=0x1D75E, -- ðž
+ },
+ [0x1D75F]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD CAPITAL KAPPA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x039A },
+ ["unicodeslot"]=0x1D75F, -- ðŸ
+ },
+ [0x1D760]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD CAPITAL LAMDA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x039B },
+ ["unicodeslot"]=0x1D760, -- ð 
+ },
+ [0x1D761]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD CAPITAL MU",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x039C },
+ ["unicodeslot"]=0x1D761, -- ð¡
+ },
+ [0x1D762]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD CAPITAL NU",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x039D },
+ ["unicodeslot"]=0x1D762, -- ð¢
+ },
+ [0x1D763]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD CAPITAL XI",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x039E },
+ ["unicodeslot"]=0x1D763, -- ð£
+ },
+ [0x1D764]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD CAPITAL OMICRON",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x039F },
+ ["unicodeslot"]=0x1D764, -- ð¤
+ },
+ [0x1D765]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD CAPITAL PI",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03A0 },
+ ["unicodeslot"]=0x1D765, -- ð¥
+ },
+ [0x1D766]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD CAPITAL RHO",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03A1 },
+ ["unicodeslot"]=0x1D766, -- ð¦
+ },
+ [0x1D767]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA SYMBOL",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03F4 },
+ ["unicodeslot"]=0x1D767, -- ð§
+ },
+ [0x1D768]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD CAPITAL SIGMA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03A3 },
+ ["unicodeslot"]=0x1D768, -- ð¨
+ },
+ [0x1D769]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD CAPITAL TAU",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03A4 },
+ ["unicodeslot"]=0x1D769, -- ð©
+ },
+ [0x1D76A]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD CAPITAL UPSILON",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03A5 },
+ ["unicodeslot"]=0x1D76A, -- ðª
+ },
+ [0x1D76B]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD CAPITAL PHI",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03A6 },
+ ["unicodeslot"]=0x1D76B, -- ð«
+ },
+ [0x1D76C]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD CAPITAL CHI",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03A7 },
+ ["unicodeslot"]=0x1D76C, -- ð¬
+ },
+ [0x1D76D]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD CAPITAL PSI",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03A8 },
+ ["unicodeslot"]=0x1D76D, -- ð­
+ },
+ [0x1D76E]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03A9 },
+ ["unicodeslot"]=0x1D76E, -- ð®
+ },
+ [0x1D76F]={
+ ["category"]="sm",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD NABLA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x2207 },
+ ["unicodeslot"]=0x1D76F, -- ð¯
+ },
+ [0x1D770]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03B1 },
+ ["unicodeslot"]=0x1D770, -- ð°
+ },
+ [0x1D771]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD SMALL BETA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03B2 },
+ ["unicodeslot"]=0x1D771, -- ð±
+ },
+ [0x1D772]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD SMALL GAMMA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03B3 },
+ ["unicodeslot"]=0x1D772, -- ð²
+ },
+ [0x1D773]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD SMALL DELTA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03B4 },
+ ["unicodeslot"]=0x1D773, -- ð³
+ },
+ [0x1D774]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD SMALL EPSILON",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03B5 },
+ ["unicodeslot"]=0x1D774, -- ð´
+ },
+ [0x1D775]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD SMALL ZETA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03B6 },
+ ["unicodeslot"]=0x1D775, -- ðµ
+ },
+ [0x1D776]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD SMALL ETA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03B7 },
+ ["unicodeslot"]=0x1D776, -- ð¶
+ },
+ [0x1D777]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD SMALL THETA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03B8 },
+ ["unicodeslot"]=0x1D777, -- ð·
+ },
+ [0x1D778]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD SMALL IOTA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03B9 },
+ ["unicodeslot"]=0x1D778, -- ð¸
+ },
+ [0x1D779]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD SMALL KAPPA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03BA },
+ ["unicodeslot"]=0x1D779, -- ð¹
+ },
+ [0x1D77A]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD SMALL LAMDA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03BB },
+ ["unicodeslot"]=0x1D77A, -- ðº
+ },
+ [0x1D77B]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD SMALL MU",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03BC },
+ ["unicodeslot"]=0x1D77B, -- ð»
+ },
+ [0x1D77C]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD SMALL NU",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03BD },
+ ["unicodeslot"]=0x1D77C, -- ð¼
+ },
+ [0x1D77D]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD SMALL XI",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03BE },
+ ["unicodeslot"]=0x1D77D, -- ð½
+ },
+ [0x1D77E]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD SMALL OMICRON",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03BF },
+ ["unicodeslot"]=0x1D77E, -- ð¾
+ },
+ [0x1D77F]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD SMALL PI",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03C0 },
+ ["unicodeslot"]=0x1D77F, -- ð¿
+ },
+ [0x1D780]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD SMALL RHO",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03C1 },
+ ["unicodeslot"]=0x1D780, -- ðž€
+ },
+ [0x1D781]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD SMALL FINAL SIGMA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03C2 },
+ ["unicodeslot"]=0x1D781, -- ðž
+ },
+ [0x1D782]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD SMALL SIGMA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03C3 },
+ ["unicodeslot"]=0x1D782, -- ðž‚
+ },
+ [0x1D783]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD SMALL TAU",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03C4 },
+ ["unicodeslot"]=0x1D783, -- ðžƒ
+ },
+ [0x1D784]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD SMALL UPSILON",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03C5 },
+ ["unicodeslot"]=0x1D784, -- ðž„
+ },
+ [0x1D785]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD SMALL PHI",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03C6 },
+ ["unicodeslot"]=0x1D785, -- ðž…
+ },
+ [0x1D786]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD SMALL CHI",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03C7 },
+ ["unicodeslot"]=0x1D786, -- ðž†
+ },
+ [0x1D787]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD SMALL PSI",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03C8 },
+ ["unicodeslot"]=0x1D787, -- ðž‡
+ },
+ [0x1D788]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03C9 },
+ ["unicodeslot"]=0x1D788, -- ðžˆ
+ },
+ [0x1D789]={
+ ["category"]="sm",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x2202 },
+ ["unicodeslot"]=0x1D789, -- ðž‰
+ },
+ [0x1D78A]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03F5 },
+ ["unicodeslot"]=0x1D78A, -- ðžŠ
+ },
+ [0x1D78B]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD THETA SYMBOL",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03D1 },
+ ["unicodeslot"]=0x1D78B, -- ðž‹
+ },
+ [0x1D78C]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD KAPPA SYMBOL",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03F0 },
+ ["unicodeslot"]=0x1D78C, -- ðžŒ
+ },
+ [0x1D78D]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD PHI SYMBOL",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03D5 },
+ ["unicodeslot"]=0x1D78D, -- ðž
+ },
+ [0x1D78E]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD RHO SYMBOL",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03F1 },
+ ["unicodeslot"]=0x1D78E, -- ðžŽ
+ },
+ [0x1D78F]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD PI SYMBOL",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03D6 },
+ ["unicodeslot"]=0x1D78F, -- ðž
+ },
+ [0x1D790]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ALPHA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0391 },
+ ["unicodeslot"]=0x1D790, -- ðž
+ },
+ [0x1D791]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL BETA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0392 },
+ ["unicodeslot"]=0x1D791, -- ðž‘
+ },
+ [0x1D792]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL GAMMA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0393 },
+ ["unicodeslot"]=0x1D792, -- ðž’
+ },
+ [0x1D793]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL DELTA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0394 },
+ ["unicodeslot"]=0x1D793, -- ðž“
+ },
+ [0x1D794]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL EPSILON",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0395 },
+ ["unicodeslot"]=0x1D794, -- ðž”
+ },
+ [0x1D795]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ZETA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0396 },
+ ["unicodeslot"]=0x1D795, -- ðž•
+ },
+ [0x1D796]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ETA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0397 },
+ ["unicodeslot"]=0x1D796, -- ðž–
+ },
+ [0x1D797]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0398 },
+ ["unicodeslot"]=0x1D797, -- ðž—
+ },
+ [0x1D798]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL IOTA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x0399 },
+ ["unicodeslot"]=0x1D798, -- ðž˜
+ },
+ [0x1D799]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL KAPPA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x039A },
+ ["unicodeslot"]=0x1D799, -- ðž™
+ },
+ [0x1D79A]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL LAMDA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x039B },
+ ["unicodeslot"]=0x1D79A, -- ðžš
+ },
+ [0x1D79B]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL MU",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x039C },
+ ["unicodeslot"]=0x1D79B, -- ðž›
+ },
+ [0x1D79C]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL NU",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x039D },
+ ["unicodeslot"]=0x1D79C, -- ðžœ
+ },
+ [0x1D79D]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL XI",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x039E },
+ ["unicodeslot"]=0x1D79D, -- ðž
+ },
+ [0x1D79E]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMICRON",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x039F },
+ ["unicodeslot"]=0x1D79E, -- ðžž
+ },
+ [0x1D79F]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PI",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03A0 },
+ ["unicodeslot"]=0x1D79F, -- ðžŸ
+ },
+ [0x1D7A0]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL RHO",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03A1 },
+ ["unicodeslot"]=0x1D7A0, -- ðž 
+ },
+ [0x1D7A1]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA SYMBOL",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03F4 },
+ ["unicodeslot"]=0x1D7A1, -- ðž¡
+ },
+ [0x1D7A2]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL SIGMA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03A3 },
+ ["unicodeslot"]=0x1D7A2, -- ðž¢
+ },
+ [0x1D7A3]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL TAU",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03A4 },
+ ["unicodeslot"]=0x1D7A3, -- ðž£
+ },
+ [0x1D7A4]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL UPSILON",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03A5 },
+ ["unicodeslot"]=0x1D7A4, -- ðž¤
+ },
+ [0x1D7A5]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PHI",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03A6 },
+ ["unicodeslot"]=0x1D7A5, -- ðž¥
+ },
+ [0x1D7A6]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL CHI",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03A7 },
+ ["unicodeslot"]=0x1D7A6, -- ðž¦
+ },
+ [0x1D7A7]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PSI",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03A8 },
+ ["unicodeslot"]=0x1D7A7, -- ðž§
+ },
+ [0x1D7A8]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03A9 },
+ ["unicodeslot"]=0x1D7A8, -- ðž¨
+ },
+ [0x1D7A9]={
+ ["category"]="sm",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x2207 },
+ ["unicodeslot"]=0x1D7A9, -- ðž©
+ },
+ [0x1D7AA]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03B1 },
+ ["unicodeslot"]=0x1D7AA, -- ðžª
+ },
+ [0x1D7AB]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL BETA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03B2 },
+ ["unicodeslot"]=0x1D7AB, -- ðž«
+ },
+ [0x1D7AC]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL GAMMA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03B3 },
+ ["unicodeslot"]=0x1D7AC, -- ðž¬
+ },
+ [0x1D7AD]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL DELTA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03B4 },
+ ["unicodeslot"]=0x1D7AD, -- ðž­
+ },
+ [0x1D7AE]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL EPSILON",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03B5 },
+ ["unicodeslot"]=0x1D7AE, -- ðž®
+ },
+ [0x1D7AF]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ZETA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03B6 },
+ ["unicodeslot"]=0x1D7AF, -- ðž¯
+ },
+ [0x1D7B0]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ETA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03B7 },
+ ["unicodeslot"]=0x1D7B0, -- ðž°
+ },
+ [0x1D7B1]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL THETA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03B8 },
+ ["unicodeslot"]=0x1D7B1, -- ðž±
+ },
+ [0x1D7B2]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL IOTA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03B9 },
+ ["unicodeslot"]=0x1D7B2, -- ðž²
+ },
+ [0x1D7B3]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL KAPPA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03BA },
+ ["unicodeslot"]=0x1D7B3, -- ðž³
+ },
+ [0x1D7B4]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL LAMDA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03BB },
+ ["unicodeslot"]=0x1D7B4, -- ðž´
+ },
+ [0x1D7B5]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL MU",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03BC },
+ ["unicodeslot"]=0x1D7B5, -- ðžµ
+ },
+ [0x1D7B6]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL NU",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03BD },
+ ["unicodeslot"]=0x1D7B6, -- ðž¶
+ },
+ [0x1D7B7]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL XI",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03BE },
+ ["unicodeslot"]=0x1D7B7, -- ðž·
+ },
+ [0x1D7B8]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMICRON",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03BF },
+ ["unicodeslot"]=0x1D7B8, -- ðž¸
+ },
+ [0x1D7B9]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PI",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03C0 },
+ ["unicodeslot"]=0x1D7B9, -- ðž¹
+ },
+ [0x1D7BA]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL RHO",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03C1 },
+ ["unicodeslot"]=0x1D7BA, -- ðžº
+ },
+ [0x1D7BB]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL FINAL SIGMA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03C2 },
+ ["unicodeslot"]=0x1D7BB, -- ðž»
+ },
+ [0x1D7BC]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL SIGMA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03C3 },
+ ["unicodeslot"]=0x1D7BC, -- ðž¼
+ },
+ [0x1D7BD]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL TAU",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03C4 },
+ ["unicodeslot"]=0x1D7BD, -- ðž½
+ },
+ [0x1D7BE]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL UPSILON",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03C5 },
+ ["unicodeslot"]=0x1D7BE, -- ðž¾
+ },
+ [0x1D7BF]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PHI",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03C6 },
+ ["unicodeslot"]=0x1D7BF, -- ðž¿
+ },
+ [0x1D7C0]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL CHI",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03C7 },
+ ["unicodeslot"]=0x1D7C0, -- ðŸ€
+ },
+ [0x1D7C1]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PSI",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03C8 },
+ ["unicodeslot"]=0x1D7C1, -- ðŸ
+ },
+ [0x1D7C2]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03C9 },
+ ["unicodeslot"]=0x1D7C2, -- ðŸ‚
+ },
+ [0x1D7C3]={
+ ["category"]="sm",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x2202 },
+ ["unicodeslot"]=0x1D7C3, -- ðŸƒ
+ },
+ [0x1D7C4]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03F5 },
+ ["unicodeslot"]=0x1D7C4, -- ðŸ„
+ },
+ [0x1D7C5]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC THETA SYMBOL",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03D1 },
+ ["unicodeslot"]=0x1D7C5, -- ðŸ…
+ },
+ [0x1D7C6]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC KAPPA SYMBOL",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03F0 },
+ ["unicodeslot"]=0x1D7C6, -- ðŸ†
+ },
+ [0x1D7C7]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC PHI SYMBOL",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03D5 },
+ ["unicodeslot"]=0x1D7C7, -- ðŸ‡
+ },
+ [0x1D7C8]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC RHO SYMBOL",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03F1 },
+ ["unicodeslot"]=0x1D7C8, -- ðŸˆ
+ },
+ [0x1D7C9]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03D6 },
+ ["unicodeslot"]=0x1D7C9, -- ðŸ‰
+ },
+ [0x1D7CA]={
+ ["category"]="lu",
+ ["description"]="MATHEMATICAL BOLD CAPITAL DIGAMMA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03DC },
+ ["unicodeslot"]=0x1D7CA, -- ðŸŠ
+ },
+ [0x1D7CB]={
+ ["category"]="ll",
+ ["description"]="MATHEMATICAL BOLD SMALL DIGAMMA",
+ ["linebreak"]="al",
+ ["specials"]={ "font", 0x03DD },
+ ["unicodeslot"]=0x1D7CB, -- ðŸ‹
+ },
+ [0x1D7CE]={
+ ["category"]="nd",
+ ["description"]="MATHEMATICAL BOLD DIGIT ZERO",
+ ["linebreak"]="nu",
+ ["specials"]={ "font", 0x0030 },
+ ["unicodeslot"]=0x1D7CE, -- ðŸŽ
+ },
+ [0x1D7CF]={
+ ["category"]="nd",
+ ["description"]="MATHEMATICAL BOLD DIGIT ONE",
+ ["linebreak"]="nu",
+ ["specials"]={ "font", 0x0031 },
+ ["unicodeslot"]=0x1D7CF, -- ðŸ
+ },
+ [0x1D7D0]={
+ ["category"]="nd",
+ ["description"]="MATHEMATICAL BOLD DIGIT TWO",
+ ["linebreak"]="nu",
+ ["specials"]={ "font", 0x0032 },
+ ["unicodeslot"]=0x1D7D0, -- ðŸ
+ },
+ [0x1D7D1]={
+ ["category"]="nd",
+ ["description"]="MATHEMATICAL BOLD DIGIT THREE",
+ ["linebreak"]="nu",
+ ["specials"]={ "font", 0x0033 },
+ ["unicodeslot"]=0x1D7D1, -- ðŸ‘
+ },
+ [0x1D7D2]={
+ ["category"]="nd",
+ ["description"]="MATHEMATICAL BOLD DIGIT FOUR",
+ ["linebreak"]="nu",
+ ["specials"]={ "font", 0x0034 },
+ ["unicodeslot"]=0x1D7D2, -- ðŸ’
+ },
+ [0x1D7D3]={
+ ["category"]="nd",
+ ["description"]="MATHEMATICAL BOLD DIGIT FIVE",
+ ["linebreak"]="nu",
+ ["specials"]={ "font", 0x0035 },
+ ["unicodeslot"]=0x1D7D3, -- ðŸ“
+ },
+ [0x1D7D4]={
+ ["category"]="nd",
+ ["description"]="MATHEMATICAL BOLD DIGIT SIX",
+ ["linebreak"]="nu",
+ ["specials"]={ "font", 0x0036 },
+ ["unicodeslot"]=0x1D7D4, -- ðŸ”
+ },
+ [0x1D7D5]={
+ ["category"]="nd",
+ ["description"]="MATHEMATICAL BOLD DIGIT SEVEN",
+ ["linebreak"]="nu",
+ ["specials"]={ "font", 0x0037 },
+ ["unicodeslot"]=0x1D7D5, -- ðŸ•
+ },
+ [0x1D7D6]={
+ ["category"]="nd",
+ ["description"]="MATHEMATICAL BOLD DIGIT EIGHT",
+ ["linebreak"]="nu",
+ ["specials"]={ "font", 0x0038 },
+ ["unicodeslot"]=0x1D7D6, -- ðŸ–
+ },
+ [0x1D7D7]={
+ ["category"]="nd",
+ ["description"]="MATHEMATICAL BOLD DIGIT NINE",
+ ["linebreak"]="nu",
+ ["specials"]={ "font", 0x0039 },
+ ["unicodeslot"]=0x1D7D7, -- ðŸ—
+ },
+ [0x1D7D8]={
+ ["category"]="nd",
+ ["description"]="MATHEMATICAL DOUBLE-STRUCK DIGIT ZERO",
+ ["linebreak"]="nu",
+ ["specials"]={ "font", 0x0030 },
+ ["unicodeslot"]=0x1D7D8, -- ðŸ˜
+ },
+ [0x1D7D9]={
+ ["category"]="nd",
+ ["description"]="MATHEMATICAL DOUBLE-STRUCK DIGIT ONE",
+ ["linebreak"]="nu",
+ ["specials"]={ "font", 0x0031 },
+ ["unicodeslot"]=0x1D7D9, -- ðŸ™
+ },
+ [0x1D7DA]={
+ ["category"]="nd",
+ ["description"]="MATHEMATICAL DOUBLE-STRUCK DIGIT TWO",
+ ["linebreak"]="nu",
+ ["specials"]={ "font", 0x0032 },
+ ["unicodeslot"]=0x1D7DA, -- ðŸš
+ },
+ [0x1D7DB]={
+ ["category"]="nd",
+ ["description"]="MATHEMATICAL DOUBLE-STRUCK DIGIT THREE",
+ ["linebreak"]="nu",
+ ["specials"]={ "font", 0x0033 },
+ ["unicodeslot"]=0x1D7DB, -- ðŸ›
+ },
+ [0x1D7DC]={
+ ["category"]="nd",
+ ["description"]="MATHEMATICAL DOUBLE-STRUCK DIGIT FOUR",
+ ["linebreak"]="nu",
+ ["specials"]={ "font", 0x0034 },
+ ["unicodeslot"]=0x1D7DC, -- ðŸœ
+ },
+ [0x1D7DD]={
+ ["category"]="nd",
+ ["description"]="MATHEMATICAL DOUBLE-STRUCK DIGIT FIVE",
+ ["linebreak"]="nu",
+ ["specials"]={ "font", 0x0035 },
+ ["unicodeslot"]=0x1D7DD, -- ðŸ
+ },
+ [0x1D7DE]={
+ ["category"]="nd",
+ ["description"]="MATHEMATICAL DOUBLE-STRUCK DIGIT SIX",
+ ["linebreak"]="nu",
+ ["specials"]={ "font", 0x0036 },
+ ["unicodeslot"]=0x1D7DE, -- ðŸž
+ },
+ [0x1D7DF]={
+ ["category"]="nd",
+ ["description"]="MATHEMATICAL DOUBLE-STRUCK DIGIT SEVEN",
+ ["linebreak"]="nu",
+ ["specials"]={ "font", 0x0037 },
+ ["unicodeslot"]=0x1D7DF, -- ðŸŸ
+ },
+ [0x1D7E0]={
+ ["category"]="nd",
+ ["description"]="MATHEMATICAL DOUBLE-STRUCK DIGIT EIGHT",
+ ["linebreak"]="nu",
+ ["specials"]={ "font", 0x0038 },
+ ["unicodeslot"]=0x1D7E0, -- ðŸ 
+ },
+ [0x1D7E1]={
+ ["category"]="nd",
+ ["description"]="MATHEMATICAL DOUBLE-STRUCK DIGIT NINE",
+ ["linebreak"]="nu",
+ ["specials"]={ "font", 0x0039 },
+ ["unicodeslot"]=0x1D7E1, -- ðŸ¡
+ },
+ [0x1D7E2]={
+ ["category"]="nd",
+ ["description"]="MATHEMATICAL SANS-SERIF DIGIT ZERO",
+ ["linebreak"]="nu",
+ ["specials"]={ "font", 0x0030 },
+ ["unicodeslot"]=0x1D7E2, -- ðŸ¢
+ },
+ [0x1D7E3]={
+ ["category"]="nd",
+ ["description"]="MATHEMATICAL SANS-SERIF DIGIT ONE",
+ ["linebreak"]="nu",
+ ["specials"]={ "font", 0x0031 },
+ ["unicodeslot"]=0x1D7E3, -- ðŸ£
+ },
+ [0x1D7E4]={
+ ["category"]="nd",
+ ["description"]="MATHEMATICAL SANS-SERIF DIGIT TWO",
+ ["linebreak"]="nu",
+ ["specials"]={ "font", 0x0032 },
+ ["unicodeslot"]=0x1D7E4, -- ðŸ¤
+ },
+ [0x1D7E5]={
+ ["category"]="nd",
+ ["description"]="MATHEMATICAL SANS-SERIF DIGIT THREE",
+ ["linebreak"]="nu",
+ ["specials"]={ "font", 0x0033 },
+ ["unicodeslot"]=0x1D7E5, -- ðŸ¥
+ },
+ [0x1D7E6]={
+ ["category"]="nd",
+ ["description"]="MATHEMATICAL SANS-SERIF DIGIT FOUR",
+ ["linebreak"]="nu",
+ ["specials"]={ "font", 0x0034 },
+ ["unicodeslot"]=0x1D7E6, -- ðŸ¦
+ },
+ [0x1D7E7]={
+ ["category"]="nd",
+ ["description"]="MATHEMATICAL SANS-SERIF DIGIT FIVE",
+ ["linebreak"]="nu",
+ ["specials"]={ "font", 0x0035 },
+ ["unicodeslot"]=0x1D7E7, -- ðŸ§
+ },
+ [0x1D7E8]={
+ ["category"]="nd",
+ ["description"]="MATHEMATICAL SANS-SERIF DIGIT SIX",
+ ["linebreak"]="nu",
+ ["specials"]={ "font", 0x0036 },
+ ["unicodeslot"]=0x1D7E8, -- ðŸ¨
+ },
+ [0x1D7E9]={
+ ["category"]="nd",
+ ["description"]="MATHEMATICAL SANS-SERIF DIGIT SEVEN",
+ ["linebreak"]="nu",
+ ["specials"]={ "font", 0x0037 },
+ ["unicodeslot"]=0x1D7E9, -- ðŸ©
+ },
+ [0x1D7EA]={
+ ["category"]="nd",
+ ["description"]="MATHEMATICAL SANS-SERIF DIGIT EIGHT",
+ ["linebreak"]="nu",
+ ["specials"]={ "font", 0x0038 },
+ ["unicodeslot"]=0x1D7EA, -- ðŸª
+ },
+ [0x1D7EB]={
+ ["category"]="nd",
+ ["description"]="MATHEMATICAL SANS-SERIF DIGIT NINE",
+ ["linebreak"]="nu",
+ ["specials"]={ "font", 0x0039 },
+ ["unicodeslot"]=0x1D7EB, -- ðŸ«
+ },
+ [0x1D7EC]={
+ ["category"]="nd",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD DIGIT ZERO",
+ ["linebreak"]="nu",
+ ["specials"]={ "font", 0x0030 },
+ ["unicodeslot"]=0x1D7EC, -- ðŸ¬
+ },
+ [0x1D7ED]={
+ ["category"]="nd",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD DIGIT ONE",
+ ["linebreak"]="nu",
+ ["specials"]={ "font", 0x0031 },
+ ["unicodeslot"]=0x1D7ED, -- ðŸ­
+ },
+ [0x1D7EE]={
+ ["category"]="nd",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD DIGIT TWO",
+ ["linebreak"]="nu",
+ ["specials"]={ "font", 0x0032 },
+ ["unicodeslot"]=0x1D7EE, -- ðŸ®
+ },
+ [0x1D7EF]={
+ ["category"]="nd",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD DIGIT THREE",
+ ["linebreak"]="nu",
+ ["specials"]={ "font", 0x0033 },
+ ["unicodeslot"]=0x1D7EF, -- ðŸ¯
+ },
+ [0x1D7F0]={
+ ["category"]="nd",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD DIGIT FOUR",
+ ["linebreak"]="nu",
+ ["specials"]={ "font", 0x0034 },
+ ["unicodeslot"]=0x1D7F0, -- ðŸ°
+ },
+ [0x1D7F1]={
+ ["category"]="nd",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD DIGIT FIVE",
+ ["linebreak"]="nu",
+ ["specials"]={ "font", 0x0035 },
+ ["unicodeslot"]=0x1D7F1, -- ðŸ±
+ },
+ [0x1D7F2]={
+ ["category"]="nd",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD DIGIT SIX",
+ ["linebreak"]="nu",
+ ["specials"]={ "font", 0x0036 },
+ ["unicodeslot"]=0x1D7F2, -- ðŸ²
+ },
+ [0x1D7F3]={
+ ["category"]="nd",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD DIGIT SEVEN",
+ ["linebreak"]="nu",
+ ["specials"]={ "font", 0x0037 },
+ ["unicodeslot"]=0x1D7F3, -- ðŸ³
+ },
+ [0x1D7F4]={
+ ["category"]="nd",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD DIGIT EIGHT",
+ ["linebreak"]="nu",
+ ["specials"]={ "font", 0x0038 },
+ ["unicodeslot"]=0x1D7F4, -- ðŸ´
+ },
+ [0x1D7F5]={
+ ["category"]="nd",
+ ["description"]="MATHEMATICAL SANS-SERIF BOLD DIGIT NINE",
+ ["linebreak"]="nu",
+ ["specials"]={ "font", 0x0039 },
+ ["unicodeslot"]=0x1D7F5, -- ðŸµ
+ },
+ [0x1D7F6]={
+ ["category"]="nd",
+ ["description"]="MATHEMATICAL MONOSPACE DIGIT ZERO",
+ ["linebreak"]="nu",
+ ["specials"]={ "font", 0x0030 },
+ ["unicodeslot"]=0x1D7F6, -- ðŸ¶
+ },
+ [0x1D7F7]={
+ ["category"]="nd",
+ ["description"]="MATHEMATICAL MONOSPACE DIGIT ONE",
+ ["linebreak"]="nu",
+ ["specials"]={ "font", 0x0031 },
+ ["unicodeslot"]=0x1D7F7, -- ðŸ·
+ },
+ [0x1D7F8]={
+ ["category"]="nd",
+ ["description"]="MATHEMATICAL MONOSPACE DIGIT TWO",
+ ["linebreak"]="nu",
+ ["specials"]={ "font", 0x0032 },
+ ["unicodeslot"]=0x1D7F8, -- ðŸ¸
+ },
+ [0x1D7F9]={
+ ["category"]="nd",
+ ["description"]="MATHEMATICAL MONOSPACE DIGIT THREE",
+ ["linebreak"]="nu",
+ ["specials"]={ "font", 0x0033 },
+ ["unicodeslot"]=0x1D7F9, -- ðŸ¹
+ },
+ [0x1D7FA]={
+ ["category"]="nd",
+ ["description"]="MATHEMATICAL MONOSPACE DIGIT FOUR",
+ ["linebreak"]="nu",
+ ["specials"]={ "font", 0x0034 },
+ ["unicodeslot"]=0x1D7FA, -- ðŸº
+ },
+ [0x1D7FB]={
+ ["category"]="nd",
+ ["description"]="MATHEMATICAL MONOSPACE DIGIT FIVE",
+ ["linebreak"]="nu",
+ ["specials"]={ "font", 0x0035 },
+ ["unicodeslot"]=0x1D7FB, -- ðŸ»
+ },
+ [0x1D7FC]={
+ ["category"]="nd",
+ ["description"]="MATHEMATICAL MONOSPACE DIGIT SIX",
+ ["linebreak"]="nu",
+ ["specials"]={ "font", 0x0036 },
+ ["unicodeslot"]=0x1D7FC, -- ðŸ¼
+ },
+ [0x1D7FD]={
+ ["category"]="nd",
+ ["description"]="MATHEMATICAL MONOSPACE DIGIT SEVEN",
+ ["linebreak"]="nu",
+ ["specials"]={ "font", 0x0037 },
+ ["unicodeslot"]=0x1D7FD, -- ðŸ½
+ },
+ [0x1D7FE]={
+ ["category"]="nd",
+ ["description"]="MATHEMATICAL MONOSPACE DIGIT EIGHT",
+ ["linebreak"]="nu",
+ ["specials"]={ "font", 0x0038 },
+ ["unicodeslot"]=0x1D7FE, -- ðŸ¾
+ },
+ [0x1D7FF]={
+ ["category"]="nd",
+ ["description"]="MATHEMATICAL MONOSPACE DIGIT NINE",
+ ["linebreak"]="nu",
+ ["specials"]={ "font", 0x0039 },
+ ["unicodeslot"]=0x1D7FF, -- ðŸ¿
+ },
+ [0x20000]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="<CJK Ideograph Extension B, First>",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x20000, -- ð €€
+ },
+ [0x2A6D6]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="<CJK Ideograph Extension B, Last>",
+ ["linebreak"]="id",
+ ["unicodeslot"]=0x2A6D6, -- 𪛖
+ },
+ [0x2F800]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0320",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x4E3D },
+ ["unicodeslot"]=0x2F800, -- 丽
+ },
+ [0x2F801]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0321",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x4E38 },
+ ["unicodeslot"]=0x2F801, -- ð¯ 
+ },
+ [0x2F802]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0322",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x4E41 },
+ ["unicodeslot"]=0x2F802, -- 乁
+ },
+ [0x2F803]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0323",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x20122 },
+ ["unicodeslot"]=0x2F803, -- 𠄢
+ },
+ [0x2F804]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0324",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x4F60 },
+ ["unicodeslot"]=0x2F804, -- 你
+ },
+ [0x2F805]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0325",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x4FAE },
+ ["unicodeslot"]=0x2F805, -- 侮
+ },
+ [0x2F806]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0326",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x4FBB },
+ ["unicodeslot"]=0x2F806, -- 侻
+ },
+ [0x2F807]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0327",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5002 },
+ ["unicodeslot"]=0x2F807, -- 倂
+ },
+ [0x2F808]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0328",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x507A },
+ ["unicodeslot"]=0x2F808, -- 偺
+ },
+ [0x2F809]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0329",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5099 },
+ ["unicodeslot"]=0x2F809, -- 備
+ },
+ [0x2F80A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0050A",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x50E7 },
+ ["unicodeslot"]=0x2F80A, -- 僧
+ },
+ [0x2F80B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0050B",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x50CF },
+ ["unicodeslot"]=0x2F80B, -- 像
+ },
+ [0x2F80C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0050C",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x349E },
+ ["unicodeslot"]=0x2F80C, -- 㒞
+ },
+ [0x2F80D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0050D",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x2063A },
+ ["unicodeslot"]=0x2F80D, -- ð¯ 
+ },
+ [0x2F80E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0050E",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x514D },
+ ["unicodeslot"]=0x2F80E, -- 免
+ },
+ [0x2F80F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0050F",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5154 },
+ ["unicodeslot"]=0x2F80F, -- ð¯ 
+ },
+ [0x2F810]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x032A",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5164 },
+ ["unicodeslot"]=0x2F810, -- ð¯ 
+ },
+ [0x2F811]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x032B",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5177 },
+ ["unicodeslot"]=0x2F811, -- 具
+ },
+ [0x2F812]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x032C",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x2051C },
+ ["unicodeslot"]=0x2F812, -- 𠔜
+ },
+ [0x2F813]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x032D",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x34B9 },
+ ["unicodeslot"]=0x2F813, -- 㒹
+ },
+ [0x2F814]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x032E",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5167 },
+ ["unicodeslot"]=0x2F814, -- 內
+ },
+ [0x2F815]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x032F",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x518D },
+ ["unicodeslot"]=0x2F815, -- 再
+ },
+ [0x2F816]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0330",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x2054B },
+ ["unicodeslot"]=0x2F816, -- 𠕋
+ },
+ [0x2F817]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0331",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5197 },
+ ["unicodeslot"]=0x2F817, -- 冗
+ },
+ [0x2F818]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0332",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x51A4 },
+ ["unicodeslot"]=0x2F818, -- 冤
+ },
+ [0x2F819]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0333",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x4ECC },
+ ["unicodeslot"]=0x2F819, -- 仌
+ },
+ [0x2F81A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0051A",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x51AC },
+ ["unicodeslot"]=0x2F81A, -- 冬
+ },
+ [0x2F81B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0051B",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x51B5 },
+ ["unicodeslot"]=0x2F81B, -- 况
+ },
+ [0x2F81C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0051C",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x291DF },
+ ["unicodeslot"]=0x2F81C, -- 𩇟
+ },
+ [0x2F81D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0051D",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x51F5 },
+ ["unicodeslot"]=0x2F81D, -- ð¯ 
+ },
+ [0x2F81E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0051E",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5203 },
+ ["unicodeslot"]=0x2F81E, -- 刃
+ },
+ [0x2F81F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0051F",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x34DF },
+ ["unicodeslot"]=0x2F81F, -- 㓟
+ },
+ [0x2F820]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0334",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x523B },
+ ["unicodeslot"]=0x2F820, -- 刻
+ },
+ [0x2F821]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0335",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5246 },
+ ["unicodeslot"]=0x2F821, -- 剆
+ },
+ [0x2F822]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0336",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5272 },
+ ["unicodeslot"]=0x2F822, -- 割
+ },
+ [0x2F823]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0337",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5277 },
+ ["unicodeslot"]=0x2F823, -- 剷
+ },
+ [0x2F824]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0338",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x3515 },
+ ["unicodeslot"]=0x2F824, -- 㔕
+ },
+ [0x2F825]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0339",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x52C7 },
+ ["unicodeslot"]=0x2F825, -- 勇
+ },
+ [0x2F826]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x033A",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x52C9 },
+ ["unicodeslot"]=0x2F826, -- 勉
+ },
+ [0x2F827]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x033B",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x52E4 },
+ ["unicodeslot"]=0x2F827, -- 勤
+ },
+ [0x2F828]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x033C",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x52FA },
+ ["unicodeslot"]=0x2F828, -- 勺
+ },
+ [0x2F829]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x033D",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5305 },
+ ["unicodeslot"]=0x2F829, -- 包
+ },
+ [0x2F82A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0052A",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5306 },
+ ["unicodeslot"]=0x2F82A, -- 匆
+ },
+ [0x2F82B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0052B",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5317 },
+ ["unicodeslot"]=0x2F82B, -- 北
+ },
+ [0x2F82C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0052C",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5349 },
+ ["unicodeslot"]=0x2F82C, -- 卉
+ },
+ [0x2F82D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0052D",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5351 },
+ ["unicodeslot"]=0x2F82D, -- 卑
+ },
+ [0x2F82E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0052E",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x535A },
+ ["unicodeslot"]=0x2F82E, -- 博
+ },
+ [0x2F82F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0052F",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5373 },
+ ["unicodeslot"]=0x2F82F, -- 即
+ },
+ [0x2F830]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x033E",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x537D },
+ ["unicodeslot"]=0x2F830, -- 卽
+ },
+ [0x2F831]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x033F",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x537F },
+ ["unicodeslot"]=0x2F831, -- 卿
+ },
+ [0x2F832]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0340",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x537F },
+ ["unicodeslot"]=0x2F832, -- 卿
+ },
+ [0x2F833]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0341",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x537F },
+ ["unicodeslot"]=0x2F833, -- 卿
+ },
+ [0x2F834]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0342",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x20A2C },
+ ["unicodeslot"]=0x2F834, -- 𠨬
+ },
+ [0x2F835]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0343",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7070 },
+ ["unicodeslot"]=0x2F835, -- 灰
+ },
+ [0x2F836]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0344",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x53CA },
+ ["unicodeslot"]=0x2F836, -- 及
+ },
+ [0x2F837]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0345",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x53DF },
+ ["unicodeslot"]=0x2F837, -- 叟
+ },
+ [0x2F838]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0346",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x20B63 },
+ ["unicodeslot"]=0x2F838, -- 𠭣
+ },
+ [0x2F839]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0347",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x53EB },
+ ["unicodeslot"]=0x2F839, -- 叫
+ },
+ [0x2F83A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0053A",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x53F1 },
+ ["unicodeslot"]=0x2F83A, -- 叱
+ },
+ [0x2F83B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0053B",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5406 },
+ ["unicodeslot"]=0x2F83B, -- 吆
+ },
+ [0x2F83C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0053C",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x549E },
+ ["unicodeslot"]=0x2F83C, -- 咞
+ },
+ [0x2F83D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0053D",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5438 },
+ ["unicodeslot"]=0x2F83D, -- 吸
+ },
+ [0x2F83E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0053E",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5448 },
+ ["unicodeslot"]=0x2F83E, -- 呈
+ },
+ [0x2F83F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0053F",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5468 },
+ ["unicodeslot"]=0x2F83F, -- 周
+ },
+ [0x2F840]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0348",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x54A2 },
+ ["unicodeslot"]=0x2F840, -- 咢
+ },
+ [0x2F841]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0349",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x54F6 },
+ ["unicodeslot"]=0x2F841, -- ð¯¡
+ },
+ [0x2F842]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x034A",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5510 },
+ ["unicodeslot"]=0x2F842, -- 唐
+ },
+ [0x2F843]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x034B",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5553 },
+ ["unicodeslot"]=0x2F843, -- 啓
+ },
+ [0x2F844]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x034C",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5563 },
+ ["unicodeslot"]=0x2F844, -- 啣
+ },
+ [0x2F845]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x034D",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5584 },
+ ["unicodeslot"]=0x2F845, -- 善
+ },
+ [0x2F846]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x034E",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5584 },
+ ["unicodeslot"]=0x2F846, -- 善
+ },
+ [0x2F847]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x034F",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5599 },
+ ["unicodeslot"]=0x2F847, -- 喙
+ },
+ [0x2F848]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0350",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x55AB },
+ ["unicodeslot"]=0x2F848, -- 喫
+ },
+ [0x2F849]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0351",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x55B3 },
+ ["unicodeslot"]=0x2F849, -- 喳
+ },
+ [0x2F84A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0054A",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x55C2 },
+ ["unicodeslot"]=0x2F84A, -- 嗂
+ },
+ [0x2F84B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0054B",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5716 },
+ ["unicodeslot"]=0x2F84B, -- 圖
+ },
+ [0x2F84C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0054C",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5606 },
+ ["unicodeslot"]=0x2F84C, -- 嘆
+ },
+ [0x2F84D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0054D",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5717 },
+ ["unicodeslot"]=0x2F84D, -- ð¯¡
+ },
+ [0x2F84E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0054E",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5651 },
+ ["unicodeslot"]=0x2F84E, -- 噑
+ },
+ [0x2F84F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0054F",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5674 },
+ ["unicodeslot"]=0x2F84F, -- ð¯¡
+ },
+ [0x2F850]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0352",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5207 },
+ ["unicodeslot"]=0x2F850, -- ð¯¡
+ },
+ [0x2F851]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0353",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x58EE },
+ ["unicodeslot"]=0x2F851, -- 壮
+ },
+ [0x2F852]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0354",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x57CE },
+ ["unicodeslot"]=0x2F852, -- 城
+ },
+ [0x2F853]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0355",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x57F4 },
+ ["unicodeslot"]=0x2F853, -- 埴
+ },
+ [0x2F854]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0356",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x580D },
+ ["unicodeslot"]=0x2F854, -- 堍
+ },
+ [0x2F855]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0357",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x578B },
+ ["unicodeslot"]=0x2F855, -- 型
+ },
+ [0x2F856]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0358",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5832 },
+ ["unicodeslot"]=0x2F856, -- 堲
+ },
+ [0x2F857]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0359",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5831 },
+ ["unicodeslot"]=0x2F857, -- 報
+ },
+ [0x2F858]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x035A",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x58AC },
+ ["unicodeslot"]=0x2F858, -- 墬
+ },
+ [0x2F859]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x035B",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x214E4 },
+ ["unicodeslot"]=0x2F859, -- 𡓤
+ },
+ [0x2F85A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0055A",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x58F2 },
+ ["unicodeslot"]=0x2F85A, -- 売
+ },
+ [0x2F85B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0055B",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x58F7 },
+ ["unicodeslot"]=0x2F85B, -- 壷
+ },
+ [0x2F85C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0055C",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5906 },
+ ["unicodeslot"]=0x2F85C, -- 夆
+ },
+ [0x2F85D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0055D",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x591A },
+ ["unicodeslot"]=0x2F85D, -- ð¯¡
+ },
+ [0x2F85E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0055E",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5922 },
+ ["unicodeslot"]=0x2F85E, -- 夢
+ },
+ [0x2F85F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0055F",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5962 },
+ ["unicodeslot"]=0x2F85F, -- 奢
+ },
+ [0x2F860]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x035C",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x216A8 },
+ ["unicodeslot"]=0x2F860, -- 𡚨
+ },
+ [0x2F861]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x035D",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x216EA },
+ ["unicodeslot"]=0x2F861, -- 𡛪
+ },
+ [0x2F862]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x035E",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x59EC },
+ ["unicodeslot"]=0x2F862, -- 姬
+ },
+ [0x2F863]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x035F",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5A1B },
+ ["unicodeslot"]=0x2F863, -- 娛
+ },
+ [0x2F864]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0360",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5A27 },
+ ["unicodeslot"]=0x2F864, -- 娧
+ },
+ [0x2F865]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0361",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x59D8 },
+ ["unicodeslot"]=0x2F865, -- 姘
+ },
+ [0x2F866]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0362",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5A66 },
+ ["unicodeslot"]=0x2F866, -- 婦
+ },
+ [0x2F867]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0363",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x36EE },
+ ["unicodeslot"]=0x2F867, -- 㛮
+ },
+ [0x2F868]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0364",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x36FC },
+ ["unicodeslot"]=0x2F868, -- 㛼
+ },
+ [0x2F869]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0365",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5B08 },
+ ["unicodeslot"]=0x2F869, -- 嬈
+ },
+ [0x2F86A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0056A",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5B3E },
+ ["unicodeslot"]=0x2F86A, -- 嬾
+ },
+ [0x2F86B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0056B",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5B3E },
+ ["unicodeslot"]=0x2F86B, -- 嬾
+ },
+ [0x2F86C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0056C",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x219C8 },
+ ["unicodeslot"]=0x2F86C, -- 𡧈
+ },
+ [0x2F86D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0056D",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5BC3 },
+ ["unicodeslot"]=0x2F86D, -- 寃
+ },
+ [0x2F86E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0056E",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5BD8 },
+ ["unicodeslot"]=0x2F86E, -- 寘
+ },
+ [0x2F86F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0056F",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5BE7 },
+ ["unicodeslot"]=0x2F86F, -- 寧
+ },
+ [0x2F870]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0366",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5BF3 },
+ ["unicodeslot"]=0x2F870, -- 寳
+ },
+ [0x2F871]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0367",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x21B18 },
+ ["unicodeslot"]=0x2F871, -- 𡬘
+ },
+ [0x2F872]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0368",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5BFF },
+ ["unicodeslot"]=0x2F872, -- 寿
+ },
+ [0x2F873]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0369",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5C06 },
+ ["unicodeslot"]=0x2F873, -- 将
+ },
+ [0x2F874]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x036A",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5F53 },
+ ["unicodeslot"]=0x2F874, -- 当
+ },
+ [0x2F875]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x036B",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5C22 },
+ ["unicodeslot"]=0x2F875, -- 尢
+ },
+ [0x2F876]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x036C",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x3781 },
+ ["unicodeslot"]=0x2F876, -- 㞁
+ },
+ [0x2F877]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x036D",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5C60 },
+ ["unicodeslot"]=0x2F877, -- 屠
+ },
+ [0x2F878]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x036E",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5C6E },
+ ["unicodeslot"]=0x2F878, -- 屮
+ },
+ [0x2F879]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x036F",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5CC0 },
+ ["unicodeslot"]=0x2F879, -- 峀
+ },
+ [0x2F87A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0057A",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5C8D },
+ ["unicodeslot"]=0x2F87A, -- 岍
+ },
+ [0x2F87B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0057B",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x21DE4 },
+ ["unicodeslot"]=0x2F87B, -- 𡷤
+ },
+ [0x2F87C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0057C",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5D43 },
+ ["unicodeslot"]=0x2F87C, -- 嵃
+ },
+ [0x2F87D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0057D",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x21DE6 },
+ ["unicodeslot"]=0x2F87D, -- 𡷦
+ },
+ [0x2F87E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0057E",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5D6E },
+ ["unicodeslot"]=0x2F87E, -- 嵮
+ },
+ [0x2F87F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0057F",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5D6B },
+ ["unicodeslot"]=0x2F87F, -- 嵫
+ },
+ [0x2F880]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0370",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5D7C },
+ ["unicodeslot"]=0x2F880, -- 嵼
+ },
+ [0x2F881]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0371",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5DE1 },
+ ["unicodeslot"]=0x2F881, -- ð¯¢
+ },
+ [0x2F882]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0372",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5DE2 },
+ ["unicodeslot"]=0x2F882, -- 巢
+ },
+ [0x2F883]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0373",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x382F },
+ ["unicodeslot"]=0x2F883, -- 㠯
+ },
+ [0x2F884]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0374",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5DFD },
+ ["unicodeslot"]=0x2F884, -- 巽
+ },
+ [0x2F885]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0375",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5E28 },
+ ["unicodeslot"]=0x2F885, -- 帨
+ },
+ [0x2F886]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0376",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5E3D },
+ ["unicodeslot"]=0x2F886, -- 帽
+ },
+ [0x2F887]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0377",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5E69 },
+ ["unicodeslot"]=0x2F887, -- 幩
+ },
+ [0x2F888]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0378",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x3862 },
+ ["unicodeslot"]=0x2F888, -- 㡢
+ },
+ [0x2F889]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0379",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x22183 },
+ ["unicodeslot"]=0x2F889, -- 𢆃
+ },
+ [0x2F88A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0058A",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x387C },
+ ["unicodeslot"]=0x2F88A, -- 㡼
+ },
+ [0x2F88B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0058B",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5EB0 },
+ ["unicodeslot"]=0x2F88B, -- 庰
+ },
+ [0x2F88C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0058C",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5EB3 },
+ ["unicodeslot"]=0x2F88C, -- 庳
+ },
+ [0x2F88D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0058D",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5EB6 },
+ ["unicodeslot"]=0x2F88D, -- ð¯¢
+ },
+ [0x2F88E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0058E",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5ECA },
+ ["unicodeslot"]=0x2F88E, -- 廊
+ },
+ [0x2F88F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0058F",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x2A392 },
+ ["unicodeslot"]=0x2F88F, -- ð¯¢
+ },
+ [0x2F890]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x037A",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5EFE },
+ ["unicodeslot"]=0x2F890, -- ð¯¢
+ },
+ [0x2F891]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x037B",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x22331 },
+ ["unicodeslot"]=0x2F891, -- 𢌱
+ },
+ [0x2F892]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x037C",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x22331 },
+ ["unicodeslot"]=0x2F892, -- 𢌱
+ },
+ [0x2F893]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x037D",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8201 },
+ ["unicodeslot"]=0x2F893, -- 舁
+ },
+ [0x2F894]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x037E",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5F22 },
+ ["unicodeslot"]=0x2F894, -- 弢
+ },
+ [0x2F895]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x037F",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5F22 },
+ ["unicodeslot"]=0x2F895, -- 弢
+ },
+ [0x2F896]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0380",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x38C7 },
+ ["unicodeslot"]=0x2F896, -- 㣇
+ },
+ [0x2F897]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0381",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x232B8 },
+ ["unicodeslot"]=0x2F897, -- 𣊸
+ },
+ [0x2F898]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0382",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x261DA },
+ ["unicodeslot"]=0x2F898, -- 𦇚
+ },
+ [0x2F899]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0383",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5F62 },
+ ["unicodeslot"]=0x2F899, -- 形
+ },
+ [0x2F89A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0059A",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5F6B },
+ ["unicodeslot"]=0x2F89A, -- 彫
+ },
+ [0x2F89B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0059B",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x38E3 },
+ ["unicodeslot"]=0x2F89B, -- 㣣
+ },
+ [0x2F89C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0059C",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5F9A },
+ ["unicodeslot"]=0x2F89C, -- 徚
+ },
+ [0x2F89D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0059D",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5FCD },
+ ["unicodeslot"]=0x2F89D, -- ð¯¢
+ },
+ [0x2F89E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0059E",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5FD7 },
+ ["unicodeslot"]=0x2F89E, -- 志
+ },
+ [0x2F89F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0059F",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5FF9 },
+ ["unicodeslot"]=0x2F89F, -- 忹
+ },
+ [0x2F8A0]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008A0x0000",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6081 },
+ ["unicodeslot"]=0x2F8A0, -- 悁
+ },
+ [0x2F8A1]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008A0x0001",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x393A },
+ ["unicodeslot"]=0x2F8A1, -- 㤺
+ },
+ [0x2F8A2]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008A0x0002",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x391C },
+ ["unicodeslot"]=0x2F8A2, -- 㤜
+ },
+ [0x2F8A3]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008A0x0003",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6094 },
+ ["unicodeslot"]=0x2F8A3, -- 悔
+ },
+ [0x2F8A4]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008A0x0004",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x226D4 },
+ ["unicodeslot"]=0x2F8A4, -- 𢛔
+ },
+ [0x2F8A5]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008A0x0005",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x60C7 },
+ ["unicodeslot"]=0x2F8A5, -- 惇
+ },
+ [0x2F8A6]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008A0x0006",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6148 },
+ ["unicodeslot"]=0x2F8A6, -- 慈
+ },
+ [0x2F8A7]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008A0x0007",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x614C },
+ ["unicodeslot"]=0x2F8A7, -- 慌
+ },
+ [0x2F8A8]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008A0x0008",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x614E },
+ ["unicodeslot"]=0x2F8A8, -- 慎
+ },
+ [0x2F8A9]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008A0x0009",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x614C },
+ ["unicodeslot"]=0x2F8A9, -- 慌
+ },
+ [0x2F8AA]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008AA",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x617A },
+ ["unicodeslot"]=0x2F8AA, -- 慺
+ },
+ [0x2F8AB]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008AB",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x618E },
+ ["unicodeslot"]=0x2F8AB, -- 憎
+ },
+ [0x2F8AC]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008AC",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x61B2 },
+ ["unicodeslot"]=0x2F8AC, -- 憲
+ },
+ [0x2F8AD]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008AD",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x61A4 },
+ ["unicodeslot"]=0x2F8AD, -- 憤
+ },
+ [0x2F8AE]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008AE",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x61AF },
+ ["unicodeslot"]=0x2F8AE, -- 憯
+ },
+ [0x2F8AF]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008AF",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x61DE },
+ ["unicodeslot"]=0x2F8AF, -- 懞
+ },
+ [0x2F8B0]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008B0x0000",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x61F2 },
+ ["unicodeslot"]=0x2F8B0, -- 懲
+ },
+ [0x2F8B1]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008B0x0001",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x61F6 },
+ ["unicodeslot"]=0x2F8B1, -- 懶
+ },
+ [0x2F8B2]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008B0x0002",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6210 },
+ ["unicodeslot"]=0x2F8B2, -- 成
+ },
+ [0x2F8B3]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008B0x0003",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x621B },
+ ["unicodeslot"]=0x2F8B3, -- 戛
+ },
+ [0x2F8B4]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008B0x0004",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x625D },
+ ["unicodeslot"]=0x2F8B4, -- 扝
+ },
+ [0x2F8B5]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008B0x0005",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x62B1 },
+ ["unicodeslot"]=0x2F8B5, -- 抱
+ },
+ [0x2F8B6]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008B0x0006",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x62D4 },
+ ["unicodeslot"]=0x2F8B6, -- 拔
+ },
+ [0x2F8B7]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008B0x0007",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6350 },
+ ["unicodeslot"]=0x2F8B7, -- 捐
+ },
+ [0x2F8B8]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008B0x0008",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x22B0C },
+ ["unicodeslot"]=0x2F8B8, -- 𢬌
+ },
+ [0x2F8B9]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008B0x0009",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x633D },
+ ["unicodeslot"]=0x2F8B9, -- 挽
+ },
+ [0x2F8BA]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008BA",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x62FC },
+ ["unicodeslot"]=0x2F8BA, -- 拼
+ },
+ [0x2F8BB]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008BB",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6368 },
+ ["unicodeslot"]=0x2F8BB, -- 捨
+ },
+ [0x2F8BC]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008BC",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6383 },
+ ["unicodeslot"]=0x2F8BC, -- 掃
+ },
+ [0x2F8BD]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008BD",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x63E4 },
+ ["unicodeslot"]=0x2F8BD, -- 揤
+ },
+ [0x2F8BE]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008BE",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x22BF1 },
+ ["unicodeslot"]=0x2F8BE, -- 𢯱
+ },
+ [0x2F8BF]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008BF",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6422 },
+ ["unicodeslot"]=0x2F8BF, -- 搢
+ },
+ [0x2F8C0]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008C0x0000",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x63C5 },
+ ["unicodeslot"]=0x2F8C0, -- 揅
+ },
+ [0x2F8C1]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008C0x0001",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x63A9 },
+ ["unicodeslot"]=0x2F8C1, -- ð¯£
+ },
+ [0x2F8C2]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008C0x0002",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x3A2E },
+ ["unicodeslot"]=0x2F8C2, -- 㨮
+ },
+ [0x2F8C3]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008C0x0003",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6469 },
+ ["unicodeslot"]=0x2F8C3, -- 摩
+ },
+ [0x2F8C4]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008C0x0004",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x647E },
+ ["unicodeslot"]=0x2F8C4, -- 摾
+ },
+ [0x2F8C5]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008C0x0005",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x649D },
+ ["unicodeslot"]=0x2F8C5, -- 撝
+ },
+ [0x2F8C6]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008C0x0006",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6477 },
+ ["unicodeslot"]=0x2F8C6, -- 摷
+ },
+ [0x2F8C7]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008C0x0007",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x3A6C },
+ ["unicodeslot"]=0x2F8C7, -- 㩬
+ },
+ [0x2F8C8]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008C0x0008",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x654F },
+ ["unicodeslot"]=0x2F8C8, -- 敏
+ },
+ [0x2F8C9]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008C0x0009",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x656C },
+ ["unicodeslot"]=0x2F8C9, -- 敬
+ },
+ [0x2F8CA]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008CA",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x2300A },
+ ["unicodeslot"]=0x2F8CA, -- 𣀊
+ },
+ [0x2F8CB]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008CB",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x65E3 },
+ ["unicodeslot"]=0x2F8CB, -- 旣
+ },
+ [0x2F8CC]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008CC",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x66F8 },
+ ["unicodeslot"]=0x2F8CC, -- 書
+ },
+ [0x2F8CD]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008CD",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6649 },
+ ["unicodeslot"]=0x2F8CD, -- ð¯£
+ },
+ [0x2F8CE]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008CE",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x3B19 },
+ ["unicodeslot"]=0x2F8CE, -- 㬙
+ },
+ [0x2F8CF]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008CF",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6691 },
+ ["unicodeslot"]=0x2F8CF, -- ð¯£
+ },
+ [0x2F8D0]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008D0x0000",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x3B08 },
+ ["unicodeslot"]=0x2F8D0, -- ð¯£
+ },
+ [0x2F8D1]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008D0x0001",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x3AE4 },
+ ["unicodeslot"]=0x2F8D1, -- 㫤
+ },
+ [0x2F8D2]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008D0x0002",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5192 },
+ ["unicodeslot"]=0x2F8D2, -- 冒
+ },
+ [0x2F8D3]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008D0x0003",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5195 },
+ ["unicodeslot"]=0x2F8D3, -- 冕
+ },
+ [0x2F8D4]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008D0x0004",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6700 },
+ ["unicodeslot"]=0x2F8D4, -- 最
+ },
+ [0x2F8D5]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008D0x0005",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x669C },
+ ["unicodeslot"]=0x2F8D5, -- 暜
+ },
+ [0x2F8D6]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008D0x0006",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x80AD },
+ ["unicodeslot"]=0x2F8D6, -- 肭
+ },
+ [0x2F8D7]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008D0x0007",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x43D9 },
+ ["unicodeslot"]=0x2F8D7, -- 䏙
+ },
+ [0x2F8D8]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008D0x0008",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6717 },
+ ["unicodeslot"]=0x2F8D8, -- 朗
+ },
+ [0x2F8D9]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008D0x0009",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x671B },
+ ["unicodeslot"]=0x2F8D9, -- 望
+ },
+ [0x2F8DA]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008DA",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6721 },
+ ["unicodeslot"]=0x2F8DA, -- 朡
+ },
+ [0x2F8DB]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008DB",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x675E },
+ ["unicodeslot"]=0x2F8DB, -- 杞
+ },
+ [0x2F8DC]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008DC",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6753 },
+ ["unicodeslot"]=0x2F8DC, -- 杓
+ },
+ [0x2F8DD]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008DD",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x233C3 },
+ ["unicodeslot"]=0x2F8DD, -- ð¯£
+ },
+ [0x2F8DE]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008DE",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x3B49 },
+ ["unicodeslot"]=0x2F8DE, -- 㭉
+ },
+ [0x2F8DF]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008DF",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x67FA },
+ ["unicodeslot"]=0x2F8DF, -- 柺
+ },
+ [0x2F8E0]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008E0x0000",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6785 },
+ ["unicodeslot"]=0x2F8E0, -- 枅
+ },
+ [0x2F8E1]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008E0x0001",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6852 },
+ ["unicodeslot"]=0x2F8E1, -- 桒
+ },
+ [0x2F8E2]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008E0x0002",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6885 },
+ ["unicodeslot"]=0x2F8E2, -- 梅
+ },
+ [0x2F8E3]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008E0x0003",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x2346D },
+ ["unicodeslot"]=0x2F8E3, -- 𣑭
+ },
+ [0x2F8E4]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008E0x0004",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x688E },
+ ["unicodeslot"]=0x2F8E4, -- 梎
+ },
+ [0x2F8E5]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008E0x0005",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x681F },
+ ["unicodeslot"]=0x2F8E5, -- 栟
+ },
+ [0x2F8E6]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008E0x0006",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6914 },
+ ["unicodeslot"]=0x2F8E6, -- 椔
+ },
+ [0x2F8E7]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008E0x0007",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x3B9D },
+ ["unicodeslot"]=0x2F8E7, -- 㮝
+ },
+ [0x2F8E8]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008E0x0008",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6942 },
+ ["unicodeslot"]=0x2F8E8, -- 楂
+ },
+ [0x2F8E9]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008E0x0009",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x69A3 },
+ ["unicodeslot"]=0x2F8E9, -- 榣
+ },
+ [0x2F8EA]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008EA",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x69EA },
+ ["unicodeslot"]=0x2F8EA, -- 槪
+ },
+ [0x2F8EB]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008EB",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6AA8 },
+ ["unicodeslot"]=0x2F8EB, -- 檨
+ },
+ [0x2F8EC]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008EC",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x236A3 },
+ ["unicodeslot"]=0x2F8EC, -- 𣚣
+ },
+ [0x2F8ED]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008ED",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6ADB },
+ ["unicodeslot"]=0x2F8ED, -- 櫛
+ },
+ [0x2F8EE]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008EE",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x3C18 },
+ ["unicodeslot"]=0x2F8EE, -- 㰘
+ },
+ [0x2F8EF]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008EF",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6B21 },
+ ["unicodeslot"]=0x2F8EF, -- 次
+ },
+ [0x2F8F0]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008F0x0000",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x238A7 },
+ ["unicodeslot"]=0x2F8F0, -- 𣢧
+ },
+ [0x2F8F1]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008F0x0001",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6B54 },
+ ["unicodeslot"]=0x2F8F1, -- 歔
+ },
+ [0x2F8F2]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008F0x0002",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x3C4E },
+ ["unicodeslot"]=0x2F8F2, -- 㱎
+ },
+ [0x2F8F3]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008F0x0003",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6B72 },
+ ["unicodeslot"]=0x2F8F3, -- 歲
+ },
+ [0x2F8F4]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008F0x0004",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6B9F },
+ ["unicodeslot"]=0x2F8F4, -- 殟
+ },
+ [0x2F8F5]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008F0x0005",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6BBA },
+ ["unicodeslot"]=0x2F8F5, -- 殺
+ },
+ [0x2F8F6]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008F0x0006",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6BBB },
+ ["unicodeslot"]=0x2F8F6, -- 殻
+ },
+ [0x2F8F7]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008F0x0007",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x23A8D },
+ ["unicodeslot"]=0x2F8F7, -- 𣪍
+ },
+ [0x2F8F8]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008F0x0008",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x21D0B },
+ ["unicodeslot"]=0x2F8F8, -- 𡴋
+ },
+ [0x2F8F9]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008F0x0009",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x23AFA },
+ ["unicodeslot"]=0x2F8F9, -- 𣫺
+ },
+ [0x2F8FA]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008FA",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6C4E },
+ ["unicodeslot"]=0x2F8FA, -- 汎
+ },
+ [0x2F8FB]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008FB",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x23CBC },
+ ["unicodeslot"]=0x2F8FB, -- 𣲼
+ },
+ [0x2F8FC]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008FC",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6CBF },
+ ["unicodeslot"]=0x2F8FC, -- 沿
+ },
+ [0x2F8FD]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008FD",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6CCD },
+ ["unicodeslot"]=0x2F8FD, -- 泍
+ },
+ [0x2F8FE]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008FE",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6C67 },
+ ["unicodeslot"]=0x2F8FE, -- 汧
+ },
+ [0x2F8FF]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0008FF",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6D16 },
+ ["unicodeslot"]=0x2F8FF, -- 洖
+ },
+ [0x2F900]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0384",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6D3E },
+ ["unicodeslot"]=0x2F900, -- 派
+ },
+ [0x2F901]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0385",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6D77 },
+ ["unicodeslot"]=0x2F901, -- ð¯¤
+ },
+ [0x2F902]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0386",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6D41 },
+ ["unicodeslot"]=0x2F902, -- 流
+ },
+ [0x2F903]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0387",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6D69 },
+ ["unicodeslot"]=0x2F903, -- 浩
+ },
+ [0x2F904]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0388",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6D78 },
+ ["unicodeslot"]=0x2F904, -- 浸
+ },
+ [0x2F905]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0389",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6D85 },
+ ["unicodeslot"]=0x2F905, -- 涅
+ },
+ [0x2F906]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x038A",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x23D1E },
+ ["unicodeslot"]=0x2F906, -- 𣴞
+ },
+ [0x2F907]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x038B",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6D34 },
+ ["unicodeslot"]=0x2F907, -- 洴
+ },
+ [0x2F908]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x038C",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6E2F },
+ ["unicodeslot"]=0x2F908, -- 港
+ },
+ [0x2F909]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x038D",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6E6E },
+ ["unicodeslot"]=0x2F909, -- 湮
+ },
+ [0x2F90A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005AA",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x3D33 },
+ ["unicodeslot"]=0x2F90A, -- 㴳
+ },
+ [0x2F90B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005AB",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6ECB },
+ ["unicodeslot"]=0x2F90B, -- 滋
+ },
+ [0x2F90C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005AC",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6EC7 },
+ ["unicodeslot"]=0x2F90C, -- 滇
+ },
+ [0x2F90D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005AD",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x23ED1 },
+ ["unicodeslot"]=0x2F90D, -- ð¯¤
+ },
+ [0x2F90E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005AE",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6DF9 },
+ ["unicodeslot"]=0x2F90E, -- 淹
+ },
+ [0x2F90F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005AF",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6F6E },
+ ["unicodeslot"]=0x2F90F, -- ð¯¤
+ },
+ [0x2F910]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x038E",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x23F5E },
+ ["unicodeslot"]=0x2F910, -- ð¯¤
+ },
+ [0x2F911]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x038F",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x23F8E },
+ ["unicodeslot"]=0x2F911, -- 𣾎
+ },
+ [0x2F912]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0390",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x6FC6 },
+ ["unicodeslot"]=0x2F912, -- 濆
+ },
+ [0x2F913]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0391",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7039 },
+ ["unicodeslot"]=0x2F913, -- 瀹
+ },
+ [0x2F914]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0392",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x701E },
+ ["unicodeslot"]=0x2F914, -- 瀞
+ },
+ [0x2F915]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0393",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x701B },
+ ["unicodeslot"]=0x2F915, -- 瀛
+ },
+ [0x2F916]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0394",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x3D96 },
+ ["unicodeslot"]=0x2F916, -- 㶖
+ },
+ [0x2F917]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0395",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x704A },
+ ["unicodeslot"]=0x2F917, -- 灊
+ },
+ [0x2F918]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0396",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x707D },
+ ["unicodeslot"]=0x2F918, -- 災
+ },
+ [0x2F919]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0397",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7077 },
+ ["unicodeslot"]=0x2F919, -- 灷
+ },
+ [0x2F91A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005BA",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x70AD },
+ ["unicodeslot"]=0x2F91A, -- 炭
+ },
+ [0x2F91B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005BB",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x20525 },
+ ["unicodeslot"]=0x2F91B, -- 𠔥
+ },
+ [0x2F91C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005BC",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7145 },
+ ["unicodeslot"]=0x2F91C, -- 煅
+ },
+ [0x2F91D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005BD",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x24263 },
+ ["unicodeslot"]=0x2F91D, -- ð¯¤
+ },
+ [0x2F91E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005BE",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x719C },
+ ["unicodeslot"]=0x2F91E, -- 熜
+ },
+ [0x2F91F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005BF",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x243AB },
+ ["unicodeslot"]=0x2F91F, -- 𤎫
+ },
+ [0x2F920]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0398",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7228 },
+ ["unicodeslot"]=0x2F920, -- 爨
+ },
+ [0x2F921]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0399",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7235 },
+ ["unicodeslot"]=0x2F921, -- 爵
+ },
+ [0x2F922]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x039A",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7250 },
+ ["unicodeslot"]=0x2F922, -- 牐
+ },
+ [0x2F923]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x039B",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x24608 },
+ ["unicodeslot"]=0x2F923, -- 𤘈
+ },
+ [0x2F924]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x039C",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7280 },
+ ["unicodeslot"]=0x2F924, -- 犀
+ },
+ [0x2F925]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x039D",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7295 },
+ ["unicodeslot"]=0x2F925, -- 犕
+ },
+ [0x2F926]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x039E",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x24735 },
+ ["unicodeslot"]=0x2F926, -- 𤜵
+ },
+ [0x2F927]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x039F",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x24814 },
+ ["unicodeslot"]=0x2F927, -- 𤠔
+ },
+ [0x2F928]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03A0",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x737A },
+ ["unicodeslot"]=0x2F928, -- 獺
+ },
+ [0x2F929]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03A1",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x738B },
+ ["unicodeslot"]=0x2F929, -- 王
+ },
+ [0x2F92A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005CA",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x3EAC },
+ ["unicodeslot"]=0x2F92A, -- 㺬
+ },
+ [0x2F92B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005CB",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x73A5 },
+ ["unicodeslot"]=0x2F92B, -- 玥
+ },
+ [0x2F92C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005CC",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x3EB8 },
+ ["unicodeslot"]=0x2F92C, -- 㺸
+ },
+ [0x2F92D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005CD",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x3EB8 },
+ ["unicodeslot"]=0x2F92D, -- 㺸
+ },
+ [0x2F92E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005CE",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7447 },
+ ["unicodeslot"]=0x2F92E, -- 瑇
+ },
+ [0x2F92F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005CF",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x745C },
+ ["unicodeslot"]=0x2F92F, -- 瑜
+ },
+ [0x2F930]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03A2",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7471 },
+ ["unicodeslot"]=0x2F930, -- 瑱
+ },
+ [0x2F931]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03A3",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7485 },
+ ["unicodeslot"]=0x2F931, -- 璅
+ },
+ [0x2F932]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03A4",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x74CA },
+ ["unicodeslot"]=0x2F932, -- 瓊
+ },
+ [0x2F933]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03A5",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x3F1B },
+ ["unicodeslot"]=0x2F933, -- 㼛
+ },
+ [0x2F934]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03A6",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7524 },
+ ["unicodeslot"]=0x2F934, -- 甤
+ },
+ [0x2F935]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03A7",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x24C36 },
+ ["unicodeslot"]=0x2F935, -- 𤰶
+ },
+ [0x2F936]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03A8",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x753E },
+ ["unicodeslot"]=0x2F936, -- 甾
+ },
+ [0x2F937]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03A9",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x24C92 },
+ ["unicodeslot"]=0x2F937, -- 𤲒
+ },
+ [0x2F938]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03AA",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7570 },
+ ["unicodeslot"]=0x2F938, -- 異
+ },
+ [0x2F939]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03AB",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x2219F },
+ ["unicodeslot"]=0x2F939, -- 𢆟
+ },
+ [0x2F93A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005DA",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7610 },
+ ["unicodeslot"]=0x2F93A, -- 瘐
+ },
+ [0x2F93B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005DB",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x24FA1 },
+ ["unicodeslot"]=0x2F93B, -- 𤾡
+ },
+ [0x2F93C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005DC",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x24FB8 },
+ ["unicodeslot"]=0x2F93C, -- 𤾸
+ },
+ [0x2F93D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005DD",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x25044 },
+ ["unicodeslot"]=0x2F93D, -- 𥁄
+ },
+ [0x2F93E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005DE",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x3FFC },
+ ["unicodeslot"]=0x2F93E, -- 㿼
+ },
+ [0x2F93F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005DF",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x4008 },
+ ["unicodeslot"]=0x2F93F, -- 䀈
+ },
+ [0x2F940]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03AC",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x76F4 },
+ ["unicodeslot"]=0x2F940, -- 直
+ },
+ [0x2F941]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03AD",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x250F3 },
+ ["unicodeslot"]=0x2F941, -- ð¯¥
+ },
+ [0x2F942]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03AE",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x250F2 },
+ ["unicodeslot"]=0x2F942, -- 𥃲
+ },
+ [0x2F943]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03AF",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x25119 },
+ ["unicodeslot"]=0x2F943, -- 𥄙
+ },
+ [0x2F944]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03B0",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x25133 },
+ ["unicodeslot"]=0x2F944, -- 𥄳
+ },
+ [0x2F945]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03B1",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x771E },
+ ["unicodeslot"]=0x2F945, -- 眞
+ },
+ [0x2F946]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03B2",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x771F },
+ ["unicodeslot"]=0x2F946, -- 真
+ },
+ [0x2F947]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03B3",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x771F },
+ ["unicodeslot"]=0x2F947, -- 真
+ },
+ [0x2F948]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03B4",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x774A },
+ ["unicodeslot"]=0x2F948, -- 睊
+ },
+ [0x2F949]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03B5",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x4039 },
+ ["unicodeslot"]=0x2F949, -- 䀹
+ },
+ [0x2F94A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005EA",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x778B },
+ ["unicodeslot"]=0x2F94A, -- 瞋
+ },
+ [0x2F94B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005EB",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x4046 },
+ ["unicodeslot"]=0x2F94B, -- 䁆
+ },
+ [0x2F94C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005EC",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x4096 },
+ ["unicodeslot"]=0x2F94C, -- 䂖
+ },
+ [0x2F94D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005ED",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x2541D },
+ ["unicodeslot"]=0x2F94D, -- ð¯¥
+ },
+ [0x2F94E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005EE",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x784E },
+ ["unicodeslot"]=0x2F94E, -- 硎
+ },
+ [0x2F94F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005EF",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x788C },
+ ["unicodeslot"]=0x2F94F, -- ð¯¥
+ },
+ [0x2F950]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03B6",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x78CC },
+ ["unicodeslot"]=0x2F950, -- ð¯¥
+ },
+ [0x2F951]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03B7",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x40E3 },
+ ["unicodeslot"]=0x2F951, -- 䃣
+ },
+ [0x2F952]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03B8",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x25626 },
+ ["unicodeslot"]=0x2F952, -- 𥘦
+ },
+ [0x2F953]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03B9",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7956 },
+ ["unicodeslot"]=0x2F953, -- 祖
+ },
+ [0x2F954]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03BA",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x2569A },
+ ["unicodeslot"]=0x2F954, -- 𥚚
+ },
+ [0x2F955]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03BB",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x256C5 },
+ ["unicodeslot"]=0x2F955, -- 𥛅
+ },
+ [0x2F956]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03BC",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x798F },
+ ["unicodeslot"]=0x2F956, -- 福
+ },
+ [0x2F957]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03BD",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x79EB },
+ ["unicodeslot"]=0x2F957, -- 秫
+ },
+ [0x2F958]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03BE",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x412F },
+ ["unicodeslot"]=0x2F958, -- 䄯
+ },
+ [0x2F959]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03BF",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7A40 },
+ ["unicodeslot"]=0x2F959, -- 穀
+ },
+ [0x2F95A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005FA",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7A4A },
+ ["unicodeslot"]=0x2F95A, -- 穊
+ },
+ [0x2F95B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005FB",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7A4F },
+ ["unicodeslot"]=0x2F95B, -- 穏
+ },
+ [0x2F95C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005FC",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x2597C },
+ ["unicodeslot"]=0x2F95C, -- 𥥼
+ },
+ [0x2F95D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005FD",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x25AA7 },
+ ["unicodeslot"]=0x2F95D, -- ð¯¥
+ },
+ [0x2F95E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005FE",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x25AA7 },
+ ["unicodeslot"]=0x2F95E, -- 𥪧
+ },
+ [0x2F95F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x005FF",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7AEE },
+ ["unicodeslot"]=0x2F95F, -- 竮
+ },
+ [0x2F960]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03C0",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x4202 },
+ ["unicodeslot"]=0x2F960, -- 䈂
+ },
+ [0x2F961]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03C1",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x25BAB },
+ ["unicodeslot"]=0x2F961, -- 𥮫
+ },
+ [0x2F962]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03C2",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7BC6 },
+ ["unicodeslot"]=0x2F962, -- 篆
+ },
+ [0x2F963]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03C3",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7BC9 },
+ ["unicodeslot"]=0x2F963, -- 築
+ },
+ [0x2F964]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03C4",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x4227 },
+ ["unicodeslot"]=0x2F964, -- 䈧
+ },
+ [0x2F965]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03C5",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x25C80 },
+ ["unicodeslot"]=0x2F965, -- 𥲀
+ },
+ [0x2F966]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03C6",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7CD2 },
+ ["unicodeslot"]=0x2F966, -- 糒
+ },
+ [0x2F967]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03C7",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x42A0 },
+ ["unicodeslot"]=0x2F967, -- 䊠
+ },
+ [0x2F968]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03C8",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7CE8 },
+ ["unicodeslot"]=0x2F968, -- 糨
+ },
+ [0x2F969]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03C9",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7CE3 },
+ ["unicodeslot"]=0x2F969, -- 糣
+ },
+ [0x2F96A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0060A",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7D00 },
+ ["unicodeslot"]=0x2F96A, -- 紀
+ },
+ [0x2F96B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0060B",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x25F86 },
+ ["unicodeslot"]=0x2F96B, -- 𥾆
+ },
+ [0x2F96C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0060C",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7D63 },
+ ["unicodeslot"]=0x2F96C, -- 絣
+ },
+ [0x2F96D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0060D",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x4301 },
+ ["unicodeslot"]=0x2F96D, -- 䌁
+ },
+ [0x2F96E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0060E",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7DC7 },
+ ["unicodeslot"]=0x2F96E, -- 緇
+ },
+ [0x2F96F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0060F",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7E02 },
+ ["unicodeslot"]=0x2F96F, -- 縂
+ },
+ [0x2F970]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03CA",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7E45 },
+ ["unicodeslot"]=0x2F970, -- 繅
+ },
+ [0x2F971]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03CB",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x4334 },
+ ["unicodeslot"]=0x2F971, -- 䌴
+ },
+ [0x2F972]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03CC",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x26228 },
+ ["unicodeslot"]=0x2F972, -- 𦈨
+ },
+ [0x2F973]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03CD",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x26247 },
+ ["unicodeslot"]=0x2F973, -- 𦉇
+ },
+ [0x2F974]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03CE",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x4359 },
+ ["unicodeslot"]=0x2F974, -- 䍙
+ },
+ [0x2F975]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03CF",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x262D9 },
+ ["unicodeslot"]=0x2F975, -- 𦋙
+ },
+ [0x2F976]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03D0",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7F7A },
+ ["unicodeslot"]=0x2F976, -- 罺
+ },
+ [0x2F977]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03D1",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x2633E },
+ ["unicodeslot"]=0x2F977, -- 𦌾
+ },
+ [0x2F978]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03D2",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7F95 },
+ ["unicodeslot"]=0x2F978, -- 羕
+ },
+ [0x2F979]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03D3",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x7FFA },
+ ["unicodeslot"]=0x2F979, -- 翺
+ },
+ [0x2F97A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0061A",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8005 },
+ ["unicodeslot"]=0x2F97A, -- 者
+ },
+ [0x2F97B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0061B",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x264DA },
+ ["unicodeslot"]=0x2F97B, -- 𦓚
+ },
+ [0x2F97C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0061C",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x26523 },
+ ["unicodeslot"]=0x2F97C, -- 𦔣
+ },
+ [0x2F97D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0061D",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8060 },
+ ["unicodeslot"]=0x2F97D, -- 聠
+ },
+ [0x2F97E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0061E",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x265A8 },
+ ["unicodeslot"]=0x2F97E, -- 𦖨
+ },
+ [0x2F97F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0061F",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8070 },
+ ["unicodeslot"]=0x2F97F, -- 聰
+ },
+ [0x2F980]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03D4",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x2335F },
+ ["unicodeslot"]=0x2F980, -- 𣍟
+ },
+ [0x2F981]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03D5",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x43D5 },
+ ["unicodeslot"]=0x2F981, -- ð¯¦
+ },
+ [0x2F982]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03D6",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x80B2 },
+ ["unicodeslot"]=0x2F982, -- 育
+ },
+ [0x2F983]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03D7",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8103 },
+ ["unicodeslot"]=0x2F983, -- 脃
+ },
+ [0x2F984]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03D8",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x440B },
+ ["unicodeslot"]=0x2F984, -- 䐋
+ },
+ [0x2F985]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03D9",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x813E },
+ ["unicodeslot"]=0x2F985, -- 脾
+ },
+ [0x2F986]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03DA",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5AB5 },
+ ["unicodeslot"]=0x2F986, -- 媵
+ },
+ [0x2F987]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03DB",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x267A7 },
+ ["unicodeslot"]=0x2F987, -- 𦞧
+ },
+ [0x2F988]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03DC",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x267B5 },
+ ["unicodeslot"]=0x2F988, -- 𦞵
+ },
+ [0x2F989]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03DD",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x23393 },
+ ["unicodeslot"]=0x2F989, -- 𣎓
+ },
+ [0x2F98A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0062A",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x2339C },
+ ["unicodeslot"]=0x2F98A, -- 𣎜
+ },
+ [0x2F98B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0062B",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8201 },
+ ["unicodeslot"]=0x2F98B, -- 舁
+ },
+ [0x2F98C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0062C",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8204 },
+ ["unicodeslot"]=0x2F98C, -- 舄
+ },
+ [0x2F98D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0062D",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8F9E },
+ ["unicodeslot"]=0x2F98D, -- ð¯¦
+ },
+ [0x2F98E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0062E",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x446B },
+ ["unicodeslot"]=0x2F98E, -- 䑫
+ },
+ [0x2F98F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0062F",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8291 },
+ ["unicodeslot"]=0x2F98F, -- ð¯¦
+ },
+ [0x2F990]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03DE",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x828B },
+ ["unicodeslot"]=0x2F990, -- ð¯¦
+ },
+ [0x2F991]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03DF",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x829D },
+ ["unicodeslot"]=0x2F991, -- 芝
+ },
+ [0x2F992]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03E0",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x52B3 },
+ ["unicodeslot"]=0x2F992, -- 劳
+ },
+ [0x2F993]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03E1",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x82B1 },
+ ["unicodeslot"]=0x2F993, -- 花
+ },
+ [0x2F994]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03E2",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x82B3 },
+ ["unicodeslot"]=0x2F994, -- 芳
+ },
+ [0x2F995]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03E3",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x82BD },
+ ["unicodeslot"]=0x2F995, -- 芽
+ },
+ [0x2F996]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03E4",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x82E6 },
+ ["unicodeslot"]=0x2F996, -- 苦
+ },
+ [0x2F997]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03E5",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x26B3C },
+ ["unicodeslot"]=0x2F997, -- 𦬼
+ },
+ [0x2F998]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03E6",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x82E5 },
+ ["unicodeslot"]=0x2F998, -- 若
+ },
+ [0x2F999]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x03E7",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x831D },
+ ["unicodeslot"]=0x2F999, -- 茝
+ },
+ [0x2F99A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0063A",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8363 },
+ ["unicodeslot"]=0x2F99A, -- 荣
+ },
+ [0x2F99B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0063B",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x83AD },
+ ["unicodeslot"]=0x2F99B, -- 莭
+ },
+ [0x2F99C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0063C",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8323 },
+ ["unicodeslot"]=0x2F99C, -- 茣
+ },
+ [0x2F99D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0063D",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x83BD },
+ ["unicodeslot"]=0x2F99D, -- ð¯¦
+ },
+ [0x2F99E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0063E",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x83E7 },
+ ["unicodeslot"]=0x2F99E, -- 菧
+ },
+ [0x2F99F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0063F",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8457 },
+ ["unicodeslot"]=0x2F99F, -- 著
+ },
+ [0x2F9A0]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009A0x0000",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8353 },
+ ["unicodeslot"]=0x2F9A0, -- 荓
+ },
+ [0x2F9A1]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009A0x0001",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x83CA },
+ ["unicodeslot"]=0x2F9A1, -- 菊
+ },
+ [0x2F9A2]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009A0x0002",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x83CC },
+ ["unicodeslot"]=0x2F9A2, -- 菌
+ },
+ [0x2F9A3]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009A0x0003",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x83DC },
+ ["unicodeslot"]=0x2F9A3, -- 菜
+ },
+ [0x2F9A4]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009A0x0004",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x26C36 },
+ ["unicodeslot"]=0x2F9A4, -- 𦰶
+ },
+ [0x2F9A5]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009A0x0005",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x26D6B },
+ ["unicodeslot"]=0x2F9A5, -- 𦵫
+ },
+ [0x2F9A6]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009A0x0006",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x26CD5 },
+ ["unicodeslot"]=0x2F9A6, -- 𦳕
+ },
+ [0x2F9A7]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009A0x0007",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x452B },
+ ["unicodeslot"]=0x2F9A7, -- 䔫
+ },
+ [0x2F9A8]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009A0x0008",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x84F1 },
+ ["unicodeslot"]=0x2F9A8, -- 蓱
+ },
+ [0x2F9A9]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009A0x0009",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x84F3 },
+ ["unicodeslot"]=0x2F9A9, -- 蓳
+ },
+ [0x2F9AA]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009AA",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8516 },
+ ["unicodeslot"]=0x2F9AA, -- 蔖
+ },
+ [0x2F9AB]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009AB",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x273CA },
+ ["unicodeslot"]=0x2F9AB, -- 𧏊
+ },
+ [0x2F9AC]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009AC",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8564 },
+ ["unicodeslot"]=0x2F9AC, -- 蕤
+ },
+ [0x2F9AD]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009AD",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x26F2C },
+ ["unicodeslot"]=0x2F9AD, -- 𦼬
+ },
+ [0x2F9AE]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009AE",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x455D },
+ ["unicodeslot"]=0x2F9AE, -- 䕝
+ },
+ [0x2F9AF]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009AF",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x4561 },
+ ["unicodeslot"]=0x2F9AF, -- 䕡
+ },
+ [0x2F9B0]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009B0x0000",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x26FB1 },
+ ["unicodeslot"]=0x2F9B0, -- 𦾱
+ },
+ [0x2F9B1]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009B0x0001",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x270D2 },
+ ["unicodeslot"]=0x2F9B1, -- 𧃒
+ },
+ [0x2F9B2]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009B0x0002",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x456B },
+ ["unicodeslot"]=0x2F9B2, -- 䕫
+ },
+ [0x2F9B3]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009B0x0003",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8650 },
+ ["unicodeslot"]=0x2F9B3, -- 虐
+ },
+ [0x2F9B4]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009B0x0004",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x865C },
+ ["unicodeslot"]=0x2F9B4, -- 虜
+ },
+ [0x2F9B5]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009B0x0005",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8667 },
+ ["unicodeslot"]=0x2F9B5, -- 虧
+ },
+ [0x2F9B6]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009B0x0006",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8669 },
+ ["unicodeslot"]=0x2F9B6, -- 虩
+ },
+ [0x2F9B7]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009B0x0007",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x86A9 },
+ ["unicodeslot"]=0x2F9B7, -- 蚩
+ },
+ [0x2F9B8]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009B0x0008",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8688 },
+ ["unicodeslot"]=0x2F9B8, -- 蚈
+ },
+ [0x2F9B9]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009B0x0009",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x870E },
+ ["unicodeslot"]=0x2F9B9, -- 蜎
+ },
+ [0x2F9BA]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009BA",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x86E2 },
+ ["unicodeslot"]=0x2F9BA, -- 蛢
+ },
+ [0x2F9BB]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009BB",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8779 },
+ ["unicodeslot"]=0x2F9BB, -- 蝹
+ },
+ [0x2F9BC]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009BC",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8728 },
+ ["unicodeslot"]=0x2F9BC, -- 蜨
+ },
+ [0x2F9BD]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009BD",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x876B },
+ ["unicodeslot"]=0x2F9BD, -- 蝫
+ },
+ [0x2F9BE]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009BE",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8786 },
+ ["unicodeslot"]=0x2F9BE, -- 螆
+ },
+ [0x2F9BF]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009BF",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x45D7 },
+ ["unicodeslot"]=0x2F9BF, -- 䗗
+ },
+ [0x2F9C0]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009C0x0000",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x87E1 },
+ ["unicodeslot"]=0x2F9C0, -- 蟡
+ },
+ [0x2F9C1]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009C0x0001",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8801 },
+ ["unicodeslot"]=0x2F9C1, -- ð¯§
+ },
+ [0x2F9C2]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009C0x0002",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x45F9 },
+ ["unicodeslot"]=0x2F9C2, -- 䗹
+ },
+ [0x2F9C3]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009C0x0003",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8860 },
+ ["unicodeslot"]=0x2F9C3, -- 衠
+ },
+ [0x2F9C4]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009C0x0004",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8863 },
+ ["unicodeslot"]=0x2F9C4, -- 衣
+ },
+ [0x2F9C5]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009C0x0005",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x27667 },
+ ["unicodeslot"]=0x2F9C5, -- 𧙧
+ },
+ [0x2F9C6]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009C0x0006",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x88D7 },
+ ["unicodeslot"]=0x2F9C6, -- 裗
+ },
+ [0x2F9C7]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009C0x0007",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x88DE },
+ ["unicodeslot"]=0x2F9C7, -- 裞
+ },
+ [0x2F9C8]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009C0x0008",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x4635 },
+ ["unicodeslot"]=0x2F9C8, -- 䘵
+ },
+ [0x2F9C9]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009C0x0009",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x88FA },
+ ["unicodeslot"]=0x2F9C9, -- 裺
+ },
+ [0x2F9CA]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009CA",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x34BB },
+ ["unicodeslot"]=0x2F9CA, -- 㒻
+ },
+ [0x2F9CB]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009CB",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x278AE },
+ ["unicodeslot"]=0x2F9CB, -- 𧢮
+ },
+ [0x2F9CC]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009CC",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x27966 },
+ ["unicodeslot"]=0x2F9CC, -- 𧥦
+ },
+ [0x2F9CD]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009CD",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x46BE },
+ ["unicodeslot"]=0x2F9CD, -- ð¯§
+ },
+ [0x2F9CE]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009CE",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x46C7 },
+ ["unicodeslot"]=0x2F9CE, -- 䛇
+ },
+ [0x2F9CF]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009CF",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8AA0 },
+ ["unicodeslot"]=0x2F9CF, -- ð¯§
+ },
+ [0x2F9D0]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009D0x0000",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8AED },
+ ["unicodeslot"]=0x2F9D0, -- ð¯§
+ },
+ [0x2F9D1]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009D0x0001",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8B8A },
+ ["unicodeslot"]=0x2F9D1, -- 變
+ },
+ [0x2F9D2]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009D0x0002",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8C55 },
+ ["unicodeslot"]=0x2F9D2, -- 豕
+ },
+ [0x2F9D3]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009D0x0003",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x27CA8 },
+ ["unicodeslot"]=0x2F9D3, -- 𧲨
+ },
+ [0x2F9D4]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009D0x0004",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8CAB },
+ ["unicodeslot"]=0x2F9D4, -- 貫
+ },
+ [0x2F9D5]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009D0x0005",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8CC1 },
+ ["unicodeslot"]=0x2F9D5, -- 賁
+ },
+ [0x2F9D6]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009D0x0006",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8D1B },
+ ["unicodeslot"]=0x2F9D6, -- 贛
+ },
+ [0x2F9D7]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009D0x0007",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8D77 },
+ ["unicodeslot"]=0x2F9D7, -- 起
+ },
+ [0x2F9D8]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009D0x0008",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x27F2F },
+ ["unicodeslot"]=0x2F9D8, -- 𧼯
+ },
+ [0x2F9D9]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009D0x0009",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x20804 },
+ ["unicodeslot"]=0x2F9D9, -- 𠠄
+ },
+ [0x2F9DA]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009DA",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8DCB },
+ ["unicodeslot"]=0x2F9DA, -- 跋
+ },
+ [0x2F9DB]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009DB",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8DBC },
+ ["unicodeslot"]=0x2F9DB, -- 趼
+ },
+ [0x2F9DC]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009DC",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8DF0 },
+ ["unicodeslot"]=0x2F9DC, -- 跰
+ },
+ [0x2F9DD]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009DD",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x208DE },
+ ["unicodeslot"]=0x2F9DD, -- ð¯§
+ },
+ [0x2F9DE]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009DE",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8ED4 },
+ ["unicodeslot"]=0x2F9DE, -- 軔
+ },
+ [0x2F9DF]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009DF",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x8F38 },
+ ["unicodeslot"]=0x2F9DF, -- 輸
+ },
+ [0x2F9E0]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009E0x0000",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x285D2 },
+ ["unicodeslot"]=0x2F9E0, -- 𨗒
+ },
+ [0x2F9E1]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009E0x0001",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x285ED },
+ ["unicodeslot"]=0x2F9E1, -- 𨗭
+ },
+ [0x2F9E2]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009E0x0002",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x9094 },
+ ["unicodeslot"]=0x2F9E2, -- 邔
+ },
+ [0x2F9E3]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009E0x0003",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x90F1 },
+ ["unicodeslot"]=0x2F9E3, -- 郱
+ },
+ [0x2F9E4]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009E0x0004",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x9111 },
+ ["unicodeslot"]=0x2F9E4, -- 鄑
+ },
+ [0x2F9E5]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009E0x0005",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x2872E },
+ ["unicodeslot"]=0x2F9E5, -- 𨜮
+ },
+ [0x2F9E6]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009E0x0006",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x911B },
+ ["unicodeslot"]=0x2F9E6, -- 鄛
+ },
+ [0x2F9E7]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009E0x0007",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x9238 },
+ ["unicodeslot"]=0x2F9E7, -- 鈸
+ },
+ [0x2F9E8]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009E0x0008",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x92D7 },
+ ["unicodeslot"]=0x2F9E8, -- 鋗
+ },
+ [0x2F9E9]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009E0x0009",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x92D8 },
+ ["unicodeslot"]=0x2F9E9, -- 鋘
+ },
+ [0x2F9EA]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009EA",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x927C },
+ ["unicodeslot"]=0x2F9EA, -- 鉼
+ },
+ [0x2F9EB]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009EB",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x93F9 },
+ ["unicodeslot"]=0x2F9EB, -- 鏹
+ },
+ [0x2F9EC]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009EC",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x9415 },
+ ["unicodeslot"]=0x2F9EC, -- 鐕
+ },
+ [0x2F9ED]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009ED",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x28BFA },
+ ["unicodeslot"]=0x2F9ED, -- 𨯺
+ },
+ [0x2F9EE]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009EE",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x958B },
+ ["unicodeslot"]=0x2F9EE, -- 開
+ },
+ [0x2F9EF]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009EF",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x4995 },
+ ["unicodeslot"]=0x2F9EF, -- 䦕
+ },
+ [0x2F9F0]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009F0x0000",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x95B7 },
+ ["unicodeslot"]=0x2F9F0, -- 閷
+ },
+ [0x2F9F1]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009F0x0001",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x28D77 },
+ ["unicodeslot"]=0x2F9F1, -- 𨵷
+ },
+ [0x2F9F2]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009F0x0002",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x49E6 },
+ ["unicodeslot"]=0x2F9F2, -- 䧦
+ },
+ [0x2F9F3]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009F0x0003",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x96C3 },
+ ["unicodeslot"]=0x2F9F3, -- 雃
+ },
+ [0x2F9F4]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009F0x0004",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x5DB2 },
+ ["unicodeslot"]=0x2F9F4, -- 嶲
+ },
+ [0x2F9F5]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009F0x0005",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x9723 },
+ ["unicodeslot"]=0x2F9F5, -- 霣
+ },
+ [0x2F9F6]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009F0x0006",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x29145 },
+ ["unicodeslot"]=0x2F9F6, -- 𩅅
+ },
+ [0x2F9F7]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009F0x0007",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x2921A },
+ ["unicodeslot"]=0x2F9F7, -- 𩈚
+ },
+ [0x2F9F8]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009F0x0008",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x4A6E },
+ ["unicodeslot"]=0x2F9F8, -- 䩮
+ },
+ [0x2F9F9]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009F0x0009",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x4A76 },
+ ["unicodeslot"]=0x2F9F9, -- 䩶
+ },
+ [0x2F9FA]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009FA",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x97E0 },
+ ["unicodeslot"]=0x2F9FA, -- 韠
+ },
+ [0x2F9FB]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009FB",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x2940A },
+ ["unicodeslot"]=0x2F9FB, -- 𩐊
+ },
+ [0x2F9FC]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009FC",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x4AB2 },
+ ["unicodeslot"]=0x2F9FC, -- 䪲
+ },
+ [0x2F9FD]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009FD",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x29496 },
+ ["unicodeslot"]=0x2F9FD, -- 𩒖
+ },
+ [0x2F9FE]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009FE",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x980B },
+ ["unicodeslot"]=0x2F9FE, -- 頋
+ },
+ [0x2F9FF]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002F0x0009FF",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x980B },
+ ["unicodeslot"]=0x2F9FF, -- 頋
+ },
+ [0x2FA00]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002FA0x0000",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x9829 },
+ ["unicodeslot"]=0x2FA00, -- 頩
+ },
+ [0x2FA01]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002FA0x0001",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x295B6 },
+ ["unicodeslot"]=0x2FA01, -- ð¯¨
+ },
+ [0x2FA02]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002FA0x0002",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x98E2 },
+ ["unicodeslot"]=0x2FA02, -- 飢
+ },
+ [0x2FA03]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002FA0x0003",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x4B33 },
+ ["unicodeslot"]=0x2FA03, -- 䬳
+ },
+ [0x2FA04]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002FA0x0004",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x9929 },
+ ["unicodeslot"]=0x2FA04, -- 餩
+ },
+ [0x2FA05]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002FA0x0005",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x99A7 },
+ ["unicodeslot"]=0x2FA05, -- 馧
+ },
+ [0x2FA06]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002FA0x0006",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x99C2 },
+ ["unicodeslot"]=0x2FA06, -- 駂
+ },
+ [0x2FA07]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002FA0x0007",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x99FE },
+ ["unicodeslot"]=0x2FA07, -- 駾
+ },
+ [0x2FA08]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002FA0x0008",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x4BCE },
+ ["unicodeslot"]=0x2FA08, -- 䯎
+ },
+ [0x2FA09]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002FA0x0009",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x29B30 },
+ ["unicodeslot"]=0x2FA09, -- 𩬰
+ },
+ [0x2FA0A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002FA0x0000A",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x9B12 },
+ ["unicodeslot"]=0x2FA0A, -- 鬒
+ },
+ [0x2FA0B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002FA0x0000B",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x9C40 },
+ ["unicodeslot"]=0x2FA0B, -- 鱀
+ },
+ [0x2FA0C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002FA0x0000C",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x9CFD },
+ ["unicodeslot"]=0x2FA0C, -- 鳽
+ },
+ [0x2FA0D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002FA0x0000D",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x4CCE },
+ ["unicodeslot"]=0x2FA0D, -- ð¯¨
+ },
+ [0x2FA0E]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002FA0x0000E",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x4CED },
+ ["unicodeslot"]=0x2FA0E, -- 䳭
+ },
+ [0x2FA0F]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002FA0x0000F",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x9D67 },
+ ["unicodeslot"]=0x2FA0F, -- ð¯¨
+ },
+ [0x2FA10]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002FA0x000A",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x2A0CE },
+ ["unicodeslot"]=0x2FA10, -- ð¯¨
+ },
+ [0x2FA11]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002FA0x000B",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x4CF8 },
+ ["unicodeslot"]=0x2FA11, -- 䳸
+ },
+ [0x2FA12]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002FA0x000C",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x2A105 },
+ ["unicodeslot"]=0x2FA12, -- 𪄅
+ },
+ [0x2FA13]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002FA0x000D",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x2A20E },
+ ["unicodeslot"]=0x2FA13, -- 𪈎
+ },
+ [0x2FA14]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002FA0x000E",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x2A291 },
+ ["unicodeslot"]=0x2FA14, -- 𪊑
+ },
+ [0x2FA15]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002FA0x000F",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x9EBB },
+ ["unicodeslot"]=0x2FA15, -- 麻
+ },
+ [0x2FA16]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002FA0x0010",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x4D56 },
+ ["unicodeslot"]=0x2FA16, -- 䵖
+ },
+ [0x2FA17]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002FA0x0011",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x9EF9 },
+ ["unicodeslot"]=0x2FA17, -- 黹
+ },
+ [0x2FA18]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002FA0x0012",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x9EFE },
+ ["unicodeslot"]=0x2FA18, -- 黾
+ },
+ [0x2FA19]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002FA0x0013",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x9F05 },
+ ["unicodeslot"]=0x2FA19, -- 鼅
+ },
+ [0x2FA1A]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002FA0x0001A",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x9F0F },
+ ["unicodeslot"]=0x2FA1A, -- 鼏
+ },
+ [0x2FA1B]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002FA0x0001B",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x9F16 },
+ ["unicodeslot"]=0x2FA1B, -- 鼖
+ },
+ [0x2FA1C]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002FA0x0001C",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x9F3B },
+ ["unicodeslot"]=0x2FA1C, -- 鼻
+ },
+ [0x2FA1D]={
+ ["category"]="lo",
+ ["cjkwd"]="w",
+ ["description"]="CJK COMPATIBILITY IDEOGRAPH-0x0002FA0x0001D",
+ ["linebreak"]="id",
+ ["specials"]={ "char", 0x2A600 },
+ ["unicodeslot"]=0x2FA1D, -- ð¯¨
+ },
+ [0xE0001]={
+ ["category"]="cf",
+ ["description"]="LANGUAGE TAG",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0001, -- ó €
+ },
+ [0xE0020]={
+ ["category"]="cf",
+ ["description"]="TAG SPACE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0020, -- ó € 
+ },
+ [0xE0021]={
+ ["category"]="cf",
+ ["description"]="TAG EXCLAMATION MARK",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0021, -- 󠀡
+ },
+ [0xE0022]={
+ ["category"]="cf",
+ ["description"]="TAG QUOTATION MARK",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0022, -- ó €¢
+ },
+ [0xE0023]={
+ ["category"]="cf",
+ ["description"]="TAG NUMBER SIGN",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0023, -- ó €£
+ },
+ [0xE0024]={
+ ["category"]="cf",
+ ["description"]="TAG DOLLAR SIGN",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0024, -- 󠀤
+ },
+ [0xE0025]={
+ ["category"]="cf",
+ ["description"]="TAG PERCENT SIGN",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0025, -- ó €¥
+ },
+ [0xE0026]={
+ ["category"]="cf",
+ ["description"]="TAG AMPERSAND",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0026, -- 󠀦
+ },
+ [0xE0027]={
+ ["category"]="cf",
+ ["description"]="TAG APOSTROPHE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0027, -- 󠀧
+ },
+ [0xE0028]={
+ ["category"]="cf",
+ ["description"]="TAG LEFT PARENTHESIS",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0028, -- 󠀨
+ },
+ [0xE0029]={
+ ["category"]="cf",
+ ["description"]="TAG RIGHT PARENTHESIS",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0029, -- 󠀩
+ },
+ [0xE002A]={
+ ["category"]="cf",
+ ["description"]="TAG ASTERISK",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE002A, -- 󠀪
+ },
+ [0xE002B]={
+ ["category"]="cf",
+ ["description"]="TAG PLUS SIGN",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE002B, -- 󠀫
+ },
+ [0xE002C]={
+ ["category"]="cf",
+ ["description"]="TAG COMMA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE002C, -- 󠀬
+ },
+ [0xE002D]={
+ ["category"]="cf",
+ ["description"]="TAG HYPHEN-MINUS",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE002D, -- ó €­
+ },
+ [0xE002E]={
+ ["category"]="cf",
+ ["description"]="TAG FULL STOP",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE002E, -- ó €®
+ },
+ [0xE002F]={
+ ["category"]="cf",
+ ["description"]="TAG SOLIDUS",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE002F, -- 󠀯
+ },
+ [0xE0030]={
+ ["category"]="cf",
+ ["description"]="TAG DIGIT ZERO",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0030, -- ó €°
+ },
+ [0xE0031]={
+ ["category"]="cf",
+ ["description"]="TAG DIGIT ONE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0031, -- ó €±
+ },
+ [0xE0032]={
+ ["category"]="cf",
+ ["description"]="TAG DIGIT TWO",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0032, -- ó €²
+ },
+ [0xE0033]={
+ ["category"]="cf",
+ ["description"]="TAG DIGIT THREE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0033, -- ó €³
+ },
+ [0xE0034]={
+ ["category"]="cf",
+ ["description"]="TAG DIGIT FOUR",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0034, -- ó €´
+ },
+ [0xE0035]={
+ ["category"]="cf",
+ ["description"]="TAG DIGIT FIVE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0035, -- ó €µ
+ },
+ [0xE0036]={
+ ["category"]="cf",
+ ["description"]="TAG DIGIT SIX",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0036, -- 󠀶
+ },
+ [0xE0037]={
+ ["category"]="cf",
+ ["description"]="TAG DIGIT SEVEN",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0037, -- ó €·
+ },
+ [0xE0038]={
+ ["category"]="cf",
+ ["description"]="TAG DIGIT EIGHT",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0038, -- 󠀸
+ },
+ [0xE0039]={
+ ["category"]="cf",
+ ["description"]="TAG DIGIT NINE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0039, -- ó €¹
+ },
+ [0xE003A]={
+ ["category"]="cf",
+ ["description"]="TAG COLON",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE003A, -- 󠀺
+ },
+ [0xE003B]={
+ ["category"]="cf",
+ ["description"]="TAG SEMICOLON",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE003B, -- ó €»
+ },
+ [0xE003C]={
+ ["category"]="cf",
+ ["description"]="TAG LESS-THAN SIGN",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE003C, -- ó €¼
+ },
+ [0xE003D]={
+ ["category"]="cf",
+ ["description"]="TAG EQUALS SIGN",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE003D, -- ó €½
+ },
+ [0xE003E]={
+ ["category"]="cf",
+ ["description"]="TAG GREATER-THAN SIGN",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE003E, -- ó €¾
+ },
+ [0xE003F]={
+ ["category"]="cf",
+ ["description"]="TAG QUESTION MARK",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE003F, -- 󠀿
+ },
+ [0xE0040]={
+ ["category"]="cf",
+ ["description"]="TAG COMMERCIAL AT",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0040, -- ó €
+ },
+ [0xE0041]={
+ ["category"]="cf",
+ ["description"]="TAG LATIN CAPITAL LETTER A",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0041, -- ó 
+ },
+ [0xE0042]={
+ ["category"]="cf",
+ ["description"]="TAG LATIN CAPITAL LETTER B",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0042, -- ó ‚
+ },
+ [0xE0043]={
+ ["category"]="cf",
+ ["description"]="TAG LATIN CAPITAL LETTER C",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0043, -- ó ƒ
+ },
+ [0xE0044]={
+ ["category"]="cf",
+ ["description"]="TAG LATIN CAPITAL LETTER D",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0044, -- ó „
+ },
+ [0xE0045]={
+ ["category"]="cf",
+ ["description"]="TAG LATIN CAPITAL LETTER E",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0045, -- ó …
+ },
+ [0xE0046]={
+ ["category"]="cf",
+ ["description"]="TAG LATIN CAPITAL LETTER F",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0046, -- ó †
+ },
+ [0xE0047]={
+ ["category"]="cf",
+ ["description"]="TAG LATIN CAPITAL LETTER G",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0047, -- ó ‡
+ },
+ [0xE0048]={
+ ["category"]="cf",
+ ["description"]="TAG LATIN CAPITAL LETTER H",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0048, -- ó ˆ
+ },
+ [0xE0049]={
+ ["category"]="cf",
+ ["description"]="TAG LATIN CAPITAL LETTER I",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0049, -- ó ‰
+ },
+ [0xE004A]={
+ ["category"]="cf",
+ ["description"]="TAG LATIN CAPITAL LETTER J",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE004A, -- ó Š
+ },
+ [0xE004B]={
+ ["category"]="cf",
+ ["description"]="TAG LATIN CAPITAL LETTER K",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE004B, -- ó ‹
+ },
+ [0xE004C]={
+ ["category"]="cf",
+ ["description"]="TAG LATIN CAPITAL LETTER L",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE004C, -- ó Œ
+ },
+ [0xE004D]={
+ ["category"]="cf",
+ ["description"]="TAG LATIN CAPITAL LETTER M",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE004D, -- ó 
+ },
+ [0xE004E]={
+ ["category"]="cf",
+ ["description"]="TAG LATIN CAPITAL LETTER N",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE004E, -- ó Ž
+ },
+ [0xE004F]={
+ ["category"]="cf",
+ ["description"]="TAG LATIN CAPITAL LETTER O",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE004F, -- ó 
+ },
+ [0xE0050]={
+ ["category"]="cf",
+ ["description"]="TAG LATIN CAPITAL LETTER P",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0050, -- ó 
+ },
+ [0xE0051]={
+ ["category"]="cf",
+ ["description"]="TAG LATIN CAPITAL LETTER Q",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0051, -- ó ‘
+ },
+ [0xE0052]={
+ ["category"]="cf",
+ ["description"]="TAG LATIN CAPITAL LETTER R",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0052, -- ó ’
+ },
+ [0xE0053]={
+ ["category"]="cf",
+ ["description"]="TAG LATIN CAPITAL LETTER S",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0053, -- ó “
+ },
+ [0xE0054]={
+ ["category"]="cf",
+ ["description"]="TAG LATIN CAPITAL LETTER T",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0054, -- ó ”
+ },
+ [0xE0055]={
+ ["category"]="cf",
+ ["description"]="TAG LATIN CAPITAL LETTER U",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0055, -- ó •
+ },
+ [0xE0056]={
+ ["category"]="cf",
+ ["description"]="TAG LATIN CAPITAL LETTER V",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0056, -- ó –
+ },
+ [0xE0057]={
+ ["category"]="cf",
+ ["description"]="TAG LATIN CAPITAL LETTER W",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0057, -- ó —
+ },
+ [0xE0058]={
+ ["category"]="cf",
+ ["description"]="TAG LATIN CAPITAL LETTER X",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0058, -- ó ˜
+ },
+ [0xE0059]={
+ ["category"]="cf",
+ ["description"]="TAG LATIN CAPITAL LETTER Y",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0059, -- ó ™
+ },
+ [0xE005A]={
+ ["category"]="cf",
+ ["description"]="TAG LATIN CAPITAL LETTER Z",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE005A, -- ó š
+ },
+ [0xE005B]={
+ ["category"]="cf",
+ ["description"]="TAG LEFT SQUARE BRACKET",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE005B, -- ó ›
+ },
+ [0xE005C]={
+ ["category"]="cf",
+ ["description"]="TAG REVERSE SOLIDUS",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE005C, -- ó œ
+ },
+ [0xE005D]={
+ ["category"]="cf",
+ ["description"]="TAG RIGHT SQUARE BRACKET",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE005D, -- ó 
+ },
+ [0xE005E]={
+ ["category"]="cf",
+ ["description"]="TAG CIRCUMFLEX ACCENT",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE005E, -- ó ž
+ },
+ [0xE005F]={
+ ["category"]="cf",
+ ["description"]="TAG LOW LINE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE005F, -- ó Ÿ
+ },
+ [0xE0060]={
+ ["category"]="cf",
+ ["description"]="TAG GRAVE ACCENT",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0060, -- ó  
+ },
+ [0xE0061]={
+ ["category"]="cf",
+ ["description"]="TAG LATIN SMALL LETTER A",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0061, -- ó ¡
+ },
+ [0xE0062]={
+ ["category"]="cf",
+ ["description"]="TAG LATIN SMALL LETTER B",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0062, -- ó ¢
+ },
+ [0xE0063]={
+ ["category"]="cf",
+ ["description"]="TAG LATIN SMALL LETTER C",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0063, -- ó £
+ },
+ [0xE0064]={
+ ["category"]="cf",
+ ["description"]="TAG LATIN SMALL LETTER D",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0064, -- ó ¤
+ },
+ [0xE0065]={
+ ["category"]="cf",
+ ["description"]="TAG LATIN SMALL LETTER E",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0065, -- ó ¥
+ },
+ [0xE0066]={
+ ["category"]="cf",
+ ["description"]="TAG LATIN SMALL LETTER F",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0066, -- ó ¦
+ },
+ [0xE0067]={
+ ["category"]="cf",
+ ["description"]="TAG LATIN SMALL LETTER G",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0067, -- ó §
+ },
+ [0xE0068]={
+ ["category"]="cf",
+ ["description"]="TAG LATIN SMALL LETTER H",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0068, -- ó ¨
+ },
+ [0xE0069]={
+ ["category"]="cf",
+ ["description"]="TAG LATIN SMALL LETTER I",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0069, -- ó ©
+ },
+ [0xE006A]={
+ ["category"]="cf",
+ ["description"]="TAG LATIN SMALL LETTER J",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE006A, -- ó ª
+ },
+ [0xE006B]={
+ ["category"]="cf",
+ ["description"]="TAG LATIN SMALL LETTER K",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE006B, -- ó «
+ },
+ [0xE006C]={
+ ["category"]="cf",
+ ["description"]="TAG LATIN SMALL LETTER L",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE006C, -- ó ¬
+ },
+ [0xE006D]={
+ ["category"]="cf",
+ ["description"]="TAG LATIN SMALL LETTER M",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE006D, -- ó ­
+ },
+ [0xE006E]={
+ ["category"]="cf",
+ ["description"]="TAG LATIN SMALL LETTER N",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE006E, -- ó ®
+ },
+ [0xE006F]={
+ ["category"]="cf",
+ ["description"]="TAG LATIN SMALL LETTER O",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE006F, -- ó ¯
+ },
+ [0xE0070]={
+ ["category"]="cf",
+ ["description"]="TAG LATIN SMALL LETTER P",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0070, -- ó °
+ },
+ [0xE0071]={
+ ["category"]="cf",
+ ["description"]="TAG LATIN SMALL LETTER Q",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0071, -- ó ±
+ },
+ [0xE0072]={
+ ["category"]="cf",
+ ["description"]="TAG LATIN SMALL LETTER R",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0072, -- ó ²
+ },
+ [0xE0073]={
+ ["category"]="cf",
+ ["description"]="TAG LATIN SMALL LETTER S",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0073, -- ó ³
+ },
+ [0xE0074]={
+ ["category"]="cf",
+ ["description"]="TAG LATIN SMALL LETTER T",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0074, -- ó ´
+ },
+ [0xE0075]={
+ ["category"]="cf",
+ ["description"]="TAG LATIN SMALL LETTER U",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0075, -- ó µ
+ },
+ [0xE0076]={
+ ["category"]="cf",
+ ["description"]="TAG LATIN SMALL LETTER V",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0076, -- ó ¶
+ },
+ [0xE0077]={
+ ["category"]="cf",
+ ["description"]="TAG LATIN SMALL LETTER W",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0077, -- ó ·
+ },
+ [0xE0078]={
+ ["category"]="cf",
+ ["description"]="TAG LATIN SMALL LETTER X",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0078, -- ó ¸
+ },
+ [0xE0079]={
+ ["category"]="cf",
+ ["description"]="TAG LATIN SMALL LETTER Y",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0079, -- ó ¹
+ },
+ [0xE007A]={
+ ["category"]="cf",
+ ["description"]="TAG LATIN SMALL LETTER Z",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE007A, -- ó º
+ },
+ [0xE007B]={
+ ["category"]="cf",
+ ["description"]="TAG LEFT CURLY BRACKET",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE007B, -- ó »
+ },
+ [0xE007C]={
+ ["category"]="cf",
+ ["description"]="TAG VERTICAL LINE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE007C, -- ó ¼
+ },
+ [0xE007D]={
+ ["category"]="cf",
+ ["description"]="TAG RIGHT CURLY BRACKET",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE007D, -- ó ½
+ },
+ [0xE007E]={
+ ["category"]="cf",
+ ["description"]="TAG TILDE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE007E, -- ó ¾
+ },
+ [0xE007F]={
+ ["category"]="cf",
+ ["description"]="CANCEL TAG",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE007F, -- ó ¿
+ },
+ [0xE0100]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0011",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0100, -- ó „€
+ },
+ [0xE0101]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0012",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0101, -- ó „
+ },
+ [0xE0102]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0013",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0102, -- ó „‚
+ },
+ [0xE0103]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0014",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0103, -- 󠄃
+ },
+ [0xE0104]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0015",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0104, -- ó „„
+ },
+ [0xE0105]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0016",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0105, -- ó „…
+ },
+ [0xE0106]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0017",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0106, -- 󠄆
+ },
+ [0xE0107]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0018",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0107, -- 󠄇
+ },
+ [0xE0108]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0019",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0108, -- 󠄈
+ },
+ [0xE0109]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x001A",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0109, -- 󠄉
+ },
+ [0xE010A]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x001B",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE010A, -- ó „Š
+ },
+ [0xE010B]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x001C",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE010B, -- ó „‹
+ },
+ [0xE010C]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x001D",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE010C, -- 󠄌
+ },
+ [0xE010D]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x001E",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE010D, -- ó „
+ },
+ [0xE010E]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x001F",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE010E, -- ó „Ž
+ },
+ [0xE010F]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0020",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE010F, -- ó „
+ },
+ [0xE0110]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0021",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0110, -- ó „
+ },
+ [0xE0111]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0022",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0111, -- ó „‘
+ },
+ [0xE0112]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0023",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0112, -- ó „’
+ },
+ [0xE0113]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0024",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0113, -- ó „“
+ },
+ [0xE0114]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0025",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0114, -- ó „”
+ },
+ [0xE0115]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0026",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0115, -- ó „•
+ },
+ [0xE0116]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0027",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0116, -- ó „–
+ },
+ [0xE0117]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0028",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0117, -- ó „—
+ },
+ [0xE0118]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0029",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0118, -- 󠄘
+ },
+ [0xE0119]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x002A",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0119, -- ó „™
+ },
+ [0xE011A]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x002B",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE011A, -- ó „š
+ },
+ [0xE011B]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x002C",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE011B, -- ó „›
+ },
+ [0xE011C]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x002D",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE011C, -- 󠄜
+ },
+ [0xE011D]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x002E",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE011D, -- ó „
+ },
+ [0xE011E]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x002F",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE011E, -- ó „ž
+ },
+ [0xE011F]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0030",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE011F, -- ó „Ÿ
+ },
+ [0xE0120]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0031",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0120, -- ó „ 
+ },
+ [0xE0121]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0032",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0121, -- ó „¡
+ },
+ [0xE0122]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0033",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0122, -- ó „¢
+ },
+ [0xE0123]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0034",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0123, -- ó „£
+ },
+ [0xE0124]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0035",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0124, -- 󠄤
+ },
+ [0xE0125]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0036",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0125, -- ó „¥
+ },
+ [0xE0126]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0037",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0126, -- 󠄦
+ },
+ [0xE0127]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0038",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0127, -- 󠄧
+ },
+ [0xE0128]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0039",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0128, -- 󠄨
+ },
+ [0xE0129]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x003A",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0129, -- ó „©
+ },
+ [0xE012A]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x003B",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE012A, -- 󠄪
+ },
+ [0xE012B]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x003C",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE012B, -- ó „«
+ },
+ [0xE012C]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x003D",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE012C, -- 󠄬
+ },
+ [0xE012D]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x003E",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE012D, -- ó „­
+ },
+ [0xE012E]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x003F",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE012E, -- ó „®
+ },
+ [0xE012F]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0040",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE012F, -- 󠄯
+ },
+ [0xE0130]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0041",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0130, -- ó „°
+ },
+ [0xE0131]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0042",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0131, -- ó „±
+ },
+ [0xE0132]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0043",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0132, -- ó „²
+ },
+ [0xE0133]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0044",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0133, -- ó „³
+ },
+ [0xE0134]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0045",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0134, -- ó „´
+ },
+ [0xE0135]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0046",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0135, -- ó „µ
+ },
+ [0xE0136]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0047",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0136, -- 󠄶
+ },
+ [0xE0137]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0048",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0137, -- ó „·
+ },
+ [0xE0138]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0049",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0138, -- 󠄸
+ },
+ [0xE0139]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x004A",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0139, -- ó „¹
+ },
+ [0xE013A]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x004B",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE013A, -- 󠄺
+ },
+ [0xE013B]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x004C",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE013B, -- ó „»
+ },
+ [0xE013C]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x004D",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE013C, -- ó „¼
+ },
+ [0xE013D]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x004E",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE013D, -- ó „½
+ },
+ [0xE013E]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x004F",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE013E, -- ó „¾
+ },
+ [0xE013F]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0050",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE013F, -- ó „¿
+ },
+ [0xE0140]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0051",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0140, -- ó …€
+ },
+ [0xE0141]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0052",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0141, -- ó …
+ },
+ [0xE0142]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0053",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0142, -- ó …‚
+ },
+ [0xE0143]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0054",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0143, -- ó …ƒ
+ },
+ [0xE0144]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0055",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0144, -- ó …„
+ },
+ [0xE0145]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0056",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0145, -- ó ……
+ },
+ [0xE0146]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0057",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0146, -- ó …†
+ },
+ [0xE0147]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0058",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0147, -- ó …‡
+ },
+ [0xE0148]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0059",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0148, -- ó …ˆ
+ },
+ [0xE0149]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x005A",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0149, -- ó …‰
+ },
+ [0xE014A]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x005B",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE014A, -- ó …Š
+ },
+ [0xE014B]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x005C",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE014B, -- ó …‹
+ },
+ [0xE014C]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x005D",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE014C, -- 󠅌
+ },
+ [0xE014D]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x005E",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE014D, -- ó …
+ },
+ [0xE014E]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x005F",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE014E, -- ó …Ž
+ },
+ [0xE014F]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0060",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE014F, -- ó …
+ },
+ [0xE0150]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0061",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0150, -- ó …
+ },
+ [0xE0151]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0062",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0151, -- ó …‘
+ },
+ [0xE0152]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0063",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0152, -- ó …’
+ },
+ [0xE0153]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0064",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0153, -- ó …“
+ },
+ [0xE0154]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0065",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0154, -- ó …”
+ },
+ [0xE0155]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0066",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0155, -- ó …•
+ },
+ [0xE0156]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0067",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0156, -- ó …–
+ },
+ [0xE0157]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0068",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0157, -- ó …—
+ },
+ [0xE0158]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0069",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0158, -- ó …˜
+ },
+ [0xE0159]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x006A",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0159, -- ó …™
+ },
+ [0xE015A]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x006B",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE015A, -- ó …š
+ },
+ [0xE015B]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x006C",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE015B, -- ó …›
+ },
+ [0xE015C]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x006D",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE015C, -- 󠅜
+ },
+ [0xE015D]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x006E",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE015D, -- ó …
+ },
+ [0xE015E]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x006F",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE015E, -- ó …ž
+ },
+ [0xE015F]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0070",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE015F, -- ó …Ÿ
+ },
+ [0xE0160]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0071",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0160, -- ó … 
+ },
+ [0xE0161]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0072",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0161, -- ó …¡
+ },
+ [0xE0162]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0073",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0162, -- ó …¢
+ },
+ [0xE0163]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0074",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0163, -- ó …£
+ },
+ [0xE0164]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0075",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0164, -- ó …¤
+ },
+ [0xE0165]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0076",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0165, -- ó …¥
+ },
+ [0xE0166]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0077",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0166, -- ó …¦
+ },
+ [0xE0167]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0078",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0167, -- ó …§
+ },
+ [0xE0168]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0079",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0168, -- ó …¨
+ },
+ [0xE0169]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x007A",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0169, -- ó …©
+ },
+ [0xE016A]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x007B",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE016A, -- ó …ª
+ },
+ [0xE016B]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x007C",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE016B, -- ó …«
+ },
+ [0xE016C]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x007D",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE016C, -- ó …¬
+ },
+ [0xE016D]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x007E",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE016D, -- ó …­
+ },
+ [0xE016E]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x007F",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE016E, -- ó …®
+ },
+ [0xE016F]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0080",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE016F, -- ó …¯
+ },
+ [0xE0170]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0081",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0170, -- ó …°
+ },
+ [0xE0171]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0082",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0171, -- ó …±
+ },
+ [0xE0172]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0083",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0172, -- ó …²
+ },
+ [0xE0173]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0084",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0173, -- ó …³
+ },
+ [0xE0174]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0085",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0174, -- ó …´
+ },
+ [0xE0175]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0086",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0175, -- ó …µ
+ },
+ [0xE0176]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0087",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0176, -- ó …¶
+ },
+ [0xE0177]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0088",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0177, -- ó …·
+ },
+ [0xE0178]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0089",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0178, -- ó …¸
+ },
+ [0xE0179]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x008A",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0179, -- ó …¹
+ },
+ [0xE017A]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x008B",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE017A, -- ó …º
+ },
+ [0xE017B]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x008C",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE017B, -- ó …»
+ },
+ [0xE017C]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x008D",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE017C, -- ó …¼
+ },
+ [0xE017D]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x008E",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE017D, -- ó …½
+ },
+ [0xE017E]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x008F",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE017E, -- ó …¾
+ },
+ [0xE017F]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0090",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE017F, -- ó …¿
+ },
+ [0xE0180]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0091",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0180, -- 󠆀
+ },
+ [0xE0181]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0092",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0181, -- ó †
+ },
+ [0xE0182]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0093",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0182, -- 󠆂
+ },
+ [0xE0183]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0094",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0183, -- 󠆃
+ },
+ [0xE0184]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0095",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0184, -- 󠆄
+ },
+ [0xE0185]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0096",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0185, -- ó †…
+ },
+ [0xE0186]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0097",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0186, -- 󠆆
+ },
+ [0xE0187]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0098",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0187, -- 󠆇
+ },
+ [0xE0188]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0099",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0188, -- 󠆈
+ },
+ [0xE0189]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x009A",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0189, -- 󠆉
+ },
+ [0xE018A]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x009B",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE018A, -- 󠆊
+ },
+ [0xE018B]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x009C",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE018B, -- 󠆋
+ },
+ [0xE018C]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x009D",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE018C, -- 󠆌
+ },
+ [0xE018D]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x009E",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE018D, -- ó †
+ },
+ [0xE018E]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x009F",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE018E, -- 󠆎
+ },
+ [0xE018F]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00A0",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE018F, -- ó †
+ },
+ [0xE0190]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00A1",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0190, -- ó †
+ },
+ [0xE0191]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00A2",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0191, -- 󠆑
+ },
+ [0xE0192]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00A3",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0192, -- ó †’
+ },
+ [0xE0193]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00A4",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0193, -- 󠆓
+ },
+ [0xE0194]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00A5",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0194, -- 󠆔
+ },
+ [0xE0195]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00A6",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0195, -- 󠆕
+ },
+ [0xE0196]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00A7",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0196, -- ó †–
+ },
+ [0xE0197]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00A8",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0197, -- ó †—
+ },
+ [0xE0198]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00A9",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0198, -- 󠆘
+ },
+ [0xE0199]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00AA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE0199, -- 󠆙
+ },
+ [0xE019A]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00AB",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE019A, -- 󠆚
+ },
+ [0xE019B]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00AC",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE019B, -- 󠆛
+ },
+ [0xE019C]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00AD",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE019C, -- 󠆜
+ },
+ [0xE019D]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00AE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE019D, -- ó †
+ },
+ [0xE019E]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00AF",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE019E, -- 󠆞
+ },
+ [0xE019F]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00B0",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE019F, -- 󠆟
+ },
+ [0xE01A0]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00B1",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01A0, -- ó † 
+ },
+ [0xE01A1]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00B2",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01A1, -- 󠆡
+ },
+ [0xE01A2]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00B3",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01A2, -- 󠆢
+ },
+ [0xE01A3]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00B4",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01A3, -- 󠆣
+ },
+ [0xE01A4]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00B5",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01A4, -- 󠆤
+ },
+ [0xE01A5]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00B6",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01A5, -- 󠆥
+ },
+ [0xE01A6]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00B7",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01A6, -- 󠆦
+ },
+ [0xE01A7]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00B8",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01A7, -- 󠆧
+ },
+ [0xE01A8]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00B9",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01A8, -- 󠆨
+ },
+ [0xE01A9]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00BA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01A9, -- 󠆩
+ },
+ [0xE01AA]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00BB",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01AA, -- 󠆪
+ },
+ [0xE01AB]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00BC",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01AB, -- 󠆫
+ },
+ [0xE01AC]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00BD",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01AC, -- 󠆬
+ },
+ [0xE01AD]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00BE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01AD, -- ó †­
+ },
+ [0xE01AE]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00BF",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01AE, -- 󠆮
+ },
+ [0xE01AF]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00C0",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01AF, -- 󠆯
+ },
+ [0xE01B0]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00C1",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01B0, -- ó †°
+ },
+ [0xE01B1]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00C2",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01B1, -- 󠆱
+ },
+ [0xE01B2]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00C3",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01B2, -- 󠆲
+ },
+ [0xE01B3]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00C4",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01B3, -- 󠆳
+ },
+ [0xE01B4]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00C5",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01B4, -- ó †´
+ },
+ [0xE01B5]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00C6",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01B5, -- 󠆵
+ },
+ [0xE01B6]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00C7",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01B6, -- 󠆶
+ },
+ [0xE01B7]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00C8",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01B7, -- ó †·
+ },
+ [0xE01B8]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00C9",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01B8, -- 󠆸
+ },
+ [0xE01B9]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00CA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01B9, -- 󠆹
+ },
+ [0xE01BA]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00CB",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01BA, -- 󠆺
+ },
+ [0xE01BB]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00CC",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01BB, -- 󠆻
+ },
+ [0xE01BC]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00CD",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01BC, -- 󠆼
+ },
+ [0xE01BD]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00CE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01BD, -- 󠆽
+ },
+ [0xE01BE]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00CF",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01BE, -- 󠆾
+ },
+ [0xE01BF]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00D0",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01BF, -- 󠆿
+ },
+ [0xE01C0]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00D1",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01C0, -- 󠇀
+ },
+ [0xE01C1]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00D2",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01C1, -- ó ‡
+ },
+ [0xE01C2]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00D3",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01C2, -- 󠇂
+ },
+ [0xE01C3]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00D4",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01C3, -- 󠇃
+ },
+ [0xE01C4]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00D5",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01C4, -- 󠇄
+ },
+ [0xE01C5]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00D6",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01C5, -- ó ‡…
+ },
+ [0xE01C6]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00D7",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01C6, -- 󠇆
+ },
+ [0xE01C7]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00D8",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01C7, -- 󠇇
+ },
+ [0xE01C8]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00D9",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01C8, -- 󠇈
+ },
+ [0xE01C9]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00DA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01C9, -- 󠇉
+ },
+ [0xE01CA]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00DB",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01CA, -- 󠇊
+ },
+ [0xE01CB]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00DC",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01CB, -- 󠇋
+ },
+ [0xE01CC]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00DD",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01CC, -- 󠇌
+ },
+ [0xE01CD]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00DE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01CD, -- ó ‡
+ },
+ [0xE01CE]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00DF",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01CE, -- 󠇎
+ },
+ [0xE01CF]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00E0",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01CF, -- ó ‡
+ },
+ [0xE01D0]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00E1",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01D0, -- ó ‡
+ },
+ [0xE01D1]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00E2",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01D1, -- 󠇑
+ },
+ [0xE01D2]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00E3",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01D2, -- ó ‡’
+ },
+ [0xE01D3]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00E4",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01D3, -- 󠇓
+ },
+ [0xE01D4]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00E5",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01D4, -- 󠇔
+ },
+ [0xE01D5]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00E6",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01D5, -- 󠇕
+ },
+ [0xE01D6]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00E7",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01D6, -- ó ‡–
+ },
+ [0xE01D7]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00E8",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01D7, -- ó ‡—
+ },
+ [0xE01D8]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00E9",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01D8, -- 󠇘
+ },
+ [0xE01D9]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00EA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01D9, -- 󠇙
+ },
+ [0xE01DA]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00EB",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01DA, -- 󠇚
+ },
+ [0xE01DB]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00EC",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01DB, -- 󠇛
+ },
+ [0xE01DC]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00ED",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01DC, -- 󠇜
+ },
+ [0xE01DD]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00EE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01DD, -- ó ‡
+ },
+ [0xE01DE]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00EF",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01DE, -- 󠇞
+ },
+ [0xE01DF]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00F0",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01DF, -- 󠇟
+ },
+ [0xE01E0]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00F1",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01E0, -- ó ‡ 
+ },
+ [0xE01E1]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00F2",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01E1, -- 󠇡
+ },
+ [0xE01E2]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00F3",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01E2, -- 󠇢
+ },
+ [0xE01E3]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00F4",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01E3, -- 󠇣
+ },
+ [0xE01E4]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00F5",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01E4, -- 󠇤
+ },
+ [0xE01E5]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00F6",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01E5, -- 󠇥
+ },
+ [0xE01E6]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00F7",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01E6, -- 󠇦
+ },
+ [0xE01E7]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00F8",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01E7, -- 󠇧
+ },
+ [0xE01E8]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00F9",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01E8, -- 󠇨
+ },
+ [0xE01E9]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00FA",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01E9, -- 󠇩
+ },
+ [0xE01EA]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00FB",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01EA, -- 󠇪
+ },
+ [0xE01EB]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00FC",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01EB, -- 󠇫
+ },
+ [0xE01EC]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00FD",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01EC, -- 󠇬
+ },
+ [0xE01ED]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00FE",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01ED, -- ó ‡­
+ },
+ [0xE01EE]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x00FF",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01EE, -- 󠇮
+ },
+ [0xE01EF]={
+ ["category"]="mn",
+ ["cjkwd"]="a",
+ ["description"]="VARIATION SELECTOR-0x0100",
+ ["linebreak"]="cm",
+ ["unicodeslot"]=0xE01EF, -- 󠇯
+ },
+ [0xF0000]={
+ ["category"]="co",
+ ["cjkwd"]="a",
+ ["description"]="<Plane 0x000F Private Use, First>",
+ ["unicodeslot"]=0xF0000, -- ó°€€
+ },
+ [0xFFFFD]={
+ ["category"]="co",
+ ["cjkwd"]="a",
+ ["description"]="<Plane 0x000F Private Use, Last>",
+ ["unicodeslot"]=0xFFFFD, -- ó¿¿½
+ },
+ [0x100000]={
+ ["category"]="co",
+ ["cjkwd"]="a",
+ ["description"]="<Plane 0x0010 Private Use, First>",
+ ["unicodeslot"]=0x100000, -- ô€€€
+ },
+ [0x10FFFD]={
+ ["category"]="co",
+ ["cjkwd"]="a",
+ ["description"]="<Plane 0x0010 Private Use, Last>",
+ ["unicodeslot"]=0x10FFFD, -- ô¿½
+ },
+}
diff --git a/Master/texmf-dist/tex/context/base/char-def.tex b/Master/texmf-dist/tex/context/base/char-def.tex
new file mode 100644
index 00000000000..39137241d95
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/char-def.tex
@@ -0,0 +1,50 @@
+%D \module
+%D [ file=char-def,
+%D version=2005.04.25,
+%D title=\CONTEXT\ Lua Macros,
+%D subtitle=Unicode Support,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright=PRAGMA]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{Unicode Support (tables)}
+
+\unprotect
+
+%D An auxiliary macro:
+
+\def\setcclcuc #1 #2 #3 %
+ {\global\catcode#1=11 %
+ \global\lccode #1=#2 %
+ \global\uccode #1=#3 }
+
+\registerctxluafile{char-def}{1.001}
+\registerctxluafile{char-map}{1.001}
+\registerctxluafile{char-syn}{1.001}
+
+%D The codes are stored in the format, so we don't need to reinitialize
+%D them (unless of course we have adapted the table).
+
+\ctxlua{characters.setcodes()}
+
+% \startruntimeluacode
+% \ctxlua{characters.setpdfunicodes()}% pdftounicode mappings can only be done runtime
+% \stopruntimeluacode
+
+%D This is needed for Turkish:
+
+\setcclcuc "201C "201C "201C
+\setcclcuc "201D "201D "201D
+
+\protect \endinput
+
+% \ctxlua{characters.context.show(123)}
+% \ctxlua{characters.context.show(0x7B)}
+% \ctxlua{characters.context.show("7B")}
+
+% \dostepwiserecurse{`A}{`Z}{1}
+% {\ctxlua{characters.context.show(\recurselevel)}}
diff --git a/Master/texmf-dist/tex/context/base/char-ini.lua b/Master/texmf-dist/tex/context/base/char-ini.lua
new file mode 100644
index 00000000000..f44eb8acacd
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/char-ini.lua
@@ -0,0 +1,408 @@
+if not modules then modules = { } end modules ['char-ini'] = {
+ version = 1.001,
+ comment = "companion to char-ini.tex",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+utf = utf or unicode.utf
+tex = tex or { }
+
+local format = string.format
+
+--[[ldx--
+<p>This module implements some methods and creates additional datastructured
+from the big character table that we use for all kind of purposes:
+<type>char-def.lua</type>.</p>
+--ldx]]--
+
+characters = characters or { }
+characters.data = characters.data or { }
+characters.synonyms = characters.synonyms or { }
+characters.context = characters.context or { }
+
+characters.categories = {
+ lu = "Letter Uppercase",
+ ll = "Letter Lowercase",
+ lt = "Letter Titlecase",
+ lm = "Letter Modifier",
+ lo = "Letter Other",
+ mn = "Mark Nonspacing",
+ mc = "Mark Spacing Combining",
+ me = "Mark Enclosing",
+ nd = "Number Decimal Digit",
+ nl = "Number Letter",
+ no = "Number Other",
+ pc = "Punctuation Connector",
+ pd = "Punctuation Dash",
+ ps = "Punctuation Open",
+ pe = "Punctuation Close",
+ pi = "Punctuation Initial Quote",
+ pf = "Punctuation Final Quote",
+ po = "Punctuation Other",
+ sm = "Symbol Math",
+ sc = "Symbol Currency",
+ sk = "Symbol Modifier",
+ so = "Symbol Other",
+ zs = "Separator Space",
+ zl = "Separator Line",
+ zp = "Separator Paragraph",
+ cc = "Other Control",
+ cf = "Other Format",
+ cs = "Other Surrogate",
+ co = "Other Private Use",
+ cn = "Other Not Assigned",
+}
+
+--~ special : cf (softhyphen) zs (emspace)
+--~ characters: ll lm lo lt lu mn nl no pc pd pe pf pi po ps sc sk sm so
+
+characters.is_character = table.tohash {
+ "ll","lm","lo","lt","lu","mn","nl","no","pc","pd","pe","pf","pi","po","ps","sc","sk","sm","so"
+}
+
+characters.is_command = table.tohash {
+ "cf","zs"
+}
+
+-- linebreak:
+--
+-- normative : BK CR LF CM SG GL CB SP ZW NL WJ JL JV JT H2 H3
+-- informative : XX OP CL QU NS EX SY IS PR PO NU AL ID IN HY BB BA SA AI B2
+
+-- east asian width:
+--
+-- N A H W F Na
+
+do
+ local _empty_table_ = { __index = function(t,k) return "" end }
+
+ function table.set_empty_metatable(t)
+ setmetatable(t,_empty_table_)
+ end
+end
+
+table.set_empty_metatable(characters.data)
+
+--[[ldx--
+<p>At this point we assume that the big data table is loaded. From this
+table we derive a few more.</p>
+--ldx]]--
+
+-- used ?
+
+characters.context.unicodes = characters.context.unicodes or { }
+characters.context.utfcodes = characters.context.utfcodes or { }
+characters.context.enccodes = characters.context.enccodes or { }
+characters.context.fallbacks = characters.context.fallbacks or { }
+
+function characters.context.rehash()
+ local unicodes, utfcodes, enccodes, fallbacks, utfchar = characters.context.unicodes, characters.context.utfcodes, characters.context.enccodes, characters.context.fallbacks, utf.char
+ for k,v in pairs(characters.data) do
+ local contextname, adobename, specials = v.contextname, v.adobename, v.specials
+ if contextname then
+ local slot = v.unicodeslot
+ unicodes[contextname] = slot
+ utfcodes[contextname] = utfchar(slot)
+ end
+ local encname = adobename or contextname
+ if encname then
+ enccodes[encname] = k
+ end
+ if specials and specials[1] == "compat" and specials[2] == 0x0020 and specials[3] then
+ local s = specials[3]
+ fallbacks[k] = s
+ fallbacks[s] = k
+ end
+ end
+ for name,code in pairs(characters.synonyms) do
+ if not enccodes[name] then enccodes[name] = code end
+ end
+end
+
+--[[ldx--
+<p>The <type>context</type> namespace is used to store methods and data
+which is rather specific to <l n='context'/>.</p>
+--ldx]]--
+
+function characters.context.show(n)
+ local n = characters.number(n)
+ local d = characters.data[n]
+ if d then
+ local function entry(label,name)
+ tex.sprint(tex.ctxcatcodes,format("\\NC %s\\NC %s\\NC\\NR",label,characters.valid(d[name])))
+ end
+ tex.sprint(tex.ctxcatcodes,"\\starttabulate[|Tl|Tl|]")
+ entry("unicode index" , "unicodeslot")
+ entry("context name" , "contextname")
+ entry("adobe name" , "adobename")
+ entry("category" , "category")
+ entry("description" , "description")
+ entry("uppercase code", "uccode")
+ entry("lowercase code", "lccode")
+ entry("specials" , "specials")
+ tex.sprint(tex.ctxcatcodes,"\\stoptabulate ")
+ end
+end
+
+--[[ldx--
+<p>Instead of using a <l n='tex'/> file to define the named glyphs, we
+use the table. After all, we have this information available anyway.</p>
+--ldx]]--
+
+function characters.makeactive(n,name)
+ tex.sprint(tex.ctxcatcodes,format("\\catcode%s=13\\unexpanded\\def %s{\\%s}",n,utf.char(n),name))
+end
+
+function tex.uprint(n)
+ tex.sprint(tex.ctxcatcodes,utf.char(n))
+end
+
+--~ function characters.context.define()
+--~ local unicodes, utfcodes = characters.context.unicodes, characters.context.utfcodes
+--~ local flush, tc, char = tex.sprint, tex.ctxcatcodes, utf.char
+--~ local is_character, is_command = characters.is_character, characters.is_command
+--~ for u, chr in pairs(characters.data) do
+--~ local contextname = chr.contextname
+--~ if contextname then
+--~ local category = chr.category
+--~ if is_character[category] then
+--~ -- by this time, we're still in normal catcode mode
+--~ if chr.unicodeslot < 128 then
+--~ flush(tc, "\\chardef\\" .. contextname .. "=" .. u) -- unicodes[contextname])
+--~ else
+--~ flush(tc, "\\let\\" .. contextname .. "=" .. char(u)) -- utfcodes[contextname])
+--~ end
+--~ elseif is_command[category] then
+--~ flush("\\catcode"..u.."=13\\unexpanded\\def "..char(u).."{\\"..contextname.."}")
+--~ -- characters.makeactive(u,contextname)
+--~ end
+--~ end
+--~ end
+--~ end
+
+characters.activated = { }
+
+function characters.context.define()
+ local unicodes, utfcodes = characters.context.unicodes, characters.context.utfcodes
+ local flush, tc, char = tex.sprint, tex.ctxcatcodes, utf.char
+ local is_character, is_command = characters.is_character, characters.is_command
+ for u, chr in pairs(characters.data) do
+ local contextname = chr.contextname
+ if contextname then
+ local category = chr.category
+ if is_character[category] then
+ -- by this time, we're still in normal catcode mode
+ if chr.unicodeslot < 128 then
+ flush(tc, "\\chardef\\" .. contextname .. "=" .. u) -- unicodes[contextname])
+ else
+ flush(tc, "\\let\\" .. contextname .. "=" .. char(u)) -- utfcodes[contextname])
+ end
+ elseif is_command[category] then
+ flush("{\\catcode"..u.."=13\\unexpanded\\gdef "..char(u).."{\\"..contextname.."}}")
+ characters.activated[u] = true
+ end
+ end
+ end
+end
+
+function characters.context.activate()
+ for u,_ in pairs(characters.activated) do
+ tex.sprint(tex.ctxcatcodes,"\\catcode "..u.."=13 ")
+ end
+end
+
+function characters.charcode(box)
+ local b = tex.box[box]
+ local l = b.list
+ tex.sprint((l and l.id == node.id('glyph') and l.char) or 0)
+end
+
+--[[ldx--
+<p>Setting the lccodes is also done in a loop over the data table.</p>
+--ldx]]--
+
+function characters.setcodes()
+ local flush, tc, format = tex.sprint, tex.ctxcatcodes, string.format
+ for code, chr in pairs(characters.data) do
+ local cc = chr.category
+ if cc == 'll' or cc == 'lu' or cc == 'lt' then
+ local lc, uc = chr.lccode, chr.uccode
+ if not lc then chr.lccode, lc = code, code end
+ if not uc then chr.uccode, uc = code, code end
+ flush(tc, format("\\setcclcuc %i %i %i ",code,lc,uc))
+ end
+ end
+end
+
+--[[ldx--
+<p>Next comes a whole series of helper methods. These are (will be) part
+of the official <l n='api'/>.</p>
+--ldx]]--
+
+--[[ldx--
+<p>This converts a string (if given) into a number.</p>
+--ldx]]--
+
+function characters.number(n)
+ if type(n) == "string" then return tonumber(n,16) else return n end
+end
+
+--[[ldx--
+<p>Checking for valid characters.</p>
+--ldx]]--
+
+function characters.is_valid(s)
+ return s or ""
+end
+
+function characters.checked(s, default)
+ return s or default
+end
+
+characters.valid = characters.is_valid
+
+--[[ldx--
+<p>The next method is used when constructing the main table, although nowadays
+we do this in one step. The index can be a string or a number.</p>
+--ldx]]--
+
+function characters.define(c)
+ characters.data[characters.number(c.unicodeslot)] = c
+end
+
+--[[ldx--
+<p></p>
+--ldx]]--
+-- set a table entry; index is number (can be different from unicodeslot)
+
+function characters.set(n, c)
+ characters.data[characters.number(n)] = c
+end
+
+--[[ldx--
+<p>Get a table entry happens by number. Keep in mind that the unicodeslot
+can be different (not likely).</p>
+--ldx]]--
+
+function characters.get(n)
+ return characters.data[characters.number(n)]
+end
+
+--[[ldx--
+<p>A couple of convenience methods. Beware, these are not that fast due
+to the checking.</p>
+--ldx]]--
+
+function characters.hexindex(n)
+ return format("%04X", characters.valid(characters.data[characters.number(n)].unicodeslot))
+end
+
+function characters.contextname(n)
+ return characters.valid(characters.data[characters.number(n)].contextname)
+end
+
+function characters.adobename(n)
+ return characters.valid(characters.data[characters.number(n)].adobename)
+end
+
+function characters.description(n)
+ return characters.valid(characters.data[characters.number(n)].description)
+end
+
+function characters.category(n)
+ return characters.valid(characters.data[characters.number(n)].category)
+end
+
+--[[ldx--
+<p>Requesting lower and uppercase codes:</p>
+--ldx]]--
+
+function characters.uccode(n) return characters.data[n].uccode or n end
+function characters.lccode(n) return characters.data[n].lccode or n end
+
+function characters.flush(n)
+ local c = characters.data[n]
+ if c and c.contextname then
+ tex.sprint(tex.texcatcodes, "\\"..c.contextname)
+ else
+ tex.sprint(unicode.utf8.char(n))
+ end
+end
+
+function characters.shape(n)
+ local shcode = characters.data[n].shcode
+ if not shcode then
+ return n, nil
+ elseif type(shcode) == "table" then
+ return shcode[1], shcode[#shcode]
+ else
+ return shcode, nil
+ end
+end
+
+--[[ldx--
+<p>Categories play an important role, so here are some checkers.</p>
+--ldx]]--
+
+function characters.is_of_category(token,category)
+ if type(token) == "string" then
+ return characters.data[utf.byte(token)].category == category
+ else
+ return characters.data[token].category == category
+ end
+end
+
+function characters.i_is_of_category(i,category) -- by index (number)
+ local cd = characters.data[i]
+ return cd and cd.category == category
+end
+
+function characters.n_is_of_category(n,category) -- by name (string)
+ local cd = characters.data[utf.byte(n)]
+ return cd and cd.category == category
+end
+
+--[[ldx--
+<p>The following code is kind of messy. It is used to generate the right
+unicode reference tables.</p>
+--ldx]]--
+
+function characters.setpdfunicodes()
+--~ local flush, tc, sf = tex.sprint, tex.ctxcatcodes, string.format
+--~ for _,v in pairs(characters.data) do
+--~ if v.adobename then
+--~ flush(tc,sf("\\pdfglyphtounicode{%s}{%04X}", v.adobename, v.unicodeslot))
+--~ end
+--~ end
+end
+
+--[[ldx--
+<p>The next method generates a table for good old <l n='pdftex'/>.</p>
+
+<typing>
+characters.pdftex.make_pdf_to_unicodetable("pdfr-def.tex")
+</typing>
+--ldx]]--
+
+characters.pdftex = characters.pdftex or { }
+
+function characters.pdftex.make_pdf_to_unicodetable(filename)
+--~ f = io.open(filename,'w')
+--~ if f then
+--~ f:write("% This file is generated with Luatex using the\n")
+--~ f:write("% character tables that come with ConTeXt MkIV.\n")
+--~ f:write("%\n")
+--~ f:write("\\ifx\\pdfglyphtounicode\\undefined\\endinput\\fi\n") -- just to be sure
+--~ for _, v in pairs(characters.data) do
+--~ if v.adobename then
+--~ f:write(format("\\pdfglyphtounicode{%s}{%04X}", v.adobename, v.unicodeslot))
+--~ end
+--~ end
+--~ f:write("%\n")
+--~ f:write("%\n")
+--~ f:write("\\endinput")
+--~ f:close()
+--~ end
+end
diff --git a/Master/texmf-dist/tex/context/base/char-ini.tex b/Master/texmf-dist/tex/context/base/char-ini.tex
new file mode 100644
index 00000000000..be69f793ff6
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/char-ini.tex
@@ -0,0 +1,29 @@
+%D \module
+%D [ file=char-ini,
+%D version=2006.08.20,
+%D title=\CONTEXT\ Character Macros,
+%D subtitle=Character Support (Initialization),
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright=PRAGMA]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{Character Support (initialization)}
+
+\registerctxluafile{char-ini}{1.001}
+\registerctxluafile{char-cmp}{1.001} % maybe we will load this someplace else
+\registerctxluafile{char-tok}{1.001} % maybe we will load this someplace else
+
+% \def\defchar
+% {\afterassignment\dodefchar\scratchcounter}
+
+% \def\dodefchar
+% {\catcode\scratchcounter\active\relax
+% \ctxlua{tex.sprint("\\unexpanded\\def"..utf.char(\the\scratchcounter))}}
+
+\def\utfchar#1{\ctxlua{tex.uprint(\number#1)}}
+
+\endinput
diff --git a/Master/texmf-dist/tex/context/base/char-map.lua b/Master/texmf-dist/tex/context/base/char-map.lua
new file mode 100644
index 00000000000..e463158c534
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/char-map.lua
@@ -0,0 +1,1072 @@
+-- filename : char-map.lua
+-- comment : companion to char-def.tex (in ConTeXt)
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+-- remark : derived from 'specialcasing.txt', se Arthurs comments in char-map.txt
+
+
+if not versions then versions = { } end versions['char-map'] = 1.001
+if not characters then characters = { } end
+
+
+characters.casemap={
+ [0x0049]={
+ ["az"]={
+ ["not_before_dot"]={
+ ["lower"]={ 0x0131 },
+ ["title"]={ 0x0049 },
+ ["upper"]={ 0x0049 },
+ },
+ },
+ ["lt"]={
+ ["more_above"]={
+ ["lower"]={ 0x0069, 0x0307 },
+ ["title"]={ 0x0049 },
+ ["upper"]={ 0x0049 },
+ },
+ },
+ ["tr"]={
+ ["not_before_dot"]={
+ ["lower"]={ 0x0131 },
+ ["title"]={ 0x0049 },
+ ["upper"]={ 0x0049 },
+ },
+ },
+ },
+ [0x004A]={
+ ["lt"]={
+ ["more_above"]={
+ ["lower"]={ 0x006A, 0x0307 },
+ ["title"]={ 0x004A },
+ ["upper"]={ 0x004A },
+ },
+ },
+ },
+ [0x0069]={
+ ["az"]={
+ ["all"]={
+ ["lower"]={ 0x0069 },
+ ["title"]={ 0x0130 },
+ ["upper"]={ 0x0130 },
+ },
+ },
+ ["tr"]={
+ ["all"]={
+ ["lower"]={ 0x0069 },
+ ["title"]={ 0x0130 },
+ ["upper"]={ 0x0130 },
+ },
+ },
+ },
+ [0x00CC]={
+ ["lt"]={
+ ["all"]={
+ ["lower"]={ 0x0069, 0x0307, 0x0300 },
+ ["title"]={ 0x00CC },
+ ["upper"]={ 0x00CC },
+ },
+ },
+ },
+ [0x00CD]={
+ ["lt"]={
+ ["all"]={
+ ["lower"]={ 0x0069, 0x0307, 0x0301 },
+ ["title"]={ 0x00CD },
+ ["upper"]={ 0x00CD },
+ },
+ },
+ },
+ [0x00DF]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x00DF },
+ ["title"]={ 0x0053, 0x0073 },
+ ["upper"]={ 0x0053, 0x0053 },
+ },
+ },
+ },
+ [0x0128]={
+ ["lt"]={
+ ["all"]={
+ ["lower"]={ 0x0069, 0x0307, 0x0303 },
+ ["title"]={ 0x0128 },
+ ["upper"]={ 0x0128 },
+ },
+ },
+ },
+ [0x012E]={
+ ["lt"]={
+ ["more_above"]={
+ ["lower"]={ 0x012F, 0x0307 },
+ ["title"]={ 0x012E },
+ ["upper"]={ 0x012E },
+ },
+ },
+ },
+ [0x0130]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x0069, 0x0307 },
+ ["title"]={ 0x0130 },
+ ["upper"]={ 0x0130 },
+ },
+ },
+ ["az"]={
+ ["all"]={
+ ["lower"]={ 0x0069 },
+ ["title"]={ 0x0130 },
+ ["upper"]={ 0x0130 },
+ },
+ },
+ ["tr"]={
+ ["all"]={
+ ["lower"]={ 0x0069 },
+ ["title"]={ 0x0130 },
+ ["upper"]={ 0x0130 },
+ },
+ },
+ },
+ [0x0149]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x0149 },
+ ["title"]={ 0x02BC, 0x004E },
+ ["upper"]={ 0x02BC, 0x004E },
+ },
+ },
+ },
+ [0x01F0]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x01F0 },
+ ["title"]={ 0x004A, 0x030C },
+ ["upper"]={ 0x004A, 0x030C },
+ },
+ },
+ },
+ [0x0307]={
+ ["az"]={
+ ["after_i"]={
+ ["lower"]={},
+ ["title"]={ 0x0307 },
+ ["upper"]={ 0x0307 },
+ },
+ },
+ ["lt"]={
+ ["after_soft_dotted"]={
+ ["lower"]={ 0x0307 },
+ ["title"]={},
+ ["upper"]={},
+ },
+ },
+ ["tr"]={
+ ["after_i"]={
+ ["lower"]={},
+ ["title"]={ 0x0307 },
+ ["upper"]={ 0x0307 },
+ },
+ },
+ },
+ [0x0390]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x0390 },
+ ["title"]={ 0x0399, 0x0308, 0x0301 },
+ ["upper"]={ 0x0399, 0x0308, 0x0301 },
+ },
+ },
+ },
+ [0x03A3]={
+ ["final_sigma"]={
+ ["all"]={
+ ["lower"]={ 0x03C2 },
+ ["title"]={ 0x03A3 },
+ ["upper"]={ 0x03A3 },
+ },
+ },
+ },
+ [0x03B0]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x03B0 },
+ ["title"]={ 0x03A5, 0x0308, 0x0301 },
+ ["upper"]={ 0x03A5, 0x0308, 0x0301 },
+ },
+ },
+ },
+ [0x0587]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x0587 },
+ ["title"]={ 0x0535, 0x0582 },
+ ["upper"]={ 0x0535, 0x0552 },
+ },
+ },
+ },
+ [0x1E96]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1E96 },
+ ["title"]={ 0x0048, 0x0331 },
+ ["upper"]={ 0x0048, 0x0331 },
+ },
+ },
+ },
+ [0x1E97]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1E97 },
+ ["title"]={ 0x0054, 0x0308 },
+ ["upper"]={ 0x0054, 0x0308 },
+ },
+ },
+ },
+ [0x1E98]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1E98 },
+ ["title"]={ 0x0057, 0x030A },
+ ["upper"]={ 0x0057, 0x030A },
+ },
+ },
+ },
+ [0x1E99]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1E99 },
+ ["title"]={ 0x0059, 0x030A },
+ ["upper"]={ 0x0059, 0x030A },
+ },
+ },
+ },
+ [0x1E9A]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1E9A },
+ ["title"]={ 0x0041, 0x02BE },
+ ["upper"]={ 0x0041, 0x02BE },
+ },
+ },
+ },
+ [0x1F50]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1F50 },
+ ["title"]={ 0x03A5, 0x0313 },
+ ["upper"]={ 0x03A5, 0x0313 },
+ },
+ },
+ },
+ [0x1F52]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1F52 },
+ ["title"]={ 0x03A5, 0x0313, 0x0300 },
+ ["upper"]={ 0x03A5, 0x0313, 0x0300 },
+ },
+ },
+ },
+ [0x1F54]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1F54 },
+ ["title"]={ 0x03A5, 0x0313, 0x0301 },
+ ["upper"]={ 0x03A5, 0x0313, 0x0301 },
+ },
+ },
+ },
+ [0x1F56]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1F56 },
+ ["title"]={ 0x03A5, 0x0313, 0x0342 },
+ ["upper"]={ 0x03A5, 0x0313, 0x0342 },
+ },
+ },
+ },
+ [0x1F80]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1F80 },
+ ["title"]={ 0x1F88 },
+ ["upper"]={ 0x1F08, 0x0399 },
+ },
+ },
+ },
+ [0x1F81]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1F81 },
+ ["title"]={ 0x1F89 },
+ ["upper"]={ 0x1F09, 0x0399 },
+ },
+ },
+ },
+ [0x1F82]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1F82 },
+ ["title"]={ 0x1F8A },
+ ["upper"]={ 0x1F0A, 0x0399 },
+ },
+ },
+ },
+ [0x1F83]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1F83 },
+ ["title"]={ 0x1F8B },
+ ["upper"]={ 0x1F0B, 0x0399 },
+ },
+ },
+ },
+ [0x1F84]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1F84 },
+ ["title"]={ 0x1F8C },
+ ["upper"]={ 0x1F0C, 0x0399 },
+ },
+ },
+ },
+ [0x1F85]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1F85 },
+ ["title"]={ 0x1F8D },
+ ["upper"]={ 0x1F0D, 0x0399 },
+ },
+ },
+ },
+ [0x1F86]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1F86 },
+ ["title"]={ 0x1F8E },
+ ["upper"]={ 0x1F0E, 0x0399 },
+ },
+ },
+ },
+ [0x1F87]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1F87 },
+ ["title"]={ 0x1F8F },
+ ["upper"]={ 0x1F0F, 0x0399 },
+ },
+ },
+ },
+ [0x1F88]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1F80 },
+ ["title"]={ 0x1F88 },
+ ["upper"]={ 0x1F08, 0x0399 },
+ },
+ },
+ },
+ [0x1F89]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1F81 },
+ ["title"]={ 0x1F89 },
+ ["upper"]={ 0x1F09, 0x0399 },
+ },
+ },
+ },
+ [0x1F8A]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1F82 },
+ ["title"]={ 0x1F8A },
+ ["upper"]={ 0x1F0A, 0x0399 },
+ },
+ },
+ },
+ [0x1F8B]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1F83 },
+ ["title"]={ 0x1F8B },
+ ["upper"]={ 0x1F0B, 0x0399 },
+ },
+ },
+ },
+ [0x1F8C]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1F84 },
+ ["title"]={ 0x1F8C },
+ ["upper"]={ 0x1F0C, 0x0399 },
+ },
+ },
+ },
+ [0x1F8D]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1F85 },
+ ["title"]={ 0x1F8D },
+ ["upper"]={ 0x1F0D, 0x0399 },
+ },
+ },
+ },
+ [0x1F8E]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1F86 },
+ ["title"]={ 0x1F8E },
+ ["upper"]={ 0x1F0E, 0x0399 },
+ },
+ },
+ },
+ [0x1F8F]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1F87 },
+ ["title"]={ 0x1F8F },
+ ["upper"]={ 0x1F0F, 0x0399 },
+ },
+ },
+ },
+ [0x1F90]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1F90 },
+ ["title"]={ 0x1F98 },
+ ["upper"]={ 0x1F28, 0x0399 },
+ },
+ },
+ },
+ [0x1F91]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1F91 },
+ ["title"]={ 0x1F99 },
+ ["upper"]={ 0x1F29, 0x0399 },
+ },
+ },
+ },
+ [0x1F92]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1F92 },
+ ["title"]={ 0x1F9A },
+ ["upper"]={ 0x1F2A, 0x0399 },
+ },
+ },
+ },
+ [0x1F93]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1F93 },
+ ["title"]={ 0x1F9B },
+ ["upper"]={ 0x1F2B, 0x0399 },
+ },
+ },
+ },
+ [0x1F94]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1F94 },
+ ["title"]={ 0x1F9C },
+ ["upper"]={ 0x1F2C, 0x0399 },
+ },
+ },
+ },
+ [0x1F95]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1F95 },
+ ["title"]={ 0x1F9D },
+ ["upper"]={ 0x1F2D, 0x0399 },
+ },
+ },
+ },
+ [0x1F96]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1F96 },
+ ["title"]={ 0x1F9E },
+ ["upper"]={ 0x1F2E, 0x0399 },
+ },
+ },
+ },
+ [0x1F97]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1F97 },
+ ["title"]={ 0x1F9F },
+ ["upper"]={ 0x1F2F, 0x0399 },
+ },
+ },
+ },
+ [0x1F98]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1F90 },
+ ["title"]={ 0x1F98 },
+ ["upper"]={ 0x1F28, 0x0399 },
+ },
+ },
+ },
+ [0x1F99]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1F91 },
+ ["title"]={ 0x1F99 },
+ ["upper"]={ 0x1F29, 0x0399 },
+ },
+ },
+ },
+ [0x1F9A]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1F92 },
+ ["title"]={ 0x1F9A },
+ ["upper"]={ 0x1F2A, 0x0399 },
+ },
+ },
+ },
+ [0x1F9B]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1F93 },
+ ["title"]={ 0x1F9B },
+ ["upper"]={ 0x1F2B, 0x0399 },
+ },
+ },
+ },
+ [0x1F9C]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1F94 },
+ ["title"]={ 0x1F9C },
+ ["upper"]={ 0x1F2C, 0x0399 },
+ },
+ },
+ },
+ [0x1F9D]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1F95 },
+ ["title"]={ 0x1F9D },
+ ["upper"]={ 0x1F2D, 0x0399 },
+ },
+ },
+ },
+ [0x1F9E]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1F96 },
+ ["title"]={ 0x1F9E },
+ ["upper"]={ 0x1F2E, 0x0399 },
+ },
+ },
+ },
+ [0x1F9F]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1F97 },
+ ["title"]={ 0x1F9F },
+ ["upper"]={ 0x1F2F, 0x0399 },
+ },
+ },
+ },
+ [0x1FA0]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1FA0 },
+ ["title"]={ 0x1FA8 },
+ ["upper"]={ 0x1F68, 0x0399 },
+ },
+ },
+ },
+ [0x1FA1]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1FA1 },
+ ["title"]={ 0x1FA9 },
+ ["upper"]={ 0x1F69, 0x0399 },
+ },
+ },
+ },
+ [0x1FA2]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1FA2 },
+ ["title"]={ 0x1FAA },
+ ["upper"]={ 0x1F6A, 0x0399 },
+ },
+ },
+ },
+ [0x1FA3]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1FA3 },
+ ["title"]={ 0x1FAB },
+ ["upper"]={ 0x1F6B, 0x0399 },
+ },
+ },
+ },
+ [0x1FA4]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1FA4 },
+ ["title"]={ 0x1FAC },
+ ["upper"]={ 0x1F6C, 0x0399 },
+ },
+ },
+ },
+ [0x1FA5]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1FA5 },
+ ["title"]={ 0x1FAD },
+ ["upper"]={ 0x1F6D, 0x0399 },
+ },
+ },
+ },
+ [0x1FA6]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1FA6 },
+ ["title"]={ 0x1FAE },
+ ["upper"]={ 0x1F6E, 0x0399 },
+ },
+ },
+ },
+ [0x1FA7]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1FA7 },
+ ["title"]={ 0x1FAF },
+ ["upper"]={ 0x1F6F, 0x0399 },
+ },
+ },
+ },
+ [0x1FA8]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1FA0 },
+ ["title"]={ 0x1FA8 },
+ ["upper"]={ 0x1F68, 0x0399 },
+ },
+ },
+ },
+ [0x1FA9]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1FA1 },
+ ["title"]={ 0x1FA9 },
+ ["upper"]={ 0x1F69, 0x0399 },
+ },
+ },
+ },
+ [0x1FAA]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1FA2 },
+ ["title"]={ 0x1FAA },
+ ["upper"]={ 0x1F6A, 0x0399 },
+ },
+ },
+ },
+ [0x1FAB]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1FA3 },
+ ["title"]={ 0x1FAB },
+ ["upper"]={ 0x1F6B, 0x0399 },
+ },
+ },
+ },
+ [0x1FAC]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1FA4 },
+ ["title"]={ 0x1FAC },
+ ["upper"]={ 0x1F6C, 0x0399 },
+ },
+ },
+ },
+ [0x1FAD]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1FA5 },
+ ["title"]={ 0x1FAD },
+ ["upper"]={ 0x1F6D, 0x0399 },
+ },
+ },
+ },
+ [0x1FAE]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1FA6 },
+ ["title"]={ 0x1FAE },
+ ["upper"]={ 0x1F6E, 0x0399 },
+ },
+ },
+ },
+ [0x1FAF]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1FA7 },
+ ["title"]={ 0x1FAF },
+ ["upper"]={ 0x1F6F, 0x0399 },
+ },
+ },
+ },
+ [0x1FB2]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1FB2 },
+ ["title"]={ 0x1FBA, 0x0345 },
+ ["upper"]={ 0x1FBA, 0x0399 },
+ },
+ },
+ },
+ [0x1FB3]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1FB3 },
+ ["title"]={ 0x1FBC },
+ ["upper"]={ 0x0391, 0x0399 },
+ },
+ },
+ },
+ [0x1FB4]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1FB4 },
+ ["title"]={ 0x0386, 0x0345 },
+ ["upper"]={ 0x0386, 0x0399 },
+ },
+ },
+ },
+ [0x1FB6]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1FB6 },
+ ["title"]={ 0x0391, 0x0342 },
+ ["upper"]={ 0x0391, 0x0342 },
+ },
+ },
+ },
+ [0x1FB7]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1FB7 },
+ ["title"]={ 0x0391, 0x0342, 0x0345 },
+ ["upper"]={ 0x0391, 0x0342, 0x0399 },
+ },
+ },
+ },
+ [0x1FBC]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1FB3 },
+ ["title"]={ 0x1FBC },
+ ["upper"]={ 0x0391, 0x0399 },
+ },
+ },
+ },
+ [0x1FC2]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1FC2 },
+ ["title"]={ 0x1FCA, 0x0345 },
+ ["upper"]={ 0x1FCA, 0x0399 },
+ },
+ },
+ },
+ [0x1FC3]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1FC3 },
+ ["title"]={ 0x1FCC },
+ ["upper"]={ 0x0397, 0x0399 },
+ },
+ },
+ },
+ [0x1FC4]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1FC4 },
+ ["title"]={ 0x0389, 0x0345 },
+ ["upper"]={ 0x0389, 0x0399 },
+ },
+ },
+ },
+ [0x1FC6]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1FC6 },
+ ["title"]={ 0x0397, 0x0342 },
+ ["upper"]={ 0x0397, 0x0342 },
+ },
+ },
+ },
+ [0x1FC7]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1FC7 },
+ ["title"]={ 0x0397, 0x0342, 0x0345 },
+ ["upper"]={ 0x0397, 0x0342, 0x0399 },
+ },
+ },
+ },
+ [0x1FCC]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1FC3 },
+ ["title"]={ 0x1FCC },
+ ["upper"]={ 0x0397, 0x0399 },
+ },
+ },
+ },
+ [0x1FD2]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1FD2 },
+ ["title"]={ 0x0399, 0x0308, 0x0300 },
+ ["upper"]={ 0x0399, 0x0308, 0x0300 },
+ },
+ },
+ },
+ [0x1FD3]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1FD3 },
+ ["title"]={ 0x0399, 0x0308, 0x0301 },
+ ["upper"]={ 0x0399, 0x0308, 0x0301 },
+ },
+ },
+ },
+ [0x1FD6]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1FD6 },
+ ["title"]={ 0x0399, 0x0342 },
+ ["upper"]={ 0x0399, 0x0342 },
+ },
+ },
+ },
+ [0x1FD7]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1FD7 },
+ ["title"]={ 0x0399, 0x0308, 0x0342 },
+ ["upper"]={ 0x0399, 0x0308, 0x0342 },
+ },
+ },
+ },
+ [0x1FE2]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1FE2 },
+ ["title"]={ 0x03A5, 0x0308, 0x0300 },
+ ["upper"]={ 0x03A5, 0x0308, 0x0300 },
+ },
+ },
+ },
+ [0x1FE3]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1FE3 },
+ ["title"]={ 0x03A5, 0x0308, 0x0301 },
+ ["upper"]={ 0x03A5, 0x0308, 0x0301 },
+ },
+ },
+ },
+ [0x1FE4]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1FE4 },
+ ["title"]={ 0x03A1, 0x0313 },
+ ["upper"]={ 0x03A1, 0x0313 },
+ },
+ },
+ },
+ [0x1FE6]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1FE6 },
+ ["title"]={ 0x03A5, 0x0342 },
+ ["upper"]={ 0x03A5, 0x0342 },
+ },
+ },
+ },
+ [0x1FE7]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1FE7 },
+ ["title"]={ 0x03A5, 0x0308, 0x0342 },
+ ["upper"]={ 0x03A5, 0x0308, 0x0342 },
+ },
+ },
+ },
+ [0x1FF2]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1FF2 },
+ ["title"]={ 0x1FFA, 0x0345 },
+ ["upper"]={ 0x1FFA, 0x0399 },
+ },
+ },
+ },
+ [0x1FF3]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1FF3 },
+ ["title"]={ 0x1FFC },
+ ["upper"]={ 0x03A9, 0x0399 },
+ },
+ },
+ },
+ [0x1FF4]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1FF4 },
+ ["title"]={ 0x038F, 0x0345 },
+ ["upper"]={ 0x038F, 0x0399 },
+ },
+ },
+ },
+ [0x1FF6]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1FF6 },
+ ["title"]={ 0x03A9, 0x0342 },
+ ["upper"]={ 0x03A9, 0x0342 },
+ },
+ },
+ },
+ [0x1FF7]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1FF7 },
+ ["title"]={ 0x03A9, 0x0342, 0x0345 },
+ ["upper"]={ 0x03A9, 0x0342, 0x0399 },
+ },
+ },
+ },
+ [0x1FFC]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0x1FF3 },
+ ["title"]={ 0x1FFC },
+ ["upper"]={ 0x03A9, 0x0399 },
+ },
+ },
+ },
+ [0xFB00]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0xFB00 },
+ ["title"]={ 0x0046, 0x0066 },
+ ["upper"]={ 0x0046, 0x0046 },
+ },
+ },
+ },
+ [0xFB01]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0xFB01 },
+ ["title"]={ 0x0046, 0x0069 },
+ ["upper"]={ 0x0046, 0x0049 },
+ },
+ },
+ },
+ [0xFB02]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0xFB02 },
+ ["title"]={ 0x0046, 0x006C },
+ ["upper"]={ 0x0046, 0x004C },
+ },
+ },
+ },
+ [0xFB03]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0xFB03 },
+ ["title"]={ 0x0046, 0x0066, 0x0069 },
+ ["upper"]={ 0x0046, 0x0046, 0x0049 },
+ },
+ },
+ },
+ [0xFB04]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0xFB04 },
+ ["title"]={ 0x0046, 0x0066, 0x006C },
+ ["upper"]={ 0x0046, 0x0046, 0x004C },
+ },
+ },
+ },
+ [0xFB05]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0xFB05 },
+ ["title"]={ 0x0053, 0x0074 },
+ ["upper"]={ 0x0053, 0x0054 },
+ },
+ },
+ },
+ [0xFB06]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0xFB06 },
+ ["title"]={ 0x0053, 0x0074 },
+ ["upper"]={ 0x0053, 0x0054 },
+ },
+ },
+ },
+ [0xFB13]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0xFB13 },
+ ["title"]={ 0x0544, 0x0576 },
+ ["upper"]={ 0x0544, 0x0546 },
+ },
+ },
+ },
+ [0xFB14]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0xFB14 },
+ ["title"]={ 0x0544, 0x0565 },
+ ["upper"]={ 0x0544, 0x0535 },
+ },
+ },
+ },
+ [0xFB15]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0xFB15 },
+ ["title"]={ 0x0544, 0x056B },
+ ["upper"]={ 0x0544, 0x053B },
+ },
+ },
+ },
+ [0xFB16]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0xFB16 },
+ ["title"]={ 0x054E, 0x0576 },
+ ["upper"]={ 0x054E, 0x0546 },
+ },
+ },
+ },
+ [0xFB17]={
+ [""]={
+ ["all"]={
+ ["lower"]={ 0xFB17 },
+ ["title"]={ 0x0544, 0x056D },
+ ["upper"]={ 0x0544, 0x053D },
+ },
+ },
+ },
+}
diff --git a/Master/texmf-dist/tex/context/base/char-syn.lua b/Master/texmf-dist/tex/context/base/char-syn.lua
new file mode 100644
index 00000000000..a779e1a5848
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/char-syn.lua
@@ -0,0 +1,140 @@
+if not modules then modules = { } end modules ['char-syn'] = {
+ version = 1.001,
+ comment = "companion to char-ini.tex",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- thanks to tex4ht for these mappings
+
+characters.synonyms = {
+ angle = 0x2220,
+ anticlockwise = 0x21BA,
+ arrowaxisleft = 0x2190,
+ arrowaxisright = 0x2192,
+ arrowparrleftright = 0x21C6,
+ arrowparrrightleft = 0x21C4,
+ arrowtailleft = 0x21A2,
+ arrowtailright = 0x21A3,
+ arrowtripleleft = 0x21DA,
+ arrowtripleright = 0x21DB,
+ axisshort = 0x2212,
+ because = 0x2235,
+ between = 0x226C,
+ check = 0x2713,
+ circleasteris = 0x229B,
+ circleequal = 0x2257,
+ circleminus = 0x229D,
+ circleR = 0x24C7,
+ circlering = 0x229A,
+ circleS = 0x24C8,
+ clockwise = 0x21BB,
+ complement = 0x2201,
+ curlyleft = 0x21AB,
+ curlyright = 0x21AC,
+ dblarrowdwn = 0x21CA,
+ dblarrowheadleft = 0x219E,
+ dblarrowheadright = 0x21A0,
+ dblarrowleft = 0x21C7,
+ dblarrowright = 0x21C9,
+ dblarrowup = 0x21C8,
+ defines = 0x225C,
+ diamond = 0x2662,
+ diamondsolid = 0x2666,
+ difference = 0x224F,
+ dotplus = 0x2214,
+ downfall = 0x22CE,
+ equaldotleftright = 0x2252,
+ equaldotrightleft = 0x2253,
+ equalorfollows = 0x22DF,
+ equalorgreater = 0x22DD,
+ equalorless = 0x22DC,
+ equalorprecedes = 0x22DE,
+ equalsdots = 0x2251,
+ followsorcurly = 0x227D,
+ followsorequal = 0x227F,
+ forces = 0x22A9,
+ forcesbar = 0x22AA,
+ fork = 0x22D4,
+ frown = 0x2322,
+ geomequivalent = 0x224E,
+ greaterdbleqlless = 0x22Da,
+ greaterdblequal = 0x2267,
+ greaterlessequal = 0x22DA,
+ greaterorapproxeql = 0x227F,
+ greaterorequalslant= 0x2265,
+ greaterorless = 0x2277,
+ greaterorsimilar = 0x2273,
+ harpoondownleft = 0x21C3,
+ harpoondownright = 0x21C2,
+ harpoonleftright = 0x21CC,
+ harpoonrightleft = 0x21CB,
+ harpoonupleft = 0x21BF,
+ harpoonupright = 0x21BE,
+ intercal = 0x22BA,
+ intersectiondbl = 0x22D2,
+ lessdbleqlgreater = 0x22DB,
+ lessdblequal = 0x2266,
+ lessequalgreater = 0x22DB,
+ lessorapproxeql = 0x227E,
+ lessorequalslant = 0x2264,
+ lessorgreater = 0x2276,
+ lessorsimilar = 0x2272,
+ maltesecross = 0xFFFD,
+ measuredangle = 0x2221,
+ muchgreater = 0x22D9,
+ muchless = 0x22D8,
+ multimap = 0x22B8,
+ multiopenleft = 0x22CB,
+ multiopenright = 0x22CC,
+ nand = 0x22BC,
+ orunderscore = 0x22BB,
+ perpcorrespond = 0x2259,
+ precedesorcurly = 0x227C,
+ precedesorequal = 0x227E,
+ primereverse = 0x2035,
+ proportional = 0x221D,
+ revasymptequal = 0x2243,
+ revsimilar = 0x223D,
+ rightanglene = 0x231D,
+ rightanglenw = 0x231C,
+ rightanglese = 0x231F,
+ rightanglesw = 0x231E,
+ ringinequal = 0x2256,
+ satisfies = 0x22A8,
+ shiftleft = 0x21B0,
+ shiftright = 0x21B1,
+ smile = 0x2323,
+ sphericalangle = 0x2222,
+ square = 0x25A1,
+ squaredot = 0x22A1,
+ squareimage = 0x228F,
+ squareminus = 0x229F,
+ squaremultiply = 0x22A0,
+ squareoriginal = 0x2290,
+ squareplus = 0x229E,
+ squaresmallsolid = 0x25AA,
+ squaresolid = 0x25A0,
+ squiggleleftright = 0x21AD,
+ squiggleright = 0x21DD,
+ star = 0x22C6,
+ subsetdbl = 0x22D0,
+ subsetdblequal = 0x2286,
+ supersetdbl = 0x22D1,
+ supersetdblequa = 0x2287,
+ therefore = 0x2234,
+ triangle = 0x25B5,
+ triangledownsld = 0x25BE,
+ triangleinv = 0x25BF,
+ triangleleft = 0x25C3,
+ triangleleftequal = 0x22B4,
+ triangleleftsld = 0x25C2,
+ triangleright = 0x25B9,
+ trianglerightequal = 0x22B5,
+ trianglerightsld = 0x25B8,
+ trianglesolid = 0x25B4,
+ uniondbl = 0x22D3,
+ uprise = 0x22CF,
+ Yen = 0x00A5,
+}
diff --git a/Master/texmf-dist/tex/context/base/char-utf.lua b/Master/texmf-dist/tex/context/base/char-utf.lua
new file mode 100644
index 00000000000..5e5d575c501
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/char-utf.lua
@@ -0,0 +1,477 @@
+if not modules then modules = { } end modules ['char-utf'] = {
+ version = 1.001,
+ comment = "companion to char-ini.tex",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+--[[ldx--
+<p>When a sequence of <l n='utf'/> characters enters the application, it may
+be neccessary to collapse subsequences into their composed variant.</p>
+
+<p>This module implements methods for collapsing and expanding <l n='utf'/>
+sequences. We also provide means to deal with characters that are
+special to <l n='tex'/> as well as 8-bit characters that need to end up
+in special kinds of output (for instance <l n='pdf'/>).</p>
+
+<p>We implement these manipulations as filters. One can run multiple filters
+over a string.</p>
+--ldx]]--
+
+utf = utf or unicode.utf8
+
+characters = characters or { }
+characters.graphemes = characters.graphemes or { }
+characters.filters = characters.filters or { }
+characters.filters.utf = characters.filters.utf or { }
+
+characters.filters.utf.initialized = false
+characters.filters.utf.collapsing = true
+characters.filters.utf.expanding = true
+
+--[[ldx--
+<p>It only makes sense to collapse at runtime, since we don't expect
+source code to depend on collapsing:</p>
+
+<typing>
+characters.filters.utf.collapsing = true
+input.filters.utf_translator = characters.filters.utf.collapse
+</typing>
+--ldx]]--
+
+function characters.filters.utf.initialize()
+ if characters.filters.utf.collapsing and not characters.filters.utf.initialized then
+ local cg = characters.graphemes
+ local uc = utf.char
+ for k,v in pairs(characters.data) do
+ -- using vs and first testing for length is faster (.02->.01 s)
+ local vs = v.specials
+ if vs and #vs == 3 and vs[1] == 'char' then
+ local first, second = uc(vs[2]), uc(vs[3])
+ local cgf = cg[first]
+ if not cgf then
+ cgf = { }
+ cg[first] = cgf
+ end
+ cgf[second] = uc(k)
+ end
+ end
+ characters.filters.utf.initialized = true
+ end
+end
+
+-- characters.filters.utf.add_grapheme(utf.char(318),'l','\string~')
+-- characters.filters.utf.add_grapheme('c','a','b')
+
+--~ function characters.filters.utf.add_grapheme(result,...)
+--~ local cg = characters.graphemes
+--~ local t = {...}
+--~ local n = table.getn(t)
+--~ for i=1,n do
+--~ local v = t[i]
+--~ if not cg[v] then
+--~ cg[v] = { }
+--~ end
+--~ if i == n then
+--~ cg[v] = result
+--~ else
+--~ cg = cg[v]
+--~ end
+--~ end
+--~ end
+
+function characters.filters.utf.add_grapheme(result,first,second)
+ local cg, uc = characters.graphemes, utf.char
+ local r, f, s = tonumber(result), tonumber(first), tonumber(second)
+ if r then result = uc(r) end
+ if f then first = uc(f) end
+ if s then second = uc(s) end
+ if not cg[first] then
+ cg[first] = { [second] = result }
+ else
+ cg[first][second] = result
+ end
+end
+
+function characters.filters.utf.collapse(str) -- old one
+ if characters.filters.utf.collapsing and str and #str > 1 then
+ if not characters.filters.utf.initialized then -- saves a call
+ characters.filters.utf.initialize()
+ end
+ local tokens, first, done = { }, false, false
+ local cg = characters.graphemes
+ for second in string.utfcharacters(str) do
+ local cgf = cg[first]
+ if cgf and cgf[second] then
+ first, done = cgf[second], true
+ elseif first then
+ tokens[#tokens+1] = first
+ first = second
+ else
+ first = second
+ end
+ end
+ if done then
+ tokens[#tokens+1] = first
+ return table.concat(tokens,"")
+ end
+ end
+ return str
+end
+
+--[[ldx--
+<p>In order to deal with 8-bit output, we need to find a way to
+go from <l n='utf'/> to 8-bit. This is handled in the
+<l n='luatex'/> engine itself.</p>
+
+<p>This leaves us problems with characters that are specific to
+<l n='tex'/> like <type>{}</type>, <type>$</type> and alike.</p>
+
+<p>We can remap some chars that tex input files are sensitive for to
+a private area (while writing to a utility file) and revert then
+to their original slot when we read in such a file. Instead of
+reverting, we can (when we resolve characters to glyphs) map them
+to their right glyph there.</p>
+
+<p>For this purpose we can use the private planes 0x0F0000 and
+0x100000.</p>
+--ldx]]--
+
+characters.filters.utf.private = {
+ high = { },
+ low = { },
+ escapes = { },
+}
+
+do
+
+ local low = characters.filters.utf.private.low
+ local high = characters.filters.utf.private.high
+ local escapes = characters.filters.utf.private.escapes
+ local special = "~#$%^&_{}\\"
+
+ local ub, uc, ug = utf.byte, utf.char, utf.gsub
+
+ function characters.filters.utf.private.set(ch)
+ local cb
+ if type(ch) == "number" then
+ cb, ch = ch, uc(ch)
+ else
+ cb = ub(ch)
+ end
+ if cb < 256 then
+ low [ch] = uc(0x0F0000 + cb)
+ high [uc(0x0F0000 + cb)] = ch
+ escapes[ch] = "\\" .. ch
+ end
+ end
+
+ function characters.filters.utf.private.replace(str) return ug(str,"(.)", low ) end
+ function characters.filters.utf.private.revert(str) return ug(str,"(.)", high ) end
+ function characters.filters.utf.private.escape(str) return ug(str,"(.)", escapes) end
+
+ local set = characters.filters.utf.private.set
+
+ for ch in special:gmatch(".") do set(ch) end
+
+end
+
+--[[ldx--
+<p>We get a more efficient variant of this when we integrate
+replacements in collapser. This more or less renders the previous
+private code redundant. The following code is equivalent but the
+first snippet uses the relocated dollars.</p>
+
+<typing>
+[󰀤x󰀤] [$x$]
+</typing>
+--ldx]]--
+
+do
+
+ local cg = characters.graphemes
+ local cr = characters.filters.utf.private.high -- kan via een lpeg
+ local cf = characters.filters.utf
+ local su = string.utfcharacters
+
+ local concat = table.concat
+
+ --~ keep this one, it's the baseline
+ --~
+ --~ function characters.filters.utf.collapse(str)
+ --~ if cf.collapsing and str then
+ --~ if #str > 1 then
+ --~ if not cf.initialized then -- saves a call
+ --~ cf.initialize()
+ --~ end
+ --~ local tokens, first, done = { }, false, false
+ --~ for second in su(str) do
+ --~ if cr[second] then
+ --~ if first then
+ --~ tokens[#tokens+1] = first
+ --~ end
+ --~ first, done = cr[second], true
+ --~ else
+ --~ local cgf = cg[first]
+ --~ if cgf and cgf[second] then
+ --~ first, done = cgf[second], true
+ --~ elseif first then
+ --~ tokens[#tokens+1] = first
+ --~ first = second
+ --~ else
+ --~ first = second
+ --~ end
+ --~ end
+ --~ end
+ --~ if done then
+ --~ tokens[#tokens+1] = first
+ --~ return concat(tokens,"") -- seldom called
+ --~ end
+ --~ elseif #str > 0 then
+ --~ return cr[str] or str
+ --~ end
+ --~ end
+ --~ return str
+ --~ end
+
+ --[[ldx--
+ <p>The next variant has lazy token collecting, on a 140 page mk.tex this saves
+ about .25 seconds, which is understandable because we have no graphmes and
+ not collecting tokens is not only faster but also saves garbage collecting.
+ </p>
+ --ldx]]--
+
+ function characters.filters.utf.collapse(str) -- not really tested (we could preallocate a table)
+ if cf.collapsing and str then
+ if #str > 1 then
+ if not cf.initialized then -- saves a call
+ cf.initialize()
+ end
+ local tokens, first, done, n = { }, false, false, 0
+ for second in su(str) do
+ if done then
+ if cr[second] then
+ if first then
+ tokens[#tokens+1] = first
+ end
+ first = cr[second]
+ else
+ local cgf = cg[first]
+ if cgf and cgf[second] then
+ first = cgf[second]
+ elseif first then
+ tokens[#tokens+1] = first
+ first = second
+ else
+ first = second
+ end
+ end
+ else
+ if cr[second] then
+ for s in su(str) do
+ if n == 1 then
+ break
+ else
+ tokens[#tokens+1], n = s, n - 1
+ end
+ end
+ if first then
+ tokens[#tokens+1] = first
+ end
+ first, done = cr[second], true
+ else
+ local cgf = cg[first]
+ if cgf and cgf[second] then
+ for s in su(str) do
+ if n == 1 then
+ break
+ else
+ tokens[#tokens+1], n = s, n -1
+ end
+ end
+ first, done = cgf[second], true
+ else
+ first, n = second, n + 1
+ end
+ end
+ end
+ end
+ if done then
+ tokens[#tokens+1] = first
+ return concat(tokens,"") -- seldom called
+ end
+ elseif #str > 0 then
+ return cr[str] or str
+ end
+ end
+ return str
+ end
+
+ --~ not faster (0.1 seconds on a 500 k collapsable file)
+ --~
+ --~ local specials, initials = lpeg.P(false), ""
+ --~ for k,v in pairs(cr) do
+ --~ specials, initials = specials + lpeg.P(k)/v, initials .. k:sub(1,1)
+ --~ end
+ --~ specials = lpeg.Cs(lpeg.P((1-lpeg.S(initials)) + specials)^0)
+ --~ local graphemes = ""
+ --~ for _, v in pairs(cg) do
+ --~ for kk, _ in pairs(v) do
+ --~ graphemes = graphemes .. kk:sub(1,1)
+ --~ end
+ --~ end
+ --~ graphemes = lpeg.P{ lpeg.S(graphemes) + 1 * lpeg.V(1) }
+ --~
+ --~ function characters.filters.utf.collapse(str)
+ --~ if cf.collapsing and str then
+ --~ if #str > 1 then
+ --~ str = specials:match(str)
+ --~ if graphemes:match(str) then
+ --~ if not cf.initialized then -- saves a call
+ --~ cf.initialize()
+ --~ end
+ --~ local tokens, first, done = { }, false, false
+ --~ for second in su(str) do
+ --~ local cgf = cg[first]
+ --~ if cgf and cgf[second] then
+ --~ first, done = cgf[second], true
+ --~ elseif first then
+ --~ tokens[#tokens+1] = first
+ --~ first = second
+ --~ else
+ --~ first = second
+ --~ end
+ --~ end
+ --~ if done then
+ --~ tokens[#tokens+1] = first
+ --~ return table.concat(tokens,"")
+ --~ end
+ --~ end
+ --~ elseif #str > 0 then
+ --~ return cr[str] or str
+ --~ end
+ --~ end
+ --~ return str
+ --~ end
+
+end
+
+--[[ldx--
+<p>In the beginning of <l n='luatex'/> we experimented with a sequence
+of filters so that we could manipulate the input stream. However, since
+this is a partial solution (not taking macro expansion into account)
+and since it may interfere with non-text, we will not use this feature
+by default.</p>
+
+<typing>
+characters.filters.utf.collapsing = true
+characters.filters.append(characters.filters.utf.collapse)
+characters.filters.activated = true
+callback.register('process_input_buffer', characters.filters.process)
+</typing>
+
+<p>The following helper functions may disappear (or become optional)
+in the future. Well, they are now.</p>
+--ldx]]--
+
+--[[obsolete--
+
+characters.filters.sequences = characters.filters.sequences or { }
+characters.filters.activated = false
+
+function characters.filters.append(name)
+ table.insert(characters.filters.sequences,name)
+end
+
+function characters.filters.prepend(name)
+ table.insert(characters.filters.sequences,1,name)
+end
+
+function characters.filters.remove(name)
+ for k,v in ipairs(characters.filters.sequences) do
+ if v == name then
+ table.remove(characters.filters.sequences,k)
+ end
+ end
+end
+
+function characters.filters.replace(name_1,name_2)
+ for k,v in ipairs(characters.filters.sequences) do
+ if v == name_1 then
+ characters.filters.sequences[k] = name_2
+ break
+ end
+ end
+end
+
+function characters.filters.insert_before(name_1,name_2)
+ for k,v in ipairs(characters.filters.sequences) do
+ if v == name_1 then
+ table.insert(characters.filters.sequences,k,name_2)
+ break
+ end
+ end
+end
+
+function characters.filters.insert_after(name_1,name_2)
+ for k,v in ipairs(characters.filters.sequences) do
+ if v == name_1 then
+ table.insert(characters.filters.sequences,k+1,name_2)
+ break
+ end
+ end
+end
+
+function characters.filters.list(separator)
+ table.concat(characters.filters.sequences,seperator or ' ')
+end
+
+function characters.filters.process(str)
+ if characters.filters.activated then
+ for _,v in ipairs(characters.filters.sequences) do
+ str = v(str)
+ end
+ return str
+ else
+ return nil -- luatex callback optimalisation
+ end
+end
+
+--obsolete]]--
+
+--[[ldx--
+<p>The following code is no longer needed and replaced by token
+collectors somehwere else.</p>
+--ldx]]--
+
+--[[obsolete--
+
+characters.filters.collector = { }
+characters.filters.collector.data = { }
+characters.filters.collector.collecting = false
+
+function characters.filters.collector.reset()
+ characters.filters.collector.data = { }
+end
+
+function characters.filters.collector.flush(separator)
+ tex.sprint(table.concat(characters.filters.collector.data,separator))
+end
+
+function characters.filters.collector.prune(n)
+ for i=1,n do
+ table.remove(characters.filters.collector.data,-1)
+ end
+end
+
+function characters.filters.collector.numerate(str)
+ if characters.filters.collector.collecting then
+ table.insert(characters.filters.collector.data,(unicode.utf8.gsub(str,"(.)", function(c)
+ return string.format("0x%04X ",unicode.utf8.byte(c))
+ end)))
+ end
+ return str
+end
+
+--obsolete]]--
diff --git a/Master/texmf-dist/tex/context/base/char-utf.tex b/Master/texmf-dist/tex/context/base/char-utf.tex
new file mode 100644
index 00000000000..2e7156962fd
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/char-utf.tex
@@ -0,0 +1,65 @@
+%D \module
+%D [ file=char-utf,
+%D version=2006.12.05,
+%D title=\CONTEXT\ Lua Macros,
+%D subtitle=Unicode Support (UTF),
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright=PRAGMA]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{Unicode Support (utf)}
+
+%D After a bit of experimenting we reached a clean state where \UTF\
+%D 8, 16 and 32 were supported as well as collapsing (combining
+%D sequences). Writing the code was a relaxed experience, not in the
+%D last place because it was accompanied by listening to those nice
+%D Vienna Teng cd's (who decided that making music was more fun than
+%D programming, but then, she may not know \TEX\ and \LUA).
+
+\unprotect
+
+\registerctxluafile{char-utf}{1.001}
+
+%D We enable collapsing (combining characters) by default, but
+%D since the source files are rather simple, we postpone the
+%D initialization till runtime.
+
+\appendtoks
+ \ctxlua {
+ characters.filters.utf.collapsing = true
+ input.filters.utf_translator = characters.filters.utf.collapse
+ }%
+\to \everyjob
+
+% %D This is a hack, and only meant for special situations. We don't
+% %D support this in for instance verbatim. The active characters map
+% %D onto the \CONTEXT\ names and font handling etc. is up to the user.
+%
+% %D This feature is obsolete.
+%
+% \registerctxluafile{char-act}{1.001}
+%
+% \def\enableactiveutf {\ctxlua{characters.active.enable()}}
+% \def\disableactiveutf{\ctxlua{characters.active.disable()}}
+% \def\testactiveutf #1{\ctxlua{characters.active.test("#1")}}
+
+%D Usage:
+%D
+%D \starttyping
+%D \enableactiveutf \testactiveutf{eacute}
+%D \stoptyping
+
+%D The next one influences input parsing.
+%D
+%D \starttyping
+%D \definecomposedutf 318 108 126 % lcaron
+%D \stoptyping
+
+\def\definecomposedutf#1 #2 #3 %
+ {\ctxlua{characters.filters.utf.add_grapheme("#1","#2","#3")}}
+
+\protect
diff --git a/Master/texmf-dist/tex/context/base/colo-hex.tex b/Master/texmf-dist/tex/context/base/colo-hex.tex
index b493b8c6bc5..e60f2a0aea5 100644
--- a/Master/texmf-dist/tex/context/base/colo-hex.tex
+++ b/Master/texmf-dist/tex/context/base/colo-hex.tex
@@ -11,6 +11,10 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
+\beginLUATEX
+ \endinput
+\endLUATEX
+
\ifx\dodododefinecolor\undefined
\beginTEX \endinput \endTEX
\else
diff --git a/Master/texmf-dist/tex/context/base/colo-ini.tex b/Master/texmf-dist/tex/context/base/colo-ini.tex
index 0042429f5ea..0b43ca3ddd1 100644
--- a/Master/texmf-dist/tex/context/base/colo-ini.tex
+++ b/Master/texmf-dist/tex/context/base/colo-ini.tex
@@ -13,9 +13,6 @@
\writestatus{loading}{Context Color Macros / initialization}
-%D To do: stroke versus fill color
-%D 1000 100 10 -> constants
-
%D Possible optimization: store level in mark instead of name
\unprotect
@@ -326,7 +323,7 @@
\def\dodefineglobalcolor{\dododefinecolor\doglobal\setgvalue\setxvalue1}
\def\dodefinenamedcolor {\dododefinecolor\doglobal\setvalue \setevalue0}
-\def\dododefinecolor#1#2#3#4[#5][#6]% #2==set(g)value #3==set[e|x]value
+\def\dododefinecolor#1#2#3#4[#5][#6]% #2==set(g)value #3==set[e|x]value -- maybe add fake [#7] here
{#1\addtocommalist{#5}\colorlist % optional
\doifassignmentelse{#6}
{\@@resetcolorparameters
@@ -359,8 +356,7 @@
{% this way we can freeze \definecolor[somecolor][somecolor]
% and still prevent cyclic definitions
\iffreezecolors#3{\??cr#5}{\csname\??cr#6\endcsname}\fi}
- {\iffreezecolors\@EA#3\else\@EA#2\fi
- {\??cr#5}{\csname\??cr#6\endcsname}}}
+ {\iffreezecolors\@EA#3\else\@EA#2\fi{\??cr#5}{\csname\??cr#6\endcsname}}}
{\showmessage\m!colors3{#5 (def)}}%
\fi}%
\ifcase#4\or
@@ -368,7 +364,6 @@
\fi}
\def\paletcolorspec#1%
-% {\executeifdefined{\??cr\currentpalet#1}{\executeifdefined{\??cr#1}\empty}}
{\csname\??cr\currentpalet#1\endcsname}
%D Hex color support is not enabled by default. You need to say \type
@@ -388,6 +383,7 @@
\def\dodefinespotcolor[#1][#2][#3]% todo: always global
{\doifnot{#1}{#2}
{\@@resetcolorparameters
+\doglobal\addtocommalist{#1}\colorlist % optional
\edef\@@cl@@n{#2}%
\getparameters[\??cl @@][#3]%
\doifnothing\@@cl@@p{\let\@@cl@@p\!!plusone}%
@@ -484,6 +480,7 @@
\def\dodefinespotcolor[#1][#2][#3]% todo: always global (REDEFINED)
{\doifnot{#1}{#2}
{\@@resetcolorparameters
+\doglobal\addtocommalist{#1}\colorlist % optional
\edef\@@cl@@n{#2}%
\getparameters[\??cl @@][#3]%
\doifnothing \@@cl@@p{\let\@@cl@@p\!!plusone}%
@@ -525,14 +522,14 @@
%D We now redefine the color definition macro so that you
%D can define both normal and spotcolors.
+%D This messy method will become obsolete in mkiv.
+
\def\definecolor
{\dotripleempty\dodefinewhatevercolor}
\def\dodefinewhatevercolor[#1][#2][#3]%
{\ifthirdargument
- \doifassignmentelse{#2}
- {\dododefinecolor[#1][#2,#3]}% actually this is an error
- {\dodefinespotcolor[#1][#2][#3]}% and this the prefered method
+ \dodefinespotcolor[#1][#2][#3]% this is the prefered method !
\else
\dodefinecolor[#1][#2]%
\fi}
@@ -658,6 +655,12 @@
\newif\ifpermitcolormode \permitcolormodetrue
+\def\startregistercolor[#1]%
+ {\permitcolormodefalse\startcolor[#1]\permitcolormodetrue}
+
+\def\stopregistercolor
+ {\permitcolormodefalse\stopcolor\permitcolormodetrue}
+
\def\dowithcolor#1#2% #1=\action #2=color
{\ifincolor\ifpermitcolormode
\ifcsname\??cr\currentpalet#2\endcsname
@@ -836,6 +839,7 @@
\dostartspotcolormode\@@cl@@n\@@cl@@p
\else
\doingspotcolortrue
+ \normalizespotcolor\@@cl@@p
\let\spotcolorfactor\@@cl@@p
\factorizecolortrue % using counter and array
\dowithcolor\execcolorRCSP\@@cl@@n
@@ -960,10 +964,6 @@
{\edef\@@cl@@s{#1}%
\dohidecolor\@@cl@@s\@@cl@@o}
-% \def\noexeccolorP#1:#2:#3\od
-% {\edef\@@cl@@p{#2}%
-% \dohidecolor\@@cl@@p\@@cl@@z}
-
\def\noexeccolorP#1:#2:#3:#4:#5\od
{\edef\@@cl@@p{#4}%
\dohidecolor\@@cl@@p\@@cl@@z}
@@ -979,20 +979,28 @@
\def\spotcolorfactor{1}
+% \def\normalizecolor#1%
+% {\colordimen#1\thousandpoint
+% \colordimen\spotcolorfactor\colordimen
+% \colorcount\colordimen
+% \advance\colorcount \medcard
+% \divide\colorcount \maxcard
+% \edef#1{\realcolorvalue\colorcount}}
+
\def\normalizecolor#1%
- {\colordimen#1\thousandpoint
- \colordimen\spotcolorfactor\colordimen
- \colorcount\colordimen
- \advance\colorcount \medcard
- \divide\colorcount \maxcard
+ {\colorcount\numexpr(\dimexpr\spotcolorfactor\dimexpr#1\thousandpoint\relax\relax+\medcard)/\maxcard\relax
\edef#1{\realcolorvalue\colorcount}}
+% \def\normalizespotcolor#1%
+% {\colordimen-#1\thousandpoint
+% \advance\colordimen\thousandpoint
+% \colorcount\colordimen
+% \advance\colorcount \medcard
+% \divide\colorcount \maxcard
+% \edef#1{\realcolorvalue\colorcount}}
+
\def\normalizespotcolor#1%
- {\colordimen-#1\thousandpoint
- \advance\colordimen\thousandpoint
- \colorcount\colordimen
- \advance\colorcount \medcard
- \divide\colorcount \maxcard
+ {\colorcount\numexpr(\dimexpr\thousandpoint-#1\thousandpoint\relax+\medcard)/\maxcard\relax
\edef#1{\realcolorvalue\colorcount}}
\def\donormalizeRGB
@@ -1045,6 +1053,8 @@
\csname registerspotcolor#1\@EA\endcsname
\fi}
+% todo: convert to rgb if needed, will will do this in mkiv
+
\def\dontregisterspotcolor #1\od{}
\def\registerspotcolorR #1:#2:#3:#4\od{\doregisterrgbspotcolor \@@cl@@n\@@cl@@f\@@cl@@d\@@cl@@p{#1}{#2}{#3}}
\def\registerspotcolorC#1:#2:#3:#4:#5\od{\doregistercmykspotcolor\@@cl@@n\@@cl@@f\@@cl@@d\@@cl@@p{#1}{#2}{#3}{#4}}
@@ -1092,14 +1102,14 @@
\def\predefinecolor[#1]%
{\bgroup
- \flushatshipout{\hbox{\localcolortrue\color[#1]}}% real ones
+ \flushatshipout{\hbox{\localcolortrue\color[#1]{}}}% real ones
\egroup}
\def\predefineindexcolor[#1]%
{\bgroup
- \flushatshipout{\hbox{\localcolortrue\color[#1]}}% real ones
+ \flushatshipout{\hbox{\localcolortrue\color[#1]{}}}% real ones
\let\doexeccolorP\doexeccolorPindex
- \flushatshipout{\hbox{\localcolortrue\color[#1]}}% index one
+ \flushatshipout{\hbox{\localcolortrue\color[#1]{}}}% index one
\egroup}
% \def\checkpredefinedcolor[#1]%
@@ -1142,15 +1152,6 @@
\expandafter\noexectransparency
\fi}
-%\def\doexectransparency#1:#2\od
-% {\global\@EA\chardef\csname\@@currenttransparent\endcsname % nasty
-% \ifcase#1\space
-% \zerocount
-% \else
-% \plusone
-% \dostarttransparency{#1}{#2}%
-% \fi}
-
\def\doexectransparency#1:#2\od
{\ifcase#1\space
\global\intransparentfalse
@@ -1424,18 +1425,26 @@
1\fi\fi\fi
\else 0\fi}
+% \def\doconvertCMYKtoRGB#1\k#2\to#3%
+% {\ifdim#2\points>#1\points% >= problem, repaired 2/12/2002
+% \let#3\@@cl@@z % k >= color
+% \else
+% \colordimen\onepoint
+% \advance\colordimen -#1\points
+% \advance\colordimen -#2\points
+% \multiply\colordimen \plusthousand
+% \colorcount\colordimen
+% \advance\colorcount \medcard
+% \divide\colorcount \maxcard
+% \edef#3{\realcolorvalue\colorcount}%
+% \fi}
+
\def\doconvertCMYKtoRGB#1\k#2\to#3%
- {\ifdim#2\points>#1\points% >= problem, repaired 2/12/2002
- \let#3\@@cl@@z % k >= color
- \else
- \colordimen\onepoint
- \advance\colordimen -#1\points
- \advance\colordimen -#2\points
- \multiply\colordimen \plusthousand
- \colorcount\colordimen
- \advance\colorcount \medcard
- \divide\colorcount \maxcard
+ {\colorcount\numexpr(\dimexpr\plusthousand\dimexpr\onepoint-#1\points-#2\points\relax\relax+\medcard)/\maxcard\relax
+ \ifnum\colorcount>\zeropoint
\edef#3{\realcolorvalue\colorcount}%
+ \else
+ \let#3\@@cl@@z
\fi}
\def\convertCMYKtoRGB#1#2#3#4%
@@ -1443,14 +1452,18 @@
\doconvertCMYKtoRGB#2\k#4\to\@@cl@@g
\doconvertCMYKtoRGB#3\k#4\to\@@cl@@b}
+% \def\doconvertRGBtoCMYK#1\to#2%
+% {\colordimen#1\points
+% \multiply\colordimen \plusthousand
+% \colorcount\colordimen
+% \advance\colorcount \medcard
+% \divide\colorcount \maxcard
+% \colorcount-\colorcount
+% \advance\colorcount \plusthousand
+% \edef#2{\realcolorvalue\colorcount}}
+
\def\doconvertRGBtoCMYK#1\to#2%
- {\colordimen#1\points
- \multiply\colordimen \plusthousand
- \colorcount\colordimen
- \advance\colorcount \medcard
- \divide\colorcount \maxcard
- \colorcount-\colorcount
- \advance\colorcount \plusthousand
+ {\colorcount\numexpr\plusthousand-(\dimexpr\plusthousand\dimexpr#1\points\relax\relax+\medcard)/\maxcard\relax
\edef#2{\realcolorvalue\colorcount}}
\def\convertRGBtoCMYK#1#2#3%
@@ -1469,37 +1482,54 @@
\def\gGRAYfactor{\ifweightGRAY590\else\nGRAYfactor\fi}
\def\bGRAYfactor{\ifweightGRAY110\else\nGRAYfactor\fi}
+% \def\convertRGBtoGRAY#1#2#3%
+% {\colordimen#1\points
+% \colordimen\rGRAYfactor\colordimen
+% \colorcount\colordimen
+% \colordimen#2\points
+% \colordimen\gGRAYfactor\colordimen
+% \advance\colorcount \colordimen
+% \colordimen#3\points
+% \colordimen\bGRAYfactor\colordimen
+% \advance\colorcount \colordimen
+% \advance\colorcount \medcard
+% \divide\colorcount \maxcard
+% \edef\@@cl@@s{\realcolorvalue\colorcount}}
+
\def\convertRGBtoGRAY#1#2#3%
- {\colordimen#1\points
- \colordimen\rGRAYfactor\colordimen
- \colorcount\colordimen
- \colordimen#2\points
- \colordimen\gGRAYfactor\colordimen
- \advance\colorcount \colordimen
- \colordimen#3\points
- \colordimen\bGRAYfactor\colordimen
- \advance\colorcount \colordimen
- \advance\colorcount \medcard
- \divide\colorcount \maxcard
+ {\colorcount\numexpr
+ (\dimexpr\rGRAYfactor\dimexpr#1\points\relax\relax+
+ \dimexpr\gGRAYfactor\dimexpr#2\points\relax\relax+
+ \dimexpr\bGRAYfactor\dimexpr#3\points\relax\relax+
+ \medcard)/\maxcard
+ \relax
\edef\@@cl@@s{\realcolorvalue\colorcount}}
\def\convertCMYKtoGRAY#1#2#3#4%
{\convertCMYKtoRGB{#1}{#2}{#3}{#4}%
\convertRGBtoGRAY\@@cl@@r\@@cl@@g\@@cl@@b}
+% \def\doconvertCMYKtoCMY#1\k#2\to#3%
+% {\colordimen#1\points
+% \advance\colordimen #2\points\relax
+% \ifdim\colordimen>\onepoint
+% \colordimen\onepoint
+% %\else
+% % \colordimen\colordimen
+% \fi
+% \multiply\colordimen \plusthousand
+% \colorcount\colordimen
+% \advance\colorcount \medcard
+% \divide\colorcount \maxcard
+% \edef#3{\realcolorvalue\colorcount}}
+
\def\doconvertCMYKtoCMY#1\k#2\to#3%
- {\colordimen#1\points
- \advance\colordimen #2\points\relax
- \ifdim\colordimen>\onepoint
- \colordimen\onepoint
- %\else
- % \colordimen\colordimen
- \fi
- \multiply\colordimen \plusthousand
- \colorcount\colordimen
- \advance\colorcount \medcard
- \divide\colorcount \maxcard
- \edef#3{\realcolorvalue\colorcount}}
+ {\colorcount\numexpr(\dimexpr\plusthousand\dimexpr#1\points+#2\points\relax\relax+\medcard)/\maxcard\relax
+ \ifnum\colorcount>\plusthousand
+ \let#3\@@cl@@o
+ \else
+ \edef#3{\realcolorvalue\colorcount}%
+ \fi}
\def\convertCMYKtoCMY#1#2#3#4%
{\doconvertCMYKtoCMY#1\k#4\to\@@cl@@c
@@ -1542,7 +1572,7 @@
g=>\chardef\currentcolorchannel6,%
b=>\chardef\currentcolorchannel7,%
s=>\chardef\currentcolorchannel8,%
- \v!no=>,% \currentcolorchannel0,% all colors
+ \v!no=>,% \currentcolorchannel0,% all colors
\s!default=>,% \currentcolorchannel0,% all colors
\s!unknown=>\filterspotcolortrue
\edef\currentspotcolor{\commalistelement}]%
@@ -1630,6 +1660,13 @@
\expandafter\secondoftwoarguments
\fi}
+\def\doifcolor#1%
+ {\ifcsname\??cr\ifcsname\??cr\currentpalet#1\endcsname\currentpalet\fi#1\endcsname
+ \expandafter\firstofoneargument
+ \else
+ \expandafter\gobbleoneargument
+ \fi}
+
%D \macros
%D {localstartcolor,localstopcolor}
%D
@@ -1837,6 +1874,9 @@
\let\noglobalstopcolor\relax
+\let\faststartcolor\doglobalstartcolor
+\let\faststopcolor \doglobalstopcolor
+
%D We don't use grouping and save each stop alternative. This
%D permits be especially useful in for instance local color
%D support in verbatim. Using \type{\bgroup}||\type{\egroup}
@@ -2048,7 +2088,7 @@
{\groupedcommand{\startcolor[#1]}\stopcolor}
\unexpanded\def\graycolor[#1]% not \gray because this is a color
- {\groupedcommand{\RGBsupportedfalse\CMYKsupportedfalse\startcolor[#1]}\stopcolor}
+ {\groupedcommand{\RGBsupportedfalse\CMYKsupportedfalse\SPOTsupportedfalse\startcolor[#1]}\stopcolor}
\let\grey\graycolor
@@ -2114,11 +2154,17 @@
\def\doformatcolorS#1:#2:#3\od
{\dodoformatcolor{#1}}
+\def\doformatcolorP#1:#2:#3:#4:#5:#6\od
+ {#1\colorformatseparator
+ \dodoformatcolor{#2}\colorformatseparator
+ \dodoformatcolor{#3}\colorformatseparator
+ \dodoformatcolor{#4}\colorformatseparator}
+
\def\doformatcolor#1:%
{\csname doformatcolor#1\endcsname}
\def\colorvalue
- {\dowithcolor\doformatcolor}
+ {\dowithcolor\doformatcolor}
\def\doformatgrayR#1:#2:#3:#4:#5\od
{\convertRGBtoGRAY{#1}{#2}{#3}%
@@ -2131,11 +2177,12 @@
\def\doformatgrayS#1:#2:#3\od
{\dodoformatcolor{#1}}
-% \def\doformatgrayP#1:#2:#3:#4\od
-% {\dowithcolor\doformatcolor{#1}}
+% \def\doformatgrayP#1:#2:#3:#4:#5:#6\od
+% {\convertSPOTtoGRAY{#1}{#2}{#3}{#4}%
+% \dodoformatcolor\@@cl@@s}
\def\doformatgrayP#1:#2:#3:#4:#5:#6\od
- {\dowithcolor\doformatcolor{#1}}
+ {todo}
\def\doformatgray#1:%
{\csname doformatgray#1\endcsname}
@@ -2154,17 +2201,45 @@
%D don't cross page boundaries in the way color does. Therefore
%D we don't need stacks and marks. Just to be compatible with
%D color support we offer both 'global' and 'local' commands.
+%D
+%D \starttyping
+%D \def\localstartraster[#1]%
+%D {\doifelsenothing{#1}
+%D {\dostartgraymode\@@rsscreen}
+%D {\dostartgraymode{#1}}}
+%D
+%D \def\localstopraster
+%D {\dostopgraymode}
+%D
+%D \let\startraster\localstartraster
+%D \let\stopraster \localstopraster
+%D \stoptyping
+%D
+%D The next alternative is slower, since it works on top of the
+%D color (stack) mechanism, but it does provide nesting.
+
+\def\dosetrastercolor#1%
+ {\edef\@@cl@@s{#1}%
+ \ifx\@@cl@@s\empty
+ \let\@@cl@@s\@@rsscreen
+ \fi
+ \let\@@cl@@t\@@cl@@z % else we get rogue
+ \let\@@cl@@a\@@cl@@z % transpancies
+ \setevalue{\??cr\??rs}{\colorSpattern}}
+
+% beware, don't add extra grouping, else color in tables
+% fails
\def\localstartraster[#1]%
- {\doifelsenothing{#1}
- {\dostartgraymode\@@rsscreen}
- {\dostartgraymode{#1}}}
+ {\ifincolor\dosetrastercolor{#1}\localstartcolor[\??rs]\fi}
+
+\def\startraster[#1]%
+ {\ifincolor\dosetrastercolor{#1}\startcolor[\??rs]\fi}
-\def\localstopraster
- {\dostopgraymode}
+\def\localstopraster{\ifincolor\localstopcolor\fi}
+\def\stopraster {\ifincolor\stopcolor\fi}
-\let\startraster\localstartraster
-\let\stopraster \localstopraster
+\def\raster[#1]{\groupedcommand{\startraster[#1]}{\stopraster}}
%D In this documentation we will not go into too much details
%D on palets. Curious users can find more information on this
@@ -2243,22 +2318,23 @@
{\doifvaluesomething{\??pa#1}
{\setevalue{\??pa#1}{\csname\??pa#1\endcsname,}}%
\setevalue{\??pa#1}{\csname\??pa#1\endcsname##1}%
- \doifassignmentelse{##2}
- {% == \definepalet[test][xx={y=.4}]
- \definecolor[\??pa#1:##1][##2]%
- \iffreezecolors\@EA\setevalue\else\@EA\setvalue\fi
- {\??cr#1:##1}{\csname\??cr\??pa#1:##1\endcsname}}
- {% == \definepalet[test][xx=green]
- \doifdefinedelse{\??cr##2}
- {\iffreezecolors\@EA\setevalue\else\@EA\setvalue\fi
- {\??cr#1:##1}{\csname\??cr##2\endcsname}}
- {\letvalue{\??cr#1:##1}\colorXpattern}}}%
+ \dodefinepaletcolor{#1}{##1}{##2}}%
\def\dododefinepalet##1%
{\dodododefinepalet[##1]}%
\processcommalist[#2]\dododefinepalet}
{\doifdefined{\??pa#2}
{\expanded{\dodefinepalet[#1][\csname\??pa\??pa#2\endcsname]}}}}
+\def\dodefinepaletcolor#1#2#3%
+ {\doifassignmentelse{#3}
+ {% == \definepalet[test][xx={y=.4}]
+ \definecolor[\??pa#1:#2][#3]%
+ \iffreezecolors\@EA\setevalue\else\@EA\setvalue\fi{\??cr#1:#2}{\csname\??cr\??pa#1:#2\endcsname}}
+ {% == \definepalet[test][xx=green]
+ \doifdefinedelse{\??cr#3}
+ {\iffreezecolors\@EA\setevalue\else\@EA\setvalue\fi{\??cr#1:#2}{\csname\??cr#3\endcsname}}
+ {\letvalue{\??cr#1:#2}\colorXpattern}}}
+
\let\paletsize\!!zerocount
\def\getpaletsize[#1]%
@@ -2311,6 +2387,15 @@
\fetchruntimecommand \showpalet {\f!colorprefix\s!run}
%D \macros
+%D {showcolorcomponents}
+%D
+%D \starttyping
+%D \showcolorcomponents[color-1,color-2]
+%D \stoptyping
+
+\fetchruntimecommand \showcolorcomponents {\f!colorprefix\s!run}
+
+%D \macros
%D {definecolorgroup}
%D
%D The naming of the colors in this palet suggests some
@@ -2340,28 +2425,51 @@
\def\definecolorgroup
{\dotripleempty\dodefinecolorgroup}
-\def\dodefinecolorgroup[#1][#2][#3]%
+% \def\dodefinecolorgroup[#1][#2][#3]%
+% {\ifthirdargument
+% \processaction
+% [#2]
+% [ \v!cmyk=>\edef\currentcolorspace{C},
+% \v!rgb=>\edef\currentcolorspace{R},
+% \v!gray=>\edef\currentcolorspace{S},
+% \v!spot=>\edef\currentcolorspace{P},
+% \v!s=>\edef\currentcolorspace{S},
+% \s!unknown=>\edef\currentcolorspace{R}]%
+% \colorcount\zerocount
+% \def\dododefinecolorgroup##1%
+% {\advance\colorcount \plusone
+% \setevalue{\??cr#1:\the\colorcount}{\currentcolorspace:##1:0:0}}%
+% \processcommalist[#3]\dododefinecolorgroup
+% \else
+% \doifinstringelse{:}{#2}
+% {\definecolorgroup[#1][\v!rgb][#2]}
+% {\doloop
+% {\doifdefinedelse{\??cr#2:\recurselevel}
+% {\setevalue{\??cr#1:\recurselevel}%
+% {\csname\??cr#2:\recurselevel\endcsname}}
+% {\exitloop}}}%
+% \fi}
+
+\def\dododefinecolorgroupgray [#1][#2:#3]{\definecolor [#1:\the\colorcount][s=#2]}
+\def\dododefinecolorgrouprgb [#1][#2:#3:#4:#5]{\definecolor [#1:\the\colorcount][r=#2,g=#3,b=#4]}
+\def\dododefinecolorgroupcmyk[#1][#2:#3:#4:#5:#6]{\definecolor [#1:\the\colorcount][c=#2,m=#3=,y=#4,k=#5]}
+\def\dododefinecolorgroupspot [#1][#2:#3:#4]{\definespotolor[#1:\the\colorcount][#2][p=#3]}
+
+\def\dododefinecolorgroup#1#2%
+ {\advance\colorcount\plusone
+ \getvalue{dododefinecolorgroup\currentcolorspace}[#1][#2:0:0:0:0]}
+
+\def\dodefinecolorgroup[#1][#2][#3]% obsolete, just use palets
{\ifthirdargument
- \processaction
- [#2]
- [ \v!cmyk=>\edef\currentcolorspace{C},
- \v!rgb=>\edef\currentcolorspace{R},
- \v!gray=>\edef\currentcolorspace{S},
- \v!spot=>\edef\currentcolorspace{P},
- \v!s=>\edef\currentcolorspace{S},
- \s!unknown=>\edef\currentcolorspace{R}]%
+ \doifelsenothing{#2}{\let\currentcolorspace\v!rgb}{\def\currentcolorspace{#2}}%
\colorcount\zerocount
- \def\dododefinecolorgroup##1%
- {\advance\colorcount \plusone
- \setevalue{\??cr#1:\the\colorcount}{\currentcolorspace:##1:0:0}}%
- \processcommalist[#3]\dododefinecolorgroup
+ \processcommalist[#3]{\dododefinecolorgroup{#1}}%
\else
\doifinstringelse{:}{#2}
{\definecolorgroup[#1][\v!rgb][#2]}
{\doloop
{\doifdefinedelse{\??cr#2:\recurselevel}
- {\setevalue{\??cr#1:\recurselevel}%
- {\csname\??cr#2:\recurselevel\endcsname}}
+ {\setevalue{\??cr#1:\recurselevel}{\csname\??cr#2:\recurselevel\endcsname}}
{\exitloop}}}%
\fi}
@@ -2397,11 +2505,11 @@
%D \hbox to \hsize
%D {\hss
%D \showcolorgroup [red] [vertical,name,number]\hss
-%D \showcolorgroup [green] [vertical,name]\hss
+%D \showcolorgroup [green] [vertical,name]\hss
%D \showcolorgroup [blue] [vertical,name]\hss
%D \showcolorgroup [cyan] [vertical,name]\hss
-%D \showcolorgroup [magenta] [vertical,name]\hss
-%D \showcolorgroup [yellow] [vertical,name]\hss}
+%D \showcolorgroup [magenta][vertical,name]\hss
+%D \showcolorgroup [yellow] [vertical,name]\hss}
%D \stoplinecorrection
%D
%D These groups are used to define palets {\em alfa} upto {\em
@@ -2538,9 +2646,6 @@
\def\doMPcolor#1:% #1 can be \relax ! ! ! i.e. an empty color
{\csname MPc\@EA\ifx\csname MPc\string#1\endcsname\relax B\else#1\fi\endcsname}
-% \def\doMPcolor#1:% #1 can be \relax ! ! ! i.e. an empty color
-% {\csname MPc\ifcsname MPc#1\endcsname#1\else B\fi\endcsname}
-
\def\MPcR{\doMPrgb}
\def\MPcC{\ifMPcmykcolors\@EA\doMPcmykY\else\@EA\doMPcmykN\fi}
\def\MPcS{\doMPgray}
@@ -2554,8 +2659,6 @@
\def\grayMP {scaledgray}
\def\spotMP {spotcolor}
-\let\processMP\spotMP % for some time, will become obsolete
-
\def\doMPtransparent#1#2:#3:#4\end
{\ifcase#2\space(#1)\else\transparentMP(#2,#3,(#1))\fi}
@@ -2571,12 +2674,6 @@
\def\doMPcmykN#1:#2:#3:#4:#5\end#6\end
{\doMPtransparent{\cmykASrgbMP(#1,#2,#3,#4,#6)}#5\end}
-% \def\doMPspotY#1:#2:#3\end#4\end
-% {\doMPtransparent{\spotMP("#1",#2)}#3\end}
-%
-% \def\doMPspotN#1:#2:#3\end#4\end
-% {\scaledMPcolor{#2}{#1}}
-
\def\doMPspotY#1:#2:#3:#4:#5\end#6\end % best make #3 same as #1 when empty
{\doMPtransparent{multitonecolor("#1",#2,"#3","#4")}#5\end}
@@ -2589,6 +2686,8 @@
\def\unknownMPcolor
{(0,0,0)}
+\let\processMP\spotMP % for some time, will become obsolete, brrr
+
%D \macros
%D {PDFcolor,FDFcolor}
%D
@@ -2598,30 +2697,6 @@
\def\PDFcolorvalue#1{\handlecolorwith\doPDFcolorvalue\csname\??cr#1\endcsname:::::::\end}
\def\FDFcolor #1{\handlecolorwith\doFDFcolor \csname\??cr#1\endcsname:::::::\end}
-% \def\doPDFcolor#1:#2:#3:#4:#5:#6:#7:#8\end
-% {\if #1R#2 #3 #4 rg%
-% \else\if#1C#2 #3 #4 #5 k%
-% \else\if#1S#2 g%
-% \else\if#1P#3 g% todo
-% \else 0 g%
-% \fi\fi\fi\fi}
-%
-% \def\doPDFcolorvalue#1:#2:#3:#4:#5:#6:#7:#8\end
-% {\if #1R#2 #3 #4%
-% \else\if#1C#2 #3 #4 #5%
-% \else\if#1S#2%
-% \else\if#1P#3%
-% \else 0%
-% \fi\fi\fi\fi}
-%
-% \def\doFDFcolor#1:#2:#3:#4:#5:#6:#7:#8\end
-% {[\if #1R#2 #3 #4%
-% \else\if#1C#2 #3 #4 #5%
-% \else\if#1S#2%
-% \else\if#1P#3% todo
-% \else 0%
-% \fi\fi\fi\fi]}
-
\def\doPDFcolor#1:#2:#3:#4:#5:#6:#7:#8\end
{\if #1R#2 #3 #4 rg%
\else\if#1C#2 #3 #4 #5 k%
@@ -2749,8 +2824,6 @@
\let\negatedcolorcomponent\firstofoneargument
-\beginETEX
-
\def\negatedcolorcomponent#1%
{\ifdim\dimexpr\onepoint-#1\onepoint\relax<\zeropoint
\!!zerocount
@@ -2761,6 +2834,4 @@
\def\negatecolorcomponent#1% #1 = \macro
{\edef#1{\negatedcolorcomponent{#1}}}
-\endETEX
-
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/colo-new.lua b/Master/texmf-dist/tex/context/base/colo-new.lua
new file mode 100644
index 00000000000..fb14570706b
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/colo-new.lua
@@ -0,0 +1,547 @@
+if not modules then modules = { } end modules ['colo-ini'] = {
+ version = 1.000,
+ comment = "companion to colo-ini.tex",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- split_settings -> aux.settings_to_hash
+
+-- for the moment this looks messy but we're waiting for a pdf backend interface
+--
+-- code collected here will move and be adapted
+--
+-- some pdf related code can go away
+
+-- spec-pdf.lua
+
+-- todo: %s -> %f
+
+backends = backends or { }
+backends.pdf = backends.pdf or { }
+backend = backends.pdf
+
+local texsprint, format, concat = tex.sprint, string.format, table.concat
+
+local s_template_g = "\\dodoPDFregistergrayspotcolor{%s}{%s}{%s}{%s}{%s}" -- n f d p s (p can go away)
+local s_template_r = "\\dodoPDFregisterrgbspotcolor {%s}{%s}{%s}{%s}{%s}{%s}{%s}" -- n f d p r g b
+local s_template_c = "\\dodoPDFregistercmykspotcolor{%s}{%s}{%s}{%s}{%s}{%s}{%s}{%s}" -- n f d p c m y k
+
+function backends.pdf.registergrayspotcolor(n,f,d,p,s) states.collect(s_template_g:format(n,f,d,p,s)) end
+function backends.pdf.registerrgbspotcolor (n,f,d,p,r,g,b) states.collect(s_template_r:format(n,f,d,p,r,g,b)) end
+function backends.pdf.registercmykspotcolor(n,f,d,p,c,m,y,k) states.collect(s_template_c:format(n,f,d,p,c,m,y,k)) end
+
+local m_template_g = "\\doPDFregistergrayindexcolor{%s}{%s}{%s}{%s}{%s}" -- n f d p s (p can go away)
+local m_template_r = "\\doPDFregisterrgbindexcolor {%s}{%s}{%s}{%s}{%s}{%s}{%s}" -- n f d p r g b
+local m_template_c = "\\doPDFregistercmykindexcolor{%s}{%s}{%s}{%s}{%s}{%s}{%s}{%s}" -- n f d p c m y k
+
+function backends.pdf.registergrayindexcolor(n,f,d,p,s) states.collect(m_template_g:format(n,f,d,p,s)) end
+function backends.pdf.registerrgbindexcolor (n,f,d,p,r,g,b) states.collect(m_template_r:format(n,f,d,p,r,g,b)) end
+function backends.pdf.registercmykindexcolor(n,f,d,p,c,m,y,k) states.collect(m_template_c:format(n,f,d,p,c,m,y,k)) end
+
+local s_template_e = "\\doPDFregisterspotcolorname{%s}{%s}" -- name, e
+
+function backends.pdf.registerspotcolorname(name,e)
+ if e and e ~= "" then
+ texsprint(tex.ctxcatcodes,format(s_template_e,name,e)) -- todo in new backend: e:gsub(" ","#20")
+ end
+end
+
+ctx = ctx or { }
+ctx.aux = ctx.aux or { }
+
+local a_l_c_template = "\\setevalue{(ca:%s)}{%s}" ..
+ "\\setevalue{(cs:%s)}{\\dosetattribute{color}{%s}}"
+local a_g_c_template = "\\setxvalue{(ca:%s)}{%s}" ..
+ "\\setxvalue{(cs:%s)}{\\dosetattribute{color}{%s}}"
+local f_l_c_template = "\\setvalue {(ca:%s)}{\\doinheritca{%s}}" ..
+ "\\setvalue {(cs:%s)}{\\doinheritcs{%s}}"
+local f_g_c_template = "\\setgvalue{(ca:%s)}{\\doinheritca{%s}}" ..
+ "\\setgvalue{(cs:%s)}{\\doinheritcs{%s}}"
+local r_l_c_template = "\\letbeundefined{(ca:%s)}" ..
+ "\\letbeundefined{(cs:%s)}"
+local r_g_c_template = "\\global\\letbeundefined{(ca:%s)}" ..
+ "\\global\\letbeundefined{(cs:%s)}"
+
+local a_l_t_template = "\\setevalue{(ta:%s)}{%s}" ..
+ "\\setevalue{(ts:%s)}{\\dosetattribute{transparency}{%s}}"
+local a_g_t_template = "\\setxvalue{(ta:%s)}{%s}" ..
+ "\\setxvalue{(ts:%s)}{\\dosetattribute{transparency}{%s}}"
+local f_l_t_template = "\\setvalue {(ta:%s)}{\\doinheritta{%s}}" ..
+ "\\setvalue {(ts:%s)}{\\doinheritts{%s}}"
+local f_g_t_template = "\\setgvalue{(ta:%s)}{\\doinheritta{%s}}" ..
+ "\\setgvalue{(ts:%s)}{\\doinheritts{%s}}"
+local r_l_t_template = "\\letbeundefined{(ta:%s)}" ..
+ "\\letbeundefined{(ts:%s)}"
+local r_g_t_template = "\\global\\letbeundefined{(ta:%s)}" ..
+ "\\global\\letbeundefined{(ts:%s)}"
+
+function ctx.aux.definecolor(name, ca, global)
+ if ca and ca > 0 then
+ if global then
+ texsprint(tex.ctxcatcodes,a_g_c_template:format(name, ca, name, ca))
+ else
+ texsprint(tex.ctxcatcodes,a_l_c_template:format(name, ca, name, ca))
+ end
+ else
+ if global then
+ texsprint(tex.ctxcatcodes,r_g_c_template:format(name, name))
+ else
+ texsprint(tex.ctxcatcodes,r_l_c_template:format(name, name))
+ end
+ end
+end
+function ctx.aux.inheritcolor(name, ca, global)
+ if ca and ca ~= "" then
+ if global then
+ texsprint(tex.ctxcatcodes,f_g_c_template:format(name, ca, name, ca))
+ else
+ texsprint(tex.ctxcatcodes,f_l_c_template:format(name, ca, name, ca))
+ end
+ else
+ if global then
+ texsprint(tex.ctxcatcodes,r_g_c_template:format(name, name))
+ else
+ texsprint(tex.ctxcatcodes,r_l_c_template:format(name, name))
+ end
+ end
+end
+function ctx.aux.definetransparent(name, ta, global)
+ if ta and ta > 0 then
+ if global then
+ texsprint(tex.ctxcatcodes,a_g_t_template:format(name, ta, name, ta))
+ else
+ texsprint(tex.ctxcatcodes,a_l_t_template:format(name, ta, name, ta))
+ end
+ else
+ if global then
+ texsprint(tex.ctxcatcodes,r_g_t_template:format(name, name))
+ else
+ texsprint(tex.ctxcatcodes,r_l_t_template:format(name, name))
+ end
+ end
+end
+function ctx.aux.inherittransparent(name, ta, global)
+ if ta and ta ~= "" then
+ if global then
+ texsprint(tex.ctxcatcodes,f_g_t_template:format(name, ta, name, ta))
+ else
+ texsprint(tex.ctxcatcodes,f_l_t_template:format(name, ta, name, ta))
+ end
+ else
+ if global then
+ texsprint(tex.ctxcatcodes,r_g_t_template:format(name, name))
+ else
+ texsprint(tex.ctxcatcodes,r_l_t_template:format(name, name))
+ end
+ end
+end
+
+local transparent = {
+ none = 0,
+ normal = 1,
+ multiply = 2,
+ screen = 3,
+ overlay = 4,
+ softlight = 5,
+ hardlight = 6,
+ colordodge = 7,
+ colorburn = 8,
+ darken = 9,
+ lighten = 10,
+ difference = 11,
+ exclusion = 12,
+}
+
+-- By coupling we are downward compatible. When we decouple we need to do more tricky
+-- housekeeping (e.g. persist color independent transparencies when color bound ones
+-- are nil.
+
+ctx.couplecolors = true
+
+function ctx.definetransparency(name,n)
+ transparent[name] = n
+end
+
+local registered = { }
+
+local function registerspotcolor(parent,name,parentnumber,e,f,d,p)
+ if not registered[parentnumber] then
+ local v = colors.values[parentnumber]
+ if v then
+ local kind = v[1]
+ if kind == 2 then -- name noffractions names p's r g b
+ backend.registergrayspotcolor(parent,f,d,p,v[2])
+ elseif kind == 3 then
+ backend.registerrgbspotcolor (parent,f,d,p,v[3],v[4],v[5])
+ elseif kind == 4 then
+ backend.registercmykspotcolor(parent,f,d,p,v[6],v[7],v[8],v[9])
+ end
+ backends.pdf.registerspotcolorname(parent,e)
+ end
+ registered[parentnumber] = true
+ end
+end
+
+local function registermultitonecolor(parent,name,parentnumber,e,f,d,p) -- same as spot but different template
+ if not registered[parentnumber] then
+ local v = colors.values[parentnumber]
+ if v then
+ local kind = v[1]
+ if kind == 2 then
+ backend.registergrayindexcolor(parent,f,d,p,v[2])
+ elseif kind == 3 then
+ backend.registerrgbindexcolor (parent,f,d,p,v[3],v[4],v[5])
+ elseif kind == 4 then
+ backend.registercmykindexcolor(parent,f,d,p,v[6],v[7],v[8],v[9])
+ end
+ end
+ registered[parentnumber] = true
+ end
+end
+
+function ctx.definesimplegray(name,s)
+ return colors.register('color',name,'gray',s) -- we still need to get rid of 'color'
+end
+
+function ctx.defineprocesscolor(name,str,global,freeze) -- still inconsistent color vs transparent
+ local t = str:split_settings()
+ if t then
+ if t.h then
+ local r, g, b =string.match(t.h .. "000000","(..)(..)(..)")
+ ctx.aux.definecolor(name, colors.register('color',name,'rgb',(tonumber(r,16) or 0)/256,(tonumber(g,16) or 0)/256,(tonumber(b,16) or 0)/256 ), global)
+ elseif t.r or t.g or t.b then
+ ctx.aux.definecolor(name, colors.register('color',name,'rgb', tonumber(t.r) or 0, tonumber(t.g) or 0, tonumber(t.b) or 0 ), global)
+ elseif t.c or t.m or t.y or t.k then
+ ctx.aux.definecolor(name, colors.register('color',name,'cmyk',tonumber(t.c) or 0, tonumber(t.m) or 0, tonumber(t.y) or 0, tonumber(t.k) or 0), global)
+ else
+ ctx.aux.definecolor(name, colors.register('color',name,'gray',tonumber(t.s) or 0), global)
+ end
+ if t.a and t.t then
+ ctx.aux.definetransparent(name, transparencies.register(name,transparent[t.a] or tonumber(t.a) or 1,tonumber(t.t) or 1), global)
+ elseif ctx.couplecolors then
+--~ ctx.aux.definetransparent(name, transparencies.register(nil, 1, 1), global) -- can be sped up
+ ctx.aux.definetransparent(name, 0, global) -- can be sped up
+ end
+ elseif freeze then
+ local ca = attributes.list[attributes.numbers['color']] [str]
+ local ta = attributes.list[attributes.numbers['transparency']][str]
+ if ca then
+ ctx.aux.definecolor(name, ca, global)
+ end
+ if ta then
+ ctx.aux.definetransparent(name, ta, global)
+ end
+ else
+ ctx.aux.inheritcolor(name, str, global)
+ ctx.aux.inherittransparent(name, str, global)
+ end
+end
+
+function ctx.definespotcolor(name,parent,str,global)
+ if parent == "" or parent:find("=") then
+ ctx.registerspotcolor(name, parent)
+ elseif name ~= parent then
+ local cp = attributes.list[attributes.numbers['color']][parent]
+ if cp then
+ local t = str:split_settings()
+ if t then
+ t.p = tonumber(t.p) or 1
+ registerspotcolor(parent, name, cp, t.e, 1, "", t.p) -- p not really needed, only diagnostics
+ if name and name ~= "" then
+ ctx.aux.definecolor(name, colors.register('color',name,'spot', parent, 1, "", t.p), true)
+ if t.a and t.t then
+ ctx.aux.definetransparent(name, transparencies.register(name,transparent[t.a] or tonumber(t.a) or 1,tonumber(t.t) or 1), global)
+ elseif ctx.couplecolors then
+ --~ ctx.aux.definetransparent(name, transparencies.register(nil, 1, 1), global) -- can be sped up
+ ctx.aux.definetransparent(name, 0, global) -- can be sped up
+ end
+ end
+ end
+ end
+ end
+end
+
+function ctx.registerspotcolor(parent, str)
+ local cp = attributes.list[attributes.numbers['color']][parent]
+ if cp then
+ local e = ""
+ if str then
+ local t = str:split_settings()
+ e = (t and t.e) or ""
+ end
+ registerspotcolor(parent, "dummy", cp, e, 1, "", 1) -- p not really needed, only diagnostics
+ end
+end
+
+function ctx.definemultitonecolor(name,multispec,colorspec,selfspec)
+ local dd, pp, nn = { }, { }, { }
+ for k,v in multispec:gmatch("(%a+)=([^%,]*)") do
+ dd[#dd+1] = k
+ pp[#pp+1] = v
+ nn[#nn+1] = k
+ nn[#nn+1] = format("%1.3g",tonumber(v))
+ end
+--~ v = tonumber(v) * p
+ local nof = #dd
+ if nof > 0 then
+ dd, pp, nn = concat(dd,','), concat(pp,','), concat(nn,'_')
+ local parent = (nn:lower()):gsub("[^%d%a%.]+","_")
+ ctx.defineprocesscolor(parent,colorspec..","..selfspec,true,true)
+ local cp = attributes.list[attributes.numbers['color']][parent]
+ if cp then
+ registerspotcolor (parent, name, cp, "", nof, dd, pp)
+ registermultitonecolor(parent, name, cp, "", nof, dd, pp)
+ ctx.aux.definecolor(name, colors.register('color', name, 'spot', parent, nof, dd, pp), true)
+ local t = selfspec:split_settings()
+ if t and t.a and t.t then
+ ctx.aux.definetransparent(name, transparencies.register(name,transparent[t.a] or tonumber(t.a) or 1,tonumber(t.t) or 1), global)
+ elseif ctx.couplecolors then
+ -- ctx.aux.definetransparent(name, transparencies.register(nil, 1, 1), global) -- can be sped up
+ ctx.aux.definetransparent(name, 0, global) -- can be sped up
+ end
+ end
+ end
+end
+
+function ctx.mpcolor(model,ca,ta,default)
+ local cv = colors.value(ca) -- faster when direct colors.values[ca]
+ if cv then
+ local tv = transparencies.value(ta)
+ if model == 1 then
+ model = cv[1]
+ end
+ if tv then
+ if model == 2 then
+ return format("transparent(%s,%s,(%s,%s,%s))",tv[1],tv[2],cv[3],cv[4],cv[5])
+ elseif model == 3 then
+ return format("transparent(%s,%s,(%s,%s,%s))",tv[1],tv[2],cv[3],cv[4],cv[5])
+ elseif model == 4 then
+ return format("transparent(%s,%s,cmyk(%s,%s,%s,%s))",tv[1],tv[2],cv[6],cv[7],cv[8],cv[9])
+ else
+ return format("transparent(%s,%s,multitonecolor(\"%s\",%s,\"%s\",\"%s\"))",tv[1],tv[2],cv[10],cv[11],cv[12],cv[13])
+ end
+ else
+ if model == 2 then
+ return format("(%s,%s,%s)",cv[3],cv[4],cv[5])
+ elseif model == 3 then
+ return format("(%s,%s,%s)",cv[3],cv[4],cv[5])
+ elseif model == 4 then
+ return format("cmyk(%s,%s,%s,%s)",cv[6],cv[7],cv[8],cv[9])
+ else
+ return format("multitonecolor(\"%s\",%s,\"%s\",\"%s\")",cv[10],cv[11],cv[12],cv[13])
+ end
+ end
+ else
+ default = default or 0 -- rgb !
+ return format("(%s,%s,%s)",default,default,default)
+ end
+end
+
+function ctx.formatcolor(ca,separator)
+ local cv = colors.value(ca)
+ if cv then
+ local model = cv[1]
+ if model == 2 then
+ return tostring(cv[2])
+ elseif model == 3 then
+ return concat(cv,separator,3,5)
+ elseif model == 4 then
+ return concat(cv,separator,6,9)
+ else
+ return tostring(cv[13])
+ end
+ else
+ return tostring(0)
+ end
+end
+
+function ctx.formatgray(ca,separator)
+ local cv = colors.value(ca)
+ if cv then
+ return tostring(cv[2])
+ else
+ return tostring(0)
+ end
+end
+
+function ctx.colorcomponents(ca)
+ local cv = colors.value(ca)
+ if cv then
+ local model = cv[1]
+ if model == 2 then
+ return format("s=%1.3f",cv[2])
+ elseif model == 3 then
+ return format("r=%1.3f g=%1.3f b=%1.3f",cv[3],cv[4],cv[5])
+ elseif model == 4 then
+ return format("c=%1.3f m=%1.3f y=%1.3f k=%1.3f",cv[6],cv[7],cv[8],cv[9])
+ elseif type(cv[13]) == "string" then
+ return format("p=%s",cv[13])
+ else
+ return format("p=%1.3f",cv[13])
+ end
+ else
+ return ""
+ end
+end
+
+function ctx.transparencycomponents(ta)
+ local tv = transparencies.value(ta)
+ if tv then
+ return format("a=%1.3f t=%1.3f",tv[1],tv[2])
+ else
+ return ""
+ end
+end
+
+function ctx.pdfcolor(model,ca,default) -- todo: use gray when no color
+ local cv = colors.value(ca)
+ if cv then
+ if model == 1 then
+ model = cv[1]
+ end
+ if model == 2 then
+ local s = cv[2]
+ return format("%s g %s G",s,s)
+ elseif model == 3 then
+ local r, g, b = cv[3], cv[4], cv[5]
+ return format("%s %s %s rg %s %s %s RG",r,g,b,r,g,b)
+ elseif model == 4 then
+ local c, m, y, k = cv[6],cv[7],cv[8],cv[9]
+ return format("%s %s %s %s k %s %s %s %s K",c,m,y,k,c,m,y,k)
+ else
+ local n,f,d,p = cv[10],cv[11],cv[12],cv[13]
+ if type(p) == "string" then
+ p = p:gsub(","," ") -- brr misuse of spot
+ end
+ return format("/%s cs /%s CS %s SCN %s scn",n,n,p,p)
+ end
+ else
+ return format("%s g %s G",default or 0,default or 0)
+ end
+end
+
+function ctx.pdfcolorvalue(model,ca,default)
+ local cv = colors.value(ca)
+ if cv then
+ if model == 1 then
+ model = cv[1]
+ end
+ if model == 2 then
+ return format("%s",cv[2])
+ elseif model == 3 then
+ return format("%s %s %s",cv[3],cv[4],cv[5])
+ elseif model == 4 then
+ return format("%s %s %s %s",cv[6],cv[7],cv[8],cv[9])
+ else
+ return format("%s",cv[13])
+ end
+ else
+ return format("%s",default or 0)
+ end
+end
+
+function ctx.fdfcolor(model,ca,default)
+ local cv = colors.value(ca)
+ if cv then
+ if model == 1 then
+ model = cv[1]
+ end
+ if model == 2 then
+ return format("[%s]",cv[2])
+ elseif model == 3 then
+ return format("[%s %s %s]",cv[3],cv[4],cv[5])
+ elseif model == 4 then
+ return format("[%s %s %s %s]",cv[6],cv[7],cv[8],cv[9])
+ elseif model == 4 then
+ return format("[%s]",cv[13])
+ end
+ else
+ return format("[%s]",default or 0)
+ end
+end
+
+function ctx.pdfcolorspace(model,ca)
+ local cv = colors.value(ca)
+ if cv then
+ if model == 1 then
+ model = cv[1]
+ end
+ if model == 2 then
+ return "DeviceGray"
+ elseif model == 3 then
+ return "DeviceRGB"
+ elseif model == 4 then
+ return "DeviceCMYK"
+ end
+ end
+ return "DeviceGRAY"
+end
+
+function ctx.spotcolorname(ca,default)
+ local cv, v = colors.value(ca), "unknown"
+ if cv and cv[1] == 5 then
+ v = cv[10]
+ end
+ return tostring(v)
+end
+
+function ctx.spotcolorvalue(ca,default)
+ local cv, v = colors.value(ca), 0
+ if cv and cv[1] == 5 then
+ v = cv[13]
+ end
+ return tostring(v)
+end
+
+-- unfortunately we have \cs's here but this will go anyway once we have mplib and such
+
+function ctx.resolvempgraycolor(csa,csb,model,s)
+ local ca = colors.register('color',nil,'gray',s)
+ texsprint(tex.ctxcatcodes,format("\\setxvalue{%s}{%s}",csa,ctx.pdfcolorvalue(model,ca)))
+ texsprint(tex.ctxcatcodes,format("\\setxvalue{%s}{%s}",csb,ctx.pdfcolorspace(model,ca)))
+end
+function ctx.resolvemprgbcolor(csa,csb,model,r,g,b)
+ local ca = colors.register('color',nil,'rgb',r,g,b)
+ texsprint(tex.ctxcatcodes,format("\\setxvalue{%s}{%s}",csa,ctx.pdfcolorvalue(model,ca)))
+ texsprint(tex.ctxcatcodes,format("\\setxvalue{%s}{%s}",csb,ctx.pdfcolorspace(model,ca)))
+end
+function ctx.resolvempcmykcolor(csa,csb,model,c,m,y,k)
+ local ca = colors.register('color',nil,'cmyk',c,m,y,k)
+ texsprint(tex.ctxcatcodes,format("\\setxvalue{%s}{%s}",csa,ctx.pdfcolorvalue(model,ca)))
+ texsprint(tex.ctxcatcodes,format("\\setxvalue{%s}{%s}",csb,ctx.pdfcolorspace(model,ca)))
+end
+function ctx.resolvempspotcolor(csa,csb,model,n,f,d,p)
+ local ca = colors.register('color',nil,'spot',n,f,d,p)
+ texsprint(tex.ctxcatcodes,format("\\setxvalue{%s}{%s}",csa,ctx.pdfcolorvalue(model,ca)))
+ texsprint(tex.ctxcatcodes,format("\\setxvalue{%s}{%s}",csb,ctx.pdfcolorspace(model,ca)))
+end
+
+-- literals needed to inject code in the mp stream, we cannot use attributes there
+-- since literals may have qQ's, much may go away once we have mplib code in place
+
+local intransparency = false
+
+function ctx.pdfrgbliteral(model,r,g,b)
+ texsprint(tex.ctxcatcodes,format("\\pdfliteral{%s}",ctx.pdfcolor(model,colors.register('color',nil,'rgb',r,g,b))))
+end
+function ctx.pdfcmykliteral(model,c,m,y,k)
+ texsprint(tex.ctxcatcodes,format("\\pdfliteral{%s}",ctx.pdfcolor(model,colors.register('color',nil,'cmyk',c,m,y,k))))
+end
+function ctx.pdfgrayliteral(model,s)
+ texsprint(tex.ctxcatcodes,format("\\pdfliteral{%s}",ctx.pdfcolor(model,colors.register('color',nil,'gray',s))))
+end
+function ctx.pdfspotliteral(model,n,f,d,p)
+ texsprint(tex.ctxcatcodes,format("\\pdfliteral{%s}",ctx.pdfcolor(model,colors.register('color',nil,'spot',n,f,d,p)))) -- incorrect
+end
+function ctx.pdftransparencyliteral(a,t)
+ intransparency = true
+ texsprint(tex.ctxcatcodes,format("\\pdfliteral{/Tr%s gs}",transparencies.register(nil,a,t)))
+end
+function ctx.pdffinishtransparency()
+ if intransparency then
+ intransparency = false
+ texsprint(tex.ctxcatcodes,"\\pdfliteral{/Tr0 gs}") -- we happen to know this -)
+ end
+end
diff --git a/Master/texmf-dist/tex/context/base/colo-new.mkii b/Master/texmf-dist/tex/context/base/colo-new.mkii
new file mode 100644
index 00000000000..5413d7a1208
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/colo-new.mkii
@@ -0,0 +1,1857 @@
+%D \module
+%D [ file=colo-ini,
+%D version=1997.04.01,
+%D title=\CONTEXT\ Color Macros,
+%D subtitle=Initialization,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\unprotect
+
+\chardef\colorversion=1
+
+%D Color support is not present in \TEX. Colorful output can
+%D however be accomplished by using specials. This also means
+%D that this support depends on the \DVI\ driver used. At the
+%D moment this module was written, still no decent standard on
+%D color specials has been agreed upon. We therefore decided to
+%D implement a mechanism that is as independant as possible of
+%D drivers.
+%D
+%D Color support shares with fonts that is must be implemented
+%D in a way that permits processing of individual \DVI\ pages.
+%D Furthermore it should honour grouping. The first condition
+%D forces us to use a scheme that keeps track of colors at
+%D page boundaries. This can be done by means of \TEX's
+%D marking mechanism (\type{\mark}).
+%D
+%D When building pages, \TEX\ periodically looks at the
+%D accumulated typeset contents and breaks the page when
+%D suitable. At that moment, control is transfered to the
+%D output routine. This routine takes care of building the
+%D pagebody and for instance adds headers and footers. The page
+%D can be broken in the middle of some colored text, but
+%D headers and footers are often in black upon white or
+%D background. If colors are applied there, they definitely
+%D are used local, which means that they don't cross page
+%D borders.
+%D
+%D Boxes are handled as a whole, which means that when we
+%D apply colors inside a box, those colors don't cross page
+%D boundaries, unless of course boxes are split or unboxed.
+%D Especially in interactive texts, colors are often used in
+%D such a local way: in boxes (buttons and navigational tools)
+%D or in the pagebody (backgrounds).
+%D
+%D So we can distinguish local colors, that don't cross
+%D pages from global colors, of which we can end many pages
+%D later. The color macros will treat both types in a different
+%D way, thus gaining some speed.
+%D
+%D This module also deals with gray scales. Because similar
+%D colors can end up in the same gray scale when printed in
+%D black and white, we also implement a palet system that deals
+%D with these matters. Because of fundamental differences
+%D between color and gray scale printing, in \CONTEXT\ we also
+%D differ between these. For historic reasons |<|we first
+%D implemented gray scales using patterns of tiny periods|>|
+%D and therefore called them {\em rasters}. So don't be
+%D surprised if this term shows up.
+
+%D \macros
+%D {definecolor}
+%D
+%D We will enable users to specify colors in \cap{RGB} and
+%D \cap{CMYK} color spaces or gray scales using
+%D
+%D \showsetup{definecolor}
+%D
+%D For example:
+%D
+%D \starttyping
+%D \definecolor [SomeKindOfRed] [r=.8,g=.05,b=.05]
+%D \stoptyping
+%D
+%D Such color specifications are saved in a macro in the
+%D following way:
+%D
+%D \starttyping
+%D \setvalue{\??cr name}{R:r:g:b}
+%D \setvalue{\??cr name}{C:c:m:y:k}
+%D \setvalue{\??cr name}{S:s}
+%D \stoptyping
+%D
+%D Gray scales are specified with the \type{s} parameter,
+%D where the \type {s} is derived from {\em screen}.
+%D
+%D Starting with \PDF\ 1.4 (2001) \CONTEXT\ supports
+%D transparent colors. The transparency factor is represented
+%D by a \type {t} and the transparency method by an \type {a}
+%D (alternative). Later we will implement more control
+%D (probably by symbolic methods. So, currently the data is
+%D stored as follows:
+%D
+%D \starttyping
+%D \setvalue{\??cr name}{R:r:g:b:a:t}
+%D \setvalue{\??cr name}{C:c:m:y:k:a:t}
+%D \setvalue{\??cr name}{S:s:a:t}
+%D \stoptyping
+
+% r g b : rbg
+% c m y k : cmyk
+% s : gray
+% p n d f : spot
+% h : hexadecimal
+% t a : transparency
+% e : equivalent (spotcolors)
+
+\def\@@cl@@z{0}
+\def\@@cl@@o{1}
+
+\def\@@resetcolorparameters
+ {\let\@@cl@@r\@@cl@@z \let\@@cl@@g\@@cl@@z \let\@@cl@@b\@@cl@@z
+ \let\@@cl@@c\@@cl@@z \let\@@cl@@m\@@cl@@z \let\@@cl@@y\@@cl@@z \let\@@cl@@k\@@cl@@z
+ \let\@@cl@@s\@@cl@@z
+ \let\@@cl@@p\@@cl@@o \let\@@cl@@n\empty \let\@@cl@@d\empty \let\@@cl@@f\@@cl@@o
+ \let\@@cl@@h\empty
+ \let\@@cl@@e\empty
+ \let\@@cl@@t\@@cl@@z \let\@@cl@@a\@@cl@@z}
+
+\@@resetcolorparameters
+
+\def\@@cl@@A{\@@cl@@a} % a hook for symbolic conversion, see below
+
+%D Handling a few nested \type{\cs}'s is no problem (\type
+%D {\@EA\@EAEAEA\@EA}) but we need a full expansion, so I
+%D tried one of the fully expandable primitives using a sort
+%D of delimited thing. I tried \type {\number} first, but this
+%D does not work, but \type {\romannumeral} does. Actually,
+%D \type{\romannumeral0} returns nothing, so it's a perfect
+%D candidate for this kind of hackery. This reminds me that I
+%D have to look into David Kastrup's Euro\TeX\ 2002 article
+%D because he is using \type {\romannumeral} for loops
+%D (repetitive \quote {m} stuff).
+
+% \def\x{\y}\def\y{\z}\def\z{0:1:1:1}
+%
+% \def\bla #1:#2:#3\end{}
+%
+% \@EA\bla\romannumeral\x\end
+
+\def\colorXpattern{0S:\@@cl@@z:\@@cl@@z:\@@cl@@z}
+\def\colorZpattern{0S:\@@cl@@z:\@@cl@@A:\@@cl@@t}
+\def\colorSpattern{0S:\@@cl@@s:\@@cl@@A:\@@cl@@t}
+\def\colorCpattern{0C:\@@cl@@c:\@@cl@@m:\@@cl@@y:\@@cl@@k:\@@cl@@A:\@@cl@@t}
+\def\colorRpattern{0R:\@@cl@@r:\@@cl@@g:\@@cl@@b:\@@cl@@A:\@@cl@@t}
+
+%def\colorPpattern{0P:\@@cl@@n:\@@cl@@p:\@@cl@@A:\@@cl@@t}
+
+\def\colorPpattern{0P:\@@cl@@n:\@@cl@@f:\@@cl@@d:\@@cl@@p:\@@cl@@A:\@@cl@@t}
+
+%D The extra 0 catches empty colors specs (needed for the
+%D \type {\MPcolor} and \type {\PDFcolor} conversion (\type
+%D {\@@cr} equals \type {\relax}!).
+
+\def\handlecolorwith#1{\@EA#1\romannumeral0}
+
+%D Next comes the main definition macro.
+
+\def\dodefinecolor {\dododefinecolor\relax \setvalue \setevalue1}
+\def\dodefineglobalcolor{\dododefinecolor\doglobal\setgvalue\setxvalue1}
+\def\dodefinenamedcolor {\dododefinecolor\doglobal\setvalue \setevalue0}
+
+\def\dododefinecolor#1#2#3#4[#5][#6]% #2==set(g)value #3==set[e|x]value
+ {#1\addtocommalist{#5}\colorlist % optional
+ \doifassignmentelse{#6}
+ {\@@resetcolorparameters
+ \getparameters[\??cl @@][#6]%
+ \ifx\@@cl@@h\empty
+ \doifelse{\@@cl@@r\@@cl@@g\@@cl@@b}{\@@cl@@z\@@cl@@z\@@cl@@z}
+ {\doifelse{\@@cl@@c\@@cl@@m\@@cl@@y\@@cl@@k}{\@@cl@@z\@@cl@@z\@@cl@@z\@@cl@@z}
+ {\doifelse\@@cl@@s\@@cl@@z
+ {\showmessage\m!colors8{{[#6]},#5}%
+ #3{\??cr#5}{\colorZpattern}}
+ {#3{\??cr#5}{\colorSpattern}}}
+ {#3{\??cr#5}{\colorCpattern}}}
+ {#3{\??cr#5}{\colorRpattern}}%
+ \else
+ \setxvalue{\??cr#5}{\colorHpattern}%
+ \fi
+ % new: e=external spot color name
+ \ifx\@@cl@@e\empty \else
+ \doregisterspotcolorname{#5}\@@cl@@e
+ \fi}
+ {\doifelsenothing\currentpalet
+ \donefalse
+ {\doifdefinedelse{\??cr\currentpalet#6}\donetrue\donefalse}%
+ \ifdone
+ \doifnot{#5}{#6}
+ {#2{\??cr#5}{\paletcolorspec{#6}}}%
+ \else
+ \doifdefinedelse{\??cr#6}
+ {\doifelse{#5}{#6}
+ {% this way we can freeze \definecolor[somecolor][somecolor]
+ % and still prevent cyclic definitions
+ \iffreezecolors#3{\??cr#5}{\csname\??cr#6\endcsname}\fi}
+ {\iffreezecolors\@EA#3\else\@EA#2\fi{\??cr#5}{\csname\??cr#6\endcsname}}}
+ {\showmessage\m!colors3{#5 (def)}}%
+ \fi}%
+ \ifcase#4\or
+ \unexpanded#2{#5}{\switchtocolor[#5]}% \unexpanded toegevoegd
+ \fi}
+
+\def\paletcolorspec#1%
+ {\csname\??cr\currentpalet#1\endcsname}
+
+%D Hex color support is not enabled by default. You need to say \type
+%D {\setupcolor [hex]} to get this working.
+
+\ifx\colorHpattern\undefined \let\colorHpattern\colorZpattern \fi
+
+%D New and experimental.
+
+\def\dodefinespotcolor[#1][#2][#3]% todo: always global
+ {\doifnot{#1}{#2}
+ {\@@resetcolorparameters
+ \doglobal\addtocommalist{#1}\colorlist % optional
+ \edef\@@cl@@n{#2}%
+ \getparameters[\??cl @@][#3]%
+ \doifnothing\@@cl@@p{\let\@@cl@@p\!!plusone}%
+ \ifx\@@cl@@e\empty \else
+ \doregisterspotcolorname{#2}\@@cl@@e
+ \fi
+ \doglobal\addtocommalist{#2}\allspotcolors
+ \setxvalue{\??cr#1}{\colorPpattern}% was \setevalue
+ \setgvalue{#1}{\switchtocolor[#1]}}} % was \setvalue
+
+\def\registerusedspotcolors
+ {\ifx\allspotcolors\empty \else
+ \bgroup
+ \let\usedspotcolors\empty
+ \def\docommand##1%
+ {\doifdefined{\??cs##1}{\addtocommalist{##1}\usedspotcolors}}%
+ \processcommacommand[\allspotcolors]\docommand
+ \savecurrentvalue\usedspotcolors\usedspotcolors
+ \egroup
+ \fi}
+
+\def\registerusedcolorchannels
+ {\bgroup
+ \doifdefinedelse{\??cs c}
+ {\def\usedcolorchannels{c,m,y,k}}%
+ {\let\usedcolorchannels\empty}%
+ \doifdefined{\??cs r}
+ {\addtocommalist{r,g,b}\usedcolorchannels}%
+ \doifdefined{\??cs s}
+ {\ExpandBothAfter\doifnotinset{k}\usedcolorchannels
+ {\addtocommalist{s}\usedcolorchannels}}%
+ \savecurrentvalue\usedcolorchannels\usedcolorchannels
+ \egroup}
+
+\prependtoks
+ \registerusedspotcolors
+ \registerusedcolorchannels
+\to \everylastshipout
+
+\def\registerusedspotcolor#1%
+ {\global\@EA\chardef\csname\??cs#1\endcsname\zerocount}
+
+%D On top of spotcolors, we define multitone colors. You'd better know
+%D what you're doing because invalid definitions will lead to invalid
+%D documents (i.e.\ resources).
+
+% \definecolor [darkblue] [c=.5,m=.5]
+% \definecolor [darkyellow] [y=.5]
+%
+% \definemultitonecolor [whatever] [darkblue=.5,darkyellow=.5] [c=.25,m=.25,y=.25] [a=1,t=.5]
+% \definemultitonecolor [another] [darkblue=.5,darkyellow=.5] [c=.25,m=.25,y=.25]
+
+\def\dodefinemultitonecolor[#1][#2][#3][#4]%
+ {\let\@@cl@@cl@@D\empty % n's
+ \let\@@cl@@cl@@P\empty % p's
+ \let\@@cl@@cl@@N\empty % name
+ \scratchcounter\zerocount
+ \processcommacommand[#2]\dododefinemultitonecolor
+ \bgroup
+ \lccode`\.=`\_%
+ \lccode`\,=`\_%
+ \lccode`\:=`\_%
+ \lccode`\;=`\_%
+ \lccode`\+=`\_%
+ \lccode`\-=`\_%
+ \lccode`\*=`\_%
+ \lccode`\/=`\_%
+% \lccode`\_=`\_%
+ % not needed, other attribute in driver:
+ %
+ % \@@resetcolorparameters
+ % \getparameters[#4]%
+ % \ifx\@@cl@@t\@@cl@@z\else
+ % \edef\@@cl@@cl@@N{\@@cl@@cl@@N_\@@cl@@t_\@@cl@@a}%
+ % \fi
+ \lowercase\@EA{\@EA\xdef\@EA\@@cleancolor\@EA{\@@cl@@cl@@N}}%
+ \egroup
+ \setxvalue{\??cl\@@cleancolor\s!check}{\noexpand\docheckmultitonecolor{\@@cl@@cl@@D}}%
+ \expanded{\defineglobalcolor[\@@cleancolor][#3,#4]}%
+ \expanded{\definespotcolor[#1][\@@cleancolor][#4,f=\the\scratchcounter,p={\@@cl@@cl@@P},d={\@@cl@@cl@@D}]}}
+
+\def\docheckmultitonecolor#1%
+ {\flushatshipout
+ {\let\checkmultitonecolor\gobbleoneargument
+ \def\docommand##1{\hbox{\definecolor[\s!dummy-100][##1][p=1]\color[\s!dummy-100]}}%
+ \processcommalist[#1]\docommand}}
+
+\def\checkmultitonecolor#1%
+ {\csname\??cl#1\s!check\endcsname\letgvalue{\??cl#1\s!check}\relax}
+
+\def\dodefinespotcolor[#1][#2][#3]% todo: always global (REDEFINED)
+ {\doifnot{#1}{#2}
+ {\@@resetcolorparameters
+ \doglobal\addtocommalist{#1}\colorlist % optional
+ \edef\@@cl@@n{#2}%
+ \getparameters[\??cl @@][#3]%
+ \doifnothing \@@cl@@p{\let\@@cl@@p\!!plusone}%
+ \doifsomething\@@cl@@e{\doregisterspotcolorname{#2}\@@cl@@e}%
+ \doglobal\addtocommalist{#2}\allspotcolors
+ \setxvalue{\??cr#1}{\colorPpattern}% was \setevalue
+ \setgvalue{#1}{\switchtocolor[#1]}}}% was \setvalue
+
+\def\dododefinemultitonecolor#1%
+ {\advance\scratchcounter\plusone
+ \splitstring#1\at=\to\!!stringa\and\!!stringb
+ \ifx\@@cl@@cl@@D\empty
+ \let\@@cl@@cl@@D\!!stringa
+ \let\@@cl@@cl@@P\!!stringb
+ \normalizecolor\!!stringb
+ \edef\@@cl@@cl@@N{\!!stringa_\!!stringb}%
+ \else
+ \edef\@@cl@@cl@@D{\@@cl@@cl@@D,\!!stringa}%
+ \edef\@@cl@@cl@@P{\@@cl@@cl@@P,\!!stringb}%
+ \normalizecolor\!!stringb
+ \edef\@@cl@@cl@@N{\@@cl@@cl@@N_\!!stringa_\!!stringb}%
+ \fi}
+
+% \def\dododefinemultitonecolor#1% a/b safe
+% {\advance\scratchcounter\plusone
+% \splitstring#1\at=\to\@@cl@@one\and\@@cl@@two
+% \ifx\@@cl@@cl@@D\empty
+% \let\@@cl@@cl@@D\@@cl@@one
+% \let\@@cl@@cl@@P\@@cl@@two
+% \normalizecolor\@@cl@@two
+% \edef\@@cl@@cl@@N{\@@cl@@one_\@@cl@@two}%
+% \else
+% \edef\@@cl@@cl@@D{\@@cl@@cl@@D,\@@cl@@one}%
+% \edef\@@cl@@cl@@P{\@@cl@@cl@@P,\@@cl@@two}%
+% \normalizecolor\@@cl@@two
+% \edef\@@cl@@cl@@N{\@@cl@@cl@@N_\@@cl@@one_\@@cl@@two}%
+% \fi}
+
+%D The names of colors are stored in a comma separated list
+%D only for the purpose of showing them with \type {\showcolor}.
+%D
+%D \startbuffer
+%D \definecolor [SomeKindOfRed] [r=.8,g=.05,b=.05]
+%D \stopbuffer
+%D
+%D \typebuffer
+%D \getbuffer
+%D
+%D This color shows up as \color [SomeKindOfRed] {some kind
+%D of red}.
+%D
+%D \starttyping
+%D \setupcolors[state=start]
+%D
+%D \definecolor[mygreen][green]
+%D \definecolor[green][g=.5]
+%D
+%D \startcolor[mygreen]test\stopcolor
+%D
+%D \setupcolors[expansion=no]
+%D
+%D \definecolor[mygreen][green]
+%D \definecolor[green][g=.5]
+%D
+%D \startcolor[mygreen]test\stopcolor
+%D \stoptyping
+
+%D \macros
+%D {startcolormode,stopcolormode,permitcolormode}
+%D
+%D We use \type{\stopcolormode} to reset the color in
+%D whatever color space and do so by calling the corresponding
+%D special. Both commands can be used for fast color
+%D switching, like in colored verbatim,
+
+\newif\ifpermitcolormode \permitcolormodetrue
+
+\def\dowithcolor#1#2% #1=\action #2=color
+ {\ifincolor\ifpermitcolormode
+ \ifcsname\??cr\currentpalet#2\endcsname
+ \handlecolorwith#1\csname\??cr\currentpalet#2\endcsname\od
+ \else\ifcsname\??cr#2\endcsname
+ \handlecolorwith#1\csname\??cr#2\endcsname\od
+ \fi\fi
+ \fi\fi}
+
+\def\startcolormode % includes \ifincolor\ifpermitcolormode
+ {%\dostoptransparency % needed for: {test \trans test \notrans test}
+ \conditionalstoptransparency
+ \dowithcolor\execcolorRCSP}
+
+\def\stopcolormode
+ {\ifincolor\ifpermitcolormode
+ \supportedstoptransparency
+ \dostopcolormode
+ \fi\fi}
+
+\def\restorecolormode
+ {\ifincolor\ifpermitcolormode
+ \supportedstoptransparency
+ \dostopcolormode
+ \ifx\maintextcolor\empty \else
+ \startcolormode\maintextcolor
+ \fi
+ \fi\fi}
+
+%D Color modes are entered using the next set of commands.
+%D The \type{\stop} alternatives are implemented in a way
+%D that permits non||grouped use.
+%D
+%D The, for this module redundant, check if we are in color
+%D mode is needed when we use these macros in other modules.
+
+\def\execcolorRCSP#1:%
+ {\csname execcolor#1\endcsname}
+
+\def\execcolorR
+ {\iffilterspotcolor
+ \@EA\noexeccolorR
+ \else
+ \@EA\doexeccolorR
+ \fi}
+
+\def\execcolorC
+ {\iffilterspotcolor
+ \@EA\noexeccolorC
+ \else
+ \@EA\doexeccolorC
+ \fi}
+
+\def\execcolorS
+ {\iffilterspotcolor
+ \@EA\noexeccolorS
+ \else
+ \@EA\doexeccolorS
+ \fi}
+
+\def\execcolorP
+ {\iffilterspotcolor
+ \@EA\doexeccolorPP
+ \else\ifcase\currentcolorchannel
+ \@EAEAEA\doexeccolorP
+ \else
+ \@EAEAEA\noexeccolorP
+ \fi\fi}
+
+\def\doexeccolorR#1:#2:#3:%
+ {\edef\@@cl@@r{#1}\edef\@@cl@@g{#2}\edef\@@cl@@b{#3}%
+ \ifpreferGRAY\ifx\@@cl@@r\@@cr@@g\ifx\@@cl@@r\@@cl@@b
+ \GRAYpreferedtrue
+ \fi\fi\fi
+ \ifincolor\else\RGBsupportedfalse\CMYKsupportedfalse\fi
+ \ifGRAYprefered
+ \registercolorchannel\c!s
+ \let\@@cl@@s\@@cl@@r
+ \normalizeGRAY
+ \doexeccolorgray
+ \else\ifRGBsupported
+ \registercolorchannel\c!r
+ \normalizeRGB
+ \doexeccolorrgb
+ \else\ifCMYKsupported
+ \registercolorchannel\c!c
+ \convertRGBtoCMYK\@@cl@@r\@@cl@@g\@@cl@@b
+ \normalizeCMYK
+ \doexeccolorcmyk
+ \else
+ \registercolorchannel\c!s
+ \convertRGBtoGRAY\@@cl@@r\@@cl@@g\@@cl@@b
+ \normalizeGRAY
+ \doexeccolorgray
+ \fi\fi\fi
+ \exectransparency}
+
+\def\doexeccolorC#1:#2:#3:#4:%
+ {\edef\@@cl@@c{#1}\edef\@@cl@@m{#2}\edef\@@cl@@y{#3}\edef\@@cl@@k{#4}%
+ \ifpreferGRAY\ifx\@@cl@@k\@@cl@@z\ifx\@@cl@@c\@@cr@@m\ifx\@@cl@@c\@@cl@@y
+ \GRAYpreferedtrue
+ \fi\fi\fi\fi
+ \ifincolor\else\RGBsupportedfalse\CMYKsupportedfalse\fi
+ \ifGRAYprefered
+ \registercolorchannel\c!s
+ \let\@@cl@@s\@@cl@@c
+ \normalizeGRAY
+ \doexeccolorgray
+ \else\ifCMYKsupported
+ \registercolorchannel\c!c
+ \ifreduceCMYK
+ \convertCMYKtoCMY\@@cl@@c\@@cl@@m\@@cl@@y\@@cl@@k
+ \fi
+ \normalizeCMYK
+ \doexeccolorcmyk
+ \else\ifRGBsupported
+ \registercolorchannel\c!r
+ \convertCMYKtoRGB\@@cl@@c\@@cl@@m\@@cl@@y\@@cl@@k
+ \normalizeRGB
+ \doexeccolorrgb
+ \else
+ \registercolorchannel\c!s
+ \convertCMYKtoGRAY\@@cl@@c\@@cl@@m\@@cl@@y\@@cl@@k
+ \normalizeGRAY
+ \doexeccolorgray
+ \fi\fi\fi
+ \exectransparency}
+
+\def\doexeccolorS#1:%
+ {\edef\@@cl@@s{#1}%
+ \registercolorchannel\c!s
+ \normalizeGRAY
+ \doexeccolorgray
+ \exectransparency}
+
+% \def\doexeccolorP#1:#2:%
+% {\edef\@@cl@@n{#1}%
+% \edef\@@cl@@p{#2}%
+% \registerusedspotcolor\@@cl@@n
+% \ifSPOTsupported
+% \dowithcolor\registerspotcolor\@@cl@@n
+% \dostartspotcolormode\@@cl@@n\@@cl@@p
+% \else
+% \doingspotcolortrue
+% \let\spotcolorfactor\@@cl@@p
+% \factorizecolortrue % using counter and array
+% \dowithcolor\execcolorRCSP\@@cl@@n
+% \factorizecolorfalse
+% \let\spotcolorfactor\@@cl@@o
+% \doingspotcolorfalse
+% \fi
+% \exectransparency}
+
+\def\doexeccolorP#1:#2:#3:#4:%
+ {\edef\@@cl@@n{#1}% name
+ \edef\@@cl@@f{#2}% fractions
+ \edef\@@cl@@d{#3}% definitions
+ \edef\@@cl@@p{#4}%
+ \ifx\@@cl@@d\empty
+ \let\@@cl@@d\@@cl@@n
+ \fi
+ \registerusedspotcolor\@@cl@@n
+ \ifSPOTsupported
+ \checkmultitonecolor\@@cl@@n
+ \dowithcolor\registerspotcolor\@@cl@@n
+ \dostartspotcolormode\@@cl@@n\@@cl@@p
+ \else
+ \doingspotcolortrue
+ \normalizespotcolor\@@cl@@p
+ \let\spotcolorfactor\@@cl@@p
+ \factorizecolortrue % using counter and array
+ \dowithcolor\execcolorRCSP\@@cl@@n
+ \factorizecolorfalse
+ \let\spotcolorfactor\@@cl@@o
+ \doingspotcolorfalse
+ \fi
+ \exectransparency}
+
+\def\doexeccolorPindex#1:#2:#3:#4:%
+ {\edef\@@cl@@n{#1}%
+ \edef\@@cl@@f{#2}%
+ \edef\@@cl@@d{#3}%
+ \edef\@@cl@@p{#4}%
+ \ifx\@@cl@@d\empty
+ \let\@@cl@@d\@@cl@@n
+ \fi
+ \ifSPOTsupported
+ \checkmultitonecolor\@@cl@@n
+ \dowithcolor\registerindexcolor\@@cl@@n
+ \fi
+ \noexectransparency}
+
+\def\doexeccolorPP#1:#2:%
+ {\edef\@@cl@@n{#1}%
+ \edef\@@cl@@p{#2}%
+ \registerusedspotcolor\@@cl@@n
+ \ifx\@@cl@@n\currentspotcolor
+ \normalizeSPOT
+ \dostartgraycolormode\@@cl@@p % was spotcolormode
+ \else
+ \dovidecolor\@@cl@@p\@@cl@@o
+ \fi
+ \exectransparency}
+
+\def\doexeccolorrgb
+ {\ifcase\currentcolorchannel
+ \dostartrgbcolormode\@@cl@@r\@@cl@@g\@@cl@@b
+ \or \or \or \or
+ \or \dostartgraycolormode\@@cl@@r
+ \or \dostartgraycolormode\@@cl@@g
+ \or \dostartgraycolormode\@@cl@@b
+ \fi}
+
+\def\doexeccolorcmyk
+ {\ifcase\currentcolorchannel
+ \dostartcmykcolormode\@@cl@@c\@@cl@@m\@@cl@@y\@@cl@@k
+ \or \negatecolorcomponent\@@cl@@c\dostartgraycolormode\@@cl@@c
+ \or \negatecolorcomponent\@@cl@@m\dostartgraycolormode\@@cl@@m
+ \or \negatecolorcomponent\@@cl@@y\dostartgraycolormode\@@cl@@y
+ \or \negatecolorcomponent\@@cl@@k\dostartgraycolormode\@@cl@@k
+ \fi}
+
+\def\doexeccolorgray
+ {\ifcase\currentcolorchannel
+ \dostartgraycolormode\@@cl@@s
+ \or \or \or
+ \or \dostartgraycolormode\@@cl@@s
+ \or \or \or
+ \or \dostartgraycolormode\@@cl@@s
+ \fi}
+
+%D When filtering colors, we need to either erase
+%D the background, or ignore the foreground.
+
+% \newif\ifhidesplitcolor \hidesplitcolortrue
+%
+% \def\noexeccolor#1\od
+% {\dostartgraycolormode\@@cl@@o}
+%
+% \let\noexeccolorS\noexeccolor
+% \let\noexeccolorP\noexeccolor
+
+%D Well, here comes some real trickery. When we have the 100\%
+%D spot color or black color, we don't want to erase the
+%D background. So, instead we hide the content by giving it
+%D zero transparency.
+
+% todo : #1#2#3 met #2 > of < and #3 een threshold
+
+\def\dohidecolor#1#2%
+ {\ifhidesplitcolor
+ \ifx#1#2%
+ \dostartgraycolormode\@@cl@@o
+ \else
+ \doregisternonecolor
+ \dostartnonecolormode
+ \fi
+ \else
+ \dostartgraycolormode\@@cl@@o
+ \fi}
+
+\def\dovidecolor#1#2%
+ {\ifhidesplitcolor
+ \ifx#1#2%
+ \doregisternonecolor
+ \dostartnonecolormode
+ \else
+ \dostartgraycolormode\@@cl@@o
+ \fi
+ \else
+ \dostartgraycolormode\@@cl@@o
+ \fi}
+
+% \def\fullytransparentcolor % fails on floats
+% {\dostartgraycolormode\@@cl@@o % better than z
+% %\global\@EA\chardef\csname\@@currenttransparent\endcsname\plusone
+% %\global\intransparenttrue
+% \dostarttransparency10}
+
+\def\noexeccolorR#1:#2:#3:#4\od
+ {\edef\@@cl@@r{#1}\edef\@@cl@@g{#2}\edef\@@cl@@b{#3}%
+ \dohidecolor\@@cl@@s\@@cl@@o}
+
+\def\noexeccolorC#1:#2:#3:#4:#5\od
+ {\edef\@@cl@@c{#1}\edef\@@cl@@m{#2}\edef\@@cl@@y{#3}\edef\@@cl@@k{#4}%
+ \dohidecolor\@@cl@@s\@@cl@@o}
+
+\def\noexeccolorS#1:#2\od
+ {\edef\@@cl@@s{#1}%
+ \dohidecolor\@@cl@@s\@@cl@@o}
+
+\def\noexeccolorP#1:#2:#3:#4:#5\od
+ {\edef\@@cl@@p{#4}%
+ \dohidecolor\@@cl@@p\@@cl@@z}
+
+%D For the sake of postprocessing (i.e.\ color separation)
+%D we can normalize colors, which comes down to giving equal
+%D values an equal accuracy and format. This feature is
+%D turned off by default due to a speed penalty. This macro
+%D also handles spot color percentages.
+
+\newif\iffactorizecolor
+\newif\ifnormalizecolor
+
+\def\spotcolorfactor{1}
+
+% \def\normalizecolor#1%
+% {\colordimen#1\thousandpoint
+% \colordimen\spotcolorfactor\colordimen
+% \colorcount\colordimen
+% \advance\colorcount \medcard
+% \divide\colorcount \maxcard
+% \edef#1{\realcolorvalue\colorcount}}
+
+\def\normalizecolor#1%
+ {\colorcount\numexpr(\dimexpr\spotcolorfactor\dimexpr#1\thousandpoint\relax\relax+\medcard)/\maxcard\relax
+ \edef#1{\realcolorvalue\colorcount}}
+
+% \def\normalizespotcolor#1%
+% {\colordimen-#1\thousandpoint
+% \advance\colordimen\thousandpoint
+% \colorcount\colordimen
+% \advance\colorcount \medcard
+% \divide\colorcount \maxcard
+% \edef#1{\realcolorvalue\colorcount}}
+
+\def\normalizespotcolor#1%
+ {\colorcount\numexpr(\dimexpr\thousandpoint-#1\thousandpoint\relax+\medcard)/\maxcard\relax
+ \edef#1{\realcolorvalue\colorcount}}
+
+\def\donormalizeRGB
+ {\normalizecolor\@@cl@@r
+ \normalizecolor\@@cl@@g
+ \normalizecolor\@@cl@@b}
+
+\def\normalizeRGB
+ {\ifnormalizecolor
+ \donormalizeRGB
+ \else\iffactorizecolor
+ \donormalizeRGB
+ \fi\fi}
+
+\def\donormalizeCMYK
+ {\normalizecolor\@@cl@@c
+ \normalizecolor\@@cl@@m
+ \normalizecolor\@@cl@@y
+ \normalizecolor\@@cl@@k}
+
+\def\normalizeCMYK
+ {\ifnormalizecolor
+ \donormalizeCMYK
+ \else\iffactorizecolor
+ \donormalizeCMYK
+ \fi\fi}
+
+\def\donormalizeGRAY
+ {\normalizecolor\@@cl@@s}
+
+\def\normalizeGRAY
+ {\ifnormalizecolor
+ \donormalizeGRAY
+ \else\iffactorizecolor
+ \donormalizeGRAY
+ \fi\fi}
+
+\def\normalizeSPOT
+ {\normalizespotcolor\@@cl@@p}
+
+%D We need to register spot colors (i.e.\ resources need to
+%D be created.
+
+\def\registerspotcolor#1:%
+ {\ifcsname\??cl:\c!p:\@@cl@@n\endcsname
+ \@EA\dontregisterspotcolor
+ \else
+ \letgvalue{\??cl:\c!p:\@@cl@@n}\empty
+ %\@EA\@EA\csname registerspotcolor#1\endcsname
+ \csname registerspotcolor#1\@EA\endcsname
+ \fi}
+
+% todo: convert to rgb if needed, will will do this in mkiv
+
+\def\dontregisterspotcolor #1\od{}
+\def\registerspotcolorR #1:#2:#3:#4\od{\doregisterrgbspotcolor \@@cl@@n\@@cl@@f\@@cl@@d\@@cl@@p{#1}{#2}{#3}}
+\def\registerspotcolorC#1:#2:#3:#4:#5\od{\doregistercmykspotcolor\@@cl@@n\@@cl@@f\@@cl@@d\@@cl@@p{#1}{#2}{#3}{#4}}
+\def\registerspotcolorS #1:#2\od{\doregistergrayspotcolor\@@cl@@n\@@cl@@f\@@cl@@d\@@cl@@p{#1}}
+\def\registerspotcolorP #1:#2:#3\od{\doregistergrayspotcolor\@@cl@@n\@@cl@@f\@@cl@@d\@@cl@@p{#2}}
+
+%D Experimental feature:
+
+% \definecolor [darkblue] [c=1,m=.38,y=0,k=.64] % pantone pms 2965 uncoated m
+% \definecolor [darkyellow] [c=0,m=.28,y=1,k=.06] % pantone pms 124 uncoated m
+%
+% \definecolor [darkblue-50] [darkblue] [p=.5]
+% \definecolor [darkyellow-50] [darkyellow] [p=.5]
+% \definecolor [darkblue-80] [darkblue] [p=.8]
+% \definecolor [darkyellow-80] [darkyellow] [p=.8]
+%
+% \definecolor [darkblue,darkyellow] [r=.8]
+% \definecolor [darkdull-5030] [darkblue,darkyellow] [p={.5,.3}]
+%
+% \setupcolors[state=start]
+%
+% \blackrule[width=4cm,height=3cm,color=darkblue-50]
+% \blackrule[width=4cm,height=3cm,color=darkblue-80]
+% \blackrule[width=4cm,height=3cm,color=darkyellow-50]
+% \blackrule[width=4cm,height=3cm,color=darkyellow-80]
+% \blackrule[width=4cm,height=3cm,color=darkdull-5030]
+
+%D Experimental too (special purpose code).
+
+\def\registerindexcolor#1:%
+ {\ifcsname\??cl:i:\@@cl@@n\endcsname
+ \@EA\dontregisterindexcolor
+ \else
+ \letgvalue{\??cl:i:\@@cl@@n}\empty % signal
+ \showmessage\m!colors{12}\@@cl@@n
+ \@EA\@EA\csname registerindexcolor#1\endcsname
+ \fi}
+
+\let\dontregisterindexcolor\dontregisterspotcolor
+
+\def\registerindexcolorR #1:#2:#3:#4\od{\doregisterrgbindexcolor \@@cl@@n\@@cl@@f\@@cl@@d\@@cl@@p{#1}{#2}{#3}}
+\def\registerindexcolorC#1:#2:#3:#4:#5\od{\doregistercmykindexcolor\@@cl@@n\@@cl@@f\@@cl@@d\@@cl@@p{#1}{#2}{#3}{#4}}
+\def\registerindexcolorS #1:#2\od{\doregistergrayindexcolor\@@cl@@n\@@cl@@f\@@cl@@d\@@cl@@p{#1}}
+\def\registerindexcolorP #1:#2:#3\od{\doregistergrayindexcolor\@@cl@@n\@@cl@@f\@@cl@@d\@@cl@@p{#2}}
+
+\def\predefinecolor[#1]%
+ {\bgroup
+ \flushatshipout{\hbox{\localcolortrue\color[#1]{}}}% real ones
+ \egroup}
+
+\def\predefineindexcolor[#1]%
+ {\bgroup
+ \flushatshipout{\hbox{\localcolortrue\color[#1]{}}}% real ones
+ \let\doexeccolorP\doexeccolorPindex
+ \flushatshipout{\hbox{\localcolortrue\color[#1]{}}}% index one
+ \egroup}
+
+% \def\checkpredefinedcolor[#1]%
+% {\ifcase\internalspotcolorsize{#1}\relax
+% \@EA\predefinecolor\or\@EA\predefinecolor\else\@EA\predefineindexcolor
+% \fi[#1]}
+
+\let\checkpredefinedcolor\predefineindexcolor % we need an index in order to negate bitmaps
+
+%D Transparency is handled similar for all three color modes. We
+%D can turn transparency off with the following switch:
+
+\newif\iftransparencysupported \transparencysupportedtrue % only mkii
+
+\def\exectransparency
+ {\iftransparencysupported
+ \expandafter\doexectransparency
+ \else
+ \expandafter\noexectransparency
+ \fi}
+
+\def\doexectransparency#1:#2\od
+ {\ifcase#1\space
+ \global\intransparentfalse
+ \else
+ \global\intransparentfalse
+ %\dostarttransparency{#1}{#2}%
+ \supportedstarttransparency{#1}{#2}%
+ \global\intransparenttrue
+ \fi}
+
+\def\noexectransparency#1\od
+ {}
+
+%D Experimental: minimize transparency resets.
+
+\newif\ifintransparent
+\newif\ifoptimizetransparency \optimizetransparencytrue % under test
+
+\let\supportedstoptransparency\relax
+
+\def\conditionalstoptransparency
+ {\ifoptimizetransparency
+ \ifintransparent
+ \global\intransparentfalse
+ \supportedstoptransparency
+ \fi
+ \else
+ \supportedstoptransparency
+ \fi}
+
+\def\supportedstarttransparency
+ {\iftransparencysupported
+ \globallet\supportedstoptransparency\dostoptransparency
+ \expandafter\dostarttransparency
+ \else
+ \expandafter\gobbletwoarguments
+ \fi}
+
+%D We now use the \type {\@@cl@@A} hook to implement
+%D symbolic names. These are converted into numbers
+%D at definition time (which saves runtime).
+
+\def\dodefinetransparency[#1][#2]%
+ {\@EA\chardef\csname\??cl-#1\endcsname#2\relax}
+
+\def\transparencynumber#1%
+ {\number\executeifdefined{\??cl-#1}{#1}}
+
+%D Now we hook 'm into the patterns:
+
+\def\@@cl@@A{\transparencynumber\@@cl@@a}
+
+%D The next macro can be used to return to the (normal)
+%D page color. This macro is used in the same way as
+%D \type {\color}.
+
+\def\startregistercolor[#1]%
+ {\permitcolormodefalse\startcolor[#1]\permitcolormodetrue}
+
+\def\stopregistercolor
+ {\permitcolormodefalse\stopcolor\permitcolormodetrue}
+
+\def\starttextcolor[#1]%
+ {\doifsomething{#1}
+ {\bgroup
+ \def\stoptextcolor % also goes ok with \page after
+ {\let\maintextcolor\empty % this one because the top of
+ \stopregistercolor % page sets the color right (side
+ \egroup}% % effect)
+ \def\starttextcolor[##1]%
+ {\bgroup
+ % \@@themaintextcolor==##1 is catched in \definecolor
+ \definecolor[\@@themaintextcolor][##1]%
+ \let\stoptextcolor\egroup}%
+ \startregistercolor[\@@themaintextcolor]%
+ \definecolor[\@@themaintextcolor][#1]%
+ \let\maintextcolor\@@themaintextcolor}}
+
+\let\stoptextcolor\relax
+
+%D The following hook permits proper support at the text
+%D level. This definition actually belongs in another
+%D module. (May need a different \MKIV\ implementation.)
+
+% \ifx\initializemaintextcolor\undefined
+
+ \let\@@clprevcolor\empty
+
+ \def\initializemaintextcolor
+ {% saveguard for setting text color to empty after
+ % it has been set
+ \doifnothing\@@cltextcolor
+ {\ifx\@@clprevcolor\empty\else
+ \let\@@cltextcolor\defaulttextcolor
+ \fi}%
+ \doifelsenothing\@@cltextcolor
+ {\let\maintextcolor\empty}
+ {\edef\@@clprevcolor{\@@cltextcolor}%
+ \let\maintextcolor\@@themaintextcolor
+ \doifelsenothing\@@cltextcolor % another saveguard
+ {\definecolor[\@@themaintextcolor][\defaulttextcolor]}%
+ {\definecolor[\@@themaintextcolor][\@@cltextcolor]}%
+ \doinitializemaintextcolor}}
+
+ \def\doinitializemaintextcolor
+ {\appendtoks\starttextcolor[\@@themaintextcolor]\to\everystarttext
+ \appendtoks\stoptextcolor \to\everystoptext
+ \let\doinitializemaintextcolor\relax}
+
+% \fi
+
+\def\localstarttextcolor
+ {\ifx\maintextcolor\empty
+ \startcolormode\defaulttextcolor
+ \else
+ \startcolormode\maintextcolor
+ \fi}
+
+% \def\localstoptextcolor
+% {\stopcolormode}
+%
+% better:
+
+\def\localstoptextcolor
+ {\restorecolormode}
+
+\def\restoretextcolor
+ {\ifx\maintextcolor\empty
+ \expandafter\dorestoretextcolor
+ \else
+ % obey main text color
+ \fi}
+
+\def\dorestoretextcolor
+ {\color[\defaulttextcolor]}
+
+%D We use some reserved names for local color components.
+%D Consistent use of these scratch variables saves us
+%D unneccessary hash entries.
+%D
+%D \starttyping
+%D \@@cl@@r \@@cl@@g \@@cl@@b
+%D \@@cl@@c \@@cl@@m \@@cl@@y \@@cl@@k
+%D \@@cl@@s
+%D \stoptyping
+%D
+%D We implement several conversion routines.
+%D
+%D \starttyping
+%D \convertRGBtoCMYK {r} {g} {b}
+%D \convertRGBtoGRAY {r} {g} {b}
+%D \convertCMYKtoRGB {c} {m} {y} {k}
+%D \convertCMYKtoGRAY {c} {m} {y} {k}
+%D \convertCMYKtoCMY {c} {m} {y} {k}
+%D \stoptyping
+%D
+%D The relation between \cap{Gray}, \cap{RGB} and \cap{CMYK}
+%D is:
+%D
+%D \placeformula[-]
+%D \startformula
+%D G = .30r + .59g + .11b
+%D = 1.0 - \min(1.0,\ .30c + .59m + .11y + k)
+%D \stopformula
+%D
+%D When converting from \cap{CMYK} to \cap{RGB} we use the
+%D formula:
+%D
+%D \placeformula[-]
+%D \startformula
+%D \eqalign
+%D {r &= 1.0 - \min(1.0,\ c+k) \cr
+%D g &= 1.0 - \min(1.0,\ m+k) \cr
+%D b &= 1.0 - \min(1.0,\ y+k)}
+%D \stopformula
+%D
+%D In the conversion routine the color components are calculated
+%D in three digits precision.
+
+\def\realcolorvalue#1%
+ {\ifnum#1>\zerocount % important, first encountered in --modu supp-mpe
+ \ifnum#1<\plusten 0.00\the#1\else
+ \ifnum#1<\plushundred 0.0\the#1\else
+ \ifnum#1<\plusthousand 0.\the#1\else
+ 1\fi\fi\fi
+ \else 0\fi}
+
+% \def\doconvertCMYKtoRGB#1\k#2\to#3%
+% {\ifdim#2\points>#1\points% >= problem, repaired 2/12/2002
+% \let#3\@@cl@@z % k >= color
+% \else
+% \colordimen\onepoint
+% \advance\colordimen -#1\points
+% \advance\colordimen -#2\points
+% \multiply\colordimen \plusthousand
+% \colorcount\colordimen
+% \advance\colorcount \medcard
+% \divide\colorcount \maxcard
+% \edef#3{\realcolorvalue\colorcount}%
+% \fi}
+
+\def\doconvertCMYKtoRGB#1\k#2\to#3%
+ {\colorcount\numexpr(\dimexpr\plusthousand\dimexpr\onepoint-#1\points-#2\points\relax\relax+\medcard)/\maxcard\relax
+ \ifnum\colorcount>\zeropoint
+ \edef#3{\realcolorvalue\colorcount}%
+ \else
+ \let#3\@@cl@@z
+ \fi}
+
+\def\convertCMYKtoRGB#1#2#3#4%
+ {\doconvertCMYKtoRGB#1\k#4\to\@@cl@@r
+ \doconvertCMYKtoRGB#2\k#4\to\@@cl@@g
+ \doconvertCMYKtoRGB#3\k#4\to\@@cl@@b}
+
+% \def\doconvertRGBtoCMYK#1\to#2%
+% {\colordimen#1\points
+% \multiply\colordimen \plusthousand
+% \colorcount\colordimen
+% \advance\colorcount \medcard
+% \divide\colorcount \maxcard
+% \colorcount-\colorcount
+% \advance\colorcount \plusthousand
+% \edef#2{\realcolorvalue\colorcount}}
+
+\def\doconvertRGBtoCMYK#1\to#2%
+ {\colorcount\numexpr\plusthousand-(\dimexpr\plusthousand\dimexpr#1\points\relax\relax+\medcard)/\maxcard\relax
+ \edef#2{\realcolorvalue\colorcount}}
+
+\def\convertRGBtoCMYK#1#2#3%
+ {\doconvertRGBtoCMYK#1\to\@@cl@@c
+ \doconvertRGBtoCMYK#2\to\@@cl@@m
+ \doconvertRGBtoCMYK#3\to\@@cl@@y
+ \let\@@cl@@k\@@cl@@z}
+
+%D The following switch is mainly meant for (hidden)
+%D documentation purposes.
+
+\def\nGRAYfactor{333.333}
+\def\rGRAYfactor{\ifweightGRAY300\else\nGRAYfactor\fi}
+\def\gGRAYfactor{\ifweightGRAY590\else\nGRAYfactor\fi}
+\def\bGRAYfactor{\ifweightGRAY110\else\nGRAYfactor\fi}
+
+% \def\convertRGBtoGRAY#1#2#3%
+% {\colordimen#1\points
+% \colordimen\rGRAYfactor\colordimen
+% \colorcount\colordimen
+% \colordimen#2\points
+% \colordimen\gGRAYfactor\colordimen
+% \advance\colorcount \colordimen
+% \colordimen#3\points
+% \colordimen\bGRAYfactor\colordimen
+% \advance\colorcount \colordimen
+% \advance\colorcount \medcard
+% \divide\colorcount \maxcard
+% \edef\@@cl@@s{\realcolorvalue\colorcount}}
+
+\def\convertRGBtoGRAY#1#2#3%
+ {\colorcount\numexpr
+ (\dimexpr\rGRAYfactor\dimexpr#1\points\relax\relax+
+ \dimexpr\gGRAYfactor\dimexpr#2\points\relax\relax+
+ \dimexpr\bGRAYfactor\dimexpr#3\points\relax\relax+
+ \medcard)/\maxcard
+ \relax
+ \edef\@@cl@@s{\realcolorvalue\colorcount}}
+
+\def\convertCMYKtoGRAY#1#2#3#4%
+ {\convertCMYKtoRGB{#1}{#2}{#3}{#4}%
+ \convertRGBtoGRAY\@@cl@@r\@@cl@@g\@@cl@@b}
+
+% \def\doconvertCMYKtoCMY#1\k#2\to#3%
+% {\colordimen#1\points
+% \advance\colordimen #2\points\relax
+% \ifdim\colordimen>\onepoint
+% \colordimen\onepoint
+% %\else
+% % \colordimen\colordimen
+% \fi
+% \multiply\colordimen \plusthousand
+% \colorcount\colordimen
+% \advance\colorcount \medcard
+% \divide\colorcount \maxcard
+% \edef#3{\realcolorvalue\colorcount}}
+
+\def\doconvertCMYKtoCMY#1\k#2\to#3%
+ {\colorcount\numexpr(\dimexpr\plusthousand\dimexpr#1\points+#2\points\relax\relax+\medcard)/\maxcard\relax
+ \ifnum\colorcount>\plusthousand
+ \let#3\@@cl@@o
+ \else
+ \edef#3{\realcolorvalue\colorcount}%
+ \fi}
+
+\def\convertCMYKtoCMY#1#2#3#4%
+ {\doconvertCMYKtoCMY#1\k#4\to\@@cl@@c
+ \doconvertCMYKtoCMY#2\k#4\to\@@cl@@m
+ \doconvertCMYKtoCMY#3\k#4\to\@@cl@@y
+ \let\@@cl@@k\@@cl@@z}
+
+%D Before we present the color macros, we first define the
+%D setup command. This command takes care of setting up the
+%D booleans that control local and global behavior (more on
+%D that later) and conversion to other color spaces.
+
+\let\currentspotcolor \empty
+\let\previousspotcolor\empty
+
+%D The tests depend on the use of constants. If we use the \MKIV\
+%D method we can share more.
+
+\def\doifcolorelse#1%
+ {\ifcsname\??cr\ifcsname\??cr\currentpalet#1\endcsname\currentpalet\fi#1\endcsname
+ \expandafter\firstoftwoarguments
+ \else
+ \expandafter\secondoftwoarguments
+ \fi}
+
+\def\doifcolor#1%
+ {\ifcsname\??cr\ifcsname\??cr\currentpalet#1\endcsname\currentpalet\fi#1\endcsname
+ \expandafter\firstofoneargument
+ \else
+ \expandafter\gobbleoneargument
+ \fi}
+
+%D There are a couple of different color switching macros,
+%D the local ones can be used to speed up things (only in \MKII).
+
+\def\localstartcolor
+ {\ifincolor
+ \localcolortrue
+ \expandafter\doglobalstartcolor
+ \else
+ \expandafter\noglobalstartcolor
+ \fi}
+
+\def\localstopcolor
+ {\ifincolor
+ \doglobalstopcolor
+ \else
+ \noglobalstopcolor
+ \fi}
+
+\unexpanded\def\startcolor
+ {\ifincolor
+ \expandafter\doglobalstartcolor
+ \else
+ \expandafter\noglobalstartcolor
+ \fi}
+
+\unexpanded\def\stopcolor
+ {\ifincolor
+ \doglobalstopcolor
+ \else
+ \noglobalstopcolor
+ \fi}
+
+%D This macros call the global color switching ones. Starting
+%D a global, i.e. a possible page boundary crossing, color
+%D mode also sets a \type{\mark} in \TEX's internal list.
+
+\newcount\colorlevel
+
+\letvalue{\??cl0C}\empty % saved color
+\letvalue{\??cl0S}\empty % stop command
+
+%D We keep a positive color stack for foreground colors, and
+%D a negative one for backgrounds. Not that brilliant a
+%D solution, but it suits. The signs are swapped when the
+%D page ornaments are typeset.
+
+\let\@@colorplus \plusone
+\let\@@colorminus\minusone
+
+\def\@@currentcolorname {\??cl\the\colorlevel C}
+\def\@@currentcolorstop {\??cl\the\colorlevel S}
+%def\@@currenttransparent{\??cl\the\colorlevel T}
+
+\letvalue{\??cl*\s!black}\s!black
+
+\def\currentcolorname
+ {\csname
+ \ifcsname\@@currentcolorname\endcsname
+ \expandafter\ifx\csname\@@currentcolorname\endcsname\empty
+ \??cl*\s!black
+ \else
+ \@@currentcolorname
+ \fi
+ \else
+ \??cl*\s!black
+ \fi
+ \endcsname}
+
+\def\outercolorname
+ {\ifcsname\@@currentcolorname\endcsname
+ \expandafter\ifx\csname\@@currentcolorname\endcsname\empty
+ \s!black
+ \else
+ currentcolor%
+ \fi
+ \else
+ \s!black
+ \fi}
+
+% not the following, because we need a different tag in order to trick the stack
+%
+% \def\outercolorname{\executeifdefined\@@currentcolorname\s!black}
+%
+% \def\startcurrentcolor{\expanded{\startcolor[\s!black]\noexpand\startcolor[\outercolorname]}}
+% \def\stopcurrentcolor {\stopcolor\stopcolor}
+%
+% test case:
+%
+% \setupcolors[state=start,textcolor=red]
+% \starttext
+% red
+% \color[green]{green
+% \startMPcode
+% label(\sometxt{green\color[blue]{blue}green}, origin) withcolor red;
+% draw fullcircle scaled 1cm xscaled 2;
+% \stopMPcode
+% green}
+% red
+% \stoptext
+
+\def\dodoglobalstartcolor
+ {\global\@EA\let\@EA\@@currentcolor\csname\@@currentcolorname\endcsname
+ \global\advance\colorlevel \@@colorplus
+ \global\@EA\let\csname\@@currentcolorname\endcsname\@@askedcolor
+ %\debuggerinfo\m!colors
+ % {start \@@askedcolor\space at level \the\colorlevel}%
+ \ifx\@@askedcolor\empty
+ \global\@EA\let\csname\@@currentcolorname\endcsname\@@currentcolor
+ \global\@EA\let\csname\@@currentcolorstop\endcsname\donoglobalstopcolor
+ \else\ifx\@@askedcolor\@@currentcolor
+ \global\@EA\let\csname\@@currentcolorstop\endcsname\donoglobalstopcolor
+ \else
+ \doifcolorelse\@@askedcolor
+ {%\docolormark\@@askedcolor
+ \ifpermitcolormode\docolormark\@@askedcolor\fi
+ \global\@EA\let\csname\@@currentcolorstop\endcsname\dodoglobalstopcolor
+ \startcolormode\@@askedcolor}
+ {\global\@EA\let\csname\@@currentcolorstop\endcsname\donoglobalstopcolor
+ \showmessage\m!colors3\@@askedcolor\empty}%
+ \fi\fi}
+
+\def\doglobalstartcolor[#1]%
+ {\edef\@@askedcolor{#1}%
+ \ifcase\colorlevel\relax
+ \ifx\@@askedcolor\empty
+ \global\@EA\let\csname\@@currentcolorstop\endcsname\empty
+ \else
+ \dodoglobalstartcolor
+ \fi
+ \else
+ \dodoglobalstartcolor
+ \fi
+ \ignorespaces}
+
+\def\noglobalstartcolor[#1]%
+ {}
+
+\def\dodoglobalstopcolor
+ {\ifcase\colorlevel \else
+ \donoglobalstopcolor
+ \global\@EA\let\@EA\@@previouscolor\csname\@@currentcolorname\endcsname
+ \ifcase\colorlevel\relax
+ \ifpermitcolormode
+ \docolormark\empty
+ \conditionalstoptransparency
+ \dostopcolormode
+ \fi
+ \else % let's do a bit redundant testing here
+ \docolormark\@@previouscolor
+ \ifx\@@previouscolor\empty
+ \ifpermitcolormode
+ \conditionalstoptransparency
+ \dostopcolormode
+ \fi
+ \else
+ \doifcolorelse\@@previouscolor
+ {\ifx\@@currentcolor\@@previouscolor\else
+ % alternatively we could let \startcolormode handle this
+ \ifpermitcolormode
+ \conditionalstoptransparency % really needed
+ % more safe but less efficient: \dostopcolormode
+ \fi
+ \startcolormode\@@previouscolor
+ \fi}
+ {\ifpermitcolormode
+ \conditionalstoptransparency
+ \dostopcolormode
+ \fi}%
+ \fi
+ \fi
+ \fi}
+
+\def\donoglobalstopcolor
+ {\ifcase\colorlevel \else
+ \global\@EA\let\@EA\@@currentcolor\csname\@@currentcolorname\endcsname
+ %\debuggerinfo{\m!colors}
+ % {stop \@@currentcolor\normalspace at level \the\colorlevel}%
+ \global\advance\colorlevel \@@colorminus
+ \fi}
+
+\def\doglobalstopcolor
+ {\csname\@@currentcolorstop\endcsname}
+
+\let\noglobalstopcolor\relax
+
+\let\faststartcolor\doglobalstartcolor
+\let\faststopcolor \doglobalstopcolor
+
+%D We don't use grouping and save each stop alternative. This
+%D permits be especially useful in for instance local color
+%D support in verbatim. Using \type{\bgroup}||\type{\egroup}
+%D pairs could interfere with calling commands
+
+%D This color mechanism takes care of nested colors, like in:
+%D
+%D \startbuffer
+%D \color[green]{groen \color[green]{groen \color[red]{rood}} groen}
+%D \color[green]{groen \color[]{groen \color[red]{rood}} groen}
+%D \color[green]{groen \color[red]{rood \color[red]{rood}} groen}
+%D \color[green]{groen \color[green]{groen \color[]{groen}} groen}
+%D \color[green]{groen \color[red]{rood} groen}
+%D \color[green]{groen \color[]{groen} groen}
+%D \color[]{zwart \color[red]{rood} zwart}
+%D \color[]{zwart}
+%D \stopbuffer
+%D
+%D \typebuffer
+%D
+%D or
+%D
+%D \startvoorbeeld
+%D \startlines
+%D \getbuffer
+%D \stoplines
+%D \stopvoorbeeld
+%D
+%D Crossing page boundaries is of course also handled.
+%D Undefined or empty color specifications are treated as
+%D efficient as possible.
+%D
+%D \startbuffer
+%D \startcolor[green]
+%D [green] \input tufte [green] \par
+%D \startcolor[]
+%D [green] \input knuth [green] \par
+%D \startcolor[red]
+%D [red] \input tufte [red] \par
+%D \startcolor[yellow]
+%D [yellow] \input knuth [yellow] \par
+%D \stopcolor
+%D [red] \input tufte [red] \par
+%D \stopcolor
+%D [green] \input knuth [green] \par
+%D \stopcolor
+%D [green] \input tufte [green] \par
+%D \stopcolor
+%D \stopbuffer
+%D
+%D \startpacked
+%D \getbuffer
+%D \stoppacked
+%D
+%D These quotes are typeset by saying:
+%D
+%D \typebuffer
+
+%D We already mentioned that colors interfere with building
+%D the pagebody. This means that when the page is composed,
+%D the colors temporary have to be reset. After the page is
+%D shipped out, we have to revive the current color.
+%D
+%D We use \type{\mark}s to keep track of colors across page
+%D boundaries. Unfortunately standard \TEX\ supports only one mark,
+%D and using this one for color support only would be a waste.
+%D We therefore use an adapted version of J.~Fox's multiple mark
+%D mechanism as (re|)|implemented in \module{supp-mrk}.
+
+\doifdefinedelse{rawnewmark}
+ {\rawnewmark\colormark}
+ {\let\colormark\gobbleoneargument}
+
+%D Using this mark mechanism with lots of colors has one
+%D major drawback: \TEX's memory tends to overflow when
+%D very colorful text is stored in a global box. Even worse is that
+%D the processing time grows considerably. We therefore support
+%D local as well as global color switching.
+%D
+%D Of the next macros, \type {\popcolor} is to be used after
+%D the actual \type {\shipout} and \type {\startcolorpage} and
+%D \type {\stopcolorpage} are called when entering and leaving
+%D the \type {\pagebody} builder. In case of emergencies
+%D \type {\pushcolor} can be used to undo the current color,
+%D for instance when insertions are appended to the page.
+%D
+%D Out of efficiency we only use marks when needed. The next
+%D macro tries to find out if indeed a mark should be set.
+%D This macro uses the boolean \type {\ifinpagebody}, which can
+%D be defined and set in the module that handles the pagebody.
+
+\def\docolormark#1%
+ {\iflocalcolor \else \ifinpagebody \else \ifinframed \else
+ \dodocolormark{#1}%
+ \fi \fi \fi}
+
+\let\lastcolormark=\empty
+
+\def\dodocolormark#1%
+ {\edef\newcolormark{#1}%
+ \ifx\newcolormark\lastcolormark\else
+ \global\let\lastcolormark\newcolormark
+ \@EA\rawsetmark\@EA\colormark\@EA{\lastcolormark}%
+ \fi}
+
+%D \macros
+%D {pushcolor, popcolor}
+%D
+%D Pushing the current state in the output routine simply comes
+%D to resetting the color to black, while popping restores the
+%D color state to that of before the break.
+
+\def\topofpagecolor{\rawgetbotmark\colormark} % see postponing
+
+\def\pushcolor
+ {\stopcolormode}
+
+\def\popcolor
+ {\doifsomething{\rawgetbotmark\colormark}
+ {%\debuggerinfo\m!colors{popping \getbotmark\colormark}%
+ \startcolormode{\rawgetbotmark\colormark}}}
+
+\def\popsplitcolor
+ {\getsplitmarks\colormark % hier wel
+ \doifsomething{\rawgetsplitbotmark\colormark}
+ {%\debuggerinfo\m!colors{split popping \getsplitbotmark\colormark}%
+ \startcolormode{\rawgetsplitbotmark\colormark}}}
+
+\appendtoks\pushcolor \to\everypushproperties
+\appendtoks\popcolor \to\everypopproperties
+\appendtoks\popsplitcolor\to\everypopsplitproperties
+
+% Private macro: only needed in test cases (like multiple
+% seperations in one file); no user command!
+
+\def\resynccolor
+ {\ifcase\pagetotal % \ifdim\pagetotal=\zeropoint
+ \popcolor
+ \else\ifx\@@currentcolor\empty
+ \ifx\maintextcolor\empty\else
+ \startcolormode\maintextcolor
+ \fi
+ \else
+ \startcolormode\@@currentcolor
+ \fi\fi}
+
+% weird stuff
+
+\def\pushpostponedpagecolor
+ {\edef\savedtopofpagecolor{\topofpagecolor}%
+ \doifsomething\savedtopofpagecolor\restorecolormode} % \stopcolormode
+
+\def\poppostponedpagecolor
+ {\doifsomething\savedtopofpagecolor\startcolormode\savedtopofpagecolor}
+
+%D \macros
+%D {startcolorpage, stopcolorpage}
+%D
+%D Local use can be forced with the next two macros. Nesting
+%D is still supported but colors are no longer marked.
+%D
+%D The next implementation makes (simple) color separation more
+%D easy. It also supports nested colors in page backgrounds
+%D and texts.
+
+\def\startcolorpage
+ {\bgroup
+ \let\@@colorplus \minusone
+ \let\@@colorminus\plusone
+ \let\docolormark\gobbleoneargument
+ \edef\savedcolorlevel{\the\colorlevel}%
+ \global\colorlevel\zerocount % before \localstartcolor of
+ \ifx\maintextcolor\empty % course, ugly bug removed
+ \localstartcolor[\defaulttextcolor]%
+ \else
+ \localstartcolor[\maintextcolor]%
+ \fi}
+
+\def\stopcolorpage
+ {\localstopcolor
+ \global\colorlevel\savedcolorlevel
+ \egroup}
+
+\appendtoks \startcolorpage\to\everystarttextproperties
+\prependtoks\stopcolorpage \to\everystoptextproperties
+
+%D We want color support to be similar to font support and
+%D therefore implement \type{\color} using grouping.
+%D
+%D When \type {\somecolor} is issued, we can savely assume
+%D grouping. Using \type {\groupedcommand} here (i.e.\ the
+%D definition of \type {\color}) is unsafe because in
+%D interferes with for instance switching attributes.
+
+\unexpanded\def\color[#1]%
+ {\groupedcommand{\startcolor[#1]}\stopcolor}
+
+%D This implementation enables use of defined colors like:
+%D
+%D \starttyping
+%D Look at the {\brightgreen bright} side of life and get
+%D yourself no \red{red} head!
+%D \stoptyping
+
+%D Also wrong, test in combinations: \type{...{}{\red test}}
+%D
+%D \def\switchtocolor[#1]%
+%D {\startcolor[#1]\aftergroup\stopcolor}
+
+\def\switchtocolor[#1]% grouping is realy needed, else migration
+ {\bgroup\startcolor[#1]\aftergroup\stopcolor\aftergroup\egroup}
+
+\unexpanded\def\color[#1]%
+ {\groupedcommand{\startcolor[#1]}\stopcolor}
+
+\unexpanded\def\graycolor[#1]% not \gray because this is a color
+ {\groupedcommand{\RGBsupportedfalse\CMYKsupportedfalse\SPOTsupportedfalse\startcolor[#1]}\stopcolor}
+
+%D We can speed the following macros a bit up, but this
+%D hardly pays off; they are only used in the manual.
+
+\def\realcolorformat#1%
+ {\ifnum#1<\plusten 0.00\the#1\else
+ \ifnum#1<\plushundred 0.0\the#1\else
+ \ifnum#1<\plusthousand 0.\the#1\else
+ 1.000\fi\fi\fi}
+
+\def\dodoformatcolor#1%
+ {\colordimen#1\points\relax
+ \ifdim\colordimen>\onepoint
+ \colordimen\onepoint
+ \fi
+ \multiply\colordimen \plusthousand
+ \colorcount\colordimen
+ \advance\colorcount \medcard
+ \divide\colorcount \maxcard \relax
+ \realcolorformat\colorcount}
+
+\def\doformatcolorR#1:#2:#3:#4:#5\od
+ {\dodoformatcolor{#1}\colorformatseparator
+ \dodoformatcolor{#2}\colorformatseparator
+ \dodoformatcolor{#3}}
+
+\def\doformatcolorC#1:#2:#3:#4:#5:#6\od
+ {\dodoformatcolor{#1}\colorformatseparator
+ \dodoformatcolor{#2}\colorformatseparator
+ \dodoformatcolor{#3}\colorformatseparator
+ \dodoformatcolor{#4}}
+
+\def\doformatcolorS#1:#2:#3\od
+ {\dodoformatcolor{#1}}
+
+\def\doformatcolorP#1:#2:#3:#4:#5:#6\od
+ {#1\colorformatseparator
+ \dodoformatcolor{#2}\colorformatseparator
+ \dodoformatcolor{#3}\colorformatseparator
+ \dodoformatcolor{#4}\colorformatseparator}
+
+\def\doformatcolor#1:%
+ {\csname doformatcolor#1\endcsname}
+
+\def\colorvalue
+ {\dowithcolor\doformatcolor}
+
+\def\doformatgrayR#1:#2:#3:#4:#5\od
+ {\convertRGBtoGRAY{#1}{#2}{#3}%
+ \dodoformatcolor\@@cl@@s}
+
+\def\doformatgrayC#1:#2:#3:#4:#5:#6\od
+ {\convertCMYKtoGRAY{#1}{#2}{#3}{#4}%
+ \dodoformatcolor\@@cl@@s}
+
+\def\doformatgrayS#1:#2:#3\od
+ {\dodoformatcolor{#1}}
+
+% \def\doformatgrayP#1:#2:#3:#4:#5:#6\od
+% {\convertSPOTtoGRAY{#1}{#2}{#3}{#4}%
+% \dodoformatcolor\@@cl@@s}
+
+\def\doformatgrayP#1:#2:#3:#4:#5:#6\od
+ {todo}
+
+\def\doformatgray#1:%
+ {\csname doformatgray#1\endcsname}
+
+\def\grayvalue
+ {\dowithcolor\doformatgray}
+
+%D \macros
+%D {localstartraster,localstopraster,
+%D startraster,stopraster}
+%D
+%D The previous conversions are not linear and treat each color
+%D component according to human perception curves. Pure gray
+%D (we call them rasters) has equal color components. In
+%D \CONTEXT\ rasters are only used as backgrounds and these
+%D don't cross page boundaries in the way color does. Therefore
+%D we don't need stacks and marks. Just to be compatible with
+%D color support we offer both 'global' and 'local' commands.
+%D
+%D \starttyping
+%D \def\localstartraster[#1]%
+%D {\doifelsenothing{#1}
+%D {\dostartgraymode\@@rsscreen}
+%D {\dostartgraymode{#1}}}
+%D
+%D \def\localstopraster
+%D {\dostopgraymode}
+%D
+%D \let\startraster\localstartraster
+%D \let\stopraster \localstopraster
+%D \stoptyping
+%D
+%D The next alternative is slower, since it works on top of the
+%D color (stack) mechanism, but it does provide nesting.
+
+\def\dosetrastercolor#1%
+ {\edef\@@cl@@s{#1}%
+ \ifx\@@cl@@s\empty
+ \let\@@cl@@s\@@rsscreen
+ \fi
+ \let\@@cl@@t\@@cl@@z % else we get rogue
+ \let\@@cl@@a\@@cl@@z % transpancies
+ \setevalue{\??cr\??rs}{\colorSpattern}}
+
+% beware, don't add extra grouping, else color in tables
+% fails
+
+\def\localstartraster[#1]%
+ {\ifincolor\dosetrastercolor{#1}\localstartcolor[\??rs]\fi}
+
+\def\startraster[#1]%
+ {\ifincolor\dosetrastercolor{#1}\startcolor[\??rs]\fi}
+
+\def\localstopraster{\ifincolor\localstopcolor\fi}
+\def\stopraster {\ifincolor\stopcolor\fi}
+
+\def\raster[#1]{\groupedcommand{\startraster[#1]}{\stopraster}}
+
+%D Palets use an auxiliary macro:
+
+\def\dodefinepaletcolor#1#2#3%
+ {\doifassignmentelse{#3}
+ {% == \definepalet[test][xx={y=.4}]
+ \definecolor[\??pa#1:#2][#3]%
+ \iffreezecolors\@EA\setevalue\else\@EA\setvalue\fi{\??cr#1:#2}{\csname\??cr\??pa#1:#2\endcsname}}
+ {% == \definepalet[test][xx=green]
+ \doifdefinedelse{\??cr#3}
+ {\iffreezecolors\@EA\setevalue\else\@EA\setvalue\fi{\??cr#1:#2}{\csname\??cr#3\endcsname}}
+ {\letvalue{\??cr#1:#2}\colorXpattern}}}
+
+%D \MP\ related conversions:
+
+\def\scaledMPcolor#1#2%
+ {\ifMPgraphics
+ \handlecolorwith\doMPcolor
+ \csname\??cr
+ \ifcsname\??cr\currentpalet#2\endcsname\currentpalet\fi
+ #2\endcsname
+ :::::::\end#1\end
+ \else
+ #2%
+ \fi}
+
+\def\MPcolor{\scaledMPcolor1}
+
+%D Before we had transparency available, the following
+%D conversion macro was available:
+%D
+%D \starttyping
+%D \def\doMPcolor#1:#2:#3:#4:#5:#6:#7:#8\end
+%D {\if #1R(#2,#3,#4)%
+%D \else\if#1C\ifMPcmykcolors cmyk(#2,#3,#4,#5)\else(1-#2-#5,1-#3-#5,1-#4-#5)\fi
+%D \else\if#1S(#2,#2,#2)%
+%D \else (0,0,0)%
+%D \fi\fi\fi}
+%D \stoptyping
+%D
+%D In order to be useful, this macro is to be fully
+%D expandabele.
+
+\def\doMPcolor#1:% #1 can be \relax ! ! ! i.e. an empty color
+ {\csname MPc\@EA\ifx\csname MPc\string#1\endcsname\relax B\else#1\fi\endcsname}
+
+\def\MPcR{\doMPrgb}
+\def\MPcC{\ifMPcmykcolors\@EA\doMPcmykY\else\@EA\doMPcmykN\fi}
+\def\MPcS{\doMPgray}
+\def\MPcP{\ifMPspotcolors\@EA\doMPspotY\else\@EA\doMPspotN\fi}
+\def\MPcB{\doMPblack}
+
+\def\transparentMP {transparent}
+\def\cmykMP {scaledcmyk}
+\def\cmykASrgbMP {scaledcmykasrgb} % not really needed any more
+\def\rgbMP {scaledrgb}
+\def\grayMP {scaledgray}
+\def\spotMP {spotcolor}
+
+\def\doMPtransparent#1#2:#3:#4\end
+ {\ifcase#2\space(#1)\else\transparentMP(#2,#3,(#1))\fi}
+
+\def\doMPgray#1:#2\end#3\end
+ {\doMPtransparent{\grayMP(#1,#3)}#2\end}
+
+\def\doMPrgb#1:#2:#3:#4\end#5\end
+ {\doMPtransparent{\rgbMP(#1,#2,#3,#5)}#4\end}
+
+\def\doMPcmykY#1:#2:#3:#4:#5\end#6\end
+ {\doMPtransparent{\cmykMP(#1,#2,#3,#4,#6)}#5\end}
+
+\def\doMPcmykN#1:#2:#3:#4:#5\end#6\end
+ {\doMPtransparent{\cmykASrgbMP(#1,#2,#3,#4,#6)}#5\end}
+
+\def\doMPspotY#1:#2:#3:#4:#5\end#6\end % best make #3 same as #1 when empty
+ {\doMPtransparent{multitonecolor("#1",#2,"#3","#4")}#5\end}
+
+\def\doMPspotN#1:#2:#3:#4:#5\end#6\end
+ {\scaledMPcolor{#4}{#1}}
+
+\def\doMPblack#1\end#2\end
+ {\unknownMPcolor}
+
+\def\unknownMPcolor
+ {(0,0,0)}
+
+\let\processMP\spotMP % for some time, will become obsolete, brrr
+
+%D \PDF\ related conversions:
+
+\def\PDFcolor #1{\handlecolorwith\doPDFcolor \csname\??cr#1\endcsname:::::::\end}
+\def\PDFcolorvalue#1{\handlecolorwith\doPDFcolorvalue\csname\??cr#1\endcsname:::::::\end}
+\def\FDFcolor #1{\handlecolorwith\doFDFcolor \csname\??cr#1\endcsname:::::::\end}
+
+\def\doPDFcolor#1:#2:#3:#4:#5:#6:#7:#8\end
+ {\if #1R#2 #3 #4 rg%
+ \else\if#1C#2 #3 #4 #5 k%
+ \else\if#1S#2 g%
+ \else\if#1P#5 g%
+ \else 0 g%
+ \fi\fi\fi\fi}
+
+\def\doPDFcolorvalue#1:#2:#3:#4:#5:#6:#7:#8\end
+ {\if #1R#2 #3 #4%
+ \else\if#1C#2 #3 #4 #5%
+ \else\if#1S#2%
+ \else\if#1P#5%
+ \else 0%
+ \fi\fi\fi\fi}
+
+\def\doFDFcolor#1:#2:#3:#4:#5:#6:#7:#8\end
+ {[\if #1R#2 #3 #4%
+ \else\if#1C#2 #3 #4 #5%
+ \else\if#1S#2%
+ \else\if#1P#5%
+ \else 0%
+ \fi\fi\fi\fi]}
+
+\def\internalspotcolorname#1{\handlecolorwith\dointernalspotcolorname\csname\??cr#1\endcsname:::::::\end}
+\def\internalspotcolorsize#1{\handlecolorwith\dointernalspotcolorsize\csname\??cr#1\endcsname:::::::\end}
+
+\def\dointernalspotcolorname#1:#2:#3:#4:#5:#6:#7:#8\end{\if#1P\ifcase0#3 #1\else#2\fi\else#1\fi}
+\def\dointernalspotcolorsize#1:#2:#3:#4:#5:#6:#7:#8\end{\if#1P\ifcase0#3 0\else#3\fi\else 0\fi}
+
+%D Slow but ok \unknown
+
+\def\colorcomponents#1%
+ {\startnointerference
+ \localcolortrue
+ \def\doexeccolorR ##1:##2:##3:##4:##5\od{\gdef\thecolorcomponents{r=\twodigitrounding{##1} g=\twodigitrounding{##2} b=\twodigitrounding{##3}}}%
+ \def\doexeccolorC##1:##2:##3:##4:##5:##6\od{\gdef\thecolorcomponents{c=\twodigitrounding{##1} m=\twodigitrounding{##2} y=\twodigitrounding{##3} k=\twodigitrounding{##4}}}%
+ \def\doexeccolorS ##1:##2:##3\od{\gdef\thecolorcomponents{s=\twodigitrounding{##1}}}%
+ \def\doexeccolorP##1:##2:##3:##4:##5:##6\od{\gdef\thecolorcomponents{p=\twodigitrounding{##4} n=##1}}%
+ \let\doexeccolorPindex\doexeccolorP
+ \backgroundline[#1]{}%
+ \stopnointerference
+ \thecolorcomponents}
+
+\def\transparencycomponents#1%
+ {\startnointerference
+ \localcolortrue
+ \def\doexeccolorR ##1:##2:##3:##4:##5\od{\gdef\thetransparencycomponents{a=\twodigitrounding{##4} t=\twodigitrounding{##5}}}%
+ \def\doexeccolorC##1:##2:##3:##4:##5:##6\od{\gdef\thetransparencycomponents{a=\twodigitrounding{##5} t=\twodigitrounding{##6}}}%
+ \def\doexeccolorS ##1:##2:##3\od{\gdef\thetransparencycomponents{a=\twodigitrounding{##2} t=\twodigitrounding{##3}}}%
+ \def\doexeccolorP##1:##2:##3:##4:##5:##6\od{\gdef\thetransparencycomponents{a=\twodigitrounding{##5} t=\twodigitrounding{##6}}}%
+ \let\doexeccolorPindex\doexeccolorP
+ \backgroundline[#1]{}%
+ \stopnointerference
+ \thecolorcomponents}
+
+%D \macros
+%D {everyshapebox}
+%D
+%D A terrible hack, needed because we cannot have marks in
+%D shape boxes.
+
+\appendtoks \localcolortrue \to \everyshapebox
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/colo-new.mkiv b/Master/texmf-dist/tex/context/base/colo-new.mkiv
new file mode 100644
index 00000000000..d054095fe97
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/colo-new.mkiv
@@ -0,0 +1,331 @@
+%D \module
+%D [ file=colo-ini,
+%D version=2007.08.08,
+%D title=\CONTEXT\ Color Macros,
+%D subtitle=Initialization,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\unprotect
+
+\chardef\colorversion=2
+
+% todo: palets in definecolor
+% todo: {\red xx} vs \red{xx}
+
+% check: registerusedspotcolors
+% check: registerusedcolorchannels
+% check: \currentcolorname
+% check: \outercolorname
+% check: \chardef\currentcolorchannel=0
+% check: \startcolormode
+% check: \newif\iffilterspotcolor \filterspotcolorfalse
+% check: \newif\ifdoingspotcolor \doingspotcolorfalse
+% check: \registercolorchannel
+
+% \def\mptexcolor#1{"\dogetattributeid\s!color \somecolorattribute{#1} A"}
+%
+% \startMPpage
+% fill fullcircle scaled 10cm ;
+% fill fullcircle scaled 5cm withprescript \mptexcolor{red} withpostscript \mptexcolor{black} ;
+% fill fullcircle scaled 3cm ;
+% draw btex test etex withprescript \mptexcolor{blue} ;
+% \stopMPpage
+
+\registerctxluafile{colo-new}{1.000}
+
+\ifx\currentcolormodel\undefined \newcount\currentcolormodel \fi
+
+\def\setcolormodel#1%
+ {\currentcolormodel\ctxlua{tex.print(colors.setmodel('colormodel','#1'))}%
+ \dosetattribute{colormodel}{\the\currentcolormodel}}
+
+\setcolormodel{all}
+
+\def\dosetupcolormodel
+ {\ifincolor
+ \ifRGBsupported
+ \ifCMYKsupported
+ \setcolormodel{all}%
+ \else
+ \setcolormodel{rgb}%
+ \fi
+ \else
+ \ifCMYKsupported
+ \setcolormodel{cmyk}%
+ \else
+ \setcolormodel{gray}%
+ \fi
+ \fi
+ \else
+ \setcolormodel{gray}%
+ \fi}
+
+\appendtoks
+ \dosetupcolormodel
+\to \everyjob
+
+% Currently in mkiv transparency is implemented independent of color. This costs
+% a bit more processing time but gives the possibility to apply transparency
+% independently in the future. Is this useful? If not we may as well combine them
+% again in the future. By coupling we are downward compatible. When we decouple we
+% need to do more tricky housekeeping (e.g. persist color independent transparencies
+% when color bound ones are nil.
+
+% Since we couple definitions, we could stick to one test. Todo. Same for mpcolor.
+
+% \def\doactivatecolor#1% : in currentpalet, maybe not, ugly
+% {\ifcsname(cs:\currentpalet#1)\endcsname
+% \csname(cs:\currentpalet#1)\endcsname
+% \csname(ts:\currentpalet#1)\endcsname
+% \else
+% \csname(cs:#1)\endcsname
+% \csname(ts:#1)\endcsname
+% \fi}
+
+% \def\doactivatecolor#1% : in currentpalet, maybe not, ugly
+% {\csname(cs:\ifcsname(cs:\currentpalet#1)\endcsname\currentpalet\fi#1)\endcsname}
+% \csname(ts:\ifcsname(ts:\currentpalet#1)\endcsname\currentpalet\fi#1)\endcsname}
+%
+% more robust test, else we get \relaxed non-colors which may confuse e.g. mpcolor
+
+\letvalue{(cs:-}\empty
+\letvalue{(ts:-}\empty
+
+% \def\doactivatecolor#1% : in currentpalet, maybe not, ugly
+% {\csname(cs:\ifcsname(cs:\currentpalet#1)\endcsname\currentpalet#1\else\ifcsname(cs:#1)\endcsname#1\else-\fi\fi)\endcsname
+% \csname(ts:\ifcsname(ts:\currentpalet#1)\endcsname\currentpalet#1\else\ifcsname(ts:#1)\endcsname#1\else-\fi\fi)\endcsname}
+
+\def\doactivatecolor#1% : in currentpalet, maybe not, ugly
+ {\ifcsname(cs:\currentpalet#1)\endcsname
+ \csname(cs:\currentpalet#1)\endcsname
+ \csname(ts:\currentpalet#1)\endcsname
+ \else\ifcsname(cs:#1)\endcsname
+ \csname(cs:#1)\endcsname
+ \csname(ts:#1)\endcsname
+ \fi\fi}
+
+\let\normaldoactivatecolor\doactivatecolor
+
+% if it becomes a bottleneck we can set up a more complex system with one shared
+% attribute for colorspace, color and transparency
+
+\def\doactivatecolor
+ {\ifproductionrun
+ \ctxlua{colors.enabled=true transparencies.enabled=true}% not that efficient but at least robust
+ \let\doactivatecolor\normaldoactivatecolor
+ \expandafter\doactivatecolor
+ \else
+ \expandafter\normaldoactivatecolor
+ \fi}
+
+\def\deactivatecolor
+ {\doresetattribute\s!color
+ \doresetattribute\s!transparency}
+
+\def\dodefinecolorcommand#1#2%
+ {\unexpanded#1{#2}{\doactivatecolor{#2}}}
+
+\def\dodefinecolor[#1][#2]%
+ {\addtocommalist{#1}\colorlist
+ \ctxlua{ctx.defineprocesscolor("#1","#2",false,\iffreezecolors true\else false\fi)}%
+ \dodefinecolorcommand\setvalue{#1}}
+
+\def\dodefineglobalcolor[#1][#2]%
+ {\doglobal\addtocommalist{#1}\colorlist
+ \ctxlua{ctx.defineprocesscolor("#1","#2",true,\iffreezecolors true\else false\fi)}%
+ \dodefinecolorcommand\setgvalue{#1}}
+
+\def\dodefinenamedcolor[#1][#2]%
+ {\doglobal\addtocommalist{#1}\colorlist
+ \ctxlua{ctx.defineprocesscolor("#1","#2",false,\iffreezecolors true\else false\fi)}%
+ \dodefinecolorcommand\setvalue{#1}}
+
+\def\dodefinespotcolor[#1][#2][#3]%
+ {\doglobal\addtocommalist{#1}\colorlist % optional
+ \doglobal\addtocommalist{#2}\allspotcolors
+ \ctxlua{ctx.definespotcolor("#1","#2","#3",true)}%
+ \dodefinecolorcommand\setxvalue{#1}}
+
+\def\dodefinemultitonecolor[#1][#2][#3][#4]%
+ {\ctxlua{ctx.definemultitonecolor("#1","#2","#3","#4",true)}%
+ \dodefinecolorcommand\setxvalue{#1}}
+
+\def\dodefinetransparency[#1][#2]%
+ {\ctxlua{ctx.definetransparency("#1",#2)}}
+
+\def\dosetrastercolor#1% slow, we need a fast one
+ {\edef\@@rastervalue{#1}%
+ \ifx\@@rastervalue\empty
+ \let\@@rastervalue\@@rsscreen
+ \fi
+ \dosetattribute\s!color{\ctxlua{tex.sprint(ctx.definesimplegray("_raster_",\@@rastervalue))}}}
+
+\def\doifcolorelse#1%
+ {\ifcsname(ca:\currentpalet#1)\endcsname
+ \@EA\firstoftwoarguments
+ \else\ifcsname(ca:#1)\endcsname
+ \@EAEAEA\firstoftwoarguments
+ \else
+ \@EAEAEA\secondoftwoarguments
+ \fi\fi}
+
+\def\doifcolor#1%
+ {\ifcsname(ca:\currentpalet#1)\endcsname
+ \@EA\firstofoneargument
+ \else\ifcsname(ca:#1)\endcsname
+ \@EAEAEA\firstofoneargument
+ \else
+ \@EAEAEA\gobbleoneargument
+ \fi\fi}
+
+% currentcolor, then we can push pop in register
+
+ \def\switchtocolor [#1]{\getvalue{#1}}
+\unexpanded\def\color [#1]{\groupedcommand{\doactivatecolor{#1}}{}}
+\unexpanded\def\startcolor [#1]{\begingroup\doactivatecolor{#1}}
+\unexpanded\def\stopcolor {\endgroup}
+\unexpanded\def\graycolor [#1]{\groupedcommand{\setcolormodel{gray}\getvalue{#1}}{}}
+ \def\predefinecolor [#1]{\flushatshipout{\hbox{\color[#1]{}}}}
+ \def\predefineindexcolor[#1]{\flushatshipout{\hbox{\color[#1]{}}}}
+ \def\startcolorpage {\startcolor[\ifx\maintextcolor\empty\defaulttextcolor\else\maintextcolor\fi]}
+ \def\stopcolorpage {\stopcolor}
+ \def\localstartraster [#1]{\dosetrastercolor{#1}}
+ \def\localstopraster {}
+ \def\startraster [#1]{\dosetrastercolor{#1}}
+ \def\stopraster {}
+ \def\raster [#1]{\groupedcommand{\dosetrastercolor{#1}}{}}
+ \def\faststartcolor [#1]{\doactivatecolor{#1}}
+ \def\faststopcolor {}
+
+\def\startregistercolor[#1]%
+ {\doifelsenothing{#1}
+ {\let\stopregistercolor\relax}
+ {\edef\stopregistercolor
+ {\dosetattribute\s!color {\dogetattribute\s!color }%
+ \dosetattribute\s!transparency{\dogetattribute\s!transparency}}%
+ \doactivatecolor{#1}}}
+
+\let\resynccolor \relax % ?
+\let\pushcolor \relax
+\let\popcolor \relax
+\let\popsplitcolor\relax
+
+\def\restorecolormode
+ {\ifincolor
+ \deactivatecolor
+ \ifx\maintextcolor\empty \else
+ \doactivatecolor\maintextcolor
+ \fi
+ \fi}
+
+\def\pushpostponedpagecolor
+ {\edef\savedtopofpagecolor{\topofpagecolor}%
+ \doifsomething\savedtopofpagecolor\restorecolormode}
+
+\def\poppostponedpagecolor
+ {\doifsomething\savedtopofpagecolor\doactivatecolor\savedtopofpagecolor}
+
+% \def\pushcolor
+% {\edef\popcolor
+% {\dosetattribute\s!color {\dogetattribute\s!color }%
+% \dosetattribute\s!transparency{\dogetattribute\s!transparency}}%
+% \let\popsplitcolor\popcolor
+% \deactivatecolor}
+
+\appendtoks\deactivatecolor\to\everybeforeoutput % maybe we don't need push pop now
+
+\def\startregistercolor[#1]%
+ {\doifelsenothing{#1}
+ {\let\stopregistercolor\relax}
+ {\edef\stopregistercolor
+ {\dosetattribute\s!color {\dogetattribute\s!color }%
+ \dosetattribute\s!transparency{\dogetattribute\s!transparency}}%
+ \doactivatecolor{#1}}}
+
+\let\grey \graycolor
+\let\localstartcolor \startcolor
+\let\localstopcolor \stopcolor
+\let\globalstartcolor\startcolor
+\let\globalstopcolor \stopcolor
+
+\def\registermaintextcolor{\ctxlua{colors.main = \thecolorattribute\maintextcolor}}
+
+\def\starttextcolor[#1]%
+ {\doifsomething{#1}
+ {\definecolor[\@@themaintextcolor][#1]%
+ \let\maintextcolor\@@themaintextcolor
+ \doactivatecolor\maintextcolor
+ \registermaintextcolor}}
+
+\let\stoptextcolor\relax
+
+\def\initializemaintextcolor
+ {\doifelsenothing\@@cltextcolor
+ {\definecolor[\@@themaintextcolor][\defaulttextcolor]}
+ {\definecolor[\@@themaintextcolor][\@@cltextcolor]}%
+ \let\maintextcolor\@@themaintextcolor
+ \doactivatecolor\maintextcolor
+ \registermaintextcolor}
+
+\appendtoks \initializemaintextcolor \to \everyjob
+
+\def\localstarttextcolor{\expanded{\startcolor[\ifx\maintextcolor\empty\defaulttextcolor\else\maintextcolor\fi]}}
+\let\localstoptextcolor \stopcolor
+\let\restoretextcolor \firstofoneargument
+
+\def\dodefinepaletcolor#1#2#3%
+ {\doifassignmentelse{#3}% \definepalet[test][xx={y=.4}]
+ {\definecolor[\??pa#1:#2][#3]%
+ \iffreezecolors\@EA\setevalue\else\@EA\setvalue\fi{(cs:#1:#2)}{\csname(cs:\??pa#1:#2)\endcsname}%
+ \iffreezecolors\@EA\setevalue\else\@EA\setvalue\fi{(ca:#1:#2)}{\csname(ca:\??pa#1:#2)\endcsname}}
+ {\doifdefinedelse{(cs:#3)}% \definepalet[test][xx=green]
+ {\iffreezecolors\@EA\setevalue\else\@EA\setvalue\fi{(cs:#1:#2)}{\csname(cs:#3)\endcsname}%
+ \iffreezecolors\@EA\setevalue\else\@EA\setvalue\fi{(ca:#1:#2)}{\csname(ca:#3)\endcsname}}
+ {\letvalue{(cs:#1:#2)}\undefined
+ \letvalue{(ca:#1:#2)}\undefined}}}
+
+\setvalue{(cs:)}{} \setvalue{(ca:)}{0}
+\setvalue{(ts:)}{} \setvalue{(ta:)}{0}
+
+\def\doinheritca#1{\csname(ca:\ifcsname(ca:\currentpalet#1)\endcsname\currentpalet#1\else\ifcsname(ca:#1)\endcsname#1\fi\fi)\endcsname}
+\def\doinheritcs#1{\csname(cs:\ifcsname(cs:\currentpalet#1)\endcsname\currentpalet#1\else\ifcsname(cs:#1)\endcsname#1\fi\fi)\endcsname}
+\def\doinheritta#1{\csname(ta:\ifcsname(ta:\currentpalet#1)\endcsname\currentpalet#1\else\ifcsname(ta:#1)\endcsname#1\fi\fi)\endcsname}
+\def\doinheritts#1{\csname(ts:\ifcsname(ts:\currentpalet#1)\endcsname\currentpalet#1\else\ifcsname(ts:#1)\endcsname#1\fi\fi)\endcsname}
+
+\def\MPcolor#1{\ctxlua{tex.sprint(ctx.mpcolor(\number\currentcolormodel,\number\doinheritca{#1},\number\doinheritta{#1}))}}
+
+\def\currentcolorname{\s!black} % todo
+\def\outercolorname {\s!black} % todo
+
+\def\thecolorattribute #1{\number\csname(ca:\ifcsname(ca:\currentpalet#1)\endcsname\currentpalet#1\else\ifcsname(ca:#1)\endcsname#1\fi\fi)\endcsname}
+\def\thetransparencyattribute#1{\number\csname(ta:\ifcsname(ta:\currentpalet#1)\endcsname\currentpalet#1\else\ifcsname(ta:#1)\endcsname#1\fi\fi)\endcsname}
+
+\def\PDFcolor #1{\ctxlua{tex.sprint(ctx.pdfcolor (\number\currentcolormodel, \thecolorattribute{#1}))}}
+\def\PDFcolorvalue#1{\ctxlua{tex.sprint(ctx.pdfcolorvalue(\number\currentcolormodel, \thecolorattribute{#1}))}}
+\def\FDFcolor #1{\ctxlua{tex.sprint(ctx.fdfcolor (\number\currentcolormodel, \thecolorattribute{#1}))}}
+
+\def\internalspotcolorname#1{\ctxlua{tex.sprint(ctx.spotcolorname (\thecolorattribute{#1}))}}
+\def\internalspotcolorsize#1{\ctxlua{tex.sprint(ctx.spotcolorvalue(\thecolorattribute{#1}))}}
+
+\def\colorcomponents #1{\ctxlua{tex.sprint(ctx.colorcomponents (\thecolorattribute {#1}))}}
+\def\transparencycomponents#1{\ctxlua{tex.sprint(ctx.transparencycomponents(\thetransparencyattribute{#1}))}}
+
+\def\colorvalue#1{\ctxlua{tex.sprint(ctx.formatcolor(\thecolorattribute{#1},"\colorformatseparator"))}}
+\def\grayvalue #1{\ctxlua{tex.sprint(ctx.formatgray (\thecolorattribute{#1},"\colorformatseparator"))}}
+
+% hack, till we have adapted backend: (move it there)
+
+\def\presetPDFtransparencybynumber#1#2#3%
+ {\initializetransparency
+ \ifcase#1\else
+ \global\PDFcurrenttransparency\numexpr#1+\minusone\relax
+ \presetPDFtransparency{#2}{#3}%
+ \fi}
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/colo-new.tex b/Master/texmf-dist/tex/context/base/colo-new.tex
new file mode 100644
index 00000000000..04b2ef716f7
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/colo-new.tex
@@ -0,0 +1,1051 @@
+%D \module
+%D [ file=colo-ini,
+%D version=2007.08.08,
+%D title=\CONTEXT\ Color Macros,
+%D subtitle=Initialization,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D We need to clean this up further but first we hav eto make sure that mkiv
+%D code works ok.
+
+\writestatus{loading}{Context Color Macros / initialization}
+
+%D This module implements color. Since \MKII\ and \MKIV\ use a completely
+%D different approach, this module only implements a few generic mechanisms.
+
+\startmessages dutch library: colors
+ title: kleur
+ 1: systeem -- is globaal actief
+ 2: systeem -- is lokaal actief
+ 3: -- is niet gedefinieerd --
+ 4: systeem -- wordt geladen
+ 5: onbekend systeem --
+ 6: palet -- is beschikbaar
+ 7: palet -- is niet beschikbaar
+ 8: specificatie -- bij -- wordt zwart
+ 9: -- kleurruimte wordt niet ondersteund
+ 10: -- kleurruimte wordt ondersteund
+ 11: kleur wordt vertaald in grijs
+ 12: -- is geregistreerd
+\stopmessages
+
+\startmessages english library: colors
+ title: color
+ 1: system -- is global activated
+ 2: system -- is local activated
+ 3: -- is not defined --
+ 4: system -- is loaded
+ 5: unknown system --
+ 6: palette -- is available
+ 7: palette -- is not available
+ 8: specification -- at color -- becomes black
+ 9: -- color space is not supported
+ 10: -- color space is supported
+ 11: color is converted to gray
+ 12: -- is registered
+\stopmessages
+
+\startmessages german library: colors
+ title: farbe
+ 1: system -- ist global aktiviert
+ 2: system -- ist lokal aktiviert
+ 3: -- ist undefiniert --
+ 4: system -- ist geladen
+ 5: unbekanntes System --
+ 6: palette -- ist verfuegbar
+ 7: palette -- ist nicht verfuegbar
+ 8: Spezifikation -- bei Farbe -- wird schwarz
+ 9: -- Farbraum wird nicht unterstuetzt
+ 10: -- Farbraum wird unterstuetzt
+ 11: Farbe wird in Grau umgewandelt
+ 12: -- is registered
+\stopmessages
+
+\startmessages czech library: colors
+ title: barva
+ 1: system -- je globalne aktivovana
+ 2: system -- je lokalne activovana
+ 3: -- neni definovana --
+ 4: system -- je nacten
+ 5: neznamy system --
+ 6: palette -- je k dispozici
+ 7: palette -- neni k dispozici
+ 8: specifikace -- v barve -- bude cerna
+ 9: -- prostor barev neni podporovan
+ 10: -- prostor barev je podporovan
+ 11: barva je prevedena na sed
+ 12: -- is registered
+\stopmessages
+
+\startmessages italian library: colors
+ title: colore
+ 1: sistema -- attivato globalmente
+ 2: sistema -- attivato localmente
+ 3: -- non definito --
+ 4: sistema -- caricato
+ 5: sistema -- sconosciuto
+ 6: tavolozza -- resa disponibile
+ 7: tavolozza -- non disponibile
+ 8: specifica -- del colore -- convertita in nero
+ 9: spazio dei colori -- non supportato
+ 10: spazio dei colori -- supportato
+ 11: il colore ø convertito in grigio
+ 12: -- is registered
+\stopmessages
+
+\startmessages norwegian library: colors
+ title: farge
+ 1: system -- er aktivert globalt
+ 2: system -- er aktivert lokalt
+ 3: -- er udefinert --
+ 4: system -- er lest inn
+ 5: ukjent system --
+ 6: palett -- er tilgjengelig
+ 7: palett -- er ikke tilgjengelig
+ 8: spesifikasjon -- for farge -- gir kun svart
+ 9: -- fargerom er ikke støttet
+ 10: -- fargerom er støttet
+ 11: fargen vil bli vist som grø
+ 12: -- is registered
+\stopmessages
+
+\startmessages romanian library: colors
+ title: culori
+ 1: sistem -- este activata global
+ 2: sistem -- este activata local
+ 3: -- nu este definita --
+ 4: sistem -- este incarcata
+ 5: sistem -- necunoscuta
+ 6: paleta -- este disponibila
+ 7: palette -- nu este disponibila
+ 8: specificatia -- la culoarea -- devine neagra
+ 9: spatiul de culoare -- nu este suportat
+ 10: spatiul de culoare -- este suportat
+ 11: culoarea este convertita la gri
+ 12: -- is registered
+\stopmessages
+
+\startmessages french library: colors
+ title: couleurs
+ 1: le système -- est globalement activé
+ 2: le système -- est localement activé
+ 3: -- n'est pas défini --
+ 4: le système -- est chargé
+ 5: système -- inconnu
+ 6: la palette -- est disponible
+ 7: le palette -- n'est pas disponible
+ 8: la spécification -- de la couleur -- devient noire
+ 9: l'espace de couleur -- n'est pas supporté
+ 10: -- l'espace de couleur est supporté
+ 11: la couleur est convertie en niveau de gris
+ 12: -- est enregistré
+\stopmessages
+
+\unprotect
+
+\chardef\colorversion=1 % temp, needed for tracing purposes, mkiv transition
+
+%D We use a couple of local registers. That way we don't have
+%D to group when converting colors. By the way, this is not
+%D really faster. We can sqeeze half a second runtime for 50K
+%D switches on a 1G machine, but the macros will become rather
+%D ugly then. To mention one such improvement: no colon
+%D after the key character (.25 sec).
+
+\newdimen\colordimen
+\newcount\colorcount
+
+%D When typesetting for paper, we prefer using the \cap{CMYK}
+%D color space, but for on||screen viewing we prefer \cap{RGB}
+%D (the previous implementation supported only this scheme).
+%D Independant of such specifications, we support some automatic
+%D conversions:
+%D
+%D \startitemize[packed]
+%D \item convert all colors to \cap{RGB}
+%D \item convert all colors to \cap{CMYK}
+%D \item convert all colors to gray scales
+%D \stopitemize
+%D
+%D We also support optimization of colors to gray scales.
+%D
+%D \startitemize[continue]
+%D \item reduce gray colors to gray scales
+%D \item reduce \cap{CMY} components to \cap{K}
+%D \stopitemize
+%D
+%D These options are communicated by means of:
+
+\newif\ifRGBsupported
+\newif\ifCMYKsupported
+\newif\ifSPOTsupported
+\newif\ifpreferGRAY
+\newif\ifGRAYprefered
+\newif\ifreduceCMYK
+\newif\ifconverttoGRAY
+\newif\ifweightGRAY \weightGRAYtrue
+
+\newif\ifconvertMPcolors
+\newif\ifreduceMPcolors
+\newif\ifforcegrayMPcolors
+
+%D The last boolean controls reduction of \cap{CMYK} to
+%D \cap{CMY} colors. When set to true, the black component
+%D is added to the other ones.
+%D
+%D Prefering gray is not the same as converting to gray.
+%D Conversion treats each color components in a different way,
+%D while prefering is just a reduction and thus a
+%D space||saving option.
+
+\newif\iffreezecolors \freezecolorsfalse
+\newif\ifincolor % true if colors enabled
+\newif\iflocalcolor
+
+\let\colorlist \empty
+\let\currentspotcolor \empty
+\let\allspotcolors \empty
+\let\usedspotcolors \empty
+\let\usedcolorchannels\empty
+\let\currentpalet \empty
+
+%D \macros
+%D {definecolor,defineglobalcolor,definenamedcolor,definespotcolor,definemultitonecolor}
+%D
+%D \startbuffer
+%D \definecolor [blue] [c=1,m=.38,y=0,k=.64] % pantone pms 2965 uncoated m
+%D \definecolor [yellow] [c=0,m=.28,y=1,k=.06] % pantone pms 124 uncoated m
+%D
+%D \definespotcolor [blue-100] [blue] [p=1]
+%D \definespotcolor [yellow-100] [yellow] [p=1]
+%D
+%D \definemultitonecolor [pdftoolscolor] [blue=.12,yellow=.28] [c=.1,m=.1,y=.3,k=.1]
+%D
+%D \useexternalfigure[demofig][mill.png][object=no]
+%D
+%D \startcombination[4*1]
+%D {\externalfigure[demofig]} {no color}
+%D {\externalfigure[demofig][color=pdftoolscolor]} {indexed duotone}
+%D {\externalfigure[demofig][color=blue-100]} {spot color}
+%D {\externalfigure[demofig][color=yellow-100]} {spot color}
+%D \stopcombination
+%D \stopbuffer
+%D
+%D \getbuffer \typebuffer
+
+\def\definecolor {\dodoubleargument\dodefinecolor}
+\def\defineglobalcolor {\dodoubleargument\dodefineglobalcolor}
+\def\definenamedcolor {\dodoubleargument\dodefinenamedcolor}
+\def\definespotcolor {\dotripleargument\dodefinespotcolor}
+\def\definemultitonecolor{\doquadrupleempty\dodefinemultitonecolor}
+
+% check: registerusedspotcolors
+% check: registerusedcolorchannels
+
+%D \macros
+%D {doifcolorelse, doifcolor}
+%D
+%D Switching to a color is done by means of the following
+%D command. Later on we will explain the use of palets. We
+%D define ourselves a color conditional first.
+
+\ifx\doifcolorelse\undefined
+ \let\doifcolorelse\secondoftwoarguments
+ \let\doifcolor \gobbleoneargument
+\fi
+
+%D \macros
+%D {localstartcolor,localstopcolor}
+%D
+%D Simple color support, that is without nesting, is provided
+%D by:
+
+\ifx\localstartcolor\undefined
+ \let\localstartcolor\undefined
+ \let\localstopcolor \undefined
+\fi
+
+%D \macros
+%D {faststartcolor,faststopcolor}
+%D
+%D No checking for arguments and such:
+
+\ifx\faststartcolor\undefined
+ \def\faststartcolor[#1]{}
+ \def\faststopcolor {}
+\fi
+
+%D These local ones may go away in future versions.
+
+%D \macros
+%D {startcolor,stopcolor}
+%D
+%D The more save method, the one that saves the current color
+%D state and returns to this state afterward, is activated by:
+%D
+%D \showsetup{startcolor}
+
+\ifx\startcolor\undefined
+ \let\startcolor\undefined
+ \let\stopcolor \undefined
+\fi
+
+%D \macros
+%D {startcurrentcolor,stopcurrentcolor}
+
+\def\startcurrentcolor{\startcolor[\outercolorname]}
+\def\stopcurrentcolor {\stopcolor}
+
+%D \macros
+%D {color,graycolor}
+%D
+%D This leaves the simple color command:
+%D
+%D \showsetup{color}
+%D \showsetup{graycolor}
+
+\ifx\color\undefined
+ \def\color [#1]{}
+ \def\graycolor[#1]{}
+ \def\gray {\graycolor}
+\fi
+
+%D \macros
+%D {localstartraster,localstopraster,
+%D startraster,stopraster,raster}
+%D
+%D The previous conversions are not linear and treat each color
+%D component according to human perception curves. Pure gray
+%D (we call them rasters) has equal color components. In
+%D \CONTEXT\ rasters are only used as backgrounds and these
+%D don't cross page boundaries in the way color does. Therefore
+%D we don't need stacks and marks. Just to be compatible with
+%D color support we offer both 'global' and 'local' commands.
+
+\ifx\startraster\undefined
+ \def\startraster [#1]{}
+ \def\stopraster {}
+ \def\raster [#1]{}
+ \def\localstartraster[#1]{}
+ \def\localstopraster {}
+\fi
+
+%D \macros
+%D {colorvalue, grayvalue}
+%D
+%D We can typeset the color components using \type{\colorvalue} and
+%D \type{\grayvalue}. The commands:
+%D
+%D \startbuffer
+%D color value of SomeKindOfRed: \colorvalue{SomeKindOfRed} \crlf
+%D gray value of SomeKindOfRed: \grayvalue{SomeKindOfRed}
+%D \stopbuffer
+%D
+%D \typebuffer
+%D
+%D show us:
+%D
+%D \startvoorbeeld
+%D \getbuffer
+%D \stopvoorbeeld
+
+\def\colorformatseparator{ }
+
+\ifx\colorvalue\undefined
+ \let\colorvalue\gobbleoneargument
+ \let\grayvalue \gobbleoneargument
+\fi
+
+% check: \currentcolorname
+% check: \outercolorname
+
+%D \macros
+%D {setupcolor}
+%D
+%D Color definitions can be grouped in files with the name:
+%D
+%D \starttyping
+%D \f!colorprefix-identifier.tex
+%D \stoptyping
+%D
+%D where \type{\f!colorprefix} is \unprotect {\tttf \f!colorprefix}.
+%D Loading such a file is done by \protect
+%D
+%D \showsetup{setupcolor}
+%D
+%D Some default colors are specified in \type{colo-rgb.tex},
+%D which is loaded into the format by:
+%D
+%D \starttyping
+%D \setupcolor[rgb]
+%D \stoptyping
+
+\let\colorstyle\empty
+
+\def\setupcolor
+ {\dosingleargument\dosetupcolor}
+
+\def\dosetupcolor[#1]%
+ {\doifnot{#1}\colorstyle
+ {\def\colorstyle{#1}%
+ \processcommalist[#1]\dodosetupcolor}}
+
+\def\dodosetupcolor#1%
+ {\makeshortfilename[\truefilename{\f!colorprefix#1}]%
+ \startreadingfile
+ \readsysfile\shortfilename
+ {\showmessage\m!colors4\colorstyle}
+ {\showmessage\m!colors5\colorstyle}%
+ \stopreadingfile}
+
+\let\usecolors\setupcolor
+
+% check: \chardef\currentcolorchannel=0
+% check: \startcolormode
+% check: \newif\iffilterspotcolor \filterspotcolorfalse
+% check: \newif\ifdoingspotcolor \doingspotcolorfalse
+% check: \registercolorchannel
+
+%D \macros
+%D {definetransparency}
+%D
+%D This command numbers to names:
+
+\def\definetransparency
+ {\dodoubleargument\dodefinetransparency}
+
+\def\setupcolors
+ {\dosingleargument\dosetupcolors}
+
+\def\resetcolorsplitting
+ {\chardef\currentcolorchannel\zerocount
+ \let\currentspotcolor\empty
+ \filterspotcolorfalse}
+
+\def\colorsplitsuffix{\ifcase\currentcolorchannel\else-\@@clsplit\fi}
+\def\colorsplitprefix{\ifcase\currentcolorchannel\else\@@clsplit-\fi}
+
+\def\setcolorsplitting
+ {\resetsystemmode{\v!color\colorsplitsuffix}%
+ \resetcolorsplitting
+ \processaction
+ [\@@clsplit]
+ [ c=>\chardef\currentcolorchannel1,%
+ m=>\chardef\currentcolorchannel2,%
+ y=>\chardef\currentcolorchannel3,%
+ k=>\chardef\currentcolorchannel4,%
+ r=>\chardef\currentcolorchannel5,%
+ g=>\chardef\currentcolorchannel6,%
+ b=>\chardef\currentcolorchannel7,%
+ s=>\chardef\currentcolorchannel8,%
+ \v!no=>,% \currentcolorchannel0,% all colors
+ \s!default=>,% \currentcolorchannel0,% all colors
+ \s!unknown=>\filterspotcolortrue
+ \edef\currentspotcolor{\commalistelement}]%
+ \setsystemmode{\v!color\colorsplitsuffix}%
+ \iffilterspotcolor \let\@@clrgb\v!no \fi}
+
+\ifx\dosetupcolormodel\undefined
+ \let\dosetupcolormodel\relax
+\fi
+
+\def\dosetupcolors[#1]% some no longer make sense in MkIV
+ {\getparameters[\??cl][#1]%
+ \doifelse\@@clspot\v!yes
+ \SPOTsupportedtrue
+ \SPOTsupportedfalse
+ \doifelsenothing\@@clsplit
+ \resetcolorsplitting
+ \setcolorsplitting
+ \doifelse\@@clreduction\v!yes
+ \reduceCMYKtrue
+ \reduceCMYKfalse
+ \doifelse\@@clexpansion\v!yes
+ \freezecolorstrue
+ \freezecolorsfalse
+ \doifelse\@@clcriterium\v!all
+ \hidesplitcolortrue
+ \hidesplitcolorfalse
+ \doifelse\@@clrgb\v!no
+ {\ifRGBsupported \showmessage\m!colors {9}\v!rgb\RGBsupportedfalse\fi}
+ {\ifRGBsupported\else\showmessage\m!colors{10}\v!rgb\RGBsupportedtrue \fi}%
+ \doifelse\@@clcmyk\v!no
+ {\ifCMYKsupported \showmessage\m!colors {9}\v!cmyk\CMYKsupportedfalse\fi}
+ {\ifCMYKsupported\else\showmessage\m!colors{10}\v!cmyk\CMYKsupportedtrue \fi}%
+ \doifelse\@@clmpcmyk\v!no
+ {\ifMPcmykcolors \showmessage\m!colors {9}{\v!mp\v!cmyk}\MPcmykcolorsfalse\fi}
+ {\ifMPcmykcolors\else\showmessage\m!colors{10}{\v!mp\v!cmyk}\MPcmykcolorstrue \fi}%
+ \doifelse\@@clmpspot\v!no
+ {\ifMPspotcolors \showmessage\m!colors {9}{\v!mp\v!spot}\MPspotcolorsfalse\fi}
+ {\ifMPspotcolors\else\showmessage\m!colors{10}{\v!mp\v!spot}\MPspotcolorstrue \fi}%
+ \preferGRAYfalse
+ \processaction
+ [\@@clconversion]
+ [ \v!yes=>\preferGRAYtrue,
+ \v!always=>\preferGRAYtrue\RGBsupportedfalse\CMYKsupportedfalse]%
+ \ifRGBsupported
+ \converttoGRAYfalse
+ \forcegrayMPcolorsfalse
+ \else\ifCMYKsupported
+ \converttoGRAYfalse
+ \forcegrayMPcolorsfalse
+ \convertMPcolorstrue
+ \ifreduceCMYK
+ \reduceMPcolorstrue
+ \fi
+ \else
+ \ifconverttoGRAY\else\showmessage\m!colors{11}\empty\fi
+ \converttoGRAYtrue
+ \forcegrayMPcolorstrue
+ \convertMPcolorsfalse
+ \reduceMPcolorsfalse
+ \fi\fi
+ \processaction
+ [\@@clstate]
+ [ \v!global=>\ifincolor\else\showmessage\m!colors1\colorstyle\fi
+ \incolortrue\localcolorfalse,
+ \v!local=>\ifincolor\else\showmessage\m!colors2\colorstyle\fi
+ \incolortrue\localcolortrue,
+ \v!start=>\ifincolor\else\showmessage\m!colors1\colorstyle\fi
+ \incolortrue\localcolorfalse
+ \let\@@clstate\v!global,
+ \v!stop=>\incolorfalse\localcolorfalse
+ \forcegrayMPcolorstrue]%
+ \dosetupcolormodel
+ \initializemaintextcolor}
+
+%D \macros
+%D {startregistercolor,stopregistercolor,permitcolormode}
+%D
+%D If you only want to register a color, the switch \type
+%D {\ifpermitcolormode} can be used. That way the nested
+%D colors know where to go back to.
+
+\ifx\startregistercolor\undefined
+ \def\startregistercolor[#1]{}
+ \def\stopregistercolor {}
+\fi
+
+%D We use these macros for implementing text colors
+%D (actually, the first application was in foreground
+%D colors).
+%D
+%D \starttyping
+%D \starttextcolor[red]
+%D \dorecurse{10}{\input tufte \color[green]{oeps} \par}
+%D \stoptextcolor
+%D \stoptyping
+%D
+%D This is more efficient than the alternative:
+%D
+%D \starttyping
+%D \setupbackgrounds[text][foregroundcolor=red]
+%D \startregistercolor[red]
+%D \dorecurse{10}{\input tufte \color[green]{oeps} \par}
+%D \stopregistercolor
+%D \stoptyping
+
+\def\maintextcolor {}
+\def\defaulttextcolor {black}
+\def\@@themaintextcolor{themaintextcolor}
+
+\ifx\initializemaintextcolor\undefined
+ \def\starttextcolor [#1]{}
+ \def\stoptextcolor {}
+ \def\initializemaintextcolor {}
+\fi
+
+\ifx\restoretextcolor\undefined % to be redone
+ \let\restoretextcolor \firstofoneargument
+ \let\localstarttextcolor\relax
+ \let\localstoptextcolor \relax
+\fi
+
+%D In this documentation we will not go into too much details
+%D on palets. Curious users can find more information on this
+%D topic in \from[use of color].
+%D
+%D At the moment we implemented color in \CONTEXT\ color
+%D printing was not yet on the desktop. In spite of this lack our
+%D graphics designer made colorfull illustrations. When printed
+%D on a black and white printer, distinctive colors can come
+%D out equally gray. We therefore decided to use only colors
+%D that were distinctive in colors as well as in black and
+%D white print.
+%D
+%D Although none of the graphic packages we used supported
+%D logical colors and global color redefition, we build this
+%D support into \CONTEXT. This enabled us to experiment and
+%D also prepared us for the future.
+
+%D \macros
+%D {definepalet}
+%D
+%D Colors are grouped in palets. The colors in such a palet can
+%D have colorful names, but best is to use names that specify
+%D their use, like {\em important} or {\em danger}. As a sort
+%D of example \CONTEXT\ has some palets predefined,
+%D like:\footnote{At the time I wrote the palet support, I was
+%D reading 'A hort history of time' of S.~Hawkins, so that's
+%D why we stuck to quarks.}
+%D
+%D \starttyping
+%D \definepalet
+%D [alfa]
+%D [ top=rood:7,
+%D bottom=groen:6,
+%D up=blauw:5,
+%D down=cyaan:4,
+%D strange=magenta:3,
+%D charm=geel:2]
+%D \stoptyping
+%D
+%D It's formal definition is:
+%D
+%D \showsetup{definepalet}
+%D
+%D Visualized, such a palet looks like:
+%D
+%D \startbuffer[palet]
+%D \showpalet [alfa] [horizontal,name,number,value]
+%D \stopbuffer
+%D
+%D \startlinecorrection
+%D \getbuffer[palet]
+%D \stoplinecorrection
+%D
+%D This bar shows both the color and gray alternatives of the
+%D palet components (not visible in black and white print).
+%D
+%D When needed, one can copy a palet by saying:
+%D
+%D \starttyping
+%D \definepalet [TEXcolorpretty] [colorpretty]
+%D \stoptyping
+%D
+%D This saves us some typing in for instance the modules that
+%D deal with pretty verbatim typesetting.
+
+\def\definepalet
+ {\dodoubleargument\dodefinepalet}
+
+\def\dodefinepalet[#1][#2]%
+ {\doifassignmentelse{#2}
+ {%\showmessage\m!colors6{#1}%
+ \letvalue{\??pa#1}\empty
+ \setevalue{\??pa\??pa#1}{#2}%
+ \def\dodododefinepalet[##1=##2]%
+ {\doifvaluesomething{\??pa#1}
+ {\setevalue{\??pa#1}{\csname\??pa#1\endcsname,}}%
+ \setevalue{\??pa#1}{\csname\??pa#1\endcsname##1}%
+ \dodefinepaletcolor{#1}{##1}{##2}}%
+ \def\dododefinepalet##1%
+ {\dodododefinepalet[##1]}%
+ \processcommalist[#2]\dododefinepalet}
+ {\doifdefined{\??pa#2}
+ {\expanded{\dodefinepalet[#1][\csname\??pa\??pa#2\endcsname]}}}}
+
+\ifx\dodefinepaletcolor\undefined
+ \let\dodefinepaletcolor\gobblethreearguments
+\fi
+
+\let\paletsize\!!zerocount
+
+\def\getpaletsize[#1]%
+ {\getcommacommandsize[\csname\??pa\??pa#1\endcsname]%
+ \edef\paletsize{\number\commalistsize}}
+
+%D Instead of refering to colors, one can also directly specify
+%D a color:
+%D
+%D \starttyping
+%D \definepalet[test][xx=green]
+%D \definepalet[test][xx={y=.4}]
+%D \stoptyping
+
+%D \macros
+%D {setuppalet}
+%D
+%D Colors are taken from the current palet, if defined.
+%D Setting the current palet is done by:
+%D
+%D \showsetup{setuppalet}
+
+\let\currentpalet\empty
+
+\def\setuppalet
+ {\dosingleempty\dosetuppalet}
+
+\def\dosetuppalet[#1]%
+ {\edef\currentpalet{#1}%
+ \ifx\currentpalet\empty
+ % seems to be a reset
+ \else\ifcsname\??pa\currentpalet\endcsname
+ \edef\currentpalet{#1:}%
+ \else
+ \showmessage\m!colors7\currentpalet
+ \let\currentpalet\empty
+ \fi\fi}
+
+%D \macros
+%D {showpalet}
+%D
+%D The previous visualization was typeset with:
+%D
+%D \typebuffer[palet]
+%D
+%D This commands is defined as:
+%D
+%D \showsetup{showpalet}
+
+\fetchruntimecommand \showpalet {\f!colorprefix\s!run}
+
+%D \macros
+%D {showcolorcomponents}
+%D
+%D \starttyping
+%D \showcolorcomponents[color-1,color-2]
+%D \stoptyping
+
+\fetchruntimecommand \showcolorcomponents {\f!colorprefix\s!run}
+
+%D \macros
+%D {definecolorgroup}
+%D
+%D The naming of the colors in this palet suggests some
+%D ordening, which in turn is suported by color grouping.
+%D
+%D \starttyping
+%D \definecolorgroup
+%D [red]
+%D [1.00:0.90:0.90,
+%D 1.00:0.80:0.80,
+%D 1.00:0.70:0.70,
+%D 1.00:0.55:0.55,
+%D 1.00:0.40:0.40,
+%D 1.00:0.25:0.25,
+%D 1.00:0.15:0.15,
+%D 0.90:0.00:0.00]
+%D \stoptyping
+%D
+%D In such a color group colors are numbered from~$1$ to~$n$.
+%D
+%D \showsetup{definecolorgroup}
+%D
+%D This kind of specification is not only more compact than
+%D defining each color separate, it also loads faster and takes
+%D less bytes.
+
+\def\definecolorgroup
+ {\dotripleempty\dodefinecolorgroup}
+
+\def\dododefinecolorgroupgray [#1][#2:#3]{\definecolor [#1:\the\colorcount][s=#2]}
+\def\dododefinecolorgrouprgb [#1][#2:#3:#4:#5]{\definecolor [#1:\the\colorcount][r=#2,g=#3,b=#4]}
+\def\dododefinecolorgroupcmyk[#1][#2:#3:#4:#5:#6]{\definecolor [#1:\the\colorcount][c=#2,m=#3=,y=#4,k=#5]}
+\def\dododefinecolorgroupspot [#1][#2:#3:#4]{\definespotolor[#1:\the\colorcount][#2][p=#3]}
+
+\def\dododefinecolorgroup#1#2%
+ {\advance\colorcount\plusone
+ \getvalue{dododefinecolorgroup\currentcolorspace}[#1][#2:0:0:0:0]}
+
+\def\dodefinecolorgroup[#1][#2][#3]% obsolete, just use palets
+ {\ifthirdargument
+ \doifelsenothing{#2}{\let\currentcolorspace\v!rgb}{\def\currentcolorspace{#2}}%
+ \colorcount\zerocount
+ \processcommalist[#3]{\dododefinecolorgroup{#1}}%
+ \else
+ \doifinstringelse{:}{#2}
+ {\definecolorgroup[#1][\v!rgb][#2]}
+ {\doloop
+ {\doifdefinedelse{\??cr#2:\recurselevel}
+ {\setevalue{\??cr#1:\recurselevel}{\csname\??cr#2:\recurselevel\endcsname}}
+ {\exitloop}}}%
+ \fi}
+
+%D \macros
+%D {showcolorgroup}
+%D
+%D We can show the group by:
+%D
+%D \startbuffer
+%D \showcolorgroup [blue] [horizontal,name,number,value]
+%D \stopbuffer
+%D
+%D \typebuffer
+%D
+%D or in color:
+%D
+%D \startlinecorrection
+%D \getbuffer
+%D \stoplinecorrection
+%D
+%D which uses:
+%D
+%D \showsetup{showcolorgroup}
+
+\fetchruntimecommand \showcolorgroup {\f!colorprefix\s!run}
+
+%D There are ten predefined color groups, like
+%D \color[green]{\em groen}, \color[red]{\em rood},
+%D \color[blue]{\em blauw}, \color[cyan]{\em cyaan},
+%D \color[magenta]{\em magenta} and \color[yellow]{\em geel}.
+%D
+%D \startlinecorrection
+%D \hbox to \hsize
+%D {\hss
+%D \showcolorgroup [red] [vertical,name,number]\hss
+%D \showcolorgroup [green] [vertical,name]\hss
+%D \showcolorgroup [blue] [vertical,name]\hss
+%D \showcolorgroup [cyan] [vertical,name]\hss
+%D \showcolorgroup [magenta][vertical,name]\hss
+%D \showcolorgroup [yellow] [vertical,name]\hss}
+%D \stoplinecorrection
+%D
+%D These groups are used to define palets {\em alfa} upto {\em
+%D zeta}. As long as we don't use colors from the same row, we
+%D get ourselves distinctive palets. By activating such a palet
+%D one gains access to its members {\em top} to {\em charm} (of
+%D course one should use more suitable names than these).
+%D
+%D \startlinecorrection
+%D \hbox to \hsize
+%D {\showpalet [alfa] [vertical,name,number]\hss
+%D \showpalet [beta] [vertical,name]\hss
+%D \showpalet [gamma] [vertical,name]\hss
+%D \showpalet [delta] [vertical,name]\hss
+%D \showpalet [epsilon] [vertical,name]\hss
+%D \showpalet [zeta] [vertical,name]}
+%D \stoplinecorrection
+%D
+%D By using the keyword \type {value} the individual color
+%D components are shown too. When printed in color, these
+%D showcases show both the colors and the gray value.
+
+%D \macros
+%D {comparepalet}
+%D
+%D There are some more testing macros available:
+%D
+%D \startbuffer
+%D \comparepalet [alfa]
+%D \stopbuffer
+%D
+%D \typebuffer
+%D
+%D shows the palet colors against a background:
+%D
+%D \startlinecorrection
+%D \getbuffer
+%D \stoplinecorrection
+%D
+%D The formal definition is:
+%D
+%D \showsetup{comparepalet}
+
+\fetchruntimecommand \comparepalet {\f!colorprefix\s!run}
+
+%D \macros
+%D {comparecolorgroup}
+%D
+%D The similar command:
+%D
+%D \startbuffer
+%D \comparecolorgroup [blue]
+%D \stopbuffer
+%D
+%D \typebuffer
+%D
+%D shows color groups:
+%D
+%D \startlinecorrection
+%D \getbuffer
+%D \stoplinecorrection
+%D
+%D this commands are defined as:
+%D
+%D \showsetup{comparecolorgroup}
+
+\fetchruntimecommand \comparecolorgroup {\f!colorprefix\s!run}
+
+%D \macros
+%D {showcolor}
+%D
+%D But let's not forget that we also have the more traditional
+%D non||related colors. These show up after:
+%D
+%D \starttyping
+%D \showcolor [name]
+%D \stoptyping
+%D
+%D Where \type{name} for instance can be \type{rgb}.
+%D
+%D \showsetup{showcolor}
+
+\fetchruntimecommand \showcolor {\f!colorprefix\s!run}
+
+%D It would make sense to put the following code in \type
+%D {colo-mps}, but it it rather low level.
+
+%D \macros
+%D {negatecolorcomponent,negatedcolorcomponent}
+%D
+%D These speak for themselves. See \type {colo-ext} for usage.
+
+\def\negatecolorcomponent#1% #1 = \macro
+ {\scratchdimen\onepoint\advance\scratchdimen-#1\onepoint
+ \ifdim\scratchdimen<\zeropoint\scratchdimen\zeropoint\fi
+ \edef#1{\withoutpt\the\scratchdimen}}
+
+\let\negatedcolorcomponent\firstofoneargument
+
+\def\negatedcolorcomponent#1%
+ {\ifdim\dimexpr\onepoint-#1\onepoint\relax<\zeropoint
+ \!!zerocount
+ \else
+ \expandafter\withoutpt\the\dimexpr\onepoint-#1\onepoint\relax
+ \fi}
+
+\def\negatecolorcomponent#1% #1 = \macro
+ {\edef#1{\negatedcolorcomponent{#1}}}
+
+%D \macros
+%D {ifMPgraphics, ifMPcmykcolors, MPcolor}
+%D
+%D A very special macro is \type{\MPcolor}. This one can be
+%D used to pass a \CONTEXT\ color to \METAPOST.
+%D
+%D \starttyping
+%D \MPcolor{my own red}
+%D \stoptyping
+%D
+%D This macro returns a \METAPOST\ triplet \type{(R,G,B)}.
+%D Unless \CMYK\ color support is turned on with \type
+%D {MPcmyk}, only \cap{RGB} colors and gray scales are
+%D supported.
+
+\newif\ifMPcmykcolors % \MPcmykcolorsfalse
+\newif\ifMPspotcolors % \MPspotcolorsfalse
+
+\ifx\MPcolor\undefined
+ \def\MPcolor#1{(0,0,0)}
+\fi
+
+%D \macros
+%D {PDFcolor,FDFcolor}
+%D
+%D Similar alternatives are avaliable for \PDF:
+
+%D For the moment we keep the next downward compatibility
+%D switch, i.e.\ expanded colors. However, predefined colors
+%D and palets are no longer expanded (which is what I wanted
+%D in the first place).
+%D
+%D Well, in case we want to do color separation and use CMYK
+%D colors only, this is dangerous since unwanted remapping may
+%D take place. Especially when we redefine already defined
+%D colors in another color space (e.g. darkgreen is
+%D predefined in RGB color space, so a redefinition in CMYK
+%D coordinates before RGB mode is disabled, would give
+%D unexpected results due to the already frozen color spec.)
+%D
+%D So, from now on, colors are not frozen any more!
+
+% \appendtoks\setupcolors[\c!expansie=\v!ja]\to\everyjob
+
+\chardef\currentcolorchannel=0
+
+\newif\iffilterspotcolor \filterspotcolorfalse
+\newif\ifdoingspotcolor \doingspotcolorfalse
+
+\def\registercolorchannel#1%
+ {\ifdoingspotcolor \else
+ \global\expandafter\chardef\csname\??cs#1\endcsname\zerocount
+ \fi}
+
+\newif\ifhidesplitcolor \hidesplitcolortrue
+
+%D The next macro is for instance used in figure splitting:
+
+\def\doifseparatingcolorselse
+ {\iffilterspotcolor
+ \@EA\firstoftwoarguments
+ \else\ifcase\currentcolorchannel
+ \@EAEAEA\secondoftwoarguments
+ \else
+ \@EAEAEA\firstoftwoarguments
+ \fi\fi}
+
+\def\doifcolorchannelelse#1%
+ {\doifseparatingcolorselse
+ {\doifelsenothing{#1}
+ \secondoftwoarguments
+ {\doifelse{#1}\@@clsplit
+ \firstoftwoarguments
+ \secondoftwoarguments}}
+ \secondoftwoarguments}
+
+\def\resetcolorseparation
+ {\filterspotcolorfalse
+ \chardef\currentcolorchannel\zerocount}
+
+%D These can be used in selecting specific files (like
+%D figuredatabases).
+
+% we already have:
+%
+% \def\colorsplitsuffix{\ifcase\currentcolorchannel\else-\@@clsplitsen\fi}
+% \def\colorsplitprefix{\ifcase\currentcolorchannel\else\@@clsplitsen-\fi}
+
+\def\colorchannelprefix{\doifseparatingcolorselse\@@clsplit\empty-}
+\def\colorchannelsuffix{-\doifseparatingcolorselse\@@clsplit\empty}
+
+%D We now load the low level macros:
+
+\loadmarkfile{colo-new}
+
+%D We default to the colors defined in \module{colo-rgb} and
+%D support both \cap{RGB} and \cap{CMYK} output. As you can
+%D see, color support is turned off by default. Reduction of
+%D gray colors to gray scales is turned on.
+
+\definecolor[black][s=0]
+\definecolor[white][s=1]
+
+\definetransparency [none] [0]
+\definetransparency [normal] [1]
+\definetransparency [multiply] [2]
+\definetransparency [screen] [3]
+\definetransparency [overlay] [4]
+\definetransparency [softlight] [5]
+\definetransparency [hardlight] [6]
+\definetransparency [colordodge] [7]
+\definetransparency [colorburn] [8]
+\definetransparency [darken] [9]
+\definetransparency [lighten] [10]
+\definetransparency [difference] [11]
+\definetransparency [exclusion] [12]
+
+\setupcolors
+ [\c!state=\v!stop,
+ \c!conversion=\v!yes,
+ \c!reduction=\v!no,
+ \c!rgb=\v!yes,
+ \c!cmyk=\v!yes,
+ \c!spot=\v!yes,
+ \c!mp\c!cmyk=\@@clcmyk,
+ \c!mp\c!spot=\@@clspot,
+ \c!expansion=\v!no,
+ \c!textcolor=,
+ \c!split=\v!no,
+ \c!criterium=\v!all]
+
+\setupcolor
+ [\v!rgb]
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/colo-run.tex b/Master/texmf-dist/tex/context/base/colo-run.tex
index 9b3d0e94b9a..9cb797c4d97 100644
--- a/Master/texmf-dist/tex/context/base/colo-run.tex
+++ b/Master/texmf-dist/tex/context/base/colo-run.tex
@@ -13,6 +13,19 @@
\unprotect
+% temp hack (not do be documented)
+
+% \gdef\doformatcolorP#1:#2:#3:#4:#5:#6\od % was undefined in colo-ini
+% {#1\colorformatseparator
+% \dodoformatcolor{#2}\colorformatseparator
+% \dodoformatcolor{#3}\colorformatseparator
+% \dodoformatcolor{#4}\colorformatseparator}
+
+% \gdef\doformatgrayP#1:#2:#3:#4:#5:#6\od
+% {todo}
+
+% so far
+
\gdef\showpalet
{\dodoubleargument\doshowpalet}
@@ -60,8 +73,9 @@
\processpalet[#1]\doshowpalet}\cr
\doifinset\v!name{#2}{#1\hskip.5em}%
\def\doshowpalet##1%
- {&\color[##1]{\vrule\!!width\!!widtha\!!height\strutht\!!depth\zeropoint}}%
+ {&\strut\color[##1]{\vrule\!!width\!!widtha\!!height\strutht\!!depth\zeropoint}}%
\processpalet[#1]\doshowpalet\crcr
+ \noalign{\vskip-\strutdepth}%
\def\doshowpalet##1%
{&\graycolor[##1]{\vrule\!!width\!!widtha\!!height\zeropoint\!!depth\strutdp}}%
\processpalet[#1]\doshowpalet\crcr
@@ -84,7 +98,7 @@
{\dodoubleargument\doshowcolorgroup}
\gdef\doshowcolorgroup[#1][#2]%
- {\doifdefined{\??cr#1:1}
+ {\doifcolor{#1:1}
{\doifinsetelse\v!vertical{#2}
{\showverticalcolorgroup[#1][#2]}
{\showhorizontalcolorgroup[#1][#2]}}}
@@ -105,8 +119,8 @@
\graycolor[#1:##1]{\vrule\!!width4em\!!height\zeropoint\!!depth\strutdp}\cr
\doifinset\v!value{#2}{\colorvalue{#1:##1}\strut}\crcr}}
\def\doshowgroup##1%
- {\doifdefined{\??cr#1:##1}
- {\vbox{\dodoshowgroup{##1}}}}
+ {\doifcolor{#1:##1}
+ {\vbox{\dodoshowgroup{##1}}}}%
\hbox
{\doifinset\v!name{#2}
{\strut
@@ -123,12 +137,12 @@
\setuppalet
\tabskip\zeropoint
\def\rule
- {\vrule\!!width2.5em\!!height\strutht\!!depth\strutdp}
+ {\vrule\!!width2.5em\!!height\strutht\!!depth\strutdp}%
\def\doshowgroup##1%
- {\doifdefined{\??cr#1:##1}
+ {\doifcolor{#1:##1}
{\doifinset\v!number{#2}{##1\hskip.5em}&
\color[#1:##1]{\rule}\graycolor[#1:##1]{\rule}&
- \doifinset\v!value{#2}{\hskip.5em\colorvalue{#1:##1}}\crcr}}
+ \doifinset\v!value{#2}{\hskip.5em\colorvalue{#1:##1}}\crcr}}%
\halign
{\hss##&\hss##\hss&##\hss\cr
&\doifinset\v!name{#2}{\strut#1}&\crcr
@@ -196,7 +210,7 @@
{\dosingleargument\docomparecolorgroup}
\gdef\docomparecolorgroup[#1]%
- {\doifdefined{\??cr#1:1}
+ {\doifcolor{#1:1}
{\hbox
{\dodocomparecolorgroup\color[#1]%
\quad
@@ -206,7 +220,7 @@
{\localvbox
{\!!counta\zerocount
\dorecurse{15}
- {\doifdefined{\??cr#2:\recurselevel}{\advance\!!counta\plusone}}
+ {\doifcolor{#2:\recurselevel}{\advance\!!counta\plusone}}
\!!widtha2em\relax
\hsize\!!counta\!!widtha
\def\rule
@@ -222,4 +236,37 @@
\endgraf}
\dorecurse\!!counta{\dododocomparecolorgroup\recurselevel}}}
+\gdef\dogetcolorcomponents#1%
+ {\doifelsenothing{#1}
+ {\appendtoks
+ \TB
+ \to \scratchtoks}
+ {\appendtoks
+ \NC\showcolorbar[#1]\NC#1\NC\transparencycomponents{#1}\NC\colorcomponents{#1}\NC \NR
+ \to \scratchtoks}}
+
+% \gdef\showcolorcomponents[#1]%
+% {\bgroup
+% \def\bars##1{\backgroundline[##1]{\strut\enspace\color[white]{white}\enspace\color[black]{black}\enspace}}%
+% \scratchtoks\emptytoks
+% \appendtoks\starttabulate[|l|l|l|l|]\to\scratchtoks
+% \appendtoks\NC color \NC name \NC transparency \NC specification \NC\NR\TB\to\scratchtoks
+% \processcommacommand[#1]\dogetcolorcomponents
+% \appendtoks\stoptabulate\to\scratchtoks
+% \tt\the\scratchtoks
+% \egroup}
+
+\gdef\showcolorbar[#1]%
+ {\backgroundline[#1]{\strut\enspace\color[white]{white}\enspace\color[black]{black}\enspace}}
+
+\gdef\showcolorcomponents[#1]%
+ {\begingroup
+ \scratchtoks{\TB}%
+ \processcommacommand[#1]\dogetcolorcomponents
+ \starttabulate[|lT|lT|lT|lT|]
+ \NC color \NC name \NC transparency \NC specification \NC\NR
+ \the\scratchtoks
+ \stoptabulate
+ \endgroup}
+
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/cont-log.tex b/Master/texmf-dist/tex/context/base/cont-log.tex
index 37aabbbb619..fb821331d8c 100644
--- a/Master/texmf-dist/tex/context/base/cont-log.tex
+++ b/Master/texmf-dist/tex/context/base/cont-log.tex
@@ -21,7 +21,7 @@
\unprotect
-\convertargument cmr\to\someCMRfont
+\defconvertedargument\someCMRfont{cmr} % hm, we now have lm
% \def\doifCMRfontelse#1#2%
% {\doifinstringelse{\someCMRfont}{\fontname\font}
@@ -161,10 +161,10 @@
\unexpanded\def\setMFPfont% more sensitive for low level changes
{\font\logofont=logo%
\ifx\fontalternative\c!bf\else
+ \ifx\fontalternative\c!it\else
\ifx\fontalternative\c!sl\else
- \ifx\fontalternative\c!sl\else
- \ifx\fontalternative\c!bs\else
\ifx\fontalternative\c!bi\else
+ \ifx\fontalternative\c!bs\else
\fi\fi\fi\fi\fi
10 at \currentfontscale\bodyfontsize
\logofont}
@@ -230,22 +230,67 @@
\def\luaTeX {lua\TeX}
\unexpanded\def\XeTeX {X\lower.5ex\hbox{\kern-.15em\mirror{E}}\kern-.1667em\TeX}
+% Better, since lm has a mirrored E (don't ask me why)
+
+% \unexpanded\def\XeTeX
+% {X\lower.5ex
+% \hbox
+% {\kern-.15em
+% \ifx\XeTeXcharglyph\undefined
+% \mirror{E}%
+% \else\ifcase\XeTeXcharglyph"018E\relax
+% \mirror{E}%
+% \else
+% \char"018E%
+% \fi}%
+% \kern-.1667em \TeX}
+
+% Adapted from a patch by Mojca:
+
+\def\@XeTeX@
+ {\setbox\scratchbox\hbox{E}%
+ \raise\dimexpr\ht\scratchbox+\dp\scratchbox\relax\hbox{\rotate[\c!rotation=180]{\box\scratchbox}}}
+
+\beginNEWTEX
+
+\unexpanded\def\XeTeX
+ {X\lower.5ex
+ \hbox
+ {\kern-.15em
+ \iffontchar\font"018E\relax
+ \char"018E%
+ \else
+ \ifx\fontalternative\c!bf\mirror{E}\else
+ \ifx\fontalternative\c!it \@XeTeX@\else
+ \ifx\fontalternative\c!sl \@XeTeX@\else
+ \ifx\fontalternative\c!bi \@XeTeX@\else
+ \ifx\fontalternative\c!bs \@XeTeX@\else
+ \mirror{E}\fi\fi\fi\fi\fi
+ \fi}%
+ \kern-.1667em \TeX}
+
+\endNEWTEX
+
+\beginOLDTEX
+
+\unexpanded\def\XeTeX
+ {X\lower.5ex
+ \hbox
+ {\kern-.15em
+ \ifx\fontalternative\c!bf\mirror{E}\else
+ \ifx\fontalternative\c!it \@XeTeX@\else
+ \ifx\fontalternative\c!sl \@XeTeX@\else
+ \ifx\fontalternative\c!bi \@XeTeX@\else
+ \ifx\fontalternative\c!bs \@XeTeX@\else
+ \mirror{E}\fi\fi\fi\fi\fi}%
+ \kern-.1667em \TeX}
+
+\endOLDTEX
+
\let\ETEX \eTeX
\let\PDFTEX \pdfTeX
\let\PDFETEX \pdfeTeX
\let\LUATEX \luaTeX
\let\XETEX \XeTeX
-\beginXETEX depth adjustment of logos
-
- % The next patch by Adam Lindsay is needed to satisfy XeTeX's
- % feelings about what depths and heights are supposed to be.
-
- \let\NormalTeXLogo\TeX
-
- \unexpanded\def\TeX {T\smash[d]{\kern-.1667em\lower.5ex\hbox{E}}\kern-.125emX}
- \unexpanded\def\XeTeX{X\smash[d]{\lower.5ex\hbox{\kern-.15em\mirror{E}}}\kern-.1667em\TeX}
-
-\endXETEX
-
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/cont-mtx.tex b/Master/texmf-dist/tex/context/base/cont-mtx.tex
new file mode 100644
index 00000000000..833785a7f2b
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/cont-mtx.tex
@@ -0,0 +1,25 @@
+%D \module
+%D [ file=cont-mtx,
+%D version=2006.01.01, % no date -)
+%D title=\CONTEXT\ Miscellaneous Macros,
+%D subtitle=Experimental MetaTeX Macros,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+% format generation : texexec --make --all --luatex
+%
+% pdftex compatible run : texexec --luatex filename
+% aleph compatible run : texexec --luatex --output=dvipdfmx filename
+%
+% or, at top of tex file : % engine=luatex
+
+% \loadcorefile{meta-xxx.tex}
+
+%D Here we load files that are not yet part of the core.
+
+\endinput
diff --git a/Master/texmf-dist/tex/context/base/cont-new.mkii b/Master/texmf-dist/tex/context/base/cont-new.mkii
index 9610dbd4b9d..6af6de4b624 100644
--- a/Master/texmf-dist/tex/context/base/cont-new.mkii
+++ b/Master/texmf-dist/tex/context/base/cont-new.mkii
@@ -11,4 +11,6 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
+\enablemode[mkii]
+
\endinput
diff --git a/Master/texmf-dist/tex/context/base/cont-new.mkiv b/Master/texmf-dist/tex/context/base/cont-new.mkiv
new file mode 100644
index 00000000000..550a96ea9de
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/cont-new.mkiv
@@ -0,0 +1,157 @@
+%D \module
+%D [ file=cont-new,
+%D version=2006.10.04,
+%D title=\CONTEXT\ Miscellaneous Macros,
+%D subtitle=New Macros,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+% \appendtoks
+% \writestatus\m!lua{tfm over afm, wide fonts not yet supported}
+% \to \everystoptext
+
+% \ctxlua { fonts.define.method = 2 } % normally 3
+
+\enablemode[mkiv]
+
+% potential new defaults:
+
+% \setbreakpoints[compound]
+
+\unprotect
+
+% \appendtoks
+% \ctxlua{
+% table.insert(input.stop_actions, function()
+% tex.sprint(tex.ctxcatcodes,"\\immediatewriteutilitytua{end}")
+% tex.sprint(tex.ctxcatcodes,"\\immediatewriteutilitytua{}")
+% tex.sprint(tex.ctxcatcodes,"\\immediatewriteutilitytua{end of utility file}")
+% end)
+% }%
+% \to \everyopenutilities
+
+\def\writestatus#1#2{\ctxlua{ctx.writestatus(\!!bs#1\!!es,\!!bs#2\!!es)}}
+
+\ifx\clearmarks\undefined
+ \def\clearmarks {\begingroup\afterassignment\doclearmarks\scratchcounter}
+ \def\doclearmarks{\normalmarks\scratchcounter{}\endgroup}
+\fi
+
+\def\resetmark#1% we cannot use \normalmarks#1{}
+ {\global\@EA\chardef\csname\@@mrk\string#1\endcsname\zerocount
+ \@EA\clearmarks\csname\@@prk\string#1\endcsname
+ \global\@EA\let\csname\@@trk\string#1\endcsname\empty
+ \global\@EA\let\csname\@@frk\string#1\endcsname\empty
+ \global\@EA\let\csname\@@brk\string#1\endcsname\empty
+ \global\@EA\let\csname\@@crk\string#1\endcsname\empty}
+
+% \appendtoks
+% \ctxlua{garbagecollector.update()}%
+% \to \everyshipout
+
+% texmf.instance will become just texmf
+
+%D Since this can be a showstopper, we report the path at the beginning
+%D as well as at the end of a run.
+
+\writestatus\m!lua{used config path - \ctxlua{tex.print(caches.configpath(texmf.instance))}}
+\writestatus\m!lua{used cache path - \ctxlua{tex.print(caches.path)}}
+
+%D For the moment we report some statistics. Later this will become an option,
+%D but for now we need this information.
+
+% \appendtoks
+% \ctxlua{ctx.show_statistics()}%
+% \to \everygoodbye
+
+\def\resettimer {\ctxlua{environment.starttime = os.clock()}}
+\def\elapsedtime {\ctxlua{tex.sprint(os.clock()-environment.starttime)}}
+\let\elapsedseconds \elapsedtime
+
+\resettimer
+
+% \appendtoks
+% \resettimer
+% \to \everyjob
+
+%D For me.
+
+\def\traceluausage
+ {\dosingleempty\dotraceluausage}
+
+\def\dotraceluausage[#1]%
+ {\ctxlua{debugger.enable()}%
+ \appendtoks\ctxlua{debugger.disable() debugger.showstats(print,\doifnumberelse{#1}{#1}{5000})}\to\everybye}
+
+%D Fonts (experimental AFM loading}
+
+% \ctxlua {
+% remapper.define('encoding','^lm' ,'^(.*)$','lm-\letterpercent1')
+% remapper.define('encoding','^qbk','^(.*)$','q-\letterpercent1')
+% remapper.define('encoding','^qcs','^(.*)$','q-\letterpercent1')
+% remapper.define('encoding','^qpl','^(.*)$','q-\letterpercent1')
+% remapper.define('encoding','^qtm','^(.*)$','q-\letterpercent1')
+% }
+
+\appendtoksonce \loadallXfontmapfiles \to \everyPDFxform
+\appendtoksonce \loadallXfontmapfiles \to \everyPDFximage
+\appendtoksonce \loadallXfontmapfiles \to \everystarttext
+\appendtoksonce \loadallXfontmapfiles \to \everybeforepagebody
+
+\def\loadallXfontmapfiles{\ctxlua{fonts.map.flush("pdftex")}}
+
+% \ctxlua{
+% do
+% local pth = "." .. io.fileseparator .. "tmp" .. io.fileseparator .. "\jobname"
+% texio.write_nl("CREATING "..pth)
+% os.execute("mkdir " .. pth)
+% end
+% input.output_files = { }
+% callback.register('find_write_file', function(id,name)
+% input.output_files[name] = file.join(".","tmp","\jobname",name)
+% texio.write_nl("REDIRECTING OUTPUT "..name.. " TO " .. input.output_files[name])
+% return input.output_files[name]
+% end)
+% callback.register('find_read_file', function(id,name)
+% local sname = string.gsub(name,"^\letterpercent./","")
+% if input.output_files[sname] then
+% return input.output_files[name]
+% elseif string.find(sname,"^\jobname[\letterpercent.\letterpercent-]") then
+% local n = file.join(".","tmp","\jobname",sname)
+% local f = io.open(n)
+% if f then
+% input.output_files[name] = n
+% texio.write_nl("REDIRECTING INPUT "..sname.. " TO " .. n)
+% f:close()
+% return n
+% else
+% return input.findtexfile(texmf.instance,name)
+% end
+% else
+% return input.findtexfile(texmf.instance,name)
+% end
+% end)
+% }
+
+% The following commands need to be taken care of, e.g. because there is not yet
+% a mkiv module for them.
+
+\definestartstop[randomized][\c!before=\dosetattribute{case}\plusfour,\c!after=]
+
+\def\WORD{\groupedcommand{\setcharactercasing[\plusone ]}{}}
+\def\word{\groupedcommand{\setcharactercasing[\plustwo ]}{}}
+\def\Word{\groupedcommand{\setcharactercasing[\plusthree]}{}} % \plusfour
+
+\let\WORDS\WORD
+\let\words\word
+\let\Words\Word
+
+\protect \endinput
+
+% \expanded{\defineactivecharacter \number"2000E} {\textdir TRT\relax}
+% \expanded{\defineactivecharacter \number"2000F} {\textdir TLT\relax}
diff --git a/Master/texmf-dist/tex/context/base/cont-new.tex b/Master/texmf-dist/tex/context/base/cont-new.tex
index 13790edd9e9..eda6471d25c 100644
--- a/Master/texmf-dist/tex/context/base/cont-new.tex
+++ b/Master/texmf-dist/tex/context/base/cont-new.tex
@@ -11,9 +11,7 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-% it's about time to clean up this file ...
-
-\newcontextversion{2007.01.12 15:56}
+\newcontextversion{2008.05.21 15:21}
%D This file is loaded at runtime, thereby providing an
%D excellent place for hacks, patches, extensions and new
@@ -21,23 +19,50 @@
\unprotect
+% it's about time to clean up this file ...
+
\writestatus{\m!systems}{beware: some patches loaded from cont-new.tex}
+% \ifx\pdfmapfile \undefined \else \pdfmapfile{ } \fi
+
% \font\f=dummyfont \rpcode\f0=500 \hbox{..}\char0
% todo: mp-new
% caption: grid=top|bottom in xml defs
\let\then\relax % \ifnum1>2\then -)
-\def\defXMLexpanded#1#2%
- {\begingroup
- \let\getXMLentity\expandedXMLentity
- \expanded{\endgroup\edef\noexpand#1{#2}}}
-
-\def\gdefXMLexpanded#1#2%
- {\begingroup
- \let\getXMLentity\expandedXMLentity
- \expanded{\endgroup\xdef\noexpand#1{#2}}}
+\def\TransparencyHack
+ {\appendtoks
+ \doPDFpageattribute{/Group << /S /Transparency /I true /K true>>}%
+ \to \everyPDFxform
+ \appendtoks
+ \doPDFpageattribute{/Group << /S /Transparency /I true /K true>>}%
+ \to \everyshipout}
+
+% \setupcaption [figure] [align=flushleft]
+% \setupcaption [figure-1] [align=flushleft,leftmargin=10mm]
+% \setupcaption [figure-2] [align=flushleft,leftmargin=10mm,rightmargin=-10mm,width=\textwidth]
+%
+% \startsetups somefigure
+% \ifdim\floatsetupwidth>\textwidth
+% \placesetupfloat[figure-2]
+% \else
+% \placesetupfloat[figure-1]
+% \fi
+% \stopsetups
+%
+% \placefloatwithsetups[somefigure]{}{\externalfigure[dummy][width=5cm,height=2cm]}
+
+\def\placefloatwithsetups
+ {\dotripleempty\doplacefloatwithsetups}
+
+\def\doplacefloatwithsetups[#1][#2][#3]#4%
+ {\def\floatsetupcaption {#4}%
+ \def\floatsetupcontent {\copy\nextbox}%
+ \def\floatsetupwidth {\wd\nextbox}%
+ \def\floatsetupheight {\ht\nextbox}%
+ \def\placesetupfloat[##1]{\placefloat[##1][#2][#3]{#4}{\floatsetupcontent}}% #4 and not \floatsetupcaption (unexpanded)
+ \dowithnextbox{\setups[#1]}\vbox}
\def\dividedsize#1#2#3% size gap n
{\dimexpr
@@ -98,29 +123,6 @@
\prependtoks \restoreendofline \to \everybeforeshipout
-% The following may be a solution for the fact that one cannot
-% change catcodes of characters like : and ; inside an environment.
-
-\appendtoks
- \enablelanguagespecifics[\currentlanguage]%
-\to \everystarttext
-
-% Peter M\"unster's test case:
-%
-% \defineoverlay[Draft][{\scale[factor=max]{\rotate[rotation=60]{~MY||DRAFT~}}}]
-% \setupbackgrounds[page][background=Draft]
-% \starttext
-% \starttables[|l|]
-% \dorecurse{200}{\NC hallo \NC\AR}
-% \stoptables
-% \stoptext
-%
-% \let\normalactivetilde~
-% \let\normalactivebar |
-%
-% \appendtoks\let~\normalactivetilde\to\everypagebody
-% \appendtoks\let|\normalactivebar \to\everypagebody
-
\let\cs\getvalue
% experimental so this may change
@@ -217,105 +219,6 @@
%
% \shapesynonym{eacute}
-\chardef\baselinecorrectionmode\plusone
-
-\def\onbaselinecorrection {\chardef\baselinecorrectionmode\plusone }
-\def\offbaselinecorrection {\chardef\baselinecorrectionmode\plustwo }
-\def\forcebaselinecorrection{\chardef\baselinecorrectionmode\plusthree}
-
-\def\topbaselinecorrection
- {\ifvmode \ifdim\pagegoal<\maxdimen
- \forcedtopbaselinecorrection
- \fi \fi}
-
-\def\forcedtopbaselinecorrection
- {\ifvmode
- \bgroup
- \setbaselinecorrections
- \whitespace
- \nointerlineskip
- \dotopbaselinecorrection
- \egroup
- \fi}
-
-\let\forcedbotbaselinecorrection\botbaselinecorrection
-
-\def\startbaselinecorrection
- {\ifcase\baselinecorectionmode
- \or % normal
- \baselinecorrection
- \ifvmode
- \bgroup
- \setbox\scratchbox\vbox\bgroup
- \ignorespaces
- \let\stopbaselinecorrection\donormalstopbaselinecorrection
- \else
- \bgroup
- \let\stopbaselinecorrection\egroup
- \fi
- \or % off
- \bgroup
- \let\stopbaselinecorrection\egroup
- \or % force
- \baselinecorrection
- \ifvmode
- \bgroup
- \setbox\scratchbox\vbox\bgroup
- \ignorespaces
- \let\stopbaselinecorrection\doforcedstopbaselinecorrection
- \else
- \bgroup
- \let\stopbaselinecorrection\egroup
- \fi
- \fi}
-
-\def\startbaselinecorrection
- {\bgroup
- \let\stopbaselinecorrection\egroup
- \ifcase\baselinecorrectionmode
- \or % normal
- \baselinecorrection
- \ifvmode
- \setbox\scratchbox\vbox\bgroup\ignorespaces
- \let\stopbaselinecorrection\donormalstopbaselinecorrection
- \fi
- \or % off
- \or % force
- \baselinecorrection
- \ifvmode
- \setbox\scratchbox\vbox\bgroup\ignorespaces
- \let\stopbaselinecorrection\doforcedstopbaselinecorrection
- \fi
- \fi}
-
-\let\stopbaselinecorrection\relax
-
-\def\donormalstopbaselinecorrection % I have to check columns yet.
- {\egroup
- \topbaselinecorrection
- \box\scratchbox
- \botbaselinecorrection
- \egroup}
-
-\def\doforcedstopbaselinecorrection % I have to check columns yet.
- {\egroup
- \forcedtopbaselinecorrection
- \box\scratchbox
- \forcedbotbaselinecorrection
- \egroup}
-
-% core-grd:
-
-\let\normalstartbaselinecorrection=\startbaselinecorrection
-
-\def\startbaselinecorrection
- {\ifgridsnapping
- \centertogrid\bgroup
- \let\stopbaselinecorrection\egroup
- \else
- \normalstartbaselinecorrection
- \fi}
-
% \page[left]
% \definecolumntextarea[intro][left][x=1,y=1,nx=4,ny=20,state=start,background=introlayer]
% \setupcolumntextareatext[intro][left][\setups{intro}]
@@ -433,47 +336,6 @@
{\XMLexpanded{\scratchtoks{\enableXML#2}}%
\expanded{\normalsetnormalmark{#1}{\the\scratchtoks}}}
-\ifx\pagediscards\undefined \let\pagediscards\relax \fi
-
-\installoutput\synchronizeoutput % maybe add pagediscards
- {\ifvoid\normalpagebox\else
- \unvbox\normalpagebox
- \pagediscards % maybe not needed ?
- \fi}
-
-% temp hack, else no proper default fall back (like \textmultiply); todo: sync encoding
-
-\def\dealwithmathtextencoding
- {\expanded{\everyhbox{\the\everyhbox\noexpand\fastenableencoding{\currentencoding}}}%
- \def\dealwithmathtextencoding{\let\characterencoding\nocharacterencoding}%
- \dealwithmathtextencoding}
-
-\appendtoks
- \dealwithmathtextencoding
-\to \everymathematics
-
-\let\outerencoding\empty
-
-\def\checkoutermathencoding
- {\ifx\outerencoding\empty
- \ifx\outerencoding\s!default\else
- \edef\outerencoding{\currentencoding}%
- \fi
- \fi}
-
-\prependtoks
- \checkoutermathencoding
-\to \everymathematics
-
-% \startmathcollection[eul:texnansi]
-% \definemathsymbol [breve] [accent] [tf] ["15]
-% \stopmathcollection
-% \startmathcollection[eul:ec]
-% \definemathsymbol [breve] [accent] [tf] ["08]
-% \stopmathcollection
-%
-% $\breve e$
-
% \separatestring123 456\to\test [\test]
% \def\separatestring#1\to#2%
@@ -729,34 +591,6 @@
%
% \endETEX
-% cleaner
-%
-% \long\def\doMPTEXcheck#1%
-% {\long\def\dodoMPTEXcheck##1#1##2##3\war{\if##2@\else\@EA\donoMPTEXcheck\fi}%
-% \@EA\dodoMPTEXcheck\MPascii#1@@\war}
-
-% \long\def\donoMPTEXcheck#1\relax
-% {\global\MPTEXgraphictrue}
-
-% \MPTEXgrapicchecks\emptytoks
-
-% \def\forceMPTEXcheck#1%
-% {\convertargument#1\to\ascii
-% \@EA\appendtoks\@EA\doMPTEXcheck\@EA{\ascii}\to\MPTEXgrapicchecks}
-
-% \forceMPTEXcheck{etex}
-% \forceMPTEXcheck{textext}
-% \forceMPTEXcheck{graphictext}
-
-% \long\def\checkMPTEXgraphic#1%
-% {\ifforceMPTEXgraphic
-% \global\MPTEXgraphictrue
-% \else
-% \global\MPTEXgraphicfalse
-% \expandafter\convertargument#1\to\MPascii
-% \the\MPTEXgrapicchecks\relax % \relax is end condition!
-% \fi}
-
% no, wrong! never!
%
% \def\tightlayer[#1]%
@@ -768,19 +602,6 @@
% \hbox to \hsize{\composedlayer{#1}}%
% \endgroup}
-\let\locatedfilepath\empty
-
-\def\locatefilepath#1%
- {\let\locatedfilepath\empty
- \ifx\allinputpaths\empty \else
- \def\docommand##1%
- {\doiffileelse{\pathplusfile{##1}{#1}}{\donetrue\def\locatedfilepath{##1}}\donefalse
- \ifdone\expandafter\quitcommalist\fi}%
- \doifparentfileelse{#1} % new
- {\processcommacommand [\allinputpaths]\docommand}
- {\processcommacommand[.,\allinputpaths]\docommand}%
- \fi}
-
% todo : share symbols
% \definecolor[rollover:n][red]
@@ -958,7 +779,7 @@
\def\buttonframed{\dodoubleempty\localframed[\??bt]} % goodie
-\unexpanded\def\asciistr#1{\convertargument#1\to\ascii{\verbatimfont\ascii}}
+\unexpanded\def\asciistr#1{\dontleavehmode{\defconvertedargument\ascii{#1}\verbatimfont\ascii}}
% messy, will be improved:
@@ -989,13 +810,15 @@
\let\normaltype\type
-\beginTEX
- \unexpanded\def\retype#1{\bgroup\convertargument#1\to\ascii\@EA\normaltype\@EA{\ascii}\egroup}
-\endTEX
-
-\beginETEX
- \unexpanded\def\retype#1{\scantokens{\normaltype{#1}\ignorespaces}}
-\endETEX
+\ifx\scantextokens\undefined
+ \ifx\scantokens\undefined
+ \unexpanded\def\retype#1{\dontleavehmode{\defconvertedargument\ascii{#1}\@EA\normaltype\@EA{\ascii}}}
+ \else
+ \unexpanded\def\retype#1{\dontleavehmode\scantokens{\normaltype{#1}\ignorespaces}\relax}
+ \fi
+\else
+ \unexpanded\def\retype#1{\dontleavehmode\scantextokens{\normaltype{#1}}}
+\fi
\def\simplifytype{\let\type\retype}
@@ -1737,32 +1560,6 @@
\setinnerparpositions % see "techniek" for application
\to \everytabulate
-%D This alternative is slower, since it works on top of the
-%D color (stack) mechanism, but it does provide nesting.
-
-\def\dosetrastercolor#1%
- {\edef\@@cl@@s{#1}%
- \ifx\@@cl@@s\empty
- \let\@@cl@@s\@@rsscreen
- \fi
- \let\@@cl@@t\@@cl@@z % else we get rogue
- \let\@@cl@@a\@@cl@@z % transpancies
- \setevalue{\??cr\??rs}{\colorSpattern}}
-
-% beware, don't add extra grouping, else color in tables
-% fails
-
-\def\localstartraster[#1]%
- {\ifincolor\dosetrastercolor{#1}\localstartcolor[\??rs]\fi}
-
-\def\startraster[#1]%
- {\ifincolor\dosetrastercolor{#1}\startcolor[\??rs]\fi}
-
-\def\localstopraster{\ifincolor\localstopcolor\fi}
-\def\stopraster {\ifincolor\stopcolor\fi}
-
-\def\raster[#1]{\groupedcommand{\startraster[#1]}{\stopraster}}
-
\def\fontclassname#1#2%
{\ifcsname\??ff#1#2\endcsname
\fontclassname{#1}{\csname\??ff#1#2\endcsname}%
diff --git a/Master/texmf-dist/tex/context/base/cont-sys.ori b/Master/texmf-dist/tex/context/base/cont-sys.ori
index fff231619b5..335a7d98435 100644
--- a/Master/texmf-dist/tex/context/base/cont-sys.ori
+++ b/Master/texmf-dist/tex/context/base/cont-sys.ori
@@ -108,10 +108,11 @@
\loadmapfile[original-ams-euler.map]
\loadmapfile[original-public-lm.map]
- \loadmapfile[texnansi-public-lm.map]
- \loadmapfile[ec-public-lm.map]
- \loadmapfile[qx-public-lm.map]
- \loadmapfile[t5-public-lm.map]
+
+ %loadmapfile[texnansi-public-lm.map]
+ %loadmapfile[ec-public-lm.map]
+ %loadmapfile[qx-public-lm.map]
+ %loadmapfile[t5-public-lm.map]
%loadmapfile[pl0-public-lm.map]
%loadmapfile[il2-public-lm.map]
@@ -120,6 +121,7 @@
% When you have your own fonts installed, you may want to predefine:
%
% \usetypescriptfile[type-buy]
+% \usetypescriptfile [type-gyr]
% Some styles default to Lucida Bright. You can overload
% Lucida by Times cum suis. Watch out, the pos collection
diff --git a/Master/texmf-dist/tex/context/base/cont-usr.ori b/Master/texmf-dist/tex/context/base/cont-usr.ori
index ee0627836c1..7489f8a109c 100644
--- a/Master/texmf-dist/tex/context/base/cont-usr.ori
+++ b/Master/texmf-dist/tex/context/base/cont-usr.ori
@@ -22,6 +22,8 @@
%D want to play safe, use \typ {texexec --make --alone
%D --all}.
+% \preloadallpatterns % will load them all
+
% \installlanguage [\s!af] [\c!state=\v!start] % afrikaans
% \installlanguage [\s!ca] [\c!state=\v!start] % catalan
% \installlanguage [\s!cz] [\c!state=\v!start] % czech
diff --git a/Master/texmf-dist/tex/context/base/context-characters.lmx b/Master/texmf-dist/tex/context/base/context-characters.lmx
new file mode 100644
index 00000000000..b992d30b8a8
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/context-characters.lmx
@@ -0,0 +1,104 @@
+<!--
+ -- filename : comm-deb.xml
+ -- comment : companion to comm-xml.tex
+ -- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+ -- copyright: PRAGMA ADE / ConTeXt Development Team
+ -- license : see context related readme files
+
+-->
+<html>
+ <title><?lua pv('title') ?></title>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+ <style type="text/css">
+ <!--
+ <?lmx-include context.css ?>
+ #type {
+ text-align: center ;
+ }
+ #variable {
+ width: 10em ;
+ text-align: right ;
+ margin-right: 1em ;
+ }
+ #value {
+ text-align: left ;
+ }
+ -->
+ </style>
+ <script language="JavaScript">
+ <!--
+ window.focus();
+ -->
+ </script>
+ <body> <!-- onclick="location.reload()" -->
+ <div id="top"><div id="top-one"><div id="top-two">
+ <?lua pv('title') ?>
+ </div></div></div>
+ <div id="left"><div id="left-one"><div id="left-two">
+ <!-- empty -->
+ </div></div></div>
+ <div id="right"><div id="right-safari"><div id="right-one"><div id="right-two"><div id="right-three"><div id="right-four"><div id="right-five">
+ <!-- empty -->
+ </div></div></div></div></div></div></div>
+ <div id="right"><div id="right-safari"><div id="right-one"><div id="right-two"><div id="right-three"><div id="right-four"><div id="right-five"></div></div></div></div></div></div></div>
+ <div id="main"><div id='main-settings'>
+ <?lmx-define-begin chr-head ?>
+ <tr>
+ <th><div id="value">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div></th>
+ <th colspan='2'><div id="value">characters&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div></th>
+ <th colspan='2'><div id="value">unicodes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div></th>
+ <th colspan='2'><div id="value">indices&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div></th>
+ <th colspan='1'><div id="value">fonts&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div></th>
+ </tr>
+ <tr>
+ <th><div id="value">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div></th>
+ <th><div id="value">before utf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div></th>
+ <th><div id="value">after utf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div></th>
+ <th><div id="value">before hex&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div></th>
+ <th><div id="value">after hex&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div></th>
+ <th><div id="value">after hex&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div></th>
+ <th><div id="value">after dec&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div></th>
+ <th><div id="value">filename&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div></th>
+ </tr>
+ <?lmx-define-end ?>
+ <?lmx-define-begin chr-body ?>
+ <tr>
+ <td valign="top"><div id="value"><?lua t((nodes.tracers.characters.equal(v.before,v.after) and "=") or "!") ?></div></td>
+ <td valign="top"><div id="value"><?lua t(nodes.tracers.characters.string(v.before)) ?>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div></td>
+ <td valign="top"><div id="value"><?lua t(nodes.tracers.characters.string(v.after)) ?>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div></td>
+ <td valign="top"><div id="value"><?lua t(nodes.tracers.characters.unicodes(v.before)) ?>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div></td>
+ <td valign="top"><div id="value"><?lua t(nodes.tracers.characters.unicodes(v.after)) ?>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div></td>
+ <td valign="top"><div id="value"><?lua t(nodes.tracers.characters.indices(v.after)) ?>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div></td>
+ <td valign="top"><div id="value"><?lua t(nodes.tracers.characters.indices(v.after,true)) ?>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div></td>
+ <td valign="top"><div id="value"><?lua t(nodes.tracers.characters.fonts(v.after)) ?>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div></td>
+ </tr>
+ <?lmx-define-end ?>
+ <?lmx-define-begin chr-none ?>
+ <tr>
+ <td><br/></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <?lmx-define-end ?>
+ <?lua if tracers.knownlist('characters') then ?>
+ <h1>Processed Words</h1>
+ <table>
+ <?lmx-resolve chr-head ?>
+ <?lua for k,v in pairs(tracers.list['characters']) do if v.before and v.after then ?>
+ <?lmx-resolve chr-body ?>
+ <?lua else ?>
+ <?lmx-resolve chr-none ?>
+ <?lua end end ?>
+ </table>
+ <br/>
+ <?lua end ?>
+ </div></div>
+ <div id="bottom"><div id="bottom-one"><div id="bottom-two">
+ Job Name: <?lua p(environment.jobname) ?> &nbsp;&nbsp;&nbsp;
+ ConTeXt Version: <?lua p(environment.version) ?> &nbsp;&nbsp;&nbsp;
+ </div></div></div>
+ </body>
+</html>
diff --git a/Master/texmf-dist/tex/context/base/context-debug.lmx b/Master/texmf-dist/tex/context/base/context-debug.lmx
new file mode 100644
index 00000000000..593f3567253
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/context-debug.lmx
@@ -0,0 +1,108 @@
+<!--
+ -- filename : comm-deb.xml
+ -- comment : companion to comm-xml.tex
+ -- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+ -- copyright: PRAGMA ADE / ConTeXt Development Team
+ -- license : see context related readme files
+
+-->
+
+<html>
+ <title><?lua pv('title') ?></title>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+ <style type="text/css">
+ <!--
+ <?lmx-include context.css ?>
+ #type {
+ text-align: center ;
+ }
+ #variable {
+ width: 10em ;
+ text-align: right ;
+ margin-right: 1em ;
+ }
+ #value {
+ text-align: left ;
+ }
+ -->
+ </style>
+ <script language="JavaScript">
+ <!--
+ window.focus();
+ -->
+ </script>
+ <body>
+ <div id="top"><div id="top-one"><div id="top-two">
+ <?lua pv('title') ?>
+ </div></div></div>
+ <div id="left"><div id="left-one"><div id="left-two">
+ <!-- empty -->
+ </div></div></div>
+ <div id="right"><div id="right-safari"><div id="right-one"><div id="right-two"><div id="right-three"><div id="right-four"><div id="right-five">
+ <!-- empty -->
+ </div></div></div></div></div></div></div>
+ <div id="right"><div id="right-safari"><div id="right-one"><div id="right-two"><div id="right-three"><div id="right-four"><div id="right-five"></div></div></div></div></div></div></div>
+ <div id="main"><div id='main-settings'>
+ <?lua if tracers.knownlist('scratch') then ?>
+ <h1>Scratch Variables</h1>
+ <table>
+ <tr>
+ <th align='middle'>index</th>
+ <th align='middle'>&nbsp;&nbsp;&nbsp;dimen</th>
+ <th align='middle'>&nbsp;&nbsp;&nbsp;count</th>
+ <th align='left' >&nbsp;&nbsp;&nbsp;toks</th>
+ </tr>
+ <?lua for k,v in pairs(tracers.list['scratch']) do ?>
+ <tr>
+ <th align='middle'><?lua t(v) ?></th>
+ <th align='middle'>&nbsp;&nbsp;&nbsp;<?lua t(tracers.dimen(v)) ?></th>
+ <th align='middle'>&nbsp;&nbsp;&nbsp;<?lua t(tracers.count(v)) ?></th>
+ <th align='left' >&nbsp;&nbsp;&nbsp;<?lua t(tracers.toks (v)) ?></th>
+ </tr>
+ <?lua end ?>
+ </table>
+ <br/>
+ <?lua end ?>
+ <?lmx-define-begin tvv-head ?>
+ <tr>
+ <th><div id="type" >type </div></th>
+ <th><div id="variable">variable</div></th>
+ <th><div id="value" >value </div></th>
+ </tr>
+ <?lmx-define-end ?>
+ <?lmx-define-begin tvv-body ?>
+ <tr>
+ <th><div id="type" ><?lua t(tracers.type(v)) ?></div></th>
+ <th><div id="variable"><?lua t(tracers.name(v)) ?></div></th>
+ <th><div id="value" ><?lua t(tracers.cs(v)) ?></div></th>
+ </tr>
+ <?lmx-define-end ?>
+ <?lua if tracers.knownlist('internals') then ?>
+ <h1>Internal Variables</h1>
+ <table>
+ <?lmx-resolve tvv-head ?>
+ <?lua for k,v in pairs(tracers.list['internals']) do ?>
+ <?lmx-resolve tvv-body ?>
+ <?lua end ?>
+ </table>
+ <br/>
+ <?lua end ?>
+ <?lua if tracers.knownlist('context') then ?>
+ <h1>ConTeXt Variables</h1>
+ <table>
+ <?lmx-resolve tvv-head ?>
+ <?lua for k,v in pairs(tracers.list['context']) do ?>
+ <?lmx-resolve tvv-body ?>
+ <?lua end ?>
+ </table>
+ <br/>
+ <?lua end ?>
+ </div></div>
+ <div id="bottom"><div id="bottom-one"><div id="bottom-two">
+ Job Name: <?lua p(environment.jobname) ?> &nbsp;&nbsp;&nbsp;
+ ConTeXt Version: <?lua p(environment.version) ?> &nbsp;&nbsp;&nbsp;
+ Real Page: <?lua p(tracers.cs('c:realpageno')) ?> &nbsp;&nbsp;&nbsp;
+ Page: <?lua p(tracers.cs('c:pageno')) ?> &nbsp;&nbsp;&nbsp;
+ </div></div></div>
+ </body>
+</html>
diff --git a/Master/texmf-dist/tex/context/base/context-error.lmx b/Master/texmf-dist/tex/context/base/context-error.lmx
new file mode 100644
index 00000000000..df3ad909032
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/context-error.lmx
@@ -0,0 +1,55 @@
+<!--
+ -- filename : comm-err.xml
+ -- comment : companion to comm-xml.tex
+ -- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+ -- copyright: PRAGMA ADE / ConTeXt Development Team
+ -- license : see context related readme files
+
+-->
+
+<html>
+ <title><?lua pv('title')?></title>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <style type="text/css">
+ <!--
+ <?lmx-include context.css ?>
+ -->
+ </style>
+ <script language="JavaScript">
+ <!--
+ window.focus();
+ parent.close();
+ -->
+ </script>
+ <body>
+ <div id="top"><div id="top-one"><div id="top-two">
+ <?lua pv('title')?>
+ </div></div></div>
+ <div id="left"><div id="left-one"><div id="left-two">
+ <!-- empty -->
+ </div></div></div>
+ <div id="right"><div id="right-safari"><div id="right-one"><div id="right-two"><div id="right-three"><div id="right-four"><div id="right-five">
+ <!-- empty -->
+ <br/>
+ <a href="<?lua pv('filename')?>">edit</a>
+ <br/>
+ </div></div></div></div></div></div></div>
+ <div id="main"><div id="main-settings">
+ <table>
+ <tr><td>Error</td><td>&nbsp;&nbsp;&nbsp;<?lua tv('errormessage')?></td></tr>
+ <tr><td>File </td><td>&nbsp;&nbsp;&nbsp;<?lua tv('filename') ?></td></tr>
+ <tr><td>Line </td><td>&nbsp;&nbsp;&nbsp;<?lua tv('linenumber') ?></td></tr>
+ </table>
+ </br>
+ <pre>
+ <?lua pv('errorcontext')?>
+ </pre>
+ </div></div>
+ <div id="bottom"><div id="bottom-one"><div id="bottom-two">
+ Job Name: <?lua p(environment.jobname) ?> &nbsp;&nbsp;&nbsp;
+ ConTeXt Version: <?lua p(environment.version) ?> &nbsp;&nbsp;&nbsp;
+ Real Page: <?lua p(tracers.cs('c:realpageno')) ?> &nbsp;&nbsp;&nbsp;
+ Page: <?lua p(tracers.cs('c:pageno')) ?> &nbsp;&nbsp;&nbsp;
+ </div></div></div>
+ </body>
+</html>
diff --git a/Master/texmf-dist/tex/context/base/context.css b/Master/texmf-dist/tex/context/base/context.css
new file mode 100644
index 00000000000..ef4a44cea16
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/context.css
@@ -0,0 +1,226 @@
+body {
+ color: #FFFFFF ;
+ background-color: <?lua pv('color-background-body')?> ;
+ font-family: optima, verdana, futura, "lucida sans", arial, geneva, helvetica, sans ;
+ font-size: 12px ;
+ line-height: 18px ;
+}
+a:link, a:active, a:visited {
+ color: #FFFFFF ;
+}
+a.dir-view:link, a.dir-view:active, a.dir-view:visited {
+ color: #FFFFFF ;
+ text-decoration: underline ;
+}
+h1, .title {
+ font-style: normal ;
+ font-weight: normal ;
+ font-size: 18px ;
+ line-height: 18px ;
+ margin-bottom: 20px ;
+}
+h2, .subtitle {
+ font-style: normal ;
+ font-weight: normal ;
+ font-size: 12px ;
+ margin-top: 18px ;
+ margin-bottom: 18px ;
+}
+table {
+ line-height: 18px ;
+ font-size: 12px ;
+ margin: 0 ;
+}
+p, li {
+ max-width: 60em ;
+}
+.empty-line {
+ margin-top: 4px ;
+}
+.more-room {
+ margin-right: 1.5em ;
+}
+.much-more-room {
+ margin-right: 3em ;
+}
+#main {
+ position: absolute;
+ left: 10% ;
+ top: 10% ;
+ right: 10% ;
+ bottom: 10% ;
+ z-index: 2 ;
+ width: 80% ;
+ height: 80% ;
+ padding: 0% ;
+ margin: 0% ;
+ overflow: auto ;
+ border-style: none ;
+ border-width: 0 ;
+ background-color: <?lua pv('color-background-main')?> ;
+}
+#main-settings {
+ margin: 12px ;
+ x_max-width: 60em ;
+ line-height: 18px ;
+ font-size: 12px ;
+}
+#left {
+ position: absolute;
+ top : 10% ;
+ left: 0% ;
+ bottom: 0%;
+ right: 90% ;
+ z-index: 1 ;
+ width: 10% ;
+ height: 90% ;
+ padding: 0% ;
+ margin: 0% ;
+ font-size: 16px ;
+ border-style: none ;
+ border-width: 0 ;
+ background-color: <?lua pv('color-background-one')?> ;
+}
+#right {
+ position: absolute;
+ top : 0% ;
+ left: 90% ;
+ bottom: 10% ;
+ right: 0% ;
+ z-index: 1 ;
+ width: 10% ;
+ height: 90% ;
+ padding: 0% ;
+ margin: 0% ;
+ font-size: 16px ;
+ border-style: none ;
+ border-width: 0 ;
+ background-color: <?lua pv('color-background-one')?> ;
+ _margin-left: -15px ;
+}
+#bottom {
+ position: absolute ;
+ left: 10% ;
+ right: 0% ;
+ top: 90% ;
+ bottom: 0% ;
+ z-index: 1 ;
+ width: 90% ;
+ height: 10% ;
+ padding: 0% ;
+ margin: 0% ;
+ font-size: 16px ;
+ border-style: none ;
+ border-width: 0 ;
+ background-color: <?lua pv('color-background-two')?> ;
+}
+#top {
+ position: absolute ;
+ left: 0% ;
+ right: 10% ;
+ top: 0% ;
+ bottom: 90% ;
+ z-index: 1 ;
+ width: 90% ;
+ height: 10% ;
+ padding: 0% ;
+ margin: 0% ;
+ font-size: 16px ;
+ border-style: none ;
+ border-width: 0 ;
+ background-color: <?lua pv('color-background-two')?> ;
+}
+#top-one {
+ position: absolute ;
+ bottom: 50% ;
+ width: 100% ;
+ buggedheight: 100% ;
+}
+#top-two {
+ position: relative ;
+ margin-bottom: -9px ;
+ margin-left: 12px ;
+ margin-right: 12px ;
+ line-height: 18px ;
+ text-align: right ;
+ vertical-align: middle ;
+}
+#bottom-one {
+ position: absolute ;
+ bottom: 50% ;
+ width: 100% ;
+ buggedheight: 100% ;
+}
+#bottom-two {
+ position: relative ;
+ margin-bottom: -9px ;
+ margin-left: 12px ;
+ margin-right: 12px ;
+ line-height: 18px ;
+ text-align: left ;
+ vertical-align: middle ;
+}
+#left-one {
+ position: absolute ;
+ width: 100% ;
+ buggedheight: 100% ;
+}
+#left-two {
+ position: relative ;
+ margin-top: 12px ;
+ line-height: 18px ;
+ text-align: center ;
+ vertical-align: top ;
+}
+#right-one {
+ display: table ;
+ height: 100% ;
+ width: 100% ;
+}
+#right-two {
+ display: table-row ;
+ height: 100% ;
+ width: 100% ;
+}
+#right-three {
+ display: table-cell ;
+ width: 100% ;
+ vertical-align: bottom ;
+ _position: absolute ;
+ _top: 100% ;
+}
+#right-four {
+ text-align: center ;
+ margin-bottom: 2ex ;
+ _position: relative ;
+ _top: -100% ;
+}
+#more-top {
+ position: absolute;
+ top: 0% ;
+ left: 90% ;
+ bottom: 90%;
+ right: 0% ;
+ z-index: 3 ;
+ width: 10% ;
+ height: 10% ;
+ padding: 0% ;
+ margin: 0% ;
+ border-style: none ;
+ border-width: 0 ;
+}
+#more-top-settings {
+ text-align: center ;
+}
+#more-right-settings {
+ margin-right: 12px ;
+ margin-left: 12px ;
+ line-height: 18px ;
+ font-size: 10px ;
+ text-align: center ;
+}
+#right-safari {
+ display: table ;
+ width: 100% ;
+ height: 100% ;
+}
diff --git a/Master/texmf-dist/tex/context/base/context.tex b/Master/texmf-dist/tex/context/base/context.tex
index 00a2cb83df0..e6959c9b4e5 100644
--- a/Master/texmf-dist/tex/context/base/context.tex
+++ b/Master/texmf-dist/tex/context/base/context.tex
@@ -42,7 +42,7 @@
%D your styles an modules.
\edef\contextformat {\jobname}
-\edef\contextversion{2007.01.12 15:56}
+\edef\contextversion{2008.05.21 15:21}
%D For those who want to use this:
@@ -194,7 +194,7 @@
\loadcorefile{mult-com.tex}
\loadmkivfile{luat-ini.tex}
-% \loadmkivfile{luat-lib.tex}
+%loadmkivfile{luat-lib.tex}
\loadmkivfile{luat-lmx.tex}
\loadmkivfile{luat-uni.tex}
@@ -203,6 +203,11 @@
\loadmkivfile{char-def.tex}
\loadmkivfile{char-utf.tex}
+\loadmkivfile{toks-ini.tex}
+
+\loadmkivfile{attr-ini.tex}
+\loadmkivfile{node-ini.tex}
+
%D We also use some third party macros. These are loaded by
%D saying:
@@ -219,11 +224,12 @@
\loadcorefile{supp-mrk.tex}
\loadcorefile{supp-vis.tex}
\loadcorefile{supp-fun.tex}
-\loadcorefile{supp-eps.tex}
+%loadcorefile{supp-eps.tex}
\loadcorefile{supp-spe.tex}
\loadcorefile{supp-ran.tex}
-\loadcorefile{supp-mps.tex}
-\loadcorefile{supp-tpi.tex}
+%loadcorefile{supp-mps.tex}
+\loadmkiifile{supp-mps.tex}
+\loadmkiifile{supp-tpi.tex}
\loadcorefile{supp-mat.tex}
\loadcorefile{supp-ali.tex}
\loadcorefile{supp-num.tex}
@@ -279,7 +285,8 @@
\loadcorefile{lang-ini.tex}
\loadcorefile{lang-ctx.tex}
\loadcorefile{lang-dis.tex}
-\loadcorefile{unic-ini.tex}
+
+\loadmarkfile{unic-ini}
% \readfile{lang-url.pat}{}{} % test
@@ -294,13 +301,14 @@
\loadcorefile{spec-def.tex}
\loadcorefile{spec-var.tex}
-\loadcorefile{colo-ini.tex}
+\doiffileelse{colo-new.tex}{\loadcorefile{colo-new.tex}}{\loadcorefile{colo-ini.tex}}
\loadcorefile{colo-ext.tex}
%D For the moment we load a lot of languages. In the future
%D we'll have to be more space conservative.
\loadcorefile{lang-mis.tex}
+\loadcorefile{lang-url.tex}
\loadcorefile{lang-spe.tex}
\loadcorefile{lang-lab.tex}
@@ -367,7 +375,8 @@
\loadcorefile{page-lyr.tex}
\loadcorefile{page-mak.tex}
\loadcorefile{page-num.tex}
-\loadcorefile{page-lin.tex}
+\loadmarkfile{page-lin}
+\loadcorefile{page-par.tex}
\loadcorefile{page-mar.tex}
\loadcorefile{core-job.tex} % why so late?
@@ -375,6 +384,7 @@
% so far
\loadcorefile{core-sec.tex}
+\loadcorefile{core-swd.tex}
\loadcorefile{core-buf.tex}
\loadcorefile{core-blk.tex}
\loadcorefile{page-imp.tex}
@@ -404,7 +414,7 @@
%D content. Here we also redefine \type{\it} as {\it italic}
%D instead of italian.
-\loadmkivfile{font-set.tex}
+% \loadmkivfile{font-set.tex} -- experimental but now obsolete
\loadcorefile{font-ini.tex}
\loadcorefile{font-uni.tex}
@@ -426,10 +436,15 @@
%D Like languages, fonts, encodings and symbols, \METAPOST\
%D support is also organized in its own class of modules.
-\loadcorefile{meta-ini.tex}
+\loadmkivfile{mlib-ctx.tex}
+\loadmkivfile{mlib-pdf.tex}
+\loadmkivfile{mlib-pps.tex}
+
+\loadmarkfile{meta-ini}
+\loadmarkfile{meta-tex}
+
\loadcorefile{meta-pdf.tex}
\loadcorefile{meta-pag.tex}
-\loadcorefile{meta-tex.tex}
%D Special page handling (maybe even later)
@@ -460,12 +475,13 @@
\loadcorefile{core-mis.tex}
\loadcorefile{core-trf.tex}
+\loadcorefile{core-inc.tex}
\loadcorefile{core-fig.tex}
\loadcorefile{core-par.tex}
\loadcorefile{core-box.tex}
\loadcorefile{page-app.tex}
-\loadcorefile{meta-fig.tex}
+\loadmarkfile{meta-fig}
%D Language specific spacing.
@@ -475,6 +491,8 @@
%D These macros are loaded last since they overload and|/|or
%D extend previously defined ones.
+\loadmkivfile{lxml-ini.tex}
+
\loadcorefile{xtag-ini.tex}
\loadcorefile{xtag-ext.tex}
\loadcorefile{xtag-prs.tex}
@@ -523,6 +541,8 @@
%D Just to keep the user busy for a while, we say:
+\iffalse
+
\startinterface english
\writebanner{This package is based on Plain TeX. It uses an adapted version of the}
@@ -616,6 +636,17 @@
\writeline\writebanner{\copyrightversion}\writeline
+\fi
+
+\unprotect
+\beginLUATEX
+ \appendtoks
+ \writestatus\m!lua{used config path - \ctxlua{tex.print(caches.configpath(texmf.instance))}}%
+ \writestatus\m!lua{used cache path - \ctxlua{tex.print(caches.path)}}%
+ \to \everydump
+\endLUATEX
+\protect
+
% %D Except from english, no hyphenation patterns are loaded
% %D yet. Users can specify their needs in the next module:
%
diff --git a/Master/texmf-dist/tex/context/base/core-bar.tex b/Master/texmf-dist/tex/context/base/core-bar.tex
index eeb3de630a1..9b7acf17f34 100644
--- a/Master/texmf-dist/tex/context/base/core-bar.tex
+++ b/Master/texmf-dist/tex/context/base/core-bar.tex
@@ -53,8 +53,8 @@
%D \stopsidebar
%D \stoptyping
-\newcounter\currentsidebar
-\newdimen \sidebardistance
+\newcount\currentsidebar
+\newdimen\sidebardistance
\def\setupsidebars
{\dodoubleargument\dosetupsidebars}
@@ -94,7 +94,7 @@
{\bgroup
\dontleavehmode
\checktextbackgrounds
- \doglobal\increment\currentsidebar
+ \global\advance\currentsidebar\plusone
\doifelsenothing{#1}
{\advance\sidebardistance\@@brdistance}
{\doifelsevaluenothing{\??br#1\c!distance}
@@ -102,22 +102,21 @@
{\sidebardistance\getvalue{\??br#1\c!distance}}}%
\startpositionoverlay{text-1}%
\expanded{\setMPpositiongraphicrange
- {b:side:\currentsidebar}%
- {e:side:\currentsidebar}%
+ {b:side:\the\currentsidebar}%
+ {e:side:\the\currentsidebar}%
{mpos:bar}%
- {self=side:\currentsidebar,
+ {self=side:\the\currentsidebar,
linewidth=\getvalue{\??br#1\c!rulethickness},
linecolor=\getvalue{\??br#1\c!rulecolor},
distance=\the\sidebardistance}}%
\stoppositionoverlay
-% \edef\stopsidebar{\noexpand\dostopsidebar{\currentsidebar}}%
- \bpos{side:\currentsidebar}\ignorespaces}
+ \bpos{side:\the\currentsidebar}\ignorespaces}
% \def\dostopsidebar#1%
% {\removelastspace\tpos{side:#1}\carryoverpar\egroup}
\def\stopsidebar
- {\removelastspace\tpos{side:\currentsidebar}\carryoverpar\egroup}
+ {\removelastspace\tpos{side:\the\currentsidebar}\carryoverpar\egroup}
\startMPpositionmethod{mpos:bar}
\startMPpositiongraphic{mpos:bar}{linecolor,linewidth,distance}%
diff --git a/Master/texmf-dist/tex/context/base/core-blk.tex b/Master/texmf-dist/tex/context/base/core-blk.tex
index a6e391e6e6a..8de1099e6e8 100644
--- a/Master/texmf-dist/tex/context/base/core-blk.tex
+++ b/Master/texmf-dist/tex/context/base/core-blk.tex
@@ -289,7 +289,7 @@
{\immediate\write\outblocks}
\long\def\processnextblocklineAB#1% #2#3%
- {\convertargument#1 \to\next
+ {\defconvertedargument\next{#1 }%
\doifinstringelse\endofblockA\next
\firstoftwoarguments
{\doifinstringelse\endofblockB\next
@@ -304,7 +304,7 @@
\egroup
\long\def\processnextblockline#1% #2#3%
- {\convertargument#1 \to\next
+ {\defconvertedargument\next{#1 }%
\ifx\next\emptybufferline
\expandafter\secondoftwoarguments% #3%
\else
@@ -324,8 +324,7 @@
\def\skipblock#1%
{\checkcopyingblocks
- \@EA\convertargument\string\thiswasblock{#1}\to\endofblock
- %testen : \expanded{\convertargument\string\thiswasblock{#1}\noexpand\to\noexpand\endofblock}%
+ \defconvertedcommand\endofblock{\string\thiswasblock{#1}}% command expands once !
\let\openblock\begingroup
\let\closeblock\endgroup
\openblock
@@ -344,9 +343,8 @@
\def\saveblock#1#2%
{\checkcopyingblocks
\obeylines
- \@EA\@EA\@EA\convertargument\@EA\string\csname\e!end#1\endcsname\to\endofblockA
- %testen: \expanded{\convertargument\string\csname\e!end#1\endcsname\to\endofblockA}%
- \@EA\convertargument\string\endblock[#1]\to\endofblockB % MULTI LINGUAL MAKEN
+ \@EA\defconvertedcommand\@EA\endofblockA\@EA{\@EA\string\csname\e!end#1\endcsname}%
+ \defconvertedcommand\endofblockB{\string\endblock[#1]}% % MULTI LINGUAL MAKEN
\def\openblock
{\dobeforeblock{#1}{#2}%
\opentmpblock
@@ -670,8 +668,8 @@
{\egroup\setblocklevel-}%
\checkcopyingblocks
\obeylines
- \@EA\@EA\@EA\convertargument\@EA\string\csname\e!end#1\endcsname\to\endofblockA
- \@EA\convertargument\string\endblock[#1]\to\endofblockB % MULTI LINGUAL MAKEN
+ \@EA\defconvertedcommand\@EA\endofblockA\@EA{\@EA\string\csname\e!end#1\endcsname}%
+ \defconvertedcommand\endofblockB{\string\endblock[#1]} % MULTI LINGUAL MAKEN
\setupcopyblock
\skipblocklineAB}
diff --git a/Master/texmf-dist/tex/context/base/core-box.tex b/Master/texmf-dist/tex/context/base/core-box.tex
index 16a8941512b..dd84fbc1abf 100644
--- a/Master/texmf-dist/tex/context/base/core-box.tex
+++ b/Master/texmf-dist/tex/context/base/core-box.tex
@@ -430,7 +430,7 @@
% pas op: aanpassen aan nieuwe layer hoek ankers en columnset
-\newcounter\nofbleeds % per pag
+\newcount\nofbleeds % per pag
\def\setupbleeding
{\dodoubleempty\getparameters[\??bg]}
@@ -456,7 +456,7 @@
{\hbox\bgroup
\xdef\bleedwidth {\the\hsize}%
\xdef\bleedheight{\the\vsize}%
- \doglobal\increment\nofbleeds
+ \global\advance\nofbleeds\plusone
\getparameters[\??bg][#1]%
\!!doneafalse % left
\!!donebfalse % right
@@ -481,10 +481,10 @@
\scratchdimen\@@bgwidth
\ifdone
\if!!donea
- \advance\scratchdimen\MPx{\??bg:\nofbleeds}%
+ \advance\scratchdimen\MPx{\??bg:\number\nofbleeds}%
\else\if!!doneb
\scratchdimen\paperwidth
- \advance\scratchdimen-\MPx{\??bg:\nofbleeds}%
+ \advance\scratchdimen-\MPx{\??bg:\number\nofbleeds}%
\fi\fi
\fi
\advance\scratchdimen\@@bghoffset
@@ -493,9 +493,9 @@
\ifdone
\if!!donec
\scratchdimen\paperheight
- \advance\scratchdimen-\MPy{\??bg:\nofbleeds}%
+ \advance\scratchdimen-\MPy{\??bg:\number\nofbleeds}%
\else\if!!doned
- \advance\scratchdimen\MPy{\??bg:\nofbleeds}%
+ \advance\scratchdimen\MPy{\??bg:\number\nofbleeds}%
\fi\fi
\fi
\advance\scratchdimen\@@bgvoffset
@@ -515,7 +515,7 @@
\ht\scratchbox\@@bgheight
\dp\scratchbox\zeropoint
\ifdone
- \hpos{\??bg:\nofbleeds}{\box\scratchbox}%
+ \hpos{\??bg:\number\nofbleeds}{\box\scratchbox}%
\else
\box\scratchbox
\fi
@@ -646,21 +646,21 @@
[\v!middle]
[\c!corner=\v!middle,\c!location=\v!middle]
-\definelayerpreset
- [\v!middle\v!top]
- [\c!location=\v!bottom,\c!hoffset=.5\layerwidth]
+% \definelayerpreset
+% [\v!middle\v!top]
+% [\c!location=\v!bottom,\c!hoffset=.5\layerwidth]
-\definelayerpreset
- [\v!middle\v!bottom]
- [\c!location=\v!top,\c!hoffset=.5\layerwidth,\c!voffset=\layerheight]
+% \definelayerpreset
+% [\v!middle\v!bottom]
+% [\c!location=\v!top,\c!hoffset=.5\layerwidth,\c!voffset=\layerheight]
-\definelayerpreset
- [\v!middle\v!left]
- [\c!location=\v!right,\c!voffset=.5\layerwidth]
+% \definelayerpreset
+% [\v!middle\v!left]
+% [\c!location=\v!right,\c!voffset=.5\layerheight]
-\definelayerpreset
- [\v!middle\v!right]
- [\c!location=\v!left,\c!hoffset=\layerwidth,\c!voffset=.5\layerheight]
+% \definelayerpreset
+% [\v!middle\v!right]
+% [\c!location=\v!left,\c!hoffset=\layerwidth,\c!voffset=.5\layerheight]
\definelayerpreset
[\v!middle\v!top]
@@ -672,7 +672,7 @@
\definelayerpreset
[\v!middle\v!left]
- [\c!location=\v!right,\c!corner=\v!left,\c!dy=.5\layerwidth]
+ [\c!location=\v!right,\c!corner=\v!left,\c!dy=.5\layerheight]
\definelayerpreset
[\v!middle\v!right]
@@ -748,9 +748,9 @@
\setvalue{\??ab\??ab gr}{\baselinerightbox}
\setvalue{\??ab\??ab \v!line }{\baselinemiddlebox} % \v!grid is taken
-\setvalue{\??ab\??ab \v!line\v!left }{\baselineleftbox}
+\setvalue{\??ab\??ab \v!line\v!left }{\baselineleftbox}
\setvalue{\??ab\??ab \v!line\v!middle}{\baselinemiddlebox}
-\setvalue{\??ab\??ab \v!line\v!right}{\baselinerightbox}
+\setvalue{\??ab\??ab \v!line\v!right }{\baselinerightbox}
\def\offsetbox
{\dodoubleempty\dooffsetbox[]}
diff --git a/Master/texmf-dist/tex/context/base/core-buf.lua b/Master/texmf-dist/tex/context/base/core-buf.lua
new file mode 100644
index 00000000000..7c0164cf555
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/core-buf.lua
@@ -0,0 +1,471 @@
+-- filename : core-buf.lua
+-- comment : companion to core-buf.tex
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+-- ctx lua reference model / hooks and such
+-- to be optimized
+
+-- redefine buffers.get
+
+if not versions then versions = { } end versions['core-buf'] = 1.001
+
+if unicode and not utf then utf = unicode.utf8 end
+
+buffers = { }
+buffers.data = { }
+buffers.hooks = { }
+buffers.flags = { }
+buffers.commands = { }
+
+-- if needed we can make 'm local
+
+local concat, texsprint, texprint = table.concat, tex.sprint, tex.print
+
+function buffers.erase(name)
+ buffers.data[name] = nil
+end
+
+function buffers.set(name, str)
+ buffers.data[name] = { str } -- CHECK THIS
+end
+
+function buffers.append(name, str)
+ buffers.data[name] = (buffers.data[name] or "") .. str
+end
+
+buffers.flags.store_as_table = true
+
+-- to be sorted out: crlf + \ ; slow now
+
+function buffers.grab(name,begintag,endtag,data)
+ if not buffers.data[name] or buffers.data[name] == "" then
+ buffers.data[name] = ""
+ buffers.level = 0
+ end
+ buffers.level = buffers.level + data:count("\\"..begintag) - data:count("\\"..endtag)
+ local more = buffers.level>0
+ if more then
+ buffers.data[name] = buffers.data[name] .. data .. endtag
+ buffers.level = buffers.level - 1
+ else
+ if buffers.data[name] == "" then
+ buffers.data[name] = data:sub(1,#data-1)
+ else
+ buffers.data[name] = buffers.data[name] .. "\n" .. data:sub(1,#data-1)
+ end
+ buffers.data[name] = buffers.data[name]:gsub("[\010\013]$","")
+ if buffers.flags.store_as_table then
+ buffers.data[name] = buffers.data[name]:splitlines()
+ end
+ end
+ cs.testcase(more)
+end
+
+function buffers.exists(name)
+ return buffers.data[name] ~= nil
+end
+
+function buffers.doifelsebuffer(name)
+ cs.testcase(buffers.data[name] ~= nil)
+end
+
+buffers.flags.optimize_verbatim = true
+buffers.flags.count_empty_lines = false
+
+buffers.commands.no_break = "\\doverbatimnobreak"
+buffers.commands.do_break = "\\doverbatimgoodbreak"
+buffers.commands.begin_of_line_command = "\\doverbatimbeginofline"
+buffers.commands.end_of_line_command = "\\doverbatimendofline"
+buffers.commands.empty_line_command = "\\doverbatimemptyline"
+
+function buffers.verbatimbreak(n,m)
+ if buffers.flags.optimize_verbatim then
+ if n == 2 or n == m then
+ texsprint(buffers.commands.no_break)
+ else
+ texsprint(buffers.commands.do_break)
+ end
+ end
+end
+
+function buffers.strip(lines)
+ local first, last = 1, #lines
+ for i=first,last do
+ if #lines[i] == 0 then
+ first = first + 1
+ else
+ break
+ end
+ end
+ for i=last,first,-1 do
+ if #lines[i] == 0 then
+ last = last - 1
+ else
+ break
+ end
+ end
+ return first, last, last - first + 1
+end
+
+function buffers.type(name)
+ local lines = buffers.data[name]
+ local action = buffers.typeline
+ if lines then
+ if type(lines) == "string" then
+ lines = lines:splitlines()
+ end
+ local line, n = 0, 0
+ local first, last, m = buffers.strip(lines)
+ for i=first,last do
+ n, line = action(lines[i], n, m, line)
+ end
+ end
+end
+
+--~ function buffers.typefile(name)
+--~ local t = input.openfile(name)
+--~ local action = buffers.typeline
+--~ if t then
+--~ local line, n, m = 0, 0, t.noflines
+--~ while true do
+--~ str = t.reader(t)
+--~ if str then
+--~ n, line = action(str, n, m, line)
+--~ else
+--~ break
+--~ end
+--~ end
+--~ t.close()
+--~ end
+--~ end
+
+function buffers.typefile(name)
+ local t = input.openfile(name)
+ local action = buffers.typeline
+ if t then
+ local lines = { }
+ while true do
+ local str = t.reader()
+ if str then
+ lines[#lines+1] = str
+ else
+ break
+ end
+ end
+ t.close()
+ local line, n = 0, 0
+ local first, last, m = buffers.strip(lines)
+ for i=first,last do
+ n, line = action(lines[i], n, m, line)
+ end
+ end
+end
+
+function buffers.typeline(str,n,m,line)
+ n = n + 1
+ buffers.verbatimbreak(n,m)
+ if str:find("%S") then
+ line = line + 1
+ buffers.hooks.begin_of_line(line)
+ buffers.hooks.flush_line(buffers.hooks.line(str))
+ buffers.hooks.end_of_line()
+ else
+ if buffers.flags.count_empty_lines then
+ line = line + 1
+ end
+ buffers.hooks.empty_line(line)
+ end
+ return n, line
+end
+
+function buffers.save(name)
+ if not name or name == "" then
+ name = tex.jobname
+ end
+ local b, f = buffers.data[name], tex.jobname .. "-" .. name .. ".tmp"
+ b = (b and type(b) == "table" and table.join(b,"\n")) or b or ""
+ io.savedata(f,b)
+end
+
+-- todo, use more locals
+
+function buffers.get(name)
+ local b = buffers.data[name]
+ if b then
+ if type(b) == "table" then
+ for i=1,#b do
+ texprint(b[i])
+ end
+ else
+ string.piecewise(b, " *[\010\013]", texprint) -- hm, can be faster
+ end
+ end
+end
+
+function buffers.content(name) -- no print
+ local b = buffers.data[name]
+ if b then
+ if type(b) == "table" then
+ return concat(b," ")
+ else
+ return b
+ end
+ else
+ return ""
+ end
+end
+
+function buffers.collect(names,separator) -- no print
+ local t = { }
+ if type(names) == "table" then
+ for i=1,#names do
+ local c = buffers.content(names[i])
+ if c ~= "" then
+ t[#t+1] = c
+ end
+ end
+ else
+ for name in names:gmatch("[^,]+") do
+ local c = buffers.content(name)
+ if c ~= "" then
+ t[#t+1] = c
+ end
+ end
+ end
+ return concat(t,separator or " ") -- maybe this will change to "\n"
+end
+
+function buffers.inspect(name)
+ local b = buffers.data[name]
+ if b then
+ if type(b) == "table" then
+ for _,v in ipairs(b) do
+ if v == "" then
+ texsprint(tex.ctxcatcodes,"[crlf]\\par ")
+ else
+ texsprint(tex.ctxcatcodes,(b:gsub("(.)",function(c)
+ return " [" .. string.byte(c) .. "] "
+ end)) .. "\\par")
+ end
+ end
+ else
+ texsprint(tex.ctxcatcodes,(b:gsub("(.)",function(c)
+ return " [" .. string.byte(c) .. "] "
+ end)))
+ end
+ end
+end
+
+-- maybe just line(n,str) empty(n,str)
+
+buffers.visualizers = { }
+buffers.visualizers.default = { }
+buffers.visualizers.tex = { }
+buffers.visualizers.mp = { }
+
+buffers.visualizers.escapetoken = nil
+buffers.visualizers.tablength = 7
+
+buffers.visualizers.enabletab = false
+buffers.visualizers.enableescape = false
+
+function buffers.visualizers.reset()
+ buffers.visualizers.enabletab = false
+ buffers.visualizers.enableescape = false
+ buffers.currentvisualizer = 'default'
+end
+
+buffers.currentvisualizer = 'default'
+
+function buffers.setvisualizer(str)
+ buffers.currentvisualizer = string.lower(str)
+ if not buffers.visualizers[buffers.currentvisualizer] then
+ buffers.currentvisualizer = 'default'
+ end
+end
+
+function buffers.doifelsevisualizer(str)
+ cs.testcase((str ~= "") and (buffers.visualizers[string.lower(str)] ~= nil))
+end
+
+-- calling routines, don't change
+
+function buffers.hooks.flush_line(str,nesting)
+ if buffers.visualizers[buffers.currentvisualizer].flush_line then
+ buffers.visualizers[buffers.currentvisualizer].flush_line(str,nesting)
+--~ elseif nesting then
+--~ buffers.visualizers.flush_nested(str,false) -- no real nesting
+ else
+ buffers.visualizers.default.flush_line(str,nesting)
+ end
+end
+
+function buffers.hooks.begin_of_line(n)
+ if buffers.visualizers[buffers.currentvisualizer].begin_of_line then
+ buffers.visualizers[buffers.currentvisualizer].begin_of_line(n)
+ else
+ buffers.visualizers.default.begin_of_line(n)
+ end
+end
+
+function buffers.hooks.end_of_line()
+ if buffers.visualizers[buffers.currentvisualizer].end_of_line then
+ buffers.visualizers[buffers.currentvisualizer].end_of_line()
+ else
+ buffers.visualizers.default.end_of_line(str)
+ end
+end
+
+function buffers.hooks.empty_line()
+ if buffers.visualizers[buffers.currentvisualizer].empty_line then
+ buffers.visualizers[buffers.currentvisualizer].empty_line()
+ else
+ buffers.visualizers.default.empty_line()
+ end
+end
+
+function buffers.hooks.line(str)
+ if buffers.visualizers[buffers.currentvisualizer].line then
+ return buffers.visualizers[buffers.currentvisualizer].line(str)
+ else
+ return buffers.visualizers.default.line(str)
+ end
+end
+
+-- defaults
+
+function buffers.visualizers.default.flush_line(str)
+ texsprint(tex.ctxcatcodes,buffers.escaped(str))
+end
+
+function buffers.visualizers.default.begin_of_line(n)
+ texsprint(tex.ctxcatcodes, buffers.commands.begin_of_line_command .. "{" .. n .. "}")
+end
+
+function buffers.visualizers.default.end_of_line()
+ texsprint(tex.ctxcatcodes,buffers.commands.end_of_line_command)
+end
+
+function buffers.visualizers.default.empty_line()
+ texsprint(tex.ctxcatcodes,buffers.commands.empty_line_command)
+end
+
+function buffers.visualizers.default.line(str)
+ return str
+end
+
+-- special one
+
+buffers.commands.nested = "\\switchslantedtype "
+
+-- todo : utf + faster
+
+function buffers.visualizers.flush_nested(str, enable) -- no utf, kind of obsolete mess
+ local result, c, nested, i = "", "", 0, 1
+ local sb, ss, sf = string.byte, string.sub, string.find
+ while i < #str do -- slow
+ c = ss(str,i,i+1)
+ if c == "<<" then
+ nested = nested + 1
+ if enable then
+ result = result .. "{" .. buffers.commands.nested
+ else
+ result = result .. "{"
+ end
+ i = i + 2
+ elseif c == ">>" then
+ if nested > 0 then
+ nested = nested - 1
+ result = result .. "}"
+ end
+ i = i + 2
+ else
+ c = ss(str,i,i)
+ if c == " " then
+ result = result .. "\\obs "
+ elseif sf(c,"%a") then
+ result = result .. c
+ else
+ result = result .. "\\char" .. sb(c) .. " "
+ end
+ i = i + 1
+ end
+ end
+ result = result .. "\\char" .. sb(ss(str,i,i)) .. " " .. string.rep("}",nested)
+ texsprint(tex.ctxcatcodes,result)
+end
+
+-- handy helpers
+--
+-- \sop[color] switch_of_pretty
+-- \bop[color] begin_of_pretty
+-- \eop end_of_pretty
+-- \obs obeyedspace
+-- \char <n> special characters
+
+buffers.currentcolors = { }
+
+function buffers.change_state(n, state, result)
+ if n then
+ if state ~= n then
+ if state > 0 then
+ result[#result+1] = "\\sop[" .. buffers.currentcolors[n] .. "]"
+ else
+ result[#result+1] = "\\bop[" .. buffers.currentcolors[n] .. "]"
+ end
+ return n
+ end
+ elseif state > 0 then
+ result[#result+1] = "\\eop "
+ return 0
+ end
+ return state
+end
+
+function buffers.finish_state(state, result)
+ if state > 0 then
+ result[#result+1] = "\\eop "
+ return 0
+ else
+ return state
+ end
+end
+
+buffers.open_nested = string.rep("\\char"..string.byte('<').." ",2)
+buffers.close_nested = string.rep("\\char"..string.byte('>').." ",2)
+
+function buffers.replace_nested(result)
+ return (string.gsub(result:gsub(buffers.open_nested,"{"),buffers.close_nested,"}"))
+end
+
+function buffers.flush_result(result,nested)
+ if nested then
+ texsprint(tex.ctxcatcodes,buffers.replace_nested(concat(result,"")))
+ else
+ texsprint(tex.ctxcatcodes,concat(result,""))
+ end
+end
+
+function buffers.escaped(str)
+ local sb, sf = utf.byte, utf.find
+ return (utf.gsub(str,"(.)", function(c)
+ if sf(c,"^(%a%d)$") then
+ return c
+ elseif c == " " then
+ return "\\obs "
+ else
+ return "\\char" .. sb(c) .. " "
+ end
+ end))
+end
+
+function buffers.escaped_chr(ch)
+ local b = utf.byte(ch)
+ if b == 32 then
+ return "\\obs "
+ else
+ return "\\char" .. b .. " "
+ end
+end
diff --git a/Master/texmf-dist/tex/context/base/core-buf.mkii b/Master/texmf-dist/tex/context/base/core-buf.mkii
index 9a803764cfd..8745155a139 100644
--- a/Master/texmf-dist/tex/context/base/core-buf.mkii
+++ b/Master/texmf-dist/tex/context/base/core-buf.mkii
@@ -19,23 +19,23 @@
\long\def\mksetbuffer#1%
{\edef\bufferfilename{\TEXbufferfile{\currentbuffer}}%
\immediate\openout\tmpblocks\bufferfilename
- \convertargument#1\to\ascii
+ \defconvertedargument\ascii{#1}%
\immediate\write\tmpblocks{\ascii}%
\immediate\closeout\tmpblocks}
\def\mkstartbuffer#1#2#3#4#5% ook grabben a la mkiv / no, we need to add par anchors
{\doifelsenothing{#4}
{\letbeundefined{\e!stop\v!buffer}% % \let\stopbuffer=\relax % \undefined
- \@EA\@EA\@EA\convertargument\@EA\e!start\v!buffer\to\beginofblock % else a space
- \@EA\@EA\@EA\convertargument\@EA\e!stop \v!buffer\to\endofblock
+ \edefconvertedargument\beginofblock{\e!start\v!buffer}%
+ \edefconvertedargument\endofblock {\e!stop \v!buffer}%
\ifcase\buffernestmode
\let\processnextbufferline\processnextbufferlineB
\else
\let\processnextbufferline\processnextbufferlineA
\fi}
{\letbeundefined{#4}% \letvalue{#4}=\relax % \undefined
- \@EA\convertargument\csname#3\endcsname\to\beginofblock
- \@EA\convertargument\csname#4\endcsname\to\endofblock
+ \@EA\defconvertedargument\@EA\beginofblock\@EA{\csname#3\endcsname}% we could use defconvertedcommand here (no \@EA)
+ \@EA\defconvertedargument\@EA\endofblock \@EA{\csname#4\endcsname}% we could use defconvertedcommand here (no \@EA)
\ifcase\buffernestmode
\let\processnextbufferline\processnextbufferlineB
\or
@@ -73,7 +73,8 @@
% support macros
-\expandafter \convertargument \gobbleoneargument @ \to \emptybufferline
+% \expandafter \convertargument \gobbleoneargument @ \to \emptybufferline
+\edefconvertedargument\emptybufferline{ }
\ifx\tmpblocks\undefined \newwrite\tmpblocks \fi
@@ -99,7 +100,7 @@
\long\def\processnextbufferlineA#1%
{\relax % checken waarom eerdere macro dit nodig heeft / supp-mps run
- \convertargument#1 \to\next
+ \defconvertedargument\next{#1 }%
\doifinstringelse{\delcharacter\letterpercent}{\delcharacter\next}
{\secondoftwoarguments}
{\doifincsnameelse\endofblock\next
@@ -115,7 +116,7 @@
{\secondoftwoarguments}}}}
\long\def\processnextbufferlineB#1% #2#3%
- {\convertargument#1 \to\next
+ {\defconvertedargument\next{#1 }%
\ifx\next\emptybufferline
\ifsegmentatebuffer \emptybufferlinetrue \fi
\expandafter\secondoftwoarguments% #3%
diff --git a/Master/texmf-dist/tex/context/base/core-buf.mkiv b/Master/texmf-dist/tex/context/base/core-buf.mkiv
new file mode 100644
index 00000000000..c313fc45092
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/core-buf.mkiv
@@ -0,0 +1,109 @@
+%D \module
+%D [ file=core-buf, % blocks are moved to core-blk
+%D version=2000.01.05,
+%D title=\CONTEXT\ Core Macros,
+%D subtitle=Buffers,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+% this will become a proper new verbatim module
+
+\unprotect
+
+\registerctxluafile{core-buf}{1.001}
+
+\def\mkresetbuffer
+ {\ctxlua{buffers.erase("\currentbuffer")}}
+
+\long\def\mksetbuffer#1%
+ {\ctxlua{buffers.set("\currentbuffer", \!!bs\detokenize{#1}\!!es)}}
+
+\long\def\mkstartbuffer#1#2#3#4#5%
+ {\doifelsenothing{#4}
+ {\expanded{\setbuffercapsules{\e!start\v!buffer}{\e!stop\v!buffer}}%
+ \letvalue\bufferstop\relax}
+ {\setbuffercapsules{#3}{#4}}% not expanded, can be \cs \cs !
+ \expanded{\dodowithbuffer
+ {\currentbuffer}
+ {\bufferstart}
+ {\bufferstop}
+ {\donothing}
+ {#5% \egroup
+ \noexpand\getvalue{\bufferstop}}}}
+
+\def\mkdobuffer#1%
+ {#1}
+
+\def\mkdoifelsebuffer#1%
+ {\ctxlua{buffers.doifelsebuffer("#1")}}
+
+\def\mkgetbuffer
+ {\ctxlua{buffers.get("\currentbuffer")}}
+
+% will move
+
+\ifx\mkinitializeverbatim\undefined \def\mkinitializeverbatim{\tttf} \fi
+
+\def\mktypebuffer
+ {\mkdotypebuffer{\v!file}{}{\currentbuffer}}
+
+\def\mkprocessbufferverbatim
+ {\mkinitializeverbatim
+ \ctxlua{buffers.type("\currentbuffer")}}
+
+\def\mkprocessbufferlinesverbatim#1#2#3%
+ {#2%
+ % todo, set up numbers
+ \mkinitializeverbatim
+ \ctxlua{buffers.type("\currentbuffer")}
+ #3}
+
+\def\mkdotypebuffer#1#2#3% see dodotypefile
+ {\mkdoifelsebuffer{#3}
+ {\dosometyping{#1}{#2}{#3}\mkprocessbufferverbatim\mkprocessbufferlinesverbatim}
+ {\reporttypingerror{#3}}}
+
+\def\setbuffercapsules#1#2%
+ {\edef\bufferstart{\strippedcsname#1}\edef\bufferstart{\scantextokens\expandafter{\bufferstart}}%
+ \edef\bufferstop {\strippedcsname#2}\edef\bufferstop {\scantextokens\expandafter{\bufferstop }}}
+
+\def\dowithbuffer#1#2#3% name, startsequence, stopsequence, before, after
+ {\setbuffercapsules{#2}{#3}%
+ \expanded{\dodowithbuffer{#1}{\bufferstart}{\bufferstop}}}
+
+\long\def\dodowithbuffer#1#2#3#4#5% name, startsequence, stopsequence, before, after
+ {#4%
+ \bgroup
+ \setcatcodetable \vrbcatcodes
+ \catcode`\\=12
+ \ctxlua{buffers.erase("#1")}%
+ \long\def\nododowithbuffer
+ {\egroup
+ #5}%
+ \long\def\dododowithbuffer##1#3% is detokenize needed? TEST
+ {\ctxlua
+ {buffers.grab("#1","#2","#3",\!!bs\detokenize{##1}\!!es)}
+ \dododowithbuffer
+ \nododowithbuffer}%
+ \dododowithbuffer}
+
+% kind of redundant in mkiv
+
+\let\mkstartmemorybuffer\startbuffer
+\let\mkstartfilebuffer \startbuffer
+
+% bonus
+
+\def\inspectbuffer
+ {\dosingleempty\doinspectbuffer}
+
+\def\doinspectbuffer[#1]%
+ {\setcurrentbuffer{#1}%
+ \ctxlua{buffers.inspect("\currentbuffer")}}
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/core-buf.tex b/Master/texmf-dist/tex/context/base/core-buf.tex
index ad98788a33c..46987f1f152 100644
--- a/Master/texmf-dist/tex/context/base/core-buf.tex
+++ b/Master/texmf-dist/tex/context/base/core-buf.tex
@@ -227,6 +227,13 @@
\def\stopbufferparagraph{\dostopbufferparagraph{#1}\egroup\egroup}%
\setbox\scratchbox\vbox\bgroup\dostartbufferparagraph{#1}}
+% only mkiv
+
+\beginLUATEX
+ \def\savebuffer{\dosingleempty\dosavebuffer}
+ \def\dosavebuffer[#1]{\ctxlua{buffers.save("#1")}}
+\endLUATEX
+
% plugins
\loadmarkfile{core-buf}
diff --git a/Master/texmf-dist/tex/context/base/core-con.lua b/Master/texmf-dist/tex/context/base/core-con.lua
new file mode 100644
index 00000000000..be00accde6d
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/core-con.lua
@@ -0,0 +1,168 @@
+if not modules then modules = { } end modules ['char-con'] = {
+ version = 1.001,
+ comment = "companion to core-con.tex",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+--[[ldx--
+<p>This module implements a bunch of conversions. Some are more
+efficient than their <l n='tex'/> counterpart, some are even
+slower but look nicer this way.</p>
+
+<p>Some code may move to a module in the language namespace.</p>
+--ldx]]--
+
+converters = converters or { }
+languages = languages or { }
+
+languages.counters = {
+ ['**'] = {
+ 0x0061, 0x0062, 0x0063, 0x0064, 0x0065,
+ 0x0066, 0x0067, 0x0068, 0x0069, 0x006A,
+ 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
+ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074,
+ 0x0075, 0x0076, 0x0077, 0x0078, 0x0079,
+ 0x007A
+ },
+ ['sl'] = {
+ 0x0061, 0x0062, 0x0063, 0x010D, 0x0064,
+ 0x0065, 0x0066, 0x0067, 0x0068, 0x0069,
+ 0x006A, 0x006B, 0x006C, 0x006D, 0x006E,
+ 0x006F, 0x0070, 0x0072, 0x0073, 0x0161,
+ 0x0074, 0x0075, 0x0076, 0x007A, 0x017E
+ },
+ ['gr'] = {
+ 0x0391, 0x0392, 0x0393, 0x0394, 0x0395,
+ 0x0396, 0x0397, 0x0398, 0x0399, 0x039A,
+ 0x039B, 0x039C, 0x039D, 0x039E, 0x039F,
+ 0x03A0, 0x03A1, 0x03A3, 0x03A4, 0x03A5,
+ 0x03A6, 0x03A7, 0x03A8, 0x03A9
+ },
+ ['arabic'] = {
+ 0x0660, 0x0661, 0x0662, 0x0663, 0x0664,
+ 0x0665, 0x0666, 0x0667, 0x0668, 0x0669
+ },
+ ['persian'] = {
+ 0x06F0, 0x06F1, 0x06F2, 0x06F3, 0x06F4,
+ 0x06F5, 0x06F6, 0x06F7, 0x06F8, 0x06F9
+ },
+ ['thai'] = {
+ 0xE050, 0xE051, 0xE052, 0xE053, 0xE054,
+ 0xE055, 0xE056, 0xE057, 0xE058, 0xE059
+ },
+ ['devangari'] = {
+ 0x0966, 0x0967, 0x0968, 0x0969, 0x096A,
+ 0x096B, 0x096C, 0x096D, 0x096E, 0x096F
+ },
+ ['gurmurkhi'] = {
+ 0x0A66, 0x0A67, 0x0A68, 0x0A69, 0x0A6A,
+ 0x0A6B, 0x0A6C, 0x0A6D, 0x0A6E, 0x0A6F
+ },
+ ['gujarati'] = {
+ 0x0AE6, 0x0AE7, 0x0AE8, 0x0AE9, 0x0AEA,
+ 0x0AEB, 0x0AEC, 0x0AED, 0x0AEE, 0x0AEF
+ },
+ ['tibetan'] = {
+ 0x0F20, 0x0F21, 0x0F22, 0x0F23, 0x0F24,
+ 0x0F25, 0x0F26, 0x0F27, 0x0F28, 0x0F29
+ }
+}
+
+function converters.chr(n, m)
+ if n > 0 and n < 27 then
+ tex.sprint(string.char(n+m))
+ end
+end
+
+function converters.maxchrs(n,m,cmd)
+ if n <= m then
+ tex.sprint(tex.texcatcodes, cmd .. "{" .. n .. "}")
+ else
+ converters.maxchrs(math.floor((n-1)/m),m,cmd)
+ tex.sprint(tex.texcatcodes, cmd .. "{" .. ((n-1)%m + 1) .. "}")
+ end
+end
+function converters.chrs(n,m)
+ if n <= 26 then
+ tex.sprint(string.char(n+m))
+ else
+ converters.chrs(math.floor((n-1)/26),m)
+ tex.sprint(string.char(((n-1)%26 + 1)+m))
+ end
+end
+
+do
+
+ local function do_alphabetic(n,max,chr)
+ if n <= max then
+ characters.flush(chr(n))
+ else
+ do_alphabetic(math.floor((n-1)/max),max,chr)
+ characters.flush(chr((n-1)%max+1))
+ end
+ end
+
+ function converters.alphabetic(n,code)
+ local code = languages.counters[code] or languages.counters['**']
+ do_alphabetic(n,#code,function(n) return code[n] end)
+ end
+
+ function converters.Alphabetic(n,code)
+ local code = languages.counters[code] or languages.counters['**']
+ do_alphabetic(n,#code,function(n) return characters.uccode(code[n]) end)
+ end
+
+end
+
+function converters.character(n) converters.chr (n,96) end
+function converters.Character(n) converters.chr (n,64) end
+function converters.characters(n) converters.chrs(n,96) end
+function converters.Characters(n) converters.chrs(n,64) end
+
+function converters.weekday(day,month,year)
+ tex.sprint(os.date("%w",os.time{year=year,month=month,day=day})+1)
+end
+
+function converters.lpy(year)
+ return (year % 400 == 0) or ((year % 100 ~= 0) and (year % 4 == 0))
+end
+
+function converters.leapyear(year)
+ if converters.lpy(year) then tex.sprint(1) else tex.sprint(0) end
+end
+
+converters.mth = {
+ [false] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },
+ [true] = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }
+}
+
+function converters.nofdays(year,month)
+ tex.sprint(converters.mth[converters.lpy(year)][month])
+end
+
+function converters.year () tex.sprint(os.date("%Y")) end
+function converters.month () tex.sprint(os.date("%m")) end
+function converters.hour () tex.sprint(os.date("%H")) end
+function converters.minute () tex.sprint(os.date("%M")) end
+function converters.second () tex.sprint(os.date("%S")) end
+function converters.textime() tex.sprint(tonumber(os.date("%H"))*60+tonumber(os.date("%M"))) end
+
+converters.rom = {
+ { [0] = '', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX' },
+ { [0] = '', 'X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC' },
+ { [0] = '', 'C', 'CC', 'CCC', 'CD', 'D', 'DC', 'DCC', 'DCCC', 'CM' },
+}
+
+function converters.toroman(n)
+ if n >= 4000 then
+ return converters.toroman(math.floor(n/1000)) .. " " .. converters.toroman(n%1000)
+ else
+ return string.rep("M",math.floor(n/1000)) .. converters.rom[3][math.floor((n%1000)/100)] ..
+ converters.rom[2][math.floor((n%100)/10)] .. converters.rom[1][math.floor((n% 10)/1)]
+ end
+end
+
+function converters.romannumerals(n) return tex.sprint(string.lower(converters.toroman(n))) end
+function converters.Romannumerals(n) return tex.sprint( converters.toroman(n) ) end
diff --git a/Master/texmf-dist/tex/context/base/core-con.mkiv b/Master/texmf-dist/tex/context/base/core-con.mkiv
new file mode 100644
index 00000000000..390f9c5959b
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/core-con.mkiv
@@ -0,0 +1,90 @@
+%D \module
+%D [ file=core-con,
+%D version=2006.09.16,
+%D title=\CONTEXT\ Core Macros,
+%D subtitle=Conversion Macros,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\unprotect
+
+\registerctxluafile{core-con}{1.001}
+
+\def\romannumerals#1{\ctxlua{converters.romannumerals(\number#1)}}
+\def\Romannumerals#1{\ctxlua{converters.Romannumerals(\number#1)}}
+
+\def\greeknumerals#1{\ctxlua{converters.alphabetic(\number#1,"gr")}}
+\def\Greeknumerals#1{\ctxlua{converters.Alphabetic(\number#1,"gr")}}
+
+\def\character #1{\ctxlua{converters.character (\number#1)}}
+\def\Character #1{\ctxlua{converters.Character (\number#1)}}
+\def\characters#1{\ctxlua{converters.characters(\number#1)}}
+\def\Characters#1{\ctxlua{converters.Characters(\number#1)}}
+
+\def\languagecharacters#1{\ctxlua{converters.alphabetic(\number#1,"\currentlanguage")}} % new
+\def\languageCharacters#1{\ctxlua{converters.Alphabetic(\number#1,"\currentlanguage")}} % new
+
+\def\getdayoftheweek#1#2#3{\normalweekday\ctxlua{converters.weekday(\number#1,\number#2,\number#3)}}
+\def\dayoftheweek #1#2#3{\doconvertday{\ctxlua{converters.weekday(\number#1,\number#2,\number#3)}}}
+
+\def\doifleapyearelse#1%
+ {\ifcase\ctxlua{converters.leapyear(\number#1)}
+ \@EA\secondoftwoarguments
+ \else
+ \@EA\firstoftwoarguments
+ \fi}
+
+\def\getdayspermonth#1#2%
+ {\edef\numberofdays{\ctxlua{converters.nofdays(\number#1,\number#2)}}}
+
+\def\dayspermonth#1#2%
+ {\ctxlua{converters.nofdays(\number#1,\number#2)}}
+
+\def\calculatecurrenttime
+ {\edef\currenthour {\ctxlua{converters.hour ()}}%
+ \edef\currentminute{\ctxlua{converters.minute()}}%
+ \edef\currentsecond{\ctxlua{converters.second()}}}
+
+% problem is that we calculate with those numbers
+%
+% \def\time {\numexpr\ctxlua{converters.textime()}\relax}
+% \def\year {\numexpr\ctxlua{converters.year ()}\relax}
+% \def\month{\numexpr\ctxlua{converters.month ()}\relax}
+% \def\day {\numexpr\ctxlua{converters.day ()}\relax}
+
+% \dayoftheweek{2006}{9}{15}
+% \doifleapyearelse{2000}{OK}{NOT OK}
+% \doifleapyearelse{2100}{NOT OK}{OK}
+% \doifleapyearelse{2004}{OK}{NOT OK}
+% \doifleapyearelse{2003}{NOT OK}{OK}
+% \dayspermonth{2000}{2}
+% [\the\normaltime=\the\time]
+
+% we could use an auxiliary macro to save some bytes in the format
+%
+% \def\dolanguagecharacters#1#2{\ctxlua{converters.alphabetic(\number#2,"#1")}}
+
+% this does not belong here, but in a lang-module
+
+\def\arabicnumerals #1{\ctxlua{converters.alphabetic(\number#1,"arabic")}}
+\def\persiannumerals #1{\ctxlua{converters.alphabetic(\number#1,"persian")}}
+\def\thainumerals #1{\ctxlua{converters.alphabetic(\number#1,"thai")}}
+\def\devanagarinumerals#1{\ctxlua{converters.alphabetic(\number#1,"devanagari")}}
+\def\gurmurkhinumerals #1{\ctxlua{converters.alphabetic(\number#1,"gurmurkhi")}}
+\def\gujaratinumerals #1{\ctxlua{converters.alphabetic(\number#1,"gujarati")}}
+\def\tibetannumerals #1{\ctxlua{converters.alphabetic(\number#1,"tibetan")}}
+
+\defineconversion[arabicnumerals] [\arabicnumerals]
+\defineconversion[persiannumerals] [\persiannumerals]
+\defineconversion[thainumerals] [\thainumerals]
+\defineconversion[devanagarinumerals][\devanagarinumerals]
+\defineconversion[gurmurkhinumerals] [\gurmurkhinumerals]
+\defineconversion[gujaratinumerals] [\gujaratinumerals]
+\defineconversion[tibetannumerals] [\tibetannumerals]
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/core-con.tex b/Master/texmf-dist/tex/context/base/core-con.tex
index 5594ccadd77..33e252fff21 100644
--- a/Master/texmf-dist/tex/context/base/core-con.tex
+++ b/Master/texmf-dist/tex/context/base/core-con.tex
@@ -588,9 +588,13 @@
%D Taco's modulo code is implemented in the system module
%D \type {syst-con}.
+%D If a conversion is just a font switch then we need to make sure
+%D that the number is indeed end up as number in the input, so we
+%D need to handle the second argument.
+
\beginETEX \ifcsname
-\def\convertnumber#1%
+\def\convertnumber#1#2%
{\csname\??cv
\ifcsname\??cv\currentlanguage#1\endcsname
\currentlanguage#1%
@@ -599,7 +603,7 @@
\else
\s!default
\fi\fi
- \endcsname}
+ \endcsname{\number#2}}
\def\doifconversiondefinedelse#1%
{\ifcsname\??cv\currentlanguage#1\endcsname
@@ -614,7 +618,7 @@
\beginTEX
-\def\convertnumber#1%
+\def\convertnumber#1#2%
{\csname\??cv
\@EA\ifx\csname\??cv\currentlanguage#1\endcsname\relax
\@EA\ifx\csname\??cv#1\endcsname\relax
@@ -625,7 +629,7 @@
\else
\currentlanguage#1%
\fi
- \endcsname}
+ \endcsname{\number#2}}
\def\doifconversiondefinedelse#1%
{\@EA\ifx\csname\??cv\currentlanguage#1\endcsname\relax
@@ -647,7 +651,7 @@
%
% \doloop{\doifelseconversionnumber{ctx}{\recurselevel}{[\recurselevel]}{\exitloop}}
-\defineconversion [\s!default] [\number]
+\defineconversion [\s!default] [\numbers]
%D As longs as symbols are linked to levels or numbers, we can
%D also use the conversion mechanism, but in for instance the
diff --git a/Master/texmf-dist/tex/context/base/core-ctx.tex b/Master/texmf-dist/tex/context/base/core-ctx.tex
index 9cd3de2b9c2..22f2ded4ad6 100644
--- a/Master/texmf-dist/tex/context/base/core-ctx.tex
+++ b/Master/texmf-dist/tex/context/base/core-ctx.tex
@@ -17,6 +17,8 @@
%D overloades a few file reading macros and permits runtime
%D conversion and job control.
+% todo: rewrite in lua
+
\unprotect
\chardef\preprocessmethod 2 % 0=no check 1=present_check 2=log_check
@@ -77,19 +79,27 @@
\iftracefiles\writestatus\m!systems{preprocessing - no suffix}\fi
\egroup
\else\ifcase\preprocesslocal
+ % also ./ strippen
\iftracefiles\writestatus\m!systems{preprocessing - check presence of \readfilename\preprocesssuffix}\fi
\doifdefinedelse{fp..\readfilename}
{\egroup
\doiffileexistselse{\readfilename\preprocesssuffix}
{\chardef\preprocessstate\plusone}
{\chardef\preprocessstate\plustwo}}%
- {\doifdefinedelse{fp..\splitoffbase}%
+ {\doifdefinedelse{fp.../\readfilename}
{\egroup
+ \edef\readfilename{./\readfilename}%
\doiffileexistselse{\readfilename\preprocesssuffix}
{\chardef\preprocessstate\plusone}
{\chardef\preprocessstate\plustwo}}%
- {\egroup}}%
+ {\doifdefinedelse{fp..\splitoffbase}%
+ {\egroup
+ \doiffileexistselse{\readfilename\preprocesssuffix}
+ {\chardef\preprocessstate\plusone}
+ {\chardef\preprocessstate\plustwo}}%
+ {\egroup}}}%
\else
+ % maybe just filecheck, why ctl
\iftracefiles\writestatus\m!systems{preprocessing - check local presence of \readfilename\preprocesssuffix}\fi
\doifdefinedelse{fp..\readfilename}
{\egroup
@@ -157,7 +167,7 @@
\iftracefiles\writestatus\m!systems{#1 located}\fi
\def\next{#2\dodoreadfile}}%
{\iftracefiles\writestatus\m!systems{cannot locate #1}\fi
- \decrement\readlevel\relax
+ \advance\readlevel\minusone
\ifnum\readlevel>\zerocount
\edef\readfilename{\pathplusfile{\f!parentpath}{\readfilename}}%
\def\next{\redoreadfile\readfilename{#2}{#3}}%
@@ -184,13 +194,15 @@
\the\everybeforereadfile
\ifcase\preprocessstate
% no checking or not found when using method 1
- \normalinput\readfilename
+ \def\dodoreadfileindeed{\inputgivenfile\readfilename}%
\or
% found when using method 1 or 2
- \normalinput\readfilename\preprocesssuffix
+ \def\dodoreadfileindeed{\inputgivenfile{\readfilename\preprocesssuffix}}%
\or
% not found when using method 2
+ \let\dodoreadfileindeed\relax
\fi
+ \dodoreadfileindeed
\relax
\the\everyafterreadfile}
diff --git a/Master/texmf-dist/tex/context/base/core-def.tex b/Master/texmf-dist/tex/context/base/core-def.tex
index 3e7a3585d15..c7c49858e07 100644
--- a/Master/texmf-dist/tex/context/base/core-def.tex
+++ b/Master/texmf-dist/tex/context/base/core-def.tex
@@ -13,22 +13,15 @@
\writestatus{loading}{Context Core Macros / Defaults}
-%D Here we collect default settings. More code will moved to
-%D this module later.
+%D Here we collect settings that cannot be done earlier due to
+%D depedencies. More code will moved to this module later.
\unprotect
-%D We preload a couple of symbol|(|sets): a few defaults,
-%D the marvo symbols and a few guillemot replacements.
-
-\usesymbols[mis,mvs,glm]
-
-%D We also choose a navigation symbol set:
+\usesymbols[mis,mvs] % 'glm' no longer needed due to lm
\usesymbols[nav] \setupsymbolset[navigation 1]
\setupinteraction[\c!symbolset=navigation 1]
-%D In \type {core-nav}, we choose this set as well.
-
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/core-des.tex b/Master/texmf-dist/tex/context/base/core-des.tex
index 7b786ec9402..f11721c9626 100644
--- a/Master/texmf-dist/tex/context/base/core-des.tex
+++ b/Master/texmf-dist/tex/context/base/core-des.tex
@@ -13,9 +13,27 @@
\writestatus{loading}{Context Core Macros / Descriptions}
-\unprotect
+%D In order to be more flexible with theorems Aditya Mahajan added
+%D support for titles and endsymbols. At the same time we some more
+%D flexible support for inheriting numbers was added.
+
+%D \startbuffer
+%D \defineenumeration[one]
+%D \defineenumeration[two] [one]
+%D \defineenumeration[three] [number=one,style=slanted]
+%D \defineenumeration[four] [three]
+%D \defineenumeration[five] [three] [number=five]
+%D
+%D \startone test test 1 \stopone
+%D \starttwo test test 2 \stoptwo
+%D \startthree test test 3 \stopthree
+%D \startfour test test 4 \stopfour
+%D \startfive test test 1 \stopfive
+%D \stopbuffer
+%D
+%D \typebuffer \start \getbuffer \stop
-% beware: \insidedescription should be set to zero inside footnotes
+\unprotect
% Dit kan en moet dus anders:
%
@@ -242,13 +260,13 @@
\advance\leftskip -\leftskipadaption \relax
\ifdim\leftskipadaption=\zeropoint
\leftskipadaption1.5em % just some default
- \ifnum\insidedescription=\plusone
+ \ifnum\nesteddescriptionstate=\plusone
\ifdim\leftskip>\zeropoint \relax
\leftskipadaption\leftskip
\fi
\fi
\fi
- \ifnum\insidedescription>\zerocount % was \ifnum\insidedescription=\plusone
+ \ifnum\nesteddescriptionstate>\zerocount % was \ifnum\nesteddescriptionstate=\plusone
\advance\leftskip \leftskipadaption % but we're already further on
\fi
\hskip-\leftskipadaption
@@ -269,7 +287,7 @@
%D A new key 'headalign' in definitions.
\def\resetdescriptions % to be used in e.g. footnotes
- {\chardef\insidedescription\zerocount}
+ {\chardef\nesteddescriptionstate\zerocount}
\resetdescriptions
@@ -312,20 +330,22 @@
\doifelse{\descriptionparameter\c!aligntitle}\v!no
{\edef\@@leftdescriptionskip {\the\leftskip }%
\edef\@@rightdescriptionskip{\the\rightskip}}
- {\ifcase\insidedescription
+ {\ifcase\nesteddescriptionstate
\edef\@@leftdescriptionskip {\the\leftskip }%
\edef\@@rightdescriptionskip{\the\rightskip}%
\fi}%
\expanded{\indenting[\descriptionparameter\c!indenting]}%
% better a system mode
- \ifcase\insidedescription
- \chardef\insidedescription\plusone
+ \ifcase\nesteddescriptionstate
+ \chardef\nesteddescriptionstate\plusone
\or
- \chardef\insidedescription\plustwo
- \fi} % now happens elsewhere : \noindent\ignorespaces
+ \chardef\nesteddescriptionstate\plustwo
+ \fi% now happens elsewhere : \noindent\ignorespaces
+ \@@resetdescriptionclosesymbol}
\def\@@stopdescription#1%
{\def\currentdescription{#1}%
+ \@@placedescriptionclosesymbol
% was \par \dostopattributes % here, else problems with interlinespace and font change
\dostopparbasedattributes % == \settrue\parbasedattributes \dostopattributes
\endgroup
@@ -344,13 +364,17 @@
\def\@@startdescription[#1][#2]%
{\def\currentdescription{#1}%
\doifelse{\descriptionparameter\c!title}\v!yes
- {\dowithwargument{\@@startsomedescription{#1}[#2]}}
+ % {\dowithwargument{\@@startsomedescription{#1}[#2]}} % patched for theorems
+ {\permitspacesbetweengroups
+ \dodoublegroupempty{\@@startsomedescription{#1}[#2]}}
{\@@startsomedescription{#1}[#2]{}}}
\def\@@description[#1][#2]%
{\def\currentdescription{#1}%
\doifelse{\descriptionparameter\c!title}\v!yes
- {\dowithwargument{\@@somedescription{#1}[#2]}}
+ % {\dowithwargument{\@@somedescription{#1}[#2]}} % patched for theorems
+ {\permitspacesbetweengroups
+ \dodoublegroupempty{\@@somedescription{#1}[#2]}}
{\@@somedescription{#1}[#2]{}}}
% these call:
@@ -398,11 +422,12 @@
{\copyparameters[\??dd#1][\??dd]
[\c!location,\c!headstyle,\c!style,\c!color,\c!headcolor,\c!title,
\c!width,\c!hang,\c!sample,\c!before,\c!inbetween,\c!after,\c!margin,
- \c!indenting,\c!indentnext,\c!align,\c!text,\c!distance,\c!titledistance,\c!command]%
+ \c!indenting,\c!indentnext,\c!align,\c!text,\c!distance,\c!titledistance,\c!command,
+ \c!titleleft,\c!titleright,\c!titlecommand,\c!closesymbol,\c!closecommand]%
\getparameters[\??dd#1]
[\c!title=\v!yes,\s!do\c!command=\normal@@descriptionhandler,
\c!type=\v!description,\c!list=,\c!listtext=,
- \c!level=,#2]%
+ \c!level=,#2]%AM?? Why do we have title=yes here?
%\doifvalue{\??dd#1\c!location}\v!top{\doassign[\??dd#1][\c!inbetween=\blank]}%
\doifvalue{\??dd#1\c!location}\v!top % we actually need more granularity
{\doifnotvalue{\??dd#1\c!inbetween}{\doassign[\??dd#1][\c!inbetween=\blank]}}%
@@ -464,12 +489,12 @@
{\??dd\currentdescription}\c!headstyle\c!headcolor % todo: sub as well
{\descriptionparameter\c!command
{\showdntext
- \domakednnumber
- \doif{\descriptionparameter\c!title}\v!yes % new, for david antos
- {\doattributes{\??dd\currentdescription}\c!titlestyle\c!titlecolor
- {\hskip\descriptionparameter\c!titledistance\begstrut#2\endstrut}}%
- }}% \c!command is hook for taco
- \doifsomething{\descriptionparameter\c!list} % also for david antos
+ \descriptionparameter\c!left
+ \strut\doshowdnnumber
+ \showdntitle{#2}%
+ \descriptionparameter\c!stopper
+ \descriptionparameter\c!right}}%
+ \doifsomething{\descriptionparameter\c!list}
{\dowritetolist
{\descriptionparameter\c!type:\descriptionparameter\c!list}
{\showdnlisttext\doshowdnnumber}{#2}{\currentdescription}}%
@@ -478,14 +503,29 @@
\doifreferencefoundelse\localconnection
{\in[\localconnection]}\donothing % genereert > of <
\fi\fi
- \doifnot{#1}{-}{\rawreference\s!num{#1}{\doshowdnnumber}}%
- \else % Why was this strange expansion needed?
- \edef\!!stringa{\showdnpuretext}% nog eens testen binnen \expanded
- \expanded{\doattributes{\??dd\currentdescription}\noexpand\c!headstyle\noexpand\c!headcolor
- {\noexpand\descriptionparameter\noexpand\c!command{\!!stringa}}}%
- \doifnot{#1}{-}{\rawreference\s!num{#1}{}}%
+ \doifnot{#1}{-}{\rawreference\s!num{#1}{{\doshowdnnumber}{#2}}}%
+ \else
+ \doattributes{\??dd\currentdescription}\c!headstyle\c!headcolor
+ {\descriptionparameter\c!command
+ {\showdnpuretext
+ \descriptionparameter\c!left
+ \showdntitle{#2}%
+ \descriptionparameter\c!stopper
+ \descriptionparameter\c!right}}%
+ \doifnot{#1}{-}{\rawreference\s!num{#1}{{}{#2}}}%
\fi}
+\def\showdntitle#1%
+ {\doif{\descriptionparameter\c!title}\v!yes % new, for david antos
+ {\doifsomething{#1}
+ {\doattributes{\??dd\currentdescription}\c!titlestyle\c!titlecolor
+ {\hskip\descriptionparameter\c!titledistance
+ \descriptionparameter\c!titlecommand
+ {\descriptionparameter\c!titleleft
+ \begstrut#1\endstrut
+ \descriptionparameter\c!titleright}}}}}
+
+
\def\showdnpuretext
{\strut\descriptionparameter\c!text} % geen spatie
@@ -595,6 +635,14 @@
\def\setupenumerations
{\dodoubleempty\dosetupenumerations}
+\def\docheckenumerationnumber#1#2#3%
+ {\processaction
+ [\getvalue{\??dd#2\c!number}]
+ [ \v!yes=>\setvalue{\??dd#2\??dd\c!number}{#3},%
+ \v!no=>\setvalue{\??dd#2\??dd\c!number}{#3},%
+ \v!default=>\setvalue{\??dd#2\??dd\c!number}{#3},%
+ \v!unknown=>\letvalue{\??dd#2\??dd\c!number}\commalistelement]}
+
\def\dododefineenumeration#1#2#3[#4][#5]%
{\makecounter{\??dd\c!coupling#1}% new: global cross linking
\dodefinedescription[#3#1]%
@@ -606,29 +654,35 @@
\c!sample,\c!hang,\c!align,\c!before,\c!inbetween,\c!after,
\c!levels,\c!way,\c!blockway,\c!separator,\c!margin,
\c!indenting,\c!indentnext,\c!stopper,\c!sectionnumber,
- \c!number]%
+ \c!title,\c!titleleft,\c!titleright,\c!titlecommand,\c!closesymbol,\c!closecommand]%
\doifassignmentelse{#4}
{\getparameters[\??dd#3#1]%
[\c!text=#1,\??dd\c!number=#1,\c!conversion=,\c!listtext=#1\space,
- \c!left=,\c!right=,\c!coupling=,\c!couplingway=\v!local,#4]}%
+ \c!left=,\c!right=,\c!coupling=,\c!couplingway=\v!local,#4]%
+ \docheckenumerationnumber{#1}{#3#1}{#1}}%
{\doifelsenothing{#4}
{\getparameters[\??dd#3#1]%
[\c!text=#1,\??dd\c!number=#1,\c!conversion=,
\c!stopper=,
- \c!left=,\c!right=,\c!coupling=,\c!couplingway=,#4]}%
+ \c!left=,\c!right=,\c!coupling=,\c!couplingway=,#4]%
+ \docheckenumerationnumber{#1}{#3#1}{#1}}%
{\copyparameters[\??dd#3#1][\??dd#3#4]
[\c!location,\c!headstyle,\c!style,\c!color,\c!headcolor,
\c!width,\c!number,\c!distance,\c!titledistance,\c!command,\c!margin,
\c!sample,\c!hang,\c!align,\c!before,\c!inbetween,\c!after,
\c!stopper,\c!indenting,\c!indentnext,\c!left,\c!right,
- \c!coupling,\c!couplingway]%
+ \c!coupling,\c!couplingway,
+ \c!title,\c!titleleft,\c!titleright,\c!titlecommand,\c!closesymbol,\c!closecommand]%
\getparameters[\??dd#3#1]
- [\c!text=#1,\??dd\c!number=#4,\c!conversion=,#5]}}%
+ [\c!text=#1,\??dd\c!number=#4,\c!conversion=,#5]%
+ %docheckenumerationnumber{#1}{#3#1}{#4}}}%
+ \docheckenumerationnumber{#1}{#3#1}{\getvalue{\??dd#3#4\??dd\c!number}}}}%
\doifvalue{\??dd#3#1\??dd\c!number}{#1}
{\definenumber
[#3#1]
[\c!way=\descriptionparentparameter\c!way,
\c!blockway=\descriptionparentparameter\c!blockway,
+ \c!conversion=\descriptionparentparameter\c!conversion,
\c!sectionnumber=\descriptionparentparameter\c!sectionnumber]%
\doifvalue{\??dd#1\c!levels}{#2}% % for
{\doifsomething{\getvalue{\??dd#1\c!conversion}}% % old
@@ -665,6 +719,17 @@
\def\donextenumerationnumber[#1][#2][#3]%
{\pluscounter{\??dd\c!coupling#1}% new: global crosslinking
\getvalue{\??dd\e!next#2\c!number}[#3]}%
+
+\def\@@resetdescriptionclosesymbol
+ {\global\@EA\settrue\csname\??dd\currentdescription:mrk\endcsname
+ \let\placeclosesymbol\@@placedescriptionclosesymbol
+ \let\qed \@@placedescriptionclosesymbol}
+
+\def\@@placedescriptionclosesymbol
+ {\ifconditional\csname\??dd\currentdescription:mrk\endcsname
+ \global\@EA\setfalse\csname\??dd\currentdescription:mrk\endcsname
+ \doifsomething{\descriptionparameter\c!closesymbol}{\descriptionparameter\c!closecommand{\descriptionparameter\c!closesymbol}}%
+ \fi}
% Het default-mechanisme kan mooier: leegtest, enz.
%
@@ -763,9 +828,7 @@
\def\do@@label[#1][#2]%
{\numberparameter{#1}\c!before
\numberparameter{#1}\c!command
- {\doattributes{\@@thenumber{#1}}\c!headstyle\c!headcolor
- {\dotextprefix{\numberparameter{#1}\c!text}%
- \getvalue{\e!next#1}[#2]}}%
+ {\doattributes{\@@thenumber{#1}}\c!headstyle\c!headcolor{\getvalue{\e!next#1}[#2]}}%
\numberparameter{#1}\c!after}%
\def\do@@nextlabel[#1][#2]%
@@ -774,12 +837,14 @@
\setupdescriptions
[\c!location=\v!left,
\c!headstyle=\v!bold,
+ \c!titlestyle=\v!bold,
\c!style=\v!normal,
\c!color=,
\c!headcolor=,
+ \c!titlecolor=,
\c!width=8em,
\c!distance=0pt,
- \c!titledistance=0pt,
+ \c!titledistance=0.5em,
\c!hang=,
\c!sample=,
\c!align=,
@@ -789,17 +854,24 @@
\c!after=\blank,
\c!indentnext=\v!yes,
\c!indenting=\v!never,
- \c!command=]
+ \c!titleleft=(,
+ \c!titleright=),
+ \c!closesymbol=,
+ \c!closecommand=\wordright,
+ \c!command=,
+ \c!titlecommand=]
\setupenumerations
[\c!location=\v!top,
\c!headstyle=\v!bold,
\c!headcolor=,
+ \c!titlestyle=\v!bold,
+ \c!titlecolor=,
\c!style=\v!normal,
\c!color=,
\c!width=8em,
\c!distance=0pt,
- \c!titledistance=0pt,
+ \c!titledistance=0.5em,
\c!hang=,
\c!sample=,
\c!align=,
@@ -816,8 +888,13 @@
\c!sectionnumber=\v!yes,
\c!separator=\@@koseparator, % per 2006.06.23, was .
\c!stopper=,
+ \c!titleleft=(,
+ \c!titleright=),
+ \c!closesymbol=,
+ \c!closecommand=\wordright,
\c!number=,
- \c!command=]
+ \c!command=,
+ \c!titlecommand=]
\setupindentations
[\c!style=\v!normal,
diff --git a/Master/texmf-dist/tex/context/base/core-fig.tex b/Master/texmf-dist/tex/context/base/core-fig.tex
index ed893fa429a..5eed8fbf1c7 100644
--- a/Master/texmf-dist/tex/context/base/core-fig.tex
+++ b/Master/texmf-dist/tex/context/base/core-fig.tex
@@ -11,171 +11,10 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-% todo: directory : system -> \allinputpaths
-
-%D It may be that some functionality got lost. If it concerns
-%D defined features, let me know and it will be sorted out.
-
-\writestatus{loading}{Context Core Macros / Figure Inclusion}
-
-%D This is a reimplementation of the original module, which
-%D over time had evolved into a pretty complex whole. This
-%D was partly due to the fact that we needed to handle many
-%D formats, deal with substitute graphics, handle fallbacks
-%D and driver specifics (objects), etc. In the meantime we
-%D have more clever backends, moved away from texutil to
-%D rlxtools, can use runtime or betweentime runs etc. Also,
-%D more memory permits a cleaner implementation. Time to
-%D move on. We can now also assume that scaling is available.
-%D
-%D Another mess that can go is the llx/lly handling since
-%D drivers now automatically can determine such things.
-
-%D Messages 3 and 5 needs to be translated!
+\writestatus{loading}{Context Core Macros / Figure Handling}
\unprotect
-\startmessages dutch library: figures
- title: figuren
- 1: figuur -- is niet te vinden
- 2: figuur -- wordt niet preset
- 3: maten van -- worden extern vastgesteld
- 4: maten van -- geladen uit figuurfile zelf
- 5: maten van -- zijn onbekend
- 6: maten van -- berekend door rlxtools
- 8: figuurobject -- wordt opnieuw gebruikt
-\stopmessages
-
-\startmessages english library: figures
- title: figures
- 1: figure -- can not be found
- 2: figure -- is not preset
- 3: dimensions of -- are determined externally
- 4: dimensions of -- loaded from figurefile itself
- 5: dimensions of -- are unknown
- 6: dimensions of -- calculated by rlxtools
- 8: figureobject -- is reused
-\stopmessages
-
-\startmessages german library: figures
- title: Abbildungen
- 1: Abbildung -- kann nicht gefunden werden
- 2: Abbildung -- wird nicht erstellt
- 3: dimensions of -- are determined externally
- 4: Dimensionen von -- geladen aus der Abbildungsdatei selbst
- 5: Dimensions of -- are unknown
- 6: Dimensionen von -- ausgerechnet durch rlxtools
- 8: Abbildungobjekt -- wurde wiederverwandt
-\stopmessages
-
-\startmessages czech library: figures
- title: obrazy
- 1: obraz -- nelze nalezt
- 2: obraz -- nepritomen
- 3: dimensions of -- are determined externally
- 4: dimenze obrazu -- nacteny primo z jeho souboru
- 5: dimensions of -- are unknown
- 6: dimenze obrazu -- spocteny programem rlxtools
- 8: obrazovy objekt -- je znovu pouzit
-\stopmessages
-
-\startmessages italian library: figures
- title: figure
- 1: figura -- non trovata
- 2: la figura -- non è preimpostata
- 3: dimensions of -- are determined externally
- 4: dimensioni di -- caricate dal file di immagini stesso
- 5: dimensions of -- are unknown
- 6: dimensioni di -- calcolate da rlxtools
- 8: oggetto-figura -- riutilizzato
-\stopmessages
-
-\startmessages romanian library: figures
- title: figuri
- 1: figura -- nu poate fi gasita
- 2: figura -- nu este presetata
- 3: dimensions of -- are determined externally
- 4: dimensiunea figurii -- se incarca din fisierul insusi
- 5: dimensions of -- are unknown
- 6: dimensiunea figurii -- este calculata de rlxtools
- 8: obiectul figura -- este refolosit
-\stopmessages
-
-\startmessages french library: figures
- title: figures
- 1: la figure -- ne peut être trouvée
- 2: la figure -- n'est pas pré-sélectionnée
- 3: dimensions of -- are determined externally
- 4: les dimensions de -- chargées implicitement à partir du fichier de figure
- 5: dimensions of -- are unknown
- 6: les dimensions de -- calculées par rlxtools
- 8: figureobject -- est réutilisé
-\stopmessages
-
-%D Due to the mere fact that \DVI|/|\PDF\ drivers differ in their
-%D needs for figure dimensions, we have to provide the width,
-%D height, horizontal and vertical scale. Also we want to
-%D specify at the user level either width and|/|or height, scale,
-%D or a factor related to the current document bodyfont size.
-%D Even better: we can also specify isometric scaling and
-%D automatically let \CONTEXT\ calculate the maximum possible
-%D dimensions. Whatever we calculate, the results will come
-%D available in the next registers.
-
-\letempty \@@DriverImageBox
-\letempty \@@DriverImageOptions
-\letempty \@@DriverImageWidth
-\letempty \@@DriverImageHeight
-\letempty \@@DriverImageFile
-\letempty \@@DriverImageLabel
-\letempty \@@DriverImageType
-\letempty \@@DriverImageMethod
-\letempty \@@DriverImagePage
-
-%D Because looking for dimensions can take many steps (locating
-%D the figure, maybe on more directories, scanning the figure
-%D on dimension, or when not found, trying to find them in the
-%D utility file, and again when not found, trying to generate
-%D such a file, and, as a last resort, trying to use the
-%D dimensions. Now when things do not work out the way we want,
-%D we can set a switch and get some information on what takes
-%D place.
-
-\newif\iftraceexternalfigures
-
-\let\traceexternalfigures\traceexternalfigurestrue
-
-\def\doshowfigurestate
- {\iftraceexternalfigures
- \expandafter\writestatus\expandafter\m!figures
- \else
- \expandafter\gobbleoneargument
- \fi}
-
-\def\doshowfiguremessage
- {\iftraceexternalfigures
- \expandafter\gobbletwoarguments
- \else
- \expandafter\showmessage\expandafter\m!figures
- \fi}
-
-%D Another switch tells \CONTEXT\ to locate and calculate a
-%D figure, but does not actually insert it. Especially when we
-%D use \PDFTEX\ this saves a lot of time on trialruns. (Keep
-%D in mind that \PDFTEX\ is both a \TEX\ pre|| and postprocessor.)
-
-\newif\ifskipexternalfigures % can be set elsewhere
-
-% \newif\ifrunutilityfile
-% \newif\ifconsultutilityfile
-%
-% Let's save two hash entries:
-
-\let\runutilityfiletrue \relax \let\runutilityfilefalse \relax
-\let\consultutilityfiletrue\relax \let\consultutilityfilefalse\relax
-
-%D The basic setup.
-
\def\setupexternalfigures
{\dosingleempty\dosetupexternalfigures}
@@ -184,674 +23,24 @@
\getparameters[\??ex][#1]% global settings
\setfigurepathlist} % the path may be used elsewhere too (as in x-res-04)
-%D Intermediate, private.
-
-\newdimen\determinedfigurewidth
-\newdimen\determinedfigureheight
-
-\let\naturalfigureheight\!!zeropoint
-\let\naturalfigurewidth \!!zeropoint
-
-\def\defaultfigurewidth {8\lineheight}
-\def\defaultfigureheight{6\lineheight}
-
-\def\defaultfigurepathsignal{(\v!default)}
-
-\def\checknaturalfiguredimensions
- {\edef\naturalfigurewidth{\the\dimexpr\ifzeropt\determinedfigurewidth
- \defaultfigurewidth \else\determinedfigurewidth \fi\relax}%
- \edef\naturalfigureheight{\the\dimexpr\ifzeropt\determinedfigureheight
- \defaultfigureheight\else\determinedfigureheight\fi\relax}}
-
-%D Locating figures. Dilemma: we do support eps and svg parsing but drivers
-%D don't always support it.
-
-\def\figuretypes{\c!mps,\c!pdf,\c!eps,\c!svg,\c!svg z,\c!png,\c!tif,jb2,\c!jpg}
-
-\def\supportedfiguretypes{\figuretypes}
-
-\def\checksupportedfiguretypes
- {\begingroup
- \global\let\supportedfiguretypes\empty
- \def\docommand##1%
- {\doiffileinsertionsupportedelse{##1}
- {\doglobal\addtocommalist{##1}\supportedfiguretypes}
- \donothing}%
- \processcommacommand[\figuretypes]\docommand
- \gdef\checksupportedfiguretypes{\let\figuretypes\supportedfiguretypes}%
- \endgroup
- \checksupportedfiguretypes}
-
-%D The next box is used to store the graphic. It's globally assigned.
-
-\newbox\foundexternalfigure
-
-\chardef\figurestatus\zerocount % nothing found
-
-\def\noffigurepages{\nofinsertpages}
-
-%D Variables.
-
-\newtoks\everyexternalfigureresets
-
-\def\resetfigurevariables
- {\the\everyexternalfigureresets}
-
-%D Example usage:
-
-\appendtoks
- \global\let\externalfigurelog\empty
-\to\everyexternalfigureresets
-
-%D Intermediate, private
-
-\def\resetprivatefigurevariables
- {\let \wantedfigurefull \empty
- \let \wantedfigurepath \empty
- \let \wantedfigurename \empty
- \let \wantedfigurebase \empty
- \let \wantedfiguretype \empty
- \let \wantedfigurefullname \empty
- \let \wantedfiguretypespec \empty
- \let \wantedfiguremethod \empty
- \let \wantedfigurepage \empty
- \let \wantedfigureoptions \empty
- \let \wantedfigureconversion\empty
- \let \wantedfigureprefix \empty
- \let \wantedfiguretypelist \figuretypes
- \let \figurepathlist \empty
- \chardef \figurestatus \zerocount
- \let \expandedfigurename \empty
- \global\let \analyzedfigurewidth \!!zeropoint % set by indentifying code
- \global\let \analyzedfigureheight \!!zeropoint % set by indentifying code
- \global\setbox\foundexternalfigure \emptybox
- \def \frozenfigurestamp {\externalfigurestamp}} % no edef
-
-\resetprivatefigurevariables
-
-\appendtoks
- \resetprivatefigurevariables
-\to\everyexternalfigureresets
-
-%D Private/public.
-
-\def\resetpublicfigurevariables
- {\let\figurewidth \!!zeropoint
- \let\figureheight \!!zeropoint
- \let\figurenaturalwidth \!!zeropoint
- \let\figurenaturalheight \!!zeropoint
- \let\figurelabel \empty
- \let\figurefileoriginal \empty
- \let\figurefileoptions \empty
- \let\figurefilename \empty
- \let\figurefiletype \empty
- \let\figurefilepage \!!zerocount
- \let\figurefileconversion\empty
- \let\figurefileprefix \empty
- \let\figurefilepath \empty
- \let\figurefilecache \empty}
-
-\resetpublicfigurevariables
-
-\appendtoks
- \resetpublicfigurevariables
-\to\everyexternalfigureresets
-
-\newcounter\figurenestinglevel
-
-\def\pushpublicfigurevariables
- {\ifcase\figurenestinglevel\else
- \doshowfigurestate{variables : push}%
- \globalpushmacro\figurewidth
- \globalpushmacro\figureheight
- \globalpushmacro\figurenaturalwidth
- \globalpushmacro\figurenaturalheight
- \globalpushmacro\figurelabel
- \globalpushmacro\figurefileoriginal
- \globalpushmacro\figurefileoptions
- \globalpushmacro\figurefilename
- \globalpushmacro\figurefiletype
- \globalpushmacro\figurefilepage
- \globalpushmacro\figurefileconversion
- \globalpushmacro\figurefileprefix
- \globalpushmacro\figurefilepath
- \globalpushmacro\figurefilecache
- \fi}
-
-\def\poppublicfigurevariables
- {\ifcase\figurenestinglevel\else
- \doshowfigurestate{variables : pop}%
- \globalpopmacro\figurefilecache
- \globalpopmacro\figurefilepath
- \globalpopmacro\figurefileprefix
- \globalpopmacro\figurefileconversion
- \globalpopmacro\figurefilepage
- \globalpopmacro\figurefiletype
- \globalpopmacro\figurefilename
- \globalpopmacro\figurefileoptions
- \globalpopmacro\figurefileoriginal
- \globalpopmacro\figurelabel
- \globalpopmacro\figurenaturalheight
- \globalpopmacro\figurenaturalwidth
- \globalpopmacro\figureheight
- \globalpopmacro\figurewidth
- \fi}
-
-\def\setpublicfigurevariables % todo: type vs typespec
- {\xdef\figurewidth {\the\wd\foundexternalfigure}%
- \xdef\figureheight {\the\ht\foundexternalfigure}%
- \xdef\figurenaturalwidth {\naturalfigurewidth}%
- \xdef\figurenaturalheight {\naturalfigureheight}%
- \xdef\figurelabel {\wantedfigurelabel}%
- \xdef\figurefilepath {\wantedfigurepath}%
- \xdef\figurefilename {\wantedfigurename}%
- \xdef\figurefiletype {\wantedfiguretypespec}%
- \xdef\figurefilepage {\wantedfigurepage}%
- \xdef\figurefileoptions {\wantedfigureoptions}%
- \xdef\figurefileconversion{\wantedfigureconversion}%
- \xdef\figurefilecache {\wantedconversioncache}%
- \xdef\figurefileprefix {\wantedconversionprefix}%
- \xdef\figurefileoriginal {\wantedconversionname}%
- \xdef\figurefullname {\wantedfigurepath/\wantedfigurename.\wantedfiguretypespec}%
- \ifcase\figurestatus
- \let\figurefiletype\empty % ?
- \fi}
-
-\def\setpublicfigurescalevariables
- {\edef\figurescalewidth {\finalscaleboxwidth }%
- \edef\figurescaleheight {\finalscaleboxheight}%
- \edef\figurescalexscale {\finalscaleboxxscale}%
- \edef\figurescaleyscale {\finalscaleboxyscale}}
-
-\def\resetpublicfigurescalevariables
- {\let\figurescalewidth \!!zeropoint
- \let\figurescaleheight \!!zeropoint
- \let\figurescalexscale \!!plusone
- \let\figurescaleyscale \!!plusone}
-
-\resetpublicfigurescalevariables
-
-\appendtoks
- \resetpublicfigurescalevariables
-\to \everyexternalfigureresets
-
-%D The next one is for instance used in symbols. Since
-%D we only need to reset some parameters, we can
-%D better use the fast alternative:
-%D
-%D \starttyping
-%D \def\resetexternalfigures
-%D {\getparameters[\??ef]
-%D [\c!option=,\c!maxwidth=,\c!maxheight=,
-%D \c!foregroundcolor=,\c!color=,
-%D %\c!conversion=,\c!prefix=,\c!splitcolor=,
-%D \c!frame=\v!off,\c!background=]}
-%D \stoptyping
-%D
-%D This one dropped the runtime of the \MAPS\ bibliography
-%D from over 110 seconds down to less than 105 seconds. The
-%D tremendously faster (but uglier) implementation is:
-
-\def\resetexternalfigures
- {\let\@@efoption \empty % \let\@@efprefix\empty
- \let\@@efmaxwidth \empty % \let\@@efcache \empty
- \let\@@efmaxheight \empty % \let\@@efframe \v!off
- \let\@@efforegroundcolor\empty
- \let\@@efcolor \empty
- \let\@@efconversion \empty
- \let\@@efbackground \empty}
-
-%D The following code will move:
-
-\appendtoks \resetexternalfigures \to \everyoverlay
-\appendtoks \resetexternalfigures \to \everybeforepagebody % not really needed
-%appendtoks \resetexternalfigures \to \everysymbol
-
-%D We need this one for bookkeeping:
-
-\newcounter\forcedMPSobject % better something \every<type>
-
-%D Features:
-
-% converted -> prefix, suffix
-% alternative -> other suffix
-% buffer -> prefix
-
-%D Still messy:
-
-\newtoks\everyfiguretypepresets
-
-\def\presetfiguretypeprocessing
- {\the\everyfiguretypepresets}
-
-\def\presetspecialfigure#1%
- {\doif\wantedfiguretype{#1}%
- {\let\@@efobject\v!no
- \let\@@efpreset\v!no
- \ifx\@@efwidth \empty\def\@@efwidth {\defaultfigurewidth }\fi
- \ifx\@@efheight\empty\def\@@efheight{\defaultfigureheight}\fi}}
-
-\appendtoks
- \presetspecialfigure\c!mov
- \presetspecialfigure\c!avi
-\to \everyfiguretypepresets
-
-\def\checkformpsfigurefiles % to be checked
- {\doif\wantedfigurename{mprun}
- {\doshowfigurestate{type check : forcing mps (mprun)}%
- \doifnotinstring{^\bufferprefix}{^\wantedfigurename}
- {\edef\wantedfigurename{\bufferprefix\wantedfigurename}}%
- \let\wantedfiguremethod \c!mps
- \let\wantedfiguretypespec\c!mps}%
- \doifnumberelse\wantedfiguretype
- {\doshowfigurestate{type check : forcing mps (number)}%
- \let\wantedfiguremethod \c!mps
- \let\wantedfiguretypespec\c!mps}
- \donothing
- \doif\wantedfiguretypespec\c!mps
- {\let\wantedfiguretypelist\wantedfiguretypespec
- \ifcase\EPSspecial\else\ifinobject\else
- \doglobal\increment\forcedMPSobject
- \edef\externalfigurestamp{\c!mps::\forcedMPSobject}%
- \let\@@efobject\v!yes
- \fi\fi}}
-
-\appendtoks
- \checkformpsfigurefiles
-\to \everyfiguretypepresets
-
-\def\checkfortexfigurefiles % to be checked (brrr: c!) / brrr: eftype
- {\doifinset\wantedfiguretype{\c!tex,\c!tmp}
- {\let\wantedfiguretypespec \wantedfiguretype}%
- \doifinset\wantedfiguretypespec{\c!tex,\c!tmp,\v!buffer}
- {\doshowfigurestate{type check : forcing tex (\wantedfiguretypespec)}%
- \let\wantedfiguretypelist\wantedfiguretypespec
- \let\wantedfiguremethod \c!tex
- \let\@@efobject\v!no
- \doifnothing\wantedfiguretype{\let\wantedfiguretype\c!tmp}%
- % there can be a non buffer \jobname.tmp (made by texexec)
- \doifnotinstring{^\bufferprefix}{^\wantedfigurename}
- {\edef\wantedfigurename{\bufferprefix\wantedfigurename}}}}
-
-\appendtoks
- \checkfortexfigurefiles
-\to \everyfiguretypepresets
-
-\def\checkforunknownfigurefiles
- {\doifnothing\wantedfiguretype
- {\dogetcommacommandelement\plusone\from\@@eftype\to\commalistelement
- \edef\wantedfigurefullname{\wantedfigurename.\commalistelement}}}
-
-\appendtoks
- \checkforunknownfigurefiles
-\to \everyfiguretypepresets
-
-% note * : this is needed because reusable graphics
-% combined with funny page aspect aspect ratio's can lead to
-% strange side effects of preceding factor=max specs. This
-% surfaced in the metafun manual, where the two side by
-% side clipped cow heads [the second one was a reused object]
-% where the second one inherited some characteristics from
-% the factor=max one some 30 pages back. Sigh.
-
-\chardef\splitexternalfigure\zerocount % 0 nosplit 1 split/yes 2 split/no
-
-\def\checkfigurecolorsettings
- {% seperation, seldom used
- \doifseparatingcolorselse
- {\let\@@efforegroundcolor\empty
- \doifelsenothing\@@efsplit
- {\chardef\splitexternalfigure\zerocount}
- {\doifcolorchannelelse\@@efsplit
- {\let\@@efobject\v!no % why?
- \chardef\splitexternalfigure\plusone}
- {\chardef\splitexternalfigure\plustwo}}}
- {\chardef\splitexternalfigure\zerocount}%
- % fake color in gray bitmaps, assumes that
- % a transparent color is used
- \doifsomething\@@efforegroundcolor
- {\def\@@efbackground{\v!foreground,\v!color}%
- \def\@@efbackgroundcolor{\@@efforegroundcolor}}%
- \doifsomething\@@efcolor
- {\doifcolorelse\@@efcolor
- {\checkpredefinedcolor[\@@efcolor]%
- \doregisterfigurecolor\@@efcolor}}%
- \donothing}
-
-\def\setextrafiguredriveroptions
- {\let\@@DriverImageOptions\empty
- \doifsomething\@@efpage {\addtocommalist\@@efpage \@@DriverImageOptions}%
- \doif \@@efpreview \v!yes{\addtocommalist\v!preview \@@DriverImageOptions}%
- \doif \@@efcontrols\v!yes{\addtocommalist\v!controls\@@DriverImageOptions}%
- \doif \@@efrepeat \v!yes{\addtocommalist\v!repeat \@@DriverImageOptions}%
- \doifinsetelse\@@efsize{mediabox,cropbox,artbox,bleedbox,trimbox}
- {\let \@@DriverImageBox \@@efsize}%
- {\doifinsetelse\@@efsize{media,crop,art,bleed,trim}
- {\edef\@@DriverImageBox{\@@efsize box}}%
- {\let \@@DriverImageBox \empty}}%
- \let\wantedfigureoptions\@@DriverImageOptions}
-
-\def\checkiffigureobjectpresent
- {\doifnot\@@efobject\v!no
- {\doifobjectssupportedelse
- {\doifobjectfoundelse{FIG}\externalfigurestamp
- {\doshowfigurestate{object found : \externalfigurestamp}%
- \getobjectdimensions{FIG}\externalfigurestamp
- \edef\frozenfigurestamp{\externalfigurestamp}%
- \xdef\analyzedfigurewidth {\the\dimexpr\objectwidth \relax}%
- \xdef\analyzedfigureheight{\the\dimexpr\objectheight\relax}%
- \setanalyzedfiguredimensions\plusone}
- {\doshowfigurestate{unknown object: \externalfigurestamp}}}
- {}}}
-
-\def\checkifknownfigureobjectpresent
- {\ifx\wantedfiguretype\empty
- \let\savedwantedfiguretype\wantedfiguretype
- \def\docommand##1%
- {\ifcase\figurestatus
- \edef\wantedfiguretype{##1}%
- \checkiffigureobjectpresent
- \fi}%
- \processcommacommand[\figuretypes]\docommand
- \ifcase\figurestatus
- \let\wantedfiguretype\savedwantedfiguretype
- \fi
- \fi}
+\presetlocalframed[\??ef]
-\def\checkforfigurefile
- {\ifcase\figurestatus
- \ifconditional\externalfigureflush
- \analyzefigurefiles
- \fi
- \fi}
+\newconditional\externalfigurelevel % true=background false=normal
+\newconditional\externalfigureflush % true=place false=ignore
-% \def\externalfigurestamp
-% {\wantedfigurename
-% -\ifx\wantedfiguretype\empty\wantedfiguretypespec\else\wantedfiguretype\fi
-% -\wantedfiguretypespec
-% -\wantedfigurepage}
-
-\def\externalfigurestamp % needs \edef'd macros!
- {\wantedfigurename
- \ifx\wantedfiguretype\empty\else
- \ifx\wantedfiguretype\s!unknown\else
- -\wantedfiguretype
- \fi
- \fi
- \ifx\wantedfiguretypespec\empty\else
- \ifx\wantedfiguretypespec\s!unknown\else
- \ifx\wantedfiguretypespec\wantedfiguretype\else
- -\wantedfiguretypespec
- \fi
- \fi
- \fi
- \ifnum\wantedfigurepage>\zeropoint
- -\wantedfigurepage
- \fi}
+\setfalse\externalfigurelevel
+\settrue \externalfigureflush
-\def\checkfigurerenderingoptions
- {\ifcase\figurestatus
- \let\@@efframe\v!on
- \fi
- \doif\@@exoption\v!frame
- {\let\@@efframe\v!on}%
- \doif\@@exoption\v!empty
- {\skipexternalfigurestrue
- \let\@@efframe\v!off}}
-
-\newtoks\externalfigurepostprocessors
-
-% \def\resetfigureusersettings
-% {\getparameters % % % hm, can be faster, like the reset
-% [\??ef]
-% [\c!type=\s!unknown,\c!method=,\c!label=,\c!symbol=\v!no,%\c!foregroundcolor=,
-% \c!object=\@@exobject,\c!preset=\v!yes,\c!split=,\c!size=,
-% \c!page=0,\c!controls=\v!no,\c!preview=\v!no,\c!repeat=\v!no,
-% \c!maxwidth=\@@exmaxwidth,\c!maxheight=\@@exmaxheight,\c!sx=1,\c!sy=1,
-% \c!scale=,\c!xscale=,\c!yscale=,\c!width=,\c!height=,\c!display=,\c!lines=,\c!grid=,
-% \c!color=,\c!conversion=\@@exconversion,\c!prefix=\@@exprefix,\c!cache=\@@excache,
-% \c!factor=,\c!hfactor=,\c!wfactor=]}
-
-\def\resetfigureusersettings
- {\let\@@eftype \s!unknown \let\@@efmethod \empty \let\@@efpreset\v!yes
- \let\@@eflabel \empty \let\@@efsize \empty \let\@@efpage \!!zerocount
- \let\@@efobject \@@exobject \let\@@efdisplay \empty
- \let\@@efsplit \empty \let\@@efcolor \empty \let\@@efsymbol\v!no
- \let\@@efcontrols \v!no \let\@@efpreview \v!no \let\@@efrepeat\v!no
- \let\@@efhfactor \empty \let\@@efwfactor \empty \let\@@effactor\empty
- \let\@@efmaxwidth \@@exmaxwidth \let\@@efmaxheight\@@exmaxheight
- \let\@@efxscale \empty \let\@@efyscale \empty \let\@@efscale \empty
- \let\@@efsx \!!plusone \let\@@efsy \!!plusone
- \let\@@efwidth \empty \let\@@efheight \empty
- \let\@@eflines \empty \let\@@efgrid \empty
- \let\@@efconversion\@@exconversion \let\@@efprefix \@@exprefix \let\@@efcache \@@excache}
-
-%D Types and Methods are a bit history. Anyhow, user scan use the
-%D type to force the handler. So, what to do with the method. We can
-%D use that one to force a handler with a given suffix, so when no
-%D type is given, but a suffix is part of the name, the method will
-%D determine the handler.
-
-\def\checkfigureusersettings
- {\doif\@@efreset\v!yes\resetexternalfigures
- \doifelsenothing\@@eflabel
- {\doifnothing\wantedfigurelabel{\let\wantedfigurelabel\wantedfigurename}}%
- {\let\wantedfigurelabel\@@eflabel}%
- \doifsomething\@@eftype
- {\doifnot\@@eftype\s!unknown
- {\edef\wantedfiguretypespec{\@@eftype}
- \let\wantedfiguremethod\wantedfiguretypespec}}%
- \doifnothing\wantedfigurepage % can be set by plug in
- {\let\wantedfigurepage\@@efpage}%
- \doif\wantedfigurepage\empty
- {\let\wantedfigurepage\!!zerocount}% 0 is signal !
- \doifsomething\@@efmethod % rather untested misusage of the remapper
- {\doifsomething\wantedfiguretype
- {\definegraphictypesynonym[\wantedfiguretype][\@@method]}}}
-
-% #1 is now obsolete
-
-\def\calculateexternalfigure[#1][#2][#3][#4][#5][#6]% \cmd label filename parent_id preset current
- {\doshowfigurestate{begin}%
- \dontcomplain
- % let's limit the search, which means that e.g. svg has to be given explicitly
- \checksupportedfiguretypes
- % recently added; we presume local use
- \restorecatcodes
- % collected resets (token list)
- \resetfigurevariables
- % analyze filename and set wanted variables
- \analyzefigurefilename{#3}{#2}%
- \doanalyzefiguredimensionsfromfile
- % handle user settings
- \resetfigureusersettings
- \dosetefparameters{#4}{#5}{#6}%
- \checkfigureusersettings
- \checkfigurecolorsettings
- % adapt settings based on suffix and/or type
- \presetfiguretypeprocessing
- % now we really start
- \checkiffigureobjectpresent % first guess, we may not yet know the typespec
- \checkifknownfigureobjectpresent
- \checkforconvertedfigure
- \checkforfigurefile
- \checkiffigureobjectpresent % to be sure, in case we now know the typespec
- \checkfigurerenderingoptions % was later, moved here
- \checknaturalfiguredimensions % inherit from global values and/or fallbacks
- % by now we know what we're dealing with (put in box and scale)
- \setextrafiguredriveroptions
- \prepackageexternalfigureobject
- % set public variables in case postprocessing needs them
- \pushpublicfigurevariables
- \setpublicfigurevariables
- \setpublicfigureconversionvariables
- \setpublicfigurescalevariables
- % package final graphic, only now we can apply backgrounds and such
- \doglobal\increment\figurenestinglevel
- \finishexternalfigure
- \doglobal\decrement\figurenestinglevel
- % restore variables
- \poppublicfigurevariables
- \doshowfigurestate{end}}
-
-%D Figure objects.
-
-\def\setfigureobject
- {\doshowfigurestate{object set : \externalfigurestamp}%
- \setobject{FIG}\externalfigurestamp}
-
-% \def\getfigureobject
-% {\doshowfigurestate{object used : \externalfigurestamp}%
-% \getobject{FIG}\externalfigurestamp}
-
-\def\getfigureobject
- {\doshowfigurestate{object used : \frozenfigurestamp}%
- \getobject{FIG}\frozenfigurestamp}
-
-\def\prepackageexternalfigureobject
- {\ifcase\figurestatus
- \doshowfiguremessage1\expandedfigurename
- \doshowfigurestate{state : figure not found (\expandedfigurename)}%
- \global\setbox\foundexternalfigure\naturalvbox
- {\doscalebox\??ef{\blackrule[\c!width=\naturalfigurewidth,\c!height=\naturalfigureheight]}}%
- \or
- \doshowfiguremessage8\expandedfigurename
- \doshowfigurestate{state : reusing existing figure}%
- \global\setbox\foundexternalfigure\naturalvbox
- {\doscalebox\??ef{\dowithfigure{\getfigureobject}}}%
- \xdef\noffigurepages{\number\getvalue{\externalfigurestamp\c!n}}%
- \or
- \doshowfiguremessage2\expandedfigurename
- \doshowfigurestate{state : using special figure}%
- \setbox\scratchbox\naturalvbox % make a dummy
- {\doscalebox\??ef{\blackrule[\c!width=\naturalfigurewidth,\c!height=\naturalfigureheight]}}%
- \global\setbox\foundexternalfigure\naturalvbox to \finalscaleboxheight
- {\vfill
- \hsize\finalscaleboxwidth
- \dowithfigure{\insertscaledfiguredriverdata}}%
- \xdef\noffigurepages{\number\nofinsertpages}%
- \else
- \ifdim\naturalfigurewidth>\zeropoint
- \ifnum\figurestatus>9
- \doshowfiguremessage3\expandedfigurename
- \else
- \doshowfiguremessage4\expandedfigurename
- \fi
- \else
- \doshowfiguremessage5\expandedfigurename
- \fi
- \doshowfigurestate{state : using found figure}% 3=self 4=rlx
- \doifelse\@@efobject\v!no
- {\donefalse}
- {\doifobjectssupportedelse\donetrue\donefalse}%
- \ifdone
- % make an object and use it
- \packageexternalfigureobject
- \setfigureobject\vbox{\box\foundexternalfigure}%
- \setxvalue{\externalfigurestamp\c!n}{\number\nofinsertpages}%
- \global\setbox\foundexternalfigure\naturalvbox
- {\doscalebox\??ef{\dowithfigure{\getfigureobject}}}%
- \xdef\noffigurepages{\number\getvalue{\externalfigurestamp\c!n}}%
- \else
- % maybe a tex figure
- \global\setbox\foundexternalfigure\naturalvbox
- {\doscalebox\??ef{\dowithfigure{\box\foundexternalfigure}}}%
- \xdef\noffigurepages{\number\nofinsertpages}%
- \fi
- \fi
- \global\wd\foundexternalfigure\finalscaleboxwidth
- \global\ht\foundexternalfigure\finalscaleboxheight
- \global\let\lastfigureobjectname\externalfigurestamp
- \doresetobjects} % clean up driver left overs
-
-\def\packageexternalfigureobject
- {\global\setbox\foundexternalfigure\vbox to \naturalfigureheight
- {\vfill
- \ifdim\wd\foundexternalfigure=\zeropoint
- \setextrafiguredriveroptions
- \insertunscaledfiguredriverdata
- \else\ifskipexternalfigures
- \ruledhbox{\backgroundline[\@@efsplitcolor]{\fakebox\foundexternalfigure}}%
- \else
- \box\foundexternalfigure
- \fi\fi}%
- \wd\foundexternalfigure\naturalfigurewidth
- \ht\foundexternalfigure\naturalfigureheight}
-
-\def\finishexternalfigure % here we use \figurevariables
- {\global\setbox\foundexternalfigure\vbox
- {\forgetall
- \ifcase\figurestatus
- \resetsystemmode\v!figure % todo, also: \v!resource
- \else
- \setsystemmode \v!figure % todo, also: \v!resource
- \fi
- \ifconditional\externalfigureflush
- \ifconditional\externalfigurelevel % probably background
- \ifskipexternalfigures
- % nothing
- \fakebox\foundexternalfigure
- \else\ifcase\figurestatus
- % nothing
- \else\ifnum\splitexternalfigure=\plustwo\else
- \the\externalfigurepostprocessors
- \box\foundexternalfigure
- \fi\fi\fi
- \else
- \iftrialtypesetting \else \feedbackexternalfigure \fi
- \settrue\externalfigurelevel
- \ifskipexternalfigures
- \ifcase\figurestatus
- \externalfigurereplacement\figurelabel\figurefilename{unknown}%
- \else
- \externalfigurereplacement\figurelabel\figurefullname{skipped}%
- \fi
- \else\ifcase\figurestatus
- \externalfigurereplacement\figurelabel\figurefilename{unknown}%
- \else\ifnum\splitexternalfigure=\plustwo
- \backgroundline[\@@efsplitcolor]{\fakebox\foundexternalfigure}%
- \else
- \the\externalfigurepostprocessors
- \doifelse\@@efreset\v!yes
- {\wd\foundexternalfigure\figurewidth
- \ht\foundexternalfigure\figureheight
- \dp\foundexternalfigure\zeropoint
- \box\foundexternalfigure}
- {\localframed % should also be applied to high res !
- [\??ef]
- [\c!offset=\v!overlay,
- \c!width=\figurewidth,
- \c!height=\figureheight]
- {\vfilll
- \ifnum\splitexternalfigure=\plusone
- % hm, eigenlijk in dit geval achtergrondkleur
- \hidesplitcolorfalse % really needed
- \backgroundline[\@@efsplitcolor]{\box\foundexternalfigure}%
- \else % = 0, no split mode
- \box\foundexternalfigure
- \fi}}%
- \fi\fi\fi
- \fi
- \else
- % maybe also \the\externalfigurepostprocessors
- \iftrialtypesetting \else \feedbackexternalfigure \fi
- \fi}}
-
-\def\insertfiguredriverdata#1#2%
- {\edef\@@DriverImageWidth {\the\dimexpr#1\relax}%
- \edef\@@DriverImageHeight{\the\dimexpr#2\relax}%
- \let \@@DriverImageFile \wantedfigurefullname
- \let \@@DriverImageType \wantedfiguretypespec
- \let \@@DriverImageMethod \wantedfiguremethod
- \let \@@DriverImageLabel \wantedfigurelabel
- \let \@@DriverImagePage \wantedfigurepage
- \doinsertfile}
-
-\def\insertunscaledfiguredriverdata
- {\insertfiguredriverdata\naturalfigurewidth\naturalfigureheight}
-
-\def\insertscaledfiguredriverdata
- {\insertfiguredriverdata\finalscaleboxwidth\finalscaleboxheight}
+\def\doplaceexternalfigure[#1][#2][#3][#4][#5]%
+ {\doifsomething{#2}% catches \defineexternalfigure dummies
+ {\bgroup
+ \pushmacro\textunderscore
+ \edef\textunderscore{\string_}% brrr, temp hack, still needed?
+ \calculateexternalfigure [][#1][#2][#3][#4][#5]% [] is dummy dwcomp
+ \calculateexternalscreenfigure[][#1][#2][#3][#4][#5]% [] is dummy dwcomp
+ \popmacro\textunderscore
+ \box\foundexternalfigure
+ \egroup}}
\def\externalfigurereplacement#1#2#3%
{\setupcolors
@@ -878,449 +67,6 @@
name: \expanded{\verbatimstring{#1}}\\%
state: \expanded{\verbatimstring{placeholder}}}}
-\def\registerexternalfigure % no placement, handy for preprocessing
- {\dotripleempty\doregisterexternalfigure}
-
-\def\doregisterexternalfigure[#1][#2][#3]%
- {\bgroup
- \setfalse\externalfigureflush
- \externalfigure[#1][#2][#3]% or \doexternalfigure
- \egroup}
-
-\let\feedbackexternalfigure\relax % \gobblefourarguments
-\let\dowithfigure \relax
-
-%D Conversion stuff:
-
-\newcount\nofconversionfigures
-
-\def\resetwantedconversionvariables
- {\let\wantedconversionpath \empty % these point to the to be converted graphic
- \let\wantedconversionname \empty
- \let\wantedconversiontype \empty
- \let\wantedconversioncache \empty
- \let\wantedconversionprefix\empty}
-
-\resetwantedconversionvariables
-
-\def\checkforconvertedfigure
- {\ifcase\figurestatus
- \resetwantedconversionvariables
- \doifsomething\@@efconversion
- {\global\advance\nofconversionfigures\plusone
- \edef\wantedfigureconversion{\@@efconversion}%
- \edef\wantedconversioncache {\@@efcache}%
- \edef\wantedconversionprefix{\@@efprefix}%
- \doshowfigurestate{checking paths : \figurepathlist}%
- \processcommacommand[\figurepathlist]\dolocatefigureconversionfile
- \ifcase\figurestatus
- \doshowfigurestate{remark : no conversion file found}%
- \else
- \doshowfigurestate{remark : conversion file found}%
- \chardef\figurestatus\zerocount
- \fi
- \let\wantedconversionname\wantedfigurename
- \edef\wantedfigurename{\wantedconversionprefix\wantedfigurename}%
- \ifx\wantedconversioncache\empty
- \let \wantedfigurepath \wantedconversionpath
- \else
- \edef\wantedfigurepath{\wantedconversionpath/\@@efcache}%
- \fi
- \let\wantedfiguretype \empty
- \let\wantedfiguretypelist\figuretypes % hm, why needed
- \doshowfigurestate{conversion path : \wantedconversionpath}%
- \doshowfigurestate{conversion name : \wantedconversionname}}%
- \fi}
-
-\def\dolocatefigureconversionfile#1%
- {\ifcase\figurestatus
- \setwantedfigurefullname{#1}\wantedfigurename\wantedfiguretype
- \doshowfigurestate{locating original : \wantedfigurefullname}%
- \doiffile\wantedfigurefullname
- {\def\wantedconversionpath{#1}%
- \let\wantedconversionname\wantedfigurename
- \let\wantedconversiontype\wantedfiguretype
- \chardef\figurestatus\plusfive}%
- \fi}
-
-\def\setpublicfigureconversionvariables % also prefix, cache
- {\doifsomething\@@efconversion
- {\doifmode{\systemmodeprefix\v!first}
- {\let\figurefilepath\wantedconversionpath
- \let\figurefilename\wantedconversionname
- \let\figurefiletype\wantedconversiontype
- \let\figurefileconversion\wantedfigureconversion
- \def\figurefullname{\wantedconversionpath/\wantedconversionname.\wantedconversiontype}}}}
-
-%D In \PDF\ one can specify an alternative graphic. This means
-%D that for instance a low resolution graphic can be used for
-%D viewing and a high res one for printing. Because this
-%D feature depends much on the driver, here we only take care
-%D of perparations. It is up to the special driver to handle
-%D the inclusion. The driver routines can change the content of
-%D box \type {\foundexternalfigure} if suitable.
-%D
-%D One complication is for instance that an alternative may
-%D not itself have an alternative, and these kind of situations
-%D are best handled by the driver.
-
-\let\lastfigureobjectname\empty
-
-%D The next macro does not work well with figure bases yet.
-
-\def\calculateexternalscreenfigure[#1][#2][#3][#4][#5][#6]%
- {\ifx\@@efdisplay\empty\else
- \doifnot\@@efobject\v!no
- {\doifobjectssupportedelse
- {\doifspecialavailableelse\doregisterfigure
- {\doshowfigurestate{screen alternative : start}%
- \bgroup
- \dosetefparameters{#4}{#5}{#6}%
- \doregisterfigure{FIG}{\lastfigureobjectname}%
- \let\@@ef@@scherm\@@efdisplay
- \calculateexternalfigure[#1][\@@ef@@scherm][\@@ef@@scherm][#4,\c!display=][#5][#6]%
- \doshowfigurestate{screen alternative : stop}%
- \egroup}
- {}}
- {}}%
- \fi}
-
-\def\getfiguredimensions
- {\dodoubleempty\dogetfiguredimensions}
-
-\def\dogetfiguredimensions[#1][#2]%
- {{\let\immediate\relax % very dirty but prevents flushing, will change
- \setbox0\hbox{\externalfigure[#1][#2,\c!display=,\c!object=\v!no]}}}
-
-% use the next one when the object must be forgotten (xobj
-% nums can migrate to the next object; maybe it should
-% always be done; todo ....
-
-\def\getfiguredimensionsonly
- {\dodoubleempty\dogetfiguredimensionsonly}
-
-\def\dogetfiguredimensionsonly[#1][#2]%
- {\dogetfiguredimensions[#1][#2]%
- \doresetobjects}
-
-%D Size determination.
-%D
-%D An analyzer must set the following dimensions (global macros):
-%D
-%D \starttyping
-%D \analyzedfigurewidth
-%D \analyzedfigureheight
-%D \stoptyping
-%D
-%D And afterwards, when succeeded, call:
-%D
-%D \starttyping
-%D \setanalyzedfiguredimensions{number>=10}
-%D \stoptyping
-%D
-%D Numbers upto 9 are reserved for special purposes:
-%D
-%D \starttabulate
-%D \NC 0 \NC not found \NC \NR
-%D \NC 1 \NC object (will be reused) \NC \NR
-%D \NC 2 \NC found but no dimensions (e.g. special annotation) \NC \NR
-%D \stoptabulate
-
-\let\doanalyzefiguredimensionsfromfile\relax % hook for figuredatabase
-\let\doanalyzefiguredimensionsinternal\relax
-\let\doanalyzefiguredimensionsexternal\relax % hook for rli support (see later)
-\let\doanalyzefiguredimensionsfallback\relax
-
-\def\doanalyzefiguredimensions
- {\doiffileinsertionsupportedelse\wantedfiguretypespec
- {\doiffileelse\wantedfigurefullname
- {\doshowfigurestate{analyzing : \wantedfigurefullname}%
- \doanalyzefiguredimensionsinternal
- \doanalyzefiguredimensionsexternal
- \doanalyzefiguredimensionsfallback}
- {\doshowfigurestate{not found : \wantedfigurefullname}}}
- {}}
-
-\def\setanalyzedfiguredimensions#1%
- {\ifdim\analyzedfigurewidth>\zeropoint
- \ifdim\analyzedfigureheight>\zeropoint
- \determinedfigurewidth \analyzedfigurewidth
- \determinedfigureheight\analyzedfigureheight
- \chardef\figurestatus #1\relax
- \doshowfigurestate{dimensions :
- \the\dimexpr\analyzedfigurewidth\relax\space x\space
- \the\dimexpr\analyzedfigureheight\relax}%
- \else
- \determinedfigurewidth \zeropoint
- \determinedfigureheight\zeropoint
- \chardef\figurestatus \zerocount
- \fi
- \else
- \determinedfigurewidth \zeropoint
- \determinedfigureheight\zeropoint
- \chardef\figurestatus \zerocount
- \fi}
-
-%D We can remap types. This is to be dealt with in the driver files.
-
-\def\definegraphictypesynonym
- {\dodoubleargument\dodefinegraphictypesynonym}
-
-\def\dodefinegraphictypesynonym[#1][#2]%
- {\setvalue{\??ef:\??ex:#1}{#2}}
-
-\def\truegraphictype#1%
- {\ifcsname\??ef:\??ex:#1\endcsname
- \expandafter\truegraphictype\csname\??ef:\??ex:#1\endcsname\else#1%
- \fi}
-
-\definegraphictypesynonym[epdf] [pdf]
-\definegraphictypesynonym[jpeg] [jpg]
-\definegraphictypesynonym[jp2] [jpg]
-\definegraphictypesynonym[jbig] [jb2]
-\definegraphictypesynonym[jbig2][jb2]
-\definegraphictypesynonym[jbg] [jb2]
-
-%D The self method (mostly used) uses the driver.
-
-% todo: when zero width mps, ok
-%
-% analyzer must set the analyzed dimensions
-
-\def\doanalyzefiguredimensionsinternal
- {\ifcase\figurestatus
- \let\@@DriverImageFile\wantedfigurefullname
- \let\@@DriverImagePage\wantedfigurepage
- \let\@@DriverImageType\wantedfiguretypespec
- % use internal when available, otherwise try driver (\dogetfiguresize)
- \executeifdefined{dogetfiguresize\wantedfiguretypespec}\dogetfiguresize
- \setanalyzedfiguredimensions\!!ten
- \fi}
-
-%D The tex method.
-
-\def\dogetfiguresizetex
- {\ifcase\figurestatus
- \global\setbox\foundexternalfigure\vbox
- {\insidefloattrue
- \forgetall
- \blank[\v!disable]% niet meer weg !
- \startreadingfile
- \readfile\wantedfigurefullname \donothing \donothing
- \stopreadingfile
- \endgraf
- \removelastskip}%
- \global\setbox\foundexternalfigure\hbox
- {\raise\dp\foundexternalfigure\box\foundexternalfigure}%
- \xdef\analyzedfigurewidth {\the\wd\foundexternalfigure}%
- \xdef\analyzedfigureheight{\the\ht\foundexternalfigure}%
- \fi}
-
-\let\dogetfiguresizetmp \dogetfiguresizetex
-\let\dogetfiguresizebuffer\dogetfiguresizetex
-
-%D The eps, mps and svg files are read directly.
-
-\def\dogetfiguresizeeps
- {\dogetEPSboundingbox\wantedfigurefullname\!!widtha\!!heighta\!!widthb\!!heightb
- \xdef\analyzedfigurewidth {\the\!!widthb}%
- \xdef\analyzedfigureheight{\the\!!heightb}}
-
-\let\dogetfiguresizemps\dogetfiguresizeeps
-
-\def\dogetfiguresizesvg
- {\doifinset\wantedfiguretypespec{\c!svg}
- {\startnointerference
- \startXMLignore
- \defineXMLcommand[svg][width=100,height=75]
- {\doifdimensionelse{\XMLop{width}}
- {\xdef\analyzedfigurewidth {\the\dimexpr\XMLop{width}\relax}}
- {\xdef\analyzedfigurewidth {\the\dimexpr\XMLop{width}\onebasepoint\relax}}%
- \doifdimensionelse{\XMLop{height}}
- {\xdef\analyzedfigurewidth {\the\dimexpr\XMLop{height}\relax}}
- {\xdef\analyzedfigurewidth {\the\dimexpr\XMLop{height}\onebasepoint\relax}}%
- \endinput}%
- \processXMLfilegrouped\wantedfigurefullname
- \stopXMLignore
- \stopnointerference}}
-
-%D Do some checking on the filename.
-
-\newconditional \figurefileisqualified
-
-\def\setfigurepathlist
- {\let\figurepathlist\empty
- \expanded{\doifinset{\v!global }{\@@exlocation}}
- {\let\figurepathlist\@@exdirectory}%
- \expanded{\doifinset{\v!local }{\@@exlocation}}
- {\prependtocommalist\f!currentpath\figurepathlist}%
- \expanded{\doifinset{\v!default}{\@@exlocation}}
- {\appendtocommalist\defaultfigurepathsignal\figurepathlist}}
-
-\def\analyzefigurefilename#1#2%
- {\sanitizefilename#1\to\expandedfigurename
- \expanded{\checkfilename{\expandedfigurename}}%
- \ifcase\kindoffile
- \splitfigurefilename
- \ifcase\splitoffkind
- \let\wantedfigurepath\empty % no . either
- \setfigurepathlist
- \setfalse\figurefileisqualified
- \else
- \splitfigurefilename
- \let\figurepathlist\wantedfigurepath
- \let\wantedfigurepath\empty
- \settrue\figurefileisqualified
- \fi
- \else % fully qualified
- \splitfigurefilename
- \let\figurepathlist\wantedfigurepath
- \let\wantedfigurepath\empty
- \settrue\figurefileisqualified
- \fi
- \ifx\figurepathlist\empty
- \let\figurepathlist\defaultfigurepathsignal % will prepend no path
- \fi
- \doifelsenothing\wantedfiguretype
- {\doifparentfileelse\wantedfigurename
- {\@EA\removefromcommalist\@EA{\jobsuffix }\wantedfiguretypelist
- \@EA\removefromcommalist\@EA{\jobfilesuffix}\wantedfiguretypelist}
- {}}
- {\let\wantedfiguretypelist\empty
- \let\wantedfiguretypespec\wantedfiguretype}%
- \edef\wantedfigurelabel{#2}%
- \doshowfigurestate{type check : \ifx\wantedfiguretypelist\empty forced type \wantedfiguretypespec\else\wantedfiguretypelist\fi}%
- \doshowfigurestate{file specs : \wantedfigurefull\space [\wantedfigurepath] [\wantedfigurename] [\wantedfiguretype]}%
- \doshowfigurestate{file type : \ifconditional\figurefileisqualified qualified\else simple\fi}}
-
-% \def\setwantedfigurefullname#1#2#3% path name spec
-% {\edef\wantedfiguretypespec{#3}%
-% \doifelse{#1}\defaultfigurepathsignal % default is actually empty i.e. system lookup
-% {\edef\wantedfigurefullname {#2.\wantedfiguretypespec}}
-% {\edef\wantedfigurefullname{#1/#2.\wantedfiguretypespec}}%
-% }
-
-\def\setwantedfigurefullname#1#2#3% path name spec
- {\ifx\wantedfiguremethod\empty
- % the either explicit or gambled typespec determines the method
- \edef\wantedfiguretypespec{#3}%
- \doifelse{#1}\defaultfigurepathsignal
- {\edef\wantedfigurefullname {#2.\wantedfiguretypespec}}
- {\edef\wantedfigurefullname{#1/#2.\wantedfiguretypespec}}%
- \else\ifx\wantedfiguretype\empty %
- % the typespec (probably the same as the method) determines the suffix
- \doifelse{#1}\defaultfigurepathsignal
- {\edef\wantedfigurefullname {#2.\wantedfiguretypespec}}
- {\edef\wantedfigurefullname{#1/#2.\wantedfiguretypespec}}%
- \let\wantedfiguretypespec\wantedfiguremethod
- \else
- % the given suffix is used
- \let\wantedfiguretypespec\wantedfiguremethod
- \doifelse{#1}\defaultfigurepathsignal
- {\edef\wantedfigurefullname {#2.\wantedfiguretype}}
- {\edef\wantedfigurefullname{#1/#2.\wantedfiguretype}}%
- \fi\fi}
-
-\def\splitfigurefilename
- {\splitfilename\expandedfigurename
- \let\wantedfigurefull\splitofffull
- \let\wantedfigurepath\splitoffpath
- \let\wantedfigurename\splitoffname
- \let\wantedfigurebase\splitoffbase
- \let\wantedfiguretype\splitofftype}
-
-\def\analyzefigurefiles
- {\ifconditional\figurefileisqualified
- \ifx\wantedfiguretype\empty
- \doshowfigurestate{locating : unknown type}%
- \doanalyzeunknownfiguretype
- \else
- % this file or none
- \doshowfigurestate{locating : known type}%
- \doanalyzequalifiedfigure
- \fi
- \else
- \ifx\wantedfiguretype\empty
- % locate best fit / check support
- \doshowfigurestate{locating : best fit}%
- \doanalyzeunknownfiguretype
- \else
- % only check on paths
- \doshowfigurestate{locating : known types}%
- \doanalyzeknownfiguretype
- \fi
- \fi}
-
-\def\doanalyzequalifiedfigure
- {\let\wantedfigurefullname\wantedfigurefull
- \let\wantedfiguretypespec\wantedfiguretype
- \doshowfigurestate{forced type : \wantedfiguretype}%
- \doshowfigurestate{identifying : \wantedfigurefullname}%
- \doanalyzefiguredimensions}
-
-\def\doanalyzeknownfiguretype
- {\doshowfigurestate{using paths : \figurepathlist}%
- \doshowfigurestate{known type : \wantedfiguretype}%
- \doshowfigurestate{identifying : \wantedfigurename}%
- \let\wantedfiguretypespec\wantedfiguretype
- \processcommacommand[\figurepathlist]\dodoanalyzeknownfiguretype}
-
-\def\dodoanalyzeknownfiguretype#1% path
- {\ifcase\figurestatus
- \setwantedfigurefullname{#1}\wantedfigurename\wantedfiguretype
- \doanalyzefiguredimensions
- \fi}
-
-\def\doanalyzeunknownfiguretype
- {\doshowfigurestate{using paths : \figurepathlist}%
- \doshowfigurestate{using types : \wantedfiguretypelist}%
- \doshowfigurestate{identifying : \wantedfigurename}%
- \processcommacommand[\wantedfiguretypelist]\dodoanalyzeunknownfiguretype}
-
-\def\dodoanalyzeunknownfiguretype#1%
- {\processcommacommand[\figurepathlist]{\dododoanalyzeunknownfiguretype{#1}}}
-
-\def\dododoanalyzeunknownfiguretype#1#2% type path
- {\ifcase\figurestatus
- \setwantedfigurefullname{#2}\wantedfigurename{#1}% path spec
- \doanalyzefiguredimensions
- \fi}
-
-%D Some files, take for instance movies, cannot easilly be
-%D parsed on dimensions, that is, not yet. Although the current
-%D mechanism has no problems with this, as long as the user
-%D specified width and height reflect the right aspect ratio.
-%D Nevertheless, when one does not want any scanning done, one
-%D can disable \type{preset}. When no preset is needed, we only
-%D locate the file.
-
-\def\doanalyzefiguredimensionsfallback
- {\ifcase\figurestatus
- \doshowfigurestate{warning : assuming adaptive figure}%
- \xdef\analyzedfigurewidth {\the\dimexpr\@@efwidth +\zeropoint\relax}%
- \xdef\analyzedfigureheight{\the\dimexpr\@@efheight+\zeropoint\relax}%
- \setanalyzedfiguredimensions\plustwo
- \fi}
-
-\presetlocalframed[\??ef]
-
-\newconditional\externalfigurelevel % true=background false=normal
-\newconditional\externalfigureflush % true=place false=ignore
-
-\setfalse\externalfigurelevel
-\settrue \externalfigureflush
-
-\def\doplaceexternalfigure[#1][#2][#3][#4][#5]%
- {\doifsomething{#2}% catches \defineexternalfigure dummies
- {\bgroup
- \pushmacro\textunderscore
- \edef\textunderscore{\string_}% brrr, temp hack, still needed?
- \calculateexternalfigure [][#1][#2][#3][#4][#5]% [] is dummy dwcomp
- \calculateexternalscreenfigure[][#1][#2][#3][#4][#5]% [] is dummy dwcomp
- \popmacro\textunderscore
- \box\foundexternalfigure
- \egroup}}
-
% new: more convenient/efficient than
%
% \use..[a][a][setting] \externalfigure[b][a]
@@ -1406,7 +152,7 @@
\def\doexternalfigure[#1][#2][#3]% [label][file][settings] | [file][settings] | [file][parent][settings]
{\bgroup
\doifelsenothing{#1}
- {\framed[\c!width=\defaultfigurewidth,\c!height=\defaultfigureheight]{external\\figure}}
+ {\framed[\c!width=\defaultfigurewidth,\c!height=\defaultfigureheight]{external\\figure\\no name}}
{\doifundefinedelse{\??ef\??ef#1}
{\useexternalfigure[\s!dummy][#1][#2][#3]%
\getvalue{\??ef\??ef\s!dummy}[]} % [] is dummy arg 5
@@ -1431,7 +177,7 @@
\def\overlayfigure#1%
{\externalfigure[#1][\c!width=\overlaywidth,\c!height=\overlayheight]}
-%D Still undocumented!
+%D Still undocumented! No one uses it I think, better be done with layers.
\newcount\efreference
\newdimen\efxsteps
@@ -1720,7 +466,7 @@
\externalfigure[\bufferprefix typeset-\noftypesetbuffers.pdf][#2]%
\egroup}
-% for me only (manuals and sucn)
+% for me only (manuals and such)
\definesystemvariable{tz}
@@ -1739,10 +485,6 @@
\externalfigure[\typesetfilename.pdf][#2,#4]}
\appendtoks \setupexternalfigures[\c!option=\v!empty] \to \everyfastmode
-\appendtoks \runMPgraphicsfalse \to \everyfastmode
-\appendtoks \insertMPgraphicsfalse \to \everyfastmode
-
-\appendtoks \flushMPgraphics \to \everygoodbye % \everylastshipout
\setupexternalfigures
[\c!option=,
diff --git a/Master/texmf-dist/tex/context/base/core-fil.tex b/Master/texmf-dist/tex/context/base/core-fil.tex
index c3a7c52d1a5..c84534ea699 100644
--- a/Master/texmf-dist/tex/context/base/core-fil.tex
+++ b/Master/texmf-dist/tex/context/base/core-fil.tex
@@ -173,6 +173,26 @@
\newconditional\moduleisloaded
+% \def\dododousemodules#1#2% no \unprotect/\protect when loading,
+% {\relax % since we need to use ? ! unprotected
+% \ifconditional\moduleisloaded % sometimes (see xtag-map)
+% \let\next\relax % or: \expandafter\gobbleoneargument
+% \else
+% \makeshortfilename[#1\truefilename{#2}]% beware: *- is not part of syn
+% \doifelseflagged\shortfilename
+% {\showmessage\m!systems7{#2 (line \number\inputlineno)}%
+% \settrue\moduleisloaded
+% \let\next\relax}
+% {\doglobal\setflag\shortfilename
+% \def\next
+% {\startreadingfile
+% \readsysfile\shortfilename
+% {\showmessage\m!systems5{#2}\settrue\moduleisloaded}
+% \donothing
+% \stopreadingfile}}%
+% \fi
+% \next}
+
\def\dododousemodules#1#2% no \unprotect/\protect when loading,
{\relax % since we need to use ? ! unprotected
\ifconditional\moduleisloaded % sometimes (see xtag-map)
@@ -188,7 +208,9 @@
{\startreadingfile
\readsysfile\shortfilename
{\showmessage\m!systems5{#2}\settrue\moduleisloaded}
- \donothing
+ {\readsysfile{\shortfilename.\mksuffix} % new
+ {\showmessage\m!systems5{#2 (\mksuffix)}\settrue\moduleisloaded}
+ \donothing}%
\stopreadingfile}}%
\fi
\next}
diff --git a/Master/texmf-dist/tex/context/base/core-fld.tex b/Master/texmf-dist/tex/context/base/core-fld.tex
index 595a9188fee..3b1ce9b3fc6 100644
--- a/Master/texmf-dist/tex/context/base/core-fld.tex
+++ b/Master/texmf-dist/tex/context/base/core-fld.tex
@@ -2,7 +2,7 @@
%D [ file=core-fld,
%D version=1997.05.18,
%D title=\CONTEXT\ Core Macros,
-%D subtitle=Fill||in fields,
+%D subtitle=Fill in fields,
%D author=Hans Hagen,
%D date=\currentdate,
%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
diff --git a/Master/texmf-dist/tex/context/base/core-fnt.tex b/Master/texmf-dist/tex/context/base/core-fnt.tex
index dea5d35713d..15f9f0e5cd2 100644
--- a/Master/texmf-dist/tex/context/base/core-fnt.tex
+++ b/Master/texmf-dist/tex/context/base/core-fnt.tex
@@ -436,16 +436,16 @@
%D \showsetup{setupunderbar}
%D
%D The alternatives show up as
-%D {\setupunderbar [alternativevariant=a]\underbar{alternative a}},
-%D {\setupunderbar [alternativevariant=b]\underbar{alternative b}},
-%D {\setupunderbar [alternativevariant=c]\underbar{alternative c}}
+%D {\setupunderbar [alternative=a]\underbar{alternative a}},
+%D {\setupunderbar [alternative=b]\underbar{alternative b}},
+%D {\setupunderbar [alternative=c]\underbar{alternative c}}
%D and
%D {\setupunderbar [rulethickness=1pt]\underbar{1pt width}},
%D {\setupunderbar [rulethickness=2pt]\underbar{2pt width}},
%D or whatever. Because \type{\overstrike} uses the same
%D method, the settings also apply to that macro.
-\newcounter\underbarlevel
+\newcount\underbarlevel
\def\underbarmethoda#1#2#3% RULE
{\hbox to #1{\vrule\!!width#1\!!height#2\!!depth#3}}
@@ -481,7 +481,6 @@
\dimen0=\@@onbottomoffset
\dimen0=\underbarlevel\dimen0
\ifdone \else
- %\advance\dimen0 -1pt
\advance\dimen0 -\strutht
\fi
\dimen2\dimen0
@@ -507,7 +506,7 @@
\unexpanded\def\underbar
{\bgroup
- \increment\underbarlevel
+ \advance\underbarlevel\plusone
\donetrue
\dounderbar\betweenunderbarwords}
@@ -522,19 +521,19 @@
\unexpanded\def\underbars
{\bgroup
- \increment\underbarlevel
+ \advance\underbarlevel\plusone
\donetrue
\dounderbar\betweenunderbarspaces}
\unexpanded\def\overbar
{\bgroup
- \decrement\underbarlevel
+ \advance\underbarlevel\minusone
\donefalse
\dounderbar\betweenunderbarwords}
\unexpanded\def\overbars
{\bgroup
- \decrement\underbarlevel
+ \advance\underbarlevel\minusone
\donefalse
\dounderbar\betweenunderbarspaces}
diff --git a/Master/texmf-dist/tex/context/base/core-grd.tex b/Master/texmf-dist/tex/context/base/core-grd.tex
index a1167cebc88..5db96645524 100644
--- a/Master/texmf-dist/tex/context/base/core-grd.tex
+++ b/Master/texmf-dist/tex/context/base/core-grd.tex
@@ -100,6 +100,7 @@
\wd0\hsize
\dp0\strutdp
\nointerlineskip
+ \forgetall
\ruledvbox{\box0}%
\egroup
\prevdepth\strutdp}%
@@ -154,33 +155,74 @@
% m-steps.tex, where we apply a \localhsize to the \vbox, in
% order to follow narrower and side floats !
+% \def\startbaselinecorrection
+% {\baselinecorrection
+% \ifvmode
+% \bgroup
+% \setbox\scratchbox\vbox\bgroup
+% \ignorespaces
+% \let\stopbaselinecorrection\dostopbaselinecorrection
+% \else
+% \let\stopbaselinecorrection\relax
+% \fi}
+
+% \def\dostopbaselinecorrection % I have to check columns yet.
+% {\endgraf
+% \egroup
+% \topbaselinecorrection
+% \box\scratchbox
+% \botbaselinecorrection
+% \egroup}
+
+% \let\stopbaselinecorrection=\relax
+
\def\startbaselinecorrection
- {\baselinecorrection
- \ifvmode
- \bgroup
- \setbox\scratchbox\vbox\bgroup
- \ignorespaces
- \let\stopbaselinecorrection\dostopbaselinecorrection
- \else
- \let\stopbaselinecorrection\relax
+ {\bgroup
+ \let\stopbaselinecorrection\egroup
+ \ifcase\baselinecorrectionmode
+ \or % normal
+ \baselinecorrection
+ \ifvmode
+ \setbox\scratchbox\vbox\bgroup\ignorespaces
+ \let\stopbaselinecorrection\donormalstopbaselinecorrection
+ \fi
+ \or % off
+ \or % force
+ \baselinecorrection
+ \ifvmode
+ \setbox\scratchbox\vbox\bgroup\ignorespaces
+ \let\stopbaselinecorrection\doforcedstopbaselinecorrection
+ \fi
\fi}
-%D We do a bit more checking than needed. The pageborder check
-%D is not needed, but I want to look the visualization as good
-%D as possible too.
+\let\stopbaselinecorrection\relax
-\def\dostopbaselinecorrection % I have to check columns yet.
- {\endgraf
- \egroup
+\def\donormalstopbaselinecorrection % I have to check columns yet.
+ {\egroup
\topbaselinecorrection
\box\scratchbox
\botbaselinecorrection
\egroup}
-\let\stopbaselinecorrection=\relax
+\def\doforcedstopbaselinecorrection % I have to check columns yet.
+ {\egroup
+ \forcedtopbaselinecorrection
+ \box\scratchbox
+ \forcedbotbaselinecorrection
+ \egroup}
-\def\offbaselinecorrection % Can be used inside correction.
- {\def\startbaselinecorrection{\bgroup\let\stopbaselinecorrection\egroup}}
+%D We do a bit more checking than needed. The pageborder check
+%D is not needed, but I want to look the visualization as good
+%D as possible too.
+
+% \def\offbaselinecorrection % Can be used inside correction.
+% {\def\startbaselinecorrection{\bgroup\let\stopbaselinecorrection\egroup}}
+
+\chardef\baselinecorrectionmode\plusone
+
+\def\onbaselinecorrection {\chardef\baselinecorrectionmode\plusone }
+\def\offbaselinecorrection {\chardef\baselinecorrectionmode\plustwo }
+\def\forcebaselinecorrection{\chardef\baselinecorrectionmode\plusthree}
%D \macros
%D {topbaselinecorrection,botbaselinecorrection}
@@ -188,58 +230,30 @@
%D The actual top and bottom corrections are implemented as:
% \def\topbaselinecorrection
-% {\ifvmode
+% {\ifvmode \ifdim\pagegoal<\maxdimen
% \bgroup
% \setbaselinecorrections
-% \ifdim\pagegoal<\maxdimen
-% \ifdim\pagetotal<\pagegoal
-% \dimen2=\ht\scratchbox
-% \advance\dimen2 \dp\scratchbox
-% \advance\dimen2 \parskip
-% \advance\dimen2 \thetopbaselinecorrection
-% \advance\dimen2 \thebotbaselinecorrection
-% \dimen0=\pagetotal
-% \advance\dimen0 \dimen2
-% % \ifdim\dimen0<\pagegoal % does more harm than good
-% \witruimte
-% \nointerlineskip
-% \dotopbaselinecorrection
-% % \else
-% % \ifinsidecolumns
-% % % \vskip\dimen2 % this could definitely
-% % % \penalty\outputpenalty % be improved
-% % \else
-% % % %
-% % % \vfill\eject % pretty old and wrong
-% % %
-% % % \nobreak % needed for headings
-% % % \vskip\parskip % but often splits
-% % % \vskip\dimen2 % normal paragraphs
-% % % \penalty\outputpenalty % and therefore
-% % % \vskip-\dimen2 % obsolete
-% % %
-% % % do nothing, sub optimal spacing after headings
-% % % still to be sorted out; use manuals as test case
-% % \fi
-% % \fi
-% \else % probably a preceding
-% \witruimte % one-liner
-% \nointerlineskip
-% \dotopbaselinecorrection
-% \fi
-% \fi
+% \whitespace
+% \nointerlineskip
+% \dotopbaselinecorrection
% \egroup
-% \fi}
+% \fi \fi}
+
\def\topbaselinecorrection
{\ifvmode \ifdim\pagegoal<\maxdimen
+ \forcedtopbaselinecorrection
+ \fi \fi}
+
+\def\forcedtopbaselinecorrection
+ {\ifvmode
\bgroup
\setbaselinecorrections
\whitespace
\nointerlineskip
\dotopbaselinecorrection
\egroup
- \fi \fi}
+ \fi}
\def\botbaselinecorrection
{\ifvmode
@@ -251,6 +265,8 @@
\egroup
\fi}
+\let\forcedbotbaselinecorrection\botbaselinecorrection
+
%D Still very experimental and therefore undocumented.
\newif\ifgridsnapping % UNDER DEVELOPMENT, USE WITH CARE
@@ -288,12 +304,14 @@
\let\presnapskip \!!zeropoint \def\presnap {-}
\let\postsnapskip\!!zeropoint \let\postsnap\presnap
+\newcount\currentgridsnap
+
\def\tracedsnapping
{\iftracegridsnapping
\llap
{\startlayoutcomponent{gridsnaps}{grid snaps}%
\infofont
- \doglobal\increment\currentsnap
+ \global\advance\currentgridsnap\plusone
\color[grid:three]{\vl\presnapskip
\vl\presnap
\vl\postsnap
@@ -304,7 +322,7 @@
\extrasnapsign\extrasnapsign\or
0\extrasnapsign\fi
\fi
- \vl\currentsnap\vl}%
+ \vl\the\currentgridsnap\vl}%
\stoplayoutcomponent}%
\fi}
@@ -356,10 +374,13 @@
{\ifforcepresnap
\ifvmode \else \par \fi % new
% we don't want top of page space when 'top' option
- %\verticalstrut\nobreak\vskip-\struttotal
- %\verticalstrut\vskip-\struttotal
- % nobreak really needed
- \dosomebreak\allowbreak\verticalstrut\nobreak\vskip-\struttotal % new: \dosomebreak
+ % \verticalstrut\nobreak\vskip-\struttotal
+ % \verticalstrut\vskip-\struttotal
+ % \nobreak really needed
+ % \dosomebreak\allowbreak % no: spoils heads, so only under know situation, not in snapper
+ \verticalstrut
+ \nobreak
+ \vskip-\struttotal
%\ifdim\pagetotal>\topskip \else
% eigenlijk signal
%\writestatus{grid}{removing dummy at top of page}%
@@ -686,6 +707,7 @@
\botbaselinecorrection
\vss}%
\setbox\nextbox\hbox{\lower\strutdp\flushnextbox}%
+ \forgeteverypar % new per 3/4/2008, prevents duplicate pos nodes resulting in extra whitespace
\noindent\snaptogrid\vbox{\flushnextbox}%
\egroup}
\vbox % was \hbox
diff --git a/Master/texmf-dist/tex/context/base/core-inc.lua b/Master/texmf-dist/tex/context/base/core-inc.lua
new file mode 100644
index 00000000000..94b9ff329e4
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/core-inc.lua
@@ -0,0 +1,822 @@
+if not modules then modules = { } end modules ['core-inc'] = {
+ version = 1.001,
+ comment = "companion to core-inc.tex",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- lowercase types
+-- mps tex tmp svg
+-- partly qualified
+-- dimensions
+-- consult rlx
+
+--[[
+The ConTeXt figure inclusion mechanisms are among the oldest code
+in ConTeXt and evolve dinto a complex whole. One reason is that we
+deal with backend in an abstract way. What complicates matters is
+that we deal with internal graphics as well: TeX code, MetaPost code,
+etc. Later on figure databases were introduced, which resulted in
+a plug in model for locating images. On top of that runs a conversion
+mechanism (with caching) and resource logging.
+
+Porting that to Lua is not that trivial because quite some
+status information is kept between al these stages. Of course, image
+reuse also has some price, and so I decided to implement the graphics
+inclusion in several layers: detection, loading, inclusion, etc.
+
+Object sharing and scaling can happen at each stage, depending on the
+way the resource is dealt with.
+
+The TeX-Lua mix is suboptimal. This has to do with the fact that we cannot
+run TeX code from within Lua. Some more functionality will move to Lua.
+]]--
+
+backends = backends or { }
+backends.pdf = backends.pdf or { }
+
+--~ function backends.pdf.startscaling(sx,sy)
+--~ return nodes.pdfliteral(string.format("q %s 0 0 %s 0 0 cm",(sx ~= 0 and sx) or .0001,(sy ~= 0 and sy) or .0001))
+--~ end
+--~ function backends.pdf.stopscaling()
+--~ return nodes.pdfliteral("%Q")
+--~ end
+
+function backends.pdf.insertmovie(data)
+ data = data or figures.current()
+ local dr, du, ds = data.request, data.used, data.status
+ local width, height, factor = du.width or dr.width, du.height or dr.height, number.dimenfactors.bp
+ local options, actions = "", ""
+ if dr["repeat"] then
+ actions = actions .. "/Mode /Repeat "
+ end
+ if dr.controls then
+ actions = actions .. "/ShowControls true "
+ else
+ actions = actions .. "/ShowControls false "
+ end
+ if dr.preview then
+ options = options .. "/Poster true "
+ end
+ if actions ~= "" then
+ actions= "/A <<" .. actions .. ">>"
+ end
+ tex.sprint(tex.ctxcatcodes, string.format(
+ "\\doPDFannotation{%ssp}{%ssp}{/Subtype /Movie /Border [0 0 0] /T (movie %s) /Movie << /F (%s) /Aspect [%s %s] %s>> %s}",
+ width, height, dr.label, du.foundname, factor * width, factor * height, options, actions
+ ))
+ return data
+end
+
+--~ if node then do
+--~ local n = node.new(0,0)
+--~ local m = getmetatable(n)
+--~ m.__concat = function(a,b)
+--~ local t = node.slide(a)
+--~ t.next, b.prev = b, t
+--~ return a
+--~ end
+--~ node.free(n)
+--~ end end
+
+--- some extra img functions ---
+
+function img.totable(i)
+ local t = { }
+ for _, v in ipairs(img.keys()) do
+ t[v] = i[v]
+ end
+ return t
+end
+
+function img.serialize(i)
+ return table.serialize(img.totable(i))
+end
+
+function img.clone(i,data)
+ i.width = data.width or i.width
+ i.height = data.height or i.height
+ -- attr etc
+ return i
+end
+
+local validsizes = table.tohash(img.boxes())
+local validtypes = table.tohash(img.types())
+
+function img.check_size(size)
+ if size then
+ size = size:gsub("box","")
+ return (validsizes[size] and size) or "crop"
+ else
+ return "crop"
+ end
+end
+
+---
+
+figures = figures or { }
+figures.loaded = figures.loaded or { }
+figures.used = figures.used or { }
+figures.found = figures.found or { }
+figures.suffixes = figures.suffixes or { }
+figures.patterns = figures.patterns or { }
+figures.boxnumber = figures.boxid or 0
+figures.trace = false
+figures.defaultsearch = true
+figures.defaultwidth = 0
+figures.defaultheight = 0
+figures.defaultdepth = 0
+figures.n = 0
+
+figures.localpaths = {
+ ".", "..", "../.."
+}
+figures.cachepaths = {
+ prefix = "",
+ path = ".",
+ subpath = ".",
+}
+
+figures.paths = table.copy(figures.localpaths)
+
+figures.order = {
+ "pdf", "mps", "jpg", "png", "jbig", "svg", "eps", "mov", "buffer", "tex"
+}
+
+figures.formats = {
+ ["pdf"] = { },
+ ["mps"] = { patterns = { "%d+" } },
+ ["jpg"] = { list = { "jpg", "jpeg" } },
+ ["png"] = { } ,
+ ["jbig"] = { list = { "jbig", "jbig2", "jb2" } },
+ ["svg"] = { list = { "svg", "svgz" } },
+ ["eps"] = { list = { "eps", "ai" } },
+ ["mov"] = { list = { "mov", "avi" } },
+ ["buffer"] = { list = { "tmp", "buffer", "buf" } },
+ ["tex"] = { },
+}
+
+function figures.setlookups()
+ figures.suffixes, figures.patterns = { }, { }
+ for _, format in pairs(figures.order) do
+ local data = figures.formats[format]
+ local fs, fp = figures.suffixes, figures.patterns
+ if data.list then
+ for _, s in ipairs(data.list) do
+ fs[s] = format -- hash
+ end
+ else
+ fs[format] = format
+ end
+ if data.patterns then
+ for _, s in ipairs(data.patterns) do
+ fp[#fp+1] = { s, format } -- array
+ end
+ end
+ end
+end
+
+figures.setlookups()
+
+local function register(tag,target,what)
+ local data = figures.formats[target]
+ if data then
+ local d = data[tag]
+ if d and not table.contains(d,what) then
+ d[#d+1] = what
+ else
+ data[tag] = { what }
+ end
+ else
+ figures.formats[target] = { }
+ end
+ figures.setlookups()
+end
+
+function figures.registersuffix (suffix, target) register('list', target,suffix ) end
+function figures.registerpattern(pattern,target) register('pattern',target,pattern) end
+
+local pathhash = { }
+
+function figures.setpaths(locationset,pathlist)
+ local ph, iv, t = pathhash[locationset], interfaces.variables, nil
+ if ph then
+ ph = ph[pathlist]
+ if ph then
+ figures.paths = ph
+ return
+ end
+ end
+ if not ph then
+ ph = { }
+ pathhash[locationset] = ph
+ end
+ local h = locationset:tohash()
+ t = (h[iv["local"]] and figures.localpaths) or { }
+ if h[iv["global"]] then
+ for s in pathlist:gmatch("([^, ]+)") do
+ t[#t+1] = s
+ end
+ end
+ figures.defaultsearch = h[iv["default"]]
+ ph[pathlist] = t
+ figures.paths = t
+end
+
+-- check conversions and handle it here
+
+--~ local keys = img.keys()
+
+--~ function figures.hash(data)
+--~ local i = data.status.private
+--~ local t = { }
+--~ for _, v in ipairs(keys) do
+--~ local iv = i[v]
+--~ if iv then
+--~ t[#t+1] = v .. '=' .. iv
+--~ end
+--~ end
+--~ return table.concat(t,"+")
+--~ end
+
+function figures.hash(data)
+ return data.status.fullname .. "+".. (data.request.page or 1) -- img is still not perfect
+end
+
+-- interfacing to tex
+
+do
+
+ local figuredata = { }
+ local callstack = { }
+
+ function figures.new()
+ figuredata = {
+ request = {
+ name = false,
+ label = false,
+ format = false,
+ page = false,
+ width = false,
+ height = false,
+ preview = false,
+ ["repeat"] = false,
+ controls = false,
+ display = false,
+ conversion = false,
+ cache = false,
+ prefix = false,
+ size = false,
+ },
+ used = {
+ fullname = false,
+ format = false,
+ name = false,
+ path = false,
+ suffix = false,
+ width = false,
+ height = false,
+ },
+ status = {
+ status = 0,
+ converted = false,
+ cached = false,
+ fullname = false,
+ format = false,
+ },
+ }
+ return figuredata
+ end
+
+ function figures.push(request)
+ input.starttiming(figures)
+ local figuredata = figures.new()
+ if request then
+ local iv = interfaces.variables
+ local w, h = tonumber(request.width), tonumber(request.height)
+ request.page = math.max(tonumber(request.page) or 1,1)
+ request.size = img.check_size(request.size)
+ request.object = iv[request.object] == "yes"
+ request["repeat"] = iv[request["repeat"]] == "yes"
+ request.preview = iv[request.preview] == "yes"
+ request.cache = request.cache ~= "" and request.cache
+ request.prefix = request.prefix ~= "" and request.prefix
+ request.format = request.format ~= "" and request.format
+ request.width = (w and w > 0) or false
+ request.height = (h and h > 0) or false
+ table.merge(figuredata.request,request)
+ end
+ callstack[#callstack+1] = figuredata
+ return figuredata
+ end
+ function figures.pop()
+ figuredata = callstack[#callstack]
+ callstack[#callstack] = nil
+ input.stoptiming(figures)
+ end
+ -- maybe move tex.sprint to tex
+ function figures.get(category,tag,default)
+ local value = figuredata[category][tag]
+ if not value or value == "" or value == true then
+ return default or ""
+ else
+ return value
+ end
+ end
+ function figures.tprint(category,tag,default)
+ tex.sprint(tex.ctxcatcodes,figures.get(category,tag,default))
+ end
+ function figures.current()
+ return callstack[#callstack]
+ end
+
+end
+
+do
+
+ local function register(askedname,specification)
+ if specification then
+ local format = specification.format
+ if format then
+ local converter = figures.converters[format]
+ if converter then
+ local oldname = specification.fullname
+ local newpath = file.dirname(oldname)
+ local newbase = file.replacesuffix(file.basename(oldname),"pdf") -- todo
+ local fc = specification.cache or figures.cachepaths.path
+ if fc and fc ~= "" and fc ~= "." then
+ newpath = fc
+ end
+ local subpath = specification.subpath or figures.cachepaths.subpath
+ if subpath and subpath ~= "" and subpath ~= "." then
+ newpath = newpath .. "/" .. subpath
+ end
+ local prefix = specification.prefix or figures.cachepaths.prefix
+ if prefix and prefix ~= "" then
+ newbase = prefix .. newbase
+ end
+ local newname = file.join(newpath,newbase)
+ dir.makedirs(newpath)
+ local oldtime = lfs.attributes(oldname,'modification') or 0
+ local newtime = lfs.attributes(newname,'modification') or 0
+ if oldtime > newtime then
+ converter(oldname,newname)
+ end
+ if io.exists(newname) then
+ specification.foundname = oldname
+ specification.fullname = newname
+ specification.prefix = prefix
+ specification.subpath = subpath
+ specification.converted = true
+ elseif exists(oldname) then
+ specification.fullname = newname
+ specification.converted = false
+ end
+ end
+ end
+ specification.found = true -- ?
+ else
+ specification = { }
+ end
+ specification.foundname = specification.foundname or specification.fullname
+ figures.found[askedname] = specification
+ return specification
+ end
+
+ local function locate(request) -- name, format, cache
+ local askedname = input.clean_path(request.name)
+ if figures.found[askedname] then
+ return figures.found[askedname]
+ end
+ local askedpath= file.dirname(askedname)
+ local askedbase = file.basename(askedname)
+ local askedformat = (request.format ~= "" and request.format ~= "unknown" and request.format) or file.extname(askedname)
+ local askedcache = request.cache
+ if askedformat ~= "" then
+ askedformat = askedformat:lower()
+ local format = figures.suffixes[askedformat]
+ if not format then
+ for _, pattern in ipairs(figures.patterns) do
+ if askedformat:find(pattern[1]) then
+ format = pattern[2]
+ break
+ end
+ end
+ end
+ if format then
+ local foundname = figures.exists(askedname,askedformat)
+ if foundname then
+ return register(askedname, {
+ askedname = askedname,
+ fullname = askedname,
+ format = format,
+ cache = askedcache,
+ foundname = foundname,
+ })
+ end
+ end
+ if askedpath ~= "" then
+ -- path and type given, todo: strip pieces of path
+ if figures.exists(askedname,askedformat) then
+ return register(askedname, {
+ askedname = askedname,
+ fullname = askedname,
+ format = askedformat,
+ cache = askedcache,
+ })
+ end
+ else
+ -- type given
+ for _, path in ipairs(figures.paths) do
+ local check = path .. "/" .. askedname
+ if figures.exists(check,askedformat) then
+ return register(check, {
+ askedname = askedname,
+ fullname = check,
+ format = askedformat,
+ cache = askedcache,
+ })
+ end
+ end
+ if figures.defaultsearch then
+ local check = input.find_file(texmf.instance,askedname)
+ if check and check ~= "" then
+ return register(askedname, {
+ askedname = askedname,
+ fullname = check,
+ format = askedformat,
+ cache = askedcache,
+ })
+ end
+ end
+ end
+ elseif askedpath ~= "" then
+ for _, format in ipairs(figures.order) do
+ local list = figures.formats[format].list or { format }
+ for _, suffix in ipairs(list) do
+ local check = file.addsuffix(askedname,suffix)
+ if figures.exists(check,format) then
+ return register(askedname, {
+ askedname = askedname,
+ fullname = check,
+ format = format,
+ cache = askedcache,
+ })
+ end
+ end
+ end
+ else
+ for _, format in ipairs(figures.order) do
+ local list = figures.formats[format].list or { format }
+ for _, suffix in ipairs(list) do
+ local name = file.replacesuffix(askedbase,suffix)
+ for _, path in ipairs(figures.paths) do
+ local check = path .. "/" .. name
+ if figures.exists(check,format) then
+ return register(askedname, {
+ askedname = askedname,
+ fullname = check,
+ format = format,
+ cache = askedcache,
+ })
+ end
+ end
+ if figures.defaultsearch then
+ local check = input.find_file(texmf.instance,file.replacesuffix(askedname,suffix))
+ if check and check ~= "" then
+ return register(askedname, {
+ askedname = askedname,
+ fullname = check,
+ format = format,
+ cache = askedcache,
+ })
+ end
+ end
+ end
+ end
+ end
+ return register(askedname)
+ end
+
+ -- -- -- plugins -- -- --
+
+ figures.existers = figures.existers or { }
+ figures.checkers = figures.checkers or { }
+ figures.includers = figures.includers or { }
+ figures.converters = figures.converters or { }
+ figures.identifiers = figures.identifiers or { }
+
+ figures.identifiers.list = {
+ figures.identifiers.default
+ }
+
+ function figures.identifiers.default(data)
+ local dr, du, ds = data.request, data.used, data.status
+ local l = locate(dr)
+ local foundname = l.foundname
+ local fullname = l.fullname or foundname
+ if fullname then
+ du.format = l.format or false
+ du.fullname = fullname -- can be cached
+ ds.fullname = foundname -- original
+ ds.format = l.format
+ ds.status = (l.found and 10) or 0
+ end
+ return data
+ end
+
+ function figures.identify(data)
+ data = data or figures.current()
+ for _, identifier in ipairs(figures.identifiers.list) do
+ data = identifier(data)
+ if data.status.status > 0 then
+ break
+ end
+ end
+ return data
+ end
+ function figures.exists(askedname,format)
+ return (figures.existers[format] or figures.existers.generic)(askedname)
+ end
+ function figures.check(data)
+ data = data or figures.current()
+ local dr, du, ds = data.request, data.used, data.status
+ return (figures.checkers[ds.format] or figures.checkers.generic)(data)
+ end
+ function figures.include(data)
+ data = data or figures.current()
+ local dr, du, ds = data.request, data.used, data.status
+ return (figures.includers[ds.format] or figures.includers.generic)(data)
+ end
+ function figures.scale(data) -- will become lua code
+ tex.sprint(tex.ctxcatcodes,"\\doscalefigure")
+ return data
+ end
+ function figures.done(data)
+ figures.n = figures.n + 1
+ data = data or figures.current()
+ local dr, du, ds = data.request, data.used, data.status
+ ds.width = tex.wd[figures.boxnumber]
+ ds.height = tex.ht[figures.boxnumber]
+ ds.xscale = ds.width/(du.width or 1)
+ ds.yscale = ds.height/(du.height or 1)
+ return data
+ end
+
+ function figures.dummy(data) -- fails
+--~ data = data or figures.current()
+--~ local dr, du, ds = data.request, data.used, data.status
+--~ local r = node.new("rule")
+--~ r.width = du.width or figures.defaultwidth
+--~ r.height = du.height or figures.defaultheight
+--~ r.depth = du.depth or figures.defaultdepth
+--~ tex.box[figures.boxnumber] = node.write(r)
+ tex.sprint(tex.ctxcatcodes,"\\emptyfoundexternalfigure")
+ end
+
+end
+
+-- -- -- generic -- -- --
+
+function figures.existers.generic(askedname)
+--~ local result = io.exists(askedname)
+--~ result = (result==true and askedname) or result
+--~ local result = input.find_file(texmf.instance,askedname) or ""
+ local result = input.findbinfile(texmf.instance,askedname) or ""
+ if result == "" then result = false end
+ if figures.trace then
+ if result then
+ logs.report("figures", "found:" .. askedname .. " ->" .. result)
+ else
+ logs.report("figures", "not found:" .. askedname)
+ end
+ end
+ return result
+end
+function figures.checkers.generic(data)
+ local dr, du, ds = data.request, data.used, data.status
+ local name, page, size = du.fullname or "unknown generic", dr.page, dr.size or "crop"
+ local hash = name .. "->" .. page .. "->" .. size
+ local figure = figures.loaded[hash]
+ if figure == nil then
+ figure = img.new { filename = name, page = page, pagebox = dr.size }
+ figure = (figure and img.scan(figure)) or false
+ figures.loaded[hash] = figure
+ end
+ if figure then
+ du.width = figure.width
+ du.height = figure.height
+ du.pages = figure.pages
+ ds.private = figure
+ end
+ return data
+end
+function figures.includers.generic(data)
+ local dr, du, ds = data.request, data.used, data.status
+ dr.width = dr.width or du.width
+ dr.height = dr.height or du.height
+ local hash = figures.hash(data)
+ local figure = figures.used[hash]
+ if figure == nil then
+ figure = ds.private
+ if figure then
+--~ figure.page = dr.page or '1'
+ figure = img.copy(figure)
+ figure = (figure and img.clone(figure,data.request)) or false
+ end
+ figures.used[hash] = figure
+ end
+ if figure then
+ local n = figures.boxnumber
+ tex.box[n] = img.node(figure) -- img.write(figure)
+ tex.wd[n], tex.ht[n], tex.dp[n] = figure.width, figure.height, 0 -- new, hm, tricky, we need to do that in tex (yet)
+ ds.objectnumber = figure.objnum
+ tex.sprint(tex.ctxcatcodes,"\\relocateexternalfigure")
+ end
+ return data
+end
+
+-- -- -- nongeneric -- -- --
+
+function figures.checkers.nongeneric(data,command)
+ local dr, du, ds = data.request, data.used, data.status
+ local name = du.fullname or "unknown nongeneric"
+ local hash = name
+ if dr.object then
+ if not job.objects["FIG::"..hash] then
+ tex.sprint(tex.ctxcatcodes,command)
+ tex.sprint(tex.ctxcatcodes,string.format("\\setobject{FIG}{%s}\\vbox{\\box\\foundexternalfigure}",hash))
+ end
+ tex.sprint(tex.ctxcatcodes,string.format("\\global\\setbox\\foundexternalfigure\\vbox{\\getobject{FIG}{%s}}",hash))
+ else
+ tex.sprint(tex.ctxcatcodes,command)
+ end
+ return data
+end
+function figures.includers.nongeneric(data)
+ return data
+end
+
+-- -- -- mov -- -- --
+
+function figures.checkers.mov(data)
+ local dr, du, ds = data.request, data.used, data.status
+ du.width = dr.width or figures.defaultwidth
+ du.height = dr.height or figures.defaultheight
+ du.foundname = du.fullname
+ tex.sprint(tex.ctxcatcodes,string.format("\\startfoundexternalfigure{%ssp}{%ssp}",du.width,du.height))
+ data = backends.pdf.insertmovie(data)
+ tex.sprint(tex.ctxcatcodes,"\\stopfoundexternalfigure")
+ return data
+end
+figures.includers.mov = figures.includers.nongeneric
+
+-- -- -- mps -- -- --
+
+function figures.checkers.mps(data)
+ return figures.checkers.nongeneric(data,string.format("\\docheckfiguremps{%s}",data.used.fullname))
+end
+figures.includers.mps = figures.includers.nongeneric
+
+-- -- -- buffer -- -- --
+
+function figures.existers.buffer(askedname)
+ askedname = file.nameonly(askedname)
+ return buffers.exists(askedname) and askedname
+end
+function figures.checkers.buffer(data)
+ return figures.checkers.nongeneric(data,string.format("\\docheckfigurebuffer{%s}", file.nameonly(data.used.fullname)))
+end
+figures.includers.buffers = figures.includers.nongeneric
+
+-- -- -- tex -- -- --
+
+function figures.existers.tex(askedname)
+ askedname = input.find_file(texmf.instance,askedname)
+ return (askedname ~= "" and askedname) or false
+end
+function figures.checkers.tex(data)
+ return figures.checkers.nongeneric(data,string.format("\\docheckfiguretex{%s}", data.used.fullname))
+end
+figures.includers.tex = figures.includers.nongeneric
+
+-- -- -- eps -- -- --
+
+function figures.converters.eps(oldname,newname)
+ -- hack, we need a lua based converter script, or better, we should use
+ -- rlx as alternative
+ local outputpath = file.dirname(newname)
+ local outputbase = file.basename(newname)
+ local command = string.format("mtxrun bin:pstopdf --outputpath=%s %s",outputpath,oldname)
+ os.spawn(command)
+end
+
+figures.converters.svg = figures.converters.eps
+
+-- -- -- lowres -- -- --
+
+--~ function figures.converters.pdf(oldname,newname)
+--~ local outputpath = file.dirname(newname)
+--~ local outputbase = file.basename(newname)
+--~ local command = string.format("mtxrun bin:pstopdf --method=4 --outputpath=%s %s",outputpath,oldname)
+--~ os.spawn(command)
+--~ end
+
+
+figures.bases = { }
+figures.bases.list = { } -- index => { basename, fullname, xmlroot }
+figures.bases.used = { } -- [basename] => { basename, fullname, xmlroot } -- pointer to list
+figures.bases.found = { }
+figures.bases.enabled = false
+
+function figures.bases.use(basename)
+ if basename == "reset" then
+ figures.bases.list = { }
+ figures.bases.used = { }
+ figures.bases.found = { }
+ figures.bases.enabled = false
+ else
+ basename = file.addsuffix(basename,"xml")
+ if not figures.bases.used[basename] then
+ local t = { basename, nil, nil }
+ figures.bases.used[basename] = t
+ figures.bases.list[#figures.bases.list+1] = t
+ if not figures.bases.enabled then
+ figures.bases.enabled = true
+ xml.registerns("rlx","http://www.pragma-ade.com/schemas/rlx") -- we should be able to do this per xml file
+ end
+ end
+ end
+end
+
+function figures.bases.find(basename,askedlabel)
+ basename = file.addsuffix(basename,"xml")
+ local t = figures.bases.found[askedlabel]
+ if t == nil then
+ local base = figures.bases.used[basename]
+ local page = 0
+ if base[2] == nil then
+ -- no yet located
+ for _, path in ipairs(figures.paths) do
+ local xmlfile = path .. "/" .. basename
+ if io.exists(xmlfile) then
+ base[2] = xmlfile
+ base[3] = xml.load(xmlfile)
+ break
+ end
+ end
+ end
+ t = false
+ if base[2] and base[3] then
+ for e, d, k in xml.elements(base[3],"/(*:library|figurelibrary)/*:figure/*:label") do
+ page = page + 1
+ if xml.content(d[k]) == askedlabel then
+ t = {
+ base = file.replacesuffix(base[2],"pdf"),
+ format = "pdf",
+ name = xml.filters.text(e,"*:file"),
+ page = page,
+ }
+ figures.bases.found[askedlabel] = t
+ break
+ end
+ end
+ end
+ figures.bases.found[askedlabel] = t
+ end
+ return t
+end
+
+-- we can access sequential or by name
+
+function figures.bases.locate(askedlabel)
+ for _, entry in ipairs(figures.bases.list) do
+ local t = figures.bases.find(entry[1],askedlabel)
+ if t then
+ return t
+ end
+ end
+ return false
+end
+
+function figures.identifiers.base(data)
+ if figures.bases.enabled then
+ local dr, du, ds = data.request, data.used, data.status
+ local fbl = figures.bases.locate(dr.name or dr.label)
+ if fbl then
+ du.page = fbl.page
+ du.format = fbl.format
+ du.fullname = fbl.base
+ ds.fullname = fbl.name
+ ds.format = fbl.format
+ ds.status = 10
+ end
+ end
+ return data
+end
+
+figures.identifiers.list = {
+ figures.identifiers.base,
+ figures.identifiers.default
+}
diff --git a/Master/texmf-dist/tex/context/base/core-inc.mkii b/Master/texmf-dist/tex/context/base/core-inc.mkii
new file mode 100644
index 00000000000..fe3894d57d5
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/core-inc.mkii
@@ -0,0 +1,1326 @@
+%D \module
+%D [ file=core-inc, % moved from core-fig
+%D version=2006.08.26, % overhaul of 1997.03.31
+%D title=\CONTEXT\ Core Macros,
+%D subtitle=Figure Inclusion,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+% todo: directory : system -> \allinputpaths (so that we can \usesubpath)
+
+%D This is a reimplementation of the original module, which
+%D over time had evolved into a pretty complex whole. This
+%D was partly due to the fact that we needed to handle many
+%D formats, deal with substitute graphics, handle fallbacks
+%D and driver specifics (objects), etc. In the meantime we
+%D have more clever backends, moved away from texutil to
+%D rlxtools, can use runtime or betweentime runs etc. Also,
+%D more memory permits a cleaner implementation. Time to
+%D move on. We can now also assume that scaling is available.
+%D
+%D Another mess that can go is the llx/lly handling since
+%D drivers now automatically can determine such things.
+
+%D Messages 3 and 5 needs to be translated!
+
+\unprotect
+
+\startmessages dutch library: figures
+ title: figuren
+ 1: figuur -- is niet te vinden
+ 2: figuur -- wordt niet preset
+ 3: maten van -- worden extern vastgesteld
+ 4: maten van -- geladen uit figuurfile zelf
+ 5: maten van -- zijn onbekend
+ 6: maten van -- berekend door rlxtools
+ 8: figuurobject -- wordt opnieuw gebruikt
+\stopmessages
+
+\startmessages english library: figures
+ title: figures
+ 1: figure -- can not be found
+ 2: figure -- is not preset
+ 3: dimensions of -- are determined externally
+ 4: dimensions of -- loaded from figurefile itself
+ 5: dimensions of -- are unknown
+ 6: dimensions of -- calculated by rlxtools
+ 8: figureobject -- is reused
+\stopmessages
+
+\startmessages german library: figures
+ title: Abbildungen
+ 1: Abbildung -- kann nicht gefunden werden
+ 2: Abbildung -- wird nicht erstellt
+ 3: dimensions of -- are determined externally
+ 4: Dimensionen von -- geladen aus der Abbildungsdatei selbst
+ 5: Dimensions of -- are unknown
+ 6: Dimensionen von -- ausgerechnet durch rlxtools
+ 8: Abbildungobjekt -- wurde wiederverwandt
+\stopmessages
+
+\startmessages czech library: figures
+ title: obrazy
+ 1: obraz -- nelze nalezt
+ 2: obraz -- nepritomen
+ 3: dimensions of -- are determined externally
+ 4: dimenze obrazu -- nacteny primo z jeho souboru
+ 5: dimensions of -- are unknown
+ 6: dimenze obrazu -- spocteny programem rlxtools
+ 8: obrazovy objekt -- je znovu pouzit
+\stopmessages
+
+\startmessages italian library: figures
+ title: figure
+ 1: figura -- non trovata
+ 2: la figura -- non è preimpostata
+ 3: dimensions of -- are determined externally
+ 4: dimensioni di -- caricate dal file di immagini stesso
+ 5: dimensions of -- are unknown
+ 6: dimensioni di -- calcolate da rlxtools
+ 8: oggetto-figura -- riutilizzato
+\stopmessages
+
+\startmessages romanian library: figures
+ title: figuri
+ 1: figura -- nu poate fi gasita
+ 2: figura -- nu este presetata
+ 3: dimensions of -- are determined externally
+ 4: dimensiunea figurii -- se incarca din fisierul insusi
+ 5: dimensions of -- are unknown
+ 6: dimensiunea figurii -- este calculata de rlxtools
+ 8: obiectul figura -- este refolosit
+\stopmessages
+
+\startmessages french library: figures
+ title: figures
+ 1: la figure -- ne peut être trouvée
+ 2: la figure -- n'est pas pré-sélectionnée
+ 3: dimensions of -- are determined externally
+ 4: les dimensions de -- chargées implicitement à partir du fichier de figure
+ 5: dimensions of -- are unknown
+ 6: les dimensions de -- calculées par rlxtools
+ 8: figureobject -- est réutilisé
+\stopmessages
+
+%D Due to the mere fact that \DVI|/|\PDF\ drivers differ in their
+%D needs for figure dimensions, we have to provide the width,
+%D height, horizontal and vertical scale. Also we want to
+%D specify at the user level either width and|/|or height, scale,
+%D or a factor related to the current document bodyfont size.
+%D Even better: we can also specify isometric scaling and
+%D automatically let \CONTEXT\ calculate the maximum possible
+%D dimensions. Whatever we calculate, the results will come
+%D available in the next registers.
+
+\letempty \@@DriverImageBox
+\letempty \@@DriverImageOptions
+\letempty \@@DriverImageWidth
+\letempty \@@DriverImageHeight
+\letempty \@@DriverImageFile
+\letempty \@@DriverImageLabel
+\letempty \@@DriverImageType
+\letempty \@@DriverImageMethod
+\letempty \@@DriverImagePage
+
+%D Because looking for dimensions can take many steps (locating
+%D the figure, maybe on more directories, scanning the figure
+%D on dimension, or when not found, trying to find them in the
+%D utility file, and again when not found, trying to generate
+%D such a file, and, as a last resort, trying to use the
+%D dimensions. Now when things do not work out the way we want,
+%D we can set a switch and get some information on what takes
+%D place.
+
+\newif\iftraceexternalfigures
+
+\let\traceexternalfigures\traceexternalfigurestrue
+
+\def\doshowfigurestate
+ {\iftraceexternalfigures
+ \expandafter\writestatus\expandafter\m!figures
+ \else
+ \expandafter\gobbleoneargument
+ \fi}
+
+\def\doshowfiguremessage
+ {\iftraceexternalfigures
+ \expandafter\gobbletwoarguments
+ \else
+ \expandafter\showmessage\expandafter\m!figures
+ \fi}
+
+%D Another switch tells \CONTEXT\ to locate and calculate a
+%D figure, but does not actually insert it. Especially when we
+%D use \PDFTEX\ this saves a lot of time on trialruns. (Keep
+%D in mind that \PDFTEX\ is both a \TEX\ pre|| and postprocessor.)
+
+\newif\ifskipexternalfigures % can be set elsewhere
+
+% \newif\ifrunutilityfile
+% \newif\ifconsultutilityfile
+%
+% Let's save two hash entries:
+
+\let\runutilityfiletrue \relax \let\runutilityfilefalse \relax
+\let\consultutilityfiletrue\relax \let\consultutilityfilefalse\relax
+
+%D Intermediate, private.
+
+\newdimen\determinedfigurewidth
+\newdimen\determinedfigureheight
+
+\let\naturalfigureheight\!!zeropoint
+\let\naturalfigurewidth \!!zeropoint
+
+\def\defaultfigurewidth {8\lineheight}
+\def\defaultfigureheight{6\lineheight}
+
+\def\defaultfigurepathsignal{(\v!default)}
+
+\def\checknaturalfiguredimensions
+ {\edef\naturalfigurewidth{\the\dimexpr\ifzeropt\determinedfigurewidth
+ \defaultfigurewidth \else\determinedfigurewidth \fi\relax}%
+ \edef\naturalfigureheight{\the\dimexpr\ifzeropt\determinedfigureheight
+ \defaultfigureheight\else\determinedfigureheight\fi\relax}}
+
+%D Locating figures. Dilemma: we do support eps and svg parsing but drivers
+%D don't always support it.
+
+\def\figuretypes{\c!mps,\c!pdf,\c!eps,\c!svg,\c!svg z,\c!png,\c!tif,jb2,\c!jpg}
+
+\def\supportedfiguretypes{\figuretypes}
+
+\def\checksupportedfiguretypes
+ {\begingroup
+ \global\let\supportedfiguretypes\empty
+ \def\docommand##1%
+ {\doiffileinsertionsupportedelse{##1}
+ {\doglobal\addtocommalist{##1}\supportedfiguretypes}
+ \donothing}%
+ \processcommacommand[\figuretypes]\docommand
+ \gdef\checksupportedfiguretypes{\let\figuretypes\supportedfiguretypes}%
+ \endgroup
+ \checksupportedfiguretypes}
+
+%D The next box is used to store the graphic. It's globally assigned.
+
+\newbox\foundexternalfigure
+
+\chardef\figurestatus\zerocount % nothing found
+
+\def\noffigurepages{\nofinsertpages}
+
+%D Variables.
+
+\newtoks\everyexternalfigureresets
+
+\def\resetfigurevariables
+ {\the\everyexternalfigureresets}
+
+%D Example usage:
+
+\appendtoks
+ \global\let\externalfigurelog\empty
+\to\everyexternalfigureresets
+
+%D Intermediate, private
+
+\def\resetprivatefigurevariables
+ {\let \wantedfigurefull \empty
+ \let \wantedfigurepath \empty
+ \let \wantedfigurename \empty
+ \let \wantedfigurebase \empty
+ \let \wantedfiguretype \empty
+ \let \wantedfigurefullname \empty
+ \let \wantedfiguretypespec \empty
+ \let \wantedfiguremethod \empty
+ \let \wantedfigurepage \empty
+ \let \wantedfigureoptions \empty
+ \let \wantedfigureconversion\empty
+ \let \wantedfigureprefix \empty
+ \let \wantedfiguretypelist \figuretypes
+ \let \figurepathlist \empty
+ \chardef \figurestatus \zerocount
+ \let \expandedfigurename \empty
+ \global\let \analyzedfigurewidth \!!zeropoint % set by indentifying code
+ \global\let \analyzedfigureheight \!!zeropoint % set by indentifying code
+ \global\setbox\foundexternalfigure \emptybox
+ \def \frozenfigurestamp {\externalfigurestamp}} % no edef
+
+\resetprivatefigurevariables
+
+\appendtoks
+ \resetprivatefigurevariables
+\to\everyexternalfigureresets
+
+%D Private/public.
+
+\def\resetpublicfigurevariables
+ {\let\figurewidth \!!zeropoint
+ \let\figureheight \!!zeropoint
+ \let\figurenaturalwidth \!!zeropoint
+ \let\figurenaturalheight \!!zeropoint
+ \let\figurelabel \empty
+ \let\figurefileoriginal \empty
+ \let\figurefileoptions \empty
+ \let\figurefilename \empty
+ \let\figurefiletype \empty
+ \let\figurefilepage \!!zerocount
+ \let\figurefileconversion\empty
+ \let\figurefileprefix \empty
+ \let\figurefilepath \empty
+ \let\figurefilecache \empty}
+
+\resetpublicfigurevariables
+
+\appendtoks
+ \resetpublicfigurevariables
+\to\everyexternalfigureresets
+
+\newcounter\figurenestinglevel
+
+\def\pushpublicfigurevariables
+ {\ifcase\figurenestinglevel\else
+ \doshowfigurestate{variables : push}%
+ \globalpushmacro\figurewidth
+ \globalpushmacro\figureheight
+ \globalpushmacro\figurenaturalwidth
+ \globalpushmacro\figurenaturalheight
+ \globalpushmacro\figurelabel
+ \globalpushmacro\figurefileoriginal
+ \globalpushmacro\figurefileoptions
+ \globalpushmacro\figurefilename
+ \globalpushmacro\figurefiletype
+ \globalpushmacro\figurefilepage
+ \globalpushmacro\figurefileconversion
+ \globalpushmacro\figurefileprefix
+ \globalpushmacro\figurefilepath
+ \globalpushmacro\figurefilecache
+ \fi}
+
+\def\poppublicfigurevariables
+ {\ifcase\figurenestinglevel\else
+ \doshowfigurestate{variables : pop}%
+ \globalpopmacro\figurefilecache
+ \globalpopmacro\figurefilepath
+ \globalpopmacro\figurefileprefix
+ \globalpopmacro\figurefileconversion
+ \globalpopmacro\figurefilepage
+ \globalpopmacro\figurefiletype
+ \globalpopmacro\figurefilename
+ \globalpopmacro\figurefileoptions
+ \globalpopmacro\figurefileoriginal
+ \globalpopmacro\figurelabel
+ \globalpopmacro\figurenaturalheight
+ \globalpopmacro\figurenaturalwidth
+ \globalpopmacro\figureheight
+ \globalpopmacro\figurewidth
+ \fi}
+
+\def\setpublicfigurevariables % todo: type vs typespec
+ {\xdef\figurewidth {\the\wd\foundexternalfigure}%
+ \xdef\figureheight {\the\ht\foundexternalfigure}%
+ \xdef\figurenaturalwidth {\naturalfigurewidth}%
+ \xdef\figurenaturalheight {\naturalfigureheight}%
+ \xdef\figurelabel {\wantedfigurelabel}%
+ \xdef\figurefilepath {\wantedfigurepath}%
+ \xdef\figurefilename {\wantedfigurename}%
+ \xdef\figurefiletype {\wantedfiguretypespec}%
+ \xdef\figurefilepage {\wantedfigurepage}%
+ \xdef\figurefileoptions {\wantedfigureoptions}%
+ \xdef\figurefileconversion{\wantedfigureconversion}%
+ \xdef\figurefilecache {\wantedconversioncache}%
+ \xdef\figurefileprefix {\wantedconversionprefix}%
+ \xdef\figurefileoriginal {\wantedconversionname}%
+ \xdef\figurefullname {\wantedfigurepath/\wantedfigurename.\wantedfiguretypespec}%
+ \ifcase\figurestatus
+ \let\figurefiletype\empty % ?
+ \fi}
+
+\def\setpublicfigurescalevariables
+ {\edef\figurescalewidth {\finalscaleboxwidth }%
+ \edef\figurescaleheight {\finalscaleboxheight}%
+ \edef\figurescalexscale {\finalscaleboxxscale}%
+ \edef\figurescaleyscale {\finalscaleboxyscale}}
+
+\def\resetpublicfigurescalevariables
+ {\let\figurescalewidth \!!zeropoint
+ \let\figurescaleheight \!!zeropoint
+ \let\figurescalexscale \!!plusone
+ \let\figurescaleyscale \!!plusone}
+
+\resetpublicfigurescalevariables
+
+\appendtoks
+ \resetpublicfigurescalevariables
+\to \everyexternalfigureresets
+
+%D The next one is for instance used in symbols. Since
+%D we only need to reset some parameters, we can
+%D better use the fast alternative:
+%D
+%D \starttyping
+%D \def\resetexternalfigures
+%D {\getparameters[\??ef]
+%D [\c!option=,\c!maxwidth=,\c!maxheight=,
+%D \c!foregroundcolor=,\c!color=,
+%D %\c!conversion=,\c!prefix=,\c!splitcolor=,
+%D \c!frame=\v!off,\c!background=]}
+%D \stoptyping
+%D
+%D This one dropped the runtime of the \MAPS\ bibliography
+%D from over 110 seconds down to less than 105 seconds. The
+%D tremendously faster (but uglier) implementation is:
+
+\def\resetexternalfigures
+ {\let\@@efoption \empty % \let\@@efprefix\empty
+ \let\@@efmaxwidth \empty % \let\@@efcache \empty
+ \let\@@efmaxheight \empty % \let\@@efframe \v!off
+ \let\@@efforegroundcolor\empty
+ \let\@@efcolor \empty
+ \let\@@efconversion \empty
+ \let\@@efbackground \empty}
+
+%D The following code will move:
+
+\appendtoks \resetexternalfigures \to \everyoverlay
+\appendtoks \resetexternalfigures \to \everybeforepagebody % not really needed
+%appendtoks \resetexternalfigures \to \everysymbol
+
+%D We need this one for bookkeeping:
+
+\newcounter\forcedMPSobject % better something \every<type>
+
+%D Features:
+
+% converted -> prefix, suffix
+% alternative -> other suffix
+% buffer -> prefix
+
+%D Still messy:
+
+\newtoks\everyfiguretypepresets
+
+\def\presetfiguretypeprocessing
+ {\the\everyfiguretypepresets}
+
+\def\presetspecialfigure#1%
+ {\doif\wantedfiguretype{#1}%
+ {\let\@@efobject\v!no
+ \let\@@efpreset\v!no
+ \ifx\@@efwidth \empty\def\@@efwidth {\defaultfigurewidth }\fi
+ \ifx\@@efheight\empty\def\@@efheight{\defaultfigureheight}\fi}}
+
+\appendtoks
+ \presetspecialfigure\c!mov
+ \presetspecialfigure\c!avi
+\to \everyfiguretypepresets
+
+\def\checkformpsfigurefiles % to be checked
+ {\doif\wantedfigurename{mprun}
+ {\doshowfigurestate{type check : forcing mps (mprun)}%
+ \doifnotinstring{^\bufferprefix}{^\wantedfigurename}
+ {\edef\wantedfigurename{\bufferprefix\wantedfigurename}}%
+ \let\wantedfiguremethod \c!mps
+ \let\wantedfiguretypespec\c!mps}%
+ \doifnumberelse\wantedfiguretype
+ {\doshowfigurestate{type check : forcing mps (number)}%
+ \let\wantedfiguremethod \c!mps
+ \let\wantedfiguretypespec\c!mps}
+ \donothing
+ \doif\wantedfiguretypespec\c!mps
+ {\let\wantedfiguretypelist\wantedfiguretypespec
+ \ifcase\EPSspecial\else\ifinobject\else
+ \doglobal\increment\forcedMPSobject
+ \edef\externalfigurestamp{\c!mps::\forcedMPSobject}%
+ \let\@@efobject\v!yes
+ \fi\fi}}
+
+\appendtoks
+ \checkformpsfigurefiles
+\to \everyfiguretypepresets
+
+\def\checkfortexfigurefiles % to be checked (brrr: c!) / brrr: eftype
+ {\doifinset\wantedfiguretype{\c!tex,\c!tmp}
+ {\let\wantedfiguretypespec \wantedfiguretype}%
+ \doifinset\wantedfiguretypespec{\c!tex,\c!tmp,\v!buffer}
+ {\doshowfigurestate{type check : forcing tex (\wantedfiguretypespec)}%
+ \let\wantedfiguretypelist\wantedfiguretypespec
+ \let\wantedfiguremethod \c!tex
+ \let\@@efobject\v!no
+ \doifnothing\wantedfiguretype{\let\wantedfiguretype\c!tmp}%
+ % there can be a non buffer \jobname.tmp (made by texexec)
+ \doifnotinstring{^\bufferprefix}{^\wantedfigurename}
+ {\edef\wantedfigurename{\bufferprefix\wantedfigurename}}}}
+
+\appendtoks
+ \checkfortexfigurefiles
+\to \everyfiguretypepresets
+
+\def\checkforunknownfigurefiles
+ {\doifnothing\wantedfiguretype
+ {\dogetcommacommandelement\plusone\from\@@eftype\to\commalistelement
+ \edef\wantedfigurefullname{\wantedfigurename.\commalistelement}}}
+
+\appendtoks
+ \checkforunknownfigurefiles
+\to \everyfiguretypepresets
+
+% note * : this is needed because reusable graphics
+% combined with funny page aspect aspect ratio's can lead to
+% strange side effects of preceding factor=max specs. This
+% surfaced in the metafun manual, where the two side by
+% side clipped cow heads [the second one was a reused object]
+% where the second one inherited some characteristics from
+% the factor=max one some 30 pages back. Sigh.
+
+\chardef\splitexternalfigure\zerocount % 0 nosplit 1 split/yes 2 split/no
+
+\def\checkfigurecolorsettings
+ {% seperation, seldom used
+ \doifseparatingcolorselse
+ {\let\@@efforegroundcolor\empty
+ \doifelsenothing\@@efsplit
+ {\chardef\splitexternalfigure\zerocount}
+ {\doifcolorchannelelse\@@efsplit
+ {\let\@@efobject\v!no % why?
+ \chardef\splitexternalfigure\plusone}
+ {\chardef\splitexternalfigure\plustwo}}}
+ {\chardef\splitexternalfigure\zerocount}%
+ % fake color in gray bitmaps, assumes that
+ % a transparent color is used
+ \doifsomething\@@efforegroundcolor
+ {\def\@@efbackground{\v!foreground,\v!color}%
+ \def\@@efbackgroundcolor{\@@efforegroundcolor}}%
+ \doifsomething\@@efcolor
+ {\doifcolorelse\@@efcolor
+ {\checkpredefinedcolor[\@@efcolor]%
+ \doregisterfigurecolor\@@efcolor}}%
+ \donothing}
+
+\def\setextrafiguredriveroptions
+ {\let\@@DriverImageOptions\empty
+ \doifsomething\@@efpage {\addtocommalist\@@efpage \@@DriverImageOptions}%
+ \doif \@@efpreview \v!yes{\addtocommalist\v!preview \@@DriverImageOptions}%
+ \doif \@@efcontrols\v!yes{\addtocommalist\v!controls\@@DriverImageOptions}%
+ \doif \@@efrepeat \v!yes{\addtocommalist\v!repeat \@@DriverImageOptions}%
+ \doifinsetelse\@@efsize{mediabox,cropbox,artbox,bleedbox,trimbox}
+ {\let \@@DriverImageBox \@@efsize}%
+ {\doifinsetelse\@@efsize{media,crop,art,bleed,trim}
+ {\edef\@@DriverImageBox{\@@efsize box}}%
+ {\let \@@DriverImageBox \empty}}%
+ \let\wantedfigureoptions\@@DriverImageOptions}
+
+\def\checkiffigureobjectpresent
+ {\doifnot\@@efobject\v!no
+ {\doifobjectssupportedelse
+ {\doifobjectfoundelse{FIG}\externalfigurestamp
+ {\doshowfigurestate{object found : \externalfigurestamp}%
+ \getobjectdimensions{FIG}\externalfigurestamp
+ \edef\frozenfigurestamp{\externalfigurestamp}%
+ \xdef\analyzedfigurewidth {\the\dimexpr\objectwidth \relax}%
+ \xdef\analyzedfigureheight{\the\dimexpr\objectheight\relax}%
+ \setanalyzedfiguredimensions\plusone}
+ {\doshowfigurestate{unknown object: \externalfigurestamp}}}
+ {}}}
+
+\def\checkifknownfigureobjectpresent
+ {\ifx\wantedfiguretype\empty
+ \let\savedwantedfiguretype\wantedfiguretype
+ \def\docommand##1%
+ {\ifcase\figurestatus
+ \edef\wantedfiguretype{##1}%
+ \checkiffigureobjectpresent
+ \fi}%
+ \processcommacommand[\figuretypes]\docommand
+ \ifcase\figurestatus
+ \let\wantedfiguretype\savedwantedfiguretype
+ \fi
+ \fi}
+
+\def\checkforfigurefile
+ {\ifcase\figurestatus
+ \ifconditional\externalfigureflush
+ \analyzefigurefiles
+ \fi
+ \fi}
+
+\def\externalfigurestamp % needs \edef'd macros!
+ {\wantedfigurename
+ \ifx\wantedfiguretype\empty\else
+ \ifx\wantedfiguretype\s!unknown\else
+ -\wantedfiguretype
+ \fi
+ \fi
+ \ifx\wantedfiguretypespec\empty\else
+ \ifx\wantedfiguretypespec\s!unknown\else
+ \ifx\wantedfiguretypespec\wantedfiguretype\else
+ -\wantedfiguretypespec
+ \fi
+ \fi
+ \fi
+ \ifnum\wantedfigurepage>\zeropoint
+ -\wantedfigurepage
+ \fi}
+
+\def\checkfigurerenderingoptions
+ {\ifcase\figurestatus
+ \let\@@efframe\v!on
+ \fi
+ \doif\@@exoption\v!frame
+ {\let\@@efframe\v!on}%
+ \doif\@@exoption\v!empty
+ {\skipexternalfigurestrue
+ \let\@@efframe\v!off}}
+
+\newtoks\externalfigurepostprocessors
+
+\def\resetfigureusersettings
+ {\let\@@eftype \s!unknown \let\@@efmethod \empty \let\@@efpreset\v!yes
+ \let\@@eflabel \empty \let\@@efsize \empty \let\@@efpage \!!zerocount
+ \let\@@efobject \@@exobject \let\@@efdisplay \empty
+ \let\@@efsplit \empty \let\@@efcolor \empty \let\@@efsymbol\v!no
+ \let\@@efcontrols \v!no \let\@@efpreview \v!no \let\@@efrepeat\v!no
+ \let\@@efhfactor \empty \let\@@efwfactor \empty \let\@@effactor\empty
+ \let\@@efmaxwidth \@@exmaxwidth \let\@@efmaxheight\@@exmaxheight
+ \let\@@efxscale \empty \let\@@efyscale \empty \let\@@efscale \empty
+ \let\@@efsx \!!plusone \let\@@efsy \!!plusone
+ \let\@@efwidth \empty \let\@@efheight \empty
+ \let\@@eflines \empty \let\@@efgrid \empty
+ \let\@@efconversion\@@exconversion \let\@@efprefix \@@exprefix \let\@@efcache \@@excache}
+
+%D Types and Methods are a bit history. Anyhow, user scan use the
+%D type to force the handler. So, what to do with the method. We can
+%D use that one to force a handler with a given suffix, so when no
+%D type is given, but a suffix is part of the name, the method will
+%D determine the handler.
+
+\def\checkfigureusersettings
+ {\doif\@@efreset\v!yes\resetexternalfigures
+ \doifelsenothing\@@eflabel
+ {\doifnothing\wantedfigurelabel{\let\wantedfigurelabel\wantedfigurename}}%
+ {\let\wantedfigurelabel\@@eflabel}%
+ \doifsomething\@@eftype
+ {\doifnot\@@eftype\s!unknown
+ {\edef\wantedfiguretypespec{\@@eftype}%
+ \let\wantedfiguremethod\wantedfiguretypespec}}%
+ \doifnothing\wantedfigurepage % can be set by plug in
+ {\let\wantedfigurepage\@@efpage}%
+ \doif\wantedfigurepage\empty
+ {\let\wantedfigurepage\!!zerocount}% 0 is signal !
+ \doifsomething\@@efmethod % rather untested misusage of the remapper
+ {\doifsomething\wantedfiguretype
+ {\definegraphictypesynonym[\wantedfiguretype][\@@method]}}}
+
+% #1 is now obsolete
+
+\def\calculateexternalfigure[#1][#2][#3][#4][#5][#6]% \cmd label filename parent_id preset current
+ {\doshowfigurestate{begin}%
+ \dontcomplain
+ % let's limit the search, which means that e.g. svg has to be given explicitly
+ \checksupportedfiguretypes
+ % recently added; we presume local use
+ \restorecatcodes
+ % collected resets (token list)
+ \resetfigurevariables
+\resetwantedconversionvariables % new here
+ % analyze filename and set wanted variables
+ \analyzefigurefilename{#3}{#2}%
+ \doanalyzefiguredimensionsfromfile
+ % handle user settings
+ \resetfigureusersettings
+ \dosetefparameters{#4}{#5}{#6}%
+ \checkfigureusersettings
+ \checkfigurecolorsettings
+ % adapt settings based on suffix and/or type
+ \presetfiguretypeprocessing
+ % now we really start
+ \checkiffigureobjectpresent % first guess, we may not yet know the typespec
+ \checkifknownfigureobjectpresent
+ \checkforfigurefilepresence
+ \checkiffigureobjectpresent % to be sure, in case we now know the typespec
+ \checkfigurerenderingoptions % was later, moved here
+ \checknaturalfiguredimensions % inherit from global values and/or fallbacks
+ % by now we know what we're dealing with (put in box and scale)
+ \setextrafiguredriveroptions
+ \prepackageexternalfigureobject
+ % set public variables in case postprocessing needs them
+ \pushpublicfigurevariables
+ \setpublicfigurevariables
+ \setpublicfigureconversionvariables
+ \setpublicfigurescalevariables
+ % package final graphic, only now we can apply backgrounds and such
+ \doglobal\increment\figurenestinglevel
+ \finishexternalfigure
+ \doglobal\decrement\figurenestinglevel
+ % restore variables
+ \poppublicfigurevariables
+ \doshowfigurestate{end}}
+
+\def\checkforfigurefilepresence
+ {\checkforconvertedfigure
+ \checkforfigurefile}
+
+%D Figure objects.
+
+\def\setfigureobject
+ {\doshowfigurestate{object set : \externalfigurestamp}%
+ \setobject{FIG}\externalfigurestamp}
+
+% \def\getfigureobject
+% {\doshowfigurestate{object used : \externalfigurestamp}%
+% \getobject{FIG}\externalfigurestamp}
+
+\def\getfigureobject
+ {\doshowfigurestate{object used : \frozenfigurestamp}%
+ \getobject{FIG}\frozenfigurestamp}
+
+\def\prepackageexternalfigureobject
+ {\ifcase\figurestatus
+ \doshowfiguremessage1\expandedfigurename
+ \doshowfigurestate{state : figure not found (\expandedfigurename)}%
+ \global\setbox\foundexternalfigure\naturalvbox
+ {\doscalebox\??ef{\blackrule[\c!width=\naturalfigurewidth,\c!height=\naturalfigureheight]}}%
+ \or
+ \doshowfiguremessage8\expandedfigurename
+ \doshowfigurestate{state : reusing existing figure}%
+ \global\setbox\foundexternalfigure\naturalvbox
+ {\doscalebox\??ef{\dowithfigure{\getfigureobject}}}%
+ \xdef\noffigurepages{\number\getvalue{\externalfigurestamp\c!n}}%
+ \or
+ \doshowfiguremessage2\expandedfigurename
+ \doshowfigurestate{state : using special figure}%
+ \setbox\scratchbox\naturalvbox % make a dummy
+ {\doscalebox\??ef{\blackrule[\c!width=\naturalfigurewidth,\c!height=\naturalfigureheight]}}%
+ \global\setbox\foundexternalfigure\naturalvbox to \finalscaleboxheight
+ {\vfill
+ \hsize\finalscaleboxwidth
+ \dowithfigure{\insertscaledfiguredriverdata}}%
+ \xdef\noffigurepages{\number\nofinsertpages}%
+ \else
+ \ifdim\naturalfigurewidth>\zeropoint
+ \ifnum\figurestatus>\!!ten\relax
+ \doshowfiguremessage3\expandedfigurename
+ \else
+ \doshowfiguremessage4\expandedfigurename
+ \fi
+ \else
+ \doshowfiguremessage5\expandedfigurename
+ \fi
+ \doshowfigurestate{state : using found figure}% 3=self 4=rlx
+ \doifelse\@@efobject\v!no
+ {\donefalse}
+ {\doifobjectssupportedelse\donetrue\donefalse}%
+ \ifdone
+ % make an object and use it
+ \packageexternalfigureobject
+ \setfigureobject\vbox{\box\foundexternalfigure}%
+ \setxvalue{\externalfigurestamp\c!n}{\number\nofinsertpages}%
+ \global\setbox\foundexternalfigure\naturalvbox
+ {\doscalebox\??ef{\dowithfigure{\getfigureobject}}}%
+ \xdef\noffigurepages{\number\getvalue{\externalfigurestamp\c!n}}%
+ \else
+ % maybe a tex figure
+ \global\setbox\foundexternalfigure\naturalvbox
+ {\doscalebox\??ef{\dowithfigure{\box\foundexternalfigure}}}%
+ \xdef\noffigurepages{\number\nofinsertpages}%
+ \fi
+ \fi
+ \global\wd\foundexternalfigure\finalscaleboxwidth
+ \global\ht\foundexternalfigure\finalscaleboxheight
+ \global\let\lastfigureobjectname\externalfigurestamp
+ \doresetobjects} % clean up driver left overs
+
+\def\packageexternalfigureobject
+ {\global\setbox\foundexternalfigure\vbox to \naturalfigureheight
+ {\vfill
+ \ifdim\wd\foundexternalfigure=\zeropoint
+ \setextrafiguredriveroptions
+ \insertunscaledfiguredriverdata
+ \else\ifskipexternalfigures
+ \ruledhbox{\backgroundline[\@@efsplitcolor]{\fakebox\foundexternalfigure}}%
+ \else
+ \box\foundexternalfigure
+ \fi\fi}%
+ \wd\foundexternalfigure\naturalfigurewidth
+ \ht\foundexternalfigure\naturalfigureheight}
+
+\def\finishexternalfigure % here we use \figurevariables
+ {\global\setbox\foundexternalfigure\vbox
+ {\forgetall
+ \ifcase\figurestatus
+ \resetsystemmode\v!figure % todo, also: \v!resource
+ \else
+ \setsystemmode \v!figure % todo, also: \v!resource
+ \fi
+ \ifconditional\externalfigureflush
+ \ifconditional\externalfigurelevel % probably background
+ \ifskipexternalfigures
+ % nothing
+ \fakebox\foundexternalfigure
+ \else\ifcase\figurestatus
+ % nothing
+ \else\ifnum\splitexternalfigure=\plustwo\else
+ \the\externalfigurepostprocessors
+ \box\foundexternalfigure
+ \fi\fi\fi
+ \else
+ \iftrialtypesetting \else \feedbackexternalfigure \fi
+ \settrue\externalfigurelevel
+ \ifskipexternalfigures
+ \ifcase\figurestatus
+ \externalfigurereplacement\figurelabel\figurefilename{unknown}%
+ \else
+ \externalfigurereplacement\figurelabel\figurefullname{skipped}%
+ \fi
+ \else\ifcase\figurestatus
+ \externalfigurereplacement\figurelabel\figurefilename{unknown}%
+ \else\ifnum\splitexternalfigure=\plustwo
+ \backgroundline[\@@efsplitcolor]{\fakebox\foundexternalfigure}%
+ \else
+ \the\externalfigurepostprocessors
+ \doifelse\@@efreset\v!yes
+ {\wd\foundexternalfigure\figurewidth
+ \ht\foundexternalfigure\figureheight
+ \dp\foundexternalfigure\zeropoint
+ \box\foundexternalfigure}
+ {\localframed % should also be applied to high res !
+ [\??ef]
+ [\c!offset=\v!overlay,
+ \c!width=\figurewidth,
+ \c!height=\figureheight]
+ {\vfilll
+ \ifnum\splitexternalfigure=\plusone
+ % hm, eigenlijk in dit geval achtergrondkleur
+ \hidesplitcolorfalse % really needed
+ \backgroundline[\@@efsplitcolor]{\box\foundexternalfigure}%
+ \else % = 0, no split mode
+ \box\foundexternalfigure
+ \fi}}%
+ \fi\fi\fi
+ \fi
+ \else
+ % maybe also \the\externalfigurepostprocessors
+ \iftrialtypesetting \else \feedbackexternalfigure \fi
+ \fi}}
+
+\def\insertfiguredriverdata#1#2%
+ {\lowercasestring\wantedfiguretypespec\to\lcwantedfiguretypespec
+ \lowercasestring\wantedfiguremethod \to\lcwantedfiguremethod
+ \edef\@@DriverImageWidth {\the\dimexpr#1\relax}%
+ \edef\@@DriverImageHeight{\the\dimexpr#2\relax}%
+ \let \@@DriverImageFile \wantedfigurefullname
+ \let \@@DriverImageType \lcwantedfiguretypespec
+ \let \@@DriverImageMethod \lcwantedfiguremethod
+ \let \@@DriverImageLabel \wantedfigurelabel
+ \let \@@DriverImagePage \wantedfigurepage
+ \doinsertfile}
+
+\def\insertunscaledfiguredriverdata
+ {\insertfiguredriverdata\naturalfigurewidth\naturalfigureheight}
+
+\def\insertscaledfiguredriverdata
+ {\insertfiguredriverdata\finalscaleboxwidth\finalscaleboxheight}
+
+\ifx\externalfigurereplacement\undefined\let\externalfigurereplacement\gobblethrearguments\fi
+\ifx\externalfigureplaceholder\undefined\let\externalfigureplaceholder\gobblethrearguments\fi
+
+\def\registerexternalfigure % no placement, handy for preprocessing
+ {\dotripleempty\doregisterexternalfigure}
+
+\def\doregisterexternalfigure[#1][#2][#3]%
+ {\bgroup
+ \setfalse\externalfigureflush
+ \externalfigure[#1][#2][#3]% or \doexternalfigure
+ \egroup}
+
+\let\feedbackexternalfigure\relax % \gobblefourarguments
+\let\dowithfigure \relax
+
+%D Conversion stuff:
+
+\newcount\nofconversionfigures
+
+\def\resetwantedconversionvariables
+ {\let\wantedconversionpath \empty % these point to the to be converted graphic
+ \let\wantedconversionname \empty
+ \let\wantedconversiontype \empty
+ \let\wantedconversioncache \empty
+ \let\wantedconversionprefix\empty}
+
+\resetwantedconversionvariables
+
+\def\checkforconvertedfigure
+ {\ifcase\figurestatus
+ \resetwantedconversionvariables
+ \doifsomething\@@efconversion
+ {\global\advance\nofconversionfigures\plusone
+ \doshowfigurestate{n-of-conversions : \number\nofconversionfigures}%
+ \edef\wantedfigureconversion{\@@efconversion}%
+ \edef\wantedconversioncache {\@@efcache}%
+ \edef\wantedconversionprefix{\@@efprefix}%
+ \doshowfigurestate{checking paths : \figurepathlist}%
+ \processcommacommand[\figurepathlist]\dolocatefigureconversionfile
+ \ifcase\figurestatus
+ \doshowfigurestate{remark : no conversion file found}%
+ \else
+ \doshowfigurestate{remark : conversion file found}%
+ \chardef\figurestatus\zerocount
+ \fi
+ \let\wantedconversionname\wantedfigurename
+ \edef\wantedfigurename{\wantedconversionprefix\wantedfigurename}%
+ \ifx\wantedconversioncache\empty
+ \let \wantedfigurepath \wantedconversionpath
+ \else
+ \checkfilename\@@efcache
+ \ifnum\kindoffile=\plusone
+ \let\wantedfigurepath\@@efcache % root related path
+ \else % brrr
+ \edef\wantedfigurepath{\@@efcache,\wantedconversionpath/\@@efcache}% in case of explicit paths, what a mess
+ \fi
+ \fi
+ \let\wantedfiguretype \empty
+ \let\wantedfiguretypelist\figuretypes % hm, why needed
+ \ifx\figurepathlist\empty
+ \let\figurepathlist\wantedfigurepath
+ \else
+ \edef\figurepathlist{\wantedfigurepath,\figurepathlist}%
+ \fi
+ \doshowfigurestate{conversion path : \wantedconversionpath}%
+ \doshowfigurestate{conversion name : \wantedconversionname}}%
+ \doshowfigurestate{new figure path : \wantedfigurepath}%
+ \fi}
+
+\def\dolocatefigureconversionfile#1%
+ {\ifcase\figurestatus
+ \setwantedfigurefullname{#1}\wantedfigurename\wantedfiguretype
+ \doshowfigurestate{locating original : \wantedfigurefullname}%
+ \doiffile\wantedfigurefullname
+ {\def\wantedconversionpath{#1}%
+ \let\wantedconversionname\wantedfigurename
+ \let\wantedconversiontype\wantedfiguretype
+ \chardef\figurestatus\plusfive}%
+ \fi}
+
+\def\setpublicfigureconversionvariables % also prefix, cache
+ {\doifsomething\@@efconversion
+ {\doifmode{\systemmodeprefix\v!first}
+ {\let\figurefilepath\wantedconversionpath
+ \let\figurefilename\wantedconversionname
+ \let\figurefiletype\wantedconversiontype
+ \let\figurefileconversion\wantedfigureconversion
+ \def\figurefullname
+ {\ifx\wantedconversionpath\empty\else\wantedconversionpath/\fi
+ \wantedconversionname
+ \ifx\wantedconversiontype\empty\else.\wantedconversiontype\fi}}}}
+
+%D In \PDF\ one can specify an alternative graphic. This means
+%D that for instance a low resolution graphic can be used for
+%D viewing and a high res one for printing. Because this
+%D feature depends much on the driver, here we only take care
+%D of perparations. It is up to the special driver to handle
+%D the inclusion. The driver routines can change the content of
+%D box \type {\foundexternalfigure} if suitable.
+%D
+%D One complication is for instance that an alternative may
+%D not itself have an alternative, and these kind of situations
+%D are best handled by the driver.
+
+\let\lastfigureobjectname\empty
+
+%D The next macro does not work well with figure bases yet.
+
+\def\calculateexternalscreenfigure[#1][#2][#3][#4][#5][#6]%
+ {\ifx\@@efdisplay\empty\else
+ \doifnot\@@efobject\v!no
+ {\doifobjectssupportedelse
+ {\doifspecialavailableelse\doregisterfigure
+ {\doshowfigurestate{screen alternative : start}%
+ \bgroup
+ \dosetefparameters{#4}{#5}{#6}%
+ \doregisterfigure{FIG}{\lastfigureobjectname}%
+ \let\@@ef@@scherm\@@efdisplay
+ \calculateexternalfigure[#1][\@@ef@@scherm][\@@ef@@scherm][#4,\c!display=][#5][#6]%
+ \doshowfigurestate{screen alternative : stop}%
+ \egroup}
+ {}}
+ {}}%
+ \fi}
+
+\def\getfiguredimensions
+ {\dodoubleempty\dogetfiguredimensions}
+
+\def\dogetfiguredimensions[#1][#2]%
+ {{\let\immediate\relax % very dirty but prevents flushing, will change
+ \setbox0\hbox{\externalfigure[#1][#2,\c!display=,\c!object=\v!no]}}}
+
+% use the next one when the object must be forgotten (xobj
+% nums can migrate to the next object; maybe it should
+% always be done; todo ....
+
+\def\getfiguredimensionsonly
+ {\dodoubleempty\dogetfiguredimensionsonly}
+
+\def\dogetfiguredimensionsonly[#1][#2]%
+ {\dogetfiguredimensions[#1][#2]%
+ \doresetobjects}
+
+\def\doiffigureelse#1%
+ {\getfiguredimensions[#1]%
+ \ifcase\figurewidth
+ \expandafter\secondoftwoarguments
+ \else
+ \expandafter\firstoftwoarguments
+ \fi}
+
+%D Size determination.
+%D
+%D An analyzer must set the following dimensions (global macros):
+%D
+%D \starttyping
+%D \analyzedfigurewidth
+%D \analyzedfigureheight
+%D \stoptyping
+%D
+%D And afterwards, when succeeded, call:
+%D
+%D \starttyping
+%D \setanalyzedfiguredimensions{number>=10}
+%D \stoptyping
+%D
+%D Numbers upto 9 are reserved for special purposes:
+%D
+%D \starttabulate
+%D \NC 0 \NC not found \NC \NR
+%D \NC 1 \NC object (will be reused) \NC \NR
+%D \NC 2 \NC found but no dimensions (e.g. special annotation) \NC \NR
+%D \stoptabulate
+
+\let\doanalyzefiguredimensionsfromfile\relax % hook for figuredatabase
+\let\doanalyzefiguredimensionsinternal\relax
+\let\doanalyzefiguredimensionsexternal\relax % hook for rli support (see later)
+\let\doanalyzefiguredimensionsfallback\relax
+
+\def\doanalyzefiguredimensions
+ {\lowercasestring\wantedfiguretypespec\to\lcwantedfiguretypespec
+ \doiffileinsertionsupportedelse\lcwantedfiguretypespec
+ {\doiffileelse\wantedfigurefullname
+ {\doshowfigurestate{analyzing : \wantedfigurefullname}%
+ \doanalyzefiguredimensionsinternal
+ \doanalyzefiguredimensionsexternal
+ \doanalyzefiguredimensionsfallback}
+ {\doshowfigurestate{not found : \wantedfigurefullname}}}
+ {}}
+
+\def\setanalyzedfiguredimensions#1%
+ {\ifdim\analyzedfigurewidth>\zeropoint
+ \ifdim\analyzedfigureheight>\zeropoint
+ \determinedfigurewidth \analyzedfigurewidth
+ \determinedfigureheight\analyzedfigureheight
+ \chardef\figurestatus #1\relax
+ \doshowfigurestate{dimensions :
+ \the\dimexpr\analyzedfigurewidth\relax\space x\space
+ \the\dimexpr\analyzedfigureheight\relax}%
+ \else
+ \determinedfigurewidth \zeropoint
+ \determinedfigureheight\zeropoint
+ \chardef\figurestatus \zerocount
+ \fi
+ \else
+ \determinedfigurewidth \zeropoint
+ \determinedfigureheight\zeropoint
+ \chardef\figurestatus \zerocount
+ \fi}
+
+%D We can remap types. This is to be dealt with in the driver files.
+
+\def\definegraphictypesynonym
+ {\dodoubleargument\dodefinegraphictypesynonym}
+
+\def\dodefinegraphictypesynonym[#1][#2]%
+ {\setvalue{\??ef:\??ex:#1}{#2}}
+
+\def\truegraphictype#1%
+ {\ifcsname\??ef:\??ex:#1\endcsname
+ \expandafter\truegraphictype\csname\??ef:\??ex:#1\endcsname\else#1%
+ \fi}
+
+\definegraphictypesynonym[epdf] [pdf]
+\definegraphictypesynonym[jpeg] [jpg]
+\definegraphictypesynonym[jp2] [jpg]
+\definegraphictypesynonym[jbig] [jb2]
+\definegraphictypesynonym[jbig2][jb2]
+\definegraphictypesynonym[jbg] [jb2]
+
+%D The self method (mostly used) uses the driver.
+
+% todo: when zero width mps, ok
+%
+% analyzer must set the analyzed dimensions
+
+\def\doanalyzefiguredimensionsinternal
+ {\ifcase\figurestatus
+ \lowercasestring\wantedfiguretypespec\to\lcwantedfiguretypespec
+ \let\@@DriverImageFile \wantedfigurefullname
+ \let\@@DriverImagePage \wantedfigurepage
+ \let\@@DriverImageType\lcwantedfiguretypespec
+ % use internal when available, otherwise try driver (\dogetfiguresize)
+ \executeifdefined{dogetfiguresize\@@DriverImageType}\dogetfiguresize
+ \setanalyzedfiguredimensions\!!ten
+ \fi}
+
+%D The tex method.
+
+\def\dogetfiguresizetex
+ {\ifcase\figurestatus
+ \global\setbox\foundexternalfigure\vbox
+ {\insidefloattrue
+ \forgetall
+ \blank[\v!disable]% niet meer weg !
+ \startreadingfile
+ \readfile\wantedfigurefullname \donothing \donothing
+ \stopreadingfile
+ \endgraf
+ \removelastskip}%
+ \global\setbox\foundexternalfigure\hbox
+ {\raise\dp\foundexternalfigure\box\foundexternalfigure}%
+ \xdef\analyzedfigurewidth {\the\wd\foundexternalfigure}%
+ \xdef\analyzedfigureheight{\the\ht\foundexternalfigure}%
+ \fi}
+
+\let\dogetfiguresizetmp \dogetfiguresizetex
+\let\dogetfiguresizebuffer\dogetfiguresizetex
+
+%D The eps, mps and svg files are read directly.
+
+\def\dogetfiguresizeeps
+ {\dogetEPSboundingbox\wantedfigurefullname\!!widtha\!!heighta\!!widthb\!!heightb
+ \xdef\analyzedfigurewidth {\the\!!widthb}%
+ \xdef\analyzedfigureheight{\the\!!heightb}}
+
+\let\dogetfiguresizemps\dogetfiguresizeeps
+
+\def\dogetfiguresizesvg
+ {\doifinset\wantedfiguretypespec\c!svg
+ {\startnointerference
+ \startXMLignore
+ \defineXMLcommand[svg][width=100,height=75]
+ {\doifdimensionelse{\XMLop{width}}
+ {\xdef\analyzedfigurewidth {\the\dimexpr\XMLop{width}\relax}}
+ {\xdef\analyzedfigurewidth {\the\dimexpr\XMLop{width}\onebasepoint\relax}}%
+ \doifdimensionelse{\XMLop{height}}
+ {\xdef\analyzedfigurewidth {\the\dimexpr\XMLop{height}\relax}}
+ {\xdef\analyzedfigurewidth {\the\dimexpr\XMLop{height}\onebasepoint\relax}}%
+ \endinput}%
+ \processXMLfilegrouped\wantedfigurefullname
+ \stopXMLignore
+ \stopnointerference}}
+
+%D Do some checking on the filename.
+
+\newconditional \figurefileisqualified
+
+\def\setfigurepathlist
+ {\let\figurepathlist\empty
+ \expanded{\doifinset{\v!global }{\@@exlocation}}
+ {\let\figurepathlist\@@exdirectory}%
+ \expanded{\doifinset{\v!local }{\@@exlocation}}
+ {\prependtocommalist\f!currentpath\figurepathlist}%
+ \expanded{\doifinset{\v!default}{\@@exlocation}}
+ {\appendtocommalist\defaultfigurepathsignal\figurepathlist}}
+
+% \def\analyzefigurefilename#1#2%
+% {\sanitizefilename#1\to\expandedfigurename
+% \expanded{\checkfilename{\expandedfigurename}}%
+% \ifcase\kindoffile
+% \splitfigurefilename
+% \ifcase\splitoffkind
+% \let\wantedfigurepath\empty % no . either
+% \setfigurepathlist
+% \setfalse\figurefileisqualified
+% \else
+% \splitfigurefilename
+% \let\figurepathlist\wantedfigurepath
+% \let\wantedfigurepath\empty
+% \settrue\figurefileisqualified
+% \fi
+% \else % fully qualified
+% \splitfigurefilename
+% \let\figurepathlist\wantedfigurepath
+% \let\wantedfigurepath\empty
+% \settrue\figurefileisqualified
+% \fi
+% \ifx\figurepathlist\empty
+% \let\figurepathlist\defaultfigurepathsignal % will prepend no path
+% \fi
+% \doifelsenothing\wantedfiguretype
+% {\doifparentfileelse\wantedfigurename
+% {\@EA\removefromcommalist\@EA{\jobsuffix }\wantedfiguretypelist
+% \@EA\removefromcommalist\@EA{\jobfilesuffix}\wantedfiguretypelist}
+% {}}
+% {\let\wantedfiguretypelist\empty
+% \let\wantedfiguretypespec\wantedfiguretype}%
+% \edef\wantedfigurelabel{#2}%
+% \doshowfigurestate{type check : \ifx\wantedfiguretypelist\empty forced type \wantedfiguretypespec\else\wantedfiguretypelist\fi}%
+% \doshowfigurestate{file specs : \wantedfigurefull\space [\wantedfigurepath] [\wantedfigurename] [\wantedfiguretype]}%
+% \doshowfigurestate{file type : \ifconditional\figurefileisqualified qualified\else simple\fi}}
+
+% The combined path and qualified path hack is dedicated to Onno Tomson,
+% our partner in fighting inconsistent and faulty image specifications in
+% user files.
+
+\def\analyzefigurefilename#1#2%
+ {\sanitizefilename#1\to\expandedfigurename
+ \expanded{\checkfilename{\expandedfigurename}}%
+ \ifcase\kindoffile
+ \splitfigurefilename
+ \ifcase\splitoffkind
+ \let\wantedfigurepath\empty % no . either
+ \setfigurepathlist
+ \setfalse\figurefileisqualified
+ \else
+ \splitfigurefilename
+ % will become splitoffkind 3 ! ! ! !
+ \setfalse\figurefileisqualified
+ \doifinstring{$$/}{$$\wantedfigurepath}{\settrue\figurefileisqualified}%
+ \doifinstring {:} {\wantedfigurepath}{\settrue\figurefileisqualified}%
+ \ifconditional\figurefileisqualified
+ \let\figurepathlist\wantedfigurepath
+ \let\wantedfigurepath\empty
+ \settrue\figurefileisqualified
+ \else
+ \let\figurepathlist\@@exdirectory
+ \let\oldfigurepathlist\figurepathlist
+ \let\figurepathlist\wantedfigurepath
+ \def\docommand##1{\edef\figurepathlist{\figurepathlist,##1/\wantedfigurepath}}%
+ \processcommacommand[\oldfigurepathlist]\docommand
+ \fi
+ \fi
+ \else % fully qualified
+ \splitfigurefilename
+ \let\wantedfigurepath\empty
+ \settrue\figurefileisqualified
+ \fi
+ \ifx\figurepathlist\empty
+ \let\figurepathlist\defaultfigurepathsignal % will prepend no path
+ \fi
+ \doifelsenothing\wantedfiguretype
+ {\doifparentfileelse\wantedfigurename
+ {\@EA\removefromcommalist\@EA{\jobsuffix }\wantedfiguretypelist
+ \@EA\removefromcommalist\@EA{\jobfilesuffix}\wantedfiguretypelist}
+ {}}
+ {\let\wantedfiguretypelist\empty
+ \let\wantedfiguretypespec\wantedfiguretype}%
+ \edef\wantedfigurelabel{#2}%
+ \doshowfigurestate{type check : \ifx\wantedfiguretypelist\empty forced type \wantedfiguretypespec\else\wantedfiguretypelist\fi}%
+ \doshowfigurestate{file specs : \wantedfigurefull\space [\wantedfigurepath] [\wantedfigurename] [\wantedfiguretype]}%
+ \doshowfigurestate{file type : \ifconditional\figurefileisqualified qualified\else simple\fi}}
+
+\def\setwantedfigurefullname#1#2#3% path name spec
+ {\ifx\wantedfiguremethod\empty
+ % the either explicit or gambled typespec determines the method
+ \edef\wantedfiguretypespec{#3}%
+ \doifelse{#1}\defaultfigurepathsignal
+ {\edef\wantedfigurefullname {#2.\wantedfiguretypespec}}
+ {\edef\wantedfigurefullname{#1/#2.\wantedfiguretypespec}}%
+ \else\ifx\wantedfiguretype\empty %
+ % the typespec (probably the same as the method) determines the suffix
+ \doifelse{#1}\defaultfigurepathsignal
+ {\edef\wantedfigurefullname {#2.\wantedfiguretypespec}}
+ {\edef\wantedfigurefullname{#1/#2.\wantedfiguretypespec}}%
+ \let\wantedfiguretypespec\wantedfiguremethod
+ \else
+ % the given suffix is used
+ \let\wantedfiguretypespec\wantedfiguremethod
+ \doifelse{#1}\defaultfigurepathsignal
+ {\edef\wantedfigurefullname {#2.\wantedfiguretype}}
+ {\edef\wantedfigurefullname{#1/#2.\wantedfiguretype}}%
+ \fi\fi}
+
+\def\splitfigurefilename
+ {\splitfilename\expandedfigurename
+ \let\wantedfigurefull\splitofffull
+ \let\wantedfigurepath\splitoffpath
+ \let\wantedfigurename\splitoffname
+ \let\wantedfigurebase\splitoffbase
+ \let\wantedfiguretype\splitofftype}
+
+\def\analyzefigurefiles
+ {\ifconditional\figurefileisqualified
+ \ifx\wantedfiguretype\empty
+ \doshowfigurestate{locating : unknown type}%
+ \doanalyzeunknownfiguretype
+ \else
+ % this file or none
+ \doshowfigurestate{locating : known type}%
+ \doanalyzequalifiedfigure
+ \fi
+ \else
+ \ifx\wantedfiguretype\empty
+ % locate best fit / check support
+ \doshowfigurestate{locating : best fit}%
+ \doanalyzeunknownfiguretype
+ \else
+ % only check on paths
+ \doshowfigurestate{locating : known types}%
+ \doanalyzeknownfiguretype
+ \fi
+ \fi}
+
+\def\doanalyzequalifiedfigure
+ {\let\wantedfigurefullname\wantedfigurefull
+ \let\wantedfiguretypespec\wantedfiguretype
+ \doshowfigurestate{forced type : \wantedfiguretype}%
+ \doshowfigurestate{identifying : \wantedfigurefullname}%
+ \doanalyzefiguredimensions}
+
+\def\doanalyzeknownfiguretype
+ {\doshowfigurestate{using paths : \figurepathlist}%
+ \doshowfigurestate{known type : \wantedfiguretype}%
+ \doshowfigurestate{identifying : \wantedfigurename}%
+ \let\wantedfiguretypespec\wantedfiguretype
+ \processcommacommand[\figurepathlist]\dodoanalyzeknownfiguretype}
+
+\def\dodoanalyzeknownfiguretype#1% path
+ {\ifcase\figurestatus
+ \setwantedfigurefullname{#1}\wantedfigurename\wantedfiguretype
+ \doanalyzefiguredimensions
+ \fi}
+
+\def\doanalyzeunknownfiguretype
+ {\doshowfigurestate{using paths : \figurepathlist}%
+ \doshowfigurestate{using types : \wantedfiguretypelist}%
+ \doshowfigurestate{identifying : \wantedfigurename}%
+ \processcommacommand[\wantedfiguretypelist]\dodoanalyzeunknownfiguretype}
+
+\def\dodoanalyzeunknownfiguretype#1%
+ {\processcommacommand[\figurepathlist]{\dododoanalyzeunknownfiguretype{#1}}}
+
+\def\dododoanalyzeunknownfiguretype#1#2% type path
+ {\ifcase\figurestatus
+ \setwantedfigurefullname{#2}\wantedfigurename{#1}% path spec
+ \doanalyzefiguredimensions
+ \fi}
+
+%D Some files, take for instance movies, cannot easilly be
+%D parsed on dimensions, that is, not yet. Although the current
+%D mechanism has no problems with this, as long as the user
+%D specified width and height reflect the right aspect ratio.
+%D Nevertheless, when one does not want any scanning done, one
+%D can disable \type{preset}. When no preset is needed, we only
+%D locate the file.
+
+\def\doanalyzefiguredimensionsfallback
+ {\ifcase\figurestatus
+ \doshowfigurestate{warning : assuming adaptive figure}%
+ \xdef\analyzedfigurewidth {\the\dimexpr\@@efwidth +\zeropoint\relax}%
+ \xdef\analyzedfigureheight{\the\dimexpr\@@efheight+\zeropoint\relax}%
+ \setanalyzedfiguredimensions\plustwo
+ \fi}
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/core-inc.mkiv b/Master/texmf-dist/tex/context/base/core-inc.mkiv
new file mode 100644
index 00000000000..24a78e65750
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/core-inc.mkiv
@@ -0,0 +1,409 @@
+%D \module
+%D [ file=core-inc, % moved from core-fig
+%D version=2006.08.26, % overhaul of 1997.03.31
+%D title=\CONTEXT\ Core Macros,
+%D subtitle=Figure Inclusion,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D todo:
+%D
+%D - color conversion
+%D - color separation
+%D - alternative images
+%D - a few more obscure things
+
+\registerctxluafile{core-inc}{1.001}
+
+\unprotect
+
+%D The following registers are used (if only to be downward compatible).
+
+\newbox \foundexternalfigure
+\newif \iftraceexternalfigures
+\newif \ifskipexternalfigures
+\newtoks \everyexternalfigureresets
+\newtoks \everyexternalfigurechecks
+\newtoks \externalfigurepostprocessors
+\chardef \splitexternalfigure \zerocount % 0 nosplit 1 split/yes 2 split/no
+
+\let\traceexternalfigures \traceexternalfigurestrue
+
+\def\resetfigurevariables {\the\everyexternalfigureresets}
+\def\checkfigurevariables {\the\everyexternalfigurechecks}
+
+%D Historic feature:
+
+\appendtoks
+ \global\let\externalfigurelog\empty
+\to \everyexternalfigureresets
+
+\let\runutilityfiletrue \relax \let\runutilityfilefalse \relax
+\let\consultutilityfiletrue\relax \let\consultutilityfilefalse\relax
+
+%D You can register additional suffixes with the following command:
+%D
+%D \starttyping
+%D \definegraphictypesynonym[jbig] [jb2]
+%D \definegraphictypesynonym[jbig2][jb2]
+%D \definegraphictypesynonym[jbg] [jb2]
+%D \stoptyping
+
+\def\definegraphictypesynonym
+ {\dodoubleargument\dodefinegraphictypesynonym}
+
+\def\dodefinegraphictypesynonym[#1][#2]%
+ {\ctxlua{figures.registersuffix("#1","#2")}}
+
+%D Additional paths can be installed with the regular setup command. The next
+%D macro picks up the list.
+
+\def\setfigurepathlist
+ {\ctxlua{figures.setpaths("\@@exlocation","\@@exdirectory")}}
+
+%D Variables:
+
+\def\defaultfigurewidth {8\lineheight}
+\def\defaultfigureheight {6\lineheight}
+
+\def\figurestatus {\numexpr\ctxlua{figures.tprint("status","status",0)}\relax} % number: 0 = not found
+\def\figurewidth {\ctxlua{figures.tprint("status","width",0)}sp}
+\def\figureheight {\ctxlua{figures.tprint("status","height",0)}sp}
+\def\figurexscale {\ctxlua{figures.tprint("status","xscale",1)}}
+\def\figureyscale {\ctxlua{figures.tprint("status","yscale",1)}}
+
+\def\figurelabel {\ctxlua{figures.tprint("request","label")}}
+\def\figurefileoriginal {\ctxlua{figures.tprint("request","name")}}
+\def\figurefilepage {\ctxlua{figures.tprint("request","page",1)}}
+\def\figurefileoptions {\ctxlua{figures.tprint("request","options")}}
+\def\figurefileconversion{\ctxlua{figures.tprint("request","conversion")}}
+\def\figurefilecache {\ctxlua{figures.tprint("request","cache")}}
+\def\figurefileprefix {\ctxlua{figures.tprint("request","prefix")}}
+
+\def\figurenaturalwidth {\ctxlua{figures.tprint("used","width",\number\dimexpr\defaultfigurewidth\relax)}sp}
+\def\figurenaturalheight {\ctxlua{figures.tprint("used","height",\number\dimexpr\defaultfigureheight\relax)}sp}
+
+\def\figurefilepath {\ctxlua{tex.sprint(tex.ctxcatcodes,file.dirname (figures.get("used","fullname")))}}
+\def\figurefilename {\ctxlua{tex.sprint(tex.ctxcatcodes,file.nameonly(figures.get("used","fullname")))}}
+\def\figurefiletype {\ctxlua{tex.sprint(tex.ctxcatcodes,file.extname (figures.get("used","fullname")))}}
+\def\figurefullname {\ctxlua{figures.tprint("used","fullname")}}
+
+\def\noffigurepages {\ctxlua{figures.tprint("used","pages",0)}}
+
+\let\naturalfigurewidth \figurenaturalwidth
+\let\naturalfigureheight \figurenaturalheight
+
+\let\figurescalewidth \figurewidth
+\let\figurescaleheight \figureheight
+\let\figurescalexscale \figurexscale
+\let\figurescaleyscale \figureyscale
+
+\appendtoks
+ \ctxlua {
+ figures.setpaths("\@@exlocation","\@@exdirectory") ;
+ figures.defaultwidth = \number\dimexpr\defaultfigurewidth \relax ;
+ figures.defaultheight = \number\dimexpr\defaultfigureheight\relax ;
+ figures.boxnumber = \number\foundexternalfigure ;
+ }%
+\to \everyexternalfigureresets
+
+%D In some situations we need to make sure that the figure related variables
+%D are reset. This is especially important when we are nesting. Is this still
+%D needed in \MKIV.
+
+\def\resetexternalfigures
+ {\let\@@efoption \empty % \let\@@efprefix\empty
+ \let\@@efmaxwidth \empty % \let\@@efcache \empty
+ \let\@@efmaxheight \empty % \let\@@efframe \v!off
+ \let\@@efforegroundcolor\empty
+ \let\@@efcolor \empty
+ \let\@@efconversion \empty
+ \let\@@efbackground \empty}
+
+\appendtoks \resetexternalfigures \to \everyoverlay
+\appendtoks \resetexternalfigures \to \everybeforepagebody % not really needed
+
+\def\resetfigureusersettings
+ {%
+ \let\@@efmethod \empty
+ \let\@@eflabel \empty
+ \let\@@efsize \empty
+ \let\@@efconversion\@@exconversion
+ \let\@@efprefix \@@exprefix
+ \let\@@efcache \@@excache
+ \let\@@efpage \!!zerocount
+ \let\@@efobject \@@exobject
+ \let\@@efdisplay \empty
+ %
+ \let\@@efpreset \v!yes
+ \let\@@efsplit \empty
+ \let\@@efcolor \empty
+ %
+ \let\@@efsymbol \v!no
+ %
+ \let\@@efcontrols \v!no
+ \let\@@efpreview \v!no
+ \let\@@efrepeat \v!no
+ %
+ \let\@@efhfactor \empty
+ \let\@@efwfactor \empty
+ \let\@@effactor \empty
+ \let\@@efmaxwidth \@@exmaxwidth
+ \let\@@efmaxheight \@@exmaxheight
+ \let\@@efxscale \empty
+ \let\@@efyscale \empty
+ \let\@@efscale \empty
+ \let\@@efsx \!!plusone
+ \let\@@efsy \!!plusone
+ \let\@@efwidth \empty
+ \let\@@efheight \empty
+ \let\@@eflines \empty
+ \let\@@efgrid \empty}
+
+\appendtoks
+ \resetfigureusersettings
+\to \everyexternalfigureresets
+
+\def\checkfigureusersettings
+ {% old features
+ \doif\@@exoption\v!frame
+ {\let\@@efframe\v!on}%
+ \doif\@@exoption\v!empty
+ {\skipexternalfigurestrue
+ \let\@@efframe\v!off}%
+ % seperation, seldom used
+ \doifseparatingcolorselse
+ {\let\@@efforegroundcolor\empty
+ \doifelsenothing\@@efsplit
+ {\chardef\splitexternalfigure\zerocount}
+ {\doifcolorchannelelse\@@efsplit
+ {\let\@@efobject\v!no % why?
+ \chardef\splitexternalfigure\plusone}
+ {\chardef\splitexternalfigure\plustwo}}}
+ {\chardef\splitexternalfigure\zerocount}%
+ % fake color in gray bitmaps, assumes that
+ % a transparent color is used
+ \doifsomething\@@efforegroundcolor
+ {\def\@@efbackground{\v!foreground,\v!color}%
+ \def\@@efbackgroundcolor{\@@efforegroundcolor}}%
+ \doifsomething\@@efcolor
+ {\doifcolorelse\@@efcolor
+ {\checkpredefinedcolor[\@@efcolor]%
+ \doregisterfigurecolor\@@efcolor}}%
+ \donothing}
+
+\appendtoks
+ \checkfigureusersettings
+\to \everyexternalfigurechecks
+
+%D Internal graphics are handled at the \TEX\ end:
+
+\def\doprocesstexlikefigure#1% retrofit into mkii
+ {\global\setbox\foundexternalfigure\vbox\framed
+ [\c!strut=\v!no,\c!align=\v!normal,\c!frame=\v!off,
+ \c!offset=\v!overlay,\c!width=\v!fit,\c!height=\v!fit]
+ {\blank[\v!disable]#1\endgraf\removelastskip}} % disable should stay here!
+
+\def\doprocessmpslikefigure#1% retrofit into mkii
+ {\global\setbox\foundexternalfigure\vbox{\convertMPtoPDF{#1}11}}
+
+\def\docheckfigurebuffer#1{\doprocesstexlikefigure{\getbuffer[#1]}}
+\def\docheckfiguretex #1{\doprocesstexlikefigure{\input#1\relax}}
+\def\docheckfiguremps #1{\doprocessmpslikefigure{#1}}
+
+\def\doscalefigure
+ {\global\setbox\foundexternalfigure\vbox{\doscalebox\??ef{\dowithfigure{\box\foundexternalfigure}}}}
+
+\newconditional\testexternalfigureonly
+
+\def\calculateexternalfigure[#1][#2][#3][#4][#5][#6]% \cmd label filename parent_id preset current
+ {\dontcomplain
+ \restorecatcodes
+ \forgetall
+ \resetfigurevariables
+ \dosetefparameters{#4}{#5}{#6}%
+ \checkfigurevariables
+ \ctxlua{figures.push {
+ name="#3",
+ label="#2", % todo: \@eflabel
+ page="\@@efpage",
+ size="\@@efsize",
+ object="\@@efobject",
+ prefix="\@@efprefix",
+ cache="\@@efcache",
+ format="\@@efmethod",
+ preset="\@@efprefix",
+ controls="\@@efcontrols",
+ preview="\@@efpreview",
+ display="\@@efdisplay",
+ ["repeat"]="\@@efrepeat",
+ width="\@@efwidth", % can be crap
+ height="\@@efheight", % can be crap
+ } }%
+ \ctxlua{figures.identify()}%
+ \ifconditional\testexternalfigureonly
+ \signalexternalfigure
+ \else
+ \ifcase\figurestatus
+ \ctxlua{figures.dummy()}%
+ \ctxlua{figures.scale()}%
+ \else
+ \ctxlua{figures.check()}%
+ \ctxlua{figures.include()}%
+ \ctxlua{figures.scale()}%
+ \fi
+ \ctxlua{figures.done()}%
+ \signalexternalfigure
+ \finishexternalfigure
+ \fi
+ \ctxlua{figures.pop()}}
+
+\def\relocateexternalfigure % easier here than in lua
+ {\global\setbox\foundexternalfigure\vbox to \ht\foundexternalfigure\bgroup
+ \vss
+ \ht\foundexternalfigure\zeropoint
+ \hbox to \wd\foundexternalfigure\bgroup
+ \box\foundexternalfigure
+ \hss
+ \egroup
+ \egroup}
+
+\def\signalexternalfigure
+ {\ifcase\figurestatus
+ \resetsystemmode\v!figure % todo, also: \v!resource
+ \else
+ \setsystemmode \v!figure % todo, also: \v!resource
+ \fi}
+
+\def\startfoundexternalfigure#1#2%
+ {\global\setbox\foundexternalfigure\vbox to #2\bgroup\vss\hbox to #1\bgroup}
+
+\def\stopfoundexternalfigure
+ {\hss\egroup\egroup}
+
+\def\emptyfoundexternalfigure
+ {\startfoundexternalfigure\defaultfigurewidth\defaultfigureheight
+ \stopfoundexternalfigure}
+
+\def\finishexternalfigure % here we use \figurevariables
+ {\global\setbox\foundexternalfigure\vbox
+ {\ifcase\figurestatus
+ \let\@@efframe\v!on
+ \fi
+ \ifconditional\externalfigureflush
+ \ifconditional\externalfigurelevel % probably background
+ \ifskipexternalfigures
+ % nothing
+ \fakebox\foundexternalfigure
+ \else\ifcase\figurestatus
+ % nothing
+ \else\ifnum\splitexternalfigure=\plustwo\else
+ \the\externalfigurepostprocessors
+ \box\foundexternalfigure
+ \fi\fi\fi
+ \else
+ \iftrialtypesetting \else \feedbackexternalfigure \fi
+ \settrue\externalfigurelevel
+ \ifskipexternalfigures
+ \ifcase\figurestatus
+ \externalfigurereplacement\figurelabel\figurefileoriginal{unknown}%
+ \else
+ \externalfigurereplacement\figurelabel\figurefullname{skipped}%
+ \fi
+ \else\ifcase\figurestatus
+ \externalfigurereplacement\figurelabel\figurefileoriginal{unknown}%
+ \else\ifnum\splitexternalfigure=\plustwo
+ \backgroundline[\@@efsplitcolor]{\fakebox\foundexternalfigure}%
+ \else
+ \the\externalfigurepostprocessors
+ \doifelse\@@efreset\v!yes
+ {\wd\foundexternalfigure\figurewidth
+ \ht\foundexternalfigure\figureheight
+ \dp\foundexternalfigure\zeropoint
+ \box\foundexternalfigure}
+ {\localframed % should also be applied to high res !
+ [\??ef]
+ [\c!offset=\v!overlay,
+ \c!width=\figurewidth,
+ \c!height=\figureheight]
+ {\vfilll
+ \ifnum\splitexternalfigure=\plusone
+ % hm, eigenlijk in dit geval achtergrondkleur
+ \hidesplitcolorfalse % really needed
+ \backgroundline[\@@efsplitcolor]{\box\foundexternalfigure}%
+ \else % = 0, no split mode
+ \box\foundexternalfigure
+ \fi}}%
+ \fi\fi\fi
+ \fi
+ \else
+ % maybe also \the\externalfigurepostprocessors
+ \iftrialtypesetting \else \feedbackexternalfigure \fi
+ \fi}}
+
+\ifx\externalfigurereplacement\undefined\let\externalfigurereplacement\gobblethrearguments\fi
+\ifx\externalfigureplaceholder\undefined\let\externalfigureplaceholder\gobblethrearguments\fi
+
+\let\feedbackexternalfigure\relax % \gobblefourarguments
+\let\dowithfigure \relax
+
+% \let\lastfigureobjectname\empty
+
+\def\calculateexternalscreenfigure[#1][#2][#3][#4][#5][#6]%
+ {\ifx\@@efdisplay\empty\else
+% \doifnot\@@efobject\v!no
+% {\doifobjectssupportedelse
+% {\doifspecialavailableelse\doregisterfigure
+% {\doshowfigurestate{screen alternative : start}%
+% \bgroup
+% \dosetefparameters{#4}{#5}{#6}%
+% \doregisterfigure{FIG}{\lastfigureobjectname}%
+% \let\@@ef@@scherm\@@efdisplay
+% \calculateexternalfigure[#1][\@@ef@@scherm][\@@ef@@scherm][#4,\c!display=][#5][#6]%
+% \doshowfigurestate{screen alternative : stop}%
+% \egroup}
+% {}}
+% {}}%
+ \fi}
+
+\def\getfiguredimensions
+ {\dodoubleempty\dogetfiguredimensions}
+
+\def\dogetfiguredimensions[#1][#2]%
+ {\startnointerference
+ \testexternalfigureonly
+ \externalfigure[#1][#2,\c!display=,\c!object=\v!no]%
+ \stopnointerference}
+
+\let\getfiguredimensionsonly\getfiguredimensions
+
+\def\doiffigureelse#1%
+ {\getfiguredimensions[#1]%
+ \ifcase\figurewidth % todo: \figurestatus
+ \expandafter\secondoftwoarguments
+ \else
+ \expandafter\firstoftwoarguments
+ \fi}
+
+\def\registerexternalfigure % no placement, handy for preprocessing
+ {\dotripleempty\doregisterexternalfigure}
+
+\def\doregisterexternalfigure[#1][#2][#3]%
+ {\startnointerference
+ \testexternalfigureonly
+ \setfalse\externalfigureflush % == test ?
+ \externalfigure[#1][#2][#3]% or \doexternalfigure
+ \externalfigure[#1][#2,\c!display=,\c!object=\v!no]%
+ \stopnointerference}
+
+% figurebases
+
+\def\usefigurebase[#1]%
+ {\ctxlua{figures.bases.use("#1")}}
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/core-inc.tex b/Master/texmf-dist/tex/context/base/core-inc.tex
new file mode 100644
index 00000000000..88d52e74643
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/core-inc.tex
@@ -0,0 +1,18 @@
+%D \module
+%D [ file=core-inc, % moved from core-fig
+%D version=2006.08.26, % overhaul of 1997.03.31
+%D title=\CONTEXT\ Core Macros,
+%D subtitle=Figure Inclusion,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{Context Core Macros / Figure Inclusion}
+
+\loadmarkfile{core-inc}
+
+\endinput
diff --git a/Master/texmf-dist/tex/context/base/core-int.tex b/Master/texmf-dist/tex/context/base/core-int.tex
index 428df8e0805..6545934f523 100644
--- a/Master/texmf-dist/tex/context/base/core-int.tex
+++ b/Master/texmf-dist/tex/context/base/core-int.tex
@@ -41,7 +41,7 @@
\startmessages german library: interactions
title: Interaktion
- 1: Aspekt des Verhaeltnis -- x -- (B x H)
+ 1: Seitenverhaeltnis -- x -- (B x H)
2: aktiv
3: inaktiv
4: keine Seitensynchronisation (--) im hmode
@@ -157,10 +157,6 @@
\unprotect
-\definesystemconstant {link}
-
-\definesystemvariable {lk}
-
% \expand vs \expanded
% linked registers implementeren als een koppeling == mooier
@@ -177,13 +173,13 @@
{\expanded{\definetwopasslist{\s!link:#1}}%
\expanded{\doloadtwopassdata{\s!link:#1}}%
\getfirsttwopassdata{\s!link:#1}%
- \setxvalue{\s!link:#1:f}{\twopassdata}%
+ \letgvalue{\s!link:#1:f}\twopassdata
\getlasttwopassdata{\s!link:#1}%
- \setxvalue{\s!link:#1:l}{\twopassdata}%
- \setxvalue{\s!link:#1:s}{\noftwopassitems}%
+ \letgvalue{\s!link:#1:l}\twopassdata
+ \letgvalue{\s!link:#1:s}\noftwopassitems
\gettwopassdata{\s!link:#1}%
- \setxvalue{\s!link:#1:c}{\twopassdata}%
- \setxvalue{\s!link:#1:n}{\twopassdata}}}
+ \letgvalue{\s!link:#1:c}\twopassdata
+ \letgvalue{\s!link:#1:n}\twopassdata}}
\def\koppeling[#1]#2%
{\bgroup
@@ -191,38 +187,37 @@
\doglobal\increment\numberoflinks
\gettwopassdata{\s!link:#1}%
\edef\numberoflinks{0\getvalue{\s!link:#1:s}}%
- \edef\firstlink{0\getvalue{\s!link:#1:f}}%
- \edef\lastlink{0\getvalue{\s!link:#1:l}}%
- \edef\currentlink{0\getvalue{\s!link:#1:n}}%
- \edef\prevlink{0\getvalue{\s!link:#1:c}}%
+ \edef\firstlink {0\getvalue{\s!link:#1:f}}%
+ \edef\lastlink {0\getvalue{\s!link:#1:l}}%
+ \edef\currentlink {0\getvalue{\s!link:#1:n}}%
+ \edef\prevlink {0\getvalue{\s!link:#1:c}}%
\iftwopassdatafound
\edef\nextlink{0\twopassdata}%
- \setxvalue{\s!link:#1:n}{\nextlink}%
- \setxvalue{\s!link:#1:c}{\currentlink}%
+ \letgvalue{\s!link:#1:n}\nextlink
+ \letgvalue{\s!link:#1:c}\currentlink
\else
- \edef\nextlink {0\getvalue{\s!link:#1:l}}%
+ \edef\nextlink{0\getvalue{\s!link:#1:l}}%
\fi
\lazysavetwopassdata{\s!link:#1}{\numberoflinks}{\noexpand\realfolio}%
- \ifnum\noflinks<2
+ \ifnum\noflinks<\plustwo
\locationfalse
\fi
\iflocation
\hbox
- {%\setupinteraction[\c!width=\!!zeropoint]%
- \setinteractionparameter\c!width\!!zeropoint
- \doganaareenpagina\??lk\gotobegincharacter\firstlink\hss
- \ifnum\noflinks>2
- \hskip\@@lkafstand
- \doganaareenpagina\??lk\gobackwardcharacter\prevlink\hss
+ {\setinteractionparameter\c!width\!!zeropoint
+ \dogotosomepage\??lk\gotobegincharacter\firstlink\hss
+ \ifnum\noflinks>\plustwo
+ \hskip\@@lkdistance
+ \dogotosomepage\??lk\gobackwardcharacter\prevlink\hss
\fi
- \hskip\@@lkafstand
+ \hskip\@@lkdistance
#2\relax
- \hskip\@@lkafstand
- \ifnum\noflinks>2
- \doganaareenpagina\??lk\goforwardcharacter\nextlink\hss
- \hskip\@@lkafstand
+ \hskip\@@lkdistance
+ \ifnum\noflinks>\plustwo
+ \dogotosomepage\??lk\goforwardcharacter\nextlink\hss
+ \hskip\@@lkdistance
\fi
- \doganaareenpagina\??lk\gotoendcharacter\lastlink}%
+ \dogotosomepage\??lk\gotoendcharacter\lastlink}%
\else
\hbox{#2}%
\fi
@@ -239,8 +234,7 @@
\gettwopassdata{\s!link:#1}%
\let\currentlink\twopassdata
\let\nextlink\twopassdata
- \setxvalue{\s!link:#1:}%
- {\firstlink:\lastlink:\noflinks:\currentlink:\nextlink}}}
+ \setxvalue{\s!link:#1:}{\firstlink:\lastlink:\noflinks:\currentlink:\nextlink}}}
\def\koppeling[#1]#2%
{\bgroup
@@ -254,29 +248,26 @@
\edef\prevlink {0##4}%
\edef\currentlink{0##5}}%
\expanded{\next[\getvalue{\s!link:#1:}]}%
- \edef\nextlink
- {0\iftwopassdatafound\twopassdata\else\lastlink\fi}%
- \setxvalue{\s!link:#1:}%
- {\firstlink:\lastlink:\noflinks:\currentlink:\nextlink}%
+ \edef\nextlink{0\iftwopassdatafound\twopassdata\else\lastlink\fi}%
+ \setxvalue{\s!link:#1:}{\firstlink:\lastlink:\noflinks:\currentlink:\nextlink}%
\lazysavetwopassdata{\s!link:#1}{\numberoflinks}{\noexpand\realfolio}%
- \ifnum\noflinks<2
+ \ifnum\noflinks<\plustwo
\locationfalse
\fi
\iflocation
\hbox
- {%\setupinteraction[\c!width=\!!zeropoint]%
- \setinteractionparameter\c!width\!!zeropoint
+ {\setinteractionparameter\c!width\!!zeropoint
#2\relax
- \hskip\@@lkafstand
- \doganaareenpagina\??lk\gotobegincharacter\firstlink\hss
- \ifnum\noflinks>2
- \doganaareenpagina\??lk\gobackwardcharacter\prevlink\hss
+ \hskip\@@lkdistance
+ \dogotosomepage\??lk\gotobegincharacter\firstlink\hss
+ \ifnum\noflinks>\plustwo
+ \dogotosomepage\??lk\gobackwardcharacter\prevlink\hss
\fi
- \ifnum\noflinks>2
- \doganaareenpagina\??lk\goforwardcharacter\nextlink\hss
- \hskip\@@lkafstand
+ \ifnum\noflinks>\plustwo
+ \dogotosomepage\??lk\goforwardcharacter\nextlink\hss
+ \hskip\@@lkdistance
\fi
- \doganaareenpagina\??lk\gotoendcharacter\lastlink}%
+ \dogotosomepage\??lk\gotoendcharacter\lastlink}%
\else
\hbox{#2}%
\fi
@@ -286,36 +277,22 @@
\def\docalculateinteractionscreen
{\doifelse\@@scwidth\v!fit
- {\!!widtha\leftedgewidth
- \advance\!!widtha \leftedgedistance
- \advance\!!widtha \leftmarginwidth
- \advance\!!widtha \leftmargindistance
+ {\!!widtha\leftcombitotal
\ifdim\backspace>\!!widtha\ifdim\backspace>\zeropoint\relax
\advance\backspace -\!!widtha
\fi\fi
- \advance\!!widtha \makeupwidth
- \advance\!!widtha \rightmargindistance
- \advance\!!widtha \rightmarginwidth
- \advance\!!widtha \rightedgedistance
- \advance\!!widtha \rightedgewidth
- \scratchdimen\@@scbackspace
- \advance\scratchdimen \@@schoroffset
- \advance\!!widtha 2\scratchdimen}
+ \advance\!!widtha\rightcombitotal
+ \advance\!!widtha 2\dimexpr\@@scbackspace+\@@schoroffset\relax}
{\doifelse\@@scwidth\v!max
{\!!widtha\printpaperwidth}
{\!!widtha\@@scwidth}}%
\doifelse\@@scheight\v!fit
- {\!!heighta\topheight
- \advance\!!heighta \topdistance
+ {\!!heighta\dimexpr\topheight+\topdistance\relax
\ifdim\topspace>\!!heighta\ifdim\topspace>\zeropoint\relax
\advance\topspace -\!!heighta
\fi\fi
- \advance\!!heighta \makeupheight
- \advance\!!heighta \bottomdistance
- \advance\!!heighta \bottomheight
- \scratchdimen\@@sctopspace
- \advance\scratchdimen \@@scveroffset
- \advance\!!heighta 2\scratchdimen}
+ \advance\!!heighta \dimexpr\makeupheight+\bottomdistance+\bottomheight\relax
+ \advance\!!heighta 2\dimexpr\@@sctopspace+\@@scveroffset\relax}
{\doifelse\@@scheight\v!max
{\!!heighta\printpaperheight}
{\!!heighta\@@scheight}}%
@@ -451,22 +428,6 @@
\definelist[\@@bookmark]
-% \appendtoks\flushpostponedbookmark\to\everypar
-% \appendtoks\flushpostponedbookmark\to\neverypar
-%
-% \let\flushpostponedbookmark\relax
-%
-% \def\simplebookmark#1%
-% {\ifx\flushpostponedbookmark\relax \else
-% \bgroup
-% \convertargument#1\to\ascii
-% \writestatus\m!systems{clashing bookmarks: \ascii}% ECHTE MESSAGE MAKEN
-% \egroup
-% \fi
-% \doglobal\prependtoks
-% \writetolist[\@@bookmark]{}{#1}%
-% \to\postponedbookmarks}
-
\newtoks\postponedbookmarks
\def\flushpostponedbookmark
@@ -714,54 +675,6 @@
\def\dosetlocationboxnone#1[#2]#3[#4]%
{\global\skippedmenuitemtrue}
-% the following version looks ok but is not, since it is unaware of
-% some reference properties
-%
-% \def\setlocationboxyes#1%
-% {\locationclicktrue
-% \ifx\currentouterreference\empty
-% \ifrealreferencepage\!!doneatrue\else\!!doneafalse\fi
-% \else
-% \!!doneafalse
-% \fi
-% \if!!donea
-% \ifcase\csname\??am\??am\csname#1\c!samepage\endcsname\endcsname\relax
-% \copycsname#1\c!color\endcsname\csname#1\c!contrastcolor\endcsname
-% \@EAEAEA\dosetlocationboxyes
-% \or
-% \@EAEAEA\dosetlocationboxempty
-% \or
-% \@EAEAEA\dosetlocationboxno
-% \or
-% \@EAEAEA\dosetlocationboxnone
-% \fi
-% \else
-% \@EA\dosetlocationboxcontent
-% \fi{#1}}
-%
-% \def\setlocationboxnop#1%
-% {\locationclickfalse
-% \ifcase\csname\??am\??am\csname#1\c!unknownreference\endcsname\endcsname\relax
-% \@EA\dosetlocationboxyes
-% \or
-% \@EA\dosetlocationboxempty
-% \or
-% \@EA\dosetlocationboxno
-% \or
-% \@EA\dosetlocationboxnone
-% \fi{#1}}
-%
-% \def\setlocationbox#1[#2]#3[#4]%
-% {\bgroup % really needed !
-% \edef\permittedreferences{\csname#1\c!obstruction\endcsname}%
-% \doifreferencepermittedelse{#4}
-% {\setlocationboxyes{#1}[#2]{#3}[#4]}
-% {\setlocationboxnop{#1}[#2]{#3}[#4]}%
-% \egroup}
-%
-% \def\setlocationboxraw#1[#2]#3[#4]%
-% {\localframed[#1][#2]{\dolocationattributes{#1}\c!style\c!color{#3}}}
-
\def\setlocationboxyes#1[#2]#3[#4]%
{\locationclicktrue
\setbox\locationbox\hbox
@@ -812,20 +725,6 @@
{\setlocationboxnop{#1}[#2]{#3}[#4]}%
\egroup}
-\def\dodosetlocationcommanditem#1#2#3[#4]#5\\%
- {\bgroup
- \leavevmode
- \doifelse{#5}{[]}
- {\doifassignmentelse{#4}{#3}{\setlocationbox{\??am#1}[]{#3}[#4]}}
- {#3}%
- \ifskippedmenuitem \else
- \getvalue{\??am#1#2}%
- \fi
- \egroup}
-
-\def\dosetlocationcommanditem#1#2#3%
- {\dodosetlocationcommanditem{#1}{#2}#3[]\\}
-
\def\setlocationnop#1[#2]#3%
{\localframed[#1][#2]{#3}}
@@ -836,18 +735,8 @@
% \v!empty=>\chardef\handleunknownmenuitem=1\relax,
% \v!no=>\chardef\handleunknownmenuitem=2\relax]%
\getvalue{\??am#1#3}\relax
- \ifextendedmenu
- \setamboxcommands{#1}{#4}%
- \def\next
- {\ignorespaces#2}%
- \else
- \def\dolocationcommand##1%
- {\dosetlocationcommanditem{#1}{#4}{##1}}%
- \def\next
- {\processcommalist[#2]\dolocationcommand}%
- \fi
- \next
- \unskip
+ \setamboxcommands{#1}{#4}%
+ \ignorespaces#2\unskip
\getvalue{\??am#1#5}}
\newcounter\currentamposition
@@ -861,8 +750,9 @@
\the\everysetmenucommands}
\def\menu@@amboxcommand#1\\%
- {\bgroup
- \leavevmode\ignorespaces#1\unskip\relax
+ {\dontleavehmode
+ \bgroup
+ \ignorespaces#1\unskip\relax
\ifskippedmenuitem \else
\getvalue{\??am\currentmenu\currentsubmenu}%
\fi
@@ -883,7 +773,6 @@
{\@@amboxcommand\setlocationbox{\??am\currentmenu}[\c!frame=\v!off,\c!background=]{\ignorespaces#2\unskip}[#1]\\}%
\def\menu@nop#1\\%
- %{\@@amboxcommand\phantom{\localframed[\??am\currentmenu][]{#1}}\\}%
{\@@amboxcommand\setlocationboxraw{\??am\currentmenu}[\c!frame=\v!off,\c!background=,\c!empty=\v!yes]{\ignorespaces#1\unskip}[]\\}%
\def\menu@txt#1\\%
@@ -913,27 +802,27 @@
% beware : never change the concept of pbgoffset
+\def\menuparameter#1{\csname\??am\currentmenu#1\endcsname}
+
\def\@@amhbox#1#2#3#4%
{\def\currentmenu{#3}%
\testinteractionmenu{#3}%
\iflocationmenupermitted
\bgroup
\showcomposition
- \def\dolocationcommand##1{\dosetlocationcommanditem{#3}{##1}}%
- \dimen0=\makeupwidth
- \advance\dimen0 \pagebackgroundhoffset
- \advance\dimen0 \pagebackgroundhoffset
- \advance\dimen0 -\getvalue{\??am#3\c!leftoffset}%
- \advance\dimen0 -\getvalue{\??am#3\c!rightoffset}%
- \setbox0\hbox to \dimen0
- {\forgetall
- \executeamboxcommands{#3}{#4}\c!left\c!middle\c!right}%
- \setbox0\hbox{\do@@ammenuposition{#3}{\box0}}%
- \wd0=\makeupwidth
- % geen \ht=#2 setting (yet)
- \hskip-\pagebackgroundhoffset
- \hskip \getvalue{\??am#3\c!leftoffset}%
- \box0\relax
+ \scratchdimen\dimexpr
+ \makeupwidth
+ +\pagebackgroundhoffset
+ +\pagebackgroundhoffset
+ -\menuparameter\c!leftoffset
+ -\menuparameter\c!rightoffset
+ \relax
+ \setbox\scratchbox\hbox to \scratchdimen
+ {\forgetall\executeamboxcommands{#3}{#4}\c!left\c!middle\c!right}%
+ \setbox\scratchbox\hbox{\do@@ammenuposition{#3}{\box\scratchbox}}%
+ \wd\scratchbox\makeupwidth % geen \ht=#2 setting (yet)
+ \hskip\dimexpr-\pagebackgroundhoffset+\menuparameter\c!leftoffset\relax
+ \box\scratchbox
\egroup
\else
#1\relax
@@ -945,28 +834,29 @@
\iflocationmenupermitted
\bgroup
\showcomposition
- \dimen0=\textheight
- \advance\dimen0 \pagebackgroundvoffset
- \advance\dimen0 \pagebackgroundvoffset
- \advance\dimen0 \pagebackgrounddepth
- \advance\dimen0 -\getvalue{\??am#3\c!topoffset}%
- \advance\dimen0 -\getvalue{\??am#3\c!bottomoffset}%
- \setbox0\vbox to \dimen0
- {\forgetall % Voor't geval de afstand
+ \scratchdimen\dimexpr
+ \textheight
+ +\pagebackgroundvoffset
+ +\pagebackgroundvoffset
+ +\pagebackgrounddepth
+ -\menuparameter\c!topoffset
+ -\menuparameter\c!bottomoffset
+ \relax
+ \setbox\scratchbox\vbox to \scratchdimen
+ {\forgetall % Voor't geval de afstand
%\setupblank[\v!standard]% % (tijdelijk) is aangepast.
\restorestandardblank
\hsize#2\relax
\executeamboxcommands{#3}{#4}\c!before\c!inbetween\c!after}%
- \setbox0\vbox{\hbox{\do@@ammenuposition{#3}{\box0}}}%
- \setbox0\vbox
- {\vskip-\pagebackgroundvoffset
- \vskip\getvalue{\??am#3\c!topoffset}%
- \ht0=\zeropoint
- \box0
+ \setbox\scratchbox\vbox{\hbox{\do@@ammenuposition{#3}{\box\scratchbox}}}%
+ \setbox\scratchbox\vbox
+ {\ht\scratchbox\zeropoint
+ \vskip\dimexpr-\pagebackgroundvoffset+\endcsname\c!topoffset\relax
+ \box\scratchbox
\vskip\pagebackgroundvoffset}% overbodig
- \ht0=\textheight
- \wd0=#2\relax
- \box0
+ \ht\scratchbox\textheight
+ \wd\scratchbox#2\relax
+ \box\scratchbox
\egroup
\else
#1\relax
@@ -989,47 +879,47 @@
\def\horizontalinteractionmenu#1#2#3#4%
{\ifdim#2>\zeropoint % new
- \dimen2\zeropoint
- \setbox0\hbox
+ \scratchdimen\zeropoint
+ \setbox\scratchbox\hbox
{\def\docommand##1%
{\doifnotvalue{\??am##1\c!state}\v!none
- {\hskip\dimen2
+ {\hskip\scratchdimen
\setbox2\hbox to #2
{\getvalue{\??am##1#3}\interactionmenu[##1]\getvalue{\??am##1#4}}%
\doifelsevalue{\??am##1\c!distance}\v!overlay
- {\dimen2\zeropoint
+ {\scratchdimen\zeropoint
\wd2\zeropoint}%
- {\dimen2=\getvalue{\??am##1\c!distance}}%
+ {\scratchdimen\getvalue{\??am##1\c!distance}}%
\box2}}%
\startinteraction
\processcommacommand[\getvalue{\??am#1}]\docommand
\stopinteraction}%
- \wd0=#2\relax
- \box0\relax
+ \wd\scratchbox#2\relax
+ \box\scratchbox
\fi}
\def\verticalinteractionmenu#1#2#3#4%
{\ifdim#2>\zeropoint % new
- \dimen2\zeropoint
- \setbox0\vbox
+ \scratchdimen\zeropoint
+ \setbox\scratchbox\vbox
{\def\docommand##1%
{\doifnotvalue{\??am##1\c!state}\v!none
- {\vskip\dimen2
+ {\vskip\scratchdimen
\setbox2\vbox to #2
{\getvalue{\??am##1#3}\interactionmenu[##1]\getvalue{\??am##1#4}}%
\doifelsevalue{\??am##1\c!distance}\v!overlay
- {\dimen2\zeropoint
+ {\scratchdimen\zeropoint
\offinterlineskip
\dp2\zeropoint
\ht2\zeropoint}%
- {\dimen2=\getvalue{\??am##1\c!distance}}%
+ {\scratchdimen\getvalue{\??am##1\c!distance}}%
\box2}}%
\startinteraction
\processcommacommand[\getvalue{\??am#1}]\docommand
\stopinteraction}%
- \ht0=#2\relax
- \dp0\zeropoint
- \box0\relax
+ \ht\scratchbox#2\relax
+ \dp\scratchbox\zeropoint
+ \box\scratchbox
\fi}
\letvalue{\??am\v!left }\empty
@@ -1046,14 +936,10 @@
\dodummypageskip{#1}%
\fi}
-\setvalue{\??am\??am\c!menu\v!left}%
- {\horizontalinteractionmenu\v!left\leftedgewidth\c!left\c!right}
-\setvalue{\??am\??am\c!menu\v!right}%
- {\horizontalinteractionmenu\v!right\rightedgewidth\c!left\c!right}
-\setvalue{\??am\??am\c!menu\v!top}%
- {\verticalinteractionmenu\v!top\topheight\c!before\c!after}
-\setvalue{\??am\??am\c!menu\v!bottom}%
- {\verticalinteractionmenu\v!bottom\bottomheight\c!before\c!after}
+\setvalue{\??am\??am\c!menu\v!left }{\horizontalinteractionmenu\v!left \leftedgewidth \c!left \c!right}
+\setvalue{\??am\??am\c!menu\v!right }{\horizontalinteractionmenu\v!right \rightedgewidth\c!left \c!right}
+\setvalue{\??am\??am\c!menu\v!top }{\verticalinteractionmenu \v!top \topheight \c!before\c!after}
+\setvalue{\??am\??am\c!menu\v!bottom}{\verticalinteractionmenu \v!bottom\bottomheight \c!before\c!after}
% this can be implemented with the following command (which
% is new, undocumented, experimental, untested, etc etc)
@@ -1063,12 +949,8 @@
\def\dodefineinteractionmenuclass[#1][#2]% tag hori|veri
{\doifelse{#2}\v!vertical
- {\setvalue{\??am\??am\c!menu#1}%
- {\verticalinteractionmenu
- {#1}{\getvalue{\??am#1\c!width}}\c!before\c!after}}
- {\setvalue{\??am\??am\c!menu#1}%
- {\horizontalinteractionmenu
- {#1}{\getvalue{\??am#1\c!height}}\c!left\c!right}}}
+ {\setvalue{\??am\??am\c!menu#1}{\verticalinteractionmenu {#1}{\getvalue{\??am#1\c!width }}\c!before\c!after}}
+ {\setvalue{\??am\??am\c!menu#1}{\horizontalinteractionmenu{#1}{\getvalue{\??am#1\c!height}}\c!left\c!right }}}
% \setupinteraction[menu=on,state=start]
%
@@ -1123,33 +1005,18 @@
%D We also need an explicit position control some day. I'll
%D do that when I need it. [The stacking order.]
-% for the moment we will support the old method
-%
-% \stelinteractionmenuin[right][{abc[xyz]},...]
-% \stelinteractionmenuin[right][key=val,...]
-
\newif\ifextendedmenu
-\def\defineinteractionmenu
- {\dotripleempty\dodefineinteractionmenu}
-
-\def\dodefineinteractionmenu[#1][#2]% compatibility hack
- {\convertargument#2\to\ascii % will disappear soon
- \doifinstringelse[\ascii
- \dodosetupinteractionlistmenux
- \dododefineinteractionmenu
- [#1][#2]}
-
% [name] [location]
% [name] [location] [pars]
-\def\dododefineinteractionmenu[#1][#2][#3]%
+\def\defineinteractionmenu
+ {\dotripleempty\dodefineinteractionmenu}
+
+\def\dodefineinteractionmenu[#1][#2][#3]%
{% main settings
\letvalue{\??am\c!menu#1}\empty
- % \setvalue{\??am\c!menu#1}%
- % {\extendedmenufalse\dointeractionmenu{#1}{}}%
- \setvalue{\@@dodolistelement#1}%
- {\def\dosomelistelement{\dodomenulistelement{#1}}}%
+ \setvalue{\@@dodolistelement#1}{\def\dosomelistelement{\dodomenulistelement{#1}}}%
\presetlocalframed[\??am#1]%
% register location
\expanded{\addtocommalist{#1}\@EA\noexpand\csname\??am#2\endcsname}%
@@ -1168,27 +1035,15 @@
\def\setupinteractionmenu
{\dodoubleargument\dosetupinteractionmenu}
-\def\dosetupinteractionmenu[#1][% compatibillity hack
- {\doifnextcharelse\bgroup % will disappear soon
- {\dodosetupinteractionlistmenuy[#1][}
- {\dodosetupinteractionmenu [#1][}}
-
-\def\dodosetupinteractionlistmenux[#1][#2][#3]% compatibillity hack
- {\setvalue{\??am\c!menu#1}{\extendedmenufalse\dointeractionmenu{#1}{#2}}}
-
-\def\dodosetupinteractionlistmenuy[#1][#2]% compatibillity hack
- {\setvalue{\??am\c!menu#1}%
- {\extendedmenufalse\dointeractionmenu{#1}{#2}}}
-
-\def\dodosetupinteractionmenu[#1][#2]%
+\def\dosetupinteractionmenu[#1][#2]%
{\def\docommand##1{\getparameters[\??am##1][#2]}%
\processcommalist[#1]\docommand}
-\setvalue{\??am\??am\v!yes }{0}
-\setvalue{\??am\??am\v!empty}{1}
-\setvalue{\??am\??am\v!no }{2}
-\setvalue{\??am\??am\v!none}{3}
-\setvalue{\??am\??am }{1} % default
+\expandafter\chardef\csname\??am\??am\v!yes \endcsname\zerocount
+\expandafter\chardef\csname\??am\??am\v!empty\endcsname\plusone
+\expandafter\chardef\csname\??am\??am\v!no \endcsname\plustwo
+\expandafter\chardef\csname\??am\??am\v!none \endcsname\plusthree
+\expandafter\chardef\csname\??am\??am \endcsname\plusone % default
\processbetween{\v!interactionmenu}\dostartinteractionmenu
@@ -1204,7 +1059,7 @@
\def\dodomenulistelement#1#2#3#4#5#6#7%
{\setbox0=\hbox
{\let\gotolocation\gobbleoneargument % hack to catch last []
-%\locationclickfalse % ipv ^
+ %\locationclickfalse % ipv ^
\docheckrealreferencepage{#7}%
\setlocationboxyes
{\??am#1}% % needed !
@@ -1262,13 +1117,6 @@
\setlocationbox{\??am#1}[]{#3}[#4]%
\egroup}
-\def\domenubox[#1][#2]#3%
- {\bgroup
- \def\setlocationbox##1[##2]##3[##4]%
- {\localframed[##1][##2]{\dolocationattributes{##1}\c!style\c!color{##3}}}%
- \domenubutton[#1][#2]#3[]%
- \egroup}
-
\def\menubox
{\dodoubleempty\domenubox}
@@ -1397,66 +1245,71 @@
\egroup
\fi\fi}
-% Dit is leuke toepassing van glue!
+% A nice application of glue. All this code will be rewritten and
+% generalized.
-\newbox\meterbox
+\newbox\interactionbarbox
\newif\ifbarsymbol
-\def\doganaareenpagina#1#2#3% nog checken !
+\def\dogotosomepage#1#2#3% nog checken !
{\checkreferences % nodig ??
- \iflocation
- \ifnum#3=\realpageno
- {#2}%
+ \hbox
+ {\iflocation
+ \ifnum#3=\realpageno
+ #2%
+ \else
+ \gotorealpage\empty\empty{#3}{\doifsomething{#1}{\dolocationattributes{#1}\c!style\c!color}{#2}}%
+ \fi
\else
- \doifelsenothing{#1}
- {\hbox{\gotorealpage{}{}{#3}
- {#2}}}
- {\hbox{\gotorealpage{}{}{#3}
- {\dolocationattributes{#1}\c!style\c!color{#2}}}}%
- \fi
- \else
- {#2}%
- \fi}
+ #2%
+ \fi}}
+
+\def\dogotosomecontrastpage#1#2#3% nog checken, may replace previous
+ {\checkreferences % nodig ??
+ \hbox
+ {\iflocation
+ \ifnum#3=\realpageno
+ \gotorealpage\empty\empty{#3}{\doifsomething{#1}{\dolocationattributes{#1}\c!style\c!contrastcolor}{#2}}%
+ \else
+ \gotorealpage\empty\empty{#3}{\doifsomething{#1}{\dolocationattributes{#1}\c!style\c!color}{#2}}%
+ \fi
+ \else
+ #2%
+ \fi}}
\presetlocalframed[\??ib]
-\def\interactionbara
- {\iflocation
+\def\interactionbara % we need better control over contrastcolor
+ {\iflocation % maybe just use gotopage and set colors
\bgroup
- %\setupinteraction[\c!width=\!!zeropoint]%
- \setinteractionparameter\c!width\!!zeropoint
- \setupblackrules[\c!height=\v!max,\c!depth=\v!max]% maten ??
- \!!widthb\@@ibwidth
- \advance\!!widthb -2.75em\relax
- \!!widtha\!!widthb
- \divide\!!widtha \lastpage\relax
+ \setinteractionparameter\c!width\zeropoint
+ \setupblackrules[\c!height=\v!max,\c!depth=\v!max]%
+ \!!widthb\dimexpr\@@ibwidth-2.75\emwidth\relax
+ \!!widtha\dimexpr\!!widthb/\lastpage\relax
\bgroup
- \advance\realpageno \minusone
- \ifvoid\meterbox
+ \advance\realpageno\minusone
+ \ifvoid\interactionbarbox
\bgroup
\processaction
[\@@ibstep]
- [ \v!small=>\dimen0=.25em\relax,
- \v!medium=>\dimen0=.5em\relax,
- \v!big=>\dimen0=1em\relax,
- \s!unknown=>\dimen0=\!!widtha]%
- \ifdim\!!widtha<\dimen0\relax
- \!!counta\dimen0\relax
- \!!countb\!!widtha
- \divide\!!counta \!!countb
+ [ \v!small=>\scratchdimen.25\emwidth,
+ \v!medium=>\scratchdimen.5\emwidth,
+ \v!big=>\scratchdimen\emwidth,
+ \s!unknown=>\scratchdimen\!!widtha]%
+ \ifdim\!!widtha<\scratchdimen\relax
+ \!!counta\numexpr\scratchdimen/\!!widtha\relax
\else
\!!counta\@@ibstep\relax
\fi
- \!!widtha=\!!counta\!!widtha
- \setbox0\hbox{\blackrule[\c!width=\!!widtha]}%
- \global\setbox\meterbox\hbox to \!!widthb
+ \!!widtha\!!counta\!!widtha
+ \setbox\scratchbox\hbox{\blackrule[\c!width=\!!widtha,\c!color=middlegray]}% color here, else no mkiv
+ \global\setbox\interactionbarbox\hbox to \!!widthb
{\hss
- % brrr
- \for \teller=1 \to \lastpage \step \!!counta \do
- {\gotorealpage{}{}{\teller}{\copy0}}%
+ \dostepwiserecurse\plusone\lastpage\!!counta
+ {\gotorealpage\empty\empty\recurselevel{\copy\scratchbox}}%
\hss}%
- \global\wd\meterbox\zeropoint
+ \global\wd\interactionbarbox\zeropoint
\egroup
\fi
\egroup
@@ -1464,40 +1317,34 @@
\strut
\hbox to \@@ibwidth
{\dontcomplain
- \setupblackrules[\c!width=1em]%
- \doganaareenpagina\??ib\blackrule\firstpage
+ \setupblackrules[\c!width=\emwidth]%
+ \dogotosomecontrastpage\??ib\blackrule\firstpage
\hss
- \color[middlegray]{\copy\meterbox}%
+ \copy\interactionbarbox
\hbox to \!!widthb
- {\ifdim\!!widtha<1em\relax
- \!!widtha=1em\relax
+ {\ifdim\!!widtha<\emwidth
+ \!!widtha\emwidth
\fi
\setupblackrules[\c!width=\!!widtha]%
\ifnum\realpageno>\plusone
- \!!counta\realpageno
- \advance\!!counta -2\relax
+ \!!counta\numexpr\realpageno-\plustwo\relax
\hskip\zeropoint\!!plus\!!counta \s!sp\relax % cm gives overflow
- % or just: \hskip\zeropoint\!!plus\!!counta \relax % cm gives overflow
- \doganaareenpagina\??ib\blackrule\prevpage
+ \dogotosomepage\??ib\blackrule\prevpage
\fi
- \color[\@@ibcontrastcolor]{\blackrule[\c!width=.5em]}%
+ \dogotosomecontrastpage\??ib{\blackrule[\c!width=.5em]}\realpageno
\ifnum\realpageno<\lastpage\relax
- \doganaareenpagina\??ib\blackrule\nextpage
- \!!counta\lastpage
- \advance\!!counta -\realpageno
- \advance\!!counta \minusone
+ \dogotosomepage\??ib\blackrule\nextpage
+ \!!counta\numexpr\lastpage-\realpageno-\plusone\relax
\hskip\zeropoint\!!plus\!!counta \s!sp\relax % cm gives overflow
- % or just \hskip\zeropoint\!!plus\!!counta\relax % cm gives overflow
\fi}%
\hss
- \doganaareenpagina\??ib\blackrule\lastpage}%
+ \dogotosomecontrastpage\??ib\blackrule\lastpage}%
\egroup
\fi}
\def\interactionbarb
{\ifnum\lastpage>\firstpage\relax
- \interactionbuttons
- [\v!firstpage,\v!previouspage,\v!nextpage,\v!lastpage]%
+ \interactionbuttons[\v!firstpage,\v!previouspage,\v!nextpage,\v!lastpage]%
\fi}
\def\interactionbarc
@@ -1505,27 +1352,17 @@
\ifnum\lastpage>\plusone
\hbox to \@@ibwidth
{\setupblackrules[\c!height=\@@ibheight,\c!depth=\@@ibdepth]%
- \def\gotox##1%
- {\doganaareenpagina{}{\blackrule[\c!width=##1]}}%
- \dimen0=\@@ibwidth\relax
- \advance\dimen0 -4em
- \!!counta\lastpage
- \advance\!!counta \minusone
- \divide\dimen0 \!!counta
- \!!counta\realpageno
- \advance\!!counta \minusone
- \!!widtha\!!counta\dimen0
- \!!countb\lastpage
- \advance\!!countb -\realpageno
- \!!widthb\!!countb\dimen0
+ \scratchdimen\dimexpr(\@@ibwidth-4\emwidth)/\numexpr\lastpage+\minusone\relax\relax
+ \!!widtha\numexpr\realpageno+\minusone\relax\scratchdimen
+ \!!widthb\numexpr\lastpage-\realpageno\relax\scratchdimen
\startcolor[\locationcolor\@@ibcolor]%
- \gotox{1em}\firstpage
+ \dogotosomepage\empty{\blackrule[\c!width=\emwidth]}\firstpage
\hss
- \gotox\!!widtha\prevpage
- \color[\@@ibcontrastcolor]{\blackrule[\c!width=1em]}%
- \gotox\!!widthb\nextpage
+ \dogotosomepage\empty{\blackrule[\c!width=\!!widtha]}\prevpage
+ \color[\@@ibcontrastcolor]{\blackrule[\c!width=\emwidth]}%
+ \dogotosomepage\empty{\blackrule[\c!width=\!!widthb]}\nextpage
\hss
- \gotox{1em}\lastpage
+ \dogotosomepage\empty{\blackrule[\c!width=\emwidth]}\lastpage
\stopcolor}%
\fi
\fi}
@@ -1533,42 +1370,29 @@
\def\interactionbard
{\iflocation\ifshowingsubpage
\ifnum\nofsubpages>\plusone
- \hbox
- \bgroup
- %\setupinteraction[\c!width=\!!zeropoint]%
- \setinteractionparameter\c!width\!!zeropoint
- \ifbarsymbol % beter: 3 chars assign en 3*box
- \setupsymbolset[\@@iasymbolset]%
- \setbox0\hbox{\symbol[\v!previous]}%
- \setbox2\hbox{\symbol[\v!somewhere]}%
- \setbox4\hbox{\symbol[\v!next]}%
- \else
- \setbox0\hbox
- {\vrule
- \!!height\@@ibheight
- \!!depth\@@ibdepth
- \!!width\@@ibwidth}%
- \setbox2\copy0
- \setbox4\copy0
- \fi
- \startcolor[\locationcolor\@@ibcolor]%
- \for\teller=1\to\nofsubpages\step1\do % brr, \dostepwiserecurse
- {\bgroup
- \increment(\teller,\firstsubpage)\relax
- \decrement\teller\relax
- \ifnum\teller<\realpageno\relax
- \gotorealpage{}{}{\teller}{\copy0}\relax
- \else\ifnum\teller=\realpageno\relax
- \color
- [\@@ibcontrastcolor]
- {\gotorealpage{}{}{\teller}{\copy2}}%
- \else
- \gotorealpage{}{}{\teller}{\copy4}\relax
- \fi\fi
- \egroup
- \hskip\@@ibdistance}%
- \unskip
- \stopcolor
+ \hbox \bgroup
+ \setinteractionparameter\c!width\!!zeropoint
+ \ifbarsymbol
+ \setupsymbolset[\@@iasymbolset]%
+ \def\dogotox##1%
+ {\hbox{\symbol[\ifcase##1 \v!previous\or\v!somewhere\or\v!next\fi]}}%
+ \else
+ \def\dogotox##1%
+ {\hbox{\vrule\!!height\@@ibheight\!!depth \@@ibdepth\!!width \@@ibwidth}}%
+ \fi
+ \dostepwiserecurse\plusone\nofsubpages\plusone
+ {\bgroup
+ \scratchcounter\numexpr\recurselevel+\firstsubpage+\minusone\relax
+ \ifnum\scratchcounter<\realpageno\relax
+ \dogotosomecontrastpage\??ib{\dogotox0}\scratchcounter
+ \else\ifnum\scratchcounter=\realpageno\relax
+ \dogotosomecontrastpage\??ib{\dogotox1}\scratchcounter
+ \else
+ \dogotosomecontrastpage\??ib{\dogotox2}\scratchcounter
+ \fi\fi
+ \egroup
+ \hskip\@@ibdistance}%
+ \unskip % not needed
\egroup
\fi
\fi\fi}
@@ -1577,72 +1401,54 @@
{\iflocation\ifshowingsubpage
\ifnum\nofsubpages>\plusone
\bgroup
- \!!widthb\@@ibdistance
- \multiply\!!widthb \nofsubpages
- \advance\!!widthb -\@@ibdistance % (n-1)
- \!!widtha\@@ibwidth
- \advance\!!widtha -\!!widthb
- \divide\!!widtha \nofsubpages\relax
+ \!!widthb\dimexpr\nofsubpages\dimexpr\@@ibdistance\relax-\@@ibdistance\relax % (n-1)
+ \!!widtha\dimexpr(\@@ibwidth-\!!widthb)/\nofsubpages\relax
\ifdim\!!widtha<\@@ibdistance\relax
\interactionbarf
\else
- %\setupinteraction[\c!width=\!!zeropoint]%
\setinteractionparameter\c!width\!!zeropoint
\noindent
\hbox to \@@ibwidth
\bgroup
\ifbarsymbol
\setupsymbolset[\@@iasymbolset]%
- \setbox0\hbox{\symbol[\v!previous]}%
- \setbox2\hbox{\symbol[\v!somewhere]}%
- \setbox4\hbox{\symbol[\v!next]}%
+ \def\dogotox##1%
+ {\hbox{\symbol[\ifcase##1 \v!previous\or\v!somewhere\or\v!next\fi}}%
\else
- \setbox0\hbox
- {\vrule
- \!!height\@@ibheight
- \!!depth\@@ibdepth
- \!!width\!!widtha}%
- \setbox2\copy0
- \setbox4\copy0
+ \def\dogotox##1%
+ {\hbox{\vrule\!!height\@@ibheight\!!depth\@@ibdepth\!!width\!!widtha}}%
\fi
- \startcolor[\locationcolor\@@ibcolor]%
- \for\teller=1\to\nofsubpages\step1\do
+ \dostepwiserecurse\plusone\nofsubpages\plusone
{\bgroup
- \increment(\teller,\firstsubpage)\relax
- \decrement\teller\relax
- \ifnum\teller<\realpageno\relax
- \gotorealpage{}{}{\teller}{\copy0}\relax
- \else\ifnum\teller=\realpageno\relax
- \color
- [\@@ibcontrastcolor]
- {\gotorealpage{}{}{\teller}{\copy2}}%
+ \scratchcounter\numexpr\recurselevel+\firstsubpage+\minusone\relax
+ \ifnum\scratchcounter<\realpageno\relax
+ \dogotosomecontrastpage\??ib{\dogotox0}\scratchcounter
+ \else\ifnum\scratchcounter=\realpageno\relax
+ \dogotosomecontrastpage\??ib{\dogotox1}\scratchcounter
\else
- \gotorealpage{}{}{\teller}{\copy4}\relax
+ \dogotosomecontrastpage\??ib{\dogotox2}\scratchcounter
\fi\fi
\egroup
\hss}%
\unskip
- \stopcolor
\egroup
\fi
\egroup
\fi
\fi\fi}
-\def\interactionbarf% !! KAN WORDEN GECOMBINEERD MET D !!
+\def\interactionbarf % !! KAN WORDEN GECOMBINEERD MET D !!
{\iflocation\ifshowingsubpage
\ifnum\nofsubpages>\plusone
- %\setupinteraction[\c!width=\!!zeropoint]%
\setinteractionparameter\c!width\!!zeropoint
\noindent
\hbox to \@@ibwidth
\bgroup
\!!countb\zerocount
- \loop
+ \loop % todo: \doloop
\advance\!!countb \plusone
- \!!countc\nofsubpages
- \divide\!!countc \!!countb
- \advance\!!countc \plusone
+ %\!!countc\nofsubpages \divide\!!countc \!!countb \advance\!!countc \plusone
+ \!!countc\numexpr(\nofsubpages/\!!countb)+\plusone\relax % rounding
\!!widthb\@@ibdistance
\multiply\!!widthb \!!countc
\advance\!!widthb -\@@ibdistance
@@ -1651,83 +1457,74 @@
\divide\!!widtha \!!countc
\ifdim\!!widtha<\@@ibdistance\relax
\repeat
-\advance\!!countc -2
-\!!widtha-\@@ibdistance
-\!!widtha=\!!countc\!!widtha
-\advance\!!widtha \@@ibwidth
-\advance\!!countc \plusone
-\divide\!!widtha \!!countc
+ \ifnum\!!countc>\plusone
+ % this is not that well tested
+ \advance\!!countc \minustwo
+ \!!widtha-\@@ibdistance
+ \!!widtha\!!countc\!!widtha
+ \advance\!!widtha \@@ibwidth
+ \advance\!!countc \plusone
+ \divide\!!widtha \!!countc
+ \fi
\ifbarsymbol
\setupsymbolset[\@@iasymbolset]%
- \setbox0\hbox{\symbol[\v!previous]}%
- \setbox4\hbox{\symbol[\v!somewhere]}%
- \setbox8\hbox{\symbol[\v!next]}%
- \setbox2\copy4
- \setbox6\copy4
+ \def\dogotox##1%
+ {\hbox{\symbol[\ifcase##1 \v!previous\or\v!somewhere\or\v!somewhere\or\v!somewhere\or\v!next\fi}}%
\else
- \setbox0\hbox
- {\vrule
- \!!height\@@ibheight
- \!!depth\@@ibdepth
- \!!width\!!widtha}%
- \setbox4\copy0
- \setbox8\copy0
- \setbox2\hbox
- {\vrule
- \!!height.5\ht0
- \!!depth.5\dp0
- \!!width\!!widtha}%
- \ht2\ht0
- \dp2\dp0
- \setbox6\copy2
+ \def\dogotox##1%
+ {\hbox
+ {\!!heighta\@@ibheight
+ \!!deptha\@@ibdepth
+ \ifcase##1\relax
+ \vrule\!!height \!!heighta\!!depth \!!deptha\!!width\!!widtha
+ \or
+ \vrule\!!height.5\!!heighta\!!depth.5\!!deptha\!!width\!!widtha
+ \or
+ \vrule\!!height \!!heighta\!!depth \!!deptha\!!width\!!widtha
+ \or
+ \vrule\!!height.5\!!heighta\!!depth.5\!!deptha\!!width\!!widtha
+ \or
+ \vrule\!!height \!!heighta\!!depth \!!deptha\!!width\!!widtha
+ \fi}}%
\fi
- \def\gotox##1%
- {\ifnum\teller=\realpageno
- \color
- [\@@ibcontrastcolor]
- {\gotorealpage{}{}{\teller}{\copy##1}}%
- \else
- \gotorealpage{}{}{\teller}{\copy##1}%
- \fi
- \!!countf\zerocount
- \hss}%
- \startcolor[\locationcolor\@@ibcolor]%
- \!!countc\realpageno \advance\!!countc -2
- \!!countd\realpageno \advance\!!countd 2
+ \!!countc\numexpr\realpageno-\plustwo\relax
+ \!!countd\numexpr\realpageno+\plustwo\relax
+ \ifnum\!!countc<\plusone \!!countc\plusone \fi
\!!countf\zerocount
- \for\teller=\firstsubpage\to\lastsubpage\step1\do
+ \dostepwiserecurse\firstsubpage\lastsubpage\plusone
{\!!doneafalse
\advance\!!countf \plusone
- \ifnum\teller=\firstsubpage\relax \!!doneatrue \fi
- \ifnum\teller=\lastsubpage\relax \!!doneatrue \fi
- \ifnum\teller>\!!countc \ifnum\teller<\!!countd \!!doneatrue \fi\fi
+ \ifnum\recurselevel=\firstsubpage\relax \!!doneatrue \fi
+ \ifnum\recurselevel=\lastsubpage\relax \!!doneatrue \fi
\if!!donea
- \ifnum\teller<\realpageno
- \gotox0%
- \else\ifnum\teller>\realpageno
- \gotox4%
+ \ifnum\recurselevel<\realpageno
+ \dogotosomecontrastpage\??ib{\dogotox0}\recurselevel
+ \else\ifnum\recurselevel>\realpageno
+ \dogotosomecontrastpage\??ib{\dogotox2}\recurselevel
\else
- \gotox8%
+ \dogotosomecontrastpage\??ib{\dogotox4}\recurselevel
\fi\fi
+ \hss
+ \!!countf\zerocount
\else\ifnum\!!countf=\!!countb
- \ifnum\teller<\realpageno
- \gotox2%
- \else\ifnum\teller>\realpageno
- \gotox6%
+ \ifnum\recurselevel<\realpageno
+ \dogotosomecontrastpage\??ib{\dogotox1}\recurselevel
+ \else\ifnum\recurselevel>\realpageno
+ \dogotosomecontrastpage\??ib{\dogotox3}\recurselevel
\else
- \gotox4%
+ \dogotosomecontrastpage\??ib{\dogotox2}\recurselevel
\fi\fi
+ \hss
+ \!!countf\zerocount
\fi\fi}%
\unskip
- \stopcolor
\egroup
\fi
\fi\fi}
\def\interactionbarg
{\ifnum\lastsubpage>\firstsubpage\relax
- \interactionbuttons
- [\v!firstsubpage,\v!previoussubpage,\v!nextsubpage,\v!lastsubpage]%
+ \interactionbuttons[\v!firstsubpage,\v!previoussubpage,\v!nextsubpage,\v!lastsubpage]%
\fi}
\def\checkinteractionbar#1#2#3%
@@ -1737,7 +1534,7 @@
\def\complexinteractionbar[#1]%
{\doifelse{#1}\v!reset
- {\global\setbox\meterbox\box\voidb@x}%
+ {\global\setbox\interactionbarbox\box\voidb@x}%
{\bgroup
\iflocation
\checksubpages % goes wrong / loads \numberofpages too
@@ -1746,10 +1543,10 @@
{\startinteraction
\processaction % breedte defaults !
[\@@ibalternative]
- [ c=>\checkinteractionbar{.5em}\v!max \v!max,
+ [ c=>\checkinteractionbar{10em}\v!max \v!max,
d=>\checkinteractionbar{.5em}{.5em} \!!zeropoint,
- e=>\checkinteractionbar{.5em}{.5em} \!!zeropoint,
- f=>\checkinteractionbar{.5em}{.5em} \!!zeropoint,
+ e=>\checkinteractionbar{10em}{.5em} \!!zeropoint,
+ f=>\checkinteractionbar{10em}{.5em} \!!zeropoint,
\s!default=>\checkinteractionbar{10em}\v!broad\!!zeropoint,
\s!unknown=>\checkinteractionbar{10em}\v!broad\!!zeropoint]%
\doifelse\@@ibsymbol\v!yes
@@ -2443,35 +2240,27 @@
\c!rightoffset=\!!zeropoint]
\def\placeleftedgetextblock % Is \hss/\hsize really needed here?
- {\hbox to \leftedgewidth % (check outer level and settings)
- {\hsize\leftedgewidth
- \hss
- \interactionmenus[\v!left]}}
+ {\hbox to \leftedgewidth % (check outer level and settings)
+ {\hsize\leftedgewidth\hss\interactionmenus[\v!left]}}
\def\placerightedgetextblock % Is \hss/\hsize really needed here?
- {\hbox to \rightedgewidth % (check outer level and settings)
- {\hsize\rightedgewidth
- \interactionmenus[\v!right]%
- \hss}}
+ {\hbox to \rightedgewidth % (check outer level and settings)
+ {\hsize\rightedgewidth\interactionmenus[\v!right]\hss}}
\def\placetoptextblock
{\vbox to \topheight
{\vsize\topheight
-% \getvalue{\??tk\v!boven\v!tekst\c!voor}
- \getvalue{\??tk\v!top\c!before}
- \interactionmenus[\v!top]
-% \getvalue{\??tk\v!boven\v!tekst\c!na}
- \getvalue{\??tk\v!top\c!after}
+ \csname\??tk\v!top\c!before\endcsname
+ \interactionmenus[\v!top]%
+ \csname\??tk\v!top\c!after\endcsname
\kern\zeropoint}}
\def\placebottomtextblock
{\vbox to \bottomheight
{\vsize\bottomheight
-% \getvalue{\??tk\v!onder\v!tekst\c!voor}
- \getvalue{\??tk\v!bottom\c!before}
- \interactionmenus[\v!bottom]
-% \getvalue{\??tk\v!onder\v!tekst\c!na}
- \getvalue{\??tk\v!bottom\c!after}
+ \csname\??tk\v!bottom\c!before\endcsname
+ \interactionmenus[\v!bottom]%
+ \csname\??tk\v!bottom\c!after\endcsname
\kern\zeropoint}}
\ifx\leftedgetextcontent\undefined \else
diff --git a/Master/texmf-dist/tex/context/base/core-itm.tex b/Master/texmf-dist/tex/context/base/core-itm.tex
index 9642b0f945d..605e3ef1d49 100644
--- a/Master/texmf-dist/tex/context/base/core-itm.tex
+++ b/Master/texmf-dist/tex/context/base/core-itm.tex
@@ -25,7 +25,7 @@
\stopmessages
\startmessages german library: layouts
- 9: z.Z. nicht mehr als -- Niveaus in Posten
+ 9: z.Z. nicht mehr als -- Ebenen in Aufzaehlungen
\stopmessages
\startmessages czech library: layouts
@@ -69,15 +69,107 @@
\newconditional\afterlistitem \setfalse\afterlistitem
\newconditional\nowhitelistitem \setfalse\nowhitelistitem
\newconditional\joinedlistitem \setfalse\joinedwhitelistitem
+\newconditional\reverselistitem \setfalse\reverselistitem
+\newconditional\continuelistitems \setfalse\continuelistitems
+\newconditional\fittinglistitems \setfalse\fittinglistitems
-\newcounter\noflists
-\newcounter\itemlevel
-\newcounter\itemcolumndepth
-\newcounter\maxitemlevel
+\newcount\noflists
+\newcount\currentnoflists
+\newcount\itemcolumndepth
+\newcount\itemdepth
+\newcount\maxitemdepth
\definetwopasslist\s!list
-\let\currentitemgroup\empty
+\let\currentitemlevel \!!zerocount
+\let\currentitemgroup \empty
+\let\currentnofitems \!!zerocount
+\let\currentmaxnofitems\!!zerocount
+\let\currentminnofitems\!!zerocount
+\let\currentitemoffset \!!zerocount
+\def\currentitemnumber{\countervalue{\@@itemcounter\currentitemlevel}}
+
+% tricky ... we cannot use trialtypesetting here because there can be
+% multiple itemizes in e.g. a table, so we need something more advanced
+% where counters etc are reset to pre-outertrial values
+
+\def\dolistreference
+ {\ifconditional\continuelistitems
+ \savetaggedtwopassdata\s!list{\number\currentnoflists}{\number\currentnoflists}%
+ {\currentitemlevel:\noflistelements:c:\getitemparameter\currentitemlevel\c!maxwidth}%
+ \else
+ \savetaggedtwopassdata\s!list{\number\currentnoflists}{\number\currentnoflists}%
+ {\currentitemlevel:\noflistelements:n:\getitemparameter\currentitemlevel\c!maxwidth}%
+ \fi}
+
+\def\splititemtwopassdata#1%
+ {\expanded{\findtwopassdata{\s!list}{\number#1}}%
+ \expandafter\dosplititemtwopassdata\twopassdata:0:0:0:0:0\relax}
+
+\def\dosplititemtwopassdata#1:#2:#3:#4:#5\relax
+ {\edef\itemdatal{#1}\edef\itemdatan{#2}\edef\itemdatat{#3}\edef\itemdataw{#4}}
+
+\def\checkcurrentnofitems
+ {\splititemtwopassdata\currentnoflists
+ \iftwopassdatafound
+ \ifcase\itemdatan\relax % \scratchcounter
+ \let\currentnofitems \!!zerocount
+ \let\currentminnofitems\!!plusone
+ \let\currentmaxnofitems\!!zerocount
+ \else
+ \scratchcounter\itemdatan\relax
+ \edef\currentnofitems{\the\scratchcounter}%
+ \let\currentitemtag\itemdatat
+ \doloop
+ {\splititemtwopassdata{\numexpr\currentnoflists+\recurselevel\relax}%
+ \iftwopassdatafound
+ \ifnum\itemdatal=\currentitemlevel\relax
+ \doifelse{c}\itemdatat
+ {\advance\scratchcounter\itemdatan\relax}
+ {\exitloop}%
+ \fi
+ \else
+ \exitloop
+ \fi}%
+ \edef\currentmaxnofitems{\the\scratchcounter}%
+ \scratchcounter\zerocount
+ \doif{c}\currentitemtag
+ {\doloop
+ {\splititemtwopassdata{\numexpr\currentnoflists-\recurselevel\relax}%
+ \iftwopassdatafound
+ \ifnum\itemdatal=\currentitemlevel\relax
+ \doifelse{c}\itemdatat
+ {\advance\scratchcounter\itemdatan\relax}
+ {\advance\scratchcounter\itemdatan\exitloop}%
+ \fi
+ \else
+ \exitloop
+ \fi}}%
+ \advance\scratchcounter\plusone
+ \edef\currentminnofitems{\the\scratchcounter}%
+ % [[\currentnofitems,\currentminnofitems,\currentmaxnofitems]]
+ \fi
+ \fi}
+
+% \startitemize[n,packed]
+% \item test \item test \item test
+% \stopitemize
+%
+% \startitemize[n,packed,reverse]
+% \item test \item test \item test
+% \stopitemize
+%
+% \startitemize[n,packed,reverse] \item test \item test \stopitemize
+% \startitemize[continue]
+% \item test \startitemize[n,packed] \item test \item test \stopitemize
+% \item test
+% \item test
+% \stopitemize
+% \startitemize[continue] \item test \stopitemize
+%
+% \startitemize[n,packed] \item test \item test \stopitemize
+% \startitemize[continue] \item test \stopitemize
+% \startitemize[continue] \item test \stopitemize
\def\unknownitemreference{0} \let\itemreferences\unknownitemreference
@@ -111,9 +203,6 @@
\def\doitembreak#1{\ifconditional\optimizelistitem\ifconditional\textlistitem\else\dosomebreak#1\fi\fi}
-\def\dolistreference
- {\savetaggedtwopassdata{\s!list}{\currentlist}{\currentlist}{\noflistelements}}
-
\def\initializeitemgroupslevel#1%
{\ifundefined{\@@globalitemsymbol{#1}}%
\edef\itemreferences{\itemreferences,#1}%
@@ -129,7 +218,7 @@
\def\doinitializeitemgrouplevel#1%
{\copyparameters
[\??op\currentitemgroup#1][\??oo]
- [\c!width,\c!factor,\c!distance,\c!align,\c!option,
+ [\c!width,\c!factor,\c!distance,\c!align,\c!symalign,\c!option,
\c!style,\c!marstyle,\c!symstyle,\c!headstyle,
\c!color,\c!marcolor,\c!symcolor,\c!headcolor,
\c!beforehead,\c!afterhead,\c!before,\c!inbetween,\c!after,
@@ -145,13 +234,13 @@
\def\dosetupitemgroups[#1]% still undocumented
{\getparameters[\??oo][\c!levels=4,#1]%
% will change (remove)
- \ifnum\@@oolevels>\maxitemlevel
- \edef\maxitemlevel{\@@oolevels}%
- \dorecurse\maxitemlevel{\initializeitemgroupslevel\recurselevel}%
+ \ifnum\@@oolevels>\maxitemdepth
+ \maxitemdepth\@@oolevels\relax
+ \dorecurse\maxitemdepth{\initializeitemgroupslevel\recurselevel}%
\fi}
\def\doitemreference#1,#2,#3\\%
- {\ifnum\itemlevel>#1\relax
+ {\ifnum\currentitemlevel>#1\relax
\ifnum#1>\zerocount \tempsymbol \fi
\getvalue{\@@currentitemsymbol{#2}}%
\doitemreference#2,#3\\%
@@ -161,17 +250,18 @@
{\expandafter\doitemreference\itemreferences,,\\}
\def\packitems
- {\ifcase\itemlevel \else \settrue\packlistitem \fi}
+ {\ifcase\currentitemlevel \else \settrue\packlistitem \fi}
\def\dosetupitemgroupvariable[#1]% [#2]% niveau instellingen
{\doifelsenothing{#1}
- {\getparameters[\??op\currentitemgroup\itemlevel]}% [#2]}%
+ {\getparameters[\??op\currentitemgroup\currentitemlevel]}% [#2]}%
{\getparameters[\??op\currentitemgroup#1]}}% [#2]}}
\newconditional\inlinelistitem \setfalse\inlinelistitem
\def\dododosetupitemgroupconstant[#1][#2#3#4]% * permits [2]
- {\processaction
+ {\global\setitemparameter\currentitemlevel\c!maxwidth{0}%
+ \processaction
[#2#3#4]
[ \v!packed*=>\packitems,
\v!intro*=>\settrue\introlistitem, % here? not set to false
@@ -193,6 +283,8 @@
\v!atmargin*=>\doifnot{#1}{1}{\setitemparameter{#1}\c!width{0em}}, % signal
\v!intext*=>\settrue\inlinelistitem, % new
\v!loose*=>\setfalse\optimizelistitem,
+ \v!fit*=>\settrue\fittinglistitems,
+ \v!nofit*=>\setfalse\fittinglistitems,
\v!paragraph*=>\settrue\paragraphlistitem
\packitems,
\v!joinedup*=>\settrue\joinedlistitem % \dosetuppackeditemgroup{#1}%
@@ -203,6 +295,7 @@
\v!stopper*=>\setitemparameter{#1}\c!placestopper{\v!yes}, % keep {}
\v!unpacked*=>\setfalse\packlistitem,
\v!repeat*=>\settrue\repeatlistitem, % new
+ \v!reverse*=>\settrue\reverselistitem,
\v!standard*=>\dosetupstandarditemgroup{#1}]}
\def\dosetupstandarditemgroup#1%
@@ -231,27 +324,27 @@
\def\itembeforecommand
{\ifconditional\nowhitelistitem
\ifconditional\beforelistitem
- \ifcase\itemlevel\or\getitemparameter\itemlevel\c!before\fi
+ \ifcase\currentitemlevel\or\getitemparameter\currentitemlevel\c!before\fi
\else
\nowhitespace
\fi
\else\ifconditional\joinedlistitem
% \empty
\else
- \getitemparameter\itemlevel\c!before
+ \getitemparameter\currentitemlevel\c!before
\fi\fi}
\def\itemaftercommand
{\ifconditional\nowhitelistitem
\ifconditional\afterlistitem
- \ifcase\itemlevel\or\getitemparameter\itemlevel\c!after\fi
+ \ifcase\currentitemlevel\or\getitemparameter\currentitemlevel\c!after\fi
\else
\nowhitespace
\fi
\else\ifconditional\joinedlistitem
% \empty
\else
- \getitemparameter\itemlevel\c!after
+ \getitemparameter\currentitemlevel\c!after
\fi\fi}
\def\iteminbetweencommand
@@ -260,7 +353,7 @@
\else\ifconditional\joinedlistitem
% \empty
\else
- \getitemparameter\itemlevel\c!inbetween
+ \getitemparameter\currentitemlevel\c!inbetween
\fi\fi}
\def\itembeforeheadcommand
@@ -269,7 +362,7 @@
\else\ifconditional\joinedlistitem
% \empty
\else
- \getitemparameter\itemlevel\c!beforehead
+ \getitemparameter\currentitemlevel\c!beforehead
\fi\fi}
\def\itemafterheadcommand
@@ -278,7 +371,7 @@
\else\ifconditional\joinedlistitem
% \empty
\else
- \getitemparameter\itemlevel\c!afterhead
+ \getitemparameter\currentitemlevel\c!afterhead
\fi\fi}
% \def\dosetuppackeditemgroup#1%
@@ -301,18 +394,18 @@
\def\dodododosetupitemgroup[#1][#2]%
{\ConvertToConstant\doifnot{#2}{}
{\doifelse{#1}\v!each
- {\dorecurse\maxitemlevel{\ExpandFirstAfter\dododododosetupitemgroup[\recurselevel][#2]}}
+ {\dorecurse\maxitemdepth{\ExpandFirstAfter\dododododosetupitemgroup[\recurselevel][#2]}}
{\ExpandFirstAfter\dododododosetupitemgroup[#1][#2]}}}
\def\dododosetupitemgroup[#1][#2]%
{\ConvertToConstant\doifelse{#2}{}
- {\ifcase\itemlevel\relax
+ {\ifcase\currentitemlevel\relax
\dodododosetupitemgroup[\v!each][#1]%
\else
- \dodododosetupitemgroup[\itemlevel][#1]%
+ \dodododosetupitemgroup[\currentitemlevel][#1]%
\fi}
{\doifelsenothing{#1}
- {\dodododosetupitemgroup[\itemlevel][#2]}
+ {\dodododosetupitemgroup[\currentitemlevel][#2]}
{\dodododosetupitemgroup[#1][#2]}}}
\def\dodosetupitemgroup[#1][#2][#3][#4]%
@@ -332,25 +425,35 @@
\def\doadvanceitem
{\ifconditional\sublistitem\else\ifconditional\symbollistitem\else
- \pluscounter{\@@itemcounter\itemlevel}%
+ \pluscounter{\@@itemcounter\currentitemlevel}%
\fi\fi}
\def\setitemlevel#1%
- {\ifnum\itemlevel>\zerocount
+ {\ifnum\currentitemlevel>\zerocount
\settrue\firstlistitem
- \doifnotinset\v!continue{#1}
- {\doifinset{0}{#1}{\setitemparameter\itemlevel\c!start{0}}%
- \doifsomething{\getitemparameter\itemlevel\c!start}
- {\setcounter{\@@itemcounter\itemlevel}{\getitemparameter\itemlevel\c!start}%
- \minuscounter{\@@itemcounter\itemlevel}%
- \letitemparameter\itemlevel\c!start\empty}}%
+ %
+ \expanded{\setitemparameter{\currentitemlevel}{\c!start}{1}}%
+ \doifinset{0}{#1}{\setitemparameter\currentitemlevel\c!start{0}}%
+ \setcounter{\@@itemcounter\currentitemlevel}{0}%
+ \doifelsenothing{\getitemparameter\currentitemlevel\c!start}
+ {\def\currentitemoffset{1}}
+ {\def\currentitemoffset{\getitemparameter\currentitemlevel\c!start}%
+ \letitemparameter\currentitemlevel\c!start\empty}%
+ %
\def\tempnumber
- {\countervalue{\@@itemcounter\itemlevel}}%
- \doifelse{\getitemparameter\itemlevel\c!placestopper}\v!yes
- {\def\tempsymbol{\getitemparameter\itemlevel\c!stopper}}
+ {\countervalue{\@@itemcounter\currentitemlevel}}%
+ \doifelse{\getitemparameter\currentitemlevel\c!placestopper}\v!yes
+ {\def\tempsymbol{\getitemparameter\currentitemlevel\c!stopper}}
{\let\tempsymbol\empty}%
\fi}
+\def\actualitemnumber
+ {\ifconditional\reverselistitem
+ \convertnumber\currentitemsymbol{\numexpr\currentmaxnofitems+\currentitemoffset-\currentitemnumber+1\relax}%
+ \else
+ \convertnumber\currentitemsymbol{\numexpr\currentminnofitems+\currentitemoffset+\currentitemnumber-1\relax}%
+ \fi}
+
% PAS OP: ook 'opelkaar' en zo worden getest, nog eens afvangen!
\def\unknownitemsymbol{?}
@@ -358,24 +461,23 @@
\def\setitemmark#1% % en pas op: resets \docommand
{\doifsymboldefinedelse{#1}
{\edef\currentitemsymbol{#1}%
- \setxvalue{\@@globalitemsymbol\itemlevel}{\currentitemsymbol}%
- \setgvalue{\@@localitemsymbol \itemlevel}{\unknownitemsymbol}%
+ \setxvalue{\@@globalitemsymbol\currentitemlevel}{\currentitemsymbol}%
+ \setgvalue{\@@localitemsymbol \currentitemlevel}{\unknownitemsymbol}%
\def\listitem{\symbol[\currentitemsymbol]}%
\let\@@opsymbol\empty}% \let\docommand\gobbleoneargument}
{\doifconversiondefinedelse{#1}
{\edef\currentitemsymbol{#1}%
- \setxvalue{\@@globalitemsymbol\itemlevel}{\currentitemsymbol}%
- \setgvalue{\@@localitemsymbol \itemlevel}%
- {\convertnumber{\currentitemsymbol}{\countervalue{\@@itemcounter\itemlevel}}}%
+ \setxvalue{\@@globalitemsymbol\currentitemlevel}{\currentitemsymbol}%
+ \setgvalue{\@@localitemsymbol\currentitemlevel }{\actualitemnumber }%
\ifconditional\textlistitem
- \doifsomething{\getitemparameter\itemlevel\c!lefttext}
+ \doifsomething{\getitemparameter\currentitemlevel\c!lefttext}
{\let\tempsymbol\empty}%
\fi
\def\listitem
- {\getitemparameter\itemlevel
+ {\getitemparameter\currentitemlevel
{\ifconditional\textlistitem\c!lefttext\else\c!left\fi}%
- \getvalue{\@@localitemsymbol\itemlevel}\tempsymbol
- \getitemparameter\itemlevel
+ \getvalue{\@@localitemsymbol\currentitemlevel}\tempsymbol
+ \getitemparameter\currentitemlevel
{\ifconditional\textlistitem\c!righttext\else\c!right\fi}}%
\let\@@opsymbol\empty}%\let\docommand\gobbleoneargument}
{}}}
@@ -400,9 +502,22 @@
\def\startitemgroup
{\dotripleempty\dostartitemgroup}
+% \def\dostartitemgroup[#1][#2][#3]%
+% {\bgroup
+% \def\currentitemgroup{#1}%
+% \ifthirdargument
+% \dodostartitemgroup[#2][#3]%
+% \else
+% \doifassignmentelse{#2}
+% {\dodostartitemgroup[][#2]}
+% {\dodostartitemgroup[#2][]}%
+% \fi}
+
\def\dostartitemgroup[#1][#2][#3]%
{\bgroup
- \def\currentitemgroup{#1}%
+ \ifnum\currentitemlevel=\zerocount
+ \def\currentitemgroup{#1}% no nested mixing of itemgroups
+ \fi
\ifthirdargument
\dodostartitemgroup[#2][#3]%
\else
@@ -413,15 +528,16 @@
\def\dodostartitemgroup[#1]% [#2]%
{\relax % prevents lookahead
- \ifnum\itemlevel=\maxitemlevel\relax
- \showmessage\m!layouts9\maxitemlevel
+ \ifnum\currentitemlevel=\maxitemdepth\relax
+ \showmessage\m!layouts9{\number\maxitemdepth}%
\let\itemincrement\zerocount
\else
\let\itemincrement\plusone
\fi
- \doglobal\increment(\itemlevel,\itemincrement)%
- \initializeitemgrouplevel\itemlevel % safeguard
- \edef\itemgroupoptions{\getitemparameter\itemlevel\c!option}%
+ \global\advance\itemdepth\itemincrement
+ \xdef\currentitemlevel{\number\itemdepth}%
+ \initializeitemgrouplevel\currentitemlevel % safeguard
+ \edef\itemgroupoptions{\getitemparameter\currentitemlevel\c!option}%
\ifx\itemgroupoptions\empty
\edef\itemgroupoptions{#1}%
\else
@@ -492,6 +608,16 @@
\ifx\startcolumns\undefined \def\startcolumns[#1]{} \fi
\ifx\stopcolumns \undefined \let\stopcolumns\relax \fi
+\def\dosetsymalign#1% hm, we should use one of the core-spa macros or make a helper
+ {\processaction
+ [#1]
+ [ \v!flushleft=>\let\symalignleft\relax,
+ \v!right=>\let\symalignleft\relax,
+ \v!flushright=>\let\symalignleft\hfill,
+ \v!left=>\let\symalignleft\hfill,
+ \v!middle=>\let\symalignleft\hfil,
+ \v!center=>\let\symalignleft\hfil]}
+
\def\redostartitemgroup[#1][#2]%
{\setfalse\inlinelistitem % new, no indent (leftskip)
\setfalse\concatnextitem % new, concat
@@ -505,72 +631,86 @@
\ifconditional\textlistitem\else\doifnotinset\v!text{#1}\par\fi % suboptimal
\fi
\begingroup
- \doifinsetelse\v!intro{#1}{\settrue\introlistitem}{\setfalse\introlistitem}%
- \doifinsetelse\v!random{#1}{\settrue\randomizeitems}{\setfalse\randomizeitems}%
+ % new where, ok or not / we should integrate random, intro, continue here
+ % beware, the following no longer inherit from the previous level, is this ok?
+ \setfalse\reverselistitem
+ \setfalse\introlistitem
+ \setfalse\autointrolistitem
+ \setfalse\beforelistitem
+ \setfalse\afterlistitem
+ \setfalse\nowhitelistitem
+ \setfalse\randomizeitems
+ %
+ \doifinsetelse\v!intro {#1}{\settrue\introlistitem }{\setfalse\introlistitem }%
+ \doifinsetelse\v!random {#1}{\settrue\randomizeitems }{\setfalse\randomizeitems }%
+ \doifinsetelse\v!continue{#1}{\settrue\continuelistitems}{\setfalse\continuelistitems}%
% == \doifinsetelse\v!intro{#1}\settrue\setfalse\introlistitem
- \doglobal\increment\noflists
- \let\currentlist\noflists
+ \global\advance\noflists\plusone
+ \currentnoflists=\noflists
\newcounter\noflistelements
\setfalse\headlistitem
\setfalse\sublistitem
\setfalse\symbollistitem
\let\marsymbol\relax
- \globallet\somdestination\empty
+ \globallet\doitemdestination\empty
\let\symsymbol\empty
+ \let\symalignleft\relax
\the\itemgroupcommands
- % \getitemparameter\itemlevel\empty
+\checkcurrentnofitems
+ % \getitemparameter\currentitemlevel\empty
\let\listitem\empty % ** start value
\doifelsenothing{#1} % iffirstargument
- {\edef\@@opsymbol{\getitemparameter\itemlevel\c!symbol}%
- \letgvalueempty{\@@globalitemsymbol\itemlevel}%
- \global\letitemparameter\itemlevel\v!continue\empty
+ {\edef\@@opsymbol{\getitemparameter\currentitemlevel\c!symbol}%
+ \letgvalueempty{\@@globalitemsymbol\currentitemlevel}%
+ \global\letitemparameter\currentitemlevel\v!continue\empty
% \setitemmark\@@opsymbol % ** default value
- \dosetupitemgroupvariable[\itemlevel][#2]}
- {\dosetupitemgroupconstant[\itemlevel][#1]%
- \dosetupitemgroupvariable[\itemlevel][#2]%
+ \dosetupitemgroupvariable[\currentitemlevel][#2]}
+ {\dosetupitemgroupconstant[\currentitemlevel][#1]%
+ \dosetupitemgroupvariable[\currentitemlevel][#2]%
\doifinsetelse\v!continue{#1}% \noexpand, else problems in non-etex with chinese
- {\edef\@@opsymbol{\noexpand\getvalue{\@@globalitemsymbol\itemlevel}}%
- \getitemparameter\itemlevel\v!continue}
- {\edef\@@opsymbol{\noexpand\getitemparameter{\itemlevel}{\c!symbol}}%
- \global\setitemparameter\itemlevel\v!continue
- {\dosetupitemgroupconstant[\itemlevel][#1]%
- \dosetupitemgroupvariable[\itemlevel][#2]}}%
+ {\edef\@@opsymbol{\noexpand\getvalue{\@@globalitemsymbol\currentitemlevel}}%
+ \getitemparameter\currentitemlevel\v!continue}
+ {\edef\@@opsymbol{\noexpand\getitemparameter{\currentitemlevel}{\c!symbol}}%
+ \global\setitemparameter\currentitemlevel\v!continue
+ {\dosetupitemgroupconstant[\currentitemlevel][#1]%
+ \dosetupitemgroupvariable[\currentitemlevel][#2]}}%
\def\docommand##1% \setitemmark resets \docommand
{\doifnot{##1}{0}{\setitemmark{##1}}}%
% \processcommalist[#1,\@@opsymbol]\docommand
\processcommalist[#1]\docommand}% ** preset sequence or provided sequence
% moved to here, after settings
- \ifnum\itemlevel=\plusone % NIEUW
+ \ifnum\currentitemlevel=\plusone % NIEUW
\doadaptleftskip {\getitemparameter1\c!margin}%
\doadaptleftskip {\getitemparameter1\c!leftmargin}%
\doadaptrightskip{\getitemparameter1\c!rightmargin}%
\fi
- \dosetraggedcommand{\getitemparameter\itemlevel\c!align}\raggedcommand
- \doifsomething{\getitemparameter\itemlevel\c!indenting}
+ \dosetraggedcommand{\getitemparameter\currentitemlevel\c!align}\raggedcommand
+ \dosetsymalign{\getitemparameter\currentitemlevel\c!symalign}%
+ \doifsomething{\getitemparameter\currentitemlevel\c!indenting}
{% is \expanded needed?
- \expanded{\setupindenting[\getitemparameter\itemlevel\c!indenting]}}%
+ \expanded{\setupindenting[\getitemparameter\currentitemlevel\c!indenting]}}%
%
\setitemlevel{#1}% moved to here
\ifx\listitem\empty
\setitemmark\@@opsymbol % ** default value
\ifx\listitem\empty
- \edef\currentitemsymbol{\itemlevel}% ** fall back
+ \edef\currentitemsymbol{\currentitemlevel}% ** fall back
\fi
\fi
\ifconditional\autointrolistitem\ifnum\prevgraf<3
\settrue\introlistitem
\fi\fi
\ifconditional\paragraphlistitem
- \ifnum\itemlevel>\plusone
- \letitemparameter\itemlevel\c!inbetween\empty
+ \ifnum\currentitemlevel>\plusone
+ \letitemparameter\currentitemlevel\c!inbetween\empty
\fi
\fi
\ifconditional\packlistitem
- \letitemparameter\itemlevel\c!inbetween\empty
+ \letitemparameter\currentitemlevel\c!inbetween\empty
\fi
\doifinset\v!columns{#1}%
- {\ifinsidecolumns\else\ifnum\itemcolumndepth=\zerocount
- \globallet\itemcolumndepth\itemlevel
+ {\ifinsidecolumns\else\ifcase\itemcolumndepth
+ \global\itemcolumndepth\currentitemlevel\relax
\itembeforecommand
\processfirstactioninset
[#1]
@@ -579,15 +719,21 @@
\v!three=>\!!counta3\relax,
\v!four=>\!!counta4\relax,
\v!five=>\!!counta5\relax,
- \s!unknown=>\@EA\!!counta\getitemparameter\itemlevel\c!n]%
+ \s!unknown=>\@EA\!!counta\getitemparameter\currentitemlevel\c!n]%
\startcolumns
- [\c!n=\!!counta, % netter \??op\itemlevel\c!n
+ [\c!n=\!!counta, % netter \??op\currentitemlevel\c!n
\c!height=,
\c!rule=\v!off,
\c!balance=\v!yes,
\c!align=\v!no]%
- \fi\fi}
- \calculatelistwidth\itemlevel{\dimen0}%
+ \fi\fi}%
+\ifconditional\fittinglistitems
+ \splititemtwopassdata\currentnoflists
+ \ifdim\itemdataw sp>\zeropoint
+ \expanded{\setitemparameter{\currentitemlevel}{\c!width}{\itemdataw sp}}%
+ \fi
+\fi
+ \calculatelistwidth\currentitemlevel{\dimen0}%
\ifdim\dimen0>\zeropoint\relax
\ifconditional\inlinelistitem\else
\advance\leftskip \dimen0\relax
@@ -616,19 +762,19 @@
\else
\par
\fi
- \ifnum\itemcolumndepth=\zerocount \dolistreference \fi % beware !
+ \dolistreference
\ifconditional\firstlistitem \else \endgroup \fi % toegevoegd, eerste \som opent groep
- \ifnum\itemcolumndepth=\itemlevel\relax
+ \ifnum\itemcolumndepth=\currentitemlevel\relax
\stopcolumns
- \doglobal\newcounter\itemcolumndepth
+ \global\itemcolumndepth\zerocount
\itemaftercommand
\dontrechecknextindentation
\else
- \ifnum\itemlevel=\plusone
+ \ifnum\currentitemlevel=\plusone
\doitembreak\allowbreak % toegevoegd
- \itemaftercommand % \getitemparameter\itemlevel\c!after
+ \itemaftercommand % \getitemparameter\currentitemlevel\c!after
% was: \dochecknextindentation\??oo, is now:
- \dochecknextindentation{\??op\currentitemgroup\itemlevel}%
+ \dochecknextindentation{\??op\currentitemgroup\currentitemlevel}%
\else
% nieuw, not yet nobreak handling
\ifcase\autoitemgroupspacing
@@ -639,11 +785,19 @@
\dontrechecknextindentation
\fi
\fi
- \endgroup
- \doglobal\decrement(\itemlevel,\itemincrement)%
- \egroup
- % new needed in sidefloats (surfaced in volker's proceedings)
- \ifconditional\textlistitem\else\par\fi
+ % new test, needed in sidefloats (surfaced in volker's proceedings)
+ \ifconditional\textlistitem % else forgotten
+ \endgroup
+ \global\advance\itemdepth-\itemincrement
+ \xdef\currentitemlevel{\number\itemdepth}%
+ \egroup
+ \else
+ \endgroup
+ \global\advance\itemdepth-\itemincrement
+ \xdef\currentitemlevel{\number\itemdepth}%
+ \egroup
+ \par
+ \fi
\dorechecknextindentation}
\newtoks\itemgroupcommands
@@ -652,7 +806,7 @@
{\doitemgroupitem}
\def\itemgroupbutton[#1]%
- {\gdef\somdestination{#1}%
+ {\gdef\doitemdestination{#1}%
\itemgroupitem}
\def\itemgroupdummy
@@ -663,15 +817,15 @@
\itemgroupitem}
\def\itemgroupsymbol#1%
- {\def\symsymbol{\doitemattributes\itemlevel\c!symstyle\c!symcolor{#1}}%
+ {\def\symsymbol{\doitemattributes\currentitemlevel\c!symstyle\c!symcolor{#1}}%
\settrue\symbollistitem
\itemgroupitem}
\def\itemgroupedge#1%
{\itemgroupsymbol
- {\calculatelistwidth\itemlevel{\dimen0}%
+ {\calculatelistwidth\currentitemlevel{\dimen0}%
\hbox to \dimen0
- {#1\hskip\getitemparameter\itemlevel\c!distance}}}
+ {#1\hskip\getitemparameter\currentitemlevel\c!distance}}}
\def\itemgrouphead
{\settrue\headlistitem\doitemgrouphead}
@@ -681,13 +835,13 @@
\def\doitemgroupitems[#1]%
{\itemgroupedge
- {\dorecurse{0\getitemparameter\itemlevel\c!items}{\listitem\hss}%
+ {\dorecurse{0\getitemparameter\currentitemlevel\c!items}{\listitem\hss}%
\unskip}}
\def\itemgroupmargin#1%
{\def\marsymbol
{\llap
- {\doitemattributes\itemlevel\c!marstyle\c!marcolor{#1}%
+ {\doitemattributes\currentitemlevel\c!marstyle\c!marcolor{#1}%
\hskip\leftskip\hskip\leftmargindistance}}%
\itemgroupitem}
@@ -729,10 +883,23 @@
% \headsym{xx} test \par test
% \stopitemize
+% aligned items
+%
+% \startitemize[n,fit,broad][itemalign=flushright]
+% \dorecurse{100}{\item The first item.}
+% \stopitemize
+%
+% \setupitemgroup[itemize][each][fit]
+% \setupitemgroup[itemize][each][distance=.5em,factor=1,itemalign=flushright]
+%
+% \startitemize[n]
+% \dorecurse{100}{\item The first item.}
+% \stopitemize
+
\appendtoks \let\headsym \itemgroupheadsym \to \itemgroupcommands
\def\itemgroupheadsym#1%
- {\def\symsymbol{\doitemattributes\itemlevel\c!symstyle\c!symcolor{#1}}%
+ {\def\symsymbol{\doitemattributes\currentitemlevel\c!symstyle\c!symcolor{#1}}%
\settrue\symbollistitem
\settrue\headlistitem
\doitemgrouphead}
@@ -752,7 +919,7 @@
\newconditional\txtlistitem \setfalse\txtlistitem
\def\itemgrouptext#1%
- {\def\symsymbol{\doitemattributes\itemlevel\c!headstyle\c!headcolor{#1}}%
+ {\def\symsymbol{\doitemattributes\currentitemlevel\c!headstyle\c!headcolor{#1}}%
\settrue\symbollistitem
\settrue\txtlistitem
\itemgroupitem}
@@ -765,71 +932,77 @@
\def\dodotxtitem
{\scratchdimen\wd8
- \advance \scratchdimen \getitemparameter\itemlevel\c!distance\relax
+ \advance \scratchdimen \getitemparameter\currentitemlevel\c!distance\relax
\ifdim\scratchdimen>\dimen0
\advance\scratchdimen -\dimen0
\else
\scratchdimen\z@
\fi
- \llap{\hbox to \dimen0{\ifconditional\sublistitem\llap{+}\fi\box8\hfill}}%
+ \llap{\hbox to \dimen0{\ifconditional\sublistitem\llap{+}\fi\box8\hss}}% was: \hfill
\hskip\scratchdimen}
-\def\dolistitem % evt aantal items opslaan per niveau, scheelt zoeken
- {\ifconditional\textlistitem
- % begin of item
- \else
- \par
- \fi
-% \ignorespaces
- \increment\noflistelements
- \ifnum\itemcolumndepth=\zerocount \ifconditional\optimizelistitem
- \ifnum\noflistelements=\plusone % tgv bv kolommen/nesting
- \findtwopassdata\s!list{\noflists}% % wordt soms de volgorde
- \fi % verstoord, vandaar \find
- \iftwopassdatafound
- \ifcase0\twopassdata\relax \twopassdatafoundfalse \fi
- \fi
- \iftwopassdatafound
- \ifnum\twopassdata=3
- \ifnum\noflistelements>1
+\def\optimizelistitemsbreak
+ {\ifcase\itemcolumndepth \ifconditional\optimizelistitem
+ \ifcase \currentnofitems \else
+ \ifnum\currentnofitems=\plusthree
+ \ifnum\noflistelements>\plusone
\doitembreak\itemnobreak
\fi
- \else\ifnum\twopassdata>3
- \ifnum\noflistelements=2
+ \else\ifnum\currentnofitems>\plusthree
+ \ifnum\noflistelements=\plustwo
\ifconditional\introlistitem
\doitembreak\nobreak
\else
\doitembreak\itemnobreak
\fi
- \else\ifnum\twopassdata=\noflistelements\relax
+ \else\ifnum\currentnofitems=\noflistelements\relax
\doitembreak\itemnobreak
- \else\ifnum\noflistelements>2
+ \else\ifnum\noflistelements>\plustwo
\doitembreak\itembreak
\else
\ifconditional\introlistitem\else\doitembreak\itembreak\fi
\fi\fi\fi
\fi\fi
\fi
- \fi\fi
+ \fi\fi}
+
+\def\dolistitem % evt aantal items opslaan per niveau, scheelt zoeken
+ {\ifconditional\textlistitem
+ % begin of item
+ \else
+ \par
+ \fi
+% \ignorespaces
+ \increment\noflistelements
+ \optimizelistitemsbreak
\noindent
\setbox8\hbox
{\ifconditional\headlistitem
\ifconditional\symbollistitem
\symsymbol
\else
- \doitemattributes\itemlevel\c!headstyle\c!headcolor{\listitem}%
+ \doitemattributes\currentitemlevel\c!headstyle\c!headcolor{\listitem}%
\fi
\else
\ifconditional\symbollistitem
\symsymbol % no attributes, why?
\else
- \doitemattributes\itemlevel\c!style\c!color{\listitem}%
+ \doitemattributes\currentitemlevel\c!style\c!color{\listitem}%
\fi
\fi}%
- \doifsomething\somdestination
- {\setbox8\hbox{\goto{\box8}[\somdestination]}}%
- \globallet\somdestination\empty
- \dimen2=\getitemparameter\itemlevel\c!width\relax
+\ifconditional\fittinglistitems
+ \ifdim\wd8>\getitemparameter\currentitemlevel\c!maxwidth sp\relax
+ \expanded{\global\noexpand\setitemparameter{\currentitemlevel}{\c!maxwidth}{\number\wd8}}%
+ \fi
+ \splititemtwopassdata\currentnoflists
+ \ifdim\itemdataw sp>\zeropoint
+ \setbox8\simplealignedbox{\getitemparameter\currentitemlevel\c!itemalign}{\itemdataw sp}{\box8}%
+ \fi
+\fi
+ \doifsomething\doitemdestination
+ {\setbox8\hbox{\goto{\box8}[\doitemdestination]}}%
+ \globallet\doitemdestination\empty
+ \dimen2=\getitemparameter\currentitemlevel\c!width\relax
% new, prevents loops when symbol is (not yet found) graphic
\ht8=\strutheight
\dp8=\strutdepth
@@ -841,23 +1014,28 @@
\ifdim\dimen2=\zeropoint\relax
\calculatelistwidth1{\dimen0}%
\else
- \calculatelistwidth\itemlevel{\dimen0}%
+ \calculatelistwidth\currentitemlevel{\dimen0}%
\fi
\ifconditional\textlistitem
\hbox{\ifconditional\sublistitem+\fi\box8\hskip\interwordspace}\nobreak
\else\ifconditional\inlinelistitem
- \hbox to \dimen0{\ifconditional\sublistitem\llap{+}\fi\box8\hfill}%
+ \hbox to \dimen0{\ifconditional\sublistitem\llap{+}\fi\box8\hss}% was: \hfill
\else\ifconditional\txtlistitem
\dodotxtitem
\else
% todo: align+marge binnen de hbox
- \llap{\hbox to \dimen0{\ifconditional\sublistitem\llap{+}\fi\box8\hfill}}%
+% \llap{\hbox to \dimen0{\ifconditional\sublistitem\llap{+}\fi\box8\hfill}}%
+ \llap{\hbox to \dimen0{\ifconditional\sublistitem\llap{+}\fi
+ \symalignleft
+ \box8\hfil
+ \hskip\getitemparameter\currentitemlevel\c!distance% T h
+ }}%
\fi\fi\fi
\fi
\forceunexpanded % needed for m conversion (\os) / i need to look into this
- \setevalue{\@@currentitemsymbol\itemlevel}%
- {\getvalue{\@@localitemsymbol\itemlevel}}% still problems with \uchar ?
- %{\noexpand\getvalue{\@@localitemsymbol\itemlevel}}% no, spoils subrefs
+ \setevalue{\@@currentitemsymbol\currentitemlevel}%
+ {\getvalue{\@@localitemsymbol\currentitemlevel}}% still problems with \uchar ?
+ %{\noexpand\getvalue{\@@localitemsymbol\currentitemlevel}}% no, spoils subrefs
\resetunexpanded
\setfalse\headlistitem
\setfalse\sublistitem
@@ -870,17 +1048,17 @@
\newconditional\repeatlistitem
\def\checkforrepeatedlistitem
- {\ifnum\itemlevel=\plusone
+ {\ifnum\currentitemlevel=\plusone
\initializeboxstack{item}%
\fi
\ifconditional\repeatlistitem
- \savebox{item}{\itemlevel}{\hbox{\copy8}}%
+ \savebox{item}{\currentitemlevel}{\hbox{\copy8}}%
\setbox8\hbox to \wd8
{\setbox\scratchbox\hbox
- {\scratchcounter\itemlevel
+ {\scratchcounter\currentitemlevel
\advance\scratchcounter\minusone
\dorecurse\scratchcounter{\foundbox{item}{\recurselevel}}}%
- \ifnum\itemlevel>\plusone
+ \ifnum\currentitemlevel>\plusone
\ifdim\wd\scratchbox>\zeropoint
\hskip-\dimen2
\box\scratchbox
@@ -923,22 +1101,22 @@
\doitembreak\nobreak % new, concat
\fi % new, concat
\doadvanceitem
- \ifnum\itemcolumndepth=0\relax\ifnum\noflistelements>0\relax
+ \ifcase\itemcolumndepth \ifnum\noflistelements>0\relax
\doitembreak\nobreak
\fi\fi
\ifconditional\firstlistitem
\setfalse\firstlistitem
\begingroup
- \ifcase\itemlevel
+ \ifcase\currentitemlevel
\or % 1
- \ifnum\itemcolumndepth=0\relax
+ \ifcase\itemcolumndepth
\ifconditional\introlistitem\doitembreak\nobreak\fi
- \itembeforecommand % \getitemparameter\itemlevel\c!before
+ \itembeforecommand % \getitemparameter\currentitemlevel\c!before
\ifconditional\introlistitem\doitembreak\nobreak\fi
\fi
\else % 2 en hoger
\ifconditional\paragraphlistitem \else
- \let\previtemlevel\itemlevel
+ \let\previtemlevel\currentitemlevel
\decrement\previtemlevel
\ifcase\autoitemgroupspacing\relax % nieuw
\itembeforecommand
@@ -970,7 +1148,7 @@
\ifconditional\packlistitem
\setupwhitespace[\v!none]%
\fi
- \getitemparameter\itemlevel\c!inner
+ \getitemparameter\currentitemlevel\c!inner
\marsymbol
\let\marsymbol\relax
\doifsomething{#1}
@@ -983,7 +1161,7 @@
\setfalse\concatnextitem % new, concat
\nobreak % else problems with intext items
\hskip\itemsignal % new, concat
- \getitemparameter\itemlevel\c!command} % \defaultitemcommand
+ \getitemparameter\currentitemlevel\c!command} % \defaultitemcommand
\def\defaultitemcommand
{\EveryPar{\ignorespaces}% needed ?
@@ -1017,10 +1195,10 @@
% \def\complexdoitemgrouphead[#1]#2\par% % beter in \complexdosom hangen met een if
% {\ifconditional\firstlistitem\else\doitembreak\allowbreak\fi
% \ifconditional\packlistitem\else\itembeforeheadcommand\fi
-% \ifconditional\firstlistitem\ifconditional\introlistitem\else\ifcase\itemlevel % incr in \complexdosom
+% \ifconditional\firstlistitem\ifconditional\introlistitem\else\ifcase\currentitemlevel % incr in \complexdosom
% \doitembreak\allowbreak
% \fi\fi\fi
-% \complexdoitemgroupitem[#1]{\doitemattributes\itemlevel\c!headstyle\c!headcolor
+% \complexdoitemgroupitem[#1]{\doitemattributes\currentitemlevel\c!headstyle\c!headcolor
% {\ignorespaces#2}}%
% \ifconditional\textlistitem
% \removeunwantedspaces\space\ignorespaces
@@ -1040,12 +1218,12 @@
\def\complexdoitemgrouphead[#1]% beter in \complexdosom hangen met een if
{\ifconditional\firstlistitem\else\doitembreak\allowbreak\fi
\ifconditional\packlistitem\else\itembeforeheadcommand\fi
- \ifconditional\firstlistitem\ifconditional\introlistitem\else\ifcase\itemlevel % incr in \complexdosom
+ \ifconditional\firstlistitem\ifconditional\introlistitem\else\ifcase\currentitemlevel % incr in \complexdosom
\doitembreak\allowbreak
\fi\fi\fi
\complexdoitemgroupitem[#1]%
\bgroup
- \dostartitemattributes\itemlevel\c!headstyle\c!headcolor\empty
+ \dostartitemattributes\currentitemlevel\c!headstyle\c!headcolor\empty
\ignorespaces
\let\par\enditemhead} % brrrr but simple anyway
@@ -1097,6 +1275,7 @@
\c!distance=.5em,
%\c!align=\v!normal, % definitely not \v!normal, see mails and
\c!align=, % debug reports of David A & Patrick G on context list
+ \c!symalign=,
\c!color=,
\c!indenting=, % untouched if empty
\c!color=,
@@ -1122,7 +1301,7 @@
\c!start=1,
\c!option=,
\c!command=\defaultitemcommand,
- \c!symbol=\itemlevel] % \v!niveau
+ \c!symbol=\currentitemlevel] % \v!niveau
\def\defineitemgroup
{\dodoubleempty\dodefineitemgroup}
@@ -1135,8 +1314,8 @@
\setvalue{\e!stop#1}{\stopitemgroup}%
\setvalue{\e!setup#1\e!endsetup}{\setupitemgroup[#1]}%
\getparameters[\??ig#1][\c!levels=3,#2]%
- \ifnum\getvalue{\??ig#1\c!levels}<\maxitemlevel\relax
- \letvalue{\??ig#1\c!levels}\maxitemlevel
+ \ifnum\getvalue{\??ig#1\c!levels}<\maxitemdepth\relax
+ \setevalue{\??ig#1\c!levels}{\number\maxitemdepth}%
\fi
\dorecurse{\getvalue{\??ig#1\c!levels}}{\initializeitemgrouplevel\recurselevel}%
\popmacro\currentitemgroup}}
diff --git a/Master/texmf-dist/tex/context/base/core-job.lua b/Master/texmf-dist/tex/context/base/core-job.lua
new file mode 100644
index 00000000000..b963227a50f
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/core-job.lua
@@ -0,0 +1,146 @@
+if not modules then modules = { } end modules ['core-job'] = {
+ version = 1.001,
+ comment = "companion to core-job.tex",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- will move
+
+commands.writestatus = ctx.writestatus
+
+function commands.doifelse(b)
+ tex.sprint(tex.texcatcodes,(b and "\\firstoftwoarguments") or "\\secondoftwoarguments")
+end
+function commands.doif(b)
+ tex.sprint(tex.texcatcodes,(b and "\\firstofoneargument") or "\\gobbleoneargument")
+end
+function commands.doifnot(b)
+ tex.sprint(tex.texcatcodes,(b and "\\gobbleoneargument") or "\\firstofoneargument")
+end
+cs.testcase = commands.doifelse
+
+local format = string.format
+
+function commands. def(cs,value) tex.sprint(tex.ctxcatcodes,format( "\\def\\%s{%s}",cs,value)) end
+function commands.edef(cs,value) tex.sprint(tex.ctxcatcodes,format("\\edef\\%s{%s}",cs,value)) end
+function commands.gdef(cs,value) tex.sprint(tex.ctxcatcodes,format("\\gdef\\%s{%s}",cs,value)) end
+function commands.xdef(cs,value) tex.sprint(tex.ctxcatcodes,format("\\xdef\\%s{%s}",cs,value)) end
+
+function commands.cs(cs,args) tex.sprint(tex.ctxcatcodes,format("\\csname %s\\endcsname %s",cs,args or"")) end
+
+-- main code
+
+local function find_file(name,maxreadlevel)
+ local function exists(n)
+ if io.exists(n) then
+ return n
+ else
+ n = file.addsuffix(n,'tex')
+ if io.exists(n) then
+ return n
+ end
+ end
+ return nil
+ end
+ if input.aux.qualified_path(name) then
+ return name
+ else
+ -- not that efficient, too many ./ lookups
+ local n = "./" .. name
+ local found = exists(n)
+ if found then
+ return found
+ else
+ for i=1,maxreadlevel or 0 do
+ n = "../" .. n
+ found = exists(n)
+ if found then
+ return found
+ end
+ end
+ end
+ return input.find_file(texmf.instance,name) or ""
+ end
+end
+
+function commands.processfile(name,maxreadlevel)
+ name = find_file(name,maxreadlevel)
+ if name ~= "" then
+ -- tex.sprint(tex.ctxcatcodes,string.format("\\input %s\\relax",name))
+ tex.print(tex.ctxcatcodes,string.format("\\input %s",name))
+ end
+end
+
+function commands.doifinputfileelse(name,maxreadlevel)
+ commands.doifelse(find_file(name,maxreadlevel) ~= "")
+end
+
+function commands.locatefilepath(name,maxreadlevel)
+ tex.sprint(tex.texcatcodes,file.dirname(find_file(name,maxreadlevel)))
+end
+
+function commands.usepath(paths,maxreadlevel)
+ input.register_extra_path(texmf.instance,paths)
+ tex.sprint(tex.texcatcodes,table.concat(texmf.instance.extra_paths or {}, ""))
+end
+
+function commands.usesubpath(subpaths,maxreadlevel)
+ input.register_extra_path(texmf.instance,nil,subpaths)
+ tex.sprint(tex.texcatcodes,table.concat(texmf.instance.extra_paths or {}, ""))
+end
+
+function commands.usezipfile(name,tree)
+ if tree and tree ~= "" then
+ input.usezipfile(texmf.instance,string.format("zip:///%s?tree=%s",name,tree))
+ else
+ input.usezipfile(texmf.instance,string.format("zip:///%s",name))
+ end
+end
+
+-- for the moment here, maybe a module
+
+--~ <?xml version='1.0' standalone='yes'?>
+--~ <exa:variables xmlns:exa='htpp://www.pragma-ade.com/schemas/exa-variables.rng'>
+--~ <exa:variable label='mode:pragma'>nee</exa:variable>
+--~ <exa:variable label='mode:variant'>standaard</exa:variable>
+--~ </exa:variables>
+
+local function convertexamodes(str)
+ local x, t = xml.convert(str), { }
+ for e, d, k in xml.elements(x,"exa:variable") do
+ local dk = d[k]
+ local label = dk.at and dk.at.label
+ if label and label ~= "" then
+ local data = xml.content(dk)
+ local mode = label:match("^mode:(.+)$")
+ if mode then
+ tex.sprint(tex.ctxcatcodes,string.format("\\enablemode[%s:%s]",mode,data))
+ end
+ if data:find("{}") then
+ t[#t+1] = string.format("%s={%s}",mode,data)
+ else
+ t[#t+1] = string.format("%s=%s",mode,data)
+ end
+ end
+ end
+ if #t > 0 then
+ tex.sprint(tex.ctxcatcodes,string.format("\\setvariables[exa:variables][%s]",table.concat(t,",")))
+ end
+end
+
+-- we need a system file option: ,. .. etc + paths but no tex lookup so input.find_file is wrong here
+
+function commands.loadexamodes(filename)
+ if not filename or filename == "" then
+ filename = file.stripsuffix(tex.jobname)
+ end
+ filename = input.find_file(texmf.instance,file.addsuffix(filename,'ctm')) or ""
+ if filename ~= "" then
+ commands.writestatus("examodes","loading " .. filename) -- todo: message system
+ convertexamodes(io.loaddata(filename))
+ else
+ commands.writestatus("examodes","no mode file " .. filename) -- todo: message system
+ end
+end
diff --git a/Master/texmf-dist/tex/context/base/core-job.mkii b/Master/texmf-dist/tex/context/base/core-job.mkii
new file mode 100644
index 00000000000..3a0f4e2f4d6
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/core-job.mkii
@@ -0,0 +1,86 @@
+%D \module
+%D [ file=core-job, % copied from main-001,
+%D version=2008.01.25,
+%D title=\CONTEXT\ Core Macros,
+%D subtitle=Job Handling,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\unprotect
+
+\def\processfile#1%
+ {\ifx\allinputpaths\empty
+ \def\next{\processlocalfile\readlocfile}%
+ \else
+ \let\filepath\empty
+ \def\docommand##1%
+ {\doiffileelse{\pathplusfile{##1}{#1}}{\donetrue\def\filepath{##1}}\donefalse
+ \ifdone\expandafter\quitcommalist\fi}%
+ \doifparentfileelse{#1} % new
+ {\processcommacommand [\allinputpaths]\docommand}
+ {\processcommacommand[.,\allinputpaths]\docommand}%
+ \ifx\filepath\empty
+ \def\next{\processlocalfile\readlocfile}% fall back ../../..
+ \else
+ \def\next{\processlocalfile{\readsetfile\filepath}}% file found
+ \fi
+ \fi
+ \next{#1}}
+
+\def\doifinputfileelse#1% rarely used
+ {\ifx\allinputpaths\empty
+ \@EA\secondoftwoarguments
+ \else
+ \let\filepath\empty
+ \def\docommand##1%
+ {\doiffileelse{\pathplusfile{##1}{#1}}{\donetrue\def\filepath{##1}}\donefalse
+ \ifdone\expandafter\quitcommalist\fi}%
+ \processcommacommand[.,\allinputpaths]\docommand
+ \ifx\filepath\empty
+ \@EAEAEA\secondoftwoarguments
+ \else
+ \@EAEAEA\firstoftwoarguments
+ \fi
+ \fi}
+
+\let\locatedfilepath\empty
+
+\def\locatefilepath#1%
+ {\let\locatedfilepath\empty
+ \ifx\allinputpaths\empty \else
+ \def\docommand##1%
+ {\doiffileelse{\pathplusfile{##1}{#1}}{\donetrue\def\locatedfilepath{##1}}\donefalse
+ \ifdone\expandafter\quitcommalist\fi}%
+ \doifparentfileelse{#1} % new
+ {\processcommacommand [\allinputpaths]\docommand}
+ {\processcommacommand[.,\allinputpaths]\docommand}%
+ \fi}
+
+\def\usepath[#1]%
+ {\def\docommand##1%
+ {\doifelse{##1}\v!reset
+ {\let\allinputpaths\empty}
+ {\sanitizefilename#1\to\ascii
+ \defconvertedcommand\ascii\ascii
+ \addtocommalist\ascii\allinputpaths}}%
+ \processcommalist[#1]\docommand}
+
+\def\usesubpath[#1]% test for a real long time, permits ../{name} i.e. braces
+ {\ifx\allinputpaths\empty
+ \sanitizefilename#1\to\allinputpaths
+ \else
+ \def\docommand##1%
+ {\def\dodocommand####1%
+ {\sanitizefilename####1\to\ascii
+ \defconvertedcommand\ascii\ascii
+ \addtocommalist{##1/\ascii}\allinputpaths}%
+ \processcommalist[#1]\dodocommand}%
+ \processcommacommand[\allinputpaths]\docommand
+ \fi}
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/core-job.mkiv b/Master/texmf-dist/tex/context/base/core-job.mkiv
new file mode 100644
index 00000000000..c49063b86ac
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/core-job.mkiv
@@ -0,0 +1,28 @@
+%D \module
+%D [ file=core-job,
+%D version=2008.01.25,
+%D title=\CONTEXT\ Core Macros,
+%D subtitle=Job Handling,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\registerctxluafile{core-job}{1.001}
+
+\def\processfile #1{\ctxlua{commands.processfile("#1",\number\maxreadlevel)}}
+\def\doifinputfileelse#1{\ctxlua{commands.doifinputfileelse("#1",\number\maxreadlevel)}}
+\def\locatefilepath #1{\edef\locatedfilepath{\ctxlua{commands.locatefilepath("#1",\number\maxreadlevel)}}}
+\def\usepath [#1]{\edef\allinputpaths{\ctxlua{commands.usepath("#1")}}}
+\def\usesubpath [#1]{\edef\allinputpaths{\ctxlua{commands.usesubpath("#1")}}}
+
+\def\usezipfile {\dodoubleempty\dousezipfile}
+\def\dousezipfile[#1][#2]{\ctxlua{commands.usezipfile("#1","#2")}} % [filename] [optional subtree]
+
+\def\loadexamodes {\dosingleempty\doloadexamodes}
+\def\doloadexamodes [#1]{\ctxlua{commands.loadexamodes("#1")}}
+
+\endinput
diff --git a/Master/texmf-dist/tex/context/base/core-job.tex b/Master/texmf-dist/tex/context/base/core-job.tex
index d1b766392a5..13b829d3903 100644
--- a/Master/texmf-dist/tex/context/base/core-job.tex
+++ b/Master/texmf-dist/tex/context/base/core-job.tex
@@ -15,6 +15,8 @@
\writestatus{loading}{Context Core Macros / Job Handling}
+\loadmarkfile{core-job}
+
\unprotect
\let \currentproject \empty
@@ -27,111 +29,33 @@
\let \nomorefiles \relax
-\newcounter\textlevel
-\newcounter\fileprocesslevel
+\let \allinputpaths \empty
+\let \locatedfilepath \empty
+
+\newcount\textlevel
+\newcount\fileprocesslevel
\setvalue{\c!file::0}{\jobname}
\def\processedfile % is used in styles, don't change !
- {\getvalue{\c!file::\fileprocesslevel}}
-
-%\def\processfile#1%
-% {\doglobal\increment\fileprocesslevel
-% \setxvalue{\c!file::\fileprocesslevel}{#1}%
-% \@EA\doglobal\@EA\addtocommalist\@EA{#1}\processedfiles
-% \readlocfile{#1}{}{}
-% \doglobal\decrement\fileprocesslevel}
+ {\getvalue{\c!file::\number\fileprocesslevel}}
\def\dostarttextfile#1%
- {\doglobal\increment\fileprocesslevel
- \setxvalue{\c!file::\fileprocesslevel}{#1}%
+ {\global\advance\fileprocesslevel\plusone
+ \setxvalue{\c!file::\number\fileprocesslevel}{#1}%
\@EA\doglobal\@EA\addtocommalist\@EA{#1}\processedfiles}
\def\dostoptextfile
- {\doglobal\decrement\fileprocesslevel}
+ {\global\advance\fileprocesslevel\minusone}
\def\processlocalfile#1#2%
- {% #1=\readlocfile|\readsetfile{dir} #2=filename
- % #1{#2}\donothing\donothing
- #1{#2}\donothing{\readfile{#2}\donothing\donothing}}
-
-\def\processfile#1%
- {\ifx\allinputpaths\empty
- \def\next{\processlocalfile\readlocfile}%
- \else
- \let\filepath\empty
- \def\docommand##1%
- {\doiffileelse{\pathplusfile{##1}{#1}}{\donetrue\def\filepath{##1}}\donefalse
- \ifdone\expandafter\quitcommalist\fi}%
- \doifparentfileelse{#1} % new
- {\processcommacommand [\allinputpaths]\docommand}
- {\processcommacommand[.,\allinputpaths]\docommand}%
- \ifx\filepath\empty
- \def\next{\processlocalfile\readlocfile}% fall back ../../..
- \else
- \def\next{\processlocalfile{\readsetfile\filepath}}% file found
- \fi
- \fi
- \next{#1}}
+ {#1{#2}\donothing{\readfile{#2}\donothing\donothing}}
-\def\doifinputfileelse#1% rarely used
- {\ifx\allinputpaths\empty
- \@EA\secondoftwoarguments
- \else
- \let\filepath\empty
- \def\docommand##1%
- {\doiffileelse{\pathplusfile{##1}{#1}}{\donetrue\def\filepath{##1}}\donefalse
- \ifdone\expandafter\quitcommalist\fi}%
- \processcommacommand[.,\allinputpaths]\docommand
- \ifx\filepath\empty
- \@EAEAEA\secondoftwoarguments
- \else
- \@EAEAEA\firstoftwoarguments
- \fi
- \fi}
-
-\let\allinputpaths\empty
-
-% \def\usepath[#1]%
-% {\def\docommand##1%
-% {\doifelse{##1}\v!reset
-% {\let\allinputpaths\empty}
-% {\addtocommalist{##1}\allinputpaths}}%
-% \processcommalist[#1]\docommand}
-%
-% \def\usesubpath[#1]% new, see webschrift for usage
-% {\ifx\allinputpaths\empty
-% \edef\allinputpaths{#1}%
-% \else
-% \def\docommand##1%
-% {\def\dodocommand####1{\addtocommalist{##1/####1}\allinputpaths}%
-% \processcommalist[#1]\dodocommand}%
-% \processcommacommand[\allinputpaths]\docommand
-% \fi}
-%
-% the following alternatives permit ../{name} i.e. braces
-
-\def\usepath[#1]%
- {\def\docommand##1%
- {\doifelse{##1}\v!reset
- {\let\allinputpaths\empty}
- {\sanitizefilename#1\to\ascii
- \convertcommand\ascii\to\ascii
- \addtocommalist\ascii\allinputpaths}}%
- \processcommalist[#1]\docommand}
-
-\def\usesubpath[#1]% test for a real long time, permits ../{name} i.e. braces
- {\ifx\allinputpaths\empty
- \sanitizefilename#1\to\allinputpaths
- \else
- \def\docommand##1%
- {\def\dodocommand####1%
- {\sanitizefilename####1\to\ascii
- \convertcommand\ascii\to\ascii
- \addtocommalist{##1/\ascii}\allinputpaths}%
- \processcommalist[#1]\dodocommand}%
- \processcommacommand[\allinputpaths]\docommand
- \fi}
+\ifx\processfile \undefined \let\processfile \gobbleoneargument \fi
+\ifx\doifinputfileelse\undefined \let\doifinputfileelse \gobbleoneargument \fi
+\ifx\locatefilepath \undefined \let\locatefilepath \gobbleoneargument \fi
+\ifx\usepath \undefined \def\usepath [#1]{} \fi
+\ifx\usesubpath \undefined \def\usesubpath [#1]{} \fi
\def\registerfileinfo[#1#2]#3% geen \showmessage ?
{\writestatus\m!systems{#1#2 file #3 at line \the\inputlineno}%
@@ -168,7 +92,8 @@
\def\loaduserspecifications
{\readsysfile\f!usrfilename{\showmessage\m!systems2\f!usrfilename}\donothing
- \readjobfile\f!fmtfilename{\showmessage\m!systems2\f!fmtfilename}\donothing}
+ \readjobfile\f!fmtfilename{\showmessage\m!systems2\f!fmtfilename}\donothing
+ \ifx\directlua\undefined\else\preloadallpatterns\fi} % temp hack, we will do runtime loading later
%D We don't want multiple jobfiles to interfere.
@@ -225,14 +150,14 @@
\def\starttext
{\doateverystarttext
- \ifnum\textlevel=\zerocount
+ \ifcase\textlevel
\registerfileinfo[begin]\jobname
\expandafter\startcopyingblocks
\fi
- \doglobal\increment\textlevel\relax}
+ \global\advance\textlevel\plusone}
\def\stoptext
- {\doglobal\decrement\textlevel\relax
+ {\global\advance\textlevel\minusone
\ifnum\textlevel>\zerocount \else
\the\everystoptext
%\the\everybye %
@@ -296,27 +221,7 @@
\processfile{#1}%
\dostoptextfile}
-\newcounter\filelevel
-
-% \def\donextlevel#1#2#3#4#5#6\\%
-% {\beforesplitstring#6\at.\to#1
-% \ifcase\filelevel\relax
-% \starttext
-% \def\project ##1 {#2{##1}}%
-% \def\environment ##1 {#3{##1}}%
-% \def\product ##1 {#4{##1}}%
-% \def\component ##1 {#5{##1}}%
-% \fi
-% \increment\filelevel\relax
-% \fullexpandoneargafter\addtocommalist{#1}\loadedfiles}
-%
-% \def\doprevlevel
-% {\ifnum\filelevel=\plusone
-% \expandafter\stoptext
-% \else
-% \decrement\filelevel\relax
-% \expandafter\endinput
-% \fi}
+\newcount\filelevel
\let\currentcomponent \v!text
\let\currentcomponentpath\f!currentpath
@@ -340,7 +245,7 @@
\def\product ##1 {#5{##1}}%
\def\component ##1 {#6{##1}}%
\fi
- \increment\filelevel\relax
+ \advance\filelevel\plusone
\fullexpandoneargafter\addtocommalist{#1}\loadedfiles}
\def\doprevlevel
@@ -350,32 +255,10 @@
\ifnum\filelevel=\plusone
\expandafter\stoptext
\else
- \decrement\filelevel\relax
+ \advance\filelevel\minusone
\expandafter\endinput
\fi}
-% \def\startproject #1 %
-% {\donextlevel\currentproject
-% \donotexecutefile\doexecutefileonce
-% \doexecutefileonce\doexecutefile#1\\}
-%
-% \def\startproduct #1 %
-% {\doateverystarttext
-% \donextlevel\currentproduct
-% \doexecutefileonce\doexecutefileonce
-% \donotexecutefile\doexecutefile#1\\}
-%
-% \def\startcomponent #1 %
-% {\doateverystarttext
-% \donextlevel\currentcomponent
-% \doexecutefileonce\doexecutefileonce
-% \donotexecutefile\doexecutefile#1\\}
-%
-% \def\startenvironment #1 %
-% {\donextlevel\currentenvironment
-% \donotexecutefile\doexecutefileonce
-% \donotexecutefile\donotexecutefile#1\\}
-
\def\startproject #1 %
{\donextlevel\v!project\currentproject
\donotexecutefile\doexecutefileonce
diff --git a/Master/texmf-dist/tex/context/base/core-lnt.tex b/Master/texmf-dist/tex/context/base/core-lnt.tex
index 29e8a97f066..0d960decd72 100644
--- a/Master/texmf-dist/tex/context/base/core-lnt.tex
+++ b/Master/texmf-dist/tex/context/base/core-lnt.tex
@@ -35,7 +35,7 @@
\ifnum\linenotelinenumber=\linenumber\relax
% todo: \onlyfootnote{#2}{#3}% == configurable
% \setupnote[#1][\c!numbercommand=\gobbleoneargument]%
- % \setnotetext[#1]{\rawreference\s!fnt{\s!fnt:f:\internalfootreference}{}#2: #3}%
+ % \setnotetext[#1]{\rawreference\s!fnt{\s!fnt:f:\number\internalnotereference}{}#2: #3}%
\def\linenotelinenumber##1{#2}%
\setupnote[#1][\c!numbercommand=\linenotelinenumber,\c!textcommand=\gobbleoneargument]%
\setnote[#1]{#3}%
diff --git a/Master/texmf-dist/tex/context/base/core-lst.tex b/Master/texmf-dist/tex/context/base/core-lst.tex
index 359e9b8ceb5..d9fdca3753a 100644
--- a/Master/texmf-dist/tex/context/base/core-lst.tex
+++ b/Master/texmf-dist/tex/context/base/core-lst.tex
@@ -33,6 +33,8 @@
% number uses the text container. We use reference mapping
% (define reference) to keep track of the current ref.
+% \@@sectie == current level
+
\def\dowritetolist#1%
{\doifelsevalue{\??li#1\c!state}\v!start
\dodowritetolist\gobblefourarguments{#1}}
@@ -41,7 +43,7 @@
{\begingroup
\expanded{\everylistentry\emptytoks\the\everylistentry}% \emptytoks, else loop
\def\currentlist{#1}% evt naar dowritetolist
- \convertexpanded{\getvalue{\??li\currentlist\c!expansion}}{#3}\asciilistentry
+ \defconvertexpanded\asciilistentry{\getvalue{\??li\currentlist\c!expansion}}{#3}%
\makesectionformat
\doifelse\@@nmstate\v!start
{\def\dopagenummer{\noexpand\pagenumber}}
@@ -64,7 +66,7 @@
\thisisnextinternal\currentlist
\fi
\expanded
- {\writeutilitycommand
+ {\writeutilitycommand % todo: also an immediate option
{\noexpand\listentry
{\currentlist}%
{\nextinternalreference}%
@@ -91,7 +93,7 @@
\def\dowritebetweenlist#1#2%
{\doifvalue{\??li#1\c!state}\v!start
{\begingroup
- \convertargument#2\to\ascii
+ \defconvertedargument\ascii{#2}%
\makesectionformat
\doifelse{\@@nmstate}\v!start
{\def\dopagenummer{\noexpand\pagenumber}}
@@ -109,7 +111,7 @@
\def\immediatetolist[#1]#2#3#4%
{\begingroup
- \convertexpanded{\getvalue{\??li#1\c!expansion}}{#3}\asciilistentry
+ \defconvertexpanded\asciilistentry{\getvalue{\??li#1\c!expansion}}{#3}%
\makesectionformat
\immediatewriteutilitycommand
{\listentry
@@ -120,7 +122,7 @@
\def\immediatebetweenlist[#1]#2%
{\begingroup
- \convertargument#2\to\asciilistentry
+ \defconvertedargument\asciilistentry{#2}%
\makesectionformat
\immediatewriteutilitycommand
{\listbetween
@@ -276,7 +278,7 @@
\c!textstyle,\c!textcolor,\c!textcommand,
\c!pagestyle,\c!pagecommand,\c!pagecolor,
\c!numberstyle,\c!numbercolor,\c!numbercommand,
-\c!headnumber,
+ \c!headnumber,
\c!pagenumber,\c!pageboundaries,\c!margin,\c!symbol,\c!limittext,
\c!aligntitle,\c!before,\c!after,\c!inbetween,\v!part\c!number,\c!label]%
\getparameters[\??li#1][#3]}}%
@@ -800,24 +802,45 @@
\midaligned
{}}
+% \def\dodofixdlistelementEFG#1#2#3#4#5#6#7#8% keep this one here as reference
+% {\noindent
+% \hbox
+% {#1% in case E nils the strut
+% \let\\=\newlineinlist
+% \setbox0\hbox
+% {#2{\showcontrastlocation\??ia{#8}%
+% {\dostartlistattributes\c!style\c!color\empty
+% \ignorespaces\dontconvertfont\setstrut
+% \begstrut
+% %\doifelsenothing{\listparameter\c!maxwidth}
+% % {\listparameter\c!textcommand{#6}}
+% % {\listparameter\c!textcommand{\limitatetext{#6}{\listparameter\c!maxwidth}{\unknown}}}%
+% \limitatedlistentry{#6}%
+% \endstrut % struts new
+% \dostoplistattributes}}}%
+% \linklisttoelement{#4}{#7}{#8}{\box0}}%{\copy0}}%
+% \par % should be an option
+% \listparameter\c!inbetween}
+
\def\dodofixdlistelementEFG#1#2#3#4#5#6#7#8%
{\noindent
- \hbox
- {#1% in case E nils the strut
- \let\\=\newlineinlist
- \setbox0\hbox
- {#2{\showcontrastlocation\??ia{#8}%
- {\dostartlistattributes\c!style\c!color\empty
- \ignorespaces\dontconvertfont\setstrut
- \begstrut
- %\doifelsenothing{\listparameter\c!maxwidth}
- % {\listparameter\c!textcommand{#6}}
- % {\listparameter\c!textcommand{\limitatetext{#6}{\listparameter\c!maxwidth}{\unknown}}}%
- \limitatedlistentry{#6}%
- \endstrut % struts new
- \dostoplistattributes}}}%
- \linklisttoelement{#4}{#7}{#8}{\box0}}%{\copy0}}%
- \par % should be an option
+ \bgroup
+ \def\makelistelement##1##2% isolated by Wolfgang Schuster
+ {\doifelse{\listparameter\c!interaction}{##1}
+ {#2{##2}}
+ {\setbox0\hbox{#2{\showcontrastlocation\??ia{#8}{##2}}}%
+ \linklisttoelement{#4}{#7}{#8}{\box0}}}%
+ \makelistelement\v!no
+ {\let\\=\newlineinlist
+ #1% in case E nils the strut (still needed?)
+ \dostartlistattributes\c!style\c!color\empty
+ \ignorespaces\dontconvertfont\setstrut
+ \begstrut
+ \limitatedlistentry{#6}%
+ \endstrut
+ \dostoplistattributes}%
+ \egroup
+ \par
\listparameter\c!inbetween}
% better:
@@ -836,7 +859,7 @@
\def\writetolist[#1]#2#3%
{\doifsomething{#1}
- {\convertargument#2\to\firstlistelement
+ {\defconvertedargument\firstlistelement{#2}%
\@EA\dowritetolist\@EA{#1}{\firstlistelement}{#3}{\v!head}}}
\def\dobetweenlist#1#2#3#4% pas op: wordt ook elders gedefinieerd
diff --git a/Master/texmf-dist/tex/context/base/core-ltb.tex b/Master/texmf-dist/tex/context/base/core-ltb.tex
index 74ae342101d..9153073831b 100644
--- a/Master/texmf-dist/tex/context/base/core-ltb.tex
+++ b/Master/texmf-dist/tex/context/base/core-ltb.tex
@@ -69,6 +69,8 @@
\edef\??ler{\??le:r:}
\edef\??lec{\??le:c:}
\edef\??lew{\??le:w:}
+\edef\??leh{\??le:h:}
+\edef\??led{\??le:d:}
\newif\iflinetablepreroll
\newif\ifinlinetable
@@ -249,6 +251,28 @@
\dostartattributes{\??lec\number\linetablecolumn}\c!style\c!color\empty
\begstrut \ignorespaces}
+% \def\stoplinetablecell
+% {\unskip \endstrut
+% \dostopattributes
+% \ifcase\linetablemode
+% \endgraf
+% \else
+% \ifcase\alignmentswitch\else\hss\fi
+% \fi
+% \egroup
+% \hskip\linetablecparameter\c!rightoffset
+% \egroup
+% \iflinetablepreroll
+% \box\scratchbox
+% \else
+% \doif{\linetablecparameter\c!background}\v!color
+% {\backgroundline[\linetablecparameter\c!backgroundcolor]}%
+% {\box\scratchbox}%
+% \fi
+% \egroup}
+
+\newconditional\linetableautoheight \settrue\linetableautoheight
+
\def\stoplinetablecell
{\unskip \endstrut
\dostopattributes
@@ -263,12 +287,59 @@
\iflinetablepreroll
\box\scratchbox
\else
- \doif{\linetablecparameter\c!background}\v!color
- {\backgroundline[\linetablecparameter\c!backgroundcolor]}%
+ \doifelse{\linetablecparameter\c!background}\v!color
+ {\ifconditional\linetableautoheight
+ \hbox{\blackrule
+ [ \c!color=\linetablecparameter\c!backgroundcolor,
+ \c!height=\linetablerparameter{x\c!height},
+ \c!depth=\linetablerparameter{x\c!depth},
+ \c!width=\wd\scratchbox]%
+ \hskip-\wd\scratchbox\box\scratchbox}%
+ \else
+ \backgroundline[\linetablecparameter\c!backgroundcolor]{\box\scratchbox}%
+ \fi}%
{\box\scratchbox}%
\fi
\egroup}
+% \def\stoplinetablecell
+% {\unskip \endstrut
+% \dostopattributes
+% \ifcase\linetablemode
+% \endgraf
+% \else
+% \ifcase\alignmentswitch\else\hss\fi
+% \fi
+% \egroup
+% \hskip\linetablecparameter\c!rightoffset
+% \egroup
+% \iflinetablepreroll
+% \box\scratchbox
+% \else
+% \doifelse{\linetablecparameter\c!background}\v!color
+% {\ifconditional\linetableautoheight
+% % \hbox{\blackrule
+% % [ \c!color=\linetablecparameter\c!backgroundcolor,
+% % \c!height=\linetablerparameter{x\c!height},
+% % \c!depth=\linetablerparameter{x\c!depth},
+% % \c!width=\wd\scratchbox]%
+% % \hskip-\wd\scratchbox\box\scratchbox}%
+% \dp\scratchbox\linetablerparameter{x\c!depth}%
+% \ht\scratchbox\linetablerparameter{x\c!height}%
+% \framed
+% [\c!offset=\v!overlay,
+% \c!frameoffset=.5\linewidth,
+% \c!leftframe=\v!off,\c!rightframe=\v!off,
+% \c!background=\v!color,
+% \c!backgroundcolor=\linetablecparameter\c!backgroundcolor%
+% ]{\box\scratchbox}%
+% \else
+% \backgroundline[\linetablecparameter\c!backgroundcolor]{\box\scratchbox}%
+% \fi}%
+% {\box\scratchbox}%
+% \fi
+% \egroup}
+
\def\savelinetablepart
{\global\setbox\tablebox\linetablepart
\ifnum\linetablepart=\zerocount
@@ -541,15 +612,29 @@
% \setxvalue{\??lew\number\linetablecolumn}{\the\wd\linetablecell}%
% \fi}
-\def\checklinecolumnwidth
- {\expandafter\xdef\csname\??lew\number\linetablecolumn\endcsname
- {\expandafter\ifx\csname\??lew\number\linetablecolumn\endcsname\relax
- \the\wd\linetablecell
- \else\ifdim\csname\??lew\number\linetablecolumn\endcsname<\wd\linetablecell
- \the\wd\linetablecell
+% \def\checklinecolumnwidth
+% {\expandafter\xdef\csname\??lew\number\linetablecolumn\endcsname
+% {\expandafter\ifx\csname\??lew\number\linetablecolumn\endcsname\relax
+% \the\wd\linetablecell
+% \else\ifdim\csname\??lew\number\linetablecolumn\endcsname<\wd\linetablecell
+% \the\wd\linetablecell
+% \else
+% \csname\??lew\number\linetablecolumn\endcsname
+% \fi\fi}}
+
+\def\checklinecolumndimension#1#2#3%
+ {\expandafter\xdef\csname#1\number#3\endcsname
+ {\expandafter\ifx\csname#1\number#3\endcsname\relax
+ \the#2\linetablecell
+ \else\ifdim\csname#1\number#3\endcsname<#2\linetablecell
+ \the#2\linetablecell
\else
- \csname\??lew\number\linetablecolumn\endcsname
+ \csname#1\number#3\endcsname
\fi\fi}}
+
+\def\checklinecolumnwidth {\checklinecolumndimension\??lew\wd\linetablecolumn}
+\def\checklinecolumnheight{\checklinecolumndimension\??leh\ht\linetablerow}
+\def\checklinecolumndepth {\checklinecolumndimension\??led\dp\linetablerow}
\def\linetableBR
{\dosingleempty\dolinetableBR}
@@ -596,6 +681,8 @@
{\stoplinetablecell
\iflinetablepreroll
\checklinecolumnwidth
+ \checklinecolumnheight
+ \checklinecolumndepth
\fi
\checklinetablepart}
@@ -669,6 +756,12 @@
{\stoplinetablerun
\egroup
\globallet\noflinetablerows\linetablerows
+ \dorecurse\noflinetablerows % global, from last run {\linetableparameter\c!n}
+ {%\writestatus{linetable}{\recurselevel->\getvalue{\??lew\recurselevel}}%
+ \setevalue{\??ler\recurselevel x\c!height}{\getvalue{\??leh\recurselevel}}%
+ \setevalue{\??ler\recurselevel x\c!depth }{\getvalue{\??led\recurselevel}}%
+ \letgvalue{\??leh\recurselevel}\!!zeropoint
+ \letgvalue{\??led\recurselevel}\!!zeropoint}
\dorecurse\noflinetablecolumns % global, from last run {\linetableparameter\c!n}
{%\writestatus{linetable}{\recurselevel->\getvalue{\??lew\recurselevel}}%
\setevalue{\??lec\recurselevel\c!width}{\getvalue{\??lew\recurselevel}}%
diff --git a/Master/texmf-dist/tex/context/base/core-mat.tex b/Master/texmf-dist/tex/context/base/core-mat.tex
index e9319068c47..a74d5f90eda 100644
--- a/Master/texmf-dist/tex/context/base/core-mat.tex
+++ b/Master/texmf-dist/tex/context/base/core-mat.tex
@@ -3,7 +3,7 @@
%D version=2006.03.27, % 1998.12.07
%D title=\CONTEXT\ Core Macros,
%D subtitle=Math Fundamentals,
-%D author={Hans Hagen \& Taco Hoekwater},
+%D author={Hans Hagen, Taco Hoekwater \& Aditya Mahajan},
%D date=\currentdate,
%D copyright=PRAGMA]
%C
@@ -17,6 +17,18 @@
\unprotect
+% \startlines
+% $\mathopnolimits{\rm d}x$
+% $\mathopnolimits{\kern\zeropoint \rm d}x$
+% $\puremathcomm{nolop}{\rm d}x$
+% $\puremathcomm{nolop}{\kern\zeropoint\rm d}x$
+% \blank
+% $\puremathcomm{nolop}{\mr d}x$
+% $\puremathcomm{nolop}{\kern\zeropoint\mr d}x$
+% $\mathop{\kern\zeropoint\mr d}x$
+% $\mathopnolimits{\kern\zeropoint d}x$
+% \stoplines
+
% \definemessageconstant{math}
% \startmessages all library: math
@@ -50,6 +62,8 @@
\expandafter\secondoftwoarguments
\fi}
+% \defineactivecharacter _ {\mathortext{_}{\_}} text_text $a^2$
+
% force text mode, will be overloaded later
\ifx\text\undefined \let\text\hbox \fi
@@ -153,6 +167,9 @@
\def\formuladistance{\formulaparameter\c!distance}
+\def\doformulareference#1#2%
+ {\doifsomething{#1}{\doifnotinset{#1}{+,-}{\rawreference\s!for{#1}{#2}}}}
+
\def\dododoformulanumber#1#2#3#4% (#1,#2)=outer(ref,sub) (#3,#4)=inner(ref,sub)
{\hbox\bgroup
\ifconditional\handleformulanumber
@@ -162,16 +179,16 @@
\makesectionnumber[\v!formula]%
\setbox0\hbox{\ignorespaces#2\unskip}%
\ifdim\wd0>\zeropoint
- \edef\hetsubnummer{#2}%
+ \edef\hetsubnummer{\@@fnseparator#2}%AM: was \edef\hetsubnummer{#2}%
\else
\let\hetsubnummer\empty
\fi
- \doifsomething{#1}{\rawreference{\s!for}{#1}{\composedsectionnumber\hetsubnummer}}%
+ \doformulareference{#1}{\composedsectionnumber\hetsubnummer}%
\setbox0\hbox{\ignorespaces#4\unskip}%
\ifdim\wd0>\zeropoint
- \edef\hetsubnummer{#4}%
+ \edef\hetsubnummer{\@@fnseparator#4}%AM: was \edef\hetsubnummer{#4}%
\fi
- \doifsomething{#3}{\rawreference\s!for{#3}{\composedsectionnumber\hetsubnummer}}%
+ \doformulareference{#3}{\composedsectionnumber\hetsubnummer}%
\doflushformulalistentry{\composedsectionnumber\hetsubnummer}%
\rm % nodig ?
\doif{\formulaparameter\c!location}\v!right{\hskip\formuladistance}%
@@ -281,6 +298,8 @@
{\displayindent\leftdisplayskip
\advance\displayindent\leftdisplaymargin
\displaywidth\hsize
+% \setlocalhsize
+% \displaywidth\localhsize
\ifdim\hangindent>\zeropoint
\advance\displayindent\hangindent
\else
@@ -315,7 +334,8 @@
% \ifdim\lastskip>\zeropoint
% \resetlastlinewidth % else problems with in between stuff without \epar
% \fi
- \bgroup
+ \bgroup % HERE
+ \the\everybeforedisplayformula
\formulaparskip\parskip
\formulastrutdp\strutdepth
\formulastrutht\strutheight
@@ -518,9 +538,6 @@
% \placeformula {f} \startspformule \fakespacingformula \stopspformule
% \fakewords{20}{40}
-% \convertcommand\next\to\ascii \getfirstcharacter\ascii
-% \ifx\firstcharacter\letterbackslash % a \cs
-
\def\placeformula
{\settrue\incrementformulanumber
\dodoubleempty\doplaceformula}
@@ -569,7 +586,7 @@
{\incrementnumber[\v!formula]%
\makesectionnumber[\v!formula]%
\doflushformulalistentry{\composedsectionnumber}%
- \doifsomething{#1}{\rawreference\s!for{#1}\composedsectionnumber}%
+ \doformulareference{#1}\composedsectionnumber
\expanded{\setupnumber
[\v!formula*]
[\c!start={\rawnumber[\v!formula]},
@@ -605,7 +622,8 @@
\setupsubformulas
[\c!conversion=\v!character,
- \c!separator=\@@fmseparator,
+% \c!separator=\@@fmseparator,
+ \c!separator=,%AM: for compatibility with \placesubformula
\c!indentnext=\@@fmindentnext]
%D Experimental goodie:
@@ -671,6 +689,9 @@
[#1]{#3}}%
\futurelet\next\redoplaceformula#4}
+\let\startplaceformula\placeformula
+\let\stopplaceformula \relax
+
\def\startformulas#1\stopformulas % new / to be internationalized
{\bgroup
\forgetdisplayskips
@@ -1696,6 +1717,21 @@
\halign \ifcase\eqalignmode \or to \displaywidth \fi \@EA {\the\scratchtoks\crcr#2\crcr}%
\finishalignno}
+\def\dobothaligneqalignno#1%
+ {\ifmmode
+ \displ@y
+ \global\chardef\mathnumberstatus\plusone
+ \ifcase\mathraggedstatus
+ \def\finishalignno{\crcr\egroup}%
+ \else
+ % we're in a mathbox
+ \vcenter\bgroup
+ \def\finishalignno{\crcr\egroup\egroup}%
+ \fi
+ \fi
+ #1%
+ \halign \ifcase\eqalignmode \or to \displaywidth \fi \@EA \bgroup\the\scratchtoks\crcr}
+
\def\mrlap#1%
{\setbox\scratchbox\hbox{#1}%
\ifdim\wd\scratchbox>\mathnumbercorrection
@@ -1704,18 +1740,18 @@
\box\scratchbox
\global\chardef\mathnumberstatus\plustwo}
-\def\dobothaligneqalignno#1%
- {\ifmmode
- \displ@y
- \global\chardef\mathnumberstatus\plusone
- % we're in a mathbox
- \vcenter\bgroup
- \def\finishalignno{\crcr\egroup\egroup}%
- \else
- \def\finishalignno{\crcr\egroup}%
- \fi
- #1%
- \halign \ifcase\eqalignmode \or to \displaywidth \fi \@EA \bgroup\the\scratchtoks\crcr}
+% \def\dobothaligneqalignno#1%
+% {\ifmmode
+% \displ@y
+% \global\chardef\mathnumberstatus\plusone
+% we're in a mathbox
+% \vcenter\bgroup
+% \def\finishalignno{\crcr\egroup\egroup}%
+% \else
+% \def\finishalignno{\crcr\egroup}%
+% \fi
+% #1%
+% \halign \ifcase\eqalignmode \or to \displaywidth \fi \@EA \bgroup\the\scratchtoks\crcr}
\def\reqalignno {\dobotheqalignno \preparereqalignno}
\def\leqalignno {\dobotheqalignno \prepareleqalignno}
@@ -2287,7 +2323,7 @@
\tabskip\zeropoint
\eqaligncolumn\zerocount % could be \scratchcounter
\processcommacommand[\mathmatrixparameter\c!align]{\advance\eqaligncolumn\plusone\dosetmatrixcolumn}%
- \scratchcounter=\ifnum\eqaligncolumn>\scratchcounter \eqaligncolumn \else \plusone \fi
+ \scratchcounter=\ifnum\eqaligncolumn>\zerocount \eqaligncolumn \else \plusone \fi
\global\eqaligncolumn\plusone
\preparemathmatrix } % uses scratchcounter
@@ -2363,7 +2399,6 @@
%D
%D \startbuffer
%D \startformula
-%D \startformula
%D \text{Let }{\cal R} = \bigcup_{P_{X_1},P_{X_2}}
%D \left\{ (R_1, R_2) :
%D \startmatrix[distance=1em,align={left,left,right}]
@@ -2447,12 +2482,53 @@
\penalty\predisplaypenalty
\beforedisplayspace}
+% %D \macros
+% %D {substack}
+% %D
+% %D Preliminary code:
+% %D
+% %D \starttyping
+% %D \startformula
+% %D \sum_{%
+% %D \startsubstack
+% %D i = 1 \NR
+% %D i \neq n \NR
+% %D i \neq m
+% %D \stopsubstack
+% %D }a_i
+% %D \stopformula
+% %D \stoptyping
+
+% \def\startsubstack
+% {\begingroup
+% \null
+% \vcenter\bgroup
+% \pushmacro\domatrixNC
+% \let\stopmathmode\relax
+% \def\NC{\domatrixNC}%
+% \def\MC{\domatrixNC\startmathmode}%
+% \global\let\domatrixNC\dodomatrixNC
+% \def\NR
+% {\stopmathmode
+% \global\let\domatrixNC\dodomatrixNC
+% \crcr\noalign{\nointerlineskip}}%
+% \mathsurround\zeropoint
+% \everycr\emptytoks
+% \halign\bgroup\hfil$\scriptstyle\mathstrut##$\hfil\crcr}
+
+% \def\stopsubstack
+% {\crcr
+% \egroup
+% \popmacro\domatrixNC
+% \egroup
+% \endgroup}
+
%D \macros
%D {substack}
%D
%D Preliminary code:
%D
-%D \starttyping
+%D \startbuffer
%D \startformula
%D \sum_{%
%D \startsubstack
@@ -2462,31 +2538,44 @@
%D \stopsubstack
%D }a_i
%D \stopformula
-%D \stoptyping
+%D \stopbuffer
+%D
+%D \getbuffer which was typed as \typebuffer
+%D
+%D Notice that these macros give the correct spacing for
+%D subscripts. Compare for example
+%D
+%D \startbuffer
+%D \startformula
+%D \sum_{\startsubstack a \NR b \NR \stopsubstack}
+%D \text{ and }
+%D \sum_{\scriptstyle a \atop \scriptstyle}
+%D \stopformula
+%D \typebuffer which gives \getbuffer
\def\startsubstack
- {\begingroup
- \null
- \vcenter\bgroup
- \pushmacro\domatrixNC
- \let\stopmathmode\relax
- \def\NC{\domatrixNC}%
- \def\MC{\domatrixNC\startmathmode}%
- \global\let\domatrixNC\dodomatrixNC
- \def\NR
- {\stopmathmode
- \global\let\domatrixNC\dodomatrixNC
- \crcr\noalign{\nointerlineskip}}%
- \mathsurround\zeropoint
- \everycr\emptytoks
- \halign\bgroup\hfil$\scriptstyle\mathstrut##$\hfil\crcr}
+ {\begingroup
+ \vcenter\bgroup
+ \baselineskip\dimexpr\fontdimen10 \scriptfont\plustwo + \fontdimen12 \scriptfont\plustwo\relax
+ \lineskip\plusthree\fontdimen8 \scriptfont\plusthree
+ \lineskiplimit\lineskip
+ \let\stopmathmode\relax
+ \def\NC{\domatrixNC}%
+ \def\MC{\domatrixNC\startmathmode}%
+ \global\let\domatrixNC\dodomatrixNC
+ \def\NR
+ {\stopmathmode
+ \global\let\domatrixNC\dodomatrixNC
+ \crcr}%
+ \mathsurround\zeropoint
+ \everycr\emptytoks
+ \halign\bgroup\hfil$\scriptstyle##$\hfil\crcr}
\def\stopsubstack
- {\crcr
- \egroup
- \popmacro\domatrixNC
- \egroup
- \endgroup}
+ {\crcr
+ \egroup
+ \egroup
+ \endgroup}
%D \macros
%D {frac, xfrac, xxfrac}
@@ -2681,7 +2770,122 @@
\def\enablefiller {\let\normalorfiller\secondoftwoarguments}
\def\disablefiller {\let\normalorfiller\firstoftwoarguments}
-\def\mathopnolimits#1{\mathop{\rm#1}\nolimits}
+\def\mathopnolimits#1{\mathop{\mr#1}\nolimits} % was \rm, which follows text fonts (used in mml parser)
+\def\mathopdolimits#1{\mathop{\mr#1}} % was \rm, which follows text fonts (used in mml parser)
+
+%D \macros{overset, underset}
+%D
+%D The macros \type{\overset} and \type{\underset} are provided by
+%D \AMS\ packages in \LATEX. These macro allows you to place a symbol
+%D above or below another symbol, irrespective of whether the other
+%D symbol is a relation or something else, and without influencing the
+%D spacing. For most cases there is a better way to do such things
+%D (declaring a math command with limop option, or using accents), but
+%D occasionally these macros can be useful, for example:
+%D
+%D \startbuffer
+%D \startformula
+%D \overset{*}{X} \underset{*}{X}
+%D \stopformula
+%D \stopbuffer
+%D \typebuffer \getbuffer
+%D
+%D Use these macros sparingly. Remember, \TEX\ was designed for
+%D mathematics, so there is usually a proper method for typesetting
+%D common math notation.
+
+%D These macros are a clearer version of \type{\binrel@} and
+%D \type{\binrel@@} macros in \AMSTEX\ packages.
+
+\def\preparebinrel#1%
+ {\begingroup
+ \setbox\scratchbox\hbox
+ {\thinmuskip 0mu
+ \medmuskip -1mu
+ \thickmuskip -1mu
+ \setbox\scratchbox\hbox{$#1\mathsurround\zeropoint$}%
+ \kern-\wd\scratchbox
+ ${}#1{}\mathsurround\zeropoint$}%
+ \expanded
+ {\endgroup
+ \let\noexpand\currentbinrel
+ \ifdim\wd\scratchbox<\zeropoint
+ \mathbin
+ \else\ifdim\wd\scratchbox>\zeropoint
+ \mathrel
+ \else
+ \relax
+ \fi\fi}}
+
+\unexpanded\def\overset#1#2%
+ {\preparebinrel{#2}%
+ \currentbinrel{\mathop{\kern\zeropoint#2}\limits^{#1}}}
+
+\unexpanded\def\underset#1#2%
+ {\preparebinrel{#2}%
+ \currentbinrel{\mathop{\kern\zeropoint#2}\limits_{#1}}}
+
+%D \macros
+%D {boldsymbol}
+%D
+%D The math definition is inspired by amsmath.
+%D
+%D \startbuffer
+%D \definetypeface [boldmath] [mm] [boldmath] [latin-modern] [modern] [encoding=texnansi]
+%D
+%D $a \times b$ $a \boldsymbol{\times} b$
+%D \stopbuffer
+%D
+%D \typebuffer \start \getbuffer \stop
+
+\def\mathboldsymbol#1%
+ {\preparebinrel{#1}%
+ \currentbinrel{\mathchoice
+ {\hbox{\switchtoformulabodyfont [boldmath]$\m@th#1$}}
+ {\hbox{\switchtoformulabodyfont [boldmath]$\m@th#1$}}
+ {\hbox{\switchtoformulabodyfont [boldmath,script]$\m@th#1$}}
+ {\hbox{\switchtoformulabodyfont[boldmath,scriptscript]$\m@th#1$}}}}
+
+\def\boldsymbol
+ {\mathortext\mathboldsymbol\bold}
+
+%D Some encoding hackery (for Mojca. who else):
+%D
+%D \starttyping
+%D \startmathcollection[eul:texnansi]
+%D \definemathsymbol [breve] [accent] [tf] ["15]
+%D \stopmathcollection
+%D \startmathcollection[eul:ec]
+%D \definemathsymbol [breve] [accent] [tf] ["08]
+%D \stopmathcollection
+%D
+%D $\breve e$
+%D \stoptyping
+
+\let\outerencoding\empty
+
+\def\checkoutermathencoding
+ {\ifx\outerencoding\empty
+ \ifx\outerencoding\s!default\else
+ \edef\outerencoding{\currentencoding}%
+ \fi
+ \fi}
+
+\prependtoks
+ \checkoutermathencoding
+\to \everymathematics
+
+%D More. (A temp hack, else no proper default fall back (like \type
+%D {\textmultiply}); todo: sync encoding.
+
+\def\dealwithmathtextencoding
+ {\expanded{\everyhbox{\the\everyhbox\noexpand\fastenableencoding{\currentencoding}}}%
+ \def\dealwithmathtextencoding{\let\characterencoding\nocharacterencoding}%
+ \dealwithmathtextencoding}
+
+\appendtoks
+ \dealwithmathtextencoding
+\to \everymathematics
%D How negative such a symbol looks is demonstrated in:
%D $\negative 10^{\negative 10^{\negative 10}}$.
diff --git a/Master/texmf-dist/tex/context/base/core-mis.tex b/Master/texmf-dist/tex/context/base/core-mis.tex
index 5cec47f647b..d094792ef3e 100644
--- a/Master/texmf-dist/tex/context/base/core-mis.tex
+++ b/Master/texmf-dist/tex/context/base/core-mis.tex
@@ -1079,35 +1079,37 @@
{\dosingleempty\dostartdelimitedtextpar}\dostartdelimitedtexttxt}}
\def\dostartdelimitedtextpar[#1]%
- {\let\dostopdelimitedtext\dostopdelimitedtextpar
- \doifsomething{\delimitedtextparameter\c!spacebefore}
- {\blank[\delimitedtextparameter\c!spacebefore]}%
- \delimitedtextparameter\c!before
- % nicer:
- % \doadaptleftskip {\delimitedtextparameter\c!leftmargin}%
- % \doadaptrightskip{\delimitedtextparameter\c!rightmargin}%
- % backward compatible:
- \doifelsenothing{#1}
- {\endgraf
- \doadaptleftskip {\delimitedtextparameter\c!leftmargin}%
- \doadaptrightskip{\delimitedtextparameter\c!rightmargin}%
- \let\dodostopdelimitedtextpar\endgraf}
- {\startnarrower[#1]\let\dodostopdelimitedtextpar\stopnarrower}%
- % so far
- \dochecknextindentation{\??ci\currentdelimitedtext}%
- \dostartattributes{\??ci\currentdelimitedtext}\c!style\c!color\empty
- \leftdelimitedtextmark
- \ignorespaces}
+ {\let\dostopdelimitedtext\dostopdelimitedtextpar
+ \doifsomething{\delimitedtextparameter\c!spacebefore}
+ {\blank[\delimitedtextparameter\c!spacebefore]}%
+ \delimitedtextparameter\c!before
+ % nicer:
+ % \doadaptleftskip {\delimitedtextparameter\c!leftmargin}%
+ % \doadaptrightskip{\delimitedtextparameter\c!rightmargin}%
+ % backward compatible:
+ \doifelsenothing{#1}
+ {\endgraf
+ \doadaptleftskip {\delimitedtextparameter\c!leftmargin}%
+ \doadaptrightskip{\delimitedtextparameter\c!rightmargin}%
+ \let\dodostopdelimitedtextpar\endgraf}
+ {\startnarrower[#1]\let\dodostopdelimitedtextpar\stopnarrower}%
+ % so far
+ % \dochecknextindentation{\??ci\currentdelimitedtext}% AM: not here
+ \dostartattributes{\??ci\currentdelimitedtext}\c!style\c!color\empty
+ \leftdelimitedtextmark
+ \ignorespaces}
\def\dostopdelimitedtextpar
- {\removeunwantedspaces
- \removelastskip
- \rightdelimitedtextmark
- \dostopattributes
- \dodostopdelimitedtextpar
- \delimitedtextparameter\c!after
- \doifsomething{\delimitedtextparameter\c!spaceafter}
- {\blank[\delimitedtextparameter\c!spaceafter]}}
+ {\removeunwantedspaces
+ \removelastskip
+ \rightdelimitedtextmark
+ \dostopattributes
+ \dodostopdelimitedtextpar
+ \delimitedtextparameter\c!after
+ \doifsomething{\delimitedtextparameter\c!spaceafter}
+ {\blank[\delimitedtextparameter\c!spaceafter]}%
+ \dochecknextindentation{\??ci\currentdelimitedtext}% AM: here
+ \dorechecknextindentation}% AM: This was missing!
% \def\dostartdelimitedtexttxt
% {\let\dostopdelimitedtext\dostopdelimitedtexttxt
@@ -1334,6 +1336,14 @@
\c!right={\symbol[\c!rightquote]}]
\definedelimitedtext
+ [\v!blockquote][\v!quotation]
+
+\setupdelimitedtext
+ [\v!blockquote]
+ [\c!left=,
+ \c!right=]
+
+\definedelimitedtext
[\v!speech][\v!quotation]
\setupdelimitedtext
@@ -2343,6 +2353,7 @@
%D \macros
%D {startfloatcombination}
%D
+%D \setupexternalfigures[directory={../sample}]
%D \startbuffer
%D \placefigure
%D [left,none]
@@ -2602,7 +2613,7 @@
\def\dorotatenextbox#1#2%
{\doifsomething{#1}
- {\edef\@@rorotation{\number#1}% get rid of leading zeros and spaces
+ {\edef\@@rorotation{\realnumber{#1}}% get rid of leading zeros and spaces
\setbox\nextbox\vbox{\flushnextbox}% not really needed
\dodorotatenextbox\@@rorotation#2}%
\hbox{\boxcursor\flushnextbox}}
@@ -2623,17 +2634,34 @@
\unexpanded\def\rotate % \bgroup: \rotate kan argument zijn
{\bgroup\complexorsimpleempty\rotate}
+% \def\complexrotate[#1]% framed met diepte !
+% {\getparameters[\??ro][#1]%
+% \processaction
+% [\@@rolocation]
+% [ \v!depth=>\!!counta\plusthree\donefalse,% depth fit - raw box
+% \v!fit=>\!!counta\plustwo \donefalse,% depth tight - raw box
+% \v!broad=>\!!counta\plusone \donefalse,% nodepth fit - raw box
+% \v!high=>\!!counta\plusone \donetrue ,% nodepth fit - framed
+% \v!middle=>\!!counta\plusfour \donefalse,% centered, keep dimensions
+% \s!default=>\!!counta\plusthree\donetrue ,% depth fit - framed
+% \s!unknown=>\!!counta\plusthree\donetrue ]% depth fit - framed
+% \ifdone
+% \def\docommand{\localframed[\??ro][#1,\c!location=]}%
+% \else
+% \let\docommand\relax
+% \fi
+% \dowithnextbox{\dorotatenextbox\@@rorotation\!!counta\egroup}\vbox\docommand}
+
+\setvalue{\??ro::\c!location::\v!depth }{\!!counta\plusthree\donefalse} % depth fit - raw box
+\setvalue{\??ro::\c!location::\v!fit }{\!!counta\plustwo \donefalse} % depth tight - raw box
+\setvalue{\??ro::\c!location::\v!broad }{\!!counta\plusone \donefalse} % nodepth fit - raw box
+\setvalue{\??ro::\c!location::\v!high }{\!!counta\plusone \donetrue } % nodepth fit - framed
+\setvalue{\??ro::\c!location::\v!middle }{\!!counta\plusfour \donefalse} % centered, keep dimensions
+\setvalue{\??ro::\c!location::\v!default}{\!!counta\plusthree\donetrue } % depth fit - framed
+
\def\complexrotate[#1]% framed met diepte !
{\getparameters[\??ro][#1]%
- \processaction
- [\@@rolocation]
- [ \v!depth=>\!!counta\plusthree\donefalse,% depth fit - raw box
- \v!fit=>\!!counta\plustwo \donefalse,% depth tight - raw box
- \v!broad=>\!!counta\plusone \donefalse,% nodepth fit - raw box
- \v!high=>\!!counta\plusone \donetrue ,% nodepth fit - framed
- \v!middle=>\!!counta\plusfour \donefalse,% centered, keep dimensions
- \s!default=>\!!counta\plusthree\donetrue ,% depth fit - framed
- \s!unknown=>\!!counta\plusthree\donetrue ]% depth fit - framed
+ \executeifdefined{\??ro::\c!location::\@@rolocation}{\!!counta\plusthree\donetrue}%
\ifdone
\def\docommand{\localframed[\??ro][#1,\c!location=]}%
\else
@@ -2790,12 +2818,33 @@
%D \commalistsentence[aap,noot,mies]
%D \commalistsentence[aap,noot]
%D \commalistsentence[aap]
+%D \commalistsentence[a,b,c]
+%D \commalistsentence[a,b,c][{ \& },{ and }]
+%D \commalistsentence[a,b,c][+,-]
%D \stoptyping
\let\handlecommalistsentence\firstofoneargument
-\def\commalistsentence[#1]%
+\def\commalistsentenceone{and-1}
+\def\commalistsentencetwo{and-2}
+
+\def\commalistsentence
+ {\dodoubleempty\docommalistsentence}
+
+\def\docommalistsentence[#1][#2]%
{\bgroup
+ \getfromcommalist[#2][1]%
+ \ifx\commalistelement\empty
+ \def\@@commalistsentenceone{\labeltext\commalistsentenceone}%
+ \else
+ \let\@@commalistsentenceone\commalistelement
+ \fi
+ \getfromcommalist[#2][2]%
+ \ifx\commalistelement\empty
+ \def\@@commalistsentencetwo{\labeltext\commalistsentencetwo}%
+ \else
+ \let\@@commalistsentencetwo\commalistelement
+ \fi
\getcommalistsize[#1]%
\ifcase\commalistsize\relax
\def\serializedcommalist{#1}%
@@ -2808,9 +2857,9 @@
\scratchtoks{\handlecommalistsentence{##1}}%
\else
\ifnum\scratchcounter=\commalistsize
- \appendtoks\labeltext{and-2}\handlecommalistsentence{##1}\to\scratchtoks
+ \appendtoks\@@commalistsentencetwo\handlecommalistsentence{##1}\to\scratchtoks
\else
- \appendtoks\labeltext{and-1}\handlecommalistsentence{##1}\to\scratchtoks
+ \appendtoks\@@commalistsentenceone\handlecommalistsentence{##1}\to\scratchtoks
\fi
\fi}%
\processcommacommand[#1]\docommand
@@ -2819,6 +2868,8 @@
\serializedcommalist
\egroup}
+\def\commacommandsentence[#1]{\@EA\commalistsentence\@EA[#1]}
+
\ifx\textcomma\undefined \def\textcomma{,} \fi
\setuplabeltext [\s!nl] [and-1=\textcomma\ , and-2= en ]
@@ -2826,7 +2877,7 @@
\setuplabeltext [\s!de] [and-1=\textcomma\ , and-2= und ]
%D \macros
-%D {\somekindoftab}
+%D {somekindoftab}
%D
%D This macro can be used to create tabs:
%D
diff --git a/Master/texmf-dist/tex/context/base/core-nav.tex b/Master/texmf-dist/tex/context/base/core-nav.tex
index 2457d735c8a..045a05123e0 100644
--- a/Master/texmf-dist/tex/context/base/core-nav.tex
+++ b/Master/texmf-dist/tex/context/base/core-nav.tex
@@ -250,7 +250,7 @@
%D situations where the typeface is handled by the calling
%D macro.
-\def\interactioncolor
+\def\interactioncolor % todo \??ia as argument
{\iflocation
\ifrealreferencepage
\@@iacontrastcolor
diff --git a/Master/texmf-dist/tex/context/base/core-new.tex b/Master/texmf-dist/tex/context/base/core-new.tex
index 35dfe48509f..b9b3ee43a5a 100644
--- a/Master/texmf-dist/tex/context/base/core-new.tex
+++ b/Master/texmf-dist/tex/context/base/core-new.tex
@@ -15,10 +15,6 @@
\unprotect
-% todo : \startsetups[name][XML] \setups[name][XML]
-
-% todo: \doglobal
-
\let\startsetups\relax % to please dep checker
\let\stopsetups \relax % to please dep checker
@@ -33,22 +29,57 @@
\unexpanded \def\setups{\doifnextcharelse\bgroup\dosetupsA\dosetupsB} % {..} or [..]
\unexpanded \def\setup {\doifnextcharelse\bgroup\dosetups \dosetupsC} % {..} or [..]
-% \def\dosetupsA #1{\processcommacommand[#1]\dosetups} % {..}
-% \def\dosetupsB[#1]{\processcommacommand[#1]\dosetups} % [..]
-% \def\dosetupsC[#1]{\dosetups{#1}} % [..]
-%
-% better:
-
\def\dosetupsA #1{\cleanuplabel{#1}\processcommacommand[\cleanlabel]\dosetups} % {..}
\def\dosetupsB[#1]{\cleanuplabel{#1}\processcommacommand[\cleanlabel]\dosetups} % [..]
\def\dosetupsC[#1]{\cleanuplabel{#1}\dosetups\cleanlabel} % [..]
% \def\dosetups#1% the grid option will be extended to other main modes
-% {\executeifdefined{\??su\ifgridsnapping\v!grid\fi:#1}{\csname\??su:#1\endcsname}\empty}
+% {\executeifdefined{\??su\ifgridsnapping\v!grid\fi:#1}
+% {\executeifdefined{\??su :#1}\gobbleoneargument}\empty} % takes one argument
+%
+% \def\setupwithargument#1% the grid option will be extended to other main modes
+% {\executeifdefined{\??su:#1}\gobbleoneargument}
+
+% better:
+
+% \def\dosetups#1% the grid option will be extended to other main modes
+% {\executeifdefined{\??su\ifgridsnapping\v!grid\fi:#1}
+% {\executeifdefined{\??su :#1}\gobbleoneargument}\empty} % takes one argument
+%
+% \def\setupwithargument#1% the grid option will be extended to other main modes
+% {\executeifdefined{\??su:#1}\gobbleoneargument}
+
+% faster:
+
+\letvalue{\??su:\letterpercent}\gobbleoneargument
\def\dosetups#1% the grid option will be extended to other main modes
- {\executeifdefined{\??su\ifgridsnapping\v!grid\fi:#1}
- {\executeifdefined{\??su :#1}\empty}}
+ {\csname\??su
+ \ifgridsnapping
+ \ifcsname\??su\v!grid:#1\endcsname\v!grid:#1\else\ifcsname\??su:#1\endcsname:#1\else:\letterpercent\fi\fi
+ \else
+ \ifcsname\??su:#1\endcsname:#1\else:\letterpercent\fi
+ \fi
+ \endcsname\empty} % takes one argument
+
+\def\setupwithargument#1% the grid option will be extended to other main modes
+ {\csname\??su:\ifcsname\??su:#1\endcsname#1\else\letterpercent\fi\endcsname}
+
+\let\directsetup\dosetups
+
+% somehow fails ...
+%
+% \letvalue{\??su:..}\gobbleoneargument
+%
+% \def\dosetups#1% the grid option will be extended to other main modes
+% {\csname \??su
+% \ifcsname\??su\ifgridsnapping\v!grid\fi:#1\endcsname\v!grid:#1\else
+% \ifcsname\??su :#1\endcsname :#1\else
+% :..\fi\fi
+% \endcsname\empty} % takes one argument
+%
+% \def\setupwithargument#1% the grid option will be extended to other main modes
+% {\csname\??su:\ifcsname\??su:#1\endcsname#1\else..\fi\endcsname}
\let\directsetup\dosetups
@@ -60,16 +91,17 @@
\def\startsetups {\xxstartsetups\plusone \stopsetups } \let\stopsetups \relax
\def\startlocalsetups{\xxstartsetups\plusone \stoplocalsetups} \let\stoplocalsetups\relax
\def\startrawsetups {\xxstartsetups\zerocount\stoprawsetups } \let\stoprawsetups \relax
+\def\startxmlsetups {\xxstartsetups\plustwo \stopxmlsetups } \let\stopxmlsetups \relax
\def\xxstartsetups#1#2%
{\begingroup\chardef\setupseolmode#1\doifnextcharelse[{\startsetupsA#2}{\startsetupsB#2}}
\def\startsetupsA#1% [ ] delimited
- {\ifcase\setupseolmode\or\catcode`\^^M\@@ignore\fi
+ {\ifcase\setupseolmode\or\catcode`\^^M\@@ignore\or\catcode`\^^M\@@ignore\catcode`\|\@@other\fi
\dotripleempty\dostartsetups[#1]}
\def\startsetupsB#1#2 % space delimited
- {\ifcase\setupseolmode\or\catcode`\^^M\@@ignore\fi
+ {\ifcase\setupseolmode\or\catcode`\^^M\@@ignore\or\catcode`\^^M\@@ignore\catcode`\|\@@other\fi
\dodostartsetups#1\empty{#2}}
\def\startsetupsC[#1][#2][#3]{\dodostartsetups#1{#2}{#3}} % [..] [..]
@@ -83,8 +115,12 @@
%
% better:
-\long\def\dodostartsetups#1#2#3% watch out: not \grabuntil
- {\cleanuplabel{\??su#2:#3}\dograbuntil#1{\endgroup\dodoglobal\long\setvalue\cleanlabel}} % \doglobal
+% \long\def\dodostartsetups#1#2#3% watch out: not \grabuntil
+% {\cleanuplabel{\??su#2:#3}\dograbuntil#1{\endgroup\dodoglobal\long\setvalue\cleanlabel}} % \doglobal
+
+\long\def\dodostartsetups#1#2#3%
+ {\cleanuplabel{\??su#2:#3}%
+ \long\def\dododostartsetups##1#1{\endgroup\dodoglobal\long\setvalue\cleanlabel####1{##1}}\dododostartsetups}
\def\systemsetupsprefix{*}
diff --git a/Master/texmf-dist/tex/context/base/core-not.tex b/Master/texmf-dist/tex/context/base/core-not.tex
index c013dba40bb..b74ba9403c6 100644
--- a/Master/texmf-dist/tex/context/base/core-not.tex
+++ b/Master/texmf-dist/tex/context/base/core-not.tex
@@ -570,9 +570,9 @@
\def\domovednote#1#2%
{\ifconditional\pagewisenotes
- \doifreferencefoundelse{\s!fnt:t:\internalfootreference}
+ \doifreferencefoundelse{\s!fnt:t:\number\internalnotereference}
{\let\savedrealreference\currentrealreference
- \doifreferencefoundelse{\s!fnt:f:\internalfootreference}
+ \doifreferencefoundelse{\s!fnt:f:\number\internalnotereference}
{\ifnum\savedrealreference<\currentrealreference\relax\symbol[#1]\else
\ifnum\savedrealreference>\currentrealreference\relax\symbol[#2]\fi\fi}
\donothing}
@@ -599,7 +599,7 @@
\long\def\nododonote#1#2%
{\doifnot{#1}{-}
{\ifconditional\pagewisenotes
- \doifreferencefoundelse{\s!fnt:t:\internalfootreference}
+ \doifreferencefoundelse{\s!fnt:t:\number\internalnotereference}
{\ifnum\currentrealreference>\lastnotepage\relax
\globallet\lastnotepage\currentrealreference
\resetnumber[\currentnote]%
@@ -613,14 +613,14 @@
\decrementnumber[\currentnote]}}
\def\dododonote#1%
- {\doglobal\increment\internalfootreference
+ {\global\advance\internalnotereference\plusone
\doifelse{\noteparameter\c!way}{\v!by\v!page}
{\settrue\pagewisenotes}
{\setfalse\pagewisenotes}%
\doifelse{#1}{-}
{\let\lastnotenumber\empty}
{\ifconditional\pagewisenotes
- \doifreferencefoundelse{\s!fnt:t:\internalfootreference}
+ \doifreferencefoundelse{\s!fnt:t:\number\internalnotereference}
{\ifnum\currentrealreference>\lastnotepage\relax
\globallet\lastnotepage\currentrealreference
\resetnumber[\currentnote]%
@@ -661,7 +661,7 @@
%D mainly because endnotes had to be supported.} that is,
%D automatically (vise versa) and by user supplied reference.
-\newcounter\internalfootreference
+\newcount\internalnotereference
\let\startpushnote=\relax
\let\stoppushnote =\relax
@@ -674,14 +674,15 @@
\newconditional\processingnote
\def\footnotereferencefrom
- {\rawreference\s!fnt{\s!fnt:f:\internalfootreference}{}}
+ {\rawreference\s!fnt{\s!fnt:f:\number\internalnotereference}{}}
\def\footnotereferenceto
{\global\advance\crossreferencenumber\minusone\relax % else problem, needs further testing
- \rawreference\s!fnt{\s!fnt:t:\internalfootreference}{}}
+ \rawreference\s!fnt{\s!fnt:t:\number\internalnotereference}{}}
\def\dostartnote% nog gobble als in pagebody
- {\bgroup
+ {\pushsomestates
+ \bgroup
\settrue\processingnote
%\restorecatcodes % to be tested first
\iftypesettinglines % otherwise problems with \type <crlf> {xxx}
@@ -714,7 +715,7 @@
{\preparednumber\domovednote\v!nextpage\v!previouspage}}%
{\gotobox{\noteparameter\c!command % was \c!numbercommand, but compatible
{\preparednumber\domovednote\v!nextpage\v!previouspage}}%
- [\s!fnt:f:\internalfootreference]}%
+ [\s!fnt:f:\number\internalnotereference]}%
\fi
\doifelse{\noteparameter\c!interaction}\v!no
{\ifconditional\pagewisenotes
@@ -732,7 +733,8 @@
\stoppushnote
\egroup
\stoplocalnoteinsert
- \kern\notesignal\relax} % \relax is needed to honor spaces
+ \kern\notesignal\relax % \relax is needed to honor spaces
+ \popsomestates}
\def\dolastnotesymbol
{\removeunwantedspaces
@@ -748,7 +750,7 @@
\fi}
{\gotobox
{\dodonotesymbol{\lastnotenumber\domovednote\v!previouspage\v!nextpage}}%
- [\s!fnt:t:\internalfootreference]%
+ [\s!fnt:t:\number\internalnotereference]%
\footnotereferencefrom}%
\globallet\lastnotesymbol\relax}
@@ -828,6 +830,10 @@
\def\placenoteinserts
{\processnotes\doplacenoteinserts}
+% testcase for split bottom alignment see (a) below
+%
+% \dorecurse{6}{\input tufte\footnote{\input ward \input tufte \relax}}
+
\def\doplacenoteinserts
{%\ifvoid\currentnoteins \else % unsafe, strange
\relax\ifdim\ht\currentnoteins>\zeropoint\relax
@@ -843,11 +849,15 @@
% % this should be checked, smells like a mix-up
% % does not split: \ifcase\noteparameter\c!n\unvbox\else\box\fi\currentnoteins
\ifcase\noteparameter\c!n\relax
- \unvbox\currentnoteins
+\iftrialtypesetting\unvcopy\else\unvbox\fi\currentnoteins
+% \unvbox\currentnoteins
\or
- \box\currentnoteins
+\iftrialtypesetting\copy\else\box\fi\currentnoteins
+% \box\currentnoteins
+ \obeydepth % (a) added , since split footnotes will not align properly
\else
- \unvbox\currentnoteins
+\iftrialtypesetting\unvcopy\else\unvbox\fi\currentnoteins
+% \unvbox\currentnoteins
\fi
% this is too ugly actually
\stoppopnotes}%
@@ -1182,7 +1192,6 @@
\newdimen\totalnoteheight
-
\def\doaddtototalnoteheight#1%
{\ifdim\ht#1>\zeropoint
\advance\totalnoteheight\ht #1%
diff --git a/Master/texmf-dist/tex/context/base/core-ntb.tex b/Master/texmf-dist/tex/context/base/core-ntb.tex
index 78156264470..63e4bea1066 100644
--- a/Master/texmf-dist/tex/context/base/core-ntb.tex
+++ b/Master/texmf-dist/tex/context/base/core-ntb.tex
@@ -12,7 +12,14 @@
%C details.
%D This is an unfinished, preliminary module. At least two
-%D runs are needed to get the table fixed.
+%D runs are needed to get the table fixed. Ugly code.
+
+% todo: special parsetb for argless variant
+% todo: protect \tbl...
+% todo: tblnx also count
+% todo: get rid of recurse
+% todo: fast if
+% todo: avoid halign (just do it manual) and thereby globals
% optie=rek beschrijven
@@ -23,6 +30,19 @@
%D optimizations were rejected in order not to complicate this
%D module too much (and in order to prevail extensibility).
+% \starttext
+% \placefigure[left]{}{}
+% \startlinecorrection \dontleavehmode \bTABLE
+% \bTR \bTD oeps \eTD \eTR
+% \eTABLE
+% \stoplinecorrection
+% \placefigure[right]{}{}
+% \startlinecorrection \dontleavehmode \bTABLE
+% \bTR \bTD oeps \eTD \eTR
+% \eTABLE
+% \stoplinecorrection
+% \stoptext
+
%D To Do:
%D
%D \starttyping
@@ -105,7 +125,7 @@
\fi
\fi}
-\newcounter\currenttbl
+\newcount\currenttbl
\def\@@tbl{tbl} \def\tblcell{1} \def\tblnone{2}
@@ -115,55 +135,84 @@
% \let as well as \expandafter\edef's
-\def\settbltag#1#2#3{\setevalue{\@@tblprefix#1:#2:s}{#3}} % \number#3
-\def\settblcol#1#2#3{\setevalue{\@@tblprefix#1:#2:c}{#3}}
-\def\settblrow#1#2#3{\setevalue{\@@tblprefix#1:#2:r}{#3}}
+\newcounter\TBLlevel
-\def\settblwd #1#2#3{\setxvalue{\@@tblprefix#1:#2:wd}{#3}} % global !
-\def\settblht #1#2#3{\setxvalue{\@@tblprefix#1:#2:ht}{#3}} % global !
+\def\@@tblprefix{\@@tbl:\ifnum\TBLlevel>1 :\TBLlevel:\fi}
-\def\gettbltag#1#2{\csname\@@tblprefix#1:#2:s\endcsname}
-\def\gettblcol#1#2{\csname\@@tblprefix#1:#2:c\endcsname}
-\def\gettblrow#1#2{\csname\@@tblprefix#1:#2:r\endcsname}
+% \def\tblsetprefix % not yet used, figure out when .. may interfere with setup
+% {\edef\@@tblprefix{\@@tbl:\ifnum\TBLlevel>1 :\TBLlevel:\fi}}
-\def\gettblwd #1#2{\csname\@@tblprefix#1:#2:wd\endcsname}
-\def\gettblht #1#2{\csname\@@tblprefix#1:#2:ht\endcsname}
+\def\settblnob#1{\expandafter\let\csname\@@tblprefix\number#1:b\endcsname\plusone}
+\def\gettblnob#1{\ifcsname\@@tblprefix\number#1:b\endcsname\plusone\else\zerocount\fi}
-\def\settblwid#1#2{\setxvalue{\@@tblprefix#1:w}{#2}} % global !
-\def\settblhei#1#2{\setxvalue{\@@tblprefix#1:h}{#2}} % global !
-\def\settbldis#1#2{\setxvalue{\@@tblprefix#1:d}{#2}} % global !
-\def\settblaut#1#2{\setxvalue{\@@tblprefix#1:a}{#2}} % global !
+\def\settbltag#1#2{\expandafter\edef\csname\@@tblprefix\number#1:\number#2:s\endcsname}
+\def\settblcol#1#2{\expandafter\edef\csname\@@tblprefix\number#1:\number#2:c\endcsname}
+\def\settblrow#1#2{\expandafter\edef\csname\@@tblprefix\number#1:\number#2:r\endcsname}
-\def\gettblwid#1{\executeifdefined{\@@tblprefix#1:w}\zeropoint}
-\def\gettblhei#1{\executeifdefined{\@@tblprefix#1:h}\zeropoint}
-\def\gettbldis#1{\executeifdefined{\@@tblprefix#1:d}\zeropoint}
-\def\gettblaut#1{\csname\@@tblprefix#1:a\endcsname}
+\def\lettbltag#1#2{\expandafter\let\csname\@@tblprefix\number#1:\number#2:s\endcsname}
+\def\lettblcol#1#2{\expandafter\let\csname\@@tblprefix\number#1:\number#2:c\endcsname}
+\def\lettblrow#1#2{\expandafter\let\csname\@@tblprefix\number#1:\number#2:r\endcsname}
-\def\doiftbltag #1#2{\doifdefined {\@@tblprefix#1:#2:s}}
-\def\doifnottbltag #1#2{\doifundefined {\@@tblprefix#1:#2:s}}
-\def\doifelsetbltag#1#2{\doifdefinedelse{\@@tblprefix#1:#2:s}}
-\def\doiftblrow #1#2{\doifdefined {\@@tblprefix#1:#2:r}}
-\def\doiftblcol #1#2{\doifdefined {\@@tblprefix#1:#2:c}}
-\def\doifnottblcol #1#2{\doifundefined {\@@tblprefix#1:#2:c}}
+\def\settblwd#1#2{\expandafter\xdef\csname\@@tblprefix\number#1:\number#2:wd\endcsname} % global !
+\def\settblht#1#2{\expandafter\xdef\csname\@@tblprefix\number#1:\number#2:ht\endcsname} % global !
+\def\lettblwd#1#2{\global\expandafter\let\csname\@@tblprefix\number#1:\number#2:wd\endcsname} % global !
+\def\lettblht#1#2{\global\expandafter\let\csname\@@tblprefix\number#1:\number#2:ht\endcsname} % global !
-% \def\settblspn#1#2{\setvalue {\@@tblprefix#1:s}{#2}}
-% \def\doiftblspn #1{\doifelsevalue{\@@tblprefix#1:s}{1}}
+\def\gettbltag#1#2{\csname\@@tblprefix\number#1:\number#2:s\endcsname}
+\def\gettblcol#1#2{\csname\@@tblprefix\number#1:\number#2:c\endcsname}
+\def\gettblrow#1#2{\csname\@@tblprefix\number#1:\number#2:r\endcsname}
-\def\settblspn #1{\setvalue {\@@tblprefix#1:s}{1}}
-\def\doifelsetblspn#1{\doifelsevalue{\@@tblprefix#1:s}{1}}
+\def\gettblwd #1#2{\csname\@@tblprefix\number#1:\number#2:wd\endcsname}
+\def\gettblht #1#2{\csname\@@tblprefix\number#1:\number#2:ht\endcsname}
-\def\settbltxt#1#2{\long\setvalue{\@@tblprefix:#1:#2:t}}
-\def\gettbltxt#1#2{\csname\@@tblprefix:#1:#2:t\endcsname}
+\def\settblwid#1{\expandafter\xdef\csname\@@tblprefix\number#1:w\endcsname} % {#2} global !
+\def\settblhei#1{\expandafter\xdef\csname\@@tblprefix\number#1:h\endcsname} % {#2} global !
+\def\settbldis#1{\expandafter\xdef\csname\@@tblprefix\number#1:d\endcsname} % {#2} global !
+\def\settblaut#1{\expandafter\xdef\csname\@@tblprefix\number#1:a\endcsname} % {#2} global !
-%\def\doiftbl #1#2#3{\ifcase0\getvalue{\@@tblprefix#1:#2:s}\relax \else#3\fi}
-%\def\doifnottbl #1#2#3{\ifcase0\getvalue{\@@tblprefix#1:#2:s}\relax #3\fi}
-%\def\doifelsetbl#1#2#3#4{\ifcase0\getvalue{\@@tblprefix#1:#2:s}\relax#4\else#3\fi}
-%
-%\let\doiftbltag \doiftbl
-%\let\doifnottbltag \doifnottbl
-%\let\doifelsetbltag\doifelsetbl
+\def\lettblwid#1{\global\expandafter\let\csname\@@tblprefix\number#1:w\endcsname} % {#2} global !
+\def\lettblhei#1{\global\expandafter\let\csname\@@tblprefix\number#1:h\endcsname} % {#2} global !
+\def\lettbldis#1{\global\expandafter\let\csname\@@tblprefix\number#1:d\endcsname} % {#2} global !
+\def\lettblaut#1{\global\expandafter\let\csname\@@tblprefix\number#1:a\endcsname} % {#2} global !
+
+\def\gettblwid#1{\ifcsname\@@tblprefix\number#1:w\endcsname\csname\@@tblprefix\number#1:w\endcsname\else\zeropoint\fi}
+\def\gettblhei#1{\ifcsname\@@tblprefix\number#1:h\endcsname\csname\@@tblprefix\number#1:h\endcsname\else\zeropoint\fi}
+\def\gettbldis#1{\ifcsname\@@tblprefix\number#1:d\endcsname\csname\@@tblprefix\number#1:d\endcsname\else\zeropoint\fi}
+\def\gettblaut#1{\csname \@@tblprefix\number#1:a\endcsname}
+
+\def\doiftbltag #1#2{\ifcsname\@@tblprefix\number#1:\number#2:s\endcsname\@EA\firstofoneargument \else\@EA\gobbleoneargument \fi}
+\def\doifnottbltag #1#2{\ifcsname\@@tblprefix\number#1:\number#2:s\endcsname\@EA\gobbleoneargument \else\@EA\firstofoneargument \fi}
+\def\doifelsetbltag#1#2{\ifcsname\@@tblprefix\number#1:\number#2:s\endcsname\@EA\firstoftwoarguments\else\@EA\secondoftwoarguments\fi}
+\def\doiftblrow #1#2{\ifcsname\@@tblprefix\number#1:\number#2:r\endcsname\@EA\firstofoneargument \else\@EA\gobbleoneargument \fi}
+\def\doiftblcol #1#2{\ifcsname\@@tblprefix\number#1:\number#2:c\endcsname\@EA\firstofoneargument \else\@EA\gobbleoneargument \fi}
+\def\doifnottblcol #1#2{\ifcsname\@@tblprefix\number#1:\number#2:c\endcsname\@EA\gobbleoneargument \else\@EA\firstofoneargument \fi}
+
+\def\tbltagstate#1#2{\ifcsname\@@tblprefix\number#1:\number#2:s\endcsname\zerocount\else\plusone\fi}
+\def\tblrowstate#1#2{\ifcsname\@@tblprefix\number#1:\number#2:r\endcsname\zerocount\else\plusone\fi}
+\def\tblcolstate#1#2{\ifcsname\@@tblprefix\number#1:\number#2:c\endcsname\zerocount\else\plusone\fi}
+
+\def\settblspn #1{\expandafter\let\csname\@@tblprefix\number#1:s\endcsname \!!plusone}
+\def\doifelsetblspn#1{\doifelse {\csname\@@tblprefix\number#1:s\endcsname}\!!plusone}
+% \def\doifelsetblspn#1{\@EA\ifx\csname\@@tblprefix\number#1:s\endcsname\plusone\@EA\firstoftwoarguments\else\@EA\secondoftwoarguments\fi}
+
+\def\settblspn #1{\setvalue {\@@tblprefix\number#1:s}{1}}
+\def\doifelsetblspn#1{\doifelsevalue{\@@tblprefix\number#1:s}{1}}
+
+% \long\def\settbltxt#1#2#3%
+% {\setxvalue{\@@tblprefix#1:#2:l}{\TBLlevel}%
+% \long\setvalue{\@@tblprefix#1:#2:t}%
+% {\doifdefined{\@@tblprefix#1:#2:l}
+% {\edef\TBLlevel{\getvalue{\@@tblprefix#1:#2:l}}}%
+% #3}}
+
+\long\def\settbltxt#1#2#3%
+ {\long\@EA\def\csname\@@tblprefix\number#1:\number#2:t\@EA\endcsname\@EA{\@EA\def\@EA\TBLlevel\@EA{\TBLlevel}#3}}
+
+\def\gettbltxt#1#2%
+ {\csname\@@tblprefix\number#1:\number#2:t\endcsname}
\newtoks\tbltoks
+\newtoks\tblrowtoks
\let\pushTBLparameters\relax
\let\popTBLparameters \relax
@@ -277,6 +326,8 @@
% \setupTABLE [first] [two][corner=2] % special case
% \setupTABLE [last] [two][corner=4] % special case
%
+% % % \setupTABLE [one] [first] ... special case of span
+%
% \startTEXpage
% \bTABLE[frame=off,align=middle]
% \bTR \bTD one \eTD \bTD two \eTD \bTD three \eTD \eTR
@@ -299,30 +350,30 @@
\csname\@@tblprefix\c!x\v!oddeven\positivecol\endcsname
\csname\@@tblprefix\c!x\v!oddeven\positivecol\c!y\v!oddeven\positiverow\endcsname
% row/col number combinations
- \executeifdefined{\@@tblprefix\c!y\positiverow}\donothing
- \executeifdefined{\@@tblprefix\c!y\negativerow}\donothing
+ \ifcsname\@@tblprefix\c!y\positiverow\endcsname\csname\@@tblprefix\c!y\positiverow\endcsname\fi
+ \ifcsname\@@tblprefix\c!y\negativerow\endcsname\csname\@@tblprefix\c!y\negativerow\endcsname\fi
\csname\@@tbl\@@tbl\c!extras\endcsname
- \letvalue{\@@tbl\@@tbl\c!extras}\relax % new, see x-fo
- \executeifdefined{\@@tblprefix\c!x\positivecol}\donothing
- \executeifdefined{\@@tblprefix\c!x\negativecol}\donothing
+ \@EA\let\csname\@@tbl\@@tbl\c!extras\endcsname\relax % new, see x-fo
+ \ifcsname\@@tblprefix\c!x\positivecol\endcsname\csname\@@tblprefix\c!x\positivecol\endcsname\fi
+ \ifcsname\@@tblprefix\c!x\negativecol\endcsname\csname\@@tblprefix\c!x\negativecol\endcsname\fi
\csname\@@tbl\@@tbl\c!extras\endcsname
- \letvalue{\@@tbl\@@tbl\c!extras}\relax % new, see x-fo
+ \@EA\let\csname\@@tbl\@@tbl\c!extras\endcsname\relax % new, see x-fo
% first/last combinations
\ifnum\positiverow=\plusone
\csname\@@tblprefix\c!y\v!first\endcsname
- \executeifdefined{\@@tblprefix\c!x\positivecol\c!y\v!first}\donothing
+ \ifcsname\@@tblprefix\c!x\positivecol\c!y\v!first\endcsname\csname\@@tblprefix\c!x\positivecol\c!y\v!first\endcsname\fi
\fi
\ifnum\positivecol=\plusone
\csname\@@tblprefix\c!x\v!first\endcsname
- \executeifdefined{\@@tblprefix\c!x\v!first\c!y\positiverow}\donothing
+ \ifcsname\@@tblprefix\c!x\v!first\c!y\positiverow\endcsname\csname\@@tblprefix\c!x\v!first\c!y\positiverow\endcsname\fi
\fi
\ifnum\positiverow=\maximumrow\relax
\csname\@@tblprefix\c!y\v!last\endcsname
- \executeifdefined{\@@tblprefix\c!x\positivecol\c!y\v!last}\donothing
+ \ifcsname\@@tblprefix\c!x\positivecol\c!y\v!last\endcsname\csname\@@tblprefix\c!x\positivecol\c!y\v!last\endcsname\fi
\fi
\ifnum\positivecol=\maximumcol\relax
\csname\@@tblprefix\c!x\v!last\endcsname
- \executeifdefined{\@@tblprefix\c!x\v!last\c!y\positiverow}\donothing
+ \ifcsname\@@tblprefix\c!x\v!last\c!y\positiverow\endcsname\csname\@@tblprefix\c!x\v!last\c!y\positiverow\endcsname\fi
\fi
\ifnum\positiverow=\maximumrow\relax \ifnum\positivecol=\maximumcol\relax
\csname\@@tblprefix\c!x\v!last\c!y\v!last\endcsname
@@ -338,21 +389,29 @@
\fi\fi
% special case: two rows and last row : two&first and two&last (round corners)
\ifnum\maximumrow=\plustwo\relax
- \ifnum\positiverow=\maximumrow\relax \ifnum\positivecol=\plusone
- \csname\@@tblprefix\c!x\v!first\c!y\v!two\endcsname
- \fi\fi
- \ifnum\positiverow=\maximumrow\relax \ifnum\positivecol=\maximumcol\relax
- \csname\@@tblprefix\c!x\v!last\c!y\v!two\endcsname
- \fi\fi
+ \ifnum\positiverow=\maximumrow\relax \ifnum\positivecol=\plusone
+ \csname\@@tblprefix\c!x\v!first\c!y\v!two\endcsname
+ \fi\fi
+ \ifnum\positiverow=\maximumrow\relax \ifnum\positivecol=\maximumcol\relax
+ \csname\@@tblprefix\c!x\v!last\c!y\v!two\endcsname
+ \fi\fi
+ \fi
+ \ifnum\gettblcol\positiverow\positivecol=\maximumcol\relax % top span over whole width
+ \ifnum\positiverow=\plusone
+ \csname\@@tblprefix\c!x\v!one\c!y\v!first\endcsname
+ \fi
+ \ifnum\positiverow=\maximumrow\relax
+ \csname\@@tblprefix\c!x\v!one\c!y\v!last\endcsname
+ \fi
\fi
% header things
\ifnum#1>\noftblhdnxlines\else
- \executeifdefined{\@@tblprefix\v!header\v!each }\donothing
- \executeifdefined{\@@tblprefix\v!header\positivecol}\donothing
+ \ifcsname\@@tblprefix\v!header\v!each \endcsname\csname\@@tblprefix\v!header\v!each \endcsname\fi
+ \ifcsname\@@tblprefix\v!header\positivecol\endcsname\csname\@@tblprefix\v!header\positivecol\endcsname\fi
\fi
% explicit cells
- \executeifdefined{\@@tblprefix\c!x\positivecol\c!y\positiverow}\donothing
- \executeifdefined{\@@tblprefix\c!x\negativecol\c!y\negativerow}\donothing
+ \ifcsname\@@tblprefix\c!x\positivecol\c!y\positiverow\endcsname\csname\@@tblprefix\c!x\positivecol\c!y\positiverow\endcsname\fi
+ \ifcsname\@@tblprefix\c!x\negativecol\c!y\negativerow\endcsname\csname\@@tblprefix\c!x\negativecol\c!y\negativerow\endcsname\fi
% done
\global\letcscsname\@@tblsplitafter\csname\@@tbl\@@tbl\c!after\endcsname
\relax}
@@ -380,69 +439,98 @@
% \bTR \bTD left \eTD\bTD right \eTD\eTR
% \eTABLE
-% \long\def\parseTR[#1][#2]#3\eTR% [#2] is dummy that kills spaces
-% {\def\currentcol{0}\increment\maximumrow#3}
+% todo: protect counters
+
+\newcount\row \newcount\col
+\newcount\xrow \newcount\xcol
+\newcount\xxrow \newcount\xxcol
+\newcount\maximumrow \newcount\maximumcol \newcount\maximumrowspan
+ \newcount\currentcol
+\newcount\tblspn
\def\parseTR[#1][#2]% [#2] is dummy that kills spaces / no #3 argument
- {\def\currentcol{0}\increment\maximumrow
- \let\currentcolpos\currentcol
+ {\currentcol\zerocount
+ \advance\maximumrow\plusone
\let\eTR\relax % handy in \expanded
- \setupTABLE[\v!row][\maximumrow][#1]}
+ \iffirstargument\setTABLEparameters[\c!y\number\maximumrow][#1]\fi}
+
+\def\settblref#1#2{\expandafter\xdef\csname\@@tblprefix\number#1:\number#2:x\endcsname}
+\def\gettblref#1#2{\ifcsname\@@tblprefix\number#1:\number#2:x\endcsname\csname\@@tblprefix\number#1:\number#2:x\endcsname\fi}
\long\def\parseTD[#1][#2]#3\eTD % [#2] is dummy that kills spaces
- {\getparameters[\@@tbl][\c!ny=\tblnr,\c!nx=\tblnc,nc=1,nr=1,\c!n=\currentcol,\c!m=,#1]%
+ {\def\tblny{\tblnr}%
+ \def\tblnx{\tblnc}%
+ \let\tblnc\plusone
+ \let\tblnr\plusone
+ \let\tbln\currentcol
+ \let\tblm\empty
+ \iffirstargument
+ \getparameters[\@@tbl][#1]%
+ \fi
% goto first cell % NEW, n/m=cellnumber
- \increment\currentcolpos
- \doifelsevaluenothing{\@@tbl\c!n}
- {\increment(\spnTBL,\tblnx)\relax}
- {\ifnum\getvalue{\@@tbl\c!n}=\currentcol\else
- \scratchcounter\getvalue{\@@tbl\c!n}%
- \advance\scratchcounter-\currentcol
- \advance\scratchcounter\minusone
-\advance\scratchcounter-\spnTBL
- \ifnum\scratchcounter>\zerocount
- \expanded{\parseTD[\c!nx=\the\scratchcounter,\c!n=,\c!m=,*sq=\v!no][]}\eTD
- \fi
- \getparameters[\@@tbl][\c!ny=\tblnr,\c!nx=\tblnc,nc=1,nr=1,#1,\c!n=,\c!m=]%
- \fi}%
- \doifvaluesomething{\@@tbl\c!m}
- {\ifnum\getvalue{\@@tbl\c!m}=\currentcol\else
- \scratchcounter\getvalue{\@@tbl\c!m}%
- \advance\scratchcounter-\currentcol
- \advance\scratchcounter\minusone
-% \advance\scratchcounter-\spnTBL
- \dorecurse\scratchcounter{\expanded{\parseTD[\c!n=,\c!m=][]}\eTD}%
- \getparameters[\@@tbl][\c!ny=\tblnr,\c!nx=\tblnc,nc=1,nr=1,#1,\c!n=,\c!m=]%
- \fi}%
- \doloop
- {\increment\currentcol
+ \edef\@@tblnindeed{\csname\@@tbl\c!n\endcsname}%
+ \ifx\@@tblnindeed\empty
+ \global\advance\tblspn\tblnx\relax
+ \else\ifnum\@@tblnindeed=\currentcol\else
+ \scratchcounter\numexpr\@@tblnindeed-\currentcol+\minusone-\tblspn\relax
+ \ifnum\scratchcounter>\zerocount
+ \expanded{\parseTD[\c!nx=\the\scratchcounter,\c!n=,\c!m=,*sq=\v!no][]}\eTD
+ \fi
+ % can also be made faster
+ \getparameters[\@@tbl][\c!ny=\tblnr,\c!nx=\tblnc,nc=1,nr=1,#1,\c!n=,\c!m=]%
+ \fi\fi
+ \edef\@@tblmindeed{\csname\@@tbl\c!m\endcsname}%
+ \ifx\@@tblmindeed\empty \else
+ \ifnum\@@tblmindeed=\currentcol \else
+ \scratchcounter\numexpr\@@tblmindeed-\currentcol+\minusone-\tblspn\relax
+ \dorecurse\scratchcounter{\expanded{\parseTD[\c!n=,\c!m=][]}\eTD}%
+ % can be sped up
+ \getparameters[\@@tbl][\c!ny=\tblnr,\c!nx=\tblnc,nc=1,nr=1,#1,\c!n=,\c!m=]%
+ \fi
+ \fi
+ \doloop % skip over columns that result from earlier span
+ {\advance\currentcol\plusone
\doifnottbltag\maximumrow\currentcol\exitloop}%
+ % == \def\next{\advance\currentcol\plusone\doiftbltag\maximumrow\currentcol\next}\next
% fill r*c cells and set span
- \let\row\maximumrow
- \let\col\currentcol
+ \ifnum\tblnx=\plusone
+ \ifnum\tblny=\plusone
+ \ifnum\currentcol>\maximumcol\relax
+ \maximumcol\currentcol
+ \fi
+ \else
+ \presetTBLcell
+ \fi
+ \else
+ \presetTBLcell
+ \fi
+ % set values
+ \lettbltag\maximumrow\currentcol\tblcell
+ \settblcol\maximumrow\currentcol{\number\tblnx}%
+ \settblrow\maximumrow\currentcol{\number\tblny}%
+ \settblref\maximumrow\currentcol{\ifcsname\@@tbl\c!action\endcsname\csname\@@tbl\c!action\endcsname\fi}%
+ % save text
+ \edef\celltag{{\number\maximumrow}{\number\currentcol}}%
+ \@EA\settbltxt\@EA\maximumrow\@EA\currentcol\@EA{\@EA\handleTBLcell\celltag[#1]{#3}}}
+
+\def\presetTBLcell
+ {\row\maximumrow
+ \col\currentcol
\dorecurse\tblny
- {\let\col\currentcol
- \settblcol\row\col\tblnx
+ {\col\currentcol
+ \settblcol\row\col{\number\tblnx}%
\ifnum\tblnx>\maximumrowspan\relax
- \let\maximumrowspan\tblnx
+ \maximumrowspan\tblnx
\fi
\dorecurse\tblnx
- {\settbltag\row\col\tblnone
- \increment\col}%
- \increment\row}%
+ {\lettbltag\row\col\tblnone
+ \advance\col\plusone}%
+ \advance\row\plusone}%
% check max column
- \decrement\col\relax
+ \advance\col\minusone
\ifnum\col>\maximumcol\relax
- \let\maximumcol\col
- \fi
- % set values
- \settbltag\maximumrow\currentcol\tblcell
- \settblcol\maximumrow\currentcol\tblnx
- \settblrow\maximumrow\currentcol\tblny
- % save text
- \edef\celltag{{\maximumrow}{\currentcol}}%
- \@EA\settbltxt\@EA\maximumrow\@EA\currentcol\@EA
- {\@EA\handleTBLcell\celltag[#1]{#3}}}
+ \maximumcol\col
+ \fi}
%D The usage of n and m:
%D
@@ -557,9 +645,9 @@
\let\pushTBL\relax
\let\popTBL \relax
-\chardef\TBLpass=0
+\chardef\tblpass=0
-\def\presetallTABLEparameters% each odd|even level
+\def\presetallTABLEparameters% each odd|even level / can be sped up but only once per table
{\executeifdefined{\@@rawtblprefix\v!start\v!each}\relax
\executeifdefined{\@@rawtblprefix\v!start\v!oddeven\TBLlevel}\relax
\executeifdefined{\@@rawtblprefix\v!start\number\TBLlevel}\relax}
@@ -571,6 +659,10 @@
{\pushTBL
% box not here
\bgroup
+ \TBLhead\emptytoks
+ \TBLnext\emptytoks
+ \TBLbody\emptytoks
+ \TBLfoot\emptytoks
\ifhmode\kern\zeropoint\fi % blocks \removeunwantedspaces: check this on icare handelingsschema
\resetcharacteralign % new
\getparameters
@@ -585,14 +677,6 @@
\processaction
[\tbltblheader]
[\v!repeat=>\multipleTBLheadstrue]%
-% \ifnum\TBLlevel>\plusone
-% \vbox
-% \else\ifenableTBLbreak
-% % no \vbox
-% \else
-% \vbox
-% \fi\fi
-% \bgroup
\localcolortrue
\presetallTABLEparameters
\ExpandFirstAfter\processallactionsinset
@@ -600,10 +684,10 @@
[\v!stretch=>\autoTBLspreadtrue]%
\linewidth\tbltblrulethickness % needs to be frozen
\dontcomplain
- \let\currentcol\!!zerocount
- \let\maximumrowspan\!!plusone
- \let\maximumcol\currentcol
- \let\maximumrow\currentcol
+ \currentcol\zerocount
+ \maximumrowspan\plusone
+ \maximumcol\zerocount
+ \maximumrow\zerocount
\def\bTR{\dodoubleempty\parseTR}%
\def\bTD{\dodoubleempty\parseTD}%
\def\bTH{\dodoubleempty\parseTH}%
@@ -618,84 +702,79 @@
\def\eTABLE % beware, we need to get rid of spurious spaces when in hmode
{% tricky and dirty order -)
- \doifsometokselse\TBLhead
+ \doifsometokselse\TBLhead % slow, better a flag
{\the\TBLhead
\edef\noftblheadlines{\number\maximumrow}%
\doifsometokselse\TBLnext
{\the\TBLnext
- \scratchcounter\maximumrow \advance\scratchcounter-\noftblheadlines
- \edef\noftblnextlines{\number\scratchcounter}}%
- {\let\noftblnextlines\!!zerocount}% was 1
+ \edef\noftblnextlines{\number\numexpr\maximumrow-\noftblheadlines\relax}}%
+ {\let\noftblnextlines\zerocount}% was 1
\edef\noftblhdnxlines{\number\maximumrow}}
- {\let\noftblheadlines\!!zerocount % was 1
- \let\noftblnextlines\!!zerocount
- \let\noftblhdnxlines\!!zerocount}%
+ {\let\noftblheadlines\zerocount % was 1
+ \let\noftblnextlines\zerocount
+ \let\noftblhdnxlines\zerocount}%
\the\TBLbody
\the\TBLfoot
\removeunwantedspaces % only if hmode
% finish cells
\dorecurse\maximumrow
- {\let\row\recurselevel
+ {\row\recurselevel\relax
\dorecurse\maximumcol
- {\let\col\recurselevel \let\xxcol\col \let\xxrow\row
+ {\col\recurselevel\relax
\doifnottbltag\row\col
- {\let\xrow\row
+ {\xxcol\col
+ \xxrow\row
+ \xrow\row
\doloop
- {\let\xcol\col
+ {\xcol\col
\doloop
- {\doifelsetbltag\xrow\xcol
- {\exitloop}
- {\increment\xcol \relax
+ {\doifelsetbltag\xrow\xcol \exitloop
+ {\advance\xcol\plusone
\ifnum\xcol>\maximumcol\relax \exitloop \fi}}%
- \doifelsetbltag\xrow\xcol
- {\exitloop}
- {\let\xxrow\xrow \let\xxcol\xcol \increment\xrow \relax
- \ifnum\xrow>\maximumrow \exitloop \fi}}}%
- \ifnum\xxrow>\maximumrow\let\xxrow\maximumrow\fi
- \ifnum\xxcol>\maximumcol\let\xxcol\maximumcol\fi
- \decrement(\xxrow,\row)\increment\xxrow
- \decrement(\xxcol,\col)\increment\xxcol
- \doifnottbltag\row\col
- {\let\xrow\row
- \dorecurse\xxrow
- {\let\xcol\col \settblcol\xrow\xcol\xxcol
+ \doifelsetbltag\xrow\xcol \exitloop
+ {\xxrow\xrow \xxcol\xcol \advance\xrow\plusone
+ \ifnum\xrow>\maximumrow \exitloop \fi}}%
+ \ifnum\xxrow>\maximumrow\xxrow\maximumrow\fi
+ \ifnum\xxcol>\maximumcol\xxcol\maximumcol\fi
+ \xxrow\numexpr\xxrow-\row+\plusone\relax
+ \xxcol\numexpr\xxcol-\col+\plusone\relax
+ \xrow\row
+ \dorecurse\xxrow
+ {\xcol\col \settblcol\xrow\xcol{\number\xxcol}%
\dorecurse\xxcol
- {\settbltag\xrow\xcol\tblnone \increment\xcol}%
- \increment\xrow}%
- \settbltag\row\col\tblcell
- \settblcol\row\col\xxcol
- \settblrow\row\col\xxrow
+ {\lettbltag\xrow\xcol\tblnone \advance\xcol\plusone}%
+ \advance\xrow\plusone}%
+ \lettbltag\row\col\tblcell
+ \settblcol\row\col{\the\xxcol}%
+ \settblrow\row\col{\the\xxrow}%
\ifautoTBLemptycell
- \edef\celltag{{\row}{\col}}%
- \@EA\settbltxt\@EA\row\@EA\col\@EA
- {\@EA\handleTBLcell\celltag[]{\strut}}%
+ \edef\celltag{{\number\row}{\number\col}}%
+ \@EA\settbltxt\@EA\row\@EA\col\@EA{\@EA\handleTBLcell\celltag[]{\strut}}%
\fi}}}%
% to be sure
\dorecurse\maximumrow
- {\let\row\recurselevel
+ {\row\recurselevel\relax
\dorecurse\maximumcol
- {\let\col\recurselevel
+ {\col\recurselevel\relax
\doiftblrow\row\col
- {\scratchcounter\maximumrow
- \advance\scratchcounter -\row
- \advance\scratchcounter \plusone
+ {\scratchcounter\numexpr\maximumrow-\row+\plusone\relax
\ifnum\gettblrow\row\col>\scratchcounter
\settblrow\row\col{\the\scratchcounter}%
\fi}%
- \settblht\row\col\!!zeropoint
- \settblwd\row\col\!!zeropoint
- \doifnottblcol\row\col{\settblcol\row\col\!!zerocount}%
- \doifnottbltag\row\col{\settbltag\row\col\tblnone}}}%
+ \lettblht\row\col\zeropoint
+ \lettblwd\row\col\zeropoint
+ \doifnottblcol\row\col{\lettblcol\row\col\zerocount}%
+ \doifnottbltag\row\col{\lettbltag\row\col\tblnone}}}%
% check and do
\ifcase\maximumcol\else
\startTBLprocessing
\begTBL
\dorecurse\maximumrow
{\bTBL
- \let\row\recurselevel
+ \row\recurselevel\relax
\dorecurse\maximumcol
- {\let\col\recurselevel
- \expanded{\doTBL{\row}{\col}}}%
+ {\col\recurselevel\relax
+ \expanded{\doTBL{\number\row}{\number\col}}}%
\eTBL}%
\removeunwantedspaces % only if hmode
\endTBL
@@ -711,88 +790,81 @@
\let\startTBLprocessing\relax
\let\stopTBLprocessing \relax
-% \def\processTBL
-% {\begTBL
-% \dorecurse\maximumrow
-% {\bTBL
-% \let\row\recurselevel
-% \dorecurse\maximumcol
-% {\let\col\recurselevel
-% \expanded{\doTBL{\row}{\col}}}%
-% \eTBL}%
-% \removeunwantedspaces % only if hmode
-% \endTBL}
+\newcount\prelocatedTBLrows % \prelocateTBLrows{1000} may speed up large tables
-\def\spanTBL#1#2%
- {\scratchcounter\gettblcol{#1}{#2}\relax
- \ifnum\scratchcounter>\zerocount
- \advance\scratchcounter \minusone
- \dorecurse\scratchcounter{\appendtoks\spantblcol\to\tbltoks}%
- \dorecurse\scratchcounter{\appendtoks\skiptblcol\to\tbltoks}%
- \appendtoks\nexttblcol\to\tbltoks
- \fi}
+\def\bTBL{\tblrowtoks\emptytoks}
+\def\eTBL{\tbltoks\@EA\@EA\@EA{\@EA\the\@EA\tbltoks\@EA\begintblrow\the\tblrowtoks\endtblrow}}%
-\def\bTBL{\appendtoks\begintblrow\to\tbltoks}
-\def\eTBL{\appendtoks\endtblrow \to\tbltoks}
+\def\prelocateTBLerror
+ {\writestatus\m!systems{fatal error: use \string\prelocateTBLrows\space to increase table memory (now: \number\prelocatedTBLrows)}}
+
+\def\prelocateTBLrows#1% we start at zero so we have one to much, better play safe anyway
+ {\dostepwiserecurse\prelocatedTBLrows{#1}\plusone{\expandafter\newtoks\csname tbl:\recurselevel\endcsname}%
+ \def\bTBL
+ {\ifnum\tblrow<\prelocatedTBLrows\relax
+ \@EA\let\@EA\tblrowtoks\csname tbl:\the\tblrow\endcsname\tblrowtoks\emptytoks
+ \else
+ \prelocateTBLerror
+ \fi}%
+ \def\eTBL
+ {\tbltoks\@EA\@EA\@EA{\@EA\the\@EA\tbltoks\@EA\begintblrow\@EA\the\csname tbl:\the\tblrow\endcsname\endtblrow}}%
+ \global\prelocatedTBLrows#1\relax}
+
+% \prelocateTBLrows{1000} % may speed up large tables
% We use aligments to handle the empty (skipped) columns, so
% that we don't have to (re|)|calculate these.
\def\skiptblcol
- {\doglobal\increment\colTBL}
+ {\global\advance\tblcol\plusone}
\def\nexttblcol
- {\doglobal\increment\colTBL
+ {\global\advance\tblcol\plusone
\kern\tbltblcolumndistance
&}
\def\spantblcol
{\span}
-\newcounter\rowTBL
-\newcounter\colTBL
-\newcounter\spnTBL
+\newcount\tblrow
+\newcount\tblcol
+
+\let\savedtblrow\!!zerocount
+\let\savedtblcol\!!zerocount
\def\begintblrow
{\noalign
- {\doglobal\increment \rowTBL
- \doglobal\newcounter\spnTBL
- \doglobal\newcounter\colTBL}%
+ {\global\advance\tblrow\plusone
+ \global\tblcol\zerocount
+ \global\tblspn\zerocount}%
\nexttblcol
- \kern\tbltblleftmargindistance
- \kern-\tbltblcolumndistance}
+ \kern\dimexpr\tbltblleftmargindistance-\tbltblcolumndistance\relax}
\def\endtblrow
- {\kern-\tbltblcolumndistance
- \kern\tbltblrightmargindistance
+ {\kern\dimexpr\tbltblrightmargindistance-\tbltblcolumndistance\relax
\crcr
\noalign
{\nointerlineskip
- \allowbreak
+ \ifnum\gettblnob\tblrow=\zerocount
+ \allowbreak
+ \fi
\bgroup % protect local vars
\@@tblsplitafter
\egroup
\bgroup % protect local vars
- \increment\rowTBL\relax
- \ifnum\rowTBL>\noftblhdnxlines\relax
- \ifnum\rowTBL<\maximumrow\relax
+ \scratchcounter\numexpr\tblrow+\plusone\relax
+ \ifnum\scratchcounter>\noftblhdnxlines\relax
+ \ifnum\scratchcounter<\maximumrow\relax
\doifsomething\tbltblspaceinbetween{\blank[\tbltblspaceinbetween]}%
\fi
\fi
\egroup}}
-%\def\begintbl
-% {\doglobal\newcounter\colTBL
-% \doglobal\newcounter\rowTBL
-% \doglobal\decrement\rowTBL
-% \tabskip\zeropoint
-% \halign\bgroup\ignorespaces##\unskip&&\ignorespaces##\unskip\cr}
-
\def\begintbl
- {\doglobal\newcounter\colTBL
- \doglobal\newcounter\rowTBL
- \doglobal\newcounter\spnTBL
- \doglobal\decrement\rowTBL
+ {\global\tblspn\zerocount
+ \global\tblcol\zerocount
+ \global\tblrow\zerocount
+ \global\advance\tblrow\minusone
\tabskip\zeropoint
\halign\bgroup
\registerparoptions % new
@@ -805,177 +877,185 @@
{\spanTBL{#1}{#2}}
\setvalue{\tblcell TBL}#1#2%
- {\appendtoks
- \makeTBL{#1}{#2}% % append nog isoleren
- \to\tbltoks
+ {\tblrowtoks\expandafter{\the\tblrowtoks\makeTBL #1 #2 }% space delimited -> less tokens
\spanTBL{#1}{#2}}
+\def\spanTBL#1#2%
+ {\scratchcounter\gettblcol{#1}{#2}\relax
+ \ifnum\scratchcounter>\zerocount
+ \advance\scratchcounter \minusone
+ \dorecurse\scratchcounter{\tblrowtoks\expandafter{\the\tblrowtoks\spantblcol}}%
+ \dorecurse\scratchcounter{\tblrowtoks\expandafter{\the\tblrowtoks\skiptblcol}}%
+ \tblrowtoks\expandafter{\the\tblrowtoks\nexttblcol}%
+ \fi}
+
\def\doTBL#1#2%
- {\getvalue{\gettbltag{#1}{#2}TBL}{#1}{#2}}
+ {\csname\gettbltag{#1}{#2}TBL\endcsname{#1}{#2}}
\def\begTBL
- {\doglobal\newcounter\rowTBL
- \doglobal\newcounter\colTBL
- \doglobal\newcounter\spnTBL
- \chardef\TBLpass\zerocount
- \tbltoks\emptytoks
- \appendtoks
- \begintbl
- \to\tbltoks}
+ {\global\tblspn\zerocount
+ \global\tblrow\zerocount
+ \global\tblcol\zerocount
+ \chardef\tblpass\zerocount
+ \tbltoks\emptytoks}
+
+\def\flushtbltoks{\begintbl\the\tbltoks\endtbl}
+
+\def\domakeTBLone#1 #2 %
+ {\gettbltxt{#1}{#2}}%
+
+\def\domakeTBLtwo#1 #2 % meer in cellD
+ {\scratchdimen\zeropoint
+ \scratchcounter\tblcol
+ \!!counta\gettblcol{#1}{#2}\relax
+ \dorecurse\!!counta
+ {\advance\scratchdimen\dimexpr\gettblwid\scratchcounter+\tbltblcolumndistance\relax
+ \ifnum\recurselevel<\!!counta \advance\scratchdimen \gettbldis\scratchcounter\fi
+ \advance\scratchcounter\plusone}%
+ \edef\widthTBL{\the\dimexpr\scratchdimen-\tbltblcolumndistance\relax}%
+ \setbox\scratchbox\hbox{\gettbltxt{#1}{#2}}%
+ \settblht{#1}{#2}{\the\ht\scratchbox}%
+ \settblwd{#1}{#2}{\the\wd\scratchbox}%
+ \ifdim\ht\scratchbox>\gettblhei{#1}\relax
+ \settblhei{#1}{\the\ht\scratchbox}%
+ \fi}%
+
+\def\domakeTBLthree#1 #2 %
+ {% height
+ \!!counta \gettblcol{#1}{#2}\relax
+ \!!countb \gettblrow{#1}{#2}\relax
+ \!!heighta\gettblht {#1}{#2}\relax
+ \scratchdimen\zeropoint
+ \ifnum\!!counta=\maximumcol\relax
+ % case: nc=maxcolumns
+ \else
+ \scratchcounter#1\relax
+ \dorecurse\!!countb
+ {\advance\scratchdimen
+ \gettblhei\scratchcounter
+ \advance\scratchcounter\plusone}%
+ \ifdim\scratchdimen<\!!heighta\relax
+ \scratchdimen\!!heighta
+ \fi
+ \fi
+ \edef\heightTBL{\the\scratchdimen}%
+ % width
+ \scratchdimen\zeropoint
+ \scratchcounter\tblcol
+ \dorecurse\!!counta
+ {\advance\scratchdimen\dimexpr\gettblwid\scratchcounter+\tbltblcolumndistance\relax
+ \ifnum\recurselevel<\!!counta \advance\scratchdimen \gettbldis\scratchcounter\fi
+ \advance\scratchcounter\plusone}%
+ \edef\widthTBL{\the\dimexpr\scratchdimen-\tbltblcolumndistance\relax}%
+ % cell
+ \setbox\scratchbox\hbox{\gettbltxt{#1}{#2}}%
+ \ifnum\!!counta=\maximumcol\relax
+ % case: nc=maxcolumns
+ \else
+ \scratchdimen\gettblhei{#1}%
+ \setbox\scratchbox\hbox
+ {\lower\ht\scratchbox\hbox{\raise\scratchdimen\box\scratchbox}}%
+ \ht\scratchbox\scratchdimen
+ \fi
+ \dp\scratchbox\zeropoint
+ \edef\!!stringa{\gettblref{#1}{#2}}%
+ \ifx\!!stringa\empty
+ \box\scratchbox
+ \else
+ \expanded{\gotobox{\box\scratchbox}[\!!stringa]}%
+ \fi
+ \box\scratchbox}
+
+\def\inTBLcell#1#2% hm, do we need #1 #2 ? we use tblcol anyway
+ {\ExpandBothAfter\doifinsetelse\localwidth{\v!fit,\v!broad} % user set
+ {}
+ {\scratchdimen\gettblaut\tblcol\relax
+ \ifdim\localwidth>\scratchdimen
+ \settblaut\tblcol{\the\dimexpr\localwidth\relax}%
+ \fi}}%
\def\endTBL
- {\appendtoks
- \endtbl
- \to\tbltoks
- \setbox\scratchbox\hbox
+ {\setbox\scratchbox\hbox
{\localframed
[\@@tbl\@@tbl]
[\c!frame=\v!off,\c!background=,\c!align=\v!no]
{\strut}}%
\edef\minimalcellheight{\the\ht\scratchbox}%
\dorecurse\maximumcol
- {\settblaut\recurselevel\!!zeropoint % \zeropoint etc
+ {\lettblaut\recurselevel\zeropoint
% new
- \let\xcol\recurselevel
+ \xcol\recurselevel\relax
\dorecurse\maximumrow
- {\settblwd \recurselevel\xcol\!!zeropoint
- \settblht \recurselevel\xcol\!!zeropoint}%
+ {\lettblwd\recurselevel\xcol\zeropoint
+ \lettblht\recurselevel\xcol\zeropoint}%
% till here
- \settblwid\recurselevel\!!zeropoint
- \settbldis\recurselevel\!!zeropoint}%
+ \lettblwid\recurselevel\zeropoint
+ \lettbldis\recurselevel\zeropoint}%
\dorecurse\maximumrow
- {\settblhei\recurselevel\maxdimen}%
- \chardef\TBLpass\plusone
+ {\lettblhei\recurselevel\maxdimen}%
+ \chardef\tblpass\plusone
+ \let\makeTBL\domakeTBLone
\let\handleTBLcell\dohandleTBLcellA
- \def\makeTBL##1##2%
- {\gettbltxt{##1}{##2}}%
- \def\inTBLcell##1##2%
- {\ExpandBothAfter\doifinsetelse\localwidth{\v!fit,\v!broad} % user set
- {}
- {\scratchdimen\gettblaut\colTBL\relax
- \ifdim\localwidth>\scratchdimen
- \settblaut\colTBL\localwidth
- \fi}}%
- \setbox0\vbox{\trialtypesettingtrue \the\tbltoks}%
-\settbldis\maximumcol{\zeropoint}%
+ \setbox0\vbox{\trialtypesettingtrue \flushtbltoks}%
+% \setbox\scratchbox\vbox{\trialtypesettingtrue \flushtbltoks}%
+ \lettbldis\maximumcol\zeropoint
\ifautoTBLspread
% experimental, stretch non fixed cells to \hsize
\checktblwidthsone % trial run
\checktblwidthstwo % real run
\stretchtblwidths
\let\handleTBLcell\dohandleTBLcellB
- \setbox\scratchbox\vbox{\trialtypesettingtrue \the\tbltoks}%
+ \setbox\scratchbox\vbox{\trialtypesettingtrue \flushtbltoks}%
\else\ifdim\wd0>\hsize
\ifautoTBLhsize
\checktblwidthsone % trial run
\checktblwidthstwo % real run
\let\handleTBLcell\dohandleTBLcellB
- \setbox\scratchbox\vbox{\trialtypesettingtrue \the\tbltoks}%
+ \setbox\scratchbox\vbox{\trialtypesettingtrue \flushtbltoks}%
\fi
\else\ifautoTBLrowspan\ifnum\maximumrowspan>1 % max ?
% added jan 2002 because nx=* did no longer work
-\edef\savedhsize{\the\hsize}%
-\hsize\wd0\relax % new per 17/04/2006
+ \edef\savedhsize{\the\hsize}%
+ \hsize\wd0\relax % new per 17/04/2006
\checktblwidthsone % trial run
\checktblwidthstwo % real run
-\hsize\savedhsize
+ \hsize\savedhsize
%
\let\handleTBLcell\dohandleTBLcellC
- \setbox\scratchbox\vbox{\trialtypesettingtrue \the\tbltoks}%
+ \setbox\scratchbox\vbox{\trialtypesettingtrue \flushtbltoks}%
\fi\fi\fi\fi
\let\handleTBLcell\dohandleTBLcellD
- \chardef\TBLpass\plustwo
- \def\makeTBL##1##2% meer in cellD
- {\dimen2\zeropoint
- \globalpushmacro\colTBL
- \dorecurse{\gettblcol{##1}{##2}}
- {\advance\dimen2 \gettblwid\colTBL
- \advance\dimen2 \tbltblcolumndistance
-\ifnum\recurselevel<\gettblcol{##1}{##2}\relax \advance\dimen2 \gettbldis\colTBL\fi
- \increment\colTBL}%
- \advance\dimen2 -\tbltblcolumndistance
- \edef\widthTBL{\the\dimen2}%
- \globalpopmacro\colTBL
- \setbox\scratchbox\hbox{\gettbltxt{##1}{##2}}%
- \settblht{##1}{##2}{\the\ht\scratchbox}%
- \settblwd{##1}{##2}{\the\wd\scratchbox}%
- \ifdim\ht\scratchbox>\gettblhei{##1}\relax
- \settblhei{##1}{\the\ht\scratchbox}%
- \fi}%
- \setbox\scratchbox\vbox{\trialtypesettingtrue \the\tbltoks}%
+ \chardef\tblpass\plustwo
+ \let\makeTBL\domakeTBLtwo
+ \setbox\scratchbox\vbox{\trialtypesettingtrue \flushtbltoks}%
\checktblheightsone
\checktblheightstwo
\let\handleTBLcell\dohandleTBLcellE
- \chardef\TBLpass\plusthree
- \def\makeTBL##1##2%
- {% height
- \globalpushmacro\rowTBL
- \scratchdimen\zeropoint
- \def\rowTBL{##1}%
- \ifnum\gettblcol{##1}{##2}=\maximumcol\relax
- % case: nc=maxcolumns
- \else
- \dorecurse{\gettblrow{##1}{##2}}
- {\advance\scratchdimen \gettblhei\rowTBL
- \increment\rowTBL}%
- \ifdim\scratchdimen<\gettblht{##1}{##2}\relax
- \scratchdimen\gettblht{##1}{##2}\relax
- \fi
- \fi
- \edef\heightTBL{\the\scratchdimen}%
- \globalpopmacro\rowTBL
- % width
- \globalpushmacro\colTBL
- \scratchdimen\zeropoint
- \dorecurse{\gettblcol{##1}{##2}}
- {\advance\scratchdimen \gettblwid\colTBL
- \advance\scratchdimen \tbltblcolumndistance
-\ifnum\recurselevel<\gettblcol{##1}{##2}\relax \advance\scratchdimen \gettbldis\colTBL\fi
- \increment\colTBL}%
- \advance\scratchdimen -\tbltblcolumndistance
- \edef\widthTBL{\the\scratchdimen}%
- \globalpopmacro\colTBL
- % cell
- \setbox\scratchbox\hbox{\gettbltxt{##1}{##2}}%
- \ifnum\gettblcol{##1}{##2}=\maximumcol\relax
- % case: nc=maxcolumns
- \else
- \scratchdimen\gettblhei{##1}%
- \setbox\scratchbox\hbox
- {\lower\ht\scratchbox\hbox{\raise\scratchdimen\box\scratchbox}}%
- \ht\scratchbox\scratchdimen
- \fi
- \dp\scratchbox\zeropoint
- \box\scratchbox}%
- \iftraceTABLE\showtbltoks\fi
- \ifnum\TBLlevel>\plusone
- \@EA\notsplittblbox
- \else\ifenableTBLbreak
- \@EAEAEA\splittblbox
- \else
- \@EAEAEA\notsplittblbox
- \fi\fi{\the\tbltoks}}
+ \chardef\tblpass\plusthree
+ \let\makeTBL\domakeTBLthree
+ \ifnum\TBLlevel>\plusone
+ \@EA\notsplittblbox
+ \else\ifenableTBLbreak
+ \@EAEAEA\splittblbox
+ \else
+ \@EAEAEA\notsplittblbox
+ \fi\fi{\flushtbltoks}}
\def\stretchtblwidths
{\ifcase\maximumcol\else % else division by zero
\!!dimend\zeropoint
\!!dimene\hsize
\dorecurse\maximumcol
- {\advance\!!dimend \gettblwid\recurselevel
- \advance\!!dimend \tbltblcolumndistance
+ {\advance\!!dimend\dimexpr\gettblwid\recurselevel+\tbltblcolumndistance\relax
\advance\!!dimene-\gettbldis\recurselevel}%
- \advance\!!dimend-\tbltblcolumndistance
- \advance\!!dimend\tbltblleftmargindistance
- \advance\!!dimend\tbltblrightmargindistance
+ \advance\!!dimend\dimexpr-\tbltblcolumndistance+\tbltblleftmargindistance+\tbltblrightmargindistance\relax
% distribute width (stretch)
\ifdim\!!dimend<\!!dimene
\advance\!!dimend-\!!dimene
\!!dimend-\!!dimend
\divide\!!dimend\maximumcol
\dorecurse\maximumcol
- {\scratchdimen\gettblwid\recurselevel
- \advance\scratchdimen\!!dimend
- \settblwid\recurselevel{\the\scratchdimen}}%
+ {\settblwid\recurselevel{\the\dimexpr\gettblwid\recurselevel+\!!dimend\relax}}%
\fi
\fi}
@@ -988,13 +1068,6 @@
\box\finaltblbox
\afterTABLEbox}
-% \def\splittblbox#1%
-% {\ifinsidefloat
-% \notsplittblbox{#1}%
-% \else
-% \executeifdefined{splittblbox\tbltblsplitmethod}\splittblboxa{#1}%
-% \fi}
-
\def\splittblbox#1%
{\ifinsidesplitfloat
\donetrue
@@ -1013,181 +1086,6 @@
\let\extratblsplitheight\zeropoint % additional space taken by before/afterTABLEsplitbox
-% todo: mode: first|next (of niets)
-
-% \def\dosplittblboxa#1% spacing between rows gets lost in split
-% {\setbox\TABLEsplitbox\vbox{#1}%
-% \setbox8\vbox{\doifsomething\tbltblspaceinbetween{\blank[\tbltblspaceinbetween]}}%
-% \ifmultipleTBLheads
-% \setbox2\vbox{}%
-% \setbox4\vbox{}%
-% \dorecurse\noftblheadlines
-% {\setbox0\vsplit\TABLEsplitbox to \lineheight
-% \setbox2\vbox{\unvcopy2\unvcopy0}}%
-% \dorecurse\noftblnextlines
-% {\setbox0\vsplit\TABLEsplitbox to \lineheight
-% \setbox4\vbox{\unvcopy4\unvcopy0}}%
-% \ifcase\noftblheadlines\else
-% \ifdim\pagegoal<\maxdimen
-% \dimen0\ht2
-% \advance\dimen0\ht8
-% \advance\dimen0\pagetotal\relax
-% \ifdim\dimen0>\pagegoal
-% \bgroup\page\egroup % make sure that local vars are kept
-% \fi
-% \fi
-% \unvcopy2
-% \ifcase\noftblnextlines\else
-% \setbox2\box4
-% \fi
-% \fi
-% \fi
-% \donefalse
-% \!!doneafalse
-% \doloop
-% {\setbox0\vsplit\TABLEsplitbox to \lineheight
-% \if!!donea
-% \ifdim\pagegoal<\maxdimen
-% \setbox0\vbox{\unvbox0}%
-% \ifdim\ht0>\zeropoint
-% \dimen0\ht0
-% \advance\dimen0\ht8
-% \advance\dimen0\pagetotal\relax
-% \ifdim\dimen0>\pagegoal
-% \bgroup\page\egroup % make sure that local vars are kept
-% \ifmultipleTBLheads
-% \ifcase\noftblheadlines\else\unvcopy2\fi
-% \fi
-% \fi
-% \fi
-% \fi
-% \fi
-% \!!doneatrue
-% \ifdone
-% \doifsomething\tbltblspaceinbetween{\blank[\tbltblspaceinbetween]}%
-% \fi
-% \unvbox0
-% %\allowbreak
-% \bgroup
-% % todo: what if tblnextlines ?
-% \scratchcounter\recurselevel
-% \ifmultipleTBLheads
-% \advance\scratchcounter\noftblheadlines
-% \fi
-% \setupTBLcell{\number\scratchcounter}1
-% \ifx\@@tblsplitafter\relax
-% \allowbreak
-% \else
-% \doifelsenothing\@@tblsplitafter
-% \allowbreak
-% {\scratchcounter\realpageno
-% \@@tblsplitafter
-% \ifmultipleTBLheads
-% \ifnum\scratchcounter<\realpageno
-% \ifcase\noftblheadlines\else\unvcopy2\fi
-% \fi
-% \fi}%
-% \fi
-% \egroup
-% \ifvoid\TABLEsplitbox \exitloop \else \donetrue \fi}}
-
-% \def\dosplittblboxb#1%
-% {\scratchdimen-\extratblsplitheight
-% \advance\scratchdimen-\tbltblsplitoffset
-% \expanded{\testpage[2][\the\scratchdimen]}% quite save since a row is > 1 lineheight and we don't want one-liners
-% \setbox\TABLEsplitbox\vbox{#1}%
-% \setbox8\vbox{\doifsomething\tbltblspaceinbetween{\blank[\tbltblspaceinbetween]}}%
-% \dimen8\ht8\advance\dimen8\dp8
-% \ifmultipleTBLheads
-% \setbox2\vbox{}%
-% \setbox4\vbox{}%
-% \dorecurse\noftblheadlines
-% {\setbox0\vsplit\TABLEsplitbox to \lineheight
-% \setbox2\vbox{\unvcopy2\unvcopy0}}%
-% \dorecurse\noftblnextlines
-% {\setbox0\vsplit\TABLEsplitbox to \lineheight
-% \setbox4\vbox{\unvcopy4\unvcopy0}}%
-% \fi
-% \!!doneafalse
-% \doloop
-% {\ifdim\pagegoal<\maxdimen
-% \scratchdimen\pagegoal
-% \advance\scratchdimen-\pagetotal
-% \!!donecfalse
-% \else
-% \scratchdimen\textheight
-% \!!donectrue
-% \fi
-% \advance\scratchdimen-\dimen8
-% \advance\scratchdimen-\extratblsplitheight
-% \advance\scratchdimen-\tbltblsplitoffset
-% \setbox\finaltblbox\vbox
-% {\ifmultipleTBLheads
-% \ifcase\noftblheadlines\else
-% \unvcopy2 \doifsomething\tbltblspaceinbetween{\blank[\tbltblspaceinbetween]}%
-% \fi
-% \fi}%
-% \if!!donea\else\ifcase\noftblnextlines\else
-% \setbox2\box4
-% \fi\fi
-% \!!doneatrue
-% % alternatively we could use a kind of balancing like splitter
-% % first to scratchdimen and then smaller etc; more code and copy -)
-% \!!counta\zerocount
-% \doloop
-% {\setbox\scratchbox\vsplit\TABLEsplitbox to \onepoint
-% \setbox\scratchbox\vbox{\unvbox\scratchbox}%
-% \bgroup
-% \advance\scratchdimen-\ht\scratchbox
-% \advance\scratchdimen-\dp\scratchbox
-% \advance\scratchdimen-\ht\finaltblbox
-% \advance\scratchdimen-\dp\finaltblbox\relax
-% \ifdim\scratchdimen>\zeropoint
-% \egroup
-% \setbox\finaltblbox\vbox
-% {\unvbox\finaltblbox
-% \unvbox\scratchbox}%
-% \ifvoid\TABLEsplitbox \exitloop \fi
-% \else\if!!donec
-% % we have text height available, but the (one) cell is too
-% % large to fit, so, in order to avoid loops/deadcycles we do:
-% \egroup
-% \setbox\finaltblbox\vbox
-% {\unvbox\finaltblbox
-% \unvbox\scratchbox}%
-% \exitloop
-% \else
-% \egroup
-% \setbox\TABLEsplitbox\vbox
-% {\unvbox\scratchbox
-% \ifvoid\TABLEsplitbox\else\unvbox\TABLEsplitbox\allowbreak\fi}%
-% \exitloop
-% \fi\fi}%
-% %
-% \postprocessTABLEsplitbox\finaltblbox
-% \ifvoid\TABLEsplitbox
-% \beforeTABLEsplitbox
-% \box\finaltblbox
-% \afterTABLEsplitbox
-% \@@tblsplitafter
-% \exitloop
-% \else
-% % hack
-% \ifdim\pagegoal<\maxdimen
-% \scratchdimen\pagegoal
-% \advance\scratchdimen \lineheight
-% \global\pagegoal\scratchdimen
-% \fi
-% % brrr
-% \ifdim\ht\finaltblbox>\zeropoint
-% \beforeTABLEsplitbox
-% \box\finaltblbox
-% \afterTABLEsplitbox
-% \@@tblsplitafter
-% \fi
-% \page
-% \fi}}
-
\def\dosplittblbox#1%
{\resettsplit
\def\tsplitminimumfreelines{2}%
@@ -1195,7 +1093,7 @@
\def\tsplitbeforeresult {\beforeTABLEsplitbox}%
\def\tsplitafterresult {\afterTABLEsplitbox}%
\def\tsplitafter {\@@tblsplitafter}%
- \setbox\tsplitcontent\vbox{#1}% \the\tbltoks
+ \setbox\tsplitcontent\vbox{#1}%
\ifmultipleTBLheads
\dorecurse\noftblheadlines
{\setbox\scratchbox\vsplit\tsplitcontent to \lineheight
@@ -1224,22 +1122,17 @@
\def\dochecktblwidths#1%
{\iftraceTABLE\showtblwids{B#1}\fi
- \!!dimena\hsize
\!!counta\zerocount
-% test, dunno yet
-\advance\!!dimena-\tbltblleftmargindistance
-\advance\!!dimena-\tbltblrightmargindistance
-\advance\!!dimena-\tbltblcolumndistance
+ \!!dimena\dimexpr\hsize-\tbltblleftmargindistance-\tbltblrightmargindistance-\tbltblcolumndistance\relax
\dorecurse\maximumcol
{\scratchdimen\gettblaut\recurselevel\relax
-% test, seems to work ok
-\advance\!!dimena-\gettbldis\recurselevel\relax
+ \advance\!!dimena-\gettbldis\recurselevel\relax
\ifdim\scratchdimen>\zeropoint\relax
\advance\!!dimena -\scratchdimen
\else
\scratchdimen\gettblwid\recurselevel\relax
\ifdim\scratchdimen>\tbltblmaxwidth\relax
- \ifcase#1\else\settblwid\recurselevel\!!zeropoint\fi
+ \ifcase#1\else\lettblwid\recurselevel\zeropoint\fi
\advance\!!counta \plusone
\else
\ifdim\scratchdimen>\zeropoint\relax
@@ -1265,57 +1158,72 @@
\fi}%
\iftraceTABLE\showtblwids{E#1}\fi}
+\newcount\xrowTBL
+\newcount\xcolTBL
+\newcount\xxrowTBL
+
+% dikke arg naar recurse wegwerken
+
+\def\dochecktblheightsone
+ {\!!countb\gettblrow\xrowTBL\xcolTBL\relax
+ % check row span
+ \ifnum\!!countb>\plusone
+ % current height in row
+ \dimen0=\gettblht\xrowTBL\xcolTBL
+ % find nearest height in row
+ \dimen2=\zeropoint
+ \dorecurse\maximumcol
+ {\ifnum\recurselevel=\xcolTBL\else
+ \doiftblrow\xrowTBL\recurselevel
+ {\!!countc=\gettblrow\xrowTBL\recurselevel\relax
+ \ifnum\!!countc=\plusone
+ \dimen4=\gettblht\xrowTBL\recurselevel\relax
+ \ifdim\dimen2<\dimen4
+ \dimen2=\dimen4
+ \fi
+ \fi}%
+ \fi}%
+ \xxrowTBL\xrowTBL
+ % calculate cummulative height
+ \dimen4=\dimen2
+ \!!countc\xrowTBL
+ \advance\!!countc\minusone
+ \dorecurse\!!countb
+ {\ifnum\xxrowTBL=\xrowTBL\else
+ \advance\dimen4 \gettblhei\xxrowTBL
+ \fi
+ \ifnum\recurselevel=\!!countb\else
+ \settblnob\!!countc
+ \advance\!!countc\plusone
+ \fi
+ \advance\xxrowTBL\plusone}%
+ % distribute overshoot equally
+ \ifdim\dimen4<\dimen0
+ \advance\dimen0 -\dimen4
+ \divide\dimen0 \!!countb
+ \xxrowTBL\xrowTBL
+ \settblhei\xrowTBL{\the\dimen2}%
+ \dorecurse\!!countb
+ {\dorecurse\maximumcol
+ {\ifnum\recurselevel=\xcolTBL\else
+ \scratchdimen\dimexpr\gettblht\xxrowTBL\recurselevel+\dimen0\relax
+ \settblht\xxrowTBL\recurselevel{\the\scratchdimen}%
+ \ifdim\gettblhei\xxrowTBL<\scratchdimen
+ \settblhei\xxrowTBL{\the\scratchdimen}%
+ \fi
+ \fi}%
+ \advance\xxrowTBL\plusone}%
+ \else\ifdim\dimen4>\dimen0
+ \settblhei\xrowTBL{\the\dimen2}%
+ \fi\fi
+ \fi}
+
\def\checktblheightsone
{\dorecurse\maximumrow
- {\let\xrowTBL\recurselevel
+ {\xrowTBL\recurselevel\relax
\dorecurse\maximumcol
- {\let\xcolTBL\recurselevel
- \!!countb=0\gettblrow\xrowTBL\xcolTBL\relax
- % check row span
- \ifnum\!!countb>1
- % current height in row
- \dimen0=\gettblht\xrowTBL\xcolTBL
- % find nearest height in row
- \dimen2=\zeropoint
- \dorecurse\maximumcol
- {\ifnum\recurselevel=\xcolTBL\else
- \!!countc=0\gettblrow\xrowTBL\recurselevel\relax
- \ifnum\!!countc=\plusone
- \dimen4=\gettblht\xrowTBL\recurselevel\relax
- \ifdim\dimen2<\dimen4
- \dimen2=\dimen4
- \fi
- \fi
- \fi}%
- \let\xxrowTBL\xrowTBL
- % calculate cummulative height
- \dimen4=\dimen2
- \dorecurse\!!countb
- {\ifnum\xxrowTBL=\xrowTBL\else
- \advance\dimen4 \gettblhei\xxrowTBL
- \fi
- \increment\xxrowTBL}%
- % distribute overshoot equally
- \ifdim\dimen4<\dimen0
- \advance\dimen0 -\dimen4
- \divide\dimen0 \!!countb
- \let\xxrowTBL\xrowTBL
- \settblhei\xrowTBL{\the\dimen2}%
- \dorecurse\!!countb
- {\dorecurse\maximumcol
- {\ifnum\recurselevel=\xcolTBL\else
- \scratchdimen\gettblht\xxrowTBL\recurselevel
- \advance\scratchdimen \dimen0
- \settblht\xxrowTBL\recurselevel{\the\scratchdimen}%
- \ifdim\gettblhei\xxrowTBL<\scratchdimen
- \settblhei\xxrowTBL{\the\scratchdimen}%
- \fi
- \fi}%
- \increment\xxrowTBL}%
- \else\ifdim\dimen4>\dimen0
- \settblhei\xrowTBL{\the\dimen2}%
- \fi\fi
- \fi}}}
+ {\xcolTBL\recurselevel\relax
+ \doiftblrow\xrowTBL\xcolTBL\dochecktblheightsone}}}
\def\checktblheightstwo
{}
@@ -1323,18 +1231,9 @@
\def\showtblwids#1%
{\vbox
{\forgetall\tttf[#1]\dorecurse\maximumcol
- {\scratchdimen\gettblwid\recurselevel
+ {\scratchdimen\gettblwid\recurselevel\relax
[\recurselevel:\the\scratchdimen]}}}
-\def\showtbltoks
- {\vbox
- {\forgetall\tttf
- \let\begintbl \relax \let\endtbl \relax
- \let\begintblrow\par \let\endtblrow \par
- \def\nexttblcol {[next]}\def\spantblcol{[span]}
- \def\makeTBL##1##2{[##1,##2]}
- \the\tbltoks}}
-
\def\TBLcharalign
{\doifelse\tbltblaligncharacter\v!yes
\doTBLcharalign\gobbleoneargument}
@@ -1342,7 +1241,7 @@
\long\def\doTBLcharalign#1#2% column data
{\edef\alignmentclass{#1}%
\edef\alignmentcharacter{\tbltblalignmentcharacter}%
- \ifcase\TBLpass\or
+ \ifcase\tblpass\or
\setfirstpasscharacteralign\checkalignment{#2}% {\strut#2\unskip}%
\fi % force hsize, so always a second
\setsecondpasscharacteralign \checkalignment{#2}% {\strut#2\unskip}%
@@ -1362,7 +1261,7 @@
[\@@tbl\@@tbl]
[#3,\c!background=,\c!frame=\v!off]% 25% faster
{\bTBLCELL\TBLcharalign{#2}{#4}\eTBLCELL\inTBLcell{#1}{#2}}}%
- \scratchdimen\gettblwid\colTBL\relax
+ \scratchdimen\gettblwid\tblcol\relax
\ifdim\wd\scratchbox>\scratchdimen
\ifsqueezeTBLspan
\ifautosqueezeTBLspan
@@ -1371,34 +1270,34 @@
\else
\donetrue
\fi
- \ifdone
- \ifnum0\number\gettblcol{#1}{#2}>1\relax \settblspn\colTBL \fi
+ \ifdone % brr, 0
+ \ifnum\number\gettblcol{#1}{#2}>\plusone \settblspn\tblcol\fi
\fi
\fi
- \doifelsetblspn\colTBL
+ \doifelsetblspn\tblcol
\donothing
- {\ifdim\gettblwid\colTBL<\wd\scratchbox
- \settblwid\colTBL{\the\wd\scratchbox}%
+ {\ifdim\gettblwid\tblcol<\wd\scratchbox
+ \settblwid\tblcol{\the\wd\scratchbox}%
\fi}% auto set
\fi
- \let\rowTBLx\rowTBL\increment\rowTBLx
- \scratchdimen\gettblhei\rowTBLx\relax
+ \scratchcounter\numexpr\tblrow+\plusone\relax
+ \scratchdimen\gettblhei\scratchcounter\relax
\ifdim\ht\scratchbox<\scratchdimen
- \settblhei\rowTBLx{\the\ht\scratchbox}% auto set
+ \settblhei\scratchcounter{\the\ht\scratchbox}% auto set
\fi
\settblht{#1}{#2}{\the\ht\scratchbox}%
\settblwd{#1}{#2}{\the\wd\scratchbox}%
\ifautoTBLcheckwidth
\ifdim\wd\scratchbox<.75\hsize
\ifdim\ht\scratchbox>2\openlineheight % honor width since this
- \scratchdimen\gettblaut\colTBL\relax % can be a figure or so
+ \scratchdimen\gettblaut\tblcol\relax % can be a figure or so
\ifdim\scratchdimen=\zeropoint
% side effect: when width is set to 0pt,
% we can force a span that fits the sum of spans widths
- \settblaut\colTBL{\the\scratchdimen}%
+ \settblaut\tblcol{\the\scratchdimen}%
\else\ifdim\wd\scratchbox>\scratchdimen
% unless span
- \settblaut\colTBL{\the\wd\scratchbox}%
+ \settblaut\tblcol{\the\wd\scratchbox}%
% to be translated
\writestatus\m!TABLE
{no auto width in (\number#1,\number#2)\space\the\wd\scratchbox/\the\hsize}%
@@ -1421,28 +1320,32 @@
\setbox2\null
\wd2\wd\scratchbox \ht2\ht\scratchbox \dp2\dp\scratchbox
\ifautoTBLrowspan
- \let\rowTBLx\rowTBL\increment\rowTBLx
- \scratchdimen\gettblhei\rowTBLx\relax
- \ifnum\gettblrow\rowTBLx\colTBL>1 \ifdim\ht\scratchbox>\scratchdimen
- \scratchdimen-\scratchdimen \advance\scratchdimen -\ht\scratchbox
- \ht2\scratchdimen
- \fi \fi
+ \scratchcounter\numexpr\tblrow+\plusone\relax
+ \doiftblrow\scratchcounter\tblcol
+ {\scratchdimen\gettblhei\scratchcounter\relax % moved inside test
+ \ifnum\gettblrow\scratchcounter\tblcol>\plusone \ifdim\ht\scratchbox>\scratchdimen
+ \scratchdimen-\scratchdimen \advance\scratchdimen -\ht\scratchbox
+ \ht2\scratchdimen
+ \fi \fi}%
\fi
\box2 }
\long\def\dohandleTBLcellB#1#2[#3]#4%
- {\scratchdimen\gettblaut\colTBL\relax
+ {\scratchdimen\gettblaut\tblcol\relax
\ifdim\scratchdimen>\zeropoint\relax
- \let\tblwidthkey\c!width \edef\tblwidth{\the\scratchdimen}%
+ \let\tblwidthkey\c!width
+ \edef\tblwidth{\the\scratchdimen}%
\else
- \scratchdimen\gettblwid\colTBL\relax
+ \scratchdimen\gettblwid\tblcol\relax
\ifdim\scratchdimen>\zeropoint\relax
\ifnum\gettblcol{#1}{#2}=\maximumcol\relax
\scratchdimen\hsize
\fi
- \let\tblwidthkey\c!width \edef\tblwidth{\the\scratchdimen}%
+ \let\tblwidthkey\c!width
+ \edef\tblwidth{\the\scratchdimen}%
\else
- \let\tblwidthkey\s!unknown \let \tblwidth \!!zeropoint
+ \let\tblwidthkey\s!unknown
+ \let\tblwidth\zeropoint
\fi
\fi
\dohandleTBLcellBC{\tblwidthkey=\tblwidth}{#1}{#2}[#3]{\TBLcharalign{#2}{#4}}}
@@ -1507,27 +1410,11 @@
%D We have already prepared the previous macros for nesting,
%D so we only have to pop in the right ones:
-%D Redefined:
-
-\newcounter\TBLlevel
-
-\def\@@tblprefix{\@@tbl:\ifnum\TBLlevel>1 :\TBLlevel:\fi}
-
-\long\def\settbltxt#1#2#3%
- {\setxvalue{\@@tblprefix#1:#2:l}{\TBLlevel}%
- \long\setvalue{\@@tblprefix#1:#2:t}%
- {\doifdefined{\@@tblprefix#1:#2:l}
- {\edef\TBLlevel{\getvalue{\@@tblprefix#1:#2:l}}}%
- #3}}
-
-\def\gettbltxt#1#2%
- {\getvalue{\@@tblprefix#1:#2:t}}
-
%D New:
\def\pushTBLparameters
{\globalpushmacro\TBLlevel
- \ifcase\TBLpass
+ \ifcase\tblpass
% we're just after \bTABLE
\else\ifnum\TBLlevel>\zerocount
\doglobal\increment\TBLlevel\relax
@@ -1538,21 +1425,22 @@
\def\pushTBL
{\ifnum\TBLlevel=\zerocount
- \doglobal\increment\currenttbl\relax
+ \global\advance\currenttbl\plusone
\fi
\doglobal\increment\TBLlevel\relax
\ifnum\TBLlevel>\plusone
\resetallTABLEparameters
- \globalpushmacro\colTBL
- \globalpushmacro\rowTBL
+ % we need a proper count push/pop
+ \xdef\savedtblrow{\the\tblrow}\globalpushmacro\savedtblrow
+ \xdef\savedtblcol{\the\tblcol}\globalpushmacro\savedtblcol
\else
\global\intabletrue
\fi}
\def\popTBL
{\ifnum\TBLlevel>\plusone
- \globalpopmacro\rowTBL
- \globalpopmacro\colTBL
+ \globalpopmacro\savedtblrow\global\tblrow\savedtblrow
+ \globalpopmacro\savedtblcol\global\tblcol\savedtblcol
\else
\global\intablefalse
\fi
@@ -1671,3 +1559,5 @@
{\bTR[]#2\eTR}}
\protect \endinput
+
+% todo: mode: first|next (of niets)
diff --git a/Master/texmf-dist/tex/context/base/core-num.tex b/Master/texmf-dist/tex/context/base/core-num.tex
index 442333acf48..3f75b93d079 100644
--- a/Master/texmf-dist/tex/context/base/core-num.tex
+++ b/Master/texmf-dist/tex/context/base/core-num.tex
@@ -147,6 +147,10 @@
{\getvalue{\@@thenumber{#1}\c!n}}
\let\getnumber\convertednumber
+
+\def\doifdefinednumber #1{\doifdefined {\csname\s!number#1\c!number\endcsname}}
+\def\doifundefinednumber #1{\doifundefined {\csname\s!number#1\c!number\endcsname}}
+\def\doifdefinednumberelse#1{\doifdefinedelse{\csname\s!number#1\c!number\endcsname}}
\ifx\checknumber\undefined \def\checknumber[#1]{} \fi
diff --git a/Master/texmf-dist/tex/context/base/core-obj.lua b/Master/texmf-dist/tex/context/base/core-obj.lua
new file mode 100644
index 00000000000..b94719993f2
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/core-obj.lua
@@ -0,0 +1,36 @@
+if not modules then modules = { } end modules ['core-obj'] = {
+ version = 1.001,
+ comment = "companion to core-obj.tex",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+--[[ldx--
+<p>We save object references in the main utility table. Objects are
+reusable components.</p>
+--ldx]]--
+
+if not jobs then jobs = { } end
+if not job then jobs['main'] = { } end job = jobs['main']
+if not job.objects then job.objects = { } end
+
+function job.getobjectreference(tag,default)
+ if job.objects[tag] then
+ tex.sprint(job.objects[tag][1] or default)
+ else
+ tex.sprint(default)
+ end
+end
+
+function job.getobjectreferencepage(tag,default)
+ if job.objects[tag] then
+ tex.sprint(job.objects[tag][2] or default)
+ else
+ tex.sprint(default)
+ end
+end
+
+function job.doifobjectreference(tag)
+ cs.testcase(job.objects[tag])
+end
diff --git a/Master/texmf-dist/tex/context/base/core-obj.mkii b/Master/texmf-dist/tex/context/base/core-obj.mkii
index efc16655591..361c1a9798a 100644
--- a/Master/texmf-dist/tex/context/base/core-obj.mkii
+++ b/Master/texmf-dist/tex/context/base/core-obj.mkii
@@ -13,7 +13,7 @@
\unprotect
-\def\checkobjectreferences
+\def\mkcheckobjectreferences
{\startnointerference
\protectlabels
\doutilities{objectreferences}\jobname\empty\relax\relax
diff --git a/Master/texmf-dist/tex/context/base/core-obj.mkiv b/Master/texmf-dist/tex/context/base/core-obj.mkiv
new file mode 100644
index 00000000000..022b6908d45
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/core-obj.mkiv
@@ -0,0 +1,55 @@
+%D \module
+%D [ file=core-obj,
+%D version=2006.10.16,
+%D title=\CONTEXT\ Core Macros,
+%D subtitle=Object Handling,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\unprotect
+
+\let\objectreference\gobblefourarguments % catch mkii tuo stuff
+
+\registerctxluafile{core-obj}{1.001}
+
+\appendtoks
+ \immediatewriteutilitytua{if not job.objects then job.objects = { } end}%
+ \immediatewriteutilitytua{local ob = job.objects}%
+\to \everyopenutilities
+
+\def\mkregisterobjectreference#1#2#3%
+ {\blabelgroup
+ \expanded{\writeutilitytua{ob['#1::#2']={"#3","\noexpand\realfolio"}}}%
+ \expanded{\ctxlua{job.objects['#1::#2']={"#3","\noexpand\realfolio"}}}%
+ \elabelgroup}
+
+\def\mkoverloadobjectreference#1#2#3%
+ {\blabelgroup
+ \expanded{\ctxlua{job.objects['#1::#2']={"#3","\noexpand\realfolio"}}}%
+ \elabelgroup}
+
+\def\mkgetobjectreference#1#2#3%
+ {\blabelgroup
+ \xdef#3{\ctxlua{job.getobjectreference ('#1::#2',"\defaultobjectreference{#1}{#2}")}}%
+ \elabelgroup}
+
+\def\mkgetobjectreferencepage#1#2#3%
+ {\blabelgroup
+ \xdef#3{\ctxlua{job.getobjectreferencepage('#1::#2',"\defaultobjectpage{#1}{#2}")}}%
+ \elabelgroup}
+
+% \def\doifobjectreferencefoundelse#1#2
+% {\ctxlua{job.doifobjectreference('#1::#2')}}
+
+\def\doifobjectreferencefoundelse#1#2%
+ {\blabelgroup
+ \ctxlua{job.doifobjectreference('#1::#2')}%
+ {\elabelgroup\firstoftwoarguments}
+ {\elabelgroup\secondoftwoarguments}}
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/core-obj.tex b/Master/texmf-dist/tex/context/base/core-obj.tex
index 8741c396855..a1b0796d1ab 100644
--- a/Master/texmf-dist/tex/context/base/core-obj.tex
+++ b/Master/texmf-dist/tex/context/base/core-obj.tex
@@ -91,6 +91,10 @@
\newif\ifinobject
+\ifx\mkcheckobjectreferences\undefined \let\mkcheckobjectreferences\relax \fi
+
+\def\checkobjectreferences{\mkcheckobjectreferences}
+
\def\objectplaceholder{NOT YET FLUSHED}%
\def\presetobject#1#2% \global added
@@ -114,6 +118,16 @@
{\checkobjectreferences
\letbeundefined{\r!object#1::#2}}
+%D \macros
+%D {finalizeobjectbox}
+%D
+%D This one provides a hook for last minute object box processing
+%D we need this in \MKIV.
+
+\ifx\finalizeobjectbox\undefined
+ \let\finalizeobjectbox\gobbleoneargument
+\fi
+
%D Somehow there is a rounding error problem in either \PDFTEX\
%D or in viewers, or maybe it is conforming the specs. The next
%D variable compensate for it by removing the rather tight
diff --git a/Master/texmf-dist/tex/context/base/core-par.tex b/Master/texmf-dist/tex/context/base/core-par.tex
index 403aeca6f22..aa58ebb1ed7 100644
--- a/Master/texmf-dist/tex/context/base/core-par.tex
+++ b/Master/texmf-dist/tex/context/base/core-par.tex
@@ -114,10 +114,10 @@
\ifx#1\undefined
\let#1\relax
\fi
- \convertargument#1\to\asciia
- \convertargument{ }\to\asciib % lege regel
+ \defconvertedargument\asciia{#1}%
+ \defconvertedargument\asciib{ }% % lege regel
\def\dopushparagraph##1\par
- {\convertargument##1\to\asciic
+ {\defconvertedargument\asciic{##1}%
\doifelse\asciic\asciia
{#1}
{\doifsomething\asciic % lege paragraaf
diff --git a/Master/texmf-dist/tex/context/base/core-pgr.tex b/Master/texmf-dist/tex/context/base/core-pgr.tex
index 22015fb3e03..658bd07d1a8 100644
--- a/Master/texmf-dist/tex/context/base/core-pgr.tex
+++ b/Master/texmf-dist/tex/context/base/core-pgr.tex
@@ -278,15 +278,17 @@
\prepareMPvariables{#2}%
\prepareMPpositionvariables
\enableincludeMPgraphics
- \ifcollectMPpositiongraphics
+ \ifcollectMPpositiongraphics % no longer needed in mkiv
\expanded{\startMPdrawing#3\noexpand\stopMPdrawing}%
\global\MPdrawingdonetrue
+ \else\ifx\startMPgraphic\undefined
+ \startMPcode#3\stopMPcode
\else
\startMPgraphic#3\stopMPgraphic
\loadMPgraphic{\MPgraphicfile.\the\currentMPgraphic}{}%
\deallocateMPslot\currentMPgraphic
\placeMPgraphic
- \fi
+ \fi\fi
\egroup}
% Now we need a adapted action handler:
@@ -498,6 +500,7 @@
gridtype=0,
linetype=1,
filltype=1,
+ dashtype=0, % 1 = dashed, 2 = dashed with background
%snaptops=true, % not that nice: true/false
gridcolor=red,
linecolor=blue,
@@ -505,7 +508,9 @@
filloffset=\!!zeropoint,
linewidth=\linewidth,
gridwidth=\linewidth,
- lineradius=.5\bodyfontsize]
+ gridshift=\!!zeropoint,
+ lineradius=.5\bodyfontsize,
+ dashtype=1]
\startuseMPgraphic{mpos:par:shape}
\iftracepositions show_par \else draw_par \fi ;
@@ -515,12 +520,14 @@
boxgridtype := \MPvar{gridtype} ;
boxlinetype := \MPvar{linetype} ;
boxfilltype := \MPvar{filltype} ;
+ boxdashtype := \MPvar{dashtype} ;
boxgridcolor := \MPvar{gridcolor} ;
boxlinecolor := \MPvar{linecolor} ;
boxfillcolor := \MPvar{fillcolor} ;
boxfilloffset := \MPvar{filloffset} ;
boxlinewidth := \MPvar{linewidth} ;
boxgridwidth := \MPvar{gridwidth} ;
+ boxgridshift := \MPvar{gridshift} ;
boxlineradius := \MPvar{lineradius} ;
%snap_multi_par_tops := \MPvar{snaptops} ;
\stopuseMPgraphic
@@ -545,7 +552,7 @@
\edef\MPparcounter{\MPv\MPbself{1}{0}}%
\doifpositionelse\MPwself
{\startMPpositiongraphic{mpos:par}%
- {fillcolor,filloffset,linecolor,gridcolor,linewidth,gridwidth,lineradius}
+ {fillcolor,filloffset,linecolor,gridcolor,linewidth,gridwidth,gridshift,lineradius}
initialize_area_par(\MPpos\MPbself,
\MPpos\MPeself,
\MPpos\MPwself) ;
@@ -555,7 +562,7 @@
anchor_par(\MPanchor\MPbself) ;
\stopMPpositiongraphic}
{\startMPpositiongraphic{mpos:par}%
- {fillcolor,filloffset,linecolor,gridcolor,linewidth,gridwidth,lineradius}
+ {fillcolor,filloffset,linecolor,gridcolor,linewidth,gridwidth,gridshift,lineradius}
initialize_par(\MPpos\MPbself,
\MPpos\MPeself,
\MPpos\textanchor,
@@ -577,6 +584,14 @@
\iftracepositions show_multi_pars \else draw_multi_pars \fi ;
\stopuseMPgraphic
+\startuseMPgraphic{mpos:par:sideline}{linecolor,lineoffset}
+ for i=1 upto nofmultipars :
+ fill leftboundary multipars[i]
+ shifted (-\MPvar{lineoffset},0)
+ rightenlarged 1mm withcolor \MPvar{linecolor} ;
+ endfor ;
+\stopuseMPgraphic
+
\startMPpositionmethod{mpos:par:columnset}
\edef\MPparcounter{\MPv\MPbself{1}{0}}%
\startMPpositiongraphic{mpos:par}%
@@ -596,7 +611,7 @@
%D \setupbackground
%D [test]
%D [mp=mpos:par:columnset,
-%D methodmethode=mpos:par:columnset]
+%D method=mpos:par:columnset]
%D \stoptyping
%D We need to treat floats in a special way.
@@ -615,10 +630,10 @@
%D So far for the trickery.
-\newcounter\textbackgrounddepth
+\newcount\textbackgrounddepth
\appendtoks
- \savecurrentvalue\totalnofparbackgrounds\nofparbackgrounds
+ \expanded{\savecurrentvalue\noexpand\totalnofparbackgrounds{\number\nofparbackgrounds}}%
\to \everybye
\appendtoks
@@ -626,7 +641,7 @@
\to \everystarttext
\ifx\totalnofparbackgrounds\undefined \newcounter\totalnofparbackgrounds \fi
-\ifx\nofparbackgrounds \undefined \newcounter\nofparbackgrounds \fi
+\ifx\nofparbackgrounds \undefined \newcount \nofparbackgrounds \fi
\def\initializeparbackgrounds
{\ifcase\totalnofparbackgrounds\else
@@ -636,7 +651,7 @@
\unexpanded\def\starttextbackground
{\bgroup
- \increment\textbackgrounddepth
+ \advance\textbackgrounddepth\plusone
\dodoubleempty\dostarttextbackground}
\let\dodostarttextbackground\relax
@@ -651,9 +666,11 @@
\def\nextbtbanchor{b:\nextparbackground}
\def\nextetbanchor{e:\nextparbackground}
-\def\backgroundvariable#1%
+\def\textbackgroundparameter#1%
{\csname\??td\currenttextbackground#1\endcsname}
+\let\backgroundvariable\textbackgroundparameter % will become obsolete
+
% \definetextbackground[more][state=start,backgroundcolor=red] % location=paragraph
% \definetextbackground[test][state=start,backgroundcolor=green]
%
@@ -680,27 +697,25 @@
\def\dostarttextbackground[#1][#2]%
{\checktextbackgrounds
\def\currenttextbackground{#1}%
- \doglobal\increment\nofparbackgrounds
- %\edef\currentparbackground{background:\nofparbackgrounds}%
- \edef\currentparbackground{pbg:\nofparbackgrounds}%
- \bgroup
- \increment\nofparbackgrounds
- %\xdef\nextparbackground{background:\nofparbackgrounds}%
- \xdef\nextparbackground{pbg:\nofparbackgrounds}%
- \egroup
+ \global\advance\nofparbackgrounds\plusone
+ \edef\currentparbackground{pbg:\number\nofparbackgrounds}%
+% \bgroup
+% \advance\nofparbackgrounds\plusone
+% \xdef\nextparbackground{pbg:\number\nofparbackgrounds}%
+% \egroup
+ \xdef\nextparbackground{pbg:\number\numexpr\nofparbackgrounds+\plusone\relax}% still xdef ?
% todo : \synchonizepositionpage{b:\currentparbackground}{s:\currentparbackground}%
\setuptextbackground[#1][#2]%
\let\dodostarttextbackground\relax
\let\dodostoptextbackground \relax
- \doifvalue{\??td#1\c!state}\v!start
- {\dopresettextbackground{#1}}%
+ \doif{\textbackgroundparameter\c!state}\v!start{\dopresettextbackground{#1}}%
\dodostarttextbackground}
% todo \backgroundvariable\c!variant
\def\dopresettextbackground#1% todo: \backgroundparameter
{\ExpandFirstAfter\processaction % \EFA niet echt nodig
- [\getvalue{\??td#1\c!location}]
+ [\textbackgroundparameter\c!location]
[ \v!text=>\let\dodostarttextbackground\dostarttextbackgroundtxt
\let\dodostoptextbackground \dostoptextbackgroundtxt,
\v!paragraph=>\let\dodostarttextbackground\dostarttextbackgroundpar
@@ -713,33 +728,36 @@
\let\dodostoptextbackground \dostoptextbackgroundtxt
\fi
\fi
- \doifelsevalue{\??td#1\c!frame}\v!on
- {\doifelsevalue{\??td#1\c!corner}\v!round
+ \doifelse{\textbackgroundparameter\c!frame}\v!on
+ {\doifelse{\textbackgroundparameter\c!corner}\v!round
{\setvalue{\??td#1\c!frame}{2}}
{\setvalue{\??td#1\c!frame}{1}}}
{\setvalue{\??td#1\c!frame}{0}}%
- \doifelsevalue{\??td#1\c!background}\v!color
+ \doifelse{\textbackgroundparameter\c!background}\v!color
{\setvalue{\??td#1\c!background}{1}}
{\setvalue{\??td#1\c!background}{0}}%
%\startpositionoverlay{\v!text\getvalue{\??td#1\c!level}}%
- \startpositionoverlay{\textbackgroundoverlay{\getvalue{\??td#1\c!level}}}%
+ \startpositionoverlay{\textbackgroundoverlay{\textbackgroundparameter\c!level}}%
\expanded
{\setMPpositiongraphicrange % moet veel efficienter
{\btbanchor}% {b:\currentparbackground}%
{\etbanchor}% {e:\currentparbackground}%
- {\getvalue{\??td#1\c!method}}%
+ {\textbackgroundparameter\c!method}%
{self=\currentparbackground,
- mp=\getvalue{\??td#1\c!mp},
- gridtype=\getvalue{\??td#1\c!alternative},
- filltype=\getvalue{\??td#1\c!background},
- linetype=\getvalue{\??td#1\c!frame},
- gridcolor=\getvalue{\??td#1\c!framecolor},
- linecolor=\getvalue{\??td#1\c!framecolor},
- fillcolor=\getvalue{\??td#1\c!backgroundcolor},
- filloffset=\getvalue{\??td#1\c!backgroundoffset},
- gridwidth=\getvalue{\??td#1\c!rulethickness},
- linewidth=\getvalue{\??td#1\c!rulethickness},
- lineradius=\getvalue{\??td#1\c!radius}}}%
+ mp=\textbackgroundparameter\c!mp,
+ gridtype=\textbackgroundparameter\c!alternative,
+ filltype=\textbackgroundparameter\c!background,
+ linetype=\textbackgroundparameter\c!frame,
+ dashtype=\textbackgroundparameter{dash}, % to be internationalized
+ gridcolor=\textbackgroundparameter\c!framecolor,
+ linecolor=\textbackgroundparameter\c!framecolor,
+ lineoffset=\textbackgroundparameter\c!frameoffset,
+ fillcolor=\textbackgroundparameter\c!backgroundcolor,
+ filloffset=\textbackgroundparameter\c!backgroundoffset,
+ gridwidth=\textbackgroundparameter\c!rulethickness,
+ gridshift=\textbackgroundparameter\c!voffset,
+ linewidth=\textbackgroundparameter\c!rulethickness,
+ lineradius=\textbackgroundparameter\c!radius}}%
\stoppositionoverlay}
\def\stoptextbackground
@@ -755,7 +773,7 @@
\dostopattributes}
\def\dostarttextbackgroundtxt
- {\ifvmode \leavevmode \fi
+ {\ifvmode \dontleavehmode \fi % was leavevmode, brrr
\dostartattributes{\??td\currenttextbackground}\c!style\c!color\empty
\fpos\currentparbackground\ignorespaces}
@@ -796,8 +814,8 @@
\def\dostarttextbackgroundpar
{\endgraf % new
- \getvalue{\??td\currenttextbackground\c!before}%
- \doassignsomeskip\getvalue{\??td\currenttextbackground\c!topoffset}\to\scratchskip
+ \textbackgroundparameter\c!before
+ \doassignsomeskip\textbackgroundparameter\c!topoffset\to\scratchskip
\xdef\textbackgroundskip{\the\scratchskip}%
\noindent
\ifgridsnapping
@@ -812,16 +830,16 @@
\bgroup
\endgraf % we need a vertical nobreak - 29/06/2004
\nobreak \vskip-\lineheight \nobreak
- \doassignsomeskip\getvalue{\??td\currenttextbackground\c!topoffset}\to\scratchskip
+ \doassignsomeskip\textbackgroundparameter\c!topoffset\to\scratchskip
\ifgridsnapping \else \ifdim\textbackgroundskip>\zeropoint
\kern\textbackgroundskip\nobreak
\fi \fi
- \dosetleftskipadaption{\getvalue{\??td\currenttextbackground\c!leftoffset}}%
+ \dosetleftskipadaption{\textbackgroundparameter\c!leftoffset}%
\advance\leftskip\leftskipadaption
- \dosetleftskipadaption{\getvalue{\??td\currenttextbackground\c!rightoffset}}%
+ \dosetleftskipadaption{\textbackgroundparameter\c!rightoffset}%
\advance\rightskip\leftskipadaption
% new
- \dosetraggedcommand{\getvalue{\??td\currenttextbackground\c!align}}%
+ \dosetraggedcommand{\textbackgroundparameter\c!align}%
\raggedcommand
%
\dostartattributes{\??td\currenttextbackground}\c!style\c!color\empty
@@ -835,7 +853,7 @@
{\par
\removelastskip % new
\dostopattributes
- \doassignsomeskip\getvalue{\??td\currenttextbackground\c!bottomoffset}\to\scratchskip
+ \doassignsomeskip\textbackgroundparameter\c!bottomoffset\to\scratchskip
\ifdim\lastskip>\zeropoint
\advance\scratchskip-\lastskip
\fi
@@ -859,7 +877,7 @@
\fi
\egroup
\endgraf % new
- \getvalue{\??td\currenttextbackground\c!after}}
+ \textbackgroundparameter\c!after}
\let\textparpages \!!zeropoint
\let\textparheight\!!zeropoint
@@ -941,8 +959,8 @@
\copyparameters[\??td#1][\??td]
[\c!state,\c!location,\c!alternative,\c!mp,\c!method,
\c!background,\c!backgroundcolor,\c!corner,\c!level,
- \c!backgroundoffset,\c!before,\c!after,\c!align,
- \c!radius,\c!frame,\c!framecolor,\c!rulethickness,
+ \c!backgroundoffset,\c!before,\c!after,\c!align,dash, % dash not yet internationalized
+ \c!radius,\c!frame,\c!framecolor,\c!rulethickness,\c!voffset,\c!frameoffset,
\c!leftoffset,\c!rightoffset,\c!topoffset,\c!bottomoffset]%
\getparameters[\??td#1][#2]%
\doifvalue{\??td#1\c!state}\v!start\checktextbackgrounds
@@ -983,17 +1001,19 @@
\c!state=\v!start,
\c!location=\v!text,
\c!leftoffset=\!!zeropoint, % 1em,
- \c!rightoffset=\getvalue{\??td\currenttextbackground\c!leftoffset},
+ \c!rightoffset=\textbackgroundparameter\c!leftoffset,
\c!topoffset=\!!zeropoint, % \v!medium,
- \c!bottomoffset=\getvalue{\??td\currenttextbackground\c!topoffset},
+ \c!bottomoffset=\textbackgroundparameter\c!topoffset,
\c!level=-1,
\c!alternative=0,
\c!align=,
+ dash=0, % to be internationalized
\c!background=\v!color,
\c!backgroundcolor=lightgray,
\c!backgroundoffset=\!!zeropoint,
\c!corner=\v!rectangular,
\c!radius=.5\bodyfontsize,
+ \c!voffset=\!!zeropoint,
\c!frame=\v!on,
\c!framecolor=blue,
\c!rulethickness=\linewidth]
@@ -1082,18 +1102,18 @@
\def\stackposdistance{.5em}
-\newcounter\currentautopos
+\newcount\currentautopos
+\newcount\previousautopos
\def\POSstackprefix{stack:}
\def\dostackposbox#1#2%
{\dowithnextbox
- {#2{\let\previousautopos\currentautopos
- \doglobal\increment\currentautopos
- \hpos{\POSstackprefix\currentautopos}
- {\doifoverlappingelse{\POSstackprefix\currentautopos}{\POSstackprefix\previousautopos}
- {#1}
- {\flushnextbox}}}}%
+ {#2{\previousautopos\currentautopos
+ \global\advance\currentautopos\plusone
+ \edef\currentposition {\POSstackprefix\number\currentautopos}%
+ \edef\previousposition{\POSstackprefix\number\previousautopos}%
+ \hpos\currentposition{\doifoverlappingelse\currentposition\previousposition{#1}{\flushnextbox}}}}%
\hbox}
\def\stackposup {\dostackposbox{\raise\lineheight\flushnextbox}}
@@ -1109,30 +1129,6 @@
%D margin settings. When set to \type {yes}, this macro comes
%D into action.
-% \def\stackeddown
-% {\dowithnextbox
-% {\doglobal\increment\currentautopos
-% \hpos{\POSstackprefix\currentautopos}
-% {\edef\next
-% {\nextboxht\the\nextboxht
-% \nextboxdp\the\nextboxdp
-% \nextboxwd\the\nextboxwd}%
-% \let\previousautopos\currentautopos
-% \scratchdimen\zeropoint
-% \doloop
-% {\decrement\previousautopos
-% \doifoverlappingelse{\POSstackprefix\currentautopos}{\POSstackprefix\previousautopos}
-% {\advance\scratchdimen\MPh{\POSstackprefix\previousautopos}%
-% \advance\scratchdimen\MPd{\POSstackprefix\previousautopos}}%
-% \exitloop
-% \ifnum\previousautopos<\zerocount\exitloop\fi}%
-% % \ifdim\scratchdimen>\zeropoint
-% \setbox\nextbox\iftracepositions\@EA\ruledhbox\else\@EA\hbox\fi
-% {\lower\scratchdimen\flushnextbox}%
-% \next
-% % \fi
-% \flushnextbox}}}
-
% Because there can be many stacked items in a line and successive lines, we
% play dirty and adapt the position and height of the current node so that
% this becomes visible to a next pass.
@@ -1186,30 +1182,31 @@
{\bgroup
% this macro assumes a few things and is meant to work for margin notes
\dowithnextbox
- {\doglobal\increment\currentautopos
+ {\global\advance\currentautopos\plusone
\global\laststackvmove\zeropoint
- \hpos{\POSstackprefix\currentautopos}
+ \hpos{\POSstackprefix\number\currentautopos}
{\edef\next
{\nextboxht\the\nextboxht
\nextboxdp\the\nextboxdp
\nextboxwd\the\nextboxwd}%
- \let\previousautopos\currentautopos
+ \previousautopos\currentautopos
\scratchdimen\zeropoint
\scratchcounter\zerocount
\doloop
- {\decrement\previousautopos\relax
- \edef\currentposition {\POSstackprefix\currentautopos}%
- \edef\previousposition{\POSstackprefix\previousautopos}%
+ {\advance\previousautopos\minusone
+ \edef\currentposition {\POSstackprefix\number\currentautopos}%
+ \edef\previousposition{\POSstackprefix\number\previousautopos}%
\ifnum\MPp\currentposition=\MPp\previousposition\relax
- %\registerstatus{doing \currentautopos/\previousautopos}%
+ %\registerstatus{doing \number\currentautopos/\number\previousautopos}%
\doifoverlappingelse\currentposition\previousposition
- {\scratchskip \MPy\currentposition
- \advance\scratchskip-\MPy\previousposition
- \advance\scratchskip-\MPd\currentposition % untested
- \advance\scratchskip \MPd\previousposition % untested
- \advance\scratchskip \MPh\currentposition
- % todo: also take depth into account
+ {\scratchskip\dimexpr
+ \MPy\currentposition
+ -\MPy\previousposition
+ -\MPd\currentposition % untested
+ +\MPd\previousposition % untested
+ +\MPh\currentposition
\relax
+ % todo: also take depth into account
\ifdim\scratchskip<\scratchdimen
%\registerstatus{no \the\scratchskip}%
\else
@@ -1223,16 +1220,16 @@
\fi}%
\ifdim\scratchdimen=\zeropoint \else
\bgroup
- \edef\currentposition{\POSstackprefix\currentautopos}%
+ \edef\currentposition{\POSstackprefix\number\currentautopos}%
\scratchskip\scratchdimen
\advance\scratchskip\MPh\currentposition
\scratchdimen-\scratchdimen
\advance\scratchdimen\MPy\currentposition
- %\registerstatus{old \currentautopos: \MPy\currentposition/\MPh\currentposition}%
+ %\registerstatus{old \number\currentautopos: \MPy\currentposition/\MPh\currentposition}%
\expanded{\replacepospxywhd
{\currentposition}{\MPp\currentposition}{\MPx\currentposition}{\the\scratchdimen}%
{\MPw\currentposition}{\the\scratchskip}{\MPd\currentposition}}%
- %\registerstatus{new \currentautopos: \MPy\currentposition/\MPh\currentposition}%
+ %\registerstatus{new \number\currentautopos: \MPy\currentposition/\MPh\currentposition}%
\egroup
\global\laststackvmove\scratchdimen % new
\setbox\nextbox\iftracepositions\@EA\ruledhbox\else\@EA\hbox\fi
@@ -1242,96 +1239,53 @@
\fi
\flushnextbox}%
\egroup}}
-
+
%D The next hack make sure that margin texts near faulty
%D strutted lines are handled ok.
\newif\ifrepositionmarginbox \repositionmarginboxtrue
-\newcounter\currentmarginpos
-
-% \def\dopositionmarginbox#1%
-% {\bgroup
-% \ifrepositionmarginbox
-% \doglobal\increment\currentmarginpos
-% \setposition{\s!margin:\currentmarginpos}%
-% \scratchdimen=\MPy{\s!margin:\currentmarginpos}%
-% \doglobal\increment\currentmarginpos
-% \advance\scratchdimen by -\MPy{\s!margin:\currentmarginpos}%
-% \advance\scratchdimen by -\strutdp
-% \setbox#1=\hbox
-% {\setposition{\s!margin:\currentmarginpos}\raise\scratchdimen\box#1}%
-% \dp#1=\!!zeropoint
-% \ht#1=\!!zeropoint
-% \fi
-% \vadjust{\box#1}%
-% \egroup}
-
-% \def\dopositionmarginbox#1% how about page boundaries !
-% {\bgroup
-% \ifrepositionmarginbox
-% \doglobal\increment\currentmarginpos
-% \setposition{\s!margin:\currentmarginpos}%
-% \scratchdimen\MPy{\s!margin:\currentmarginpos}%
-% \doglobal\increment\currentmarginpos
-% \advance\scratchdimen -\MPy{\s!margin:\currentmarginpos}%
-% \advance\scratchdimen -\strutdp
-% % new
-% \setbox#1\hbox
-% {\hskip-\MPx{\s!margin:\currentmarginpos}%
-% \hskip\MPx{head:\realfolio}%
-% \box#1}%
-% % so far
-% \setbox#1\hbox
-% {\setposition{\s!margin:\currentmarginpos}%
-% \raise\scratchdimen\box#1}%
-% \dp#1\zeropoint
-% \ht#1\zeropoint
-% \fi
-% \graphicvadjust{\box#1}%
-% \egroup}
+\newcount\currentmarginpos
\def\dopositionmarginbox#1%
{\bgroup
\ifrepositionmarginbox
- \doglobal\increment\currentmarginpos
- \setposition{\s!margin:\currentmarginpos}%
+ \global\advance\currentmarginpos\plusone
+ \setposition{\s!margin:\number\currentmarginpos}%
\ifcase\marginrepositionmethod
% nothing
\or
% nothing
\or
% stack / page check yet untested
-% \scratchcounter\MPp{\s!margin:\currentmarginpos}\relax
- \scratchdimen\MPy{\s!margin:\currentmarginpos}%
- \doglobal\increment\currentmarginpos
- \advance\scratchdimen -\MPy{\s!margin:\currentmarginpos}%
+ \scratchdimen\MPy{\s!margin:\number\currentmarginpos}%
+ \global\advance\currentmarginpos\plusone
+ \advance\scratchdimen -\MPy{\s!margin:\number\currentmarginpos}%
\advance\scratchdimen -\strutdp
-% \ifnum\scratchcounter=\MPp{\s!margin:\currentmarginpos}\relax
% new
- \setbox#1\hbox
- {\hskip-\MPx{\s!margin:\currentmarginpos}%
- \hskip\MPx{head:\realfolio}%
- \box#1}%
+% bugged
+% \setbox#1\hbox
+% {\hskip-\MPx{\s!margin:\number\currentmarginpos}%
+% \hskip\MPx{head:\realfolio}%
+% \box#1}%
% so far
\setbox#1\hbox
- {\setposition{\s!margin:\currentmarginpos}%
+ {\setposition{\s!margin:\number\currentmarginpos}%
\raise\scratchdimen\box#1}%
-% \fi
\or
% move up
- \ifnum\MPp{p:\parposcounter}=\MPp{\s!margin:\currentmarginpos}\relax
- \scratchdimen\dimexpr\MPy{p:\parposcounter}-\MPy{\s!margin:\currentmarginpos}\relax
+ \ifnum\MPp{p:\number\parposcounter}=\MPp{\s!margin:\number\currentmarginpos}\relax
+ \scratchdimen\dimexpr\MPy{p:\number\parposcounter}-\MPy{\s!margin:\number\currentmarginpos}\relax
\expanded{\setbox#1\hbox{\raise\scratchdimen\box#1}\ht#1\the\ht#1\dp#1\the\dp#1}%
\fi
\or
% move up, assume end of par
- \ifnum\MPp{p:\parposcounter}=\MPp{\s!margin:\currentmarginpos}\relax
+ \ifnum\MPp{p:\number\parposcounter}=\MPp{\s!margin:\number\currentmarginpos}\relax
\getnoflines\margincontentheight
\advance\noflines\minusone
\scratchdimen\noflines\lineheight
\else
- \scratchdimen\dimexpr\MPy{p:\parposcounter}-\MPy{\s!margin:\currentmarginpos}\relax
+ \scratchdimen\dimexpr\MPy{p:\number\parposcounter}-\MPy{\s!margin:\number\currentmarginpos}\relax
\fi
\expanded{\setbox#1\hbox{\raise\scratchdimen\box#1}\ht#1\the\ht#1\dp#1\the\dp#1}%
\fi
@@ -1398,11 +1352,11 @@
%D specified with symbolic names, and symbolic references to
%D the graphics involved. Each table has its own namespace.
-\newcounter\noftabpositions
-\newtoks \posXCtoks
+\newcount\noftabpositions
+\newtoks \posXCtoks
\def\tbPOSprefix
- {tbp:\noftabpositions:}
+ {tbp:\number\noftabpositions:}
\def\tablepos
{\scratchtoks\posXCtoks
@@ -1494,7 +1448,7 @@
&\global\chardef\tabulatetype#1&}
\appendtoks
- \doglobal\increment\noftabpositions
+ \global\advance\noftabpositions\plusone
\to \everytabulate
%D In order to prevent potential clashes with abbreviations,
@@ -1541,7 +1495,7 @@
\def\normalTABLEquote {\unskip\!ttRightGlue&\omit\tablepos&} % "
\appendtoks
- \doglobal\increment\noftabpositions
+ \global\advance\noftabpositions\plusone
\to \everytable
%D Since we don't want nameclashes:
@@ -1703,9 +1657,21 @@
[before={\starttextbackground[strikethrough]},
after=\stoptextbackground]
+\definetextbackground
+ [sideline]
+ [mp=mpos:par:sideline,
+ location=paragraph,
+ framecolor=red,
+ frameoffset=5mm]
+
+\definestartstop [sideline]
+ [before={\starttextbackground[sideline]},
+ after=\stoptextbackground]
+
\starttext
\startunderline \input tufte \stopunderline \blank
\startoverstrike \input tufte \stopoverstrike \blank
\startexlines \input tufte \stopexlines \blank
\startstrikethrough \input tufte \stopstrikethrough \blank
+ \startsideline \input tufte \stopsideline \blank
\stoptext
diff --git a/Master/texmf-dist/tex/context/base/core-pos.lua b/Master/texmf-dist/tex/context/base/core-pos.lua
new file mode 100644
index 00000000000..b1235a0dc0d
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/core-pos.lua
@@ -0,0 +1,94 @@
+if not modules then modules = { } end modules ['core-pos'] = {
+ version = 1.001,
+ comment = "companion to core-pos.tex",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+--[[ldx--
+<p>We save positional information in the main utility table. Not only
+can we store much more information in <l n='lua'/> but it's also
+more efficient.</p>
+--ldx]]--
+
+if not jobs then jobs = { } end
+if not job then jobs['main'] = { } end job = jobs['main']
+if not job.positions then job.positions = { } end
+
+local texprint = tex.print
+local positions = job.positions
+local concat = table.concat
+local format = string.format
+
+function job.MPp(id) local jpi = positions[id] texprint((jpi and jpi[1]) or '0' ) end
+function job.MPx(id) local jpi = positions[id] texprint((jpi and jpi[2]) or '0pt') end
+function job.MPy(id) local jpi = positions[id] texprint((jpi and jpi[3]) or '0pt') end
+function job.MPw(id) local jpi = positions[id] texprint((jpi and jpi[4]) or '0pt') end
+function job.MPh(id) local jpi = positions[id] texprint((jpi and jpi[5]) or '0pt') end
+function job.MPd(id) local jpi = positions[id] texprint((jpi and jpi[6]) or '0pt') end
+
+-- the following are only for MP so there we can leave out the pt
+
+function job.MPxy(id)
+ local jpi = positions[id]
+ if jpi then
+ texprint(format('(%s,%s)',jpi[2],jpi[3]))
+ else
+ texprint('(0,0)')
+ end
+end
+
+function job.MPll(id)
+ local jpi = positions[id]
+ if jpi then
+ texprint(format('(%s,%s-%s)',jpi[2],jpi[3],jpi[6]))
+ else
+ texprint('(0,0)')
+ end
+end
+function job.MPlr(id)
+ local jpi = positions[id]
+ if jpi then
+ texprint(format('(%s+%s,%s-%s)',jpi[2],jpi[4],jpi[3],jpi[6]))
+ else
+ texprint('(0,0)')
+ end
+end
+function job.MPur(id)
+ local jpi = positions[id]
+ if jpi then
+ texprint(format('(%s+%s,%s+%s)',jpi[2],jpi[4],jpi[3],jpi[5]))
+ else
+ texprint('(0,0)')
+ end
+end
+function job.MPul(id)
+ local jpi = positions[id]
+ if jpi then
+ texprint(format('(%s,%s+%s)',jpi[2],jpi[3],jpi[5]))
+ else
+ texprint('(0,0)')
+ end
+end
+
+-- todo
+
+function job.MPpos(id)
+ local jpi = positions[id]
+ if jpi then
+ texprint(concat(jpi,',',1,6))
+ else
+ texprint('0,0,0,0,0,0')
+ end
+end
+
+function job.MPplus(id,n,default)
+ local jpi = positions[id]
+ texprint((jpi and jpi[n]) or default)
+end
+
+function job.MPrest(id,default)
+ local jpi = positions[id]
+ texprint((jpi and jpi[8]) or default) -- was 7, bugged
+end
diff --git a/Master/texmf-dist/tex/context/base/core-pos.mkiv b/Master/texmf-dist/tex/context/base/core-pos.mkiv
new file mode 100644
index 00000000000..ad57a8ed1b2
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/core-pos.mkiv
@@ -0,0 +1,65 @@
+%D \module
+%D [ file=core-pos,
+%D version=2006.09.18,
+%D title=\CONTEXT\ Core Macros,
+%D subtitle=Positioning Support,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\unprotect
+
+\registerctxluafile{core-pos}{1.001}
+
+\appendtoks
+ \immediatewriteutilitytua{if not job.positions then job.positions = { } end}%
+ \immediatewriteutilitytua{local jp = job.positions}%
+\to \everyopenutilities
+
+\def\replacepospxywhd#1#2#3#4#5#6#7%
+ {\ctxlua{job.positions['#1']={\number#2,"\the\dimexpr#3\relax","\the\dimexpr#4\relax",%
+ "\the\dimexpr#5\relax","\the\dimexpr#6\relax","\the\dimexpr#7\relax"}}}
+
+\def\dolazysaveposition#1#2#3#4%
+ {\expanded{\writeutilitytua{jp['#1']={#2,"#3","#4"}}}}
+
+\def\dolazysavepositionwhd#1#2#3#4#5#6#7%
+ {\expanded{\writeutilitytua{jp['#1']={#2,"#3","#4","#5","#6","#7"}}}}
+
+\def\dolazysavepositionplus#1#2#3#4#5#6#7#8%
+ {\expanded{\writeutilitytua{jp['#1']={#2,"#3","#4","#5","#6","#7","#8"}}}}
+
+\def\dosaveposition#1#2#3#4% tag page x y
+ {\expanded{\immediatewriteutilitytua{jp['#1']={#2,"#3","#4"}}}}
+
+\def\dosavepositionwhd#1#2#3#4#5#6#7% tag page x y w h d
+ {\expanded{\immediatewriteutilitytua{jp['#1']={#2,"#3","#4","#5","#6","#7"}}}}
+
+\def\dosavepositionplus#1#2#3#4#5#6#7#8% tag page x y w h d list
+ {\expanded{\immediatewriteutilitytua{jp['#1']={#2,"#3","#4","#5","#6","#7","#8"}}}}
+
+\def\MPp #1{\ctxlua{job.MPp("#1")}}
+\def\MPx #1{\ctxlua{job.MPx("#1")}}
+\def\MPy #1{\ctxlua{job.MPy("#1")}}
+\def\MPw #1{\ctxlua{job.MPw("#1")}}
+\def\MPh #1{\ctxlua{job.MPh("#1")}}
+\def\MPd #1{\ctxlua{job.MPd("#1")}}
+\def\MPxy #1{\ctxlua{job.MPxy("#1")}}
+\def\MPll #1{\ctxlua{job.MPll("#1")}}
+\def\MPlr #1{\ctxlua{job.MPlr("#1")}}
+\def\MPur #1{\ctxlua{job.MPur("#1")}}
+\def\MPul #1{\ctxlua{job.MPul("#1")}}
+\def\MPpos#1{\ctxlua{job.MPpos("#1")}}
+
+\def\MPplus#1#2#3{\ctxlua{job.MPplus("#1",#2,"#3")}}
+\def\MPrest #1#2{\ctxlua{job.MPrest("#1","#2")}}
+
+\def\doifpositionelse#1{\ctxlua{cs.testcase(job.positions['#1'])}}
+
+\def\copyposition#1#2{\ctxlua{job.positions['#1']=job.positions['#2']}}
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/core-pos.tex b/Master/texmf-dist/tex/context/base/core-pos.tex
index 6b0e103fddb..bc311dbdae5 100644
--- a/Master/texmf-dist/tex/context/base/core-pos.tex
+++ b/Master/texmf-dist/tex/context/base/core-pos.tex
@@ -116,11 +116,11 @@
%D For postprocessing purposes, we save the number of
%D positions.
-\newcounter\currentpositions % current number of positions
+\newcount\currentpositions % current number of positions
\newcounter\totalnofpositions % total from previous run
\appendtoks
- \savecurrentvalue\totalnofpositions\currentpositions
+ \expanded{\savecurrentvalue\noexpand\totalnofpositions{\the\currentpositions}}%
\to \everybye
%D The next switch can be used to communicate a special
@@ -239,7 +239,7 @@
{\printpaperwidth }%
{\printpaperheight}%
\fi
- \doglobal\increment\currentpositions}
+ \global\advance\currentpositions\plusone}
\def\setpositiononly#1%
{\iftrialtypesetting
@@ -297,7 +297,7 @@
\def\setpositiondataplus#1#2#3#4#5%
{\iftrialtypesetting \else
\initializenextposition
- \hbox to \nextboxwd
+ \hbox % bug: to \nextboxwd
{\edef\currentposition{#1}%
\dosetpositionplus\currentposition
{\the\dimexpr#2\relax}%
@@ -451,20 +451,20 @@
\def\epos#1{\removelastspace\hpos{e:#1}{\strut}}
\def\fpos#1%
- {\setpositionplus{b:#1}\parposcounter\horizontalstrut
+ {\setpositionplus{b:#1}{\number\parposcounter}\horizontalstrut
\ignorespaces}
\def\tpos#1%
{\removelastspace
- \setpositionplus{e:#1}\parposcounter\horizontalstrut}
+ \setpositionplus{e:#1}{\number\parposcounter}\horizontalstrut}
\def\ffpos#1%
- {\setpositionplus{b:#1}\parposcounter\horizontalstrut\wpos{#1}%
+ {\setpositionplus{b:#1}{\number\parposcounter}\horizontalstrut\wpos{#1}%
\ignorespaces}
\def\ttpos#1%
{\removelastspace
- \setpositionplus{e:#1}\parposcounter\horizontalstrut}
+ \setpositionplus{e:#1}{\number\parposcounter}\horizontalstrut}
\def\wpos#1%
{\dontleavehmode\vadjust % may disappear if buried
@@ -503,7 +503,7 @@
%D of them. This mechanism is activated automatically
%D based on information collected in the previous pass.
-\newcounter\parposcounter
+\newcount\parposcounter
\newif\ifpositioningpar
@@ -523,12 +523,12 @@
\chardef\parposstrut=1 % 0 => no strut data, so fall backs used
\def\doregisterparoptions
- {\doglobal\increment\parposcounter
+ {\global\advance\parposcounter\plusone
\begingroup
\leftskip 1\leftskip
\rightskip1\rightskip
\setpositiondataplus
- {p:\parposcounter}% % identifier
+ {p:\number\parposcounter}% identifier
{\the\zeropoint}%
{\the\strutht}%
{\the\strutdp}%
@@ -779,8 +779,8 @@
\loadmarkfile{core-pos}
-\let\MPv \MPplus
-\let\MPvv \MPrest
+\let\MPv \MPplus
+\let\MPvv\MPrest
\let\MPanchor\MPpos
diff --git a/Master/texmf-dist/tex/context/base/core-ref.tex b/Master/texmf-dist/tex/context/base/core-ref.tex
index 9c6ad0f9ca9..3b56cc86a0b 100644
--- a/Master/texmf-dist/tex/context/base/core-ref.tex
+++ b/Master/texmf-dist/tex/context/base/core-ref.tex
@@ -175,7 +175,7 @@
\def\dotextreference[#1]#2%
{\bgroup
\def\asciia{#1}%
- \convertexpanded\@@rfexpansion{#2}\asciib
+ \defconvertexpanded\asciib\@@rfexpansion{#2}%
\@EA\rawtextreference\@EA\s!txt\@EA\asciia\@EA{\asciib}%
\egroup}
@@ -185,7 +185,7 @@
\def\doreference[#1]#2%
{\bgroup
\def\asciia{#1}%
- \convertexpanded\@@rfexpansion{#2}\asciib
+ \defconvertexpanded\asciib\@@rfexpansion{#2}%
\@EA\rawreference\@EA\s!ref\@EA\asciia\@EA{\asciib}%
\egroup}
@@ -313,10 +313,6 @@
\doiffirstreferenceoccurance\lastreference
{\thisisdestination{\referenceprefix\lastreference}}%
\referenceinfo>\lastreference
-% \edef\dododowritereference
-% {\writeutilitycommand
-% {\mainreference{\referenceprefix}{\lastreference}{#4}{#5}{#6}}}%
-% \dododowritereference
\expanded{\writeutilitycommand{\noexpand\mainreference{\referenceprefix}{\lastreference}{#4}{#5}{#6}}}%
\fi
\egroup}
@@ -842,7 +838,7 @@
%D For debugging purposes we provide a showcase macro:
\long\def\dodoshowcurrentreference#1\from#2\with#3%
- {\convertcommand#2\to\ascii
+ {\defconvertedcommand\ascii{#2}%
\edef\currentreferenceshow{\currentreferenceshow/#1/\ascii/#3/}}
\long\def\doshowcurrentreference#1%
@@ -1604,11 +1600,11 @@
\def\gotodestination#1#2#3#4#5% url file destination page data
{\iflocation
\ifusepagedestinations
- \gotorealpage{#1}{#2}{#4}{#5}%
+ \gotorealpage{#1}{#2}{\number#4}{#5}%
\else
\dohandlegoto
{#5}%
- {\the\everyreference\dostartgotolocation\buttonwidth\buttonheight{#1}{#2}{#3}{#4}}%
+ {\the\everyreference\dostartgotolocation\buttonwidth\buttonheight{#1}{#2}{#3}{\number#4}}%
{\dostopgotolocation}%
\fi
\else
@@ -1619,7 +1615,7 @@
{\iflocation
\dohandlegoto
{#4}%
- {\dostartgotorealpage\buttonwidth\buttonheight{#1}{#2}{#3}}%
+ {\dostartgotorealpage\buttonwidth\buttonheight{#1}{#2}{\number#3}}%
{\dostopgotorealpage}%
\else
{#4}%
@@ -1935,6 +1931,9 @@
\setglobalsystemreference \rt!exec \v!FitWidth {fitwidth}
\setglobalsystemreference \rt!exec \v!FitHeight {fitheight}
+\setglobalsystemreference \rt!exec \v!ShowThumbs {thumbnails}
+\setglobalsystemreference \rt!exec \v!ShowBookmarks {bookmarks}
+
%D Executing the command looks alike the previous goto macros.
\def\executecommand#1#2#3%
@@ -2919,7 +2918,7 @@
\else
\let\@@programfile\currentreferenceoperation
\fi
- \convertcommand\@@programfile\to\ascii
+ \defconvertedcommand\ascii\@@programfile
\dohandlegoto
{#2}%
{\dostartrunprogram\buttonwidth\buttonheight{\@@prdirectory\ascii}\currentreferencearguments}%
diff --git a/Master/texmf-dist/tex/context/base/core-reg.lua b/Master/texmf-dist/tex/context/base/core-reg.lua
new file mode 100644
index 00000000000..f490f2ccaab
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/core-reg.lua
@@ -0,0 +1,185 @@
+-- filename : core-reg.lua
+-- comment : companion to core-reg.tex
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+if not versions then versions = { } end versions['core-reg'] = 1.001
+if not jobs then jobs = { } end
+if not job then jobs['main'] = { } end job = jobs['main']
+if not job.registers then job.registers = { } end
+
+function job.defineregister(id)
+ if not job.registers[id] then
+ job.registers[id] = { }
+ end
+end
+
+-- {'e','3','','test+test+test','2--0-0-0-0-0-0-0--1','1'}
+
+-- load index (we could rease the original entry afterwards, freeing memory)
+
+-- index sorting
+
+sorters = sorters or { }
+sorters.index = sorters.index or { }
+sorters.index.data = sorters.index.data or { }
+
+do
+
+ function sorters.index.compare(a,b)
+ local result = 0
+ for i=1,4 do
+ if result == 0 then
+ result = sorters.comparers.basic(a,b,i)
+ else
+ return result
+ end
+ end
+ if a[1] ~= 's' then -- e/f/t
+ local page_a, page_b = a[3], b[3]
+ if page_a < page_b then
+ return -1
+ elseif page_a > page_b then
+ return 1
+ end
+ end
+ return 0
+ end
+
+ function sorters.index.prepare(data)
+ sorters.prepare(data,sorters.splitters.utf,4)
+ end
+
+ function sorters.index.sort(data)
+ sorters.sort(data,sorters.index.compare)
+ end
+
+ function sorters.index.unique(data)
+ sorters.unique(data)
+ end
+
+ function sorters.index.cleanup(data)
+ sorters.cleanup(data)
+ end
+
+ function sorters.index.finalize(data)
+ local split = { }
+ for k,v in ipairs(data) do
+ local entry, tag = v[2][1][3][1], ""
+ local se = sorters.entries[sorters.language]
+ if se and se[entry] then
+ if type(se[entry]) == "number" then
+ entry = se[entry]
+ end
+ tag = se[entry]
+ else
+ entry = 0
+ tag = "unknown"
+ end
+ split[entry] = split[entry] or { tag = tag, data = { } }
+ split[entry].data[#split[entry].data+1] = v
+ end
+ return split
+ end
+
+ -- \registerpage{index}{,}{6}{2--0-0-0-0-0-0-0--1}{1}
+
+ -- for the moment we use the old structure, some day mkiv code
+ -- will be different: more structure, less mess
+
+ local template = {
+ page = "\\registerpage{%s}{%s}{%s}{%s}{%s}",
+ see = "\\registersee{%s}{%s}{%s}{%s}",
+ letter = "\\registerentry{%s}{%s}",
+ entry = {
+ "\\registerentrya{%s}{%s}",
+ "\\registerentryb{%s}{%s}",
+ "\\registerentryc{%s}{%s}",
+ "\\registerentryd{%s}{%s}",
+ },
+ }
+
+ function sorters.index.flush(sorted,class,flush)
+ flush = flush or print
+ class = class or 'index'
+ for k,v in ipairs(table.sortedkeys(sorted)) do
+ local s = sorted[v]
+ flush(template.letter:format(class,s.tag))
+ local done = { false, false, false }
+ for kk,vv in ipairs(s.data) do
+ if vv[2][1] then
+ local e = { false, false, false, false }
+ for i=1,4,1 do
+ if vv[2][i] then
+ e[i] = vv[2][i][1]
+ end
+ if e[i] ~= done[i] then
+ if e[i] and e[i] ~= "" then
+ done[i] = e[i]
+ flush(template.entry[i]:format(class,e[i]))
+ else
+ done[i] = false
+ end
+ end
+ end
+ if vv[1] == 'e' then
+ -- format reference pagespec realpage
+ flush(template.page:format(class,",",vv[4],vv[5],vv[3]))
+ elseif vv[1] == 's' then
+ flush(template.see:format(class,",",vv[5],vv[3]))
+ end
+ end
+ end
+ end
+ end
+
+ function sorters.index.process(data)
+ return sorters.process('index',data)
+ end
+
+end
+
+-- { { entry, key }, { entry, key }, { entry, key }, { entry, key } }, kind, realpage|see, reference, pagespec
+
+function job.loadregister(class)
+ if job.registers[class] then
+ if not sorters.index.data[class] then
+ sorters.index.data[class] = {
+ language = 'en',
+ entries = { },
+ flush = function(s) tex.sprint(tex.ctxcatcodes,s) end,
+ sorted = false,
+ class = class
+ }
+ local entries = sorters.index.data[class].entries
+ for k,v in ipairs(job.registers[class]) do
+ if v[1] == 'l' then -- language
+ sorters.index.data[class].language = v[2]
+ else
+ local key, entry = v[3], v[4]
+ if type(entry) == 'string' then
+ entry = entry:splitchr('+')
+ end
+ if type(key) == 'string' then
+ key = key:splitchr('+')
+ end
+ entries[#entries+1] = {
+ v[1], -- kind (e, f, t, s)
+ {
+ { entry[1] or "", key[1] or "" },
+ { entry[2] or "", key[2] or "" },
+ { entry[3] or "", key[3] or "" },
+ { entry[4] or "", key[4] or "" }
+ },
+ v[6], -- realpage or seeword (check see)
+ v[2], -- reference
+ v[5], -- pagespec
+ }
+ end
+ end
+ end
+ -- maybe we should also save the register result stream
+ sorters.index.process(sorters.index.data[class])
+ end
+end
diff --git a/Master/texmf-dist/tex/context/base/core-reg.mkii b/Master/texmf-dist/tex/context/base/core-reg.mkii
new file mode 100644
index 00000000000..bd925d56865
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/core-reg.mkii
@@ -0,0 +1,33 @@
+%D \module
+%D [ file=core-reg,
+%D version=2007.05.07,
+%D title=\CONTEXT\ Core Macros,
+%D subtitle=Register Management,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\unprotect
+
+% the spaces between } { are essential for texutil's split
+
+\def\mkdefineregister#1% class
+ {\addutilityreset{#1}}
+
+\def\mksaveregisterentry#1#2#3#4#5#6#7% class type reference key entry pagespec realpage
+ {\expanded{\writeutility{r #2 {#1} {#3} {#4} {#5} {#6} {#7}}}}
+
+\def\mksaveregistersee#1#2#3#4#5#6#7% class type reference key entry see pagespec
+ {\expanded{\writeutility{r #2 {#1} {#3} {#4} {#5} {#6} {#7}}}}
+
+\def\mksaveregistervariable#1#2#3% class type value
+ {\expanded{\immediatewriteutility{r #2 {#1} {#3}}}}
+
+\def\mkloadregister#1#2#3% class before after
+ {\doutilities{#1}{\registerparameter\c!file}{#1}{#2}{#3}}
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/core-reg.mkiv b/Master/texmf-dist/tex/context/base/core-reg.mkiv
new file mode 100644
index 00000000000..d6407612f7d
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/core-reg.mkiv
@@ -0,0 +1,57 @@
+%D \module
+%D [ file=core-reg,
+%D version=2007.05.07,
+%D title=\CONTEXT\ Core Macros,
+%D subtitle=Register Management,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\unprotect
+
+\registerctxluafile{core-reg}{1.001}
+
+\appendtoks
+ \immediatewriteutilitytua{if not job.registers then job.registers = { } end}%
+ \immediatewriteutilitytua{local jr = job.registers}%
+\to \everyopenutilities
+
+\let\allregisters\empty
+
+\appendtoks
+ \processcommacommand[\allregisters]\mkdodefineregister
+ \globallet\allregisters\empty
+\to \everyopenutilities
+
+\def\mkdodefineregister#1% class
+ {\ctxlua{job.defineregister('#1')}%
+ \immediatewriteutilitytua{job.defineregister('#1')}}
+
+\def\mkdefineregister#1% class
+ {\mkdodefineregister{#1}%
+ \doglobal\addtocommalist{#1}\allregisters}
+
+\def\mksaveregisterentry#1#2#3#4#5#6#7% class type reference key entry pagespec realpage
+ {\expanded{\writeutilitytua{ti(jr['#1'],{'#2','#3',\!!bs#4\!!es,\!!bs#5\!!es,'#6','#7'})}}}
+
+\def\mksaveregistersee#1#2#3#4#5#6#7% class type reference key entry see pagespec
+ {\expanded{\writeutilitytua{ti(jr['#1'],{'#2','#3',\!!bs#4\!!es,\!!bs#5\!!es,'#6','#7'})}}}
+
+\def\mksaveregistervariable#1#2#3% class type value
+ {\expanded{\immediatewriteutilitytua{ti(jr['#1'],{'#2','#3'})}}}
+
+% Beware, we have no filename support here. For that we need to save the resulting
+% tex code in a file. No big deal.
+
+\def\mkloadregister#1#2#3% class, todo: loader macro just like mkii
+ {\bgroup
+ \getvalue{\s!set#1}% smells like a hack
+ #2\ctxlua{job.loadregister('#1')}#3% par needed for hanging indentation
+ \getvalue{\s!reset#1}%
+ \egroup}
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/core-reg.tex b/Master/texmf-dist/tex/context/base/core-reg.tex
index bd64bd6adda..18ce09830ad 100644
--- a/Master/texmf-dist/tex/context/base/core-reg.tex
+++ b/Master/texmf-dist/tex/context/base/core-reg.tex
@@ -81,31 +81,37 @@
\newif\ifwritetoregister \writetoregistertrue
+\ifx\undefined\mkdefineregister
+ \let\mkdefineregister \gobbleoneargument
+ \let\mksaveregistervariable\gobblethreearguments
+ \let\mksaveregisterentry \gobblesevenarguments
+ \let\mksaveregistersee \gobblesevenarguments
+ \let\mkloadregister \gobbleoneargument
+\fi
+
\def\doprocesspageregister[#1]#2#3% key altnum entry
{\ifwritetoregister
\begingroup
\thisisnextinternal\s!ind
\ifduplicate\getlastregisterentry{#3}\fi
- \convertexpanded{\registerparameter\c!keyexpansion}{#1}\asciiregisterentryA
- \convertexpanded{\registerparameter\c!expansion }{#3}\asciiregisterentryB
+ \defconvertexpanded\asciiregisterentryA{\registerparameter\c!keyexpansion}{#1}%
+ \defconvertexpanded\asciiregisterentryB{\registerparameter\c!expansion }{#3}%
\doifsomething{\registerparameter\c!keyexpansion}
{\ifx\asciiregisterentryA\empty
- \convertexpanded{\registerparameter\c!keyexpansion}{#3}\asciiregisterentryA
+ \defconvertexpanded\asciiregisterentryA{\registerparameter\c!keyexpansion}{#3}%
\fi}%
\makesectionformat
\doifelse{\registerparameter\c!ownnumber}\v!yes
\donetrue\donefalse
- % the spaces between } { are essential for texutil's split
- \expanded
- {\writeutility%
- {r \ifcase\registerpagestatus\space\or e \or f \or t \fi
- {\currentregister} %
- {\nextinternalreference} %
- {\asciiregisterentryA} %
- {\asciiregisterentryB} %
- {\sectionformat\sectionseparator\sectionseparator
- \ifdone#2\else\noexpand\pagenumber\fi} %
- {\noexpand\realfolio}}}%
+ \mksaveregisterentry
+ {\currentregister}
+ {\ifcase\registerpagestatus\space\or e\or f\or t\fi}
+ {\nextinternalreference}
+ {\asciiregisterentryA}
+ {\asciiregisterentryB}
+ {\sectionformat\sectionseparator\sectionseparator
+ \ifdone#2\else\noexpand\pagenumber\fi}
+ {\noexpand\realfolio}%
\getfirstcharacter\currentregister
\registerinfo{> \firstcharacter}{#3}%
\endgroup
@@ -142,14 +148,28 @@
\def\writetoregister[#1]% to be documented
{\doregister{#1}}
-\def\startregister
- {\dotripleempty\dostartregister}
+% \def\startregister
+% {\dotripleempty\dostartregister}
-\def\dostartregister[#1][#2][#3]#4%
- {\chardef\registerpagestatus\plustwo
- \def\currentregister{#1}%
- \setgvalue{\??id#1\??id#2}{\dodostopregister[#1][#3]{#4}}%
- \dodoregister[#3]{}{#4}}
+% \def\dostartregister[#1][#2][#3]#4%
+% {\chardef\registerpagestatus\plustwo
+% \def\currentregister{#1}%
+% \setgvalue{\??id#1\??id#2}{\dodostopregister[#1][#3]{#4}}%
+% \dodoregister[#3]{}{#4}}
+
+\def\startregister
+ {\doquadrupleempty\dostartregister}
+
+\def\dostartregister[#1][#2][#3][#4]#5% % 3 args: #3 is sortkey
+ {\chardef\registerpagestatus\plustwo % 4 args: #3 is type, #4 is sortkey
+ \def\currentregister{#1}%
+ \iffourthargument
+ \setgvalue{\??id#1\??id#2}{\dodostopregister[#1][#4]{#5}}%
+ \dodoregister[#4]{#3}{#5}%
+ \else
+ \setgvalue{\??id#1\??id#2}{\dodostopregister[#1][#3]{#5}}%
+ \dodoregister[#3]{}{#5}%
+ \fi}
\def\stopregister
{\dodoubleargument\dostopregister}
@@ -167,23 +187,22 @@
\begingroup
\thisisnextinternal\s!ind
\ifduplicate\getlastregisterentry{#2}\fi
- \convertexpanded{\registerparameter\c!keyexpansion}{#1}\asciiregisterentryA
- \convertexpanded{\registerparameter\c!expansion }{#2}\asciiregisterentryB
- \convertexpanded{\registerparameter\c!expansion }{#3}\asciiregisterentryC
+ \defconvertexpanded\asciiregisterentryA{\registerparameter\c!keyexpansion}{#1}%
+ \defconvertexpanded\asciiregisterentryB{\registerparameter\c!expansion }{#2}%
+ \defconvertexpanded\asciiregisterentryC{\registerparameter\c!expansion }{#3}%
\doifsomething{\registerparameter\c!keyexpansion}
{\ifx\asciiregisterentryA\empty
- \convertexpanded{\registerparameter\c!keyexpansion}{#2}\asciiregisterentryA
+ \defconvertexpanded\asciiregisterentryA{\registerparameter\c!keyexpansion}{#2}%
\fi}%
\makesectionformat
- \expanded
- {\writeutility%
- {r s %
- {\currentregister} %
- {\nextinternalreference} %
- {\asciiregisterentryA} %
- {\asciiregisterentryB} %
- {\asciiregisterentryC} %
- {\sectionformat}}}%
+ \mksaveregistersee
+ {\currentregister}
+ {s}
+ {\nextinternalreference}
+ {\asciiregisterentryA}
+ {\asciiregisterentryB}
+ {\asciiregisterentryC}
+ {\sectionformat}%
\endgroup
\registerinfo{> see}{#2}%
\fi}
@@ -210,6 +229,7 @@
\let\c!entrya\empty
\let\c!entryb\empty
\let\c!entryc\empty
+\let\c!entryd\empty
\def\nextregisterpage
{\iffirstregisterpage
@@ -287,6 +307,7 @@
\def\registerentrya#1{\executeifdefined{#1\s!entrya}\gobbleoneargument }
\def\registerentryb#1{\executeifdefined{#1\s!entryb}\gobbleoneargument }
\def\registerentryc#1{\executeifdefined{#1\s!entryc}\gobbleoneargument }
+\def\registerentryd#1{\executeifdefined{#1\s!entryd}\gobbleoneargument }
\def\registersee #1{\executeifdefined{#1\s!see }\gobblethreearguments}
\def\registerpage #1{\executeifdefined{#1\s!page }\gobblefourarguments }
\def\registerfrom #1{\executeifdefined{#1\s!from }\gobblefourarguments }
@@ -296,6 +317,7 @@
{\letvalue{#1\s!entrya}\gobbleoneargument
\letvalue{#1\s!entryb}\gobbleoneargument
\letvalue{#1\s!entryc}\gobbleoneargument
+ \letvalue{#1\s!entryd}\gobbleoneargument
\letvalue{#1\s!see }\gobblethreearguments
\letvalue{#1\s!page }\gobblefourarguments
\letvalue{#1\s!from }\gobblefourarguments
@@ -312,6 +334,7 @@
\let\c!entrya =\relax
\let\c!entryb =\relax
\let\c!entryc =\relax
+\let\c!entryd =\relax
\def\limitedregisterentry#1#2%
{\getvalue{\??id#1\c!textcommand}%
@@ -340,16 +363,47 @@
\!!doneafalse
\doifelsevalue{\??id#2\c!interaction}\v!text
{\ifcase\currententrylevel \or
- \!!doneatrue\c!entrya\c!entryb\c!entryc \or
- \c!entrya\!!doneatrue\c!entryb\c!entryc \or
- \c!entrya\c!entryb\!!doneatrue\c!entryc \fi}
- {\c!entrya\c!entryb\c!entryc}%
+ \!!doneatrue\c!entrya\c!entryb\c!entryc\c!entryd \or
+ \c!entrya\!!doneatrue\c!entryb\c!entryc\c!entryd \or
+ \c!entrya\c!entryb\!!doneatrue\c!entryc\c!entryd \or
+ \c!entrya\c!entryb\c!entryc\!!doneatrue\c!entryd \fi}
+ {\c!entrya\c!entryb\c!entryc\c!entryd}%
\global\let\c!entrya\relax
\global\let\c!entryb\relax
\global\let\c!entryc\relax
+ \global\let\c!entryd\relax
\global\let\c!entryletter\relax
\global\let\c!entryreference\relax}
+% \def\dodosetpageregisterpageB#1#2#3#4#5#6%
+% {\iffirstregisterpage
+% \expandafter\hskip\getvalue{\??id#2\c!distance}\relax
+% \else\ifnum#1=3
+% \strut|--|\relax % -- !
+% \else
+% % \relax after space needed because | looks ahead
+% \strut\registerpageseparator|\space|\relax
+% \fi\fi
+% \iftrue % \iftrue ...\fi to preserve indentation, can be folded out
+% \begingroup
+% %
+% \doifelsevalue{\??id#2\c!prefix}\v!none % default v!both
+% {\chardef\pageprefixmode\zerocount}%
+% {\doifvalue{\??id#2\c!prefix}\v!first % only first in range (1.2-4)
+% {\ifnum#1=3 \chardef\pageprefixmode\zerocount \fi}}%
+% %
+% \doifelsevalue{\??id#2\c!interaction}\v!pagenumber
+% {\bgroup
+% \setbox0\hbox{\showlocation{\doregisterpage{#2}[#5]\ifnum#1=2\/\fi}}%
+% \gotonextinternal{\s!ind}{#4}{#6}{\box0}%{\copy0}%
+% \egroup}
+% {\hbox{\doregisterpage{#2}[#5]\ifnum#1=2\/\fi}}%
+% \endgroup
+% \ignorespaces
+% \relax
+% \fi
+% \global\firstregisterpagefalse}
+
\def\dodosetpageregisterpageB#1#2#3#4#5#6%
{\iffirstregisterpage
\expandafter\hskip\getvalue{\??id#2\c!distance}\relax
@@ -357,19 +411,23 @@
\strut|--|\relax % -- !
\else
% \relax after space needed because | looks ahead
- \strut\registerpageseparator|\space|\relax
+% TH: next line replaced
+% \strut\registerpageseparator|\space|\relax
+ \strut \registerpageseparator{ }%
+% /TH
\fi\fi
\iftrue % \iftrue ...\fi to preserve indentation, can be folded out
\begingroup
%
\doifelsevalue{\??id#2\c!prefix}\v!none % default v!both
{\chardef\pageprefixmode\zerocount}%
- {\doifvalue{\??id#2\c!prefix}\v!first % only first in range (1.2-4)
+ {\doifvalue{\??id#2\c!prefix}\v!first %
{\ifnum#1=3 \chardef\pageprefixmode\zerocount \fi}}%
%
\doifelsevalue{\??id#2\c!interaction}\v!pagenumber
{\bgroup
- \setbox0\hbox{\showlocation{\doregisterpage{#2}[#5]\ifnum#1=2\/\fi}}%
+ \setbox0
+ \hbox{\showlocation{\doregisterpage{#2}[#5]\ifnum#1=2\/\fi}}%
\gotonextinternal{\s!ind}{#4}{#6}{\box0}%{\copy0}%
\egroup}
{\hbox{\doregisterpage{#2}[#5]\ifnum#1=2\/\fi}}%
@@ -510,12 +568,13 @@
\def\dohandleregisterentry##1% dubbelop | \strut nieuw
{\doregistertexthowto{#1}{\strut\limitedregisterentry{#1}{##1}}}%
\getvalue
- {#1\ifcase\currententrylevel\s!entrya\or\s!entryb\else\s!entryc\fi}%
+ {#1\ifcase\currententrylevel\s!entrya\or\s!entryb\else\s!entryc\else\s!entryd\fi}%
{\doregisterpagehowto{#1}{\labeltexts\v!see{#3}}}%
- \c!entryletter\c!entrya\c!entryb\c!entryc
+ \c!entryletter\c!entrya\c!entryb\c!entryc\c!entryd
\global\let\c!entrya\relax
\global\let\c!entryb\relax
\global\let\c!entryc\relax
+ \global\let\c!entryd\relax
\global\let\c!entryletter\relax
\global\let\c!entryreference\relax
% \global\firstregisterentrytrue
@@ -584,7 +643,7 @@
\doregistercharacter[#1]{#2}}}
% \def\HowUgly #1{\doHowUgly#1\relax}
-% \def\doHowUgly#1#2\relax{\iffirstregisterentry{\bf#1}#2\fi#1#2} # handles utf too
+% \def\doHowUgly#1#2\relax{\iffirstregisterentry{\bf#1}\else#1\fi#2} % unchecked
%
% \setupregister[index][indicator=no,deeptextcommand=\HowUgly]
%
@@ -608,6 +667,7 @@
\edef\currententrylevel{1}%
\global\let\c!entryb\relax
\global\let\c!entryc\relax
+ \global\let\c!entryd\relax
\gdef\c!entrya
{\iffirstregisterentry\else\endgraf\fi % new
\global\firstregisterpagetrue
@@ -620,6 +680,7 @@
\def\dosetpageregisterentryb#1#2%
{\flushseenregisterpage % redundant
\edef\currententrylevel{2}%
+ \global\let\c!entryd\relax
\global\let\c!entryc\relax
\global\def\c!entryb
{\iffirstregisterentry\else\endgraf\fi % new
@@ -646,6 +707,21 @@
\global\firstregisterentryfalse
\global\firstsubsubentryfalse}}
+\def\dosetpageregisterentryd#1#2%
+ {\flushseenregisterpage % redundant
+ \edef\currententrylevel{4}%
+ \gdef\c!entryd
+ {\iffirstregisterentry\else\endgraf\fi % new
+ \global\firstregisterpagetrue
+ \global\let\c!entrya\relax
+ \global\let\c!entryb\relax
+ \global\let\c!entryc\relax
+ \iffirstsubsubentry\nobreak\fi
+ \hangindent4em\noindent\c!entryreference\hskip3em\relax
+ \dohandlepageregisterentry{#1}{#2}%
+ \global\firstregisterentryfalse
+ \global\firstsubsubentryfalse}}
+
\def\dosetpageregister#1% \currentregister gebruiken
{\dosetreglevel{#1}%
\global\let\currentregisterentry\empty
@@ -655,6 +731,7 @@
\setvalue{#1\s!entrya}{\dosetpageregisterentrya {#1}}%
\setvalue{#1\s!entryb}{\dosetpageregisterentryb {#1}}%
\setvalue{#1\s!entryc}{\dosetpageregisterentryc {#1}}%
+ \setvalue{#1\s!entryd}{\dosetpageregisterentryd {#1}}%
\setvalue{#1\s!page }{\dosetpageregisterpage{1}{#1}}%
\setvalue{#1\s!from }{\dosetpageregisterpage{2}{#1}}%
\setvalue{#1\s!to }{\dosetpageregisterpage{3}{#1}}%
@@ -665,7 +742,7 @@
{\dosetfilterlevel{\getvalue{\??id#1\c!criterium}}\empty}
\def\getalllistreferences#1#2%
- {\doglobal\convertexpanded{\getvalue{\??id#1\c!expansion}}{#2}\currentregisterentry
+ {\gdefconvertexpanded\currentregisterentry{\getvalue{\??id#1\c!expansion}}{#2}%
\doifdefinedelse{\??id#1\??id\currentregisterentry}
{\edef\alllistreferences%
{\getvalue{\??id#1\??id\currentregisterentry}}%
@@ -769,7 +846,7 @@
\global\firstregisterpagetrue
\setvalue{#1\s!entrya}##1%
{\global\firstregisterpagetrue
- \doglobal\convertargument##1\to\currentregisterentry % \doglobal nodig?
+ \gdefconvertedargument\currentregisterentry{##1}% global nodig?
\doglobal\increment\internallistreference}%
\setvalue{#1\s!from}%
{\getvalue{#1\s!page}}%
@@ -811,7 +888,7 @@
\let\dosetregister\doloadregisterlinks
\def\currentregister{#1}%
\setupregister[#1][#2]%
- \doutilities{#1}{\registerparameter\c!file}{#1}\relax\relax
+ \mkloadregister\currentregister\dobeforeplaceregister\doafterplaceregister
\endgroup
\ifautoregisterhack
\doinitializeautoregister{#1}%
@@ -1020,19 +1097,21 @@
\doifelse{\registerparameter\c!compress}\v!yes % new
{\chardef\collapseregisterpages\plusone}
{\chardef\collapseregisterpages\zerocount}%
- \raggedright
+% TH: disable next line
+% \raggedright
+% /TH
\startcolumns
[\c!n=\registerparameter\c!n,
\c!balance=\registerparameter\c!balance,
- \c!align=\registerparameter\c!align]%
+ \c!align=\registerparameter\c!align,
+ tolerance=stretch]%
\dontcomplain
\startpacked[\v!blank]%
- \doutilities\currentregister{\registerparameter\c!file}\currentregister\dobeforeplaceregister\doafterplaceregister
+ \mkloadregister\currentregister\dobeforeplaceregister\doafterplaceregister
\stoppacked
\stopcolumns
\endgroup
\fi}
-
\def\dobeforeplaceregister
{\resetseenregisterpage
\relax}
@@ -1057,13 +1136,13 @@
\def\doregisterregisterlanguage#1%
{\savesortlanguage{\getvalue{\??id#1\s!language}}%
- \immediatewriteutility{r l {#1} {\getvalue{\??id#1\s!language}}}}
+ \mksaveregistervariable{#1}{l}{\getvalue{\??id#1\s!language}}}
\def\dodefineregister[#1][#2]%
{\setupregister[#1]%
[\c!n=2,
\c!balance=\v!yes, % \v!no komt niet zo vaak voor
- \c!align=\v!no,
+ \c!align=\v!flushleft,
\c!before=\blank, % binnen kolommen: \blank[\v!line]
\c!after=,
\c!symbol=,
@@ -1093,7 +1172,7 @@
\doregisterregisterlanguage{#1}%
\to \everysavesortkeys
\presetheadtext[#1=\Word{#1}]%
- \addutilityreset{#1}%
+ \mkdefineregister{#1}%
\setvalue{#1}{\doregister{#1}}%
\setvalue{\e!coupled#1}{\dolinkedregister{#1}}%
\setvalue{\s!set#1}{\dosetregister{#1}}%
@@ -1123,7 +1202,7 @@
\global\utilitydonetrue}
{}}%
\doglobal\newcounter\utilityregisterlength
- \setbox0\vbox{\doutilities{#1}{\registerparameter\c!file}{#1}\relax\relax}%
+ \setbox0\vbox{\mkloadregister\currentregister\dobeforeplaceregister\doafterplaceregister}%
\endgroup
\ifregistergeplaatst
\setsystemmode \v!register
@@ -1134,6 +1213,12 @@
\def\determineregistercharacteristics
{\dodoubleempty\dodetermineregistercharacteristics}
+%D Plugins.
+
+\loadmarkfile{core-reg}
+
+%D Default index:
+
\defineregister
[\v!index]
[\v!indices]
diff --git a/Master/texmf-dist/tex/context/base/core-rul.tex b/Master/texmf-dist/tex/context/base/core-rul.tex
index 696f3f01cb3..5ede142bbe5 100644
--- a/Master/texmf-dist/tex/context/base/core-rul.tex
+++ b/Master/texmf-dist/tex/context/base/core-rul.tex
@@ -482,7 +482,7 @@
%D by \TEX\ itself, the latter one depends on the driver. This
%D macro also support a negative offset.
-\def\dooutlinebox
+\def\dooutlinebox % we needed to move the color command in order to apply attributes properly
{\setbox\framebox\vbox % rules on top of box
{\scratchdimen \framedparameter\c!frameoffset\relax
\frameddimenwd\dimexpr\wd\framebox+2\scratchdimen\relax
@@ -496,18 +496,15 @@
\scratchdimen\zeropoint
\fi
\setbox\extraframebox\hbox
- {\dostrokedbox}%
+ {\doifsomething{\framedparameter\c!framecolor}{\color[\framedparameter\c!framecolor]}{\dostrokedbox}}%
\setbox\extraframebox\hbox
{\raise\scratchdimen\vbox
- {\moveleft\framedparameter\c!frameoffset\box\extraframebox}}%
+ {\moveleft\framedparameter\c!frameoffset
+ \box\extraframebox}}%
\wd\extraframebox\wd\framebox
\ht\extraframebox\ht\framebox
\dp\extraframebox\dp\framebox
- \hbox
- {\box\framebox\hskip-\wd\extraframebox
- \doifsomething{\framedparameter\c!framecolor}% no else needed,
- {\color[\framedparameter\c!framecolor]}% %
- {\box\extraframebox}}}} % but {} here
+ \hbox{\box\framebox\hskip-\wd\extraframebox\box\extraframebox}}}
\def\dostrokedbox
{\doifelse{\framedparameter\c!framecorner}\v!rectangular
@@ -539,23 +536,78 @@
\def\@@frame@@{@@frame@@}
-\setvalue{t\@@frame@@\v!on \v!on}{\hrule\!!height\ruledlinewidth\kern-\ruledlinewidth}
-\setvalue{t\@@frame@@\v!off\v!on}{\hrule\!!height\ruledlinewidth\kern-\ruledlinewidth}
-\setvalue{t\@@frame@@\v!on }{\hrule\!!height\ruledlinewidth\kern-\ruledlinewidth}
-\setvalue{b\@@frame@@\v!on \v!on}{\kern-\ruledlinewidth\hrule\!!height\ruledlinewidth}
-\setvalue{b\@@frame@@\v!off\v!on}{\kern-\ruledlinewidth\hrule\!!height\ruledlinewidth}
-\setvalue{b\@@frame@@\v!on }{\kern-\ruledlinewidth\hrule\!!height\ruledlinewidth}
-\setvalue{l\@@frame@@\v!on \v!on}{\vrule\!!width\ruledlinewidth\kern-\ruledlinewidth}
-\setvalue{l\@@frame@@\v!off\v!on}{\vrule\!!width\ruledlinewidth\kern-\ruledlinewidth}
-\setvalue{l\@@frame@@\v!on }{\vrule\!!width\ruledlinewidth\kern-\ruledlinewidth}
-\setvalue{r\@@frame@@\v!on \v!on}{\kern-\ruledlinewidth\vrule\!!width\ruledlinewidth}
-\setvalue{r\@@frame@@\v!off\v!on}{\kern-\ruledlinewidth\vrule\!!width\ruledlinewidth}
-\setvalue{r\@@frame@@\v!on }{\kern-\ruledlinewidth\vrule\!!width\ruledlinewidth}
+% \setvalue{t\@@frame@@\v!on \v!on}{\hrule\!!height\ruledlinewidth\kern-\ruledlinewidth}
+% \setvalue{t\@@frame@@\v!off\v!on}{\hrule\!!height\ruledlinewidth\kern-\ruledlinewidth}
+% \setvalue{t\@@frame@@\v!on }{\hrule\!!height\ruledlinewidth\kern-\ruledlinewidth}
+% \setvalue{b\@@frame@@\v!on \v!on}{\kern-\ruledlinewidth\hrule\!!height\ruledlinewidth}
+% \setvalue{b\@@frame@@\v!off\v!on}{\kern-\ruledlinewidth\hrule\!!height\ruledlinewidth}
+% \setvalue{b\@@frame@@\v!on }{\kern-\ruledlinewidth\hrule\!!height\ruledlinewidth}
+% \setvalue{l\@@frame@@\v!on \v!on}{\vrule\!!width\ruledlinewidth\kern-\ruledlinewidth}
+% \setvalue{l\@@frame@@\v!off\v!on}{\vrule\!!width\ruledlinewidth\kern-\ruledlinewidth}
+% \setvalue{l\@@frame@@\v!on }{\vrule\!!width\ruledlinewidth\kern-\ruledlinewidth}
+% \setvalue{r\@@frame@@\v!on \v!on}{\kern-\ruledlinewidth\vrule\!!width\ruledlinewidth}
+% \setvalue{r\@@frame@@\v!off\v!on}{\kern-\ruledlinewidth\vrule\!!width\ruledlinewidth}
+% \setvalue{r\@@frame@@\v!on }{\kern-\ruledlinewidth\vrule\!!width\ruledlinewidth}
+
+\def\@@frame@@trule{\hrule\!!height\ruledlinewidth\kern-\ruledlinewidth}
+\def\@@frame@@brule{\kern-\ruledlinewidth\hrule\!!height\ruledlinewidth}
+\def\@@frame@@rrule{\kern-\ruledlinewidth\vrule\!!width\ruledlinewidth}
+\def\@@frame@@lrule{\vrule\!!width\ruledlinewidth\kern-\ruledlinewidth}
+
+\letvalue{t\@@frame@@\v!on \v!on}\@@frame@@trule
+\letvalue{t\@@frame@@\v!off\v!on}\@@frame@@trule
+\letvalue{t\@@frame@@\v!on }\@@frame@@trule
+
+\letvalue{b\@@frame@@\v!on \v!on}\@@frame@@brule
+\letvalue{b\@@frame@@\v!off\v!on}\@@frame@@brule
+\letvalue{b\@@frame@@\v!on }\@@frame@@brule
+
+\letvalue{l\@@frame@@\v!on \v!on}\@@frame@@lrule
+\letvalue{l\@@frame@@\v!off\v!on}\@@frame@@lrule
+\letvalue{l\@@frame@@\v!on }\@@frame@@lrule
+
+\letvalue{r\@@frame@@\v!on \v!on}\@@frame@@rrule
+\letvalue{r\@@frame@@\v!off\v!on}\@@frame@@rrule
+\letvalue{r\@@frame@@\v!on }\@@frame@@rrule
+
+\def\@@frame@@trules{\hbox{\kern\ruledlinewidth\vrule\!!width\dimexpr\frameddimenwd-2\ruledlinewidth\relax\!!height\ruledlinewidth}\nointerlineskip\kern-\ruledlinewidth}
+\def\@@frame@@brules{\kern-\ruledlinewidth\nointerlineskip\hbox{\kern\ruledlinewidth\vrule\!!width\dimexpr\frameddimenwd-2\ruledlinewidth\relax\!!height\ruledlinewidth}}
+\def\@@frame@@rrules{\kern-\ruledlinewidth\vrule\!!height\dimexpr\frameddimenht-\ruledlinewidth\relax\!!depth-\ruledlinewidth\!!width\ruledlinewidth}
+\def\@@frame@@lrules{\vrule\!!height\dimexpr\frameddimenht-\ruledlinewidth\relax\!!depth-\ruledlinewidth\!!width\ruledlinewidth\kern-\ruledlinewidth}
+
+\letvalue{t\@@frame@@\v!small\v!small}\@@frame@@trules
+\letvalue{t\@@frame@@\v!off \v!small}\@@frame@@trules
+\letvalue{t\@@frame@@\v!small }\@@frame@@trules
+
+\letvalue{b\@@frame@@\v!small\v!small}\@@frame@@brules
+\letvalue{b\@@frame@@\v!off \v!small}\@@frame@@brules
+\letvalue{b\@@frame@@\v!small }\@@frame@@brules
+
+\letvalue{l\@@frame@@\v!small\v!small}\@@frame@@lrules
+\letvalue{l\@@frame@@\v!off \v!small}\@@frame@@lrules
+\letvalue{l\@@frame@@\v!small }\@@frame@@lrules
+
+\letvalue{r\@@frame@@\v!small\v!small}\@@frame@@rrules
+\letvalue{r\@@frame@@\v!off \v!small}\@@frame@@rrules
+\letvalue{r\@@frame@@\v!small }\@@frame@@rrules
%D I condidered using the low level support command
%D \type{\ruledhbox}, but this would slow down processing by a
%D factor~3.
+% \framed
+% [width=4cm,height=3cm,rulethickness=3mm,
+% frame=off,rightframe=on,leftframe=on,topframe=on,bottomframe=on]
+% {}
+% \framed
+% [width=4cm,height=3cm,rulethickness=3mm,
+% frame=off,rightframe=small,leftframe=small,topframe=small,bottomframe=small]
+% {}
+% \framed
+% [width=4cm,height=3cm,rulethickness=3mm,
+% frame=off,rightframe=small,leftframe=small,topframe=small,bottomframe=on]
+% {}
+
%D Before we come to using these macros we yet have to define
%D the rounded corner alternative, which after all is not that
%D hard because it uses the previously defined macro \type
@@ -779,8 +831,6 @@
\fi
% new, experimental dirty hook
\framedparameter\c!extras
- % we need to register the (outer) color
- \startregistercolor[\framedparameter\c!foregroundcolor]%
% to get the right spacing
\doifvaluesomething{\@@framed\c!foregroundstyle}
{\@EA\doconvertfont\csname\@@framed\c!foregroundstyle\endcsname\empty}%
@@ -912,9 +962,9 @@
\else\ifx\localstrut\v!local
\setfontstrut
\else
+ \setstrut
\fi\fi\fi
\ifboxhasstrut
- \setstrut
\let\localbegstrut\begstrut
\let\localendstrut\endstrut
\let\localstrut \strut
@@ -977,6 +1027,8 @@
{\ifdim\!!framedwidth >\zeropoint\the\!!framedwidth \else\zeropoint\fi}%
\edef\framedheight% a new feature, visible for user
{\ifdim\!!framedheight>\zeropoint\the\!!framedheight\else\zeropoint\fi}%
+ % we need to register the (outer) color
+ \startregistercolor[\framedparameter\c!foregroundcolor]%
% first alternative
%\def\dowithframedbox%
% {\let\postprocessframebox\relax %new
@@ -989,7 +1041,6 @@
% \let\postprocessframebox\relax %new
% \stoplocalframed}
% \next}
- % third alternative
\@@startframedorientation
\afterassignment\dodowithframebox
\setbox\framebox\next}
@@ -1039,6 +1090,7 @@
\def\stoplocalframed
{\dontshowcomposition
\@@stopframedorientation % hm, wrong place ! should rotatethe result (after reshape)
+ \stopregistercolor
\handleframedlocator\c!before\@@locallocation
\ifboxhasformat
\ifx\@@localautowidth\v!force
@@ -1071,7 +1123,6 @@
\ht\scratchbox\ht\framebox
\dp\scratchbox\dp\framebox
\setbox\framebox\box\scratchbox}%
- \stopregistercolor
\docolorframebox
\ifboxhasoffset
\dooffsetframebox
@@ -1702,6 +1753,10 @@
%D of a centered box automatically (\type {fit}). When
%D doing so, we need to reshape the box:
+% The next implementation is frozen! It preserves the depth,
+% otherwise we get problems with framed display math and auto
+% width.
+
\newcount\framednoflines
\newdimen\framedlastlength
@@ -1709,53 +1764,16 @@
{\framednoflines \zerocount
\framedlastlength\zeropoint}
-% The next implementation is frozen! It preserves the depth,
-% otherwise we get problems with framed display math and auto
-% width.
-
-% \def\doreshapeframedbox % frozen
-% {\beginofshapebox
-% \unvcopy\framebox
-% \endofshapebox
-% \global\@@globalwidth\zeropoint
-% \resetshapeframebox
-% \reshapebox
-% {\setbox0\hbox
-% {\strut\ifhbox\shapebox\unhbox\else\box\fi\shapebox}%
-% \global\advance\framednoflines \plusone
-% \ifdim\framedlastlength>\zeropoint\else
-% \global\framedlastlength\wd0
-% \fi
-% \ifdim\wd0>\@@globalwidth
-% \global\@@globalwidth\wd0
-% \fi}%
-% \dosetraggedcommand\localformat
-% \raggedcommand
-% \ifboxhasheight
-% \setbox\framebox\vbox to \localheight
-% {\hsize\@@globalwidth
-% \reshapebox{\hbox to \hsize{\ifhbox\shapebox\unhbox\else\box\fi\shapebox}}%
-% \dobeforeframedbox
-% \innerflushshapebox
-% \doafterframedbox}%
-% \else
-% \scratchdimen\dp\framebox
-% \setbox\framebox\vbox to \ht\framebox
-% {\hsize\@@globalwidth
-% \reshapebox{\hbox to \hsize{\ifhbox\shapebox\unhbox\else\box\fi\shapebox}}%
-% \innerflushshapebox}%
-% \dp\framebox\scratchdimen % \strutdp otherwise problem with math
-% \fi
-% \ifdim\framedlastlength=\zeropoint\global\framednoflines\wd\framebox\fi
-% \ifcase\framednoflines\global\framednoflines\plusone\fi}
-
\chardef\reshapeframeboxmethod\plusone % 0=no flush, 1=old method 2=no depth messing
\let\framedboxwidth \!!zeropoint
\let\framedboxheight\!!zeropoint
\let\framedboxdepth \!!zeropoint
-\def\doreshapeframedbox % frozen
+\def\shapeboxstrut % put this in front if needed !
+ {\vrule\!!width\zeropoint\!!height\ht\shapebox\!!depth\dp\shapebox}
+
+\def\doreshapeframedbox % frozen, that is ... \shapeboxstrut added
{\beginofshapebox
\unvcopy\framebox
\endofshapebox
@@ -1766,7 +1784,7 @@
\resetshapeframebox
\reshapebox
{\setbox0\hbox
- {\strut\ifhbox\shapebox\unhbox\else\box\fi\shapebox}%
+ {\strut\ifhbox\shapebox\shapeboxstrut\unhbox\else\box\fi\shapebox}%
\global\advance\framednoflines \plusone
\ifdim\framedlastlength>\zeropoint\else
\global\framedlastlength\wd0
@@ -1782,14 +1800,14 @@
\ifboxhasheight
\setbox\framebox\vbox to \localheight
{\hsize\@@globalwidth
- \reshapebox{\hbox to \hsize{\ifhbox\shapebox\unhbox\else\box\fi\shapebox}}%
+ \reshapebox{\hbox to \hsize{\ifhbox\shapebox\shapeboxstrut\unhbox\else\box\fi\shapebox}}%
\dobeforeframedbox
\innerflushshapebox
\doafterframedbox}%
\else
- \setbox\framebox\vbox to \ht\framebox
+ \setbox\framebox\vbox to \framedboxheight % \ht\framebox
{\hsize\@@globalwidth
- \reshapebox{\hbox to \hsize{\ifhbox\shapebox\unhbox\else\box\fi\shapebox}}%
+ \reshapebox{\hbox to \hsize{\ifhbox\shapebox\shapeboxstrut\unhbox\else\box\fi\shapebox}}%
\ifcase\reshapeframeboxmethod
\or \innerflushshapebox \or \innerflushshapebox
\fi}%
@@ -1797,7 +1815,7 @@
\dp\framebox\framedboxdepth % \strutdp otherwise problem with math
\fi
\fi
- \ifdim\framedlastlength=\zeropoint\global\framednoflines\wd\framebox\fi
+ \ifdim\framedlastlength=\zeropoint\global\framedlastlength\wd\framebox\fi
\ifcase\framednoflines\global\framednoflines\plusone\fi
\fi}
diff --git a/Master/texmf-dist/tex/context/base/core-sec.tex b/Master/texmf-dist/tex/context/base/core-sec.tex
index 50032edcd24..e76dfd5e649 100644
--- a/Master/texmf-dist/tex/context/base/core-sec.tex
+++ b/Master/texmf-dist/tex/context/base/core-sec.tex
@@ -39,8 +39,8 @@
\startmessages german library: structures
title: struktur
- 1: Begin des Abschnittsblock --
- 2: Ende des Abschnittsblock --
+ 1: Begin des Abschnittsblocks --
+ 2: Ende des Abschnittsblocks --
\stopmessages
\startmessages czech library: structures
@@ -102,7 +102,7 @@
% \section{test} \subsection{test} \subsection{test}
% from now on, internaly numbers are separated by a period
-% and postprocessed on demand
+% and postprocessed on demand; this will change to {} {} {}
\def\numberseparator {.} % reasonable default
\def\sectionseparator{-} % was : but is now -
@@ -1116,6 +1116,29 @@
%
% \placefigure[left]{}{} \section{\dorecurse{10}{bagger }} \input tufte
+% \def\dohandlepagebreakAB#1% will be replaced by a more clever (signaling) mechanism (in beta)
+% {\doifnotvalue{\??ko#1\c!aligntitle}\v!float\flushsidefloats
+% \getvalue{\??ko#1\c!before}%
+% % \whitespace vervangen door \noindent elders
+% \relax
+% \ifpaginageblokkeerd
+% \global\paginageblokkeerdfalse
+% \else
+% \!!countb\getvalue{\??se\@@sectie\c!level}\relax
+% \ifnum\!!countb>\@@kolevel\relax
+% \!!counta20000
+% \multiply\!!countb 500
+% \advance\!!counta \!!countb
+% \dosomebreak{\penalty\!!counta}%
+% \else
+% \dosomebreak\allowbreak
+% \fi
+% \fi
+% \doifvalue{\??ko#1\c!aligntitle}\v!float\indent
+% \xdef\@@kolevel{\getvalue{\??se\@@sectie\c!level}}}
+
+\chardef\somebreakmethod\plusone
+
\def\dohandlepagebreakAB#1% will be replaced by a more clever (signaling) mechanism (in beta)
{\doifnotvalue{\??ko#1\c!aligntitle}\v!float\flushsidefloats
\getvalue{\??ko#1\c!before}%
@@ -1124,14 +1147,24 @@
\ifpaginageblokkeerd
\global\paginageblokkeerdfalse
\else
- \!!countb\getvalue{\??se\@@sectie\c!level}\relax
- \ifnum\!!countb>\@@kolevel\relax
- \!!counta20000
- \multiply\!!countb 500
- \advance\!!counta \!!countb
- \dosomebreak{\penalty\!!counta}%
+ \ifcase\somebreakmethod
+ % 0 = nothing
+ \or
+ % 1 = old weighted version
+ \!!countb\getvalue{\??se\@@sectie\c!level}\relax
+ \ifnum\!!countb>\@@kolevel\relax
+ \!!counta20000
+ \multiply\!!countb 500
+ \advance\!!counta \!!countb
+ \dosomebreak{\penalty\!!counta}%
+ \else
+ \dosomebreak\allowbreak % brr
+ \fi
+ \or
+ % 2 = strict version
+ \dosomebreak{\penalty\maxdimen}%
\else
- \dosomebreak\allowbreak
+ % nothing
\fi
\fi
\doifvalue{\??ko#1\c!aligntitle}\v!float\indent
@@ -1163,29 +1196,39 @@
\dosomebreak{\penalty\!!counta}%
\egroup}
+\newconditional\ignorehandlepagebreak
+
\def\handlepagebreak#1%
- {\dohandlepagebreakAA{#1}%
- \ifnum\countervalue{\??se\previoussection\@@sectie}>\zerocount\relax
- \ifnum\countervalue{\??se\@@sectie}>\zerocount
- \dohandlepagebreakB{#1}%
+ {\ifconditional\ignorehandlepagebreak
+ \setfalse\ignorehandlepagebreak
+ \else
+ \dohandlepagebreakAA{#1}%
+ \ifnum\countervalue{\??se\previoussection\@@sectie}>\zerocount\relax
+ \ifnum\countervalue{\??se\@@sectie}>\zerocount
+ \dohandlepagebreakB{#1}%
+ \else
+ \doifnotvalue{\??ko#1\c!continue}\v!yes{\dohandlepagebreakB{#1}}%
+ \fi
\else
- \doifnotvalue{\??ko#1\c!continue}\v!yes{\dohandlepagebreakB{#1}}%
+ \dohandlepagebreakB{#1}%
\fi
- \else
- \dohandlepagebreakB{#1}%
- \fi
- \dohandlepagebreakAB{#1}}
+ \dohandlepagebreakAB{#1}%
+ \fi}
-\def\handlepagebreakC#1%
- {\xdef\@@kolevel{\getvalue{\??se\@@sectie\c!level}}%
- \nobreak}
+\def\handlenopagebreak#1%
+ {\ifconditional\ignorehandlepagebreak
+ \setfalse\ignorehandlepagebreak
+ \else
+ \xdef\@@kolevel{\getvalue{\??se\@@sectie\c!level}}%
+ \nobreak
+ \fi}
\def\localheadheight {\strutht}
\def\localheaddepth {\strutdp}
\def\localheadlineheight{\lineheight}
\def\dolocalheadsetup#1% koppeling met standaard kopcommando / engels
- {\forgetall % traag dus ...
+ {\forgetall % traag dus ...
\doifvaluesomething{\??ko#1\c!align} % wordt al expanded in spa
{\expanded{\setupalign[\getvalue{\??ko#1\c!align}]}}%
\doifvaluesomething{\??ko#1\c!tolerance} % wordt al expanded in spa
@@ -1371,7 +1414,7 @@
\unexpanded\def\\{\space}
\def\emptyheadcorrection % experimental, should work
- {\ifemptyhead % well with na=\blank
+ {\ifemptyhead % well with na=\blank
\vskip-\lineheight
\dosomebreak\nobreak
\kern\zeropoint
@@ -1381,7 +1424,12 @@
\let\localkopprefix\empty
\def\headparameter#1% to do: everywhere in core-sec
- {\csname\??ko\currenthead#1\endcsname}
+ {\executeifdefined{\??ko\currenthead#1}\empty}
+
+% todo: write to list etc in both args or in enclosing h/vbox else it gets
+% lost when no #1 or #2 is typeset
+
+% we will use variables here
\def\dodododoconstructhead#1[#2]#3#4% [ref] {number} {title}
{\def\currenthead{#1}% dus #1 overal vervangen
@@ -1439,7 +1487,7 @@
\else
\headnumberfalse
\fi
- \convertexpanded{\getvalue{\??ko#1\c!expansion}}{#4}\asciititle
+ \defconvertexpanded\asciititle{\getvalue{\??ko#1\c!expansion}}{#4}%
%
\gdef\currentheadtext{#4}% scheelt args
\globallet\currentheadnumber\empty
@@ -1605,6 +1653,7 @@
\fi
\flushingcolumnfloatstrue
\someheadconversionfalse
+ \setfalse\ignorehandlepagebreak
\let\fullsectionnumber\limitedfullsectionnumber
% ignorespaces prevents spaces creeping in when after=\dontleavehmode
\ifdisplaysectionhead\ignorespaces\else\expandafter\GotoPar\fi}
@@ -1757,7 +1806,7 @@
{\setstrut
\begstrut
\ifcase\headtimingmode\hbox{#2}\fi
- \executeifdefined{\??ko#1\c!deeptextcommand}\firstofoneargument{#3}
+ \executeifdefined{\??ko#1\c!deeptextcommand}\firstofoneargument{#3}%
\endstrut}% \hbox prevents break
\xdef\localheadheight {\the\strutht}%
\xdef\localheaddepth {\the\strutdp}%
@@ -1938,7 +1987,7 @@
% no message needed here, should be a proper switch
\noflines\zerocount
\ifdisplaysectionhead
- % new
+ % new (tod tight == one following line up)
\processaction
[\getvalue{\??ko#1\c!hang}]
[ \v!line=>\hangheadplacement\noflines\zerocount,
@@ -2016,7 +2065,7 @@
{\ifhmode
\scratchcounter=\lastpenalty\unpenalty % no beauty in this
\ifdim\lastskip=\headsignal
- \handlepagebreakC{#1}%
+ \handlenopagebreak{#1}%
\global\settrue\continuoussectionhead
\else
\penalty\scratchcounter
@@ -2104,20 +2153,74 @@
{\localheadsetup
\begstrut\ifheadnumbercontent#1\hskip\numberheaddistance\fi#2}}
+% \defineheadplacement[\v!normal][\v!vertical]#1#2%
+% {\ifheadnumbercontent
+% \setbox0\hbox{{#1}\hskip\numberheaddistance}%
+% \vbox
+% {\localheadsetup
+% \hangindent 1\wd0
+% \hangafter 1
+% \noindent
+% \unhbox0 % don't use \strut's here!
+% #2}%
+% \else
+% \vbox
+% {\localheadsetup\noindent#2}%
+% \fi}
+%
+% enhanced version:
+
+% \setuphead
+% [chapter]
+% [numberwidth=2cm,hang=line,after={\blank[3*line]}]
+%
+% \chapter{Oeps oeps oeps} \input tufte \section{Oeps}
+% \chapter{Oeps oeps oeps} \section{Oeps} \input tufte
+
\defineheadplacement[\v!normal][\v!vertical]#1#2%
- {\ifheadnumbercontent
- \setbox0\hbox{{#1}\hskip\numberheaddistance}%
- \vbox
- {\localheadsetup
- \hangindent 1\wd0
- \hangafter 1
+ {\vbox
+ {\localheadsetup
+ \edef\headwidth {\headparameter\c!width }%
+ \edef\headnumberwidth{\headparameter\c!numberwidth}%
+ \edef\headtextwidth {\headparameter\c!textwidth }%
+ \ifheadnumbercontent
+ \ifx\headwidth\empty
+ \else
+ \ifx\headnumberwidth\empty
+ \ifx\headtextwidth\empty\else
+ \edef\headnumberwidth{\the\dimexpr\headwidth-\headtextwidth\relax}%
+ \fi
+ \else
+ \ifx\headtextwidth\empty
+ \edef\headtextwidth{\the\dimexpr\headwidth-\headnumberwidth\relax}%
+ \fi
+ \fi
+ \hsize\headwidth
+ \fi
+ \ifx\headnumberwidth\empty\else
+ \let\numberheaddistance\!!zeropoint
+ \fi
+ \setbox\scratchbox\hbox \ifx\headnumberwidth\empty\else to \headnumberwidth\fi{{#1}}%
+ \scratchdimen\dimexpr\wd\scratchbox+\numberheaddistance\relax
+ \ifx\headtextwidth\empty\else
+ \hsize\dimexpr\scratchdimen+\headparameter\c!textwidth\relax
+ \fi
+ \hangindent\scratchdimen
+ \hangafter \plusone
\noindent
- \unhbox0 % don't use \strut's here!
- #2}%
- \else
- \vbox
- {\localheadsetup\noindent#2}%
- \fi}
+ \box\scratchbox\hskip\numberheaddistance
+ \else
+ \ifx\headtextwidth\empty
+ \ifx\headwidth\empty
+ \else
+ \hsize\headwidth
+ \fi
+ \else
+ \hsize\headtextwidth
+ \fi
+ \noindent
+ \fi
+ #2}}
\def\placeheadmargin#1#2%
{\vbox
@@ -2285,7 +2388,7 @@
% The next check prevents hard to trace problems. I once
% set \c!command to nothing and (quite natural) got the
% wrong references etc. The whole bunch should be boxed!
- \expandafter\convertcommand\csname\??ko#1\c!command\endcsname\to\ascii
+ \expandafter\defconvertedcommand\expandafter\ascii\csname\??ko#1\c!command\endcsname
\doifnothing\ascii{\setvalue{\??ko#1\c!command}{\normalplacehead}}}
\def\setuphead
diff --git a/Master/texmf-dist/tex/context/base/core-spa.lua b/Master/texmf-dist/tex/context/base/core-spa.lua
new file mode 100644
index 00000000000..f5d6a11d1a4
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/core-spa.lua
@@ -0,0 +1,1072 @@
+if not modules then modules = { } end modules ['core-spa'] = {
+ version = 1.001,
+ comment = "companion to core-spa.tex",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- todo: test without unset
+
+-- vertical space handler
+
+vspacing = vspacing or { }
+
+vspacing.categories = {
+ [0] = 'discard',
+ [1] = 'largest',
+ [2] = 'force' ,
+ [3] = 'penalty',
+ [4] = 'add' ,
+ [5] = 'disable',
+ [6] = 'nowhite',
+ [7] = 'goback',
+}
+
+function vspacing.tocategories(str)
+ local t = { }
+ for s in str:gmatch("[^, ]") do
+ local n = tonumber(s)
+ if n then
+ t[vspacing.categories[n]] = true
+ else
+ t[b] = true
+ end
+ end
+ return t
+end
+
+function vspacing.tocategory(str)
+ if type(str) == "string" then
+ return set.tonumber(vspacing.tocategories(str))
+ else
+ return set.tonumber({ [vspacing.categories[str]] = true })
+ end
+end
+
+function vspacing.tostring(t)
+ local str = nil
+ for k,v in pairs(vspacing.categories) do
+ if t[v] then
+ if str then str = str .. " +" .. v else str = "+" .. v end
+ else
+ if str then str = str .. " -" .. v else str = "-" .. v end
+ end
+ end
+ return str or ""
+end
+
+do
+
+ local map = { }
+ local skip = { }
+
+ vspacing.fixed = false
+
+ function vspacing.analyse(str)
+ local category, order, penalty, command, fixed = { }, 0, 0, { }, vspacing.fixed
+ local function analyse(str)
+ for sign,amount,_,keyword in str:gmatch("([+%-]*)([%.%d]*)([%*]*)([^,%* ]+)") do
+ if keyword then
+ if map[keyword] then
+ analyse(map[keyword])
+ elseif keyword == "fixed" then
+ fixed = true
+ elseif keyword == "flexible" then
+ fixed = false
+ else
+ local a, b = keyword:match("(.-):(.-)$")
+ if a and b then
+ if a == "category" then
+ -- is a set
+ local n = tonumber(b)
+ if n then
+ category[vspacing.categories[n]] = true
+ else
+ category[b] = true
+ end
+ elseif a == "order" then
+ -- last one counts
+ order = tonumber(b) or 0
+ elseif a == "penalty" then
+ -- last one counts
+ penalty = tonumber(b) or 0
+ elseif a == "skip" then
+ -- last one counts
+ command[#command+1] = { 1, tonumber[b] }
+ end
+ else
+ if amount == "" then amount = 1 end
+ if sign == "-" then amount = -amount end
+ if skip[keyword] then
+ command[#command+1] = { amount, skip[keyword][1], skip[keyword][2] }
+ end
+ end
+ end
+ end
+ end
+ end
+ analyse(str)
+ category = set.tonumber(category)
+ local p = print
+ p("\\startblankhandling")
+ if category > 0 then
+ p(("\\setblankcategory{%s}"):format(category))
+ end
+ if order > 0 then
+ p(("\\setblankorder{%s}"):format(order))
+ end
+ if penalty > 0 then
+ p(("\\setblankpenalty{%s}"):format(penalty))
+ end
+ for k,v in ipairs(command) do
+ p(("\\addblankskip{%s}{%s}{%s}"):format(v[1],v[2],v[3]))
+ end
+ if fixed then
+ p("\\fixedblankskip")
+ else
+ p("\\flexibleblankskip")
+ end
+ p("\\stopblankhandling")
+ end
+
+ function vspacing.setmap(from,to)
+ map[from] = to
+ end
+
+ function vspacing.setskip(key,value,grid)
+ if value ~= "" then
+ if grid == "" then grid = value end
+ skip[key] = { value, grid }
+ end
+ end
+
+end
+
+-- implementation
+
+nodes.snapvalues = { }
+
+function nodes.setsnapvalue(n,ht,dp)
+ nodes.snapvalues[n] = { ht, dp, ht+dp }
+end
+
+do
+
+ nodes.trace_collapse = false
+
+ local kern, glue, penalty, hlist = node.id('kern'), node.id('glue'), node.id('penalty'), node.id('hlist')
+
+ local has_attribute = node.has_attribute
+ local has_field = node.has_field
+
+ local trace_list = { }
+
+ local function reset_tracing()
+ trace_list = { }
+ end
+ local function trace_skip(str,sc,so,sp,data)
+ trace_list[#trace_list+1] = string.format("%s %10s %10s %10s %10s", str:padd(8), (data.spec and data.spec.width) or "?", sc or "-", so or "-", sp or "-")
+ end
+ local function trace_info(...)
+ trace_list[#trace_list+1] = table.concat({...}," ")
+ end
+ local function trace_done(str,data)
+ if data.id == penalty then
+ trace_list[#trace_list+1] = string.format("%s %10s penalty", str:padd(8), data.penalty)
+ else
+ trace_list[#trace_list+1] = string.format("%s %10s glue", str:padd(8), (data.spec and data.spec.width) or "?")
+ end
+ end
+ local function show_tracing()
+ texio.write_nl(table.concat(trace_list,"\n"))
+ end
+
+ -- we assume that these are defined
+
+ local skip_category = attributes.numbers['skip-category'] or 101
+ local skip_penalty = attributes.numbers['skip-penalty'] or 102
+ local skip_order = attributes.numbers['skip-order'] or 103
+ local snap_category = attributes.numbers['snap-category'] or 111
+ local display_math = attributes.numbers['display-math'] or 121
+
+ -- alignment box begin_of_par vmode_par hmode_par insert penalty before_display after_display
+
+ local user_skip = 0
+ local line_skip = 1
+ local baseline_skip = 2
+ local par_skip = 3
+ local above_display_skip = 4
+ local below_display_skip = 5
+ local above_display_short_skip = 6
+ local below_display_short_skip = 7
+ local left_skip_code = 8
+ local right_skip_code = 9
+ local top_skip_code = 10
+ local split_top_skip_code = 11
+ local tab_skip_code = 12
+ local space_skip_code = 13
+ local xspace_skip_code = 14
+ local par_fill_skip_code = 15
+ local thin_mu_skip_code = 16
+ local med_mu_skip_code = 17
+ local thick_mu_skip_code = 18
+
+ local skips = {
+ [ 0] = "user_skip",
+ [ 1] = "line_skip",
+ [ 2] = "baseline_skip",
+ [ 3] = "par_skip",
+ [ 4] = "above_display_skip",
+ [ 5] = "below_display_skip",
+ [ 6] = "above_display_short_skip",
+ [ 7] = "below_display_short_skip",
+ [ 8] = "left_skip_code",
+ [ 9] = "right_skip_code",
+ [10] = "top_skip_code",
+ [11] = "split_top_skip_code",
+ [12] = "tab_skip_code",
+ [13] = "space_skip_code",
+ [14] = "xspace_skip_code",
+ [15] = "par_fill_skip_code",
+ [16] = "thin_mu_skip_code",
+ [17] = "med_mu_skip_code",
+ [18] = "thick_mu_skip_code",
+ }
+
+ function nodes.is_display_math(head)
+ local n = head.prev
+ while n do
+ local id = n.id
+ if id == penalty then
+ elseif id == glue then
+ if n.subtype == 6 then -- above_display_short_skip
+ return true
+ end
+ else
+ break
+ end
+ n = n.prev
+ end
+ n = head.next
+ while n do
+ local id = n.id
+ if id == penalty then
+ elseif id == glue then
+ if n.subtype == 7 then -- below_display_short_skip
+ return true
+ end
+ else
+ break
+ end
+ n = n.next
+ end
+ return false
+ end
+
+ local function collapser(head,where)
+ if head and head.next then
+node.slide(head) -- hm, why
+ input.starttiming(nodes)
+ local trace = nodes.trace_collapse
+ local current, tail = head, nil
+ local glue_order, glue_data = 0, nil
+ local penalty_order, penalty_data, natural_penalty = 0, nil, nil
+ if trace then reset_tracing() end
+ local parskip, ignore_parskip, ignore_following, ignore_whitespace = nil, false, false, false
+ if trace then trace_info("start analyzing") end
+ while current do
+ local id = current.id
+ if id == glue and current.subtype == 0 then -- todo, other subtypes, like math
+ local sc = has_attribute(current,skip_category)
+ local so = has_attribute(current,skip_order ) or 1
+ local sp = has_attribute(current,skip_penalty )
+ if not sc then
+ if glue_data then
+ if trace then trace_done("before",glue_data) end
+ head, current = nodes.before(head,current,glue_data)
+ end
+ if trace then trace_skip("natural",sc,so,sp,current) end
+ glue_order, glue_data = 0, nil
+ current = current.next
+ else
+ local sct = set.totable(sc)
+ if trace then trace_info("catset",vspacing.tostring(sct)) end
+ if sct.disable then
+ ignore_following = true
+ end
+ if sct.nowhite then
+ ignore_whitespace = true
+ end
+ if sct.discard then
+ if trace then trace_skip("ignore",sc,so,sp,current) end
+ head, current = nodes.remove(head, current, true)
+ else
+ if sp then
+ if not penalty_data then
+ penalty_data = sp
+ elseif penalty_order < so then
+ penalty_order, penalty_data = so, sp
+ elseif penalty_order == so and sp > penalty_data then
+ penalty_data = sp
+ end
+ end
+ if ignore_following then
+ if trace then trace_skip("disabled",sc,so,sp,current) end
+ head, current = nodes.remove(head, current, true)
+ elseif not glue_data then
+ if trace then trace_skip("assign",sc,so,sp,current) end
+ glue_order = so
+ head, current, glue_data = nodes.remove(head, current)
+ elseif glue_order < so then
+ if trace then trace_skip("force",sc,so,sp,current) end
+ glue_order = so
+ node.free(glue_data)
+ head, current, glue_data = nodes.remove(head, current)
+ elseif glue_order == so then
+ if sct.largest then
+ if current.spec.width > glue_data.spec.width then
+ if trace then trace_skip("larger",sc,so,sp,current) end
+ node.free(glue_data)
+ head, current, glue_data = nodes.remove(head, current)
+ else
+ if trace then trace_skip("smaller",sc,so,sp,current) end
+ head, current = nodes.remove(head, current, true)
+ end
+ elseif sct.goback then
+ if trace then trace_skip("force",sc,so,sp,current) end
+ node.free(glue_data)
+ head, current, glue_data = nodes.remove(head, current)
+ elseif sct.force then
+ -- todo: inject kern
+ if trace then trace_skip("force",sc,so,sp,current) end
+ node.free(glue_data)
+ head, current, glue_data = nodes.remove(head, current)
+ elseif sct.penalty then
+ if trace then trace_skip("penalty",sc,so,sp,current) end
+ node.free(glue_data)
+ head, current = nodes.remove(head, current, true)
+ elseif sct.add then
+ if trace then trace_skip("add",sc,so,sp,current) end
+ local old, new = glue_data.spec, current.spec
+ old.width = old.width + new.width
+ old.stretch = old.stretch + new.stretch
+ old.shrink = old.shrink + new.shrink
+ head, current = nodes.remove(head, current, true)
+ else
+ if trace then trace_skip("unknown",sc,so,sp,current) end
+ head, current = nodes.remove(head, current, true)
+ end
+ else
+ if trace then trace_skip("unknown",sc,so,sp,current) end
+ head, current = nodes.remove(head, current, true)
+ end
+ end
+ end
+ -- elseif id == penalty then
+ -- natural_penalty = current.penalty
+ -- head, current = nodes.remove(head, current, true)
+ elseif id == glue and current.subtype == 2 then
+ -- baselineskip
+ local sn = has_attribute(current,snap_category)
+ if sn then
+ -- local sv = nodes.snapvalues[sn]
+ -- if sv then
+ head, current = nodes.remove(head, current, true)
+ -- else
+ -- current = current.next
+ -- end
+ elseif ignore_whitespace then
+ head, current = nodes.remove(head, current, true)
+ else
+ current = current.next
+ end
+ elseif id == glue and current.subtype == 3 then
+ parskip = current
+ current = current.next
+ else
+ if trace then trace_info(node.type(current)) end
+ if glue_data then
+ head, current = nodes.before(head,current,glue_data)
+ if trace then trace_done("before",glue_data) end
+ glue_order, glue_data = 0, nil
+ end
+ if id == hlist and where == 'hmode_par' then
+ local list = current.list
+ if list then
+ local sn = has_attribute(list,snap_category)
+ if sn then
+ local sv = nodes.snapvalues[sn]
+ if sv then
+ local height, depth, lineheight = sv[1], sv[2], sv[3]
+ current.height = math.ceil((current.height-height)/lineheight)*lineheight + height
+ current.depth = math.ceil((current.depth -depth )/lineheight)*lineheight + depth
+ end
+ end
+ end
+ end
+ current = current.next
+ end
+ tail = current -- WRONG ! ! ! !
+ end
+ if trace then trace_info("stop analyzing") end
+ -- if natural_penalty and (not penalty_data or natural_penalty > penalty_data) then
+ -- penalty_data = natural_penalty
+ -- end
+ if trace then trace_info("start flushing") end
+ if parskip and glue_data then
+ local ps, gs = parskip.spec, glue_data.spec
+ if ps and gs and ps.width > gs.width then
+ gs.width = ps.width
+ head, current = nodes.remove(head, parskip, true)
+ end
+ end
+ if glue_data then
+ if trace then trace_done("first",glue_data) end
+ head, tail = nodes.after(head,tail,glue_data)
+ end
+ if penalty_data then
+ local p = nodes.penalty(penalty_data)
+ if trace then trace_done("second",p) end
+ head, head = nodes.before(head,head,p)
+ end
+ if trace then trace_info("stop flushing") end
+ if trace then show_tracing() end
+ input.stoptiming(nodes)
+ end
+ return head, true
+ end
+
+ local head, tail = nil, nil
+
+ function nodes.flush_vertical_spacing()
+ if head and head.next then
+ local t = collapser(head)
+ head = nil
+ -- tail = nil
+ return t
+ else
+ return head
+ end
+ end
+
+ function nodes.handle_page_spacing(t, where)
+ -- we need to add the latest t too, else we miss skips and such
+ if t then
+-- node.slide(t) -- redunant
+ if t.next then
+ local tt = node.slide(t)
+ local id = tt.id
+ if id == glue then -- or id == penalty then -- or maybe: if not hlist or vlist
+ if head then
+ t.prev = tail
+ tail.next = t
+ else
+ head = t
+ end
+ tail = tt
+ t = nil
+ else
+ if head then
+ t.prev = tail
+ tail.next = t
+ -- tail = tt
+ t = collapser(head,where)
+ head = nil
+ -- tail = nil
+ else
+ t = collapser(t,where)
+ end
+ end
+ elseif head then
+ t.prev = tail
+ tail.next = t
+ t = collapser(head,where)
+ head = nil
+ else
+ t = collapser(t,where)
+ end
+ end
+ return t
+ end
+
+ function nodes.handle_vbox_spacing(t)
+ if t and t.next then
+ node.slide(t)
+ return collapser(t,'whole')
+ else
+ return t
+ end
+ end
+
+end
+
+-- experimental callback definitions will be moved elsewhere
+
+-- not yet ... we need to get rid of lastskip stuff first
+--
+-- callback.register('vpack_filter', nodes.handle_vbox_spacing)
+-- callback.register('buildpage_filter', nodes.handle_page_spacing)
+
+-- horizontal stuff
+
+-- probably a has_glyphs is rather fast too
+
+do
+
+ local has_attribute = node.has_attribute
+ local unset_attribute = node.unset_attribute
+ local set_attribute = node.set_attribute
+
+--~ local function unset_attribute(n,attribute)
+--~ set_attribute(n,attribute,0)
+--~ end
+
+ local glyph = node.id("glyph")
+ local kern = node.id("kern")
+ local disc = node.id('disc')
+ local glue = node.id('glue')
+ local hlist = node.id('hlist')
+ local vlist = node.id('vlist')
+
+ spacings = spacings or { }
+ spacings.mapping = spacings.mapping or { }
+ spacings.enabled = false
+
+ input.storage.register(false,"spacings/mapping", spacings.mapping, "spacings.mapping")
+
+ function spacings.setspacing(id,char,left,right)
+ local mapping = spacings.mapping[id]
+ if not mapping then
+ mapping = { }
+ spacings.mapping[id] = mapping
+ end
+ local map = mapping[char]
+ if not map then
+ map = { }
+ mapping[char] = map
+ end
+ map.left, map.right = left, right
+ end
+
+ -- todo: no ligatures
+
+ function spacings.process(namespace,attribute,head)
+ local done, mapping, fontids = false, spacings.mapping, fonts.tfm.id
+ for start in node.traverse_id(glyph,head) do -- tricky since we inject
+ local attr = has_attribute(start,attribute)
+ if attr and attr > 0 then
+ local map = mapping[attr]
+ if map then
+ map = map[start.char]
+ unset_attribute(start,attribute)
+ if map then
+ local kern, prev = map.left, start.prev
+ if kern and kern ~= 0 and prev and prev.id == glyph then
+ node.insert_before(head,start,nodes.kern(tex.scale(fontids[start.font].parameters[6],kern)))
+ -- node.insert_before(head,start,nodes.kern(fontids[start.font].parameters[6]*kern))
+ done = true
+ end
+ local kern, next = map.right, start.next
+ if kern and kern ~= 0 and next and next.id == glyph then
+ node.insert_after(head,start,nodes.kern(tex.scale(fontids[start.font].parameters[6],kern)))
+ -- node.insert_after(head,start,nodes.kern(fontids[start.font].parameters[6]*kern))
+ done = true
+ end
+ end
+ end
+ end
+ end
+ return head, done
+ end
+
+ lists.plugins.spacing = {
+ namespace = spacings,
+ processor = spacings.process,
+ }
+
+ kerns = kerns or { }
+ kerns.mapping = kerns.mapping or { }
+ kerns.enabled = false
+
+ input.storage.register(false, "kerns/mapping", kerns.mapping, "kerns.mapping")
+
+ function kerns.setspacing(id,factor)
+ kerns.mapping[id] = factor
+ end
+
+-- local marks = fti[font].shared.otfdata.luatex.marks
+-- if not marks[tchar] then
+
+ function kerns.process(namespace,attribute,head) -- todo interchar kerns / disc nodes / can be made faster
+ local fti, scale = fonts.tfm.id, tex.scale
+ local start, done, mapping, fontids, lastfont = head, false, kerns.mapping, fonts.tfm.id, nil
+ while start do
+ -- faster to test for attr first
+ local attr = has_attribute(start,attribute)
+ if attr and attr > 0 then
+ unset_attribute(start,attribute)
+ local krn = mapping[attr]
+ if krn and krn ~= 0 then
+ local id = start.id
+ if id == glyph then
+ lastfont = start.font
+ local c = start.components
+ if c then
+ local s = start
+ local tail = node.slide(c)
+ if s.prev then
+ s.prev.next = c
+ c.prev = s.prev
+ else
+ head = c
+ end
+ if s.next then
+ s.next.prev = tail
+ end
+ tail.next = s.next
+ start = c
+ start.attr = s.attr
+ s.attr = nil
+ s.components = nil
+ node.free(s)
+ done = true
+ end
+ local prev = start.prev
+ if prev then
+ local pid = prev.id
+ if not pid then
+ -- nothing
+ elseif pid == kern and prev.subtype == 0 then
+ prev.subtype = 1
+ prev.kern = prev.kern + scale(fontids[lastfont].parameters[6],krn)
+ -- prev.kern = prev.kern + fontids[lastfont].parameters[6]*krn
+ done = true
+ elseif pid == glyph then
+ -- fontdata access can be done more efficient
+ if prev.font == lastfont then
+ local prevchar, lastchar = prev.char, start.char
+ local tfm = fti[lastfont].characters[prevchar]
+ local ickern = tfm.kerns
+ if ickern and ickern[lastchar] then
+ krn = scale(ickern[lastchar]+fontids[lastfont].parameters[6],krn)
+ -- krn = krn*(ickern[lastchar]+fontids[lastfont].parameters[6])
+ else
+ krn = scale(fontids[lastfont].parameters[6],krn)
+ -- krn = krn*fontids[lastfont].parameters[6]
+ end
+ else
+ krn = scale(fontids[lastfont].parameters[6],krn)
+ -- krn = krn*fontids[lastfont].parameters[6]
+ end
+ node.insert_before(head,start,nodes.kern(krn))
+ done = true
+ elseif pid == disc then
+ local disc = start.prev -- disc
+ local pre, post, replace = disc.pre, disc.post, disc.replace
+ if pre then -- must pair with start.prev
+ local before = node.copy(disc.prev)
+ pre.prev = before
+ before.next = pre
+ before.prev = nil
+ pre = kerns.process(namespace,attribute,before)
+ pre = pre.next
+ pre.prev = nil
+ disc.pre = pre
+ node.free(before)
+ end
+ if post then -- must pair with start
+ local after = node.copy(disc.next)
+ local tail = node.slide(post)
+ tail.next = after
+ after.prev = tail
+ after.next = nil
+ post = kerns.process(namespace,attribute,post)
+ tail.next = nil
+ disc.post = post
+ node.free(after)
+ end
+ if replace then -- must pair with start and start.prev
+ local before = node.copy(disc.prev)
+ local after = node.copy(disc.next)
+ local tail = node.slide(post)
+ replace.prev = before
+ before.next = replace
+ before.prev = nil
+ tail.next = after
+ after.prev = tail
+ after.next = nil
+ replace = kerns.process(namespace,attribute,before)
+ replace = replace.next
+ replace.prev = nil
+ tail.next = nil
+ disc.replace = replace
+ node.free(after)
+ node.free(before)
+ end
+ end
+ end
+ elseif id == glue and start.subtype == 0 then
+ local s = start.spec
+ local w = s.width
+ if w > 0 then
+ local width, stretch, shrink = w+2*scale(w,krn), s.stretch, s.shrink
+ start.spec = nodes.glue_spec(width,scale(stretch,width/w),scale(shrink,width/w))
+ -- local width, stretch, shrink = w+2*w*krn, s.stretch, s.shrink
+ -- start.spec = nodes.glue_spec(width,stretch*width/w,shrink*width/w))
+ done = true
+ end
+ elseif false and id == kern and start.subtype == 0 then -- handle with glyphs
+ local sk = start.kern
+ if sk > 0 then
+ -- start.kern = scale(sk,krn)
+ start.kern = sk*krn
+ done = true
+ end
+ elseif lastfont and (id == hlist or id == vlist) then -- todo: lookahead
+ if start.prev then
+ node.insert_before(head,start,nodes.kern(scale(fontids[lastfont].parameters[6],krn)))
+ -- node.insert_before(head,start,nodes.kern(fontids[lastfont].parameters[6]*krn))
+ done = true
+ end
+ if start.next then
+ node.insert_after(head,start,nodes.kern(scale(fontids[lastfont].parameters[6],krn)))
+ -- node.insert_after(head,start,nodes.kern(fontids[lastfont].parameters[6]*krn))
+ done = true
+ end
+ end
+ end
+ end
+ if start then
+ start = start.next
+ end
+ end
+ return head, done
+ end
+
+ lists.plugins.kern = {
+ namespace = kerns,
+ processor = kerns.process,
+ }
+
+ -- spacing == attributename !! does not belong here but we will
+ -- relocate node and attribute stuff once it's more complete !!
+
+ cases = cases or { }
+ cases.enabled = false
+ cases.actions = { }
+
+ -- hm needs to be run before glyphs: chars.plugins
+
+ local function helper(start, code, codes)
+ local data, char = characters.data, start.char
+ local dc = data[char]
+ if dc then
+ local fnt = start.font
+ local ifc = fonts.tfm.id[fnt].characters
+ local ucs = dc[codes]
+ if ucs then
+ local ok = true
+ for i=1,#ucs do
+ ok = ok and ifc[ucs[i]]
+ end
+ if ok then
+ local prev, original, copy = start, start, node.copy
+ for i=1,#ucs do
+ local chr = ucs[i]
+ prev = start
+ if i == 1 then
+ start.char = chr
+ else
+ local g = copy(original)
+ g.char = chr
+ local next = start.next
+ g.prev = start
+ if next then
+ g.next = next
+ start.next = g
+ next.prev = g
+ end
+ start = g
+ end
+ end
+ return prev, true
+ end
+ return start, false
+ end
+ local uc = dc[code]
+ if uc and ifc[uc] then
+ start.char = uc
+ return start, true
+ end
+ end
+ return start, false
+ end
+
+ local function upper(start)
+ return helper(start,'uccode','uccodes')
+ end
+ local function lower(start)
+ return helper(start,'lccode','lccodes')
+ end
+
+ cases.actions[1], cases.actions[2] = upper, lower
+
+ cases.actions[3] = function(start)
+ local prev = start.prev
+ if prev and prev.id == kern and prev.subtype == 0 then
+ prev = prev.prev
+ end
+ if not prev or prev.id ~= glyph then
+ return upper(start)
+ else
+ return start, false
+ end
+ end
+
+ cases.actions[4] = function(start)
+ local prev, next = start.prev, start.next
+ if prev and prev.id == kern and prev.subtype == 0 then
+ prev = prev.prev
+ end
+ if next and next.id == kern and next.subtype == 0 then
+ next = next.next
+ end
+ if (not prev or prev.id ~= glyph) and next and next.id == glyph then
+ return upper(start)
+ else
+ return start, false
+ end
+ end
+
+ cases.actions[5] = function(start)
+ local data = characters.data
+ local ch = start.char
+ local mr = math.random
+ local tfm = fonts.tfm.id[start.font].characters
+ if data[ch].lccode then
+ while true do
+ local d = data[mr(1,0xFFFF)]
+ if d then
+ local uc = d.uccode
+ if uc and tfm[uc] then
+ start.char = uc
+ return start, true
+ end
+ end
+ end
+ elseif data[ch].uccode then
+ while true do
+ local d = data[mr(1,0xFFFF)]
+ if d then
+ local lc = d.lccode
+ if lc and tfm[lc] then
+ start.char = lc
+ return start, true
+ end
+ end
+ end
+ else
+ return start, false
+ end
+ end
+
+ -- node.traverse_id_attr
+
+ function cases.process(namespace,attribute,head) -- not real fast but also not used on much data
+ local done, actions = false, cases.actions
+ for start in node.traverse_id(glyph,head) do
+ local attr = has_attribute(start,attribute)
+ if attr and attr > 0 then
+ unset_attribute(start,attribute)
+ local action = actions[attr]
+ if action then
+ local _, ok = action(start)
+ done = done and ok
+ end
+ end
+ end
+ return head, done
+ end
+
+ chars.plugins.case = {
+ namespace = cases,
+ processor = cases.process,
+ }
+
+ breakpoints = breakpoints or { }
+ breakpoints.mapping = breakpoints.mapping or { }
+ breakpoints.methods = breakpoints.methods or { }
+ breakpoints.enabled = false
+
+ input.storage.register(false,"breakpoints/mapping", breakpoints.mapping, "breakpoints.mapping")
+
+ function breakpoints.setreplacement(id,char,kind,before,after)
+ local mapping = breakpoints.mapping[id]
+ if not mapping then
+ mapping = { }
+ breakpoints.mapping[id] = mapping
+ end
+ mapping[char] = { kind or 1, before or 1, after or 1 }
+ end
+
+ breakpoints.methods[1] = function(head,start)
+ -- no discretionary needed
+ -- \def\prewordbreak {\penalty\plustenthousand\hskip\zeropoint\relax}
+ -- \def\postwordbreak {\penalty\zerocount\hskip\zeropoint\relax}
+ -- texio.write_nl(string.format("injecting replacement type %s for character %s",map[1],utf.char(start.char)))
+ if start.prev and start.next then
+ node.insert_before(head,start,nodes.penalty(10000))
+ node.insert_before(head,start,nodes.glue(0))
+ node.insert_after(head,start,nodes.glue(0))
+ node.insert_after(head,start,nodes.penalty(0))
+ end
+ return head, start
+ end
+ breakpoints.methods[2] = function(head,start) -- ( => (-
+ if start.prev and start.next then
+ local tmp = start
+ start = nodes.disc()
+ start.prev, start.next = tmp.prev, tmp.next
+ tmp.prev.next, tmp.next.prev = start, start
+ tmp.prev, tmp.next = nil, nil
+ start.replace = tmp
+ local tmp, hyphen = node.copy(tmp), node.copy(tmp)
+ hyphen.char = languages.prehyphenchar(tmp.lang)
+ tmp.next, hyphen.prev = hyphen, tmp
+ start.post = tmp
+ node.insert_before(head,start,nodes.penalty(10000))
+ node.insert_before(head,start,nodes.glue(0))
+ node.insert_after(head,start,nodes.glue(0))
+ node.insert_after(head,start,nodes.penalty(10000))
+ end
+ return head, start
+ end
+ breakpoints.methods[3] = function(head,start) -- ) => -)
+ if start.prev and start.next then
+ local tmp = start
+ start = nodes.disc()
+ start.prev, start.next = tmp.prev, tmp.next
+ tmp.prev.next, tmp.next.prev = start, start
+ tmp.prev, tmp.next = nil, nil
+ start.replace = tmp
+ local tmp, hyphen = node.copy(tmp), node.copy(tmp)
+ hyphen.char = languages.prehyphenchar(tmp.lang)
+ tmp.prev, hyphen.next = hyphen, tmp
+ start.pre = hyphen
+ node.insert_before(head,start,nodes.penalty(10000))
+ node.insert_before(head,start,nodes.glue(0))
+ node.insert_after(head,start,nodes.glue(0))
+ node.insert_after(head,start,nodes.penalty(10000))
+ end
+ return head, start
+ end
+
+ function breakpoints.process(namespace,attribute,head)
+ local done, mapping, fontids = false, breakpoints.mapping, fonts.tfm.id
+ local start, n = head, 0
+ while start do
+ local id = start.id
+ if id == glyph then
+ local attr = has_attribute(start,attribute)
+ if attr and attr > 0 then
+ unset_attribute(start,attribute) -- maybe test for subtype > 256 (faster)
+ -- look ahead and back n chars
+ local map = mapping[attr]
+ if map then
+ local smap = map[start.char]
+ if smap then
+ if n >= smap[2] then
+ local m = smap[3]
+ local next = start.next
+ while next do -- gamble on same attribute
+ local id = next.id
+ if id == glyph then -- gamble on same attribute
+ if map[next.char] then
+ break
+ elseif m == 1 then
+ local method = breakpoints.methods[smap[1]]
+ if method then
+ head, start = method(head,start)
+ done = true
+ end
+ break
+ else
+ m = m - 1
+ next = next.next
+ end
+ elseif id == kern and next.subtype == 0 then
+ next = next.next
+ -- ignore intercharacter kerning, will go way
+ else
+ -- we can do clever and set n and jump ahead but ... not now
+ break
+ end
+ end
+ end
+ n = 0
+ else
+ n = n + 1
+ end
+ else
+ n = 0
+ end
+ end
+ elseif id == kern and start.subtype == 0 then
+ -- ignore intercharacter kerning, will go way
+ else
+ n = 0
+ end
+ start = start.next
+ end
+ return head, done
+ end
+
+ chars.plugins.breakpoint = {
+ namespace = breakpoints,
+ processor = breakpoints.process,
+ }
+
+end
+
+-- educational: snapper
+
+--~ function demo_snapper(head,where) -- snap_category 105 / nodes.snapvalue = { [1] = { 8*65536, 4*65536, 12*65536 } }
+--~ if head then
+--~ local current, tail, dummy = head, nil, nil
+--~ while current do
+--~ local id = current.id
+--~ if id == glue and current.subtype == 2 then
+--~ local sn = has_attribute(current,snap_category)
+--~ if sn then
+--~ local sv = nodes.snapvalues[sn]
+--~ if sv then
+--~ head, current, dummy = node.delete(head, current)
+--~ node.free(dummy)
+--~ else
+--~ current = current.next
+--~ end
+--~ else
+--~ current = current.next
+--~ end
+--~ else
+--~ if id == hlist and where == 'hmode_par' and current.list then
+--~ local sn = has_attribute(current.list,snap_category)
+--~ if sn then
+--~ local sv = nodes.snapvalues[sn]
+--~ if sv then
+--~ local height, depth, lineheight = sv[1], sv[2], sv[3]
+--~ current.height = math.ceil((current.height-height)/lineheight)*lineheight + height
+--~ current.depth = math.ceil((current.depth -depth )/lineheight)*lineheight + depth
+--~ end
+--~ end
+--~ end
+--~ current = current.next
+--~ end
+--~ tail = current
+--~ end
+--~ end
+--~ return head
+--~ end
+
+--~ callback.register('buildpage_filter', demo_snapper)
diff --git a/Master/texmf-dist/tex/context/base/core-spa.mkii b/Master/texmf-dist/tex/context/base/core-spa.mkii
new file mode 100644
index 00000000000..b3d71699d39
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/core-spa.mkii
@@ -0,0 +1,46 @@
+%D \module
+%D [ file=core-spa,
+%D version=1997.03.31,
+%D title=\CONTEXT\ Core Macros,
+%D subtitle=Spacing,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\unprotect
+
+% Just after we implemented the \MKIV\ code, Thanh posted a patch for
+% \PDFTEX. The following code is untested! (\LUATEX\ does not contain
+% this code!)
+
+\ifx\pdfkeeplinedimen\undefined
+
+ \let\mksetupgridsnapping \relax
+ \let\mkenablegridsnapping \relax
+ \let\mkdisablegridsnapping\relax
+
+\else
+
+ \def\mksetupgridsnapping
+ {\pdfeachlineheight \openstrutheight
+ \pdfeachlinedepth \openstrutdepth
+ \pdffirstlineheight \pdfeachlineheight
+ \pdflastlinedepth \pdfeachlinedepth}
+
+ \def\mkenablegridsnapping
+ {\pdfkeeplinedimen\maxdimen
+ \topskip\strutht
+ \offinterlineskip}
+
+ \def\mkdisablegridsnapping
+ {\pdfkeeplinedimen\zeropoint
+ % reset topskip
+ \oninterlineskip}
+
+\fi
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/core-spa.mkiv b/Master/texmf-dist/tex/context/base/core-spa.mkiv
new file mode 100644
index 00000000000..1352e2582bf
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/core-spa.mkiv
@@ -0,0 +1,369 @@
+%D \module
+%D [ file=core-spa,
+%D version=1997.03.31,
+%D title=\CONTEXT\ Core Macros,
+%D subtitle=Spacing,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{Context Core Macros / Buffers}
+
+\unprotect
+
+% category:
+%
+% 0 == discard
+% 1 == only if larger
+% 2 == force even if smaller
+% 3 == only take penalty component
+% 4 == add to existing skip
+% 5 == ignore following skips (== disable)
+
+% penalty:
+%
+% larger wins
+
+% order:
+%
+% larger wins
+
+\defineattribute[kern-chars]
+
+\defineattribute[skip-category]
+\defineattribute[skip-penalty]
+\defineattribute[skip-order]
+
+\defineattribute[snap-category]
+
+\defineattribute[display-math]
+
+\registerctxluafile{core-spa}{1.001}
+
+% \start \dosetstretch{.25em} \setuptolerance[tolerant,stretch] \input tufte \endgraf \stop
+% \start \dosetstretch{.5em} effe flink doorfietsen \stop
+
+\def\dosetstretch#1% to be interfaces
+ {\relax\ifdim#1>\zeropoint
+ \dosetattribute{kern-chars}{\number\dimexpr#1\relax}%
+ \else
+ \doresetattribute{kern-chars}%
+ \fi}
+
+\appendtoks\doresetattribute{kern-chars}\to\everyforgetall
+
+\def\mksetupgridsnapping
+ {\ctxlua{nodes.setsnapvalue(1,\number\openstrutheight,\number\openstrutdepth)}}
+
+\def\mkenablegridsnapping
+ {\dosetattribute{snap-category}{1}%
+ \topskip\strutht
+ \offinterlineskip}
+
+\def\mkdisablegridsnapping
+ {\doresetattribute{snap-category}%
+ % reset topskip
+ \oninterlineskip}
+
+% experimental spacing
+%
+% test: oeps {\setcharacterspacing[frenchpunctuation]x: xx \bfd x: xx} oeps: test
+
+\defineattribute[spacing]
+
+\newcount \maxcharacterspacingid
+
+\def\definecharacterspacing[#1]%
+ {\ifcsname\??ch#1\endcsname \else
+ \global\advance\maxcharacterspacingid\plusone
+ \setxvalue{\??ch:#1}{\the\maxcharacterspacingid}%
+ \fi}
+
+\def\setupcharacterspacing
+ {\dotripleargument\dosetupcharacterspacing}
+
+\def\dosetupcharacterspacing[#1][#2][#3]%
+ {\ifcsname\??ch:#1\endcsname
+ \begingroup
+ \getparameters[\??ch][\c!left=0,\c!right=0,#3]%
+ \ctxlua{spacings.setspacing(\getvalue{\??ch:#1},\number#2,\@@chleft,\@@chright)}%
+ \endgroup
+ \fi}
+
+\def\setcharacterspacing
+ {\ctxlua{spacings.enabled=true}%
+ \gdef\setcharacterspacing[##1]{\dosetattribute{spacing}{\csname\??ch:##1\endcsname}}%
+ \setcharacterspacing}
+
+\letvalue{\??ch:\s!reset}\minusone
+
+\definecharacterspacing [frenchpunctuation] % name may change / unit is em
+
+\setupcharacterspacing [frenchpunctuation] ["003A] [\c!left =.25] % :
+\setupcharacterspacing [frenchpunctuation] ["003B] [\c!left =.25] % ;
+\setupcharacterspacing [frenchpunctuation] ["003F] [\c!left =.25] % ?
+\setupcharacterspacing [frenchpunctuation] ["0021] [\c!left =.25] % !
+\setupcharacterspacing [frenchpunctuation] ["00AB] [\c!right=.25] % guillemotleft/leftguillemot
+\setupcharacterspacing [frenchpunctuation] ["00BB] [\c!left =.25] % guillemotright/rightguillemot
+
+% more
+%
+% {\setcharacterkerning[extrakerning]\input davis\relax}
+
+\defineattribute[kern]
+
+\newcount \maxcharacterkerningid
+
+\def\definecharacterkerning
+ {\dosingleargument\dodefinecharacterkerning}
+
+\def\dodefinecharacterkerning[#1]%
+ {\ifcsname\??ck#1\endcsname \else
+ \global\advance\maxcharacterkerningid\plusone
+ \setxvalue{\??ck:#1}{\the\maxcharacterkerningid}%
+ \fi}
+
+\def\setupcharacterkerning
+ {\dodoubleargument\dosetupcharacterkerning}
+
+\def\dosetupcharacterkerning[#1][#2]%
+ {\ifcsname\??ck:#1\endcsname
+ \begingroup
+ \getparameters[\??ck][\c!factor=0,#2]%
+ \ctxlua{kerns.setspacing(\getvalue{\??ck:#1},\@@ckfactor)}%
+ \endgroup
+ \fi}
+
+\def\setcharacterkerning
+ {\ctxlua{kerns.enabled=true}%
+ \gdef\setcharacterkerning[##1]{\dosetattribute{kern}{\csname\??ck:##1\endcsname}}%
+ \setcharacterkerning}
+
+\letvalue{\??ck:\s!reset}\minusone
+
+\definecharacterkerning[extrakerning]
+
+\setupcharacterkerning[extrakerning][\c!factor=.125]
+
+% sorry, here:
+
+% test \WORD{test TEST \TeX} test
+% test \word{test TEST \TeX} test
+% test \Word{test TEST \TeX} test
+
+\defineattribute[case]
+
+\def\setcharactercasing
+ {\ctxlua{cases.enabled=true}%
+ \gdef\setcharactercasing[##1]{\dosetattribute{case}{\number##1}}%
+ \setcharactercasing}
+
+\def\WORD{\groupedcommand{\setcharactercasing[\plusone ]}{}}
+\def\word{\groupedcommand{\setcharactercasing[\plustwo ]}{}}
+\def\Word{\groupedcommand{\setcharactercasing[\plusthree]}{}} % \plusfour
+
+\let\WORDS\WORD
+\let\words\word
+\let\Words\Word
+
+% \definestartstop is not yet in available at core-spa time
+%
+% \startrandomized \input tufte \stoprandomized
+%
+% \definestartstop[randomized][\c!before=\dosetattribute{case}\plusfour,\c!after=]
+
+\def\randomizetext{\groupedcommand{\dosetattribute{case}\plusfive}{}}
+
+% compound stuff (under construction)
+
+\defineattribute[breakpoint]
+
+\newbox\breakpointbox
+
+\definesystemvariable {bp} % BreakPoint
+
+\exhyphenchar=\minusone % we use a different order then base tex, so we really need this
+
+\newcount \maxbreakpointsid
+
+\def\definebreakpoints
+ {\dosingleargument\dodefinebreakpoints}
+
+\def\dodefinebreakpoints[#1]%
+ {\ifcsname\??bp:#1\endcsname \else
+ \global\advance\maxbreakpointsid\plusone
+ \setxvalue{\??bp:#1}{\the\maxbreakpointsid}%
+ \fi}
+
+\def\installbreakpoint
+ {\dotripleempty\doinstallbreakpoint}
+
+% hm, we cannot prebuild lists, font dependent
+
+\def\doinstallbreakpoint[#1][#2][#3]%
+ {\ifcsname\??bp:#1\endcsname
+ \begingroup
+ \getparameters[\??bp][\c!type=1,\c!nleft=3,\c!nright=3,#3]%
+ \ctxlua{breakpoints.setreplacement(\csname\??bp:#1\endcsname,#2,\@@bptype,\@@bpnleft,\@@bpnright)}%
+ \endgroup
+ \fi}
+
+\def\setbreakpoints
+ {\ctxlua{breakpoints.enabled=true}%
+ \gdef\setbreakpoints[##1]{\dosetattribute{breakpoint}{\csname\??bp:##1\endcsname}}%
+ \setbreakpoints}
+
+\letvalue{\??bp:\s!reset}\minusone
+
+\definebreakpoints[compound]
+
+\installbreakpoint [compound] [\number`+] [\c!left=3,\c!right=3,\c!type=1]
+\installbreakpoint [compound] [\number`-] [\c!left=3,\c!right=3,\c!type=1]
+\installbreakpoint [compound] [\number`/] [\c!left=3,\c!right=3,\c!type=1]
+\installbreakpoint [compound] [\number`(] [\c!left=3,\c!right=3,\c!type=2]
+\installbreakpoint [compound] [\number`)] [\c!left=3,\c!right=3,\c!type=3]
+
+% \setbreakpoints[compound]
+
+% experimental code, not yet interfaced:
+
+% category:
+% 0 == discard discard
+% 1 == only if larger largest
+% 2 == force even if smaller force
+% 3 == only take penalty component penalty
+% 4 == add to existing skip add
+% 5 == disable (ignore following) disable
+% 6 == kill whitespace nowhite
+% 7 == discard previous goback
+%
+% penalty: larger wins
+% order: larger wins
+% category:2,order:5,penalty:10000,skip:value|kw
+%
+% always -- obsolete
+% none -- obsolete
+% outer -- obsolete
+% reset -- obsolete
+% \defineblankmethod [\v!joinedup] {\ifvmode\nointerlineskip\fi}
+
+% todo, in grid mode: vspacing.fixed = false
+
+\def\startblankhandling{\begingroup \blankskip \zeropoint}
+\def\stopblankhandling {\vskip \blankskip \endgroup}
+\def\setblankcategory#1{\dosetattribute{skip-category}{#1}}
+\def\setblankorder #1{\dosetattribute{skip-order}{#1}}
+\def\setblankpenalty #1{\dosetattribute{skip-penalty}{#1}}
+\def\addblankskip#1#2#3{\advance\blankskip#1\dimexpr\ifgridsnapping#3\else#2\fi\relax}
+\def\fixedblankskip {\blankskip1\blankskip}
+\def\flexibleblankskip {\blankskip1\blankskip\!!plus \skipgluefactor\blankskip\!!minus\skipgluefactor\blankskip}
+
+\def\definevspacingamount
+ {\dotripleempty\dodefinevspacingamount}
+
+\def\dodefinevspacingamount[#1][#2][#3]%
+ {\ctxlua{vspacing.setskip("#1","\detokenize{#2}","\detokenize{#3}")}}
+
+\def\definevspacing
+ {\dodoubleempty\dodefinevspacing}
+
+\def\dodefinevspacing[#1][#2]%
+ {\ctxlua{vspacing.setmap("#1","\detokenize{#2}")}}
+
+\def\vspacing
+ {\dosingleempty\dovspacing}
+
+\def\dovspacing[#1]%
+ {\ctxlua{vspacing.analyse("\iffirstargument#1\else default\fi")}}
+
+\definevspacingamount[\v!big] [\bigskipamount] [\openlineheight]
+\definevspacingamount[\v!medium] [\medskipamount] [.50\openlineheight]
+\definevspacingamount[\v!small] [\smallskipamount][.25\openlineheight]
+\definevspacingamount[\v!line] [\openlineheight] [\openlineheight]
+\definevspacingamount[\v!formula][\medskipamount] [.50\openlineheight]
+\definevspacingamount[\v!white] [\parskip] [\openlineheight]
+
+\definevspacing[\v!halfline][.5*\v!line]
+\definevspacing[weak] [order:0]
+\definevspacing[strong] [order:100]
+\definevspacing[samepage] [penalty:10000]
+\definevspacing[\v!force] [category:2]
+\definevspacing[\v!disable] [category:5]
+\definevspacing[\v!nowhite] [category:6]
+\definevspacing[goback] [category:7]
+\definevspacing[\v!always] [category:0]
+
+\definevspacing[\s!default][\v!big]
+
+% \definevspacing[whatever][4*big]
+% \vspacing[2*big,-medium,-3*small,whatever,halfline,order:10,category:4,strong,samepage]
+% \vspacing[2*big,category:disable]
+% \vspacing[2*big,disable]
+% \vspacing[2*big,back]
+
+\def\enablevspacing{\ctxlua{
+ callback.register('vpack_filter', nodes.handle_vbox_spacing)
+ callback.register('buildpage_filter', nodes.handle_page_spacing)
+}}
+
+
+\protect \endinput
+
+\starttext
+
+\dorecurse{2}{
+ $2^{2^{2^{2}}}$ $2_{2_{2_{2}}}^{2^{2^{2^{2^{2^{2^{2^{2^{2}}}}}}}}}$
+ \input tufte \inframed {tufte}
+ \par
+}
+
+\dorecurse{100} {
+
+ \kern \recurselevel pt
+
+ \vbox {
+ \endgraf \strut first \endgraf
+ {\dosetattribute{skip-category}{1}\vskip10pt}
+ {\dosetattribute{skip-category}{1}\vskip40pt}
+ {\dosetattribute{skip-category}{1}\vskip20pt}
+ {\dosetattribute{skip-category}{2}\vskip10pt}
+ \endgraf \strut second \endgraf
+ }
+
+ \endgraf \strut first \endgraf
+ {\dosetattribute{skip-category}{1}\vskip10pt}
+ {\dosetattribute{skip-category}{1}\vskip40pt}
+ {\dosetattribute{skip-category}{1}\vskip20pt}
+ {\dosetattribute{skip-category}{1}\vskip40pt}
+ \endgraf \strut second \endgraf
+
+ {\dosetattribute{skip-category}{0}\vskip10pt} % remove
+ {\dosetattribute{skip-category}{1}\vskip10pt} % take largest
+ {\dosetattribute{skip-category}{1}\vskip40pt}
+ {\dosetattribute{skip-category}{1}\vskip40pt}
+ {\dosetattribute{skip-category}{1}\vskip40pt}
+ {\dosetattribute{skip-category}{1}\vskip40pt}
+ {\dosetattribute{skip-category}{1}\vskip40pt}
+ {\dosetattribute{skip-category}{1}\dosetattribute{skip-order}{10}\vskip20pt}
+ {\dosetattribute{skip-category}{4}\dosetattribute{skip-order}{10}\vskip20pt}
+ {\dosetattribute{skip-category}{1}\vskip60pt}
+ {\dosetattribute{skip-category}{1}\vskip20pt}
+ {\dosetattribute{skip-category}{0}\vskip10pt}
+
+ third (no break after this)
+
+ {\dosetattribute{skip-category}{1}\dosetattribute{skip-penalty}{100000}\vskip10pt}
+ {\dosetattribute{skip-category}{1}\dosetattribute{skip-penalty}{100000}\vskip20pt}
+ {\dosetattribute{skip-category}{1}\vskip10pt}
+ {\dosetattribute{skip-category}{1}\vskip20pt}
+
+ fourth
+ \vskip10pt
+ fifth
+}
+
+\stoptext
diff --git a/Master/texmf-dist/tex/context/base/core-spa.tex b/Master/texmf-dist/tex/context/base/core-spa.tex
index e41f1921536..fae78327f03 100644
--- a/Master/texmf-dist/tex/context/base/core-spa.tex
+++ b/Master/texmf-dist/tex/context/base/core-spa.tex
@@ -13,10 +13,16 @@
\writestatus{loading}{Context Spacing Macros}
-% to be sorted out: dependencies, order of initialization
+% to be sorted out: dependencies, order of initialization / also some dutch code here
\unprotect
+% interfacing mkii/mkiv
+
+\ifx\mksetupgridsnapping \undefined \let\mksetupgridsnapping \relax \fi
+\ifx\mkenablegridsnapping \undefined \let\mkenablegridsnapping \relax \fi
+\ifx\mkdisablegridsnapping\undefined \let\mkdisablegridsnapping\relax \fi
+
% some will move to core-var
\newif \ifgridsnapping
@@ -239,6 +245,8 @@
% \type{\normalskipamount} equals the current baseline
% distance.
+% \lineskiplimit = -\maxdimen -> freezes baselineskip
+
% can be conditionals
\newif\ifblanknowhite \blanknowhitefalse
@@ -290,186 +298,6 @@
\smallskipamount\medskipamount\bigskipamount
\fi}}
-%%%% dus niet weg
-
-% replaced
-%
-% \def\dosingleblanko#1%
-% {\doassignsomeskip#1\to\blankskipamount
-% \global\advance\blankskip \blankskipamount}
-%
-% \def\doblank#1%
-% {\processallactionsinset % is maar een actie
-% [#1]
-% [ \v!groot=>\dosingleblanko\v!groot, % happens often
-% \v!buiten=>\ifvmode\ifinner\blankoutertrue\fi\fi,
-% \v!reset=>\global\blankresettrue,
-% \v!flexibel=>\global\localblankflexibletrue,
-% \v!vast=>\global\localblankfixedtrue,
-% \v!back=>\geenblanko,
-% \v!wit=>\global\advance\blankskip \parskip,
-% \v!formule=>\global\advance\blankskip \medskipamount,
-% \v!geenwit=>\global\blanknowhitetrue,
-% -\v!wit=>\global\advance\blankskip -\parskip,
-% \v!blokkeer=>\global\blankdisabletrue,
-% \v!forceer=>\global\blankforcetrue,
-% \v!regel=>\global\advance\blankskip \lineheight,
-% \v!halveregel=>\ifgridsnapping\global\fuzzyvskiptrue\fi
-% \global\advance\blankskip .5\lineheight,
-% \s!unknown=>\doindirectblanko{#1}]}
-%
-% \def\docomplexdoblank[#1]% pas op \relax's zijn nodig ivm volgende \if
-% {\global\blankresetfalse
-% \global\blankdisablefalse
-% \global\blanknowhitefalse
-% \global\localblankflexiblefalse
-% \global\localblankfixedfalse
-% \global\blankskip\zeropoint
-% \global\blankforcefalse
-% \blankouterfalse
-% \processcommalist[#1]\doblank
-% \ifdim\blankskip=\zeropoint\relax
-% \iflocalblankflexible \dosingleblanko\currentblank \fi
-% \iflocalblankfixed \dosingleblanko\currentblank \fi
-% \fi
-% \ifblankouter
-% \else
-% \par
-% \ifvmode %in pos fonts gaat dit mis
-% \ifblankforce %\ifdim\prevdepth>\zeropoint\else
-% % -1000pt signals top of page or column (\ejectcolumn)
-% \verticalstrut\kern-\struttotal
-% \fi
-% \ifblankdisable
-% \global\blankindeedfalse
-% \edef\oldprevdepth{\the\prevdepth}%
-% \prevdepth=\newprevdepth
-% \else
-% \global\blankindeedtrue
-% \fi
-% \ifblankreset
-% \global\blankindeedtrue
-% \ifdim\prevdepth=\newprevdepth
-% \prevdepth=\oldprevdepth
-% \fi
-% \fi
-% \ifblankindeed
-% \ifdim\lastskip<\blankskip\relax
-% % else when \blanko[2*groot] + \blanko[3*groot] with parskip
-% % equaling 1*groot, gives a groot=\parskip so adding a small
-% % value makes it distinguishable; can also be done at parskip
-% % setting time (better)
-% \global\advance\blankskip by \mindimen\relax % = skip
-% % test this on 2* + 3* and parskip groot
-% \ifblanknowhite
-% \global\advance\blankskip by -\parskip
-% \else
-% \ifdim\lastskip=\parskip
-% \else % force this due to previous comment
-% \ifdim\parskip>\zeropoint\relax
-% \ifdim\blankskip<\parskip\relax
-% \global\blankskip\zeropoint
-% \else
-% \global\advance\blankskip by -\parskip
-% \fi
-% \fi
-% \fi
-% \fi
-% \ifblankflexible \else
-% \blankskip=1\blankskip
-% \fi
-% \iflocalblankfixed
-% \blankskip=1\blankskip
-% \fi
-% \iflocalblankflexible
-% \blankskip=1\blankskip
-% \!!plus\skipgluefactor\blankskip
-% \!!minus\skipgluefactor\blankskip
-% \fi
-% \ifdim\prevdepth=\newprevdepth
-% \else
-% \iffuzzyvskip
-% \removelastfuzzyvskip
-% \fuzzyvskip\blankskip\relax
-% \else
-% \removelastskip
-% \vskip\blankskip\relax
-% \fi
-% \fi
-% \else
-% \iffuzzyvskip
-% \removelastfuzzyvskip
-% \fuzzyvskip\blankskip\relax
-% \fi
-% \fi
-% \fi
-% \fi
-% \fi
-% \global\fuzzyvskipfalse
-% \presetindentation}
-%
-% \def\complexdodoblank[#1]%
-% {\flushnotes
-% \ifopelkaar
-% \ifinpagebody
-% \expanded{\docomplexdoblank[#1]}% \expanded=nieuw
-% \else
-% \par
-% \fi
-% \else
-% \expanded{\docomplexdoblank[#1]}% \expanded = nieuw
-% \fi}
-%
-% % old
-% %
-% % \def\doindirectblanko#1%
-% % {\ifundefined{\??bo#1}% <-etex \expandafter\ifx\csname\??bo#1\endcsname\relax
-% % \expanded{\complexdodoblank[#1]}%
-% % \else
-% % \expandafter\complexdoblank\expandafter[\csname\??bo#1\endcsname]%
-% % \fi}
-% %
-% % \def\complexdoblank[#1]% enables [force,8\bodyfontsize]
-% % {\doifinstringelse{,}{#1}
-% % {\expanded{\complexdodoblank[#1]}}
-% % {\doifnumberelse{#1}
-% % {\expanded{\complexdodoblank[#1]}}
-% % {\doindirectblanko{#1}}}}
-% %
-% % new, more robust
-% %
-% % \def\doindirectblanko#1%
-% % {\edef\ascii{#1}\convertcommand\ascii\to\ascii
-% % \ifundefined{\??bo\ascii}% <-etex \expandafter\ifx\csname\??bo#1\endcsname\rel
-% % \dorepeatwithcommand[#1]\dosingleblanko
-% % \else
-% % \expandafter\complexdoblank\expandafter[\csname\??bo\ascii\endcsname]%
-% % \fi}
-% %
-% % even more robust
-%
-% \def\doindirectblanko#1%
-% {\edef\ascii{#1}\convertcommand\ascii\to\ascii
-% \ifundefined{\??bo\ascii}% <-etex \expandafter\ifx\csname\??bo#1\endcsname
-% \expanded{\dorepeatwithcommand[#1]\noexpand\dosingleblanko}%
-% \else
-% \expandafter\complexdoblank\expandafter[\csname\??bo\ascii\endcsname]%
-% \fi}
-
-% \def\TestBlank[#1]%
-% {blank : {\convertargument#1\to\ascii\tttf\ascii}\blanko[#1]}
-%
-% \defineblank[whatever][2*big,2*big]
-% \TestBlank[]
-% \TestBlank[big]
-% \TestBlank[2*big]
-% \TestBlank[big,big,2*big]
-% \TestBlank[big]
-% \TestBlank[whatever]
-% \TestBlank[2*big,whatever]
-% \TestBlank[3\lineheight]
-
-% this will be replaced/enhanced
\def\addblankskip#1#2#3{\global\advance\blankskip#1\ifgridsnapping#3\else#2\fi}
@@ -501,6 +329,8 @@
\defineblankmethod [\v!none] {\global\blankresettrue}
\defineblankmethod [\v!joinedup] {\ifvmode\nointerlineskip\fi}
+\defineblankmethod [\v!always] {\redowhitespace} % experimental
+
% happens often, so we speed this up:
%
% \defineblankmethod [2*\v!line] {\addblankskip+{2\openlineheight}{2\openlineheight}}
@@ -509,21 +339,17 @@
% no, with 2\whatever we loose the stretch and shrink! Taco's alternative:
\defineblankmethod
- [2*line]
+ [2*\v!line]
{\addblankskip+\openlineheight\openlineheight
\addblankskip+\openlineheight\openlineheight}
\defineblankmethod
- [2*big]
+ [2*\v!big]
{\addblankskip+\bigskipamount\openlineheight
\addblankskip+\bigskipamount\openlineheight}
-% ETEX ! ! !
-
-\beginETEX \ifcsname
-
\def\doblank#1%
- {\edef\ascii{#1}\convertcommand\ascii\to\ascii
+ {\edefconvertedargument\ascii{#1}%
\ifx\ascii\empty\else
\ifcsname\??bo\??bo\ascii\endcsname % internal def
\csname\??bo\??bo\ascii\endcsname
@@ -535,7 +361,7 @@
\fi}
\def\redoblank#1%
- {\edef\ascii{#1}\convertcommand\ascii\to\ascii
+ {\edefconvertedargument\ascii{#1}%
\ifx\ascii\empty\else
\ifcsname\??bo\??bo\ascii\endcsname % internal def
\csname\??bo\??bo\ascii\endcsname
@@ -546,62 +372,9 @@
\fi\fi
\fi}
-\endETEX
-
-\beginTEX
-
-\def\doblank#1%
- {\edef\ascii{#1}\convertcommand\ascii\to\ascii
- \ifx\ascii\empty\else
- \@EA\ifx\csname\??bo\??bo\ascii\endcsname\relax
- \@EA\ifx\csname\??bo\ascii\endcsname\relax
- \dorepeatwithcommand[#1]\redoblank
- \else
- \@EA\rawprocesscommalist\@EA[\csname\??bo\ascii\endcsname]\doblank\relax
- \fi
- \else
- \csname\??bo\??bo\ascii\endcsname
- \fi
- \fi}
-
-\def\redoblank#1%
- {\edef\ascii{#1}\convertcommand\ascii\to\ascii
- \ifx\ascii\empty\else
- \@EA\ifx\csname\??bo\??bo\ascii\endcsname\relax
- \@EA\ifx\csname\??bo\ascii\endcsname\relax
- \global\advance\blankskip#1\relax
- \else
- \@EA\rawprocesscommalist\@EA[\csname\??bo\ascii\endcsname]\doblank\relax
- \fi
- \else
- \csname\??bo\??bo\ascii\endcsname
- \fi
- \fi}
-
-\endTEX
-
\unexpanded\def\blank % the \relax is definitely needed due to the many \if's
{\relax\complexorsimple\doblank}
-% \def\complexdoblank
-% {\flushnotes
-% \ifmmode
-% \let\next\nocomplexdoblank
-% \else
-% \ifopelkaar
-% \ifinpagebody
-% \let\next\docomplexdoblank
-% \else
-% \let\next\nocomplexdoblank
-% \fi
-% \else
-% \let\next\docomplexdoblank
-% \fi
-% \fi
-% \next}
-%
-% with \next removed
-
\def\complexdoblank
{\flushnotes
\ifmmode
@@ -1046,7 +819,7 @@
\medskipamount \bigskipamount \divide\medskipamount \plustwo
\smallskipamount\bigskipamount \divide\smallskipamount\plusfour}%
-\def\complexsetupblank[#1]% more \let's
+\def\complexsetupblank[#1]% more \let's -> this also wil become installable
{\ifgridsnapping
\blankflexiblefalse
\else
@@ -1060,32 +833,24 @@
[ \v!flexible=>\dosetupblank\appliedblankskip,
\v!fixed=>\dosetupblank\appliedblankskip,
\v!line=>\edef\appliedblankskip{\linedistance}%
- \dosetupblank\appliedblankskip
- ,%\let\deblanko\v!big,
+ \dosetupblank\appliedblankskip,
\v!halfline=>\scratchskip.5\linedistance
\edef\appliedblankskip{\the\scratchskip}%
- \dosetupblank\appliedblankskip
- ,%\let\deblanko\v!medium,
+ \dosetupblank\appliedblankskip,
\v!big=>\ifgridsnapping
\edef\appliedblankskip{\linedistance}%
\dosetupblank\appliedblankskip
\fi
- \let\currentblank\v!big % was \def, why ?
- ,%\let\deblanko\v!big,
- \v!medium=>\let\currentblank\v!medium % was \def, why ?
- ,%\let\deblanko\v!medium,
- \v!small=>\let\currentblank\v!small % was \def, why ?
- ,%\let\deblanko\v!small,
- \v!normal=>\dosetupblank\appliedblankskip
- ,%\let\deblanko\v!big,
+ \let\currentblank\v!big,
+ \v!medium=>\let\currentblank\v!medium,
+ \v!small=>\let\currentblank\v!small,
+ \v!global=>\let\currentblank\v!global,
+ \v!normal=>\dosetupblank\appliedblankskip,
\v!standard=>\edef\appliedblankskip{\skipfactor\linedistance}%
- \dosetupblank\appliedblankskip
- ,%\let\deblanko\v!big,
- \s!default=>\dosetupblank\appliedblankskip
- ,%\let\deblanko\v!big,
+ \dosetupblank\appliedblankskip,
+ \s!default=>\dosetupblank\appliedblankskip,
\s!unknown=>\let\appliedblankskip\commalistelement
- \dosetupblank\appliedblankskip
- ]%\let\deblanko\v!big]%
+ \dosetupblank\appliedblankskip]%
\simplesetupwhitespace}
% \definecomplexorsimpleempty\setupblank
@@ -1294,16 +1059,14 @@
\toggleindentation}}
\def\docomplexsetupindentingA#1%
- {\edef\!!stringa{#1}% catch #1=\somedimen
- \convertcommand\!!stringa\to\!!stringa
+ {\edefconvertedargument\!!stringa{#1}%
\doifundefined{\??in:\!!stringa}%
{\edef\currentindentation{#1}%
\let\normalindentation\currentindentation
\simplesetupindenting}}
\def\docomplexsetupindentingB#1%
- {\edef\!!stringa{#1}% catch #1=\somedimen
- \convertcommand\!!stringa\to\!!stringa
+ {\edefconvertedargument\!!stringa{#1}% catch #1=\somedimen
\executeifdefined{\??in:\!!stringa}\donothing}
\def\simplesetupindenting % empty case, a it strange, needed this way?
@@ -1338,7 +1101,7 @@
\fi}
\defineindentingmethod [\v!reset] {\indentfirstparagraphtrue
- \parindent\zerocount
+ \parindent\zeropoint
\chardef\indentingtoggle\zerocount}
\def\noindenting{\indenting[\v!no, \v!next ]}
@@ -1413,6 +1176,16 @@
\def\notoggleindentation
{\gdef\checkindentation{\global\indentationtrue\dotoggleindentation}}
+
+\appendtoks
+ \pushmacro\checkindentation
+ \pushmacro\ifindentation
+\to \everypushsomestate
+
+\appendtoks
+ \popmacro\ifindentation
+ \popmacro\checkindentation
+\to \everypopsomestate
% we need to save the state if we want to adapt behaviour to empty lines
%
@@ -1730,58 +1503,13 @@
\newskip\ctxparskip \ctxparskip\zeropoint
-\newif\ifwitruimteflexibel \witruimteflexibeltrue
+\newconditional \flexiblewhitespace \settrue\flexiblewhitespace
-\def\blankokleinmaat {\smallskipamount}
-\def\blankomiddelmaat {\medskipamount}
-\def\blankogrootmaat {\bigskipamount}
+\def\blankokleinmaat {\smallskipamount}
+\def\blankomiddelmaat {\medskipamount}
+\def\blankogrootmaat {\bigskipamount}
\def\currentwhitespace {\zeropoint}
-% \def\stelwitruimteopnieuwin
-% {\expanded{\setupwhitespace[\currentwhitespace]}}
-%
-% \newif\ifwitruimteflexibel \witruimteflexibeltrue
-%
-% \definecomplexorsimple\setupwhitespace
-%
-% \def\complexsetupwhitespace[#1]%
-% {\expanded{\dosetupwhitespace[#1]}%
-% \dodosetupwhitespace}
-%
-% \def\dosetupwhitespace[#1]%
-% {\processallactionsinset
-% [#1]
-% [\v!herstel=>,
-% \v!vast=>\witruimteflexibelfalse,
-% \v!flexibel=>\witruimteflexibeltrue,
-% \v!regel=>\ctxparskip\baselineskip,
-% \v!halveregel=>\ctxparskip.5\baselineskip,
-% \s!default=>\doifnot\currentwhitespace\v!geen\stelwitruimteopnieuwin,
-% \s!unknown=>\@EA\assigndimension\@EA{\commalistelement} % \@EA is nodig
-% \ctxparskip\blankokleinmaat\blankomiddelmaat\blankogrootmaat]} % te vangen
-%
-% \def\dodosetupwhitespace
-% {\edef\currentwhitespace
-% {\ifdim\ctxparskip=\zeropoint
-% \v!geen
-% \else
-% \ifgridsnapping\the\baselineskip\else\the\ctxparskip\fi
-% \fi}%
-% \ifgridsnapping
-% \witruimteflexibelfalse
-% \ctxparskip1\ctxparskip
-% \ifdim\ctxparskip>\zeropoint
-% \ctxparskip\baselineskip
-% \fi
-% \else
-% \ifwitruimteflexibel \else \ctxparskip1\ctxparskip \fi
-% \fi
-% \parskip\ctxparskip}
-%
-% \def\simplesetupwhitespace% == snelle \setupwhitespace[\s!default]
-% {\doifnot\currentwhitespace\v!geen\stelwitruimteopnieuwin
-% \dodosetupwhitespace}
-
\definecomplexorsimple\setupwhitespace
\def\simplesetupwhitespace
@@ -1797,15 +1525,27 @@
{\processcommacommand[\currentwhitespace]\dowhitespacemethod
\dodosetupwhitespace}
+\chardef\baselinegridmode=0 % option in layout / 1=permit_half_lines
+
\def\dodosetupwhitespace
{\ifgridsnapping
- \witruimteflexibelfalse
+ \setfalse\flexiblewhitespace
\ctxparskip1\ctxparskip
\ifdim\ctxparskip>\zeropoint
- \ctxparskip\baselineskip
+ \ifcase\baselinegridmode
+ \ctxparskip\baselineskip % normal ! ! ! ! !!
+ \or
+ \ifdim\scratchdimen=\baselineskip % maybe range
+ \ctxparskip\baselineskip % normal ! ! ! ! !!
+ \else
+ \ctxparskip\numexpr\ctxparskip/\dimexpr.5\lineheight\relax\relax\dimexpr.5\lineheight\relax
+ \fi
+ \else
+ \ctxparskip\baselineskip % normal ! ! ! ! !!
+ \fi
\fi
\else
- \ifwitruimteflexibel \else \ctxparskip1\ctxparskip \fi
+ \ifconditional\flexiblewhitespace \else \ctxparskip1\ctxparskip \fi
\fi
\parskip\ctxparskip}
@@ -1814,16 +1554,16 @@
\def\definewhitespacemethod[#1]#2{\setvalue{\??ws\??ws#1}{#2}}
\definewhitespacemethod [\v!fix] {}
-\definewhitespacemethod [\v!fixed] {\witruimteflexibelfalse}
-\definewhitespacemethod [\v!flexible] {\witruimteflexibeltrue}
+\definewhitespacemethod [\v!fixed] {\setfalse\flexiblewhitespace}
+\definewhitespacemethod [\v!flexible] {\settrue\flexiblewhitespace}
\definewhitespacemethod [\v!line] {\ctxparskip \baselineskip}
\definewhitespacemethod [\v!halfline] {\ctxparskip.5\baselineskip}
\definewhitespacemethod [\v!none] {\ctxparskip \zeropoint}
-\definewhitespacemethod [\v!big] {\ctxparskip \blankogrootmaat}
-\definewhitespacemethod [\v!medium] {\ctxparskip \blankomiddelmaat}
-\definewhitespacemethod [\v!small] {\ctxparskip \blankokleinmaat}
+\definewhitespacemethod [\v!big] {\ctxparskip \bigskipamount}
+\definewhitespacemethod [\v!medium] {\ctxparskip \medskipamount}
+\definewhitespacemethod [\v!small] {\ctxparskip \smallskipamount}
-\definewhitespacemethod [\s!default] {\stelwitruimteopnieuwin}
+\definewhitespacemethod [\s!default] {\simplesetupwhitespace} % {\stelwitruimteopnieuwin}
\def\dowhitespacemethod#1%
{\executeifdefined{\??ws\??ws#1}{\ctxparskip#1}\relax}
@@ -1836,15 +1576,25 @@
\fi
\fi}
+\def\nowhitespaceunlessskip
+ {\ifdim\lastskip>\zeropoint \else
+ \nowhitespace
+ \fi}
+
+\def\redowhitespace
+ {\ifdim\lastskip>-\parskip \else
+ \vskip\parskip
+ \fi}
+
\def\savecurrentwhitespace
{\edef\restorecurrentwhitespace
{\ctxparskip\the\ctxparskip
\parskip\the\parskip
\noexpand\def\noexpand\currentwhitespace{\currentwhitespace}%
- \ifwitruimteflexibel
- \noexpand\witruimteflexibeltrue
+ \ifconditional\flexiblewhitespace
+ \noexpand\settrue\flexiblewhitespace
\else
- \noexpand\witruimteflexibelfalse
+ \noexpand\setfalse\flexiblewhitespace
\fi}}
% deze variant is nodig binnen \startopelkaar
@@ -2153,13 +1903,14 @@
\endgroup
\fi
\normalbaselineskip\openlineheight
-\ifgridsnapping\else
- \!!plus \baselinegluefactor\openlineheight
- \!!minus\baselinegluefactor\openlineheight
-\fi
+ \ifgridsnapping\else
+ \!!plus \baselinegluefactor\openlineheight
+ \!!minus\baselinegluefactor\openlineheight
+ \fi
\normallineskip\minimumlinedistance\relax % \onepoint\relax
\normallineskiplimit\zeropoint\relax
- \normalbaselines}
+ \normalbaselines
+ \mksetupgridsnapping}
\def\setspacingfactor#1\to#2\by#3\\%
{\strutdimen#2\points
@@ -2193,25 +1944,6 @@
\let\restoreinterlinespace\relax
-\beginTEX
-
-\def\saveinterlinespace
- {\scratchdimen\normallineheight
- \edef\restoreinterlinespace
- {\lineheight \the\lineheight
- \openstrutheight \the\openstrutheight
- \openstrutdepth \the\openstrutdepth
- \openlineheight \the\openlineheight
- \normalbaselineskip \the\normalbaselineskip
- \normallineskip \the\normallineskip
- \normallineskiplimit\the\normallineskiplimit
- \noexpand\def\noexpand\normallineheight{\the\scratchdimen}%
- \noexpand\normalbaselines}}
-
-\endTEX
-
-\beginETEX
-
\def\saveinterlinespace
{\edef\restoreinterlinespace
{\lineheight \the\lineheight
@@ -2224,8 +1956,6 @@
\noexpand\def\noexpand\normallineheight{\the\dimexpr\normallineheight\relax}%
\noexpand\normalbaselines}}
-\endETEX
-
% plain definition:
%
% \def\strut{\relax\ifmmode\copy\strutbox\else\unhcopy\strutbox\fi}
@@ -2348,18 +2078,42 @@
%D Centered looks nicer:
+% \def\dosetstrut
+% {\let\strut\normalstrut
+% \setbox\strutbox\normalhbox
+% {\normalhbox to \zeropoint
+% {% \hss % new, will be option
+% \vrule
+% \!!width \strutwidth
+% \!!height\strutheight
+% \!!depth \strutdepth
+% \hss}}%
+% \struttotal\dimexpr\strutht+\strutdp\relax}
+%
+% because of all the callbacks in mkiv, we avoid unnecessary boxes ...
+% maybe use an attribute so that we can tag boxes that don't need a
+% treatment; tests with using an attribute so far have shown that
+% it's slower because testing the attribute takes time too
+
\def\dosetstrut
{\let\strut\normalstrut
- \setbox\strutbox\normalhbox
- {\normalhbox to \zeropoint
- {% \hss % new, will be option
- \vrule
- \!!width \strutwidth
- \!!height\strutheight
- \!!depth \strutdepth
- \hss}}%
- \struttotal\strutht
- \advance\struttotal\strutdp}
+ \ifdim\strutwidth=\zeropoint
+ \setbox\strutbox\normalhbox
+ {\vrule
+ \!!width \zeropoint
+ \!!height\strutheight
+ \!!depth \strutdepth}%
+ \else
+ \setbox\strutbox\normalhbox
+ {\normalhbox to \zeropoint
+ {% \hss % new, will be option
+ \vrule
+ \!!width \strutwidth
+ \!!height\strutheight
+ \!!depth \strutdepth
+ \hss}}%
+ \fi
+ \struttotal\dimexpr\strutht+\strutdp\relax}
%D The dimen \type {\struttotal} holds the exact size of the
%D strut; occasionally a one scaled point difference can show
@@ -2464,7 +2218,7 @@
\fi
\fi\fi}
-\newbox\nostrutbox \setbox\nostrutbox\normalhbox{\normalhbox{}}
+\newbox\nostrutbox \setbox\nostrutbox\normalhbox{} % {\normalhbox{}}
\def\setnostrut
{\setbox\strutbox\copy\nostrutbox
@@ -2554,73 +2308,27 @@
% \widowpenalty=\defaultwidowpenalty\relax
% \clubpenalty =\defaultclubpenalty \relax
-\beginTEX widowpenalties clubpenalties interlinepenalties
-
- \newcount \widowpenalties
- \newcount \clubpenalties
- \newcount \interlinepenalties
-
-\endTEX
-
-% \setpenalties\widowpenalties2\maxdimen
-%
-% expands to \widowpenalty \maxdimen \maxdimen \zeropoint
-
-\beginTEX
-
- \let\resetpenalties \gobbleoneargument
- \let\setpenalties \gobblethreearguments
- \let\doexpandedrecurse\gobbletwoarguments
-
-\endTEX
-
-\beginETEX \numexpr
-
- \def\resetpenalties#1%
- {\ifx#1\undefined\else
- #1\minusone
- \fi}
-
-% \def\setpenalties#1#2#3%
-% {\ifx#1\undefined\else % space before #3 prevents lookahead problems, needed when #3=text
-% #1\numexpr(#2+1)\space\doexpandedrecurse{\the\numexpr(#2)}{ #3}\zerocount\relax
-% \fi}
-
- \def\setpenalties#1#2#3%
- {\ifx#1\undefined\else % space before #3 prevents lookahead problems, needed when #3=text
- #1\numexpr#2+\plusone\relax\space\doexpandedrecurse{\the\numexpr#2\relax}{ #3}\zerocount\relax
- \fi}
-
-% \def\doexpandedrecurse#1#2%
-% {\ifnum#1>\zerocount#2\@EA\doexpandedrecurse\@EA{\the\numexpr(#1-1)}{#2}\fi}
+\def\resetpenalties#1%
+ {\ifx#1\undefined\else
+ #1\minusone
+ \fi}
- \def\doexpandedrecurse#1#2%
- {\ifnum#1>\zerocount#2\@EA\doexpandedrecurse\@EA{\the\numexpr#1-1\relax}{#2}\fi}
+\def\setpenalties#1#2#3%
+ {\ifx#1\undefined\else % space before #3 prevents lookahead problems, needed when #3=text
+ #1\numexpr#2+\plusone\relax\space\doexpandedrecurse{\the\numexpr#2\relax}{ #3}\zerocount\relax
+ \fi}
-\endETEX
+\def\doexpandedrecurse#1#2%
+ {\ifnum#1>\zerocount#2\@EA\doexpandedrecurse\@EA{\the\numexpr#1-1\relax}{#2}\fi}
%D \macros
%D {keeplinestogether}
%D
%D Dirty hack, needed in margin content that can run of a page.
-\beginETEX
-
- \def\keeplinestogether#1%
- {\xdef\restoreinterlinepenalty{\global\resetpenalties\interlinepenalties}%
- \global\setpenalties\interlinepenalties{#1}\plustenthousand}
-
-\endETEX
-
-\beginTEX
-
- \def\keeplinestogether#1%
- {\xdef\restoreinterlinepenalty
- {\global\let\restoreinterlinepenalty\relax
- \global\interlinepenalty=\the\interlinepenalty}% keep = here
- \global\interlinepenalty\plustenthousand}
-
-\endTEX
+\def\keeplinestogether#1%
+ {\xdef\restoreinterlinepenalty{\global\resetpenalties\interlinepenalties}%
+ \global\setpenalties\interlinepenalties{#1}\plustenthousand}
\newif\ifgridsnapping % to be sure
@@ -2725,6 +2433,8 @@
\def\dotfskip#1{{\tf\hskip#1}}
\def\dotfkern#1{{\tf\kern #1}}
+% needs a proper \definenarrower or installnarrower
+
\newskip\ctxleftskip
\newskip\ctxrightskip
\newskip\ctxmidskip
@@ -2735,7 +2445,10 @@
[ \v!left=>\global\advance\ctxleftskip \@@slleft,
\v!middle=>\global\advance\ctxmidskip \@@slmiddle,
\v!right=>\global\advance\ctxrightskip \@@slright,
- \v!none=>,
+ \v!reset=>\global\ctxleftskip \zeropoint
+ \global\ctxmidskip \zeropoint
+ \global\ctxrightskip\zeropoint,
+ \v!none=>,
\s!unknown=>\global\advance\ctxmidskip \commalistelement]}
% \def\donarrower[#1]% hm, can be dorepeat directly
@@ -2944,6 +2657,11 @@
{\getvalue{\@@ragged@@command\v!left}}
{\getvalue{\@@ragged@@command\v!right}}}
+\setvalue{\@@ragged@@command\v!lesshyphenation}%
+ {\appendtoks\lesshyphens\to\everyraggedcommand}
+\setvalue{\@@ragged@@command\v!morehyphenation}%
+ {\appendtoks\morehyphens\to\everyraggedcommand}
+
% compare:
%
% \framed[width=4cm,align=no] {\hfil xxx}
@@ -2998,7 +2716,7 @@
% \voorkeur … la \blanko
%
% Om ongewenste witruimte te voorkomen kan met \dosomebreak{\break}
-% een \penalty v¢¢r witruimte worden geplaatst.
+% een \penalty voor witruimte worden geplaatst.
\def\removelastskip % a redefinition of plain
{\ifvmode\ifdim\lastskip=\zeropoint\else\vskip-\lastskip\fi\fi}
@@ -3016,18 +2734,18 @@
%
% don't change the next improvement:
-\def\dosomebreak#1%
- {\endgraf % beware, this forces a newline
- \ifvmode
- \ifdim\lastskip=\zeropoint
- #1\relax
- \else
- \scratchskip\lastskip
- \removelastskip
- #1\relax
- \vskip\scratchskip
- \fi
- \fi}
+% \def\dosomebreak#1%
+% {\endgraf % beware, this forces a newline
+% \ifvmode
+% \ifdim\lastskip=\zeropoint
+% #1\relax
+% \else
+% \scratchskip\lastskip
+% \removelastskip
+% #1\relax
+% \vskip\scratchskip
+% \fi
+% \fi}
% beter, vooral in \vbox; nog in \pagina toepassen s!
@@ -3124,26 +2842,6 @@
\let\dostopattributes\relax % in case these commands end up in an edef
-\beginTEX
-
-\unexpanded\def\dostartattributes#1#2#3%
- {\begingroup % geen \bgroup, anders in mathmode lege \hbox
- \@EA\ifx\csname#1#3\endcsname\relax
- \let\dostopattributes\@@nostopattributes
- \else
- \let\dostopattributes\@@dostopattributes
- \startcolor[\csname#1#3\endcsname]%
- \fi
- \@EA\ifx\csname#1#2\endcsname\relax
- \expandafter\gobbleoneargument
- \else
- \expandafter\doconvertfont
- \fi{\csname#1#2\endcsname}}
-
-\endTEX
-
-\beginETEX \ifcsname
-
\unexpanded\def\dostartattributes#1#2#3%
{\begingroup % geen \bgroup, anders in mathmode lege \hbox
\ifcsname#1#3\endcsname
@@ -3158,8 +2856,6 @@
\expandafter\gobbleoneargument
\fi{\csname#1#2\endcsname}}
-\endETEX
-
\newconditional \parbasedattributes
\def\finishparbasedattributes
@@ -3186,35 +2882,12 @@
% An even faster \ETEX\ version:
-\beginETEX
-
-% \unexpanded\def\dostartattributes#1#2#3%
-% {\begingroup % geen \bgroup, anders in mathmode lege \hbox
-% \ifcsname#1#3\endcsname
-% \let\dostopattributes\@@dostopattributes
-% \startcolor[\csname#1#3\endcsname]%
-% \else
-% \let\dostopattributes\@@nostopattributes
-% \fi
-% \ifcsname#1#2\endcsname
-% \@EAEAEA\doconvertfont\@EA\@EA\csname#1#2\endcsname
-% \fi}
-%
-% \unexpanded\def\@@dostopattributes%
-% {\stopcolor
-% \finishparbasedattributes
-% \endgroup}
-%
-% \unexpanded\def\@@nostopattributes%
-% {\finishparbasedattributes
-% \endgroup}
-
\unexpanded\def\dostartattributes#1#2#3%
{\begingroup % geen \bgroup, anders in mathmode lege \hbox
\ifincolor
\ifcsname#1#3\endcsname
- \let\dostopattributes\@@dostopattributes
- \doglobalstartcolor[\csname#1#3\endcsname]%
+ \let\dostopattributes\@@dostopattributes
+ \faststartcolor[\csname#1#3\endcsname]%
\else
\let\dostopattributes\@@nostopattributes
\fi
@@ -3227,7 +2900,7 @@
\fi}
\unexpanded\def\@@dostopattributes
- {\doglobalstopcolor
+ {\faststopcolor
\finishparbasedattributes
\endgroup}
@@ -3235,54 +2908,34 @@
{\finishparbasedattributes
\endgroup}
-\endETEX
-
%D Bonus macro, see core-sec.tex
-\beginTEX
-
-\unexpanded\def\dosetfontattribute#1#2%
- {\@EA\ifx\csname#1#2\endcsname\relax\else
- \@EAEAEA\doconvertfont\@EA\@EA\csname#1#2\endcsname
- \fi\empty}
-
-\endTEX
-
-\beginETEX \ifcsname
-
\unexpanded\def\dosetfontattribute#1#2%
{\ifcsname#1#2\endcsname
- % \@EAEAEA\doconvertfont\@EA\@EA\csname#1#2\endcsname
\@EA\doconvertfont\csname#1#2\@EA\endcsname
\fi\empty}
-\endETEX
-
%D Since this happens a lot, and sometimes large arguments
%D are passed in \type {#4}, we just copy some code:
-\beginETEX \ifcsname
-
\unexpanded\def\doattributes#1#2#3#4%
{\begingroup % geen \bgroup, anders in mathmode lege \hbox
\ifincolor
\ifcsname#1#3\endcsname
\let\dostopattributes\@@dostopattributes
- \doglobalstartcolor[\csname#1#3\endcsname]%
+ \faststartcolor[\csname#1#3\endcsname]%
\else
\let\dostopattributes\endgroup
\fi
- \else
- \let\dostopattributes\endgroup
- \fi
- \ifcsname#1#2\endcsname
- % \@EAEAEA\doconvertfont\@EA\@EA\csname#1#2\endcsname
- \@EA\doconvertfont\csname#1#2\@EA\endcsname
- \fi
- {#4}%
- \dostopattributes}
-
-\endETEX
+ \else
+ \let\dostopattributes\endgroup
+ \fi
+ \ifcsname#1#2\endcsname
+ % \@EAEAEA\doconvertfont\@EA\@EA\csname#1#2\endcsname
+ \@EA\doconvertfont\csname#1#2\@EA\endcsname
+ \fi
+ {#4}%
+ \dostopattributes}
% Kan vaker worden toegepast en moet bovendien sneller!
@@ -3297,32 +2950,6 @@
{\dosetrightskipadaption{#1}%
\advance\rightskip \rightskipadaption}
-\beginTEX
-
-\def\dosetleftskipadaption#1%
- {\leftskipadaption\zeropoint
- \processaction[#1]
- [\v!standard=>\leftskipadaption
- \ifdim\ctxparindent=\zeropoint\@@slleft\else\ctxparindent\fi,
- \v!yes=>\leftskipadaption
- \ifdim\ctxparindent=\zeropoint\@@slleft\else\ctxparindent\fi,
- \v!no=>,
- \s!unknown=>\leftskipadaption#1]}
-
-\def\dosetrightskipadaption#1%
- {\rightskipadaption\zeropoint
- \processaction[#1]
- [\v!standard=>\rightskipadaption\@@slright,
- \v!yes=>\rightskipadaption\@@slright,
- \v!no=>,
- \s!unknown=>\rightskipadaption#1]}
-
-\endTEX
-
-\beginETEX
-
-% installation
-
\setvalue{@lsa@\v!standard}{\ifdim\ctxparindent=\zeropoint\@@slleft\else\ctxparindent\fi}
\setvalue{@lsa@\v!yes }{\ifdim\ctxparindent=\zeropoint\@@slleft\else\ctxparindent\fi}
\letvalue{@lsa@\v!no }\zeropoint
@@ -3344,8 +2971,7 @@
% \relax}
\def\dosetleftskipadaption#1%
- {\edef\ascii{@lsa@#1}%
- \convertcommand\ascii\to\ascii
+ {\edefconvertedargument\ascii{@lsa@#1}%
\leftskipadaption
\ifcsname\ascii\endcsname
\csname\ascii\endcsname
@@ -3355,8 +2981,7 @@
\relax}
\def\dosetrightskipadaption#1%
- {\edef\ascii{@rsa@#1}%
- \convertcommand\ascii\to\ascii
+ {\edefconvertedargument\ascii{@rsa@#1}%
\rightskipadaption
\ifcsname\ascii\endcsname
\csname\ascii\endcsname
@@ -3364,13 +2989,11 @@
#1%
\fi
\relax}
-
-\endETEX
-\newcounter \noftrackedpagestates
-\newif \ifpagestatemismatch
-\let \realpagestateno \realfolio
-\chardef \frozenpagestate \zerocount
+\newcount \noftrackedpagestates
+\newif \ifpagestatemismatch
+\newcount \realpagestateno
+\chardef \frozenpagestate \zerocount
\def\dotrackpagestate#1#2%
{\ifdoublesided \ifinpagebody \else
@@ -3379,16 +3002,16 @@
\def\doforcedtrackpagestate#1#2%
{\ifcase\frozenpagestate
- \doglobal\increment\noftrackedpagestates\relax
- \doglobal\increment#2\relax
- \lazysavetaggedtwopassdata{#1}{\noftrackedpagestates}{#2}{\noexpand\realfolio}%
- %\llap{\infofont\noftrackedpagestates/#2}% tracing
+ \global\advance\noftrackedpagestates\plusone
+ \global\advance#2\plusone
+ \lazysavetaggedtwopassdata{#1}{\number\noftrackedpagestates}{\number#2}{\noexpand\realfolio}%
+ %\llap{\infofont\number\noftrackedpagestates/\number#2}% tracing
\fi}
\def\doifrightpagestateelse#1#2%
{\ifcase\frozenpagestate
\pagestatemismatchfalse
- \let\realpagestateno\realfolio
+ \realpagestateno\realfolio
\ifinpagebody
\ifdoublesided
\ifodd\realpageno\relax
@@ -3398,9 +3021,9 @@
\twopassdatafoundtrue
\fi
\else\ifdoublesided
- \findtwopassdata{#1}{#2}%
+ \findtwopassdata{#1}{\number#2}%
\iftwopassdatafound
- \let\realpagestateno\twopassdata
+ \realpagestateno\twopassdata\relax
\ifnum\twopassdata=\realpageno \else
\pagestatemismatchtrue
\fi
@@ -3429,10 +3052,10 @@
\def\doifforcedrightpagestateelse#1#2%
{\ifcase\frozenpagestate
\pagestatemismatchfalse
- \let\realpagestateno\realfolio
- \findtwopassdata{#1}{#2}%
+ \realpagestateno\realfolio
+ \findtwopassdata{#1}{\number#2}%
\iftwopassdatafound
- \let\realpagestateno\twopassdata
+ \realpagestateno\twopassdata\relax
\ifnum\twopassdata=\realpageno \else
\pagestatemismatchtrue
\fi
@@ -3460,15 +3083,15 @@
% we can make more of these on top, but how to deal with mixed frozen states
-\definetwopasslist\s!paragraph \newcounter\nofraggedparagraphs
+\definetwopasslist\s!paragraph \newcount \nofraggedparagraphs
\def\signalrightpage {\dotrackpagestate \s!paragraph\nofraggedparagraphs}
\def\doifrightpageelse{\doifrightpagestateelse\s!paragraph\nofraggedparagraphs}
-\newcounter\pagesignallevel
+\newcount\pagesignallevel
\def\startsignalrightpage % one may do a \postsignalrightplace
- {\increment\pagesignallevel
+ {\advance\pagesignallevel\plusone
\presignalrightpage
\let\signalrightpage\relax
\let\presignalrightpage\relax
@@ -3478,7 +3101,7 @@
\def\stopsignalrightpage
{\ifcase\pagesignallevel\or\postsignalrightpage\fi
- \decrement\pagesignallevel}
+ \advance\pagesignallevel\minusone}
\def\setraggedparagraphmode
{\signalrightpage\doifrightpageelse} % move it there
@@ -3519,7 +3142,7 @@
\def\docheckpagestatechange#1#2#3%
{\pagechangedfalse
\doforcedtrackpagestate{#2}{#3}%
- \findtwopassdata{#2}{#3}%
+ \findtwopassdata{#2}{\number#3}%
\iftwopassdatafound
\ifnum\twopassdata>0\getvalue{#2:p:#1}\relax
\pagechangedtrue
@@ -3870,6 +3493,26 @@
\installalign \v!verytolerant {\tolerance4500 \relax}
\installalign \v!stretch {\emergencystretch\bodyfontsize}
+\installalign \v!grid {\mkenablegridsnapping } % only mkiv
+\installalign \v!nogrid {\mkdisablegridsnapping} % only mkiv
+
+\newcount\hyphenminoffset
+
+\ifx\sethyphenationvariables\undefined \let\sethyphenationvariables\relax \fi
+
+\def\lesshyphens
+ {\advance\hyphenminoffset\plusone
+ \sethyphenationvariables}
+
+\def\morehyphens
+ {\ifcase\hyphenminoffset \else
+ \advance\hyphenminoffset\minusone
+ \fi
+ \sethyphenationvariables}
+
+\installalign \v!lesshyphenation {\lesshyphens}
+\installalign \v!morehyphenation {\morehyphens}
+
\def\dodosetupalign#1{\csname @@align@@#1\endcsname}
\def\dodosetupngila#1{\csname @@ngila@@#1\endcsname}
@@ -3906,14 +3549,36 @@
\newtoks \everyleftofalignedline
\newtoks \everyrightofalignedline
+\def\shiftalignedline#1#2#3#4% left, right, inner, outer
+ {\rightorleftpageaction
+ {\everyleftofalignedline {\hskip\dimexpr#1+#3\relax}%
+ \everyrightofalignedline{\hskip\dimexpr#2+#4\relax}}
+ {\everyleftofalignedline {\hskip\dimexpr#1+#4\relax}%
+ \everyrightofalignedline{\hskip\dimexpr#2+#3\relax}}}
+
+% \def\doalignline#1#2% \\ == newline
+% {\begingroup
+% \setlocalhsize % new
+% \def\\{\egroup\par\doalignline{#1}{#2}\bgroup}%
+% \dowithnextbox
+% {\noindentation % was \noindent
+% \dontleavehmode % added in marrakesch at TUG 2006
+% \hbox to \localhsize
+% {\ifcase\alignstrutmode\or\strut\fi
+% \the\everyleftofalignedline
+% #1\unhbox\nextbox#2\relax
+% \the\everyrightofalignedline}%
+% \endgroup}
+% \hbox}
+
\def\doalignline#1#2% \\ == newline
- {\begingroup
+ {\noindentation % was \noindent
+ \dontleavehmode % added in marrakesch at TUG 2006\begingroup
+ \begingroup
\setlocalhsize % new
\def\\{\egroup\par\doalignline{#1}{#2}\bgroup}%
\dowithnextbox
- {\noindentation % was \ noindent
- \dontleavehmode % added in marrakesch at TUG 2006
- \hbox to \localhsize
+ {\hbox to \localhsize
{\ifcase\alignstrutmode\or\strut\fi
\the\everyleftofalignedline
#1\unhbox\nextbox#2\relax
@@ -3962,11 +3627,13 @@
% more extensive:
\def\doxalignline#1#2#3#4#5#6%
- {\bgroup
+ {\noindentation % was \noindent
+ \dontleavehmode % added in marrakesch at TUG 2006\begingroup
+ \begingroup
\setlocalhsize
\def\\{\egroup\par\doxalignline#1#2#3#4#5#6\bgroup}% inefficient
\dowithnextbox
- {\noindent
+ {%\noindent moved up
\hbox to \localhsize
{#1\hskip\ifdone#2\else#3\fi#4%
\hbox to \localhsize
@@ -3975,7 +3642,7 @@
\ifdone#5\unhbox\nextbox#6\else#6\unhbox\nextbox#5\fi
\the\everyrightofalignedline}%
\hss}%
- \egroup}
+ \endgroup}
\hbox}
\def\doxcheckline
@@ -4052,6 +3719,7 @@
\hbox}
{\doifelse{#1}\v!right{\kern-\rightskip}{\doifsomething{#1}{\kern-#1}}%
\parfillskip\zeropoint
+ %\finalhyphendemerits\zerocount % yes or no
\par}}
\def\wordright
@@ -4067,6 +3735,16 @@
%
% \wordright[\rightskip]{whatever}
+% \simplealignedbox{2cm}{right}{x}
+
+\setvalue{\s!simple\c!align\v!right }#1#2{\hbox to #1{#2\hss}}
+\setvalue{\s!simple\c!align\v!left }#1#2{\hbox to #1{\hss#2}}
+\setvalue{\s!simple\c!align\v!flushright }#1#2{\hbox to #1{\hss#2}}
+\setvalue{\s!simple\c!align\v!flushleft }#1#2{\hbox to #1{#2\hss}}
+\setvalue{\s!simple\c!align\v!middle }#1#2{\hbox to #1{\hss#2\hss}}
+
+\def\simplealignedbox#1{\executeifdefined{\s!simple\c!align#1}{\getvalue{\s!simple\c!align\v!right}}}
+
%D \macros
%D {pushindentation,popindentation}
%D
@@ -4257,21 +3935,26 @@
\unexpanded\def\textormathspace#1#2#3%
{\ifmmode\mskip#1#2\else\kern#1\hspaceamount\empty{#3}\fi\relax}
+\newmuskip\hairmuskip \hairmuskip=.15mu
+
+\def\hairspace {\textormathspace+\hairmuskip{.5}}
\def\thinspace {\textormathspace+\thinmuskip 1}
\def\medspace {\textormathspace+\medmuskip 2}
\def\thickspace {\textormathspace+\thickmuskip3}
+\def\neghairspace {\textormathspace-\thinmuskip{.5}}
\def\negthinspace {\textormathspace-\thinmuskip 1}
\def\negmedspace {\textormathspace-\medmuskip 2}
\def\negthickspace{\textormathspace-\thickmuskip3}
+\definehspace[.5][.1250\emspaceamount] % could also be [.1250\spaceamount]
+\definehspace[1] [.1667\emspaceamount]
+\definehspace[2] [.2222\emspaceamount]
+\definehspace[3] [.2777\emspaceamount]
+
\let \, \thinspace
\let \: \medspace
\let \; \thickspace
\let \! \negthinspace
-
-\definehspace[1][.1667em]
-\definehspace[2][.2222em]
-\definehspace[3][.2777em]
% this will become an alternative bunch of \blank settings
%
@@ -4629,10 +4312,118 @@
\space
\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
+% moved from page-lin
+
+\def\installspacehandler#1#2% needs to set \obeyedspace
+ {\setvalue{\??sr#1}{#2}}
+
+\installspacehandler \v!on
+ {\obeyspaces
+ \def\obeyedspace{\mathortext\normalspace{\dontleavehmode{\tt\controlspace}}}%
+ \let\ =\obeyedspace}
+
+\installspacehandler \v!yes
+ {\obeyspaces
+ \def\obeyedspace{\mathortext\normalspace{\dontleavehmode \normalspace }}%
+ \let\ =\obeyedspace}
+
+\installspacehandler \v!off
+ {\normalspaces
+ \let\obeyedspace\normalspace
+ \let\ =\normalspace}
+
+\installspacehandler \v!fixed
+ {\obeyspaces
+ \def\obeyedspace{\mathortext\normalspace{\dontleavehmode\fixedspace}}%
+ \let\ =\obeyedspace}
+
+\def\activatespacehandler#1%
+ {\executeifdefined{\??sr#1}{\activatespacehandler\v!off}}
+
+% moved from page-lin
+
+%D When spacing is active we need to handle commands in
+%D a special way:
+%D
+%D \starttyping
+%D \setuplines[space=on]
+%D
+%D \startlines
+%D Let's talk about this{\ttsl\gobbleoneargument or}that.
+%D \stoplines
+%D
+%D \startlines
+%D Let's talk about this{\getvalue{ttsl}or}that.
+%D \stoplines
+%D \stoptyping
+%D
+%D One can indent in several ways:
+%D
+%D \starttyping
+%D \setupindenting[medium] \setuplines[indenting=odd] % no yes odd even
+%D
+%D \startlines
+%D first
+%D second
+%D third
+%D fourth
+%D \stoplines
+%D \stoptyping
+
+\def\setuplines
+ {\dodoubleargument\getparameters[\??rg]}
+
+\def\startlines
+ {\@@rgbefore
+ \pushmacro\checkindentation
+ \whitespace
+ %\page[\v!preference]} gaat mis na koppen, nieuw: later \nobreak
+ \begingroup
+ \setupindenting[\@@rgindenting]%
+ \typesettinglinestrue
+ \setupwhitespace[\v!none]%
+ \obeylines
+ \ignorespaces
+ \gdef\afterfirstobeyedline % tzt two pass, net als opsomming
+ {\gdef\afterfirstobeyedline
+ {\nobreak
+ \global\let\afterfirstobeyedline\relax}}%
+ \def\obeyedline
+ {\par
+ \afterfirstobeyedline
+ \futurelet\next\dobetweenthelines}%
+ \activatespacehandler\@@rgspace
+ \GotoPar}
+
+\def\stoplines
+ {\endgroup
+ \popmacro\checkindentation
+ \@@rgafter}
+
+\def\dobetweenthelines
+ {\doifmeaningelse\next\obeyedline\@@rginbetween\donothing}
+
+\setuplines
+ [\c!before=\blank,
+ \c!after=\blank,
+ \c!inbetween=\blank,
+ \c!indenting=\v!no,
+ \c!space=\v!default]
+
+\def\emptylines
+ {\dosingleempty\doemptylines}
+
+\def\doemptylines[#1]%
+ {\endgraf\dorecurse{\iffirstargument#1\else3\fi}\crlf}
+
+% plugins
+
+\loadmarkfile{core-spa}
+
\setupwhitespace
[\v!none]
-% still old-fachioned
+% still old-fashioned
\indenting
[\v!never]
diff --git a/Master/texmf-dist/tex/context/base/core-swd.tex b/Master/texmf-dist/tex/context/base/core-swd.tex
new file mode 100644
index 00000000000..62a98976b67
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/core-swd.tex
@@ -0,0 +1,129 @@
+%D \module
+%D [ file=core-swd,
+%D version=2007.08.14,
+%D title=\CONTEXT\ Core Macros,
+%D subtitle=Section Worlds,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D This is a prelude to a rewrite of sectioning.
+
+% options : before after setups page text number label bookmark
+% dodo : listtext
+%
+% \startsectionworld[chapter][text={Test}]
+% \stopsectionworld
+
+\unprotect
+
+\ifx\pushvalue\undefined
+
+ \def\pushvalue#1{\expandafter\pushmacro\csname#1\endcsname}
+ \def\popvalue #1{\expandafter\popmacro \csname#1\endcsname}
+
+\fi
+
+% brrr
+
+\def\csnameexpanded#1#2%
+ {\@EA\@EA\@EA\@EA\@EA\@EA\@EA#1\@EA\@EA\@EA\@EA\@EA\@EA\@EA#2\@EA\@EA\@EA\@EA\@EA\@EA\@EA}
+
+\def\csnameexpandedoneargument#1#2%
+ {\csnameexpanded\def\csexpandeda{#2}%
+ \@EA#1\@EA{\csexpandeda}}
+
+\def\csnameexpandedtwoarguments#1#2#3%
+ {\csnameexpanded\def\csexpandeda{#2}%
+ \csnameexpanded\def\csexpandedb{#3}%
+ \@EA\@EA\@EA#1\@EA\@EA\@EA{\@EA\csexpandeda\@EA}\@EA{\csexpandedb}}
+
+\def\csnameexpandedthreearguments#1#2#3#4%
+ {\csnameexpanded\def\csexpandeda{#2}%
+ \csnameexpanded\def\csexpandedb{#3}%
+ \csnameexpanded\def\csexpandedc{#4}%
+ \@EA\@EA\@EA\@EA\@EA\@EA\@EA#1\@EA\@EA\@EA\@EA\@EA\@EA\@EA{\@EA\@EA\@EA\csexpandeda\@EA\@EA\@EA}\@EA\@EA\@EA{\@EA\csexpandedb\@EA}\@EA{\csexpandedc}}
+
+% \def\xx{XX}\setvalue{xx:yy}{abc \xx def}\def\param#1{\csname xx:#1\endcsname}
+% \def\testa #1{\defconvertedargument\ascii{#1}{\tttf\ascii}}
+% \def\testb #1#2{\defconvertedargument\ascii{#1 #2}{\tttf\ascii}}
+% \def\testc#1#2#3{\defconvertedargument\ascii{#1 #2 #3}{\tttf\ascii}}
+% \noindent 1 \csnameexpandedoneargument \testa{\param{yy}}
+% \noindent 2 \csnameexpandedtwoarguments \testb{\param{yy}}{\param{yy}}
+% \noindent 3 \csnameexpandedthreearguments\testc{\param{yy}}{\param{yy}}{\param{yy}}
+
+% rewrite the sectioning to use the variables, a bit tricky because then
+% we need a special expansion trick
+
+\def\sectionworldparameter #1{\csname\??sw\currentsectionworldname#1\endcsname}
+\def\pushsectionworldparameter#1{\expandafter\pushmacro\csname\??sw\currentsectionworldname#1\endcsname}
+\def\popsectionworldparameter #1{\expandafter\popmacro \csname\??sw\currentsectionworldname#1\endcsname}
+
+\def\setupsectionworld
+ {\dodoubleargument\dosetupsectionworld}
+
+\def\dosetupsectionworld[#1][#2]%
+ {\getparameters[\??sw#1][#2]} % maybe some extra things
+
+\def\dochecksectionworld#1%
+ {\ifcsname\??sw\currentsectionworldname\endcsname\else
+ \getparameters
+ [\??sw\currentsectionworldname]
+ [\c!before=,
+ \c!after=,
+ \c!setups=,
+ \c!page=]%
+ \fi}
+
+\def\startsectionworld
+ {\dodoubleargument\dostartsectionworld}
+
+\def\dostartsectionworld[#1][#2]%
+ {\pushmacro\currentsectionworldname
+ \def\currentsectionworldname{#1}%
+ \dochecksectionworld\currentsectionworldname
+ \pushsectionworldparameter\c!before
+ \pushsectionworldparameter\c!after
+ \pushsectionworldparameter\c!setups
+ \getparameters
+ [\??sw\currentsectionworldname]
+ [\c!text=,\c!number=\finalsectionnumber,\c!label=,\c!bookmark=,#2]%
+ \doifsomething{\sectionworldparameter\c!page}
+ {\setsectieenkoppeling\currentsectionworldname
+ %\handlepagebreak\currentsectionworldname
+ \checknexthead\handlepagebreak\currentsectionworldname}%
+ \sectionworldparameter\c!before
+ \begingroup
+ \doifsomething{\sectionworldparameter\c!page}
+ {\settrue\ignorehandlepagebreak}%
+ \doifsomething{\sectionworldparameter\c!setups}
+ {\setups[\sectionworldparameter\c!setups]}%
+ %\dodododoconstructhead \currentsectionworldname
+ % [\sectionworldparameter\c!label]
+ % {\sectionworldparameter\c!number}
+ % {\sectionworldparameter\c!text}%
+ \csnameexpandedthreearguments \doconstructheadwithvars
+ {\sectionworldparameter\c!label }%
+ {\sectionworldparameter\c!number}%
+ {\sectionworldparameter\c!text }%
+ \doifsomething{\sectionworldparameter\c!bookmark}
+ {\expanded{\bookmark[\sectionworldparameter\c!bookmark]}}%
+ \ignorespaces} % for inline heads
+
+\def\doconstructheadwithvars#1%#2#3%
+ {\dodododoconstructhead\currentsectionworldname[#1]}% {#2}{#3}}
+
+\def\stopsectionworld
+ {\endgraf
+ \endgroup
+ \sectionworldparameter\c!after
+ \popsectionworldparameter\c!setups
+ \popsectionworldparameter\c!after
+ \popsectionworldparameter\c!before
+ \popmacro\currentsectionworldname}
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/core-syn.lua b/Master/texmf-dist/tex/context/base/core-syn.lua
new file mode 100644
index 00000000000..1b4eb1e92d5
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/core-syn.lua
@@ -0,0 +1,116 @@
+-- filename : core-syn.lua
+-- comment : companion to core-syn.tex
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+if not versions then versions = { } end versions['core-syn'] = 1.001
+if not jobs then jobs = { } end
+if not job then jobs['main'] = { } end job = jobs['main']
+if not job.sortedlists then job.sortedlists = { } end
+
+function job.definesortedlist(id)
+ if not job.sortedlists[id] then
+ job.sortedlists[id] = { }
+ end
+end
+
+sorters = sorters or { }
+sorters.list = sorters.list or { }
+sorters.list.data = sorters.list.data or { }
+
+do
+
+ function sorters.list.compare(a,b)
+ return sorters.comparers.basic(a,b,1)
+ end
+
+ function sorters.list.prepare(data)
+ sorters.prepare(data,sorters.splitters.utf,1)
+ end
+
+ function sorters.list.sort(data)
+ sorters.sort(data,sorters.list.compare)
+ end
+
+ function sorters.list.unique(data)
+ sorters.unique(data)
+ end
+
+ function sorters.list.cleanup(data)
+ sorters.cleanup(data)
+ end
+
+ function sorters.list.finalize(data)
+ -- we use the same splitter as with indices
+ local split = { }
+ for k,v in ipairs(data) do
+ local entry, tag = v[2][1][3][1], ""
+ local se = sorters.entries[sorters.language]
+ if se and se[entry] then
+ if type(se[entry]) == "number" then
+ entry = se[entry]
+ end
+ tag = se[entry]
+ else
+ entry = 0
+ tag = "unknown"
+ end
+ split[entry] = split[entry] or { tag = tag, data = { } }
+ split[entry].data[#split[entry].data+1] = v
+ end
+ return split
+ end
+
+ -- for the moment we use the old structure, some day mkiv code
+ -- will be different: more structure, less mess
+
+ local template = {
+ entry = "\\synonymentry{%s}{%s}{%s}{%s}"
+ }
+
+ function sorters.list.flush(sorted,class,flush)
+ -- for the moment we don't add split data (letters) yet
+ flush = flush or print
+ class = class or 'abbreviation'
+ for k,v in ipairs(table.sortedkeys(sorted)) do
+ for _, vv in ipairs(sorted[v].data) do
+ flush(string.format(template.entry,class,vv[2][1][1],vv[2][1][2],vv[3]))
+ end
+ end
+ end
+
+ function sorters.list.process(data)
+ return sorters.process('list',data)
+ end
+
+end
+
+-- { { entry, key } }, meaning
+
+function job.loadsortedlist(class)
+ if job.sortedlists[class] then
+ if not sorters.list.data[class] then
+ sorters.list.data[class] = {
+ language = 'en',
+ entries = { },
+ flush = function(s) tex.sprint(tex.ctxcatcodes,s) end,
+ sorted = false,
+ class = class
+ }
+ local entries = sorters.list.data[class].entries
+ for k,v in ipairs(job.sortedlists[class]) do
+ if v[1] == 'l' then -- language
+ sorters.list.data[class].language = v[2]
+ else
+ entries[#entries+1] = {
+ v[1], -- kind (e)
+ { { v[2], v[3] } }, -- entry, key
+ v[4] -- optional meaning
+ }
+ end
+ end
+ end
+ sorters.list.process(sorters.list.data[class])
+ end
+end
diff --git a/Master/texmf-dist/tex/context/base/core-syn.mkii b/Master/texmf-dist/tex/context/base/core-syn.mkii
new file mode 100644
index 00000000000..b3fdb173890
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/core-syn.mkii
@@ -0,0 +1,28 @@
+%D \module
+%D [ file=core-syn,
+%D version=1997.03.31,
+%D title=\CONTEXT\ Core Macros,
+%D subtitle=Synonyms and Sorts,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\unprotect
+
+\def\mkdefinesortedlist#1% class
+ {\addutilityreset{#1}}
+
+\def\mksavesortedlistentry#1#2#3#4%
+ {\immediatewriteutility{s e {#1} {#2} {#3} {#4}}}
+
+\def\mksavesortedlistvariable#1#2#3% class type value
+ {\immediatewriteutility{s #2 {#1} {#3}}}
+
+\def\mkloadsortedlist#1% class
+ {\doutilities{#1}\jobname{#1}\relax\relax}
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/core-syn.mkiv b/Master/texmf-dist/tex/context/base/core-syn.mkiv
new file mode 100644
index 00000000000..23385c9e604
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/core-syn.mkiv
@@ -0,0 +1,51 @@
+%D \module
+%D [ file=core-syn,
+%D version=1997.03.31,
+%D title=\CONTEXT\ Core Macros,
+%D subtitle=Synonyms and Sorts,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\unprotect
+
+\registerctxluafile{core-syn}{1.001}
+
+\appendtoks
+ \immediatewriteutilitytua{if not job.sortedlists then job.sortedlists = { } end}%
+ \immediatewriteutilitytua{local js = job.sortedlists}%
+\to \everyopenutilities
+
+\let\allsortedlists\empty
+
+\appendtoks
+ \processcommacommand[\allsortedlists]\mkdodefinesortedlist
+ \globallet\allsortedlists\empty
+\to \everyopenutilities
+
+\def\mkdodefinesortedlist#1% class
+ {\ctxlua{job.definesortedlist('#1')}%
+ \immediatewriteutilitytua{job.definesortedlist('#1')}}
+
+\def\mkdefinesortedlist#1% class
+ {\mkdodefinesortedlist{#1}%
+ \doglobal\addtocommalist{#1}\allsortedlists}
+
+\def\mksavesortedlistentry#1#2#3#4% class key entry meaning
+ {\immediatewriteutilitytua{ti(js['#1'],{'e','#2',\!!bs#3\!!es,\!!bs#4\!!es})}}
+
+\def\mksavesortedlistvariable#1#2#3% class type value
+ {\immediatewriteutilitytua{ti(js['#1'],{'#2','#3'})}}
+
+\def\mkloadsortedlist#1% class
+ {\bgroup
+ \getvalue{\s!set#1}%
+ \ctxlua{job.loadsortedlist('#1')}%
+ \getvalue{\s!reset#1}%
+ \egroup}
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/core-syn.tex b/Master/texmf-dist/tex/context/base/core-syn.tex
index 3f26b973d2f..8d2817438db 100644
--- a/Master/texmf-dist/tex/context/base/core-syn.tex
+++ b/Master/texmf-dist/tex/context/base/core-syn.tex
@@ -15,6 +15,13 @@
\unprotect
+\ifx\mkdefinesortedlist\undefined
+ \let\mkdefinesortedlist \gobbleoneargument
+ \let\mksavesortedlistentry \gobblefourarguments
+ \let\mksavesortedlistvariable\gobblethreearguments
+ \let\mkloadsortedlist \gobbleoneargument
+\fi
+
% \checkdefined kan hierheen
% Formaat tex-utility-input-file <jobname.tui>:
@@ -63,16 +70,6 @@
\def\currentsynonym{#1}%
\definedescription % nog eens een class van maken, net als framed
[syndef]
-% [\c!location=\getvalue{\??sm#1\c!location}, % todo \synonymparameter
-% \c!width=\getvalue{\??sm#1\c!width},
-% \c!distance=\getvalue{\??sm#1\c!distance},
-% \c!sample=\getvalue{\??sm#1\c!sample},
-% \c!hang=\getvalue{\??sm#1\c!hang},
-% \c!align=\getvalue{\??sm#1\c!align},
-% \c!before=\getvalue{\??sm#1\c!before},
-% \c!inbetween=\getvalue{\??sm#1\c!inbetween},
-% \c!after=\getvalue{\??sm#1\c!after},
-% \c!indentnext=\getvalue{\??sm#1\c!indentnext},
[\c!location=\synonymparameter\c!location,
\c!width=\synonymparameter\c!width,
\c!distance=\synonymparameter\c!distance,
@@ -86,7 +83,8 @@
\c!headstyle=,
\c!style=]%
\setupwhitespace[\v!none]%
- \doutilities{#1}\jobname{#2}\relax\par
+ %doutilities{#1}\jobname{#2}\relax\par % no longer \par
+ \mkloadsortedlist{#1}%
\endgroup
\ifutilitydone\else\nowhitespace\fi}
@@ -117,21 +115,11 @@
\def\dowritesynonym#1#2#3#4%
{\begingroup % anders in mathmode lege \hbox
- \convertexpanded{\getvalue{\??sm#1\c!expansion}}{#3}\asciisynonym
- \convertexpanded{\getvalue{\??sm#1\c!expansion}}{#4}\asciimeaning
- \immediatewriteutility{s e {#1} {#2} {\asciisynonym} {\asciimeaning}}%
+ \defconvertexpanded\asciisynonym{\getvalue{\??sm#1\c!expansion}}{#3}%
+ \defconvertexpanded\asciimeaning{\getvalue{\??sm#1\c!expansion}}{#4}%
+ \mksavesortedlistentry{#1}{#2}{\asciisynonym}{\asciimeaning}%
\endgroup}
-% \def\preexecutesynonym#1#2#3#4%
-% {\ifdoinpututilities \else
-% \dowritesynonym{#1}{#2}{#3}{#4}%
-% \unexpanded\setgvalue{#2}{\processsynonym{#1}{#3}{#4}}%
-% \fi}
-%
-% \def\executesynonym#1#2#3#4%
-% {\preexecutesynonym{#1}{#2}{#3}{#4}%
-% \processsynonym{#1}{#3}{#4}}
-
\def\reprocesssynonym#1#2#3%
{\processsynonym{#1}{#2}{#3}%
\getvalue{\??sm#1\c!next}} % not formally documented
@@ -165,7 +153,7 @@
{\bgroup
\let\dosetsynonym\doloadsynonym
\showmessage\m!systems{19}{#2}%
- \doutilities{#1}\jobname\empty\relax\relax
+ \mkloadsortedlist{#1}%
\egroup
\setvalue{\s!check#1}##1{}}
@@ -190,7 +178,7 @@
\def\doregistersynonymlanguage#1%
{\savesortlanguage{\getvalue{\??sm#1\s!language}}%
- \immediatewriteutility{s l {#1} {\getvalue{\??sm#1\s!language}}}}
+ \mksavesortedlistvariable{#1}{l}{\getvalue{\??sm#1\s!language}}}
\def\dodefinesynonyms[#1][#2][#3][#4]%
{\iffourthargument
@@ -219,7 +207,7 @@
\doregistersynonymlanguage{#1}%
\to \everysavesortkeys
\presetheadtext[#2=\Word{#2}]% changes the \if...argument
- \addutilityreset{#1}%
+ \mkdefinesortedlist{#1}%
\setvalue{\e!setup #2\e!endsetup}{\dodoubleargument\getparameters[\??sm#1]}% to be obsolete
\setvalue{\s!set #1}{\dosetsynonym{#1}}%
\setvalue{\s!reset #1}{\doresetsynonym{#1}}%
@@ -251,7 +239,7 @@
\def\dosetsort#1%
{\setvalue{#1\s!entry}##1##2##3%
- {\def\dowritesort####1####2####3{}%
+ {\let\dowritesort\gobblethreearguments
\global\utilitydonetrue
\bgroup
\doifdefinedelse{\??so#1\c!command}
@@ -265,7 +253,8 @@
{\whitespace % ZONDER WITRUIMTE ETC ETC
\begingroup
\setupwhitespace[\v!none]%
- \doutilities{#1}\jobname{#1}\relax\par
+ %doutilities{#1}\jobname{#1}\relax\par % brr \par
+ \mkloadsortedlist{#1}%
\endgroup
\ifutilitydone\else\nowhitespace\fi}
@@ -273,7 +262,8 @@
%
% \def\doplacelistofsorts#1% NOG EEN RUWE VERSIE MAKEN
% {\startpacked
-% \doutilities{#1}\jobname{#1}\relax\par
+% %doutilities{#1}\jobname{#1}\relax\par
+% \mkloadsortedlist{#1}%
% \stoppacked}
\def\docompletelistofsorts#1#2%
@@ -294,26 +284,13 @@
\def\dowritesort#1#2#3%
{\bgroup
- \convertexpanded{\getvalue{\??so#1\c!expansion}}{#3}\asciisynonym
- \immediatewriteutility{s e {#1} {#2} {\asciisynonym} {}}%
+ \defconvertexpanded\asciisynonym{\getvalue{\??so#1\c!expansion}}{#3}%
+ \mksavesortedlistentry{#1}{#2}{\asciisynonym}{}%
\egroup}
\def\synonymentry#1%
{\executeifdefined{#1\s!entry}\gobblethreearguments}
-% \def\preexecutesort#1#2#3%
-% {\ifdoinpututilities \else
-% \dowritesort{#1}{#2}{#3}%
-% \unexpanded\setgvalue{#2}{\processsort{#1}{#3}{#2}}%
-% \fi}
-%
-% \def\executesort#1#2#3%
-% {\begingroup
-% \let\executesort\thirdofthreearguments % Trick needed for nested logo's.
-% \preexecutesort{#1}{#2}{#3}%
-% \processsort{#1}{#3}{#2}%
-% \endgroup}
-
\def\reprocesssort#1#2#3%
{\processsort{#1}{#2}{#3}%
\getvalue{\??so#1\c!next}}
@@ -341,7 +318,7 @@
{\bgroup
\let\dosetsort\doloadsort
\showmessage\m!systems{20}{#2}%
- \doutilities{#1}\jobname\empty\relax\relax
+ \mkloadsortedlist{#1}%
\egroup
\setvalue{\s!check#1}##1{}}
@@ -366,7 +343,7 @@
\def\doregistersortinglanguage#1%
{\savesortlanguage{\getvalue{\??so#1\s!language}}%
- \immediatewriteutility{s l {#1} {\getvalue{\??so#1\s!language}}}}
+ \mksavesortedlistvariable{#1}{l}{\getvalue{\??so#1\s!language}}}
\def\dodefinesorting[#1][#2][#3]%
{\getparameters[\??so#1]
@@ -390,7 +367,7 @@
\else
\setvalue{#1}{\dotripleempty\docomplexsort[][#1]}%
\fi
- \addutilityreset{#1}%
+ \mkdefinesortedlist{#1}%
\presetheadtext[#2=\Word{#2}]% after \ifthirdargument -)
\setvalue{\e!setup#2\e!endsetup}[##1]{\getparameters[\??so#1][##1]}% to be obsolete
\setvalue{\s!set#1}{\dosetsort{#1}}%
@@ -408,7 +385,7 @@
%D written by Taco.
\def\processlistofsorts[#1]%
- {\doutilities{#1}\jobname{#1}\donothing\donothing}
+ {\mkloadsortedlist{#1}}
\newcounter\nofsortedalphalists
@@ -429,7 +406,13 @@
% \def\whatever{a,b,q,d,r,f} \sortalphacommacommand\whatever \whatever \endgraf
% \def\whatever{ax,bx,qx,dx,rx,fx} \sortalphacommacommand\whatever \whatever \endgraf
% \stoptext
-
+
+%D Plugins.
+
+\loadmarkfile{core-syn}
+
+%D Presets.
+
\definesynonyms
[\v!abbreviation]
[\v!abbreviations]
diff --git a/Master/texmf-dist/tex/context/base/core-sys.mkiv b/Master/texmf-dist/tex/context/base/core-sys.mkiv
new file mode 100644
index 00000000000..0cef6c2368e
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/core-sys.mkiv
@@ -0,0 +1,23 @@
+%D \module
+%D [ file=core-sys,
+%D version=2006.09.18,
+%D title=\CONTEXT\ Core Macros,
+%D subtitle=System,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\startruntimeluacode
+ \ctxlua {
+ environment.inputfilename = "\inputfilename"
+ environment.outputfilename = "\outputfilename"
+ environment.jobfilename = "\jobfilename"
+ environment.jobfilesuffix = "\jobfilesuffix"
+ }
+\stopruntimeluacode
+
+\endinput
diff --git a/Master/texmf-dist/tex/context/base/core-sys.tex b/Master/texmf-dist/tex/context/base/core-sys.tex
index 92d2b650c72..65afae1ca50 100644
--- a/Master/texmf-dist/tex/context/base/core-sys.tex
+++ b/Master/texmf-dist/tex/context/base/core-sys.tex
@@ -51,11 +51,11 @@
\def\splitjobfilename % todo: mkiv
{\resetsystemmode{suffix-\jobfilesuffix}%
- \edef\ascii{\inputfilename}\convertcommand\ascii\to\ascii
+ \edef\ascii{\inputfilename}\defconvertedcommand\ascii\ascii
\splitstring\ascii\at.\to\jobfilename\and\jobfilesuffix
\lowercasestring\jobfilesuffix\to\jobfilesuffix
\doifnothing\jobfilename {\let\jobfilename \jobname}%
- % todo and totest: \convertcommand\jobfilename\to\jobfilename
+ % todo and totest: \defconvertedcommand\jobfilename\jobfilename
\doifnothing\jobfilesuffix{\let\jobfilesuffix\c!tex}%
\setsystemmode{suffix-\jobfilesuffix}}
@@ -284,50 +284,83 @@
%D Since this feature is used in XML processing, it made sense
%D to support this faster alternative. It's installable as well.
-\def\installexpander#1#2{\setvalue{\s!do\c!expansion#1}{#2}}
-
-% \long\def\convertexpanded#1#2#3% hm, first we need to make sure
-% {\csname % that we assign all exp a value
-% \s!do\c!expansion
-% \ifforcefileexpansion
-% \v!yes
-% \else\@EA\ifx\csname\s!do\c!expansion\csname#1\c!expansion\endcsname\endcsname\relax
-% \s!default
-% \else
-% \csname#1\c!expansion\endcsname
-% \fi\fi
-% \endcsname#2\to#3}
-
-\long\def\convertexpanded#1#2#3% hm, first we need to make sure
+\def\installexpander#1#2#3% changed, no longer \convert..\to...
+ {\setvalue{\s!do\c!expansion#1l}{#2}%
+ \setvalue{\s!do\c!expansion#1g}{#3}}%
+
+% \convertexpanded is obsolete
+
+\long\def\doconvertexpanded#1#2#3% #4 % [l|g] \cs {kind} {data}
{\csname % that we assign all exp a value
\s!do\c!expansion
\ifforcefileexpansion
\v!yes
- \else\@EA\ifx\csname\s!do\c!expansion#1\endcsname\relax
- \s!default
+ \else\ifcsname\s!do\c!expansion#3#1\endcsname
+ #3%
\else
- #1%
+ \s!default
\fi\fi
- \endcsname#2\to#3}
-
-\installexpander\v!command{\convertcommand }
-\installexpander\s!default{\convertargument}
-\installexpander\empty {\convertargument}
-\installexpander\v!no {\convertargument}
-\installexpander\v!yes {\convertmeaning }
-\installexpander\v!yes {\convertmeaning } % something lost ?
-\installexpander\v!strict {\reduceargument }
-\installexpander {utf} {\reducetoutf}
+ #1%
+ \endcsname#2}% #3
+
+\long\def\defconvertexpanded {\doconvertexpanded l}
+\long\def\gdefconvertexpanded{\doconvertexpanded g}
+
+\installexpander\v!command \defconvertedcommand \gdefconvertedcommand
+\installexpander\s!default \defconvertedargument \gdefconvertedargument
+\installexpander\empty \defconvertedargument \gdefconvertedargument
+\installexpander\v!no \defconvertedargument \gdefconvertedargument
+\installexpander\v!yes \defconvertedmeaning \gdefconvertedmeaning
+\installexpander\v!yes \defconvertedmeaning \gdefconvertedmeaning
+\installexpander\v!strict \defreducedargument \gdefreducedargument
+\installexpander {utf} \defreducedtoutf \gdefreducedtoutf
+
%installexpander {xml} {see xtag-ext}
-\def\convertmeaning#1\to % watch the double expansion !
+\def\dodefconvertedmeaning#1#2#3% watch the double expansion !
+ {\bgroup
+ \honorunexpanded
+ \convertencodedtokens % can be overloaded
+ \xdef\@@globalexpanded{#3}%
+ \xdef\@@globalexpanded{\@@globalexpanded}%
+ \egroup
+ #1#2\@@globalexpanded}
+
+\def\defconvertedmeaning {\dodefconvertedmeaning\defconvertedcommand}
+\def\gdefconvertedmeaning{\dodefconvertedmeaning\gdefconvertedcommand}
+
+\def\dodefreducedargument#1#2#3%
+ {\begingroup
+ \reducetocoding[raw]%
+ \edef\ascii{#3}%
+ \expandafter\endgroup\expandafter#1\expandafter#2\expandafter{\ascii}}
+
+\def\defreducedargument {\dodefreducedargument\edef}
+\def\gdefreducedargument{\dodefreducedargument\xdef}
+
+% \setupindex[expansion=utf]\index{\eacute}
+
+\def\dodefreducedtoutf#1#2#3%
+ {\begingroup
+ \reducetocoding[uc]%
+ \let\uchar\uchartoutf
+ \let\unicodechar\numbertoutf
+ \edef\ascii{#3}%
+ \expandafter\endgroup\expandafter#1\expandafter#2\expandafter{\ascii}}
+
+\def\defreducedtoutf {\dodefreducedtoutf\edef}
+\def\gdefreducedtoutf{\dodefreducedtoutf\xdef}
+
+% old syntax:
+
+\def\convertmeaning#1\to#2% watch the double expansion !
{\bgroup
\honorunexpanded
\convertencodedtokens % can be overloaded
\xdef\@@globalexpanded{#1}%
\xdef\@@globalexpanded{\@@globalexpanded}%
\egroup
- \convertcommand\@@globalexpanded\to}
+ \defconvertedcommand#2\@@globalexpanded}
\def\reduceargument#1\to#2%
{\begingroup
@@ -335,8 +368,6 @@
\edef\ascii{#1}%
\expandafter\endgroup\expandafter\edef\expandafter#2\expandafter{\ascii}}
-% \setupindex[expansion=utf]\index{\eacute}
-
\def\reducetoutf#1\to#2%
{\begingroup
\reducetocoding[uc]%
diff --git a/Master/texmf-dist/tex/context/base/core-tab.tex b/Master/texmf-dist/tex/context/base/core-tab.tex
index 5828e85f7d5..2e843eae817 100644
--- a/Master/texmf-dist/tex/context/base/core-tab.tex
+++ b/Master/texmf-dist/tex/context/base/core-tab.tex
@@ -13,6 +13,9 @@
\writestatus{loading}{Context Core Macros / TaBlE Embedding}
+% By now it makes more sense to merge the patches into the original
+% and clean that one up too.
+
% Don't change the splitter:
%
% ... \NR
@@ -64,9 +67,7 @@
% meldingen row, column, use, advise
% \AR: UITSTELLEN / EXPERIMENTEEL
-
% WAARDELOZE ERROR HANDLER
-
% THIS RENEWED MODULE WORKS OK BUT STILL LOOKS BAD
%D We felt no need to write our own table building macros,
@@ -361,34 +362,39 @@
\newif\ifForgetTableBarAndQuote \ForgetTableBarAndQuotetrue
-\bgroup
-
-\catcode`\|=\@@active
-\catcode`\"=\@@active
-
-\gdef\pushouterbarandquote
- {\ifForgetTableBarAndQuote
- \let|\letterbar
- \let"\letterdoublequote
- \ifnum\catcode`\|=\@@active \let\outertablebar |\else\let\outertablebar \relax\fi
- \ifnum\catcode`\"=\@@active \let\outertablequote"\else\let\outertablequote\relax\fi
- \fi}
-
-\gdef\popouterbarandquote
- {\ifForgetTableBarAndQuote
- \ifx\outertablebar \relax\else\let|\outertablebar \fi
- \ifx\outertablequote\relax\else\let"\outertablequote\fi
- \else
- \redefinetablebarandquote
- \fi}
+% \bgroup
-\egroup
+% \catcode`\|=\@@active
+% \catcode`\"=\@@active
+%
+% \gdef\pushouterbarandquote
+% {\ifForgetTableBarAndQuote
+% \ifnum\catcode`\|=\@@active \let\outertablebar |\else\let\outertablebar \relax\fi
+% \ifnum\catcode`\"=\@@active \let\outertablequote"\else\let\outertablequote\relax\fi
+% \let|\letterbar
+% \let"\letterdoublequote
+% \fi}
+%
+% \gdef\popouterbarandquote
+% {\ifForgetTableBarAndQuote
+% \ifx\outertablebar \relax\else\let|\outertablebar \fi
+% \ifx\outertablequote\relax\else\let"\outertablequote\fi
+% \else
+% \redefinetablebarandquote
+% \fi}
+%
+% \egroup
+%
+% \def\ObeyTableBarAndQuote
+% {\ForgetTableBarAndQuotefalse
+% \ifintable
+% \redefinetablebarandquote
+% \fi}
-\def\ObeyTableBarAndQuote
- {\ForgetTableBarAndQuotefalse
- \ifintable
- \redefinetablebarandquote
- \fi}
+\let\ActivateBarAndQuote \relax
+\let\ObeyTableBarAndQuote\relax
+\let\pushouterbarandquote\relax
+\let\popouterbarandquote \relax
%D \macros
%D {ObeyTableBarAndQuote}
@@ -998,7 +1004,7 @@
{\bgroup % kan-ie weg?
\global\intabletrue
\pushouterbarandquote
- \catcode`\|=\@@other
+ %catcode`\|=\@@other
\complexorsimple\secondstagestartTABLE}
\def\simplesecondstagestartTABLE#1%
@@ -1023,10 +1029,10 @@
%D The implementation of the definition macro is not that
%D complicated:
-\def\douseTABLEtemplate#1#2#3%
- {\gdef\TABLEhead{\getvalue{@@TABLEhead#2}}%
- \gdef\TABLEtail{\getvalue{@@TABLEtail#3}}%
- \complexsecondstagestartTABLE[#1]}
+\def\definetabletemplate % to be redone
+ {\bgroup
+ \catcode`\|=\@@other
+ \doquadrupleempty\dodefinetabletemplate}
\def\dodefinetabletemplate[#1][#2][#3][#4]%
{\ifsecondargument
@@ -1034,10 +1040,10 @@
\fi
\egroup}
-\def\definetabletemplate
- {\bgroup
- \catcode`\|=\@@other
- \doquadrupleempty\dodefinetabletemplate}
+\def\douseTABLEtemplate#1#2#3%
+ {\gdef\TABLEhead{\getvalue{@@TABLEhead#2}}%
+ \gdef\TABLEtail{\getvalue{@@TABLEtail#3}}%
+ \complexsecondstagestartTABLE[#1]}
%D The optional third and fourth arguments define which table
%D head and tail to use.
@@ -1098,18 +1104,24 @@
\fi \fi
\TABLEnoalign{\globalpopmacro\simpleTableHL}}
-\def\complexsecondstagestartTABLE#1[#2]%
- {\convertargument|\to\asciia
- \convertargument#2\to\asciib
+\bgroup \catcode`|=\@@other \catcode`"=\@@other
+
+\gdef\complexsecondstagestartTABLE#1[#2]% brr nested mess
+ {\bgroup
+ \@@useotherbar
+ \@@useotherquote
\global\setfalse\someTABLEhead
\global\setfalse\someTABLEtail
- \doifinstringelse\asciia\asciib
- {\gdef\restartTABLE{\dorestartTABLE{\thirdstagestartTABLE{#2}}}}
+ \expanded{\doifinstringelse{|}{#2}}
+ {\xdef\restartTABLE{\noexpand\dorestartTABLE{\noexpand\thirdstagestartTABLE{#2}}}}
{\doifdefinedelse{\c!Table#2}
{\gdef\restartTABLE{\getvalue{\c!Table#2}}}
{\gdef\restartTABLE{\dorestartTABLE{\getvalue{#2}}}}}%
+ \egroup
\restartTABLE}
+\egroup
+
%D The third stage involves a lot of (re)sets, which we will
%D explain later.
@@ -1153,6 +1165,7 @@
\doifsomething{#1}
{\def\TABLEformat{#1}%
\getTABLEnofcolumns\TABLEformat
+ % more modern is to use catcode tables
\expandafter\BeginFormat\TABLEformat\EndFormat}}
\def\finishTABLE
@@ -1197,13 +1210,22 @@
\global\TABLEinbreakfalse
\firststagestartTABLE}
+% \def\stoptables
+% {\ifconditional\tablerepeattail\else\insertTABLEtail\fi
+% \finishTABLE
+% \egroup
+% \dosplittablebox\tablecontentbox
+% \flushnotes
+% \egroup}
+
\def\stoptables
- {\ifconditional\tablerepeattail\else\insertTABLEtail\fi
- \finishTABLE
- \egroup
- \dosplittablebox\tablecontentbox
- \flushnotes
- \egroup}
+ {\chuckTABLEautorow % AM: before the tail, else noalign problem
+ \ifconditional\tablerepeattail\else\insertTABLEtail\fi
+ \finishTABLE
+ \egroup
+ \dosplittablebox\tablecontentbox
+ \flushnotes
+ \egroup}
\newdimen\TABLEcaptionheight % obsolete
@@ -1410,8 +1432,8 @@
\def\checkTABLErow#1% pure for message purposes
{\unskip % added
\ifTABLEgraydone
- \convertargument #1\to\asciia
- \convertcommand\TABLEendBCL\to\asciib
+ \defconvertedargument\asciia{#1}%
+ \defconvertedcommand \asciib\TABLEendBCL
\ifx\asciia\asciib \else
\writestatus\m!TABLE{confusing \asciia\space and \asciib}%
\gdef\TABLEgraylineerror%
@@ -1617,18 +1639,25 @@
%D \TABLE\ changes the catcode when needed.}
\bgroup
-\catcode`\|=\@@active
-\gdef\protectTABLEbar{\let|\letterbar}
-\catcode`\|=\@@other
+ \catcode`\|=\@@other \gdef\@@otherbar {|}
+ \catcode`\"=\@@other \gdef\@@otherquote {"}
+ \catcode`\|=\@@active \gdef\@@useotherbar {\let|\@@otherbar}
+ \catcode`\"=\@@active \gdef\@@useotherquote{\let"\@@otherquote}
+\egroup
+
+\bgroup \catcode`\|=\@@other
+
\gdef\getTABLEnofcolumns#1%
{\bgroup
\cleanupfeatures % needed !
- \protectTABLEbar % is still a feature
- \expanded{\convertargument#1}\to\ascii
+ \@@useotherbar
+ \@@useotherquote
+ \expanded{\defconvertedargument\noexpand\ascii{#1}}%
\@EA\doglobal\@EA\counttoken\@EA|\@EA\in\ascii\to\maxTABLEcolumn
\global\advance\maxTABLEcolumn \minusone
% in case of & counting, divide by 2
\egroup}
+
\egroup
\def\!ttDoHalign
@@ -1866,14 +1895,16 @@
\normalTABLEquote
\fi}
-\bgroup
-\catcode`\|=\@@active
-\catcode`\"=\@@active
-\gdef\redefinetablebarandquote%
- {\def|{\VL}% % \normalTABLEsimplebar
- \def\|##1{\VL[##1]}% % \normalTABLEcomplexbar
- \def"{\NC}} % \normalTABLEquote
-\egroup
+% \bgroup
+% \catcode`\|=\@@active
+% \catcode`\"=\@@active
+% \gdef\redefinetablebarandquote
+% {\def|{\VL}% % \normalTABLEsimplebar
+% \def\|##1{\VL[##1]}% % \normalTABLEcomplexbar
+% \def"{\NC}} % \normalTABLEquote
+% \egroup
+
+\let\redefinetablebarandquote\relax
%D \startitemize[3*ruim]
%D \sym{\type{\DL}}
@@ -2318,7 +2349,7 @@
{\chardef\TABLErowfactor\zerocount}
{\chardef\TABLErowfactor\plustwo }}
-\def\dohandlebar
+\def\dohandlebar % here ?
{\ifmmode
\@EA\domathmodebar
\else\ifintable
diff --git a/Master/texmf-dist/tex/context/base/core-tbl.tex b/Master/texmf-dist/tex/context/base/core-tbl.tex
index 902b578b937..843e9266211 100644
--- a/Master/texmf-dist/tex/context/base/core-tbl.tex
+++ b/Master/texmf-dist/tex/context/base/core-tbl.tex
@@ -142,43 +142,44 @@
% \NC 500 \NC \NC 20 \NC \NC 100 \NC \NR
% \stoptabulate
-\newtoks \tabulatepreamble
-\newtoks \tabulatebefore
-\newtoks \tabulateafter
-\newtoks \tabulatebmath
-\newtoks \tabulateemath
-\newtoks \tabulatefont
-\newtoks \tabulatesettings
-\newtoks \tabulatedummy
+\newtoks \tabulatepreamble
+\newtoks \tabulatebefore
+\newtoks \tabulateafter
+\newtoks \tabulatebmath
+\newtoks \tabulateemath
+\newtoks \tabulatefont
+\newtoks \tabulatesettings
+\newtoks \tabulatedummy
-\newcount \nofautotabulate % \newcounter \nofautotabulate
-\newcount \tabulatecolumns % \newcounter \tabulatecolumns
+\newcount \nofautotabulate
+\newcount \tabulatecolumns
+\newcount \tabulatecolumn
-\newcounter \tabulateminplines
-\newcounter \tabulatemaxplines
+\newcount \tabulateminplines
+\newcount \tabulatemaxplines
-\newif \ifautotabulate
-\newif \ifsplittabulate \splittabulatetrue
+\newif \ifautotabulate
+\newif \ifsplittabulate \splittabulatetrue
-\newif \ifhandletabulatepbreak \handletabulatepbreaktrue
-\newif \iftabulatenopbreak \tabulatenopbreakfalse
+\newif \ifhandletabulatepbreak \handletabulatepbreaktrue
+\newif \iftabulatenopbreak \tabulatenopbreakfalse
-\newif \iftabulateequal
-\newif \iftracetabulate
-\newif \ifframedtabulate
+\newif \iftabulateequal
+\newif \iftracetabulate
+\newif \ifframedtabulate
-\newdimen \tabulatepwidth
-\newdimen \tabulatewidth
-\newdimen \tabulateunit
-\newdimen \tabulatemaxpheight
+\newdimen \tabulatepwidth
+\newdimen \tabulatewidth
+\newdimen \tabulateunit
+\newdimen \tabulatemaxpheight
-\newbox \tabulatebox
+\newbox \tabulatebox
% [|lg{.}|] => \NG 12.34 \NC
\gdef\handletabulatecharalign#1 % space delimited !
- {\edef\alignmentclass{\tabulatecolumn}%
- \edef\alignmentcharacter{\getvalue{\@@tabalign@@\tabulatecolumn}}%
+ {\edef\alignmentclass{\the\tabulatecolumn}%
+ \edef\alignmentcharacter{\getvalue{\@@tabalign@@\the\tabulatecolumn}}%
\ifcase\tabulatepass\or
\setfirstpasscharacteralign\checkalignment{#1}%
\fi % force hsize
@@ -234,74 +235,7 @@
\fi}
\def\checktabulatesetups
- {\getvalue{\@@tabsetups@@\tabulatecolumn}}
-
-% \def\dodosettabulatepreamble#1#2%
-% {\ifzeropt\tabulatewidth
-% \ifcase\tabulatemodus\relax
-% \let\preamblebox\empty
-% \else
-% \def\preamblebox{\autotabulatetrue}%
-% \fi
-% \else
-% \ifcase\tabulatemodus\relax
-% \edef\preamblebox{\hbox to \the\tabulatewidth}%
-% \else
-% \edef\preamblebox{\hsize\the\tabulatewidth}%
-% \fi
-% \fi
-% %
-% % less bytes
-% %
-% %\edef\preamblebox%
-% % {\ifcase\tabulatewidth
-% % \ifcase\tabulatemodus\relax\else\noexpand\autotabulatetrue\fi
-% % \els
-% % \ifcase\tabulatemodus\relax\hbox to\else\hsize\fi\the\tabulatewidth
-% % \fi}%
-% %
-% % 0 = NC column next EQ equal column
-% % 1 = RC column raw RQ equal column raw
-% % 2 = HC column hook HQ equal column hook
-% % some entries can be left out if we test for them being set
-% \@EA\appendtoks \@EA&\@EA\hskip\pretabskip##&\to\!!toksa
-% \appendtoks \ignorespaces\to\!!toksa
-% %\@EA\appendtoks\@EA\xdef\@EA\tabulatecolumn\@EA{\tabulatecolumns}\to\!!toksa
-% \@EA\appendtoks\@EA\xdef\@EA\tabulatecolumn\@EA{\the\tabulatecolumns}\to\!!toksa
-% \appendtoks \checktabulatesetups\to\!!toksa
-% \appendtoks \checktabulatehook\to\!!toksa
-% \@EA\appendtoks \preamblebox\to\!!toksa
-% \appendtoks \bgroup\bbskip\bgroup#1\to\!!toksa
-% \appendtoks\ifnum\tabulatetype=\plusone \else \to\!!toksa
-% \@EA\appendtoks \the\tabulatebmath\to\!!toksa
-% \@EA\appendtoks \the\tabulatefont\to\!!toksa
-% \@EA\appendtoks \the\tabulatesettings\to\!!toksa
-% \@EA\appendtoks \the\tabulatebefore\to\!!toksa
-% \appendtoks\fi \to\!!toksa
-% \appendtoks \bgroup\ignorespaces\to\!!toksa
-% %
-% \appendtoks \tabulatehook##\to\!!toksa
-% %
-% %%\doifdefinedelse{\@@tabalign@@\tabulatecolumns}
-% %\doifdefinedelse{\@@tabalign@@\the\tabulatecolumns}
-% % {\appendtoks\handletabulatecharalign## \to\!!toksa}
-% % {\appendtoks\tabulatehook ##\to \!!toksa}%
-% % waarom kan ik hier geen \xx{##} geven, om een of
-% % andere reden passeert dan tex de hele regel (incl \NC's)
-% % als argument; elke delimiter <> space gaat trouwens fout
-% \appendtoks \unskip\unskip\ifmmode\else\endgraf\fi\egroup\to\!!toksa
-% \appendtoks\ifnum\tabulatetype=1 \else \to\!!toksa
-% \@EA\appendtoks \the\tabulateafter\to\!!toksa
-% \@EA\appendtoks \the\tabulateemath\to\!!toksa
-% \appendtoks\fi \to\!!toksa
-% \appendtoks #2\egroup\egroup\to\!!toksa
-% \@EA\appendtoks \@EA&\@EA\hskip\postabskip##\to\!!toksa
-% \appendtoks\NC\to\tabulatedummy
-% \let\bbskip\empty
-% \def\pretabskip{.5\tabulateunit}%
-% \let\postabskip\pretabskip
-% \let\gettabulateexit\dogettabulateexit
-% \tabulatewidth\zeropoint}
+ {\getvalue{\@@tabsetups@@\the\tabulatecolumn}}
\let\pretabrule \donothing
\let\posttabrule\donothing
@@ -336,8 +270,8 @@
% some entries can be left out if we test for them being set
\@EA\appendtoks \@EA&\@EA\hskip\pretabskip\pretabrule##&\to\!!toksa
\appendtoks \ignorespaces\to\!!toksa
- %\@EA\appendtoks\@EA\xdef\@EA\tabulatecolumn\@EA{\tabulatecolumns}\to\!!toksa
- \@EA\appendtoks\@EA\xdef\@EA\tabulatecolumn\@EA{\the\tabulatecolumns}\to\!!toksa
+% \@EA\appendtoks\@EA\xdef\@EA\tabulatecolumn\@EA{\the\tabulatecolumns}\to\!!toksa
+ \@EA\appendtoks\@EA\global\@EA\tabulatecolumn\the\tabulatecolumns\relax\to\!!toksa
\appendtoks \checktabulatesetups\to\!!toksa
\appendtoks \checktabulatehook\to\!!toksa
\@EA\appendtoks \preamblebox\to\!!toksa
@@ -526,7 +460,9 @@
\def\tabulatenotragged {\ifnum\tabulatetype=\plusone \else\notragged \fi}
\def\tabulatehss {\ifnum\tabulatetype=\plusone \else\hss \fi}
-\def\nexttabulate#1|%
+\bgroup \catcode`\|=\@@other
+
+\gdef\nexttabulate#1|%
{\chardef\tabulatealign\@@tabulatealign
\chardef\tabulatemodus\zerocount
\chardef\tabulatedimen\zerocount
@@ -563,6 +499,8 @@
\fi
\futurelet\next\donexttabulate}
+\egroup
+
\def\donexttabulate
{\ifx\next\relax\else
\expandafter\nexttabulate
@@ -580,13 +518,13 @@
\dp\tabulatebox\strutdp
\box\tabulatebox}
-\def\dotabulatehook {\getvalue{\@@tabhook@@ \tabulatecolumn}}
-\def\dotabulatealign {\getvalue{\@@tabalign@@ \tabulatecolumn}}
+\def\dotabulatehook {\getvalue{\@@tabhook@@ \the\tabulatecolumn}}
+\def\dotabulatealign {\getvalue{\@@tabalign@@ \the\tabulatecolumn}}
\def\resettabulatepheight
- {\globallet\tabulateminplines\!!plusone
+ {\global\tabulateminplines\plusone
\getnoflines\tabulatemaxpheight
- \xdef\tabulatemaxplines{\the\noflines}%
+ \global\tabulatemaxplines\noflines
\global\tabulatemaxpheight\zeropoint}
\def\settabulatepheight
@@ -604,7 +542,7 @@
\ifnum\tabulateminplines=\plusone
\dotabulatenobreak
\fi
- \doglobal\increment\tabulateminplines
+ \global\advance\tabulateminplines\plusone
\ifnum\tabulateminplines=\tabulatemaxplines\relax
\dotabulatenobreak
\fi
@@ -642,10 +580,12 @@
% \starttabulate[preamble]
% \starttabulate -> \starttabulate[|l|p|]
-\def\definetabulate
+\bgroup \catcode`\|=\@@other
+
+\gdef\definetabulate
{\dotripleempty\dodefinetabulate}
-\def\dodefinetabulate[#1][#2][#3]%
+\gdef\dodefinetabulate[#1][#2][#3]%
{\ifthirdargument
\doifundefined{\??tt#1::\c!unit}
{\copyparameters
@@ -668,6 +608,8 @@
\definetabulate[#1][][|l|p|]%
\fi\fi}
+\egroup
+
\let\tabulateheadcontent\empty
\let\tabulatetailcontent\empty
@@ -731,7 +673,9 @@
\setvalue{\e!start\v!tabulate}%
{\bgroup\dodoubleempty\donormalstarttabulate}
-\def\donormalstarttabulate[#1][#2]%
+\bgroup
+
+\gdef\donormalstarttabulate[#1][#2]%
{\ifsecondargument
\getparameters[\??tt\v!tabulate::][#2]%
\fi
@@ -742,6 +686,8 @@
\fi
\next}
+\egroup
+
% The much neede hook:
\newtoks\everytabulate
@@ -757,6 +703,11 @@
\def\tabulateparameter#1{\csname\??tt\currenttabulate#1\endcsname}
+\bgroup
+ \catcode`\|=\@@other \gdef\@@otherbar{|}
+ \catcode`\|=\@@active \gdef\@@useotherbar{\let|\@@otherbar}
+\egroup
+
\def\dofinalstarttabulate[#1][#2][#3]% identifier sub preamble
{\edef\currenttabulate{#1::#2}%
\ifinsidefloat \else
@@ -807,8 +758,9 @@
{\appendtoks{##1}\to\!!toksb\do}%
\def\dodododo##1%
{\appendtoks##1\to\!!toksb\do}%
- \globallet\tabulatecolumn\!!zerocount
- \do#3\relax
+ \global\tabulatecolumn\zerocount
+% \do#3\relax
+\bgroup\@@useotherbar\expanded{\egroup\noexpand\do#3\relax}%
\processcontent
{\e!stop#1}% \currenttabulate}
\tabulatecontent
@@ -952,7 +904,13 @@
\chardef\tabulaterepeathead\zerocount
-\def\processtabulate[|#1|]% in the process of optimizing
+\newcount\noftabulatelines
+\newcount\totalnoftabulatelines
+\newcount\minusnoftabulatelines
+
+\bgroup \catcode`\|=\@@other
+
+\gdef\processtabulate[|#1|]% in the process of optimizing
{\tabulateunit\tabulateparameter\c!unit
\checkfulltabulatecontent
\globallet\tabulateruledepth \!!zeropoint
@@ -969,9 +927,9 @@
\def\postabskip{.5\tabulateunit}%
\global\tabulatecolumns\zerocount
\global\nofautotabulate\zerocount
- \doglobal\newcounter\noftabulatelines
- \let\totalnoftabulatelines\noftabulatelines
- \let\minusnoftabulatelines\noftabulatelines
+ \global\noftabulatelines\zerocount
+ \totalnoftabulatelines\noftabulatelines
+ \minusnoftabulatelines\noftabulatelines
\global\tabulatepwidth\zeropoint
\global\tabulateequalfalse
\resettabulatepheight
@@ -1004,10 +962,10 @@
\def\HR{\doHR\zerocount}
\def\HL{\doHL\zerocount}
\unexpanded \def\NR % next row
- {\doglobal\increment\noftabulatelines
+ {\global\advance\noftabulatelines\plusone
\global\tabulatefirstflushedfalse
\global\tabulateequalfalse
- \globallet\tabulatecolumn\!!zerocount
+ \global\tabulatecolumn\zerocount
\resettabulatepheight
\unskip\unskip\crcr\flushtabulated
\TABLEnoalign
@@ -1036,7 +994,7 @@
\let\doHR\gobbleoneargument
\let\doHL\gobbleoneargument
\global\let\flushtabulated\empty
- \let\savedbar|\let|\nexttabulate
+% \let\savedbar|\let|\nexttabulate
\tabskip\zeropoint
\ifdim\tabulateparameter\c!margin>\zeropoint
\!!toksa{&\flushtabulateindent\strut##%
@@ -1047,7 +1005,8 @@
&##\tabskip\zeropoint}%
\fi
\tabulatewidth\zeropoint
- |#1X|\relax
+ % |#1X|\relax
+ \nexttabulate #1X|\relax
\scratchcounter\tabulatecolumns
\multiply\scratchcounter3%
\advance\scratchcounter4%
@@ -1059,9 +1018,9 @@
% {\global\setbox\csname\@@tabbox@@\recurselevel\endcsname\box\voidb@x}}%
\initializetableboxes\tabulatecolumns
\appendtoks&##\to\!!toksa
- \appendtoks\doglobal\increment\tabulatecolumn\to\!!toksa
+ \appendtoks\global\advance\tabulatecolumn\plusone\to\!!toksa
\appendtoks\NC\unskip\unskip\crcr\flushtabulated\to\tabulatedummy % no count
- \globallet\tabulatecolumn\!!zerocount
+ \global\tabulatecolumn\zerocount
\resettabulatepheight
\def\bskip
{\setbox\tabulatebox\vbox\bgroup
@@ -1075,7 +1034,7 @@
\def\xeskip
{\par\egroup\egroup
\global\let\tabulatehook\dotabulatehook}%
- \let|\savedbar
+ % \let|\savedbar
\global\let\tabulatehook\dotabulatehook
\doifvalue{\??tt\currenttabulate\c!indenting}\v!no\forgetparindent
\ifinsidefloat
@@ -1134,7 +1093,7 @@
\gdef\flushtabulated
{\TABLEnoalign % noalign % no interference !
{\global\let\flushtabulatedindeed\empty
- \globallet\tabulatecolumn\!!zerocount
+ \global\tabulatecolumn\zerocount
\handletabulatepbreak
\dorecurse\tabulatecolumns % was: \noftabcolumns
{\ifvoid\tablebox\recurselevel\else
@@ -1153,10 +1112,9 @@
\def\eskip % vertical strut added august 2003
{\par\verticalstrut\vskip-\struttotal\egroup}%
\fi
- \let\totalnoftabulatelines\noftabulatelines
- \let\minusnoftabulatelines\noftabulatelines
- \decrement\minusnoftabulatelines
- \doglobal\newcounter\noftabulatelines
+ \totalnoftabulatelines\noftabulatelines
+ \minusnoftabulatelines\numexpr\noftabulatelines+\minusone\relax
+ \global\noftabulatelines\zerocount
% not satisfying
% \def\doHL##1%
% {\TABLEnoalign
@@ -1302,6 +1260,8 @@
\fi
\egroup}
+\egroup
+
% \setuptabulate[split=yes,header=text,title=Vervolg van Tabel]
%
% % \starttabulatehead
diff --git a/Master/texmf-dist/tex/context/base/core-trf.tex b/Master/texmf-dist/tex/context/base/core-trf.tex
index 7a62d5392f1..e31f8a33afc 100644
--- a/Master/texmf-dist/tex/context/base/core-trf.tex
+++ b/Master/texmf-dist/tex/context/base/core-trf.tex
@@ -76,6 +76,7 @@
\def\dodoscalenextbox#1%
{\edef\currentscaletag{#1}%
+ \doif{\scaleparameter\c!depth}\v!no{\setbox\nextbox\hbox{\raise\nextboxdp\box\nextbox}}% new
\forgetall
\dontshowcomposition
\dontcomplain
@@ -114,9 +115,16 @@
\edef\scaleboxstampb % fast way [just sx/sy]
{\scaleparameter\c!sx
\scaleparameter\c!sy}%
+ \edef\scaleboxstampc
+ {11}%
\ifx\scaleboxstampa\empty
- \ifx\scaleboxstampb\empty
- % no scaling
+ \ifx\scaleboxstampb\scaleboxstampc
+ % no scaling, but still check; new, gone again
+% wrong: scaled proportionally as side effect
+% \doifsomething{\scaleparameter\c!maxwidth }{\letvalue{\currentscaletag\c!factor}\v!fit}%
+% \doifsomething{\scaleparameter\c!maxheight}{\letvalue{\currentscaletag\c!factor}\v!fit}%
+ \insidefloattrue % trick
+ \dodoscaleboxcalculations
\else
\dosetscalboxsxsy
\nodoscaleboxcalculations
@@ -170,6 +178,7 @@
% preparations
\checkscaleboxsettings
% calculators
+ % beware, they operate in sequence, and calculate missing dimensions / messy
%setscaleboxbynature % when? needed?
\setscaleboxbyfactor
\setscaleboxbyscale
diff --git a/Master/texmf-dist/tex/context/base/core-tsp.tex b/Master/texmf-dist/tex/context/base/core-tsp.tex
index 5523c2ccdbf..3046a1ddad1 100644
--- a/Master/texmf-dist/tex/context/base/core-tsp.tex
+++ b/Master/texmf-dist/tex/context/base/core-tsp.tex
@@ -72,7 +72,6 @@
\@@sibefore
\let\next} % \bgroup
-
\def\checksplitfloat
{\ifconditional\splitfloatdone\else
\blank{\tttf \getmessage\m!floatblocks{13}\empty}\blank
@@ -124,6 +123,7 @@
\bgroup
\ifconditional\somenextplitofffloat
\settrue\retainfloatnumber
+\notesenabledfalse % best here, experimental, brrr; test with note in caption
\else
\setfalse\retainfloatnumber
\fi
@@ -131,14 +131,14 @@
\egroup
\ifconditional\somenextplitofffloat
\doifelsenothing\@@siinbetween
- {\ifconditional\tsplitfirstdone\else\page\fi}
+ {\ifconditional\splitfloatfirstdone\else\page\fi}
\@@siinbetween
\else
\@@siafter
\dopopsavedfloats
\doflushsavedfloats
\fi
- \global\settrue\tsplitfirstdone}%
+ \global\settrue\splitfloatfirstdone}%
\vbox}
\def\nodowithsplitofffloat
@@ -146,7 +146,7 @@
{\forgetall
\dontcomplain
\box\nextbox % maybe an option to unvbox
- \global\settrue\tsplitfirstdone}%
+ \global\settrue\splitfloatfirstdone}%
\vbox}
\def\dochecksplitofffloat#1% box
@@ -223,12 +223,12 @@
% todo: keep tail to rest, so we need a lookahead
-\newconditional\tsplitfirstdone
+\newconditional\splitfloatfirstdone
\def\handletsplit
{\analyzesplitfloatcaption\tsplitcontent
- \global\setfalse\tsplitfirstdone
- \testpage
+ \global\setfalse\splitfloatfirstdone
+ \testpagesync % new, sync, but still tricky
[\tsplitminimumfreelines]
[\dimexpr\tsplitminimumfreespace+\extrasplitfloatlines\lineheight\relax]%
\setbox\scratchbox\vbox{\tsplitinbetween}%
@@ -237,11 +237,11 @@
\doloop
{\ifinsidecolumns
% brrr, assumes empty columns
- \global\setfalse\tsplitfirstdone
+ \global\setfalse\splitfloatfirstdone
\scratchdimen\textheight
\!!donectrue
\else
- \ifconditional\tsplitfirstdone
+ \ifconditional\splitfloatfirstdone
\scratchdimen\textheight
\!!donectrue
\else\ifdim\pagegoal<\maxdimen
@@ -332,7 +332,8 @@
\else
\doifnotinsidesplitfloat\page
\fi
- \fi}}
+ \fi}%
+ \global\setfalse\splitfloatfirstdone} % we can use this one for tests
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/core-two.lua b/Master/texmf-dist/tex/context/base/core-two.lua
new file mode 100644
index 00000000000..45f1d0f46d1
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/core-two.lua
@@ -0,0 +1,83 @@
+if not modules then modules = { } end modules ['core-two'] = {
+ version = 1.001,
+ comment = "companion to core-two.tex",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+--[[ldx--
+<p>We save multi-pass information in the main utility table.</p>
+--ldx]]--
+
+if not jobs then jobs = { } end
+if not job then jobs['main'] = { } end job = jobs['main']
+if not job.twopass then job.twopass = { } end
+
+function job.definetwopassdata(id)
+ job.twopass[id] = job.twopass[id] or { }
+end
+
+function job.gettwopassdata(id)
+ local jti = job.twopass[id]
+ if jti and #jti > 0 then
+ tex.print(jti[1])
+ table.remove(jti,1)
+ end
+end
+
+function job.checktwopassdata(id)
+ local jti = job.twopass[id]
+ if jti and #jti > 0 then
+ tex.print(jti[1])
+ end
+end
+
+function job.getfromtwopassdata(id,n)
+ local jti = job.twopass[id]
+ if jti and jti[n] then
+ tex.print(jti[n])
+ end
+end
+
+job.findtwopassdata = job.getfromtwopassdata
+job.getfirstpassdata = job.checktwopassdata
+
+function job.getlasttwopassdata(id)
+ local jti = job.twopass[id]
+ if jti and #jti > 0 then
+ tex.print(jti[#jti])
+ end
+end
+
+function job.noftwopassitems(id)
+ local jti = job.twopass[id]
+ if jti then
+ tex.print(#jti)
+ else
+ tex.print('0')
+ end
+end
+
+function job.twopassdatalist(id)
+ local jti = job.twopass[id]
+ if jti then
+ tex.print(table.concat(jti,','))
+ end
+end
+
+function job.doifelseintwopassdata(id,str)
+ local jti = job.twopass[id]
+ if jti then
+ local found = false
+ for _, v in pairs(jti) do
+ if v == str then
+ found = true
+ break
+ end
+ end
+ cs.testcase(found)
+ else
+ cs.testcase(false)
+ end
+end
diff --git a/Master/texmf-dist/tex/context/base/core-two.mkii b/Master/texmf-dist/tex/context/base/core-two.mkii
index 38bf1b8d4a0..a14586dc48e 100644
--- a/Master/texmf-dist/tex/context/base/core-two.mkii
+++ b/Master/texmf-dist/tex/context/base/core-two.mkii
@@ -15,27 +15,21 @@
%D We save two pass information in the utility file.
-\def\resettwopassentries
- {\let\twopassentry\gobblethreearguments}
-
\addutilityreset{twopassentries}
-\resettwopassentries
+\def\immediatesavetwopassdata #1#2#3{\immediatewriteutilitycommand{\twopassentry{#1}{#2}{#3}}}
+\def\savetwopassdata #1#2#3{\writeutilitycommand{\twopassentry{#1}{#2}{#3}}}
+\def\lazysavetwopassdata #1#2#3{\expanded{\writeutilitycommand{\noexpand\twopassentry{#1}{#2}{#3}}}} % expanded !
+\def\savetaggedtwopassdata #1#2#3#4{\immediatewriteutilitycommand{\twopassentry{#1}{#2}{#3::#4}}}
+\def\lazysavetaggedtwopassdata#1#2#3#4{\expanded{\writeutilitycommand{\noexpand\twopassentry{#1}{#2}{#3::#4}}}} % expanded !
+
+\def\resettwopassentries
+ {\let\twopassentry\gobblethreearguments}
\def\settwopassentries
{\def\twopassentry##1{\executeifdefined{@@##1\s!pass}\gobbletwoarguments}}
-\def\savetwopassdata#1#2#3%
- {\immediatewriteutilitycommand{\twopassentry{#1}{#2}{#3}}}
-
-\def\lazysavetwopassdata#1#2#3% expanded !
- {\expanded{\writeutilitycommand{\noexpand\twopassentry{#1}{#2}{#3}}}}
-
-\def\savetaggedtwopassdata#1#2#3#4%
- {\immediatewriteutilitycommand{\twopassentry{#1}{#2}{#3::#4}}}
-
-\def\lazysavetaggedtwopassdata#1#2#3#4% expanded !
- {\expanded{\writeutilitycommand{\noexpand\twopassentry{#1}{#2}{#3::#4}}}}
+\resettwopassentries
\def\appendtwopasselement#1#2#3% can sometimes become a large list
{%\debuggerinfo{\m!systems}{twopass data #1 - #2 = #3}%
@@ -73,7 +67,7 @@
\def\loadtwopassdata
{\ifx\alltwopasslists\empty\else
\processcommacommand[\alltwopasslists]\doloadtwopassdata
- \globallet\alltwopassdata\empty
+ \globallet\alltwopasslists\empty
\fi}
\def\dogettwopassdata[#1,#2]#3#4%
diff --git a/Master/texmf-dist/tex/context/base/core-two.mkiv b/Master/texmf-dist/tex/context/base/core-two.mkiv
new file mode 100644
index 00000000000..bbdc6d4890a
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/core-two.mkiv
@@ -0,0 +1,83 @@
+%D \module
+%D [ file=core-two, % moved from core-uti
+%D version=2006.09.24,
+%D title=\CONTEXT\ Core Macros,
+%D subtitle=Two Pass Data,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\unprotect
+
+\registerctxluafile{core-two}{1.001}
+
+\appendtoks
+ \immediatewriteutilitytua{if not job.twopass then job.twopass = { } end}%
+ \immediatewriteutilitytua{local tp = job.twopass}%
+\to \everyopenutilities
+
+%D I'm not that sure if this behaves exactly like mkii. This needs a cleanup.
+
+% \def\immediatesavetwopassdata #1#2#3{\immediatewriteutilitycommand{\twopassentry{#1}{#2}{#3}}}
+% \def\savetwopassdata #1#2#3{\writeutilitycommand{\twopassentry{#1}{#2}{#3}}}
+% \def\lazysavetwopassdata #1#2#3{\expanded{\writeutilitycommand{\noexpand\twopassentry{#1}{#2}{#3}}}} % expanded !
+% \def\savetaggedtwopassdata #1#2#3#4{\immediatewriteutilitycommand{\twopassentry{#1}{#2}{#3::#4}}}
+% \def\lazysavetaggedtwopassdata#1#2#3#4{\expanded{\writeutilitycommand{\noexpand\twopassentry{#1}{#2}{#3::#4}}}} % expanded !
+
+\def\immediatesavetwopassdata #1#2#3{\expanded{\immediatewriteutilitytua{ti(tp['#1'],"#3")}}}
+\def\savetwopassdata #1#2#3{\expanded{\writeutilitytua {ti(tp['#1'],"#3")}}}
+\def\lazysavetwopassdata #1#2#3{\expanded{\writeutilitytua {ti(tp['#1'],"#3")}}}
+\def\savetaggedtwopassdata #1#2#3#4{\expanded{\immediatewriteutilitytua{tp['#1']['#3']="#4"}}}
+\def\lazysavetaggedtwopassdata #1#2#3#4{\expanded{\writeutilitytua {tp['#1']['#3']="#4"}}}
+
+% temp hack: needs a proper \starteverytimeluacode
+
+\def\dodefinetwopasslist#1%
+ {\ctxlua{job.definetwopassdata('#1')}%
+ \immediatewriteutilitytua{job.definetwopassdata('#1')}}
+
+\def\definetwopasslist#1%
+ {\dodefinetwopasslist{#1}%
+ \doglobal\addtocommalist{#1}\alltwopasslists}
+
+\appendtoks
+ \processcommacommand[\alltwopasslists]\dodefinetwopasslist
+ \globallet\alltwopasslists\empty
+\to \everyopenutilities
+
+\def\testtwopassdata
+ {\ifx\twopassdata\empty\twopassdatafoundfalse\else\twopassdatafoundtrue\fi}
+
+\def\gettwopassdata#1%
+ {\edef\twopassdata{\ctxlua{job.gettwopassdata("#1")}}\testtwopassdata}
+
+\def\checktwopassdata#1%
+ {\edef\twopassdata{\ctxlua{job.checktwopassdata("#1")}}\testtwopassdata}
+
+\def\findtwopassdata#1#2%
+ {\edef\twopassdata{\ctxlua{job.findtwopassdata("#1","#2")}}\testtwopassdata}
+
+\let\getfirsttwopassdata\checktwopassdata
+
+\def\getlasttwopassdata#1%
+ {\edef\noftwopassitems{\ctxlua{job.noftwopassitems("#1")}}%
+ \edef\twopassdata {\ctxlua{job.getlasttwopassdata("#1")}}%
+ \testtwopassdata}
+
+\def\getfromtwopassdata#1#2%
+ {\edef\twopassdata{\ctxlua{job.getfromtwopassdata("#1",#2)}}\testtwopassdata}
+
+\def\gettwopassdatalist
+ {\getnamedtwopassdatalist\twopassdatalist}
+
+\def\getnamedtwopassdatalist#1#2% \cs tag
+ {\edef#1{\ctxlua{job.twopassdatalist("#2")}}}
+
+\def\doifelseintwopassdata#1#2% tag dat
+ {\ctxlua{job.doifelseintwopassdata("#1","#2"))}}
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/core-two.tex b/Master/texmf-dist/tex/context/base/core-two.tex
index ebe601f19ba..5a845c61462 100644
--- a/Master/texmf-dist/tex/context/base/core-two.tex
+++ b/Master/texmf-dist/tex/context/base/core-two.tex
@@ -79,6 +79,7 @@
\newif\iftwopassdatafound
\let\savetwopassdata \gobblethreearguments
+\let\immediatesavetwopassdata \gobblethreearguments
\let\lazysavetwopassdata \gobblethreearguments
\let\savetaggedtwopassdata \gobblefourarguments
\let\lazysavetaggedtwopassdata\gobblefourarguments
diff --git a/Master/texmf-dist/tex/context/base/core-uti.lua b/Master/texmf-dist/tex/context/base/core-uti.lua
new file mode 100644
index 00000000000..00811e528e1
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/core-uti.lua
@@ -0,0 +1,29 @@
+if not modules then modules = { } end modules ['core-uti'] = {
+ version = 1.001,
+ comment = "companion to core-uti.tex",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+--[[ldx--
+<p>A utility file has always been part of <l n='context'/> and with
+the move to <l n='luatex'/> we also moved a lot of multi-pass info
+to a <l n='lua'/> table. Instead of loading a <l n='tex'/> based
+utility file under different setups, we now load a table once. This
+saves much runtime but at the cost of more memory usage.</p>
+--ldx]]--
+
+if not jobs then jobs = { } end
+if not job then jobs['main'] = { } end job = jobs['main']
+if not job.variables then job.variables = { } end
+
+--[[ldx--
+<p>Variables are saved using in the previously defined table and passed
+onto <l n='tex'/> using the following method. Of course one can also
+directly access the variable using a <l n='lua'/> call.</p>
+--ldx]]--
+
+function job.initializevariable(cs,value)
+ tex.sprint("\\xdef\\"..cs.."{"..value.."}")
+end
diff --git a/Master/texmf-dist/tex/context/base/core-uti.mkii b/Master/texmf-dist/tex/context/base/core-uti.mkii
index decb5ceb197..8d8fc6dcbbd 100644
--- a/Master/texmf-dist/tex/context/base/core-uti.mkii
+++ b/Master/texmf-dist/tex/context/base/core-uti.mkii
@@ -28,8 +28,8 @@
\def\thisisbytesequence#1%
{\ifx\testbytesequence\empty\else
- \convertcommand\testbytesequence\to\testbytesequence
- \convertargument#1\to\ascii
+ \defconvertedcommand\testbytesequence\testbytesequence
+ \defconvertedargument\ascii{#1}%
\ifx\testbytesequence\ascii \else
\writestatus\m!systems{possible problem with 8 bit output}%
\fi
diff --git a/Master/texmf-dist/tex/context/base/core-uti.mkiv b/Master/texmf-dist/tex/context/base/core-uti.mkiv
new file mode 100644
index 00000000000..9b2f35c3002
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/core-uti.mkiv
@@ -0,0 +1,122 @@
+%D \module
+%D [ file=core-uti,
+%D version=2006.09.19,
+%D title=\CONTEXT\ Core Macros,
+%D subtitle=Utility File Handling,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\unprotect
+
+\registerctxluafile{core-uti}{1.001}
+
+%D We need a way to pass strings safely to \LUA\ without the
+%D need for tricky escaping. Compare:
+%D
+%D \starttyping
+%D \ctxlua {something("anything tricky can go here")}
+%D \ctxlua {something([\luastringsep[anything tricky can go here]\luastringsep])}
+%D \stoptyping
+
+\def\luastringsep{===} % this permits \typefile{self} otherwise nested b/e sep problems
+
+\edef\!!bs{[\luastringsep[}
+\edef\!!es{]\luastringsep]}
+
+%D We have a the following available as primitive so there is no need
+%D for it:
+%D
+%D \starttyping
+%D \long\edef\luaescapestring#1{\!!bs#1\!!es}
+%D \stoptyping
+
+%D Next we implement a few helpers:
+
+\newwrite\utility@tua
+
+\prependtoks
+ \def \writeutilitytua {\write\utility@tua}
+ \def\immediatewriteutilitytua{\immediate\write\utility@tua}
+\to \everyjob
+
+\let \writeutilitytua\gobbleoneargument
+\let\immediatewriteutilitytua\gobbleoneargument
+
+\appendtoks
+ \immediate\openout\utility@tua=\jobname.tua
+ \immediatewriteutilitytua{-- file\space\space\space: \jobname}%
+ \immediatewriteutilitytua{-- format\space: \contextformat}%
+ \immediatewriteutilitytua{-- stamp\space\space: \contextversion}%
+ \immediatewriteutilitytua{-- escape\space: \!!bs\space...\space\!!es}%
+ \immediatewriteutilitytua{-- version: \utilityversion}%
+ \immediatewriteutilitytua{}%
+ \immediatewriteutilitytua{-- begin of utility file}%
+ \immediatewriteutilitytua{}%
+% \immediatewriteutilitytua{do}%
+ \immediatewriteutilitytua{if job and job.version and not job.version == "\utilityversion" then return end}%
+ \immediatewriteutilitytua{if not job then job = { } end}%
+ \immediatewriteutilitytua{job.version = "\utilityversion"}%
+ \immediatewriteutilitytua{local ti = table.insert}%
+\to \everyopenutilities
+
+\appendtoks
+% \immediatewriteutilitytua{end}%
+% \immediatewriteutilitytua{}%
+% \immediatewriteutilitytua{-- end of utility file}%
+ %\immediate\closeout\utility@tua
+\to \everycloseutilities
+
+% The next file can be in lua or luc format:
+
+\appendtoks
+ \ctxlua { do
+ if not job then job = { } end
+ job.version = "\utilityversion"
+ local settings = io.loaddata("\jobname.tuc")
+ if settings then
+ % if settings and settings:find("\letterpercent -\letterpercent -\letterpercent s*end of utility file\letterpercent s*$") then
+ settings = loadstring(settings)
+ if settings then
+ settings()
+ else
+ logs.report("utilityfile","invalid, not loaded")
+ end
+ else
+ logs.report("utilityfile","not present")
+ end
+ end}%
+\to \everyjob
+
+% variables
+
+\appendtoks
+ \immediatewriteutilitytua{if not job.variables then job.variables = { } end}%
+\to \everyopenutilities
+
+\def\savecurrentvalue#1#2%
+ {\immediatewriteutilitytua{job.initializevariable("\strippedcsname#1","#2")}}
+
+% temp
+
+\let\thisisbytesequence\gobbleoneargument
+
+% wrong place but we need to have it someplace
+
+\appendtoks
+ \ctxlua{input.storage.dump()}%
+\to \everydump
+
+\appendtoks
+ \ctxlua{input.storage.finalize()}%
+\to \everyfinalizeluacode
+
+\appendtoks
+ \ctxlua{nodes.cleanup_reserved()}%
+\to \everydump
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/core-uti.tex b/Master/texmf-dist/tex/context/base/core-uti.tex
index b630a13502b..b564347c178 100644
--- a/Master/texmf-dist/tex/context/base/core-uti.tex
+++ b/Master/texmf-dist/tex/context/base/core-uti.tex
@@ -66,8 +66,8 @@
\def\thisissectionseparator#1%
{\bgroup
\globallet\checksectionseparator\relax
- \convertcommand \sectionseparator\to\asciia
- \convertargument #1\to\asciib
+ \defconvertedcommand \asciia\sectionseparator
+ \defconvertedargument\asciib{#1}%
\expanded{\gdef\noexpand\dosplitofffoliopart[####1\sectionseparator
\sectionseparator####2\sectionseparator\sectionseparator####3]{####3}}%
\ifx\asciia\asciib
@@ -133,7 +133,7 @@
\to \everyopenutilities
\appendtoks
- \immediate\closeout\utility@tui % niet echt nodig
+% \immediate\closeout\utility@tui % niet echt nodig
\reportutilityproblems
% should be a message :
\let\writeutilitycommand \gobbleoneargument
@@ -189,48 +189,74 @@
\newif\ifdoinpututilities
\newif\ifunprotectutilities % voor't geval er \v!xxxxxx's zijn
-% no longer needed, since texutil is now multi platform
-%
-% \def\utilitycheckmessage
-% {\showmessage\m!systems{12}{}%
-% \globallet\utilitycheckmessage=\relax}
-%
-% \def\saveutilityline#1 #2\txen% tricky maar ok, want achter \command
-% {\if #1c% commands % in \ascii staat een spatie; #1 kan
-% \write\scratchwrite{#2}% % \par in stringvorm zijn (eof)!
-% \else\if#1s% synoniems
-% \utilitycheckmessage
-% \else\if#1r% registers
-% \utilitycheckmessage
-% \fi\fi\fi}
+\def\currentutilityfilename{\jobname}
+
+% \long\def\doutilities#1#2#3#4#5% % introduceren in utility file
+% {\restorecatcodes
+% \resetutilities
+% % more than one utility thing can be handled in one pass,
+% % for instance lists, so we process ##1 as list
+% \def\douticommand##1{\csname\s!set##1\endcsname}%
+% \processcommacommand[#1]\douticommand
+% \begingroup
+% \def\currentutilityfilename{#2}%
+% \notesenabledfalse
+% \doinpututilitiestrue
+% \global\utilitydonefalse
+% \catcode`\\=\@@escape
+% \catcode`\{=\@@begingroup
+% \catcode`\}=\@@endgroup
+% \catcode`\%=\@@comment\relax
+% \pushendofline % geeft problemen zodra andere file wordt ingelezen
+% \ifunprotectutilities % nog nodig ?
+% \unprotect
+% \fi
+% \ifnum\catcode`\@=\@@active \else
+% \catcode`\@=\@@letter % permits expanded commands with \@'s
+% \fi
+% \ifnum\catcode`\!=\@@active \else
+% \catcode`\!=\@@letter % permits multilingual constants
+% \fi
+% #4%
+% \the\everybeforeutilityread
+% \readjobfile{#2.\f!outputextension}\donothing\donothing
+% \the\everyafterutilityread
+% #5%
+% \relax
+% \ifunprotectutilities
+% \protect
+% \fi
+% \popendofline
+% \ifutilitydone\else
+% \doifsomething{#3}
+% {\showmessage\m!systems9{{#3}}%
+% \doifconcepttracing
+% {\blank
+% \type{[\currentmessagetext]}%
+% \blank}}%
+% \fi
+% \endgroup}
+
+% we need to pop and push, else problems with reading
+% utility files (toc) in xml mode and (e.g.) in a toc
+% entry doing a doifmode
%
-% \def\checkutilityfile
-% {\doiflocfileelse{\jobname.\f!outputextension}
-% {}
-% {\doiflocfileelse{\jobname.\f!inputextension}
-% {\bgroup
-% \showmessage\m!systems{11}{}%
-% \openout\scratchwrite\jobname.\f!outputextension
-% \openlocin\scratchread{\jobname.\f!inputextension}%
-% \def\doprocessline%
-% {\ifeof\scratchread
-% \def\doprocessline{\closein\scratchread}%
-% \else
-% \read\scratchread to \ascii
-% \convertcommand\ascii\to\ascii
-% \expandafter\saveutilityline\ascii\txen
-% \fi
-% \doprocessline}%
-% \doprocessline
-% \closeout\scratchwrite
-% \egroup}
-% {}}}
+% the following is not ok because we have no way to signal
+% xml content (yet), so for the moment we use this:
-\def\currentutilityfilename{\jobname}
+\appendtoks
+ \ifprocessingXML
+ \processingXMLfalse
+ \enableXML
+ \catcode`\\=\@@escape
+ \catcode`\{=\@@begingroup
+ \catcode`\}=\@@endgroup
+ \catcode`\%=\@@comment\relax
+ \fi
+\to \everybeforeutilityread
\long\def\doutilities#1#2#3#4#5% % introduceren in utility file
- {\restorecatcodes
- \resetutilities
+ {\resetutilities
% more than one utility thing can be handled in one pass,
% for instance lists, so we process ##1 as list
\def\douticommand##1{\csname\s!set##1\endcsname}%
@@ -240,24 +266,17 @@
\notesenabledfalse
\doinpututilitiestrue
\global\utilitydonefalse
- \catcode`\\=\@@escape
- \catcode`\{=\@@begingroup
- \catcode`\}=\@@endgroup
- \catcode`\%=\@@comment\relax
\pushendofline % geeft problemen zodra andere file wordt ingelezen
+ \pushcatcodetable
+ \setcatcodetable\ctxcatcodes
\ifunprotectutilities % nog nodig ?
\unprotect
\fi
- \ifnum\catcode`\@=\@@active \else
- \catcode`\@=\@@letter % permits expanded commands with \@'s
- \fi
- \ifnum\catcode`\!=\@@active \else
- \catcode`\!=\@@letter % permits multilingual constants
- \fi
#4%
\the\everybeforeutilityread
\readjobfile{#2.\f!outputextension}\donothing\donothing
\the\everyafterutilityread
+ \popcatcodetable
#5%
\relax
\ifunprotectutilities
@@ -269,24 +288,11 @@
{\showmessage\m!systems9{{#3}}%
\doifconcepttracing
{\blank
+ \setmessagetext\m!systems9{{#3}}%
\type{[\currentmessagetext]}%
\blank}}%
\fi
\endgroup}
-
-% Saving the sort vector:
-
-% \def\savesortkeys
-% {\startnointerference
-% \def\flushsortkey##1##2##3##4%
-% {\convertargument{##1}{##2}{##3}{##4}\to\ascii
-% \immediatewriteutility{k {\currentlanguage}{\currentencoding}\ascii}}%
-% \let\definesortkey\flushsortkey
-% \flushsortkeys
-% \globallet\savesortkeys\relax
-% \stopnointerference}
-%
-% \prependtoks \savesortkeys \to \everystarttext
% Default-instellingen (verborgen)
diff --git a/Master/texmf-dist/tex/context/base/core-var.tex b/Master/texmf-dist/tex/context/base/core-var.tex
index 2317d7bf75a..61a8c87e799 100644
--- a/Master/texmf-dist/tex/context/base/core-var.tex
+++ b/Master/texmf-dist/tex/context/base/core-var.tex
@@ -232,7 +232,7 @@
{\docheckforallmodes\donothing\dostopallmodes{#1}}
\long\def\dostartnotallmodes[#1]%
- {\docheckforallmodes\dostopallmodes\donothing{#1}}
+ {\docheckforallmodes\dostopnotallmodes\donothing{#1}}
\let\stopallmodes \donothing
\let\stopnotallmodes\donothing
@@ -264,24 +264,38 @@
%newevery \everybeforeutilitywrite \relax
-\newevery \everycleanupfeatures \relax
-\newevery \everyinsidefloat \relax
-\newevery \everyheadstart \relax
-\newevery \everyendoftextbody \relax
-\newevery \everybeginofpar \relax
-\newevery \everyendofpar \relax
-\newevery \everylistentry \relax
-\newevery \everymarking \relax
-\newevery \everysavesortkeys \relax
-
-\newevery \everyfont \relax
-\newevery \everybodyfont \EveryBodyFont
-\newevery \everyfontswitch \EveryFontSwitch
-\newevery \everydefinedfont \relax
+\newevery \everycleanupfeatures \relax
+\newevery \everyinsidefloat \relax
+\newevery \everyheadstart \relax
+\newevery \everyendoftextbody \relax
+\newevery \everybeginofpar \relax
+\newevery \everyendofpar \relax
+\newevery \everylistentry \relax
+\newevery \everymarking \relax
+\newevery \everysavesortkeys \relax
+
+\newevery \everyfont \relax
+\newevery \everybodyfont \EveryBodyFont
+\newevery \everyglobalbodyfont \relax
+\newevery \everyfontswitch \EveryFontSwitch
+\newevery \everydefinedfont \relax
+
+\newevery \everybeforeoutput \relax
+\newevery \everyafteroutput \relax
+
+\newevery \everybeforedisplayformula \relax
\def\cleanupfeatures{\the\everycleanupfeatures}
\def\forgetall {\the\everyforgetall}
+%D State mess:
+
+\newtoks \everypushsomestate
+\newtoks \everypopsomestate
+
+\def\pushsomestates{\the\everypushsomestate}
+\def\popsomestates {\the\everypopsomestate }
+
%D For shared \type {\everymath} and \type {\everydisplay}:
\newevery \everymathematics \relax
@@ -366,6 +380,8 @@
%D This boolean can be used to bypass certain
%D initializations.
+\ifx\protectionlevel\undefined \newcount\protectionlevel \fi
+
\newif\ifproductionrun \appendtoks \productionruntrue \to \everydump
\appendtoks \ifcase\protectionlevel\else\reportunprotection\fi \to \everydump
@@ -443,12 +459,43 @@
\def\globalsetvariables % obsolete
{\dotripleargument\dosetvariables[\globalgetrawparameters]}
-\long\def\dosetvariables[#1][#2][#3]%
+% \long\def\dosetvariables[#1][#2][#3]%
+% {\errorisfataltrue
+% \def\currentvariableclass{#2}%
+% \getvariable{#2}\s!reset
+% #1[\??vars:#2:][#3]%
+% \getvariable{#2}\s!set
+% \errorisfatalfalse}
+%
+% permit nested definitions while preventing nested set/reset
+%
+% wrong:
+%
+% \long\def\dosetvariables[#1][#2][#3]%
+% {\errorisfataltrue
+% \getrawparameters[\??vars:*:][\s!reset=*,\s!set=*,#3]%
+% \doifelse{\getvalue{\??vars:*:\s!reset}\getvalue{\??vars:*:\s!set}}{**}
+% {\doifelse{#2}\currentvariableclass
+% {#1[\??vars:#2:][#3]}
+% {\pushmacro\currentvariableclass
+% \def\currentvariableclass{#2}%
+% \getvariable{#2}\s!reset
+% #1[\??vars:#2:][#3]%
+% \getvariable{#2}\s!set
+% \popmacro\currentvariableclass}}%
+% {#1[\??vars:#2:][#3]}%
+% \errorisfatalfalse}
+
+\long\def\dosetvariables[#1][#2][#3]% tricky, test on s-pre-60
{\errorisfataltrue
- \def\currentvariableclass{#2}%
- \getvariable{#2}\s!reset
- #1[\??vars:#2:][#3]%
- \getvariable{#2}\s!set
+ \doifelse{#2}\currentvariableclass
+ {#1[\??vars:#2:][#3]}%
+ {\pushmacro\currentvariableclass
+ \def\currentvariableclass{#2}%
+ \getvariable{#2}\s!reset
+ #1[\??vars:#2:][#3]%
+ \getvariable{#2}\s!set
+ \popmacro\currentvariableclass}%
\errorisfatalfalse}
\long\def\setvariable #1#2#3{\long\setvalue {\??vars:#1:#2}{#3}}
diff --git a/Master/texmf-dist/tex/context/base/core-ver.mkii b/Master/texmf-dist/tex/context/base/core-ver.mkii
index 374b9a0636b..4e51c934c0c 100644
--- a/Master/texmf-dist/tex/context/base/core-ver.mkii
+++ b/Master/texmf-dist/tex/context/base/core-ver.mkii
@@ -54,7 +54,7 @@
\def\mktype#1% was \dotype
{\bgroup
\resumecoloraftergroup % a problem is that we can still be in color mode, tricky hack
- \strut % new, enables leading space in \type { abc } at par start
+ \begstrut % new, enables leading space in \type { abc } at par start / begstrut else no hyphenation
\let\currenttypingclass\??ty
\edef\currenttyping{#1}%
\catcode`\<=\@@other
@@ -139,7 +139,7 @@
\def\redotypeAB
{\egroup
- \expandafter\convertargument\the\globalscratchtoks\to\ascii
+ \expandafter\defconvertedargument\expandafter\ascii\expandafter{\the\globalscratchtoks}% == \edefconvertedargument\ascii{\the\globalscratchtoks}%
\ifx\scantokens\undefined\ascii\else\everyeof{\hskip-\spaceskip}\scantokens\expandafter{\ascii}\fi
\egroup}
diff --git a/Master/texmf-dist/tex/context/base/core-ver.mkiv b/Master/texmf-dist/tex/context/base/core-ver.mkiv
new file mode 100644
index 00000000000..701d19b41e4
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/core-ver.mkiv
@@ -0,0 +1,208 @@
+%D \module
+%D [ file=core-ver,
+%D version=2000.10.13,
+%D title=\CONTEXT\ Core Macros,
+%D subtitle=Verbatim,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\unprotect
+
+\def\mksetupprettiesintype
+ {\begingroup
+ \lowercasestring verb-\prettyidentifier\to\filename
+ \doonlyonce\filename{\ctxluafileload\filename\empty}%
+ \endgroup}
+
+% todo: obeytabs|spaces|lines|pages
+
+\def\mksetupprettytype % todo check
+ {\processingverbatimtrue % will move
+ \ctxlua{buffers.doifelsevisualizer("\prettyidentifier")}
+ {\ctxlua{buffers.setvisualizer("\prettyidentifier")}%
+ \localcolortrue % tricky, maybe not here
+ \def\obs{\obeyedspace}%
+ \def\bop{\bgroup\beginofpretty}%
+ \def\eop{\endofpretty\egroup}%
+ \def\sop{\endofpretty\egroup\bgroup\beginofpretty}}
+ {\def\obs{\obeyedspace}}}
+
+\def\mkinitializeverbatim
+ {\ctxlua{buffers.visualizers.reset()}%
+ \def\obs{\obeyedspace}%
+ \verbatimfont
+ \resetfontfeature
+ \obeycharacters}
+
+% \ctxluafileload{verb-tex}{}
+% \ctxluafileload{verb-mp} {}
+
+% \registerctxluafile{core-buf-tex}{}
+% \registerctxluafile{core-buf-mp} {}
+
+% \def\mktype#1%
+% {\bgroup
+% \begstrut % new, enables leading space in \type { abc } at par start
+% \let\currenttypingclass\??ty
+% \edef\currenttyping{#1}%
+% \initializetype % probably too much
+% \verbatimcolor
+% \setcatcodetable \vrbcatcodes
+% \catcode`\{=\plusone
+% \catcode`\}=\plustwo
+% \dodotype}
+
+% \def\dodotype#1%
+% {\obeycharacters % everyinitializeverbatim
+% \ctxlua{buffers.hooks.flush_line(\!!bs\detokenize{#1}\!!es)}%
+% \egroup}
+
+\let\mksetupslantedtype \relax
+
+\def\mksetupcommandsintype% can also be \string\
+ {\ctxlua{
+ buffers.visualizers.enableescape = true
+ buffers.visualizers.escapetoken = \!!bs\typingparameter\c!escape\!!es
+ }%
+ \setevalue{\typingparameter\c!escape}{\typingparameter\c!escape}}
+
+\def\mktype#1% was \dotype
+ {\bgroup
+ \begstrut % new, enables leading space in \type { abc } at par start / begstrut else no hyphenation
+ \let\currenttypingclass\??ty
+ \edef\currenttyping{#1}%
+ \catcode`\<=\@@other
+ \catcode`\>=\@@other
+ \futurelet\next\dodotype}
+
+\def\dodotype
+ {\ifx\next\bgroup
+ \@EA\dodotypeA
+ \else\if\next<%
+ \doifelse{\typingparameter\c!option}\v!none
+ {\@EAEAEA\dodotypeB}{\@EAEAEA\dodotypeC}%
+ \else
+ \@EAEAEA\dodotypeD
+ \fi\fi}
+
+\def\dodotypeA
+ {\initializetype % probably too much
+ \verbatimcolor
+ \setcatcodetable \vrbcatcodes
+ \catcode`\{=\plusone
+ \catcode`\}=\plustwo
+ \dodotypeAA}
+
+\def\dodotypeAA#1%
+ {\mkinitializeverbatim
+\def\obs{\obeyedspace}%
+ \ctxlua{buffers.hooks.flush_line(\!!bs\detokenize{#1}\!!es)}%
+ \egroup}
+
+\def\dodotypeB#1%
+ {\initializetype
+ \verbatimcolor
+ \setcatcodetable \vrbcatcodes
+ \catcode`\<=\plusone
+ \catcode`\>=\plustwo
+ \dodotypeBB}
+
+\def\dodotypeBB#1%
+ {\mkinitializeverbatim
+ \ctxlua{buffers.visualizers.flush_nested(\!!bs\detokenize{#1}\!!es,false)}%
+ \egroup
+ \gobbleoneargument} % grab last >
+
+\def\dodotypeC#1%
+ {\initializetype
+ \verbatimcolor
+ \setcatcodetable \vrbcatcodes
+ \catcode`\<=\plusone
+ \catcode`\>=\plustwo
+ \dodotypeCC}
+
+\def\dodotypeCC#1%
+ {\mkinitializeverbatim
+ \ifx\obeycharacters\setupprettytype % temp hack, we need a proper signal
+ \ctxlua{buffers.hooks.flush_line([\!!bs\detokenize{#1}\!!es,true)}%
+ \else
+ \def\obs{\obeyedspace}%
+ \ctxlua{buffers.visualizers.flush_nested(\!!bs\detokenize{#1}\!!es,true)}%
+ \fi
+ \egroup
+ \gobbleoneargument} % grab last >
+
+\def\dodotypeD#1%
+ {\initializetype
+ \verbatimcolor
+ \setcatcodetable \vrbcatcodes
+ \def\dodotypeDD##1#1{\dodotypeAA{##1}}%
+ \dodotypeDD}
+
+\def\dodotypeDD#1%
+ {\mkinitializeverbatim
+ \ctxlua{buffers.hooks.flush_line(\!!bs\detokenize{#1}\!!es,true)}%
+ \egroup
+ \gobbleoneargument} % grab last >
+
+% \typing:
+
+\def\mktypeblockverbatim#1#2%
+ {\dowithbuffer{_typing_}{#1}{#2}
+ {}
+ {\mkinitializeverbatim
+ \beginofverbatimlines
+ \ctxlua{buffers.type("_typing_")}%
+ \endofverbatimlines
+ \getvalue{\strippedcsname#2}}}
+
+% \typefile:
+
+\def\mktypefileverbatim
+ {\mkinitializeverbatim
+ \ctxlua{buffers.typefile("\readfilename")}}
+
+\def\mktypefilelinesverbatim#1#2%
+ {#1%
+ \mkinitializeverbatim
+ \ctxlua{buffers.typefile("\readfilename")}%
+ #2}
+
+% patched from verb-ini (todo)
+
+\let\beginverbatimline \relax
+\let\endverbatimline \relax
+\let\doopenupverbatimline\empty
+
+\def\doverbatimbeginofline#1% linenumber
+ {\bgroup % due to pretty status
+ \iflinepar\else\EveryPar{}\fi
+ \noindent % was wrong: \dontleavehmode
+ \xdef\dokeepverbatimlinedata % hm, still needed?
+ {\parindent \the\parindent
+ \hangindent\the\hangindent
+ \hangafter \the\hangafter
+ \leftskip \the\leftskip
+ \rightskip \the\rightskip}%
+ \egroup
+ \dokeepverbatimlinedata
+ \doopenupverbatimline
+ \the\everyline\strut
+ \beginverbatimline}
+
+\def\doverbatimendofline
+ {\endverbatimline
+ \global\lineparfalse
+ \obeyedline\par}
+
+\def\doverbatimemptyline
+ {\strut
+ \par
+ \global\linepartrue}
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/core-ver.tex b/Master/texmf-dist/tex/context/base/core-ver.tex
index 8623dffef51..93fa96944c4 100644
--- a/Master/texmf-dist/tex/context/base/core-ver.tex
+++ b/Master/texmf-dist/tex/context/base/core-ver.tex
@@ -293,7 +293,7 @@
\def\obeyhyphens
{\def\obeyedspace {\hskip\interwordspace}% better than spaceskip
- \def\controlspace{\hskip\zeropoint\hbox{\char32}\hskip\zeropoint}%
+ \def\controlspace{\hskip\zeropoint\hbox{\normalcontrolspace}\hskip\zeropoint}%
\spaceskip.25em\relax} % hm a bit of stretch !
\def\obeybreakpoints
@@ -302,7 +302,7 @@
\def\ignorehyphens
{\def\obeyedspace {\null\hskip\interwordspace\null}% better than spaceskip
- \def\controlspace{\null\hskip\zeropoint\hbox{\char32}\hskip\zeropoint\null}%
+ \def\controlspace{\null\hskip\zeropoint\hbox{\normalcontrolspace}\hskip\zeropoint\null}%
\spaceskip.5em\relax}
\unexpanded\def\typ
@@ -558,18 +558,32 @@
%D Since we support a global color too, the folowing
%D definition is better:
-\def\setupverbatimcolor% fast and local versus slow and global
- {\doifelsenothing{\typingparameter\c!color}
- {\def\beginofpretty[##1]{\startcolormode{\prettypalet:##1}}%
- \let\endofpretty \restorecolormode % \stopcolormode
- \let\startverbatimcolor \relax
- \let\stopverbatimcolor \relax
- \let\verbatimcolor \relax}
- {\def\beginofpretty[##1]{\startcolor[\prettypalet:##1]}%
- \let\endofpretty \stopcolor
- \def\startverbatimcolor{\startcolor[\typingparameter\c!color]}%
- \let\stopverbatimcolor \stopcolor
- \def\verbatimcolor {\getvalue{\typingparameter\c!color}}}% command !
+% \def\setupverbatimcolor% fast and local versus slow and global
+% {\doifelsenothing{\typingparameter\c!color}
+% {\def\beginofpretty[##1]{\startcolormode{\prettypalet:##1}}%
+% \let\endofpretty \restorecolormode % \stopcolormode
+% \let\startverbatimcolor \relax
+% \let\stopverbatimcolor \relax
+% \let\verbatimcolor \relax}
+% {\def\beginofpretty[##1]{\startcolor[\prettypalet:##1]}%
+% \let\endofpretty \stopcolor
+% \def\startverbatimcolor{\startcolor[\typingparameter\c!color]}%
+% \let\stopverbatimcolor \stopcolor
+% \def\verbatimcolor {\getvalue{\typingparameter\c!color}}}% command !
+% \doifelsenothing{\typingparameter\c!palet}
+% {\let\prettypalet\empty
+% \let\endofpretty\relax
+% \def\beginofpretty[##1]{}}
+% {\edef\prettypalet{\prettyidentifier\typingparameter\c!palet}}}
+%
+% let's forget about this optimization not that we have mkiv
+
+\def\setupverbatimcolor
+ {\def\beginofpretty[##1]{\startcolor[\prettypalet:##1]}%
+ \let\endofpretty \stopcolor
+ \def\startverbatimcolor{\startcolor[\typingparameter\c!color]}%
+ \let\stopverbatimcolor \stopcolor
+ \def\verbatimcolor {\getvalue{\typingparameter\c!color}}% command !
\doifelsenothing{\typingparameter\c!palet}
{\let\prettypalet\empty
\let\endofpretty\relax
@@ -747,7 +761,7 @@
\def\reporttypingerror#1% temp hack
{\blank
\dontleavehmode\hbox\bgroup
- \expanded{\convertargument#1}\to\ascii
+ \expanded{\defconvertedargument\noexpand\ascii{#1}}%
\tttf[\makemessage\m!verbatims1\ascii]%
\showmessage\m!verbatims1\ascii
\egroup
@@ -812,7 +826,7 @@
%D
%D The definition is not that spectacular.
-\unexpanded\def\filename#1{{\tttf\hyphenatedfile{#1}}}
+\unexpanded\def\filename#1{{\tttf\hyphenatedfilename{#1}}}
%D This leaves some settings:
@@ -821,7 +835,7 @@
%D And a bonus macro:
-\def\verbatim#1{\convertargument#1\to\ascii\ascii}
+\def\verbatim#1{\defconvertedargument\ascii{#1}\ascii}
%D Plugins
diff --git a/Master/texmf-dist/tex/context/base/enco-032.tex b/Master/texmf-dist/tex/context/base/enco-032.tex
index 5c8f5fe68ee..d7e15126c94 100644
--- a/Master/texmf-dist/tex/context/base/enco-032.tex
+++ b/Master/texmf-dist/tex/context/base/enco-032.tex
@@ -79,4 +79,4 @@
\stopencoding
-\endinput
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/enco-agr.tex b/Master/texmf-dist/tex/context/base/enco-agr.tex
index c50f97e518a..cfd86dfd344 100644
--- a/Master/texmf-dist/tex/context/base/enco-agr.tex
+++ b/Master/texmf-dist/tex/context/base/enco-agr.tex
@@ -31,8 +31,6 @@
\definecharacter textbraceright 9
\definecharacter textbreve 10
-\definecharacter textdoublebracketleft 11
-\definecharacter textdoublebracketright 12
\definecharacter greekSigmalunate 13
\definecharacter greekIotadialytika 14
\definecharacter greekUpsilondialytika 15
@@ -47,8 +45,6 @@
\definecharacter greekupsilondialytikaperispomeni 25
\definecharacter greekdialytikaperispomeni 26
-\definecharacter textbottomdotsmall 31
-
\definecharacter textbottomdot 33
\definecharacter greeksampi 34
\definecharacter greekdigamma 35
@@ -59,15 +55,13 @@
\definecharacter textdag 43
-\definecharacter oxia 47
-
-\definecharacter greekanoteleia 59
-\definecharacter dasia 60
-
-\definecharacter psili 62
+\definecharacter greekoxia 47
-% Question, etc., look out of sync with Oxonia, however
+\definecharacter greekanoteleia 59
+\definecharacter greekdasia 60
+\definecharacter greekpsili 62
+\definecharacter greekquestionmark 63
\definecharacter dialytika 64
\definecharacter greekAlpha 65
\definecharacter greekBeta 66
@@ -98,7 +92,7 @@
\definecharacter bracketleft 91
\definecharacter greekvaria 92
\definecharacter bracketright 93
-\definecharacter perispomeni 94
+\definecharacter greekperispomeni 94
\definecharacter guilsingleleft 96
@@ -132,7 +126,7 @@
\definecharacter floorleft 123
\definecharacter textbar 124
\definecharacter floorright 125
-\definecharacter perispomeni 126
+\definecharacter greekperispomeni 126
\definecharacter quotedblleft 128
\definecharacter quotedblright 129
@@ -265,96 +259,96 @@
\startencoding[default]
-\definecharacter greekAlphapsili {\psili \greekAlpha}
-\definecharacter greekAlphadasia {\dasia \greekAlpha}
+\definecharacter greekAlphapsili {\greekpsili \greekAlpha}
+\definecharacter greekAlphadasia {\greekdasia \greekAlpha}
\definecharacter greekAlphapsilivaria {\greekpsilivaria \greekAlpha}
\definecharacter greekAlphadasiavaria {\greekdasiavaria \greekAlpha}
\definecharacter greekAlphapsilitonos {\greekpsilitonos \greekAlpha}
\definecharacter greekAlphadasiatonos {\greekdasiatonos \greekAlpha}
\definecharacter greekAlphapsiliperispomeni {\greekpsiliperispomeni \greekAlpha}
\definecharacter greekAlphadasiaperispomeni {\greekdasiaperispomeni \greekAlpha}
-\definecharacter greekEpsilonpsili {\psili \greekEpsilon}
-\definecharacter greekEpsilondasia {\dasia \greekEpsilon}
+\definecharacter greekEpsilonpsili {\greekpsili \greekEpsilon}
+\definecharacter greekEpsilondasia {\greekdasia \greekEpsilon}
\definecharacter greekEpsilonpsilivaria {\greekpsilivaria \greekEpsilon}
\definecharacter greekEpsilondasiavaria {\greekdasiavaria \greekEpsilon}
\definecharacter greekEpsilonpsilitonos {\greekpsilitonos \greekEpsilon}
\definecharacter greekEpsilondasiatonos {\greekdasiatonos \greekEpsilon}
-\definecharacter greekEtapsili {\psili \greekEta}
-\definecharacter greekEtadasia {\dasia \greekEta}
+\definecharacter greekEtapsili {\greekpsili \greekEta}
+\definecharacter greekEtadasia {\greekdasia \greekEta}
\definecharacter greekEtapsilivaria {\greekpsilivaria \greekEta}
\definecharacter greekEtadasiavaria {\greekdasiavaria \greekEta}
\definecharacter greekEtapsilitonos {\greekpsilitonos \greekEta}
\definecharacter greekEtadasiatonos {\greekdasiatonos \greekEta}
\definecharacter greekEtapsiliperispomeni {\greekpsiliperispomeni \greekEta}
\definecharacter greekEtadasiaperispomeni {\greekdasiaperispomeni \greekEta}
-\definecharacter greekIotapsili {\psili \greekIota}
-\definecharacter greekIotadasia {\dasia \greekIota}
+\definecharacter greekIotapsili {\greekpsili \greekIota}
+\definecharacter greekIotadasia {\greekdasia \greekIota}
\definecharacter greekIotapsilivaria {\greekpsilivaria \greekIota}
\definecharacter greekIotadasiavaria {\greekdasiavaria \greekIota}
\definecharacter greekIotapsilitonos {\greekpsilitonos \greekIota}
\definecharacter greekIotadasiatonos {\greekdasiatonos \greekIota}
\definecharacter greekIotapsiliperispomeni {\greekpsiliperispomeni \greekIota}
\definecharacter greekIotadasiaperispomeni {\greekdasiaperispomeni \greekIota}
-\definecharacter greekOmicronpsili {\psili \greekOmicron}
-\definecharacter greekOmicrondasia {\dasia \greekOmicron}
+\definecharacter greekOmicronpsili {\greekpsili \greekOmicron}
+\definecharacter greekOmicrondasia {\greekdasia \greekOmicron}
\definecharacter greekOmicronpsilivaria {\greekpsilivaria \greekOmicron}
\definecharacter greekOmicrondasiavaria {\greekdasiavaria \greekOmicron}
\definecharacter greekOmicronpsilitonos {\greekpsilitonos \greekOmicron}
\definecharacter greekOmicrondasiatonos {\greekdasiatonos \greekOmicron}
-\definecharacter greekUpsilondasia {\dasia \greekUpsilon}
+\definecharacter greekUpsilondasia {\greekdasia \greekUpsilon}
\definecharacter greekUpsilondasiavaria {\greekdasiavaria \greekUpsilon}
\definecharacter greekUpsilondasiatonos {\greekdasiatonos \greekUpsilon}
\definecharacter greekUpsilondasiaperispomeni {\greekdasiaperispomeni \greekUpsilon}
-\definecharacter greekOmegapsili {\psili \greekOmega}
-\definecharacter greekOmegadasia {\dasia \greekOmega}
+\definecharacter greekOmegapsili {\greekpsili \greekOmega}
+\definecharacter greekOmegadasia {\greekdasia \greekOmega}
\definecharacter greekOmegapsilivaria {\greekpsilivaria \greekOmega}
\definecharacter greekOmegadasiavaria {\greekdasiavaria \greekOmega}
\definecharacter greekOmegapsilitonos {\greekpsilitonos \greekOmega}
\definecharacter greekOmegadasiatonos {\greekdasiatonos \greekOmega}
\definecharacter greekOmegapsiliperispomeni {\greekpsiliperispomeni \greekOmega}
\definecharacter greekOmegadasiaperispomeni {\greekdasiaperispomeni \greekOmega}
-\definecharacter greekAlphaiotasubpsili {\psili \greekAlpha \greekiota}
-\definecharacter greekAlphaiotasubdasia {\dasia \greekAlpha \greekiota}
+\definecharacter greekAlphaiotasubpsili {\greekpsili \greekAlpha \greekiota}
+\definecharacter greekAlphaiotasubdasia {\greekdasia \greekAlpha \greekiota}
\definecharacter greekAlphaiotasubpsilivaria {\greekpsilivaria \greekAlpha \greekiota}
-\definecharacter greekAlphaiotasubdasiavaria {\greeldasiavaria \greekAlpha \greekiota}
+\definecharacter greekAlphaiotasubdasiavaria {\greekdasiavaria \greekAlpha \greekiota}
\definecharacter greekAlphaiotasubpsilitonos {\greekpsilitonos \greekAlpha \greekiota}
\definecharacter greekAlphaiotasubdasiatonos {\greekdasiatonos \greekAlpha \greekiota}
\definecharacter greekAlphaiotasubpsiliperispomeni {\greekpsiliperispomeni \greekAlpha \greekiota}
\definecharacter greekAlphaiotasubdasiaperispomeni {\greekdasiaperispomeni \greekAlpha \greekiota}
-\definecharacter greekEtaiotasubpsili {\psili \greekEta \greekiota}
-\definecharacter greekEtaiotasubdasia {\dasia \greekEta \greekiota}
+\definecharacter greekEtaiotasubpsili {\greekpsili \greekEta \greekiota}
+\definecharacter greekEtaiotasubdasia {\greekdasia \greekEta \greekiota}
\definecharacter greekEtaiotasubpsilivaria {\greekpsilivaria \greekEta \greekiota}
\definecharacter greekEtaiotasubdasiavaria {\greekdasiavaria \greekEta \greekiota}
\definecharacter greekEtaiotasubpsilitonos {\greekpsilitonos \greekEta \greekiota}
\definecharacter greekEtaiotasubdasiatonos {\greekdasiatonos \greekEta \greekiota}
\definecharacter greekEtaiotasubpsiliperispomeni {\greekpsiliperispomeni \greekEta \greekiota}
\definecharacter greekEtaiotasubdasiaperispomeni {\greekdasiaperispomeni \greekEta \greekiota}
-\definecharacter greekOmegaiotasubpsili {\psili \greekOmega \greekiota}
-\definecharacter greekOmegaiotasubdasia {\dasia \greekOmega \greekiota}
+\definecharacter greekOmegaiotasubpsili {\greekpsili \greekOmega \greekiota}
+\definecharacter greekOmegaiotasubdasia {\greekdasia \greekOmega \greekiota}
\definecharacter greekOmegaiotasubpsilivaria {\greekpsilivaria \greekOmega \greekiota}
\definecharacter greekOmegaiotasubdasiavaria {\greekdasiavaria \greekOmega \greekiota}
\definecharacter greekOmegaiotasubpsilitonos {\greekpsilitonos \greekOmega \greekiota}
\definecharacter greekOmegaiotasubdasiatonos {\greekdasiatonos \greekOmega \greekiota}
\definecharacter greekOmegaiotasubpsiliperispomeni {\greekpsiliperispomeni \greekOmega \greekiota}
\definecharacter greekOmegaiotasubdasiaperispomeni {\greekdasiaperispomeni \greekOmega \greekiota}
-\definecharacter greekAlphavaria {\varia \greekAlpha}
-\definecharacter greekAlphaoxia {\oxia \greekAlpha}
+\definecharacter greekAlphavaria {\greekvaria \greekAlpha}
+\definecharacter greekAlphaoxia {\greekoxia \greekAlpha}
\definecharacter greekAlphaiotasub {\greekAlpha \greekiota}
-\definecharacter greekEpsilonvaria {\varia \greekEpsilon}
-\definecharacter greekEpsilonoxia {\oxia \greekEpsilon}
-\definecharacter greekEtavaria {\varia \greekEta}
-\definecharacter greekEtaoxia {\oxia \greekEta}
+\definecharacter greekEpsilonvaria {\greekvaria \greekEpsilon}
+\definecharacter greekEpsilonoxia {\greekoxia \greekEpsilon}
+\definecharacter greekEtavaria {\greekvaria \greekEta}
+\definecharacter greekEtaoxia {\greekoxia \greekEta}
\definecharacter greekEtaiotasub {\greekEta \greekiota}
-\definecharacter greekIotavaria {\varia \greekIota}
-\definecharacter greekIotaoxia {\oxia \greekIota}
-\definecharacter greekUpsilonvaria {\varia \greekUpsilon}
-\definecharacter greekUpsilonoxia {\oxia \greekUpsilon}
-\definecharacter greekOmicronvaria {\varia \greekOmicron}
-\definecharacter greekOmicronoxia {\oxia \greekOmicron}
-\definecharacter greekOmegavaria {\varia \greekOmega}
-\definecharacter greekOmegaoxia {\oxia \greekOmega}
+\definecharacter greekIotavaria {\greekvaria \greekIota}
+\definecharacter greekIotaoxia {\greekoxia \greekIota}
+\definecharacter greekUpsilonvaria {\greekvaria \greekUpsilon}
+\definecharacter greekUpsilonoxia {\greekoxia \greekUpsilon}
+\definecharacter greekOmicronvaria {\greekvaria \greekOmicron}
+\definecharacter greekOmicronoxia {\greekoxia \greekOmicron}
+\definecharacter greekOmegavaria {\greekvaria \greekOmega}
+\definecharacter greekOmegaoxia {\greekoxia \greekOmega}
\definecharacter greekOmegaiotasub {\greekOmega \greekiota}
-\definecharacter greekRhodasia {\dasia \greekRho}
+\definecharacter greekRhodasia {\greekdasia \greekRho}
\definecharacter digamma {\greekdigamma}
\definecharacter sampi {\greeksampi}
\definecharacter stigma {\greekstigma}
diff --git a/Master/texmf-dist/tex/context/base/enco-cyr.tex b/Master/texmf-dist/tex/context/base/enco-cyr.tex
index 95ab4223157..0ac82207ff4 100644
--- a/Master/texmf-dist/tex/context/base/enco-cyr.tex
+++ b/Master/texmf-dist/tex/context/base/enco-cyr.tex
@@ -70,7 +70,7 @@
\stopmapping
-\startcoding[t2a]
+\startencoding[t2a]
\definecharacter textgrave 0
\definecharacter textacute 1
@@ -256,7 +256,7 @@
% \definecharacter textperthousand {\%\char 24 }
% \definecharacter textpertenthousand {\%\char 24\char 24 }
-\stopcoding
+\stopencoding
\startmapping[t2b]
@@ -276,7 +276,7 @@
\stopmapping
-\startcoding[t2b]
+\startencoding[t2b]
\definecharacter textgrave 0
\definecharacter textacute 1
@@ -461,7 +461,7 @@
\definecharacter cyrillicW 87
\definecharacter cyrillicw 119
-\stopcoding
+\stopencoding
\startmapping[t2c]
@@ -481,7 +481,7 @@
\stopmapping
-\startcoding[t2c]
+\startencoding[t2c]
\definecharacter textgrave 0
\definecharacter textacute 1
@@ -666,7 +666,7 @@
\definecharacter cyrillicW 87
\definecharacter cyrillicw 119
-\stopcoding
+\stopencoding
\startmapping[x2]
@@ -686,7 +686,7 @@
\stopmapping
-\startcoding[x2]
+\startencoding[x2]
\definecharacter textgrave 0
\definecharacter textacute 1
@@ -921,7 +921,7 @@
\definecharacter cyrillicDELTA 30
\definecharacter cyrillicdelta 31
-\stopcoding
+\stopencoding
\startmapping[lcy]
@@ -942,7 +942,7 @@
\stopmapping
-\startcoding[lcy]
+\startencoding[lcy]
%D Characters 0 to 127 are as in normal cmr slots
@@ -1030,6 +1030,6 @@
\definecharacter rightguillemot 254
\definecharacter quotedblbase 255
-\stopcoding
+\stopencoding
\endinput
diff --git a/Master/texmf-dist/tex/context/base/enco-def.tex b/Master/texmf-dist/tex/context/base/enco-def.tex
index c111b6c441a..5d0dd51dfba 100644
--- a/Master/texmf-dist/tex/context/base/enco-def.tex
+++ b/Master/texmf-dist/tex/context/base/enco-def.tex
@@ -101,7 +101,7 @@
\definecharacter perthousand {\fakeperthousand}
\definecharacter softhyphen 45
-\definecharacter periodcentered {\mathematics\cdot}
+\definecharacter periodcentered {\hbox{\mathematics\cdot}}
\definecharacter compoundwordmark 23
\definecharacter textasciicircum 94
@@ -895,4 +895,20 @@
\stopencoding
+%D Goodie (makes more sense):
+
+\def\normalcontrolspace
+ {\getglyph{ComputerModernMono}{\char32}}
+
+\def\fakedcontrolspace % can be virtual in luatex
+ {\dontleavehmode\hbox
+ {\scratchdimen.1ex%
+ \kern\scratchdimen
+ \vrule \!!width\scratchdimen \!!height5.5\scratchdimen \!!depth3\scratchdimen
+ \vrule \!!width\dimexpr.5em-4\scratchdimen\relax \!!height-2\scratchdimen \!!depth3\scratchdimen
+ \vrule \!!width\scratchdimen \!!height5.5\scratchdimen \!!depth3\scratchdimen
+ \kern\scratchdimen}}
+
+\def\fakecontrolspace{\let\normalcontrolspace\fakedcontrolspace}
+
\endinput
diff --git a/Master/texmf-dist/tex/context/base/enco-ini.mkii b/Master/texmf-dist/tex/context/base/enco-ini.mkii
new file mode 100644
index 00000000000..d39a64fca41
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/enco-ini.mkii
@@ -0,0 +1,34 @@
+%D \module
+%D [ file=enco-ini,
+%D version=2007.02.19,
+%D title=\CONTEXT\ Encoding Macros,
+%D subtitle=Initialization,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright=\PRAGMA]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D In the end we will cleanup enco-ini.tex!
+
+\unprotect
+
+\beginOLDTEX
+
+ \useencoding[ans,il2,ec,tbo,pdf,pol,qx,t5,cyr,agr] % pol and il2 will go away, not needed in mkiv, uc removed
+
+ \useencoding[032,033,037] % fallbacks for some unicode chars
+
+ \setupencoding[\s!default=ec] % was: [\s!default=\s!default]
+
+\endOLDTEX
+
+\beginXETEX
+
+ \setupencoding[\s!default=\s!default]
+
+\endXETEX
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/enco-ini.mkiv b/Master/texmf-dist/tex/context/base/enco-ini.mkiv
new file mode 100644
index 00000000000..cf29b0323d8
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/enco-ini.mkiv
@@ -0,0 +1,94 @@
+%D \module
+%D [ file=enco-ini,
+%D version=2007.02.19,
+%D title=\CONTEXT\ Encoding Macros,
+%D subtitle=Initialization,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright=\PRAGMA]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D In the end we will cleanup enco-ini.tex!
+
+% could also be a new kind of table \definecharacter {name} {char} {fallback}
+
+\startruntimectxluacode
+ characters.context.rehash()
+\stopruntimectxluacode
+
+\ctxlua{characters.context.define()}
+
+\startextendcatcodetable\ctxcatcodes \ctxlua{characters.context.activate()}\stopextendcatcodetable
+\startextendcatcodetable\xmlcatcodesn\ctxlua{characters.context.activate()}\stopextendcatcodetable
+\startextendcatcodetable\xmlcatcodese\ctxlua{characters.context.activate()}\stopextendcatcodetable
+\startextendcatcodetable\xmlcatcodesr\ctxlua{characters.context.activate()}\stopextendcatcodetable
+
+% [[[\utfchar{8194}]]][[[\utfchar{8195}]]] \par
+% $[[[\utfchar{8194}]]][[[\utfchar{8195}]]]$\par
+% {\setcatcodetable\ctxcatcodes [[[\utfchar{8194}]]][[[\utfchar{8195}]]]}\par
+% {\setcatcodetable\texcatcodes [[[\utfchar{8194}]]][[[\utfchar{8195}]]]}\par
+% {\setcatcodetable\prtcatcodes [[[\utfchar{8194}]]][[[\utfchar{8195}]]]}\par
+% \startXMLdata
+% <oeps>((( )))</oeps>
+% \stopXMLdata
+% $\alpha\char945 \utfchar{945} abc 123$
+
+\unprotect
+
+\newbox\accenttestbox
+
+\unexpanded\def\dobuildtextaccent#1#2%
+ {\begingroup
+ \global\setbox\accenttestbox\hbox{#1}%
+ \scratchcounter\ctxlua{characters.charcode(\number\accenttestbox)}%
+ \ifcase\scratchcounter\else\accent\scratchcounter\fi
+ \relax#2%
+ \endgroup}
+
+\useencoding[032,033,037] % fallbacks for some unicode chars, todo
+
+\setupencoding[\s!default=ec] % for the moment keep it this way, till fonts are there
+
+\protect \endinput
+
+When dealing with characters we have four cases to take into account when moving
+from mkii to mkiv:
+
+1. <byte 200> => ref to slot 200 in current font
+2. \char 200 => ref to slot 200 in current font
+3. <active 200> => can (e.g.) map to another slot in current font
+4. \namedglyph => can map to some slot in some font
+
+Using case 2 for special characters is doomed to fail because we are not going
+to intercept these on the fly as happens automatically with traditional font
+encoding handling. We could do that in a node pass but it's not worth the effort
+because we seldom use this case in a document source.
+
+We can consider using utf as internal format for mkii. The main reason for not
+doing this before was that it was slow. On the other hand, it would make dealing
+with utility files easier.
+
+These are the only cases where char references are used:
+
+enco-def.tex : 46 : \definecharacter dotlessi {\char"10 }
+enco-def.tex : 47 : \definecharacter dotlessj {\char"11 }
+enco-def.tex : 54 : \definecharacter aeligature {\char26 } % "1A
+enco-def.tex : 55 : \definecharacter AEligature {\char29 } % "1D
+enco-def.tex : 58 : \definecharacter oeligature {\char27 } % "1B
+enco-def.tex : 59 : \definecharacter OEligature {\char30 } % "1E
+enco-def.tex : 61 : \definecharacter ssharp {\char25 } % "19
+enco-def.tex : 336 : \definecharacter Lstroke {\hsmash{\char32}L}
+enco-def.tex : 337 : \definecharacter lstroke {\hsmash{\char32}l}
+enco-def.tex : 338 : \definecharacter Ostroke {\char31 } % "1F
+enco-def.tex : 339 : \definecharacter ostroke {\char28 } % "1C
+enco-il2.tex : 147 : {\dontleavehmode{\char32l}}
+enco-il2.tex : 152 : \hbox to\wd0{\hss\char32L}%
+symb-eur.tex : 37 : \definesymbol [euro] [\getglyph{Euro}{\char160}]
+symb-glm.tex : 61 : \definesymbol [xleftguillemot] [\getglyph{Guil}{\char19}]
+symb-glm.tex : 62 : \definesymbol [xrightguillemot] [\getglyph{Guil}{\char20}]
+symb-glm.tex : 64 : \definesymbol [xguilsingleleft] [\getglyph{Guil}{\char14}]
+symb-glm.tex : 65 : \definesymbol [xguilsingleright] [\getglyph{Guil}{\char15}]
+
diff --git a/Master/texmf-dist/tex/context/base/enco-ini.tex b/Master/texmf-dist/tex/context/base/enco-ini.tex
index da14b509b4e..4c85bac5b25 100644
--- a/Master/texmf-dist/tex/context/base/enco-ini.tex
+++ b/Master/texmf-dist/tex/context/base/enco-ini.tex
@@ -11,6 +11,9 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
+%D Quite some code will be moved to the mk files once we're ready
+%D for it.
+
%D This module is a reimplementation of the module that handled
%D composed characters and non \ASCII\ characters. The changed
%D are not that fundamental, and mainly concerns moving
@@ -638,7 +641,8 @@
\pathypsettings\afterassignment\hyphenation\scratchtoks=}
%D This is not needed for patterns because they are loaded grouped
-%D anyway and it saves us an assignment.
+%D anyway and it saves us an assignment. Can go ... no longer
+%D shared patterns.
\def\startpatternloading#1#2#3% % we should use \everypatternloading
{\startreadingfile
@@ -977,6 +981,9 @@
% "\dobuildtextaccent \char 18 a" but "\dobuildtextaccent {\char 18}{a}"
% instead
+\def\buildmathaccent#1%
+ {\mathaccent#1 }
+
\def\buildtextaccent#1#2% **
{\ifignoreaccent
\expandafter\nobuildtextaccent
@@ -984,28 +991,27 @@
\expandafter\dobuildtextaccent
\fi{#1}{#2}}
+\unexpanded\def\nobuildtextaccent#1#2%
+ {#2}
+
\unexpanded\def\dobuildtextaccent#1#2%
{{\let\char\normalaccent#1\let\char\normalchar#2}}
-\unexpanded\def\nobuildtextaccent#1#2%
- {#2}
+% EVENTUALLY THIS CODE WILL MOVE TO AN mkiv module
-\def\buildmathaccent#1%
- {\mathaccent#1 }
+\beginLUATEX
-% will be overloaded later
+\newbox\accenttestbox
-\definecommand ` {\buildtextaccent\textgrave}
-\definecommand ' {\buildtextaccent\textacute}
-\definecommand r {\buildtextaccent\textring}
-\definecommand v {\buildtextaccent\textcaron}
-\definecommand u {\buildtextaccent\textbreve}
-\definecommand = {\buildtextaccent\textmacron}
-\definecommand ^ {\buildtextaccent\textcircumflex}
-\definecommand . {\buildtextaccent\textdotaccent}
-\definecommand H {\buildtextaccent\texthungarumlaut}
-\definecommand ~ {\buildtextaccent\texttilde}
-\definecommand " {\buildtextaccent\textdiaeresis}
+\unexpanded\def\dobuildtextaccent#1#2%
+ {\begingroup
+ \global\setbox\accenttestbox\hbox{#1}%
+ \scratchcounter\ctxlua{characters.charcode(\number\accenttestbox)}%
+ \ifcase\scratchcounter\else\accent\scratchcounter\fi
+ \relax#2%
+ \endgroup}
+
+\endLUATEX
% some fake ones, name will change into build
@@ -1032,11 +1038,6 @@
\def\buildtextcedilla {\bottomaccent{0ex}{0}{5}{\textcedilla}}
\def\buildtextogonek {\bottomaccent{-.1ex}{.5}{0}{\textogonek}}
-\definecommand c {\buildtextcedilla}
-\definecommand b {\buildtextmacron}
-\definecommand d {\buildtextbottomdot}
-\definecommand k {\buildtextogonek}
-
%D A collectors item:
\def\buildtextbottomcomma{\bottomaccent{.15ex}{0}{5}{\tx,}}
@@ -1069,19 +1070,6 @@
\def\donormalmathaccent#1%
{\getvalue{normalmathaccent\string#1}}
-\definemathaccent acute {\buildmathaccent\mathacute}
-\definemathaccent grave {\buildmathaccent\mathgrave}
-\definemathaccent ddot {\buildmathaccent\mathddot}
-\definemathaccent tilde {\buildmathaccent\mathtilde}
-\definemathaccent bar {\buildmathaccent\mathbar}
-\definemathaccent breve {\buildmathaccent\mathbreve}
-\definemathaccent check {\buildmathaccent\mathcheck}
-\definemathaccent hat {\buildmathaccent\mathhat}
-\definemathaccent vec {\buildmathaccent\mathvec}
-\definemathaccent dot {\buildmathaccent\mathdot}
-\definemathaccent widetilde {\buildmathaccent\mathwidetilde}
-\definemathaccent widehat {\buildmathaccent\mathwidehat}
-
%D Some precautions:
\ifx\usepdffontresource\undefined
@@ -1194,12 +1182,47 @@
%D We preload several encodings:
-\useencoding[def,acc,raw,com,cas,mis] % mis should come first
+\loadmarkfile{enco-ini}
+
+\definecommand ` {\buildtextaccent\textgrave}
+\definecommand ' {\buildtextaccent\textacute}
+\definecommand r {\buildtextaccent\textring}
+\definecommand v {\buildtextaccent\textcaron}
+\definecommand u {\buildtextaccent\textbreve}
+\definecommand = {\buildtextaccent\textmacron}
+\definecommand ^ {\buildtextaccent\textcircumflex}
+\definecommand . {\buildtextaccent\textdotaccent}
+\definecommand H {\buildtextaccent\texthungarumlaut}
+\definecommand ~ {\buildtextaccent\texttilde}
+\definecommand " {\buildtextaccent\textdiaeresis}
-\useencoding[ans,il2,ec,tbo,pdf,uc,pol,qx,t5,cyr,agr] % pol and il2 will go away
+\definecommand c {\buildtextcedilla}
+\definecommand b {\buildtextmacron}
+\definecommand d {\buildtextbottomdot}
+\definecommand k {\buildtextogonek}
+
+\definemathaccent acute {\buildmathaccent\mathacute}
+\definemathaccent grave {\buildmathaccent\mathgrave}
+\definemathaccent ddot {\buildmathaccent\mathddot}
+\definemathaccent tilde {\buildmathaccent\mathtilde}
+\definemathaccent bar {\buildmathaccent\mathbar}
+\definemathaccent breve {\buildmathaccent\mathbreve}
+\definemathaccent check {\buildmathaccent\mathcheck}
+\definemathaccent hat {\buildmathaccent\mathhat}
+\definemathaccent vec {\buildmathaccent\mathvec}
+\definemathaccent dot {\buildmathaccent\mathdot}
+\definemathaccent widetilde {\buildmathaccent\mathwidetilde}
+\definemathaccent widehat {\buildmathaccent\mathwidehat}
-\useencoding[032,033,037]
+\useencoding[def] % defaults (partly simplified)
+\useencoding[acc] % accent commands
+\useencoding[raw] % simplified (incomplete)
+\useencoding[com] % a few commands
+\useencoding[cas] % case mapping, not needed in mkiv
+\useencoding[mis] % a few commands
-\setupencoding[\s!default=ec] % was: [\s!default=\s!default]
+% \useencoding[ans,il2,ec,tbo,pdf,uc,pol,qx,t5,cyr,agr] % pol and il2 will go away, not needed in mkiv
+% \useencoding[032,033,037] % fallbacks for some unicode chars
+% \setupencoding[\s!default=ec] % was: [\s!default=\s!default]
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/enco-pfr.mkiv b/Master/texmf-dist/tex/context/base/enco-pfr.mkiv
new file mode 100644
index 00000000000..52ef0cc3b21
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/enco-pfr.mkiv
@@ -0,0 +1,22 @@
+%D \module
+%D [ file=enco-pfr,
+%D version=2000.12.10, % adapted 2005.08.14 to more delayed loading
+%D title=\CONTEXT\ Encoding Macros,
+%D subtitle=PDF Font Resource Inclusion,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+% obsolete, at least for wide fonts, we may need to support it otherwise
+%
+% \ifx\pdfglyphtounicode\undefined \else
+% \appendtoks
+% \doif\jobsuffix{pdf}{\ctxlua{characters.setpdfunicodes()}}% pdftounicode mappings can only be done runtime
+% \to \everystarttext
+% \fi
+
+\endinput
diff --git a/Master/texmf-dist/tex/context/base/enco-pfr.tex b/Master/texmf-dist/tex/context/base/enco-pfr.tex
index 24044e4d009..902eb7bcd55 100644
--- a/Master/texmf-dist/tex/context/base/enco-pfr.tex
+++ b/Master/texmf-dist/tex/context/base/enco-pfr.tex
@@ -15,6 +15,10 @@
\endinput
\endXETEX
+\beginLUATEX
+ \endinput
+\endLUATEX
+
\ifx\pdffontresource\undefined\else\endinput\fi
\writestatus{loading}{Context Encoding Macros (pdf)}
@@ -215,7 +219,17 @@
% \fi}
\def\includepdffontresource
- {\ifcase\pdfgentounicode
+ {\ifx\pdfgentounicode\undefined
+ \expandafter\ifx\the\font\nullfont \else
+ \ifx\pdffontattr\undefined
+ % we're not using (a recent version of) pdftex
+ \else\ifcase\pdfoutput
+ % we're not in pdf mode
+ \else
+ \doincludepdffontresource
+ \fi\fi
+ \fi
+ \else\ifcase\pdfgentounicode
\ifincludepdffontresources
\expandafter\ifx\the\font\nullfont \else
\ifx\pdffontattr\undefined
@@ -229,7 +243,7 @@
\fi
\or
\global\let\includepdffontresource\relax % automatic, built in
- \fi}
+ \fi\fi}
\def\dododoincludepdffontresource#1% encoding
{\bgroup
@@ -242,8 +256,6 @@
\letgvalue\pdffontfileresource\empty}%
\egroup}
-\beginETEX
-
\def\doincludepdffontresource
{\ifcsname\s!ucmap\fontfile\endcsname\else
\dodoincludepdffontresource
@@ -271,36 +283,6 @@
\letgvalue{\s!ucmap\fontfile}\empty
\fi}}
-\endETEX
-
-\beginTEX
-
-\def\doincludepdffontresource
- {\expandafter\ifcsname\s!ucmap\fontfile\endcsname\relax
- \dodoincludepdffontresource
- \fi}
-
-\def\dodoincludepdffontresource
- {\doifsomething\currentencoding % no \ifx
- {\expandafter\ifx\csname\pdffontresource\endcsname\relax
- \expandafter\ifx\csname\pdffontfileresource\endcsname\relax\else
- \doifsomething\pdffontfileresource
- {\pdfobj reserveobjnum {}%
- \setxvalue\pdffontresource{\the\pdflastobj}%
- \flushatshipout{\dododoincludepdffontresource{\currentencoding}}}%
-% \doglobal\appendetoks
-% \noexpand\dododoincludepdffontresource{\currentencoding}%
-% \to \everybeforeshipout}% prevent multiple loading
- \fi
- \fi
- \expandafter\ifx\csname\pdffontresource\endcsname\relax\else
- \expanded{\pdffontattr\font{/ToUnicode \csname\pdffontresource\endcsname\space0 R}}%
- % do it only once for each font
- \letgvalue{\s!ucmap\fontfile}\empty
- \fi}}
-
-\endTEX
-
%D For the moment, we keep this definition here, if only
%D because \type {\usepdffontencoding} is not defined in the
%D core. In the end, this will go to \type {enco-*.tex}.
diff --git a/Master/texmf-dist/tex/context/base/enco-raw.tex b/Master/texmf-dist/tex/context/base/enco-raw.tex
index 02278e708e9..e3a46e3d768 100644
--- a/Master/texmf-dist/tex/context/base/enco-raw.tex
+++ b/Master/texmf-dist/tex/context/base/enco-raw.tex
@@ -3,7 +3,7 @@
\startencoding[raw]
\definecharacter Acircumflex {A} \definecharacter acircumflex {a}
-\definecharacter Ccircumflex {C} \definecharacter ccircumflex {c}
+\definecharacter Ccircumflex {C} \definecharacter ccircumflex {c}
\definecharacter Ecircumflex {E} \definecharacter ecircumflex {e}
\definecharacter Gcircumflex {G} \definecharacter gcircumflex {g}
\definecharacter Hcircumflex {H} \definecharacter hcircumflex {h}
@@ -14,7 +14,7 @@
\definecharacter Ucircumflex {U} \definecharacter ucircumflex {u}
\definecharacter Wcircumflex {W} \definecharacter wcircumflex {w}
\definecharacter Ycircumflex {Y} \definecharacter ycircumflex {y}
-
+
\definecharacter Agrave {A} \definecharacter agrave {a}
\definecharacter Egrave {E} \definecharacter egrave {e}
\definecharacter Igrave {I} \definecharacter igrave {i}
@@ -26,6 +26,7 @@
\definecharacter Itilde {I} \definecharacter itilde {i}
\definecharacter Otilde {O} \definecharacter otilde {o}
\definecharacter Utilde {U} \definecharacter utilde {u}
+\definecharacter Utilde {N} \definecharacter utilde {n}
\definecharacter Adiaeresis {A} \definecharacter adiaeresis {a}
\definecharacter Ediaeresis {E} \definecharacter ediaeresis {e}
diff --git a/Master/texmf-dist/tex/context/base/enco-run.tex b/Master/texmf-dist/tex/context/base/enco-run.tex
index f27b6593757..d78b6e4c8f3 100644
--- a/Master/texmf-dist/tex/context/base/enco-run.tex
+++ b/Master/texmf-dist/tex/context/base/enco-run.tex
@@ -104,7 +104,7 @@
{\bgroup
\localcolortrue
\dorecurse{255}
- {\ifnum\fontcharwd\font\recurselevel>\zeropoint
+ {\ifdim\fontcharwd\font\recurselevel>\zeropoint
\noindent\ruledhbox{\darkgray\char\recurselevel}\space
\fi}\unskip
\egroup}
diff --git a/Master/texmf-dist/tex/context/base/enco-utf.tex b/Master/texmf-dist/tex/context/base/enco-utf.tex
index b41490bebcc..bfb42738128 100644
--- a/Master/texmf-dist/tex/context/base/enco-utf.tex
+++ b/Master/texmf-dist/tex/context/base/enco-utf.tex
@@ -1,1986 +1,3126 @@
% filename : enco-utf.tex
-% comment : poor man's alternative for a proper enco file
+% comment : generated by mtxrun --script chars --utf
% author : Hans Hagen, PRAGMA-ADE, Hasselt NL
% copyright: PRAGMA ADE / ConTeXt Development Team
% license : see context related readme files
-\ifx\setcclcuc\undefined
+\ifx\setcclcucx\undefined
- \def\setcclcuc #1 #2 #3 %
+ \def\setcclcucx #1 #2 #3 %
{\global\catcode"#1=11
\global\lccode "#1="#2
\global\uccode "#1="#3 }
\fi
-\setcclcuc 0041 0061 0041 % LATIN CAPITAL LETTER A
-\setcclcuc 0042 0062 0042 % LATIN CAPITAL LETTER B
-\setcclcuc 0043 0063 0043 % LATIN CAPITAL LETTER C
-\setcclcuc 0044 0064 0044 % LATIN CAPITAL LETTER D
-\setcclcuc 0045 0065 0045 % LATIN CAPITAL LETTER E
-\setcclcuc 0046 0066 0046 % LATIN CAPITAL LETTER F
-\setcclcuc 0047 0067 0047 % LATIN CAPITAL LETTER G
-\setcclcuc 0048 0068 0048 % LATIN CAPITAL LETTER H
-\setcclcuc 0049 0069 0049 % LATIN CAPITAL LETTER I
-\setcclcuc 004A 006A 004A % LATIN CAPITAL LETTER J
-\setcclcuc 004B 006B 004B % LATIN CAPITAL LETTER K
-\setcclcuc 004C 006C 004C % LATIN CAPITAL LETTER L
-\setcclcuc 004D 006D 004D % LATIN CAPITAL LETTER M
-\setcclcuc 004E 006E 004E % LATIN CAPITAL LETTER N
-\setcclcuc 004F 006F 004F % LATIN CAPITAL LETTER O
-\setcclcuc 0050 0070 0050 % LATIN CAPITAL LETTER P
-\setcclcuc 0051 0071 0051 % LATIN CAPITAL LETTER Q
-\setcclcuc 0052 0072 0052 % LATIN CAPITAL LETTER R
-\setcclcuc 0053 0073 0053 % LATIN CAPITAL LETTER S
-\setcclcuc 0054 0074 0054 % LATIN CAPITAL LETTER T
-\setcclcuc 0055 0075 0055 % LATIN CAPITAL LETTER U
-\setcclcuc 0056 0076 0056 % LATIN CAPITAL LETTER V
-\setcclcuc 0057 0077 0057 % LATIN CAPITAL LETTER W
-\setcclcuc 0058 0078 0058 % LATIN CAPITAL LETTER X
-\setcclcuc 0059 0079 0059 % LATIN CAPITAL LETTER Y
-\setcclcuc 005A 007A 005A % LATIN CAPITAL LETTER Z
-\setcclcuc 0061 0061 0041 % LATIN SMALL LETTER A
-\setcclcuc 0062 0062 0042 % LATIN SMALL LETTER B
-\setcclcuc 0063 0063 0043 % LATIN SMALL LETTER C
-\setcclcuc 0064 0064 0044 % LATIN SMALL LETTER D
-\setcclcuc 0065 0065 0045 % LATIN SMALL LETTER E
-\setcclcuc 0066 0066 0046 % LATIN SMALL LETTER F
-\setcclcuc 0067 0067 0047 % LATIN SMALL LETTER G
-\setcclcuc 0068 0068 0048 % LATIN SMALL LETTER H
-\setcclcuc 0069 0069 0049 % LATIN SMALL LETTER I
-\setcclcuc 006A 006A 004A % LATIN SMALL LETTER J
-\setcclcuc 006B 006B 004B % LATIN SMALL LETTER K
-\setcclcuc 006C 006C 004C % LATIN SMALL LETTER L
-\setcclcuc 006D 006D 004D % LATIN SMALL LETTER M
-\setcclcuc 006E 006E 004E % LATIN SMALL LETTER N
-\setcclcuc 006F 006F 004F % LATIN SMALL LETTER O
-\setcclcuc 0070 0070 0050 % LATIN SMALL LETTER P
-\setcclcuc 0071 0071 0051 % LATIN SMALL LETTER Q
-\setcclcuc 0072 0072 0052 % LATIN SMALL LETTER R
-\setcclcuc 0073 0073 0053 % LATIN SMALL LETTER S
-\setcclcuc 0074 0074 0054 % LATIN SMALL LETTER T
-\setcclcuc 0075 0075 0055 % LATIN SMALL LETTER U
-\setcclcuc 0076 0076 0056 % LATIN SMALL LETTER V
-\setcclcuc 0077 0077 0057 % LATIN SMALL LETTER W
-\setcclcuc 0078 0078 0058 % LATIN SMALL LETTER X
-\setcclcuc 0079 0079 0059 % LATIN SMALL LETTER Y
-\setcclcuc 007A 007A 005A % LATIN SMALL LETTER Z
-\setcclcuc 00AA 00AA 00AA % FEMININE ORDINAL INDICATOR
-\setcclcuc 00B5 00B5 039C % MICRO SIGN
-\setcclcuc 00BA 00BA 00BA % MASCULINE ORDINAL INDICATOR
-\setcclcuc 00C0 00E0 00C0 % LATIN CAPITAL LETTER A WITH GRAVE
-\setcclcuc 00C1 00E1 00C1 % LATIN CAPITAL LETTER A WITH ACUTE
-\setcclcuc 00C2 00E2 00C2 % LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-\setcclcuc 00C3 00E3 00C3 % LATIN CAPITAL LETTER A WITH TILDE
-\setcclcuc 00C4 00E4 00C4 % LATIN CAPITAL LETTER A WITH DIAERESIS
-\setcclcuc 00C5 00E5 00C5 % LATIN CAPITAL LETTER A WITH RING ABOVE
-\setcclcuc 00C6 00E6 00C6 % LATIN CAPITAL LETTER AE
-\setcclcuc 00C7 00E7 00C7 % LATIN CAPITAL LETTER C WITH CEDILLA
-\setcclcuc 00C8 00E8 00C8 % LATIN CAPITAL LETTER E WITH GRAVE
-\setcclcuc 00C9 00E9 00C9 % LATIN CAPITAL LETTER E WITH ACUTE
-\setcclcuc 00CA 00EA 00CA % LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-\setcclcuc 00CB 00EB 00CB % LATIN CAPITAL LETTER E WITH DIAERESIS
-\setcclcuc 00CC 00EC 00CC % LATIN CAPITAL LETTER I WITH GRAVE
-\setcclcuc 00CD 00ED 00CD % LATIN CAPITAL LETTER I WITH ACUTE
-\setcclcuc 00CE 00EE 00CE % LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-\setcclcuc 00CF 00EF 00CF % LATIN CAPITAL LETTER I WITH DIAERESIS
-\setcclcuc 00D0 00F0 00D0 % LATIN CAPITAL LETTER ETH
-\setcclcuc 00D1 00F1 00D1 % LATIN CAPITAL LETTER N WITH TILDE
-\setcclcuc 00D2 00F2 00D2 % LATIN CAPITAL LETTER O WITH GRAVE
-\setcclcuc 00D3 00F3 00D3 % LATIN CAPITAL LETTER O WITH ACUTE
-\setcclcuc 00D4 00F4 00D4 % LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-\setcclcuc 00D5 00F5 00D5 % LATIN CAPITAL LETTER O WITH TILDE
-\setcclcuc 00D6 00F6 00D6 % LATIN CAPITAL LETTER O WITH DIAERESIS
-\setcclcuc 00D8 00F8 00D8 % LATIN CAPITAL LETTER O WITH STROKE
-\setcclcuc 00D9 00F9 00D9 % LATIN CAPITAL LETTER U WITH GRAVE
-\setcclcuc 00DA 00FA 00DA % LATIN CAPITAL LETTER U WITH ACUTE
-\setcclcuc 00DB 00FB 00DB % LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-\setcclcuc 00DC 00FC 00DC % LATIN CAPITAL LETTER U WITH DIAERESIS
-\setcclcuc 00DD 00FD 00DD % LATIN CAPITAL LETTER Y WITH ACUTE
-\setcclcuc 00DE 00FE 00DE % LATIN CAPITAL LETTER THORN
-\setcclcuc 00DF 00DF 00DF % LATIN SMALL LETTER SHARP S
-\setcclcuc 00E0 00E0 00C0 % LATIN SMALL LETTER A WITH GRAVE
-\setcclcuc 00E1 00E1 00C1 % LATIN SMALL LETTER A WITH ACUTE
-\setcclcuc 00E2 00E2 00C2 % LATIN SMALL LETTER A WITH CIRCUMFLEX
-\setcclcuc 00E3 00E3 00C3 % LATIN SMALL LETTER A WITH TILDE
-\setcclcuc 00E4 00E4 00C4 % LATIN SMALL LETTER A WITH DIAERESIS
-\setcclcuc 00E5 00E5 00C5 % LATIN SMALL LETTER A WITH RING ABOVE
-\setcclcuc 00E6 00E6 00C6 % LATIN SMALL LETTER AE
-\setcclcuc 00E7 00E7 00C7 % LATIN SMALL LETTER C WITH CEDILLA
-\setcclcuc 00E8 00E8 00C8 % LATIN SMALL LETTER E WITH GRAVE
-\setcclcuc 00E9 00E9 00C9 % LATIN SMALL LETTER E WITH ACUTE
-\setcclcuc 00EA 00EA 00CA % LATIN SMALL LETTER E WITH CIRCUMFLEX
-\setcclcuc 00EB 00EB 00CB % LATIN SMALL LETTER E WITH DIAERESIS
-\setcclcuc 00EC 00EC 00CC % LATIN SMALL LETTER I WITH GRAVE
-\setcclcuc 00ED 00ED 00CD % LATIN SMALL LETTER I WITH ACUTE
-\setcclcuc 00EE 00EE 00CE % LATIN SMALL LETTER I WITH CIRCUMFLEX
-\setcclcuc 00EF 00EF 00CF % LATIN SMALL LETTER I WITH DIAERESIS
-\setcclcuc 00F0 00F0 00D0 % LATIN SMALL LETTER ETH
-\setcclcuc 00F1 00F1 00D1 % LATIN SMALL LETTER N WITH TILDE
-\setcclcuc 00F2 00F2 00D2 % LATIN SMALL LETTER O WITH GRAVE
-\setcclcuc 00F3 00F3 00D3 % LATIN SMALL LETTER O WITH ACUTE
-\setcclcuc 00F4 00F4 00D4 % LATIN SMALL LETTER O WITH CIRCUMFLEX
-\setcclcuc 00F5 00F5 00D5 % LATIN SMALL LETTER O WITH TILDE
-\setcclcuc 00F6 00F6 00D6 % LATIN SMALL LETTER O WITH DIAERESIS
-\setcclcuc 00F8 00F8 00D8 % LATIN SMALL LETTER O WITH STROKE
-\setcclcuc 00F9 00F9 00D9 % LATIN SMALL LETTER U WITH GRAVE
-\setcclcuc 00FA 00FA 00DA % LATIN SMALL LETTER U WITH ACUTE
-\setcclcuc 00FB 00FB 00DB % LATIN SMALL LETTER U WITH CIRCUMFLEX
-\setcclcuc 00FC 00FC 00DC % LATIN SMALL LETTER U WITH DIAERESIS
-\setcclcuc 00FD 00FD 00DD % LATIN SMALL LETTER Y WITH ACUTE
-\setcclcuc 00FE 00FE 00DE % LATIN SMALL LETTER THORN
-\setcclcuc 00FF 00FF 0178 % LATIN SMALL LETTER Y WITH DIAERESIS
-\setcclcuc 0100 0101 0100 % LATIN CAPITAL LETTER A WITH MACRON
-\setcclcuc 0101 0101 0100 % LATIN SMALL LETTER A WITH MACRON
-\setcclcuc 0102 0103 0102 % LATIN CAPITAL LETTER A WITH BREVE
-\setcclcuc 0103 0103 0102 % LATIN SMALL LETTER A WITH BREVE
-\setcclcuc 0104 0105 0104 % LATIN CAPITAL LETTER A WITH OGONEK
-\setcclcuc 0105 0105 0104 % LATIN SMALL LETTER A WITH OGONEK
-\setcclcuc 0106 0107 0106 % LATIN CAPITAL LETTER C WITH ACUTE
-\setcclcuc 0107 0107 0106 % LATIN SMALL LETTER C WITH ACUTE
-\setcclcuc 0108 0109 0108 % LATIN CAPITAL LETTER C WITH CIRCUMFLEX
-\setcclcuc 0109 0109 0108 % LATIN SMALL LETTER C WITH CIRCUMFLEX
-\setcclcuc 010A 010B 010A % LATIN CAPITAL LETTER C WITH DOT ABOVE
-\setcclcuc 010B 010B 010A % LATIN SMALL LETTER C WITH DOT ABOVE
-\setcclcuc 010C 010D 010C % LATIN CAPITAL LETTER C WITH CARON
-\setcclcuc 010D 010D 010C % LATIN SMALL LETTER C WITH CARON
-\setcclcuc 010E 010F 010E % LATIN CAPITAL LETTER D WITH CARON
-\setcclcuc 010F 010F 010E % LATIN SMALL LETTER D WITH CARON
-\setcclcuc 0110 0111 0110 % LATIN CAPITAL LETTER D WITH STROKE
-\setcclcuc 0111 0111 0110 % LATIN SMALL LETTER D WITH STROKE
-\setcclcuc 0112 0113 0112 % LATIN CAPITAL LETTER E WITH MACRON
-\setcclcuc 0113 0113 0112 % LATIN SMALL LETTER E WITH MACRON
-\setcclcuc 0114 0115 0114 % LATIN CAPITAL LETTER E WITH BREVE
-\setcclcuc 0115 0115 0114 % LATIN SMALL LETTER E WITH BREVE
-\setcclcuc 0116 0117 0116 % LATIN CAPITAL LETTER E WITH DOT ABOVE
-\setcclcuc 0117 0117 0116 % LATIN SMALL LETTER E WITH DOT ABOVE
-\setcclcuc 0118 0119 0118 % LATIN CAPITAL LETTER E WITH OGONEK
-\setcclcuc 0119 0119 0118 % LATIN SMALL LETTER E WITH OGONEK
-\setcclcuc 011A 011B 011A % LATIN CAPITAL LETTER E WITH CARON
-\setcclcuc 011B 011B 011A % LATIN SMALL LETTER E WITH CARON
-\setcclcuc 011C 011D 011C % LATIN CAPITAL LETTER G WITH CIRCUMFLEX
-\setcclcuc 011D 011D 011C % LATIN SMALL LETTER G WITH CIRCUMFLEX
-\setcclcuc 011E 011F 011E % LATIN CAPITAL LETTER G WITH BREVE
-\setcclcuc 011F 011F 011E % LATIN SMALL LETTER G WITH BREVE
-\setcclcuc 0120 0121 0120 % LATIN CAPITAL LETTER G WITH DOT ABOVE
-\setcclcuc 0121 0121 0120 % LATIN SMALL LETTER G WITH DOT ABOVE
-\setcclcuc 0122 0123 0122 % LATIN CAPITAL LETTER G WITH CEDILLA
-\setcclcuc 0123 0123 0122 % LATIN SMALL LETTER G WITH CEDILLA
-\setcclcuc 0124 0125 0124 % LATIN CAPITAL LETTER H WITH CIRCUMFLEX
-\setcclcuc 0125 0125 0124 % LATIN SMALL LETTER H WITH CIRCUMFLEX
-\setcclcuc 0126 0127 0126 % LATIN CAPITAL LETTER H WITH STROKE
-\setcclcuc 0127 0127 0126 % LATIN SMALL LETTER H WITH STROKE
-\setcclcuc 0128 0129 0128 % LATIN CAPITAL LETTER I WITH TILDE
-\setcclcuc 0129 0129 0128 % LATIN SMALL LETTER I WITH TILDE
-\setcclcuc 012A 012B 012A % LATIN CAPITAL LETTER I WITH MACRON
-\setcclcuc 012B 012B 012A % LATIN SMALL LETTER I WITH MACRON
-\setcclcuc 012C 012D 012C % LATIN CAPITAL LETTER I WITH BREVE
-\setcclcuc 012D 012D 012C % LATIN SMALL LETTER I WITH BREVE
-\setcclcuc 012E 012F 012E % LATIN CAPITAL LETTER I WITH OGONEK
-\setcclcuc 012F 012F 012E % LATIN SMALL LETTER I WITH OGONEK
-\setcclcuc 0130 0069 0130 % LATIN CAPITAL LETTER I WITH DOT ABOVE
-\setcclcuc 0131 0131 0049 % LATIN SMALL LETTER DOTLESS I
-\setcclcuc 0132 0133 0132 % LATIN CAPITAL LIGATURE IJ
-\setcclcuc 0133 0133 0132 % LATIN SMALL LIGATURE IJ
-\setcclcuc 0134 0135 0134 % LATIN CAPITAL LETTER J WITH CIRCUMFLEX
-\setcclcuc 0135 0135 0134 % LATIN SMALL LETTER J WITH CIRCUMFLEX
-\setcclcuc 0136 0137 0136 % LATIN CAPITAL LETTER K WITH CEDILLA
-\setcclcuc 0137 0137 0136 % LATIN SMALL LETTER K WITH CEDILLA
-\setcclcuc 0138 0138 0138 % LATIN SMALL LETTER KRA
-\setcclcuc 0139 013A 0139 % LATIN CAPITAL LETTER L WITH ACUTE
-\setcclcuc 013A 013A 0139 % LATIN SMALL LETTER L WITH ACUTE
-\setcclcuc 013B 013C 013B % LATIN CAPITAL LETTER L WITH CEDILLA
-\setcclcuc 013C 013C 013B % LATIN SMALL LETTER L WITH CEDILLA
-\setcclcuc 013D 013E 013D % LATIN CAPITAL LETTER L WITH CARON
-\setcclcuc 013E 013E 013D % LATIN SMALL LETTER L WITH CARON
-\setcclcuc 013F 0140 013F % LATIN CAPITAL LETTER L WITH MIDDLE DOT
-\setcclcuc 0140 0140 013F % LATIN SMALL LETTER L WITH MIDDLE DOT
-\setcclcuc 0141 0142 0141 % LATIN CAPITAL LETTER L WITH STROKE
-\setcclcuc 0142 0142 0141 % LATIN SMALL LETTER L WITH STROKE
-\setcclcuc 0143 0144 0143 % LATIN CAPITAL LETTER N WITH ACUTE
-\setcclcuc 0144 0144 0143 % LATIN SMALL LETTER N WITH ACUTE
-\setcclcuc 0145 0146 0145 % LATIN CAPITAL LETTER N WITH CEDILLA
-\setcclcuc 0146 0146 0145 % LATIN SMALL LETTER N WITH CEDILLA
-\setcclcuc 0147 0148 0147 % LATIN CAPITAL LETTER N WITH CARON
-\setcclcuc 0148 0148 0147 % LATIN SMALL LETTER N WITH CARON
-\setcclcuc 0149 0149 0149 % LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
-\setcclcuc 014A 014B 014A % LATIN CAPITAL LETTER ENG
-\setcclcuc 014B 014B 014A % LATIN SMALL LETTER ENG
-\setcclcuc 014C 014D 014C % LATIN CAPITAL LETTER O WITH MACRON
-\setcclcuc 014D 014D 014C % LATIN SMALL LETTER O WITH MACRON
-\setcclcuc 014E 014F 014E % LATIN CAPITAL LETTER O WITH BREVE
-\setcclcuc 014F 014F 014E % LATIN SMALL LETTER O WITH BREVE
-\setcclcuc 0150 0151 0150 % LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
-\setcclcuc 0151 0151 0150 % LATIN SMALL LETTER O WITH DOUBLE ACUTE
-\setcclcuc 0152 0153 0152 % LATIN CAPITAL LIGATURE OE
-\setcclcuc 0153 0153 0152 % LATIN SMALL LIGATURE OE
-\setcclcuc 0154 0155 0154 % LATIN CAPITAL LETTER R WITH ACUTE
-\setcclcuc 0155 0155 0154 % LATIN SMALL LETTER R WITH ACUTE
-\setcclcuc 0156 0157 0156 % LATIN CAPITAL LETTER R WITH CEDILLA
-\setcclcuc 0157 0157 0156 % LATIN SMALL LETTER R WITH CEDILLA
-\setcclcuc 0158 0159 0158 % LATIN CAPITAL LETTER R WITH CARON
-\setcclcuc 0159 0159 0158 % LATIN SMALL LETTER R WITH CARON
-\setcclcuc 015A 015B 015A % LATIN CAPITAL LETTER S WITH ACUTE
-\setcclcuc 015B 015B 015A % LATIN SMALL LETTER S WITH ACUTE
-\setcclcuc 015C 015D 015C % LATIN CAPITAL LETTER S WITH CIRCUMFLEX
-\setcclcuc 015D 015D 015C % LATIN SMALL LETTER S WITH CIRCUMFLEX
-\setcclcuc 015E 015F 015E % LATIN CAPITAL LETTER S WITH CEDILLA
-\setcclcuc 015F 015F 015E % LATIN SMALL LETTER S WITH CEDILLA
-\setcclcuc 0160 0161 0160 % LATIN CAPITAL LETTER S WITH CARON
-\setcclcuc 0161 0161 0160 % LATIN SMALL LETTER S WITH CARON
-\setcclcuc 0162 0163 0162 % LATIN CAPITAL LETTER T WITH CEDILLA
-\setcclcuc 0163 0163 0162 % LATIN SMALL LETTER T WITH CEDILLA
-\setcclcuc 0164 0165 0164 % LATIN CAPITAL LETTER T WITH CARON
-\setcclcuc 0165 0165 0164 % LATIN SMALL LETTER T WITH CARON
-\setcclcuc 0166 0167 0166 % LATIN CAPITAL LETTER T WITH STROKE
-\setcclcuc 0167 0167 0166 % LATIN SMALL LETTER T WITH STROKE
-\setcclcuc 0168 0169 0168 % LATIN CAPITAL LETTER U WITH TILDE
-\setcclcuc 0169 0169 0168 % LATIN SMALL LETTER U WITH TILDE
-\setcclcuc 016A 016B 016A % LATIN CAPITAL LETTER U WITH MACRON
-\setcclcuc 016B 016B 016A % LATIN SMALL LETTER U WITH MACRON
-\setcclcuc 016C 016D 016C % LATIN CAPITAL LETTER U WITH BREVE
-\setcclcuc 016D 016D 016C % LATIN SMALL LETTER U WITH BREVE
-\setcclcuc 016E 016F 016E % LATIN CAPITAL LETTER U WITH RING ABOVE
-\setcclcuc 016F 016F 016E % LATIN SMALL LETTER U WITH RING ABOVE
-\setcclcuc 0170 0171 0170 % LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
-\setcclcuc 0171 0171 0170 % LATIN SMALL LETTER U WITH DOUBLE ACUTE
-\setcclcuc 0172 0173 0172 % LATIN CAPITAL LETTER U WITH OGONEK
-\setcclcuc 0173 0173 0172 % LATIN SMALL LETTER U WITH OGONEK
-\setcclcuc 0174 0175 0174 % LATIN CAPITAL LETTER W WITH CIRCUMFLEX
-\setcclcuc 0175 0175 0174 % LATIN SMALL LETTER W WITH CIRCUMFLEX
-\setcclcuc 0176 0177 0176 % LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
-\setcclcuc 0177 0177 0176 % LATIN SMALL LETTER Y WITH CIRCUMFLEX
-\setcclcuc 0178 00FF 0178 % LATIN CAPITAL LETTER Y WITH DIAERESIS
-\setcclcuc 0179 017A 0179 % LATIN CAPITAL LETTER Z WITH ACUTE
-\setcclcuc 017A 017A 0179 % LATIN SMALL LETTER Z WITH ACUTE
-\setcclcuc 017B 017C 017B % LATIN CAPITAL LETTER Z WITH DOT ABOVE
-\setcclcuc 017C 017C 017B % LATIN SMALL LETTER Z WITH DOT ABOVE
-\setcclcuc 017D 017E 017D % LATIN CAPITAL LETTER Z WITH CARON
-\setcclcuc 017E 017E 017D % LATIN SMALL LETTER Z WITH CARON
-\setcclcuc 017F 017F 0053 % LATIN SMALL LETTER LONG S
-\setcclcuc 0180 0180 0243 % LATIN SMALL LETTER B WITH STROKE
-\setcclcuc 0181 0253 0181 % LATIN CAPITAL LETTER B WITH HOOK
-\setcclcuc 0182 0183 0182 % LATIN CAPITAL LETTER B WITH TOPBAR
-\setcclcuc 0183 0183 0182 % LATIN SMALL LETTER B WITH TOPBAR
-\setcclcuc 0184 0185 0184 % LATIN CAPITAL LETTER TONE SIX
-\setcclcuc 0185 0185 0184 % LATIN SMALL LETTER TONE SIX
-\setcclcuc 0186 0254 0186 % LATIN CAPITAL LETTER OPEN O
-\setcclcuc 0187 0188 0187 % LATIN CAPITAL LETTER C WITH HOOK
-\setcclcuc 0188 0188 0187 % LATIN SMALL LETTER C WITH HOOK
-\setcclcuc 0189 0256 0189 % LATIN CAPITAL LETTER AFRICAN D
-\setcclcuc 018A 0257 018A % LATIN CAPITAL LETTER D WITH HOOK
-\setcclcuc 018B 018C 018B % LATIN CAPITAL LETTER D WITH TOPBAR
-\setcclcuc 018C 018C 018B % LATIN SMALL LETTER D WITH TOPBAR
-\setcclcuc 018D 018D 018D % LATIN SMALL LETTER TURNED DELTA
-\setcclcuc 018E 01DD 018E % LATIN CAPITAL LETTER REVERSED E
-\setcclcuc 018F 0259 018F % LATIN CAPITAL LETTER SCHWA
-\setcclcuc 0190 025B 0190 % LATIN CAPITAL LETTER OPEN E
-\setcclcuc 0191 0192 0191 % LATIN CAPITAL LETTER F WITH HOOK
-\setcclcuc 0192 0192 0191 % LATIN SMALL LETTER F WITH HOOK
-\setcclcuc 0193 0260 0193 % LATIN CAPITAL LETTER G WITH HOOK
-\setcclcuc 0194 0263 0194 % LATIN CAPITAL LETTER GAMMA
-\setcclcuc 0195 0195 01F6 % LATIN SMALL LETTER HV
-\setcclcuc 0196 0269 0196 % LATIN CAPITAL LETTER IOTA
-\setcclcuc 0197 0268 0197 % LATIN CAPITAL LETTER I WITH STROKE
-\setcclcuc 0198 0199 0198 % LATIN CAPITAL LETTER K WITH HOOK
-\setcclcuc 0199 0199 0198 % LATIN SMALL LETTER K WITH HOOK
-\setcclcuc 019A 019A 023D % LATIN SMALL LETTER L WITH BAR
-\setcclcuc 019B 019B 019B % LATIN SMALL LETTER LAMBDA WITH STROKE
-\setcclcuc 019C 026F 019C % LATIN CAPITAL LETTER TURNED M
-\setcclcuc 019D 0272 019D % LATIN CAPITAL LETTER N WITH LEFT HOOK
-\setcclcuc 019E 019E 0220 % LATIN SMALL LETTER N WITH LONG RIGHT LEG
-\setcclcuc 019F 0275 019F % LATIN CAPITAL LETTER O WITH MIDDLE TILDE
-\setcclcuc 01A0 01A1 01A0 % LATIN CAPITAL LETTER O WITH HORN
-\setcclcuc 01A1 01A1 01A0 % LATIN SMALL LETTER O WITH HORN
-\setcclcuc 01A2 01A3 01A2 % LATIN CAPITAL LETTER OI
-\setcclcuc 01A3 01A3 01A2 % LATIN SMALL LETTER OI
-\setcclcuc 01A4 01A5 01A4 % LATIN CAPITAL LETTER P WITH HOOK
-\setcclcuc 01A5 01A5 01A4 % LATIN SMALL LETTER P WITH HOOK
-\setcclcuc 01A6 0280 01A6 % LATIN LETTER YR
-\setcclcuc 01A7 01A8 01A7 % LATIN CAPITAL LETTER TONE TWO
-\setcclcuc 01A8 01A8 01A7 % LATIN SMALL LETTER TONE TWO
-\setcclcuc 01A9 0283 01A9 % LATIN CAPITAL LETTER ESH
-\setcclcuc 01AA 01AA 01AA % LATIN LETTER REVERSED ESH LOOP
-\setcclcuc 01AB 01AB 01AB % LATIN SMALL LETTER T WITH PALATAL HOOK
-\setcclcuc 01AC 01AD 01AC % LATIN CAPITAL LETTER T WITH HOOK
-\setcclcuc 01AD 01AD 01AC % LATIN SMALL LETTER T WITH HOOK
-\setcclcuc 01AE 0288 01AE % LATIN CAPITAL LETTER T WITH RETROFLEX HOOK
-\setcclcuc 01AF 01B0 01AF % LATIN CAPITAL LETTER U WITH HORN
-\setcclcuc 01B0 01B0 01AF % LATIN SMALL LETTER U WITH HORN
-\setcclcuc 01B1 028A 01B1 % LATIN CAPITAL LETTER UPSILON
-\setcclcuc 01B2 028B 01B2 % LATIN CAPITAL LETTER V WITH HOOK
-\setcclcuc 01B3 01B4 01B3 % LATIN CAPITAL LETTER Y WITH HOOK
-\setcclcuc 01B4 01B4 01B3 % LATIN SMALL LETTER Y WITH HOOK
-\setcclcuc 01B5 01B6 01B5 % LATIN CAPITAL LETTER Z WITH STROKE
-\setcclcuc 01B6 01B6 01B5 % LATIN SMALL LETTER Z WITH STROKE
-\setcclcuc 01B7 0292 01B7 % LATIN CAPITAL LETTER EZH
-\setcclcuc 01B8 01B9 01B8 % LATIN CAPITAL LETTER EZH REVERSED
-\setcclcuc 01B9 01B9 01B8 % LATIN SMALL LETTER EZH REVERSED
-\setcclcuc 01BA 01BA 01BA % LATIN SMALL LETTER EZH WITH TAIL
-\setcclcuc 01BC 01BD 01BC % LATIN CAPITAL LETTER TONE FIVE
-\setcclcuc 01BD 01BD 01BC % LATIN SMALL LETTER TONE FIVE
-\setcclcuc 01BE 01BE 01BE % LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE
-\setcclcuc 01BF 01BF 01F7 % LATIN LETTER WYNN
-\setcclcuc 01C4 01C6 01C5 % LATIN CAPITAL LETTER DZ WITH CARON
-\setcclcuc 01C5 01C6 01C4 % LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON
-\setcclcuc 01C6 01C6 01C4 % LATIN SMALL LETTER DZ WITH CARON
-\setcclcuc 01C7 01C9 01C8 % LATIN CAPITAL LETTER LJ
-\setcclcuc 01C8 01C9 01C7 % LATIN CAPITAL LETTER L WITH SMALL LETTER J
-\setcclcuc 01C9 01C9 01C7 % LATIN SMALL LETTER LJ
-\setcclcuc 01CA 01CC 01CB % LATIN CAPITAL LETTER NJ
-\setcclcuc 01CB 01CC 01CA % LATIN CAPITAL LETTER N WITH SMALL LETTER J
-\setcclcuc 01CC 01CC 01CA % LATIN SMALL LETTER NJ
-\setcclcuc 01CD 01CE 01CD % LATIN CAPITAL LETTER A WITH CARON
-\setcclcuc 01CE 01CE 01CD % LATIN SMALL LETTER A WITH CARON
-\setcclcuc 01CF 01D0 01CF % LATIN CAPITAL LETTER I WITH CARON
-\setcclcuc 01D0 01D0 01CF % LATIN SMALL LETTER I WITH CARON
-\setcclcuc 01D1 01D2 01D1 % LATIN CAPITAL LETTER O WITH CARON
-\setcclcuc 01D2 01D2 01D1 % LATIN SMALL LETTER O WITH CARON
-\setcclcuc 01D3 01D4 01D3 % LATIN CAPITAL LETTER U WITH CARON
-\setcclcuc 01D4 01D4 01D3 % LATIN SMALL LETTER U WITH CARON
-\setcclcuc 01D5 01D6 01D5 % LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
-\setcclcuc 01D6 01D6 01D5 % LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
-\setcclcuc 01D7 01D8 01D7 % LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
-\setcclcuc 01D8 01D8 01D7 % LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
-\setcclcuc 01D9 01DA 01D9 % LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
-\setcclcuc 01DA 01DA 01D9 % LATIN SMALL LETTER U WITH DIAERESIS AND CARON
-\setcclcuc 01DB 01DC 01DB % LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
-\setcclcuc 01DC 01DC 01DB % LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
-\setcclcuc 01DD 01DD 018E % LATIN SMALL LETTER TURNED E
-\setcclcuc 01DE 01DF 01DE % LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
-\setcclcuc 01DF 01DF 01DE % LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
-\setcclcuc 01E0 01E1 01E0 % LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
-\setcclcuc 01E1 01E1 01E0 % LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
-\setcclcuc 01E2 01E3 01E2 % LATIN CAPITAL LETTER AE WITH MACRON
-\setcclcuc 01E3 01E3 01E2 % LATIN SMALL LETTER AE WITH MACRON
-\setcclcuc 01E4 01E5 01E4 % LATIN CAPITAL LETTER G WITH STROKE
-\setcclcuc 01E5 01E5 01E4 % LATIN SMALL LETTER G WITH STROKE
-\setcclcuc 01E6 01E7 01E6 % LATIN CAPITAL LETTER G WITH CARON
-\setcclcuc 01E7 01E7 01E6 % LATIN SMALL LETTER G WITH CARON
-\setcclcuc 01E8 01E9 01E8 % LATIN CAPITAL LETTER K WITH CARON
-\setcclcuc 01E9 01E9 01E8 % LATIN SMALL LETTER K WITH CARON
-\setcclcuc 01EA 01EB 01EA % LATIN CAPITAL LETTER O WITH OGONEK
-\setcclcuc 01EB 01EB 01EA % LATIN SMALL LETTER O WITH OGONEK
-\setcclcuc 01EC 01ED 01EC % LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
-\setcclcuc 01ED 01ED 01EC % LATIN SMALL LETTER O WITH OGONEK AND MACRON
-\setcclcuc 01EE 01EF 01EE % LATIN CAPITAL LETTER EZH WITH CARON
-\setcclcuc 01EF 01EF 01EE % LATIN SMALL LETTER EZH WITH CARON
-\setcclcuc 01F0 01F0 01F0 % LATIN SMALL LETTER J WITH CARON
-\setcclcuc 01F1 01F3 01F2 % LATIN CAPITAL LETTER DZ
-\setcclcuc 01F2 01F3 01F1 % LATIN CAPITAL LETTER D WITH SMALL LETTER Z
-\setcclcuc 01F3 01F3 01F1 % LATIN SMALL LETTER DZ
-\setcclcuc 01F4 01F5 01F4 % LATIN CAPITAL LETTER G WITH ACUTE
-\setcclcuc 01F5 01F5 01F4 % LATIN SMALL LETTER G WITH ACUTE
-\setcclcuc 01F6 0195 01F6 % LATIN CAPITAL LETTER HWAIR
-\setcclcuc 01F7 01BF 01F7 % LATIN CAPITAL LETTER WYNN
-\setcclcuc 01F8 01F9 01F8 % LATIN CAPITAL LETTER N WITH GRAVE
-\setcclcuc 01F9 01F9 01F8 % LATIN SMALL LETTER N WITH GRAVE
-\setcclcuc 01FA 01FB 01FA % LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
-\setcclcuc 01FB 01FB 01FA % LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
-\setcclcuc 01FC 01FD 01FC % LATIN CAPITAL LETTER AE WITH ACUTE
-\setcclcuc 01FD 01FD 01FC % LATIN SMALL LETTER AE WITH ACUTE
-\setcclcuc 01FE 01FF 01FE % LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
-\setcclcuc 01FF 01FF 01FE % LATIN SMALL LETTER O WITH STROKE AND ACUTE
-\setcclcuc 0200 0201 0200 % LATIN CAPITAL LETTER A WITH DOUBLE GRAVE
-\setcclcuc 0201 0201 0200 % LATIN SMALL LETTER A WITH DOUBLE GRAVE
-\setcclcuc 0202 0203 0202 % LATIN CAPITAL LETTER A WITH INVERTED BREVE
-\setcclcuc 0203 0203 0202 % LATIN SMALL LETTER A WITH INVERTED BREVE
-\setcclcuc 0204 0205 0204 % LATIN CAPITAL LETTER E WITH DOUBLE GRAVE
-\setcclcuc 0205 0205 0204 % LATIN SMALL LETTER E WITH DOUBLE GRAVE
-\setcclcuc 0206 0207 0206 % LATIN CAPITAL LETTER E WITH INVERTED BREVE
-\setcclcuc 0207 0207 0206 % LATIN SMALL LETTER E WITH INVERTED BREVE
-\setcclcuc 0208 0209 0208 % LATIN CAPITAL LETTER I WITH DOUBLE GRAVE
-\setcclcuc 0209 0209 0208 % LATIN SMALL LETTER I WITH DOUBLE GRAVE
-\setcclcuc 020A 020B 020A % LATIN CAPITAL LETTER I WITH INVERTED BREVE
-\setcclcuc 020B 020B 020A % LATIN SMALL LETTER I WITH INVERTED BREVE
-\setcclcuc 020C 020D 020C % LATIN CAPITAL LETTER O WITH DOUBLE GRAVE
-\setcclcuc 020D 020D 020C % LATIN SMALL LETTER O WITH DOUBLE GRAVE
-\setcclcuc 020E 020F 020E % LATIN CAPITAL LETTER O WITH INVERTED BREVE
-\setcclcuc 020F 020F 020E % LATIN SMALL LETTER O WITH INVERTED BREVE
-\setcclcuc 0210 0211 0210 % LATIN CAPITAL LETTER R WITH DOUBLE GRAVE
-\setcclcuc 0211 0211 0210 % LATIN SMALL LETTER R WITH DOUBLE GRAVE
-\setcclcuc 0212 0213 0212 % LATIN CAPITAL LETTER R WITH INVERTED BREVE
-\setcclcuc 0213 0213 0212 % LATIN SMALL LETTER R WITH INVERTED BREVE
-\setcclcuc 0214 0215 0214 % LATIN CAPITAL LETTER U WITH DOUBLE GRAVE
-\setcclcuc 0215 0215 0214 % LATIN SMALL LETTER U WITH DOUBLE GRAVE
-\setcclcuc 0216 0217 0216 % LATIN CAPITAL LETTER U WITH INVERTED BREVE
-\setcclcuc 0217 0217 0216 % LATIN SMALL LETTER U WITH INVERTED BREVE
-\setcclcuc 0218 0219 0218 % LATIN CAPITAL LETTER S WITH COMMA BELOW
-\setcclcuc 0219 0219 0218 % LATIN SMALL LETTER S WITH COMMA BELOW
-\setcclcuc 021A 021B 021A % LATIN CAPITAL LETTER T WITH COMMA BELOW
-\setcclcuc 021B 021B 021A % LATIN SMALL LETTER T WITH COMMA BELOW
-\setcclcuc 021C 021D 021C % LATIN CAPITAL LETTER YOGH
-\setcclcuc 021D 021D 021C % LATIN SMALL LETTER YOGH
-\setcclcuc 021E 021F 021E % LATIN CAPITAL LETTER H WITH CARON
-\setcclcuc 021F 021F 021E % LATIN SMALL LETTER H WITH CARON
-\setcclcuc 0220 019E 0220 % LATIN CAPITAL LETTER N WITH LONG RIGHT LEG
-\setcclcuc 0221 0221 0221 % LATIN SMALL LETTER D WITH CURL
-\setcclcuc 0222 0223 0222 % LATIN CAPITAL LETTER OU
-\setcclcuc 0223 0223 0222 % LATIN SMALL LETTER OU
-\setcclcuc 0224 0225 0224 % LATIN CAPITAL LETTER Z WITH HOOK
-\setcclcuc 0225 0225 0224 % LATIN SMALL LETTER Z WITH HOOK
-\setcclcuc 0226 0227 0226 % LATIN CAPITAL LETTER A WITH DOT ABOVE
-\setcclcuc 0227 0227 0226 % LATIN SMALL LETTER A WITH DOT ABOVE
-\setcclcuc 0228 0229 0228 % LATIN CAPITAL LETTER E WITH CEDILLA
-\setcclcuc 0229 0229 0228 % LATIN SMALL LETTER E WITH CEDILLA
-\setcclcuc 022A 022B 022A % LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
-\setcclcuc 022B 022B 022A % LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
-\setcclcuc 022C 022D 022C % LATIN CAPITAL LETTER O WITH TILDE AND MACRON
-\setcclcuc 022D 022D 022C % LATIN SMALL LETTER O WITH TILDE AND MACRON
-\setcclcuc 022E 022F 022E % LATIN CAPITAL LETTER O WITH DOT ABOVE
-\setcclcuc 022F 022F 022E % LATIN SMALL LETTER O WITH DOT ABOVE
-\setcclcuc 0230 0231 0230 % LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
-\setcclcuc 0231 0231 0230 % LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
-\setcclcuc 0232 0233 0232 % LATIN CAPITAL LETTER Y WITH MACRON
-\setcclcuc 0233 0233 0232 % LATIN SMALL LETTER Y WITH MACRON
-\setcclcuc 0234 0234 0234 % LATIN SMALL LETTER L WITH CURL
-\setcclcuc 0235 0235 0235 % LATIN SMALL LETTER N WITH CURL
-\setcclcuc 0236 0236 0236 % LATIN SMALL LETTER T WITH CURL
-\setcclcuc 0237 0237 0237 % LATIN SMALL LETTER DOTLESS J
-\setcclcuc 0238 0238 0238 % LATIN SMALL LETTER DB DIGRAPH
-\setcclcuc 0239 0239 0239 % LATIN SMALL LETTER QP DIGRAPH
-\setcclcuc 023A 2C65 023A % LATIN CAPITAL LETTER A WITH STROKE
-\setcclcuc 023B 023C 023B % LATIN CAPITAL LETTER C WITH STROKE
-\setcclcuc 023C 023C 023B % LATIN SMALL LETTER C WITH STROKE
-\setcclcuc 023D 019A 023D % LATIN CAPITAL LETTER L WITH BAR
-\setcclcuc 023E 2C66 023E % LATIN CAPITAL LETTER T WITH DIAGONAL STROKE
-\setcclcuc 023F 023F 023F % LATIN SMALL LETTER S WITH SWASH TAIL
-\setcclcuc 0240 0240 0240 % LATIN SMALL LETTER Z WITH SWASH TAIL
-\setcclcuc 0241 0242 0241 % LATIN CAPITAL LETTER GLOTTAL STOP
-\setcclcuc 0242 0242 0241 % LATIN SMALL LETTER GLOTTAL STOP
-\setcclcuc 0243 0180 0243 % LATIN CAPITAL LETTER B WITH STROKE
-\setcclcuc 0244 0289 0244 % LATIN CAPITAL LETTER U BAR
-\setcclcuc 0245 028C 0245 % LATIN CAPITAL LETTER TURNED V
-\setcclcuc 0246 0247 0246 % LATIN CAPITAL LETTER E WITH STROKE
-\setcclcuc 0247 0247 0246 % LATIN SMALL LETTER E WITH STROKE
-\setcclcuc 0248 0249 0248 % LATIN CAPITAL LETTER J WITH STROKE
-\setcclcuc 0249 0249 0248 % LATIN SMALL LETTER J WITH STROKE
-\setcclcuc 024A 024B 024A % LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL
-\setcclcuc 024B 024B 024A % LATIN SMALL LETTER Q WITH HOOK TAIL
-\setcclcuc 024C 024D 024C % LATIN CAPITAL LETTER R WITH STROKE
-\setcclcuc 024D 024D 024C % LATIN SMALL LETTER R WITH STROKE
-\setcclcuc 024E 024F 024E % LATIN CAPITAL LETTER Y WITH STROKE
-\setcclcuc 024F 024F 024E % LATIN SMALL LETTER Y WITH STROKE
-\setcclcuc 0250 0250 0250 % LATIN SMALL LETTER TURNED A
-\setcclcuc 0251 0251 0251 % LATIN SMALL LETTER ALPHA
-\setcclcuc 0252 0252 0252 % LATIN SMALL LETTER TURNED ALPHA
-\setcclcuc 0253 0253 0181 % LATIN SMALL LETTER B WITH HOOK
-\setcclcuc 0254 0254 0186 % LATIN SMALL LETTER OPEN O
-\setcclcuc 0255 0255 0255 % LATIN SMALL LETTER C WITH CURL
-\setcclcuc 0256 0256 0189 % LATIN SMALL LETTER D WITH TAIL
-\setcclcuc 0257 0257 018A % LATIN SMALL LETTER D WITH HOOK
-\setcclcuc 0258 0258 0258 % LATIN SMALL LETTER REVERSED E
-\setcclcuc 0259 0259 018F % LATIN SMALL LETTER SCHWA
-\setcclcuc 025A 025A 025A % LATIN SMALL LETTER SCHWA WITH HOOK
-\setcclcuc 025B 025B 0190 % LATIN SMALL LETTER OPEN E
-\setcclcuc 025C 025C 025C % LATIN SMALL LETTER REVERSED OPEN E
-\setcclcuc 025D 025D 025D % LATIN SMALL LETTER REVERSED OPEN E WITH HOOK
-\setcclcuc 025E 025E 025E % LATIN SMALL LETTER CLOSED REVERSED OPEN E
-\setcclcuc 025F 025F 025F % LATIN SMALL LETTER DOTLESS J WITH STROKE
-\setcclcuc 0260 0260 0193 % LATIN SMALL LETTER G WITH HOOK
-\setcclcuc 0261 0261 0261 % LATIN SMALL LETTER SCRIPT G
-\setcclcuc 0262 0262 0262 % LATIN LETTER SMALL CAPITAL G
-\setcclcuc 0263 0263 0194 % LATIN SMALL LETTER GAMMA
-\setcclcuc 0264 0264 0264 % LATIN SMALL LETTER RAMS HORN
-\setcclcuc 0265 0265 0265 % LATIN SMALL LETTER TURNED H
-\setcclcuc 0266 0266 0266 % LATIN SMALL LETTER H WITH HOOK
-\setcclcuc 0267 0267 0267 % LATIN SMALL LETTER HENG WITH HOOK
-\setcclcuc 0268 0268 0197 % LATIN SMALL LETTER I WITH STROKE
-\setcclcuc 0269 0269 0196 % LATIN SMALL LETTER IOTA
-\setcclcuc 026A 026A 026A % LATIN LETTER SMALL CAPITAL I
-\setcclcuc 026B 026B 2C62 % LATIN SMALL LETTER L WITH MIDDLE TILDE
-\setcclcuc 026C 026C 026C % LATIN SMALL LETTER L WITH BELT
-\setcclcuc 026D 026D 026D % LATIN SMALL LETTER L WITH RETROFLEX HOOK
-\setcclcuc 026E 026E 026E % LATIN SMALL LETTER LEZH
-\setcclcuc 026F 026F 019C % LATIN SMALL LETTER TURNED M
-\setcclcuc 0270 0270 0270 % LATIN SMALL LETTER TURNED M WITH LONG LEG
-\setcclcuc 0271 0271 0271 % LATIN SMALL LETTER M WITH HOOK
-\setcclcuc 0272 0272 019D % LATIN SMALL LETTER N WITH LEFT HOOK
-\setcclcuc 0273 0273 0273 % LATIN SMALL LETTER N WITH RETROFLEX HOOK
-\setcclcuc 0274 0274 0274 % LATIN LETTER SMALL CAPITAL N
-\setcclcuc 0275 0275 019F % LATIN SMALL LETTER BARRED O
-\setcclcuc 0276 0276 0276 % LATIN LETTER SMALL CAPITAL OE
-\setcclcuc 0277 0277 0277 % LATIN SMALL LETTER CLOSED OMEGA
-\setcclcuc 0278 0278 0278 % LATIN SMALL LETTER PHI
-\setcclcuc 0279 0279 0279 % LATIN SMALL LETTER TURNED R
-\setcclcuc 027A 027A 027A % LATIN SMALL LETTER TURNED R WITH LONG LEG
-\setcclcuc 027B 027B 027B % LATIN SMALL LETTER TURNED R WITH HOOK
-\setcclcuc 027C 027C 027C % LATIN SMALL LETTER R WITH LONG LEG
-\setcclcuc 027D 027D 2C64 % LATIN SMALL LETTER R WITH TAIL
-\setcclcuc 027E 027E 027E % LATIN SMALL LETTER R WITH FISHHOOK
-\setcclcuc 027F 027F 027F % LATIN SMALL LETTER REVERSED R WITH FISHHOOK
-\setcclcuc 0280 0280 01A6 % LATIN LETTER SMALL CAPITAL R
-\setcclcuc 0281 0281 0281 % LATIN LETTER SMALL CAPITAL INVERTED R
-\setcclcuc 0282 0282 0282 % LATIN SMALL LETTER S WITH HOOK
-\setcclcuc 0283 0283 01A9 % LATIN SMALL LETTER ESH
-\setcclcuc 0284 0284 0284 % LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK
-\setcclcuc 0285 0285 0285 % LATIN SMALL LETTER SQUAT REVERSED ESH
-\setcclcuc 0286 0286 0286 % LATIN SMALL LETTER ESH WITH CURL
-\setcclcuc 0287 0287 0287 % LATIN SMALL LETTER TURNED T
-\setcclcuc 0288 0288 01AE % LATIN SMALL LETTER T WITH RETROFLEX HOOK
-\setcclcuc 0289 0289 0244 % LATIN SMALL LETTER U BAR
-\setcclcuc 028A 028A 01B1 % LATIN SMALL LETTER UPSILON
-\setcclcuc 028B 028B 01B2 % LATIN SMALL LETTER V WITH HOOK
-\setcclcuc 028C 028C 0245 % LATIN SMALL LETTER TURNED V
-\setcclcuc 028D 028D 028D % LATIN SMALL LETTER TURNED W
-\setcclcuc 028E 028E 028E % LATIN SMALL LETTER TURNED Y
-\setcclcuc 028F 028F 028F % LATIN LETTER SMALL CAPITAL Y
-\setcclcuc 0290 0290 0290 % LATIN SMALL LETTER Z WITH RETROFLEX HOOK
-\setcclcuc 0291 0291 0291 % LATIN SMALL LETTER Z WITH CURL
-\setcclcuc 0292 0292 01B7 % LATIN SMALL LETTER EZH
-\setcclcuc 0293 0293 0293 % LATIN SMALL LETTER EZH WITH CURL
-\setcclcuc 0295 0295 0295 % LATIN LETTER PHARYNGEAL VOICED FRICATIVE
-\setcclcuc 0296 0296 0296 % LATIN LETTER INVERTED GLOTTAL STOP
-\setcclcuc 0297 0297 0297 % LATIN LETTER STRETCHED C
-\setcclcuc 0298 0298 0298 % LATIN LETTER BILABIAL CLICK
-\setcclcuc 0299 0299 0299 % LATIN LETTER SMALL CAPITAL B
-\setcclcuc 029A 029A 029A % LATIN SMALL LETTER CLOSED OPEN E
-\setcclcuc 029B 029B 029B % LATIN LETTER SMALL CAPITAL G WITH HOOK
-\setcclcuc 029C 029C 029C % LATIN LETTER SMALL CAPITAL H
-\setcclcuc 029D 029D 029D % LATIN SMALL LETTER J WITH CROSSED-TAIL
-\setcclcuc 029E 029E 029E % LATIN SMALL LETTER TURNED K
-\setcclcuc 029F 029F 029F % LATIN LETTER SMALL CAPITAL L
-\setcclcuc 02A0 02A0 02A0 % LATIN SMALL LETTER Q WITH HOOK
-\setcclcuc 02A1 02A1 02A1 % LATIN LETTER GLOTTAL STOP WITH STROKE
-\setcclcuc 02A2 02A2 02A2 % LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE
-\setcclcuc 02A3 02A3 02A3 % LATIN SMALL LETTER DZ DIGRAPH
-\setcclcuc 02A4 02A4 02A4 % LATIN SMALL LETTER DEZH DIGRAPH
-\setcclcuc 02A5 02A5 02A5 % LATIN SMALL LETTER DZ DIGRAPH WITH CURL
-\setcclcuc 02A6 02A6 02A6 % LATIN SMALL LETTER TS DIGRAPH
-\setcclcuc 02A7 02A7 02A7 % LATIN SMALL LETTER TESH DIGRAPH
-\setcclcuc 02A8 02A8 02A8 % LATIN SMALL LETTER TC DIGRAPH WITH CURL
-\setcclcuc 02A9 02A9 02A9 % LATIN SMALL LETTER FENG DIGRAPH
-\setcclcuc 02AA 02AA 02AA % LATIN SMALL LETTER LS DIGRAPH
-\setcclcuc 02AB 02AB 02AB % LATIN SMALL LETTER LZ DIGRAPH
-\setcclcuc 02AC 02AC 02AC % LATIN LETTER BILABIAL PERCUSSIVE
-\setcclcuc 02AD 02AD 02AD % LATIN LETTER BIDENTAL PERCUSSIVE
-\setcclcuc 02AE 02AE 02AE % LATIN SMALL LETTER TURNED H WITH FISHHOOK
-\setcclcuc 02AF 02AF 02AF % LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL
-\setcclcuc 037B 037B 03FD % GREEK SMALL REVERSED LUNATE SIGMA SYMBOL
-\setcclcuc 037C 037C 03FE % GREEK SMALL DOTTED LUNATE SIGMA SYMBOL
-\setcclcuc 037D 037D 03FF % GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL
-\setcclcuc 0386 03AC 0386 % GREEK CAPITAL LETTER ALPHA WITH TONOS
-\setcclcuc 0388 03AD 0388 % GREEK CAPITAL LETTER EPSILON WITH TONOS
-\setcclcuc 0389 03AE 0389 % GREEK CAPITAL LETTER ETA WITH TONOS
-\setcclcuc 038A 03AF 038A % GREEK CAPITAL LETTER IOTA WITH TONOS
-\setcclcuc 038C 03CC 038C % GREEK CAPITAL LETTER OMICRON WITH TONOS
-\setcclcuc 038E 03CD 038E % GREEK CAPITAL LETTER UPSILON WITH TONOS
-\setcclcuc 038F 03CE 038F % GREEK CAPITAL LETTER OMEGA WITH TONOS
-\setcclcuc 0390 0390 0390 % GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
-\setcclcuc 0391 03B1 0391 % GREEK CAPITAL LETTER ALPHA
-\setcclcuc 0392 03B2 0392 % GREEK CAPITAL LETTER BETA
-\setcclcuc 0393 03B3 0393 % GREEK CAPITAL LETTER GAMMA
-\setcclcuc 0394 03B4 0394 % GREEK CAPITAL LETTER DELTA
-\setcclcuc 0395 03B5 0395 % GREEK CAPITAL LETTER EPSILON
-\setcclcuc 0396 03B6 0396 % GREEK CAPITAL LETTER ZETA
-\setcclcuc 0397 03B7 0397 % GREEK CAPITAL LETTER ETA
-\setcclcuc 0398 03B8 0398 % GREEK CAPITAL LETTER THETA
-\setcclcuc 0399 03B9 0399 % GREEK CAPITAL LETTER IOTA
-\setcclcuc 039A 03BA 039A % GREEK CAPITAL LETTER KAPPA
-\setcclcuc 039B 03BB 039B % GREEK CAPITAL LETTER LAMDA
-\setcclcuc 039C 03BC 039C % GREEK CAPITAL LETTER MU
-\setcclcuc 039D 03BD 039D % GREEK CAPITAL LETTER NU
-\setcclcuc 039E 03BE 039E % GREEK CAPITAL LETTER XI
-\setcclcuc 039F 03BF 039F % GREEK CAPITAL LETTER OMICRON
-\setcclcuc 03A0 03C0 03A0 % GREEK CAPITAL LETTER PI
-\setcclcuc 03A1 03C1 03A1 % GREEK CAPITAL LETTER RHO
-\setcclcuc 03A3 03C3 03A3 % GREEK CAPITAL LETTER SIGMA
-\setcclcuc 03A4 03C4 03A4 % GREEK CAPITAL LETTER TAU
-\setcclcuc 03A5 03C5 03A5 % GREEK CAPITAL LETTER UPSILON
-\setcclcuc 03A6 03C6 03A6 % GREEK CAPITAL LETTER PHI
-\setcclcuc 03A7 03C7 03A7 % GREEK CAPITAL LETTER CHI
-\setcclcuc 03A8 03C8 03A8 % GREEK CAPITAL LETTER PSI
-\setcclcuc 03A9 03C9 03A9 % GREEK CAPITAL LETTER OMEGA
-\setcclcuc 03AA 03CA 03AA % GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
-\setcclcuc 03AB 03CB 03AB % GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
-\setcclcuc 03AC 03AC 0386 % GREEK SMALL LETTER ALPHA WITH TONOS
-\setcclcuc 03AD 03AD 0388 % GREEK SMALL LETTER EPSILON WITH TONOS
-\setcclcuc 03AE 03AE 0389 % GREEK SMALL LETTER ETA WITH TONOS
-\setcclcuc 03AF 03AF 038A % GREEK SMALL LETTER IOTA WITH TONOS
-\setcclcuc 03B0 03B0 03B0 % GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
-\setcclcuc 03B1 03B1 0391 % GREEK SMALL LETTER ALPHA
-\setcclcuc 03B2 03B2 0392 % GREEK SMALL LETTER BETA
-\setcclcuc 03B3 03B3 0393 % GREEK SMALL LETTER GAMMA
-\setcclcuc 03B4 03B4 0394 % GREEK SMALL LETTER DELTA
-\setcclcuc 03B5 03B5 0395 % GREEK SMALL LETTER EPSILON
-\setcclcuc 03B6 03B6 0396 % GREEK SMALL LETTER ZETA
-\setcclcuc 03B7 03B7 0397 % GREEK SMALL LETTER ETA
-\setcclcuc 03B8 03B8 0398 % GREEK SMALL LETTER THETA
-\setcclcuc 03B9 03B9 0399 % GREEK SMALL LETTER IOTA
-\setcclcuc 03BA 03BA 039A % GREEK SMALL LETTER KAPPA
-\setcclcuc 03BB 03BB 039B % GREEK SMALL LETTER LAMDA
-\setcclcuc 03BC 03BC 039C % GREEK SMALL LETTER MU
-\setcclcuc 03BD 03BD 039D % GREEK SMALL LETTER NU
-\setcclcuc 03BE 03BE 039E % GREEK SMALL LETTER XI
-\setcclcuc 03BF 03BF 039F % GREEK SMALL LETTER OMICRON
-\setcclcuc 03C0 03C0 03A0 % GREEK SMALL LETTER PI
-\setcclcuc 03C1 03C1 03A1 % GREEK SMALL LETTER RHO
-\setcclcuc 03C2 03C2 03A3 % GREEK SMALL LETTER FINAL SIGMA
-\setcclcuc 03C3 03C3 03A3 % GREEK SMALL LETTER SIGMA
-\setcclcuc 03C4 03C4 03A4 % GREEK SMALL LETTER TAU
-\setcclcuc 03C5 03C5 03A5 % GREEK SMALL LETTER UPSILON
-\setcclcuc 03C6 03C6 03A6 % GREEK SMALL LETTER PHI
-\setcclcuc 03C7 03C7 03A7 % GREEK SMALL LETTER CHI
-\setcclcuc 03C8 03C8 03A8 % GREEK SMALL LETTER PSI
-\setcclcuc 03C9 03C9 03A9 % GREEK SMALL LETTER OMEGA
-\setcclcuc 03CA 03CA 03AA % GREEK SMALL LETTER IOTA WITH DIALYTIKA
-\setcclcuc 03CB 03CB 03AB % GREEK SMALL LETTER UPSILON WITH DIALYTIKA
-\setcclcuc 03CC 03CC 038C % GREEK SMALL LETTER OMICRON WITH TONOS
-\setcclcuc 03CD 03CD 038E % GREEK SMALL LETTER UPSILON WITH TONOS
-\setcclcuc 03CE 03CE 038F % GREEK SMALL LETTER OMEGA WITH TONOS
-\setcclcuc 03D0 03D0 0392 % GREEK BETA SYMBOL
-\setcclcuc 03D1 03D1 0398 % GREEK THETA SYMBOL
-\setcclcuc 03D2 03D2 03D2 % GREEK UPSILON WITH HOOK SYMBOL
-\setcclcuc 03D3 03D3 03D3 % GREEK UPSILON WITH ACUTE AND HOOK SYMBOL
-\setcclcuc 03D4 03D4 03D4 % GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL
-\setcclcuc 03D5 03D5 03A6 % GREEK PHI SYMBOL
-\setcclcuc 03D6 03D6 03A0 % GREEK PI SYMBOL
-\setcclcuc 03D7 03D7 03D7 % GREEK KAI SYMBOL
-\setcclcuc 03D8 03D9 03D8 % GREEK LETTER ARCHAIC KOPPA
-\setcclcuc 03D9 03D9 03D8 % GREEK SMALL LETTER ARCHAIC KOPPA
-\setcclcuc 03DA 03DB 03DA % GREEK LETTER STIGMA
-\setcclcuc 03DB 03DB 03DA % GREEK SMALL LETTER STIGMA
-\setcclcuc 03DC 03DD 03DC % GREEK LETTER DIGAMMA
-\setcclcuc 03DD 03DD 03DC % GREEK SMALL LETTER DIGAMMA
-\setcclcuc 03DE 03DF 03DE % GREEK LETTER KOPPA
-\setcclcuc 03DF 03DF 03DE % GREEK SMALL LETTER KOPPA
-\setcclcuc 03E0 03E1 03E0 % GREEK LETTER SAMPI
-\setcclcuc 03E1 03E1 03E0 % GREEK SMALL LETTER SAMPI
-\setcclcuc 03E2 03E3 03E2 % COPTIC CAPITAL LETTER SHEI
-\setcclcuc 03E3 03E3 03E2 % COPTIC SMALL LETTER SHEI
-\setcclcuc 03E4 03E5 03E4 % COPTIC CAPITAL LETTER FEI
-\setcclcuc 03E5 03E5 03E4 % COPTIC SMALL LETTER FEI
-\setcclcuc 03E6 03E7 03E6 % COPTIC CAPITAL LETTER KHEI
-\setcclcuc 03E7 03E7 03E6 % COPTIC SMALL LETTER KHEI
-\setcclcuc 03E8 03E9 03E8 % COPTIC CAPITAL LETTER HORI
-\setcclcuc 03E9 03E9 03E8 % COPTIC SMALL LETTER HORI
-\setcclcuc 03EA 03EB 03EA % COPTIC CAPITAL LETTER GANGIA
-\setcclcuc 03EB 03EB 03EA % COPTIC SMALL LETTER GANGIA
-\setcclcuc 03EC 03ED 03EC % COPTIC CAPITAL LETTER SHIMA
-\setcclcuc 03ED 03ED 03EC % COPTIC SMALL LETTER SHIMA
-\setcclcuc 03EE 03EF 03EE % COPTIC CAPITAL LETTER DEI
-\setcclcuc 03EF 03EF 03EE % COPTIC SMALL LETTER DEI
-\setcclcuc 03F0 03F0 039A % GREEK KAPPA SYMBOL
-\setcclcuc 03F1 03F1 03A1 % GREEK RHO SYMBOL
-\setcclcuc 03F2 03F2 03F9 % GREEK LUNATE SIGMA SYMBOL
-\setcclcuc 03F3 03F3 03F3 % GREEK LETTER YOT
-\setcclcuc 03F4 03B8 03F4 % GREEK CAPITAL THETA SYMBOL
-\setcclcuc 03F5 03F5 0395 % GREEK LUNATE EPSILON SYMBOL
-\setcclcuc 03F7 03F8 03F7 % GREEK CAPITAL LETTER SHO
-\setcclcuc 03F8 03F8 03F7 % GREEK SMALL LETTER SHO
-\setcclcuc 03F9 03F2 03F9 % GREEK CAPITAL LUNATE SIGMA SYMBOL
-\setcclcuc 03FA 03FB 03FA % GREEK CAPITAL LETTER SAN
-\setcclcuc 03FB 03FB 03FA % GREEK SMALL LETTER SAN
-\setcclcuc 03FC 03FC 03FC % GREEK RHO WITH STROKE SYMBOL
-\setcclcuc 03FD 037B 03FD % GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL
-\setcclcuc 03FE 037C 03FE % GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL
-\setcclcuc 03FF 037D 03FF % GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL
-\setcclcuc 0400 0450 0400 % CYRILLIC CAPITAL LETTER IE WITH GRAVE
-\setcclcuc 0401 0451 0401 % CYRILLIC CAPITAL LETTER IO
-\setcclcuc 0402 0452 0402 % CYRILLIC CAPITAL LETTER DJE
-\setcclcuc 0403 0453 0403 % CYRILLIC CAPITAL LETTER GJE
-\setcclcuc 0404 0454 0404 % CYRILLIC CAPITAL LETTER UKRAINIAN IE
-\setcclcuc 0405 0455 0405 % CYRILLIC CAPITAL LETTER DZE
-\setcclcuc 0406 0456 0406 % CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
-\setcclcuc 0407 0457 0407 % CYRILLIC CAPITAL LETTER YI
-\setcclcuc 0408 0458 0408 % CYRILLIC CAPITAL LETTER JE
-\setcclcuc 0409 0459 0409 % CYRILLIC CAPITAL LETTER LJE
-\setcclcuc 040A 045A 040A % CYRILLIC CAPITAL LETTER NJE
-\setcclcuc 040B 045B 040B % CYRILLIC CAPITAL LETTER TSHE
-\setcclcuc 040C 045C 040C % CYRILLIC CAPITAL LETTER KJE
-\setcclcuc 040D 045D 040D % CYRILLIC CAPITAL LETTER I WITH GRAVE
-\setcclcuc 040E 045E 040E % CYRILLIC CAPITAL LETTER SHORT U
-\setcclcuc 040F 045F 040F % CYRILLIC CAPITAL LETTER DZHE
-\setcclcuc 0410 0430 0410 % CYRILLIC CAPITAL LETTER A
-\setcclcuc 0411 0431 0411 % CYRILLIC CAPITAL LETTER BE
-\setcclcuc 0412 0432 0412 % CYRILLIC CAPITAL LETTER VE
-\setcclcuc 0413 0433 0413 % CYRILLIC CAPITAL LETTER GHE
-\setcclcuc 0414 0434 0414 % CYRILLIC CAPITAL LETTER DE
-\setcclcuc 0415 0435 0415 % CYRILLIC CAPITAL LETTER IE
-\setcclcuc 0416 0436 0416 % CYRILLIC CAPITAL LETTER ZHE
-\setcclcuc 0417 0437 0417 % CYRILLIC CAPITAL LETTER ZE
-\setcclcuc 0418 0438 0418 % CYRILLIC CAPITAL LETTER I
-\setcclcuc 0419 0439 0419 % CYRILLIC CAPITAL LETTER SHORT I
-\setcclcuc 041A 043A 041A % CYRILLIC CAPITAL LETTER KA
-\setcclcuc 041B 043B 041B % CYRILLIC CAPITAL LETTER EL
-\setcclcuc 041C 043C 041C % CYRILLIC CAPITAL LETTER EM
-\setcclcuc 041D 043D 041D % CYRILLIC CAPITAL LETTER EN
-\setcclcuc 041E 043E 041E % CYRILLIC CAPITAL LETTER O
-\setcclcuc 041F 043F 041F % CYRILLIC CAPITAL LETTER PE
-\setcclcuc 0420 0440 0420 % CYRILLIC CAPITAL LETTER ER
-\setcclcuc 0421 0441 0421 % CYRILLIC CAPITAL LETTER ES
-\setcclcuc 0422 0442 0422 % CYRILLIC CAPITAL LETTER TE
-\setcclcuc 0423 0443 0423 % CYRILLIC CAPITAL LETTER U
-\setcclcuc 0424 0444 0424 % CYRILLIC CAPITAL LETTER EF
-\setcclcuc 0425 0445 0425 % CYRILLIC CAPITAL LETTER HA
-\setcclcuc 0426 0446 0426 % CYRILLIC CAPITAL LETTER TSE
-\setcclcuc 0427 0447 0427 % CYRILLIC CAPITAL LETTER CHE
-\setcclcuc 0428 0448 0428 % CYRILLIC CAPITAL LETTER SHA
-\setcclcuc 0429 0449 0429 % CYRILLIC CAPITAL LETTER SHCHA
-\setcclcuc 042A 044A 042A % CYRILLIC CAPITAL LETTER HARD SIGN
-\setcclcuc 042B 044B 042B % CYRILLIC CAPITAL LETTER YERU
-\setcclcuc 042C 044C 042C % CYRILLIC CAPITAL LETTER SOFT SIGN
-\setcclcuc 042D 044D 042D % CYRILLIC CAPITAL LETTER E
-\setcclcuc 042E 044E 042E % CYRILLIC CAPITAL LETTER YU
-\setcclcuc 042F 044F 042F % CYRILLIC CAPITAL LETTER YA
-\setcclcuc 0430 0430 0410 % CYRILLIC SMALL LETTER A
-\setcclcuc 0431 0431 0411 % CYRILLIC SMALL LETTER BE
-\setcclcuc 0432 0432 0412 % CYRILLIC SMALL LETTER VE
-\setcclcuc 0433 0433 0413 % CYRILLIC SMALL LETTER GHE
-\setcclcuc 0434 0434 0414 % CYRILLIC SMALL LETTER DE
-\setcclcuc 0435 0435 0415 % CYRILLIC SMALL LETTER IE
-\setcclcuc 0436 0436 0416 % CYRILLIC SMALL LETTER ZHE
-\setcclcuc 0437 0437 0417 % CYRILLIC SMALL LETTER ZE
-\setcclcuc 0438 0438 0418 % CYRILLIC SMALL LETTER I
-\setcclcuc 0439 0439 0419 % CYRILLIC SMALL LETTER SHORT I
-\setcclcuc 043A 043A 041A % CYRILLIC SMALL LETTER KA
-\setcclcuc 043B 043B 041B % CYRILLIC SMALL LETTER EL
-\setcclcuc 043C 043C 041C % CYRILLIC SMALL LETTER EM
-\setcclcuc 043D 043D 041D % CYRILLIC SMALL LETTER EN
-\setcclcuc 043E 043E 041E % CYRILLIC SMALL LETTER O
-\setcclcuc 043F 043F 041F % CYRILLIC SMALL LETTER PE
-\setcclcuc 0440 0440 0420 % CYRILLIC SMALL LETTER ER
-\setcclcuc 0441 0441 0421 % CYRILLIC SMALL LETTER ES
-\setcclcuc 0442 0442 0422 % CYRILLIC SMALL LETTER TE
-\setcclcuc 0443 0443 0423 % CYRILLIC SMALL LETTER U
-\setcclcuc 0444 0444 0424 % CYRILLIC SMALL LETTER EF
-\setcclcuc 0445 0445 0425 % CYRILLIC SMALL LETTER HA
-\setcclcuc 0446 0446 0426 % CYRILLIC SMALL LETTER TSE
-\setcclcuc 0447 0447 0427 % CYRILLIC SMALL LETTER CHE
-\setcclcuc 0448 0448 0428 % CYRILLIC SMALL LETTER SHA
-\setcclcuc 0449 0449 0429 % CYRILLIC SMALL LETTER SHCHA
-\setcclcuc 044A 044A 042A % CYRILLIC SMALL LETTER HARD SIGN
-\setcclcuc 044B 044B 042B % CYRILLIC SMALL LETTER YERU
-\setcclcuc 044C 044C 042C % CYRILLIC SMALL LETTER SOFT SIGN
-\setcclcuc 044D 044D 042D % CYRILLIC SMALL LETTER E
-\setcclcuc 044E 044E 042E % CYRILLIC SMALL LETTER YU
-\setcclcuc 044F 044F 042F % CYRILLIC SMALL LETTER YA
-\setcclcuc 0450 0450 0400 % CYRILLIC SMALL LETTER IE WITH GRAVE
-\setcclcuc 0451 0451 0401 % CYRILLIC SMALL LETTER IO
-\setcclcuc 0452 0452 0402 % CYRILLIC SMALL LETTER DJE
-\setcclcuc 0453 0453 0403 % CYRILLIC SMALL LETTER GJE
-\setcclcuc 0454 0454 0404 % CYRILLIC SMALL LETTER UKRAINIAN IE
-\setcclcuc 0455 0455 0405 % CYRILLIC SMALL LETTER DZE
-\setcclcuc 0456 0456 0406 % CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
-\setcclcuc 0457 0457 0407 % CYRILLIC SMALL LETTER YI
-\setcclcuc 0458 0458 0408 % CYRILLIC SMALL LETTER JE
-\setcclcuc 0459 0459 0409 % CYRILLIC SMALL LETTER LJE
-\setcclcuc 045A 045A 040A % CYRILLIC SMALL LETTER NJE
-\setcclcuc 045B 045B 040B % CYRILLIC SMALL LETTER TSHE
-\setcclcuc 045C 045C 040C % CYRILLIC SMALL LETTER KJE
-\setcclcuc 045D 045D 040D % CYRILLIC SMALL LETTER I WITH GRAVE
-\setcclcuc 045E 045E 040E % CYRILLIC SMALL LETTER SHORT U
-\setcclcuc 045F 045F 040F % CYRILLIC SMALL LETTER DZHE
-\setcclcuc 0460 0461 0460 % CYRILLIC CAPITAL LETTER OMEGA
-\setcclcuc 0461 0461 0460 % CYRILLIC SMALL LETTER OMEGA
-\setcclcuc 0462 0463 0462 % CYRILLIC CAPITAL LETTER YAT
-\setcclcuc 0463 0463 0462 % CYRILLIC SMALL LETTER YAT
-\setcclcuc 0464 0465 0464 % CYRILLIC CAPITAL LETTER IOTIFIED E
-\setcclcuc 0465 0465 0464 % CYRILLIC SMALL LETTER IOTIFIED E
-\setcclcuc 0466 0467 0466 % CYRILLIC CAPITAL LETTER LITTLE YUS
-\setcclcuc 0467 0467 0466 % CYRILLIC SMALL LETTER LITTLE YUS
-\setcclcuc 0468 0469 0468 % CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS
-\setcclcuc 0469 0469 0468 % CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS
-\setcclcuc 046A 046B 046A % CYRILLIC CAPITAL LETTER BIG YUS
-\setcclcuc 046B 046B 046A % CYRILLIC SMALL LETTER BIG YUS
-\setcclcuc 046C 046D 046C % CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS
-\setcclcuc 046D 046D 046C % CYRILLIC SMALL LETTER IOTIFIED BIG YUS
-\setcclcuc 046E 046F 046E % CYRILLIC CAPITAL LETTER KSI
-\setcclcuc 046F 046F 046E % CYRILLIC SMALL LETTER KSI
-\setcclcuc 0470 0471 0470 % CYRILLIC CAPITAL LETTER PSI
-\setcclcuc 0471 0471 0470 % CYRILLIC SMALL LETTER PSI
-\setcclcuc 0472 0473 0472 % CYRILLIC CAPITAL LETTER FITA
-\setcclcuc 0473 0473 0472 % CYRILLIC SMALL LETTER FITA
-\setcclcuc 0474 0475 0474 % CYRILLIC CAPITAL LETTER IZHITSA
-\setcclcuc 0475 0475 0474 % CYRILLIC SMALL LETTER IZHITSA
-\setcclcuc 0476 0477 0476 % CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
-\setcclcuc 0477 0477 0476 % CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
-\setcclcuc 0478 0479 0478 % CYRILLIC CAPITAL LETTER UK
-\setcclcuc 0479 0479 0478 % CYRILLIC SMALL LETTER UK
-\setcclcuc 047A 047B 047A % CYRILLIC CAPITAL LETTER ROUND OMEGA
-\setcclcuc 047B 047B 047A % CYRILLIC SMALL LETTER ROUND OMEGA
-\setcclcuc 047C 047D 047C % CYRILLIC CAPITAL LETTER OMEGA WITH TITLO
-\setcclcuc 047D 047D 047C % CYRILLIC SMALL LETTER OMEGA WITH TITLO
-\setcclcuc 047E 047F 047E % CYRILLIC CAPITAL LETTER OT
-\setcclcuc 047F 047F 047E % CYRILLIC SMALL LETTER OT
-\setcclcuc 0480 0481 0480 % CYRILLIC CAPITAL LETTER KOPPA
-\setcclcuc 0481 0481 0480 % CYRILLIC SMALL LETTER KOPPA
-\setcclcuc 048A 048B 048A % CYRILLIC CAPITAL LETTER SHORT I WITH TAIL
-\setcclcuc 048B 048B 048A % CYRILLIC SMALL LETTER SHORT I WITH TAIL
-\setcclcuc 048C 048D 048C % CYRILLIC CAPITAL LETTER SEMISOFT SIGN
-\setcclcuc 048D 048D 048C % CYRILLIC SMALL LETTER SEMISOFT SIGN
-\setcclcuc 048E 048F 048E % CYRILLIC CAPITAL LETTER ER WITH TICK
-\setcclcuc 048F 048F 048E % CYRILLIC SMALL LETTER ER WITH TICK
-\setcclcuc 0490 0491 0490 % CYRILLIC CAPITAL LETTER GHE WITH UPTURN
-\setcclcuc 0491 0491 0490 % CYRILLIC SMALL LETTER GHE WITH UPTURN
-\setcclcuc 0492 0493 0492 % CYRILLIC CAPITAL LETTER GHE WITH STROKE
-\setcclcuc 0493 0493 0492 % CYRILLIC SMALL LETTER GHE WITH STROKE
-\setcclcuc 0494 0495 0494 % CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK
-\setcclcuc 0495 0495 0494 % CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK
-\setcclcuc 0496 0497 0496 % CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER
-\setcclcuc 0497 0497 0496 % CYRILLIC SMALL LETTER ZHE WITH DESCENDER
-\setcclcuc 0498 0499 0498 % CYRILLIC CAPITAL LETTER ZE WITH DESCENDER
-\setcclcuc 0499 0499 0498 % CYRILLIC SMALL LETTER ZE WITH DESCENDER
-\setcclcuc 049A 049B 049A % CYRILLIC CAPITAL LETTER KA WITH DESCENDER
-\setcclcuc 049B 049B 049A % CYRILLIC SMALL LETTER KA WITH DESCENDER
-\setcclcuc 049C 049D 049C % CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE
-\setcclcuc 049D 049D 049C % CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE
-\setcclcuc 049E 049F 049E % CYRILLIC CAPITAL LETTER KA WITH STROKE
-\setcclcuc 049F 049F 049E % CYRILLIC SMALL LETTER KA WITH STROKE
-\setcclcuc 04A0 04A1 04A0 % CYRILLIC CAPITAL LETTER BASHKIR KA
-\setcclcuc 04A1 04A1 04A0 % CYRILLIC SMALL LETTER BASHKIR KA
-\setcclcuc 04A2 04A3 04A2 % CYRILLIC CAPITAL LETTER EN WITH DESCENDER
-\setcclcuc 04A3 04A3 04A2 % CYRILLIC SMALL LETTER EN WITH DESCENDER
-\setcclcuc 04A4 04A5 04A4 % CYRILLIC CAPITAL LIGATURE EN GHE
-\setcclcuc 04A5 04A5 04A4 % CYRILLIC SMALL LIGATURE EN GHE
-\setcclcuc 04A6 04A7 04A6 % CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK
-\setcclcuc 04A7 04A7 04A6 % CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK
-\setcclcuc 04A8 04A9 04A8 % CYRILLIC CAPITAL LETTER ABKHASIAN HA
-\setcclcuc 04A9 04A9 04A8 % CYRILLIC SMALL LETTER ABKHASIAN HA
-\setcclcuc 04AA 04AB 04AA % CYRILLIC CAPITAL LETTER ES WITH DESCENDER
-\setcclcuc 04AB 04AB 04AA % CYRILLIC SMALL LETTER ES WITH DESCENDER
-\setcclcuc 04AC 04AD 04AC % CYRILLIC CAPITAL LETTER TE WITH DESCENDER
-\setcclcuc 04AD 04AD 04AC % CYRILLIC SMALL LETTER TE WITH DESCENDER
-\setcclcuc 04AE 04AF 04AE % CYRILLIC CAPITAL LETTER STRAIGHT U
-\setcclcuc 04AF 04AF 04AE % CYRILLIC SMALL LETTER STRAIGHT U
-\setcclcuc 04B0 04B1 04B0 % CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE
-\setcclcuc 04B1 04B1 04B0 % CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE
-\setcclcuc 04B2 04B3 04B2 % CYRILLIC CAPITAL LETTER HA WITH DESCENDER
-\setcclcuc 04B3 04B3 04B2 % CYRILLIC SMALL LETTER HA WITH DESCENDER
-\setcclcuc 04B4 04B5 04B4 % CYRILLIC CAPITAL LIGATURE TE TSE
-\setcclcuc 04B5 04B5 04B4 % CYRILLIC SMALL LIGATURE TE TSE
-\setcclcuc 04B6 04B7 04B6 % CYRILLIC CAPITAL LETTER CHE WITH DESCENDER
-\setcclcuc 04B7 04B7 04B6 % CYRILLIC SMALL LETTER CHE WITH DESCENDER
-\setcclcuc 04B8 04B9 04B8 % CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE
-\setcclcuc 04B9 04B9 04B8 % CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE
-\setcclcuc 04BA 04BB 04BA % CYRILLIC CAPITAL LETTER SHHA
-\setcclcuc 04BB 04BB 04BA % CYRILLIC SMALL LETTER SHHA
-\setcclcuc 04BC 04BD 04BC % CYRILLIC CAPITAL LETTER ABKHASIAN CHE
-\setcclcuc 04BD 04BD 04BC % CYRILLIC SMALL LETTER ABKHASIAN CHE
-\setcclcuc 04BE 04BF 04BE % CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER
-\setcclcuc 04BF 04BF 04BE % CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER
-\setcclcuc 04C0 04CF 04C0 % CYRILLIC LETTER PALOCHKA
-\setcclcuc 04C1 04C2 04C1 % CYRILLIC CAPITAL LETTER ZHE WITH BREVE
-\setcclcuc 04C2 04C2 04C1 % CYRILLIC SMALL LETTER ZHE WITH BREVE
-\setcclcuc 04C3 04C4 04C3 % CYRILLIC CAPITAL LETTER KA WITH HOOK
-\setcclcuc 04C4 04C4 04C3 % CYRILLIC SMALL LETTER KA WITH HOOK
-\setcclcuc 04C5 04C6 04C5 % CYRILLIC CAPITAL LETTER EL WITH TAIL
-\setcclcuc 04C6 04C6 04C5 % CYRILLIC SMALL LETTER EL WITH TAIL
-\setcclcuc 04C7 04C8 04C7 % CYRILLIC CAPITAL LETTER EN WITH HOOK
-\setcclcuc 04C8 04C8 04C7 % CYRILLIC SMALL LETTER EN WITH HOOK
-\setcclcuc 04C9 04CA 04C9 % CYRILLIC CAPITAL LETTER EN WITH TAIL
-\setcclcuc 04CA 04CA 04C9 % CYRILLIC SMALL LETTER EN WITH TAIL
-\setcclcuc 04CB 04CC 04CB % CYRILLIC CAPITAL LETTER KHAKASSIAN CHE
-\setcclcuc 04CC 04CC 04CB % CYRILLIC SMALL LETTER KHAKASSIAN CHE
-\setcclcuc 04CD 04CE 04CD % CYRILLIC CAPITAL LETTER EM WITH TAIL
-\setcclcuc 04CE 04CE 04CD % CYRILLIC SMALL LETTER EM WITH TAIL
-\setcclcuc 04CF 04CF 04C0 % CYRILLIC SMALL LETTER PALOCHKA
-\setcclcuc 04D0 04D1 04D0 % CYRILLIC CAPITAL LETTER A WITH BREVE
-\setcclcuc 04D1 04D1 04D0 % CYRILLIC SMALL LETTER A WITH BREVE
-\setcclcuc 04D2 04D3 04D2 % CYRILLIC CAPITAL LETTER A WITH DIAERESIS
-\setcclcuc 04D3 04D3 04D2 % CYRILLIC SMALL LETTER A WITH DIAERESIS
-\setcclcuc 04D4 04D5 04D4 % CYRILLIC CAPITAL LIGATURE A IE
-\setcclcuc 04D5 04D5 04D4 % CYRILLIC SMALL LIGATURE A IE
-\setcclcuc 04D6 04D7 04D6 % CYRILLIC CAPITAL LETTER IE WITH BREVE
-\setcclcuc 04D7 04D7 04D6 % CYRILLIC SMALL LETTER IE WITH BREVE
-\setcclcuc 04D8 04D9 04D8 % CYRILLIC CAPITAL LETTER SCHWA
-\setcclcuc 04D9 04D9 04D8 % CYRILLIC SMALL LETTER SCHWA
-\setcclcuc 04DA 04DB 04DA % CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS
-\setcclcuc 04DB 04DB 04DA % CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS
-\setcclcuc 04DC 04DD 04DC % CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS
-\setcclcuc 04DD 04DD 04DC % CYRILLIC SMALL LETTER ZHE WITH DIAERESIS
-\setcclcuc 04DE 04DF 04DE % CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS
-\setcclcuc 04DF 04DF 04DE % CYRILLIC SMALL LETTER ZE WITH DIAERESIS
-\setcclcuc 04E0 04E1 04E0 % CYRILLIC CAPITAL LETTER ABKHASIAN DZE
-\setcclcuc 04E1 04E1 04E0 % CYRILLIC SMALL LETTER ABKHASIAN DZE
-\setcclcuc 04E2 04E3 04E2 % CYRILLIC CAPITAL LETTER I WITH MACRON
-\setcclcuc 04E3 04E3 04E2 % CYRILLIC SMALL LETTER I WITH MACRON
-\setcclcuc 04E4 04E5 04E4 % CYRILLIC CAPITAL LETTER I WITH DIAERESIS
-\setcclcuc 04E5 04E5 04E4 % CYRILLIC SMALL LETTER I WITH DIAERESIS
-\setcclcuc 04E6 04E7 04E6 % CYRILLIC CAPITAL LETTER O WITH DIAERESIS
-\setcclcuc 04E7 04E7 04E6 % CYRILLIC SMALL LETTER O WITH DIAERESIS
-\setcclcuc 04E8 04E9 04E8 % CYRILLIC CAPITAL LETTER BARRED O
-\setcclcuc 04E9 04E9 04E8 % CYRILLIC SMALL LETTER BARRED O
-\setcclcuc 04EA 04EB 04EA % CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS
-\setcclcuc 04EB 04EB 04EA % CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS
-\setcclcuc 04EC 04ED 04EC % CYRILLIC CAPITAL LETTER E WITH DIAERESIS
-\setcclcuc 04ED 04ED 04EC % CYRILLIC SMALL LETTER E WITH DIAERESIS
-\setcclcuc 04EE 04EF 04EE % CYRILLIC CAPITAL LETTER U WITH MACRON
-\setcclcuc 04EF 04EF 04EE % CYRILLIC SMALL LETTER U WITH MACRON
-\setcclcuc 04F0 04F1 04F0 % CYRILLIC CAPITAL LETTER U WITH DIAERESIS
-\setcclcuc 04F1 04F1 04F0 % CYRILLIC SMALL LETTER U WITH DIAERESIS
-\setcclcuc 04F2 04F3 04F2 % CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE
-\setcclcuc 04F3 04F3 04F2 % CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE
-\setcclcuc 04F4 04F5 04F4 % CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS
-\setcclcuc 04F5 04F5 04F4 % CYRILLIC SMALL LETTER CHE WITH DIAERESIS
-\setcclcuc 04F6 04F7 04F6 % CYRILLIC CAPITAL LETTER GHE WITH DESCENDER
-\setcclcuc 04F7 04F7 04F6 % CYRILLIC SMALL LETTER GHE WITH DESCENDER
-\setcclcuc 04F8 04F9 04F8 % CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS
-\setcclcuc 04F9 04F9 04F8 % CYRILLIC SMALL LETTER YERU WITH DIAERESIS
-\setcclcuc 04FA 04FB 04FA % CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK
-\setcclcuc 04FB 04FB 04FA % CYRILLIC SMALL LETTER GHE WITH STROKE AND HOOK
-\setcclcuc 04FC 04FD 04FC % CYRILLIC CAPITAL LETTER HA WITH HOOK
-\setcclcuc 04FD 04FD 04FC % CYRILLIC SMALL LETTER HA WITH HOOK
-\setcclcuc 04FE 04FF 04FE % CYRILLIC CAPITAL LETTER HA WITH STROKE
-\setcclcuc 04FF 04FF 04FE % CYRILLIC SMALL LETTER HA WITH STROKE
-\setcclcuc 0500 0501 0500 % CYRILLIC CAPITAL LETTER KOMI DE
-\setcclcuc 0501 0501 0500 % CYRILLIC SMALL LETTER KOMI DE
-\setcclcuc 0502 0503 0502 % CYRILLIC CAPITAL LETTER KOMI DJE
-\setcclcuc 0503 0503 0502 % CYRILLIC SMALL LETTER KOMI DJE
-\setcclcuc 0504 0505 0504 % CYRILLIC CAPITAL LETTER KOMI ZJE
-\setcclcuc 0505 0505 0504 % CYRILLIC SMALL LETTER KOMI ZJE
-\setcclcuc 0506 0507 0506 % CYRILLIC CAPITAL LETTER KOMI DZJE
-\setcclcuc 0507 0507 0506 % CYRILLIC SMALL LETTER KOMI DZJE
-\setcclcuc 0508 0509 0508 % CYRILLIC CAPITAL LETTER KOMI LJE
-\setcclcuc 0509 0509 0508 % CYRILLIC SMALL LETTER KOMI LJE
-\setcclcuc 050A 050B 050A % CYRILLIC CAPITAL LETTER KOMI NJE
-\setcclcuc 050B 050B 050A % CYRILLIC SMALL LETTER KOMI NJE
-\setcclcuc 050C 050D 050C % CYRILLIC CAPITAL LETTER KOMI SJE
-\setcclcuc 050D 050D 050C % CYRILLIC SMALL LETTER KOMI SJE
-\setcclcuc 050E 050F 050E % CYRILLIC CAPITAL LETTER KOMI TJE
-\setcclcuc 050F 050F 050E % CYRILLIC SMALL LETTER KOMI TJE
-\setcclcuc 0510 0511 0510 % CYRILLIC CAPITAL LETTER REVERSED ZE
-\setcclcuc 0511 0511 0510 % CYRILLIC SMALL LETTER REVERSED ZE
-\setcclcuc 0512 0513 0512 % CYRILLIC CAPITAL LETTER EL WITH HOOK
-\setcclcuc 0513 0513 0512 % CYRILLIC SMALL LETTER EL WITH HOOK
-\setcclcuc 0531 0561 0531 % ARMENIAN CAPITAL LETTER AYB
-\setcclcuc 0532 0562 0532 % ARMENIAN CAPITAL LETTER BEN
-\setcclcuc 0533 0563 0533 % ARMENIAN CAPITAL LETTER GIM
-\setcclcuc 0534 0564 0534 % ARMENIAN CAPITAL LETTER DA
-\setcclcuc 0535 0565 0535 % ARMENIAN CAPITAL LETTER ECH
-\setcclcuc 0536 0566 0536 % ARMENIAN CAPITAL LETTER ZA
-\setcclcuc 0537 0567 0537 % ARMENIAN CAPITAL LETTER EH
-\setcclcuc 0538 0568 0538 % ARMENIAN CAPITAL LETTER ET
-\setcclcuc 0539 0569 0539 % ARMENIAN CAPITAL LETTER TO
-\setcclcuc 053A 056A 053A % ARMENIAN CAPITAL LETTER ZHE
-\setcclcuc 053B 056B 053B % ARMENIAN CAPITAL LETTER INI
-\setcclcuc 053C 056C 053C % ARMENIAN CAPITAL LETTER LIWN
-\setcclcuc 053D 056D 053D % ARMENIAN CAPITAL LETTER XEH
-\setcclcuc 053E 056E 053E % ARMENIAN CAPITAL LETTER CA
-\setcclcuc 053F 056F 053F % ARMENIAN CAPITAL LETTER KEN
-\setcclcuc 0540 0570 0540 % ARMENIAN CAPITAL LETTER HO
-\setcclcuc 0541 0571 0541 % ARMENIAN CAPITAL LETTER JA
-\setcclcuc 0542 0572 0542 % ARMENIAN CAPITAL LETTER GHAD
-\setcclcuc 0543 0573 0543 % ARMENIAN CAPITAL LETTER CHEH
-\setcclcuc 0544 0574 0544 % ARMENIAN CAPITAL LETTER MEN
-\setcclcuc 0545 0575 0545 % ARMENIAN CAPITAL LETTER YI
-\setcclcuc 0546 0576 0546 % ARMENIAN CAPITAL LETTER NOW
-\setcclcuc 0547 0577 0547 % ARMENIAN CAPITAL LETTER SHA
-\setcclcuc 0548 0578 0548 % ARMENIAN CAPITAL LETTER VO
-\setcclcuc 0549 0579 0549 % ARMENIAN CAPITAL LETTER CHA
-\setcclcuc 054A 057A 054A % ARMENIAN CAPITAL LETTER PEH
-\setcclcuc 054B 057B 054B % ARMENIAN CAPITAL LETTER JHEH
-\setcclcuc 054C 057C 054C % ARMENIAN CAPITAL LETTER RA
-\setcclcuc 054D 057D 054D % ARMENIAN CAPITAL LETTER SEH
-\setcclcuc 054E 057E 054E % ARMENIAN CAPITAL LETTER VEW
-\setcclcuc 054F 057F 054F % ARMENIAN CAPITAL LETTER TIWN
-\setcclcuc 0550 0580 0550 % ARMENIAN CAPITAL LETTER REH
-\setcclcuc 0551 0581 0551 % ARMENIAN CAPITAL LETTER CO
-\setcclcuc 0552 0582 0552 % ARMENIAN CAPITAL LETTER YIWN
-\setcclcuc 0553 0583 0553 % ARMENIAN CAPITAL LETTER PIWR
-\setcclcuc 0554 0584 0554 % ARMENIAN CAPITAL LETTER KEH
-\setcclcuc 0555 0585 0555 % ARMENIAN CAPITAL LETTER OH
-\setcclcuc 0556 0586 0556 % ARMENIAN CAPITAL LETTER FEH
-\setcclcuc 0561 0561 0531 % ARMENIAN SMALL LETTER AYB
-\setcclcuc 0562 0562 0532 % ARMENIAN SMALL LETTER BEN
-\setcclcuc 0563 0563 0533 % ARMENIAN SMALL LETTER GIM
-\setcclcuc 0564 0564 0534 % ARMENIAN SMALL LETTER DA
-\setcclcuc 0565 0565 0535 % ARMENIAN SMALL LETTER ECH
-\setcclcuc 0566 0566 0536 % ARMENIAN SMALL LETTER ZA
-\setcclcuc 0567 0567 0537 % ARMENIAN SMALL LETTER EH
-\setcclcuc 0568 0568 0538 % ARMENIAN SMALL LETTER ET
-\setcclcuc 0569 0569 0539 % ARMENIAN SMALL LETTER TO
-\setcclcuc 056A 056A 053A % ARMENIAN SMALL LETTER ZHE
-\setcclcuc 056B 056B 053B % ARMENIAN SMALL LETTER INI
-\setcclcuc 056C 056C 053C % ARMENIAN SMALL LETTER LIWN
-\setcclcuc 056D 056D 053D % ARMENIAN SMALL LETTER XEH
-\setcclcuc 056E 056E 053E % ARMENIAN SMALL LETTER CA
-\setcclcuc 056F 056F 053F % ARMENIAN SMALL LETTER KEN
-\setcclcuc 0570 0570 0540 % ARMENIAN SMALL LETTER HO
-\setcclcuc 0571 0571 0541 % ARMENIAN SMALL LETTER JA
-\setcclcuc 0572 0572 0542 % ARMENIAN SMALL LETTER GHAD
-\setcclcuc 0573 0573 0543 % ARMENIAN SMALL LETTER CHEH
-\setcclcuc 0574 0574 0544 % ARMENIAN SMALL LETTER MEN
-\setcclcuc 0575 0575 0545 % ARMENIAN SMALL LETTER YI
-\setcclcuc 0576 0576 0546 % ARMENIAN SMALL LETTER NOW
-\setcclcuc 0577 0577 0547 % ARMENIAN SMALL LETTER SHA
-\setcclcuc 0578 0578 0548 % ARMENIAN SMALL LETTER VO
-\setcclcuc 0579 0579 0549 % ARMENIAN SMALL LETTER CHA
-\setcclcuc 057A 057A 054A % ARMENIAN SMALL LETTER PEH
-\setcclcuc 057B 057B 054B % ARMENIAN SMALL LETTER JHEH
-\setcclcuc 057C 057C 054C % ARMENIAN SMALL LETTER RA
-\setcclcuc 057D 057D 054D % ARMENIAN SMALL LETTER SEH
-\setcclcuc 057E 057E 054E % ARMENIAN SMALL LETTER VEW
-\setcclcuc 057F 057F 054F % ARMENIAN SMALL LETTER TIWN
-\setcclcuc 0580 0580 0550 % ARMENIAN SMALL LETTER REH
-\setcclcuc 0581 0581 0551 % ARMENIAN SMALL LETTER CO
-\setcclcuc 0582 0582 0552 % ARMENIAN SMALL LETTER YIWN
-\setcclcuc 0583 0583 0553 % ARMENIAN SMALL LETTER PIWR
-\setcclcuc 0584 0584 0554 % ARMENIAN SMALL LETTER KEH
-\setcclcuc 0585 0585 0555 % ARMENIAN SMALL LETTER OH
-\setcclcuc 0586 0586 0556 % ARMENIAN SMALL LETTER FEH
-\setcclcuc 0587 0587 0587 % ARMENIAN SMALL LIGATURE ECH YIWN
-\setcclcuc 10A0 2D00 10A0 % GEORGIAN CAPITAL LETTER AN
-\setcclcuc 10A1 2D01 10A1 % GEORGIAN CAPITAL LETTER BAN
-\setcclcuc 10A2 2D02 10A2 % GEORGIAN CAPITAL LETTER GAN
-\setcclcuc 10A3 2D03 10A3 % GEORGIAN CAPITAL LETTER DON
-\setcclcuc 10A4 2D04 10A4 % GEORGIAN CAPITAL LETTER EN
-\setcclcuc 10A5 2D05 10A5 % GEORGIAN CAPITAL LETTER VIN
-\setcclcuc 10A6 2D06 10A6 % GEORGIAN CAPITAL LETTER ZEN
-\setcclcuc 10A7 2D07 10A7 % GEORGIAN CAPITAL LETTER TAN
-\setcclcuc 10A8 2D08 10A8 % GEORGIAN CAPITAL LETTER IN
-\setcclcuc 10A9 2D09 10A9 % GEORGIAN CAPITAL LETTER KAN
-\setcclcuc 10AA 2D0A 10AA % GEORGIAN CAPITAL LETTER LAS
-\setcclcuc 10AB 2D0B 10AB % GEORGIAN CAPITAL LETTER MAN
-\setcclcuc 10AC 2D0C 10AC % GEORGIAN CAPITAL LETTER NAR
-\setcclcuc 10AD 2D0D 10AD % GEORGIAN CAPITAL LETTER ON
-\setcclcuc 10AE 2D0E 10AE % GEORGIAN CAPITAL LETTER PAR
-\setcclcuc 10AF 2D0F 10AF % GEORGIAN CAPITAL LETTER ZHAR
-\setcclcuc 10B0 2D10 10B0 % GEORGIAN CAPITAL LETTER RAE
-\setcclcuc 10B1 2D11 10B1 % GEORGIAN CAPITAL LETTER SAN
-\setcclcuc 10B2 2D12 10B2 % GEORGIAN CAPITAL LETTER TAR
-\setcclcuc 10B3 2D13 10B3 % GEORGIAN CAPITAL LETTER UN
-\setcclcuc 10B4 2D14 10B4 % GEORGIAN CAPITAL LETTER PHAR
-\setcclcuc 10B5 2D15 10B5 % GEORGIAN CAPITAL LETTER KHAR
-\setcclcuc 10B6 2D16 10B6 % GEORGIAN CAPITAL LETTER GHAN
-\setcclcuc 10B7 2D17 10B7 % GEORGIAN CAPITAL LETTER QAR
-\setcclcuc 10B8 2D18 10B8 % GEORGIAN CAPITAL LETTER SHIN
-\setcclcuc 10B9 2D19 10B9 % GEORGIAN CAPITAL LETTER CHIN
-\setcclcuc 10BA 2D1A 10BA % GEORGIAN CAPITAL LETTER CAN
-\setcclcuc 10BB 2D1B 10BB % GEORGIAN CAPITAL LETTER JIL
-\setcclcuc 10BC 2D1C 10BC % GEORGIAN CAPITAL LETTER CIL
-\setcclcuc 10BD 2D1D 10BD % GEORGIAN CAPITAL LETTER CHAR
-\setcclcuc 10BE 2D1E 10BE % GEORGIAN CAPITAL LETTER XAN
-\setcclcuc 10BF 2D1F 10BF % GEORGIAN CAPITAL LETTER JHAN
-\setcclcuc 10C0 2D20 10C0 % GEORGIAN CAPITAL LETTER HAE
-\setcclcuc 10C1 2D21 10C1 % GEORGIAN CAPITAL LETTER HE
-\setcclcuc 10C2 2D22 10C2 % GEORGIAN CAPITAL LETTER HIE
-\setcclcuc 10C3 2D23 10C3 % GEORGIAN CAPITAL LETTER WE
-\setcclcuc 10C4 2D24 10C4 % GEORGIAN CAPITAL LETTER HAR
-\setcclcuc 10C5 2D25 10C5 % GEORGIAN CAPITAL LETTER HOE
-\setcclcuc 1D00 1D00 1D00 % LATIN LETTER SMALL CAPITAL A
-\setcclcuc 1D01 1D01 1D01 % LATIN LETTER SMALL CAPITAL AE
-\setcclcuc 1D02 1D02 1D02 % LATIN SMALL LETTER TURNED AE
-\setcclcuc 1D03 1D03 1D03 % LATIN LETTER SMALL CAPITAL BARRED B
-\setcclcuc 1D04 1D04 1D04 % LATIN LETTER SMALL CAPITAL C
-\setcclcuc 1D05 1D05 1D05 % LATIN LETTER SMALL CAPITAL D
-\setcclcuc 1D06 1D06 1D06 % LATIN LETTER SMALL CAPITAL ETH
-\setcclcuc 1D07 1D07 1D07 % LATIN LETTER SMALL CAPITAL E
-\setcclcuc 1D08 1D08 1D08 % LATIN SMALL LETTER TURNED OPEN E
-\setcclcuc 1D09 1D09 1D09 % LATIN SMALL LETTER TURNED I
-\setcclcuc 1D0A 1D0A 1D0A % LATIN LETTER SMALL CAPITAL J
-\setcclcuc 1D0B 1D0B 1D0B % LATIN LETTER SMALL CAPITAL K
-\setcclcuc 1D0C 1D0C 1D0C % LATIN LETTER SMALL CAPITAL L WITH STROKE
-\setcclcuc 1D0D 1D0D 1D0D % LATIN LETTER SMALL CAPITAL M
-\setcclcuc 1D0E 1D0E 1D0E % LATIN LETTER SMALL CAPITAL REVERSED N
-\setcclcuc 1D0F 1D0F 1D0F % LATIN LETTER SMALL CAPITAL O
-\setcclcuc 1D10 1D10 1D10 % LATIN LETTER SMALL CAPITAL OPEN O
-\setcclcuc 1D11 1D11 1D11 % LATIN SMALL LETTER SIDEWAYS O
-\setcclcuc 1D12 1D12 1D12 % LATIN SMALL LETTER SIDEWAYS OPEN O
-\setcclcuc 1D13 1D13 1D13 % LATIN SMALL LETTER SIDEWAYS O WITH STROKE
-\setcclcuc 1D14 1D14 1D14 % LATIN SMALL LETTER TURNED OE
-\setcclcuc 1D15 1D15 1D15 % LATIN LETTER SMALL CAPITAL OU
-\setcclcuc 1D16 1D16 1D16 % LATIN SMALL LETTER TOP HALF O
-\setcclcuc 1D17 1D17 1D17 % LATIN SMALL LETTER BOTTOM HALF O
-\setcclcuc 1D18 1D18 1D18 % LATIN LETTER SMALL CAPITAL P
-\setcclcuc 1D19 1D19 1D19 % LATIN LETTER SMALL CAPITAL REVERSED R
-\setcclcuc 1D1A 1D1A 1D1A % LATIN LETTER SMALL CAPITAL TURNED R
-\setcclcuc 1D1B 1D1B 1D1B % LATIN LETTER SMALL CAPITAL T
-\setcclcuc 1D1C 1D1C 1D1C % LATIN LETTER SMALL CAPITAL U
-\setcclcuc 1D1D 1D1D 1D1D % LATIN SMALL LETTER SIDEWAYS U
-\setcclcuc 1D1E 1D1E 1D1E % LATIN SMALL LETTER SIDEWAYS DIAERESIZED U
-\setcclcuc 1D1F 1D1F 1D1F % LATIN SMALL LETTER SIDEWAYS TURNED M
-\setcclcuc 1D20 1D20 1D20 % LATIN LETTER SMALL CAPITAL V
-\setcclcuc 1D21 1D21 1D21 % LATIN LETTER SMALL CAPITAL W
-\setcclcuc 1D22 1D22 1D22 % LATIN LETTER SMALL CAPITAL Z
-\setcclcuc 1D23 1D23 1D23 % LATIN LETTER SMALL CAPITAL EZH
-\setcclcuc 1D24 1D24 1D24 % LATIN LETTER VOICED LARYNGEAL SPIRANT
-\setcclcuc 1D25 1D25 1D25 % LATIN LETTER AIN
-\setcclcuc 1D26 1D26 1D26 % GREEK LETTER SMALL CAPITAL GAMMA
-\setcclcuc 1D27 1D27 1D27 % GREEK LETTER SMALL CAPITAL LAMDA
-\setcclcuc 1D28 1D28 1D28 % GREEK LETTER SMALL CAPITAL PI
-\setcclcuc 1D29 1D29 1D29 % GREEK LETTER SMALL CAPITAL RHO
-\setcclcuc 1D2A 1D2A 1D2A % GREEK LETTER SMALL CAPITAL PSI
-\setcclcuc 1D2B 1D2B 1D2B % CYRILLIC LETTER SMALL CAPITAL EL
-\setcclcuc 1D62 1D62 1D62 % LATIN SUBSCRIPT SMALL LETTER I
-\setcclcuc 1D63 1D63 1D63 % LATIN SUBSCRIPT SMALL LETTER R
-\setcclcuc 1D64 1D64 1D64 % LATIN SUBSCRIPT SMALL LETTER U
-\setcclcuc 1D65 1D65 1D65 % LATIN SUBSCRIPT SMALL LETTER V
-\setcclcuc 1D66 1D66 1D66 % GREEK SUBSCRIPT SMALL LETTER BETA
-\setcclcuc 1D67 1D67 1D67 % GREEK SUBSCRIPT SMALL LETTER GAMMA
-\setcclcuc 1D68 1D68 1D68 % GREEK SUBSCRIPT SMALL LETTER RHO
-\setcclcuc 1D69 1D69 1D69 % GREEK SUBSCRIPT SMALL LETTER PHI
-\setcclcuc 1D6A 1D6A 1D6A % GREEK SUBSCRIPT SMALL LETTER CHI
-\setcclcuc 1D6B 1D6B 1D6B % LATIN SMALL LETTER UE
-\setcclcuc 1D6C 1D6C 1D6C % LATIN SMALL LETTER B WITH MIDDLE TILDE
-\setcclcuc 1D6D 1D6D 1D6D % LATIN SMALL LETTER D WITH MIDDLE TILDE
-\setcclcuc 1D6E 1D6E 1D6E % LATIN SMALL LETTER F WITH MIDDLE TILDE
-\setcclcuc 1D6F 1D6F 1D6F % LATIN SMALL LETTER M WITH MIDDLE TILDE
-\setcclcuc 1D70 1D70 1D70 % LATIN SMALL LETTER N WITH MIDDLE TILDE
-\setcclcuc 1D71 1D71 1D71 % LATIN SMALL LETTER P WITH MIDDLE TILDE
-\setcclcuc 1D72 1D72 1D72 % LATIN SMALL LETTER R WITH MIDDLE TILDE
-\setcclcuc 1D73 1D73 1D73 % LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE
-\setcclcuc 1D74 1D74 1D74 % LATIN SMALL LETTER S WITH MIDDLE TILDE
-\setcclcuc 1D75 1D75 1D75 % LATIN SMALL LETTER T WITH MIDDLE TILDE
-\setcclcuc 1D76 1D76 1D76 % LATIN SMALL LETTER Z WITH MIDDLE TILDE
-\setcclcuc 1D77 1D77 1D77 % LATIN SMALL LETTER TURNED G
-\setcclcuc 1D79 1D79 1D79 % LATIN SMALL LETTER INSULAR G
-\setcclcuc 1D7A 1D7A 1D7A % LATIN SMALL LETTER TH WITH STRIKETHROUGH
-\setcclcuc 1D7B 1D7B 1D7B % LATIN SMALL CAPITAL LETTER I WITH STROKE
-\setcclcuc 1D7C 1D7C 1D7C % LATIN SMALL LETTER IOTA WITH STROKE
-\setcclcuc 1D7D 1D7D 2C63 % LATIN SMALL LETTER P WITH STROKE
-\setcclcuc 1D7E 1D7E 1D7E % LATIN SMALL CAPITAL LETTER U WITH STROKE
-\setcclcuc 1D7F 1D7F 1D7F % LATIN SMALL LETTER UPSILON WITH STROKE
-\setcclcuc 1D80 1D80 1D80 % LATIN SMALL LETTER B WITH PALATAL HOOK
-\setcclcuc 1D81 1D81 1D81 % LATIN SMALL LETTER D WITH PALATAL HOOK
-\setcclcuc 1D82 1D82 1D82 % LATIN SMALL LETTER F WITH PALATAL HOOK
-\setcclcuc 1D83 1D83 1D83 % LATIN SMALL LETTER G WITH PALATAL HOOK
-\setcclcuc 1D84 1D84 1D84 % LATIN SMALL LETTER K WITH PALATAL HOOK
-\setcclcuc 1D85 1D85 1D85 % LATIN SMALL LETTER L WITH PALATAL HOOK
-\setcclcuc 1D86 1D86 1D86 % LATIN SMALL LETTER M WITH PALATAL HOOK
-\setcclcuc 1D87 1D87 1D87 % LATIN SMALL LETTER N WITH PALATAL HOOK
-\setcclcuc 1D88 1D88 1D88 % LATIN SMALL LETTER P WITH PALATAL HOOK
-\setcclcuc 1D89 1D89 1D89 % LATIN SMALL LETTER R WITH PALATAL HOOK
-\setcclcuc 1D8A 1D8A 1D8A % LATIN SMALL LETTER S WITH PALATAL HOOK
-\setcclcuc 1D8B 1D8B 1D8B % LATIN SMALL LETTER ESH WITH PALATAL HOOK
-\setcclcuc 1D8C 1D8C 1D8C % LATIN SMALL LETTER V WITH PALATAL HOOK
-\setcclcuc 1D8D 1D8D 1D8D % LATIN SMALL LETTER X WITH PALATAL HOOK
-\setcclcuc 1D8E 1D8E 1D8E % LATIN SMALL LETTER Z WITH PALATAL HOOK
-\setcclcuc 1D8F 1D8F 1D8F % LATIN SMALL LETTER A WITH RETROFLEX HOOK
-\setcclcuc 1D90 1D90 1D90 % LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK
-\setcclcuc 1D91 1D91 1D91 % LATIN SMALL LETTER D WITH HOOK AND TAIL
-\setcclcuc 1D92 1D92 1D92 % LATIN SMALL LETTER E WITH RETROFLEX HOOK
-\setcclcuc 1D93 1D93 1D93 % LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK
-\setcclcuc 1D94 1D94 1D94 % LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK
-\setcclcuc 1D95 1D95 1D95 % LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK
-\setcclcuc 1D96 1D96 1D96 % LATIN SMALL LETTER I WITH RETROFLEX HOOK
-\setcclcuc 1D97 1D97 1D97 % LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK
-\setcclcuc 1D98 1D98 1D98 % LATIN SMALL LETTER ESH WITH RETROFLEX HOOK
-\setcclcuc 1D99 1D99 1D99 % LATIN SMALL LETTER U WITH RETROFLEX HOOK
-\setcclcuc 1D9A 1D9A 1D9A % LATIN SMALL LETTER EZH WITH RETROFLEX HOOK
-\setcclcuc 1E00 1E01 1E00 % LATIN CAPITAL LETTER A WITH RING BELOW
-\setcclcuc 1E01 1E01 1E00 % LATIN SMALL LETTER A WITH RING BELOW
-\setcclcuc 1E02 1E03 1E02 % LATIN CAPITAL LETTER B WITH DOT ABOVE
-\setcclcuc 1E03 1E03 1E02 % LATIN SMALL LETTER B WITH DOT ABOVE
-\setcclcuc 1E04 1E05 1E04 % LATIN CAPITAL LETTER B WITH DOT BELOW
-\setcclcuc 1E05 1E05 1E04 % LATIN SMALL LETTER B WITH DOT BELOW
-\setcclcuc 1E06 1E07 1E06 % LATIN CAPITAL LETTER B WITH LINE BELOW
-\setcclcuc 1E07 1E07 1E06 % LATIN SMALL LETTER B WITH LINE BELOW
-\setcclcuc 1E08 1E09 1E08 % LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
-\setcclcuc 1E09 1E09 1E08 % LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
-\setcclcuc 1E0A 1E0B 1E0A % LATIN CAPITAL LETTER D WITH DOT ABOVE
-\setcclcuc 1E0B 1E0B 1E0A % LATIN SMALL LETTER D WITH DOT ABOVE
-\setcclcuc 1E0C 1E0D 1E0C % LATIN CAPITAL LETTER D WITH DOT BELOW
-\setcclcuc 1E0D 1E0D 1E0C % LATIN SMALL LETTER D WITH DOT BELOW
-\setcclcuc 1E0E 1E0F 1E0E % LATIN CAPITAL LETTER D WITH LINE BELOW
-\setcclcuc 1E0F 1E0F 1E0E % LATIN SMALL LETTER D WITH LINE BELOW
-\setcclcuc 1E10 1E11 1E10 % LATIN CAPITAL LETTER D WITH CEDILLA
-\setcclcuc 1E11 1E11 1E10 % LATIN SMALL LETTER D WITH CEDILLA
-\setcclcuc 1E12 1E13 1E12 % LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW
-\setcclcuc 1E13 1E13 1E12 % LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW
-\setcclcuc 1E14 1E15 1E14 % LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
-\setcclcuc 1E15 1E15 1E14 % LATIN SMALL LETTER E WITH MACRON AND GRAVE
-\setcclcuc 1E16 1E17 1E16 % LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
-\setcclcuc 1E17 1E17 1E16 % LATIN SMALL LETTER E WITH MACRON AND ACUTE
-\setcclcuc 1E18 1E19 1E18 % LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW
-\setcclcuc 1E19 1E19 1E18 % LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW
-\setcclcuc 1E1A 1E1B 1E1A % LATIN CAPITAL LETTER E WITH TILDE BELOW
-\setcclcuc 1E1B 1E1B 1E1A % LATIN SMALL LETTER E WITH TILDE BELOW
-\setcclcuc 1E1C 1E1D 1E1C % LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
-\setcclcuc 1E1D 1E1D 1E1C % LATIN SMALL LETTER E WITH CEDILLA AND BREVE
-\setcclcuc 1E1E 1E1F 1E1E % LATIN CAPITAL LETTER F WITH DOT ABOVE
-\setcclcuc 1E1F 1E1F 1E1E % LATIN SMALL LETTER F WITH DOT ABOVE
-\setcclcuc 1E20 1E21 1E20 % LATIN CAPITAL LETTER G WITH MACRON
-\setcclcuc 1E21 1E21 1E20 % LATIN SMALL LETTER G WITH MACRON
-\setcclcuc 1E22 1E23 1E22 % LATIN CAPITAL LETTER H WITH DOT ABOVE
-\setcclcuc 1E23 1E23 1E22 % LATIN SMALL LETTER H WITH DOT ABOVE
-\setcclcuc 1E24 1E25 1E24 % LATIN CAPITAL LETTER H WITH DOT BELOW
-\setcclcuc 1E25 1E25 1E24 % LATIN SMALL LETTER H WITH DOT BELOW
-\setcclcuc 1E26 1E27 1E26 % LATIN CAPITAL LETTER H WITH DIAERESIS
-\setcclcuc 1E27 1E27 1E26 % LATIN SMALL LETTER H WITH DIAERESIS
-\setcclcuc 1E28 1E29 1E28 % LATIN CAPITAL LETTER H WITH CEDILLA
-\setcclcuc 1E29 1E29 1E28 % LATIN SMALL LETTER H WITH CEDILLA
-\setcclcuc 1E2A 1E2B 1E2A % LATIN CAPITAL LETTER H WITH BREVE BELOW
-\setcclcuc 1E2B 1E2B 1E2A % LATIN SMALL LETTER H WITH BREVE BELOW
-\setcclcuc 1E2C 1E2D 1E2C % LATIN CAPITAL LETTER I WITH TILDE BELOW
-\setcclcuc 1E2D 1E2D 1E2C % LATIN SMALL LETTER I WITH TILDE BELOW
-\setcclcuc 1E2E 1E2F 1E2E % LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
-\setcclcuc 1E2F 1E2F 1E2E % LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
-\setcclcuc 1E30 1E31 1E30 % LATIN CAPITAL LETTER K WITH ACUTE
-\setcclcuc 1E31 1E31 1E30 % LATIN SMALL LETTER K WITH ACUTE
-\setcclcuc 1E32 1E33 1E32 % LATIN CAPITAL LETTER K WITH DOT BELOW
-\setcclcuc 1E33 1E33 1E32 % LATIN SMALL LETTER K WITH DOT BELOW
-\setcclcuc 1E34 1E35 1E34 % LATIN CAPITAL LETTER K WITH LINE BELOW
-\setcclcuc 1E35 1E35 1E34 % LATIN SMALL LETTER K WITH LINE BELOW
-\setcclcuc 1E36 1E37 1E36 % LATIN CAPITAL LETTER L WITH DOT BELOW
-\setcclcuc 1E37 1E37 1E36 % LATIN SMALL LETTER L WITH DOT BELOW
-\setcclcuc 1E38 1E39 1E38 % LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
-\setcclcuc 1E39 1E39 1E38 % LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
-\setcclcuc 1E3A 1E3B 1E3A % LATIN CAPITAL LETTER L WITH LINE BELOW
-\setcclcuc 1E3B 1E3B 1E3A % LATIN SMALL LETTER L WITH LINE BELOW
-\setcclcuc 1E3C 1E3D 1E3C % LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW
-\setcclcuc 1E3D 1E3D 1E3C % LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW
-\setcclcuc 1E3E 1E3F 1E3E % LATIN CAPITAL LETTER M WITH ACUTE
-\setcclcuc 1E3F 1E3F 1E3E % LATIN SMALL LETTER M WITH ACUTE
-\setcclcuc 1E40 1E41 1E40 % LATIN CAPITAL LETTER M WITH DOT ABOVE
-\setcclcuc 1E41 1E41 1E40 % LATIN SMALL LETTER M WITH DOT ABOVE
-\setcclcuc 1E42 1E43 1E42 % LATIN CAPITAL LETTER M WITH DOT BELOW
-\setcclcuc 1E43 1E43 1E42 % LATIN SMALL LETTER M WITH DOT BELOW
-\setcclcuc 1E44 1E45 1E44 % LATIN CAPITAL LETTER N WITH DOT ABOVE
-\setcclcuc 1E45 1E45 1E44 % LATIN SMALL LETTER N WITH DOT ABOVE
-\setcclcuc 1E46 1E47 1E46 % LATIN CAPITAL LETTER N WITH DOT BELOW
-\setcclcuc 1E47 1E47 1E46 % LATIN SMALL LETTER N WITH DOT BELOW
-\setcclcuc 1E48 1E49 1E48 % LATIN CAPITAL LETTER N WITH LINE BELOW
-\setcclcuc 1E49 1E49 1E48 % LATIN SMALL LETTER N WITH LINE BELOW
-\setcclcuc 1E4A 1E4B 1E4A % LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW
-\setcclcuc 1E4B 1E4B 1E4A % LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW
-\setcclcuc 1E4C 1E4D 1E4C % LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
-\setcclcuc 1E4D 1E4D 1E4C % LATIN SMALL LETTER O WITH TILDE AND ACUTE
-\setcclcuc 1E4E 1E4F 1E4E % LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
-\setcclcuc 1E4F 1E4F 1E4E % LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
-\setcclcuc 1E50 1E51 1E50 % LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
-\setcclcuc 1E51 1E51 1E50 % LATIN SMALL LETTER O WITH MACRON AND GRAVE
-\setcclcuc 1E52 1E53 1E52 % LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
-\setcclcuc 1E53 1E53 1E52 % LATIN SMALL LETTER O WITH MACRON AND ACUTE
-\setcclcuc 1E54 1E55 1E54 % LATIN CAPITAL LETTER P WITH ACUTE
-\setcclcuc 1E55 1E55 1E54 % LATIN SMALL LETTER P WITH ACUTE
-\setcclcuc 1E56 1E57 1E56 % LATIN CAPITAL LETTER P WITH DOT ABOVE
-\setcclcuc 1E57 1E57 1E56 % LATIN SMALL LETTER P WITH DOT ABOVE
-\setcclcuc 1E58 1E59 1E58 % LATIN CAPITAL LETTER R WITH DOT ABOVE
-\setcclcuc 1E59 1E59 1E58 % LATIN SMALL LETTER R WITH DOT ABOVE
-\setcclcuc 1E5A 1E5B 1E5A % LATIN CAPITAL LETTER R WITH DOT BELOW
-\setcclcuc 1E5B 1E5B 1E5A % LATIN SMALL LETTER R WITH DOT BELOW
-\setcclcuc 1E5C 1E5D 1E5C % LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
-\setcclcuc 1E5D 1E5D 1E5C % LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
-\setcclcuc 1E5E 1E5F 1E5E % LATIN CAPITAL LETTER R WITH LINE BELOW
-\setcclcuc 1E5F 1E5F 1E5E % LATIN SMALL LETTER R WITH LINE BELOW
-\setcclcuc 1E60 1E61 1E60 % LATIN CAPITAL LETTER S WITH DOT ABOVE
-\setcclcuc 1E61 1E61 1E60 % LATIN SMALL LETTER S WITH DOT ABOVE
-\setcclcuc 1E62 1E63 1E62 % LATIN CAPITAL LETTER S WITH DOT BELOW
-\setcclcuc 1E63 1E63 1E62 % LATIN SMALL LETTER S WITH DOT BELOW
-\setcclcuc 1E64 1E65 1E64 % LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
-\setcclcuc 1E65 1E65 1E64 % LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
-\setcclcuc 1E66 1E67 1E66 % LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE
-\setcclcuc 1E67 1E67 1E66 % LATIN SMALL LETTER S WITH CARON AND DOT ABOVE
-\setcclcuc 1E68 1E69 1E68 % LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
-\setcclcuc 1E69 1E69 1E68 % LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
-\setcclcuc 1E6A 1E6B 1E6A % LATIN CAPITAL LETTER T WITH DOT ABOVE
-\setcclcuc 1E6B 1E6B 1E6A % LATIN SMALL LETTER T WITH DOT ABOVE
-\setcclcuc 1E6C 1E6D 1E6C % LATIN CAPITAL LETTER T WITH DOT BELOW
-\setcclcuc 1E6D 1E6D 1E6C % LATIN SMALL LETTER T WITH DOT BELOW
-\setcclcuc 1E6E 1E6F 1E6E % LATIN CAPITAL LETTER T WITH LINE BELOW
-\setcclcuc 1E6F 1E6F 1E6E % LATIN SMALL LETTER T WITH LINE BELOW
-\setcclcuc 1E70 1E71 1E70 % LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW
-\setcclcuc 1E71 1E71 1E70 % LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW
-\setcclcuc 1E72 1E73 1E72 % LATIN CAPITAL LETTER U WITH DIAERESIS BELOW
-\setcclcuc 1E73 1E73 1E72 % LATIN SMALL LETTER U WITH DIAERESIS BELOW
-\setcclcuc 1E74 1E75 1E74 % LATIN CAPITAL LETTER U WITH TILDE BELOW
-\setcclcuc 1E75 1E75 1E74 % LATIN SMALL LETTER U WITH TILDE BELOW
-\setcclcuc 1E76 1E77 1E76 % LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW
-\setcclcuc 1E77 1E77 1E76 % LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW
-\setcclcuc 1E78 1E79 1E78 % LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
-\setcclcuc 1E79 1E79 1E78 % LATIN SMALL LETTER U WITH TILDE AND ACUTE
-\setcclcuc 1E7A 1E7B 1E7A % LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
-\setcclcuc 1E7B 1E7B 1E7A % LATIN SMALL LETTER U WITH MACRON AND DIAERESIS
-\setcclcuc 1E7C 1E7D 1E7C % LATIN CAPITAL LETTER V WITH TILDE
-\setcclcuc 1E7D 1E7D 1E7C % LATIN SMALL LETTER V WITH TILDE
-\setcclcuc 1E7E 1E7F 1E7E % LATIN CAPITAL LETTER V WITH DOT BELOW
-\setcclcuc 1E7F 1E7F 1E7E % LATIN SMALL LETTER V WITH DOT BELOW
-\setcclcuc 1E80 1E81 1E80 % LATIN CAPITAL LETTER W WITH GRAVE
-\setcclcuc 1E81 1E81 1E80 % LATIN SMALL LETTER W WITH GRAVE
-\setcclcuc 1E82 1E83 1E82 % LATIN CAPITAL LETTER W WITH ACUTE
-\setcclcuc 1E83 1E83 1E82 % LATIN SMALL LETTER W WITH ACUTE
-\setcclcuc 1E84 1E85 1E84 % LATIN CAPITAL LETTER W WITH DIAERESIS
-\setcclcuc 1E85 1E85 1E84 % LATIN SMALL LETTER W WITH DIAERESIS
-\setcclcuc 1E86 1E87 1E86 % LATIN CAPITAL LETTER W WITH DOT ABOVE
-\setcclcuc 1E87 1E87 1E86 % LATIN SMALL LETTER W WITH DOT ABOVE
-\setcclcuc 1E88 1E89 1E88 % LATIN CAPITAL LETTER W WITH DOT BELOW
-\setcclcuc 1E89 1E89 1E88 % LATIN SMALL LETTER W WITH DOT BELOW
-\setcclcuc 1E8A 1E8B 1E8A % LATIN CAPITAL LETTER X WITH DOT ABOVE
-\setcclcuc 1E8B 1E8B 1E8A % LATIN SMALL LETTER X WITH DOT ABOVE
-\setcclcuc 1E8C 1E8D 1E8C % LATIN CAPITAL LETTER X WITH DIAERESIS
-\setcclcuc 1E8D 1E8D 1E8C % LATIN SMALL LETTER X WITH DIAERESIS
-\setcclcuc 1E8E 1E8F 1E8E % LATIN CAPITAL LETTER Y WITH DOT ABOVE
-\setcclcuc 1E8F 1E8F 1E8E % LATIN SMALL LETTER Y WITH DOT ABOVE
-\setcclcuc 1E90 1E91 1E90 % LATIN CAPITAL LETTER Z WITH CIRCUMFLEX
-\setcclcuc 1E91 1E91 1E90 % LATIN SMALL LETTER Z WITH CIRCUMFLEX
-\setcclcuc 1E92 1E93 1E92 % LATIN CAPITAL LETTER Z WITH DOT BELOW
-\setcclcuc 1E93 1E93 1E92 % LATIN SMALL LETTER Z WITH DOT BELOW
-\setcclcuc 1E94 1E95 1E94 % LATIN CAPITAL LETTER Z WITH LINE BELOW
-\setcclcuc 1E95 1E95 1E94 % LATIN SMALL LETTER Z WITH LINE BELOW
-\setcclcuc 1E96 1E96 1E96 % LATIN SMALL LETTER H WITH LINE BELOW
-\setcclcuc 1E97 1E97 1E97 % LATIN SMALL LETTER T WITH DIAERESIS
-\setcclcuc 1E98 1E98 1E98 % LATIN SMALL LETTER W WITH RING ABOVE
-\setcclcuc 1E99 1E99 1E99 % LATIN SMALL LETTER Y WITH RING ABOVE
-\setcclcuc 1E9A 1E9A 1E9A % LATIN SMALL LETTER A WITH RIGHT HALF RING
-\setcclcuc 1E9B 1E9B 1E60 % LATIN SMALL LETTER LONG S WITH DOT ABOVE
-\setcclcuc 1EA0 1EA1 1EA0 % LATIN CAPITAL LETTER A WITH DOT BELOW
-\setcclcuc 1EA1 1EA1 1EA0 % LATIN SMALL LETTER A WITH DOT BELOW
-\setcclcuc 1EA2 1EA3 1EA2 % LATIN CAPITAL LETTER A WITH HOOK ABOVE
-\setcclcuc 1EA3 1EA3 1EA2 % LATIN SMALL LETTER A WITH HOOK ABOVE
-\setcclcuc 1EA4 1EA5 1EA4 % LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
-\setcclcuc 1EA5 1EA5 1EA4 % LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
-\setcclcuc 1EA6 1EA7 1EA6 % LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
-\setcclcuc 1EA7 1EA7 1EA6 % LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
-\setcclcuc 1EA8 1EA9 1EA8 % LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
-\setcclcuc 1EA9 1EA9 1EA8 % LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
-\setcclcuc 1EAA 1EAB 1EAA % LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
-\setcclcuc 1EAB 1EAB 1EAA % LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
-\setcclcuc 1EAC 1EAD 1EAC % LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
-\setcclcuc 1EAD 1EAD 1EAC % LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
-\setcclcuc 1EAE 1EAF 1EAE % LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
-\setcclcuc 1EAF 1EAF 1EAE % LATIN SMALL LETTER A WITH BREVE AND ACUTE
-\setcclcuc 1EB0 1EB1 1EB0 % LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
-\setcclcuc 1EB1 1EB1 1EB0 % LATIN SMALL LETTER A WITH BREVE AND GRAVE
-\setcclcuc 1EB2 1EB3 1EB2 % LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
-\setcclcuc 1EB3 1EB3 1EB2 % LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
-\setcclcuc 1EB4 1EB5 1EB4 % LATIN CAPITAL LETTER A WITH BREVE AND TILDE
-\setcclcuc 1EB5 1EB5 1EB4 % LATIN SMALL LETTER A WITH BREVE AND TILDE
-\setcclcuc 1EB6 1EB7 1EB6 % LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
-\setcclcuc 1EB7 1EB7 1EB6 % LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
-\setcclcuc 1EB8 1EB9 1EB8 % LATIN CAPITAL LETTER E WITH DOT BELOW
-\setcclcuc 1EB9 1EB9 1EB8 % LATIN SMALL LETTER E WITH DOT BELOW
-\setcclcuc 1EBA 1EBB 1EBA % LATIN CAPITAL LETTER E WITH HOOK ABOVE
-\setcclcuc 1EBB 1EBB 1EBA % LATIN SMALL LETTER E WITH HOOK ABOVE
-\setcclcuc 1EBC 1EBD 1EBC % LATIN CAPITAL LETTER E WITH TILDE
-\setcclcuc 1EBD 1EBD 1EBC % LATIN SMALL LETTER E WITH TILDE
-\setcclcuc 1EBE 1EBF 1EBE % LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
-\setcclcuc 1EBF 1EBF 1EBE % LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
-\setcclcuc 1EC0 1EC1 1EC0 % LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
-\setcclcuc 1EC1 1EC1 1EC0 % LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
-\setcclcuc 1EC2 1EC3 1EC2 % LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
-\setcclcuc 1EC3 1EC3 1EC2 % LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
-\setcclcuc 1EC4 1EC5 1EC4 % LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
-\setcclcuc 1EC5 1EC5 1EC4 % LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
-\setcclcuc 1EC6 1EC7 1EC6 % LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
-\setcclcuc 1EC7 1EC7 1EC6 % LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
-\setcclcuc 1EC8 1EC9 1EC8 % LATIN CAPITAL LETTER I WITH HOOK ABOVE
-\setcclcuc 1EC9 1EC9 1EC8 % LATIN SMALL LETTER I WITH HOOK ABOVE
-\setcclcuc 1ECA 1ECB 1ECA % LATIN CAPITAL LETTER I WITH DOT BELOW
-\setcclcuc 1ECB 1ECB 1ECA % LATIN SMALL LETTER I WITH DOT BELOW
-\setcclcuc 1ECC 1ECD 1ECC % LATIN CAPITAL LETTER O WITH DOT BELOW
-\setcclcuc 1ECD 1ECD 1ECC % LATIN SMALL LETTER O WITH DOT BELOW
-\setcclcuc 1ECE 1ECF 1ECE % LATIN CAPITAL LETTER O WITH HOOK ABOVE
-\setcclcuc 1ECF 1ECF 1ECE % LATIN SMALL LETTER O WITH HOOK ABOVE
-\setcclcuc 1ED0 1ED1 1ED0 % LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
-\setcclcuc 1ED1 1ED1 1ED0 % LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
-\setcclcuc 1ED2 1ED3 1ED2 % LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
-\setcclcuc 1ED3 1ED3 1ED2 % LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
-\setcclcuc 1ED4 1ED5 1ED4 % LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
-\setcclcuc 1ED5 1ED5 1ED4 % LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
-\setcclcuc 1ED6 1ED7 1ED6 % LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
-\setcclcuc 1ED7 1ED7 1ED6 % LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
-\setcclcuc 1ED8 1ED9 1ED8 % LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
-\setcclcuc 1ED9 1ED9 1ED8 % LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
-\setcclcuc 1EDA 1EDB 1EDA % LATIN CAPITAL LETTER O WITH HORN AND ACUTE
-\setcclcuc 1EDB 1EDB 1EDA % LATIN SMALL LETTER O WITH HORN AND ACUTE
-\setcclcuc 1EDC 1EDD 1EDC % LATIN CAPITAL LETTER O WITH HORN AND GRAVE
-\setcclcuc 1EDD 1EDD 1EDC % LATIN SMALL LETTER O WITH HORN AND GRAVE
-\setcclcuc 1EDE 1EDF 1EDE % LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
-\setcclcuc 1EDF 1EDF 1EDE % LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
-\setcclcuc 1EE0 1EE1 1EE0 % LATIN CAPITAL LETTER O WITH HORN AND TILDE
-\setcclcuc 1EE1 1EE1 1EE0 % LATIN SMALL LETTER O WITH HORN AND TILDE
-\setcclcuc 1EE2 1EE3 1EE2 % LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
-\setcclcuc 1EE3 1EE3 1EE2 % LATIN SMALL LETTER O WITH HORN AND DOT BELOW
-\setcclcuc 1EE4 1EE5 1EE4 % LATIN CAPITAL LETTER U WITH DOT BELOW
-\setcclcuc 1EE5 1EE5 1EE4 % LATIN SMALL LETTER U WITH DOT BELOW
-\setcclcuc 1EE6 1EE7 1EE6 % LATIN CAPITAL LETTER U WITH HOOK ABOVE
-\setcclcuc 1EE7 1EE7 1EE6 % LATIN SMALL LETTER U WITH HOOK ABOVE
-\setcclcuc 1EE8 1EE9 1EE8 % LATIN CAPITAL LETTER U WITH HORN AND ACUTE
-\setcclcuc 1EE9 1EE9 1EE8 % LATIN SMALL LETTER U WITH HORN AND ACUTE
-\setcclcuc 1EEA 1EEB 1EEA % LATIN CAPITAL LETTER U WITH HORN AND GRAVE
-\setcclcuc 1EEB 1EEB 1EEA % LATIN SMALL LETTER U WITH HORN AND GRAVE
-\setcclcuc 1EEC 1EED 1EEC % LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
-\setcclcuc 1EED 1EED 1EEC % LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
-\setcclcuc 1EEE 1EEF 1EEE % LATIN CAPITAL LETTER U WITH HORN AND TILDE
-\setcclcuc 1EEF 1EEF 1EEE % LATIN SMALL LETTER U WITH HORN AND TILDE
-\setcclcuc 1EF0 1EF1 1EF0 % LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
-\setcclcuc 1EF1 1EF1 1EF0 % LATIN SMALL LETTER U WITH HORN AND DOT BELOW
-\setcclcuc 1EF2 1EF3 1EF2 % LATIN CAPITAL LETTER Y WITH GRAVE
-\setcclcuc 1EF3 1EF3 1EF2 % LATIN SMALL LETTER Y WITH GRAVE
-\setcclcuc 1EF4 1EF5 1EF4 % LATIN CAPITAL LETTER Y WITH DOT BELOW
-\setcclcuc 1EF5 1EF5 1EF4 % LATIN SMALL LETTER Y WITH DOT BELOW
-\setcclcuc 1EF6 1EF7 1EF6 % LATIN CAPITAL LETTER Y WITH HOOK ABOVE
-\setcclcuc 1EF7 1EF7 1EF6 % LATIN SMALL LETTER Y WITH HOOK ABOVE
-\setcclcuc 1EF8 1EF9 1EF8 % LATIN CAPITAL LETTER Y WITH TILDE
-\setcclcuc 1EF9 1EF9 1EF8 % LATIN SMALL LETTER Y WITH TILDE
-\setcclcuc 1F00 1F00 1F08 % GREEK SMALL LETTER ALPHA WITH PSILI
-\setcclcuc 1F01 1F01 1F09 % GREEK SMALL LETTER ALPHA WITH DASIA
-\setcclcuc 1F02 1F02 1F0A % GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA
-\setcclcuc 1F03 1F03 1F0B % GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA
-\setcclcuc 1F04 1F04 1F0C % GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA
-\setcclcuc 1F05 1F05 1F0D % GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA
-\setcclcuc 1F06 1F06 1F0E % GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI
-\setcclcuc 1F07 1F07 1F0F % GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
-\setcclcuc 1F08 1F00 1F08 % GREEK CAPITAL LETTER ALPHA WITH PSILI
-\setcclcuc 1F09 1F01 1F09 % GREEK CAPITAL LETTER ALPHA WITH DASIA
-\setcclcuc 1F0A 1F02 1F0A % GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA
-\setcclcuc 1F0B 1F03 1F0B % GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA
-\setcclcuc 1F0C 1F04 1F0C % GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
-\setcclcuc 1F0D 1F05 1F0D % GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
-\setcclcuc 1F0E 1F06 1F0E % GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI
-\setcclcuc 1F0F 1F07 1F0F % GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
-\setcclcuc 1F10 1F10 1F18 % GREEK SMALL LETTER EPSILON WITH PSILI
-\setcclcuc 1F11 1F11 1F19 % GREEK SMALL LETTER EPSILON WITH DASIA
-\setcclcuc 1F12 1F12 1F1A % GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA
-\setcclcuc 1F13 1F13 1F1B % GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA
-\setcclcuc 1F14 1F14 1F1C % GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA
-\setcclcuc 1F15 1F15 1F1D % GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
-\setcclcuc 1F18 1F10 1F18 % GREEK CAPITAL LETTER EPSILON WITH PSILI
-\setcclcuc 1F19 1F11 1F19 % GREEK CAPITAL LETTER EPSILON WITH DASIA
-\setcclcuc 1F1A 1F12 1F1A % GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA
-\setcclcuc 1F1B 1F13 1F1B % GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA
-\setcclcuc 1F1C 1F14 1F1C % GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
-\setcclcuc 1F1D 1F15 1F1D % GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
-\setcclcuc 1F20 1F20 1F28 % GREEK SMALL LETTER ETA WITH PSILI
-\setcclcuc 1F21 1F21 1F29 % GREEK SMALL LETTER ETA WITH DASIA
-\setcclcuc 1F22 1F22 1F2A % GREEK SMALL LETTER ETA WITH PSILI AND VARIA
-\setcclcuc 1F23 1F23 1F2B % GREEK SMALL LETTER ETA WITH DASIA AND VARIA
-\setcclcuc 1F24 1F24 1F2C % GREEK SMALL LETTER ETA WITH PSILI AND OXIA
-\setcclcuc 1F25 1F25 1F2D % GREEK SMALL LETTER ETA WITH DASIA AND OXIA
-\setcclcuc 1F26 1F26 1F2E % GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI
-\setcclcuc 1F27 1F27 1F2F % GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI
-\setcclcuc 1F28 1F20 1F28 % GREEK CAPITAL LETTER ETA WITH PSILI
-\setcclcuc 1F29 1F21 1F29 % GREEK CAPITAL LETTER ETA WITH DASIA
-\setcclcuc 1F2A 1F22 1F2A % GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA
-\setcclcuc 1F2B 1F23 1F2B % GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA
-\setcclcuc 1F2C 1F24 1F2C % GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
-\setcclcuc 1F2D 1F25 1F2D % GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
-\setcclcuc 1F2E 1F26 1F2E % GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI
-\setcclcuc 1F2F 1F27 1F2F % GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
-\setcclcuc 1F30 1F30 1F38 % GREEK SMALL LETTER IOTA WITH PSILI
-\setcclcuc 1F31 1F31 1F39 % GREEK SMALL LETTER IOTA WITH DASIA
-\setcclcuc 1F32 1F32 1F3A % GREEK SMALL LETTER IOTA WITH PSILI AND VARIA
-\setcclcuc 1F33 1F33 1F3B % GREEK SMALL LETTER IOTA WITH DASIA AND VARIA
-\setcclcuc 1F34 1F34 1F3C % GREEK SMALL LETTER IOTA WITH PSILI AND OXIA
-\setcclcuc 1F35 1F35 1F3D % GREEK SMALL LETTER IOTA WITH DASIA AND OXIA
-\setcclcuc 1F36 1F36 1F3E % GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI
-\setcclcuc 1F37 1F37 1F3F % GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI
-\setcclcuc 1F38 1F30 1F38 % GREEK CAPITAL LETTER IOTA WITH PSILI
-\setcclcuc 1F39 1F31 1F39 % GREEK CAPITAL LETTER IOTA WITH DASIA
-\setcclcuc 1F3A 1F32 1F3A % GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA
-\setcclcuc 1F3B 1F33 1F3B % GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA
-\setcclcuc 1F3C 1F34 1F3C % GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
-\setcclcuc 1F3D 1F35 1F3D % GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
-\setcclcuc 1F3E 1F36 1F3E % GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI
-\setcclcuc 1F3F 1F37 1F3F % GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
-\setcclcuc 1F40 1F40 1F48 % GREEK SMALL LETTER OMICRON WITH PSILI
-\setcclcuc 1F41 1F41 1F49 % GREEK SMALL LETTER OMICRON WITH DASIA
-\setcclcuc 1F42 1F42 1F4A % GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA
-\setcclcuc 1F43 1F43 1F4B % GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA
-\setcclcuc 1F44 1F44 1F4C % GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA
-\setcclcuc 1F45 1F45 1F4D % GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
-\setcclcuc 1F48 1F40 1F48 % GREEK CAPITAL LETTER OMICRON WITH PSILI
-\setcclcuc 1F49 1F41 1F49 % GREEK CAPITAL LETTER OMICRON WITH DASIA
-\setcclcuc 1F4A 1F42 1F4A % GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA
-\setcclcuc 1F4B 1F43 1F4B % GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA
-\setcclcuc 1F4C 1F44 1F4C % GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
-\setcclcuc 1F4D 1F45 1F4D % GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
-\setcclcuc 1F50 1F50 1F50 % GREEK SMALL LETTER UPSILON WITH PSILI
-\setcclcuc 1F51 1F51 1F59 % GREEK SMALL LETTER UPSILON WITH DASIA
-\setcclcuc 1F52 1F52 1F52 % GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
-\setcclcuc 1F53 1F53 1F5B % GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA
-\setcclcuc 1F54 1F54 1F54 % GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
-\setcclcuc 1F55 1F55 1F5D % GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA
-\setcclcuc 1F56 1F56 1F56 % GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
-\setcclcuc 1F57 1F57 1F5F % GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
-\setcclcuc 1F59 1F51 1F59 % GREEK CAPITAL LETTER UPSILON WITH DASIA
-\setcclcuc 1F5B 1F53 1F5B % GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
-\setcclcuc 1F5D 1F55 1F5D % GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
-\setcclcuc 1F5F 1F57 1F5F % GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI
-\setcclcuc 1F60 1F60 1F68 % GREEK SMALL LETTER OMEGA WITH PSILI
-\setcclcuc 1F61 1F61 1F69 % GREEK SMALL LETTER OMEGA WITH DASIA
-\setcclcuc 1F62 1F62 1F6A % GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA
-\setcclcuc 1F63 1F63 1F6B % GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA
-\setcclcuc 1F64 1F64 1F6C % GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA
-\setcclcuc 1F65 1F65 1F6D % GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA
-\setcclcuc 1F66 1F66 1F6E % GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI
-\setcclcuc 1F67 1F67 1F6F % GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
-\setcclcuc 1F68 1F60 1F68 % GREEK CAPITAL LETTER OMEGA WITH PSILI
-\setcclcuc 1F69 1F61 1F69 % GREEK CAPITAL LETTER OMEGA WITH DASIA
-\setcclcuc 1F6A 1F62 1F6A % GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA
-\setcclcuc 1F6B 1F63 1F6B % GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA
-\setcclcuc 1F6C 1F64 1F6C % GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
-\setcclcuc 1F6D 1F65 1F6D % GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
-\setcclcuc 1F6E 1F66 1F6E % GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI
-\setcclcuc 1F6F 1F67 1F6F % GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
-\setcclcuc 1F70 1F70 1FBA % GREEK SMALL LETTER ALPHA WITH VARIA
-\setcclcuc 1F71 1F71 1FBB % GREEK SMALL LETTER ALPHA WITH OXIA
-\setcclcuc 1F72 1F72 1FC8 % GREEK SMALL LETTER EPSILON WITH VARIA
-\setcclcuc 1F73 1F73 1FC9 % GREEK SMALL LETTER EPSILON WITH OXIA
-\setcclcuc 1F74 1F74 1FCA % GREEK SMALL LETTER ETA WITH VARIA
-\setcclcuc 1F75 1F75 1FCB % GREEK SMALL LETTER ETA WITH OXIA
-\setcclcuc 1F76 1F76 1FDA % GREEK SMALL LETTER IOTA WITH VARIA
-\setcclcuc 1F77 1F77 1FDB % GREEK SMALL LETTER IOTA WITH OXIA
-\setcclcuc 1F78 1F78 1FF8 % GREEK SMALL LETTER OMICRON WITH VARIA
-\setcclcuc 1F79 1F79 1FF9 % GREEK SMALL LETTER OMICRON WITH OXIA
-\setcclcuc 1F7A 1F7A 1FEA % GREEK SMALL LETTER UPSILON WITH VARIA
-\setcclcuc 1F7B 1F7B 1FEB % GREEK SMALL LETTER UPSILON WITH OXIA
-\setcclcuc 1F7C 1F7C 1FFA % GREEK SMALL LETTER OMEGA WITH VARIA
-\setcclcuc 1F7D 1F7D 1FFB % GREEK SMALL LETTER OMEGA WITH OXIA
-\setcclcuc 1F80 1F80 1F88 % GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI
-\setcclcuc 1F81 1F81 1F89 % GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI
-\setcclcuc 1F82 1F82 1F8A % GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
-\setcclcuc 1F83 1F83 1F8B % GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
-\setcclcuc 1F84 1F84 1F8C % GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
-\setcclcuc 1F85 1F85 1F8D % GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
-\setcclcuc 1F86 1F86 1F8E % GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
-\setcclcuc 1F87 1F87 1F8F % GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
-\setcclcuc 1F88 1F80 1F88 % GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
-\setcclcuc 1F89 1F81 1F89 % GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
-\setcclcuc 1F8A 1F82 1F8A % GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
-\setcclcuc 1F8B 1F83 1F8B % GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
-\setcclcuc 1F8C 1F84 1F8C % GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
-\setcclcuc 1F8D 1F85 1F8D % GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
-\setcclcuc 1F8E 1F86 1F8E % GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
-\setcclcuc 1F8F 1F87 1F8F % GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
-\setcclcuc 1F90 1F90 1F98 % GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI
-\setcclcuc 1F91 1F91 1F99 % GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI
-\setcclcuc 1F92 1F92 1F9A % GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
-\setcclcuc 1F93 1F93 1F9B % GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
-\setcclcuc 1F94 1F94 1F9C % GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
-\setcclcuc 1F95 1F95 1F9D % GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
-\setcclcuc 1F96 1F96 1F9E % GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
-\setcclcuc 1F97 1F97 1F9F % GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
-\setcclcuc 1F98 1F90 1F98 % GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
-\setcclcuc 1F99 1F91 1F99 % GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
-\setcclcuc 1F9A 1F92 1F9A % GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
-\setcclcuc 1F9B 1F93 1F9B % GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
-\setcclcuc 1F9C 1F94 1F9C % GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
-\setcclcuc 1F9D 1F95 1F9D % GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
-\setcclcuc 1F9E 1F96 1F9E % GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
-\setcclcuc 1F9F 1F97 1F9F % GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
-\setcclcuc 1FA0 1FA0 1FA8 % GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI
-\setcclcuc 1FA1 1FA1 1FA9 % GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI
-\setcclcuc 1FA2 1FA2 1FAA % GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
-\setcclcuc 1FA3 1FA3 1FAB % GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
-\setcclcuc 1FA4 1FA4 1FAC % GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
-\setcclcuc 1FA5 1FA5 1FAD % GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
-\setcclcuc 1FA6 1FA6 1FAE % GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
-\setcclcuc 1FA7 1FA7 1FAF % GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
-\setcclcuc 1FA8 1FA0 1FA8 % GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
-\setcclcuc 1FA9 1FA1 1FA9 % GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
-\setcclcuc 1FAA 1FA2 1FAA % GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
-\setcclcuc 1FAB 1FA3 1FAB % GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
-\setcclcuc 1FAC 1FA4 1FAC % GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
-\setcclcuc 1FAD 1FA5 1FAD % GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
-\setcclcuc 1FAE 1FA6 1FAE % GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
-\setcclcuc 1FAF 1FA7 1FAF % GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
-\setcclcuc 1FB0 1FB0 1FB8 % GREEK SMALL LETTER ALPHA WITH VRACHY
-\setcclcuc 1FB1 1FB1 1FB9 % GREEK SMALL LETTER ALPHA WITH MACRON
-\setcclcuc 1FB2 1FB2 1FB2 % GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
-\setcclcuc 1FB3 1FB3 1FBC % GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI
-\setcclcuc 1FB4 1FB4 1FB4 % GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
-\setcclcuc 1FB6 1FB6 1FB6 % GREEK SMALL LETTER ALPHA WITH PERISPOMENI
-\setcclcuc 1FB7 1FB7 1FB7 % GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
-\setcclcuc 1FB8 1FB0 1FB8 % GREEK CAPITAL LETTER ALPHA WITH VRACHY
-\setcclcuc 1FB9 1FB1 1FB9 % GREEK CAPITAL LETTER ALPHA WITH MACRON
-\setcclcuc 1FBA 1F70 1FBA % GREEK CAPITAL LETTER ALPHA WITH VARIA
-\setcclcuc 1FBB 1F71 1FBB % GREEK CAPITAL LETTER ALPHA WITH OXIA
-\setcclcuc 1FBC 1FB3 1FBC % GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
-\setcclcuc 1FBE 1FBE 0399 % GREEK PROSGEGRAMMENI
-\setcclcuc 1FC2 1FC2 1FC2 % GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
-\setcclcuc 1FC3 1FC3 1FCC % GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI
-\setcclcuc 1FC4 1FC4 1FC4 % GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
-\setcclcuc 1FC6 1FC6 1FC6 % GREEK SMALL LETTER ETA WITH PERISPOMENI
-\setcclcuc 1FC7 1FC7 1FC7 % GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
-\setcclcuc 1FC8 1F72 1FC8 % GREEK CAPITAL LETTER EPSILON WITH VARIA
-\setcclcuc 1FC9 1F73 1FC9 % GREEK CAPITAL LETTER EPSILON WITH OXIA
-\setcclcuc 1FCA 1F74 1FCA % GREEK CAPITAL LETTER ETA WITH VARIA
-\setcclcuc 1FCB 1F75 1FCB % GREEK CAPITAL LETTER ETA WITH OXIA
-\setcclcuc 1FCC 1FC3 1FCC % GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
-\setcclcuc 1FD0 1FD0 1FD8 % GREEK SMALL LETTER IOTA WITH VRACHY
-\setcclcuc 1FD1 1FD1 1FD9 % GREEK SMALL LETTER IOTA WITH MACRON
-\setcclcuc 1FD2 1FD2 1FD2 % GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
-\setcclcuc 1FD3 1FD3 1FD3 % GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
-\setcclcuc 1FD6 1FD6 1FD6 % GREEK SMALL LETTER IOTA WITH PERISPOMENI
-\setcclcuc 1FD7 1FD7 1FD7 % GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
-\setcclcuc 1FD8 1FD0 1FD8 % GREEK CAPITAL LETTER IOTA WITH VRACHY
-\setcclcuc 1FD9 1FD1 1FD9 % GREEK CAPITAL LETTER IOTA WITH MACRON
-\setcclcuc 1FDA 1F76 1FDA % GREEK CAPITAL LETTER IOTA WITH VARIA
-\setcclcuc 1FDB 1F77 1FDB % GREEK CAPITAL LETTER IOTA WITH OXIA
-\setcclcuc 1FE0 1FE0 1FE8 % GREEK SMALL LETTER UPSILON WITH VRACHY
-\setcclcuc 1FE1 1FE1 1FE9 % GREEK SMALL LETTER UPSILON WITH MACRON
-\setcclcuc 1FE2 1FE2 1FE2 % GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
-\setcclcuc 1FE3 1FE3 1FE3 % GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA
-\setcclcuc 1FE4 1FE4 1FE4 % GREEK SMALL LETTER RHO WITH PSILI
-\setcclcuc 1FE5 1FE5 1FEC % GREEK SMALL LETTER RHO WITH DASIA
-\setcclcuc 1FE6 1FE6 1FE6 % GREEK SMALL LETTER UPSILON WITH PERISPOMENI
-\setcclcuc 1FE7 1FE7 1FE7 % GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
-\setcclcuc 1FE8 1FE0 1FE8 % GREEK CAPITAL LETTER UPSILON WITH VRACHY
-\setcclcuc 1FE9 1FE1 1FE9 % GREEK CAPITAL LETTER UPSILON WITH MACRON
-\setcclcuc 1FEA 1F7A 1FEA % GREEK CAPITAL LETTER UPSILON WITH VARIA
-\setcclcuc 1FEB 1F7B 1FEB % GREEK CAPITAL LETTER UPSILON WITH OXIA
-\setcclcuc 1FEC 1FE5 1FEC % GREEK CAPITAL LETTER RHO WITH DASIA
-\setcclcuc 1FF2 1FF2 1FF2 % GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
-\setcclcuc 1FF3 1FF3 1FFC % GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI
-\setcclcuc 1FF4 1FF4 1FF4 % GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
-\setcclcuc 1FF6 1FF6 1FF6 % GREEK SMALL LETTER OMEGA WITH PERISPOMENI
-\setcclcuc 1FF7 1FF7 1FF7 % GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
-\setcclcuc 1FF8 1F78 1FF8 % GREEK CAPITAL LETTER OMICRON WITH VARIA
-\setcclcuc 1FF9 1F79 1FF9 % GREEK CAPITAL LETTER OMICRON WITH OXIA
-\setcclcuc 1FFA 1F7C 1FFA % GREEK CAPITAL LETTER OMEGA WITH VARIA
-\setcclcuc 1FFB 1F7D 1FFB % GREEK CAPITAL LETTER OMEGA WITH OXIA
-\setcclcuc 1FFC 1FF3 1FFC % GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
-\setcclcuc 2071 2071 2071 % SUPERSCRIPT LATIN SMALL LETTER I
-\setcclcuc 207F 207F 207F % SUPERSCRIPT LATIN SMALL LETTER N
-\setcclcuc 2102 2102 2102 % DOUBLE-STRUCK CAPITAL C
-\setcclcuc 2107 2107 2107 % EULER CONSTANT
-\setcclcuc 210A 210A 210A % SCRIPT SMALL G
-\setcclcuc 210B 210B 210B % SCRIPT CAPITAL H
-\setcclcuc 210C 210C 210C % BLACK-LETTER CAPITAL H
-\setcclcuc 210D 210D 210D % DOUBLE-STRUCK CAPITAL H
-\setcclcuc 210E 210E 210E % PLANCK CONSTANT
-\setcclcuc 210F 210F 210F % PLANCK CONSTANT OVER TWO PI
-\setcclcuc 2110 2110 2110 % SCRIPT CAPITAL I
-\setcclcuc 2111 2111 2111 % BLACK-LETTER CAPITAL I
-\setcclcuc 2112 2112 2112 % SCRIPT CAPITAL L
-\setcclcuc 2113 2113 2113 % SCRIPT SMALL L
-\setcclcuc 2115 2115 2115 % DOUBLE-STRUCK CAPITAL N
-\setcclcuc 2119 2119 2119 % DOUBLE-STRUCK CAPITAL P
-\setcclcuc 211A 211A 211A % DOUBLE-STRUCK CAPITAL Q
-\setcclcuc 211B 211B 211B % SCRIPT CAPITAL R
-\setcclcuc 211C 211C 211C % BLACK-LETTER CAPITAL R
-\setcclcuc 211D 211D 211D % DOUBLE-STRUCK CAPITAL R
-\setcclcuc 2124 2124 2124 % DOUBLE-STRUCK CAPITAL Z
-\setcclcuc 2126 03C9 2126 % OHM SIGN
-\setcclcuc 2128 2128 2128 % BLACK-LETTER CAPITAL Z
-\setcclcuc 212A 006B 212A % KELVIN SIGN
-\setcclcuc 212B 00E5 212B % ANGSTROM SIGN
-\setcclcuc 212C 212C 212C % SCRIPT CAPITAL B
-\setcclcuc 212D 212D 212D % BLACK-LETTER CAPITAL C
-\setcclcuc 212F 212F 212F % SCRIPT SMALL E
-\setcclcuc 2130 2130 2130 % SCRIPT CAPITAL E
-\setcclcuc 2131 2131 2131 % SCRIPT CAPITAL F
-\setcclcuc 2132 214E 2132 % TURNED CAPITAL F
-\setcclcuc 2133 2133 2133 % SCRIPT CAPITAL M
-\setcclcuc 2134 2134 2134 % SCRIPT SMALL O
-\setcclcuc 2139 2139 2139 % INFORMATION SOURCE
-\setcclcuc 213C 213C 213C % DOUBLE-STRUCK SMALL PI
-\setcclcuc 213D 213D 213D % DOUBLE-STRUCK SMALL GAMMA
-\setcclcuc 213E 213E 213E % DOUBLE-STRUCK CAPITAL GAMMA
-\setcclcuc 213F 213F 213F % DOUBLE-STRUCK CAPITAL PI
-\setcclcuc 2145 2145 2145 % DOUBLE-STRUCK ITALIC CAPITAL D
-\setcclcuc 2146 2146 2146 % DOUBLE-STRUCK ITALIC SMALL D
-\setcclcuc 2147 2147 2147 % DOUBLE-STRUCK ITALIC SMALL E
-\setcclcuc 2148 2148 2148 % DOUBLE-STRUCK ITALIC SMALL I
-\setcclcuc 2149 2149 2149 % DOUBLE-STRUCK ITALIC SMALL J
-\setcclcuc 214E 214E 2132 % TURNED SMALL F
-\setcclcuc 2183 2184 2183 % ROMAN NUMERAL REVERSED ONE HUNDRED
-\setcclcuc 2184 2184 2183 % LATIN SMALL LETTER REVERSED C
-\setcclcuc 2C00 2C30 2C00 % GLAGOLITIC CAPITAL LETTER AZU
-\setcclcuc 2C01 2C31 2C01 % GLAGOLITIC CAPITAL LETTER BUKY
-\setcclcuc 2C02 2C32 2C02 % GLAGOLITIC CAPITAL LETTER VEDE
-\setcclcuc 2C03 2C33 2C03 % GLAGOLITIC CAPITAL LETTER GLAGOLI
-\setcclcuc 2C04 2C34 2C04 % GLAGOLITIC CAPITAL LETTER DOBRO
-\setcclcuc 2C05 2C35 2C05 % GLAGOLITIC CAPITAL LETTER YESTU
-\setcclcuc 2C06 2C36 2C06 % GLAGOLITIC CAPITAL LETTER ZHIVETE
-\setcclcuc 2C07 2C37 2C07 % GLAGOLITIC CAPITAL LETTER DZELO
-\setcclcuc 2C08 2C38 2C08 % GLAGOLITIC CAPITAL LETTER ZEMLJA
-\setcclcuc 2C09 2C39 2C09 % GLAGOLITIC CAPITAL LETTER IZHE
-\setcclcuc 2C0A 2C3A 2C0A % GLAGOLITIC CAPITAL LETTER INITIAL IZHE
-\setcclcuc 2C0B 2C3B 2C0B % GLAGOLITIC CAPITAL LETTER I
-\setcclcuc 2C0C 2C3C 2C0C % GLAGOLITIC CAPITAL LETTER DJERVI
-\setcclcuc 2C0D 2C3D 2C0D % GLAGOLITIC CAPITAL LETTER KAKO
-\setcclcuc 2C0E 2C3E 2C0E % GLAGOLITIC CAPITAL LETTER LJUDIJE
-\setcclcuc 2C0F 2C3F 2C0F % GLAGOLITIC CAPITAL LETTER MYSLITE
-\setcclcuc 2C10 2C40 2C10 % GLAGOLITIC CAPITAL LETTER NASHI
-\setcclcuc 2C11 2C41 2C11 % GLAGOLITIC CAPITAL LETTER ONU
-\setcclcuc 2C12 2C42 2C12 % GLAGOLITIC CAPITAL LETTER POKOJI
-\setcclcuc 2C13 2C43 2C13 % GLAGOLITIC CAPITAL LETTER RITSI
-\setcclcuc 2C14 2C44 2C14 % GLAGOLITIC CAPITAL LETTER SLOVO
-\setcclcuc 2C15 2C45 2C15 % GLAGOLITIC CAPITAL LETTER TVRIDO
-\setcclcuc 2C16 2C46 2C16 % GLAGOLITIC CAPITAL LETTER UKU
-\setcclcuc 2C17 2C47 2C17 % GLAGOLITIC CAPITAL LETTER FRITU
-\setcclcuc 2C18 2C48 2C18 % GLAGOLITIC CAPITAL LETTER HERU
-\setcclcuc 2C19 2C49 2C19 % GLAGOLITIC CAPITAL LETTER OTU
-\setcclcuc 2C1A 2C4A 2C1A % GLAGOLITIC CAPITAL LETTER PE
-\setcclcuc 2C1B 2C4B 2C1B % GLAGOLITIC CAPITAL LETTER SHTA
-\setcclcuc 2C1C 2C4C 2C1C % GLAGOLITIC CAPITAL LETTER TSI
-\setcclcuc 2C1D 2C4D 2C1D % GLAGOLITIC CAPITAL LETTER CHRIVI
-\setcclcuc 2C1E 2C4E 2C1E % GLAGOLITIC CAPITAL LETTER SHA
-\setcclcuc 2C1F 2C4F 2C1F % GLAGOLITIC CAPITAL LETTER YERU
-\setcclcuc 2C20 2C50 2C20 % GLAGOLITIC CAPITAL LETTER YERI
-\setcclcuc 2C21 2C51 2C21 % GLAGOLITIC CAPITAL LETTER YATI
-\setcclcuc 2C22 2C52 2C22 % GLAGOLITIC CAPITAL LETTER SPIDERY HA
-\setcclcuc 2C23 2C53 2C23 % GLAGOLITIC CAPITAL LETTER YU
-\setcclcuc 2C24 2C54 2C24 % GLAGOLITIC CAPITAL LETTER SMALL YUS
-\setcclcuc 2C25 2C55 2C25 % GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL
-\setcclcuc 2C26 2C56 2C26 % GLAGOLITIC CAPITAL LETTER YO
-\setcclcuc 2C27 2C57 2C27 % GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS
-\setcclcuc 2C28 2C58 2C28 % GLAGOLITIC CAPITAL LETTER BIG YUS
-\setcclcuc 2C29 2C59 2C29 % GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS
-\setcclcuc 2C2A 2C5A 2C2A % GLAGOLITIC CAPITAL LETTER FITA
-\setcclcuc 2C2B 2C5B 2C2B % GLAGOLITIC CAPITAL LETTER IZHITSA
-\setcclcuc 2C2C 2C5C 2C2C % GLAGOLITIC CAPITAL LETTER SHTAPIC
-\setcclcuc 2C2D 2C5D 2C2D % GLAGOLITIC CAPITAL LETTER TROKUTASTI A
-\setcclcuc 2C2E 2C5E 2C2E % GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE
-\setcclcuc 2C30 2C30 2C00 % GLAGOLITIC SMALL LETTER AZU
-\setcclcuc 2C31 2C31 2C01 % GLAGOLITIC SMALL LETTER BUKY
-\setcclcuc 2C32 2C32 2C02 % GLAGOLITIC SMALL LETTER VEDE
-\setcclcuc 2C33 2C33 2C03 % GLAGOLITIC SMALL LETTER GLAGOLI
-\setcclcuc 2C34 2C34 2C04 % GLAGOLITIC SMALL LETTER DOBRO
-\setcclcuc 2C35 2C35 2C05 % GLAGOLITIC SMALL LETTER YESTU
-\setcclcuc 2C36 2C36 2C06 % GLAGOLITIC SMALL LETTER ZHIVETE
-\setcclcuc 2C37 2C37 2C07 % GLAGOLITIC SMALL LETTER DZELO
-\setcclcuc 2C38 2C38 2C08 % GLAGOLITIC SMALL LETTER ZEMLJA
-\setcclcuc 2C39 2C39 2C09 % GLAGOLITIC SMALL LETTER IZHE
-\setcclcuc 2C3A 2C3A 2C0A % GLAGOLITIC SMALL LETTER INITIAL IZHE
-\setcclcuc 2C3B 2C3B 2C0B % GLAGOLITIC SMALL LETTER I
-\setcclcuc 2C3C 2C3C 2C0C % GLAGOLITIC SMALL LETTER DJERVI
-\setcclcuc 2C3D 2C3D 2C0D % GLAGOLITIC SMALL LETTER KAKO
-\setcclcuc 2C3E 2C3E 2C0E % GLAGOLITIC SMALL LETTER LJUDIJE
-\setcclcuc 2C3F 2C3F 2C0F % GLAGOLITIC SMALL LETTER MYSLITE
-\setcclcuc 2C40 2C40 2C10 % GLAGOLITIC SMALL LETTER NASHI
-\setcclcuc 2C41 2C41 2C11 % GLAGOLITIC SMALL LETTER ONU
-\setcclcuc 2C42 2C42 2C12 % GLAGOLITIC SMALL LETTER POKOJI
-\setcclcuc 2C43 2C43 2C13 % GLAGOLITIC SMALL LETTER RITSI
-\setcclcuc 2C44 2C44 2C14 % GLAGOLITIC SMALL LETTER SLOVO
-\setcclcuc 2C45 2C45 2C15 % GLAGOLITIC SMALL LETTER TVRIDO
-\setcclcuc 2C46 2C46 2C16 % GLAGOLITIC SMALL LETTER UKU
-\setcclcuc 2C47 2C47 2C17 % GLAGOLITIC SMALL LETTER FRITU
-\setcclcuc 2C48 2C48 2C18 % GLAGOLITIC SMALL LETTER HERU
-\setcclcuc 2C49 2C49 2C19 % GLAGOLITIC SMALL LETTER OTU
-\setcclcuc 2C4A 2C4A 2C1A % GLAGOLITIC SMALL LETTER PE
-\setcclcuc 2C4B 2C4B 2C1B % GLAGOLITIC SMALL LETTER SHTA
-\setcclcuc 2C4C 2C4C 2C1C % GLAGOLITIC SMALL LETTER TSI
-\setcclcuc 2C4D 2C4D 2C1D % GLAGOLITIC SMALL LETTER CHRIVI
-\setcclcuc 2C4E 2C4E 2C1E % GLAGOLITIC SMALL LETTER SHA
-\setcclcuc 2C4F 2C4F 2C1F % GLAGOLITIC SMALL LETTER YERU
-\setcclcuc 2C50 2C50 2C20 % GLAGOLITIC SMALL LETTER YERI
-\setcclcuc 2C51 2C51 2C21 % GLAGOLITIC SMALL LETTER YATI
-\setcclcuc 2C52 2C52 2C22 % GLAGOLITIC SMALL LETTER SPIDERY HA
-\setcclcuc 2C53 2C53 2C23 % GLAGOLITIC SMALL LETTER YU
-\setcclcuc 2C54 2C54 2C24 % GLAGOLITIC SMALL LETTER SMALL YUS
-\setcclcuc 2C55 2C55 2C25 % GLAGOLITIC SMALL LETTER SMALL YUS WITH TAIL
-\setcclcuc 2C56 2C56 2C26 % GLAGOLITIC SMALL LETTER YO
-\setcclcuc 2C57 2C57 2C27 % GLAGOLITIC SMALL LETTER IOTATED SMALL YUS
-\setcclcuc 2C58 2C58 2C28 % GLAGOLITIC SMALL LETTER BIG YUS
-\setcclcuc 2C59 2C59 2C29 % GLAGOLITIC SMALL LETTER IOTATED BIG YUS
-\setcclcuc 2C5A 2C5A 2C2A % GLAGOLITIC SMALL LETTER FITA
-\setcclcuc 2C5B 2C5B 2C2B % GLAGOLITIC SMALL LETTER IZHITSA
-\setcclcuc 2C5C 2C5C 2C2C % GLAGOLITIC SMALL LETTER SHTAPIC
-\setcclcuc 2C5D 2C5D 2C2D % GLAGOLITIC SMALL LETTER TROKUTASTI A
-\setcclcuc 2C5E 2C5E 2C2E % GLAGOLITIC SMALL LETTER LATINATE MYSLITE
-\setcclcuc 2C60 2C61 2C60 % LATIN CAPITAL LETTER L WITH DOUBLE BAR
-\setcclcuc 2C61 2C61 2C60 % LATIN SMALL LETTER L WITH DOUBLE BAR
-\setcclcuc 2C62 026B 2C62 % LATIN CAPITAL LETTER L WITH MIDDLE TILDE
-\setcclcuc 2C63 1D7D 2C63 % LATIN CAPITAL LETTER P WITH STROKE
-\setcclcuc 2C64 027D 2C64 % LATIN CAPITAL LETTER R WITH TAIL
-\setcclcuc 2C65 2C65 023A % LATIN SMALL LETTER A WITH STROKE
-\setcclcuc 2C66 2C66 023E % LATIN SMALL LETTER T WITH DIAGONAL STROKE
-\setcclcuc 2C67 2C68 2C67 % LATIN CAPITAL LETTER H WITH DESCENDER
-\setcclcuc 2C68 2C68 2C67 % LATIN SMALL LETTER H WITH DESCENDER
-\setcclcuc 2C69 2C6A 2C69 % LATIN CAPITAL LETTER K WITH DESCENDER
-\setcclcuc 2C6A 2C6A 2C69 % LATIN SMALL LETTER K WITH DESCENDER
-\setcclcuc 2C6B 2C6C 2C6B % LATIN CAPITAL LETTER Z WITH DESCENDER
-\setcclcuc 2C6C 2C6C 2C6B % LATIN SMALL LETTER Z WITH DESCENDER
-\setcclcuc 2C74 2C74 2C74 % LATIN SMALL LETTER V WITH CURL
-\setcclcuc 2C75 2C76 2C75 % LATIN CAPITAL LETTER HALF H
-\setcclcuc 2C76 2C76 2C75 % LATIN SMALL LETTER HALF H
-\setcclcuc 2C77 2C77 2C77 % LATIN SMALL LETTER TAILLESS PHI
-\setcclcuc 2C80 2C81 2C80 % COPTIC CAPITAL LETTER ALFA
-\setcclcuc 2C81 2C81 2C80 % COPTIC SMALL LETTER ALFA
-\setcclcuc 2C82 2C83 2C82 % COPTIC CAPITAL LETTER VIDA
-\setcclcuc 2C83 2C83 2C82 % COPTIC SMALL LETTER VIDA
-\setcclcuc 2C84 2C85 2C84 % COPTIC CAPITAL LETTER GAMMA
-\setcclcuc 2C85 2C85 2C84 % COPTIC SMALL LETTER GAMMA
-\setcclcuc 2C86 2C87 2C86 % COPTIC CAPITAL LETTER DALDA
-\setcclcuc 2C87 2C87 2C86 % COPTIC SMALL LETTER DALDA
-\setcclcuc 2C88 2C89 2C88 % COPTIC CAPITAL LETTER EIE
-\setcclcuc 2C89 2C89 2C88 % COPTIC SMALL LETTER EIE
-\setcclcuc 2C8A 2C8B 2C8A % COPTIC CAPITAL LETTER SOU
-\setcclcuc 2C8B 2C8B 2C8A % COPTIC SMALL LETTER SOU
-\setcclcuc 2C8C 2C8D 2C8C % COPTIC CAPITAL LETTER ZATA
-\setcclcuc 2C8D 2C8D 2C8C % COPTIC SMALL LETTER ZATA
-\setcclcuc 2C8E 2C8F 2C8E % COPTIC CAPITAL LETTER HATE
-\setcclcuc 2C8F 2C8F 2C8E % COPTIC SMALL LETTER HATE
-\setcclcuc 2C90 2C91 2C90 % COPTIC CAPITAL LETTER THETHE
-\setcclcuc 2C91 2C91 2C90 % COPTIC SMALL LETTER THETHE
-\setcclcuc 2C92 2C93 2C92 % COPTIC CAPITAL LETTER IAUDA
-\setcclcuc 2C93 2C93 2C92 % COPTIC SMALL LETTER IAUDA
-\setcclcuc 2C94 2C95 2C94 % COPTIC CAPITAL LETTER KAPA
-\setcclcuc 2C95 2C95 2C94 % COPTIC SMALL LETTER KAPA
-\setcclcuc 2C96 2C97 2C96 % COPTIC CAPITAL LETTER LAULA
-\setcclcuc 2C97 2C97 2C96 % COPTIC SMALL LETTER LAULA
-\setcclcuc 2C98 2C99 2C98 % COPTIC CAPITAL LETTER MI
-\setcclcuc 2C99 2C99 2C98 % COPTIC SMALL LETTER MI
-\setcclcuc 2C9A 2C9B 2C9A % COPTIC CAPITAL LETTER NI
-\setcclcuc 2C9B 2C9B 2C9A % COPTIC SMALL LETTER NI
-\setcclcuc 2C9C 2C9D 2C9C % COPTIC CAPITAL LETTER KSI
-\setcclcuc 2C9D 2C9D 2C9C % COPTIC SMALL LETTER KSI
-\setcclcuc 2C9E 2C9F 2C9E % COPTIC CAPITAL LETTER O
-\setcclcuc 2C9F 2C9F 2C9E % COPTIC SMALL LETTER O
-\setcclcuc 2CA0 2CA1 2CA0 % COPTIC CAPITAL LETTER PI
-\setcclcuc 2CA1 2CA1 2CA0 % COPTIC SMALL LETTER PI
-\setcclcuc 2CA2 2CA3 2CA2 % COPTIC CAPITAL LETTER RO
-\setcclcuc 2CA3 2CA3 2CA2 % COPTIC SMALL LETTER RO
-\setcclcuc 2CA4 2CA5 2CA4 % COPTIC CAPITAL LETTER SIMA
-\setcclcuc 2CA5 2CA5 2CA4 % COPTIC SMALL LETTER SIMA
-\setcclcuc 2CA6 2CA7 2CA6 % COPTIC CAPITAL LETTER TAU
-\setcclcuc 2CA7 2CA7 2CA6 % COPTIC SMALL LETTER TAU
-\setcclcuc 2CA8 2CA9 2CA8 % COPTIC CAPITAL LETTER UA
-\setcclcuc 2CA9 2CA9 2CA8 % COPTIC SMALL LETTER UA
-\setcclcuc 2CAA 2CAB 2CAA % COPTIC CAPITAL LETTER FI
-\setcclcuc 2CAB 2CAB 2CAA % COPTIC SMALL LETTER FI
-\setcclcuc 2CAC 2CAD 2CAC % COPTIC CAPITAL LETTER KHI
-\setcclcuc 2CAD 2CAD 2CAC % COPTIC SMALL LETTER KHI
-\setcclcuc 2CAE 2CAF 2CAE % COPTIC CAPITAL LETTER PSI
-\setcclcuc 2CAF 2CAF 2CAE % COPTIC SMALL LETTER PSI
-\setcclcuc 2CB0 2CB1 2CB0 % COPTIC CAPITAL LETTER OOU
-\setcclcuc 2CB1 2CB1 2CB0 % COPTIC SMALL LETTER OOU
-\setcclcuc 2CB2 2CB3 2CB2 % COPTIC CAPITAL LETTER DIALECT-P ALEF
-\setcclcuc 2CB3 2CB3 2CB2 % COPTIC SMALL LETTER DIALECT-P ALEF
-\setcclcuc 2CB4 2CB5 2CB4 % COPTIC CAPITAL LETTER OLD COPTIC AIN
-\setcclcuc 2CB5 2CB5 2CB4 % COPTIC SMALL LETTER OLD COPTIC AIN
-\setcclcuc 2CB6 2CB7 2CB6 % COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE
-\setcclcuc 2CB7 2CB7 2CB6 % COPTIC SMALL LETTER CRYPTOGRAMMIC EIE
-\setcclcuc 2CB8 2CB9 2CB8 % COPTIC CAPITAL LETTER DIALECT-P KAPA
-\setcclcuc 2CB9 2CB9 2CB8 % COPTIC SMALL LETTER DIALECT-P KAPA
-\setcclcuc 2CBA 2CBB 2CBA % COPTIC CAPITAL LETTER DIALECT-P NI
-\setcclcuc 2CBB 2CBB 2CBA % COPTIC SMALL LETTER DIALECT-P NI
-\setcclcuc 2CBC 2CBD 2CBC % COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI
-\setcclcuc 2CBD 2CBD 2CBC % COPTIC SMALL LETTER CRYPTOGRAMMIC NI
-\setcclcuc 2CBE 2CBF 2CBE % COPTIC CAPITAL LETTER OLD COPTIC OOU
-\setcclcuc 2CBF 2CBF 2CBE % COPTIC SMALL LETTER OLD COPTIC OOU
-\setcclcuc 2CC0 2CC1 2CC0 % COPTIC CAPITAL LETTER SAMPI
-\setcclcuc 2CC1 2CC1 2CC0 % COPTIC SMALL LETTER SAMPI
-\setcclcuc 2CC2 2CC3 2CC2 % COPTIC CAPITAL LETTER CROSSED SHEI
-\setcclcuc 2CC3 2CC3 2CC2 % COPTIC SMALL LETTER CROSSED SHEI
-\setcclcuc 2CC4 2CC5 2CC4 % COPTIC CAPITAL LETTER OLD COPTIC SHEI
-\setcclcuc 2CC5 2CC5 2CC4 % COPTIC SMALL LETTER OLD COPTIC SHEI
-\setcclcuc 2CC6 2CC7 2CC6 % COPTIC CAPITAL LETTER OLD COPTIC ESH
-\setcclcuc 2CC7 2CC7 2CC6 % COPTIC SMALL LETTER OLD COPTIC ESH
-\setcclcuc 2CC8 2CC9 2CC8 % COPTIC CAPITAL LETTER AKHMIMIC KHEI
-\setcclcuc 2CC9 2CC9 2CC8 % COPTIC SMALL LETTER AKHMIMIC KHEI
-\setcclcuc 2CCA 2CCB 2CCA % COPTIC CAPITAL LETTER DIALECT-P HORI
-\setcclcuc 2CCB 2CCB 2CCA % COPTIC SMALL LETTER DIALECT-P HORI
-\setcclcuc 2CCC 2CCD 2CCC % COPTIC CAPITAL LETTER OLD COPTIC HORI
-\setcclcuc 2CCD 2CCD 2CCC % COPTIC SMALL LETTER OLD COPTIC HORI
-\setcclcuc 2CCE 2CCF 2CCE % COPTIC CAPITAL LETTER OLD COPTIC HA
-\setcclcuc 2CCF 2CCF 2CCE % COPTIC SMALL LETTER OLD COPTIC HA
-\setcclcuc 2CD0 2CD1 2CD0 % COPTIC CAPITAL LETTER L-SHAPED HA
-\setcclcuc 2CD1 2CD1 2CD0 % COPTIC SMALL LETTER L-SHAPED HA
-\setcclcuc 2CD2 2CD3 2CD2 % COPTIC CAPITAL LETTER OLD COPTIC HEI
-\setcclcuc 2CD3 2CD3 2CD2 % COPTIC SMALL LETTER OLD COPTIC HEI
-\setcclcuc 2CD4 2CD5 2CD4 % COPTIC CAPITAL LETTER OLD COPTIC HAT
-\setcclcuc 2CD5 2CD5 2CD4 % COPTIC SMALL LETTER OLD COPTIC HAT
-\setcclcuc 2CD6 2CD7 2CD6 % COPTIC CAPITAL LETTER OLD COPTIC GANGIA
-\setcclcuc 2CD7 2CD7 2CD6 % COPTIC SMALL LETTER OLD COPTIC GANGIA
-\setcclcuc 2CD8 2CD9 2CD8 % COPTIC CAPITAL LETTER OLD COPTIC DJA
-\setcclcuc 2CD9 2CD9 2CD8 % COPTIC SMALL LETTER OLD COPTIC DJA
-\setcclcuc 2CDA 2CDB 2CDA % COPTIC CAPITAL LETTER OLD COPTIC SHIMA
-\setcclcuc 2CDB 2CDB 2CDA % COPTIC SMALL LETTER OLD COPTIC SHIMA
-\setcclcuc 2CDC 2CDD 2CDC % COPTIC CAPITAL LETTER OLD NUBIAN SHIMA
-\setcclcuc 2CDD 2CDD 2CDC % COPTIC SMALL LETTER OLD NUBIAN SHIMA
-\setcclcuc 2CDE 2CDF 2CDE % COPTIC CAPITAL LETTER OLD NUBIAN NGI
-\setcclcuc 2CDF 2CDF 2CDE % COPTIC SMALL LETTER OLD NUBIAN NGI
-\setcclcuc 2CE0 2CE1 2CE0 % COPTIC CAPITAL LETTER OLD NUBIAN NYI
-\setcclcuc 2CE1 2CE1 2CE0 % COPTIC SMALL LETTER OLD NUBIAN NYI
-\setcclcuc 2CE2 2CE3 2CE2 % COPTIC CAPITAL LETTER OLD NUBIAN WAU
-\setcclcuc 2CE3 2CE3 2CE2 % COPTIC SMALL LETTER OLD NUBIAN WAU
-\setcclcuc 2CE4 2CE4 2CE4 % COPTIC SYMBOL KAI
-\setcclcuc 2D00 2D00 10A0 % GEORGIAN SMALL LETTER AN
-\setcclcuc 2D01 2D01 10A1 % GEORGIAN SMALL LETTER BAN
-\setcclcuc 2D02 2D02 10A2 % GEORGIAN SMALL LETTER GAN
-\setcclcuc 2D03 2D03 10A3 % GEORGIAN SMALL LETTER DON
-\setcclcuc 2D04 2D04 10A4 % GEORGIAN SMALL LETTER EN
-\setcclcuc 2D05 2D05 10A5 % GEORGIAN SMALL LETTER VIN
-\setcclcuc 2D06 2D06 10A6 % GEORGIAN SMALL LETTER ZEN
-\setcclcuc 2D07 2D07 10A7 % GEORGIAN SMALL LETTER TAN
-\setcclcuc 2D08 2D08 10A8 % GEORGIAN SMALL LETTER IN
-\setcclcuc 2D09 2D09 10A9 % GEORGIAN SMALL LETTER KAN
-\setcclcuc 2D0A 2D0A 10AA % GEORGIAN SMALL LETTER LAS
-\setcclcuc 2D0B 2D0B 10AB % GEORGIAN SMALL LETTER MAN
-\setcclcuc 2D0C 2D0C 10AC % GEORGIAN SMALL LETTER NAR
-\setcclcuc 2D0D 2D0D 10AD % GEORGIAN SMALL LETTER ON
-\setcclcuc 2D0E 2D0E 10AE % GEORGIAN SMALL LETTER PAR
-\setcclcuc 2D0F 2D0F 10AF % GEORGIAN SMALL LETTER ZHAR
-\setcclcuc 2D10 2D10 10B0 % GEORGIAN SMALL LETTER RAE
-\setcclcuc 2D11 2D11 10B1 % GEORGIAN SMALL LETTER SAN
-\setcclcuc 2D12 2D12 10B2 % GEORGIAN SMALL LETTER TAR
-\setcclcuc 2D13 2D13 10B3 % GEORGIAN SMALL LETTER UN
-\setcclcuc 2D14 2D14 10B4 % GEORGIAN SMALL LETTER PHAR
-\setcclcuc 2D15 2D15 10B5 % GEORGIAN SMALL LETTER KHAR
-\setcclcuc 2D16 2D16 10B6 % GEORGIAN SMALL LETTER GHAN
-\setcclcuc 2D17 2D17 10B7 % GEORGIAN SMALL LETTER QAR
-\setcclcuc 2D18 2D18 10B8 % GEORGIAN SMALL LETTER SHIN
-\setcclcuc 2D19 2D19 10B9 % GEORGIAN SMALL LETTER CHIN
-\setcclcuc 2D1A 2D1A 10BA % GEORGIAN SMALL LETTER CAN
-\setcclcuc 2D1B 2D1B 10BB % GEORGIAN SMALL LETTER JIL
-\setcclcuc 2D1C 2D1C 10BC % GEORGIAN SMALL LETTER CIL
-\setcclcuc 2D1D 2D1D 10BD % GEORGIAN SMALL LETTER CHAR
-\setcclcuc 2D1E 2D1E 10BE % GEORGIAN SMALL LETTER XAN
-\setcclcuc 2D1F 2D1F 10BF % GEORGIAN SMALL LETTER JHAN
-\setcclcuc 2D20 2D20 10C0 % GEORGIAN SMALL LETTER HAE
-\setcclcuc 2D21 2D21 10C1 % GEORGIAN SMALL LETTER HE
-\setcclcuc 2D22 2D22 10C2 % GEORGIAN SMALL LETTER HIE
-\setcclcuc 2D23 2D23 10C3 % GEORGIAN SMALL LETTER WE
-\setcclcuc 2D24 2D24 10C4 % GEORGIAN SMALL LETTER HAR
-\setcclcuc 2D25 2D25 10C5 % GEORGIAN SMALL LETTER HOE
-\setcclcuc FB00 FB00 FB00 % LATIN SMALL LIGATURE FF
-\setcclcuc FB01 FB01 FB01 % LATIN SMALL LIGATURE FI
-\setcclcuc FB02 FB02 FB02 % LATIN SMALL LIGATURE FL
-\setcclcuc FB03 FB03 FB03 % LATIN SMALL LIGATURE FFI
-\setcclcuc FB04 FB04 FB04 % LATIN SMALL LIGATURE FFL
-\setcclcuc FB05 FB05 FB05 % LATIN SMALL LIGATURE LONG S T
-\setcclcuc FB06 FB06 FB06 % LATIN SMALL LIGATURE ST
-\setcclcuc FB13 FB13 FB13 % ARMENIAN SMALL LIGATURE MEN NOW
-\setcclcuc FB14 FB14 FB14 % ARMENIAN SMALL LIGATURE MEN ECH
-\setcclcuc FB15 FB15 FB15 % ARMENIAN SMALL LIGATURE MEN INI
-\setcclcuc FB16 FB16 FB16 % ARMENIAN SMALL LIGATURE VEW NOW
-\setcclcuc FB17 FB17 FB17 % ARMENIAN SMALL LIGATURE MEN XEH
-\setcclcuc FF21 FF41 FF21 % FULLWIDTH LATIN CAPITAL LETTER A
-\setcclcuc FF22 FF42 FF22 % FULLWIDTH LATIN CAPITAL LETTER B
-\setcclcuc FF23 FF43 FF23 % FULLWIDTH LATIN CAPITAL LETTER C
-\setcclcuc FF24 FF44 FF24 % FULLWIDTH LATIN CAPITAL LETTER D
-\setcclcuc FF25 FF45 FF25 % FULLWIDTH LATIN CAPITAL LETTER E
-\setcclcuc FF26 FF46 FF26 % FULLWIDTH LATIN CAPITAL LETTER F
-\setcclcuc FF27 FF47 FF27 % FULLWIDTH LATIN CAPITAL LETTER G
-\setcclcuc FF28 FF48 FF28 % FULLWIDTH LATIN CAPITAL LETTER H
-\setcclcuc FF29 FF49 FF29 % FULLWIDTH LATIN CAPITAL LETTER I
-\setcclcuc FF2A FF4A FF2A % FULLWIDTH LATIN CAPITAL LETTER J
-\setcclcuc FF2B FF4B FF2B % FULLWIDTH LATIN CAPITAL LETTER K
-\setcclcuc FF2C FF4C FF2C % FULLWIDTH LATIN CAPITAL LETTER L
-\setcclcuc FF2D FF4D FF2D % FULLWIDTH LATIN CAPITAL LETTER M
-\setcclcuc FF2E FF4E FF2E % FULLWIDTH LATIN CAPITAL LETTER N
-\setcclcuc FF2F FF4F FF2F % FULLWIDTH LATIN CAPITAL LETTER O
-\setcclcuc FF30 FF50 FF30 % FULLWIDTH LATIN CAPITAL LETTER P
-\setcclcuc FF31 FF51 FF31 % FULLWIDTH LATIN CAPITAL LETTER Q
-\setcclcuc FF32 FF52 FF32 % FULLWIDTH LATIN CAPITAL LETTER R
-\setcclcuc FF33 FF53 FF33 % FULLWIDTH LATIN CAPITAL LETTER S
-\setcclcuc FF34 FF54 FF34 % FULLWIDTH LATIN CAPITAL LETTER T
-\setcclcuc FF35 FF55 FF35 % FULLWIDTH LATIN CAPITAL LETTER U
-\setcclcuc FF36 FF56 FF36 % FULLWIDTH LATIN CAPITAL LETTER V
-\setcclcuc FF37 FF57 FF37 % FULLWIDTH LATIN CAPITAL LETTER W
-\setcclcuc FF38 FF58 FF38 % FULLWIDTH LATIN CAPITAL LETTER X
-\setcclcuc FF39 FF59 FF39 % FULLWIDTH LATIN CAPITAL LETTER Y
-\setcclcuc FF3A FF5A FF3A % FULLWIDTH LATIN CAPITAL LETTER Z
-\setcclcuc FF41 FF41 FF21 % FULLWIDTH LATIN SMALL LETTER A
-\setcclcuc FF42 FF42 FF22 % FULLWIDTH LATIN SMALL LETTER B
-\setcclcuc FF43 FF43 FF23 % FULLWIDTH LATIN SMALL LETTER C
-\setcclcuc FF44 FF44 FF24 % FULLWIDTH LATIN SMALL LETTER D
-\setcclcuc FF45 FF45 FF25 % FULLWIDTH LATIN SMALL LETTER E
-\setcclcuc FF46 FF46 FF26 % FULLWIDTH LATIN SMALL LETTER F
-\setcclcuc FF47 FF47 FF27 % FULLWIDTH LATIN SMALL LETTER G
-\setcclcuc FF48 FF48 FF28 % FULLWIDTH LATIN SMALL LETTER H
-\setcclcuc FF49 FF49 FF29 % FULLWIDTH LATIN SMALL LETTER I
-\setcclcuc FF4A FF4A FF2A % FULLWIDTH LATIN SMALL LETTER J
-\setcclcuc FF4B FF4B FF2B % FULLWIDTH LATIN SMALL LETTER K
-\setcclcuc FF4C FF4C FF2C % FULLWIDTH LATIN SMALL LETTER L
-\setcclcuc FF4D FF4D FF2D % FULLWIDTH LATIN SMALL LETTER M
-\setcclcuc FF4E FF4E FF2E % FULLWIDTH LATIN SMALL LETTER N
-\setcclcuc FF4F FF4F FF2F % FULLWIDTH LATIN SMALL LETTER O
-\setcclcuc FF50 FF50 FF30 % FULLWIDTH LATIN SMALL LETTER P
-\setcclcuc FF51 FF51 FF31 % FULLWIDTH LATIN SMALL LETTER Q
-\setcclcuc FF52 FF52 FF32 % FULLWIDTH LATIN SMALL LETTER R
-\setcclcuc FF53 FF53 FF33 % FULLWIDTH LATIN SMALL LETTER S
-\setcclcuc FF54 FF54 FF34 % FULLWIDTH LATIN SMALL LETTER T
-\setcclcuc FF55 FF55 FF35 % FULLWIDTH LATIN SMALL LETTER U
-\setcclcuc FF56 FF56 FF36 % FULLWIDTH LATIN SMALL LETTER V
-\setcclcuc FF57 FF57 FF37 % FULLWIDTH LATIN SMALL LETTER W
-\setcclcuc FF58 FF58 FF38 % FULLWIDTH LATIN SMALL LETTER X
-\setcclcuc FF59 FF59 FF39 % FULLWIDTH LATIN SMALL LETTER Y
-\setcclcuc FF5A FF5A FF3A % FULLWIDTH LATIN SMALL LETTER Z
+% lc/uc/catcode mappings
+
+\setcclcucx 0041 0061 0041 % LATIN CAPITAL LETTER A
+\setcclcucx 0042 0062 0042 % LATIN CAPITAL LETTER B
+\setcclcucx 0043 0063 0043 % LATIN CAPITAL LETTER C
+\setcclcucx 0044 0064 0044 % LATIN CAPITAL LETTER D
+\setcclcucx 0045 0065 0045 % LATIN CAPITAL LETTER E
+\setcclcucx 0046 0066 0046 % LATIN CAPITAL LETTER F
+\setcclcucx 0047 0067 0047 % LATIN CAPITAL LETTER G
+\setcclcucx 0048 0068 0048 % LATIN CAPITAL LETTER H
+\setcclcucx 0049 0069 0049 % LATIN CAPITAL LETTER I
+\setcclcucx 004A 006A 004A % LATIN CAPITAL LETTER J
+\setcclcucx 004B 006B 004B % LATIN CAPITAL LETTER K
+\setcclcucx 004C 006C 004C % LATIN CAPITAL LETTER L
+\setcclcucx 004D 006D 004D % LATIN CAPITAL LETTER M
+\setcclcucx 004E 006E 004E % LATIN CAPITAL LETTER N
+\setcclcucx 004F 006F 004F % LATIN CAPITAL LETTER O
+\setcclcucx 0050 0070 0050 % LATIN CAPITAL LETTER P
+\setcclcucx 0051 0071 0051 % LATIN CAPITAL LETTER Q
+\setcclcucx 0052 0072 0052 % LATIN CAPITAL LETTER R
+\setcclcucx 0053 0073 0053 % LATIN CAPITAL LETTER S
+\setcclcucx 0054 0074 0054 % LATIN CAPITAL LETTER T
+\setcclcucx 0055 0075 0055 % LATIN CAPITAL LETTER U
+\setcclcucx 0056 0076 0056 % LATIN CAPITAL LETTER V
+\setcclcucx 0057 0077 0057 % LATIN CAPITAL LETTER W
+\setcclcucx 0058 0078 0058 % LATIN CAPITAL LETTER X
+\setcclcucx 0059 0079 0059 % LATIN CAPITAL LETTER Y
+\setcclcucx 005A 007A 005A % LATIN CAPITAL LETTER Z
+\setcclcucx 0061 0061 0041 % LATIN SMALL LETTER A
+\setcclcucx 0062 0062 0042 % LATIN SMALL LETTER B
+\setcclcucx 0063 0063 0043 % LATIN SMALL LETTER C
+\setcclcucx 0064 0064 0044 % LATIN SMALL LETTER D
+\setcclcucx 0065 0065 0045 % LATIN SMALL LETTER E
+\setcclcucx 0066 0066 0046 % LATIN SMALL LETTER F
+\setcclcucx 0067 0067 0047 % LATIN SMALL LETTER G
+\setcclcucx 0068 0068 0048 % LATIN SMALL LETTER H
+\setcclcucx 0069 0069 0049 % LATIN SMALL LETTER I
+\setcclcucx 006A 006A 004A % LATIN SMALL LETTER J
+\setcclcucx 006B 006B 004B % LATIN SMALL LETTER K
+\setcclcucx 006C 006C 004C % LATIN SMALL LETTER L
+\setcclcucx 006D 006D 004D % LATIN SMALL LETTER M
+\setcclcucx 006E 006E 004E % LATIN SMALL LETTER N
+\setcclcucx 006F 006F 004F % LATIN SMALL LETTER O
+\setcclcucx 0070 0070 0050 % LATIN SMALL LETTER P
+\setcclcucx 0071 0071 0051 % LATIN SMALL LETTER Q
+\setcclcucx 0072 0072 0052 % LATIN SMALL LETTER R
+\setcclcucx 0073 0073 0053 % LATIN SMALL LETTER S
+\setcclcucx 0074 0074 0054 % LATIN SMALL LETTER T
+\setcclcucx 0075 0075 0055 % LATIN SMALL LETTER U
+\setcclcucx 0076 0076 0056 % LATIN SMALL LETTER V
+\setcclcucx 0077 0077 0057 % LATIN SMALL LETTER W
+\setcclcucx 0078 0078 0058 % LATIN SMALL LETTER X
+\setcclcucx 0079 0079 0059 % LATIN SMALL LETTER Y
+\setcclcucx 007A 007A 005A % LATIN SMALL LETTER Z
+\setcclcucx 00AA 00AA 00AA % FEMININE ORDINAL INDICATOR
+\setcclcucx 00B5 00B5 039C % MICRO SIGN
+\setcclcucx 00BA 00BA 00BA % MASCULINE ORDINAL INDICATOR
+\setcclcucx 00C0 00E0 00C0 % LATIN CAPITAL LETTER A WITH GRAVE
+\setcclcucx 00C1 00E1 00C1 % LATIN CAPITAL LETTER A WITH ACUTE
+\setcclcucx 00C2 00E2 00C2 % LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+\setcclcucx 00C3 00E3 00C3 % LATIN CAPITAL LETTER A WITH TILDE
+\setcclcucx 00C4 00E4 00C4 % LATIN CAPITAL LETTER A WITH DIAERESIS
+\setcclcucx 00C5 00E5 00C5 % LATIN CAPITAL LETTER A WITH RING ABOVE
+\setcclcucx 00C6 00E6 00C6 % LATIN CAPITAL LETTER AE
+\setcclcucx 00C7 00E7 00C7 % LATIN CAPITAL LETTER C WITH CEDILLA
+\setcclcucx 00C8 00E8 00C8 % LATIN CAPITAL LETTER E WITH GRAVE
+\setcclcucx 00C9 00E9 00C9 % LATIN CAPITAL LETTER E WITH ACUTE
+\setcclcucx 00CA 00EA 00CA % LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+\setcclcucx 00CB 00EB 00CB % LATIN CAPITAL LETTER E WITH DIAERESIS
+\setcclcucx 00CC 00EC 00CC % LATIN CAPITAL LETTER I WITH GRAVE
+\setcclcucx 00CD 00ED 00CD % LATIN CAPITAL LETTER I WITH ACUTE
+\setcclcucx 00CE 00EE 00CE % LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+\setcclcucx 00CF 00EF 00CF % LATIN CAPITAL LETTER I WITH DIAERESIS
+\setcclcucx 00D0 00F0 00D0 % LATIN CAPITAL LETTER ETH
+\setcclcucx 00D1 00F1 00D1 % LATIN CAPITAL LETTER N WITH TILDE
+\setcclcucx 00D2 00F2 00D2 % LATIN CAPITAL LETTER O WITH GRAVE
+\setcclcucx 00D3 00F3 00D3 % LATIN CAPITAL LETTER O WITH ACUTE
+\setcclcucx 00D4 00F4 00D4 % LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+\setcclcucx 00D5 00F5 00D5 % LATIN CAPITAL LETTER O WITH TILDE
+\setcclcucx 00D6 00F6 00D6 % LATIN CAPITAL LETTER O WITH DIAERESIS
+\setcclcucx 00D8 00F8 00D8 % LATIN CAPITAL LETTER O WITH STROKE
+\setcclcucx 00D9 00F9 00D9 % LATIN CAPITAL LETTER U WITH GRAVE
+\setcclcucx 00DA 00FA 00DA % LATIN CAPITAL LETTER U WITH ACUTE
+\setcclcucx 00DB 00FB 00DB % LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+\setcclcucx 00DC 00FC 00DC % LATIN CAPITAL LETTER U WITH DIAERESIS
+\setcclcucx 00DD 00FD 00DD % LATIN CAPITAL LETTER Y WITH ACUTE
+\setcclcucx 00DE 00FE 00DE % LATIN CAPITAL LETTER THORN
+\setcclcucx 00DF 00DF 00DF % LATIN SMALL LETTER SHARP S
+\setcclcucx 00E0 00E0 00C0 % LATIN SMALL LETTER A WITH GRAVE
+\setcclcucx 00E1 00E1 00C1 % LATIN SMALL LETTER A WITH ACUTE
+\setcclcucx 00E2 00E2 00C2 % LATIN SMALL LETTER A WITH CIRCUMFLEX
+\setcclcucx 00E3 00E3 00C3 % LATIN SMALL LETTER A WITH TILDE
+\setcclcucx 00E4 00E4 00C4 % LATIN SMALL LETTER A WITH DIAERESIS
+\setcclcucx 00E5 00E5 00C5 % LATIN SMALL LETTER A WITH RING ABOVE
+\setcclcucx 00E6 00E6 00C6 % LATIN SMALL LETTER AE
+\setcclcucx 00E7 00E7 00C7 % LATIN SMALL LETTER C WITH CEDILLA
+\setcclcucx 00E8 00E8 00C8 % LATIN SMALL LETTER E WITH GRAVE
+\setcclcucx 00E9 00E9 00C9 % LATIN SMALL LETTER E WITH ACUTE
+\setcclcucx 00EA 00EA 00CA % LATIN SMALL LETTER E WITH CIRCUMFLEX
+\setcclcucx 00EB 00EB 00CB % LATIN SMALL LETTER E WITH DIAERESIS
+\setcclcucx 00EC 00EC 00CC % LATIN SMALL LETTER I WITH GRAVE
+\setcclcucx 00ED 00ED 00CD % LATIN SMALL LETTER I WITH ACUTE
+\setcclcucx 00EE 00EE 00CE % LATIN SMALL LETTER I WITH CIRCUMFLEX
+\setcclcucx 00EF 00EF 00CF % LATIN SMALL LETTER I WITH DIAERESIS
+\setcclcucx 00F0 00F0 00D0 % LATIN SMALL LETTER ETH
+\setcclcucx 00F1 00F1 00D1 % LATIN SMALL LETTER N WITH TILDE
+\setcclcucx 00F2 00F2 00D2 % LATIN SMALL LETTER O WITH GRAVE
+\setcclcucx 00F3 00F3 00D3 % LATIN SMALL LETTER O WITH ACUTE
+\setcclcucx 00F4 00F4 00D4 % LATIN SMALL LETTER O WITH CIRCUMFLEX
+\setcclcucx 00F5 00F5 00D5 % LATIN SMALL LETTER O WITH TILDE
+\setcclcucx 00F6 00F6 00D6 % LATIN SMALL LETTER O WITH DIAERESIS
+\setcclcucx 00F8 00F8 00D8 % LATIN SMALL LETTER O WITH STROKE
+\setcclcucx 00F9 00F9 00D9 % LATIN SMALL LETTER U WITH GRAVE
+\setcclcucx 00FA 00FA 00DA % LATIN SMALL LETTER U WITH ACUTE
+\setcclcucx 00FB 00FB 00DB % LATIN SMALL LETTER U WITH CIRCUMFLEX
+\setcclcucx 00FC 00FC 00DC % LATIN SMALL LETTER U WITH DIAERESIS
+\setcclcucx 00FD 00FD 00DD % LATIN SMALL LETTER Y WITH ACUTE
+\setcclcucx 00FE 00FE 00DE % LATIN SMALL LETTER THORN
+\setcclcucx 00FF 00FF 0178 % LATIN SMALL LETTER Y WITH DIAERESIS
+\setcclcucx 0100 0101 0100 % LATIN CAPITAL LETTER A WITH MACRON
+\setcclcucx 0101 0101 0100 % LATIN SMALL LETTER A WITH MACRON
+\setcclcucx 0102 0103 0102 % LATIN CAPITAL LETTER A WITH BREVE
+\setcclcucx 0103 0103 0102 % LATIN SMALL LETTER A WITH BREVE
+\setcclcucx 0104 0105 0104 % LATIN CAPITAL LETTER A WITH OGONEK
+\setcclcucx 0105 0105 0104 % LATIN SMALL LETTER A WITH OGONEK
+\setcclcucx 0106 0107 0106 % LATIN CAPITAL LETTER C WITH ACUTE
+\setcclcucx 0107 0107 0106 % LATIN SMALL LETTER C WITH ACUTE
+\setcclcucx 0108 0109 0108 % LATIN CAPITAL LETTER C WITH CIRCUMFLEX
+\setcclcucx 0109 0109 0108 % LATIN SMALL LETTER C WITH CIRCUMFLEX
+\setcclcucx 010A 010B 010A % LATIN CAPITAL LETTER C WITH DOT ABOVE
+\setcclcucx 010B 010B 010A % LATIN SMALL LETTER C WITH DOT ABOVE
+\setcclcucx 010C 010D 010C % LATIN CAPITAL LETTER C WITH CARON
+\setcclcucx 010D 010D 010C % LATIN SMALL LETTER C WITH CARON
+\setcclcucx 010E 010F 010E % LATIN CAPITAL LETTER D WITH CARON
+\setcclcucx 010F 010F 010E % LATIN SMALL LETTER D WITH CARON
+\setcclcucx 0110 0111 0110 % LATIN CAPITAL LETTER D WITH STROKE
+\setcclcucx 0111 0111 0110 % LATIN SMALL LETTER D WITH STROKE
+\setcclcucx 0112 0113 0112 % LATIN CAPITAL LETTER E WITH MACRON
+\setcclcucx 0113 0113 0112 % LATIN SMALL LETTER E WITH MACRON
+\setcclcucx 0114 0115 0114 % LATIN CAPITAL LETTER E WITH BREVE
+\setcclcucx 0115 0115 0114 % LATIN SMALL LETTER E WITH BREVE
+\setcclcucx 0116 0117 0116 % LATIN CAPITAL LETTER E WITH DOT ABOVE
+\setcclcucx 0117 0117 0116 % LATIN SMALL LETTER E WITH DOT ABOVE
+\setcclcucx 0118 0119 0118 % LATIN CAPITAL LETTER E WITH OGONEK
+\setcclcucx 0119 0119 0118 % LATIN SMALL LETTER E WITH OGONEK
+\setcclcucx 011A 011B 011A % LATIN CAPITAL LETTER E WITH CARON
+\setcclcucx 011B 011B 011A % LATIN SMALL LETTER E WITH CARON
+\setcclcucx 011C 011D 011C % LATIN CAPITAL LETTER G WITH CIRCUMFLEX
+\setcclcucx 011D 011D 011C % LATIN SMALL LETTER G WITH CIRCUMFLEX
+\setcclcucx 011E 011F 011E % LATIN CAPITAL LETTER G WITH BREVE
+\setcclcucx 011F 011F 011E % LATIN SMALL LETTER G WITH BREVE
+\setcclcucx 0120 0121 0120 % LATIN CAPITAL LETTER G WITH DOT ABOVE
+\setcclcucx 0121 0121 0120 % LATIN SMALL LETTER G WITH DOT ABOVE
+\setcclcucx 0122 0123 0122 % LATIN CAPITAL LETTER G WITH CEDILLA
+\setcclcucx 0123 0123 0122 % LATIN SMALL LETTER G WITH CEDILLA
+\setcclcucx 0124 0125 0124 % LATIN CAPITAL LETTER H WITH CIRCUMFLEX
+\setcclcucx 0125 0125 0124 % LATIN SMALL LETTER H WITH CIRCUMFLEX
+\setcclcucx 0126 0127 0126 % LATIN CAPITAL LETTER H WITH STROKE
+\setcclcucx 0127 0127 0126 % LATIN SMALL LETTER H WITH STROKE
+\setcclcucx 0128 0129 0128 % LATIN CAPITAL LETTER I WITH TILDE
+\setcclcucx 0129 0129 0128 % LATIN SMALL LETTER I WITH TILDE
+\setcclcucx 012A 012B 012A % LATIN CAPITAL LETTER I WITH MACRON
+\setcclcucx 012B 012B 012A % LATIN SMALL LETTER I WITH MACRON
+\setcclcucx 012C 012D 012C % LATIN CAPITAL LETTER I WITH BREVE
+\setcclcucx 012D 012D 012C % LATIN SMALL LETTER I WITH BREVE
+\setcclcucx 012E 012F 012E % LATIN CAPITAL LETTER I WITH OGONEK
+\setcclcucx 012F 012F 012E % LATIN SMALL LETTER I WITH OGONEK
+\setcclcucx 0130 0069 0130 % LATIN CAPITAL LETTER I WITH DOT ABOVE
+\setcclcucx 0131 0131 0049 % LATIN SMALL LETTER DOTLESS I
+\setcclcucx 0132 0133 0132 % LATIN CAPITAL LIGATURE IJ
+\setcclcucx 0133 0133 0132 % LATIN SMALL LIGATURE IJ
+\setcclcucx 0134 0135 0134 % LATIN CAPITAL LETTER J WITH CIRCUMFLEX
+\setcclcucx 0135 0135 0134 % LATIN SMALL LETTER J WITH CIRCUMFLEX
+\setcclcucx 0136 0137 0136 % LATIN CAPITAL LETTER K WITH CEDILLA
+\setcclcucx 0137 0137 0136 % LATIN SMALL LETTER K WITH CEDILLA
+\setcclcucx 0138 0138 0138 % LATIN SMALL LETTER KRA
+\setcclcucx 0139 013A 0139 % LATIN CAPITAL LETTER L WITH ACUTE
+\setcclcucx 013A 013A 0139 % LATIN SMALL LETTER L WITH ACUTE
+\setcclcucx 013B 013C 013B % LATIN CAPITAL LETTER L WITH CEDILLA
+\setcclcucx 013C 013C 013B % LATIN SMALL LETTER L WITH CEDILLA
+\setcclcucx 013D 013E 013D % LATIN CAPITAL LETTER L WITH CARON
+\setcclcucx 013E 013E 013D % LATIN SMALL LETTER L WITH CARON
+\setcclcucx 013F 0140 013F % LATIN CAPITAL LETTER L WITH MIDDLE DOT
+\setcclcucx 0140 0140 013F % LATIN SMALL LETTER L WITH MIDDLE DOT
+\setcclcucx 0141 0142 0141 % LATIN CAPITAL LETTER L WITH STROKE
+\setcclcucx 0142 0142 0141 % LATIN SMALL LETTER L WITH STROKE
+\setcclcucx 0143 0144 0143 % LATIN CAPITAL LETTER N WITH ACUTE
+\setcclcucx 0144 0144 0143 % LATIN SMALL LETTER N WITH ACUTE
+\setcclcucx 0145 0146 0145 % LATIN CAPITAL LETTER N WITH CEDILLA
+\setcclcucx 0146 0146 0145 % LATIN SMALL LETTER N WITH CEDILLA
+\setcclcucx 0147 0148 0147 % LATIN CAPITAL LETTER N WITH CARON
+\setcclcucx 0148 0148 0147 % LATIN SMALL LETTER N WITH CARON
+\setcclcucx 0149 0149 0149 % LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
+\setcclcucx 014A 014B 014A % LATIN CAPITAL LETTER ENG
+\setcclcucx 014B 014B 014A % LATIN SMALL LETTER ENG
+\setcclcucx 014C 014D 014C % LATIN CAPITAL LETTER O WITH MACRON
+\setcclcucx 014D 014D 014C % LATIN SMALL LETTER O WITH MACRON
+\setcclcucx 014E 014F 014E % LATIN CAPITAL LETTER O WITH BREVE
+\setcclcucx 014F 014F 014E % LATIN SMALL LETTER O WITH BREVE
+\setcclcucx 0150 0151 0150 % LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+\setcclcucx 0151 0151 0150 % LATIN SMALL LETTER O WITH DOUBLE ACUTE
+\setcclcucx 0152 0153 0152 % LATIN CAPITAL LIGATURE OE
+\setcclcucx 0153 0153 0152 % LATIN SMALL LIGATURE OE
+\setcclcucx 0154 0155 0154 % LATIN CAPITAL LETTER R WITH ACUTE
+\setcclcucx 0155 0155 0154 % LATIN SMALL LETTER R WITH ACUTE
+\setcclcucx 0156 0157 0156 % LATIN CAPITAL LETTER R WITH CEDILLA
+\setcclcucx 0157 0157 0156 % LATIN SMALL LETTER R WITH CEDILLA
+\setcclcucx 0158 0159 0158 % LATIN CAPITAL LETTER R WITH CARON
+\setcclcucx 0159 0159 0158 % LATIN SMALL LETTER R WITH CARON
+\setcclcucx 015A 015B 015A % LATIN CAPITAL LETTER S WITH ACUTE
+\setcclcucx 015B 015B 015A % LATIN SMALL LETTER S WITH ACUTE
+\setcclcucx 015C 015D 015C % LATIN CAPITAL LETTER S WITH CIRCUMFLEX
+\setcclcucx 015D 015D 015C % LATIN SMALL LETTER S WITH CIRCUMFLEX
+\setcclcucx 015E 015F 015E % LATIN CAPITAL LETTER S WITH CEDILLA
+\setcclcucx 015F 015F 015E % LATIN SMALL LETTER S WITH CEDILLA
+\setcclcucx 0160 0161 0160 % LATIN CAPITAL LETTER S WITH CARON
+\setcclcucx 0161 0161 0160 % LATIN SMALL LETTER S WITH CARON
+\setcclcucx 0162 0163 0162 % LATIN CAPITAL LETTER T WITH CEDILLA
+\setcclcucx 0163 0163 0162 % LATIN SMALL LETTER T WITH CEDILLA
+\setcclcucx 0164 0165 0164 % LATIN CAPITAL LETTER T WITH CARON
+\setcclcucx 0165 0165 0164 % LATIN SMALL LETTER T WITH CARON
+\setcclcucx 0166 0167 0166 % LATIN CAPITAL LETTER T WITH STROKE
+\setcclcucx 0167 0167 0166 % LATIN SMALL LETTER T WITH STROKE
+\setcclcucx 0168 0169 0168 % LATIN CAPITAL LETTER U WITH TILDE
+\setcclcucx 0169 0169 0168 % LATIN SMALL LETTER U WITH TILDE
+\setcclcucx 016A 016B 016A % LATIN CAPITAL LETTER U WITH MACRON
+\setcclcucx 016B 016B 016A % LATIN SMALL LETTER U WITH MACRON
+\setcclcucx 016C 016D 016C % LATIN CAPITAL LETTER U WITH BREVE
+\setcclcucx 016D 016D 016C % LATIN SMALL LETTER U WITH BREVE
+\setcclcucx 016E 016F 016E % LATIN CAPITAL LETTER U WITH RING ABOVE
+\setcclcucx 016F 016F 016E % LATIN SMALL LETTER U WITH RING ABOVE
+\setcclcucx 0170 0171 0170 % LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+\setcclcucx 0171 0171 0170 % LATIN SMALL LETTER U WITH DOUBLE ACUTE
+\setcclcucx 0172 0173 0172 % LATIN CAPITAL LETTER U WITH OGONEK
+\setcclcucx 0173 0173 0172 % LATIN SMALL LETTER U WITH OGONEK
+\setcclcucx 0174 0175 0174 % LATIN CAPITAL LETTER W WITH CIRCUMFLEX
+\setcclcucx 0175 0175 0174 % LATIN SMALL LETTER W WITH CIRCUMFLEX
+\setcclcucx 0176 0177 0176 % LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
+\setcclcucx 0177 0177 0176 % LATIN SMALL LETTER Y WITH CIRCUMFLEX
+\setcclcucx 0178 00FF 0178 % LATIN CAPITAL LETTER Y WITH DIAERESIS
+\setcclcucx 0179 017A 0179 % LATIN CAPITAL LETTER Z WITH ACUTE
+\setcclcucx 017A 017A 0179 % LATIN SMALL LETTER Z WITH ACUTE
+\setcclcucx 017B 017C 017B % LATIN CAPITAL LETTER Z WITH DOT ABOVE
+\setcclcucx 017C 017C 017B % LATIN SMALL LETTER Z WITH DOT ABOVE
+\setcclcucx 017D 017E 017D % LATIN CAPITAL LETTER Z WITH CARON
+\setcclcucx 017E 017E 017D % LATIN SMALL LETTER Z WITH CARON
+\setcclcucx 017F 017F 0053 % LATIN SMALL LETTER LONG S
+\setcclcucx 0180 0180 0243 % LATIN SMALL LETTER B WITH STROKE
+\setcclcucx 0181 0253 0181 % LATIN CAPITAL LETTER B WITH HOOK
+\setcclcucx 0182 0183 0182 % LATIN CAPITAL LETTER B WITH TOPBAR
+\setcclcucx 0183 0183 0182 % LATIN SMALL LETTER B WITH TOPBAR
+\setcclcucx 0184 0185 0184 % LATIN CAPITAL LETTER TONE SIX
+\setcclcucx 0185 0185 0184 % LATIN SMALL LETTER TONE SIX
+\setcclcucx 0186 0254 0186 % LATIN CAPITAL LETTER OPEN O
+\setcclcucx 0187 0188 0187 % LATIN CAPITAL LETTER C WITH HOOK
+\setcclcucx 0188 0188 0187 % LATIN SMALL LETTER C WITH HOOK
+\setcclcucx 0189 0256 0189 % LATIN CAPITAL LETTER AFRICAN D
+\setcclcucx 018A 0257 018A % LATIN CAPITAL LETTER D WITH HOOK
+\setcclcucx 018B 018C 018B % LATIN CAPITAL LETTER D WITH TOPBAR
+\setcclcucx 018C 018C 018B % LATIN SMALL LETTER D WITH TOPBAR
+\setcclcucx 018D 018D 018D % LATIN SMALL LETTER TURNED DELTA
+\setcclcucx 018E 01DD 018E % LATIN CAPITAL LETTER REVERSED E
+\setcclcucx 018F 0259 018F % LATIN CAPITAL LETTER SCHWA
+\setcclcucx 0190 025B 0190 % LATIN CAPITAL LETTER OPEN E
+\setcclcucx 0191 0192 0191 % LATIN CAPITAL LETTER F WITH HOOK
+\setcclcucx 0192 0192 0191 % LATIN SMALL LETTER F WITH HOOK
+\setcclcucx 0193 0260 0193 % LATIN CAPITAL LETTER G WITH HOOK
+\setcclcucx 0194 0263 0194 % LATIN CAPITAL LETTER GAMMA
+\setcclcucx 0195 0195 01F6 % LATIN SMALL LETTER HV
+\setcclcucx 0196 0269 0196 % LATIN CAPITAL LETTER IOTA
+\setcclcucx 0197 0268 0197 % LATIN CAPITAL LETTER I WITH STROKE
+\setcclcucx 0198 0199 0198 % LATIN CAPITAL LETTER K WITH HOOK
+\setcclcucx 0199 0199 0198 % LATIN SMALL LETTER K WITH HOOK
+\setcclcucx 019A 019A 023D % LATIN SMALL LETTER L WITH BAR
+\setcclcucx 019B 019B 019B % LATIN SMALL LETTER LAMBDA WITH STROKE
+\setcclcucx 019C 026F 019C % LATIN CAPITAL LETTER TURNED M
+\setcclcucx 019D 0272 019D % LATIN CAPITAL LETTER N WITH LEFT HOOK
+\setcclcucx 019E 019E 0220 % LATIN SMALL LETTER N WITH LONG RIGHT LEG
+\setcclcucx 019F 0275 019F % LATIN CAPITAL LETTER O WITH MIDDLE TILDE
+\setcclcucx 01A0 01A1 01A0 % LATIN CAPITAL LETTER O WITH HORN
+\setcclcucx 01A1 01A1 01A0 % LATIN SMALL LETTER O WITH HORN
+\setcclcucx 01A2 01A3 01A2 % LATIN CAPITAL LETTER OI
+\setcclcucx 01A3 01A3 01A2 % LATIN SMALL LETTER OI
+\setcclcucx 01A4 01A5 01A4 % LATIN CAPITAL LETTER P WITH HOOK
+\setcclcucx 01A5 01A5 01A4 % LATIN SMALL LETTER P WITH HOOK
+\setcclcucx 01A6 0280 01A6 % LATIN LETTER YR
+\setcclcucx 01A7 01A8 01A7 % LATIN CAPITAL LETTER TONE TWO
+\setcclcucx 01A8 01A8 01A7 % LATIN SMALL LETTER TONE TWO
+\setcclcucx 01A9 0283 01A9 % LATIN CAPITAL LETTER ESH
+\setcclcucx 01AA 01AA 01AA % LATIN LETTER REVERSED ESH LOOP
+\setcclcucx 01AB 01AB 01AB % LATIN SMALL LETTER T WITH PALATAL HOOK
+\setcclcucx 01AC 01AD 01AC % LATIN CAPITAL LETTER T WITH HOOK
+\setcclcucx 01AD 01AD 01AC % LATIN SMALL LETTER T WITH HOOK
+\setcclcucx 01AE 0288 01AE % LATIN CAPITAL LETTER T WITH RETROFLEX HOOK
+\setcclcucx 01AF 01B0 01AF % LATIN CAPITAL LETTER U WITH HORN
+\setcclcucx 01B0 01B0 01AF % LATIN SMALL LETTER U WITH HORN
+\setcclcucx 01B1 028A 01B1 % LATIN CAPITAL LETTER UPSILON
+\setcclcucx 01B2 028B 01B2 % LATIN CAPITAL LETTER V WITH HOOK
+\setcclcucx 01B3 01B4 01B3 % LATIN CAPITAL LETTER Y WITH HOOK
+\setcclcucx 01B4 01B4 01B3 % LATIN SMALL LETTER Y WITH HOOK
+\setcclcucx 01B5 01B6 01B5 % LATIN CAPITAL LETTER Z WITH STROKE
+\setcclcucx 01B6 01B6 01B5 % LATIN SMALL LETTER Z WITH STROKE
+\setcclcucx 01B7 0292 01B7 % LATIN CAPITAL LETTER EZH
+\setcclcucx 01B8 01B9 01B8 % LATIN CAPITAL LETTER EZH REVERSED
+\setcclcucx 01B9 01B9 01B8 % LATIN SMALL LETTER EZH REVERSED
+\setcclcucx 01BA 01BA 01BA % LATIN SMALL LETTER EZH WITH TAIL
+\setcclcucx 01BC 01BD 01BC % LATIN CAPITAL LETTER TONE FIVE
+\setcclcucx 01BD 01BD 01BC % LATIN SMALL LETTER TONE FIVE
+\setcclcucx 01BE 01BE 01BE % LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE
+\setcclcucx 01BF 01BF 01F7 % LATIN LETTER WYNN
+\setcclcucx 01C4 01C6 01C5 % LATIN CAPITAL LETTER DZ WITH CARON
+\setcclcucx 01C5 01C6 01C4 % LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON
+\setcclcucx 01C6 01C6 01C4 % LATIN SMALL LETTER DZ WITH CARON
+\setcclcucx 01C7 01C9 01C8 % LATIN CAPITAL LETTER LJ
+\setcclcucx 01C8 01C9 01C7 % LATIN CAPITAL LETTER L WITH SMALL LETTER J
+\setcclcucx 01C9 01C9 01C7 % LATIN SMALL LETTER LJ
+\setcclcucx 01CA 01CC 01CB % LATIN CAPITAL LETTER NJ
+\setcclcucx 01CB 01CC 01CA % LATIN CAPITAL LETTER N WITH SMALL LETTER J
+\setcclcucx 01CC 01CC 01CA % LATIN SMALL LETTER NJ
+\setcclcucx 01CD 01CE 01CD % LATIN CAPITAL LETTER A WITH CARON
+\setcclcucx 01CE 01CE 01CD % LATIN SMALL LETTER A WITH CARON
+\setcclcucx 01CF 01D0 01CF % LATIN CAPITAL LETTER I WITH CARON
+\setcclcucx 01D0 01D0 01CF % LATIN SMALL LETTER I WITH CARON
+\setcclcucx 01D1 01D2 01D1 % LATIN CAPITAL LETTER O WITH CARON
+\setcclcucx 01D2 01D2 01D1 % LATIN SMALL LETTER O WITH CARON
+\setcclcucx 01D3 01D4 01D3 % LATIN CAPITAL LETTER U WITH CARON
+\setcclcucx 01D4 01D4 01D3 % LATIN SMALL LETTER U WITH CARON
+\setcclcucx 01D5 01D6 01D5 % LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
+\setcclcucx 01D6 01D6 01D5 % LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
+\setcclcucx 01D7 01D8 01D7 % LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
+\setcclcucx 01D8 01D8 01D7 % LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
+\setcclcucx 01D9 01DA 01D9 % LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
+\setcclcucx 01DA 01DA 01D9 % LATIN SMALL LETTER U WITH DIAERESIS AND CARON
+\setcclcucx 01DB 01DC 01DB % LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
+\setcclcucx 01DC 01DC 01DB % LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
+\setcclcucx 01DD 01DD 018E % LATIN SMALL LETTER TURNED E
+\setcclcucx 01DE 01DF 01DE % LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
+\setcclcucx 01DF 01DF 01DE % LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
+\setcclcucx 01E0 01E1 01E0 % LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
+\setcclcucx 01E1 01E1 01E0 % LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
+\setcclcucx 01E2 01E3 01E2 % LATIN CAPITAL LETTER AE WITH MACRON
+\setcclcucx 01E3 01E3 01E2 % LATIN SMALL LETTER AE WITH MACRON
+\setcclcucx 01E4 01E5 01E4 % LATIN CAPITAL LETTER G WITH STROKE
+\setcclcucx 01E5 01E5 01E4 % LATIN SMALL LETTER G WITH STROKE
+\setcclcucx 01E6 01E7 01E6 % LATIN CAPITAL LETTER G WITH CARON
+\setcclcucx 01E7 01E7 01E6 % LATIN SMALL LETTER G WITH CARON
+\setcclcucx 01E8 01E9 01E8 % LATIN CAPITAL LETTER K WITH CARON
+\setcclcucx 01E9 01E9 01E8 % LATIN SMALL LETTER K WITH CARON
+\setcclcucx 01EA 01EB 01EA % LATIN CAPITAL LETTER O WITH OGONEK
+\setcclcucx 01EB 01EB 01EA % LATIN SMALL LETTER O WITH OGONEK
+\setcclcucx 01EC 01ED 01EC % LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
+\setcclcucx 01ED 01ED 01EC % LATIN SMALL LETTER O WITH OGONEK AND MACRON
+\setcclcucx 01EE 01EF 01EE % LATIN CAPITAL LETTER EZH WITH CARON
+\setcclcucx 01EF 01EF 01EE % LATIN SMALL LETTER EZH WITH CARON
+\setcclcucx 01F0 01F0 01F0 % LATIN SMALL LETTER J WITH CARON
+\setcclcucx 01F1 01F3 01F2 % LATIN CAPITAL LETTER DZ
+\setcclcucx 01F2 01F3 01F1 % LATIN CAPITAL LETTER D WITH SMALL LETTER Z
+\setcclcucx 01F3 01F3 01F1 % LATIN SMALL LETTER DZ
+\setcclcucx 01F4 01F5 01F4 % LATIN CAPITAL LETTER G WITH ACUTE
+\setcclcucx 01F5 01F5 01F4 % LATIN SMALL LETTER G WITH ACUTE
+\setcclcucx 01F6 0195 01F6 % LATIN CAPITAL LETTER HWAIR
+\setcclcucx 01F7 01BF 01F7 % LATIN CAPITAL LETTER WYNN
+\setcclcucx 01F8 01F9 01F8 % LATIN CAPITAL LETTER N WITH GRAVE
+\setcclcucx 01F9 01F9 01F8 % LATIN SMALL LETTER N WITH GRAVE
+\setcclcucx 01FA 01FB 01FA % LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
+\setcclcucx 01FB 01FB 01FA % LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
+\setcclcucx 01FC 01FD 01FC % LATIN CAPITAL LETTER AE WITH ACUTE
+\setcclcucx 01FD 01FD 01FC % LATIN SMALL LETTER AE WITH ACUTE
+\setcclcucx 01FE 01FF 01FE % LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
+\setcclcucx 01FF 01FF 01FE % LATIN SMALL LETTER O WITH STROKE AND ACUTE
+\setcclcucx 0200 0201 0200 % LATIN CAPITAL LETTER A WITH DOUBLE GRAVE
+\setcclcucx 0201 0201 0200 % LATIN SMALL LETTER A WITH DOUBLE GRAVE
+\setcclcucx 0202 0203 0202 % LATIN CAPITAL LETTER A WITH INVERTED BREVE
+\setcclcucx 0203 0203 0202 % LATIN SMALL LETTER A WITH INVERTED BREVE
+\setcclcucx 0204 0205 0204 % LATIN CAPITAL LETTER E WITH DOUBLE GRAVE
+\setcclcucx 0205 0205 0204 % LATIN SMALL LETTER E WITH DOUBLE GRAVE
+\setcclcucx 0206 0207 0206 % LATIN CAPITAL LETTER E WITH INVERTED BREVE
+\setcclcucx 0207 0207 0206 % LATIN SMALL LETTER E WITH INVERTED BREVE
+\setcclcucx 0208 0209 0208 % LATIN CAPITAL LETTER I WITH DOUBLE GRAVE
+\setcclcucx 0209 0209 0208 % LATIN SMALL LETTER I WITH DOUBLE GRAVE
+\setcclcucx 020A 020B 020A % LATIN CAPITAL LETTER I WITH INVERTED BREVE
+\setcclcucx 020B 020B 020A % LATIN SMALL LETTER I WITH INVERTED BREVE
+\setcclcucx 020C 020D 020C % LATIN CAPITAL LETTER O WITH DOUBLE GRAVE
+\setcclcucx 020D 020D 020C % LATIN SMALL LETTER O WITH DOUBLE GRAVE
+\setcclcucx 020E 020F 020E % LATIN CAPITAL LETTER O WITH INVERTED BREVE
+\setcclcucx 020F 020F 020E % LATIN SMALL LETTER O WITH INVERTED BREVE
+\setcclcucx 0210 0211 0210 % LATIN CAPITAL LETTER R WITH DOUBLE GRAVE
+\setcclcucx 0211 0211 0210 % LATIN SMALL LETTER R WITH DOUBLE GRAVE
+\setcclcucx 0212 0213 0212 % LATIN CAPITAL LETTER R WITH INVERTED BREVE
+\setcclcucx 0213 0213 0212 % LATIN SMALL LETTER R WITH INVERTED BREVE
+\setcclcucx 0214 0215 0214 % LATIN CAPITAL LETTER U WITH DOUBLE GRAVE
+\setcclcucx 0215 0215 0214 % LATIN SMALL LETTER U WITH DOUBLE GRAVE
+\setcclcucx 0216 0217 0216 % LATIN CAPITAL LETTER U WITH INVERTED BREVE
+\setcclcucx 0217 0217 0216 % LATIN SMALL LETTER U WITH INVERTED BREVE
+\setcclcucx 0218 0219 0218 % LATIN CAPITAL LETTER S WITH COMMA BELOW
+\setcclcucx 0219 0219 0218 % LATIN SMALL LETTER S WITH COMMA BELOW
+\setcclcucx 021A 021B 021A % LATIN CAPITAL LETTER T WITH COMMA BELOW
+\setcclcucx 021B 021B 021A % LATIN SMALL LETTER T WITH COMMA BELOW
+\setcclcucx 021C 021D 021C % LATIN CAPITAL LETTER YOGH
+\setcclcucx 021D 021D 021C % LATIN SMALL LETTER YOGH
+\setcclcucx 021E 021F 021E % LATIN CAPITAL LETTER H WITH CARON
+\setcclcucx 021F 021F 021E % LATIN SMALL LETTER H WITH CARON
+\setcclcucx 0220 019E 0220 % LATIN CAPITAL LETTER N WITH LONG RIGHT LEG
+\setcclcucx 0221 0221 0221 % LATIN SMALL LETTER D WITH CURL
+\setcclcucx 0222 0223 0222 % LATIN CAPITAL LETTER OU
+\setcclcucx 0223 0223 0222 % LATIN SMALL LETTER OU
+\setcclcucx 0224 0225 0224 % LATIN CAPITAL LETTER Z WITH HOOK
+\setcclcucx 0225 0225 0224 % LATIN SMALL LETTER Z WITH HOOK
+\setcclcucx 0226 0227 0226 % LATIN CAPITAL LETTER A WITH DOT ABOVE
+\setcclcucx 0227 0227 0226 % LATIN SMALL LETTER A WITH DOT ABOVE
+\setcclcucx 0228 0229 0228 % LATIN CAPITAL LETTER E WITH CEDILLA
+\setcclcucx 0229 0229 0228 % LATIN SMALL LETTER E WITH CEDILLA
+\setcclcucx 022A 022B 022A % LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
+\setcclcucx 022B 022B 022A % LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
+\setcclcucx 022C 022D 022C % LATIN CAPITAL LETTER O WITH TILDE AND MACRON
+\setcclcucx 022D 022D 022C % LATIN SMALL LETTER O WITH TILDE AND MACRON
+\setcclcucx 022E 022F 022E % LATIN CAPITAL LETTER O WITH DOT ABOVE
+\setcclcucx 022F 022F 022E % LATIN SMALL LETTER O WITH DOT ABOVE
+\setcclcucx 0230 0231 0230 % LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
+\setcclcucx 0231 0231 0230 % LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
+\setcclcucx 0232 0233 0232 % LATIN CAPITAL LETTER Y WITH MACRON
+\setcclcucx 0233 0233 0232 % LATIN SMALL LETTER Y WITH MACRON
+\setcclcucx 0234 0234 0234 % LATIN SMALL LETTER L WITH CURL
+\setcclcucx 0235 0235 0235 % LATIN SMALL LETTER N WITH CURL
+\setcclcucx 0236 0236 0236 % LATIN SMALL LETTER T WITH CURL
+\setcclcucx 0237 0237 0237 % LATIN SMALL LETTER DOTLESS J
+\setcclcucx 0238 0238 0238 % LATIN SMALL LETTER DB DIGRAPH
+\setcclcucx 0239 0239 0239 % LATIN SMALL LETTER QP DIGRAPH
+\setcclcucx 023A 2C65 023A % LATIN CAPITAL LETTER A WITH STROKE
+\setcclcucx 023B 023C 023B % LATIN CAPITAL LETTER C WITH STROKE
+\setcclcucx 023C 023C 023B % LATIN SMALL LETTER C WITH STROKE
+\setcclcucx 023D 019A 023D % LATIN CAPITAL LETTER L WITH BAR
+\setcclcucx 023E 2C66 023E % LATIN CAPITAL LETTER T WITH DIAGONAL STROKE
+\setcclcucx 023F 023F 023F % LATIN SMALL LETTER S WITH SWASH TAIL
+\setcclcucx 0240 0240 0240 % LATIN SMALL LETTER Z WITH SWASH TAIL
+\setcclcucx 0241 0242 0241 % LATIN CAPITAL LETTER GLOTTAL STOP
+\setcclcucx 0242 0242 0241 % LATIN SMALL LETTER GLOTTAL STOP
+\setcclcucx 0243 0180 0243 % LATIN CAPITAL LETTER B WITH STROKE
+\setcclcucx 0244 0289 0244 % LATIN CAPITAL LETTER U BAR
+\setcclcucx 0245 028C 0245 % LATIN CAPITAL LETTER TURNED V
+\setcclcucx 0246 0247 0246 % LATIN CAPITAL LETTER E WITH STROKE
+\setcclcucx 0247 0247 0246 % LATIN SMALL LETTER E WITH STROKE
+\setcclcucx 0248 0249 0248 % LATIN CAPITAL LETTER J WITH STROKE
+\setcclcucx 0249 0249 0248 % LATIN SMALL LETTER J WITH STROKE
+\setcclcucx 024A 024B 024A % LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL
+\setcclcucx 024B 024B 024A % LATIN SMALL LETTER Q WITH HOOK TAIL
+\setcclcucx 024C 024D 024C % LATIN CAPITAL LETTER R WITH STROKE
+\setcclcucx 024D 024D 024C % LATIN SMALL LETTER R WITH STROKE
+\setcclcucx 024E 024F 024E % LATIN CAPITAL LETTER Y WITH STROKE
+\setcclcucx 024F 024F 024E % LATIN SMALL LETTER Y WITH STROKE
+\setcclcucx 0250 0250 0250 % LATIN SMALL LETTER TURNED A
+\setcclcucx 0251 0251 0251 % LATIN SMALL LETTER ALPHA
+\setcclcucx 0252 0252 0252 % LATIN SMALL LETTER TURNED ALPHA
+\setcclcucx 0253 0253 0181 % LATIN SMALL LETTER B WITH HOOK
+\setcclcucx 0254 0254 0186 % LATIN SMALL LETTER OPEN O
+\setcclcucx 0255 0255 0255 % LATIN SMALL LETTER C WITH CURL
+\setcclcucx 0256 0256 0189 % LATIN SMALL LETTER D WITH TAIL
+\setcclcucx 0257 0257 018A % LATIN SMALL LETTER D WITH HOOK
+\setcclcucx 0258 0258 0258 % LATIN SMALL LETTER REVERSED E
+\setcclcucx 0259 0259 018F % LATIN SMALL LETTER SCHWA
+\setcclcucx 025A 025A 025A % LATIN SMALL LETTER SCHWA WITH HOOK
+\setcclcucx 025B 025B 0190 % LATIN SMALL LETTER OPEN E
+\setcclcucx 025C 025C 025C % LATIN SMALL LETTER REVERSED OPEN E
+\setcclcucx 025D 025D 025D % LATIN SMALL LETTER REVERSED OPEN E WITH HOOK
+\setcclcucx 025E 025E 025E % LATIN SMALL LETTER CLOSED REVERSED OPEN E
+\setcclcucx 025F 025F 025F % LATIN SMALL LETTER DOTLESS J WITH STROKE
+\setcclcucx 0260 0260 0193 % LATIN SMALL LETTER G WITH HOOK
+\setcclcucx 0261 0261 0261 % LATIN SMALL LETTER SCRIPT G
+\setcclcucx 0262 0262 0262 % LATIN LETTER SMALL CAPITAL G
+\setcclcucx 0263 0263 0194 % LATIN SMALL LETTER GAMMA
+\setcclcucx 0264 0264 0264 % LATIN SMALL LETTER RAMS HORN
+\setcclcucx 0265 0265 0265 % LATIN SMALL LETTER TURNED H
+\setcclcucx 0266 0266 0266 % LATIN SMALL LETTER H WITH HOOK
+\setcclcucx 0267 0267 0267 % LATIN SMALL LETTER HENG WITH HOOK
+\setcclcucx 0268 0268 0197 % LATIN SMALL LETTER I WITH STROKE
+\setcclcucx 0269 0269 0196 % LATIN SMALL LETTER IOTA
+\setcclcucx 026A 026A 026A % LATIN LETTER SMALL CAPITAL I
+\setcclcucx 026B 026B 2C62 % LATIN SMALL LETTER L WITH MIDDLE TILDE
+\setcclcucx 026C 026C 026C % LATIN SMALL LETTER L WITH BELT
+\setcclcucx 026D 026D 026D % LATIN SMALL LETTER L WITH RETROFLEX HOOK
+\setcclcucx 026E 026E 026E % LATIN SMALL LETTER LEZH
+\setcclcucx 026F 026F 019C % LATIN SMALL LETTER TURNED M
+\setcclcucx 0270 0270 0270 % LATIN SMALL LETTER TURNED M WITH LONG LEG
+\setcclcucx 0271 0271 0271 % LATIN SMALL LETTER M WITH HOOK
+\setcclcucx 0272 0272 019D % LATIN SMALL LETTER N WITH LEFT HOOK
+\setcclcucx 0273 0273 0273 % LATIN SMALL LETTER N WITH RETROFLEX HOOK
+\setcclcucx 0274 0274 0274 % LATIN LETTER SMALL CAPITAL N
+\setcclcucx 0275 0275 019F % LATIN SMALL LETTER BARRED O
+\setcclcucx 0276 0276 0276 % LATIN LETTER SMALL CAPITAL OE
+\setcclcucx 0277 0277 0277 % LATIN SMALL LETTER CLOSED OMEGA
+\setcclcucx 0278 0278 0278 % LATIN SMALL LETTER PHI
+\setcclcucx 0279 0279 0279 % LATIN SMALL LETTER TURNED R
+\setcclcucx 027A 027A 027A % LATIN SMALL LETTER TURNED R WITH LONG LEG
+\setcclcucx 027B 027B 027B % LATIN SMALL LETTER TURNED R WITH HOOK
+\setcclcucx 027C 027C 027C % LATIN SMALL LETTER R WITH LONG LEG
+\setcclcucx 027D 027D 2C64 % LATIN SMALL LETTER R WITH TAIL
+\setcclcucx 027E 027E 027E % LATIN SMALL LETTER R WITH FISHHOOK
+\setcclcucx 027F 027F 027F % LATIN SMALL LETTER REVERSED R WITH FISHHOOK
+\setcclcucx 0280 0280 01A6 % LATIN LETTER SMALL CAPITAL R
+\setcclcucx 0281 0281 0281 % LATIN LETTER SMALL CAPITAL INVERTED R
+\setcclcucx 0282 0282 0282 % LATIN SMALL LETTER S WITH HOOK
+\setcclcucx 0283 0283 01A9 % LATIN SMALL LETTER ESH
+\setcclcucx 0284 0284 0284 % LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK
+\setcclcucx 0285 0285 0285 % LATIN SMALL LETTER SQUAT REVERSED ESH
+\setcclcucx 0286 0286 0286 % LATIN SMALL LETTER ESH WITH CURL
+\setcclcucx 0287 0287 0287 % LATIN SMALL LETTER TURNED T
+\setcclcucx 0288 0288 01AE % LATIN SMALL LETTER T WITH RETROFLEX HOOK
+\setcclcucx 0289 0289 0244 % LATIN SMALL LETTER U BAR
+\setcclcucx 028A 028A 01B1 % LATIN SMALL LETTER UPSILON
+\setcclcucx 028B 028B 01B2 % LATIN SMALL LETTER V WITH HOOK
+\setcclcucx 028C 028C 0245 % LATIN SMALL LETTER TURNED V
+\setcclcucx 028D 028D 028D % LATIN SMALL LETTER TURNED W
+\setcclcucx 028E 028E 028E % LATIN SMALL LETTER TURNED Y
+\setcclcucx 028F 028F 028F % LATIN LETTER SMALL CAPITAL Y
+\setcclcucx 0290 0290 0290 % LATIN SMALL LETTER Z WITH RETROFLEX HOOK
+\setcclcucx 0291 0291 0291 % LATIN SMALL LETTER Z WITH CURL
+\setcclcucx 0292 0292 01B7 % LATIN SMALL LETTER EZH
+\setcclcucx 0293 0293 0293 % LATIN SMALL LETTER EZH WITH CURL
+\setcclcucx 0295 0295 0295 % LATIN LETTER PHARYNGEAL VOICED FRICATIVE
+\setcclcucx 0296 0296 0296 % LATIN LETTER INVERTED GLOTTAL STOP
+\setcclcucx 0297 0297 0297 % LATIN LETTER STRETCHED C
+\setcclcucx 0298 0298 0298 % LATIN LETTER BILABIAL CLICK
+\setcclcucx 0299 0299 0299 % LATIN LETTER SMALL CAPITAL B
+\setcclcucx 029A 029A 029A % LATIN SMALL LETTER CLOSED OPEN E
+\setcclcucx 029B 029B 029B % LATIN LETTER SMALL CAPITAL G WITH HOOK
+\setcclcucx 029C 029C 029C % LATIN LETTER SMALL CAPITAL H
+\setcclcucx 029D 029D 029D % LATIN SMALL LETTER J WITH CROSSED-TAIL
+\setcclcucx 029E 029E 029E % LATIN SMALL LETTER TURNED K
+\setcclcucx 029F 029F 029F % LATIN LETTER SMALL CAPITAL L
+\setcclcucx 02A0 02A0 02A0 % LATIN SMALL LETTER Q WITH HOOK
+\setcclcucx 02A1 02A1 02A1 % LATIN LETTER GLOTTAL STOP WITH STROKE
+\setcclcucx 02A2 02A2 02A2 % LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE
+\setcclcucx 02A3 02A3 02A3 % LATIN SMALL LETTER DZ DIGRAPH
+\setcclcucx 02A4 02A4 02A4 % LATIN SMALL LETTER DEZH DIGRAPH
+\setcclcucx 02A5 02A5 02A5 % LATIN SMALL LETTER DZ DIGRAPH WITH CURL
+\setcclcucx 02A6 02A6 02A6 % LATIN SMALL LETTER TS DIGRAPH
+\setcclcucx 02A7 02A7 02A7 % LATIN SMALL LETTER TESH DIGRAPH
+\setcclcucx 02A8 02A8 02A8 % LATIN SMALL LETTER TC DIGRAPH WITH CURL
+\setcclcucx 02A9 02A9 02A9 % LATIN SMALL LETTER FENG DIGRAPH
+\setcclcucx 02AA 02AA 02AA % LATIN SMALL LETTER LS DIGRAPH
+\setcclcucx 02AB 02AB 02AB % LATIN SMALL LETTER LZ DIGRAPH
+\setcclcucx 02AC 02AC 02AC % LATIN LETTER BILABIAL PERCUSSIVE
+\setcclcucx 02AD 02AD 02AD % LATIN LETTER BIDENTAL PERCUSSIVE
+\setcclcucx 02AE 02AE 02AE % LATIN SMALL LETTER TURNED H WITH FISHHOOK
+\setcclcucx 02AF 02AF 02AF % LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL
+\setcclcucx 037B 037B 03FD % GREEK SMALL REVERSED LUNATE SIGMA SYMBOL
+\setcclcucx 037C 037C 03FE % GREEK SMALL DOTTED LUNATE SIGMA SYMBOL
+\setcclcucx 037D 037D 03FF % GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL
+\setcclcucx 0386 03AC 0386 % GREEK CAPITAL LETTER ALPHA WITH TONOS
+\setcclcucx 0388 03AD 0388 % GREEK CAPITAL LETTER EPSILON WITH TONOS
+\setcclcucx 0389 03AE 0389 % GREEK CAPITAL LETTER ETA WITH TONOS
+\setcclcucx 038A 03AF 038A % GREEK CAPITAL LETTER IOTA WITH TONOS
+\setcclcucx 038C 03CC 038C % GREEK CAPITAL LETTER OMICRON WITH TONOS
+\setcclcucx 038E 03CD 038E % GREEK CAPITAL LETTER UPSILON WITH TONOS
+\setcclcucx 038F 03CE 038F % GREEK CAPITAL LETTER OMEGA WITH TONOS
+\setcclcucx 0390 0390 0390 % GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+\setcclcucx 0391 03B1 0391 % GREEK CAPITAL LETTER ALPHA
+\setcclcucx 0392 03B2 0392 % GREEK CAPITAL LETTER BETA
+\setcclcucx 0393 03B3 0393 % GREEK CAPITAL LETTER GAMMA
+\setcclcucx 0394 03B4 0394 % GREEK CAPITAL LETTER DELTA
+\setcclcucx 0395 03B5 0395 % GREEK CAPITAL LETTER EPSILON
+\setcclcucx 0396 03B6 0396 % GREEK CAPITAL LETTER ZETA
+\setcclcucx 0397 03B7 0397 % GREEK CAPITAL LETTER ETA
+\setcclcucx 0398 03B8 0398 % GREEK CAPITAL LETTER THETA
+\setcclcucx 0399 03B9 0399 % GREEK CAPITAL LETTER IOTA
+\setcclcucx 039A 03BA 039A % GREEK CAPITAL LETTER KAPPA
+\setcclcucx 039B 03BB 039B % GREEK CAPITAL LETTER LAMDA
+\setcclcucx 039C 03BC 039C % GREEK CAPITAL LETTER MU
+\setcclcucx 039D 03BD 039D % GREEK CAPITAL LETTER NU
+\setcclcucx 039E 03BE 039E % GREEK CAPITAL LETTER XI
+\setcclcucx 039F 03BF 039F % GREEK CAPITAL LETTER OMICRON
+\setcclcucx 03A0 03C0 03A0 % GREEK CAPITAL LETTER PI
+\setcclcucx 03A1 03C1 03A1 % GREEK CAPITAL LETTER RHO
+\setcclcucx 03A3 03C3 03A3 % GREEK CAPITAL LETTER SIGMA
+\setcclcucx 03A4 03C4 03A4 % GREEK CAPITAL LETTER TAU
+\setcclcucx 03A5 03C5 03A5 % GREEK CAPITAL LETTER UPSILON
+\setcclcucx 03A6 03C6 03A6 % GREEK CAPITAL LETTER PHI
+\setcclcucx 03A7 03C7 03A7 % GREEK CAPITAL LETTER CHI
+\setcclcucx 03A8 03C8 03A8 % GREEK CAPITAL LETTER PSI
+\setcclcucx 03A9 03C9 03A9 % GREEK CAPITAL LETTER OMEGA
+\setcclcucx 03AA 03CA 03AA % GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
+\setcclcucx 03AB 03CB 03AB % GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+\setcclcucx 03AC 03AC 0386 % GREEK SMALL LETTER ALPHA WITH TONOS
+\setcclcucx 03AD 03AD 0388 % GREEK SMALL LETTER EPSILON WITH TONOS
+\setcclcucx 03AE 03AE 0389 % GREEK SMALL LETTER ETA WITH TONOS
+\setcclcucx 03AF 03AF 038A % GREEK SMALL LETTER IOTA WITH TONOS
+\setcclcucx 03B0 03B0 03B0 % GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+\setcclcucx 03B1 03B1 0391 % GREEK SMALL LETTER ALPHA
+\setcclcucx 03B2 03B2 0392 % GREEK SMALL LETTER BETA
+\setcclcucx 03B3 03B3 0393 % GREEK SMALL LETTER GAMMA
+\setcclcucx 03B4 03B4 0394 % GREEK SMALL LETTER DELTA
+\setcclcucx 03B5 03B5 0395 % GREEK SMALL LETTER EPSILON
+\setcclcucx 03B6 03B6 0396 % GREEK SMALL LETTER ZETA
+\setcclcucx 03B7 03B7 0397 % GREEK SMALL LETTER ETA
+\setcclcucx 03B8 03B8 0398 % GREEK SMALL LETTER THETA
+\setcclcucx 03B9 03B9 0399 % GREEK SMALL LETTER IOTA
+\setcclcucx 03BA 03BA 039A % GREEK SMALL LETTER KAPPA
+\setcclcucx 03BB 03BB 039B % GREEK SMALL LETTER LAMDA
+\setcclcucx 03BC 03BC 039C % GREEK SMALL LETTER MU
+\setcclcucx 03BD 03BD 039D % GREEK SMALL LETTER NU
+\setcclcucx 03BE 03BE 039E % GREEK SMALL LETTER XI
+\setcclcucx 03BF 03BF 039F % GREEK SMALL LETTER OMICRON
+\setcclcucx 03C0 03C0 03A0 % GREEK SMALL LETTER PI
+\setcclcucx 03C1 03C1 03A1 % GREEK SMALL LETTER RHO
+\setcclcucx 03C2 03C2 03A3 % GREEK SMALL LETTER FINAL SIGMA
+\setcclcucx 03C3 03C3 03A3 % GREEK SMALL LETTER SIGMA
+\setcclcucx 03C4 03C4 03A4 % GREEK SMALL LETTER TAU
+\setcclcucx 03C5 03C5 03A5 % GREEK SMALL LETTER UPSILON
+\setcclcucx 03C6 03C6 03A6 % GREEK SMALL LETTER PHI
+\setcclcucx 03C7 03C7 03A7 % GREEK SMALL LETTER CHI
+\setcclcucx 03C8 03C8 03A8 % GREEK SMALL LETTER PSI
+\setcclcucx 03C9 03C9 03A9 % GREEK SMALL LETTER OMEGA
+\setcclcucx 03CA 03CA 03AA % GREEK SMALL LETTER IOTA WITH DIALYTIKA
+\setcclcucx 03CB 03CB 03AB % GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+\setcclcucx 03CC 03CC 038C % GREEK SMALL LETTER OMICRON WITH TONOS
+\setcclcucx 03CD 03CD 038E % GREEK SMALL LETTER UPSILON WITH TONOS
+\setcclcucx 03CE 03CE 038F % GREEK SMALL LETTER OMEGA WITH TONOS
+\setcclcucx 03D0 03D0 0392 % GREEK BETA SYMBOL
+\setcclcucx 03D1 03D1 0398 % GREEK THETA SYMBOL
+\setcclcucx 03D2 03D2 03D2 % GREEK UPSILON WITH HOOK SYMBOL
+\setcclcucx 03D3 03D3 03D3 % GREEK UPSILON WITH ACUTE AND HOOK SYMBOL
+\setcclcucx 03D4 03D4 03D4 % GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL
+\setcclcucx 03D5 03D5 03A6 % GREEK PHI SYMBOL
+\setcclcucx 03D6 03D6 03A0 % GREEK PI SYMBOL
+\setcclcucx 03D7 03D7 03D7 % GREEK KAI SYMBOL
+\setcclcucx 03D8 03D9 03D8 % GREEK LETTER ARCHAIC KOPPA
+\setcclcucx 03D9 03D9 03D8 % GREEK SMALL LETTER ARCHAIC KOPPA
+\setcclcucx 03DA 03DB 03DA % GREEK LETTER STIGMA
+\setcclcucx 03DB 03DB 03DA % GREEK SMALL LETTER STIGMA
+\setcclcucx 03DC 03DD 03DC % GREEK LETTER DIGAMMA
+\setcclcucx 03DD 03DD 03DC % GREEK SMALL LETTER DIGAMMA
+\setcclcucx 03DE 03DF 03DE % GREEK LETTER KOPPA
+\setcclcucx 03DF 03DF 03DE % GREEK SMALL LETTER KOPPA
+\setcclcucx 03E0 03E1 03E0 % GREEK LETTER SAMPI
+\setcclcucx 03E1 03E1 03E0 % GREEK SMALL LETTER SAMPI
+\setcclcucx 03E2 03E3 03E2 % COPTIC CAPITAL LETTER SHEI
+\setcclcucx 03E3 03E3 03E2 % COPTIC SMALL LETTER SHEI
+\setcclcucx 03E4 03E5 03E4 % COPTIC CAPITAL LETTER FEI
+\setcclcucx 03E5 03E5 03E4 % COPTIC SMALL LETTER FEI
+\setcclcucx 03E6 03E7 03E6 % COPTIC CAPITAL LETTER KHEI
+\setcclcucx 03E7 03E7 03E6 % COPTIC SMALL LETTER KHEI
+\setcclcucx 03E8 03E9 03E8 % COPTIC CAPITAL LETTER HORI
+\setcclcucx 03E9 03E9 03E8 % COPTIC SMALL LETTER HORI
+\setcclcucx 03EA 03EB 03EA % COPTIC CAPITAL LETTER GANGIA
+\setcclcucx 03EB 03EB 03EA % COPTIC SMALL LETTER GANGIA
+\setcclcucx 03EC 03ED 03EC % COPTIC CAPITAL LETTER SHIMA
+\setcclcucx 03ED 03ED 03EC % COPTIC SMALL LETTER SHIMA
+\setcclcucx 03EE 03EF 03EE % COPTIC CAPITAL LETTER DEI
+\setcclcucx 03EF 03EF 03EE % COPTIC SMALL LETTER DEI
+\setcclcucx 03F0 03F0 039A % GREEK KAPPA SYMBOL
+\setcclcucx 03F1 03F1 03A1 % GREEK RHO SYMBOL
+\setcclcucx 03F2 03F2 03F9 % GREEK LUNATE SIGMA SYMBOL
+\setcclcucx 03F3 03F3 03F3 % GREEK LETTER YOT
+\setcclcucx 03F4 03B8 03F4 % GREEK CAPITAL THETA SYMBOL
+\setcclcucx 03F5 03F5 0395 % GREEK LUNATE EPSILON SYMBOL
+\setcclcucx 03F7 03F8 03F7 % GREEK CAPITAL LETTER SHO
+\setcclcucx 03F8 03F8 03F7 % GREEK SMALL LETTER SHO
+\setcclcucx 03F9 03F2 03F9 % GREEK CAPITAL LUNATE SIGMA SYMBOL
+\setcclcucx 03FA 03FB 03FA % GREEK CAPITAL LETTER SAN
+\setcclcucx 03FB 03FB 03FA % GREEK SMALL LETTER SAN
+\setcclcucx 03FC 03FC 03FC % GREEK RHO WITH STROKE SYMBOL
+\setcclcucx 03FD 037B 03FD % GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL
+\setcclcucx 03FE 037C 03FE % GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL
+\setcclcucx 03FF 037D 03FF % GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL
+\setcclcucx 0400 0450 0400 % CYRILLIC CAPITAL LETTER IE WITH GRAVE
+\setcclcucx 0401 0451 0401 % CYRILLIC CAPITAL LETTER IO
+\setcclcucx 0402 0452 0402 % CYRILLIC CAPITAL LETTER DJE
+\setcclcucx 0403 0453 0403 % CYRILLIC CAPITAL LETTER GJE
+\setcclcucx 0404 0454 0404 % CYRILLIC CAPITAL LETTER UKRAINIAN IE
+\setcclcucx 0405 0455 0405 % CYRILLIC CAPITAL LETTER DZE
+\setcclcucx 0406 0456 0406 % CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+\setcclcucx 0407 0457 0407 % CYRILLIC CAPITAL LETTER YI
+\setcclcucx 0408 0458 0408 % CYRILLIC CAPITAL LETTER JE
+\setcclcucx 0409 0459 0409 % CYRILLIC CAPITAL LETTER LJE
+\setcclcucx 040A 045A 040A % CYRILLIC CAPITAL LETTER NJE
+\setcclcucx 040B 045B 040B % CYRILLIC CAPITAL LETTER TSHE
+\setcclcucx 040C 045C 040C % CYRILLIC CAPITAL LETTER KJE
+\setcclcucx 040D 045D 040D % CYRILLIC CAPITAL LETTER I WITH GRAVE
+\setcclcucx 040E 045E 040E % CYRILLIC CAPITAL LETTER SHORT U
+\setcclcucx 040F 045F 040F % CYRILLIC CAPITAL LETTER DZHE
+\setcclcucx 0410 0430 0410 % CYRILLIC CAPITAL LETTER A
+\setcclcucx 0411 0431 0411 % CYRILLIC CAPITAL LETTER BE
+\setcclcucx 0412 0432 0412 % CYRILLIC CAPITAL LETTER VE
+\setcclcucx 0413 0433 0413 % CYRILLIC CAPITAL LETTER GHE
+\setcclcucx 0414 0434 0414 % CYRILLIC CAPITAL LETTER DE
+\setcclcucx 0415 0435 0415 % CYRILLIC CAPITAL LETTER IE
+\setcclcucx 0416 0436 0416 % CYRILLIC CAPITAL LETTER ZHE
+\setcclcucx 0417 0437 0417 % CYRILLIC CAPITAL LETTER ZE
+\setcclcucx 0418 0438 0418 % CYRILLIC CAPITAL LETTER I
+\setcclcucx 0419 0439 0419 % CYRILLIC CAPITAL LETTER SHORT I
+\setcclcucx 041A 043A 041A % CYRILLIC CAPITAL LETTER KA
+\setcclcucx 041B 043B 041B % CYRILLIC CAPITAL LETTER EL
+\setcclcucx 041C 043C 041C % CYRILLIC CAPITAL LETTER EM
+\setcclcucx 041D 043D 041D % CYRILLIC CAPITAL LETTER EN
+\setcclcucx 041E 043E 041E % CYRILLIC CAPITAL LETTER O
+\setcclcucx 041F 043F 041F % CYRILLIC CAPITAL LETTER PE
+\setcclcucx 0420 0440 0420 % CYRILLIC CAPITAL LETTER ER
+\setcclcucx 0421 0441 0421 % CYRILLIC CAPITAL LETTER ES
+\setcclcucx 0422 0442 0422 % CYRILLIC CAPITAL LETTER TE
+\setcclcucx 0423 0443 0423 % CYRILLIC CAPITAL LETTER U
+\setcclcucx 0424 0444 0424 % CYRILLIC CAPITAL LETTER EF
+\setcclcucx 0425 0445 0425 % CYRILLIC CAPITAL LETTER HA
+\setcclcucx 0426 0446 0426 % CYRILLIC CAPITAL LETTER TSE
+\setcclcucx 0427 0447 0427 % CYRILLIC CAPITAL LETTER CHE
+\setcclcucx 0428 0448 0428 % CYRILLIC CAPITAL LETTER SHA
+\setcclcucx 0429 0449 0429 % CYRILLIC CAPITAL LETTER SHCHA
+\setcclcucx 042A 044A 042A % CYRILLIC CAPITAL LETTER HARD SIGN
+\setcclcucx 042B 044B 042B % CYRILLIC CAPITAL LETTER YERU
+\setcclcucx 042C 044C 042C % CYRILLIC CAPITAL LETTER SOFT SIGN
+\setcclcucx 042D 044D 042D % CYRILLIC CAPITAL LETTER E
+\setcclcucx 042E 044E 042E % CYRILLIC CAPITAL LETTER YU
+\setcclcucx 042F 044F 042F % CYRILLIC CAPITAL LETTER YA
+\setcclcucx 0430 0430 0410 % CYRILLIC SMALL LETTER A
+\setcclcucx 0431 0431 0411 % CYRILLIC SMALL LETTER BE
+\setcclcucx 0432 0432 0412 % CYRILLIC SMALL LETTER VE
+\setcclcucx 0433 0433 0413 % CYRILLIC SMALL LETTER GHE
+\setcclcucx 0434 0434 0414 % CYRILLIC SMALL LETTER DE
+\setcclcucx 0435 0435 0415 % CYRILLIC SMALL LETTER IE
+\setcclcucx 0436 0436 0416 % CYRILLIC SMALL LETTER ZHE
+\setcclcucx 0437 0437 0417 % CYRILLIC SMALL LETTER ZE
+\setcclcucx 0438 0438 0418 % CYRILLIC SMALL LETTER I
+\setcclcucx 0439 0439 0419 % CYRILLIC SMALL LETTER SHORT I
+\setcclcucx 043A 043A 041A % CYRILLIC SMALL LETTER KA
+\setcclcucx 043B 043B 041B % CYRILLIC SMALL LETTER EL
+\setcclcucx 043C 043C 041C % CYRILLIC SMALL LETTER EM
+\setcclcucx 043D 043D 041D % CYRILLIC SMALL LETTER EN
+\setcclcucx 043E 043E 041E % CYRILLIC SMALL LETTER O
+\setcclcucx 043F 043F 041F % CYRILLIC SMALL LETTER PE
+\setcclcucx 0440 0440 0420 % CYRILLIC SMALL LETTER ER
+\setcclcucx 0441 0441 0421 % CYRILLIC SMALL LETTER ES
+\setcclcucx 0442 0442 0422 % CYRILLIC SMALL LETTER TE
+\setcclcucx 0443 0443 0423 % CYRILLIC SMALL LETTER U
+\setcclcucx 0444 0444 0424 % CYRILLIC SMALL LETTER EF
+\setcclcucx 0445 0445 0425 % CYRILLIC SMALL LETTER HA
+\setcclcucx 0446 0446 0426 % CYRILLIC SMALL LETTER TSE
+\setcclcucx 0447 0447 0427 % CYRILLIC SMALL LETTER CHE
+\setcclcucx 0448 0448 0428 % CYRILLIC SMALL LETTER SHA
+\setcclcucx 0449 0449 0429 % CYRILLIC SMALL LETTER SHCHA
+\setcclcucx 044A 044A 042A % CYRILLIC SMALL LETTER HARD SIGN
+\setcclcucx 044B 044B 042B % CYRILLIC SMALL LETTER YERU
+\setcclcucx 044C 044C 042C % CYRILLIC SMALL LETTER SOFT SIGN
+\setcclcucx 044D 044D 042D % CYRILLIC SMALL LETTER E
+\setcclcucx 044E 044E 042E % CYRILLIC SMALL LETTER YU
+\setcclcucx 044F 044F 042F % CYRILLIC SMALL LETTER YA
+\setcclcucx 0450 0450 0400 % CYRILLIC SMALL LETTER IE WITH GRAVE
+\setcclcucx 0451 0451 0401 % CYRILLIC SMALL LETTER IO
+\setcclcucx 0452 0452 0402 % CYRILLIC SMALL LETTER DJE
+\setcclcucx 0453 0453 0403 % CYRILLIC SMALL LETTER GJE
+\setcclcucx 0454 0454 0404 % CYRILLIC SMALL LETTER UKRAINIAN IE
+\setcclcucx 0455 0455 0405 % CYRILLIC SMALL LETTER DZE
+\setcclcucx 0456 0456 0406 % CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+\setcclcucx 0457 0457 0407 % CYRILLIC SMALL LETTER YI
+\setcclcucx 0458 0458 0408 % CYRILLIC SMALL LETTER JE
+\setcclcucx 0459 0459 0409 % CYRILLIC SMALL LETTER LJE
+\setcclcucx 045A 045A 040A % CYRILLIC SMALL LETTER NJE
+\setcclcucx 045B 045B 040B % CYRILLIC SMALL LETTER TSHE
+\setcclcucx 045C 045C 040C % CYRILLIC SMALL LETTER KJE
+\setcclcucx 045D 045D 040D % CYRILLIC SMALL LETTER I WITH GRAVE
+\setcclcucx 045E 045E 040E % CYRILLIC SMALL LETTER SHORT U
+\setcclcucx 045F 045F 040F % CYRILLIC SMALL LETTER DZHE
+\setcclcucx 0460 0461 0460 % CYRILLIC CAPITAL LETTER OMEGA
+\setcclcucx 0461 0461 0460 % CYRILLIC SMALL LETTER OMEGA
+\setcclcucx 0462 0463 0462 % CYRILLIC CAPITAL LETTER YAT
+\setcclcucx 0463 0463 0462 % CYRILLIC SMALL LETTER YAT
+\setcclcucx 0464 0465 0464 % CYRILLIC CAPITAL LETTER IOTIFIED E
+\setcclcucx 0465 0465 0464 % CYRILLIC SMALL LETTER IOTIFIED E
+\setcclcucx 0466 0467 0466 % CYRILLIC CAPITAL LETTER LITTLE YUS
+\setcclcucx 0467 0467 0466 % CYRILLIC SMALL LETTER LITTLE YUS
+\setcclcucx 0468 0469 0468 % CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS
+\setcclcucx 0469 0469 0468 % CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS
+\setcclcucx 046A 046B 046A % CYRILLIC CAPITAL LETTER BIG YUS
+\setcclcucx 046B 046B 046A % CYRILLIC SMALL LETTER BIG YUS
+\setcclcucx 046C 046D 046C % CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS
+\setcclcucx 046D 046D 046C % CYRILLIC SMALL LETTER IOTIFIED BIG YUS
+\setcclcucx 046E 046F 046E % CYRILLIC CAPITAL LETTER KSI
+\setcclcucx 046F 046F 046E % CYRILLIC SMALL LETTER KSI
+\setcclcucx 0470 0471 0470 % CYRILLIC CAPITAL LETTER PSI
+\setcclcucx 0471 0471 0470 % CYRILLIC SMALL LETTER PSI
+\setcclcucx 0472 0473 0472 % CYRILLIC CAPITAL LETTER FITA
+\setcclcucx 0473 0473 0472 % CYRILLIC SMALL LETTER FITA
+\setcclcucx 0474 0475 0474 % CYRILLIC CAPITAL LETTER IZHITSA
+\setcclcucx 0475 0475 0474 % CYRILLIC SMALL LETTER IZHITSA
+\setcclcucx 0476 0477 0476 % CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+\setcclcucx 0477 0477 0476 % CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
+\setcclcucx 0478 0479 0478 % CYRILLIC CAPITAL LETTER UK
+\setcclcucx 0479 0479 0478 % CYRILLIC SMALL LETTER UK
+\setcclcucx 047A 047B 047A % CYRILLIC CAPITAL LETTER ROUND OMEGA
+\setcclcucx 047B 047B 047A % CYRILLIC SMALL LETTER ROUND OMEGA
+\setcclcucx 047C 047D 047C % CYRILLIC CAPITAL LETTER OMEGA WITH TITLO
+\setcclcucx 047D 047D 047C % CYRILLIC SMALL LETTER OMEGA WITH TITLO
+\setcclcucx 047E 047F 047E % CYRILLIC CAPITAL LETTER OT
+\setcclcucx 047F 047F 047E % CYRILLIC SMALL LETTER OT
+\setcclcucx 0480 0481 0480 % CYRILLIC CAPITAL LETTER KOPPA
+\setcclcucx 0481 0481 0480 % CYRILLIC SMALL LETTER KOPPA
+\setcclcucx 048A 048B 048A % CYRILLIC CAPITAL LETTER SHORT I WITH TAIL
+\setcclcucx 048B 048B 048A % CYRILLIC SMALL LETTER SHORT I WITH TAIL
+\setcclcucx 048C 048D 048C % CYRILLIC CAPITAL LETTER SEMISOFT SIGN
+\setcclcucx 048D 048D 048C % CYRILLIC SMALL LETTER SEMISOFT SIGN
+\setcclcucx 048E 048F 048E % CYRILLIC CAPITAL LETTER ER WITH TICK
+\setcclcucx 048F 048F 048E % CYRILLIC SMALL LETTER ER WITH TICK
+\setcclcucx 0490 0491 0490 % CYRILLIC CAPITAL LETTER GHE WITH UPTURN
+\setcclcucx 0491 0491 0490 % CYRILLIC SMALL LETTER GHE WITH UPTURN
+\setcclcucx 0492 0493 0492 % CYRILLIC CAPITAL LETTER GHE WITH STROKE
+\setcclcucx 0493 0493 0492 % CYRILLIC SMALL LETTER GHE WITH STROKE
+\setcclcucx 0494 0495 0494 % CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK
+\setcclcucx 0495 0495 0494 % CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK
+\setcclcucx 0496 0497 0496 % CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER
+\setcclcucx 0497 0497 0496 % CYRILLIC SMALL LETTER ZHE WITH DESCENDER
+\setcclcucx 0498 0499 0498 % CYRILLIC CAPITAL LETTER ZE WITH DESCENDER
+\setcclcucx 0499 0499 0498 % CYRILLIC SMALL LETTER ZE WITH DESCENDER
+\setcclcucx 049A 049B 049A % CYRILLIC CAPITAL LETTER KA WITH DESCENDER
+\setcclcucx 049B 049B 049A % CYRILLIC SMALL LETTER KA WITH DESCENDER
+\setcclcucx 049C 049D 049C % CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE
+\setcclcucx 049D 049D 049C % CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE
+\setcclcucx 049E 049F 049E % CYRILLIC CAPITAL LETTER KA WITH STROKE
+\setcclcucx 049F 049F 049E % CYRILLIC SMALL LETTER KA WITH STROKE
+\setcclcucx 04A0 04A1 04A0 % CYRILLIC CAPITAL LETTER BASHKIR KA
+\setcclcucx 04A1 04A1 04A0 % CYRILLIC SMALL LETTER BASHKIR KA
+\setcclcucx 04A2 04A3 04A2 % CYRILLIC CAPITAL LETTER EN WITH DESCENDER
+\setcclcucx 04A3 04A3 04A2 % CYRILLIC SMALL LETTER EN WITH DESCENDER
+\setcclcucx 04A4 04A5 04A4 % CYRILLIC CAPITAL LIGATURE EN GHE
+\setcclcucx 04A5 04A5 04A4 % CYRILLIC SMALL LIGATURE EN GHE
+\setcclcucx 04A6 04A7 04A6 % CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK
+\setcclcucx 04A7 04A7 04A6 % CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK
+\setcclcucx 04A8 04A9 04A8 % CYRILLIC CAPITAL LETTER ABKHASIAN HA
+\setcclcucx 04A9 04A9 04A8 % CYRILLIC SMALL LETTER ABKHASIAN HA
+\setcclcucx 04AA 04AB 04AA % CYRILLIC CAPITAL LETTER ES WITH DESCENDER
+\setcclcucx 04AB 04AB 04AA % CYRILLIC SMALL LETTER ES WITH DESCENDER
+\setcclcucx 04AC 04AD 04AC % CYRILLIC CAPITAL LETTER TE WITH DESCENDER
+\setcclcucx 04AD 04AD 04AC % CYRILLIC SMALL LETTER TE WITH DESCENDER
+\setcclcucx 04AE 04AF 04AE % CYRILLIC CAPITAL LETTER STRAIGHT U
+\setcclcucx 04AF 04AF 04AE % CYRILLIC SMALL LETTER STRAIGHT U
+\setcclcucx 04B0 04B1 04B0 % CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE
+\setcclcucx 04B1 04B1 04B0 % CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE
+\setcclcucx 04B2 04B3 04B2 % CYRILLIC CAPITAL LETTER HA WITH DESCENDER
+\setcclcucx 04B3 04B3 04B2 % CYRILLIC SMALL LETTER HA WITH DESCENDER
+\setcclcucx 04B4 04B5 04B4 % CYRILLIC CAPITAL LIGATURE TE TSE
+\setcclcucx 04B5 04B5 04B4 % CYRILLIC SMALL LIGATURE TE TSE
+\setcclcucx 04B6 04B7 04B6 % CYRILLIC CAPITAL LETTER CHE WITH DESCENDER
+\setcclcucx 04B7 04B7 04B6 % CYRILLIC SMALL LETTER CHE WITH DESCENDER
+\setcclcucx 04B8 04B9 04B8 % CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE
+\setcclcucx 04B9 04B9 04B8 % CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE
+\setcclcucx 04BA 04BB 04BA % CYRILLIC CAPITAL LETTER SHHA
+\setcclcucx 04BB 04BB 04BA % CYRILLIC SMALL LETTER SHHA
+\setcclcucx 04BC 04BD 04BC % CYRILLIC CAPITAL LETTER ABKHASIAN CHE
+\setcclcucx 04BD 04BD 04BC % CYRILLIC SMALL LETTER ABKHASIAN CHE
+\setcclcucx 04BE 04BF 04BE % CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER
+\setcclcucx 04BF 04BF 04BE % CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER
+\setcclcucx 04C0 04CF 04C0 % CYRILLIC LETTER PALOCHKA
+\setcclcucx 04C1 04C2 04C1 % CYRILLIC CAPITAL LETTER ZHE WITH BREVE
+\setcclcucx 04C2 04C2 04C1 % CYRILLIC SMALL LETTER ZHE WITH BREVE
+\setcclcucx 04C3 04C4 04C3 % CYRILLIC CAPITAL LETTER KA WITH HOOK
+\setcclcucx 04C4 04C4 04C3 % CYRILLIC SMALL LETTER KA WITH HOOK
+\setcclcucx 04C5 04C6 04C5 % CYRILLIC CAPITAL LETTER EL WITH TAIL
+\setcclcucx 04C6 04C6 04C5 % CYRILLIC SMALL LETTER EL WITH TAIL
+\setcclcucx 04C7 04C8 04C7 % CYRILLIC CAPITAL LETTER EN WITH HOOK
+\setcclcucx 04C8 04C8 04C7 % CYRILLIC SMALL LETTER EN WITH HOOK
+\setcclcucx 04C9 04CA 04C9 % CYRILLIC CAPITAL LETTER EN WITH TAIL
+\setcclcucx 04CA 04CA 04C9 % CYRILLIC SMALL LETTER EN WITH TAIL
+\setcclcucx 04CB 04CC 04CB % CYRILLIC CAPITAL LETTER KHAKASSIAN CHE
+\setcclcucx 04CC 04CC 04CB % CYRILLIC SMALL LETTER KHAKASSIAN CHE
+\setcclcucx 04CD 04CE 04CD % CYRILLIC CAPITAL LETTER EM WITH TAIL
+\setcclcucx 04CE 04CE 04CD % CYRILLIC SMALL LETTER EM WITH TAIL
+\setcclcucx 04CF 04CF 04C0 % CYRILLIC SMALL LETTER PALOCHKA
+\setcclcucx 04D0 04D1 04D0 % CYRILLIC CAPITAL LETTER A WITH BREVE
+\setcclcucx 04D1 04D1 04D0 % CYRILLIC SMALL LETTER A WITH BREVE
+\setcclcucx 04D2 04D3 04D2 % CYRILLIC CAPITAL LETTER A WITH DIAERESIS
+\setcclcucx 04D3 04D3 04D2 % CYRILLIC SMALL LETTER A WITH DIAERESIS
+\setcclcucx 04D4 04D5 04D4 % CYRILLIC CAPITAL LIGATURE A IE
+\setcclcucx 04D5 04D5 04D4 % CYRILLIC SMALL LIGATURE A IE
+\setcclcucx 04D6 04D7 04D6 % CYRILLIC CAPITAL LETTER IE WITH BREVE
+\setcclcucx 04D7 04D7 04D6 % CYRILLIC SMALL LETTER IE WITH BREVE
+\setcclcucx 04D8 04D9 04D8 % CYRILLIC CAPITAL LETTER SCHWA
+\setcclcucx 04D9 04D9 04D8 % CYRILLIC SMALL LETTER SCHWA
+\setcclcucx 04DA 04DB 04DA % CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS
+\setcclcucx 04DB 04DB 04DA % CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS
+\setcclcucx 04DC 04DD 04DC % CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS
+\setcclcucx 04DD 04DD 04DC % CYRILLIC SMALL LETTER ZHE WITH DIAERESIS
+\setcclcucx 04DE 04DF 04DE % CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS
+\setcclcucx 04DF 04DF 04DE % CYRILLIC SMALL LETTER ZE WITH DIAERESIS
+\setcclcucx 04E0 04E1 04E0 % CYRILLIC CAPITAL LETTER ABKHASIAN DZE
+\setcclcucx 04E1 04E1 04E0 % CYRILLIC SMALL LETTER ABKHASIAN DZE
+\setcclcucx 04E2 04E3 04E2 % CYRILLIC CAPITAL LETTER I WITH MACRON
+\setcclcucx 04E3 04E3 04E2 % CYRILLIC SMALL LETTER I WITH MACRON
+\setcclcucx 04E4 04E5 04E4 % CYRILLIC CAPITAL LETTER I WITH DIAERESIS
+\setcclcucx 04E5 04E5 04E4 % CYRILLIC SMALL LETTER I WITH DIAERESIS
+\setcclcucx 04E6 04E7 04E6 % CYRILLIC CAPITAL LETTER O WITH DIAERESIS
+\setcclcucx 04E7 04E7 04E6 % CYRILLIC SMALL LETTER O WITH DIAERESIS
+\setcclcucx 04E8 04E9 04E8 % CYRILLIC CAPITAL LETTER BARRED O
+\setcclcucx 04E9 04E9 04E8 % CYRILLIC SMALL LETTER BARRED O
+\setcclcucx 04EA 04EB 04EA % CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS
+\setcclcucx 04EB 04EB 04EA % CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS
+\setcclcucx 04EC 04ED 04EC % CYRILLIC CAPITAL LETTER E WITH DIAERESIS
+\setcclcucx 04ED 04ED 04EC % CYRILLIC SMALL LETTER E WITH DIAERESIS
+\setcclcucx 04EE 04EF 04EE % CYRILLIC CAPITAL LETTER U WITH MACRON
+\setcclcucx 04EF 04EF 04EE % CYRILLIC SMALL LETTER U WITH MACRON
+\setcclcucx 04F0 04F1 04F0 % CYRILLIC CAPITAL LETTER U WITH DIAERESIS
+\setcclcucx 04F1 04F1 04F0 % CYRILLIC SMALL LETTER U WITH DIAERESIS
+\setcclcucx 04F2 04F3 04F2 % CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE
+\setcclcucx 04F3 04F3 04F2 % CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE
+\setcclcucx 04F4 04F5 04F4 % CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS
+\setcclcucx 04F5 04F5 04F4 % CYRILLIC SMALL LETTER CHE WITH DIAERESIS
+\setcclcucx 04F6 04F7 04F6 % CYRILLIC CAPITAL LETTER GHE WITH DESCENDER
+\setcclcucx 04F7 04F7 04F6 % CYRILLIC SMALL LETTER GHE WITH DESCENDER
+\setcclcucx 04F8 04F9 04F8 % CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS
+\setcclcucx 04F9 04F9 04F8 % CYRILLIC SMALL LETTER YERU WITH DIAERESIS
+\setcclcucx 04FA 04FB 04FA % CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK
+\setcclcucx 04FB 04FB 04FA % CYRILLIC SMALL LETTER GHE WITH STROKE AND HOOK
+\setcclcucx 04FC 04FD 04FC % CYRILLIC CAPITAL LETTER HA WITH HOOK
+\setcclcucx 04FD 04FD 04FC % CYRILLIC SMALL LETTER HA WITH HOOK
+\setcclcucx 04FE 04FF 04FE % CYRILLIC CAPITAL LETTER HA WITH STROKE
+\setcclcucx 04FF 04FF 04FE % CYRILLIC SMALL LETTER HA WITH STROKE
+\setcclcucx 0500 0501 0500 % CYRILLIC CAPITAL LETTER KOMI DE
+\setcclcucx 0501 0501 0500 % CYRILLIC SMALL LETTER KOMI DE
+\setcclcucx 0502 0503 0502 % CYRILLIC CAPITAL LETTER KOMI DJE
+\setcclcucx 0503 0503 0502 % CYRILLIC SMALL LETTER KOMI DJE
+\setcclcucx 0504 0505 0504 % CYRILLIC CAPITAL LETTER KOMI ZJE
+\setcclcucx 0505 0505 0504 % CYRILLIC SMALL LETTER KOMI ZJE
+\setcclcucx 0506 0507 0506 % CYRILLIC CAPITAL LETTER KOMI DZJE
+\setcclcucx 0507 0507 0506 % CYRILLIC SMALL LETTER KOMI DZJE
+\setcclcucx 0508 0509 0508 % CYRILLIC CAPITAL LETTER KOMI LJE
+\setcclcucx 0509 0509 0508 % CYRILLIC SMALL LETTER KOMI LJE
+\setcclcucx 050A 050B 050A % CYRILLIC CAPITAL LETTER KOMI NJE
+\setcclcucx 050B 050B 050A % CYRILLIC SMALL LETTER KOMI NJE
+\setcclcucx 050C 050D 050C % CYRILLIC CAPITAL LETTER KOMI SJE
+\setcclcucx 050D 050D 050C % CYRILLIC SMALL LETTER KOMI SJE
+\setcclcucx 050E 050F 050E % CYRILLIC CAPITAL LETTER KOMI TJE
+\setcclcucx 050F 050F 050E % CYRILLIC SMALL LETTER KOMI TJE
+\setcclcucx 0510 0511 0510 % CYRILLIC CAPITAL LETTER REVERSED ZE
+\setcclcucx 0511 0511 0510 % CYRILLIC SMALL LETTER REVERSED ZE
+\setcclcucx 0512 0513 0512 % CYRILLIC CAPITAL LETTER EL WITH HOOK
+\setcclcucx 0513 0513 0512 % CYRILLIC SMALL LETTER EL WITH HOOK
+\setcclcucx 0531 0561 0531 % ARMENIAN CAPITAL LETTER AYB
+\setcclcucx 0532 0562 0532 % ARMENIAN CAPITAL LETTER BEN
+\setcclcucx 0533 0563 0533 % ARMENIAN CAPITAL LETTER GIM
+\setcclcucx 0534 0564 0534 % ARMENIAN CAPITAL LETTER DA
+\setcclcucx 0535 0565 0535 % ARMENIAN CAPITAL LETTER ECH
+\setcclcucx 0536 0566 0536 % ARMENIAN CAPITAL LETTER ZA
+\setcclcucx 0537 0567 0537 % ARMENIAN CAPITAL LETTER EH
+\setcclcucx 0538 0568 0538 % ARMENIAN CAPITAL LETTER ET
+\setcclcucx 0539 0569 0539 % ARMENIAN CAPITAL LETTER TO
+\setcclcucx 053A 056A 053A % ARMENIAN CAPITAL LETTER ZHE
+\setcclcucx 053B 056B 053B % ARMENIAN CAPITAL LETTER INI
+\setcclcucx 053C 056C 053C % ARMENIAN CAPITAL LETTER LIWN
+\setcclcucx 053D 056D 053D % ARMENIAN CAPITAL LETTER XEH
+\setcclcucx 053E 056E 053E % ARMENIAN CAPITAL LETTER CA
+\setcclcucx 053F 056F 053F % ARMENIAN CAPITAL LETTER KEN
+\setcclcucx 0540 0570 0540 % ARMENIAN CAPITAL LETTER HO
+\setcclcucx 0541 0571 0541 % ARMENIAN CAPITAL LETTER JA
+\setcclcucx 0542 0572 0542 % ARMENIAN CAPITAL LETTER GHAD
+\setcclcucx 0543 0573 0543 % ARMENIAN CAPITAL LETTER CHEH
+\setcclcucx 0544 0574 0544 % ARMENIAN CAPITAL LETTER MEN
+\setcclcucx 0545 0575 0545 % ARMENIAN CAPITAL LETTER YI
+\setcclcucx 0546 0576 0546 % ARMENIAN CAPITAL LETTER NOW
+\setcclcucx 0547 0577 0547 % ARMENIAN CAPITAL LETTER SHA
+\setcclcucx 0548 0578 0548 % ARMENIAN CAPITAL LETTER VO
+\setcclcucx 0549 0579 0549 % ARMENIAN CAPITAL LETTER CHA
+\setcclcucx 054A 057A 054A % ARMENIAN CAPITAL LETTER PEH
+\setcclcucx 054B 057B 054B % ARMENIAN CAPITAL LETTER JHEH
+\setcclcucx 054C 057C 054C % ARMENIAN CAPITAL LETTER RA
+\setcclcucx 054D 057D 054D % ARMENIAN CAPITAL LETTER SEH
+\setcclcucx 054E 057E 054E % ARMENIAN CAPITAL LETTER VEW
+\setcclcucx 054F 057F 054F % ARMENIAN CAPITAL LETTER TIWN
+\setcclcucx 0550 0580 0550 % ARMENIAN CAPITAL LETTER REH
+\setcclcucx 0551 0581 0551 % ARMENIAN CAPITAL LETTER CO
+\setcclcucx 0552 0582 0552 % ARMENIAN CAPITAL LETTER YIWN
+\setcclcucx 0553 0583 0553 % ARMENIAN CAPITAL LETTER PIWR
+\setcclcucx 0554 0584 0554 % ARMENIAN CAPITAL LETTER KEH
+\setcclcucx 0555 0585 0555 % ARMENIAN CAPITAL LETTER OH
+\setcclcucx 0556 0586 0556 % ARMENIAN CAPITAL LETTER FEH
+\setcclcucx 0561 0561 0531 % ARMENIAN SMALL LETTER AYB
+\setcclcucx 0562 0562 0532 % ARMENIAN SMALL LETTER BEN
+\setcclcucx 0563 0563 0533 % ARMENIAN SMALL LETTER GIM
+\setcclcucx 0564 0564 0534 % ARMENIAN SMALL LETTER DA
+\setcclcucx 0565 0565 0535 % ARMENIAN SMALL LETTER ECH
+\setcclcucx 0566 0566 0536 % ARMENIAN SMALL LETTER ZA
+\setcclcucx 0567 0567 0537 % ARMENIAN SMALL LETTER EH
+\setcclcucx 0568 0568 0538 % ARMENIAN SMALL LETTER ET
+\setcclcucx 0569 0569 0539 % ARMENIAN SMALL LETTER TO
+\setcclcucx 056A 056A 053A % ARMENIAN SMALL LETTER ZHE
+\setcclcucx 056B 056B 053B % ARMENIAN SMALL LETTER INI
+\setcclcucx 056C 056C 053C % ARMENIAN SMALL LETTER LIWN
+\setcclcucx 056D 056D 053D % ARMENIAN SMALL LETTER XEH
+\setcclcucx 056E 056E 053E % ARMENIAN SMALL LETTER CA
+\setcclcucx 056F 056F 053F % ARMENIAN SMALL LETTER KEN
+\setcclcucx 0570 0570 0540 % ARMENIAN SMALL LETTER HO
+\setcclcucx 0571 0571 0541 % ARMENIAN SMALL LETTER JA
+\setcclcucx 0572 0572 0542 % ARMENIAN SMALL LETTER GHAD
+\setcclcucx 0573 0573 0543 % ARMENIAN SMALL LETTER CHEH
+\setcclcucx 0574 0574 0544 % ARMENIAN SMALL LETTER MEN
+\setcclcucx 0575 0575 0545 % ARMENIAN SMALL LETTER YI
+\setcclcucx 0576 0576 0546 % ARMENIAN SMALL LETTER NOW
+\setcclcucx 0577 0577 0547 % ARMENIAN SMALL LETTER SHA
+\setcclcucx 0578 0578 0548 % ARMENIAN SMALL LETTER VO
+\setcclcucx 0579 0579 0549 % ARMENIAN SMALL LETTER CHA
+\setcclcucx 057A 057A 054A % ARMENIAN SMALL LETTER PEH
+\setcclcucx 057B 057B 054B % ARMENIAN SMALL LETTER JHEH
+\setcclcucx 057C 057C 054C % ARMENIAN SMALL LETTER RA
+\setcclcucx 057D 057D 054D % ARMENIAN SMALL LETTER SEH
+\setcclcucx 057E 057E 054E % ARMENIAN SMALL LETTER VEW
+\setcclcucx 057F 057F 054F % ARMENIAN SMALL LETTER TIWN
+\setcclcucx 0580 0580 0550 % ARMENIAN SMALL LETTER REH
+\setcclcucx 0581 0581 0551 % ARMENIAN SMALL LETTER CO
+\setcclcucx 0582 0582 0552 % ARMENIAN SMALL LETTER YIWN
+\setcclcucx 0583 0583 0553 % ARMENIAN SMALL LETTER PIWR
+\setcclcucx 0584 0584 0554 % ARMENIAN SMALL LETTER KEH
+\setcclcucx 0585 0585 0555 % ARMENIAN SMALL LETTER OH
+\setcclcucx 0586 0586 0556 % ARMENIAN SMALL LETTER FEH
+\setcclcucx 0587 0587 0587 % ARMENIAN SMALL LIGATURE ECH YIWN
+\setcclcucx 10A0 2D00 10A0 % GEORGIAN CAPITAL LETTER AN
+\setcclcucx 10A1 2D01 10A1 % GEORGIAN CAPITAL LETTER BAN
+\setcclcucx 10A2 2D02 10A2 % GEORGIAN CAPITAL LETTER GAN
+\setcclcucx 10A3 2D03 10A3 % GEORGIAN CAPITAL LETTER DON
+\setcclcucx 10A4 2D04 10A4 % GEORGIAN CAPITAL LETTER EN
+\setcclcucx 10A5 2D05 10A5 % GEORGIAN CAPITAL LETTER VIN
+\setcclcucx 10A6 2D06 10A6 % GEORGIAN CAPITAL LETTER ZEN
+\setcclcucx 10A7 2D07 10A7 % GEORGIAN CAPITAL LETTER TAN
+\setcclcucx 10A8 2D08 10A8 % GEORGIAN CAPITAL LETTER IN
+\setcclcucx 10A9 2D09 10A9 % GEORGIAN CAPITAL LETTER KAN
+\setcclcucx 10AA 2D0A 10AA % GEORGIAN CAPITAL LETTER LAS
+\setcclcucx 10AB 2D0B 10AB % GEORGIAN CAPITAL LETTER MAN
+\setcclcucx 10AC 2D0C 10AC % GEORGIAN CAPITAL LETTER NAR
+\setcclcucx 10AD 2D0D 10AD % GEORGIAN CAPITAL LETTER ON
+\setcclcucx 10AE 2D0E 10AE % GEORGIAN CAPITAL LETTER PAR
+\setcclcucx 10AF 2D0F 10AF % GEORGIAN CAPITAL LETTER ZHAR
+\setcclcucx 10B0 2D10 10B0 % GEORGIAN CAPITAL LETTER RAE
+\setcclcucx 10B1 2D11 10B1 % GEORGIAN CAPITAL LETTER SAN
+\setcclcucx 10B2 2D12 10B2 % GEORGIAN CAPITAL LETTER TAR
+\setcclcucx 10B3 2D13 10B3 % GEORGIAN CAPITAL LETTER UN
+\setcclcucx 10B4 2D14 10B4 % GEORGIAN CAPITAL LETTER PHAR
+\setcclcucx 10B5 2D15 10B5 % GEORGIAN CAPITAL LETTER KHAR
+\setcclcucx 10B6 2D16 10B6 % GEORGIAN CAPITAL LETTER GHAN
+\setcclcucx 10B7 2D17 10B7 % GEORGIAN CAPITAL LETTER QAR
+\setcclcucx 10B8 2D18 10B8 % GEORGIAN CAPITAL LETTER SHIN
+\setcclcucx 10B9 2D19 10B9 % GEORGIAN CAPITAL LETTER CHIN
+\setcclcucx 10BA 2D1A 10BA % GEORGIAN CAPITAL LETTER CAN
+\setcclcucx 10BB 2D1B 10BB % GEORGIAN CAPITAL LETTER JIL
+\setcclcucx 10BC 2D1C 10BC % GEORGIAN CAPITAL LETTER CIL
+\setcclcucx 10BD 2D1D 10BD % GEORGIAN CAPITAL LETTER CHAR
+\setcclcucx 10BE 2D1E 10BE % GEORGIAN CAPITAL LETTER XAN
+\setcclcucx 10BF 2D1F 10BF % GEORGIAN CAPITAL LETTER JHAN
+\setcclcucx 10C0 2D20 10C0 % GEORGIAN CAPITAL LETTER HAE
+\setcclcucx 10C1 2D21 10C1 % GEORGIAN CAPITAL LETTER HE
+\setcclcucx 10C2 2D22 10C2 % GEORGIAN CAPITAL LETTER HIE
+\setcclcucx 10C3 2D23 10C3 % GEORGIAN CAPITAL LETTER WE
+\setcclcucx 10C4 2D24 10C4 % GEORGIAN CAPITAL LETTER HAR
+\setcclcucx 10C5 2D25 10C5 % GEORGIAN CAPITAL LETTER HOE
+\setcclcucx 1D00 1D00 1D00 % LATIN LETTER SMALL CAPITAL A
+\setcclcucx 1D01 1D01 1D01 % LATIN LETTER SMALL CAPITAL AE
+\setcclcucx 1D02 1D02 1D02 % LATIN SMALL LETTER TURNED AE
+\setcclcucx 1D03 1D03 1D03 % LATIN LETTER SMALL CAPITAL BARRED B
+\setcclcucx 1D04 1D04 1D04 % LATIN LETTER SMALL CAPITAL C
+\setcclcucx 1D05 1D05 1D05 % LATIN LETTER SMALL CAPITAL D
+\setcclcucx 1D06 1D06 1D06 % LATIN LETTER SMALL CAPITAL ETH
+\setcclcucx 1D07 1D07 1D07 % LATIN LETTER SMALL CAPITAL E
+\setcclcucx 1D08 1D08 1D08 % LATIN SMALL LETTER TURNED OPEN E
+\setcclcucx 1D09 1D09 1D09 % LATIN SMALL LETTER TURNED I
+\setcclcucx 1D0A 1D0A 1D0A % LATIN LETTER SMALL CAPITAL J
+\setcclcucx 1D0B 1D0B 1D0B % LATIN LETTER SMALL CAPITAL K
+\setcclcucx 1D0C 1D0C 1D0C % LATIN LETTER SMALL CAPITAL L WITH STROKE
+\setcclcucx 1D0D 1D0D 1D0D % LATIN LETTER SMALL CAPITAL M
+\setcclcucx 1D0E 1D0E 1D0E % LATIN LETTER SMALL CAPITAL REVERSED N
+\setcclcucx 1D0F 1D0F 1D0F % LATIN LETTER SMALL CAPITAL O
+\setcclcucx 1D10 1D10 1D10 % LATIN LETTER SMALL CAPITAL OPEN O
+\setcclcucx 1D11 1D11 1D11 % LATIN SMALL LETTER SIDEWAYS O
+\setcclcucx 1D12 1D12 1D12 % LATIN SMALL LETTER SIDEWAYS OPEN O
+\setcclcucx 1D13 1D13 1D13 % LATIN SMALL LETTER SIDEWAYS O WITH STROKE
+\setcclcucx 1D14 1D14 1D14 % LATIN SMALL LETTER TURNED OE
+\setcclcucx 1D15 1D15 1D15 % LATIN LETTER SMALL CAPITAL OU
+\setcclcucx 1D16 1D16 1D16 % LATIN SMALL LETTER TOP HALF O
+\setcclcucx 1D17 1D17 1D17 % LATIN SMALL LETTER BOTTOM HALF O
+\setcclcucx 1D18 1D18 1D18 % LATIN LETTER SMALL CAPITAL P
+\setcclcucx 1D19 1D19 1D19 % LATIN LETTER SMALL CAPITAL REVERSED R
+\setcclcucx 1D1A 1D1A 1D1A % LATIN LETTER SMALL CAPITAL TURNED R
+\setcclcucx 1D1B 1D1B 1D1B % LATIN LETTER SMALL CAPITAL T
+\setcclcucx 1D1C 1D1C 1D1C % LATIN LETTER SMALL CAPITAL U
+\setcclcucx 1D1D 1D1D 1D1D % LATIN SMALL LETTER SIDEWAYS U
+\setcclcucx 1D1E 1D1E 1D1E % LATIN SMALL LETTER SIDEWAYS DIAERESIZED U
+\setcclcucx 1D1F 1D1F 1D1F % LATIN SMALL LETTER SIDEWAYS TURNED M
+\setcclcucx 1D20 1D20 1D20 % LATIN LETTER SMALL CAPITAL V
+\setcclcucx 1D21 1D21 1D21 % LATIN LETTER SMALL CAPITAL W
+\setcclcucx 1D22 1D22 1D22 % LATIN LETTER SMALL CAPITAL Z
+\setcclcucx 1D23 1D23 1D23 % LATIN LETTER SMALL CAPITAL EZH
+\setcclcucx 1D24 1D24 1D24 % LATIN LETTER VOICED LARYNGEAL SPIRANT
+\setcclcucx 1D25 1D25 1D25 % LATIN LETTER AIN
+\setcclcucx 1D26 1D26 1D26 % GREEK LETTER SMALL CAPITAL GAMMA
+\setcclcucx 1D27 1D27 1D27 % GREEK LETTER SMALL CAPITAL LAMDA
+\setcclcucx 1D28 1D28 1D28 % GREEK LETTER SMALL CAPITAL PI
+\setcclcucx 1D29 1D29 1D29 % GREEK LETTER SMALL CAPITAL RHO
+\setcclcucx 1D2A 1D2A 1D2A % GREEK LETTER SMALL CAPITAL PSI
+\setcclcucx 1D2B 1D2B 1D2B % CYRILLIC LETTER SMALL CAPITAL EL
+\setcclcucx 1D62 1D62 1D62 % LATIN SUBSCRIPT SMALL LETTER I
+\setcclcucx 1D63 1D63 1D63 % LATIN SUBSCRIPT SMALL LETTER R
+\setcclcucx 1D64 1D64 1D64 % LATIN SUBSCRIPT SMALL LETTER U
+\setcclcucx 1D65 1D65 1D65 % LATIN SUBSCRIPT SMALL LETTER V
+\setcclcucx 1D66 1D66 1D66 % GREEK SUBSCRIPT SMALL LETTER BETA
+\setcclcucx 1D67 1D67 1D67 % GREEK SUBSCRIPT SMALL LETTER GAMMA
+\setcclcucx 1D68 1D68 1D68 % GREEK SUBSCRIPT SMALL LETTER RHO
+\setcclcucx 1D69 1D69 1D69 % GREEK SUBSCRIPT SMALL LETTER PHI
+\setcclcucx 1D6A 1D6A 1D6A % GREEK SUBSCRIPT SMALL LETTER CHI
+\setcclcucx 1D6B 1D6B 1D6B % LATIN SMALL LETTER UE
+\setcclcucx 1D6C 1D6C 1D6C % LATIN SMALL LETTER B WITH MIDDLE TILDE
+\setcclcucx 1D6D 1D6D 1D6D % LATIN SMALL LETTER D WITH MIDDLE TILDE
+\setcclcucx 1D6E 1D6E 1D6E % LATIN SMALL LETTER F WITH MIDDLE TILDE
+\setcclcucx 1D6F 1D6F 1D6F % LATIN SMALL LETTER M WITH MIDDLE TILDE
+\setcclcucx 1D70 1D70 1D70 % LATIN SMALL LETTER N WITH MIDDLE TILDE
+\setcclcucx 1D71 1D71 1D71 % LATIN SMALL LETTER P WITH MIDDLE TILDE
+\setcclcucx 1D72 1D72 1D72 % LATIN SMALL LETTER R WITH MIDDLE TILDE
+\setcclcucx 1D73 1D73 1D73 % LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE
+\setcclcucx 1D74 1D74 1D74 % LATIN SMALL LETTER S WITH MIDDLE TILDE
+\setcclcucx 1D75 1D75 1D75 % LATIN SMALL LETTER T WITH MIDDLE TILDE
+\setcclcucx 1D76 1D76 1D76 % LATIN SMALL LETTER Z WITH MIDDLE TILDE
+\setcclcucx 1D77 1D77 1D77 % LATIN SMALL LETTER TURNED G
+\setcclcucx 1D79 1D79 1D79 % LATIN SMALL LETTER INSULAR G
+\setcclcucx 1D7A 1D7A 1D7A % LATIN SMALL LETTER TH WITH STRIKETHROUGH
+\setcclcucx 1D7B 1D7B 1D7B % LATIN SMALL CAPITAL LETTER I WITH STROKE
+\setcclcucx 1D7C 1D7C 1D7C % LATIN SMALL LETTER IOTA WITH STROKE
+\setcclcucx 1D7D 1D7D 2C63 % LATIN SMALL LETTER P WITH STROKE
+\setcclcucx 1D7E 1D7E 1D7E % LATIN SMALL CAPITAL LETTER U WITH STROKE
+\setcclcucx 1D7F 1D7F 1D7F % LATIN SMALL LETTER UPSILON WITH STROKE
+\setcclcucx 1D80 1D80 1D80 % LATIN SMALL LETTER B WITH PALATAL HOOK
+\setcclcucx 1D81 1D81 1D81 % LATIN SMALL LETTER D WITH PALATAL HOOK
+\setcclcucx 1D82 1D82 1D82 % LATIN SMALL LETTER F WITH PALATAL HOOK
+\setcclcucx 1D83 1D83 1D83 % LATIN SMALL LETTER G WITH PALATAL HOOK
+\setcclcucx 1D84 1D84 1D84 % LATIN SMALL LETTER K WITH PALATAL HOOK
+\setcclcucx 1D85 1D85 1D85 % LATIN SMALL LETTER L WITH PALATAL HOOK
+\setcclcucx 1D86 1D86 1D86 % LATIN SMALL LETTER M WITH PALATAL HOOK
+\setcclcucx 1D87 1D87 1D87 % LATIN SMALL LETTER N WITH PALATAL HOOK
+\setcclcucx 1D88 1D88 1D88 % LATIN SMALL LETTER P WITH PALATAL HOOK
+\setcclcucx 1D89 1D89 1D89 % LATIN SMALL LETTER R WITH PALATAL HOOK
+\setcclcucx 1D8A 1D8A 1D8A % LATIN SMALL LETTER S WITH PALATAL HOOK
+\setcclcucx 1D8B 1D8B 1D8B % LATIN SMALL LETTER ESH WITH PALATAL HOOK
+\setcclcucx 1D8C 1D8C 1D8C % LATIN SMALL LETTER V WITH PALATAL HOOK
+\setcclcucx 1D8D 1D8D 1D8D % LATIN SMALL LETTER X WITH PALATAL HOOK
+\setcclcucx 1D8E 1D8E 1D8E % LATIN SMALL LETTER Z WITH PALATAL HOOK
+\setcclcucx 1D8F 1D8F 1D8F % LATIN SMALL LETTER A WITH RETROFLEX HOOK
+\setcclcucx 1D90 1D90 1D90 % LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK
+\setcclcucx 1D91 1D91 1D91 % LATIN SMALL LETTER D WITH HOOK AND TAIL
+\setcclcucx 1D92 1D92 1D92 % LATIN SMALL LETTER E WITH RETROFLEX HOOK
+\setcclcucx 1D93 1D93 1D93 % LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK
+\setcclcucx 1D94 1D94 1D94 % LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK
+\setcclcucx 1D95 1D95 1D95 % LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK
+\setcclcucx 1D96 1D96 1D96 % LATIN SMALL LETTER I WITH RETROFLEX HOOK
+\setcclcucx 1D97 1D97 1D97 % LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK
+\setcclcucx 1D98 1D98 1D98 % LATIN SMALL LETTER ESH WITH RETROFLEX HOOK
+\setcclcucx 1D99 1D99 1D99 % LATIN SMALL LETTER U WITH RETROFLEX HOOK
+\setcclcucx 1D9A 1D9A 1D9A % LATIN SMALL LETTER EZH WITH RETROFLEX HOOK
+\setcclcucx 1E00 1E01 1E00 % LATIN CAPITAL LETTER A WITH RING BELOW
+\setcclcucx 1E01 1E01 1E00 % LATIN SMALL LETTER A WITH RING BELOW
+\setcclcucx 1E02 1E03 1E02 % LATIN CAPITAL LETTER B WITH DOT ABOVE
+\setcclcucx 1E03 1E03 1E02 % LATIN SMALL LETTER B WITH DOT ABOVE
+\setcclcucx 1E04 1E05 1E04 % LATIN CAPITAL LETTER B WITH DOT BELOW
+\setcclcucx 1E05 1E05 1E04 % LATIN SMALL LETTER B WITH DOT BELOW
+\setcclcucx 1E06 1E07 1E06 % LATIN CAPITAL LETTER B WITH LINE BELOW
+\setcclcucx 1E07 1E07 1E06 % LATIN SMALL LETTER B WITH LINE BELOW
+\setcclcucx 1E08 1E09 1E08 % LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
+\setcclcucx 1E09 1E09 1E08 % LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
+\setcclcucx 1E0A 1E0B 1E0A % LATIN CAPITAL LETTER D WITH DOT ABOVE
+\setcclcucx 1E0B 1E0B 1E0A % LATIN SMALL LETTER D WITH DOT ABOVE
+\setcclcucx 1E0C 1E0D 1E0C % LATIN CAPITAL LETTER D WITH DOT BELOW
+\setcclcucx 1E0D 1E0D 1E0C % LATIN SMALL LETTER D WITH DOT BELOW
+\setcclcucx 1E0E 1E0F 1E0E % LATIN CAPITAL LETTER D WITH LINE BELOW
+\setcclcucx 1E0F 1E0F 1E0E % LATIN SMALL LETTER D WITH LINE BELOW
+\setcclcucx 1E10 1E11 1E10 % LATIN CAPITAL LETTER D WITH CEDILLA
+\setcclcucx 1E11 1E11 1E10 % LATIN SMALL LETTER D WITH CEDILLA
+\setcclcucx 1E12 1E13 1E12 % LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW
+\setcclcucx 1E13 1E13 1E12 % LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW
+\setcclcucx 1E14 1E15 1E14 % LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
+\setcclcucx 1E15 1E15 1E14 % LATIN SMALL LETTER E WITH MACRON AND GRAVE
+\setcclcucx 1E16 1E17 1E16 % LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
+\setcclcucx 1E17 1E17 1E16 % LATIN SMALL LETTER E WITH MACRON AND ACUTE
+\setcclcucx 1E18 1E19 1E18 % LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW
+\setcclcucx 1E19 1E19 1E18 % LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW
+\setcclcucx 1E1A 1E1B 1E1A % LATIN CAPITAL LETTER E WITH TILDE BELOW
+\setcclcucx 1E1B 1E1B 1E1A % LATIN SMALL LETTER E WITH TILDE BELOW
+\setcclcucx 1E1C 1E1D 1E1C % LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
+\setcclcucx 1E1D 1E1D 1E1C % LATIN SMALL LETTER E WITH CEDILLA AND BREVE
+\setcclcucx 1E1E 1E1F 1E1E % LATIN CAPITAL LETTER F WITH DOT ABOVE
+\setcclcucx 1E1F 1E1F 1E1E % LATIN SMALL LETTER F WITH DOT ABOVE
+\setcclcucx 1E20 1E21 1E20 % LATIN CAPITAL LETTER G WITH MACRON
+\setcclcucx 1E21 1E21 1E20 % LATIN SMALL LETTER G WITH MACRON
+\setcclcucx 1E22 1E23 1E22 % LATIN CAPITAL LETTER H WITH DOT ABOVE
+\setcclcucx 1E23 1E23 1E22 % LATIN SMALL LETTER H WITH DOT ABOVE
+\setcclcucx 1E24 1E25 1E24 % LATIN CAPITAL LETTER H WITH DOT BELOW
+\setcclcucx 1E25 1E25 1E24 % LATIN SMALL LETTER H WITH DOT BELOW
+\setcclcucx 1E26 1E27 1E26 % LATIN CAPITAL LETTER H WITH DIAERESIS
+\setcclcucx 1E27 1E27 1E26 % LATIN SMALL LETTER H WITH DIAERESIS
+\setcclcucx 1E28 1E29 1E28 % LATIN CAPITAL LETTER H WITH CEDILLA
+\setcclcucx 1E29 1E29 1E28 % LATIN SMALL LETTER H WITH CEDILLA
+\setcclcucx 1E2A 1E2B 1E2A % LATIN CAPITAL LETTER H WITH BREVE BELOW
+\setcclcucx 1E2B 1E2B 1E2A % LATIN SMALL LETTER H WITH BREVE BELOW
+\setcclcucx 1E2C 1E2D 1E2C % LATIN CAPITAL LETTER I WITH TILDE BELOW
+\setcclcucx 1E2D 1E2D 1E2C % LATIN SMALL LETTER I WITH TILDE BELOW
+\setcclcucx 1E2E 1E2F 1E2E % LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
+\setcclcucx 1E2F 1E2F 1E2E % LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
+\setcclcucx 1E30 1E31 1E30 % LATIN CAPITAL LETTER K WITH ACUTE
+\setcclcucx 1E31 1E31 1E30 % LATIN SMALL LETTER K WITH ACUTE
+\setcclcucx 1E32 1E33 1E32 % LATIN CAPITAL LETTER K WITH DOT BELOW
+\setcclcucx 1E33 1E33 1E32 % LATIN SMALL LETTER K WITH DOT BELOW
+\setcclcucx 1E34 1E35 1E34 % LATIN CAPITAL LETTER K WITH LINE BELOW
+\setcclcucx 1E35 1E35 1E34 % LATIN SMALL LETTER K WITH LINE BELOW
+\setcclcucx 1E36 1E37 1E36 % LATIN CAPITAL LETTER L WITH DOT BELOW
+\setcclcucx 1E37 1E37 1E36 % LATIN SMALL LETTER L WITH DOT BELOW
+\setcclcucx 1E38 1E39 1E38 % LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
+\setcclcucx 1E39 1E39 1E38 % LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
+\setcclcucx 1E3A 1E3B 1E3A % LATIN CAPITAL LETTER L WITH LINE BELOW
+\setcclcucx 1E3B 1E3B 1E3A % LATIN SMALL LETTER L WITH LINE BELOW
+\setcclcucx 1E3C 1E3D 1E3C % LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW
+\setcclcucx 1E3D 1E3D 1E3C % LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW
+\setcclcucx 1E3E 1E3F 1E3E % LATIN CAPITAL LETTER M WITH ACUTE
+\setcclcucx 1E3F 1E3F 1E3E % LATIN SMALL LETTER M WITH ACUTE
+\setcclcucx 1E40 1E41 1E40 % LATIN CAPITAL LETTER M WITH DOT ABOVE
+\setcclcucx 1E41 1E41 1E40 % LATIN SMALL LETTER M WITH DOT ABOVE
+\setcclcucx 1E42 1E43 1E42 % LATIN CAPITAL LETTER M WITH DOT BELOW
+\setcclcucx 1E43 1E43 1E42 % LATIN SMALL LETTER M WITH DOT BELOW
+\setcclcucx 1E44 1E45 1E44 % LATIN CAPITAL LETTER N WITH DOT ABOVE
+\setcclcucx 1E45 1E45 1E44 % LATIN SMALL LETTER N WITH DOT ABOVE
+\setcclcucx 1E46 1E47 1E46 % LATIN CAPITAL LETTER N WITH DOT BELOW
+\setcclcucx 1E47 1E47 1E46 % LATIN SMALL LETTER N WITH DOT BELOW
+\setcclcucx 1E48 1E49 1E48 % LATIN CAPITAL LETTER N WITH LINE BELOW
+\setcclcucx 1E49 1E49 1E48 % LATIN SMALL LETTER N WITH LINE BELOW
+\setcclcucx 1E4A 1E4B 1E4A % LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW
+\setcclcucx 1E4B 1E4B 1E4A % LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW
+\setcclcucx 1E4C 1E4D 1E4C % LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
+\setcclcucx 1E4D 1E4D 1E4C % LATIN SMALL LETTER O WITH TILDE AND ACUTE
+\setcclcucx 1E4E 1E4F 1E4E % LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
+\setcclcucx 1E4F 1E4F 1E4E % LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
+\setcclcucx 1E50 1E51 1E50 % LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
+\setcclcucx 1E51 1E51 1E50 % LATIN SMALL LETTER O WITH MACRON AND GRAVE
+\setcclcucx 1E52 1E53 1E52 % LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
+\setcclcucx 1E53 1E53 1E52 % LATIN SMALL LETTER O WITH MACRON AND ACUTE
+\setcclcucx 1E54 1E55 1E54 % LATIN CAPITAL LETTER P WITH ACUTE
+\setcclcucx 1E55 1E55 1E54 % LATIN SMALL LETTER P WITH ACUTE
+\setcclcucx 1E56 1E57 1E56 % LATIN CAPITAL LETTER P WITH DOT ABOVE
+\setcclcucx 1E57 1E57 1E56 % LATIN SMALL LETTER P WITH DOT ABOVE
+\setcclcucx 1E58 1E59 1E58 % LATIN CAPITAL LETTER R WITH DOT ABOVE
+\setcclcucx 1E59 1E59 1E58 % LATIN SMALL LETTER R WITH DOT ABOVE
+\setcclcucx 1E5A 1E5B 1E5A % LATIN CAPITAL LETTER R WITH DOT BELOW
+\setcclcucx 1E5B 1E5B 1E5A % LATIN SMALL LETTER R WITH DOT BELOW
+\setcclcucx 1E5C 1E5D 1E5C % LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
+\setcclcucx 1E5D 1E5D 1E5C % LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
+\setcclcucx 1E5E 1E5F 1E5E % LATIN CAPITAL LETTER R WITH LINE BELOW
+\setcclcucx 1E5F 1E5F 1E5E % LATIN SMALL LETTER R WITH LINE BELOW
+\setcclcucx 1E60 1E61 1E60 % LATIN CAPITAL LETTER S WITH DOT ABOVE
+\setcclcucx 1E61 1E61 1E60 % LATIN SMALL LETTER S WITH DOT ABOVE
+\setcclcucx 1E62 1E63 1E62 % LATIN CAPITAL LETTER S WITH DOT BELOW
+\setcclcucx 1E63 1E63 1E62 % LATIN SMALL LETTER S WITH DOT BELOW
+\setcclcucx 1E64 1E65 1E64 % LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
+\setcclcucx 1E65 1E65 1E64 % LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
+\setcclcucx 1E66 1E67 1E66 % LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE
+\setcclcucx 1E67 1E67 1E66 % LATIN SMALL LETTER S WITH CARON AND DOT ABOVE
+\setcclcucx 1E68 1E69 1E68 % LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
+\setcclcucx 1E69 1E69 1E68 % LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
+\setcclcucx 1E6A 1E6B 1E6A % LATIN CAPITAL LETTER T WITH DOT ABOVE
+\setcclcucx 1E6B 1E6B 1E6A % LATIN SMALL LETTER T WITH DOT ABOVE
+\setcclcucx 1E6C 1E6D 1E6C % LATIN CAPITAL LETTER T WITH DOT BELOW
+\setcclcucx 1E6D 1E6D 1E6C % LATIN SMALL LETTER T WITH DOT BELOW
+\setcclcucx 1E6E 1E6F 1E6E % LATIN CAPITAL LETTER T WITH LINE BELOW
+\setcclcucx 1E6F 1E6F 1E6E % LATIN SMALL LETTER T WITH LINE BELOW
+\setcclcucx 1E70 1E71 1E70 % LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW
+\setcclcucx 1E71 1E71 1E70 % LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW
+\setcclcucx 1E72 1E73 1E72 % LATIN CAPITAL LETTER U WITH DIAERESIS BELOW
+\setcclcucx 1E73 1E73 1E72 % LATIN SMALL LETTER U WITH DIAERESIS BELOW
+\setcclcucx 1E74 1E75 1E74 % LATIN CAPITAL LETTER U WITH TILDE BELOW
+\setcclcucx 1E75 1E75 1E74 % LATIN SMALL LETTER U WITH TILDE BELOW
+\setcclcucx 1E76 1E77 1E76 % LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW
+\setcclcucx 1E77 1E77 1E76 % LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW
+\setcclcucx 1E78 1E79 1E78 % LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
+\setcclcucx 1E79 1E79 1E78 % LATIN SMALL LETTER U WITH TILDE AND ACUTE
+\setcclcucx 1E7A 1E7B 1E7A % LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
+\setcclcucx 1E7B 1E7B 1E7A % LATIN SMALL LETTER U WITH MACRON AND DIAERESIS
+\setcclcucx 1E7C 1E7D 1E7C % LATIN CAPITAL LETTER V WITH TILDE
+\setcclcucx 1E7D 1E7D 1E7C % LATIN SMALL LETTER V WITH TILDE
+\setcclcucx 1E7E 1E7F 1E7E % LATIN CAPITAL LETTER V WITH DOT BELOW
+\setcclcucx 1E7F 1E7F 1E7E % LATIN SMALL LETTER V WITH DOT BELOW
+\setcclcucx 1E80 1E81 1E80 % LATIN CAPITAL LETTER W WITH GRAVE
+\setcclcucx 1E81 1E81 1E80 % LATIN SMALL LETTER W WITH GRAVE
+\setcclcucx 1E82 1E83 1E82 % LATIN CAPITAL LETTER W WITH ACUTE
+\setcclcucx 1E83 1E83 1E82 % LATIN SMALL LETTER W WITH ACUTE
+\setcclcucx 1E84 1E85 1E84 % LATIN CAPITAL LETTER W WITH DIAERESIS
+\setcclcucx 1E85 1E85 1E84 % LATIN SMALL LETTER W WITH DIAERESIS
+\setcclcucx 1E86 1E87 1E86 % LATIN CAPITAL LETTER W WITH DOT ABOVE
+\setcclcucx 1E87 1E87 1E86 % LATIN SMALL LETTER W WITH DOT ABOVE
+\setcclcucx 1E88 1E89 1E88 % LATIN CAPITAL LETTER W WITH DOT BELOW
+\setcclcucx 1E89 1E89 1E88 % LATIN SMALL LETTER W WITH DOT BELOW
+\setcclcucx 1E8A 1E8B 1E8A % LATIN CAPITAL LETTER X WITH DOT ABOVE
+\setcclcucx 1E8B 1E8B 1E8A % LATIN SMALL LETTER X WITH DOT ABOVE
+\setcclcucx 1E8C 1E8D 1E8C % LATIN CAPITAL LETTER X WITH DIAERESIS
+\setcclcucx 1E8D 1E8D 1E8C % LATIN SMALL LETTER X WITH DIAERESIS
+\setcclcucx 1E8E 1E8F 1E8E % LATIN CAPITAL LETTER Y WITH DOT ABOVE
+\setcclcucx 1E8F 1E8F 1E8E % LATIN SMALL LETTER Y WITH DOT ABOVE
+\setcclcucx 1E90 1E91 1E90 % LATIN CAPITAL LETTER Z WITH CIRCUMFLEX
+\setcclcucx 1E91 1E91 1E90 % LATIN SMALL LETTER Z WITH CIRCUMFLEX
+\setcclcucx 1E92 1E93 1E92 % LATIN CAPITAL LETTER Z WITH DOT BELOW
+\setcclcucx 1E93 1E93 1E92 % LATIN SMALL LETTER Z WITH DOT BELOW
+\setcclcucx 1E94 1E95 1E94 % LATIN CAPITAL LETTER Z WITH LINE BELOW
+\setcclcucx 1E95 1E95 1E94 % LATIN SMALL LETTER Z WITH LINE BELOW
+\setcclcucx 1E96 1E96 1E96 % LATIN SMALL LETTER H WITH LINE BELOW
+\setcclcucx 1E97 1E97 1E97 % LATIN SMALL LETTER T WITH DIAERESIS
+\setcclcucx 1E98 1E98 1E98 % LATIN SMALL LETTER W WITH RING ABOVE
+\setcclcucx 1E99 1E99 1E99 % LATIN SMALL LETTER Y WITH RING ABOVE
+\setcclcucx 1E9A 1E9A 1E9A % LATIN SMALL LETTER A WITH RIGHT HALF RING
+\setcclcucx 1E9B 1E9B 1E60 % LATIN SMALL LETTER LONG S WITH DOT ABOVE
+\setcclcucx 1EA0 1EA1 1EA0 % LATIN CAPITAL LETTER A WITH DOT BELOW
+\setcclcucx 1EA1 1EA1 1EA0 % LATIN SMALL LETTER A WITH DOT BELOW
+\setcclcucx 1EA2 1EA3 1EA2 % LATIN CAPITAL LETTER A WITH HOOK ABOVE
+\setcclcucx 1EA3 1EA3 1EA2 % LATIN SMALL LETTER A WITH HOOK ABOVE
+\setcclcucx 1EA4 1EA5 1EA4 % LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
+\setcclcucx 1EA5 1EA5 1EA4 % LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
+\setcclcucx 1EA6 1EA7 1EA6 % LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
+\setcclcucx 1EA7 1EA7 1EA6 % LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
+\setcclcucx 1EA8 1EA9 1EA8 % LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+\setcclcucx 1EA9 1EA9 1EA8 % LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
+\setcclcucx 1EAA 1EAB 1EAA % LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
+\setcclcucx 1EAB 1EAB 1EAA % LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
+\setcclcucx 1EAC 1EAD 1EAC % LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+\setcclcucx 1EAD 1EAD 1EAC % LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
+\setcclcucx 1EAE 1EAF 1EAE % LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
+\setcclcucx 1EAF 1EAF 1EAE % LATIN SMALL LETTER A WITH BREVE AND ACUTE
+\setcclcucx 1EB0 1EB1 1EB0 % LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
+\setcclcucx 1EB1 1EB1 1EB0 % LATIN SMALL LETTER A WITH BREVE AND GRAVE
+\setcclcucx 1EB2 1EB3 1EB2 % LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
+\setcclcucx 1EB3 1EB3 1EB2 % LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
+\setcclcucx 1EB4 1EB5 1EB4 % LATIN CAPITAL LETTER A WITH BREVE AND TILDE
+\setcclcucx 1EB5 1EB5 1EB4 % LATIN SMALL LETTER A WITH BREVE AND TILDE
+\setcclcucx 1EB6 1EB7 1EB6 % LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
+\setcclcucx 1EB7 1EB7 1EB6 % LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
+\setcclcucx 1EB8 1EB9 1EB8 % LATIN CAPITAL LETTER E WITH DOT BELOW
+\setcclcucx 1EB9 1EB9 1EB8 % LATIN SMALL LETTER E WITH DOT BELOW
+\setcclcucx 1EBA 1EBB 1EBA % LATIN CAPITAL LETTER E WITH HOOK ABOVE
+\setcclcucx 1EBB 1EBB 1EBA % LATIN SMALL LETTER E WITH HOOK ABOVE
+\setcclcucx 1EBC 1EBD 1EBC % LATIN CAPITAL LETTER E WITH TILDE
+\setcclcucx 1EBD 1EBD 1EBC % LATIN SMALL LETTER E WITH TILDE
+\setcclcucx 1EBE 1EBF 1EBE % LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
+\setcclcucx 1EBF 1EBF 1EBE % LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
+\setcclcucx 1EC0 1EC1 1EC0 % LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
+\setcclcucx 1EC1 1EC1 1EC0 % LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
+\setcclcucx 1EC2 1EC3 1EC2 % LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+\setcclcucx 1EC3 1EC3 1EC2 % LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
+\setcclcucx 1EC4 1EC5 1EC4 % LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
+\setcclcucx 1EC5 1EC5 1EC4 % LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
+\setcclcucx 1EC6 1EC7 1EC6 % LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+\setcclcucx 1EC7 1EC7 1EC6 % LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
+\setcclcucx 1EC8 1EC9 1EC8 % LATIN CAPITAL LETTER I WITH HOOK ABOVE
+\setcclcucx 1EC9 1EC9 1EC8 % LATIN SMALL LETTER I WITH HOOK ABOVE
+\setcclcucx 1ECA 1ECB 1ECA % LATIN CAPITAL LETTER I WITH DOT BELOW
+\setcclcucx 1ECB 1ECB 1ECA % LATIN SMALL LETTER I WITH DOT BELOW
+\setcclcucx 1ECC 1ECD 1ECC % LATIN CAPITAL LETTER O WITH DOT BELOW
+\setcclcucx 1ECD 1ECD 1ECC % LATIN SMALL LETTER O WITH DOT BELOW
+\setcclcucx 1ECE 1ECF 1ECE % LATIN CAPITAL LETTER O WITH HOOK ABOVE
+\setcclcucx 1ECF 1ECF 1ECE % LATIN SMALL LETTER O WITH HOOK ABOVE
+\setcclcucx 1ED0 1ED1 1ED0 % LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
+\setcclcucx 1ED1 1ED1 1ED0 % LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
+\setcclcucx 1ED2 1ED3 1ED2 % LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
+\setcclcucx 1ED3 1ED3 1ED2 % LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
+\setcclcucx 1ED4 1ED5 1ED4 % LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+\setcclcucx 1ED5 1ED5 1ED4 % LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
+\setcclcucx 1ED6 1ED7 1ED6 % LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
+\setcclcucx 1ED7 1ED7 1ED6 % LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
+\setcclcucx 1ED8 1ED9 1ED8 % LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+\setcclcucx 1ED9 1ED9 1ED8 % LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
+\setcclcucx 1EDA 1EDB 1EDA % LATIN CAPITAL LETTER O WITH HORN AND ACUTE
+\setcclcucx 1EDB 1EDB 1EDA % LATIN SMALL LETTER O WITH HORN AND ACUTE
+\setcclcucx 1EDC 1EDD 1EDC % LATIN CAPITAL LETTER O WITH HORN AND GRAVE
+\setcclcucx 1EDD 1EDD 1EDC % LATIN SMALL LETTER O WITH HORN AND GRAVE
+\setcclcucx 1EDE 1EDF 1EDE % LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
+\setcclcucx 1EDF 1EDF 1EDE % LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
+\setcclcucx 1EE0 1EE1 1EE0 % LATIN CAPITAL LETTER O WITH HORN AND TILDE
+\setcclcucx 1EE1 1EE1 1EE0 % LATIN SMALL LETTER O WITH HORN AND TILDE
+\setcclcucx 1EE2 1EE3 1EE2 % LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
+\setcclcucx 1EE3 1EE3 1EE2 % LATIN SMALL LETTER O WITH HORN AND DOT BELOW
+\setcclcucx 1EE4 1EE5 1EE4 % LATIN CAPITAL LETTER U WITH DOT BELOW
+\setcclcucx 1EE5 1EE5 1EE4 % LATIN SMALL LETTER U WITH DOT BELOW
+\setcclcucx 1EE6 1EE7 1EE6 % LATIN CAPITAL LETTER U WITH HOOK ABOVE
+\setcclcucx 1EE7 1EE7 1EE6 % LATIN SMALL LETTER U WITH HOOK ABOVE
+\setcclcucx 1EE8 1EE9 1EE8 % LATIN CAPITAL LETTER U WITH HORN AND ACUTE
+\setcclcucx 1EE9 1EE9 1EE8 % LATIN SMALL LETTER U WITH HORN AND ACUTE
+\setcclcucx 1EEA 1EEB 1EEA % LATIN CAPITAL LETTER U WITH HORN AND GRAVE
+\setcclcucx 1EEB 1EEB 1EEA % LATIN SMALL LETTER U WITH HORN AND GRAVE
+\setcclcucx 1EEC 1EED 1EEC % LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
+\setcclcucx 1EED 1EED 1EEC % LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
+\setcclcucx 1EEE 1EEF 1EEE % LATIN CAPITAL LETTER U WITH HORN AND TILDE
+\setcclcucx 1EEF 1EEF 1EEE % LATIN SMALL LETTER U WITH HORN AND TILDE
+\setcclcucx 1EF0 1EF1 1EF0 % LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
+\setcclcucx 1EF1 1EF1 1EF0 % LATIN SMALL LETTER U WITH HORN AND DOT BELOW
+\setcclcucx 1EF2 1EF3 1EF2 % LATIN CAPITAL LETTER Y WITH GRAVE
+\setcclcucx 1EF3 1EF3 1EF2 % LATIN SMALL LETTER Y WITH GRAVE
+\setcclcucx 1EF4 1EF5 1EF4 % LATIN CAPITAL LETTER Y WITH DOT BELOW
+\setcclcucx 1EF5 1EF5 1EF4 % LATIN SMALL LETTER Y WITH DOT BELOW
+\setcclcucx 1EF6 1EF7 1EF6 % LATIN CAPITAL LETTER Y WITH HOOK ABOVE
+\setcclcucx 1EF7 1EF7 1EF6 % LATIN SMALL LETTER Y WITH HOOK ABOVE
+\setcclcucx 1EF8 1EF9 1EF8 % LATIN CAPITAL LETTER Y WITH TILDE
+\setcclcucx 1EF9 1EF9 1EF8 % LATIN SMALL LETTER Y WITH TILDE
+\setcclcucx 1F00 1F00 1F08 % GREEK SMALL LETTER ALPHA WITH PSILI
+\setcclcucx 1F01 1F01 1F09 % GREEK SMALL LETTER ALPHA WITH DASIA
+\setcclcucx 1F02 1F02 1F0A % GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA
+\setcclcucx 1F03 1F03 1F0B % GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA
+\setcclcucx 1F04 1F04 1F0C % GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA
+\setcclcucx 1F05 1F05 1F0D % GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA
+\setcclcucx 1F06 1F06 1F0E % GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI
+\setcclcucx 1F07 1F07 1F0F % GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
+\setcclcucx 1F08 1F00 1F08 % GREEK CAPITAL LETTER ALPHA WITH PSILI
+\setcclcucx 1F09 1F01 1F09 % GREEK CAPITAL LETTER ALPHA WITH DASIA
+\setcclcucx 1F0A 1F02 1F0A % GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA
+\setcclcucx 1F0B 1F03 1F0B % GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA
+\setcclcucx 1F0C 1F04 1F0C % GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
+\setcclcucx 1F0D 1F05 1F0D % GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
+\setcclcucx 1F0E 1F06 1F0E % GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI
+\setcclcucx 1F0F 1F07 1F0F % GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
+\setcclcucx 1F10 1F10 1F18 % GREEK SMALL LETTER EPSILON WITH PSILI
+\setcclcucx 1F11 1F11 1F19 % GREEK SMALL LETTER EPSILON WITH DASIA
+\setcclcucx 1F12 1F12 1F1A % GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA
+\setcclcucx 1F13 1F13 1F1B % GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA
+\setcclcucx 1F14 1F14 1F1C % GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA
+\setcclcucx 1F15 1F15 1F1D % GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
+\setcclcucx 1F18 1F10 1F18 % GREEK CAPITAL LETTER EPSILON WITH PSILI
+\setcclcucx 1F19 1F11 1F19 % GREEK CAPITAL LETTER EPSILON WITH DASIA
+\setcclcucx 1F1A 1F12 1F1A % GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA
+\setcclcucx 1F1B 1F13 1F1B % GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA
+\setcclcucx 1F1C 1F14 1F1C % GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
+\setcclcucx 1F1D 1F15 1F1D % GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
+\setcclcucx 1F20 1F20 1F28 % GREEK SMALL LETTER ETA WITH PSILI
+\setcclcucx 1F21 1F21 1F29 % GREEK SMALL LETTER ETA WITH DASIA
+\setcclcucx 1F22 1F22 1F2A % GREEK SMALL LETTER ETA WITH PSILI AND VARIA
+\setcclcucx 1F23 1F23 1F2B % GREEK SMALL LETTER ETA WITH DASIA AND VARIA
+\setcclcucx 1F24 1F24 1F2C % GREEK SMALL LETTER ETA WITH PSILI AND OXIA
+\setcclcucx 1F25 1F25 1F2D % GREEK SMALL LETTER ETA WITH DASIA AND OXIA
+\setcclcucx 1F26 1F26 1F2E % GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI
+\setcclcucx 1F27 1F27 1F2F % GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI
+\setcclcucx 1F28 1F20 1F28 % GREEK CAPITAL LETTER ETA WITH PSILI
+\setcclcucx 1F29 1F21 1F29 % GREEK CAPITAL LETTER ETA WITH DASIA
+\setcclcucx 1F2A 1F22 1F2A % GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA
+\setcclcucx 1F2B 1F23 1F2B % GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA
+\setcclcucx 1F2C 1F24 1F2C % GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
+\setcclcucx 1F2D 1F25 1F2D % GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
+\setcclcucx 1F2E 1F26 1F2E % GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI
+\setcclcucx 1F2F 1F27 1F2F % GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
+\setcclcucx 1F30 1F30 1F38 % GREEK SMALL LETTER IOTA WITH PSILI
+\setcclcucx 1F31 1F31 1F39 % GREEK SMALL LETTER IOTA WITH DASIA
+\setcclcucx 1F32 1F32 1F3A % GREEK SMALL LETTER IOTA WITH PSILI AND VARIA
+\setcclcucx 1F33 1F33 1F3B % GREEK SMALL LETTER IOTA WITH DASIA AND VARIA
+\setcclcucx 1F34 1F34 1F3C % GREEK SMALL LETTER IOTA WITH PSILI AND OXIA
+\setcclcucx 1F35 1F35 1F3D % GREEK SMALL LETTER IOTA WITH DASIA AND OXIA
+\setcclcucx 1F36 1F36 1F3E % GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI
+\setcclcucx 1F37 1F37 1F3F % GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI
+\setcclcucx 1F38 1F30 1F38 % GREEK CAPITAL LETTER IOTA WITH PSILI
+\setcclcucx 1F39 1F31 1F39 % GREEK CAPITAL LETTER IOTA WITH DASIA
+\setcclcucx 1F3A 1F32 1F3A % GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA
+\setcclcucx 1F3B 1F33 1F3B % GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA
+\setcclcucx 1F3C 1F34 1F3C % GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
+\setcclcucx 1F3D 1F35 1F3D % GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
+\setcclcucx 1F3E 1F36 1F3E % GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI
+\setcclcucx 1F3F 1F37 1F3F % GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
+\setcclcucx 1F40 1F40 1F48 % GREEK SMALL LETTER OMICRON WITH PSILI
+\setcclcucx 1F41 1F41 1F49 % GREEK SMALL LETTER OMICRON WITH DASIA
+\setcclcucx 1F42 1F42 1F4A % GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA
+\setcclcucx 1F43 1F43 1F4B % GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA
+\setcclcucx 1F44 1F44 1F4C % GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA
+\setcclcucx 1F45 1F45 1F4D % GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
+\setcclcucx 1F48 1F40 1F48 % GREEK CAPITAL LETTER OMICRON WITH PSILI
+\setcclcucx 1F49 1F41 1F49 % GREEK CAPITAL LETTER OMICRON WITH DASIA
+\setcclcucx 1F4A 1F42 1F4A % GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA
+\setcclcucx 1F4B 1F43 1F4B % GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA
+\setcclcucx 1F4C 1F44 1F4C % GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
+\setcclcucx 1F4D 1F45 1F4D % GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
+\setcclcucx 1F50 1F50 1F50 % GREEK SMALL LETTER UPSILON WITH PSILI
+\setcclcucx 1F51 1F51 1F59 % GREEK SMALL LETTER UPSILON WITH DASIA
+\setcclcucx 1F52 1F52 1F52 % GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
+\setcclcucx 1F53 1F53 1F5B % GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA
+\setcclcucx 1F54 1F54 1F54 % GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
+\setcclcucx 1F55 1F55 1F5D % GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA
+\setcclcucx 1F56 1F56 1F56 % GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
+\setcclcucx 1F57 1F57 1F5F % GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
+\setcclcucx 1F59 1F51 1F59 % GREEK CAPITAL LETTER UPSILON WITH DASIA
+\setcclcucx 1F5B 1F53 1F5B % GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
+\setcclcucx 1F5D 1F55 1F5D % GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
+\setcclcucx 1F5F 1F57 1F5F % GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI
+\setcclcucx 1F60 1F60 1F68 % GREEK SMALL LETTER OMEGA WITH PSILI
+\setcclcucx 1F61 1F61 1F69 % GREEK SMALL LETTER OMEGA WITH DASIA
+\setcclcucx 1F62 1F62 1F6A % GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA
+\setcclcucx 1F63 1F63 1F6B % GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA
+\setcclcucx 1F64 1F64 1F6C % GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA
+\setcclcucx 1F65 1F65 1F6D % GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA
+\setcclcucx 1F66 1F66 1F6E % GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI
+\setcclcucx 1F67 1F67 1F6F % GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
+\setcclcucx 1F68 1F60 1F68 % GREEK CAPITAL LETTER OMEGA WITH PSILI
+\setcclcucx 1F69 1F61 1F69 % GREEK CAPITAL LETTER OMEGA WITH DASIA
+\setcclcucx 1F6A 1F62 1F6A % GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA
+\setcclcucx 1F6B 1F63 1F6B % GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA
+\setcclcucx 1F6C 1F64 1F6C % GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
+\setcclcucx 1F6D 1F65 1F6D % GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
+\setcclcucx 1F6E 1F66 1F6E % GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI
+\setcclcucx 1F6F 1F67 1F6F % GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
+\setcclcucx 1F70 1F70 1FBA % GREEK SMALL LETTER ALPHA WITH VARIA
+\setcclcucx 1F71 1F71 1FBB % GREEK SMALL LETTER ALPHA WITH OXIA
+\setcclcucx 1F72 1F72 1FC8 % GREEK SMALL LETTER EPSILON WITH VARIA
+\setcclcucx 1F73 1F73 1FC9 % GREEK SMALL LETTER EPSILON WITH OXIA
+\setcclcucx 1F74 1F74 1FCA % GREEK SMALL LETTER ETA WITH VARIA
+\setcclcucx 1F75 1F75 1FCB % GREEK SMALL LETTER ETA WITH OXIA
+\setcclcucx 1F76 1F76 1FDA % GREEK SMALL LETTER IOTA WITH VARIA
+\setcclcucx 1F77 1F77 1FDB % GREEK SMALL LETTER IOTA WITH OXIA
+\setcclcucx 1F78 1F78 1FF8 % GREEK SMALL LETTER OMICRON WITH VARIA
+\setcclcucx 1F79 1F79 1FF9 % GREEK SMALL LETTER OMICRON WITH OXIA
+\setcclcucx 1F7A 1F7A 1FEA % GREEK SMALL LETTER UPSILON WITH VARIA
+\setcclcucx 1F7B 1F7B 1FEB % GREEK SMALL LETTER UPSILON WITH OXIA
+\setcclcucx 1F7C 1F7C 1FFA % GREEK SMALL LETTER OMEGA WITH VARIA
+\setcclcucx 1F7D 1F7D 1FFB % GREEK SMALL LETTER OMEGA WITH OXIA
+\setcclcucx 1F80 1F80 1F88 % GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI
+\setcclcucx 1F81 1F81 1F89 % GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI
+\setcclcucx 1F82 1F82 1F8A % GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+\setcclcucx 1F83 1F83 1F8B % GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+\setcclcucx 1F84 1F84 1F8C % GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+\setcclcucx 1F85 1F85 1F8D % GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+\setcclcucx 1F86 1F86 1F8E % GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+\setcclcucx 1F87 1F87 1F8F % GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+\setcclcucx 1F88 1F80 1F88 % GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
+\setcclcucx 1F89 1F81 1F89 % GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
+\setcclcucx 1F8A 1F82 1F8A % GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+\setcclcucx 1F8B 1F83 1F8B % GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+\setcclcucx 1F8C 1F84 1F8C % GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+\setcclcucx 1F8D 1F85 1F8D % GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+\setcclcucx 1F8E 1F86 1F8E % GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+\setcclcucx 1F8F 1F87 1F8F % GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+\setcclcucx 1F90 1F90 1F98 % GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI
+\setcclcucx 1F91 1F91 1F99 % GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI
+\setcclcucx 1F92 1F92 1F9A % GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+\setcclcucx 1F93 1F93 1F9B % GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+\setcclcucx 1F94 1F94 1F9C % GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+\setcclcucx 1F95 1F95 1F9D % GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+\setcclcucx 1F96 1F96 1F9E % GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+\setcclcucx 1F97 1F97 1F9F % GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+\setcclcucx 1F98 1F90 1F98 % GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
+\setcclcucx 1F99 1F91 1F99 % GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
+\setcclcucx 1F9A 1F92 1F9A % GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+\setcclcucx 1F9B 1F93 1F9B % GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+\setcclcucx 1F9C 1F94 1F9C % GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+\setcclcucx 1F9D 1F95 1F9D % GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+\setcclcucx 1F9E 1F96 1F9E % GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+\setcclcucx 1F9F 1F97 1F9F % GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+\setcclcucx 1FA0 1FA0 1FA8 % GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI
+\setcclcucx 1FA1 1FA1 1FA9 % GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI
+\setcclcucx 1FA2 1FA2 1FAA % GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
+\setcclcucx 1FA3 1FA3 1FAB % GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
+\setcclcucx 1FA4 1FA4 1FAC % GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
+\setcclcucx 1FA5 1FA5 1FAD % GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
+\setcclcucx 1FA6 1FA6 1FAE % GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
+\setcclcucx 1FA7 1FA7 1FAF % GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
+\setcclcucx 1FA8 1FA0 1FA8 % GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
+\setcclcucx 1FA9 1FA1 1FA9 % GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
+\setcclcucx 1FAA 1FA2 1FAA % GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
+\setcclcucx 1FAB 1FA3 1FAB % GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
+\setcclcucx 1FAC 1FA4 1FAC % GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
+\setcclcucx 1FAD 1FA5 1FAD % GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
+\setcclcucx 1FAE 1FA6 1FAE % GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
+\setcclcucx 1FAF 1FA7 1FAF % GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
+\setcclcucx 1FB0 1FB0 1FB8 % GREEK SMALL LETTER ALPHA WITH VRACHY
+\setcclcucx 1FB1 1FB1 1FB9 % GREEK SMALL LETTER ALPHA WITH MACRON
+\setcclcucx 1FB2 1FB2 1FB2 % GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
+\setcclcucx 1FB3 1FB3 1FBC % GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI
+\setcclcucx 1FB4 1FB4 1FB4 % GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
+\setcclcucx 1FB6 1FB6 1FB6 % GREEK SMALL LETTER ALPHA WITH PERISPOMENI
+\setcclcucx 1FB7 1FB7 1FB7 % GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
+\setcclcucx 1FB8 1FB0 1FB8 % GREEK CAPITAL LETTER ALPHA WITH VRACHY
+\setcclcucx 1FB9 1FB1 1FB9 % GREEK CAPITAL LETTER ALPHA WITH MACRON
+\setcclcucx 1FBA 1F70 1FBA % GREEK CAPITAL LETTER ALPHA WITH VARIA
+\setcclcucx 1FBB 1F71 1FBB % GREEK CAPITAL LETTER ALPHA WITH OXIA
+\setcclcucx 1FBC 1FB3 1FBC % GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
+\setcclcucx 1FBE 1FBE 0399 % GREEK PROSGEGRAMMENI
+\setcclcucx 1FC2 1FC2 1FC2 % GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
+\setcclcucx 1FC3 1FC3 1FCC % GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI
+\setcclcucx 1FC4 1FC4 1FC4 % GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
+\setcclcucx 1FC6 1FC6 1FC6 % GREEK SMALL LETTER ETA WITH PERISPOMENI
+\setcclcucx 1FC7 1FC7 1FC7 % GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
+\setcclcucx 1FC8 1F72 1FC8 % GREEK CAPITAL LETTER EPSILON WITH VARIA
+\setcclcucx 1FC9 1F73 1FC9 % GREEK CAPITAL LETTER EPSILON WITH OXIA
+\setcclcucx 1FCA 1F74 1FCA % GREEK CAPITAL LETTER ETA WITH VARIA
+\setcclcucx 1FCB 1F75 1FCB % GREEK CAPITAL LETTER ETA WITH OXIA
+\setcclcucx 1FCC 1FC3 1FCC % GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
+\setcclcucx 1FD0 1FD0 1FD8 % GREEK SMALL LETTER IOTA WITH VRACHY
+\setcclcucx 1FD1 1FD1 1FD9 % GREEK SMALL LETTER IOTA WITH MACRON
+\setcclcucx 1FD2 1FD2 1FD2 % GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
+\setcclcucx 1FD3 1FD3 1FD3 % GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+\setcclcucx 1FD6 1FD6 1FD6 % GREEK SMALL LETTER IOTA WITH PERISPOMENI
+\setcclcucx 1FD7 1FD7 1FD7 % GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
+\setcclcucx 1FD8 1FD0 1FD8 % GREEK CAPITAL LETTER IOTA WITH VRACHY
+\setcclcucx 1FD9 1FD1 1FD9 % GREEK CAPITAL LETTER IOTA WITH MACRON
+\setcclcucx 1FDA 1F76 1FDA % GREEK CAPITAL LETTER IOTA WITH VARIA
+\setcclcucx 1FDB 1F77 1FDB % GREEK CAPITAL LETTER IOTA WITH OXIA
+\setcclcucx 1FE0 1FE0 1FE8 % GREEK SMALL LETTER UPSILON WITH VRACHY
+\setcclcucx 1FE1 1FE1 1FE9 % GREEK SMALL LETTER UPSILON WITH MACRON
+\setcclcucx 1FE2 1FE2 1FE2 % GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
+\setcclcucx 1FE3 1FE3 1FE3 % GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA
+\setcclcucx 1FE4 1FE4 1FE4 % GREEK SMALL LETTER RHO WITH PSILI
+\setcclcucx 1FE5 1FE5 1FEC % GREEK SMALL LETTER RHO WITH DASIA
+\setcclcucx 1FE6 1FE6 1FE6 % GREEK SMALL LETTER UPSILON WITH PERISPOMENI
+\setcclcucx 1FE7 1FE7 1FE7 % GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
+\setcclcucx 1FE8 1FE0 1FE8 % GREEK CAPITAL LETTER UPSILON WITH VRACHY
+\setcclcucx 1FE9 1FE1 1FE9 % GREEK CAPITAL LETTER UPSILON WITH MACRON
+\setcclcucx 1FEA 1F7A 1FEA % GREEK CAPITAL LETTER UPSILON WITH VARIA
+\setcclcucx 1FEB 1F7B 1FEB % GREEK CAPITAL LETTER UPSILON WITH OXIA
+\setcclcucx 1FEC 1FE5 1FEC % GREEK CAPITAL LETTER RHO WITH DASIA
+\setcclcucx 1FF2 1FF2 1FF2 % GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
+\setcclcucx 1FF3 1FF3 1FFC % GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI
+\setcclcucx 1FF4 1FF4 1FF4 % GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
+\setcclcucx 1FF6 1FF6 1FF6 % GREEK SMALL LETTER OMEGA WITH PERISPOMENI
+\setcclcucx 1FF7 1FF7 1FF7 % GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
+\setcclcucx 1FF8 1F78 1FF8 % GREEK CAPITAL LETTER OMICRON WITH VARIA
+\setcclcucx 1FF9 1F79 1FF9 % GREEK CAPITAL LETTER OMICRON WITH OXIA
+\setcclcucx 1FFA 1F7C 1FFA % GREEK CAPITAL LETTER OMEGA WITH VARIA
+\setcclcucx 1FFB 1F7D 1FFB % GREEK CAPITAL LETTER OMEGA WITH OXIA
+\setcclcucx 1FFC 1FF3 1FFC % GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
+\setcclcucx 2071 2071 2071 % SUPERSCRIPT LATIN SMALL LETTER I
+\setcclcucx 207F 207F 207F % SUPERSCRIPT LATIN SMALL LETTER N
+\setcclcucx 2102 2102 2102 % DOUBLE-STRUCK CAPITAL C
+\setcclcucx 2107 2107 2107 % EULER CONSTANT
+\setcclcucx 210A 210A 210A % SCRIPT SMALL G
+\setcclcucx 210B 210B 210B % SCRIPT CAPITAL H
+\setcclcucx 210C 210C 210C % BLACK-LETTER CAPITAL H
+\setcclcucx 210D 210D 210D % DOUBLE-STRUCK CAPITAL H
+\setcclcucx 210E 210E 210E % PLANCK CONSTANT
+\setcclcucx 210F 210F 210F % PLANCK CONSTANT OVER TWO PI
+\setcclcucx 2110 2110 2110 % SCRIPT CAPITAL I
+\setcclcucx 2111 2111 2111 % BLACK-LETTER CAPITAL I
+\setcclcucx 2112 2112 2112 % SCRIPT CAPITAL L
+\setcclcucx 2113 2113 2113 % SCRIPT SMALL L
+\setcclcucx 2115 2115 2115 % DOUBLE-STRUCK CAPITAL N
+\setcclcucx 2119 2119 2119 % DOUBLE-STRUCK CAPITAL P
+\setcclcucx 211A 211A 211A % DOUBLE-STRUCK CAPITAL Q
+\setcclcucx 211B 211B 211B % SCRIPT CAPITAL R
+\setcclcucx 211C 211C 211C % BLACK-LETTER CAPITAL R
+\setcclcucx 211D 211D 211D % DOUBLE-STRUCK CAPITAL R
+\setcclcucx 2124 2124 2124 % DOUBLE-STRUCK CAPITAL Z
+\setcclcucx 2126 03C9 2126 % OHM SIGN
+\setcclcucx 2128 2128 2128 % BLACK-LETTER CAPITAL Z
+\setcclcucx 212A 006B 212A % KELVIN SIGN
+\setcclcucx 212B 00E5 212B % ANGSTROM SIGN
+\setcclcucx 212C 212C 212C % SCRIPT CAPITAL B
+\setcclcucx 212D 212D 212D % BLACK-LETTER CAPITAL C
+\setcclcucx 212F 212F 212F % SCRIPT SMALL E
+\setcclcucx 2130 2130 2130 % SCRIPT CAPITAL E
+\setcclcucx 2131 2131 2131 % SCRIPT CAPITAL F
+\setcclcucx 2132 214E 2132 % TURNED CAPITAL F
+\setcclcucx 2133 2133 2133 % SCRIPT CAPITAL M
+\setcclcucx 2134 2134 2134 % SCRIPT SMALL O
+\setcclcucx 2139 2139 2139 % INFORMATION SOURCE
+\setcclcucx 213C 213C 213C % DOUBLE-STRUCK SMALL PI
+\setcclcucx 213D 213D 213D % DOUBLE-STRUCK SMALL GAMMA
+\setcclcucx 213E 213E 213E % DOUBLE-STRUCK CAPITAL GAMMA
+\setcclcucx 213F 213F 213F % DOUBLE-STRUCK CAPITAL PI
+\setcclcucx 2145 2145 2145 % DOUBLE-STRUCK ITALIC CAPITAL D
+\setcclcucx 2146 2146 2146 % DOUBLE-STRUCK ITALIC SMALL D
+\setcclcucx 2147 2147 2147 % DOUBLE-STRUCK ITALIC SMALL E
+\setcclcucx 2148 2148 2148 % DOUBLE-STRUCK ITALIC SMALL I
+\setcclcucx 2149 2149 2149 % DOUBLE-STRUCK ITALIC SMALL J
+\setcclcucx 214E 214E 2132 % TURNED SMALL F
+\setcclcucx 2183 2184 2183 % ROMAN NUMERAL REVERSED ONE HUNDRED
+\setcclcucx 2184 2184 2183 % LATIN SMALL LETTER REVERSED C
+\setcclcucx 2C00 2C30 2C00 % GLAGOLITIC CAPITAL LETTER AZU
+\setcclcucx 2C01 2C31 2C01 % GLAGOLITIC CAPITAL LETTER BUKY
+\setcclcucx 2C02 2C32 2C02 % GLAGOLITIC CAPITAL LETTER VEDE
+\setcclcucx 2C03 2C33 2C03 % GLAGOLITIC CAPITAL LETTER GLAGOLI
+\setcclcucx 2C04 2C34 2C04 % GLAGOLITIC CAPITAL LETTER DOBRO
+\setcclcucx 2C05 2C35 2C05 % GLAGOLITIC CAPITAL LETTER YESTU
+\setcclcucx 2C06 2C36 2C06 % GLAGOLITIC CAPITAL LETTER ZHIVETE
+\setcclcucx 2C07 2C37 2C07 % GLAGOLITIC CAPITAL LETTER DZELO
+\setcclcucx 2C08 2C38 2C08 % GLAGOLITIC CAPITAL LETTER ZEMLJA
+\setcclcucx 2C09 2C39 2C09 % GLAGOLITIC CAPITAL LETTER IZHE
+\setcclcucx 2C0A 2C3A 2C0A % GLAGOLITIC CAPITAL LETTER INITIAL IZHE
+\setcclcucx 2C0B 2C3B 2C0B % GLAGOLITIC CAPITAL LETTER I
+\setcclcucx 2C0C 2C3C 2C0C % GLAGOLITIC CAPITAL LETTER DJERVI
+\setcclcucx 2C0D 2C3D 2C0D % GLAGOLITIC CAPITAL LETTER KAKO
+\setcclcucx 2C0E 2C3E 2C0E % GLAGOLITIC CAPITAL LETTER LJUDIJE
+\setcclcucx 2C0F 2C3F 2C0F % GLAGOLITIC CAPITAL LETTER MYSLITE
+\setcclcucx 2C10 2C40 2C10 % GLAGOLITIC CAPITAL LETTER NASHI
+\setcclcucx 2C11 2C41 2C11 % GLAGOLITIC CAPITAL LETTER ONU
+\setcclcucx 2C12 2C42 2C12 % GLAGOLITIC CAPITAL LETTER POKOJI
+\setcclcucx 2C13 2C43 2C13 % GLAGOLITIC CAPITAL LETTER RITSI
+\setcclcucx 2C14 2C44 2C14 % GLAGOLITIC CAPITAL LETTER SLOVO
+\setcclcucx 2C15 2C45 2C15 % GLAGOLITIC CAPITAL LETTER TVRIDO
+\setcclcucx 2C16 2C46 2C16 % GLAGOLITIC CAPITAL LETTER UKU
+\setcclcucx 2C17 2C47 2C17 % GLAGOLITIC CAPITAL LETTER FRITU
+\setcclcucx 2C18 2C48 2C18 % GLAGOLITIC CAPITAL LETTER HERU
+\setcclcucx 2C19 2C49 2C19 % GLAGOLITIC CAPITAL LETTER OTU
+\setcclcucx 2C1A 2C4A 2C1A % GLAGOLITIC CAPITAL LETTER PE
+\setcclcucx 2C1B 2C4B 2C1B % GLAGOLITIC CAPITAL LETTER SHTA
+\setcclcucx 2C1C 2C4C 2C1C % GLAGOLITIC CAPITAL LETTER TSI
+\setcclcucx 2C1D 2C4D 2C1D % GLAGOLITIC CAPITAL LETTER CHRIVI
+\setcclcucx 2C1E 2C4E 2C1E % GLAGOLITIC CAPITAL LETTER SHA
+\setcclcucx 2C1F 2C4F 2C1F % GLAGOLITIC CAPITAL LETTER YERU
+\setcclcucx 2C20 2C50 2C20 % GLAGOLITIC CAPITAL LETTER YERI
+\setcclcucx 2C21 2C51 2C21 % GLAGOLITIC CAPITAL LETTER YATI
+\setcclcucx 2C22 2C52 2C22 % GLAGOLITIC CAPITAL LETTER SPIDERY HA
+\setcclcucx 2C23 2C53 2C23 % GLAGOLITIC CAPITAL LETTER YU
+\setcclcucx 2C24 2C54 2C24 % GLAGOLITIC CAPITAL LETTER SMALL YUS
+\setcclcucx 2C25 2C55 2C25 % GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL
+\setcclcucx 2C26 2C56 2C26 % GLAGOLITIC CAPITAL LETTER YO
+\setcclcucx 2C27 2C57 2C27 % GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS
+\setcclcucx 2C28 2C58 2C28 % GLAGOLITIC CAPITAL LETTER BIG YUS
+\setcclcucx 2C29 2C59 2C29 % GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS
+\setcclcucx 2C2A 2C5A 2C2A % GLAGOLITIC CAPITAL LETTER FITA
+\setcclcucx 2C2B 2C5B 2C2B % GLAGOLITIC CAPITAL LETTER IZHITSA
+\setcclcucx 2C2C 2C5C 2C2C % GLAGOLITIC CAPITAL LETTER SHTAPIC
+\setcclcucx 2C2D 2C5D 2C2D % GLAGOLITIC CAPITAL LETTER TROKUTASTI A
+\setcclcucx 2C2E 2C5E 2C2E % GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE
+\setcclcucx 2C30 2C30 2C00 % GLAGOLITIC SMALL LETTER AZU
+\setcclcucx 2C31 2C31 2C01 % GLAGOLITIC SMALL LETTER BUKY
+\setcclcucx 2C32 2C32 2C02 % GLAGOLITIC SMALL LETTER VEDE
+\setcclcucx 2C33 2C33 2C03 % GLAGOLITIC SMALL LETTER GLAGOLI
+\setcclcucx 2C34 2C34 2C04 % GLAGOLITIC SMALL LETTER DOBRO
+\setcclcucx 2C35 2C35 2C05 % GLAGOLITIC SMALL LETTER YESTU
+\setcclcucx 2C36 2C36 2C06 % GLAGOLITIC SMALL LETTER ZHIVETE
+\setcclcucx 2C37 2C37 2C07 % GLAGOLITIC SMALL LETTER DZELO
+\setcclcucx 2C38 2C38 2C08 % GLAGOLITIC SMALL LETTER ZEMLJA
+\setcclcucx 2C39 2C39 2C09 % GLAGOLITIC SMALL LETTER IZHE
+\setcclcucx 2C3A 2C3A 2C0A % GLAGOLITIC SMALL LETTER INITIAL IZHE
+\setcclcucx 2C3B 2C3B 2C0B % GLAGOLITIC SMALL LETTER I
+\setcclcucx 2C3C 2C3C 2C0C % GLAGOLITIC SMALL LETTER DJERVI
+\setcclcucx 2C3D 2C3D 2C0D % GLAGOLITIC SMALL LETTER KAKO
+\setcclcucx 2C3E 2C3E 2C0E % GLAGOLITIC SMALL LETTER LJUDIJE
+\setcclcucx 2C3F 2C3F 2C0F % GLAGOLITIC SMALL LETTER MYSLITE
+\setcclcucx 2C40 2C40 2C10 % GLAGOLITIC SMALL LETTER NASHI
+\setcclcucx 2C41 2C41 2C11 % GLAGOLITIC SMALL LETTER ONU
+\setcclcucx 2C42 2C42 2C12 % GLAGOLITIC SMALL LETTER POKOJI
+\setcclcucx 2C43 2C43 2C13 % GLAGOLITIC SMALL LETTER RITSI
+\setcclcucx 2C44 2C44 2C14 % GLAGOLITIC SMALL LETTER SLOVO
+\setcclcucx 2C45 2C45 2C15 % GLAGOLITIC SMALL LETTER TVRIDO
+\setcclcucx 2C46 2C46 2C16 % GLAGOLITIC SMALL LETTER UKU
+\setcclcucx 2C47 2C47 2C17 % GLAGOLITIC SMALL LETTER FRITU
+\setcclcucx 2C48 2C48 2C18 % GLAGOLITIC SMALL LETTER HERU
+\setcclcucx 2C49 2C49 2C19 % GLAGOLITIC SMALL LETTER OTU
+\setcclcucx 2C4A 2C4A 2C1A % GLAGOLITIC SMALL LETTER PE
+\setcclcucx 2C4B 2C4B 2C1B % GLAGOLITIC SMALL LETTER SHTA
+\setcclcucx 2C4C 2C4C 2C1C % GLAGOLITIC SMALL LETTER TSI
+\setcclcucx 2C4D 2C4D 2C1D % GLAGOLITIC SMALL LETTER CHRIVI
+\setcclcucx 2C4E 2C4E 2C1E % GLAGOLITIC SMALL LETTER SHA
+\setcclcucx 2C4F 2C4F 2C1F % GLAGOLITIC SMALL LETTER YERU
+\setcclcucx 2C50 2C50 2C20 % GLAGOLITIC SMALL LETTER YERI
+\setcclcucx 2C51 2C51 2C21 % GLAGOLITIC SMALL LETTER YATI
+\setcclcucx 2C52 2C52 2C22 % GLAGOLITIC SMALL LETTER SPIDERY HA
+\setcclcucx 2C53 2C53 2C23 % GLAGOLITIC SMALL LETTER YU
+\setcclcucx 2C54 2C54 2C24 % GLAGOLITIC SMALL LETTER SMALL YUS
+\setcclcucx 2C55 2C55 2C25 % GLAGOLITIC SMALL LETTER SMALL YUS WITH TAIL
+\setcclcucx 2C56 2C56 2C26 % GLAGOLITIC SMALL LETTER YO
+\setcclcucx 2C57 2C57 2C27 % GLAGOLITIC SMALL LETTER IOTATED SMALL YUS
+\setcclcucx 2C58 2C58 2C28 % GLAGOLITIC SMALL LETTER BIG YUS
+\setcclcucx 2C59 2C59 2C29 % GLAGOLITIC SMALL LETTER IOTATED BIG YUS
+\setcclcucx 2C5A 2C5A 2C2A % GLAGOLITIC SMALL LETTER FITA
+\setcclcucx 2C5B 2C5B 2C2B % GLAGOLITIC SMALL LETTER IZHITSA
+\setcclcucx 2C5C 2C5C 2C2C % GLAGOLITIC SMALL LETTER SHTAPIC
+\setcclcucx 2C5D 2C5D 2C2D % GLAGOLITIC SMALL LETTER TROKUTASTI A
+\setcclcucx 2C5E 2C5E 2C2E % GLAGOLITIC SMALL LETTER LATINATE MYSLITE
+\setcclcucx 2C60 2C61 2C60 % LATIN CAPITAL LETTER L WITH DOUBLE BAR
+\setcclcucx 2C61 2C61 2C60 % LATIN SMALL LETTER L WITH DOUBLE BAR
+\setcclcucx 2C62 026B 2C62 % LATIN CAPITAL LETTER L WITH MIDDLE TILDE
+\setcclcucx 2C63 1D7D 2C63 % LATIN CAPITAL LETTER P WITH STROKE
+\setcclcucx 2C64 027D 2C64 % LATIN CAPITAL LETTER R WITH TAIL
+\setcclcucx 2C65 2C65 023A % LATIN SMALL LETTER A WITH STROKE
+\setcclcucx 2C66 2C66 023E % LATIN SMALL LETTER T WITH DIAGONAL STROKE
+\setcclcucx 2C67 2C68 2C67 % LATIN CAPITAL LETTER H WITH DESCENDER
+\setcclcucx 2C68 2C68 2C67 % LATIN SMALL LETTER H WITH DESCENDER
+\setcclcucx 2C69 2C6A 2C69 % LATIN CAPITAL LETTER K WITH DESCENDER
+\setcclcucx 2C6A 2C6A 2C69 % LATIN SMALL LETTER K WITH DESCENDER
+\setcclcucx 2C6B 2C6C 2C6B % LATIN CAPITAL LETTER Z WITH DESCENDER
+\setcclcucx 2C6C 2C6C 2C6B % LATIN SMALL LETTER Z WITH DESCENDER
+\setcclcucx 2C74 2C74 2C74 % LATIN SMALL LETTER V WITH CURL
+\setcclcucx 2C75 2C76 2C75 % LATIN CAPITAL LETTER HALF H
+\setcclcucx 2C76 2C76 2C75 % LATIN SMALL LETTER HALF H
+\setcclcucx 2C77 2C77 2C77 % LATIN SMALL LETTER TAILLESS PHI
+\setcclcucx 2C80 2C81 2C80 % COPTIC CAPITAL LETTER ALFA
+\setcclcucx 2C81 2C81 2C80 % COPTIC SMALL LETTER ALFA
+\setcclcucx 2C82 2C83 2C82 % COPTIC CAPITAL LETTER VIDA
+\setcclcucx 2C83 2C83 2C82 % COPTIC SMALL LETTER VIDA
+\setcclcucx 2C84 2C85 2C84 % COPTIC CAPITAL LETTER GAMMA
+\setcclcucx 2C85 2C85 2C84 % COPTIC SMALL LETTER GAMMA
+\setcclcucx 2C86 2C87 2C86 % COPTIC CAPITAL LETTER DALDA
+\setcclcucx 2C87 2C87 2C86 % COPTIC SMALL LETTER DALDA
+\setcclcucx 2C88 2C89 2C88 % COPTIC CAPITAL LETTER EIE
+\setcclcucx 2C89 2C89 2C88 % COPTIC SMALL LETTER EIE
+\setcclcucx 2C8A 2C8B 2C8A % COPTIC CAPITAL LETTER SOU
+\setcclcucx 2C8B 2C8B 2C8A % COPTIC SMALL LETTER SOU
+\setcclcucx 2C8C 2C8D 2C8C % COPTIC CAPITAL LETTER ZATA
+\setcclcucx 2C8D 2C8D 2C8C % COPTIC SMALL LETTER ZATA
+\setcclcucx 2C8E 2C8F 2C8E % COPTIC CAPITAL LETTER HATE
+\setcclcucx 2C8F 2C8F 2C8E % COPTIC SMALL LETTER HATE
+\setcclcucx 2C90 2C91 2C90 % COPTIC CAPITAL LETTER THETHE
+\setcclcucx 2C91 2C91 2C90 % COPTIC SMALL LETTER THETHE
+\setcclcucx 2C92 2C93 2C92 % COPTIC CAPITAL LETTER IAUDA
+\setcclcucx 2C93 2C93 2C92 % COPTIC SMALL LETTER IAUDA
+\setcclcucx 2C94 2C95 2C94 % COPTIC CAPITAL LETTER KAPA
+\setcclcucx 2C95 2C95 2C94 % COPTIC SMALL LETTER KAPA
+\setcclcucx 2C96 2C97 2C96 % COPTIC CAPITAL LETTER LAULA
+\setcclcucx 2C97 2C97 2C96 % COPTIC SMALL LETTER LAULA
+\setcclcucx 2C98 2C99 2C98 % COPTIC CAPITAL LETTER MI
+\setcclcucx 2C99 2C99 2C98 % COPTIC SMALL LETTER MI
+\setcclcucx 2C9A 2C9B 2C9A % COPTIC CAPITAL LETTER NI
+\setcclcucx 2C9B 2C9B 2C9A % COPTIC SMALL LETTER NI
+\setcclcucx 2C9C 2C9D 2C9C % COPTIC CAPITAL LETTER KSI
+\setcclcucx 2C9D 2C9D 2C9C % COPTIC SMALL LETTER KSI
+\setcclcucx 2C9E 2C9F 2C9E % COPTIC CAPITAL LETTER O
+\setcclcucx 2C9F 2C9F 2C9E % COPTIC SMALL LETTER O
+\setcclcucx 2CA0 2CA1 2CA0 % COPTIC CAPITAL LETTER PI
+\setcclcucx 2CA1 2CA1 2CA0 % COPTIC SMALL LETTER PI
+\setcclcucx 2CA2 2CA3 2CA2 % COPTIC CAPITAL LETTER RO
+\setcclcucx 2CA3 2CA3 2CA2 % COPTIC SMALL LETTER RO
+\setcclcucx 2CA4 2CA5 2CA4 % COPTIC CAPITAL LETTER SIMA
+\setcclcucx 2CA5 2CA5 2CA4 % COPTIC SMALL LETTER SIMA
+\setcclcucx 2CA6 2CA7 2CA6 % COPTIC CAPITAL LETTER TAU
+\setcclcucx 2CA7 2CA7 2CA6 % COPTIC SMALL LETTER TAU
+\setcclcucx 2CA8 2CA9 2CA8 % COPTIC CAPITAL LETTER UA
+\setcclcucx 2CA9 2CA9 2CA8 % COPTIC SMALL LETTER UA
+\setcclcucx 2CAA 2CAB 2CAA % COPTIC CAPITAL LETTER FI
+\setcclcucx 2CAB 2CAB 2CAA % COPTIC SMALL LETTER FI
+\setcclcucx 2CAC 2CAD 2CAC % COPTIC CAPITAL LETTER KHI
+\setcclcucx 2CAD 2CAD 2CAC % COPTIC SMALL LETTER KHI
+\setcclcucx 2CAE 2CAF 2CAE % COPTIC CAPITAL LETTER PSI
+\setcclcucx 2CAF 2CAF 2CAE % COPTIC SMALL LETTER PSI
+\setcclcucx 2CB0 2CB1 2CB0 % COPTIC CAPITAL LETTER OOU
+\setcclcucx 2CB1 2CB1 2CB0 % COPTIC SMALL LETTER OOU
+\setcclcucx 2CB2 2CB3 2CB2 % COPTIC CAPITAL LETTER DIALECT-P ALEF
+\setcclcucx 2CB3 2CB3 2CB2 % COPTIC SMALL LETTER DIALECT-P ALEF
+\setcclcucx 2CB4 2CB5 2CB4 % COPTIC CAPITAL LETTER OLD COPTIC AIN
+\setcclcucx 2CB5 2CB5 2CB4 % COPTIC SMALL LETTER OLD COPTIC AIN
+\setcclcucx 2CB6 2CB7 2CB6 % COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE
+\setcclcucx 2CB7 2CB7 2CB6 % COPTIC SMALL LETTER CRYPTOGRAMMIC EIE
+\setcclcucx 2CB8 2CB9 2CB8 % COPTIC CAPITAL LETTER DIALECT-P KAPA
+\setcclcucx 2CB9 2CB9 2CB8 % COPTIC SMALL LETTER DIALECT-P KAPA
+\setcclcucx 2CBA 2CBB 2CBA % COPTIC CAPITAL LETTER DIALECT-P NI
+\setcclcucx 2CBB 2CBB 2CBA % COPTIC SMALL LETTER DIALECT-P NI
+\setcclcucx 2CBC 2CBD 2CBC % COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI
+\setcclcucx 2CBD 2CBD 2CBC % COPTIC SMALL LETTER CRYPTOGRAMMIC NI
+\setcclcucx 2CBE 2CBF 2CBE % COPTIC CAPITAL LETTER OLD COPTIC OOU
+\setcclcucx 2CBF 2CBF 2CBE % COPTIC SMALL LETTER OLD COPTIC OOU
+\setcclcucx 2CC0 2CC1 2CC0 % COPTIC CAPITAL LETTER SAMPI
+\setcclcucx 2CC1 2CC1 2CC0 % COPTIC SMALL LETTER SAMPI
+\setcclcucx 2CC2 2CC3 2CC2 % COPTIC CAPITAL LETTER CROSSED SHEI
+\setcclcucx 2CC3 2CC3 2CC2 % COPTIC SMALL LETTER CROSSED SHEI
+\setcclcucx 2CC4 2CC5 2CC4 % COPTIC CAPITAL LETTER OLD COPTIC SHEI
+\setcclcucx 2CC5 2CC5 2CC4 % COPTIC SMALL LETTER OLD COPTIC SHEI
+\setcclcucx 2CC6 2CC7 2CC6 % COPTIC CAPITAL LETTER OLD COPTIC ESH
+\setcclcucx 2CC7 2CC7 2CC6 % COPTIC SMALL LETTER OLD COPTIC ESH
+\setcclcucx 2CC8 2CC9 2CC8 % COPTIC CAPITAL LETTER AKHMIMIC KHEI
+\setcclcucx 2CC9 2CC9 2CC8 % COPTIC SMALL LETTER AKHMIMIC KHEI
+\setcclcucx 2CCA 2CCB 2CCA % COPTIC CAPITAL LETTER DIALECT-P HORI
+\setcclcucx 2CCB 2CCB 2CCA % COPTIC SMALL LETTER DIALECT-P HORI
+\setcclcucx 2CCC 2CCD 2CCC % COPTIC CAPITAL LETTER OLD COPTIC HORI
+\setcclcucx 2CCD 2CCD 2CCC % COPTIC SMALL LETTER OLD COPTIC HORI
+\setcclcucx 2CCE 2CCF 2CCE % COPTIC CAPITAL LETTER OLD COPTIC HA
+\setcclcucx 2CCF 2CCF 2CCE % COPTIC SMALL LETTER OLD COPTIC HA
+\setcclcucx 2CD0 2CD1 2CD0 % COPTIC CAPITAL LETTER L-SHAPED HA
+\setcclcucx 2CD1 2CD1 2CD0 % COPTIC SMALL LETTER L-SHAPED HA
+\setcclcucx 2CD2 2CD3 2CD2 % COPTIC CAPITAL LETTER OLD COPTIC HEI
+\setcclcucx 2CD3 2CD3 2CD2 % COPTIC SMALL LETTER OLD COPTIC HEI
+\setcclcucx 2CD4 2CD5 2CD4 % COPTIC CAPITAL LETTER OLD COPTIC HAT
+\setcclcucx 2CD5 2CD5 2CD4 % COPTIC SMALL LETTER OLD COPTIC HAT
+\setcclcucx 2CD6 2CD7 2CD6 % COPTIC CAPITAL LETTER OLD COPTIC GANGIA
+\setcclcucx 2CD7 2CD7 2CD6 % COPTIC SMALL LETTER OLD COPTIC GANGIA
+\setcclcucx 2CD8 2CD9 2CD8 % COPTIC CAPITAL LETTER OLD COPTIC DJA
+\setcclcucx 2CD9 2CD9 2CD8 % COPTIC SMALL LETTER OLD COPTIC DJA
+\setcclcucx 2CDA 2CDB 2CDA % COPTIC CAPITAL LETTER OLD COPTIC SHIMA
+\setcclcucx 2CDB 2CDB 2CDA % COPTIC SMALL LETTER OLD COPTIC SHIMA
+\setcclcucx 2CDC 2CDD 2CDC % COPTIC CAPITAL LETTER OLD NUBIAN SHIMA
+\setcclcucx 2CDD 2CDD 2CDC % COPTIC SMALL LETTER OLD NUBIAN SHIMA
+\setcclcucx 2CDE 2CDF 2CDE % COPTIC CAPITAL LETTER OLD NUBIAN NGI
+\setcclcucx 2CDF 2CDF 2CDE % COPTIC SMALL LETTER OLD NUBIAN NGI
+\setcclcucx 2CE0 2CE1 2CE0 % COPTIC CAPITAL LETTER OLD NUBIAN NYI
+\setcclcucx 2CE1 2CE1 2CE0 % COPTIC SMALL LETTER OLD NUBIAN NYI
+\setcclcucx 2CE2 2CE3 2CE2 % COPTIC CAPITAL LETTER OLD NUBIAN WAU
+\setcclcucx 2CE3 2CE3 2CE2 % COPTIC SMALL LETTER OLD NUBIAN WAU
+\setcclcucx 2CE4 2CE4 2CE4 % COPTIC SYMBOL KAI
+\setcclcucx 2D00 2D00 10A0 % GEORGIAN SMALL LETTER AN
+\setcclcucx 2D01 2D01 10A1 % GEORGIAN SMALL LETTER BAN
+\setcclcucx 2D02 2D02 10A2 % GEORGIAN SMALL LETTER GAN
+\setcclcucx 2D03 2D03 10A3 % GEORGIAN SMALL LETTER DON
+\setcclcucx 2D04 2D04 10A4 % GEORGIAN SMALL LETTER EN
+\setcclcucx 2D05 2D05 10A5 % GEORGIAN SMALL LETTER VIN
+\setcclcucx 2D06 2D06 10A6 % GEORGIAN SMALL LETTER ZEN
+\setcclcucx 2D07 2D07 10A7 % GEORGIAN SMALL LETTER TAN
+\setcclcucx 2D08 2D08 10A8 % GEORGIAN SMALL LETTER IN
+\setcclcucx 2D09 2D09 10A9 % GEORGIAN SMALL LETTER KAN
+\setcclcucx 2D0A 2D0A 10AA % GEORGIAN SMALL LETTER LAS
+\setcclcucx 2D0B 2D0B 10AB % GEORGIAN SMALL LETTER MAN
+\setcclcucx 2D0C 2D0C 10AC % GEORGIAN SMALL LETTER NAR
+\setcclcucx 2D0D 2D0D 10AD % GEORGIAN SMALL LETTER ON
+\setcclcucx 2D0E 2D0E 10AE % GEORGIAN SMALL LETTER PAR
+\setcclcucx 2D0F 2D0F 10AF % GEORGIAN SMALL LETTER ZHAR
+\setcclcucx 2D10 2D10 10B0 % GEORGIAN SMALL LETTER RAE
+\setcclcucx 2D11 2D11 10B1 % GEORGIAN SMALL LETTER SAN
+\setcclcucx 2D12 2D12 10B2 % GEORGIAN SMALL LETTER TAR
+\setcclcucx 2D13 2D13 10B3 % GEORGIAN SMALL LETTER UN
+\setcclcucx 2D14 2D14 10B4 % GEORGIAN SMALL LETTER PHAR
+\setcclcucx 2D15 2D15 10B5 % GEORGIAN SMALL LETTER KHAR
+\setcclcucx 2D16 2D16 10B6 % GEORGIAN SMALL LETTER GHAN
+\setcclcucx 2D17 2D17 10B7 % GEORGIAN SMALL LETTER QAR
+\setcclcucx 2D18 2D18 10B8 % GEORGIAN SMALL LETTER SHIN
+\setcclcucx 2D19 2D19 10B9 % GEORGIAN SMALL LETTER CHIN
+\setcclcucx 2D1A 2D1A 10BA % GEORGIAN SMALL LETTER CAN
+\setcclcucx 2D1B 2D1B 10BB % GEORGIAN SMALL LETTER JIL
+\setcclcucx 2D1C 2D1C 10BC % GEORGIAN SMALL LETTER CIL
+\setcclcucx 2D1D 2D1D 10BD % GEORGIAN SMALL LETTER CHAR
+\setcclcucx 2D1E 2D1E 10BE % GEORGIAN SMALL LETTER XAN
+\setcclcucx 2D1F 2D1F 10BF % GEORGIAN SMALL LETTER JHAN
+\setcclcucx 2D20 2D20 10C0 % GEORGIAN SMALL LETTER HAE
+\setcclcucx 2D21 2D21 10C1 % GEORGIAN SMALL LETTER HE
+\setcclcucx 2D22 2D22 10C2 % GEORGIAN SMALL LETTER HIE
+\setcclcucx 2D23 2D23 10C3 % GEORGIAN SMALL LETTER WE
+\setcclcucx 2D24 2D24 10C4 % GEORGIAN SMALL LETTER HAR
+\setcclcucx 2D25 2D25 10C5 % GEORGIAN SMALL LETTER HOE
+\setcclcucx FB00 FB00 FB00 % LATIN SMALL LIGATURE FF
+\setcclcucx FB01 FB01 FB01 % LATIN SMALL LIGATURE FI
+\setcclcucx FB02 FB02 FB02 % LATIN SMALL LIGATURE FL
+\setcclcucx FB03 FB03 FB03 % LATIN SMALL LIGATURE FFI
+\setcclcucx FB04 FB04 FB04 % LATIN SMALL LIGATURE FFL
+\setcclcucx FB05 FB05 FB05 % LATIN SMALL LIGATURE LONG S T
+\setcclcucx FB06 FB06 FB06 % LATIN SMALL LIGATURE ST
+\setcclcucx FB13 FB13 FB13 % ARMENIAN SMALL LIGATURE MEN NOW
+\setcclcucx FB14 FB14 FB14 % ARMENIAN SMALL LIGATURE MEN ECH
+\setcclcucx FB15 FB15 FB15 % ARMENIAN SMALL LIGATURE MEN INI
+\setcclcucx FB16 FB16 FB16 % ARMENIAN SMALL LIGATURE VEW NOW
+\setcclcucx FB17 FB17 FB17 % ARMENIAN SMALL LIGATURE MEN XEH
+\setcclcucx FF21 FF41 FF21 % FULLWIDTH LATIN CAPITAL LETTER A
+\setcclcucx FF22 FF42 FF22 % FULLWIDTH LATIN CAPITAL LETTER B
+\setcclcucx FF23 FF43 FF23 % FULLWIDTH LATIN CAPITAL LETTER C
+\setcclcucx FF24 FF44 FF24 % FULLWIDTH LATIN CAPITAL LETTER D
+\setcclcucx FF25 FF45 FF25 % FULLWIDTH LATIN CAPITAL LETTER E
+\setcclcucx FF26 FF46 FF26 % FULLWIDTH LATIN CAPITAL LETTER F
+\setcclcucx FF27 FF47 FF27 % FULLWIDTH LATIN CAPITAL LETTER G
+\setcclcucx FF28 FF48 FF28 % FULLWIDTH LATIN CAPITAL LETTER H
+\setcclcucx FF29 FF49 FF29 % FULLWIDTH LATIN CAPITAL LETTER I
+\setcclcucx FF2A FF4A FF2A % FULLWIDTH LATIN CAPITAL LETTER J
+\setcclcucx FF2B FF4B FF2B % FULLWIDTH LATIN CAPITAL LETTER K
+\setcclcucx FF2C FF4C FF2C % FULLWIDTH LATIN CAPITAL LETTER L
+\setcclcucx FF2D FF4D FF2D % FULLWIDTH LATIN CAPITAL LETTER M
+\setcclcucx FF2E FF4E FF2E % FULLWIDTH LATIN CAPITAL LETTER N
+\setcclcucx FF2F FF4F FF2F % FULLWIDTH LATIN CAPITAL LETTER O
+\setcclcucx FF30 FF50 FF30 % FULLWIDTH LATIN CAPITAL LETTER P
+\setcclcucx FF31 FF51 FF31 % FULLWIDTH LATIN CAPITAL LETTER Q
+\setcclcucx FF32 FF52 FF32 % FULLWIDTH LATIN CAPITAL LETTER R
+\setcclcucx FF33 FF53 FF33 % FULLWIDTH LATIN CAPITAL LETTER S
+\setcclcucx FF34 FF54 FF34 % FULLWIDTH LATIN CAPITAL LETTER T
+\setcclcucx FF35 FF55 FF35 % FULLWIDTH LATIN CAPITAL LETTER U
+\setcclcucx FF36 FF56 FF36 % FULLWIDTH LATIN CAPITAL LETTER V
+\setcclcucx FF37 FF57 FF37 % FULLWIDTH LATIN CAPITAL LETTER W
+\setcclcucx FF38 FF58 FF38 % FULLWIDTH LATIN CAPITAL LETTER X
+\setcclcucx FF39 FF59 FF39 % FULLWIDTH LATIN CAPITAL LETTER Y
+\setcclcucx FF3A FF5A FF3A % FULLWIDTH LATIN CAPITAL LETTER Z
+\setcclcucx FF41 FF41 FF21 % FULLWIDTH LATIN SMALL LETTER A
+\setcclcucx FF42 FF42 FF22 % FULLWIDTH LATIN SMALL LETTER B
+\setcclcucx FF43 FF43 FF23 % FULLWIDTH LATIN SMALL LETTER C
+\setcclcucx FF44 FF44 FF24 % FULLWIDTH LATIN SMALL LETTER D
+\setcclcucx FF45 FF45 FF25 % FULLWIDTH LATIN SMALL LETTER E
+\setcclcucx FF46 FF46 FF26 % FULLWIDTH LATIN SMALL LETTER F
+\setcclcucx FF47 FF47 FF27 % FULLWIDTH LATIN SMALL LETTER G
+\setcclcucx FF48 FF48 FF28 % FULLWIDTH LATIN SMALL LETTER H
+\setcclcucx FF49 FF49 FF29 % FULLWIDTH LATIN SMALL LETTER I
+\setcclcucx FF4A FF4A FF2A % FULLWIDTH LATIN SMALL LETTER J
+\setcclcucx FF4B FF4B FF2B % FULLWIDTH LATIN SMALL LETTER K
+\setcclcucx FF4C FF4C FF2C % FULLWIDTH LATIN SMALL LETTER L
+\setcclcucx FF4D FF4D FF2D % FULLWIDTH LATIN SMALL LETTER M
+\setcclcucx FF4E FF4E FF2E % FULLWIDTH LATIN SMALL LETTER N
+\setcclcucx FF4F FF4F FF2F % FULLWIDTH LATIN SMALL LETTER O
+\setcclcucx FF50 FF50 FF30 % FULLWIDTH LATIN SMALL LETTER P
+\setcclcucx FF51 FF51 FF31 % FULLWIDTH LATIN SMALL LETTER Q
+\setcclcucx FF52 FF52 FF32 % FULLWIDTH LATIN SMALL LETTER R
+\setcclcucx FF53 FF53 FF33 % FULLWIDTH LATIN SMALL LETTER S
+\setcclcucx FF54 FF54 FF34 % FULLWIDTH LATIN SMALL LETTER T
+\setcclcucx FF55 FF55 FF35 % FULLWIDTH LATIN SMALL LETTER U
+\setcclcucx FF56 FF56 FF36 % FULLWIDTH LATIN SMALL LETTER V
+\setcclcucx FF57 FF57 FF37 % FULLWIDTH LATIN SMALL LETTER W
+\setcclcucx FF58 FF58 FF38 % FULLWIDTH LATIN SMALL LETTER X
+\setcclcucx FF59 FF59 FF39 % FULLWIDTH LATIN SMALL LETTER Y
+\setcclcucx FF5A FF5A FF3A % FULLWIDTH LATIN SMALL LETTER Z
+
+% named characters mapped onto utf (\\char is needed for accents)
+
+\def\textbackslash {\char"005C } % REVERSE SOLIDUS: \
+\def\textasciicircum {\char"005E } % CIRCUMFLEX ACCENT: ^
+\def\textunderscore {\char"005F } % LOW LINE: _
+\def\textgrave {\char"0060 } % GRAVE ACCENT: `
+\def\textbraceleft {\char"007B } % LEFT CURLY BRACKET: {
+\def\textbar {\char"007C } % VERTICAL LINE: |
+\def\textbraceright {\char"007D } % RIGHT CURLY BRACKET: }
+\def\textasciitilde {\char"007E } % TILDE: ~
+\def\nonbreakablespace {\char"00A0 } % NO-BREAK SPACE:  
+\def\exclamdown {\char"00A1 } % INVERTED EXCLAMATION MARK: ¡
+\def\textcent {\char"00A2 } % CENT SIGN: ¢
+\def\textsterling {\char"00A3 } % POUND SIGN: £
+\def\textcurrency {\char"00A4 } % CURRENCY SIGN: ¤
+\def\textyen {\char"00A5 } % YEN SIGN: ¥
+\def\textbrokenbar {\char"00A6 } % BROKEN BAR: ¦
+\def\sectionmark {\char"00A7 } % SECTION SIGN: §
+\def\textdiaeresis {\char"00A8 } % DIAERESIS: ¨
+\def\copyright {\char"00A9 } % COPYRIGHT SIGN: ©
+\def\ordfeminine {\char"00AA } % FEMININE ORDINAL INDICATOR: ª
+\def\leftguillemot {\char"00AB } % LEFT-POINTING DOUBLE ANGLE QUOTATION MARK: «
+\def\textlognot {\char"00AC } % NOT SIGN: ¬
+\def\softhyphen {\char"00AD } % SOFT HYPHEN: ­
+\def\registered {\char"00AE } % REGISTERED SIGN: ®
+\def\textmacron {\char"00AF } % MACRON: ¯
+\def\textdegree {\char"00B0 } % DEGREE SIGN: °
+\def\textpm {\char"00B1 } % PLUS-MINUS SIGN: ±
+\def\twosuperior {\char"00B2 } % SUPERSCRIPT TWO: ²
+\def\threesuperior {\char"00B3 } % SUPERSCRIPT THREE: ³
+\def\textacute {\char"00B4 } % ACUTE ACCENT: ´
+\def\textmu {\char"00B5 } % MICRO SIGN: µ
+\def\paragraphmark {\char"00B6 } % PILCROW SIGN: ¶
+\def\periodcentered {\char"00B7 } % MIDDLE DOT: ·
+\def\textcedilla {\char"00B8 } % CEDILLA: ¸
+\def\onesuperior {\char"00B9 } % SUPERSCRIPT ONE: ¹
+\def\ordmasculine {\char"00BA } % MASCULINE ORDINAL INDICATOR: º
+\def\rightguillemot {\char"00BB } % RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK: »
+\def\onequarter {\char"00BC } % VULGAR FRACTION ONE QUARTER: ¼
+\def\onehalf {\char"00BD } % VULGAR FRACTION ONE HALF: ½
+\def\threequarter {\char"00BE } % VULGAR FRACTION THREE QUARTERS: ¾
+\def\questiondown {\char"00BF } % INVERTED QUESTION MARK: ¿
+\def\Agrave {\char"00C0 } % LATIN CAPITAL LETTER A WITH GRAVE: À
+\def\Aacute {\char"00C1 } % LATIN CAPITAL LETTER A WITH ACUTE: Ã
+\def\Acircumflex {\char"00C2 } % LATIN CAPITAL LETTER A WITH CIRCUMFLEX: Â
+\def\Atilde {\char"00C3 } % LATIN CAPITAL LETTER A WITH TILDE: Ã
+\def\Adiaeresis {\char"00C4 } % LATIN CAPITAL LETTER A WITH DIAERESIS: Ä
+\def\Aring {\char"00C5 } % LATIN CAPITAL LETTER A WITH RING ABOVE: Ã…
+\def\AEligature {\char"00C6 } % LATIN CAPITAL LETTER AE: Æ
+\def\Ccedilla {\char"00C7 } % LATIN CAPITAL LETTER C WITH CEDILLA: Ç
+\def\Egrave {\char"00C8 } % LATIN CAPITAL LETTER E WITH GRAVE: È
+\def\Eacute {\char"00C9 } % LATIN CAPITAL LETTER E WITH ACUTE: É
+\def\Ecircumflex {\char"00CA } % LATIN CAPITAL LETTER E WITH CIRCUMFLEX: Ê
+\def\Ediaeresis {\char"00CB } % LATIN CAPITAL LETTER E WITH DIAERESIS: Ë
+\def\Igrave {\char"00CC } % LATIN CAPITAL LETTER I WITH GRAVE: Ì
+\def\Iacute {\char"00CD } % LATIN CAPITAL LETTER I WITH ACUTE: Ã
+\def\Icircumflex {\char"00CE } % LATIN CAPITAL LETTER I WITH CIRCUMFLEX: ÃŽ
+\def\Idiaeresis {\char"00CF } % LATIN CAPITAL LETTER I WITH DIAERESIS: Ã
+\def\Eth {\char"00D0 } % LATIN CAPITAL LETTER ETH: Ã
+\def\Ntilde {\char"00D1 } % LATIN CAPITAL LETTER N WITH TILDE: Ñ
+\def\Ograve {\char"00D2 } % LATIN CAPITAL LETTER O WITH GRAVE: Ã’
+\def\Oacute {\char"00D3 } % LATIN CAPITAL LETTER O WITH ACUTE: Ó
+\def\Ocircumflex {\char"00D4 } % LATIN CAPITAL LETTER O WITH CIRCUMFLEX: Ô
+\def\Otilde {\char"00D5 } % LATIN CAPITAL LETTER O WITH TILDE: Õ
+\def\Odiaeresis {\char"00D6 } % LATIN CAPITAL LETTER O WITH DIAERESIS: Ö
+\def\textmultiply {\char"00D7 } % MULTIPLICATION SIGN: ×
+\def\Ostroke {\char"00D8 } % LATIN CAPITAL LETTER O WITH STROKE: Ø
+\def\Ugrave {\char"00D9 } % LATIN CAPITAL LETTER U WITH GRAVE: Ù
+\def\Uacute {\char"00DA } % LATIN CAPITAL LETTER U WITH ACUTE: Ú
+\def\Ucircumflex {\char"00DB } % LATIN CAPITAL LETTER U WITH CIRCUMFLEX: Û
+\def\Udiaeresis {\char"00DC } % LATIN CAPITAL LETTER U WITH DIAERESIS: Ü
+\def\Yacute {\char"00DD } % LATIN CAPITAL LETTER Y WITH ACUTE: Ã
+\def\Thorn {\char"00DE } % LATIN CAPITAL LETTER THORN: Þ
+\def\ssharp {\char"00DF } % LATIN SMALL LETTER SHARP S: ß
+\def\agrave {\char"00E0 } % LATIN SMALL LETTER A WITH GRAVE: à
+\def\aacute {\char"00E1 } % LATIN SMALL LETTER A WITH ACUTE: á
+\def\acircumflex {\char"00E2 } % LATIN SMALL LETTER A WITH CIRCUMFLEX: â
+\def\atilde {\char"00E3 } % LATIN SMALL LETTER A WITH TILDE: ã
+\def\adiaeresis {\char"00E4 } % LATIN SMALL LETTER A WITH DIAERESIS: ä
+\def\aring {\char"00E5 } % LATIN SMALL LETTER A WITH RING ABOVE: å
+\def\aeligature {\char"00E6 } % LATIN SMALL LETTER AE: æ
+\def\ccedilla {\char"00E7 } % LATIN SMALL LETTER C WITH CEDILLA: ç
+\def\egrave {\char"00E8 } % LATIN SMALL LETTER E WITH GRAVE: è
+\def\eacute {\char"00E9 } % LATIN SMALL LETTER E WITH ACUTE: é
+\def\ecircumflex {\char"00EA } % LATIN SMALL LETTER E WITH CIRCUMFLEX: ê
+\def\ediaeresis {\char"00EB } % LATIN SMALL LETTER E WITH DIAERESIS: ë
+\def\igrave {\char"00EC } % LATIN SMALL LETTER I WITH GRAVE: ì
+\def\iacute {\char"00ED } % LATIN SMALL LETTER I WITH ACUTE: í
+\def\icircumflex {\char"00EE } % LATIN SMALL LETTER I WITH CIRCUMFLEX: î
+\def\idiaeresis {\char"00EF } % LATIN SMALL LETTER I WITH DIAERESIS: ï
+\def\eth {\char"00F0 } % LATIN SMALL LETTER ETH: ð
+\def\ntilde {\char"00F1 } % LATIN SMALL LETTER N WITH TILDE: ñ
+\def\ograve {\char"00F2 } % LATIN SMALL LETTER O WITH GRAVE: ò
+\def\oacute {\char"00F3 } % LATIN SMALL LETTER O WITH ACUTE: ó
+\def\ocircumflex {\char"00F4 } % LATIN SMALL LETTER O WITH CIRCUMFLEX: ô
+\def\otilde {\char"00F5 } % LATIN SMALL LETTER O WITH TILDE: õ
+\def\odiaeresis {\char"00F6 } % LATIN SMALL LETTER O WITH DIAERESIS: ö
+\def\textdiv {\char"00F7 } % DIVISION SIGN: ÷
+\def\ostroke {\char"00F8 } % LATIN SMALL LETTER O WITH STROKE: ø
+\def\ugrave {\char"00F9 } % LATIN SMALL LETTER U WITH GRAVE: ù
+\def\uacute {\char"00FA } % LATIN SMALL LETTER U WITH ACUTE: ú
+\def\ucircumflex {\char"00FB } % LATIN SMALL LETTER U WITH CIRCUMFLEX: û
+\def\udiaeresis {\char"00FC } % LATIN SMALL LETTER U WITH DIAERESIS: ü
+\def\yacute {\char"00FD } % LATIN SMALL LETTER Y WITH ACUTE: ý
+\def\thorn {\char"00FE } % LATIN SMALL LETTER THORN: þ
+\def\ydiaeresis {\char"00FF } % LATIN SMALL LETTER Y WITH DIAERESIS: ÿ
+\def\Amacron {\char"0100 } % LATIN CAPITAL LETTER A WITH MACRON: Ā
+\def\amacron {\char"0101 } % LATIN SMALL LETTER A WITH MACRON: Ä
+\def\Abreve {\char"0102 } % LATIN CAPITAL LETTER A WITH BREVE: Ä‚
+\def\abreve {\char"0103 } % LATIN SMALL LETTER A WITH BREVE: ă
+\def\Aogonek {\char"0104 } % LATIN CAPITAL LETTER A WITH OGONEK: Ä„
+\def\aogonek {\char"0105 } % LATIN SMALL LETTER A WITH OGONEK: Ä…
+\def\Cacute {\char"0106 } % LATIN CAPITAL LETTER C WITH ACUTE: Ć
+\def\cacute {\char"0107 } % LATIN SMALL LETTER C WITH ACUTE: ć
+\def\Ccircumflex {\char"0108 } % LATIN CAPITAL LETTER C WITH CIRCUMFLEX: Ĉ
+\def\ccircumflex {\char"0109 } % LATIN SMALL LETTER C WITH CIRCUMFLEX: ĉ
+\def\Cdotaccent {\char"010A } % LATIN CAPITAL LETTER C WITH DOT ABOVE: ÄŠ
+\def\cdotaccent {\char"010B } % LATIN SMALL LETTER C WITH DOT ABOVE: Ä‹
+\def\Ccaron {\char"010C } % LATIN CAPITAL LETTER C WITH CARON: Č
+\def\ccaron {\char"010D } % LATIN SMALL LETTER C WITH CARON: Ä
+\def\Dcaron {\char"010E } % LATIN CAPITAL LETTER D WITH CARON: ÄŽ
+\def\dcaron {\char"010F } % LATIN SMALL LETTER D WITH CARON: Ä
+\def\Dstroke {\char"0110 } % LATIN CAPITAL LETTER D WITH STROKE: Ä
+\def\dstroke {\char"0111 } % LATIN SMALL LETTER D WITH STROKE: Ä‘
+\def\Emacron {\char"0112 } % LATIN CAPITAL LETTER E WITH MACRON: Ä’
+\def\emacron {\char"0113 } % LATIN SMALL LETTER E WITH MACRON: Ä“
+\def\Ebreve {\char"0114 } % LATIN CAPITAL LETTER E WITH BREVE: Ä”
+\def\ebreve {\char"0115 } % LATIN SMALL LETTER E WITH BREVE: Ä•
+\def\Edotaccent {\char"0116 } % LATIN CAPITAL LETTER E WITH DOT ABOVE: Ä–
+\def\edotaccent {\char"0117 } % LATIN SMALL LETTER E WITH DOT ABOVE: Ä—
+\def\Eogonek {\char"0118 } % LATIN CAPITAL LETTER E WITH OGONEK: Ę
+\def\eogonek {\char"0119 } % LATIN SMALL LETTER E WITH OGONEK: Ä™
+\def\Ecaron {\char"011A } % LATIN CAPITAL LETTER E WITH CARON: Äš
+\def\ecaron {\char"011B } % LATIN SMALL LETTER E WITH CARON: Ä›
+\def\Gcircumflex {\char"011C } % LATIN CAPITAL LETTER G WITH CIRCUMFLEX: Ĝ
+\def\gcircumflex {\char"011D } % LATIN SMALL LETTER G WITH CIRCUMFLEX: Ä
+\def\Gbreve {\char"011E } % LATIN CAPITAL LETTER G WITH BREVE: Äž
+\def\gbreve {\char"011F } % LATIN SMALL LETTER G WITH BREVE: ÄŸ
+\def\Gdotaccent {\char"0120 } % LATIN CAPITAL LETTER G WITH DOT ABOVE: Ä 
+\def\gdotaccent {\char"0121 } % LATIN SMALL LETTER G WITH DOT ABOVE: Ä¡
+\def\Gcommaaccent {\char"0122 } % LATIN CAPITAL LETTER G WITH CEDILLA: Ģ
+\def\gcommaaccent {\char"0123 } % LATIN SMALL LETTER G WITH CEDILLA: ģ
+\def\Hcircumflex {\char"0124 } % LATIN CAPITAL LETTER H WITH CIRCUMFLEX: Ĥ
+\def\hcircumflex {\char"0125 } % LATIN SMALL LETTER H WITH CIRCUMFLEX: ĥ
+\def\Hstroke {\char"0126 } % LATIN CAPITAL LETTER H WITH STROKE: Ħ
+\def\hstroke {\char"0127 } % LATIN SMALL LETTER H WITH STROKE: ħ
+\def\Itilde {\char"0128 } % LATIN CAPITAL LETTER I WITH TILDE: Ĩ
+\def\itilde {\char"0129 } % LATIN SMALL LETTER I WITH TILDE: Ä©
+\def\Imacron {\char"012A } % LATIN CAPITAL LETTER I WITH MACRON: Ī
+\def\imacron {\char"012B } % LATIN SMALL LETTER I WITH MACRON: Ä«
+\def\Ibreve {\char"012C } % LATIN CAPITAL LETTER I WITH BREVE: Ĭ
+\def\ibreve {\char"012D } % LATIN SMALL LETTER I WITH BREVE: Ä­
+\def\Iogonek {\char"012E } % LATIN CAPITAL LETTER I WITH OGONEK: Ä®
+\def\iogonek {\char"012F } % LATIN SMALL LETTER I WITH OGONEK: į
+\def\Idotaccent {\char"0130 } % LATIN CAPITAL LETTER I WITH DOT ABOVE: Ä°
+\def\dotlessi {\char"0131 } % LATIN SMALL LETTER DOTLESS I: ı
+\def\IJligature {\char"0132 } % LATIN CAPITAL LIGATURE IJ: IJ
+\def\ijligature {\char"0133 } % LATIN SMALL LIGATURE IJ: ij
+\def\Jcircumflex {\char"0134 } % LATIN CAPITAL LETTER J WITH CIRCUMFLEX: Ä´
+\def\jcircumflex {\char"0135 } % LATIN SMALL LETTER J WITH CIRCUMFLEX: ĵ
+\def\Kcommaaccent {\char"0136 } % LATIN CAPITAL LETTER K WITH CEDILLA: Ķ
+\def\kcommaaccent {\char"0137 } % LATIN SMALL LETTER K WITH CEDILLA: Ä·
+\def\kkra {\char"0138 } % LATIN SMALL LETTER KRA: ĸ
+\def\Lacute {\char"0139 } % LATIN CAPITAL LETTER L WITH ACUTE: Ĺ
+\def\lacute {\char"013A } % LATIN SMALL LETTER L WITH ACUTE: ĺ
+\def\Lcommaaccent {\char"013B } % LATIN CAPITAL LETTER L WITH CEDILLA: Ä»
+\def\lcommaaccent {\char"013C } % LATIN SMALL LETTER L WITH CEDILLA: ļ
+\def\Lcaron {\char"013D } % LATIN CAPITAL LETTER L WITH CARON: Ľ
+\def\lcaron {\char"013E } % LATIN SMALL LETTER L WITH CARON: ľ
+\def\Ldotmiddle {\char"013F } % LATIN CAPITAL LETTER L WITH MIDDLE DOT: Ä¿
+\def\ldotmiddle {\char"0140 } % LATIN SMALL LETTER L WITH MIDDLE DOT: ŀ
+\def\Lstroke {\char"0141 } % LATIN CAPITAL LETTER L WITH STROKE: Å
+\def\lstroke {\char"0142 } % LATIN SMALL LETTER L WITH STROKE: Å‚
+\def\Nacute {\char"0143 } % LATIN CAPITAL LETTER N WITH ACUTE: Ń
+\def\nacute {\char"0144 } % LATIN SMALL LETTER N WITH ACUTE: Å„
+\def\Ncommaaccent {\char"0145 } % LATIN CAPITAL LETTER N WITH CEDILLA: Å…
+\def\ncommaaccent {\char"0146 } % LATIN SMALL LETTER N WITH CEDILLA: ņ
+\def\Ncaron {\char"0147 } % LATIN CAPITAL LETTER N WITH CARON: Ň
+\def\ncaron {\char"0148 } % LATIN SMALL LETTER N WITH CARON: ň
+\def\napostrophe {\char"0149 } % LATIN SMALL LETTER N PRECEDED BY APOSTROPHE: ʼn
+\def\Neng {\char"014A } % LATIN CAPITAL LETTER ENG: ÅŠ
+\def\neng {\char"014B } % LATIN SMALL LETTER ENG: Å‹
+\def\Omacron {\char"014C } % LATIN CAPITAL LETTER O WITH MACRON: Ō
+\def\omacron {\char"014D } % LATIN SMALL LETTER O WITH MACRON: Å
+\def\Obreve {\char"014E } % LATIN CAPITAL LETTER O WITH BREVE: ÅŽ
+\def\obreve {\char"014F } % LATIN SMALL LETTER O WITH BREVE: Å
+\def\Ohungarumlaut {\char"0150 } % LATIN CAPITAL LETTER O WITH DOUBLE ACUTE: Å
+\def\ohungarumlaut {\char"0151 } % LATIN SMALL LETTER O WITH DOUBLE ACUTE: Å‘
+\def\OEligature {\char"0152 } % LATIN CAPITAL LIGATURE OE: Å’
+\def\oeligature {\char"0153 } % LATIN SMALL LIGATURE OE: Å“
+\def\Racute {\char"0154 } % LATIN CAPITAL LETTER R WITH ACUTE: Å”
+\def\racute {\char"0155 } % LATIN SMALL LETTER R WITH ACUTE: Å•
+\def\Rcommaaccent {\char"0156 } % LATIN CAPITAL LETTER R WITH CEDILLA: Å–
+\def\rcommaaccent {\char"0157 } % LATIN SMALL LETTER R WITH CEDILLA: Å—
+\def\Rcaron {\char"0158 } % LATIN CAPITAL LETTER R WITH CARON: Ř
+\def\rcaron {\char"0159 } % LATIN SMALL LETTER R WITH CARON: Å™
+\def\Sacute {\char"015A } % LATIN CAPITAL LETTER S WITH ACUTE: Åš
+\def\sacute {\char"015B } % LATIN SMALL LETTER S WITH ACUTE: Å›
+\def\Scircumflex {\char"015C } % LATIN CAPITAL LETTER S WITH CIRCUMFLEX: Ŝ
+\def\scircumflex {\char"015D } % LATIN SMALL LETTER S WITH CIRCUMFLEX: Å
+\def\Scedilla {\char"015E } % LATIN CAPITAL LETTER S WITH CEDILLA: Åž
+\def\scedilla {\char"015F } % LATIN SMALL LETTER S WITH CEDILLA: ÅŸ
+\def\Scaron {\char"0160 } % LATIN CAPITAL LETTER S WITH CARON: Å 
+\def\scaron {\char"0161 } % LATIN SMALL LETTER S WITH CARON: Å¡
+\def\Tcedilla {\char"0162 } % LATIN CAPITAL LETTER T WITH CEDILLA: Ţ
+\def\tcedilla {\char"0163 } % LATIN SMALL LETTER T WITH CEDILLA: ţ
+\def\Tcaron {\char"0164 } % LATIN CAPITAL LETTER T WITH CARON: Ť
+\def\tcaron {\char"0165 } % LATIN SMALL LETTER T WITH CARON: ť
+\def\Tstroke {\char"0166 } % LATIN CAPITAL LETTER T WITH STROKE: Ŧ
+\def\tstroke {\char"0167 } % LATIN SMALL LETTER T WITH STROKE: ŧ
+\def\Utilde {\char"0168 } % LATIN CAPITAL LETTER U WITH TILDE: Ũ
+\def\utilde {\char"0169 } % LATIN SMALL LETTER U WITH TILDE: Å©
+\def\Umacron {\char"016A } % LATIN CAPITAL LETTER U WITH MACRON: Ū
+\def\umacron {\char"016B } % LATIN SMALL LETTER U WITH MACRON: Å«
+\def\Ubreve {\char"016C } % LATIN CAPITAL LETTER U WITH BREVE: Ŭ
+\def\ubreve {\char"016D } % LATIN SMALL LETTER U WITH BREVE: Å­
+\def\Uring {\char"016E } % LATIN CAPITAL LETTER U WITH RING ABOVE: Å®
+\def\uring {\char"016F } % LATIN SMALL LETTER U WITH RING ABOVE: ů
+\def\Uhungarumlaut {\char"0170 } % LATIN CAPITAL LETTER U WITH DOUBLE ACUTE: Å°
+\def\uhungarumlaut {\char"0171 } % LATIN SMALL LETTER U WITH DOUBLE ACUTE: ű
+\def\Uogonek {\char"0172 } % LATIN CAPITAL LETTER U WITH OGONEK: Ų
+\def\uogonek {\char"0173 } % LATIN SMALL LETTER U WITH OGONEK: ų
+\def\Wcircumflex {\char"0174 } % LATIN CAPITAL LETTER W WITH CIRCUMFLEX: Å´
+\def\wcircumflex {\char"0175 } % LATIN SMALL LETTER W WITH CIRCUMFLEX: ŵ
+\def\Ycircumflex {\char"0176 } % LATIN CAPITAL LETTER Y WITH CIRCUMFLEX: Ŷ
+\def\ycircumflex {\char"0177 } % LATIN SMALL LETTER Y WITH CIRCUMFLEX: Å·
+\def\Ydiaeresis {\char"0178 } % LATIN CAPITAL LETTER Y WITH DIAERESIS: Ÿ
+\def\Zacute {\char"0179 } % LATIN CAPITAL LETTER Z WITH ACUTE: Ź
+\def\zacute {\char"017A } % LATIN SMALL LETTER Z WITH ACUTE: ź
+\def\Zdotaccent {\char"017B } % LATIN CAPITAL LETTER Z WITH DOT ABOVE: Å»
+\def\zdotaccent {\char"017C } % LATIN SMALL LETTER Z WITH DOT ABOVE: ż
+\def\Zcaron {\char"017D } % LATIN CAPITAL LETTER Z WITH CARON: Ž
+\def\zcaron {\char"017E } % LATIN SMALL LETTER Z WITH CARON: ž
+\def\slong {\char"017F } % LATIN SMALL LETTER LONG S: Å¿
+\def\bstroke {\char"0180 } % LATIN SMALL LETTER B WITH STROKE: ƀ
+\def\Bhook {\char"0181 } % LATIN CAPITAL LETTER B WITH HOOK: Æ
+\def\Chook {\char"0187 } % LATIN CAPITAL LETTER C WITH HOOK: Ƈ
+\def\chook {\char"0188 } % LATIN SMALL LETTER C WITH HOOK: ƈ
+\def\Dafrican {\char"0189 } % LATIN CAPITAL LETTER AFRICAN D: Ɖ
+\def\Dhook {\char"018A } % LATIN CAPITAL LETTER D WITH HOOK: ÆŠ
+\def\Schwa {\char"018F } % LATIN CAPITAL LETTER SCHWA: Æ
+\def\Fhook {\char"0191 } % LATIN CAPITAL LETTER F WITH HOOK: Æ‘
+\def\fhook {\char"0192 } % LATIN SMALL LETTER F WITH HOOK: Æ’
+\def\Ghook {\char"0193 } % LATIN CAPITAL LETTER G WITH HOOK: Æ“
+\def\Istroke {\char"0197 } % LATIN CAPITAL LETTER I WITH STROKE: Æ—
+\def\Khook {\char"0198 } % LATIN CAPITAL LETTER K WITH HOOK: Ƙ
+\def\khook {\char"0199 } % LATIN SMALL LETTER K WITH HOOK: Æ™
+\def\lbar {\char"019A } % LATIN SMALL LETTER L WITH BAR: Æš
+\def\Ohorn {\char"01A0 } % LATIN CAPITAL LETTER O WITH HORN: Æ 
+\def\ohorn {\char"01A1 } % LATIN SMALL LETTER O WITH HORN: Æ¡
+\def\Phook {\char"01A4 } % LATIN CAPITAL LETTER P WITH HOOK: Ƥ
+\def\phook {\char"01A5 } % LATIN SMALL LETTER P WITH HOOK: ƥ
+\def\Thook {\char"01AC } % LATIN CAPITAL LETTER T WITH HOOK: Ƭ
+\def\thook {\char"01AD } % LATIN SMALL LETTER T WITH HOOK: Æ­
+\def\Uhorn {\char"01AF } % LATIN CAPITAL LETTER U WITH HORN: Ư
+\def\uhorn {\char"01B0 } % LATIN SMALL LETTER U WITH HORN: Æ°
+\def\Uhook {\char"01B2 } % LATIN CAPITAL LETTER V WITH HOOK: Ʋ
+\def\Yhook {\char"01B3 } % LATIN CAPITAL LETTER Y WITH HOOK: Ƴ
+\def\yhook {\char"01B4 } % LATIN SMALL LETTER Y WITH HOOK: Æ´
+\def\Zstroke {\char"01B5 } % LATIN CAPITAL LETTER Z WITH STROKE: Ƶ
+\def\zstroke {\char"01B6 } % LATIN SMALL LETTER Z WITH STROKE: ƶ
+\def\DZcaronligature {\char"01C4 } % LATIN CAPITAL LETTER DZ WITH CARON: Ç„
+\def\Dzcaronligature {\char"01C5 } % LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON: Ç…
+\def\dzcaronligature {\char"01C6 } % LATIN SMALL LETTER DZ WITH CARON: dž
+\def\LJligature {\char"01C7 } % LATIN CAPITAL LETTER LJ: LJ
+\def\Ljligature {\char"01C8 } % LATIN CAPITAL LETTER L WITH SMALL LETTER J: Lj
+\def\ljligature {\char"01C9 } % LATIN SMALL LETTER LJ: lj
+\def\NJligature {\char"01CA } % LATIN CAPITAL LETTER NJ: ÇŠ
+\def\Njligature {\char"01CB } % LATIN CAPITAL LETTER N WITH SMALL LETTER J: Ç‹
+\def\njligature {\char"01CC } % LATIN SMALL LETTER NJ: nj
+\def\Acaron {\char"01CD } % LATIN CAPITAL LETTER A WITH CARON: Ç
+\def\acaron {\char"01CE } % LATIN SMALL LETTER A WITH CARON: ÇŽ
+\def\Icaron {\char"01CF } % LATIN CAPITAL LETTER I WITH CARON: Ç
+\def\icaron {\char"01D0 } % LATIN SMALL LETTER I WITH CARON: Ç
+\def\Ocaron {\char"01D1 } % LATIN CAPITAL LETTER O WITH CARON: Ç‘
+\def\ocaron {\char"01D2 } % LATIN SMALL LETTER O WITH CARON: Ç’
+\def\Ucaron {\char"01D3 } % LATIN CAPITAL LETTER U WITH CARON: Ç“
+\def\ucaron {\char"01D4 } % LATIN SMALL LETTER U WITH CARON: Ç”
+\def\Udiaeresismacron {\char"01D5 } % LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON: Ç•
+\def\udiaeresismacron {\char"01D6 } % LATIN SMALL LETTER U WITH DIAERESIS AND MACRON: Ç–
+\def\Udiaeresisacute {\char"01D7 } % LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE: Ç—
+\def\udiaeresisacute {\char"01D8 } % LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE: ǘ
+\def\Udiaeresiscaron {\char"01D9 } % LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON: Ç™
+\def\udiaeresiscaron {\char"01DA } % LATIN SMALL LETTER U WITH DIAERESIS AND CARON: Çš
+\def\Udiaeresisgrave {\char"01DB } % LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE: Ç›
+\def\udiaeresisgrave {\char"01DC } % LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE: ǜ
+\def\Adiaeresismacron {\char"01DE } % LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON: Çž
+\def\adiaeresismacron {\char"01DF } % LATIN SMALL LETTER A WITH DIAERESIS AND MACRON: ÇŸ
+\def\Adotaccentmacron {\char"01E0 } % LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON: Ç 
+\def\adotaccentmacron {\char"01E1 } % LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON: Ç¡
+\def\AEmacron {\char"01E2 } % LATIN CAPITAL LETTER AE WITH MACRON: Ǣ
+\def\aemacron {\char"01E3 } % LATIN SMALL LETTER AE WITH MACRON: ǣ
+\def\Gstroke {\char"01E4 } % LATIN CAPITAL LETTER G WITH STROKE: Ǥ
+\def\gstroke {\char"01E5 } % LATIN SMALL LETTER G WITH STROKE: ǥ
+\def\Gcaron {\char"01E6 } % LATIN CAPITAL LETTER G WITH CARON: Ǧ
+\def\gcaron {\char"01E7 } % LATIN SMALL LETTER G WITH CARON: ǧ
+\def\Kcaron {\char"01E8 } % LATIN CAPITAL LETTER K WITH CARON: Ǩ
+\def\kcaron {\char"01E9 } % LATIN SMALL LETTER K WITH CARON: Ç©
+\def\Oogonek {\char"01EA } % LATIN CAPITAL LETTER O WITH OGONEK: Ǫ
+\def\oogonek {\char"01EB } % LATIN SMALL LETTER O WITH OGONEK: Ç«
+\def\Oogonekmacron {\char"01EC } % LATIN CAPITAL LETTER O WITH OGONEK AND MACRON: Ǭ
+\def\oogonekmacron {\char"01ED } % LATIN SMALL LETTER O WITH OGONEK AND MACRON: Ç­
+\def\jcaron {\char"01F0 } % LATIN SMALL LETTER J WITH CARON: Ç°
+\def\DZligature {\char"01F1 } % LATIN CAPITAL LETTER DZ: DZ
+\def\Dzligature {\char"01F2 } % LATIN CAPITAL LETTER D WITH SMALL LETTER Z: Dz
+\def\dzligature {\char"01F3 } % LATIN SMALL LETTER DZ: dz
+\def\Gacute {\char"01F4 } % LATIN CAPITAL LETTER G WITH ACUTE: Ç´
+\def\gacute {\char"01F5 } % LATIN SMALL LETTER G WITH ACUTE: ǵ
+\def\Ngrave {\char"01F8 } % LATIN CAPITAL LETTER N WITH GRAVE: Ǹ
+\def\ngrave {\char"01F9 } % LATIN SMALL LETTER N WITH GRAVE: ǹ
+\def\Aringacute {\char"01FA } % LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE: Ǻ
+\def\aringacute {\char"01FB } % LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE: Ç»
+\def\AEacute {\char"01FC } % LATIN CAPITAL LETTER AE WITH ACUTE: Ǽ
+\def\aeacute {\char"01FD } % LATIN SMALL LETTER AE WITH ACUTE: ǽ
+\def\Ostrokeacute {\char"01FE } % LATIN CAPITAL LETTER O WITH STROKE AND ACUTE: Ǿ
+\def\ostrokeacute {\char"01FF } % LATIN SMALL LETTER O WITH STROKE AND ACUTE: Ç¿
+\def\Adoublegrave {\char"0200 } % LATIN CAPITAL LETTER A WITH DOUBLE GRAVE: Ȁ
+\def\adoublegrave {\char"0201 } % LATIN SMALL LETTER A WITH DOUBLE GRAVE: È
+\def\Ainvertedbreve {\char"0202 } % LATIN CAPITAL LETTER A WITH INVERTED BREVE: È‚
+\def\ainvertedbreve {\char"0203 } % LATIN SMALL LETTER A WITH INVERTED BREVE: ȃ
+\def\Edoublegrave {\char"0204 } % LATIN CAPITAL LETTER E WITH DOUBLE GRAVE: È„
+\def\edoublegrave {\char"0205 } % LATIN SMALL LETTER E WITH DOUBLE GRAVE: È…
+\def\Einvertedbreve {\char"0206 } % LATIN CAPITAL LETTER E WITH INVERTED BREVE: Ȇ
+\def\einvertedbreve {\char"0207 } % LATIN SMALL LETTER E WITH INVERTED BREVE: ȇ
+\def\Idoublegrave {\char"0208 } % LATIN CAPITAL LETTER I WITH DOUBLE GRAVE: Ȉ
+\def\idoublegrave {\char"0209 } % LATIN SMALL LETTER I WITH DOUBLE GRAVE: ȉ
+\def\Iinvertedbreve {\char"020A } % LATIN CAPITAL LETTER I WITH INVERTED BREVE: ÈŠ
+\def\iinvertedbreve {\char"020B } % LATIN SMALL LETTER I WITH INVERTED BREVE: È‹
+\def\Odoublegrave {\char"020C } % LATIN CAPITAL LETTER O WITH DOUBLE GRAVE: Ȍ
+\def\odoublegrave {\char"020D } % LATIN SMALL LETTER O WITH DOUBLE GRAVE: È
+\def\Oinvertedbreve {\char"020E } % LATIN CAPITAL LETTER O WITH INVERTED BREVE: ÈŽ
+\def\oinvertedbreve {\char"020F } % LATIN SMALL LETTER O WITH INVERTED BREVE: È
+\def\Rdoublegrave {\char"0210 } % LATIN CAPITAL LETTER R WITH DOUBLE GRAVE: È
+\def\rdoublegrave {\char"0211 } % LATIN SMALL LETTER R WITH DOUBLE GRAVE: È‘
+\def\Rinvertedbreve {\char"0212 } % LATIN CAPITAL LETTER R WITH INVERTED BREVE: È’
+\def\rinvertedbreve {\char"0213 } % LATIN SMALL LETTER R WITH INVERTED BREVE: È“
+\def\Udoublegrave {\char"0214 } % LATIN CAPITAL LETTER U WITH DOUBLE GRAVE: È”
+\def\udoublegrave {\char"0215 } % LATIN SMALL LETTER U WITH DOUBLE GRAVE: È•
+\def\Uinvertedbreve {\char"0216 } % LATIN CAPITAL LETTER U WITH INVERTED BREVE: È–
+\def\uinvertedbreve {\char"0217 } % LATIN SMALL LETTER U WITH INVERTED BREVE: È—
+\def\Scommaaccent {\char"0218 } % LATIN CAPITAL LETTER S WITH COMMA BELOW: Ș
+\def\scommaaccent {\char"0219 } % LATIN SMALL LETTER S WITH COMMA BELOW: È™
+\def\Tcommaaccent {\char"021A } % LATIN CAPITAL LETTER T WITH COMMA BELOW: Èš
+\def\tcommaaccent {\char"021B } % LATIN SMALL LETTER T WITH COMMA BELOW: È›
+\def\Hcaron {\char"021E } % LATIN CAPITAL LETTER H WITH CARON: Èž
+\def\hcaron {\char"021F } % LATIN SMALL LETTER H WITH CARON: ÈŸ
+\def\dcurl {\char"0221 } % LATIN SMALL LETTER D WITH CURL: È¡
+\def\Zhook {\char"0224 } % LATIN CAPITAL LETTER Z WITH HOOK: Ȥ
+\def\zhook {\char"0225 } % LATIN SMALL LETTER Z WITH HOOK: ȥ
+\def\Adotaccent {\char"0226 } % LATIN CAPITAL LETTER A WITH DOT ABOVE: Ȧ
+\def\adotaccent {\char"0227 } % LATIN SMALL LETTER A WITH DOT ABOVE: ȧ
+\def\Ecedilla {\char"0228 } % LATIN CAPITAL LETTER E WITH CEDILLA: Ȩ
+\def\ecedilla {\char"0229 } % LATIN SMALL LETTER E WITH CEDILLA: È©
+\def\Odiaeresismacron {\char"022A } % LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON: Ȫ
+\def\odiaeresismacron {\char"022B } % LATIN SMALL LETTER O WITH DIAERESIS AND MACRON: È«
+\def\Otildemacron {\char"022C } % LATIN CAPITAL LETTER O WITH TILDE AND MACRON: Ȭ
+\def\otildemacron {\char"022D } % LATIN SMALL LETTER O WITH TILDE AND MACRON: È­
+\def\Odotaccent {\char"022E } % LATIN CAPITAL LETTER O WITH DOT ABOVE: È®
+\def\odotaccent {\char"022F } % LATIN SMALL LETTER O WITH DOT ABOVE: ȯ
+\def\Odotaccentmacron {\char"0230 } % LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON: È°
+\def\odotaccentmacron {\char"0231 } % LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON: ȱ
+\def\Ymacron {\char"0232 } % LATIN CAPITAL LETTER Y WITH MACRON: Ȳ
+\def\ymacron {\char"0233 } % LATIN SMALL LETTER Y WITH MACRON: ȳ
+\def\lcurl {\char"0234 } % LATIN SMALL LETTER L WITH CURL: È´
+\def\ncurl {\char"0235 } % LATIN SMALL LETTER N WITH CURL: ȵ
+\def\tcurl {\char"0236 } % LATIN SMALL LETTER T WITH CURL: ȶ
+\def\dotlessj {\char"0237 } % LATIN SMALL LETTER DOTLESS J: È·
+\def\Astroke {\char"023A } % LATIN CAPITAL LETTER A WITH STROKE: Ⱥ
+\def\Cstroke {\char"023B } % LATIN CAPITAL LETTER C WITH STROKE: È»
+\def\cstroke {\char"023C } % LATIN SMALL LETTER C WITH STROKE: ȼ
+\def\Lbar {\char"023D } % LATIN CAPITAL LETTER L WITH BAR: Ƚ
+\def\bhook {\char"0253 } % LATIN SMALL LETTER B WITH HOOK: É“
+\def\ccurl {\char"0255 } % LATIN SMALL LETTER C WITH CURL: É•
+\def\dtail {\char"0256 } % LATIN SMALL LETTER D WITH TAIL: É–
+\def\dhook {\char"0257 } % LATIN SMALL LETTER D WITH HOOK: É—
+\def\schwa {\char"0259 } % LATIN SMALL LETTER SCHWA: É™
+\def\schwahook {\char"025A } % LATIN SMALL LETTER SCHWA WITH HOOK: Éš
+\def\dotlessjstroke {\char"025F } % LATIN SMALL LETTER DOTLESS J WITH STROKE: ÉŸ
+\def\textcircumflex {\char"02C6 } % MODIFIER LETTER CIRCUMFLEX ACCENT: ˆ
+\def\textcaron {\char"02C7 } % CARON: ˇ
+\def\textbreve {\char"02D8 } % BREVE: ˘
+\def\textdotaccent {\char"02D9 } % DOT ABOVE: Ë™
+\def\textring {\char"02DA } % RING ABOVE: Ëš
+\def\textogonek {\char"02DB } % OGONEK: Ë›
+\def\texttilde {\char"02DC } % SMALL TILDE: ˜
+\def\texthungarumlaut {\char"02DD } % DOUBLE ACUTE ACCENT: Ë
+\def\greektonos {\char"0384 } % GREEK TONOS: ΄
+\def\greekdialytikatonos {\char"0385 } % GREEK DIALYTIKA TONOS: Î…
+\def\greekAlphatonos {\char"0386 } % GREEK CAPITAL LETTER ALPHA WITH TONOS: Ά
+\def\greekEpsilontonos {\char"0388 } % GREEK CAPITAL LETTER EPSILON WITH TONOS: Έ
+\def\greekEtatonos {\char"0389 } % GREEK CAPITAL LETTER ETA WITH TONOS: Ή
+\def\greekIotatonos {\char"038A } % GREEK CAPITAL LETTER IOTA WITH TONOS: Ί
+\def\greekOmicrontonos {\char"038C } % GREEK CAPITAL LETTER OMICRON WITH TONOS: Ό
+\def\greekUpsilontonos {\char"038E } % GREEK CAPITAL LETTER UPSILON WITH TONOS: ÎŽ
+\def\greekOmegatonos {\char"038F } % GREEK CAPITAL LETTER OMEGA WITH TONOS: Î
+\def\greekiotadialytikatonos {\char"0390 } % GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS: Î
+\def\greekAlpha {\char"0391 } % GREEK CAPITAL LETTER ALPHA: Α
+\def\greekBeta {\char"0392 } % GREEK CAPITAL LETTER BETA: Î’
+\def\greekGamma {\char"0393 } % GREEK CAPITAL LETTER GAMMA: Γ
+\def\greekDelta {\char"0394 } % GREEK CAPITAL LETTER DELTA: Δ
+\def\greekEpsilon {\char"0395 } % GREEK CAPITAL LETTER EPSILON: Ε
+\def\greekZeta {\char"0396 } % GREEK CAPITAL LETTER ZETA: Ζ
+\def\greekEta {\char"0397 } % GREEK CAPITAL LETTER ETA: Η
+\def\greekTheta {\char"0398 } % GREEK CAPITAL LETTER THETA: Θ
+\def\greekIota {\char"0399 } % GREEK CAPITAL LETTER IOTA: Ι
+\def\greekKappa {\char"039A } % GREEK CAPITAL LETTER KAPPA: Κ
+\def\greekLambda {\char"039B } % GREEK CAPITAL LETTER LAMDA: Λ
+\def\greekMu {\char"039C } % GREEK CAPITAL LETTER MU: Μ
+\def\greekNu {\char"039D } % GREEK CAPITAL LETTER NU: Î
+\def\greekXi {\char"039E } % GREEK CAPITAL LETTER XI: Ξ
+\def\greekOmicron {\char"039F } % GREEK CAPITAL LETTER OMICRON: Ο
+\def\greekPi {\char"03A0 } % GREEK CAPITAL LETTER PI: Π
+\def\greekRho {\char"03A1 } % GREEK CAPITAL LETTER RHO: Ρ
+\def\greekSigma {\char"03A3 } % GREEK CAPITAL LETTER SIGMA: Σ
+\def\greekTau {\char"03A4 } % GREEK CAPITAL LETTER TAU: Τ
+\def\greekUpsilon {\char"03A5 } % GREEK CAPITAL LETTER UPSILON: Υ
+\def\greekPhi {\char"03A6 } % GREEK CAPITAL LETTER PHI: Φ
+\def\greekChi {\char"03A7 } % GREEK CAPITAL LETTER CHI: Χ
+\def\greekPsi {\char"03A8 } % GREEK CAPITAL LETTER PSI: Ψ
+\def\greekOmega {\char"03A9 } % GREEK CAPITAL LETTER OMEGA: Ω
+\def\greekIotadialytika {\char"03AA } % GREEK CAPITAL LETTER IOTA WITH DIALYTIKA: Ϊ
+\def\greekUpsilondialytika {\char"03AB } % GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA: Ϋ
+\def\greekalphatonos {\char"03AC } % GREEK SMALL LETTER ALPHA WITH TONOS: ά
+\def\greekepsilontonos {\char"03AD } % GREEK SMALL LETTER EPSILON WITH TONOS: έ
+\def\greeketatonos {\char"03AE } % GREEK SMALL LETTER ETA WITH TONOS: ή
+\def\greekiotatonos {\char"03AF } % GREEK SMALL LETTER IOTA WITH TONOS: ί
+\def\greekupsilondialytikatonos {\char"03B0 } % GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS: ΰ
+\def\greekalpha {\char"03B1 } % GREEK SMALL LETTER ALPHA: α
+\def\greekbeta {\char"03B2 } % GREEK SMALL LETTER BETA: β
+\def\greekgamma {\char"03B3 } % GREEK SMALL LETTER GAMMA: γ
+\def\greekdelta {\char"03B4 } % GREEK SMALL LETTER DELTA: δ
+\def\greekepsilon {\char"03B5 } % GREEK SMALL LETTER EPSILON: ε
+\def\greekzeta {\char"03B6 } % GREEK SMALL LETTER ZETA: ζ
+\def\greeketa {\char"03B7 } % GREEK SMALL LETTER ETA: η
+\def\greektheta {\char"03B8 } % GREEK SMALL LETTER THETA: θ
+\def\greekiota {\char"03B9 } % GREEK SMALL LETTER IOTA: ι
+\def\greekkappa {\char"03BA } % GREEK SMALL LETTER KAPPA: κ
+\def\greeklambda {\char"03BB } % GREEK SMALL LETTER LAMDA: λ
+\def\greekmu {\char"03BC } % GREEK SMALL LETTER MU: μ
+\def\greeknu {\char"03BD } % GREEK SMALL LETTER NU: ν
+\def\greekxi {\char"03BE } % GREEK SMALL LETTER XI: ξ
+\def\greekomicron {\char"03BF } % GREEK SMALL LETTER OMICRON: ο
+\def\greekpi {\char"03C0 } % GREEK SMALL LETTER PI: π
+\def\greekrho {\char"03C1 } % GREEK SMALL LETTER RHO: Ï
+\def\greekfinalsigma {\char"03C2 } % GREEK SMALL LETTER FINAL SIGMA: Ï‚
+\def\greeksigma {\char"03C3 } % GREEK SMALL LETTER SIGMA: σ
+\def\greektau {\char"03C4 } % GREEK SMALL LETTER TAU: Ï„
+\def\greekupsilon {\char"03C5 } % GREEK SMALL LETTER UPSILON: Ï…
+\def\greekphi {\char"03C6 } % GREEK SMALL LETTER PHI: φ
+\def\greekchi {\char"03C7 } % GREEK SMALL LETTER CHI: χ
+\def\greekpsi {\char"03C8 } % GREEK SMALL LETTER PSI: ψ
+\def\greekomega {\char"03C9 } % GREEK SMALL LETTER OMEGA: ω
+\def\greekiotadialytika {\char"03CA } % GREEK SMALL LETTER IOTA WITH DIALYTIKA: ÏŠ
+\def\greekupsilondiaeresis {\char"03CB } % GREEK SMALL LETTER UPSILON WITH DIALYTIKA: Ï‹
+\def\greekomicrontonos {\char"03CC } % GREEK SMALL LETTER OMICRON WITH TONOS: ό
+\def\greekupsilontonos {\char"03CD } % GREEK SMALL LETTER UPSILON WITH TONOS: Ï
+\def\greekomegatonos {\char"03CE } % GREEK SMALL LETTER OMEGA WITH TONOS: ÏŽ
+\def\greekthetaalt {\char"03D1 } % GREEK THETA SYMBOL: Ï‘
+\def\greekphialt {\char"03D5 } % GREEK PHI SYMBOL: Ï•
+\def\greekpialt {\char"03D6 } % GREEK PI SYMBOL: Ï–
+\def\greekkoppa {\char"03D9 } % GREEK SMALL LETTER ARCHAIC KOPPA: Ï™
+\def\greekstigma {\char"03DB } % GREEK SMALL LETTER STIGMA: Ï›
+\def\greekdigamma {\char"03DD } % GREEK SMALL LETTER DIGAMMA: Ï
+\def\greeknumkoppa {\char"03DF } % GREEK SMALL LETTER KOPPA: ÏŸ
+\def\greeksampi {\char"03E1 } % GREEK SMALL LETTER SAMPI: Ï¡
+\def\greekrhoalt {\char"03F1 } % GREEK RHO SYMBOL: ϱ
+\def\greeksigmalunate {\char"03F2 } % GREEK LUNATE SIGMA SYMBOL: ϲ
+\def\greekepsilonalt {\char"03F5 } % GREEK LUNATE EPSILON SYMBOL: ϵ
+\def\greekSigmalunate {\char"03F9 } % GREEK CAPITAL LUNATE SIGMA SYMBOL: Ϲ
+\def\cyrillicEgrave {\char"0400 } % CYRILLIC CAPITAL LETTER IE WITH GRAVE: Ѐ
+\def\cyrillicYO {\char"0401 } % CYRILLIC CAPITAL LETTER IO: Ð
+\def\cyrillicDJE {\char"0402 } % CYRILLIC CAPITAL LETTER DJE: Ђ
+\def\cyrillicGJE {\char"0403 } % CYRILLIC CAPITAL LETTER GJE: Ѓ
+\def\cyrillicIE {\char"0404 } % CYRILLIC CAPITAL LETTER UKRAINIAN IE: Є
+\def\cyrillicDZE {\char"0405 } % CYRILLIC CAPITAL LETTER DZE: Ð…
+\def\cyrillicII {\char"0406 } % CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I: І
+\def\cyrillicYI {\char"0407 } % CYRILLIC CAPITAL LETTER YI: Ї
+\def\cyrillicJE {\char"0408 } % CYRILLIC CAPITAL LETTER JE: Ј
+\def\cyrillicLJE {\char"0409 } % CYRILLIC CAPITAL LETTER LJE: Љ
+\def\cyrillicNJE {\char"040A } % CYRILLIC CAPITAL LETTER NJE: Њ
+\def\cyrillicTSHE {\char"040B } % CYRILLIC CAPITAL LETTER TSHE: Ћ
+\def\cyrillicKJE {\char"040C } % CYRILLIC CAPITAL LETTER KJE: Ќ
+\def\cyrillicIgrave {\char"040D } % CYRILLIC CAPITAL LETTER I WITH GRAVE: Ð
+\def\cyrillicUSHRT {\char"040E } % CYRILLIC CAPITAL LETTER SHORT U: ÐŽ
+\def\cyrillicDZHE {\char"040F } % CYRILLIC CAPITAL LETTER DZHE: Ð
+\def\cyrillicA {\char"0410 } % CYRILLIC CAPITAL LETTER A: Ð
+\def\cyrillicB {\char"0411 } % CYRILLIC CAPITAL LETTER BE: Б
+\def\cyrillicV {\char"0412 } % CYRILLIC CAPITAL LETTER VE: Ð’
+\def\cyrillicG {\char"0413 } % CYRILLIC CAPITAL LETTER GHE: Г
+\def\cyrillicD {\char"0414 } % CYRILLIC CAPITAL LETTER DE: Д
+\def\cyrillicE {\char"0415 } % CYRILLIC CAPITAL LETTER IE: Е
+\def\cyrillicZH {\char"0416 } % CYRILLIC CAPITAL LETTER ZHE: Ж
+\def\cyrillicZ {\char"0417 } % CYRILLIC CAPITAL LETTER ZE: З
+\def\cyrillicI {\char"0418 } % CYRILLIC CAPITAL LETTER I: И
+\def\cyrillicISHRT {\char"0419 } % CYRILLIC CAPITAL LETTER SHORT I: Й
+\def\cyrillicK {\char"041A } % CYRILLIC CAPITAL LETTER KA: К
+\def\cyrillicL {\char"041B } % CYRILLIC CAPITAL LETTER EL: Л
+\def\cyrillicM {\char"041C } % CYRILLIC CAPITAL LETTER EM: М
+\def\cyrillicN {\char"041D } % CYRILLIC CAPITAL LETTER EN: Ð
+\def\cyrillicO {\char"041E } % CYRILLIC CAPITAL LETTER O: О
+\def\cyrillicP {\char"041F } % CYRILLIC CAPITAL LETTER PE: П
+\def\cyrillicR {\char"0420 } % CYRILLIC CAPITAL LETTER ER: Р
+\def\cyrillicS {\char"0421 } % CYRILLIC CAPITAL LETTER ES: С
+\def\cyrillicT {\char"0422 } % CYRILLIC CAPITAL LETTER TE: Т
+\def\cyrillicU {\char"0423 } % CYRILLIC CAPITAL LETTER U: У
+\def\cyrillicF {\char"0424 } % CYRILLIC CAPITAL LETTER EF: Ф
+\def\cyrillicH {\char"0425 } % CYRILLIC CAPITAL LETTER HA: Х
+\def\cyrillicC {\char"0426 } % CYRILLIC CAPITAL LETTER TSE: Ц
+\def\cyrillicCH {\char"0427 } % CYRILLIC CAPITAL LETTER CHE: Ч
+\def\cyrillicSH {\char"0428 } % CYRILLIC CAPITAL LETTER SHA: Ш
+\def\cyrillicSHCH {\char"0429 } % CYRILLIC CAPITAL LETTER SHCHA: Щ
+\def\cyrillicHRDSN {\char"042A } % CYRILLIC CAPITAL LETTER HARD SIGN: Ъ
+\def\cyrillicERY {\char"042B } % CYRILLIC CAPITAL LETTER YERU: Ы
+\def\cyrillicSFTSN {\char"042C } % CYRILLIC CAPITAL LETTER SOFT SIGN: Ь
+\def\cyrillicEREV {\char"042D } % CYRILLIC CAPITAL LETTER E: Э
+\def\cyrillicYU {\char"042E } % CYRILLIC CAPITAL LETTER YU: Ю
+\def\cyrillicYA {\char"042F } % CYRILLIC CAPITAL LETTER YA: Я
+\def\cyrillica {\char"0430 } % CYRILLIC SMALL LETTER A: а
+\def\cyrillicb {\char"0431 } % CYRILLIC SMALL LETTER BE: б
+\def\cyrillicv {\char"0432 } % CYRILLIC SMALL LETTER VE: в
+\def\cyrillicg {\char"0433 } % CYRILLIC SMALL LETTER GHE: г
+\def\cyrillicd {\char"0434 } % CYRILLIC SMALL LETTER DE: д
+\def\cyrillice {\char"0435 } % CYRILLIC SMALL LETTER IE: е
+\def\cyrilliczh {\char"0436 } % CYRILLIC SMALL LETTER ZHE: ж
+\def\cyrillicz {\char"0437 } % CYRILLIC SMALL LETTER ZE: з
+\def\cyrillici {\char"0438 } % CYRILLIC SMALL LETTER I: и
+\def\cyrillicishrt {\char"0439 } % CYRILLIC SMALL LETTER SHORT I: й
+\def\cyrillick {\char"043A } % CYRILLIC SMALL LETTER KA: к
+\def\cyrillicl {\char"043B } % CYRILLIC SMALL LETTER EL: л
+\def\cyrillicm {\char"043C } % CYRILLIC SMALL LETTER EM: м
+\def\cyrillicn {\char"043D } % CYRILLIC SMALL LETTER EN: н
+\def\cyrillico {\char"043E } % CYRILLIC SMALL LETTER O: о
+\def\cyrillicp {\char"043F } % CYRILLIC SMALL LETTER PE: п
+\def\cyrillicr {\char"0440 } % CYRILLIC SMALL LETTER ER: р
+\def\cyrillics {\char"0441 } % CYRILLIC SMALL LETTER ES: Ñ
+\def\cyrillict {\char"0442 } % CYRILLIC SMALL LETTER TE: Ñ‚
+\def\cyrillicu {\char"0443 } % CYRILLIC SMALL LETTER U: у
+\def\cyrillicf {\char"0444 } % CYRILLIC SMALL LETTER EF: Ñ„
+\def\cyrillich {\char"0445 } % CYRILLIC SMALL LETTER HA: Ñ…
+\def\cyrillicc {\char"0446 } % CYRILLIC SMALL LETTER TSE: ц
+\def\cyrillicch {\char"0447 } % CYRILLIC SMALL LETTER CHE: ч
+\def\cyrillicsh {\char"0448 } % CYRILLIC SMALL LETTER SHA: ш
+\def\cyrillicshch {\char"0449 } % CYRILLIC SMALL LETTER SHCHA: щ
+\def\cyrillichrdsn {\char"044A } % CYRILLIC SMALL LETTER HARD SIGN: ÑŠ
+\def\cyrillicery {\char"044B } % CYRILLIC SMALL LETTER YERU: Ñ‹
+\def\cyrillicsftsn {\char"044C } % CYRILLIC SMALL LETTER SOFT SIGN: ь
+\def\cyrillicerev {\char"044D } % CYRILLIC SMALL LETTER E: Ñ
+\def\cyrillicyu {\char"044E } % CYRILLIC SMALL LETTER YU: ÑŽ
+\def\cyrillicya {\char"044F } % CYRILLIC SMALL LETTER YA: Ñ
+\def\cyrillicegrave {\char"0450 } % CYRILLIC SMALL LETTER IE WITH GRAVE: Ñ
+\def\cyrillicyo {\char"0451 } % CYRILLIC SMALL LETTER IO: Ñ‘
+\def\cyrillicdje {\char"0452 } % CYRILLIC SMALL LETTER DJE: Ñ’
+\def\cyrillicgje {\char"0453 } % CYRILLIC SMALL LETTER GJE: Ñ“
+\def\cyrillicie {\char"0454 } % CYRILLIC SMALL LETTER UKRAINIAN IE: Ñ”
+\def\cyrillicdze {\char"0455 } % CYRILLIC SMALL LETTER DZE: Ñ•
+\def\cyrillicii {\char"0456 } % CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I: Ñ–
+\def\cyrillicyi {\char"0457 } % CYRILLIC SMALL LETTER YI: Ñ—
+\def\cyrillicje {\char"0458 } % CYRILLIC SMALL LETTER JE: ј
+\def\cyrilliclje {\char"0459 } % CYRILLIC SMALL LETTER LJE: Ñ™
+\def\cyrillicnje {\char"045A } % CYRILLIC SMALL LETTER NJE: Ñš
+\def\cyrillictshe {\char"045B } % CYRILLIC SMALL LETTER TSHE: Ñ›
+\def\cyrillickje {\char"045C } % CYRILLIC SMALL LETTER KJE: ќ
+\def\cyrillicigrave {\char"045D } % CYRILLIC SMALL LETTER I WITH GRAVE: Ñ
+\def\cyrillicushrt {\char"045E } % CYRILLIC SMALL LETTER SHORT U: Ñž
+\def\cyrillicdzhe {\char"045F } % CYRILLIC SMALL LETTER DZHE: ÑŸ
+\def\cyrillicOMEGA {\char"0460 } % CYRILLIC CAPITAL LETTER OMEGA: Ñ 
+\def\cyrillicomega {\char"0461 } % CYRILLIC SMALL LETTER OMEGA: Ñ¡
+\def\cyrillicYAT {\char"0462 } % CYRILLIC CAPITAL LETTER YAT: Ѣ
+\def\cyrillicyat {\char"0463 } % CYRILLIC SMALL LETTER YAT: ѣ
+\def\cyrillicEiotified {\char"0464 } % CYRILLIC CAPITAL LETTER IOTIFIED E: Ѥ
+\def\cyrilliceiotified {\char"0465 } % CYRILLIC SMALL LETTER IOTIFIED E: ѥ
+\def\cyrillicLITTLEYUS {\char"0466 } % CYRILLIC CAPITAL LETTER LITTLE YUS: Ѧ
+\def\cyrilliclittleyus {\char"0467 } % CYRILLIC SMALL LETTER LITTLE YUS: ѧ
+\def\cyrillicLITTLEYUSiotified {\char"0468 } % CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS: Ѩ
+\def\cyrilliclittleyusiotified {\char"0469 } % CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS: Ñ©
+\def\cyrillicBIGYUS {\char"046A } % CYRILLIC CAPITAL LETTER BIG YUS: Ѫ
+\def\cyrillicbigyus {\char"046B } % CYRILLIC SMALL LETTER BIG YUS: Ñ«
+\def\cyrillicBIGYUSiotified {\char"046C } % CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS: Ѭ
+\def\cyrillicbigyusiotified {\char"046D } % CYRILLIC SMALL LETTER IOTIFIED BIG YUS: Ñ­
+\def\cyrillicKSI {\char"046E } % CYRILLIC CAPITAL LETTER KSI: Ñ®
+\def\cyrillicksi {\char"046F } % CYRILLIC SMALL LETTER KSI: ѯ
+\def\cyrillicPSI {\char"0470 } % CYRILLIC CAPITAL LETTER PSI: Ñ°
+\def\cyrillicpsi {\char"0471 } % CYRILLIC SMALL LETTER PSI: ѱ
+\def\cyrillicFITA {\char"0472 } % CYRILLIC CAPITAL LETTER FITA: Ѳ
+\def\cyrillicfita {\char"0473 } % CYRILLIC SMALL LETTER FITA: ѳ
+\def\cyrillicIZHITSA {\char"0474 } % CYRILLIC CAPITAL LETTER IZHITSA: Ñ´
+\def\cyrillicizhitsa {\char"0475 } % CYRILLIC SMALL LETTER IZHITSA: ѵ
+\def\cyrillicIZHITSAdoublegrave {\char"0476 } % CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT: Ѷ
+\def\cyrillicizhitsadoublegrave {\char"0477 } % CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT: Ñ·
+\def\cyrillicUK {\char"0478 } % CYRILLIC CAPITAL LETTER UK: Ѹ
+\def\cyrillicuk {\char"0479 } % CYRILLIC SMALL LETTER UK: ѹ
+\def\cyrillicOMEGAround {\char"047A } % CYRILLIC CAPITAL LETTER ROUND OMEGA: Ѻ
+\def\cyrillicomegaround {\char"047B } % CYRILLIC SMALL LETTER ROUND OMEGA: Ñ»
+\def\cyrillicOMEGAtitlo {\char"047C } % CYRILLIC CAPITAL LETTER OMEGA WITH TITLO: Ѽ
+\def\cyrillicomegatitlo {\char"047D } % CYRILLIC SMALL LETTER OMEGA WITH TITLO: ѽ
+\def\cyrillicOT {\char"047E } % CYRILLIC CAPITAL LETTER OT: Ѿ
+\def\cyrillicot {\char"047F } % CYRILLIC SMALL LETTER OT: Ñ¿
+\def\cyrillicKOPPA {\char"0480 } % CYRILLIC CAPITAL LETTER KOPPA: Ò€
+\def\cyrillickoppa {\char"0481 } % CYRILLIC SMALL LETTER KOPPA: Ò
+\def\cyrillicTITLO {\char"0483 } % COMBINING CYRILLIC TITLO: Òƒ
+\def\cyrillicPALATALIZATION {\char"0484 } % COMBINING CYRILLIC PALATALIZATION: Ò„
+\def\cyrillicDASIAPNEUMATA {\char"0485 } % COMBINING CYRILLIC DASIA PNEUMATA: Ò…
+\def\cyrillicPSILIPNEUMATA {\char"0486 } % COMBINING CYRILLIC PSILI PNEUMATA: Ò†
+\def\cyrillicISHRTtail {\char"048A } % CYRILLIC CAPITAL LETTER SHORT I WITH TAIL: ÒŠ
+\def\cyrillicishrttail {\char"048B } % CYRILLIC SMALL LETTER SHORT I WITH TAIL: Ò‹
+\def\cyrillicSEMISOFT {\char"048C } % CYRILLIC CAPITAL LETTER SEMISOFT SIGN: Ҍ
+\def\cyrillicsemisoft {\char"048D } % CYRILLIC SMALL LETTER SEMISOFT SIGN: Ò
+\def\cyrillicERtick {\char"048E } % CYRILLIC CAPITAL LETTER ER WITH TICK: ÒŽ
+\def\cyrillicertick {\char"048F } % CYRILLIC SMALL LETTER ER WITH TICK: Ò
+\def\cyrillicGHEupturn {\char"0490 } % CYRILLIC CAPITAL LETTER GHE WITH UPTURN: Ò
+\def\cyrillicgheupturn {\char"0491 } % CYRILLIC SMALL LETTER GHE WITH UPTURN: Ò‘
+\def\cyrillicGHEstroke {\char"0492 } % CYRILLIC CAPITAL LETTER GHE WITH STROKE: Ò’
+\def\cyrillicghestroke {\char"0493 } % CYRILLIC SMALL LETTER GHE WITH STROKE: Ò“
+\def\cyrillicGHEmidhook {\char"0494 } % CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK: Ò”
+\def\cyrillicghemidhook {\char"0495 } % CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK: Ò•
+\def\cyrillicZHEdescender {\char"0496 } % CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER: Ò–
+\def\cyrilliczhedescender {\char"0497 } % CYRILLIC SMALL LETTER ZHE WITH DESCENDER: Ò—
+\def\cyrillicZDSC {\char"0498 } % CYRILLIC CAPITAL LETTER ZE WITH DESCENDER: Ò˜
+\def\cyrilliczdsc {\char"0499 } % CYRILLIC SMALL LETTER ZE WITH DESCENDER: Ò™
+\def\cyrillicKADC {\char"049A } % CYRILLIC CAPITAL LETTER KA WITH DESCENDER: Òš
+\def\cyrillickadc {\char"049B } % CYRILLIC SMALL LETTER KA WITH DESCENDER: Ò›
+\def\cyrillicKAvertstroke {\char"049C } % CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE: Ҝ
+\def\cyrillickavertstroke {\char"049D } % CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE: Ò
+\def\cyrillicKAstroke {\char"049E } % CYRILLIC CAPITAL LETTER KA WITH STROKE: Òž
+\def\cyrillickastroke {\char"049F } % CYRILLIC SMALL LETTER KA WITH STROKE: ÒŸ
+\def\cyrillicKAbashkir {\char"04A0 } % CYRILLIC CAPITAL LETTER BASHKIR KA: Ò 
+\def\cyrillickabashkir {\char"04A1 } % CYRILLIC SMALL LETTER BASHKIR KA: Ò¡
+\def\cyrillicENDC {\char"04A2 } % CYRILLIC CAPITAL LETTER EN WITH DESCENDER: Ò¢
+\def\cyrillicendc {\char"04A3 } % CYRILLIC SMALL LETTER EN WITH DESCENDER: Ò£
+\def\cyrillicENGHE {\char"04A4 } % CYRILLIC CAPITAL LIGATURE EN GHE: Ò¤
+\def\cyrillicenghe {\char"04A5 } % CYRILLIC SMALL LIGATURE EN GHE: Ò¥
+\def\cyrillicPEmidhook {\char"04A6 } % CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK: Ò¦
+\def\cyrillicpemidhook {\char"04A7 } % CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK: Ò§
+\def\cyrillicHA {\char"04A8 } % CYRILLIC CAPITAL LETTER ABKHASIAN HA: Ò¨
+\def\cyrillicha {\char"04A9 } % CYRILLIC SMALL LETTER ABKHASIAN HA: Ò©
+\def\cyrillicSDSC {\char"04AA } % CYRILLIC CAPITAL LETTER ES WITH DESCENDER: Òª
+\def\cyrillicsdsc {\char"04AB } % CYRILLIC SMALL LETTER ES WITH DESCENDER: Ò«
+\def\cyrillicTEDC {\char"04AC } % CYRILLIC CAPITAL LETTER TE WITH DESCENDER: Ò¬
+\def\cyrillictedc {\char"04AD } % CYRILLIC SMALL LETTER TE WITH DESCENDER: Ò­
+\def\cyrillicYstr {\char"04AE } % CYRILLIC CAPITAL LETTER STRAIGHT U: Ò®
+\def\cyrillicystr {\char"04AF } % CYRILLIC SMALL LETTER STRAIGHT U: Ò¯
+\def\cyrillicYstrstroke {\char"04B0 } % CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE: Ò°
+\def\cyrillicystrstroke {\char"04B1 } % CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE: Ò±
+\def\cyrillicHADC {\char"04B2 } % CYRILLIC CAPITAL LETTER HA WITH DESCENDER: Ò²
+\def\cyrillichadc {\char"04B3 } % CYRILLIC SMALL LETTER HA WITH DESCENDER: Ò³
+\def\cyrillicTETSE {\char"04B4 } % CYRILLIC CAPITAL LIGATURE TE TSE: Ò´
+\def\cyrillictetse {\char"04B5 } % CYRILLIC SMALL LIGATURE TE TSE: Òµ
+\def\cyrillicCHEDC {\char"04B6 } % CYRILLIC CAPITAL LETTER CHE WITH DESCENDER: Ò¶
+\def\cyrillicchedc {\char"04B7 } % CYRILLIC SMALL LETTER CHE WITH DESCENDER: Ò·
+\def\cyrillicCHEvertstroke {\char"04B8 } % CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE: Ò¸
+\def\cyrillicchevertstroke {\char"04B9 } % CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE: Ò¹
+\def\cyrillicSHHA {\char"04BA } % CYRILLIC CAPITAL LETTER SHHA: Òº
+\def\cyrillicshha {\char"04BB } % CYRILLIC SMALL LETTER SHHA: Ò»
+\def\cyrillicCHEabkhasian {\char"04BC } % CYRILLIC CAPITAL LETTER ABKHASIAN CHE: Ò¼
+\def\cyrilliccheabkhasian {\char"04BD } % CYRILLIC SMALL LETTER ABKHASIAN CHE: Ò½
+\def\cyrillicCHEDCabkhasian {\char"04BE } % CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER: Ò¾
+\def\cyrillicchedcabkhasian {\char"04BF } % CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER: Ò¿
+\def\cyrillicPALOCHKA {\char"04C0 } % CYRILLIC LETTER PALOCHKA: Ó€
+\def\cyrillicZHEbreve {\char"04C1 } % CYRILLIC CAPITAL LETTER ZHE WITH BREVE: Ó
+\def\cyrilliczhebreve {\char"04C2 } % CYRILLIC SMALL LETTER ZHE WITH BREVE: Ó‚
+\def\cyrillicKAhook {\char"04C3 } % CYRILLIC CAPITAL LETTER KA WITH HOOK: Óƒ
+\def\cyrillickahook {\char"04C4 } % CYRILLIC SMALL LETTER KA WITH HOOK: Ó„
+\def\cyrillicELtail {\char"04C5 } % CYRILLIC CAPITAL LETTER EL WITH TAIL: Ó…
+\def\cyrilliceltail {\char"04C6 } % CYRILLIC SMALL LETTER EL WITH TAIL: Ó†
+\def\cyrillicENhook {\char"04C7 } % CYRILLIC CAPITAL LETTER EN WITH HOOK: Ó‡
+\def\cyrillicenhook {\char"04C8 } % CYRILLIC SMALL LETTER EN WITH HOOK: Óˆ
+\def\cyrillicENtail {\char"04C9 } % CYRILLIC CAPITAL LETTER EN WITH TAIL: Ó‰
+\def\cyrillicentail {\char"04CA } % CYRILLIC SMALL LETTER EN WITH TAIL: ÓŠ
+\def\cyrillicCHEkhakassian {\char"04CB } % CYRILLIC CAPITAL LETTER KHAKASSIAN CHE: Ó‹
+\def\cyrillicchekhakassian {\char"04CC } % CYRILLIC SMALL LETTER KHAKASSIAN CHE: ӌ
+\def\cyrillicEMtail {\char"04CD } % CYRILLIC CAPITAL LETTER EM WITH TAIL: Ó
+\def\cyrillicemtail {\char"04CE } % CYRILLIC SMALL LETTER EM WITH TAIL: ÓŽ
+\def\cyrillicAbreve {\char"04D0 } % CYRILLIC CAPITAL LETTER A WITH BREVE: Ó
+\def\cyrillicabreve {\char"04D1 } % CYRILLIC SMALL LETTER A WITH BREVE: Ó‘
+\def\cyrillicAdiaeresis {\char"04D2 } % CYRILLIC CAPITAL LETTER A WITH DIAERESIS: Ó’
+\def\cyrillicadiaeresis {\char"04D3 } % CYRILLIC SMALL LETTER A WITH DIAERESIS: Ó“
+\def\cyrillicAE {\char"04D4 } % CYRILLIC CAPITAL LIGATURE A IE: Ó”
+\def\cyrillicae {\char"04D5 } % CYRILLIC SMALL LIGATURE A IE: Ó•
+\def\cyrillicEbreve {\char"04D6 } % CYRILLIC CAPITAL LETTER IE WITH BREVE: Ó–
+\def\cyrillicebreve {\char"04D7 } % CYRILLIC SMALL LETTER IE WITH BREVE: Ó—
+\def\cyrillicSCHWA {\char"04D8 } % CYRILLIC CAPITAL LETTER SCHWA: Ó˜
+\def\cyrillicschwa {\char"04D9 } % CYRILLIC SMALL LETTER SCHWA: Ó™
+\def\cyrillicSCHWAdiaeresis {\char"04DA } % CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS: Óš
+\def\cyrillicschwadiaeresis {\char"04DB } % CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS: Ó›
+\def\cyrillicZHEdiaeresis {\char"04DC } % CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS: Ӝ
+\def\cyrilliczhediaeresis {\char"04DD } % CYRILLIC SMALL LETTER ZHE WITH DIAERESIS: Ó
+\def\cyrillicZEdiaeresis {\char"04DE } % CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS: Óž
+\def\cyrilliczediaeresis {\char"04DF } % CYRILLIC SMALL LETTER ZE WITH DIAERESIS: ÓŸ
+\def\cyrillicDZEabkhasian {\char"04E0 } % CYRILLIC CAPITAL LETTER ABKHASIAN DZE: Ó 
+\def\cyrillicdzeabkhasian {\char"04E1 } % CYRILLIC SMALL LETTER ABKHASIAN DZE: Ó¡
+\def\cyrillicImacron {\char"04E2 } % CYRILLIC CAPITAL LETTER I WITH MACRON: Ó¢
+\def\cyrillicimacron {\char"04E3 } % CYRILLIC SMALL LETTER I WITH MACRON: Ó£
+\def\cyrillicIdiaeresis {\char"04E4 } % CYRILLIC CAPITAL LETTER I WITH DIAERESIS: Ó¤
+\def\cyrillicidiaeresis {\char"04E5 } % CYRILLIC SMALL LETTER I WITH DIAERESIS: Ó¥
+\def\cyrillicOdiaeresis {\char"04E6 } % CYRILLIC CAPITAL LETTER O WITH DIAERESIS: Ó¦
+\def\cyrillicodiaeresis {\char"04E7 } % CYRILLIC SMALL LETTER O WITH DIAERESIS: Ó§
+\def\cyrillicObarred {\char"04E8 } % CYRILLIC CAPITAL LETTER BARRED O: Ó¨
+\def\cyrillicobarred {\char"04E9 } % CYRILLIC SMALL LETTER BARRED O: Ó©
+\def\cyrillicObarreddiaeresis {\char"04EA } % CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS: Óª
+\def\cyrillicobarreddiaeresis {\char"04EB } % CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS: Ó«
+\def\cyrillicEdiaeresis {\char"04EC } % CYRILLIC CAPITAL LETTER E WITH DIAERESIS: Ó¬
+\def\cyrillicediaeresis {\char"04ED } % CYRILLIC SMALL LETTER E WITH DIAERESIS: Ó­
+\def\cyrillicUmacron {\char"04EE } % CYRILLIC CAPITAL LETTER U WITH MACRON: Ó®
+\def\cyrillicumacron {\char"04EF } % CYRILLIC SMALL LETTER U WITH MACRON: Ó¯
+\def\cyrillicUdiaeresis {\char"04F0 } % CYRILLIC CAPITAL LETTER U WITH DIAERESIS: Ó°
+\def\cyrillicudiaeresis {\char"04F1 } % CYRILLIC SMALL LETTER U WITH DIAERESIS: Ó±
+\def\cyrillicUdoubleacute {\char"04F2 } % CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE: Ó²
+\def\cyrillicudoubleacute {\char"04F3 } % CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE: Ó³
+\def\cyrillicCHEdiaeresis {\char"04F4 } % CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS: Ó´
+\def\cyrillicchediaeresis {\char"04F5 } % CYRILLIC SMALL LETTER CHE WITH DIAERESIS: Óµ
+\def\cyrillicYERUdiaeresis {\char"04F8 } % CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS: Ó¸
+\def\cyrillicyerudiaeresis {\char"04F9 } % CYRILLIC SMALL LETTER YERU WITH DIAERESIS: Ó¹
+\def\hebrewAlef {\char"05D0 } % HEBREW LETTER ALEF: ×
+\def\hebrewBet {\char"05D1 } % HEBREW LETTER BET: ב
+\def\hebrewGimel {\char"05D2 } % HEBREW LETTER GIMEL: ×’
+\def\hebrewDalet {\char"05D3 } % HEBREW LETTER DALET: ד
+\def\hebrewHe {\char"05D4 } % HEBREW LETTER HE: ×”
+\def\hebrewVav {\char"05D5 } % HEBREW LETTER VAV: ו
+\def\hebrewZayin {\char"05D6 } % HEBREW LETTER ZAYIN: ×–
+\def\hebrewHet {\char"05D7 } % HEBREW LETTER HET: ×—
+\def\hebrewTet {\char"05D8 } % HEBREW LETTER TET: ט
+\def\hebrewYod {\char"05D9 } % HEBREW LETTER YOD: ×™
+\def\hebrewKaffinal {\char"05DA } % HEBREW LETTER FINAL KAF: ך
+\def\hebrewKaf {\char"05DB } % HEBREW LETTER KAF: ×›
+\def\hebrewLamed {\char"05DC } % HEBREW LETTER LAMED: ל
+\def\hebrewMemfinal {\char"05DD } % HEBREW LETTER FINAL MEM: ×
+\def\hebrewMem {\char"05DE } % HEBREW LETTER MEM: מ
+\def\hebrewNunfinal {\char"05DF } % HEBREW LETTER FINAL NUN: ן
+\def\hebrewNun {\char"05E0 } % HEBREW LETTER NUN: × 
+\def\hebrewSamekh {\char"05E1 } % HEBREW LETTER SAMEKH: ס
+\def\hebrewAyin {\char"05E2 } % HEBREW LETTER AYIN: ×¢
+\def\hebrewPefinal {\char"05E3 } % HEBREW LETTER FINAL PE: ×£
+\def\hebrewPe {\char"05E4 } % HEBREW LETTER PE: פ
+\def\hebrewTsadifinal {\char"05E5 } % HEBREW LETTER FINAL TSADI: ×¥
+\def\hebrewTsadi {\char"05E6 } % HEBREW LETTER TSADI: צ
+\def\hebrewQof {\char"05E7 } % HEBREW LETTER QOF: ק
+\def\hebrewResh {\char"05E8 } % HEBREW LETTER RESH: ר
+\def\hebrewShin {\char"05E9 } % HEBREW LETTER SHIN: ש
+\def\hebrewTav {\char"05EA } % HEBREW LETTER TAV: ת
+\def\Adotbelow {\char"1EA0 } % LATIN CAPITAL LETTER A WITH DOT BELOW: Ạ
+\def\adotbelow {\char"1EA1 } % LATIN SMALL LETTER A WITH DOT BELOW: ạ
+\def\Ahook {\char"1EA2 } % LATIN CAPITAL LETTER A WITH HOOK ABOVE: Ả
+\def\ahook {\char"1EA3 } % LATIN SMALL LETTER A WITH HOOK ABOVE: ả
+\def\Acircumflexacute {\char"1EA4 } % LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE: Ấ
+\def\acircumflexacute {\char"1EA5 } % LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE: ấ
+\def\Acircumflexgrave {\char"1EA6 } % LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE: Ầ
+\def\acircumflexgrave {\char"1EA7 } % LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE: ầ
+\def\Acircumflexhook {\char"1EA8 } % LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE: Ẩ
+\def\acircumflexhook {\char"1EA9 } % LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE: ẩ
+\def\Acircumflextilde {\char"1EAA } % LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE: Ẫ
+\def\acircumflextilde {\char"1EAB } % LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE: ẫ
+\def\Acircumflexdotbelow {\char"1EAC } % LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW: Ậ
+\def\acircumflexdotbelow {\char"1EAD } % LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW: ậ
+\def\Abreveacute {\char"1EAE } % LATIN CAPITAL LETTER A WITH BREVE AND ACUTE: Ắ
+\def\abreveacute {\char"1EAF } % LATIN SMALL LETTER A WITH BREVE AND ACUTE: ắ
+\def\Abrevegrave {\char"1EB0 } % LATIN CAPITAL LETTER A WITH BREVE AND GRAVE: Ằ
+\def\abrevegrave {\char"1EB1 } % LATIN SMALL LETTER A WITH BREVE AND GRAVE: ằ
+\def\Abrevehook {\char"1EB2 } % LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE: Ẳ
+\def\abrevehook {\char"1EB3 } % LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE: ẳ
+\def\Abrevetilde {\char"1EB4 } % LATIN CAPITAL LETTER A WITH BREVE AND TILDE: Ẵ
+\def\abrevetilde {\char"1EB5 } % LATIN SMALL LETTER A WITH BREVE AND TILDE: ẵ
+\def\Abrevedotbelow {\char"1EB6 } % LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW: Ặ
+\def\abrevedotbelow {\char"1EB7 } % LATIN SMALL LETTER A WITH BREVE AND DOT BELOW: ặ
+\def\Edotbelow {\char"1EB8 } % LATIN CAPITAL LETTER E WITH DOT BELOW: Ẹ
+\def\edotbelow {\char"1EB9 } % LATIN SMALL LETTER E WITH DOT BELOW: ẹ
+\def\Ehook {\char"1EBA } % LATIN CAPITAL LETTER E WITH HOOK ABOVE: Ẻ
+\def\ehook {\char"1EBB } % LATIN SMALL LETTER E WITH HOOK ABOVE: ẻ
+\def\Etilde {\char"1EBC } % LATIN CAPITAL LETTER E WITH TILDE: Ẽ
+\def\etilde {\char"1EBD } % LATIN SMALL LETTER E WITH TILDE: ẽ
+\def\Ecircumflexacute {\char"1EBE } % LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE: Ế
+\def\ecircumflexacute {\char"1EBF } % LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE: ế
+\def\Ecircumflexgrave {\char"1EC0 } % LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE: Ề
+\def\ecircumflexgrave {\char"1EC1 } % LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE: á»
+\def\Ecircumflexhook {\char"1EC2 } % LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE: Ể
+\def\ecircumflexhook {\char"1EC3 } % LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE: ể
+\def\Ecircumflextilde {\char"1EC4 } % LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE: Ễ
+\def\ecircumflextilde {\char"1EC5 } % LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE: á»…
+\def\Ecircumflexdotbelow {\char"1EC6 } % LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW: Ệ
+\def\ecircumflexdotbelow {\char"1EC7 } % LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW: ệ
+\def\Ihook {\char"1EC8 } % LATIN CAPITAL LETTER I WITH HOOK ABOVE: Ỉ
+\def\ihook {\char"1EC9 } % LATIN SMALL LETTER I WITH HOOK ABOVE: ỉ
+\def\Idotbelow {\char"1ECA } % LATIN CAPITAL LETTER I WITH DOT BELOW: Ị
+\def\idotbelow {\char"1ECB } % LATIN SMALL LETTER I WITH DOT BELOW: ị
+\def\Odotbelow {\char"1ECC } % LATIN CAPITAL LETTER O WITH DOT BELOW: Ọ
+\def\odotbelow {\char"1ECD } % LATIN SMALL LETTER O WITH DOT BELOW: á»
+\def\Ohook {\char"1ECE } % LATIN CAPITAL LETTER O WITH HOOK ABOVE: Ỏ
+\def\ohook {\char"1ECF } % LATIN SMALL LETTER O WITH HOOK ABOVE: á»
+\def\Ocircumflexacute {\char"1ED0 } % LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE: á»
+\def\ocircumflexacute {\char"1ED1 } % LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE: ố
+\def\Ocircumflexgrave {\char"1ED2 } % LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE: á»’
+\def\ocircumflexgrave {\char"1ED3 } % LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE: ồ
+\def\Ocircumflexhook {\char"1ED4 } % LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE: á»”
+\def\ocircumflexhook {\char"1ED5 } % LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE: ổ
+\def\Ocircumflextilde {\char"1ED6 } % LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE: á»–
+\def\ocircumflextilde {\char"1ED7 } % LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE: á»—
+\def\Ocircumflexdotbelow {\char"1ED8 } % LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW: Ộ
+\def\ocircumflexdotbelow {\char"1ED9 } % LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW: á»™
+\def\Ohornacute {\char"1EDA } % LATIN CAPITAL LETTER O WITH HORN AND ACUTE: Ớ
+\def\ohornacute {\char"1EDB } % LATIN SMALL LETTER O WITH HORN AND ACUTE: á»›
+\def\Ohorngrave {\char"1EDC } % LATIN CAPITAL LETTER O WITH HORN AND GRAVE: Ờ
+\def\ohorngrave {\char"1EDD } % LATIN SMALL LETTER O WITH HORN AND GRAVE: á»
+\def\Ohornhook {\char"1EDE } % LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE: Ở
+\def\ohornhook {\char"1EDF } % LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE: ở
+\def\Ohorntilde {\char"1EE0 } % LATIN CAPITAL LETTER O WITH HORN AND TILDE: á» 
+\def\ohorntilde {\char"1EE1 } % LATIN SMALL LETTER O WITH HORN AND TILDE: ỡ
+\def\Ohorndotbelow {\char"1EE2 } % LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW: Ợ
+\def\ohorndotbelow {\char"1EE3 } % LATIN SMALL LETTER O WITH HORN AND DOT BELOW: ợ
+\def\Udotbelow {\char"1EE4 } % LATIN CAPITAL LETTER U WITH DOT BELOW: Ụ
+\def\udotbelow {\char"1EE5 } % LATIN SMALL LETTER U WITH DOT BELOW: ụ
+\def\Uhook {\char"1EE6 } % LATIN CAPITAL LETTER U WITH HOOK ABOVE: Ủ
+\def\uhook {\char"1EE7 } % LATIN SMALL LETTER U WITH HOOK ABOVE: ủ
+\def\Uhornacute {\char"1EE8 } % LATIN CAPITAL LETTER U WITH HORN AND ACUTE: Ứ
+\def\uhornacute {\char"1EE9 } % LATIN SMALL LETTER U WITH HORN AND ACUTE: ứ
+\def\Uhorngrave {\char"1EEA } % LATIN CAPITAL LETTER U WITH HORN AND GRAVE: Ừ
+\def\uhorngrave {\char"1EEB } % LATIN SMALL LETTER U WITH HORN AND GRAVE: ừ
+\def\Uhornhook {\char"1EEC } % LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE: Ử
+\def\uhornhook {\char"1EED } % LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE: á»­
+\def\Uhorntilde {\char"1EEE } % LATIN CAPITAL LETTER U WITH HORN AND TILDE: á»®
+\def\uhorntilde {\char"1EEF } % LATIN SMALL LETTER U WITH HORN AND TILDE: ữ
+\def\Uhorndotbelow {\char"1EF0 } % LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW: á»°
+\def\uhorndotbelow {\char"1EF1 } % LATIN SMALL LETTER U WITH HORN AND DOT BELOW: á»±
+\def\Ygrave {\char"1EF2 } % LATIN CAPITAL LETTER Y WITH GRAVE: Ỳ
+\def\ygrave {\char"1EF3 } % LATIN SMALL LETTER Y WITH GRAVE: ỳ
+\def\Ydotbelow {\char"1EF4 } % LATIN CAPITAL LETTER Y WITH DOT BELOW: á»´
+\def\ydotbelow {\char"1EF5 } % LATIN SMALL LETTER Y WITH DOT BELOW: ỵ
+\def\Yhook {\char"1EF6 } % LATIN CAPITAL LETTER Y WITH HOOK ABOVE: Ỷ
+\def\yhook {\char"1EF7 } % LATIN SMALL LETTER Y WITH HOOK ABOVE: á»·
+\def\Ytilde {\char"1EF8 } % LATIN CAPITAL LETTER Y WITH TILDE: Ỹ
+\def\ytilde {\char"1EF9 } % LATIN SMALL LETTER Y WITH TILDE: ỹ
+\def\greekalphapsili {\char"1F00 } % GREEK SMALL LETTER ALPHA WITH PSILI: á¼€
+\def\greekalphadasia {\char"1F01 } % GREEK SMALL LETTER ALPHA WITH DASIA: á¼
+\def\greekalphapsilivaria {\char"1F02 } % GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA: ἂ
+\def\greekalphadasiavaria {\char"1F03 } % GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA: ἃ
+\def\greekalphapsilitonos {\char"1F04 } % GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA: ἄ
+\def\greekalphadasiatonos {\char"1F05 } % GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA: á¼…
+\def\greekalphapsiliperispomeni {\char"1F06 } % GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI: ἆ
+\def\greekalphadasiaperispomeni {\char"1F07 } % GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI: ἇ
+\def\greekAlphapsili {\char"1F08 } % GREEK CAPITAL LETTER ALPHA WITH PSILI: Ἀ
+\def\greekAlphadasia {\char"1F09 } % GREEK CAPITAL LETTER ALPHA WITH DASIA: Ἁ
+\def\greekAlphapsilivaria {\char"1F0A } % GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA: Ἂ
+\def\greekAlphadasiavaria {\char"1F0B } % GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA: Ἃ
+\def\greekAlphapsilitonos {\char"1F0C } % GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA: Ἄ
+\def\greekAlphadasiatonos {\char"1F0D } % GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA: á¼
+\def\greekAlphapsiliperispomeni {\char"1F0E } % GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI: Ἆ
+\def\greekAlphadasiaperispomeni {\char"1F0F } % GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI: á¼
+\def\greekepsilonpsili {\char"1F10 } % GREEK SMALL LETTER EPSILON WITH PSILI: á¼
+\def\greekepsilondasia {\char"1F11 } % GREEK SMALL LETTER EPSILON WITH DASIA: ἑ
+\def\greekepsilonpsilivaria {\char"1F12 } % GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA: á¼’
+\def\greekepsilondasiavaria {\char"1F13 } % GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA: ἓ
+\def\greekepsilonpsilitonos {\char"1F14 } % GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA: á¼”
+\def\greekepsilondasiatonos {\char"1F15 } % GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA: ἕ
+\def\greekEpsilonpsili {\char"1F18 } % GREEK CAPITAL LETTER EPSILON WITH PSILI: Ἐ
+\def\greekEpsilondasia {\char"1F19 } % GREEK CAPITAL LETTER EPSILON WITH DASIA: á¼™
+\def\greekEpsilonpsilivaria {\char"1F1A } % GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA: Ἒ
+\def\greekEpsilondasiavaria {\char"1F1B } % GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA: á¼›
+\def\greekEpsilonpsilitonos {\char"1F1C } % GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA: Ἔ
+\def\greekEpsilondasiatonos {\char"1F1D } % GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA: á¼
+\def\greeketapsili {\char"1F20 } % GREEK SMALL LETTER ETA WITH PSILI: á¼ 
+\def\greeketadasia {\char"1F21 } % GREEK SMALL LETTER ETA WITH DASIA: ἡ
+\def\greeketapsilivaria {\char"1F22 } % GREEK SMALL LETTER ETA WITH PSILI AND VARIA: á¼¢
+\def\greeketadasiavaria {\char"1F23 } % GREEK SMALL LETTER ETA WITH DASIA AND VARIA: á¼£
+\def\greeketapsilitonos {\char"1F24 } % GREEK SMALL LETTER ETA WITH PSILI AND OXIA: ἤ
+\def\greeketadasiatonos {\char"1F25 } % GREEK SMALL LETTER ETA WITH DASIA AND OXIA: á¼¥
+\def\greeketapsiliperispomeni {\char"1F26 } % GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI: ἦ
+\def\greeketadasiaperispomeni {\char"1F27 } % GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI: ἧ
+\def\greekEtapsili {\char"1F28 } % GREEK CAPITAL LETTER ETA WITH PSILI: Ἠ
+\def\greekEtadasia {\char"1F29 } % GREEK CAPITAL LETTER ETA WITH DASIA: Ἡ
+\def\greekEtapsilivaria {\char"1F2A } % GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA: Ἢ
+\def\greekEtadasiavaria {\char"1F2B } % GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA: Ἣ
+\def\greekEtapsilitonos {\char"1F2C } % GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA: Ἤ
+\def\greekEtadasiatonos {\char"1F2D } % GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA: á¼­
+\def\greekEtapsiliperispomeni {\char"1F2E } % GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI: á¼®
+\def\greekEtadasiaperispomeni {\char"1F2F } % GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI: Ἧ
+\def\greekiotapsili {\char"1F30 } % GREEK SMALL LETTER IOTA WITH PSILI: á¼°
+\def\greekiotadasia {\char"1F31 } % GREEK SMALL LETTER IOTA WITH DASIA: á¼±
+\def\greekiotapsilivaria {\char"1F32 } % GREEK SMALL LETTER IOTA WITH PSILI AND VARIA: á¼²
+\def\greekiotadasiavaria {\char"1F33 } % GREEK SMALL LETTER IOTA WITH DASIA AND VARIA: á¼³
+\def\greekiotapsilitonos {\char"1F34 } % GREEK SMALL LETTER IOTA WITH PSILI AND OXIA: á¼´
+\def\greekiotadasiatonos {\char"1F35 } % GREEK SMALL LETTER IOTA WITH DASIA AND OXIA: á¼µ
+\def\greekiotapsiliperispomeni {\char"1F36 } % GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI: ἶ
+\def\greekiotadasiaperispomeni {\char"1F37 } % GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI: á¼·
+\def\greekIotapsili {\char"1F38 } % GREEK CAPITAL LETTER IOTA WITH PSILI: Ἰ
+\def\greekIotadasia {\char"1F39 } % GREEK CAPITAL LETTER IOTA WITH DASIA: á¼¹
+\def\greekIotapsilivaria {\char"1F3A } % GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA: Ἲ
+\def\greekIotadasiavaria {\char"1F3B } % GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA: á¼»
+\def\greekIotapsilitonos {\char"1F3C } % GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA: á¼¼
+\def\greekIotadasiatonos {\char"1F3D } % GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA: á¼½
+\def\greekIotapsiliperispomeni {\char"1F3E } % GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI: á¼¾
+\def\greekIotadasiaperispomeni {\char"1F3F } % GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI: Ἷ
+\def\greekomicronpsili {\char"1F40 } % GREEK SMALL LETTER OMICRON WITH PSILI: á½€
+\def\greekomicrondasia {\char"1F41 } % GREEK SMALL LETTER OMICRON WITH DASIA: á½
+\def\greekomicronpsilivaria {\char"1F42 } % GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA: ὂ
+\def\greekomicrondasiavaria {\char"1F43 } % GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA: ὃ
+\def\greekomicronpsilitonos {\char"1F44 } % GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA: ὄ
+\def\greekomicrondasiatonos {\char"1F45 } % GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA: á½…
+\def\greekOmicronpsili {\char"1F48 } % GREEK CAPITAL LETTER OMICRON WITH PSILI: Ὀ
+\def\greekOmicrondasia {\char"1F49 } % GREEK CAPITAL LETTER OMICRON WITH DASIA: Ὁ
+\def\greekOmicronpsilivaria {\char"1F4A } % GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA: Ὂ
+\def\greekOmicrondasiavaria {\char"1F4B } % GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA: Ὃ
+\def\greekOmicronpsilitonos {\char"1F4C } % GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA: Ὄ
+\def\greekOmicrondasiatonos {\char"1F4D } % GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA: á½
+\def\greekupsilonpsili {\char"1F50 } % GREEK SMALL LETTER UPSILON WITH PSILI: á½
+\def\greekupsilondasia {\char"1F51 } % GREEK SMALL LETTER UPSILON WITH DASIA: ὑ
+\def\greekupsilonpsilivaria {\char"1F52 } % GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA: á½’
+\def\greekupsilondasiavaria {\char"1F53 } % GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA: ὓ
+\def\greekupsilonpsilitonos {\char"1F54 } % GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA: á½”
+\def\greekupsilondasiatonos {\char"1F55 } % GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA: ὕ
+\def\greekupsilonpsiliperispomeni {\char"1F56 } % GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI: á½–
+\def\greekupsilondasiaperispomeni {\char"1F57 } % GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI: á½—
+\def\greekUpsilondasia {\char"1F59 } % GREEK CAPITAL LETTER UPSILON WITH DASIA: á½™
+\def\greekUpsilondasiavaria {\char"1F5B } % GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA: á½›
+\def\greekUpsilondasiatonos {\char"1F5D } % GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA: á½
+\def\greekUpsilondasiaperispomeni {\char"1F5F } % GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI: Ὗ
+\def\greekomegapsili {\char"1F60 } % GREEK SMALL LETTER OMEGA WITH PSILI: á½ 
+\def\greekomegadasia {\char"1F61 } % GREEK SMALL LETTER OMEGA WITH DASIA: ὡ
+\def\greekomegapsilivaria {\char"1F62 } % GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA: á½¢
+\def\greekomegadasiavaria {\char"1F63 } % GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA: á½£
+\def\greekomegapsilitonos {\char"1F64 } % GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA: ὤ
+\def\greekomegadasiatonos {\char"1F65 } % GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA: á½¥
+\def\greekomegapsiliperispomeni {\char"1F66 } % GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI: ὦ
+\def\greekomegadasiaperispomeni {\char"1F67 } % GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI: ὧ
+\def\greekOmegapsili {\char"1F68 } % GREEK CAPITAL LETTER OMEGA WITH PSILI: Ὠ
+\def\greekOmegadasia {\char"1F69 } % GREEK CAPITAL LETTER OMEGA WITH DASIA: Ὡ
+\def\greekOmegapsilivaria {\char"1F6A } % GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA: Ὢ
+\def\greekOmegadasiavaria {\char"1F6B } % GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA: Ὣ
+\def\greekOmegapsilitonos {\char"1F6C } % GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA: Ὤ
+\def\greekOmegadasiatonos {\char"1F6D } % GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA: á½­
+\def\greekOmegapsiliperispomeni {\char"1F6E } % GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI: á½®
+\def\greekOmegadasiaperispomeni {\char"1F6F } % GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI: Ὧ
+\def\greekalphavaria {\char"1F70 } % GREEK SMALL LETTER ALPHA WITH VARIA: á½°
+\def\greekalphaoxia {\char"1F71 } % GREEK SMALL LETTER ALPHA WITH OXIA: á½±
+\def\greekepsilonvaria {\char"1F72 } % GREEK SMALL LETTER EPSILON WITH VARIA: á½²
+\def\greekepsilonoxia {\char"1F73 } % GREEK SMALL LETTER EPSILON WITH OXIA: á½³
+\def\greeketavaria {\char"1F74 } % GREEK SMALL LETTER ETA WITH VARIA: á½´
+\def\greeketaoxia {\char"1F75 } % GREEK SMALL LETTER ETA WITH OXIA: á½µ
+\def\greekiotavaria {\char"1F76 } % GREEK SMALL LETTER IOTA WITH VARIA: ὶ
+\def\greekiotaoxia {\char"1F77 } % GREEK SMALL LETTER IOTA WITH OXIA: á½·
+\def\greekomicronvaria {\char"1F78 } % GREEK SMALL LETTER OMICRON WITH VARIA: ὸ
+\def\greekomicronoxia {\char"1F79 } % GREEK SMALL LETTER OMICRON WITH OXIA: á½¹
+\def\greekupsilonvaria {\char"1F7A } % GREEK SMALL LETTER UPSILON WITH VARIA: ὺ
+\def\greekupsilonoxia {\char"1F7B } % GREEK SMALL LETTER UPSILON WITH OXIA: á½»
+\def\greekomegavaria {\char"1F7C } % GREEK SMALL LETTER OMEGA WITH VARIA: á½¼
+\def\greekomegaoxia {\char"1F7D } % GREEK SMALL LETTER OMEGA WITH OXIA: á½½
+\def\greekalphaiotasubpsili {\char"1F80 } % GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI: á¾€
+\def\greekalphaiotasubdasia {\char"1F81 } % GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI: á¾
+\def\greekalphaiotasubpsilivaria {\char"1F82 } % GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI: ᾂ
+\def\greekalphaiotasubdasiavaria {\char"1F83 } % GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI: ᾃ
+\def\greekalphaiotasubpsilitonos {\char"1F84 } % GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI: ᾄ
+\def\greekalphaiotasubdasiatonos {\char"1F85 } % GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI: á¾…
+\def\greekalphaiotasubpsiliperispomeni{\char"1F86 } % GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI: ᾆ
+\def\greekalphaiotasubdasiaperispomeni{\char"1F87 } % GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI: ᾇ
+\def\greekAlphaiotasubpsili {\char"1F88 } % GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI: ᾈ
+\def\greekAlphaiotasubdasia {\char"1F89 } % GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI: ᾉ
+\def\greekAlphaiotasubpsilivaria {\char"1F8A } % GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI: ᾊ
+\def\greekAlphaiotasubdasiavaria {\char"1F8B } % GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI: ᾋ
+\def\greekAlphaiotasubpsilitonos {\char"1F8C } % GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI: ᾌ
+\def\greekAlphaiotasubdasiatonos {\char"1F8D } % GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI: á¾
+\def\greekAlphaiotasubpsiliperispomeni{\char"1F8E } % GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI: ᾎ
+\def\greekAlphaiotasubdasiaperispomeni{\char"1F8F } % GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI: á¾
+\def\greeketaiotasubpsili {\char"1F90 } % GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI: á¾
+\def\greeketaiotasubdasia {\char"1F91 } % GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI: ᾑ
+\def\greeketaiotasubpsilivaria {\char"1F92 } % GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI: á¾’
+\def\greeketaiotasubdasiavaria {\char"1F93 } % GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI: ᾓ
+\def\greeketaiotasubpsilitonos {\char"1F94 } % GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI: á¾”
+\def\greeketaiotasubdasiatonos {\char"1F95 } % GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI: ᾕ
+\def\greeketaiotasubpsiliperispomeni {\char"1F96 } % GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI: á¾–
+\def\greeketaiotasubdasiaperispomeni {\char"1F97 } % GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI: á¾—
+\def\greekEtaiotasubpsili {\char"1F98 } % GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI: ᾘ
+\def\greekEtaiotasubdasia {\char"1F99 } % GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI: á¾™
+\def\greekEtaiotasubpsilivaria {\char"1F9A } % GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI: ᾚ
+\def\greekEtaiotasubdasiavaria {\char"1F9B } % GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI: á¾›
+\def\greekEtaiotasubpsilitonos {\char"1F9C } % GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI: ᾜ
+\def\greekEtaiotasubdasiatonos {\char"1F9D } % GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI: á¾
+\def\greekEtaiotasubpsiliperispomeni {\char"1F9E } % GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI: ᾞ
+\def\greekEtaiotasubdasiaperispomeni {\char"1F9F } % GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI: ᾟ
+\def\greekomegaiotasubpsili {\char"1FA0 } % GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI: á¾ 
+\def\greekomegaiotasubdasia {\char"1FA1 } % GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI: ᾡ
+\def\greekomegaiotasubpsilivaria {\char"1FA2 } % GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI: á¾¢
+\def\greekomegaiotasubdasiavaria {\char"1FA3 } % GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI: á¾£
+\def\greekomegaiotasubpsilitonos {\char"1FA4 } % GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI: ᾤ
+\def\greekomegaiotasubdasiatonos {\char"1FA5 } % GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI: á¾¥
+\def\greekomegaiotasubpsiliperispomeni{\char"1FA6 } % GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI: ᾦ
+\def\greekomegaiotasubdasiaperispomeni{\char"1FA7 } % GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI: ᾧ
+\def\greekOmegaiotasubpsili {\char"1FA8 } % GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI: ᾨ
+\def\greekOmegaiotasubdasia {\char"1FA9 } % GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI: ᾩ
+\def\greekOmegaiotasubpsilivaria {\char"1FAA } % GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI: ᾪ
+\def\greekOmegaiotasubdasiavaria {\char"1FAB } % GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI: ᾫ
+\def\greekOmegaiotasubpsilitonos {\char"1FAC } % GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI: ᾬ
+\def\greekOmegaiotasubdasiatonos {\char"1FAD } % GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI: á¾­
+\def\greekOmegaiotasubpsiliperispomeni{\char"1FAE } % GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI: á¾®
+\def\greekOmegaiotasubdasiaperispomeni{\char"1FAF } % GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI: ᾯ
+\def\greekalphavrachy {\char"1FB0 } % GREEK SMALL LETTER ALPHA WITH VRACHY: á¾°
+\def\greekalphamacron {\char"1FB1 } % GREEK SMALL LETTER ALPHA WITH MACRON: á¾±
+\def\greekalphaiotasubvaria {\char"1FB2 } % GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI: á¾²
+\def\greekalphaiotasub {\char"1FB3 } % GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI: á¾³
+\def\greekalphaiotasubtonos {\char"1FB4 } % GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI: á¾´
+\def\greekalphaperispomeni {\char"1FB6 } % GREEK SMALL LETTER ALPHA WITH PERISPOMENI: ᾶ
+\def\greekalphaiotasubperispomeni {\char"1FB7 } % GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI: á¾·
+\def\greekAlphavrachy {\char"1FB8 } % GREEK CAPITAL LETTER ALPHA WITH VRACHY: Ᾰ
+\def\greekAlphamacron {\char"1FB9 } % GREEK CAPITAL LETTER ALPHA WITH MACRON: á¾¹
+\def\greekAlphavaria {\char"1FBA } % GREEK CAPITAL LETTER ALPHA WITH VARIA: Ὰ
+\def\greekAlphatonos {\char"1FBB } % GREEK CAPITAL LETTER ALPHA WITH OXIA: á¾»
+\def\greekAlphaiotasub {\char"1FBC } % GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI: á¾¼
+\def\greekCoronis {\char"1FBD } % GREEK KORONIS: á¾½
+\def\greekprosgegrammeni {\char"1FBE } % GREEK PROSGEGRAMMENI: á¾¾
+\def\greekpsili {\char"1FBF } % GREEK PSILI: ᾿
+\def\greekperispomeni {\char"1FC0 } % GREEK PERISPOMENI: á¿€
+\def\greekdialytikaperispomeni {\char"1FC1 } % GREEK DIALYTIKA AND PERISPOMENI: á¿
+\def\greeketaiotasubvaria {\char"1FC2 } % GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI: á¿‚
+\def\greeketaiotasub {\char"1FC3 } % GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI: ῃ
+\def\greeketaiotasubtonos {\char"1FC4 } % GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI: á¿„
+\def\greeketaperispomeni {\char"1FC6 } % GREEK SMALL LETTER ETA WITH PERISPOMENI: ῆ
+\def\greeketaiotasubperispomeni {\char"1FC7 } % GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI: ῇ
+\def\greekEpsilonvaria {\char"1FC8 } % GREEK CAPITAL LETTER EPSILON WITH VARIA: Ὲ
+\def\greekEpsilontonos {\char"1FC9 } % GREEK CAPITAL LETTER EPSILON WITH OXIA: Έ
+\def\greekEtavaria {\char"1FCA } % GREEK CAPITAL LETTER ETA WITH VARIA: á¿Š
+\def\greekEtatonos {\char"1FCB } % GREEK CAPITAL LETTER ETA WITH OXIA: á¿‹
+\def\greekEtaiotasub {\char"1FCC } % GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI: ῌ
+\def\greekpsilivaria {\char"1FCD } % GREEK PSILI AND VARIA: á¿
+\def\greekpsilitonos {\char"1FCE } % GREEK PSILI AND OXIA: á¿Ž
+\def\greekpsiliperispomeni {\char"1FCF } % GREEK PSILI AND PERISPOMENI: á¿
+\def\greekiotavrachy {\char"1FD0 } % GREEK SMALL LETTER IOTA WITH VRACHY: á¿
+\def\greekiotamacron {\char"1FD1 } % GREEK SMALL LETTER IOTA WITH MACRON: á¿‘
+\def\greekiotadialytikavaria {\char"1FD2 } % GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA: á¿’
+\def\greekiotadialytikatonos {\char"1FD3 } % GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA: á¿“
+\def\greekiotaperispomeni {\char"1FD6 } % GREEK SMALL LETTER IOTA WITH PERISPOMENI: á¿–
+\def\greekiotadialytikaperispomeni {\char"1FD7 } % GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI: á¿—
+\def\greekIotavrachy {\char"1FD8 } % GREEK CAPITAL LETTER IOTA WITH VRACHY: Ῐ
+\def\greekIotamacron {\char"1FD9 } % GREEK CAPITAL LETTER IOTA WITH MACRON: á¿™
+\def\greekIotavaria {\char"1FDA } % GREEK CAPITAL LETTER IOTA WITH VARIA: á¿š
+\def\greekIotatonos {\char"1FDB } % GREEK CAPITAL LETTER IOTA WITH OXIA: á¿›
+\def\greekdasiavaria {\char"1FDD } % GREEK DASIA AND VARIA: á¿
+\def\greekdasiatonos {\char"1FDE } % GREEK DASIA AND OXIA: á¿ž
+\def\greekdasiaperispomeni {\char"1FDF } % GREEK DASIA AND PERISPOMENI: á¿Ÿ
+\def\greekupsilonvrachy {\char"1FE0 } % GREEK SMALL LETTER UPSILON WITH VRACHY: á¿ 
+\def\greekupsilonmacron {\char"1FE1 } % GREEK SMALL LETTER UPSILON WITH MACRON: á¿¡
+\def\greekupsilondialytikavaria {\char"1FE2 } % GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA: á¿¢
+\def\greekupsilondialytikatonos {\char"1FE3 } % GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA: á¿£
+\def\greekrhopsili {\char"1FE4 } % GREEK SMALL LETTER RHO WITH PSILI: ῤ
+\def\greekrhodasia {\char"1FE5 } % GREEK SMALL LETTER RHO WITH DASIA: á¿¥
+\def\greekupsilonperispomeni {\char"1FE6 } % GREEK SMALL LETTER UPSILON WITH PERISPOMENI: ῦ
+\def\greekupsilondialytikaperispomeni {\char"1FE7 } % GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI: ῧ
+\def\greekUpsilonvrachy {\char"1FE8 } % GREEK CAPITAL LETTER UPSILON WITH VRACHY: Ῠ
+\def\greekUpsilonmacron {\char"1FE9 } % GREEK CAPITAL LETTER UPSILON WITH MACRON: á¿©
+\def\greekUpsilonvaria {\char"1FEA } % GREEK CAPITAL LETTER UPSILON WITH VARIA: Ὺ
+\def\greekUpsilontonos {\char"1FEB } % GREEK CAPITAL LETTER UPSILON WITH OXIA: á¿«
+\def\greekRhodasia {\char"1FEC } % GREEK CAPITAL LETTER RHO WITH DASIA: Ῥ
+\def\greekdialytikavaria {\char"1FED } % GREEK DIALYTIKA AND VARIA: á¿­
+\def\greekdialytikatonos {\char"1FEE } % GREEK DIALYTIKA AND OXIA: á¿®
+\def\greekvaria {\char"1FEF } % GREEK VARIA: `
+\def\greekomegaiotasubvaria {\char"1FF2 } % GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI: ῲ
+\def\greekomegaiotasub {\char"1FF3 } % GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI: ῳ
+\def\greekomegaiotasubtonos {\char"1FF4 } % GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI: á¿´
+\def\greekomegaperispomeni {\char"1FF6 } % GREEK SMALL LETTER OMEGA WITH PERISPOMENI: ῶ
+\def\greekomegaiotasubperispomeni {\char"1FF7 } % GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI: á¿·
+\def\greekOmicronvaria {\char"1FF8 } % GREEK CAPITAL LETTER OMICRON WITH VARIA: Ὸ
+\def\greekOmicrontonos {\char"1FF9 } % GREEK CAPITAL LETTER OMICRON WITH OXIA: Ό
+\def\greekOmegavaria {\char"1FFA } % GREEK CAPITAL LETTER OMEGA WITH VARIA: Ὼ
+\def\greekOmegatonos {\char"1FFB } % GREEK CAPITAL LETTER OMEGA WITH OXIA: á¿»
+\def\greekOmegaiotasub {\char"1FFC } % GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI: ῼ
+\def\greekoxia {\char"1FFD } % GREEK OXIA: ´
+\def\greekdasia {\char"1FFE } % GREEK DASIA: ῾
+\def\enspace {\char"2002 } % EN SPACE:  
+\def\emspace {\char"2003 } % EM SPACE:  
+\def\thinspace {\char"2009 } % THIN SPACE:  
+\def\hairspace {\char"200A } % HAIR SPACE:  
+\def\textminus {\char"2012 } % FIGURE DASH: ‒
+\def\endash {\char"2013 } % EN DASH: –
+\def\emdash {\char"2014 } % EM DASH: —
+\def\texthorizontalbar {\char"2015 } % HORIZONTAL BAR: ―
+\def\quoteleft {\char"2018 } % LEFT SINGLE QUOTATION MARK: ‘
+\def\quoteright {\char"2019 } % RIGHT SINGLE QUOTATION MARK: ’
+\def\quotesinglebase {\char"201A } % SINGLE LOW-0x0009 QUOTATION MARK: ‚
+\def\quotedblleft {\char"201C } % LEFT DOUBLE QUOTATION MARK: “
+\def\quotedblright {\char"201D } % RIGHT DOUBLE QUOTATION MARK: â€
+\def\quotedblbase {\char"201E } % DOUBLE LOW-0x0009 QUOTATION MARK: „
+\def\textdag {\char"2020 } % DAGGER: †
+\def\textddag {\char"2021 } % DOUBLE DAGGER: ‡
+\def\textbullet {\char"2022 } % BULLET: •
+\def\textellipsis {\char"2026 } % HORIZONTAL ELLIPSIS: …
+\def\perthousand {\char"2030 } % PER MILLE SIGN: ‰
+\def\guilsingleleft {\char"2039 } % SINGLE LEFT-POINTING ANGLE QUOTATION MARK: ‹
+\def\guilsingleright {\char"203A } % SINGLE RIGHT-POINTING ANGLE QUOTATION MARK: ›
+\def\textdong {\char"20AB } % DONG SIGN: â‚«
+\def\texteuro {\char"20AC } % EURO SIGN: €
+\def\textnumero {\char"2116 } % NUMERO SIGN: â„–
+\def\trademark {\char"2122 } % TRADE MARK SIGN: â„¢
+\def\onethird {\char"2153 } % VULGAR FRACTION ONE THIRD: â…“
+\def\twothirds {\char"2154 } % VULGAR FRACTION TWO THIRDS: â…”
+\def\onefifth {\char"2155 } % VULGAR FRACTION ONE FIFTH: â…•
+\def\twofifths {\char"2156 } % VULGAR FRACTION TWO FIFTHS: â…–
+\def\threefifths {\char"2157 } % VULGAR FRACTION THREE FIFTHS: â…—
+\def\fourfifths {\char"2158 } % VULGAR FRACTION FOUR FIFTHS: â…˜
+\def\onesixth {\char"2159 } % VULGAR FRACTION ONE SIXTH: â…™
+\def\fivesixths {\char"215A } % VULGAR FRACTION FIVE SIXTHS: â…š
+\def\oneeighth {\char"215B } % VULGAR FRACTION ONE EIGHTH: â…›
+\def\threeeighths {\char"215C } % VULGAR FRACTION THREE EIGHTHS: ⅜
+\def\fiveeighths {\char"215D } % VULGAR FRACTION FIVE EIGHTHS: â…
+\def\seveneighths {\char"215E } % VULGAR FRACTION SEVEN EIGHTHS: â…ž
+\def\romanI {\char"2160 } % ROMAN NUMERAL ONE: â… 
+\def\romanII {\char"2161 } % ROMAN NUMERAL TWO: â…¡
+\def\romanIII {\char"2162 } % ROMAN NUMERAL THREE: â…¢
+\def\romanIV {\char"2163 } % ROMAN NUMERAL FOUR: â…£
+\def\romanV {\char"2164 } % ROMAN NUMERAL FIVE: â…¤
+\def\romanVI {\char"2165 } % ROMAN NUMERAL SIX: â…¥
+\def\romanVII {\char"2166 } % ROMAN NUMERAL SEVEN: â…¦
+\def\romanVIII {\char"2167 } % ROMAN NUMERAL EIGHT: â…§
+\def\romanIX {\char"2168 } % ROMAN NUMERAL NINE: â…¨
+\def\romanX {\char"2169 } % ROMAN NUMERAL TEN: â…©
+\def\romanXI {\char"216A } % ROMAN NUMERAL ELEVEN: â…ª
+\def\romanXII {\char"216B } % ROMAN NUMERAL TWELVE: â…«
+\def\romanL {\char"216C } % ROMAN NUMERAL FIFTY: â…¬
+\def\romanC {\char"216D } % ROMAN NUMERAL ONE HUNDRED: â…­
+\def\romanD {\char"216E } % ROMAN NUMERAL FIVE HUNDRED: â…®
+\def\romanM {\char"216F } % ROMAN NUMERAL ONE THOUSAND: â…¯
+\def\romani {\char"2170 } % SMALL ROMAN NUMERAL ONE: â…°
+\def\romanii {\char"2171 } % SMALL ROMAN NUMERAL TWO: â…±
+\def\romaniii {\char"2172 } % SMALL ROMAN NUMERAL THREE: â…²
+\def\romaniv {\char"2173 } % SMALL ROMAN NUMERAL FOUR: â…³
+\def\romanv {\char"2174 } % SMALL ROMAN NUMERAL FIVE: â…´
+\def\romanvi {\char"2175 } % SMALL ROMAN NUMERAL SIX: â…µ
+\def\romanvii {\char"2176 } % SMALL ROMAN NUMERAL SEVEN: â…¶
+\def\romanviii {\char"2177 } % SMALL ROMAN NUMERAL EIGHT: â…·
+\def\romanix {\char"2178 } % SMALL ROMAN NUMERAL NINE: â…¸
+\def\romanx {\char"2179 } % SMALL ROMAN NUMERAL TEN: â…¹
+\def\romanxi {\char"217A } % SMALL ROMAN NUMERAL ELEVEN: â…º
+\def\romanxii {\char"217B } % SMALL ROMAN NUMERAL TWELVE: â…»
+\def\romanl {\char"217C } % SMALL ROMAN NUMERAL FIFTY: â…¼
+\def\romanc {\char"217D } % SMALL ROMAN NUMERAL ONE HUNDRED: â…½
+\def\romand {\char"217E } % SMALL ROMAN NUMERAL FIVE HUNDRED: â…¾
+\def\romanm {\char"217F } % SMALL ROMAN NUMERAL ONE THOUSAND: â…¿
+\def\ffligature {\char"FB00 } % LATIN SMALL LIGATURE FF: ff
+\def\filigature {\char"FB01 } % LATIN SMALL LIGATURE FI: ï¬
+\def\flligature {\char"FB02 } % LATIN SMALL LIGATURE FL: fl
+\def\ffiligature {\char"FB03 } % LATIN SMALL LIGATURE FFI: ffi
+\def\fflligature {\char"FB04 } % LATIN SMALL LIGATURE FFL: ffl
+\def\stligature {\char"FB06 } % LATIN SMALL LIGATURE ST: st
\endinput
diff --git a/Master/texmf-dist/tex/context/base/filt-ini.tex b/Master/texmf-dist/tex/context/base/filt-ini.tex
index 9e2af2c6e6e..98c88546786 100644
--- a/Master/texmf-dist/tex/context/base/filt-ini.tex
+++ b/Master/texmf-dist/tex/context/base/filt-ini.tex
@@ -42,7 +42,7 @@
\startmessages german library: filters
title: filter
- 1: filter -- is loaded
+ 1: filter -- ist geladen
2: unknown filter --
\stopmessages
diff --git a/Master/texmf-dist/tex/context/base/font-afm.lua b/Master/texmf-dist/tex/context/base/font-afm.lua
new file mode 100644
index 00000000000..fd931547233
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/font-afm.lua
@@ -0,0 +1,745 @@
+if not modules then modules = { } end modules ['font-afm'] = {
+ version = 1.001,
+ comment = "companion to font-ini.tex",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+--[[ldx--
+<p>Some code may look a bit obscure but this has to do with the
+fact that we also use this code for testing and much code evolved
+in the transition from <l n='tfm'/> to <l n='afm'/> to <l
+n='otf'/>.</p>
+
+<p>The following code still has traces of intermediate font support
+where we handles font encodings. Eventually font encoding goes
+away.</p>
+--ldx]]--
+
+fonts = fonts or { }
+fonts.afm = fonts.afm or { }
+fonts.afm.version = 1.26 -- incrementing this number one up will force a re-cache
+fonts.afm.syncspace = true -- when true, nicer stretch values
+fonts.afm.enhance_data = true -- best leave this set to true
+fonts.afm.trace_features = false
+fonts.afm.features = { }
+fonts.afm.features.aux = { }
+fonts.afm.features.data = { }
+fonts.afm.features.list = { }
+fonts.afm.features.default = { }
+fonts.afm.cache = containers.define("fonts", "afm", fonts.afm.version, true)
+
+--[[ldx--
+<p>We start with the basic reader which we give a name similar to the
+built in <l n='tfm'/> and <l n='otf'/> reader.</p>
+--ldx]]--
+
+--~ Comment FONTIDENTIFIER LMMATHSYMBOLS10
+--~ Comment CODINGSCHEME TEX MATH SYMBOLS
+--~ Comment DESIGNSIZE 10.0 pt
+--~ Comment CHECKSUM O 4261307036
+--~ Comment SPACE 0 plus 0 minus 0
+--~ Comment QUAD 1000
+--~ Comment EXTRASPACE 0
+--~ Comment NUM 676.508 393.732 443.731
+--~ Comment DENOM 685.951 344.841
+--~ Comment SUP 412.892 362.892 288.889
+--~ Comment SUB 150 247.217
+--~ Comment SUPDROP 386.108
+--~ Comment SUBDROP 50
+--~ Comment DELIM 2390 1010
+--~ Comment AXISHEIGHT 250
+
+do
+
+ local c = lpeg.P("Comment")
+ local s = lpeg.S(" \t")
+ local l = lpeg.S("\n\r")
+ local w = lpeg.C((1 - l)^1)
+ local n = lpeg.C((lpeg.R("09") + lpeg.S("."))^1) / tonumber * s^0
+
+ local fd = { }
+
+ local pattern = ( c * s^1 * (
+ ("CODINGSCHEME" * s^1 * w ) / function(a) end +
+ ("DESIGNSIZE" * s^1 * n * w ) / function(a) fd[ 1] = a end +
+ ("CHECKSUM" * s^1 * n * w ) / function(a) fd[ 2] = a end +
+ ("SPACE" * s^1 * n * "plus" * n * "minus" * n) / function(a,b,c) fd[ 3], fd[ 4], fd[ 5] = a, b, c end +
+ ("QUAD" * s^1 * n ) / function(a) fd[ 6] = a end +
+ ("EXTRASPACE" * s^1 * n ) / function(a) fd[ 7] = a end +
+ ("NUM" * s^1 * n * n * n ) / function(a,b,c) fd[ 8], fd[ 9], fd[10] = a, b, c end +
+ ("DENOM" * s^1 * n * n ) / function(a,b ) fd[11], fd[12] = a, b end +
+ ("SUP" * s^1 * n * n * n ) / function(a,b,c) fd[13], fd[14], fd[15] = a, b, c end +
+ ("SUB" * s^1 * n * n ) / function(a,b) fd[16], fd[17] = a, b end +
+ ("SUPDROP" * s^1 * n ) / function(a) fd[18] = a end +
+ ("SUBDROP" * s^1 * n ) / function(a) fd[19] = a end +
+ ("DELIM" * s^1 * n * n ) / function(a,b) fd[20], fd[21] = a, b end +
+ ("AXISHEIGHT" * s^1 * n ) / function(a) fd[22] = a end +
+ (1-l)^0
+ ) + (1-c)^1)^0
+
+ function fonts.afm.scan_comment(str)
+ fd = { }
+ pattern:match(str)
+ return fd
+ end
+
+end
+
+do
+
+ -- On a rainy day I will rewrite this in lpeg ...
+
+ local keys = { }
+
+ function keys.FontName (data,line) data.fullname = line:strip() end
+ function keys.ItalicAngle (data,line) data.italicangle = tonumber (line) end
+ function keys.IsFixedPitch(data,line) data.isfixedpitch = toboolean(line,true) end
+ function keys.CharWidth (data,line) data.charwidth = tonumber (line) end
+ function keys.XHeight (data,line) data.xheight = tonumber (line) end
+ function keys.Descender (data,line) data.descender = tonumber (line) end
+ function keys.Ascender (data,line) data.ascender = tonumber (line) end
+ function keys.Comment (data,line)
+ -- Comment DesignSize 12 (pts)
+ -- Comment TFM designsize: 12 (in points)
+ line = line:lower()
+ local designsize = line:match("designsize[^%d]*(%d+)")
+ if designsize then data.designsize = tonumber(designsize) end
+ end
+
+ local function get_charmetrics(data,charmetrics,vector)
+ local characters = data.characters
+ local chr, str, ind = { }, "", 0
+ for k,v in charmetrics:gmatch("([%a]+) +(.-) *;") do
+ if k == 'C' then
+ if str ~= "" then characters[str] = chr end
+ chr = { }
+ str = ""
+ v = tonumber(v)
+ if v < 0 then
+ ind = ind + 1
+ else
+ ind = v
+ end
+ chr.index = ind
+ elseif k == 'WX' then
+ chr.width = v
+ elseif k == 'N' then
+ str = v
+ elseif k == 'B' then
+ local llx, lly, urx, ury = v:match("^ *(.-) +(.-) +(.-) +(.-)$")
+ chr.boundingbox = { tonumber(llx), tonumber(lly), tonumber(urx), tonumber(ury) }
+ elseif k == 'L' then
+ local plus, becomes = v:match("^(.-) +(.-)$")
+ if not chr.ligatures then chr.ligatures = { } end
+ chr.ligatures[plus] = becomes
+ end
+ end
+ if str ~= "" then
+ characters[str] = chr
+ end
+ end
+
+ local function get_kernpairs(data,kernpairs)
+ local characters = data.characters
+ for one, two, value in kernpairs:gmatch("KPX +(.-) +(.-) +(.-)\n") do
+ local chr = characters[one]
+ if chr then
+ if not chr.kerns then chr.kerns = { } end
+ chr.kerns[two] = tonumber(value)
+ end
+ end
+ end
+
+ local function get_variables(data,fontmetrics)
+ for key, rest in fontmetrics:gmatch("(%a+) *(.-)[\n\r]") do
+ if keys[key] then keys[key](data,rest) end
+ end
+ end
+
+ local function get_indexes(data,filename)
+ local trace = fonts.trace
+ local pfbname = input.find_file(texmf.instance,file.removesuffix(file.basename(filename))..".pfb","pfb") or ""
+ if pfbname ~= "" then
+ data.luatex = data.luatex or { }
+ data.luatex.filename = pfbname
+ local pfbblob = fontforge.open(pfbname)
+ if pfbblob then
+ local characters = data.characters
+ local pfbdata = fontforge.to_table(pfbblob)
+ --~ print(table.serialize(pfbdata))
+ if pfbdata then
+ local glyphs = pfbdata.glyphs
+ if glyphs then
+ if trace then
+ logs.report("load afm", string.format("getting index data from %s",pfbname))
+ end
+ -- local offset = (glyphs[0] and glyphs[0] != .notdef) or 0
+ for index, glyph in pairs(glyphs) do
+ local name = glyph.name
+ if name then
+ local char = characters[name]
+ if char then
+ if trace then
+ logs.report("load afm", string.format("glyph %s has index %s",name,index))
+ end
+ char.index = index
+ end
+ end
+ end
+ elseif trace then
+ logs.report("load afm", string.format("no glyph data in pfb file %s",pfbname))
+ end
+ elseif trace then
+ logs.report("load afm", string.format("no data in pfb file %s",pfbname))
+ end
+ elseif trace then
+ logs.report("load afm", string.format("invalid pfb file %s",pfbname))
+ end
+ elseif trace then
+ logs.report("load afm", string.format("no pfb file for %s",filename))
+ end
+ end
+
+ function fonts.afm.read_afm(filename)
+ local ok, afmblob, size = input.loadbinfile(texmf.instance,filename) -- has logging
+ -- local ok, afmblob = true, file.readdata(filename)
+ if ok and afmblob then
+ local data = {
+ version = version or '0',
+ characters = { },
+ filename = file.removesuffix(file.basename(filename))
+ }
+ afmblob = afmblob:gsub("StartCharMetrics(.-)EndCharMetrics", function(charmetrics)
+ if fonts.trace then
+ logs.report("load afm", "loading char metrics")
+ end
+ get_charmetrics(data,charmetrics,vector)
+ return ""
+ end)
+ afmblob = afmblob:gsub("StartKernPairs(.-)EndKernPairs", function(kernpairs)
+ if fonts.trace then
+ logs.report("load afm", "loading kern pairs")
+ end
+ get_kernpairs(data,kernpairs)
+ return ""
+ end)
+ afmblob = afmblob:gsub("StartFontMetrics%s+([%d%.]+)(.-)EndFontMetrics", function(version,fontmetrics)
+ if fonts.trace then
+ logs.report("load afm", "loading variables")
+ end
+ data.afmversion = version
+ get_variables(data,fontmetrics)
+ data.fontdimens = fonts.afm.scan_comment(fontmetrics) -- todo: all lpeg, no time now
+ return ""
+ end)
+ get_indexes(data,filename)
+ return data
+ else
+ if fonts.trace then
+ logs.report("load afm", "no valid afm file " .. filename)
+ end
+ return nil
+ end
+ end
+
+end
+
+--[[ldx--
+<p>We cache files. Caching is taken care of in the loader. We cheat a bit
+by adding ligatures and kern information to the afm derived data. That
+way we can set them faster when defining a font.</p>
+--ldx]]--
+
+function fonts.afm.load(filename)
+ local name = file.removesuffix(filename)
+ local data = containers.read(fonts.afm.cache(),name)
+ local size = lfs.attributes(name,"size") or 0
+ if data and data.size ~= size then
+ data = nil
+ end
+ if not data then
+ local foundname = input.find_file(texmf.instance,filename,'afm')
+ if foundname and foundname ~= "" then
+ data = fonts.afm.read_afm(foundname)
+ if data then
+ fonts.afm.unify(data,filename)
+ if fonts.afm.enhance_data then
+ fonts.afm.add_ligatures(data,'ligatures') -- easier this way
+ fonts.afm.add_ligatures(data,'texligatures') -- easier this way
+ fonts.afm.add_kerns(data) -- faster this way
+ end
+ logs.report("load afm","file size: " .. size)
+ data.size = size
+ logs.report("load afm","saving: in cache")
+ data = containers.write(fonts.afm.cache(), name, data)
+ end
+ end
+ end
+ return data
+end
+
+function fonts.afm.unify(data, filename)
+--~ local unicode, unicodes, private = fonts.enc.load('unicode').hash, { }, 0x0F0000
+ local unicode, unicodes, private = fonts.enc.load('unicode').hash, { }, fonts.private
+ for name, blob in pairs(data.characters) do
+ local code = unicode[name] -- or characters.name_to_unicode[name]
+ if not code then
+ local u = name:match("^uni(%x+)$")
+ code = u and tonumber(u,16)
+ if not code then
+ code = private
+ private = private + 1
+ logs.report("afm glyph", string.format("assigning private slot 0x%04X for unknown glyph name %s", code, name))
+ end
+ end
+ blob.unicode = code
+ unicodes[name] = code
+ end
+ data.luatex = {
+ filename = file.basename(filename),
+ -- version = fonts.afm.version,
+ unicodes = unicodes
+ }
+end
+
+--[[ldx--
+<p>These helpers extend the basic table with extra ligatures, texligatures
+and extra kerns. This saves quite some lookups later.</p>
+--ldx]]--
+
+function fonts.afm.add_ligatures(afmdata,ligatures)
+ local chars = afmdata.characters
+ for k,v in pairs(characters[ligatures]) do
+ local one = chars[k]
+ if one then
+ for _, b in pairs(v) do
+ two, three = b[1], b[2]
+ if two and three and chars[two] and chars[three] then
+ local ol = one[ligatures]
+ if ol then
+ if not ol[two] then -- was one.ligatures ... bug
+ ol[two] = three
+ end
+ else
+ one[ligatures] = { [two] = three }
+ end
+ end
+ end
+ end
+ end
+end
+
+--[[ldx--
+<p>We keep the extra kerns in separate kerning tables so that we can use
+them selectively.</p>
+--ldx]]--
+
+function fonts.afm.add_kerns(afmdata)
+ local chars = afmdata.characters
+ -- add complex with values of simplified when present
+ local function do_it_left(what)
+ for _,v in pairs(chars) do
+ if v.kerns then
+ local k = { }
+ for complex,simple in pairs(characters.uncomposed[what]) do
+ local ks = k[simple]
+ if ks and not k[complex] then
+ k[complex] = ks
+ end
+ end
+ if not table.is_empty(k) then
+ v.extrakerns = k
+ end
+ end
+ end
+ end
+ do_it_left("left")
+ do_it_left("both")
+ -- copy kerns from simple char to complex char unless set
+ local function do_it_copy(what)
+ for complex,simple in pairs(characters.uncomposed[what]) do
+ local c = chars[complex]
+ if c then -- optional
+ local s = chars[simple]
+ if s and s.kerns then
+ c.extrakerns = s.kerns -- ok ? no merge ?
+ end
+ end
+ end
+ end
+ do_it_copy("both")
+ do_it_copy("right")
+end
+
+--[[ldx--
+<p>The copying routine looks messy (and is indeed a bit messy).</p>
+--ldx]]--
+
+-- once we have otf sorted out (new format) we can try to make the afm
+-- cache similar to it (similar tables)
+
+function fonts.afm.add_dimensions(data) -- we need to normalize afm to otf i.e. indexed table instead of name
+ if data then
+ for n, d in pairs(data.characters) do
+ local bb = d.boundingbox
+ if bb then
+ local ht, dp = bb[4], -bb[2]
+ if ht ~= 0 then d.height = ht end
+ if dp ~= 0 then d.depth = dp end
+ end
+ d.name = n
+ end
+ end
+end
+
+function fonts.afm.copy_to_tfm(data)
+ if data and data.characters then
+ local tfm = { characters = { }, parameters = { } }
+ local afmcharacters = data.characters
+ local characters, parameters = tfm.characters, tfm.parameters
+ if afmcharacters then
+ for k, v in pairs(afmcharacters) do
+ characters[v.unicode] = { description = v }
+ end
+ end
+ tfm.encodingbytes = data.encodingbytes or 2
+ tfm.fullname = data.fullname
+ tfm.filename = data.filename
+ tfm.name = tfm.fullname -- data.name or tfm.fullname
+ tfm.type = "real"
+ tfm.units = 1000
+ tfm.stretch = stretch
+ tfm.slant = slant
+ tfm.direction = 0
+ tfm.boundarychar_label = 0
+ tfm.boundarychar = 65536
+ --~ tfm.false_boundarychar = 65536 -- produces invalid tfm in luatex
+ tfm.designsize = (data.designsize or 10)*65536
+ local spaceunits = 500
+ tfm.spacer = "500 units"
+ if data.isfixedpitch then
+ if afmcharacters['space'] and afmcharacters['space'].width then
+ spaceunits, tfm.spacer = afmcharacters['space'].width, "space"
+ elseif afmcharacters['emdash'] and afmcharacters['emdash'].width then -- funny default
+ spaceunits, tfm.spacer = afmcharacters['emdash'].width, "emdash"
+ elseif data.charwidth then
+ spaceunits, tfm.spacer = data.charwidth, "charwidth"
+ end
+ elseif afmcharacters['space'] and afmcharacters['space'].width then
+ spaceunits, tfm.spacer = afmcharacters['space'].width, "space"
+ elseif data.charwidth then
+ spaceunits, tfm.spacer = data.charwidth, "charwidth variable"
+ end
+ spaceunits = tonumber(spaceunits)
+ parameters.slant = 0
+ parameters.space = spaceunits
+ parameters.space_stretch = 500
+ parameters.space_shrink = 333
+ parameters.x_height = 400
+ parameters.quad = 1000
+ parameters.extra_space = 0
+ if spaceunits < 200 then
+ -- todo: warning
+ end
+ tfm.italicangle = data.italicangle
+ tfm.ascender = math.abs(data.ascender or 0)
+ tfm.descender = math.abs(data.descender or 0)
+ if data.italicangle then
+ parameters.slant = parameters.slant - math.round(math.tan(data.italicangle*math.pi/180))
+ end
+ if data.isfixedpitch then
+ parameters.space_stretch = 0
+ parameters.space_shrink = 0
+ elseif fonts.afm.syncspace then
+ parameters.space_stretch = spaceunits/2
+ parameters.space_shrink = spaceunits/3
+ end
+ if data.xheight and data.xheight > 0 then
+ parameters.x_height = data.xheight
+ elseif afmcharacters['x'] and afmcharacters['x'].height then
+ parameters.x_height = afmcharacters['x'].height or 0
+ end
+ local fd = data.fontdimens
+ if fd and fd[8] and fd[9] and fd[10] then -- math
+ for k,v in pairs(fd) do
+ parameters[k] = v
+ end
+ end
+ if table.is_empty(characters) then
+ return nil
+ else
+ return tfm
+ end
+ else
+ return nil
+ end
+end
+
+--[[ldx--
+<p>Originally we had features kind of hard coded for <l n='afm'/>
+files but since I expect to support more font formats, I decided
+to treat this fontformat like any other and handle features in a
+more configurable way.</p>
+--ldx]]--
+
+function fonts.afm.features.register(name,default)
+ fonts.afm.features.list[#fonts.afm.features.list+1] = name
+ fonts.afm.features.default[name] = default
+end
+
+function fonts.afm.set_features(tfmdata)
+ local shared = tfmdata.shared
+ local afmdata = shared.afmdata
+ -- elsewhere: shared.features = fonts.define.check(shared.features,fonts.afm.features.default)
+ local features = shared.features
+--~ texio.write_nl(table.serialize(features))
+ if not table.is_empty(features) then
+ local mode = tfmdata.mode or fonts.mode
+ local fi = fonts.initializers[mode]
+ if fi and fi.afm then
+ local function initialize(list) -- using tex lig and kerning
+ if list then
+ for _, f in ipairs(list) do
+ local value = features[f]
+ if value and fi.afm[f] then -- brr
+ if fonts.afm.trace_features then
+ logs.report("define afm",string.format("initializing feature %s to %s for mode %s for font %s",f,tostring(value),mode or 'unknown',tfmdata.name or 'unknown'))
+ end
+ fi.afm[f](tfmdata,value)
+ mode = tfmdata.mode or fonts.mode
+ fi = fonts.initializers[mode]
+ end
+ end
+ end
+ end
+ initialize(fonts.triggers)
+ initialize(fonts.afm.features.list)
+ initialize(fonts.manipulators)
+ end
+ local fm = fonts.methods[mode]
+ if fm and fm.afm then
+ local function register(list) -- node manipulations
+ if list then
+ for _, f in ipairs(list) do
+ if features[f] and fm.afm[f] then -- brr
+ if not shared.processors then -- maybe also predefine
+ shared.processors = { fm.afm[f] }
+ else
+ shared.processors[#shared.processors+1] = fm.afm[f]
+ end
+ end
+ end
+ end
+ end
+ register(fonts.afm.features.list)
+ end
+ end
+end
+
+function fonts.afm.check_features(specification)
+ local features, done = fonts.define.check(specification.features.normal,fonts.afm.features.default)
+ if done then
+ specification.features.normal = features
+ fonts.tfm.hash_instance(specification,true)
+ end
+end
+
+function fonts.afm.afm_to_tfm(specification)
+ local afmname = specification.filename or specification.name
+ local encoding, filename = afmname:match("^(.-)%-(.*)$") -- context: encoding-name.*
+ if encoding and filename and fonts.enc.known[encoding] then
+ fonts.tfm.set_normal_feature(specification,'encoding',encoding) -- will go away
+ if fonts.trace then
+ logs.report("load afm", string.format("stripping encoding prefix from filename %s",afmname))
+ end
+ afmname = filename
+ elseif specification.forced == "afm" then
+ if fonts.trace then
+ logs.report("load afm", string.format("forcing afm format for %s",afmname))
+ end
+ else
+ local tfmname = input.findbinfile(texmf.instance,afmname,"ofm") or ""
+ if tfmname ~= "" then
+ if fonts.trace then
+ logs.report("load afm", string.format("fallback from afm to tfm for %s",afmname))
+ end
+ afmname = ""
+ end
+ end
+ if afmname == "" then
+ return nil
+ else
+ fonts.afm.check_features(specification)
+ specification = fonts.define.resolve(specification) -- new, was forgotten
+ local features = specification.features.normal
+ local cache_id = specification.hash
+ local tfmdata = containers.read(fonts.tfm.cache(), cache_id) -- cache with features applied
+ if not tfmdata then
+ local afmdata = fonts.afm.load(afmname)
+ if not table.is_empty(afmdata) then
+ fonts.afm.add_dimensions(afmdata)
+ tfmdata = fonts.afm.copy_to_tfm(afmdata)
+ if not table.is_empty(tfmdata) then
+ tfmdata.shared = tfmdata.shared or { }
+ tfmdata.unique = tfmdata.unique or { }
+ tfmdata.shared.afmdata = afmdata
+ tfmdata.shared.features = features
+ fonts.afm.set_features(tfmdata)
+ end
+ elseif fonts.trace then
+ logs.report("load afm", string.format("no (valid) afm file found with name %s",afmname))
+ end
+ tfmdata = containers.write(fonts.tfm.cache(),cache_id,tfmdata)
+ end
+ return tfmdata
+ end
+end
+
+--[[ldx--
+<p>As soon as we could intercept the <l n='tfm'/> reader, I implemented an
+<l n='afm'/> reader. Since traditional <l n='pdftex'/> could use <l n='opentype'/>
+fonts with <l n='afm'/> companions, the following method also could handle
+those cases, but now that we can handle <l n='opentype'/> directly we no longer
+need this features.</p>
+--ldx]]--
+
+fonts.tfm.default_encoding = 'unicode'
+
+function fonts.tfm.set_normal_feature(specification,name,value)
+ if specification and name then
+ specification.features = specification.features or { }
+ specification.features.normal = specification.features.normal or { }
+ specification.features.normal[name] = value
+ end
+end
+
+function fonts.tfm.read_from_afm(specification)
+--~ local fullname = input.findbinfile(texmf.instance,specification.name,"afm") or ""
+--~ if fullname ~= "" then
+--~ specification.filename = fullname
+--~ end
+ local tfmtable = fonts.afm.afm_to_tfm(specification)
+ if tfmtable then
+ tfmtable.name = specification.name
+ tfmtable = fonts.tfm.scale(tfmtable, specification.size)
+ local afmdata = tfmtable.shared.afmdata
+ local filename = afmdata and afmdata.luatex and afmdata.luatex.filename
+ if not filename then
+ -- try to locate anyway and set afmdata.luatex.filename
+ end
+ if filename then
+ tfmtable.encodingbytes = 2
+ tfmtable.filename = input.findbinfile(texmf.instance,filename,"") or filename
+ tfmtable.fullname = afmdata.fontname or afmdata.fullname
+ tfmtable.format = 'type1'
+ tfmtable.name = afmdata.luatex.filename or tfmtable.fullname
+ end
+ if fonts.dontembed[filename] then
+ tfmtable.file = nil
+ end
+ fonts.logger.save(tfmtable,'afm',specification)
+ end
+ return tfmtable
+end
+
+--[[ldx--
+<p>Here comes the implementation of a few features. We only implement
+those that make sense for this format.</p>
+--ldx]]--
+
+function fonts.afm.features.prepare_ligatures(tfmdata,ligatures,value) -- probably faulty / check index
+ if value then
+ local charlist = tfmdata.shared.afmdata.characters
+ for k,v in pairs(tfmdata.characters) do
+ local ac = charlist[v.name]
+ if ac then
+ local al = ac[ligatures]
+ if al then
+ local ligatures = { }
+ for k,v in pairs(al) do
+ ligatures[charlist[k].unicode] = {
+ char = charlist[v].unicode,
+ type = 0
+ }
+ end
+ v.ligatures = ligatures
+ end
+ end
+ end
+ end
+end
+
+function fonts.afm.features.prepare_kerns(tfmdata,kerns,value)
+ if value then
+ local charlist = tfmdata.shared.afmdata.characters
+ for _, chr in pairs(tfmdata.characters) do
+ local newkerns = charlist[chr.description.name][kerns]
+ if newkerns then
+ local t = chr.kerns or { }
+ for k,v in pairs(newkerns) do
+ t[charlist[k].unicode] = v
+ end
+ chr.kerns = t
+ end
+ end
+ end
+end
+
+-- hm, register?
+
+function fonts.initializers.base.afm.ligatures (tfmdata,value) fonts.afm.features.prepare_ligatures(tfmdata,'ligatures', value) end
+function fonts.initializers.base.afm.texligatures(tfmdata,value) fonts.afm.features.prepare_ligatures(tfmdata,'texligatures',value) end
+function fonts.initializers.base.afm.kerns (tfmdata,value) fonts.afm.features.prepare_kerns (tfmdata,'kerns', value) end
+function fonts.initializers.base.afm.extrakerns (tfmdata,value) fonts.afm.features.prepare_kerns (tfmdata,'extrakerns', value) end
+
+fonts.afm.features.register('liga',true)
+fonts.afm.features.register('kerns',true)
+fonts.afm.features.register('extrakerns') -- needed?
+
+fonts.initializers.node.afm.ligatures = fonts.initializers.base.afm.ligatures
+fonts.initializers.node.afm.texligatures = fonts.initializers.base.afm.texligatures
+fonts.initializers.node.afm.kerns = fonts.initializers.base.afm.kerns
+fonts.initializers.node.afm.extrakerns = fonts.initializers.base.afm.extrakerns
+
+fonts.initializers.base.afm.liga = fonts.initializers.base.afm.ligatures
+fonts.initializers.node.afm.liga = fonts.initializers.base.afm.ligatures
+fonts.initializers.base.afm.tlig = fonts.initializers.base.afm.texligatures
+fonts.initializers.node.afm.tlig = fonts.initializers.base.afm.texligatures
+
+fonts.initializers.base.afm.trep = fonts.tfm.replacements
+fonts.initializers.node.afm.trep = fonts.tfm.replacements
+
+fonts.afm.features.register('tlig',true) -- todo: also proper features for afm
+fonts.afm.features.register('trep',true) -- todo: also proper features for afm
+
+-- tfm features
+
+fonts.initializers.base.afm.equaldigits = fonts.initializers.common.equaldigits
+fonts.initializers.node.afm.equaldigits = fonts.initializers.common.equaldigits
+fonts.initializers.base.afm.lineheight = fonts.initializers.common.lineheight
+fonts.initializers.node.afm.lineheight = fonts.initializers.common.lineheight
+
+-- vf features
+
+fonts.initializers.base.afm.compose = fonts.initializers.common.compose
+fonts.initializers.node.afm.compose = fonts.initializers.common.compose
+
+-- afm specific, encodings ...kind of obsolete
+
+fonts.afm.features.register('encoding')
+
+fonts.initializers.base.afm.encoding = fonts.initializers.common.encoding
+fonts.initializers.node.afm.encoding = fonts.initializers.common.encoding
+
+-- todo: oldstyle smallcaps as features for afm files (use with care)
+
+fonts.initializers.base.afm.onum = fonts.initializers.common.oldstyle
+fonts.initializers.base.afm.smcp = fonts.initializers.common.smallcaps
+fonts.initializers.base.afm.fkcp = fonts.initializers.common.fakecaps
+
+fonts.afm.features.register('onum',false)
+fonts.afm.features.register('smcp',false)
+fonts.afm.features.register('fkcp',false)
+
diff --git a/Master/texmf-dist/tex/context/base/font-def.lua b/Master/texmf-dist/tex/context/base/font-def.lua
new file mode 100644
index 00000000000..af6f5f39460
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/font-def.lua
@@ -0,0 +1,684 @@
+if not modules then modules = { } end modules ['font-def'] = {
+ version = 1.001,
+ comment = "companion to font-ini.tex",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- check reuse of lmroman1o-regular vs lmr10
+
+--[[ldx--
+<p>Here we deal with defining fonts. We do so by intercepting the
+default loader that only handles <l n='tfm'/>.</p>
+--ldx]]--
+
+fonts = fonts or { }
+fonts.define = fonts.define or { }
+fonts.tfm = fonts.tfm or { }
+fonts.vf = fonts.vf or { }
+fonts.used = fonts.used or { }
+
+fonts.tfm.version = 1.01
+fonts.tfm.cache = containers.define("fonts", "tfm", fonts.tfm.version, false) -- better in font-tfm
+
+--[[ldx--
+<p>Choosing a font by name and specififying its size is only part of the
+game. In order to prevent complex commands, <l n='xetex'/> introduced
+a method to pass feature information as part of the font name. At the
+risk of introducing nasty parsing and compatinility problems, this
+syntax was expanded over time.</p>
+
+<p>For the sake of users who have defined fonts using that syntax, we
+will support it, but we will provide additional methods as well.
+Normally users will not use this direct way, but use a more abstract
+interface.</p>
+ --ldx]]--
+
+--~ name, kind, features = fonts.features.split_xetex("blabla / B : + lnum ; foo = bar ; - whatever ; whow ; + hans ; test = yes")
+
+fonts.define.method = 3 -- 1: tfm 2: tfm and if not then afm 3: afm and if not then tfm
+fonts.define.auto_afm = true
+fonts.define.auto_otf = true
+fonts.define.specify = fonts.define.specify or { }
+fonts.define.splitsymbols = ""
+fonts.define.methods = fonts.define.methods or { }
+
+fonts.tfm.fonts = fonts.tfm.fonts or { }
+fonts.tfm.readers = fonts.tfm.readers or { }
+fonts.tfm.internalized = fonts.tfm.internalized or { } -- internal tex numbers
+fonts.tfm.id = fonts.tfm.id or { } -- font data, maybe use just fonts.ids (faster lookup)
+
+fonts.tfm.readers.sequence = { 'otf', 'ttf', 'afm', 'tfm' }
+
+--[[ldx--
+<p>We hardly gain anything when we cache the final (pre scaled)
+<l n='tfm'/> table. But it can be handy for debugging.</p>
+--ldx]]--
+
+fonts.version = 1.05
+fonts.cache = containers.define("fonts", "def", fonts.version, false)
+
+--[[ldx--
+<p>We can prefix a font specification by <type>name:</type> or
+<type>file:</type>. The first case will result in a lookup in the
+synonym table.</p>
+
+<typing>
+[ name: | file: ] identifier [ separator [ specification ] ]
+</typing>
+
+<p>The following function split the font specification into components
+and prepares a table that will move along as we proceed.</p>
+--ldx]]--
+
+function fonts.define.analyze(name, size, id)
+ name = name or 'unknown'
+ local specification = name
+ local lookup, rest = specification:match("^(.-):(.+)$")
+ local sub = ""
+ if lookup == 'file' or lookup == 'name' then
+ name = rest
+ else
+ lookup = 'file'
+ end
+ local font, method, detail = name:match("^(.-)(["..fonts.define.splitsymbols.."])(.+)$")
+ if method and detail then
+ name = font
+ else
+ method, detail = "", ""
+ end
+ local mainfont, subfont = name:match("^(.*-)(%(.*-)(%)$")
+ if mainfont and subfont then
+ name, sub = mainfont, subfont
+ end
+ size = size or (65536*10)
+ return {
+ lookup = lookup, -- forced type
+ specification = specification, -- full specification
+ size = size, -- size in scaled points or -1000*n
+ name = name, -- font or filename
+ sub = sub, -- subfont (eg in ttc)
+ method = method, -- specification method
+ detail = detail, -- specification
+ resolved = "", -- resolved font name
+ forced = "", -- forced loader
+ id = id, -- font id
+ features = { }, -- preprocessed features
+ -- hash = nil
+ -- filename = nil,
+ -- encoding = nil,
+ -- format = nil,
+ }
+end
+
+function fonts.define.register_split(symbol,action)
+ fonts.define.splitsymbols = fonts.define.splitsymbols .. "%" .. symbol
+ fonts.define.specify[symbol] = action
+end
+
+--[[ldx--
+<p>A unique hash value is generated by:</p>
+--ldx]]--
+
+function fonts.tfm.hash_features(specification)
+ if specification.features then
+ local t = { }
+ local normal = specification.features.normal
+ if not table.is_empty(normal) then
+ for _, v in pairs(table.sortedkeys(normal)) do
+ if v ~= "number" then
+ t[#t+1] = v .. '=' .. tostring(normal[v])
+ end
+ end
+ end
+ local vtf = specification.features.vtf
+ if not table.is_empty(vtf) then
+ for _, v in pairs(table.sortedkeys(vtf)) do
+ t[#t+1] = v .. '=' .. tostring(vtf[v])
+ end
+ end
+ if next(t) then
+ return table.concat(t,"+")
+ end
+ end
+ return "unknown"
+end
+
+--~ function fonts.tfm.hash_instance(specification)
+--~ if not specification.hash then
+--~ specification.hash = fonts.tfm.hash_features(specification)
+--~ end
+--~ return specification.hash .. ' @ ' .. tostring(specification.size)
+--~ end
+
+fonts.designsizes = { }
+
+--[[ldx--
+<p>In principle we can share tfm tables when we are in node for a font, but then
+we need to define a font switch as an id/attr switch which is no fun, so in that
+case users can best use dynamic features ... so, we will not use that speedup. Okay,
+when we get rid of base mode we can optimize even further by sharing, but then we
+loose our testcases for <l n='luatex'/>.</p>
+--ldx]]--
+
+function fonts.tfm.hash_instance(specification,force)
+ local hash, size = specification.hash, specification.size
+ if force or not hash then
+ hash = fonts.tfm.hash_features(specification)
+ specification.hash = hash
+ end
+ if size < 1000 and fonts.designsizes[hash] then
+ size = fonts.tfm.scaled(size, fonts.designsizes[hash])
+ specification.size = size
+ end
+ return hash .. ' @ ' .. tostring(size)
+end
+
+--[[ldx--
+<p>We can resolve the filename using the next function:</p>
+--ldx]]--
+
+function fonts.define.resolve(specification)
+ if specification.lookup == 'name' then
+ specification.resolved, specification.sub = fonts.names.resolve(specification.name,specification.sub)
+ if specification.resolved then
+ specification.forced = file.extname(specification.resolved)
+ specification.name = file.removesuffix(specification.resolved)
+ end
+ elseif specification.lookup == 'file' then
+ specification.forced = file.extname(specification.name)
+ specification.name = file.removesuffix(specification.name)
+ end
+ if specification.forced == "" then
+ specification.forced = nil
+ end
+ specification.hash = specification.name .. ' @ ' .. fonts.tfm.hash_features(specification)
+ if specification.sub and specification.sub ~= "" then
+ specification.hash = specification.sub .. ' @ ' .. specification.hash
+ end
+ return specification
+end
+
+--[[ldx--
+<p>The main read function either uses a forced reader (as determined by
+a lookup) or tries to resolve the name using the list of readers.</p>
+
+<p>We need to cache when possible. We do cache raw tfm data (from <l
+n='tfm'/>, <l n='afm'/> or <l n='otf'/>). After that we can cache based
+on specificstion (name) and size, that is, <l n='tex'/> only needs a number
+for an already loaded fonts. However, it may make sense to cache fonts
+before they're scaled as well (store <l n='tfm'/>'s with applied methods
+and features). However, there may be a relation between the size and
+features (esp in virtual fonts) so let's not do that now.</p>
+
+<p>Watch out, here we do load a font, but we don't prepare the
+specification yet.</p>
+--ldx]]--
+
+function fonts.tfm.read(specification)
+ garbagecollector.push()
+ input.starttiming(fonts)
+ local hash = fonts.tfm.hash_instance(specification)
+ local tfmtable = fonts.tfm.fonts[hash] -- hashes by size !
+ if not tfmtable then
+ if specification.forced and specification.forced ~= "" then
+ tfmtable = fonts.tfm.readers[specification.forced](specification)
+ if not tfmtable then
+ logs.error("define font",string.format("forced type %s of %s not found",specification.forced,specification.name))
+ end
+ else
+ for _, reader in ipairs(fonts.tfm.readers.sequence) do
+ if fonts.tfm.readers[reader] then -- not really needed
+ if fonts.trace then
+ logs.report("define font",string.format("trying type %s for %s with file %s",reader,specification.name,specification.filename or "unknown"))
+ end
+ tfmtable = fonts.tfm.readers[reader](specification)
+ if tfmtable then break end
+ end
+ end
+ end
+ if tfmtable then
+ if tfmtable.filename and fonts.dontembed[tfmtable.filename] then
+ tfmtable.embedding = "no"
+ else
+ tfmtable.embedding = "subset"
+ end
+ fonts.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
+ input.stoptiming(fonts)
+ garbagecollector.pop()
+ if not tfmtable then
+ logs.error("define font",string.format("font with name %s is not found",specification.name))
+ end
+ return tfmtable
+end
+
+--[[ldx--
+<p>For virtual fonts we need a slightly different approach:</p>
+--ldx]]--
+
+function fonts.tfm.read_and_define(name,size) -- no id
+ local specification = fonts.define.analyze(name,size,nil)
+ if specification.method and fonts.define.specify[specification.method] then
+ specification = fonts.define.specify[specification.method](specification)
+ end
+ specification = fonts.define.resolve(specification)
+ local hash = fonts.tfm.hash_instance(specification)
+ local id = fonts.tfm.internalized[hash]
+ if not id then
+ local fontdata = fonts.tfm.read(specification)
+ if fontdata then
+ if not fonts.tfm.internalized[hash] then
+ id = font.define(fontdata)
+ fonts.tfm.id[id] = fontdata
+ fonts.tfm.internalized[hash] = id
+ if fonts.trace then
+ logs.report("define font", string.format("loading at 1 id %s, hash: %s",id,hash))
+ end
+ else
+ id = fonts.tfm.internalized[hash]
+ end
+ else
+ id = 0 -- signal
+ end
+ end
+ return fonts.tfm.id[id], id
+end
+
+--[[ldx--
+<p>A naive callback could be the following:</p>
+
+<code>
+callback.register('define_font', function(name,size,id)
+ return fonts.define.read(fonts.define.resolve(fonts.define.analyze(name,size,id)))
+end)
+</code>
+--ldx]]--
+
+
+--[[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]]--
+
+function fonts.tfm.readers.opentype(specification,suffix,what)
+ if fonts.define.auto_otf then
+ local fullname, tfmtable = nil, nil
+ fullname = input.findbinfile(texmf.instance,specification.name,suffix) or ""
+ if fullname == "" then
+ local fb = fonts.names.old_to_new[specification.name]
+ if fb then
+ fullname = input.findbinfile(texmf.instance,fb,suffix) or ""
+ end
+ end
+ if fullname == "" then
+ local fb = fonts.names.new_to_old[specification.name]
+ if fb then
+ fullname = input.findbinfile(texmf.instance,fb,suffix) or ""
+ end
+ end
+ if fullname ~= "" then
+ specification.filename, specification.format = fullname, what -- hm, so we do set the filename, then
+ tfmtable = fonts.tfm.read_from_open_type(specification) -- we need to do it for all matches / todo
+ end
+ return tfmtable
+ else
+ return nil
+ end
+end
+
+function fonts.tfm.readers.otf(specification) return fonts.tfm.readers.opentype(specification,"otf","opentype") end
+function fonts.tfm.readers.ttf(specification) return fonts.tfm.readers.opentype(specification,"ttf","truetype") end
+function fonts.tfm.readers.ttc(specification) return fonts.tfm.readers.opentype(specification,"ttf","truetype") end -- !!
+
+function fonts.tfm.readers.afm(specification,method)
+ local fullname, tfmtable = nil, nil
+ method = method or fonts.define.method
+ if method == 2 then
+ fullname = input.findbinfile(texmf.instance,specification.name,"ofm") or ""
+ if fullname == "" then
+ tfmtable = fonts.tfm.read_from_afm(specification)
+ else -- redundant
+ specification.filename = fullname
+ tfmtable = fonts.tfm.read_from_tfm(specification)
+ end
+ elseif method == 3 then -- maybe also findbinfile here
+ if fonts.define.auto_afm then
+ tfmtable = fonts.tfm.read_from_afm(specification)
+ end
+ elseif method == 4 then -- maybe also findbinfile here
+ tfmtable = fonts.tfm.read_from_afm(specification)
+ end
+ return tfmtable
+end
+
+function fonts.tfm.readers.tfm(specification)
+ local fullname, tfmtable = nil, nil
+ tfmtable = fonts.tfm.read_from_tfm(specification)
+ return tfmtable
+end
+
+--[[ldx--
+<p>So far we haven't really dealt with features (or whatever we want
+to pass along with the font definition. We distinguish the following
+situations:</p>
+situations:</p>
+
+<code>
+name:xetex like specs
+name@virtual font spec
+name*context specification
+</code>
+
+<p>Of course one can always define more.</p>
+--ldx]]--
+
+function fonts.define.specify.predefined(specification)
+ if specification.detail ~= "" and fonts.define.methods[specification.detail] then
+ specification.features.vtf = { preset = specification.detail }
+ end
+ return specification
+end
+
+fonts.define.register_split("@", fonts.define.specify.predefined)
+
+function fonts.define.specify.colonized(specification) -- xetex mode
+ local list = { }
+ if specification.detail and specification.detail ~= "" then
+ local expanded_features = { }
+ local function expand(features)
+ for _,v in pairs(features:split(";")) do
+ expanded_features[#expanded_features+1] = v
+ end
+ end
+ expand(specification.detail)
+ for _,v in pairs(expanded_features) do
+ local a, b = v:match("^%s*(%S+)%s*=%s*(%S+)%s*$")
+ if a and b then
+ list[a] = b:is_boolean()
+ if type(list[a]) == "nil" then
+ list[a] = b
+ end
+ else
+ local a, b = v:match("^%s*([%+%-]?)%s*(%S+)%s*$")
+ if a and b then
+ list[b] = a ~= "-"
+ end
+ end
+ end
+ end
+ specification.features.normal = list
+ return specification
+end
+
+function fonts.tfm.make(specification)
+ local fvm = fonts.define.methods[specification.features.vtf.preset]
+ if fvm then
+ return fvm(specification)
+ else
+ return nil
+ end
+end
+
+fonts.define.register_split(":", fonts.define.specify.colonized)
+
+fonts.define.specify.context_setups = fonts.define.specify.context_setups or { }
+fonts.define.specify.context_numbers = fonts.define.specify.context_numbers or { }
+fonts.define.specify.synonyms = fonts.define.specify.synonyms or { }
+
+input.storage.register(false,"fonts/setups" , fonts.define.specify.context_setups , "fonts.define.specify.context_setups" )
+input.storage.register(false,"fonts/numbers", fonts.define.specify.context_numbers, "fonts.define.specify.context_numbers")
+
+--~ local t = aux.settings_to_hash(features)
+--~ for k,v in pairs(t) do
+--~ k = synonyms[k] or k
+--~ t[k] = v:is_boolean()
+--~ if type(t[k]) == "nil" then
+--~ t[k] = v
+--~ end
+--~ end
+
+fonts.triggers = fonts.triggers or { }
+
+function fonts.define.specify.preset_context(name,parent,features)
+ if features == "" then
+ if parent:find("=") then
+ features = parent
+ parent = ""
+ end
+ end
+ local fds = fonts.define.specify
+ local setups, numbers, synonyms = fds.context_setups, fds.context_numbers, fds.synonyms
+ local number = (setups[name] and setups[name].number) or 0
+ local t = (features == "" and { }) or fonts.otf.meanings.normalize(aux.settings_to_hash(features))
+ -- todo: synonyms, and not otf bound
+ if parent ~= "" then
+ for p in parent:gmatch("[^, ]+") do
+ local s = setups[p]
+ if s then
+ for k,v in pairs(s) do
+ if t[k] == nil then
+ t[k] = v
+ end
+ end
+ end
+ end
+ end
+ -- these are auto set so in order to prevent redundant definitions
+ -- we need to preset them (we hash the features and adding a default
+ -- setting during initialization may result in a different hash)
+ local default = fonts.otf.features.default
+ for k,v in pairs(fonts.triggers) do
+ if type(t[v]) == "nil" then
+ local vv = default[v]
+ if vv then t[v] = vv end
+ end
+ end
+ -- sparse 'm so that we get a better hash and less test (experimental
+ -- optimization)
+ local tt = { }
+ for k,v in pairs(t) do
+ if v then tt[k] = v end
+ end
+ -- needed for dynamic features
+ if number == 0 then
+ numbers[#numbers+1] = name
+ tt.number = #numbers
+ else
+ tt.number = number
+ end
+ setups[name] = tt
+end
+
+--~ function fonts.define.specify.context_number(name)
+--~ local s = fonts.define.specify.context_setups[name]
+--~ return (s and s.number) or -1
+--~ end
+
+do
+
+ -- here we clone features according to languages
+
+ local default = 0
+ local setups = fonts.define.specify.context_setups
+ local numbers = fonts.define.specify.context_numbers
+
+ function fonts.define.specify.context_number(name)
+ local t = setups[name]
+ if not t then
+ return default
+ elseif t.auto then
+ local lng = tonumber(tex.language)
+ local tag = name .. ":" .. lng
+ local s = setups[tag]
+ if s then
+ return s.number or default
+ else
+ local script, language = languages.association(lng)
+ if t.script ~= script or t.language ~= language then
+ local s = table.fastcopy(t)
+ local n = #numbers + 1
+ setups[tag] = s
+ numbers[n] = tag
+ s.number = n
+ s.script = script
+ s.language = language
+ return n
+ else
+ setups[tag] = t
+ return t.number or default
+ end
+ end
+ else
+ return t.number or default
+ end
+ end
+
+end
+
+function fonts.define.specify.context_tostring(name,kind,separator,yes,no,strict,omit)
+ return aux.hash_to_string(table.merged(fonts[kind].features.default or {},fonts.define.specify.context_setups[name] or {}),separator,yes,no,strict,omit)
+end
+
+function fonts.define.specify.split_context(features)
+ if fonts.define.specify.context_setups[features] then
+ return fonts.define.specify.context_setups[features]
+ else -- ? ? ?
+ return fonts.define.specify.preset_context("***",features)
+ end
+end
+
+function fonts.define.specify.starred(features)
+ if features.detail and features.detail ~= "" then
+ features.features.normal = fonts.define.specify.split_context(features.detail)
+ else
+ features.features.normal = { }
+ end
+ return features
+end
+
+fonts.define.register_split('*',fonts.define.specify.starred)
+
+--[[ldx--
+<p>We need to check for default features. For this we provide
+a helper function.</p>
+--ldx]]--
+
+function fonts.define.check(features,defaults) -- nb adapts features !
+ local done = false
+ if table.is_empty(features) then
+ features, done = table.fastcopy(defaults), true
+ else
+ for k,v in pairs(defaults) do
+ if features[k] == nil then
+ features[k], done = v, true
+ end
+ end
+ end
+ return features, done -- done signals a change
+end
+
+--[[ldx--
+<p>So far the specifyers. Now comes the real definer. Here we cache
+based on id's. Here we also intercept the virtual font handler. Since
+it evolved stepwise I may rewrite this bit (combine code).</p>
+
+In the previously defined reader (the one resulting in a <l n='tfm'/>
+table) we cached the (scaled) instances. Here we cache them again, but
+this time based on id. We could combine this in one cache but this does
+not gain much. By the way, passing id's back to in the callback was
+introduced later in the development.</p>
+--ldx]]--
+
+function fonts.define.read(name,size,id)
+ local specification = fonts.define.analyze(name,size,id)
+ if specification.method and fonts.define.specify[specification.method] then
+ specification = fonts.define.specify[specification.method](specification)
+ end
+ specification = fonts.define.resolve(specification)
+ local hash = fonts.tfm.hash_instance(specification)
+ if true then
+ --~ local fontdata = containers.read(fonts.cache(),hash) -- for tracing purposes
+ end
+ local fontdata = fonts.tfm.internalized[hash] -- id
+ if not fontdata then
+ if specification.features.vtf and specification.features.vtf.preset then
+ fontdata = fonts.tfm.make(specification)
+ else
+ fontdata = fonts.tfm.read(specification)
+ if fontdata then
+ fonts.tfm.check_virtual_id(fontdata)
+ end
+ end
+ if true then
+ --~ fontdata = containers.write(fonts.cache(),hash,fontdata) -- for tracing purposes
+ end
+ if not fonts.tfm.internalized[hash] then
+ fonts.tfm.id[id] = fontdata
+ fonts.tfm.internalized[hash] = id
+ if fonts.trace then
+ logs.report("define font", string.format("loading at 2 id %s, hash: %s",id,hash))
+ end
+ else
+ fontdata = fonts.tfm.internalized[hash]
+ end
+ end
+ if not fontdata then
+ logs.error("define font", string.format("unknown font %s, loading aborted",specification.name))
+ elseif fonts.trace and type(fontdata) == "table" then
+ logs.report("define font",string.format("using %s font with id %s, n:%s s:%s b:%s e:%s p:%s f:%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
+ return fontdata
+end
+
+--~ table.insert(fonts.tfm.readers.sequence,1,'vtf')
+
+--~ function fonts.tfm.readers.vtf(specification)
+--~ if specification.features.vtf and specification.features.vtf.preset then
+--~ return fonts.tfm.make(specification)
+--~ else
+--~ return nil
+--~ end
+--~ end
+
+function fonts.vf.find(name)
+ name = file.removesuffix(file.basename(name))
+ if fonts.tfm.resolve_vf then
+ local format = fonts.logger.format(name)
+ if format == 'tfm' or format == 'ofm' then
+ if fonts.trace then
+ logs.report("define font",string.format("locating vf for %s",name))
+ end
+ return input.findbinfile(texmf.instance,name,"ovf")
+ else
+ if fonts.trace then
+ logs.report("define font",string.format("vf for %s is already taken care of",name))
+ end
+ return nil -- ""
+ end
+ else
+ if fonts.trace then
+ logs.report("define font",string.format("locating vf for %s",name))
+ end
+ return input.findbinfile(texmf.instance,name,"ovf")
+ end
+end
+
+--[[ldx--
+<p>We overload both the <l n='tfm'/> and <l n='vf'/> readers.</p>
+--ldx]]--
+
+callback.register('define_font' , fonts.define.read)
+callback.register('find_vf_file', fonts.vf.find ) -- not that relevant any more
diff --git a/Master/texmf-dist/tex/context/base/font-enc.lua b/Master/texmf-dist/tex/context/base/font-enc.lua
new file mode 100644
index 00000000000..fc77aefb946
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/font-enc.lua
@@ -0,0 +1,120 @@
+if not modules then modules = { } end modules ['font-enc'] = {
+ version = 1.001,
+ comment = "companion to font-ini.tex",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+--[[ldx--
+<p>Because encodings are going to disappear, we don't bother defining
+them in tables. But we may do so some day, for consistency.</p>
+--ldx]]--
+
+fonts.enc = fonts.enc or { }
+fonts.enc.version = 1.03
+fonts.enc.cache = containers.define("fonts", "enc", fonts.enc.version, true)
+
+fonts.enc.known = {
+ texnansi = true,
+ ec = true,
+ qx = true,
+ t5 = true,
+ t2a = true,
+ t2b = true,
+ t2c = true,
+ unicode = true
+}
+
+function fonts.enc.is_known(encoding)
+ return containers.is_valid(fonts.enc.cache(),encoding)
+end
+
+--[[ldx--
+<p>An encoding file looks like this:</p>
+
+<typing>
+/TeXnANSIEncoding [
+/.notdef
+/Euro
+...
+/ydieresis
+] def
+</typing>
+
+<p>Beware! The generic encoding files don't always apply to the ones that
+ship with fonts. This has to do with the fact that names follow (slightly)
+different standards. However, the fonts where this applies to (for instance
+Latin Modern or <l n='tex'> Gyre) come in OpenType variants too, so these
+will be used.</p>
+--ldx]]--
+
+function fonts.enc.load(filename)
+ local name = file.removesuffix(filename)
+ local data = containers.read(fonts.enc.cache(),name)
+ if data then
+ return data
+ end
+ if name == "unicode" then
+ data = fonts.enc.make_unicode_vector() -- special case, no tex file for this
+ end
+ if data then
+ return data
+ end
+ local vector, tag, hash, unicodes = { }, "", { }, { }
+ local foundname = input.find_file(texmf.instance,filename,'enc')
+ if foundname and foundname ~= "" then
+ local ok, encoding, size = input.loadbinfile(texmf.instance,foundname)
+ if ok and encoding then
+ local enccodes = characters.context.enccodes
+ encoding = encoding:gsub("%%(.-)\n","")
+ local tag, vec = encoding:match("/(%w+)%s*%[(.*)%]%s*def")
+ local i = 0
+ for ch in vec:gmatch("/([%a%d%.]+)") do
+ if ch ~= ".notdef" then
+ vector[i] = ch
+ if not hash[ch] then
+ hash[ch] = i
+ else
+ -- duplicate, play safe for tex ligs and take first
+ end
+ if enccodes[ch] then
+ unicodes[enccodes[ch]] = i
+ end
+ end
+ i = i + 1
+ end
+ end
+ end
+ local data = {
+ name=name,
+ tag=tag,
+ vector=vector,
+ hash=hash,
+ unicodes=unicodes
+ }
+ return containers.write(fonts.enc.cache(), name, data)
+end
+
+--[[ldx--
+<p>There is no unicode encoding but for practical purposed we define
+one.</p>
+--ldx]]--
+
+-- maybe make this a function:
+
+function fonts.enc.make_unicode_vector()
+ local vector, hash = { }, { }
+ for code, v in pairs(characters.data) do
+ local name = v.adobename
+ if name then
+ vector[code], hash[name] = name, code
+ else
+ vector[code] = '.notdef'
+ end
+ end
+ for name, code in pairs(characters.synonyms) do
+ vector[code], hash[name] = name, code
+ end
+ return containers.write(fonts.enc.cache(), 'unicode', { name='unicode', tag='unicode', vector=vector, hash=hash })
+end
diff --git a/Master/texmf-dist/tex/context/base/font-ext.lua b/Master/texmf-dist/tex/context/base/font-ext.lua
new file mode 100644
index 00000000000..2b360c57c5e
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/font-ext.lua
@@ -0,0 +1,225 @@
+if not modules then modules = { } end modules ['font-ext'] = {
+ version = 1.001,
+ comment = "companion to font-ini.tex and hand-ini.tex",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+local byte = string.byte
+
+-- -- -- -- -- --
+-- expansion (hz)
+-- -- -- -- -- --
+
+fonts.expansions = fonts.expansions or { }
+fonts.expansions.classes = fonts.expansions.classes or { }
+fonts.expansions.vectors = fonts.expansions.vectors or { }
+
+-- beware, pdftex itself uses percentages * 10
+
+fonts.expansions.classes.preset = { stretch = 2, shrink = 2, step = .5, factor = 1 }
+
+function commands.setupfontexpansion(class,settings)
+ aux.getparameters(fonts.expansions.classes,class,'preset',settings)
+end
+
+fonts.expansions.classes['quality'] = {
+ stretch = 2, shrink = 2, step = .5, vector = 'default', factor = 1
+}
+
+fonts.expansions.vectors['default'] = {
+ [byte('A')] = 0.5, [byte('B')] = 0.7, [byte('C')] = 0.7, [byte('D')] = 0.5, [byte('E')] = 0.7,
+ [byte('F')] = 0.7, [byte('G')] = 0.5, [byte('H')] = 0.7, [byte('K')] = 0.7, [byte('M')] = 0.7,
+ [byte('N')] = 0.7, [byte('O')] = 0.5, [byte('P')] = 0.7, [byte('Q')] = 0.5, [byte('R')] = 0.7,
+ [byte('S')] = 0.7, [byte('U')] = 0.7, [byte('W')] = 0.7, [byte('Z')] = 0.7,
+ [byte('a')] = 0.7, [byte('b')] = 0.7, [byte('c')] = 0.7, [byte('d')] = 0.7, [byte('e')] = 0.7,
+ [byte('g')] = 0.7, [byte('h')] = 0.7, [byte('k')] = 0.7, [byte('m')] = 0.7, [byte('n')] = 0.7,
+ [byte('o')] = 0.7, [byte('p')] = 0.7, [byte('q')] = 0.7, [byte('s')] = 0.7, [byte('u')] = 0.7,
+ [byte('w')] = 0.7, [byte('z')] = 0.7,
+ [byte('2')] = 0.7, [byte('3')] = 0.7, [byte('6')] = 0.7, [byte('8')] = 0.7, [byte('9')] = 0.7,
+}
+
+function fonts.initializers.common.expansion(tfmdata,value)
+ if value then
+ local class = fonts.expansions.classes[value]
+ if class then
+ local vector = fonts.expansions.vectors[class.vector]
+ if vector then
+ tfmdata.stretch = (class.stretch or 0) * 10
+ tfmdata.shrink = (class.shrink or 0) * 10
+ tfmdata.step = (class.step or 0) * 10
+ tfmdata.auto_expand = true
+ local factor = class.factor or 1
+ local data = characters.data
+ for i, chr in pairs(tfmdata.characters) do
+ local v = vector[i]
+ if not v then
+ local d = data[i]
+ if d then
+ local s = d.shcode
+ if not s then
+ -- sorry
+ elseif type(s) == "table" then
+ v = ((vector[s[1]] or 0) + (vector[s[#s]] or 0)) / 2
+ else
+ v = vector[s] or 0
+ end
+ end
+ end
+ if v and v ~= 0 then
+ chr.expansion_factor = v*factor
+ else -- can be option
+ chr.expansion_factor = factor
+ end
+ end
+ end
+ end
+ end
+end
+
+table.insert(fonts.manipulators,"expansion")
+
+fonts.initializers.base.otf.expansion = fonts.initializers.common.expansion
+fonts.initializers.node.otf.expansion = fonts.initializers.common.expansion
+
+fonts.initializers.base.afm.expansion = fonts.initializers.common.expansion
+fonts.initializers.node.afm.expansion = fonts.initializers.common.expansion
+
+-- -- -- -- -- --
+-- protrusion
+-- -- -- -- -- --
+
+fonts.protrusions = fonts.protrusions or { }
+fonts.protrusions.classes = fonts.protrusions.classes or { }
+fonts.protrusions.vectors = fonts.protrusions.vectors or { }
+
+-- the values need to be revisioned
+
+fonts.protrusions.classes.preset = { factor = 1 }
+
+function commands.setupfontprotrusion(class,settings)
+ aux.getparameters(fonts.protrusions.classes,class,'preset',settings)
+end
+
+fonts.protrusions.classes['pure'] = {
+ vector = 'pure', factor = 1
+}
+fonts.protrusions.classes['punctuation'] = {
+ vector = 'punctuation', factor = 1
+}
+fonts.protrusions.classes['alpha'] = {
+ vector = 'alpha', factor = 1
+}
+fonts.protrusions.classes['quality'] = {
+ vector = 'quality', factor = 1
+}
+
+fonts.protrusions.vectors['pure'] = {
+
+ [0x002C] = { 0, 1 }, -- comma
+ [0x002E] = { 0, 1 }, -- period
+ [0x003A] = { 0, 1 }, -- colon
+ [0x003B] = { 0, 1 }, -- semicolon
+ [0x002D] = { 0, 1 }, -- hyphen
+ [0x2013] = { 0, 0.50 }, -- endash
+ [0x2014] = { 0, 0.33 }, -- emdash
+
+}
+
+fonts.protrusions.vectors['punctuation'] = {
+
+ [0x003F] = { 0, 0.20 }, -- ?
+ [0x00BF] = { 0, 0.20 }, -- ¿
+ [0x0021] = { 0, 0.20 }, -- !
+ [0x00A1] = { 0, 0.20 }, -- ¡
+ [0x0028] = { 0.05, 0 }, -- (
+ [0x0029] = { 0, 0.05 }, -- )
+ [0x005B] = { 0.05, 0 }, -- [
+ [0x005D] = { 0, 0.05 }, -- ]
+ [0x002C] = { 0, 0.70 }, -- comma
+ [0x002E] = { 0, 0.70 }, -- period
+ [0x003A] = { 0, 0.50 }, -- colon
+ [0x003B] = { 0, 0.50 }, -- semicolon
+ [0x002D] = { 0, 0.70 }, -- hyphen
+ [0x2013] = { 0, 0.30 }, -- endash
+ [0x2014] = { 0, 0.20 }, -- emdash
+
+ -- todo: left and right quotes: .5 double, .7 single
+
+}
+
+fonts.protrusions.vectors['alpha'] = {
+
+ [byte("A")] = { .05, .05 },
+ [byte("F")] = { 0, .05 },
+ [byte("J")] = { .05, 0 },
+ [byte("K")] = { 0, .05 },
+ [byte("L")] = { 0, .05 },
+ [byte("T")] = { .05, .05 },
+ [byte("V")] = { .05, .05 },
+ [byte("W")] = { .05, .05 },
+ [byte("X")] = { .05, .05 },
+ [byte("Y")] = { .05, .05 },
+
+ [byte("k")] = { 0, .05 },
+ [byte("r")] = { 0, .05 },
+ [byte("t")] = { 0, .05 },
+ [byte("v")] = { .05, .05 },
+ [byte("w")] = { .05, .05 },
+ [byte("x")] = { .05, .05 },
+ [byte("y")] = { .05, .05 },
+
+}
+
+fonts.protrusions.vectors['quality'] = table.merge( {},
+ fonts.protrusions.vectors['punctuation'],
+ fonts.protrusions.vectors['alpha']
+)
+
+function fonts.initializers.common.protrusion(tfmdata,value)
+ if value then
+ local class = fonts.protrusions.classes[value]
+ if class then
+ local vector = fonts.protrusions.vectors[class.vector]
+ if vector then
+ local factor = class.factor or 1
+ local data = characters.data
+ local emwidth = tfmdata.parameters.quad
+ for i, chr in pairs(tfmdata.characters) do
+ local v, pl, pr = vector[i], nil, nil
+ if v then
+ pl, pr = v[1], v[2]
+ else
+ local d = data[i]
+ if d then
+ local s = d.shcode
+ if not s then
+ -- sorry
+ elseif type(s) == "table" then
+ local vl, vr = vector[s[1]], vector[s[#s]]
+ if vl then pl = vl[1] end
+ if vr then pr = vr[2] end
+ else
+ v = vector[s]
+ if v then
+ pl, pr = v[1], v[2]
+ end
+ end
+ end
+ end
+ if pl and pl ~= 0 then chr.left_protruding = pl*factor end
+ if pr and pr ~= 0 then chr.right_protruding = pr*factor end
+ end
+ end
+ end
+ end
+end
+
+table.insert(fonts.manipulators,"protrusion")
+
+fonts.initializers.base.otf.protrusion = fonts.initializers.common.protrusion
+fonts.initializers.node.otf.protrusion = fonts.initializers.common.protrusion
+
+fonts.initializers.base.afm.protrusion = fonts.initializers.common.protrusion
+fonts.initializers.node.afm.protrusion = fonts.initializers.common.protrusion
diff --git a/Master/texmf-dist/tex/context/base/font-fbk.lua b/Master/texmf-dist/tex/context/base/font-fbk.lua
new file mode 100644
index 00000000000..0d1ae6218eb
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/font-fbk.lua
@@ -0,0 +1,236 @@
+if not modules then modules = { } end modules ['font-fbk'] = {
+ version = 1.001,
+ comment = "companion to font-ini.tex",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+--[[ldx--
+<p>This is very experimental code!</p>
+--ldx]]--
+
+fonts = fonts or { }
+fonts.fallbacks = fonts.fallbacks or { }
+fonts.vf.aux.combine.trace = false
+
+fonts.vf.aux.combine.commands["enable-tracing"] = function(g,v)
+ fonts.vf.aux.combine.trace = true
+end
+
+fonts.vf.aux.combine.commands["disable-tracing"] = function(g,v)
+ fonts.vf.aux.combine.trace = false
+end
+
+fonts.vf.aux.combine.commands["set-tracing"] = function(g,v)
+ if v[2] == nil then
+ fonts.vf.aux.combine.trace = true
+ else
+ fonts.vf.aux.combine.trace = v[2]
+ end
+end
+
+function fonts.vf.aux.combine.initialize_trace()
+ if fonts.vf.aux.combine.trace then
+ return "special", "pdf: .8 0 0 rg .8 0 0 RG", "pdf: 0 .8 0 rg 0 .8 0 RG", "pdf: 0 0 .8 rg 0 0 .8 RG", "pdf: 0 g 0 G"
+ else
+ return "comment", "", "", "", ""
+ end
+end
+
+fonts.vf.aux.combine.force_fallback = false
+
+fonts.vf.aux.combine.commands["fake-character"] = function(g,v) -- g, nr, fallback_id
+ local index, fallback = v[2], v[3]
+ if fonts.vf.aux.combine.force_fallback or not g.characters[index] then
+ if fonts.fallbacks[fallback] then
+ g.characters[index] = fonts.fallbacks[fallback](g)
+ end
+ end
+end
+
+fonts.fallbacks['textcent'] = function (g)
+ local c = string.byte("c")
+ local t = table.fastcopy(g.characters[c])
+ local s = fonts.tfm.scaled(g.specification.size or g.size)
+ local a = - math.tan(math.rad(g.italicangle or 0))
+ local special, red, green, blue, black = fonts.vf.aux.combine.initialize_trace()
+ if a == 0 then
+ t.commands = {
+ {"push"}, {"slot", 1, c}, {"pop"},
+ {"right", .5*t.width},
+ {"down", .2*t.height},
+ {special, green},
+ {"rule", 1.4*t.height, .02*s},
+ {special, black},
+ }
+ else
+ t.commands = {
+ {"push"},
+ {"right", .5*t.width-.025*s},
+ {"down", .2*t.height},
+ {"special",string.format("pdf: q 1 0 %s 1 0 0 cm",a)},
+ {special, green},
+ {"rule", 1.4*t.height, .025*s},
+ {special, black},
+ {"special","pdf: Q"},
+ {"pop"},
+ {"slot", 1, c} -- last else problems with cm
+ }
+ end
+ -- somehow the width is messed up now
+ -- todo: set height
+ t.height = 1.2*t.height
+ t.depth = 0.2*t.height
+ return t
+end
+
+fonts.fallbacks['texteuro'] = function (g)
+ local c = string.byte("C")
+ local t = table.fastcopy(g.characters[c])
+ local s = fonts.tfm.scaled(g.specification.size or g.size)
+ local d = math.cos(math.rad(90+(g.italicangle)))
+ local special, red, green, blue, black = fonts.vf.aux.combine.initialize_trace()
+ t.width = 1.05*t.width
+ t.commands = {
+ {"right", .05*t.width},
+ {"push"}, {"slot", 1, c}, {"pop"},
+ {"right", .5*t.width*d},
+ {"down", -.5*t.height},
+ {special, green},
+ {"rule", .05*s, .4*s},
+ {special, black},
+ }
+ return t
+end
+
+-- maybe store llx etc instead of bbox in tfm blob / more efficient
+
+fonts.vf.aux.combine.force_composed = false
+
+function fonts.vf.aux.compose_characters(g) -- todo: scaling depends on call location
+ -- this assumes that slot 1 is self, there will be a proper self some day
+ local chars = g.characters
+ local fastcopy = table.fastcopy
+ local xchar = chars[string.byte("X")]
+ if xchar and xchar.description then
+ local cap_lly = xchar.description.boundingbox[4]
+ local ita_cor = math.cos(math.rad(90+(g.italicangle or 0)))
+ local force = fonts.vf.aux.combine.force_composed
+ local fallbacks = characters.context.fallbacks
+ local special, red, green, blue, black = fonts.vf.aux.combine.initialize_trace()
+ for i,c in pairs(characters.data) do
+ if force or not chars[i] then
+ local s = c.specials
+ if s and s[1] == 'char' then
+ local chr = s[2]
+ local charschr = chars[chr]
+ if charschr then
+ local cc = c.category
+ if cc == 'll' or cc == 'lu' or cc == 'lt' then
+ local acc = s[3]
+ local t = fastcopy(charschr)
+ local d = t.description
+ d.name = c.adobename or "unknown"
+ d.unicode = i
+ local charsacc = chars[acc]
+ if not charsacc then
+ acc = fallbacks[acc]
+ charsacc = acc and chars[acc]
+ end
+ if charsacc then
+ local cb = charschr.description.boundingbox
+ local ab = charsacc.description.boundingbox
+ if cb and ab then
+ local c_llx, c_lly, c_urx, c_ury = cb[1], cb[2], cb[3], cb[4]
+ local a_llx, a_lly, a_urx, a_ury = ab[1], ab[2], ab[3], ab[4]
+ local dx = (c_urx - a_urx - a_llx + c_llx)/2
+ local dd = (c_urx-c_llx)*ita_cor
+ if a_ury < 0 then
+ local dy = cap_lly-a_lly
+ t.commands = {
+ {"push"},
+ {"right", dx-dd},
+ {"down", -dy}, -- added
+ {special, red},
+ {"slot", 1, acc},
+ {special, black},
+ {"pop"},
+ {"slot", 1, chr},
+ }
+ elseif c_ury > a_lly then
+ local dy = cap_lly-a_lly
+ t.commands = {
+ {"push"},
+ {"right", dx+dd},
+ {"down", -dy},
+ {special, green},
+ {"slot", 1, acc},
+ {special, black},
+ {"pop"},
+ {"slot", 1, chr},
+ }
+ else
+ t.commands = {
+ {"push"},
+ {"right", dx+dd},
+ {special, blue},
+ {"slot", 1, acc},
+ {special, black},
+ {"pop"},
+ {"slot", 1, chr},
+ }
+ end
+ end
+ end
+ chars[i] = t
+ end
+ end
+ end
+ end
+ end
+ end
+end
+
+fonts.vf.aux.combine.commands["complete-composed-characters"] = function(g,v)
+ fonts.vf.aux.compose_characters(g)
+end
+
+--~ {'special', 'pdf: q ' .. s .. ' 0 0 '.. s .. ' 0 0 cm'},
+--~ {'special', 'pdf: q 1 0 0 1 ' .. -w .. ' ' .. -h .. ' cm'},
+--~ -- {'special', 'pdf: /Fm\XX\space Do'},
+--~ {'special', 'pdf: Q'},
+--~ {'special', 'pdf: Q'},
+
+-- for documentation purposes we provide:
+
+fonts.define.methods.install("fallback", { -- todo: auto-fallback with loop over data.characters
+ { "fake-character", 0x00A2, 'textcent' },
+ { "fake-character", 0x20AC, 'texteuro' }
+})
+
+fonts.vf.aux.combine.commands["enable-force"] = function(g,v)
+ fonts.vf.aux.combine.force_composed = true
+ fonts.vf.aux.combine.force_fallback = true
+end
+fonts.vf.aux.combine.commands["disable-force"] = function(g,v)
+ fonts.vf.aux.combine.force_composed = false
+ fonts.vf.aux.combine.force_fallback = false
+end
+
+fonts.define.methods.install("demo-2", {
+ { "enable-tracing" },
+ { "enable-force" },
+ { "initialize" },
+ { "include-method", "fallback" },
+ { "complete-composed-characters" },
+ { "disable-tracing" },
+ { "disable-force" },
+})
+
+fonts.define.methods.install("demo-3", {
+ { "enable-tracing" },
+ { "initialize" },
+ { "complete-composed-characters" },
+ { "disable-tracing" },
+})
diff --git a/Master/texmf-dist/tex/context/base/font-ini.lua b/Master/texmf-dist/tex/context/base/font-ini.lua
new file mode 100644
index 00000000000..a3eefa9db9a
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/font-ini.lua
@@ -0,0 +1,68 @@
+if not modules then modules = { } end modules ['font-ini'] = {
+ version = 1.001,
+ comment = "companion to font-ini.tex",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+--[[ldx--
+<p>Not much is happening here.</p>
+--ldx]]--
+
+-- vtf comes first
+-- fix comes last
+
+fonts = fonts or { }
+
+fonts.trace = false -- true
+fonts.mode = 'base'
+fonts.private = 0xE000
+
+fonts.methods = {
+ base = { tfm = { }, afm = { }, otf = { }, vtf = { }, fix = { } },
+ node = { tfm = { }, afm = { }, otf = { }, vtf = { }, fix = { } },
+}
+
+fonts.initializers = {
+ base = { tfm = { }, afm = { }, otf = { }, vtf = { }, fix = { } },
+ node = { tfm = { }, afm = { }, otf = { }, vtf = { }, fix = { } }
+}
+
+fonts.triggers = {
+ 'mode',
+ 'language',
+ 'script',
+ 'strategy',
+}
+
+fonts.manipulators = {
+}
+
+fonts.define = fonts.define or { }
+fonts.define.specify = fonts.define.specify or { }
+fonts.define.specify.synonyms = fonts.define.specify.synonyms or { }
+
+-- tracing
+
+do
+
+ fonts.color = fonts.color or { }
+
+ fonts.color.trace = false
+
+ local attribute = attributes.numbers['color'] or 7 -- we happen to know this -)
+ local mapping = attributes.list[attribute]
+
+ local set_attribute = node.set_attribute
+ local unset_attribute = node.unset_attribute
+
+ function fonts.color.set(n,c)
+ -- local mc = mapping[c] if mc then unset_attribute((n,attribute) else set_attribute(n,attribute,mc) end
+ set_attribute(n,attribute,mapping[c] or -1) -- also handles -1 now
+ end
+ function fonts.color.reset(n)
+ unset_attribute(n,attribute)
+ end
+
+end
diff --git a/Master/texmf-dist/tex/context/base/font-ini.mkii b/Master/texmf-dist/tex/context/base/font-ini.mkii
new file mode 100644
index 00000000000..f3f40160b09
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/font-ini.mkii
@@ -0,0 +1,57 @@
+%D \module
+%D [ file=font-ini,
+%D version=2007.01.10,
+%D title=\CONTEXT\ Font Macros,
+%D subtitle=Initialization,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\unprotect
+
+% not that efficient but inheritance is seldom used (untested)
+
+\def\mkdefinefontfeature#1#2#3%
+ {\doifassignmentelse{#2}
+ {\setevalue{\??fa#1}{#2}}
+ {\let\!!stringa\empty
+ \def\mkdodefinefontfeature##1{\edef\!!stringa{\ifx\!!stringa\empty\else\!!stringa,\fi##1}}%
+ \processcommalist[#2]\mkdodefinefontfeature
+ \setevalue{\??fa#1}{\ifx\!!stringa\empty\else\!!stringa,\fi#3}}}
+
+\def\updatefontparameters
+ {\edef\@@fontencoding{\truefontdata\fontfile \s!encoding}%
+ \edef\@@fontmapping {\truefontdata\fontfile \s!mapping }%
+ \edef\@@fonthandling{\truefontdata\somefontname\s!handling}%
+ \edef\@@fontfeatures{\truefontdata\fontfile \s!features}%
+ \edef\@@fontskewchar{\truefontdata\fontfile \s!skewchar}}
+
+\def\setfontcharacteristics
+ {\updatefontparameters % redundant, will go away, faster too
+ \fastenableencoding
+ {\ifx\@@fontencoding\empty
+ \s!default \else \@@fontencoding
+ \fi}%
+ \fastenablemapping
+ {\ifx\@@fontmapping\empty
+ \ifx\@@fontencoding\empty
+ \s!default \else \@@fontencoding
+ \fi
+ \else
+ \@@fontmapping
+ \fi}%
+ \fastenablehandling
+ {\ifx\@@fonthandling\empty
+ \s!default \else \@@fonthandling
+ \fi}%
+ {\lastfontidentifier}%
+ \the\everyfont
+ \synchronizepatternswithfont}
+
+\ifx\synchronizepatternswithfont\undefined \def\synchronizepatternswithfont{\synchronizepatterns} \fi
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/font-ini.mkiv b/Master/texmf-dist/tex/context/base/font-ini.mkiv
new file mode 100644
index 00000000000..7d9a8e850bd
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/font-ini.mkiv
@@ -0,0 +1,124 @@
+%D \module
+%D [ file=font-ini,
+%D version=2007.01.10,
+%D title=\CONTEXT\ Font Macros,
+%D subtitle=Initialization,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\registerctxluafile{font-ini}{1.001}
+\registerctxluafile{font-enc}{1.001}
+\registerctxluafile{font-map}{1.001}
+\registerctxluafile{font-syn}{1.001}
+\registerctxluafile{font-tfm}{1.001}
+\registerctxluafile{font-afm}{1.001}
+\registerctxluafile{font-otf}{1.001}
+\registerctxluafile{font-vf} {1.001}
+\registerctxluafile{font-def}{1.001}
+\registerctxluafile{font-fbk}{1.001}
+\registerctxluafile{font-ext}{1.001}
+
+% \startruntimectxluacode
+% fonts.enc.make_unicode_vector() -- each time, brrr
+% \stopruntimectxluacode
+
+\unprotect
+
+\def\mkdefinefontfeature#1#2#3%
+ {\ctxlua{fonts.define.specify.preset_context("#1","#2","#3")}}
+
+% handy for manuals
+
+\def\otfchar#1{\ctxlua{fonts.otf.char("#1")}}
+
+%D: We cannot yet inherit because no colors are predefined.
+
+\definecolor[font:init][r=.75]
+\definecolor[font:medi][g=.75]
+\definecolor[font:fina][b=.75]
+\definecolor[font:isol][y=.75]
+\definecolor[font:mark][m=.75]
+\definecolor[font:rest][c=.75]
+
+%D goodies:
+%D
+%D \starttyping
+%D \showinstalledfonts[officinasans.*][all]
+%D \showinstalledfonts[officinaserif.*][all]
+%D \showinstalledfonts[officina.*itc.*][all]
+%D
+%D \showinstalledfonts[officina.*itc.*][all,new]
+%D \stoptyping
+
+\def\showinstalledfonts
+ {\dodoubleempty\doshowinstalledfonts}
+
+\def\doshowinstalledfonts[#1][#2]%
+ {\bgroup
+ \def\pattern{#1}%
+ \def\all{false}%
+ \def\reload{false}%
+ \doifnothing\pattern{\def\pattern{.*}}%
+ \processallactionsinset[#2][\v!new=>\def\reload{true},\v!all=>\def\all{true}]%
+ \ctxlua{fonts.names.table("#1",\reload,\all)}%
+ \egroup}
+
+%D Experimental!
+
+\def\installfontfeature
+ {\dodoubleargument\doinstallfontfeature}
+
+\def\doinstallfontfeature[#1][#2]%
+ {\ctxlua{fonts.install_feature("#1","#2")}}
+
+%D Not yet in \MKII.
+
+\def\fontfeatureslist
+ {\dodoubleargument\dofontfeatureslist}
+
+\def\dofontfeatureslist[#1][#2]% todo: arg voor type
+ {\ctxlua{tex.sprint(tex.ctxcatcodes,fonts.define.specify.context_tostring("#1","otf","\luaescapestring{#2}","yes","no",true,{"number"}))}}
+
+\def\definefontlocal#1%
+ {\expandafter\font\csname#1\endcsname\lastfontname\relax}
+
+\def\definefontglobal#1%
+ {\global\expandafter\font\csname#1:\endcsname\lastfontname\relax}
+
+\attribute\zerocount\zerocount % first in list, so fast match
+
+% \def\featureattribute#1{\ctxlua{tex.sprint(fonts.define.specify.context_number("#1"))}}
+% \def\setfontfeature #1{\attribute\zerocount\featureattribute{#1}\relax}
+% \def\resetfontfeature#1{\attribute\zerocount\zerocount}
+
+\let\currentfeature\empty
+
+\def\featureattribute#1{\ctxlua{tex.sprint(fonts.define.specify.context_number("#1"))}}
+\def\setfontfeature #1{\edef\currentfeature{#1}\attribute\zerocount\featureattribute{#1}\relax}
+\def\resetfontfeature#1{\let\currentfeature\empty\attribute\zerocount\zerocount}
+
+\appendtoks
+ \setfontfeature\currentfeature
+\to \everylanguage
+
+%D Simpler:
+
+\def\updatefontparameters
+ {\edef\@@fonthandling{\truefontdata\somefontname\s!handling}%
+ \edef\@@fontfeatures{\truefontdata\fontfile \s!features}%
+ \edef\@@fontskewchar{\truefontdata\fontfile \s!skewchar}}
+
+\def\setfontcharacteristics
+ {\the\everyfont}
+
+%D Predefined:
+
+% \installfontfeature[otf][tlig]
+% \installfontfeature[otf][trep]
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/font-ini.tex b/Master/texmf-dist/tex/context/base/font-ini.tex
index dda16084534..d528d51d47d 100644
--- a/Master/texmf-dist/tex/context/base/font-ini.tex
+++ b/Master/texmf-dist/tex/context/base/font-ini.tex
@@ -14,6 +14,8 @@
\writestatus{loading}{Context Font Macros (ini)}
+\loadmarkfile{font-ini}
+
\unprotect
% \def\fontrange#1%
@@ -899,7 +901,7 @@
\def\synchronizesymb % stylish math stuff in mmode
{\ifsynchronizemathfonts\the\symbstrategies\fi} % \if...\fam\minusone\fi}
-%D By not setting the family we can append a font switch to \tyep
+%D By not setting the family we can append a font switch to \type
%D {\everymath}. On the other hand, one never knows in what family
%D state the strategies brought us.
%D
@@ -934,55 +936,6 @@
% \def\s!nullfont{nullfont}
-\beginTEX
-
-\def\dodosettextfamily#1%
- {\@EA\ifx\csname\fontclass\fontbody\c!mm\fontfamily\fontsize\endcsname\relax
- \@EA\ifx\csname\fontclass\fontbody\c!mm\fontfamily\endcsname \relax
- \@EA\ifx\csname\fontclass\fontbody\c!rm\fontfamily\fontsize\endcsname\relax
- \@EA\ifx\csname\fontclass\fontbody\c!rm\fontfamily\endcsname \relax
- \@EA\ifx\csname \fontbody\c!mm\fontfamily\fontsize\endcsname\relax
- \@EA\ifx\csname \fontbody\c!mm\fontfamily\endcsname \relax
- \@EA\ifx\csname \fontbody\c!rm\fontfamily\fontsize\endcsname\relax
- \@EA\ifx\csname \fontbody\c!rm\fontfamily\endcsname \relax
- \autofontsizetrue \nullfont \else
- \autofontsizetrue \csname\fontbody\c!rm\fontfamily\endcsname \fi\else
- \autofontsizefalse \csname\fontbody\c!rm\fontfamily\fontsize\endcsname\fi\else
- \autofontsizetrue \csname\fontbody\c!mm\fontfamily\endcsname \fi\else
- \autofontsizefalse \csname\fontbody\c!mm\fontfamily\fontsize\endcsname\fi\else
- \autofontsizetrue \csname\fontclass\fontbody\c!rm\fontfamily\endcsname \fi\else
- \autofontsizefalse \csname\fontclass\fontbody\c!rm\fontsize\endcsname\fi\else
- \autofontsizetrue \csname\fontclass\fontbody\c!mm\fontfamily\endcsname \fi\else
- \autofontsizefalse \csname\fontclass\fontbody\c!mm\fontfamily\fontsize\endcsname\fi
- #1\csname\fontfamily\s!fam\endcsname\font}
-
-\endTEX
-
-\beginETEX \ifcsname
-
-%\def\dodosettextfamily#1%
-% {\ifcsname\fontclass\fontbody\c!mm\fontfamily\fontsize\endcsname \autofontsizefalse
-% \csname\fontclass\fontbody\c!mm\fontfamily\fontsize\endcsname \else
-% \ifcsname\fontclass\fontbody\c!mm\fontfamily\endcsname \autofontsizetrue
-% \csname\fontclass\fontbody\c!mm\fontfamily\endcsname \else
-% \ifcsname\fontclass\fontbody\c!rm\fontfamily\fontsize\endcsname \autofontsizefalse
-% \csname\fontclass\fontbody\c!rm\fontfamily\fontsize\endcsname \else
-% \ifcsname\fontclass\fontbody\c!rm\fontfamily\endcsname \autofontsizetrue
-% \csname\fontclass\fontbody\c!rm\fontfamily\endcsname \else
-% \ifcsname \fontbody\c!mm\fontfamily\fontsize\endcsname \autofontsizefalse
-% \csname \fontbody\c!mm\fontfamily\fontsize\endcsname \else
-% \ifcsname \fontbody\c!mm\fontfamily\endcsname \autofontsizetrue
-% \csname \fontbody\c!mm\fontfamily\endcsname \else
-% \ifcsname \fontbody\c!rm\fontfamily\fontsize\endcsname \autofontsizefalse
-% \csname \fontbody\c!rm\fontfamily\fontsize\endcsname \else
-% \ifcsname \fontbody\c!rm\fontfamily\endcsname \autofontsizetrue
-% \csname \fontbody\c!rm\fontfamily\endcsname \else
-% \nullfont \autofontsizetrue
-% \fi\fi\fi\fi\fi\fi\fi\fi
-% #1\csname\fontfamily\s!fam\endcsname\font}
-%
-% slightly faster:
-
\def\dodosettextfamily
{\ifx\fontclass\empty
\@EA\dodosettextfamilyA
@@ -1016,8 +969,6 @@
\fi\fi\fi\fi
#1\csname\fontfamily\s!fam\endcsname\font}
-\endETEX
-
\def\mrfallback{\c!rm\c!tf}
\appendtoks
@@ -1046,55 +997,6 @@
\let\fontbody #2\dodosetmathfamily \textfont#1%
\let\fontbody\savedfontbody}
-\beginTEX
-
-\def\dodosetmathfamily#1#2%
- {\@EA\ifx \csname\fontclass\fontbody\c!mm\fontfamily\fontsize\endcsname\relax
- \@EA\ifx \csname\fontclass\fontbody\c!mm\fontfamily \endcsname\relax
- \@EA\ifx \csname\fontclass\fontbody \backfamily\fontsize\endcsname\relax
- \@EA\ifx \csname\fontclass\fontbody \backfamily \endcsname\relax
- \@EA\ifx \csname \fontbody\c!mm\fontfamily\fontsize\endcsname\relax
- \@EA\ifx \csname \fontbody\c!mm\fontfamily \endcsname\relax
- \@EA\ifx \csname \fontbody \backfamily\fontsize\endcsname\relax
- \@EA\ifx \csname \fontbody \backfamily \endcsname\relax
- \autofontsizetrue \nullfont \else
- \autofontsizetrue \csname \fontbody \backfamily \endcsname\fi \else
- \autofontsizefalse \csname \fontbody \backfamily\fontsize\endcsname\fi \else
- \autofontsizetrue \csname \fontbody\c!mm\fontfamily \endcsname\fi \else
- \autofontsizefalse \csname \fontbody\c!mm\fontfamily\fontsize\endcsname\fi \else
- \autofontsizetrue \csname\fontclass\fontbody \backfamily \endcsname\fi \else
- \autofontsizefalse \csname\fontclass\fontbody \backfamily\fontsize\endcsname\fi \else
- \autofontsizetrue \csname\fontclass\fontbody\c!mm\fontfamily \endcsname\fi \else
- \autofontsizefalse \csname\fontclass\fontbody\c!mm\fontfamily\fontsize\endcsname\fi
- #1#2\font}
-
-\endTEX
-
-\beginETEX \ifcsname
-
-%\def\dodosetmathfamily#1#2%
-% {\ifcsname\fontclass\fontbody\c!mm\fontfamily\fontsize\endcsname \autofontsizefalse
-% \csname\fontclass\fontbody\c!mm\fontfamily\fontsize\endcsname \else
-% \ifcsname\fontclass\fontbody\c!mm\fontfamily\endcsname \autofontsizetrue
-% \csname\fontclass\fontbody\c!mm\fontfamily\endcsname \else
-% \ifcsname\fontclass\fontbody\backfamily\fontsize\endcsname \autofontsizefalse
-% \csname\fontclass\fontbody\backfamily\fontsize\endcsname \else
-% \ifcsname\fontclass\fontbody\backfamily\endcsname \autofontsizetrue
-% \csname\fontclass\fontbody\backfamily\endcsname \else
-% \ifcsname \fontbody\c!mm\fontfamily\fontsize\endcsname \autofontsizefalse
-% \csname \fontbody\c!mm\fontfamily\fontsize\endcsname \else
-% \ifcsname \fontbody\c!mm\fontfamily\endcsname \autofontsizetrue
-% \csname \fontbody\c!mm\fontfamily\endcsname \else
-% \ifcsname \fontbody\backfamily\fontsize\endcsname \autofontsizefalse
-% \csname \fontbody\backfamily\fontsize\endcsname \else
-% \ifcsname \fontbody\backfamily\endcsname \autofontsizetrue
-% \csname \fontbody\backfamily\endcsname \else
-% \nullfont \autofontsizetrue
-% \fi\fi\fi\fi\fi\fi\fi\fi
-% #1#2\font}
-%
-% sligthly faster:
-
\def\dodosetmathfamily
{\ifx\fontclass\empty
\@EA\dodosetmathfamilyA
@@ -1128,8 +1030,6 @@
\fi\fi\fi\fi
#1#2\font}
-\endETEX
-
\appendtoks
\dosetsymbfamily\mrfam\textface\scriptface\scriptscriptface\c!mr
\dosetsymbfamily\mifam\textface\scriptface\scriptscriptface\c!mi
@@ -1149,24 +1049,6 @@
\let\fontbody #2\dodosetsymbfamily \textfont#1%
\let\fontbody\savedfontbody}
-\beginTEX
-
-\def\dodosetsymbfamily#1#2%
- {\@EA\ifx\csname\fontclass\fontbody\c!mm\fontfamily\fontalternative\fontsize\endcsname\relax
- \@EA\ifx\csname\fontbody\c!mm\fontfamily\fontalternative\fontsize\endcsname\relax
- \else
- \csname\fontbody\c!mm\fontfamily\fontalternative\fontsize\endcsname
- #1#2\font
- \fi
- \else
- \csname\fontclass\fontbody\c!mm\fontfamily\fontalternative\fontsize\endcsname
- #1#2\font
- \fi}
-
-\endTEX
-
-\beginETEX \ifcsname
-
\def\dodosetsymbfamily#1#2%
{\ifcsname\fontclass\fontbody\c!mm\fontfamily\fontalternative\fontsize\endcsname
\csname\fontclass\fontbody\c!mm\fontfamily\fontalternative\fontsize\endcsname
@@ -1175,8 +1057,6 @@
\csname\fontbody\c!mm\fontfamily\fontalternative\fontsize\endcsname
#1#2\font
\fi\fi}
-
-\endETEX
%D All used styles, like rm, ss and tt, are saved in a comma
%D separated list. Appart from practical limitations one can
@@ -1253,20 +1133,6 @@
\def\saverelativefontsize#1#2% #1=rm|ss|.. #2=waarde
{\setxvalue{\fontclass#1\s!rscale}{#2}}
-\beginTEX
-
-\def\checkrelativefontsize#1%
- {\edef\relativefontsize
- {\@EA\ifx\csname\fontclass#1\s!rscale\endcsname\relax
- \defaultrelativefontsize
- \else
- \csname\fontclass#1\s!rscale\endcsname
- \fi}}
-
-\endTEX
-
-\beginETEX \ifcsname
-
\def\checkrelativefontsize#1%
{\edef\relativefontsize
{\ifcsname\fontclass#1\s!rscale\endcsname
@@ -1275,8 +1141,6 @@
\defaultrelativefontsize
\fi}}
-\endETEX
-
%D We also save:
\def\savemathtextstyle#1% #1=rm|ss|..
@@ -1300,6 +1164,8 @@
%
% but, better:
+\let\somefontname\empty
+
\def\parsefontspec#1%
{\xdef\somefontspec{#1\space}%
\@EA\doparsefontspec\somefontspec\relax]% =>#1 \relax]
@@ -1322,81 +1188,6 @@
\def\setforcedfontspec#1 #2\relax]%
{\csname\@fs@#1\endcsname#2\relax}
-%D For \XETEX\ we need to support a bit more:
-%D
-%D \starttyping
-%D \definedfont[{cmr10} at 40pt] test
-%D \definedfont['cmss10' at 40pt] test
-%D \definedfont["cmtt10" at 40pt] test
-%D
-%D \definedfont[{cmr10} at 40pt] test
-%D \definedfont['cmss10' at 40pt] test
-%D \definedfont["cmtt10" at 40pt] test
-%D
-%D \definedfont["Gentium" at 40pt] test
-%D \stoptyping
-
-\beginXETEX \font
-
- % actually, we can use "" in pdftex> 1.20 as well
-
- \def\parsefontspec#1%
- {\xdef\somefontspec{#1\space}%
- \@EA\doparsefontspec\somefontspec\relax]% =>#1 \empty]
- \donoparsefontspec}
-
- \def\doparsefontspec#1%
- {\ifx"#1%
- \@EA\dodqparsefontspec
- \else\ifx'#1%
- \@EAEAEA\dosqparsefontspec
- \else
- \@EAEAEA\dodoparsefontspec
- \fi\fi#1}
-
- \def\dqfontquote{"}
- \def\sqfontquote{'}
-
- \def\dodqparsefontspec"#1"#2%
- {\def\somefontname{#1}%
- \let\somefontquote\dqfontquote
- \ifx#2\relax\@EA\setnaturalfontspec\else\@EA\setforcedfontspec\fi#2}
-
- \def\dosqparsefontspec'#1'#2%
- {\def\somefontname{#1}%
- \let\somefontquote\sqfontquote
- \ifx#2\relax\@EA\setnaturalfontspec\else\@EA\setforcedfontspec\fi#2}
-
- \def\dodoparsefontspec#1 #2%
- {\def\somefontname{#1}%
- \let\somefontquote\empty
- \ifx\somefontname\empty % space before fontname
- \@EA\doparsefontspec
- \else\ifx#2\relax
- \@EAEAEA\setnaturalfontspec
- \else
- \@EAEAEA\setforcedfontspec
- \fi\fi
- #2}
-
- \def\setnaturalfontspec#1]%
- {\@fs@scaled\plusthousand\relax}
-
- \def\setforcedfontspec#1 #2\relax]%
- {\csname\@fs@#1\endcsname#2\relax}
-
- \def\donoparsefontspec % #1 == \cs
- {\edef\fontfile{\somefontquote\truefontname\somefontname\somefontquote}%
- \ifx\fontfile\s!unknown \let\fontfile\defaultfontfile \fi
- \edef\lastfontname{\fontfile\somefontspec}%
- \ifx\fontclass\empty
- \expandafter\definefontlocal
- \else
- \expandafter\definefontglobal
- \fi} % #1 == \cs
-
-\endXETEX
-
\def\@fs@scaled
{\afterassignment\do@fs@scaled\scratchcounter}
@@ -1452,6 +1243,7 @@
\let\@@fontencoding\empty
\let\@@fontmapping \empty
\let\@@fonthandling\empty
+\let\@@fontfeatures\empty
\let\@@skewchar \empty
\let\@@hyphenchar \empty % todo, will go to encoding
@@ -1476,10 +1268,310 @@
\let\fontfile\s!unknown
+\ifx\checkfontfilename\undefined \let\checkfontfilename\relax \fi
+
+% \definefontsynonym
+% [blabla]
+% [name:Latin Modern Something]
+% \definefontsynonym
+% [blabla]
+% [file:texnansi-lmr10]
+% [encoding=texnansi]
+% \definedfont[blabla] test \currentencoding/\fontfile \par
+% \definefontsynonym
+% [blabla]
+% [texnansi-lmtt10]
+% [encoding=texnansi]
+% \definedfont[blabla] test \currentencoding/\fontfile \par
+% \definefontsynonym
+% [blabla]
+% [ec-lmtt10]
+% [encoding=ec]
+% \definedfont[blabla] test \currentencoding/\fontfile \par
+
+\beginOLDTEX
+
+ \def\checkfontfilename
+ {\expandafter\docheckfontfilename\fontfile:\empty:\empty\relax}
+
+ \def\docheckfontfilename#1:#2:#3#4\relax
+ {\edef\!!stringa{#1}%
+ \edef\!!stringb{#2}%
+ \ifx\!!stringb\empty
+ \edef\checkedfontfile{\!!stringa}%
+ \else\ifx\!!stringa\v!file
+ \edef\checkedfontfile{"\!!stringb"}%
+ \else\ifx\!!stringa\v!name
+ \edef\checkedfontfile{"\!!stringb"}%
+ \else
+ \edef\checkedfontfile{\!!stringb}%
+ \fi\fi\fi}
+
+\endOLDTEX
+
+% \definefontfeature[default] [liga=yes,texligatures=yes,texquotes=yes]
+% \definefontfeature[default-caps][liga=yes,texligatures=yes,texquotes=yes,smcp=yes,script=latn]
+%
+% \starttypescript [serif] [palatino-nova-regular] [name]
+% \definefontsynonym[Serif] [palatinonova-regular][features=default]
+% \definefontsynonym[SerifCaps][palatinonova-regular][features=default-caps] % also sets Serif
+% \stoptypescript
+%
+% \starttypescript [serif] [palatino-nova-regular] [name]
+% \definefontsynonym[Serif] [palatinonova-regular*default]
+% \definefontsynonym[SerifCaps] [palatinonova-regular*default-caps]
+% \stoptypescript
+
+% \definetypeface[mainface][rm][serif][palatino-nova-regular][default] \setupbodyfont[mainface]
+%
+% \starttext
+% ``Test'' -- --- ff fi fl \sc ``Test'' -- --- ff fi fl
+% \stoptext
+
+% \starttext
+% \definefont
+% [blabla]
+% [name:Latin Modern Something]
+% \definefont
+% [blabla]
+% [file:texnansi-lmr10]
+% \blabla test
+% \definefont
+% [blabla]
+% [texnansi-lmtt10]
+% \blabla test
+% \stoptext
+
+% \starttext
+%
+% \setupcolors[state=start]
+%
+% \definefontfeature
+% [default-base]
+% [script=latn,language=dflt,liga=yes,kern=yes,tlig=yes,trep=yes]
+% \definefontfeature
+% [default-node]
+% [script=latn,language=dflt,liga=yes,kern=yes,tlig=yes,trep=yes,mode=node]
+% \definefontfeature
+% [default-none]
+% [script=latn,language=dflt,liga=yes,kern=no, tlig=yes,trep=yes]
+%
+% \startoverlay
+% {\vtop{\color[red] {\font\test=name:lmroman12regular*default-node \test \input ward \input zapf \input linden }}}
+% {\vtop{\color[green]{\font\test=name:lmroman12regular*default-base \test \input ward \input zapf \input linden }}}
+% {\vtop{\color[blue] {\font\test=name:lmroman12regular*default-none \test \input ward \input zapf \input linden }}}
+% \stopoverlay
+%
+% \blank
+%
+% \startoverlay
+% {\vtop{\color[red] {\font\test=name:texgyrepagella*default-node \test \input ward \input zapf \input linden }}}
+% {\vtop{\color[green]{\font\test=name:texgyrepagella*default-base \test \input ward \input zapf \input linden }}}
+% {\vtop{\color[blue] {\font\test=name:texgyrepagella*default-none \test \input ward \input zapf \input linden }}}
+% \stopoverlay
+%
+% \blank
+%
+% \startoverlay
+% {\vtop{\color[red] {\font\test=name:palatinonovaregular*default-node \test \input ward \input zapf \input linden }}}
+% {\vtop{\color[green]{\font\test=name:palatinonovaregular*default-base \test \input ward \input zapf \input linden }}}
+% {\vtop{\color[blue] {\font\test=name:palatinonovaregular*default-none \test \input ward \input zapf \input linden }}}
+% \stopoverlay
+%
+% \startoverlay
+% {\vtop{\color[red] {\font\test=name:OfficinaSerifBookITC*default-node \test \input ward \input zapf \input linden }}}
+% {\vtop{\color[green]{\font\test=name:OfficinaSerifBookITC*default-base \test \input ward \input zapf \input linden }}}
+% {\vtop{\color[blue] {\font\test=name:OfficinaSerifBookITC*default-none \test \input ward \input zapf \input linden }}}
+% \stopoverlay
+%
+% \definefontfeature[superdefault][default][compose=yes]
+%
+% {\font\oeps=name:lmroman10regular*default at 30pt \oeps test \char7683}
+% {\font\oeps=name:lmroman10regular*superdefault at 30pt \oeps test \char7683}
+%
+% \stoptext
+
+\beginLUATEX
+
+ \def\checkfontfilename% -- todo: integrate so that we call do.. directly
+ {\expandafter\docheckfontfilename\fontfile*\empty*\relax}
+
+ \def\docheckfontfilename#1*#2#3*#4\relax % class overrules file
+ {\edef\checkedfontfile{{%
+ #1%
+ \expandafter\ifx\csname\fontclass\s!features\endcsname\empty
+ \ifx\@@fontfeatures\empty\ifx#2\empty\else*#2#3\fi\else*\@@fontfeatures\fi
+ \else
+ *\csname\fontclass\s!features\endcsname
+ \fi
+ }}%
+ \doshowcheckedfontfeatures}
+
+\endLUATEX
+
+% xetex / todo: disable default features ! file:, name:, [], "" etc etc
+
+\beginXETEX
+
+ % for some reason xetex does not support [filename] for tfm files and
+ % quotes also behave kind of strange " vs ' vs [ vs ...
+
+ % we need to use the specs,
+ %
+ % \font\myfont = msam7 % ok
+ % \font\myfont = "msam7" % also ok
+ % \font\myfont = "msam7" at 8pt % error
+
+ \ifx\suppressfontnotfounderror\undefined
+
+ \newcount\xetexsavedinteractionmode
+ \newbox \xetexcrappyhackbox
+
+ \def\doiffoundxetexfontelse#1#2%
+ {\xetexsavedinteractionmode\interactionmode
+ \batchmode
+ \setbox\xetexcrappyhackbox\vbox{\par}% resets error count
+ \font\xetextempfont=#2\somefontspec\relax
+ \edef\xetextempfont{\fontname\xetextempfont}%
+ \ifx\xetextempfont\nullfontname
+ \interactionmode\xetexsavedinteractionmode
+ %\writestatus\m!fonts{fails #1: #2 (\xetextempfont)}%
+ \expandafter\secondoftwoarguments
+ \else
+ \interactionmode\xetexsavedinteractionmode
+ %\writestatus\m!fonts{succeeds #1: #2 (\xetextempfont)}%
+ \expandafter\firstoftwoarguments
+ \fi}
+
+ \else
+
+ \def\doiffoundxetexfontelse#1#2%
+ {\suppressfontnotfounderror\plusone
+ \font\xetextempfont=#2\somefontspec\relax
+ \suppressfontnotfounderror\zerocount
+ \edef\xetextempfont{\fontname\xetextempfont}%
+ \ifx\xetextempfont\nullfontname
+ %\writestatus\m!fonts{fails #1: #2 (\xetextempfont)}%
+ \expandafter\secondoftwoarguments
+ \else
+ %\writestatus\m!fonts{succeeds #1: #2 (\xetextempfont)}%
+ \expandafter\firstoftwoarguments
+ \fi}
+
+ \fi
+
+ \def\docheckfontfilenameprefix#1:#2:#3#4\relax
+ {\edef\!!stringa{#1}%
+ \edef\!!stringb{#2}%
+ \ifx\!!stringb\empty
+ % no prefix
+ \let\checkedfontfile\!!stringa
+ \doiffoundxetexfontelse{1a}{\checkedfontfile\checkedfontfeatures}
+ {\edef\checkedfontfile{\checkedfontfile\checkedfontfeatures}}
+ {\doiffoundxetexfontelse{1b}{"\checkedfontfile\checkedfontfeatures"}
+ {\edef\checkedfontfile{"\checkedfontfile\checkedfontfeatures"}}
+ {\doiffoundxetexfontelse{1c}{"[\checkedfontfile]\checkedfontfeatures"}
+ {\edef\checkedfontfile{"[\checkedfontfile]\checkedfontfeatures"}}
+ {}}}%
+ \else\ifx\!!stringa\v!file
+ % force file, only file check when no spaces
+ \let\checkedfontfile\!!stringb
+ \doiffoundxetexfontelse{2b}{"[\checkedfontfile]\checkedfontfeatures"}
+ {\edef\checkedfontfile{"[\checkedfontfile]\checkedfontfeatures"}}
+ {\doiffoundxetexfontelse{2c}{"\checkedfontfile\checkedfontfeatures"}
+ {\edef\checkedfontfile{"\checkedfontfile\checkedfontfeatures"}}
+ {}}%
+ \else\ifx\!!stringa\v!name
+ % force name, always lookup by xetex itself, "" forces otf/ttf/type1
+ \edef\checkedfontfile{"\!!stringb\checkedfontfeatures"}%
+ \else
+ % whatever, maybe even xetex spec, forget about features
+ \edef\checkedfontfile{"\!!stringa\!!stringb"}%
+ \fi\fi\fi}
+
+ \def\checkfontfilename% -- todo: integrate so that we call do.. directly
+ {\expandafter\docheckfontfilename\fontfile*\empty*\relax}
+
+ \def\docheckfontfilename#1*#2#3*#4\relax % class overrules file
+ {\edef\checkedfontfeatures
+ {\expandafter\ifx\csname\fontclass\s!features\endcsname\empty
+ \ifx\@@fontfeatures\empty\ifx#2\empty\else#2#3\fi\else\@@fontfeatures\fi
+ \else\expandafter\ifx\csname\fontclass\s!features\endcsname\relax % redundant, will go away
+ \ifx\@@fontfeatures\empty\ifx#2\empty\else#2#3\fi\else\@@fontfeatures\fi
+ \else
+ \csname\fontclass\s!features\endcsname
+ \fi\fi}%
+ \ifx\checkedfontfeatures\empty
+ % done
+ \else
+ \edef\checkedfontfeatures{\executeifdefined{\??fa\checkedfontfeatures}\empty}%
+ \ifx\checkedfontfeatures\empty
+ % done
+ \else
+ \let\convertedfontfeatures\empty
+ \processcommacommand[\checkedfontfeatures]\doconvertfontfeatures % raw
+ \ifx\convertedfontfeatures\empty
+ \let\checkedfontfeatures\empty
+ \else
+ \edef\checkedfontfeatures{:\convertedfontfeatures}%
+ \fi
+ \fi
+ \fi
+ \docheckfontfilenameprefix#1:\empty:\empty\relax
+ \doshowcheckedfontfeatures}
+
+ \def\dodoconvertfontfeatures#1=#2#3=#4\relax
+ {\ifx#2\empty
+ % invalid feature
+ \else\ifcsname @xtx@#1@#2#3\endcsname
+ \edef\convertedfontfeatures{\convertedfontfeatures\csname @xtx@#1@#2#3\endcsname;}%
+ \else
+ \edef\!!stringa{#1}%
+ \edef\!!stringb{#2#3}%
+ \edef\convertedfontfeatures
+ {\convertedfontfeatures
+ \ifx\!!stringb\v!yes
+ +\!!stringa
+ \else\ifx\!!stringb\v!no
+ -\!!stringa
+ \else
+ \!!stringa=\!!stringb
+ \fi\fi;}%
+ \fi\fi}
+
+ \def\doconvertfontfeatures#1%
+ {\dodoconvertfontfeatures#1=\empty=\relax}
+
+ \def\remapfontfeature #1 #2 #3 {\setvalue{@xtx@#1@#2}{#3}}
+
+ % this may move to another file, maybe font-xtx
+
+ \remapfontfeature tlig yes mapping=tlig
+ %remapfontfeature tlig no mapping=
+ %remapfontfeature trep yes mapping=tex-text
+ %remapfontfeature trep no mapping=
+ \remapfontfeature texligatures yes mapping=tlig
+ %remapfontfeature texligatures no mapping=
+ %remapfontfeature texquotes yes mapping=tex-text
+ %remapfontfeature texquotes no mapping=
+
+\endXETEX
+
+\let\doshowcheckedfontfeatures\relax
+
+\def\showcheckedfontfeatures
+ {\def\doshowcheckedfontfeatures{\writestatus\m!fonts{checked: \checkedfontfile}}}
+
+\def\checkedfontfile{\fontfile} % default
+
+% todo: adapt this to luatex, i.e. no encoding etc mess
+
\def\donoparsefontspec % #1 == \cs
{\edef\fontfile{\truefontname\somefontname}%
\ifx\fontfile\s!unknown \let\fontfile\defaultfontfile \fi
- \edef\lastfontname{\fontfile\somefontspec}%
+ \updatefontparameters
+ \checkfontfilename
+ \edef\lastfontname{\checkedfontfile\somefontspec}%
\ifx\fontclass\empty
\expandafter\definefontlocal
\else
@@ -1487,16 +1579,21 @@
\fi} % #1 == \cs
\def\definefontlocal#1%
- {\expandafter\font\csname#1\endcsname\lastfontname\relax}
+ {\expandafter\edef\csname#1\endcsname % ! ! ! ! not needed in luatex ! ! ! !
+ {\noexpand\csname#1:\endcsname
+ \noexpand\reactivatefont{\somefontname}{\fontfile}}%
+ \expandafter\font\csname#1:\endcsname\lastfontname\relax}
\def\definefontglobal#1% stores \somefontname=Mono and \fontfile=cmtt10
- {\expandafter\xdef\csname#1\endcsname
+ {\expandafter\xdef\csname#1\endcsname % ! ! ! ! not needed in luatex ! ! ! !
{\noexpand\csname#1:\endcsname
\noexpand\reactivatefont{\somefontname}{\fontfile}}%
\global\expandafter\font\csname#1:\endcsname\lastfontname\relax}
-\def\reactivatefont#1%#2%
- {\def\somefontname{#1}\def\fontfile}%{#2}}
+\def\reactivatefont#1#2%
+ {\def\somefontname{#1}%
+ \def\fontfile {#2}%
+ \updatefontparameters}
% can be handy for tracing purposes
%
@@ -1519,9 +1616,13 @@
%D but somehow they changed \TEX\ so that it does not matter
%D any more.
-\def\defaultfontfile{cmtt10}
-\edef\nullfontname {\fontname\nullfont}
-\edef\dummyfontname {font\strippedcsname\\}
+\def \defaultfontfile{\truefontname{Normal}} % was cmtt10, but that one is gone
+\edef\nullfontname {\fontname\nullfont}
+\edef\dummyfontname {font\strippedcsname\\}
+
+\beginXETEX
+ \def\defaultfontfile{lmtypewriter10-regular}
+\endXETEX
%D \macros
%D {everyfont,everyfontswitch}
@@ -1546,24 +1647,11 @@
%D We also accept \type{sa a}||\type{sa d} as specification.
-\beginETEX \ifcsname
-
\def\checkfontscale#1#2\end#3%
{#3\ifcsname\??ft\s!default\noexpand#1\endcsname
\csname\??ft\s!default\noexpand#1\endcsname\else#1#2%
\fi#3}
-\endETEX
-
-\beginTEX
-
-\def\checkfontscale#1#2\end#3%
- {#3\expandafter\ifx\csname\??ft\s!default\noexpand#1\endcsname\relax
- #1#2\else\csname\??ft\s!default\noexpand#1\endcsname
- \fi#3}
-
-\endTEX
-
%D The duplicate font definition, using the ever the same dummy
%D font name, results in less fuzzy error messages. In the log
%D file, for instance when overfull boxes are reported, the
@@ -1612,9 +1700,10 @@
%
% \testfeatureonce{5000}{\definefontsynonym[somefont][somename]} \end
-
\def\classfont#1#2{#1#2} % \definefont[whatever][\classfont{xx}{yy} at 10pt]
+\beginOLDTEX
+
\def\definefontsynonym[#1]#2[#3]%
{\edef\@@fontfile{#3}%
\@EA\let\csname\??ff\fontclass#1\endcsname\@@fontfile
@@ -1628,72 +1717,63 @@
\getglobalfontparameters
\fi \fi}
-\let\definefontfile\definefontsynonym % dedicated to Taco Hoekwater
+\endOLDTEX
-\def\setupfontsynonym
- {\dodoubleempty\dosetupfontsynonym}
+% We need to move the feature into the filename else it may be
+% overloaded by another reference. For instance the definition of
+% a regular and caps variant can use the same font.
-\def\dosetupfontsynonym[#1][#2]%
- {\edef\@@fontdata{#2}%
- \ifx\@@fontdata\empty \else
- \edef\@@fontfile{#1}%
+% We could use an indirect method ... store in 'array' and refer to
+% slot.
+
+\beginNEWTEX
+
+\def\definefontsynonym[#1]#2[#3]%
+ {\edef\@@fontname{#1}%
+ \edef\@@fontfile{#3}%
+ \doifnextcharelse[\dodefinefontsynonym\nodefinefontsynonym}
+
+\def\nodefinefontsynonym
+ {\@EA\let\csname\??ff\fontclass\@@fontname\endcsname\@@fontfile}
+
+\def\dodefinefontsynonym[#1]%
+ {\edef\@@fontdata{#1}%
+ \ifx\@@fontdata\empty
+ \nodefinefontsynonym
+ \else
\ifx\fontclass\empty
\getfontparameters
\else
\getglobalfontparameters
\fi
- \fi}
-
-\beginTEX
-
-\def\truefontdata#1#2%
- {\expandafter\ifx\csname\??ff#1#2\endcsname\relax
- \expandafter\ifx\csname\??ff\fontclass#1\endcsname\relax
- \expandafter\ifx\csname\??ff#1\endcsname\relax
- \expandafter\ifx\csname\??ff#2\endcsname\relax
- \else
- % raw(key)
- \csname\??ff#2\endcsname
- \fi
- \else
- % exp(Regular) raw(key)
- \expandafter\truefontdata\csname\??ff#1\endcsname#2%
- \fi
+ \ifcsname\??ff\@@fontfile\s!features\endcsname
+ \@EA\edef\csname\??ff\fontclass\@@fontname\endcsname{\@@fontfile*\csname\??ff\@@fontfile\s!features\endcsname}%
+ \@EA\let\csname\??ff\@@fontfile\s!features\endcsname\undefined
\else
- % exp(palatino Regular) raw(key)
- \expandafter\truefontdata\csname\??ff\fontclass#1\endcsname#2%
+ \nodefinefontsynonym
\fi
- \else
- % raw(Regular) raw(key)
- \csname\??ff#1#2\endcsname
\fi}
-\def\truefontname#1%
- {\expandafter\ifx\csname\??ff\fontclass#1\endcsname\relax
- \expandafter\ifx\csname\??ff#1\endcsname\relax
- #1%
- \else
- \@EA\truefontname\csname\??ff#1\endcsname
- \fi
- \else
- \@EA\truefontname\csname\??ff\fontclass#1\endcsname
- \fi}
+\endNEWTEX
-\def\expandfontsynonym#1#2% #2 := onelevelexpansion(#1)
- {\@EA\ifx\csname\??ff\fontclass#2\endcsname\relax\else
- \expandafter\def\expandafter#1\expandafter{\csname\??ff\fontclass#2\endcsname}%
- \fi}
+% \def\resetfontsynonym[#1]% fails
+% {\letbeundefined{\??ff\fontclass#1}\letbeundefined{\??ff#1}}
-\def\doifelsefontsynonym#1%
- {\@EA\ifx\csname\??ff\fontclass#1\endcsname\relax
- \expandafter\secondoftwoarguments
- \else
- \expandafter\firstoftwoarguments
- \fi}
+\let\definefontfile\definefontsynonym % dedicated to Taco Hoekwater
-\endTEX
+\def\setupfontsynonym
+ {\dodoubleempty\dosetupfontsynonym}
-\beginETEX \ifcsname
+\def\dosetupfontsynonym[#1][#2]%
+ {\edef\@@fontdata{#2}%
+ \ifx\@@fontdata\empty \else
+ \edef\@@fontfile{#1}%
+ \ifx\fontclass\empty
+ \getfontparameters
+ \else
+ \getglobalfontparameters
+ \fi
+ \fi}
\def\truefontdata#1#2%
{\ifcsname\??ff#1#2\endcsname
@@ -1710,6 +1790,8 @@
\csname\??ff#2\endcsname
\fi\fi\fi\fi}
+\beginOLDTEX
+
\def\truefontname#1%
{\ifcsname\??ff\fontclass#1\endcsname
\@EA\truefontname\csname\??ff\fontclass#1\endcsname
@@ -1719,6 +1801,86 @@
#1%
\fi\fi}
+\endOLDTEX
+
+\beginNEWTEX
+
+% simple version
+%
+% \def\truefontname#1%
+% {\@EA\dotruefontname#1*\relax}
+%
+% \def\dotruefontname#1*#2\relax
+% {\ifcsname\??ff\fontclass#1\endcsname
+% \@EA\truefontname\csname\??ff\fontclass#1\endcsname
+% \else\ifcsname\??ff#1\endcsname
+% \@EA\truefontname\csname\??ff#1\endcsname
+% \else
+% #1%
+% \fi\fi}
+%
+% last counts
+%
+% \def\truefontname#1%
+% {\@EA\dotruefontname#1*\empty*\relax}
+%
+% \def\dotruefontname#1*#2#3*#4\relax
+% {\ifcsname\??ff\fontclass#1\endcsname
+% \ifx#2\empty
+% \@EA\truefontname\csname\??ff\fontclass#1\endcsname
+% \else
+% \@EA\truefontname\csname\??ff\fontclass#1\endcsname*#2#3%
+% \fi
+% \else\ifcsname\??ff#1\endcsname
+% \ifx#2\empty
+% \@EA\truefontname\csname\??ff#1\endcsname
+% \else
+% \@EA\truefontname\csname\??ff#1\endcsname*#2#3%
+% \fi
+% \else
+% \ifx#2\empty
+% #1%
+% \else
+% #1*#2#3%
+% \fi
+% \fi\fi}
+%
+% first counts
+
+\def\truefontname#1%
+ {\@EA\dotruefontname#1*\empty*\relax}
+
+\def\dotruefontname#1*#2#3*#4\relax
+ {\ifcsname\??ff\fontclass#1\endcsname
+ \ifx#2\empty
+ \@EA\truefontname\csname\??ff\fontclass#1\endcsname
+ \else
+ \@EA\redotruefontname\csname\??ff\fontclass#1\endcsname*#2#3%
+ \fi
+ \else\ifcsname\??ff#1\endcsname
+ \ifx#2\empty
+ \@EA\truefontname\csname\??ff#1\endcsname
+ \else
+ \@EA\redotruefontname\csname\??ff#1\endcsname*#2#3%
+ \fi
+ \else
+ #1\ifx#2\empty\else*#2#3\fi
+ \fi\fi}
+
+\def\redotruefontname#1%
+ {\@EA\dodotruefontname#1*\relax}
+
+\def\dodotruefontname#1*#2\relax
+ {\ifcsname\??ff\fontclass#1\endcsname
+ \@EA\redotruefontname\csname\??ff\fontclass#1\endcsname
+ \else\ifcsname\??ff#1\endcsname
+ \@EA\redotruefontname\csname\??ff#1\endcsname
+ \else
+ #1%
+ \fi\fi}
+
+\endNEWTEX
+
\def\expandfontsynonym#1#2% #2 := onelevelexpansion(#1)
{\ifcsname\??ff\fontclass#2\endcsname
\expandafter\def\expandafter#1\expandafter{\csname\??ff\fontclass#2\endcsname}%
@@ -1730,8 +1892,6 @@
\else
\expandafter\secondoftwoarguments
\fi}
-
-\endETEX
% \definetypeface[palatino][rm][serif][palatino,allbold][default]
%
@@ -1749,7 +1909,9 @@
\def\dostartfontclass[#1]%
{\pushmacro\fontclass
- \doifsomething{#1}{\def\fontclass{#1}}}
+ \doifelse{#1}{\v!each}
+ {\let\fontclass\empty}
+ {\doifsomething{#1}{\def\fontclass{#1}}}}
\def\stopfontclass
{\popmacro\fontclass}
@@ -1759,30 +1921,6 @@
%D
%D A goody:
-\beginTEX
-
-\def\tracedfontencoding#1%
- {\expandafter\ifx\csname\??ff#1\s!encoding\endcsname\relax\else
- \space[\csname\??ff#1\s!encoding\endcsname]%
- \fi}
-
-\def\tracedfontname#1%
- {\expandafter\ifx\csname\??ff\fontclass#1\endcsname\relax
- \expandafter\ifx\csname\??ff#1\endcsname\relax
- #1%
- \else
- #1\tracedfontencoding{#1}\space->\space
- \@EA\tracedfontname\csname\??ff#1\endcsname
- \fi
- \else
- #1\tracedfontencoding{\fontclass#1}\space->\space
- \@EA\tracedfontname\csname\??ff\fontclass#1\endcsname
- \fi}
-
-\endTEX
-
-\beginETEX
-
\def\tracedfontencoding#1%
{\ifcsname\??ff#1\s!encoding\endcsname
\space[\csname\??ff#1\s!encoding\endcsname]%
@@ -1798,8 +1936,6 @@
\else
#1%
\fi\fi}
-
-\endETEX
%D \macros
%D {getfontfileparameters}
@@ -1823,11 +1959,12 @@
% {\edef\fontdata{\truefontdata{\truefontname{#1}}}%
% \expanded{\getparameters[\@@currentfontfile][\fontdata]}}
-\def\getfontfileparameters#1%
+\def\getfontfileparameters#1% can be simpler for mkii
{\edef\@@truefontname{\truefontname{#1}}%
\edef\currentfontfileencoding{\truefontdata\@@truefontname\s!encoding}%
\edef\currentfontfilemapping {\truefontdata\@@truefontname\s!mapping }%
- \edef\currentfontfilehandling{\truefontdata\@@truefontname\s!handling}}
+ \edef\currentfontfilehandling{\truefontdata\@@truefontname\s!handling}%
+ \edef\currentfontfilefeatures{\truefontdata\@@truefontname\s!features}}
%D \macros
%D {definefont}
@@ -1842,17 +1979,7 @@
%D \definefont[Text][LucidaBright sa 5.4] \Text last
%D \stoptyping
%D
-%D The implementation one looks familiar:
-
-% The simple implementation is:
-%
-% \def\definefont
-% {\dodoubleargument\dodefinefont}
-%
-% \def\dodefinefont[#1][#2]%
-% {\doifinstringelse{ }{#2}
-% {\unexpanded\setvalue{#1}{\dododefinefont{#1}{#2}}}
-% {\dodefinefont[#1][#2 sa 1]}}
+%D The implementation looks as follows:
\def\definefont
{\dotripleempty\dodefinefont}
@@ -1866,14 +1993,6 @@
\fi}
{\definefont[#1][#2 sa *][#3]}}
-%\def\redodefinefont#1#2#3%
-% {\dododefinefont{#1}{#2}%
-% \doifnumberelse{#3}
-% {\setupinterlinespace[#3]\setupspacing}
-% {\doifassignmentelse{#3}
-% {\setupinterlinespace[#3]\setupspacing}
-% {\setups[#3]}}} % so, we can have setups associated to fonts !
-
\def\redodefinefont#1#2#3%
{\dododefinefont{#1}{#2}%
\doifsetupselse{#3}
@@ -1881,6 +2000,13 @@
{\setuplocalinterlinespace[#3]%
\setupspacing}} % needed ?
+\def\definefrozenfont
+ {\dotripleempty\dodefinefrozenfont}
+
+\def\dodefinefrozenfont[#1][#2][#3]%
+ {\dodefinefont[#1][#2][#3]%
+ \expandafter\let\csname\lastfontidentifier\expandafter\endcsname\csname\rawfontidentifier\endcsname}
+
% \def\defineclassfont
% {\doquadrupleempty\dodefineclassfont}
%
@@ -1922,28 +2048,6 @@
\setfontcharacteristics
\the\everyfontswitch}
-\beginTEX
-
-\def\xxdododefinefont#1#2#3#4% \autofontsizetrue is set by calling routine
- {\edef\lastfontidentifier{#3}%
- \@EA\ifx\csname\newfontidentifier\endcsname\relax
- \def\localrelativefontsize{#1}%
- \def\localabsolutefontsize{#2}%
- \parsefontspec{#4}\newfontidentifier
- \let\localrelativefontsize\defaultrelativefontsize % not needed
- \fi
- \csname\newfontidentifier\endcsname
- \autofontsizefalse
- %\edef\lastfontidentifier{#3}%
- \ifskipfontcharacteristics \else
- \setfontcharacteristics
- \the\everyfontswitch
- \fi}
-
-\endTEX
-
-\beginETEX \ifcsname
-
\def\xxdododefinefont#1#2#3#4% \autofontsizetrue is set by calling routine
{\edef\lastfontidentifier{#3}%
\ifcsname\newfontidentifier\endcsname\else
@@ -1960,8 +2064,6 @@
\the\everyfontswitch
\fi}
-\endETEX
-
%D I considered checking for mistakenly use of \PLAIN's
%D \type{\magstep}'s but although it would take only a few
%D lines of code, this would not add to consistent use. I
@@ -2002,19 +2104,6 @@
{\scratchdimen#1\relax % \relax is really needed here
\setvalue{\??ft*\the\scratchdimen}{#2}}
-\beginTEX
-
-\def\setmappedfontsize#1%
- {\expandafter\ifx\csname\??ft*#1\endcsname\relax
- #1%
- \else
- \csname\??ft*#1\endcsname
- \fi}
-
-\endTEX
-
-\beginETEX \ifcsname
-
\def\setmappedfontsize#1%
{\ifcsname\??ft*#1\endcsname
\csname\??ft*#1\endcsname
@@ -2022,8 +2111,6 @@
#1%
\fi}
-\endETEX
-
%D \macros
%D {getfontname}
%D
@@ -2065,34 +2152,6 @@
%D returns the current scaling factor. Take a look at
%D \type {cont-log.tex} for an example of its use.
-\beginTEX
-
-\def\currentfontscale
- {\@EA\ifx\csname\??ft\s!default\xfontsize\endcsname\relax
- \@EA\ifx\csname\??ft\s!default\s!text\endcsname\relax
- 1%
- \else
- \csname\??ft\s!default\s!text\endcsname
- \fi
- \else
- \csname\??ft\s!default\xfontsize\endcsname
- \fi}
-
-\def\currentfontbodyscale
- {\@EA\ifx\csname\??ft\s!default\fontsize\endcsname\relax
- \@EA\ifx\csname\??ft\s!default\s!text\endcsname\relax
- 1%
- \else
- \csname\??ft\s!default\s!text\endcsname
- \fi
- \else
- \csname\??ft\s!default\fontsize\endcsname
- \fi}
-
-\endTEX
-
-\beginETEX \ifcsname
-
\def\currentfontscale
{\csname\??ft\s!default
\ifcsname\??ft\s!default\xfontsize\endcsname \xfontsize \else
@@ -2105,8 +2164,6 @@
\ifcsname\??ft\s!default\s!text \endcsname \s!text \fi\fi
\endcsname}
-\endETEX
-
\setvalue{\??ft\s!default}{1}
%D Both alternatives use \type {\xfontsize}, a macro that
@@ -2300,20 +2357,9 @@
%D Just a couple of interface macros:
-\beginTEX
-
-\def\bodyfontvariable#1%
- {\??ft\@EA\ifx\csname\??ft\fontclass#1\endcsname\relax\else\fontclass\fi#1}
-
-\endTEX
-
-\beginETEX \ifcsname
-
\def\bodyfontvariable#1%
{\??ft\ifcsname\??ft\fontclass#1\endcsname\fontclass\fi#1}
-\endETEX
-
\def\bodyfontcsname
{\csname\bodyfontvariable}
@@ -2675,7 +2721,7 @@
%D easily be made \ETEX\ aware.
%D \macros
-%D {everybodyfont,Everybodyfont}
+%D {everybodyfont,Everybodyfont,everyglobalbodyfont}
%D
%D Every change in bodyfont size has conseqences for the baseline
%D distance and skips between paragraphs. These are initialized
@@ -2746,27 +2792,10 @@
\chardef\fontdigits=1
-% \def\donormalizedbodyfontsize#1.#2#3#4\to#5%
-% {\edef#5%
-% {#1%
-% \ifcase\fontdigits\space
-% \or
-% \ifcase#2 \else.#2\fi % and not: \ifcase#2\else ...
-% \else
-% \ifcase#2#3 \else.#2\ifcase#3 \else#3\fi\fi % not: \ifcase#2#3\else ...
-% \fi
-% pt}}
-%
-% \def\normalizebodyfontsize#1\to#2%
-% {\scratchdimen#1\relax
-% \@EA\@EA\@EA\donormalizedbodyfontsize
-% \@EA\WITHOUTPT\the\scratchdimen00\to#2}
-
\def\normalizebodyfontsize#1\to#2%
{\scratchdimen#1\relax
\ifcase\fontdigits\advance\scratchdimen.5\points\fi
- \@EA\@EA\@EA\donormalizedbodyfontsize
- \@EA\WITHOUTPT\the\scratchdimen00\to#2}
+ \@EA\@EA\@EA\donormalizedbodyfontsize\@EA\WITHOUTPT\the\scratchdimen00\to#2}
\def\donormalizedbodyfontsize#1.#2#3#4\to#5% \points ?
{\edef#5%
@@ -2919,6 +2948,7 @@
\doswitchpoints[\normalizedbodyfontsize]%
\doswitchstyle[\fontstyle]%
\the\everybodyfont
+ \the\everyglobalbodyfont
\saveinterlinespace
\global\let\preloadfonts\relax}
@@ -3141,21 +3171,6 @@
\newtoks\fontstrategies
\newif\iftryingfont
-% \def\synchronizefont
-% {\tryingfonttrue
-% \ifx\fontclass\empty\else
-% \let\fontstrategy\dofontclassstrategy
-% \the\fontstrategies \relax % \relax still needed ?
-% \fi
-% \iftryingfont
-% \let\fontstrategy\dofontstrategy
-% \the\fontstrategies \relax % \relax still needed ?
-% \fi
-% \ifskipfontcharacteristics
-% \setfontcharacteristics
-% \the\everyfontswitch
-% \fi}
-
\let\fontstrategy\relax
\def\synchronizefont
@@ -3173,22 +3188,6 @@
\the\everyfontswitch
\fi}
-\beginTEX
-
-\def\dofontstrategy#1#2#3#4#5%
- {\@EA\ifx\csname#2#3#4#5\endcsname\relax\else
- #1\csname#2#3#4#5\endcsname \tryingfontfalse
- \fi}
-
-\def\dofontclassstrategy#1#2#3#4#5%
- {\@EA\ifx\csname\fontclass#2#3#4#5\endcsname\relax\else
- #1\csname\fontclass#2#3#4#5\endcsname \tryingfontfalse
- \fi}
-
-\endTEX
-
-\beginETEX \ifcsname
-
\def\dofontstrategy#1#2#3#4#5%
{\ifcsname#2#3#4#5\endcsname
#1\csname#2#3#4#5\endcsname \tryingfontfalse
@@ -3199,8 +3198,6 @@
#1\csname\fontclass#2#3#4#5\endcsname \tryingfontfalse
\fi}
-\endETEX
-
\appendtoks \iftryingfont \fontstrategy \autofontsizefalse % --- --- --- --- % pt tt bf a
\fontbody \fontstyle \fontalternative \fontsize
\fi \to \fontstrategies
@@ -3231,7 +3228,9 @@
\prependtoks
\ifsynchronizefonts
- \synchronizemath \synchronizetext \synchronizefont
+ \synchronizemath
+ \synchronizetext
+ \synchronizefont % problem: syncs last font
\fi
\to \everybodyfont
@@ -3242,20 +3241,6 @@
%D in text mode the values defined by the bodyfontenvironment are
%D used. Here we also set \type{\currentxfontsize}.
-\beginTEX
-
-\def\dosetcurrentfontxxxalternative#1#2#3#4%
- {\chardef\currentxfontsize#2\relax
- \ifmmode
- #4%
- \else\expandafter\ifx\csname\bodyfontvariable{\normalizedbodyfontsize#3}\endcsname\relax\else
- \setcurrentfontbodyalternative{\bodyfontcsname\normalizedbodyfontsize#3\endcsname}{#1}%
- \fi\fi}
-
-\endTEX
-
-\beginETEX \ifcsname
-
\def\dosetcurrentfontxxxalternative#1#2#3#4%
{\chardef\currentxfontsize#2\relax
\ifmmode
@@ -3264,8 +3249,6 @@
\setcurrentfontbodyalternative{\bodyfontcsname\normalizedbodyfontsize#3\endcsname}{#1}%
\fi\fi}
-\endETEX
-
\def\setcurrentfontxalternative#1%
{\dosetcurrentfontxxxalternative{#1}1\c!x\scriptstyle
\let\tx\txx}
@@ -3351,7 +3334,7 @@
{\rawdoifinsetelse{#2}{\stylelist}
{}%\debuggerinfo\m!fonts{unknown style #2}}
{\addtocommalist{#2}\stylelist
- \showmessage\m!fonts8{#2 (#1)}}%
+ \showmessage\m!fonts8{#2\space (#1)}}%
% check kan hier
\def\docommand##1%
{\setvalue{\@shortstyle@##1}{#2}%
@@ -3471,7 +3454,8 @@
\normalizebodyfontsize\globalbodyfontsize\to\normalizedglobalbodyfontsize
\let\globalfontstyle\fontstyle
\ifloadingfonts\else
- \the\everybodyfont % indeed needed in case \dosetfont is not executed
+ \the\everybodyfont
+ \the\everyglobalbodyfont
\saveinterlinespace
\fi}}
@@ -3485,24 +3469,6 @@
%D The following alternative is meant for math||to||text
%D switching and will be optimized.
-\beginTEX
-
-\def\fastswitchtobodyfont#1%
- {\@EA\ifx\csname\??ft\normalizedbodyfontsize#1\endcsname\else
- \edef\futurebodyfontsize
- {\csname\??ft\normalizedbodyfontsize#1\endcsname}%
- \@EA\ifx\csname\@size@\futurebodyfontsize\endcsname\else
- \csname\@size@\futurebodyfontsize\endcsname
- \localbodyfontsize\futurebodyfontsize\relax
- \fi
- \fi
- \csname\@style@\fontstyle\endcsname
- \the\everybodyfont}
-
-\endTEX
-
-\beginETEX \ifcsname
-
\def\fastswitchtobodyfont#1%
{\ifcsname\??ft\normalizedbodyfontsize#1\endcsname
\edef\futurebodyfontsize
@@ -3515,8 +3481,6 @@
\csname\@style@\fontstyle\endcsname
\the\everybodyfont}
-\endETEX
-
%D Because the last macro can appear in arguments or be assigned
%D to parameters, we protect this one for unwanted expansion.
@@ -3529,19 +3493,8 @@
\scriptfont \mrfam\scriptfont \mffam
\scriptscriptfont\mrfam\scriptscriptfont\mffam}
-\beginTEX
-
- \def\domffam#1%
- {\csname\ifundefined{#1\s!fam}\c!nn\else#1\fi\s!fam\endcsname}
-
-\endTEX
-
-\beginETEX \ifcsname
-
- \def\domffam#1%
- {\csname\ifcsname#1\s!fam\endcsname#1\else\c!nn\fi\s!fam\endcsname}
-
-\endETEX
+\def\domffam#1%
+ {\csname\ifcsname#1\s!fam\endcsname#1\else\c!nn\fi\s!fam\endcsname}
\def\mffam
{\domffam\fontalternative}
@@ -3557,39 +3510,36 @@
% \enableencodinginmath % too untested to enable by default
-%D \startyping
+%D \starttyping
%D $\cases{& \ccaron}$ $x=\hbox{\ccaron $x=\hbox{\ccaron}$}$
%D \stoptyping
%D The font specific features are bound to the filename.
-\def\updatefontparameters
- {\edef\@@fontencoding{\truefontdata\fontfile \s!encoding}%
- \edef\@@fontmapping {\truefontdata\fontfile \s!mapping }%
- \edef\@@fonthandling{\truefontdata\somefontname\s!handling}%
- \edef\@@fontskewchar{\truefontdata\fontfile \s!skewchar}}
-
-\def\setfontcharacteristics
- {\updatefontparameters
- \fastenableencoding
- {\ifx\@@fontencoding\empty
- \s!default \else \@@fontencoding
- \fi}%
- \fastenablemapping
- {\ifx\@@fontmapping\empty
- \ifx\@@fontencoding\empty
- \s!default \else \@@fontencoding
- \fi
- \else
- \@@fontmapping
- \fi}%
- \fastenablehandling
- {\ifx\@@fonthandling\empty
- \s!default \else \@@fonthandling
- \fi}%
- {\lastfontidentifier}%
- \the\everyfont
- \synchronizepatterns}
+\ifx\updatefontparameters \undefined \let\updatefontparameters \relax \fi
+\ifx\setfontcharacteristics\undefined \let\setfontcharacteristics\relax \fi
+
+%D Experimental:
+
+\def\definefontfeature
+ {\dotripleargument\dodefinefontfeature}
+
+\def\dodefinefontfeature[#1][#2][#3]%
+ {\mkdefinefontfeature{#1}{#2}{#3}}
+
+\ifx\mkdefinefontfeature\undefined \let\mkdefinefontfeature\gobbletwoarguments \fi
+
+\definefontfeature
+ [default]
+ [liga=yes,kern=yes,tlig=yes,trep=yes] % texligatures=yes,texquotes=yes
+
+\definefontfeature
+ [smallcaps]
+ [liga=yes,kern=yes,tlig=yes,trep=yes,smcp=yes] % texligatures=yes,texquotes=yes
+
+\definefontfeature
+ [oldstyle]
+ [liga=yes,kern=yes,tlig=yes,trep=yes,onum=yes] % texligatures=yes,texquotes=yes
%D The next auxilliary macro is an alternative to \type
%D {\fontname}.
@@ -3737,6 +3687,7 @@
{\doswitchpoints[\normalizedbodyfontsize]%
\doswitchstyle[\fontstyle]%
\the\everybodyfont
+ \the\everyglobalbodyfont
\saveinterlinespace}
%D \macros
@@ -3757,7 +3708,9 @@
\doswitchpoints[\normalizedglobalbodyfontsize]%
\doswitchstyle[\globalfontstyle]%
\redoconvertfont % just in case a pagebreak occurs
- \tf \the\everybodyfont
+ \tf
+ \the\everybodyfont
+ \the\everyglobalbodyfont
\saveinterlinespace}
\def\partialrestoreglobalbodyfont
@@ -4279,8 +4232,6 @@
% \def\fontstringC{\executeifdefined{\??ff:s:\fontstyle}\empty}
% \def\fontstringD{\executeifdefined{\??ff:t:\csname\??tf\fontclass\s!default\endcsname}\s!Serif}
-\beginETEX \ifcsname
-
\def\glyphfontfile#1%
{#1%
\ifcsname\??ff#1\fontstringA\fontstringC\endcsname
@@ -4295,25 +4246,6 @@
\fontstringC
\fi\fi\fi\fi\fi}
-\endETEX
-
-\beginTEX
-
-\def\glyphfontfile#1%
- {#1%
- \expandafter\ifx\csname\??ff#1\fontstringA\fontstringC\endcsname\relax
- \expandafter\ifx\csname\??ff#1\fontstringB\fontstringC\endcsname\relax
- \expandafter\ifx\csname\??ff#1\fontstringA\endcsname\relax
- \expandafter\ifx\csname\??ff#1\fontstringB\endcsname\relax
- \expandafter\ifx\csname\??ff#1\fontstringC\endcsname\relax
- \else \fontstringC \fi
- \else \fontstringB \fi
- \else \fontstringA \fi
- \else \fontstringB\fontstringC \fi
- \else \fontstringA\fontstringC \fi}
-
-\endTEX
-
%D The next macro can be used to make decisions based on the shape:
\def\doifitalicelse#1#2%
@@ -4708,21 +4640,24 @@
\definefontsize[\c!a] \definefontsize[\c!b]
\definefontsize[\c!c] \definefontsize[\c!d]
-\definealternativestyle [\v!mediaeval] [\os] []
-\definealternativestyle [\v!normal] [\tf] []
-\definealternativestyle [\v!bold] [\bf] []
-\definealternativestyle [\v!type] [\tt] []
-\definealternativestyle [\v!mono] [\tt] []
-\definealternativestyle [\v!slanted] [\sl] []
-\definealternativestyle [\v!italic] [\it] []
-\definealternativestyle [\v!boldslanted,\v!slantedbold] [\bs] []
-\definealternativestyle [\v!bolditalic,\v!italicbold] [\bi] []
-\definealternativestyle [\v!small,\v!smallnormal] [\tfx] []
-\definealternativestyle [\v!smallbold] [\bfx] []
-\definealternativestyle [\v!smalltype] [\ttx] []
-\definealternativestyle [\v!smallslanted] [\slx] []
-\definealternativestyle [\v!smallboldslanted,\v!smallslantedbold] [\bsx] []
-\definealternativestyle [\v!smallbolditalic,\v!smallitalicbold] [\bix] []
+\definealternativestyle [\v!mediaeval] [\os] []
+\definealternativestyle [\v!normal] [\tf] []
+\definealternativestyle [\v!bold] [\bf] []
+\definealternativestyle [\v!type] [\tt] []
+\definealternativestyle [\v!mono] [\tt] []
+\definealternativestyle [\v!slanted] [\sl] []
+\definealternativestyle [\v!italic] [\it] []
+\definealternativestyle [\v!boldslanted,\v!slantedbold] [\bs] []
+\definealternativestyle [\v!bolditalic,\v!italicbold] [\bi] []
+\definealternativestyle [\v!small,\v!smallnormal] [\tfx] []
+\definealternativestyle [\v!smallbold] [\bfx] []
+\definealternativestyle [\v!smalltype] [\ttx] []
+\definealternativestyle [\v!smallslanted] [\slx] []
+\definealternativestyle [\v!smallboldslanted,\v!smallslantedbold] [\bsx] []
+\definealternativestyle [\v!smallbolditalic,\v!smallitalicbold] [\bix] []
+
+\definealternativestyle [\v!sans,\v!sansserif] [\ss] []
+\definealternativestyle [\v!sansbold] [\ss\bf] []
%D Slow but handy:
@@ -4894,22 +4829,6 @@
%D \doiffontpresentelse{adam-lindsay-modern-serif}{YES}{NO}
%D \stoptyping
-\beginTEX
-
-\def\doiffontpresentelse#1%
- {\bgroup
- \batchmode\font\dummy=\truefontname{#1}\errorstopmode
- \edef\lastfontname{\fontname\dummy}%
- \ifx\lastfontname\nullfontname
- \egroup\expandafter\secondoftwoarguments
- \else
- \egroup\expandafter\firstoftwoarguments
- \fi}
-
-\endTEX
-
-\beginETEX \interactionmode
-
\def\doiffontpresentelse#1%
{\bgroup
\scratchcounter\interactionmode
@@ -4923,6 +4842,4 @@
\egroup\expandafter\firstoftwoarguments
\fi}
-\endETEX
-
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/font-map.lua b/Master/texmf-dist/tex/context/base/font-map.lua
new file mode 100644
index 00000000000..64ff268fb7e
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/font-map.lua
@@ -0,0 +1,121 @@
+if not modules then modules = { } end modules ['font-map'] = {
+ version = 1.001,
+ comment = "companion to font-ini.tex",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+--[[ldx--
+<p>Eventually this code will disappear because map files are kind
+of obsolete. Some code may move to runtime or auxiliary modules.</p>
+--ldx]]--
+
+fonts = fonts or { }
+fonts.map = fonts.map or { }
+fonts.map.data = fonts.map.data or { }
+fonts.map.encodings = fonts.map.encodings or { }
+fonts.map.done = fonts.map.done or { }
+fonts.map.loaded = fonts.map.loaded or { }
+fonts.map.direct = fonts.map.direct or { }
+fonts.map.line = fonts.map.line or { }
+
+function fonts.map.line.pdfmapline(tag,str)
+ return "\\loadmapline[" .. tag .. "][" .. str .. "]"
+end
+
+function fonts.map.line.pdftex(e) -- so far no combination of slant and stretch
+ if e.name and e.fontfile then
+ local fullname = e.fullname or ""
+ if e.slant and e.slant ~= 0 then
+ if e.encoding then
+ return fonts.map.line.pdfmapline("=",string.format('%s %s "%g SlantFont" <%s <%s',e.name,fullname,e.slant,e.encoding,e.fontfile))
+ else
+ return fonts.map.line.pdfmapline("=",string.format('%s %s "%g SlantFont" <%s',e.name,fullname,e.slant,e.fontfile))
+ end
+ elseif e.stretch and e.stretch ~= 1 and e.stretch ~= 0 then
+ if e.encoding then
+ return fonts.map.line.pdfmapline("=",string.format('%s %s "%g ExtendFont" <%s <%s',e.name,fullname,e.stretch,e.encoding,e.fontfile))
+ else
+ return fonts.map.line.pdfmapline("=",string.format('%s %s "%g ExtendFont" <%s',e.name,fullname,e.stretch,e.fontfile))
+ end
+ else
+ if e.encoding then
+ return fonts.map.line.pdfmapline("=",string.format('%s %s <%s <%s',e.name,fullname,e.encoding,e.fontfile))
+ else
+ return fonts.map.line.pdfmapline("=",string.format('%s %s <%s',e.name,fullname,e.fontfile))
+ end
+ end
+ else
+ return nil
+ end
+end
+
+function fonts.map.flush(backend) -- will also erase the accumulated data
+ local flushline = fonts.map.line[backend or "pdftex"] or fonts.map.line.pdftex
+ for _, e in pairs(fonts.map.data) do
+ tex.sprint(tex.ctxcatcodes,flushline(e))
+ end
+ fonts.map.data = { }
+end
+
+fonts.map.line.dvips = fonts.map.line.pdftex
+fonts.map.line.dvipdfmx = function() end
+
+function fonts.map.convert_entries(filename)
+ if not fonts.map.loaded[filename] then
+ fonts.map.data, fonts.map.encodings = fonts.map.load_file(filename,fonts.map.data, fonts.map.encodings)
+ fonts.map.loaded[filename] = true
+ end
+end
+
+function fonts.map.load_file(filename, entries, encodings)
+ entries = entries or { }
+ encodings = encodings or { }
+ local f = io.open(filename)
+ if f then
+ local data = f:read("*a")
+ if data then
+ for line in data:gmatch("(.-)[\n\t]") do
+ if line:find("^[%#%%%s]") then
+ -- print(line)
+ else
+ local stretch, slant, name, fullname, fontfile, encoding
+ line = line:gsub('"(.+)"', function(s)
+ stretch = s:find('"([^"]+) ExtendFont"')
+ slant = s:find('"([^"]+) SlantFont"')
+ return ""
+ end)
+ if not name then
+ -- name fullname encoding fontfile
+ name, fullname, encoding, fontfile = line:match("^(%S+)%s+(%S*)[%s<]+(%S*)[%s<]+(%S*)%s*$")
+ end
+ if not name then
+ -- name fullname (flag) fontfile encoding
+ name, fullname, fontfile, encoding = line:match("^(%S+)%s+(%S*)[%d%s<]+(%S*)[%s<]+(%S*)%s*$")
+ end
+ if not name then
+ -- name fontfile
+ name, fontfile = line:match("^(%S+)%s+[%d%s<]+(%S*)%s*$")
+ end
+ if name then
+ if encoding == "" then encoding = nil end
+ entries[name] = {
+ name = name, -- handy
+ fullname = fullname,
+ encoding = encoding,
+ fontfile = fontfile,
+ slant = tonumber(slant),
+ stretch = tonumber(stretch)
+ }
+ encodings[name] = encoding
+ elseif line ~= "" then
+ -- print(line)
+ end
+ end
+ end
+ end
+ f:close()
+ end
+ return entries, encodings
+end
diff --git a/Master/texmf-dist/tex/context/base/font-otf.lua b/Master/texmf-dist/tex/context/base/font-otf.lua
new file mode 100644
index 00000000000..5c0db392dba
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/font-otf.lua
@@ -0,0 +1,4811 @@
+ if not modules then modules = { } end modules ['font-otf'] = {
+ version = 1.001,
+ comment = "companion to font-ini.tex",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- once we have all features working, i will redo this module .. caching lookups and such
+
+-- the flattening code is a prelude to a more compact table format (so, we're now
+-- at the fourth version); maybe we will go unicode, although that will mean that we
+-- miss some glyphs (unicode -1)
+
+-- todo: featuredata is now indexed by kind,lookup but probably lookup is okay too
+
+-- todo: now that we pack ... resolve strings to unicode points
+-- todo: unpack already in tmc file, i.e. save tables and return ref''d version
+-- todo: dependents etc resolve too, maybe even reorder glyphs to unicode
+-- todo: pack ignoreflags
+
+-- abvf abvs blwf blws dist falt half halt jalt lfbd ljmo
+-- mset opbd palt pwid qwid rand rtbd rtla ruby size tjmo twid valt vatu vert
+-- vhal vjmo vkna vkrn vpal vrt2
+
+-- The specification of OpenType is vague, very vague. Apart from a lack of proper
+-- specifications (a free one) there's also the problem that Microsoft and Adobe
+-- may have their own rules. Anyhow, the following is from Adobe's feature file
+-- specification:
+--
+-- http://www.adobe.com/devnet/opentype/afdko/topic_feature_file_syntax.html#6.h
+--
+-- The following is a reference summary of the algorithm used by an OpenType layout
+-- (OTL) engine to perform substitutions and positionings. The important aspect of
+-- this for a feature file editor is that each lookup corresponds to one "pass" over
+-- the glyph run (see step 4 below). Thus, each lookup has as input the accumulated
+-- result of all previous lookups in the LookupList (whether in the same feature or
+-- in other features).
+-- 1. All glyphs in the client's glyph run must belong to the same language
+-- system. Glyph sequence matching may not occur across language
+-- systems. Do the following first for the GSUB and then for the GPOS:
+-- 2. Assemble all features (including any required feature) for the glyph
+-- run's language system.
+-- 3. Assemble all lookups in these features, in LookupList order, removing
+-- any duplicates. All features and thus all lookups needn't be applied to
+-- every glyph in the run.
+-- 4. For each lookup:
+-- 5. For each glyph in the glyph run:
+-- 6. If the lookup is applied to that glyph and the lookupflag doesn't
+-- indicate that that glyph is to be ignored:
+-- 7. For each subtable in the lookup:
+-- 8. If the subtable's target context is matched:
+-- 9. Do the glyph substitution or positioning,
+-- --- OR: ---
+-- If this is a (chain) contextual lookup do the following
+-- [(10)-(11)] in the subtable's Subst/PosLookupRecord order:
+-- 10. For each (sequenceIndex, lookupListIndex) pair:
+-- 11. Apply lookup[lookupListIndex] at input sequence[sequenceIndex]
+-- [steps (7)-(11)]
+-- 12. Goto the glyph after the input sequence matched in (8)
+-- (i.e. skip any remaining subtables in the lookup).
+-- The "target context" in step 8 above comprises the input sequence and any
+-- backtrack and lookahead sequences.
+-- The input sequence must be matched entirely within the lookup's "application
+-- range" at that glyph (that contiguous subrun of glyphs including and around
+-- the current glyph on which the lookup is applied). There is no such restriction
+-- on the backtrack and lookahead sequences.
+-- "Matching" includes matching any glyphs designated to be skipped in the
+-- lookup's LookupFlag.
+
+--[[ldx--
+<p>This module is sparsely documented because it is a moving target.
+The table format of the reader changes and we experiment a lot with
+different methods for supporting features.</p>
+
+<p>As with the <l n='afm'/> code, we may decide to store more information
+in the <l n='otf'/> table.</p>
+
+<p>Incrementing the version number will force a re-cache. We jump the
+number by one when there's a fix in the <l n='fontforge'/> library or
+<l n='lua'/> code that results in different tables.</p>
+--ldx]]--
+
+--~ The node based processing functions look quite complex which is mainly due to
+--~ the fact that we need to share data and cache resolved issues (saves much memory and
+--~ is also faster). A further complication is that we support static as well as dynamic
+--~ features.
+
+fonts = fonts or { }
+fonts.otf = fonts.otf or { }
+fonts.otf.version = 2.09
+fonts.otf.pack = true
+fonts.otf.tables = fonts.otf.tables or { }
+fonts.otf.meanings = fonts.otf.meanings or { }
+fonts.otf.enhance_data = false
+fonts.otf.syncspace = true
+fonts.otf.features = { }
+fonts.otf.features.aux = { }
+fonts.otf.features.data = { }
+fonts.otf.features.list = { } -- not (yet) used, oft fonts have gpos/gsub lists
+fonts.otf.features.default = { }
+fonts.otf.trace_features = false
+fonts.otf.trace_set_features = false
+fonts.otf.trace_replacements = false
+fonts.otf.trace_contexts = false
+fonts.otf.trace_anchors = false
+fonts.otf.trace_ligatures = false
+fonts.otf.trace_kerns = false
+fonts.otf.trace_cursive = false
+fonts.otf.notdef = false
+fonts.otf.cache = containers.define("fonts", "otf", fonts.otf.version, true)
+
+function fonts.otf.trace_process()
+ fonts.otf.trace_replacements = true
+ fonts.otf.trace_contexts = true
+ fonts.otf.trace_anchors = true
+ fonts.otf.trace_ligatures = true
+ fonts.otf.trace_kerns = true
+ fonts.otf.trace_cursive = true
+end
+
+--[[ldx--
+<p>We start with a lot of tables and related functions.</p>
+--ldx]]--
+
+fonts.otf.tables.scripts = {
+ ['dflt'] = 'Default',
+
+ ['arab'] = 'Arabic',
+ ['armn'] = 'Armenian',
+ ['bali'] = 'Balinese',
+ ['beng'] = 'Bengali',
+ ['bopo'] = 'Bopomofo',
+ ['brai'] = 'Braille',
+ ['bugi'] = 'Buginese',
+ ['buhd'] = 'Buhid',
+ ['byzm'] = 'Byzantine Music',
+ ['cans'] = 'Canadian Syllabics',
+ ['cher'] = 'Cherokee',
+ ['copt'] = 'Coptic',
+ ['cprt'] = 'Cypriot Syllabary',
+ ['cyrl'] = 'Cyrillic',
+ ['deva'] = 'Devanagari',
+ ['dsrt'] = 'Deseret',
+ ['ethi'] = 'Ethiopic',
+ ['geor'] = 'Georgian',
+ ['glag'] = 'Glagolitic',
+ ['goth'] = 'Gothic',
+ ['grek'] = 'Greek',
+ ['gujr'] = 'Gujarati',
+ ['guru'] = 'Gurmukhi',
+ ['hang'] = 'Hangul',
+ ['hani'] = 'CJK Ideographic',
+ ['hano'] = 'Hanunoo',
+ ['hebr'] = 'Hebrew',
+ ['ital'] = 'Old Italic',
+ ['jamo'] = 'Hangul Jamo',
+ ['java'] = 'Javanese',
+ ['kana'] = 'Hiragana and Katakana',
+ ['khar'] = 'Kharosthi',
+ ['khmr'] = 'Khmer',
+ ['knda'] = 'Kannada',
+ ['lao' ] = 'Lao',
+ ['latn'] = 'Latin',
+ ['limb'] = 'Limbu',
+ ['linb'] = 'Linear B',
+ ['math'] = 'Mathematical Alphanumeric Symbols',
+ ['mlym'] = 'Malayalam',
+ ['mong'] = 'Mongolian',
+ ['musc'] = 'Musical Symbols',
+ ['mymr'] = 'Myanmar',
+ ['nko' ] = "N'ko",
+ ['ogam'] = 'Ogham',
+ ['orya'] = 'Oriya',
+ ['osma'] = 'Osmanya',
+ ['phag'] = 'Phags-pa',
+ ['phnx'] = 'Phoenician',
+ ['runr'] = 'Runic',
+ ['shaw'] = 'Shavian',
+ ['sinh'] = 'Sinhala',
+ ['sylo'] = 'Syloti Nagri',
+ ['syrc'] = 'Syriac',
+ ['tagb'] = 'Tagbanwa',
+ ['tale'] = 'Tai Le',
+ ['talu'] = 'Tai Lu',
+ ['taml'] = 'Tamil',
+ ['telu'] = 'Telugu',
+ ['tfng'] = 'Tifinagh',
+ ['tglg'] = 'Tagalog',
+ ['thaa'] = 'Thaana',
+ ['thai'] = 'Thai',
+ ['tibt'] = 'Tibetan',
+ ['ugar'] = 'Ugaritic Cuneiform',
+ ['xpeo'] = 'Old Persian Cuneiform',
+ ['xsux'] = 'Sumero-Akkadian Cuneiform',
+ ['yi' ] = 'Yi'
+}
+
+fonts.otf.tables.languages = {
+ ['dflt'] = 'Default',
+
+ ['aba'] = 'Abaza',
+ ['abk'] = 'Abkhazian',
+ ['ady'] = 'Adyghe',
+ ['afk'] = 'Afrikaans',
+ ['afr'] = 'Afar',
+ ['agw'] = 'Agaw',
+ ['als'] = 'Alsatian',
+ ['alt'] = 'Altai',
+ ['amh'] = 'Amharic',
+ ['ara'] = 'Arabic',
+ ['ari'] = 'Aari',
+ ['ark'] = 'Arakanese',
+ ['asm'] = 'Assamese',
+ ['ath'] = 'Athapaskan',
+ ['avr'] = 'Avar',
+ ['awa'] = 'Awadhi',
+ ['aym'] = 'Aymara',
+ ['aze'] = 'Azeri',
+ ['bad'] = 'Badaga',
+ ['bag'] = 'Baghelkhandi',
+ ['bal'] = 'Balkar',
+ ['bau'] = 'Baule',
+ ['bbr'] = 'Berber',
+ ['bch'] = 'Bench',
+ ['bcr'] = 'Bible Cree',
+ ['bel'] = 'Belarussian',
+ ['bem'] = 'Bemba',
+ ['ben'] = 'Bengali',
+ ['bgr'] = 'Bulgarian',
+ ['bhi'] = 'Bhili',
+ ['bho'] = 'Bhojpuri',
+ ['bik'] = 'Bikol',
+ ['bil'] = 'Bilen',
+ ['bkf'] = 'Blackfoot',
+ ['bli'] = 'Balochi',
+ ['bln'] = 'Balante',
+ ['blt'] = 'Balti',
+ ['bmb'] = 'Bambara',
+ ['bml'] = 'Bamileke',
+ ['bos'] = 'Bosnian',
+ ['bre'] = 'Breton',
+ ['brh'] = 'Brahui',
+ ['bri'] = 'Braj Bhasha',
+ ['brm'] = 'Burmese',
+ ['bsh'] = 'Bashkir',
+ ['bti'] = 'Beti',
+ ['cat'] = 'Catalan',
+ ['ceb'] = 'Cebuano',
+ ['che'] = 'Chechen',
+ ['chg'] = 'Chaha Gurage',
+ ['chh'] = 'Chattisgarhi',
+ ['chi'] = 'Chichewa',
+ ['chk'] = 'Chukchi',
+ ['chp'] = 'Chipewyan',
+ ['chr'] = 'Cherokee',
+ ['chu'] = 'Chuvash',
+ ['cmr'] = 'Comorian',
+ ['cop'] = 'Coptic',
+ ['cos'] = 'Corsican',
+ ['cre'] = 'Cree',
+ ['crr'] = 'Carrier',
+ ['crt'] = 'Crimean Tatar',
+ ['csl'] = 'Church Slavonic',
+ ['csy'] = 'Czech',
+ ['dan'] = 'Danish',
+ ['dar'] = 'Dargwa',
+ ['dcr'] = 'Woods Cree',
+ ['deu'] = 'German',
+ ['dgr'] = 'Dogri',
+ ['div'] = 'Divehi',
+ ['djr'] = 'Djerma',
+ ['dng'] = 'Dangme',
+ ['dnk'] = 'Dinka',
+ ['dri'] = 'Dari',
+ ['dun'] = 'Dungan',
+ ['dzn'] = 'Dzongkha',
+ ['ebi'] = 'Ebira',
+ ['ecr'] = 'Eastern Cree',
+ ['edo'] = 'Edo',
+ ['efi'] = 'Efik',
+ ['ell'] = 'Greek',
+ ['eng'] = 'English',
+ ['erz'] = 'Erzya',
+ ['esp'] = 'Spanish',
+ ['eti'] = 'Estonian',
+ ['euq'] = 'Basque',
+ ['evk'] = 'Evenki',
+ ['evn'] = 'Even',
+ ['ewe'] = 'Ewe',
+ ['fan'] = 'French Antillean',
+ ['far'] = 'Farsi',
+ ['fin'] = 'Finnish',
+ ['fji'] = 'Fijian',
+ ['fle'] = 'Flemish',
+ ['fne'] = 'Forest Nenets',
+ ['fon'] = 'Fon',
+ ['fos'] = 'Faroese',
+ ['fra'] = 'French',
+ ['fri'] = 'Frisian',
+ ['frl'] = 'Friulian',
+ ['fta'] = 'Futa',
+ ['ful'] = 'Fulani',
+ ['gad'] = 'Ga',
+ ['gae'] = 'Gaelic',
+ ['gag'] = 'Gagauz',
+ ['gal'] = 'Galician',
+ ['gar'] = 'Garshuni',
+ ['gaw'] = 'Garhwali',
+ ['gez'] = "Ge'ez",
+ ['gil'] = 'Gilyak',
+ ['gmz'] = 'Gumuz',
+ ['gon'] = 'Gondi',
+ ['grn'] = 'Greenlandic',
+ ['gro'] = 'Garo',
+ ['gua'] = 'Guarani',
+ ['guj'] = 'Gujarati',
+ ['hai'] = 'Haitian',
+ ['hal'] = 'Halam',
+ ['har'] = 'Harauti',
+ ['hau'] = 'Hausa',
+ ['haw'] = 'Hawaiin',
+ ['hbn'] = 'Hammer-Banna',
+ ['hil'] = 'Hiligaynon',
+ ['hin'] = 'Hindi',
+ ['hma'] = 'High Mari',
+ ['hnd'] = 'Hindko',
+ ['ho'] = 'Ho',
+ ['hri'] = 'Harari',
+ ['hrv'] = 'Croatian',
+ ['hun'] = 'Hungarian',
+ ['hye'] = 'Armenian',
+ ['ibo'] = 'Igbo',
+ ['ijo'] = 'Ijo',
+ ['ilo'] = 'Ilokano',
+ ['ind'] = 'Indonesian',
+ ['ing'] = 'Ingush',
+ ['inu'] = 'Inuktitut',
+ ['iri'] = 'Irish',
+ ['irt'] = 'Irish Traditional',
+ ['isl'] = 'Icelandic',
+ ['ism'] = 'Inari Sami',
+ ['ita'] = 'Italian',
+ ['iwr'] = 'Hebrew',
+ ['jan'] = 'Japanese',
+ ['jav'] = 'Javanese',
+ ['jii'] = 'Yiddish',
+ ['jud'] = 'Judezmo',
+ ['jul'] = 'Jula',
+ ['kab'] = 'Kabardian',
+ ['kac'] = 'Kachchi',
+ ['kal'] = 'Kalenjin',
+ ['kan'] = 'Kannada',
+ ['kar'] = 'Karachay',
+ ['kat'] = 'Georgian',
+ ['kaz'] = 'Kazakh',
+ ['keb'] = 'Kebena',
+ ['kge'] = 'Khutsuri Georgian',
+ ['kha'] = 'Khakass',
+ ['khk'] = 'Khanty-Kazim',
+ ['khm'] = 'Khmer',
+ ['khs'] = 'Khanty-Shurishkar',
+ ['khv'] = 'Khanty-Vakhi',
+ ['khw'] = 'Khowar',
+ ['kik'] = 'Kikuyu',
+ ['kir'] = 'Kirghiz',
+ ['kis'] = 'Kisii',
+ ['kkn'] = 'Kokni',
+ ['klm'] = 'Kalmyk',
+ ['kmb'] = 'Kamba',
+ ['kmn'] = 'Kumaoni',
+ ['kmo'] = 'Komo',
+ ['kms'] = 'Komso',
+ ['knr'] = 'Kanuri',
+ ['kod'] = 'Kodagu',
+ ['koh'] = 'Korean Old Hangul',
+ ['kok'] = 'Konkani',
+ ['kon'] = 'Kikongo',
+ ['kop'] = 'Komi-Permyak',
+ ['kor'] = 'Korean',
+ ['koz'] = 'Komi-Zyrian',
+ ['kpl'] = 'Kpelle',
+ ['kri'] = 'Krio',
+ ['krk'] = 'Karakalpak',
+ ['krl'] = 'Karelian',
+ ['krm'] = 'Karaim',
+ ['krn'] = 'Karen',
+ ['krt'] = 'Koorete',
+ ['ksh'] = 'Kashmiri',
+ ['ksi'] = 'Khasi',
+ ['ksm'] = 'Kildin Sami',
+ ['kui'] = 'Kui',
+ ['kul'] = 'Kulvi',
+ ['kum'] = 'Kumyk',
+ ['kur'] = 'Kurdish',
+ ['kuu'] = 'Kurukh',
+ ['kuy'] = 'Kuy',
+ ['kyk'] = 'Koryak',
+ ['lad'] = 'Ladin',
+ ['lah'] = 'Lahuli',
+ ['lak'] = 'Lak',
+ ['lam'] = 'Lambani',
+ ['lao'] = 'Lao',
+ ['lat'] = 'Latin',
+ ['laz'] = 'Laz',
+ ['lcr'] = 'L-Cree',
+ ['ldk'] = 'Ladakhi',
+ ['lez'] = 'Lezgi',
+ ['lin'] = 'Lingala',
+ ['lma'] = 'Low Mari',
+ ['lmb'] = 'Limbu',
+ ['lmw'] = 'Lomwe',
+ ['lsb'] = 'Lower Sorbian',
+ ['lsm'] = 'Lule Sami',
+ ['lth'] = 'Lithuanian',
+ ['ltz'] = 'Luxembourgish',
+ ['lub'] = 'Luba',
+ ['lug'] = 'Luganda',
+ ['luh'] = 'Luhya',
+ ['luo'] = 'Luo',
+ ['lvi'] = 'Latvian',
+ ['maj'] = 'Majang',
+ ['mak'] = 'Makua',
+ ['mal'] = 'Malayalam Traditional',
+ ['man'] = 'Mansi',
+ ['map'] = 'Mapudungun',
+ ['mar'] = 'Marathi',
+ ['maw'] = 'Marwari',
+ ['mbn'] = 'Mbundu',
+ ['mch'] = 'Manchu',
+ ['mcr'] = 'Moose Cree',
+ ['mde'] = 'Mende',
+ ['men'] = "Me'en",
+ ['miz'] = 'Mizo',
+ ['mkd'] = 'Macedonian',
+ ['mle'] = 'Male',
+ ['mlg'] = 'Malagasy',
+ ['mln'] = 'Malinke',
+ ['mlr'] = 'Malayalam Reformed',
+ ['mly'] = 'Malay',
+ ['mnd'] = 'Mandinka',
+ ['mng'] = 'Mongolian',
+ ['mni'] = 'Manipuri',
+ ['mnk'] = 'Maninka',
+ ['mnx'] = 'Manx Gaelic',
+ ['moh'] = 'Mohawk',
+ ['mok'] = 'Moksha',
+ ['mol'] = 'Moldavian',
+ ['mon'] = 'Mon',
+ ['mor'] = 'Moroccan',
+ ['mri'] = 'Maori',
+ ['mth'] = 'Maithili',
+ ['mts'] = 'Maltese',
+ ['mun'] = 'Mundari',
+ ['nag'] = 'Naga-Assamese',
+ ['nan'] = 'Nanai',
+ ['nas'] = 'Naskapi',
+ ['ncr'] = 'N-Cree',
+ ['ndb'] = 'Ndebele',
+ ['ndg'] = 'Ndonga',
+ ['nep'] = 'Nepali',
+ ['new'] = 'Newari',
+ ['ngr'] = 'Nagari',
+ ['nhc'] = 'Norway House Cree',
+ ['nis'] = 'Nisi',
+ ['niu'] = 'Niuean',
+ ['nkl'] = 'Nkole',
+ ['nko'] = "N'ko",
+ ['nld'] = 'Dutch',
+ ['nog'] = 'Nogai',
+ ['nor'] = 'Norwegian',
+ ['nsm'] = 'Northern Sami',
+ ['nta'] = 'Northern Tai',
+ ['nto'] = 'Esperanto',
+ ['nyn'] = 'Nynorsk',
+ ['oci'] = 'Occitan',
+ ['ocr'] = 'Oji-Cree',
+ ['ojb'] = 'Ojibway',
+ ['ori'] = 'Oriya',
+ ['oro'] = 'Oromo',
+ ['oss'] = 'Ossetian',
+ ['paa'] = 'Palestinian Aramaic',
+ ['pal'] = 'Pali',
+ ['pan'] = 'Punjabi',
+ ['pap'] = 'Palpa',
+ ['pas'] = 'Pashto',
+ ['pgr'] = 'Polytonic Greek',
+ ['pil'] = 'Pilipino',
+ ['plg'] = 'Palaung',
+ ['plk'] = 'Polish',
+ ['pro'] = 'Provencal',
+ ['ptg'] = 'Portuguese',
+ ['qin'] = 'Chin',
+ ['raj'] = 'Rajasthani',
+ ['rbu'] = 'Russian Buriat',
+ ['rcr'] = 'R-Cree',
+ ['ria'] = 'Riang',
+ ['rms'] = 'Rhaeto-Romanic',
+ ['rom'] = 'Romanian',
+ ['roy'] = 'Romany',
+ ['rsy'] = 'Rusyn',
+ ['rua'] = 'Ruanda',
+ ['rus'] = 'Russian',
+ ['sad'] = 'Sadri',
+ ['san'] = 'Sanskrit',
+ ['sat'] = 'Santali',
+ ['say'] = 'Sayisi',
+ ['sek'] = 'Sekota',
+ ['sel'] = 'Selkup',
+ ['sgo'] = 'Sango',
+ ['shn'] = 'Shan',
+ ['sib'] = 'Sibe',
+ ['sid'] = 'Sidamo',
+ ['sig'] = 'Silte Gurage',
+ ['sks'] = 'Skolt Sami',
+ ['sky'] = 'Slovak',
+ ['sla'] = 'Slavey',
+ ['slv'] = 'Slovenian',
+ ['sml'] = 'Somali',
+ ['smo'] = 'Samoan',
+ ['sna'] = 'Sena',
+ ['snd'] = 'Sindhi',
+ ['snh'] = 'Sinhalese',
+ ['snk'] = 'Soninke',
+ ['sog'] = 'Sodo Gurage',
+ ['sot'] = 'Sotho',
+ ['sqi'] = 'Albanian',
+ ['srb'] = 'Serbian',
+ ['srk'] = 'Saraiki',
+ ['srr'] = 'Serer',
+ ['ssl'] = 'South Slavey',
+ ['ssm'] = 'Southern Sami',
+ ['sur'] = 'Suri',
+ ['sva'] = 'Svan',
+ ['sve'] = 'Swedish',
+ ['swa'] = 'Swadaya Aramaic',
+ ['swk'] = 'Swahili',
+ ['swz'] = 'Swazi',
+ ['sxt'] = 'Sutu',
+ ['syr'] = 'Syriac',
+ ['tab'] = 'Tabasaran',
+ ['taj'] = 'Tajiki',
+ ['tam'] = 'Tamil',
+ ['tat'] = 'Tatar',
+ ['tcr'] = 'TH-Cree',
+ ['tel'] = 'Telugu',
+ ['tgn'] = 'Tongan',
+ ['tgr'] = 'Tigre',
+ ['tgy'] = 'Tigrinya',
+ ['tha'] = 'Thai',
+ ['tht'] = 'Tahitian',
+ ['tib'] = 'Tibetan',
+ ['tkm'] = 'Turkmen',
+ ['tmn'] = 'Temne',
+ ['tna'] = 'Tswana',
+ ['tne'] = 'Tundra Nenets',
+ ['tng'] = 'Tonga',
+ ['tod'] = 'Todo',
+ ['trk'] = 'Turkish',
+ ['tsg'] = 'Tsonga',
+ ['tua'] = 'Turoyo Aramaic',
+ ['tul'] = 'Tulu',
+ ['tuv'] = 'Tuvin',
+ ['twi'] = 'Twi',
+ ['udm'] = 'Udmurt',
+ ['ukr'] = 'Ukrainian',
+ ['urd'] = 'Urdu',
+ ['usb'] = 'Upper Sorbian',
+ ['uyg'] = 'Uyghur',
+ ['uzb'] = 'Uzbek',
+ ['ven'] = 'Venda',
+ ['vit'] = 'Vietnamese',
+ ['wa' ] = 'Wa',
+ ['wag'] = 'Wagdi',
+ ['wcr'] = 'West-Cree',
+ ['wel'] = 'Welsh',
+ ['wlf'] = 'Wolof',
+ ['xbd'] = 'Tai Lue',
+ ['xhs'] = 'Xhosa',
+ ['yak'] = 'Yakut',
+ ['yba'] = 'Yoruba',
+ ['ycr'] = 'Y-Cree',
+ ['yic'] = 'Yi Classic',
+ ['yim'] = 'Yi Modern',
+ ['zhh'] = 'Chinese Hong Kong',
+ ['zhp'] = 'Chinese Phonetic',
+ ['zhs'] = 'Chinese Simplified',
+ ['zht'] = 'Chinese Traditional',
+ ['znd'] = 'Zande',
+ ['zul'] = 'Zulu'
+}
+
+fonts.otf.tables.features = {
+ ['aalt'] = 'Access All Alternates',
+ ['abvf'] = 'Above-Base Forms',
+ ['abvm'] = 'Above-Base Mark Positioning',
+ ['abvs'] = 'Above-Base Substitutions',
+ ['afrc'] = 'Alternative Fractions',
+ ['akhn'] = 'Akhands',
+ ['blwf'] = 'Below-Base Forms',
+ ['blwm'] = 'Below-Base Mark Positioning',
+ ['blws'] = 'Below-Base Substitutions',
+ ['c2pc'] = 'Petite Capitals From Capitals',
+ ['c2sc'] = 'Small Capitals From Capitals',
+ ['calt'] = 'Contextual Alternates',
+ ['case'] = 'Case-Sensitive Forms',
+ ['ccmp'] = 'Glyph Composition/Decomposition',
+ ['cjct'] = 'Conjunct Forms',
+ ['clig'] = 'Contextual Ligatures',
+ ['cpsp'] = 'Capital Spacing',
+ ['cswh'] = 'Contextual Swash',
+ ['curs'] = 'Cursive Positioning',
+ ['dflt'] = 'Default Processing',
+ ['dist'] = 'Distances',
+ ['dlig'] = 'Discretionary Ligatures',
+ ['dnom'] = 'Denominators',
+ ['expt'] = 'Expert Forms',
+ ['falt'] = 'Final glyph Alternates',
+ ['fin2'] = 'Terminal Forms #2',
+ ['fin3'] = 'Terminal Forms #3',
+ ['fina'] = 'Terminal Forms',
+ ['frac'] = 'Fractions',
+ ['fwid'] = 'Full Width',
+ ['half'] = 'Half Forms',
+ ['haln'] = 'Halant Forms',
+ ['halt'] = 'Alternate Half Width',
+ ['hist'] = 'Historical Forms',
+ ['hkna'] = 'Horizontal Kana Alternates',
+ ['hlig'] = 'Historical Ligatures',
+ ['hngl'] = 'Hangul',
+ ['hojo'] = 'Hojo Kanji Forms',
+ ['hwid'] = 'Half Width',
+ ['init'] = 'Initial Forms',
+ ['isol'] = 'Isolated Forms',
+ ['ital'] = 'Italics',
+ ['jalt'] = 'Justification Alternatives',
+ ['jp04'] = 'JIS2004 Forms',
+ ['jp78'] = 'JIS78 Forms',
+ ['jp83'] = 'JIS83 Forms',
+ ['jp90'] = 'JIS90 Forms',
+ ['kern'] = 'Kerning',
+ ['lfbd'] = 'Left Bounds',
+ ['liga'] = 'Standard Ligatures',
+ ['ljmo'] = 'Leading Jamo Forms',
+ ['lnum'] = 'Lining Figures',
+ ['locl'] = 'Localized Forms',
+ ['mark'] = 'Mark Positioning',
+ ['med2'] = 'Medial Forms #2',
+ ['medi'] = 'Medial Forms',
+ ['mgrk'] = 'Mathematical Greek',
+ ['mkmk'] = 'Mark to Mark Positioning',
+ ['mset'] = 'Mark Positioning via Substitution',
+ ['nalt'] = 'Alternate Annotation Forms',
+ ['nlck'] = 'NLC Kanji Forms',
+ ['nukt'] = 'Nukta Forms',
+ ['numr'] = 'Numerators',
+ ['onum'] = 'Old Style Figures',
+ ['opbd'] = 'Optical Bounds',
+ ['ordn'] = 'Ordinals',
+ ['ornm'] = 'Ornaments',
+ ['palt'] = 'Proportional Alternate Width',
+ ['pcap'] = 'Petite Capitals',
+ ['pnum'] = 'Proportional Figures',
+ ['pref'] = 'Pre-base Forms',
+ ['pres'] = 'Pre-base Substitutions',
+ ['pstf'] = 'Post-base Forms',
+ ['psts'] = 'Post-base Substitutions',
+ ['pwid'] = 'Proportional Widths',
+ ['qwid'] = 'Quarter Widths',
+ ['rand'] = 'Randomize',
+ ['rkrf'] = 'Rakar Forms',
+ ['rlig'] = 'Required Ligatures',
+ ['rphf'] = 'Reph Form',
+ ['rtbd'] = 'Right Bounds',
+ ['rtla'] = 'Right-To-Left Alternates',
+ ['ruby'] = 'Ruby Notation Forms',
+ ['salt'] = 'Stylistic Alternates',
+ ['sinf'] = 'Scientific Inferiors',
+ ['size'] = 'Optical Size',
+ ['smcp'] = 'Small Capitals',
+ ['smpl'] = 'Simplified Forms',
+ ['ss01'] = 'Stylistic Set 1',
+ ['ss02'] = 'Stylistic Set 2',
+ ['ss03'] = 'Stylistic Set 3',
+ ['ss04'] = 'Stylistic Set 4',
+ ['ss05'] = 'Stylistic Set 5',
+ ['ss06'] = 'Stylistic Set 6',
+ ['ss07'] = 'Stylistic Set 7',
+ ['ss08'] = 'Stylistic Set 8',
+ ['ss09'] = 'Stylistic Set 9',
+ ['ss10'] = 'Stylistic Set 10',
+ ['ss11'] = 'Stylistic Set 11',
+ ['ss12'] = 'Stylistic Set 12',
+ ['ss13'] = 'Stylistic Set 13',
+ ['ss14'] = 'Stylistic Set 14',
+ ['ss15'] = 'Stylistic Set 15',
+ ['ss16'] = 'Stylistic Set 16',
+ ['ss17'] = 'Stylistic Set 17',
+ ['ss18'] = 'Stylistic Set 18',
+ ['ss19'] = 'Stylistic Set 19',
+ ['ss20'] = 'Stylistic Set 20',
+ ['subs'] = 'Subscript',
+ ['sups'] = 'Superscript',
+ ['swsh'] = 'Swash',
+ ['titl'] = 'Titling',
+ ['tjmo'] = 'Trailing Jamo Forms',
+ ['tnam'] = 'Traditional Name Forms',
+ ['tnum'] = 'Tabular Figures',
+ ['trad'] = 'Traditional Forms',
+ ['twid'] = 'Third Widths',
+ ['unic'] = 'Unicase',
+ ['valt'] = 'Alternate Vertical Metrics',
+ ['vatu'] = 'Vattu Variants',
+ ['vert'] = 'Vertical Writing',
+ ['vhal'] = 'Alternate Vertical Half Metrics',
+ ['vjmo'] = 'Vowel Jamo Forms',
+ ['vkna'] = 'Vertical Kana Alternates',
+ ['vkrn'] = 'Vertical Kerning',
+ ['vpal'] = 'Proportional Alternate Vertical Metrics',
+ ['vrt2'] = 'Vertical Rotation',
+ ['zero'] = 'Slashed Zero'
+}
+
+fonts.otf.tables.baselines = {
+ ['hang'] = 'Hanging baseline',
+ ['icfb'] = 'Ideographic character face bottom edge baseline',
+ ['icft'] = 'Ideographic character face tope edige baseline',
+ ['ideo'] = 'Ideographic em-box bottom edge baseline',
+ ['idtp'] = 'Ideographic em-box top edge baseline',
+ ['math'] = 'Mathmatical centered baseline',
+ ['romn'] = 'Roman baseline'
+}
+
+function fonts.otf.tables.to_tag(id)
+ return stringformat("%4s",id:lower())
+end
+
+function fonts.otf.meanings.resolve(tab,id)
+ if tab and id then
+ id = id:lower()
+ return tab[id] or tab[id:gsub(" ","")] or tab['dflt'] or ''
+ else
+ return "unknown"
+ end
+end
+
+function fonts.otf.meanings.script(id)
+ return fonts.otf.meanings.resolve(fonts.otf.tables.scripts,id)
+end
+function fonts.otf.meanings.language(id)
+ return fonts.otf.meanings.resolve(fonts.otf.tables.languages,id)
+end
+function fonts.otf.meanings.feature(id)
+ return fonts.otf.meanings.resolve(fonts.otf.tables.features,id)
+end
+function fonts.otf.meanings.baseline(id)
+ return fonts.otf.meanings.resolve(fonts.otf.tables.baselines,id)
+end
+
+fonts.otf.tables.to_scripts = table.reverse_hash(fonts.otf.tables.scripts )
+fonts.otf.tables.to_languages = table.reverse_hash(fonts.otf.tables.languages)
+fonts.otf.tables.to_features = table.reverse_hash(fonts.otf.tables.features )
+
+do
+
+ local scripts = fonts.otf.tables.scripts
+ local languages = fonts.otf.tables.languages
+ local features = fonts.otf.tables.features
+
+ local to_scripts = fonts.otf.tables.to_scripts
+ local to_languages = fonts.otf.tables.to_languages
+ local to_features = fonts.otf.tables.to_features
+
+ function fonts.otf.meanings.normalize(features)
+ local h = { }
+ for k,v in pairs(features) do
+ k = k:lower() -- :gsub("[^a-z0-9%-%.]" -- not needed
+ if k == "language" or k == "lang" then
+ v = (v:lower()):gsub("[^a-z0-9%-]","")
+ k = language
+ if not languages[v] then
+ h.language = to_languages[v] or "dflt"
+ else
+ h.language = v
+ end
+ elseif k == "script" then
+ v = (v:lower()):gsub("[^a-z0-9%-]","")
+ if not scripts[v] then
+ h.script = to_scripts[v] or "dflt"
+ else
+ h.script = v
+ end
+ else
+ if type(v) == "string" then
+ local b = v:is_boolean()
+ if type(b) == "nil" then
+ v = tonumber(v) or v:lower() -- gsub("[^a-z0-9%-]") -- too dangerous, e.g. featurefiles
+ else
+ v = b
+ end
+ end
+ h[to_features[k] or k] = v
+ end
+ end
+ return h
+ end
+
+end
+
+--[[ldx--
+<p>Here we go.</p>
+--ldx]]--
+
+fonts.otf.enhance = fonts.otf.enhance or { }
+fonts.otf.enhance.add_kerns = true
+
+fonts.otf.featurefiles = {
+--~ "texhistoric.fea"
+}
+
+function fonts.otf.load(filename,format,sub,featurefile)
+ local name = file.basename(file.removesuffix(filename))
+ if featurefile then
+ name = name .. "@" .. file.removesuffix(file.basename(featurefile))
+ end
+ if sub == "" then sub = false end
+ local hash = name
+ if sub then -- name cleanup will move to cache code
+ hash = hash .. "-" .. sub
+ hash = hash:lower()
+ hash = hash:gsub("[^%w%d]+","-")
+ end
+ local data = containers.read(fonts.otf.cache(), hash)
+ local size = lfs.attributes(filename,"size") or 0
+ if data and data.size ~= size then
+ data = nil
+ end
+ if not data then
+ logs.report("load otf","loading: " .. filename)
+ local ff, messages
+ if sub then
+ ff, messages = fontforge.open(filename,sub)
+ else
+ ff, messages = fontforge.open(filename)
+ end
+ if messages and #messages > 0 then
+ for _, m in ipairs(messages) do
+ logs.report("load otf","warning: " .. m)
+ end
+ end
+ if ff then
+ local function load_featurefile(featurefile)
+ if featurefile then
+ featurefile = input.find_file(texmf.instance,file.addsuffix(featurefile,'fea')) -- "FONTFEATURES"
+ if featurefile and featurefile ~= "" then
+ logs.report("load otf", "featurefile: " .. featurefile)
+ fontforge.apply_featurefile(ff, featurefile)
+ end
+ end
+ end
+ -- for _, featurefile in pairs(fonts.otf.featurefiles) do
+ -- load_featurefile(featurefile)
+ -- end
+ load_featurefile(featurefile)
+ data = fontforge.to_table(ff)
+ fontforge.close(ff)
+ if data then
+ logs.report("load otf","enhance: before")
+ fonts.otf.enhance.before(data,filename)
+ logs.report("load otf","enhance: enrich")
+ fonts.otf.enhance.enrich(data,filename)
+ logs.report("load otf","enhance: flatten")
+ fonts.otf.enhance.flatten(data,filename)
+ logs.report("load otf","enhance: analyze")
+ fonts.otf.enhance.analyze(data,filename)
+ logs.report("load otf","enhance: after")
+ fonts.otf.enhance.after(data,filename)
+ logs.report("load otf","enhance: patch")
+ fonts.otf.enhance.patch(data,filename)
+ logs.report("load otf","enhance: strip")
+ fonts.otf.enhance.strip(data,filename)
+ if fonts.otf.pack then
+ logs.report("load otf","enhance: pack")
+ fonts.otf.enhance.pack(data)
+ end
+ logs.report("load otf","file size: " .. size)
+ data.size = size
+ logs.report("load otf","saving: in cache")
+ data = containers.write(fonts.otf.cache(), hash, data)
+ else
+ logs.error("load otf","loading failed (table conversion error)")
+ end
+ else
+ logs.error("load otf","loading failed (file read error)")
+ end
+ end
+ fonts.otf.enhance.unpack(data)
+ return data
+end
+
+-- memory saver ..
+
+function fonts.otf.enhance.pack(data)
+ if data then
+ local h, t = { }, { }
+ local concat = table.concat
+ local function tabstr(t)
+ for i=1,#t do
+ if type(t[i]) == "boolean" then
+ local s = tostring(t[1])
+ for i=2,#t do
+ s = s .. ",".. tostring(t[i])
+ end
+ return s
+ end
+ end
+ return concat(t,",")
+ end
+ local function pack(v)
+ local tag = tabstr(v,",")
+ if not h[tag] then
+ t[#t+1] = v
+ h[tag] = #t
+ end
+ return h[tag]
+ end
+ for k, v in pairs(data.glyphs) do
+ v.boundingbox = pack(v.boundingbox)
+ if v.lookups then
+ for k,v in pairs(v.lookups) do
+ for kk, vv in ipairs(v) do
+ v[kk] = pack(vv)
+ end
+ end
+ end
+ end
+ if data.lookups then
+ for k, v in pairs(data.lookups) do
+ if v.rules then
+ for kk, vv in pairs(v.rules) do
+ local l = vv.lookups
+ if l then
+ vv.lookups = pack(l)
+ end
+ local c = vv.coverage
+ if c then
+ c.before = c.before and pack(c.before )
+ c.after = c.after and pack(c.after )
+ c.current = c.current and pack(c.current)
+ end
+ end
+ end
+ end
+ end
+ if data.luatex then
+ local li = data.luatex.ignore_flags
+ if li then
+ for k, v in pairs(li) do
+ li[k] = pack(v)
+ end
+ end
+ end
+ if #t > 0 then
+ data.tables = t
+ end
+ end
+end
+
+function fonts.otf.enhance.unpack(data)
+ if data then
+ local t = data.tables
+ if t then
+ for k, v in pairs(data.glyphs) do
+ v.boundingbox = t[v.boundingbox]
+ local l = v.lookups
+ if l then
+ for k,v in pairs(l) do
+ for i=1,#v do
+ v[i] = t[v[i]]
+ end
+ end
+ end
+ end
+ if data.lookups then
+ for k, v in pairs(data.lookups) do
+ local r = v.rules
+ if r then
+ for kk, vv in pairs(r) do
+ local l = vv.lookups
+ if l then
+ vv.lookups = t[l]
+ end
+ local c = vv.coverage
+ if c then
+ local cc = c.before if cc then c.before = t[cc] end
+ cc = c.after if cc then c.after = t[cc] end
+ cc = c.current if cc then c.current = t[cc] end
+ end
+ end
+ end
+ end
+ end
+ if data.luatex then
+ local li = data.luatex.ignore_flags
+ if li then
+ for k, v in pairs(li) do
+ li[k] = t[v]
+ end
+ end
+ end
+ data.tables = nil
+ end
+ end
+end
+
+-- todo: normalize, design_size => designsize
+
+function fonts.otf.enhance.analyze(data,filename)
+ local t = {
+ filename = file.basename(filename),
+ version = fonts.otf.version,
+ creator = "context mkiv",
+ unicodes = fonts.otf.analyze_unicodes(data),
+ gposfeatures = fonts.otf.analyze_features(data.gpos),
+ gsubfeatures = fonts.otf.analyze_features(data.gsub),
+ marks = fonts.otf.analyze_class(data,'mark'),
+ }
+ t.subtables, t.name_to_type, t.internals, t.always_valid, t.ignore_flags, t.ctx_always = fonts.otf.analyze_subtables(data)
+ data.luatex = t
+end
+
+do
+ -- original string parser: 0.109, lpeg parser: 0.036 seconds for Adobe-CNS1-4.cidmap
+ --
+ -- 18964 18964 (leader)
+ -- 0 /.notdef
+ -- 1..95 0020
+ -- 99 3000
+
+ local number = lpeg.C(lpeg.R("09","af","AF")^1)
+ local space = lpeg.S(" \n\r\t")
+ local spaces = space^0
+ local period = lpeg.P(".")
+ local periods = period * period
+ local name = lpeg.P("/") * lpeg.C((1-space)^1)
+
+ local unicodes, names = { }, {}
+
+ local tonumber = tonumber
+
+ local function do_one(a,b)
+ unicodes[tonumber(a)] = tonumber(b,16)
+ end
+ local function do_range(a,b,c)
+ c = tonumber(c,16)
+ for i=tonumber(a),tonumber(b) do
+ unicodes[i] = c
+ c = c + 1
+ end
+ end
+ local function do_name(a,b)
+ names[tonumber(a)] = b
+ end
+
+ local grammar = lpeg.P { "start",
+ start = number * spaces * number * lpeg.V("series"),
+ series = (spaces * (lpeg.V("one") + lpeg.V("range") + lpeg.V("named")) )^1,
+ one = (number * spaces * number) / do_one,
+ range = (number * periods * number * spaces * number) / do_range,
+ named = (number * spaces * name) / do_name
+ }
+
+ function fonts.otf.load_cidmap(filename) -- lpeg
+ local data = io.loaddata(filename)
+ if data then
+ unicodes, names = { }, { }
+ grammar:match(data)
+ local supplement, registry, ordering = filename:match("^(.-)%-(.-)%-()%.(.-)$")
+ return {
+ supplement = supplement,
+ registry = registry,
+ ordering = ordering,
+ filename = filename,
+ unicodes = unicodes,
+ names = names
+ }
+ else
+ return nil
+ end
+ end
+
+end
+
+fonts.otf.cidmaps = { }
+fonts.otf.cidmax = 10
+
+function fonts.otf.cidmap(registry,ordering,supplement)
+ -- cf Arthur R. we can safely scan upwards since cids are downward compatible
+ local template = "%s-%s-%s.cidmap"
+ local supplement = tonumber(supplement)
+ logs.report("load otf",string.format("needed cidmap, registry: %s, ordering: %s, supplement: %s",registry,ordering,supplement))
+ local function locate(registry,ordering,supplement)
+ local filename = string.format(template,registry,ordering,supplement)
+ local cidmap = fonts.otf.cidmaps[filename]
+ if not cidmap then
+ logs.report("load otf",string.format("checking cidmap, registry: %s, ordering: %s, supplement: %s, filename: %s",registry,ordering,supplement,filename))
+ local fullname = input.find_file(texmf.instance,filename,'cid') or ""
+ if fullname ~= "" then
+ cidmap = fonts.otf.load_cidmap(fullname)
+ if cidmap then
+ logs.report("load otf",string.format("using cidmap file %s",filename))
+ fonts.otf.cidmaps[filename] = cidmap
+ return cidmap
+ end
+ end
+ end
+ return cidmap
+ end
+ local cidmap = locate(registry,ordering,supplement)
+ if not cidmap then
+ local cidnum = nil
+ -- next highest (alternatively we could start high)
+ if supplement < fonts.otf.cidmax then
+ for supplement=supplement+1,fonts.otf.cidmax do
+ local c = locate(registry,ordering,supplement)
+ if c then
+ cidmap, cidnum = c, supplement
+ break
+ end
+ end
+ end
+ -- next lowest (least worse fit)
+ if not cidmap and supplement > 0 then
+ for supplement=supplement-1,0,-1 do
+ local c = locate(registry,ordering,supplement)
+ if c then
+ cidmap, cidnum = c, supplement
+ break
+ end
+ end
+ end
+ -- prevent further lookups
+ if cidmap and cidnum > 0 then
+ for s=0,cidnum-1 do
+ filename = string.format(template,registry,ordering,s)
+ if not fonts.otf.cidmaps[filename] then
+ fonts.otf.cidmaps[filename] = cidmap -- copy of ref
+ end
+ end
+ end
+ end
+ return cidmap
+end
+
+--~ ["cidinfo"]={
+--~ ["ordering"]="Japan1",
+--~ ["registry"]="Adobe",
+--~ ["supplement"]=6,
+--~ ["version"]=6,
+--~ },
+
+function fonts.otf.enhance.before(data,filename)
+ local private = fonts.private
+ if data.subfonts and table.is_empty(data.glyphs) then
+ local cidinfo = data.cidinfo
+ if cidinfo.registry then
+ local cidmap = fonts.otf.cidmap(cidinfo.registry,cidinfo.ordering,cidinfo.supplement)
+ if cidmap then
+ local glyphs, uni_to_int, int_to_uni, nofnames, nofunicodes = { }, { }, { }, 0, 0
+ local unicodes, names = cidmap.unicodes, cidmap.names
+ for n, subfont in pairs(data.subfonts) do
+ for index, g in pairs(subfont.glyphs) do
+ if not next(g) then
+ -- dummy entry
+ else
+ local unicode, name = unicodes[index], names[index]
+ g.cidindex = n
+ g.boundingbox = g.boundingbox -- or zerobox
+ g.name = g.name or name or "unknown"
+ if unicode then
+ g.unicode = unicode
+ uni_to_int[unicode] = index
+ int_to_uni[index] = unicode
+ nofunicodes = nofunicodes + 1
+ elseif name then
+ g.unicode = -1
+ nofnames = nofnames + 1
+ end
+ glyphs[index] = g
+ end
+ end
+ subfont.glyphs = nil
+ end
+ logs.report("load otf",string.format("cid font remapped, %s unicode points, %s symbolic names, %s glyphs",nofunicodes, nofnames, nofunicodes+nofnames))
+ data.glyphs = glyphs
+ data.map = data.map or { }
+ data.map.map = uni_to_int
+ data.map.backmap = int_to_uni
+ else
+ logs.report("load otf",string.format("unable to remap cid font, missing cid file for %s",filename))
+ end
+ else
+ logs.report("load otf",string.format("font %s has no glyphs",filename))
+ end
+ end
+ if data.map then
+ local uni_to_int = data.map.map -- [unic] = slot
+ local int_to_uni = data.map.backmap -- { [0|1] = unic, ... }
+ for index, glyph in pairs(data.glyphs) do
+ if glyph.name then
+ local unic = glyph.unicode or glyph.unicodeenc or -1
+ glyph.unicodeenc = nil -- older luatex version
+ if index > 0 and (unic == -1 or unic >= 0x110000) then
+ while uni_to_int[private] do
+ private = private + 1
+ end
+ uni_to_int[private] = index
+ int_to_uni[index] = private
+ glyph.unicode = private
+ if fonts.trace then
+ logs.report("load otf",string.format("enhance: glyph %s at index %s is moved to private unicode slot %s",glyph.name,index,private))
+ end
+ else
+ glyph.unicode = unic -- safeguard for older version
+ end
+ end
+ end
+ local n = 0
+ for k,v in pairs(int_to_uni) do
+ if v == -1 or v >= 0x110000 then
+ int_to_uni[k], n = nil, n+1
+ end
+ end
+ if fonts.trace then
+ logs.report("load otf",string.format("enhance: %s entries removed from map.backmap",n))
+ end
+ local n = 0
+ for k,v in pairs(uni_to_int) do
+ if k == -1 or k >= 0x110000 then
+ uni_to_int[k], n = nil, n+1
+ end
+ end
+ if fonts.trace then
+ logs.report("load otf",string.format("enhance: %s entries removed from map.mapmap",n))
+ end
+ else
+ data.map = { map = {}, backmap = {} }
+ end
+ if data.ttf_tables then
+ for _, v in ipairs(data.ttf_tables) do
+ if v.data then v.data = "deleted" end
+ --~ if v.data then v.data = v.data:gsub("\026","\\026") end -- does not work out well
+ end
+ end
+ table.compact(data.glyphs)
+ if data.subfonts then
+ for _, subfont in pairs(data.subfonts) do
+ table.compact(subfont.glyphs)
+ end
+ end
+ -- we prefer the before lookups in a normal order
+ if data.lookups then
+ for _, v in pairs(data.lookups) do
+ if v.rules then
+ for _, vv in pairs(v.rules) do
+ local c = vv.coverage
+ if c and c.before then
+ c.before = table.reverse(c.before)
+ end
+ end
+ end
+ end
+ end
+--~ for index, glyph in pairs(data.glyphs) do
+--~ for k,v in pairs(glyph) do
+--~ if v == 0 then glyph[k] = nil end
+--~ end
+--~ end
+end
+
+function fonts.otf.enhance.after(data,filename) -- to be split
+ if fonts.otf.enhance.add_kerns then
+ local glyphs, mapmap, unicodes = data.glyphs, data.map.map, data.luatex.unicodes
+ local mkdone = false
+ for index, glyph in pairs(data.glyphs) do
+ if glyph.kerns then
+ local mykerns = { } -- unicode indexed !
+ for k,v in pairs(glyph.kerns) do
+ local vc, vo, vl = v.char, v.off, v.lookup
+ if vc and vo and vl then -- brrr, wrong! we miss the non unicode ones
+ local uvc = unicodes[vc]
+ if uvc then
+ local mkl = mykerns[vl]
+ if not mkl then
+ mkl = { [unicodes[vc]] = vo }
+ mykerns[v.lookup] = mkl
+ else
+ mkl[unicodes[vc]] = vo
+ end
+ else
+ logs.report("load otf", string.format("problems with unicode %s of kern %s at glyph %s",vc,k,index))
+ end
+ end
+ end
+ glyph.mykerns = mykerns
+ glyph.kerns = nil -- saves space and time
+ mkdone = true
+ end
+ end
+ if mkdone then
+ logs.report("load otf", "replacing 'kerns' tables by 'mykerns' tables")
+ end
+ if data.gpos then
+ for _, gpos in ipairs(data.gpos) do
+ if gpos.subtables then
+ for _, subtable in ipairs(gpos.subtables) do
+ local kernclass = subtable.kernclass
+ if kernclass then
+ for _, kcl in ipairs(kernclass) do
+ local firsts, seconds, offsets, lookup = kcl.firsts, kcl.seconds, kcl.offsets, kcl.lookup
+ local maxfirsts, maxseconds = table.getn(firsts), table.getn(seconds)
+ logs.report("load otf", string.format("adding kernclass %s with %s times %s pairs)",lookup, maxfirsts, maxseconds))
+ for fk, fv in pairs(firsts) do
+ for first in fv:gmatch("[^ ]+") do
+ local glyph = glyphs[mapmap[unicodes[first]]]
+ local mykerns = glyph.mykerns
+ if not mykerns then
+ mykerns = { } -- unicode indexed !
+ glyph.mykerns = mykerns
+ end
+ local lookupkerns = mykerns[lookup]
+ if not lookupkerns then
+ lookupkerns = { }
+ mykerns[lookup] = lookupkerns
+ end
+ for sk, sv in pairs(seconds) do
+ for second in sv:gmatch("[^ ]+") do
+ lookupkerns[unicodes[second]] = offsets[(fk-1) * maxseconds + sk]
+ end
+ end
+ end
+ end
+ end
+ subtable.comment = "The kernclass table is merged into mykerns in the indexed glyph tables."
+ subtable.kernclass = { }
+ end
+ end
+ end
+ end
+ end
+ end
+end
+
+function fonts.otf.enhance.strip(data)
+ for k, v in pairs(data.glyphs) do
+ local d = v.dependents
+ if d then v.dependents = nil end
+ end
+ data.map = nil
+ data.names = nil
+ data.luatex.comment = "Glyph tables have their original index. When present, mykern tables are indexed by unicode."
+end
+
+function fonts.otf.enhance.flatten(data,filename) -- to be split
+ logs.report("load otf", "flattening 'specifications' tables")
+ for k, v in pairs(data.glyphs) do
+ if v.lookups then
+ for kk, vv in pairs(v.lookups) do
+ for kkk, vvv in ipairs(vv) do
+ local s = vvv.specification
+ if s then
+ local t = vvv.type
+ if t == "ligature" then
+ vv[kkk] = { "ligature", s.components, s.char }
+ elseif t == "alternate" then
+ vv[kkk] = { "alternate", s.components }
+ elseif t == "substitution" then
+ vv[kkk] = { "substitution", s.variant }
+ elseif t == "multiple" then
+ vv[kkk] = { "multiple", s.components }
+ elseif t == "position" then
+ vv[kkk] = { "position", s.x or 0, s.y or 0, s.h or 0, s.v or 0 }
+ elseif t == "pair" then
+ local one, two, paired = s.offsets[1], s.offsets[2], s.paired or ""
+ if one then
+ if two then
+ vv[kkk] = { "pair", paired, one.x or 0, one.y or 0, one.h or 0, one.v or 0, two.x or 0, two.y or 0, two.h or 0, two.v or 0 }
+ else
+ vv[kkk] = { "pair", paired, one.x or 0, one.y or 0, one.h or 0 }
+ end
+ else
+ if two then
+ vv[kkk] = { "pair", paired, 0, 0, 0, 0, two.x or 0, two.y or 0, two.h or 0, two.v or 0 }
+ else
+ vv[kkk] = { "pair", paired }
+ end
+ end
+ else
+ logs.report("load otf", "flattening needed, warn Hans and/or Taco")
+ for a, b in pairs(s) do
+ if vvv[a] then
+ logs.report("load otf", "flattening conflict, warn Hans and/or Taco")
+ end
+ vvv[a] = b
+ end
+ vvv.specification = nil
+ end
+ end
+ end
+ end
+ end
+ end
+ logs.report("load otf", "flattening 'anchor' tables")
+ for k, v in pairs(data.glyphs) do
+ if v.anchors then
+ for kk, vv in pairs(v.anchors) do
+ for kkk, vvv in pairs(vv) do
+ if vvv.x or vvv.y then -- kkk == "centry"
+ vv[kkk] = { vvv.x or 0, vvv.y or 0 }
+ else
+ for kkkk, vvvv in ipairs(vvv) do
+ vvv[kkkk] = { vvvv.x or 0, vvvv.y or 0 }
+ end
+ end
+ end
+ end
+ end
+ end
+ for _, tag in pairs({"gpos","gsub"}) do
+ if data[tag] then
+ logs.report("load otf", "flattening '" .. tag.. "' tables")
+ for k, v in pairs(data[tag]) do
+ if v.features then
+ for kk, vv in ipairs(v.features) do
+ local t = { }
+ for kkk, vvv in ipairs(vv.scripts) do
+ t[vvv.script] = vvv.langs
+ end
+ vv.scripts = t
+ end
+ end
+ end
+ end
+ end
+end
+
+fonts.otf.enhance.patches = { }
+
+function fonts.otf.enhance.patch(data,filename)
+ local basename = file.basename(filename)
+ for pattern, action in pairs(fonts.otf.enhance.patches) do
+ if basename:find(pattern) then
+ action(data,filename)
+ end
+ end
+end
+
+-- tex features
+
+function fonts.otf.enhance.enrich(data,filename)
+ -- later
+end
+
+-- patching
+
+do -- will move to a typescript
+
+ local function patch(data,filename)
+ if data.design_size == 0 then
+ local ds = (file.basename(filename)):match("(%d+)")
+ if ds then
+ logs.report("load otf",string.format("patching design size (%s)",ds))
+ data.design_size = tonumber(ds) * 10
+ end
+ end
+ end
+
+ fonts.otf.enhance.patches["^lmroman"] = patch
+ fonts.otf.enhance.patches["^lmsans"] = patch
+ fonts.otf.enhance.patches["^lmtypewriter"] = patch
+
+end
+
+function fonts.otf.analyze_class(data,class)
+ local classes = { }
+ for index, glyph in pairs(data.glyphs) do
+ if glyph.class == class then
+ classes[glyph.unicode] = true
+ end
+ end
+ return classes
+end
+
+function fonts.otf.analyze_subtables(data)
+ local subtables, name_to_type, internals, always_valid, ignore_flags, ctx_always = { }, { }, { }, { }, { }, { }
+ local function collect(g)
+ if g then
+ for k,v in ipairs(g) do
+ if v.features then
+ local ignored = { false, false, false }
+ if v.flags.ignorecombiningmarks then ignored[1] = 'mark' end
+ if v.flags.ignorebasechars then ignored[2] = 'base' end
+ if v.flags.ignoreligatures then ignored[3] = 'ligature' end
+ if v.subtables then
+ local type = v.type
+ for _, feature in ipairs(v.features) do
+ local ft = feature.tag:lower()
+ subtables[ft] = subtables[ft] or { }
+ ctx_always[ft] = v.always
+ for script, languages in pairs(feature.scripts) do
+ script = script:lower()
+ script = script:strip()
+ sft = subtables[ft]
+ local sfts = sft[script]
+ if not sfts then
+ sfts = { }
+ sft[script] = sfts
+ end
+ for _, language in ipairs(languages) do
+ language = language:lower()
+ language = language:strip()
+ local sftsl = sfts[language]
+ if not sftsl then
+ sftsl = sfts[language] or { }
+ sfts[language] = sftsl
+ end
+ local lookups, valid = sftsl.lookups or { }, sftsl.valid or { }
+ for n, subtable in ipairs(v.subtables) do
+ local stl = subtable.name
+ if stl then
+ lookups[#lookups+1] = stl
+ valid[stl] = true
+ name_to_type[stl] = type
+ ignore_flags[stl] = ignored
+ end
+ end
+ sftsl.lookups, sftsl.valid = lookups, valid
+ end
+ end
+ end
+ end
+ else
+ -- we have an internal feature, say ss_l_83 that resolves to
+ -- subfeatures like ss_l_83_s which we find in the glyphs
+ name_to_type[v.name] = v.type
+ local lookups, valid = { }, { }
+ for n, subtable in ipairs(v.subtables) do
+ local stl = subtable.name
+ if stl then
+ lookups[#lookups+1] = stl
+ valid[stl] = true
+ always_valid[stl] = true
+ end
+ end
+ internals[v.name] = {
+ lookups = lookups,
+ valid = valid
+ }
+ always_valid[v.name] = true -- bonus
+ end
+ end
+ end
+ end
+ collect(data.gsub)
+ collect(data.gpos)
+ return subtables, name_to_type, internals, always_valid, ignore_flags, ctx_always
+end
+
+function fonts.otf.analyze_unicodes(data)
+ local unicodes = { }
+ for _, blob in pairs(data.glyphs) do
+ if blob.name then
+ unicodes[blob.name] = blob.unicode or 0
+ end
+ end
+ unicodes['space'] = unicodes['space'] or 32 -- handly later on
+ return unicodes
+end
+
+function fonts.otf.analyze_features(g, features)
+ if g then
+ local t, done = { }, { }
+ for k=1,#g do
+ local f = features or g[k].features
+ if f then
+ for k=1,#f do
+ -- scripts and tag
+ local tag = f[k].tag
+ if not done[tag] then
+ t[#t+1] = tag
+ done[tag] = true
+ end
+ end
+ end
+ end
+ if #t > 0 then
+ return t
+ end
+ end
+ return nil
+end
+
+function fonts.otf.valid_subtable(otfdata,kind,script,language)
+ local tk = otfdata.luatex.subtables[kind]
+ if tk then
+ local tks = tk[script] or tk.dflt
+ if tks then
+ local tksl = tks[language] or tks.dflt
+ if tksl then
+ return tksl.lookups
+ end
+ end
+ end
+ return false
+end
+
+function fonts.otf.features.register(name,default)
+ fonts.otf.features.list[#fonts.otf.features.list+1] = name
+ fonts.otf.features.default[name] = default
+end
+
+function fonts.otf.set_features(tfmdata) -- node and base, simple mapping
+ local shared = tfmdata.shared
+ local otfdata = shared.otfdata
+ shared.features = fonts.define.check(shared.features,fonts.otf.features.default)
+ local features = shared.features
+ local trace = fonts.otf.trace_features or fonts.otf.trace_set_features
+ if not tfmdata.language then tfmdata.language = 'dflt' end
+ if not tfmdata.script then tfmdata.script = 'dflt' end
+ if not table.is_empty(features) then
+ local gposlist = otfdata.luatex.gposfeatures
+ local gsublist = otfdata.luatex.gsubfeatures
+ local mode = tfmdata.mode or fonts.mode
+ local initializers = fonts.initializers
+ local fi = initializers[mode]
+ if fi then -- todo: delay initilization for mode 'node'
+ local fiotf = fi.otf
+ if fiotf then
+ local done = { }
+ local function initialize(list) -- using tex lig and kerning
+ if list then
+ for i=1,#list do
+ local f = list[i]
+ local value = features[f]
+ if value and fiotf[f] then -- brr
+ if not done[f] then -- so, we can move some to triggers
+ if trace then
+ logs.report("define otf",string.format("initializing feature %s to %s for mode %s for font %s",f,tostring(value),mode or 'unknown', tfmdata.fullname or 'unknown'))
+ end
+ fiotf[f](tfmdata,value) -- can set mode (no need to pass otf)
+ mode = tfmdata.mode or fonts.mode -- keep this, mode can be set local !
+ local fi = initializers[mode]
+ fiotf = fi.otf
+ done[f] = true
+ end
+ end
+ end
+ end
+ end
+ initialize(fonts.triggers)
+ initialize(gsublist)
+ initialize(gposlist)
+ initialize(fonts.manipulators)
+ end
+ end
+ local fm = fonts.methods[mode]
+ if fm then
+ local fmotf = fm.otf
+ local sp = shared.processors
+ if fmotf then
+ local function register(list) -- node manipulations
+ if list then
+ for i=1,#list do
+ local f = list[i]
+ if features[f] and fmotf[f] then -- brr
+ if trace then
+ logs.report("define otf",string.format("installing feature handler %s for mode %s for font %s",f,mode or 'unknown', tfmdata.fullname or 'unknown'))
+ end
+ sp[#sp+1] = fmotf[f]
+ end
+ end
+ end
+ end
+ register(fonts.triggers)
+ register(gsublist)
+ register(gposlist)
+ register(fonts.manipulators)
+ end
+ end
+ end
+end
+
+function fonts.otf.otf_to_tfm(specification)
+ local name = specification.name
+ local sub = specification.sub
+ local filename = specification.filename
+ local format = specification.format
+ local features = specification.features.normal
+ local cache_id = specification.hash
+ local tfmdata = containers.read(fonts.tfm.cache(),cache_id)
+ if not tfmdata then
+ local otfdata = fonts.otf.load(filename,format,sub,features and features.featurefile)
+ if not table.is_empty(otfdata) then
+ fonts.otf.add_dimensions(otfdata)
+ if true then
+ otfdata._shared_ = otfdata._shared_ or { -- aggressive sharing
+ processes = { },
+ lookuptable = { },
+ featuredata = { },
+ featurecache = { },
+ }
+ end
+ tfmdata = fonts.otf.copy_to_tfm(otfdata)
+ if not table.is_empty(tfmdata) then
+ tfmdata.unique = tfmdata.unique or { }
+ tfmdata.shared = tfmdata.shared or { } -- combine
+ local shared = tfmdata.shared
+ shared.otfdata = otfdata
+ shared.features = features
+ shared.processors = { }
+ shared.dynamics = { }
+ shared.processes = { }
+ shared.lookuptable = { }
+ shared.featuredata = { }
+ shared.featurecache = { }
+ if otfdata._shared_ then
+ shared.processes = otfdata._shared_.processes
+ shared.lookuptable = otfdata._shared_.lookuptable
+ shared.featuredata = otfdata._shared_.featuredata
+ shared.featurecache = otfdata._shared_.featurecache
+ end
+ fonts.otf.set_features(tfmdata)
+ end
+ end
+ containers.write(fonts.tfm.cache(),cache_id,tfmdata)
+ end
+ return tfmdata
+end
+
+function fonts.otf.features.prepare_base_kerns(tfmdata,kind,value) -- todo what kind of kerns, currently all
+ if value then
+ local otfdata = tfmdata.shared.otfdata
+ local charlist = otfdata.glyphs
+ local unicodes = otfdata.luatex.unicodes
+ local somevalid = fonts.otf.some_valid_feature(otfdata,kind,tfmdata.script,tfmdata.language)
+ for _, chr in pairs(tfmdata.characters) do
+ local d = charlist[chr.description.index]
+ if d then
+ local dk = d.mykerns
+ if dk then
+ local t, done = chr.kerns or { }, false
+ for lookup,kerns in pairs(dk) do
+ if somevalid[lookup] then
+ for k, v in pairs(kerns) do
+ if v ~= 0 then
+ t[k], done = v, true
+ end
+ end
+ end
+ end
+ if done then
+ chr.kerns = t -- no empty assignments
+ end
+ else
+ dk = d.kerns
+ if dk then
+ local t, done = chr.kerns or { }, false
+ for _, v in pairs(dk) do
+ if somevalid[v.lookup] then
+ local k = unicodes[v.char]
+ if k > 0 then
+ t[k], done = v.off, true
+ end
+ end
+ end
+ if done then
+ chr.kerns = t -- no empty assignments
+ end
+ end
+ end
+ end
+ end
+ end
+end
+
+function fonts.otf.add_dimensions(data)
+ if data then
+ local force = fonts.otf.notdef
+ for k, d in pairs(data.glyphs) do
+ local bb, wd = d.boundingbox, d.width or 0
+ if force and not d.name then
+ d.name = ".notdef"
+ end
+ if wd ~= 0 and d.class == "mark" then
+ d.width = -wd
+ end
+ if bb then
+ local ht, dp = bb[4], -bb[2]
+ if ht ~= 0 then d.height = ht end
+ if dp ~= 0 then d.depth = dp end
+ end
+ d.index = k
+ end
+ end
+end
+
+function fonts.otf.copy_to_tfm(data) -- we can save a copy when we reorder the tma to unicode
+ if data then
+ local tfm = { characters = { }, parameters = { } }
+ local unicodes = data.luatex.unicodes
+ local characters = tfm.characters
+ local parameters = tfm.parameters
+ local glyphs = data.glyphs
+ for k, d in pairs(glyphs) do
+ if d.name then
+ characters[d.unicode] = { description = d }
+ end
+ end
+ local designsize = data.designsize or data.design_size or 100
+ if designsize == 0 then
+ designsize = 100
+ end
+ local spaceunits = 500
+ tfm.units = data.units_per_em or 1000
+ -- we need a runtime lookup because of running from cdrom or zip, brrr
+ tfm.filename = input.findbinfile(texmf.instance,data.luatex.filename,"") or data.luatex.filename
+ tfm.fullname = data.fontname or data.fullname
+ tfm.encodingbytes = 2
+ tfm.cidinfo = data.cidinfo
+ tfm.cidinfo.registry = tfm.cidinfo.registry or ""
+ tfm.type = "real"
+ tfm.stretch = 0 -- stretch
+ tfm.slant = 0 -- slant
+ tfm.direction = 0
+ tfm.boundarychar_label = 0
+ tfm.boundarychar = 65536
+ tfm.designsize = (designsize/10)*65536
+ tfm.spacer = "500 units"
+ data.isfixedpitch = data.pfminfo and data.pfminfo.panose and data.pfminfo.panose["proportion"] == "Monospaced"
+ data.charwidth = nil
+ if data.pfminfo then
+ data.charwidth = data.pfminfo.avgwidth
+ end
+ local endash, emdash = unicodes['space'], unicodes['emdash']
+ if data.isfixedpitch then
+ if characters[endash] then
+ spaceunits, tfm.spacer = characters[endash].description.width, "space"
+ end
+ if not spaceunits and characters[emdash] then
+ spaceunits, tfm.spacer = characters[emdash].description.width, "emdash"
+ end
+ if not spaceunits and data.charwidth then
+ spaceunits, tfm.spacer = data.charwidth, "charwidth"
+ end
+ else
+ if characters[endash] then
+ spaceunits, tfm.spacer = characters[endash].description.width, "space"
+ end
+ if not spaceunits and characters[emdash] then
+ spaceunits, tfm.spacer = characters[emdash].description.width/2, "emdash/2"
+ end
+ if not spaceunits and data.charwidth then
+ spaceunits, tfm.spacer = data.charwidth, "charwidth"
+ end
+ end
+ spaceunits = tonumber(spaceunits) or tfm.units/2 -- 500 -- brrr
+ parameters.slant = 0
+ parameters.space = spaceunits
+ parameters.space_stretch = tfm.units/2 -- 500
+ parameters.space_shrink = 2*tfm.units/3 -- 333
+ parameters.x_height = 4*tfm.units/5 -- 400
+ parameters.quad = tfm.units -- 1000
+ parameters.extra_space = 0
+ if spaceunits < 2*tfm.units/5 then
+ -- todo: warning
+ end
+ tfm.italicangle = data.italicangle
+ tfm.ascender = math.abs(data.ascent or 0)
+ tfm.descender = math.abs(data.descent or 0)
+ if data.italicangle then -- maybe also in afm _
+ parameters.slant = parameters.slant - math.round(math.tan(data.italicangle*math.pi/180))
+ end
+ if data.isfixedpitch then
+ parameters.space_stretch = 0
+ parameters.space_shrink = 0
+ elseif fonts.otf.syncspace then --
+ parameters.space_stretch = spaceunits/2
+ parameters.space_shrink = spaceunits/3
+ end
+ if data.pfminfo and data.pfminfo.os2_xheight and data.pfminfo.os2_xheight > 0 then
+ parameters.x_height = data.pfminfo.os2_xheight
+ else
+ local x = characters[unicodes['x']]
+ if x then
+ parameters.x_height = x.description.height
+ end
+ end
+ -- [6]
+ return tfm
+ else
+ return nil
+ end
+end
+
+function fonts.tfm.read_from_open_type(specification)
+ local tfmtable = fonts.otf.otf_to_tfm(specification)
+ if tfmtable then
+ tfmtable.name = specification.name
+ tfmtable.sub = specification.sub
+ tfmtable = fonts.tfm.scale(tfmtable, specification.size)
+ -- here we resolve the name; file can be relocated, so this info is not in the cache
+ local otfdata = tfmtable.shared.otfdata
+ local filename = (otfdata and otfdata.luatex and otfdata.luatex.filename) or specification.filename
+ if not filename then
+ -- try to locate anyway and set otfdata.luatex.filename
+ end
+ if filename then
+ tfmtable.encodingbytes = 2
+ tfmtable.filename = input.findbinfile(texmf.instance,filename,"") or filename
+ tfmtable.fullname = otfdata.fontname or otfdata.fullname
+ local order = otfdata and otfdata.order2
+ if order == 0 then
+ tfmtable.format = 'opentype'
+ elseif order == 1 then
+ tfmtable.format = 'truetype'
+ else
+ tfmtable.format = specification.format
+ end
+ tfmtable.name = tfmtable.filename or tfmtable.fullname
+ end
+ fonts.logger.save(tfmtable,file.extname(specification.filename),specification)
+ end
+ return tfmtable
+end
+
+function fonts.otf.analyze_only(otfdata)
+ local analyze = fonts.otf.analyze_features
+ return analyze(otfdata.gpos), analyze(otfdata.gsub)
+end
+
+local a_to_script = { }
+local a_to_language = { }
+
+do
+
+ local context_setups = fonts.define.specify.context_setups
+ local context_numbers = fonts.define.specify.context_numbers
+
+ function fonts.otf.set_dynamics(tfmdata,attribute,features) --currently experimental and slow / hackery
+ local shared = tfmdata.shared
+ if shared then
+ local dynamics = shared.dynamics
+ if dynamics then
+ features = features or context_setups[context_numbers[attribute]]
+ if features then
+ local script = features.script or 'dflt'
+ local language = features.language or 'dflt'
+ local ds = dynamics[script]
+ if not ds then
+ ds = { }
+ dynamics[script] = ds
+ end
+ local dsl = ds[language]
+ if not dsl then
+ dsl = { }
+ ds[language] = dsl
+ end
+ local dsla = dsl[attribute]
+ if dsla then
+ return dsla
+ else
+ a_to_script [attribute] = script
+ a_to_language[attribute] = language
+ dsla = { }
+ local otfdata = shared.otfdata
+ local methods = fonts.methods.node.otf
+ local initializers = fonts.initializers.node.otf
+ local gposfeatures, gsubfeatures = fonts.otf.analyze_only(otfdata,features)
+ local default = fonts.otf.features.default
+ local function register(list)
+ if list then
+ for i=1,#list do
+ local f = list[i]
+ local value = features[f] or default[f]
+ if value then
+ local i, m = initializers[f], methods[f]
+ if i then
+ i(tfmdata,value)
+ end
+ if m then
+ dsla[#dsla+1] = m
+ end
+ end
+ end
+ end
+ end
+ register(fonts.triggers)
+ register(gsubfeatures)
+ register(gposfeatures)
+ dynamics[script][language][attribute] = dsla
+ return dsla
+ end
+ end
+ end
+ end
+ return { } -- todo: false
+ end
+
+end
+
+-- scripts
+
+fonts.otf.default_language = 'latn'
+fonts.otf.default_script = 'dflt'
+
+function fonts.otf.valid_feature(otfdata,kind,script,language) -- return hash is faster
+ if otfdata.luatex.ctx_always[kind] then
+ script, language = 'dflt', 'dflt'
+ else
+ script = script or fonts.otf.default_script
+ language = language or fonts.otf.default_language
+ end
+ script, language = script:lower(), language:lower() -- will go away, we will lowercase values
+ local ft = otfdata.luatex.subtables[kind]
+ local st = ft[script] or ft.dflt
+ local lt = st and (st[language] or st.dflt)
+ return false, otfdata.luatex.always_valid, lt.valid
+end
+
+function fonts.otf.some_valid_feature(otfdata,kind,script,language)
+ if otfdata.luatex.ctx_always[kind] then
+ script, language = 'dflt', 'dflt'
+ else
+ script = script or fonts.otf.default_script
+ language = language or fonts.otf.default_language
+ script, language = script:lower(), language:lower() -- will go away, we will lowercase values
+ end
+ local t = otfdata.luatex.subtables[kind]
+ if t then
+ local ts = t[script] or t.dflt
+ if ts then
+ local tsl = ts[language] or ts.dflt
+ return (tsl and tsl.valid) or { }
+ end
+ end
+ return { }
+end
+
+function fonts.otf.features.aux.resolve_ligatures(tfmdata,ligatures,kind)
+ local otfdata = tfmdata.shared.otfdata
+ local unicodes = otfdata.luatex.unicodes
+ local chars = tfmdata.characters
+ local changed = tfmdata.changed or { }
+ local done = { }
+ kind = kind or "unknown"
+ local trace = fonts.otf.trace_features
+ while true do
+ local ok = false
+ for k,v in pairs(ligatures) do
+ local lig = v[1]
+ if not done[lig] then
+ local ligs = { }
+ for s in lig:gmatch("[^ ]+") do
+ ligs[#ligs+1] = s
+ end
+ if #ligs == 2 then
+ local c, f, s = chars[v[2]], ligs[1], ligs[2]
+ local uf, us = unicodes[f], unicodes[s]
+ if changed[uf] or changed[us] then
+ if trace then
+ logs.report("define otf",string.format("%s: %s (%s) + %s (%s) ignored",kind,f,uf,s,us))
+ end
+ else
+ local first, second = chars[uf], us
+ if first and second then
+ local t = first.ligatures
+ if not t then
+ t = { }
+ first.ligatures = t
+ end
+ t[second] = {
+ char = unicodes[c.description.name],
+ type = 0
+ }
+ if trace then
+ logs.report("define otf",string.format("%s: %s (%s) + %s (%s) = %s (%s)",kind,f,uf,s,us,c.description.name,unicodes[c.description.name]))
+ end
+ end
+ end
+ ok, done[lig] = true, c.description.name
+ end
+ end
+ end
+ if ok then
+ for d,n in pairs(done) do
+ local pattern = "^(" .. d .. ") "
+ for k,v in pairs(ligatures) do
+ v[1] = v[1]:gsub(pattern, function(str)
+ return n .. " "
+ end)
+ end
+ end
+ else
+ break
+ end
+ end
+end
+
+function fonts.otf.features.prepare_base_substitutions(tfmdata,kind,value) -- we can share some code with the node features
+ if value then
+ local ligatures = { }
+ local otfdata = tfmdata.shared.otfdata
+ local unicodes = otfdata.luatex.unicodes
+ local trace = fonts.otf.trace_features
+ local chars = tfmdata.characters
+ local somevalid = fonts.otf.some_valid_feature(otfdata,kind,tfmdata.script,tfmdata.language)
+ if not table.is_empty(somevalid) then
+ tfmdata.changed = tfmdata.changed or { }
+ local changed = tfmdata.changed
+ local glyphs = otfdata.glyphs
+ for k,c in pairs(chars) do
+ local o = glyphs[c.description.index]
+ if o and o.lookups then
+ for lookup,ps in pairs(o.lookups) do
+ if somevalid[lookup] then
+ for i=1,#ps do
+ local p = ps[i]
+ local t = p[1]
+ if t == 'substitution' then
+ local pv = p[2] -- p.variant
+ if pv then
+ local upv = unicodes[pv]
+ if upv and chars[upv] then
+ if trace then
+ logs.report("define otf",string.format("%s: %s (%s) => %s (%s)",kind,chars[k].description.name,k,chars[upv].description.name,upv))
+ end
+ chars[k] = chars[upv]
+ changed[k] = true
+ end
+ end
+ elseif t == 'alternate' then
+ local pc = p[2] -- p.components
+ if pc then
+ pc = pa.components:match("([^ ]+)")
+ if pc then
+ local upc = unicodes[pc]
+ if upc and chars[upc] then
+ if trace then
+ logs.report("define otf",string.format("%s: %s (%s) => %s (%s)",kind,chars[k].description.name,k,chars[upc].description.name,upc))
+ end
+ chars[k] = chars[upc]
+ changed[k] = true
+ end
+ end
+ end
+ elseif t == 'ligature' and not changed[k] then
+ local pc = p[2]
+ if pc then
+ if trace then
+ logs.report("define otf",string.format("%s: %s => %s (%s)",kind,pc,chars[k].description.name,k))
+ end
+ ligatures[#ligatures+1] = { pc, k }
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ fonts.otf.features.aux.resolve_ligatures(tfmdata,ligatures,kind)
+ end
+ else
+ tfmdata.ligatures = tfmdata.ligatures or { }
+ end
+end
+
+function fonts.initializers.base.otf.liga(tfm,value) fonts.otf.features.prepare_base_substitutions(tfm,'liga',value) end
+function fonts.initializers.base.otf.dlig(tfm,value) fonts.otf.features.prepare_base_substitutions(tfm,'dlig',value) end
+function fonts.initializers.base.otf.rlig(tfm,value) fonts.otf.features.prepare_base_substitutions(tfm,'rlig',value) end
+function fonts.initializers.base.otf.hlig(tfm,value) fonts.otf.features.prepare_base_substitutions(tfm,'hlig',value) end
+function fonts.initializers.base.otf.pnum(tfm,value) fonts.otf.features.prepare_base_substitutions(tfm,'pnum',value) end
+function fonts.initializers.base.otf.onum(tfm,value) fonts.otf.features.prepare_base_substitutions(tfm,'onum',value) end
+function fonts.initializers.base.otf.tnum(tfm,value) fonts.otf.features.prepare_base_substitutions(tfm,'tnum',value) end
+function fonts.initializers.base.otf.lnum(tfm,value) fonts.otf.features.prepare_base_substitutions(tfm,'lnum',value) end
+function fonts.initializers.base.otf.zero(tfm,value) fonts.otf.features.prepare_base_substitutions(tfm,'zero',value) end
+function fonts.initializers.base.otf.smcp(tfm,value) fonts.otf.features.prepare_base_substitutions(tfm,'smcp',value) end
+function fonts.initializers.base.otf.cpsp(tfm,value) fonts.otf.features.prepare_base_substitutions(tfm,'cpsp',value) end
+function fonts.initializers.base.otf.c2sc(tfm,value) fonts.otf.features.prepare_base_substitutions(tfm,'c2sc',value) end
+function fonts.initializers.base.otf.ornm(tfm,value) fonts.otf.features.prepare_base_substitutions(tfm,'ornm',value) end
+function fonts.initializers.base.otf.aalt(tfm,value) fonts.otf.features.prepare_base_substitutions(tfm,'aalt',value) end
+
+function fonts.initializers.base.otf.hwid(tfm,value) fonts.otf.features.prepare_base_substitutions(tfm,'hwid',value) end
+function fonts.initializers.base.otf.fwid(tfm,value) fonts.otf.features.prepare_base_substitutions(tfm,'fwid',value) end
+
+-- Here comes the real thing ... node processing! The next session prepares
+-- things. The main features (unchained by rules) have their own caches,
+-- while the private ones cache locally.
+
+do
+
+ fonts.otf.features.prepare = { }
+
+ local falsetable = { false, false, false }
+
+ function fonts.otf.features.prepare.feature(tfmdata,kind,value)
+ if value then
+ local language, script = tfmdata.language or "dflt", tfmdata.script or "dflt"
+ local shared = tfmdata.shared
+ local otfdata = shared.otfdata
+ local lookuptable = fonts.otf.valid_subtable(otfdata,kind,script,language)
+ if lookuptable then
+ local fullkind = kind .. script .. language
+ if not shared.lookuptable [fullkind] then
+ --~ print(tfmdata,file.basename(tfmdata.fullname or ""),kind,script,language,lookuptable,fullkind)
+ local processes = { }
+ -- featuredata and featurecache are indexed by lookup so we can share them
+ shared.featuredata [kind] = shared.featuredata [kind] or { }
+ shared.featurecache[kind] = shared.featurecache[kind] or false -- signal
+ shared.lookuptable [fullkind] = lookuptable
+ shared.processes [fullkind] = processes
+ local types = otfdata.luatex.name_to_type
+ local flags = otfdata.luatex.ignore_flags
+ local preparers = fonts.otf.features.prepare
+ local process = fonts.otf.features.process
+ for i=1,#lookuptable do
+ local lookupname = lookuptable[i]
+ local lookuptype = types[lookupname]
+ local prepare = preparers[lookuptype]
+ if prepare then
+ local processdata = prepare(tfmdata,kind,lookupname)
+ if processdata then
+ local processflags = flags[lookupname] or falsetable --- share false table
+ -- local chain = (lookuptype == "gsub_contextchain") or (lookuptype == "gpos_contextchain")
+ local chain = lookuptype:find("context") ~= nil
+ processes[#processes+1] = { process[lookuptype], lookupname, processdata, processflags, chain }
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+
+ -- helper: todo, we don't need to store non local ones for chains so we can pass the
+ -- validator as parameter
+
+ local pairs = pairs
+
+ function fonts.otf.features.collect_ligatures(tfmdata,kind) -- ligs are spread all over the place
+ local otfdata = tfmdata.shared.otfdata
+ local unicodes = tfmdata.shared.otfdata.luatex.unicodes -- actually the char index is ok too
+ local trace = fonts.otf.trace_features
+ local ligatures = { }
+ local function collect(lookup,o,ps)
+ for i=1,#ps do
+ local p = ps[i]
+ if p[1] == 'ligature' then
+ if trace then
+ logs.report("define otf",string.format("feature %s lookup %s ligature %s => %s",kind,lookup,p[2],o.name))
+ end
+ local t = ligatures[lookup]
+ if not t then
+ t = { }
+ ligatures[lookup] = t
+ end
+ local first = true
+ for s in p[2]:gmatch("[^ ]+") do
+ local u = unicodes[s]
+ if first then
+ if not t[u] then
+ t[u] = { { } }
+ end
+ t = t[u]
+ first = false
+ else
+ local t1 = t[1]
+ if not t1[u] then
+ t1[u] = { { } }
+ end
+ t = t1[u]
+ end
+ end
+ t[2] = o.unicode
+ end
+ end
+ end
+ local forced, always, okay = fonts.otf.valid_feature(otfdata,kind,tfmdata.script,tfmdata.language)
+ for _,o in pairs(otfdata.glyphs) do
+ local lookups = o.lookups
+ if lookups then
+ if forced then
+ for lookup, ps in pairs(lookups) do collect(lookup,o,ps) end
+ elseif okay then
+ for lookup, ps in pairs(lookups) do if always[lookup] or okay[lookup] then collect(lookup,o,ps) end end
+ else
+ for lookup, ps in pairs(lookups) do if always[lookup] then collect(lookup,o,ps) end end
+ end
+ end
+ end
+ return ligatures
+ end
+
+ -- gsub_single -> done
+ -- gsub_multiple -> done
+ -- gsub_alternate -> done
+ -- gsub_ligature -> done
+ -- gsub_context -> todo
+ -- gsub_contextchain -> done
+ -- gsub_reversecontextchain -> todo
+
+ -- we used to share code in the following functions but that was relatively
+ -- due to extensive calls to functions (easily hundreds of thousands per
+ -- document)
+
+ function fonts.otf.features.prepare.gsub_single(tfmdata,kind,lookupname)
+ local featuredata = tfmdata.shared.featuredata[kind]
+ local substitutions = featuredata[lookupname]
+ if not substitutions then
+ substitutions = { }
+ featuredata[lookupname] = substitutions
+ local otfdata = tfmdata.shared.otfdata
+ local unicodes = otfdata.luatex.unicodes
+ local trace = fonts.otf.trace_features
+ for _, o in pairs(otfdata.glyphs) do
+ local lookups = o.lookups
+ if lookups then
+ for lookup,ps in pairs(lookups) do
+ if lookup == lookupname then
+ for i=1,#ps do
+ local p = ps[i]
+ if p[1] == 'substitution' then
+ local old, new = o.unicode, unicodes[p[2]]
+ substitutions[old] = new
+ if trace then
+ logs.report("define otf",string.format("%s:%s substitution %s => %s",kind,lookupname,old,new))
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ return substitutions
+ end
+
+ function fonts.otf.features.prepare.gsub_multiple(tfmdata,kind,lookupname)
+ local featuredata = tfmdata.shared.featuredata[kind]
+ local substitutions = featuredata[lookupname]
+ if not substitutions then
+ substitutions = { }
+ featuredata[lookupname] = substitutions
+ local otfdata = tfmdata.shared.otfdata
+ local unicodes = otfdata.luatex.unicodes
+ local trace = fonts.otf.trace_features
+ for _,o in pairs(otfdata.glyphs) do
+ local lookups = o.lookups
+ if lookups then
+ for lookup,ps in pairs(lookups) do
+ if lookup == lookupname then
+ for i=1,#ps do
+ local p = ps[i]
+ if p[1] == 'multiple' then
+ local old, new = o.unicode, { }
+ substitutions[old] = new
+ for pc in p[2]:gmatch("[^ ]+") do
+ new[#new+1] = unicodes[pc]
+ end
+ if trace then
+ logs.report("define otf",string.format("%s:%s multiple %s => %s",kind,lookupname,old,table.concat(new," ")))
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ return substitutions
+ end
+
+ function fonts.otf.features.prepare.gsub_alternate(tfmdata,kind,lookupname)
+ -- todo: configurable preference list
+ local featuredata = tfmdata.shared.featuredata[kind]
+ local substitutions = featuredata[lookupname]
+ if not substitutions then
+ featuredata[lookupname] = { }
+ substitutions = featuredata[lookupname]
+ local otfdata = tfmdata.shared.otfdata
+ local unicodes = otfdata.luatex.unicodes
+ local trace = fonts.otf.trace_features
+ for _,o in pairs(otfdata.glyphs) do
+ local lookups = o.lookups
+ if lookups then
+ for lookup,ps in pairs(lookups) do
+ if lookup == lookupname then
+ for i=1,#ps do
+ local p = ps[i]
+ if p[1] == 'alternate' then
+ local old = o.unicode
+ local t = { }
+ for pc in p[2]:gmatch("[^ ]+") do
+ t[#t+1] = unicodes[pc]
+ end
+ substitutions[old] = t
+ if trace then
+ logs.report("define otf",string.format("%s:%s alternate %s => %s",kind,lookupname,old,table.concat(substitutions,"|")))
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ return substitutions
+ end
+
+ function fonts.otf.features.prepare.gsub_ligature(tfmdata,kind,lookupname)
+ -- we collect them for all lookups, this saves loops, we only use the
+ -- lookupname for testing, we need to check if this leads to redundant
+ -- collections
+ local ligatures = tfmdata.shared.featuredata[kind]
+ if not ligatures[lookupname] then
+ ligatures = fonts.otf.features.collect_ligatures(tfmdata,kind)
+ tfmdata.shared.featuredata[kind] = ligatures
+ end
+ return ligatures[lookupname]
+ end
+
+ function fonts.otf.features.prepare.contextchain(tfmdata,kind,lookupname)
+ local featuredata = tfmdata.shared.featuredata[kind]
+ local contexts = featuredata[lookupname]
+ if not contexts then
+ featuredata[lookupname] = { }
+ contexts = featuredata[lookupname]
+ local otfdata = tfmdata.shared.otfdata
+ local unicodes = otfdata.luatex.unicodes
+ local internals = otfdata.luatex.internals
+ local flags = otfdata.luatex.ignore_flags
+ local types = otfdata.luatex.name_to_type
+ otfdata.luatex.covers = otfdata.luatex.covers or { }
+ local characters = tfmdata.characters
+ local cache = otfdata.luatex.covers
+ local function uncover(covers,result)
+ -- lpeg hardly faster (.005 sec on mk)
+ for n=1,#covers do
+ local c = covers[n]
+ local cc = cache[c]
+ if not cc then
+ local t = { }
+ for s in c:gmatch("[^ ]+") do
+ t[unicodes[s]] = true
+ end
+ cache[c] = t
+ result[#result+1] = t
+ else
+ result[#result+1] = cc
+ end
+ end
+ end
+ local lookupdata = otfdata.lookups[lookupname]
+ if not lookupdata then
+ logs.error("otf process", string.format("missing lookupdata table %s",lookupname))
+ elseif lookupdata.rules then
+ local rules = lookupdata.rules
+ local center_match = fonts.otf.center_match
+ for nofrules=1,#rules do
+ local rule = rules[nofrules]
+ local coverage = rule.coverage
+ if coverage and coverage.current then
+ local current, before, after, sequence = coverage.current, coverage.before, coverage.after, { }
+ if before then
+ uncover(before,sequence)
+ end
+ local start = #sequence + 1
+ uncover(current,sequence)
+ local stop = #sequence
+ if after then
+ uncover(after,sequence)
+ end
+ if sequence[1] then
+ local lookups, lookuptype = rule.lookups, 'self'
+ -- for the moment only lookup index 1
+ if lookups then
+ if #lookups > 1 then
+ logs.report("otf process","WARNING: more than one lookup in rule")
+ end
+ lookuptype = types[lookups[1]]
+ end
+ -- this may be wrong; we cannot copy inside the for loop (out of memory with hz);
+ -- so we may end up with a different usage of sequence in the chainproc handlers
+ sequence = table.copy(sequence)
+ -- we trigger on the first character in current
+ for unic, _ in pairs(sequence[start]) do
+ local t = contexts[unic]
+ if not t then
+ contexts[unic] = { lookups={}, flags=flags[lookupname] }
+ t = contexts[unic].lookups
+ end
+ t[#t+1] = { nofrules, lookuptype, sequence, start, stop, lookups }
+ end
+ end
+ end
+ end
+ end
+ end
+ return contexts
+ end
+
+ fonts.otf.features.prepare.gsub_context = fonts.otf.features.prepare.contextchain
+ fonts.otf.features.prepare.gsub_contextchain = fonts.otf.features.prepare.contextchain
+ fonts.otf.features.prepare.gsub_reversecontextchain = fonts.otf.features.prepare.contextchain
+
+ -- ruled->lookup=ks_latn_l_27_c_4 => internal[ls_l_84] => valid[ls_l_84_s]
+
+ -- gpos_mark2base -> done
+ -- gpos_mark2ligature -> done
+ -- gpos_mark2mark -> done
+ -- gpos_single -> not done
+ -- gpos_pair -> not done
+ -- gpos_cursive -> not done
+ -- gpos_context -> not done
+ -- gpos_reversecontextchain -> not done
+
+ function fonts.otf.features.prepare.anchors(tfmdata,kind,lookupname) -- tracing
+ local featuredata = tfmdata.shared.featuredata[kind]
+ local anchors = featuredata[lookupname]
+ if not anchors then
+ anchors = { }
+ featuredata[lookupname] = anchors
+ local otfdata = tfmdata.shared.otfdata
+ local unicodes = otfdata.luatex.unicodes
+ local validanchors = { }
+ local glyphs = otfdata.glyphs
+ local trace = fonts.otf.trace_features
+ if otfdata.anchor_classes then
+ local classes = otfdata.anchor_classes
+ for k=1,#classes do
+ local class = classes[k]
+ if class.lookup == lookupname then
+ if trace then
+ logs.report("define otf",string.format("%s:%s anchor -> %s",kind,lookupname,class.name))
+ end
+ validanchors[class.name] = true
+ end
+ end
+ end
+ for _,o in pairs(glyphs) do
+ local oanchor = o.anchors
+ if oanchor then
+ local t, ok = { }, false
+ for type, anchors in pairs(oanchor) do -- types
+ local tt = false
+ for name, anchor in pairs(anchors) do
+ if validanchors[name] then
+ if not tt then
+ tt = { [name] = anchor }
+ t[type] = tt
+ ok = true
+ else
+ tt[name] = anchor
+ end
+ end
+ end
+ end
+ if ok then
+ anchors[o.unicode] = t
+ end
+ end
+ end
+ end
+--~ if kind == "mkmk" then print(lookupname,table.serialize(anchors)) end
+ return anchors
+ end
+
+ fonts.otf.features.prepare.gpos_mark2base = fonts.otf.features.prepare.anchors
+ fonts.otf.features.prepare.gpos_mark2ligature = fonts.otf.features.prepare.anchors
+ fonts.otf.features.prepare.gpos_mark2mark = fonts.otf.features.prepare.anchors
+ fonts.otf.features.prepare.gpos_cursive = fonts.otf.features.prepare.anchors
+ fonts.otf.features.prepare.gpos_context = fonts.otf.features.prepare.contextchain
+ fonts.otf.features.prepare.gpos_contextchain = fonts.otf.features.prepare.contextchain
+
+ function fonts.otf.features.prepare.gpos_single(tfmdata,kind,lookupname)
+ logs.report("otf define","gpos_single not yet supported")
+ end
+
+ -- ["kerns"]={ { ["char"]="ytilde", ["lookup"]="pp_l_1_s", ["off"]=-83, ...
+ -- ["mykerns"] = { ["pp_l_1_s"] = { [67] = -28, ...
+
+ function fonts.otf.features.prepare.gpos_pair(tfmdata,kind,lookupname)
+ local featuredata = tfmdata.shared.featuredata[kind]
+ local kerns = featuredata[lookupname]
+ if not kerns then
+ local trace = fonts.otf.trace_features
+ featuredata[lookupname] = { }
+ kerns = featuredata[lookupname]
+ local otfdata = tfmdata.shared.otfdata
+ local unicodes = otfdata.luatex.unicodes
+ local glyphs = otfdata.glyphs
+ -- ff has isolated kerns in a separate table
+ for k,o in pairs(glyphs) do
+ local list = o.mykerns
+ if list then
+ local omk = list[lookupname]
+ if omk then
+ local one = o.unicode
+ for char, off in pairs(omk) do
+ local two = char
+ local krn = kerns[one]
+ if krn then
+ krn[two] = off
+ else
+ kerns[one] = { two = off }
+ end
+ if trace then
+ logs.report("define otf",string.format("feature %s kern pair %s - %s",kind,one,two))
+ end
+ end
+ end
+ elseif o.kerns then
+ local one = o.unicode
+ local okerns = o.kerns
+ for ok=1,#okerns do
+ local k = okerns[ok]
+ if k.lookup == lookupname then
+ local char = k.char
+ if char then
+ local two = unicodes[char]
+ local krn = kerns[one]
+ if krn then
+ krn[two] = k.off
+ else
+ kerns[one] = { two = k.off }
+ end
+ if trace then
+ logs.report("define otf",string.format("feature %s kern pair %s - %s",kind,one,two))
+ end
+ end
+ end
+ end
+ end
+ list = o.lookups
+ if list then
+ local one = o.unicode
+ for lookup,ps in pairs(list) do
+ if lookup == lookupname then
+ for i=1,#ps do
+ local p = ps[i]
+ if p[1] == 'pair' then
+ local two = unicodes[p[2]]
+ local krn = kerns[one]
+ if krn then
+ krn[two] = p
+ else
+ kerns[one] = { two = p }
+ end
+ if trace then
+ logs.report("define otf",string.format("feature %s kern pair %s - %s",kind,one,two))
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ return kerns
+ end
+
+ fonts.otf.features.prepare.gpos_contextchain = fonts.otf.features.prepare.contextchain
+
+end
+
+-- can be generalized: one loop in main
+
+do
+
+ local prepare = fonts.otf.features.prepare.feature
+
+ function fonts.initializers.node.otf.aalt(tfm,value) return prepare(tfm,'aalt',value) end
+ function fonts.initializers.node.otf.abvm(tfm,value) return prepare(tfm,'abvm',value) end
+ function fonts.initializers.node.otf.afrc(tfm,value) return prepare(tfm,'afrc',value) end
+ function fonts.initializers.node.otf.akhn(tfm,value) return prepare(tfm,'akhn',value) end
+ function fonts.initializers.node.otf.blwm(tfm,value) return prepare(tfm,'blwm',value) end
+ function fonts.initializers.node.otf.c2pc(tfm,value) return prepare(tfm,'c2pc',value) end
+ function fonts.initializers.node.otf.c2sc(tfm,value) return prepare(tfm,'c2sc',value) end
+ function fonts.initializers.node.otf.calt(tfm,value) return prepare(tfm,'calt',value) end
+ function fonts.initializers.node.otf.case(tfm,value) return prepare(tfm,'case',value) end
+ function fonts.initializers.node.otf.ccmp(tfm,value) return prepare(tfm,'ccmp',value) end
+ function fonts.initializers.node.otf.clig(tfm,value) return prepare(tfm,'clig',value) end
+ function fonts.initializers.node.otf.cpsp(tfm,value) return prepare(tfm,'cpsp',value) end
+ function fonts.initializers.node.otf.cswh(tfm,value) return prepare(tfm,'cswh',value) end
+ function fonts.initializers.node.otf.curs(tfm,value) return prepare(tfm,'curs',value) end
+ function fonts.initializers.node.otf.dlig(tfm,value) return prepare(tfm,'dlig',value) end
+ function fonts.initializers.node.otf.dnom(tfm,value) return prepare(tfm,'dnom',value) end
+ function fonts.initializers.node.otf.expt(tfm,value) return prepare(tfm,'expt',value) end
+ function fonts.initializers.node.otf.fin2(tfm,value) return prepare(tfm,'fin2',value) end
+ function fonts.initializers.node.otf.fin3(tfm,value) return prepare(tfm,'fin3',value) end
+ function fonts.initializers.node.otf.fina(tfm,value) return prepare(tfm,'fina',value) end
+ function fonts.initializers.node.otf.frac(tfm,value) return prepare(tfm,'frac',value) end
+ function fonts.initializers.node.otf.fwid(tfm,value) return prepare(tfm,'fwid',value) end
+ function fonts.initializers.node.otf.haln(tfm,value) return prepare(tfm,'haln',value) end
+ function fonts.initializers.node.otf.hist(tfm,value) return prepare(tfm,'hist',value) end
+ function fonts.initializers.node.otf.hkna(tfm,value) return prepare(tfm,'hkna',value) end
+ function fonts.initializers.node.otf.hlig(tfm,value) return prepare(tfm,'hlig',value) end
+ function fonts.initializers.node.otf.hngl(tfm,value) return prepare(tfm,'hngl',value) end
+ function fonts.initializers.node.otf.hwid(tfm,value) return prepare(tfm,'hwid',value) end
+ function fonts.initializers.node.otf.init(tfm,value) return prepare(tfm,'init',value) end
+ function fonts.initializers.node.otf.isol(tfm,value) return prepare(tfm,'isol',value) end
+ function fonts.initializers.node.otf.ital(tfm,value) return prepare(tfm,'ital',value) end
+ function fonts.initializers.node.otf.jp78(tfm,value) return prepare(tfm,'jp78',value) end
+ function fonts.initializers.node.otf.jp83(tfm,value) return prepare(tfm,'jp83',value) end
+ function fonts.initializers.node.otf.jp90(tfm,value) return prepare(tfm,'jp90',value) end
+ function fonts.initializers.node.otf.kern(tfm,value) return prepare(tfm,'kern',value) end
+ function fonts.initializers.node.otf.liga(tfm,value) return prepare(tfm,'liga',value) end
+ function fonts.initializers.node.otf.lnum(tfm,value) return prepare(tfm,'lnum',value) end
+ function fonts.initializers.node.otf.locl(tfm,value) return prepare(tfm,'locl',value) end
+ function fonts.initializers.node.otf.mark(tfm,value) return prepare(tfm,'mark',value) end
+ function fonts.initializers.node.otf.med2(tfm,value) return prepare(tfm,'med2',value) end
+ function fonts.initializers.node.otf.medi(tfm,value) return prepare(tfm,'medi',value) end
+ function fonts.initializers.node.otf.mgrk(tfm,value) return prepare(tfm,'mgrk',value) end
+ function fonts.initializers.node.otf.mkmk(tfm,value) return prepare(tfm,'mkmk',value) end
+ function fonts.initializers.node.otf.nalt(tfm,value) return prepare(tfm,'nalt',value) end
+ function fonts.initializers.node.otf.nlck(tfm,value) return prepare(tfm,'nlck',value) end
+ function fonts.initializers.node.otf.nukt(tfm,value) return prepare(tfm,'nukt',value) end
+ function fonts.initializers.node.otf.numr(tfm,value) return prepare(tfm,'numr',value) end
+ function fonts.initializers.node.otf.onum(tfm,value) return prepare(tfm,'onum',value) end
+ function fonts.initializers.node.otf.ordn(tfm,value) return prepare(tfm,'ordn',value) end
+ function fonts.initializers.node.otf.ornm(tfm,value) return prepare(tfm,'ornm',value) end
+ function fonts.initializers.node.otf.pnum(tfm,value) return prepare(tfm,'pnum',value) end
+ function fonts.initializers.node.otf.pref(tfm,value) return prepare(tfm,'pref',value) end
+ function fonts.initializers.node.otf.pres(tfm,value) return prepare(tfm,'pres',value) end
+ function fonts.initializers.node.otf.pstf(tfm,value) return prepare(tfm,'pstf',value) end
+ function fonts.initializers.node.otf.rlig(tfm,value) return prepare(tfm,'rlig',value) end
+ function fonts.initializers.node.otf.rphf(tfm,value) return prepare(tfm,'rphf',value) end
+ function fonts.initializers.node.otf.salt(tfm,value) return prepare(tfm,'salt',value) end
+ function fonts.initializers.node.otf.sinf(tfm,value) return prepare(tfm,'sinf',value) end
+ function fonts.initializers.node.otf.smcp(tfm,value) return prepare(tfm,'smcp',value) end
+ function fonts.initializers.node.otf.smpl(tfm,value) return prepare(tfm,'smpl',value) end
+ function fonts.initializers.node.otf.ss01(tfm,value) return prepare(tfm,'ss01',value) end
+ function fonts.initializers.node.otf.ss02(tfm,value) return prepare(tfm,'ss02',value) end
+ function fonts.initializers.node.otf.ss03(tfm,value) return prepare(tfm,'ss03',value) end
+ function fonts.initializers.node.otf.ss04(tfm,value) return prepare(tfm,'ss04',value) end
+ function fonts.initializers.node.otf.ss05(tfm,value) return prepare(tfm,'ss05',value) end
+ function fonts.initializers.node.otf.ss06(tfm,value) return prepare(tfm,'ss06',value) end
+ function fonts.initializers.node.otf.ss07(tfm,value) return prepare(tfm,'ss07',value) end
+ function fonts.initializers.node.otf.ss08(tfm,value) return prepare(tfm,'ss08',value) end
+ function fonts.initializers.node.otf.ss09(tfm,value) return prepare(tfm,'ss09',value) end
+ function fonts.initializers.node.otf.subs(tfm,value) return prepare(tfm,'subs',value) end
+ function fonts.initializers.node.otf.sups(tfm,value) return prepare(tfm,'sups',value) end
+ function fonts.initializers.node.otf.swsh(tfm,value) return prepare(tfm,'swsh',value) end
+ function fonts.initializers.node.otf.titl(tfm,value) return prepare(tfm,'titl',value) end
+ function fonts.initializers.node.otf.tnam(tfm,value) return prepare(tfm,'tnam',value) end
+ function fonts.initializers.node.otf.tnum(tfm,value) return prepare(tfm,'tnum',value) end
+ function fonts.initializers.node.otf.trad(tfm,value) return prepare(tfm,'trad',value) end
+ function fonts.initializers.node.otf.unic(tfm,value) return prepare(tfm,'unic',value) end
+ function fonts.initializers.node.otf.zero(tfm,value) return prepare(tfm,'zero',value) end
+
+end
+
+do
+
+ -- todo: use nodes helpers
+
+ local glyph = node.id('glyph')
+ local glue = node.id('glue')
+ local kern = node.id('kern')
+ local disc = node.id('disc')
+
+ local fontdata = fonts.tfm.id
+ local has_attribute = node.has_attribute
+ local set_attribute = node.set_attribute
+ local state = attributes.numbers['state'] or 100
+ local marknumber = attributes.numbers['mark'] or 200
+ local format = string.format
+ local report = logs.report
+ local scale = tex.scale
+
+ fonts.otf.features.process = { }
+
+ -- we share some vars here, after all, we have no nested lookups and
+ -- less code
+
+ local tfmdata = false
+ local otfdata = false
+ local characters = false
+ local marks = false
+ local glyphs = false
+ local currentfont = false
+
+ -- we cheat a bit and assume that a font,attr combination are kind of ranged
+
+ local context_setups = fonts.define.specify.context_setups
+ local context_numbers = fonts.define.specify.context_numbers
+
+ -- 1 loop over glyphs loop over lookups, quit at match
+ -- 2 loop over glyphs loop over lookups, continue at match
+ -- 3 loop over lookups loop over glyphs
+
+ fonts.otf.strategy = 2
+
+ function fonts.otf.features.process.feature(head,font,attr,kind,attribute)
+ tfmdata = fontdata[font]
+ local shared = tfmdata.shared
+ otfdata = shared.otfdata
+ characters = tfmdata.characters
+ marks = otfdata.luatex.marks
+ glyphs = otfdata.glyphs
+ currentfont = font
+ local script, language, strategy
+ if attr and attr > 0 then
+ local features = context_setups[context_numbers[attr]]
+ language, script, strategy = features.language or "dflt", features.script or "dflt", features.strategy or fonts.otf.strategy
+ else
+ language, script, strategy = tfmdata.language or "dflt", tfmdata.script or "dflt", tfmdata.strategy or fonts.otf.strategy
+ end
+ local fullkind = kind .. script .. language
+ local lookuptable = shared.lookuptable[fullkind]
+ if lookuptable then
+ -- local strategy = fonts.otf.strategy
+ local types = otfdata.luatex.name_to_type
+ local start, done, ok = head, false, false
+ local processes = shared.processes[fullkind]
+ if #processes == 1 then
+ local p = processes[1]
+ while start do -- evt splitsen
+ if start.id == glyph then
+ if start.subtype<256 and start.font == font and
+ (not attr or has_attribute(start,0,attr)) and -- dynamic feature
+ (not attribute or has_attribute(start,state,attribute)) then
+ -- we can make the p vars also global to this closure
+ local pp = p[3] -- all lookups
+ local pc = pp[start.char]
+ if pc then
+ start, ok = p[1](start,kind,p[2],pc,pp,p[4])
+ done = done or ok
+ if start then start = start.next end
+ else
+ start = start.next
+ end
+ else
+ start = start.next
+ end
+ elseif start.id == glue and p[5] then
+ local pp = p[3] -- all lookups
+ local pc = pp[32] -- space
+ if pc then
+ start, ok = p[1](start,kind,p[2],pc,pp,p[4])
+ done = done or ok
+ if start then start = start.next end
+ else
+ start = start.next
+ end
+ else
+ start = start.next
+ end
+ end
+ elseif strategy == 3 then
+ for i=1,#processes do local p = processes[i]
+ local pp = p[3]
+ start = head
+ while start do
+ if start.id == glyph then
+ if start.subtype<256 and start.font == font and
+ (not attr or has_attribute(start,0,attr)) and -- dynamic feature
+ (not attribute or has_attribute(start,state,attribute)) then
+ local pc = pp[start.char]
+ if pc then
+ start, ok = p[1](start,kind,p[2],pc,pp,p[4])
+ if ok then
+ done = true
+ end -- else
+ if start then start = start.next end
+ else
+ start = start.next
+ end
+ else
+ start = start.next
+ end
+ elseif start.id == glue then
+ if p[5] then -- chain
+ local pc = pp[32]
+ if pc then
+ start, ok = p[1](start,kind,p[2],pc,p[3],p[4])
+ if ok then
+ done = true
+ end
+ if start then start = start.next end
+ else
+ start = start.next
+ end
+ else
+ start = start.next
+ end
+ else
+ start = start.next
+ end
+ end
+ end
+ else
+ while start do
+ if start.id == glyph then
+ if start.subtype<256 and start.font == font and
+ (not attr or has_attribute(start,0,attr)) and -- dynamic feature
+ (not attribute or has_attribute(start,state,attribute)) then
+ local chr = start.char -- used ?
+ for i=1,#processes do local p = processes[i]
+ local pp = p[3]
+--~ local pc = pp[chr]
+ local pc = pp[start.char]
+ if pc then
+ start, ok = p[1](start,kind,p[2],pc,pp,p[4])
+ if ok then
+ done = true
+ if strategy == 1 then
+ break
+ end
+ end -- else
+ if not start then
+ break
+ end
+ end
+ end
+ if start then start = start.next end
+ elseif start.id == glue then
+ for i=1,#processes do local p = processes[i]
+ if p[5] then -- chain
+ local pp = p[3]
+ local pc = pp[32]
+ if pc then
+ start, ok = p[1](start,kind,p[2],pc,pp,p[4])
+ if ok then
+ done = true
+ if strategy == 1 then
+ break
+ end
+ end
+ if not start then
+ break
+ end
+ end
+ end
+ end
+ if start then start = start.next end
+ else
+ start = start.next
+ end
+ else
+ start = start.next
+ end
+ end
+ end
+ return head, done
+ else
+ return head, false
+ end
+ end
+
+ -- we can assume that languages that use marks are not hyphenated
+ -- we can also assume that at most one discretionary is present
+
+ local function toligature(start,stop,char,markflag,discfound) -- brr head
+ if start ~= stop then
+ if discfound then
+ local lignode = node.copy(start)
+ lignode.font = start.font
+ lignode.char = char
+ lignode.subtype = 2
+ start = node.do_ligature_n(start, stop, lignode)
+ if start.id == disc then
+ local prev = start.prev
+ start = start.next
+ end
+ else
+ local deletemarks = markflag ~= "mark"
+ start.components = node.copy_list(start,stop)
+ node.slide(start.components)
+ -- todo: components
+ start.subtype = 2
+ start.char = char
+ local marknum = 1
+ local next = start.next
+ while true do
+ if marks[next.char] then
+ if not deletemarks then
+ set_attribute(next,marknumber,marknum)
+ end
+ else
+ marknum = marknum + 1
+ end
+ if next == stop then
+ break
+ else
+ next = next.next
+ end
+ end
+ next = stop.next
+ while next do
+ if next.id == glyph and next.font == currentfont and marks[next.char] then
+ set_attribute(next,marknumber,marknum)
+ next = next.next
+ else
+ break
+ end
+ end
+ local next = start.next
+ while next do
+ if next == stop or deletemarks or marks[next.char] then
+ local crap = next
+ local np, nn = next.prev, next.next
+ np.next = nn
+ if nn then
+ nn.prev = np
+ end
+ if next == stop then
+ stop = crap.prev
+ node.free(crap)
+ break
+ else
+ next = nn
+ node.free(crap)
+ end
+ else
+ next = nn
+ end
+ end
+ end
+ end
+ return start
+ end
+
+ function fonts.otf.features.process.gsub_single(start,kind,lookupname,replacements)
+ if replacements then
+ if fonts.otf.trace_replacements then
+ report("otf process",format("%s:%s replacing 0x%04X by 0x%04X",kind,lookupname,start.char,replacements))
+ end
+ start.char = replacements
+ return start, true
+ else
+ return start, false
+ end
+ end
+
+ function fonts.otf.features.process.gsub_alternate(start,kind,lookupname,alternatives)
+ if alternatives then
+ if fonts.otf.trace_replacements then
+ report("otf process",format("%s:%s alternative 0x%04X => %s",kind,lookupname,start.char,table.hexed(alternatives)))
+ end
+ start.char = alternatives[1] -- will be preference
+ return start, true
+ else
+ return start, false
+ end
+ end
+
+ function fonts.otf.features.process.gsub_multiple(start,kind,lookupname,multiples)
+ if multiples then
+ if fonts.otf.trace_replacements then
+ report("otf process",format("%s:%s multiple 0x%04X => %s",kind,lookupname,start.char,table.hexed(multiples)))
+ end
+ start.char = multiples[1]
+ if #multiples > 1 then
+ for k=2,#multiples do
+ local n = node.copy(start)
+ local sn = start.next
+ n.char = multiples[k]
+ n.next = sn
+ n.prev = start
+ if sn then
+ sn.prev = n
+ end
+ start.next = n
+ start = n
+ end
+ end
+ return start, true
+ else
+ return start, false
+ end
+ end
+
+ function fonts.otf.features.process.gsub_ligature(start,kind,lookupname,ligatures,alldata,flags)
+ local s, stop, discfound = start.next, nil, false
+ while s do
+ local id = s.id
+ if id == glyph and s.subtype<256 then
+ if s.font == currentfont then
+ if marks[s.char] then
+ s = s.next
+ else
+ local lg = ligatures[1][s.char]
+ if not lg then
+ break
+ else
+ stop = s
+ ligatures = lg
+ s = s.next
+ end
+ end
+ else
+ break
+ end
+ elseif id == disc then
+ discfound = true
+ s = s.next
+ else
+ break
+ end
+ end
+ if stop and ligatures[2] then
+ start = toligature(start,stop,ligatures[2],flags[1],discfound)
+ if fonts.otf.trace_ligatures then
+ report("otf process",format("%s: inserting ligature 0x%04X (%s)",kind,start.char,utf.char(start.char)))
+ end
+ return start, true
+ end
+ return start, false
+ end
+
+ function fonts.otf.features.process.gpos_mark2base(start,kind,lookupname,m_anchors,b_anchors)
+ local markchar = start.char
+ if marks[markchar] then
+ local markanchors = m_anchors['mark']
+ if markanchors then
+ local component = start.prev
+ while component and component.id == glyph and component.subtype<256 and component.font == currentfont do
+ local basechar = component.char
+ if marks[basechar] then
+ component = component.prev
+ else
+ local baseanchors = b_anchors[basechar]
+ if baseanchors then
+ baseanchors = baseanchors['basechar']
+ if baseanchors then
+ for anchor, ma in pairs(markanchors) do
+ local ba = baseanchors[anchor]
+ if ba then
+ local factor = tfmdata.factor
+ local dx, dy = scale(ba[1]-ma[1],factor), scale(ba[2]-ma[2],factor)
+ start.xoffset, start.yoffset = component.xoffset - dx, component.yoffset + dy
+ if fonts.otf.trace_anchors then
+ report("otf process",format("%s: anchoring mark 0x%04X to basechar 0x%04X => (%s,%s) => (%s,%s)",
+ kind,markchar,basechar,dx,dy,start.xoffset,start.yoffset))
+ end
+ return start, true
+ end
+ end
+ end
+ end
+ break
+ end
+ end
+ end
+ end
+ return start, false
+ end
+
+ function fonts.otf.features.process.gpos_mark2ligature(start,kind,lookupname,m_anchors,b_anchors) -- maybe use copies
+ local markchar = start.char
+ if marks[markchar] then
+ local markanchors = m_anchors['mark']
+ if markanchors then
+ local component = start.prev
+ while component and component.id == glyph and component.subtype<256 and component.font == currentfont do
+ local basechar = component.char
+ if marks[basechar] then
+ component = component.prev
+ else
+ local baseanchors = b_anchors[basechar]
+ if baseanchors then
+ baseanchors = baseanchors['baselig']
+ if baseanchors then
+ for anchor, ma in pairs(markanchors) do
+ local ba = baseanchors[anchor]
+ if ba then
+ local n = has_attribute(start,marknumber)
+ ba = ba[n]
+ if ba then
+ local factor = tfmdata.factor
+ local dx, dy = scale(ba[1]-ma[1],factor), scale(ba[2]-ma[2],factor)
+ start.xoffset, start.yoffset = component.xoffset - dx, component.yoffset + dy
+ if fonts.otf.trace_anchors then
+ report("otf process",format("%s: anchoring mark 0x%04X to baseligature 0x%04X => (%s,%s) => (%s,%s)",
+ kind,markchar,basechar,dx,dy,component.xoffset,component.yoffset))
+ end
+ return start, true
+ end
+ end
+ end
+ end
+ end
+ break
+ end
+ end
+ return start, done
+ end
+ end
+ return start, false
+ end
+
+ function fonts.otf.features.process.gpos_mark2mark(start,kind,lookupname,b_anchors,m_anchors)
+ local basemarkchar = start.char
+--~ print(lookupname)
+ if marks[basemarkchar] then
+--~ print('')
+--~ print('basemarkchar',basemarkchar)
+--~ print('basemarkanchors', table.serialize(b_anchors))
+ local baseanchors = b_anchors['basemark']
+ if baseanchors then
+ local component = start.next
+ while component and component.id == glyph and component.subtype<256 and component.font == currentfont do
+ local markchar = component.char
+ if not marks[markchar] then
+ break
+ else
+--~ print('markchar',markchar)
+ local basemarkattr = has_attribute(start, marknumber) or 1
+ local markattr = has_attribute(component,marknumber) or 1
+--~ print(basemarkattr,markattr)
+ if basemarkattr == markattr then -- still needed?
+--~ print('markanchors *', table.serialize(m_anchors))
+
+ local markanchors = m_anchors[markchar]
+ if markanchors then
+--~ print('markanchors')
+ local markanchor = markanchors['mark']
+ if markanchor then
+ for anchor,ma in pairs(markanchor) do
+ local ba = baseanchors[anchor]
+ if ba then
+ local factor = tfmdata.factor
+ local dx, dy = scale(ba[1]-ma[1],factor), scale(ba[2]-ma[2],factor)
+ component.xoffset, component.yoffset = start.xoffset - dx, start.yoffset + dy
+ if fonts.otf.trace_anchors then
+ report("otf process",format("%s:%s:%s anchoring mark 0x%04X to basemark 0x%04X => (%s,%s) => (%s,%s)",
+ kind,anchor,markattr,markchar,basemarkchar,dx,dy,component.xoffset,component.yoffset))
+ end
+ return start, true
+ end
+ end
+ end
+ end
+ component = component.next
+ end
+ end
+ end
+ end
+ end
+ return start, false
+ end
+
+ -- the following can be optimized, also, we can share the table (no need to collect)
+
+ function fonts.otf.features.process.gpos_cursive(start,kind,lookupname,exitanchors,anchors)
+ local trace = fonts.otf.trace_anchors
+ local next, done, x, y, total_x, total_y, tx, ty, first = start.next, false, 0, 0, 0, 0, { }, { }, nil
+ local factor = tfmdata.factor
+ local function finish()
+ local i = 0
+ while first and first.id == glyph do
+ if marks[first.char] then
+ first = first.next
+ else
+ i = i + 1
+ first.yoffset = scale(total_y, factor)
+ if fonts.otf.trace_cursive then
+ report("otf process",format("%s:%s move 0x%04X cursive (%s,%s)",kind,lookupname,first.char,"?",total_y))
+ end
+ if first == next then
+ break
+ else
+ total_y = total_y - (ty[i] or 0)
+ first = first.next
+ end
+ end
+ end
+ x, y, total_x, total_y, tx, ty, first = 0, 0, 0, 0, { }, { }, nil
+ end
+ while next do
+ if next.id == glyph and next.subtype<256 and next.font == currentfont then
+ local nextchar = next.char
+ if marks[nextchar] then
+ next = next.next
+ else
+ local entryanchors, exitanchors = anchors[nextchar], anchors[start.char]
+ if entryanchors and exitanchors then
+ local centry, cexit = entryanchors['centry'], exitanchors['cexit']
+ if centry and cexit then
+ for anchor, entry in pairs(centry) do
+ local exit = cexit[anchor]
+ if exit then
+ if not first then first = start end
+ local dx, dy = exit[1] + entry[1], -exit[2] + entry[2]
+ tx[#tx+1], ty[#ty+1] = dx, dy
+ total_x, total_y = total_x + dx, total_y + dy
+ done = true
+ break
+ end
+ end
+ else
+ finish()
+ end
+ else
+ finish()
+ end
+ start = next
+ next = start.next
+ end
+ else
+ finish()
+ break
+ end
+ end
+ return start, done
+ end
+
+ function fonts.otf.features.process.gpos_single(start,kind,lookupname,basekerns,kerns)
+ report("otf process","gpos_single not yet supported")
+ return start, false
+ end
+
+ function fonts.otf.features.process.gpos_pair(start,kind,lookupname,basekerns,kerns)
+ local next, prev, done = start.next, start, false
+ -- to be optimized
+ local trace = fonts.otf.trace_kerns
+ local factor = tfmdata.factor
+ while next and next.id == glyph and next.subtype<256 and next.font == currentfont do
+ local cn = characters[next.char]
+ if not cn or cn.description.class == 'mark' then
+ prev = next
+ next = next.next
+ else
+ local krn = basekerns[next.char]
+ if not krn then
+ -- skip
+ elseif type(krn) == "table" then
+ local a, b = krn[3], krn[7]
+ if a and a ~= 0 then
+ local k = nodes.kern(scale(a,factor))
+ k.next = next
+ k.prev = prev
+ prev.next = k
+ next.prev = k
+ if trace then
+ -- todo
+ end
+ end
+ if b and b ~= 0 then
+ report("otf process","we need to do something with the second kern xoff " .. b)
+ end
+ else
+ -- todo, just start, next = node.insert_before(head,next,nodes.kern(scale(kern,factor)))
+ if fonts.otf.trace_kerns then
+ report("otf process",format("%s: inserting kern %s between 0x%04X and 0x%04X",kind,krn,prev.char,next.char))
+ end
+ local k = nodes.kern(scale(krn,factor))
+ k.next = next
+ k.prev = prev
+ prev.next = k
+ next.prev = k
+ end
+ break
+ end
+ end
+ return start, done
+ end
+
+ local chainprocs = { } -- we can probably optimize this because they're all internal lookups
+
+ -- For the moment we save each looked up glyph in the sequence, which is ok because
+ -- each lookup in the chain has its own sequence. This saves memory. Only ligatures
+ -- are stored in the featurecache, because we don't want to loop over all characters
+ -- in order to locate them.
+
+ function chainprocs.gsub_single(start,stop,kind,lookupname,sequence,f,l,lookups)
+ local trace = fonts.otf.trace_replacements
+ local c, r = trace and { }, trace and { }
+ local lookup, index, current = 1, f, start
+ while current ~= nil do
+ if current.id == glyph then -- test for more ?
+ local char = current.char
+ local cacheslot = sequence[index]
+ local replacement = cacheslot[char]
+ if replacement == true then
+ if lookups then
+ local looks = glyphs[tfmdata.characters[char].description.index].lookups -- SLOW, USE OTFDATA
+ if looks then
+ local glyphlookups = otfdata.luatex.internals[lookups[lookup]].lookups
+ local unicodes = otfdata.luatex.unicodes
+ for gl=1,#glyphlookups do
+ local lv = looks[glyphlookups[gl]]
+ if lv then
+ replacement = unicodes[lv[1][2]] or char
+ cacheslot[char] = replacement
+ break
+ end
+ end
+ else
+ replacement, cacheslot[char] = char, char
+ end
+ else
+ replacement, cacheslot[char] = char, char
+ end
+ end
+ if trace then
+ c[#c+1], r[#r+1] = char, replacement
+ end
+ current.char = replacement
+ if current == stop then
+ break
+ else
+ current, lookup, index = current.next, lookup + 1, index + 1
+ end
+ elseif current == stop then
+ break
+ else
+ current = current.next
+ end
+ end
+ if trace then
+ report("otf chain",format("%s: single replacement %s by %s",kind,table.hexed(c),table.hexed(r)))
+ end
+ return start
+ end
+
+ function chainprocs.gsub_multiple(start,stop,kind,lookupname,sequence,f,l,lookups)
+ local char = start.char
+ local cacheslot = sequence[f] -- [1]
+ local replacement = cacheslot[char]
+ if replacement == true then
+ if lookups then
+ local looks = glyphs[tfmdata.characters[char].description.index].lookups
+ if looks then
+ local lookups = otfdata.luatex.internals[lookups[1]].lookups
+ local unicodes = otfdata.luatex.unicodes
+ for l=1,#lookups do
+ local lv = looks[lookups[l]]
+ if lv then
+ replacement = { }
+ for c in lv[1][2]:gmatch("[^ ]+") do
+ replacement[#replacement+1] = unicodes[c]
+ end
+ cacheslot[char] = replacement
+ break
+ end
+ end
+ else
+ replacement = { char }
+ cacheslot[char] = replacement
+ end
+ else
+ replacement = { char }
+ cacheslot[char] = replacement
+ end
+ end
+ if fonts.otf.trace_replacements then
+ report("otf chain",format("%s: replacing character 0x%04X by multiple 0x%04X",kind,char,table.hexed(replacement)))
+ end
+ start.char = replacement[1]
+ if #replacement > 1 then
+ for k=2,#replacement do
+ local n = node.copy(start)
+ local sn = start.next
+ n.char = replacement[k]
+ n.next = sn
+ n.prev = start
+ if sn then
+ sn.prev = n
+ end
+ start.next = n
+ start = n
+ end
+ end
+ return start
+ end
+
+ function chainprocs.gsub_alternate(start,stop,kind,lookupname,sequence,f,l,lookups)
+ local char = start.char
+ local cacheslot = sequence[f] -- [1]
+ local replacement = cacheslot[char]
+ if replacement == true then
+ if lookups then
+ local looks = glyphs[tfmdata.characters[char].description.index].lookups
+ if looks then
+ local lookups = otfdata.luatex.internals[lookups[1]].lookups
+ local unicodes = otfdata.luatex.unicodes
+ for l=1,#lookups do
+ local lv = looks[lookups[l]]
+ if lv then
+ replacement = { }
+ for c in lv[1][2]:gmatch("[^ ]+") do
+ replacement[#replacement+1] = unicodes[c]
+ end
+ cacheslot[char] = replacement
+ break
+ end
+ end
+ else
+ replacement = { char }
+ cacheslot[char] = replacement
+ end
+ else
+ replacement = { char }
+ cacheslot[char] = replacement
+ end
+ end
+ if fonts.otf.trace_replacements then
+ report("otf chain",format("%s: replacing character 0x%04X by alternate",kind,char))
+ end
+ start.char = replacement[1]
+ return start
+ end
+
+ function chainprocs.gsub_ligature(start,stop,kind,lookupname,sequence,f,l,lookups,flags)
+ if lookups then
+ local featurecache = fontdata[currentfont].shared.featurecache
+ if not featurecache[kind] then
+ featurecache[kind] = fonts.otf.features.collect_ligatures(tfmdata,kind) -- double cached ?
+ end
+ local lookups = otfdata.luatex.internals[lookups[1]].lookups
+ local ligaturecache = featurecache[kind]
+ local trace = fonts.otf.trace_ligatures
+ for i=1,#lookups do
+ local ligatures = ligaturecache[lookups[i]]
+ if ligatures and ligatures[start.char] then
+ ligatures = ligatures[start.char]
+ local s, discfound = start.next, false
+ while s do
+ local id = s.id
+ if id == disc then
+ s = s.next
+ discfound = true
+ elseif characters[s.char].description.class == 'mark' then -- marks
+ s = s.next
+ else
+ local lg = ligatures[1][s.char]
+ if not lg then
+ break
+ else
+ ligatures = lg
+ if s == stop then
+ break
+ else
+ s = s.next
+ end
+ end
+ end
+ end
+ if ligatures[2] then
+ if trace then
+ if start == stop then
+ report("otf chain",format("%s: replacing character 0x%04X by ligature 0x%04X",kind,start.char,ligatures[2]))
+ else
+ report("otf chain",format("%s: replacing character 0x%04X upto 0x%04X by ligature 0x%04X",kind,start.char,stop.char,ligatures[2]))
+ end
+ end
+ return toligature(start,stop,ligatures[2],flags[1],discfound)
+ end
+ break
+ end
+ end
+ end
+ return stop
+ end
+
+ -- weird, mkmk can have a mark2base, in idris font
+
+ function chainprocs.gpos_mark2base(start,stop,kind,lookupname,sequence,f,l,lookups,flags)
+ -- dynamic resolver
+ local markchar = start.char
+ if marks[markchar] then
+ local anchortag = sequence[f][markchar]
+ if anchortag == true then
+ local ok = false
+ local classes = otfdata.anchor_classes
+ local lookups = otfdata.luatex.internals[lookups[1]].lookups
+ for k=1,#classes do
+ local v = classes[k]
+ if v.lookup == lookups[1] then -- let's gamble for uniqueness: and v.type == kind then
+ anchortag = v.name
+ sequence[f][markchar] = anchortag
+ ok = true
+ break
+ end
+ end
+ if not ok and fonts.otf.trace_anchors then
+ report("otf chain",format("%s: no matching mark2base anchor class for 0x%04X, lookup %s",kind,markchar,lookups[1]))
+ end
+ end
+ if anchortag ~= true then
+ local component = start.prev
+ while component and component.id == glyph and component.subtype<256 and component.font == currentfont do
+ local basechar = component.char
+ if marks[basechar] then
+ component = component.prev
+ else
+ local bglyph = glyphs[characters[basechar].description.index] -- startchar
+ local baseanchors = bglyph.anchors['basechar']
+ if baseanchors then
+ local ba = baseanchors[anchortag]
+ if ba then
+ local mglyph = glyphs[characters[markchar].description.index]
+ local markanchors = mglyph.anchors['mark']
+ if markanchors then
+ local ma = markanchors[anchortag]
+ if ma then
+ local factor = tfmdata.factor
+ local dx, dy = scale(ba[1]-ma[1],factor), scale(ba[2]-ma[2],factor)
+ start.xoffset, start.yoffset = component.xoffset - dx, component.yoffset + dy
+ if fonts.otf.trace_anchors then
+ report("otf chain",format("%s: anchoring mark 0x%04X to basechar 0x%04X => (%s,%s) => (%s,%s)",
+ kind,markchar,basechar,dx,dy,start.xoffset,start.yoffset))
+ end
+ return start, true
+ end
+ end
+ end
+ end
+ break
+ end
+ end
+ end
+ end
+ return start, false
+ end
+
+ function chainprocs.gpos_mark2ligature(start,stop,kind,lookupname,sequence,f,l,lookups,flags)
+ -- dynamic resolver
+ local markchar = start.char
+ if marks[markchar] then
+ local anchortag = sequence[f][markchar]
+ if anchortag == true then
+ local classes = otfdata.anchor_classes
+ local lookups = otfdata.luatex.internals[lookups[1]].lookups
+ local ok = false
+ for k=1,#classes do
+ local v = classes[k]
+ if v.lookup == lookups[1] then -- and v.type == kind then
+ anchortag = v.name
+ sequence[f][markchar] = anchortag
+ ok = true
+ break
+ end
+ end
+ if not ok and fonts.otf.trace_anchors then
+ report("otf chain",format("%s: no matching mark2ligature anchor class for 0x%04X, lookup %s",kind,markchar,lookups[1]))
+ end
+ end
+ if anchortag ~= true then
+ local component = start.prev
+ while component and component.id == glyph and component.subtype<256 and component.font == currentfont do
+ local basechar = component.char
+ if marks[basechar] then
+ component = component.prev
+ else
+ local bglyph = glyphs[characters[basechar].description.index] -- startchar
+ local baseanchors = bglyph.anchors['baselig']
+ if baseanchors then
+ local ba = baseanchors[anchortag]
+ if ba then
+ local n = has_attribute(start,marknumber)
+ ba = ba[n] -- ok ?
+ if ba then
+ local mglyph = glyphs[characters[markchar].description.index]
+ local markanchors = mglyph.anchors['mark']
+ if markanchors then
+ local ma = markanchors[anchortag]
+ if ma then
+ local factor = tfmdata.factor
+ local dx, dy = scale(ba[1]-ma[1],factor), scale(ba[2]-ma[2],factor)
+ start.xoffset, start.yoffset = component.xoffset - dx, component.yoffset + dy
+ if fonts.otf.trace_anchors then
+ report("otf chain",format("%s: anchoring mark 0x%04X to baseligature 0x%04X => (%s,%s) => (%s,%s)",
+ kind,basechar,markchar,dx,dy,start.xoffset,start.yoffset))
+ end
+ return start, true
+ end
+ end
+ end
+ end
+ end
+ break
+ end
+ end
+ end
+ end
+ return start, false
+ end
+
+ -- to be checked
+
+ function chainprocs.gpos_mark2mark(start,stop,kind,lookupname,sequence,f,l,lookups)
+ local component = start.next
+ if component and component.id == glyph and component.subtype<256 and component.font == currentfont and marks[component.char] then
+ local markchar = start.char
+ local anchortag = sequence[f][markchar] -- [1][char]
+ if anchortag == true then
+ local classes = otfdata.anchor_classes
+ local ok = false
+ for k=1,#classes do
+ local v = classes[k]
+ if v.lookup == lookupname then -- and v.type == kind then
+ anchortag = v.name
+ sequence[f][markchar] = anchortag
+ ok = true
+ break
+ end
+ end
+ if not ok and fonts.otf.trace_anchors then
+ report("otf chain",format("%s: no matching mark2mark anchor class for 0x%04X, lookup %s",kind,markchar,lookups[1]))
+ end
+ end
+ if anchortag ~= true then
+ -- the following may have been be spoiled while idrising the other ones
+ local markattr = has_attribute(start, marknumber) or 1 -- i need to check this ! 1 is new !
+ local baseattr = has_attribute(component,marknumber) or 1 -- i need to check this ! 1 is new !
+ if baseattr == markattr then
+ local glyph = glyphs[characters[markchar].description.index]
+ if glyph.anchors and glyph.anchors[anchortag] then
+ local trace = fonts.otf.trace_anchors
+ local done = false
+ local baseanchors = glyph.anchors['basemark'][anchortag]
+ while true do
+ local basechar = component.char
+ local charnext = characters[basechar]
+ local markanchors = glyphs[charnext.description.index].anchors['mark'][anchortag]
+ if markanchors then
+ for anchor,data in pairs(markanchors) do
+ local ba = baseanchors[anchor]
+ if ba then
+ local factor = tfmdata.factor
+ local dx, dy = scale(ba[1]-ma[1],factor), scale(ba[2]-ma[2],factor)
+ start.xoffset, start.yoffset = component.xoffset - dx, component.yoffset + dy
+ if fonts.otf.trace_anchors then
+ report("otf chain",format("%s: anchoring mark 0x%04X to basemark 0x%04X => (%s,%s) => (%s,%s)",
+ kind,markchar,basechar,dx,dy,component.xoffset,component.yoffset))
+ end
+ done = true
+ break
+ end
+ end
+ end
+ component = component.next
+ if component and component.id == glyph and component.subtype<256 and component.font == currentfont and marks[component.char] then
+ markattr = has_attribute(component,marknumber)
+ if baseattr ~= markattr then
+ break
+ end
+ else
+ break
+ end
+ end
+ return start, done
+ end
+ end
+ end
+ end
+ return start, false
+ end
+
+ function chainprocs.gpos_cursive(start,stop,kind,lookupname,sequence,f,l,lookups)
+ report("otf chain","chainproc gpos_cursive not yet supported")
+ return start
+ end
+ function chainprocs.gpos_single(start,stop,kind,lookupname,sequence,f,l,lookups)
+ report("otf process","chainproc gpos_single not yet supported")
+ return start
+ end
+ function chainprocs.gpos_pair(start,stop,kind,lookupname,sequence,f,l,lookups)
+ report("otf process","chainproc gpos_pair not yet supported")
+ return start
+ end
+
+ function chainprocs.self(start,stop,kind,lookupname,sequence,f,l,lookups)
+ report("otf process","self refering lookup cannot happen")
+ return stop
+ end
+
+ local zwnj = 0x200C
+ local zwj = 0x200D
+
+ -- what pointer to return, spec says stop
+
+ function fonts.otf.features.process.contextchain(start,kind,lookupname,contextdata)
+ local contexts, flags, done = contextdata.lookups, contextdata.flags, false
+ local skipmark, skipligature, skipbase = unpack(flags) -- unpack slower than assignment
+ for k=1,#contexts do
+ local match, next, last = true, start, start
+ local rule, lookuptype, sequence, f, l, lookups = unpack(contexts[k]) -- unpack is slow
+ local s = #sequence
+ if s == 1 then
+ match = next.id == glyph and next.subtype<256 and next.font == currentfont and sequence[1][next.char]
+ else
+ -- todo: better space check (maybe check for glue)
+ local n = f
+ while n <= l do
+ if last then
+ local id = last.id
+ if id == glyph and last.subtype<256 and last.font == currentfont then
+ local char = last.char
+ local class = characters[char].description.class
+ if class == skipmark or class == skipligature or class == skipbase then
+ -- skip 'm
+ last = last.next
+ elseif sequence[n][char] then
+ if n < l then
+ last = last.next
+ end
+ n = n + 1
+ else
+ match = false break
+ end
+ elseif id == disc then -- what to do with kerns?
+ last = last.next
+ else
+ match = false break
+ end
+ else
+ match = false break
+ end
+ end
+ if match and f > 1 then
+ local prev = start.prev
+ if prev then
+ if f == 2 then
+ match = prev.id == glyph and prev.subtype<256 and prev.font == currentfont and sequence[1][prev.char]
+ else
+ local n = f-1
+ while n >= 1 do
+ if prev then
+ local id = prev.id
+ if id == glyph and prev.subtype<256 and prev.font == currentfont then -- normal char
+ local char = prev.char
+ local class = characters[char].description.class
+ if class == skipmark or class == skipligature or class == skipbase then
+ -- skip 'm
+ elseif sequence[n][char] then
+ n = n -1
+ else
+ match = false break
+ end
+ elseif id == disc then
+ -- skip 'm
+ elseif sequence[n][32] then
+ n = n -1
+ else
+ match = false break
+ end
+ prev = prev.prev
+ elseif sequence[n][32] then
+ n = n -1
+ else
+ match = false break
+ end
+ end
+ end
+ elseif f == 2 then
+ match = sequence[1][32]
+ else
+ for n=f-1,1 do
+ if not sequence[n][32] then
+ match = false break
+ end
+ end
+ end
+ end
+ if match and s > l then
+ local next = last.next
+ if next then
+ if s-l == 1 then
+ match = next.id == glyph and next.subtype<256 and next.font == currentfont and sequence[s][next.char]
+ else
+ local n = l+ 1
+ while n <= s do
+ if next then
+ local id = next.id
+ if id == glyph and next.subtype<256 and next.font == currentfont then -- normal char
+ local char = next.char
+ local class = characters[char].description.class
+ if class == skipmark or class == skipligature or class == skipbase then
+ -- skip 'm
+ elseif sequence[n][char] then
+ n = n + 1
+ else
+ match = false break
+ end
+ elseif id == disc then
+ -- skip 'm
+ elseif sequence[n][32] then -- brrr
+ n = n + 1
+ else
+ match = false break
+ end
+ next = next.next
+ elseif sequence[n][32] then
+ n = n + 1
+ else
+ match = false break
+ end
+ end
+ end
+ elseif s-l == 1 then
+ match = sequence[s][32]
+ else
+ for n=l+1,s do
+ if not sequence[n][32] then
+ match = false break
+ end
+ end
+ end
+ end
+ end
+ if match then
+ local trace = fonts.otf.trace_contexts
+ if trace then
+ local char = start.char
+ report("otf chain",format("%s: rule %s of %s matches at char 0x%04X (%s) for (%s,%s,%s) chars, lookuptype %s",kind,rule,lookupname,char,utf.char(char),f-1,l-f+1,s-l,lookuptype))
+ end
+ if lookups then
+ local cp = chainprocs[lookuptype]
+ if cp then
+ start = cp(start,last,kind,lookupname,sequence,f,l,lookups,flags)
+ else
+ report("otf chain",format("%s: lookuptype %s not supported yet for %s",kind,lookuptype,lookupname))
+ end
+ elseif trace then
+ report("otf chain",format("%s: skipping match for %s",kind,lookupname))
+ end
+ done = true
+ break
+ end
+ end
+ return start, done
+ end
+
+--~ if true then
+--~ if n < f then
+--~ texio.write_nl(string.format("%s before %s %04x %s %s %s",lookupname,n,char,class,skipmark or "?",tostring(sequence[n][char])))
+--~ elseif n > l then
+--~ texio.write_nl(string.format("%s after %s %04x %s %s %s",lookupname,n,char,class,skipmark or "?",tostring(sequence[n][char])))
+--~ else
+--~ texio.write_nl(string.format("%s current %s %04x %s %s %s",lookupname,n,char,class,skipmark or "?",tostring(sequence[n][char])))
+--~ end
+--~ end
+
+--~ elseif char == zwnj and sequence[n][32] then -- brrr
+
+ -- this needs to be fixed ! ! ! ! ! ! ! !
+
+ function fonts.otf.features.process.reversecontextchain(start,kind,lookupname,contextdata)
+ -- PROBABLY WRONG, WE NEED TO WALK BACK OVER THE LIST
+ local done = false
+ local contexts = contextdata.lookups
+ local flags = contextdata.flags
+ local skipmark, skipligature, skipbase = unpack(flags)
+ for k=1,#contexts do
+ local match, next, first, last = true, start, start, start
+ local rule, lookuptype, sequence, f, l, lookups = unpack(contexts[k]) -- unpack is slow
+ if #sequence == 1 then
+ match = next.id == glyph and next.subtype<256 and next.font == currentfont and sequence[1][next.char]
+ else
+ local n, s = #sequence, 1
+ while n > 0 do
+ if next then
+ local id = next.id
+ if id == glyph and next.subtype<256 and next.font == currentfont then -- normal char
+ local char = next.char
+ local class = characters[char].description.class
+ if class == skipmark or class == skipligature or class == skipbase then
+ -- skip
+ elseif sequence[n][char] then
+ if n == f then
+ first = next -- ok ?
+ end
+ if n == l then
+ last = next -- ok ?
+ end
+ n = n - 1
+ else
+ match = false break
+ end
+ elseif id == disc then
+ -- skip
+ elseif not sequence[n][32] then -- brrr
+ match = false break
+ end
+ next = next.next
+ elseif sequence[n][32] then
+ n = n - 1
+ else
+ match = false break
+ end
+ end
+ end
+ if match then
+ local trace = fonts.otf.trace_contexts
+ if trace then
+ local char = first.char
+ report("otf reverse chain",format("%s: rule %s of %s matches, replacing starts at char 0x%04X (%s) lookuptype %s",kind,rule,lookupname,char,utf.char(char),lookuptype))
+ end
+ if lookups then
+ local cp = chainprocs[lookuptype]
+ if cp then
+ if start == first then
+ start = cp(first,last,kind,lookupname,sequence,f,l,lookups,flags)
+ else
+ first = cp(first,last,kind,lookupname,sequence,f,l,lookups,flags)
+ end
+ else
+ report("otf reverse chain",format("%s: lookuptype %s not supported yet for %s",kind,lookuptype,lookupname))
+ end
+ elseif trace then
+ report("otf reverse chain",format("%s: skipping match for %s",kind,lookupname))
+ end
+ done = true
+ break
+ end
+ end
+ return start, done
+ end
+
+ fonts.otf.features.process.gsub_context = fonts.otf.features.process.contextchain
+ fonts.otf.features.process.gsub_contextchain = fonts.otf.features.process.contextchain
+ fonts.otf.features.process.gsub_reversecontextchain = fonts.otf.features.process.reversecontextchain
+
+ fonts.otf.features.process.gpos_contextchain = fonts.otf.features.process.contextchain
+ fonts.otf.features.process.gpos_context = fonts.otf.features.process.contextchain
+
+end
+
+do
+
+ local process = fonts.otf.features.process.feature
+
+ function fonts.methods.node.otf.aalt(head,font,attr) return process(head,font,attr,'aalt') end
+ function fonts.methods.node.otf.abvm(head,font,attr) return process(head,font,attr,'abvm') end
+ function fonts.methods.node.otf.afrc(head,font,attr) return process(head,font,attr,'afrc') end
+ function fonts.methods.node.otf.akhn(head,font,attr) return process(head,font,attr,'akhn') end
+ function fonts.methods.node.otf.blwm(head,font,attr) return process(head,font,attr,'blwm') end
+ function fonts.methods.node.otf.c2pc(head,font,attr) return process(head,font,attr,'c2pc') end
+ function fonts.methods.node.otf.c2sc(head,font,attr) return process(head,font,attr,'c2sc') end
+ function fonts.methods.node.otf.calt(head,font,attr) return process(head,font,attr,'calt') end
+ function fonts.methods.node.otf.case(head,font,attr) return process(head,font,attr,'case') end
+ function fonts.methods.node.otf.ccmp(head,font,attr) return process(head,font,attr,'ccmp') end
+ function fonts.methods.node.otf.clig(head,font,attr) return process(head,font,attr,'clig') end
+ function fonts.methods.node.otf.cpsp(head,font,attr) return process(head,font,attr,'cpsp') end
+ function fonts.methods.node.otf.cswh(head,font,attr) return process(head,font,attr,'cswh') end
+ function fonts.methods.node.otf.curs(head,font,attr) return process(head,font,attr,'curs') end
+ function fonts.methods.node.otf.dlig(head,font,attr) return process(head,font,attr,'dlig') end
+ function fonts.methods.node.otf.dnom(head,font,attr) return process(head,font,attr,'dnom') end
+ function fonts.methods.node.otf.expt(head,font,attr) return process(head,font,attr,'expt') end
+ function fonts.methods.node.otf.fin2(head,font,attr) return process(head,font,attr,'fin2') end
+ function fonts.methods.node.otf.fin3(head,font,attr) return process(head,font,attr,'fin3') end
+ function fonts.methods.node.otf.fina(head,font,attr) return process(head,font,attr,'fina',3) end
+ function fonts.methods.node.otf.frac(head,font,attr) return process(head,font,attr,'frac') end
+ function fonts.methods.node.otf.fwid(head,font,attr) return process(head,font,attr,'fwid') end
+ function fonts.methods.node.otf.haln(head,font,attr) return process(head,font,attr,'haln') end
+ function fonts.methods.node.otf.hist(head,font,attr) return process(head,font,attr,'hist') end
+ function fonts.methods.node.otf.hkna(head,font,attr) return process(head,font,attr,'hkna') end
+ function fonts.methods.node.otf.hlig(head,font,attr) return process(head,font,attr,'hlig') end
+ function fonts.methods.node.otf.hngl(head,font,attr) return process(head,font,attr,'hngl') end
+ function fonts.methods.node.otf.hwid(head,font,attr) return process(head,font,attr,'hwid') end
+ function fonts.methods.node.otf.init(head,font,attr) return process(head,font,attr,'init',1) end
+ function fonts.methods.node.otf.isol(head,font,attr) return process(head,font,attr,'isol',4) end
+ function fonts.methods.node.otf.ital(head,font,attr) return process(head,font,attr,'ital') end
+ function fonts.methods.node.otf.jp78(head,font,attr) return process(head,font,attr,'jp78') end
+ function fonts.methods.node.otf.jp83(head,font,attr) return process(head,font,attr,'jp83') end
+ function fonts.methods.node.otf.jp90(head,font,attr) return process(head,font,attr,'jp90') end
+ function fonts.methods.node.otf.kern(head,font,attr) return process(head,font,attr,'kern') end
+ function fonts.methods.node.otf.liga(head,font,attr) return process(head,font,attr,'liga') end
+ function fonts.methods.node.otf.lnum(head,font,attr) return process(head,font,attr,'lnum') end
+ function fonts.methods.node.otf.locl(head,font,attr) return process(head,font,attr,'locl') end
+ function fonts.methods.node.otf.mark(head,font,attr) return process(head,font,attr,'mark') end
+ function fonts.methods.node.otf.med2(head,font,attr) return process(head,font,attr,'med2') end
+ function fonts.methods.node.otf.medi(head,font,attr) return process(head,font,attr,'medi',2) end
+ function fonts.methods.node.otf.mgrk(head,font,attr) return process(head,font,attr,'mgrk') end
+ function fonts.methods.node.otf.mkmk(head,font,attr) return process(head,font,attr,'mkmk') end
+ function fonts.methods.node.otf.nalt(head,font,attr) return process(head,font,attr,'nalt') end
+ function fonts.methods.node.otf.nlck(head,font,attr) return process(head,font,attr,'nlck') end
+ function fonts.methods.node.otf.nukt(head,font,attr) return process(head,font,attr,'nukt') end
+ function fonts.methods.node.otf.numr(head,font,attr) return process(head,font,attr,'numr') end
+ function fonts.methods.node.otf.onum(head,font,attr) return process(head,font,attr,'onum') end
+ function fonts.methods.node.otf.ordn(head,font,attr) return process(head,font,attr,'ordn') end
+ function fonts.methods.node.otf.ornm(head,font,attr) return process(head,font,attr,'ornm') end
+ function fonts.methods.node.otf.pnum(head,font,attr) return process(head,font,attr,'pnum') end
+ function fonts.methods.node.otf.pref(head,font,attr) return process(head,font,attr,'pref') end
+ function fonts.methods.node.otf.pres(head,font,attr) return process(head,font,attr,'pres') end
+ function fonts.methods.node.otf.pstf(head,font,attr) return process(head,font,attr,'pstf') end
+ function fonts.methods.node.otf.rlig(head,font,attr) return process(head,font,attr,'rlig') end
+ function fonts.methods.node.otf.rphf(head,font,attr) return process(head,font,attr,'rphf') end
+ function fonts.methods.node.otf.salt(head,font,attr) return process(head,font,attr,'calt') end
+ function fonts.methods.node.otf.sinf(head,font,attr) return process(head,font,attr,'sinf') end
+ function fonts.methods.node.otf.smcp(head,font,attr) return process(head,font,attr,'smcp') end
+ function fonts.methods.node.otf.smpl(head,font,attr) return process(head,font,attr,'smpl') end
+ function fonts.methods.node.otf.ss01(head,font,attr) return process(head,font,attr,'ss01') end
+ function fonts.methods.node.otf.ss02(head,font,attr) return process(head,font,attr,'ss02') end
+ function fonts.methods.node.otf.ss03(head,font,attr) return process(head,font,attr,'ss03') end
+ function fonts.methods.node.otf.ss04(head,font,attr) return process(head,font,attr,'ss04') end
+ function fonts.methods.node.otf.ss05(head,font,attr) return process(head,font,attr,'ss05') end
+ function fonts.methods.node.otf.ss06(head,font,attr) return process(head,font,attr,'ss06') end
+ function fonts.methods.node.otf.ss07(head,font,attr) return process(head,font,attr,'ss07') end
+ function fonts.methods.node.otf.ss08(head,font,attr) return process(head,font,attr,'ss08') end
+ function fonts.methods.node.otf.ss09(head,font,attr) return process(head,font,attr,'ss09') end
+ function fonts.methods.node.otf.subs(head,font,attr) return process(head,font,attr,'subs') end
+ function fonts.methods.node.otf.sups(head,font,attr) return process(head,font,attr,'sups') end
+ function fonts.methods.node.otf.swsh(head,font,attr) return process(head,font,attr,'swsh') end
+ function fonts.methods.node.otf.titl(head,font,attr) return process(head,font,attr,'titl') end
+ function fonts.methods.node.otf.tnam(head,font,attr) return process(head,font,attr,'tnam') end
+ function fonts.methods.node.otf.tnum(head,font,attr) return process(head,font,attr,'tnum') end
+ function fonts.methods.node.otf.trad(head,font,attr) return process(head,font,attr,'trad') end
+ function fonts.methods.node.otf.unic(head,font,attr) return process(head,font,attr,'unic') end
+ function fonts.methods.node.otf.zero(head,font,attr) return process(head,font,attr,'zero') end
+
+end
+
+-- common stuff
+
+function fonts.otf.features.language(tfmdata,value)
+ if value then
+ value = value:lower()
+ if fonts.otf.tables.languages[value] then
+ tfmdata.language = value
+ end
+ end
+end
+
+function fonts.otf.features.script(tfmdata,value)
+ if value then
+ value = value:lower()
+ if fonts.otf.tables.scripts[value] then
+ tfmdata.script = value
+ end
+ end
+end
+
+function fonts.otf.features.mode(tfmdata,value)
+ if value then
+ tfmdata.mode = value:lower()
+ end
+end
+
+function fonts.otf.features.strategy(tfmdata,value)
+ if value then
+ tfmdata.strategy = tonumber(value) or fonts.otf.strategy
+ end
+end
+
+fonts.initializers.base.otf.language = fonts.otf.features.language
+fonts.initializers.base.otf.script = fonts.otf.features.script
+fonts.initializers.base.otf.mode = fonts.otf.features.mode
+fonts.initializers.base.otf.method = fonts.otf.features.mode
+fonts.initializers.base.otf.strategy = fonts.otf.features.strategy -- not needed
+
+fonts.initializers.node.otf.language = fonts.otf.features.language
+fonts.initializers.node.otf.script = fonts.otf.features.script
+fonts.initializers.node.otf.mode = fonts.otf.features.mode
+fonts.initializers.node.otf.method = fonts.otf.features.mode
+fonts.initializers.node.otf.strategy = fonts.otf.features.strategy
+
+do
+
+ local tlig_list = {
+ endash = "hyphen hyphen",
+ emdash = "hyphen hyphen hyphen",
+--~ quotedblleft = "quoteleft quoteleft",
+--~ quotedblright = "quoteright quoteright",
+--~ quotedblleft = "grave grave",
+--~ quotedblright = "quotesingle quotesingle",
+--~ quotedblbase = "comma comma",
+ }
+ local trep_list = {
+--~ [0x0022] = 0x201D,
+ [0x0027] = 0x2019,
+--~ [0x0060] = 0x2018,
+ }
+
+ local tlig_feature = {
+ features = { { scripts = { { script = "DFLT", langs = { "dflt" }, } }, tag = "tlig", comment = "added bij mkiv" }, },
+ name = "ctx_tlig",
+ subtables = { { name = "ctx_tlig_1" } },
+ type = "gsub_ligature",
+ flags = { },
+ always = true
+ }
+ local trep_feature = {
+ features = { { scripts = { { script = "DFLT", langs = { "dflt" }, } }, tag = "trep", comment = "added bij mkiv" }, },
+ name = "ctx_trep",
+ subtables = { { name = "ctx_trep_1" } },
+ type = "gsub_single",
+ flags = { },
+ always = true
+ }
+
+ function fonts.otf.enhance.enrich(data,filename)
+ for index, glyph in pairs(data.glyphs) do
+ local l = tlig_list[glyph.name]
+ if l then
+ local o = glyph.lookups or { }
+ o["ctx_tlig_1"] = { { "ligature", l, glyph.name } }
+ glyph.lookups = o
+ end
+ local r = trep_list[glyph.unicode]
+ if r then
+ local replacement = data.map.map[r]
+ if replacement then
+ local o = glyph.lookups or { }
+ o["ctx_trep_1"] = { { "substitution", data.glyphs[replacement].name } } ---
+ glyph.lookups = o
+ end
+ end
+ end
+ data.gsub = data.gsub or { }
+ logs.report("load otf","enhance: registering tlig feature")
+ table.insert(data.gsub,1,table.fastcopy(tlig_feature))
+ logs.report("load otf","enhance: registering trep feature")
+ table.insert(data.gsub,1,table.fastcopy(trep_feature))
+ end
+
+ local prepare = fonts.otf.features.prepare.feature
+ local process = fonts.otf.features.process.feature
+
+ fonts.otf.tables.features['tlig'] = 'TeX Ligatures'
+ fonts.otf.tables.features['trep'] = 'TeX Replacements'
+
+ function fonts.initializers.node.otf.tlig(tfm,value) return prepare(tfm,'tlig',value) end
+ function fonts.initializers.node.otf.trep(tfm,value) return prepare(tfm,'trep',value) end
+
+ function fonts.methods.node.otf.tlig(head,font,attr) return process(head,font,attr,'tlig') end
+ function fonts.methods.node.otf.trep(head,font,attr) return process(head,font,attr,'trep') end
+
+ function fonts.initializers.base.otf.tlig(tfm,value) fonts.otf.features.prepare_base_substitutions(tfm,'tlig',value) end
+ function fonts.initializers.base.otf.trep(tfm,value) fonts.otf.features.prepare_base_substitutions(tfm,'trep',value) end
+
+end
+
+-- we need this because fonts can be bugged
+
+-- \definefontfeature[calt][language=nld,script=latn,mode=node,calt=yes,clig=yes,rlig=yes]
+-- \definefontfeature[dflt][language=nld,script=latn,mode=node,calt=no, clig=yes,rlig=yes]
+-- \definefontfeature[fixd][language=nld,script=latn,mode=node,calt=no, clig=yes,rlig=yes,ignoredrules={44,45,47}]
+
+-- \starttext
+
+-- {\type{dflt:}\font\test=ZapfinoExtraLTPro*dflt at 24pt \test \char57777\char57812 c/o} \endgraf
+-- {\type{calt:}\font\test=ZapfinoExtraLTPro*calt at 24pt \test \char57777\char57812 c/o} \endgraf
+-- {\type{fixd:}\font\test=ZapfinoExtraLTPro*fixd at 24pt \test \char57777\char57812 c/o} \endgraf
+
+-- \stoptext
+
+--~ table.insert(fonts.triggers,"ignoredrules")
+
+--~ function fonts.initializers.node.otf.ignoredrules(tfmdata,value)
+--~ if value then
+--~ -- these tests must move !
+--~ tfmdata.unique = tfmdata.unique or { }
+--~ tfmdata.unique.ignoredrules = tfmdata.unique.ignoredrules or { }
+--~ local ignored = tfmdata.unique.ignoredrules
+--~ -- value is already ok now
+--~ for s in string.gmatch(value:gsub("[{}]","")..",", "%s*(.-),") do
+--~ ignored[tonumber(s)] = true
+--~ end
+--~ end
+--~ end
+
+fonts.initializers.base.otf.equaldigits = fonts.initializers.common.equaldigits
+fonts.initializers.node.otf.equaldigits = fonts.initializers.common.equaldigits
+
+fonts.initializers.base.otf.lineheight = fonts.initializers.common.lineheight
+fonts.initializers.node.otf.lineheight = fonts.initializers.common.lineheight
+
+fonts.initializers.base.otf.compose = fonts.initializers.common.compose
+fonts.initializers.node.otf.compose = fonts.initializers.common.compose
+
+-- temp hack, may change
+
+function fonts.initializers.base.otf.kern(tfmdata,value)
+ fonts.otf.features.prepare_base_kerns(tfmdata,'kern',value)
+end
+
+-- bonus function
+
+function fonts.otf.name_to_slot(name) -- todo: afm en tfm
+ local tfmdata = fonts.tfm.id[font.current()]
+ if tfmdata and tfmdata.shared then
+ local otfdata = tfmdata.shared.otfdata
+ if otfdata and otfdata.luatex then
+ return otfdata.luatex.unicodes[name]
+ end
+ end
+ return nil
+end
+
+function fonts.otf.char(n) -- todo: afm en tfm
+ if type(n) == "string" then
+ n = fonts.otf.name_to_slot(n)
+ end
+ if n then
+ tex.sprint(tex.ctxcatcodes,string.format("\\char%s ",n))
+ end
+end
+
+--~ function fonts.otf.name_to_table(name)
+--~ lcoal temp, result = { }
+--~ local tfmdata = fonts.tfm.id[font.current()]
+--~ if tfmdata and tfmdata.shared then
+--~ local otfdata = tfmdata.shared.otfdata
+--~ if otfdata and otfdata.luatex then
+--~ for k,v in pairs(otfdata.glyphs) do
+--~ if v.name:find(name) then
+--~ temp[v.name] = v.unicode
+--~ end
+--~ end
+--~ end
+--~ end
+--~ for k,v in pairs(table.sortedkeys(temp)) do
+--~ result[#result+1] = { v, temp[v] }
+--~ end
+--~ return result
+--~ end
+
+-- Here we plug in some analyzing code
+
+-- will move to font-tfm
+
+do
+
+ local glyph = node.id('glyph')
+ local glue = node.id('glue')
+ local penalty = node.id('penalty')
+
+ local fontdata = fonts.tfm.id
+ local set_attribute = node.set_attribute
+ local has_attribute = node.has_attribute
+ local state = attributes.numbers['state'] or 100
+
+ local fcs = fonts.color.set
+ local fcr = fonts.color.reset
+
+ -- in the future we will use language/script attributes instead of the
+ -- font related value, but then we also need dynamic features which is
+ -- somewhat slower; and .. we need a chain of them
+
+ local type = type
+
+ local initializers, methods = fonts.analyzers.initializers, fonts.analyzers.methods
+
+ function fonts.initializers.node.otf.analyze(tfmdata,value,attr)
+ if attr and attr > 0 then
+ script, language = a_to_script[attr], a_to_language[attr]
+ else
+ script, language = tfmdata.script, tfmdata.language
+ end
+ local action = initializers[script]
+ if action then
+ if type(action) == "function" then
+ return action(tfmdata,value)
+ else
+ local action = action[language]
+ if action then
+ return action(tfmdata,value)
+ end
+ end
+ end
+ return nil
+ end
+
+ function fonts.methods.node.otf.analyze(head,font,attr)
+ local tfmdata = fontdata[font]
+ local script, language
+ if attr and attr > 0 then
+ script, language = a_to_script[attr], a_to_language[attr]
+ else
+ script, language = tfmdata.script, tfmdata.language
+ end
+ local action = methods[script]
+ if action then
+ if type(action) == "function" then
+ return action(head,font,attr)
+ else
+ action = action[language]
+ if action then
+ return action(head,font,attr)
+ end
+ end
+ end
+ return head, false
+ end
+
+ fonts.otf.features.register("analyze",true) -- we always analyze
+ table.insert(fonts.triggers,"analyze") -- we need a proper function for doing this
+
+ -- latin
+
+ fonts.analyzers.methods.latn = fonts.analyzers.aux.setstate
+
+ -- this info eventually will go into char-def
+
+ local zwnj = 0x200C
+ local zwj = 0x200D
+
+ local isol = {
+ [0x0621] = true, [zwnj] = true,
+ }
+
+ local isol_fina = {
+ [0x0622] = true, [0x0623] = true, [0x0624] = true, [0x0625] = true, [0x0627] = true, [0x062F] = true,
+ [0x0630] = true, [0x0631] = true, [0x0632] = true,
+ [0x0648] = true,
+ [0xFEF5] = true, [0xFEF7] = true, [0xFEF9] = true, [0xFEFB] = true,
+ }
+
+ local isol_fina_medi_init = {
+ [0x0626] = true, [0x0628] = true, [0x0629] = true, [0x062A] = true, [0x062B] = true, [0x062C] = true, [0x062D] = true, [0x062E] = true,
+ [0x0633] = true, [0x0634] = true, [0x0635] = true, [0x0636] = true, [0x0637] = true, [0x0638] = true, [0x0639] = true, [0x063A] = true,
+ [0x0640] = true, -- tadwil
+ [0x0641] = true, [0x0642] = true, [0x0643] = true, [0x0644] = true, [0x0645] = true, [0x0646] = true, [0x0647] = true, [0x0649] = true, [0x064A] = true,
+ [0x067E] = true,
+ [0x0686] = true, [zwj] = true,
+ }
+
+ local arab_warned = { }
+
+ local function warning(current,what)
+ local char = current.char
+ if not arab_warned[char] then
+ log.report("analyze",string.format("arab: character %s (0x%04X) has no %s class", char, char, what))
+ arab_warned[char] = true
+ end
+ end
+
+ function fonts.analyzers.methods.nocolor(head,font,attr)
+ for n in node.traverse(head,glyph) do
+ if not font or n.font == font then
+ fcr(n)
+ end
+ end
+ return head, true
+ end
+
+ function fonts.analyzers.methods.arab(head,font,attr) -- maybe make a special version with no trace
+ local characters = fontdata[font].characters
+ local first, last, current, done = nil, nil, head, false
+ local trace = fonts.color.trace
+ --~ local laststate = 0
+ local function finish()
+ if last then
+ if first == last then
+ if isol_fina_medi_init[first.char] or isol_fina[first.char] then
+ set_attribute(first,state,4) -- isol
+ if trace then fcs(first,"font:isol") end
+ else
+ warning(first,"isol")
+ set_attribute(first,state,0) -- error
+ if trace then fcr(first) end
+ end
+ else
+ if isol_fina_medi_init[last.char] or isol_fina[last.char] then -- why isol here ?
+ -- if laststate == 1 or laststate == 2 or laststate == 4 then
+ set_attribute(last,state,3) -- fina
+ if trace then fcs(last,"font:fina") end
+ else
+ warning(last,"fina")
+ set_attribute(last,state,0) -- error
+ if trace then fcr(last) end
+ end
+ end
+ first, last = nil, nil
+ elseif first then
+ -- first and last are either both set so we never com here
+ if isol_fina_medi_init[first.char] or isol_fina[first.char] then
+ set_attribute(first,state,4) -- isol
+ if trace then fcs(first,"font:isol") end
+ else
+ warning(first,"isol")
+ set_attribute(first,state,0) -- error
+ if trace then fcr(first) end
+ end
+ first = nil
+ end
+ --~ laststate = 0
+ end
+ while current do
+ if current.id == glyph and current.subtype<256 and current.font == font then
+ done = true
+ local char = current.char
+ local chardata = characters[char] -- some day we will make a characters.marks hash
+ if not chardata then -- this is also more efficient since it's shared
+ -- troubles
+ -- elseif char == zwj then
+ -- -- can probably be ignored, we could turn it into a kern or penalty
+ -- elseif char == zwnj then
+ -- -- acts like a space, we could turn it into a kern or penalty
+ -- finish()
+ elseif chardata.description.class == "mark" then
+ set_attribute(current,state,5) -- mark
+ if trace then fcs(current,"font:mark") end
+ elseif isol[char] then
+ finish()
+ set_attribute(current,state,4) -- isol
+ if trace then fcs(current,"font:isol") end
+ first, last = nil, nil
+ --~ laststate = 0
+ elseif not first then
+ if isol_fina_medi_init[char] then
+ set_attribute(current,state,1) -- init
+ if trace then fcs(current,"font:init") end
+ first, last = first or current, current
+ --~ laststate = 1
+ elseif isol_fina[char] then
+ set_attribute(current,state,4) -- isol
+ if trace then fcs(current,"font:isol") end
+ first, last = nil, nil
+ --~ laststate = 0
+ else -- no arab
+ finish()
+ end
+ elseif isol_fina_medi_init[char] then
+ first, last = first or current, current
+ set_attribute(current,state,2) -- medi
+ if trace then fcs(current,"font:medi") end
+ --~ laststate = 2
+ elseif isol_fina[char] then
+ -- if not laststate == 1 then
+ if not has_attribute(last,state,1) then
+ -- tricky, we need to check what last may be !
+ set_attribute(last,state,2) -- medi
+ if trace then fcs(last,"font:medi") end
+ end
+ set_attribute(current,state,3) -- fina
+ if trace then fcs(current,"font:fina") end
+ first, last = nil, nil
+ --~ laststate = 0
+ elseif char >= 0x0600 and char <= 0x06FF then
+ if trace then fcs(current,"font:rest") end
+ finish()
+ else --no
+ finish()
+ end
+ else
+ finish()
+ end
+ current = current.next
+ end
+ finish()
+ return head, done
+ end
+
+ -- han (chinese) (unfinished)
+
+ -- this info eventually will go into char-def
+
+ -- in the future we will use language/script attributes instead of the
+ -- font related value, but then we also need dynamic features which is
+ -- somewhat slower; and .. we need a chain of them
+
+ local type = type
+
+ local opening_parenthesis_hw = table.tohash { -- half width
+ 0x0028,
+ 0x005B,
+ 0x007B,
+ 0x2018, -- ‘
+ 0x201C, -- “
+ }
+
+ local opening_parenthesis_fw = table.tohash { -- full width
+ 0x3008, -- 〈 Left book quote
+ 0x300A, -- 《 Left double book quote
+ 0x300C, -- 「 left quote
+ 0x300E, -- 『 left double quote
+ 0x3010, -- 〠left double book quote
+ 0x3014, -- 〔 left book quote
+ 0x3016, --〖 left double book quote
+ 0x3018, -- left tortoise bracket
+ 0x301A, -- left square bracket
+ 0x301D, -- reverse double prime qm
+ 0xFF08, -- ( left parenthesis
+ 0xFF3B, -- ï¼» left square brackets
+ 0xFF5B, -- ï½› left curve bracket
+ 0xFF62, -- left corner bracket
+ }
+
+ local closing_parenthesis_hw = table.tohash { -- half width
+ 0x0029,
+ 0x005D,
+ 0x007D,
+ 0x2019, -- ’ right quote, right
+ 0x201D, -- †right double quote
+ }
+
+ local closing_parenthesis_fw = table.tohash { -- full width
+ 0x3009, -- 〉 book quote
+ 0x300B, -- 》 double book quote
+ 0x300D, -- 〠right quote, right
+ 0x300F, -- 〠right double quote
+ 0x3011, -- 】 right double book quote
+ 0x3015, -- 〕 right book quote
+ 0x3017, -- 〗 right double book quote
+ 0x3019, -- right tortoise bracket
+ 0x301B, -- right square bracket
+ 0x301E, -- double prime qm
+ 0x301F, -- low double prime qm
+ 0xFF09, -- ) right parenthesis
+ 0xFF3D, -- ï¼½ right square brackets
+ 0xFF5D, -- ï½ right curve brackets
+ 0xFF63, -- right corner bracket
+ }
+
+ local opening_vertical = table.tohash {
+ 0xFE35, 0xFE37, 0xFE39, 0xFE3B, 0xFE3D, 0xFE3F, 0xFE41, 0xFE43, 0xFE47,
+ }
+
+ local closing_vertical = table.tohash {
+ 0xFE36, 0xFE38, 0xFE3A, 0xFE3C, 0xFE3E, 0xFE40, 0xFE42, 0xFE44, 0xFE48,
+ }
+
+ local opening_punctuation_hw = table.tohash { -- half width
+ }
+
+ local opening_punctuation_fw = table.tohash {
+ -- 0x2236, -- ∶
+ -- 0xFF0C, -- ,
+ }
+
+ local closing_punctuation_hw = table.tohash { -- half width
+ 0x0021, -- !
+ 0x002C, -- ,
+ 0x002E, -- .
+ 0x003A, -- :
+ 0x003B, -- ;
+ 0x003F, -- ?
+ 0xFF61, -- hw full stop
+ }
+
+ local closing_punctuation_fw = table.tohash { -- full width
+ 0x3001, -- ã€
+ 0x3002, -- 。
+ 0xFF01, -- ï¼
+ 0xFF0C, -- ,
+ 0xFF0E, -- .
+ 0xFF1A, -- :
+ 0xFF1B, -- ï¼›
+ 0xFF1F, -- ?
+ }
+
+ local non_starter = table.tohash { -- japanese
+ 0x3005, 0x3041, 0x3043, 0x3045, 0x3047,
+ 0x3049, 0x3063, 0x3083, 0x3085, 0x3087,
+ 0x308E, 0x3095, 0x3096, 0x309B, 0x309C,
+ 0x309D, 0x309E, 0x30A0, 0x30A1, 0x30A3,
+ 0x30A5, 0x30A7, 0x30A9, 0x30C3, 0x30E3,
+ 0x30E5, 0x30E7, 0x30EE, 0x30F5, 0x30F6,
+ 0x30FC, 0x30FD, 0x30FE, 0x31F0, 0x31F1,
+ 0x30F2, 0x30F3, 0x30F4, 0x31F5, 0x31F6,
+ 0x30F7, 0x30F8, 0x30F9, 0x31FA, 0x31FB,
+ 0x30FC, 0x30FD, 0x30FE, 0x31FF,
+ }
+
+ -- the characters below are always appear in a double form, so there
+ -- will be two Chinese ellipsis characters together that denote
+ -- ellipsis marks and it is not allowed to break between them
+
+ local hyphenation = table.tohash {
+ 0x2026, -- … ellipsis
+ 0x2014, -- — hyphen
+ }
+
+ local function is_han_character(char)
+ return
+ (char>=0x04E00 and char<=0x09FFF) or
+ (char>=0x03400 and char<=0x04DFF) or
+ (char>=0x20000 and char<=0x2A6DF) or
+ (char>=0x0F900 and char<=0x0FAFF) or
+ (char>=0x2F800 and char<=0x2FA1F)
+ end
+
+ --~ opening_parenthesis_hw / closing_parenthesis_hw
+ --~ opening_parenthesis_fw / closing_parenthesis_fw
+ --~ opening_punctuation_hw / closing_punctuation_hw
+ --~ opening_punctuation_fw / closing_punctuation_fw
+
+ --~ non_starter
+ --~ hyphenation
+
+ --~ opening_vertical / closing_vertical
+
+ fonts.analyzers.methods.stretch_hang = true
+
+ fonts.analyzers.methods.hang_data = {
+ inter_char_stretch_factor = 2.00, -- we started with 0.5, then 1.0
+ inter_char_half_factor = 0.50, -- normally there is no reason to change this
+ inter_char_half_shrink_factor = 0.25, -- normally there is no reason to change this
+ }
+
+ local hang_data = fonts.analyzers.methods.hang_data
+
+ local insert_after, insert_before, delete = node.insert_after, node.insert_before, nodes.delete
+
+ local function nobreak_before(head,current)
+ local p = current.prev
+ if p then
+ p = p.prev
+ if p and p.id == penalty then
+ p.penalty = 10000
+ return head, current
+ end
+ end
+ return insert_before(head,current,nodes.penalty(10000))
+ end
+
+ function fonts.analyzers.methods.hani(head,font,attr)
+ -- maybe make a special version with no trace
+ local characters = fontdata[font].characters
+ local current, done, stretch, prevclass = head, false, 0, 0
+ if fonts.analyzers.methods.stretch_hang then
+ stretch = fontdata[font].parameters.quad
+ end
+ -- penalty before break
+ local interspecialskip = - stretch * hang_data.inter_char_half_factor
+ local interspecialshrink = stretch * hang_data.inter_char_half_shrink_factor
+ local internormalstretch = stretch * hang_data.inter_char_stretch_factor
+ local trace = fonts.color.trace
+-- todo: check for first and last
+ while current do
+ if current.id == glyph and current.subtype<256 then
+ if current.font == font then
+ local char = current.char
+ if false then
+ -- don't ask -)
+ elseif opening_punctuation_fw[char] or opening_parenthesis_fw[char] then
+ if trace then fcs(current,"font:init") end
+if head ~= current then
+ head, _ = insert_before(head,current,nodes.glue(interspecialskip,0,interspecialshrink))
+end
+ head, current = insert_after(head,current,nodes.penalty(10000))
+ head, current = insert_after(head,current,nodes.glue(0,internormalstretch,0))
+ prevclass, done = 1, true
+ elseif closing_punctuation_fw[char] or closing_parenthesis_fw[char] then
+ if trace then fcs(current,"font:fina") end
+ if prevclass > 0 then
+ head, current = nobreak_before(head,current)
+ head, current = insert_after(head,current,nodes.penalty(10000))
+ head, current = insert_after(head,current,nodes.glue(interspecialskip,0,interspecialshrink))
+ head, current = insert_after(head,current,nodes.penalty(0))
+ head, current = insert_after(head,current,nodes.glue(0,internormalstretch,0))
+ end
+ prevclass, done = 2, true
+ elseif opening_punctuation_hw[char] or opening_parenthesis_hw[char] then
+ if trace then fcs(current,"font:init") end
+ head, current = insert_after(head,current,nodes.penalty(10000))
+ head, current = insert_after(head,current,nodes.glue(0,internormalstretch,0))
+ prevclass, done = 3, true
+ elseif closing_punctuation_hw[char] or closing_parenthesis_hw[char] then
+ if trace then fcs(current,"font:fina") end
+ if prevclass > 0 then
+ head, current = nobreak_before(head,current)
+ head, current = insert_after(head,current,nodes.penalty(0))
+ head, current = insert_after(head,current,nodes.glue(0,internormalstretch,0))
+ end
+ prevclass, done = 4, true
+ elseif hyphenation[char] then
+ if trace then fcs(current,"font:medi") end
+ if prevclass > 0 then
+ head, current = nobreak_before(head,current)
+ head, current = insert_after(head,current,nodes.penalty(0))
+ head, current = insert_after(head,current,nodes.glue(0,internormalstretch,0))
+ end
+ prevclass, done = 5, true
+ elseif non_starter[char] then
+ if trace then fcs(current,"font:isol") end
+ head, current = insert_after(head,current,nodes.penalty(10000))
+ head, current = insert_after(head,current,nodes.glue(0,internormalstretch,0))
+ prevclass, done = 6, true
+ elseif is_han_character(char) then
+ prevclass, done = 7, true
+ head, current = insert_after(head,current,nodes.penalty(0))
+ head, current = insert_after(head,current,nodes.glue(0,internormalstretch,0))
+ end
+ else
+ prevclass = 0
+ end
+ elseif prevclass > 0 and current.id == glue and current.spec and current.spec.width > 0 then
+ head, current = delete(head,current)
+ end
+ if current then
+ current = current.next
+ end
+ end
+ return head, done
+ end
+
+ fonts.analyzers.methods.hang = fonts.analyzers.methods.hani
+
+end
+
+-- experimental and will probably change
+
+do
+ local process = fonts.otf.features.process.feature
+ local prepare = fonts.otf.features.prepare.feature
+ function fonts.install_feature(type,...)
+ if fonts[type] and fonts[type].install_feature then
+ fonts[type].install_feature(...)
+ end
+ end
+ function fonts.otf.install_feature(tag)
+ fonts.methods.node.otf [tag] = function(head,font,attr) return process(head,font,attr,tag) end
+ fonts.initializers.node.otf[tag] = function(tfm,value) return prepare(tfm,tag,value) end
+ end
+end
diff --git a/Master/texmf-dist/tex/context/base/font-run.tex b/Master/texmf-dist/tex/context/base/font-run.tex
index c3fde77918a..2703600f5de 100644
--- a/Master/texmf-dist/tex/context/base/font-run.tex
+++ b/Master/texmf-dist/tex/context/base/font-run.tex
@@ -182,14 +182,15 @@
\vskip2pt
% the \noexpand before \blank is needed for non etex
\edef\ascii{name: {\noexpand\black\fontname\font}}
+ \def\do##1##2{\ifx##1\undefined\else\ifx##1\empty\else##2\fi\fi}%
\doifelse\v!unknown{#2}
{\edef\theshowfontspecs
{name: {\noexpand\black\fontname\font}}}
{\edef\theshowfontspecs
{name: {\noexpand\black\fontname\font}\noexpand\quad
- encoding: {\noexpand\black\currentencoding}\noexpand\quad
- mapping: {\noexpand\black\currentmapping }\noexpand\quad
- handling: {\noexpand\black\fonthandling}}}%
+ \do\currentencoding{encoding: {\noexpand\black\currentencoding\noexpand\quad}}%
+ \do\currentmapping {mapping: {\noexpand\black\currentmapping \noexpand\quad}}%
+ \do\fonthandling {handling: {\noexpand\black\fonthandling }}}}%
\tf % also sets em
\hbox to 40em{\blue\hfill\tinyfont\setstrut\strut\theshowfontspecs}
\egroup
diff --git a/Master/texmf-dist/tex/context/base/font-syn.lua b/Master/texmf-dist/tex/context/base/font-syn.lua
new file mode 100644
index 00000000000..d9917771626
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/font-syn.lua
@@ -0,0 +1,380 @@
+if not modules then modules = { } end modules ['font-syn'] = {
+ version = 1.001,
+ comment = "companion to font-ini.tex",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+--[[ldx--
+<p>This module implements a name to filename resolver. Names are resolved
+using a table that has keys filtered from the font related files.</p>
+--ldx]]--
+
+fonts = fonts or { }
+input = input or { }
+texmf = texmf or { }
+
+fonts.names = { }
+fonts.names.filters = { }
+fonts.names.data = { }
+fonts.names.version = 1.04
+fonts.names.saved = false
+fonts.names.loaded = false
+fonts.names.be_clever = true
+fonts.names.enabled = true
+fonts.names.autoreload = toboolean(os.env['MTX.FONTS.AUTOLOAD'] or os.env['MTX_FONTS_AUTOLOAD'] or "no")
+fonts.names.cache = containers.define("fonts","data",fonts.names.version,true)
+
+--[[ldx--
+<p>It would make sense to implement the filters in the related modules,
+but to keep the overview, we define them here.</p>
+--ldx]]--
+
+fonts.names.filters.otf = fontforge.info
+fonts.names.filters.ttf = fontforge.info
+fonts.names.filters.ttc = fontforge.info
+
+function fonts.names.filters.afm(name)
+ local f = io.open(name)
+ if f then
+ local hash = { }
+ for line in f:lines() do
+ local key, value = line:match("^(.+)%s+(.+)%s*$")
+ if key and #key > 0 then
+ hash[key:lower()] = value
+ end
+ if line:find("StartCharMetrics") then
+ break
+ end
+ end
+ f:close()
+ return hash
+ else
+ return nil
+ end
+end
+
+function fonts.names.filters.pfb(name)
+ return fontforge.info(name)
+end
+
+--[[ldx--
+<p>The scanner loops over the filters using the information stored in
+the file databases. Watch how we check not only for the names, but also
+for combination with the weight of a font.</p>
+--ldx]]--
+
+fonts.names.filters.list = {
+ "otf", "ttf", "ttc", "afm" -- pfb is quite messy, too many messages, maybe broken
+}
+
+fonts.names.filters.fixes = {
+ { "reg$", "regular", },
+ { "ita$", "italic", },
+ { "ital$", "italic", },
+ { "cond$", "condensed", },
+}
+
+fonts.names.xml_configuration_file = "fonts.conf" -- a bit weird format, bonus feature
+fonts.names.environment_path_variable = "osfontdir" -- the official way, in minimals etc
+
+function fonts.names.getpaths(instance)
+ local hash, result = { }, { }
+ local function collect(t)
+ for i=1, #t do
+ local v = input.clean_path(t[i])
+ v = v:gsub("/+$","")
+ local key = v:lower()
+ if not hash[key] then
+ hash[key], result[#result+1] = true, v
+ end
+ end
+ end
+ local path = fonts.names.environment_path_variable
+ if path and path ~= "" then
+ collect(input.expanded_path_list(instance,path))
+ end
+ local name = fonts.names.xml_configuration_file
+ if name and not name == "" then
+ local name = input.find_file(instance,name,"other")
+ if name ~= "" then
+ collect(xml.collect_texts(xml.load(name),"dir",true))
+ end
+ end
+ function fonts.names.getpaths()
+ return result
+ end
+ return result
+end
+
+function fonts.names.identify()
+ fonts.names.data = {
+ mapping = { },
+ version = fonts.names.version
+ }
+ local done, mapping, nofread, nofok = { }, fonts.names.data.mapping, 0, 0
+ local function add(n,fontname,filename,suffix, sub)
+ n = n:lower()
+ if not mapping[n] then mapping[n], nofok = { suffix, fontname, filename, sub }, nofok + 1 end
+ n = n:gsub("[^%a%d]","")
+ if not mapping[n] then mapping[n], nofok = { suffix, fontname, filename, sub }, nofok + 1 end
+ end
+ local function check(result, filename, suffix, is_sub)
+ local fontname = result.fullname
+ if fontname then
+ add(result.fullname, fontname, filename, suffix, is_sub)
+ end
+ if result.fontname then
+ fontname = fontname or result.fontname
+ add(result.fontname, fontname, filename, suffix, is_sub)
+ end
+ if result.familyname and result.weight then
+ local madename = result.familyname .. " " .. result.weight
+ fontname = fontname or madename
+ add(madename, fontname, filename, suffix, is_sub)
+ end
+ end
+ local function identify(completename,name,suffix)
+ if not done[name] and io.exists(completename) then
+ nofread = nofread + 1
+ logs.info("fontnames", "identifying " .. suffix .. " font " .. completename)
+ logs.push()
+ local result = fonts.names.filters[suffix](completename)
+ logs.pop()
+ if result then
+ if not result[1] then
+ check(result,name,suffix,false)
+ else for _, r in ipairs(result) do
+ check(r,name,suffix,true)
+ end end
+ end
+ done[name] = true
+ end
+ end
+ local function traverse(what, method)
+ for n, suffix in pairs(fonts.names.filters.list) do
+ nofread, nofok = 0, 0
+ local t = os.gettimeofday() -- use elapser
+ logs.report("fontnames", string.format("identifying %s font files with suffix %s",what,suffix))
+ method(suffix)
+ logs.report("fontnames", string.format("%s %s files identified, %s hash entries added, runtime %s seconds", nofread, what,nofok, os.gettimeofday()-t))
+ end
+ end
+ traverse("tree", function(suffix)
+ input.with_files(texmf.instance,".*%." .. suffix .. "$", function(method,root,path,name)
+ if method == "file" then
+ identify(root .."/" .. path .. "/" .. name,name,suffix)
+ end
+ end)
+ end)
+ traverse("system", function(suffix)
+ local pathlist = fonts.names.getpaths(texmf.instance) -- input.expanded_path_list(texmf.instance,"osfontdir")
+ if pathlist then
+ for _, path in ipairs(pathlist) do
+ path = input.clean_path(path .. "/")
+ path = path:gsub("/+","/")
+ local pattern = path .. "*." .. suffix
+ logs.report("fontnames", "globbing path " .. pattern)
+ local t = dir.glob(pattern)
+ for _, name in pairs(t) do -- ipairs
+ local mode = lfs.attributes(name,'mode')
+ if mode == "file" then
+ identify(name,file.basename(name),suffix)
+ end
+ end
+ end
+ end
+ end)
+ local t = { }
+ for _, f in ipairs(fonts.names.filters.fixes) do
+ local expression, replacement = f[1], f[2]
+ for k,v in pairs(mapping) do
+ local fix, pos = k:gsub(expression,replacement)
+ if pos > 0 and not mapping[fix] then
+ t[fix] = v
+ end
+ end
+ end
+ for k,v in pairs(t) do
+ mapping[k] = v
+ end
+end
+
+function fonts.names.load(reload)
+ if not fonts.names.loaded then
+ if reload then
+ if containers.is_usable(fonts.names.cache(), "names") then
+ fonts.names.identify()
+ containers.write(fonts.names.cache(), "names", fonts.names.data)
+ end
+ fonts.names.saved = true
+ else
+ fonts.names.data = containers.read(fonts.names.cache(), "names")
+ if not fonts.names.saved then
+ if table.is_empty(fonts.names.data) or table.is_empty(fonts.names.data.mapping) then
+ fonts.names.load(true)
+ end
+ fonts.names.saved = true
+ end
+ end
+ fonts.names.loaded = true
+ end
+end
+
+function fonts.names.list(pattern,reload)
+ fonts.names.load(reload)
+ if fonts.names.loaded then
+ local t = { }
+ for k,v in pairs(fonts.names.data.mapping) do
+ if k:find(pattern) then
+ t[k] = v
+ end
+ end
+ return t
+ else
+ return nil
+ end
+end
+
+--[[ldx--
+<p>The resolver also checks if the cached names are loaded. Being clever
+here is for testing purposes only (it deals with names prefixed by an
+encoding name).</p>
+--ldx]]--
+
+do
+
+ local function found(name)
+ if fonts.names.data then
+ local result, mapping = nil, fonts.names.data.mapping
+ local mn = mapping[name]
+ if mn then
+ return mn[2], mn[3], mn[4]
+ end
+ if fonts.names.be_clever then -- this will become obsolete
+ local encoding, tag = name:match("^(.-)[%-%:](.+)$")
+ local mt = mapping[tag]
+ if tag and fonts.enc.is_known(encoding) and mt then
+ return mt[1], encoding .. "-" .. mt[3], mt[4]
+ end
+ end
+ -- name, type, file
+ for k,v in pairs(mapping) do
+ if k:find(name) then
+ return v[2], v[3], v[4]
+ end
+ end
+ local condensed = name:gsub("[^%a%d]","")
+ local mc = mapping[condensed]
+ if mc then
+ return mc[2], mc[3], mc[4]
+ end
+ for k,v in pairs(mapping) do
+ if k:find(condensed) then
+ return v[2], v[3], v[4]
+ end
+ end
+ end
+ return nil, nil, nil
+ end
+
+ local reloaded = false
+
+ function fonts.names.resolve(askedname, sub)
+ if not askedname then
+ return nil, nil
+ elseif fonts.names.enabled then
+ askedname = askedname:lower()
+ fonts.names.load()
+ local name, filename, is_sub = found(askedname)
+ if not filename and not reloaded and fonts.names.autoreload then
+ fonts.names.loaded = false
+ reloaded = true
+ io.flush()
+ fonts.names.load(true)
+ name, filename, is_sub = found(askedname)
+ end
+ if is_sub then
+ return filename, name
+ else
+ return filename, sub
+ end
+ else
+ return filename, sub
+ end
+ end
+
+end
+
+--[[ldx--
+<p>A handy helper.</p>
+--ldx]]--
+
+function fonts.names.table(pattern,reload,all)
+ local t = fonts.names.list(pattern,reload)
+ if t then
+ tex.sprint(tex.ctxcatcodes,"\\start\\nonknuthmode\\starttabulate[|T|T|T|T|T|]")
+ tex.sprint(tex.ctxcatcodes,"\\NC hashname\\NC type\\NC fontname\\NC filename\\NC\\NR\\HL")
+ for k,v in pairs(table.sortedkeys(t)) do
+ if all or v == t[v][2]:lower() then
+ local type, name, file = unpack(t[v])
+ if type and name and file then
+ tex.sprint(tex.ctxcatcodes,string.format("\\NC %s\\NC %s\\NC %s\\NC %s\\NC\\NR",v,type, name, file))
+ else
+ logs.report("font table", "skipping ".. v)
+ end
+ end
+ end
+ tex.sprint(tex.ctxcatcodes,"\\stoptabulate\\stop")
+ end
+end
+
+
+--[[ldx--
+<p>Fallbacks, not permanent but a transition thing.</p>
+--ldx]]--
+
+fonts.names.new_to_old = {
+ ["lmroman10-capsregular"] = "lmromancaps10-oblique",
+ ["lmroman10-capsoblique"] = "lmromancaps10-regular",
+ ["lmroman10-demi"] = "lmromandemi10-oblique",
+ ["lmroman10-demioblique"] = "lmromandemi10-regular",
+ ["lmroman8-oblique"] = "lmromanslant8-regular",
+ ["lmroman9-oblique"] = "lmromanslant9-regular",
+ ["lmroman10-oblique"] = "lmromanslant10-regular",
+ ["lmroman12-oblique"] = "lmromanslant12-regular",
+ ["lmroman17-oblique"] = "lmromanslant17-regular",
+ ["lmroman10-boldoblique"] = "lmromanslant10-bold",
+ ["lmroman10-dunhill"] = "lmromandunh10-oblique",
+ ["lmroman10-dunhilloblique"] = "lmromandunh10-regular",
+ ["lmroman10-unslanted"] = "lmromanunsl10-regular",
+ ["lmsans10-demicondensed"] = "lmsansdemicond10-regular",
+ ["lmsans10-demicondensedoblique"] = "lmsansdemicond10-oblique",
+ ["lmsansquotation8-bold"] = "lmsansquot8-bold",
+ ["lmsansquotation8-boldoblique"] = "lmsansquot8-boldoblique",
+ ["lmsansquotation8-oblique"] = "lmsansquot8-oblique",
+ ["lmsansquotation8-regular"] = "lmsansquot8-regular",
+ ["lmtypewriter8-regular"] = "lmmono8-regular",
+ ["lmtypewriter9-regular"] = "lmmono9-regular",
+ ["lmtypewriter10-regular"] = "lmmono10-regular",
+ ["lmtypewriter12-regular"] = "lmmono12-regular",
+ ["lmtypewriter10-italic"] = "lmmono10-italic",
+ ["lmtypewriter10-oblique"] = "lmmonoslant10-regular",
+ ["lmtypewriter10-capsoblique"] = "lmmonocaps10-oblique",
+ ["lmtypewriter10-capsregular"] = "lmmonocaps10-regular",
+ ["lmtypewriter10-light"] = "lmmonolt10-regular",
+ ["lmtypewriter10-lightoblique"] = "lmmonolt10-oblique",
+ ["lmtypewriter10-lightcondensed"] = "lmmonoltcond10-regular",
+ ["lmtypewriter10-lightcondensedoblique"] = "lmmonoltcond10-oblique",
+ ["lmtypewriter10-dark"] = "lmmonolt10-bold",
+ ["lmtypewriter10-darkoblique"] = "lmmonolt10-boldoblique",
+ ["lmtypewritervarwd10-regular"] = "lmmonoproplt10-regular",
+ ["lmtypewritervarwd10-oblique"] = "lmmonoproplt10-oblique",
+ ["lmtypewritervarwd10-light"] = "lmmonoprop10-regular",
+ ["lmtypewritervarwd10-lightoblique"] = "lmmonoprop10-oblique",
+ ["lmtypewritervarwd10-dark"] = "lmmonoproplt10-bold",
+ ["lmtypewritervarwd10-darkoblique"] = "lmmonoproplt10-boldoblique",
+}
+
+fonts.names.old_to_new = table.swapped(fonts.names.new_to_old)
diff --git a/Master/texmf-dist/tex/context/base/font-tfm.lua b/Master/texmf-dist/tex/context/base/font-tfm.lua
new file mode 100644
index 00000000000..d0a838bcd50
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/font-tfm.lua
@@ -0,0 +1,721 @@
+if not modules then modules = { } end modules ['font-tfm'] = {
+ version = 1.001,
+ comment = "companion to font-ini.tex",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+--[[ldx--
+<p>Here we only implement a few helper functions.</p>
+--ldx]]--
+
+fonts = fonts or { }
+fonts.loaded = fonts.loaded or { }
+fonts.dontembed = fonts.dontembed or { }
+fonts.logger = fonts.logger or { }
+fonts.loadtime = 0
+fonts.tfm = fonts.tfm or { }
+fonts.triggers = fonts.triggers or { } -- brrr
+
+--[[ldx--
+<p>The next function encapsulates the standard <l n='tfm'/> loader as
+supplied by <l n='luatex'/>.</p>
+--ldx]]--
+
+fonts.tfm.resolve_vf = true -- false
+
+function fonts.tfm.enhance(tfmdata,specification)
+ local name, size = specification.name, specification.size
+ local encoding, filename = name:match("^(.-)%-(.*)$") -- context: encoding-name.*
+ if filename and encoding and fonts.enc.known[encoding] then
+ local data = fonts.enc.load(encoding)
+ if data then
+ local characters = tfmdata.characters
+ tfmdata.encoding = encoding
+ local vector = data.vector
+ for k, v in pairs(characters) do
+ v.name = vector[k]
+ v.index = k
+ end
+ for k,v in pairs(data.unicodes) do
+ if k ~= v then
+ -- if not characters[k] then
+ if fonts.trace then
+ logs.report("define font",string.format("mapping %s onto %s",k,v))
+ end
+ characters[k] = characters[v]
+ -- end
+ end
+ end
+ end
+ end
+end
+
+function fonts.tfm.read_from_tfm(specification)
+ local fname, tfmdata = specification.filename, nil
+ if fname then
+ -- safeguard, we use tfm as fallback
+ local suffix = file.extname(fname)
+ if suffix ~= "" and suffix ~= "tfm" then
+ fname = ""
+ end
+ end
+ if not fname or fname == "" then
+ fname = input.findbinfile(texmf.instance, specification.name, 'ofm')
+ else
+ fname = input.findbinfile(texmf.instance, fname, 'ofm')
+ end
+ if fname and fname ~= "" then
+ if fonts.trace then
+ logs.report("define font",string.format("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
+ if fonts.tfm.resolve_vf then
+ fonts.logger.save(tfmdata,file.extname(fname),specification) -- strange, why here
+ fname = input.findbinfile(texmf.instance, specification.name, 'ovf')
+ if fname and fname ~= "" then
+ local vfdata = font.read_vf(fname,specification.size) -- not cached, fast enough
+ if vfdata then
+ local chars = tfmdata.characters
+ for k,v in pairs(vfdata.characters) do -- no ipairs, can have holes
+ chars[k].commands = v.commands
+ end
+ tfmdata.type = 'virtual'
+ tfmdata.fonts = vfdata.fonts
+ end
+ end
+--~ print(table.serialize(tfmdata))
+ end
+ fonts.tfm.enhance(tfmdata,specification)
+ end
+ else
+ if fonts.trace then
+ logs.report("define font",string.format("loading tfm with name %s fails",specification.name))
+ end
+ end
+ return tfmdata
+end
+
+--[[ldx--
+<p>We need to normalize the scale factor (in scaled points). This has to
+do with the fact that <l n='tex'/> uses a negative multiple of 1000 as
+a signal for a font scaled based on the design size.</p>
+--ldx]]--
+
+do
+
+ local factors = {
+ pt = 65536.0,
+ bp = 65781.8,
+ }
+
+ function fonts.tfm.setfactor(f)
+ fonts.tfm.factor = factors[f or 'pt'] or factors.pt
+ end
+
+ fonts.tfm.setfactor()
+
+end
+
+function fonts.tfm.scaled(scaledpoints, designsize) -- handles designsize in sp as well
+ if scaledpoints < 0 then
+ if designsize then
+ if designsize > fonts.tfm.factor then -- or just 1000 / when? mp?
+ return (- scaledpoints/1000) * designsize -- sp's
+ else
+ return (- scaledpoints/1000) * designsize * fonts.tfm.factor
+ end
+ else
+ return (- scaledpoints/1000) * 10 * fonts.tfm.factor
+ end
+ else
+ return scaledpoints
+ end
+end
+
+--~ function fonts.tfm.scaled(scaledpoints, designsize)
+--~ if scaledpoints < 0 then
+--~ return (- scaledpoints/1000) * (designsize or 10) * fonts.tfm.factor
+--~ else
+--~ return scaledpoints
+--~ end
+--~ end
+
+--[[ldx--
+<p>Before a font is passed to <l n='tex'/> we scale it. Here we also need
+to scale virtual characters.</p>
+--ldx]]--
+
+function fonts.tfm.get_virtual_id(tfmdata)
+ -- since we don't know the id yet, we use 0 as signal
+ if not tfmdata.fonts then
+ tfmdata.type = "virtual"
+ tfmdata.fonts = { { id = 0 } }
+ return 1
+ else
+ tfmdata.fonts[#tfmdata.fonts+1] = { id = 0 }
+ return #tfmdata.fonts
+ end
+end
+
+function fonts.tfm.check_virtual_id(tfmdata, id)
+ if tfmdata and tfmdata.type == "virtual" then
+ if not tfmdata.fonts or #tfmdata.fonts == 0 then
+ tfmdata.type, tfmdata.fonts = "real", nil
+ else
+ for k,v in ipairs(tfmdata.fonts) do
+ if v.id and v.id == 0 then
+ v.id = id
+ end
+ end
+ end
+ end
+end
+
+--[[ldx--
+<p>Beware, the boundingbox is passed as reference so we may not overwrite it
+in the process; numbers are of course copies. Here 65536 equals 1pt. (Due to
+excessive memory usage in CJK fonts, we no longer pass the boundingbox.)</p>
+--ldx]]--
+
+fonts.trace_scaling = false
+
+function fonts.tfm.do_scale(tfmtable, scaledpoints)
+ local trace = fonts.trace_scaling
+ if scaledpoints < 0 then
+ scaledpoints = (- scaledpoints/1000) * tfmtable.designsize -- already in sp
+ end
+ local delta = scaledpoints/(tfmtable.units or 1000) -- brr, some open type fonts have 2048
+ local t = { }
+ t.factor = delta
+ for k,v in pairs(tfmtable) do
+ t[k] = (type(v) == "table" and { }) or v
+ end
+ -- new
+ if tfmtable.fonts then
+ t.fonts = table.fastcopy(tfmtable.fonts)
+ end
+ -- local zerobox = { 0, 0, 0, 0 }
+ local tp = t.parameters
+ local tfmp = tfmtable.parameters -- let's check for indexes
+ tp.slant = (tfmp.slant or tfmp[1] or 0)
+ tp.space = (tfmp.space or tfmp[2] or 0)*delta
+ tp.space_stretch = (tfmp.space_stretch or tfmp[3] or 0)*delta
+ tp.space_shrink = (tfmp.space_shrink or tfmp[4] or 0)*delta
+ tp.x_height = (tfmp.x_height or tfmp[5] or 0)*delta
+ tp.quad = (tfmp.quad or tfmp[6] or 0)*delta
+ tp.extra_space = (tfmp.extra_space or tfmp[7] or 0)*delta
+ local protrusionfactor = (tp.quad ~= 0 and 1000/tp.quad) or 0
+ local tc = t.characters
+ for k,v in pairs(tfmtable.characters) do
+ local description = v.description or v -- shared data
+ local chr = {
+ description = description,
+ unicode = description.unicode,
+ name = description.name,
+ index = description.index or k,
+ width = delta*(description.width or 0),
+ height = delta*(description.height or 0),
+ depth = delta*(description.depth or 0),
+ class = description.class
+ }
+ if trace then
+ logs.report("define font", string.format("n=%s, u=%s, i=%s, n=%s c=%s",k,description.unicode,description.index,description.name or '-',description.class or '-'))
+ end
+ -- local vb = v.boundingbox
+ -- if vb then
+ -- chr.boundingbox = { vb[1]*delta, vb[2]*delta, vb[3]*delta, vb[4]*delta }
+ -- else
+ -- -- chr.boundingbox = zerobox -- most afm en otf files have bboxes so ..
+ -- end
+ local ve = v.expansion_factor
+ if ve then
+ chr.expansion_factor = ve*1000 -- expansionfactor
+ end
+ local vl = v.left_protruding
+ if vl then
+ chr.left_protruding = protrusionfactor*chr.width*vl
+ end
+ local vr = v.right_protruding
+ if vr then
+ chr.right_protruding = protrusionfactor*chr.width*vr
+ end
+ local vi = description.italic
+ if vi then
+ chr.italic = vi*delta
+ end
+ local vk = v.kerns
+ if vk then
+ local tt = {}
+ for k,v in pairs(vk) do tt[k] = v*delta end
+ chr.kerns = tt
+ end
+ local vl = v.ligatures
+ if vl then
+ if true then
+ chr.ligatures = vl -- shared
+ else
+ local tt = { }
+ for i,l in pairs(vl) do
+ tt[i] = l
+ end
+ chr.ligatures = tt
+ end
+ end
+ local vc = v.commands
+ if vc then
+ -- we assume non scaled commands here
+ local tt = { }
+ for i=1,#vc do
+ local ivc = vc[i]
+ local key = ivc[1]
+ if key == "right" or key == "left" or key == "down" or key == "up" then
+ tt[#tt+1] = { key, ivc[2]*delta }
+ else -- not comment
+ tt[#tt+1] = ivc -- shared since in cache and untouched
+ end
+ end
+ chr.commands = tt
+ end
+ tc[k] = chr
+ end
+ -- t.encodingbytes, t.filename, t.fullname, t.name: elsewhere
+ t.size = scaledpoints
+ if t.fonts then
+ t.fonts = table.fastcopy(t.fonts) -- maybe we virtualize more afterwards
+ end
+ return t, delta
+end
+
+--[[ldx--
+<p>The reason why the scaler is split, is that for a while we experimented
+with a helper function. However, in practice the <l n='api'/> calls are too slow to
+make this profitable and the <l n='lua'/> based variant was just faster. A days
+wasted day but an experience richer.</p>
+--ldx]]--
+
+function fonts.tfm.scale(tfmtable, scaledpoints)
+ local t, factor = fonts.tfm.do_scale(tfmtable, scaledpoints)
+ t.factor = factor
+ t.ascender = factor*(tfmtable.ascender or 0)
+ t.descender = factor*(tfmtable.descender or 0)
+ t.shared = tfmtable.shared or { }
+ t.unique = table.fastcopy(tfmtable.unique or {})
+--~ print("scaling", t.name, t.factor) -- , fonts.tfm.hash_features(tfmtable.specification))
+ return t
+end
+
+--[[ldx--
+<p>The following functions are used for reporting about the fonts
+used. The message itself is not that useful in regular runs but since
+we now have several readers it may be handy to know what reader is
+used for which font.</p>
+--ldx]]--
+
+function fonts.logger.save(tfmtable,source,specification) -- save file name in spec here ! ! ! ! ! !
+ if tfmtable and specification and specification.specification then
+ if fonts.trace then
+ logs.report("define font",string.format("registering %s as %s",specification.name,source))
+ end
+ specification.source = source
+ fonts.loaded[specification.specification] = specification
+ fonts.used[specification.name] = source
+ end
+end
+
+function fonts.logger.report(separator)
+ local s = table.sortedkeys(fonts.loaded)
+ if #s > 0 then
+ local t = { }
+ for _,v in ipairs(s) do
+ t[#t+1] = v .. ":" .. fonts.loaded[v].source
+ end
+ return table.concat(t,separator or " ")
+ else
+ return "none"
+ end
+end
+
+function fonts.logger.format(name)
+ return fonts.used[name] or "unknown"
+end
+
+--[[ldx--
+<p>When we implement functions that deal with features, most of them
+will depend of the font format. Here we define the few that are kind
+of neutral.</p>
+--ldx]]--
+
+fonts.initializers = fonts.initializers or { }
+fonts.initializers.common = fonts.initializers.common or { }
+
+--[[ldx--
+<p>This feature will remove inter-digit kerns.</p>
+--ldx]]--
+
+table.insert(fonts.triggers,"equaldigits")
+
+function fonts.initializers.common.equaldigits(tfmdata,value)
+ if value then
+ local chr = tfmdata.characters
+ for i = utf.byte('0'), utf.byte('9') do
+ local c = chr[i]
+ if c then
+ c.kerns = nil
+ end
+ end
+ end
+end
+
+--[[ldx--
+<p>This feature will give all glyphs an equal height and/or depth. Valid
+values are <type>none</type>, <type>height</type>, <type>depth</type> and
+<type>both</type>.</p>
+--ldx]]--
+
+table.insert(fonts.triggers,"lineheight")
+
+function fonts.initializers.common.lineheight(tfmdata,value)
+ if value and type(value) == "string" then
+ if value == "none" then
+ for _,v in pairs(tfmdata.characters) do
+ v.height, v.depth = 0, 0
+ end
+ else
+ local ascender, descender = tfmdata.ascender, tfmdata.descender
+ if ascender and descender then
+ local ht, dp = ascender or 0, descender or 0
+ if value == "height" then
+ dp = 0
+ elseif value == "depth" then
+ ht = 0
+ end
+ if ht > 0 then
+ if dp > 0 then
+ for _,v in pairs(tfmdata.characters) do
+ v.height, v.depth = ht, dp
+ end
+ else
+ for _,v in pairs(tfmdata.characters) do
+ v.height = ht
+ end
+ end
+ elseif dp > 0 then
+ for _,v in pairs(tfmdata.characters) do
+ v.depth = dp
+ end
+ end
+ end
+ end
+ end
+end
+
+--[[ldx--
+<p>It does not make sense any more to support messed up encoding vectors
+so we stick to those that implement oldstyle and small caps. After all,
+we move on. We can extend the next function on demand. This features is
+only used with <l n='afm'/> files.</p>
+--ldx]]--
+
+do
+
+ local smallcaps = lpeg.P(".sc") + lpeg.P(".smallcaps") + lpeg.P(".caps") + lpeg.P("small")
+ local oldstyle = lpeg.P(".os") + lpeg.P(".oldstyle") + lpeg.P(".onum")
+
+ smallcaps = lpeg.Cs((1-smallcaps)^1) * smallcaps^1
+ oldstyle = lpeg.Cs((1-oldstyle )^1) * oldstyle ^1
+
+ function fonts.initializers.common.encoding(tfmdata,value)
+ if value then
+ local encodingfile = value .. '.enc'
+ local encoding = fonts.enc.load(encodingfile)
+ if encoding then
+ -- tfmdata.encoding = value
+ local vector = encoding.vector
+ local afmdata = tfmdata.shared.afmdata
+ local characters = tfmdata.characters
+ local unicodes = afmdata.luatex.unicodes
+ local function remap(pattern,name)
+ local p = pattern:match(name)
+ if p then
+ local oldchr, newchr = unicodes[p], unicodes[name]
+ if oldchr and newchr then
+ -- texio.write_nl(string.format("%s (%s) -> %s (%s)",p,oldchr or -1,name,newchr or -1))
+ characters[oldchr] = characters[newchr]
+ end
+ end
+ return p
+ end
+ for _, name in pairs(vector) do
+ local ok = remap(smallcaps,name) or remap(oldstyle,name)
+ end
+ if fonts.map.data[tfmdata.name] then
+ fonts.map.data[tfmdata.name].encoding = encodingfile
+ end
+ end
+ end
+ end
+
+ -- when needed we can provide this as features in e.g. afm files
+
+ function fonts.initializers.common.remap(tfmdata,value,pattern)
+ if value then
+ local afmdata = tfmdata.shared.afmdata
+ local characters = tfmdata.characters
+ local unicodes = afmdata.luatex.unicodes
+ local done = false
+ for i, blob in pairs(characters) do
+ local name = blob.description.name
+ if name then
+ local p = pattern:match(name)
+ if p then
+ local oldchr, newchr = unicodes[p], unicodes[name]
+ if oldchr and newchr then
+ characters[oldchr] = characters[newchr]
+ end
+ end
+ end
+ end
+ end
+ end
+
+ function fonts.initializers.common.oldstyle(tfmdata,value)
+ fonts.initializers.common.remap(tfmdata,value,oldstyle)
+ end
+ function fonts.initializers.common.smallcaps(tfmdata,value)
+ fonts.initializers.common.remap(tfmdata,value,smallcaps)
+ end
+
+ function fonts.initializers.common.fakecaps(tfmdata,value)
+ if value then
+ -- todo: scale down
+ local afmdata = tfmdata.shared.afmdata
+ local characters = tfmdata.characters
+ local unicodes = afmdata.luatex.unicodes
+ for i, blob in pairs(characters) do
+ local name = blob.description.name
+ if name then
+ local p = name:lower()
+ if p then
+ local oldchr, newchr = unicodes[p], unicodes[name]
+ if oldchr and newchr then
+ characters[oldchr] = characters[newchr]
+ end
+ end
+ end
+ end
+ end
+ end
+
+end
+
+--~ function fonts.initializers.common.install(format,feature) -- 'afm','lineheight'
+--~ fonts.initializers.base[format][feature] = fonts.initializers.common[feature]
+--~ fonts.initializers.node[format][feature] = fonts.initializers.common[feature]
+--~ end
+
+--[[ldx--
+<p>Analyzers run per script and/or language and are needed in order to
+process features right.</p>
+--ldx]]--
+
+fonts.analyzers = fonts.analyzers or { }
+fonts.analyzers.aux = fonts.analyzers.aux or { }
+fonts.analyzers.methods = fonts.analyzers.methods or { }
+fonts.analyzers.initializers = fonts.analyzers.initializers or { }
+
+do
+
+ local glyph = node.id('glyph')
+ local fontdata = fonts.tfm.id
+ local set_attribute = node.set_attribute
+-- local unset_attribute = node.unset_attribute
+-- local has_attribute = node.has_attribute
+
+ local state = attributes.numbers['state'] or 100
+
+ -- todo: analyzers per script/lang, cross font, so we need an font id hash -> script
+ -- e.g. latin -> hyphenate, arab -> 1/2/3 analyze
+
+ -- an example analyzer
+
+ function fonts.analyzers.aux.setstate(head,font)
+ local characters = fontdata[font].characters
+ local first, last, current, n, done = nil, nil, head, 0, false -- maybe make n boolean
+ while current do
+ if current.id == glyph and current.font == font then
+ local c = characters[current.char]
+ if c then
+ if c.description.class == "mark" then
+ done = true
+ set_attribute(current,state,5) -- mark
+ elseif n == 0 then
+ first, last, n = current, current, 1
+ set_attribute(current,state,1) -- init
+ else
+ last, n = current, n+1
+ set_attribute(current,state,2) -- medi
+ end
+ else -- finish
+ if first and first == last then
+ set_attribute(last,state,4) -- isol
+ elseif last then
+ set_attribute(last,state,3) -- fina
+ end
+ first, last, n = nil, nil, 0
+ end
+ else -- finish
+ if first and first == last then
+ set_attribute(last,state,4) -- isol
+ elseif last then
+ set_attribute(last,state,3) -- fina
+ end
+ first, last, n = nil, nil, 0
+ end
+ current = current.next
+ end
+ if first and first == last then
+ set_attribute(last,state,4) -- isol
+ elseif last then
+ set_attribute(last,state,3) -- fina
+ end
+ return head, done
+ end
+
+end
+
+--[[ldx--
+<p>We move marks into the components list. This saves much nasty testing later on.</p>
+--ldx]]--
+
+do
+
+ local glyph = node.id('glyph')
+ local fontdata = fonts.tfm.id
+ local marknumber = attributes.numbers['mark'] or 200
+ local set_attribute = node.set_attribute
+
+ function fonts.pushmarks(head,font)
+ local tfmdata = fontdata[font]
+ local characters = tfmdata.characters
+ local current, last, done, n = head, nil, false, 0
+ while current do
+ if current.id == glyph and current.font == font then
+ local c = characters[current.char]
+ if c and c.description.class == "mark" then
+ -- check if head
+ if last and not last.components then
+ last.components = current
+ current.prev = nil -- last.components.prev = nil
+ done = true
+ n = 1
+ else
+ n = n + 1
+ end
+ set_attribute(current,marknumber,n)
+ current = current.next
+ elseif last and last.components then
+ -- finish 'm
+ current.prev.next = nil
+ current.prev = last
+ last.next = current
+ last = current
+ last = nil
+ else
+ last = current
+ current = current.next
+ end
+ elseif last and last.components then
+ current.prev.next = nil
+ current.prev = last
+ last.next = current
+ last = nil
+ else
+ last = nil
+ current = current.next
+ end
+ end
+ if last and last.components then
+ last.next = nil
+ end
+ tfmdata.shared.markspushed = done
+ return head, done
+ end
+
+ function fonts.removemarks(head,font)
+ local current, done, characters = head, false, tfmdata.characters
+ while current do
+ if current.id == glyph and current.font == font and characters[current.char].description.class == "mark" then
+ local next, prev = current.next, current.prev
+ if next then
+ next.prev = prev
+ end
+ if prev then
+ prev.next = next
+ else
+ head = next
+ end
+ node.free(current)
+ current = next
+ done = true
+ else
+ current = current.next
+ end
+ end
+ return head, done
+ end
+
+ function fonts.popmarks(head,font)
+ local tfmdata = fontdata[font]
+ if tfmdata.shared.markspushed then
+ local current, done, characters = head, false, tfmdata.characters
+ while current do
+ if current.id == glyph and current.font == font then
+ local components = current.components
+ if components then
+ local last, next = components, current.next
+ while last.next do last = last.next end
+ if next then
+ next.prev = last
+ end
+ last.next= next
+ current.next = components
+ components.prev = current
+ current.components = nil
+ current = last.next
+ done = true
+ else
+ current = current.next
+ end
+ else
+ current = current.next
+ end
+ end
+ return head, done
+ else
+ return head, false
+ end
+ end
+
+end
+
+function fonts.tfm.replacements(tfm,value)
+--~ tfm.characters[0x0022] = table.fastcopy(tfm.characters[0x201D])
+--~ tfm.characters[0x0027] = table.fastcopy(tfm.characters[0x2019])
+--~ tfm.characters[0x0060] = table.fastcopy(tfm.characters[0x2018])
+--~ tfm.characters[0x0022] = tfm.characters[0x201D]
+ tfm.characters[0x0027] = tfm.characters[0x2019]
+--~ tfm.characters[0x0060] = tfm.characters[0x2018]
+end
+
+-- auto complete font with missing composed characters
+
+table.insert(fonts.manipulators,"compose")
+
+function fonts.initializers.common.compose(tfmdata,value)
+ if value then
+ fonts.vf.aux.compose_characters(tfmdata)
+ end
+end
diff --git a/Master/texmf-dist/tex/context/base/font-vf.lua b/Master/texmf-dist/tex/context/base/font-vf.lua
new file mode 100644
index 00000000000..9b9052b4766
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/font-vf.lua
@@ -0,0 +1,246 @@
+if not modules then modules = { } end modules ['font-vf'] = {
+ version = 1.001,
+ comment = "companion to font-ini.tex",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+--[[ldx--
+<p>This is very experimental code! Not yet adapted to recent changes. This will
+change.</p>
+--ldx]]--
+
+-- define.methods elsewhere !
+
+fonts = fonts or { }
+
+fonts.define = fonts.define or { }
+fonts.define.methods = fonts.define.methods or { }
+
+fonts.vf = fonts.vf or { }
+fonts.vf.combinations = fonts.vf.combinations or { }
+fonts.vf.aux = fonts.vf.aux or { }
+fonts.vf.aux.combine = fonts.vf.aux.combine or { }
+
+function fonts.define.methods.install(tag, rules)
+ fonts.vf.combinations[tag] = rules
+ fonts.define.methods[tag] = function(specification)
+ return fonts.vf.combine(specification,tag)
+ end
+end
+
+function fonts.vf.aux.combine.assign(g, name, from, to, start, force)
+ local f, id = fonts.vf.aux.combine.load(g,name)
+ if f and id then
+ -- optimize for whole range, then just g = f
+ if not from then from, to = 0, 0xFF00 end
+ if not to then to = from end
+ if not start then start = from end
+ local fc, gc = f.characters, g.characters
+ g.fonts[#g.fonts+1] = { id = id } -- no need to be sparse
+ local hn = #g.fonts
+ for i=from,to do
+ if fc[i] and (force or not gc[i]) then
+ gc[i] = table.fastcopy(fc[i])
+ gc[i].commands = { { 'slot', hn, start } }
+ end
+ start = start + 1
+ end
+ if not g.parameters and #g.fonts > 0 then -- share this code !
+ g.parameters = table.fastcopy(f.parameters)
+ g.italicangle = f.italicangle
+ g.ascender = f.ascender
+ g.descender = f.descender
+ end
+ end
+end
+
+function fonts.vf.aux.combine.process(g,list)
+ if list then
+ for _,v in pairs(list) do
+ (fonts.vf.aux.combine.commands[v[1]] or nop)(g,v)
+ end
+ end
+end
+
+function fonts.vf.aux.combine.load(g,name)
+ return fonts.tfm.read_and_define(name or g.specification.name,g.specification.size)
+end
+
+function fonts.vf.aux.combine.names(g,name,force)
+ local f, id = fonts.tfm.read_and_define(name,g.specification.size)
+ if f and id then
+ local fc, gc = f.characters, g.characters
+ g.fonts[#g.fonts+1] = { id = id } -- no need to be sparse
+ local hn = #g.fonts
+ for k, v in pairs(fc) do
+ if force or not gc[k] then
+ gc[k] = table.fastcopy(v)
+ gc[k].commands = { { 'slot', hn, k } }
+ end
+ end
+ if not g.parameters and #g.fonts > 0 then -- share this code !
+ g.parameters = table.fastcopy(f.parameters)
+ g.italicangle = f.italicangle
+ g.ascender = f.ascender
+ g.descender = f.descender
+ end
+ end
+end
+
+fonts.vf.aux.combine.commands = {
+ ["initialize"] = function(g,v) fonts.vf.aux.combine.assign (g,g.name) end,
+ ["include-method"] = function(g,v) fonts.vf.aux.combine.process (g,fonts.vf.combinations[v[2]]) end, -- name
+ ["copy-parameters"] = function(g,v) fonts.vf.aux.combine.parameters(g,v[2]) end, -- name
+ ["copy-range"] = function(g,v) fonts.vf.aux.combine.assign (g,v[2],v[3],v[4],v[5],true) end, -- name, from-start, from-end, to-start
+ ["copy-char"] = function(g,v) fonts.vf.aux.combine.assign (g,v[2],v[3],v[3],v[4],true) end, -- name, from, to
+ ["fallback-range"] = function(g,v) fonts.vf.aux.combine.assign (g,v[2],v[3],v[4],v[5],false) end, -- name, from-start, from-end, to-start
+ ["fallback-char"] = function(g,v) fonts.vf.aux.combine.assign (g,v[2],v[3],v[3],v[4],false) end, -- name, from, to
+ ["copy_names"] = function(g,v) fonts.vf.aux.combine.names (g,v[2],true) end,
+ ["fallback_names"] = function(g,v) fonts.vf.aux.combine.names (g,v[2],false) end,
+}
+
+function fonts.vf.combine(specification,tag)
+ local g = {
+ name = specification.name,
+ type = 'virtual',
+ fonts = { },
+ characters = { },
+ specification = table.fastcopy(specification)
+ }
+ fonts.vf.aux.combine.process(g,fonts.vf.combinations[tag])
+ return g
+end
+
+fonts.vf.aux.combine.commands["feature"] = function(g,v)
+ local key, value = v[2], v[3]
+ if key then
+ if value == nil then
+ value = true
+ end
+ if g.specification and g.specification.features.normal then
+ g.specification.features.normal[key] = value -- otf?
+ end
+ end
+end
+
+-- simple example with features
+
+fonts.define.methods.install(
+ "ligatures", {
+ { "feature", "liga" } ,
+ { "feature", "dlig" } ,
+ { "initialize" } ,
+ }
+)
+
+--~ fonts.define.methods.install (
+--~ "ligatures-x", {
+--~ { "feature", "liga" } ,
+--~ { "feature", "dlig" } ,
+--~ { "initialize" } ,
+--~ { "lineheight" }
+--~ }
+--~ )
+
+--~ fonts.define.methods.install(
+--~ "lmsymbol10", {
+--~ { "fallback_names", "lmsy10.afm" } ,
+--~ { "fallback_names", "msam10.afm" } ,
+--~ { "fallback_names", "msbm10.afm" }
+--~ }
+--~ )
+--~ \font\TestFont=dummy@lmsymbol10 at 24pt
+
+-- docu case
+
+--~ fonts.define.methods.install(
+--~ "weird", {
+--~ { "copy-range", "lmroman10-regular" } ,
+--~ { "copy-char", "lmroman10-regular", 65, 66 } ,
+--~ { "copy-range", "lmsans10-regular", 0x0100, 0x01FF } ,
+--~ { "copy-range", "lmtypewriter10-regular", 0x0200, 0xFF00 } ,
+--~ { "fallback-range", "lmtypewriter10-regular", 0x0000, 0x0200 }
+--~ }
+--~ )
+
+-- demo case -> move to module
+
+fonts.define.methods["demo-1"] = function(specification)
+ local name = specification.name -- symbolic name
+ local size = specification.size -- given size
+--~ specification.name = 'lmroman10-regular' -- forced base name
+--~ specification.features.vtf = { }
+ local f, id = fonts.tfm.read_and_define('lmroman10-regular',size)
+ if f and id then
+ local capscale, digscale = 0.85, 0.75
+ f.name, f.type = name, 'virtual'
+ f.fonts = {
+ {id=id},
+ {name='lmsans10-regular' , size=size*capscale}, -- forced extra name
+ {name='lmtypewriter10-regular', size=size*digscale} -- forced extra name
+ }
+ for k,v in pairs(f.characters) do
+ local u = v.unicode
+ if u and characters.i_is_of_category(u,'lu') then
+ v.width = capscale*v.width
+ v.commands = {
+ {'special','pdf: 1 0 0 rg'},
+ {'slot',2, k},
+ {'special','pdf: 0 g'},
+ }
+ elseif u and characters.i_is_of_category(u,'nd') then
+ v.width = digscale*v.width
+ v.commands = {
+ {'special','pdf: 0 0 1 rg'},
+ {'slot',3,k},
+ {'special','pdf: 0 g'},
+ }
+ else
+ v.commands = {
+ {'special','pdf: 0 1 0 rg'},
+ {'slot',1,k},
+ {'special','pdf: 0 g'},
+ }
+ end
+ end
+ end
+ return f
+end
+
+-- keep as example, now tfm feature
+
+--~ fonts.vf.aux.combine.commands["lineheight"] = function(g,v)
+--~ if g.ascender and g.descender then
+--~ local ht, dp = g.ascender or 0, g.descender or 0
+--~ if v[2] == "none" then
+--~ for _,v in pairs(g.characters) do
+--~ v.height = 0
+--~ v.depth = 0
+--~ end
+--~ else
+--~ if v[2] == "height" then
+--~ dp = 0
+--~ elseif v[2] == "depth" then
+--~ ht = 0
+--~ end
+--~ if ht > 0 then
+--~ if dp > 0 then
+--~ for _,v in pairs(g.characters) do
+--~ v.height = ht
+--~ v.depth = dp
+--~ end
+--~ else
+--~ for _,v in pairs(g.characters) do
+--~ v.height = ht
+--~ end
+--~ end
+--~ elseif dp > 0 then
+--~ for _,v in pairs(g.characters) do
+--~ v.depth = dp
+--~ end
+--~ end
+--~ end
+--~ end
+--~ end
diff --git a/Master/texmf-dist/tex/context/base/hand-ini.mkii b/Master/texmf-dist/tex/context/base/hand-ini.mkii
new file mode 100644
index 00000000000..1936cb21123
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/hand-ini.mkii
@@ -0,0 +1,698 @@
+%D \module
+%D [ file=hand-ini, % moved from enco-ini / pro
+%D version=2000.12.27, % 1998.12.03,
+%D title=\CONTEXT\ Handling Macros,
+%D subtitle=Initialization,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D {\em This module is experimental and implements font
+%D specific features, like hanging punctuation.}
+
+\unprotect
+
+\startmessages dutch library: handlings
+ title: handling
+ 1: font afhandeling --
+ 2: font afhandeling -- wordt geladen
+ 3: onbekende font afhandeling --
+\stopmessages
+
+\startmessages english library: handlings
+ title: handling
+ 1: font handling --
+ 2: font handling -- is loaded
+ 3: unknown font handling --
+\stopmessages
+
+\startmessages german library: handlings % to do
+ title: handling
+ 1: Font Verarbeitung --
+ 2: Font Verarbeitung -- ist geladen
+ 3: unknown font handling --
+\stopmessages
+
+\startmessages czech library: handlings % to do
+ title: handling
+ 1: font handling --
+ 2: font handling -- is loaded
+ 3: unknown font handling --
+\stopmessages
+
+\startmessages italian library: handlings % to do
+ title: handling
+ 1: font handling --
+ 2: font handling -- is loaded
+ 3: unknown font handling --
+\stopmessages
+
+\startmessages norwegian library: handlings % to do
+ title: handling
+ 1: font handling --
+ 2: font handling -- is loaded
+ 3: unknown font handling --
+\stopmessages
+
+\startmessages romanian library: handlings % to do
+ title: handling
+ 1: font handling --
+ 2: font handling -- is loaded
+ 3: unknown font handling --
+\stopmessages
+
+\startmessages french library: handlings
+ title: manipulation
+ 1: manipulation -- de police
+ 2: la manipulation -- de police est chargée
+ 3: manipulation -- inconnue de police
+\stopmessages
+
+\newif\iftracefonthandling % \tracefonthandlingtrue
+
+\newif\ifskiphandlingdef \skiphandlingdeffalse
+
+\newtoks\everyenablefonthandling
+
+% much in common with hz/protruding defs
+% todo: fix others
+
+\let\normalchar\char % also done in enco-ini
+
+\def\dosetsomehandling#1#2#3 #4 % no define since directly set
+ {\ifskiphandlingdef \else
+ \doifnumberelse{\string#2}
+ {#1{#2#3}{#4}}
+ {\doifelsenothing{#3}
+ {#1{`#2}{#4}}
+ {\let\char\empty
+ \doifnumberelse{\csname#2#3\endcsname}{#1{\csname#2#3\endcsname}{#4}}\donothing
+ \let\char\normalchar}}%
+ \fi}
+
+\def\dosetpairhandling#1#2#3 #4 #5 % no define since directly set
+ {\ifskiphandlingdef \else
+ \doifnumberelse{\string#2}
+ {#1{#2#3}{#4}{#5}}
+ {\doifelsenothing{#3}
+ {#1{`#2}{#4}{#5}}
+ {\let\char\empty
+ \doifnumberelse{\csname#2#3\endcsname}{#1{\csname#2#3\endcsname}{#4}{#5}}\donothing
+ \let\char\normalchar}}%
+ \fi}
+
+% \def\dosettriplethandling#1#2#3 #4 #5 #6 % no define since directly set
+% {\ifskiphandlingdef \else
+% \doifnumberelse{\string#2}
+% {#1{#2#3}{#4}{#5}{#6}}
+% {\doifelsenothing{#3}
+% {#1{`#2}{#4}{#5}{#6}}
+% {\let\char\empty
+% \doifnumberelse{\csname#2#3\endcsname}{#1{\csname#2#3\endcsname}{#4}{#5}{#6}}\donothing
+% \let\char\normalchar}}%
+% \fi}
+
+\def\dosetquartethandling#1#2#3 #4 #5 #6 #7 % no define since directly set
+ {\ifskiphandlingdef \else
+ \doifnumberelse{\string#2}
+ {#1{#2#3}{#4}{#5}{#6}{#7}}
+ {\doifelsenothing{#3}
+ {#1{`#2}{#4}{#5}{#6}{#7}}
+ {\let\char\empty
+ \doifnumberelse{\csname#2#3\endcsname}{#1{\csname#2#3\endcsname}{#4}{#5}{#6}{#7}}\donothing
+ \let\char\normalchar}}%
+ \fi}
+
+
+% \def\doinhsomehandling#1#2 #3 %
+% {\ifskiphandlingdef \else
+% \let\char\empty
+% \doifnumberelse{\csname#2\endcsname}{#1{\csname#2\endcsname}{`#3}}\donothing
+% \let\char\normalchar
+% \fi}
+
+\def\doinhsomehandling#1#2#3 #4 % to be checked
+ {\ifskiphandlingdef \else
+ \if#3\relax\relax
+ #1{`#2}{`#4}%
+ \else
+ \let\char\empty
+ \doifnumberelse{\csname#2#3\endcsname}{#1{\csname#2#3\endcsname}{`#4}}\donothing
+ \let\char\normalchar
+ \fi
+ \fi}
+
+% adjustspacing
+
+\newdimen\adjustdimen \let\handledfont\font
+
+\ifx\undefined\pdfadjustspacing % we don't use pdftex
+
+ \let\enableadjusting \relax
+ \let\disableadjusting \relax
+ \let\setadjusting \gobbletwoarguments
+
+ \def\defineadjustfactor #1 #2 {}
+ \def\inheritadjustfactor #1 #2 {}
+
+ \let\setfontadjusting \gobbleoneargument
+
+\else
+
+ \def\enableadjusting {\pdfadjustspacing\plustwo}
+ \def\disableadjusting {\pdfadjustspacing\zerocount}
+
+ \appendtoks \disableadjusting \to \everyforgetall % Here or not here?
+
+ \def\dododefineadjustfactor#1#2%
+ {\adjustdimen#2pt\multiply\adjustdimen\plusthousand\divide\adjustdimen\maxcard\relax
+ \efcode\handledfont#1\adjustdimen}
+
+ \beginETEX
+
+ \def\dododefineadjustfactor#1#2%
+% {\efcode\handledfont#1\dimexpr#2pt*\plusthousand/\maxcard\relax}
+ {\efcode\handledfont#1\dimexpr#2\onepoint*\plusthousand/\maxcard\relax}
+
+ \endETEX
+
+ \def\dodoinheritadjustfactor#1#2%
+ {\efcode\handledfont#1\efcode\handledfont#2\relax}
+
+ \def\defineadjustfactor#1 #2 %
+ {\setfonttoks
+ \let\inherithandling\inheritadjustfactor
+ \appendtoks\dosetsomehandling\dododefineadjustfactor#1 #2 \to\fonttoks}
+
+ \def\inheritadjustfactor#1 #2 %
+ {\setfonttoks
+ \appendtoks\doinhsomehandling\dodoinheritadjustfactor#1 #2 \to\fonttoks}
+
+ \ifnum\pdftexversion<120
+ \let\@@pdfexpandbonus\plusthousand
+ \else
+ \def\@@pdfexpandbonus{autoexpand}%
+ \fi
+
+ \def\setfontadjusting#1%
+ {\doifvalue{\@fha@\@fha@#1\c!type}\v!hz{\dosetfontadjusting{#1}}}
+
+ \def\dosetfontadjusting#1%
+ {\iftracefonthandling\showfontadjusting{#1}\fi
+ \pdffontexpand\handledfont
+ \csname\@fha@\@fha@#1\c!max \endcsname\space
+ \csname\@fha@\@fha@#1\c!min \endcsname\space
+ \csname\@fha@\@fha@#1\c!step\endcsname\space
+ \@@pdfexpandbonus\relax}
+
+ \def\showfontadjusting#1%
+ {\writestatus\m!handlings{[adjust]\space#1\space
+ \csname\@fha@\@fha@#1\c!max \endcsname/%
+ \csname\@fha@\@fha@#1\c!min \endcsname/%
+ \csname\@fha@\@fha@#1\c!step\endcsname\space
+ \fontname\handledfont}}
+\fi
+
+\ifx\setfontadjusting\gobbleoneargument \else
+ \appendtoks
+ \setfontadjusting\askedfonthandling
+ \to \everyenablefonthandling
+\fi
+
+% protruding
+
+\newif\ifembasedprotruding \embasedprotrudingfalse
+
+\newdimen\lproddimen \newdimen\rproddimen \let\handledfont\font
+
+\ifx\undefined\pdfprotrudechars % we don't use pdftex
+
+ \let\enableprotruding \relax
+ \let\disableprotruding \relax
+ \let\setprotrudingfactor \gobbleoneargument
+
+ \def\defineprotrudefactor #1 #2 #3 {}
+ \def\inheritprotrudefactor #1 #2 {}
+
+\else
+
+ \def\enableprotruding {\pdfprotrudechars\plustwo}
+ \def\disableprotruding{\pdfprotrudechars\zerocount}
+
+ \appendtoks \disableprotruding \to \everyforgetall % Here or not here?
+
+ \lproddimen1000\onepoint \divide\lproddimen\maxcard
+ \rproddimen1000\onepoint \divide\rproddimen\maxcard
+
+ \def\setprotrudingfactor#1%
+ {\doifvalue{\@fha@\@fha@#1\c!type}\v!hanging{\dosetprotrudingfactor{#1}}}
+
+ \beginTEX
+
+ \def\dosetprotrudingfactor#1% no \onepoint instead of pt
+ {\lproddimen\csname\@fha@\@fha@#1\c!left\endcsname\s!pt
+ \multiply\lproddimen\plusthousand\divide\lproddimen\maxcard\relax
+ \rproddimen\csname\@fha@\@fha@#1\c!right\endcsname\s!pt
+ \multiply\rproddimen\plusthousand\divide\rproddimen\maxcard\relax
+ \iftracefonthandling\showprotrudingfactor{#1}\fi}
+
+ \endTEX
+
+ \beginETEX \dimexpr
+
+ \def\dosetprotrudingfactor#1% no \onepoint instead of pt
+ {\lproddimen\dimexpr\csname\@fha@\@fha@#1\c!left \endcsname\onepoint*\plusthousand/\maxcard\relax
+ \rproddimen\dimexpr\csname\@fha@\@fha@#1\c!right\endcsname\onepoint*\plusthousand/\maxcard\relax
+ \iftracefonthandling\showprotrudingfactor{#1}\fi}
+
+ \endETEX
+
+ \def\showprotrudingfactor#1%
+ {\writestatus\m!handlings{[protrude]\space#1\space
+ \csname\@fha@\@fha@#1\c!left \endcsname\space
+ \csname\@fha@\@fha@#1\c!right\endcsname\space
+ \fontname\handledfont}}
+
+ \beginETEX \fontcharwd
+
+ % division before multiplication, else overflow with "sa>5"
+
+ \newdimen\protrudethreshold \protrudethreshold=36pt
+
+ % keep this
+
+ % \def\redodefineprotrudefactor#1%
+ % {\ifdim\emwidth>\protrudethreshold
+ % \divide\scratchdimen\emwidth
+ % \multiply\scratchdimen\fontcharwd\handledfont#1\relax
+ % \else
+ % \multiply\scratchdimen\fontcharwd\handledfont#1\relax
+ % \divide\scratchdimen\emwidth
+ % \fi}
+
+ % \def\dododefineprotrudefactor#1#2#3%
+ % {\scratchdimen#2\lproddimen
+ % \ifembasedprotruding \else
+ % \redodefineprotrudefactor{#1}%
+ % \fi
+ % \lpcode\handledfont#1\scratchdimen
+ % \scratchdimen#3\rproddimen
+ % \ifembasedprotruding \else
+ % \redodefineprotrudefactor{#1}%
+ % \fi
+ % \rpcode\handledfont#1\scratchdimen}
+
+ \def\dododefineprotrudefactor#1#2#3%
+ {\lpcode\handledfont#1\dimexpr#2\lproddimen
+ \ifembasedprotruding \else
+ \ifdim\emwidth>\protrudethreshold
+ /\emwidth*\fontcharwd\handledfont#1%
+ \else
+ *\fontcharwd\handledfont#1/\emwidth
+ \fi
+ \fi
+ \relax
+ \rpcode\handledfont#1\dimexpr#3\rproddimen
+ \ifembasedprotruding \else
+ \ifdim\emwidth>\protrudethreshold
+ /\emwidth*\fontcharwd\handledfont#1%
+ \else
+ *\fontcharwd\handledfont#1/\emwidth
+ \fi
+ \fi
+ \relax}
+
+ \endETEX
+
+ \beginTEX
+
+ \ifx\undefined\charbox \newbox\charbox \fi
+
+ \def\protrudethreshold{36\onepoint}
+
+ \def\redodefineprotrudefactor
+ {\ifdim\emwidth>\protrudethreshold
+ \divide\scratchdimen\emwidth
+ \multiply\scratchdimen\wd\charbox
+ \else
+ \multiply\scratchdimen\wd\charbox
+ \divide\scratchdimen\emwidth
+ \fi}
+
+ \def\dododefineprotrudefactor#1#2#3%
+ {\setbox\charbox{\handledfont\char#1}% ! yet untested !
+ \scratchdimen#2\lproddimen
+ \ifembasedprotruding \else
+ \redodefineprotrudefactor
+ \fi
+ \lpcode\handledfont#1\scratchdimen
+ \scratchdimen#3\rproddimen
+ \ifembasedprotruding \else
+ \redodefineprotrudefactor
+ \fi
+ \rpcode\handledfont#1\scratchdimen}
+
+ \endTEX
+
+ \def\dodoinheritprotrudefactor#1#2%
+ {\lpcode\handledfont#1\lpcode\handledfont#2\relax
+ \rpcode\handledfont#1\rpcode\handledfont#2\relax}
+
+ \def\defineprotrudefactor#1 #2 #3 %
+ {\setfonttoks
+ \let\inherithandling\inheritprotrudefactor
+ \appendtoks\dosetpairhandling\dododefineprotrudefactor#1 #2 #3 \to\fonttoks}
+
+ \def\inheritprotrudefactor#1 #2 %
+ {\setfonttoks
+ \appendtoks\doinhsomehandling\dodoinheritprotrudefactor#1 #2 \to\fonttoks}
+
+\fi
+
+\ifx\setprotrudingfactor\gobbleoneargument \else
+ \appendtoks
+ \setprotrudingfactor\askedfonthandling
+ \to \everyenablefonthandling
+\fi
+
+% Basic support for a new pdftex feature: space factors
+%
+% \knbccode -- kern before char code
+% \knbscode -- kern before space code
+% \stbscode -- stretch before space code
+% \shbscode -- shrink before space code
+%
+% Setting \knsbcode\font`\.=200 means that if a period sits before
+% a interword space (glue), then the interword glue will be increased
+% by an amount of 1em*200/1000, i.e. the value is given in thousandths
+% of an em. (HTT)
+
+\newdimen\spfacdimen
+
+\ifx\undefined\pdfadjustinterwordglue % we don't use pdftex
+
+ \let\enablespacehandling \relax
+ \let\disablespacehandling \relax
+ \let\enablekernhandling \relax
+ \let\disablekernhandling \relax
+
+ \let\setspacehandling \gobbleoneargument
+
+ \def\definespacefactor #1 #2 #3 #4 #5 {}
+ \def\inheritspacefactor #1 #2 {}
+
+\else
+
+ \def\enablespacehandling {\pdfadjustinterwordglue\plusone }
+ \def\disablespacehandling{\pdfadjustinterwordglue\minusone}
+ \def\enablekernhandling {\pdfprependkern \plusone }
+ \def\disablekernhandling {\pdfprependkern \minusone}
+
+ \appendtoks \disablespacehandling \to \everyforgetall % Here or not here?
+
+ \def\dosetspacehandling#1%
+ {\spfacdimen\csname\@fha@\@fha@#1\c!factor\endcsname\s!pt
+ \multiply\spfacdimen\plusthousand\divide\spfacdimen\maxcard\relax}
+
+ \def\setspacehandling#1%
+ {\doifvalue{\@fha@\@fha@#1\c!type}\v!spacing{\dosetspacehandling{#1}}}
+
+ \def\dododefinespacefactor#1#2#3#4#5%
+ {\sfcode#1\plusthousand
+ \knbccode\handledfont#1\dimexpr#2\spfacdimen\relax
+ \knbscode\handledfont#1\dimexpr#3\spfacdimen\relax
+ \stbscode\handledfont#1\dimexpr#4\spfacdimen\relax
+ \shbscode\handledfont#1\dimexpr#5\spfacdimen\relax}
+
+ \def\dodoinheritspacefactor#1#2%
+ {\sfcode#1\plusthousand
+ \knbccode\handledfont#1\knbccode\handledfont#2\relax
+ \knbscode\handledfont#1\knbscode\handledfont#2\relax
+ \stbscode\handledfont#1\stbscode\handledfont#2\relax
+ \shbscode\handledfont#1\shbscode\handledfont#2\relax}
+
+ \def\definespacefactor#1 #2 #3 #4 #5 %
+ {\setfonttoks
+ \let\inherithandling\inheritspacefactor
+ \appendtoks\dosetquartethandling\dododefinespacefactor#1 #2 #3 #4 #5 \to\fonttoks}
+
+ \def\inheritspacefactor#1 #2 %
+ {\setfonttoks
+ \appendtoks\doinhsomehandling\dodoinheritspacefactor#1 #2 \to\fonttoks}
+
+\fi
+
+\ifx\setspacehandling\gobbleoneargument \else
+ \appendtoks
+ \setspacehandling\askedfonthandling
+ \to \everyenablefonthandling
+\fi
+
+% font attributes
+
+\let\notagcode\minusone
+
+\ifx\tagcode\undefined
+
+ \def\settagcode #1 #2 {}
+
+\else
+
+ \def\dodosettagcode#1#2%
+ {\tagcode\handledfont#1 #2\relax}
+
+ \def\settagcode#1 #2 %
+ {\setfonttoks
+ \appendtoks\dosetsomehandling\dodosettagcode#1 #2 \to\fonttoks}
+
+\fi
+
+% hook into font mechanism
+
+\let\fonthandling\empty
+
+\beginTEX
+
+ \def\startfonthandling[#1]%
+ {\def\fonthandling{#1}%
+ \expandafter\ifx\csname\@fha@\fonthandling\endcsname\relax
+ \expandafter\newtoks\csname\@fha@\fonthandling\endcsname
+ \fi
+ \setfonttoks}
+
+\endTEX
+
+\beginETEX
+
+ \def\startfonthandling[#1]%
+ {\def\fonthandling{#1}%
+ \ifcsname\@fha@\fonthandling\endcsname\else
+ \expandafter\newtoks\csname\@fha@\fonthandling\endcsname
+ \fi
+ \setfonttoks}
+
+\endETEX
+
+\def\stopfonthandling
+ {\let\fonthandling\empty}
+
+\def\setfonttoks
+ {\@EA\let\@EA\fonttoks\csname\@fha@\fonthandling\endcsname}
+
+\def\definefonthandling
+ {\dotripleempty\dodefinefonthandling}
+
+\def\dodefinefonthandling[#1][#2][#3]%
+ {\ifthirdargument
+ \setvalue{\@fha@\@fha@#1}{#2}%
+ \getparameters
+ [\@fha@\@fha@#1]
+ [\c!type=\v!hanging,%
+ \c!left=1,\c!right=1,%
+ \c!min=20,\c!max=20,\c!step=5,%
+ \c!factor=1,%
+ #3]%
+ \else
+ \setvalue{\@fha@\@fha@\@fha@#1}{#2}%
+ \fi}
+
+\def\setupfonthandling
+ {\dodoubleempty\dosetupfonthandling}
+
+\def\dosetupfonthandling[#1][#2]%
+ {\getparameters[\@fha@\@fha@#1][#2]}
+
+\def\enablehandling
+ {\dodoubleempty\doenablehandling}
+
+\def\doenablehandling[#1][#2]% handling / symbolic fontname
+ {\fastenablehandling{#1}{#2}} % for the moment the same as:
+
+\beginTEX
+
+\def\fastenablehandling#1#2%
+ {\edef\askedfonthandling{#1}%
+ \edef\filoffonthandling{#2}%
+ \@EA\ifx\csname\@fha@\@fha@\@fha@\askedfonthandling\endcsname\relax
+ \@EA\ifx\csname\@fha@\@fha@\askedfonthandling\endcsname\relax
+ \@EAEAEA\nofastenablehandling
+ \else
+ \@EAEAEA\dofastenablehandling
+ \fi
+ \else
+ \@EA\redofastenablehandling
+ \fi}
+
+\def\xfastenablehandling#1%
+ {\edef\askedfonthandling{#1}%
+ \@EA\ifx\csname\@fha@\@fha@\askedfonthandling\endcsname
+ \@EA\nofastenablehandling
+ \else
+ \@EA\dofastenablehandling
+ \fi}
+
+\endTEX
+
+\beginETEX \ifcsname
+
+\def\fastenablehandling#1#2% also gets #2 passed
+ {\edef\askedfonthandling{#1}%
+ \edef\filoffonthandling{#2}%
+ \ifcsname\@fha@\@fha@\@fha@\askedfonthandling\endcsname
+ \@EA\redofastenablehandling
+ \else\ifcsname\@fha@\@fha@\askedfonthandling\endcsname
+ \@EAEAEA\dofastenablehandling
+ \else
+ \@EAEAEA\nofastenablehandling
+ \fi\fi}
+
+\def\xfastenablehandling#1%
+ {\edef\askedfonthandling{#1}%
+ \ifcsname\@fha@\@fha@\askedfonthandling\endcsname
+ \@EA\dofastenablehandling
+ \else
+ \@EA\nofastenablehandling
+ \fi}
+
+\endETEX
+
+\def\redofastenablehandling
+ {\startdirectcharacters
+ \edef\fonthandling{\csname\@fha@\@fha@\@fha@\askedfonthandling\endcsname}%
+ \rawprocesscommacommand[\fonthandling]\xfastenablehandling
+ \stopdirectcharacters}
+
+\def\dofastenablehandling
+ {\startdirectcharacters
+ \the\everyenablefonthandling
+ \edef\fonthandling{\csname\@fha@\@fha@\askedfonthandling\endcsname}%
+ \checkfonthandling\filoffonthandling
+ \rawprocesscommacommand[\fonthandling]\dodoenablehandling
+ \registerfonthandling\filoffonthandling
+ \stopdirectcharacters}
+
+\def\nofastenablehandling
+ {\the\everyenablefonthandling
+ \let\fonthandling\askedfonthandling
+ \dodoenablehandling\fonthandling}
+
+\beginTEX
+
+\def\dodoenablehandling#1%
+ {\@EA\ifx\csname\@fha@#1\endcsname\relax\else
+ \the\csname\@fha@#1\endcsname
+ \fi}
+
+\endTEX
+
+\beginETEX \ifcsname
+
+\def\dodoenablehandling#1%
+ {\ifcsname\@fha@#1\endcsname
+ \the\csname\@fha@#1\endcsname
+ \fi}
+
+\endETEX
+
+%D We must not use \type {\purefontname} here (was a bug)!
+
+% not robust as long as tex reuses definitions internally
+%
+% \def\checkfonthandling#1% we need a fast compare
+% {\doifelsevalue{#1\s!handling\c!file}{\fontname\font}
+% \skiphandlingdeftrue\skiphandlingdeffalse}
+%
+% \def\registerfonthandling#1%
+% {\@EA\xdef\csname#1\s!handling\c!file\endcsname{\fontname\font}}
+
+\def\checkfonthandling #1{\skiphandlingdeffalse}
+\let\registerfonthandling \gobbleoneargument
+
+%D This one makes live easier (less definitions):
+
+\def\inherithandling #1 #2 %
+ {\inheritprotrudefactor #1 #2 %
+ \inheritadjustfactor #1 #2 }
+
+%D \macros
+%D {usehandling}
+%D
+%D Handling definitions are collected in dedicated files and
+%D loaded only once:
+%D
+%D % \showsetup{usehandling}
+
+\def\dousehandling#1% is the same as encoding
+ {\doifundefined{\c!file\f!handlingprefix#1}%
+ {\letvalueempty{\c!file\f!handlingprefix#1}%
+ \makeshortfilename[\truefilename{\f!handlingprefix#1}]%
+ \startreadingfile
+ \readsysfile\shortfilename
+ {\showmessage\m!handlings2{#1}}
+ {\showmessage\m!handlings3{#1}}%
+ \stopreadingfile}}
+
+\def\usehandling[#1]%
+ {\processcommalist[#1]\dousehandling}
+
+%D New:
+
+\def\overloadcharacter#1 #2 %
+ {\setfonttoks
+ \doifnumberelse{\string#2}
+ {\appendtoks\dooverloadcharacter{#1}{\char#2 }\to\fonttoks}
+ {\appendtoks\dooverloadcharacter{#1}{#2}\to\fonttoks}}
+
+\def\dooverloadcharacter#1%
+ {\setvalue{\characterencoding\string#1}}
+
+%D Let's now see if this macro works:
+
+% \setupfonthandling
+% [\s!default]
+% [\c!links=1,\c!rechts=1,\c!min=20,\c!max=20,\c!stap=5]
+
+% Beware of fonttoks:
+%
+% \startfonthandling[morespacing]
+% \appendtoks
+% \fontdimen2\handledfont=.50em
+% \fontdimen3\handledfont=.25em
+% \fontdimen4\handledfont=.25em
+% \to \fonttoks
+% \stopfonthandling
+%
+% \definefonthandling [morespacing] [morespacing]
+%
+% \definefontsynonym[xtexnansi-lmr7][texnansi-lmr7][handling=morespacing]
+% \definefont[crap][texnansi-lmr7]
+%
+% \crap \the\fontdimen2\font, \the\fontdimen3\font, \the\fontdimen4\font
+
+\usehandling [def]
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/hand-ini.mkiv b/Master/texmf-dist/tex/context/base/hand-ini.mkiv
new file mode 100644
index 00000000000..527c32da7c2
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/hand-ini.mkiv
@@ -0,0 +1,50 @@
+%D \module
+%D [ file=hand-ini,
+%D version=2008.02.12,
+%D title=\CONTEXT\ Handling Macros,
+%D subtitle=Initialization,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D Handling is implemented differently in \MKIV. Maybe I'll cook up
+%D some compatibility hack.
+
+% \definefontfeature[demo][default][mode=node,expansion=quality]
+% \definefontfeature[demo][default][mode=node,protrusion=pure]
+
+\unprotect
+
+%D New stuff.
+
+\def\setupfontexpansion [#1][#2]{\ctxlua{commands.setupfontexpansion ("#1","#2")}}
+\def\setupfontprotrusion[#1][#2]{\ctxlua{commands.setupfontprotrusion("#1","#2")}}
+
+%D Old stuff.
+
+\def\fonthandlingerror{\writestatus\m!fonts{font handling is replaced by features in mkiv}}
+
+\def\enableadjusting {\pdfadjustspacing\plustwo } \let\enableexpansion \enableadjusting
+\def\disableadjusting {\pdfadjustspacing\zerocount} \let\disableexpansion\disableadjusting
+\def\enableprotruding {\pdfprotrudechars\plustwo }
+\def\disableprotruding{\pdfprotrudechars\zerocount}
+
+\appendtoks \disableadjusting \to \everyforgetall % Here or not here?
+\appendtoks \disableprotruding \to \everyforgetall % Here or not here?
+
+\def\startfonthandling #1{\fonthandlingerror\gobbleuntil\stopfonthandling} % can't happen
+\def\definefonthandling {\dotripleempty\dodefinefonthandling}
+\def\setupfonthandling {\dodoubleempty\dosetupfonthandling }
+\def\dodefinefonthandling[#1][#2][#3]{\fonthandlingerror}
+\def\dosetupfonthandling [#1][#2]{\fonthandlingerror}
+\def\usehandling [#1]{\fonthandlingerror}
+
+%D Just to be sure, maybe users use it:
+
+\let\fonthandling\empty
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/hand-ini.tex b/Master/texmf-dist/tex/context/base/hand-ini.tex
index 814e4c0e332..4d19b528475 100644
--- a/Master/texmf-dist/tex/context/base/hand-ini.tex
+++ b/Master/texmf-dist/tex/context/base/hand-ini.tex
@@ -13,673 +13,6 @@
\writestatus{loading}{Context Handling Macros (ini)}
-% \pushmacro -> dedicated fast one
+\loadmarkfile{hand-ini}
-%D {\em This module is experimental and implements font
-%D specific features, like hanging punctuation.}
-
-\unprotect
-
-\startmessages dutch library: handlings
- title: handling
- 1: font afhandeling --
- 2: font afhandeling -- wordt geladen
- 3: onbekende font afhandeling --
-\stopmessages
-
-\startmessages english library: handlings
- title: handling
- 1: font handling --
- 2: font handling -- is loaded
- 3: unknown font handling --
-\stopmessages
-
-\startmessages german library: handlings % to do
- title: handling
- 1: font handling --
- 2: font handling -- is loaded
- 3: unknown font handling --
-\stopmessages
-
-\startmessages czech library: handlings % to do
- title: handling
- 1: font handling --
- 2: font handling -- is loaded
- 3: unknown font handling --
-\stopmessages
-
-\startmessages italian library: handlings % to do
- title: handling
- 1: font handling --
- 2: font handling -- is loaded
- 3: unknown font handling --
-\stopmessages
-
-\startmessages norwegian library: handlings % to do
- title: handling
- 1: font handling --
- 2: font handling -- is loaded
- 3: unknown font handling --
-\stopmessages
-
-\startmessages romanian library: handlings % to do
- title: handling
- 1: font handling --
- 2: font handling -- is loaded
- 3: unknown font handling --
-\stopmessages
-
-\startmessages french library: handlings
- title: manipulation
- 1: manipulation -- de police
- 2: la manipulation -- de police est chargée
- 3: manipulation -- inconnue de police
-\stopmessages
-
-\newif\iftracefonthandling % \tracefonthandlingtrue
-
-\newif\ifskiphandlingdef \skiphandlingdeffalse
-
-\newtoks\everyenablefonthandling
-
-% much in common with hz/protruding defs
-% todo: fix others
-
-\let\normalchar\char % also done in enco-ini
-
-\def\dosetsomehandling#1#2#3 #4 % no define since directly set
- {\ifskiphandlingdef \else
- \doifnumberelse{\string#2}
- {#1{#2#3}{#4}}
- {\doifelsenothing{#3}
- {#1{`#2}{#4}}
- {\let\char\empty
- \doifnumberelse{\csname#2#3\endcsname}{#1{\csname#2#3\endcsname}{#4}}\donothing
- \let\char\normalchar}}%
- \fi}
-
-\def\dosetpairhandling#1#2#3 #4 #5 % no define since directly set
- {\ifskiphandlingdef \else
- \doifnumberelse{\string#2}
- {#1{#2#3}{#4}{#5}}
- {\doifelsenothing{#3}
- {#1{`#2}{#4}{#5}}
- {\let\char\empty
- \doifnumberelse{\csname#2#3\endcsname}{#1{\csname#2#3\endcsname}{#4}{#5}}\donothing
- \let\char\normalchar}}%
- \fi}
-
-% \def\dosettriplethandling#1#2#3 #4 #5 #6 % no define since directly set
-% {\ifskiphandlingdef \else
-% \doifnumberelse{\string#2}
-% {#1{#2#3}{#4}{#5}{#6}}
-% {\doifelsenothing{#3}
-% {#1{`#2}{#4}{#5}{#6}}
-% {\let\char\empty
-% \doifnumberelse{\csname#2#3\endcsname}{#1{\csname#2#3\endcsname}{#4}{#5}{#6}}\donothing
-% \let\char\normalchar}}%
-% \fi}
-
-\def\dosetquartethandling#1#2#3 #4 #5 #6 #7 % no define since directly set
- {\ifskiphandlingdef \else
- \doifnumberelse{\string#2}
- {#1{#2#3}{#4}{#5}{#6}{#7}}
- {\doifelsenothing{#3}
- {#1{`#2}{#4}{#5}{#6}{#7}}
- {\let\char\empty
- \doifnumberelse{\csname#2#3\endcsname}{#1{\csname#2#3\endcsname}{#4}{#5}{#6}{#7}}\donothing
- \let\char\normalchar}}%
- \fi}
-
-
-% \def\doinhsomehandling#1#2 #3 %
-% {\ifskiphandlingdef \else
-% \let\char\empty
-% \doifnumberelse{\csname#2\endcsname}{#1{\csname#2\endcsname}{`#3}}\donothing
-% \let\char\normalchar
-% \fi}
-
-\def\doinhsomehandling#1#2#3 #4 % to be checked
- {\ifskiphandlingdef \else
- \if#3\relax\relax
- #1{`#2}{`#4}%
- \else
- \let\char\empty
- \doifnumberelse{\csname#2#3\endcsname}{#1{\csname#2#3\endcsname}{`#4}}\donothing
- \let\char\normalchar
- \fi
- \fi}
-
-% adjustspacing
-
-\newdimen\adjustdimen \let\handledfont\font
-
-\ifx\undefined\pdfadjustspacing % we don't use pdftex
-
- \let\enableadjusting \relax
- \let\disableadjusting \relax
- \let\setadjusting \gobbletwoarguments
-
- \def\defineadjustfactor #1 #2 {}
- \def\inheritadjustfactor #1 #2 {}
-
- \let\setfontadjusting \gobbleoneargument
-
-\else
-
- \def\enableadjusting {\pdfadjustspacing\plustwo}
- \def\disableadjusting {\pdfadjustspacing\zerocount}
-
- \appendtoks \disableadjusting \to \everyforgetall % Here or not here?
-
- \def\dododefineadjustfactor#1#2%
- {\adjustdimen#2pt\multiply\adjustdimen\plusthousand\divide\adjustdimen\maxcard\relax
- \efcode\handledfont#1\adjustdimen}
-
- \beginETEX
-
- \def\dododefineadjustfactor#1#2%
-% {\efcode\handledfont#1\dimexpr#2pt*\plusthousand/\maxcard\relax}
- {\efcode\handledfont#1\dimexpr#2\onepoint*\plusthousand/\maxcard\relax}
-
- \endETEX
-
- \def\dodoinheritadjustfactor#1#2%
- {\efcode\handledfont#1\efcode\handledfont#2\relax}
-
- \def\defineadjustfactor#1 #2 %
- {\setfonttoks
- \let\inherithandling\inheritadjustfactor
- \appendtoks\dosetsomehandling\dododefineadjustfactor#1 #2 \to\fonttoks}
-
- \def\inheritadjustfactor#1 #2 %
- {\setfonttoks
- \appendtoks\doinhsomehandling\dodoinheritadjustfactor#1 #2 \to\fonttoks}
-
- \ifnum\pdftexversion<120
- \let\@@pdfexpandbonus\plusthousand
- \else
- \def\@@pdfexpandbonus{autoexpand}%
- \fi
-
- \def\setfontadjusting#1%
- {\doifvalue{\@fha@\@fha@#1\c!type}\v!hz{\dosetfontadjusting{#1}}}
-
- \def\dosetfontadjusting#1%
- {\iftracefonthandling\showfontadjusting{#1}\fi
- \pdffontexpand\handledfont
- \csname\@fha@\@fha@#1\c!max \endcsname\space
- \csname\@fha@\@fha@#1\c!min \endcsname\space
- \csname\@fha@\@fha@#1\c!step\endcsname\space
- \@@pdfexpandbonus\relax}
-
- \def\showfontadjusting#1%
- {\writestatus\m!handlings{[adjust]\space#1\space
- \csname\@fha@\@fha@#1\c!max \endcsname/%
- \csname\@fha@\@fha@#1\c!min \endcsname/%
- \csname\@fha@\@fha@#1\c!step\endcsname\space
- \fontname\handledfont}}
-\fi
-
-\ifx\setfontadjusting\gobbleoneargument \else
- \appendtoks
- \setfontadjusting\askedfonthandling
- \to \everyenablefonthandling
-\fi
-
-% protruding
-
-\newif\ifembasedprotruding \embasedprotrudingfalse
-
-\newdimen\lproddimen \newdimen\rproddimen \let\handledfont\font
-
-\ifx\undefined\pdfprotrudechars % we don't use pdftex
-
- \let\enableprotruding \relax
- \let\disableprotruding \relax
- \let\setprotrudingfactor \gobbleoneargument
-
- \def\defineprotrudefactor #1 #2 #3 {}
- \def\inheritprotrudefactor #1 #2 {}
-
-\else
-
- \def\enableprotruding {\pdfprotrudechars\plustwo}
- \def\disableprotruding{\pdfprotrudechars\zerocount}
-
- \appendtoks \disableprotruding \to \everyforgetall % Here or not here?
-
- \lproddimen1000\onepoint \divide\lproddimen\maxcard
- \rproddimen1000\onepoint \divide\rproddimen\maxcard
-
- \def\setprotrudingfactor#1%
- {\doifvalue{\@fha@\@fha@#1\c!type}\v!hanging{\dosetprotrudingfactor{#1}}}
-
- \beginTEX
-
- \def\dosetprotrudingfactor#1% no \onepoint instead of pt
- {\lproddimen\csname\@fha@\@fha@#1\c!left\endcsname\s!pt
- \multiply\lproddimen\plusthousand\divide\lproddimen\maxcard\relax
- \rproddimen\csname\@fha@\@fha@#1\c!right\endcsname\s!pt
- \multiply\rproddimen\plusthousand\divide\rproddimen\maxcard\relax
- \iftracefonthandling\showprotrudingfactor{#1}\fi}
-
- \endTEX
-
- \beginETEX \dimexpr
-
- \def\dosetprotrudingfactor#1% no \onepoint instead of pt
- {\lproddimen\dimexpr\csname\@fha@\@fha@#1\c!left \endcsname\onepoint*\plusthousand/\maxcard\relax
- \rproddimen\dimexpr\csname\@fha@\@fha@#1\c!right\endcsname\onepoint*\plusthousand/\maxcard\relax
- \iftracefonthandling\showprotrudingfactor{#1}\fi}
-
- \endETEX
-
- \def\showprotrudingfactor#1%
- {\writestatus\m!handlings{[protrude]\space#1\space
- \csname\@fha@\@fha@#1\c!left \endcsname\space
- \csname\@fha@\@fha@#1\c!right\endcsname\space
- \fontname\handledfont}}
-
- \beginETEX \fontcharwd
-
- % division before multiplication, else overflow with "sa>5"
-
- \newdimen\protrudethreshold \protrudethreshold=36pt
-
- % keep this
-
- % \def\redodefineprotrudefactor#1%
- % {\ifdim\emwidth>\protrudethreshold
- % \divide\scratchdimen\emwidth
- % \multiply\scratchdimen\fontcharwd\handledfont#1\relax
- % \else
- % \multiply\scratchdimen\fontcharwd\handledfont#1\relax
- % \divide\scratchdimen\emwidth
- % \fi}
-
- % \def\dododefineprotrudefactor#1#2#3%
- % {\scratchdimen#2\lproddimen
- % \ifembasedprotruding \else
- % \redodefineprotrudefactor{#1}%
- % \fi
- % \lpcode\handledfont#1\scratchdimen
- % \scratchdimen#3\rproddimen
- % \ifembasedprotruding \else
- % \redodefineprotrudefactor{#1}%
- % \fi
- % \rpcode\handledfont#1\scratchdimen}
-
- \def\dododefineprotrudefactor#1#2#3%
- {\lpcode\handledfont#1\dimexpr#2\lproddimen
- \ifembasedprotruding \else
- \ifdim\emwidth>\protrudethreshold
- /\emwidth*\fontcharwd\handledfont#1%
- \else
- *\fontcharwd\handledfont#1/\emwidth
- \fi
- \fi
- \relax
- \rpcode\handledfont#1\dimexpr#3\rproddimen
- \ifembasedprotruding \else
- \ifdim\emwidth>\protrudethreshold
- /\emwidth*\fontcharwd\handledfont#1%
- \else
- *\fontcharwd\handledfont#1/\emwidth
- \fi
- \fi
- \relax}
-
- \endETEX
-
- \beginTEX
-
- \ifx\undefined\charbox \newbox\charbox \fi
-
- \def\protrudethreshold{36\onepoint}
-
- \def\redodefineprotrudefactor
- {\ifdim\emwidth>\protrudethreshold
- \divide\scratchdimen\emwidth
- \multiply\scratchdimen\wd\charbox
- \else
- \multiply\scratchdimen\wd\charbox
- \divide\scratchdimen\emwidth
- \fi}
-
- \def\dododefineprotrudefactor#1#2#3%
- {\setbox\charbox{\handledfont\char#1}% ! yet untested !
- \scratchdimen#2\lproddimen
- \ifembasedprotruding \else
- \redodefineprotrudefactor
- \fi
- \lpcode\handledfont#1\scratchdimen
- \scratchdimen#3\rproddimen
- \ifembasedprotruding \else
- \redodefineprotrudefactor
- \fi
- \rpcode\handledfont#1\scratchdimen}
-
- \endTEX
-
- \def\dodoinheritprotrudefactor#1#2%
- {\lpcode\handledfont#1\lpcode\handledfont#2\relax
- \rpcode\handledfont#1\rpcode\handledfont#2\relax}
-
- \def\defineprotrudefactor#1 #2 #3 %
- {\setfonttoks
- \let\inherithandling\inheritprotrudefactor
- \appendtoks\dosetpairhandling\dododefineprotrudefactor#1 #2 #3 \to\fonttoks}
-
- \def\inheritprotrudefactor#1 #2 %
- {\setfonttoks
- \appendtoks\doinhsomehandling\dodoinheritprotrudefactor#1 #2 \to\fonttoks}
-
-\fi
-
-\ifx\setprotrudingfactor\gobbleoneargument \else
- \appendtoks
- \setprotrudingfactor\askedfonthandling
- \to \everyenablefonthandling
-\fi
-
-% Basic support for a new pdftex feature: space factors
-%
-% \knbccode -- kern before char code
-% \knbscode -- kern before space code
-% \stbscode -- stretch before space code
-% \shbscode -- shrink before space code
-%
-% Setting \knsbcode\font`\.=200 means that if a period sits before
-% a interword space (glue), then the interword glue will be increased
-% by an amount of 1em*200/1000, i.e. the value is given in thousandths
-% of an em. (HTT)
-
-\newdimen\spfacdimen
-
-\ifx\undefined\pdfadjustinterwordglue % we don't use pdftex
-
- \let\enablespacehandling \relax
- \let\disablespacehandling \relax
- \let\enablekernhandling \relax
- \let\disablekernhandling \relax
-
- \let\setspacehandling \gobbleoneargument
-
- \def\definespacefactor #1 #2 #3 #4 #5 {}
- \def\inheritspacefactor #1 #2 {}
-
-\else
-
- \def\enablespacehandling {\pdfadjustinterwordglue\plusone }
- \def\disablespacehandling{\pdfadjustinterwordglue\minusone}
- \def\enablekernhandling {\pdfprependkern \plusone }
- \def\disablekernhandling {\pdfprependkern \minusone}
-
- \appendtoks \disablespacehandling \to \everyforgetall % Here or not here?
-
- \def\dosetspacehandling#1%
- {\spfacdimen\csname\@fha@\@fha@#1\c!factor\endcsname\s!pt
- \multiply\spfacdimen\plusthousand\divide\spfacdimen\maxcard\relax}
-
- \def\setspacehandling#1%
- {\doifvalue{\@fha@\@fha@#1\c!type}\v!spacing{\dosetspacehandling{#1}}}
-
- \def\dododefinespacefactor#1#2#3#4#5%
- {\sfcode#1\plusthousand
- \knbccode\handledfont#1\dimexpr#2\spfacdimen\relax
- \knbscode\handledfont#1\dimexpr#3\spfacdimen\relax
- \stbscode\handledfont#1\dimexpr#4\spfacdimen\relax
- \shbscode\handledfont#1\dimexpr#5\spfacdimen\relax}
-
- \def\dodoinheritspacefactor#1#2%
- {\sfcode#1\plusthousand
- \knbccode\handledfont#1\knbccode\handledfont#2\relax
- \knbscode\handledfont#1\knbscode\handledfont#2\relax
- \stbscode\handledfont#1\stbscode\handledfont#2\relax
- \shbscode\handledfont#1\shbscode\handledfont#2\relax}
-
- \def\definespacefactor#1 #2 #3 #4 #5 %
- {\setfonttoks
- \let\inherithandling\inheritspacefactor
- \appendtoks\dosetquartethandling\dododefinespacefactor#1 #2 #3 #4 #5 \to\fonttoks}
-
- \def\inheritspacefactor#1 #2 %
- {\setfonttoks
- \appendtoks\doinhsomehandling\dodoinheritspacefactor#1 #2 \to\fonttoks}
-
-\fi
-
-\ifx\setspacehandling\gobbleoneargument \else
- \appendtoks
- \setspacehandling\askedfonthandling
- \to \everyenablefonthandling
-\fi
-
-% font attributes
-
-\let\notagcode\minusone
-
-\ifx\tagcode\undefined
-
- \def\settagcode #1 #2 {}
-
-\else
-
- \def\dodosettagcode#1#2%
- {\tagcode\handledfont#1 #2\relax}
-
- \def\settagcode#1 #2 %
- {\setfonttoks
- \appendtoks\dosetsomehandling\dodosettagcode#1 #2 \to\fonttoks}
-
-\fi
-
-% hook into font mechanism
-
-\let\fonthandling\empty
-
-\beginTEX
-
- \def\startfonthandling[#1]%
- {\def\fonthandling{#1}%
- \expandafter\ifx\csname\@fha@\fonthandling\endcsname\relax
- \expandafter\newtoks\csname\@fha@\fonthandling\endcsname
- \fi
- \setfonttoks}
-
-\endTEX
-
-\beginETEX
-
- \def\startfonthandling[#1]%
- {\def\fonthandling{#1}%
- \ifcsname\@fha@\fonthandling\endcsname\else
- \expandafter\newtoks\csname\@fha@\fonthandling\endcsname
- \fi
- \setfonttoks}
-
-\endETEX
-
-\def\stopfonthandling
- {\let\fonthandling\empty}
-
-\def\setfonttoks
- {\@EA\let\@EA\fonttoks\csname\@fha@\fonthandling\endcsname}
-
-\def\definefonthandling
- {\dotripleempty\dodefinefonthandling}
-
-\def\dodefinefonthandling[#1][#2][#3]%
- {\ifthirdargument
- \setvalue{\@fha@\@fha@#1}{#2}%
- \getparameters
- [\@fha@\@fha@#1]
- [\c!type=\v!hanging,%
- \c!left=1,\c!right=1,%
- \c!min=20,\c!max=20,\c!step=5,%
- \c!factor=1,%
- #3]%
- \else
- \setvalue{\@fha@\@fha@\@fha@#1}{#2}%
- \fi}
-
-\def\setupfonthandling
- {\dodoubleempty\dosetupfonthandling}
-
-\def\dosetupfonthandling[#1][#2]%
- {\getparameters[\@fha@\@fha@#1][#2]}
-
-\def\enablehandling
- {\dodoubleempty\doenablehandling}
-
-\def\doenablehandling[#1][#2]% handling / symbolic fontname
- {\fastenablehandling{#1}{#2}} % for the moment the same as:
-
-\beginTEX
-
-\def\fastenablehandling#1#2%
- {\edef\askedfonthandling{#1}%
- \edef\filoffonthandling{#2}%
- \@EA\ifx\csname\@fha@\@fha@\@fha@\askedfonthandling\endcsname\relax
- \@EA\ifx\csname\@fha@\@fha@\askedfonthandling\endcsname\relax
- \@EAEAEA\nofastenablehandling
- \else
- \@EAEAEA\dofastenablehandling
- \fi
- \else
- \@EA\redofastenablehandling
- \fi}
-
-\def\xfastenablehandling#1%
- {\edef\askedfonthandling{#1}%
- \@EA\ifx\csname\@fha@\@fha@\askedfonthandling\endcsname
- \@EA\nofastenablehandling
- \else
- \@EA\dofastenablehandling
- \fi}
-
-\endTEX
-
-\beginETEX \ifcsname
-
-\def\fastenablehandling#1#2% also gets #2 passed
- {\edef\askedfonthandling{#1}%
- \edef\filoffonthandling{#2}%
- \ifcsname\@fha@\@fha@\@fha@\askedfonthandling\endcsname
- \@EA\redofastenablehandling
- \else\ifcsname\@fha@\@fha@\askedfonthandling\endcsname
- \@EAEAEA\dofastenablehandling
- \else
- \@EAEAEA\nofastenablehandling
- \fi\fi}
-
-\def\xfastenablehandling#1%
- {\edef\askedfonthandling{#1}%
- \ifcsname\@fha@\@fha@\askedfonthandling\endcsname
- \@EA\dofastenablehandling
- \else
- \@EA\nofastenablehandling
- \fi}
-
-\endETEX
-
-\def\redofastenablehandling
- {\startdirectcharacters
- \edef\fonthandling{\csname\@fha@\@fha@\@fha@\askedfonthandling\endcsname}%
- \rawprocesscommacommand[\fonthandling]\xfastenablehandling
- \stopdirectcharacters}
-
-\def\dofastenablehandling
- {\startdirectcharacters
- \the\everyenablefonthandling
- \edef\fonthandling{\csname\@fha@\@fha@\askedfonthandling\endcsname}%
- \checkfonthandling\filoffonthandling
- \rawprocesscommacommand[\fonthandling]\dodoenablehandling
- \registerfonthandling\filoffonthandling
- \stopdirectcharacters}
-
-\def\nofastenablehandling
- {\the\everyenablefonthandling
- \let\fonthandling\askedfonthandling
- \dodoenablehandling\fonthandling}
-
-\beginTEX
-
-\def\dodoenablehandling#1%
- {\@EA\ifx\csname\@fha@#1\endcsname\relax\else
- \the\csname\@fha@#1\endcsname
- \fi}
-
-\endTEX
-
-\beginETEX \ifcsname
-
-\def\dodoenablehandling#1%
- {\ifcsname\@fha@#1\endcsname
- \the\csname\@fha@#1\endcsname
- \fi}
-
-\endETEX
-
-%D We must not use \type {\purefontname} here (was a bug)!
-
-% not robust as long as tex reuses definitions internally
-%
-% \def\checkfonthandling#1% we need a fast compare
-% {\doifelsevalue{#1\s!handling\c!file}{\fontname\font}
-% \skiphandlingdeftrue\skiphandlingdeffalse}
-%
-% \def\registerfonthandling#1%
-% {\@EA\xdef\csname#1\s!handling\c!file\endcsname{\fontname\font}}
-
-\def\checkfonthandling #1{\skiphandlingdeffalse}
-\let\registerfonthandling \gobbleoneargument
-
-%D This one makes live easier (less definitions):
-
-\def\inherithandling #1 #2 %
- {\inheritprotrudefactor #1 #2 %
- \inheritadjustfactor #1 #2 }
-
-%D \macros
-%D {usehandling}
-%D
-%D Handling definitions are collected in dedicated files and
-%D loaded only once:
-%D
-%D % \showsetup{usehandling}
-
-\def\dousehandling#1% is the same as encoding
- {\doifundefined{\c!file\f!handlingprefix#1}%
- {\letvalueempty{\c!file\f!handlingprefix#1}%
- \makeshortfilename[\truefilename{\f!handlingprefix#1}]%
- \startreadingfile
- \readsysfile\shortfilename
- {\showmessage\m!handlings2{#1}}
- {\showmessage\m!handlings3{#1}}%
- \stopreadingfile}}
-
-\def\usehandling[#1]%
- {\processcommalist[#1]\dousehandling}
-
-%D New:
-
-\def\overloadcharacter#1 #2 %
- {\setfonttoks
- \doifnumberelse{\string#2}
- {\appendtoks\dooverloadcharacter{#1}{\char#2 }\to\fonttoks}
- {\appendtoks\dooverloadcharacter{#1}{#2}\to\fonttoks}}
-
-\def\dooverloadcharacter#1%
- {\setvalue{\characterencoding\string#1}}
-
-%D Let's now see if this macro works:
-
-% \setupfonthandling
-% [\s!default]
-% [\c!links=1,\c!rechts=1,\c!min=20,\c!max=20,\c!stap=5]
-
-\usehandling [def]
-
-\protect \endinput
+\endinput
diff --git a/Master/texmf-dist/tex/context/base/java-ini.tex b/Master/texmf-dist/tex/context/base/java-ini.tex
index d9fe3c9022a..30f6a839490 100644
--- a/Master/texmf-dist/tex/context/base/java-ini.tex
+++ b/Master/texmf-dist/tex/context/base/java-ini.tex
@@ -486,7 +486,7 @@
\aftergroup\xdef
\aftergroup#2%
\aftergroup{%
- \expanded{\convertargument#1\noexpand\to\noexpand\JScode}%
+ \expanded{\defconvertedargument\noexpand\JScode{#1}}%
\expandafter\handletokens\JScode\with\dodoPSsanitizeJScode
\aftergroup}%
\endgroup
diff --git a/Master/texmf-dist/tex/context/base/l-aux.lua b/Master/texmf-dist/tex/context/base/l-aux.lua
new file mode 100644
index 00000000000..f81d807cdc4
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/l-aux.lua
@@ -0,0 +1,110 @@
+-- filename : l-aux.lua
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+if not versions then versions = { } end versions['l-aux'] = 1.001
+if not aux then aux = { } end
+
+do
+
+ local hash = { }
+
+ local function set(key,value) -- using Carg is slower here
+ hash[key] = value
+ end
+
+ local space = lpeg.P(' ')
+ local equal = lpeg.P("=")
+ local comma = lpeg.P(",")
+ local lbrace = lpeg.P("{")
+ local rbrace = lpeg.P("}")
+ local nobrace = 1 - (lbrace+rbrace)
+ local nested = lpeg.P{ lbrace * (nobrace + lpeg.V(1))^0 * rbrace }
+
+ local key = lpeg.C((1-equal)^1)
+ local value = lpeg.P(lbrace * lpeg.C((nobrace + nested)^0) * rbrace) + lpeg.C((nested + (1-comma))^0)
+ local pattern = ((space^0 * key * equal * value * comma^0) / set)^1
+
+ -- "a=1, b=2, c=3, d={a{b,c}d}, e=12345, f=xx{a{b,c}d}xx, g={}" : outer {} removes, leading spaces ignored
+
+ function aux.settings_to_hash(str)
+ if str and str ~= "" then
+ hash = { }
+ pattern:match(str)
+ return hash
+ else
+ return { }
+ end
+ end
+
+ local seperator = comma * space^0
+ local value = lpeg.P(lbrace * lpeg.C((nobrace + nested)^0) * rbrace) + lpeg.C((nested + (1-comma))^0)
+ local pattern = lpeg.Ct(value*(seperator*value)^0)
+
+ -- "aap, {noot}, mies" : outer {} removes, leading spaces ignored
+
+ function aux.settings_to_array(str)
+ return pattern:match(str)
+ end
+
+ local function set(t,v)
+ t[#t+1] = v
+ end
+
+ local value = lpeg.P(lpeg.Carg(1)*value) / set
+ local pattern = value*(seperator*value)^0 * lpeg.Carg(1)
+
+ function aux.add_settings_to_array(t,str)
+ return pattern:match(str, nil, t)
+ end
+
+end
+
+function aux.hash_to_string(h,separator,yes,no,strict,omit)
+ if h then
+ local t, s = { }, table.sortedkeys(h)
+ omit = omit and table.tohash(omit)
+ for i=1,#s do
+ local key = s[i]
+ if not omit or not omit[key] then
+ local value = h[key]
+ if type(value) == "boolean" then
+ if yes and no then
+ if value then
+ t[#t+1] = key .. '=' .. yes
+ elseif not strict then
+ t[#t+1] = key .. '=' .. no
+ end
+ elseif value or not strict then
+ t[#t+1] = key .. '=' .. tostring(value)
+ end
+ else
+ t[#t+1] = key .. '=' .. value
+ end
+ end
+ end
+ return table.concat(t,separator or ",")
+ else
+ return ""
+ end
+end
+
+function aux.array_to_string(a,separator)
+ if a then
+ return table.concat(a,separator or ",")
+ else
+ return ""
+ end
+end
+
+-- temporary here
+
+function aux.getparameters(self,class,parentclass,settings)
+ local sc = self[class]
+ if not sc then
+ sc = table.clone(self[parent])
+ self[class] = sc
+ end
+ aux.add_settings_to_array(sc, settings)
+end
diff --git a/Master/texmf-dist/tex/context/base/l-boolean.lua b/Master/texmf-dist/tex/context/base/l-boolean.lua
new file mode 100644
index 00000000000..66c608cee50
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/l-boolean.lua
@@ -0,0 +1,52 @@
+-- filename : l-boolean.lua
+-- comment : split off from luat-lib
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+if not versions then versions = { } end versions['l-boolean'] = 1.001
+if not boolean then boolean = { } end
+
+function boolean.tonumber(b)
+ if b then return 1 else return 0 end
+end
+
+function toboolean(str,tolerant)
+ if tolerant then
+ local tstr = type(str)
+ if tstr == "string" then
+ return str == "true" or str == "yes" or str == "on" or str == "1"
+ elseif tstr == "number" then
+ return tonumber(str) ~= 0
+ elseif tstr == "nil" then
+ return false
+ else
+ return str
+ end
+ elseif str == "true" then
+ return true
+ elseif str == "false" then
+ return false
+ else
+ return str
+ end
+end
+
+function string.is_boolean(str)
+ if type(str) == "string" then
+ if str == "true" or str == "yes" or str == "on" then
+ return true
+ elseif str == "false" or str == "no" or str == "off" then
+ return false
+ end
+ end
+ return nil
+end
+
+function boolean.alwaystrue()
+ return true
+end
+
+function boolean.falsetrue()
+ return false
+end
diff --git a/Master/texmf-dist/tex/context/base/l-dir.lua b/Master/texmf-dist/tex/context/base/l-dir.lua
new file mode 100644
index 00000000000..d24eb33a9f1
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/l-dir.lua
@@ -0,0 +1,368 @@
+-- filename : l-dir.lua
+-- comment : split off from luat-lib
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+if not versions then versions = { } end versions['l-dir'] = 1.001
+
+dir = { }
+
+-- optimizing for no string.find (*) does not save time
+
+if lfs then do
+
+--~ local attributes = lfs.attributes
+--~ local walkdir = lfs.dir
+--~
+--~ local function glob_pattern(path,patt,recurse,action)
+--~ local ok, scanner = xpcall(function() return walkdir(path) end, function() end) -- kepler safe
+--~ if ok and type(scanner) == "function" then
+--~ if not path:find("/$") then path = path .. '/' end
+--~ for name in scanner do
+--~ local full = path .. name
+--~ local mode = attributes(full,'mode')
+--~ if mode == 'file' then
+--~ if name:find(patt) then
+--~ action(full)
+--~ end
+--~ elseif recurse and (mode == "directory") and (name ~= '.') and (name ~= "..") then
+--~ glob_pattern(full,patt,recurse,action)
+--~ end
+--~ end
+--~ end
+--~ end
+--~
+--~ dir.glob_pattern = glob_pattern
+--~
+--~ local function glob(pattern, action)
+--~ local t = { }
+--~ local action = action or function(name) t[#t+1] = name end
+--~ local path, patt = pattern:match("^(.*)/*%*%*/*(.-)$")
+--~ local recurse = path and patt
+--~ if not recurse then
+--~ path, patt = pattern:match("^(.*)/(.-)$")
+--~ if not (path and patt) then
+--~ path, patt = '.', pattern
+--~ end
+--~ end
+--~ patt = patt:gsub("([%.%-%+])", "%%%1")
+--~ patt = patt:gsub("%*", ".*")
+--~ patt = patt:gsub("%?", ".")
+--~ patt = "^" .. patt .. "$"
+--~ -- print('path: ' .. path .. ' | pattern: ' .. patt .. ' | recurse: ' .. tostring(recurse))
+--~ glob_pattern(path,patt,recurse,action)
+--~ return t
+--~ end
+--~
+--~ dir.glob = glob
+
+ local attributes = lfs.attributes
+ local walkdir = lfs.dir
+
+ local function glob_pattern(path,patt,recurse,action)
+ local ok, scanner
+ if path == "/" then
+ ok, scanner = xpcall(function() return walkdir(path..".") end, function() end) -- kepler safe
+ else
+ ok, scanner = xpcall(function() return walkdir(path) end, function() end) -- kepler safe
+ end
+ if ok and type(scanner) == "function" then
+ if not path:find("/$") then path = path .. '/' end
+ for name in scanner do
+ local full = path .. name
+ local mode = attributes(full,'mode')
+ if mode == 'file' then
+ if full:find(patt) then
+ action(full)
+ end
+ elseif recurse and (mode == "directory") and (name ~= '.') and (name ~= "..") then
+ glob_pattern(full,patt,recurse,action)
+ end
+ end
+ end
+ end
+
+ dir.glob_pattern = glob_pattern
+
+ --~ local function glob(pattern, action)
+ --~ local t = { }
+ --~ local path, rest, patt, recurse
+ --~ local action = action or function(name) t[#t+1] = name end
+ --~ local pattern = pattern:gsub("^%*%*","./**")
+ --~ local pattern = pattern:gsub("/%*/","/**/")
+ --~ path, rest = pattern:match("^(/)(.-)$")
+ --~ if path then
+ --~ path = path
+ --~ else
+ --~ path, rest = pattern:match("^([^/]*)/(.-)$")
+ --~ end
+ --~ if rest then
+ --~ patt = rest:gsub("([%.%-%+])", "%%%1")
+ --~ end
+ --~ patt = patt:gsub("%*", "[^/]*")
+ --~ patt = patt:gsub("%?", "[^/]")
+ --~ patt = patt:gsub("%[%^/%]%*%[%^/%]%*", ".*")
+ --~ if path == "" then path = "." end
+ --~ recurse = patt:find("%.%*/") ~= nil
+ --~ glob_pattern(path,patt,recurse,action)
+ --~ return t
+ --~ end
+
+ local P, S, R, C, Cc, Cs, Ct, Cv, V = lpeg.P, lpeg.S, lpeg.R, lpeg.C, lpeg.Cc, lpeg.Cs, lpeg.Ct, lpeg.Cv, lpeg.V
+
+ local pattern = Ct {
+ [1] = (C(P(".") + P("/")^1) + C(R("az","AZ") * P(":") * P("/")^0) + Cc("./")) * V(2) * V(3),
+ [2] = C(((1-S("*?/"))^0 * P("/"))^0),
+ [3] = C(P(1)^0)
+ }
+
+ local filter = Cs ( (
+ P("**") / ".*" +
+ P("*") / "[^/]*" +
+ P("?") / "[^/]" +
+ P(".") / "%%." +
+ P("+") / "%%+" +
+ P("-") / "%%-" +
+ P(1)
+ )^0 )
+
+ local function glob(str,t)
+ if type(str) == "table" then
+ local t = t or { }
+ for _, s in ipairs(str) do
+ glob(s,t)
+ end
+ return t
+ else
+ local split = pattern:match(str)
+ if split then
+ local t = t or { }
+ local action = action or function(name) t[#t+1] = name end
+ local root, path, base = split[1], split[2], split[3]
+ local recurse = base:find("**")
+ local start = root .. path
+ local result = filter:match(start .. base)
+ glob_pattern(start,result,recurse,action)
+ return t
+ else
+ return { }
+ end
+ end
+ end
+
+ dir.glob = glob
+
+ --~ list = dir.glob("**/*.tif")
+ --~ list = dir.glob("/**/*.tif")
+ --~ list = dir.glob("./**/*.tif")
+ --~ list = dir.glob("oeps/**/*.tif")
+ --~ list = dir.glob("/oeps/**/*.tif")
+
+ local function globfiles(path,recurse,func,files) -- func == pattern or function
+ if type(func) == "string" then
+ local s = func -- alas, we need this indirect way
+ func = function(name) return name:find(s) end
+ end
+ files = files or { }
+ for name in walkdir(path) do
+ if name:find("^%.") then
+ --- skip
+ elseif attributes(name,'mode') == "directory" then
+ if recurse then
+ globfiles(path .. "/" .. name,recurse,func,files)
+ end
+ elseif func then
+ if func(name) then
+ files[#files+1] = path .. "/" .. name
+ end
+ else
+ files[#files+1] = path .. "/" .. name
+ end
+ end
+ return files
+ end
+
+ dir.globfiles = globfiles
+
+ -- t = dir.glob("c:/data/develop/context/sources/**/????-*.tex")
+ -- t = dir.glob("c:/data/develop/tex/texmf/**/*.tex")
+ -- t = dir.glob("c:/data/develop/context/texmf/**/*.tex")
+ -- t = dir.glob("f:/minimal/tex/**/*")
+ -- print(dir.ls("f:/minimal/tex/**/*"))
+ -- print(dir.ls("*.tex"))
+
+ function dir.ls(pattern)
+ return table.concat(glob(pattern),"\n")
+ end
+
+ --~ mkdirs("temp")
+ --~ mkdirs("a/b/c")
+ --~ mkdirs(".","/a/b/c")
+ --~ mkdirs("a","b","c")
+
+ local make_indeed = true -- false
+
+ if string.find(os.getenv("PATH"),";") then
+
+ function dir.mkdirs(...)
+ local str, pth = "", ""
+ for _, s in ipairs({...}) do
+ if s ~= "" then
+ if str ~= "" then
+ str = str .. "/" .. s
+ else
+ str = s
+ end
+ end
+ end
+ local first, middle, last
+ local drive = false
+ first, middle, last = str:match("^(//)(//*)(.*)$")
+ if first then
+ -- empty network path == local path
+ else
+ first, last = str:match("^(//)/*(.-)$")
+ if first then
+ middle, last = str:match("([^/]+)/+(.-)$")
+ if middle then
+ pth = "//" .. middle
+ else
+ pth = "//" .. last
+ last = ""
+ end
+ else
+ first, middle, last = str:match("^([a-zA-Z]:)(/*)(.-)$")
+ if first then
+ pth, drive = first .. middle, true
+ else
+ middle, last = str:match("^(/*)(.-)$")
+ if not middle then
+ last = str
+ end
+ end
+ end
+ end
+ for s in last:gmatch("[^/]+") do
+ if pth == "" then
+ pth = s
+ elseif drive then
+ pth, drive = pth .. s, false
+ else
+ pth = pth .. "/" .. s
+ end
+ if make_indeed and not lfs.isdir(pth) then
+ lfs.mkdir(pth)
+ end
+ end
+ return pth, (lfs.isdir(pth) == true)
+ end
+
+--~ print(dir.mkdirs("","","a","c"))
+--~ print(dir.mkdirs("a"))
+--~ print(dir.mkdirs("a:"))
+--~ print(dir.mkdirs("a:/b/c"))
+--~ print(dir.mkdirs("a:b/c"))
+--~ print(dir.mkdirs("a:/bbb/c"))
+--~ print(dir.mkdirs("/a/b/c"))
+--~ print(dir.mkdirs("/aaa/b/c"))
+--~ print(dir.mkdirs("//a/b/c"))
+--~ print(dir.mkdirs("///a/b/c"))
+--~ print(dir.mkdirs("a/bbb//ccc/"))
+
+ function dir.expand_name(str)
+ local first, nothing, last = str:match("^(//)(//*)(.*)$")
+ if first then
+ first = lfs.currentdir() .. "/"
+ first = first:gsub("\\","/")
+ end
+ if not first then
+ first, last = str:match("^(//)/*(.*)$")
+ end
+ if not first then
+ first, last = str:match("^([a-zA-Z]:)(.*)$")
+ if first and not last:find("^/") then
+ local d = lfs.currentdir()
+ if lfs.chdir(first) then
+ first = lfs.currentdir()
+ first = first:gsub("\\","/")
+ end
+ lfs.chdir(d)
+ end
+ end
+ if not first then
+ first, last = lfs.currentdir(), str
+ first = first:gsub("\\","/")
+ end
+ last = last:gsub("//","/")
+ last = last:gsub("/%./","/")
+ last = last:gsub("^/*","")
+ first = first:gsub("/*$","")
+ if last == "" then
+ return first
+ else
+ return first .. "/" .. last
+ end
+ end
+
+ else
+
+ function dir.mkdirs(...)
+ local str, pth = "", ""
+ for _, s in ipairs({...}) do
+ if s ~= "" then
+ if str ~= "" then
+ str = str .. "/" .. s
+ else
+ str = s
+ end
+ end
+ end
+ str = str:gsub("/+","/")
+ if str:find("^/") then
+ pth = "/"
+ for s in str:gmatch("[^/]+") do
+ local first = (pth == "/")
+ if first then
+ pth = pth .. s
+ else
+ pth = pth .. "/" .. s
+ end
+ if make_indeed and not first and not lfs.isdir(pth) then
+ lfs.mkdir(pth)
+ end
+ end
+ else
+ pth = "."
+ for s in str:gmatch("[^/]+") do
+ pth = pth .. "/" .. s
+ if make_indeed and not lfs.isdir(pth) then
+ lfs.mkdir(pth)
+ end
+ end
+ end
+ return pth, (lfs.isdir(pth) == true)
+ end
+
+--~ print(dir.mkdirs("","","a","c"))
+--~ print(dir.mkdirs("a"))
+--~ print(dir.mkdirs("/a/b/c"))
+--~ print(dir.mkdirs("/aaa/b/c"))
+--~ print(dir.mkdirs("//a/b/c"))
+--~ print(dir.mkdirs("///a/b/c"))
+--~ print(dir.mkdirs("a/bbb//ccc/"))
+
+ function dir.expand_name(str)
+ if not str:find("^/") then
+ str = lfs.currentdir() .. "/" .. str
+ end
+ str = str:gsub("//","/")
+ str = str:gsub("/%./","/")
+ return str
+ end
+
+ end
+
+ dir.makedirs = dir.mkdirs
+
+end end
diff --git a/Master/texmf-dist/tex/context/base/l-file.lua b/Master/texmf-dist/tex/context/base/l-file.lua
new file mode 100644
index 00000000000..f49add5456b
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/l-file.lua
@@ -0,0 +1,166 @@
+-- filename : l-file.lua
+-- comment : split off from luat-lib
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+if not versions then versions = { } end versions['l-file'] = 1.001
+
+if not file then file = { } end
+
+function file.removesuffix(filename)
+ return filename:gsub("%.[%a%d]+$", "")
+end
+
+function file.addsuffix(filename, suffix)
+ if not filename:find("%.[%a%d]+$") then
+ return filename .. "." .. suffix
+ else
+ return filename
+ end
+end
+
+function file.replacesuffix(filename, suffix)
+ if not filename:find("%.[%a%d]+$") then
+ return filename .. "." .. suffix
+ else
+ return (filename:gsub("%.[%a%d]+$","."..suffix))
+ end
+end
+
+function file.dirname(name)
+ return name:match("^(.+)[/\\].-$") or ""
+end
+
+function file.basename(name)
+ return name:match("^.+[/\\](.-)$") or name
+end
+
+function file.nameonly(name)
+ return ((name:match("^.+[/\\](.-)$") or name):gsub("%..*$",""))
+end
+
+function file.extname(name)
+ return name:match("^.+%.([^/\\]-)$") or ""
+end
+
+file.suffix = file.extname
+
+function file.stripsuffix(name)
+ return (name:gsub("%.[%a%d]+$",""))
+end
+
+--~ function file.join(...)
+--~ local t = { ... }
+--~ for i=1,#t do
+--~ t[i] = (t[i]:gsub("\\","/")):gsub("/+$","")
+--~ end
+--~ return table.concat(t,"/")
+--~ end
+
+--~ print(file.join("x/","/y"))
+--~ print(file.join("http://","/y"))
+--~ print(file.join("http://a","/y"))
+--~ print(file.join("http:///a","/y"))
+--~ print(file.join("//nas-1","/y"))
+
+function file.join(...)
+ local pth = table.concat({...},"/")
+ pth = pth:gsub("\\","/")
+ local a, b = pth:match("^(.*://)(.*)$")
+ if a and b then
+ return a .. b:gsub("//+","/")
+ end
+ a, b = pth:match("^(//)(.*)$")
+ if a and b then
+ return a .. b:gsub("//+","/")
+ end
+ return (pth:gsub("//+","/"))
+end
+
+function file.is_writable(name)
+ local f = io.open(name, 'w')
+ if f then
+ f:close()
+ return true
+ else
+ return false
+ end
+end
+
+function file.is_readable(name)
+ local f = io.open(name,'r')
+ if f then
+ f:close()
+ return true
+ else
+ return false
+ end
+end
+
+--~ function file.split_path(str)
+--~ if str:find(';') then
+--~ return str:splitchr(";")
+--~ else
+--~ return str:splitchr(io.pathseparator)
+--~ end
+--~ end
+
+-- todo: lpeg
+
+function file.split_path(str)
+ local t = { }
+ str = str:gsub("\\", "/")
+ str = str:gsub("(%a):([;/])", "%1\001%2")
+ for name in str:gmatch("([^;:]+)") do
+ if name ~= "" then
+ name = name:gsub("\001",":")
+ t[#t+1] = name
+ end
+ end
+ return t
+end
+
+function file.join_path(tab)
+ return table.concat(tab,io.pathseparator) -- can have trailing //
+end
+
+--~ print('test' .. " == " .. file.collapse_path("test"))
+--~ print("test/test" .. " == " .. file.collapse_path("test/test"))
+--~ print("test/test/test" .. " == " .. file.collapse_path("test/test/test"))
+--~ print("test/test" .. " == " .. file.collapse_path("test/../test/test"))
+--~ print("test" .. " == " .. file.collapse_path("test/../test"))
+--~ print("../test" .. " == " .. file.collapse_path("../test"))
+--~ print("../test/" .. " == " .. file.collapse_path("../test/"))
+--~ print("a/a" .. " == " .. file.collapse_path("a/b/c/../../a"))
+
+--~ function file.collapse_path(str)
+--~ local ok, n = false, 0
+--~ while not ok do
+--~ ok = true
+--~ str, n = str:gsub("[^%./]+/%.%./", function(s)
+--~ ok = false
+--~ return ""
+--~ end)
+--~ end
+--~ return (str:gsub("/%./","/"))
+--~ end
+
+function file.collapse_path(str)
+ local n = 1
+ while n > 0 do
+ str, n = str:gsub("([^/%.]+/%.%./)","")
+ end
+ return (str:gsub("/%./","/"))
+end
+
+function file.robustname(str)
+ return (str:gsub("[^%a%d%/%-%.\\]+","-"))
+end
+
+file.readdata = io.loaddata
+file.savedata = io.savedata
+
+function file.copy(oldname,newname)
+ file.savedata(newname,io.loaddata(oldname))
+end
diff --git a/Master/texmf-dist/tex/context/base/l-io.lua b/Master/texmf-dist/tex/context/base/l-io.lua
new file mode 100644
index 00000000000..a178c838f20
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/l-io.lua
@@ -0,0 +1,242 @@
+-- filename : l-io.lua
+-- comment : split off from luat-lib
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+if not versions then versions = { } end versions['l-io'] = 1.001
+
+if string.find(os.getenv("PATH"),";") then
+ io.fileseparator, io.pathseparator = "\\", ";"
+else
+ io.fileseparator, io.pathseparator = "/" , ":"
+end
+
+function io.loaddata(filename)
+ local f = io.open(filename,'rb')
+ if f then
+ local data = f:read('*all')
+ f:close()
+ return data
+ else
+ return nil
+ end
+end
+
+function io.savedata(filename,data,joiner)
+ local f = io.open(filename, "wb")
+ if f then
+ if type(data) == "table" then
+ f:write(table.join(data,joiner or ""))
+ elseif type(data) == "function" then
+ data(f)
+ else
+ f:write(data)
+ end
+ f:close()
+ end
+end
+
+function io.exists(filename)
+ local f = io.open(filename)
+ if f == nil then
+ return false
+ else
+ assert(f:close())
+ return true
+ end
+end
+
+function io.size(filename)
+ local f = io.open(filename)
+ if f == nil then
+ return 0
+ else
+ local s = f:seek("end")
+ assert(f:close())
+ return s
+ end
+end
+
+function io.noflines(f)
+ local n = 0
+ for _ in f:lines() do
+ n = n + 1
+ end
+ f:seek('set',0)
+ return n
+end
+
+do
+
+ local sb = string.byte
+
+ local nextchar = {
+ [ 4] = function(f)
+ return f:read(1,1,1,1)
+ end,
+ [ 2] = function(f)
+ return f:read(1,1)
+ end,
+ [ 1] = function(f)
+ return f:read(1)
+ end,
+ [-2] = function(f)
+ local a, b = f:read(1,1)
+ return b, a
+ end,
+ [-4] = function(f)
+ local a, b, c, d = f:read(1,1,1,1)
+ return d, c, b, a
+ end
+ }
+
+ function io.characters(f,n)
+ if f then
+ return nextchar[n or 1], f
+ else
+ return nil, nil
+ end
+ end
+
+end
+
+do
+
+ local sb = string.byte
+
+--~ local nextbyte = {
+--~ [4] = function(f)
+--~ local a = f:read(1)
+--~ local b = f:read(1)
+--~ local c = f:read(1)
+--~ local d = f:read(1)
+--~ if d then
+--~ return sb(a), sb(b), sb(c), sb(d)
+--~ else
+--~ return nil, nil, nil, nil
+--~ end
+--~ end,
+--~ [2] = function(f)
+--~ local a = f:read(1)
+--~ local b = f:read(1)
+--~ if b then
+--~ return sb(a), sb(b)
+--~ else
+--~ return nil, nil
+--~ end
+--~ end,
+--~ [1] = function (f)
+--~ local a = f:read(1)
+--~ if a then
+--~ return sb(a)
+--~ else
+--~ return nil
+--~ end
+--~ end,
+--~ [-2] = function (f)
+--~ local a = f:read(1)
+--~ local b = f:read(1)
+--~ if b then
+--~ return sb(b), sb(a)
+--~ else
+--~ return nil, nil
+--~ end
+--~ end,
+--~ [-4] = function(f)
+--~ local a = f:read(1)
+--~ local b = f:read(1)
+--~ local c = f:read(1)
+--~ local d = f:read(1)
+--~ if d then
+--~ return sb(d), sb(c), sb(b), sb(a)
+--~ else
+--~ return nil, nil, nil, nil
+--~ end
+--~ end
+--~ }
+
+ local nextbyte = {
+ [4] = function(f)
+ local a, b, c, d = f:read(1,1,1,1)
+ if d then
+ return sb(a), sb(b), sb(c), sb(d)
+ else
+ return nil, nil, nil, nil
+ end
+ end,
+ [2] = function(f)
+ local a, b = f:read(1,1)
+ if b then
+ return sb(a), sb(b)
+ else
+ return nil, nil
+ end
+ end,
+ [1] = function (f)
+ local a = f:read(1)
+ if a then
+ return sb(a)
+ else
+ return nil
+ end
+ end,
+ [-2] = function (f)
+ local a, b = f:read(1,1)
+ if b then
+ return sb(b), sb(a)
+ else
+ return nil, nil
+ end
+ end,
+ [-4] = function(f)
+ local a, b, c, d = f:read(1,1,1,1)
+ if d then
+ return sb(d), sb(c), sb(b), sb(a)
+ else
+ return nil, nil, nil, nil
+ end
+ end
+ }
+
+ function io.bytes(f,n)
+ if f then
+ return nextbyte[n or 1], f
+ else
+ return nil, nil
+ end
+ end
+
+end
+
+function io.ask(question,default,options)
+ while true do
+ io.write(question)
+ if options then
+ io.write(string.format(" [%s]",table.concat(options,"|")))
+ end
+ if default then
+ io.write(string.format(" [%s]",default))
+ end
+ io.write(string.format(" "))
+ local answer = io.read()
+ answer = answer:gsub("^%s*(.*)%s*$","%1")
+ if answer == "" and default then
+ return default
+ elseif not options then
+ return answer
+ else
+ for _,v in pairs(options) do
+ if v == answer then
+ return answer
+ end
+ end
+ local pattern = "^" .. answer
+ for _,v in pairs(options) do
+ if v:find(pattern) then
+ return v
+ end
+ end
+ end
+ end
+end
diff --git a/Master/texmf-dist/tex/context/base/l-lpeg.lua b/Master/texmf-dist/tex/context/base/l-lpeg.lua
new file mode 100644
index 00000000000..bee903549d3
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/l-lpeg.lua
@@ -0,0 +1,58 @@
+-- filename : l-lpeg.lua
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+if not versions then versions = { } end versions['l-lpeg'] = 1.001
+
+--~ l-lpeg.lua :
+
+--~ lpeg.digit = lpeg.R('09')^1
+--~ lpeg.sign = lpeg.S('+-')^1
+--~ lpeg.cardinal = lpeg.P(lpeg.sign^0 * lpeg.digit^1)
+--~ lpeg.integer = lpeg.P(lpeg.sign^0 * lpeg.digit^1)
+--~ lpeg.float = lpeg.P(lpeg.sign^0 * lpeg.digit^0 * lpeg.P('.') * lpeg.digit^1)
+--~ lpeg.number = lpeg.float + lpeg.integer
+--~ lpeg.oct = lpeg.P("0") * lpeg.R('07')^1
+--~ lpeg.hex = lpeg.P("0x") * (lpeg.R('09') + lpeg.R('AF'))^1
+--~ lpeg.uppercase = lpeg.P("AZ")
+--~ lpeg.lowercase = lpeg.P("az")
+
+--~ lpeg.eol = lpeg.S('\r\n\f')^1 -- includes formfeed
+--~ lpeg.space = lpeg.S(' ')^1
+--~ lpeg.nonspace = lpeg.P(1-lpeg.space)^1
+--~ lpeg.whitespace = lpeg.S(' \r\n\f\t')^1
+--~ lpeg.nonwhitespace = lpeg.P(1-lpeg.whitespace)^1
+
+local hash = { }
+
+function lpeg.anywhere(pattern) --slightly adapted from website
+ return lpeg.P { lpeg.P(pattern) + 1 * lpeg.V(1) }
+end
+
+function lpeg.startswith(pattern) --slightly adapted
+ return lpeg.P(pattern)
+end
+
+--~ g = lpeg.splitter(" ",function(s) ... end) -- gmatch:lpeg = 3:2
+
+function lpeg.splitter(pattern, action)
+ return (((1-lpeg.P(pattern))^1)/action+1)^0
+end
+
+local crlf = lpeg.P("\r\n")
+local cr = lpeg.P("\r")
+local lf = lpeg.P("\n")
+local space = lpeg.S(" \t\f\v")
+local newline = crlf + cr + lf
+local spacing = space^0 * newline
+
+local empty = spacing * lpeg.Cc("")
+local nonempty = lpeg.Cs((1-spacing)^1) * spacing^-1
+local content = (empty + nonempty)^1
+
+local capture = lpeg.Ct(content^0)
+
+function string:splitlines()
+ return capture:match(self)
+end
diff --git a/Master/texmf-dist/tex/context/base/l-math.lua b/Master/texmf-dist/tex/context/base/l-math.lua
new file mode 100644
index 00000000000..24921cd0c17
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/l-math.lua
@@ -0,0 +1,25 @@
+-- filename : l-math.lua
+-- comment : split off from luat-lib
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+if not versions then versions = { } end versions['l-math'] = 1.001
+
+if not math.round then
+ function math.round(x)
+ return math.floor(x + 0.5)
+ end
+end
+
+if not math.div then
+ function math.div(n,m)
+ return math.floor(n/m)
+ end
+end
+
+if not math.mod then
+ function math.mod(n,m)
+ return n % m
+ end
+end
diff --git a/Master/texmf-dist/tex/context/base/l-md5.lua b/Master/texmf-dist/tex/context/base/l-md5.lua
new file mode 100644
index 00000000000..4deb9bd74a5
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/l-md5.lua
@@ -0,0 +1,18 @@
+-- filename : l-md5.lua
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+if not versions then versions = { } end versions['l-md5'] = 1.001
+
+if md5 then do
+
+ local function convert(str,fmt)
+ return (string.gsub(md5.sum(str),".",function(chr) return string.format(fmt,string.byte(chr)) end))
+ end
+
+ if not md5.HEX then function md5.HEX(str) return convert(str,"%02X") end end
+ if not md5.hex then function md5.hex(str) return convert(str,"%02x") end end
+ if not md5.dec then function md5.dec(str) return convert(str,"%03i") end end
+
+end end
diff --git a/Master/texmf-dist/tex/context/base/l-number.lua b/Master/texmf-dist/tex/context/base/l-number.lua
new file mode 100644
index 00000000000..180b4c544ba
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/l-number.lua
@@ -0,0 +1,46 @@
+-- filename : l-number.lua
+-- comment : split off from luat-lib
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+if not versions then versions = { } end versions['l-number'] = 1.001
+
+if not number then number = { } end
+
+-- a,b,c,d,e,f = number.toset(100101)
+
+function number.toset(n)
+ return (tostring(n)):match("(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.?)")
+end
+
+local format = string.format
+
+function number.toevenhex(n)
+ local s = format("%X",n)
+ if #s % 2 == 0 then
+ return s
+ else
+ return "0" .. s
+ end
+end
+
+-- the lpeg way is slower on 8 digits, but faster on 4 digits, some 7.5%
+-- on
+--
+-- for i=1,1000000 do
+-- local a,b,c,d,e,f,g,h = number.toset(12345678)
+-- local a,b,c,d = number.toset(1234)
+-- local a,b,c = number.toset(123)
+-- end
+--
+-- of course dedicated "(.)(.)(.)(.)" matches are even faster
+
+do
+ local one = lpeg.C(1-lpeg.S(''))^1
+
+ function number.toset(n)
+ return one:match(tostring(n))
+ end
+end
+
diff --git a/Master/texmf-dist/tex/context/base/l-os.lua b/Master/texmf-dist/tex/context/base/l-os.lua
new file mode 100644
index 00000000000..7c612171946
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/l-os.lua
@@ -0,0 +1,69 @@
+-- filename : l-os.lua
+-- comment : split off from luat-lib
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+if not versions then versions = { } end versions['l-os'] = 1.001
+
+function os.resultof(command)
+ return io.popen(command,"r"):read("*all")
+end
+
+if not os.exec then os.exec = os.execute end
+if not os.spawn then os.spawn = os.execute end
+
+--~ os.type : windows | unix (new, we already guessed os.platform)
+--~ os.name : windows | msdos | linux | macosx | solaris | .. | generic (new)
+
+if not io.fileseparator then
+ if string.find(os.getenv("PATH"),";") then
+ io.fileseparator, io.pathseparator, os.platform = "\\", ";", os.type or "windows"
+ else
+ io.fileseparator, io.pathseparator, os.platform = "/" , ":", os.type or "unix"
+ end
+end
+
+os.platform = os.platform or os.type or (io.pathseparator == ";" and "windows") or "unix"
+
+function os.launch(str)
+ if os.platform == "windows" then
+ os.execute("start " .. str) -- os.spawn ?
+ else
+ os.execute(str .. " &") -- os.spawn ?
+ end
+end
+
+if not os.setenv then
+ function os.setenv() return false end
+end
+
+if not os.times then
+ -- utime = user time
+ -- stime = system time
+ -- cutime = children user time
+ -- cstime = children system time
+ function os.times()
+ return {
+ utime = os.gettimeofday(), -- user
+ stime = 0, -- system
+ cutime = 0, -- children user
+ cstime = 0, -- children system
+ }
+ end
+end
+
+os.gettimeofday = os.gettimeofday or os.clock
+
+do
+ local startuptime = os.gettimeofday()
+ function os.runtime()
+ return os.gettimeofday() - startuptime
+ end
+end
+
+--~ print(os.gettimeofday()-os.time())
+--~ os.sleep(1.234)
+--~ print (">>",os.runtime())
+--~ print(os.date("%H:%M:%S",os.gettimeofday()))
+--~ print(os.date("%H:%M:%S",os.time()))
diff --git a/Master/texmf-dist/tex/context/base/l-set.lua b/Master/texmf-dist/tex/context/base/l-set.lua
new file mode 100644
index 00000000000..2bcf664f84a
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/l-set.lua
@@ -0,0 +1,70 @@
+-- filename : l-set.lua
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+if not versions then versions = { } end versions['l-set'] = 1.001
+
+if not set then set = { } end
+
+do
+
+ local nums = { }
+ local tabs = { }
+ local concat = table.concat
+
+ set.create = table.tohash
+
+ function set.tonumber(t)
+ if next(t) then
+ local s = ""
+ -- we could save mem by sorting, but it slows down
+ for k, v in pairs(t) do
+ if v then
+ -- why bother about the leading space
+ s = s .. " " .. k
+ end
+ end
+ if not nums[s] then
+ tabs[#tabs+1] = t
+ nums[s] = #tabs
+ end
+ return nums[s]
+ else
+ return 0
+ end
+ end
+
+ function set.totable(n)
+ if n == 0 then
+ return { }
+ else
+ return tabs[n] or { }
+ end
+ end
+
+ function set.contains(n,s)
+ if type(n) == "table" then
+ return n[s]
+ elseif n == 0 then
+ return false
+ else
+ local t = tabs[n]
+ return t and t[s]
+ end
+ end
+
+end
+
+--~ local c = set.create{'aap','noot','mies'}
+--~ local s = set.tonumber(c)
+--~ local t = set.totable(s)
+--~ print(t['aap'])
+--~ local c = set.create{'zus','wim','jet'}
+--~ local s = set.tonumber(c)
+--~ local t = set.totable(s)
+--~ print(t['aap'])
+--~ print(t['jet'])
+--~ print(set.contains(t,'jet'))
+--~ print(set.contains(t,'aap'))
+
diff --git a/Master/texmf-dist/tex/context/base/l-string.lua b/Master/texmf-dist/tex/context/base/l-string.lua
new file mode 100644
index 00000000000..6a3bea31c18
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/l-string.lua
@@ -0,0 +1,358 @@
+-- filename : l-string.lua
+-- comment : split off from luat-lib
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+if not versions then versions = { } end versions['l-string'] = 1.001
+
+--~ function string.split(str, pat) -- taken from the lua wiki
+--~ local t = {n = 0} -- so this table has a length field, traverse with ipairs then!
+--~ local fpat = "(.-)"..pat
+--~ local last_end = 1
+--~ local s, e, cap = string.find(str, fpat, 1)
+--~ while s ~= nil do
+--~ if s~=1 or cap~="" then
+--~ table.insert(t,cap)
+--~ end
+--~ last_end = e+1
+--~ s, e, cap = string.find(str, fpat, last_end)
+--~ end
+--~ if last_end<=string.len(str) then
+--~ table.insert(t,(string.sub(str,last_end)))
+--~ end
+--~ return t
+--~ end
+
+--~ function string:split(pat) -- taken from the lua wiki but adapted
+--~ local t = { } -- self and colon usage (faster)
+--~ local fpat = "(.-)"..pat
+--~ local last_end = 1
+--~ local s, e, cap = self:find(fpat, 1)
+--~ while s ~= nil do
+--~ if s~=1 or cap~="" then
+--~ t[#t+1] = cap
+--~ end
+--~ last_end = e+1
+--~ s, e, cap = self:find(fpat, last_end)
+--~ end
+--~ if last_end <= #self then
+--~ t[#t+1] = self:sub(last_end)
+--~ end
+--~ return t
+--~ end
+
+--~ a piece of brilliant code by Rici Lake (posted on lua list) -- only names changed
+--~
+--~ function string:splitter(pat)
+--~ local st, g = 1, self:gmatch("()"..pat.."()")
+--~ local function splitter(self)
+--~ if st then
+--~ local s, f = g()
+--~ local rv = self:sub(st, (s or 0)-1)
+--~ st = f
+--~ return rv
+--~ end
+--~ end
+--~ return splitter, self
+--~ end
+
+function string:splitter(pat)
+ -- by Rici Lake (posted on lua list) -- only names changed
+ -- p 79 ref man: () returns position of match
+ local st, g = 1, self:gmatch("()("..pat..")")
+ local function strgetter(self, segs, seps, sep, cap1, ...)
+ st = sep and seps + #sep
+ return self:sub(segs, (seps or 0) - 1), cap1 or sep, ...
+ end
+ local function strsplitter(self)
+ if st then return strgetter(self, st, g()) end
+ end
+ return strsplitter, self
+end
+
+function string:split(separator)
+ local t = {}
+ for k in self:splitter(separator) do t[#t+1] = k end
+ return t
+end
+
+-- faster than a string:split:
+
+function string:splitchr(chr)
+ if #self > 0 then
+ local t = { }
+ for s in string.gmatch(self..chr,"(.-)"..chr) do
+ t[#t+1] = s
+ end
+ return t
+ else
+ return { }
+ end
+end
+
+--~ function string.piecewise(str, pat, fnc) -- variant of split
+--~ local fpat = "(.-)"..pat
+--~ local last_end = 1
+--~ local s, e, cap = string.find(str, fpat, 1)
+--~ while s ~= nil do
+--~ if s~=1 or cap~="" then
+--~ fnc(cap)
+--~ end
+--~ last_end = e+1
+--~ s, e, cap = string.find(str, fpat, last_end)
+--~ end
+--~ if last_end <= #str then
+--~ fnc((string.sub(str,last_end)))
+--~ end
+--~ end
+
+function string.piecewise(str, pat, fnc) -- variant of split
+ for k in string.splitter(str,pat) do fnc(k) end
+end
+
+--~ function string.piecewise(str, pat, fnc) -- variant of split
+--~ for k in str:splitter(pat) do fnc(k) end
+--~ end
+
+--~ do if lpeg then
+
+--~ -- this alternative is 30% faster esp when we cache them
+--~ -- problem: no expressions
+
+--~ splitters = { }
+
+--~ function string:split(separator)
+--~ if #self > 0 then
+--~ local split = splitters[separator]
+--~ if not split then
+--~ -- based on code by Roberto
+--~ local p = lpeg.P(separator)
+--~ local c = lpeg.C((1-p)^0)
+--~ split = lpeg.Ct(c*(p*c)^0)
+--~ splitters[separator] = split
+--~ end
+--~ return split:match(self)
+--~ else
+--~ return { }
+--~ end
+--~ end
+
+--~ string.splitchr = string.split
+
+--~ function string:piecewise(separator,fnc)
+--~ for _,v in pairs(self:split(separator)) do
+--~ fnc(v)
+--~ end
+--~ end
+
+--~ end end
+
+string.chr_to_esc = {
+ ["%"] = "%%",
+ ["."] = "%.",
+ ["+"] = "%+", ["-"] = "%-", ["*"] = "%*",
+ ["^"] = "%^", ["$"] = "%$",
+ ["["] = "%[", ["]"] = "%]",
+ ["("] = "%(", [")"] = "%)",
+ ["{"] = "%{", ["}"] = "%}"
+}
+
+function string:esc() -- variant 2
+ return (self:gsub("(.)",string.chr_to_esc))
+end
+
+function string.unquote(str)
+ return (str:gsub("^([\"\'])(.*)%1$","%2"))
+end
+
+function string.quote(str)
+ return '"' .. str:unquote() .. '"'
+end
+
+function string:count(pattern) -- variant 3
+ local n = 0
+ for _ in self:gmatch(pattern) do
+ n = n + 1
+ end
+ return n
+end
+
+function string:limit(n,sentinel)
+ if #self > n then
+ sentinel = sentinel or " ..."
+ return self:sub(1,(n-#sentinel)) .. sentinel
+ else
+ return self
+ end
+end
+
+function string:strip()
+ return (self:gsub("^%s*(.-)%s*$", "%1"))
+end
+
+--~ function string.strip(str) -- slightly different
+--~ return (string.gsub(string.gsub(str,"^%s*(.-)%s*$","%1"),"%s+"," "))
+--~ end
+
+function string:is_empty()
+ return not self:find("%S")
+end
+
+function string:enhance(pattern,action)
+ local ok, n = true, 0
+ while ok do
+ ok = false
+ self = self:gsub(pattern, function(...)
+ ok, n = true, n + 1
+ return action(...)
+ end)
+ end
+ return self, n
+end
+
+--~ function string:enhance(pattern,action)
+--~ local ok, n = 0, 0
+--~ repeat
+--~ self, ok = self:gsub(pattern, function(...)
+--~ n = n + 1
+--~ return action(...)
+--~ end)
+--~ until ok == 0
+--~ return self, n
+--~ end
+
+--~ function string:to_hex()
+--~ if self then
+--~ return (self:gsub("(.)",function(c)
+--~ return string.format("%02X",c:byte())
+--~ end))
+--~ else
+--~ return ""
+--~ end
+--~ end
+
+--~ function string:from_hex()
+--~ if self then
+--~ return (self:gsub("(..)",function(c)
+--~ return string.char(tonumber(c,16))
+--~ end))
+--~ else
+--~ return ""
+--~ end
+--~ end
+
+string.chr_to_hex = { }
+string.hex_to_chr = { }
+
+for i=0,255 do
+ local c, h = string.char(i), string.format("%02X",i)
+ string.chr_to_hex[c], string.hex_to_chr[h] = h, c
+end
+
+--~ function string:to_hex()
+--~ if self then return (self:gsub("(.)",string.chr_to_hex)) else return "" end
+--~ end
+
+--~ function string:from_hex()
+--~ if self then return (self:gsub("(..)",string.hex_to_chr)) else return "" end
+--~ end
+
+function string:to_hex()
+ return ((self or ""):gsub("(.)",string.chr_to_hex))
+end
+
+function string:from_hex()
+ return ((self or ""):gsub("(..)",string.hex_to_chr))
+end
+
+if not string.characters then
+
+ local function nextchar(str, index)
+ index = index + 1
+ return (index <= #str) and index or nil, str:sub(index,index)
+ end
+ function string:characters()
+ return nextchar, self, 0
+ end
+ local function nextbyte(str, index)
+ index = index + 1
+ return (index <= #str) and index or nil, string.byte(str:sub(index,index))
+ end
+ function string:bytes()
+ return nextbyte, self, 0
+ end
+
+end
+
+--~ function string:padd(n,chr)
+--~ return self .. self.rep(chr or " ",n-#self)
+--~ end
+
+function string:rpadd(n,chr)
+ local m = n-#self
+ if m > 0 then
+ return self .. self.rep(chr or " ",m)
+ else
+ return self
+ end
+end
+
+function string:lpadd(n,chr)
+ local m = n-#self
+ if m > 0 then
+ return self.rep(chr or " ",m) .. self
+ else
+ return self
+ end
+end
+
+string.padd = string.rpadd
+
+function is_number(str)
+ return str:find("^[%-%+]?[%d]-%.?[%d+]$") == 1
+end
+
+--~ print(is_number("1"))
+--~ print(is_number("1.1"))
+--~ print(is_number(".1"))
+--~ print(is_number("-0.1"))
+--~ print(is_number("+0.1"))
+--~ print(is_number("-.1"))
+--~ print(is_number("+.1"))
+
+function string:split_settings() -- no {} handling, see l-aux for lpeg variant
+ if self:find("=") then
+ local t = { }
+ for k,v in self:gmatch("(%a+)=([^%,]*)") do
+ t[k] = v
+ end
+ return t
+ else
+ return nil
+ end
+end
+
+local patterns_escapes = {
+ ["-"] = "%-",
+ ["."] = "%.",
+ ["+"] = "%+",
+ ["*"] = "%*",
+ ["%"] = "%%",
+ ["("] = "%)",
+ [")"] = "%)",
+ ["["] = "%[",
+ ["]"] = "%]",
+}
+
+function string:pattesc()
+ return (self:gsub(".",patterns_escapes))
+end
+
+function string:tohash()
+ local t = { }
+ for s in self:gmatch("([^, ]+)") do -- lpeg
+ t[s] = true
+ end
+ return t
+end
diff --git a/Master/texmf-dist/tex/context/base/l-table.lua b/Master/texmf-dist/tex/context/base/l-table.lua
new file mode 100644
index 00000000000..ad2f1100186
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/l-table.lua
@@ -0,0 +1,646 @@
+-- filename : l-table.lua
+-- comment : split off from luat-lib
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+if not versions then versions = { } end versions['l-table'] = 1.001
+
+table.join = table.concat
+
+function table.strip(tab)
+ local lst = { }
+ for k, v in ipairs(tab) do
+ -- s = string.gsub(v, "^%s*(.-)%s*$", "%1")
+ s = v:gsub("^%s*(.-)%s*$", "%1")
+ if s == "" then
+ -- skip this one
+ else
+ lst[#lst+1] = s
+ end
+ end
+ return lst
+end
+
+--~ function table.sortedkeys(tab)
+--~ local srt = { }
+--~ for key,_ in pairs(tab) do
+--~ srt[#srt+1] = key
+--~ end
+--~ table.sort(srt)
+--~ return srt
+--~ end
+
+function table.sortedkeys(tab)
+ local srt, kind = { }, 0 -- 0=unknown 1=string, 2=number 3=mixed
+ for key,_ in pairs(tab) do
+ srt[#srt+1] = key
+ if kind == 3 then
+ -- no further check
+ else
+ local tkey = type(key)
+ if tkey == "string" then
+ -- if kind == 2 then kind = 3 else kind = 1 end
+ kind = (kind == 2 and 3) or 1
+ elseif tkey == "number" then
+ -- if kind == 1 then kind = 3 else kind = 2 end
+ kind = (kind == 1 and 3) or 2
+ else
+ kind = 3
+ end
+ end
+ end
+ if kind == 0 or kind == 3 then
+ table.sort(srt,function(a,b) return (tostring(a) < tostring(b)) end)
+ else
+ table.sort(srt)
+ end
+ return srt
+end
+
+function table.append(t, list)
+ for _,v in pairs(list) do
+ table.insert(t,v)
+ end
+end
+
+function table.prepend(t, list)
+ for k,v in pairs(list) do
+ table.insert(t,k,v)
+ end
+end
+
+function table.merge(t, ...) -- first one is target
+ t = t or {}
+ local lst = {...}
+ for i=1,#lst do
+ for k, v in pairs(lst[i]) do
+ t[k] = v
+ end
+ end
+ return t
+end
+
+function table.merged(...)
+ local tmp, lst = { }, {...}
+ for i=1,#lst do
+ for k, v in pairs(lst[i]) do
+ tmp[k] = v
+ end
+ end
+ return tmp
+end
+
+function table.imerge(t, ...)
+ local lst = {...}
+ for i=1,#lst do
+ local nst = lst[i]
+ for j=1,#nst do
+ t[#t+1] = nst[j]
+ end
+ end
+ return t
+end
+
+function table.imerged(...)
+ local tmp, lst = { }, {...}
+ for i=1,#lst do
+ local nst = lst[i]
+ for j=1,#nst do
+ tmp[#tmp+1] = nst[j]
+ end
+ end
+ return tmp
+end
+
+if not table.fastcopy then do
+
+ local type, pairs, getmetatable, setmetatable = type, pairs, getmetatable, setmetatable
+
+ local function fastcopy(old) -- fast one
+ if old then
+ local new = { }
+ for k,v in pairs(old) do
+ if type(v) == "table" then
+ new[k] = fastcopy(v) -- was just table.copy
+ else
+ new[k] = v
+ end
+ end
+ local mt = getmetatable(old)
+ if mt then
+ setmetatable(new,mt)
+ end
+ return new
+ else
+ return { }
+ end
+ end
+
+ table.fastcopy = fastcopy
+
+end end
+
+if not table.copy then do
+
+ local type, pairs, getmetatable, setmetatable = type, pairs, getmetatable, setmetatable
+
+ local function copy(t, tables) -- taken from lua wiki, slightly adapted
+ tables = tables or { }
+ local tcopy = {}
+ if not tables[t] then
+ tables[t] = tcopy
+ end
+ for i,v in pairs(t) do -- brrr, what happens with sparse indexed
+ if type(i) == "table" then
+ if tables[i] then
+ i = tables[i]
+ else
+ i = copy(i, tables)
+ end
+ end
+ if type(v) ~= "table" then
+ tcopy[i] = v
+ elseif tables[v] then
+ tcopy[i] = tables[v]
+ else
+ tcopy[i] = copy(v, tables)
+ end
+ end
+ local mt = getmetatable(t)
+ if mt then
+ setmetatable(tcopy,mt)
+ end
+ return tcopy
+ end
+
+ table.copy = copy
+
+end end
+
+-- rougly: copy-loop : unpack : sub == 0.9 : 0.4 : 0.45 (so in critical apps, use unpack)
+
+function table.sub(t,i,j)
+ return { unpack(t,i,j) }
+end
+
+function table.replace(a,b)
+ for k,v in pairs(b) do
+ a[k] = v
+ end
+end
+
+-- slower than #t on indexed tables (#t only returns the size of the numerically indexed slice)
+
+function table.is_empty(t)
+ return not t or not next(t)
+end
+
+function table.one_entry(t)
+ local n = next(t)
+ return n and not next(t,n)
+end
+
+function table.starts_at(t)
+ return ipairs(t,1)(t,0)
+end
+
+do
+
+ -- one of my first exercises in lua ...
+
+ -- 34.055.092 32.403.326 arabtype.tma
+ -- 1.620.614 1.513.863 lmroman10-italic.tma
+ -- 1.325.585 1.233.044 lmroman10-regular.tma
+ -- 1.248.157 1.158.903 lmsans10-regular.tma
+ -- 194.646 153.120 lmtypewriter10-regular.tma
+ -- 1.771.678 1.658.461 palatinosanscom-bold.tma
+ -- 1.695.251 1.584.491 palatinosanscom-regular.tma
+ -- 13.736.534 13.409.446 zapfinoextraltpro.tma
+
+ -- 13.679.038 11.774.106 arabtype.tmc
+ -- 886.248 754.944 lmroman10-italic.tmc
+ -- 729.828 466.864 lmroman10-regular.tmc
+ -- 688.482 441.962 lmsans10-regular.tmc
+ -- 128.685 95.853 lmtypewriter10-regular.tmc
+ -- 715.929 582.985 palatinosanscom-bold.tmc
+ -- 669.942 540.126 palatinosanscom-regular.tmc
+ -- 1.560.588 1.317.000 zapfinoextraltpro.tmc
+
+ table.serialize_functions = true
+ table.serialize_compact = true
+ table.serialize_inline = true
+
+ local function key(k)
+ if type(k) == "number" then -- or k:find("^%d+$") then
+ return "["..k.."]"
+ elseif noquotes and k:find("^%a[%a%d%_]*$") then
+ return k
+ else
+ return '["'..k..'"]'
+ end
+ end
+
+ local function simple_table(t)
+ if #t > 0 then
+ local n = 0
+ for _,v in pairs(t) do
+ n = n + 1
+ end
+ if n == #t then
+ local tt = { }
+ for i=1,#t do
+ local v = t[i]
+ local tv = type(v)
+ if tv == "number" or tv == "boolean" then
+ tt[#tt+1] = tostring(v)
+ elseif tv == "string" then
+ tt[#tt+1] = ("%q"):format(v)
+ else
+ tt = nil
+ break
+ end
+ end
+ return tt
+ end
+ end
+ return nil
+ end
+
+ local function serialize(root,name,handle,depth,level,reduce,noquotes,indexed)
+ handle = handle or print
+ reduce = reduce or false
+ if depth then
+ depth = depth .. " "
+ if indexed then
+ handle(("%s{"):format(depth))
+ else
+ handle(("%s%s={"):format(depth,key(name)))
+ end
+ else
+ depth = ""
+ local tname = type(name)
+ if tname == "string" then
+ if name == "return" then
+ handle("return {")
+ else
+ handle(name .. "={")
+ end
+ elseif tname == "number" then
+ handle("[" .. name .. "]={")
+ elseif tname == "boolean" then
+ if name then
+ handle("return {")
+ else
+ handle("{")
+ end
+ else
+ handle("t={")
+ end
+ end
+ if root and next(root) then
+ local compact = table.serialize_compact
+ local inline = compact and table.serialize_inline
+ local first, last = nil, 0 -- #root cannot be trusted here
+ if compact then
+ for k,v in ipairs(root) do -- NOT: for k=1,#root do (why)
+ if not first then first = k end
+ last = last + 1
+ end
+ end
+ for _,k in pairs(table.sortedkeys(root)) do
+ local v = root[k]
+ local t = type(v)
+ if compact and first and type(k) == "number" and k >= first and k <= last then
+ if t == "number" then
+ handle(("%s %s,"):format(depth,v))
+ elseif t == "string" then
+ if reduce and (v:find("^[%-%+]?[%d]-%.?[%d+]$") == 1) then
+ handle(("%s %s,"):format(depth,v))
+ else
+ handle(("%s %q,"):format(depth,v))
+ end
+ elseif t == "table" then
+ if not next(v) then
+ handle(("%s {},"):format(depth))
+ elseif inline then
+ local st = simple_table(v)
+ if st then
+ handle(("%s { %s },"):format(depth,table.concat(st,", ")))
+ else
+ serialize(v,k,handle,depth,level+1,reduce,noquotes,true)
+ end
+ else
+ serialize(v,k,handle,depth,level+1,reduce,noquotes,true)
+ end
+ elseif t == "boolean" then
+ handle(("%s %s,"):format(depth,tostring(v)))
+ elseif t == "function" then
+ if table.serialize_functions then
+ handle(('%s loadstring(%q),'):format(depth,string.dump(v)))
+ else
+ handle(('%s "function",'):format(depth))
+ end
+ else
+ handle(("%s %q,"):format(depth,tostring(v)))
+ end
+ elseif k == "__p__" then -- parent
+ if false then
+ handle(("%s __p__=nil,"):format(depth))
+ end
+ elseif t == "number" then
+ handle(("%s %s=%s,"):format(depth,key(k),v))
+ elseif t == "string" then
+ if reduce and (v:find("^[%-%+]?[%d]-%.?[%d+]$") == 1) then
+ handle(("%s %s=%s,"):format(depth,key(k),v))
+ else
+ handle(("%s %s=%q,"):format(depth,key(k),v))
+ end
+ elseif t == "table" then
+ if not next(v) then
+ handle(("%s %s={},"):format(depth,key(k)))
+ elseif inline then
+ local st = simple_table(v)
+ if st then
+ handle(("%s %s={ %s },"):format(depth,key(k),table.concat(st,", ")))
+ else
+ serialize(v,k,handle,depth,level+1,reduce,noquotes)
+ end
+ else
+ serialize(v,k,handle,depth,level+1,reduce,noquotes)
+ end
+ elseif t == "boolean" then
+ handle(("%s %s=%s,"):format(depth,key(k),tostring(v)))
+ elseif t == "function" then
+ if table.serialize_functions then
+ handle(('%s %s=loadstring(%q),'):format(depth,key(k),string.dump(v)))
+ else
+ handle(('%s %s="function",'):format(depth,key(k)))
+ end
+ else
+ handle(("%s %s=%q,"):format(depth,key(k),tostring(v)))
+ -- handle(('%s %s=loadstring(%q),'):format(depth,key(k),string.dump(function() return v end)))
+ end
+ end
+ if level > 0 then
+ handle(("%s},"):format(depth))
+ else
+ handle(("%s}"):format(depth))
+ end
+ else
+ handle(("%s}"):format(depth))
+ end
+ end
+
+ --~ name:
+ --~
+ --~ true : return { }
+ --~ false : { }
+ --~ nil : t = { }
+ --~ string : string = { }
+ --~ 'return' : return { }
+ --~ number : [number] = { }
+
+ function table.serialize(root,name,reduce,noquotes)
+ local t = { }
+ local function flush(s)
+ t[#t+1] = s
+ end
+ serialize(root, name, flush, nil, 0, reduce, noquotes)
+ return table.concat(t,"\n")
+ end
+
+ function table.tohandle(handle,root,name,reduce,noquotes)
+ serialize(root, name, handle, nil, 0, reduce, noquotes)
+ end
+
+ -- sometimes tables are real use (zapfino extra pro is some 85M) in which
+ -- case a stepwise serialization is nice; actually, we could consider:
+ --
+ -- for line in table.serializer(root,name,reduce,noquotes) do
+ -- ...(line)
+ -- end
+ --
+ -- so this is on the todo list
+
+ table.tofile_maxtab = 2*1024
+
+ function table.tofile(filename,root,name,reduce,noquotes)
+ local f = io.open(filename,'w')
+ if f then
+ local concat = table.concat
+ local maxtab = table.tofile_maxtab
+ if maxtab > 1 then
+ local t = { }
+ local function flush(s)
+ t[#t+1] = s
+ if #t > maxtab then
+ f:write(concat(t,"\n"),"\n") -- hm, write(sometable) should be nice
+ t = { }
+ end
+ end
+ serialize(root, name, flush, nil, 0, reduce, noquotes)
+ f:write(concat(t,"\n"),"\n")
+ else
+ local function flush(s)
+ f:write(s,"\n")
+ end
+ serialize(root, name, flush, nil, 0, reduce, noquotes)
+ end
+ f:close()
+ end
+ end
+
+end
+
+--~ t = {
+--~ b = "123",
+--~ a = "x",
+--~ c = 1.23,
+--~ d = "1.23",
+--~ e = true,
+--~ f = {
+--~ d = "1.23",
+--~ a = "x",
+--~ b = "123",
+--~ c = 1.23,
+--~ e = true,
+--~ f = {
+--~ e = true,
+--~ f = {
+--~ e = true
+--~ },
+--~ },
+--~ },
+--~ g = function() end
+--~ }
+
+--~ print(table.serialize(t), "\n")
+--~ print(table.serialize(t,"name"), "\n")
+--~ print(table.serialize(t,false), "\n")
+--~ print(table.serialize(t,true), "\n")
+--~ print(table.serialize(t,"name",true), "\n")
+--~ print(table.serialize(t,"name",true,true), "\n")
+
+do
+
+ local function flatten(t,f,complete)
+ for i=1,#t do
+ local v = t[i]
+ if type(v) == "table" then
+ if complete or type(v[1]) == "table" then
+ flatten(v,f,complete)
+ else
+ f[#f+1] = v
+ end
+ else
+ f[#f+1] = v
+ end
+ end
+ end
+
+ function table.flatten(t)
+ local f = { }
+ flatten(t,f,true)
+ return f
+ end
+
+ function table.unnest(t) -- bad name
+ local f = { }
+ flatten(t,f,false)
+ return f
+ end
+
+ table.flatten_one_level = table.unnest
+
+end
+
+function table.insert_before_value(t,value,str)
+ for i=1,#t do
+ if t[i] == value then
+ table.insert(t,i,str)
+ return
+ end
+ end
+ table.insert(t,1,str)
+end
+
+function table.insert_after_value(t,value,str)
+ for i=1,#t do
+ if t[i] == value then
+ table.insert(t,i+1,str)
+ return
+ end
+ end
+ t[#t+1] = str
+end
+
+function table.are_equal(a,b,n,m)
+ if #a == #b then
+ n = n or 1
+ m = m or #a
+ for i=n,m do
+ local ai, bi = a[i], b[i]
+ if (ai==bi) or (type(ai)=="table" and type(bi)=="table" and table.are_equal(ai,bi)) then
+ -- continue
+ else
+ return false
+ end
+ end
+ return true
+ else
+ return false
+ end
+end
+
+function table.compact(t)
+ if t then
+ for k,v in pairs(t) do
+ if not next(v) then
+ t[k] = nil
+ end
+ end
+ end
+end
+
+function table.tohash(t)
+ local h = { }
+ for _, v in pairs(t) do -- no ipairs here
+ h[v] = true
+ end
+ return h
+end
+
+function table.fromhash(t)
+ local h = { }
+ for k, v in pairs(t) do -- no ipairs here
+ if v then h[#h+1] = k end
+ end
+ return h
+end
+
+function table.contains(t, v)
+ if t then
+ for i=1, #t do
+ if t[i] == v then
+ return true
+ end
+ end
+ end
+ return false
+end
+
+function table.count(t)
+ local n, e = 0, next(t)
+ while e do
+ n, e = n + 1, next(t,e)
+ end
+ return n
+end
+
+function table.swapped(t)
+ local s = { }
+ for k, v in pairs(t) do
+ s[v] = k
+ end
+ return s
+end
+
+--~ function table.are_equal(a,b)
+--~ return table.serialize(a) == table.serialize(b)
+--~ end
+
+function table.clone(t,p) -- t is optional or nil or table
+ if not p then
+ t, p = { }, t or { }
+ elseif not t then
+ t = { }
+ end
+ setmetatable(t, { __index = function(_,key) return p[key] end })
+ return t
+end
+
+
+function table.hexed(t,seperator)
+ local tt = { }
+ for i=1,#t do tt[i] = string.format("0x%04X",t[i]) end
+ return table.concat(tt,seperator or " ")
+end
+
+function table.reverse_hash(h)
+ local r = { }
+ for k,v in pairs(h) do
+ r[v] = (k:gsub(" ","")):lower()
+ end
+ return r
+end
+
+function table.reverse(t)
+ local tt = { }
+ if #t > 0 then
+ for i=#t,1,-1 do
+ tt[#tt+1] = t[i]
+ end
+ end
+ return tt
+end
diff --git a/Master/texmf-dist/tex/context/base/l-tex.lua b/Master/texmf-dist/tex/context/base/l-tex.lua
new file mode 100644
index 00000000000..1a23c183e7b
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/l-tex.lua
@@ -0,0 +1,114 @@
+-- filename : l-tex.lua
+-- comment : split off from luat-lib
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+if not versions then versions = { } end versions['l-tex'] = 1.001
+
+if not number then number = { } end
+
+local dimenfactors = {
+ ["pt"] = 1/65536,
+ ["in"] = ( 100/ 7227)/65536,
+ ["cm"] = ( 254/ 7227)/65536,
+ ["mm"] = ( 254/72270)/65536,
+ ["sp"] = 1,
+ ["bp"] = ( 7200/ 7227)/65536,
+ ["pc"] = ( 1/ 12)/65536,
+ ["dd"] = ( 1157/ 1238)/65536,
+ ["cc"] = ( 1157/14856)/65536,
+ ["nd"] = (20320/21681)/65536,
+ ["nc"] = ( 5080/65043)/65536
+}
+
+local function todimen(n,unit,fmt)
+ if type(n) == 'string' then
+ return n
+ else
+ unit = unit or 'pt'
+ return string.format(fmt or "%.5g%s", n*dimenfactors[unit], unit)
+ end
+end
+
+number.todimen = todimen
+number.dimenfactors = dimenfactors
+
+function number.topoints (n) return todimen(n,"pt") end
+function number.toinches (n) return todimen(n,"in") end
+function number.tocentimeters (n) return todimen(n,"cm") end
+function number.tomillimeters (n) return todimen(n,"mm") end
+function number.toscaledpoints(n) return todimen(n,"sp") end
+function number.toscaledpoints(n) return n .. "sp" end
+function number.tobasepoints (n) return todimen(n,"bp") end
+function number.topicas (n) return todimen(n "pc") end
+function number.todidots (n) return todimen(n,"dd") end
+function number.tociceros (n) return todimen(n,"cc") end
+function number.tonewdidots (n) return todimen(n,"nd") end
+function number.tonewciceros (n) return todimen(n,"nc") end
+
+--~ for k,v in pairs{nil, "%.5f%s", "%.8g%s", "%.8f%s"} do
+--~ print(todimen(65536))
+--~ print(todimen( 256))
+--~ print(todimen(65536,'pt',v))
+--~ print(todimen( 256,'pt',v))
+--~ end
+
+-- todo: use different scratchdimen
+-- todo: use parser if no tex.dimen
+
+function string.todimen(str)
+ if type(str) == "number" then
+ return str
+ elseif str:find("^[%d%-%+%.]+$") then
+ return tonumber(str)
+--~ elseif tex then
+--~ tex.dimen[0] = str
+--~ return tex.dimen[0] or 0
+ else
+ local n, u = str:match("([%d%-%+%.]+)(%a%a)")
+ if n and u then
+ return n/dimenfactors[u]
+ else
+ return 0
+ end
+ end
+end
+
+--~ print(string.todimen("10000"))
+--~ print(string.todimen("10pt"))
+
+--~ See mk.pdf for an explanation of the following code:
+--~
+--~ function test(n)
+--~ lua.delay(function(...)
+--~ tex.sprint(string.format("pi: %s %s %s\\par",...))
+--~ end)
+--~ lua.delay(function(...)
+--~ tex.sprint(string.format("more pi: %s %s %s\\par",...))
+--~ end)
+--~ tex.sprint(string.format("\\setbox0=\\hbox{%s}",math.pi*n))
+--~ lua.flush(tex.wd[0],tex.ht[0],tex.dp[0])
+--~ end
+
+if lua then do
+
+ local delayed = { }
+
+ function lua.delay(f)
+ delayed[#delayed+1] = f
+ end
+
+ function lua.flush_delayed(...)
+ local t = delayed
+ delayed = { }
+ for i=1, #t do
+ t[i](...)
+ end
+ end
+
+ function lua.flush(...)
+ tex.sprint("\\directlua0{lua.flush_delayed(" .. table.concat({...},',') .. ")}")
+ end
+
+end end
diff --git a/Master/texmf-dist/tex/context/base/l-unicode.lua b/Master/texmf-dist/tex/context/base/l-unicode.lua
new file mode 100644
index 00000000000..d0c05bb8629
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/l-unicode.lua
@@ -0,0 +1,148 @@
+-- filename : l-unicode.lua
+-- comment : split off from luat-inp
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+if not versions then versions = { } end versions['l-unicode'] = 1.001
+if not unicode then unicode = { } end
+
+if not garbagecollector then
+ garbagecollector = {
+ push = function() collectgarbage("stop") end,
+ pop = function() collectgarbage("restart") end,
+ }
+end
+
+-- 0 EF BB BF UTF-8
+-- 1 FF FE UTF-16-little-endian
+-- 2 FE FF UTF-16-big-endian
+-- 3 FF FE 00 00 UTF-32-little-endian
+-- 4 00 00 FE FF UTF-32-big-endian
+
+unicode.utfname = {
+ [0] = 'utf-8',
+ [1] = 'utf-16-le',
+ [2] = 'utf-16-be',
+ [3] = 'utf-32-le',
+ [4] = 'utf-32-be'
+}
+
+function unicode.utftype(f) -- \000 fails !
+ local str = f:read(4)
+ if not str then
+ f:seek('set')
+ return 0
+ elseif str:find("^%z%z\254\255") then
+ return 4
+ elseif str:find("^\255\254%z%z") then
+ return 3
+ elseif str:find("^\254\255") then
+ f:seek('set',2)
+ return 2
+ elseif str:find("^\255\254") then
+ f:seek('set',2)
+ return 1
+ elseif str:find("^\239\187\191") then
+ f:seek('set',3)
+ return 0
+ else
+ f:seek('set')
+ return 0
+ end
+end
+
+function unicode.utf16_to_utf8(str, endian)
+ garbagecollector.push()
+ local result = { }
+ local tc, uc = table.concat, unicode.utf8.char
+ local tmp, n, m, p = { }, 0, 0, 0
+ -- lf | cr | crlf / (cr:13, lf:10)
+ local function doit()
+ if n == 10 then
+ if p ~= 13 then
+ result[#result+1] = tc(tmp,"")
+ tmp = { }
+ p = 0
+ end
+ elseif n == 13 then
+ result[#result+1] = tc(tmp,"")
+ tmp = { }
+ p = n
+ else
+ tmp[#tmp+1] = uc(n)
+ p = 0
+ end
+ end
+ for l,r in str:bytepairs() do
+ if endian then
+ n = l*256 + r
+ else
+ n = r*256 + l
+ end
+ if m > 0 then
+ n = (m-0xD800)*0x400 + (n-0xDC00) + 0x10000
+ m = 0
+ doit()
+ elseif n >= 0xD800 and n <= 0xDBFF then
+ m = n
+ else
+ doit()
+ end
+ end
+ if #tmp > 0 then
+ result[#result+1] = tc(tmp,"")
+ end
+ garbagecollector.pop()
+ return result
+end
+
+function unicode.utf32_to_utf8(str, endian)
+ garbagecollector.push()
+ local result = { }
+ local tc, uc = table.concat, unicode.utf8.char
+ local tmp, n, m, p = { }, 0, -1, 0
+ -- lf | cr | crlf / (cr:13, lf:10)
+ local function doit()
+ if n == 10 then
+ if p ~= 13 then
+ result[#result+1] = tc(tmp,"")
+ tmp = { }
+ p = 0
+ end
+ elseif n == 13 then
+ result[#result+1] = tc(tmp,"")
+ tmp = { }
+ p = n
+ else
+ tmp[#tmp+1] = uc(n)
+ p = 0
+ end
+ end
+ for a,b in str:bytepairs() do
+ if a and b then
+ if m < 0 then
+ if endian then
+ m = a*256*256*256 + b*256*256
+ else
+ m = b*256 + a
+ end
+ else
+ if endian then
+ n = m + a*256 + b
+ else
+ n = m + b*256*256*256 + a*256*256
+ end
+ m = -1
+ doit()
+ end
+ else
+ break
+ end
+ end
+ if #tmp > 0 then
+ result[#result+1] = tc(tmp,"")
+ end
+ garbagecollector.pop()
+ return result
+end
diff --git a/Master/texmf-dist/tex/context/base/l-url.lua b/Master/texmf-dist/tex/context/base/l-url.lua
new file mode 100644
index 00000000000..3bb2b1f11f4
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/l-url.lua
@@ -0,0 +1,103 @@
+-- filename : l-url.lua
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+if not versions then versions = { } end versions['l-url'] = 1.001
+if not url then url = { } end
+
+-- from the spec (on the web):
+--
+-- foo://example.com:8042/over/there?name=ferret#nose
+-- \_/ \______________/\_________/ \_________/ \__/
+-- | | | | |
+-- scheme authority path query fragment
+-- | _____________________|__
+-- / \ / \
+-- urn:example:animal:ferret:nose
+
+do
+
+ local function tochar(s)
+ return string.char(tonumber(s,16))
+ end
+
+ local colon, qmark, hash, slash, percent, endofstring = lpeg.P(":"), lpeg.P("?"), lpeg.P("#"), lpeg.P("/"), lpeg.P("%"), lpeg.P(-1)
+
+ local hexdigit = lpeg.R("09","AF","af")
+ local escaped = percent * lpeg.C(hexdigit * hexdigit) / tochar
+
+ local scheme = lpeg.Cs((escaped+(1-colon-slash-qmark-hash))^0) * colon + lpeg.Cc("")
+ local authority = slash * slash * lpeg.Cs((escaped+(1- slash-qmark-hash))^0) + lpeg.Cc("")
+ local path = slash * lpeg.Cs((escaped+(1- qmark-hash))^0) + lpeg.Cc("")
+ local query = qmark * lpeg.Cs((escaped+(1- hash))^0) + lpeg.Cc("")
+ local fragment = hash * lpeg.Cs((escaped+(1- endofstring))^0) + lpeg.Cc("")
+
+ local parser = lpeg.Ct(scheme * authority * path * query * fragment)
+
+ function url.split(str)
+ return (type(str) == "string" and parser:match(str)) or str
+ end
+
+end
+
+function url.hashed(str)
+ local s = url.split(str)
+ return {
+ scheme = (s[1] ~= "" and s[1]) or "file",
+ authority = s[2],
+ path = s[3],
+ query = s[4],
+ fragment = s[5],
+ original = str
+ }
+end
+
+function url.filename(filename)
+ local t = url.hashed(filename)
+ return (t.scheme == "file" and t.path:gsub("^/([a-zA-Z])([:|])/)","%1:")) or filename
+end
+
+function url.query(str)
+ if type(str) == "string" then
+ local t = { }
+ for k, v in str:gmatch("([^&=]*)=([^&=]*)") do
+ t[k] = v
+ end
+ return t
+ else
+ return str
+ end
+end
+
+--~ print(url.filename("file:///c:/oeps.txt"))
+--~ print(url.filename("c:/oeps.txt"))
+--~ print(url.filename("file:///oeps.txt"))
+--~ print(url.filename("file:///etc/test.txt"))
+--~ print(url.filename("/oeps.txt"))
+
+-- from the spec on the web (sort of):
+--~
+--~ function test(str)
+--~ print(table.serialize(url.hashed(str)))
+--~ end
+---~
+--~ test("%56pass%20words")
+--~ test("file:///c:/oeps.txt")
+--~ test("file:///c|/oeps.txt")
+--~ test("file:///etc/oeps.txt")
+--~ test("file://./etc/oeps.txt")
+--~ test("file:////etc/oeps.txt")
+--~ test("ftp://ftp.is.co.za/rfc/rfc1808.txt")
+--~ test("http://www.ietf.org/rfc/rfc2396.txt")
+--~ test("ldap://[2001:db8::7]/c=GB?objectClass?one#what")
+--~ test("mailto:John.Doe@example.com")
+--~ test("news:comp.infosystems.www.servers.unix")
+--~ test("tel:+1-816-555-1212")
+--~ test("telnet://192.0.2.16:80/")
+--~ test("urn:oasis:names:specification:docbook:dtd:xml:4.1.2")
+--~ test("/etc/passwords")
+--~ test("http://www.pragma-ade.com/spaced%20name")
+
+--~ test("zip:///oeps/oeps.zip#bla/bla.tex")
+--~ test("zip:///oeps/oeps.zip?bla/bla.tex")
diff --git a/Master/texmf-dist/tex/context/base/l-utils.lua b/Master/texmf-dist/tex/context/base/l-utils.lua
new file mode 100644
index 00000000000..ec8e39b9428
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/l-utils.lua
@@ -0,0 +1,132 @@
+-- filename : l-utils.lua
+-- comment : split off from luat-lib
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+if not versions then versions = { } end versions['l-utils'] = 1.001
+
+if not utils then utils = { } end
+if not utils.merger then utils.merger = { } end
+if not utils.lua then utils.lua = { } end
+
+utils.merger.m_begin = "begin library merge"
+utils.merger.m_end = "end library merge"
+utils.merger.pattern =
+ "%c+" ..
+ "%-%-%s+" .. utils.merger.m_begin ..
+ "%c+(.-)%c+" ..
+ "%-%-%s+" .. utils.merger.m_end ..
+ "%c+"
+
+function utils.merger._self_fake_()
+ return
+ "-- " .. "created merged file" .. "\n\n" ..
+ "-- " .. utils.merger.m_begin .. "\n\n" ..
+ "-- " .. utils.merger.m_end .. "\n\n"
+end
+
+function utils.report(...)
+ print(...)
+end
+
+function utils.merger._self_load_(name)
+ local f, data = io.open(name), ""
+ if f then
+ data = f:read("*all")
+ f:close()
+ end
+ return data or ""
+end
+
+function utils.merger._self_save_(name, data)
+ if data ~= "" then
+ local f = io.open(name,'w')
+ if f then
+ f:write(data)
+ f:close()
+ end
+ end
+end
+
+function utils.merger._self_swap_(data,code)
+ if data ~= "" then
+ return (data:gsub(utils.merger.pattern, function(s)
+ return "\n\n" .. "-- "..utils.merger.m_begin .. "\n" .. code .. "\n" .. "-- "..utils.merger.m_end .. "\n\n"
+ end, 1))
+ else
+ return ""
+ end
+end
+
+function utils.merger._self_libs_(libs,list)
+ local result, f = { }, nil
+ if type(libs) == 'string' then libs = { libs } end
+ if type(list) == 'string' then list = { list } end
+ for _, lib in ipairs(libs) do
+ for _, pth in ipairs(list) do
+ local name = string.gsub(pth .. "/" .. lib,"\\","/")
+ f = io.open(name)
+ if f then
+ -- utils.report("merging library",name)
+ result[#result+1] = f:read("*all")
+ f:close()
+ list = { pth } -- speed up the search
+ break
+ else
+ -- utils.report("no library",name)
+ end
+ end
+ end
+ return table.concat(result, "\n\n")
+end
+
+function utils.merger.selfcreate(libs,list,target)
+ if target then
+ utils.merger._self_save_(
+ target,
+ utils.merger._self_swap_(
+ utils.merger._self_fake_(),
+ utils.merger._self_libs_(libs,list)
+ )
+ )
+ end
+end
+
+function utils.merger.selfmerge(name,libs,list,target)
+ utils.merger._self_save_(
+ target or name,
+ utils.merger._self_swap_(
+ utils.merger._self_load_(name),
+ utils.merger._self_libs_(libs,list)
+ )
+ )
+end
+
+function utils.merger.selfclean(name)
+ utils.merger._self_save_(
+ name,
+ utils.merger._self_swap_(
+ utils.merger._self_load_(name),
+ ""
+ )
+ )
+end
+
+utils.lua.compile_strip = true
+
+function utils.lua.compile(luafile, lucfile, cleanup)
+ -- utils.report("compiling",luafile,"into",lucfile)
+ os.remove(lucfile)
+ local command = "-o " .. string.quote(lucfile) .. " " .. string.quote(luafile)
+ if utils.lua.compile_strip then
+ command = "-s " .. command
+ end
+ local done = (os.spawn("texluac " .. command) == 0) or (os.spawn("luac " .. command) == 0)
+ if done and cleanup and lfs.isfile(lucfile) and lfs.isfile(luafile) then
+ -- utils.report("removing",luafile)
+ os.remove(luafile)
+ end
+ return done
+end
+
diff --git a/Master/texmf-dist/tex/context/base/l-xml-edu.lua b/Master/texmf-dist/tex/context/base/l-xml-edu.lua
new file mode 100644
index 00000000000..5aba4604349
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/l-xml-edu.lua
@@ -0,0 +1,381 @@
+if not modules then modules = { } end modules ['l-xml-edu'] = {
+ version = 1.001,
+ comment = "this module is the basis for the lxml-* ones",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+--[[ldx--
+<p>This module contains older code thatwe keep around for educational
+purposes. Here you find the find based xml and lpath parsers.</p>
+--ldx]]--
+
+if false then
+
+ do
+
+ -- Loading 12 cont-*.xml and keys-*.xml files totaling to 2.62 MBytes takes 1.1 sec
+ -- on a windows vista laptop with dual core 7600 (2.3 Ghz), which is not that bad.
+ -- Of this half time is spent on doctype etc parsing.
+
+ local doctype_patterns = {
+ "<!DOCTYPE%s+(.-%s+PUBLIC%s+%b\"\"%s+%b\"\"%s+%b[])%s*>",
+ "<!DOCTYPE%s+(.-%s+PUBLIC%s+%b\"\"%s+%b\"\")%s*>",
+ "<!DOCTYPE%s+(.-%s+SYSTEM%s+%b\"\"%s+%b[])%s*>",
+ "<!DOCTYPE%s+(.-%s+SYSTEM%s+%b\"\")%s*>",
+ "<!DOCTYPE%s+(.-%s%b[])%s*>",
+ "<!DOCTYPE%s+(.-)%s*>"
+ }
+
+ -- We assume no "<" which is the lunatic part of the xml spec
+ -- especially since ">" is permitted; otherwise we need a char
+ -- by char parser ... more something for later ... normally
+ -- entities will be used anyway.
+
+ -- data = data:gsub(nothing done) is still a copy so we find first
+
+ local function prepare(data,text)
+ -- pack (for backward compatibility)
+ if type(data) == "table" then
+ data = table.concat(data,"")
+ end
+ -- CDATA
+ if data:find("<!%[CDATA%[") then
+ data = data:gsub("<!%[CDATA%[(.-)%]%]>", function(txt)
+ text[#text+1] = txt or ""
+ return string.format("<@cd@>%s</@cd@>",#text)
+ end)
+ end
+ -- DOCTYPE
+ if data:find("<!DOCTYPE ") then
+ data = data:gsub("^(.-)(<[^!?])", function(a,b)
+ if a:find("<!DOCTYPE ") then -- ?
+ for _,v in ipairs(doctype_patterns) do
+ a = a:gsub(v, function(d)
+ text[#text+1] = d or ""
+ return string.format("<@dt@>%s</@dt@>",#text)
+ end)
+ end
+ end
+ return a .. b
+ end,1)
+ end
+ -- comment / does not catch doctype
+ if data:find("<!%-%-") then
+ data = data:gsub("<!%-%-(.-)%-%->", function(txt)
+ text[#text+1] = txt or ""
+ return string.format("<@cm@>%s</@cm@>",#text)
+ end)
+ end
+ -- processing instructions / altijd 1
+ if data:find("<%?") then
+ data = data:gsub("<%?(.-)%?>", function(txt)
+ text[#text+1] = txt or ""
+ return string.format("<@pi@>%s</@pi@>",#text)
+ end)
+ end
+ return data, text
+ end
+
+ -- maybe we will move the @tg@ stuff to a dedicated key, say 'st'; this will speed up
+ -- serializing and testing
+
+ function xml.convert(data,no_root,collapse)
+ local crap = { }
+ data, crap = prepare(data, crap)
+ local nsremap = xml.xmlns
+ local remove = table.remove
+ local stack, top = {}, {}
+ local i, j, errorstr = 1, 1, nil
+ stack[#stack+1] = top
+ top.dt = { }
+ local dt = top.dt
+ local mt = { __tostring = xml.text }
+ local xmlns = { }
+ while true do
+ local ni, first, attributes, last, fulltag, resolved
+ ni, j, first, fulltag, attributes, last = data:find("<(/-)([^%s>/]+)%s*([^>]-)%s*(/-)>", j)
+ if not ni then break end
+ local namespace, tag = fulltag:match("^(.-):(.+)$")
+ if attributes ~= "" then
+ local t = {}
+ for ns, tag, _, value in attributes:gmatch("(.-):?(.+)=([\"\'])(.-)%3") do -- . was %w
+ if tag == "xmlns" then -- not ok yet
+ xmlns[#xmlns+1] = xml.resolvens(value)
+ t[tag] = value
+ elseif ns == "xmlns" then
+ xml.checkns(tag,value)
+ t["xmlns:" .. tag] = value
+ else
+ t[tag] = value
+ end
+ end
+ attributes = t
+ else
+ attributes = { }
+ end
+ if namespace then -- realtime remapping
+ resolved = nsremap[namespace] or namespace
+ else
+ namespace, tag = "", fulltag
+ resolved = xmlns[#xmlns]
+ end
+ local text = data:sub(i, ni-1)
+ if text == "" or (collapse and text:find("^%s*$")) then
+ -- no need for empty text nodes, beware, also packs <a>x y z</a>
+ -- so is not that useful unless used with empty elements
+ else
+ dt[#dt+1] = text
+ end
+ if first == "/" then
+ -- end tag
+ local toclose = remove(stack) -- remove top
+ top = stack[#stack]
+ if #stack < 1 then
+ errorstr = string.format("nothing to close with %s", tag)
+ break
+ elseif toclose.tg ~= tag then -- no namespace check
+ errorstr = string.format("unable to close %s with %s", toclose.tg, tag)
+ break
+ end
+ if tag:find("^@..@$") then
+ dt[1] = crap[tonumber(dt[1])] or ""
+ end
+ dt = top.dt
+ dt[#dt+1] = toclose
+ if attributes.xmlns then
+ remove(xmlns) -- ?
+ end
+ elseif last == "/" then
+ -- empty element tag
+ dt[#dt+1] = { ns = namespace, rn = resolved, tg = tag, dt = { }, at = attributes, __p__ = top }
+ setmetatable(top, mt)
+ else
+ -- begin tag
+ top = { ns = namespace, rn = resolved, tg = tag, dt = { }, at = attributes, __p__ = stack[#stack] }
+ setmetatable(top, mt)
+ dt = top.dt
+ stack[#stack+1] = top
+ end
+ i = j + 1
+ end
+ if not errorstr then
+ local text = data:sub(i)
+ if dt and not text:find("^%s*$") then
+ dt[#dt+1] = text
+ end
+ if #stack > 1 then
+ errorstr = string.format("unclosed %s", stack[#stack].tg)
+ end
+ end
+ if errorstr then
+ stack = { { tg = "error", dt = { errorstr } } }
+ setmetatable(stack, mt)
+ end
+ if no_root then
+ return stack[1]
+ else
+ local t = { ns = "", tg = '@rt@', dt = stack[1].dt }
+ setmetatable(t, mt)
+ for k,v in ipairs(t.dt) do
+ if type(v) == "table" and v.tg ~= "@pi@" and v.tg ~= "@dt@" and v.tg ~= "@cm@" then
+ t.ri = k -- rootindex
+ break
+ end
+ end
+ return t
+ end
+ end
+
+ end
+
+ --~ Y a/b
+ --~ Y /a/b
+ --~ Y a/*/b
+ --~ Y a//b
+ --~ Y child::
+ --~ Y .//
+ --~ Y ..
+ --~ N id("tag")
+ --~ Y parent::
+ --~ Y child::
+ --~ N preceding-sibling:: (same name)
+ --~ N following-sibling:: (same name)
+ --~ N preceding-sibling-of-self:: (same name)
+ --~ N following-sibling-or-self:: (same name)
+ --~ N ancestor::
+ --~ N descendent::
+ --~ N preceding::
+ --~ N following::
+ --~ N self::node()
+ --~ N node() == alles
+ --~ N a[position()=5]
+ --~ Y a[5]
+ --~ Y a[-5]
+ --~ N a[first()]
+ --~ N a[last()]
+ --~ Y a/(b|c|d)/e/f
+ --~ Y a/!(b|c|d)/e/f
+ --~ N (c/d|e)
+ --~ Y a/b[@bla]
+ --~ Y a/b[@bla='oeps']
+ --~ Y a/b[@bla=='oeps']
+ --~ Y a/b[@bla<>'oeps']
+ --~ Y a/b[@bla!='oeps']
+ --~ Y a/b/@bla
+ --~ Y a['string']
+ --~ Y ^/a/c (root)
+ --~ Y ^^/a/c (docroot)
+ --~ Y root::a/c (docroot)
+ --~ no wild card functions (yet)
+ --~ s = "/a//b/*/(c|d|e)/(f|g)/h[4]/h/child::i/j/(a/b)/p[-1]/q[4]/ancestor::q/r/../s/./t[@bla='true']/k"
+ -- // == /**/
+ -- / = ^ (root)
+
+ do
+
+ function analyze(str)
+ if not str then
+ return ""
+ else
+ local tmp, result, map, key = { }, { }, { }, str
+ str = str:gsub("(%b[])", function(s) tmp[#tmp+1] = s return '[['..#tmp..']]' end)
+ str = str:gsub("(%b())", function(s) tmp[#tmp+1] = s return '[['..#tmp..']]' end)
+ str = str:gsub("(%^+)([^/])", "%1/%2")
+ str = str:gsub("//+", "/**/")
+ str = str:gsub(".*root::", "^/")
+ str = str:gsub("child::", "")
+ str = str:gsub("parent::", "../")
+ str = str:gsub("self::", "./")
+ str = str:gsub("^/", "^/")
+ for s in str:gmatch("([^/]+)") do
+ s = s:gsub("%[%[(%d+)%]%]",function(n) return tmp[tonumber(n)] end)
+ result[#result+1] = s
+ end
+ return result
+ end
+ end
+
+ function compose(result)
+ if not result or #result == 0 then
+ -- wildcard
+ return true
+ elseif #result == 1 then
+ local r = result[1][1]
+ if r == "14" or r == "15" then
+ -- wildcard
+ return true
+ elseif r == "12" then
+ -- root
+ return false
+ end
+ end
+ local map = { }
+ for r=1,#result do
+ local ri = result[r]
+ if ri == "." then
+ -- skip
+ elseif ri == ".." then
+ map[#map+1] = { 11 }
+ elseif ri == "^" then
+ map[#map+1] = { 12 }
+ elseif ri == "^^" then
+ map[#map+1] = { 13 }
+ elseif ri == "*" then
+ map[#map+1] = { 14 }
+ elseif ri == "**" then
+ map[#map+1] = { 15 }
+ else
+ local negate, m = ri:match("^(!*)%((.*)%)$") -- (a|b|c)
+ if m or ri:find('|') then
+ m = m or ri
+ if m:find("[%[%]%(%)/]") then -- []()/
+ -- error
+ else
+ local t = { (negate and #negate>0 and 25) or 21 }
+ for s in m:gmatch("([^|]+)") do
+ local ns, tg = s:match("^(.-):?([^:]+)$")
+ if ns == "*" then ns = true end
+ t[#t+1] = ns
+ t[#t+1] = tg
+ end
+ map[#map+1] = t
+ end
+ else
+ local s, f = ri:match("^(.-)%[%s*(.+)%s*%]$") --aaa[bbb]
+ if s and f then
+ local ns, tg = s:match("^(.-):?([^:]+)$")
+ local at, op, vl = f:match("^@(.-)([!=<>]?)([^!=<>]+)$") -- [@a=='b']
+ if ns == "*" then ns = true end
+ if vl then
+ if op and op ~= "" then
+ if op == '=' or op == '==' then
+ map[#map+1] = { 22, ns, tg, at, (vl:gsub("^([\'\"])(.*)%1$","%2")) }
+ elseif op == '<>' or op == '!=' then
+ map[#map+1] = { 23, ns, tg, at, (vl:gsub("^([\'\"])(.*)%1$","%2")) }
+ else
+ -- error
+ end
+ elseif vl ~= "" then -- [@whatever]
+ map[#map+1] = { 26, ns, tg, vl }
+ else
+ -- error
+ end
+ -- elseif f:find("^([%-%+%d]+)$") then -- [123]
+ elseif f:find("^([-+%d]+)$") then -- [123]
+ map[#map+1] = { 30, ns, tg, tonumber(f) }
+ else -- [whatever]
+ map[#map+1] = { 27, ns, tg, (f:gsub("^([\'\"])(.*)%1$","%2")) }
+ end
+ else
+ local pi = ri:match("^pi::(.-)$")
+ if pi then
+ map[#map+1] = { 40, pi }
+ else
+ local negate, ns, tg = ri:match("^(!-)(.-):?([^:]+)$")
+ map[#map+1] = { (negate and #negate>0 and 24) or 20, ns, tg }
+ end
+ end
+ end
+ end
+ end
+ -- if we have a symbol, we can prepend that to the string, which is faster
+ local mm = map[1] or { }
+ local r = mm[1] or 0
+ if #map == 1 then
+ if r == 14 or r == 15 then
+ -- wildcard
+ return true
+ elseif r == 12 then
+ -- root
+ return false
+ end
+ end
+ if r ~= 11 and r ~= 12 and r ~= 13 and r ~= 14 and r ~= 15 then
+ table.insert(map, 1, { 16 })
+ end
+ return map
+ end
+
+ cache = { }
+
+ function xml.lpath(pattern)
+ if type(pattern) == "string" then
+ local result = cache[pattern]
+ if not result then
+ result = compose(analyze(pattern))
+ cache[pattern] = result
+ end
+ if xml.trace_lpath then
+ xml.lshow(result)
+ end
+ return result
+ else
+ return pattern
+ end
+ end
+
+ end
+
+end
diff --git a/Master/texmf-dist/tex/context/base/l-xml.lua b/Master/texmf-dist/tex/context/base/l-xml.lua
new file mode 100644
index 00000000000..b4e151ec32e
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/l-xml.lua
@@ -0,0 +1,2315 @@
+if not modules then modules = { } end modules ['l-xml'] = {
+ version = 1.001,
+ comment = "this module is the basis for the lxml-* ones",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- RJ: key=value ... lpeg.Ca(lpeg.Cc({}) * (pattern-producing-key-and-value / rawset)^0)
+
+-- some code may move to l-xmlext
+
+--[[ldx--
+<p>The parser used here is inspired by the variant discussed in the lua book, but
+handles comment and processing instructions, has a different structure, provides
+parent access; a first version used different tricky but was less optimized to we
+went this route. First we had a find based parser, now we have an <l n='lpeg'/> based one.
+The find based parser can be found in l-xml-edu.lua along with other older code.</p>
+
+<p>Expecially the lpath code is experimental, we will support some of xpath, but
+only things that make sense for us; as compensation it is possible to hook in your
+own functions. Apart from preprocessing content for <l n='context'/> we also need
+this module for process management, like handling <l n='ctx'/> and <l n='rlx'/>
+files.</p>
+
+<typing>
+a/b/c /*/c
+a/b/c/first() a/b/c/last() a/b/c/index(n) a/b/c/index(-n)
+a/b/c/text() a/b/c/text(1) a/b/c/text(-1) a/b/c/text(n)
+</typing>
+
+<p>Beware, the interface may change. For instance at, ns, tg, dt may get more
+verbose names. Once the code is stable we will also remove some tracing and
+optimize the code.</p>
+--ldx]]--
+
+xml = xml or { }
+tex = tex or { }
+
+xml.trace_lpath = false
+xml.trace_print = false
+xml.trace_remap = false
+
+local format, concat = string.format, table.concat
+
+--~ local pairs, next, type = pairs, next, type
+
+-- todo: some things per xml file, liek namespace remapping
+
+--[[ldx--
+<p>First a hack to enable namespace resolving. A namespace is characterized by
+a <l n='url'/>. The following function associates a namespace prefix with a
+pattern. We use <l n='lpeg'/>, which in this case is more than twice as fast as a
+find based solution where we loop over an array of patterns. Less code and
+much cleaner.</p>
+--ldx]]--
+
+xml.xmlns = xml.xmlns or { }
+
+do
+
+ local check = lpeg.P(false)
+ local parse = check
+
+ --[[ldx--
+ <p>The next function associates a namespace prefix with an <l n='url'/>. This
+ normally happens independent of parsing.</p>
+
+ <typing>
+ xml.registerns("mml","mathml")
+ </typing>
+ --ldx]]--
+
+ function xml.registerns(namespace, pattern) -- pattern can be an lpeg
+ check = check + lpeg.C(lpeg.P(pattern:lower())) / namespace
+ parse = lpeg.P { lpeg.P(check) + 1 * lpeg.V(1) }
+ end
+
+ --[[ldx--
+ <p>The next function also registers a namespace, but this time we map a
+ given namespace prefix onto a registered one, using the given
+ <l n='url'/>. This used for attributes like <t>xmlns:m</t>.</p>
+
+ <typing>
+ xml.checkns("m","http://www.w3.org/mathml")
+ </typing>
+ --ldx]]--
+
+ function xml.checkns(namespace,url)
+ local ns = parse:match(url:lower())
+ if ns and namespace ~= ns then
+ xml.xmlns[namespace] = ns
+ end
+ end
+
+ --[[ldx--
+ <p>Next we provide a way to turn an <l n='url'/> into a registered
+ namespace. This used for the <t>xmlns</t> attribute.</p>
+
+ <typing>
+ resolvedns = xml.resolvens("http://www.w3.org/mathml")
+ </typing>
+
+ This returns <t>mml</t>.
+ --ldx]]--
+
+ function xml.resolvens(url)
+ return parse:match(url:lower()) or ""
+ end
+
+ --[[ldx--
+ <p>A namespace in an element can be remapped onto the registered
+ one efficiently by using the <t>xml.xmlns</t> table.</p>
+ --ldx]]--
+
+end
+
+--[[ldx--
+<p>This version uses <l n='lpeg'/>. We follow the same approach as before, stack and top and
+such. This version is about twice as fast which is mostly due to the fact that
+we don't have to prepare the stream for cdata, doctype etc etc. This variant is
+is dedicated to Luigi Scarso, who challenged me with 40 megabyte <l n='xml'/> files that
+took 12.5 seconds to load (1.5 for file io and the rest for tree building). With
+the <l n='lpeg'/> implementation we got that down to less 7.3 seconds. Loading the 14
+<l n='context'/> interface definition files (2.6 meg) went down from 1.05 seconds to 0.55.</p>
+
+<p>Next comes the parser. The rather messy doctype definition comes in many
+disguises so it is no surprice that later on have to dedicate quite some
+<l n='lpeg'/> code to it.</p>
+
+<typing>
+<!DOCTYPE Something PUBLIC "... ..." "..." [ ... ] >
+<!DOCTYPE Something PUBLIC "... ..." "..." >
+<!DOCTYPE Something SYSTEM "... ..." [ ... ] >
+<!DOCTYPE Something SYSTEM "... ..." >
+<!DOCTYPE Something [ ... ] >
+<!DOCTYPE Something >
+</typing>
+
+<p>The code may look a bit complex but this is mostly due to the fact that we
+resolve namespaces and attach metatables. There is only one public function:</p>
+
+<typing>
+local x = xml.convert(somestring)
+</typing>
+
+<p>An optional second boolean argument tells this function not to create a root
+element.</p>
+--ldx]]--
+
+xml.strip_cm_and_dt = false -- an extra global flag, in case we have many includes
+
+do
+
+ -- not just one big nested table capture (lpeg overflow)
+
+ local remove, nsremap, resolvens = table.remove, xml.xmlns, xml.resolvens
+
+ local stack, top, dt, at, xmlns, errorstr, entities = {}, {}, {}, {}, {}, nil, {}
+
+ local mt = { __tostring = xml.text }
+
+ function xml.check_error(top,toclose)
+ return ""
+ end
+
+ local strip = false
+ local cleanup = false
+
+ function xml.set_text_cleanup(fnc)
+ cleanup = fnc
+ end
+
+ local function add_attribute(namespace,tag,value)
+ if tag == "xmlns" then
+ xmlns[#xmlns+1] = resolvens(value)
+ at[tag] = value
+ elseif namespace == "xmlns" then
+ xml.checkns(tag,value)
+ at["xmlns:" .. tag] = value
+ else
+ at[tag] = value
+ end
+ end
+ local function add_begin(spacing, namespace, tag)
+ if #spacing > 0 then
+ dt[#dt+1] = spacing
+ end
+ local resolved = (namespace == "" and xmlns[#xmlns]) or nsremap[namespace] or namespace
+ top = { ns=namespace or "", rn=resolved, tg=tag, at=at, dt={}, __p__ = stack[#stack] }
+ setmetatable(top, mt)
+ dt = top.dt
+ stack[#stack+1] = top
+ at = { }
+ end
+ local function add_end(spacing, namespace, tag)
+ if #spacing > 0 then
+ dt[#dt+1] = spacing
+ end
+ local toclose = remove(stack)
+ top = stack[#stack]
+ if #stack < 1 then
+ errorstr = format("nothing to close with %s %s", tag, xml.check_error(top,toclose) or "")
+ elseif toclose.tg ~= tag then -- no namespace check
+ errorstr = format("unable to close %s with %s %s", toclose.tg, tag, xml.check_error(top,toclose) or "")
+ end
+ dt = top.dt
+ dt[#dt+1] = toclose
+ if at.xmlns then
+ remove(xmlns)
+ end
+ end
+ local function add_empty(spacing, namespace, tag)
+ if #spacing > 0 then
+ dt[#dt+1] = spacing
+ end
+ local resolved = (namespace == "" and xmlns[#xmlns]) or nsremap[namespace] or namespace
+ top = stack[#stack]
+ dt = top.dt
+ local t = { ns=namespace or "", rn=resolved, tg=tag, at=at, dt={}, __p__ = top }
+ dt[#dt+1] = t
+ setmetatable(t, mt)
+ at = { }
+ if at.xmlns then
+ remove(xmlns)
+ end
+ end
+ local function add_text(text)
+ if cleanup and #text > 0 then
+ dt[#dt+1] = cleanup(text)
+ else
+ dt[#dt+1] = text
+ end
+ end
+ local function add_special(what, spacing, text)
+ if #spacing > 0 then
+ dt[#dt+1] = spacing
+ end
+ if strip and (what == "@cm@" or what == "@dt@") then
+ -- forget it
+ else
+ dt[#dt+1] = { special=true, ns="", tg=what, dt={text} }
+ end
+ end
+ local function set_message(txt)
+ errorstr = "garbage at the end of the file: " .. txt:gsub("([ \n\r\t]*)","")
+ end
+
+ local P, S, R, C, V = lpeg.P, lpeg.S, lpeg.R, lpeg.C, lpeg.V
+
+ local space = S(' \r\n\t')
+ local open = P('<')
+ local close = P('>')
+ local squote = S("'")
+ local dquote = S('"')
+ local equal = P('=')
+ local slash = P('/')
+ local colon = P(':')
+ local valid = R('az', 'AZ', '09') + S('_-.')
+ local name_yes = C(valid^1) * colon * C(valid^1)
+ local name_nop = C(P(true)) * C(valid^1)
+ local name = name_yes + name_nop
+
+ local utfbom = P('\000\000\254\255') + P('\255\254\000\000') +
+ P('\255\254') + P('\254\255') + P('\239\187\191') -- no capture
+
+ local spacing = C(space^0)
+ local justtext = C((1-open)^1)
+ local somespace = space^1
+ local optionalspace = space^0
+
+ local value = (squote * C((1 - squote)^0) * squote) + (dquote * C((1 - dquote)^0) * dquote)
+ local attribute = (somespace * name * optionalspace * equal * optionalspace * value) / add_attribute
+ local attributes = attribute^0
+
+ local text = justtext / add_text
+ local balanced = P { "[" * ((1 - S"[]") + V(1))^0 * "]" } -- taken from lpeg manual, () example
+
+ local emptyelement = (spacing * open * name * attributes * optionalspace * slash * close) / add_empty
+ local beginelement = (spacing * open * name * attributes * optionalspace * close) / add_begin
+ local endelement = (spacing * open * slash * name * optionalspace * close) / add_end
+
+ local begincomment = open * P("!--")
+ local endcomment = P("--") * close
+ local begininstruction = open * P("?")
+ local endinstruction = P("?") * close
+ local begincdata = open * P("![CDATA[")
+ local endcdata = P("]]") * close
+
+ local someinstruction = C((1 - endinstruction)^0)
+ local somecomment = C((1 - endcomment )^0)
+ local somecdata = C((1 - endcdata )^0)
+
+ function entity(k,v) entities[k] = v end
+
+ local begindoctype = open * P("!DOCTYPE")
+ local enddoctype = close
+ local beginset = P("[")
+ local endset = P("]")
+ local doctypename = C((1-somespace)^0)
+ local elementdoctype = optionalspace * P("<!ELEMENT") * (1-close)^0 * close
+ local entitydoctype = optionalspace * P("<!ENTITY") * somespace * (doctypename * somespace * value)/entity * optionalspace * close
+ local publicdoctype = doctypename * somespace * P("PUBLIC") * somespace * value * somespace * value * somespace
+ local systemdoctype = doctypename * somespace * P("SYSTEM") * somespace * value * somespace
+ local definitiondoctype= doctypename * somespace * beginset * P(elementdoctype + entitydoctype)^0 * optionalspace * endset
+ local simpledoctype = (1-close)^1 -- * balanced^0
+ local somedoctype = C((somespace * (publicdoctype + systemdoctype + definitiondoctype + simpledoctype) * optionalspace)^0)
+
+ local instruction = (spacing * begininstruction * someinstruction * endinstruction) / function(...) add_special("@pi@",...) end
+ local comment = (spacing * begincomment * somecomment * endcomment ) / function(...) add_special("@cm@",...) end
+ local cdata = (spacing * begincdata * somecdata * endcdata ) / function(...) add_special("@cd@",...) end
+ local doctype = (spacing * begindoctype * somedoctype * enddoctype ) / function(...) add_special("@dt@",...) end
+
+ -- nicer but slower:
+ --
+ -- local instruction = (lpeg.Cc("@pi@") * spacing * begininstruction * someinstruction * endinstruction) / add_special
+ -- local comment = (lpeg.Cc("@cm@") * spacing * begincomment * somecomment * endcomment ) / add_special
+ -- local cdata = (lpeg.Cc("@cd@") * spacing * begincdata * somecdata * endcdata ) / add_special
+ -- local doctype = (lpeg.Cc("@dt@") * spacing * begindoctype * somedoctype * enddoctype ) / add_special
+
+ local trailer = space^0 * (justtext/set_message)^0
+
+ -- comment + emptyelement + text + cdata + instruction + V("parent"), -- 6.5 seconds on 40 MB database file
+ -- text + comment + emptyelement + cdata + instruction + V("parent"), -- 5.8
+ -- text + V("parent") + emptyelement + comment + cdata + instruction, -- 5.5
+
+ local grammar = P { "preamble",
+ preamble = utfbom^0 * instruction^0 * (doctype + comment + instruction)^0 * V("parent") * trailer,
+ parent = beginelement * V("children")^0 * endelement,
+ children = text + V("parent") + emptyelement + comment + cdata + instruction,
+ }
+
+ -- todo: xml.new + properties like entities and strip and such (store in root)
+
+ function xml.convert(data, no_root, strip_cm_and_dt, given_entities) -- maybe use table met k/v (given_entities may disapear)
+ strip = strip_cm_and_dt or xml.strip_cm_and_dt
+ stack, top, at, xmlns, errorstr, result, entities = {}, {}, {}, {}, nil, nil, given_entities or {}
+ stack[#stack+1] = top
+ top.dt = { }
+ dt = top.dt
+ if not data or data == "" then
+ errorstr = "empty xml file"
+ elseif not grammar:match(data) then
+ errorstr = "invalid xml file"
+ else
+ errorstr = ""
+ end
+ if errorstr and errorstr ~= "" then
+ result = { dt = { { ns = "", tg = "error", dt = { errorstr }, at={}, er = true } }, error = true }
+ setmetatable(stack, mt)
+ if xml.error_handler then xml.error_handler("load",errorstr) end
+ else
+ result = stack[1]
+ end
+ if not no_root then
+ result = { special = true, ns = "", tg = '@rt@', dt = result.dt, at={}, entities = entities }
+ setmetatable(result, mt)
+ local rdt = result.dt
+ for k=1,#rdt do
+ local v = rdt[k]
+ if type(v) == "table" and not v.special then -- always table -)
+ result.ri = k -- rootindex
+ break
+ end
+ end
+ end
+ return result
+ end
+
+ --[[ldx--
+ <p>Packaging data in an xml like table is done with the following
+ function. Maybe it will go away (when not used).</p>
+ --ldx]]--
+
+ function xml.is_valid(root)
+ return root and root.dt and root.dt[1] and type(root.dt[1]) == "table" and not root.dt[1].er
+ end
+
+ function xml.package(tag,attributes,data)
+ local ns, tg = tag:match("^(.-):?([^:]+)$")
+ local t = { ns = ns, tg = tg, dt = data or "", at = attributes or {} }
+ setmetatable(t, mt)
+ return t
+ end
+
+ function xml.is_valid(root)
+ return root and not root.error
+ end
+
+ xml.error_handler = (logs and logs.report) or (input and input.report) or print
+
+end
+
+--[[ldx--
+<p>We cannot load an <l n='lpeg'/> from a filehandle so we need to load
+the whole file first. The function accepts a string representing
+a filename or a file handle.</p>
+--ldx]]--
+
+function xml.load(filename)
+ if type(filename) == "string" then
+ local f = io.open(filename,'r')
+ if f then
+ local root = xml.convert(f:read("*all"))
+ f:close()
+ return root
+ else
+ return xml.convert("")
+ end
+ elseif filename then -- filehandle
+ return xml.convert(filename:read("*all"))
+ else
+ return xml.convert("")
+ end
+end
+
+--[[ldx--
+<p>When we inject new elements, we need to convert strings to
+valid trees, which is what the next function does.</p>
+--ldx]]--
+
+function xml.toxml(data)
+ if type(data) == "string" then
+ local root = { xml.convert(data,true) }
+ return (#root > 1 and root) or root[1]
+ else
+ return data
+ end
+end
+
+--[[ldx--
+<p>For copying a tree we use a dedicated function instead of the
+generic table copier. Since we know what we're dealing with we
+can speed up things a bit. The second argument is not to be used!</p>
+--ldx]]--
+
+do
+
+ function copy(old,tables)
+ if old then
+ tables = tables or { }
+ local new = { }
+ if not tables[old] then
+ tables[old] = new
+ end
+ for k,v in pairs(old) do
+ new[k] = (type(v) == "table" and (tables[v] or copy(v, tables))) or v
+ end
+ local mt = getmetatable(old)
+ if mt then
+ setmetatable(new,mt)
+ end
+ return new
+ else
+ return { }
+ end
+ end
+
+ xml.copy = copy
+
+end
+
+--[[ldx--
+<p>In <l n='context'/> serializing the tree or parts of the tree is a major
+actitivity which is why the following function is pretty optimized resulting
+in a few more lines of code than needed. The variant that uses the formatting
+function for all components is about 15% slower than the concatinating
+alternative.</p>
+--ldx]]--
+
+do
+
+ -- todo: add <?xml version='1.0' standalone='yes'?> when not present
+
+ local fallbackhandle = (tex and tex.sprint) or io.write
+
+ local function serialize(e, handle, textconverter, attributeconverter, specialconverter, nocommands)
+ if not e then
+ return
+ elseif not nocommands then
+ local ec = e.command
+ if ec ~= nil then -- we can have all kind of types
+
+if e.special then -- todo test for true/false
+ local etg, edt = e.tg, e.dt
+ local spc = specialconverter and specialconverter[etg]
+ if spc then
+--~ print("SPECIAL",etg,table.serialize(specialconverter), spc)
+ local result = spc(edt[1])
+ if result then
+ handle(result)
+ return
+ else
+ -- no need to handle any further
+ end
+ end
+end
+
+ local xc = xml.command
+ if xc then
+ xc(e,ec)
+ return
+ end
+ end
+ end
+ handle = handle or fallbackhandle
+ local etg = e.tg
+ if etg then
+ if e.special then
+ local edt = e.dt
+ local spc = specialconverter and specialconverter[etg]
+ if spc then
+ local result = spc(edt[1])
+ if result then
+ handle(result)
+ else
+ -- no need to handle any further
+ end
+ elseif etg == "@pi@" then
+ -- handle(format("<?%s?>",edt[1]))
+ handle("<?" .. edt[1] .. "?>")
+ elseif etg == "@cm@" then
+ -- handle(format("<!--%s-->",edt[1]))
+ handle("<!--" .. edt[1] .. "-->")
+ elseif etg == "@cd@" then
+ -- handle(format("<![CDATA[%s]]>",edt[1]))
+ handle("<![CDATA[" .. edt[1] .. "]]>")
+ elseif etg == "@dt@" then
+ -- handle(format("<!DOCTYPE %s>",edt[1]))
+ handle("<!DOCTYPE " .. edt[1] .. ">")
+ elseif etg == "@rt@" then
+ serialize(edt,handle,textconverter,attributeconverter,specialconverter,nocommands)
+ end
+ else
+ local ens, eat, edt, ern = e.ns, e.at, e.dt, e.rn
+ local ats = eat and next(eat) and { } -- type test maybe faster
+ if ats then
+ if attributeconverter then
+ for k,v in pairs(eat) do
+ ats[#ats+1] = format('%s=%q',k,attributeconverter(v))
+ end
+ else
+ for k,v in pairs(eat) do
+ ats[#ats+1] = format('%s=%q',k,v)
+ end
+ end
+ end
+ if ern and xml.trace_remap and ern ~= ens then
+--~ if ats then
+--~ ats[#ats+1] = format("xmlns:remapped='%s'",ern)
+--~ else
+--~ ats = { format("xmlns:remapped='%s'",ern) }
+--~ end
+--~ if ats then
+--~ ats[#ats+1] = format("remappedns='%s'",ens or '-')
+--~ else
+--~ ats = { format("remappedns='%s'",ens or '-') }
+--~ end
+ens = ern
+ end
+ if ens ~= "" then
+ if edt and #edt > 0 then
+ if ats then
+ -- handle(format("<%s:%s %s>",ens,etg,concat(ats," ")))
+ handle("<" .. ens .. ":" .. etg .. " " .. concat(ats," ") .. ">")
+ else
+ -- handle(format("<%s:%s>",ens,etg))
+ handle("<" .. ens .. ":" .. etg .. ">")
+ end
+ for i=1,#edt do
+ local e = edt[i]
+ if type(e) == "string" then
+ if textconverter then
+ handle(textconverter(e))
+ else
+ handle(e)
+ end
+ else
+ serialize(e,handle,textconverter,attributeconverter,specialconverter,nocommands)
+ end
+ end
+ -- handle(format("</%s:%s>",ens,etg))
+ handle("</" .. ens .. ":" .. etg .. ">")
+ else
+ if ats then
+ -- handle(format("<%s:%s %s/>",ens,etg,concat(ats," ")))
+ handle("<" .. ens .. ":" .. etg .. " " .. concat(ats," ") .. "/>")
+ else
+ -- handle(format("<%s:%s/>",ens,etg))
+ handle("<" .. ens .. ":" .. etg .. "/>")
+ end
+ end
+ else
+ if edt and #edt > 0 then
+ if ats then
+ -- handle(format("<%s %s>",etg,concat(ats," ")))
+ handle("<" .. etg .. " " .. concat(ats," ") .. ">")
+ else
+ -- handle(format("<%s>",etg))
+ handle("<" .. etg .. ">")
+ end
+ for i=1,#edt do
+ serialize(edt[i],handle,textconverter,attributeconverter,specialconverter,nocommands)
+ end
+ -- handle(format("</%s>",etg))
+ handle("</" .. etg .. ">")
+ else
+ if ats then
+ -- handle(format("<%s %s/>",etg,concat(ats," ")))
+ handle("<" .. etg .. " " .. concat(ats," ") .. "/>")
+ else
+ -- handle(format("<%s/>",etg))
+ handle("<" .. etg .. "/>")
+ end
+ end
+ end
+ end
+ elseif type(e) == "string" then
+ if textconverter then
+ handle(textconverter(e))
+ else
+ handle(e)
+ end
+ else
+ for i=1,#e do
+ serialize(e[i],handle,textconverter,attributeconverter,specialconverter,nocommands)
+ end
+ end
+ end
+
+ xml.serialize = serialize
+
+ function xml.checkbom(root) -- can be made faster
+ if root.ri then
+ local dt, found = root.dt, false
+ for k,v in ipairs(dt) do
+ if type(v) == "table" and v.special and v.tg == "@pi" and v.dt:find("xml.*version=") then
+ found = true
+ break
+ end
+ end
+ if not found then
+ table.insert(dt, 1, { special=true, ns="", tg="@pi@", dt = { "xml version='1.0' standalone='yes'"} } )
+ table.insert(dt, 2, "\n" )
+ end
+ end
+ end
+
+ --[[ldx--
+ <p>At the cost of some 25% runtime overhead you can first convert the tree to a string
+ and then handle the lot.</p>
+ --ldx]]--
+
+ function xml.tostring(root) -- 25% overhead due to collecting
+ if root then
+ if type(root) == 'string' then
+ return root
+ elseif next(root) then -- next is faster than type (and >0 test)
+ local result = { }
+ serialize(root,function(s) result[#result+1] = s end)
+ return concat(result,"")
+ end
+ end
+ return ""
+ end
+
+end
+
+--[[ldx--
+<p>The next function operated on the content only and needs a handle function
+that accepts a string.</p>
+--ldx]]--
+
+function xml.string(e,handle)
+ if not handle or (e.special and e.tg ~= "@rt@") then
+ -- nothing
+ elseif e.tg then
+ local edt = e.dt
+ if edt then
+ for i=1,#edt do
+ xml.string(edt[i],handle)
+ end
+ end
+ else
+ handle(e)
+ end
+end
+
+--[[ldx--
+<p>How you deal with saving data depends on your preferences. For a 40 MB database
+file the timing on a 2.3 Core Duo are as follows (time in seconds):</p>
+
+<lines>
+1.3 : load data from file to string
+6.1 : convert string into tree
+5.3 : saving in file using xmlsave
+6.8 : converting to string using xml.tostring
+3.6 : saving converted string in file
+</lines>
+
+<p>The save function is given below.</p>
+--ldx]]--
+
+function xml.save(root,name)
+ local f = io.open(name,"w")
+ if f then
+ xml.serialize(root,function(s) f:write(s) end)
+ f:close()
+ end
+end
+
+--[[ldx--
+<p>A few helpers:</p>
+--ldx]]--
+
+function xml.body(root)
+ return (root.ri and root.dt[root.ri]) or root
+end
+
+function xml.text(root)
+ return (root and xml.tostring(root)) or ""
+end
+
+function xml.content(root) -- bugged
+ return (root and root.dt and xml.tostring(root.dt)) or ""
+end
+
+--[[ldx--
+<p>The next helper erases an element but keeps the table as it is,
+and since empty strings are not serialized (effectively) it does
+not harm. Copying the table would take more time. Usage:</p>
+
+<typing>
+dt[k] = xml.empty() or xml.empty(dt,k)
+</typing>
+--ldx]]--
+
+function xml.empty(dt,k)
+ if dt and k then
+ dt[k] = ""
+ return dt[k]
+ else
+ return ""
+ end
+end
+
+--[[ldx--
+<p>The next helper assigns a tree (or string). Usage:</p>
+
+<typing>
+dt[k] = xml.assign(root) or xml.assign(dt,k,root)
+</typing>
+--ldx]]--
+
+function xml.assign(dt,k,root)
+ if dt and k then
+ dt[k] = (type(root) == "table" and xml.body(root)) or root
+ return dt[k]
+ else
+ return xml.body(root)
+ end
+end
+
+--[[ldx--
+<p>We've now arrived at an intersting part: accessing the tree using a subset
+of <l n='xpath'/> and since we're not compatible we call it <l n='lpath'/>. We
+will explain more about its usage in other documents.</p>
+--ldx]]--
+
+do
+
+ xml.functions = xml.functions or { }
+
+ local functions = xml.functions
+
+ local actions = {
+ [10] = "stay",
+ [11] = "parent",
+ [12] = "subtree root",
+ [13] = "document root",
+ [14] = "any",
+ [15] = "many",
+ [16] = "initial",
+ [20] = "match",
+ [21] = "match one of",
+ [22] = "match and attribute eq",
+ [23] = "match and attribute ne",
+ [24] = "match one of and attribute eq",
+ [25] = "match one of and attribute ne",
+ [27] = "has attribute",
+ [28] = "has value",
+ [29] = "fast match",
+ [30] = "select",
+ [31] = "expression",
+ [40] = "processing instruction",
+ }
+
+ --~ local function make_expression(str) --could also be an lpeg
+ --~ str = str:gsub("@([a-zA-Z%-_]+)", "(a['%1'] or '')")
+ --~ str = str:gsub("position%(%)", "i")
+ --~ str = str:gsub("text%(%)", "t")
+ --~ str = str:gsub("!=", "~=")
+ --~ str = str:gsub("([^=!~<>])=([^=!~<>])", "%1==%2")
+ --~ str = str:gsub("([a-zA-Z%-_]+)%(", "functions.%1(")
+ --~ return str, loadstring(format("return function(functions,i,a,t) return %s end", str))()
+ --~ end
+
+ -- a rather dumb lpeg
+
+ local P, S, R, C, V, Cc = lpeg.P, lpeg.S, lpeg.R, lpeg.C, lpeg.V, lpeg.Cc
+
+ local lp_position = P("position()") / "id"
+ local lp_text = P("text()") / "tx"
+ local lp_name = P("name()") / "((rt.ns~='' and rt.ns..':'..rt.tg) or '')"
+ local lp_tag = P("tag()") / "(rt.tg or '')"
+ local lp_ns = P("ns()") / "(rt.ns or '')"
+ local lp_noequal = P("!=") / "~=" + P("<=") + P(">=") + P("==")
+ local lp_doequal = P("=") / "=="
+ local lp_attribute = P("@") / "" * Cc("(at['") * R("az","AZ","--","__")^1 * Cc("'] or '')")
+
+ local lp_function = C(R("az","AZ","--","__")^1) * P("(") / function(t)
+ if functions[t] then
+ return "functions." .. t .. "("
+ else
+ return "functions.error("
+ end
+ end
+
+ local lparent = lpeg.P("(")
+ local rparent = lpeg.P(")")
+ local noparent = 1 - (lparent+rparent)
+ local nested = lpeg.P{lparent * (noparent + lpeg.V(1))^0 * rparent}
+ local value = lpeg.P(lparent * lpeg.C((noparent + nested)^0) * rparent)
+
+--~ local value = P { "(" * C(((1 - S("()")) + V(1))^0) * ")" }
+
+ local lp_special = (C(P("name")+P("text")+P("tag"))) * value / function(t,s)
+ if functions[t] then
+ if s then
+ return "functions." .. t .. "(rt,k," .. s ..")"
+ else
+ return "functions." .. t .. "(rt,k)"
+ end
+ else
+ return "functions.error(" .. t .. ")"
+ end
+ end
+
+ local converter = lpeg.Cs ( (
+ lp_position +
+ lp_text + lp_name + -- fast one
+ lp_special +
+ lp_noequal + lp_doequal +
+ lp_attribute +
+ lp_function +
+ 1 )^1 )
+
+ local function make_expression(str)
+ str = converter:match(str)
+ return str, loadstring(format("return function(functions,id,at,tx,rt,k) return %s end", str))()
+ end
+
+ local map = { }
+
+ local space = S(' \r\n\t')
+ local squote = S("'")
+ local dquote = S('"')
+ local lparent = P('(')
+ local rparent = P(')')
+ local atsign = P('@')
+ local lbracket = P('[')
+ local rbracket = P(']')
+ local exclam = P('!')
+ local period = P('.')
+ local eq = P('==') + P('=')
+ local ne = P('<>') + P('!=')
+ local star = P('*')
+ local slash = P('/')
+ local colon = P(':')
+ local bar = P('|')
+ local hat = P('^')
+ local valid = R('az', 'AZ', '09') + S('_-')
+--~ local name_yes = C(valid^1 + star) * colon * C(valid^1 + star) -- permits ns:* *:tg *:*
+--~ local name_nop = C(P(true)) * C(valid^1)
+ local name_yes = C(valid^1 + star) * colon * C(valid^1 + star) -- permits ns:* *:tg *:*
+ local name_nop = Cc("*") * C(valid^1)
+ local name = name_yes + name_nop
+ local number = C((S('+-')^0 * R('09')^1)) / tonumber
+ local names = (bar^0 * name)^1
+ local morenames = name * (bar^0 * name)^1
+ local instructiontag = P('pi::')
+ local spacing = C(space^0)
+ local somespace = space^1
+ local optionalspace = space^0
+ local text = C(valid^0)
+ local value = (squote * C((1 - squote)^0) * squote) + (dquote * C((1 - dquote)^0) * dquote)
+ local empty = 1-slash
+
+ local is_eq = lbracket * atsign * name * eq * value * rbracket
+ local is_ne = lbracket * atsign * name * ne * value * rbracket
+ local is_attribute = lbracket * atsign * name * rbracket
+ local is_value = lbracket * value * rbracket
+ local is_number = lbracket * number * rbracket
+
+ local nobracket = 1-(lbracket+rbracket) -- must be improved
+ local is_expression = lbracket * C(((C(nobracket^1))/make_expression)) * rbracket
+
+ local is_expression = lbracket * (C(nobracket^1))/make_expression * rbracket
+
+ local is_one = name
+ local is_none = exclam * name
+ local is_one_of = ((lparent * names * rparent) + morenames)
+ local is_none_of = exclam * ((lparent * names * rparent) + morenames)
+
+ local stay = (period )
+ local parent = (period * period ) / function( ) map[#map+1] = { 11 } end
+ local subtreeroot = (slash + hat ) / function( ) map[#map+1] = { 12 } end
+ local documentroot = (hat * hat ) / function( ) map[#map+1] = { 13 } end
+ local any = (star ) / function( ) map[#map+1] = { 14 } end
+ local many = (star * star ) / function( ) map[#map+1] = { 15 } end
+ local initial = (hat * hat * hat ) / function( ) map[#map+1] = { 16 } end
+
+ local match = (is_one ) / function(...) map[#map+1] = { 20, true , ... } end
+ local match_one_of = (is_one_of ) / function(...) map[#map+1] = { 21, true , ... } end
+ local dont_match = (is_none ) / function(...) map[#map+1] = { 20, false, ... } end
+ local dont_match_one_of = (is_none_of ) / function(...) map[#map+1] = { 21, false, ... } end
+
+ local match_and_eq = (is_one * is_eq ) / function(...) map[#map+1] = { 22, true , ... } end
+ local match_and_ne = (is_one * is_ne ) / function(...) map[#map+1] = { 23, true , ... } end
+ local dont_match_and_eq = (is_none * is_eq ) / function(...) map[#map+1] = { 22, false, ... } end
+ local dont_match_and_ne = (is_none * is_ne ) / function(...) map[#map+1] = { 23, false, ... } end
+
+ local match_one_of_and_eq = (is_one_of * is_eq ) / function(...) map[#map+1] = { 24, true , ... } end
+ local match_one_of_and_ne = (is_one_of * is_ne ) / function(...) map[#map+1] = { 25, true , ... } end
+ local dont_match_one_of_and_eq = (is_none_of * is_eq ) / function(...) map[#map+1] = { 24, false, ... } end
+ local dont_match_one_of_and_ne = (is_none_of * is_ne ) / function(...) map[#map+1] = { 25, false, ... } end
+
+ local has_attribute = (is_one * is_attribute) / function(...) map[#map+1] = { 27, true , ... } end
+ local has_value = (is_one * is_value ) / function(...) map[#map+1] = { 28, true , ... } end
+ local dont_has_attribute = (is_none * is_attribute) / function(...) map[#map+1] = { 27, false, ... } end
+ local dont_has_value = (is_none * is_value ) / function(...) map[#map+1] = { 28, false, ... } end
+ local position = (is_one * is_number ) / function(...) map[#map+1] = { 30, true, ... } end
+ local dont_position = (is_none * is_number ) / function(...) map[#map+1] = { 30, false, ... } end
+
+ local expression = (is_one * is_expression)/ function(...) map[#map+1] = { 31, true, ... } end
+ local dont_expression = (is_none * is_expression)/ function(...) map[#map+1] = { 31, false, ... } end
+
+ local self_expression = ( is_expression) / function(...) if #map == 0 then map[#map+1] = { 11 } end
+ map[#map+1] = { 31, true, "*", "*", ... } end
+ local dont_self_expression = (exclam * is_expression) / function(...) if #map == 0 then map[#map+1] = { 11 } end
+ map[#map+1] = { 31, false, "*", "*", ... } end
+
+ local instruction = (instructiontag * text ) / function(...) map[#map+1] = { 40, ... } end
+ local nothing = (empty ) / function( ) map[#map+1] = { 15 } end -- 15 ?
+ local crap = (1-slash)^1
+
+ -- a few ugly goodies:
+
+ local docroottag = P('^^') / function( ) map[#map+1] = { 12 } end
+ local subroottag = P('^') / function( ) map[#map+1] = { 13 } end
+ local roottag = P('root::') / function( ) map[#map+1] = { 12 } end
+ local parenttag = P('parent::') / function( ) map[#map+1] = { 11 } end
+ local childtag = P('child::')
+ local selftag = P('self::')
+
+ -- there will be more and order will be optimized
+
+ local selector = (
+ instruction +
+ many + any +
+ parent + stay +
+ dont_position + position +
+ dont_match_one_of_and_eq + dont_match_one_of_and_ne +
+ match_one_of_and_eq + match_one_of_and_ne +
+ dont_match_and_eq + dont_match_and_ne +
+ match_and_eq + match_and_ne +
+ dont_expression + expression +
+ dont_self_expression + self_expression +
+ has_attribute + has_value +
+ dont_match_one_of + match_one_of +
+ dont_match + match +
+ crap + empty
+ )
+
+ local grammar = P { "startup",
+ startup = (initial + documentroot + subtreeroot + roottag + docroottag + subroottag)^0 * V("followup"),
+ followup = ((slash + parenttag + childtag + selftag)^0 * selector)^1,
+ }
+
+ local function compose(str)
+ if not str or str == "" then
+ -- wildcard
+ return true
+ elseif str == '/' then
+ -- root
+ return false
+ else
+ map = { }
+ grammar:match(str)
+ if #map == 0 then
+ return true
+ else
+ local m = map[1][1]
+ if #map == 1 then
+ if m == 14 or m == 15 then
+ -- wildcard
+ return true
+ elseif m == 12 then
+ -- root
+ return false
+ end
+ elseif #map == 2 and m == 12 and map[2][1] == 20 then
+ -- return { { 29, map[2][2], map[2][3], map[2][4], map[2][5] } }
+ map[2][1] = 29
+ return { map[2] }
+ end
+ if m ~= 11 and m ~= 12 and m ~= 13 and m ~= 14 and m ~= 15 and m ~= 16 then
+ table.insert(map, 1, { 16 })
+ end
+ -- print((table.serialize(map)):gsub("[ \n]+"," "))
+ return map
+ end
+ end
+ end
+
+ local cache = { }
+
+ function xml.lpath(pattern,trace)
+ if type(pattern) == "string" then
+ local result = cache[pattern]
+ if not result then
+ result = compose(pattern)
+ cache[pattern] = result
+ end
+ if trace or xml.trace_lpath then
+ xml.lshow(result)
+ end
+ return result
+ else
+ return pattern
+ end
+ end
+
+ local fallbackreport = (texio and texio.write) or io.write
+
+ function xml.lshow(pattern,report)
+ report = report or fallbackreport
+ local lp = xml.lpath(pattern)
+ if lp == false then
+ report(" -: root\n")
+ elseif lp == true then
+ report(" -: wildcard\n")
+ else
+ if type(pattern) == "string" then
+ report(format("pattern: %s\n",pattern))
+ end
+ for k,v in ipairs(lp) do
+ if #v > 1 then
+ local t = { }
+ for i=2,#v do
+ local vv = v[i]
+ if type(vv) == "string" then
+ t[#t+1] = (vv ~= "" and vv) or "#"
+ elseif type(vv) == "boolean" then
+ t[#t+1] = (vv and "==") or "<>"
+ end
+ end
+ report(format("%2i: %s %s -> %s\n", k,v[1],actions[v[1]],concat(t," ")))
+ else
+ report(format("%2i: %s %s\n", k,v[1],actions[v[1]]))
+ end
+ end
+ end
+ end
+
+ function xml.xshow(e,...) -- also handy when report is given, use () to isolate first e
+ local t = { ... }
+ local report = (type(t[#t]) == "function" and t[#t]) or fallbackreport
+ if e == nil then
+ report("<!-- no element -->\n")
+ elseif type(e) ~= "table" then
+ report(tostring(e))
+ elseif e.tg then
+ report(tostring(e) .. "\n")
+ else
+ for i=1,#e do
+ report(tostring(e[i]) .. "\n")
+ end
+ end
+ end
+
+end
+
+--[[ldx--
+<p>An <l n='lpath'/> is converted to a table with instructions for traversing the
+tree. Hoever, simple cases are signaled by booleans. Because we don't know in
+advance what we want to do with the found element the handle gets three arguments:</p>
+
+<lines>
+<t>r</t> : the root element of the data table
+<t>d</t> : the data table of the result
+<t>t</t> : the index in the data table of the result
+</lines>
+
+<p> Access to the root and data table makes it possible to construct insert and delete
+functions.</p>
+--ldx]]--
+
+do
+
+ local functions = xml.functions
+
+ functions.contains = string.find
+ functions.find = string.find
+ functions.upper = string.upper
+ functions.lower = string.lower
+ functions.number = tonumber
+ functions.boolean = toboolean
+
+ functions.oneof = function(s,...) -- slow
+ local t = {...} for i=1,#t do if s == t[i] then return true end end return false
+ end
+ functions.error = function(str)
+ xml.error_handler("unknown function in lpath expression",str)
+ return false
+ end
+ functions.text = function(root,k,n) -- unchecked, maybe one deeper
+ local t = type(t)
+ if t == "string" then
+ return t
+ else -- todo n
+ local rdt = root.dt
+ return (rdt and rdt[k]) or root[k] or ""
+ end
+ end
+ functions.name = function(root,k,n)
+ -- way too fuzzy
+ local found
+ if not k or not n then
+ local ns, tg = root.rn or root.ns or "", root.tg
+ if not tg then
+ for i=1,#root do
+ local e = root[i]
+ if type(e) == "table" then
+ found = e
+ break
+ end
+ end
+ elseif ns ~= "" then
+ return ns .. ":" .. tg
+ else
+ return tg
+ end
+ elseif n == 0 then
+ local e = root[k]
+ if type(e) ~= "table" then
+ found = e
+ end
+ elseif n < 0 then
+ for i=k-1,1,-1 do
+ local e = root[i]
+ if type(e) == "table" then
+ if n == -1 then
+ found = e
+ break
+ else
+ n = n + 1
+ end
+ end
+ end
+ else
+--~ print(k,n,#root)
+ for i=k+1,#root,1 do
+ local e = root[i]
+ if type(e) == "table" then
+ if n == 1 then
+ found = e
+ break
+ else
+ n = n - 1
+ end
+ end
+ end
+ end
+ if found then
+ local ns, tg = found.rn or found.ns or "", found.tg
+ if ns ~= "" then
+ return ns .. ":" .. tg
+ else
+ return tg
+ end
+ else
+ return ""
+ end
+ end
+
+ local function traverse(root,pattern,handle,reverse,index,parent,wildcard) -- multiple only for tags, not for namespaces
+ if not root then -- error
+ return false
+ elseif pattern == false then -- root
+ handle(root,root.dt,root.ri)
+ return false
+ elseif pattern == true then -- wildcard
+ local rootdt = root.dt
+ if rootdt then
+ local start, stop, step = 1, #rootdt, 1
+ if reverse then
+ start, stop, step = stop, start, -1
+ end
+ for k=start,stop,step do
+ if handle(root,rootdt,root.ri or k) then return false end
+ if not traverse(rootdt[k],true,handle,reverse) then return false end
+ end
+ end
+ return false
+ elseif root.dt then
+ index = index or 1
+ local action = pattern[index]
+ local command = action[1]
+ if command == 29 then -- fast case /oeps
+ local rootdt = root.dt
+ for k=1,#rootdt do
+ local e = rootdt[k]
+ local tg = e.tg
+ if e.tg then
+ local ns = e.rn or e.ns
+ local ns_a, tg_a = action[3], action[4]
+ local matched = (ns_a == "*" or ns == ns_a) and (tg_a == "*" or tg == tg_a)
+ if not action[2] then matched = not matched end
+ if matched then
+ if handle(root,rootdt,k) then return false end
+ end
+ end
+ end
+ elseif command == 11 then -- parent
+ local ep = root.__p__ or parent
+ if index < #pattern then
+ if not traverse(ep,pattern,handle,reverse,index+1,root) then return false end
+ elseif handle(root,rootdt,k) then
+ return false
+ end
+ else
+ if (command == 16 or command == 12) and index == 1 then -- initial
+ -- wildcard = true
+ wildcard = command == 16 -- ok?
+ index = index + 1
+ action = pattern[index]
+ command = action and action[1] or 0 -- something is wrong
+ end
+ if command == 11 then -- parent
+ local ep = root.__p__ or parent
+ if index < #pattern then
+ if not traverse(ep,pattern,handle,reverse,index+1,root) then return false end
+ elseif handle(root,rootdt,k) then
+ return false
+ end
+ else
+ local rootdt = root.dt
+ local start, stop, step, n, dn = 1, #rootdt, 1, 0, 1
+ if command == 30 then
+ if action[5] < 0 then
+ start, stop, step = stop, start, -1
+ dn = -1
+ end
+ elseif reverse and index == #pattern then
+ start, stop, step = stop, start, -1
+ end
+ local idx = 0
+ for k=start,stop,step do -- we used to have functions for all but a case is faster
+ local e = rootdt[k]
+ local ns, tg = e.rn or e.ns, e.tg
+ if tg then
+ idx = idx + 1
+ if command == 30 then
+ local ns_a, tg_a = action[3], action[4]
+ if tg == tg_a then
+ matched = ns_a == "*" or ns == ns_a
+ elseif tg_a == '*' then
+ matched, multiple = ns_a == "*" or ns == ns_a, true
+ else
+ matched = false
+ end
+ if not action[2] then matched = not matched end
+ if matched then
+ n = n + dn
+ if n == action[5] then
+ if index == #pattern then
+ if handle(root,rootdt,root.ri or k) then return false end
+ else
+ if not traverse(e,pattern,handle,reverse,index+1,root) then return false end
+ end
+ break
+ end
+ elseif wildcard then
+ if not traverse(e,pattern,handle,reverse,index,root,true) then return false end
+ end
+ else
+ local matched, multiple = false, false
+ if command == 20 then -- match
+ local ns_a, tg_a = action[3], action[4]
+ if tg == tg_a then
+ matched = ns_a == "*" or ns == ns_a
+ elseif tg_a == '*' then
+ matched, multiple = ns_a == "*" or ns == ns_a, true
+ else
+ matched = false
+ end
+ if not action[2] then matched = not matched end
+ elseif command == 21 then -- match one of
+ multiple = true
+ for i=3,#action,2 do
+ local ns_a, tg_a = action[i], action[i+1]
+ if (ns_a == "*" or ns == ns_a) and (tg == "*" or tg == tg_a) then
+ matched = true
+ break
+ end
+ end
+ if not action[2] then matched = not matched end
+ elseif command == 22 then -- eq
+ local ns_a, tg_a = action[3], action[4]
+ if tg == tg_a then
+ matched = ns_a == "*" or ns == ns_a
+ elseif tg_a == '*' then
+ matched, multiple = ns_a == "*" or ns == ns_a, true
+ else
+ matched = false
+ end
+ matched = matched and e.at[action[6]] == action[7]
+ elseif command == 23 then -- ne
+ local ns_a, tg_a = action[3], action[4]
+ if tg == tg_a then
+ matched = ns_a == "*" or ns == ns_a
+ elseif tg_a == '*' then
+ matched, multiple = ns_a == "*" or ns == ns_a, true
+ else
+ matched = false
+ end
+ if not action[2] then matched = not matched end
+ matched = mached and e.at[action[6]] ~= action[7]
+ elseif command == 24 then -- one of eq
+ multiple = true
+ for i=3,#action-2,2 do
+ local ns_a, tg_a = action[i], action[i+1]
+ if (ns_a == "*" or ns == ns_a) and (tg == "*" or tg == tg_a) then
+ matched = true
+ break
+ end
+ end
+ if not action[2] then matched = not matched end
+ matched = matched and e.at[action[#action-1]] == action[#action]
+ elseif command == 25 then -- one of ne
+ multiple = true
+ for i=3,#action-2,2 do
+ local ns_a, tg_a = action[i], action[i+1]
+ if (ns_a == "*" or ns == ns_a) and (tg == "*" or tg == tg_a) then
+ matched = true
+ break
+ end
+ end
+ if not action[2] then matched = not matched end
+ matched = matched and e.at[action[#action-1]] ~= action[#action]
+ elseif command == 27 then -- has attribute
+ local ns_a, tg_a = action[3], action[4]
+ if tg == tg_a then
+ matched = ns_a == "*" or ns == ns_a
+ elseif tg_a == '*' then
+ matched, multiple = ns_a == "*" or ns == ns_a, true
+ else
+ matched = false
+ end
+ if not action[2] then matched = not matched end
+ matched = matched and e.at[action[5]]
+ elseif command == 28 then -- has value
+ local edt, ns_a, tg_a = e.dt, action[3], action[4]
+ if tg == tg_a then
+ matched = ns_a == "*" or ns == ns_a
+ elseif tg_a == '*' then
+ matched, multiple = ns_a == "*" or ns == ns_a, true
+ else
+ matched = false
+ end
+ if not action[2] then matched = not matched end
+ matched = matched and edt and edt[1] == action[5]
+ elseif command == 31 then
+ local edt, ns_a, tg_a = e.dt, action[3], action[4]
+ if tg == tg_a then
+ matched = ns_a == "*" or ns == ns_a
+ elseif tg_a == '*' then
+ matched, multiple = ns_a == "*" or ns == ns_a, true
+ else
+ matched = false
+ end
+ if not action[2] then matched = not matched end
+ if matched then
+ matched = action[6](functions,idx,e.at or { },edt[1],rootdt,k)
+ end
+ end
+ if matched then -- combine tg test and at test
+ if index == #pattern then
+ if handle(root,rootdt,root.ri or k) then return false end
+ if wildcard then
+ if multiple then
+ if not traverse(e,pattern,handle,reverse,index,root,true) then return false end
+ else
+ -- maybe or multiple; anyhow, check on (section|title) vs just section and title in example in lxml
+ if not traverse(e,pattern,handle,reverse,index,root) then return false end
+ end
+ end
+ else
+ if not traverse(e,pattern,handle,reverse,index+1,root) then return false end
+ end
+ elseif command == 14 then -- any
+ if index == #pattern then
+ if handle(root,rootdt,root.ri or k) then return false end
+ else
+ if not traverse(e,pattern,handle,reverse,index+1,root) then return false end
+ end
+ elseif command == 15 then -- many
+ if index == #pattern then
+ if handle(root,rootdt,root.ri or k) then return false end
+ else
+ if not traverse(e,pattern,handle,reverse,index+1,root,true) then return false end
+ end
+ -- not here : 11
+ elseif command == 11 then -- parent
+ local ep = e.__p__ or parent
+ if index < #pattern then
+ if not traverse(ep,pattern,handle,reverse,root,index+1) then return false end
+ elseif handle(root,rootdt,k) then
+ return false
+ end
+ elseif command == 40 and e.special and tg == "@pi@" then -- pi
+ local pi = action[2]
+ if pi ~= "" then
+ local pt = e.dt[1]
+ if pt and pt:find(pi) then
+ if handle(root,rootdt,k) then
+ return false
+ end
+ end
+ elseif handle(root,rootdt,k) then
+ return false
+ end
+ elseif wildcard then
+ if not traverse(e,pattern,handle,reverse,index,root,true) then return false end
+ end
+ end
+ else
+ -- not here : 11
+ if command == 11 then -- parent
+ local ep = e.__p__ or parent
+ if index < #pattern then
+ if not traverse(ep,pattern,handle,reverse,index+1,root) then return false end
+ elseif handle(root,rootdt,k) then
+ return false
+ end
+ break -- else loop
+ end
+ end
+ end
+ end
+ end
+ end
+ return true
+ end
+
+ xml.traverse = traverse
+
+end
+
+--[[ldx--
+<p>Next come all kind of locators and manipulators. The most generic function here
+is <t>xml.filter(root,pattern)</t>. All registers functions in the filters namespace
+can be path of a search path, as in:</p>
+
+<typing>
+local r, d, k = xml.filter(root,"/a/b/c/position(4)"
+</typing>
+--ldx]]--
+
+do
+
+ local traverse, lpath, convert = xml.traverse, xml.lpath, xml.convert
+
+ xml.filters = { }
+
+ function xml.filters.default(root,pattern)
+ local rt, dt, dk
+ traverse(root, lpath(pattern), function(r,d,k) rt,dt,dk = r,d,k return true end)
+ return dt and dt[dk], rt, dt, dk
+ end
+ function xml.filters.attributes(root,pattern,arguments)
+ local rt, dt, dk
+ traverse(root, lpath(pattern), function(r,d,k) rt, dt, dk = r, d, k return true end)
+ local ekat = (dt and dt[dk] and dt[dk].at) or (rt and rt.at)
+ if ekat then
+ if arguments then
+ return ekat[arguments] or "", rt, dt, dk
+ else
+ return ekat, rt, dt, dk
+ end
+ else
+ return { }, rt, dt, dk
+ end
+ end
+ function xml.filters.reverse(root,pattern)
+ local rt, dt, dk
+ traverse(root, lpath(pattern), function(r,d,k) rt,dt,dk = r,d,k return true end, 'reverse')
+ return dt and dt[dk], rt, dt, dk
+ end
+ function xml.filters.count(root,pattern,everything)
+ local n = 0
+ traverse(root, lpath(pattern), function(r,d,t)
+ if everything or type(d[t]) == "table" then
+ n = n + 1
+ end
+ end)
+ return n
+ end
+ function xml.filters.elements(root, pattern) -- == all
+ local t = { }
+ traverse(root, lpath(pattern), function(r,d,k)
+ local e = d[k]
+ if e then
+ t[#t+1] = e
+ end
+ end)
+ return t
+ end
+ function xml.filters.texts(root, pattern)
+ local t = { }
+ traverse(root, lpath(pattern), function(r,d,k)
+ local e = d[k]
+ if e and e.dt then
+ t[#t+1] = e.dt
+ end
+ end)
+ return t
+ end
+ function xml.filters.first(root,pattern)
+ local rt, dt, dk
+ traverse(root, lpath(pattern), function(r,d,k) rt,dt,dk = r,d,k return true end)
+ return dt and dt[dk], rt, dt, dk
+ end
+ function xml.filters.last(root,pattern)
+ local rt, dt, dk
+ traverse(root, lpath(pattern), function(r,d,k) rt,dt,dk = r,d,k return true end, 'reverse')
+ return dt and dt[dk], rt, dt, dk
+ end
+ function xml.filters.index(root,pattern,arguments)
+ local rt, dt, dk, reverse, i = nil, nil, nil, false, tonumber(arguments or '1') or 1
+ if i and i ~= 0 then
+ if i < 0 then
+ reverse, i = true, -i
+ end
+ traverse(root, lpath(pattern), function(r,d,k) rt, dt, dk, i = r, d, k, i-1 return i == 0 end, reverse)
+ if i == 0 then
+ return dt and dt[dk], rt, dt, dk
+ end
+ end
+ return nil, nil, nil, nil
+ end
+ function xml.filters.attribute(root,pattern,arguments)
+ local rt, dt, dk
+ traverse(root, lpath(pattern), function(r,d,k) rt, dt, dk = r, d, k return true end)
+ local ekat = (dt and dt[dk] and dt[dk].at) or (rt and rt.at)
+ return (ekat and (ekat[arguments] or ekat[arguments:gsub("^([\"\'])(.*)%1$","%2")])) or ""
+ end
+ function xml.filters.text(root,pattern,arguments) -- ?? why index, tostring slow
+ local dtk, rt, dt, dk = xml.filters.index(root,pattern,arguments)
+ if dtk then -- n
+ local dtkdt = dtk.dt
+ if not dtkdt then
+ return "", rt, dt, dk
+ elseif #dtkdt == 1 and type(dtkdt[1]) == "string" then
+ return dtkdt[1], rt, dt, dk
+ else
+ return xml.tostring(dtkdt), rt, dt, dk
+ end
+ else
+ return "", rt, dt, dk
+ end
+ end
+ function xml.filters.tag(root,pattern,n)
+ local tag = ""
+ traverse(root, lpath(pattern), function(r,d,k)
+ tag = xml.functions.tag(d,k,n and tonumber(n))
+ return true
+ end)
+ return tag
+ end
+ function xml.filters.name(root,pattern,n)
+ local tag = ""
+ traverse(root, lpath(pattern), function(r,d,k)
+ tag = xml.functions.name(d,k,n and tonumber(n))
+ return true
+ end)
+ return tag
+ end
+
+ --[[ldx--
+ <p>For splitting the filter function from the path specification, we can
+ use string matching or lpeg matching. Here the difference in speed is
+ neglectable but the lpeg variant is more robust.</p>
+ --ldx]]--
+
+ -- not faster but hipper ... although ... i can't get rid of the trailing / in the path
+
+ local P, S, R, C, V, Cc = lpeg.P, lpeg.S, lpeg.R, lpeg.C, lpeg.V, lpeg.Cc
+
+ local slash = P('/')
+ local name = (R("az","AZ","--","__"))^1
+ local path = C(((1-slash)^0 * slash)^1)
+ local argument = P { "(" * C(((1 - S("()")) + V(1))^0) * ")" }
+ local action = Cc(1) * path * C(name) * argument
+ local attribute = Cc(2) * path * P('@') * C(name)
+ local direct = Cc(3) * Cc("../*") * slash^0 * C(name) * argument
+
+ local parser = direct + action + attribute
+
+ local filters = xml.filters
+ local attribute_filter = xml.filters.attributes
+ local default_filter = xml.filters.default
+
+ -- todo: also hash, could be gc'd
+
+ function xml.filter(root,pattern)
+ local kind, a, b, c = parser:match(pattern)
+--~ if xml.trace_lpath then
+--~ print(pattern,kind,a,b,c)
+--~ end
+ if kind == 1 or kind == 3 then
+ return (filters[b] or default_filter)(root,a,c)
+ elseif kind == 2 then
+ return attribute_filter(root,a,b)
+ else
+ return default_filter(root,pattern)
+ end
+ end
+
+ --~ slightly faster, but first we need a proper test file
+ --~
+ --~ local hash = { }
+ --~
+ --~ function xml.filter(root,pattern)
+ --~ local h = hash[pattern]
+ --~ if not h then
+ --~ local kind, a, b, c = parser:match(pattern)
+ --~ if kind == 1 then
+ --~ h = { kind, filters[b] or default_filter, a, b, c }
+ --~ elseif kind == 2 then
+ --~ h = { kind, attribute_filter, a, b, c }
+ --~ else
+ --~ h = { kind, default_filter, a, b, c }
+ --~ end
+ --~ hash[pattern] = h
+ --~ end
+ --~ local kind = h[1]
+ --~ if kind == 1 then
+ --~ return h[2](root,h[2],h[4])
+ --~ elseif kind == 2 then
+ --~ return h[2](root,h[2],h[3])
+ --~ else
+ --~ return h[2](root,pattern)
+ --~ end
+ --~ end
+
+ --[[ldx--
+ <p>The following functions collect elements and texts.</p>
+ --ldx]]--
+
+ -- still somewhat bugged
+
+ function xml.collect_elements(root, pattern, ignorespaces)
+ local rr, dd = { }, { }
+ traverse(root, lpath(pattern), function(r,d,k)
+ local dk = d and d[k]
+ if dk then
+ if ignorespaces and type(dk) == "string" and dk:find("[^%S]") then
+ -- ignore
+ else
+ local n = #rr+1
+ rr[n], dd[n] = r, dk
+ end
+ end
+ end)
+ return dd, rr
+ end
+
+ function xml.collect_texts(root, pattern, flatten)
+ local t = { } -- no r collector
+ traverse(root, lpath(pattern), function(r,d,k)
+ if d then
+ local ek = d[k]
+ local tx = ek and ek.dt
+ if flatten then
+ if tx then
+ t[#t+1] = xml.tostring(tx) or ""
+ else
+ t[#t+1] = ""
+ end
+ else
+ t[#t+1] = tx or ""
+ end
+ else
+ t[#t+1] = ""
+ end
+ end)
+ return t
+ end
+
+ function xml.collect_tags(root, pattern, nonamespace)
+ local t = { }
+ xml.traverse(root, xml.lpath(pattern), function(r,d,k)
+ local dk = d and d[k]
+ if dk and type(dk) == "table" then
+ local ns, tg = e.ns, e.tg
+ if nonamespace then
+ t[#t+1] = tg -- if needed we can return an extra table
+ elseif ns == "" then
+ t[#t+1] = tg
+ else
+ t[#t+1] = ns .. ":" .. tg
+ end
+ end
+ end)
+ return #t > 0 and {}
+ end
+
+ --[[ldx--
+ <p>Often using an iterators looks nicer in the code than passing handler
+ functions. The <l n='lua'/> book describes how to use coroutines for that
+ purpose (<url href='http://www.lua.org/pil/9.3.html'/>). This permits
+ code like:</p>
+
+ <typing>
+ for r, d, k in xml.elements(xml.load('text.xml'),"title") do
+ print(d[k])
+ end
+ </typing>
+
+ <p>Which will print all the titles in the document. The iterator variant takes
+ 1.5 times the runtime of the function variant which is due to the overhead in
+ creating the wrapper. So, instead of:</p>
+
+ <typing>
+ function xml.filters.first(root,pattern)
+ for rt,dt,dk in xml.elements(root,pattern)
+ return dt and dt[dk], rt, dt, dk
+ end
+ return nil, nil, nil, nil
+ end
+ </typing>
+
+ <p>We use the function variants in the filters.</p>
+ --ldx]]--
+
+ local wrap, yield = coroutine.wrap, coroutine.yield
+
+ function xml.elements(root,pattern,reverse)
+ return wrap(function() traverse(root, lpath(pattern), yield, reverse) end)
+ end
+
+ function xml.elements_only(root,pattern,reverse)
+ return wrap(function() traverse(root, lpath(pattern), function(r,d,k) yield(d[k]) end, reverse) end)
+ end
+
+ function xml.each_element(root, pattern, handle, reverse)
+ local ok
+ traverse(root, lpath(pattern), function(r,d,k) ok = true handle(r,d,k) end, reverse)
+ return ok
+ end
+
+ function xml.process_elements(root, pattern, handle)
+ traverse(root, lpath(pattern), function(r,d,k)
+ local dkdt = d[k].dt
+ if dkdt then
+ for i=1,#dkdt do
+ local v = dkdt[i]
+ if v.tg then handle(v) end
+ end
+ end
+ end)
+ end
+
+ function xml.process_attributes(root, pattern, handle)
+ traverse(root, lpath(pattern), function(r,d,k)
+ local ek = d[k]
+ local a = ek.at or { }
+ handle(a)
+ if next(a) then -- next is faster than type (and >0 test)
+ ek.at = a
+ else
+ ek.at = nil
+ end
+ end)
+ end
+
+ --[[ldx--
+ <p>We've now arrives at the functions that manipulate the tree.</p>
+ --ldx]]--
+
+ function xml.inject_element(root, pattern, element, prepend)
+ if root and element then
+ local matches, collect = { }, nil
+ if type(element) == "string" then
+ element = convert(element,true)
+ end
+ if element then
+ collect = function(r,d,k) matches[#matches+1] = { r, d, k, element } end
+ traverse(root, lpath(pattern), collect)
+ for i=1,#matches do
+ local m = matches[i]
+ local r, d, k, element, edt = m[1], m[2], m[3], m[4], nil
+ if element.ri then
+ element = element.dt[element.ri].dt
+ else
+ element = element.dt
+ end
+ if r.ri then
+ edt = r.dt[r.ri].dt
+ else
+ edt = d and d[k] and d[k].dt
+ end
+ if edt then
+ local be, af
+ if prepend then
+ be, af = xml.copy(element), edt
+ else
+ be, af = edt, xml.copy(element)
+ end
+ for i=1,#af do
+ be[#be+1] = af[i]
+ end
+ if r.ri then
+ r.dt[r.ri].dt = be
+ else
+ d[k].dt = be
+ end
+ else
+ -- r.dt = element.dt -- todo
+ end
+ end
+ end
+ end
+ end
+
+ -- todo: copy !
+
+ function xml.insert_element(root, pattern, element, before) -- todo: element als functie
+ if root and element then
+ if pattern == "/" then
+ xml.inject_element(root, pattern, element, before)
+ else
+ local matches, collect = { }, nil
+ if type(element) == "string" then
+ element = convert(element,true)
+ end
+ if element and element.ri then
+ element = element.dt[element.ri]
+ end
+ if element then
+ collect = function(r,d,k) matches[#matches+1] = { r, d, k, element } end
+ traverse(root, lpath(pattern), collect)
+ for i=#matches,1,-1 do
+ local m = matches[i]
+ local r, d, k, element = m[1], m[2], m[3], m[4]
+ if not before then k = k + 1 end
+ if element.tg then
+ table.insert(d,k,element) -- untested
+ elseif element.dt then
+ for _,v in ipairs(element.dt) do -- i added
+ table.insert(d,k,v)
+ k = k + 1
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+
+ xml.insert_element_after = xml.insert_element
+ xml.insert_element_before = function(r,p,e) xml.insert_element(r,p,e,true) end
+ xml.inject_element_after = xml.inject_element
+ xml.inject_element_before = function(r,p,e) xml.inject_element(r,p,e,true) end
+
+ function xml.delete_element(root, pattern)
+ local matches, deleted = { }, { }
+ local collect = function(r,d,k) matches[#matches+1] = { r, d, k } end
+ traverse(root, lpath(pattern), collect)
+ for i=#matches,1,-1 do
+ local m = matches[i]
+ deleted[#deleted+1] = table.remove(m[2],m[3])
+ end
+ return deleted
+ end
+
+ function xml.replace_element(root, pattern, element)
+ if type(element) == "string" then
+ element = convert(element,true)
+ end
+ if element and element.ri then
+ element = element.dt[element.ri]
+ end
+ if element then
+ traverse(root, lpath(pattern), function(rm, d, k)
+ d[k] = element.dt -- maybe not clever enough
+ end)
+ end
+ end
+
+ local function load_data(name) -- == io.loaddata
+ local f, data = io.open(name), ""
+ if f then
+ data = f:read("*all",'b') -- 'b' ?
+ f:close()
+ end
+ return data
+ end
+
+ function xml.include(xmldata,pattern,attribute,recursive,loaddata)
+ -- parse="text" (default: xml), encoding="" (todo)
+ -- attribute = attribute or 'href'
+ pattern = pattern or 'include'
+ loaddata = loaddata or load_data
+ local function include(r,d,k)
+ local ek, name = d[k], nil
+ if not attribute or attribute == "" then
+ local ekdt = ek.dt
+ name = (type(ekdt) == "table" and ekdt[1]) or ekdt
+ end
+ if not name then
+ if ek.at then
+ for a in (attribute or "href"):gmatch("([^|]+)") do
+ name = ek.at[a]
+ if name then break end
+ end
+ end
+ end
+ local data = (name and name ~= "" and loaddata(name)) or ""
+ if data == "" then
+ xml.empty(d,k)
+ elseif ek.at["parse"] == "text" then -- for the moment hard coded
+ d[k] = xml.escaped(data)
+ else
+ local xi = xml.convert(data)
+ if not xi then
+ xml.empty(d,k)
+ else
+ if recursive then
+ xml.include(xi,pattern,attribute,recursive,loaddata)
+ end
+ xml.assign(d,k,xi)
+ end
+ end
+ end
+ xml.each_element(xmldata, pattern, include)
+ end
+
+ function xml.strip_whitespace(root, pattern)
+ traverse(root, lpath(pattern), function(r,d,k)
+ local dkdt = d[k].dt
+ if dkdt then -- can be optimized
+ local t = { }
+ for i=1,#dkdt do
+ local str = dkdt[i]
+ if type(str) == "string" and str:find("^[ \n\r\t]*$") then
+ -- stripped
+ else
+ t[#t+1] = str
+ end
+ end
+ d[k].dt = t
+ end
+ end)
+ end
+
+ function xml.rename_space(root, oldspace, newspace) -- fast variant
+ local ndt = #root.dt
+ local rename = xml.rename_space
+ for i=1,ndt or 0 do
+ local e = root[i]
+ if type(e) == "table" then
+ if e.ns == oldspace then
+ e.ns = newspace
+ if e.rn then
+ e.rn = newspace
+ end
+ end
+ local edt = e.dt
+ if edt then
+ rename(edt, oldspace, newspace)
+ end
+ end
+ end
+ end
+
+ function xml.remap_tag(root, pattern, newtg)
+ traverse(root, lpath(pattern), function(r,d,k)
+ d[k].tg = newtg
+ end)
+ end
+ function xml.remap_namespace(root, pattern, newns)
+ traverse(root, lpath(pattern), function(r,d,k)
+ d[k].ns = newns
+ end)
+ end
+ function xml.check_namespace(root, pattern, newns)
+ traverse(root, lpath(pattern), function(r,d,k)
+ local dk = d[k]
+ if (not dk.rn or dk.rn == "") and dk.ns == "" then
+ dk.rn = newns
+ end
+ end)
+ end
+ function xml.remap_name(root, pattern, newtg, newns, newrn)
+ traverse(root, lpath(pattern), function(r,d,k)
+ local dk = d[k]
+ dk.tg = newtg
+ dk.ns = newns
+ dk.rn = newrn
+ end)
+ end
+
+ function xml.filters.found(root,pattern,check_content)
+ local found = false
+ traverse(root, lpath(pattern), function(r,d,k)
+ if check_content then
+ local dk = d and d[k]
+ found = dk and dk.dt and next(dk.dt) and true
+ else
+ found = true
+ end
+ return true
+ end)
+ return found
+ end
+
+end
+
+--[[ldx--
+<p>Here are a few synonyms.</p>
+--ldx]]--
+
+xml.filters.position = xml.filters.index
+
+xml.count = xml.filters.count
+xml.index = xml.filters.index
+xml.position = xml.filters.index
+xml.first = xml.filters.first
+xml.last = xml.filters.last
+xml.found = xml.filters.found
+
+xml.each = xml.each_element
+xml.process = xml.process_element
+xml.strip = xml.strip_whitespace
+xml.collect = xml.collect_elements
+xml.all = xml.collect_elements
+
+xml.insert = xml.insert_element_after
+xml.inject = xml.inject_element_after
+xml.after = xml.insert_element_after
+xml.before = xml.insert_element_before
+xml.delete = xml.delete_element
+xml.replace = xml.replace_element
+
+--[[ldx--
+<p>The following helper functions best belong to the <t>lmxl-ini</t>
+module. Some are here because we need then in the <t>mk</t>
+document and other manuals, others came up when playing with
+this module. Since this module is also used in <l n='mtxrun'/> we've
+put them here instead of loading mode modules there then needed.</p>
+--ldx]]--
+
+function xml.gsub(t,old,new)
+ if t.dt then
+ for k,v in ipairs(t.dt) do
+ if type(v) == "string" then
+ t.dt[k] = v:gsub(old,new)
+ else
+ xml.gsub(v,old,new)
+ end
+ end
+ end
+end
+
+function xml.strip_leading_spaces(dk,d,k) -- cosmetic, for manual
+ if d and k and d[k-1] and type(d[k-1]) == "string" then
+ local s = d[k-1]:match("\n(%s+)")
+ xml.gsub(dk,"\n"..string.rep(" ",#s),"\n")
+ end
+end
+
+function xml.serialize_path(root,lpath,handle)
+ local dk, r, d, k = xml.first(root,lpath)
+ dk = xml.copy(dk)
+ xml.strip_leading_spaces(dk,d,k)
+ xml.serialize(dk,handle)
+end
+
+--~ xml.escapes = { ['&'] = '&amp;', ['<'] = '&lt;', ['>'] = '&gt;', ['"'] = '&quot;' }
+--~ xml.unescapes = { } for k,v in pairs(xml.escapes) do xml.unescapes[v] = k end
+
+--~ function xml.escaped (str) return str:gsub("(.)" , xml.escapes ) end
+--~ function xml.unescaped(str) return str:gsub("(&.-;)", xml.unescapes) end
+--~ function xml.cleansed (str) return str:gsub("<.->" , '' ) end -- "%b<>"
+
+do
+
+ local P, S, R, C, V, Cc, Cs = lpeg.P, lpeg.S, lpeg.R, lpeg.C, lpeg.V, lpeg.Cc, lpeg.Cs
+
+ -- 100 * 2500 * "oeps< oeps> oeps&" : gsub:lpeg|lpeg|lpeg
+ --
+ -- 1021:0335:0287:0247
+
+ -- 10 * 1000 * "oeps< oeps> oeps& asfjhalskfjh alskfjh alskfjh alskfjh ;al J;LSFDJ"
+ --
+ -- 1559:0257:0288:0190 (last one suggested by roberto)
+
+ -- escaped = Cs((S("<&>") / xml.escapes + 1)^0)
+ -- escaped = Cs((S("<")/"&lt;" + S(">")/"&gt;" + S("&")/"&amp;" + 1)^0)
+ local normal = (1 - S("<&>"))^0
+ local special = P("<")/"&lt;" + P(">")/"&gt;" + P("&")/"&amp;"
+ local escaped = Cs(normal * (special * normal)^0)
+
+ -- 100 * 1000 * "oeps&lt; oeps&gt; oeps&amp;" : gsub:lpeg == 0153:0280:0151:0080 (last one by roberto)
+
+ -- unescaped = Cs((S("&lt;")/"<" + S("&gt;")/">" + S("&amp;")/"&" + 1)^0)
+ -- unescaped = Cs((((P("&")/"") * (P("lt")/"<" + P("gt")/">" + P("amp")/"&") * (P(";")/"")) + 1)^0)
+ local normal = (1 - S"&")^0
+ local special = P("&lt;")/"<" + P("&gt;")/">" + P("&amp;")/"&"
+ local unescaped = Cs(normal * (special * normal)^0)
+
+ -- 100 * 5000 * "oeps <oeps bla='oeps' foo='bar'> oeps </oeps> oeps " : gsub:lpeg == 623:501 msec (short tags, less difference)
+
+ local cleansed = Cs(((P("<") * (1-P(">"))^0 * P(">"))/"" + 1)^0)
+
+ function xml.escaped (str) return escaped :match(str) end
+ function xml.unescaped(str) return unescaped:match(str) end
+ function xml.cleansed (str) return cleansed :match(str) end
+
+end
+
+function xml.join(t,separator,lastseparator)
+ if #t > 0 then
+ local result = { }
+ for k,v in pairs(t) do
+ result[k] = xml.tostring(v)
+ end
+ if lastseparator then
+ return concat(result,separator or "",1,#result-1) .. (lastseparator or "") .. result[#result]
+ else
+ return concat(result,separator)
+ end
+ else
+ return ""
+ end
+end
+
+
+--[[ldx--
+<p>We provide (at least here) two entity handlers. The more extensive
+resolver consults a hash first, tries to convert to <l n='utf'/> next,
+and finaly calls a handler when defines. When this all fails, the
+original entity is returned.</p>
+--ldx]]--
+
+do if unicode and unicode.utf8 then
+
+ xml.entities = xml.entities or { } -- xml.entities.handler == function
+
+ function xml.entities.handler(e)
+ return format("[%s]",e)
+ end
+
+ local char = unicode.utf8.char
+
+ local function toutf(s)
+ return char(tonumber(s,16))
+ end
+
+ local entities = xml.entities -- global entities
+
+ function utfize(root)
+ local d = root.dt
+ for k=1,#d do
+ local dk = d[k]
+ if type(dk) == "string" then
+ -- test prevents copying if no match
+ if dk:find("&#x.-;") then
+ d[k] = dk:gsub("&#x(.-);",toutf)
+ end
+ else
+ utfize(dk)
+ end
+ end
+ end
+
+ xml.utfize = utfize
+
+ local function resolve(e) -- hex encoded always first, just to avoid mkii fallbacks
+ if e:find("#x") then
+ return char(tonumber(e:sub(3),16))
+ else
+ local ee = entities[e]
+ if ee then
+ return ee
+ else
+ local h = xml.entities.handler
+ return (h and h(e)) or "&" .. e .. ";"
+ end
+ end
+ end
+
+ local function resolve_entities(root)
+ if not root.special or root.tg == "@rt@" then
+ local d = root.dt
+ for k=1,#d do
+ local dk = d[k]
+ if type(dk) == "string" then
+ if dk:find("&.-;") then
+ d[k] = dk:gsub("&(.-);",resolve)
+ end
+ else
+ resolve_entities(dk)
+ end
+ end
+ end
+ end
+
+ xml.resolve_entities = resolve_entities
+
+ function xml.utfize_text(str)
+ if str:find("&#") then
+ return (str:gsub("&#x(.-);",toutf))
+ else
+ return str
+ end
+ end
+
+ function xml.resolve_text_entities(str) -- maybe an lpeg. maybe resolve inline
+ if str:find("&") then
+ return (str:gsub("&(.-);",resolve))
+ else
+ return str
+ end
+ end
+
+ function xml.show_text_entities(str)
+ if str:find("&") then
+ return (str:gsub("&(.-);","[%1]"))
+ else
+ return str
+ end
+ end
+
+ -- experimental, this will be done differently
+
+ function xml.merge_entities(root)
+ local documententities = root.entities
+ local allentities = xml.entities
+ if documententities then
+ for k, v in pairs(documententities) do
+ allentities[k] = v
+ end
+ end
+ end
+
+end end
+
+-- xml.set_text_cleanup(xml.show_text_entities)
+-- xml.set_text_cleanup(xml.resolve_text_entities)
+
+--~ xml.lshow("/../../../a/(b|c)[@d='e']/f")
+--~ xml.lshow("/../../../a/!(b|c)[@d='e']/f")
+--~ xml.lshow("/../../../a/!b[@d!='e']/f")
+
+--~ x = xml.convert([[
+--~ <a>
+--~ <b n='01'>01</b>
+--~ <b n='02'>02</b>
+--~ <b n='03'>03</b>
+--~ <b n='04'>OK</b>
+--~ <b n='05'>05</b>
+--~ <b n='06'>06</b>
+--~ <b n='07'>ALSO OK</b>
+--~ </a>
+--~ ]])
+
+--~ xml.trace_lpath = true
+
+--~ xml.xshow(xml.first(x,"b[position() > 2 and position() < 5 and text() == 'ok']"))
+--~ xml.xshow(xml.first(x,"b[position() > 2 and position() < 5 and text() == upper('ok')]"))
+--~ xml.xshow(xml.first(x,"b[@n=='03' or @n=='08']"))
+--~ xml.xshow(xml.all (x,"b[number(@n)>2 and number(@n)<6]"))
+--~ xml.xshow(xml.first(x,"b[find(text(),'ALSO')]"))
+
+--~ str = [[
+--~ <?xml version="1.0" encoding="utf-8"?>
+--~ <story line='mojca'>
+--~ <windows>my secret</mouse>
+--~ </story>
+--~ ]]
+
+--~ x = xml.convert([[
+--~ <a><b n='01'>01</b><b n='02'>02</b><x>xx</x><b n='03'>03</b><b n='04'>OK</b></a>
+--~ ]])
+--~ xml.xshow(xml.first(x,"b[tag(2) == 'x']"))
+--~ xml.xshow(xml.first(x,"b[tag(1) == 'x']"))
+--~ xml.xshow(xml.first(x,"b[tag(-1) == 'x']"))
+--~ xml.xshow(xml.first(x,"b[tag(-2) == 'x']"))
+
+--~ print(xml.filter(x,"b/tag(2)"))
+--~ print(xml.filter(x,"b/tag(1)"))
diff --git a/Master/texmf-dist/tex/context/base/lang-dis.tex b/Master/texmf-dist/tex/context/base/lang-dis.tex
index 58b95f68169..db932d68ad4 100644
--- a/Master/texmf-dist/tex/context/base/lang-dis.tex
+++ b/Master/texmf-dist/tex/context/base/lang-dis.tex
@@ -26,31 +26,31 @@
\unprotect
-\definefilefallback [lang-ca.pat] [cahyph.tex]
-\definefilefallback [lang-da.pat] [dkhyph.tex]
-\definefilefallback [lang-de.pat] [dehyphn.tex]
-\definefilefallback [lang-es.pat] [eshyph.tex]
-\definefilefallback [lang-fi.pat] [fihyph.tex]
-\definefilefallback [lang-fr.pat] [frhyph.tex]
-\definefilefallback [lang-hr.pat] [hrhyph.tex]
-\definefilefallback [lang-hu.pat] [huhyph.tex]
-\definefilefallback [lang-it.pat] [ithyph.tex]
-\definefilefallback [lang-la.pat] [lahyph7.tex]
-\definefilefallback [lang-no.pat] [nohyph.tex]
-\definefilefallback [lang-pl.pat] [plhyph.tex]
-\definefilefallback [lang-pt.pat] [pthyph.tex]
-\definefilefallback [lang-ro.pat] [rohyph.tex]
-\definefilefallback [lang-ru.pat] [ruenhyph.tex]
-\definefilefallback [lang-sl.pat] [sihyph.tex,slhyph.tex]
-\definefilefallback [lang-sv.pat] [svhyph.tex,sehyph.tex]
-\definefilefallback [lang-tr.pat] [tkhyph.tex,trhyph.tex]
-\definefilefallback [lang-ua.pat] [ukrenhyp.tex]
-\definefilefallback [lang-uk.pat] [ukhyphen.tex,ukhyph.tex]
-\definefilefallback [lang-us.pat] [ushyphmax.tex,ushyph.tex,ushyph1.tex,ushyph2.tex,hyphen.tex]
-\definefilefallback [lang-nl.pat] [nehyph96.tex,dutch96.pat,nehyph.tex]
-\definefilefallback [lang-cz.pat] [czhyphen.tex,czhyph.pat]
-\definefilefallback [lang-sk.pat] [skhyphen.tex,skhyph.pat]
-\definefilefallback [lang-deo.pat] [dehypht.tex]
+% \definefilefallback [lang-ca.pat] [cahyph.tex]
+% \definefilefallback [lang-da.pat] [dkhyph.tex]
+% \definefilefallback [lang-de.pat] [dehyphn.tex]
+% \definefilefallback [lang-es.pat] [eshyph.tex]
+% \definefilefallback [lang-fi.pat] [fihyph.tex]
+% \definefilefallback [lang-fr.pat] [frhyph.tex]
+% \definefilefallback [lang-hr.pat] [hrhyph.tex]
+% \definefilefallback [lang-hu.pat] [huhyph.tex]
+% \definefilefallback [lang-it.pat] [ithyph.tex]
+% \definefilefallback [lang-la.pat] [lahyph7.tex]
+% \definefilefallback [lang-no.pat] [nohyph.tex]
+% \definefilefallback [lang-pl.pat] [plhyph.tex]
+% \definefilefallback [lang-pt.pat] [pthyph.tex]
+% \definefilefallback [lang-ro.pat] [rohyph.tex]
+% \definefilefallback [lang-ru.pat] [ruenhyph.tex]
+% \definefilefallback [lang-sl.pat] [sihyph.tex,slhyph.tex]
+% \definefilefallback [lang-sv.pat] [svhyph.tex,sehyph.tex]
+% \definefilefallback [lang-tr.pat] [tkhyph.tex,trhyph.tex]
+% \definefilefallback [lang-ua.pat] [ukrenhyp.tex]
+% \definefilefallback [lang-uk.pat] [ukhyphen.tex,ukhyph.tex]
+% \definefilefallback [lang-us.pat] [ushyphmax.tex,ushyph.tex,ushyph1.tex,ushyph2.tex,hyphen.tex]
+% \definefilefallback [lang-nl.pat] [nehyph96.tex,dutch96.pat,nehyph.tex]
+% \definefilefallback [lang-cz.pat] [czhyphen.tex,czhyph.pat]
+% \definefilefallback [lang-sk.pat] [skhyphen.tex,skhyph.pat]
+% \definefilefallback [lang-deo.pat] [dehypht.tex]
\definefilesynonym [lang-af.pat] [lang-nl.pat]
\definefilesynonym [lang-en.pat] [lang-us.pat]
diff --git a/Master/texmf-dist/tex/context/base/lang-ger.tex b/Master/texmf-dist/tex/context/base/lang-ger.tex
index 211c1bf692c..0b363abd273 100644
--- a/Master/texmf-dist/tex/context/base/lang-ger.tex
+++ b/Master/texmf-dist/tex/context/base/lang-ger.tex
@@ -131,12 +131,57 @@
%D Extra:
+% \mainlanguage[en]
+% \mainlanguage[de]
+% \mainlanguage[deo]
+% \mainlanguage[de-DE]
+% \mainlanguage[de-AT]
+% \mainlanguage[de-CH]
+%
+% \starttext
+% Die Herren Meier\index{Meier}, Müller\index{Müller}, Huber\index{Huber}
+% und Schmidt\index{Schmidt} arbeiten in der gleichen Firma.
+%
+% \index{Mass}\index{Mas}\index{Maß}\index{Maße}\index{Masse}
+% \index{Muller}\index{Mûller}
+% \index{Hutte}\index{Hütte}\index{Huttf}
+% \index{paar}\index{Paar}
+% \index{a}\index{aa}\index{ä}\index{az}\index{aza}
+% \index{o}\index{oo}\index{ö}\index{oz}\index{oza}
+% \index{u}\index{uu}\index{ü}\index{uz}\index{uza}\index{üa}
+% \index{call}\index{chip}
+%
+% \subject{Index} \placeindex
+% \stoptext
+
\installlanguage % old german
[deo]
[\c!spacing=\v!packed,
\c!default=\s!de,
\c!state=\v!stop]
+\installlanguage
+ [de-DE]
+ [\c!spacing=\v!packed,
+ \c!default=\s!de,
+ \c!state=\v!stop]
+
+\installlanguage
+ [de-AT]
+ [\c!spacing=\v!packed,
+ \c!default=\s!de,
+ \c!leftquote=\leftguillemot,
+ \c!rightquote=\rightguillemot,
+ \c!leftquotation=\leftguillemot,
+ \c!rightquotation=\rightguillemot,
+ \c!state=\v!stop]
+
+\installlanguage
+ [de-CH]
+ [\c!spacing=\v!packed,
+ \c!default=\s!de,
+ \c!state=\v!stop]
+
%D And some alternative (but very real) english patterns:
\installlanguage
diff --git a/Master/texmf-dist/tex/context/base/lang-ind.tex b/Master/texmf-dist/tex/context/base/lang-ind.tex
index 9cc6623cf0f..f9bbad0d7c6 100644
--- a/Master/texmf-dist/tex/context/base/lang-ind.tex
+++ b/Master/texmf-dist/tex/context/base/lang-ind.tex
@@ -2,7 +2,7 @@
%D [ file=lang--ind,
%D version=1997.09.03,
%D title=\CONTEXT\ Language Macros,
-%D subtitle=Indo||Iranian Languages,
+%D subtitle=Indo Iranian Languages,
%D author=Hans Hagen / Tobias Burnus,
%D date=\currentdate,
%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
diff --git a/Master/texmf-dist/tex/context/base/lang-ini.lua b/Master/texmf-dist/tex/context/base/lang-ini.lua
new file mode 100644
index 00000000000..83e9b899f87
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/lang-ini.lua
@@ -0,0 +1,453 @@
+if not modules then modules = { } end modules ['lang-ini'] = {
+ version = 1.001,
+ comment = "companion to lang-ini.tex",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+if lang.use_new then lang.use_new(true) end
+
+languages = languages or {}
+languages.version = 1.009
+languages.hyphenation = languages.hyphenation or { }
+languages.hyphenation.data = languages.hyphenation.data or { }
+
+-- 002D : hyphen-minus (ascii)
+-- 2010 : hyphen
+-- 2011 : nonbreakable hyphen
+-- 2013 : endash (compound hyphen)
+
+--~ lang:hyphenation(string)
+--~ string =lang:hyphenation()
+--~ lang:clear_hyphenation()
+
+
+do
+ -- we can consider hiding data (faster access too)
+
+ --~ local function filter(filename,what)
+ --~ local data = io.loaddata(input.find_file(texmf.instance,filename))
+ --~ local data = data:match(string.format("\\%s%%s*(%%b{})",what or "patterns"))
+ --~ return data:match("{%s*(.-)%s*}") or ""
+ --~ end
+
+ -- loading the 26 languages that we normally load in mkiv, the string based variant
+ -- takes .84 seconds (probably due to the sub's) while the lpeg variant takes .78
+ -- seconds
+
+ local leftbrace = lpeg.P("{")
+ local rightbrace = lpeg.P("}")
+ local spaces = lpeg.S(" \r\n\t\f")
+ local spacing = spaces^0
+ local validchar = 1-(spaces+rightbrace+leftbrace)
+ local validword = validchar^1
+ local content = spacing * leftbrace * spacing * lpeg.C((spacing * validword)^0) * spacing * rightbrace * lpeg.P(true)
+
+ local command = lpeg.P("\\patterns")
+ local parser = (1-command)^0 * command * content
+
+ local function filterpatterns(filename)
+ if filename:find("%.rpl") then
+ return io.loaddata(input.find_file(texmf.instance,filename)) or ""
+ else
+ return parser:match(io.loaddata(input.find_file(texmf.instance,filename)) or "")
+ end
+ end
+
+ local command = lpeg.P("\\hyphenation")
+ local parser = (1-command)^0 * command * content
+
+ local function filterexceptions(filename)
+ if filename:find("%.rhl") then
+ return io.loaddata(input.find_file(texmf.instance,filename)) or ""
+ else
+ return parser:match(io.loaddata(input.find_file(texmf.instance,filename)) or {}) -- "" ?
+ end
+ end
+
+ local function record(tag)
+ local data = languages.hyphenation.data[tag]
+ if not data then
+ data = lang.new()
+ languages.hyphenation.data[tag] = data
+ end
+ return data
+ end
+
+ languages.hyphenation.record = record
+
+ function languages.hyphenation.define(tag)
+ local data = record(tag)
+ return data:id()
+ end
+
+ function languages.hyphenation.number(tag)
+ local d = languages.hyphenation.data[tag]
+ return (d and d:id()) or 0
+ end
+
+ function languages.hyphenation.load(tag, filename, filter, target)
+ input.starttiming(languages)
+ local data = record(tag)
+ filename = (filename and filename ~= "" and input.find_file(texmf.instance,filename)) or ""
+ local ok = filename ~= ""
+ if ok then
+ lang[target](data,filterpatterns(filename))
+ else
+ lang[target](data,"")
+ end
+ languages.hyphenation.data[tag] = data
+ input.stoptiming(languages)
+ return ok
+ end
+
+ function languages.hyphenation.loadpatterns(tag, patterns)
+ return languages.hyphenation.load(tag, patterns, filterpatterns, "patterns")
+ end
+
+ function languages.hyphenation.loadexceptions(tag, exceptions)
+ return languages.hyphenation.load(tag, patterns, filterexceptions, "hyphenation")
+ end
+
+ function languages.hyphenation.exceptions(tag, ...)
+ local data = record(tag)
+ data:hyphenation(...)
+ end
+
+ function languages.hyphenation.hyphenate(tag, str)
+ return lang.hyphenate(record(tag), str)
+ end
+
+ function languages.hyphenation.lefthyphenmin(tag, value)
+ local data = record(tag)
+ if value then data:lefthyphenmin(value) end
+ return data:lefthyphenmin()
+ end
+ function languages.hyphenation.righthyphenmin(tag, value)
+ local data = record(tag)
+ if value then data:righthyphenmin(value) end
+ return data:righthyphenmin()
+ end
+
+ function languages.hyphenation.n()
+ return table.count(languages.hyphenation.data)
+ end
+
+end
+
+do
+
+ -- we can speed this one up with locals if needed
+
+ local function tolang(what)
+ if type(what) == "number" then
+ return languages.hyphenation.data[languages.numbers[what]]
+ elseif type(what) == "string" then
+ return languages.hyphenation.data[what]
+ else
+ return what
+ end
+ end
+
+ function languages.prehyphenchar(what)
+ return lang.prehyphenchar(tolang(what))
+ end
+ function languages.posthyphenchar(what)
+ return lang.posthyphenchar(tolang(what))
+ end
+
+ languages.tolang = tolang
+
+end
+
+languages.registered = languages.registered or { }
+languages.associated = languages.associated or { }
+languages.numbers = languages.numbers or { }
+
+input.storage.register(false,"languages/registered",languages.registered,"languages.registered")
+input.storage.register(false,"languages/associated",languages.associated,"languages.associated")
+
+function languages.register(tag,parent,patterns,exceptions)
+ parent = parent or tag
+ languages.registered[tag] = {
+ parent = parent,
+ patterns = patterns or string.format("lang-%s.pat",parent),
+ exceptions = exceptions or string.format("lang-%s.hyp",parent),
+ loaded = false,
+ number = 0,
+ }
+end
+
+function languages.associate(tag,script,language)
+ languages.associated[tag] = { script, language }
+end
+
+function languages.association(tag)
+ if type(tag) == "number" then
+ tag = languages.numbers[tag]
+ end
+ local lat = tag and languages.associated[tag]
+ if lat then
+ return lat[1], lat[2]
+ else
+ return nil, nil
+ end
+end
+
+function languages.loadable(tag)
+ local l = languages.registered[tag]
+ if l and l.patterns and input.find_file(texmf.instance,patterns) then
+ return true
+ else
+ return false
+ end
+end
+
+languages.share = false -- we don't share language numbers
+
+function languages.enable(tags)
+ -- beware: we cannot set tex.language, but need tex.normallanguage
+ for i=1,#tags do
+ local tag = tags[i]
+ local l = languages.registered[tag]
+ if l then
+ if not l.loaded then
+ local tag = l.parent
+ local number = languages.hyphenation.number(tag)
+ if languages.share and number > 0 then
+ l.number = number
+ else
+ -- we assume the same filenames
+ l.number = languages.hyphenation.define(tag)
+ languages.hyphenation.loadpatterns(tag,l.patterns)
+ languages.hyphenation.loadexceptions(tag,l.exceptions)
+ languages.numbers[l.number] = tag
+ end
+ l.loaded = true
+ end
+ if l.number > 0 then
+ return l.number
+ end
+ end
+ end
+ return 0
+end
+
+-- e['implementer']= 'imple{m}{-}{-}menter'
+-- e['manual'] = 'man{}{}{}'
+-- e['as'] = 'a-s'
+-- e['user-friendly'] = 'user=friend-ly'
+-- e['exceptionally-friendly'] = 'excep-tionally=friend-ly'
+
+function languages.hyphenation.loadwords(tag, filename)
+ local id = languages.hyphenation.number(tag)
+ if id > 0 then
+ local l = lang.new(id)
+ input.starttiming(languages)
+ local data = io.loaddata(filename) or ""
+ l:hyphenation(data)
+ input.stoptiming(languages)
+ end
+end
+
+languages.hyphenation.define ("zerolanguage")
+languages.hyphenation.loadpatterns ("zerolanguage") -- else bug
+languages.hyphenation.loadexceptions("zerolanguage") -- else bug
+
+languages.logger = languages.logger or { }
+
+function languages.logger.report()
+ local result = {}
+ for _, tag in ipairs(table.sortedkeys(languages.registered)) do
+ local l = languages.registered[tag]
+ if l.loaded then
+ local p = (l.patterns and "pat") or '-'
+ local e = (l.exceptions and "exc") or '-'
+ result[#result+1] = string.format("%s:%s:%s:%s:%s", tag, l.parent, p, e, l.number)
+ end
+ end
+ return (#result > 0 and table.concat(result," ")) or "none"
+end
+
+
+languages.words = languages.words or {}
+languages.words.data = languages.words.data or {}
+languages.words.enable = false
+languages.words.threshold = 4
+
+languages.words.colors = {
+ ["known"] = "green",
+ ["unknown"] = "red",
+}
+
+do
+
+ local spacing = lpeg.S(" \n\r\t")
+ local markup = lpeg.S("-=")
+ local lbrace = lpeg.P("{")
+ local rbrace = lpeg.P("}")
+ local disc = (lbrace * (1-rbrace)^0 * rbrace)^1 -- or just 3 times, time this
+ local word = lpeg.Cs((markup/"" + disc/"" + (1-spacing))^1)
+
+ function languages.words.load(tag, filename)
+ local filename = input.find_file(texmf.instance,filename,'other text file') or ""
+ if filename ~= "" then
+ input.starttiming(languages)
+ local data = io.loaddata(filename) or ""
+ local words = languages.words.data[tag] or {}
+ parser = (spacing + word/function(s) words[s] = true end)^0
+ parser:match(data)
+ languages.words.data[tag] = words
+ input.stoptiming(languages)
+ end
+ end
+
+end
+
+function languages.words.found(id, str)
+ local tag = languages.numbers[id]
+ if tag then
+ local data = languages.words.data[tag]
+ return data and (data[str] or data[str:lower()])
+ else
+ return false
+ end
+end
+
+-- The following code is an adaption of experimental code for
+-- hyphenating and spell checking.
+
+do
+
+ local glyph, disc, kern = node.id('glyph'), node.id('disc'), node.id('kern')
+
+ local bynode = node.traverse
+ local bychar = string.utfcharacters
+
+ local function mark_words(head,found) -- can be optimized
+ local cd = characters.data
+ local uc = utf.char
+ local current, start, str, language, n = head, nil, "", nil, 0
+ local function action()
+ if #str > 0 then
+ local f = found(language,str)
+ if f then
+ for i=1,n do
+ f(start)
+ start = start.next
+ end
+ end
+ end
+ str, start, n = "", nil, 0
+ end
+ while current do
+ local id = current.id
+ if id == glyph then
+ local a = current.lang
+ if a then
+ if a ~= language then
+ if start then
+ action()
+ end
+ language = a
+ end
+ elseif start then
+ action()
+ language = a
+ end
+ if current.subtype > 0 then
+ start = start or current
+ n = n + 1
+ for g in bynode(current.components) do
+ str = str .. uc(g.char)
+ end
+ else
+ local code = current.char
+ if cd[code].uccode or cd[code].lccode then
+ start = start or current
+ n = n + 1
+ str = str .. uc(code)
+ else
+ if start then
+ action()
+ end
+ end
+ end
+ elseif id == disc then
+ -- ok
+ elseif id == kern and current.subtype == 0 and start then
+ -- ok
+ elseif start then
+ action()
+ end
+ current = current.next
+ end
+ if start then
+ action()
+ end
+ return head
+ end
+
+ languages.words.methods = { }
+ languages.words.method = 1
+
+ languages.words.methods[1] = function(head, attribute, yes, nop)
+ local set = node.set_attribute
+ local unset = node.unset_attribute
+ local wrong, right = false, false
+ if nop then wrong = function(n) set(n,attribute,nop) end end
+ if yes then right = function(n) set(n,attribute,yes) end end
+ for n in node.traverse(head) do
+ unset(n,attribute) -- hm
+ end
+ local found, done = languages.words.found, false
+ mark_words(head, function(language,str)
+ if #str < languages.words.threshold then
+ return false
+ elseif found(language,str) then
+ done = true
+ return right
+ else
+ done = true
+ return wrong
+ end
+ end)
+ return head, done
+ end
+
+ local lw = languages.words
+
+ function languages.words.check(head)
+ if head.next and lw.enable then
+ local color = attributes.numbers['color']
+ local colors = lw.colors
+ local alc = attributes.list[color]
+ return lw.methods[lw.method](head, color, alc[colors.known], alc[colors.unknown])
+ else
+ return head, false
+ end
+ end
+
+end
+
+-- for the moment we hook it into the attribute handler
+
+--~ languagehacks = { }
+
+--~ function languagehacks.process(namespace,attribute,head)
+--~ return languages.check(head)
+--~ end
+
+--~ chars.plugins.language = {
+--~ namespace = languagehacks,
+--~ processor = languagehacks.process
+--~ }
+
+-- must happen at the tex end
+
+languages.associate('en','latn','eng')
+languages.associate('uk','latn','eng')
+languages.associate('nl','latn','nld')
+languages.associate('de','latn','deu')
+languages.associate('fr','latn','fra')
diff --git a/Master/texmf-dist/tex/context/base/lang-ini.mkii b/Master/texmf-dist/tex/context/base/lang-ini.mkii
new file mode 100644
index 00000000000..7a1937ec507
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/lang-ini.mkii
@@ -0,0 +1,169 @@
+%D \module
+%D [ file=lang-ini,
+%D version=1996.01.25,
+%D title=\CONTEXT\ Language Macros,
+%D subtitle=Initialization,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\unprotect
+
+\def\mkdoloadpatterns#1#2%
+ {\expanded{\getcommacommandsize[\getvalue{\??la#2\s!encoding}]}%
+ \ifnum\commalistsize>0
+ %\message{[nofpatterns #2: \commalistsize/\getvalue{\??la#2\s!encoding}]}%
+ \dorecurse\commalistsize
+ {\expanded{\getfromcommacommand[\getvalue{\??la#2\s!encoding}][\recurselevel]}%
+ \let\patternencoding\commalistelement
+ \expanded{\getfromcommacommand[\getvalue{\??la#2\s!mapping }][\recurselevel]}%
+ \let\patternmapping \commalistelement
+ %\message{[patterns: #1/#2/\patternencoding/\patternmapping]}%
+ \dodoloadpatterns{#1}{#2}\patternencoding\patternmapping}%
+ \else
+ %\message{[patterns: #1/#2]}%
+ \dodoloadpatterns{#1}{#2}{}{}%
+ \fi}
+
+\beginXETEX
+
+\def\mkdoloadpatterns#1#2%
+ {\letvalue{\??la#2\s!encoding}\empty
+ \letvalue{\??la#2\s!mapping }\empty
+ \dodoloadpatterns{#1}{#2}{}{}}
+
+\endXETEX
+
+
+\def\setuphyppatencoding
+ {\pathypsettings
+ \enableregime[utf]}
+
+\def\dodoloadpatterns#1#2#3#4% beware, loaded language also incr
+ {\normallanguage\loadedlanguage % when not really needed
+ \bgroup
+ \let\synchronizepatterns\relax % needed?
+ \let\enabledmapping \empty % needed?
+ \doifelsenothing{#3}{\enableencoding[\s!default]}{\enableencoding[#3]}%
+ \doifelsenothing{#4}{\enablemapping [\s!default]}{\enablemapping [#4]}%
+ \setuphyppatencoding
+ \ifundefined{\??la\??la:\currentencoding:\currentmapping:#2}%
+ \let\doshowpatterns\relax
+ \edef\alreadyloadedlanguage
+ {\executeifdefined{\??la\??la:\currentencoding:\currentmapping:\truefilename{\f!languageprefix#2.\f!patternsextension}}\empty}%
+ \edef\alreadyloadedlanguage
+ {\executeifdefined{\??la\??la:\currentencoding:\currentmapping:\f!languageprefix#2.\f!patternsextension}\alreadyloadedlanguage}%
+ \ifx\alreadyloadedlanguage\empty
+ \letgvalue{\??la\??la:\currentencoding:\currentmapping:#2}\loadedlanguage
+ \doifundefined{\??la\??la:\s!default:\s!default:#2}{\letgvalue{\??la\??la:\s!default:\s!default:#2}\loadedlanguage}% fall back
+ \startpatternloading{\truefilename{\f!languageprefix#2.\f!patternsextension}}{#3}{#4}%
+ \readsysfile{\truefilename{\f!languageprefix#2.\f!patternsextension}}
+ {\setxvalue{\??la#1\s!patterns}{#2}%
+ \setxvalue{\??la\??la:\currentencoding:\currentmapping:\truefilename{\f!languageprefix#2.\f!patternsextension}}{\number\loadedlanguage}%
+ \xdef\preloadedpmessage{\preloadedpmessage\doshowpatterns{#2}{\number\normallanguage}{\currentencoding}{\currentmapping}}%
+ \doglobal\addtocommalist{#2}\preloadedpatterns
+ \showmessage\m!linguals1{#2,#1,\loadedlanguage,\currentencoding,\currentmapping}}
+ {\showmessage\m!linguals2{#2,#1,\loadedlanguage,\currentencoding,\currentmapping,\f!languageprefix#2.\f!patternsextension,\truefilename{\f!languageprefix#2.\f!patternsextension}}}%
+ \stoppatternloading
+ \startpatternloading{\truefilename{\f!languageprefix#2.\f!hyphensextension}}{#3}{#4}%
+ \readsysfile{\truefilename{\f!languageprefix#2.\f!hyphensextension}}
+ {\showmessage\m!linguals3{#2,#1,\loadedlanguage,\currentencoding,\currentmapping}}
+ {\showmessage\m!linguals4{#2,#1,\loadedlanguage,\currentencoding,\currentmapping}}%
+ \stoppatternloading
+ \doglobal\increment\loadedlanguage
+ % \stopencoding
+ \else % optimization, introduced 2004.08.24, while sorting out changes in tl
+ \letgvalue{\??la\??la:\currentencoding:\currentmapping:#2}\alreadyloadedlanguage
+ \doifundefined{\??la\??la:\s!default:\s!default:#2}{\letgvalue{\??la\??la:\s!default:\s!default:#2}\loadedlanguage}% fall back
+ \setxvalue{\??la#1\s!patterns}{#2}%
+ \xdef\preloadedpmessage{\preloadedpmessage\doshowpatterns{#2}{[\number\alreadyloadedlanguage]}{\currentencoding}{\currentmapping}}%
+ \doglobal\addtocommalist{#2}\preloadedpatterns
+ \showmessage\m!linguals1{#2,#1,[\alreadyloadedlanguage],\currentencoding,\currentmapping}%
+ \fi
+ \fi
+ \egroup}
+
+%D Since we can only load patterns in ini\TeX, we nil the
+%D loading before dumping (which saves a bit of memory, but
+%D strangely enough not in the format).
+
+\appendtoks
+ \gdef\doloadpatterns{\doglobal\increment\loadedlanguage\gobbletwoarguments}%
+ \globallet\dodoloadpatterns\gobblefourarguments
+\to \everydump
+
+\def\mkdoifpatternselse#1%
+ {\expanded{\doifinsetelse{#1}{\preloadedpatterns}}}
+
+\def\mkloadlanguagefiles#1%
+ {\doifelsevalue{\??la#1\c!state}\v!start
+ {\doifelsevaluenothing{\??la#1\s!patterns}
+ {\edef\languagesuffix{#1}}
+ {\edef\languagesuffix{\getvalue{\??la#1\s!patterns}}}%
+ \doifundefinedelse{\??la\??la:\currentencoding:\currentmapping:\languagesuffix}
+ {\mkdoloadpatterns{#1}\languagesuffix}
+ {\bgroup
+ \edef\loadedlanguage{\getvalue{\??la\??la:\currentencoding:\currentmapping:\languagesuffix}}%
+ \showmessage\m!linguals1{\languagesuffix,#1,\loadedlanguage,*,*}%
+ \showmessage\m!linguals3{\languagesuffix,#1,\loadedlanguage,*,*}%
+ \egroup}}
+ {\showmessage\m!linguals5{#1}}}
+
+\def\mksetnormallanguage#1#2% current default
+ {% called quite often, so we use \csname
+ % \def\synchronizepatterns{\setnormallanguage
+ % {\csname\??la\currentlanguage\s!patterns\endcsname}}% called often
+ % of even better pre-expand in an ugly way:
+ \@EA\def\@EA\synchronizepatterns\@EA{\@EA\dosetnormallanguage
+ \csname\??la\currentlanguage\s!patterns\endcsname}%
+ \donefalse
+ \synchronizepatterns
+ \ifdone\else
+ \def\synchronizepatterns{\dosetnormallanguage\currentlanguage}%
+ \synchronizepatterns
+ \ifdone\else
+ \ifx\currentdefaultlanguage\empty\else
+ \@EA\def\@EA\synchronizepatterns\@EA{\@EA\dosetnormallanguage
+ \csname\??la\currentdefaultlanguage\s!patterns\endcsname}%
+ \synchronizepatterns
+ \ifdone\else
+ \dosetnormallanguage\currentdefaultlanguage
+ \synchronizepatterns
+ \fi
+ \fi
+ \fi
+ \fi}
+
+\def\dosetnormallanguage#1% #1 == \cs
+ {\dodosetnormallanguage{:\currentencoding:\currentmapping:}#1{%
+ \dodosetnormallanguage{:\currentencoding:\s!default :}#1{%
+ \dodosetnormallanguage{:\s!default :\currentmapping:}#1{%
+ \dodosetnormallanguage{:\s!default :\s!default :}#1\empty}}}}
+
+\def\dodosetnormallanguage#1#2%
+ {\ifcsname\??la\??la#1#2\endcsname
+ \edef\thenormallanguage{\csname\??la\??la#1#2\endcsname}% can be \chardef
+ \ifx\thenormallanguage\empty
+ \@EAEAEA\firstofoneargument
+ \else
+ \donetrue
+ \@EA\xdef\csname\??la\currentlanguage\s!patterns\endcsname{#2}%
+ \normallanguage\thenormallanguage\relax % \relax is needed for lookahead problems
+ \@EAEAEA\gobbleoneargument
+ \fi
+ \else
+ \@EA\firstofoneargument
+ \fi}
+
+\beginXETEX
+ \def\synchronizepatternswithfont{}
+ \def\doloadpatterns #1#2{\dodoloadpatterns{#1}{#2}\s!default\s!default}
+ \def\setnormallanguage #1{\dosetnormallanguage{:\s!default:\s!default:}#1\empty}
+ \def\setuphyppatencoding {\pathypsettings}
+\endXETEX
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/lang-ini.mkiv b/Master/texmf-dist/tex/context/base/lang-ini.mkiv
new file mode 100644
index 00000000000..0623e57a317
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/lang-ini.mkiv
@@ -0,0 +1,82 @@
+%D \module
+%D [ file=lang-ini,
+%D version=1996.01.25,
+%D title=\CONTEXT\ Language Macros,
+%D subtitle=Initialization,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\unprotect
+
+\registerctxluafile{lang-ini}{1.001}
+
+\let\synchronizepatterns \relax % todo: cleanup
+\let\synchronizepatternswithfont\relax % todo: cleanup
+
+\def\mkdoloadpatterns#1#2%
+ {\ctxlua{languages.register(
+ "#1",
+ "#2",
+ "\truefilename{\f!languageprefix#2.\f!patternsextension}",
+ "\truefilename{\f!languageprefix#2.\f!hyphensextension }")
+ }}
+
+\def\mkdoifpatternselse#1%
+ {\ctxlua{cs.testcase(languages.loadable("#1"))}}
+
+\def\mkloadlanguagefiles#1%
+ {\doifelsevaluenothing{\??la#1\s!patterns}
+ {\mkdoloadpatterns{#1}{#1}}
+ {\mkdoloadpatterns{#1}{\getvalue{\??la#1\s!patterns}}}}
+
+\def\mksetnormallanguage#1#2% current default / we can freeze the number here
+ {\normallanguage=\ctxlua{tex.sprint(languages.enable({
+ "\csname\??la#1\s!patterns\endcsname","#1",
+ "\csname\??la#2\s!patterns\endcsname","#2",
+ }))}\relax}
+
+% to be tested
+%
+% \def\mkdosetnormallanguage#1#2% current default
+% {\normallanguage=\ctxlua{tex.sprint(languages.enable({
+% "\csname\??la#1\s!patterns\endcsname","#1",
+% "\csname\??la#2\s!patterns\endcsname","#2",
+% }))}}%
+% \setxvalue{\??la\??la#1#2}{\number\normallanguage}}
+%
+% \def\mksetnormallanguage#1#2% current default / we can freeze the number here
+% {\normallanguage\executeifdefined{\??la\??la#1#2}{\mkdosetnormallanguage{#1}{#2}}}
+
+
+\def\loadspellchecklist
+ {\dodoubleempty\doloadspellchecklist}
+
+% mkiv only -- todo: internationalize command names
+
+% \loadspellchecklist[en][words-en.txt]
+% \loadspellchecklist[nl][words-nl.txt]
+% \setupspellchecking[state=start]
+
+\def\loadspellchecklist[#1][#2]%
+ {\ctxlua{languages.words.load("#1","#2")}}
+
+\def\setupspellchecking
+ {\dosingleargument\dosetupspellchecking}
+
+\def\setupspellchecking[#1]% todo colors
+ {\getparameters[\??wl][#1]%
+ \doifelse\@@wlstate\v!start
+ {\ctxlua{languages.words.enable=true }}
+ {\ctxlua{languages.words.enable=false}}}
+
+\setupspellchecking
+ [\c!state=\v!stop]
+
+\uchyph=1
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/lang-ini.tex b/Master/texmf-dist/tex/context/base/lang-ini.tex
index 85243f3de31..d9185eb33f2 100644
--- a/Master/texmf-dist/tex/context/base/lang-ini.tex
+++ b/Master/texmf-dist/tex/context/base/lang-ini.tex
@@ -11,7 +11,7 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-%D Todo : --language=pl,en,nl : nl incs number of language
+%D This module needs a further cleanup (real split between ii/iv).
%D This module implements the (for the moment still simple)
%D multi||language support of \CONTEXT, which should not be
@@ -157,24 +157,6 @@
\normallanguage\zerocount \def\loadedlanguage{1}
-%D Let's start with setting the lowercase code of quotes, so
-%D that we get proper hyphenation in languages like Dutch,
-%D French and Czech.
-
-% elsewhere: \lccode`\'=`\'
-
-% \def\showlccodes
-% {\currentlanguage:\space
-% \dostepwiserecurse{0}{255}{1}
-% {\ifnum\lccode\recurselevel>0
-% \char\recurselevel:\the\lccode\recurselevel\relax\space
-% \fi}
-% \endgraf}
-
-% \de \hyphenatedword{Works''} \showlccodes
-% \nl \hyphenatedword{Works''} \showlccodes
-% \uk \hyphenatedword{Works''} \showlccodes
-
%D \macros
%D {currentlanguage, setupcurrentlanguage}
%D
@@ -271,9 +253,10 @@
\def\doiflanguageelse#1{\doifdefinedelse{\??la#1\c!state}}
-\def\doinstalllanguage[#1][#2]%
- {%\ConvertConstantAfter\doifinstringelse{=}{#2}
- \doifassignmentelse{#2}
+\ifx\mkloadlanguagefiles\undefined \let\mkloadlanguagefiles\gobbleoneargument \fi
+
+\def\doinstalllanguage[#1][#2]% some day we will make one for mkii and mkiv
+ {\doifassignmentelse{#2}
{\doiflanguageelse{#1}
{\getparameters[\??la#1][#2]}
{\setvalue{\l!prefix!#1}{#1}%
@@ -291,18 +274,7 @@
#2]}%
\doifvalue{\??la#1\c!default}{#1}{\letvalue{\??la#1\c!default}\empty}%
% loop in deo: \doifvalue{\??la#1\s!patterns}{#1}{\letvalue{\??la#1\c!default}\empty}%
- \doifelsevalue{\??la#1\c!state}\v!start
- {\doifelsevaluenothing{\??la#1\s!patterns}
- {\edef\languagesuffix{#1}}
- {\edef\languagesuffix{\getvalue{\??la#1\s!patterns}}}%
- \doifundefinedelse{\??la\??la:\currentencoding:\currentmapping:\languagesuffix}
- {\doloadpatterns{#1}\languagesuffix}
- {\bgroup
- \edef\loadedlanguage{\getvalue{\??la\??la:\currentencoding:\currentmapping:\languagesuffix}}%
- \showmessage\m!linguals1{\languagesuffix,#1,\loadedlanguage,*,*}%
- \showmessage\m!linguals3{\languagesuffix,#1,\loadedlanguage,*,*}%
- \egroup}}
- {\showmessage\m!linguals5{#1}}}
+ \mkloadlanguagefiles{#1}}
{\setvalue{\l!prefix!#1}{#2}%
\dodoinstalllanguage{#1}{#2}}}
@@ -326,89 +298,11 @@
\let \patternencoding \s!default
\let \patternmapping \s!default
-\def\doloadpatterns#1#2%
- {\expanded{\getcommacommandsize[\getvalue{\??la#2\s!encoding}]}%
- \ifnum\commalistsize>0
- %\message{[nofpatterns #2: \commalistsize/\getvalue{\??la#2\s!encoding}]}%
- \dorecurse\commalistsize
- {\expanded{\getfromcommacommand[\getvalue{\??la#2\s!encoding}][\recurselevel]}%
- \let\patternencoding\commalistelement
- \expanded{\getfromcommacommand[\getvalue{\??la#2\s!mapping }][\recurselevel]}%
- \let\patternmapping \commalistelement
- %\message{[patterns: #1/#2/\patternencoding/\patternmapping]}%
- \dodoloadpatterns{#1}{#2}\patternencoding\patternmapping}%
- \else
- %\message{[patterns: #1/#2]}%
- \dodoloadpatterns{#1}{#2}{}{}%
- \fi}
-
-\def\setuphyppatencoding
- {\pathypsettings
- \enableregime[utf]}
-
-\beginXETEX
- \def\setuphyppatencoding{\pathypsettings}
-\endXETEX
-
-\beginMETATEX
- \def\setuphyppatencoding{\pathypsettings}
-\endMETATEX
-
-\def\dodoloadpatterns#1#2#3#4% beware, loaded language also incr
- {\normallanguage\loadedlanguage % when not really needed
- \bgroup
- \let\synchronizepatterns\relax % needed?
- \let\enabledmapping \empty % needed?
- \doifelsenothing{#3}{\enableencoding[\s!default]}{\enableencoding[#3]}%
- \doifelsenothing{#4}{\enablemapping [\s!default]}{\enablemapping [#4]}%
- \setuphyppatencoding
- \ifundefined{\??la\??la:\currentencoding:\currentmapping:#2}%
- \let\doshowpatterns\relax
- \edef\alreadyloadedlanguage
- {\executeifdefined{\??la\??la:\currentencoding:\currentmapping:\truefilename{\f!languageprefix#2.\f!patternsextension}}\empty}%
- \edef\alreadyloadedlanguage
- {\executeifdefined{\??la\??la:\currentencoding:\currentmapping:\f!languageprefix#2.\f!patternsextension}\alreadyloadedlanguage}%
- \ifx\alreadyloadedlanguage\empty
- \letgvalue{\??la\??la:\currentencoding:\currentmapping:#2}\loadedlanguage
- \doifundefined{\??la\??la:\s!default:\s!default:#2}{\letgvalue{\??la\??la:\s!default:\s!default:#2}\loadedlanguage}% fall back
- \startpatternloading{\truefilename{\f!languageprefix#2.\f!patternsextension}}{#3}{#4}%
- \readsysfile{\truefilename{\f!languageprefix#2.\f!patternsextension}}
- {\setxvalue{\??la#1\s!patterns}{#2}%
- \setxvalue{\??la\??la:\currentencoding:\currentmapping:\truefilename{\f!languageprefix#2.\f!patternsextension}}{\number\loadedlanguage}%
- \xdef\preloadedpmessage{\preloadedpmessage\doshowpatterns{#2}{\number\normallanguage}{\currentencoding}{\currentmapping}}%
- \doglobal\addtocommalist{#2}\preloadedpatterns
- \showmessage\m!linguals1{#2,#1,\loadedlanguage,\currentencoding,\currentmapping}}
- {\showmessage\m!linguals2{#2,#1,\loadedlanguage,\currentencoding,\currentmapping,\f!languageprefix#2.\f!patternsextension,\truefilename{\f!languageprefix#2.\f!patternsextension}}}%
- \stoppatternloading
- \startpatternloading{\truefilename{\f!languageprefix#2.\f!hyphensextension}}{#3}{#4}%
- \readsysfile{\truefilename{\f!languageprefix#2.\f!hyphensextension}}
- {\showmessage\m!linguals3{#2,#1,\loadedlanguage,\currentencoding,\currentmapping}}
- {\showmessage\m!linguals4{#2,#1,\loadedlanguage,\currentencoding,\currentmapping}}%
- \stoppatternloading
- \doglobal\increment\loadedlanguage
- % \stopencoding
- \else % optimization, introduced 2004.08.24, while sorting out changes in tl
- \letgvalue{\??la\??la:\currentencoding:\currentmapping:#2}\alreadyloadedlanguage
- \doifundefined{\??la\??la:\s!default:\s!default:#2}{\letgvalue{\??la\??la:\s!default:\s!default:#2}\loadedlanguage}% fall back
- \setxvalue{\??la#1\s!patterns}{#2}%
- \xdef\preloadedpmessage{\preloadedpmessage\doshowpatterns{#2}{[\number\alreadyloadedlanguage]}{\currentencoding}{\currentmapping}}%
- \doglobal\addtocommalist{#2}\preloadedpatterns
- \showmessage\m!linguals1{#2,#1,[\alreadyloadedlanguage],\currentencoding,\currentmapping}%
- \fi
- \fi
- \egroup}
+\ifx\mkloadpatterns \undefined \let\mkloadpatterns \gobbletwoarguments \fi
+\ifx\mkdoifpatternselse\undefined \let\mkdoifpatternselse\gobbletwoarguments \fi
-\def\doifpatternselse#1%
- {\expanded{\doifinsetelse{#1}{\preloadedpatterns}}}
-
-%D Since we can only load patterns in ini\TeX, we nil the
-%D loading before dumping (which saves a bit of memory, but
-%D strangely enough not in the format).
-
-\appendtoks
- \gdef\doloadpatterns{\doglobal\increment\loadedlanguage\gobbletwoarguments}%
- \globallet\dodoloadpatterns\gobblefourarguments
-\to \everydump
+\def\doloadpatterns {\mkdoloadpatterns}
+\def\doifpatternselse{\mkdoifpatternselse}
%D \macros
%D {setuplanguage}
@@ -517,44 +411,12 @@
%D We take care of local as well as standardized language
%D switching (fr and fa, de and du, but nl and nl).
-% new, encoding specific patterns
-
-\ifx\synchronizepatterns\undefined \let\synchronizepatterns\relax \fi
-
-\beginTEX
-
-\def\dosetnormallanguage#1#2%
- {\@EA\ifx\csname\??la\??la#1#2\endcsname\relax
- \@EA\firstofoneargument
- \else\@EA\ifx\csname\??la\??la#1#2\endcsname\empty
- \@EAEAEA\firstofoneargument
- \else
- \donetrue
- \@EA\xdef\csname\??la\currentlanguage\s!patterns\endcsname{#2}%
- \normallanguage\csname\??la\??la#1#2\endcsname\relax % \relax is needed for lookahead problems
- \@EAEAEA\gobbleoneargument
- \fi\fi}
-
-\endTEX
+\ifx\synchronizepatterns \undefined \let\synchronizepatterns\relax \fi
+\ifx\synchronizepatternswithfont\undefined \def\synchronizepatternswithfont{\synchronizepatterns} \fi
-\beginETEX
+\ifx\mksetnormallanguage\undefined \let\mksetnormallanguage\gobbletwoarguments \fi
-\def\dosetnormallanguage#1#2%
- {\ifcsname\??la\??la#1#2\endcsname
- \edef\thenormallanguage{\csname\??la\??la#1#2\endcsname}%
- \ifx\thenormallanguage\empty
- \@EAEAEA\firstofoneargument
- \else
- \donetrue
- \@EA\xdef\csname\??la\currentlanguage\s!patterns\endcsname{#2}%
- \normallanguage\thenormallanguage\relax % \relax is needed for lookahead problems
- \@EAEAEA\gobbleoneargument
- \fi
- \else
- \@EA\firstofoneargument
- \fi}
-
-\endETEX
+\def\setnormallanguage{\mksetnormallanguage}
\newevery \everylanguage \relax
\newevery \everyresetlanguagespecifics \relax
@@ -562,68 +424,31 @@
\def\disablelanguagespecifics
{\ignorecompoundcharacter}
-% \def\setnormallanguage#1%
-% {\dosetnormallanguage{:\currentencoding:\currentmapping:}{#1}{%
-% \dosetnormallanguage{:\currentencoding:\s!default :}{#1}{%
-% \dosetnormallanguage{:\s!default :\currentmapping:}{#1}{%
-% \dosetnormallanguage{:\s!default :\s!default :}{#1}\empty}}}}
-%
-% assume #1 = \cs
-
-\def\setnormallanguage#1%
- {\dosetnormallanguage{:\currentencoding:\currentmapping:}#1{%
- \dosetnormallanguage{:\currentencoding:\s!default :}#1{%
- \dosetnormallanguage{:\s!default :\currentmapping:}#1{%
- \dosetnormallanguage{:\s!default :\s!default :}#1\empty}}}}
+\def\sethyphenationvariables
+ {\lefthyphenmin 0\languageparameter\s!lefthyphenmin \relax
+ \righthyphenmin0\languageparameter\s!righthyphenmin\relax
+ \lefthyphenmin \numexpr\lefthyphenmin +\hyphenminoffset\relax
+ \righthyphenmin\numexpr\righthyphenmin+\hyphenminoffset\relax}
\def\docomplexlanguage% assumes that \currentlanguage is set
{\edef\currentdefaultlanguage{\defaultlanguage\currentlanguage}%
- % called quite often, so we use \csname
- % \def\synchronizepatterns{\setnormallanguage
- % {\csname\??la\currentlanguage\s!patterns\endcsname}}% called often
- % of even better pre-expand in an ugly way:
- \@EA\def\@EA\synchronizepatterns\@EA{\@EA\setnormallanguage
- \csname\??la\currentlanguage\s!patterns\endcsname}%
- \donefalse
- \synchronizepatterns
- \ifdone\else
- \def\synchronizepatterns{\setnormallanguage\currentlanguage}%
- \synchronizepatterns
- \ifdone\else
- \ifx\currentdefaultlanguage\empty\else
- % \def\synchronizepatterns{\setnormallanguage
- % {\csname\??la\currentdefaultlanguage\s!patterns\endcsname}}%
- \@EA\def\@EA\synchronizepatterns\@EA{\@EA\setnormallanguage
- \csname\??la\currentdefaultlanguage\s!patterns\endcsname}%
- \synchronizepatterns
- \ifdone\else
- \setnormallanguage\currentdefaultlanguage
- \synchronizepatterns
- \fi
- \fi
- \fi
- \fi
+ \mksetnormallanguage\currentlanguage\currentdefaultlanguage
\the\everylanguage
\enablelanguagespecifics[\currentlanguage]%
- % strange, what is this doing here, dangerous for {il2,ec}
- % \edef\languagemapping{\csname\??la\currentlanguage\s!mapping\endcsname}%
- % \ifx\languagemapping\empty\else
- % \fastenablemapping\languagemapping
- % \fi
- \lefthyphenmin 0\languageparameter\s!lefthyphenmin
- \righthyphenmin0\languageparameter\s!righthyphenmin
+ \sethyphenationvariables
\relax
% will be definable and move to core-spa !
\doifelse{\languageparameter\c!spacing}\v!broad
\nonfrenchspacing\frenchspacing}
-\ifx\enablelanguagespecifics\undefined
-
- \def\enablelanguagespecifics[#1]{}
+\ifx\enablelanguagespecifics\undefined \def\enablelanguagespecifics[#1]{} \fi
-\fi
+% The following may be a solution for the fact that one cannot
+% change catcodes of characters like : and ; inside an environment.
-\beginETEX
+\appendtoks
+ \enablelanguagespecifics[\currentlanguage]%
+\to \everystarttext
\def\complexlanguage[#1]%
{\edef\askedlanguage{#1}%
@@ -639,32 +464,10 @@
\fi
\fi}
-\endETEX
-
-\beginTEX
-
-\def\complexlanguage[#1]%
- {\edef\askedlanguage{#1}%
- \ifx\askedlanguage\empty \else
- \@EA\ifx\csname\l!prefix!\askedlanguage\endcsname\relax
- \showmessage\m!linguals6{#1}%
- \else
- \edef\askedlanguage{\csname\l!prefix!\askedlanguage\endcsname}%
- \ifx\currentlanguage\askedlanguage \else
- \setcurrentlanguage\currentmainlanguage\askedlanguage
- \docomplexlanguage
- \fi
- \fi
- \fi}
-
-\endTEX
-
\let\simplelanguage\normallanguage
\definecomplexorsimple\language
-\beginETEX
-
\def\mainlanguage[#1]%
{\edef\askedlanguage{#1}%
\ifx\askedlanguage\empty \else
@@ -677,24 +480,6 @@
\fi
\fi}
-\endETEX
-
-\beginTEX
-
-\def\mainlanguage[#1]%
- {\edef\askedlanguage{#1}%
- \ifx\askedlanguage\empty \else
- \@EA\ifx\csname\l!prefix!\askedlanguage\endcsname\relax\else
- \edef\askedlanguage{\csname\l!prefix!\askedlanguage\endcsname}%
- \ifx\currentmainlanguage\askedlanguage \else
- \setcurrentlanguage\askedlanguage\askedlanguage
- \docomplexlanguage
- \fi
- \fi
- \fi}
-
-\endTEX
-
%D \macros
%D {defaultlanguage,languagedefault}
%D
@@ -713,9 +498,6 @@
\def\languagedefault#1#2%
{\csname\??la\defaultlanguage{#1}#2\endcsname}
-% \def\languageparameter#1%
-% {\csname\??la\defaultlanguage\currentlanguage#1\endcsname}
-
\def\languageparameter % @EA = speedup
{\@EA\dolanguageparameter\@EA{\defaultlanguage\currentlanguage}}
@@ -728,120 +510,27 @@
\def\defaultlanguageparameter#1%
{\csname\??la\s!default#1\endcsname}
-\beginETEX
-
- \def\dolanguageparameter#1#2%
- {\csname\??la
- \ifcsname\??la\currentlanguage#2\endcsname
- \currentlanguage
- \else\ifcsname\??la#1#2\endcsname
- \@EA\ifx\csname\??la#1#2\endcsname\empty\s!default\else#1\fi
- \else
- \s!default
- \fi\fi
- #2\endcsname}
-
- \def\dospecificlanguageparameter#1#2#3%
- {\csname\??la
- \ifcsname\??la#2#3\endcsname
- \@EA\ifx\csname\??la#2#3\endcsname\empty\s!default\else#2\fi
- \else\ifcsname\??la#1#3\endcsname
- \@EA\ifx\csname\??la#1#3\endcsname\empty\s!default\else#1\fi
- \else
- \s!default
- \fi\fi
- #3\endcsname}
-
-\endETEX
-
-\beginTEX
-
- \def\dolanguageparameter#1#2%
- {\csname\??la
- \@EA\ifx\csname\??la\currentlanguage#2\endcsname\relax
- \@EA\ifx\csname\??la#1#2\endcsname\relax
- \s!default
- \else
- \@EA\ifx\csname\??la#1#2\endcsname\empty\s!default\else#1\fi
- \fi
- \else
- \currentlanguage
- \fi
- #2\endcsname}
-
- \def\dospecificlanguageparameter#1#2#3%
- {\csname\??la
- \@EA\ifx\csname\??la#2#3\endcsname\relax
- \@EA\ifx\csname\??la#1#3\endcsname\relax
- \s!default
- \else
- \@EA\ifx\csname\??la#1#3\endcsname\empty\s!default\else#1\fi
- \fi
- \else
- \@EA\ifx\csname\??la#2#3\endcsname\empty\s!default\else#2\fi
- \fi
- #3\endcsname}
-
-\endTEX
-
-% moved
-%
-% %D \macros
-% %D {leftguillemot,rightguillemot,leftsubguillemot,rightsubguillemot,
-% %D ...single...quote,...double...quote}
-% %D
-% %D We assign logical names to all kind of quote and sentence
-% %D boundary characters.
-% %D
-% %D When using Computer Modern Roman, the next definitions
-% %D looks a bit better than the default ligatures.
-% %D
-% %D \starttyping
-% %D \def\lowerleftsingleninequote {,}
-% %D \def\lowerleftdoubleninequote {,\kern-.1em,}
-% %D \def\upperleftsingleninequote {'}
-% %D \def\upperleftdoubleninequote {''\kern-.1em}
-% %D \def\upperleftsinglesixquote {`}
-% %D \def\upperleftdoublesixquote {`\kern-.1em`}
-% %D
-% %D \def\lowerrightsingleninequote {,}
-% %D \def\lowerrightdoubleninequote {,\kern-.1em,}
-% %D \def\upperrightsingleninequote {'}
-% %D \def\upperrightdoubleninequote {''}
-% %D \def\upperrightsinglesixquote {`}
-% %D \def\upperrightdoublesixquote {\kern-.125em``}
-% %D \stoptyping
-% %D
-% %D But in other fonts, these definitions can give problems, so
-% %D we just say:
-%
-% \def\lowerleftsingleninequote {,}
-% \def\lowerleftdoubleninequote {,,}
-% \def\upperleftsingleninequote {'}
-% \def\upperleftdoubleninequote {''}
-% \def\upperleftsinglesixquote {`}
-% \def\upperleftdoublesixquote {``}
-%
-% \def\lowerrightsingleninequote {,}
-% \def\lowerrightdoubleninequote {,,}
-% \def\upperrightsingleninequote {'}
-% \def\upperrightdoubleninequote {''}
-% \def\upperrightsinglesixquote {`}
-% \def\upperrightdoublesixquote {``}
-%
-% %D Yes I know, they are ugly:
-%
-% \def\leftfakeguillemot
-% {\dontleavehmode\hbox{\raise.25ex\hbox{$\scriptscriptstyle\ll$}}}
-%
-% \def\rightfakeguillemot
-% {\hbox{\raise.25ex\hbox{$\scriptscriptstyle\gg$}}}
-%
-% \def\leftsubfakeguillemot
-% {\dontleavehmode\hbox{\raise.25ex\hbox{$\scriptscriptstyle<$}}}
-%
-% \def\rightsubfakeguillemot
-% {\hbox{\raise.25ex\hbox{$\scriptscriptstyle>$}}}
+\def\dolanguageparameter#1#2%
+ {\csname\??la
+ \ifcsname\??la\currentlanguage#2\endcsname
+ \currentlanguage
+ \else\ifcsname\??la#1#2\endcsname
+ \@EA\ifx\csname\??la#1#2\endcsname\empty\s!default\else#1\fi
+ \else
+ \s!default
+ \fi\fi
+ #2\endcsname}
+
+\def\dospecificlanguageparameter#1#2#3%
+ {\csname\??la
+ \ifcsname\??la#2#3\endcsname
+ \@EA\ifx\csname\??la#2#3\endcsname\empty\s!default\else#2\fi
+ \else\ifcsname\??la#1#3\endcsname
+ \@EA\ifx\csname\??la#1#3\endcsname\empty\s!default\else#1\fi
+ \else
+ \s!default
+ \fi\fi
+ #3\endcsname}
%D New (see nomarking and nolist):
@@ -971,13 +660,14 @@
\def\nopatterns{\normallanguage\minusone}
+%D Mark plugin:
+
+\loadmarkfile{lang-ini} % not yet
+
%D We default to the language belonging to the interface. This
%D is one of the few places outside the interface modules where
%D \type{\startinterface} is used.
-\let\normaldoublequote ="
-\let\normalforwardslash=/
-
%D We default to english:
\setupcurrentlanguage[\s!en]
@@ -986,8 +676,4 @@
\appendtoks\showmessage\m!linguals9\currentlanguage\to\everyjob
-%D Brrr:
-
-% \ifx\@@ladefault\undefined \let\@@ladefault\s!en \fi
-
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/lang-mis.tex b/Master/texmf-dist/tex/context/base/lang-mis.tex
index aa763a71918..13a3f2bb92d 100644
--- a/Master/texmf-dist/tex/context/base/lang-mis.tex
+++ b/Master/texmf-dist/tex/context/base/lang-mis.tex
@@ -23,7 +23,7 @@
%D \blank}
%D
%D \gdef\test#1%
-%D {\convertargument#1\to\ascii\ascii&\hyphenatedword{#1}&#1\cr}
+%D {\defconvertedargument\ascii{#1}\ascii&\hyphenatedword{#1}&#1\cr}
\unprotect
@@ -178,7 +178,8 @@
%D words. \TEX\ hackers will recognise the next two macro's:
\ifx\prewordbreak \undefined \def\prewordbreak {\penalty\plustenthousand\hskip\zeropoint\relax} \fi
-\ifx\postwordbreak \undefined \def\postwordbreak{\penalty\zerocount\prewordbreak} \fi
+%ifx\postwordbreak \undefined \def\postwordbreak{\penalty\zerocount \prewordbreak } \fi
+\ifx\postwordbreak \undefined \def\postwordbreak{\penalty\zerocount \hskip\zeropoint\relax} \fi
\ifx\hspaceamount \undefined \def\hspaceamount#1#2{\kern.16667em} \fi % language specific
@@ -210,15 +211,6 @@
\def\@tmd@math@ {@tmd@m@}
\def\@tmd@both@ {@tmd@b@}
-% \def\installdiscretionary#1#2%
-% {\setevalue{\@tmd@math@\detokenize{#1}}{\detokenize{#1}}%
-% \setvalue {\@tmd@text@\detokenize{#1}}{#2}%
-% \catcode`#1=\@@active % \catcode\expandafter`\detokenize{#1}=\@@active
-% \scratchcounter=\the\uccode`\~
-% \uccode`\~=`#1\relax % \uccode`\~=\expandafter`\detokenize{#1}\relax
-% \uppercase{\unexpanded\def~{\discretionarycommand~}}%
-% \uccode`\~=\scratchcounter}
-
\def\installdiscretionary#1#2%
{\setevalue{\@tmd@math@\detokenize{#1}}{\detokenize{#1}}%
\setvalue {\@tmd@text@\detokenize{#1}}{#2}%
@@ -256,6 +248,11 @@
%D \type{\checkafterdiscretionary} is responsible for handling
%D the comma.
+\newsignal\compoundbreakpoint
+
+\newconditional\punctafterdiscretionary
+\newconditional\spaceafterdiscretionary
+
\def\checkbeforediscretionary
{\ifvmode\dontleavehmode\fi
\ifhmode
@@ -269,13 +266,14 @@
\fi}
\def\checkafterdiscretionary
- {\ifx,\nextnext
- \def\nextnextnext{\afterassignment\egroup\let\next=}%
- \else
- \let\nextnext\relax
- \fi}
-
-\newsignal\compoundbreakpoint
+ {\setfalse\punctafterdiscretionary
+ \setfalse\spaceafterdiscretionary
+ \ifx\blankspace\nextnext \settrue \spaceafterdiscretionary \else
+ \ifx\space \nextnext \settrue \spaceafterdiscretionary \else
+ \ifx .\nextnext \settrue \punctafterdiscretionary \else
+ \ifx ,\nextnext \settrue \punctafterdiscretionary \else
+ \ifx :\nextnext \settrue \punctafterdiscretionary \else
+ \ifx ;\nextnext \settrue \punctafterdiscretionary \fi\fi\fi\fi\fi\fi}
\let\domathmodediscretionary\handlemathmodediscretionary
@@ -290,39 +288,49 @@
\def\activedododotextmodediscretionary#1#2%
{\edef\discretionarytoken{\detokenize{#2}}%
\def\textmodediscretionary{\handletextmodediscretionary{#1}}%
+ \checkafterdiscretionary
\ifx\discretionarytoken\empty
\ifx#1\nextnext % takes care of ||| and +++ and ......
- \prewordbreak\discretionary{\hbox{$#1$}}{}{\hbox{$#1$}}%
- \allowbreak\postwordbreak
+ \ifcsname\@tmd@action@\string#1\endcsname
+ \csname\@tmd@action@\string#1\endcsname
+ \else\ifconditional\spaceafterdiscretionary
+ \prewordbreak\hbox{\string#1}\relax
+ \else\ifconditional\punctafterdiscretionary
+ \prewordbreak\hbox{\string#1}\relax
+ \else
+ \prewordbreak\hbox{\string#1}\prewordbreak
+ \fi\fi\fi
\def\nextnextnext{\afterassignment\egroup\let\next=}%
\else
- \checkafterdiscretionary
- \bgroup
- \checkbeforediscretionary
- % the next line has been changed (20050203)
- % \prewordbreak\hbox{\textmodediscretionary\nextnext}\allowbreak\postwordbreak
- % but an hbox blocks a possible \discretionary
- \prewordbreak\textmodediscretionary\nextnext\allowbreak\postwordbreak
- \egroup
- \fi
- \else\expandafter\ifx\csname\@tmd@action@\discretionarytoken\endcsname\relax
- \checkafterdiscretionary
- \bgroup
\checkbeforediscretionary
- \prewordbreak
- \discretionary{\hbox{#2}}{}{\hbox{#2}}%
- \allowbreak\postwordbreak
- \egroup
- \else\ifx\nextnextnext\egroup % so we can properly do things afterward
- \@EA\egroup
- \@EA\let\@EA\nextnextnext\@EA\empty
+ % the next line has been changed (20050203)
+ % \prewordbreak\hbox{\textmodediscretionary\nextnext}\allowbreak\postwordbreak
+ % but an hbox blocks a possible \discretionary
+ \ifcsname\@tmd@action@\endcsname
+ \csname\@tmd@action@\endcsname
+ \else\ifconditional\spaceafterdiscretionary
+ \prewordbreak\textmodediscretionary\relax
+ \else\ifconditional\punctafterdiscretionary
+ \prewordbreak\textmodediscretionary\relax
+ \else
+ \prewordbreak\textmodediscretionary\prewordbreak
+ \fi\fi\fi
+ % \prewordbreak\textmodediscretionary\nextnext\allowbreak\postwordbreak
+ \fi
+ \else\ifcsname\@tmd@action@\discretionarytoken\endcsname
\csname\@tmd@action@\discretionarytoken\endcsname
\else
- \csname\@tmd@action@\discretionarytoken\endcsname
- \fi\fi\fi
+ \checkbeforediscretionary
+ \ifconditional\spaceafterdiscretionary
+ \prewordbreak\hbox{#2}\relax
+ \else\ifconditional\punctafterdiscretionary
+ \prewordbreak\hbox{#2}\relax
+ \else
+ \prewordbreak\discretionary{\hbox{#2}}{}{\hbox{#2}}\allowbreak\postwordbreak
+ \fi\fi
+ \fi\fi
\nextnextnext} % lookahead in commands
-
%D \macros
%D {directdiscretionary}
%D
@@ -358,16 +366,37 @@
\def\definetextmodediscretionary #1
{\setvalue{\@tmd@action@\detokenize{#1}}}
-\definetextmodediscretionary {} % empty case, also handled in parser
- {\prewordbreak\compoundhyphen\allowbreak\postwordbreak}
+% \start \hsize 1mm
+% test |||test test|||, test\blank
+% test test|-|, test|-| and test|-|test\blank
+% test test|_|, test|_| and test|_|test\blank
+% test cd|'|tje\blank
+% test |(|test test|)|, test\blank
+% test test test|x|, test\blank
+% test|~|test
+% test|^|test
+% \stop
+
+\def\hyphenliketextmodediscretionary#1#2#3#4%
+ {\ifconditional\spaceafterdiscretionary
+ \prewordbreak\hbox{#1}\relax
+ \else\ifconditional\punctafterdiscretionary
+ \prewordbreak\hbox{#1}\relax
+ \else
+ \prewordbreak\discretionary{#2}{#3}{#4}\postwordbreak % was prewordbreak
+ \fi\fi}
+
+\definetextmodediscretionary {}
+ {\hyphenliketextmodediscretionary\compoundhyphen\compoundhyphen\empty\compoundhyphen}
+
+\definetextmodediscretionary -
+ {\hyphenliketextmodediscretionary\hyphen\hyphen\empty\hyphen}
\definetextmodediscretionary ~
{\prewordbreak\discretionary{-}{}{\thinspace}\postwordbreak}
\definetextmodediscretionary _
- {\prewordbreak
- \discretionary{\compoundhyphen}{\compoundhyphen}{\compoundhyphen}%
- \prewordbreak}
+ {\hyphenliketextmodediscretionary\compoundhyphen\compoundhyphen\compoundhyphen\compoundhyphen}
\definetextmodediscretionary (
{\ifdim\lastskip>\zeropoint
@@ -377,33 +406,24 @@
\fi}
\definetextmodediscretionary )
- {\ifx\nextnext\blankspace
- \prewordbreak)\relax
- \else\ifx\nextnext\space
- \prewordbreak)\relax
- \else
- \prewordbreak\discretionary{-)}{}{)}\prewordbreak
- \fi\fi}
+ {\hyphenliketextmodediscretionary{)}{-)}{}{)}}
\definetextmodediscretionary '
{\prewordbreak\discretionary{-}{}{'}\postwordbreak}
+\definetextmodediscretionary ^
+ {\prewordbreak\discretionary{\hbox{$|$}}{}{\hbox{$|$}}%
+ \allowbreak\postwordbreak} % bugged
+
\definetextmodediscretionary <
{\beginofsubsentence\prewordbreak\beginofsubsentencespacing}
\definetextmodediscretionary >
{\endofsubsentencespacing\prewordbreak\endofsubsentence}
-% \definetextmodediscretionary . % not yet definitive
-% {\prewordbreak\midsentence\prewordbreak}
-
\definetextmodediscretionary =
{\prewordbreak\midsentence\prewordbreak} % {\prewordbreak\compoundhyphen}
-\definetextmodediscretionary ^
- {\prewordbreak\discretionary{\hbox{$|$}}{}{\hbox{$|$}}%
- \allowbreak\postwordbreak}
-
% french
\definetextmodediscretionary : {\removeunwantedspaces\prewordbreak\kern\hspaceamount\empty{:}:}
@@ -660,212 +680,4 @@
\ifx\normalcompound\undefined \let\normalcompound=| \fi
-%D ! ! This will be reimplemented !!
-
-%D \macros
-%D {hyphenatedurl}
-%D
-%D For those who want to put full \URL's in a text, we offer
-%D
-%D \startbuffer
-%D \hyphenatedurl{http://optimist.optimist/optimist/optimist.optimist#optimist}
-%D \stopbuffer
-%D
-%D \typebuffer
-%D
-%D which breaks at the appropriate places. Watch the \type{#}
-%D hack.
-%D
-%D When passed as argument, like in \type {\goto}, one needs
-%D to substitute a \type {\\} for each \type{#}.
-%D
-%D \startbuffer
-%D \hyphenatedurl{http://this.is.a.rather/strange/reference#indeed}
-%D \stopbuffer
-%D
-%D \typebuffer
-
-\ifx\\\undefined \let\\\crlf \fi
-
-\chardef\urlsplitmode=1
-
-% 0 => don't split
-% 1 => . : na, rest voor
-% 2 => alles na
-% 3 => alles voor
-
-% \bgroup \catcode`\~=\active \catcode`\/=\active
-
-% Why not convert to ascii first? I will redo this one!
-
-\bgroup \catcode`\~=\active \catcode`\/=\active
-
-\unexpanded\gdef\hyphenatedurl#1% {}{} handles accents
- {\bgroup
- \ifnum\hyphenpenalty<10000 \else
- \def\discretionary##1##2##3{##1\allowbreak##2}%
- \fi
- \obeyhyphens
- \def\splitbefore##1%
- {\setbox\scratchbox=\hbox{##1{}{}}%
- \ifcase\urlsplitmode
- \box\scratchbox
- \or
- \postwordbreak\box\scratchbox\prewordbreak
- \or
- \prewordbreak\discretionary{\box\scratchbox}{}{\box\scratchbox}\prewordbreak
- \else
- \postwordbreak\box\scratchbox\prewordbreak
- \fi}%
- \def\splitafter##1%
- {\ifcase\urlsplitmode
- ##1{}{}%
- \or
- \prewordbreak\discretionary{##1{}{}}{}{##1{}{}}\prewordbreak
- \or
- \prewordbreak\discretionary{##1{}{}}{}{##1{}{}}\prewordbreak
- \else
- \prewordbreak\discretionary{}{##1{}{}}{##1{}{}}\prewordbreak
- \fi}%
- \def\splitanyway##1%
- {\prewordbreak##1\prewordbreak}%
- \def\flushurl%
- {\savedurl\let\savedurl\empty}%
- \def\\%
- {\spliturl\#}%
- \let\~=\lettertilde\let~=\~%
- \let\/=\letterslash\let/=\/%
- \let\savedurl\empty
- \scratchcounter\zerocount % used for hyphenmethod
- \handletokens#1\with\scanurl\savedurl
- \egroup}
-
-\egroup
-
-%D This would be better, but it spoils \type {\~} and so:
-%D
-%D \starttyping
-%D \convertargument#1\to\ascii
-%D \expandafter\handletokens\ascii\with\scanurl
-%D \stoptyping
-
-\chardef\urlhyphenmethod=0
-
-\def\scanurl#1%
- {\advance\scratchcounter\plusone
- \ifx#1\blankspace
- \flushurl\splitanyway\normalspace
- \else\ifx#1\ %
- \flushurl\splitanyway\normalspace
- \else\ifx#1\space
- \flushurl\splitanyway\normalspace
- \else\ifx#1\~%
- \flushurl\splitbefore\~%
- \else\ifx#1\#%
- \flushurl\splitbefore\#%
- \else\ifx#1\&%
- \flushurl\splitbefore\&%
- \else\ifx#1\%%
- \flushurl\splitbefore\%%
- \else\ifx#1\_%
- \flushurl\splitbefore\_%
- \else\if\noexpand#1\relax
- #1%
- \else\ifnum\catcode`#1=8
- \flushurl\splitbefore\_%
- \else\ifnum\catcode`#1=6
- \flushurl\splitbefore\#%
- \else\ifnum\catcode`#1=4
- \flushurl\splitbefore\&%
- \else\expandafter\if\string#1\lettertilde
- \flushurl\splitbefore\~%
- \else\expandafter\if\string#1\letterpercent
- \flushurl\splitbefore\%%
- \else\expandafter\if\string#1\letterunderscore
- \flushurl\splitbefore\_%
- \else\expandafter\if\string#1\letterquestionmark
- \flushurl\splitafter\letterquestionmark
- \else\expandafter\if\string#1\letterat
- \flushurl\splitafter\letterat
- \else\expandafter\if\string#1\letterslash
- \edef\savedurl{\savedurl\letterslash}%
- \else\expandafter\if\string#1+%
- \flushurl\splitafter+%
- \else\expandafter\if\string#1:%
- \flushurl\splitafter:%
- \else\expandafter\if\string#1.%
- \flushurl\splitafter.%
- \else\expandafter\if\string#1(%
- \flushurl\splitbefore(%
- \else\expandafter\if\string#1)%
- \flushurl\splitafter)%
- \else
- \ifx\savedurl\empty\else
- \splitbefore\savedurl
- \let\savedurl\empty
- \fi
- \ifcase\urlhyphenmethod
- \string#1%
- \else
- \ifnum\scratchcounter>\plusthree % so, \http: will not break
- \edef\savedurl{\string#1}%
- \else
- \string#1%
- \fi
- \fi
- \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
-
-% \setupinteraction[state=start]
-% \def\gotoURL#1{\useURL[foo][#1]\goto{\url[foo]}[url(foo)]}
-% \starttext
-% \endgraf \chardef\urlhyphenmethod=0
-% \hsize1pt\gotoURL{http://www.physik.fu-berlin.de/SomeVeryVeryVeryLongDirectory/And/AQuiteLongFileName.html}
-% \endgraf \chardef\urlhyphenmethod=1
-% \hsize1pt\gotoURL{http://www.physik.fu-berlin.de/SomeVeryVeryVeryLongDirectory/And/AQuiteLongFileName.html}
-% \stoptext
-
-% \useencoding[ffr]
-% \mainlanguage[fr]
-% \starttext
-% \hyphenatedurl{http://somewhere.to/go}
-% \stoptext
-
-%D When Joop Susan asked (on the \CONTEXT\ mailing list) how
-%D to handle url's passed as argument, the following solutions
-%D came to my mind:
-%D
-%D \starttyping
-%D \def\whateverurl#1%
-%D {{\def~{\string~}\useURL[dummy][#1]\goto{\url[dummy]}[URL(dummy)]}}
-%D
-%D \def\whateverurl#1%
-%D {{\let~\lettertilde\useURL[dummy][#1]\goto{\url[dummy]}[URL(dummy)]}}
-%D
-%D \def\whateverurl#1%
-%D {\convertargument#1\to\ascii
-%D \expanded{\useURL[dummy][\ascii]}\goto{\url[dummy]}[URL(dummy)]}
-%D \stoptyping
-
-%D \macros
-%D {hyphenatedfile}
-%D
-%D For the moment we treat filenames in a similar way,
-%D
-%D \starttyping
-%D \hyphenatedfile{here/there/filename.suffix}
-%D \stoptyping
-
-\let\hyphenatedfile\hyphenatedurl
-
-% to be finished
-%
-% \def\hyphenatedstring#1%
-% {\bgroup
-% \nohyphens
-% \def\next##1{##1\doif{##1}{-}{\allowbreak}}%
-% \handletokens#1\with\next
-% \egroup}
-%
-% {\hsize1cm\hyphenatedstring{ABXXXXXXXXXXC-12345-12345}}
-
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/lang-sla.mkiv b/Master/texmf-dist/tex/context/base/lang-sla.mkiv
new file mode 100644
index 00000000000..47901261570
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/lang-sla.mkiv
@@ -0,0 +1,17 @@
+%D \module
+%D [ file=lang-sla,
+%D version=2006.09.16,
+%D title=\CONTEXT\ Language Macros,
+%D subtitle=Slavic Languages,
+%D author=Hans Hagen / Tobias Burnus,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\def\sloveniancharacters#1{\ctxlua{converters.alphabetic(\number#1,"sl")}}
+\def\slovenianCharacters#1{\ctxlua{converters.Alphabetic(\number#1,"sl")}}
+
+\endinput
diff --git a/Master/texmf-dist/tex/context/base/lang-sla.tex b/Master/texmf-dist/tex/context/base/lang-sla.tex
index b9749d93013..268a9c33279 100644
--- a/Master/texmf-dist/tex/context/base/lang-sla.tex
+++ b/Master/texmf-dist/tex/context/base/lang-sla.tex
@@ -20,7 +20,7 @@
%D us an email.
%D
%D \starttabulate[|lB|l|]
-%D \NC Czech \NC Tom Hidec, Petr Sojka \NC \NR
+%D \NC Czech \NC Tom Hudec, Petr Sojka \NC \NR
%D \NC Polish \NC Grzegorz Sapijaszko \NC \NR
%D \NC Croatian \NC \Zcaron eljko Vrba \NC \NR
%D \NC Slovenian \NC Mojca Miklavec \NC \NR
@@ -121,19 +121,54 @@
\c!date={\v!day,\ ,\v!month,\ ,\v!year},
\c!state=\v!stop]
+%D The default quotation marks for Slovenian were chosen as
+%D \lowerleftdoubleninequote these ones\upperrightdoublesixquote\
+%D which was probably due to the strong influence computers
+%D had on typesetting, but \rightguillemot these ones\leftguillemot\
+%D are \quotation{more correct}.
+%D
+%D If you still want the other quotation marks, use this:
+%D
+%D \starttyping
+%D \installlanguage
+%D [sl]
+%D [leftquote=\lowerleftsingleninequote,
+%D rightquote=\upperrightsinglesixquote,
+%D leftquotation=\lowerleftdoubleninequote,
+%D rightquotation=\upperrightdoublesixquote]
+%D \stoptyping
+%D
+%D If you disagree with the change, please send an email to Mojca, but
+%D best use some pretty strong arguments because she loves S{\sl love}nia
+%D to much to comprimise on this.
+%D
+%D German faces approximately the same problem. I (MM) would prefer to
+%D have something like:
+%D
+%D \starttyping
+%D \mainlanguage[sl][quotationstyle=guillemot|doublequote] % better name needed
+%D \stoptyping
+%D
+%D but users are expected to respect the rules of nice and correct
+%D typography anyway.
+
\installlanguage
- [\s!sl]
- [\c!spacing=\v!packed,
- \c!leftsentence={\hbox{--~}},
- \c!rightsentence={\hbox{~--}},
- \c!leftsubsentence={--},
- \c!rightsubsentence={--},
- \c!leftquote=\lowerleftsingleninequote,
- \c!rightquote=\upperrightsinglesixquote,
- \c!leftquotation=\lowerleftdoubleninequote,
- \c!rightquotation=\upperrightdoublesixquote,
- \c!date={\v!day,{.},\ ,\v!month,\ ,\v!year},
- \c!state=\v!stop]
+ [\s!sl]
+ [\c!spacing=\v!packed,
+ \c!leftsentence={\hbox{--~}},
+ \c!rightsentence={\hbox{~--}},
+ \c!leftsubsentence={--},
+ \c!rightsubsentence={--},
+ %\c!leftquote=\lowerleftsingleninequote,
+ %\c!rightquote=\upperrightsinglesixquote,
+ %\c!leftquotation=\lowerleftdoubleninequote,
+ %\c!rightquotation=\upperrightdoublesixquote,
+ \c!leftquote=\guilsingleright,
+ \c!rightquote=\guilsingleleft,
+ \c!leftquotation=\rightguillemot,
+ \c!rightquotation=\leftguillemot,
+ \c!date={\v!day,{.},\ ,\v!month,\ ,\v!year},
+ \c!state=\v!stop]
\installlanguage [polish] [\s!pl]
\installlanguage [czech] [\s!cz]
@@ -170,7 +205,7 @@
\setupheadtext [\s!cz] [\v!content=Obsah]
\setupheadtext [\s!sk] [\v!content=Obsah]
\setupheadtext [\s!hr] [\v!content=Sadr\zcaron aj]
-\setupheadtext [\s!sl] [\v!content=Vsebina]
+\setupheadtext [\s!sl] [\v!content=Kazalo]
\setupheadtext [\s!pl] [\v!tables=Tabele]
\setupheadtext [\s!cz] [\v!tables=Tabulek]
@@ -200,7 +235,7 @@
\setupheadtext [\s!cz] [\v!index=Rejst\rcaron\iacute k]
\setupheadtext [\s!sk] [\v!index=Zoznam]
\setupheadtext [\s!hr] [\v!index=Indeks]
-\setupheadtext [\s!sl] [\v!index=Kazalo]
+\setupheadtext [\s!sl] [\v!index=Stvarno kazalo]
\setupheadtext [\s!pl] [\v!abbreviations=Skr\oacute cenie]
\setupheadtext [\s!cz] [\v!abbreviations=Zkratky]
diff --git a/Master/texmf-dist/tex/context/base/lang-url.lua b/Master/texmf-dist/tex/context/base/lang-url.lua
new file mode 100644
index 00000000000..d0214af7706
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/lang-url.lua
@@ -0,0 +1,92 @@
+if not modules then modules = { } end modules ['lang-url'] = {
+ version = 1.001,
+ comment = "companion to lang-url.tex",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+commands = commands or { }
+
+--[[
+<p>Hyphenating <l n='url'/>'s is somewhat tricky and a matter of taste. I did
+consider using a dedicated hyphenation pattern or dealing with it by node
+parsing, but the following solution suits as well. After all, we're mostly
+dealing with <l n='ascii'/> characters.</p>
+]]--
+
+do
+
+ commands.hyphenatedurl = commands.hyphenatedurl or { }
+
+ commands.hyphenatedurl.characters = {
+ ["!"] = 1,
+ ["\""] = 1,
+ ["#"] = 1,
+ ["$"] = 1,
+ ["%"] = 1,
+ ["&"] = 1,
+ ["("] = 1,
+ ["*"] = 1,
+ ["+"] = 1,
+ [","] = 1,
+ ["-"] = 1,
+ ["."] = 1,
+ ["/"] = 1,
+ [":"] = 1,
+ [";"] = 1,
+ ["<"] = 1,
+ ["="] = 1,
+ [">"] = 1,
+ ["?"] = 1,
+ ["@"] = 1,
+ ["["] = 1,
+ ["\\"] = 1,
+ ["^"] = 1,
+ ["_"] = 1,
+ ["`"] = 1,
+ ["{"] = 1,
+ ["|"] = 1,
+ ["~"] = 1,
+
+ ["'"] = 2,
+ [")"] = 2,
+ ["]"] = 2,
+ ["}"] = 2
+ }
+
+ commands.hyphenatedurl.lefthyphenmin = 2
+ commands.hyphenatedurl.righthyphenmin = 3
+
+ local chars = commands.hyphenatedurl.characters
+
+ function commands.hyphenatedurl.action(str, left, right)
+ local n = 0
+ local b = math.max(left or commands.hyphenatedurl.lefthyphenmin,2)
+ local e = math.min(#str-(right or commands.hyphenatedurl.righthyphenmin)+2,#str)
+ local u = utf.byte
+ str = utf.gsub(str,"(.)",function(s)
+ n = n + 1
+ local c = chars[s]
+ if not c or n<=b or n>=e then
+ return "\\n{" .. u(s) .. "}"
+ elseif c == 1 then
+ return "\\b{" .. u(s) .. "}"
+ elseif c == 2 then
+ return "\\a{" .. u(s) .. "}"
+ end
+ end )
+ tex.sprint(tex.ctxcatcodes,str)
+ end
+
+ -- todo, no interface in mkiv yet
+
+ function commands.hyphenatedurl.setcharacters(str,value) -- 1, 2 == before, after
+ for ch in utf.gmatch(".") do
+ chars[ch] = value or 1
+ end
+ end
+
+ -- commands.hyphenatedurl.setcharacters("')]}",2)
+
+end
diff --git a/Master/texmf-dist/tex/context/base/lang-url.mkii b/Master/texmf-dist/tex/context/base/lang-url.mkii
new file mode 100644
index 00000000000..f3310ccebb7
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/lang-url.mkii
@@ -0,0 +1,232 @@
+%D \module
+%D [ file=lang-url,
+%D version=2008.01.22, % used to be lang-mis
+%D title=\CONTEXT\ Language Macros,
+%D subtitle=Language Options,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\unprotect
+
+%D This is rather old code. The following solution was used
+%D for a long time and is kind of built-up over the years.
+
+\ifx\\\undefined \let\\\crlf \fi
+
+\ifx\urlsplitmode\undefined \chardef\urlsplitmode\plusone \fi
+
+% 0 => don't split
+% 1 => . : na, rest voor
+% 2 => alles na
+% 3 => alles voor
+
+% \bgroup \catcode`\~=\active \catcode`\/=\active
+%
+% \unexpanded\gdef\hyphenatedurl#1% {}{} handles accents
+% {\bgroup
+% \ifnum\hyphenpenalty<10000 \else
+% \def\discretionary##1##2##3{##1\allowbreak##2}%
+% \fi
+% \obeyhyphens
+% \def\splitbefore##1%
+% {\setbox\scratchbox=\hbox{##1{}{}}%
+% \ifcase\urlsplitmode
+% \box\scratchbox
+% \or
+% \postwordbreak\box\scratchbox\prewordbreak
+% \or
+% \prewordbreak\discretionary{\box\scratchbox}{}{\box\scratchbox}\prewordbreak
+% \else
+% \postwordbreak\box\scratchbox\prewordbreak
+% \fi}%
+% \def\splitafter##1%
+% {\ifcase\urlsplitmode
+% ##1{}{}%
+% \or
+% \prewordbreak\discretionary{##1{}{}}{}{##1{}{}}\prewordbreak
+% \or
+% \prewordbreak\discretionary{##1{}{}}{}{##1{}{}}\prewordbreak
+% \else
+% \prewordbreak\discretionary{}{##1{}{}}{##1{}{}}\prewordbreak
+% \fi}%
+% \def\splitanyway##1%
+% {\prewordbreak##1\prewordbreak}%
+% \def\flushurl%
+% {\savedurl\let\savedurl\empty}%
+% \def\\%
+% {\spliturl\#}%
+% \let\~=\lettertilde\let~=\~%
+% \let\/=\letterslash\let/=\/%
+% \let\savedurl\empty
+% \scratchcounter\zerocount % used for hyphenmethod
+% \handletokens#1\with\scanurl\savedurl
+% \egroup}
+%
+% \egroup
+
+% \chardef\urlhyphenmethod=0
+
+% \def\scanurl#1%
+% {\advance\scratchcounter\plusone
+% \ifx#1\blankspace
+% \flushurl\splitanyway\normalspace
+% \else\ifx#1\ %
+% \flushurl\splitanyway\normalspace
+% \else\ifx#1\space
+% \flushurl\splitanyway\normalspace
+% \else\ifx#1\~%
+% \flushurl\splitbefore\~%
+% \else\ifx#1\#%
+% \flushurl\splitbefore\#%
+% \else\ifx#1\&%
+% \flushurl\splitbefore\&%
+% \else\ifx#1\%%
+% \flushurl\splitbefore\%%
+% \else\ifx#1\_%
+% \flushurl\splitbefore\_%
+% \else\if\noexpand#1\relax
+% #1%
+% \else\ifnum\catcode`#1=8
+% \flushurl\splitbefore\_%
+% \else\ifnum\catcode`#1=6
+% \flushurl\splitbefore\#%
+% \else\ifnum\catcode`#1=4
+% \flushurl\splitbefore\&%
+% \else\expandafter\if\string#1\lettertilde
+% \flushurl\splitbefore\~%
+% \else\expandafter\if\string#1\letterpercent
+% \flushurl\splitbefore\%%
+% \else\expandafter\if\string#1\letterunderscore
+% \flushurl\splitbefore\_%
+% \else\expandafter\if\string#1\letterquestionmark
+% \flushurl\splitafter\letterquestionmark
+% \else\expandafter\if\string#1\letterat
+% \flushurl\splitafter\letterat
+% \else\expandafter\if\string#1\letterslash
+% \edef\savedurl{\savedurl\letterslash}%
+% \else\expandafter\if\string#1+%
+% \flushurl\splitafter+%
+% \else\expandafter\if\string#1:%
+% \flushurl\splitafter:%
+% \else\expandafter\if\string#1.%
+% \flushurl\splitafter.%
+% \else\expandafter\if\string#1(%
+% \flushurl\splitbefore(%
+% \else\expandafter\if\string#1)%
+% \flushurl\splitafter)%
+% \else
+% \ifx\savedurl\empty\else
+% \splitbefore\savedurl
+% \let\savedurl\empty
+% \fi
+% \ifcase\urlhyphenmethod
+% \string#1%
+% \else
+% \ifnum\scratchcounter>\plusthree % so, \http: will not break
+% \edef\savedurl{\string#1}%
+% \else
+% \string#1%
+% \fi
+% \fi
+% \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
+
+%D The following approach takes more resources but is cleaner (after all, we now
+%D have huge \TEX's. It's is basically a \TEX\ version of the \MKIV\ variant.
+
+\newtoks\everyhyphenatedurl
+
+\appendtoks
+ \let\&\letterampersand
+ \let\#\letterhash
+ \let\~\lettertilde
+ \let\\\letterbackslash
+ \let\$\letterdollar
+ \let\^\letterhat
+ \let\_\letterunderscore
+ \let\{\letterleftbrace
+ \let\}\letterrightbrace
+ \let\|\letterbar
+ \let~=\lettertilde
+ \let|=\letterbar
+\to \everyhyphenatedurl
+
+\def\hyphenatedurlseparator{} % \periodcentered
+
+\def\dohyphenatedurlnormal#1{\char#1\relax}%
+\def\dohyphenatedurlafter #1{\char#1\discretionary{}{\hyphenatedurlseparator}{}}%
+\def\dohyphenatedurlbefore#1{\discretionary{\hyphenatedurlseparator}{}{}\char#1\relax}%
+
+% 0=normal 1=before 2=after
+
+\def\sethyphenatedurlnormal#1{\expandafter\chardef\csname url @ #1\endcsname\zerocount}
+\def\sethyphenatedurlbefore#1{\expandafter\chardef\csname url @ #1\endcsname\plusone }
+\def\sethyphenatedurlafter #1{\expandafter\chardef\csname url @ #1\endcsname\plustwo }
+
+\sethyphenatedurlbefore !
+\sethyphenatedurlbefore "
+\sethyphenatedurlbefore \letterhash
+\sethyphenatedurlbefore \letterdollar
+\sethyphenatedurlbefore \letterpercent
+\sethyphenatedurlbefore \letterampersand
+\sethyphenatedurlbefore (
+\sethyphenatedurlbefore *
+\sethyphenatedurlbefore +
+\sethyphenatedurlbefore ,
+\sethyphenatedurlbefore -
+\sethyphenatedurlbefore .
+\sethyphenatedurlbefore /
+\sethyphenatedurlbefore :
+\sethyphenatedurlbefore ;
+\sethyphenatedurlbefore <
+\sethyphenatedurlbefore =
+\sethyphenatedurlbefore >
+\sethyphenatedurlbefore ?
+\sethyphenatedurlbefore @
+\sethyphenatedurlbefore [
+\sethyphenatedurlbefore \letterbackslash
+\sethyphenatedurlbefore ^
+\sethyphenatedurlbefore _
+\sethyphenatedurlbefore `
+\sethyphenatedurlbefore \letteropenbrace
+\sethyphenatedurlbefore \letterbar
+\sethyphenatedurlbefore \lettertilde
+
+\sethyphenatedurlafter '
+\sethyphenatedurlafter )
+\sethyphenatedurlafter ]
+\sethyphenatedurlafter \letterclosebrace
+
+\unexpanded \def\hyphenatedurl#1%
+ {\dontleavehmode
+ \begingroup
+ \the\everyhyphenatedurl
+ \edef\ascii{#1}%
+ \expanded{\handletokens{\detokenize\expandafter{\ascii}}}\with\dohyphenatedurl
+ \endgroup}
+
+\def\dohyphenatedurl#1%
+ {\ifcase\executeifdefined{url @ #1}\zerocount\relax
+ \expandafter\dohyphenatedurlnormal
+ \or
+ \expandafter\dohyphenatedurlbefore
+ \or
+ \expandafter\dohyphenatedurlafter
+ \fi{\number`#1}}
+
+% maybe ... to be finished
+%
+% \def\hyphenatedstring#1%
+% {\bgroup
+% \nohyphens
+% \def\next##1{##1\doif{##1}{-}{\allowbreak}}%
+% \handletokens#1\with\next
+% \egroup}
+%
+% {\hsize1cm\hyphenatedstring{ABXXXXXXXXXXC-12345-12345}}
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/lang-url.mkiv b/Master/texmf-dist/tex/context/base/lang-url.mkiv
new file mode 100644
index 00000000000..7479fed6803
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/lang-url.mkiv
@@ -0,0 +1,64 @@
+%D \module
+%D [ file=lang-url,
+%D version=2008.01.22, % used to be lang-mis
+%D title=\CONTEXT\ Language Macros,
+%D subtitle=Language Options,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\registerctxluafile{lang-url}{1.001}
+
+\unprotect
+
+% \urlsplitmode is not (yet) supported (not that much needed)
+
+\newtoks\everyhyphenatedurl
+
+\appendtoks
+ \let\&\letterampersand
+ \let\#\letterhash
+ \let\~\lettertilde
+ \let\\\letterbackslash
+ \let\$\letterdollar
+ \let\^\letterhat
+ \let\_\letterunderscore
+ \let\{\letterleftbrace
+ \let\}\letterrightbrace
+ \let\|\letterbar
+ \let~=\lettertilde
+ \let|=\letterbar
+\to \everyhyphenatedurl
+
+\def\hyphenatedurlseparator{} % \periodcentered
+
+\def\dohyphenatedurlafter #1{\char#1\discretionary{}{\hyphenatedurlseparator}{}}%
+\def\dohyphenatedurlbefore#1{\discretionary{\hyphenatedurlseparator}{}{}\char#1\relax}%
+\def\dohyphenatedurlnormal#1{\char#1\relax}%
+
+\def\sethyphenatedurlnormal#1{\ctxlua{commands.hyphenatedurl.characters[\!!bs#1\!!es]=0}}
+\def\sethyphenatedurlbefore#1{\ctxlua{commands.hyphenatedurl.characters[\!!bs#1\!!es]=1}}
+\def\sethyphenatedurlafter #1{\ctxlua{commands.hyphenatedurl.characters[\!!bs#1\!!es]=2}}
+
+\chardef\hyphenatedurllefthyphenmin = 3
+\chardef\hyphenatedurlrighthyphenmin = 3
+
+\unexpanded \def\hyphenatedurl#1%
+ {\dontleavehmode
+ \begingroup
+ \the\everyhyphenatedurl
+ \let\n\dohyphenatedurlnormal
+ \let\b\dohyphenatedurlbefore
+ \let\a\dohyphenatedurlafter
+ \expanded{\ctxlua{commands.hyphenatedurl.action(
+ \!!bs\noexpand\detokenize{#1}\!!es,
+ \number\hyphenatedurllefthyphenmin,
+ \number\hyphenatedurlrighthyphenmin
+ )}}%
+ \endgroup}
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/lang-url.tex b/Master/texmf-dist/tex/context/base/lang-url.tex
new file mode 100644
index 00000000000..3eb89191470
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/lang-url.tex
@@ -0,0 +1,70 @@
+%D \module
+%D [ file=lang-url,
+%D version=2008.01.22, % used to be lang-mis
+%D title=\CONTEXT\ Language Macros,
+%D subtitle=Language Options,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{Context Language Macros / URL}
+
+\loadmarkfile{lang-url}
+
+\unprotect
+
+\ifx\urlsplitmode\undefined \chardef\urlsplitmode\zerocount \fi % not supported in mkiv
+
+%D \macros
+%D {hyphenatedurl}
+%D
+%D For those who want to put full \URL's in a text, we offer
+%D
+%D \startbuffer
+%D \hyphenatedurl{http://optimist.optimist/optimist/optimist.optimist#optimist}
+%D \stopbuffer
+%D
+%D \typebuffer
+%D
+%D which breaks at the appropriate places. Watch the \type{#}
+%D hack.
+%D
+%D When passed as argument, like in \type {\goto}, one needs
+%D to substitute a \type {\\} for each \type{#}.
+%D
+%D \startbuffer
+%D \hyphenatedurl{http://this.is.a.rather/strange/reference#indeed}
+%D \stopbuffer
+%D
+%D \typebuffer
+
+\ifx\hyphenatedurl\undefined \let\hyphenatedurl\firstofoneargument \fi
+
+%D \macros
+%D {hyphenatedfilename}
+%D
+%D For the moment we treat filenames in a similar way,
+%D
+%D \starttyping
+%D \hyphenatedfilename{here/there/filename.suffix}
+%D \stoptyping
+
+\ifx\hyphenatedfilename\undefined \let\hyphenatedfilename\hyphenatedurl \fi
+
+% \def\test#1%
+% {\dontleavehmode
+% \begingroup
+% \tttf
+% \hyphenatedurl {%
+% \letterampersand #1\letterampersand #1\letterampersand #1\letterampersand #1\letterampersand
+% \letterhash #1\letterhash #1\letterpercent #1\letterslash #1\letterampersand
+% }%
+% \endgroup}
+
+% \dorecurse{100}{\test{a} \test{ab} \test{abc} \test{abcd} \test{abcde} \test{abcdef}}
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/luat-cbk.lua b/Master/texmf-dist/tex/context/base/luat-cbk.lua
new file mode 100644
index 00000000000..038ad01059f
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/luat-cbk.lua
@@ -0,0 +1,151 @@
+if not modules then modules = { } end modules ['luat-cbk'] = {
+ version = 1.001,
+ comment = "companion to luat-lib.tex",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+--[[ldx--
+<p>Callbacks are the real asset of <l n='luatex'/>. They permit you to hook
+your own code into the <l n='tex'/> engine. Here we implement a few handy
+auxiliary functions.</p>
+--ldx]]--
+
+callbacks = { }
+callbacks.stack = { }
+
+--[[ldx--
+<p>When you (temporarily) want to install a callback function, and after a
+while wants to revert to the original one, you can use the following two
+functions.</p>
+--ldx]]--
+
+function callbacks.push(name, func)
+ if not callbacks.stack[name] then
+ callbacks.stack[name] = { }
+ end
+ table.insert(callbacks.stack[name],callback.find(name))
+ callback.register(name, func)
+end
+
+function callbacks.pop(name)
+-- this fails: callback.register(name, table.remove(callbacks.stack[name]))
+ local func = table.remove(callbacks.stack[name])
+ callback.register(name, func)
+end
+
+--[[ldx--
+<p>The simple case is to remove the callback:</p>
+
+<code>
+callbacks.push('linebreak_filter')
+... some actions ...
+callbacks.pop('linebreak_filter')
+</code>
+
+<p>Often, in such case, another callback or a macro call will pop
+the original.</p>
+
+<p>In practice one will install a new handler, like in:</p>
+
+<code>
+callbacks.push('linebreak_filter', function(...)
+ return something_done(...)
+end)
+</code>
+
+<p>Even more interesting is:</p>
+
+<code>
+callbacks.push('linebreak_filter', function(...)
+ callbacks.pop('linebreak_filter')
+ return something_done(...)
+end)
+</code>
+
+<p>This does a one-shot.</p>
+--ldx]]--
+
+
+--[[ldx--
+<p>Callbacks may result in <l n='lua'/> doing some hard work
+which takes time and above all resourses. Sometimes it makes
+sense to disable or tune the garbage collector in order to
+keep the use of resources acceptable.</p>
+
+<p>At some point in the development we did some tests with counting
+nodes (in this case 121049).</p>
+
+<table>
+<tr><td>setstepmul</td><td>seconds</td><td>megabytes</td></tr>
+<tr><td>200</td><td>24.0</td><td>80.5</td></tr>
+<tr><td>175</td><td>21.0</td><td>78.2</td></tr>
+<tr><td>150</td><td>22.0</td><td>74.6</td></tr>
+<tr><td>160</td><td>22.0</td><td>74.6</td></tr>
+<tr><td>165</td><td>21.0</td><td>77.6</td></tr>
+<tr><td>125</td><td>21.5</td><td>89.2</td></tr>
+<tr><td>100</td><td>21.5</td><td>88.4</td></tr>
+</table>
+
+<p>The following code is kind of experimental. In the documents
+that describe the development of <l n='luatex'/> we report
+on speed tests. One observation is thta it sometimes helps to
+restart the collector.</p>
+--ldx]]--
+
+garbagecollector = { }
+
+do
+ local level = 0
+
+--~ collectgarbage("setstepmul", 165)
+--~ collectgarbage("setstepmul",50)
+
+ garbagecollector.trace = false
+ garbagecollector.tune = false -- for the moment
+
+ local function report(format)
+ if garbagecollector.trace then
+ -- texio.write_nl(string.format(format,level,status.luastate_bytes))
+ texio.write_nl(string.format(format,level,collectgarbage("count")))
+ end
+ end
+
+ function garbagecollector.update()
+ report("%s: memory before update: %s")
+ collectgarbage("restart")
+ end
+
+ function garbagecollector.push()
+ if garbagecollector.tune then
+ level = level + 1
+ if level == 1 then
+ collectgarbage("stop")
+ end
+ report("%s: memory after push: %s")
+ else
+ garbagecollector.update()
+ end
+ end
+
+ function garbagecollector.pop()
+ if garbagecollector.tune then
+ report("%s: memory before pop: %s")
+ if level == 1 then
+ collectgarbage("restart")
+ end
+ level = level - 1
+ end
+ end
+
+ function garbagecollector.cycle()
+ if garbagecollector.tune then
+ report("%s: memory before collect: %s")
+ collectgarbage("collect")
+ report("%s: memory after collect: %s")
+ end
+ end
+
+end
+
diff --git a/Master/texmf-dist/tex/context/base/luat-crl.lua b/Master/texmf-dist/tex/context/base/luat-crl.lua
new file mode 100644
index 00000000000..aaf2e86a1cf
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/luat-crl.lua
@@ -0,0 +1,53 @@
+-- filename : luat-crl.lua
+-- comment : companion to luat-lib.tex
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+if not versions then versions = { } end versions['luat-crl'] = 1.001
+if not curl then curl = { } end
+
+curl.cached = { }
+curl.cachepath = caches.definepath(texmf.instance,"curl")
+
+function curl.fetch(protocol, name)
+ local cachename = curl.cachepath() .. "/" .. name:gsub("[^%a%d%.]+","-")
+-- cachename = cachename:gsub("[\\/]", io.fileseparator)
+ cachename = cachename:gsub("[\\]", "/")
+ if not curl.cached[name] then
+ if not io.exists(cachename) then
+ curl.cached[name] = cachename
+ local command = "curl --silent --create-dirs --output " .. cachename .. " " .. name -- no protocol .. "://"
+ os.spawn(command)
+ end
+ if io.exists(cachename) then
+ curl.cached[name] = cachename
+ else
+ curl.cached[name] = ""
+ end
+ end
+ return curl.cached[name]
+end
+
+function input.finders.curl(instance,protocol,filename)
+ local foundname = curl.fetch(protocol, filename)
+ return input.finders.generic(instance,protocol,foundname,filetype)
+end
+function input.openers.curl(instance,protocol,filename)
+ return input.openers.generic(instance,protocol,filename)
+end
+function input.loaders.curl(instance,protocol,filename)
+ return input.loaders.generic(instance,protocol,filename)
+end
+
+-- todo: metamethod
+
+function curl.install(protocol)
+ input.finders[protocol] = function (instance,filename,filetype) return input.finders.curl(instance,protocol,filename) end
+ input.openers[protocol] = function (instance,filename) return input.openers.curl(instance,protocol,filename) end
+ input.loaders[protocol] = function (instance,filename) return input.loaders.curl(instance,protocol,filename) end
+end
+
+curl.install('http')
+curl.install('https')
+curl.install('ftp')
diff --git a/Master/texmf-dist/tex/context/base/luat-deb.lua b/Master/texmf-dist/tex/context/base/luat-deb.lua
new file mode 100644
index 00000000000..a32d923bd93
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/luat-deb.lua
@@ -0,0 +1,154 @@
+-- filename : luat-deb.lua
+-- comment : companion to luat-deb.tex
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+if not versions then versions = { } end versions['luat-deb'] = 1.001
+if not lmx then lmx = { } end
+if not lmx.variables then lmx.variables = { } end
+
+lmx.variables['color-background-green'] = '#4F6F6F'
+lmx.variables['color-background-blue'] = '#6F6F8F'
+lmx.variables['color-background-yellow'] = '#8F8F6F'
+lmx.variables['color-background-purple'] = '#8F6F8F'
+
+lmx.variables['color-background-body'] = '#808080'
+lmx.variables['color-background-main'] = '#3F3F3F'
+lmx.variables['color-background-one'] = lmx.variables['color-background-green']
+lmx.variables['color-background-two'] = lmx.variables['color-background-blue']
+
+lmx.variables['title-default'] = 'ConTeXt Status Information'
+lmx.variables['title'] = lmx.variables['title-default']
+
+if not tracers then tracers = { } end
+if not tracers.list then tracers.list = { } end
+if not tracers.strings then tracers.strings = { } end
+
+tracers.strings.undefined = "undefined"
+
+function tracers.split(csname)
+ return csname:match("^(.+):(.+)$")
+end
+
+function tracers.type(csname)
+ tag, name = tracers.split(csname)
+ if tag then return tag else return nil end
+end
+
+function tracers.name(csname)
+ tag, name = tracers.split(csname)
+ if tag then return name else return csname end
+end
+
+function tracers.cs(csname)
+ tag, name = tracers.split(csname)
+ if tracers.types[tag] then
+ return tracers.types[tag](name)
+ else
+ return tracers.primitive(csname)
+ end
+end
+
+function tracers.dimen(name)
+ return (tex.dimen[name] and number.topoints(tex.dimen[name])) or tracers.strings.undefined
+end
+
+function tracers.count(name)
+ return tex.count[name] or tracers.strings.undefined
+end
+
+function tracers.toks(name)
+ return (tex.toks[name] and string.limit(tex.toks[name],40)) or tracers.strings.undefined
+end
+
+function tracers.primitive(name)
+ return tex[name] or tracers.strings.undefined
+end
+
+tracers.types = {
+ ['d'] = tracers.dimen,
+ ['c'] = tracers.count,
+ ['t'] = tracers.toks,
+ ['p'] = tracers.primitive
+}
+
+function tracers.knownlist(name)
+ return tracers.list[name] and #tracers.list[name] > 0
+end
+
+function tracers.showdebuginfo()
+ lmx.set('title', 'ConTeXt Debug Information')
+ lmx.set('color-background-one', lmx.get('color-background-green'))
+ lmx.set('color-background-two', lmx.get('color-background-blue'))
+ lmx.show('context-debug.lmx')
+ lmx.restore()
+end
+
+function tracers.showerror()
+ lmx.set('title', 'ConTeXt Error Information')
+ lmx.set('errormessage', status.lasterrorstring)
+ lmx.set('linenumber', status.linenumber)
+ lmx.set('color-background-one', lmx.get('color-background-yellow'))
+ lmx.set('color-background-two', lmx.get('color-background-purple'))
+ local filename = status.filename
+ local linenumber = tonumber(status.linenumber or "0")
+ if not filename then
+ lmx.set('filename', 'unknown')
+ lmx.set('errorcontext', 'error in filename')
+ elseif type(filename) == "number" then
+ lmx.set('filename', "<read " .. filename .. ">")
+ lmx.set('errorcontext', 'unknown error')
+ elseif io.exists(filename) then
+ -- todo: use an input opener so that we also catch utf16 an reencoding
+ lmx.set('filename', filename)
+ lines = io.lines(filename)
+ if lines then
+ local context = { }
+ n, m = 1, linenumber
+ b, e = m-10, m+10
+ s = string.len(tostring(e))
+ for line in lines do
+ if n > e then
+ break
+ elseif n > b then
+ if n == m then
+ context[#context+1] = string.format("%" .. s .. "d",n) .. " >> " .. line
+ else
+ context[#context+1] = string.format("%" .. s .. "d",n) .. " " .. line
+ end
+ end
+ n = n + 1
+ end
+ lmx.set('errorcontext', table.concat(context,"\n"))
+ else
+ lmx.set('errorcontext', "")
+ end
+ else
+ lmx.set('filename', filename)
+ lmx.set('errorcontext', 'file not found')
+ end
+ lmx.show('context-error.lmx')
+ lmx.restore()
+end
+
+function tracers.overloaderror()
+--~ callback.register('show_error_hook', function(identifier, filename, linenumber)
+--~ tracers.showerror(identifier, filename, linenumber)
+--~ end )
+ callback.register('show_error_hook', tracers.showerror)
+end
+
+tracers.list['scratch'] = {
+ 0, 2, 4, 6, 8
+}
+
+tracers.list['internals'] = {
+ 'p:hsize', 'p:parindent', 'p:leftskip','p:rightskip',
+ 'p:vsize', 'p:parskip', 'p:baselineskip', 'p:lineskip', 'p:topskip'
+}
+
+tracers.list['context'] = {
+ 'd:lineheight',
+ 'c:realpageno', 'c:pageno', 'c:subpageno'
+}
diff --git a/Master/texmf-dist/tex/context/base/luat-deb.tex b/Master/texmf-dist/tex/context/base/luat-deb.tex
new file mode 100644
index 00000000000..55686ac1144
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/luat-deb.tex
@@ -0,0 +1,49 @@
+%D \module
+%D [ file=luat-deb,
+%D version=2005.11.06,
+%D title=\CONTEXT\ Communication Macros,
+%D subtitle=Initialization,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright=PRAGMA]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{Communication Support (initialization)}
+
+\registerctxluafile{luat-deb}{1.001}
+
+\startruntimeluacode
+ \ctxlua {
+ lmx.htmfile = function(name) return environment.jobname .. "-status.html" end
+ lmx.lmxfile = function(name) return environment.texfile(name) end
+ }
+\stopruntimeluacode
+
+\def\showdebuginfo{\ctxlua{tracers.showdebuginfo()}}
+\def\overloaderror{\ctxlua{tracers.overloaderror()}}
+
+\def\breakpoint{\showdebuginfo\wait}
+
+\registerctxluafile{luat-tra}{1.001}
+
+\appendtoks
+ \ctxlua {
+ if debugger.tracing() then
+ debugger.enable() ;
+ end
+ }%
+\to \everyjob
+
+\appendtoks
+ \ctxlua {
+ if debugger.tracing() then
+ debugger.disable() ;
+ debugger.savestats("\jobname-luacalls.log") ;
+ end
+ }%
+\to \everybye
+
+\endinput
diff --git a/Master/texmf-dist/tex/context/base/luat-env.lua b/Master/texmf-dist/tex/context/base/luat-env.lua
new file mode 100644
index 00000000000..48563e2e7f2
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/luat-env.lua
@@ -0,0 +1,218 @@
+-- filename : luat-env.lua
+-- comment : companion to luat-env.tex
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+-- here we don't assume any extra libraries
+
+-- A former version provides functionality for non embeded core
+-- scripts i.e. runtime library loading. Given the amount of
+-- Lua code we use now, this no longer makes sense. Much of this
+-- evolved before bytecode arrays were available.
+
+if not versions then versions = { } end versions['luat-env'] = 1.001
+
+-- environment
+
+if not environment then environment = { } end
+
+--~ environment.useluc = true -- still testing, so we don't use luc yet
+
+if environment.silent == nil then environment.silent = false end
+if environment.useluc == nil then environment.useluc = true end
+
+-- kpse is overloaded by this time
+
+--~ if environment.formatname == nil then if tex then environment.formatname = tex.formatname end end
+--~ if environment.formatpath == nil then if kpse then environment.formatpath = kpse.find_file(tex.formatname,"fmt") or "." end end
+--~ if environment.jobname == nil then if tex then environment.jobname = tex.jobname end end
+--~ if environment.progname == nil then environment.progname = os.getenv("progname") or "luatex" end
+--~ if environment.engine == nil then environment.engine = os.getenv("engine") or "context" end
+--~ if environment.enginepath == nil then environment.enginepath = os.getenv("SELFAUTOLOC") or "." end
+--~ if environment.initex == nil then if tex then environment.initex = tex.formatname == "" end end
+
+if not environment.formatname or environment.formatname == "" then if tex then environment.formatname = tex.formatname end end
+if not environment.jobname or environment.jobname == "" then if tex then environment.jobname = tex.jobname end end
+
+if not environment.progname or environment.progname == "" then environment.progname = "context" end
+if not environment.engine or environment.engine == "" then environment.engine = "luatex" end
+if not environment.formatname or environment.formatname == "" then environment.formatname = "cont-en" end
+if not environment.formatpath or environment.formatpath == "" then environment.formatpath = '.' end
+if not environment.enginepath or environment.enginepath == "" then environment.enginepath = '.' end
+if not environment.version or environment.version == "" then environment.version = "unknown" end
+
+environment.formatpath = string.gsub(environment.formatpath:gsub("\\","/"),"/([^/]-)$","")
+environment.enginepath = string.gsub(environment.enginepath:gsub("\\","/"),"/([^/]-)$","")
+
+function environment.texfile(filename)
+ return input.find_file(texmf.instance,filename,'tex')
+end
+
+function environment.luafile(filename)
+ return input.find_file(texmf.instance,filename,'tex') or input.find_file(texmf.instance,filename,'texmfscripts')
+end
+
+function environment.showmessage(...) -- todo, cleaner
+ if not environment.silent then
+ if input and input.report then
+ input.report(table.concat({...}," "))
+ elseif texio and texio.write_nl then
+ texio.write_nl("[[" .. table.concat({...}," ") .. "]]")
+ else
+ print("[[" .. table.concat({...}," ") .. "]]")
+ end
+ end
+end
+
+if not environment.jobname then environment.jobname = "unknown" end
+
+function environment.setlucpath()
+ if environment.initex then
+ environment.lucpath = nil
+ else
+ environment.lucpath = environment.formatpath .. "/lua/" .. environment.progname
+ end
+end
+
+environment.setlucpath()
+
+function environment.loadedluacode(fullname)
+ return loadfile(fullname)
+end
+
+function environment.luafilechunk(filename)
+ local filename = filename:gsub("%.%a+$", "") .. ".lua"
+ local fullname = environment.luafile(filename)
+ if fullname and fullname ~= "" then
+ environment.showmessage("loading file", fullname)
+ return environment.loadedluacode(fullname)
+ else
+ environment.showmessage("unknown file", filename)
+ return nil
+ end
+end
+
+-- the next ones can use the previous ones
+
+function environment.loadluafile(filename)
+ filename = filename:gsub("%.%a+$", "") .. ".lua"
+ local fullname = environment.luafile(filename)
+ if fullname and fullname ~= "" then
+ environment.showmessage("loading", fullname)
+ dofile(fullname)
+ else
+ environment.showmessage("unknown file", filename)
+ end
+end
+
+function environment.loadlucfile(filename,version)
+ local filename = filename:gsub("%.%a+$", "")
+ local fullname = nil
+ if environment.initex or not environment.useluc then
+ environment.loadluafile(filename)
+ else
+ if environment.lucpath and environment.lucpath ~= "" then
+ fullname = environment.lucpath .. "/" .. filename .. ".luc"
+ local chunk = loadfile(fullname) -- this way we don't need a file exists check
+ if chunk then
+ environment.showmessage("loading", fullname)
+ assert(chunk)()
+ if version then
+ local v = version -- can be nil
+ if modules and modules[filename] then
+ v = modules[filename].version -- new
+ elseif versions and versions[filename] then
+ v = versions[filename] -- old
+ end
+ if v ~= version then
+ environment.showmessage("version mismatch", filename,"lua=" .. v, "luc=" ..version)
+ environment.loadluafile(filename)
+ end
+
+ end
+ else
+ environment.loadluafile(filename)
+ end
+ else
+ environment.loadluafile(filename)
+ end
+ end
+end
+
+-- -- -- the next function was posted by Peter Cawley on the lua list -- -- --
+-- -- -- -- -- --
+-- -- -- stripping makes the compressed format file about 1MB smaller -- -- --
+-- -- -- -- -- --
+-- -- -- using this trick is at your own risk -- -- --
+
+local function strip_code(dump)
+ local version, format, endian, int, size, ins, num = dump:byte(5, 11)
+ local subint
+ if endian == 1 then
+ subint = function(dump, i, l)
+ local val = 0
+ for n = l, 1, -1 do
+ val = val * 256 + dump:byte(i + n - 1)
+ end
+ return val, i + l
+ end
+ else
+ subint = function(dump, i, l)
+ local val = 0
+ for n = 1, l, 1 do
+ val = val * 256 + dump:byte(i + n - 1)
+ end
+ return val, i + l
+ end
+ end
+ local strip_function
+ strip_function = function(dump)
+ local count, offset = subint(dump, 1, size)
+ local stripped, dirty = string.rep("\0", size), offset + count
+ offset = offset + count + int * 2 + 4
+ offset = offset + int + subint(dump, offset, int) * ins
+ count, offset = subint(dump, offset, int)
+ for n = 1, count do
+ local t
+ t, offset = subint(dump, offset, 1)
+ if t == 1 then
+ offset = offset + 1
+ elseif t == 4 then
+ offset = offset + size + subint(dump, offset, size)
+ elseif t == 3 then
+ offset = offset + num
+ end
+ end
+ count, offset = subint(dump, offset, int)
+ stripped = stripped .. dump:sub(dirty, offset - 1)
+ for n = 1, count do
+ local proto, off = strip_function(dump:sub(offset, -1))
+ stripped, offset = stripped .. proto, offset + off - 1
+ end
+ offset = offset + subint(dump, offset, int) * int + int
+ count, offset = subint(dump, offset, int)
+ for n = 1, count do
+ offset = offset + subint(dump, offset, size) + size + int * 2
+ end
+ count, offset = subint(dump, offset, int)
+ for n = 1, count do
+ offset = offset + subint(dump, offset, size) + size
+ end
+ stripped = stripped .. string.rep("\0", int * 3)
+ return stripped, offset
+ end
+ return dump:sub(1,12) .. strip_function(dump:sub(13,-1))
+end
+
+environment.stripcode = false -- true
+
+function environment.loadedluacode(fullname)
+ if environment.stripcode then
+ return loadstring(strip_code(string.dump(loadstring(io.loaddata(fullname)))))
+ else
+ return loadfile(fullname)
+ end
+end
+
+-- -- end of stripping code -- --
diff --git a/Master/texmf-dist/tex/context/base/luat-env.tex b/Master/texmf-dist/tex/context/base/luat-env.tex
new file mode 100644
index 00000000000..0b6f2466373
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/luat-env.tex
@@ -0,0 +1,172 @@
+%D \module
+%D [ file=luat-env,
+%D version=2005.05.26,
+%D title=\CONTEXT\ Lua Macros,
+%D subtitle=ConTeXt features,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright=PRAGMA]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D Originally we compiled the lua files externally and loaded
+%D then at runtime, but when the amount grew, we realized that
+%D we needed away to store them in the format, which is what
+%D bytecode arrays do. And so the following is obsolete:
+%D
+%D \starttyping
+%D \chardef\ctxluaembeddingmode \plusone
+%D
+%D 0 = external compilation and loading
+%D 1 = runtime compilation and embedding
+%D \stoptyping
+
+% \writestatus{loading}{Lua Support Macros (environment)}
+
+% print (lua.id)
+% print (lua.version)
+% print (lua.startupfile)
+
+%D Allocation of \LUA\ engines.
+
+\newcount\luadefcounter
+
+\ifx\zerocount\undefined \chardef\zerocount=0 \fi
+\ifx\plusone \undefined \chardef\plusone =1 \fi
+
+\def\newlua#1%
+ {\global\advance\luadefcounter\plusone
+ \mathchardef#1\luadefcounter}
+
+%D We use a dedicated instance for \CONTEXT\ core functionality. In
+%D \CONTEXT we also use this as callback instance. Instance 0 is
+%D the scratch instance.
+
+\ifx\luastartup\undefined \newcount\luastartup \fi
+
+\chardef\CTXlua\zerocount \luadefcounter\CTXlua \luastartup\CTXlua
+
+\def\ctxlua {\directlua\CTXlua}
+\def\directctxlua{\directlua\CTXlua}
+\def\latectxlua {\latelua \CTXlua}
+
+%D The simple \type {\lua} command is just a shortcut to the
+%D zero instance. Beware, we don't use the 0--9 range for
+%D scratch purposes as we do with other registers. First of all
+%D we want to avoid the overhead, but mostly, users can just define
+%D their own.
+
+\newlua \luadefault
+
+\def \lua {\directlua\luadefault} % zero is the main one, and reserved for ctx
+\edef\luaversion{\CTXlua{tex.print(_VERSION)}}
+
+%D We want to define \LUA\ related things in the format but
+%D need to reluad code because \LUA\ instances are not dumped
+%D into the format.
+
+\ifx\undefined\normaleveryjob \let\normaleveryjob\everyjob \newtoks\everyjob \fi
+
+\newtoks\everyloadluacode
+\newtoks\everyfinalizeluacode
+
+\normaleveryjob{\the\everyloadluacode\the\everyfinalizeluacode\the\everyjob}
+
+\newif\ifproductionrun
+
+\long\def\startruntimeluacode#1\stopruntimeluacode % only simple code (load +init)
+ {\ifproductionrun
+ \global\let\startruntimeluacode\relax
+ \global\let\stopruntimeluacode \relax
+ \else
+ \global\everyloadluacode\expandafter{\the\everyloadluacode#1}%
+ \fi
+ #1} % maybe no interference
+
+\long\def\startruntimectxluacode#1\stopruntimectxluacode
+ {\startruntimeluacode\ctxlua{#1}\stopruntimeluacode}
+
+%D Next we load the initialization code.
+
+\startruntimectxluacode
+ environment = environment or { }
+ environment.jobname = "\jobname" % tex.jobname
+ environment.formatname = "\contextformat" % tex.formatname
+ environment.initex = \ifproductionrun false \else true \fi % tex.formatname == ""
+ environment.version = "\contextversion"
+\stopruntimectxluacode
+
+% no longer needed: dofile(input.find_file(texmf.instance,"luat-env.lua","tex"))
+
+\chardef\ctxluaexecutionmode \zerocount % private
+
+% we start at 500, below this, we store predefined data (dumps)
+
+\newcount\luabytecodecounter \luabytecodecounter=500
+
+\startruntimectxluacode
+ if not lua.bytedata then lua.bytedata = { } end
+\stopruntimectxluacode
+
+%D Handy when we expand:
+
+\let\stopruntimeluacode \relax
+\let\stopruntimectxluacode\relax
+
+\long\def\lastexpanded{} % todo: elsewhere we use \@@expanded
+
+\long\def\expanded#1{\long\xdef\lastexpanded{\noexpand#1}\lastexpanded}
+
+%D More code:
+
+\def\ctxluabytecode#1% executes an already loaded chunk
+ {\ctxlua {
+ do
+ local str = ''
+ if lua.bytedata[#1] then
+ str = " from file " .. lua.bytedata[#1][1] .. " version " .. lua.bytedata[#1][2]
+ end
+ if lua.bytecode[#1] then
+ if environment.initex then
+ environment.showmessage("executing byte code " .. "#1" .. str)
+ assert(lua.bytecode[#1])()
+ else
+ assert(lua.bytecode[#1])()
+ lua.bytecode[#1] = nil
+ end
+ else
+ environment.showmessage("invalid byte code " .. "#1" .. str)
+ end
+ end
+ }}
+
+\def\ctxluabyteload#1#2% registers and compiles chunk
+ {\global\advance\luabytecodecounter \plusone
+ \expanded{\startruntimectxluacode
+ lua.bytedata[\the\luabytecodecounter] = { "#1", "#2" }
+ \stopruntimectxluacode}%
+ \ctxlua {
+ lua.bytedata[\the\luabytecodecounter] = { "#1", "#2" }
+ lua.bytecode[\the\luabytecodecounter] = environment.luafilechunk("#1")
+ }}
+
+\def\ctxluafileload#1#2% load a (either not compiled) chunk at runtime
+ {\doifelsenothing{#2}
+ {\ctxlua{environment.loadlucfile("#1")}}
+ {\ctxlua{environment.loadlucfile("#1",#2)}}}
+
+\def\registerctxluafile#1#2% name version
+ {\ifproductionrun \else
+ \ctxluabyteload{#1}{#2}%
+ \fi
+ \global\everyloadluacode\expandafter\expandafter\expandafter{\expandafter\the\expandafter\everyloadluacode
+ \expandafter\ctxluabytecode\expandafter{\the\luabytecodecounter}}%
+ \ifcase\ctxluaexecutionmode\or\ctxluabytecode{\the\luabytecodecounter}\fi}
+
+\registerctxluafile{luat-env}{1.001}
+
+\chardef\ctxluaexecutionmode \plusone
+
+\endinput
diff --git a/Master/texmf-dist/tex/context/base/luat-exe.lua b/Master/texmf-dist/tex/context/base/luat-exe.lua
new file mode 100644
index 00000000000..dcb28d35f0d
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/luat-exe.lua
@@ -0,0 +1,68 @@
+-- filename : luat-exe.lua
+-- comment : companion to luat-lib.tex
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+if not versions then versions = { } end versions['luat-exe'] = 1.001
+if not executer then executer = { } end
+
+executer.permitted = { }
+executer.execute = os.execute
+
+function executer.register(...)
+ for k,v in pairs({...}) do
+ if v == "*" then
+ table.insert(executer.permitted, ".*")
+ else
+ table.insert(executer.permitted, v)
+ end
+ end
+end
+
+function executer.finalize() -- todo: os.exec
+ do
+ local execute = os.execute
+ function executer.execute(...)
+ local t, name, arguments = {...}, "", ""
+ if #t == 1 then
+ if type(t[1]) == 'table' then
+ name, arguments = t[1], table.concat(t," ",2,#t)
+ else
+ name, arguments = string.match(t[1],"^(.-)%s+(.+)$")
+ if not (name and arguments) then
+ name, arguments = t[1], ""
+ end
+ end
+ else
+ name, arguments = t[1], table.concat(t," ",2,#t)
+ end
+ for _,v in pairs(executer.permitted) do
+ if string.find(name,v) then
+ execute(name .. " " .. arguments)
+ -- print("executed: " .. name .. " " .. arguments)
+ else
+ print("not permitted: " .. name .. " " .. arguments)
+ end
+ end
+ end
+ function executer.finalize()
+ print("executer is already finalized")
+ end
+ function executer.register(name)
+ print("executer is already finalized")
+ end
+ os.execute = executer.execute
+ end
+end
+
+--~ executer.register('.*')
+--~ executer.register('*')
+--~ executer.register('dir','ls')
+--~ executer.register('dir')
+
+--~ executer.finalize()
+--~ executer.execute('dir',"*.tex")
+--~ executer.execute("dir *.tex")
+--~ executer.execute("ls *.tex")
+--~ os.execute('ls')
diff --git a/Master/texmf-dist/tex/context/base/luat-ini.lua b/Master/texmf-dist/tex/context/base/luat-ini.lua
new file mode 100644
index 00000000000..092593541ae
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/luat-ini.lua
@@ -0,0 +1,26 @@
+if not modules then modules = { } end modules ['luat-ini'] = {
+ version = 1.001,
+ comment = "companion to luat-lib.tex",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+--[[ldx--
+<p>We cannot load anything yet. However what we will do us reserve a fewtables.
+These can be used for runtime user data or third party modules and will not be
+cluttered by macro package code.</p>
+--ldx]]--
+
+userdata = userdata or { }
+thirddata = thirddata or { }
+document = document or { }
+
+--[[ldx--
+<p>Please create a namespace within these tables before using them!</p>
+
+<typing>
+userdata ['my.name'] = { }
+thirddata['tricks' ] = { }
+</typing>
+--ldx]]--
diff --git a/Master/texmf-dist/tex/context/base/luat-ini.tex b/Master/texmf-dist/tex/context/base/luat-ini.tex
new file mode 100644
index 00000000000..863530b6be1
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/luat-ini.tex
@@ -0,0 +1,103 @@
+%D \module
+%D [ file=luat-ini,
+%D version=2005.08.11,
+%D title=\CONTEXT\ Lua Macros,
+%D subtitle=Initialization,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright=PRAGMA]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{Lua Support Macros (initialization)}
+
+\unprotect
+
+%D We have to load this module in a very early stage. Therefore we
+%D cannot rely on support macros being available.
+
+% \long\def\rescan#1{\expanded{\scantextokens{#1}}}
+
+%D Loading lua code can be done using \type {startup.lua}. The following
+%D method uses the \TEX\ input file locator of kpse. At least we need to
+%D use that way of loading when we haven't yet define our own code, which
+%D we keep outside the format. We will keep code outside \TEX\ files as
+%D much as possible.
+
+\ifx\setnaturalcatcodes\undefined \let\setnaturalcatcodes\relax \fi
+\ifx\obeylualines \undefined \let\obeylualines \relax \fi
+\ifx\obeyluatokens \undefined \let\obeyluatokens \relax \fi
+
+% \def\loadluacode#1#2% instance filename
+% {\bgroup
+% \everyeof{\noexpand}% hack to make \input nicely expandable
+% \setnaturalcatcodes
+% \obeylualines
+% %message{[Lua Load: #2]}%
+% \directlua#1\expandafter{\normalinput#2\space}\relax
+% \egroup}
+
+%D A few more goodies:
+
+\long\def\dostartlua#1%
+ {\begingroup
+ \obeylualines
+ \dodostartlua{#1}}
+
+\long\def\dodostartlua#1#2\stoplua
+ {\expanded{\endgroup\noexpand\directlua#1{#2}}}
+
+\long\def\dostartluacode#1%
+ {\begingroup
+ \obeylualines
+ \obeyluatokens
+ \dodostartluacode{#1}}
+
+\long\def\dodostartluacode#1#2\stopluacode
+ {\expanded{\endgroup\noexpand\directlua#1{#2}}}
+
+\def\startlua {\dostartlua \zerocount}
+\def\startluacode{\dostartluacode\zerocount}
+
+%D Some delayed definitions:
+
+\ifx\obeylines \undefined \let\obeylines \relax \fi
+\ifx\obeyedline \undefined \let\obeyedline \relax \fi
+\ifx\obeyspaces \undefined \let\obeyspaces \relax \fi
+\ifx\obeyedspace \undefined \let\obeyedspace \relax \fi
+\ifx\outputnewlinechar\undefined \let\outputnewlinechar\relax \fi
+
+\def\obeylualines
+ {\obeylines \let\obeyedline \outputnewlinechar
+ \obeyspaces \let\obeyedspace\space}
+
+\def\obeyluatokens % todo: make this a proper catcode table, use let's
+ {\catcode`\%=12 \catcode`\#=12
+ \catcode`\_=12 \catcode`\^=12
+ \catcode`\&=12 \catcode`\|=12
+ \catcode`\{=12 \catcode`\}=12
+ \catcode`\~=12 \catcode`\$=12
+ \def\\{\string\\}\def\|{\string\|}\def\-{\string\-}%
+ \def\({\string\(}\def\){\string\)}\def\{{\string\{}\def\}{\string\}}%
+ \def\'{\string\'}\def\"{\string\"}%
+ \def\n{\string\n}\def\r{\string\r}\def\f{\string\f}\def\t{\string\t}%
+ \def\a{\string\a}\def\b{\string\b}\def\v{\string\v}\def\s{\string\s}%
+ \def\1{\string1}\def\2{\string2}\def\3{\string3}\def\4{\string\4}\def\5{\string\5}%
+ \def\6{\string6}\def\7{\string7}\def\8{\string8}\def\9{\string\9}\def\0{\string\0}}
+
+%D We provide an interface for defining instances:
+
+\def\s!lua{lua} \def\v!code{code} \let\@EA\expandafter
+
+\def\definelua[#1]%
+ {\ifcsname#1\s!lua\endcsname\else\expandafter\newlua\csname#1\s!lua\endcsname\fi
+ \setevalue{\e!start#1\s!lua }{\noexpand\dostartlua \csname#1\s!lua\endcsname}%
+ \setevalue{\e!start#1\s!lua\v!code}{\noexpand\dostartluacode\csname#1\s!lua\endcsname}%
+ \setvalue {\e!stop #1\s!lua }{\dostoplua }%
+ \setvalue {\e!stop #1\s!lua\v!code}{\dostopluacode}}
+
+\definelua[CTX]
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/luat-inp.lua b/Master/texmf-dist/tex/context/base/luat-inp.lua
new file mode 100644
index 00000000000..63dc1d904fc
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/luat-inp.lua
@@ -0,0 +1,2259 @@
+-- filename : luat-inp.lua
+-- comment : companion to luat-lib.tex
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+-- This lib is multi-purpose and can be loaded again later on so that
+-- additional functionality becomes available. We will split this
+-- module in components when we're done with prototyping.
+
+-- TODO: os.getenv -> os.env[]
+-- TODO: instances.[hashes,cnffiles,configurations,522] -> ipairs (alles check, sneller)
+-- TODO: check escaping in find etc, too much, too slow
+
+-- This is the first code I wrote for LuaTeX, so it needs some cleanup.
+
+-- To be considered: hash key lowercase, first entry in table filename
+-- (any case), rest paths (so no need for optimization). Or maybe a
+-- separate table that matches lowercase names to mixed case when
+-- present. In that case the lower() cases can go away. I will do that
+-- only when we run into problems with names ... well ... Iwona-Regular.
+
+-- Beware, loading and saving is overloaded in luat-tmp!
+
+if not versions then versions = { } end versions['luat-inp'] = 1.001
+if not environment then environment = { } end
+if not file then file = { } end
+
+if environment.aleph_mode == nil then environment.aleph_mode = true end -- temp hack
+
+if not input then input = { } end
+if not input.suffixes then input.suffixes = { } end
+if not input.formats then input.formats = { } end
+if not input.aux then input.aux = { } end
+
+if not input.suffixmap then input.suffixmap = { } end
+
+if not input.locators then input.locators = { } end -- locate databases
+if not input.hashers then input.hashers = { } end -- load databases
+if not input.generators then input.generators = { } end -- generate databases
+if not input.filters then input.filters = { } end -- conversion filters
+
+local format = string.format
+
+input.locators.notfound = { nil }
+input.hashers.notfound = { nil }
+input.generators.notfound = { nil }
+
+input.cacheversion = '1.0.1'
+input.banner = nil
+input.verbose = false
+input.debug = false
+input.cnfname = 'texmf.cnf'
+input.luaname = 'texmfcnf.lua'
+input.lsrname = 'ls-R'
+input.luasuffix = '.tma'
+input.lucsuffix = '.tmc'
+
+-- we use a cleaned up list / format=any is a wildcard, as is *name
+
+input.formats['afm'] = 'AFMFONTS' input.suffixes['afm'] = { 'afm' }
+input.formats['enc'] = 'ENCFONTS' input.suffixes['enc'] = { 'enc' }
+input.formats['fmt'] = 'TEXFORMATS' input.suffixes['fmt'] = { 'fmt' }
+input.formats['map'] = 'TEXFONTMAPS' input.suffixes['map'] = { 'map' }
+input.formats['mp'] = 'MPINPUTS' input.suffixes['mp'] = { 'mp' }
+input.formats['ocp'] = 'OCPINPUTS' input.suffixes['ocp'] = { 'ocp' }
+input.formats['ofm'] = 'OFMFONTS' input.suffixes['ofm'] = { 'ofm', 'tfm' }
+input.formats['otf'] = 'OPENTYPEFONTS' input.suffixes['otf'] = { 'otf' } -- 'ttf'
+input.formats['opl'] = 'OPLFONTS' input.suffixes['opl'] = { 'opl' }
+input.formats['otp'] = 'OTPINPUTS' input.suffixes['otp'] = { 'otp' }
+input.formats['ovf'] = 'OVFFONTS' input.suffixes['ovf'] = { 'ovf', 'vf' }
+input.formats['ovp'] = 'OVPFONTS' input.suffixes['ovp'] = { 'ovp' }
+input.formats['tex'] = 'TEXINPUTS' input.suffixes['tex'] = { 'tex' }
+input.formats['tfm'] = 'TFMFONTS' input.suffixes['tfm'] = { 'tfm' }
+input.formats['ttf'] = 'TTFONTS' input.suffixes['ttf'] = { 'ttf', 'ttc' }
+input.formats['pfb'] = 'T1FONTS' input.suffixes['pfb'] = { 'pfb', 'pfa' }
+input.formats['vf'] = 'VFFONTS' input.suffixes['vf'] = { 'vf' }
+
+input.formats['fea'] = 'FONTFEATURES' input.suffixes['fea'] = { 'fea' }
+input.formats['cid'] = 'FONTCIDMAPS' input.suffixes['cid'] = { 'cid', 'cidmap' }
+
+input.formats ['texmfscripts'] = 'TEXMFSCRIPTS' -- new
+input.suffixes['texmfscripts'] = { 'rb', 'pl', 'py' } -- 'lua'
+
+input.formats ['lua'] = 'LUAINPUTS' -- new
+input.suffixes['lua'] = { 'lua', 'luc', 'tma', 'tmc' }
+
+-- here we catch a few new thingies (todo: add these paths to context.tmf)
+--
+-- FONTFEATURES = .;$TEXMF/fonts/fea//
+-- FONTCIDMAPS = .;$TEXMF/fonts/cid//
+
+function input.checkconfigdata(instance) -- not yet ok, no time for debugging now
+ local function fix(varname,default)
+ local proname = varname .. "." .. instance.progname or "crap"
+ local p = instance.environment[proname]
+ local v = instance.environment[varname]
+ if not ((p and p ~= "") or (v and v ~= "")) then
+ instance.variables[varname] = default -- or environment?
+ end
+ end
+ fix("LUAINPUTS" , ".;$TEXINPUTS;$TEXMFSCRIPTS")
+ fix("FONTFEATURES", ".;$TEXMF/fonts/fea//;$OPENTYPEFONTS;$TTFONTS;$T1FONTS;$AFMFONTS")
+ fix("FONTCIDMAPS" , ".;$TEXMF/fonts/cid//;$OPENTYPEFONTS;$TTFONTS;$T1FONTS;$AFMFONTS")
+end
+
+-- backward compatible ones
+
+input.alternatives = { }
+
+input.alternatives['map files'] = 'map'
+input.alternatives['enc files'] = 'enc'
+input.alternatives['cid files'] = 'cid'
+input.alternatives['fea files'] = 'fea'
+input.alternatives['opentype fonts'] = 'otf'
+input.alternatives['truetype fonts'] = 'ttf'
+input.alternatives['truetype collections'] = 'ttc'
+input.alternatives['type1 fonts'] = 'pfb'
+
+-- obscure ones
+
+input.formats ['misc fonts'] = ''
+input.suffixes['misc fonts'] = { }
+
+input.formats ['sfd'] = 'SFDFONTS'
+input.suffixes ['sfd'] = { 'sfd' }
+input.alternatives['subfont definition files'] = 'sfd'
+
+function input.reset()
+
+ local instance = { }
+
+ instance.rootpath = ''
+ instance.treepath = ''
+ instance.progname = environment.progname or 'context'
+ instance.engine = environment.engine or 'luatex'
+ instance.format = ''
+ instance.environment = { }
+ instance.variables = { }
+ instance.expansions = { }
+ instance.files = { }
+ instance.remap = { }
+ instance.configuration = { }
+ instance.setup = { }
+ instance.order = { }
+ instance.found = { }
+ instance.foundintrees = { }
+ instance.kpsevars = { }
+ instance.hashes = { }
+ instance.cnffiles = { }
+ instance.luafiles = { }
+ instance.lists = { }
+ instance.remember = true
+ instance.diskcache = true
+ instance.renewcache = false
+ instance.scandisk = true
+ instance.cachepath = nil
+ instance.loaderror = false
+ instance.smallcache = false
+ instance.savelists = true
+ instance.cleanuppaths = true
+ instance.allresults = false
+ instance.pattern = nil -- lists
+ instance.kpseonly = false -- lists
+ instance.loadtime = 0
+ instance.starttime = 0
+ instance.stoptime = 0
+ instance.validfile = function(path,name) return true end
+ instance.data = { } -- only for loading
+ instance.force_suffixes = true
+ instance.dummy_path_expr = "^!*unset/*$"
+ instance.fakepaths = { }
+ instance.lsrmode = false
+
+ if os.env then
+ -- store once, freeze and faster
+ for k,v in pairs(os.env) do
+ instance.environment[k] = input.bare_variable(v)
+ end
+ else
+ -- we will access os.env frequently
+ for k,v in pairs({'HOME','TEXMF','TEXMFCNF'}) do
+ local e = os.getenv(v)
+ if e then
+ -- input.report("setting",v,"to",input.bare_variable(e))
+ instance.environment[v] = input.bare_variable(e)
+ end
+ end
+ end
+
+ -- cross referencing
+
+ for k, v in pairs(input.suffixes) do
+ for _, vv in pairs(v) do
+ if vv then
+ input.suffixmap[vv] = k
+ end
+ end
+ end
+
+ return instance
+
+end
+
+function input.reset_hashes(instance)
+ instance.lists = { }
+ instance.found = { }
+end
+
+function input.bare_variable(str) -- assumes str is a string
+ -- return string.gsub(string.gsub(string.gsub(str,"%s+$",""),'^"(.+)"$',"%1"),"^'(.+)'$","%1")
+ return (str:gsub("\s*([\"\']?)(.+)%1\s*", "%2"))
+end
+
+if texio then
+ input.log = texio.write_nl
+else
+ input.log = print
+end
+
+function input.simple_logger(kind, name)
+ if name and name ~= "" then
+ if input.banner then
+ input.log(input.banner..kind..": "..name)
+ else
+ input.log("<<"..kind..": "..name..">>")
+ end
+ else
+ if input.banner then
+ input.log(input.banner..kind..": no name")
+ else
+ input.log("<<"..kind..": no name>>")
+ end
+ end
+end
+
+function input.dummy_logger()
+end
+
+function input.settrace(n)
+ input.trace = tonumber(n or 0)
+ if input.trace > 0 then
+ input.logger = input.simple_logger
+ input.verbose = true
+ else
+ input.logger = function() end
+ end
+end
+
+function input.report(...) -- inefficient
+ if input.verbose then
+ if input.banner then
+ input.log(input.banner .. table.concat({...},' '))
+ elseif input.logmode() == 'xml' then
+ input.log("<t>"..table.concat({...},' ').."</t>")
+ else
+ input.log("<<"..table.concat({...},' ')..">>")
+ end
+ end
+end
+
+function input.reportlines(str)
+ if type(str) == "string" then
+ str = str:split("\n")
+ end
+ for _,v in pairs(str) do input.report(v) end
+end
+
+input.settrace(tonumber(os.getenv("MTX.INPUT.TRACE") or os.getenv("MTX_INPUT_TRACE") or input.trace or 0))
+
+-- These functions can be used to test the performance, especially
+-- loading the database files.
+
+do
+ local clock = os.gettimeofday or os.clock
+
+ function input.starttiming(instance)
+ if instance then
+ instance.starttime = clock()
+ if not instance.loadtime then
+ instance.loadtime = 0
+ end
+ end
+ end
+
+ function input.stoptiming(instance, report)
+ if instance then
+ local starttime = instance.starttime
+ if starttime then
+ local stoptime = clock()
+ local loadtime = stoptime - starttime
+ instance.stoptime = stoptime
+ instance.loadtime = instance.loadtime + loadtime
+ if report then
+ input.report('load time', format("%0.3f",loadtime))
+ end
+ return loadtime
+ end
+ end
+ return 0
+ end
+
+end
+
+function input.elapsedtime(instance)
+ return format("%0.3f",(instance and instance.loadtime) or 0)
+end
+
+function input.report_loadtime(instance)
+ if instance then
+ input.report('total load time', input.elapsedtime(instance))
+ end
+end
+
+input.loadtime = input.elapsedtime
+
+function input.env(instance,key)
+ return instance.environment[key] or input.osenv(instance,key)
+end
+
+function input.osenv(instance,key)
+ local ie = instance.environment
+ local value = ie[key]
+ if value == nil then
+ -- local e = os.getenv(key)
+ local e = os.env[key]
+ if e == nil then
+ -- value = "" -- false
+ else
+ value = input.bare_variable(e)
+ end
+ ie[key] = value
+ end
+ return value or ""
+end
+
+-- we follow a rather traditional approach:
+--
+-- (1) texmf.cnf given in TEXMFCNF
+-- (2) texmf.cnf searched in TEXMF/web2c
+--
+-- for the moment we don't expect a configuration file in a zip
+
+function input.identify_cnf(instance)
+ -- we no longer support treepath and rootpath (was handy for testing);
+ -- also we now follow the stupid route: if not set then just assume *one*
+ -- cnf file under texmf (i.e. distribution)
+ if #instance.cnffiles == 0 then
+ if input.env(instance,'TEXMFCNF') == "" then
+ local ownpath = environment.ownpath() or "."
+ if ownpath then
+ -- beware, this is tricky on my own system because at that location I do have
+ -- the raw tree that ends up in the zip; i.e. I cannot test this kind of mess
+ local function locate(filename,list)
+ local ownroot = input.normalize_name(file.join(ownpath,"../.."))
+ if not lfs.isdir(file.join(ownroot,"texmf")) then
+ ownroot = input.normalize_name(file.join(ownpath,".."))
+ if not lfs.isdir(file.join(ownroot,"texmf")) then
+ input.verbose = true
+ input.report("error", "unable to identify cnf file")
+ return
+ end
+ end
+ local texmfcnf = file.join(ownroot,"texmf-local/web2c",filename) -- for minimals and myself
+ if not lfs.isfile(texmfcnf) then
+ texmfcnf = file.join(ownroot,"texmf/web2c",filename)
+ if not lfs.isfile(texmfcnf) then
+ input.verbose = true
+ input.report("error", "unable to locate",filename)
+ return
+ end
+ end
+ table.insert(list,texmfcnf)
+ local ie = instance.environment
+ if not ie['SELFAUTOPARENT'] then ie['SELFAUTOPARENT'] = ownroot end
+ if not ie['TEXMFCNF'] then ie['TEXMFCNF'] = file.dirname(texmfcnf) end
+ end
+ locate(input.luaname,instance.luafiles)
+ locate(input.cnfname,instance.cnffiles)
+ if #instance.luafiles == 0 and instance.cnffiles == 0 then
+ input.verbose = true
+ input.report("error", "unable to locate",filename)
+ os.exit()
+ end
+ -- here we also assume then TEXMF is set in the distribution, if this trickery is
+ -- used in the minimals, then users who don't use setuptex are on their own with
+ -- regards to extra trees
+ else
+ input.verbose = true
+ input.report("error", "unable to identify own path")
+ os.exit()
+ end
+ else
+ local t = input.split_path(input.env(instance,'TEXMFCNF'))
+ t = input.aux.expanded_path(instance,t)
+ input.aux.expand_vars(instance,t)
+ local function locate(filename,list)
+ for _,v in ipairs(t) do
+ local texmfcnf = input.normalize_name(file.join(v,filename))
+ if lfs.isfile(texmfcnf) then
+ table.insert(list,texmfcnf)
+ end
+ end
+ end
+ locate(input.luaname,instance.luafiles)
+ locate(input.cnfname,instance.cnffiles)
+ end
+ end
+end
+
+function input.load_cnf(instance)
+ local function loadoldconfigdata()
+ for _, fname in ipairs(instance.cnffiles) do
+ input.aux.load_cnf(instance,fname)
+ end
+ end
+ -- instance.cnffiles contain complete names now !
+ if #instance.cnffiles == 0 then
+ input.report("no cnf files found (TEXMFCNF may not be set/known)")
+ else
+ instance.rootpath = instance.cnffiles[1]
+ for k,fname in ipairs(instance.cnffiles) do
+ instance.cnffiles[k] = input.normalize_name(fname:gsub("\\",'/'))
+ end
+ for i=1,3 do
+ instance.rootpath = file.dirname(instance.rootpath)
+ end
+ instance.rootpath = input.normalize_name(instance.rootpath)
+ instance.environment['SELFAUTOPARENT'] = instance.rootpath -- just to be sure
+ if instance.lsrmode then
+ loadoldconfigdata()
+ elseif instance.diskcache and not instance.renewcache then
+ input.loadoldconfig(instance,instance.cnffiles)
+ if instance.loaderror then
+ loadoldconfigdata()
+ input.saveoldconfig(instance)
+ end
+ else
+ loadoldconfigdata()
+ if instance.renewcache then
+ input.saveoldconfig(instance)
+ end
+ end
+ input.aux.collapse_cnf_data(instance)
+ end
+ input.checkconfigdata(instance)
+end
+
+function input.load_lua(instance)
+ if #instance.luafiles == 0 then
+ -- yet harmless
+ else
+ instance.rootpath = instance.luafiles[1]
+ for k,fname in ipairs(instance.luafiles) do
+ instance.luafiles[k] = input.normalize_name(fname:gsub("\\",'/'))
+ end
+ for i=1,3 do
+ instance.rootpath = file.dirname(instance.rootpath)
+ end
+ instance.rootpath = input.normalize_name(instance.rootpath)
+ instance.environment['SELFAUTOPARENT'] = instance.rootpath -- just to be sure
+ input.loadnewconfig(instance)
+ input.aux.collapse_cnf_data(instance)
+ end
+ input.checkconfigdata(instance)
+end
+
+function input.aux.collapse_cnf_data(instance) -- potential optmization: pass start index (setup and configuration are shared)
+ for _,c in ipairs(instance.order) do
+ for k,v in pairs(c) do
+ if not instance.variables[k] then
+ if instance.environment[k] then
+ instance.variables[k] = instance.environment[k]
+ else
+ instance.kpsevars[k] = true
+ instance.variables[k] = input.bare_variable(v)
+ end
+ end
+ end
+ end
+end
+
+function input.aux.load_cnf(instance,fname)
+ fname = input.clean_path(fname)
+ local lname = fname:gsub("%.%a+$",input.luasuffix)
+ local f = io.open(lname)
+ if f then -- this will go
+ f:close()
+ local dname = file.dirname(fname)
+ if not instance.configuration[dname] then
+ input.aux.load_configuration(instance,dname,lname)
+ instance.order[#instance.order+1] = instance.configuration[dname]
+ end
+ else
+ f = io.open(fname)
+ if f then
+ input.report("loading", fname)
+ local line, data, n, k, v
+ local dname = file.dirname(fname)
+ if not instance.configuration[dname] then
+ instance.configuration[dname] = { }
+ instance.order[#instance.order+1] = instance.configuration[dname]
+ end
+ local data = instance.configuration[dname]
+ while true do
+ local line, n = f:read(), 0
+ if line then
+ while true do -- join lines
+ line, n = line:gsub("\\%s*$", "")
+ if n > 0 then
+ line = line .. f:read()
+ else
+ break
+ end
+ end
+ if not line:find("^[%%#]") then
+ local k, v = (line:gsub("%s*%%.*$","")):match("%s*(.-)%s*=%s*(.-)%s*$")
+ if k and v and not data[k] then
+ data[k] = (v:gsub("[%%#].*",'')):gsub("~", "$HOME")
+ instance.kpsevars[k] = true
+ end
+ end
+ else
+ break
+ end
+ end
+ f:close()
+ else
+ input.report("skipping", fname)
+ end
+ end
+end
+
+-- database loading
+
+function input.load_hash(instance)
+ input.locatelists(instance)
+ if instance.lsrmode then
+ input.loadlists(instance)
+ elseif instance.diskcache and not instance.renewcache then
+ input.loadfiles(instance)
+ if instance.loaderror then
+ input.loadlists(instance)
+ input.savefiles(instance)
+ end
+ else
+ input.loadlists(instance)
+ if instance.renewcache then
+ input.savefiles(instance)
+ end
+ end
+end
+
+function input.aux.append_hash(instance,type,tag,name)
+ input.logger("= hash append",tag)
+ table.insert(instance.hashes, { ['type']=type, ['tag']=tag, ['name']=name } )
+end
+
+function input.aux.prepend_hash(instance,type,tag,name)
+ input.logger("= hash prepend",tag)
+ table.insert(instance.hashes, 1, { ['type']=type, ['tag']=tag, ['name']=name } )
+end
+
+function input.aux.extend_texmf_var(instance,specification) -- crap
+ if instance.environment['TEXMF'] then
+ input.report("extending environment variable TEXMF with", specification)
+ instance.environment['TEXMF'] = instance.environment['TEXMF']:gsub("^%{", function()
+ return "{" .. specification .. ","
+ end)
+ elseif instance.variables['TEXMF'] then
+ input.report("extending configuration variable TEXMF with", specification)
+ instance.variables['TEXMF'] = instance.variables['TEXMF']:gsub("^%{", function()
+ return "{" .. specification .. ","
+ end)
+ else
+ input.report("setting configuration variable TEXMF to", specification)
+ instance.variables['TEXMF'] = "{" .. specification .. "}"
+ end
+ if instance.variables['TEXMF']:find("%,") and not instance.variables['TEXMF']:find("^%{") then
+ input.report("adding {} to complex TEXMF variable, best do that yourself")
+ instance.variables['TEXMF'] = "{" .. instance.variables['TEXMF'] .. "}"
+ end
+ input.expand_variables(instance)
+ input.reset_hashes(instance)
+end
+
+-- locators
+
+function input.locatelists(instance)
+ for _, path in pairs(input.simplified_list(input.expansion(instance,'TEXMF'))) do
+ path = file.collapse_path(path)
+ input.report("locating list of",path)
+ input.locatedatabase(instance,input.normalize_name(path))
+ end
+end
+
+function input.locatedatabase(instance,specification)
+ return input.methodhandler('locators', instance, specification)
+end
+
+function input.locators.tex(instance,specification)
+ if specification and specification ~= '' and lfs.isdir(specification) then
+ input.logger('! tex locator', specification..' found')
+ input.aux.append_hash(instance,'file',specification,filename)
+ else
+ input.logger('? tex locator', specification..' not found')
+ end
+end
+
+-- hashers
+
+function input.hashdatabase(instance,tag,name)
+ return input.methodhandler('hashers',instance,tag,name)
+end
+
+function input.loadfiles(instance)
+ instance.loaderror = false
+ instance.files = { }
+ if not instance.renewcache then
+ for _, hash in ipairs(instance.hashes) do
+ input.hashdatabase(instance,hash.tag,hash.name)
+ if instance.loaderror then break end
+ end
+ end
+end
+
+function input.hashers.tex(instance,tag,name)
+ input.aux.load_files(instance,tag)
+end
+
+-- generators:
+
+function input.loadlists(instance)
+ for _, hash in ipairs(instance.hashes) do
+ input.generatedatabase(instance,hash.tag)
+ end
+end
+
+function input.generatedatabase(instance,specification)
+ return input.methodhandler('generators', instance, specification)
+end
+
+do
+
+ local weird = lpeg.anywhere(lpeg.S("~`!#$%^&*()={}[]:;\"\'||<>,?\n\r\t"))
+
+ function input.generators.tex(instance,specification)
+ local tag = specification
+ if not instance.lsrmode and lfs and lfs.dir then
+ input.report("scanning path",specification)
+ instance.files[tag] = { }
+ local files = instance.files[tag]
+ local n, m, r = 0, 0, 0
+ local spec = specification .. '/'
+ local attributes = lfs.attributes
+ local directory = lfs.dir
+ local small = instance.smallcache
+ local function action(path)
+ local mode, full
+ if path then
+ full = spec .. path .. '/'
+ else
+ full = spec
+ end
+ for name in directory(full) do
+ if name:find("^%.") then
+ -- skip
+ -- elseif name:find("[%~%`%!%#%$%%%^%&%*%(%)%=%{%}%[%]%:%;\"\'%|%<%>%,%?\n\r\t]") then -- too much escaped
+ elseif weird:match(name) then
+ -- texio.write_nl("skipping " .. name)
+ -- skip
+ else
+ mode = attributes(full..name,'mode')
+ if mode == "directory" then
+ m = m + 1
+ if path then
+ action(path..'/'..name)
+ else
+ action(name)
+ end
+ elseif path and mode == 'file' then
+ n = n + 1
+ local f = files[name]
+ if f then
+ if not small then
+ if type(f) == 'string' then
+ files[name] = { f, path }
+ else
+ f[#f+1] = path
+ end
+ end
+ else
+ files[name] = path
+ local lower = name:lower()
+ if name ~= lower then
+ files["remap:"..lower] = name
+ r = r + 1
+ end
+ end
+ end
+ end
+ end
+ end
+ action()
+ input.report(format("%s files found on %s directories with %s uppercase remappings",n,m,r))
+ else
+ local fullname = file.join(specification,input.lsrname)
+ local path = '.'
+ local f = io.open(fullname)
+ if f then
+ instance.files[tag] = { }
+ local files = instance.files[tag]
+ local small = instance.smallcache
+ input.report("loading lsr file",fullname)
+ -- for line in f:lines() do -- much slower then the next one
+ for line in (f:read("*a")):gmatch("(.-)\n") do
+ if line:find("^[%a%d]") then
+ local fl = files[line]
+ if fl then
+ if not small then
+ if type(fl) == 'string' then
+ files[line] = { fl, path } -- table
+ else
+ fl[#fl+1] = path
+ end
+ end
+ else
+ files[line] = path -- string
+ local lower = line:lower()
+ if line ~= lower then
+ files["remap:"..lower] = line
+ end
+ end
+ else
+ path = line:match("%.%/(.-)%:$") or path -- match could be nil due to empty line
+ end
+ end
+ f:close()
+ end
+ end
+ end
+
+end
+
+-- savers, todo
+
+function input.savefiles(instance)
+ input.aux.save_data(instance, 'files', function(k,v)
+ return instance.validfile(k,v) -- path, name
+ end)
+end
+
+-- A config (optionally) has the paths split in tables. Internally
+-- we join them and split them after the expansion has taken place. This
+-- is more convenient.
+
+function input.splitconfig(instance)
+ for i,c in ipairs(instance) do
+ for k,v in pairs(c) do
+ if type(v) == 'string' then
+ local t = file.split_path(v)
+ if #t > 1 then
+ c[k] = t
+ end
+ end
+ end
+ end
+end
+function input.joinconfig(instance)
+ for i,c in ipairs(instance.order) do
+ for k,v in pairs(c) do
+ if type(v) == 'table' then
+ c[k] = file.join_path(v)
+ end
+ end
+ end
+end
+function input.split_path(str)
+ if type(str) == 'table' then
+ return str
+ else
+ return file.split_path(str)
+ end
+end
+function input.join_path(str)
+ if type(str) == 'table' then
+ return file.join_path(str)
+ else
+ return str
+ end
+end
+
+function input.splitexpansions(instance)
+ for k,v in pairs(instance.expansions) do
+ local t, h = { }, { }
+ for _,vv in pairs(file.split_path(v)) do
+ if vv ~= "" and not h[vv] then
+ t[#t+1] = vv
+ h[vv] = true
+ end
+ end
+ if #t > 1 then
+ instance.expansions[k] = t
+ else
+ instance.expansions[k] = t[1]
+ end
+ end
+end
+
+-- end of split/join code
+
+function input.saveoldconfig(instance)
+ input.splitconfig(instance)
+ input.aux.save_data(instance, 'configuration', nil)
+ input.joinconfig(instance)
+end
+
+input.configbanner = [[
+-- This is a Luatex configuration file created by 'luatools.lua' or
+-- 'luatex.exe' directly. For comment, suggestions and questions you can
+-- contact the ConTeXt Development Team. This configuration file is
+-- not copyrighted. [HH & TH]
+]]
+
+function input.serialize(files)
+ -- This version is somewhat optimized for the kind of
+ -- tables that we deal with, so it's much faster than
+ -- the generic serializer. This makes sense because
+ -- luatools and mtxtools are called frequently. Okay,
+ -- we pay a small price for properly tabbed tables.
+ local t = { }
+ local concat = table.concat
+ local sorted = table.sortedkeys
+ local function dump(k,v,m)
+ if type(v) == 'string' then
+ return m .. "['" .. k .. "']='" .. v .. "',"
+ elseif #v == 1 then
+ return m .. "['" .. k .. "']='" .. v[1] .. "',"
+ else
+ return m .. "['" .. k .. "']={'" .. concat(v,"','").. "'},"
+ end
+ end
+ t[#t+1] = "return {"
+ if instance.sortdata then
+ for _, k in pairs(sorted(files)) do
+ local fk = files[k]
+ if type(fk) == 'table' then
+ t[#t+1] = "\t['" .. k .. "']={"
+ for _, kk in pairs(sorted(fk)) do
+ t[#t+1] = dump(kk,fk[kk],"\t\t")
+ end
+ t[#t+1] = "\t},"
+ else
+ t[#t+1] = dump(k,fk,"\t")
+ end
+ end
+ else
+ for k, v in pairs(files) do
+ if type(v) == 'table' then
+ t[#t+1] = "\t['" .. k .. "']={"
+ for kk,vv in pairs(v) do
+ t[#t+1] = dump(kk,vv,"\t\t")
+ end
+ t[#t+1] = "\t},"
+ else
+ t[#t+1] = dump(k,v,"\t")
+ end
+ end
+ end
+ t[#t+1] = "}"
+ return concat(t,"\n")
+end
+
+if not texmf then texmf = {} end -- no longer needed, at least not here
+
+function input.aux.save_data(instance, dataname, check, makename) -- untested without cache overload
+ for cachename, files in pairs(instance[dataname]) do
+ local name = (makename or file.join)(cachename,dataname)
+ local luaname, lucname = name .. input.luasuffix, name .. input.lucsuffix
+ input.report("preparing " .. dataname .. " for", luaname)
+ for k, v in pairs(files) do
+ if not check or check(v,k) then -- path, name
+ if type(v) == "table" and #v == 1 then
+ files[k] = v[1]
+ end
+ else
+ files[k] = nil -- false
+ end
+ end
+ local data = {
+ type = dataname,
+ root = cachename,
+ version = input.cacheversion,
+ date = os.date("%Y-%m-%d"),
+ time = os.date("%H:%M:%S"),
+ content = files,
+ }
+ local f = io.open(luaname,'w')
+ if f then
+ input.report("saving " .. dataname .. " in", luaname)
+ f:write(input.serialize(data))
+ f:close()
+ input.report("compiling " .. dataname .. " to", lucname)
+ if not utils.lua.compile(luaname,lucname) then
+ input.report("compiling failed for " .. dataname .. ", deleting file " .. lucname)
+ os.remove(lucname)
+ end
+ else
+ input.report("unable to save " .. dataname .. " in " .. name..input.luasuffix)
+ end
+ end
+end
+
+function input.aux.load_data(instance,pathname,dataname,filename,makename) -- untested without cache overload
+ filename = ((not filename or (filename == "")) and dataname) or filename
+ filename = (makename and makename(dataname,filename)) or file.join(pathname,filename)
+ local blob = loadfile(filename .. input.lucsuffix) or loadfile(filename .. input.luasuffix)
+ if blob then
+ local data = blob()
+ if data and data.content and data.type == dataname and data.version == input.cacheversion then
+ input.report("loading",dataname,"for",pathname,"from",filename)
+ instance[dataname][pathname] = data.content
+ else
+ input.report("skipping",dataname,"for",pathname,"from",filename)
+ instance[dataname][pathname] = { }
+ instance.loaderror = true
+ end
+ else
+ input.report("skipping",dataname,"for",pathname,"from",filename)
+ end
+end
+
+-- some day i'll use the nested approach, but not yet (actually we even drop
+-- engine/progname support since we have only luatex now)
+--
+-- first texmfcnf.lua files are located, next the cached texmf.cnf files
+--
+-- return {
+-- TEXMFBOGUS = 'effe checken of dit werkt',
+-- }
+
+function input.aux.load_texmfcnf(instance,dataname,pathname)
+ local filename = file.join(pathname,input.luaname)
+ local blob = loadfile(filename)
+ if blob then
+ local data = blob()
+ if data then
+ input.report("loading","configuration file",filename)
+ if true then
+ -- flatten to variable.progname
+ local t = { }
+ for k, v in pairs(data) do -- v = progname
+ if type(v) == "string" then
+ t[k] = v
+ else
+ for kk, vv in pairs(v) do -- vv = variable
+ if type(vv) == "string" then
+ t[vv.."."..v] = kk
+ end
+ end
+ end
+ end
+ instance[dataname][pathname] = t
+ else
+ instance[dataname][pathname] = data
+ end
+ else
+ input.report("skipping","configuration file",filename)
+ instance[dataname][pathname] = { }
+ instance.loaderror = true
+ end
+ else
+ input.report("skipping","configuration file",filename)
+ end
+end
+
+function input.aux.load_configuration(instance,dname,lname)
+ input.aux.load_data(instance,dname,'configuration',lname and file.basename(lname))
+end
+function input.aux.load_files(instance,tag)
+ input.aux.load_data(instance,tag,'files')
+end
+
+function input.resetconfig(instance)
+ instance.configuration, instance.setup, instance.order, instance.loaderror = { }, { }, { }, false
+end
+
+function input.loadnewconfig(instance)
+ for _, cnf in ipairs(instance.luafiles) do
+ local dname = file.dirname(cnf)
+ input.aux.load_texmfcnf(instance,'setup',dname)
+ instance.order[#instance.order+1] = instance.setup[dname]
+ if instance.loaderror then break end
+ end
+end
+
+function input.loadoldconfig(instance)
+ if not instance.renewcache then
+ for _, cnf in ipairs(instance.cnffiles) do
+ local dname = file.dirname(cnf)
+ input.aux.load_configuration(instance,dname)
+ instance.order[#instance.order+1] = instance.configuration[dname]
+ if instance.loaderror then break end
+ end
+ end
+ input.joinconfig(instance)
+end
+
+function input.expand_variables(instance)
+ instance.expansions = { }
+--~ instance.environment['SELFAUTOPARENT'] = instance.environment['SELFAUTOPARENT'] or instance.rootpath
+ if instance.engine ~= "" then instance.environment['engine'] = instance.engine end
+ if instance.progname ~= "" then instance.environment['progname'] = instance.progname end
+ for k,v in pairs(instance.environment) do
+ local a, b = k:match("^(%a+)%_(.*)%s*$")
+ if a and b then
+ instance.expansions[a..'.'..b] = v
+ else
+ instance.expansions[k] = v
+ end
+ end
+ for k,v in pairs(instance.environment) do -- move environment to expansions
+ if not instance.expansions[k] then instance.expansions[k] = v end
+ end
+ for k,v in pairs(instance.variables) do -- move variables to expansions
+ if not instance.expansions[k] then instance.expansions[k] = v end
+ end
+ while true do
+ local busy = false
+ for k,v in pairs(instance.expansions) do
+ local s, n = v:gsub("%$([%a%d%_%-]+)", function(a)
+ busy = true
+ return instance.expansions[a] or input.env(instance,a)
+ end)
+ local s, m = s:gsub("%$%{([%a%d%_%-]+)%}", function(a)
+ busy = true
+ return instance.expansions[a] or input.env(instance,a)
+ end)
+ if n > 0 or m > 0 then
+ instance.expansions[k]= s
+ end
+ end
+ if not busy then break end
+ end
+ for k,v in pairs(instance.expansions) do
+ instance.expansions[k] = v:gsub("\\", '/')
+ end
+end
+
+function input.aux.expand_vars(instance,lst) -- simple vars
+ for k,v in pairs(lst) do
+ lst[k] = v:gsub("%$([%a%d%_%-]+)", function(a)
+ return instance.variables[a] or input.env(instance,a)
+ end)
+ end
+end
+
+function input.aux.expanded_var(instance,var) -- simple vars
+ return var:gsub("%$([%a%d%_%-]+)", function(a)
+ return instance.variables[a] or input.env(instance,a)
+ end)
+end
+
+function input.aux.entry(instance,entries,name)
+ if name and (name ~= "") then
+ name = name:gsub('%$','')
+ local result = entries[name..'.'..instance.progname] or entries[name]
+ if result then
+ return result
+ else
+ result = input.env(instance,name)
+ if result then
+ instance.variables[name] = result
+ input.expand_variables(instance)
+ return instance.expansions[name] or ""
+ end
+ end
+ end
+ return ""
+end
+function input.variable(instance,name)
+ return input.aux.entry(instance,instance.variables,name)
+end
+function input.expansion(instance,name)
+ return input.aux.entry(instance,instance.expansions,name)
+end
+
+function input.aux.is_entry(instance,entries,name)
+ if name and name ~= "" then
+ name = name:gsub('%$','')
+ return (entries[name..'.'..instance.progname] or entries[name]) ~= nil
+ else
+ return false
+ end
+end
+
+function input.is_variable(instance,name)
+ return input.aux.is_entry(instance,instance.variables,name)
+end
+function input.is_expansion(instance,name)
+ return input.aux.is_entry(instance,instance.expansions,name)
+end
+
+function input.simplified_list(str)
+ if type(str) == 'table' then
+ return str -- troubles ; ipv , in texmf
+ elseif str == '' then
+ return { }
+ else
+ local t = { }
+ for _,v in ipairs(string.splitchr(str:gsub("^\{(.+)\}$","%1"),",")) do
+ t[#t+1] = (v:gsub("^[%!]*(.+)[%/\\]*$","%1"))
+ end
+ return t
+ end
+end
+
+function input.unexpanded_path_list(instance,str)
+ local pth = input.variable(instance,str)
+ local lst = input.split_path(pth)
+ return input.aux.expanded_path(instance,lst)
+end
+function input.unexpanded_path(instance,str)
+ return file.join_path(input.unexpanded_path_list(instance,str))
+end
+
+do
+ local done = { }
+
+ function input.reset_extra_path(instance)
+ local ep = instance.extra_paths
+ if not ep then
+ ep, done = { }, { }
+ instance.extra_paths = ep
+ elseif #ep > 0 then
+ instance.lists, done = { }, { }
+ end
+ end
+
+ function input.register_extra_path(instance,paths,subpaths)
+ local ep = instance.extra_paths or { }
+ local n = #ep
+ if paths and paths ~= "" then
+ if subpaths and subpaths ~= "" then
+ for p in paths:gmatch("[^,]+") do
+ -- we gmatch each step again, not that fast, but used seldom
+ for s in subpaths:gmatch("[^,]+") do
+ local ps = p .. "/" .. s
+ if not done[ps] then
+ ep[#ep+1] = input.clean_path(ps)
+ done[ps] = true
+ end
+ end
+ end
+ else
+ for p in paths:gmatch("[^,]+") do
+ if not done[p] then
+ ep[#ep+1] = input.clean_path(p)
+ done[p] = true
+ end
+ end
+ end
+ elseif subpaths and subpaths ~= "" then
+ for i=1,n do
+ -- we gmatch each step again, not that fast, but used seldom
+ for s in subpaths:gmatch("[^,]+") do
+ local ps = ep[i] .. "/" .. s
+ if not done[ps] then
+ ep[#ep+1] = input.clean_path(ps)
+ done[ps] = true
+ end
+ end
+ end
+ end
+ if #ep > 0 then
+ instance.extra_paths = ep -- register paths
+ end
+ if #ep > n then
+ instance.lists = { } -- erase the cache
+ end
+ end
+
+end
+
+function input.expanded_path_list(instance,str)
+ local function made_list(list)
+ local ep = instance.extra_paths
+ if not ep or #ep == 0 then
+ return list
+ else
+ local done, new = { }, { }
+ -- honour . .. ../.. but only when at the start
+ for k, v in ipairs(list) do
+ if not done[v] then
+ if v:find("^[%.%/]$") then
+ done[v] = true
+ new[#new+1] = v
+ else
+ break
+ end
+ end
+ end
+ -- first the extra paths
+ for k, v in ipairs(ep) do
+ if not done[v] then
+ done[v] = true
+ new[#new+1] = v
+ end
+ end
+ -- next the formal paths
+ for k, v in ipairs(list) do
+ if not done[v] then
+ done[v] = true
+ new[#new+1] = v
+ end
+ end
+ return new
+ end
+ end
+ if not str then
+ return ep or { }
+ elseif instance.savelists then
+ -- engine+progname hash
+ str = str:gsub("%$","")
+ if not instance.lists[str] then -- cached
+ local lst = made_list(input.split_path(input.expansion(instance,str)))
+ instance.lists[str] = input.aux.expanded_path(instance,lst)
+ end
+ return instance.lists[str]
+ else
+ local lst = input.split_path(input.expansion(instance,str))
+ return made_list(input.aux.expanded_path(instance,lst))
+ end
+end
+
+function input.expand_path(instance,str)
+ return file.join_path(input.expanded_path_list(instance,str))
+end
+
+--~ function input.first_writable_path(instance,name)
+--~ for _,v in pairs(input.expanded_path_list(instance,name)) do
+--~ if file.is_writable(file.join(v,'luatex-cache.tmp')) then
+--~ return v
+--~ end
+--~ end
+--~ return "."
+--~ end
+
+function input.expanded_path_list_from_var(instance,str) -- brrr
+ local tmp = input.var_of_format_or_suffix(str:gsub("%$",""))
+ if tmp ~= "" then
+ return input.expanded_path_list(instance,str)
+ else
+ return input.expanded_path_list(instance,tmp)
+ end
+end
+function input.expand_path_from_var(instance,str)
+ return file.join_path(input.expanded_path_list_from_var(instance,str))
+end
+
+function input.format_of_var(str)
+ return input.formats[str] or input.formats[input.alternatives[str]] or ''
+end
+function input.format_of_suffix(str)
+ return input.suffixmap[file.extname(str)] or 'tex'
+end
+
+function input.variable_of_format(str)
+ return input.formats[str] or input.formats[input.alternatives[str]] or ''
+end
+
+function input.var_of_format_or_suffix(str)
+ local v = input.formats[str]
+ if v then
+ return v
+ end
+ v = input.formats[input.alternatives[str]]
+ if v then
+ return v
+ end
+ v = input.suffixmap[file.extname(str)]
+ if v then
+ return input.formats[isf]
+ end
+ return ''
+end
+
+function input.expand_braces(instance,str) -- output variable and brace expansion of STRING
+ local ori = input.variable(instance,str)
+ local pth = input.aux.expanded_path(instance,input.split_path(ori))
+ return file.join_path(pth)
+end
+
+-- {a,b,c,d}
+-- a,b,c/{p,q,r},d
+-- a,b,c/{p,q,r}/d/{x,y,z}//
+-- a,b,c/{p,q/{x,y,z},r},d/{p,q,r}
+-- a,b,c/{p,q/{x,y,z},r},d/{p,q,r}
+-- a{b,c}{d,e}f
+-- {a,b,c,d}
+-- {a,b,c/{p,q,r},d}
+-- {a,b,c/{p,q,r}/d/{x,y,z}//}
+-- {a,b,c/{p,q/{x,y,z}},d/{p,q,r}}
+-- {a,b,c/{p,q/{x,y,z},w}v,d/{p,q,r}}
+
+-- this one is better and faster, but it took me a while to realize
+-- that this kind of replacement is cleaner than messy parsing and
+-- fuzzy concatenating we can probably gain a bit with selectively
+-- applying lpeg, but experiments with lpeg parsing this proved not to
+-- work that well; the parsing is ok, but dealing with the resulting
+-- table is a pain because we need to work inside-out recursively
+
+-- get rid of piecewise here, just a gmatch is ok
+
+function input.aux.splitpathexpr(str, t, validate)
+ -- no need for optimization, only called a few times, we can use lpeg for the sub
+ t = t or { }
+ local concat = table.concat
+ while true do
+ local done = false
+ while true do
+ local ok = false
+ str = str:gsub("([^{},]+){([^{}]-)}", function(a,b)
+ local t = { }
+ b:piecewise(",", function(s) t[#t+1] = a .. s end)
+ ok, done = true, true
+ return "{" .. concat(t,",") .. "}"
+ end)
+ if not ok then break end
+ end
+ while true do
+ local ok = false
+ str = str:gsub("{([^{}]-)}([^{},]+)", function(a,b)
+ local t = { }
+ a:piecewise(",", function(s) t[#t+1] = s .. b end)
+ ok, done = true, true
+ return "{" .. concat(t,",") .. "}"
+ end)
+ if not ok then break end
+ end
+ while true do
+ local ok = false
+ str = str:gsub("([,{]){([^{}]+)}([,}])", function(a,b,c)
+ ok, done = true, true
+ return a .. b .. c
+ end)
+ if not ok then break end
+ end
+ if not done then break end
+ end
+ while true do
+ local ok = false
+ str = str:gsub("{([^{}]-)}{([^{}]-)}", function(a,b)
+ local t = { }
+ a:piecewise(",", function(sa)
+ b:piecewise(",", function(sb)
+ t[#t+1] = sa .. sb
+ end)
+ end)
+ ok = true
+ return "{" .. concat(t,",") .. "}"
+ end)
+ if not ok then break end
+ end
+ while true do
+ local ok = false
+ str = str:gsub("{([^{}]-)}", function(a)
+ ok = true
+ return a
+ end)
+ if not ok then break end
+ end
+ if validate then
+ str:piecewise(",", function(s)
+ s = validate(s)
+ if s then t[#t+1] = s end
+ end)
+ else
+ str:piecewise(",", function(s)
+ t[#t+1] = s
+ end)
+ end
+ return t
+end
+
+function input.aux.expanded_path(instance,pathlist) -- maybe not a list, just a path
+ -- a previous version fed back into pathlist
+ local newlist, ok = { }, false
+ for _,v in ipairs(pathlist) do
+ if v:find("[{}]") then
+ ok = true
+ break
+ end
+ end
+ if ok then
+ for _, v in ipairs(pathlist) do
+ input.aux.splitpathexpr(v, newlist, function(s)
+ s = file.collapse_path(s)
+ return s ~= "" and not s:find(instance.dummy_path_expr) and s
+ end)
+ end
+ else
+ for _,v in ipairs(pathlist) do
+ for vv in string.gmatch(v..',',"(.-),") do
+ vv = file.collapse_path(v)
+ if vv ~= "" then newlist[#newlist+1] = vv end
+ end
+ end
+ end
+ return newlist
+end
+
+input.is_readable = { }
+
+function input.aux.is_readable(readable, name)
+ if input.trace > 2 then
+ if readable then
+ input.logger("+ readable", name)
+ else
+ input.logger("- readable", name)
+ end
+ end
+ return readable
+end
+
+function input.is_readable.file(name)
+ -- return input.aux.is_readable(file.is_readable(name), name)
+ return input.aux.is_readable(input.aux.is_file(name), name)
+end
+
+input.is_readable.tex = input.is_readable.file
+
+-- name
+-- name/name
+
+function input.aux.collect_files(instance,names)
+ local filelist = { }
+ for _, fname in pairs(names) do
+ if fname then
+ if input.trace > 2 then
+ input.logger("? blobpath asked",fname)
+ end
+ local bname = file.basename(fname)
+ local dname = file.dirname(fname)
+ if dname == "" or dname:find("^%.") then
+ dname = false
+ else
+ dname = "/" .. dname .. "$"
+ end
+ for _, hash in ipairs(instance.hashes) do
+ local blobpath = hash.tag
+ local files = blobpath and instance.files[blobpath]
+ if files then
+ if input.trace > 2 then
+ input.logger('? blobpath do',blobpath .. " (" .. bname ..")")
+ end
+ local blobfile = files[bname]
+ if not blobfile then
+ local rname = "remap:"..bname
+ blobfile = files[rname]
+ if blobfile then
+ bname = files[rname]
+ blobfile = files[bname]
+ end
+ end
+ if blobfile then
+ if type(blobfile) == 'string' then
+ if not dname or blobfile:find(dname) then
+ filelist[#filelist+1] = {
+ hash.type,
+ file.join(blobpath,blobfile,bname), -- search
+ input.concatinators[hash.type](blobpath,blobfile,bname) -- result
+ }
+ end
+ else
+ for _, vv in pairs(blobfile) do
+ if not dname or vv:find(dname) then
+ filelist[#filelist+1] = {
+ hash.type,
+ file.join(blobpath,vv,bname), -- search
+ input.concatinators[hash.type](blobpath,vv,bname) -- result
+ }
+ end
+ end
+ end
+ end
+ elseif input.trace > 1 then
+ input.logger('! blobpath no',blobpath .. " (" .. bname ..")" )
+ end
+ end
+ end
+ end
+ if #filelist > 0 then
+ return filelist
+ else
+ return nil
+ end
+end
+
+function input.suffix_of_format(str)
+ if input.suffixes[str] then
+ return input.suffixes[str][1]
+ else
+ return ""
+ end
+end
+
+function input.suffixes_of_format(str)
+ if input.suffixes[str] then
+ return input.suffixes[str]
+ else
+ return {}
+ end
+end
+
+do
+
+ -- called about 700 times for an empty doc (font initializations etc)
+ -- i need to weed the font files for redundant calls
+
+ local letter = lpeg.R("az","AZ")
+ local separator = lpeg.P("://")
+
+ local qualified = lpeg.P(".")^0 * lpeg.P("/") + letter*lpeg.P(":") + letter^1*separator
+ local rootbased = lpeg.P("/") + letter*lpeg.P(":")
+
+ -- ./name ../name /name c: ://
+ function input.aux.qualified_path(filename)
+ return qualified:match(filename)
+ end
+ function input.aux.rootbased_path(filename)
+ return rootbased:match(filename)
+ end
+
+ function input.normalize_name(original)
+ return original
+ end
+
+ input.normalize_name = file.collapse_path
+
+end
+
+function input.aux.register_in_trees(instance,name)
+ if not name:find("^%.") then
+ instance.foundintrees[name] = (instance.foundintrees[name] or 0) + 1 -- maybe only one
+ end
+end
+
+-- split the next one up, better for jit
+
+function input.aux.find_file(instance,filename) -- todo : plugin (scanners, checkers etc)
+ local result = { }
+ local stamp = nil
+ filename = input.normalize_name(filename) -- elsewhere
+ filename = file.collapse_path(filename:gsub("\\","/")) -- elsewhere
+ -- speed up / beware: format problem
+ if instance.remember then
+ stamp = filename .. "--" .. instance.engine .. "--" .. instance.progname .. "--" .. instance.format
+ if instance.found[stamp] then
+ input.logger('! remembered', filename)
+ return instance.found[stamp]
+ end
+ end
+ if filename:find('%*') then
+ input.logger('! wildcard', filename)
+ result = input.find_wildcard_files(instance,filename)
+ elseif input.aux.qualified_path(filename) then
+ if input.is_readable.file(filename) then
+ input.logger('! qualified', filename)
+ result = { filename }
+ else
+ local forcedname, ok = "", false
+ if file.extname(filename) == "" then
+ if instance.format == "" then
+ forcedname = filename .. ".tex"
+ if input.is_readable.file(forcedname) then
+ input.logger('! no suffix, forcing standard filetype tex')
+ result, ok = { forcedname }, true
+ end
+ else
+ for _, s in pairs(input.suffixes_of_format(instance.format)) do
+ forcedname = filename .. "." .. s
+ if input.is_readable.file(forcedname) then
+ input.logger('! no suffix, forcing format filetype', s)
+ result, ok = { forcedname }, true
+ break
+ end
+ end
+ end
+ end
+ if not ok then
+ input.logger('? qualified', filename)
+ end
+ end
+ else
+ -- search spec
+ local filetype, extra, done, wantedfiles, ext = '', nil, false, { }, file.extname(filename)
+ if ext == "" then
+ if not instance.force_suffixes then
+ wantedfiles[#wantedfiles+1] = filename
+ end
+ else
+ wantedfiles[#wantedfiles+1] = filename
+ end
+ if instance.format == "" then
+ if ext == "" then
+ local forcedname = filename .. '.tex'
+ wantedfiles[#wantedfiles+1] = forcedname
+ filetype = input.format_of_suffix(forcedname)
+ input.logger('! forcing filetype',filetype)
+ else
+ filetype = input.format_of_suffix(filename)
+ input.logger('! using suffix based filetype',filetype)
+ end
+ else
+ if ext == "" then
+ for _, s in pairs(input.suffixes_of_format(instance.format)) do
+ wantedfiles[#wantedfiles+1] = filename .. "." .. s
+ end
+ end
+ filetype = instance.format
+ input.logger('! using given filetype',filetype)
+ end
+ local typespec = input.variable_of_format(filetype)
+ local pathlist = input.expanded_path_list(instance,typespec)
+ if not pathlist or #pathlist == 0 then
+ -- no pathlist, access check only / todo == wildcard
+ if input.trace > 2 then
+ input.logger('? filename',filename)
+ input.logger('? filetype',filetype or '?')
+ input.logger('? wanted files',table.concat(wantedfiles," | "))
+ end
+ for _, fname in pairs(wantedfiles) do
+ if fname and input.is_readable.file(fname) then
+ filename, done = fname, true
+ result[#result+1] = file.join('.',fname)
+ break
+ end
+ end
+ -- this is actually 'other text files' or 'any' or 'whatever'
+ local filelist = input.aux.collect_files(instance,wantedfiles)
+ local fl = filelist and filelist[1]
+ if fl then
+ filename = fl[3]
+ result[#result+1] = filename
+ done = true
+ end
+ else
+ -- list search
+ local filelist = input.aux.collect_files(instance,wantedfiles)
+ local doscan, recurse
+ if input.trace > 2 then
+ input.logger('? filename',filename)
+ -- if pathlist then input.logger('? path list',table.concat(pathlist," | ")) end
+ -- if filelist then input.logger('? file list',table.concat(filelist," | ")) end
+ end
+ -- a bit messy ... esp the doscan setting here
+ for _, path in pairs(pathlist) do
+ if path:find("^!!") then doscan = false else doscan = true end
+ if path:find("//$") then recurse = true else recurse = false end
+ local pathname = path:gsub("^!+", '')
+ done = false
+ -- using file list
+ if filelist and not (done and not instance.allresults) and recurse then
+ -- compare list entries with permitted pattern
+ pathname = pathname:gsub("([%-%.])","%%%1") -- this also influences
+ pathname = pathname:gsub("/+$", '/.*') -- later usage of pathname
+ pathname = pathname:gsub("//", '/.-/') -- not ok for /// but harmless
+ local expr = "^" .. pathname
+ -- input.debug('?',expr)
+ for _, fl in ipairs(filelist) do
+ local f = fl[2]
+ if f:find(expr) then
+ -- input.debug('T',' '..f)
+ if input.trace > 2 then
+ input.logger('= found in hash',f)
+ end
+ --- todo, test for readable
+ result[#result+1] = fl[3]
+ input.aux.register_in_trees(instance,f) -- for tracing used files
+ done = true
+ if not instance.allresults then break end
+ else
+ -- input.debug('F',' '..f)
+ end
+ end
+ end
+ if not done and doscan then
+ -- check if on disk / unchecked / does not work at all / also zips
+ if input.method_is_file(pathname) then -- ?
+ local pname = pathname:gsub("%.%*$",'')
+ if not pname:find("%*") then
+ local ppname = pname:gsub("/+$","")
+ if input.aux.can_be_dir(instance,ppname) then
+ for _, w in pairs(wantedfiles) do
+ local fname = file.join(ppname,w)
+ if input.is_readable.file(fname) then
+ if input.trace > 2 then
+ input.logger('= found by scanning',fname)
+ end
+ result[#result+1] = fname
+ done = true
+ if not instance.allresults then break end
+ end
+ end
+ else
+ -- no access needed for non existing path, speedup (esp in large tree with lots of fake)
+ end
+ end
+ end
+ end
+ if not done and doscan then
+ -- todo: slow path scanning
+ end
+ if done and not instance.allresults then break end
+ end
+ end
+ end
+ for k,v in pairs(result) do
+ result[k] = file.collapse_path(v)
+ end
+ if instance.remember then
+ instance.found[stamp] = result
+ end
+ return result
+end
+
+input.aux._find_file_ = input.aux.find_file
+
+function input.aux.find_file(instance,filename) -- maybe make a lowres cache too
+ local result = input.aux._find_file_(instance,filename)
+ if #result == 0 then
+ local lowered = filename:lower()
+ if filename ~= lowered then
+ return input.aux._find_file_(instance,lowered)
+ end
+ end
+ return result
+end
+
+if lfs and lfs.isfile then
+ input.aux.is_file = lfs.isfile -- to be done: use this
+else
+ input.aux.is_file = file.is_readable
+end
+
+if lfs and lfs.isdir then
+ function input.aux.can_be_dir(instance,name)
+ if not instance.fakepaths[name] then
+ if lfs.isdir(name) then
+ instance.fakepaths[name] = 1 -- directory
+ else
+ instance.fakepaths[name] = 2 -- no directory
+ end
+ end
+ return (instance.fakepaths[name] == 1)
+ end
+else
+ function input.aux.can_be_dir()
+ return true
+ end
+end
+
+if not input.concatinators then input.concatinators = { } end
+
+input.concatinators.tex = file.join
+input.concatinators.file = input.concatinators.tex
+
+function input.find_files(instance,filename,filetype,mustexist)
+ if type(mustexist) == boolean then
+ -- all set
+ elseif type(filetype) == 'boolean' then
+ filetype, mustexist = nil, false
+ elseif type(filetype) ~= 'string' then
+ filetype, mustexist = nil, false
+ end
+ instance.format = filetype or ''
+ local t = input.aux.find_file(instance,filename,true)
+ instance.format = ''
+ return t
+end
+
+function input.find_file(instance,filename,filetype,mustexist)
+ return (input.find_files(instance,filename,filetype,mustexist)[1] or "")
+end
+
+function input.find_given_files(instance,filename)
+ local bname, result = file.basename(filename), { }
+ for k, hash in ipairs(instance.hashes) do
+ local files = instance.files[hash.tag]
+ local blist = files[bname]
+ if not blist then
+ local rname = "remap:"..bname
+ blist = files[rname]
+ if blist then
+ bname = files[rname]
+ blist = files[bname]
+ end
+ end
+ if blist then
+ if type(blist) == 'string' then
+ result[#result+1] = input.concatinators[hash.type](hash.tag,blist,bname) or ""
+ if not instance.allresults then break end
+ else
+ for kk,vv in pairs(blist) do
+ result[#result+1] = input.concatinators[hash.type](hash.tag,vv,bname) or ""
+ if not instance.allresults then break end
+ end
+ end
+ end
+ end
+ return result
+end
+
+function input.find_given_file(instance,filename)
+ return (input.find_given_files(instance,filename)[1] or "")
+end
+
+function input.find_wildcard_files(instance,filename) -- todo: remap:
+ local result = { }
+ local bname, dname = file.basename(filename), file.dirname(filename)
+ local path = dname:gsub("^*/","")
+ path = path:gsub("*",".*")
+ path = path:gsub("-","%%-")
+ if dname == "" then
+ path = ".*"
+ end
+ local name = bname
+ name = name:gsub("*",".*")
+ name = name:gsub("-","%%-")
+ path = path:lower()
+ name = name:lower()
+ local function doit(blist,bname,hash,allresults)
+ local done = false
+ if blist then
+ if type(blist) == 'string' then
+ -- make function and share code
+ if (blist:lower()):find(path) then
+ result[#result+1] = input.concatinators[hash.type](hash.tag,blist,bname) or ""
+ done = true
+ end
+ else
+ for kk,vv in pairs(blist) do
+ if (vv:lower()):find(path) then
+ result[#result+1] = input.concatinators[hash.type](hash.tag,vv,bname) or ""
+ done = true
+ if not allresults then break end
+ end
+ end
+ end
+ end
+ return done
+ end
+ local files, allresults, done = instance.files, instance.allresults, false
+ if name:find("%*") then
+ for k, hash in ipairs(instance.hashes) do
+ for kk, hh in pairs(files[hash.tag]) do
+ if not kk:find("^remap:") then
+ if (kk:lower()):find(name) then
+ if doit(hh,kk,hash,allresults) then done = true end
+ if done and not allresults then break end
+ end
+ end
+ end
+ end
+ else
+ for k, hash in ipairs(instance.hashes) do
+ if doit(files[hash.tag][bname],bname,hash,allresults) then done = true end
+ if done and not allresults then break end
+ end
+ end
+ return result
+end
+
+function input.find_wildcard_file(instance,filename)
+ return (input.find_wildcard_files(instance,filename)[1] or "")
+end
+
+-- main user functions
+
+function input.save_used_files_in_trees(instance, filename,jobname)
+ if not filename then filename = 'luatex.jlg' end
+ local f = io.open(filename,'w')
+ if f then
+ f:write("<?xml version='1.0' standalone='yes'?>\n")
+ f:write("<rl:job>\n")
+ if jobname then
+ f:write("\t<rl:name>" .. jobname .. "</rl:name>\n")
+ end
+ f:write("\t<rl:files>\n")
+ for _,v in pairs(table.sortedkeys(instance.foundintrees)) do
+ f:write("\t\t<rl:file n='" .. instance.foundintrees[v] .. "'>" .. v .. "</rl:file>\n")
+ end
+ f:write("\t</rl:files>\n")
+ f:write("</rl:usedfiles>\n")
+ f:close()
+ end
+end
+
+function input.automount(instance)
+ -- implemented later
+end
+
+function input.load(instance)
+ input.starttiming(instance)
+ input.resetconfig(instance)
+ input.identify_cnf(instance)
+ input.load_lua(instance)
+ input.expand_variables(instance)
+ input.load_cnf(instance)
+ input.expand_variables(instance)
+ input.load_hash(instance)
+ input.automount(instance)
+ input.stoptiming(instance)
+end
+
+function input.for_files(instance, command, files, filetype, mustexist)
+ if files and #files > 0 then
+ local function report(str)
+ if input.verbose then
+ input.report(str) -- has already verbose
+ else
+ print(str)
+ end
+ end
+ if input.verbose then
+ report('')
+ end
+ for _, file in pairs(files) do
+ local result = command(instance,file,filetype,mustexist)
+ if type(result) == 'string' then
+ report(result)
+ else
+ for _,v in pairs(result) do
+ report(v)
+ end
+ end
+ end
+ end
+end
+
+-- strtab
+
+function input.var_value(instance,str) -- output the value of variable $STRING.
+ return input.variable(instance,str)
+end
+function input.expand_var(instance,str) -- output variable expansion of STRING.
+ return input.expansion(instance,str)
+end
+function input.show_path(instance,str) -- output search path for file type NAME
+ return file.join_path(input.expanded_path_list(instance,input.format_of_var(str)))
+end
+
+-- input.find_file(filename)
+-- input.find_file(filename, filetype, mustexist)
+-- input.find_file(filename, mustexist)
+-- input.find_file(filename, filetype)
+
+function input.aux.register_file(files, name, path)
+ if files[name] then
+ if type(files[name]) == 'string' then
+ files[name] = { files[name], path }
+ else
+ files[name] = path
+ end
+ else
+ files[name] = path
+ end
+end
+
+if not input.finders then input.finders = { } end
+if not input.openers then input.openers = { } end
+if not input.loaders then input.loaders = { } end
+
+input.finders.notfound = { nil }
+input.openers.notfound = { nil }
+input.loaders.notfound = { false, nil, 0 }
+
+function input.splitmethod(filename)
+ if not filename then
+ return { } -- safeguard
+ elseif type(filename) == "table" then
+ return filename -- already split
+ elseif not filename:find("://") then
+ return { scheme="file", path = filename, original=filename } -- quick hack
+ else
+ return url.hashed(filename)
+ end
+end
+
+function input.method_is_file(filename)
+ return input.splitmethod(filename).scheme == 'file'
+end
+
+function table.sequenced(t,sep) -- temp here
+ local s = { }
+ for k, v in pairs(t) do
+ s[#s+1] = k .. "=" .. v
+ end
+ return table.concat(s, sep or " | ")
+end
+
+function input.methodhandler(what, instance, filename, filetype) -- ...
+ local specification = (type(filename) == "string" and input.splitmethod(filename)) or filename -- no or { }, let it bomb
+ local scheme = specification.scheme
+ if input[what][scheme] then
+ input.logger('= handler',specification.original .." -> " .. what .. " -> " .. table.sequenced(specification))
+ return input[what][scheme](instance,filename,filetype) -- todo: specification
+ else
+ return input[what].tex(instance,filename,filetype) -- todo: specification
+ end
+end
+
+-- also inside next test?
+
+function input.findtexfile(instance, filename, filetype)
+ return input.methodhandler('finders',instance, input.normalize_name(filename), filetype)
+end
+function input.opentexfile(instance,filename)
+ return input.methodhandler('openers',instance, input.normalize_name(filename))
+end
+
+function input.findbinfile(instance, filename, filetype)
+ return input.methodhandler('finders',instance, input.normalize_name(filename), filetype)
+end
+function input.openbinfile(instance,filename)
+ return input.methodhandler('loaders',instance, input.normalize_name(filename))
+end
+
+function input.loadbinfile(instance, filename, filetype)
+ local fname = input.findbinfile(instance, input.normalize_name(filename), filetype)
+ if fname and fname ~= "" then
+ return input.openbinfile(instance,fname)
+ else
+ return unpack(input.loaders.notfound)
+ end
+end
+
+function input.texdatablob(instance, filename, filetype)
+ local ok, data, size = input.loadbinfile(instance, filename, filetype)
+ return data or ""
+end
+
+input.loadtexfile = input.texdatablob
+
+function input.openfile(filename) -- brrr texmf.instance here / todo ! ! ! ! !
+ local fullname = input.findtexfile(texmf.instance, filename)
+ if fullname and (fullname ~= "") then
+ return input.opentexfile(texmf.instance, fullname)
+ else
+ return nil
+ end
+end
+
+function input.logmode()
+ return (os.getenv("MTX.LOG.MODE") or os.getenv("MTX_LOG_MODE") or "tex"):lower()
+end
+
+-- this is a prelude to engine/progname specific configuration files
+-- in which case we can omit files meant for other programs and
+-- packages
+
+--- ctx
+
+-- maybe texinputs + font paths
+-- maybe positive selection tex/context fonts/tfm|afm|vf|opentype|type1|map|enc
+
+input.validators = { }
+input.validators.visibility = { }
+
+function input.validators.visibility.default(path, name)
+ return true
+end
+
+function input.validators.visibility.context(path, name)
+ path = path[1] or path -- some day a loop
+ return not (
+ path:find("latex") or
+-- path:find("doc") or
+ path:find("tex4ht") or
+ path:find("source") or
+-- path:find("config") or
+-- path:find("metafont") or
+ path:find("lists$") or
+ name:find("%.tpm$") or
+ name:find("%.bak$")
+ )
+end
+
+-- todo: describe which functions are public (maybe input.private. ... )
+
+-- beware: i need to check where we still need a / on windows:
+
+function input.clean_path(str)
+--~ return (((str:gsub("\\","/")):gsub("^!+","")):gsub("//+","//"))
+ if str then
+ return ((str:gsub("\\","/")):gsub("^!+",""))
+ else
+ return nil
+ end
+end
+
+function input.do_with_path(name,func)
+ for _, v in pairs(input.expanded_path_list(instance,name)) do
+ func("^"..input.clean_path(v))
+ end
+end
+
+function input.do_with_var(name,func)
+ func(input.aux.expanded_var(name))
+end
+
+function input.with_files(instance,pattern,handle)
+ for _, hash in ipairs(instance.hashes) do
+ local blobpath = hash.tag
+ local blobtype = hash.type
+ if blobpath then
+ local files = instance.files[blobpath]
+ if files then
+ for k,v in pairs(files) do
+ if k:find("^remap:") then
+ k = files[k]
+ v = files[k] -- chained
+ end
+ if k:find(pattern) then
+ if type(v) == "string" then
+ handle(blobtype,blobpath,v,k)
+ else
+ for _,vv in pairs(v) do
+ handle(blobtype,blobpath,vv,k)
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+end
+
+--~ function input.update_script(oldname,newname) -- oldname -> own.name, not per se a suffix
+--~ newname = file.addsuffix(newname,"lua")
+--~ local newscript = input.clean_path(input.find_file(instance, newname))
+--~ local oldscript = input.clean_path(oldname)
+--~ input.report("old script", oldscript)
+--~ input.report("new script", newscript)
+--~ if oldscript ~= newscript and (oldscript:find(file.removesuffix(newname).."$") or oldscript:find(newname.."$")) then
+--~ local newdata = io.loaddata(newscript)
+--~ if newdata then
+--~ input.report("old script content replaced by new content")
+--~ io.savedata(oldscript,newdata)
+--~ end
+--~ end
+--~ end
+
+function input.update_script(instance,oldname,newname) -- oldname -> own.name, not per se a suffix
+ local scriptpath = "scripts/context/lua"
+ newname = file.addsuffix(newname,"lua")
+ local oldscript = input.clean_path(oldname)
+ input.report("to be replaced old script", oldscript)
+ local newscripts = input.find_files(instance, newname) or { }
+ if #newscripts == 0 then
+ input.report("unable to locate new script")
+ else
+ for _, newscript in ipairs(newscripts) do
+ newscript = input.clean_path(newscript)
+ input.report("checking new script", newscript)
+ if oldscript == newscript then
+ input.report("old and new script are the same")
+ elseif not newscript:find(scriptpath) then
+ input.report("new script should come from",scriptpath)
+ elseif not (oldscript:find(file.removesuffix(newname).."$") or oldscript:find(newname.."$")) then
+ input.report("invalid new script name")
+ else
+ local newdata = io.loaddata(newscript)
+ if newdata then
+ input.report("old script content replaced by new content")
+ io.savedata(oldscript,newdata)
+ break
+ else
+ input.report("unable to load new script")
+ end
+ end
+ end
+ end
+end
+
+
+--~ print(table.serialize(input.aux.splitpathexpr("/usr/share/texmf-{texlive,tetex}", {})))
+
+-- command line resolver:
+
+--~ print(input.resolve("abc env:tmp file:cont-en.tex path:cont-en.tex full:cont-en.tex rel:zapf/one/p-chars.tex"))
+
+do
+
+ local resolvers = { }
+
+ resolvers.environment = function(instance,str)
+ return input.clean_path(os.getenv(str) or os.getenv(str:upper()) or os.getenv(str:lower()) or "")
+ end
+ resolvers.relative = function(instance,str,n)
+ if io.exists(str) then
+ -- nothing
+ elseif io.exists("./" .. str) then
+ str = "./" .. str
+ else
+ local p = "../"
+ for i=1,n or 2 do
+ if io.exists(p .. str) then
+ str = p .. str
+ break
+ else
+ p = p .. "../"
+ end
+ end
+ end
+ return input.clean_path(str)
+ end
+ resolvers.locate = function(instance,str)
+ local fullname = input.find_given_file(instance,str) or ""
+ return input.clean_path((fullname ~= "" and fullname) or str)
+ end
+ resolvers.filename = function(instance,str)
+ local fullname = input.find_given_file(instance,str) or ""
+ return input.clean_path(file.basename((fullname ~= "" and fullname) or str))
+ end
+ resolvers.pathname = function(instance,str)
+ local fullname = input.find_given_file(instance,str) or ""
+ return input.clean_path(file.dirname((fullname ~= "" and fullname) or str))
+ end
+
+ resolvers.env = resolvers.environment
+ resolvers.rel = resolvers.relative
+ resolvers.loc = resolvers.locate
+ resolvers.kpse = resolvers.locate
+ resolvers.full = resolvers.locate
+ resolvers.file = resolvers.filename
+ resolvers.path = resolvers.pathname
+
+ local function resolve(instance,str)
+ if type(str) == "table" then
+ for k, v in pairs(str) do
+ str[k] = resolve(instance,v) or v
+ end
+ elseif str and str ~= "" then
+ str = str:gsub("([a-z]+):([^ ]+)", function(method,target)
+ if resolvers[method] then
+ return resolvers[method](instance,target)
+ else
+ return method .. ":" .. target
+ end
+ end)
+ end
+ return str
+ end
+
+ input.resolve = resolve
+
+end
diff --git a/Master/texmf-dist/tex/context/base/luat-iop.lua b/Master/texmf-dist/tex/context/base/luat-iop.lua
new file mode 100644
index 00000000000..469b7c03435
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/luat-iop.lua
@@ -0,0 +1,157 @@
+-- filename : luat-iop.lua
+-- comment : companion to luat-lib.tex
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+-- this paranoid stuff in web2c ... we cannot hook checks into the
+-- input functions because one can always change the callback but
+-- we can feed back specific patterns and paths into the next
+-- mechanism
+
+if not versions then versions = { } end versions['luat-exe'] = 1.001
+
+if not io.inp then io.inp = { } end
+if not io.out then io.out = { } end
+
+io.inp.blocked = { }
+io.out.blocked = { }
+io.inp.permitted = { }
+io.out.permitted = { }
+io.inp.modes = { } -- functions
+io.out.modes = { } -- functions
+
+io.blocked_openers = { } -- *.open(name,method)
+
+function io.inp.inhibit (name) table.insert(io.inp.blocked, name) end
+function io.out.inhibit (name) table.insert(io.out.blocked, name) end
+function io.inp.permit (name) table.insert(io.inp.permitted, name) end
+function io.out.permit (name) table.insert(io.out.permitted, name) end
+
+function io.register_opener(func) table.insert(io.blocked_openers, func) end
+
+function io.finalize_openers(func)
+ if (#io.out.blocked > 0) or (#io.inp.blocked > 0) then
+ do
+ local open = func
+ local out_permitted = io.out.permitted
+ local inp_permitted = io.inp.permitted
+ local out_blocked = io.out.blocked
+ local inp_blocked = io.inp.blocked
+ return function(name,method)
+ local function checked(blocked, permitted)
+ local n = string.lower(name)
+ for _,b in pairs(blocked) do
+ if string.find(n,b) then
+ for _,p in pairs(permitted) do
+ if string.find(n,p) then
+ return true
+ end
+ end
+ return false
+ end
+ end
+ return true
+ end
+ if method and string.find(method,'[wa]') then
+ if #out.blocked > 0 then
+ if not checked(out_blocked, out_permitted) then
+ -- print("writing to " .. name .. " is not permitted")
+ return nil
+ end
+ end
+ else
+ if #inp.blocked > 0 then
+ if not checked(inp_blocked, inp_permitted) then
+ -- print("reading from " .. name .. " is not permitted")
+ return nil
+ end
+ end
+ end
+ return open(name,method)
+ end
+ end
+ else
+ return func
+ end
+end
+
+--~ io.inp.inhibit('^%.')
+--~ io.inp.inhibit('^/etc')
+--~ io.inp.inhibit('/windows/')
+--~ io.inp.inhibit('/winnt/')
+--~ io.inp.permit('c:/windows/wmsetup.log')
+
+--~ io.open = io.finalize_openers(io.open)
+
+--~ f = io.open('.tex') print(f)
+--~ f = io.open('tufte.tex') print(f)
+--~ f = io.open('t:/sources/tufte.tex') print(f)
+--~ f = io.open('/etc/passwd') print(f)
+--~ f = io.open('c:/windows/crap.log') print(f)
+--~ f = io.open('c:/windows/wmsetup.log') print(f)
+
+function io.set_opener_modes(i,o)
+ for _,v in pairs({'inp','out'}) do
+ if io[v][i] then
+ io[v][i]()
+ elseif io[v][string.sub(i,1,1)] then
+ io[v][string.sub(i,1,1)]()
+ end
+ end
+ io.open = io.finalize_openers(io.open)
+end
+
+function io.set_opener_modes(i,o)
+ local f
+ for _,v in pairs({'inp','out'}) do
+ f = io[v][i] or io[v][string.sub(i,1,1)]
+ if f then f() end
+ end
+ io.open = io.finalize_openers(io.open)
+end
+
+-- restricted
+
+function io.inp.modes.restricted()
+ io.inp.inhibit('^%.[%a]')
+end
+function io.out.modes.restricted()
+ io.out.inhibit('^%.[%a]')
+end
+
+-- paranoid
+
+function io.inp.modes.paranoid()
+ io.inp.inhibit('.*')
+ io.inp.inhibit('%.%.')
+ io.inp.permit('^%./')
+ io.inp.permit('[^/]')
+ input.do_with_path('TEXMF',io.inp.permit)
+end
+function io.out.modes.paranoid()
+ io.out.inhibit('.*')
+ input.do_with_path('TEXMFOUTPUT',io.out.permit)
+end
+
+-- handy
+
+function io.inp.modes.handy()
+ io.inp.inhibit('%.%.')
+ if os.platform == 'linux' then
+ io.inp.inhibit('^/etc')
+ else
+ io.inp.inhibit('/windows/')
+ io.inp.inhibit('/winnt/')
+ end
+end
+function io.out.modes.handy()
+ io.out.inhibit('.*')
+ io.out.permit('%./')
+ io.out.permit('^%./')
+ io.out.permit('[^/]')
+end
+
+--~ io.set_opener_modes('p','p')
+--~ io.set_opener_modes('r','r')
+--~ io.set_opener_modes('h','h')
diff --git a/Master/texmf-dist/tex/context/base/luat-kps.lua b/Master/texmf-dist/tex/context/base/luat-kps.lua
new file mode 100644
index 00000000000..15dadbb8495
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/luat-kps.lua
@@ -0,0 +1,102 @@
+if not modules then modules = { } end modules ['luat-kps'] = {
+ version = 1.001,
+ comment = "companion to luatools.lua",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+--[[ldx--
+<p>This file is used when we want the input handlers to behave like
+<type>kpsewhich</type>. What to do with the following:</p>
+
+<typing>
+{$SELFAUTOLOC,$SELFAUTODIR,$SELFAUTOPARENT}{,{/share,}/texmf{-local,}/web2c}
+$SELFAUTOLOC : /usr/tex/bin/platform
+$SELFAUTODIR : /usr/tex/bin
+$SELFAUTOPARENT : /usr/tex
+</typing>
+
+<p>How about just forgetting abou them?</p>
+--ldx]]--
+
+input = input or { }
+input.suffixes = input.suffixes or { }
+input.formats = input.formats or { }
+
+input.suffixes['gf'] = { '<resolution>gf' }
+input.suffixes['pk'] = { '<resolution>pk' }
+input.suffixes['base'] = { 'base' }
+input.suffixes['bib'] = { 'bib' }
+input.suffixes['bst'] = { 'bst' }
+input.suffixes['cnf'] = { 'cnf' }
+input.suffixes['mem'] = { 'mem' }
+input.suffixes['mf'] = { 'mf' }
+input.suffixes['mfpool'] = { 'pool' }
+input.suffixes['mft'] = { 'mft' }
+input.suffixes['mppool'] = { 'pool' }
+input.suffixes['graphic/figure'] = { 'eps', 'epsi' }
+input.suffixes['texpool'] = { 'pool' }
+input.suffixes['PostScript header'] = { 'pro' }
+input.suffixes['ist'] = { 'ist' }
+input.suffixes['web'] = { 'web', 'ch' }
+input.suffixes['cweb'] = { 'w', 'web', 'ch' }
+input.suffixes['cmap files'] = { 'cmap' }
+input.suffixes['lig files'] = { 'lig' }
+input.suffixes['bitmap font'] = { }
+input.suffixes['MetaPost support'] = { }
+input.suffixes['TeX system documentation'] = { }
+input.suffixes['TeX system sources'] = { }
+input.suffixes['dvips config'] = { }
+input.suffixes['type42 fonts'] = { }
+input.suffixes['web2c files'] = { }
+input.suffixes['other text files'] = { }
+input.suffixes['other binary files'] = { }
+input.suffixes['opentype fonts'] = { 'otf' }
+
+input.suffixes['fmt'] = { 'fmt' }
+input.suffixes['texmfscripts'] = { 'rb','lua','py','pl' }
+
+input.suffixes['pdftex config'] = { }
+input.suffixes['Troff fonts'] = { }
+
+input.suffixes['ls-R'] = { }
+
+--[[ldx--
+<p>If you wondered abou tsome of the previous mappings, how about
+the next bunch:</p>
+--ldx]]--
+
+input.formats['bib'] = ''
+input.formats['bst'] = ''
+input.formats['mft'] = ''
+input.formats['ist'] = ''
+input.formats['web'] = ''
+input.formats['cweb'] = ''
+input.formats['MetaPost support'] = ''
+input.formats['TeX system documentation'] = ''
+input.formats['TeX system sources'] = ''
+input.formats['Troff fonts'] = ''
+input.formats['dvips config'] = ''
+input.formats['graphic/figure'] = ''
+input.formats['ls-R'] = ''
+input.formats['other text files'] = ''
+input.formats['other binary files'] = ''
+
+input.formats['gf'] = ''
+input.formats['pk'] = ''
+input.formats['base'] = 'MFBASES'
+input.formats['cnf'] = ''
+input.formats['mem'] = 'MPMEMS'
+input.formats['mf'] = 'MFINPUTS'
+input.formats['mfpool'] = 'MFPOOL'
+input.formats['mppool'] = 'MPPOOL'
+input.formats['texpool'] = 'TEXPOOL'
+input.formats['PostScript header'] = 'TEXPSHEADERS'
+input.formats['cmap files'] = 'CMAPFONTS'
+input.formats['type42 fonts'] = 'T42FONTS'
+input.formats['web2c files'] = 'WEB2C'
+input.formats['pdftex config'] = 'PDFTEXCONFIG'
+input.formats['texmfscripts'] = 'TEXMFSCRIPTS'
+input.formats['bitmap font'] = ''
+input.formats['lig files'] = 'LIGFONTS'
diff --git a/Master/texmf-dist/tex/context/base/luat-lib.lua b/Master/texmf-dist/tex/context/base/luat-lib.lua
new file mode 100644
index 00000000000..c3c66f7d89b
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/luat-lib.lua
@@ -0,0 +1,160 @@
+-- filename : luat-lib.lua
+-- comment : companion to luat-lib.tex
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+if not versions then versions = { } end versions['luat-lib'] = 1.001
+
+-- mostcode moved to the l-*.lua and other luat-*.lua files
+
+-- os / io
+
+os.setlocale(nil,nil) -- useless feature and even dangerous in luatex
+
+-- os.platform
+
+-- mswin|bccwin|mingw|cygwin windows
+-- darwin|rhapsody|nextstep macosx
+-- netbsd|unix unix
+-- linux linux
+
+if not io.fileseparator then
+ if string.find(os.getenv("PATH"),";") then
+ io.fileseparator, io.pathseparator, os.platform = "\\", ";", os.type or "windows"
+ else
+ io.fileseparator, io.pathseparator, os.platform = "/" , ":", os.type or "unix"
+ end
+end
+
+os.platform = os.platform or os.type or (io.pathseparator == ";" and "windows") or "unix"
+
+-- arg normalization
+--
+-- for k,v in pairs(arg) do print(k,v) end
+
+-- environment
+
+if not environment then environment = { } end
+
+environment.ownbin = environment.ownbin or arg[-2] or arg[-1] or arg[0] or "luatex"
+
+local ownpath = nil -- we could use a metatable here
+
+function environment.ownpath()
+ if not ownpath then
+ for p in string.gmatch(os.getenv("PATH"),"[^"..io.pathseparator.."]+") do
+ local b = file.join(p,environment.ownbin)
+ if lfs.isfile(b..".exe") or lfs.isfile(b) then
+ ownpath = p
+ break
+ end
+ end
+ if not ownpath then ownpath = '.' end
+ end
+ return ownpath
+end
+
+if arg and (arg[0] == 'luatex' or arg[0] == 'luatex.exe') and arg[1] == "--luaonly" then
+ arg[-1]=arg[0] arg[0]=arg[2] for k=3,#arg do arg[k-2]=arg[k] end arg[#arg]=nil arg[#arg]=nil
+end
+
+environment.arguments = { }
+environment.files = { }
+environment.sorted_argument_keys = nil
+
+environment.platform = os.platform
+
+function environment.initialize_arguments(arg)
+ environment.arguments = { }
+ environment.files = { }
+ environment.sorted_argument_keys = nil
+ for index, argument in pairs(arg) do
+ if index > 0 then
+ local flag, value = argument:match("^%-+(.+)=(.-)$")
+ if flag then
+ environment.arguments[flag] = string.unquote(value or "")
+ else
+ flag = argument:match("^%-+(.+)")
+ if flag then
+ environment.arguments[flag] = true
+ else
+ environment.files[#environment.files+1] = argument
+ end
+ end
+ end
+ end
+ environment.ownname = environment.ownname or arg[0] or 'unknown.lua'
+end
+
+function environment.showarguments()
+ for k,v in pairs(environment.arguments) do
+ print(k .. " : " .. tostring(v))
+ end
+ if #environment.files > 0 then
+ print("files : " .. table.concat(environment.files, " "))
+ end
+end
+
+function environment.setargument(name,value)
+ environment.arguments[name] = value
+end
+
+function environment.argument(name)
+ if environment.arguments[name] then
+ return environment.arguments[name]
+ else
+ if not environment.sorted_argument_keys then
+ environment.sorted_argument_keys = { }
+ for _,v in pairs(table.sortedkeys(environment.arguments)) do
+ table.insert(environment.sorted_argument_keys, "^" .. v)
+ end
+ end
+ for _,v in pairs(environment.sorted_argument_keys) do
+ if name:find(v) then
+ return environment.arguments[v:sub(2,#v)]
+ end
+ end
+ end
+ return nil
+end
+
+function environment.split_arguments(separator) -- rather special, cut-off before separator
+ local done, before, after = false, { }, { }
+ for _,v in ipairs(environment.original_arguments) do
+ if not done and v == separator then
+ done = true
+ elseif done then
+ after[#after+1] = v
+ else
+ before[#before+1] = v
+ end
+ end
+ return before, after
+end
+
+function environment.reconstruct_commandline(arg)
+ if not arg then arg = environment.original_arguments end
+ local result = { }
+ for _,a in ipairs(arg) do -- ipairs 1 .. #n
+ local kk, vv = a:match("^(%-+.-)=(.+)$")
+ if kk and vv then
+ if vv:find(" ") then
+ result[#result+1] = kk .. "=" .. string.quote(vv)
+ else
+ result[#result+1] = a
+ end
+ elseif a:find(" ") then
+ result[#result+1] = string.quote(a)
+ else
+ result[#result+1] = a
+ end
+ end
+ return table.join(result," ")
+end
+
+if arg then
+ environment.initialize_arguments(arg)
+ environment.original_arguments = arg
+ arg = { } -- prevent duplicate handling
+end
diff --git a/Master/texmf-dist/tex/context/base/luat-lib.tex b/Master/texmf-dist/tex/context/base/luat-lib.tex
new file mode 100644
index 00000000000..a068125b675
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/luat-lib.tex
@@ -0,0 +1,90 @@
+%D \module
+%D [ file=luat-lib,
+%D version=2006.09.11,
+%D title=\CONTEXT\ Lua Macros,
+%D subtitle=Unicode Support,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright=PRAGMA]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+% \writestatus{loading}{Lua Support Macros (libs)}
+
+%D For the moment we only load this lib.
+
+%D This will move cq. become configurable. The XML like output is just
+%D an example.
+
+% todo \let\normaleverytoks\everytoks \newtoks\everytoke \normaleverytoks{\the\everytoks}
+
+\chardef\statuswidth=15
+\chardef\statuswrite=16
+
+\newtoks\everywritestring
+
+\def\writedirect {\immediate\write\statuswrite}
+\def\writeline {\writedirect{}}
+\def\writestring#1{\begingroup\the\everywritestring\writedirect{#1}\endgroup}
+
+\ifx\normalmessage \undefined \let\normalmessage \message \fi
+\ifx\normalwritestatus\undefined \def\normalwritestatus#1#2{\writedirect{#1 : #2}} \fi
+
+% this will change once we have proper write overloads
+
+\registerctxluafile{l-string} {1.001}
+\registerctxluafile{l-lpeg} {1.001}
+\registerctxluafile{l-boolean}{1.001}
+\registerctxluafile{l-number} {1.001}
+\registerctxluafile{l-set} {1.001}
+\registerctxluafile{l-math} {1.001}
+\registerctxluafile{l-table} {1.001}
+\registerctxluafile{l-md5} {1.001}
+\registerctxluafile{l-aux} {1.001}
+\registerctxluafile{l-io} {1.001}
+\registerctxluafile{l-os} {1.001}
+\registerctxluafile{l-file} {1.001}
+\registerctxluafile{l-dir} {1.001}
+\registerctxluafile{l-unicode}{1.001}
+\registerctxluafile{l-utils} {1.001}
+\registerctxluafile{l-tex} {1.001}
+\registerctxluafile{l-url} {1.001}
+\registerctxluafile{l-xml} {1.001}
+%registerctxluafile{l-xmlctx} {1.001}
+
+\registerctxluafile{luat-cbk} {1.001}
+\registerctxluafile{luat-lib} {1.001}
+\registerctxluafile{luat-inp} {1.001}
+\registerctxluafile{luat-log} {1.001}
+\registerctxluafile{luat-zip} {1.001}
+\registerctxluafile{luat-tex} {1.001}
+\registerctxluafile{luat-tre} {1.001}
+
+\startruntimeluacode
+ \edef\asciia{\ctxlua{tex.sprint(input.logmode())}}
+ \edef\asciib{xml}
+ \ifx\asciia\asciib % brrr
+ \long\def\writebanner #1{\writestring {<m t='banner'>#1</m>}}
+ \long\def\writestatus#1#2{\writestring {<m t='#1'>#2</m>}}
+ \long\def\message #1{\normalmessage{<m t='message'>#1</m>}}
+ \else
+ \let\writebanner\writestring
+ \let\writestatus\normalwritestatus
+ \let\message \normalmessage
+ \fi
+\stopruntimeluacode
+
+\registerctxluafile{luat-tmp}{1.001}
+\registerctxluafile{luat-crl}{1.001}
+\registerctxluafile{luat-exe}{1.001}
+\registerctxluafile{luat-iop}{1.001}
+
+% trace used files (only from trees)
+%
+% \ctxlua{input.register_stop_actions(function() input.save_used_files_in_trees(texmf.instance) end)}
+% \ctxlua{table.insert(input.stop_actions, function() input.save_used_files_in_trees(texmf.instance) end)}
+% \ctxlua{function input.stop_actions.trace_used_files() input.save_used_files_in_trees(texmf.instance) end}
+
+\endinput
diff --git a/Master/texmf-dist/tex/context/base/luat-lmx.lua b/Master/texmf-dist/tex/context/base/luat-lmx.lua
new file mode 100644
index 00000000000..626482e6a95
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/luat-lmx.lua
@@ -0,0 +1,141 @@
+-- filename : luat-lmx.lua
+-- comment : companion to luat-lmx.tex
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+if not versions then versions = { } end versions['luat-mlx'] = 1.001
+
+-- we can now use l-xml, and we can also use lpeg
+
+lmx = { }
+
+lmx.escapes = {
+ ['&'] = '&amp;',
+ ['<'] = '&lt;',
+ ['>'] = '&gt;',
+ ['"'] = '&quot;'
+}
+
+-- local function p -> ends up in lmx.p, so we need to cast
+
+lmx.variables = { }
+
+lmx.variables['title-default'] = 'LMX File'
+lmx.variables['title'] = lmx.variables['title-default']
+
+-- demonstrates: local, *all, gsub using tables, nil or value, loadstring
+
+function lmx.loadedfile(filename)
+ return input.texdatablob(texmf.instance, filename)
+end
+
+lmx.converting = false
+
+function lmx.convert(template,result) -- todo: use lpeg instead
+ if not lmx.converting then -- else, if error then again tex error and loop
+ local data = input.texdatablob(texmf.instance, template)
+ local f = false
+ if result then
+ f = io.open(result,"w")
+ function lmx.print(str) f:write(str) end
+ else
+ lmx.print = io.write
+ end
+ function lmx.variable(str)
+ return lmx.variables[str] or ""
+ end
+ function lmx.escape(str)
+ return string.gsub(str:gsub('&','&amp;'),'[<>"]',lmx.escapes)
+ end
+ function lmx.type(str)
+ if str then lmx.print("<tt>" .. lmx.escape(str) .. "</tt>") end
+ end
+ function lmx.pv(str)
+ lmx.print(lmx.variable(str))
+ end
+ function lmx.tv(str)
+ lmx.type(lmx.variable(str))
+ end
+ data = data:gsub("<%?lmx%-include%s+(.-)%s-%?>", function(filename)
+ return lmx.loadedfile(filename)
+ end)
+ local definitions = { }
+ data = data:gsub("<%?lmx%-define%-begin%s+(%S-)%s-%?>(.-)<%?lmx%-define%-end%s-%?>", function(tag,content)
+ definitions[tag] = content
+ return ""
+ end)
+ data = data:gsub("<%?lmx%-resolve%s+(%S-)%s-%?>", function(tag)
+ return definitions[tag] or ""
+ end)
+ data = data:gsub("%c%s-(<%?lua .-%?>)%s-%c", function(lua)
+ return "\n" .. lua .. " "
+ end)
+ data = string.gsub(data .. "<?lua ?>","(.-)<%?lua%s+(.-)%?>", function(txt, lua)
+ txt = txt:gsub("%c+", "\\n")
+ txt = txt:gsub('"' , '\\"')
+ txt = txt:gsub("'" , "\\'")
+ -- txt = string.gsub(txt, "([\'\"])", { ["'"] = '\\"', ['"'] = "\\'" } )
+ return "p(\"" .. txt .. "\")\n" .. lua .. "\n"
+ end)
+ lmx.converting = true
+ data = "local p,v,e,t,pv,tv = lmx.print,lmx.variable,lmx.escape,lmx.type,lmx.pv,lmx.tv " .. data
+ assert(loadstring(data))()
+ lmx.converting = false
+ if f then
+ f:close()
+ end
+ end
+end
+
+-- these can be overloaded; we assume that the os handles filename associations
+
+lmx.lmxfile = function(filename) return filename end
+lmx.htmfile = function(filename) return filename end
+
+if environment.platform == "windows" then
+ lmx.popupfile = function(filename) os.execute("start " .. filename) end
+else
+ lmx.popupfile = function(filename) os.execute(filename) end
+end
+
+function lmx.show(name)
+ local lmxfile = lmx.lmxfile(name)
+ local htmfile = lmx.htmfile(name)
+ if lmxfile == htmfile then
+ htmfile = string.gsub(lmxfile, "%.%a+$", "html")
+ end
+ lmx.convert(lmxfile, htmfile)
+ lmx.popupfile(htmfile)
+end
+
+-- kind of private
+
+lmx.restorables = { }
+
+function lmx.set(key, value)
+ if not lmx.restorables[key] then
+ table.insert(lmx.restorables, key)
+ lmx.variables['@@' .. key] = lmx.variables[key]
+ end
+ lmx.variables[key] = value
+end
+
+function lmx.get(key)
+ return lmx.variables[key] or ""
+end
+
+function lmx.restore()
+ for _,key in pairs(lmx.restorables) do
+ lmx.variables[key] = lmx.variables['@@' .. key]
+ end
+ lmx.restorables = { }
+end
+
+-- command line
+
+if arg then
+ if arg[1] == "--show" then if arg[2] then lmx.show (arg[2]) end
+ elseif arg[1] == "--convert" then if arg[2] then lmx.convert(arg[2], arg[3] or "temp.html") end
+ end
+end
diff --git a/Master/texmf-dist/tex/context/base/luat-lmx.tex b/Master/texmf-dist/tex/context/base/luat-lmx.tex
new file mode 100644
index 00000000000..cc7fa448f53
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/luat-lmx.tex
@@ -0,0 +1,16 @@
+%D \module
+%D [ file=luat-lmx,
+%D version=2005.09.02,
+%D title=\CONTEXT\ Lua Macros,
+%D subtitle=LMX Support,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright=PRAGMA]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{Lua Support Macros (lmx)}
+
+\registerctxluafile{luat-lmx}{1.001}
diff --git a/Master/texmf-dist/tex/context/base/luat-log.lua b/Master/texmf-dist/tex/context/base/luat-log.lua
new file mode 100644
index 00000000000..12cf45c481b
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/luat-log.lua
@@ -0,0 +1,128 @@
+if not modules then modules = { } end modules ['luat-log'] = {
+ version = 1.001,
+ comment = "companion to luat-lib.tex",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+--[[ldx--
+<p>This is a prelude to a more extensive logging module. For the sake
+of parsing log files, in addition to the standard logging we will
+provide an <l n='xml'/> structured file. Actually, any logging that
+is hooked into callbacks will be \XML\ by default.</p>
+--ldx]]--
+
+input = input or { }
+logs = logs or { }
+
+--[[ldx--
+<p>This looks pretty ugly but we need to speed things up a bit.</p>
+--ldx]]--
+
+logs.levels = {
+ ['error'] = 1,
+ ['warning'] = 2,
+ ['info'] = 3,
+ ['debug'] = 4
+}
+
+logs.functions = {
+ 'error', 'warning', 'info', 'debug', 'report',
+ 'start', 'stop', 'push', 'pop'
+}
+
+logs.callbacks = {
+ 'start_page_number',
+ 'stop_page_number',
+ 'report_output_pages',
+ 'report_output_log'
+}
+
+logs.xml = logs.xml or { }
+logs.tex = logs.tex or { }
+
+logs.level = 0
+
+do
+ local write_nl, write, format = texio.write_nl or print, texio.write or io.write, string.format
+
+ if texlua then
+ write_nl = print
+ write = io.write
+ end
+
+ function logs.xml.debug(category,str)
+ if logs.level > 3 then write_nl(format("<d category='%s'>%s</d>",category,str)) end
+ end
+ function logs.xml.info(category,str)
+ if logs.level > 2 then write_nl(format("<i category='%s'>%s</i>",category,str)) end
+ end
+ function logs.xml.warning(category,str)
+ if logs.level > 1 then write_nl(format("<w category='%s'>%s</w>",category,str)) end
+ end
+ function logs.xml.error(category,str)
+ if logs.level > 0 then write_nl(format("<e category='%s'>%s</e>",category,str)) end
+ end
+ function logs.xml.report(category,str)
+ write_nl(format("<r category='%s'>%s</r>",category,str))
+ end
+
+ function logs.xml.start() if logs.level > 0 then tw("<%s>" ) end end
+ function logs.xml.stop () if logs.level > 0 then tw("</%s>") end end
+ function logs.xml.push () if logs.level > 0 then tw("<!-- ") end end
+ function logs.xml.pop () if logs.level > 0 then tw(" -->" ) end end
+
+ function logs.tex.debug(category,str)
+ if logs.level > 3 then write_nl(format("debug >> %s: %s" ,category,str)) end
+ end
+ function logs.tex.info(category,str)
+ if logs.level > 2 then write_nl(format("info >> %s: %s" ,category,str)) end
+ end
+ function logs.tex.warning(category,str)
+ if logs.level > 1 then write_nl(format("warning >> %s: %s",category,str)) end
+ end
+ function logs.tex.error(category,str)
+ if logs.level > 0 then write_nl(format("error >> %s: %s" ,category,str)) end
+ end
+ function logs.tex.report(category,str)
+ write_nl(format("report >> %s: %s" ,category,str))
+ end
+
+ function logs.set_level(level)
+ logs.level = logs.levels[level] or level
+ end
+
+ function logs.set_method(method)
+ for _, v in pairs(logs.functions) do
+ logs[v] = logs[method][v] or function() end
+ end
+ if callback and input[method] then
+ for _, cb in pairs(logs.callbacks) do
+ callback.register(cb, input[method][cb])
+ end
+ end
+ end
+
+ function logs.xml.start_page_number()
+ write_nl(format("<p real='%s' page='%s' sub='%s'", tex.count[0], tex.count[1], tex.count[2]))
+ end
+
+ function logs.xml.stop_page_number()
+ write("/>")
+ write_nl("")
+ end
+
+ function logs.xml.report_output_pages(p,b)
+ write_nl(format("<v k='pages' v='%s'/>", p))
+ write_nl(format("<v k='bytes' v='%s'/>", b))
+ write_nl("")
+ end
+
+ function logs.xml.report_output_log()
+ end
+
+end
+
+logs.set_level('error')
+logs.set_method('tex')
diff --git a/Master/texmf-dist/tex/context/base/luat-sta.lua b/Master/texmf-dist/tex/context/base/luat-sta.lua
new file mode 100644
index 00000000000..15581222ca1
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/luat-sta.lua
@@ -0,0 +1,183 @@
+if not modules then modules = { } end modules ['luat-sta'] = {
+ version = 1.001,
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+states = states or { }
+states.data = states.data or { }
+states.hash = states.hash or { }
+states.tag = states.tag or ""
+states.filename = states.filename or ""
+
+function states.save(filename,tag)
+ tag = tag or states.tag
+ filename = file.addsuffix(filename or states.filename,'lus')
+ io.savedata(filename,
+ "-- generator : luat-sta.lua\n" ..
+ "-- state tag : " .. tag .. "\n\n" ..
+ table.serialize(states.data[tag or states.tag] or {},true)
+ )
+end
+
+function states.load(filename,tag)
+ states.filename = filename
+ states.tag = tag or "whatever"
+ states.filename = file.addsuffix(states.filename,'lus')
+ states.data[states.tag], states.hash[states.tag] = (io.exists(filename) and dofile(filename)) or { }, { }
+end
+
+function states.set_by_tag(tag,key,value,default,persistent)
+ local d, h = states.data[tag], states.hash[tag]
+ if d then
+ local dkey, hkey = key, key
+ local pre, post = key:match("(.+)%.([^%.]+)$")
+ if pre and post then
+ for k in pre:gmatch("[^%.]+") do
+ local dk = d[k]
+ if not dk then
+ dk = { }
+ d[k] = dk
+ end
+ d = dk
+ end
+ dkey, hkey = post, key
+ end
+ if type(value) == nil then
+ value = value or default
+ elseif persistent then
+ value = value or d[dkey] or default
+ else
+ value = value or default
+ end
+ d[dkey], h[hkey] = value, value
+ end
+end
+
+function states.get_by_tag(tag,key,default)
+ local h = states.hash[tag]
+ if h and h[key] then
+ return h[key]
+ else
+ local d = states.data[tag]
+ if d then
+ for k in key:gmatch("[^%.]+") do
+ local dk = d[k]
+ if dk then
+ d = dk
+ else
+ return default
+ end
+ end
+ return d or default
+ end
+ end
+end
+
+function states.set(key,value,default,persistent)
+ states.set_by_tag(states.tag,key,value,default,persistent)
+end
+
+function states.get(key,default)
+ return states.get_by_tag(states.tag,key,default)
+end
+
+--~ states.data.update = {
+--~ ["version"] = {
+--~ ["major"] = 0,
+--~ ["minor"] = 1,
+--~ },
+--~ ["rsync"] = {
+--~ ["server"] = "contextgarden.net",
+--~ ["module"] = "minimals",
+--~ ["repository"] = "current",
+--~ ["flags"] = "-rpztlv --stats",
+--~ },
+--~ ["tasks"] = {
+--~ ["update"] = true,
+--~ ["make"] = true,
+--~ ["delete"] = false,
+--~ },
+--~ ["platform"] = {
+--~ ["host"] = true,
+--~ ["other"] = {
+--~ ["mswin"] = false,
+--~ ["linux"] = false,
+--~ ["linux-64"] = false,
+--~ ["osx-intel"] = false,
+--~ ["osx-ppc"] = false,
+--~ ["sun"] = false,
+--~ },
+--~ },
+--~ ["context"] = {
+--~ ["available"] = {"current", "beta", "alpha", "experimental"},
+--~ ["selected"] = "current",
+--~ },
+--~ ["formats"] = {
+--~ ["cont-en"] = true,
+--~ ["cont-nl"] = true,
+--~ ["cont-de"] = false,
+--~ ["cont-cz"] = false,
+--~ ["cont-fr"] = false,
+--~ ["cont-ro"] = false,
+--~ },
+--~ ["engine"] = {
+--~ ["pdftex"] = {
+--~ ["install"] = true,
+--~ ["formats"] = {
+--~ ["pdftex"] = true,
+--~ },
+--~ },
+--~ ["luatex"] = {
+--~ ["install"] = true,
+--~ ["formats"] = {
+--~ },
+--~ },
+--~ ["xetex"] = {
+--~ ["install"] = true,
+--~ ["formats"] = {
+--~ ["xetex"] = false,
+--~ },
+--~ },
+--~ ["metapost"] = {
+--~ ["install"] = true,
+--~ ["formats"] = {
+--~ ["mpost"] = true,
+--~ ["metafun"] = true,
+--~ },
+--~ },
+--~ },
+--~ ["fonts"] = {
+--~ },
+--~ ["doc"] = {
+--~ },
+--~ ["modules"] = {
+--~ ["f-urwgaramond"] = false,
+--~ ["f-urwgothic"] = false,
+--~ ["t-bnf"] = false,
+--~ ["t-chromato"] = false,
+--~ ["t-cmscbf"] = false,
+--~ ["t-cmttbf"] = false,
+--~ ["t-construction-plan"] = false,
+--~ ["t-degrade"] = false,
+--~ ["t-french"] = false,
+--~ ["t-lettrine"] = false,
+--~ ["t-lilypond"] = false,
+--~ ["t-mathsets"] = false,
+--~ ["t-tikz"] = false,
+--~ ["t-typearea"] = false,
+--~ ["t-vim"] = false,
+--~ },
+--~ }
+
+
+--~ states.save("teststate", "update")
+--~ states.load("teststate", "update")
+
+--~ print(states.get_by_tag("update","rsync.server","unknown"))
+--~ states.set_by_tag("update","rsync.server","oeps")
+--~ print(states.get_by_tag("update","rsync.server","unknown"))
+--~ states.save("teststate", "update")
+--~ states.load("teststate", "update")
+--~ print(states.get_by_tag("update","rsync.server","unknown"))
diff --git a/Master/texmf-dist/tex/context/base/luat-tex.lua b/Master/texmf-dist/tex/context/base/luat-tex.lua
new file mode 100644
index 00000000000..c9d99c48a2d
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/luat-tex.lua
@@ -0,0 +1,516 @@
+-- filename : luat-zip.lua
+-- comment : companion to luat-lib.tex
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+if not versions then versions = { } end versions['luat-tex'] = 1.001
+
+-- special functions that deal with io
+
+if texconfig and not texlua then
+
+ input.level = input.level or 0
+
+ if input.logmode() == 'xml' then
+ function input.show_open(name)
+ input.level = input.level + 1
+ texio.write_nl("<f l='"..input.level.."' n='"..name.."'>")
+ end
+ function input.show_close(name)
+ texio.write("</f> ")
+ input.level = input.level - 1
+ end
+ function input.show_load(name)
+ texio.write_nl("<f l='"..(input.level+1).."' n='"..name.."'/>") -- level?
+ end
+ else
+ function input.show_open () end
+ function input.show_close() end
+ function input.show_load () end
+ end
+
+ function input.finders.generic(instance,tag,filename,filetype)
+ local foundname = input.find_file(instance,filename,filetype)
+ if foundname and foundname ~= "" then
+ input.logger('+ ' .. tag .. ' finder',filename,'filetype')
+ return foundname
+ else
+ input.logger('- ' .. tag .. ' finder',filename,'filetype')
+ return unpack(input.finders.notfound)
+ end
+ end
+
+ input.filters.dynamic_translator = nil
+ input.filters.frozen_translator = nil
+ input.filters.utf_translator = nil
+
+ function input.openers.text_opener(filename,file_handle,tag)
+ local u = unicode.utftype(file_handle)
+ local t = { }
+ if u > 0 then
+ input.logger('+ ' .. tag .. ' opener (' .. unicode.utfname[u] .. ')',filename)
+ local l
+ if u > 2 then
+ l = unicode.utf32_to_utf8(file_handle:read("*a"),u==4)
+ else
+ l = unicode.utf16_to_utf8(file_handle:read("*a"),u==2)
+ end
+ file_handle:close()
+ t = {
+ utftype = u, -- may go away
+ lines = l,
+ current = 0, -- line number, not really needed
+ handle = nil,
+ noflines = #l,
+ close = function()
+ input.logger('= ' .. tag .. ' closer (' .. unicode.utfname[u] .. ')',filename)
+ input.show_close(filename)
+ end,
+--~ getline = function(n)
+--~ local line = t.lines[n]
+--~ if not line or line == "" then
+--~ return ""
+--~ else
+--~ local translator = input.filters.utf_translator
+--~ return (translator and translator(line)) or line
+--~ end
+--~ end,
+ reader = function(self)
+ self = self or t
+ local current, lines = self.current, self.lines
+ if current >= #lines then
+ return nil
+ else
+ current = current + 1
+ self.current = current
+ local line = lines[current]
+ if line == "" then
+ return ""
+ else
+ local translator = input.filters.utf_translator
+ -- return (translator and translator(line)) or line
+ if translator then
+ return translator(line)
+ else
+ return line
+ end
+ end
+ end
+ end
+ }
+ else
+ input.logger('+ ' .. tag .. ' opener',filename)
+ -- todo: file;name -> freeze / eerste regel scannen -> freeze
+ local filters = input.filters
+ t = {
+ reader = function(self)
+ local line = file_handle:read()
+ if line == "" then
+ return ""
+ end
+ local translator = filters.utf_translator
+ if translator then
+ return translator(line)
+ end
+ translator = filters.dynamic_translator
+ if translator then
+ return translator(line)
+ end
+ return line
+ end,
+ close = function()
+ input.logger('= ' .. tag .. ' closer',filename)
+ input.show_close(filename)
+ file_handle:close()
+ end,
+ handle = function()
+ return file_handle
+ end,
+ noflines = function()
+ t.noflines = io.noflines(file_handle)
+ return t.noflines
+ end
+ }
+ end
+ return t
+ end
+
+ function input.openers.generic(instance,tag,filename)
+ if filename and filename ~= "" then
+ local f = io.open(filename,"r")
+ if f then
+ input.show_open(filename)
+ return input.openers.text_opener(filename,f,tag)
+ end
+ end
+ input.logger('- ' .. tag .. ' opener',filename)
+ return unpack(input.openers.notfound)
+ end
+
+ function input.loaders.generic(instance,tag,filename)
+ if filename and filename ~= "" then
+ local f = io.open(filename,"rb")
+ if f then
+ input.show_load(filename)
+ input.logger('+ ' .. tag .. ' loader',filename)
+ local s = f:read("*a")
+ f:close()
+ if s then
+ return true, s, #s
+ end
+ end
+ end
+ input.logger('- ' .. tag .. ' loader',filename)
+ return unpack(input.loaders.notfound)
+ end
+
+ function input.finders.tex(instance,filename,filetype)
+ return input.finders.generic(instance,'tex',filename,filetype)
+ end
+ function input.openers.tex(instance,filename)
+ return input.openers.generic(instance,'tex',filename)
+ end
+ function input.loaders.tex(instance,filename)
+ return input.loaders.generic(instance,'tex',filename)
+ end
+
+end
+
+-- callback into the file io and related things; disabling kpse
+
+
+if texconfig and not texlua then do
+
+ -- this is not the right place, because we refer to quite some not yet defined tables, but who cares ...
+
+ ctx = ctx or { }
+
+ local ss = { }
+
+ function ctx.writestatus(a,b)
+ local s = ss[a]
+ if not ss[a] then
+ s = a:rpadd(15) .. ": "
+ ss[a] = s
+ end
+ texio.write_nl(s .. b .. "\n")
+ end
+
+ -- this will become: ctx.install_statistics(fnc() return ..,.. end) etc
+
+ local statusinfo, n = { }, 0
+
+ function ctx.register_statistics(tag,pattern,fnc)
+ statusinfo[#statusinfo+1] = { tag, pattern, fnc }
+ if #tag > n then n = #tag end
+ end
+
+ function ctx.show_statistics() -- todo: move calls
+ if caches then
+ ctx.register_statistics("used config path", "%s", function() return caches.configpath(texmf.instance) end)
+ ctx.register_statistics("used cache path", "%s", function() return caches.path end)
+ end
+ if status.luabytecodes > 0 and input.storage and input.storage.done then
+ ctx.register_statistics("modules/dumps/instances", "%s/%s/%s", function() return status.luabytecodes-500, input.storage.done, status.luastates end)
+ end
+ if texmf.instance then
+ ctx.register_statistics("input load time", "%s seconds", function() return input.loadtime(texmf.instance) end)
+ end
+ if fonts then
+ ctx.register_statistics("fonts load time","%s seconds", function() return input.loadtime(fonts) end)
+ end
+ if xml then
+ ctx.register_statistics("xml load time", "%s seconds, backreferences: %i, outer filtering time: %s", function() return input.loadtime(xml), #lxml.self, input.loadtime(lxml) end)
+ end
+ if mptopdf then
+ ctx.register_statistics("mps conversion time", "%s seconds", function() return input.loadtime(mptopdf) end)
+ end
+ if nodes then
+ ctx.register_statistics("node processing time", "%s seconds (including kernel)", function() return input.loadtime(nodes) end)
+ end
+ if kernel then
+ ctx.register_statistics("kernel processing time", "%s seconds", function() return input.loadtime(kernel) end)
+ end
+ if attributes then
+ ctx.register_statistics("attribute processing time", "%s seconds", function() return input.loadtime(attributes) end)
+ end
+ if languages then
+ ctx.register_statistics("language load time", "%s seconds, n=%s", function() return input.loadtime(languages), languages.hyphenation.n() end)
+ end
+ if figures then
+ ctx.register_statistics("graphics processing time", "%s seconds, n=%s (including tex)", function() return input.loadtime(figures), figures.n or "?" end)
+ end
+ if metapost then
+ ctx.register_statistics("metapost processing time", "%s seconds, loading: %s seconds, execution: %s seconds, n: %s", function() return input.loadtime(metapost), input.loadtime(mplib), input.loadtime(metapost.exectime), metapost.n end)
+ end
+ if status.luastate_bytes then
+ ctx.register_statistics("current memory usage", "%s bytes", function() return status.luastate_bytes end)
+ end
+ if nodes then
+ ctx.register_statistics("cleaned up reserved nodes", "%s nodes, %s lists of %s", function() return nodes.cleanup_reserved(tex.count[24]) end) -- \topofboxstack
+ end
+ if status.node_mem_usage then
+ ctx.register_statistics("node memory usage", "%s", function() return status.node_mem_usage end)
+ end
+ if languages then
+ ctx.register_statistics("loaded patterns", "%s", function() return languages.logger.report() end)
+ end
+ if fonts then
+ ctx.register_statistics("loaded fonts", "%s", function() return fonts.logger.report() end)
+ end
+ if xml then -- so we are in mkiv, we need a different check
+ ctx.register_statistics("runtime", "%s seconds, %i processed pages, %i shipped pages, %.3f pages/second", function()
+ input.stoptiming(texmf)
+ local runtime = input.loadtime(texmf)
+ local shipped = tex.count['nofshipouts']
+ local pages = tex.count['realpageno'] - 1
+ local persecond = shipped / runtime
+ return runtime, pages, shipped, persecond
+ end)
+ end
+ for _, t in ipairs(statusinfo) do
+ local tag, pattern, fnc = t[1], t[2], t[3]
+ ctx.writestatus("mkiv lua stats", string.format("%s - %s", tag:rpadd(n," "), pattern:format(fnc())))
+ end
+ end
+
+end end
+
+if texconfig and not texlua then
+
+ texconfig.kpse_init = false
+ texconfig.trace_file_names = input.logmode() == 'tex'
+ texconfig.max_print_line = 100000
+
+ -- if still present, we overload kpse (put it off-line so to say)
+
+ if not texmf then texmf = { } end
+
+ input.starttiming(texmf)
+
+ if not texmf.instance then
+
+ if not texmf.instance then -- prevent a second loading
+
+ texmf.instance = input.reset()
+ texmf.instance.progname = environment.progname or 'context'
+ texmf.instance.engine = environment.engine or 'luatex'
+ texmf.instance.validfile = input.validctxfile
+
+ input.load(texmf.instance)
+
+ end
+
+ if callback then
+ callback.register('find_read_file' , function(id,name) return input.findtexfile(texmf.instance,name) end)
+ callback.register('open_read_file' , function( name) return input.opentexfile(texmf.instance,name) end)
+ end
+
+ if callback then
+ callback.register('find_data_file' , function(name) return input.findbinfile(texmf.instance,name,"tex") end)
+ callback.register('find_enc_file' , function(name) return input.findbinfile(texmf.instance,name,"enc") end)
+ callback.register('find_font_file' , function(name) return input.findbinfile(texmf.instance,name,"tfm") end)
+ callback.register('find_format_file' , function(name) return input.findbinfile(texmf.instance,name,"fmt") end)
+ callback.register('find_image_file' , function(name) return input.findbinfile(texmf.instance,name,"tex") end)
+ callback.register('find_map_file' , function(name) return input.findbinfile(texmf.instance,name,"map") end)
+ callback.register('find_ocp_file' , function(name) return input.findbinfile(texmf.instance,name,"ocp") end)
+ callback.register('find_opentype_file' , function(name) return input.findbinfile(texmf.instance,name,"otf") end)
+ callback.register('find_output_file' , function(name) return name end)
+ callback.register('find_pk_file' , function(name) return input.findbinfile(texmf.instance,name,"pk") end)
+ callback.register('find_sfd_file' , function(name) return input.findbinfile(texmf.instance,name,"sfd") end)
+ callback.register('find_truetype_file' , function(name) return input.findbinfile(texmf.instance,name,"ttf") end)
+ callback.register('find_type1_file' , function(name) return input.findbinfile(texmf.instance,name,"pfb") end)
+ callback.register('find_vf_file' , function(name) return input.findbinfile(texmf.instance,name,"vf") end)
+
+ callback.register('read_data_file' , function(file) return input.loadbinfile(texmf.instance,file,"tex") end)
+ callback.register('read_enc_file' , function(file) return input.loadbinfile(texmf.instance,file,"enc") end)
+ callback.register('read_font_file' , function(file) return input.loadbinfile(texmf.instance,file,"tfm") end)
+ -- format
+ -- image
+ callback.register('read_map_file' , function(file) return input.loadbinfile(texmf.instance,file,"map") end)
+ callback.register('read_ocp_file' , function(file) return input.loadbinfile(texmf.instance,file,"ocp") end)
+ callback.register('read_opentype_file' , function(file) return input.loadbinfile(texmf.instance,file,"otf") end)
+ -- output
+ callback.register('read_pk_file' , function(file) return input.loadbinfile(texmf.instance,file,"pk") end)
+ callback.register('read_sfd_file' , function(file) return input.loadbinfile(texmf.instance,file,"sfd") end)
+ callback.register('read_truetype_file' , function(file) return input.loadbinfile(texmf.instance,file,"ttf") end)
+ callback.register('read_type1_file' , function(file) return input.loadbinfile(texmf.instance,file,"pfb") end)
+ callback.register('read_vf_file' , function(file) return input.loadbinfile(texmf.instance,file,"vf" ) end)
+ end
+
+ if callback and environment.aleph_mode then
+ callback.register('find_font_file' , function(name) return input.findbinfile(texmf.instance,name,"ofm") end)
+ callback.register('read_font_file' , function(file) return input.loadbinfile(texmf.instance,file,"ofm") end)
+ callback.register('find_vf_file' , function(name) return input.findbinfile(texmf.instance,name,"ovf") end)
+ callback.register('read_vf_file' , function(file) return input.loadbinfile(texmf.instance,file,"ovf") end)
+ end
+
+ if callback then
+ callback.register('find_write_file' , function(id,name) return name end)
+ end
+
+ if callback and (not config or (#config == 0)) then
+ callback.register('find_format_file' , function(name) return name end)
+ end
+
+ if callback and false then
+ for k, v in pairs(callback.list()) do
+ if not v then texio.write_nl("<w>callback "..k.." is not set</w>") end
+ end
+ end
+
+ if callback then
+
+ input.start_actions = { }
+ input.stop_actions = { }
+
+ function input.register_start_actions(f) table.insert(input.start_actions, f) end
+ function input.register_stop_actions (f) table.insert(input.stop_actions, f) end
+
+ --~ callback.register('start_run', function() for _, a in pairs(input.start_actions) do a() end end)
+ --~ callback.register('stop_run' , function() for _, a in pairs(input.stop_actions ) do a() end end)
+
+ end
+
+ if callback then
+
+ if input.logmode() == 'xml' then
+
+ function input.start_page_number()
+ texio.write_nl("<p real='" .. tex.count[0] .. "' page='"..tex.count[1].."' sub='"..tex.count[2].."'")
+ end
+ function input.stop_page_number()
+ texio.write("/>")
+ texio.write_nl("")
+ end
+
+ callback.register('start_page_number' , input.start_page_number)
+ callback.register('stop_page_number' , input.stop_page_number )
+
+ function input.report_output_pages(p,b)
+ texio.write_nl("<v k='pages'>"..p.."</v>")
+ texio.write_nl("<v k='bytes'>"..b.."</v>")
+ texio.write_nl("")
+ end
+ function input.report_output_log()
+ end
+
+ callback.register('report_output_pages', input.report_output_pages)
+ callback.register('report_output_log' , input.report_output_log )
+
+ function input.start_run()
+ texio.write_nl("<?xml version='1.0' standalone='yes'?>")
+ texio.write_nl("<job xmlns='www.tug.org/luatex/schemas/context-job.rng'>")
+ texio.write_nl("")
+ end
+ function input.stop_run()
+ texio.write_nl("</job>")
+ end
+ function input.show_statistics()
+ for k,v in pairs(status.list()) do
+ texio.write_nl("log","<v k='"..k.."'>"..tostring(v).."</v>")
+ end
+ end
+
+ table.insert(input.start_actions, input.start_run)
+ table.insert(input.stop_actions , input.show_statistics)
+ table.insert(input.stop_actions , input.stop_run)
+
+ else
+ table.insert(input.stop_actions , input.show_statistics)
+ end
+
+ callback.register('start_run', function() for _, a in pairs(input.start_actions) do a() end end)
+ callback.register('stop_run' , function() for _, a in pairs(input.stop_actions ) do a() end ctx.show_statistics() end)
+
+ end
+
+ end
+
+ if kpse then
+
+ function kpse.find_file(filename,filetype,mustexist)
+ return input.find_file(texmf.instance,filename,filetype,mustexist)
+ end
+ function kpse.expand_path(variable)
+ return input.expand_path(texmf.instance,variable)
+ end
+ function kpse.expand_var(variable)
+ return input.expand_var(texmf.instance,variable)
+ end
+ function kpse.expand_braces(variable)
+ return input.expand_braces(texmf.instance,variable)
+ end
+
+ end
+
+end
+
+-- program specific configuration (memory settings and alike)
+
+if texconfig and not texlua then
+
+ luatex = luatex or { }
+
+ luatex.variablenames = {
+ 'main_memory', 'extra_mem_bot', 'extra_mem_top',
+ 'buf_size','expand_depth',
+ 'font_max', 'font_mem_size',
+ 'hash_extra', 'max_strings', 'pool_free', 'pool_size', 'string_vacancies',
+ 'obj_tab_size', 'pdf_mem_size', 'dest_names_size',
+ 'nest_size', 'param_size', 'save_size', 'stack_size',
+ 'trie_size', 'hyph_size', 'max_in_open',
+ 'ocp_stack_size', 'ocp_list_size', 'ocp_buf_size'
+ }
+
+ function luatex.variables()
+ local t, x = { }, nil
+ for _,v in pairs(luatex.variablenames) do
+ x = input.var_value(texmf.instance,v)
+ if x and x:find("^%d+$") then
+ t[v] = tonumber(x)
+ end
+ end
+ return t
+ end
+
+ function luatex.setvariables(tab)
+ for k,v in pairs(luatex.variables()) do
+ tab[k] = v
+ end
+ end
+
+ if not luatex.variables_set then
+ luatex.setvariables(texconfig)
+ luatex.variables_set = true
+ end
+
+ texconfig.max_print_line = 100000
+ texconfig.max_in_open = 127
+
+end
+
+-- some tex basics
+
+if not cs then cs = { } end
+
+function cs.def(k,v)
+ tex.sprint(tex.texcatcodes, "\\def\\" .. k .. "{" .. v .. "}")
+end
+
+function cs.chardef(k,v)
+ tex.sprint(tex.texcatcodes, "\\chardef\\" .. k .. "=" .. v .. "\\relax")
+end
+
+function cs.boolcase(b)
+ if b then tex.write(1) else tex.write(0) end
+end
+
+function cs.testcase(b)
+ if b then
+ tex.sprint(tex.texcatcodes, "\\firstoftwoarguments")
+ else
+ tex.sprint(tex.texcatcodes, "\\secondoftwoarguments")
+ end
+end
diff --git a/Master/texmf-dist/tex/context/base/luat-tmp.lua b/Master/texmf-dist/tex/context/base/luat-tmp.lua
new file mode 100644
index 00000000000..f3b06235378
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/luat-tmp.lua
@@ -0,0 +1,408 @@
+if not modules then modules = { } end modules ['luat-tmp'] = {
+ version = 1.001,
+ comment = "companion to luat-lib.tex",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+--[[ldx--
+<p>This module deals with caching data. It sets up the paths and
+implements loaders and savers for tables. Best is to set the
+following variable. When not set, the usual paths will be
+checked. Personally I prefer the (users) temporary path.</p>
+
+</code>
+TEXMFCACHE=$TMP;$TEMP;$TMPDIR;$TEMPDIR;$HOME;$TEXMFVAR;$VARTEXMF;.
+</code>
+
+<p>Currently we do no locking when we write files. This is no real
+problem because most caching involves fonts and the chance of them
+being written at the same time is small. We also need to extend
+luatools with a recache feature.</p>
+--ldx]]--
+
+caches = caches or { }
+dir = dir or { }
+texmf = texmf or { }
+
+caches.path = caches.path or nil
+caches.base = caches.base or "luatex-cache"
+caches.more = caches.more or "context"
+caches.direct = false -- true is faster but may need huge amounts of memory
+caches.trace = false
+caches.tree = false
+caches.paths = caches.paths or nil
+caches.force = false
+
+input.usecache = not toboolean(os.getenv("TEXMFSHARECACHE") or "false",true) -- true
+
+function caches.temp(instance)
+ local function checkpath(cachepath)
+ if not cachepath or cachepath == "" then
+ return nil
+ elseif lfs.attributes(cachepath,"mode") == "directory" then -- lfs.isdir(cachepath) then
+ return cachepath
+ elseif caches.force or io.ask(string.format("Should I create the cache path %s?",cachepath), "no", { "yes", "no" }) == "yes" then
+ dir.mkdirs(cachepath)
+ return (lfs.attributes(cachepath,"mode") == "directory") and cachepath
+ else
+ return nil
+ end
+ end
+ local cachepath = input.expanded_path_list(instance,"TEXMFCACHE")
+ cachepath = cachepath and #cachepath > 0 and checkpath(cachepath[1])
+ if not cachepath then
+ cachepath = os.getenv("TEXMFCACHE") or os.getenv("HOME") or os.getenv("HOMEPATH") or os.getenv("TMP") or os.getenv("TEMP") or os.getenv("TMPDIR") or nil
+ cachepath = checkpath(cachepath)
+ end
+ if not cachepath then
+ print("\nfatal error: there is no valid cache path defined\n")
+ os.exit()
+ elseif lfs.attributes(cachepath,"mode") ~= "directory" then
+ print(string.format("\nfatal error: cache path %s is not a directory\n",cachepath))
+ os.exit()
+ end
+ function caches.temp(instance)
+ return cachepath
+ end
+ return cachepath
+end
+
+function caches.configpath(instance)
+ return table.concat(instance.cnffiles,";")
+end
+
+function caches.hashed(tree)
+ return md5.hex((tree:lower()):gsub("[\\\/]+","/"))
+end
+
+function caches.treehash(instance)
+ local tree = caches.configpath(instance)
+ if not tree or tree == "" then
+ return false
+ else
+ return caches.hashed(tree)
+ end
+end
+
+function caches.setpath(instance,...)
+ if not caches.path then
+ if not caches.path then
+ caches.path = caches.temp(instance)
+ end
+ caches.path = input.clean_path(caches.path) -- to be sure
+ if lfs then
+ caches.tree = caches.tree or caches.treehash(instance)
+ if caches.tree then
+ caches.path = dir.mkdirs(caches.path,caches.base,caches.more,caches.tree)
+ else
+ caches.path = dir.mkdirs(caches.path,caches.base,caches.more)
+ end
+ end
+ end
+ if not caches.path then
+ caches.path = '.'
+ end
+ caches.path = input.clean_path(caches.path)
+ if lfs and not table.is_empty({...}) then
+ local pth = dir.mkdirs(caches.path,...)
+ return pth
+ end
+ caches.path = dir.expand_name(caches.path)
+ return caches.path
+end
+
+function caches.definepath(instance,category,subcategory)
+ return function()
+ return caches.setpath(instance,category,subcategory)
+ end
+end
+
+function caches.setluanames(path,name)
+ return path .. "/" .. name .. ".tma", path .. "/" .. name .. ".tmc"
+end
+
+function caches.loaddata(path,name)
+ local tmaname, tmcname = caches.setluanames(path,name)
+ local loader = loadfile(tmcname) or loadfile(tmaname)
+ if loader then
+ return loader()
+ else
+ return false
+ end
+end
+
+function caches.is_writable(filepath,filename)
+ local tmaname, tmcname = caches.setluanames(filepath,filename)
+ return file.is_writable(tmaname)
+end
+
+function caches.savedata(filepath,filename,data,raw) -- raw needed for file cache
+ local tmaname, tmcname = caches.setluanames(filepath,filename)
+ local reduce, simplify = true, true
+ if raw then
+ reduce, simplify = false, false
+ end
+ if caches.direct then
+ file.savedata(tmaname, table.serialize(data,'return',true,true))
+ else
+ table.tofile(tmaname, data,'return',true,true) -- maybe not the last true
+ end
+ utils.lua.compile(tmaname, tmcname, input.expand_var(texmf.instance,'PURGECACHE') == 't')
+end
+
+-- here we use the cache for format loading (texconfig.[formatname|jobname])
+
+--~ if tex and texconfig and texconfig.formatname and texconfig.formatname == "" then
+if tex and texconfig and (not texconfig.formatname or texconfig.formatname == "") and texmf.instance then
+ if not texconfig.luaname then texconfig.luaname = "cont-en.lua" end -- or luc
+ texconfig.formatname = caches.setpath(texmf.instance,"formats") .. "/" .. texconfig.luaname:gsub("%.lu.$",".fmt")
+end
+
+--[[ldx--
+<p>Once we found ourselves defining similar cache constructs
+several times, containers were introduced. Containers are used
+to collect tables in memory and reuse them when possible based
+on (unique) hashes (to be provided by the calling function).</p>
+
+<p>Caching to disk is disabled by default. Version numbers are
+stored in the saved table which makes it possible to change the
+table structures without bothering about the disk cache.</p>
+
+<p>Examples of usage can be found in the font related code.</p>
+--ldx]]--
+
+containers = { }
+containers.trace = false
+
+do -- local report
+
+ local function report(container,tag,name)
+ if caches.trace or containers.trace or container.trace then
+ logs.report(string.format("%s cache",container.subcategory),string.format("%s: %s",tag,name or 'invalid'))
+ end
+ end
+
+ local allocated = { }
+
+ -- tracing
+
+ function containers.define(category, subcategory, version, enabled)
+ return function()
+ if category and subcategory then
+ local c = allocated[category]
+ if not c then
+ c = { }
+ allocated[category] = c
+ end
+ local s = c[subcategory]
+ if not s then
+ s = {
+ category = category,
+ subcategory = subcategory,
+ storage = { },
+ enabled = enabled,
+ version = version or 1.000,
+ trace = false,
+ path = caches.setpath(texmf.instance,category,subcategory),
+ }
+ c[subcategory] = s
+ end
+ return s
+ else
+ return nil
+ end
+ end
+ end
+
+ function containers.is_usable(container, name)
+ return container.enabled and caches.is_writable(container.path, name)
+ end
+
+ function containers.is_valid(container, name)
+ if name and name ~= "" then
+ local storage = container.storage[name]
+ return storage and not table.is_empty(storage) and storage.cache_version == container.version
+ else
+ return false
+ end
+ end
+
+ function containers.read(container,name)
+ if container.enabled and not container.storage[name] then
+ container.storage[name] = caches.loaddata(container.path,name)
+ if containers.is_valid(container,name) then
+ report(container,"loaded",name)
+ else
+ container.storage[name] = nil
+ end
+ end
+ if container.storage[name] then
+ report(container,"reusing",name)
+ end
+ return container.storage[name]
+ end
+
+ function containers.write(container, name, data)
+ if data then
+ data.cache_version = container.version
+ if container.enabled then
+ local unique, shared = data.unique, data.shared
+ data.unique, data.shared = nil, nil
+ caches.savedata(container.path, name, data)
+ report(container,"saved",name)
+ data.unique, data.shared = unique, shared
+ end
+ report(container,"stored",name)
+ container.storage[name] = data
+ end
+ return data
+ end
+
+ function containers.content(container,name)
+ return container.storage[name]
+ end
+
+end
+
+-- since we want to use the cache instead of the tree, we will now
+-- reimplement the saver.
+
+local save_data = input.aux.save_data
+
+input.cachepath = nil
+
+function input.aux.save_data(instance, dataname, check)
+ input.cachepath = input.cachepath or caches.definepath(instance,"trees")
+ save_data(instance, dataname, check, function(cachename,dataname)
+ if input.usecache then
+ return file.join(input.cachepath(),caches.hashed(cachename))
+ else
+ return file.join(cachename,dataname)
+ end
+ end)
+end
+
+local load_data = input.aux.load_data
+
+function input.aux.load_data(instance,pathname,dataname,filename)
+ input.cachepath = input.cachepath or caches.definepath(instance,"trees")
+ load_data(instance,pathname,dataname,filename,function(dataname,filename)
+ if input.usecache then
+ return file.join(input.cachepath(),caches.hashed(pathname))
+ else
+ if not filename or (filename == "") then
+ filename = dataname
+ end
+ return file.join(pathname,filename)
+ end
+ end)
+end
+
+-- we will make a better format, maybe something xml or just text or lua
+
+input.automounted = input.automounted or { }
+
+function input.automount(instance,usecache)
+ local mountpaths = input.simplified_list(input.expansion(instance,'TEXMFMOUNT'))
+ if table.is_empty(mountpaths) and usecache then
+ mountpaths = { caches.setpath(instance,"mount") }
+ end
+ if not table.is_empty(mountpaths) then
+ input.starttiming(instance)
+ for k, root in pairs(mountpaths) do
+ local f = io.open(root.."/url.tmi")
+ if f then
+ for line in f:lines() do
+ if line then
+ if line:find("^[%%#%-]") then -- or %W
+ -- skip
+ elseif line:find("^zip://") then
+ input.report("mounting",line)
+ table.insert(input.automounted,line)
+ input.usezipfile(instance,line)
+ end
+ end
+ end
+ f:close()
+ end
+ end
+ input.stoptiming(instance)
+ end
+end
+
+-- store info in format
+
+input.storage = { }
+input.storage.data = { }
+input.storage.min = 0 -- 500
+input.storage.max = input.storage.min - 1
+input.storage.trace = false -- true
+input.storage.done = 0
+input.storage.evaluators = { }
+-- (evaluate,message,names)
+
+function input.storage.register(...)
+ input.storage.data[#input.storage.data+1] = { ... }
+end
+
+function input.storage.evaluate(name)
+ input.storage.evaluators[#input.storage.evaluators+1] = name
+end
+
+function input.storage.finalize() -- we can prepend the string with "evaluate:"
+ for _, t in ipairs(input.storage.evaluators) do
+ for i, v in pairs(t) do
+ if type(v) == "string" then
+ t[i] = loadstring(v)()
+ elseif type(v) == "table" then
+ for _, vv in pairs(v) do
+ if type(vv) == "string" then
+ t[i] = loadstring(vv)()
+ end
+ end
+ end
+ end
+ end
+end
+
+function input.storage.dump()
+ for name, data in ipairs(input.storage.data) do
+ local evaluate, message, original, target = data[1], data[2], data[3] ,data[4]
+ local name, initialize, finalize, code = nil, "", "", ""
+ for str in target:gmatch("([^%.]+)") do
+ if name then
+ name = name .. "." .. str
+ else
+ name = str
+ end
+ initialize = string.format("%s %s = %s or {} ", initialize, name, name)
+ end
+ if evaluate then
+ finalize = "input.storage.evaluate(" .. name .. ")"
+ end
+ input.storage.max = input.storage.max + 1
+ if input.storage.trace then
+ logs.report('storage',string.format('saving %s in slot %s',message,input.storage.max))
+ code =
+ initialize ..
+ string.format("logs.report('storage','restoring %s from slot %s') ",message,input.storage.max) ..
+ table.serialize(original,name) ..
+ finalize
+ else
+ code = initialize .. table.serialize(original,name) .. finalize
+ end
+ lua.bytecode[input.storage.max] = loadstring(code)
+ end
+end
+
+if lua.bytecode then -- from 0 upwards
+ local i = input.storage.min
+ while lua.bytecode[i] do
+ lua.bytecode[i]()
+ lua.bytecode[i] = nil
+ i = i + 1
+ end
+ input.storage.done = i
+end
diff --git a/Master/texmf-dist/tex/context/base/luat-tra.lua b/Master/texmf-dist/tex/context/base/luat-tra.lua
new file mode 100644
index 00000000000..7fc97319563
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/luat-tra.lua
@@ -0,0 +1,108 @@
+-- filename : luat-tra.lua
+-- comment : companion to luat-lib.tex
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+if not versions then versions = { } end versions['luat-tra'] = 1.001
+
+debugger = { }
+
+do
+
+ local counters = { }
+ local names = { }
+ local getinfo = debug.getinfo
+
+ local function hook()
+ local f = getinfo(2,"f").func
+ if f then
+ if counters[f] == nil then
+ counters[f] = 1
+--~ names[f] = debug.getinfo(2,"Sn")
+ names[f] = debug.getinfo(2,"n")
+--~ names[f] = debug.getinfo(f)
+ else
+ counters[f] = counters[f] + 1
+ end
+ end
+ end
+
+ local function getname(func)
+ local n = names[func]
+ if n then
+ if n.what == "C" then
+ return n.name or '<luacall>'
+ else
+ -- source short_src linedefined what name namewhat nups func
+ local name = n.name or n.namewhat or n.what
+ if not name or name == "" then name = "?" end
+ return string.format("%s : %s : %s", n.short_src or "unknown source", n.linedefined or "--", name)
+ end
+ else
+ return "unknown"
+ end
+ end
+
+ function debugger.showstats(printer,threshold)
+ printer = printer or texio.write or print
+ threshold = threshold or 0
+ local total, grandtotal, functions = 0, 0, 0
+ printer("\n") -- ugly but ok
+ for func, count in pairs(counters) do
+ if count > threshold then
+ local name = getname(func)
+ if name ~= "(for generator)" then
+ printer(string.format("%8i %s\n", count, getname(func)))
+ total = total + count
+ end
+ end
+ grandtotal = grandtotal + count
+ functions = functions + 1
+ end
+ printer(string.format("functions: %s, total: %s, grand total: %s, threshold: %s\n", functions, total, grandtotal, threshold))
+ end
+
+ function debugger.savestats(filename,threshold)
+ local f = io.open(filename,'w')
+ if f then
+ debugger.showstats(function(str) f:write(str) end,threshold)
+ f:close()
+ end
+ end
+
+ function debugger.enable()
+ debug.sethook(hook,"c")
+ end
+
+ function debugger.disable()
+ debug.sethook()
+ --~ counters[debug.getinfo(2,"f").func] = nil
+ end
+
+ function debugger.tracing()
+ local n = tonumber(os.env['MTX.TRACE.CALLS']) or tonumber(os.env['MTX_TRACE_CALLS']) or 0
+ if n > 0 then
+ function debugger.tracing() return true end ; return true
+ else
+ function debugger.tracing() return false end ; return false
+ end
+ end
+
+end
+
+--~ debugger.enable()
+
+--~ print(math.sin(1*.5))
+--~ print(math.sin(1*.5))
+--~ print(math.sin(1*.5))
+--~ print(math.sin(1*.5))
+--~ print(math.sin(1*.5))
+
+--~ debugger.disable()
+
+--~ print("")
+--~ debugger.showstats()
+--~ print("")
+--~ debugger.showstats(print,3)
+
diff --git a/Master/texmf-dist/tex/context/base/luat-tre.lua b/Master/texmf-dist/tex/context/base/luat-tre.lua
new file mode 100644
index 00000000000..e749a5b330a
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/luat-tre.lua
@@ -0,0 +1,45 @@
+-- filename : luat-tre.lua
+-- comment : companion to luat-lib.tex
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+if not versions then versions = { } end versions['luat-tre'] = 1.001
+
+-- \input tree://oeps1/**/oeps.tex
+
+do
+
+ local done, found = { }, { }
+
+ function input.finders.tree(instance,specification,filetype)
+ local fnd = found[specification]
+ if not fnd then
+ local spec = input.splitmethod(specification).path or ""
+ if spec ~= "" then
+ local path, name = file.dirname(spec), file.basename(spec)
+ if path == "" then path = "." end
+ local hash = done[path]
+ if not hash then
+ local pattern = path .. "/*" -- we will use the proper splitter
+ hash = dir.glob(pattern)
+ done[path] = hash
+ end
+ local pattern = "/" .. name:gsub("([%.%-%+])", "%%%1") .. "$"
+ for k, v in pairs(hash) do
+ if v:find(pattern) then
+ found[specification] = v
+ return v
+ end
+ end
+ end
+ fnd = unpack(input.finders.notfound)
+ found[specification] = fnd
+ end
+ return fnd
+ end
+
+ input.openers.tree = input.openers.generic
+ input.loaders.tree = input.loaders.generic
+
+end
diff --git a/Master/texmf-dist/tex/context/base/luat-uni.lua b/Master/texmf-dist/tex/context/base/luat-uni.lua
new file mode 100644
index 00000000000..06945ed2bab
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/luat-uni.lua
@@ -0,0 +1,23 @@
+-- filename : luat-uni.lua
+-- comment : companion to luat-uni.tex
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+if not versions then versions = { } end versions['luat-uni'] = 1.001
+
+function unicode.utf8.split(str)
+ lst = { }
+ -- for snippet in unicode.utf8.gfind(str,".") do
+ for snippet in string.utfcharacters(str) do
+ table.insert(lst,snippet)
+ end
+ return lst
+end
+
+function unicode.utf8.each(str,fnc)
+ -- for snippet in unicode.utf8.gfind(str,".") do
+ for snippet in string.utfcharacters(str) do
+ fnc(snippet)
+ end
+end
diff --git a/Master/texmf-dist/tex/context/base/luat-uni.tex b/Master/texmf-dist/tex/context/base/luat-uni.tex
new file mode 100644
index 00000000000..453c8e0d879
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/luat-uni.tex
@@ -0,0 +1,33 @@
+%D \module
+%D [ file=luat-uni,
+%D version=2006.04.25,
+%D title=\CONTEXT\ Lua Macros,
+%D subtitle=Unicode Support,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright=PRAGMA]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{Lua Support Macros (unicode)}
+
+\registerctxluafile{luat-uni}{1.001}
+
+% \defconvertedargument\ascii{ÀÃÂÃÄÅàáâãäå}
+%
+% \lua{ tex.print ("\ascii")}
+% \lua{ tex.print(unicode.utf8.reverse ("\ascii"))}
+% \lua{ tex.print(unicode.utf8.lower ("\ascii"))}
+% \lua{ tex.print(unicode.utf8.upper ("\ascii"))}
+% \lua{ tex.print(unicode.utf8.len ("\ascii"))}
+% \lua{ tex.print(table.getn(unicode.utf8.split("\ascii"))}}
+%
+% \lua{unicode.utf8.each("\ascii", function(chr) tex.print("["..chr.."]") end)}
+
+\let\UnicodeOne \gobbleoneargument
+\let\UnicodeTwo \gobbleoneargument
+\let\UnicodeThree\gobbleoneargument
+
+\endinput
diff --git a/Master/texmf-dist/tex/context/base/luat-zip.lua b/Master/texmf-dist/tex/context/base/luat-zip.lua
new file mode 100644
index 00000000000..91279cfe091
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/luat-zip.lua
@@ -0,0 +1,220 @@
+-- filename : luat-zip.lua
+-- comment : companion to luat-lib.tex
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+if not versions then versions = { } end versions['luat-zip'] = 1.001
+
+if zip and input then
+ zip.supported = true
+else
+ zip = { }
+ zip.supported = false
+end
+
+if not zip.supported then
+
+ if not input then input = { } end -- will go away
+
+ function zip.openarchive (...) return nil end -- needed ?
+ function zip.closenarchive (...) end -- needed ?
+ function input.usezipfile (...) end -- needed ?
+
+else
+
+ -- zip:///oeps.zip?name=bla/bla.tex
+ -- zip:///oeps.zip?tree=tex/texmf-local
+
+ local function validzip(str)
+ if not str:find("^zip://") then
+ return "zip:///" .. str
+ else
+ return str
+ end
+ end
+
+ zip.archives = { }
+ zip.registeredfiles = { }
+
+ function zip.openarchive(instance,name)
+ if not name or name == "" then
+ return nil
+ else
+ local arch = zip.archives[name]
+ if arch then
+ return arch
+ else
+ local full = input.find_file(instance,name) or ""
+ local arch = (full ~= "" and zip.open(full)) or false
+ zip.archives[name] = arch
+ return arch
+ end
+ end
+ end
+
+ function zip.closearchive(instance,name)
+ if not name or name == "" and zip.archives[name] then
+ zip.close(zip.archives[name])
+ zip.archives[name] = nil
+ end
+ end
+
+ -- zip:///texmf.zip?tree=/tex/texmf
+ -- zip:///texmf.zip?tree=/tex/texmf-local
+ -- zip:///texmf-mine.zip?tree=/tex/texmf-projects
+
+ function input.locators.zip(instance,specification) -- where is this used? startup zips (untested)
+ specification = input.splitmethod(specification)
+ local zipfile = specification.path
+ local zfile = zip.openarchive(instance,name) -- tricky, could be in to be initialized tree
+ if zfile then
+ input.logger('! zip locator', specification.original ..' found')
+ else
+ input.logger('? zip locator', specification.original ..' not found')
+ end
+ end
+
+ function input.hashers.zip(instance,tag,name)
+ input.report("loading zip file",name,"as",tag)
+ input.usezipfile(instance,tag .."?tree=" .. name)
+ end
+
+ function input.concatinators.zip(tag,path,name)
+ if not path or path == "" then
+ return tag .. '?name=' .. name
+ else
+ return tag .. '?name=' .. path .. "/" .. name
+ end
+ end
+
+ function input.is_readable.zip(name)
+ return true
+ end
+
+ function input.finders.zip(instance,specification,filetype)
+ specification = input.splitmethod(specification)
+ if specification.path then
+ local q = url.query(specification.query)
+ if q.name then
+ local zfile = zip.openarchive(instance,specification.path)
+ if zfile then
+ input.logger('! zip finder',specification.path)
+ local dfile = zfile:open(q.name)
+ if dfile then
+ dfile = zfile:close()
+ input.logger('+ zip finder',q.name)
+ return specification.original
+ end
+ else
+ input.logger('? zip finder',specification.path)
+ end
+ end
+ end
+ input.logger('- zip finder',filename)
+ return unpack(input.finders.notfound)
+ end
+
+ function input.openers.zip(instance,specification)
+ local zipspecification = input.splitmethod(specification)
+ if zipspecification.path then
+ local q = url.query(zipspecification.query)
+ if q.name then
+ local zfile = zip.openarchive(instance,zipspecification.path)
+ if zfile then
+ input.logger('+ zip starter',zipspecification.path)
+ local dfile = zfile:open(q.name)
+ if dfile then
+ input.show_open(specification)
+ return input.openers.text_opener(specification,dfile,'zip')
+ end
+ else
+ input.logger('- zip starter',zipspecification.path)
+ end
+ end
+ end
+ input.logger('- zip opener',filename)
+ return unpack(input.openers.notfound)
+ end
+
+ function input.loaders.zip(instance,specification)
+ specification = input.splitmethod(specification)
+ if specification.path then
+ local q = url.query(specification.query)
+ if q.name then
+ local zfile = zip.openarchive(instance,specification.path)
+ if zfile then
+ input.logger('+ zip starter',specification.path)
+ local dfile = zfile:open(q.name)
+ if dfile then
+ input.show_load(filename)
+ input.logger('+ zip loader',filename)
+ local s = dfile:read("*all")
+ dfile:close()
+ return true, s, #s
+ end
+ else
+ input.logger('- zip starter',specification.path)
+ end
+ end
+ end
+ input.logger('- zip loader',filename)
+ return unpack(input.openers.notfound)
+ end
+
+ -- zip:///somefile.zip
+ -- zip:///somefile.zip?tree=texmf-local -> mount
+
+ function input.usezipfile(instance,zipname)
+ zipname = validzip(zipname)
+ input.logger('! zip use','file '..zipname)
+ local specification = input.splitmethod(zipname)
+ local zipfile = specification.path
+ if zipfile and not zip.registeredfiles[zipname] then
+ local tree = url.query(specification.query).tree or ""
+ input.logger('! zip register','file '..zipname)
+ local z = zip.openarchive(instance,zipfile)
+ if z then
+ input.logger("= zipfile","registering "..zipname)
+ input.starttiming(instance)
+ input.aux.prepend_hash(instance,'zip',zipname,zipfile)
+ input.aux.extend_texmf_var(instance,zipname) -- resets hashes too
+ zip.registeredfiles[zipname] = z
+ instance.files[zipname] = input.aux.register_zip_file(z,tree or "")
+ input.stoptiming(instance)
+ else
+ input.logger("? zipfile","unknown "..zipname)
+ end
+ else
+ input.logger('! zip register','no file '..zipname)
+ end
+ end
+
+ function input.aux.register_zip_file(z,tree)
+ local files, filter = { }, ""
+ if tree == "" then
+ filter = "^(.+)/(.-)$"
+ else
+ filter = "^"..tree.."/(.+)/(.-)$"
+ end
+ input.logger('= zip filter',filter)
+ local register, n = input.aux.register_file, 0
+ for i in z:files() do
+ local path, name = i.filename:match(filter)
+ if path then
+ if name and name ~= '' then
+ register(files, name, path)
+ n = n + 1
+ else
+ -- directory
+ end
+ else
+ register(files, i.filename, '')
+ n = n + 1
+ end
+ end
+ input.report('= zip entries',n)
+ return files
+ end
+
+end
diff --git a/Master/texmf-dist/tex/context/base/lxml-ini.lua b/Master/texmf-dist/tex/context/base/lxml-ini.lua
new file mode 100644
index 00000000000..f6dba95d4ca
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/lxml-ini.lua
@@ -0,0 +1,791 @@
+if not modules then modules = { } end modules ['lxml-ini'] = {
+ version = 1.001,
+ comment = "companion to lxml-ini.tex",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- todo: speed up: remember last index/match combination
+
+local texsprint, texprint = tex.sprint or print, tex.print or print
+local format, concat = string.format, table.concat
+local type, next, tonumber = type, next, tonumber
+
+document = document or { }
+document.xml = document.xml or { }
+
+-- todo: loaded and myself per document so that we can garbage collect buffers
+
+lxml = { }
+lxml.loaded = { }
+lxml.myself = { }
+
+local loaded = lxml.loaded
+local myself = lxml.myself
+
+lxml.self = myself -- be backward compatible for a while
+
+local function get_id(id)
+ return (type(id) == "table" and id) or loaded[id] or myself[tonumber(id)] -- no need for tonumber if we pass without ""
+end
+
+lxml.id = get_id
+
+function lxml.root(id)
+ return loaded[id]
+end
+
+do
+
+ xml.specialhandler = xml.specialhandler or { }
+
+ local specialhandler = xml.specialhandler
+ local serialize = xml.serialize
+
+ local crlf = lpeg.P("\r\n")
+ local cr = lpeg.P("\r")
+ local lf = lpeg.P("\n")
+ local space = lpeg.S(" \t\f\v")
+ local newline = crlf + cr + lf
+ local spacing = space^0 * newline * space^0
+ local content = lpeg.C((1-spacing)^1)
+ local verbose = lpeg.C((1-(space+newline))^1)
+
+ local capture = (
+ newline^2 * lpeg.Cc("") / texprint +
+ newline * lpeg.Cc(" ") / texsprint +
+ content / texsprint
+ )^0
+
+ local function sprint(root)
+ if not root then
+ -- quit
+ else
+ local tr = type(root)
+ if tr == "string" then -- can also be result of lpath
+ capture:match(root)
+ elseif tr == "table" then
+ serialize(root,sprint,nil,nil,specialhandler)
+ end
+ end
+ end
+
+ xml.sprint = sprint
+
+ function xml.tprint(root) -- we can move sprint inline
+ local tr = type(root)
+ if tr == "table" then
+ local n = #root
+ if n == 0 then
+ sprint("") -- empty element, else no setup triggered (check this! )
+ else
+ for i=1,n do
+ sprint(root[i])
+ end
+ end
+ elseif tr == "string" then
+ sprint(root)
+ end
+ end
+
+ function xml.cprint(root) -- content
+ if not root then
+ -- quit
+ elseif type(root) == 'string' then
+ capture:match(root)
+ elseif root.dt then -- the main one
+ serialize(root.dt,sprint,nil,nil,specialhandler)
+ else -- probably dt
+ serialize(root,sprint,nil,nil,specialhandler)
+ end
+ end
+
+ -- lines (untested)
+
+ local buffer = { }
+
+ local capture = (
+ newline^2 / function() buffer[#buffer+1] = "" end +
+ newline / function() buffer[#buffer] = buffer[#buffer] .. " " end +
+ content / function(s) buffer[#buffer] = buffer[#buffer] .. s end
+ )^0
+
+ function lines(root)
+ if not root then
+ -- quit
+ elseif type(root) == 'string' then
+ capture:match(root)
+ elseif next(root) then -- tr == 'table'
+ serialize(root, lines)
+ end
+ end
+
+ function xml.lines(root)
+ buffer = { "" }
+ lines(root)
+ return result
+ end
+
+ -- cdata
+
+ local linecommand = "\\obeyedline"
+ local spacecommand = "\\obeyedspace" -- "\\strut\\obeyedspace"
+ local beforecommand = ""
+ local aftercommand = ""
+
+ local capture = (
+ newline / function( ) texsprint(tex.texcatcodes,linecommand .. "{}") end +
+ verbose / function(s) texsprint(tex.vrbcatcodes,s) end +
+ space / function( ) texsprint(tex.texcatcodes,spacecommand .. "{}") end
+ )^0
+
+ function toverbatim(str)
+ if beforecommand then texsprint(tex.texcatcodes,beforecommand .. "{}") end
+ capture:match(str)
+ if aftercommand then texsprint(tex.texcatcodes,aftercommand .. "{}") end
+ end
+
+ function lxml.set_verbatim(before,after,obeyedline,obeyedspace)
+ beforecommand, aftercommand, linecommand, spacecommand = before, after, obeyedline, obeyedspace
+ end
+
+ function lxml.set_cdata()
+ specialhandler['@cd@'] = toverbatim
+ end
+
+ function lxml.reset_cdata()
+ specialhandler['@cd@'] = nil
+ end
+
+ function lxml.verbatim(id,before,after)
+ local root = get_id(id)
+ if before then texsprint(tex.ctxcatcodes,format("%s[%s]",before,root.tg)) end
+ serialize(root.dt,toverbatim,nil,nil,nil,true) -- was root
+ if after then texsprint(tex.ctxcatcodes,after) end
+ end
+ function lxml.inlineverbatim(id)
+ lxml.verbatim(id,"\\startxmlinlineverbatim","\\stopxmlinlineverbatim")
+ end
+ function lxml.displayverbatim(id)
+ lxml.verbatim(id,"\\startxmldisplayverbatim","\\stopxmldisplayverbatim")
+ end
+
+ local pihandlers = { }
+
+ specialhandler['@pi@'] = function(str)
+ for i=1,#pihandlers do
+ pihandlers[i](str)
+ end
+ end
+
+ xml.pihandlers = pihandlers
+
+ local kind = lpeg.P("context-") * lpeg.C((1-lpeg.P("-"))^1) * lpeg.P("-directive")
+ local space = lpeg.S(" \n\r")
+ local spaces = space^0
+ local class = lpeg.C((1-space)^0)
+ local key = class
+ local value = lpeg.C(lpeg.P(1-(space * -1))^0)
+
+ local parser = kind * spaces * class * spaces * key * spaces * value
+
+ pihandlers[#pihandlers+1] = function(str)
+ -- local kind, class, key, value = parser:match(str)
+ texsprint(tex.ctxcatcodes,format("\\xmlcontextdirective{%s}{%s}{%s}{%s}",parser:match(str)))
+ end
+
+ -- print(contextdirective("context-mathml-directive function reduction yes yes "))
+ -- print(contextdirective("context-mathml-directive function "))
+
+end
+
+local xmlsprint = xml.sprint
+local xmltprint = xml.tprint
+
+-- redefine xml load
+
+xml.originalload = xml.load
+
+function xml.load(filename)
+ input.starttiming(xml)
+ local xmldata = xml.convert((filename and input.loadtexfile(texmf.instance,filename)) or "")
+ input.stoptiming(xml)
+ return xmldata
+end
+
+function lxml.load(id,filename)
+ loaded[id] = xml.load(filename)
+ return loaded[id], filename
+end
+
+function lxml.include(id,pattern,attribute,recurse)
+ input.starttiming(xml)
+ xml.include(get_id(id),pattern,attribute,recurse,function(name) return (name and input.loadtexfile(texmf.instance,name)) or "" end)
+ input.stoptiming(xml)
+end
+
+function lxml.utfize(id)
+ xml.utfize(get_id(id))
+end
+
+local xmlfilter, xmlfirst, xmllast, xmlall = xml.filter, xml.first, xml.last, xml.all
+local xmlcollect, xmlcontent, xmlcollect_texts, xmlcollect_tags = xml.collect, xml.content, xml.collect_texts, xml.collect_tags
+local xmlattribute, xmlindex = xml.filters.attribute, xml.filters.index
+local xmlelements = xml.elements
+
+function lxml.filter(id,pattern)
+ xmlsprint(xmlfilter(get_id(id),pattern))
+end
+function lxml.first(id,pattern)
+ xmlsprint(xmlfirst(get_id(id),pattern))
+end
+function lxml.last(id,pattern)
+ xmlsprint(xmllast(get_id(id),pattern))
+end
+function lxml.all(id,pattern)
+xmltprint(xmlcollect(get_id(id),pattern))
+--~ faster, no intermediate table, we need to clean up l-xml
+--~ xml.traverse(get_id(id), xml.lpath(pattern), function(r,d,k) xmlsprint(d[k]) return false end)
+end
+
+function lxml.nonspace(id,pattern)
+ xmltprint(xmlcollect(get_id(id),pattern,true))
+end
+function lxml.content(id,pattern)
+ xmlsprint(xmlcontent(get_id(id),pattern) or "")
+end
+
+function lxml.strip(id,pattern)
+ xml.strip(get_id(id),pattern)
+end
+
+function lxml.text(id,pattern)
+ xmltprint(xmlcollect_texts(get_id(id),pattern) or {})
+end
+
+function lxml.tags(id,pattern)
+ local tags = xmlcollect_tags(get_id(id),pattern)
+ if tags then
+ texsprint(concat(tags,","))
+ end
+end
+
+function lxml.raw(id,pattern) -- the content, untouched by commands
+ local c = xmlfilter(get_id(id),pattern)
+ if c then
+ texsprint(concat(c.dt,""))
+ end
+end
+
+function lxml.snippet(id,i)
+ local e = lxml.id(id)
+ if e then
+ local edt = e.dt
+ xmlsprint((edt and edt[i]) or "")
+ end
+end
+
+function lxml.stripped(id,pattern)
+ local str = xmlcontent(get_id(id),pattern) or ""
+ xmlsprint((str:gsub("^%s*(.-)%s*$","%1")))
+end
+
+function lxml.flush(id)
+ xmlsprint(get_id(id).dt)
+end
+function lxml.direct(id)
+ xmlsprint(get_id(id))
+end
+
+function lxml.index(id,pattern,i)
+ xmlsprint((xmlindex(get_id(id),pattern,i)))
+end
+
+function lxml.attribute(id,pattern,a,default) --todo: snelle xmlatt
+ local str = xmlattribute(get_id(id),pattern,a) or ""
+ texsprint((str == "" and default) or str)
+end
+
+function lxml.count(id,pattern)
+ texsprint(xml.count(get_id(id),pattern) or 0)
+end
+function lxml.name(id) -- or remapped name? -> lxml.info, combine
+ local r = get_id(id)
+ local ns = t.rn or r.ns or ""
+ if ns ~= "" then
+ texsprint(ns .. ":" .. r.tg)
+ else
+ texsprint(r.tg)
+ end
+end
+function lxml.tag(id) -- tag vs name -> also in l-xml tag->name
+ texsprint(get_id(id).tg or "")
+end
+function lxml.namespace(id) -- or remapped name?
+ local root = get_id(id)
+ texsprint(root.rn or root.ns or "")
+end
+
+--~ function lxml.concat(id,what,separator,lastseparator)
+--~ texsprint(concat(xml.collect_texts(get_id(id),what,true),separator or ""))
+--~ end
+
+function lxml.concatrange(id,what,start,stop,separator,lastseparator) -- test this on mml
+ local t = xml.collect_elements(lxml.id(id),what,true) -- ignorespaces
+ local separator = separator or ""
+ local lastseparator = lastseparator or separator or ""
+ start, stop = (start == "" and 1) or tonumber(start) or 1, (stop == "" and #t) or tonumber(stop) or #t
+ if stop < 0 then stop = #t + stop end -- -1 == last-1
+ for i=start,stop do
+ xmlsprint(t[i])
+ if i == #t then
+ -- nothing
+ elseif i == #t-1 and lastseparator ~= "" then
+ texsprint(tex.ctxcatcodes,lastseparator)
+ elseif separator ~= "" then
+ texsprint(tex.ctxcatcodes,separator)
+ end
+ end
+end
+
+function lxml.concat(id,what,separator,lastseparator)
+ lxml.concatrange(id,what,false,false,separator,lastseparator)
+end
+
+-- string : setup
+-- true : text (no <self></self>)
+-- false : ignore
+-- function : call
+
+-- todo: free self after usage, i.e. after the setup, which
+-- means a call to lua; we can also choose a proper maximum
+-- and cycle or maybe free on demand
+
+-- problems with empty elements
+-- we use a real tex.sprint, else spaces go wrong
+-- maybe just a .. because this happens often
+
+function xml.command(root, command)
+ local tc = type(command)
+ if tc == "string" then
+ -- setup
+ local n = #myself + 1
+ myself[n] = root
+ texsprint(tex.ctxcatcodes,format("\\xmlsetup{%i}{%s}",n,command))
+ elseif tc == "function" then
+ -- function
+ command(root)
+ elseif command == true then
+ -- text (no <self></self>) / so, no mkii fallback then
+ xmltprint(root.dt)
+ elseif command == false then
+ -- ignore
+ else
+ -- fuzzy, so ignore too
+ end
+end
+
+function lxml.setaction(id,pattern,action)
+ for rt, dt, dk in xmlelements(get_id(id),pattern) do
+ dt[dk].command = action
+ end
+end
+
+lxml.trace_setups = false
+
+function lxml.setsetup(id,pattern,setup)
+ local trace = lxml.trace_setups
+ if not setup or setup == "" or setup == "*" or setup == "-" or setup == "+" then
+ for rt, dt, dk in xmlelements(get_id(id),pattern) do
+ local dtdk = dt and dt[dk] or rt
+ local ns, tg = dtdk.rn or dtdk.ns, dtdk.tg
+ local command = (ns == "" and tg) or (ns .. ":" .. tg)
+ if setup == "-" then
+ dtdk.command = false
+ if trace then
+ texio.write_nl(format("lpath matched -> %s -> skipped", command))
+ end
+ elseif setup == "+" then
+ dtdk.command = true
+ if trace then
+ texio.write_nl(format("lpath matched -> %s -> text", command))
+ end
+ else
+ dtdk.command = command
+ if trace then
+ texio.write_nl(format("lpath matched -> %s -> %s", command, command))
+ end
+ end
+ end
+ else
+ local a, b = setup:match("^(.+:)([%*%-])$")
+ if a and b then
+ for rt, dt, dk in xmlelements(get_id(id),pattern) do
+ local dtdk = (dt and dt[dk]) or rt
+ local ns, tg = dtdk.rn or dtdk.ns, dtdk.tg
+ if b == "-" then
+ dtdk.command = false
+ if trace then
+ if ns == "" then
+ texio.write_nl(format("lpath matched -> %s -> skipped", tg))
+ else
+ texio.write_nl(format("lpath matched -> %s:%s -> skipped", ns, tg))
+ end
+ end
+ elseif b == "+" then
+ dtdk.command = true
+ if trace then
+ if ns == "" then
+ texio.write_nl(format("lpath matched -> %s -> text", tg))
+ else
+ texio.write_nl(format("lpath matched -> %s:%s -> text", ns, tg))
+ end
+ end
+ else
+ dtdk.command = a .. tg
+ if trace then
+ if ns == "" then
+ texio.write_nl(format("lpath matched -> %s -> %s", tg, dtdk.command))
+ else
+ texio.write_nl(format("lpath matched -> %s:%s -> %s", ns, tg, dtdk.command))
+ end
+ end
+ end
+ end
+ else
+ if trace then
+ texio.write_nl(format("lpath pattern -> %s -> %s", pattern, setup))
+ end
+ for rt, dt, dk in xmlelements(get_id(id),pattern) do
+ local dtdk = (dt and dt[dk]) or rt
+ dtdk.command = setup
+ if trace then
+ local ns, tg = dtdk.rn or dtdk.ns, dtdk.tg
+ if ns == "" then
+ texio.write_nl(format("lpath matched -> %s -> %s", tg, setup))
+ else
+ texio.write_nl(format("lpath matched -> %s:%s -> %s", ns, tg, setup))
+ end
+ end
+ end
+ end
+ end
+end
+
+function lxml.idx(id,pattern,i) -- hm, hashed, needed?
+ local r = get_id(id)
+ if r then
+ local rp = r.patterns
+ if not rp then
+ rp = { }
+ r.patterns = rp
+ end
+ if not rp[pattern] then
+ rp[pattern] = xml.collect_elements(r,pattern) -- dd, rr
+ end
+ local rpi = rp[pattern] and rp[pattern][i]
+ if rpi then
+ xmlsprint(rpi)
+ end
+ end
+end
+
+function lxml.info(id)
+ id = get_id(id)
+ local ns, tg = id.ns, id.tg
+ if ns and ns ~= "" then -- best make a function
+ tg = ns .. ":" .. tg
+ else
+ tg = tg or "?"
+ end
+ texsprint(tg)
+end
+
+do
+
+ local traverse = xml.traverse
+ local lpath = xml.lpath
+
+ local function command(root,pattern,cmd) -- met zonder ''
+ cmd = cmd:gsub("^([\'\"])(.-)%1$", "%2")
+ traverse(root, lpath(pattern), function(r,d,k)
+ -- this can become pretty large
+ local m = (d and d[k]) or r -- brrr this r, maybe away
+if type(m) == "table" then -- probbaly a bug
+ local n = #myself + 1
+ myself[n] = m
+ texsprint(tex.ctxcatcodes,format("\\xmlsetup{%s}{%s}",n,cmd))
+end
+ end)
+ end
+
+ xml.filters.command = command
+
+ function lxml.command(id,pattern,cmd)
+ command(get_id(id),pattern,cmd)
+ end
+
+end
+
+do
+
+ --~ <?xml version="1.0" standalone="yes"?>
+ --~ <!-- demo.cdx -->
+ --~ <directives>
+ --~ <!--
+ --~ <directive attribute='id' value="100" setup="cdx:100"/>
+ --~ <directive attribute='id' value="101" setup="cdx:101"/>
+ --~ -->
+ --~ <!--
+ --~ <directive attribute='cdx' value="colors" element="cals:table" setup="cdx:cals:table:colors"/>
+ --~ <directive attribute='cdx' value="vertical" element="cals:table" setup="cdx:cals:table:vertical"/>
+ --~ <directive attribute='cdx' value="noframe" element="cals:table" setup="cdx:cals:table:noframe"/>
+ --~ -->
+ --~ <directive attribute='cdx' value="*" element="cals:table" setup="cdx:cals:table:*"/>
+ --~ </directives>
+
+ lxml.directives = { }
+
+ local data = {
+ setup = { },
+ before = { },
+ after = { }
+ }
+
+ function lxml.directives.load(filename)
+ if texmf then
+ local fullname = input.find_file(texmf.instance,filename) or ""
+ if fullname ~= "" then
+ filename = fullname
+ end
+ end
+ local root = xml.load(filename)
+ for r, d, k in xmlelements(root,"directive") do
+ local dk = d[k]
+ local at = dk.at
+ local attribute, value, element = at.attribute or "", at.value or "", at.element or '*'
+ local setup, before, after = at.setup or "", at.before or "", at.after or ""
+ if attribute ~= "" and value ~= "" then
+ local key = format("%s::%s::%s",element,attribute,value)
+ local t = data[key] or { }
+ if setup ~= "" then t.setup = setup end
+ if before ~= "" then t.before = before end
+ if after ~= "" then t.after = after end
+ data[key] = t
+ end
+ end
+ end
+
+ function lxml.directives.setup(root,attribute,element)
+ lxml.directives.handle_setup('setup',root,attribute,element)
+ end
+ function lxml.directives.before(root,attribute,element)
+ lxml.directives.handle_setup('before',root,attribute,element)
+ end
+ function lxml.directives.after(root,attribute,element)
+ lxml.directives.handle_setup('after',root,attribute,element)
+ end
+
+ function lxml.directives.handle_setup(category,root,attribute,element)
+ root = get_id(root)
+ attribute = attribute
+ if attribute then
+ local value = root.at[attribute]
+ if value then
+ if not element then
+ local ns, tg = root.rn or root.ns, root.tg
+ if ns == "" then
+ element = tg
+ else
+ element = ns .. ':' .. tg
+ end
+ end
+ local setup = data[format("%s::%s::%s",element,attribute,value)]
+ if setup then
+ setup = setup[category]
+ end
+ if setup then
+ texsprint(tex.ctxcatcodes,format("\\directsetup{%s}",setup))
+ else
+ setup = data[format("%s::%s::*",element,attribute)]
+ if setup then
+ setup = setup[category]
+ end
+ if setup then
+ texsprint(tex.ctxcatcodes,format("\\directsetup{%s}",setup:gsub('%*',value)))
+ end
+ end
+ end
+ end
+ end
+
+end
+
+function xml.getbuffer(name) -- we need to make sure that commands are processed
+ if not name or name == "" then
+ name = tex.jobname
+ end
+ xml.tostring(xml.convert(concat(buffers.data[name] or {},"")))
+end
+
+function lxml.loadbuffer(id,name)
+ if not name or name == "" then
+ name = tex.jobname
+ end
+ input.starttiming(xml)
+ loaded[id] = xml.convert(buffers.collect(name or id,"\n"))
+ input.stoptiming(xml)
+ return loaded[id], name or id
+end
+
+function lxml.loaddata(id,str)
+ input.starttiming(xml)
+ loaded[id] = xml.convert(str or "")
+ input.stoptiming(xml)
+ return loaded[id], id
+end
+
+-- for the moment here:
+
+lxml.set_verbatim("\\xmlcdatabefore", "\\xmlcdataafter", "\\xmlcdataobeyedline", "\\xmlcdataobeyedspace")
+lxml.set_cdata()
+
+do
+
+ local traced = { }
+
+ function lxml.trace_text_entities(str)
+ return str:gsub("&(.-);",function(s)
+ traced[s] = (traced[s] or 0) + 1
+ return "["..s.."]"
+ end)
+ end
+
+ function lxml.show_text_entities()
+ for k,v in ipairs(table.sortedkeys(traced)) do
+ local h = v:match("^#x(.-)$")
+ if h then
+ local d = tonumber(h,16)
+ local u = unicode.utf8.char(d)
+ texio.write_nl(format("entity: %s / %s / %s / n=%s",h,d,u,traced[v]))
+ else
+ texio.write_nl(format("entity: %s / n=%s",v,traced[v]))
+ end
+ end
+ end
+
+end
+
+-- yes or no ...
+
+do
+
+ local function with_elements_only(e,handle)
+ if e and handle then
+ local etg = e.tg
+ if etg then
+ if e.special and etg ~= "@rt@" then
+ if resthandle then
+ resthandle(e)
+ end
+ else
+ local edt = e.dt
+ if edt then
+ for i=1,#edt do
+ local e = edt[i]
+ if type(e) == "table" then
+ handle(e)
+ with_elements_only(e,handle)
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+
+ local function with_elements_only(e,handle,depth)
+ if e and handle then
+ local edt = e.dt
+ if edt then
+ depth = depth or 0
+ for i=1,#edt do
+ local e = edt[i]
+ if type(e) == "table" then
+ handle(e,depth)
+ with_elements_only(e,handle,depth+1)
+ end
+ end
+ end
+ end
+ end
+
+ xml.with_elements_only = with_elements_only
+
+ local function to_text(e)
+ if e.command == nil then
+ local etg = e.tg
+ if etg and e.special and etg ~= "@rt@" then
+ e.command = false -- i.e. skip
+ else
+ e.command = true -- i.e. no <self></self>
+ end
+ end
+ end
+ local function to_none(e)
+ if e.command == nil then
+ e.command = false -- i.e. skip
+ end
+ end
+
+ -- can be made faster: just recurse over whole table, todo
+
+ function lxml.set_command_to_text(id)
+ xml.with_elements_only(get_id(id),to_text)
+ end
+
+ function lxml.set_command_to_none(id)
+ xml.with_elements_only(get_id(id),to_none)
+ end
+
+ function lxml.get_command_status(id)
+ local status, stack = {}, {}
+ local function get(e,d)
+ local ns, tg = e.ns, e.tg
+ local name = tg
+ if ns ~= "" then name = ns .. ":" .. tg end
+ stack[d] = name
+ local ec = e.command
+ if ec == true then
+ ec = "system: text"
+ elseif ec == false then
+ ec = "system: skip"
+ elseif ec == nil then
+ ec = "system: not set"
+ elseif type(ec) == "string" then
+ ec = "setup: " .. ec
+ else -- function
+ ec = tostring(ec)
+ end
+ local tag = table.concat(stack," => ",1,d)
+ local s = status[tag]
+ if not s then
+ s = { }
+ status[tag] = s
+ end
+ s[ec] = (s[ec] or 0) + 1
+ end
+ if id then
+ xml.with_elements_only(get_id(id),get)
+ return status
+ else
+ local t = { }
+ for id, _ in pairs(lxml.loaded) do
+ t[id] = lxml.get_command_status(id)
+ end
+ return t
+ end
+ end
+
+end
diff --git a/Master/texmf-dist/tex/context/base/lxml-ini.tex b/Master/texmf-dist/tex/context/base/lxml-ini.tex
new file mode 100644
index 00000000000..c6cd60b8929
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/lxml-ini.tex
@@ -0,0 +1,304 @@
+%D \module
+%D [ file=lxml-ini,
+%D version=2007.08.17,
+%D title=\CONTEXT\ \LUA\ based \XML\ Support,
+%D subtitle=Initialization,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{Context L-XML Macros (initialization)}
+
+\registerctxluafile{lxml-ini}{1.001}
+
+\unprotect
+
+\def\xmlall #1#2{\ctxlua{lxml.all("#1","#2")}}
+\def\xmlatt #1#2{\ctxlua{lxml.attribute("#1","/","#2")}}
+\def\xmlattdef #1#2#3{\ctxlua{lxml.attribute("#1","/","#2","#3")}}
+\def\xmlattribute #1#2#3{\ctxlua{lxml.attribute("#1","#2","#3")}}
+\def\xmlattributedef #1#2#3#4{\ctxlua{lxml.attribute("#1","#2","#3","#4")}}
+\def\xmlchecknamespace #1#2#3{\ctxlua{xml.check_namespace(lxml.id("#1"),"#2","#3")}} % element
+\def\xmlcommand #1#2#3{\ctxlua{lxml.command("#1","#2","#3")}}
+\def\xmlconcat #1#2#3{\ctxlua{lxml.concat("#1","#2",[[\detokenize{#3}]])}}
+\def\xmlconcatrange#1#2#3#4#5{\ctxlua{lxml.concatrange("#1","#2","#3","#4",[[\detokenize{#5}]])}}
+\def\xmlcontent #1#2{\ctxlua{lxml.content("#1","#2")}}
+\def\xmlcount #1#2{\ctxlua{lxml.count("#1","#2")}}
+\def\xmldelete #1#2{\ctxlua{xml.delete(lxml.id("#1"),"#2")}}
+\def\xmldirectives #1{\ctxlua{lxml.directives.setups("#1")}}
+\def\xmlfilter #1#2{\ctxlua{lxml.filter("#1","#2")}}
+\def\xmlfirst #1#2{\ctxlua{lxml.first("#1","#2")}}
+\def\xmlflush #1{\ctxlua{lxml.flush("#1")}}
+\def\xmldirect #1{\ctxlua{lxml.direct("#1")}} % in loops, not dt but root
+\def\xmlidx #1#2#3{\ctxlua{lxml.idx("#1","#2",\number#3)}}
+\def\xmlinclude #1#2#3{\ctxlua{lxml.include("#1","#2","#3",true)}}
+\def\xmlindex #1#2#3{\ctxlua{lxml.index("#1","#2",\number#3)}}
+\def\xmlinfo #1{\hbox{\ttxx[\ctxlua{lxml.info("#1")}]}}
+\def\xmlshow #1{\startpacked\ttx\xmlverbatim{#1}\stoppacked}
+\def\xmllast #1#2{\ctxlua{lxml.last("#1","#2")}}
+\def\xmlload #1#2{\ctxlua{lxml.load("#1","#2")}}
+\def\xmlloadbuffer #1#2{\ctxlua{lxml.loadbuffer("#1","#2")}}
+\def\xmlloaddata #1#2{\ctxlua{lxml.loaddata("#1",\!!bs#2\!!es)}}
+\def\xmlloaddirectives #1{\ctxlua{lxml.directives.load("#1")}}
+\def\xmlname #1{\ctxlua{lxml.name("#1")}}
+\def\xmlnamespace #1{\ctxlua{lxml.namespace("#1")}}
+\def\xmlnonspace #1#2{\ctxlua{lxml.nonspace("#1","#2")}}
+\def\xmlraw #1#2{\ctxlua{lxml.raw("#1","#2")}}
+\def\xmlsnippet #1#2{\ctxlua{lxml.snippet("#1",#2)}}
+\def\xmlregisterns #1#2{\ctxlua{xml.registerns("#1","#2")}} % document
+\def\xmlremapname #1#2#3#4{\ctxlua{xml.remapname(lxml.id("#1"),"#2","#3","#4")}} % element
+\def\xmlremapnamespace #1#2#3{\ctxlua{xml.rename_space(lxml.id("#1"),"#2","#3")}} % document
+\def\xmlsetfunction #1#2#3{\ctxlua{lxml.setaction("#1","#2",#3)}}
+\def\xmlsetsetup #1#2#3{\ctxlua{lxml.setsetup("#1","#2","#3")}}
+\def\xmlstrip #1#2{\ctxlua{lxml.strip("#1","#2")}}
+\def\xmlstripped #1#2{\ctxlua{lxml.stripped("#1","#2")}}
+\def\xmltag #1{\ctxlua{lxml.tag("#1")}}
+\def\xmltext #1#2{\ctxlua{lxml.text("#1","#2")}}
+\def\xmltags #1#2{\ctxlua{lxml.tags("#1","#2")}}
+\def\xmlutfize #1{\ctxlua{lxml.utfize("#1")}}
+\def\xmlverbatim #1{\ctxlua{lxml.verbatim("#1")}}
+
+%def\xmldoifelse #1#2{\ctxlua{cs.testcase(xml.found(lxml.id("#1"),"#2",false))}}
+%def\xmldoifelsetext #1#2{\ctxlua{cs.testcase(xml.found(lxml.id("#1"),"#2",true ))}}
+
+% todo: \xmldoifelseattribute
+
+\def\xmldoifelse #1#2{\ctxlua{commands.doifelse(xml.found(lxml.id("#1"),"#2",false))}}
+\def\xmldoifelsetext #1#2{\ctxlua{commands.doifelse(xml.found(lxml.id("#1"),"#2",true ))}}
+\def\xmldoif #1#2{\ctxlua{commands.doif (xml.found(lxml.id("#1"),"#2",false))}}
+\def\xmldoiftext #1#2{\ctxlua{commands.doif (xml.found(lxml.id("#1"),"#2",true ))}}
+\def\xmldoifnot #1#2{\ctxlua{commands.doifnot (xml.found(lxml.id("#1"),"#2",false))}}
+\def\xmldoifnottext #1#2{\ctxlua{commands.doifnot (xml.found(lxml.id("#1"),"#2",true ))}}
+
+\def\xmldefaulttotext #1{\ifcase\xmlprocessingmode\or\or \ctxlua{lxml.set_command_to_text("#1")}\fi}
+\def\xmldefaulttonone #1{\ifcase\xmlprocessingmode\or\or\or\ctxlua{lxml.set_command_to_none("#1")}\fi}
+
+% \startxmlsetups xml:include
+% \xmlinclude{main}{include}{filename|href}
+% \stopxmlsetups
+%
+% \xmlprependsetup{xml:include}
+
+\let\xmlgrab\xmlsetsetup
+
+\def\xmlsetup#1#2% % we pass the reference so that we have access to the frozen number
+ {\def\xmlself{#1}% % by using #1 inside a setup
+ \setupwithargument{#2}{#1}}
+
+\newtoks \registeredxmlsetups
+
+\def\xmlappendsetup #1{\appendtoksonce \directsetup{#1}\to\registeredxmlsetups} % to be done, made faster
+\def\xmlprependsetup#1{\prependtoksonce\directsetup{#1}\to\registeredxmlsetups} % to be done, made faster
+
+\let\xmlregistersetup\xmlappendsetup
+
+\def\xmlregisteredsetups
+ {\xmlstarttiming
+ \the\registeredxmlsetups\registeredxmlsetups\emptytoks
+ \xmldefaulttotext\xmldocument % after include
+ \xmlstoptiming}
+
+\chardef\xmlprocessingmode=0 % 0=mixed, 1=mkivonly, 2=mkivonly-default-text, 3=mkivonly-default-none
+
+\def\xmlstarttiming{\ctxlua{input.starttiming(lxml)}}
+\def\xmlstoptiming {\ctxlua{input.stoptiming (lxml)}}
+
+\def\doxmlprocess#1#2#3#4%
+ {\begingroup
+ \def\xmldocument{#2}%
+ #1{#2}{#3}%
+ \ifcase\xmlprocessingmode
+ \enableXML
+ \else
+ \setcatcodetable\notcatcodes
+ \fi
+ \doifelsenothing{#4}
+ {\directsetup{xml:process}}
+ {\directsetup{#4}}%
+ \endgroup}
+
+\def\xmlprocessfile {\doxmlprocess\xmlload}
+\def\xmlprocessdata {\doxmlprocess\xmlloaddata}
+\def\xmlprocessbuffer{\doxmlprocess\xmlloadbuffer}
+\let\xmlprocess \xmlprocessfile
+
+\startsetups xml:process
+ \xmlregisteredsetups
+ \xmlall\xmldocument{/}
+\stopsetups
+
+\long\def\xmlloop#1#2#3%
+ {\def\xmli##1##2{\xmlidx{#1}{#2/##1}{##2}}%
+ \dorecurse{\xmlcount{#1}{#2}}{#3}}
+
+\long\def\xmlconnect#1#2#3% inefficient
+ {\scratchcounter\xmlcount{#1}{#2}\relax
+ \ifcase\scratchcounter \or
+ \xmlall{#1}{#2}%
+ \else
+ \dorecurse \scratchcounter {
+ \ifnum\recurselevel>\plusone#3\fi
+ \xmlidx{#1}{#2}{\recurselevel}
+ }
+ \fi}
+
+\def\xmlcdataobeyedline {\obeyedline}
+\def\xmlcdataobeyedspace{\strut\obeyedspace}
+\def\xmlcdatabefore {\bgroup\tt}
+\def\xmlcdataafter {\egroup}
+
+% verbatim (dodo:pre/post whitespace, maybe splot verbatim and
+% cdata commands), experimental:
+%
+% \xmlsetfunction{main}{verbatim}{lxml.displayverbatim}
+% \xmlsetfunction{main}{verb} {lxml.inlineverbatim}
+
+% \def\startxmldisplayverbatim[#1]{}
+% \def\stopxmldisplayverbatim {}
+% \def\startxmlinlineverbatim [#1]{}
+% \def\stopxmlinlineverbatim {}
+
+% we use an xml: namespace so one has to define a suitable verbatim, say
+%
+% \definetyping[xml:verbatim][typing]
+%
+% this is experimental!
+
+\def\startxmldisplayverbatim[#1]%
+ {\startpacked % \begingroup
+ \let\currenttypingclass\??tp
+ \edef\currenttyping{xml:#1}%
+ \def\stopxmldisplayverbatim
+ {\endofverbatimlines
+ \stoppacked} % \endgroup
+ \mkinitializeverbatim
+ \beginofverbatimlines}
+
+\def\startxmlinlineverbatim[#1]%
+ {\begingroup
+ \let\currenttypingclass\??ty
+ \edef\currenttyping{xml:#1}%
+ \let\stopxmldisplayverbatim\endgroup
+ \mkinitializeverbatim}
+
+% will move but is developed for xml
+
+\newtoks \collectingtoks
+
+\def\startcollect#1\stopcollect
+ {\collectingtoks\@EA{\the\collectingtoks#1}}
+
+\def\startexpandedcollect#1\stopexpandedcollect
+ {\expanded{\collectingtoks{\the\collectingtoks#1}}}
+
+\def\startcollecting{\collectingtoks\emptytoks}
+\def\stopcollecting {\the\collectingtoks}
+
+\def\inlinemessage #1{\dontleavehmode{\tttf#1}}
+\def\displaymessage#1{\blank\inlinemessage{#1}\blank}
+
+% entities
+
+\def\xmlresolveentities
+ {\ctxlua{xml.set_text_cleanup(xml.resolve_text_entities)}}
+
+\def\xmltraceentities
+ {\ctxlua{xml.set_text_cleanup(lxml.trace_text_entities)}%
+ \appendtoks\ctxlua{lxml.show_text_entities()}\to\everygoodbye}
+
+% processing instructions
+
+\def\xmlcontextdirective#1% kind class key value
+ {\executeifdefined{xml#1directive}\gobblethreearguments}
+
+% brrrr, give this at the top of a style that needs to stub mkiv loading
+%
+% this will change
+
+\def\processXMLfileMKIV
+ {\dosingleempty\doprocessXMLfileMKIV}
+
+\let\normalprocessXMLfilegrouped\processXMLfilegrouped
+
+\def\doprocessXMLfileMKIV[#1]%
+ {\def\processXMLfilegrouped##1%
+ {\let\processXMLfilegrouped\normalprocessXMLfilegrouped
+ \doifelsenothing{#1}{\xmlprocess{main}{##1}{}}{\xmlprocess{#1}{##1}{}}}}
+
+\protect \endinput
+
+% \xmlload{main}{normreader.xml}
+
+% \xmlattribute{main}{/subject/information/materialoverview/attribute}{pocketbook}
+% \xmltext{main}{/subject/information/materialoverview/@pocketbook}
+
+% \dorecurse{\xmlflush{main}{/subject/blabla/count()}}
+% {\ifnum\recurselevel=\xmlflush{main}{/subject/blabla/count()}\relax
+% \removeunwantedspaces and\space\ignorespaces
+% \else\ifnum\recurselevel>1
+% \removeunwantedspaces,\space\ignorespaces
+% \fi
+% \xmlflush{main}{/subject/blabla/index(\recurselevel})}
+
+% \def\xmljoin{main}{/subject/information/authors/author}{,}{and}
+% table.join(t,1,#t-1,", ") .. " and " .. t[#t]
+
+% % An example by Wolfgang Schuster:
+%
+% \startxmlsetups xml:mysetups
+% \xmlsetsetup{\xmldocument}{section}{xml:*}
+% \xmlsetsetup{\xmldocument}{title|p}{xml:*}
+% \stopxmlsetups
+%
+% \xmlregistersetup{xml:mysetups}
+%
+% \newcounter\sectionlevel
+%
+% \startxmlsetups xml:section
+% \increment\sectionlevel
+% \xmlflush{#1}
+% \decrement\sectionlevel
+% \stopxmlsetups
+%
+% \startxmlsetups xml:title
+% \ifcase\sectionlevel
+% \or\chapter {\xmlflush{#1}}
+% \or\section {\xmlflush{#1}}
+% \or\subsection {\xmlflush{#1}}
+% \or\subsubsection{\xmlflush{#1}}
+% \fi
+% \stopxmlsetups
+%
+% \startxmlsetups xml:p
+% \xmlflush{#1}\endgraf
+% \stopxmlsetups
+%
+% \startbuffer[section]
+% <!-- An example by Wolfgang Schuster: -->
+% <section>
+% <title>Section 1</title>
+% <p>text text text text text text text text</p>
+% <section>
+% <title>Subsection 1</title>
+% <p>text text text text text text text text</p>
+% </section>
+% <section>
+% <title>Subsection 2</title>
+% <p>text text text text text text text text</p>
+% </section>
+% <section>
+% <title>Subsection 3</title>
+% <p>text text text text text text text text</p>
+% </section>
+% <title>Section 2</title>
+% <p>text text text text text text text text</p>
+% </section>
+% \stopbuffer
+%
+% \starttext
+% \xmlprocessbuffer{main}{section}{}
+% \stoptext
diff --git a/Master/texmf-dist/tex/context/base/m-chart.tex b/Master/texmf-dist/tex/context/base/m-chart.tex
index 2a29333b197..f5d0ea7b90b 100644
--- a/Master/texmf-dist/tex/context/base/m-chart.tex
+++ b/Master/texmf-dist/tex/context/base/m-chart.tex
@@ -13,7 +13,8 @@
% to do: \localpushmacro/\localpopmacro (dohandleflowchart etc)
-% will be redone with layers and dimexpr
+% will be redone with layers and dimexpr ro even better, by just using
+% textext
%D This is an experimental module. Pieces of code will be moved
%D to other modules. More features are possible but will be
@@ -1207,8 +1208,8 @@
\def\typeFLOWchart[#1]%
{\bgroup
\def\dohandleflowchart[##1][##2]{\typeFLOWbuffer{##1}}%
- \convertargument\startFLOWchart[#1]\to\firstverbatimfileline
- \convertargument \stopFLOWchart\to\lastverbatimfileline
+ \defconvertedargument\firstverbatimfileline{\startFLOWchart[#1]}%
+ \defconvertedargument\lastverbatimfileline {\stopFLOWchart}%
\getvalue{\@FLOW@-#1}
\egroup}
diff --git a/Master/texmf-dist/tex/context/base/m-chemic.tex b/Master/texmf-dist/tex/context/base/m-chemic.tex
index cfefdf83f4a..25eb62db548 100644
--- a/Master/texmf-dist/tex/context/base/m-chemic.tex
+++ b/Master/texmf-dist/tex/context/base/m-chemic.tex
@@ -9,17 +9,15 @@
%D suggestions={Tobias Burnus, Dirk Kuypers \& Ton Otten}]
%C
%C This module is part of the \CONTEXT\ macro||package and is
-%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
-%C details.
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
-\ifx\beginpicture\undefined
- \let\normalgrid\grid
- \let\normalaxis\axis
- \input pictex.tex \relax
- \let\pictexgrid\grid
- \let\pictexaxis\axis
- \let\grid\normalgrid
- \let\axis\normalaxis
+\ifx\directlua\undefined
+ \ifx\psaxes\undefined \ifx\beginpicture\undefined
+ \usemodule[pictex]
+ \fi \fi
+\else
+ \usemodule[pictex]
\fi
\input ppchtex.tex \relax
diff --git a/Master/texmf-dist/tex/context/base/m-cweb.tex b/Master/texmf-dist/tex/context/base/m-cweb.tex
index 9aa630aa6ff..c416c9b3663 100644
--- a/Master/texmf-dist/tex/context/base/m-cweb.tex
+++ b/Master/texmf-dist/tex/context/base/m-cweb.tex
@@ -27,9 +27,9 @@
\def\dofindfirstcharacter#1#2%
{\def\firstcharacter{}%
\bgroup
- \convertargument#2\to\ascii
- \let\next=\dodofindfirstcharacter
- \let\handlecase=#1
+ \defconvertedargument\ascii{#2}%
+ \let\next\dodofindfirstcharacter
+ \let\handlecase#1%
\expandafter\next\ascii\relax}
\def\normalcase#1%
@@ -256,7 +256,7 @@
\defCWEBmacro\|#1%
{\leavevmode\hbox{$#1$}}
-%D \macros{\string&}{}
+%D \macros{\string\&}{}
%D
%D \CWEBquote boldface type for reserved words.
@@ -1135,7 +1135,7 @@
\fi
\message{*\secno}% progress report
\makesectionformat % context
- \convertargument#3\to\ascii
+ \defconvertedargument\ascii{#3}%
\edef\next%
{\write\CWEBcont % write to contents file
{\string\ZZ{\ascii}{#1}{\secno}%
@@ -1251,7 +1251,7 @@
\def\9##1{##1}% hold this one
\catcode`*=11
\expandafter\def\expandafter\entry\expandafter{#1}%
- \convertcommand\entry\to\ascii
+ \defconvertedcommand\ascii\entry
\expanded{\FINDFIRSTCHARACTER{\ascii}}%
\doifnot{\currentCWEBindexentry}{\firstcharacter}
{\doifnot{\firstcharacter}{*} % signal for \firstbunch
diff --git a/Master/texmf-dist/tex/context/base/m-database.tex b/Master/texmf-dist/tex/context/base/m-database.tex
index 0486a062f50..6cb9a6b6c91 100644
--- a/Master/texmf-dist/tex/context/base/m-database.tex
+++ b/Master/texmf-dist/tex/context/base/m-database.tex
@@ -255,7 +255,7 @@
\ifx\currentlistquotechar\empty%
\doprocessseplist#1\relax
\else%
- \convertargument#1\to\csvdata%
+ \defconvertedargument\csvdata{#1}%
\expanded{\processquotedlist{}{\noexpand\end}%
{\currentlistseparator}{\currentlistquotechar}%
\noexpand\doprocessseparatedquoteditem \csvdata\currentlistseparator\noexpand\end}%
diff --git a/Master/texmf-dist/tex/context/base/m-edtsnc.tex b/Master/texmf-dist/tex/context/base/m-edtsnc.tex
index d3a697b25b9..0926f44886a 100644
--- a/Master/texmf-dist/tex/context/base/m-edtsnc.tex
+++ b/Master/texmf-dist/tex/context/base/m-edtsnc.tex
@@ -2,7 +2,7 @@
%D [ file=m-editsnc,
%D version=2003.12.23,
%D title=\CONTEXT\ Modules,
-%D subtitle=Editor Synchronization
+%D subtitle=Editor Synchronization,
%D author={Hans Hagen \& Ton Otten},
%D date=\currentdate,
%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
diff --git a/Master/texmf-dist/tex/context/base/m-narrowtt.tex b/Master/texmf-dist/tex/context/base/m-narrowtt.tex
index b11aaefb5dd..6c14c97c529 100644
--- a/Master/texmf-dist/tex/context/base/m-narrowtt.tex
+++ b/Master/texmf-dist/tex/context/base/m-narrowtt.tex
@@ -14,17 +14,18 @@
%D Test file
%D
%D \starttyping
+%D \startTEX
%D \usemodule[narrowtt]
%D \starttext
%D \starttyping
%D Test test test.
%D \stoptyping
-%D test \type {test} test \ntype{test} test
-%D \startntyping
+%D test \type {test} test \type{test} test
+%D \starttyping
%D Test test test.
-%D \stopntyping
-%D \stoptext
%D \stoptyping
+%D \stoptext
+%D \stopTEX
\unprotect
diff --git a/Master/texmf-dist/tex/context/base/m-newmat.tex b/Master/texmf-dist/tex/context/base/m-newmat.tex
index eb3208d9458..c36119cd41c 100644
--- a/Master/texmf-dist/tex/context/base/m-newmat.tex
+++ b/Master/texmf-dist/tex/context/base/m-newmat.tex
@@ -53,7 +53,7 @@
%D have the symbol available. \symbol[qed]
\def\QED{\symbol[qed]}
-
+
%D \macros
%D {genfrac}
%D
@@ -102,20 +102,20 @@
%\def\tfrac {\genfrac\empty\empty\empty\textstyle}
%\def\frac {\genfrac\empty\empty\empty\donothing}
-\def\dfrac {\genfrac{}{}{}\displaystyle}
-\def\tfrac {\genfrac{}{}{}\textstyle}
-\def\frac {\genfrac{}{}{}\donothing}
+\def\dfrac {\genfrac\empty\empty{}\displaystyle}
+\def\tfrac {\genfrac\empty\empty{}\textstyle}
+\def\frac {\genfrac\empty\empty{}\donothing}
\def\dbinom{\genfrac()\zeropoint\displaystyle}
\def\tbinom{\genfrac()\zeropoint\textstyle}
\def\binom {\genfrac()\zeropoint\donothing}
-\def\xfrac {\genfrac{}{}{}\scriptstyle}
-\def\xxfrac{\genfrac{}{}{}\scriptscriptstyle}
+\def\xfrac {\genfrac\empty\empty{}\scriptstyle}
+\def\xxfrac{\genfrac\empty\empty{}\scriptscriptstyle}
%D Better:
-\unexpanded\def\frac#1#2{\mathematics{\genfrac{}{}{}\donothing{#1}{#2}}}
+\unexpanded\def\frac#1#2{\mathematics{\genfrac\empty\empty{}\donothing{#1}{#2}}}
%D [HH] This shows up as:
%D
@@ -127,7 +127,7 @@
%D \typebuffer
%D
%D \getbuffer
-
+
%D \macros
%D {text}
%D
@@ -174,7 +174,7 @@
%D \typebuffer
%D
%D \getbuffer
-
+
%D \macros
%D {mathhexbox}
%D
@@ -191,7 +191,7 @@
\def\boxed
{\ifmmode\expandafter\mframed\else\expandafter\framed\fi}
-
+
%D \macros
%D {cfrac}
%D
@@ -243,9 +243,45 @@
%D \typebuffer
%D
%D \getbuffer
-
+
+%D \macros
+%D {splitfrac, splitdfrac}
+%D
+%D Occasionally one needs to typeset multi||line fractions.
+%D These commands use \tex{genfrac} to create such fractions.
+%D
+%D \startbuffer
+%D \startformula
+%D a=\frac{
+%D \splitfrac{xy + xy + xy + xy + xy}
+%D {+ xy + xy + xy + xy}
+%D }
+%D {z}
+%D =\frac{
+%D \splitdfrac{xy + xy + xy + xy + xy}
+%D {+ xy + xy + xy + xy}
+%D }
+%D {z}
+%D \stopformula
+%D \stopbuffer
+%D
+%D \typebuffer \getbuffer
+%D
+%D These macros are based on Michael J.~Downes posting on
+%D comp.text.tex on 2001/12/06
+
+\def\splitfrac#1#2%
+ {\genfrac\empty\empty\zeropoint\textstyle%
+ {\textstyle#1\quad\hfill}%
+ {\textstyle\hfill\quad\mathstrut#2}}
+
+\def\splitdfrac#1#2%
+ {\genfrac\empty\empty\zeropoint\displaystyle%
+ {#1\quad\hfill}
+ {\hfill\quad\mathstrut #2}}
+
\protect \endinput
-
+
%D \macros
%D {startsubarray,substack,startsmallmatrix}
%D
diff --git a/Master/texmf-dist/tex/context/base/m-pdfsnc.tex b/Master/texmf-dist/tex/context/base/m-pdfsnc.tex
index 81221842735..da59ab5d800 100644
--- a/Master/texmf-dist/tex/context/base/m-pdfsnc.tex
+++ b/Master/texmf-dist/tex/context/base/m-pdfsnc.tex
@@ -2,7 +2,7 @@
%D [ file=m-pdfsnc,
%D version=2003.12.23,
%D title=\CONTEXT\ Modules,
-%D subtitle=Editor Synchronization
+%D subtitle=Editor Synchronization,
%D author={Hans Hagen \& Ton Otten},
%D date=\currentdate,
%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
diff --git a/Master/texmf-dist/tex/context/base/m-steps.tex b/Master/texmf-dist/tex/context/base/m-steps.tex
index 8129d66996b..1e2f5d97d62 100644
--- a/Master/texmf-dist/tex/context/base/m-steps.tex
+++ b/Master/texmf-dist/tex/context/base/m-steps.tex
@@ -218,7 +218,7 @@
%D \def\startSTEPchart%
%D {\bgroup
%D \resetMPdrawing
-%D \increment\noftabpositions % begin of preroll
+%D \advance\noftabpositions\plusone % begin of preroll
%D \startMPdrawing
%D input mp-step ;
%D begin_step_chart ;
@@ -252,7 +252,7 @@
%D anchor_box(\MPpos{\tbPOSprefix origin}) ;
%D \stopMPdrawing
%D \MPdrawingdonetrue
-%D \decrement\noftabpositions % end of preroll
+%D \advance\noftabpositions\minusone % end of preroll
%D \setbox0=\vbox
%D {\getMPdrawing}
%D \resetMPdrawing
diff --git a/Master/texmf-dist/tex/context/base/m-streams.tex b/Master/texmf-dist/tex/context/base/m-streams.tex
index c1ef994ff55..9d7e8d7dd98 100644
--- a/Master/texmf-dist/tex/context/base/m-streams.tex
+++ b/Master/texmf-dist/tex/context/base/m-streams.tex
@@ -68,6 +68,9 @@
%D \SwitchToRight \dorecurse{10}{\dontleavehmode{\bs\RecurseLevel:r \begstrut \input davis \endstrut \endgraf}}
%D \SwitchToNormal \SynchronizeLeftAndRight
%D }
+%D
+%D \FlushLeftAndRight
+%D
%D \stoptext
%D \stoptyping
%D
diff --git a/Master/texmf-dist/tex/context/base/m-timing.tex b/Master/texmf-dist/tex/context/base/m-timing.tex
new file mode 100644
index 00000000000..792cc67f462
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/m-timing.tex
@@ -0,0 +1,249 @@
+%D \module
+%D [ file=m-timing,
+%D version=2007.12.23,
+%D title=\CONTEXT\ Modules,
+%D subtitle=Timing,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright=Hans Hagen]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\ifx\ShowNamedUsage\undefined \else \endinput \fi
+
+%D Written at the end of 2007, this module is dedicated to Taco. Reaching this
+%D point in \LUATEX\ was a non trivial effort. By visualizing a bit what happens
+%D when pages come out of \LUATEX, you may get an idea what is involved. It took
+%D much time an dedication to reach this point in the development. Add to that
+%D those daily Skype intense discussion, testing and debugging moments. Time flies
+%D but progress is impressive. The motto of this module could be: what you see
+%D is what you get. An there is much more to come \unknown.
+
+% \usemodule[timing]
+% \setupcolors[state=start]
+% \starttext
+% \dorecurse{200}{\input tufte \par} \ShowUsage{}
+% \stoptext
+
+\definecolor[usage:line] [darkred]
+\definecolor[usage:time] [darkblue]
+\definecolor[usage:frame][darkgray]
+
+\startluacode
+do
+
+ document = document or { }
+ document.progress = document.progress or { }
+
+ local defaultfilename = tex.jobname .. "-luatex-progress"
+
+ local params = {
+ "cs_count",
+ "dyn_used",
+ "elapsed_time",
+ "luabytecode_bytes",
+ "luastate_bytes",
+ "max_buf_stack",
+ "obj_ptr",
+ "pdf_mem_ptr",
+ "pdf_mem_size",
+ "pdf_os_cntr",
+ "pool_ptr",
+ "str_ptr",
+ }
+
+ -- storage
+
+ local last = os.clock()
+ local data = { }
+
+ function document.progress.save()
+ local f = io.open((name or defaultfilename) .. ".lut","w")
+ if f then
+ f:write(table.serialize(data,true))
+ f:close()
+ data = { }
+ end
+ end
+
+ function document.progress.store()
+ local c = os.clock()
+ local t = {
+ elapsed_time = c - last,
+ node_memory = tex.node_mem_status(),
+ }
+ for k, v in pairs(params) do
+ if status[v] then t[v] = status[v] end
+ end
+ data[#data+1] = t
+ last = c
+ end
+
+ -- conversion
+
+ local processed = { }
+
+ function document.progress.bot(name,tag)
+ local d = document.progress.convert(name)
+ return d.bot[tag] or 0
+ end
+ function document.progress.top(name,tag)
+ local d = document.progress.convert(name)
+ return d.top[tag] or 0
+ end
+ function document.progress.pages(name,tag)
+ local d = document.progress.convert(name)
+ return d.pages or 0
+ end
+ function document.progress.path(name,tag)
+ local d = document.progress.convert(name)
+ return d.paths[tag] or "origin"
+ end
+ function document.progress.nodes(name)
+ local d = document.progress.convert(name)
+ return d.names or { }
+ end
+ function document.progress.parameters(name)
+ local d = document.progress.convert(name)
+ return params -- shared
+ end
+
+ function document.progress.convert(name)
+ name = ((name ~= "") and name) or defaultfilename
+ if not processed[name] then
+ local names, top, bot, pages, paths, keys = { }, { }, { }, 0, { }, { }
+ local data = io.loaddata(name .. ".lut")
+ if data then data = loadstring(data) end
+ if data then data = data() end
+ if data then
+ pages = #data
+ if pages > 1 then
+ local factor = 100
+ for k,v in ipairs(data) do
+ for k,v in pairs(v.node_memory) do
+ keys[k] = true
+ end
+ end
+ for k,v in ipairs(data) do
+ local m = v.node_memory
+ for k, _ in pairs(keys) do
+ if not m[k] then m[k] = 0 end
+ end
+ end
+ local function path(tag,subtag)
+ local b, t, s = nil, nil, { }
+ for k,v in ipairs(data) do
+ local v = (subtag and v[tag][subtag]) or v[tag]
+ if v then
+ v = tonumber(v)
+ if b then
+ if v > t then t = v end
+ if v < b then b = v end
+ else
+ t = v
+ b = v
+ end
+ s[k] = v
+ else
+ s[k] = 0
+ end
+ end
+ local tagname = subtag or tag
+ top[tagname] = (string.format("%.3f",t)):gsub("%.000$","")
+ bot[tagname] = (string.format("%.3f",b)):gsub("%.000$","")
+ local delta = t-b
+ if delta == 0 then
+ delta = 1
+ else
+ delta = factor/delta
+ end
+ for k, v in ipairs(s) do
+ s[k] = "(" .. k .. "," .. (v-b)*delta .. ")"
+ end
+ paths[tagname] = table.concat(s,"--")
+ end
+ for _, tag in pairs(params) do
+ path(tag)
+ end
+ for tag, _ in pairs(keys) do
+ path("node_memory",tag)
+ names[#names+1] = tag
+ end
+ pages = pages - 1
+ end
+ end
+ table.sort(names)
+ processed[name] = {
+ names = names,
+ top = top,
+ bot = bot,
+ pages = pages,
+ paths = paths,
+ }
+ end
+ return processed[name]
+ end
+
+ function document.progress.show(filename,parameters,nodes,other)
+ for n, name in pairs(parameters or document.progress.parameters(filename)) do
+ tex.sprint(tex.ctxcatcodes,string.format("\\ShowNamedUsage{%s}{%s}{%s}",filename or defaultfilename,name,other or ""))
+ end
+ for n, name in pairs(nodes or document.progress.nodes(filename)) do
+ tex.sprint(tex.ctxcatcodes,string.format("\\ShowNamedUsage{%s}{%s}{%s}",filename or defaultfilename,name,other or ""))
+ end
+ end
+
+end
+\stopluacode
+
+% \everyfirstshipout
+
+\appendtoks\ctxlua{document.progress.store()}\to\everystarttext
+\appendtoks\ctxlua{document.progress.store()}\to\everyshipout
+
+\ctxlua{table.insert(input.stop_actions, function() document.progress.save() end)}
+
+\def\ShowNamedUsage#1#2#3%
+ {\setbox\scratchbox\vbox\bgroup\startMPcode
+ begingroup ; save p, q, b, h, w ;
+ path p, q, b ; numeric h, w ;
+ p := \ctxlua{tex.sprint(document.progress.path("#1","#2"))} ;
+ if bbwidth(p) > 1 :
+ h := 100 ; w := 2 * h ;
+ w := \the\textwidth-3pt ; % correct for pen
+ p := p xstretched w ;
+ b := boundingbox (llcorner p -- llcorner p shifted (w,h)) ;
+ pickup pencircle scaled 3pt ; linecap := butt ;
+ draw b withcolor \MPcolor{usage:frame} ;
+ draw p withcolor \MPcolor{usage:line} ;
+ if ("#3" <> "") and ("#3" <> "#2") :
+ q := \ctxlua{tex.sprint(document.progress.path("#1","#3"))} ;
+ if bbwidth(q) > 1 :
+ q := q xstretched w ;
+ pickup pencircle scaled 1.5pt ; linecap := butt ;
+ draw q withcolor \MPcolor{usage:time} ;
+ fi ;
+ fi ;
+ fi ;
+ endgroup ;
+ \stopMPcode\egroup
+ \scratchdimen\wd\scratchbox
+ \ifdim\scratchdimen>\zeropoint
+ \startlinecorrection
+ \box\scratchbox \endgraf
+ \hbox to \scratchdimen{\tttf\strut\detokenize{#2}\hss
+ min:\ctxlua{tex.sprint(document.progress.bot("#1","\detokenize{#2}"))}, %
+ max:\ctxlua{tex.sprint(document.progress.top("#1","\detokenize{#2}"))}, %
+ pages:\ctxlua{tex.sprint(document.progress.pages("#1"))}%
+ }%
+ \stoplinecorrection
+ \fi}
+
+\def\LoadUsage #1{\ctxlua{document.progress.convert("#1")}}
+\def\ShowUsage #1{\ctxlua{document.progress.show("#1",nil,nil,"elapsed_time")}}
+\def\ShowMemoryUsage#1{\ctxlua{document.progress.show("#1",nil,{}, "elapsed_time")}}
+\def\ShowNodeUsage #1{\ctxlua{document.progress.show("#1",{},nil, "elapsed_time")}}
+
+\endinput
diff --git a/Master/texmf-dist/tex/context/base/m-visual.tex b/Master/texmf-dist/tex/context/base/m-visual.tex
index 1622e5e63f6..c35e8a1a426 100644
--- a/Master/texmf-dist/tex/context/base/m-visual.tex
+++ b/Master/texmf-dist/tex/context/base/m-visual.tex
@@ -46,7 +46,7 @@
\def\fakerule#1%
{\strut
-% \startcolor[fakerulecolor]%
+ \startcolor[fakerulecolor]%
\iffakebaseline
\vrule\!!height1.25ex\!!depth-.05ex\!!width#1%
\kern-#1%
@@ -223,8 +223,9 @@
\def\fakespacingformula
{\color[fakebaselinecolor]{\ruledbaseline}\fakeformula}
-%D test \bodyfontgrid\space test
-%D test \emexgrid \space test
+%D test \type{\bodyfontgrid}\space test
+%D test \type{\emexgrid} \space test
+
\def\smashedgrid
{\dosingleempty\dosmashedgrid}
diff --git a/Master/texmf-dist/tex/context/base/math-def.lua b/Master/texmf-dist/tex/context/base/math-def.lua
new file mode 100644
index 00000000000..e2992891006
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/math-def.lua
@@ -0,0 +1,3035 @@
+-- filename : math-def.lua
+-- comment : companion to math-ini.tex (in ConTeXt)
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- license : see context related readme files
+-- comment : generated from data file downloaded from STIX website; kind of a mess
+
+if not versions then versions = { } end versions['math-def'] = 1.001
+if not mathematics then mathematics = { } end
+
+-- I give up on this mess, best start from scratch. We just use as
+-- strippeble table.
+
+--~ mathematics.data = {
+--~ [0x00020] = { mathclass='unknown', adobename='space' },
+--~ [0x00022] = { mathclass='unknown', adobename='quotedbl', texname='textquotedbl' },
+--~ [0x00023] = { mathclass='normal', adobename='numbersign', texname='#' },
+--~ [0x00024] = { mathclass='normal', adobename='dollar', texname='textdollar' },
+--~ [0x00025] = { mathclass='normal', adobename='percent', texname='%' },
+--~ [0x00026] = { mathclass='normal', adobename='ampersand', texname='&' },
+--~ [0x00027] = { mathclass='unknown', adobename='quotesingle' },
+--~ [0x00028] = { mathclass='opening', adobename='parenleft', texname='lparen' },
+--~ [0x00029] = { mathclass='closing', adobename='parenright', texname='rparen' },
+--~ [0x0002B] = { mathclass='binary', adobename='plus', texname='plus' },
+--~ [0x00040] = { mathclass='normal', adobename='at', texname='textatsign' },
+--~ [0x0005E] = { mathclass='unknown', adobename='asciicircum', texname='textasciicircum' },
+--~ [0x0005F] = { mathclass='unknown', adobename='underscore', texname='textunderscore' },
+--~ [0x00060] = { mathclass='unknown', adobename='grave', texname='textasciigrave' },
+--~ [0x0007E] = { mathclass='unknown', adobename='asciitilde', texname='textasciitilde' },
+--~ [0x0007F] = { mathclass='unknown', adobename='uni007F' },
+--~ [0x000A0] = { mathclass='unknown', adobename='uni00A0' },
+--~ [0x000A1] = { mathclass='punctuation', adobename='exclamdown', texname='textexclamdown' },
+--~ [0x000A2] = { mathclass='normal', adobename='cent', texname='textcent' },
+--~ [0x000A3] = { mathclass='normal', adobename='sterling', texname='sterling' },
+--~ [0x000A4] = { mathclass='normal', adobename='currency', texname='textcurrency' },
+--~ [0x000A5] = { mathclass='normal', adobename='yen', texname='yen' },
+--~ [0x000A6] = { mathclass='normal', adobename='brokenbar', texname='textbrokenbar' },
+--~ [0x000A7] = { mathclass='normal', adobename='section', texname='S' },
+--~ [0x000A8] = { mathclass='unknown', adobename='dieresis', texname='textasciidieresis' },
+--~ [0x000A9] = { mathclass='normal', adobename='copyright', texname='textcopyright' },
+--~ [0x000AA] = { mathclass='unknown', adobename='ordfeminine', texname='textordfeminine' },
+--~ [0x000AB] = { mathclass='opening', adobename='guillemotleft', texname='guillemotleft' },
+--~ [0x000AC] = { mathclass='normal', adobename='logicalnot', texname='neg' },
+--~ [0x000AD] = { mathclass='unknown', adobename='uni00AD' },
+--~ [0x000AE] = { mathclass='normal', adobename='registered', texname='textregistered' },
+--~ [0x000AF] = { mathclass='unknown', adobename='macron', texname='textasciimacron' },
+--~ [0x000B0] = { mathclass='normal', adobename='degree', texname='textdegree' },
+--~ [0x000B2] = { mathclass='unknown', adobename='twosuperior', texname='texttwosuperior' },
+--~ [0x000B3] = { mathclass='unknown', adobename='threesuperior', texname='textthreesuperior' },
+--~ [0x000B4] = { mathclass='unknown', adobename='acute', texname='textasciiacute' },
+--~ [0x000B5] = { mathclass='normal', adobename='mu', texname='textmu' },
+--~ [0x000B6] = { mathclass='normal', adobename='paragraph', texname='P' },
+--~ [0x000B8] = { mathclass='unknown', adobename='cedilla' },
+--~ [0x000B9] = { mathclass='unknown', adobename='onesuperior', texname='textonesuperior' },
+--~ [0x000BA] = { mathclass='unknown', adobename='ordmasculine', texname='textordmasculine' },
+--~ [0x000BB] = { mathclass='closing', adobename='guillemotright', texname='guillemotright' },
+--~ [0x000BC] = { mathclass='unknown', adobename='onequarter', texname='textonequarter' },
+--~ [0x000BD] = { mathclass='unknown', adobename='onehalf', texname='textonehalf' },
+--~ [0x000BE] = { mathclass='unknown', adobename='threequarters', texname='textthreequarters' },
+--~ [0x000BF] = { mathclass='punctuation', adobename='questiondown', texname='textquestiondown' },
+--~ [0x000F7] = { mathclass='binary', adobename='divide', texname='div' },
+--~ [0x00188] = { mathclass='unknown', adobename='uni0188', texname='texthtc' },
+--~ [0x00190] = { mathclass='unknown', adobename='uni0190' },
+--~ [0x00192] = { mathclass='normal', adobename='florin', texname='textflorin' },
+--~ [0x00195] = { mathclass='unknown', adobename='uni0195', texname='texthvlig' },
+--~ [0x00199] = { mathclass='alphabetic', adobename='uni0199', texname='texthtk' },
+--~ [0x0019A] = { mathclass='alphabetic', adobename='uni019A', texname='textbarl' },
+--~ [0x0019B] = { mathclass='alphabetic', adobename='uni019B', texname='textcrlambda' },
+--~ [0x0019E] = { mathclass='alphabetic', adobename='uni019E' },
+--~ [0x001A0] = { mathclass='alphabetic', adobename='uni01A0', texname='Ohorn' },
+--~ [0x001A1] = { mathclass='alphabetic', adobename='uni01A1', texname='ohorn' },
+--~ [0x001A5] = { mathclass='alphabetic', adobename='uni01A5', texname='texthtp' },
+--~ [0x001AA] = { mathclass='alphabetic', adobename='uni01AA', texname='textlooptoprevesh' },
+--~ [0x001AB] = { mathclass='alphabetic', adobename='uni01AB', texname='textlhookt' },
+--~ [0x001AD] = { mathclass='alphabetic', adobename='uni01AD', texname='texthtt' },
+--~ [0x001AF] = { mathclass='alphabetic', adobename='uni01AF', texname='Uhorn' },
+--~ [0x001B0] = { mathclass='alphabetic', adobename='uni01B0', texname='uhorn' },
+--~ [0x001B5] = { mathclass='normal', adobename='uni01B5', texname='Zbar' },
+--~ [0x001BA] = { mathclass='alphabetic', adobename='uni01BA', texname='textbenttailyogh' },
+--~ [0x001BB] = { mathclass='alphabetic', adobename='uni01BB', texname='textcrtwo' },
+--~ [0x001BE] = { mathclass='alphabetic', adobename='uni01BE', texname='textcrinvglotstop' },
+--~ [0x001C0] = { mathclass='alphabetic', adobename='uni01C0', texname='textpipe' },
+--~ [0x001C1] = { mathclass='alphabetic', adobename='uni01C1', texname='textdoublepipe' },
+--~ [0x001C2] = { mathclass='alphabetic', adobename='uni01C2', texname='textdoublebarpipe' },
+--~ [0x001C3] = { mathclass='alphabetic', adobename='uni01C3', texname='textexclam' },
+--~ [0x001F0] = { mathclass='alphabetic', adobename='uni01F0' },
+--~ [0x001FA] = { mathclass='unknown', adobename='uni01FA' },
+--~ [0x001FB] = { mathclass='unknown', adobename='uni01FB' },
+--~ [0x001FC] = { mathclass='unknown', adobename='uni01FC' },
+--~ [0x001FD] = { mathclass='unknown', adobename='uni01FD' },
+--~ [0x001FE] = { mathclass='unknown', adobename='uni01FE' },
+--~ [0x001FF] = { mathclass='unknown', adobename='uni01FF' },
+--~ [0x00221] = { mathclass='alphabetic', adobename='uni0221', texname='textctd' },
+--~ [0x00234] = { mathclass='alphabetic', adobename='uni0234', texname='textctl' },
+--~ [0x00235] = { mathclass='alphabetic', adobename='uni0235', texname='textctn' },
+--~ [0x00236] = { mathclass='alphabetic', adobename='uni0236', texname='textctt' },
+--~ [0x00237] = { mathclass='alphabetic', adobename='uni0237', texname='textdotlessj' },
+--~ [0x00250] = { mathclass='alphabetic', adobename='uni0250', texname='textturna' },
+--~ [0x00251] = { mathclass='alphabetic', adobename='uni0251', texname='textscripta' },
+--~ [0x00252] = { mathclass='alphabetic', adobename='uni0252', texname='textturnscripta' },
+--~ [0x00253] = { mathclass='alphabetic', adobename='uni0253', texname='texthtb' },
+--~ [0x00254] = { mathclass='binary', adobename='uni0254', texname='textopeno' },
+--~ [0x00255] = { mathclass='alphabetic', adobename='uni0255', texname='textctc' },
+--~ [0x00256] = { mathclass='alphabetic', adobename='uni0256', texname='textrtaild' },
+--~ [0x00257] = { mathclass='alphabetic', adobename='uni0257', texname='texthtd' },
+--~ [0x00258] = { mathclass='alphabetic', adobename='uni0258', texname='textreve' },
+--~ [0x00259] = { mathclass='alphabetic', adobename='uni0259', texname='textschwa' },
+--~ [0x0025A] = { mathclass='alphabetic', adobename='uni025A', texname='textrhookschwa' },
+--~ [0x0025B] = { mathclass='alphabetic', adobename='uni025B', texname='textepsilon' },
+--~ [0x0025C] = { mathclass='alphabetic', adobename='uni025C', texname='textrevepsilon' },
+--~ [0x0025D] = { mathclass='alphabetic', adobename='uni025D', texname='textrhookrevepsilon' },
+--~ [0x0025E] = { mathclass='alphabetic', adobename='uni025E', texname='textcloserevepsilon' },
+--~ [0x0025F] = { mathclass='alphabetic', adobename='uni025F', texname='textbardotlessj' },
+--~ [0x00260] = { mathclass='alphabetic', adobename='uni0260', texname='texthtg' },
+--~ [0x00261] = { mathclass='alphabetic', adobename='uni0261', texname='textscriptg' },
+--~ [0x00262] = { mathclass='alphabetic', adobename='uni0262', texname='textscg' },
+--~ [0x00263] = { mathclass='alphabetic', adobename='uni0263', texname='textgamma' },
+--~ [0x00264] = { mathclass='alphabetic', adobename='uni0264', texname='textramshorns' },
+--~ [0x00265] = { mathclass='alphabetic', adobename='uni0265', texname='textturnh' },
+--~ [0x00266] = { mathclass='alphabetic', adobename='uni0266', texname='texthth' },
+--~ [0x00267] = { mathclass='alphabetic', adobename='uni0267', texname='texththeng' },
+--~ [0x00268] = { mathclass='alphabetic', adobename='uni0268', texname='textbari' },
+--~ [0x00269] = { mathclass='alphabetic', adobename='uni0269', texname='textiota' },
+--~ [0x0026A] = { mathclass='alphabetic', adobename='uni026A', texname='textsci' },
+--~ [0x0026B] = { mathclass='alphabetic', adobename='uni026B', texname='textltilde' },
+--~ [0x0026C] = { mathclass='alphabetic', adobename='uni026C', texname='textbeltl' },
+--~ [0x0026D] = { mathclass='alphabetic', adobename='uni026D', texname='textrtaill' },
+--~ [0x0026E] = { mathclass='alphabetic', adobename='uni026E', texname='textlyoghlig' },
+--~ [0x0026F] = { mathclass='alphabetic', adobename='uni026F', texname='textturnm' },
+--~ [0x00270] = { mathclass='alphabetic', adobename='uni0270', texname='textturnmrleg' },
+--~ [0x00271] = { mathclass='alphabetic', adobename='uni0271', texname='textltailm' },
+--~ [0x00272] = { mathclass='alphabetic', adobename='uni0272', texname='textltailn' },
+--~ [0x00273] = { mathclass='alphabetic', adobename='uni0273', texname='textrtailn' },
+--~ [0x00274] = { mathclass='alphabetic', adobename='uni0274', texname='textscn' },
+--~ [0x00275] = { mathclass='alphabetic', adobename='uni0275', texname='textbaro' },
+--~ [0x00276] = { mathclass='alphabetic', adobename='uni0276', texname='textscoelig' },
+--~ [0x00277] = { mathclass='alphabetic', adobename='uni0277', texname='textcloseomega' },
+--~ [0x00278] = { mathclass='alphabetic', adobename='uni0278', texname='textphi' },
+--~ [0x00279] = { mathclass='alphabetic', adobename='uni0279', texname='textturnr' },
+--~ [0x0027A] = { mathclass='alphabetic', adobename='uni027A', texname='textturnlonglegr' },
+--~ [0x0027B] = { mathclass='alphabetic', adobename='uni027B', texname='textturnrrtail' },
+--~ [0x0027C] = { mathclass='alphabetic', adobename='uni027C', texname='textlonglegr' },
+--~ [0x0027D] = { mathclass='alphabetic', adobename='uni027D', texname='textrtailr' },
+--~ [0x0027E] = { mathclass='alphabetic', adobename='uni027E', texname='textfishhookr' },
+--~ [0x0027F] = { mathclass='alphabetic', adobename='uni027F', texname='textlhti' },
+--~ [0x00280] = { mathclass='alphabetic', adobename='uni0280', texname='textscr' },
+--~ [0x00281] = { mathclass='alphabetic', adobename='uni0281', texname='textinvscr' },
+--~ [0x00282] = { mathclass='alphabetic', adobename='uni0282', texname='textrtails' },
+--~ [0x00283] = { mathclass='alphabetic', adobename='uni0283', texname='textesh' },
+--~ [0x00284] = { mathclass='alphabetic', adobename='uni0284', texname='texthtbardotlessjvar' },
+--~ [0x00285] = { mathclass='alphabetic', adobename='uni0285', texname='textvibyi' },
+--~ [0x00286] = { mathclass='alphabetic', adobename='uni0286', texname='textctesh' },
+--~ [0x00287] = { mathclass='alphabetic', adobename='uni0287', texname='textturnt' },
+--~ [0x00288] = { mathclass='alphabetic', adobename='uni0288', texname='textrtailt' },
+--~ [0x00289] = { mathclass='alphabetic', adobename='uni0289', texname='textbaru' },
+--~ [0x0028A] = { mathclass='alphabetic', adobename='uni028A', texname='textupsilon' },
+--~ [0x0028B] = { mathclass='alphabetic', adobename='uni028B', texname='textscriptv' },
+--~ [0x0028C] = { mathclass='alphabetic', adobename='uni028C', texname='textturnv' },
+--~ [0x0028D] = { mathclass='alphabetic', adobename='uni028D', texname='textturnw' },
+--~ [0x0028E] = { mathclass='alphabetic', adobename='uni028E', texname='textturny' },
+--~ [0x0028F] = { mathclass='alphabetic', adobename='uni028F', texname='textscy' },
+--~ [0x00290] = { mathclass='alphabetic', adobename='uni0290', texname='textrtailz' },
+--~ [0x00291] = { mathclass='alphabetic', adobename='uni0291', texname='textctz' },
+--~ [0x00292] = { mathclass='alphabetic', adobename='uni0292', texname='textyogh' },
+--~ [0x00293] = { mathclass='alphabetic', adobename='uni0293', texname='textctyogh' },
+--~ [0x00294] = { mathclass='alphabetic', adobename='uni0294', texname='textglotstop' },
+--~ [0x00295] = { mathclass='alphabetic', adobename='uni0295', texname='textrevglotstop' },
+--~ [0x00296] = { mathclass='alphabetic', adobename='uni0296', texname='textinvglotstop' },
+--~ [0x00297] = { mathclass='alphabetic', adobename='uni0297', texname='textstretchcvar' },
+--~ [0x00298] = { mathclass='alphabetic', adobename='uni0298', texname='textbullseye' },
+--~ [0x00299] = { mathclass='alphabetic', adobename='uni0299', texname='textscb' },
+--~ [0x0029A] = { mathclass='alphabetic', adobename='uni029A', texname='textcloseepsilon' },
+--~ [0x0029B] = { mathclass='alphabetic', adobename='uni029B', texname='texthtscg' },
+--~ [0x0029C] = { mathclass='alphabetic', adobename='uni029C', texname='textsch' },
+--~ [0x0029D] = { mathclass='alphabetic', adobename='uni029D', texname='textctj' },
+--~ [0x0029E] = { mathclass='alphabetic', adobename='uni029E', texname='textturnk' },
+--~ [0x0029F] = { mathclass='alphabetic', adobename='uni029F', texname='textscl' },
+--~ [0x002A0] = { mathclass='alphabetic', adobename='uni02A0', texname='texthtq' },
+--~ [0x002A1] = { mathclass='alphabetic', adobename='uni02A1', texname='textbarglotstop' },
+--~ [0x002A2] = { mathclass='alphabetic', adobename='uni02A2', texname='textbarrevglotstop' },
+--~ [0x002A3] = { mathclass='alphabetic', adobename='uni02A3', texname='textdzlig' },
+--~ [0x002A4] = { mathclass='alphabetic', adobename='uni02A4', texname='textdyoghlig' },
+--~ [0x002A5] = { mathclass='alphabetic', adobename='uni02A5', texname='textdctzlig' },
+--~ [0x002A6] = { mathclass='alphabetic', adobename='uni02A6', texname='texttslig' },
+--~ [0x002A7] = { mathclass='alphabetic', adobename='uni02A7', texname='textteshlig' },
+--~ [0x002A8] = { mathclass='alphabetic', adobename='uni02A8', texname='texttctctlig' },
+--~ [0x002AE] = { mathclass='alphabetic', adobename='uni02AE', texname='textlongy' },
+--~ [0x002AF] = { mathclass='alphabetic', adobename='uni02AF', texname='textvibyy' },
+--~ [0x002B0] = { mathclass='alphabetic', adobename='uni02B0', texname='textsuph' },
+--~ [0x002B1] = { mathclass='alphabetic', adobename='uni02B1', texname='textsuphth' },
+--~ [0x002B2] = { mathclass='alphabetic', adobename='uni02B2', texname='textsupj' },
+--~ [0x002B3] = { mathclass='alphabetic', adobename='uni02B3', texname='textsupr' },
+--~ [0x002B4] = { mathclass='alphabetic', adobename='uni02B4', texname='textsupturnr' },
+--~ [0x002B5] = { mathclass='alphabetic', adobename='uni02B5', texname='textsupturnrrtail' },
+--~ [0x002B6] = { mathclass='alphabetic', adobename='uni02B6', texname='textsupinvscr' },
+--~ [0x002B7] = { mathclass='alphabetic', adobename='uni02B7', texname='textsupw' },
+--~ [0x002B8] = { mathclass='alphabetic', adobename='uni02B8', texname='textsupy' },
+--~ [0x002B9] = { mathclass='unknown', adobename='uni02B9', texname='cprime' },
+--~ [0x002BA] = { mathclass='unknown', adobename='uni02BA', texname='cdprime' },
+--~ [0x002BB] = { mathclass='opening', adobename='uni02BB', texname='textturncomma' },
+--~ [0x002BC] = { mathclass='unknown', adobename='uni02BC', texname='rasp' },
+--~ [0x002BD] = { mathclass='unknown', adobename='uni02BD', texname='lasp' },
+--~ [0x002BE] = { mathclass='unknown', adobename='uni02BE', texname='texthamza' },
+--~ [0x002BF] = { mathclass='unknown', adobename='uni02BF', texname='textain' },
+--~ [0x002C0] = { mathclass='unknown', adobename='uni02C0', texname='textraiseglotstop' },
+--~ [0x002C1] = { mathclass='unknown', adobename='uni02C1', texname='textraiserevglotstop' },
+--~ [0x002C2] = { mathclass='unknown', adobename='uni02C2', texname='textlptr' },
+--~ [0x002C3] = { mathclass='unknown', adobename='uni02C3', texname='textrptr' },
+--~ [0x002C4] = { mathclass='unknown', adobename='uni02C4', texname='textuptr' },
+--~ [0x002C5] = { mathclass='unknown', adobename='uni02C5', texname='textdptr' },
+--~ [0x002C6] = { mathclass='unknown', adobename='circumflex', texname='^' },
+--~ [0x002C7] = { mathclass='unknown', adobename='caron', texname='v' },
+--~ [0x002C8] = { mathclass='unknown', adobename='uni02C8', texname='textprimstress' },
+--~ [0x002C9] = { mathclass='unknown', adobename='uni02C9', texname='textmacron' },
+--~ [0x002CA] = { mathclass='unknown', adobename='uni02CA', texname='textacute' },
+--~ [0x002CB] = { mathclass='unknown', adobename='uni02CB', texname='textgrave' },
+--~ [0x002CC] = { mathclass='unknown', adobename='uni02CC', texname='textsecstress' },
+--~ [0x002CD] = { mathclass='unknown', adobename='uni02CD', texname='textlowmacron' },
+--~ [0x002CE] = { mathclass='unknown', adobename='uni02CE', texname='textlowgrave' },
+--~ [0x002CF] = { mathclass='unknown', adobename='uni02CF', texname='textlowacute' },
+--~ [0x002D0] = { mathclass='unknown', adobename='uni02D0', texname='textlengthmark' },
+--~ [0x002D1] = { mathclass='unknown', adobename='uni02D1', texname='texthalflength' },
+--~ [0x002D2] = { mathclass='unknown', adobename='uni02D2', texname='textrhalfring' },
+--~ [0x002D3] = { mathclass='unknown', adobename='uni02D3', texname='textlhalfring' },
+--~ [0x002D4] = { mathclass='diacritic', adobename='uni02D4', texname='textraised' },
+--~ [0x002D5] = { mathclass='diacritic', adobename='uni02D5', texname='textlowered' },
+--~ [0x002D6] = { mathclass='diacritic', adobename='uni02D6', texname='textadvanced' },
+--~ [0x002D7] = { mathclass='diacritic', adobename='uni02D7', texname='textretracted' },
+--~ [0x002D8] = { mathclass='diacritic', adobename='breve', texname='textbreve' },
+--~ [0x002D9] = { mathclass='diacritic', adobename='dotaccent', texname='textdotaccent' },
+--~ [0x002DA] = { mathclass='diacritic', adobename='ring', texname='textringaccent' },
+--~ [0x002DB] = { mathclass='diacritic', adobename='ogonek', texname='textogonek' },
+--~ [0x002DC] = { mathclass='diacritic', adobename='smalltilde', texname='textsmalltilde' },
+--~ [0x002DD] = { mathclass='diacritic', adobename='hungarumlaut', texname='textdoubleacute' },
+--~ [0x002DE] = { mathclass='diacritic', adobename='uni02DE', texname='textrhoticity' },
+--~ [0x002DF] = { mathclass='diacritic', adobename='uni02DF', texname='ipacrossaccent' },
+--~ [0x002E0] = { mathclass='diacritic', adobename='uni02E0', texname='ipasupgamma' },
+--~ [0x002E1] = { mathclass='alphabetic', adobename='uni02E1', texname='ipasupl' },
+--~ [0x002E2] = { mathclass='alphabetic', adobename='uni02E2', texname='ipasups' },
+--~ [0x002E3] = { mathclass='alphabetic', adobename='uni02E3', texname='ipasupx' },
+--~ [0x002E4] = { mathclass='diacritic', adobename='uni02E4', texname='ipasuprerglotstpp' },
+--~ [0x002E5] = { mathclass='diacritic', adobename='uni02E5', texname='tonebarextrahigh' },
+--~ [0x002E6] = { mathclass='diacritic', adobename='uni02E6', texname='tonebarhigh' },
+--~ [0x002E7] = { mathclass='diacritic', adobename='uni02E7', texname='tonebarmid' },
+--~ [0x002E8] = { mathclass='diacritic', adobename='uni02E8', texname='tonebarlow' },
+--~ [0x002E9] = { mathclass='diacritic', adobename='uni02E9', texname='tonebarextralow' },
+--~ [0x002EC] = { mathclass='diacritic', adobename='uni02EC', texname='ipavoicing' },
+--~ [0x002ED] = { mathclass='diacritic', adobename='uni02ED', texname='ipaunaspirated' },
+--~ [0x00300] = { mathclass='diacritic', adobename='uni0300', texname='grave' },
+--~ [0x00301] = { mathclass='diacritic', adobename='uni0301', texname='acute' },
+--~ [0x00302] = { mathclass='diacritic', adobename='uni0302', texname='hat' },
+--~ [0x00303] = { mathclass='diacritic', adobename='uni0303', texname='tilde' },
+--~ [0x00304] = { mathclass='diacritic', adobename='uni0304', texname='bar' },
+--~ [0x00305] = { mathclass='diacritic', adobename='uni0305', texname='overbar' },
+--~ [0x00306] = { mathclass='diacritic', adobename='uni0306', texname='breve' },
+--~ [0x00307] = { mathclass='diacritic', adobename='uni0307', texname='dot' },
+--~ [0x00308] = { mathclass='diacritic', adobename='uni0308', texname='ddot' },
+--~ [0x00309] = { mathclass='diacritic', adobename='uni0309', texname='ovhook' },
+--~ [0x0030A] = { mathclass='diacritic', adobename='uni030A', texname='ocirc' },
+--~ [0x0030B] = { mathclass='diacritic', adobename='uni030B', texname='H' },
+--~ [0x0030C] = { mathclass='diacritic', adobename='uni030C', texname='check' },
+--~ [0x0030D] = { mathclass='diacritic', adobename='uni030D', texname='textvbaraccent' },
+--~ [0x0030E] = { mathclass='diacritic', adobename='uni030E', texname='textdoublevbaraccent' },
+--~ [0x0030F] = { mathclass='diacritic', adobename='uni030F', texname='textdoublegrave' },
+--~ [0x00310] = { mathclass='diacritic', adobename='uni0310', texname='candra' },
+--~ [0x00311] = { mathclass='diacritic', adobename='uni0311', texname='textroundcap' },
+--~ [0x00312] = { mathclass='diacritic', adobename='uni0312', texname='oturnedcomma' },
+--~ [0x00313] = { mathclass='diacritic', adobename='uni0313', texname='osmooth' },
+--~ [0x00314] = { mathclass='diacritic', adobename='uni0314', texname='orough' },
+--~ [0x00315] = { mathclass='diacritic', adobename='uni0315', texname='ocommatopright' },
+--~ [0x00316] = { mathclass='diacritic', adobename='uni0316', texname='textsubgrave' },
+--~ [0x00317] = { mathclass='diacritic', adobename='uni0317', texname='textsubacute' },
+--~ [0x00318] = { mathclass='diacritic', adobename='uni0318', texname='textadvancing' },
+--~ [0x00319] = { mathclass='diacritic', adobename='uni0319', texname='textretracting' },
+--~ [0x0031A] = { mathclass='diacritic', adobename='uni031A', texname='droang' },
+--~ [0x0031B] = { mathclass='diacritic', adobename='uni031B', texname='texthorn' },
+--~ [0x0031C] = { mathclass='diacritic', adobename='uni031C', texname='textsublhalfring' },
+--~ [0x0031D] = { mathclass='diacritic', adobename='uni031D', texname='textraising' },
+--~ [0x0031E] = { mathclass='diacritic', adobename='uni031E', texname='textlowering' },
+--~ [0x0031F] = { mathclass='diacritic', adobename='uni031F', texname='textsubplus' },
+--~ [0x00320] = { mathclass='diacritic', adobename='uni0320', texname='textsubminus' },
+--~ [0x00321] = { mathclass='diacritic', adobename='uni0321', texname='textpalhook' },
+--~ [0x00322] = { mathclass='diacritic', adobename='uni0322', texname='textrhook' },
+--~ [0x00323] = { mathclass='diacritic', adobename='uni0323', texname='textsubdot' },
+--~ [0x00324] = { mathclass='diacritic', adobename='uni0324', texname='textsubumlaut' },
+--~ [0x00325] = { mathclass='diacritic', adobename='uni0325', texname='textsubring' },
+--~ [0x00326] = { mathclass='diacritic', adobename='uni0326', texname='textsubcomma' },
+--~ [0x00327] = { mathclass='diacritic', adobename='uni0327', texname='c' },
+--~ [0x00328] = { mathclass='diacritic', adobename='uni0328', texname='textpolhk' },
+--~ [0x00329] = { mathclass='diacritic', adobename='uni0329', texname='textsyllabic' },
+--~ [0x0032A] = { mathclass='diacritic', adobename='uni032A', texname='textsubbridge' },
+--~ [0x0032B] = { mathclass='diacritic', adobename='uni032B', texname='textsubw' },
+--~ [0x0032C] = { mathclass='diacritic', adobename='uni032C', texname='textsubwedge' },
+--~ [0x0032D] = { mathclass='diacritic', adobename='uni032D', texname='textsubcircum' },
+--~ [0x0032E] = { mathclass='diacritic', adobename='uni032E', texname='textsubbreve' },
+--~ [0x0032F] = { mathclass='diacritic', adobename='uni032F', texname='textsubarch' },
+--~ [0x00330] = { mathclass='diacritic', adobename='uni0330', texname='textsubtilde' },
+--~ [0x00331] = { mathclass='diacritic', adobename='uni0331', texname='textsubbar' },
+--~ [0x00332] = { mathclass='diacritic', adobename='uni0332', texname='textsubline' },
+--~ [0x00333] = { mathclass='diacritic', adobename='uni0333', texname='textsubdoubleline' },
+--~ [0x00334] = { mathclass='diacritic', adobename='uni0334', texname='textsuperimposetilde' },
+--~ [0x00335] = { mathclass='diacritic', adobename='uni0335', texname='textoverlayshortstroke' },
+--~ [0x00336] = { mathclass='diacritic', adobename='uni0336', texname='textoverlaylongstroke' },
+--~ [0x00337] = { mathclass='diacritic', adobename='uni0337', texname='textoverlayshortsolidus' },
+--~ [0x00338] = { mathclass='diacritic', adobename='uni0338', texname='textoverlaylongsolidus' },
+--~ [0x00339] = { mathclass='diacritic', adobename='uni0339', texname='textsubrhalfring' },
+--~ [0x0033A] = { mathclass='diacritic', adobename='uni033A', texname='textinvsubbridge' },
+--~ [0x0033B] = { mathclass='diacritic', adobename='uni033B', texname='textsubsquare' },
+--~ [0x0033C] = { mathclass='diacritic', adobename='uni033C', texname='textseagull' },
+--~ [0x0033D] = { mathclass='diacritic', adobename='uni033D', texname='textovercross' },
+--~ [0x0033E] = { mathclass='diacritic', adobename='uni033E', texname='textvtilde' },
+--~ [0x0033F] = { mathclass='diacritic', adobename='uni033F', texname='textdoubleoverline' },
+--~ [0x00346] = { mathclass='diacritic', adobename='uni0346', texname='textoverbridge' },
+--~ [0x0034C] = { mathclass='diacritic', adobename='uni034C', texname='textdoubletilde' },
+--~ [0x00359] = { mathclass='unknown', adobename='uni0359', texname='textunderasterisk' },
+--~ [0x0035C] = { mathclass='unknown', adobename='uni035C', texname='texttieunderarc' },
+--~ [0x00360] = { mathclass='diacritic', adobename='uni0360', texname='texttietilde' },
+--~ [0x00361] = { mathclass='diacritic', adobename='uni0361', texname='t' },
+--~ [0x00362] = { mathclass='diacritic', adobename='uni0362', texname='texttieunderrightarrow' },
+--~ [0x0037E] = { mathclass='diacritic', adobename='uni037E' },
+--~ [0x00384] = { mathclass='unknown', adobename='uni0384' },
+--~ [0x00385] = { mathclass='unknown', adobename='uni0385' },
+--~ [0x00386] = { mathclass='unknown', adobename='uni0386' },
+--~ [0x00387] = { mathclass='unknown', adobename='uni0387' },
+--~ [0x00388] = { mathclass='unknown', adobename='uni0388' },
+--~ [0x00389] = { mathclass='unknown', adobename='uni0389' },
+--~ [0x0038A] = { mathclass='unknown', adobename='uni038A' },
+--~ [0x0038C] = { mathclass='unknown', adobename='uni038C' },
+--~ [0x0038E] = { mathclass='unknown', adobename='uni038E' },
+--~ [0x0038F] = { mathclass='unknown', adobename='uni038F' },
+--~ [0x00390] = { mathclass='unknown', adobename='uni0390' },
+--~ [0x003AA] = { mathclass='unknown',family="lcgreek", adobename='uni03AA' },
+--~ [0x003AB] = { mathclass='unknown', adobename='uni03AB' },
+--~ [0x003AC] = { mathclass='unknown', adobename='uni03AC' },
+--~ [0x003AD] = { mathclass='unknown', adobename='uni03AD' },
+--~ [0x003AE] = { mathclass='unknown', adobename='uni03AE' },
+--~ [0x003AF] = { mathclass='unknown', adobename='uni03AF' },
+--~ [0x003B0] = { mathclass='unknown', adobename='uni03B0' },
+--~ [0x003CA] = { mathclass='unknown', adobename='uni03CA' },
+--~ [0x003CB] = { mathclass='unknown', adobename='uni03CB' },
+--~ [0x003CC] = { mathclass='unknown', adobename='uni03CC' },
+--~ [0x003CD] = { mathclass='unknown', adobename='uni03CD' },
+--~ [0x003CE] = { mathclass='unknown', adobename='uni03CE' },
+--~ [0x003D0] = { mathclass='alphabetic', adobename='uni03D0', texname='upvarbeta' },
+--~ [0x003D1] = { mathclass='alphabetic', adobename='uni03D1', texname='upvartheta' },
+--~ [0x003D2] = { mathclass='alphabetic', adobename='uni03D2', texname='upUpsilon' },
+--~ [0x003D6] = { mathclass='alphabetic', adobename='uni03D6', texname='upvarpi' },
+--~ [0x003D8] = { mathclass='normal', adobename='uni03D8', texname='upoldKoppa' },
+--~ [0x003D9] = { mathclass='normal', adobename='uni03D9', texname='upoldkoppa' },
+--~ [0x003DA] = { mathclass='alphabetic', adobename='uni03DA', texname='upStigma' },
+--~ [0x003DB] = { mathclass='alphabetic', adobename='uni03DB', texname='upstigma' },
+--~ [0x003DC] = { mathclass='alphabetic', adobename='uni03DC', texname='upDigamma' },
+--~ [0x003DD] = { mathclass='alphabetic', adobename='uni03DD', texname='updigamma' },
+--~ [0x003DE] = { mathclass='alphabetic', adobename='uni03DE', texname='upKoppa' },
+--~ [0x003DF] = { mathclass='alphabetic', adobename='uni03DF', texname='upkoppa' },
+--~ [0x003E0] = { mathclass='alphabetic', adobename='uni03E0', texname='upSampi' },
+--~ [0x003E1] = { mathclass='alphabetic', adobename='uni03E1', texname='upsampi' },
+--~ [0x003F0] = { mathclass='alphabetic', adobename='uni03F0', texname='upvarkappa' },
+--~ [0x003F1] = { mathclass='alphabetic', adobename='uni03F1', texname='upvarrho' },
+--~ [0x003F4] = { mathclass='alphabetic', adobename='uni03F4', texname='upvarTheta' },
+--~ [0x003F5] = { mathclass='alphabetic', adobename='uni03F5', texname='upepsilon' },
+--~ [0x003F6] = { mathclass='normal', adobename='uni03F6', texname='upbackepsilon' },
+--~ [0x00401] = { mathclass='alphabetic', adobename='uni0401' },
+--~ [0x00402] = { mathclass='alphabetic', adobename='uni0402' },
+--~ [0x00403] = { mathclass='alphabetic', adobename='uni0403' },
+--~ [0x00404] = { mathclass='alphabetic', adobename='uni0404' },
+--~ [0x00405] = { mathclass='alphabetic', adobename='uni0405' },
+--~ [0x00406] = { mathclass='alphabetic', adobename='uni0406' },
+--~ [0x00407] = { mathclass='alphabetic', adobename='uni0407' },
+--~ [0x00408] = { mathclass='alphabetic', adobename='uni0408' },
+--~ [0x00409] = { mathclass='alphabetic', adobename='uni0409' },
+--~ [0x0040A] = { mathclass='alphabetic', adobename='uni040A' },
+--~ [0x0040B] = { mathclass='alphabetic', adobename='uni040B' },
+--~ [0x0040C] = { mathclass='alphabetic', adobename='uni040C' },
+--~ [0x0040E] = { mathclass='alphabetic', adobename='uni040E' },
+--~ [0x0040F] = { mathclass='alphabetic', adobename='uni040F' },
+--~ [0x00410] = { mathclass='alphabetic', adobename='uni0410' },
+--~ [0x00411] = { mathclass='alphabetic', adobename='uni0411' },
+--~ [0x00412] = { mathclass='alphabetic', adobename='uni0412' },
+--~ [0x00413] = { mathclass='alphabetic', adobename='uni0413' },
+--~ [0x00414] = { mathclass='alphabetic', adobename='uni0414' },
+--~ [0x00415] = { mathclass='alphabetic', adobename='uni0415' },
+--~ [0x00416] = { mathclass='alphabetic', adobename='uni0416' },
+--~ [0x00417] = { mathclass='alphabetic', adobename='uni0417' },
+--~ [0x00418] = { mathclass='alphabetic', adobename='uni0418' },
+--~ [0x00419] = { mathclass='alphabetic', adobename='uni0419' },
+--~ [0x0041A] = { mathclass='alphabetic', adobename='uni041A' },
+--~ [0x0041B] = { mathclass='alphabetic', adobename='uni041B' },
+--~ [0x0041C] = { mathclass='alphabetic', adobename='uni041C' },
+--~ [0x0041D] = { mathclass='alphabetic', adobename='uni041D' },
+--~ [0x0041E] = { mathclass='alphabetic', adobename='uni041E' },
+--~ [0x0041F] = { mathclass='alphabetic', adobename='uni041F' },
+--~ [0x00420] = { mathclass='alphabetic', adobename='uni0420' },
+--~ [0x00421] = { mathclass='alphabetic', adobename='uni0421' },
+--~ [0x00422] = { mathclass='alphabetic', adobename='uni0422' },
+--~ [0x00423] = { mathclass='alphabetic', adobename='uni0423' },
+--~ [0x00424] = { mathclass='alphabetic', adobename='uni0424' },
+--~ [0x00425] = { mathclass='alphabetic', adobename='uni0425' },
+--~ [0x00426] = { mathclass='alphabetic', adobename='uni0426' },
+--~ [0x00427] = { mathclass='alphabetic', adobename='uni0427' },
+--~ [0x00428] = { mathclass='alphabetic', adobename='uni0428' },
+--~ [0x00429] = { mathclass='alphabetic', adobename='uni0429' },
+--~ [0x0042A] = { mathclass='alphabetic', adobename='uni042A' },
+--~ [0x0042B] = { mathclass='alphabetic', adobename='uni042B' },
+--~ [0x0042C] = { mathclass='alphabetic', adobename='uni042C' },
+--~ [0x0042D] = { mathclass='alphabetic', adobename='uni042D' },
+--~ [0x0042E] = { mathclass='alphabetic', adobename='uni042E' },
+--~ [0x0042F] = { mathclass='alphabetic', adobename='uni042F' },
+--~ [0x00430] = { mathclass='alphabetic', adobename='uni0430' },
+--~ [0x00431] = { mathclass='alphabetic', adobename='uni0431' },
+--~ [0x00432] = { mathclass='alphabetic', adobename='uni0432' },
+--~ [0x00433] = { mathclass='alphabetic', adobename='uni0433' },
+--~ [0x00434] = { mathclass='alphabetic', adobename='uni0434' },
+--~ [0x00435] = { mathclass='alphabetic', adobename='uni0435' },
+--~ [0x00436] = { mathclass='alphabetic', adobename='uni0436' },
+--~ [0x00437] = { mathclass='alphabetic', adobename='uni0437' },
+--~ [0x00438] = { mathclass='alphabetic', adobename='uni0438' },
+--~ [0x00439] = { mathclass='alphabetic', adobename='uni0439' },
+--~ [0x0043A] = { mathclass='alphabetic', adobename='uni043A' },
+--~ [0x0043B] = { mathclass='alphabetic', adobename='uni043B' },
+--~ [0x0043C] = { mathclass='alphabetic', adobename='uni043C' },
+--~ [0x0043D] = { mathclass='alphabetic', adobename='uni043D' },
+--~ [0x0043E] = { mathclass='alphabetic', adobename='uni043E' },
+--~ [0x0043F] = { mathclass='alphabetic', adobename='uni043F' },
+--~ [0x00440] = { mathclass='alphabetic', adobename='uni0440' },
+--~ [0x00441] = { mathclass='alphabetic', adobename='uni0441' },
+--~ [0x00442] = { mathclass='alphabetic', adobename='uni0442' },
+--~ [0x00443] = { mathclass='alphabetic', adobename='uni0443' },
+--~ [0x00444] = { mathclass='alphabetic', adobename='uni0444' },
+--~ [0x00445] = { mathclass='alphabetic', adobename='uni0445' },
+--~ [0x00446] = { mathclass='alphabetic', adobename='uni0446' },
+--~ [0x00447] = { mathclass='alphabetic', adobename='uni0447' },
+--~ [0x00448] = { mathclass='alphabetic', adobename='uni0448' },
+--~ [0x00449] = { mathclass='alphabetic', adobename='uni0449' },
+--~ [0x0044A] = { mathclass='alphabetic', adobename='uni044A' },
+--~ [0x0044B] = { mathclass='alphabetic', adobename='uni044B' },
+--~ [0x0044C] = { mathclass='alphabetic', adobename='uni044C' },
+--~ [0x0044D] = { mathclass='alphabetic', adobename='uni044D' },
+--~ [0x0044E] = { mathclass='alphabetic', adobename='uni044E' },
+--~ [0x0044F] = { mathclass='alphabetic', adobename='uni044F' },
+--~ [0x00451] = { mathclass='alphabetic', adobename='uni0451' },
+--~ [0x00452] = { mathclass='alphabetic', adobename='uni0452' },
+--~ [0x00453] = { mathclass='alphabetic', adobename='uni0453' },
+--~ [0x00454] = { mathclass='alphabetic', adobename='uni0454' },
+--~ [0x00455] = { mathclass='alphabetic', adobename='uni0455' },
+--~ [0x00456] = { mathclass='alphabetic', adobename='uni0456' },
+--~ [0x00457] = { mathclass='alphabetic', adobename='uni0457' },
+--~ [0x00458] = { mathclass='alphabetic', adobename='uni0458' },
+--~ [0x00459] = { mathclass='alphabetic', adobename='uni0459' },
+--~ [0x0045A] = { mathclass='alphabetic', adobename='uni045A' },
+--~ [0x0045B] = { mathclass='alphabetic', adobename='uni045B' },
+--~ [0x0045C] = { mathclass='alphabetic', adobename='uni045C' },
+--~ [0x0045E] = { mathclass='alphabetic', adobename='uni045E' },
+--~ [0x0045F] = { mathclass='alphabetic', adobename='uni045F' },
+--~ [0x00462] = { mathclass='alphabetic', adobename='uni0462' },
+--~ [0x00463] = { mathclass='alphabetic', adobename='uni0463' },
+--~ [0x0046A] = { mathclass='alphabetic', adobename='uni046A' },
+--~ [0x0046B] = { mathclass='alphabetic', adobename='uni046B' },
+--~ [0x00472] = { mathclass='alphabetic', adobename='uni0472' },
+--~ [0x00473] = { mathclass='alphabetic', adobename='uni0473' },
+--~ [0x00474] = { mathclass='alphabetic', adobename='uni0474' },
+--~ [0x00475] = { mathclass='alphabetic', adobename='uni0475' },
+--~ [0x00490] = { mathclass='alphabetic', adobename='uni0490' },
+--~ [0x00491] = { mathclass='alphabetic', adobename='uni0491' },
+--~ [0x01D00] = { mathclass='alphabetic', adobename='uni1D00', texname='textsca' },
+--~ [0x01D07] = { mathclass='alphabetic', adobename='uni1D07', texname='textsce' },
+--~ [0x01D1C] = { mathclass='alphabetic', adobename='uni1D1C', texname='textscu' },
+--~ [0x01D81] = { mathclass='alphabetic', adobename='uni1D81', texname='textlhookd' },
+--~ [0x01D84] = { mathclass='alphabetic', adobename='uni1D84', texname='textlhookk' },
+--~ [0x01D85] = { mathclass='alphabetic', adobename='uni1D85', texname='textpalhookl' },
+--~ [0x01D8A] = { mathclass='alphabetic', adobename='uni1D8A', texname='textlhooks' },
+--~ [0x01D8D] = { mathclass='alphabetic', adobename='uni1D8D', texname='textlhookx' },
+--~ [0x01D8E] = { mathclass='alphabetic', adobename='uni1D8E', texname='textlhookz' },
+--~ [0x01E80] = { mathclass='alphabetic', adobename='uni1E80' },
+--~ [0x01E81] = { mathclass='alphabetic', adobename='uni1E81' },
+--~ [0x01E82] = { mathclass='alphabetic', adobename='uni1E82' },
+--~ [0x01E83] = { mathclass='alphabetic', adobename='uni1E83' },
+--~ [0x01E84] = { mathclass='alphabetic', adobename='uni1E84' },
+--~ [0x01E85] = { mathclass='alphabetic', adobename='uni1E85' },
+--~ [0x01EF2] = { mathclass='alphabetic', adobename='uni1EF2' },
+--~ [0x01EF3] = { mathclass='alphabetic', adobename='uni1EF3' },
+--~ [0x02004] = { mathclass='unknown', adobename='uni2004', texname='thirdemspace' },
+--~ [0x02007] = { mathclass='unknown', adobename='uni2007', texname='digitspace' },
+--~ [0x02008] = { mathclass='unknown', adobename='uni2008', texname='punctspace' },
+--~ [0x0200A] = { mathclass='unknown', adobename='uni200A', texname='hspace' },
+--~ [0x0200B] = { mathclass='unknown', adobename='uni200B', texname='zwspace' },
+--~ [0x0200C] = { mathclass='unknown', adobename='uni200C', texname='zwnonjoin' },
+--~ [0x0200D] = { mathclass='unknown', adobename='uni200D', texname='zwjoin' },
+--~ [0x0200E] = { mathclass='unknown', adobename='uni200E', texname='LtoRmark' },
+--~ [0x0200F] = { mathclass='unknown', adobename='uni200F', texname='RtoLmark' },
+--~ [0x02010] = { mathclass='punctuation', adobename='uni2010', texname='texthyphen' },
+--~ [0x02011] = { mathclass='unknown', adobename='uni2011', texname='nobreakhyphen' },
+--~ [0x02012] = { mathclass='punctuation', adobename='figuredash', texname='figdash' },
+--~ [0x02013] = { mathclass='punctuation', adobename='endash', contextname='endash', ignore=true },
+--~ [0x02014] = { mathclass='punctuation', adobename='emdash', contextname='emdash', ignore=true },
+--~ [0x02015] = { mathclass='unknown', adobename='uni2015', texname='horizbar' },
+--~ [0x02016] = { mathclass='fence', adobename='uni2016', texname='Vert' },
+--~ [0x02017] = { mathclass='unknown', adobename='uni2017', texname='twolowline' },
+--~ [0x02018] = { mathclass='opening', adobename='quoteleft', texname='lq' },
+--~ [0x02019] = { mathclass='closing', adobename='quoteright', texname='rq' },
+--~ [0x0201A] = { mathclass='opening', adobename='quotesinglbase', texname='quotsinglbase' },
+--~ [0x0201B] = { mathclass='closing', adobename='uni201B', texname='quotsinglright' },
+--~ [0x0201C] = { mathclass='opening', adobename='quotedblleft', texname='textquotedblleft' },
+--~ [0x0201D] = { mathclass='closing', adobename='quotedblright', texname='textquotedblright' },
+--~ [0x0201E] = { mathclass='opening', adobename='quotedblbase', texname='quotdblbase' },
+--~ [0x0201F] = { mathclass='closing', adobename='uni201F', texname='quotdblright' },
+--~ [0x02020] = { mathclass='binary', adobename='dagger', texname='dagger' },
+--~ [0x02021] = { mathclass='binary', adobename='daggerdbl', texname='ddagger' },
+--~ [0x02022] = { mathclass='binary', adobename='bullet', texname='smblkcircle' },
+--~ [0x02024] = { mathclass='unknown', adobename='onedotenleader', texname='enleaderonedot' },
+--~ [0x02025] = { mathclass='unknown', adobename='twodotenleader', texname='enleadertwodots' },
+--~ [0x02026] = { mathclass='unknown', adobename='ellipsis', texname='dots' },
+--~ [0x02027] = { mathclass='unknown', adobename='uni2027', texname='hyphenpoint' },
+--~ [0x02030] = { mathclass='normal', adobename='perthousand', texname='textperthousand' },
+--~ [0x02031] = { mathclass='normal', adobename='uni2031', texname='textpertenthousand' },
+--~ [0x02032] = { mathclass='normal', adobename='uni2032', texname='textprime' },
+--~ [0x02033] = { mathclass='normal', adobename='uni2033', texname='textdprime' },
+--~ [0x02034] = { mathclass='normal', adobename='uni2034', texname='texttrprime' },
+--~ [0x02035] = { mathclass='normal', adobename='uni2035', texname='textbackprime' },
+--~ [0x02036] = { mathclass='normal', adobename='uni2036', texname='textbackdprime' },
+--~ [0x02037] = { mathclass='normal', adobename='uni2037', texname='textbacktrprime' },
+--~ [0x02038] = { mathclass='unknown', adobename='uni2038', texname='caretinsert' },
+--~ [0x02039] = { mathclass='opening', adobename='guilsinglleft', texname='guilsinglleft' },
+--~ [0x0203A] = { mathclass='closing', adobename='guilsinglright', texname='guilsinglright' },
+--~ [0x0203B] = { mathclass='normal', adobename='uni203B', texname='textreferencemark' },
+--~ [0x0203C] = { mathclass='unknown', adobename='uni203C', texname='Exclam' },
+--~ [0x0203E] = { mathclass='unknown', adobename='uni203E', texname='overline' },
+--~ [0x02040] = { mathclass='binary', adobename='uni2040', texname='tieconcat' },
+--~ [0x02043] = { mathclass='unknown', adobename='uni2043', texname='hyphenbullet' },
+--~ [0x02044] = { mathclass='binary', adobename='fraction', texname='fracslash' },
+--~ [0x02047] = { mathclass='unknown', adobename='uni2047', texname='Question' },
+--~ [0x0204E] = { mathclass='unknown', adobename='uni204E', texname='textasterisklow' },
+--~ [0x0204F] = { mathclass='unknown', adobename='uni204F', texname='textsemicolonreversed' },
+--~ [0x02050] = { mathclass='relation', adobename='uni2050', texname='closure' },
+--~ [0x02051] = { mathclass='normal', adobename='uni2051', texname='textAsterisks' },
+--~ [0x02052] = { mathclass='normal', adobename='uni2052', texname='textdiscount' },
+--~ [0x02057] = { mathclass='normal', adobename='uni2057', texname='textqprime' },
+--~ [0x0205F] = { mathclass='normal', adobename='uni205F', texname='medmathspace' },
+--~ [0x02060] = { mathclass='unknown', adobename='uni2060', texname='wordjoin' },
+--~ [0x02061] = { mathclass='unknown', adobename='uni2061', texname='functionapply' },
+--~ [0x02062] = { mathclass='unknown', adobename='uni2062', texname='invisibletimes' },
+--~ [0x02063] = { mathclass='unknown', adobename='uni2063', texname='invisiblesep' },
+--~ [0x02070] = { mathclass='unknown', adobename='zerosuperior', texname='supzero' },
+--~ [0x02074] = { mathclass='unknown', adobename='foursuperior', texname='supfour' },
+--~ [0x02075] = { mathclass='unknown', adobename='fivesuperior', texname='supfive' },
+--~ [0x02076] = { mathclass='unknown', adobename='sixsuperior', texname='supsix' },
+--~ [0x02077] = { mathclass='unknown', adobename='sevensuperior', texname='supseven' },
+--~ [0x02078] = { mathclass='unknown', adobename='eightsuperior', texname='supeight' },
+--~ [0x02079] = { mathclass='unknown', adobename='ninesuperior', texname='supnine' },
+--~ [0x0207D] = { mathclass='unknown', adobename='parenleftsuperior', texname='suplparen' },
+--~ [0x0207E] = { mathclass='unknown', adobename='parenrightsuperior', texname='suprparen' },
+--~ [0x0207F] = { mathclass='unknown', adobename='nsuperior', texname='supn' },
+--~ [0x02080] = { mathclass='unknown', adobename='zeroinferior', texname='subzero' },
+--~ [0x02081] = { mathclass='unknown', adobename='oneinferior', texname='subone' },
+--~ [0x02082] = { mathclass='unknown', adobename='twoinferior', texname='subtwo' },
+--~ [0x02083] = { mathclass='unknown', adobename='threeinferior', texname='subthree' },
+--~ [0x02084] = { mathclass='unknown', adobename='fourinferior', texname='subfour' },
+--~ [0x02085] = { mathclass='unknown', adobename='fiveinferior', texname='subfive' },
+--~ [0x02086] = { mathclass='unknown', adobename='sixinferior', texname='subsix' },
+--~ [0x02087] = { mathclass='unknown', adobename='seveninferior', texname='subseven' },
+--~ [0x02088] = { mathclass='unknown', adobename='eightinferior', texname='subeight' },
+--~ [0x02089] = { mathclass='unknown', adobename='nineinferior', texname='subnine' },
+--~ [0x0208D] = { mathclass='unknown', adobename='parenleftinferior', texname='sublparen' },
+--~ [0x0208E] = { mathclass='unknown', adobename='parenrightinferior', texname='subrparen' },
+--~ [0x020A1] = { mathclass='unknown', adobename='colonmonetary', texname='textcolonmonetary' },
+--~ [0x020A3] = { mathclass='unknown', adobename='uni20A3', texname='textfranc' },
+--~ [0x020A4] = { mathclass='unknown', adobename='uni20A4', texname='textlira' },
+--~ [0x020A7] = { mathclass='normal', adobename='uni20A7', texname='textpesetas' },
+--~ [0x020AC] = { mathclass='unknown', adobename='uni20AC', texname='euro' },
+--~ [0x020D0] = { mathclass='diacritic', adobename='uni20D0', texname='leftharpoonaccent' },
+--~ [0x020D1] = { mathclass='diacritic', adobename='uni20D1', texname='rightharpoonaccent' },
+--~ [0x020D2] = { mathclass='diacritic', adobename='uni20D2', texname='vertoverlay' },
+--~ [0x020D6] = { mathclass='diacritic', adobename='uni20D6', texname='overleftarrow' },
+--~ [0x020D7] = { mathclass='diacritic', adobename='uni20D7', texname='vec' },
+--~ [0x020DB] = { mathclass='diacritic', adobename='uni20DB', texname='dddot' },
+--~ [0x020DC] = { mathclass='diacritic', adobename='uni20DC', texname='ddddot' },
+--~ [0x020DD] = { mathclass='unknown', adobename='uni20DD', texname='enclosecircle' },
+--~ [0x020DE] = { mathclass='unknown', adobename='uni20DE', texname='enclosesquare' },
+--~ [0x020DF] = { mathclass='unknown', adobename='uni20DF', texname='enclosediamond' },
+--~ [0x020E1] = { mathclass='diacritic', adobename='uni20E1', texname='overleftrightarrow' },
+--~ [0x020E4] = { mathclass='unknown', adobename='uni20E4', texname='enclosetriangle' },
+--~ [0x020E5] = { mathclass='diacritic', adobename='uni20E5', texname='textoverlaybackslash' },
+--~ [0x020E6] = { mathclass='diacritic', adobename='uni20E6', texname='textoverlaydoublevert' },
+--~ [0x020E7] = { mathclass='diacritic', adobename='uni20E7', texname='annuity' },
+--~ [0x020E8] = { mathclass='diacritic', adobename='uni20E8', texname='threeunderdot' },
+--~ [0x020E9] = { mathclass='diacritic', adobename='uni20E9', texname='widebridgeabove' },
+--~ [0x020EA] = { mathclass='diacritic', adobename='uni20EA', texname='textoverlayleftarrow' },
+--~ [0x020EB] = { mathclass='unknown', adobename='uni20EB', texname='textoverlaytwosolidus' },
+--~ [0x020EC] = { mathclass='diacritic', adobename='uni20EC', texname='overrightharpoondown' },
+--~ [0x020ED] = { mathclass='diacritic', adobename='uni20ED', texname='overleftharpoondown' },
+--~ [0x020EE] = { mathclass='diacritic', adobename='uni20EE', texname='underleftarrow' },
+--~ [0x020EF] = { mathclass='diacritic', adobename='uni20EF', texname='underrightarrow' },
+--~ [0x02102] = { mathclass='alphabetic', adobename='uni2102', texname='BbbC' },
+--~ [0x02105] = { mathclass='normal', adobename='uni2105', texname='incare' },
+--~ [0x02107] = { mathclass='unknown', adobename='uni2107', texname='Eulerconst' },
+--~ [0x0210A] = { mathclass='alphabetic', adobename='uni210A', texname='scrg' },
+--~ [0x0210B] = { mathclass='alphabetic', adobename='uni210B', texname='scrH' },
+--~ [0x0210C] = { mathclass='alphabetic', adobename='uni210C', texname='frakH' },
+--~ [0x0210D] = { mathclass='alphabetic', adobename='uni210D', texname='BbbH' },
+--~ [0x0210E] = { mathclass='unknown', adobename='uni210E', texname='Planckconst' },
+--~ [0x0210F] = { mathclass='alphabetic', adobename='uni210F', texname='hslash' },
+--~ [0x02110] = { mathclass='alphabetic', adobename='uni2110', texname='scrI' },
+--~ [0x02111] = { mathclass='alphabetic', adobename='uni2111', texname='Im' },
+--~ [0x02112] = { mathclass='alphabetic', adobename='uni2112', texname='scrL' },
+--~ [0x02113] = { mathclass='alphabetic', adobename='uni2113', texname='ell' },
+--~ [0x02115] = { mathclass='alphabetic', adobename='uni2115', texname='BbbN' },
+--~ [0x02116] = { mathclass='normal', adobename='uni2116', texname='textnumero' },
+--~ [0x02117] = { mathclass='normal', adobename='uni2117', texname='textcircledP' },
+--~ [0x02118] = { mathclass='alphabetic', adobename='uni2118', texname='wp' },
+--~ [0x02119] = { mathclass='alphabetic', adobename='uni2119', texname='BbbP' },
+--~ [0x0211A] = { mathclass='alphabetic', adobename='uni211A', texname='BbbQ' },
+--~ [0x0211B] = { mathclass='alphabetic', adobename='uni211B', texname='scrR' },
+--~ [0x0211C] = { mathclass='alphabetic', adobename='uni211C', texname='Re' },
+--~ [0x0211D] = { mathclass='alphabetic', adobename='uni211D', texname='BbbR' },
+--~ [0x0211E] = { mathclass='normal', adobename='uni211E', texname='textrecipe' },
+--~ [0x02122] = { mathclass='unknown', adobename='trademark', texname='texttrademark' },
+--~ [0x02124] = { mathclass='alphabetic', adobename='uni2124', texname='BbbZ' },
+--~ [0x02125] = { mathclass='unknown', adobename='uni2125', texname='textoz' },
+--~ [0x02126] = { mathclass='normal', adobename='uni2126', texname='textohm' },
+--~ [0x02127] = { mathclass='normal', adobename='uni2127', texname='mho' },
+--~ [0x02128] = { mathclass='alphabetic', adobename='uni2128', texname='frakZ' },
+--~ [0x02129] = { mathclass='alphabetic', adobename='uni2129', texname='turnediota' },
+--~ [0x0212B] = { mathclass='alphabetic', adobename='uni212B', texname='Angstrom' },
+--~ [0x0212C] = { mathclass='alphabetic', adobename='uni212C', texname='scrB' },
+--~ [0x0212D] = { mathclass='alphabetic', adobename='uni212D', texname='frakC' },
+--~ [0x0212E] = { mathclass='alphabetic', adobename='uni212E', texname='textestimated' },
+--~ [0x0212F] = { mathclass='alphabetic', adobename='uni212F', texname='scre' },
+--~ [0x02130] = { mathclass='alphabetic', adobename='uni2130', texname='scrE' },
+--~ [0x02131] = { mathclass='alphabetic', adobename='uni2131', texname='scrF' },
+--~ [0x02132] = { mathclass='normal', adobename='uni2132', texname='Finv' },
+--~ [0x02133] = { mathclass='alphabetic', adobename='uni2133', texname='scrM' },
+--~ [0x02134] = { mathclass='alphabetic', adobename='uni2134', texname='scro' },
+--~ [0x02135] = { mathclass='alphabetic', adobename='uni2135', texname='aleph' },
+--~ [0x02136] = { mathclass='alphabetic', adobename='uni2136', texname='beth' },
+--~ [0x02137] = { mathclass='alphabetic', adobename='uni2137', texname='gimel' },
+--~ [0x02138] = { mathclass='alphabetic', adobename='uni2138', texname='daleth' },
+--~ [0x0213C] = { mathclass='normal', adobename='uni213C', texname='Bbbpi' },
+--~ [0x0213D] = { mathclass='alphabetic', adobename='uni213D', texname='Bbbgamma' },
+--~ [0x0213E] = { mathclass='alphabetic', adobename='uni213E', texname='BbbGamma' },
+--~ [0x0213F] = { mathclass='alphabetic', adobename='uni213F', texname='BbbPi' },
+--~ [0x02140] = { mathclass='large', adobename='uni2140', texname='Bbbsum' },
+--~ [0x02141] = { mathclass='normal', adobename='uni2141', texname='Game' },
+--~ [0x02142] = { mathclass='normal', adobename='uni2142', texname='sansLmirrored' },
+--~ [0x02143] = { mathclass='normal', adobename='uni2143', texname='sansLinverted' },
+--~ [0x02144] = { mathclass='normal', adobename='uni2144', texname='Yup' },
+--~ [0x02145] = { mathclass='normal', adobename='uni2145', texname='itBbbD' },
+--~ [0x02146] = { mathclass='normal', adobename='uni2146', texname='itBbbd' },
+--~ [0x02147] = { mathclass='normal', adobename='uni2147', texname='itBbbe' },
+--~ [0x02148] = { mathclass='normal', adobename='uni2148', texname='itBbbi' },
+--~ [0x02149] = { mathclass='normal', adobename='uni2149', texname='itBbbj' },
+--~ [0x0214A] = { mathclass='unknown', adobename='uni214A', texname='PropertyLine' },
+--~ [0x0214B] = { mathclass='binary', adobename='uni214B', texname='upand' },
+--~ [0x02153] = { mathclass='unknown', adobename='onethird', texname='fraconethird' },
+--~ [0x02154] = { mathclass='unknown', adobename='twothirds', texname='fractwothirds' },
+--~ [0x02155] = { mathclass='unknown', adobename='uni2155', texname='fraconefifth' },
+--~ [0x02156] = { mathclass='unknown', adobename='uni2156', texname='fractwofifths' },
+--~ [0x02157] = { mathclass='unknown', adobename='uni2157', texname='fracthreefifths' },
+--~ [0x02158] = { mathclass='unknown', adobename='uni2158', texname='fracfourfifths' },
+--~ [0x02159] = { mathclass='unknown', adobename='uni2159', texname='fraconesixth' },
+--~ [0x0215A] = { mathclass='unknown', adobename='uni215A', texname='fracfivesixths' },
+--~ [0x0215B] = { mathclass='unknown', adobename='oneeighth', texname='fraconeeighth' },
+--~ [0x0215C] = { mathclass='unknown', adobename='threeeighths', texname='fracthreeeighths' },
+--~ [0x0215D] = { mathclass='unknown', adobename='fiveeighths', texname='fracfiveeighths' },
+--~ [0x0215E] = { mathclass='unknown', adobename='seveneighths', texname='fracseveneights' },
+--~ [0x02190] = { mathclass='relation', adobename='uni2190', texname='leftarrow' },
+--~ [0x02191] = { mathclass='relation', adobename='uni2191', texname='uparrow' },
+--~ [0x02192] = { mathclass='relation', adobename='uni2192', texname='rightarrow' },
+--~ [0x02193] = { mathclass='relation', adobename='uni2193', texname='downarrow' },
+--~ [0x02194] = { mathclass='relation', adobename='uni2194', texname='leftrightarrow' },
+--~ [0x02195] = { mathclass='relation', adobename='uni2195', texname='updownarrow' },
+--~ [0x02196] = { mathclass='relation', adobename='uni2196', texname='nwarrow' },
+--~ [0x02197] = { mathclass='relation', adobename='uni2197', texname='nearrow' },
+--~ [0x02198] = { mathclass='relation', adobename='uni2198', texname='searrow' },
+--~ [0x02199] = { mathclass='relation', adobename='uni2199', texname='swarrow' },
+--~ [0x0219A] = { mathclass='relation', adobename='uni219A', texname='nleftarrow' },
+--~ [0x0219B] = { mathclass='relation', adobename='uni219B', texname='nrightarrow' },
+--~ [0x0219C] = { mathclass='relation', adobename='uni219C', texname='leftsquigarrow' },
+--~ [0x0219D] = { mathclass='relation', adobename='uni219D', texname='rightsquigarrow' },
+--~ [0x0219E] = { mathclass='relation', adobename='uni219E', texname='twoheadleftarrow' },
+--~ [0x0219F] = { mathclass='relation', adobename='uni219F', texname='twoheaduparrow' },
+--~ [0x021A0] = { mathclass='relation', adobename='uni21A0', texname='twoheadrightarrow' },
+--~ [0x021A1] = { mathclass='relation', adobename='uni21A1', texname='twoheaddownarrow' },
+--~ [0x021A2] = { mathclass='relation', adobename='uni21A2', texname='leftarrowtail' },
+--~ [0x021A3] = { mathclass='relation', adobename='uni21A3', texname='rightarrowtail' },
+--~ [0x021A4] = { mathclass='relation', adobename='uni21A4', texname='mapsfrom' },
+--~ [0x021A5] = { mathclass='relation', adobename='uni21A5', texname='mapsup' },
+--~ [0x021A6] = { mathclass='relation', adobename='uni21A6', texname='mapsto' },
+--~ [0x021A7] = { mathclass='relation', adobename='uni21A7', texname='mapsdown' },
+--~ [0x021A8] = { mathclass='unknown', adobename='uni21A8', texname='updownarrowbar' },
+--~ [0x021A9] = { mathclass='relation', adobename='uni21A9', texname='hookleftarrow' },
+--~ [0x021AA] = { mathclass='relation', adobename='uni21AA', texname='hookrightarrow' },
+--~ [0x021AB] = { mathclass='relation', adobename='uni21AB', texname='looparrowleft' },
+--~ [0x021AC] = { mathclass='relation', adobename='uni21AC', texname='looparrowright' },
+--~ [0x021AD] = { mathclass='relation', adobename='uni21AD', texname='leftrightsquigarrow' },
+--~ [0x021AE] = { mathclass='relation', adobename='uni21AE', texname='nleftrightarrow' },
+--~ [0x021AF] = { mathclass='relation', adobename='uni21AF', texname='downzigzagarrow' },
+--~ [0x021B0] = { mathclass='relation', adobename='uni21B0', texname='Lsh' },
+--~ [0x021B1] = { mathclass='relation', adobename='uni21B1', texname='Rsh' },
+--~ [0x021B2] = { mathclass='relation', adobename='uni21B2', texname='Ldsh' },
+--~ [0x021B3] = { mathclass='relation', adobename='uni21B3', texname='Rdsh' },
+--~ [0x021B4] = { mathclass='unknown', adobename='uni21B4', texname='linefeed' },
+--~ [0x021B5] = { mathclass='unknown', adobename='uni21B5', texname='carriagereturn' },
+--~ [0x021B6] = { mathclass='relation', adobename='uni21B6', texname='curvearrowleft' },
+--~ [0x021B7] = { mathclass='relation', adobename='uni21B7', texname='curvearrowright' },
+--~ [0x021B8] = { mathclass='unknown', adobename='uni21B8', texname='barovernorthwestarrow' },
+--~ [0x021B9] = { mathclass='unknown', adobename='uni21B9', texname='barleftarrowrightarrowbar' },
+--~ [0x021BA] = { mathclass='unknown', adobename='uni21BA', texname='acwopencirclearrow' },
+--~ [0x021BB] = { mathclass='unknown', adobename='uni21BB', texname='cwopencirclearrow' },
+--~ [0x021BC] = { mathclass='relation', adobename='uni21BC', texname='leftharpoonup' },
+--~ [0x021BD] = { mathclass='relation', adobename='uni21BD', texname='leftharpoondown' },
+--~ [0x021BE] = { mathclass='relation', adobename='uni21BE', texname='upharpoonright' },
+--~ [0x021BF] = { mathclass='relation', adobename='uni21BF', texname='upharpoonleft' },
+--~ [0x021C0] = { mathclass='relation', adobename='uni21C0', texname='rightharpoonup' },
+--~ [0x021C1] = { mathclass='relation', adobename='uni21C1', texname='rightharpoondown' },
+--~ [0x021C2] = { mathclass='relation', adobename='uni21C2', texname='downharpoonright' },
+--~ [0x021C3] = { mathclass='relation', adobename='uni21C3', texname='downharpoonleft' },
+--~ [0x021C4] = { mathclass='relation', adobename='uni21C4', texname='rightleftarrows' },
+--~ [0x021C5] = { mathclass='relation', adobename='uni21C5', texname='updownarrows' },
+--~ [0x021C6] = { mathclass='relation', adobename='uni21C6', texname='leftrightarrows' },
+--~ [0x021C7] = { mathclass='relation', adobename='uni21C7', texname='leftleftarrows' },
+--~ [0x021C8] = { mathclass='relation', adobename='uni21C8', texname='upuparrows' },
+--~ [0x021C9] = { mathclass='relation', adobename='uni21C9', texname='rightrightarrows' },
+--~ [0x021CA] = { mathclass='relation', adobename='uni21CA', texname='downdownarrows' },
+--~ [0x021CB] = { mathclass='relation', adobename='uni21CB', texname='leftrightharpoons' },
+--~ [0x021CC] = { mathclass='relation', adobename='uni21CC', texname='rightleftharpoons' },
+--~ [0x021CD] = { mathclass='relation', adobename='uni21CD', texname='nLeftarrow' },
+--~ [0x021CE] = { mathclass='relation', adobename='uni21CE', texname='nLeftrightarrow' },
+--~ [0x021CF] = { mathclass='relation', adobename='uni21CF', texname='nRightarrow' },
+--~ [0x021D0] = { mathclass='relation', adobename='uni21D0', texname='Leftarrow' },
+--~ [0x021D1] = { mathclass='relation', adobename='uni21D1', texname='Uparrow' },
+--~ [0x021D2] = { mathclass='relation', adobename='uni21D2', texname='Rightarrow' },
+--~ [0x021D3] = { mathclass='relation', adobename='uni21D3', texname='Downarrow' },
+--~ [0x021D4] = { mathclass='relation', adobename='uni21D4', texname='Leftrightarrow' },
+--~ [0x021D5] = { mathclass='relation', adobename='uni21D5', texname='Updownarrow' },
+--~ [0x021D6] = { mathclass='relation', adobename='uni21D6', texname='Nwarrow' },
+--~ [0x021D7] = { mathclass='relation', adobename='uni21D7', texname='Nearrow' },
+--~ [0x021D8] = { mathclass='relation', adobename='uni21D8', texname='Searrow' },
+--~ [0x021D9] = { mathclass='relation', adobename='uni21D9', texname='Swarrow' },
+--~ [0x021DA] = { mathclass='relation', adobename='uni21DA', texname='Lleftarrow' },
+--~ [0x021DB] = { mathclass='relation', adobename='uni21DB', texname='Rrightarrow' },
+--~ [0x021DC] = { mathclass='relation', adobename='uni21DC', texname='leftzigzagarrow' },
+--~ [0x021DD] = { mathclass='relation', adobename='uni21DD', texname='rightzigzagarrow' },
+--~ [0x021DE] = { mathclass='unknown', adobename='uni21DE', texname='nHuparrow' },
+--~ [0x021DF] = { mathclass='unknown', adobename='uni21DF', texname='nHdownarrow' },
+--~ [0x021E0] = { mathclass='unknown', adobename='uni21E0', texname='leftdasharrow' },
+--~ [0x021E1] = { mathclass='unknown', adobename='uni21E1', texname='updasharrow' },
+--~ [0x021E2] = { mathclass='unknown', adobename='uni21E2', texname='rightdasharrow' },
+--~ [0x021E3] = { mathclass='unknown', adobename='uni21E3', texname='downdasharrow' },
+--~ [0x021E4] = { mathclass='relation', adobename='uni21E4', texname='barleftarrow' },
+--~ [0x021E5] = { mathclass='relation', adobename='uni21E5', texname='rightarrowbar' },
+--~ [0x021E6] = { mathclass='unknown', adobename='uni21E6', texname='leftwhitearrow' },
+--~ [0x021E7] = { mathclass='unknown', adobename='uni21E7', texname='upwhitearrow' },
+--~ [0x021E8] = { mathclass='unknown', adobename='uni21E8', texname='rightwhitearrow' },
+--~ [0x021E9] = { mathclass='unknown', adobename='uni21E9', texname='downwhitearrow' },
+--~ [0x021EA] = { mathclass='unknown', adobename='uni21EA', texname='whitearrowupfrombar' },
+--~ [0x021F4] = { mathclass='relation', adobename='uni21F4', texname='circleonrightarrow' },
+--~ [0x021F5] = { mathclass='relation', adobename='uni21F5', texname='downuparrows' },
+--~ [0x021F6] = { mathclass='relation', adobename='uni21F6', texname='rightthreearrows' },
+--~ [0x021F7] = { mathclass='relation', adobename='uni21F7', texname='nvleftarrow' },
+--~ [0x021F8] = { mathclass='relation', adobename='uni21F8', texname='nvrightarrow' },
+--~ [0x021F9] = { mathclass='relation', adobename='uni21F9', texname='nvleftrightarrow' },
+--~ [0x021FA] = { mathclass='relation', adobename='uni21FA', texname='nVleftarrow' },
+--~ [0x021FB] = { mathclass='relation', adobename='uni21FB', texname='nVrightarrow' },
+--~ [0x021FC] = { mathclass='relation', adobename='uni21FC', texname='nVleftrightarrow' },
+--~ [0x021FD] = { mathclass='relation', adobename='uni21FD', texname='leftarrowtriangle' },
+--~ [0x021FE] = { mathclass='relation', adobename='uni21FE', texname='rightarrowtriangle' },
+--~ [0x021FF] = { mathclass='relation', adobename='uni21FF', texname='leftrightarrowtriangle' },
+--~ [0x02200] = { mathclass='normal', adobename='uni2200', texname='forall' },
+--~ [0x02201] = { mathclass='normal', adobename='uni2201', texname='complement' },
+--~ [0x02202] = { mathclass='normal', adobename='uni2202', texname='partial' },
+--~ [0x02203] = { mathclass='normal', adobename='uni2203', texname='exists' },
+--~ [0x02204] = { mathclass='normal', adobename='uni2204', texname='nexists' },
+--~ [0x02205] = { mathclass='normal', adobename='uni2205', texname='varnothing' },
+--~ [0x02206] = { mathclass='normal', adobename='uni2206', texname='increment' },
+--~ [0x02207] = { mathclass='normal', adobename='uni2207', texname='nabla' },
+--~ [0x02208] = { mathclass='relation', adobename='uni2208', texname='in' },
+--~ [0x02209] = { mathclass='relation', adobename='uni2209', texname='notin' },
+--~ [0x0220A] = { mathclass='relation', adobename='uni220A', texname='smallin' },
+--~ [0x0220B] = { mathclass='relation', adobename='uni220B', texname='ni' },
+--~ [0x0220C] = { mathclass='relation', adobename='uni220C', texname='nni' },
+--~ [0x0220D] = { mathclass='relation', adobename='uni220D', texname='smallni' },
+--~ [0x0220E] = { mathclass='normal', adobename='uni220E', texname='QED' },
+--~ [0x0220F] = { mathclass='large', adobename='uni220F', texname='prod' },
+--~ [0x02210] = { mathclass='large', adobename='uni2210', texname='coprod' },
+--~ [0x02211] = { mathclass='large', adobename='uni2211', texname='sum' },
+--~ [0x02212] = { mathclass='binary', adobename='minus', texname='minus' },
+--~ [0x02213] = { mathclass='binary', adobename='uni2213', texname='mp' },
+--~ [0x02214] = { mathclass='binary', adobename='uni2214', texname='dotplus' },
+--~ [0x02215] = { mathclass='binary', adobename='uni2215', texname='slash' },
+--~ [0x02216] = { mathclass='binary', adobename='uni2216', texname='smallsetminus' },
+--~ [0x02217] = { mathclass='binary', adobename='uni2217', texname='ast' },
+--~ [0x02218] = { mathclass='binary', adobename='uni2218', texname='vysmwhtcircle' },
+--~ [0x02219] = { mathclass='binary', adobename='uni2219', texname='vysmblkcircle' },
+--~ [0x0221A] = { mathclass='opening', adobename='uni221A', texname='sqrt' },
+--~ [0x0221B] = { mathclass='unknown', adobename='uni221B', texname='cuberoot' },
+--~ [0x0221C] = { mathclass='unknown', adobename='uni221C', texname='fourthroot' },
+--~ [0x0221D] = { mathclass='relation', adobename='uni221D', texname='propto' },
+--~ [0x0221E] = { mathclass='normal', adobename='uni221E', texname='infty' },
+--~ [0x0221F] = { mathclass='normal', adobename='uni221F', texname='rightangle' },
+--~ [0x02220] = { mathclass='normal', adobename='uni2220', texname='angle' },
+--~ [0x02221] = { mathclass='normal', adobename='uni2221', texname='measuredangle' },
+--~ [0x02222] = { mathclass='normal', adobename='uni2222', texname='sphericalangle' },
+--~ [0x02223] = { mathclass='relation', adobename='uni2223', texname='mid' },
+--~ [0x02224] = { mathclass='relation', adobename='uni2224', texname='nmid' },
+--~ [0x02225] = { mathclass='relation', adobename='uni2225', texname='parallel' },
+--~ [0x02226] = { mathclass='relation', adobename='uni2226', texname='nparallel' },
+--~ [0x02227] = { mathclass='binary', adobename='uni2227', texname='wedge' },
+--~ [0x02228] = { mathclass='binary', adobename='uni2228', texname='vee' },
+--~ [0x02229] = { mathclass='binary', adobename='uni2229', texname='cap' },
+--~ [0x0222A] = { mathclass='binary', adobename='uni222A', texname='cup' },
+--~ [0x0222B] = { mathclass='large', adobename='uni222B', texname='int' },
+--~ [0x0222C] = { mathclass='large', adobename='uni222C', texname='iint' },
+--~ [0x0222D] = { mathclass='large', adobename='uni222D', texname='iiint' },
+--~ [0x0222E] = { mathclass='large', adobename='uni222E', texname='oint' },
+--~ [0x0222F] = { mathclass='large', adobename='uni222F', texname='oiint' },
+--~ [0x02230] = { mathclass='large', adobename='uni2230', texname='oiiint' },
+--~ [0x02231] = { mathclass='large', adobename='uni2231', texname='intclockwise' },
+--~ [0x02232] = { mathclass='large', adobename='uni2232', texname='varointclockwise' },
+--~ [0x02233] = { mathclass='large', adobename='uni2233', texname='ointctrclockwise' },
+--~ [0x02234] = { mathclass='normal', adobename='uni2234', texname='therefore' },
+--~ [0x02235] = { mathclass='normal', adobename='uni2235', texname='because' },
+--~ [0x02236] = { mathclass='unknown', adobename='uni2236', texname='colon' },
+--~ [0x02237] = { mathclass='unknown', adobename='uni2237', texname='Colon' },
+--~ [0x02238] = { mathclass='binary', adobename='uni2238', texname='dotminus' },
+--~ [0x02239] = { mathclass='unknown', adobename='uni2239', texname='dashcolon' },
+--~ [0x0223A] = { mathclass='unknown', adobename='uni223A', texname='dotsminusdots' },
+--~ [0x0223B] = { mathclass='unknown', adobename='uni223B', texname='kernelcontraction' },
+--~ [0x0223C] = { mathclass='relation', adobename='uni223C', texname='sim' },
+--~ [0x0223D] = { mathclass='relation', adobename='uni223D', texname='backsim' },
+--~ [0x0223E] = { mathclass='unknown', adobename='uni223E', texname='ac' },
+--~ [0x0223F] = { mathclass='unknown', adobename='uni223F', texname='sinewave' },
+--~ [0x02240] = { mathclass='binary', adobename='uni2240', texname='wr' },
+--~ [0x02241] = { mathclass='relation', adobename='uni2241', texname='nsim' },
+--~ [0x02242] = { mathclass='relation', adobename='uni2242', texname='eqsim' },
+--~ [0x02243] = { mathclass='relation', adobename='uni2243', texname='simeq' },
+--~ [0x02244] = { mathclass='relation', adobename='uni2244', texname='nsime' },
+--~ [0x02245] = { mathclass='relation', adobename='uni2245', texname='cong' },
+--~ [0x02246] = { mathclass='relation', adobename='uni2246', texname='simneqq' },
+--~ [0x02247] = { mathclass='relation', adobename='uni2247', texname='ncong' },
+--~ [0x02248] = { mathclass='relation', adobename='uni2248', texname='approx' },
+--~ [0x02249] = { mathclass='relation', adobename='uni2249', texname='napprox' },
+--~ [0x0224A] = { mathclass='relation', adobename='uni224A', texname='approxeq' },
+--~ [0x0224B] = { mathclass='relation', adobename='uni224B', texname='approxident' },
+--~ [0x0224C] = { mathclass='relation', adobename='uni224C', texname='backcong' },
+--~ [0x0224D] = { mathclass='relation', adobename='uni224D', texname='asymp' },
+--~ [0x0224E] = { mathclass='relation', adobename='uni224E', texname='Bumpeq' },
+--~ [0x0224F] = { mathclass='relation', adobename='uni224F', texname='bumpeq' },
+--~ [0x02250] = { mathclass='relation', adobename='uni2250', texname='doteq' },
+--~ [0x02251] = { mathclass='relation', adobename='uni2251', texname='Doteq' },
+--~ [0x02252] = { mathclass='relation', adobename='uni2252', texname='fallingdotseq' },
+--~ [0x02253] = { mathclass='relation', adobename='uni2253', texname='risingdotseq' },
+--~ [0x02254] = { mathclass='relation', adobename='uni2254', texname='coloneq' },
+--~ [0x02255] = { mathclass='relation', adobename='uni2255', texname='eqcolon' },
+--~ [0x02256] = { mathclass='relation', adobename='uni2256', texname='eqcirc' },
+--~ [0x02257] = { mathclass='relation', adobename='uni2257', texname='circeq' },
+--~ [0x02258] = { mathclass='relation', adobename='uni2258', texname='arceq' },
+--~ [0x02259] = { mathclass='relation', adobename='uni2259', texname='wedgeq' },
+--~ [0x0225A] = { mathclass='relation', adobename='uni225A', texname='veeeq' },
+--~ [0x0225B] = { mathclass='relation', adobename='uni225B', texname='stareq' },
+--~ [0x0225C] = { mathclass='relation', adobename='uni225C', texname='triangleq' },
+--~ [0x0225D] = { mathclass='relation', adobename='uni225D', texname='eqdef' },
+--~ [0x0225E] = { mathclass='relation', adobename='uni225E', texname='measeq' },
+--~ [0x0225F] = { mathclass='relation', adobename='uni225F', texname='questeq' },
+--~ [0x02260] = { mathclass='relation', adobename='uni2260', texname='ne' },
+--~ [0x02261] = { mathclass='relation', adobename='uni2261', texname='equiv' },
+--~ [0x02262] = { mathclass='relation', adobename='uni2262', texname='nequiv' },
+--~ [0x02263] = { mathclass='relation', adobename='uni2263', texname='Equiv' },
+--~ [0x02264] = { mathclass='relation', adobename='uni2264', texname='leq' },
+--~ [0x02265] = { mathclass='relation', adobename='uni2265', texname='geq' },
+--~ [0x02266] = { mathclass='relation', adobename='uni2266', texname='leqq' },
+--~ [0x02267] = { mathclass='relation', adobename='uni2267', texname='geqq' },
+--~ [0x02268] = { mathclass='relation', adobename='uni2268', texname='lneqq' },
+--~ [0x02269] = { mathclass='relation', adobename='uni2269', texname='gneqq' },
+--~ [0x0226A] = { mathclass='relation', adobename='uni226A', texname='ll' },
+--~ [0x0226B] = { mathclass='relation', adobename='uni226B', texname='gg' },
+--~ [0x0226C] = { mathclass='relation', adobename='uni226C', texname='between' },
+--~ [0x0226D] = { mathclass='relation', adobename='uni226D', texname='nasymp' },
+--~ [0x0226E] = { mathclass='relation', adobename='uni226E', texname='nless' },
+--~ [0x0226F] = { mathclass='relation', adobename='uni226F', texname='ngtr' },
+--~ [0x02270] = { mathclass='relation', adobename='uni2270', texname='nleq' },
+--~ [0x02271] = { mathclass='relation', adobename='uni2271', texname='ngeq' },
+--~ [0x02272] = { mathclass='relation', adobename='uni2272', texname='lesssim' },
+--~ [0x02273] = { mathclass='relation', adobename='uni2273', texname='gtrsim' },
+--~ [0x02274] = { mathclass='relation', adobename='uni2274', texname='nlesssim' },
+--~ [0x02275] = { mathclass='relation', adobename='uni2275', texname='ngtrsim' },
+--~ [0x02276] = { mathclass='relation', adobename='uni2276', texname='lessgtr' },
+--~ [0x02277] = { mathclass='relation', adobename='uni2277', texname='gtrless' },
+--~ [0x02278] = { mathclass='relation', adobename='uni2278', texname='nlessgtr' },
+--~ [0x02279] = { mathclass='relation', adobename='uni2279', texname='ngtrless' },
+--~ [0x0227A] = { mathclass='relation', adobename='uni227A', texname='prec' },
+--~ [0x0227B] = { mathclass='relation', adobename='uni227B', texname='succ' },
+--~ [0x0227C] = { mathclass='relation', adobename='uni227C', texname='preccurlyeq' },
+--~ [0x0227D] = { mathclass='relation', adobename='uni227D', texname='succcurlyeq' },
+--~ [0x0227E] = { mathclass='relation', adobename='uni227E', texname='precsim' },
+--~ [0x0227F] = { mathclass='relation', adobename='uni227F', texname='succsim' },
+--~ [0x02280] = { mathclass='relation', adobename='uni2280', texname='nprec' },
+--~ [0x02281] = { mathclass='relation', adobename='uni2281', texname='nsucc' },
+--~ [0x02282] = { mathclass='relation', adobename='uni2282', texname='subset' },
+--~ [0x02283] = { mathclass='relation', adobename='uni2283', texname='supset' },
+--~ [0x02284] = { mathclass='relation', adobename='uni2284', texname='nsubset' },
+--~ [0x02285] = { mathclass='relation', adobename='uni2285', texname='nsupset' },
+--~ [0x02286] = { mathclass='relation', adobename='uni2286', texname='subseteq' },
+--~ [0x02287] = { mathclass='relation', adobename='uni2287', texname='supseteq' },
+--~ [0x02288] = { mathclass='relation', adobename='uni2288', texname='nsubseteq' },
+--~ [0x02289] = { mathclass='relation', adobename='uni2289', texname='nsupseteq' },
+--~ [0x0228A] = { mathclass='relation', adobename='uni228A', texname='subsetneq' },
+--~ [0x0228B] = { mathclass='relation', adobename='uni228B', texname='supsetneq' },
+--~ [0x0228C] = { mathclass='unknown', adobename='uni228C', texname='cupleftarrow' },
+--~ [0x0228D] = { mathclass='binary', adobename='uni228D', texname='cupdot' },
+--~ [0x0228E] = { mathclass='binary', adobename='uni228E', texname='uplus' },
+--~ [0x0228F] = { mathclass='relation', adobename='uni228F', texname='sqsubset' },
+--~ [0x02290] = { mathclass='relation', adobename='uni2290', texname='sqsupset' },
+--~ [0x02291] = { mathclass='relation', adobename='uni2291', texname='sqsubseteq' },
+--~ [0x02292] = { mathclass='relation', adobename='uni2292', texname='sqsupseteq' },
+--~ [0x02293] = { mathclass='binary', adobename='uni2293', texname='sqcap' },
+--~ [0x02294] = { mathclass='binary', adobename='uni2294', texname='sqcup' },
+--~ [0x02295] = { mathclass='binary', adobename='uni2295', texname='oplus' },
+--~ [0x02296] = { mathclass='binary', adobename='uni2296', texname='ominus' },
+--~ [0x02297] = { mathclass='binary', adobename='uni2297', texname='otimes' },
+--~ [0x02298] = { mathclass='binary', adobename='uni2298', texname='oslash' },
+--~ [0x02299] = { mathclass='binary', adobename='uni2299', texname='odot' },
+--~ [0x0229A] = { mathclass='binary', adobename='uni229A', texname='circledcirc' },
+--~ [0x0229B] = { mathclass='binary', adobename='uni229B', texname='circledast' },
+--~ [0x0229C] = { mathclass='unknown', adobename='uni229C', texname='circledequal' },
+--~ [0x0229D] = { mathclass='binary', adobename='uni229D', texname='circleddash' },
+--~ [0x0229E] = { mathclass='binary', adobename='uni229E', texname='boxplus' },
+--~ [0x0229F] = { mathclass='binary', adobename='uni229F', texname='boxminus' },
+--~ [0x022A0] = { mathclass='binary', adobename='uni22A0', texname='boxtimes' },
+--~ [0x022A1] = { mathclass='binary', adobename='uni22A1', texname='boxdot' },
+--~ [0x022A2] = { mathclass='relation', adobename='uni22A2', texname='vdash' },
+--~ [0x022A3] = { mathclass='relation', adobename='uni22A3', texname='dashv' },
+--~ [0x022A4] = { mathclass='normal', adobename='uni22A4', texname='top' },
+--~ [0x022A5] = { mathclass='normal', adobename='uni22A5', texname='bot' },
+--~ [0x022A6] = { mathclass='relation', adobename='uni22A6', texname='assert' },
+--~ [0x022A7] = { mathclass='relation', adobename='uni22A7', texname='models' },
+--~ [0x022A8] = { mathclass='relation', adobename='uni22A8', texname='vDash' },
+--~ [0x022A9] = { mathclass='relation', adobename='uni22A9', texname='Vdash' },
+--~ [0x022AA] = { mathclass='relation', adobename='uni22AA', texname='Vvdash' },
+--~ [0x022AB] = { mathclass='relation', adobename='uni22AB', texname='VDash' },
+--~ [0x022AC] = { mathclass='relation', adobename='uni22AC', texname='nvdash' },
+--~ [0x022AD] = { mathclass='relation', adobename='uni22AD', texname='nvDash' },
+--~ [0x022AE] = { mathclass='relation', adobename='uni22AE', texname='nVdash' },
+--~ [0x022AF] = { mathclass='relation', adobename='uni22AF', texname='nVDash' },
+--~ [0x022B0] = { mathclass='relation', adobename='uni22B0', texname='prurel' },
+--~ [0x022B1] = { mathclass='relation', adobename='uni22B1', texname='scurel' },
+--~ [0x022B2] = { mathclass='relation', adobename='uni22B2', texname='vartriangleleft' },
+--~ [0x022B3] = { mathclass='relation', adobename='uni22B3', texname='vartriangleright' },
+--~ [0x022B4] = { mathclass='relation', adobename='uni22B4', texname='trianglelefteq' },
+--~ [0x022B5] = { mathclass='relation', adobename='uni22B5', texname='trianglerighteq' },
+--~ [0x022B6] = { mathclass='relation', adobename='uni22B6', texname='origof' },
+--~ [0x022B7] = { mathclass='relation', adobename='uni22B7', texname='imageof' },
+--~ [0x022B8] = { mathclass='relation', adobename='uni22B8', texname='multimap' },
+--~ [0x022B9] = { mathclass='unknown', adobename='uni22B9', texname='hermitmatrix' },
+--~ [0x022BA] = { mathclass='binary', adobename='uni22BA', texname='intercal' },
+--~ [0x022BB] = { mathclass='binary', adobename='uni22BB', texname='veebar' },
+--~ [0x022BC] = { mathclass='binary', adobename='uni22BC', texname='barwedge' },
+--~ [0x022BD] = { mathclass='binary', adobename='uni22BD', texname='barvee' },
+--~ [0x022BE] = { mathclass='unknown', adobename='uni22BE', texname='measuredrightangle' },
+--~ [0x022BF] = { mathclass='unknown', adobename='uni22BF', texname='varlrtriangle' },
+--~ [0x022C0] = { mathclass='large', adobename='uni22C0', texname='bigwedge' },
+--~ [0x022C1] = { mathclass='large', adobename='uni22C1', texname='bigvee' },
+--~ [0x022C2] = { mathclass='large', adobename='uni22C2', texname='bigcap' },
+--~ [0x022C3] = { mathclass='large', adobename='uni22C3', texname='bigcup' },
+--~ [0x022C4] = { mathclass='binary', adobename='uni22C4', texname='smwhtdiamond' },
+--~ [0x022C5] = { mathclass='binary', adobename='uni22C5', texname='cdot' },
+--~ [0x022C6] = { mathclass='binary', adobename='uni22C6', texname='star' },
+--~ [0x022C7] = { mathclass='binary', adobename='uni22C7', texname='divideontimes' },
+--~ [0x022C8] = { mathclass='relation', adobename='uni22C8', texname='bowtie' },
+--~ [0x022C9] = { mathclass='binary', adobename='uni22C9', texname='ltimes' },
+--~ [0x022CA] = { mathclass='binary', adobename='uni22CA', texname='rtimes' },
+--~ [0x022CB] = { mathclass='binary', adobename='uni22CB', texname='leftthreetimes' },
+--~ [0x022CC] = { mathclass='binary', adobename='uni22CC', texname='rightthreetimes' },
+--~ [0x022CD] = { mathclass='relation', adobename='uni22CD', texname='backsimeq' },
+--~ [0x022CE] = { mathclass='binary', adobename='uni22CE', texname='curlyvee' },
+--~ [0x022CF] = { mathclass='binary', adobename='uni22CF', texname='curlywedge' },
+--~ [0x022D0] = { mathclass='relation', adobename='uni22D0', texname='Subset' },
+--~ [0x022D1] = { mathclass='relation', adobename='uni22D1', texname='Supset' },
+--~ [0x022D2] = { mathclass='binary', adobename='uni22D2', texname='Cap' },
+--~ [0x022D3] = { mathclass='binary', adobename='uni22D3', texname='Cup' },
+--~ [0x022D4] = { mathclass='relation', adobename='uni22D4', texname='pitchfork' },
+--~ [0x022D5] = { mathclass='unknown', adobename='uni22D5', texname='equalparallel' },
+--~ [0x022D6] = { mathclass='relation', adobename='uni22D6', texname='lessdot' },
+--~ [0x022D7] = { mathclass='relation', adobename='uni22D7', texname='gtrdot' },
+--~ [0x022D8] = { mathclass='relation', adobename='uni22D8', texname='lll' },
+--~ [0x022D9] = { mathclass='relation', adobename='uni22D9', texname='ggg' },
+--~ [0x022DA] = { mathclass='relation', adobename='uni22DA', texname='lesseqgtr' },
+--~ [0x022DB] = { mathclass='relation', adobename='uni22DB', texname='gtreqless' },
+--~ [0x022DC] = { mathclass='relation', adobename='uni22DC', texname='eqless' },
+--~ [0x022DD] = { mathclass='relation', adobename='uni22DD', texname='eqgtr' },
+--~ [0x022DE] = { mathclass='relation', adobename='uni22DE', texname='curlyeqprec' },
+--~ [0x022DF] = { mathclass='relation', adobename='uni22DF', texname='curlyeqsucc' },
+--~ [0x022E0] = { mathclass='relation', adobename='uni22E0', texname='npreccurlyeq' },
+--~ [0x022E1] = { mathclass='relation', adobename='uni22E1', texname='nsucccurlyeq' },
+--~ [0x022E2] = { mathclass='relation', adobename='uni22E2', texname='nsqsubseteq' },
+--~ [0x022E3] = { mathclass='relation', adobename='uni22E3', texname='nsqsupseteq' },
+--~ [0x022E4] = { mathclass='relation', adobename='uni22E4', texname='sqsubsetneq' },
+--~ [0x022E5] = { mathclass='relation', adobename='uni22E5', texname='sqsupsetneq' },
+--~ [0x022E6] = { mathclass='relation', adobename='uni22E6', texname='lnsim' },
+--~ [0x022E7] = { mathclass='relation', adobename='uni22E7', texname='gnsim' },
+--~ [0x022E8] = { mathclass='relation', adobename='uni22E8', texname='precnsim' },
+--~ [0x022E9] = { mathclass='relation', adobename='uni22E9', texname='succnsim' },
+--~ [0x022EA] = { mathclass='relation', adobename='uni22EA', texname='ntriangleleft' },
+--~ [0x022EB] = { mathclass='relation', adobename='uni22EB', texname='ntriangleright' },
+--~ [0x022EC] = { mathclass='relation', adobename='uni22EC', texname='ntrianglelefteq' },
+--~ [0x022ED] = { mathclass='relation', adobename='uni22ED', texname='ntrianglerighteq' },
+--~ [0x022EE] = { mathclass='unknown', adobename='uni22EE', texname='vdots' },
+--~ [0x022EF] = { mathclass='unknown', adobename='uni22EF', texname='cdots' },
+--~ [0x022F0] = { mathclass='unknown', adobename='uni22F0', texname='adots' },
+--~ [0x022F1] = { mathclass='unknown', adobename='uni22F1', texname='ddots' },
+--~ [0x022F2] = { mathclass='relation', adobename='uni22F2', texname='disin' },
+--~ [0x022F3] = { mathclass='relation', adobename='uni22F3', texname='varisins' },
+--~ [0x022F4] = { mathclass='relation', adobename='uni22F4', texname='isins' },
+--~ [0x022F5] = { mathclass='relation', adobename='uni22F5', texname='isindot' },
+--~ [0x022F6] = { mathclass='relation', adobename='uni22F6', texname='varisinobar' },
+--~ [0x022F7] = { mathclass='relation', adobename='uni22F7', texname='isinobar' },
+--~ [0x022F8] = { mathclass='relation', adobename='uni22F8', texname='isinvb' },
+--~ [0x022F9] = { mathclass='relation', adobename='uni22F9', texname='isinE' },
+--~ [0x022FA] = { mathclass='relation', adobename='uni22FA', texname='nisd' },
+--~ [0x022FB] = { mathclass='relation', adobename='uni22FB', texname='varnis' },
+--~ [0x022FC] = { mathclass='relation', adobename='uni22FC', texname='nis' },
+--~ [0x022FD] = { mathclass='relation', adobename='uni22FD', texname='varniobar' },
+--~ [0x022FE] = { mathclass='relation', adobename='uni22FE', texname='niobar' },
+--~ [0x022FF] = { mathclass='relation', adobename='uni22FF', texname='bagmember' },
+--~ [0x02300] = { mathclass='unknown', adobename='uni2300', texname='diameter' },
+--~ [0x02302] = { mathclass='unknown', adobename='uni2302', texname='house' },
+--~ [0x02305] = { mathclass='binary', adobename='uni2305', texname='varbarwedge' },
+--~ [0x02306] = { mathclass='binary', adobename='uni2306', texname='vardoublebarwedge' },
+--~ [0x02308] = { mathclass='opening', adobename='uni2308', texname='lceil' },
+--~ [0x02309] = { mathclass='closing', adobename='uni2309', texname='rceil' },
+--~ [0x0230A] = { mathclass='opening', adobename='uni230A', texname='lfloor' },
+--~ [0x0230B] = { mathclass='closing', adobename='uni230B', texname='rfloor' },
+--~ [0x0230C] = { mathclass='fence', adobename='uni230C', texname='drcrop' },
+--~ [0x0230D] = { mathclass='fence', adobename='uni230D', texname='dlcrop' },
+--~ [0x0230E] = { mathclass='fence', adobename='uni230E', texname='urcrop' },
+--~ [0x0230F] = { mathclass='fence', adobename='uni230F', texname='ulcrop' },
+--~ [0x02310] = { mathclass='unknown', adobename='uni2310', texname='invnot' },
+--~ [0x02311] = { mathclass='unknown', adobename='uni2311', texname='sqlozenge' },
+--~ [0x02312] = { mathclass='unknown', adobename='uni2312', texname='profline' },
+--~ [0x02313] = { mathclass='unknown', adobename='uni2313', texname='profsurf' },
+--~ [0x02315] = { mathclass='unknown', adobename='uni2315', texname='recorder' },
+--~ [0x02316] = { mathclass='unknown', adobename='uni2316', texname='target' },
+--~ [0x02317] = { mathclass='unknown', adobename='uni2317', texname='viewdata' },
+--~ [0x02318] = { mathclass='unknown', adobename='uni2318', texname='cloverleaf' },
+--~ [0x02319] = { mathclass='unknown', adobename='uni2319', texname='turnednot' },
+--~ [0x0231A] = { mathclass='unknown', adobename='uni231A', texname='watchicon' },
+--~ [0x0231C] = { mathclass='opening', adobename='uni231C', texname='ulcorner' },
+--~ [0x0231D] = { mathclass='closing', adobename='uni231D', texname='urcorner' },
+--~ [0x0231E] = { mathclass='opening', adobename='uni231E', texname='llcorner' },
+--~ [0x0231F] = { mathclass='closing', adobename='uni231F', texname='lrcorner' },
+--~ [0x02320] = { mathclass='unknown', adobename='uni2320', texname='inttop' },
+--~ [0x02321] = { mathclass='unknown', adobename='uni2321', texname='intbottom' },
+--~ [0x02322] = { mathclass='relation', adobename='uni2322', texname='frown' },
+--~ [0x02323] = { mathclass='relation', adobename='uni2323', texname='smile' },
+--~ [0x02329] = { mathclass='unknown', adobename='uni2329', texname='clangle' },
+--~ [0x0232A] = { mathclass='unknown', adobename='uni232A', texname='crangle' },
+--~ [0x0232C] = { mathclass='unknown', adobename='uni232C', texname='varhexagonlrbonds' },
+--~ [0x0232D] = { mathclass='unknown', adobename='uni232D', texname='cylcty' },
+--~ [0x0232E] = { mathclass='unknown', adobename='uni232E', texname='profalar' },
+--~ [0x02332] = { mathclass='unknown', adobename='uni2332', texname='conictaper' },
+--~ [0x02336] = { mathclass='unknown', adobename='uni2336', texname='topbot' },
+--~ [0x0233D] = { mathclass='binary', adobename='uni233D', texname='obar' },
+--~ [0x0233F] = { mathclass='relation', adobename='uni233F', texname='APLnotslash' },
+--~ [0x02340] = { mathclass='unknown', adobename='uni2340', texname='APLnotbackslash' },
+--~ [0x02353] = { mathclass='unknown', adobename='uni2353', texname='APLboxupcaret' },
+--~ [0x02370] = { mathclass='unknown', adobename='uni2370', texname='APLboxquestion' },
+--~ [0x0237C] = { mathclass='unknown', adobename='uni237C', texname='rangledownzigzagarrow' },
+--~ [0x02393] = { mathclass='unknown', adobename='uni2393', texname='dircurrent' },
+--~ [0x02394] = { mathclass='normal', adobename='uni2394', texname='hexagon' },
+--~ [0x0239B] = { mathclass='unknown', adobename='uni239B', texname='lparenuend' },
+--~ [0x0239C] = { mathclass='unknown', adobename='uni239C', texname='lparenextender' },
+--~ [0x0239D] = { mathclass='unknown', adobename='uni239D', texname='lparenlend' },
+--~ [0x0239E] = { mathclass='unknown', adobename='uni239E', texname='rparenuend' },
+--~ [0x0239F] = { mathclass='unknown', adobename='uni239F', texname='rparenextender' },
+--~ [0x023A0] = { mathclass='unknown', adobename='uni23A0', texname='rparenlend' },
+--~ [0x023A1] = { mathclass='unknown', adobename='uni23A1', texname='lbrackuend' },
+--~ [0x023A2] = { mathclass='unknown', adobename='uni23A2', texname='lbrackextender' },
+--~ [0x023A3] = { mathclass='unknown', adobename='uni23A3', texname='lbracklend' },
+--~ [0x023A4] = { mathclass='unknown', adobename='uni23A4', texname='rbrackuend' },
+--~ [0x023A5] = { mathclass='unknown', adobename='uni23A5', texname='rbrackextender' },
+--~ [0x023A6] = { mathclass='unknown', adobename='uni23A6', texname='rbracklend' },
+--~ [0x023A7] = { mathclass='unknown', adobename='uni23A7', texname='lbraceuend' },
+--~ [0x023A8] = { mathclass='unknown', adobename='uni23A8', texname='lbracemid' },
+--~ [0x023A9] = { mathclass='unknown', adobename='uni23A9', texname='lbracelend' },
+--~ [0x023AA] = { mathclass='unknown', adobename='uni23AA', texname='vbraceextender' },
+--~ [0x023AB] = { mathclass='unknown', adobename='uni23AB', texname='rbraceuend' },
+--~ [0x023AC] = { mathclass='unknown', adobename='uni23AC', texname='rbracemid' },
+--~ [0x023AD] = { mathclass='unknown', adobename='uni23AD', texname='rbracelend' },
+--~ [0x023AE] = { mathclass='unknown', adobename='uni23AE', texname='intextender' },
+--~ [0x023AF] = { mathclass='unknown', adobename='uni23AF', texname='hlineextender' },
+--~ [0x023B0] = { mathclass='unknown', adobename='uni23B0', texname='lmoustache' },
+--~ [0x023B1] = { mathclass='unknown', adobename='uni23B1', texname='rmoustache' },
+--~ [0x023B2] = { mathclass='unknown', adobename='uni23B2', texname='sumtop' },
+--~ [0x023B3] = { mathclass='unknown', adobename='uni23B3', texname='sumbottom' },
+--~ [0x023B4] = { mathclass='unknown', adobename='uni23B4', texname='overbracket' },
+--~ [0x023B5] = { mathclass='unknown', adobename='uni23B5', texname='underbracket' },
+--~ [0x023B6] = { mathclass='unknown', adobename='uni23B6', texname='bbrktbrk' },
+--~ [0x023B7] = { mathclass='unknown', adobename='uni23B7', texname='sqrtbottom' },
+--~ [0x023B8] = { mathclass='unknown', adobename='uni23B8', texname='lvboxline' },
+--~ [0x023B9] = { mathclass='unknown', adobename='uni23B9', texname='rvboxline' },
+--~ [0x023CE] = { mathclass='unknown', adobename='uni23CE', texname='varcarriagereturn' },
+--~ [0x023DC] = { mathclass='unknown', adobename='uni23DC', texname='overparen' },
+--~ [0x023DD] = { mathclass='unknown', adobename='uni23DD', texname='underparen' },
+--~ [0x023DE] = { mathclass='unknown', adobename='uni23DE', texname='overbrace' },
+--~ [0x023DF] = { mathclass='unknown', adobename='uni23DF', texname='underbrace' },
+--~ [0x023E0] = { mathclass='unknown', adobename='uni23E0', texname='obrbrak' },
+--~ [0x023E1] = { mathclass='unknown', adobename='uni23E1', texname='ubrbrak' },
+--~ [0x023E2] = { mathclass='normal', adobename='uni23E2', texname='trapezium' },
+--~ [0x023E3] = { mathclass='normal', adobename='uni23E3', texname='benzenr' },
+--~ [0x023E4] = { mathclass='normal', adobename='uni23E4', texname='strns' },
+--~ [0x023E5] = { mathclass='normal', adobename='uni23E5', texname='fltns' },
+--~ [0x023E6] = { mathclass='normal', adobename='uni23E6', texname='accurrent' },
+--~ [0x023E7] = { mathclass='normal', adobename='uni23E7', texname='elinters' },
+--~ [0x02422] = { mathclass='unknown', adobename='uni2422', texname='textblank' },
+--~ [0x02423] = { mathclass='normal', adobename='uni2423', texname='textvisiblespace' },
+--~ [0x02460] = { mathclass='normal', adobename='uni2460', texname='circledone' },
+--~ [0x02461] = { mathclass='normal', adobename='uni2461', texname='circledtwo' },
+--~ [0x02462] = { mathclass='normal', adobename='uni2462', texname='circledthree' },
+--~ [0x02463] = { mathclass='normal', adobename='uni2463', texname='circledfour' },
+--~ [0x02464] = { mathclass='normal', adobename='uni2464', texname='circledfive' },
+--~ [0x02465] = { mathclass='normal', adobename='uni2465', texname='circledsix' },
+--~ [0x02466] = { mathclass='normal', adobename='uni2466', texname='circledseven' },
+--~ [0x02467] = { mathclass='normal', adobename='uni2467', texname='circledeight' },
+--~ [0x02468] = { mathclass='normal', adobename='uni2468', texname='circlednine' },
+--~ [0x024B6] = { mathclass='normal', adobename='uni24B6', texname='circledA' },
+--~ [0x024B7] = { mathclass='normal', adobename='uni24B7', texname='circledB' },
+--~ [0x024B8] = { mathclass='normal', adobename='uni24B8', texname='circledC' },
+--~ [0x024B9] = { mathclass='normal', adobename='uni24B9', texname='circledD' },
+--~ [0x024BA] = { mathclass='normal', adobename='uni24BA', texname='circledE' },
+--~ [0x024BB] = { mathclass='normal', adobename='uni24BB', texname='circledF' },
+--~ [0x024BC] = { mathclass='normal', adobename='uni24BC', texname='circledG' },
+--~ [0x024BD] = { mathclass='normal', adobename='uni24BD', texname='circledH' },
+--~ [0x024BE] = { mathclass='normal', adobename='uni24BE', texname='circledI' },
+--~ [0x024BF] = { mathclass='normal', adobename='uni24BF', texname='circledJ' },
+--~ [0x024C0] = { mathclass='normal', adobename='uni24C0', texname='circledK' },
+--~ [0x024C1] = { mathclass='normal', adobename='uni24C1', texname='circledL' },
+--~ [0x024C2] = { mathclass='normal', adobename='uni24C2', texname='circledM' },
+--~ [0x024C3] = { mathclass='normal', adobename='uni24C3', texname='circledN' },
+--~ [0x024C4] = { mathclass='normal', adobename='uni24C4', texname='circledO' },
+--~ [0x024C5] = { mathclass='normal', adobename='uni24C5', texname='circledP' },
+--~ [0x024C6] = { mathclass='normal', adobename='uni24C6', texname='circledQ' },
+--~ [0x024C7] = { mathclass='normal', adobename='uni24C7', texname='circledR' },
+--~ [0x024C8] = { mathclass='normal', adobename='uni24C8', texname='circledS' },
+--~ [0x024C9] = { mathclass='normal', adobename='uni24C9', texname='circledT' },
+--~ [0x024CA] = { mathclass='normal', adobename='uni24CA', texname='circledU' },
+--~ [0x024CB] = { mathclass='normal', adobename='uni24CB', texname='circledV' },
+--~ [0x024CC] = { mathclass='normal', adobename='uni24CC', texname='circledW' },
+--~ [0x024CD] = { mathclass='normal', adobename='uni24CD', texname='circledX' },
+--~ [0x024CE] = { mathclass='normal', adobename='uni24CE', texname='circledY' },
+--~ [0x024CF] = { mathclass='normal', adobename='uni24CF', texname='circledZ' },
+--~ [0x024D0] = { mathclass='normal', adobename='uni24D0', texname='circleda' },
+--~ [0x024D1] = { mathclass='normal', adobename='uni24D1', texname='circledb' },
+--~ [0x024D2] = { mathclass='normal', adobename='uni24D2', texname='circledc' },
+--~ [0x024D3] = { mathclass='normal', adobename='uni24D3', texname='circledd' },
+--~ [0x024D4] = { mathclass='normal', adobename='uni24D4', texname='circlede' },
+--~ [0x024D5] = { mathclass='normal', adobename='uni24D5', texname='circledf' },
+--~ [0x024D6] = { mathclass='normal', adobename='uni24D6', texname='circledg' },
+--~ [0x024D7] = { mathclass='normal', adobename='uni24D7', texname='circledh' },
+--~ [0x024D8] = { mathclass='normal', adobename='uni24D8', texname='circledi' },
+--~ [0x024D9] = { mathclass='normal', adobename='uni24D9', texname='circledj' },
+--~ [0x024DA] = { mathclass='normal', adobename='uni24DA', texname='circledk' },
+--~ [0x024DB] = { mathclass='normal', adobename='uni24DB', texname='circledl' },
+--~ [0x024DC] = { mathclass='normal', adobename='uni24DC', texname='circledm' },
+--~ [0x024DD] = { mathclass='normal', adobename='uni24DD', texname='circledn' },
+--~ [0x024DE] = { mathclass='normal', adobename='uni24DE', texname='circledo' },
+--~ [0x024DF] = { mathclass='normal', adobename='uni24DF', texname='circledp' },
+--~ [0x024E0] = { mathclass='normal', adobename='uni24E0', texname='circledq' },
+--~ [0x024E1] = { mathclass='normal', adobename='uni24E1', texname='circledr' },
+--~ [0x024E2] = { mathclass='normal', adobename='uni24E2', texname='circleds' },
+--~ [0x024E3] = { mathclass='normal', adobename='uni24E3', texname='circledt' },
+--~ [0x024E4] = { mathclass='normal', adobename='uni24E4', texname='circledu' },
+--~ [0x024E5] = { mathclass='normal', adobename='uni24E5', texname='circledv' },
+--~ [0x024E6] = { mathclass='normal', adobename='uni24E6', texname='circledw' },
+--~ [0x024E7] = { mathclass='normal', adobename='uni24E7', texname='circledx' },
+--~ [0x024E8] = { mathclass='normal', adobename='uni24E8', texname='circledy' },
+--~ [0x024E9] = { mathclass='normal', adobename='uni24E9', texname='circledz' },
+--~ [0x024EA] = { mathclass='normal', adobename='uni24EA', texname='circledzero' },
+--~ [0x02500] = { mathclass='unknown', adobename='uni2500', texname='bdhrule' },
+--~ [0x02502] = { mathclass='unknown', adobename='uni2502', texname='bdvrule' },
+--~ [0x02506] = { mathclass='unknown', adobename='uni2506', texname='bdtriplevdash' },
+--~ [0x02508] = { mathclass='unknown', adobename='uni2508', texname='bdquadhdash' },
+--~ [0x0250A] = { mathclass='unknown', adobename='uni250A', texname='bdquadvdash' },
+--~ [0x0250C] = { mathclass='unknown', adobename='uni250C', texname='bddvrh' },
+--~ [0x02510] = { mathclass='unknown', adobename='uni2510', texname='bddvlh' },
+--~ [0x02514] = { mathclass='unknown', adobename='uni2514', texname='bduvrh' },
+--~ [0x02518] = { mathclass='unknown', adobename='uni2518', texname='bduvlh' },
+--~ [0x0251C] = { mathclass='unknown', adobename='uni251C', texname='bdbvrh' },
+--~ [0x02524] = { mathclass='unknown', adobename='uni2524', texname='bdbvlh' },
+--~ [0x0252C] = { mathclass='unknown', adobename='uni252C', texname='bddvbh' },
+--~ [0x02534] = { mathclass='unknown', adobename='uni2534', texname='bduvbh' },
+--~ [0x0253C] = { mathclass='unknown', adobename='uni253C', texname='bdbvbh' },
+--~ [0x02550] = { mathclass='unknown', adobename='uni2550', texname='bdHrule' },
+--~ [0x02551] = { mathclass='unknown', adobename='uni2551', texname='bdVrule' },
+--~ [0x02552] = { mathclass='unknown', adobename='uni2552', texname='bddvrH' },
+--~ [0x02553] = { mathclass='unknown', adobename='uni2553', texname='bddVrh' },
+--~ [0x02554] = { mathclass='unknown', adobename='uni2554', texname='bddVrH' },
+--~ [0x02555] = { mathclass='unknown', adobename='uni2555', texname='bddvlH' },
+--~ [0x02556] = { mathclass='unknown', adobename='uni2556', texname='bddVlh' },
+--~ [0x02557] = { mathclass='unknown', adobename='uni2557', texname='bddVlH' },
+--~ [0x02558] = { mathclass='unknown', adobename='uni2558', texname='bduvrH' },
+--~ [0x02559] = { mathclass='unknown', adobename='uni2559', texname='bduVrh' },
+--~ [0x0255A] = { mathclass='unknown', adobename='uni255A', texname='bduVrH' },
+--~ [0x0255B] = { mathclass='unknown', adobename='uni255B', texname='bduvlH' },
+--~ [0x0255C] = { mathclass='unknown', adobename='uni255C', texname='bduVlh' },
+--~ [0x0255D] = { mathclass='unknown', adobename='uni255D', texname='bduVlH' },
+--~ [0x0255E] = { mathclass='unknown', adobename='uni255E', texname='bdbvrH' },
+--~ [0x0255F] = { mathclass='unknown', adobename='uni255F', texname='bdbVrh' },
+--~ [0x02560] = { mathclass='unknown', adobename='uni2560', texname='bdbVrH' },
+--~ [0x02561] = { mathclass='unknown', adobename='uni2561', texname='bdbvlH' },
+--~ [0x02562] = { mathclass='unknown', adobename='uni2562', texname='bdbVlh' },
+--~ [0x02563] = { mathclass='unknown', adobename='uni2563', texname='bdbVlH' },
+--~ [0x02564] = { mathclass='unknown', adobename='uni2564', texname='bddvbH' },
+--~ [0x02565] = { mathclass='unknown', adobename='uni2565', texname='bddVbh' },
+--~ [0x02566] = { mathclass='unknown', adobename='uni2566', texname='bddVbH' },
+--~ [0x02567] = { mathclass='unknown', adobename='uni2567', texname='bduvbH' },
+--~ [0x02568] = { mathclass='unknown', adobename='uni2568', texname='bduVbh' },
+--~ [0x02569] = { mathclass='unknown', adobename='uni2569', texname='bduVbH' },
+--~ [0x0256A] = { mathclass='unknown', adobename='uni256A', texname='bdbvbH' },
+--~ [0x0256B] = { mathclass='unknown', adobename='uni256B', texname='bdbVbh' },
+--~ [0x0256C] = { mathclass='unknown', adobename='uni256C', texname='bdbVbH' },
+--~ [0x02571] = { mathclass='unknown', adobename='uni2571', texname='bdnesw' },
+--~ [0x02572] = { mathclass='unknown', adobename='uni2572', texname='bdnwse' },
+--~ [0x02580] = { mathclass='unknown', adobename='uni2580', texname='blockuphalf' },
+--~ [0x02584] = { mathclass='unknown', adobename='uni2584', texname='blocklowhalf' },
+--~ [0x02588] = { mathclass='unknown', adobename='uni2588', texname='blockfull' },
+--~ [0x0258C] = { mathclass='unknown', adobename='uni258C', texname='blocklefthalf' },
+--~ [0x02590] = { mathclass='unknown', adobename='uni2590', texname='blockrighthalf' },
+--~ [0x02591] = { mathclass='unknown', adobename='uni2591', texname='blockqtrshaded' },
+--~ [0x02592] = { mathclass='unknown', adobename='uni2592', texname='blockhalfshaded' },
+--~ [0x02593] = { mathclass='unknown', adobename='uni2593', texname='blockthreeqtrshaded' },
+--~ [0x025A0] = { mathclass='unknown', adobename='uni25A0', texname='mdlgblksquare' },
+--~ [0x025A1] = { mathclass='unknown', adobename='uni25A1', texname='mdlgwhtsquare' },
+--~ [0x025A2] = { mathclass='unknown', adobename='uni25A2', texname='squoval' },
+--~ [0x025A3] = { mathclass='unknown', adobename='uni25A3', texname='blackinwhitesquare' },
+--~ [0x025A4] = { mathclass='unknown', adobename='uni25A4', texname='squarehfill' },
+--~ [0x025A5] = { mathclass='unknown', adobename='uni25A5', texname='squarevfill' },
+--~ [0x025A6] = { mathclass='unknown', adobename='uni25A6', texname='squarehvfill' },
+--~ [0x025A7] = { mathclass='unknown', adobename='uni25A7', texname='squarenwsefill' },
+--~ [0x025A8] = { mathclass='unknown', adobename='uni25A8', texname='squareneswfill' },
+--~ [0x025A9] = { mathclass='normal', adobename='uni25A9', texname='squarecrossfill' },
+--~ [0x025AA] = { mathclass='unknown', adobename='uni25AA', texname='smblksquare' },
+--~ [0x025AB] = { mathclass='normal', adobename='uni25AB', texname='smwhtsquare' },
+--~ [0x025AC] = { mathclass='unknown', adobename='uni25AC', texname='hrectangleblack' },
+--~ [0x025AD] = { mathclass='unknown', adobename='uni25AD', texname='hrectangle' },
+--~ [0x025AE] = { mathclass='unknown', adobename='uni25AE', texname='vrectangleblack' },
+--~ [0x025AF] = { mathclass='unknown', adobename='uni25AF', texname='vrectangle' },
+--~ [0x025B0] = { mathclass='unknown', adobename='uni25B0', texname='parallelogramblack' },
+--~ [0x025B1] = { mathclass='unknown', adobename='uni25B1', texname='parallelogram' },
+--~ [0x025B2] = { mathclass='unknown', adobename='uni25B2', texname='bigblacktriangleup' },
+--~ [0x025B3] = { mathclass='unknown', adobename='uni25B3', texname='bigtriangleup' },
+--~ [0x025B4] = { mathclass='unknown', adobename='uni25B4', texname='blacktriangle' },
+--~ [0x025B5] = { mathclass='unknown', adobename='uni25B5', texname='vartriangle' },
+--~ [0x025B6] = { mathclass='unknown', adobename='uni25B6', texname='blacktriangleright' },
+--~ [0x025B7] = { mathclass='binary', adobename='uni25B7', texname='triangleright' },
+--~ [0x025B8] = { mathclass='unknown', adobename='uni25B8', texname='smallblacktriangleright' },
+--~ [0x025B9] = { mathclass='unknown', adobename='uni25B9', texname='smalltriangleright' },
+--~ [0x025BA] = { mathclass='unknown', adobename='uni25BA', texname='blackpointerright' },
+--~ [0x025BB] = { mathclass='unknown', adobename='uni25BB', texname='whitepointerright' },
+--~ [0x025BC] = { mathclass='unknown', adobename='uni25BC', texname='bigblacktriangledown' },
+--~ [0x025BD] = { mathclass='unknown', adobename='uni25BD', texname='bigtriangledown' },
+--~ [0x025BE] = { mathclass='unknown', adobename='uni25BE', texname='blacktriangledown' },
+--~ [0x025BF] = { mathclass='unknown', adobename='uni25BF', texname='triangledown' },
+--~ [0x025C0] = { mathclass='unknown', adobename='uni25C0', texname='blacktriangleleft' },
+--~ [0x025C1] = { mathclass='binary', adobename='uni25C1', texname='triangleleft' },
+--~ [0x025C2] = { mathclass='unknown', adobename='uni25C2', texname='smallblacktriangleleft' },
+--~ [0x025C3] = { mathclass='unknown', adobename='uni25C3', texname='smalltriangleleft' },
+--~ [0x025C4] = { mathclass='unknown', adobename='uni25C4', texname='blackpointerleft' },
+--~ [0x025C5] = { mathclass='unknown', adobename='uni25C5', texname='whitepointerleft' },
+--~ [0x025C6] = { mathclass='normal', adobename='uni25C6', texname='mdlgblkdiamond' },
+--~ [0x025C7] = { mathclass='normal', adobename='uni25C7', texname='mdlgwhtdiamond' },
+--~ [0x025C8] = { mathclass='unknown', adobename='uni25C8', texname='blackinwhitediamond' },
+--~ [0x025C9] = { mathclass='unknown', adobename='uni25C9', texname='fisheye' },
+--~ [0x025CA] = { mathclass='unknown', adobename='uni25CA', texname='mdlgwhtlozenge' },
+--~ [0x025CB] = { mathclass='binary', adobename='uni25CB', texname='mdlgwhtcircle' },
+--~ [0x025CC] = { mathclass='unknown', adobename='uni25CC', texname='dottedcircle' },
+--~ [0x025CD] = { mathclass='unknown', adobename='uni25CD', texname='circlevertfill' },
+--~ [0x025CE] = { mathclass='unknown', adobename='uni25CE', texname='bullseye' },
+--~ [0x025CF] = { mathclass='unknown', adobename='uni25CF', texname='mdlgblkcircle' },
+--~ [0x025D0] = { mathclass='unknown', adobename='uni25D0', texname='circlelefthalfblack' },
+--~ [0x025D1] = { mathclass='unknown', adobename='uni25D1', texname='circlerighthalfblack' },
+--~ [0x025D2] = { mathclass='unknown', adobename='uni25D2', texname='circlebottomhalfblack' },
+--~ [0x025D3] = { mathclass='unknown', adobename='uni25D3', texname='circletophalfblack' },
+--~ [0x025D4] = { mathclass='unknown', adobename='uni25D4', texname='circleurquadblack' },
+--~ [0x025D5] = { mathclass='unknown', adobename='uni25D5', texname='blackcircleulquadwhite' },
+--~ [0x025D6] = { mathclass='unknown', adobename='uni25D6', texname='blacklefthalfcircle' },
+--~ [0x025D7] = { mathclass='unknown', adobename='uni25D7', texname='blackrighthalfcircle' },
+--~ [0x025D8] = { mathclass='unknown', adobename='uni25D8', texname='inversebullet' },
+--~ [0x025D9] = { mathclass='unknown', adobename='uni25D9', texname='inversewhitecircle' },
+--~ [0x025DA] = { mathclass='unknown', adobename='uni25DA', texname='invwhiteupperhalfcircle' },
+--~ [0x025DB] = { mathclass='unknown', adobename='uni25DB', texname='invwhitelowerhalfcircle' },
+--~ [0x025DC] = { mathclass='unknown', adobename='uni25DC', texname='ularc' },
+--~ [0x025DD] = { mathclass='unknown', adobename='uni25DD', texname='urarc' },
+--~ [0x025DE] = { mathclass='unknown', adobename='uni25DE', texname='lrarc' },
+--~ [0x025DF] = { mathclass='unknown', adobename='uni25DF', texname='llarc' },
+--~ [0x025E0] = { mathclass='unknown', adobename='uni25E0', texname='topsemicircle' },
+--~ [0x025E1] = { mathclass='unknown', adobename='uni25E1', texname='botsemicircle' },
+--~ [0x025E2] = { mathclass='unknown', adobename='uni25E2', texname='lrblacktriangle' },
+--~ [0x025E3] = { mathclass='unknown', adobename='uni25E3', texname='llblacktriangle' },
+--~ [0x025E4] = { mathclass='unknown', adobename='uni25E4', texname='ulblacktriangle' },
+--~ [0x025E5] = { mathclass='unknown', adobename='uni25E5', texname='urblacktriangle' },
+--~ [0x025E6] = { mathclass='unknown', adobename='uni25E6', texname='smwhtcircle' },
+--~ [0x025E7] = { mathclass='unknown', adobename='uni25E7', texname='squareleftblack' },
+--~ [0x025E8] = { mathclass='unknown', adobename='uni25E8', texname='squarerightblack' },
+--~ [0x025E9] = { mathclass='unknown', adobename='uni25E9', texname='squareulblack' },
+--~ [0x025EA] = { mathclass='unknown', adobename='uni25EA', texname='squarelrblack' },
+--~ [0x025EB] = { mathclass='binary', adobename='uni25EB', texname='boxbar' },
+--~ [0x025EC] = { mathclass='unknown', adobename='uni25EC', texname='trianglecdot' },
+--~ [0x025ED] = { mathclass='unknown', adobename='uni25ED', texname='triangleleftblack' },
+--~ [0x025EE] = { mathclass='unknown', adobename='uni25EE', texname='trianglerightblack' },
+--~ [0x025EF] = { mathclass='unknown', adobename='uni25EF', texname='lgwhtcircle' },
+--~ [0x025F0] = { mathclass='unknown', adobename='uni25F0', texname='squareulquad' },
+--~ [0x025F1] = { mathclass='unknown', adobename='uni25F1', texname='squarellquad' },
+--~ [0x025F2] = { mathclass='unknown', adobename='uni25F2', texname='squarelrquad' },
+--~ [0x025F3] = { mathclass='unknown', adobename='uni25F3', texname='squareurquad' },
+--~ [0x025F4] = { mathclass='unknown', adobename='uni25F4', texname='circleulquad' },
+--~ [0x025F5] = { mathclass='unknown', adobename='uni25F5', texname='circlellquad' },
+--~ [0x025F6] = { mathclass='unknown', adobename='uni25F6', texname='circlelrquad' },
+--~ [0x025F7] = { mathclass='unknown', adobename='uni25F7', texname='circleurquad' },
+--~ [0x025F8] = { mathclass='unknown', adobename='uni25F8', texname='ultriangle' },
+--~ [0x025F9] = { mathclass='unknown', adobename='uni25F9', texname='urtriangle' },
+--~ [0x025FA] = { mathclass='unknown', adobename='uni25FA', texname='lltriangle' },
+--~ [0x025FB] = { mathclass='normal', adobename='uni25FB', texname='mdwhtsquare' },
+--~ [0x025FC] = { mathclass='normal', adobename='uni25FC', texname='mdblksquare' },
+--~ [0x025FD] = { mathclass='normal', adobename='uni25FD', texname='mdsmwhtsquare' },
+--~ [0x025FE] = { mathclass='normal', adobename='uni25FE', texname='mdsmblksquare' },
+--~ [0x025FF] = { mathclass='normal', adobename='uni25FF', texname='lrtriangle' },
+--~ [0x02605] = { mathclass='unknown', adobename='uni2605', texname='bigstar' },
+--~ [0x02606] = { mathclass='unknown', adobename='uni2606', texname='bigwhitestar' },
+--~ [0x02609] = { mathclass='unknown', adobename='uni2609', texname='astrosun' },
+--~ [0x0260C] = { mathclass='unknown', adobename='uni260C', texname='conjunction' },
+--~ [0x0260E] = { mathclass='normal', adobename='uni260E', texname='phone' },
+--~ [0x02612] = { mathclass='normal', adobename='uni2612', texname='XBox' },
+--~ [0x02621] = { mathclass='normal', adobename='uni2621', texname='danger' },
+--~ [0x02639] = { mathclass='normal', adobename='uni2639', texname='frownie' },
+--~ [0x0263A] = { mathclass='normal', adobename='uni263A', texname='smiley' },
+--~ [0x0263B] = { mathclass='unknown', adobename='uni263B', texname='blacksmiley' },
+--~ [0x0263C] = { mathclass='unknown', adobename='uni263C', texname='sun' },
+--~ [0x0263D] = { mathclass='unknown', adobename='uni263D', texname='rightmoon' },
+--~ [0x0263E] = { mathclass='unknown', adobename='uni263E', texname='leftmoon' },
+--~ [0x0263F] = { mathclass='normal', adobename='uni263F', texname='mercury' },
+--~ [0x02640] = { mathclass='normal', adobename='uni2640', texname='female' },
+--~ [0x02641] = { mathclass='normal', adobename='uni2641', texname='earth' },
+--~ [0x02642] = { mathclass='normal', adobename='uni2642', texname='male' },
+--~ [0x02643] = { mathclass='normal', adobename='uni2643', texname='jupiter' },
+--~ [0x02644] = { mathclass='normal', adobename='uni2644', texname='saturn' },
+--~ [0x02646] = { mathclass='normal', adobename='uni2646', texname='neptune' },
+--~ [0x02647] = { mathclass='normal', adobename='uni2647', texname='pluto' },
+--~ [0x02648] = { mathclass='normal', adobename='uni2648', texname='aries' },
+--~ [0x02649] = { mathclass='normal', adobename='uni2649', texname='taurus' },
+--~ [0x02660] = { mathclass='normal', adobename='uni2660', texname='spadesuit' },
+--~ [0x02661] = { mathclass='normal', adobename='uni2661', texname='heartsuit' },
+--~ [0x02662] = { mathclass='normal', adobename='uni2662', texname='diamondsuit' },
+--~ [0x02663] = { mathclass='normal', adobename='uni2663', texname='clubsuit' },
+--~ [0x02664] = { mathclass='normal', adobename='uni2664', texname='varspadesuit' },
+--~ [0x02665] = { mathclass='normal', adobename='uni2665', texname='varheartsuit' },
+--~ [0x02666] = { mathclass='normal', adobename='uni2666', texname='vardiamondsuit' },
+--~ [0x02667] = { mathclass='normal', adobename='uni2667', texname='varclubsuit' },
+--~ [0x02669] = { mathclass='normal', adobename='uni2669', texname='quarternote' },
+--~ [0x0266A] = { mathclass='unknown', adobename='uni266A', texname='eighthnote' },
+--~ [0x0266B] = { mathclass='unknown', adobename='uni266B', texname='twonotes' },
+--~ [0x0266D] = { mathclass='normal', adobename='uni266D', texname='flat' },
+--~ [0x0266E] = { mathclass='normal', adobename='uni266E', texname='natural' },
+--~ [0x0266F] = { mathclass='normal', adobename='uni266F', texname='sharp' },
+--~ [0x0267E] = { mathclass='unknown', adobename='uni267E', texname='acidfree' },
+--~ [0x02680] = { mathclass='unknown', adobename='uni2680', texname='dicei' },
+--~ [0x02681] = { mathclass='unknown', adobename='uni2681', texname='diceii' },
+--~ [0x02682] = { mathclass='unknown', adobename='uni2682', texname='diceiii' },
+--~ [0x02683] = { mathclass='unknown', adobename='uni2683', texname='diceiv' },
+--~ [0x02684] = { mathclass='unknown', adobename='uni2684', texname='dicev' },
+--~ [0x02685] = { mathclass='unknown', adobename='uni2685', texname='dicevi' },
+--~ [0x02686] = { mathclass='unknown', adobename='uni2686', texname='circledrightdot' },
+--~ [0x02687] = { mathclass='unknown', adobename='uni2687', texname='circledtwodots' },
+--~ [0x02688] = { mathclass='unknown', adobename='uni2688', texname='blackcircledrightdot' },
+--~ [0x02689] = { mathclass='unknown', adobename='uni2689', texname='blackcircledtwodots' },
+--~ [0x026A0] = { mathclass='normal', adobename='uni26A0', texname='triangleexclam' },
+--~ [0x026A5] = { mathclass='normal', adobename='uni26A5', texname='Hermaphrodite' },
+--~ [0x026AA] = { mathclass='normal', adobename='uni26AA', texname='mdwhtcircle' },
+--~ [0x026AB] = { mathclass='normal', adobename='uni26AB', texname='mdblkcircle' },
+--~ [0x026AC] = { mathclass='normal', adobename='uni26AC', texname='mdsmwhtcircle' },
+--~ [0x026B2] = { mathclass='normal', adobename='uni26B2', texname='neuter' },
+--~ [0x02702] = { mathclass='normal', adobename='uni2702', texname='scissors' },
+--~ [0x02709] = { mathclass='normal', adobename='uni2709', texname='envelope' },
+--~ [0x02713] = { mathclass='normal', adobename='uni2713', texname='checkmark' },
+--~ [0x02720] = { mathclass='normal', adobename='uni2720', texname='maltese' },
+--~ [0x0272A] = { mathclass='unknown', adobename='uni272A', texname='circledstar' },
+--~ [0x02736] = { mathclass='normal', adobename='uni2736', texname='varstar' },
+--~ [0x0273D] = { mathclass='unknown', adobename='uni273D', texname='dingasterisk' },
+--~ [0x02772] = { mathclass='opening', adobename='uni2772', texname='lbrbrak' },
+--~ [0x02773] = { mathclass='closing', adobename='uni2773', texname='rbrbrak' },
+--~ [0x02780] = { mathclass='unknown', adobename='uni2780', texname='circledsansone' },
+--~ [0x02781] = { mathclass='unknown', adobename='uni2781', texname='circledsanstwo' },
+--~ [0x02782] = { mathclass='unknown', adobename='uni2782', texname='circledsansthree' },
+--~ [0x02783] = { mathclass='unknown', adobename='uni2783', texname='circledsansfour' },
+--~ [0x02784] = { mathclass='unknown', adobename='uni2784', texname='circledsansfive' },
+--~ [0x02785] = { mathclass='unknown', adobename='uni2785', texname='circledsanssix' },
+--~ [0x02786] = { mathclass='unknown', adobename='uni2786', texname='circledsansseven' },
+--~ [0x02787] = { mathclass='unknown', adobename='uni2787', texname='circledsanseight' },
+--~ [0x02788] = { mathclass='unknown', adobename='uni2788', texname='circledsansnine' },
+--~ [0x02789] = { mathclass='unknown', adobename='uni2789', texname='circledsansten' },
+--~ [0x0278A] = { mathclass='unknown', adobename='uni278A', texname='blackcircledsansone' },
+--~ [0x0278B] = { mathclass='unknown', adobename='uni278B', texname='blackcircledsanstwo' },
+--~ [0x0278C] = { mathclass='unknown', adobename='uni278C', texname='blackcircledsansthree' },
+--~ [0x0278D] = { mathclass='unknown', adobename='uni278D', texname='blackcircledsansfour' },
+--~ [0x0278E] = { mathclass='unknown', adobename='uni278E', texname='blackcircledsansfive' },
+--~ [0x0278F] = { mathclass='unknown', adobename='uni278F', texname='blackcircledsanssix' },
+--~ [0x02790] = { mathclass='unknown', adobename='uni2790', texname='blackcircledsansseven' },
+--~ [0x02791] = { mathclass='unknown', adobename='uni2791', texname='blackcircledsanseight' },
+--~ [0x02792] = { mathclass='unknown', adobename='uni2792', texname='blackcircledsansnine' },
+--~ [0x02793] = { mathclass='unknown', adobename='uni2793', texname='blackcircledsansten' },
+--~ [0x0279B] = { mathclass='unknown', adobename='uni279B', texname='draftingarrow' },
+--~ [0x027C0] = { mathclass='unknown', adobename='uni27C0', texname='threedangle' },
+--~ [0x027C1] = { mathclass='unknown', adobename='uni27C1', texname='whiteinwhitetriangle' },
+--~ [0x027C2] = { mathclass='relation', adobename='uni27C2', texname='perp' },
+--~ [0x027C3] = { mathclass='unknown', adobename='uni27C3', texname='subsetcirc' },
+--~ [0x027C4] = { mathclass='unknown', adobename='uni27C4', texname='supsetcirc' },
+--~ [0x027C5] = { mathclass='opening', adobename='uni27C5', texname='lbag' },
+--~ [0x027C6] = { mathclass='closing', adobename='uni27C6', texname='rbag' },
+--~ [0x027C7] = { mathclass='binary', adobename='uni27C7', texname='veedot' },
+--~ [0x027C8] = { mathclass='relation', adobename='uni27C8', texname='bsolhsub' },
+--~ [0x027C9] = { mathclass='relation', adobename='uni27C9', texname='suphsol' },
+--~ [0x027D0] = { mathclass='normal', adobename='uni27D0', texname='diamondcdot' },
+--~ [0x027D1] = { mathclass='binary', adobename='uni27D1', texname='wedgedot' },
+--~ [0x027D2] = { mathclass='relation', adobename='uni27D2', texname='upin' },
+--~ [0x027D3] = { mathclass='relation', adobename='uni27D3', texname='pullback' },
+--~ [0x027D4] = { mathclass='relation', adobename='uni27D4', texname='pushout' },
+--~ [0x027D5] = { mathclass='large', adobename='uni27D5', texname='leftouterjoin' },
+--~ [0x027D6] = { mathclass='large', adobename='uni27D6', texname='rightouterjoin' },
+--~ [0x027D7] = { mathclass='large', adobename='uni27D7', texname='fullouterjoin' },
+--~ [0x027D8] = { mathclass='large', adobename='uni27D8', texname='bigbot' },
+--~ [0x027D9] = { mathclass='large', adobename='uni27D9', texname='bigtop' },
+--~ [0x027DA] = { mathclass='relation', adobename='uni27DA', texname='DashVDash' },
+--~ [0x027DB] = { mathclass='relation', adobename='uni27DB', texname='dashVdash' },
+--~ [0x027DC] = { mathclass='relation', adobename='uni27DC', texname='multimapinv' },
+--~ [0x027DD] = { mathclass='relation', adobename='uni27DD', texname='vlongdash' },
+--~ [0x027DE] = { mathclass='relation', adobename='uni27DE', texname='longdashv' },
+--~ [0x027DF] = { mathclass='relation', adobename='uni27DF', texname='cirbot' },
+--~ [0x027E0] = { mathclass='binary', adobename='uni27E0', texname='lozengeminus' },
+--~ [0x027E1] = { mathclass='binary', adobename='uni27E1', texname='concavediamond' },
+--~ [0x027E2] = { mathclass='binary', adobename='uni27E2', texname='concavediamondtickleft' },
+--~ [0x027E3] = { mathclass='binary', adobename='uni27E3', texname='concavediamondtickright' },
+--~ [0x027E4] = { mathclass='binary', adobename='uni27E4', texname='whitesquaretickleft' },
+--~ [0x027E5] = { mathclass='binary', adobename='uni27E5', texname='whitesquaretickright' },
+--~ [0x027E6] = { mathclass='opening', adobename='uni27E6', texname='lBrack' },
+--~ [0x027E7] = { mathclass='closing', adobename='uni27E7', texname='rBrack' },
+--~ [0x027E8] = { mathclass='opening', adobename='uni27E8', texname='langle' },
+--~ [0x027E9] = { mathclass='closing', adobename='uni27E9', texname='rangle' },
+--~ [0x027EA] = { mathclass='opening', adobename='uni27EA', texname='lAngle' },
+--~ [0x027EB] = { mathclass='closing', adobename='uni27EB', texname='rAngle' },
+--~ [0x027EC] = { mathclass='opening', adobename='uni27EC', texname='Lbrbrak' },
+--~ [0x027ED] = { mathclass='closing', adobename='uni27ED', texname='Rbrbrak' },
+--~ [0x027F0] = { mathclass='relation', adobename='uni27F0', texname='UUparrow' },
+--~ [0x027F1] = { mathclass='relation', adobename='uni27F1', texname='DDownarrow' },
+--~ [0x027F2] = { mathclass='relation', adobename='uni27F2', texname='acwgapcirclearrow' },
+--~ [0x027F3] = { mathclass='relation', adobename='uni27F3', texname='cwgapcirclearrow' },
+--~ [0x027F4] = { mathclass='relation', adobename='uni27F4', texname='rightarrowonoplus' },
+--~ [0x027F5] = { mathclass='relation', adobename='uni27F5', texname='longleftarrow' },
+--~ [0x027F6] = { mathclass='relation', adobename='uni27F6', texname='longrightarrow' },
+--~ [0x027F7] = { mathclass='relation', adobename='uni27F7', texname='longleftrightarrow' },
+--~ [0x027F8] = { mathclass='relation', adobename='uni27F8', texname='Longleftarrow' },
+--~ [0x027F9] = { mathclass='relation', adobename='uni27F9', texname='Longrightarrow' },
+--~ [0x027FA] = { mathclass='relation', adobename='uni27FA', texname='Longleftrightarrow' },
+--~ [0x027FB] = { mathclass='relation', adobename='uni27FB', texname='longmapsfrom' },
+--~ [0x027FC] = { mathclass='relation', adobename='uni27FC', texname='longmapsto' },
+--~ [0x027FD] = { mathclass='relation', adobename='uni27FD', texname='Longmapsfrom' },
+--~ [0x027FE] = { mathclass='relation', adobename='uni27FE', texname='Longmapsto' },
+--~ [0x027FF] = { mathclass='relation', adobename='uni27FF', texname='longrightzigzagarrow' },
+--~ [0x02900] = { mathclass='relation', adobename='uni2900', texname='nvtwoheadrightarrow' },
+--~ [0x02901] = { mathclass='relation', adobename='uni2901', texname='nVtwoheadrightarrow' },
+--~ [0x02902] = { mathclass='relation', adobename='uni2902', texname='nvLeftarrow' },
+--~ [0x02903] = { mathclass='relation', adobename='uni2903', texname='nvRightarrow' },
+--~ [0x02904] = { mathclass='relation', adobename='uni2904', texname='nvLeftrightarrow' },
+--~ [0x02905] = { mathclass='relation', adobename='uni2905', texname='twoheadmapsto' },
+--~ [0x02906] = { mathclass='relation', adobename='uni2906', texname='Mapsfrom' },
+--~ [0x02907] = { mathclass='relation', adobename='uni2907', texname='Mapsto' },
+--~ [0x02908] = { mathclass='relation', adobename='uni2908', texname='downarrowbarred' },
+--~ [0x02909] = { mathclass='relation', adobename='uni2909', texname='uparrowbarred' },
+--~ [0x0290A] = { mathclass='relation', adobename='uni290A', texname='Uuparrow' },
+--~ [0x0290B] = { mathclass='relation', adobename='uni290B', texname='Ddownarrow' },
+--~ [0x0290C] = { mathclass='relation', adobename='uni290C', texname='leftbkarrow' },
+--~ [0x0290D] = { mathclass='relation', adobename='uni290D', texname='rightbkarrow' },
+--~ [0x0290E] = { mathclass='relation', adobename='uni290E', texname='leftdbkarrow' },
+--~ [0x0290F] = { mathclass='relation', adobename='uni290F', texname='dbkarow' },
+--~ [0x02910] = { mathclass='relation', adobename='uni2910', texname='drbkarow' },
+--~ [0x02911] = { mathclass='relation', adobename='uni2911', texname='rightdotarrow' },
+--~ [0x02912] = { mathclass='relation', adobename='uni2912', texname='baruparrow' },
+--~ [0x02913] = { mathclass='relation', adobename='uni2913', texname='downarrowbar' },
+--~ [0x02914] = { mathclass='relation', adobename='uni2914', texname='nvrightarrowtail' },
+--~ [0x02915] = { mathclass='relation', adobename='uni2915', texname='nVrightarrowtail' },
+--~ [0x02916] = { mathclass='relation', adobename='uni2916', texname='twoheadrightarrowtail' },
+--~ [0x02917] = { mathclass='relation', adobename='uni2917', texname='nvtwoheadrightarrowtail' },
+--~ [0x02918] = { mathclass='relation', adobename='uni2918', texname='nVtwoheadrightarrowtail' },
+--~ [0x02919] = { mathclass='relation', adobename='uni2919', texname='lefttail' },
+--~ [0x0291A] = { mathclass='relation', adobename='uni291A', texname='righttail' },
+--~ [0x0291B] = { mathclass='relation', adobename='uni291B', texname='leftdbltail' },
+--~ [0x0291C] = { mathclass='relation', adobename='uni291C', texname='rightdbltail' },
+--~ [0x0291D] = { mathclass='relation', adobename='uni291D', texname='diamondleftarrow' },
+--~ [0x0291E] = { mathclass='relation', adobename='uni291E', texname='rightarrowdiamond' },
+--~ [0x0291F] = { mathclass='relation', adobename='uni291F', texname='diamondleftarrowbar' },
+--~ [0x02920] = { mathclass='relation', adobename='uni2920', texname='barrightarrowdiamond' },
+--~ [0x02921] = { mathclass='relation', adobename='uni2921', texname='nwsearrow' },
+--~ [0x02922] = { mathclass='relation', adobename='uni2922', texname='neswarrow' },
+--~ [0x02923] = { mathclass='relation', adobename='uni2923', texname='hknwarrow' },
+--~ [0x02924] = { mathclass='relation', adobename='uni2924', texname='hknearrow' },
+--~ [0x02925] = { mathclass='relation', adobename='uni2925', texname='hksearow' },
+--~ [0x02926] = { mathclass='relation', adobename='uni2926', texname='hkswarow' },
+--~ [0x02927] = { mathclass='relation', adobename='uni2927', texname='tona' },
+--~ [0x02928] = { mathclass='relation', adobename='uni2928', texname='toea' },
+--~ [0x02929] = { mathclass='relation', adobename='uni2929', texname='tosa' },
+--~ [0x0292A] = { mathclass='relation', adobename='uni292A', texname='towa' },
+--~ [0x0292B] = { mathclass='unknown', adobename='uni292B', texname='rdiagovfdiag' },
+--~ [0x0292C] = { mathclass='unknown', adobename='uni292C', texname='fdiagovrdiag' },
+--~ [0x0292D] = { mathclass='unknown', adobename='uni292D', texname='seovnearrow' },
+--~ [0x0292E] = { mathclass='unknown', adobename='uni292E', texname='neovsearrow' },
+--~ [0x0292F] = { mathclass='unknown', adobename='uni292F', texname='fdiagovnearrow' },
+--~ [0x02930] = { mathclass='unknown', adobename='uni2930', texname='rdiagovsearrow' },
+--~ [0x02931] = { mathclass='unknown', adobename='uni2931', texname='neovnwarrow' },
+--~ [0x02932] = { mathclass='unknown', adobename='uni2932', texname='nwovnearrow' },
+--~ [0x02933] = { mathclass='relation', adobename='uni2933', texname='rightcurvedarrow' },
+--~ [0x02934] = { mathclass='unknown', adobename='uni2934', texname='uprightcurvearrow' },
+--~ [0x02935] = { mathclass='unknown', adobename='uni2935', texname='downrightcurvedarrow' },
+--~ [0x02936] = { mathclass='relation', adobename='uni2936', texname='leftdowncurvedarrow' },
+--~ [0x02937] = { mathclass='relation', adobename='uni2937', texname='rightdowncurvedarrow' },
+--~ [0x02938] = { mathclass='relation', adobename='uni2938', texname='cwrightarcarrow' },
+--~ [0x02939] = { mathclass='relation', adobename='uni2939', texname='acwleftarcarrow' },
+--~ [0x0293A] = { mathclass='unknown', adobename='uni293A', texname='acwoverarcarrow' },
+--~ [0x0293B] = { mathclass='relation', adobename='uni293B', texname='acwunderarcarrow' },
+--~ [0x0293C] = { mathclass='relation', adobename='uni293C', texname='curvearrowrightminus' },
+--~ [0x0293D] = { mathclass='relation', adobename='uni293D', texname='curvearrowleftplus' },
+--~ [0x0293E] = { mathclass='relation', adobename='uni293E', texname='cwundercurvearrow' },
+--~ [0x0293F] = { mathclass='unknown', adobename='uni293F', texname='ccwundercurvearrow' },
+--~ [0x02940] = { mathclass='relation', adobename='uni2940', texname='acwcirclearrow' },
+--~ [0x02941] = { mathclass='relation', adobename='uni2941', texname='cwcirclearrow' },
+--~ [0x02942] = { mathclass='relation', adobename='uni2942', texname='rightarrowshortleftarrow' },
+--~ [0x02943] = { mathclass='relation', adobename='uni2943', texname='leftarrowshortrightarrow' },
+--~ [0x02944] = { mathclass='relation', adobename='uni2944', texname='shortrightarrowleftarrow' },
+--~ [0x02945] = { mathclass='relation', adobename='uni2945', texname='rightarrowplus' },
+--~ [0x02946] = { mathclass='relation', adobename='uni2946', texname='leftarrowplus' },
+--~ [0x02947] = { mathclass='relation', adobename='uni2947', texname='rightarrowx' },
+--~ [0x02948] = { mathclass='relation', adobename='uni2948', texname='leftrightarrowcircle' },
+--~ [0x02949] = { mathclass='relation', adobename='uni2949', texname='twoheaduparrowcircle' },
+--~ [0x0294A] = { mathclass='relation', adobename='uni294A', texname='leftrightharpoonupdown' },
+--~ [0x0294B] = { mathclass='relation', adobename='uni294B', texname='leftrightharpoondownup' },
+--~ [0x0294C] = { mathclass='relation', adobename='uni294C', texname='updownharpoonrightleft' },
+--~ [0x0294D] = { mathclass='relation', adobename='uni294D', texname='updownharpoonleftright' },
+--~ [0x0294E] = { mathclass='relation', adobename='uni294E', texname='leftrightharpoonupup' },
+--~ [0x0294F] = { mathclass='relation', adobename='uni294F', texname='updownharpoonrightright' },
+--~ [0x02950] = { mathclass='relation', adobename='uni2950', texname='leftrightharpoondowndown' },
+--~ [0x02951] = { mathclass='relation', adobename='uni2951', texname='updownharpoonleftleft' },
+--~ [0x02952] = { mathclass='relation', adobename='uni2952', texname='barleftharpoonup' },
+--~ [0x02953] = { mathclass='relation', adobename='uni2953', texname='rightharpoonupbar' },
+--~ [0x02954] = { mathclass='relation', adobename='uni2954', texname='barupharpoonright' },
+--~ [0x02955] = { mathclass='relation', adobename='uni2955', texname='downharpoonrightbar' },
+--~ [0x02956] = { mathclass='relation', adobename='uni2956', texname='barleftharpoondown' },
+--~ [0x02957] = { mathclass='relation', adobename='uni2957', texname='rightharpoondownbar' },
+--~ [0x02958] = { mathclass='relation', adobename='uni2958', texname='barupharpoonleft' },
+--~ [0x02959] = { mathclass='relation', adobename='uni2959', texname='downharpoonleftbar' },
+--~ [0x0295A] = { mathclass='relation', adobename='uni295A', texname='leftharpoonupbar' },
+--~ [0x0295B] = { mathclass='relation', adobename='uni295B', texname='barrightharpoonup' },
+--~ [0x0295C] = { mathclass='relation', adobename='uni295C', texname='upharpoonrightbar' },
+--~ [0x0295D] = { mathclass='relation', adobename='uni295D', texname='bardownharpoonright' },
+--~ [0x0295E] = { mathclass='relation', adobename='uni295E', texname='leftharpoondownbar' },
+--~ [0x0295F] = { mathclass='relation', adobename='uni295F', texname='barrightharpoondown' },
+--~ [0x02960] = { mathclass='relation', adobename='uni2960', texname='upharpoonleftbar' },
+--~ [0x02961] = { mathclass='relation', adobename='uni2961', texname='bardownharpoonleft' },
+--~ [0x02962] = { mathclass='relation', adobename='uni2962', texname='leftharpoonsupdown' },
+--~ [0x02963] = { mathclass='relation', adobename='uni2963', texname='upharpoonsleftright' },
+--~ [0x02964] = { mathclass='relation', adobename='uni2964', texname='rightharpoonsupdown' },
+--~ [0x02965] = { mathclass='relation', adobename='uni2965', texname='downharpoonsleftright' },
+--~ [0x02966] = { mathclass='relation', adobename='uni2966', texname='leftrightharpoonsup' },
+--~ [0x02967] = { mathclass='relation', adobename='uni2967', texname='leftrightharpoonsdown' },
+--~ [0x02968] = { mathclass='relation', adobename='uni2968', texname='rightleftharpoonsup' },
+--~ [0x02969] = { mathclass='relation', adobename='uni2969', texname='rightleftharpoonsdown' },
+--~ [0x0296A] = { mathclass='relation', adobename='uni296A', texname='leftharpoonupdash' },
+--~ [0x0296B] = { mathclass='relation', adobename='uni296B', texname='dashleftharpoondown' },
+--~ [0x0296C] = { mathclass='relation', adobename='uni296C', texname='rightharpoonupdash' },
+--~ [0x0296D] = { mathclass='relation', adobename='uni296D', texname='dashrightharpoondown' },
+--~ [0x0296E] = { mathclass='relation', adobename='uni296E', texname='updownharpoonsleftright' },
+--~ [0x0296F] = { mathclass='relation', adobename='uni296F', texname='downupharpoonsleftright' },
+--~ [0x02970] = { mathclass='relation', adobename='uni2970', texname='rightimply' },
+--~ [0x02971] = { mathclass='relation', adobename='uni2971', texname='equalrightarrow' },
+--~ [0x02972] = { mathclass='relation', adobename='uni2972', texname='similarrightarrow' },
+--~ [0x02973] = { mathclass='relation', adobename='uni2973', texname='leftarrowsimilar' },
+--~ [0x02974] = { mathclass='relation', adobename='uni2974', texname='rightarrowsimilar' },
+--~ [0x02975] = { mathclass='relation', adobename='uni2975', texname='rightarrowapprox' },
+--~ [0x02976] = { mathclass='relation', adobename='uni2976', texname='ltlarr' },
+--~ [0x02977] = { mathclass='relation', adobename='uni2977', texname='leftarrowless' },
+--~ [0x02978] = { mathclass='relation', adobename='uni2978', texname='gtrarr' },
+--~ [0x02979] = { mathclass='relation', adobename='uni2979', texname='subrarr' },
+--~ [0x0297A] = { mathclass='relation', adobename='uni297A', texname='leftarrowsubset' },
+--~ [0x0297B] = { mathclass='relation', adobename='uni297B', texname='suplarr' },
+--~ [0x0297C] = { mathclass='relation', adobename='uni297C', texname='leftfishtail' },
+--~ [0x0297D] = { mathclass='relation', adobename='uni297D', texname='rightfishtail' },
+--~ [0x0297E] = { mathclass='relation', adobename='uni297E', texname='upfishtail' },
+--~ [0x0297F] = { mathclass='relation', adobename='uni297F', texname='downfishtail' },
+--~ [0x02980] = { mathclass='unknown', adobename='uni2980', texname='Vvert' },
+--~ [0x02981] = { mathclass='normal', adobename='uni2981', texname='mdsmblkcircle' },
+--~ [0x02982] = { mathclass='fence', adobename='uni2982', texname='typecolon' },
+--~ [0x02983] = { mathclass='opening', adobename='uni2983', texname='lBrace' },
+--~ [0x02984] = { mathclass='closing', adobename='uni2984', texname='rBrace' },
+--~ [0x02985] = { mathclass='opening', adobename='uni2985', texname='lParen' },
+--~ [0x02986] = { mathclass='closing', adobename='uni2986', texname='rParen' },
+--~ [0x02987] = { mathclass='opening', adobename='uni2987', texname='llparenthesis' },
+--~ [0x02988] = { mathclass='closing', adobename='uni2988', texname='rrparenthesis' },
+--~ [0x02989] = { mathclass='opening', adobename='uni2989', texname='llangle' },
+--~ [0x0298A] = { mathclass='closing', adobename='uni298A', texname='rrangle' },
+--~ [0x0298B] = { mathclass='opening', adobename='uni298B', texname='lbrackubar' },
+--~ [0x0298C] = { mathclass='closing', adobename='uni298C', texname='rbrackubar' },
+--~ [0x0298D] = { mathclass='opening', adobename='uni298D', texname='lbrackultick' },
+--~ [0x0298E] = { mathclass='closing', adobename='uni298E', texname='rbracklrtick' },
+--~ [0x0298F] = { mathclass='opening', adobename='uni298F', texname='lbracklltick' },
+--~ [0x02990] = { mathclass='closing', adobename='uni2990', texname='rbrackurtick' },
+--~ [0x02991] = { mathclass='opening', adobename='uni2991', texname='langledot' },
+--~ [0x02992] = { mathclass='closing', adobename='uni2992', texname='rangledot' },
+--~ [0x02993] = { mathclass='opening', adobename='uni2993', texname='lparenless' },
+--~ [0x02994] = { mathclass='closing', adobename='uni2994', texname='rparengtr' },
+--~ [0x02995] = { mathclass='unknown', adobename='uni2995', texname='Lparengtr' },
+--~ [0x02996] = { mathclass='unknown', adobename='uni2996', texname='Rparenless' },
+--~ [0x02997] = { mathclass='opening', adobename='uni2997', texname='lblkbrbrak' },
+--~ [0x02998] = { mathclass='closing', adobename='uni2998', texname='rblkbrbrak' },
+--~ [0x02999] = { mathclass='unknown', adobename='uni2999', texname='fourvdots' },
+--~ [0x0299A] = { mathclass='unknown', adobename='uni299A', texname='vzigzag' },
+--~ [0x0299B] = { mathclass='unknown', adobename='uni299B', texname='measuredangleleft' },
+--~ [0x0299C] = { mathclass='unknown', adobename='uni299C', texname='rightanglesqr' },
+--~ [0x0299D] = { mathclass='unknown', adobename='uni299D', texname='rightanglemdot' },
+--~ [0x0299E] = { mathclass='unknown', adobename='uni299E', texname='angles' },
+--~ [0x0299F] = { mathclass='unknown', adobename='uni299F', texname='angdnr' },
+--~ [0x029A0] = { mathclass='unknown', adobename='uni29A0', texname='gtlpar' },
+--~ [0x029A1] = { mathclass='unknown', adobename='uni29A1', texname='sphericalangleup' },
+--~ [0x029A2] = { mathclass='unknown', adobename='uni29A2', texname='turnangle' },
+--~ [0x029A3] = { mathclass='unknown', adobename='uni29A3', texname='revangle' },
+--~ [0x029A4] = { mathclass='unknown', adobename='uni29A4', texname='angleubar' },
+--~ [0x029A5] = { mathclass='unknown', adobename='uni29A5', texname='revangleubar' },
+--~ [0x029A6] = { mathclass='unknown', adobename='uni29A6', texname='wideangledown' },
+--~ [0x029A7] = { mathclass='unknown', adobename='uni29A7', texname='wideangleup' },
+--~ [0x029A8] = { mathclass='unknown', adobename='uni29A8', texname='measanglerutone' },
+--~ [0x029A9] = { mathclass='unknown', adobename='uni29A9', texname='measanglelutonw' },
+--~ [0x029AA] = { mathclass='unknown', adobename='uni29AA', texname='measanglerdtose' },
+--~ [0x029AB] = { mathclass='unknown', adobename='uni29AB', texname='measangleldtosw' },
+--~ [0x029AC] = { mathclass='unknown', adobename='uni29AC', texname='measangleurtone' },
+--~ [0x029AD] = { mathclass='unknown', adobename='uni29AD', texname='measangleultonw' },
+--~ [0x029AE] = { mathclass='unknown', adobename='uni29AE', texname='measangledrtose' },
+--~ [0x029AF] = { mathclass='unknown', adobename='uni29AF', texname='measangledltosw' },
+--~ [0x029B0] = { mathclass='normal', adobename='uni29B0', texname='revemptyset' },
+--~ [0x029B1] = { mathclass='normal', adobename='uni29B1', texname='emptysetobar' },
+--~ [0x029B2] = { mathclass='normal', adobename='uni29B2', texname='emptysetocirc' },
+--~ [0x029B3] = { mathclass='normal', adobename='uni29B3', texname='emptysetoarr' },
+--~ [0x029B4] = { mathclass='normal', adobename='uni29B4', texname='emptysetoarrl' },
+--~ [0x029B5] = { mathclass='binary', adobename='uni29B5', texname='circlehbar' },
+--~ [0x029B6] = { mathclass='binary', adobename='uni29B6', texname='circledvert' },
+--~ [0x029B7] = { mathclass='binary', adobename='uni29B7', texname='circledparallel' },
+--~ [0x029B8] = { mathclass='binary', adobename='uni29B8', texname='obslash' },
+--~ [0x029B9] = { mathclass='binary', adobename='uni29B9', texname='operp' },
+--~ [0x029BA] = { mathclass='normal', adobename='uni29BA', texname='obot' },
+--~ [0x029BB] = { mathclass='normal', adobename='uni29BB', texname='olcross' },
+--~ [0x029BC] = { mathclass='normal', adobename='uni29BC', texname='odotslashdot' },
+--~ [0x029BD] = { mathclass='normal', adobename='uni29BD', texname='uparrowoncircle' },
+--~ [0x029BE] = { mathclass='normal', adobename='uni29BE', texname='circledwhitebullet' },
+--~ [0x029BF] = { mathclass='normal', adobename='uni29BF', texname='circledbullet' },
+--~ [0x029C0] = { mathclass='binary', adobename='uni29C0', texname='olessthan' },
+--~ [0x029C1] = { mathclass='binary', adobename='uni29C1', texname='ogreaterthan' },
+--~ [0x029C2] = { mathclass='normal', adobename='uni29C2', texname='cirscir' },
+--~ [0x029C3] = { mathclass='normal', adobename='uni29C3', texname='cirE' },
+--~ [0x029C4] = { mathclass='binary', adobename='uni29C4', texname='boxdiag' },
+--~ [0x029C5] = { mathclass='binary', adobename='uni29C5', texname='boxbslash' },
+--~ [0x029C6] = { mathclass='binary', adobename='uni29C6', texname='boxast' },
+--~ [0x029C7] = { mathclass='binary', adobename='uni29C7', texname='boxcircle' },
+--~ [0x029C8] = { mathclass='binary', adobename='uni29C8', texname='boxbox' },
+--~ [0x029C9] = { mathclass='normal', adobename='uni29C9', texname='boxonbox' },
+--~ [0x029CA] = { mathclass='normal', adobename='uni29CA', texname='triangleodot' },
+--~ [0x029CB] = { mathclass='normal', adobename='uni29CB', texname='triangleubar' },
+--~ [0x029CC] = { mathclass='normal', adobename='uni29CC', texname='triangles' },
+--~ [0x029CD] = { mathclass='binary', adobename='uni29CD', texname='triangleserifs' },
+--~ [0x029CE] = { mathclass='relation', adobename='uni29CE', texname='rtriltri' },
+--~ [0x029CF] = { mathclass='relation', adobename='uni29CF', texname='ltrivb' },
+--~ [0x029D0] = { mathclass='relation', adobename='uni29D0', texname='vbrtri' },
+--~ [0x029D1] = { mathclass='relation', adobename='uni29D1', texname='lfbowtie' },
+--~ [0x029D2] = { mathclass='relation', adobename='uni29D2', texname='rfbowtie' },
+--~ [0x029D3] = { mathclass='relation', adobename='uni29D3', texname='fbowtie' },
+--~ [0x029D4] = { mathclass='relation', adobename='uni29D4', texname='lftimes' },
+--~ [0x029D5] = { mathclass='relation', adobename='uni29D5', texname='rftimes' },
+--~ [0x029D6] = { mathclass='binary', adobename='uni29D6', texname='hourglass' },
+--~ [0x029D7] = { mathclass='binary', adobename='uni29D7', texname='blackhourglass' },
+--~ [0x029D8] = { mathclass='opening', adobename='uni29D8', texname='lvzigzag' },
+--~ [0x029D9] = { mathclass='closing', adobename='uni29D9', texname='rvzigzag' },
+--~ [0x029DA] = { mathclass='opening', adobename='uni29DA', texname='Lvzigzag' },
+--~ [0x029DB] = { mathclass='closing', adobename='uni29DB', texname='Rvzigzag' },
+--~ [0x029DC] = { mathclass='normal', adobename='uni29DC', texname='iinfin' },
+--~ [0x029DD] = { mathclass='normal', adobename='uni29DD', texname='tieinfty' },
+--~ [0x029DE] = { mathclass='normal', adobename='uni29DE', texname='nvinfty' },
+--~ [0x029DF] = { mathclass='relation', adobename='uni29DF', texname='dualmap' },
+--~ [0x029E0] = { mathclass='normal', adobename='uni29E0', texname='laplac' },
+--~ [0x029E1] = { mathclass='relation', adobename='uni29E1', texname='lrtriangleeq' },
+--~ [0x029E2] = { mathclass='unknown', adobename='uni29E2', texname='shuffle' },
+--~ [0x029E3] = { mathclass='relation', adobename='uni29E3', texname='eparsl' },
+--~ [0x029E4] = { mathclass='relation', adobename='uni29E4', texname='smeparsl' },
+--~ [0x029E5] = { mathclass='relation', adobename='uni29E5', texname='eqvparsl' },
+--~ [0x029E6] = { mathclass='relation', adobename='uni29E6', texname='gleichstark' },
+--~ [0x029E7] = { mathclass='normal', adobename='uni29E7', texname='thermod' },
+--~ [0x029E8] = { mathclass='normal', adobename='uni29E8', texname='downtriangleleftblack' },
+--~ [0x029E9] = { mathclass='normal', adobename='uni29E9', texname='downtrianglerightblack' },
+--~ [0x029EA] = { mathclass='normal', adobename='uni29EA', texname='blackdiamonddownarrow' },
+--~ [0x029EB] = { mathclass='binary', adobename='uni29EB', texname='mdlgblklozenge' },
+--~ [0x029EC] = { mathclass='normal', adobename='uni29EC', texname='circledownarrow' },
+--~ [0x029ED] = { mathclass='normal', adobename='uni29ED', texname='blackcircledownarrow' },
+--~ [0x029EE] = { mathclass='normal', adobename='uni29EE', texname='errbarsquare' },
+--~ [0x029EF] = { mathclass='normal', adobename='uni29EF', texname='errbarblacksquare' },
+--~ [0x029F0] = { mathclass='normal', adobename='uni29F0', texname='errbardiamond' },
+--~ [0x029F1] = { mathclass='normal', adobename='uni29F1', texname='errbarblackdiamond' },
+--~ [0x029F2] = { mathclass='normal', adobename='uni29F2', texname='errbarcircle' },
+--~ [0x029F3] = { mathclass='normal', adobename='uni29F3', texname='errbarblackcircle' },
+--~ [0x029F4] = { mathclass='relation', adobename='uni29F4', texname='ruledelayed' },
+--~ [0x029F5] = { mathclass='binary', adobename='uni29F5', texname='opbackslash' },
+--~ [0x029F6] = { mathclass='binary', adobename='uni29F6', texname='dsol' },
+--~ [0x029F7] = { mathclass='binary', adobename='uni29F7', texname='rsolbar' },
+--~ [0x029F8] = { mathclass='large', adobename='uni29F8', texname='xsol' },
+--~ [0x029F9] = { mathclass='large', adobename='uni29F9', texname='xbsol' },
+--~ [0x029FA] = { mathclass='binary', adobename='uni29FA', texname='doubleplus' },
+--~ [0x029FB] = { mathclass='binary', adobename='uni29FB', texname='tripleplus' },
+--~ [0x029FC] = { mathclass='opening', adobename='uni29FC', texname='lcurvyangle' },
+--~ [0x029FD] = { mathclass='closing', adobename='uni29FD', texname='rcurvyangle' },
+--~ [0x029FE] = { mathclass='binary', adobename='uni29FE', texname='tplus' },
+--~ [0x029FF] = { mathclass='binary', adobename='uni29FF', texname='tminus' },
+--~ [0x02A00] = { mathclass='large', adobename='uni2A00', texname='bigodot' },
+--~ [0x02A01] = { mathclass='large', adobename='uni2A01', texname='bigoplus' },
+--~ [0x02A02] = { mathclass='large', adobename='uni2A02', texname='bigotimes' },
+--~ [0x02A03] = { mathclass='large', adobename='uni2A03', texname='bigcupdot' },
+--~ [0x02A04] = { mathclass='large', adobename='uni2A04', texname='biguplus' },
+--~ [0x02A05] = { mathclass='large', adobename='uni2A05', texname='bigsqcap' },
+--~ [0x02A06] = { mathclass='large', adobename='uni2A06', texname='bigsqcup' },
+--~ [0x02A07] = { mathclass='large', adobename='uni2A07', texname='conjquant' },
+--~ [0x02A08] = { mathclass='large', adobename='uni2A08', texname='disjquant' },
+--~ [0x02A09] = { mathclass='large', adobename='uni2A09', texname='bigtimes' },
+--~ [0x02A0A] = { mathclass='unknown', adobename='uni2A0A', texname='modtwosum' },
+--~ [0x02A0B] = { mathclass='large', adobename='uni2A0B', texname='sumint' },
+--~ [0x02A0C] = { mathclass='large', adobename='uni2A0C', texname='iiiint' },
+--~ [0x02A0D] = { mathclass='large', adobename='uni2A0D', texname='intbar' },
+--~ [0x02A0E] = { mathclass='large', adobename='uni2A0E', texname='intBar' },
+--~ [0x02A0F] = { mathclass='large', adobename='uni2A0F', texname='fint' },
+--~ [0x02A10] = { mathclass='large', adobename='uni2A10', texname='cirfnint' },
+--~ [0x02A11] = { mathclass='large', adobename='uni2A11', texname='awint' },
+--~ [0x02A12] = { mathclass='large', adobename='uni2A12', texname='rppolint' },
+--~ [0x02A13] = { mathclass='large', adobename='uni2A13', texname='scpolint' },
+--~ [0x02A14] = { mathclass='large', adobename='uni2A14', texname='npolint' },
+--~ [0x02A15] = { mathclass='large', adobename='uni2A15', texname='pointint' },
+--~ [0x02A16] = { mathclass='large', adobename='uni2A16', texname='sqint' },
+--~ [0x02A17] = { mathclass='large', adobename='uni2A17', texname='intlarhk' },
+--~ [0x02A18] = { mathclass='large', adobename='uni2A18', texname='intx' },
+--~ [0x02A19] = { mathclass='large', adobename='uni2A19', texname='intcap' },
+--~ [0x02A1A] = { mathclass='large', adobename='uni2A1A', texname='intcup' },
+--~ [0x02A1B] = { mathclass='large', adobename='uni2A1B', texname='upint' },
+--~ [0x02A1C] = { mathclass='large', adobename='uni2A1C', texname='lowint' },
+--~ [0x02A1D] = { mathclass='large', adobename='uni2A1D', texname='Join' },
+--~ [0x02A1E] = { mathclass='large', adobename='uni2A1E', texname='bigtriangleleft' },
+--~ [0x02A1F] = { mathclass='large', adobename='uni2A1F', texname='zcmp' },
+--~ [0x02A20] = { mathclass='large', adobename='uni2A20', texname='zpipe' },
+--~ [0x02A21] = { mathclass='large', adobename='uni2A21', texname='zproject' },
+--~ [0x02A22] = { mathclass='binary', adobename='uni2A22', texname='ringplus' },
+--~ [0x02A23] = { mathclass='binary', adobename='uni2A23', texname='plushat' },
+--~ [0x02A24] = { mathclass='binary', adobename='uni2A24', texname='simplus' },
+--~ [0x02A25] = { mathclass='binary', adobename='uni2A25', texname='plusdot' },
+--~ [0x02A26] = { mathclass='binary', adobename='uni2A26', texname='plussim' },
+--~ [0x02A27] = { mathclass='binary', adobename='uni2A27', texname='plussubtwo' },
+--~ [0x02A28] = { mathclass='binary', adobename='uni2A28', texname='plustrif' },
+--~ [0x02A29] = { mathclass='binary', adobename='uni2A29', texname='commaminus' },
+--~ [0x02A2A] = { mathclass='binary', adobename='uni2A2A', texname='minusdot' },
+--~ [0x02A2B] = { mathclass='binary', adobename='uni2A2B', texname='minusfdots' },
+--~ [0x02A2C] = { mathclass='binary', adobename='uni2A2C', texname='minusrdots' },
+--~ [0x02A2D] = { mathclass='binary', adobename='uni2A2D', texname='opluslhrim' },
+--~ [0x02A2E] = { mathclass='binary', adobename='uni2A2E', texname='oplusrhrim' },
+--~ [0x02A2F] = { mathclass='binary', adobename='uni2A2F', texname='vectimes' },
+--~ [0x02A30] = { mathclass='binary', adobename='uni2A30', texname='dottimes' },
+--~ [0x02A31] = { mathclass='binary', adobename='uni2A31', texname='timesbar' },
+--~ [0x02A32] = { mathclass='binary', adobename='uni2A32', texname='btimes' },
+--~ [0x02A33] = { mathclass='binary', adobename='uni2A33', texname='smashtimes' },
+--~ [0x02A34] = { mathclass='binary', adobename='uni2A34', texname='otimeslhrim' },
+--~ [0x02A35] = { mathclass='binary', adobename='uni2A35', texname='otimesrhrim' },
+--~ [0x02A36] = { mathclass='binary', adobename='uni2A36', texname='otimeshat' },
+--~ [0x02A37] = { mathclass='binary', adobename='uni2A37', texname='Otimes' },
+--~ [0x02A38] = { mathclass='binary', adobename='uni2A38', texname='odiv' },
+--~ [0x02A39] = { mathclass='binary', adobename='uni2A39', texname='triangleplus' },
+--~ [0x02A3A] = { mathclass='binary', adobename='uni2A3A', texname='triangleminus' },
+--~ [0x02A3B] = { mathclass='binary', adobename='uni2A3B', texname='triangletimes' },
+--~ [0x02A3C] = { mathclass='binary', adobename='uni2A3C', texname='intprod' },
+--~ [0x02A3D] = { mathclass='binary', adobename='uni2A3D', texname='intprodr' },
+--~ [0x02A3E] = { mathclass='binary', adobename='uni2A3E', texname='fcmp' },
+--~ [0x02A3F] = { mathclass='binary', adobename='uni2A3F', texname='amalg' },
+--~ [0x02A40] = { mathclass='binary', adobename='uni2A40', texname='capdot' },
+--~ [0x02A41] = { mathclass='binary', adobename='uni2A41', texname='uminus' },
+--~ [0x02A42] = { mathclass='binary', adobename='uni2A42', texname='barcup' },
+--~ [0x02A43] = { mathclass='binary', adobename='uni2A43', texname='barcap' },
+--~ [0x02A44] = { mathclass='binary', adobename='uni2A44', texname='capwedge' },
+--~ [0x02A45] = { mathclass='binary', adobename='uni2A45', texname='cupvee' },
+--~ [0x02A46] = { mathclass='binary', adobename='uni2A46', texname='cupovercap' },
+--~ [0x02A47] = { mathclass='binary', adobename='uni2A47', texname='capovercup' },
+--~ [0x02A48] = { mathclass='binary', adobename='uni2A48', texname='cupbarcap' },
+--~ [0x02A49] = { mathclass='binary', adobename='uni2A49', texname='capbarcup' },
+--~ [0x02A4A] = { mathclass='binary', adobename='uni2A4A', texname='twocups' },
+--~ [0x02A4B] = { mathclass='binary', adobename='uni2A4B', texname='twocaps' },
+--~ [0x02A4C] = { mathclass='binary', adobename='uni2A4C', texname='closedvarcup' },
+--~ [0x02A4D] = { mathclass='binary', adobename='uni2A4D', texname='closedvarcap' },
+--~ [0x02A4E] = { mathclass='binary', adobename='uni2A4E', texname='Sqcap' },
+--~ [0x02A4F] = { mathclass='binary', adobename='uni2A4F', texname='Sqcup' },
+--~ [0x02A50] = { mathclass='binary', adobename='uni2A50', texname='closedvarcupsmashprod' },
+--~ [0x02A51] = { mathclass='binary', adobename='uni2A51', texname='wedgeodot' },
+--~ [0x02A52] = { mathclass='binary', adobename='uni2A52', texname='veeodot' },
+--~ [0x02A53] = { mathclass='binary', adobename='uni2A53', texname='Wedge' },
+--~ [0x02A54] = { mathclass='binary', adobename='uni2A54', texname='Vee' },
+--~ [0x02A55] = { mathclass='binary', adobename='uni2A55', texname='wedgeonwedge' },
+--~ [0x02A56] = { mathclass='binary', adobename='uni2A56', texname='veeonvee' },
+--~ [0x02A57] = { mathclass='binary', adobename='uni2A57', texname='bigslopedvee' },
+--~ [0x02A58] = { mathclass='binary', adobename='uni2A58', texname='bigslopedwedge' },
+--~ [0x02A59] = { mathclass='relation', adobename='uni2A59', texname='veeonwedge' },
+--~ [0x02A5A] = { mathclass='binary', adobename='uni2A5A', texname='wedgemidvert' },
+--~ [0x02A5B] = { mathclass='binary', adobename='uni2A5B', texname='veemidvert' },
+--~ [0x02A5C] = { mathclass='binary', adobename='uni2A5C', texname='midbarwedge' },
+--~ [0x02A5D] = { mathclass='binary', adobename='uni2A5D', texname='midbarvee' },
+--~ [0x02A5E] = { mathclass='binary', adobename='uni2A5E', texname='doublebarwedge' },
+--~ [0x02A5F] = { mathclass='binary', adobename='uni2A5F', texname='wedgebar' },
+--~ [0x02A60] = { mathclass='binary', adobename='uni2A60', texname='wedgedoublebar' },
+--~ [0x02A61] = { mathclass='binary', adobename='uni2A61', texname='varveebar' },
+--~ [0x02A62] = { mathclass='binary', adobename='uni2A62', texname='doublebarvee' },
+--~ [0x02A63] = { mathclass='binary', adobename='uni2A63', texname='veedoublebar' },
+--~ [0x02A64] = { mathclass='binary', adobename='uni2A64', texname='dsub' },
+--~ [0x02A65] = { mathclass='binary', adobename='uni2A65', texname='rsub' },
+--~ [0x02A66] = { mathclass='relation', adobename='uni2A66', texname='eqdot' },
+--~ [0x02A67] = { mathclass='relation', adobename='uni2A67', texname='dotequiv' },
+--~ [0x02A68] = { mathclass='unknown', adobename='uni2A68', texname='equivVert' },
+--~ [0x02A69] = { mathclass='unknown', adobename='uni2A69', texname='equivVvert' },
+--~ [0x02A6A] = { mathclass='relation', adobename='uni2A6A', texname='dotsim' },
+--~ [0x02A6B] = { mathclass='relation', adobename='uni2A6B', texname='simrdots' },
+--~ [0x02A6C] = { mathclass='relation', adobename='uni2A6C', texname='simminussim' },
+--~ [0x02A6D] = { mathclass='relation', adobename='uni2A6D', texname='congdot' },
+--~ [0x02A6E] = { mathclass='relation', adobename='uni2A6E', texname='asteq' },
+--~ [0x02A6F] = { mathclass='relation', adobename='uni2A6F', texname='hatapprox' },
+--~ [0x02A70] = { mathclass='relation', adobename='uni2A70', texname='approxeqq' },
+--~ [0x02A71] = { mathclass='binary', adobename='uni2A71', texname='eqqplus' },
+--~ [0x02A72] = { mathclass='binary', adobename='uni2A72', texname='pluseqq' },
+--~ [0x02A73] = { mathclass='relation', adobename='uni2A73', texname='eqqsim' },
+--~ [0x02A74] = { mathclass='relation', adobename='uni2A74', texname='Coloneq' },
+--~ [0x02A75] = { mathclass='relation', adobename='uni2A75', texname='eqeq' },
+--~ [0x02A76] = { mathclass='relation', adobename='uni2A76', texname='eqeqeq' },
+--~ [0x02A77] = { mathclass='relation', adobename='uni2A77', texname='ddotseq' },
+--~ [0x02A78] = { mathclass='relation', adobename='uni2A78', texname='equivDD' },
+--~ [0x02A79] = { mathclass='relation', adobename='uni2A79', texname='ltcir' },
+--~ [0x02A7A] = { mathclass='relation', adobename='uni2A7A', texname='gtcir' },
+--~ [0x02A7B] = { mathclass='relation', adobename='uni2A7B', texname='ltquest' },
+--~ [0x02A7C] = { mathclass='relation', adobename='uni2A7C', texname='gtquest' },
+--~ [0x02A7D] = { mathclass='relation', adobename='uni2A7D', texname='leqslant' },
+--~ [0x02A7E] = { mathclass='relation', adobename='uni2A7E', texname='geqslant' },
+--~ [0x02A7F] = { mathclass='relation', adobename='uni2A7F', texname='lesdot' },
+--~ [0x02A80] = { mathclass='relation', adobename='uni2A80', texname='gesdot' },
+--~ [0x02A81] = { mathclass='relation', adobename='uni2A81', texname='lesdoto' },
+--~ [0x02A82] = { mathclass='relation', adobename='uni2A82', texname='gesdoto' },
+--~ [0x02A83] = { mathclass='relation', adobename='uni2A83', texname='lesdotor' },
+--~ [0x02A84] = { mathclass='relation', adobename='uni2A84', texname='gesdotol' },
+--~ [0x02A85] = { mathclass='relation', adobename='uni2A85', texname='lessapprox' },
+--~ [0x02A86] = { mathclass='relation', adobename='uni2A86', texname='gtrapprox' },
+--~ [0x02A87] = { mathclass='relation', adobename='uni2A87', texname='lneq' },
+--~ [0x02A88] = { mathclass='relation', adobename='uni2A88', texname='gneq' },
+--~ [0x02A89] = { mathclass='relation', adobename='uni2A89', texname='lnapprox' },
+--~ [0x02A8A] = { mathclass='relation', adobename='uni2A8A', texname='gnapprox' },
+--~ [0x02A8B] = { mathclass='relation', adobename='uni2A8B', texname='lesseqqgtr' },
+--~ [0x02A8C] = { mathclass='relation', adobename='uni2A8C', texname='gtreqqless' },
+--~ [0x02A8D] = { mathclass='relation', adobename='uni2A8D', texname='lsime' },
+--~ [0x02A8E] = { mathclass='relation', adobename='uni2A8E', texname='gsime' },
+--~ [0x02A8F] = { mathclass='relation', adobename='uni2A8F', texname='lsimg' },
+--~ [0x02A90] = { mathclass='relation', adobename='uni2A90', texname='gsiml' },
+--~ [0x02A91] = { mathclass='relation', adobename='uni2A91', texname='lgE' },
+--~ [0x02A92] = { mathclass='relation', adobename='uni2A92', texname='glE' },
+--~ [0x02A93] = { mathclass='relation', adobename='uni2A93', texname='lesges' },
+--~ [0x02A94] = { mathclass='relation', adobename='uni2A94', texname='gesles' },
+--~ [0x02A95] = { mathclass='relation', adobename='uni2A95', texname='eqslantless' },
+--~ [0x02A96] = { mathclass='relation', adobename='uni2A96', texname='eqslantgtr' },
+--~ [0x02A97] = { mathclass='relation', adobename='uni2A97', texname='elsdot' },
+--~ [0x02A98] = { mathclass='relation', adobename='uni2A98', texname='egsdot' },
+--~ [0x02A99] = { mathclass='relation', adobename='uni2A99', texname='eqqless' },
+--~ [0x02A9A] = { mathclass='relation', adobename='uni2A9A', texname='eqqgtr' },
+--~ [0x02A9B] = { mathclass='relation', adobename='uni2A9B', texname='eqqslantless' },
+--~ [0x02A9C] = { mathclass='relation', adobename='uni2A9C', texname='eqqslantgtr' },
+--~ [0x02A9D] = { mathclass='relation', adobename='uni2A9D', texname='simless' },
+--~ [0x02A9E] = { mathclass='relation', adobename='uni2A9E', texname='simgtr' },
+--~ [0x02A9F] = { mathclass='relation', adobename='uni2A9F', texname='simlE' },
+--~ [0x02AA0] = { mathclass='relation', adobename='uni2AA0', texname='simgE' },
+--~ [0x02AA1] = { mathclass='relation', adobename='uni2AA1', texname='Lt' },
+--~ [0x02AA2] = { mathclass='relation', adobename='uni2AA2', texname='Gt' },
+--~ [0x02AA3] = { mathclass='relation', adobename='uni2AA3', texname='partialmeetcontraction' },
+--~ [0x02AA4] = { mathclass='relation', adobename='uni2AA4', texname='glj' },
+--~ [0x02AA5] = { mathclass='relation', adobename='uni2AA5', texname='gla' },
+--~ [0x02AA6] = { mathclass='relation', adobename='uni2AA6', texname='ltcc' },
+--~ [0x02AA7] = { mathclass='relation', adobename='uni2AA7', texname='gtcc' },
+--~ [0x02AA8] = { mathclass='relation', adobename='uni2AA8', texname='lescc' },
+--~ [0x02AA9] = { mathclass='relation', adobename='uni2AA9', texname='gescc' },
+--~ [0x02AAA] = { mathclass='relation', adobename='uni2AAA', texname='smt' },
+--~ [0x02AAB] = { mathclass='relation', adobename='uni2AAB', texname='lat' },
+--~ [0x02AAC] = { mathclass='relation', adobename='uni2AAC', texname='smte' },
+--~ [0x02AAD] = { mathclass='relation', adobename='uni2AAD', texname='late' },
+--~ [0x02AAE] = { mathclass='relation', adobename='uni2AAE', texname='bumpeqq' },
+--~ [0x02AAF] = { mathclass='relation', adobename='uni2AAF', texname='preceq' },
+--~ [0x02AB0] = { mathclass='relation', adobename='uni2AB0', texname='succeq' },
+--~ [0x02AB1] = { mathclass='relation', adobename='uni2AB1', texname='precneq' },
+--~ [0x02AB2] = { mathclass='relation', adobename='uni2AB2', texname='succneq' },
+--~ [0x02AB3] = { mathclass='relation', adobename='uni2AB3', texname='preceqq' },
+--~ [0x02AB4] = { mathclass='relation', adobename='uni2AB4', texname='succeqq' },
+--~ [0x02AB5] = { mathclass='relation', adobename='uni2AB5', texname='precneqq' },
+--~ [0x02AB6] = { mathclass='relation', adobename='uni2AB6', texname='succneqq' },
+--~ [0x02AB7] = { mathclass='relation', adobename='uni2AB7', texname='precapprox' },
+--~ [0x02AB8] = { mathclass='relation', adobename='uni2AB8', texname='succapprox' },
+--~ [0x02AB9] = { mathclass='relation', adobename='uni2AB9', texname='precnapprox' },
+--~ [0x02ABA] = { mathclass='relation', adobename='uni2ABA', texname='succnapprox' },
+--~ [0x02ABB] = { mathclass='relation', adobename='uni2ABB', texname='Prec' },
+--~ [0x02ABC] = { mathclass='relation', adobename='uni2ABC', texname='Succ' },
+--~ [0x02ABD] = { mathclass='relation', adobename='uni2ABD', texname='subsetdot' },
+--~ [0x02ABE] = { mathclass='relation', adobename='uni2ABE', texname='supsetdot' },
+--~ [0x02ABF] = { mathclass='relation', adobename='uni2ABF', texname='subsetplus' },
+--~ [0x02AC0] = { mathclass='relation', adobename='uni2AC0', texname='supsetplus' },
+--~ [0x02AC1] = { mathclass='relation', adobename='uni2AC1', texname='submult' },
+--~ [0x02AC2] = { mathclass='relation', adobename='uni2AC2', texname='supmult' },
+--~ [0x02AC3] = { mathclass='relation', adobename='uni2AC3', texname='subedot' },
+--~ [0x02AC4] = { mathclass='relation', adobename='uni2AC4', texname='supedot' },
+--~ [0x02AC5] = { mathclass='relation', adobename='uni2AC5', texname='subseteqq' },
+--~ [0x02AC6] = { mathclass='relation', adobename='uni2AC6', texname='supseteqq' },
+--~ [0x02AC7] = { mathclass='relation', adobename='uni2AC7', texname='subsim' },
+--~ [0x02AC8] = { mathclass='relation', adobename='uni2AC8', texname='supsim' },
+--~ [0x02AC9] = { mathclass='relation', adobename='uni2AC9', texname='subsetapprox' },
+--~ [0x02ACA] = { mathclass='relation', adobename='uni2ACA', texname='supsetapprox' },
+--~ [0x02ACB] = { mathclass='relation', adobename='uni2ACB', texname='subsetneqq' },
+--~ [0x02ACC] = { mathclass='relation', adobename='uni2ACC', texname='supsetneqq' },
+--~ [0x02ACD] = { mathclass='relation', adobename='uni2ACD', texname='lsqhook' },
+--~ [0x02ACE] = { mathclass='relation', adobename='uni2ACE', texname='rsqhook' },
+--~ [0x02ACF] = { mathclass='relation', adobename='uni2ACF', texname='csub' },
+--~ [0x02AD0] = { mathclass='relation', adobename='uni2AD0', texname='csup' },
+--~ [0x02AD1] = { mathclass='relation', adobename='uni2AD1', texname='csube' },
+--~ [0x02AD2] = { mathclass='relation', adobename='uni2AD2', texname='csupe' },
+--~ [0x02AD3] = { mathclass='relation', adobename='uni2AD3', texname='subsup' },
+--~ [0x02AD4] = { mathclass='relation', adobename='uni2AD4', texname='supsub' },
+--~ [0x02AD5] = { mathclass='relation', adobename='uni2AD5', texname='subsub' },
+--~ [0x02AD6] = { mathclass='relation', adobename='uni2AD6', texname='supsup' },
+--~ [0x02AD7] = { mathclass='relation', adobename='uni2AD7', texname='suphsub' },
+--~ [0x02AD8] = { mathclass='relation', adobename='uni2AD8', texname='supdsub' },
+--~ [0x02AD9] = { mathclass='relation', adobename='uni2AD9', texname='forkv' },
+--~ [0x02ADA] = { mathclass='relation', adobename='uni2ADA', texname='topfork' },
+--~ [0x02ADB] = { mathclass='relation', adobename='uni2ADB', texname='mlcp' },
+--~ [0x02ADC] = { mathclass='relation', adobename='uni2ADC', texname='forks' },
+--~ [0x02ADD] = { mathclass='relation', adobename='uni2ADD', texname='forksnot' },
+--~ [0x02ADE] = { mathclass='relation', adobename='uni2ADE', texname='shortlefttack' },
+--~ [0x02ADF] = { mathclass='relation', adobename='uni2ADF', texname='shortdowntack' },
+--~ [0x02AE0] = { mathclass='relation', adobename='uni2AE0', texname='shortuptack' },
+--~ [0x02AE1] = { mathclass='unknown', adobename='uni2AE1', texname='perps' },
+--~ [0x02AE2] = { mathclass='relation', adobename='uni2AE2', texname='vDdash' },
+--~ [0x02AE3] = { mathclass='relation', adobename='uni2AE3', texname='dashV' },
+--~ [0x02AE4] = { mathclass='relation', adobename='uni2AE4', texname='Dashv' },
+--~ [0x02AE5] = { mathclass='relation', adobename='uni2AE5', texname='DashV' },
+--~ [0x02AE6] = { mathclass='relation', adobename='uni2AE6', texname='varVdash' },
+--~ [0x02AE7] = { mathclass='relation', adobename='uni2AE7', texname='Barv' },
+--~ [0x02AE8] = { mathclass='relation', adobename='uni2AE8', texname='vBar' },
+--~ [0x02AE9] = { mathclass='relation', adobename='uni2AE9', texname='vBarv' },
+--~ [0x02AEA] = { mathclass='relation', adobename='uni2AEA', texname='barV' },
+--~ [0x02AEB] = { mathclass='relation', adobename='uni2AEB', texname='Vbar' },
+--~ [0x02AEC] = { mathclass='relation', adobename='uni2AEC', texname='Not' },
+--~ [0x02AED] = { mathclass='relation', adobename='uni2AED', texname='bNot' },
+--~ [0x02AEE] = { mathclass='relation', adobename='uni2AEE', texname='revnmid' },
+--~ [0x02AEF] = { mathclass='relation', adobename='uni2AEF', texname='cirmid' },
+--~ [0x02AF0] = { mathclass='relation', adobename='uni2AF0', texname='midcir' },
+--~ [0x02AF1] = { mathclass='normal', adobename='uni2AF1', texname='topcir' },
+--~ [0x02AF2] = { mathclass='relation', adobename='uni2AF2', texname='nhpar' },
+--~ [0x02AF3] = { mathclass='relation', adobename='uni2AF3', texname='parsim' },
+--~ [0x02AF4] = { mathclass='binary', adobename='uni2AF4', texname='interleave' },
+--~ [0x02AF5] = { mathclass='binary', adobename='uni2AF5', texname='nhVvert' },
+--~ [0x02AF6] = { mathclass='binary', adobename='uni2AF6', texname='threedotcolon' },
+--~ [0x02AF7] = { mathclass='relation', adobename='uni2AF7', texname='lllnest' },
+--~ [0x02AF8] = { mathclass='relation', adobename='uni2AF8', texname='gggnest' },
+--~ [0x02AF9] = { mathclass='relation', adobename='uni2AF9', texname='leqqslant' },
+--~ [0x02AFA] = { mathclass='relation', adobename='uni2AFA', texname='geqqslant' },
+--~ [0x02AFB] = { mathclass='binary', adobename='uni2AFB', texname='trslash' },
+--~ [0x02AFC] = { mathclass='large', adobename='uni2AFC', texname='biginterleave' },
+--~ [0x02AFD] = { mathclass='binary', adobename='uni2AFD', texname='sslash' },
+--~ [0x02AFE] = { mathclass='binary', adobename='uni2AFE', texname='talloblong' },
+--~ [0x02AFF] = { mathclass='large', adobename='uni2AFF', texname='bigtalloblong' },
+--~ [0x02B12] = { mathclass='normal', adobename='uni2B12', texname='squaretopblack' },
+--~ [0x02B13] = { mathclass='normal', adobename='uni2B13', texname='squarebotblack' },
+--~ [0x02B14] = { mathclass='normal', adobename='uni2B14', texname='squareurblack' },
+--~ [0x02B15] = { mathclass='normal', adobename='uni2B15', texname='squarellblack' },
+--~ [0x02B16] = { mathclass='normal', adobename='uni2B16', texname='diamondleftblack' },
+--~ [0x02B17] = { mathclass='normal', adobename='uni2B17', texname='diamondrightblack' },
+--~ [0x02B18] = { mathclass='normal', adobename='uni2B18', texname='diamondtopblack' },
+--~ [0x02B19] = { mathclass='normal', adobename='uni2B19', texname='diamondbotblack' },
+--~ [0x02B1A] = { mathclass='normal', adobename='uni2B1A', texname='dottedsquare' },
+--~ [0x02B20] = { mathclass='normal', adobename='uni2B20', texname='pentagon' },
+--~ [0x02B21] = { mathclass='normal', adobename='uni2B21', texname='varhexagon' },
+--~ [0x02B22] = { mathclass='normal', adobename='uni2B22', texname='varhexagonblack' },
+--~ [0x02B23] = { mathclass='normal', adobename='uni2B23', texname='hexagonblack' },
+--~ [0x0300A] = { mathclass='unknown', adobename='uni300A', texname='lAngle' },
+--~ [0x0300B] = { mathclass='unknown', adobename='uni300B', texname='rAngle' },
+--~ [0x03012] = { mathclass='unknown', adobename='uni3012', texname='postalmark' },
+--~ [0x03014] = { mathclass='opening', adobename='uni3014', texname='lbrbrak' },
+--~ [0x03015] = { mathclass='closing', adobename='uni3015', texname='rbrbrak' },
+--~ [0x03018] = { mathclass='opening', adobename='uni3018', texname='Lbrbrak' },
+--~ [0x03019] = { mathclass='closing', adobename='uni3019', texname='Rbrbrak' },
+--~ [0x0301A] = { mathclass='unknown', adobename='uni301A', texname='lBrack' },
+--~ [0x0301B] = { mathclass='unknown', adobename='uni301B', texname='rBrack' },
+--~ [0x0301E] = { mathclass='unknown', adobename='uni301E', texname='cjkdprimequote' },
+--~ [0x03030] = { mathclass='unknown', adobename='uni3030', texname='hzigzag' },
+--~ [0x0306E] = { mathclass='normal', adobename='uni306E', texname='hiraganano' },
+--~ [0x1D400] = { mathclass='alphabetic', adobename='u1D400', texname='bfA' },
+--~ [0x1D401] = { mathclass='alphabetic', adobename='u1D401', texname='bfB' },
+--~ [0x1D402] = { mathclass='alphabetic', adobename='u1D402', texname='bfC' },
+--~ [0x1D403] = { mathclass='alphabetic', adobename='u1D403', texname='bfD' },
+--~ [0x1D404] = { mathclass='alphabetic', adobename='u1D404', texname='bfE' },
+--~ [0x1D405] = { mathclass='alphabetic', adobename='u1D405', texname='bfF' },
+--~ [0x1D406] = { mathclass='alphabetic', adobename='u1D406', texname='bfG' },
+--~ [0x1D407] = { mathclass='alphabetic', adobename='u1D407', texname='bfH' },
+--~ [0x1D408] = { mathclass='alphabetic', adobename='u1D408', texname='bfI' },
+--~ [0x1D409] = { mathclass='alphabetic', adobename='u1D409', texname='bfJ' },
+--~ [0x1D40A] = { mathclass='alphabetic', adobename='u1D40A', texname='bfK' },
+--~ [0x1D40B] = { mathclass='alphabetic', adobename='u1D40B', texname='bfL' },
+--~ [0x1D40C] = { mathclass='alphabetic', adobename='u1D40C', texname='bfM' },
+--~ [0x1D40D] = { mathclass='alphabetic', adobename='u1D40D', texname='bfN' },
+--~ [0x1D40E] = { mathclass='alphabetic', adobename='u1D40E', texname='bfO' },
+--~ [0x1D40F] = { mathclass='alphabetic', adobename='u1D40F', texname='bfP' },
+--~ [0x1D410] = { mathclass='alphabetic', adobename='u1D410', texname='bfQ' },
+--~ [0x1D411] = { mathclass='alphabetic', adobename='u1D411', texname='bfR' },
+--~ [0x1D412] = { mathclass='alphabetic', adobename='u1D412', texname='bfS' },
+--~ [0x1D413] = { mathclass='alphabetic', adobename='u1D413', texname='bfT' },
+--~ [0x1D414] = { mathclass='alphabetic', adobename='u1D414', texname='bfU' },
+--~ [0x1D415] = { mathclass='alphabetic', adobename='u1D415', texname='bfV' },
+--~ [0x1D416] = { mathclass='alphabetic', adobename='u1D416', texname='bfW' },
+--~ [0x1D417] = { mathclass='alphabetic', adobename='u1D417', texname='bfX' },
+--~ [0x1D418] = { mathclass='alphabetic', adobename='u1D418', texname='bfY' },
+--~ [0x1D419] = { mathclass='alphabetic', adobename='u1D419', texname='bfZ' },
+--~ [0x1D41A] = { mathclass='alphabetic', adobename='u1D41A', texname='bfa' },
+--~ [0x1D41B] = { mathclass='alphabetic', adobename='u1D41B', texname='bfb' },
+--~ [0x1D41C] = { mathclass='alphabetic', adobename='u1D41C', texname='bfc' },
+--~ [0x1D41D] = { mathclass='alphabetic', adobename='u1D41D', texname='bfd' },
+--~ [0x1D41E] = { mathclass='alphabetic', adobename='u1D41E', texname='bfe' },
+--~ [0x1D41F] = { mathclass='alphabetic', adobename='u1D41F', texname='bff' },
+--~ [0x1D420] = { mathclass='alphabetic', adobename='u1D420', texname='bfg' },
+--~ [0x1D421] = { mathclass='alphabetic', adobename='u1D421', texname='bfh' },
+--~ [0x1D422] = { mathclass='alphabetic', adobename='u1D422', texname='bfi' },
+--~ [0x1D423] = { mathclass='alphabetic', adobename='u1D423', texname='bfj' },
+--~ [0x1D424] = { mathclass='alphabetic', adobename='u1D424', texname='bfk' },
+--~ [0x1D425] = { mathclass='alphabetic', adobename='u1D425', texname='bfl' },
+--~ [0x1D426] = { mathclass='alphabetic', adobename='u1D426', texname='bfm' },
+--~ [0x1D427] = { mathclass='alphabetic', adobename='u1D427', texname='bfn' },
+--~ [0x1D428] = { mathclass='alphabetic', adobename='u1D428', texname='bfo' },
+--~ [0x1D429] = { mathclass='alphabetic', adobename='u1D429', texname='bfp' },
+--~ [0x1D42A] = { mathclass='alphabetic', adobename='u1D42A', texname='bfq' },
+--~ [0x1D42B] = { mathclass='alphabetic', adobename='u1D42B', texname='bfr' },
+--~ [0x1D42C] = { mathclass='alphabetic', adobename='u1D42C', texname='bfs' },
+--~ [0x1D42D] = { mathclass='alphabetic', adobename='u1D42D', texname='bft' },
+--~ [0x1D42E] = { mathclass='alphabetic', adobename='u1D42E', texname='bfu' },
+--~ [0x1D42F] = { mathclass='alphabetic', adobename='u1D42F', texname='bfv' },
+--~ [0x1D430] = { mathclass='alphabetic', adobename='u1D430', texname='bfw' },
+--~ [0x1D431] = { mathclass='alphabetic', adobename='u1D431', texname='bfx' },
+--~ [0x1D432] = { mathclass='alphabetic', adobename='u1D432', texname='bfy' },
+--~ [0x1D433] = { mathclass='alphabetic', adobename='u1D433', texname='bfz' },
+--~ [0x1D434] = { mathclass='alphabetic', adobename='u1D434', texname='itA' },
+--~ [0x1D435] = { mathclass='alphabetic', adobename='u1D435', texname='itB' },
+--~ [0x1D436] = { mathclass='alphabetic', adobename='u1D436', texname='itC' },
+--~ [0x1D437] = { mathclass='alphabetic', adobename='u1D437', texname='itD' },
+--~ [0x1D438] = { mathclass='alphabetic', adobename='u1D438', texname='itE' },
+--~ [0x1D439] = { mathclass='alphabetic', adobename='u1D439', texname='itF' },
+--~ [0x1D43A] = { mathclass='alphabetic', adobename='u1D43A', texname='itG' },
+--~ [0x1D43B] = { mathclass='alphabetic', adobename='u1D43B', texname='itH' },
+--~ [0x1D43C] = { mathclass='alphabetic', adobename='u1D43C', texname='itI' },
+--~ [0x1D43D] = { mathclass='alphabetic', adobename='u1D43D', texname='itJ' },
+--~ [0x1D43E] = { mathclass='alphabetic', adobename='u1D43E', texname='itK' },
+--~ [0x1D43F] = { mathclass='alphabetic', adobename='u1D43F', texname='itL' },
+--~ [0x1D440] = { mathclass='alphabetic', adobename='u1D440', texname='itM' },
+--~ [0x1D441] = { mathclass='alphabetic', adobename='u1D441', texname='itN' },
+--~ [0x1D442] = { mathclass='alphabetic', adobename='u1D442', texname='itO' },
+--~ [0x1D443] = { mathclass='alphabetic', adobename='u1D443', texname='itP' },
+--~ [0x1D444] = { mathclass='alphabetic', adobename='u1D444', texname='itQ' },
+--~ [0x1D445] = { mathclass='alphabetic', adobename='u1D445', texname='itR' },
+--~ [0x1D446] = { mathclass='alphabetic', adobename='u1D446', texname='itS' },
+--~ [0x1D447] = { mathclass='alphabetic', adobename='u1D447', texname='itT' },
+--~ [0x1D448] = { mathclass='alphabetic', adobename='u1D448', texname='itU' },
+--~ [0x1D449] = { mathclass='alphabetic', adobename='u1D449', texname='itV' },
+--~ [0x1D44A] = { mathclass='alphabetic', adobename='u1D44A', texname='itW' },
+--~ [0x1D44B] = { mathclass='alphabetic', adobename='u1D44B', texname='itX' },
+--~ [0x1D44C] = { mathclass='alphabetic', adobename='u1D44C', texname='itY' },
+--~ [0x1D44D] = { mathclass='alphabetic', adobename='u1D44D', texname='itZ' },
+--~ [0x1D44E] = { mathclass='alphabetic', adobename='u1D44E', texname='ita' },
+--~ [0x1D44F] = { mathclass='alphabetic', adobename='u1D44F', texname='itb' },
+--~ [0x1D450] = { mathclass='alphabetic', adobename='u1D450', texname='itc' },
+--~ [0x1D451] = { mathclass='alphabetic', adobename='u1D451', texname='itd' },
+--~ [0x1D452] = { mathclass='alphabetic', adobename='u1D452', texname='ite' },
+--~ [0x1D453] = { mathclass='alphabetic', adobename='u1D453', texname='itf' },
+--~ [0x1D454] = { mathclass='alphabetic', adobename='u1D454', texname='itg' },
+--~ [0x1D455] = { mathclass='alphabetic', adobename='uni210E', texname='ith' },
+--~ [0x1D456] = { mathclass='alphabetic', adobename='u1D456', texname='iti' },
+--~ [0x1D457] = { mathclass='alphabetic', adobename='u1D457', texname='itj' },
+--~ [0x1D458] = { mathclass='alphabetic', adobename='u1D458', texname='itk' },
+--~ [0x1D459] = { mathclass='alphabetic', adobename='u1D459', texname='itl' },
+--~ [0x1D45A] = { mathclass='alphabetic', adobename='u1D45A', texname='itm' },
+--~ [0x1D45B] = { mathclass='alphabetic', adobename='u1D45B', texname='itn' },
+--~ [0x1D45C] = { mathclass='alphabetic', adobename='u1D45C', texname='ito' },
+--~ [0x1D45D] = { mathclass='alphabetic', adobename='u1D45D', texname='itp' },
+--~ [0x1D45E] = { mathclass='alphabetic', adobename='u1D45E', texname='itq' },
+--~ [0x1D45F] = { mathclass='alphabetic', adobename='u1D45F', texname='itr' },
+--~ [0x1D460] = { mathclass='alphabetic', adobename='u1D460', texname='its' },
+--~ [0x1D461] = { mathclass='alphabetic', adobename='u1D461', texname='itt' },
+--~ [0x1D462] = { mathclass='alphabetic', adobename='u1D462', texname='itu' },
+--~ [0x1D463] = { mathclass='alphabetic', adobename='u1D463', texname='itv' },
+--~ [0x1D464] = { mathclass='alphabetic', adobename='u1D464', texname='itw' },
+--~ [0x1D465] = { mathclass='alphabetic', adobename='u1D465', texname='itx' },
+--~ [0x1D466] = { mathclass='alphabetic', adobename='u1D466', texname='ity' },
+--~ [0x1D467] = { mathclass='alphabetic', adobename='u1D467', texname='itz' },
+--~ [0x1D468] = { mathclass='alphabetic', adobename='u1D468', texname='bfitA' },
+--~ [0x1D469] = { mathclass='alphabetic', adobename='u1D469', texname='bfitB' },
+--~ [0x1D46A] = { mathclass='alphabetic', adobename='u1D46A', texname='bfitC' },
+--~ [0x1D46B] = { mathclass='alphabetic', adobename='u1D46B', texname='bfitD' },
+--~ [0x1D46C] = { mathclass='alphabetic', adobename='u1D46C', texname='bfitE' },
+--~ [0x1D46D] = { mathclass='alphabetic', adobename='u1D46D', texname='bfitF' },
+--~ [0x1D46E] = { mathclass='alphabetic', adobename='u1D46E', texname='bfitG' },
+--~ [0x1D46F] = { mathclass='alphabetic', adobename='u1D46F', texname='bfitH' },
+--~ [0x1D470] = { mathclass='alphabetic', adobename='u1D470', texname='bfitI' },
+--~ [0x1D471] = { mathclass='alphabetic', adobename='u1D471', texname='bfitJ' },
+--~ [0x1D472] = { mathclass='alphabetic', adobename='u1D472', texname='bfitK' },
+--~ [0x1D473] = { mathclass='alphabetic', adobename='u1D473', texname='bfitL' },
+--~ [0x1D474] = { mathclass='alphabetic', adobename='u1D474', texname='bfitM' },
+--~ [0x1D475] = { mathclass='alphabetic', adobename='u1D475', texname='bfitN' },
+--~ [0x1D476] = { mathclass='alphabetic', adobename='u1D476', texname='bfitO' },
+--~ [0x1D477] = { mathclass='alphabetic', adobename='u1D477', texname='bfitP' },
+--~ [0x1D478] = { mathclass='alphabetic', adobename='u1D478', texname='bfitQ' },
+--~ [0x1D479] = { mathclass='alphabetic', adobename='u1D479', texname='bfitR' },
+--~ [0x1D47A] = { mathclass='alphabetic', adobename='u1D47A', texname='bfitS' },
+--~ [0x1D47B] = { mathclass='alphabetic', adobename='u1D47B', texname='bfitT' },
+--~ [0x1D47C] = { mathclass='alphabetic', adobename='u1D47C', texname='bfitU' },
+--~ [0x1D47D] = { mathclass='alphabetic', adobename='u1D47D', texname='bfitV' },
+--~ [0x1D47E] = { mathclass='alphabetic', adobename='u1D47E', texname='bfitW' },
+--~ [0x1D47F] = { mathclass='alphabetic', adobename='u1D47F', texname='bfitX' },
+--~ [0x1D480] = { mathclass='alphabetic', adobename='u1D480', texname='bfitY' },
+--~ [0x1D481] = { mathclass='alphabetic', adobename='u1D481', texname='bfitZ' },
+--~ [0x1D482] = { mathclass='alphabetic', adobename='u1D482', texname='bfita' },
+--~ [0x1D483] = { mathclass='alphabetic', adobename='u1D483', texname='bfitb' },
+--~ [0x1D484] = { mathclass='alphabetic', adobename='u1D484', texname='bfitc' },
+--~ [0x1D485] = { mathclass='alphabetic', adobename='u1D485', texname='bfitd' },
+--~ [0x1D486] = { mathclass='alphabetic', adobename='u1D486', texname='bfite' },
+--~ [0x1D487] = { mathclass='alphabetic', adobename='u1D487', texname='bfitf' },
+--~ [0x1D488] = { mathclass='alphabetic', adobename='u1D488', texname='bfitg' },
+--~ [0x1D489] = { mathclass='alphabetic', adobename='u1D489', texname='bfith' },
+--~ [0x1D48A] = { mathclass='alphabetic', adobename='u1D48A', texname='bfiti' },
+--~ [0x1D48B] = { mathclass='alphabetic', adobename='u1D48B', texname='bfitj' },
+--~ [0x1D48C] = { mathclass='alphabetic', adobename='u1D48C', texname='bfitk' },
+--~ [0x1D48D] = { mathclass='alphabetic', adobename='u1D48D', texname='bfitl' },
+--~ [0x1D48E] = { mathclass='alphabetic', adobename='u1D48E', texname='bfitm' },
+--~ [0x1D48F] = { mathclass='alphabetic', adobename='u1D48F', texname='bfitn' },
+--~ [0x1D490] = { mathclass='alphabetic', adobename='u1D490', texname='bfito' },
+--~ [0x1D491] = { mathclass='alphabetic', adobename='u1D491', texname='bfitp' },
+--~ [0x1D492] = { mathclass='alphabetic', adobename='u1D492', texname='bfitq' },
+--~ [0x1D493] = { mathclass='alphabetic', adobename='u1D493', texname='bfitr' },
+--~ [0x1D494] = { mathclass='alphabetic', adobename='u1D494', texname='bfits' },
+--~ [0x1D495] = { mathclass='alphabetic', adobename='u1D495', texname='bfitt' },
+--~ [0x1D496] = { mathclass='alphabetic', adobename='u1D496', texname='bfitu' },
+--~ [0x1D497] = { mathclass='alphabetic', adobename='u1D497', texname='bfitv' },
+--~ [0x1D498] = { mathclass='alphabetic', adobename='u1D498', texname='bfitw' },
+--~ [0x1D499] = { mathclass='alphabetic', adobename='u1D499', texname='bfitx' },
+--~ [0x1D49A] = { mathclass='alphabetic', adobename='u1D49A', texname='bfity' },
+--~ [0x1D49B] = { mathclass='alphabetic', adobename='u1D49B', texname='bfitz' },
+--~ [0x1D49C] = { mathclass='alphabetic', adobename='u1D49C', texname='scrA' },
+--~ [0x1D49D] = { mathclass='alphabetic', adobename='uni212C', texname='scrB' },
+--~ [0x1D49E] = { mathclass='alphabetic', adobename='u1D49E', texname='scrC' },
+--~ [0x1D49F] = { mathclass='alphabetic', adobename='u1D49F', texname='scrD' },
+--~ [0x1D4A0] = { mathclass='alphabetic', adobename='uni2130', texname='scrE' },
+--~ [0x1D4A1] = { mathclass='alphabetic', adobename='uni2131', texname='scrF' },
+--~ [0x1D4A2] = { mathclass='alphabetic', adobename='u1D4A2', texname='scrG' },
+--~ [0x1D4A3] = { mathclass='alphabetic', adobename='uni210B', texname='scrH' },
+--~ [0x1D4A4] = { mathclass='alphabetic', adobename='uni2110', texname='scrI' },
+--~ [0x1D4A5] = { mathclass='alphabetic', adobename='u1D4A5', texname='scrJ' },
+--~ [0x1D4A6] = { mathclass='alphabetic', adobename='u1D4A6', texname='scrK' },
+--~ [0x1D4A7] = { mathclass='alphabetic', adobename='uni2112', texname='scrL' },
+--~ [0x1D4A8] = { mathclass='alphabetic', adobename='uni2133', texname='scrM' },
+--~ [0x1D4A9] = { mathclass='alphabetic', adobename='u1D4A9', texname='scrN' },
+--~ [0x1D4AA] = { mathclass='alphabetic', adobename='u1D4AA', texname='scrO' },
+--~ [0x1D4AB] = { mathclass='alphabetic', adobename='u1D4AB', texname='scrP' },
+--~ [0x1D4AC] = { mathclass='alphabetic', adobename='u1D4AC', texname='scrQ' },
+--~ [0x1D4AD] = { mathclass='alphabetic', adobename='uni211B', texname='scrR' },
+--~ [0x1D4AE] = { mathclass='alphabetic', adobename='u1D4AE', texname='scrS' },
+--~ [0x1D4AF] = { mathclass='alphabetic', adobename='u1D4AF', texname='scrT' },
+--~ [0x1D4B0] = { mathclass='alphabetic', adobename='u1D4B0', texname='scrU' },
+--~ [0x1D4B1] = { mathclass='alphabetic', adobename='u1D4B1', texname='scrV' },
+--~ [0x1D4B2] = { mathclass='alphabetic', adobename='u1D4B2', texname='scrW' },
+--~ [0x1D4B3] = { mathclass='alphabetic', adobename='u1D4B3', texname='scrX' },
+--~ [0x1D4B4] = { mathclass='alphabetic', adobename='u1D4B4', texname='scrY' },
+--~ [0x1D4B5] = { mathclass='alphabetic', adobename='u1D4B5', texname='scrZ' },
+--~ [0x1D4B6] = { mathclass='alphabetic', adobename='u1D4B6', texname='scra' },
+--~ [0x1D4B7] = { mathclass='alphabetic', adobename='u1D4B7', texname='scrb' },
+--~ [0x1D4B8] = { mathclass='alphabetic', adobename='u1D4B8', texname='scrc' },
+--~ [0x1D4B9] = { mathclass='alphabetic', adobename='u1D4B9', texname='scrd' },
+--~ [0x1D4BA] = { mathclass='alphabetic', adobename='uni212F', texname='scre' },
+--~ [0x1D4BB] = { mathclass='alphabetic', adobename='u1D4BB', texname='scrf' },
+--~ [0x1D4BC] = { mathclass='alphabetic', adobename='uni210A', texname='scrg' },
+--~ [0x1D4BD] = { mathclass='alphabetic', adobename='u1D4BD', texname='scrh' },
+--~ [0x1D4BE] = { mathclass='alphabetic', adobename='u1D4BE', texname='scri' },
+--~ [0x1D4BF] = { mathclass='alphabetic', adobename='u1D4BF', texname='scrj' },
+--~ [0x1D4C0] = { mathclass='alphabetic', adobename='u1D4C0', texname='scrk' },
+--~ [0x1D4C1] = { mathclass='alphabetic', adobename='u1D4C1', texname='scrl' },
+--~ [0x1D4C2] = { mathclass='alphabetic', adobename='u1D4C2', texname='scrm' },
+--~ [0x1D4C3] = { mathclass='alphabetic', adobename='u1D4C3', texname='scrn' },
+--~ [0x1D4C4] = { mathclass='alphabetic', adobename='uni2134', texname='scro' },
+--~ [0x1D4C5] = { mathclass='alphabetic', adobename='u1D4C5', texname='scrp' },
+--~ [0x1D4C6] = { mathclass='alphabetic', adobename='u1D4C6', texname='scrq' },
+--~ [0x1D4C7] = { mathclass='alphabetic', adobename='u1D4C7', texname='scrr' },
+--~ [0x1D4C8] = { mathclass='alphabetic', adobename='u1D4C8', texname='scrs' },
+--~ [0x1D4C9] = { mathclass='alphabetic', adobename='u1D4C9', texname='scrt' },
+--~ [0x1D4CA] = { mathclass='alphabetic', adobename='u1D4CA', texname='scru' },
+--~ [0x1D4CB] = { mathclass='alphabetic', adobename='u1D4CB', texname='scrv' },
+--~ [0x1D4CC] = { mathclass='alphabetic', adobename='u1D4CC', texname='scrw' },
+--~ [0x1D4CD] = { mathclass='alphabetic', adobename='u1D4CD', texname='scrx' },
+--~ [0x1D4CE] = { mathclass='alphabetic', adobename='u1D4CE', texname='scry' },
+--~ [0x1D4CF] = { mathclass='alphabetic', adobename='u1D4CF', texname='scrz' },
+--~ [0x1D4D0] = { mathclass='alphabetic', adobename='u1D4D0', texname='bfscrA' },
+--~ [0x1D4D1] = { mathclass='alphabetic', adobename='u1D4D1', texname='bfscrB' },
+--~ [0x1D4D2] = { mathclass='alphabetic', adobename='u1D4D2', texname='bfscrC' },
+--~ [0x1D4D3] = { mathclass='alphabetic', adobename='u1D4D3', texname='bfscrD' },
+--~ [0x1D4D4] = { mathclass='alphabetic', adobename='u1D4D4', texname='bfscrE' },
+--~ [0x1D4D5] = { mathclass='alphabetic', adobename='u1D4D5', texname='bfscrF' },
+--~ [0x1D4D6] = { mathclass='alphabetic', adobename='u1D4D6', texname='bfscrG' },
+--~ [0x1D4D7] = { mathclass='alphabetic', adobename='u1D4D7', texname='bfscrH' },
+--~ [0x1D4D8] = { mathclass='alphabetic', adobename='u1D4D8', texname='bfscrI' },
+--~ [0x1D4D9] = { mathclass='alphabetic', adobename='u1D4D9', texname='bfscrJ' },
+--~ [0x1D4DA] = { mathclass='alphabetic', adobename='u1D4DA', texname='bfscrK' },
+--~ [0x1D4DB] = { mathclass='alphabetic', adobename='u1D4DB', texname='bfscrL' },
+--~ [0x1D4DC] = { mathclass='alphabetic', adobename='u1D4DC', texname='bfscrM' },
+--~ [0x1D4DD] = { mathclass='alphabetic', adobename='u1D4DD', texname='bfscrN' },
+--~ [0x1D4DE] = { mathclass='alphabetic', adobename='u1D4DE', texname='bfscrO' },
+--~ [0x1D4DF] = { mathclass='alphabetic', adobename='u1D4DF', texname='bfscrP' },
+--~ [0x1D4E0] = { mathclass='alphabetic', adobename='u1D4E0', texname='bfscrQ' },
+--~ [0x1D4E1] = { mathclass='alphabetic', adobename='u1D4E1', texname='bfscrR' },
+--~ [0x1D4E2] = { mathclass='alphabetic', adobename='u1D4E2', texname='bfscrS' },
+--~ [0x1D4E3] = { mathclass='alphabetic', adobename='u1D4E3', texname='bfscrT' },
+--~ [0x1D4E4] = { mathclass='alphabetic', adobename='u1D4E4', texname='bfscrU' },
+--~ [0x1D4E5] = { mathclass='alphabetic', adobename='u1D4E5', texname='bfscrV' },
+--~ [0x1D4E6] = { mathclass='alphabetic', adobename='u1D4E6', texname='bfscrW' },
+--~ [0x1D4E7] = { mathclass='alphabetic', adobename='u1D4E7', texname='bfscrX' },
+--~ [0x1D4E8] = { mathclass='alphabetic', adobename='u1D4E8', texname='bfscrY' },
+--~ [0x1D4E9] = { mathclass='alphabetic', adobename='u1D4E9', texname='bfscrZ' },
+--~ [0x1D4EA] = { mathclass='alphabetic', adobename='u1D4EA', texname='bfscra' },
+--~ [0x1D4EB] = { mathclass='alphabetic', adobename='u1D4EB', texname='bfscrb' },
+--~ [0x1D4EC] = { mathclass='alphabetic', adobename='u1D4EC', texname='bfscrc' },
+--~ [0x1D4ED] = { mathclass='alphabetic', adobename='u1D4ED', texname='bfscrd' },
+--~ [0x1D4EE] = { mathclass='alphabetic', adobename='u1D4EE', texname='bfscre' },
+--~ [0x1D4EF] = { mathclass='alphabetic', adobename='u1D4EF', texname='bfscrf' },
+--~ [0x1D4F0] = { mathclass='alphabetic', adobename='u1D4F0', texname='bfscrg' },
+--~ [0x1D4F1] = { mathclass='alphabetic', adobename='u1D4F1', texname='bfscrh' },
+--~ [0x1D4F2] = { mathclass='alphabetic', adobename='u1D4F2', texname='bfscri' },
+--~ [0x1D4F3] = { mathclass='alphabetic', adobename='u1D4F3', texname='bfscrj' },
+--~ [0x1D4F4] = { mathclass='alphabetic', adobename='u1D4F4', texname='bfscrk' },
+--~ [0x1D4F5] = { mathclass='alphabetic', adobename='u1D4F5', texname='bfscrl' },
+--~ [0x1D4F6] = { mathclass='alphabetic', adobename='u1D4F6', texname='bfscrm' },
+--~ [0x1D4F7] = { mathclass='alphabetic', adobename='u1D4F7', texname='bfscrn' },
+--~ [0x1D4F8] = { mathclass='alphabetic', adobename='u1D4F8', texname='bfscro' },
+--~ [0x1D4F9] = { mathclass='alphabetic', adobename='u1D4F9', texname='bfscrp' },
+--~ [0x1D4FA] = { mathclass='alphabetic', adobename='u1D4FA', texname='bfscrq' },
+--~ [0x1D4FB] = { mathclass='alphabetic', adobename='u1D4FB', texname='bfscrr' },
+--~ [0x1D4FC] = { mathclass='alphabetic', adobename='u1D4FC', texname='bfscrs' },
+--~ [0x1D4FD] = { mathclass='alphabetic', adobename='u1D4FD', texname='bfscrt' },
+--~ [0x1D4FE] = { mathclass='alphabetic', adobename='u1D4FE', texname='bfscru' },
+--~ [0x1D4FF] = { mathclass='alphabetic', adobename='u1D4FF', texname='bfscrv' },
+--~ [0x1D500] = { mathclass='alphabetic', adobename='u1D500', texname='bfscrw' },
+--~ [0x1D501] = { mathclass='alphabetic', adobename='u1D501', texname='bfscrx' },
+--~ [0x1D502] = { mathclass='alphabetic', adobename='u1D502', texname='bfscry' },
+--~ [0x1D503] = { mathclass='alphabetic', adobename='u1D503', texname='bfscrz' },
+--~ [0x1D504] = { mathclass='alphabetic', adobename='u1D504', texname='frakA' },
+--~ [0x1D505] = { mathclass='alphabetic', adobename='u1D505', texname='frakB' },
+--~ [0x1D506] = { mathclass='alphabetic', adobename='uni212D', texname='frakC' },
+--~ [0x1D507] = { mathclass='alphabetic', adobename='u1D507', texname='frakD' },
+--~ [0x1D508] = { mathclass='alphabetic', adobename='u1D508', texname='frakE' },
+--~ [0x1D509] = { mathclass='alphabetic', adobename='u1D509', texname='frakF' },
+--~ [0x1D50A] = { mathclass='alphabetic', adobename='u1D50A', texname='frakG' },
+--~ [0x1D50B] = { mathclass='alphabetic', adobename='uni210C', texname='frakH' },
+--~ [0x1D50C] = { mathclass='alphabetic', adobename='uni2111', texname='frakI' },
+--~ [0x1D50D] = { mathclass='alphabetic', adobename='u1D50D', texname='frakJ' },
+--~ [0x1D50E] = { mathclass='alphabetic', adobename='u1D50E', texname='frakK' },
+--~ [0x1D50F] = { mathclass='alphabetic', adobename='u1D50F', texname='frakL' },
+--~ [0x1D510] = { mathclass='alphabetic', adobename='u1D510', texname='frakM' },
+--~ [0x1D511] = { mathclass='alphabetic', adobename='u1D511', texname='frakN' },
+--~ [0x1D512] = { mathclass='alphabetic', adobename='u1D512', texname='frakO' },
+--~ [0x1D513] = { mathclass='alphabetic', adobename='u1D513', texname='frakP' },
+--~ [0x1D514] = { mathclass='alphabetic', adobename='u1D514', texname='frakQ' },
+--~ [0x1D515] = { mathclass='alphabetic', adobename='uni211C', texname='frakR' },
+--~ [0x1D516] = { mathclass='alphabetic', adobename='u1D516', texname='frakS' },
+--~ [0x1D517] = { mathclass='alphabetic', adobename='u1D517', texname='frakT' },
+--~ [0x1D518] = { mathclass='alphabetic', adobename='u1D518', texname='frakU' },
+--~ [0x1D519] = { mathclass='alphabetic', adobename='u1D519', texname='frakV' },
+--~ [0x1D51A] = { mathclass='alphabetic', adobename='u1D51A', texname='frakW' },
+--~ [0x1D51B] = { mathclass='alphabetic', adobename='u1D51B', texname='frakX' },
+--~ [0x1D51C] = { mathclass='alphabetic', adobename='u1D51C', texname='frakY' },
+--~ [0x1D51D] = { mathclass='alphabetic', adobename='uni2128', texname='frakZ' },
+--~ [0x1D51E] = { mathclass='alphabetic', adobename='u1D51E', texname='fraka' },
+--~ [0x1D51F] = { mathclass='alphabetic', adobename='u1D51F', texname='frakb' },
+--~ [0x1D520] = { mathclass='alphabetic', adobename='u1D520', texname='frakc' },
+--~ [0x1D521] = { mathclass='alphabetic', adobename='u1D521', texname='frakd' },
+--~ [0x1D522] = { mathclass='alphabetic', adobename='u1D522', texname='frake' },
+--~ [0x1D523] = { mathclass='alphabetic', adobename='u1D523', texname='frakf' },
+--~ [0x1D524] = { mathclass='alphabetic', adobename='u1D524', texname='frakg' },
+--~ [0x1D525] = { mathclass='alphabetic', adobename='u1D525', texname='frakh' },
+--~ [0x1D526] = { mathclass='alphabetic', adobename='u1D526', texname='fraki' },
+--~ [0x1D527] = { mathclass='alphabetic', adobename='u1D527', texname='frakj' },
+--~ [0x1D528] = { mathclass='alphabetic', adobename='u1D528', texname='frakk' },
+--~ [0x1D529] = { mathclass='alphabetic', adobename='u1D529', texname='frakl' },
+--~ [0x1D52A] = { mathclass='alphabetic', adobename='u1D52A', texname='frakm' },
+--~ [0x1D52B] = { mathclass='alphabetic', adobename='u1D52B', texname='frakn' },
+--~ [0x1D52C] = { mathclass='alphabetic', adobename='u1D52C', texname='frako' },
+--~ [0x1D52D] = { mathclass='alphabetic', adobename='u1D52D', texname='frakp' },
+--~ [0x1D52E] = { mathclass='alphabetic', adobename='u1D52E', texname='frakq' },
+--~ [0x1D52F] = { mathclass='alphabetic', adobename='u1D52F', texname='frakr' },
+--~ [0x1D530] = { mathclass='alphabetic', adobename='u1D530', texname='fraks' },
+--~ [0x1D531] = { mathclass='alphabetic', adobename='u1D531', texname='frakt' },
+--~ [0x1D532] = { mathclass='alphabetic', adobename='u1D532', texname='fraku' },
+--~ [0x1D533] = { mathclass='alphabetic', adobename='u1D533', texname='frakv' },
+--~ [0x1D534] = { mathclass='alphabetic', adobename='u1D534', texname='frakw' },
+--~ [0x1D535] = { mathclass='alphabetic', adobename='u1D535', texname='frakx' },
+--~ [0x1D536] = { mathclass='alphabetic', adobename='u1D536', texname='fraky' },
+--~ [0x1D537] = { mathclass='alphabetic', adobename='u1D537', texname='frakz' },
+--~ [0x1D538] = { mathclass='alphabetic', adobename='u1D538', texname='BbbA' },
+--~ [0x1D539] = { mathclass='alphabetic', adobename='u1D539', texname='BbbB' },
+--~ [0x1D53A] = { mathclass='alphabetic', adobename='uni2102', texname='BbbC' },
+--~ [0x1D53B] = { mathclass='alphabetic', adobename='u1D53B', texname='BbbD' },
+--~ [0x1D53C] = { mathclass='alphabetic', adobename='u1D53C', texname='BbbE' },
+--~ [0x1D53D] = { mathclass='alphabetic', adobename='u1D53D', texname='BbbF' },
+--~ [0x1D53E] = { mathclass='alphabetic', adobename='u1D53E', texname='BbbG' },
+--~ [0x1D53F] = { mathclass='alphabetic', adobename='uni210D', texname='BbbH' },
+--~ [0x1D540] = { mathclass='alphabetic', adobename='u1D540', texname='BbbI' },
+--~ [0x1D541] = { mathclass='alphabetic', adobename='u1D541', texname='BbbJ' },
+--~ [0x1D542] = { mathclass='alphabetic', adobename='u1D542', texname='BbbK' },
+--~ [0x1D543] = { mathclass='alphabetic', adobename='u1D543', texname='BbbL' },
+--~ [0x1D544] = { mathclass='alphabetic', adobename='u1D544', texname='BbbM' },
+--~ [0x1D545] = { mathclass='alphabetic', adobename='uni2115', texname='BbbN' },
+--~ [0x1D546] = { mathclass='alphabetic', adobename='u1D546', texname='BbbO' },
+--~ [0x1D547] = { mathclass='alphabetic', adobename='uni2119', texname='BbbP' },
+--~ [0x1D548] = { mathclass='alphabetic', adobename='uni211A', texname='BbbQ' },
+--~ [0x1D549] = { mathclass='alphabetic', adobename='uni211D', texname='BbbR' },
+--~ [0x1D54A] = { mathclass='alphabetic', adobename='u1D54A', texname='BbbS' },
+--~ [0x1D54B] = { mathclass='alphabetic', adobename='u1D54B', texname='BbbT' },
+--~ [0x1D54C] = { mathclass='alphabetic', adobename='u1D54C', texname='BbbU' },
+--~ [0x1D54D] = { mathclass='alphabetic', adobename='u1D54D', texname='BbbV' },
+--~ [0x1D54E] = { mathclass='alphabetic', adobename='u1D54E', texname='BbbW' },
+--~ [0x1D54F] = { mathclass='alphabetic', adobename='u1D54F', texname='BbbX' },
+--~ [0x1D550] = { mathclass='alphabetic', adobename='u1D550', texname='BbbY' },
+--~ [0x1D551] = { mathclass='alphabetic', adobename='uni2124', texname='BbbZ' },
+--~ [0x1D552] = { mathclass='alphabetic', adobename='u1D552', texname='Bbba' },
+--~ [0x1D553] = { mathclass='alphabetic', adobename='u1D553', texname='Bbbb' },
+--~ [0x1D554] = { mathclass='alphabetic', adobename='u1D554', texname='Bbbc' },
+--~ [0x1D555] = { mathclass='alphabetic', adobename='u1D555', texname='Bbbd' },
+--~ [0x1D556] = { mathclass='alphabetic', adobename='u1D556', texname='Bbbe' },
+--~ [0x1D557] = { mathclass='alphabetic', adobename='u1D557', texname='Bbbf' },
+--~ [0x1D558] = { mathclass='alphabetic', adobename='u1D558', texname='Bbbg' },
+--~ [0x1D559] = { mathclass='alphabetic', adobename='u1D559', texname='Bbbh' },
+--~ [0x1D55A] = { mathclass='alphabetic', adobename='u1D55A', texname='Bbbi' },
+--~ [0x1D55B] = { mathclass='alphabetic', adobename='u1D55B', texname='Bbbj' },
+--~ [0x1D55C] = { mathclass='alphabetic', adobename='u1D55C', texname='Bbbk' },
+--~ [0x1D55D] = { mathclass='alphabetic', adobename='u1D55D', texname='Bbbl' },
+--~ [0x1D55E] = { mathclass='alphabetic', adobename='u1D55E', texname='Bbbm' },
+--~ [0x1D55F] = { mathclass='alphabetic', adobename='u1D55F', texname='Bbbn' },
+--~ [0x1D560] = { mathclass='alphabetic', adobename='u1D560', texname='Bbbo' },
+--~ [0x1D561] = { mathclass='alphabetic', adobename='u1D561', texname='Bbbp' },
+--~ [0x1D562] = { mathclass='alphabetic', adobename='u1D562', texname='Bbbq' },
+--~ [0x1D563] = { mathclass='alphabetic', adobename='u1D563', texname='Bbbr' },
+--~ [0x1D564] = { mathclass='alphabetic', adobename='u1D564', texname='Bbbs' },
+--~ [0x1D565] = { mathclass='alphabetic', adobename='u1D565', texname='Bbbt' },
+--~ [0x1D566] = { mathclass='alphabetic', adobename='u1D566', texname='Bbbu' },
+--~ [0x1D567] = { mathclass='alphabetic', adobename='u1D567', texname='Bbbv' },
+--~ [0x1D568] = { mathclass='alphabetic', adobename='u1D568', texname='Bbbw' },
+--~ [0x1D569] = { mathclass='alphabetic', adobename='u1D569', texname='Bbbx' },
+--~ [0x1D56A] = { mathclass='alphabetic', adobename='u1D56A', texname='Bbby' },
+--~ [0x1D56B] = { mathclass='alphabetic', adobename='u1D56B', texname='Bbbz' },
+--~ [0x1D56C] = { mathclass='alphabetic', adobename='u1D56C', texname='bffrakA' },
+--~ [0x1D56D] = { mathclass='alphabetic', adobename='u1D56D', texname='bffrakB' },
+--~ [0x1D56E] = { mathclass='alphabetic', adobename='u1D56E', texname='bffrakC' },
+--~ [0x1D56F] = { mathclass='alphabetic', adobename='u1D56F', texname='bffrakD' },
+--~ [0x1D570] = { mathclass='alphabetic', adobename='u1D570', texname='bffrakE' },
+--~ [0x1D571] = { mathclass='alphabetic', adobename='u1D571', texname='bffrakF' },
+--~ [0x1D572] = { mathclass='alphabetic', adobename='u1D572', texname='bffrakG' },
+--~ [0x1D573] = { mathclass='alphabetic', adobename='u1D573', texname='bffrakH' },
+--~ [0x1D574] = { mathclass='alphabetic', adobename='u1D574', texname='bffrakI' },
+--~ [0x1D575] = { mathclass='alphabetic', adobename='u1D575', texname='bffrakJ' },
+--~ [0x1D576] = { mathclass='alphabetic', adobename='u1D576', texname='bffrakK' },
+--~ [0x1D577] = { mathclass='alphabetic', adobename='u1D577', texname='bffrakL' },
+--~ [0x1D578] = { mathclass='alphabetic', adobename='u1D578', texname='bffrakM' },
+--~ [0x1D579] = { mathclass='alphabetic', adobename='u1D579', texname='bffrakN' },
+--~ [0x1D57A] = { mathclass='alphabetic', adobename='u1D57A', texname='bffrakO' },
+--~ [0x1D57B] = { mathclass='alphabetic', adobename='u1D57B', texname='bffrakP' },
+--~ [0x1D57C] = { mathclass='alphabetic', adobename='u1D57C', texname='bffrakQ' },
+--~ [0x1D57D] = { mathclass='alphabetic', adobename='u1D57D', texname='bffrakR' },
+--~ [0x1D57E] = { mathclass='alphabetic', adobename='u1D57E', texname='bffrakS' },
+--~ [0x1D57F] = { mathclass='alphabetic', adobename='u1D57F', texname='bffrakT' },
+--~ [0x1D580] = { mathclass='alphabetic', adobename='u1D580', texname='bffrakU' },
+--~ [0x1D581] = { mathclass='alphabetic', adobename='u1D581', texname='bffrakV' },
+--~ [0x1D582] = { mathclass='alphabetic', adobename='u1D582', texname='bffrakW' },
+--~ [0x1D583] = { mathclass='alphabetic', adobename='u1D583', texname='bffrakX' },
+--~ [0x1D584] = { mathclass='alphabetic', adobename='u1D584', texname='bffrakY' },
+--~ [0x1D585] = { mathclass='alphabetic', adobename='u1D585', texname='bffrakZ' },
+--~ [0x1D586] = { mathclass='alphabetic', adobename='u1D586', texname='bffraka' },
+--~ [0x1D587] = { mathclass='alphabetic', adobename='u1D587', texname='bffrakb' },
+--~ [0x1D588] = { mathclass='alphabetic', adobename='u1D588', texname='bffrakc' },
+--~ [0x1D589] = { mathclass='alphabetic', adobename='u1D589', texname='bffrakd' },
+--~ [0x1D58A] = { mathclass='alphabetic', adobename='u1D58A', texname='bffrake' },
+--~ [0x1D58B] = { mathclass='alphabetic', adobename='u1D58B', texname='bffrakf' },
+--~ [0x1D58C] = { mathclass='alphabetic', adobename='u1D58C', texname='bffrakg' },
+--~ [0x1D58D] = { mathclass='alphabetic', adobename='u1D58D', texname='bffrakh' },
+--~ [0x1D58E] = { mathclass='alphabetic', adobename='u1D58E', texname='bffraki' },
+--~ [0x1D58F] = { mathclass='alphabetic', adobename='u1D58F', texname='bffrakj' },
+--~ [0x1D590] = { mathclass='alphabetic', adobename='u1D590', texname='bffrakk' },
+--~ [0x1D591] = { mathclass='alphabetic', adobename='u1D591', texname='bffrakl' },
+--~ [0x1D592] = { mathclass='alphabetic', adobename='u1D592', texname='bffrakm' },
+--~ [0x1D593] = { mathclass='alphabetic', adobename='u1D593', texname='bffrakn' },
+--~ [0x1D594] = { mathclass='alphabetic', adobename='u1D594', texname='bffrako' },
+--~ [0x1D595] = { mathclass='alphabetic', adobename='u1D595', texname='bffrakp' },
+--~ [0x1D596] = { mathclass='alphabetic', adobename='u1D596', texname='bffrakq' },
+--~ [0x1D597] = { mathclass='alphabetic', adobename='u1D597', texname='bffrakr' },
+--~ [0x1D598] = { mathclass='alphabetic', adobename='u1D598', texname='bffraks' },
+--~ [0x1D599] = { mathclass='alphabetic', adobename='u1D599', texname='bffrakt' },
+--~ [0x1D59A] = { mathclass='alphabetic', adobename='u1D59A', texname='bffraku' },
+--~ [0x1D59B] = { mathclass='alphabetic', adobename='u1D59B', texname='bffrakv' },
+--~ [0x1D59C] = { mathclass='alphabetic', adobename='u1D59C', texname='bffrakw' },
+--~ [0x1D59D] = { mathclass='alphabetic', adobename='u1D59D', texname='bffrakx' },
+--~ [0x1D59E] = { mathclass='alphabetic', adobename='u1D59E', texname='bffraky' },
+--~ [0x1D59F] = { mathclass='alphabetic', adobename='u1D59F', texname='bffrakz' },
+--~ [0x1D5A0] = { mathclass='alphabetic', adobename='u1D5A0', texname='sansA' },
+--~ [0x1D5A1] = { mathclass='alphabetic', adobename='u1D5A1', texname='sansB' },
+--~ [0x1D5A2] = { mathclass='alphabetic', adobename='u1D5A2', texname='sansC' },
+--~ [0x1D5A3] = { mathclass='alphabetic', adobename='u1D5A3', texname='sansD' },
+--~ [0x1D5A4] = { mathclass='alphabetic', adobename='u1D5A4', texname='sansE' },
+--~ [0x1D5A5] = { mathclass='alphabetic', adobename='u1D5A5', texname='sansF' },
+--~ [0x1D5A6] = { mathclass='alphabetic', adobename='u1D5A6', texname='sansG' },
+--~ [0x1D5A7] = { mathclass='alphabetic', adobename='u1D5A7', texname='sansH' },
+--~ [0x1D5A8] = { mathclass='alphabetic', adobename='u1D5A8', texname='sansI' },
+--~ [0x1D5A9] = { mathclass='alphabetic', adobename='u1D5A9', texname='sansJ' },
+--~ [0x1D5AA] = { mathclass='alphabetic', adobename='u1D5AA', texname='sansK' },
+--~ [0x1D5AB] = { mathclass='alphabetic', adobename='u1D5AB', texname='sansL' },
+--~ [0x1D5AC] = { mathclass='alphabetic', adobename='u1D5AC', texname='sansM' },
+--~ [0x1D5AD] = { mathclass='alphabetic', adobename='u1D5AD', texname='sansN' },
+--~ [0x1D5AE] = { mathclass='alphabetic', adobename='u1D5AE', texname='sansO' },
+--~ [0x1D5AF] = { mathclass='alphabetic', adobename='u1D5AF', texname='sansP' },
+--~ [0x1D5B0] = { mathclass='alphabetic', adobename='u1D5B0', texname='sansQ' },
+--~ [0x1D5B1] = { mathclass='alphabetic', adobename='u1D5B1', texname='sansR' },
+--~ [0x1D5B2] = { mathclass='alphabetic', adobename='u1D5B2', texname='sansS' },
+--~ [0x1D5B3] = { mathclass='alphabetic', adobename='u1D5B3', texname='sansT' },
+--~ [0x1D5B4] = { mathclass='alphabetic', adobename='u1D5B4', texname='sansU' },
+--~ [0x1D5B5] = { mathclass='alphabetic', adobename='u1D5B5', texname='sansV' },
+--~ [0x1D5B6] = { mathclass='alphabetic', adobename='u1D5B6', texname='sansW' },
+--~ [0x1D5B7] = { mathclass='alphabetic', adobename='u1D5B7', texname='sansX' },
+--~ [0x1D5B8] = { mathclass='alphabetic', adobename='u1D5B8', texname='sansY' },
+--~ [0x1D5B9] = { mathclass='alphabetic', adobename='u1D5B9', texname='sansZ' },
+--~ [0x1D5BA] = { mathclass='alphabetic', adobename='u1D5BA', texname='sansa' },
+--~ [0x1D5BB] = { mathclass='alphabetic', adobename='u1D5BB', texname='sansb' },
+--~ [0x1D5BC] = { mathclass='alphabetic', adobename='u1D5BC', texname='sansc' },
+--~ [0x1D5BD] = { mathclass='alphabetic', adobename='u1D5BD', texname='sansd' },
+--~ [0x1D5BE] = { mathclass='alphabetic', adobename='u1D5BE', texname='sanse' },
+--~ [0x1D5BF] = { mathclass='alphabetic', adobename='u1D5BF', texname='sansf' },
+--~ [0x1D5C0] = { mathclass='alphabetic', adobename='u1D5C0', texname='sansg' },
+--~ [0x1D5C1] = { mathclass='alphabetic', adobename='u1D5C1', texname='sansh' },
+--~ [0x1D5C2] = { mathclass='alphabetic', adobename='u1D5C2', texname='sansi' },
+--~ [0x1D5C3] = { mathclass='alphabetic', adobename='u1D5C3', texname='sansj' },
+--~ [0x1D5C4] = { mathclass='alphabetic', adobename='u1D5C4', texname='sansk' },
+--~ [0x1D5C5] = { mathclass='alphabetic', adobename='u1D5C5', texname='sansl' },
+--~ [0x1D5C6] = { mathclass='alphabetic', adobename='u1D5C6', texname='sansm' },
+--~ [0x1D5C7] = { mathclass='alphabetic', adobename='u1D5C7', texname='sansn' },
+--~ [0x1D5C8] = { mathclass='alphabetic', adobename='u1D5C8', texname='sanso' },
+--~ [0x1D5C9] = { mathclass='alphabetic', adobename='u1D5C9', texname='sansp' },
+--~ [0x1D5CA] = { mathclass='alphabetic', adobename='u1D5CA', texname='sansq' },
+--~ [0x1D5CB] = { mathclass='alphabetic', adobename='u1D5CB', texname='sansr' },
+--~ [0x1D5CC] = { mathclass='alphabetic', adobename='u1D5CC', texname='sanss' },
+--~ [0x1D5CD] = { mathclass='alphabetic', adobename='u1D5CD', texname='sanst' },
+--~ [0x1D5CE] = { mathclass='alphabetic', adobename='u1D5CE', texname='sansu' },
+--~ [0x1D5CF] = { mathclass='alphabetic', adobename='u1D5CF', texname='sansv' },
+--~ [0x1D5D0] = { mathclass='alphabetic', adobename='u1D5D0', texname='sansw' },
+--~ [0x1D5D1] = { mathclass='alphabetic', adobename='u1D5D1', texname='sansx' },
+--~ [0x1D5D2] = { mathclass='alphabetic', adobename='u1D5D2', texname='sansy' },
+--~ [0x1D5D3] = { mathclass='alphabetic', adobename='u1D5D3', texname='sansz' },
+--~ [0x1D5D4] = { mathclass='alphabetic', adobename='u1D5D4', texname='bfsansA' },
+--~ [0x1D5D5] = { mathclass='alphabetic', adobename='u1D5D5', texname='bfsansB' },
+--~ [0x1D5D6] = { mathclass='alphabetic', adobename='u1D5D6', texname='bfsansC' },
+--~ [0x1D5D7] = { mathclass='alphabetic', adobename='u1D5D7', texname='bfsansD' },
+--~ [0x1D5D8] = { mathclass='alphabetic', adobename='u1D5D8', texname='bfsansE' },
+--~ [0x1D5D9] = { mathclass='alphabetic', adobename='u1D5D9', texname='bfsansF' },
+--~ [0x1D5DA] = { mathclass='alphabetic', adobename='u1D5DA', texname='bfsansG' },
+--~ [0x1D5DB] = { mathclass='alphabetic', adobename='u1D5DB', texname='bfsansH' },
+--~ [0x1D5DC] = { mathclass='alphabetic', adobename='u1D5DC', texname='bfsansI' },
+--~ [0x1D5DD] = { mathclass='alphabetic', adobename='u1D5DD', texname='bfsansJ' },
+--~ [0x1D5DE] = { mathclass='alphabetic', adobename='u1D5DE', texname='bfsansK' },
+--~ [0x1D5DF] = { mathclass='alphabetic', adobename='u1D5DF', texname='bfsansL' },
+--~ [0x1D5E0] = { mathclass='alphabetic', adobename='u1D5E0', texname='bfsansM' },
+--~ [0x1D5E1] = { mathclass='alphabetic', adobename='u1D5E1', texname='bfsansN' },
+--~ [0x1D5E2] = { mathclass='alphabetic', adobename='u1D5E2', texname='bfsansO' },
+--~ [0x1D5E3] = { mathclass='alphabetic', adobename='u1D5E3', texname='bfsansP' },
+--~ [0x1D5E4] = { mathclass='alphabetic', adobename='u1D5E4', texname='bfsansQ' },
+--~ [0x1D5E5] = { mathclass='alphabetic', adobename='u1D5E5', texname='bfsansR' },
+--~ [0x1D5E6] = { mathclass='alphabetic', adobename='u1D5E6', texname='bfsansS' },
+--~ [0x1D5E7] = { mathclass='alphabetic', adobename='u1D5E7', texname='bfsansT' },
+--~ [0x1D5E8] = { mathclass='alphabetic', adobename='u1D5E8', texname='bfsansU' },
+--~ [0x1D5E9] = { mathclass='alphabetic', adobename='u1D5E9', texname='bfsansV' },
+--~ [0x1D5EA] = { mathclass='alphabetic', adobename='u1D5EA', texname='bfsansW' },
+--~ [0x1D5EB] = { mathclass='alphabetic', adobename='u1D5EB', texname='bfsansX' },
+--~ [0x1D5EC] = { mathclass='alphabetic', adobename='u1D5EC', texname='bfsansY' },
+--~ [0x1D5ED] = { mathclass='alphabetic', adobename='u1D5ED', texname='bfsansZ' },
+--~ [0x1D5EE] = { mathclass='alphabetic', adobename='u1D5EE', texname='bfsansa' },
+--~ [0x1D5EF] = { mathclass='alphabetic', adobename='u1D5EF', texname='bfsansb' },
+--~ [0x1D5F0] = { mathclass='alphabetic', adobename='u1D5F0', texname='bfsansc' },
+--~ [0x1D5F1] = { mathclass='alphabetic', adobename='u1D5F1', texname='bfsansd' },
+--~ [0x1D5F2] = { mathclass='alphabetic', adobename='u1D5F2', texname='bfsanse' },
+--~ [0x1D5F3] = { mathclass='alphabetic', adobename='u1D5F3', texname='bfsansf' },
+--~ [0x1D5F4] = { mathclass='alphabetic', adobename='u1D5F4', texname='bfsansg' },
+--~ [0x1D5F5] = { mathclass='alphabetic', adobename='u1D5F5', texname='bfsansh' },
+--~ [0x1D5F6] = { mathclass='alphabetic', adobename='u1D5F6', texname='bfsansi' },
+--~ [0x1D5F7] = { mathclass='alphabetic', adobename='u1D5F7', texname='bfsansj' },
+--~ [0x1D5F8] = { mathclass='alphabetic', adobename='u1D5F8', texname='bfsansk' },
+--~ [0x1D5F9] = { mathclass='alphabetic', adobename='u1D5F9', texname='bfsansl' },
+--~ [0x1D5FA] = { mathclass='alphabetic', adobename='u1D5FA', texname='bfsansm' },
+--~ [0x1D5FB] = { mathclass='alphabetic', adobename='u1D5FB', texname='bfsansn' },
+--~ [0x1D5FC] = { mathclass='alphabetic', adobename='u1D5FC', texname='bfsanso' },
+--~ [0x1D5FD] = { mathclass='alphabetic', adobename='u1D5FD', texname='bfsansp' },
+--~ [0x1D5FE] = { mathclass='alphabetic', adobename='u1D5FE', texname='bfsansq' },
+--~ [0x1D5FF] = { mathclass='alphabetic', adobename='u1D5FF', texname='bfsansr' },
+--~ [0x1D600] = { mathclass='alphabetic', adobename='u1D600', texname='bfsanss' },
+--~ [0x1D601] = { mathclass='alphabetic', adobename='u1D601', texname='bfsanst' },
+--~ [0x1D602] = { mathclass='alphabetic', adobename='u1D602', texname='bfsansu' },
+--~ [0x1D603] = { mathclass='alphabetic', adobename='u1D603', texname='bfsansv' },
+--~ [0x1D604] = { mathclass='alphabetic', adobename='u1D604', texname='bfsansw' },
+--~ [0x1D605] = { mathclass='alphabetic', adobename='u1D605', texname='bfsansx' },
+--~ [0x1D606] = { mathclass='alphabetic', adobename='u1D606', texname='bfsansy' },
+--~ [0x1D607] = { mathclass='alphabetic', adobename='u1D607', texname='bfsansz' },
+--~ [0x1D608] = { mathclass='alphabetic', adobename='u1D608', texname='itsansA' },
+--~ [0x1D609] = { mathclass='alphabetic', adobename='u1D609', texname='itsansB' },
+--~ [0x1D60A] = { mathclass='alphabetic', adobename='u1D60A', texname='itsansC' },
+--~ [0x1D60B] = { mathclass='alphabetic', adobename='u1D60B', texname='itsansD' },
+--~ [0x1D60C] = { mathclass='alphabetic', adobename='u1D60C', texname='itsansE' },
+--~ [0x1D60D] = { mathclass='alphabetic', adobename='u1D60D', texname='itsansF' },
+--~ [0x1D60E] = { mathclass='alphabetic', adobename='u1D60E', texname='itsansG' },
+--~ [0x1D60F] = { mathclass='alphabetic', adobename='u1D60F', texname='itsansH' },
+--~ [0x1D610] = { mathclass='alphabetic', adobename='u1D610', texname='itsansI' },
+--~ [0x1D611] = { mathclass='alphabetic', adobename='u1D611', texname='itsansJ' },
+--~ [0x1D612] = { mathclass='alphabetic', adobename='u1D612', texname='itsansK' },
+--~ [0x1D613] = { mathclass='alphabetic', adobename='u1D613', texname='itsansL' },
+--~ [0x1D614] = { mathclass='alphabetic', adobename='u1D614', texname='itsansM' },
+--~ [0x1D615] = { mathclass='alphabetic', adobename='u1D615', texname='itsansN' },
+--~ [0x1D616] = { mathclass='alphabetic', adobename='u1D616', texname='itsansO' },
+--~ [0x1D617] = { mathclass='alphabetic', adobename='u1D617', texname='itsansP' },
+--~ [0x1D618] = { mathclass='alphabetic', adobename='u1D618', texname='itsansQ' },
+--~ [0x1D619] = { mathclass='alphabetic', adobename='u1D619', texname='itsansR' },
+--~ [0x1D61A] = { mathclass='alphabetic', adobename='u1D61A', texname='itsansS' },
+--~ [0x1D61B] = { mathclass='alphabetic', adobename='u1D61B', texname='itsansT' },
+--~ [0x1D61C] = { mathclass='alphabetic', adobename='u1D61C', texname='itsansU' },
+--~ [0x1D61D] = { mathclass='alphabetic', adobename='u1D61D', texname='itsansV' },
+--~ [0x1D61E] = { mathclass='alphabetic', adobename='u1D61E', texname='itsansW' },
+--~ [0x1D61F] = { mathclass='alphabetic', adobename='u1D61F', texname='itsansX' },
+--~ [0x1D620] = { mathclass='alphabetic', adobename='u1D620', texname='itsansY' },
+--~ [0x1D621] = { mathclass='alphabetic', adobename='u1D621', texname='itsansZ' },
+--~ [0x1D622] = { mathclass='alphabetic', adobename='u1D622', texname='itsansa' },
+--~ [0x1D623] = { mathclass='alphabetic', adobename='u1D623', texname='itsansb' },
+--~ [0x1D624] = { mathclass='alphabetic', adobename='u1D624', texname='itsansc' },
+--~ [0x1D625] = { mathclass='alphabetic', adobename='u1D625', texname='itsansd' },
+--~ [0x1D626] = { mathclass='alphabetic', adobename='u1D626', texname='itsanse' },
+--~ [0x1D627] = { mathclass='alphabetic', adobename='u1D627', texname='itsansf' },
+--~ [0x1D628] = { mathclass='alphabetic', adobename='u1D628', texname='itsansg' },
+--~ [0x1D629] = { mathclass='alphabetic', adobename='u1D629', texname='itsansh' },
+--~ [0x1D62A] = { mathclass='alphabetic', adobename='u1D62A', texname='itsansi' },
+--~ [0x1D62B] = { mathclass='alphabetic', adobename='u1D62B', texname='itsansj' },
+--~ [0x1D62C] = { mathclass='alphabetic', adobename='u1D62C', texname='itsansk' },
+--~ [0x1D62D] = { mathclass='alphabetic', adobename='u1D62D', texname='itsansl' },
+--~ [0x1D62E] = { mathclass='alphabetic', adobename='u1D62E', texname='itsansm' },
+--~ [0x1D62F] = { mathclass='alphabetic', adobename='u1D62F', texname='itsansn' },
+--~ [0x1D630] = { mathclass='alphabetic', adobename='u1D630', texname='itsanso' },
+--~ [0x1D631] = { mathclass='alphabetic', adobename='u1D631', texname='itsansp' },
+--~ [0x1D632] = { mathclass='alphabetic', adobename='u1D632', texname='itsansq' },
+--~ [0x1D633] = { mathclass='alphabetic', adobename='u1D633', texname='itsansr' },
+--~ [0x1D634] = { mathclass='alphabetic', adobename='u1D634', texname='itsanss' },
+--~ [0x1D635] = { mathclass='alphabetic', adobename='u1D635', texname='itsanst' },
+--~ [0x1D636] = { mathclass='alphabetic', adobename='u1D636', texname='itsansu' },
+--~ [0x1D637] = { mathclass='alphabetic', adobename='u1D637', texname='itsansv' },
+--~ [0x1D638] = { mathclass='alphabetic', adobename='u1D638', texname='itsansw' },
+--~ [0x1D639] = { mathclass='alphabetic', adobename='u1D639', texname='itsansx' },
+--~ [0x1D63A] = { mathclass='alphabetic', adobename='u1D63A', texname='itsansy' },
+--~ [0x1D63B] = { mathclass='alphabetic', adobename='u1D63B', texname='itsansz' },
+--~ [0x1D63C] = { mathclass='alphabetic', adobename='u1D63C', texname='bfitsansA' },
+--~ [0x1D63D] = { mathclass='alphabetic', adobename='u1D63D', texname='bfitsansB' },
+--~ [0x1D63E] = { mathclass='alphabetic', adobename='u1D63E', texname='bfitsansC' },
+--~ [0x1D63F] = { mathclass='alphabetic', adobename='u1D63F', texname='bfitsansD' },
+--~ [0x1D640] = { mathclass='alphabetic', adobename='u1D640', texname='bfitsansE' },
+--~ [0x1D641] = { mathclass='alphabetic', adobename='u1D641', texname='bfitsansF' },
+--~ [0x1D642] = { mathclass='alphabetic', adobename='u1D642', texname='bfitsansG' },
+--~ [0x1D643] = { mathclass='alphabetic', adobename='u1D643', texname='bfitsansH' },
+--~ [0x1D644] = { mathclass='alphabetic', adobename='u1D644', texname='bfitsansI' },
+--~ [0x1D645] = { mathclass='alphabetic', adobename='u1D645', texname='bfitsansJ' },
+--~ [0x1D646] = { mathclass='alphabetic', adobename='u1D646', texname='bfitsansK' },
+--~ [0x1D647] = { mathclass='alphabetic', adobename='u1D647', texname='bfitsansL' },
+--~ [0x1D648] = { mathclass='alphabetic', adobename='u1D648', texname='bfitsansM' },
+--~ [0x1D649] = { mathclass='alphabetic', adobename='u1D649', texname='bfitsansN' },
+--~ [0x1D64A] = { mathclass='alphabetic', adobename='u1D64A', texname='bfitsansO' },
+--~ [0x1D64B] = { mathclass='alphabetic', adobename='u1D64B', texname='bfitsansP' },
+--~ [0x1D64C] = { mathclass='alphabetic', adobename='u1D64C', texname='bfitsansQ' },
+--~ [0x1D64D] = { mathclass='alphabetic', adobename='u1D64D', texname='bfitsansR' },
+--~ [0x1D64E] = { mathclass='alphabetic', adobename='u1D64E', texname='bfitsansS' },
+--~ [0x1D64F] = { mathclass='alphabetic', adobename='u1D64F', texname='bfitsansT' },
+--~ [0x1D650] = { mathclass='alphabetic', adobename='u1D650', texname='bfitsansU' },
+--~ [0x1D651] = { mathclass='alphabetic', adobename='u1D651', texname='bfitsansV' },
+--~ [0x1D652] = { mathclass='alphabetic', adobename='u1D652', texname='bfitsansW' },
+--~ [0x1D653] = { mathclass='alphabetic', adobename='u1D653', texname='bfitsansX' },
+--~ [0x1D654] = { mathclass='alphabetic', adobename='u1D654', texname='bfitsansY' },
+--~ [0x1D655] = { mathclass='alphabetic', adobename='u1D655', texname='bfitsansZ' },
+--~ [0x1D656] = { mathclass='alphabetic', adobename='u1D656', texname='bfitsansa' },
+--~ [0x1D657] = { mathclass='alphabetic', adobename='u1D657', texname='bfitsansb' },
+--~ [0x1D658] = { mathclass='alphabetic', adobename='u1D658', texname='bfitsansc' },
+--~ [0x1D659] = { mathclass='alphabetic', adobename='u1D659', texname='bfitsansd' },
+--~ [0x1D65A] = { mathclass='alphabetic', adobename='u1D65A', texname='bfitsanse' },
+--~ [0x1D65B] = { mathclass='alphabetic', adobename='u1D65B', texname='bfitsansf' },
+--~ [0x1D65C] = { mathclass='alphabetic', adobename='u1D65C', texname='bfitsansg' },
+--~ [0x1D65D] = { mathclass='alphabetic', adobename='u1D65D', texname='bfitsansh' },
+--~ [0x1D65E] = { mathclass='alphabetic', adobename='u1D65E', texname='bfitsansi' },
+--~ [0x1D65F] = { mathclass='alphabetic', adobename='u1D65F', texname='bfitsansj' },
+--~ [0x1D660] = { mathclass='alphabetic', adobename='u1D660', texname='bfitsansk' },
+--~ [0x1D661] = { mathclass='alphabetic', adobename='u1D661', texname='bfitsansl' },
+--~ [0x1D662] = { mathclass='alphabetic', adobename='u1D662', texname='bfitsansm' },
+--~ [0x1D663] = { mathclass='alphabetic', adobename='u1D663', texname='bfitsansn' },
+--~ [0x1D664] = { mathclass='alphabetic', adobename='u1D664', texname='bfitsanso' },
+--~ [0x1D665] = { mathclass='alphabetic', adobename='u1D665', texname='bfitsansp' },
+--~ [0x1D666] = { mathclass='alphabetic', adobename='u1D666', texname='bfitsansq' },
+--~ [0x1D667] = { mathclass='alphabetic', adobename='u1D667', texname='bfitsansr' },
+--~ [0x1D668] = { mathclass='alphabetic', adobename='u1D668', texname='bfitsanss' },
+--~ [0x1D669] = { mathclass='alphabetic', adobename='u1D669', texname='bfitsanst' },
+--~ [0x1D66A] = { mathclass='alphabetic', adobename='u1D66A', texname='bfitsansu' },
+--~ [0x1D66B] = { mathclass='alphabetic', adobename='u1D66B', texname='bfitsansv' },
+--~ [0x1D66C] = { mathclass='alphabetic', adobename='u1D66C', texname='bfitsansw' },
+--~ [0x1D66D] = { mathclass='alphabetic', adobename='u1D66D', texname='bfitsansx' },
+--~ [0x1D66E] = { mathclass='alphabetic', adobename='u1D66E', texname='bfitsansy' },
+--~ [0x1D66F] = { mathclass='alphabetic', adobename='u1D66F', texname='bfitsansz' },
+--~ [0x1D670] = { mathclass='alphabetic', adobename='u1D670', texname='ttA' },
+--~ [0x1D671] = { mathclass='alphabetic', adobename='u1D671', texname='ttB' },
+--~ [0x1D672] = { mathclass='alphabetic', adobename='u1D672', texname='ttC' },
+--~ [0x1D673] = { mathclass='alphabetic', adobename='u1D673', texname='ttD' },
+--~ [0x1D674] = { mathclass='alphabetic', adobename='u1D674', texname='ttE' },
+--~ [0x1D675] = { mathclass='alphabetic', adobename='u1D675', texname='ttF' },
+--~ [0x1D676] = { mathclass='alphabetic', adobename='u1D676', texname='ttG' },
+--~ [0x1D677] = { mathclass='alphabetic', adobename='u1D677', texname='ttH' },
+--~ [0x1D678] = { mathclass='alphabetic', adobename='u1D678', texname='ttI' },
+--~ [0x1D679] = { mathclass='alphabetic', adobename='u1D679', texname='ttJ' },
+--~ [0x1D67A] = { mathclass='alphabetic', adobename='u1D67A', texname='ttK' },
+--~ [0x1D67B] = { mathclass='alphabetic', adobename='u1D67B', texname='ttL' },
+--~ [0x1D67C] = { mathclass='alphabetic', adobename='u1D67C', texname='ttM' },
+--~ [0x1D67D] = { mathclass='alphabetic', adobename='u1D67D', texname='ttN' },
+--~ [0x1D67E] = { mathclass='alphabetic', adobename='u1D67E', texname='ttO' },
+--~ [0x1D67F] = { mathclass='alphabetic', adobename='u1D67F', texname='ttP' },
+--~ [0x1D680] = { mathclass='alphabetic', adobename='u1D680', texname='ttQ' },
+--~ [0x1D681] = { mathclass='alphabetic', adobename='u1D681', texname='ttR' },
+--~ [0x1D682] = { mathclass='alphabetic', adobename='u1D682', texname='ttS' },
+--~ [0x1D683] = { mathclass='alphabetic', adobename='u1D683', texname='ttT' },
+--~ [0x1D684] = { mathclass='alphabetic', adobename='u1D684', texname='ttU' },
+--~ [0x1D685] = { mathclass='alphabetic', adobename='u1D685', texname='ttV' },
+--~ [0x1D686] = { mathclass='alphabetic', adobename='u1D686', texname='ttW' },
+--~ [0x1D687] = { mathclass='alphabetic', adobename='u1D687', texname='ttX' },
+--~ [0x1D688] = { mathclass='alphabetic', adobename='u1D688', texname='ttY' },
+--~ [0x1D689] = { mathclass='alphabetic', adobename='u1D689', texname='ttZ' },
+--~ [0x1D68A] = { mathclass='alphabetic', adobename='u1D68A', texname='tta' },
+--~ [0x1D68B] = { mathclass='alphabetic', adobename='u1D68B', texname='ttb' },
+--~ [0x1D68C] = { mathclass='alphabetic', adobename='u1D68C', texname='ttc' },
+--~ [0x1D68D] = { mathclass='alphabetic', adobename='u1D68D', texname='ttd' },
+--~ [0x1D68E] = { mathclass='alphabetic', adobename='u1D68E', texname='tte' },
+--~ [0x1D68F] = { mathclass='alphabetic', adobename='u1D68F', texname='ttf' },
+--~ [0x1D690] = { mathclass='alphabetic', adobename='u1D690', texname='ttg' },
+--~ [0x1D691] = { mathclass='alphabetic', adobename='u1D691', texname='tth' },
+--~ [0x1D692] = { mathclass='alphabetic', adobename='u1D692', texname='tti' },
+--~ [0x1D693] = { mathclass='alphabetic', adobename='u1D693', texname='ttj' },
+--~ [0x1D694] = { mathclass='alphabetic', adobename='u1D694', texname='ttk' },
+--~ [0x1D695] = { mathclass='alphabetic', adobename='u1D695', texname='ttl' },
+--~ [0x1D696] = { mathclass='alphabetic', adobename='u1D696', texname='ttm' },
+--~ [0x1D697] = { mathclass='alphabetic', adobename='u1D697', texname='ttn' },
+--~ [0x1D698] = { mathclass='alphabetic', adobename='u1D698', texname='tto' },
+--~ [0x1D699] = { mathclass='alphabetic', adobename='u1D699', texname='ttp' },
+--~ [0x1D69A] = { mathclass='alphabetic', adobename='u1D69A', texname='ttq' },
+--~ [0x1D69B] = { mathclass='alphabetic', adobename='u1D69B', texname='ttr' },
+--~ [0x1D69C] = { mathclass='alphabetic', adobename='u1D69C', texname='tts' },
+--~ [0x1D69D] = { mathclass='alphabetic', adobename='u1D69D', texname='ttt' },
+--~ [0x1D69E] = { mathclass='alphabetic', adobename='u1D69E', texname='ttu' },
+--~ [0x1D69F] = { mathclass='alphabetic', adobename='u1D69F', texname='ttv' },
+--~ [0x1D6A0] = { mathclass='alphabetic', adobename='u1D6A0', texname='ttw' },
+--~ [0x1D6A1] = { mathclass='alphabetic', adobename='u1D6A1', texname='ttx' },
+--~ [0x1D6A2] = { mathclass='alphabetic', adobename='u1D6A2', texname='tty' },
+--~ [0x1D6A3] = { mathclass='alphabetic', adobename='u1D6A3', texname='ttz' },
+--~ [0x1D6A6] = { mathclass='unknown', adobename='u1D6A6' },
+--~ [0x1D6A7] = { mathclass='unknown', adobename='u1D6A7' },
+--~ [0x1D6A8] = { mathclass='alphabetic', adobename='u1D6A8', texname='bfAlpha' },
+--~ [0x1D6A9] = { mathclass='alphabetic', adobename='u1D6A9', texname='bfBeta' },
+--~ [0x1D6AA] = { mathclass='alphabetic', adobename='u1D6AA', texname='bfGamma' },
+--~ [0x1D6AB] = { mathclass='alphabetic', adobename='u1D6AB', texname='bfDelta' },
+--~ [0x1D6AC] = { mathclass='alphabetic', adobename='u1D6AC', texname='bfEpsilon' },
+--~ [0x1D6AD] = { mathclass='alphabetic', adobename='u1D6AD', texname='bfZeta' },
+--~ [0x1D6AE] = { mathclass='alphabetic', adobename='u1D6AE', texname='bfEta' },
+--~ [0x1D6AF] = { mathclass='alphabetic', adobename='u1D6AF', texname='bfTheta' },
+--~ [0x1D6B0] = { mathclass='alphabetic', adobename='u1D6B0', texname='bfIota' },
+--~ [0x1D6B1] = { mathclass='alphabetic', adobename='u1D6B1', texname='bfKappa' },
+--~ [0x1D6B2] = { mathclass='alphabetic', adobename='u1D6B2', texname='bfLambda' },
+--~ [0x1D6B3] = { mathclass='alphabetic', adobename='u1D6B3', texname='bfMu' },
+--~ [0x1D6B4] = { mathclass='alphabetic', adobename='u1D6B4', texname='bfNu' },
+--~ [0x1D6B5] = { mathclass='alphabetic', adobename='u1D6B5', texname='bfXi' },
+--~ [0x1D6B6] = { mathclass='alphabetic', adobename='u1D6B6', texname='bfOmicron' },
+--~ [0x1D6B7] = { mathclass='alphabetic', adobename='u1D6B7', texname='bfPi' },
+--~ [0x1D6B8] = { mathclass='alphabetic', adobename='u1D6B8', texname='bfRho' },
+--~ [0x1D6B9] = { mathclass='alphabetic', adobename='u1D6B9', texname='bfvarTheta' },
+--~ [0x1D6BA] = { mathclass='alphabetic', adobename='u1D6BA', texname='bfSigma' },
+--~ [0x1D6BB] = { mathclass='alphabetic', adobename='u1D6BB', texname='bfTau' },
+--~ [0x1D6BC] = { mathclass='alphabetic', adobename='u1D6BC', texname='bfUpsilon' },
+--~ [0x1D6BD] = { mathclass='alphabetic', adobename='u1D6BD', texname='bfPhi' },
+--~ [0x1D6BE] = { mathclass='alphabetic', adobename='u1D6BE', texname='bfChi' },
+--~ [0x1D6BF] = { mathclass='alphabetic', adobename='u1D6BF', texname='bfPsi' },
+--~ [0x1D6C0] = { mathclass='alphabetic', adobename='u1D6C0', texname='bfOmega' },
+--~ [0x1D6C1] = { mathclass='normal', adobename='u1D6C1', texname='bfnabla' },
+--~ [0x1D6C2] = { mathclass='alphabetic', adobename='u1D6C2', texname='bfalpha' },
+--~ [0x1D6C3] = { mathclass='alphabetic', adobename='u1D6C3', texname='bfbeta' },
+--~ [0x1D6C4] = { mathclass='alphabetic', adobename='u1D6C4', texname='bfgamma' },
+--~ [0x1D6C5] = { mathclass='alphabetic', adobename='u1D6C5', texname='bfdelta' },
+--~ [0x1D6C6] = { mathclass='alphabetic', adobename='u1D6C6', texname='bfvarepsilon' },
+--~ [0x1D6C7] = { mathclass='alphabetic', adobename='u1D6C7', texname='bfzeta' },
+--~ [0x1D6C8] = { mathclass='alphabetic', adobename='u1D6C8', texname='bfeta' },
+--~ [0x1D6C9] = { mathclass='alphabetic', adobename='u1D6C9', texname='bftheta' },
+--~ [0x1D6CA] = { mathclass='alphabetic', adobename='u1D6CA', texname='bfiota' },
+--~ [0x1D6CB] = { mathclass='alphabetic', adobename='u1D6CB', texname='bfkappa' },
+--~ [0x1D6CC] = { mathclass='alphabetic', adobename='u1D6CC', texname='bflambda' },
+--~ [0x1D6CD] = { mathclass='alphabetic', adobename='u1D6CD', texname='bfmu' },
+--~ [0x1D6CE] = { mathclass='alphabetic', adobename='u1D6CE', texname='bfnu' },
+--~ [0x1D6CF] = { mathclass='alphabetic', adobename='u1D6CF', texname='bfxi' },
+--~ [0x1D6D0] = { mathclass='alphabetic', adobename='u1D6D0', texname='bfomicron' },
+--~ [0x1D6D1] = { mathclass='alphabetic', adobename='u1D6D1', texname='bfpi' },
+--~ [0x1D6D2] = { mathclass='alphabetic', adobename='u1D6D2', texname='bfrho' },
+--~ [0x1D6D3] = { mathclass='alphabetic', adobename='u1D6D3', texname='bfvarsigma' },
+--~ [0x1D6D4] = { mathclass='alphabetic', adobename='u1D6D4', texname='bfsigma' },
+--~ [0x1D6D5] = { mathclass='alphabetic', adobename='u1D6D5', texname='bftau' },
+--~ [0x1D6D6] = { mathclass='alphabetic', adobename='u1D6D6', texname='bfupsilon' },
+--~ [0x1D6D7] = { mathclass='alphabetic', adobename='u1D6D7', texname='bfvarphi' },
+--~ [0x1D6D8] = { mathclass='alphabetic', adobename='u1D6D8', texname='bfchi' },
+--~ [0x1D6D9] = { mathclass='alphabetic', adobename='u1D6D9', texname='bfpsi' },
+--~ [0x1D6DA] = { mathclass='alphabetic', adobename='u1D6DA', texname='bfomega' },
+--~ [0x1D6DB] = { mathclass='normal', adobename='u1D6DB', texname='bfpartial' },
+--~ [0x1D6DC] = { mathclass='alphabetic', adobename='u1D6DC', texname='bfepsilon' },
+--~ [0x1D6DD] = { mathclass='alphabetic', adobename='u1D6DD', texname='bfvartheta' },
+--~ [0x1D6DE] = { mathclass='alphabetic', adobename='u1D6DE', texname='bfvarkappa' },
+--~ [0x1D6DF] = { mathclass='alphabetic', adobename='u1D6DF', texname='bfphi' },
+--~ [0x1D6E0] = { mathclass='alphabetic', adobename='u1D6E0', texname='bfvarrho' },
+--~ [0x1D6E1] = { mathclass='alphabetic', adobename='u1D6E1', texname='bfvarpi' },
+--~ [0x1D6E2] = { mathclass='alphabetic', adobename='u1D6E2', texname='itAlpha' },
+--~ [0x1D6E3] = { mathclass='alphabetic', adobename='u1D6E3', texname='itBeta' },
+--~ [0x1D6E4] = { mathclass='alphabetic', adobename='u1D6E4', texname='itGamma' },
+--~ [0x1D6E5] = { mathclass='alphabetic', adobename='u1D6E5', texname='itDelta' },
+--~ [0x1D6E6] = { mathclass='alphabetic', adobename='u1D6E6', texname='itEpsilon' },
+--~ [0x1D6E7] = { mathclass='alphabetic', adobename='u1D6E7', texname='itZeta' },
+--~ [0x1D6E8] = { mathclass='alphabetic', adobename='u1D6E8', texname='itEta' },
+--~ [0x1D6E9] = { mathclass='alphabetic', adobename='u1D6E9', texname='itTheta' },
+--~ [0x1D6EA] = { mathclass='alphabetic', adobename='u1D6EA', texname='itIota' },
+--~ [0x1D6EB] = { mathclass='alphabetic', adobename='u1D6EB', texname='itKappa' },
+--~ [0x1D6EC] = { mathclass='alphabetic', adobename='u1D6EC', texname='itLambda' },
+--~ [0x1D6ED] = { mathclass='alphabetic', adobename='u1D6ED', texname='itMu' },
+--~ [0x1D6EE] = { mathclass='alphabetic', adobename='u1D6EE', texname='itNu' },
+--~ [0x1D6EF] = { mathclass='alphabetic', adobename='u1D6EF', texname='itXi' },
+--~ [0x1D6F0] = { mathclass='alphabetic', adobename='u1D6F0', texname='itOmicron' },
+--~ [0x1D6F1] = { mathclass='alphabetic', adobename='u1D6F1', texname='itPi' },
+--~ [0x1D6F2] = { mathclass='alphabetic', adobename='u1D6F2', texname='itRho' },
+--~ [0x1D6F3] = { mathclass='alphabetic', adobename='u1D6F3', texname='itvarTheta' },
+--~ [0x1D6F4] = { mathclass='alphabetic', adobename='u1D6F4', texname='itSigma' },
+--~ [0x1D6F5] = { mathclass='alphabetic', adobename='u1D6F5', texname='itTau' },
+--~ [0x1D6F6] = { mathclass='alphabetic', adobename='u1D6F6', texname='itUpsilon' },
+--~ [0x1D6F7] = { mathclass='alphabetic', adobename='u1D6F7', texname='itPhi' },
+--~ [0x1D6F8] = { mathclass='alphabetic', adobename='u1D6F8', texname='itChi' },
+--~ [0x1D6F9] = { mathclass='alphabetic', adobename='u1D6F9', texname='itPsi' },
+--~ [0x1D6FA] = { mathclass='alphabetic', adobename='u1D6FA', texname='itOmega' },
+--~ [0x1D6FB] = { mathclass='normal', adobename='u1D6FB', texname='itnabla' },
+--~ [0x1D6FC] = { mathclass='alphabetic', adobename='u1D6FC', texname='italpha' },
+--~ [0x1D6FD] = { mathclass='alphabetic', adobename='u1D6FD', texname='itbeta' },
+--~ [0x1D6FE] = { mathclass='alphabetic', adobename='u1D6FE', texname='itgamma' },
+--~ [0x1D6FF] = { mathclass='alphabetic', adobename='u1D6FF', texname='itdelta' },
+--~ [0x1D700] = { mathclass='alphabetic', adobename='u1D700', texname='itvarepsilon' },
+--~ [0x1D701] = { mathclass='alphabetic', adobename='u1D701', texname='itzeta' },
+--~ [0x1D702] = { mathclass='alphabetic', adobename='u1D702', texname='iteta' },
+--~ [0x1D703] = { mathclass='alphabetic', adobename='u1D703', texname='ittheta' },
+--~ [0x1D704] = { mathclass='alphabetic', adobename='u1D704', texname='itiota' },
+--~ [0x1D705] = { mathclass='alphabetic', adobename='u1D705', texname='itkappa' },
+--~ [0x1D706] = { mathclass='alphabetic', adobename='u1D706', texname='itlambda' },
+--~ [0x1D707] = { mathclass='alphabetic', adobename='u1D707', texname='itmu' },
+--~ [0x1D708] = { mathclass='alphabetic', adobename='u1D708', texname='itnu' },
+--~ [0x1D709] = { mathclass='alphabetic', adobename='u1D709', texname='itxi' },
+--~ [0x1D70A] = { mathclass='alphabetic', adobename='u1D70A', texname='itomicron' },
+--~ [0x1D70B] = { mathclass='alphabetic', adobename='u1D70B', texname='itpi' },
+--~ [0x1D70C] = { mathclass='alphabetic', adobename='u1D70C', texname='itrho' },
+--~ [0x1D70D] = { mathclass='alphabetic', adobename='u1D70D', texname='itvarsigma' },
+--~ [0x1D70E] = { mathclass='alphabetic', adobename='u1D70E', texname='itsigma' },
+--~ [0x1D70F] = { mathclass='alphabetic', adobename='u1D70F', texname='ittau' },
+--~ [0x1D710] = { mathclass='alphabetic', adobename='u1D710', texname='itupsilon' },
+--~ [0x1D711] = { mathclass='alphabetic', adobename='u1D711', texname='itphi' },
+--~ [0x1D712] = { mathclass='alphabetic', adobename='u1D712', texname='itchi' },
+--~ [0x1D713] = { mathclass='alphabetic', adobename='u1D713', texname='itpsi' },
+--~ [0x1D714] = { mathclass='alphabetic', adobename='u1D714', texname='itomega' },
+--~ [0x1D715] = { mathclass='normal', adobename='u1D715', texname='itpartial' },
+--~ [0x1D716] = { mathclass='alphabetic', adobename='u1D716', texname='itepsilon' },
+--~ [0x1D717] = { mathclass='alphabetic', adobename='u1D717', texname='itvartheta' },
+--~ [0x1D718] = { mathclass='alphabetic', adobename='u1D718', texname='itvarkappa' },
+--~ [0x1D719] = { mathclass='alphabetic', adobename='u1D719', texname='itvarphi' },
+--~ [0x1D71A] = { mathclass='alphabetic', adobename='u1D71A', texname='itvarrho' },
+--~ [0x1D71B] = { mathclass='alphabetic', adobename='u1D71B', texname='itvarpi' },
+--~ [0x1D71C] = { mathclass='alphabetic', adobename='u1D71C', texname='bfitAlpha' },
+--~ [0x1D71D] = { mathclass='alphabetic', adobename='u1D71D', texname='bfitBeta' },
+--~ [0x1D71E] = { mathclass='alphabetic', adobename='u1D71E', texname='bfitGamma' },
+--~ [0x1D71F] = { mathclass='alphabetic', adobename='u1D71F', texname='bfitDelta' },
+--~ [0x1D720] = { mathclass='alphabetic', adobename='u1D720', texname='bfitEpsilon' },
+--~ [0x1D721] = { mathclass='alphabetic', adobename='u1D721', texname='bfitZeta' },
+--~ [0x1D722] = { mathclass='alphabetic', adobename='u1D722', texname='bfitEta' },
+--~ [0x1D723] = { mathclass='alphabetic', adobename='u1D723', texname='bfitTheta' },
+--~ [0x1D724] = { mathclass='alphabetic', adobename='u1D724', texname='bfitIota' },
+--~ [0x1D725] = { mathclass='alphabetic', adobename='u1D725', texname='bfitKappa' },
+--~ [0x1D726] = { mathclass='alphabetic', adobename='u1D726', texname='bfitLambda' },
+--~ [0x1D727] = { mathclass='alphabetic', adobename='u1D727', texname='bfitMu' },
+--~ [0x1D728] = { mathclass='alphabetic', adobename='u1D728', texname='bfitNu' },
+--~ [0x1D729] = { mathclass='alphabetic', adobename='u1D729', texname='bfitXi' },
+--~ [0x1D72A] = { mathclass='alphabetic', adobename='u1D72A', texname='bfitOmicron' },
+--~ [0x1D72B] = { mathclass='alphabetic', adobename='u1D72B', texname='bfitPi' },
+--~ [0x1D72C] = { mathclass='alphabetic', adobename='u1D72C', texname='bfitRho' },
+--~ [0x1D72D] = { mathclass='alphabetic', adobename='u1D72D', texname='bfitvarTheta' },
+--~ [0x1D72E] = { mathclass='alphabetic', adobename='u1D72E', texname='bfitSigma' },
+--~ [0x1D72F] = { mathclass='alphabetic', adobename='u1D72F', texname='bfitTau' },
+--~ [0x1D730] = { mathclass='alphabetic', adobename='u1D730', texname='bfitUpsilon' },
+--~ [0x1D731] = { mathclass='alphabetic', adobename='u1D731', texname='bfitPhi' },
+--~ [0x1D732] = { mathclass='alphabetic', adobename='u1D732', texname='bfitChi' },
+--~ [0x1D733] = { mathclass='alphabetic', adobename='u1D733', texname='bfitPsi' },
+--~ [0x1D734] = { mathclass='alphabetic', adobename='u1D734', texname='bfitOmega' },
+--~ [0x1D735] = { mathclass='normal', adobename='u1D735', texname='bfitnabla' },
+--~ [0x1D736] = { mathclass='alphabetic', adobename='u1D736', texname='bfitalpha' },
+--~ [0x1D737] = { mathclass='alphabetic', adobename='u1D737', texname='bfitbeta' },
+--~ [0x1D738] = { mathclass='alphabetic', adobename='u1D738', texname='bfitgamma' },
+--~ [0x1D739] = { mathclass='alphabetic', adobename='u1D739', texname='bfitdelta' },
+--~ [0x1D73A] = { mathclass='alphabetic', adobename='u1D73A', texname='bfitvarepsilon' },
+--~ [0x1D73B] = { mathclass='alphabetic', adobename='u1D73B', texname='bfitzeta' },
+--~ [0x1D73C] = { mathclass='alphabetic', adobename='u1D73C', texname='bfiteta' },
+--~ [0x1D73D] = { mathclass='alphabetic', adobename='u1D73D', texname='bfittheta' },
+--~ [0x1D73E] = { mathclass='alphabetic', adobename='u1D73E', texname='bfitiota' },
+--~ [0x1D73F] = { mathclass='alphabetic', adobename='u1D73F', texname='bfitkappa' },
+--~ [0x1D740] = { mathclass='alphabetic', adobename='u1D740', texname='bfitlambda' },
+--~ [0x1D741] = { mathclass='alphabetic', adobename='u1D741', texname='bfitmu' },
+--~ [0x1D742] = { mathclass='alphabetic', adobename='u1D742', texname='bfitnu' },
+--~ [0x1D743] = { mathclass='alphabetic', adobename='u1D743', texname='bfitxi' },
+--~ [0x1D744] = { mathclass='alphabetic', adobename='u1D744', texname='bfitomicron' },
+--~ [0x1D745] = { mathclass='alphabetic', adobename='u1D745', texname='bfitpi' },
+--~ [0x1D746] = { mathclass='alphabetic', adobename='u1D746', texname='bfitrho' },
+--~ [0x1D747] = { mathclass='alphabetic', adobename='u1D747', texname='bfitvarsigma' },
+--~ [0x1D748] = { mathclass='alphabetic', adobename='u1D748', texname='bfitsigma' },
+--~ [0x1D749] = { mathclass='alphabetic', adobename='u1D749', texname='bfittau' },
+--~ [0x1D74A] = { mathclass='alphabetic', adobename='u1D74A', texname='bfitupsilon' },
+--~ [0x1D74B] = { mathclass='alphabetic', adobename='u1D74B', texname='bfitphi' },
+--~ [0x1D74C] = { mathclass='alphabetic', adobename='u1D74C', texname='bfitchi' },
+--~ [0x1D74D] = { mathclass='alphabetic', adobename='u1D74D', texname='bfitpsi' },
+--~ [0x1D74E] = { mathclass='alphabetic', adobename='u1D74E', texname='bfitomega' },
+--~ [0x1D74F] = { mathclass='normal', adobename='u1D74F', texname='bfitpartial' },
+--~ [0x1D750] = { mathclass='alphabetic', adobename='u1D750', texname='bfitepsilon' },
+--~ [0x1D751] = { mathclass='alphabetic', adobename='u1D751', texname='bfitvartheta' },
+--~ [0x1D752] = { mathclass='alphabetic', adobename='u1D752', texname='bfitvarkappa' },
+--~ [0x1D753] = { mathclass='alphabetic', adobename='u1D753', texname='bfitvarphi' },
+--~ [0x1D754] = { mathclass='alphabetic', adobename='u1D754', texname='bfitvarrho' },
+--~ [0x1D755] = { mathclass='alphabetic', adobename='u1D755', texname='bfitvarpi' },
+--~ [0x1D756] = { mathclass='alphabetic', adobename='u1D756', texname='bfsansAlpha' },
+--~ [0x1D757] = { mathclass='alphabetic', adobename='u1D757', texname='bfsansBeta' },
+--~ [0x1D758] = { mathclass='alphabetic', adobename='u1D758', texname='bfsansGamma' },
+--~ [0x1D759] = { mathclass='alphabetic', adobename='u1D759', texname='bfsansDelta' },
+--~ [0x1D75A] = { mathclass='alphabetic', adobename='u1D75A', texname='bfsansEpsilon' },
+--~ [0x1D75B] = { mathclass='alphabetic', adobename='u1D75B', texname='bfsansZeta' },
+--~ [0x1D75C] = { mathclass='alphabetic', adobename='u1D75C', texname='bfsansEta' },
+--~ [0x1D75D] = { mathclass='alphabetic', adobename='u1D75D', texname='bfsansTheta' },
+--~ [0x1D75E] = { mathclass='alphabetic', adobename='u1D75E', texname='bfsansIota' },
+--~ [0x1D75F] = { mathclass='alphabetic', adobename='u1D75F', texname='bfsansKappa' },
+--~ [0x1D760] = { mathclass='alphabetic', adobename='u1D760', texname='bfsansLambda' },
+--~ [0x1D761] = { mathclass='alphabetic', adobename='u1D761', texname='bfsansMu' },
+--~ [0x1D762] = { mathclass='alphabetic', adobename='u1D762', texname='bfsansNu' },
+--~ [0x1D763] = { mathclass='alphabetic', adobename='u1D763', texname='bfsansXi' },
+--~ [0x1D764] = { mathclass='alphabetic', adobename='u1D764', texname='bfsansOmicron' },
+--~ [0x1D765] = { mathclass='alphabetic', adobename='u1D765', texname='bfsansPi' },
+--~ [0x1D766] = { mathclass='alphabetic', adobename='u1D766', texname='bfsansRho' },
+--~ [0x1D767] = { mathclass='alphabetic', adobename='u1D767', texname='bfsansvarTheta' },
+--~ [0x1D768] = { mathclass='alphabetic', adobename='u1D768', texname='bfsansSigma' },
+--~ [0x1D769] = { mathclass='alphabetic', adobename='u1D769', texname='bfsansTau' },
+--~ [0x1D76A] = { mathclass='alphabetic', adobename='u1D76A', texname='bfsansUpsilon' },
+--~ [0x1D76B] = { mathclass='alphabetic', adobename='u1D76B', texname='bfsansPhi' },
+--~ [0x1D76C] = { mathclass='alphabetic', adobename='u1D76C', texname='bfsansChi' },
+--~ [0x1D76D] = { mathclass='alphabetic', adobename='u1D76D', texname='bfsansPsi' },
+--~ [0x1D76E] = { mathclass='alphabetic', adobename='u1D76E', texname='bfsansOmega' },
+--~ [0x1D76F] = { mathclass='normal', adobename='u1D76F', texname='bfsansnabla' },
+--~ [0x1D770] = { mathclass='alphabetic', adobename='u1D770', texname='bfsansalpha' },
+--~ [0x1D771] = { mathclass='alphabetic', adobename='u1D771', texname='bfsansbeta' },
+--~ [0x1D772] = { mathclass='alphabetic', adobename='u1D772', texname='bfsansgamma' },
+--~ [0x1D773] = { mathclass='alphabetic', adobename='u1D773', texname='bfsansdelta' },
+--~ [0x1D774] = { mathclass='alphabetic', adobename='u1D774', texname='bfsansvarepsilon' },
+--~ [0x1D775] = { mathclass='alphabetic', adobename='u1D775', texname='bfsanszeta' },
+--~ [0x1D776] = { mathclass='alphabetic', adobename='u1D776', texname='bfsanseta' },
+--~ [0x1D777] = { mathclass='alphabetic', adobename='u1D777', texname='bfsanstheta' },
+--~ [0x1D778] = { mathclass='alphabetic', adobename='u1D778', texname='bfsansiota' },
+--~ [0x1D779] = { mathclass='alphabetic', adobename='u1D779', texname='bfsanskappa' },
+--~ [0x1D77A] = { mathclass='alphabetic', adobename='u1D77A', texname='bfsanslambda' },
+--~ [0x1D77B] = { mathclass='alphabetic', adobename='u1D77B', texname='bfsansmu' },
+--~ [0x1D77C] = { mathclass='alphabetic', adobename='u1D77C', texname='bfsansnu' },
+--~ [0x1D77D] = { mathclass='alphabetic', adobename='u1D77D', texname='bfsansxi' },
+--~ [0x1D77E] = { mathclass='alphabetic', adobename='u1D77E', texname='bfsansomicron' },
+--~ [0x1D77F] = { mathclass='alphabetic', adobename='u1D77F', texname='bfsanspi' },
+--~ [0x1D780] = { mathclass='alphabetic', adobename='u1D780', texname='bfsansrho' },
+--~ [0x1D781] = { mathclass='alphabetic', adobename='u1D781', texname='bfsansvarsigma' },
+--~ [0x1D782] = { mathclass='alphabetic', adobename='u1D782', texname='bfsanssigma' },
+--~ [0x1D783] = { mathclass='alphabetic', adobename='u1D783', texname='bfsanstau' },
+--~ [0x1D784] = { mathclass='alphabetic', adobename='u1D784', texname='bfsansupsilon' },
+--~ [0x1D785] = { mathclass='alphabetic', adobename='u1D785', texname='bfsansphi' },
+--~ [0x1D786] = { mathclass='alphabetic', adobename='u1D786', texname='bfsanschi' },
+--~ [0x1D787] = { mathclass='alphabetic', adobename='u1D787', texname='bfsanspsi' },
+--~ [0x1D788] = { mathclass='alphabetic', adobename='u1D788', texname='bfsansomega' },
+--~ [0x1D789] = { mathclass='normal', adobename='u1D789', texname='bfsanspartial' },
+--~ [0x1D78A] = { mathclass='alphabetic', adobename='u1D78A', texname='bfsansepsilon' },
+--~ [0x1D78B] = { mathclass='alphabetic', adobename='u1D78B', texname='bfsansvartheta' },
+--~ [0x1D78C] = { mathclass='alphabetic', adobename='u1D78C', texname='bfsansvarkappa' },
+--~ [0x1D78D] = { mathclass='alphabetic', adobename='u1D78D', texname='bfsansvarphi' },
+--~ [0x1D78E] = { mathclass='alphabetic', adobename='u1D78E', texname='bfsansvarrho' },
+--~ [0x1D78F] = { mathclass='alphabetic', adobename='u1D78F', texname='bfsansvarpi' },
+--~ [0x1D790] = { mathclass='alphabetic', adobename='u1D790', texname='bfitsansAlpha' },
+--~ [0x1D791] = { mathclass='alphabetic', adobename='u1D791', texname='bfitsansBeta' },
+--~ [0x1D792] = { mathclass='alphabetic', adobename='u1D792', texname='bfitsansGamma' },
+--~ [0x1D793] = { mathclass='alphabetic', adobename='u1D793', texname='bfitsansDelta' },
+--~ [0x1D794] = { mathclass='alphabetic', adobename='u1D794', texname='bfitsansEpsilon' },
+--~ [0x1D795] = { mathclass='alphabetic', adobename='u1D795', texname='bfitsansZeta' },
+--~ [0x1D796] = { mathclass='alphabetic', adobename='u1D796', texname='bfitsansEta' },
+--~ [0x1D797] = { mathclass='alphabetic', adobename='u1D797', texname='bfitsansTheta' },
+--~ [0x1D798] = { mathclass='alphabetic', adobename='u1D798', texname='bfitsansIota' },
+--~ [0x1D799] = { mathclass='alphabetic', adobename='u1D799', texname='bfitsansKappa' },
+--~ [0x1D79A] = { mathclass='alphabetic', adobename='u1D79A', texname='bfitsansLambda' },
+--~ [0x1D79B] = { mathclass='alphabetic', adobename='u1D79B', texname='bfitsansMu' },
+--~ [0x1D79C] = { mathclass='alphabetic', adobename='u1D79C', texname='bfitsansNu' },
+--~ [0x1D79D] = { mathclass='alphabetic', adobename='u1D79D', texname='bfitsansXi' },
+--~ [0x1D79E] = { mathclass='alphabetic', adobename='u1D79E', texname='bfitsansOmicron' },
+--~ [0x1D79F] = { mathclass='alphabetic', adobename='u1D79F', texname='bfitsansPi' },
+--~ [0x1D7A0] = { mathclass='alphabetic', adobename='u1D7A0', texname='bfitsansRho' },
+--~ [0x1D7A1] = { mathclass='alphabetic', adobename='u1D7A1', texname='bfitsansvarTheta' },
+--~ [0x1D7A2] = { mathclass='alphabetic', adobename='u1D7A2', texname='bfitsansSigma' },
+--~ [0x1D7A3] = { mathclass='alphabetic', adobename='u1D7A3', texname='bfitsansTau' },
+--~ [0x1D7A4] = { mathclass='alphabetic', adobename='u1D7A4', texname='bfitsansUpsilon' },
+--~ [0x1D7A5] = { mathclass='alphabetic', adobename='u1D7A5', texname='bfitsansPhi' },
+--~ [0x1D7A6] = { mathclass='alphabetic', adobename='u1D7A6', texname='bfitsansChi' },
+--~ [0x1D7A7] = { mathclass='alphabetic', adobename='u1D7A7', texname='bfitsansPsi' },
+--~ [0x1D7A8] = { mathclass='alphabetic', adobename='u1D7A8', texname='bfitsansOmega' },
+--~ [0x1D7A9] = { mathclass='normal', adobename='u1D7A9', texname='bfitsansnabla' },
+--~ [0x1D7AA] = { mathclass='alphabetic', adobename='u1D7AA', texname='bfitsansalpha' },
+--~ [0x1D7AB] = { mathclass='alphabetic', adobename='u1D7AB', texname='bfitsansbeta' },
+--~ [0x1D7AC] = { mathclass='alphabetic', adobename='u1D7AC', texname='bfitsansgamma' },
+--~ [0x1D7AD] = { mathclass='alphabetic', adobename='u1D7AD', texname='bfitsansdelta' },
+--~ [0x1D7AE] = { mathclass='alphabetic', adobename='u1D7AE', texname='bfitsansvarepsilon' },
+--~ [0x1D7AF] = { mathclass='alphabetic', adobename='u1D7AF', texname='bfitsanszeta' },
+--~ [0x1D7B0] = { mathclass='alphabetic', adobename='u1D7B0', texname='bfitsanseta' },
+--~ [0x1D7B1] = { mathclass='alphabetic', adobename='u1D7B1', texname='bfitsanstheta' },
+--~ [0x1D7B2] = { mathclass='alphabetic', adobename='u1D7B2', texname='bfitsansiota' },
+--~ [0x1D7B3] = { mathclass='alphabetic', adobename='u1D7B3', texname='bfitsanskappa' },
+--~ [0x1D7B4] = { mathclass='alphabetic', adobename='u1D7B4', texname='bfitsanslambda' },
+--~ [0x1D7B5] = { mathclass='alphabetic', adobename='u1D7B5', texname='bfitsansmu' },
+--~ [0x1D7B6] = { mathclass='alphabetic', adobename='u1D7B6', texname='bfitsansnu' },
+--~ [0x1D7B7] = { mathclass='alphabetic', adobename='u1D7B7', texname='bfitsansxi' },
+--~ [0x1D7B8] = { mathclass='alphabetic', adobename='u1D7B8', texname='bfitsansomicron' },
+--~ [0x1D7B9] = { mathclass='alphabetic', adobename='u1D7B9', texname='bfitsanspi' },
+--~ [0x1D7BA] = { mathclass='alphabetic', adobename='u1D7BA', texname='bfitsansrho' },
+--~ [0x1D7BB] = { mathclass='alphabetic', adobename='u1D7BB', texname='bfitsansvarsigma' },
+--~ [0x1D7BC] = { mathclass='alphabetic', adobename='u1D7BC', texname='bfitsanssigma' },
+--~ [0x1D7BD] = { mathclass='alphabetic', adobename='u1D7BD', texname='bfitsanstau' },
+--~ [0x1D7BE] = { mathclass='alphabetic', adobename='u1D7BE', texname='bfitsansupsilon' },
+--~ [0x1D7BF] = { mathclass='alphabetic', adobename='u1D7BF', texname='bfitsansphi' },
+--~ [0x1D7C0] = { mathclass='alphabetic', adobename='u1D7C0', texname='bfitsanschi' },
+--~ [0x1D7C1] = { mathclass='alphabetic', adobename='u1D7C1', texname='bfitsanspsi' },
+--~ [0x1D7C2] = { mathclass='alphabetic', adobename='u1D7C2', texname='bfitsansomega' },
+--~ [0x1D7C3] = { mathclass='normal', adobename='u1D7C3', texname='bfitsanspartial' },
+--~ [0x1D7C4] = { mathclass='alphabetic', adobename='u1D7C4', texname='bfitsansepsilon' },
+--~ [0x1D7C5] = { mathclass='alphabetic', adobename='u1D7C5', texname='bfitsansvartheta' },
+--~ [0x1D7C6] = { mathclass='alphabetic', adobename='u1D7C6', texname='bfitsansvarkappa' },
+--~ [0x1D7C7] = { mathclass='alphabetic', adobename='u1D7C7', texname='bfitsansvarphi' },
+--~ [0x1D7C8] = { mathclass='alphabetic', adobename='u1D7C8', texname='bfitsansvarrho' },
+--~ [0x1D7C9] = { mathclass='alphabetic', adobename='u1D7C9', texname='bfitsansvarpi' },
+--~ [0x1D7CA] = { mathclass='alphabetic', adobename='u1D7CA', texname='bfDigamma' },
+--~ [0x1D7CB] = { mathclass='alphabetic', adobename='u1D7CB', texname='bfdigamma' },
+--~ [0x1D7CC] = { mathclass='unknown', adobename='u1D7CC' },
+--~ [0x1D7CD] = { mathclass='unknown', adobename='u1D7CD' },
+--~ [0x1D7CE] = { mathclass='normal', adobename='u1D7CE', texname='bfzero' },
+--~ [0x1D7CF] = { mathclass='normal', adobename='u1D7CF', texname='bfone' },
+--~ [0x1D7D0] = { mathclass='normal', adobename='u1D7D0', texname='bftwo' },
+--~ [0x1D7D1] = { mathclass='normal', adobename='u1D7D1', texname='bfthree' },
+--~ [0x1D7D2] = { mathclass='normal', adobename='u1D7D2', texname='bffour' },
+--~ [0x1D7D3] = { mathclass='normal', adobename='u1D7D3', texname='bffive' },
+--~ [0x1D7D4] = { mathclass='normal', adobename='u1D7D4', texname='bfsix' },
+--~ [0x1D7D5] = { mathclass='normal', adobename='u1D7D5', texname='bfseven' },
+--~ [0x1D7D6] = { mathclass='normal', adobename='u1D7D6', texname='bfeight' },
+--~ [0x1D7D7] = { mathclass='normal', adobename='u1D7D7', texname='bfnine' },
+--~ [0x1D7D8] = { mathclass='normal', adobename='u1D7D8', texname='Bbbzero' },
+--~ [0x1D7D9] = { mathclass='normal', adobename='u1D7D9', texname='Bbbone' },
+--~ [0x1D7DA] = { mathclass='normal', adobename='u1D7DA', texname='Bbbtwo' },
+--~ [0x1D7DB] = { mathclass='normal', adobename='u1D7DB', texname='Bbbthree' },
+--~ [0x1D7DC] = { mathclass='normal', adobename='u1D7DC', texname='Bbbfour' },
+--~ [0x1D7DD] = { mathclass='normal', adobename='u1D7DD', texname='Bbbfive' },
+--~ [0x1D7DE] = { mathclass='normal', adobename='u1D7DE', texname='Bbbsix' },
+--~ [0x1D7DF] = { mathclass='normal', adobename='u1D7DF', texname='Bbbseven' },
+--~ [0x1D7E0] = { mathclass='normal', adobename='u1D7E0', texname='Bbbeight' },
+--~ [0x1D7E1] = { mathclass='normal', adobename='u1D7E1', texname='Bbbnine' },
+--~ [0x1D7E2] = { mathclass='normal', adobename='u1D7E2', texname='sanszero' },
+--~ [0x1D7E3] = { mathclass='normal', adobename='u1D7E3', texname='sansone' },
+--~ [0x1D7E4] = { mathclass='normal', adobename='u1D7E4', texname='sanstwo' },
+--~ [0x1D7E5] = { mathclass='normal', adobename='u1D7E5', texname='sansthree' },
+--~ [0x1D7E6] = { mathclass='normal', adobename='u1D7E6', texname='sansfour' },
+--~ [0x1D7E7] = { mathclass='normal', adobename='u1D7E7', texname='sansfive' },
+--~ [0x1D7E8] = { mathclass='normal', adobename='u1D7E8', texname='sanssix' },
+--~ [0x1D7E9] = { mathclass='normal', adobename='u1D7E9', texname='sansseven' },
+--~ [0x1D7EA] = { mathclass='normal', adobename='u1D7EA', texname='sanseight' },
+--~ [0x1D7EB] = { mathclass='normal', adobename='u1D7EB', texname='sansnine' },
+--~ [0x1D7EC] = { mathclass='normal', adobename='u1D7EC', texname='bfsanszero' },
+--~ [0x1D7ED] = { mathclass='normal', adobename='u1D7ED', texname='bfsansone' },
+--~ [0x1D7EE] = { mathclass='normal', adobename='u1D7EE', texname='bfsanstwo' },
+--~ [0x1D7EF] = { mathclass='normal', adobename='u1D7EF', texname='bfsansthree' },
+--~ [0x1D7F0] = { mathclass='normal', adobename='u1D7F0', texname='bfsansfour' },
+--~ [0x1D7F1] = { mathclass='normal', adobename='u1D7F1', texname='bfsansfive' },
+--~ [0x1D7F2] = { mathclass='normal', adobename='u1D7F2', texname='bfsanssix' },
+--~ [0x1D7F3] = { mathclass='normal', adobename='u1D7F3', texname='bfsansseven' },
+--~ [0x1D7F4] = { mathclass='normal', adobename='u1D7F4', texname='bfsanseight' },
+--~ [0x1D7F5] = { mathclass='normal', adobename='u1D7F5', texname='bfsansnine' },
+--~ [0x1D7F6] = { mathclass='normal', adobename='u1D7F6', texname='ttzero' },
+--~ [0x1D7F7] = { mathclass='normal', adobename='u1D7F7', texname='ttone' },
+--~ [0x1D7F8] = { mathclass='normal', adobename='u1D7F8', texname='tttwo' },
+--~ [0x1D7F9] = { mathclass='normal', adobename='u1D7F9', texname='ttthree' },
+--~ [0x1D7FA] = { mathclass='normal', adobename='u1D7FA', texname='ttfour' },
+--~ [0x1D7FB] = { mathclass='normal', adobename='u1D7FB', texname='ttfive' },
+--~ [0x1D7FC] = { mathclass='normal', adobename='u1D7FC', texname='ttsix' },
+--~ [0x1D7FD] = { mathclass='normal', adobename='u1D7FD', texname='ttseven' },
+--~ [0x1D7FE] = { mathclass='normal', adobename='u1D7FE', texname='tteight' },
+--~ [0x1D7FF] = { mathclass='normal', adobename='u1D7FF', texname='ttnine' },
+--~ [0x0FB00] = { mathclass='alphabetic', adobename='ff' },
+--~ [0x0FB01] = { mathclass='alphabetic', adobename='fi' },
+--~ [0x0FB02] = { mathclass='alphabetic', adobename='fl' },
+--~ [0x0FB03] = { mathclass='alphabetic', adobename='ffi' },
+--~ [0x0FB04] = { mathclass='alphabetic', adobename='ffl' },
+--~ [0x0FE00] = { mathclass='unknown', adobename='uniFE00' },
+--~ [0x0FE35] = { mathclass='unknown', adobename='uni23DC', texname='overparen' },
+--~ [0x0FE36] = { mathclass='unknown', adobename='uni23DD', texname='underparen' },
+--~ [0x0FE37] = { mathclass='unknown', adobename='uni23DE', texname='overbrace' },
+--~ [0x0FE38] = { mathclass='unknown', adobename='uni23DF', texname='underbrace' },
+--~ [0x0FFFD] = { mathclass='unknown', adobename='uniFFFD', texname='unknown' },
+--~ }
diff --git a/Master/texmf-dist/tex/context/base/math-ent.lua b/Master/texmf-dist/tex/context/base/math-ent.lua
new file mode 100644
index 00000000000..7cc45b8a218
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/math-ent.lua
@@ -0,0 +1,2097 @@
+if not modules then modules = { } end modules ['math-ent'] = {
+ version = 1.001,
+ comment = "companion to math-ini.tex",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "derived from the mathml 2.0 specification",
+}
+
+math.entities={
+ ["Aacute"]=0x000C1,
+ ["aacute"]=0x000E1,
+ ["Abreve"]=0x00102,
+ ["abreve"]=0x00103,
+ ["ac"]=0x0223E,
+ ["acd"]=0x0223F,
+ ["acE"]=0x0223E,
+ ["Acirc"]=0x000C2,
+ ["acirc"]=0x000E2,
+ ["acute"]=0x000B4,
+ ["Acy"]=0x00410,
+ ["acy"]=0x00430,
+ ["AElig"]=0x000C6,
+ ["aelig"]=0x000E6,
+ ["af"]=0x02061,
+ ["Afr"]=0x1D504,
+ ["afr"]=0x1D51E,
+ ["Agrave"]=0x000C0,
+ ["agrave"]=0x000E0,
+ ["aleph"]=0x02135,
+ ["alpha"]=0x003B1,
+ ["Amacr"]=0x00100,
+ ["amacr"]=0x00101,
+ ["amalg"]=0x02A3F,
+ ["amp"]=0x00026,
+ ["And"]=0x02A53,
+ ["and"]=0x02227,
+ ["andand"]=0x02A55,
+ ["andd"]=0x02A5C,
+ ["andslope"]=0x02A58,
+ ["andv"]=0x02A5A,
+ ["ang"]=0x02220,
+ ["ange"]=0x029A4,
+ ["angle"]=0x02220,
+ ["angmsd"]=0x02221,
+ ["angmsdaa"]=0x029A8,
+ ["angmsdab"]=0x029A9,
+ ["angmsdac"]=0x029AA,
+ ["angmsdad"]=0x029AB,
+ ["angmsdae"]=0x029AC,
+ ["angmsdaf"]=0x029AD,
+ ["angmsdag"]=0x029AE,
+ ["angmsdah"]=0x029AF,
+ ["angrt"]=0x0221F,
+ ["angrtvb"]=0x022BE,
+ ["angrtvbd"]=0x0299D,
+ ["angsph"]=0x02222,
+ ["angst"]=0x0212B,
+ ["angzarr"]=0x0237C,
+ ["Aogon"]=0x00104,
+ ["aogon"]=0x00105,
+ ["Aopf"]=0x1D538,
+ ["aopf"]=0x1D552,
+ ["ap"]=0x02248,
+ ["apacir"]=0x02A6F,
+ ["apE"]=0x02A70,
+ ["ape"]=0x0224A,
+ ["apid"]=0x0224B,
+ ["apos"]=0x00027,
+ ["ApplyFunction"]=0x02061,
+ ["approx"]=0x02248,
+ ["approxeq"]=0x0224A,
+ ["Aring"]=0x000C5,
+ ["aring"]=0x000E5,
+ ["Ascr"]=0x1D49C,
+ ["ascr"]=0x1D4B6,
+ ["Assign"]=0x02254,
+ ["ast"]=0x0002A,
+ ["asymp"]=0x02248,
+ ["asympeq"]=0x0224D,
+ ["Atilde"]=0x000C3,
+ ["atilde"]=0x000E3,
+ ["Auml"]=0x000C4,
+ ["auml"]=0x000E4,
+ ["awconint"]=0x02233,
+ ["awint"]=0x02A11,
+ ["backcong"]=0x0224C,
+ ["backepsilon"]=0x003F6,
+ ["backprime"]=0x02035,
+ ["backsim"]=0x0223D,
+ ["backsimeq"]=0x022CD,
+ ["Backslash"]=0x02216,
+ ["Barv"]=0x02AE7,
+ ["barvee"]=0x022BD,
+ ["Barwed"]=0x02306,
+ ["barwed"]=0x02305,
+ ["barwedge"]=0x02305,
+ ["bbrk"]=0x023B5,
+ ["bbrktbrk"]=0x023B6,
+ ["bcong"]=0x0224C,
+ ["Bcy"]=0x00411,
+ ["bcy"]=0x00431,
+ ["becaus"]=0x02235,
+ ["Because"]=0x02235,
+ ["because"]=0x02235,
+ ["bemptyv"]=0x029B0,
+ ["bepsi"]=0x003F6,
+ ["bernou"]=0x0212C,
+ ["Bernoullis"]=0x0212C,
+ ["beta"]=0x003B2,
+ ["beth"]=0x02136,
+ ["between"]=0x0226C,
+ ["Bfr"]=0x1D505,
+ ["bfr"]=0x1D51F,
+ ["bigcap"]=0x022C2,
+ ["bigcirc"]=0x025EF,
+ ["bigcup"]=0x022C3,
+ ["bigodot"]=0x02A00,
+ ["bigoplus"]=0x02A01,
+ ["bigotimes"]=0x02A02,
+ ["bigsqcup"]=0x02A06,
+ ["bigstar"]=0x02605,
+ ["bigtriangledown"]=0x025BD,
+ ["bigtriangleup"]=0x025B3,
+ ["biguplus"]=0x02A04,
+ ["bigvee"]=0x022C1,
+ ["bigwedge"]=0x022C0,
+ ["bkarow"]=0x0290D,
+ ["blacklozenge"]=0x029EB,
+ ["blacksquare"]=0x025AA,
+ ["blacktriangle"]=0x025B4,
+ ["blacktriangledown"]=0x025BE,
+ ["blacktriangleleft"]=0x025C2,
+ ["blacktriangleright"]=0x025B8,
+ ["blank"]=0x02423,
+ ["blk12"]=0x02592,
+ ["blk14"]=0x02591,
+ ["blk34"]=0x02593,
+ ["block"]=0x02588,
+ ["bne"]=0x0003D,
+ ["bnequiv"]=0x02261,
+ ["bNot"]=0x02AED,
+ ["bnot"]=0x02310,
+ ["Bopf"]=0x1D539,
+ ["bopf"]=0x1D553,
+ ["bot"]=0x022A5,
+ ["bottom"]=0x022A5,
+ ["bowtie"]=0x022C8,
+ ["boxbox"]=0x029C9,
+ ["boxDL"]=0x02557,
+ ["boxDl"]=0x02556,
+ ["boxdL"]=0x02555,
+ ["boxdl"]=0x02510,
+ ["boxDR"]=0x02554,
+ ["boxDr"]=0x02553,
+ ["boxdR"]=0x02552,
+ ["boxdr"]=0x0250C,
+ ["boxH"]=0x02550,
+ ["boxh"]=0x02500,
+ ["boxHD"]=0x02566,
+ ["boxHd"]=0x02564,
+ ["boxhD"]=0x02565,
+ ["boxhd"]=0x0252C,
+ ["boxHU"]=0x02569,
+ ["boxHu"]=0x02567,
+ ["boxhU"]=0x02568,
+ ["boxhu"]=0x02534,
+ ["boxminus"]=0x0229F,
+ ["boxplus"]=0x0229E,
+ ["boxtimes"]=0x022A0,
+ ["boxUL"]=0x0255D,
+ ["boxUl"]=0x0255C,
+ ["boxuL"]=0x0255B,
+ ["boxul"]=0x02518,
+ ["boxUR"]=0x0255A,
+ ["boxUr"]=0x02559,
+ ["boxuR"]=0x02558,
+ ["boxur"]=0x02514,
+ ["boxV"]=0x02551,
+ ["boxv"]=0x02502,
+ ["boxVH"]=0x0256C,
+ ["boxVh"]=0x0256B,
+ ["boxvH"]=0x0256A,
+ ["boxvh"]=0x0253C,
+ ["boxVL"]=0x02563,
+ ["boxVl"]=0x02562,
+ ["boxvL"]=0x02561,
+ ["boxvl"]=0x02524,
+ ["boxVR"]=0x02560,
+ ["boxVr"]=0x0255F,
+ ["boxvR"]=0x0255E,
+ ["boxvr"]=0x0251C,
+ ["bprime"]=0x02035,
+ ["Breve"]=0x002D8,
+ ["breve"]=0x002D8,
+ ["brvbar"]=0x000A6,
+ ["Bscr"]=0x0212C,
+ ["bscr"]=0x1D4B7,
+ ["bsemi"]=0x0204F,
+ ["bsim"]=0x0223D,
+ ["bsime"]=0x022CD,
+ ["bsol"]=0x0005C,
+ ["bsolb"]=0x029C5,
+ ["bsolhsub"]=0x0005C,
+ ["bull"]=0x02022,
+ ["bullet"]=0x02022,
+ ["bump"]=0x0224E,
+ ["bumpE"]=0x02AAE,
+ ["bumpe"]=0x0224F,
+ ["Bumpeq"]=0x0224E,
+ ["bumpeq"]=0x0224F,
+ ["Cacute"]=0x00106,
+ ["cacute"]=0x00107,
+ ["Cap"]=0x022D2,
+ ["cap"]=0x02229,
+ ["capand"]=0x02A44,
+ ["capbrcup"]=0x02A49,
+ ["capcap"]=0x02A4B,
+ ["capcup"]=0x02A47,
+ ["capdot"]=0x02A40,
+ ["CapitalDifferentialD"]=0x02145,
+ ["caps"]=0x02229,
+ ["caret"]=0x02041,
+ ["caron"]=0x002C7,
+ ["Cayleys"]=0x0212D,
+ ["ccaps"]=0x02A4D,
+ ["Ccaron"]=0x0010C,
+ ["ccaron"]=0x0010D,
+ ["Ccedil"]=0x000C7,
+ ["ccedil"]=0x000E7,
+ ["Ccirc"]=0x00108,
+ ["ccirc"]=0x00109,
+ ["Cconint"]=0x02230,
+ ["ccups"]=0x02A4C,
+ ["ccupssm"]=0x02A50,
+ ["Cdot"]=0x0010A,
+ ["cdot"]=0x0010B,
+ ["cedil"]=0x000B8,
+ ["Cedilla"]=0x000B8,
+ ["cemptyv"]=0x029B2,
+ ["cent"]=0x000A2,
+ ["CenterDot"]=0x000B7,
+ ["centerdot"]=0x000B7,
+ ["Cfr"]=0x0212D,
+ ["cfr"]=0x1D520,
+ ["CHcy"]=0x00427,
+ ["chcy"]=0x00447,
+ ["check"]=0x02713,
+ ["checkmark"]=0x02713,
+ ["chi"]=0x003C7,
+ ["cir"]=0x025CB,
+ ["circ"]=0x002C6,
+ ["circeq"]=0x02257,
+ ["circlearrowleft"]=0x021BA,
+ ["circlearrowright"]=0x021BB,
+ ["circledast"]=0x0229B,
+ ["circledcirc"]=0x0229A,
+ ["circleddash"]=0x0229D,
+ ["CircleDot"]=0x02299,
+ ["circledR"]=0x000AE,
+ ["circledS"]=0x024C8,
+ ["CircleMinus"]=0x02296,
+ ["CirclePlus"]=0x02295,
+ ["CircleTimes"]=0x02297,
+ ["cirE"]=0x029C3,
+ ["cire"]=0x02257,
+ ["cirfnint"]=0x02A10,
+ ["cirmid"]=0x02AEF,
+ ["cirscir"]=0x029C2,
+ ["ClockwiseContourIntegral"]=0x02232,
+ ["CloseCurlyDoubleQuote"]=0x0201D,
+ ["CloseCurlyQuote"]=0x02019,
+ ["clubs"]=0x02663,
+ ["clubsuit"]=0x02663,
+ ["Colon"]=0x02237,
+ ["colon"]=0x0003A,
+ ["Colone"]=0x02A74,
+ ["colone"]=0x02254,
+ ["coloneq"]=0x02254,
+ ["comma"]=0x0002C,
+ ["commat"]=0x00040,
+ ["comp"]=0x02201,
+ ["compfn"]=0x02218,
+ ["complement"]=0x02201,
+ ["complexes"]=0x02102,
+ ["cong"]=0x02245,
+ ["congdot"]=0x02A6D,
+ ["Congruent"]=0x02261,
+ ["Conint"]=0x0222F,
+ ["conint"]=0x0222E,
+ ["ContourIntegral"]=0x0222E,
+ ["Copf"]=0x02102,
+ ["copf"]=0x1D554,
+ ["coprod"]=0x02210,
+ ["Coproduct"]=0x02210,
+ ["copy"]=0x000A9,
+ ["copysr"]=0x02117,
+ ["CounterClockwiseContourIntegral"]=0x02233,
+ ["Cross"]=0x02A2F,
+ ["cross"]=0x02717,
+ ["Cscr"]=0x1D49E,
+ ["cscr"]=0x1D4B8,
+ ["csub"]=0x02ACF,
+ ["csube"]=0x02AD1,
+ ["csup"]=0x02AD0,
+ ["csupe"]=0x02AD2,
+ ["ctdot"]=0x022EF,
+ ["cudarrl"]=0x02938,
+ ["cudarrr"]=0x02935,
+ ["cuepr"]=0x022DE,
+ ["cuesc"]=0x022DF,
+ ["cularr"]=0x021B6,
+ ["cularrp"]=0x0293D,
+ ["Cup"]=0x022D3,
+ ["cup"]=0x0222A,
+ ["cupbrcap"]=0x02A48,
+ ["CupCap"]=0x0224D,
+ ["cupcap"]=0x02A46,
+ ["cupcup"]=0x02A4A,
+ ["cupdot"]=0x0228D,
+ ["cupor"]=0x02A45,
+ ["cups"]=0x0222A,
+ ["curarr"]=0x021B7,
+ ["curarrm"]=0x0293C,
+ ["curlyeqprec"]=0x022DE,
+ ["curlyeqsucc"]=0x022DF,
+ ["curlyvee"]=0x022CE,
+ ["curlywedge"]=0x022CF,
+ ["curren"]=0x000A4,
+ ["curvearrowleft"]=0x021B6,
+ ["curvearrowright"]=0x021B7,
+ ["cuvee"]=0x022CE,
+ ["cuwed"]=0x022CF,
+ ["cwconint"]=0x02232,
+ ["cwint"]=0x02231,
+ ["cylcty"]=0x0232D,
+ ["Dagger"]=0x02021,
+ ["Dagger"]=0x02021,
+ ["dagger"]=0x02020,
+ ["dagger"]=0x02020,
+ ["daleth"]=0x02138,
+ ["Darr"]=0x021A1,
+ ["dArr"]=0x021D3,
+ ["darr"]=0x02193,
+ ["dash"]=0x02010,
+ ["Dashv"]=0x02AE4,
+ ["dashv"]=0x022A3,
+ ["dbkarow"]=0x0290F,
+ ["dblac"]=0x002DD,
+ ["Dcaron"]=0x0010E,
+ ["dcaron"]=0x0010F,
+ ["Dcy"]=0x00414,
+ ["dcy"]=0x00434,
+ ["DD"]=0x02145,
+ ["dd"]=0x02146,
+ ["ddagger"]=0x02021,
+ ["ddarr"]=0x021CA,
+ ["DDotrahd"]=0x02911,
+ ["ddotseq"]=0x02A77,
+ ["deg"]=0x000B0,
+ ["Del"]=0x02207,
+ ["Delta"]=0x00394,
+ ["delta"]=0x003B4,
+ ["demptyv"]=0x029B1,
+ ["dfisht"]=0x0297F,
+ ["Dfr"]=0x1D507,
+ ["dfr"]=0x1D521,
+ ["dHar"]=0x02965,
+ ["dharl"]=0x021C3,
+ ["dharr"]=0x021C2,
+ ["DiacriticalAcute"]=0x000B4,
+ ["DiacriticalDot"]=0x002D9,
+ ["DiacriticalDoubleAcute"]=0x002DD,
+ ["DiacriticalGrave"]=0x00060,
+ ["DiacriticalTilde"]=0x002DC,
+ ["diam"]=0x022C4,
+ ["Diamond"]=0x022C4,
+ ["diamond"]=0x022C4,
+ ["diamondsuit"]=0x02666,
+ ["diams"]=0x02666,
+ ["die"]=0x000A8,
+ ["DifferentialD"]=0x02146,
+ ["digamma"]=0x003DD,
+ ["disin"]=0x022F2,
+ ["div"]=0x000F7,
+ ["divide"]=0x000F7,
+ ["divideontimes"]=0x022C7,
+ ["divonx"]=0x022C7,
+ ["DJcy"]=0x00402,
+ ["djcy"]=0x00452,
+ ["dlcorn"]=0x0231E,
+ ["dlcrop"]=0x0230D,
+ ["dollar"]=0x00024,
+ ["Dopf"]=0x1D53B,
+ ["dopf"]=0x1D555,
+ ["Dot"]=0x000A8,
+ ["dot"]=0x002D9,
+ ["DotDot"]=0x020DC,
+ ["doteq"]=0x02250,
+ ["doteqdot"]=0x02251,
+ ["DotEqual"]=0x02250,
+ ["dotminus"]=0x02238,
+ ["dotplus"]=0x02214,
+ ["dotsquare"]=0x022A1,
+ ["doublebarwedge"]=0x02306,
+ ["DoubleContourIntegral"]=0x0222F,
+ ["DoubleDot"]=0x000A8,
+ ["DoubleDownArrow"]=0x021D3,
+ ["DoubleLeftArrow"]=0x021D0,
+ ["DoubleLeftRightArrow"]=0x021D4,
+ ["DoubleLeftTee"]=0x02AE4,
+ ["DoubleLongLeftArrow"]=0x027F8,
+ ["DoubleLongLeftRightArrow"]=0x027FA,
+ ["DoubleLongRightArrow"]=0x027F9,
+ ["DoubleRightArrow"]=0x021D2,
+ ["DoubleRightTee"]=0x022A8,
+ ["DoubleUpArrow"]=0x021D1,
+ ["DoubleUpDownArrow"]=0x021D5,
+ ["DoubleVerticalBar"]=0x02225,
+ ["DownArrow"]=0x02193,
+ ["Downarrow"]=0x021D3,
+ ["downarrow"]=0x02193,
+ ["DownArrowBar"]=0x02913,
+ ["DownArrowUpArrow"]=0x021F5,
+ ["DownBreve"]=0x00311,
+ ["downdownarrows"]=0x021CA,
+ ["downharpoonleft"]=0x021C3,
+ ["downharpoonright"]=0x021C2,
+ ["DownLeftRightVector"]=0x02950,
+ ["DownLeftTeeVector"]=0x0295E,
+ ["DownLeftVector"]=0x021BD,
+ ["DownLeftVectorBar"]=0x02956,
+ ["DownRightTeeVector"]=0x0295F,
+ ["DownRightVector"]=0x021C1,
+ ["DownRightVectorBar"]=0x02957,
+ ["DownTee"]=0x022A4,
+ ["DownTeeArrow"]=0x021A7,
+ ["drbkarow"]=0x02910,
+ ["drcorn"]=0x0231F,
+ ["drcrop"]=0x0230C,
+ ["Dscr"]=0x1D49F,
+ ["dscr"]=0x1D4B9,
+ ["DScy"]=0x00405,
+ ["dscy"]=0x00455,
+ ["dsol"]=0x029F6,
+ ["Dstrok"]=0x00110,
+ ["dstrok"]=0x00111,
+ ["dtdot"]=0x022F1,
+ ["dtri"]=0x025BF,
+ ["dtrif"]=0x025BE,
+ ["duarr"]=0x021F5,
+ ["duhar"]=0x0296F,
+ ["dwangle"]=0x029A6,
+ ["DZcy"]=0x0040F,
+ ["dzcy"]=0x0045F,
+ ["dzigrarr"]=0x027FF,
+ ["Eacute"]=0x000C9,
+ ["eacute"]=0x000E9,
+ ["easter"]=0x02A6E,
+ ["Ecaron"]=0x0011A,
+ ["ecaron"]=0x0011B,
+ ["ecir"]=0x02256,
+ ["Ecirc"]=0x000CA,
+ ["ecirc"]=0x000EA,
+ ["ecolon"]=0x02255,
+ ["Ecy"]=0x0042D,
+ ["ecy"]=0x0044D,
+ ["eDDot"]=0x02A77,
+ ["Edot"]=0x00116,
+ ["eDot"]=0x02251,
+ ["edot"]=0x00117,
+ ["ee"]=0x02147,
+ ["efDot"]=0x02252,
+ ["Efr"]=0x1D508,
+ ["efr"]=0x1D522,
+ ["eg"]=0x02A9A,
+ ["Egrave"]=0x000C8,
+ ["egrave"]=0x000E8,
+ ["egs"]=0x02A96,
+ ["egsdot"]=0x02A98,
+ ["el"]=0x02A99,
+ ["Element"]=0x02208,
+ ["elinters"]=0x0FFFD,
+ ["ell"]=0x02113,
+ ["els"]=0x02A95,
+ ["elsdot"]=0x02A97,
+ ["Emacr"]=0x00112,
+ ["emacr"]=0x00113,
+ ["empty"]=0x02205,
+ ["emptyset"]=0x02205,
+ ["EmptySmallSquare"]=0x025FB,
+ ["emptyv"]=0x02205,
+ ["EmptyVerySmallSquare"]=0x025AB,
+ ["emsp"]=0x02003,
+ ["emsp13"]=0x02004,
+ ["emsp14"]=0x02005,
+ ["ENG"]=0x0014A,
+ ["eng"]=0x0014B,
+ ["ensp"]=0x02002,
+ ["Eogon"]=0x00118,
+ ["eogon"]=0x00119,
+ ["Eopf"]=0x1D53C,
+ ["eopf"]=0x1D556,
+ ["epar"]=0x022D5,
+ ["eparsl"]=0x029E3,
+ ["eplus"]=0x02A71,
+ ["epsi"]=0x003F5,
+ ["epsiv"]=0x003B5,
+ ["eqcirc"]=0x02256,
+ ["eqcolon"]=0x02255,
+ ["eqsim"]=0x02242,
+ ["eqslantgtr"]=0x02A96,
+ ["eqslantless"]=0x02A95,
+ ["Equal"]=0x02A75,
+ ["equals"]=0x0003D,
+ ["EqualTilde"]=0x02242,
+ ["equest"]=0x0225F,
+ ["Equilibrium"]=0x021CC,
+ ["equiv"]=0x02261,
+ ["equivDD"]=0x02A78,
+ ["eqvparsl"]=0x029E5,
+ ["erarr"]=0x02971,
+ ["erDot"]=0x02253,
+ ["Escr"]=0x02130,
+ ["escr"]=0x0212F,
+ ["esdot"]=0x02250,
+ ["Esim"]=0x02A73,
+ ["esim"]=0x02242,
+ ["eta"]=0x003B7,
+ ["ETH"]=0x000D0,
+ ["eth"]=0x000F0,
+ ["Euml"]=0x000CB,
+ ["euml"]=0x000EB,
+ ["excl"]=0x00021,
+ ["exist"]=0x02203,
+ ["Exists"]=0x02203,
+ ["expectation"]=0x02130,
+ ["ExponentialE"]=0x02147,
+ ["exponentiale"]=0x02147,
+ ["fallingdotseq"]=0x02252,
+ ["Fcy"]=0x00424,
+ ["fcy"]=0x00444,
+ ["female"]=0x02640,
+ ["ffilig"]=0x0FB03,
+ ["fflig"]=0x0FB00,
+ ["ffllig"]=0x0FB04,
+ ["Ffr"]=0x1D509,
+ ["ffr"]=0x1D523,
+ ["filig"]=0x0FB01,
+ ["FilledSmallSquare"]=0x025FC,
+ ["FilledVerySmallSquare"]=0x025AA,
+ ["flat"]=0x0266D,
+ ["fllig"]=0x0FB02,
+ ["fltns"]=0x025B1,
+ ["fnof"]=0x00192,
+ ["Fopf"]=0x1D53D,
+ ["fopf"]=0x1D557,
+ ["ForAll"]=0x02200,
+ ["forall"]=0x02200,
+ ["fork"]=0x022D4,
+ ["forkv"]=0x02AD9,
+ ["Fouriertrf"]=0x02131,
+ ["fpartint"]=0x02A0D,
+ ["frac12"]=0x000BD,
+ ["frac13"]=0x02153,
+ ["frac14"]=0x000BC,
+ ["frac15"]=0x02155,
+ ["frac16"]=0x02159,
+ ["frac18"]=0x0215B,
+ ["frac23"]=0x02154,
+ ["frac25"]=0x02156,
+ ["frac34"]=0x000BE,
+ ["frac35"]=0x02157,
+ ["frac38"]=0x0215C,
+ ["frac45"]=0x02158,
+ ["frac56"]=0x0215A,
+ ["frac58"]=0x0215D,
+ ["frac78"]=0x0215E,
+ ["frown"]=0x02322,
+ ["Fscr"]=0x02131,
+ ["fscr"]=0x1D4BB,
+ ["gacute"]=0x001F5,
+ ["Gamma"]=0x00393,
+ ["gamma"]=0x003B3,
+ ["Gammad"]=0x003DC,
+ ["gammad"]=0x003DD,
+ ["gap"]=0x02A86,
+ ["Gbreve"]=0x0011E,
+ ["gbreve"]=0x0011F,
+ ["Gcedil"]=0x00122,
+ ["Gcirc"]=0x0011C,
+ ["gcirc"]=0x0011D,
+ ["Gcy"]=0x00413,
+ ["gcy"]=0x00433,
+ ["Gdot"]=0x00120,
+ ["gdot"]=0x00121,
+ ["gE"]=0x02267,
+ ["ge"]=0x02265,
+ ["gEl"]=0x02A8C,
+ ["gel"]=0x022DB,
+ ["geq"]=0x02265,
+ ["geqq"]=0x02267,
+ ["geqslant"]=0x02A7E,
+ ["ges"]=0x02A7E,
+ ["gescc"]=0x02AA9,
+ ["gesdot"]=0x02A80,
+ ["gesdoto"]=0x02A82,
+ ["gesdotol"]=0x02A84,
+ ["gesl"]=0x022DB,
+ ["gesles"]=0x02A94,
+ ["Gfr"]=0x1D50A,
+ ["gfr"]=0x1D524,
+ ["Gg"]=0x022D9,
+ ["gg"]=0x0226B,
+ ["ggg"]=0x022D9,
+ ["gimel"]=0x02137,
+ ["GJcy"]=0x00403,
+ ["gjcy"]=0x00453,
+ ["gl"]=0x02277,
+ ["gla"]=0x02AA5,
+ ["glE"]=0x02A92,
+ ["glj"]=0x02AA4,
+ ["gnap"]=0x02A8A,
+ ["gnapprox"]=0x02A8A,
+ ["gnE"]=0x02269,
+ ["gne"]=0x02A88,
+ ["gneq"]=0x02A88,
+ ["gneqq"]=0x02269,
+ ["gnsim"]=0x022E7,
+ ["Gopf"]=0x1D53E,
+ ["gopf"]=0x1D558,
+ ["grave"]=0x00060,
+ ["GreaterEqual"]=0x02265,
+ ["GreaterEqualLess"]=0x022DB,
+ ["GreaterFullEqual"]=0x02267,
+ ["GreaterGreater"]=0x02AA2,
+ ["GreaterLess"]=0x02277,
+ ["GreaterSlantEqual"]=0x02A7E,
+ ["GreaterTilde"]=0x02273,
+ ["Gscr"]=0x1D4A2,
+ ["gscr"]=0x0210A,
+ ["gsim"]=0x02273,
+ ["gsime"]=0x02A8E,
+ ["gsiml"]=0x02A90,
+ ["Gt"]=0x0226B,
+ ["gt"]=0x0003E,
+ ["gtcc"]=0x02AA7,
+ ["gtcir"]=0x02A7A,
+ ["gtdot"]=0x022D7,
+ ["gtlPar"]=0x02995,
+ ["gtquest"]=0x02A7C,
+ ["gtrapprox"]=0x02A86,
+ ["gtrarr"]=0x02978,
+ ["gtrdot"]=0x022D7,
+ ["gtreqless"]=0x022DB,
+ ["gtreqqless"]=0x02A8C,
+ ["gtrless"]=0x02277,
+ ["gtrsim"]=0x02273,
+ ["gvertneqq"]=0x02269,
+ ["gvnE"]=0x02269,
+ ["Hacek"]=0x002C7,
+ ["hairsp"]=0x0200A,
+ ["half"]=0x000BD,
+ ["hamilt"]=0x0210B,
+ ["HARDcy"]=0x0042A,
+ ["hardcy"]=0x0044A,
+ ["hArr"]=0x021D4,
+ ["harr"]=0x02194,
+ ["harrcir"]=0x02948,
+ ["harrw"]=0x021AD,
+ ["Hat"]=0x0005E,
+ ["hbar"]=0x0210F,
+ ["Hcirc"]=0x00124,
+ ["hcirc"]=0x00125,
+ ["hearts"]=0x02665,
+ ["heartsuit"]=0x02665,
+ ["hellip"]=0x02026,
+ ["hercon"]=0x022B9,
+ ["Hfr"]=0x0210C,
+ ["hfr"]=0x1D525,
+ ["HilbertSpace"]=0x0210B,
+ ["hksearow"]=0x02925,
+ ["hkswarow"]=0x02926,
+ ["hoarr"]=0x021FF,
+ ["homtht"]=0x0223B,
+ ["hookleftarrow"]=0x021A9,
+ ["hookrightarrow"]=0x021AA,
+ ["Hopf"]=0x0210D,
+ ["hopf"]=0x1D559,
+ ["horbar"]=0x02015,
+ ["HorizontalLine"]=0x02500,
+ ["Hscr"]=0x0210B,
+ ["hscr"]=0x1D4BD,
+ ["hslash"]=0x0210F,
+ ["Hstrok"]=0x00126,
+ ["hstrok"]=0x00127,
+ ["HumpDownHump"]=0x0224E,
+ ["HumpEqual"]=0x0224F,
+ ["hybull"]=0x02043,
+ ["hyphen"]=0x02010,
+ ["Iacute"]=0x000CD,
+ ["iacute"]=0x000ED,
+ ["ic"]=0x02063,
+ ["Icirc"]=0x000CE,
+ ["icirc"]=0x000EE,
+ ["Icy"]=0x00418,
+ ["icy"]=0x00438,
+ ["Idot"]=0x00130,
+ ["IEcy"]=0x00415,
+ ["iecy"]=0x00435,
+ ["iexcl"]=0x000A1,
+ ["iff"]=0x021D4,
+ ["Ifr"]=0x02111,
+ ["ifr"]=0x1D526,
+ ["Igrave"]=0x000CC,
+ ["igrave"]=0x000EC,
+ ["ii"]=0x02148,
+ ["iiiint"]=0x02A0C,
+ ["iiint"]=0x0222D,
+ ["iinfin"]=0x029DC,
+ ["iiota"]=0x02129,
+ ["IJlig"]=0x00132,
+ ["ijlig"]=0x00133,
+ ["Im"]=0x02111,
+ ["Imacr"]=0x0012A,
+ ["imacr"]=0x0012B,
+ ["image"]=0x02111,
+ ["ImaginaryI"]=0x02148,
+ ["imagline"]=0x02110,
+ ["imagpart"]=0x02111,
+ ["imath"]=0x00131,
+ ["imof"]=0x022B7,
+ ["imped"]=0x001B5,
+ ["Implies"]=0x021D2,
+ ["in"]=0x02208,
+ ["incare"]=0x02105,
+ ["infin"]=0x0221E,
+ ["infintie"]=0x029DD,
+ ["inodot"]=0x00131,
+ ["Int"]=0x0222C,
+ ["int"]=0x0222B,
+ ["intcal"]=0x022BA,
+ ["integers"]=0x02124,
+ ["Integral"]=0x0222B,
+ ["intercal"]=0x022BA,
+ ["Intersection"]=0x022C2,
+ ["intlarhk"]=0x02A17,
+ ["intprod"]=0x02A3C,
+ ["InvisibleComma"]=0x02063,
+ ["InvisibleTimes"]=0x02062,
+ ["IOcy"]=0x00401,
+ ["iocy"]=0x00451,
+ ["Iogon"]=0x0012E,
+ ["iogon"]=0x0012F,
+ ["Iopf"]=0x1D540,
+ ["iopf"]=0x1D55A,
+ ["iota"]=0x003B9,
+ ["iprod"]=0x02A3C,
+ ["iquest"]=0x000BF,
+ ["Iscr"]=0x02110,
+ ["iscr"]=0x1D4BE,
+ ["isin"]=0x02208,
+ ["isindot"]=0x022F5,
+ ["isinE"]=0x022F9,
+ ["isins"]=0x022F4,
+ ["isinsv"]=0x022F3,
+ ["isinv"]=0x02208,
+ ["it"]=0x02062,
+ ["Itilde"]=0x00128,
+ ["itilde"]=0x00129,
+ ["Iukcy"]=0x00406,
+ ["iukcy"]=0x00456,
+ ["Iuml"]=0x000CF,
+ ["iuml"]=0x000EF,
+ ["Jcirc"]=0x00134,
+ ["jcirc"]=0x00135,
+ ["Jcy"]=0x00419,
+ ["jcy"]=0x00439,
+ ["Jfr"]=0x1D50D,
+ ["jfr"]=0x1D527,
+ ["jmath"]=0x0006A,
+ ["Jopf"]=0x1D541,
+ ["jopf"]=0x1D55B,
+ ["Jscr"]=0x1D4A5,
+ ["jscr"]=0x1D4BF,
+ ["Jsercy"]=0x00408,
+ ["jsercy"]=0x00458,
+ ["Jukcy"]=0x00404,
+ ["jukcy"]=0x00454,
+ ["kappa"]=0x003BA,
+ ["kappav"]=0x003F0,
+ ["Kcedil"]=0x00136,
+ ["kcedil"]=0x00137,
+ ["Kcy"]=0x0041A,
+ ["kcy"]=0x0043A,
+ ["Kfr"]=0x1D50E,
+ ["kfr"]=0x1D528,
+ ["kgreen"]=0x00138,
+ ["KHcy"]=0x00425,
+ ["khcy"]=0x00445,
+ ["KJcy"]=0x0040C,
+ ["kjcy"]=0x0045C,
+ ["Kopf"]=0x1D542,
+ ["kopf"]=0x1D55C,
+ ["Kscr"]=0x1D4A6,
+ ["kscr"]=0x1D4C0,
+ ["lAarr"]=0x021DA,
+ ["Lacute"]=0x00139,
+ ["lacute"]=0x0013A,
+ ["laemptyv"]=0x029B4,
+ ["lagran"]=0x02112,
+ ["Lambda"]=0x0039B,
+ ["lambda"]=0x003BB,
+ ["Lang"]=0x0300A,
+ ["lang"]=0x02329,
+ ["langd"]=0x02991,
+ ["langle"]=0x02329,
+ ["lap"]=0x02A85,
+ ["Laplacetrf"]=0x02112,
+ ["laquo"]=0x000AB,
+ ["Larr"]=0x0219E,
+ ["lArr"]=0x021D0,
+ ["larr"]=0x02190,
+ ["larrb"]=0x021E4,
+ ["larrbfs"]=0x0291F,
+ ["larrfs"]=0x0291D,
+ ["larrhk"]=0x021A9,
+ ["larrlp"]=0x021AB,
+ ["larrpl"]=0x02939,
+ ["larrsim"]=0x02973,
+ ["larrtl"]=0x021A2,
+ ["lat"]=0x02AAB,
+ ["lAtail"]=0x0291B,
+ ["latail"]=0x02919,
+ ["late"]=0x02AAD,
+ ["lates"]=0x02AAD,
+ ["lBarr"]=0x0290E,
+ ["lbarr"]=0x0290C,
+ ["lbbrk"]=0x03014,
+ ["lbrace"]=0x0007B,
+ ["lbrack"]=0x0005B,
+ ["lbrke"]=0x0298B,
+ ["lbrksld"]=0x0298F,
+ ["lbrkslu"]=0x0298D,
+ ["Lcaron"]=0x0013D,
+ ["lcaron"]=0x0013E,
+ ["Lcedil"]=0x0013B,
+ ["lcedil"]=0x0013C,
+ ["lceil"]=0x02308,
+ ["lcub"]=0x0007B,
+ ["Lcy"]=0x0041B,
+ ["lcy"]=0x0043B,
+ ["ldca"]=0x02936,
+ ["ldquo"]=0x0201C,
+ ["ldquor"]=0x0201E,
+ ["ldrdhar"]=0x02967,
+ ["ldrushar"]=0x0294B,
+ ["ldsh"]=0x021B2,
+ ["lE"]=0x02266,
+ ["le"]=0x02264,
+ ["LeftAngleBracket"]=0x02329,
+ ["LeftArrow"]=0x02190,
+ ["Leftarrow"]=0x021D0,
+ ["leftarrow"]=0x02190,
+ ["LeftArrowBar"]=0x021E4,
+ ["LeftArrowRightArrow"]=0x021C6,
+ ["leftarrowtail"]=0x021A2,
+ ["LeftCeiling"]=0x02308,
+ ["LeftDoubleBracket"]=0x0301A,
+ ["LeftDownTeeVector"]=0x02961,
+ ["LeftDownVector"]=0x021C3,
+ ["LeftDownVectorBar"]=0x02959,
+ ["LeftFloor"]=0x0230A,
+ ["leftharpoondown"]=0x021BD,
+ ["leftharpoonup"]=0x021BC,
+ ["leftleftarrows"]=0x021C7,
+ ["LeftRightArrow"]=0x02194,
+ ["Leftrightarrow"]=0x021D4,
+ ["leftrightarrow"]=0x02194,
+ ["leftrightarrows"]=0x021C6,
+ ["leftrightharpoons"]=0x021CB,
+ ["leftrightsquigarrow"]=0x021AD,
+ ["LeftRightVector"]=0x0294E,
+ ["LeftTee"]=0x022A3,
+ ["LeftTeeArrow"]=0x021A4,
+ ["LeftTeeVector"]=0x0295A,
+ ["leftthreetimes"]=0x022CB,
+ ["LeftTriangle"]=0x022B2,
+ ["LeftTriangleBar"]=0x029CF,
+ ["LeftTriangleEqual"]=0x022B4,
+ ["LeftUpDownVector"]=0x02951,
+ ["LeftUpTeeVector"]=0x02960,
+ ["LeftUpVector"]=0x021BF,
+ ["LeftUpVectorBar"]=0x02958,
+ ["LeftVector"]=0x021BC,
+ ["LeftVectorBar"]=0x02952,
+ ["lEg"]=0x02A8B,
+ ["leg"]=0x022DA,
+ ["leq"]=0x02264,
+ ["leqq"]=0x02266,
+ ["leqslant"]=0x02A7D,
+ ["les"]=0x02A7D,
+ ["lescc"]=0x02AA8,
+ ["lesdot"]=0x02A7F,
+ ["lesdoto"]=0x02A81,
+ ["lesdotor"]=0x02A83,
+ ["lesg"]=0x022DA,
+ ["lesges"]=0x02A93,
+ ["lessapprox"]=0x02A85,
+ ["lessdot"]=0x022D6,
+ ["lesseqgtr"]=0x022DA,
+ ["lesseqqgtr"]=0x02A8B,
+ ["LessEqualGreater"]=0x022DA,
+ ["LessFullEqual"]=0x02266,
+ ["LessGreater"]=0x02276,
+ ["lessgtr"]=0x02276,
+ ["LessLess"]=0x02AA1,
+ ["lesssim"]=0x02272,
+ ["LessSlantEqual"]=0x02A7D,
+ ["LessTilde"]=0x02272,
+ ["lfisht"]=0x0297C,
+ ["lfloor"]=0x0230A,
+ ["Lfr"]=0x1D50F,
+ ["lfr"]=0x1D529,
+ ["lg"]=0x02276,
+ ["lgE"]=0x02A91,
+ ["lHar"]=0x02962,
+ ["lhard"]=0x021BD,
+ ["lharu"]=0x021BC,
+ ["lharul"]=0x0296A,
+ ["lhblk"]=0x02584,
+ ["LJcy"]=0x00409,
+ ["ljcy"]=0x00459,
+ ["Ll"]=0x022D8,
+ ["ll"]=0x0226A,
+ ["llarr"]=0x021C7,
+ ["llcorner"]=0x0231E,
+ ["Lleftarrow"]=0x021DA,
+ ["llhard"]=0x0296B,
+ ["lltri"]=0x025FA,
+ ["Lmidot"]=0x0013F,
+ ["lmidot"]=0x00140,
+ ["lmoust"]=0x023B0,
+ ["lmoustache"]=0x023B0,
+ ["lnap"]=0x02A89,
+ ["lnapprox"]=0x02A89,
+ ["lnE"]=0x02268,
+ ["lne"]=0x02A87,
+ ["lneq"]=0x02A87,
+ ["lneqq"]=0x02268,
+ ["lnsim"]=0x022E6,
+ ["loang"]=0x03018,
+ ["loarr"]=0x021FD,
+ ["lobrk"]=0x0301A,
+ ["LongLeftArrow"]=0x027F5,
+ ["Longleftarrow"]=0x027F8,
+ ["longleftarrow"]=0x027F5,
+ ["LongLeftRightArrow"]=0x027F7,
+ ["Longleftrightarrow"]=0x027FA,
+ ["longleftrightarrow"]=0x027F7,
+ ["longmapsto"]=0x027FC,
+ ["LongRightArrow"]=0x027F6,
+ ["Longrightarrow"]=0x027F9,
+ ["longrightarrow"]=0x027F6,
+ ["looparrowleft"]=0x021AB,
+ ["looparrowright"]=0x021AC,
+ ["lopar"]=0x02985,
+ ["Lopf"]=0x1D543,
+ ["lopf"]=0x1D55D,
+ ["loplus"]=0x02A2D,
+ ["lotimes"]=0x02A34,
+ ["lowast"]=0x02217,
+ ["lowbar"]=0x0005F,
+ ["LowerLeftArrow"]=0x02199,
+ ["LowerRightArrow"]=0x02198,
+ ["loz"]=0x025CA,
+ ["lozenge"]=0x025CA,
+ ["lozf"]=0x029EB,
+ ["lpar"]=0x00028,
+ ["lparlt"]=0x02993,
+ ["lrarr"]=0x021C6,
+ ["lrcorner"]=0x0231F,
+ ["lrhar"]=0x021CB,
+ ["lrhard"]=0x0296D,
+ ["lrtri"]=0x022BF,
+ ["Lscr"]=0x02112,
+ ["lscr"]=0x1D4C1,
+ ["Lsh"]=0x021B0,
+ ["lsh"]=0x021B0,
+ ["lsim"]=0x02272,
+ ["lsime"]=0x02A8D,
+ ["lsimg"]=0x02A8F,
+ ["lsqb"]=0x0005B,
+ ["lsquo"]=0x02018,
+ ["lsquor"]=0x0201A,
+ ["Lstrok"]=0x00141,
+ ["lstrok"]=0x00142,
+ ["Lt"]=0x0226A,
+ ["lt"]=0x0003C,
+ ["ltcc"]=0x02AA6,
+ ["ltcir"]=0x02A79,
+ ["ltdot"]=0x022D6,
+ ["lthree"]=0x022CB,
+ ["ltimes"]=0x022C9,
+ ["ltlarr"]=0x02976,
+ ["ltquest"]=0x02A7B,
+ ["ltri"]=0x025C3,
+ ["ltrie"]=0x022B4,
+ ["ltrif"]=0x025C2,
+ ["ltrPar"]=0x02996,
+ ["lurdshar"]=0x0294A,
+ ["luruhar"]=0x02966,
+ ["lvertneqq"]=0x02268,
+ ["lvnE"]=0x02268,
+ ["macr"]=0x000AF,
+ ["male"]=0x02642,
+ ["malt"]=0x02720,
+ ["maltese"]=0x02720,
+ ["Map"]=0x02905,
+ ["map"]=0x021A6,
+ ["mapsto"]=0x021A6,
+ ["mapstodown"]=0x021A7,
+ ["mapstoleft"]=0x021A4,
+ ["mapstoup"]=0x021A5,
+ ["marker"]=0x025AE,
+ ["mcomma"]=0x02A29,
+ ["Mcy"]=0x0041C,
+ ["mcy"]=0x0043C,
+ ["mdash"]=0x02014,
+ ["mDDot"]=0x0223A,
+ ["measuredangle"]=0x02221,
+ ["MediumSpace"]=0x0205F,
+ ["Mellintrf"]=0x02133,
+ ["Mfr"]=0x1D510,
+ ["mfr"]=0x1D52A,
+ ["mho"]=0x02127,
+ ["micro"]=0x000B5,
+ ["mid"]=0x02223,
+ ["midast"]=0x0002A,
+ ["midcir"]=0x02AF0,
+ ["middot"]=0x000B7,
+ ["minus"]=0x02212,
+ ["minusb"]=0x0229F,
+ ["minusd"]=0x02238,
+ ["minusdu"]=0x02A2A,
+ ["MinusPlus"]=0x02213,
+ ["mlcp"]=0x02ADB,
+ ["mldr"]=0x02026,
+ ["mnplus"]=0x02213,
+ ["models"]=0x022A7,
+ ["Mopf"]=0x1D544,
+ ["mopf"]=0x1D55E,
+ ["mp"]=0x02213,
+ ["Mscr"]=0x02133,
+ ["mscr"]=0x1D4C2,
+ ["mstpos"]=0x0223E,
+ ["mu"]=0x003BC,
+ ["multimap"]=0x022B8,
+ ["mumap"]=0x022B8,
+ ["nabla"]=0x02207,
+ ["Nacute"]=0x00143,
+ ["nacute"]=0x00144,
+ ["nang"]=0x02220,
+ ["nap"]=0x02249,
+ ["napE"]=0x02A70,
+ ["napid"]=0x0224B,
+ ["napos"]=0x00149,
+ ["napprox"]=0x02249,
+ ["natur"]=0x0266E,
+ ["natural"]=0x0266E,
+ ["naturals"]=0x02115,
+ ["nbsp"]=0x000A0,
+ ["nbump"]=0x0224E,
+ ["nbumpe"]=0x0224F,
+ ["ncap"]=0x02A43,
+ ["Ncaron"]=0x00147,
+ ["ncaron"]=0x00148,
+ ["Ncedil"]=0x00145,
+ ["ncedil"]=0x00146,
+ ["ncong"]=0x02247,
+ ["ncongdot"]=0x02A6D,
+ ["ncup"]=0x02A42,
+ ["Ncy"]=0x0041D,
+ ["ncy"]=0x0043D,
+ ["ndash"]=0x02013,
+ ["ne"]=0x02260,
+ ["nearhk"]=0x02924,
+ ["neArr"]=0x021D7,
+ ["nearr"]=0x02197,
+ ["nearrow"]=0x02197,
+ ["nedot"]=0x02250,
+ ["NegativeMediumSpace"]=0x0200B,
+ ["NegativeThickSpace"]=0x0200B,
+ ["NegativeThinSpace"]=0x0200B,
+ ["NegativeVeryThinSpace"]=0x0200B,
+ ["nequiv"]=0x02262,
+ ["nesear"]=0x02928,
+ ["nesim"]=0x02242,
+ ["NestedGreaterGreater"]=0x0226B,
+ ["NestedLessLess"]=0x0226A,
+ ["NewLine"]=0x0000A,
+ ["nexist"]=0x02204,
+ ["nexists"]=0x02204,
+ ["Nfr"]=0x1D511,
+ ["nfr"]=0x1D52B,
+ ["ngE"]=0x02267,
+ ["nge"]=0x02271,
+ ["ngeq"]=0x02271,
+ ["ngeqq"]=0x02267,
+ ["ngeqslant"]=0x02A7E,
+ ["nges"]=0x02A7E,
+ ["nGg"]=0x022D9,
+ ["ngsim"]=0x02275,
+ ["nGt"]=0x0226B,
+ ["ngt"]=0x0226F,
+ ["ngtr"]=0x0226F,
+ ["nGtv"]=0x0226B,
+ ["nhArr"]=0x021CE,
+ ["nharr"]=0x021AE,
+ ["nhpar"]=0x02AF2,
+ ["ni"]=0x0220B,
+ ["nis"]=0x022FC,
+ ["nisd"]=0x022FA,
+ ["niv"]=0x0220B,
+ ["NJcy"]=0x0040A,
+ ["njcy"]=0x0045A,
+ ["nlArr"]=0x021CD,
+ ["nlarr"]=0x0219A,
+ ["nldr"]=0x02025,
+ ["nlE"]=0x02266,
+ ["nle"]=0x02270,
+ ["nLeftarrow"]=0x021CD,
+ ["nleftarrow"]=0x0219A,
+ ["nLeftrightarrow"]=0x021CE,
+ ["nleftrightarrow"]=0x021AE,
+ ["nleq"]=0x02270,
+ ["nleqq"]=0x02266,
+ ["nleqslant"]=0x02A7D,
+ ["nles"]=0x02A7D,
+ ["nless"]=0x0226E,
+ ["nLl"]=0x022D8,
+ ["nlsim"]=0x02274,
+ ["nLt"]=0x0226A,
+ ["nlt"]=0x0226E,
+ ["nltri"]=0x022EA,
+ ["nltrie"]=0x022EC,
+ ["nLtv"]=0x0226A,
+ ["nmid"]=0x02224,
+ ["NoBreak"]=0x02060,
+ ["NonBreakingSpace"]=0x000A0,
+ ["Nopf"]=0x02115,
+ ["nopf"]=0x1D55F,
+ ["Not"]=0x02AEC,
+ ["not"]=0x000AC,
+ ["NotCongruent"]=0x02262,
+ ["NotCupCap"]=0x0226D,
+ ["NotDoubleVerticalBar"]=0x02226,
+ ["NotElement"]=0x02209,
+ ["NotEqual"]=0x02260,
+ ["NotEqualTilde"]=0x02242,
+ ["NotExists"]=0x02204,
+ ["NotGreater"]=0x0226F,
+ ["NotGreaterEqual"]=0x02271,
+ ["NotGreaterFullEqual"]=0x02266,
+ ["NotGreaterGreater"]=0x0226B,
+ ["NotGreaterLess"]=0x02279,
+ ["NotGreaterSlantEqual"]=0x02A7E,
+ ["NotGreaterTilde"]=0x02275,
+ ["NotHumpDownHump"]=0x0224E,
+ ["NotHumpEqual"]=0x0224F,
+ ["notin"]=0x02209,
+ ["notindot"]=0x022F5,
+ ["notinE"]=0x022F9,
+ ["notinva"]=0x02209,
+ ["notinvb"]=0x022F7,
+ ["notinvc"]=0x022F6,
+ ["NotLeftTriangle"]=0x022EA,
+ ["NotLeftTriangleBar"]=0x029CF,
+ ["NotLeftTriangleEqual"]=0x022EC,
+ ["NotLess"]=0x0226E,
+ ["NotLessEqual"]=0x02270,
+ ["NotLessGreater"]=0x02278,
+ ["NotLessLess"]=0x0226A,
+ ["NotLessSlantEqual"]=0x02A7D,
+ ["NotLessTilde"]=0x02274,
+ ["NotNestedGreaterGreater"]=0x02AA2,
+ ["NotNestedLessLess"]=0x02AA1,
+ ["notni"]=0x0220C,
+ ["notniva"]=0x0220C,
+ ["notnivb"]=0x022FE,
+ ["notnivc"]=0x022FD,
+ ["NotPrecedes"]=0x02280,
+ ["NotPrecedesEqual"]=0x02AAF,
+ ["NotPrecedesSlantEqual"]=0x022E0,
+ ["NotReverseElement"]=0x0220C,
+ ["NotRightTriangle"]=0x022EB,
+ ["NotRightTriangleBar"]=0x029D0,
+ ["NotRightTriangleEqual"]=0x022ED,
+ ["NotSquareSubset"]=0x0228F,
+ ["NotSquareSubsetEqual"]=0x022E2,
+ ["NotSquareSuperset"]=0x02290,
+ ["NotSquareSupersetEqual"]=0x022E3,
+ ["NotSubset"]=0x02282,
+ ["NotSubsetEqual"]=0x02288,
+ ["NotSucceeds"]=0x02281,
+ ["NotSucceedsEqual"]=0x02AB0,
+ ["NotSucceedsSlantEqual"]=0x022E1,
+ ["NotSucceedsTilde"]=0x0227F,
+ ["NotSuperset"]=0x02283,
+ ["NotSupersetEqual"]=0x02289,
+ ["NotTilde"]=0x02241,
+ ["NotTildeEqual"]=0x02244,
+ ["NotTildeFullEqual"]=0x02247,
+ ["NotTildeTilde"]=0x02249,
+ ["NotVerticalBar"]=0x02224,
+ ["npar"]=0x02226,
+ ["nparallel"]=0x02226,
+ ["nparsl"]=0x02AFD,
+ ["npart"]=0x02202,
+ ["npolint"]=0x02A14,
+ ["npr"]=0x02280,
+ ["nprcue"]=0x022E0,
+ ["npre"]=0x02AAF,
+ ["nprec"]=0x02280,
+ ["npreceq"]=0x02AAF,
+ ["nrArr"]=0x021CF,
+ ["nrarr"]=0x0219B,
+ ["nrarrc"]=0x02933,
+ ["nrarrw"]=0x0219D,
+ ["nRightarrow"]=0x021CF,
+ ["nrightarrow"]=0x0219B,
+ ["nrtri"]=0x022EB,
+ ["nrtrie"]=0x022ED,
+ ["nsc"]=0x02281,
+ ["nsccue"]=0x022E1,
+ ["nsce"]=0x02AB0,
+ ["Nscr"]=0x1D4A9,
+ ["nscr"]=0x1D4C3,
+ ["nshortmid"]=0x02224,
+ ["nshortparallel"]=0x02226,
+ ["nsim"]=0x02241,
+ ["nsime"]=0x02244,
+ ["nsimeq"]=0x02244,
+ ["nsmid"]=0x02224,
+ ["nspar"]=0x02226,
+ ["nsqsube"]=0x022E2,
+ ["nsqsupe"]=0x022E3,
+ ["nsub"]=0x02284,
+ ["nsubE"]=0x02AC5,
+ ["nsube"]=0x02288,
+ ["nsubset"]=0x02282,
+ ["nsubseteq"]=0x02288,
+ ["nsubseteqq"]=0x02AC5,
+ ["nsucc"]=0x02281,
+ ["nsucceq"]=0x02AB0,
+ ["nsup"]=0x02285,
+ ["nsupE"]=0x02AC6,
+ ["nsupe"]=0x02289,
+ ["nsupset"]=0x02283,
+ ["nsupseteq"]=0x02289,
+ ["nsupseteqq"]=0x02AC6,
+ ["ntgl"]=0x02279,
+ ["Ntilde"]=0x000D1,
+ ["ntilde"]=0x000F1,
+ ["ntlg"]=0x02278,
+ ["ntriangleleft"]=0x022EA,
+ ["ntrianglelefteq"]=0x022EC,
+ ["ntriangleright"]=0x022EB,
+ ["ntrianglerighteq"]=0x022ED,
+ ["nu"]=0x003BD,
+ ["num"]=0x00023,
+ ["numero"]=0x02116,
+ ["numsp"]=0x02007,
+ ["nvap"]=0x0224D,
+ ["nVDash"]=0x022AF,
+ ["nVdash"]=0x022AE,
+ ["nvDash"]=0x022AD,
+ ["nvdash"]=0x022AC,
+ ["nvge"]=0x02265,
+ ["nvgt"]=0x0003E,
+ ["nvHarr"]=0x02904,
+ ["nvinfin"]=0x029DE,
+ ["nvlArr"]=0x02902,
+ ["nvle"]=0x02264,
+ ["nvlt"]=0x0003C,
+ ["nvltrie"]=0x022B4,
+ ["nvrArr"]=0x02903,
+ ["nvrtrie"]=0x022B5,
+ ["nvsim"]=0x0223C,
+ ["nwarhk"]=0x02923,
+ ["nwArr"]=0x021D6,
+ ["nwarr"]=0x02196,
+ ["nwarrow"]=0x02196,
+ ["nwnear"]=0x02927,
+ ["Oacute"]=0x000D3,
+ ["oacute"]=0x000F3,
+ ["oast"]=0x0229B,
+ ["ocir"]=0x0229A,
+ ["Ocirc"]=0x000D4,
+ ["ocirc"]=0x000F4,
+ ["Ocy"]=0x0041E,
+ ["ocy"]=0x0043E,
+ ["odash"]=0x0229D,
+ ["Odblac"]=0x00150,
+ ["odblac"]=0x00151,
+ ["odiv"]=0x02A38,
+ ["odot"]=0x02299,
+ ["odsold"]=0x029BC,
+ ["OElig"]=0x00152,
+ ["oelig"]=0x00153,
+ ["ofcir"]=0x029BF,
+ ["Ofr"]=0x1D512,
+ ["ofr"]=0x1D52C,
+ ["ogon"]=0x002DB,
+ ["Ograve"]=0x000D2,
+ ["ograve"]=0x000F2,
+ ["ogt"]=0x029C1,
+ ["ohbar"]=0x029B5,
+ ["ohm"]=0x02126,
+ ["oint"]=0x0222E,
+ ["olarr"]=0x021BA,
+ ["olcir"]=0x029BE,
+ ["olcross"]=0x029BB,
+ ["olt"]=0x029C0,
+ ["Omacr"]=0x0014C,
+ ["omacr"]=0x0014D,
+ ["Omega"]=0x003A9,
+ ["omega"]=0x003C9,
+ ["omid"]=0x029B6,
+ ["ominus"]=0x02296,
+ ["Oopf"]=0x1D546,
+ ["oopf"]=0x1D560,
+ ["opar"]=0x029B7,
+ ["OpenCurlyDoubleQuote"]=0x0201C,
+ ["OpenCurlyQuote"]=0x02018,
+ ["operp"]=0x029B9,
+ ["oplus"]=0x02295,
+ ["Or"]=0x02A54,
+ ["or"]=0x02228,
+ ["orarr"]=0x021BB,
+ ["ord"]=0x02A5D,
+ ["order"]=0x02134,
+ ["orderof"]=0x02134,
+ ["ordf"]=0x000AA,
+ ["ordm"]=0x000BA,
+ ["origof"]=0x022B6,
+ ["oror"]=0x02A56,
+ ["orslope"]=0x02A57,
+ ["orv"]=0x02A5B,
+ ["oS"]=0x024C8,
+ ["Oscr"]=0x1D4AA,
+ ["oscr"]=0x02134,
+ ["Oslash"]=0x000D8,
+ ["oslash"]=0x000F8,
+ ["osol"]=0x02298,
+ ["Otilde"]=0x000D5,
+ ["otilde"]=0x000F5,
+ ["Otimes"]=0x02A37,
+ ["otimes"]=0x02297,
+ ["otimesas"]=0x02A36,
+ ["Ouml"]=0x000D6,
+ ["ouml"]=0x000F6,
+ ["ovbar"]=0x0233D,
+ ["OverBar"]=0x000AF,
+ ["OverBrace"]=0x0FE37,
+ ["OverBracket"]=0x023B4,
+ ["OverParenthesis"]=0x0FE35,
+ ["par"]=0x02225,
+ ["para"]=0x000B6,
+ ["parallel"]=0x02225,
+ ["parsim"]=0x02AF3,
+ ["parsl"]=0x02AFD,
+ ["part"]=0x02202,
+ ["PartialD"]=0x02202,
+ ["Pcy"]=0x0041F,
+ ["pcy"]=0x0043F,
+ ["percnt"]=0x00025,
+ ["period"]=0x0002E,
+ ["permil"]=0x02030,
+ ["perp"]=0x022A5,
+ ["pertenk"]=0x02031,
+ ["Pfr"]=0x1D513,
+ ["pfr"]=0x1D52D,
+ ["Phi"]=0x003A6,
+ ["phi"]=0x003D5,
+ ["phiv"]=0x003C6,
+ ["phmmat"]=0x02133,
+ ["phone"]=0x0260E,
+ ["Pi"]=0x003A0,
+ ["pi"]=0x003C0,
+ ["pitchfork"]=0x022D4,
+ ["piv"]=0x003D6,
+ ["planck"]=0x0210F,
+ ["planckh"]=0x0210E,
+ ["plankv"]=0x0210F,
+ ["plus"]=0x0002B,
+ ["plusacir"]=0x02A23,
+ ["plusb"]=0x0229E,
+ ["pluscir"]=0x02A22,
+ ["plusdo"]=0x02214,
+ ["plusdu"]=0x02A25,
+ ["pluse"]=0x02A72,
+ ["PlusMinus"]=0x000B1,
+ ["plusmn"]=0x000B1,
+ ["plussim"]=0x02A26,
+ ["plustwo"]=0x02A27,
+ ["pm"]=0x000B1,
+ ["Poincareplane"]=0x0210C,
+ ["pointint"]=0x02A15,
+ ["Popf"]=0x02119,
+ ["popf"]=0x1D561,
+ ["pound"]=0x000A3,
+ ["Pr"]=0x02ABB,
+ ["pr"]=0x0227A,
+ ["prap"]=0x02AB7,
+ ["prcue"]=0x0227C,
+ ["prE"]=0x02AB3,
+ ["pre"]=0x02AAF,
+ ["prec"]=0x0227A,
+ ["precapprox"]=0x02AB7,
+ ["preccurlyeq"]=0x0227C,
+ ["Precedes"]=0x0227A,
+ ["PrecedesEqual"]=0x02AAF,
+ ["PrecedesSlantEqual"]=0x0227C,
+ ["PrecedesTilde"]=0x0227E,
+ ["preceq"]=0x02AAF,
+ ["precnapprox"]=0x02AB9,
+ ["precneqq"]=0x02AB5,
+ ["precnsim"]=0x022E8,
+ ["precsim"]=0x0227E,
+ ["Prime"]=0x02033,
+ ["prime"]=0x02032,
+ ["primes"]=0x02119,
+ ["prnap"]=0x02AB9,
+ ["prnE"]=0x02AB5,
+ ["prnsim"]=0x022E8,
+ ["prod"]=0x0220F,
+ ["Product"]=0x0220F,
+ ["profalar"]=0x0232E,
+ ["profline"]=0x02312,
+ ["profsurf"]=0x02313,
+ ["prop"]=0x0221D,
+ ["Proportion"]=0x02237,
+ ["Proportional"]=0x0221D,
+ ["propto"]=0x0221D,
+ ["prsim"]=0x0227E,
+ ["prurel"]=0x022B0,
+ ["Pscr"]=0x1D4AB,
+ ["pscr"]=0x1D4C5,
+ ["Psi"]=0x003A8,
+ ["psi"]=0x003C8,
+ ["puncsp"]=0x02008,
+ ["Qfr"]=0x1D514,
+ ["qfr"]=0x1D52E,
+ ["qint"]=0x02A0C,
+ ["Qopf"]=0x0211A,
+ ["qopf"]=0x1D562,
+ ["qprime"]=0x02057,
+ ["Qscr"]=0x1D4AC,
+ ["qscr"]=0x1D4C6,
+ ["quaternions"]=0x0210D,
+ ["quatint"]=0x02A16,
+ ["quest"]=0x0003F,
+ ["questeq"]=0x0225F,
+ ["quot"]=0x00022,
+ ["rAarr"]=0x021DB,
+ ["race"]=0x029DA,
+ ["Racute"]=0x00154,
+ ["racute"]=0x00155,
+ ["radic"]=0x0221A,
+ ["raemptyv"]=0x029B3,
+ ["Rang"]=0x0300B,
+ ["rang"]=0x0232A,
+ ["rangd"]=0x02992,
+ ["range"]=0x029A5,
+ ["rangle"]=0x0232A,
+ ["raquo"]=0x000BB,
+ ["Rarr"]=0x021A0,
+ ["rArr"]=0x021D2,
+ ["rarr"]=0x02192,
+ ["rarrap"]=0x02975,
+ ["rarrb"]=0x021E5,
+ ["rarrbfs"]=0x02920,
+ ["rarrc"]=0x02933,
+ ["rarrfs"]=0x0291E,
+ ["rarrhk"]=0x021AA,
+ ["rarrlp"]=0x021AC,
+ ["rarrpl"]=0x02945,
+ ["rarrsim"]=0x02974,
+ ["Rarrtl"]=0x02916,
+ ["rarrtl"]=0x021A3,
+ ["rarrw"]=0x0219D,
+ ["rAtail"]=0x0291C,
+ ["ratail"]=0x0291A,
+ ["ratio"]=0x02236,
+ ["rationals"]=0x0211A,
+ ["RBarr"]=0x02910,
+ ["rBarr"]=0x0290F,
+ ["rbarr"]=0x0290D,
+ ["rbbrk"]=0x03015,
+ ["rbrace"]=0x0007D,
+ ["rbrack"]=0x0005D,
+ ["rbrke"]=0x0298C,
+ ["rbrksld"]=0x0298E,
+ ["rbrkslu"]=0x02990,
+ ["Rcaron"]=0x00158,
+ ["rcaron"]=0x00159,
+ ["Rcedil"]=0x00156,
+ ["rcedil"]=0x00157,
+ ["rceil"]=0x02309,
+ ["rcub"]=0x0007D,
+ ["Rcy"]=0x00420,
+ ["rcy"]=0x00440,
+ ["rdca"]=0x02937,
+ ["rdldhar"]=0x02969,
+ ["rdquo"]=0x0201D,
+ ["rdquor"]=0x0201D,
+ ["rdsh"]=0x021B3,
+ ["Re"]=0x0211C,
+ ["real"]=0x0211C,
+ ["realine"]=0x0211B,
+ ["realpart"]=0x0211C,
+ ["reals"]=0x0211D,
+ ["rect"]=0x025AD,
+ ["reg"]=0x000AE,
+ ["ReverseElement"]=0x0220B,
+ ["ReverseEquilibrium"]=0x021CB,
+ ["ReverseUpEquilibrium"]=0x0296F,
+ ["rfisht"]=0x0297D,
+ ["rfloor"]=0x0230B,
+ ["Rfr"]=0x0211C,
+ ["rfr"]=0x1D52F,
+ ["rHar"]=0x02964,
+ ["rhard"]=0x021C1,
+ ["rharu"]=0x021C0,
+ ["rharul"]=0x0296C,
+ ["rho"]=0x003C1,
+ ["rhov"]=0x003F1,
+ ["RightAngleBracket"]=0x0232A,
+ ["RightArrow"]=0x02192,
+ ["Rightarrow"]=0x021D2,
+ ["rightarrow"]=0x02192,
+ ["RightArrowBar"]=0x021E5,
+ ["RightArrowLeftArrow"]=0x021C4,
+ ["rightarrowtail"]=0x021A3,
+ ["RightCeiling"]=0x02309,
+ ["RightDoubleBracket"]=0x0301B,
+ ["RightDownTeeVector"]=0x0295D,
+ ["RightDownVector"]=0x021C2,
+ ["RightDownVectorBar"]=0x02955,
+ ["RightFloor"]=0x0230B,
+ ["rightharpoondown"]=0x021C1,
+ ["rightharpoonup"]=0x021C0,
+ ["rightleftarrows"]=0x021C4,
+ ["rightleftharpoons"]=0x021CC,
+ ["rightrightarrows"]=0x021C9,
+ ["rightsquigarrow"]=0x0219D,
+ ["RightTee"]=0x022A2,
+ ["RightTeeArrow"]=0x021A6,
+ ["RightTeeVector"]=0x0295B,
+ ["rightthreetimes"]=0x022CC,
+ ["RightTriangle"]=0x022B3,
+ ["RightTriangleBar"]=0x029D0,
+ ["RightTriangleEqual"]=0x022B5,
+ ["RightUpDownVector"]=0x0294F,
+ ["RightUpTeeVector"]=0x0295C,
+ ["RightUpVector"]=0x021BE,
+ ["RightUpVectorBar"]=0x02954,
+ ["RightVector"]=0x021C0,
+ ["RightVectorBar"]=0x02953,
+ ["ring"]=0x002DA,
+ ["risingdotseq"]=0x02253,
+ ["rlarr"]=0x021C4,
+ ["rlhar"]=0x021CC,
+ ["rmoust"]=0x023B1,
+ ["rmoustache"]=0x023B1,
+ ["rnmid"]=0x02AEE,
+ ["roang"]=0x03019,
+ ["roarr"]=0x021FE,
+ ["robrk"]=0x0301B,
+ ["ropar"]=0x02986,
+ ["Ropf"]=0x0211D,
+ ["ropf"]=0x1D563,
+ ["roplus"]=0x02A2E,
+ ["rotimes"]=0x02A35,
+ ["RoundImplies"]=0x02970,
+ ["rpar"]=0x00029,
+ ["rpargt"]=0x02994,
+ ["rppolint"]=0x02A12,
+ ["rrarr"]=0x021C9,
+ ["Rrightarrow"]=0x021DB,
+ ["Rscr"]=0x0211B,
+ ["rscr"]=0x1D4C7,
+ ["Rsh"]=0x021B1,
+ ["rsh"]=0x021B1,
+ ["rsqb"]=0x0005D,
+ ["rsquo"]=0x02019,
+ ["rsquor"]=0x02019,
+ ["rthree"]=0x022CC,
+ ["rtimes"]=0x022CA,
+ ["rtri"]=0x025B9,
+ ["rtrie"]=0x022B5,
+ ["rtrif"]=0x025B8,
+ ["rtriltri"]=0x029CE,
+ ["RuleDelayed"]=0x029F4,
+ ["ruluhar"]=0x02968,
+ ["rx"]=0x0211E,
+ ["Sacute"]=0x0015A,
+ ["sacute"]=0x0015B,
+ ["Sc"]=0x02ABC,
+ ["sc"]=0x0227B,
+ ["scap"]=0x02AB8,
+ ["Scaron"]=0x00160,
+ ["scaron"]=0x00161,
+ ["sccue"]=0x0227D,
+ ["scE"]=0x02AB4,
+ ["sce"]=0x02AB0,
+ ["Scedil"]=0x0015E,
+ ["scedil"]=0x0015F,
+ ["Scirc"]=0x0015C,
+ ["scirc"]=0x0015D,
+ ["scnap"]=0x02ABA,
+ ["scnE"]=0x02AB6,
+ ["scnsim"]=0x022E9,
+ ["scpolint"]=0x02A13,
+ ["scsim"]=0x0227F,
+ ["Scy"]=0x00421,
+ ["scy"]=0x00441,
+ ["sdot"]=0x022C5,
+ ["sdotb"]=0x022A1,
+ ["sdote"]=0x02A66,
+ ["searhk"]=0x02925,
+ ["seArr"]=0x021D8,
+ ["searr"]=0x02198,
+ ["searrow"]=0x02198,
+ ["sect"]=0x000A7,
+ ["semi"]=0x0003B,
+ ["seswar"]=0x02929,
+ ["setminus"]=0x02216,
+ ["setmn"]=0x02216,
+ ["sext"]=0x02736,
+ ["Sfr"]=0x1D516,
+ ["sfr"]=0x1D530,
+ ["sfrown"]=0x02322,
+ ["sharp"]=0x0266F,
+ ["SHCHcy"]=0x00429,
+ ["shchcy"]=0x00449,
+ ["SHcy"]=0x00428,
+ ["shcy"]=0x00448,
+ ["ShortDownArrow"]=0x02193,
+ ["ShortLeftArrow"]=0x02190,
+ ["shortmid"]=0x02223,
+ ["shortparallel"]=0x02225,
+ ["ShortRightArrow"]=0x02192,
+ ["ShortUpArrow"]=0x02191,
+ ["shy"]=0x000AD,
+ ["Sigma"]=0x003A3,
+ ["sigma"]=0x003C3,
+ ["sigmav"]=0x003C2,
+ ["sim"]=0x0223C,
+ ["simdot"]=0x02A6A,
+ ["sime"]=0x02243,
+ ["simeq"]=0x02243,
+ ["simg"]=0x02A9E,
+ ["simgE"]=0x02AA0,
+ ["siml"]=0x02A9D,
+ ["simlE"]=0x02A9F,
+ ["simne"]=0x02246,
+ ["simplus"]=0x02A24,
+ ["simrarr"]=0x02972,
+ ["slarr"]=0x02190,
+ ["SmallCircle"]=0x02218,
+ ["smallsetminus"]=0x02216,
+ ["smashp"]=0x02A33,
+ ["smeparsl"]=0x029E4,
+ ["smid"]=0x02223,
+ ["smile"]=0x02323,
+ ["smt"]=0x02AAA,
+ ["smte"]=0x02AAC,
+ ["smtes"]=0x02AAC,
+ ["SOFTcy"]=0x0042C,
+ ["softcy"]=0x0044C,
+ ["sol"]=0x0002F,
+ ["solb"]=0x029C4,
+ ["solbar"]=0x0233F,
+ ["Sopf"]=0x1D54A,
+ ["sopf"]=0x1D564,
+ ["spades"]=0x02660,
+ ["spadesuit"]=0x02660,
+ ["spar"]=0x02225,
+ ["sqcap"]=0x02293,
+ ["sqcaps"]=0x02293,
+ ["sqcup"]=0x02294,
+ ["sqcups"]=0x02294,
+ ["Sqrt"]=0x0221A,
+ ["sqsub"]=0x0228F,
+ ["sqsube"]=0x02291,
+ ["sqsubset"]=0x0228F,
+ ["sqsubseteq"]=0x02291,
+ ["sqsup"]=0x02290,
+ ["sqsupe"]=0x02292,
+ ["sqsupset"]=0x02290,
+ ["sqsupseteq"]=0x02292,
+ ["squ"]=0x025A1,
+ ["Square"]=0x025A1,
+ ["square"]=0x025A1,
+ ["SquareIntersection"]=0x02293,
+ ["SquareSubset"]=0x0228F,
+ ["SquareSubsetEqual"]=0x02291,
+ ["SquareSuperset"]=0x02290,
+ ["SquareSupersetEqual"]=0x02292,
+ ["SquareUnion"]=0x02294,
+ ["squarf"]=0x025AA,
+ ["squf"]=0x025AA,
+ ["srarr"]=0x02192,
+ ["Sscr"]=0x1D4AE,
+ ["sscr"]=0x1D4C8,
+ ["ssetmn"]=0x02216,
+ ["ssmile"]=0x02323,
+ ["sstarf"]=0x022C6,
+ ["Star"]=0x022C6,
+ ["star"]=0x02606,
+ ["starf"]=0x02605,
+ ["straightepsilon"]=0x003F5,
+ ["straightphi"]=0x003D5,
+ ["strns"]=0x000AF,
+ ["Sub"]=0x022D0,
+ ["sub"]=0x02282,
+ ["subdot"]=0x02ABD,
+ ["subE"]=0x02AC5,
+ ["sube"]=0x02286,
+ ["subedot"]=0x02AC3,
+ ["submult"]=0x02AC1,
+ ["subnE"]=0x02ACB,
+ ["subne"]=0x0228A,
+ ["subplus"]=0x02ABF,
+ ["subrarr"]=0x02979,
+ ["Subset"]=0x022D0,
+ ["subset"]=0x02282,
+ ["subseteq"]=0x02286,
+ ["subseteqq"]=0x02AC5,
+ ["SubsetEqual"]=0x02286,
+ ["subsetneq"]=0x0228A,
+ ["subsetneqq"]=0x02ACB,
+ ["subsim"]=0x02AC7,
+ ["subsub"]=0x02AD5,
+ ["subsup"]=0x02AD3,
+ ["succ"]=0x0227B,
+ ["succapprox"]=0x02AB8,
+ ["succcurlyeq"]=0x0227D,
+ ["Succeeds"]=0x0227B,
+ ["SucceedsEqual"]=0x02AB0,
+ ["SucceedsSlantEqual"]=0x0227D,
+ ["SucceedsTilde"]=0x0227F,
+ ["succeq"]=0x02AB0,
+ ["succnapprox"]=0x02ABA,
+ ["succneqq"]=0x02AB6,
+ ["succnsim"]=0x022E9,
+ ["succsim"]=0x0227F,
+ ["SuchThat"]=0x0220B,
+ ["Sum"]=0x02211,
+ ["sum"]=0x02211,
+ ["sung"]=0x0266A,
+ ["Sup"]=0x022D1,
+ ["sup"]=0x02283,
+ ["sup1"]=0x000B9,
+ ["sup2"]=0x000B2,
+ ["sup3"]=0x000B3,
+ ["supdot"]=0x02ABE,
+ ["supdsub"]=0x02AD8,
+ ["supE"]=0x02AC6,
+ ["supe"]=0x02287,
+ ["supedot"]=0x02AC4,
+ ["Superset"]=0x02283,
+ ["SupersetEqual"]=0x02287,
+ ["suphsol"]=0x02283,
+ ["suphsub"]=0x02AD7,
+ ["suplarr"]=0x0297B,
+ ["supmult"]=0x02AC2,
+ ["supnE"]=0x02ACC,
+ ["supne"]=0x0228B,
+ ["supplus"]=0x02AC0,
+ ["Supset"]=0x022D1,
+ ["supset"]=0x02283,
+ ["supseteq"]=0x02287,
+ ["supseteqq"]=0x02AC6,
+ ["supsetneq"]=0x0228B,
+ ["supsetneqq"]=0x02ACC,
+ ["supsim"]=0x02AC8,
+ ["supsub"]=0x02AD4,
+ ["supsup"]=0x02AD6,
+ ["swarhk"]=0x02926,
+ ["swArr"]=0x021D9,
+ ["swarr"]=0x02199,
+ ["swarrow"]=0x02199,
+ ["swnwar"]=0x0292A,
+ ["szlig"]=0x000DF,
+ ["Tab"]=0x00009,
+ ["target"]=0x02316,
+ ["tau"]=0x003C4,
+ ["tbrk"]=0x023B4,
+ ["Tcaron"]=0x00164,
+ ["tcaron"]=0x00165,
+ ["Tcedil"]=0x00162,
+ ["tcedil"]=0x00163,
+ ["Tcy"]=0x00422,
+ ["tcy"]=0x00442,
+ ["tdot"]=0x020DB,
+ ["telrec"]=0x02315,
+ ["Tfr"]=0x1D517,
+ ["tfr"]=0x1D531,
+ ["there4"]=0x02234,
+ ["Therefore"]=0x02234,
+ ["therefore"]=0x02234,
+ ["Theta"]=0x00398,
+ ["theta"]=0x003B8,
+ ["thetav"]=0x003D1,
+ ["thickapprox"]=0x02248,
+ ["thicksim"]=0x0223C,
+ ["ThickSpace"]=0x02009,
+ ["thinsp"]=0x02009,
+ ["ThinSpace"]=0x02009,
+ ["thkap"]=0x02248,
+ ["thksim"]=0x0223C,
+ ["THORN"]=0x000DE,
+ ["thorn"]=0x000FE,
+ ["Tilde"]=0x0223C,
+ ["tilde"]=0x002DC,
+ ["TildeEqual"]=0x02243,
+ ["TildeFullEqual"]=0x02245,
+ ["TildeTilde"]=0x02248,
+ ["times"]=0x000D7,
+ ["timesb"]=0x022A0,
+ ["timesbar"]=0x02A31,
+ ["timesd"]=0x02A30,
+ ["tint"]=0x0222D,
+ ["toea"]=0x02928,
+ ["top"]=0x022A4,
+ ["topbot"]=0x02336,
+ ["topcir"]=0x02AF1,
+ ["Topf"]=0x1D54B,
+ ["topf"]=0x1D565,
+ ["topfork"]=0x02ADA,
+ ["tosa"]=0x02929,
+ ["tprime"]=0x02034,
+ ["trade"]=0x02122,
+ ["triangle"]=0x025B5,
+ ["triangledown"]=0x025BF,
+ ["triangleleft"]=0x025C3,
+ ["trianglelefteq"]=0x022B4,
+ ["triangleq"]=0x0225C,
+ ["triangleright"]=0x025B9,
+ ["trianglerighteq"]=0x022B5,
+ ["tridot"]=0x025EC,
+ ["trie"]=0x0225C,
+ ["triminus"]=0x02A3A,
+ ["TripleDot"]=0x020DB,
+ ["triplus"]=0x02A39,
+ ["trisb"]=0x029CD,
+ ["tritime"]=0x02A3B,
+ ["trpezium"]=0x0FFFD,
+ ["Tscr"]=0x1D4AF,
+ ["tscr"]=0x1D4C9,
+ ["TScy"]=0x00426,
+ ["tscy"]=0x00446,
+ ["TSHcy"]=0x0040B,
+ ["tshcy"]=0x0045B,
+ ["Tstrok"]=0x00166,
+ ["tstrok"]=0x00167,
+ ["twixt"]=0x0226C,
+ ["twoheadleftarrow"]=0x0219E,
+ ["twoheadrightarrow"]=0x021A0,
+ ["Uacute"]=0x000DA,
+ ["uacute"]=0x000FA,
+ ["Uarr"]=0x0219F,
+ ["uArr"]=0x021D1,
+ ["uarr"]=0x02191,
+ ["Uarrocir"]=0x02949,
+ ["Ubrcy"]=0x0040E,
+ ["ubrcy"]=0x0045E,
+ ["Ubreve"]=0x0016C,
+ ["ubreve"]=0x0016D,
+ ["Ucirc"]=0x000DB,
+ ["ucirc"]=0x000FB,
+ ["Ucy"]=0x00423,
+ ["ucy"]=0x00443,
+ ["udarr"]=0x021C5,
+ ["Udblac"]=0x00170,
+ ["udblac"]=0x00171,
+ ["udhar"]=0x0296E,
+ ["ufisht"]=0x0297E,
+ ["Ufr"]=0x1D518,
+ ["ufr"]=0x1D532,
+ ["Ugrave"]=0x000D9,
+ ["ugrave"]=0x000F9,
+ ["uHar"]=0x02963,
+ ["uharl"]=0x021BF,
+ ["uharr"]=0x021BE,
+ ["uhblk"]=0x02580,
+ ["ulcorn"]=0x0231C,
+ ["ulcorner"]=0x0231C,
+ ["ulcrop"]=0x0230F,
+ ["ultri"]=0x025F8,
+ ["Umacr"]=0x0016A,
+ ["umacr"]=0x0016B,
+ ["uml"]=0x000A8,
+ ["UnderBar"]=0x00332,
+ ["UnderBrace"]=0x0FE38,
+ ["UnderBracket"]=0x023B5,
+ ["UnderParenthesis"]=0x0FE36,
+ ["Union"]=0x022C3,
+ ["UnionPlus"]=0x0228E,
+ ["Uogon"]=0x00172,
+ ["uogon"]=0x00173,
+ ["Uopf"]=0x1D54C,
+ ["uopf"]=0x1D566,
+ ["UpArrow"]=0x02191,
+ ["Uparrow"]=0x021D1,
+ ["uparrow"]=0x02191,
+ ["UpArrowBar"]=0x02912,
+ ["UpArrowDownArrow"]=0x021C5,
+ ["UpDownArrow"]=0x02195,
+ ["Updownarrow"]=0x021D5,
+ ["updownarrow"]=0x02195,
+ ["UpEquilibrium"]=0x0296E,
+ ["upharpoonleft"]=0x021BF,
+ ["upharpoonright"]=0x021BE,
+ ["uplus"]=0x0228E,
+ ["UpperLeftArrow"]=0x02196,
+ ["UpperRightArrow"]=0x02197,
+ ["Upsi"]=0x003D2,
+ ["upsi"]=0x003C5,
+ ["Upsilon"]=0x003A5,
+ ["upsilon"]=0x003C5,
+ ["UpTee"]=0x022A5,
+ ["UpTeeArrow"]=0x021A5,
+ ["upuparrows"]=0x021C8,
+ ["urcorn"]=0x0231D,
+ ["urcorner"]=0x0231D,
+ ["urcrop"]=0x0230E,
+ ["Uring"]=0x0016E,
+ ["uring"]=0x0016F,
+ ["urtri"]=0x025F9,
+ ["Uscr"]=0x1D4B0,
+ ["uscr"]=0x1D4CA,
+ ["utdot"]=0x022F0,
+ ["Utilde"]=0x00168,
+ ["utilde"]=0x00169,
+ ["utri"]=0x025B5,
+ ["utrif"]=0x025B4,
+ ["uuarr"]=0x021C8,
+ ["Uuml"]=0x000DC,
+ ["uuml"]=0x000FC,
+ ["uwangle"]=0x029A7,
+ ["vangrt"]=0x0299C,
+ ["varepsilon"]=0x003B5,
+ ["varkappa"]=0x003F0,
+ ["varnothing"]=0x02205,
+ ["varphi"]=0x003C6,
+ ["varpi"]=0x003D6,
+ ["varpropto"]=0x0221D,
+ ["vArr"]=0x021D5,
+ ["varr"]=0x02195,
+ ["varrho"]=0x003F1,
+ ["varsigma"]=0x003C2,
+ ["varsubsetneq"]=0x0228A,
+ ["varsubsetneqq"]=0x02ACB,
+ ["varsupsetneq"]=0x0228B,
+ ["varsupsetneqq"]=0x02ACC,
+ ["vartheta"]=0x003D1,
+ ["vartriangleleft"]=0x022B2,
+ ["vartriangleright"]=0x022B3,
+ ["Vbar"]=0x02AEB,
+ ["vBar"]=0x02AE8,
+ ["vBarv"]=0x02AE9,
+ ["Vcy"]=0x00412,
+ ["vcy"]=0x00432,
+ ["VDash"]=0x022AB,
+ ["Vdash"]=0x022A9,
+ ["vDash"]=0x022A8,
+ ["vdash"]=0x022A2,
+ ["Vdashl"]=0x02AE6,
+ ["Vee"]=0x022C1,
+ ["vee"]=0x02228,
+ ["veebar"]=0x022BB,
+ ["veeeq"]=0x0225A,
+ ["vellip"]=0x022EE,
+ ["Verbar"]=0x02016,
+ ["verbar"]=0x0007C,
+ ["Vert"]=0x02016,
+ ["vert"]=0x0007C,
+ ["VerticalBar"]=0x02223,
+ ["VerticalLine"]=0x0007C,
+ ["VerticalSeparator"]=0x02758,
+ ["VerticalTilde"]=0x02240,
+ ["VeryThinSpace"]=0x0200A,
+ ["Vfr"]=0x1D519,
+ ["vfr"]=0x1D533,
+ ["vltri"]=0x022B2,
+ ["vnsub"]=0x02282,
+ ["vnsup"]=0x02283,
+ ["Vopf"]=0x1D54D,
+ ["vopf"]=0x1D567,
+ ["vprop"]=0x0221D,
+ ["vrtri"]=0x022B3,
+ ["Vscr"]=0x1D4B1,
+ ["vscr"]=0x1D4CB,
+ ["vsubnE"]=0x02ACB,
+ ["vsubne"]=0x0228A,
+ ["vsupnE"]=0x02ACC,
+ ["vsupne"]=0x0228B,
+ ["Vvdash"]=0x022AA,
+ ["vzigzag"]=0x0299A,
+ ["Wcirc"]=0x00174,
+ ["wcirc"]=0x00175,
+ ["wedbar"]=0x02A5F,
+ ["Wedge"]=0x022C0,
+ ["wedge"]=0x02227,
+ ["wedgeq"]=0x02259,
+ ["weierp"]=0x02118,
+ ["Wfr"]=0x1D51A,
+ ["wfr"]=0x1D534,
+ ["Wopf"]=0x1D54E,
+ ["wopf"]=0x1D568,
+ ["wp"]=0x02118,
+ ["wr"]=0x02240,
+ ["wreath"]=0x02240,
+ ["Wscr"]=0x1D4B2,
+ ["wscr"]=0x1D4CC,
+ ["xcap"]=0x022C2,
+ ["xcirc"]=0x025EF,
+ ["xcup"]=0x022C3,
+ ["xdtri"]=0x025BD,
+ ["Xfr"]=0x1D51B,
+ ["xfr"]=0x1D535,
+ ["xhArr"]=0x027FA,
+ ["xharr"]=0x027F7,
+ ["Xi"]=0x0039E,
+ ["xi"]=0x003BE,
+ ["xlArr"]=0x027F8,
+ ["xlarr"]=0x027F5,
+ ["xmap"]=0x027FC,
+ ["xnis"]=0x022FB,
+ ["xodot"]=0x02A00,
+ ["Xopf"]=0x1D54F,
+ ["xopf"]=0x1D569,
+ ["xoplus"]=0x02A01,
+ ["xotime"]=0x02A02,
+ ["xrArr"]=0x027F9,
+ ["xrarr"]=0x027F6,
+ ["Xscr"]=0x1D4B3,
+ ["xscr"]=0x1D4CD,
+ ["xsqcup"]=0x02A06,
+ ["xuplus"]=0x02A04,
+ ["xutri"]=0x025B3,
+ ["xvee"]=0x022C1,
+ ["xwedge"]=0x022C0,
+ ["Yacute"]=0x000DD,
+ ["yacute"]=0x000FD,
+ ["YAcy"]=0x0042F,
+ ["yacy"]=0x0044F,
+ ["Ycirc"]=0x00176,
+ ["ycirc"]=0x00177,
+ ["Ycy"]=0x0042B,
+ ["ycy"]=0x0044B,
+ ["yen"]=0x000A5,
+ ["Yfr"]=0x1D51C,
+ ["yfr"]=0x1D536,
+ ["YIcy"]=0x00407,
+ ["yicy"]=0x00457,
+ ["Yopf"]=0x1D550,
+ ["yopf"]=0x1D56A,
+ ["Yscr"]=0x1D4B4,
+ ["yscr"]=0x1D4CE,
+ ["YUcy"]=0x0042E,
+ ["yucy"]=0x0044E,
+ ["Yuml"]=0x00178,
+ ["yuml"]=0x000FF,
+ ["Zacute"]=0x00179,
+ ["zacute"]=0x0017A,
+ ["Zcaron"]=0x0017D,
+ ["zcaron"]=0x0017E,
+ ["Zcy"]=0x00417,
+ ["zcy"]=0x00437,
+ ["Zdot"]=0x0017B,
+ ["zdot"]=0x0017C,
+ ["zeetrf"]=0x02128,
+ ["ZeroWidthSpace"]=0x0200B,
+ ["zeta"]=0x003B6,
+ ["Zfr"]=0x02128,
+ ["zfr"]=0x1D537,
+ ["ZHcy"]=0x00416,
+ ["zhcy"]=0x00436,
+ ["zigrarr"]=0x021DD,
+ ["Zopf"]=0x02124,
+ ["zopf"]=0x1D56B,
+ ["Zscr"]=0x1D4B5,
+ ["zscr"]=0x1D4CF,
+}
diff --git a/Master/texmf-dist/tex/context/base/math-ext.tex b/Master/texmf-dist/tex/context/base/math-ext.tex
index e2155503db4..cf332ba0093 100644
--- a/Master/texmf-dist/tex/context/base/math-ext.tex
+++ b/Master/texmf-dist/tex/context/base/math-ext.tex
@@ -1,6 +1,6 @@
%D \module
%D [ file=math-ext,
-%D version=2006.01.14,
+%D version=2007.07.19,
%D title=\CONTEXT\ Math Macros,
%D subtitle=Extra Macros,
%D author={Hans Hagen \& Taco Hoekwater \& Aditya Mahajan},
@@ -63,12 +63,13 @@
% temp here
-%D We next define extensible arrows. Extensible arrows are arrows that change
-%D their length accoding to the width of the text to be placed above and below
-%D the arrow. Since we need to define a lot of arrows, we first define some
-%D helper macros. The basic idea is to measure the width of the box to be
-%D placed above and below the arrow, and make the \quotation{body} of the
-%D arrow as long as the bigger of the two widths.
+%D We next define extensible arrows. Extensible arrows are arrows that
+%D change their length according to the width of the text to be placed
+%D above and below the arrow. Since we need to define a lot of arrows,
+%D we first define some helper macros. The basic idea is to measure
+%D the width of the box to be placed above and below the arrow, and
+%D make the \quotation{body} of the arrow as long as the bigger of the
+%D two widths.
\def\mtharrfactor{1}
\def\mtharrextra {0}
@@ -99,7 +100,7 @@
\mkern\muskip2\relax
\mkern\muskip6\relax
$}%
- \setbox4\hbox{#3}%
+ \setbox4\hbox{#3\displaystyle}%
\dimen0\wd0
\ifdim\wd4>\dimen0 \dimen0\wd4 \fi
\setbox2\hbox{$\scriptstyle
@@ -110,7 +111,7 @@
\mkern\muskip6\relax
$}%
\ifdim\wd2>\dimen0 \dimen0\wd2 \fi
- \setbox4\hbox to \dimen0{#3}%
+ \setbox4\hbox to \dimen0{#3\displaystyle}%
\mathrel{\mathop{\hbox to \dimen0{\hss\copy4\hss}}\limits^{\box0}_{\box2}}
\endgroup}
@@ -121,7 +122,7 @@
\def\domthxarrdouble#1#2#3#4#5#6#7% opt l r sp rs top bot
{\mathrel
- {\scratchdimen.22ex\relax
+ {\scratchdimen.32ex\relax % was .22, todo: make configurable
\setbox0\hbox{$\domthxarr{#1}{#2}{#4}{\phantom{#6}}{#7}$}%
\setbox2\hbox{$\domthxarr{#1}{#3}{#5}{#6}{\phantom{#7}}$}%
\raise\scratchdimen\box0
@@ -129,24 +130,31 @@
\lower\scratchdimen\box2}}
%D \macros{definematharrow}
-%D Macro for defining new arrows. We can define two types of arrows|<|single
-%D arrows and double arrows. Single arrows are defined as
+%D
+%D Macro for defining new arrows. We can define two types of
+%D arrows|<|single arrows and double arrows. Single arrows are defined
+%D as
+%D
%D \starttyping
%D \definematharrow [xrightarrow] [0359] [\rightarrowfill]
%D \stoptyping
-%D The first argument is the name of the arrow (\tex{xrightarrow} in this case.)
-%D The second argument consists of a set of 4 numbers and specify the spacing
-%D correction in math units~\type{mu}. These numbers define:
+%D
+%D The first argument is the name of the arrow (\tex{xrightarrow} in
+%D this case.) The second argument consists of a set of 4 numbers and
+%D specify the spacing correction in math units~\type{mu}. These
+%D numbers define:
+%D
%D \startlines
%D 1st number: arrow||tip correction
%D 2nd number: arrow||tip correction
%D 3rd number: space (multiplied by \tex{matharrfactor} and advanced by \tex{matharrextra})
%D 4th number: space (multiplied by \tex{matharrfactor} and advanced by \tex{matharrextra})
%D \stoplines
-%D
-%D The third argument is the name of the extensible fill. The third argument
-%D is optional when the arrow is redefined later (this is useful for font
-%D specific tweaking of the skips.) For example,
+%D
+%D The third argument is the name of the extensible fill. The third
+%D argument is optional when the arrow is redefined later (this is
+%D useful for font specific tweaking of the skips.) For example,
+%D
%D \startbuffer
%D \math{\xrightarrow{above}}
%D \definematharrow[xrightarrow][0000]
@@ -157,18 +165,21 @@
%D \typebuffer gives {\getbuffer}
%D
%D The double arrows are defined as follows
+%D
%D \starttyping
-%D \definematharrow [xrightleftharpoons] [3095,0359]
+%D \definematharrow [xrightleftharpoons] [3095,0359]
%D [\rightharpoonupfill,\leftharpoondownfill]
%D \stoptyping
-%D The second and the third set of arguments consist of comma separated
-%D values. The first element of the second argument (\type{3095}) corresponds
-%D to the spacing correction of top arrow fill (\tex{rightarrowupfill}).
-%D Similarly, \type{0359} corresponds to bottom arrow fill
-%D \tex{leftharpoondownfill}). Stacking them on top of each other we get
-%D $\xrightleftharpoons[big]{above}{below}$.
+%D
+%D The second and the third set of arguments consist of comma
+%D separated values. The first element of the second argument
+%D (\type{3095}) corresponds to the spacing correction of top arrow
+%D fill (\tex{rightarrowupfill}). Similarly, \type{0359} corresponds
+%D to bottom arrow fill \tex{leftharpoondownfill}). Stacking them on
+%D top of each other we get $\xrightleftharpoons[big]{above}{below}$.
%D The following math arrows are defined
-%D \midaligned{\starttable[|l|m|]
+%D
+%D \placetable[none]{}{\starttable[|l|m|]
%D \NC \tex{xrightarrow } \NC \xrightarrow [big] \NC \NR
%D \NC \tex{xleftarrow } \NC \xleftarrow [big] \NC \NR
%D \NC \tex{xequal } \NC \xequal [big] \NC \NR
@@ -238,70 +249,94 @@
% Adapted from amsmath.
%D \macros{mtharrowfill,defaultmtharrowfill}
-%D To extend the arrows we need to define a \quotation{math arrow fill}. This
-%D command takes 7 arguments: the first four correspond the second argument of
-%D \tex{definematharrow} explained above. The other three specify the tail,
-%D body and head of the arrow. \tex{defaultmtharrowfill} has values tweaked to
-%D match latin modern fonts. For fonts that are significantly different (e.g.
-%D cows) a different set of values need to be determined.
-
-\def\mtharrowfill#1#2#3#4#5#6#7%
+%D
+%D To extend the arrows we need to define a \quotation{math arrow
+%D fill}. This command takes 8 arguments: the first four correspond
+%D the second argument of \tex{definematharrow} explained above. The
+%D other three specify the tail, body and head of the arrow. The last
+%D argument specifies the math-mode in which the arrow is drawn.
+%D \tex{defaultmtharrowfill} has values tweaked to match Latin Modern
+%D fonts. For fonts that are significantly different (e.g. cows) a
+%D different set of values need to be determined.
+
+\def\mtharrowfill#1#2#3#4#5#6#7#8%
{$\mathsurround 0pt
\thickmuskip0mu\medmuskip\thickmuskip\thinmuskip\thickmuskip
- \relax#5%
+ \relax#8#5%
\mkern-#1mu
- \cleaders\hbox{$\mkern -#2mu#6\mkern -#3mu$}\hfill
+ \cleaders\hbox{$#8\mkern -#2mu#6\mkern -#3mu$}\hfill
\mkern-#4mu#7$}
\def\defaultmtharrowfill{\mtharrowfill 7227}
-%D We now define some arrow fills that will be used for defining the arrows.
-%D \tex{leftarrowfill} and \tex{rightarrowfill} are redefined using \tex{defaultmtharrowfill}.
-
-\def\rightarrowfill {\defaultmtharrowfill \relbar \relbar \rightarrow }
-\def\leftarrowfill {\defaultmtharrowfill \leftarrow \relbar \relbar }
-\def\equalfill {\defaultmtharrowfill \Relbar \Relbar \Relbar }
-\def\Rightarrowfill {\defaultmtharrowfill \Relbar \Relbar \Rightarrow }
-\def\Leftarrowfill {\defaultmtharrowfill \Leftarrow \Relbar \Relbar }
-\def\Leftrightarrowfill {\defaultmtharrowfill \Leftarrow \Relbar \Rightarrow }
-\def\leftrightarrowfill {\defaultmtharrowfill \leftarrow \relbar \rightarrow }
-\def\mapstofill {\defaultmtharrowfill {\mapstochar\relbar} \relbar \rightarrow }
-\def\twoheadrightarrowfill{\defaultmtharrowfill \relbar \relbar \twoheadrightarrow}
-\def\twoheadleftarrowfill {\defaultmtharrowfill \twoheadleftarrow \relbar \relbar }
-\def\rightharpoondownfill {\defaultmtharrowfill \relbar \relbar \rightharpoondown }
-\def\rightharpoonupfill {\defaultmtharrowfill \relbar \relbar \rightharpoonup }
-\def\leftharpoondownfill {\defaultmtharrowfill \leftharpoondown \relbar \relbar }
-\def\leftharpoonupfill {\defaultmtharrowfill \leftharpoonup \relbar \relbar }
-
-\def\hookleftfill {\defaultmtharrowfill \leftarrow \relbar{\relbar\joinrel\rhook}}
-\def\hookrightfill{\defaultmtharrowfill{\lhook\joinrel\relbar}\relbar \rightarrow}
-
-%D Now we define most commonly used arrows. These include arrows defined in
-%D \filename{amsmath.sty}, \filename{extarrows.sty}, \filename{extpfel.sty}
-%D and mathtools.sty packages for \LATEX.
-
-\definematharrow [xrightarrow] [0359] [\rightarrowfill]
-\definematharrow [xleftarrow] [3095] [\leftarrowfill]
-\definematharrow [xequal] [0099] [\equalfill]
-\definematharrow [xRightarrow] [0359] [\Rightarrowfill]
-\definematharrow [xLeftarrow] [3095] [\Leftarrowfill]
-\definematharrow [xLeftrightarrow] [0099] [\Leftrightarrowfill]
-\definematharrow [xleftrightarrow] [0099] [\leftrightarrowfill]
-\definematharrow [xmapsto] [3599] [\mapstofill]
-\definematharrow [xtwoheadrightarrow] [5009] [\twoheadrightarrowfill]
-\definematharrow [xtwoheadleftarrow] [0590] [\twoheadleftarrowfill]
-\definematharrow [xrightharpoondown] [0359] [\rightharpoondownfill]
-\definematharrow [xrightharpoonup] [0359] [\rightharpoonupfill]
-\definematharrow [xleftharpoondown] [3095] [\leftharpoondownfill]
-\definematharrow [xleftharpoonup] [3095] [\leftharpoonupfill]
-
-\definematharrow [xleftrightharpoons] [3399,3399] [\leftharpoonupfill,\rightharpoondownfill]
-\definematharrow [xrightleftharpoons] [3399,3399] [\rightharpoonupfill,\leftharpoondownfill]
-
-\definematharrow [xhookleftarrow] [3095] [\hookleftfill]
-\definematharrow [xhookrightarrow] [0395] [\hookrightfill]
-
-%D These arrows can be used as folows:
+%D We now define some arrow fills that will be used for defining the
+%D arrows. Plain \TEX\ already defines \tex{leftarrowfill} and
+%D \tex{rightarrowfill}. The \tex{defaultmtharrowfill} command defines an
+%D arrowfill that takes an argument (so that it can also be used
+%D with over and under arrows). However the Plain \TEX\ definitions of
+%D \tex{leftarrowfill} and \tex{rightarrowfill} do not take this extra
+%D argument. To be backward compatible with Plain \TEX, we define two
+%D arrowfills: \tex{specrightarrowfill} which takes an extra argument, and
+%D \tex{rightarrowfill} which does not.
+
+\def\specrightarrowfill {\defaultmtharrowfill \relbar \relbar \rightarrow}
+\def\specleftarrowfill {\defaultmtharrowfill \leftarrow \relbar \relbar}
+
+\def\rightarrowfill {\specrightarrowfill \textstyle}
+\def\leftarrowfill {\specleftarrowfill \textstyle}
+
+\def\equalfill {\defaultmtharrowfill \Relbar \Relbar \Relbar}
+\def\Rightarrowfill {\defaultmtharrowfill \Relbar \Relbar \Rightarrow}
+\def\Leftarrowfill {\defaultmtharrowfill \Leftarrow \Relbar \Relbar}
+\def\Leftrightarrowfill {\defaultmtharrowfill \Leftarrow \Relbar \Rightarrow}
+\def\leftrightarrowfill {\defaultmtharrowfill \leftarrow \relbar \rightarrow}
+\def\mapstofill {\defaultmtharrowfill{\mapstochar\relbar} \relbar \rightarrow}
+\def\twoheadrightarrowfill{\defaultmtharrowfill \relbar \relbar \twoheadrightarrow}
+\def\twoheadleftarrowfill {\defaultmtharrowfill \twoheadleftarrow \relbar \relbar}
+\def\rightharpoondownfill {\defaultmtharrowfill \relbar \relbar \rightharpoondown}
+\def\rightharpoonupfill {\defaultmtharrowfill \relbar \relbar \rightharpoonup}
+\def\leftharpoondownfill {\defaultmtharrowfill \leftharpoondown \relbar \relbar}
+\def\leftharpoonupfill {\defaultmtharrowfill \leftharpoonup \relbar \relbar}
+\def\hookleftfill {\defaultmtharrowfill \leftarrow \relbar{\relbar\joinrel\rhook}}
+\def\hookrightfill {\defaultmtharrowfill{\lhook\joinrel\relbar}\relbar \rightarrow}
+\def\relfill {\defaultmtharrowfill \relbar \relbar \relbar}
+
+\def\triplerelbar {\mathrel\equiv}
+\def\triplerelfill{\defaultmtharrowfill\triplerelbar\triplerelbar\triplerelbar}
+
+\def\singlebond{{\xrel}} % or \def\singlebond{{\xrel[2]}}
+\def\doublebond{{\xequal}}
+\def\triplebond{{\xtriplerel}}
+
+%D Now we define most commonly used arrows. These include arrows
+%D defined in \filename{amsmath.sty}, \filename{extarrows.sty},
+%D \filename{extpfel.sty} and \filename{mathtools.sty} packages for
+%D \LATEX\ (plus a few more).
+
+\definematharrow [xrightarrow] [0359] [\specrightarrowfill]
+\definematharrow [xleftarrow] [3095] [\specleftarrowfill]
+\definematharrow [xequal] [0099] [\equalfill]
+\definematharrow [xRightarrow] [0359] [\Rightarrowfill]
+\definematharrow [xLeftarrow] [3095] [\Leftarrowfill]
+\definematharrow [xLeftrightarrow] [0099] [\Leftrightarrowfill]
+\definematharrow [xleftrightarrow] [0099] [\leftrightarrowfill]
+\definematharrow [xmapsto] [3599] [\mapstofill]
+\definematharrow [xtwoheadrightarrow] [5009] [\twoheadrightarrowfill]
+\definematharrow [xtwoheadleftarrow] [0590] [\twoheadleftarrowfill]
+\definematharrow [xrightharpoondown] [0359] [\rightharpoondownfill]
+\definematharrow [xrightharpoonup] [0359] [\rightharpoonupfill]
+\definematharrow [xleftharpoondown] [3095] [\leftharpoondownfill]
+\definematharrow [xleftharpoonup] [3095] [\leftharpoonupfill]
+\definematharrow [xhookleftarrow] [3095] [\hookleftfill]
+\definematharrow [xhookrightarrow] [0395] [\hookrightfill]
+\definematharrow [xrel] [0099] [\relfill]
+\definematharrow [xtriplerel] [0099] [\triplerelfill]
+\definematharrow [xrightoverleftarrow] [0359,3095] [\specrightarrowfill,\specleftarrowfill]
+\definematharrow [xleftrightharpoons] [3399,3399] [\leftharpoonupfill,\rightharpoondownfill]
+\definematharrow [xrightleftharpoons] [3399,3399] [\rightharpoonupfill,\leftharpoondownfill]
+
+%D These arrows can be used as follows:
+%D
%D \startbuffer
%D \startformula \xrightarrow{stuff on top}\stopformula
%D \startformula \xrightarrow{}{stuff on top}\stopformula
@@ -313,6 +348,90 @@
%D \startformula \xleftarrow [medium]{stuff below}{stuff on top}\stopformula
%D \startformula \xleftarrow [big]{stuff below}{stuff on top}\stopformula
%D \stopbuffer
+%D
%D \typebuffer which gives \getbuffer
+%D \macros{definemathoverarrow,defineunderarrow}
+%D
+%D These macros for define math-overarrows are adapted from
+%D \filename{amsmath.sty}
+
+\def\definemathoverarrow
+ {\dotripleargument\dodefinemathoverarrow}
+
+\def\dodefinemathoverarrow[#1][#2][#3]%
+ {\ifthirdargument
+ \setvalue{#1}{\dohandlemathoverarrow[#2][#3]}%
+ \else
+ \setvalue{#1}{\dohandlemathoverarrow[\zeropoint][#2]}%
+ \fi}
+
+\def\dohandlemathoverarrow[#1][#2]%
+ {\mathpalette{\dodohandlemathoverarrow{#1}{#2}}}
+
+%D Note: \filename{math-pln.tex} has \type{\kern-\onepoint} and
+%D \filename{amsmath.sty} does not. We keep the kern amount
+%D configurable. This is useful for harpoons.
+
+\def\dodohandlemathoverarrow#1#2#3#4%
+ {\vbox{\ialign{##\crcr
+ #2#3\crcr
+ \noalign{\kern#1\nointerlineskip}%
+ $\m@th\hfil#3#4\hfil$\crcr}}}
+
+%D Now the under arrows
+
+\def\definemathunderarrow
+ {\dotripleargument\dodefinemathunderarrow}
+
+%D For underarrows the default kern is 0.3ex
+
+\def\dodefinemathunderarrow[#1][#2][#3]%
+ {\ifthirdargument
+ \setvalue{#1}{\dohandlemathunderarrow[#2][#3]}%
+ \else
+ \setvalue{#1}{\dohandlemathunderarrow[0.3ex][#2]}%
+ \fi}
+
+\def\dohandlemathunderarrow[#1][#2]%
+ {\mathpalette{\dodohandlemathunderarrow{#1}{#2}}}
+
+\def\dodohandlemathunderarrow#1#2#3#4%
+ {\vtop{\ialign{##\crcr
+ $\m@th\hfil#3#4\hfil$\crcr
+ \noalign{\nointerlineskip\kern#1}%
+ #2#3\crcr}}}
+
+%D Now we define the arrows
+
+\definemathoverarrow [overleftarrow] [\specleftarrowfill]
+\definemathoverarrow [overrightarrow] [\specrightarrowfill]
+\definemathoverarrow [overleftrightarrow] [\leftrightarrowfill]
+\definemathoverarrow [overtwoheadrightarrow] [\twoheadrightarrowfill]
+\definemathoverarrow [overtwoheadleftarrow] [\twoheadleftarrowfill]
+\definemathoverarrow [overrightharpoondown] [1pt] [\rightharpoondownfill]
+\definemathoverarrow [overrightharpoonup] [\rightharpoonupfill]
+\definemathoverarrow [overleftharpoondown] [1pt] [\leftharpoondownfill]
+\definemathoverarrow [overleftharpoonup] [\leftharpoonupfill]
+
+\definemathunderarrow [underleftarrow] [\specleftarrowfill]
+\definemathunderarrow [underrightarrow] [\specrightarrowfill]
+\definemathunderarrow [underleftrightarrow] [\leftrightarrowfill]
+\definemathunderarrow [undertwoheadrightarrow][\twoheadrightarrowfill]
+\definemathunderarrow [undertwoheadleftarrow] [\twoheadleftarrowfill]
+\definemathunderarrow [underrightharpoondown] [\rightharpoondownfill]
+\definemathunderarrow [underrightharpoonup] [\rightharpoonupfill]
+\definemathunderarrow [underleftharpoondown] [\leftharpoondownfill]
+\definemathunderarrow [underleftharpoonup] [\leftharpoonupfill]
+
+%D These can be used as follows:
+%D
+%D \startbuffer
+%D $\overleftarrow{A}$ $\overleftarrow{ABC}$
+%D $a_{\overleftarrow{A}}$ $b_{\overleftarrow{ABC}}$
+%D \stopbuffer
+%D \typebuffer which gives \getbuffer
+
+%D TODO: Possibly have a single arrow command define all the arrows.
+
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/math-ini.lua b/Master/texmf-dist/tex/context/base/math-ini.lua
new file mode 100644
index 00000000000..6b2752cff60
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/math-ini.lua
@@ -0,0 +1,432 @@
+if not modules then modules = { } end modules ['math-ini'] = {
+ version = 1.001,
+ comment = "companion to math-ini.tex",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+--[[ldx--
+<p>Math definitions. This code may move.</p>
+--ldx]]--
+
+-- if needed we can use the info here to set up xetex definition files
+-- the "8000 hackery influences direct characters (utf) as indirect \char's
+
+mathematics = mathematics or { }
+mathematics.data = mathematics.data or { }
+mathematics.slots = mathematics.slots or { }
+
+mathematics.classes = {
+ ord = 0, -- mathordcomm mathord
+ op = 1, -- mathopcomm mathop
+ bin = 2, -- mathbincomm mathbin
+ rel = 3, -- mathrelcomm mathrel
+ open = 4, -- mathopencomm mathopen
+ close = 5, -- mathclosecomm mathclose
+ punct = 6, -- mathpunctcomm mathpunct
+ alpha = 7, -- mathalphacomm firstofoneargument
+ accent = 8,
+ radical = 9,
+ inner = 0, -- mathinnercomm mathinner
+ nothing = 0, -- mathnothingcomm firstofoneargument
+ choice = 0, -- mathchoicecomm @@mathchoicecomm
+ box = 0, -- mathboxcomm @@mathboxcomm
+ limop = 1, -- mathlimopcomm @@mathlimopcomm
+ nolop = 1, -- mathnolopcomm @@mathnolopcomm
+}
+
+mathematics.classes.alphabetic = mathematics.classes.alpha
+mathematics.classes.unknown = mathematics.classes.nothing
+mathematics.classes.punctuation = mathematics.classes.punct
+mathematics.classes.normal = mathematics.classes.nothing
+mathematics.classes.opening = mathematics.classes.open
+mathematics.classes.closing = mathematics.classes.close
+mathematics.classes.binary = mathematics.classes.bin
+mathematics.classes.relation = mathematics.classes.rel
+mathematics.classes.fence = mathematics.classes.unknown
+mathematics.classes.diacritic = mathematics.classes.accent
+mathematics.classes.large = mathematics.classes.op
+mathematics.classes.variable = mathematics.classes.alphabetic
+mathematics.classes.number = mathematics.classes.nothing
+
+mathematics.families = {
+ mr = 0, bs = 8,
+ mi = 1, bi = 9,
+ sy = 2, sc = 10,
+ ex = 3, tf = 11,
+ it = 4, ma = 12,
+ sl = 5, mb = 13,
+ bf = 6, mc = 14,
+ nn = 7, md = 15,
+}
+
+mathematics.families.letters = mathematics.families.mr
+mathematics.families.numbers = mathematics.families.mr
+mathematics.families.variables = mathematics.families.mi
+mathematics.families.operators = mathematics.families.sy
+mathematics.families.lcgreek = mathematics.families.mi
+mathematics.families.ucgreek = mathematics.families.mr
+mathematics.families.vargreek = mathematics.families.mi
+mathematics.families.mitfamily = mathematics.families.mi
+mathematics.families.calfamily = mathematics.families.sy
+
+mathematics.families[0] = mathematics.families.mr
+mathematics.families[1] = mathematics.families.mi
+mathematics.families[2] = mathematics.families.sy
+mathematics.families[3] = mathematics.families.ex
+
+function mathematics.mathcode(target,class,family,slot)
+ return ("\\omathcode%s=\"%X%02X%04X"):format(target,class,family,slot)
+end
+function mathematics.delcode(target,small_family,small_slot,large_family,large_slot)
+ return ("\\odelcode%s=\"%02X%04X\"%02X%04X"):format(target,small_family,small_slot,large_family,large_slot)
+end
+function mathematics.radical(small_family,small_slot,large_family,large_slot)
+ return ("\\radical%s=\"%02X%04X%\"02X%04X"):format(target,small_family,small_slot,large_family,large_slot)
+end
+function mathematics.mathchar(class,family,slot)
+ return ("\\omathchar\"%X%02X%04X "):format(class,family,slot)
+end
+function mathematics.mathaccent(class,family,slot)
+ return ("\\omathaccent\"%X%02X%04X "):format(class,family,slot)
+end
+function mathematics.delimiter(class,family,slot,largefamily,largeslot)
+ return ("\\odelimiter\"%X%02X%04X\"%02X%04X "):format(class,family,slot,largefamily,largeslot)
+end
+function mathematics.mathchardef(name,class,family,slot) -- we can avoid this one
+ return ("\\omathchardef\\%s\"%X%02X%04X"):format(name,class,family,slot)
+end
+
+function mathematics.setmathsymbol(name,class,family,slot,largefamily,largeslot,unicode)
+ class = mathematics.classes[class] or class -- no real checks needed
+ family = mathematics.families[family] or family
+ -- \unexpanded ? \relax needed for the codes?
+ local classes = mathematics.classes
+ if largefamily and largeslot then
+ largefamily = mathematics.families[largefamily] or largefamily
+ if class == classes.radical then
+ tex.sprint(("\\unexpanded\\xdef\\%s{%s }"):format(name,mathematics.radical(class,family,slot,largefamily,largeslot)))
+ elseif class == classes.open or class == classes.close then
+ tex.sprint(("\\unexpanded\\xdef\\%s{%s}"):format(name,mathematics.delimiter(class,family,slot,largefamily,largeslot)))
+ end
+ elseif class == classes.accent then
+ tex.sprint(("\\unexpanded\\xdef\\%s{%s }"):format(name,mathematics.mathaccent(class,family,slot)))
+ elseif unicode then
+ -- beware, open/close and other specials should not end up here
+ local ch = utf.char(unicode)
+ if characters.filters.utf.private.escapes[ch] then
+ tex.sprint(("\\xdef\\%s{\\char%s }"):format(name,unicode))
+ else
+ tex.sprint(("\\xdef\\%s{%s}"):format(name,ch))
+ end
+ else
+ tex.sprint(mathematics.mathchardef(name,class,family,slot))
+ end
+end
+
+-- direct sub call
+
+function mathematics.setmathcharacter(target,class,family,slot,largefamily,largeslot)
+ class = mathematics.classes[class] or class -- no real checks needed
+ family = mathematics.families[family] or family
+ if largefamily and largeslot then
+ largefamily = mathematics.families[largefamily] or largefamily
+ tex.sprint(mathematics.delcode(target,family,slot,largefamily,largeslot))
+ else
+ tex.sprint(mathematics.mathcode(target,class,family,slot))
+ end
+end
+
+-- definitions (todo: expand commands to utf instead of codes)
+
+mathematics.trace = false --
+
+function mathematics.define()
+ local slots = mathematics.slots.current
+ local setmathcharacter = mathematics.setmathcharacter
+ local setmathsymbol = mathematics.setmathsymbol
+ local trace = mathematics.trace
+ local function report(k,c,f,i,fe,ie)
+ if fe then
+ logs.report("mathematics",string.format("a - symbol 0x%05X -> %s -> %s %s (%s %s)",k,c,f,i,fe,ie))
+ elseif c then
+ logs.report("mathematics",string.format("b - symbol 0x%05X -> %s -> %s %s",k,c,f,i))
+ else
+ logs.report("mathematics",string.format("c - symbol 0x%05X -> %s %s",k,f,i))
+ end
+ end
+ for k,v in pairs(characters.data) do
+ local m = v.mathclass
+ -- i need to clean this up a bit
+ if m then
+ local c = v.mathname
+ if c == false then
+ -- no command
+ local s = slots[k]
+ if s then
+ local f, i, fe, ie = s[1], s[2], s[3], s[4]
+ if trace then
+ report(k,c,f,i,fe,ie)
+ end
+ setmathcharacter(k,m,f,i,fe,ie)
+ end
+ elseif c then
+ local s = slots[k]
+ if s then
+ local f, i, fe, ie = s[1], s[2], s[3], s[4]
+ if trace then
+ report(k,c,f,i,fe,ie)
+ end
+ setmathsymbol(c,m,f,i,fe,ie,k)
+ setmathcharacter(k,m,f,i,fe,ie)
+ end
+ elseif v.contextname then
+ local s = slots[k]
+ local c = v.contextname
+ if s then
+ local f, i, fe, ie = s[1], s[2], s[3], s[4]
+ if trace then
+ report(k,c,f,i,fe,ie)
+ end
+ -- todo: mathortext
+ -- setmathsymbol(c,m,f,i,fe,ie,k)
+ setmathcharacter(k,m,f,i,fe,ie)
+ end
+ else
+ local a = v.adobename
+ if a and m then
+ local s, f, i, fe, ie = slots[k], nil, nil, nil, nil
+ if s then
+ f, i, fe, ie = s[1], s[2], s[3], s[4]
+ elseif m == "variable" then
+ f, i = mathematics.families.variables, k
+ elseif m == "number" then
+ f, i = mathematics.families.numbers, k
+ end
+ if trace then
+ report(k,a,f,i,fe,ie)
+ end
+ setmathcharacter(k,m,f,i,fe,ie)
+ end
+ end
+ end
+ end
+end
+
+-- temporary here: will become separate
+
+-- maybe we should define a nice virtual font so that we have
+-- just the base n families repeated for diferent styles
+
+mathematics.slots.traditional = {
+
+ [0x03B1] = { "lcgreek", 0x0B }, -- alpha
+ [0x03B2] = { "lcgreek", 0x0C }, -- beta
+ [0x03B3] = { "lcgreek", 0x0D }, -- gamma
+ [0x03B4] = { "lcgreek", 0x0E }, -- delta
+ [0x03B5] = { "lcgreek", 0x0F }, -- epsilon
+ [0x03B6] = { "lcgreek", 0x10 }, -- zeta
+ [0x03B7] = { "lcgreek", 0x11 }, -- eta
+ [0x03B8] = { "lcgreek", 0x12 }, -- theta
+ [0x03B9] = { "lcgreek", 0x13 }, -- iota
+ [0x03BA] = { "lcgreek", 0x14 }, -- kappa
+ [0x03BB] = { "lcgreek", 0x15 }, -- lambda
+ [0x03BC] = { "lcgreek", 0x16 }, -- mu
+ [0x03BD] = { "lcgreek", 0x17 }, -- nu
+ [0x03BE] = { "lcgreek", 0x18 }, -- xi
+ [0x03BF] = { "lcgreek", 0x6F }, -- omicron
+ [0x03C0] = { "lcgreek", 0x19 }, -- po
+ [0x03C1] = { "lcgreek", 0x1A }, -- rho
+-- [0x03C2] = { "lcgreek", 0x00 }, -- varsigma
+ [0x03C3] = { "lcgreek", 0x1B }, -- sigma
+ [0x03C4] = { "lcgreek", 0x1C }, -- tau
+ [0x03C5] = { "lcgreek", 0x1D }, -- upsilon
+-- [0x03C6] = { "lcgreek", 0x1E }, -- varphi
+ [0x03C7] = { "lcgreek", 0x1F }, -- chi
+ [0x03C8] = { "lcgreek", 0x20 }, -- psi
+ [0x03C9] = { "lcgreek", 0x21 }, -- omega
+
+ [0x0391] = { "ucgreek", 0x41 }, -- Alpha
+ [0x0392] = { "ucgreek", 0x42 }, -- Beta
+ [0x0393] = { "ucgreek", 0x00 }, -- Gamma
+ [0x0394] = { "ucgreek", 0x01 }, -- Delta
+ [0x0395] = { "ucgreek", 0x45 }, -- Epsilon
+ [0x0396] = { "ucgreek", 0x5A }, -- Zeta
+ [0x0397] = { "ucgreek", 0x48 }, -- Eta
+ [0x0398] = { "ucgreek", 0x02 }, -- Theta
+ [0x0399] = { "ucgreek", 0x49 }, -- Iota
+ [0x039A] = { "ucgreek", 0x4B }, -- Kappa
+ [0x039B] = { "ucgreek", 0x03 }, -- Lambda
+ [0x039C] = { "ucgreek", 0x4D }, -- Mu
+ [0x039D] = { "ucgreek", 0x4E }, -- Nu
+ [0x039E] = { "ucgreek", 0x04 }, -- Xi
+ [0x039F] = { "ucgreek", 0x4F }, -- Omicron
+ [0x03A0] = { "ucgreek", 0x05 }, -- Pi
+ [0x03A1] = { "ucgreek", 0x52 }, -- Rho
+ [0x03A3] = { "ucgreek", 0x06 }, -- Sigma
+ [0x03A4] = { "ucgreek", 0x54 }, -- Tau
+ [0x03A5] = { "ucgreek", 0x07 }, -- Upsilon
+ [0x03A6] = { "ucgreek", 0x08 }, -- Phi
+ [0x03A7] = { "ucgreek", 0x58 }, -- Chi
+ [0x03A8] = { "ucgreek", 0x09 }, -- Psi
+ [0x03A9] = { "ucgreek", 0x0A }, -- Omega
+
+ [0x03F5] = { "vargreek", 0x22 }, -- varepsilon
+ [0x03D1] = { "vargreek", 0x23 }, -- vartheta
+ [0x03D6] = { "vargreek", 0x24 }, -- varpi
+ [0x03F1] = { "vargreek", 0x25 }, -- varrho
+ [0x03C2] = { "vargreek", 0x26 }, -- varsigma
+
+ -- varphi is part of the alphabet, contrary to the other var*s'
+
+ [0x03C6] = { "vargreek", 0x27 }, -- varphi
+ [0x03D5] = { "lcgreek", 0x1E }, -- phi
+
+ [0x03F0] = { "lcgreek", 0x14 }, -- varkappa, not in tex fonts
+
+ [0x0021] = { "mr", 0x21 }, -- !
+ [0x0028] = { "mr", 0x28 }, -- (
+ [0x0029] = { "mr", 0x29 }, -- )
+ [0x002A] = { "sy", 0x03 }, -- *
+ [0x002B] = { "mr", 0x2B }, -- +
+ [0x002C] = { "mi", 0x3B }, -- ,
+ [0x002D] = { "sy", 0x00 }, -- -
+ [0x2212] = { "sy", 0x00 }, -- -
+ [0x002E] = { "mi", 0x3A }, -- .
+ [0x002F] = { "mi", 0x3D }, -- /
+ [0x003A] = { "mr", 0x3A }, -- :
+ [0x003B] = { "mr", 0x3B }, -- ;
+ [0x003C] = { "mi", 0x3C }, -- <
+ [0x003D] = { "mr", 0x3D }, -- =
+ [0x003E] = { "mi", 0x3E }, -- >
+ [0x003F] = { "mr", 0x3F }, -- ?
+ [0x005C] = { "sy", 0x6E }, -- \
+ [0x007B] = { "sy", 0x66 }, -- {
+ [0x007C] = { "sy", 0x6A }, -- |
+ [0x007D] = { "sy", 0x67 }, -- }
+ [0x00B1] = { "sy", 0x06 }, -- pm
+ [0x00B7] = { "sy", 0x01 }, -- cdot
+ [0x00D7] = { "sy", 0x02 }, -- times
+ [0x2022] = { "sy", 0x0F }, -- bullet
+ [0x2111] = { "sy", 0x3D }, -- Im
+ [0x2118] = { "mi", 0x7D }, -- wp
+ [0x211C] = { "sy", 0x3C }, -- Re
+ [0x2190] = { "sy", 0x20 }, -- leftarrow
+ [0x2191] = { "sy", 0x22, "ex", 0x78 }, -- uparrow
+ [0x2192] = { "sy", 0x21 }, -- rightarrow
+ [0x2193] = { "sy", 0x23, "ex", 0x79 }, -- downarrow
+ [0x2194] = { "sy", 0x24 }, -- leftrightarrow
+ [0x2195] = { "sy", 0x6C, "ex", 0x3F }, -- updownarrow
+ [0x2196] = { "sy", 0x2D }, -- nwarrow
+ [0x2197] = { "sy", 0x25 }, -- nearrow
+ [0x2198] = { "sy", 0x2E }, -- swarrow
+ [0x2199] = { "sy", 0x26 }, -- searrow
+ [0x21D0] = { "sy", 0x28 }, -- Leftarrow
+ [0x21D1] = { "sy", 0x6C, "ex", 0x7E }, -- Uparrow
+ [0x21D2] = { "sy", 0x29 }, -- Rightarrow
+ [0x21D3] = { "sy", 0x2B, "ex", 0x7F }, -- Downarrow
+ [0x21D4] = { "sy", 0x2C }, -- Leftrightarrow
+ [0x21D5] = { "sy", 0x6D, "ex", 0x77 }, -- Updownarrow
+ [0x2135] = { "sy", 0x40 }, -- aleph
+ [0x2113] = { "mi", 0x60 }, -- ell
+-- ...
+ [0x2200] = { "sy", 0x38 }, -- forall
+-- [0x2201] = { "sy", 0x00 }, -- complement
+ [0x2202] = { "mi", 0x40 }, -- partial
+ [0x2203] = { "sy", 0x39 }, -- exists
+-- [0x2204] = { "sy", 0x00 }, -- not exists
+ [0x2205] = { "sy", 0x3B }, -- empty set
+-- [0x2206] = { "sy", 0x00 }, -- increment
+ [0x2207] = { "sy", 0x72 }, -- nabla
+ [0x2208] = { "sy", 0x32 }, -- in
+ [0x2209] = { "sy", 0x33 }, -- ni
+ [0x220F] = { "ex", 0x51 }, -- prod
+ [0x2210] = { "ex", 0x60 }, -- coprod
+ [0x2211] = { "ex", 0x50 }, -- sum
+-- [0x2212] = { "sy", 0x00 }, -- -
+ [0x2213] = { "sy", 0x07 }, -- mp
+ [0x2215] = { "sy", 0x3D }, -- / AM: Not sure
+ [0x2216] = { "sy", 0x6E }, -- setminus
+ [0x2217] = { "sy", 0x03 }, -- *
+ [0x2218] = { "sy", 0x0E }, -- circ
+ [0x2219] = { "sy", 0x0F }, -- bullet
+-- [0x221A] = { "sy", 0x70, "ex", 0x70 }, -- sqrt. AM: Check surd??
+-- ...
+ [0x221D] = { "sy", 0x2F }, -- propto
+ [0x221E] = { "sy", 0x31 }, -- infty
+ [0x2225] = { "sy", 0x6B }, -- parallel
+ [0x2227] = { "sy", 0x5E }, -- wedge
+ [0x2228] = { "sy", 0x5F }, -- vee
+ [0x2229] = { "sy", 0x5C }, -- cap
+ [0x222A] = { "sy", 0x5B }, -- cup
+ [0x222B] = { "ex", 0x52 }, -- intop
+-- ... other integrals
+ [0x2236] = { "mr", 0x3A }, -- colon
+ [0x223C] = { "sy", 0x18 }, -- sim
+ [0x2243] = { "sy", 0x27 }, -- simeq
+ [0x2248] = { "sy", 0x19 }, -- approx
+ [0x2261] = { "sy", 0x11 }, -- equiv
+ [0x2264] = { "sy", 0x14 }, -- leq
+ [0x2265] = { "sy", 0x15 }, -- geq
+ [0x226A] = { "sy", 0x1C }, -- ll
+ [0x226B] = { "sy", 0x1D }, -- gg
+ [0x227A] = { "sy", 0x1E }, -- prec
+ [0x227B] = { "sy", 0x1F }, -- succ
+-- [0x227C] = { "sy", 0x16 }, -- preceq, AM:No see 2AAF
+-- [0x227D] = { "sy", 0x17 }, -- succeq, AM:No see 2AB0
+ [0x2282] = { "sy", 0x1A }, -- subset
+ [0x2283] = { "sy", 0x1B }, -- supset
+ [0x2286] = { "sy", 0x12 }, -- subseteq
+ [0x2287] = { "sy", 0x13 }, -- supseteq
+ [0x2293] = { "sy", 0x75 }, -- sqcap
+ [0x2294] = { "sy", 0x74 }, -- sqcup
+ [0x2295] = { "sy", 0x08 }, -- oplus
+ [0x2296] = { "sy", 0x09 }, -- ominus
+ [0x2297] = { "sy", 0x0A }, -- otimes
+ [0x2298] = { "sy", 0x0B }, -- oslash
+ [0x2299] = { "sy", 0x0C }, -- odot
+ [0x22A4] = { "sy", 0x3E }, -- top
+ [0x22A5] = { "sy", 0x3F }, -- bop
+ [0x22C0] = { "ex", 0x56 }, -- bigwedge
+ [0x22C1] = { "ex", 0x57 }, -- bigvee
+ [0x22C2] = { "ex", 0x54 }, -- bigcap
+ [0x22C3] = { "ex", 0x53 }, -- bigcup
+ [0x22C4] = { "sy", 0x05 }, -- diamond
+ [0x22C5] = { "sy", 0x01 }, -- cdot
+ [0x22C6] = { "sy", 0x3F }, -- star
+ [0x25B3] = { "sy", 0x34 }, -- triangle up
+
+ [0x1D6A4] = { "mi", 0x7B }, -- imath
+ [0x1D6A5] = { "mi", 0x7C }, -- jmath
+
+ [0x0028] = { "mr", 0x28, "ex", 0x00 }, -- (
+ [0x0029] = { "mr", 0x29, "ex", 0x01 }, -- )
+ [0x002F] = { "mr", 0x2F, "ex", 0x0E }, -- /
+ [0x003C] = { "sy", 0x3C, "ex", 0x0A }, -- <
+ [0x003E] = { "sy", 0x3E, "ex", 0x0B }, -- >
+ [0x005B] = { "mr", 0x5B, "ex", 0x02 }, -- [
+ [0x005D] = { "mr", 0x5D, "ex", 0x03 }, -- ]
+ [0x007C] = { "sy", 0x6A, "ex", 0x0C }, -- |
+ [0x005C] = { "sy", 0x6E, "ex", 0x0F }, -- \
+ [0x007B] = { "sy", 0x66, "ex", 0x08 }, -- {
+ [0x007D] = { "sy", 0x67, "ex", 0x09 }, -- }
+
+ [0x005E] = { "mr", 0x5E, "ex", 0x62 }, -- widehat
+ [0x007E] = { "mr", 0x7E, "ex", 0x65 }, -- widetilde
+
+ [0x2AAF] = { "sy", 0x16 }, -- preceq
+ [0x2AB0] = { "sy", 0x17 }, -- succeq
+
+}
+
+mathematics.slots.current = mathematics.slots.traditional
+
+function mathematics.utfmathclass(chr, default)
+ local cd = characters.data[utf.byte(chr)]
+ return (cd and cd.mathclass) or default or "unknown"
+end
+function mathematics.utfmathcommand(chr, default)
+ local cd = characters.data[utf.byte(chr)]
+ return (cd and cd.mathname) or default or "unknown"
+end
diff --git a/Master/texmf-dist/tex/context/base/math-ini.mkii b/Master/texmf-dist/tex/context/base/math-ini.mkii
new file mode 100644
index 00000000000..6b0cd71d7dc
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/math-ini.mkii
@@ -0,0 +1,14 @@
+%D \module
+%D [ file=math-ini,
+%D version=2008.01.02,
+%D title=\CONTEXT\ Lua Macros,
+%D subtitle=Math Initializations,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright=PRAGMA]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\endinput
diff --git a/Master/texmf-dist/tex/context/base/math-ini.mkiv b/Master/texmf-dist/tex/context/base/math-ini.mkiv
new file mode 100644
index 00000000000..4d516a45c2a
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/math-ini.mkiv
@@ -0,0 +1,46 @@
+%D \module
+%D [ file=math-ini,
+%D version=2008.01.02,
+%D title=\CONTEXT\ Lua Macros,
+%D subtitle=Math Initializations,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright=PRAGMA]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\unprotect
+
+%D We move these definitions into the format:
+
+% test [[\char948 \ctxlua{tex.sprint(utf.char(948))}]]
+% test $[[\char948 \ctxlua{tex.sprint(utf.char(948))}]]$
+
+\registerctxluafile{math-ini}{1.001}
+\registerctxluafile{math-ent}{1.001}
+
+% \registerctxluafile{math-def}{1.001}
+% \ctxlua{mathematics.traditional()}
+
+\ctxlua{mathematics.define()}
+
+\def\utfmathclass #1{\ctxlua{tex.sprint (mathematics.utfmathclass ("#1"))}}
+\def\utfmathcommand#1{\ctxlua{commands.cs(mathematics.utfmathcommand("#1"))}}
+
+\def\utfmathclassdefault #1#2{\ctxlua{
+ tex.sprint(mathematics.utfmathclass("#1","#2"))
+}}
+
+\def\utfmathcommanddefault#1#2#3{\ctxlua{
+ local cmd = mathematics.utfmathcommand("#1","") or ""
+ if cmd == "" then
+ commands.cs("#2","#3")
+ else
+ commands.cs(cmd)
+ end}}
+
+% \let\math@normal@int\int \def\int{\math@normal@int\intlimits}
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/math-ini.tex b/Master/texmf-dist/tex/context/base/math-ini.tex
index 1c9cc651f5e..7ffef6bb88c 100644
--- a/Master/texmf-dist/tex/context/base/math-ini.tex
+++ b/Master/texmf-dist/tex/context/base/math-ini.tex
@@ -33,9 +33,9 @@
\def\@mt@{@mt@} % math token
\def\@mc@{@mc@} % math collection
-\def\@@mathlimopcomm#1{\mathop{#1}\limits}
+\def\@@mathlimopcomm#1{\mathop{#1}} %no \limits
\def\@@mathnolopcomm#1{\mathop{#1}\nolimits}
-\def\@@mathboxcomm #1{\leavevmode\hbox{$\m@th#1$}}
+\def\@@mathboxcomm #1{\dontleavehmode\hbox{$\m@th#1$}}
\chardef\mathordcode = 0 \let\mathordcomm \mathord
\chardef\mathopcode = 1 \let\mathopcomm \mathop
@@ -562,7 +562,7 @@
% \to\everymathematics}
%
% \def\initializemathpunctuation#1#2#3% sloowww
-% {\ifmathpunctuation % hm move thsi test to everymath, or better a separate token list
+% {\ifmathpunctuation % hm move this test to everymath, or better a separate token list
% \mathcode`#1="8000
% \defineactivecharacter #1 {\dohandlemathpunctuation{#2}{#3}}%
% \fi}
@@ -602,7 +602,10 @@
%D needed for sin, cos etc
-\def\mfunction#1{{\mr#1}}
+\def\mfunction #1{{\mr#1}}
+
+% \def\mlimitsfunction #1{\mathlimopcomm{{\mr#1}}
+% \def\mnolimitsfunction#1{\mathnolopcomm{{\mr#1}}
%D Taco posted this solution as response to a mail by Olivier, so
%D let's integrate it here.
@@ -710,6 +713,97 @@
%D \showmathtoken{Gamma} $\Gamma \Delta \alpha \delta \zeta$
%D \stoptyping
+%D \macros
+%D {nonknuthmode, donknuthmode}
+%D
+%D The underscore is frequently used in manuals but unfortunately \TEX\ prefers
+%D it to be a math specific character. And since computer modern fonts didn't
+%D have an underscore, one had to use commands to fake one. Nowadays we do
+%D have underscores in latin modern, and since all other fonts have them, we
+%D decided to get away from the restriction to use the underscore character in
+%D text mode.
+%D
+%D \starttyping
+%D \def\test#1{#1}
+%D
+%D \nonknuthmode $x_2$ x_2 \test{$x_2$} \test{x_2}
+%D
+%D \donknuthmode $x_2$ x_2 \test{$x_2$} \test{x_2}
+%D \stoptyping
+%D
+%D The result is as expected: the first line typesets ok, while the second
+%D one triggers an error message.
+
+\bgroup
+
+ \ifx\normalsuber\undefined \def\normalsuber{_} \fi
+ \ifx\normalsuper\undefined \def\normalsuper{^} \fi
+
+ \catcode`_=\active
+ \catcode`^=\active
+
+ \gdef\nonknuthmode
+ {\appendtoks\let_\normalsuber\let^\normalsuper\to\everymathematics
+ \mathcode`_="8000
+ \mathcode`^="8000
+ \catcode`_=\@@other
+ \catcode`^=\@@other
+ \let\nonknuthmode\relax}
+
+ \gdef\donknuthmode
+ {\catcode`_=\@@subscript
+ \catcode`^=\@@superscript}
+
+\egroup
+
+%D \macros
+%D {checkdelimiters, fakeleftdelimiter, fakerightdelimiter}
+%D
+%D Handy for non matching situations (as with mathml):
+%D
+%D \starttyping
+%D \checkdelimiters{... bla bla ...}
+%D \fakeleftdelimiter
+%D ... bla bla ...
+%D \fakerightdelimiter
+%D \stoptyping
+
+\newcount\delimitercount
+
+\def\leftfakedelimiter {\advance\delimitercount\minusone\gobbleoneargument}%
+\def\rightfakedelimiter{\advance\delimitercount\plusone \gobbleoneargument}%
+
+\def\checkdelimiters#1%
+ {\delimitercount\zerocount
+ \setbox\scratchbox\hbox\bgroup
+ \let\left \leftfakedelimiter
+ \let\right\rightfakedelimiter
+ $#1\expandafter$\expandafter
+ \egroup
+ \expandafter\delimitercount\the\delimitercount\relax}
+
+\def\fakeleftdelimiter {\ifnum\delimitercount>\zerocount\left .\fi}
+\def\fakerightdelimiter{\ifnum\delimitercount<\zerocount\right.\fi}
+
+% \def\scaledmathdelimiter#1#2%
+% {\begingroup
+% \scratchdimen\lineheight
+% \hbox{$\left#2\vbox\!!to#1\scratchdimen{}\right.\n@space$}%
+% \endgroup}
+%
+% \let\scaledmathdelimiter\@@dobig
+%
+% \def\scaledmathopen #1#2{\mathopen {\scaledmathdelimiter{#1}{#2}}}
+% \def\scaledmathclose#1#2{\mathclose{\scaledmathdelimiter{#1}{#2}}}
+
+%D Needed for unicode:
+
+\def\nulloperator{\mathortext{\mathop{\null}}{\null}}
+
+%D Plugins.
+
+\loadmarkfile{math-ini}
+
\protect \endinput
\tracemathcollectiontrue
diff --git a/Master/texmf-dist/tex/context/base/math-mis.tex b/Master/texmf-dist/tex/context/base/math-mis.tex
index b5a605cea53..1b1193fd4e3 100644
--- a/Master/texmf-dist/tex/context/base/math-mis.tex
+++ b/Master/texmf-dist/tex/context/base/math-mis.tex
@@ -41,7 +41,7 @@
\endgroup}
%D \startbuffer
-%D $a\geneq b^{a\geneq b^{a\geneq b}}$
+%D $a\string\geneq b^{a\string\geneq b^{a\string\geneq b}}$
%D \stopbuffer
%D
%D \typebuffer \getbuffer
diff --git a/Master/texmf-dist/tex/context/base/math-pln.tex b/Master/texmf-dist/tex/context/base/math-pln.tex
index f0b4f440e41..ffa16c8f514 100644
--- a/Master/texmf-dist/tex/context/base/math-pln.tex
+++ b/Master/texmf-dist/tex/context/base/math-pln.tex
@@ -203,11 +203,13 @@
\def\doteq
{\buildrel\textstyle.\over=}
+\ifx\mfunction\undefined \def\mfunction#1{\mathbin{\rm#1}} \fi
+
\def\bmod
{\nonscript
\mskip-\medmuskip
\mkern5mu
- \mathbin{\rm mod}%
+ \mfunction{mod}%
\penalty900
\mkern5mu
\nonscript
@@ -216,7 +218,7 @@
\def\pmod#1%
{\allowbreak
\mkern18mu
- ({\rm mod}\,\,#1)}
+ (\mfunction{mod}\,\,#1)}
\def\cases#1%
{\left\{%
@@ -334,8 +336,8 @@
%
% \letcatcodecommand \mthcatcodes `\_ \activemathunderscore
% \letcatcodecommand \mthcatcodes `\' \activemathquote
-%
-% \appendtoks \setcatcodetable\mthcatcodes \to \everymath
+
+% \appendtoks \setcatcodetable\mthcatcodes \to \everymath : spoils xml
% tricky, but some day we will reimplement math
diff --git a/Master/texmf-dist/tex/context/base/math-run.tex b/Master/texmf-dist/tex/context/base/math-run.tex
index acb5bce3fff..affa8d5af17 100644
--- a/Master/texmf-dist/tex/context/base/math-run.tex
+++ b/Master/texmf-dist/tex/context/base/math-run.tex
@@ -89,9 +89,7 @@
?%
\fi\fi \NC \NR
\NC visualization \NC \mathematics{\getvalue{#1}} \NC \NR
- \NC definition \NC \tttf \@EA \convertcommand
- \csname\@mt@\mathcollection#1\endcsname
- \to \ascii \ascii \NC \NR
+ \NC definition \NC \tttf \@EA\defconvertedcommand\@EA\ascii\csname\@mt@\mathcollection#1\endcsname \ascii \NC \NR
\stoptabulate}
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/math-tex.tex b/Master/texmf-dist/tex/context/base/math-tex.tex
index 6cd834ab402..752f113b71c 100644
--- a/Master/texmf-dist/tex/context/base/math-tex.tex
+++ b/Master/texmf-dist/tex/context/base/math-tex.tex
@@ -2,7 +2,7 @@
%D [ file=math-tex,
%D version=2001.04.12,
%D subtitle=Plain Specials,
-%D author={Hans Hagen \& Taco Hoekwater},
+%D author={Hans Hagen, Taco Hoekwater \& Aditya Mahajan},
%D date=\currentdate,
%D copyright=\PRAGMA]
%C
@@ -10,6 +10,8 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
+% beware: in mkiv we will do it differently
+
\unprotect
\mathcode`\ ="8000 \mathcode`\_="8000 \mathcode`\'="8000
@@ -24,6 +26,46 @@
\definefamilysynonym [default] [ucgreek] [mr]
\definefamilysynonym [default] [vargreek] [mi]
+
+%D \macros
+%D {\setupmathematics}
+%D
+%D Configuration for integrals. (If needed we can speed this up and make it
+%D installable; no processaction is needed then).
+
+\chardef\intlimitcode\zerocount % 0 nolimits 1 displaylimits 2 limits
+
+\def\intlimits
+ {\ifcase\intlimitcode \nolimits \or \displaylimits \or \limits \fi}
+
+\def\setupmathematics
+ {\dosingleargument\dosetupmathematics}
+
+\def\dosetupmathematics[#1]%
+ {\getparameters[\??mo][#1]
+ \processaction[\@@mointegral]
+ [ nolimits=>\chardef\intlimitcode\zerocount,
+ displaylimits=>\chardef\intlimitcode\plusone,
+ limits=>\chardef\intlimitcode\plustwo]}
+
+%D \startbuffer
+%D $\int_a^b f(x) dx$ and also
+%D $\iint_a^b f(x,y) dxdy$, $\iiint_a^b f(x,y) dxdy$,
+%D $\iiiint_a^b f(x) dx$
+%D \startformula
+%D \int_a^b f(x) dx \quad
+%D \iint_a^b f(x) dx \quad
+%D \iiint_a^b f(x) dx \quad
+%D \iiiint_a^b f(x) dx \quad
+%D \stopformula
+%D \stopbuffer
+%D
+%D Default: \getbuffer
+%D
+%D Displaylimits: \setupmathematics[integral=displaylimits] \getbuffer
+%D
+%D Limits: \setupmathematics[integral=limits] \getbuffer
+
\startmathcollection [default]
\definemathsymbol [alpha] [nothing] [lcgreek] ["0B]
@@ -319,8 +361,8 @@
\startmathcollection[default]
\definemathcommand [lnot] {\neg}
-\definemathcommand [int] {\intop\nolimits}
-\definemathcommand [oint] {\ointop\nolimits}
+\definemathcommand [int] {\intop \intlimits}
+\definemathcommand [oint] {\ointop\intlimits}
\definemathcommand [land] {\wedge}
\definemathcommand [lor] {\vee}
\definemathcommand [neq] {\not=}
@@ -444,19 +486,31 @@
\definemathsymbol [Downarrow] [rel] [sy] ["2B] [ex] ["7F]
\definemathsymbol [Updownarrow] [rel] [sy] ["6D] [ex] ["77]
\definemathsymbol [backslash] [nothing] [sy] ["6E] [ex] ["0F]
-\definemathsymbol [rangle] [close] [sy] ["69] [ex] ["0B]
\definemathsymbol [langle] [open] [sy] ["68] [ex] ["0A]
-\definemathsymbol [rbrace] [close] [sy] ["67] [ex] ["09]
+\definemathsymbol [rangle] [close] [sy] ["69] [ex] ["0B]
\definemathsymbol [lbrace] [open] [sy] ["66] [ex] ["08]
-\definemathsymbol [rceil] [close] [sy] ["65] [ex] ["07]
+\definemathsymbol [rbrace] [close] [sy] ["67] [ex] ["09]
\definemathsymbol [lceil] [open] [sy] ["64] [ex] ["06]
-\definemathsymbol [rfloor] [close] [sy] ["63] [ex] ["05]
+\definemathsymbol [rceil] [close] [sy] ["65] [ex] ["07]
\definemathsymbol [lfloor] [open] [sy] ["62] [ex] ["04]
+\definemathsymbol [rfloor] [close] [sy] ["63] [ex] ["05]
\definemathsymbol [sqrt] [radical] [sy] ["70] [ex] ["70]
\stopmathcollection
+%D By request:
+
+\startmathcollection[default]
+
+\definemathsymbol [lvert] [open] [sy] ["6A] [ex] ["0C]
+\definemathsymbol [rvert] [close] [sy] ["6A] [ex] ["0C]
+
+\definemathsymbol [lVert] [open] [sy] ["6B] [ex] ["0D]
+\definemathsymbol [rVert] [close] [sy] ["6B] [ex] ["0D]
+
+\stopmathcollection
+
%D For brooks:
%D
%D \starttyping
@@ -624,4 +678,42 @@
\definemathcommand [colonsim] [rel] {\coloncolon\colonsep\sim}
\definemathcommand [simcoloncolon] [rel] {\sim\coloncolon\colonsep}
+%D More integrals (AM):
+
+\def\dointkern{\mkern-6mu\mathchoice{\mkern-3mu}{}{}{}}
+
+\definemathcommand [iint] {\repeatintegral\plusone }
+\definemathcommand [iiint] {\repeatintegral\plustwo }
+\definemathcommand [iiiint] {\repeatintegral\plusthree}
+
+\def\repeatintegral#1%
+ {\scratchtoks\emptytoks
+ \let\dointlimits\donothing
+ \let\dodointlimits\intlimits
+ \dorecurse{#1}{\appendtoks \intop \dointkern \to \scratchtoks}
+ \appendtoks \intop \dointlimits \dodointlimits \to \scratchtoks
+ \edef\dodorepeatintegral{\the\scratchtoks}%
+ \futurelet\next\dorepeatintegral}
+
+%D If the \type{\limits} option is used after \type{\iint}, use
+%D \type{\mathop} and fudge the left hand space a bit to make the
+%D subscript visually centered.
+
+\def\dorepeatintegral
+ {\ifx\next\limits \dointlimitcorrection \else
+ \ifx\next\displaylimits \dointlimitcorrection \else
+ \ifx\next\nolimits \donothing \else
+ \ifcase\intlimitcode\else \dointlimitcorrection \fi\fi\fi\fi
+ \dodorepeatintegral}
+
+\def\dointlimitcorrection
+ {\mkern-7mu\mathchoice{\mkern-2mu}{}{}{}%
+ \mathop\bgroup
+ \mkern7mu\mathchoice{\mkern2mu}{}{}{}%
+ \let\dointlimits\egroup}
+
+
+\setupmathematics
+ [integral=nolimits]
+
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/meta-dum.tex b/Master/texmf-dist/tex/context/base/meta-dum.tex
index d6a4525b253..1d03fb16d2d 100644
--- a/Master/texmf-dist/tex/context/base/meta-dum.tex
+++ b/Master/texmf-dist/tex/context/base/meta-dum.tex
@@ -37,25 +37,25 @@
% to transparent colors
\startuseMPgraphic{placeholder}{width,height,reduction,color}
- numeric w, h, d, r ; color c, b, cc ; path p ; boolean t ;
- t := is_transparent(\MPvar{color}) ;
- c := not_transparent(\MPvar{color}) ;
- b := not_transparent(white) ;
- w := \MPvar{width} ;
- h := \MPvar{height} ;
- r := \MPvar{reduction} ;
- d := max(w,h) ;
- p := unitsquare xyscaled (w,h) ;
- cc := r[.5c,b] ;
- fill p withcolor if t : transparent(1,.5,cc) else : cc fi ;
- for i := 1 upto 60 :
- cc := r[c randomized(.3,.9),b] ;
- fill fullcircle
- scaled (d/5 randomized (d/5))
- shifted (center p randomized (d))
- withcolor if t : transparent(1,.5,cc) else : cc fi ;
- endfor ;
- clip currentpicture to p ;
+ numeric w, h, d, r ; color c, b, cc ; path p ; boolean t ;
+ t := is_transparent(\MPvar{color}) ;
+ c := not_transparent(\MPvar{color}) ;
+ b := not_transparent(white) ;
+ w := \MPvar{width} ;
+ h := \MPvar{height} ;
+ r := \MPvar{reduction} ;
+ d := max(w,h) ;
+ p := unitsquare xyscaled (w,h) ;
+ cc := r[.5c,b] ;
+ fill p withcolor if t : transparent(1,.5,cc) else : cc fi ;
+ for i := 1 upto 60 :
+ cc := r[c randomized(.3,.9),b] ;
+ fill fullcircle
+ scaled (d/5 randomized (d/5))
+ shifted (center p randomized (d))
+ withcolor if t : transparent(1,.5,cc) else : cc fi ;
+ endfor ;
+ clip currentpicture to p ;
\stopuseMPgraphic
\definepalet
diff --git a/Master/texmf-dist/tex/context/base/meta-fig.mkii b/Master/texmf-dist/tex/context/base/meta-fig.mkii
new file mode 100644
index 00000000000..3edd73b5749
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/meta-fig.mkii
@@ -0,0 +1,89 @@
+%D \module
+%D [ file=meta-fig,
+%D version=2000.09.07,
+%D title=\METAPOST\ Graphics,
+%D subtitle=Stand Alone Graphics,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{MetaPost Graphics / Stand Alone Graphics}
+
+\unprotect
+
+%D This module implements a method for defining
+%D stand||alone||graphics, that is, each graphic gets is own
+%D page. Because graphics are wrapped in a \type {\framed},
+%D you can add overlays to the graphic directly, and since the
+%D whole \CONTEXT\ machinery is available, you can also add
+%D page backgrounds.
+%D
+%D \starttyping
+%D \setupMPpage
+%D [offset=1pt,
+%D background=color,
+%D backgroundcolor=green]
+%D
+%D \startMPpage
+%D fill fullcircle scaled 10cm withcolor red ;
+%D \stopMPpage
+%D
+%D \startMPpage
+%D fill fullsquare rotated 45 scaled 8cm withcolor blue ;
+%D \stopMPpage
+%D \stoptyping
+%D
+%D Although this is hardly of any use, you can mix these
+%D definitions with the text flow, since all settings are
+%D kept local. The page is clipped to the image size.
+
+\presetlocalframed[\??mg]
+
+\def\setupMPpage
+ {\dodoubleargument\getparameters[\??mg]}
+
+\def\startMPpage
+ {\dodoubleempty\dostartMPpage}
+
+\long\def\dostartMPpage[#1][#2]% second arg gobbles space
+ {\dostartfittingpage[\??mg][#1]%
+ \obeyMPlines
+ \dodostartMPpage}
+
+\long\def\dodostartMPpage#1\stopMPpage
+ {\startuseMPgraphic{@@}#1\stopuseMPgraphic
+ \useMPgraphic{@@}%
+ \dostopfittingpage}
+
+\let\stopMPpage \relax % so that we can use it in \expanded
+
+\setupMPpage
+ [\c!scale=1000,
+ \c!strut=\v!no,
+ \c!align=,
+ \c!offset=\v!overlay,
+ \c!width=\v!fit,
+ \c!height=\v!fit,
+ \c!frame=\v!off]
+
+%D \macros
+%D {MPfigure}
+%D
+%D A bit out of place, here but nevertheless:
+
+\def\MPfigure#1#2% test for dup figure
+ {\bgroup
+ \getfiguredimensionsonly[#1]% [\c!object=\v!no] already set
+ \startMPcode
+ externalfigure "#1"
+ xscaled \figurewidth\space
+ yscaled \figureheight\space
+ #2 ;
+ \stopMPcode
+ \egroup}
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/meta-fig.mkiv b/Master/texmf-dist/tex/context/base/meta-fig.mkiv
new file mode 100644
index 00000000000..c2c2e127f11
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/meta-fig.mkiv
@@ -0,0 +1,84 @@
+%D \module
+%D [ file=meta-fig,
+%D version=2000.09.07,
+%D title=\METAPOST\ Graphics,
+%D subtitle=Stand Alone Graphics,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{MetaPost Graphics / Stand Alone Graphics}
+
+\unprotect
+
+%D This module implements a method for defining
+%D stand||alone||graphics, that is, each graphic gets is own
+%D page. Because graphics are wrapped in a \type {\framed},
+%D you can add overlays to the graphic directly, and since the
+%D whole \CONTEXT\ machinery is available, you can also add
+%D page backgrounds.
+%D
+%D \starttyping
+%D \setupMPpage
+%D [offset=1pt,
+%D background=color,
+%D backgroundcolor=green]
+%D
+%D \startMPpage
+%D fill fullcircle scaled 10cm withcolor red ;
+%D \stopMPpage
+%D
+%D \startMPpage
+%D fill fullsquare rotated 45 scaled 8cm withcolor blue ;
+%D \stopMPpage
+%D \stoptyping
+%D
+%D Although this is hardly of any use, you can mix these
+%D definitions with the text flow, since all settings are
+%D kept local. The page is clipped to the image size.
+
+\presetlocalframed[\??mg]
+
+\def\setupMPpage
+ {\dodoubleargument\getparameters[\??mg]}
+
+\def\startMPpage
+ {\dodoubleempty\dostartMPpage}
+
+\long\def\dostartMPpage[#1][#2]#3\stopMPpage % second arg gobbles space
+ {\dostartfittingpage[\??mg][#1]%
+ \processMPgraphic{#3}%
+ \dostopfittingpage}
+
+\let\stopMPpage \relax % so that we can use it in \expanded
+
+\setupMPpage
+ [\c!scale=1000,
+ \c!strut=\v!no,
+ \c!align=,
+ \c!offset=\v!overlay,
+ \c!width=\v!fit,
+ \c!height=\v!fit,
+ \c!frame=\v!off]
+
+%D \macros
+%D {MPfigure}
+%D
+%D A bit out of place, here but nevertheless:
+
+\def\MPfigure#1#2% test for dup figure, can be replaced by a textext
+ {\bgroup
+ \getfiguredimensionsonly[#1]% [\c!object=\v!no] already set
+ \startMPcode
+ externalfigure "#1"
+ xscaled \figurewidth\space
+ yscaled \figureheight\space
+ #2 ;
+ \stopMPcode
+ \egroup}
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/meta-ini.mkii b/Master/texmf-dist/tex/context/base/meta-ini.mkii
new file mode 100644
index 00000000000..932b99bf85a
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/meta-ini.mkii
@@ -0,0 +1,1083 @@
+%D \module
+%D [ file=meta-ini,
+%D version=1999.07.10,
+%D title=\METAPOST\ Graphics,
+%D subtitle=Initialization,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+% currently the running color influences the mp graphic in
+% pdftex, but this will change [i.e. become optional]; one
+% problem is that pdf has no grouping with regards to the
+% color
+
+\writestatus{loading}{MetaPost Graphics / Initializations}
+
+\unprotect
+
+\startmessages dutch library: metapost
+ title: metapost
+ 1: metapost bibliotheek -- wordt geladen
+\stopmessages
+
+\startmessages english library: metapost
+ title: metapost
+ 1: loading metapost library --
+\stopmessages
+
+\startmessages german library: metapost
+ title: metapost
+ 1: Lade metapost Bibliothek --
+\stopmessages
+
+\startmessages czech library: metapost
+ title: metapost
+ 1: loading metapost library --
+\stopmessages
+
+\startmessages italian library: metapost
+ title: metapost
+ 1: caricamento della libreria metapost --
+\stopmessages
+
+\startmessages norwegian library: metapost
+ title: metapost
+ 1: metapost bibliotek -- blir lest inn
+\stopmessages
+
+\startmessages romanian library: metapost
+ title: metapost
+ 1: se incarca biblioteca metapost --
+\stopmessages
+
+\startmessages french library: metapost
+ title: metapost
+ 1: chargement de la bibliothèque metapost --
+\stopmessages
+
+%D This module extends the functionality of the support module
+%D \type {supp-mps}, the module that is responsible for
+%D \METAPOST\ inclusion in \CONTEXT. Some basic macros will be
+%D extended. Since some support is depends on \METAPOST\
+%D macros. so let's first preload a few auxiliary \METAPOST\
+%D files.
+
+\maxnofMPgraphics = 4000 % metafun disables the 4K boundary
+
+\appendtoks \runMPgraphicsfalse \to \everyfastmode
+\appendtoks \insertMPgraphicsfalse \to \everyfastmode
+\appendtoks \flushMPgraphics \to \everygoodbye % \everylastshipout
+
+\def\@@MPG{@MPG@}
+
+\startMPextensions
+ if unknown context_tool: input mp-tool; fi;
+ if unknown context_spec: input mp-spec; fi;
+ if unknown context_grph: input mp-grph; fi;
+\stopMPextensions
+
+%D Since we want lables to follow the document settings, we
+%D also set the font related variables.
+
+\startMPinitializations % scale is not yet ok
+ defaultfont:="\truefontname{Regular}";
+ defaultscale:=\the\bodyfontsize/10pt;
+\stopMPinitializations
+
+\beginNEWTEX
+ \startMPinitializations % scale is not yet ok
+ defaultfont:="rm-lmtt10";
+ \stopMPinitializations
+\endNEWTEX
+
+%D In order to support fancy text features (like outline
+%D fonts), we set:
+
+\startMPextensions
+ graphictextformat:="context";
+ graphictextdirective "\the\everyMPTEXgraphic";
+\stopMPextensions
+
+% \startMPextensions
+% textextdirective "\the\everyMPTEXgraphic";
+% \stopMPextensions
+
+%D A signal that we're in combines \CONTEXT||\METAFUN mode:
+
+\startMPextensions
+ string contextversion;
+ contextversion:="\contextversion";
+\stopMPextensions
+
+%D Some safeguards:
+%D
+%D \starttyping
+%D \appendtoks \cleanupfeatures \to \everyMPgraphic
+%D \stoptyping
+%D
+%D No, we don't want that (else we loose UTF etc).
+
+%D Another one:
+
+\prependtoks \MPstaticgraphictrue \to \everyoverlay
+\prependtoks \MPstaticgraphictrue \to \everypagebody
+
+%D We save the number of graphics for the sake of \TEXEXEC.
+
+\newcounter\totalnofMPgraphics
+
+\def\thenofMPgraphics{\the\nofMPgraphics} % from supp-mps
+
+\appendtoks
+ \savecurrentvalue\totalnofMPgraphics\thenofMPgraphics
+\to \everybye
+
+%D \macros
+%D {setupMPvariables}
+%D
+%D When we build collections of \METAPOST\ graphics, like
+%D background and buttons, the need for passing settings
+%D arises. By (mis|)|using the local prefix that belongs to
+%D \type {\framed}, we get a rather natural interface to
+%D backgrounds. To prevent conflicts, we will use the \type
+%D {-} in \METAPOST\ specific variables, like:
+%D
+%D \starttyping
+%D \setupMPvariables[meta:button][size=20pt]
+%D \stoptyping
+
+\def\@@meta{meta:}
+
+\def\setupMPvariables
+ {\dodoubleempty\dosetupMPvariables}
+
+\def\dosetupMPvariables[#1][#2]%
+ {\ifsecondargument
+ \getrawparameters[#1:][#2]% brr, todo: [\@@meta#1:]
+ \else
+ \getrawparameters[\@@meta][#1]%
+ \fi}
+
+\let\@@framed\s!unknown
+
+% \def\MPvariable#1%
+% {\getvalue{\ifundefined{\@@framed\@@meta#1}\else\@@framed\fi\@@meta#1}}
+
+\beginTEX
+
+\def\MPvariable#1%
+ {\csname
+ \@EA\ifx\csname\@@framed\@@meta#1\endcsname\relax\else\@@framed\fi\@@meta#1%
+ \endcsname}
+
+\endTEX
+
+\beginETEX \ifcsname
+
+\def\MPvariable#1%
+ {\csname
+ \ifcsname\@@framed\@@meta#1\endcsname\@@framed\fi\@@meta#1%
+ \endcsname}
+
+\endETEX
+
+\let\MPvar\MPvariable
+
+\let\setMPvariables\setupMPvariables
+
+\def\MPrawvar#1#2{\csname#1:#2\endcsname}
+
+%D \macros
+%D {startuniqueMPgraphic, uniqueMPgraphic}
+%D
+%D This macros is probably of most use to myself, since I like
+%D to use graphics that adapt themselves. The next \METAPOST\
+%D kind of graphic is both unique and reused when possible.
+%D
+%D \starttyping
+%D \defineoverlay[example][\uniqueMPgraphic{test}]
+%D
+%D \startuniqueMPgraphic {test}
+%D draw unitsquare xscaled \overlaywidth yscaled \overlayheight ;
+%D \stopuniqueMPgraphic
+%D \stoptyping
+
+%D For educational purposes, we show the original version
+%D first. This one used a rather simple method for determining
+%D the uniqueness.
+%D
+%D \starttyping
+%D \long\def\startuniqueMPgraphic#1#2\stopuniqueMPgraphic%
+%D {\setvalue{\@@MPG#1}%
+%D {\startreusableMPgraphic{\overlaystamp:#1}#2\stopreusableMPgraphic
+%D \reuseMPgraphic{\overlaystamp:#1}}}
+%D
+%D \def\uniqueMPgraphic#1%
+%D {\getvalue{\@@MPG#1}}
+%D \stoptyping
+
+%\def\overlaystamp % watch the \MPcolor, since colors can be redefined
+% {\overlaywidth:\overlayheight:\overlaydepth
+% :\MPcolor{\overlaycolor}:\MPcolor{\overlaylinecolor}}
+
+\def\overlaystamp % watch the \MPcolor, since colors can be redefined
+ {\overlaywidth:\overlayheight:\overlaydepth
+ :\MPcolor\overlaycolor:\MPcolor\overlaylinecolor}
+
+%D A better approach is to let additional variables play a role
+%D in determining the uniqueness. In the next macro, the
+%D second, optional, argument is used to guarantee the
+%D uniqueness, as well as prepare variables for passing them to
+%D \METAPOST.
+%D
+%D \starttyping
+%D \startuniqueMPgraphic{meta:hash}{gap,angle,...}
+%D \stoptyping
+%D
+%D The calling macro also accepts a second argument. For
+%D convenient use in overlay definitions, we use \type {{}}
+%D instead of \type {[]}.
+%D
+%D \starttyping
+%D \uniqueMPgraphic{meta:hash}{gap=10pt,angle=30}
+%D \stoptyping
+
+\long\def\handleuniqueMPgraphic#1#2#3%
+ {\blabelgroup
+ \def\@@meta{#1:}%
+ \extendMPoverlaystamp{#2}% incl prepare
+ \ifundefined{\@@MPG\overlaystamp:#1}%
+ \enableincludeMPgraphics
+ \startMPgraphic#3\stopMPgraphic
+ \doifobjectssupportedelse\donothing\useMPboxfalse
+ \ifuseMPbox
+ \@EA\douseMPbox
+ \else
+ \@EA\nouseMPbox
+ \fi {\@@MPG\overlaystamp:#1}%
+ \fi
+ \getvalue{\@@MPG\overlaystamp:#1}%
+ \elabelgroup}
+
+\long\def\startuniqueMPgraphic
+ {\blabelgroup
+ \dodoublegroupempty\dostartuniqueMPgraphic}
+
+\long\def\dostartuniqueMPgraphic
+ {\obeyMPlines
+ \dodostartuniqueMPgraphic}
+
+\long\def\dodostartuniqueMPgraphic#1#2#3\stopuniqueMPgraphic%
+ {\long\setgvalue{\@@MPG#1}{\handleuniqueMPgraphic{#1}{#2}{#3}}%
+ \elabelgroup}
+
+\unexpanded\def\uniqueMPgraphic
+ {\dodoublegroupempty\douniqueMPgraphic}
+
+\def\douniqueMPgraphic#1#2%
+ {\blabelgroup
+ \setupMPvariables[#1][#2]%
+ \getvalue{\@@MPG#1}{}%
+ \elabelgroup}
+
+\let\stopuniqueMPcode \relax % so that we can use it in \expanded
+
+\long\def\handleuseMPgraphic#1#2#3%
+ {\blabelgroup
+ \def\@@meta{#1:}%
+ \prepareMPvariables{#2}%
+ \enableincludeMPgraphics
+ \startMPgraphic#3\stopMPgraphic
+ \ifMPrun \else % see mfun-004 : processing buffer
+ \loadMPgraphic{\MPgraphicfile.\the\currentMPgraphic}{}%
+ \placeMPgraphic
+ \fi
+ \deallocateMPslot\currentMPgraphic
+ \elabelgroup}
+
+\long\def\startuseMPgraphic
+ {\blabelgroup
+ \dodoublegroupempty\dostartuseMPgraphic}
+
+\long\def\dostartuseMPgraphic
+ {\obeyMPlines
+ \dodostartuseMPgraphic}
+
+\long\def\dodostartuseMPgraphic#1#2#3\stopuseMPgraphic
+ {\long\setgvalue{\@@MPG#1}{\handleuseMPgraphic{#1}{#2}{#3}}%
+ \elabelgroup}
+
+\long\def\startusableMPgraphic % redundant but handy
+ {\blabelgroup
+ \dodoublegroupempty\dostartusableMPgraphic}
+
+\long\def\dostartusableMPgraphic % redundant but handy
+ {\obeyMPlines
+ \dodostartusableMPgraphic}
+
+\long\def\dodostartusableMPgraphic#1#2#3\stopusableMPgraphic
+ {\long\setgvalue{\@@MPG#1}{\handleuseMPgraphic{#1}{#2}{#3}}%
+ \elabelgroup}
+
+\long\def\handlereusableMPgraphic#1#2#3%
+ {\blabelgroup
+ \def\@@meta{#1:}%
+ \prepareMPvariables{#2}%
+ \enableincludeMPgraphics
+ \startMPgraphic#3\stopMPgraphic
+ \doifobjectssupportedelse\donothing\useMPboxfalse
+ \ifuseMPbox
+ \@EA\douseMPbox
+ \else
+ \@EA\nouseMPbox
+ \fi {\@@MPG#1}%
+ \getvalue{\@@MPG#1}%
+ \elabelgroup}
+
+\long\def\startreusableMPgraphic
+ {\blabelgroup
+ \dodoublegroupempty\dostartreusableMPgraphic}
+
+\def\dostartreusableMPgraphic
+ {\obeyMPlines
+ \dodostartreusableMPgraphic}
+
+\long\def\dodostartreusableMPgraphic#1#2#3\stopreusableMPgraphic
+ {\long\setgvalue{\@@MPG#1}{\handlereusableMPgraphic{#1}{#2}{#3}}%
+ \elabelgroup}
+
+\unexpanded\def\useMPgraphic
+ {\dodoublegroupempty\douseMPgraphic}
+
+\def\douseMPgraphic#1#2%
+ {\blabelgroup
+ \setupMPvariables[#1][#2]%
+ \getvalue{\@@MPG#1}{}%
+ \elabelgroup}
+
+\let\reuseMPgraphic\useMPgraphic
+
+\let\stopuseMPcode \relax % so that we can use it in \expanded
+\let\stopusableMPcode \relax % so that we can use it in \expanded
+\let\stopreusableMPcode \relax % so that we can use it in \expanded
+\let\stopuniqueMPcode \relax % so that we can use it in \expanded
+
+\def\enableincludeMPgraphics
+ {\let\handleuseMPgraphic \thirdofthreearguments
+ \let\handlereusableMPgraphic\thirdofthreearguments}
+
+% todo: each code/page/buffer a var class
+
+%D \macros
+%D {startuniqueMPpagegraphic,uniqueMPpagegraphic}
+%D
+%D Experimental.
+
+\def\MPpageprefix{\doifoddpageelse oe:}
+
+\def\overlaypagestamp
+ {\MPpageprefix\overlaywidth:\overlayheight:\overlaydepth
+ :\MPcolor\overlaycolor:\MPcolor\overlaylinecolor}
+
+\long\def\startuniqueMPpagegraphic
+ {\blabelgroup
+ \dodoublegroupempty\dostartuniqueMPpagegraphic}
+
+\long\def\dostartuniqueMPpagegraphic
+ {\obeyMPlines
+ \dodostartuniqueMPpagegraphic}
+
+\long\def\dodostartuniqueMPpagegraphic#1#2#3\stopuniqueMPpagegraphic
+ {\long\setgvalue{\@@MPG o:#1}{\handleuniqueMPgraphic{o:#1}{#2}{#3}}%
+ \long\setgvalue{\@@MPG e:#1}{\handleuniqueMPgraphic{e:#1}{#2}{#3}}%
+ \elabelgroup}
+
+\unexpanded\def\uniqueMPpagegraphic
+ {\dodoublegroupempty\douniqueMPpagegraphic}
+
+% \def\douniqueMPpagegraphic#1#2%
+% {\blabelgroup
+% \let\overlaystamp\overlaypagestamp
+% \setupMPvariables[#1][#2]%
+% \getvalue{\@@MPG\MPpageprefix#1}{}%
+% \elabelgroup}
+
+\def\douniqueMPpagegraphic#1#2%
+ {\blabelgroup
+ \let\overlaystamp\overlaypagestamp
+ \setupMPvariables[\MPpageprefix#1][#2]% prefix is new here
+ \getvalue{\@@MPG\MPpageprefix#1}{}%
+ \elabelgroup}
+
+%D One way of defining a stamp is:
+%D
+%D \starttyping
+%D \def\extendMPoverlaystamp#1%
+%D {\def\docommand##1%
+%D {\edef\overlaystamp{\overlaystamp:\MPvariable{##1}}}%
+%D \processcommalist[#1]\docommand}
+%D \stoptyping
+
+%D Since we need to feed \METAPOST\ with expanded dimensions,
+%D we introduce a dedicated expansion engine.
+
+\def\prepareMPvariable#1%
+ {\ifundefined{\@@framed\@@meta#1}%
+ \doprepareMPvariable{\@@meta#1}%
+ \else
+ \doprepareMPvariable{\@@framed\@@meta#1}%
+ \fi}
+
+% \startlines
+% \def\xxx{\lineheight} \doprepareMPvariable{xxx} \xxx
+% \def\xxx{2pt} \doprepareMPvariable{xxx} \xxx
+% \def\xxx{2} \doprepareMPvariable{xxx} \xxx
+% \def\xxx{\scratchcounter} \doprepareMPvariable{xxx} \xxx
+% \def\xxx{red} \doprepareMPvariable{xxx} \xxx
+% \def\xxx{0.4} \doprepareMPvariable{xxx} \xxx
+% \stoplines
+
+\def\doprepareMPvariable#1%
+ {\edef\theMPvariable{\getvalue{#1}}%
+ \doifelsenothing\theMPvariable
+ {\setevalue{#1}{\MPcolor{black}}}
+ {\defconvertedcommand\ascii\theMPvariable % otherwise problems
+ \doifcolorelse \ascii % with 2\bodyfontsize
+ {\setevalue{#1}{\MPcolor\theMPvariable}}
+ {% can be aux macro
+ \setbox\scratchbox\hbox{\scratchdimen\theMPvariable sp}%
+ \ifdim\wd\scratchbox=\zeropoint
+ % \scratchcounter\theMPvariable
+ % \setevalue{#1}{\the\scratchcounter}%
+ % also accepts 0.number :
+ \setevalue{#1}{\number\theMPvariable}%
+ \else
+ \scratchdimen\theMPvariable
+ \setevalue{#1}{\the\scratchdimen}%
+ \fi}}}
+
+%D We redefine \type {\extendMPoverlaystamp} to preprocess
+%D variables using \type {\prepareMPvariable}.
+
+\def\doextendMPoverlaystamp#1%
+ {\prepareMPvariable{#1}%
+ \edef\overlaystamp{\overlaystamp:\MPvariable{#1}}}
+
+\def\extendMPoverlaystamp#1%
+ {\processcommalist[#1]\doextendMPoverlaystamp}
+
+\def\prepareMPvariables#1%
+ {\processcommalist[#1]\prepareMPvariable}
+
+%D \macros
+%D {MPdatafile}
+%D
+%D We redefine a macro from \type {supp-mps.tex}:
+
+\def\MPdatafile
+ {\bufferprefix mpd-\the\currentMPgraphic.mpd}
+
+%D \macros
+%D {MPrunfile}
+%D
+%D This one is more abstract and does not assume knowledge
+%D of buffer prefixes.
+
+\def\MPrunfile#1%
+ {\bufferprefix mprun.#1}
+
+%D \macros
+%D {getMPdata}
+%D
+%D When we collect graphics in one file, we run into
+%D troubles, since \METAPOST\ has a built in limit (of 4)
+%D on the number of files it can handle. It's therefore
+%D better to collect all data in one file and filter it.
+
+\def\MPdataMPDfile{\jobname-mp.mpd}
+\def\MPdataMPOfile{\jobname-mp.mpo}
+\def\MPdataMPYfile{\jobname-mp.mpy}
+
+\startMPextensions
+ boolean collapse_data; collapse_data:=true;
+ def data_mpd_file = "\MPdataMPDfile" enddef ;
+ def data_mpo_file = "\MPdataMPOfile" enddef ;
+ def data_mpy_file = "\MPdataMPYfile" enddef ;
+\stopMPextensions
+
+\def\getMPdata
+ {\long\def\MPdata##1##2{\ifnum##1=\currentMPgraphic\relax##2\fi}%
+ \startreadingfile
+ \startnointerference
+ \readlocfile\MPdataMPDfile\donothing\donothing
+ \stopnointerference
+ \stopreadingfile}
+
+%D We have to enable this mechanism with:
+
+\startMPextensions
+\stopMPextensions
+
+%D For the moment, the next one is a private macro:
+
+\def\processMPbuffer
+ {\dosingleempty\doprocessMPbuffer}
+
+\def\doprocessMPbuffer[#1]%
+ {\doifelsenothing{#1}
+ {\doprocessMPbuffer[\jobname]}
+ {\bgroup
+ \setnormalcatcodes
+ \obeyMPlines
+ %\let\par\empty % oeps, this makes dvi mode graphics hang when not found
+ \!!toksa\emptytoks
+ \def\copyMPbufferline{\expandafter\appendtoks\fileline\to\!!toksa}%
+ \def\dodoprocessMPbuffer##1%
+ {\doprocessfile\scratchread{\TEXbufferfile{##1}}\copyMPbufferline}%
+ \processcommalist[#1]\dodoprocessMPbuffer
+ \@EA\startMPcode\the\!!toksa\stopMPcode % more efficient
+ \egroup}}
+
+\def\runMPbuffer
+ {\dosingleempty\dorunMPbuffer}
+
+\def\dorunMPbuffer[#1]% processing only
+ {{\MPruntrue\doprocessMPbuffer[#1]}}
+
+%D \macros
+%D {startMPenvironment, resetMPenvironment}
+%D
+%D In order to synchronize the main \TEX\ run and the runs
+%D local to \METAPOST, environments can be passed.
+
+\ifx\everyMPTEXgraphic\undefined
+ \newtoks\everyMPTEXgraphic
+\fi
+
+%D A more general way of passing environments is:
+
+\def\startMPenvironment % second arg gobbles spaces, so that reset gives \emptytoks
+ {\bgroup
+ \catcode`\^^M=\@@space
+ \dodoubleempty\dostartMPenvironment}
+
+\long\def\dostartMPenvironment[#1][#2]#3\stopMPenvironment
+ {\egroup
+ \doif{#1}\s!reset\resetMPenvironment % reset mp toks
+ \doif{#1}\v!global{#3}% % use in main doc too
+ \doif{#1}+{#3}% % use in main doc too
+ \defconvertedargument\ascii{#3}%
+ \expandafter\appendtoks\ascii\to\everyMPTEXgraphic}
+
+\def\resetMPenvironment
+ {\everyMPTEXgraphic\emptytoks % = is really needed !
+ \startMPenvironment
+ \global\loadfontfileoncetrue
+ \stopMPenvironment}
+
+\resetMPenvironment
+
+\def\useMPenvironmentbuffer[#1]%
+ {\expanded{\startMPenvironment\noexpand\readfile{\TEXbufferfile{\jobname}}{}{}}\stopMPenvironment}
+
+% \useMPenvironmentbuffer[mp] % what was this?
+
+%D This command takes \type {[reset]} as optional
+%D argument.
+%D
+%D \starttyping
+%D \startMPenvironment
+%D \setupbodyfont[pos,14.4pt]
+%D \stopMPenvironment
+%D
+%D \startMPcode
+%D draw btex \sl Hans Hagen etex scaled 5 ;
+%D \stopMPcode
+%D \stoptyping
+%D
+%D The \type {\resetMPenvironment} is a quick way to erase
+%D the token list.
+%D
+%D You should be aware of independencies. For instance, if you use a font
+%D in a graphic that is not used in the main document, you need to load the
+%D typescript at the outer level (either directly or by using the global
+%D option).
+%D
+%D \starttyping
+%D \usetypescript[palatino][texnansi]
+%D
+%D \startMPenvironment
+%D \usetypescript[palatino][texnansi]
+%D \enableregime[utf]
+%D \setupbodyfont[palatino]
+%D \stopMPenvironment
+%D
+%D \startMPpage
+%D draw btex aap‒noot coördinatie – één etex ;
+%D \stopMPpage
+%D \stoptyping
+
+%D We don't want spurious files, do we?
+
+%\def\initializeMPgraphics
+% {%\ifx\bufferprefix\empty \else
+% \immediate\openout\MPwrite\MPgraphicfile.mp
+% \immediate\write\MPwrite{end.}%
+% \immediate\closeout\MPwrite
+% }%\fi}
+
+% strange :
+
+% \def\initializeMPgraphicfile
+% {\bgroup
+% \doinitializeMPgraphicfile
+% \MPruntrue
+% \doinitializeMPgraphicfile
+% \egroup}
+
+% \def\doinitializeMPgraphicfile
+% {\immediate\openout\scratchwrite\MPgraphicfile.mp
+% \immediate\write\scratchwrite{end.}%
+% \immediate\closeout\scratchwrite}
+
+\def\initializeMPgraphicfile
+ {\immediate\openout\scratchwrite\MPgraphicfile.mp
+ \immediate\write\scratchwrite{end.}%
+ \immediate\closeout\scratchwrite}
+
+\def\initializeMPgraphics
+ {\bgroup
+ \initializeMPgraphicfile
+ \ifx\bufferprefix\empty\else
+ \let\bufferprefix\empty
+ \initializeMPgraphicfile
+ \fi
+ \egroup}
+
+%D Loading specific \METAPOST\ related definitions is
+%D accomplished by:
+
+\def\douseMPlibrary#1%
+ {\ifundefined{\c!file\f!metapostprefix#1}%
+ \letvalueempty{\c!file\f!metapostprefix#1}%
+ \makeshortfilename[\truefilename{\f!metapostprefix#1}]%
+ \startreadingfile
+ \readsysfile\shortfilename{\showmessage\m!metapost1{#1}}\donothing
+ \stopreadingfile
+ \fi}
+
+\def\useMPlibrary[#1]%
+ {\processcommalist[#1]\douseMPlibrary}
+
+%D \macros
+%D {setMPtext, MPtext, MPstring, MPbetex}
+%D
+%D To be documented:
+%D
+%D \starttyping
+%D \setMPtext{identifier}{text}
+%D
+%D \MPtext {identifier}
+%D \MPstring{identifier}
+%D \MPbetex {identifier}
+%D \stoptyping
+
+\def\@@MPT{@MPT@}
+
+\def\forceMPTEXgraphic
+ {\long\def\checkMPTEXgraphic##1{\global\MPTEXgraphictrue}}
+
+\def\setMPtext#1#2% todo : #1 must be made : safe
+ {%\forceMPTEXgraphic
+ \defconvertedargument\ascii{#2}%
+ \dodoglobal\letvalue{\@@MPT#1}\ascii}
+
+% \def\MPtext #1{\getvalue{\@@MPT#1}}
+% \def\MPstring #1{"\getvalue{\@@MPT#1}"}
+% \def\MPbetex #1{btex \getvalue{\@@MPT#1} etex}
+
+\def\MPtext #1{\executeifdefined{\@@MPT#1}\empty}
+\def\MPstring #1{"\executeifdefined{\@@MPT#1}\empty"}
+\def\MPbetex #1{btex \executeifdefined{\@@MPT#1}\empty\space etex}
+
+%D Unfortunately \METAPOST\ does not have \CMYK\ support
+%D built in, but by means of specials we can supply the
+%D information needed to handle them naturaly.
+
+\newif\ifMPcmykcolors \MPcmykcolorstrue
+\newif\ifMPspotcolors \MPspotcolorstrue
+
+\startMPinitializations
+ cmykcolors:=\ifMPcmykcolors true\else false\fi;
+ spotcolors:=\ifMPspotcolors true\else false\fi;
+\stopMPinitializations
+
+%D In order to communicate conveniently with the \TEX\
+%D engine, we introduce some typesetting variables.
+
+% todo : backgroundoffsets
+
+\startMPextensions
+ color OverlayColor,OverlayLineColor;
+\stopMPextensions
+
+\startMPinitializations
+ OverlayWidth:=\overlaywidth;
+ OverlayHeight:=\overlayheight;
+ OverlayDepth:=\overlayheight;
+ OverlayColor:=\MPcolor{\overlaycolor};
+ OverlayLineWidth:=\overlaylinewidth;
+ OverlayLineColor:=\MPcolor{\overlaylinecolor};
+ %
+ BaseLineSkip:=\the\baselineskip;
+ LineHeight:=\the\baselineskip;
+ BodyFontSize:=\the\bodyfontsize;
+ %
+ TopSkip:=\the\topskip;
+ StrutHeight:=\strutheight;
+ StrutDepth:=\strutdepth;
+ %
+ CurrentWidth:=\the\hsize;
+ CurrentHeight:=\the\vsize;
+ %
+ EmWidth:=\the\emwidth;
+ ExHeight:=\the\exheight;
+ %
+ PageNumber:=\the\pageno;
+ RealPageNumber:=\the\realpageno;
+ LastPageNumber:= \lastpage;
+\stopMPinitializations
+
+\appendtoks
+ \disablediscretionaries
+ \disablecompoundcharacters
+\to\everyMPgraphic
+
+\appendtoks
+ \expanded{\definecolor[currentcolor][\currentcolorname]}%
+\to \everyMPgraphic
+
+\appendtoks
+ \baselineskip1\baselineskip
+ \lineheight 1\lineheight
+ \topskip 1\topskip
+\to \everyMPgraphic
+
+%D Alas, the prologue settings differ per driver.
+
+\ifx\undefined\MPprologues \def\MPprologues{0} \fi
+
+\startMPinitializations
+ prologues:=\MPprologues;
+ mpprocset:=1;
+\stopMPinitializations
+
+\appendtoks
+ \def\MPprologues{0}%
+ \def\MPOSTdriver{dvips}%
+\to \everyresetspecials
+
+%D \macros
+%D {PDFMPformoffset}
+%D
+%D In \PDF, forms are clipped and therefore we have to take
+%D precautions to get this right. Since this is related to
+%D objects, we use the same offset as used there.
+
+\def\PDFMPformoffset{\objectoffset}
+
+%D \macros
+%D {insertMPfile}
+%D
+%D Bypassing the special driver and figure mechanism is not
+%D that nice but saves upto 5\% time in embedding \METAPOST\
+%D graphics by using the low level \PDF\ converter directly,
+%D given of course that we use \PDFTEX. As a result we need to
+%D fool around with the object trigger.
+
+\newtoks\everyinsertMPfile
+
+%D First we present the reasonable fast alternative that we
+%D happily used for some time.
+%D
+%D \starttyping
+%D \def\insertMPfile#1#2%
+%D {\ifx\undefined\externalfigure
+%D \message{[insert file #1 here]}%
+%D \else
+%D \bgroup
+%D \the\everyinsertMPfile
+%D \externalfigure
+%D [#1]
+%D [\c!type=\c!mps,\c!object=\v!no,%
+%D \c!symbol=\v!yes,\c!reset=\v!yes,%
+%D \c!maxwidth=,\c!maxheight=,%
+%D \c!frame=\v!off,\c!background=,%
+%D #2]%
+%D \egroup
+%D \fi}
+%D \stoptyping
+%D
+%D However, on a 1 Gig Pentium, the next alternative saves
+%D us 20 seconds run time for the 300 page \METAFUN\ manual:
+
+\let\insertMPfileARG\insertMPfile
+
+\def\insertMPfile#1#2% in context #2 is empty
+ {\doifelsenothing{#2}{\doinsertMPfile{#1}}{\insertMPfileARG{#1}{#2}}}
+
+\def\includeMPasEPS#1% untested !!
+ {\bgroup
+ \message{[MP as EPS #1]}%
+ \the\everyinsertMPfile
+ \dogetEPSboundingbox{#1}\!!widtha\!!heighta\!!widthb\!!heightb
+ \setbox\scratchbox\vbox to \!!heightb
+ {\vfill
+ \let \@@DriverImageType \c!mps
+ \def \@@DriverImageFile {#1}%
+ \edef\@@DriverImageWidth {\the\!!widthb }%
+ \edef\@@DriverImageHeight{\the\!!heightb}%
+ \doinsertfile}%
+ \wd\scratchbox\!!widthb
+ \dp\scratchbox\zeropoint
+ \box\scratchbox
+ \egroup}
+
+\def\includeMPasPDF#1%
+ {\bgroup
+ \the\everyinsertMPfile
+ \ifinobject \else \chardef\makeMPintoPDFobject\plustwo \fi % when needed
+ \convertMPtoPDF{#1}{1}{1}% no \plusone !
+ \egroup}
+
+%D So, using a low level approach (thereby avoiding the slower
+%D figure analysis macros) pays off. This kind of
+%D optimizations are a bit tricky since we must make sure that
+%D special resources end up in the (PDF) files. Because the
+%D \METAPOST\ to \PDF\ can handle objects itself, it is not
+%D that complicated.
+
+%D We hook a couple of initializations into the graphic
+%D macros.
+
+\appendtoks
+ \let\figuretypes\c!mps
+ \runutilityfilefalse
+ \consultutilityfilefalse
+\to \everyinsertMPfile
+
+%D One more: (still needed?)
+
+\startMPextensions
+ def initialize_form_numbers =
+ do_initialize_numbers;
+ enddef;
+\stopMPextensions
+
+\startMPinitializations
+ HSize:=\the\hsize ;
+ VSize:=\the\vsize ;
+\stopMPinitializations
+
+\startMPextensions
+ vardef ForegroundBox =
+ unitsquare xysized(HSize,VSize)
+ enddef ;
+ vardef PageFraction =
+ if \lastpage>1: (\realfolio-1)/(\lastpage-1) else: 1 fi
+ enddef ;
+\stopMPextensions
+
+%D And some more. These are not really needed since we
+%D don't use the normal figure inclusion macros any longer.
+
+\appendtoks
+ \externalfigurepostprocessors\emptytoks % safeguard
+\to \everyinsertMPfile
+
+%D We also take care of disabling fancy figure features, that
+%D can terribly interfere when dealing with symbols,
+%D background graphics and running (postponed) graphics.
+%D You won't believe me if I tell you what funny side effects
+%D can occur. One took me over a day to uncover when
+%D processing the screen version of the \METAFUN\ manual.
+
+%D For my eyes only:
+
+\def\doifelseMPgraphic#1{\doifdefinedelse{\@@MPG#1}}
+
+%D \macros
+%D {startMPcolor}
+%D
+%D The following time consuming method uses \METAPOST\ to
+%D calculate a color. This enables a match between colors
+%D resulting from a complex calculation (e.g. for a title
+%D page) and those in the text.
+
+% \startuseMPgraphic{somecolors}
+% color c[] ; c[1] := .7[red,green] ; c[2] := .7[blue,yellow] ;
+% \stopuseMPgraphic
+
+% \startMPcolor[shade-1][t=.2,a=1]
+% \includeMPgraphic{somecolors} ; fill fullcircle withcolor c[1] ;
+% \stopMPcolor
+
+% \startMPcolor[shade-2][t=.2,a=1]
+% \includeMPgraphic{somecolors} ; fill fullcircle withcolor c[2] ;
+% \stopMPcolor
+
+% \blackrule[width=\hsize,height=4cm,color=shade-1]
+% \blackrule[width=\hsize,height=4cm,color=shade-2]
+
+\def\startMPcolor
+ {\dodoubleempty\dostartMPcolor}
+
+\long\def\dostartMPcolor[#1][#2]#3\stopMPcolor % slow but sometimes handy
+ {\startnointerference
+ \def\handleMPgraycolor{\expanded{\defineglobalcolor[#1][s=\!MPgMPa1,#2]}}%
+ \def\handleMPrgbcolor {\expanded{\defineglobalcolor[#1][r=\!MPgMPa1,g=\!MPgMPa2,b=\!MPgMPa3,#2]}}%
+ \def\handleMPcmykcolor{\expanded{\defineglobalcolor[#1][c=\!MPgMPa1,m=\!MPgMPa2,y=\!MPgMPa3,k=\!MPgMPa4,#2]}}%
+ \startMPcode#3\stopMPcode
+ \stopnointerference}
+
+%D New:
+
+\definelayerpreset % no dx,dy - else nasty non-mp placement
+ [mp]
+ [\c!y=-\MPury bp,
+ \c!x=\MPllx bp,
+ \c!method=\v!fit]
+
+\definelayer
+ [mp]
+ [\c!preset=mp]
+
+%D Usage:
+%D
+%D \starttyping
+%D \defineproperty[one][layer][state=start]
+%D \defineproperty[two][layer][state=stop]
+%D
+%D \startuseMPgraphic{step-1}
+%D fill fullcircle scaled 10cm withcolor red ;
+%D \stopuseMPgraphic
+%D
+%D \startuseMPgraphic{step-2}
+%D fill fullcircle scaled 5cm withcolor green ;
+%D \stopuseMPgraphic
+%D
+%D \setlayer[mp]{\property[one]{\useMPgraphic{step-1}}}
+%D \setlayer[mp]{\property[two]{\useMPgraphic{step-2}}}
+%D
+%D \ruledhbox{\flushlayer[mp]}
+%D \stoptyping
+%D
+%D Reusing graphics is also possible (now):
+%D
+%D \starttyping
+%D \startreusableMPgraphic{axis}
+%D tickstep := 1cm ; ticklength := 2mm ;
+%D drawticks unitsquare xscaled 4cm yscaled 3cm shifted (-1cm,-1cm) ;
+%D tickstep := tickstep/2 ; ticklength := ticklength/2 ;
+%D drawticks unitsquare xscaled 4cm yscaled 3cm shifted (-1cm,-1cm) ;
+%D \stopreusableMPgraphic
+%D
+%D \startuseMPgraphic{demo}
+%D drawpoint "1cm,1.5cm" ;
+%D \stopuseMPgraphic
+%D
+%D \definelayer[mp][preset=mp]
+%D \setlayer[mp]{\reuseMPgraphic{axis}}
+%D \setlayer[mp]{\useMPgraphic{demo}}
+%D \ruledhbox{\flushlayer[mp]}
+%D \stoptyping
+
+%D \macros
+%D {startstaticMPfigure,useMPstaticfigure}
+%D
+%D Static figures are processed only when there has been
+%D something changed. Here is Aditya Mahajan's testcase:
+%D
+%D \startbuffer
+%D \startstaticMPfigure{circle}
+%D fill fullcircle scaled 1cm withcolor blue;
+%D \stopstaticMPfigure
+%D
+%D \startstaticMPfigure{axis}
+%D drawarrow (0,0)--(2cm,0) ;
+%D drawarrow (0,0)--(0,2cm) ;
+%D label.llft(textext("(0,0)") ,origin) ;
+%D \stopstaticMPfigure
+%D \stopbuffer
+%D
+%D \typebuffer \getbuffer
+
+\def\usestaticMPfigure[#1]%
+ {\dodoubleempty\externalfigure[\jobname-#1.pdf]}
+
+\def\startstaticMPfigure
+ {\begingroup
+ \obeyMPlines
+ \dostartstaticMPfigure}
+
+\def\dostartstaticMPfigure#1#2\stopstaticMPfigure
+ {\startstaticMPgraphic{\jobname-#1}#2\stopstaticMPgraphic
+ \endgroup}
+
+% faster, but more tricky
+%
+% \def\startstaticMPfigure
+% {\doifmodeelse{*\v!first}
+% {\begingroup
+% \obeyMPlines
+% \dostartstaticMPfigure}
+% {\gobbleuntil\stopstaticMPfigure}}
+%
+% \def\dostartstaticMPfigure#1#2\stopstaticMPfigure
+% {\startMPstaticgraphic{\jobname-#1}#2\stopMPstaticgraphic
+% % dirty trick, don't register, so no second main run of texexec:
+% \global\advance\nofMPgraphics \minusone
+% \endgroup}}
+
+%D New:
+
+% \appendtoks \closeMPgraphicfiles \to \everystoptext
+
+%D New:
+
+\newconditional\manyMPspecials % when set to true, > 1000 specials can be used
+
+\settrue \manyMPspecials % per 1/4/2006
+
+\prependtoks
+ _special_div_ := 1000\ifconditional\manyMPspecials0\fi ;
+\to \MPextensions
+
+%D Needed (will become default):
+
+\prependtoks
+ \resetlanguagespecifics
+\to \everyMPgraphic
+
+% Done.
+
+\protect \endinput
+
+%D Experimental:
+
+\appendtoks
+ \ifrunMPgraphics \ifcase\systemcommandmode \or
+ \runMPgraphicsfalse
+ \fi \fi
+\to \everyjob
+
+% also:
+%
+% linecap := rounded ;
+% linejoin := rounded ;
+% drawoptions () ;
diff --git a/Master/texmf-dist/tex/context/base/meta-ini.mkiv b/Master/texmf-dist/tex/context/base/meta-ini.mkiv
new file mode 100644
index 00000000000..cb2aa0ca756
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/meta-ini.mkiv
@@ -0,0 +1,1124 @@
+%D \module
+%D [ file=meta-ini,
+%D version=2008.03.25,
+%D title=\METAPOST\ Graphics,
+%D subtitle=Initialization,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright=PRAGMA]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{MetaPost Graphics / Initializations}
+
+\unprotect
+
+\startmessages dutch library: metapost
+ title: metapost
+ 1: metapost bibliotheek -- wordt geladen
+\stopmessages
+
+\startmessages english library: metapost
+ title: metapost
+ 1: loading metapost library --
+\stopmessages
+
+\startmessages german library: metapost
+ title: metapost
+ 1: Lade metapost Bibliothek --
+\stopmessages
+
+\startmessages czech library: metapost
+ title: metapost
+ 1: loading metapost library --
+\stopmessages
+
+\startmessages italian library: metapost
+ title: metapost
+ 1: caricamento della libreria metapost --
+\stopmessages
+
+\startmessages norwegian library: metapost
+ title: metapost
+ 1: metapost bibliotek -- blir lest inn
+\stopmessages
+
+\startmessages romanian library: metapost
+ title: metapost
+ 1: se incarca biblioteca metapost --
+\stopmessages
+
+\startmessages french library: metapost
+ title: metapost
+ 1: chargement de la bibliothèque metapost --
+\stopmessages
+
+%D Instead of sharing code with \MKII, I decided to copy
+%D the code. Otherwise maintainance becomes a pain and after all,
+%D the \MKII\ code will not change.
+
+\let \useMETAFUNformattrue\relax \let \useMETAFUNformatfalse\relax
+\let \longMPlinestrue\relax \let \longMPlinesfalse\relax
+\let \runMPgraphicstrue\relax \let \runMPgraphicsfalse\relax
+\let \runMPTEXgraphicstrue\relax \let \runMPTEXgraphicsfalse\relax
+\let \MPstaticgraphictrue\relax \let \MPstaticgraphicfalse\relax
+\let\forceMPTEXgraphictrue\relax \let\forceMPTEXgraphicfalse\relax
+
+\let \obeyMPlines\relax
+\let \forceMPTEXcheck\gobbleoneargument
+\let\maxnofMPgraphics\scratchcounter
+
+\newtoks \MPextensions % mp, once
+\newtoks \MPinitializations % tex, each
+\newtoks \MPuserinclusions % mp, user
+\newtoks \MPfinalizations % mp, user
+\newtoks \everyMPgraphic % mp
+\newtoks \everyMPTEXgraphic % tex
+
+\long\def\startMPextensions#1\stopMPextensions
+ {\global\MPextensions\expandafter{\the\MPextensions#1}}
+
+\long\def\startMPinitializations#1\stopMPinitializations
+ {\global\MPinitializations\expandafter{\the\MPinitializations#1}}
+
+\long\def\startMPinclusions
+ {\dosingleempty\dostartMPinclusions}
+
+\long\def\dostartMPinclusions[#1]#2\stopMPinclusions
+ {\doifnot{#1}{+}{\global\MPuserinclusions\emptytoks}%
+ \global\MPuserinclusions\expandafter{\the\MPuserinclusions#2}}
+
+\def\MPinclusions
+ {\dosingleempty\doMPinclusions}
+
+\long\def\doMPinclusions[#1]#2%
+ {\doifnot{#1}{+}{\global\MPuserinclusions\emptytoks}%
+ \global\MPuserinclusions\expandafter{\the\MPuserinclusions#2}}
+
+\ifx \overlaywidth \undefined \def \overlaywidth {4cm} \fi
+\ifx \overlayheight \undefined \def \overlayheight {3cm} \fi
+\ifx \overlaylinewidth \undefined \def \overlaylinewidth {0pt} \fi
+
+\def\presetMPdefinitions
+ {\edef\overlaywidth {\overlaywidth \space}%
+ \edef\overlayheight {\overlayheight \space}%
+ \edef\overlaylinewidth{\overlaylinewidth\space}%
+ \edef\currentwidth {\the\hsize \space}%
+ \edef\currentheight {\the\vsize \space}}
+
+\def\currentMPformat{metafun}
+
+\long\def\processMPgraphic#1% todo: extensions and inclusions outside beginfig
+ {\blabelgroup
+ \enableincludeMPgraphics
+ \the\everyMPgraphic
+ \presetMPdefinitions
+ \setMPrandomseed % this has to change
+ % we need to preexpand the token lists
+ \setbox\MPgraphicbox\hbox\bgroup
+ \ctxlua {
+ metapost.graphic(
+ "\currentMPformat",
+ \@EA\!!bs\the\MPinitializations;\theMPrandomseed;#1;\!!es, % code
+ \@EA\@EA\@EA\!!bs\@EA\the\@EA\MPextensions\@EA;\the\MPuserinclusions;\!!es % optional preamble
+ )
+ }%
+ \egroup
+ \placeMPgraphic
+ \global\MPextensions\emptytoks
+ \global\MPuserinclusions\emptytoks
+ \elabelgroup}
+
+\newif\ifsetMPrandomseed \setMPrandomseedtrue % false by default
+
+\def\setMPrandomseed
+ {\let\theMPrandomseed\empty
+ \ifsetMPrandomseed \ifx\getrandomnumber\undefined \else
+ \getrandomnumber\localMPseed\zerocount{4095}%
+ \def\theMPrandomseed{randomseed:=\localMPseed}%
+ \fi\fi}
+
+%D To be integrated
+
+\def\@@MPG{@MPG@}
+
+\def\doifMPgraphicelse#1%
+ {\blabelgroup
+ \doifdefinedelse{\@@MPG#1}%
+ {\elabelgroup\firstoftwoarguments}
+ {\elabelgroup\secondoftwoarguments}}
+
+\def\includeMPgraphic#1%
+ {\executeifdefined{\@@MPG#1};}
+
+\def\enableincludeMPgraphics
+ {\let\handleuseMPgraphic \secondoftwoarguments
+ \let\handlereusableMPgraphic\secondoftwoarguments}
+
+\let\MPdrawingdata\empty
+
+\newif\ifMPdrawingdone \MPdrawingdonefalse
+\newif\ifMPshiftdrawing \MPshiftdrawingfalse
+
+\def\resetMPdrawing
+ {\globallet\MPdrawingdata\empty
+ \global\MPdrawingdonefalse}
+
+\def\pushMPdrawing
+ {\globalpushmacro\MPdrawingdata
+ \globallet\MPdrawingdata\empty}
+
+\def\popMPdrawing
+ {\globalpopmacro\MPdrawingdata}
+
+\def\getMPdrawing
+ {\ifMPdrawingdone
+ \expandafter\processMPgraphic\expandafter{\MPdrawingdata}%
+ \fi}
+
+\def\startMPdrawing
+ {\dosingleempty\dostartMPdrawing}
+
+\long\def\dostartMPdrawing[#1]#2\stopMPdrawing
+ {\relax
+ \bgroup
+ \enableincludeMPgraphics
+ \presetMPdefinitions % in case #2 has measures
+ \doifelse{#1}{-}{\convertargument#2\to\asciia}{\long\def\asciia{#2}}%
+ \long\xdef\MPdrawingdata{\MPdrawingdata\asciia}%
+ \egroup}
+
+\let\stopMPdrawing\relax
+
+\let\MPdrawingdata\empty
+
+\newif\ifMPdrawingdone \MPdrawingdonefalse
+\newif\ifMPshiftdrawing \MPshiftdrawingfalse
+
+\def\resetMPdrawing
+ {\globallet\MPdrawingdata\empty
+ \global\MPdrawingdonefalse}
+
+\def\pushMPdrawing
+ {\globalpushmacro\MPdrawingdata
+ \globallet\MPdrawingdata\empty}
+
+\def\popMPdrawing
+ {\globalpopmacro\MPdrawingdata}
+
+\def\getMPdrawing
+ {\ifMPdrawingdone
+ \expandafter\processMPgraphic\expandafter{\MPdrawingdata}%
+ \fi}
+
+\def\startMPdrawing
+ {\dosingleempty\dostartMPdrawing}
+
+\long\def\dostartMPdrawing[#1]#2\stopMPdrawing
+ {\relax
+ \bgroup
+ \enableincludeMPgraphics
+ \presetMPdefinitions % in case #2 has measures
+ \doifelse{#1}{-}{\convertargument#2\to\asciia}{\long\def\asciia{#2}}%
+ \long\xdef\MPdrawingdata{\MPdrawingdata\asciia}%
+ \egroup}
+
+\let\stopMPdrawing\relax
+
+\long\def\startMPclip#1#2\stopMPclip
+ {\blabelgroup
+ \long\setgvalue{MPC:#1}{\ctxlua{metapost.getclippath(\!!bs#2\!!es)}}%
+ \elabelgroup}
+
+\let\stopMPclip\relax
+
+\def\grabMPclippath#1#2#3#4#5%
+ {\blabelgroup
+ \edef\width {#3\space}\let\overlaywidth \width
+ \edef\height{#4\space}\let\overlayheight\height
+ \doifundefined{MPC::#1}
+ {\doifdefinedelse{MPC:#1}
+ {\xdef\MPclippath{\getvalue{MPC:#1}}%
+ \ifx\MPclippath\empty\xdef\MPclippath{#5}\fi
+ \setxvalue{MPC::#1}{\MPclippath}}
+ {\setxvalue{MPC::#1}{#5}}}%
+ \xdef\MPclippath{\getvalue{MPC::#1}}%
+ % #2 : method is obsolete, only pdf now, we can always
+ % gsub the result to ps
+ \elabelgroup}
+
+%D Next we will use these support macros.
+
+\startMPextensions
+ if unknown context_tool: input mp-tool; fi;
+ if unknown context_spec: input mp-spec; fi;
+ if unknown context_grph: input mp-grph; fi;
+\stopMPextensions
+
+%D Since we want lables to follow the document settings, we
+%D also set the font related variables.
+
+\startMPinitializations % scale is not yet ok
+ defaultfont:="\truefontname{Regular}";
+ defaultscale:=\the\bodyfontsize/10pt;
+\stopMPinitializations
+
+\startMPinitializations % scale is not yet ok
+ defaultfont:="rm-lmtt10";
+\stopMPinitializations
+
+%D In order to support fancy text features (like outline
+%D fonts), we set:
+
+% \startMPextensions
+% graphictextformat:="context";
+% graphictextdirective "\the\everyMPTEXgraphic";
+% \stopMPextensions
+
+%D A signal that we're in combines \CONTEXT||\METAFUN mode:
+
+\startMPextensions
+ string contextversion;
+ contextversion:="\contextversion";
+\stopMPextensions
+
+%D Some safeguards:
+%D
+%D \starttyping
+%D \appendtoks \cleanupfeatures \to \everyMPgraphic
+%D \stoptyping
+%D
+%D No, we don't want that (else we loose UTF etc).
+
+%D Another one:
+
+\prependtoks \MPstaticgraphictrue \to \everyoverlay
+\prependtoks \MPstaticgraphictrue \to \everypagebody
+
+% %D We save the number of graphics for the sake of \TEXEXEC.
+%
+% \newcounter\totalnofMPgraphics
+%
+% \def\thenofMPgraphics{\the\nofMPgraphics} % from supp-mps
+%
+% \appendtoks
+% \savecurrentvalue\totalnofMPgraphics\thenofMPgraphics
+% \to \everybye
+
+%D \macros
+%D {setupMPvariables}
+%D
+%D When we build collections of \METAPOST\ graphics, like
+%D background and buttons, the need for passing settings
+%D arises. By (mis|)|using the local prefix that belongs to
+%D \type {\framed}, we get a rather natural interface to
+%D backgrounds. To prevent conflicts, we will use the \type
+%D {-} in \METAPOST\ specific variables, like:
+%D
+%D \starttyping
+%D \setupMPvariables[meta:button][size=20pt]
+%D \stoptyping
+
+\def\@@meta{meta:}
+
+\def\setupMPvariables
+ {\dodoubleempty\dosetupMPvariables}
+
+\def\dosetupMPvariables[#1][#2]%
+ {\ifsecondargument
+ \getrawparameters[#1:][#2]% brr, todo: [\@@meta#1:]
+ \else
+ \getrawparameters[\@@meta][#1]%
+ \fi}
+
+\let\@@framed\s!unknown
+
+\def\MPvariable#1%
+ {\csname
+ \ifcsname\@@framed\@@meta#1\endcsname\@@framed\fi\@@meta#1%
+ \endcsname}
+
+\let\MPvar\MPvariable
+
+\let\setMPvariables\setupMPvariables
+
+\def\MPrawvar#1#2{\csname#1:#2\endcsname}
+
+%D \macros
+%D {startuniqueMPgraphic, uniqueMPgraphic}
+%D
+%D This macros is probably of most use to myself, since I like
+%D to use graphics that adapt themselves. The next \METAPOST\
+%D kind of graphic is both unique and reused when possible.
+%D
+%D \starttyping
+%D \defineoverlay[example][\uniqueMPgraphic{test}]
+%D
+%D \startuniqueMPgraphic {test}
+%D draw unitsquare xscaled \overlaywidth yscaled \overlayheight ;
+%D \stopuniqueMPgraphic
+%D \stoptyping
+
+\def\overlaystamp % watch the \MPcolor, since colors can be redefined
+ {\overlaywidth:\overlayheight:\overlaydepth:\MPcolor\overlaycolor:\MPcolor\overlaylinecolor}
+
+%D A better approach is to let additional variables play a role
+%D in determining the uniqueness. In the next macro, the
+%D second, optional, argument is used to guarantee the
+%D uniqueness, as well as prepare variables for passing them to
+%D \METAPOST.
+%D
+%D \starttyping
+%D \startuniqueMPgraphic{meta:hash}{gap,angle,...}
+%D \stoptyping
+%D
+%D The calling macro also accepts a second argument. For
+%D convenient use in overlay definitions, we use \type {{}}
+%D instead of \type {[]}.
+%D
+%D \starttyping
+%D \uniqueMPgraphic{meta:hash}{gap=10pt,angle=30}
+%D \stoptyping
+
+\newcount\MPobjectcounter
+\newif \ifMPshiftdrawing \MPshiftdrawingfalse
+\newbox \MPgraphicbox
+
+\def\placeMPgraphic
+ {\ifMPshiftdrawing
+ \edef\next
+ {\wd\MPgraphicbox\the\wd\MPgraphicbox
+ \ht\MPgraphicbox\the\ht\MPgraphicbox
+ \dp\MPgraphicbox\the\dp\MPgraphicbox}%
+ \setbox\MPgraphicbox\hbox
+ {\hskip\MPllx\onebasepoint\raise\MPlly\onebasepoint\box\MPgraphicbox}%
+ \next
+ \fi
+ \box\MPgraphicbox}
+
+\def\reuseMPbox#1#2#3#4#5% space delimiting would save some tokens
+ {\xdef\MPllx{#2}% but it's not worth the effort and looks
+ \xdef\MPlly{#3}% ugly as well
+ \xdef\MPurx{#4}%
+ \xdef\MPury{#5}%
+ \getobject{MP}{#1}}
+
+\long\def\handleuniqueMPgraphic#1#2#3%
+ {\blabelgroup
+ \def\@@meta{#1:}%
+ \extendMPoverlaystamp{#2}% incl prepare
+ \ifundefined{\@@MPG\overlaystamp:#1}%
+ \enableincludeMPgraphics
+ \forgetall
+ \global\advance\MPobjectcounter\plusone
+ \setobject{MP}{\number\MPobjectcounter}\vbox{\processMPgraphic{#3}}%
+ \setxvalue{\@@MPG\overlaystamp:#1}{\noexpand\reuseMPbox{\number\MPobjectcounter}{\MPllx}{\MPlly}{\MPurx}{\MPury}}%
+ \fi
+ \getvalue{\@@MPG\overlaystamp:#1}%
+ \elabelgroup}
+
+\long\def\startuniqueMPgraphic
+ {\blabelgroup
+ \dodoublegroupempty\dostartuniqueMPgraphic}
+
+\long\def\dostartuniqueMPgraphic#1#2#3\stopuniqueMPgraphic%
+ {\long\setgvalue{\@@MPG#1}{\handleuniqueMPgraphic{#1}{#2}{#3}}%
+ \elabelgroup}
+
+\unexpanded\def\uniqueMPgraphic
+ {\dodoublegroupempty\douniqueMPgraphic}
+
+\def\douniqueMPgraphic#1#2%
+ {\blabelgroup
+ \setupMPvariables[#1][#2]%
+ \getvalue{\@@MPG#1}\empty
+ \elabelgroup}
+
+\let\stopuniqueMPcode \relax % so that we can use it in \expanded
+
+\long\def\handleuseMPgraphic#1#2#3%
+ {\blabelgroup
+ \forgetall % check this
+ \def\@@meta{#1:}%
+ \prepareMPvariables{#2}%
+ \enableincludeMPgraphics
+ \processMPgraphic{#3}%
+ \elabelgroup}
+
+\long\def\startuseMPgraphic
+ {\blabelgroup
+ \dodoublegroupempty\dostartuseMPgraphic}
+
+\long\def\dostartuseMPgraphic#1#2#3\stopuseMPgraphic
+ {\long\setgvalue{\@@MPG#1}{\handleuseMPgraphic{#1}{#2}{#3}}%
+ \elabelgroup}
+
+\long\def\startusableMPgraphic % redundant but handy
+ {\blabelgroup
+ \dodoublegroupempty\dostartusableMPgraphic}
+
+\long\def\dostartusableMPgraphic#1#2#3\stopusableMPgraphic
+ {\long\setgvalue{\@@MPG#1}{\handleuseMPgraphic{#1}{#2}{#3}}%
+ \elabelgroup}
+
+\let\stopuseMPgraphic \relax % so that we can use it in \expanded
+\let\stopusableMPgraphic \relax % so that we can use it in \expanded
+
+\long\def\handlereusableMPgraphic#1#2#3%
+ {\blabelgroup
+ \def\@@meta{#1:}%
+ \prepareMPvariables{#2}%
+ \enableincludeMPgraphics
+ \global\advance\MPobjectcounter\plusone
+ \setobject{MP}{\number\MPobjectcounter}\vbox{\processMPgraphic{#3}}%
+ \setxvalue{\@@MPG#1}{\noexpand\reuseMPbox{\number\MPobjectcounter}{\MPllx}{\MPlly}{\MPurx}{\MPury}}%
+ \getvalue{\@@MPG#1}%
+ \elabelgroup}
+
+\long\def\startreusableMPgraphic
+ {\blabelgroup
+ \dodoublegroupempty\dostartreusableMPgraphic}
+
+\long\def\dostartreusableMPgraphic#1#2#3\stopreusableMPgraphic
+ {\long\setgvalue{\@@MPG#1}{\handlereusableMPgraphic{#1}{#2}{#3}}%
+ \elabelgroup}
+
+\let\stopreusableMPgraphic \relax % so that we can use it in \expanded
+
+\unexpanded\def\useMPgraphic
+ {\dodoublegroupempty\douseMPgraphic}
+
+\def\douseMPgraphic#1#2%
+ {\blabelgroup
+ \doifsomething{#2}{\setupMPvariables[#1][#2]}%
+ \getvalue{\@@MPG#1}\empty
+ \elabelgroup}
+
+\let\reuseMPgraphic \useMPgraphic % we can save a setup here if needed
+\let\reusableMPgraphic\reuseMPgraphic % we can save a setup here if needed
+
+\let\stopuseMPcode \relax % so that we can use it in \expanded
+\let\stopusableMPcode \relax % so that we can use it in \expanded
+\let\stopreusableMPcode \relax % so that we can use it in \expanded
+\let\stopuniqueMPcode \relax % so that we can use it in \expanded
+
+\def\enableincludeMPgraphics
+ {\let\handleuseMPgraphic \thirdofthreearguments
+ \let\handlereusableMPgraphic\thirdofthreearguments}
+
+%D \macros
+%D {startuniqueMPpagegraphic,uniqueMPpagegraphic}
+%D
+%D Experimental.
+
+\def\MPpageprefix{\doifoddpageelse oe:}
+
+\def\overlaypagestamp
+ {\MPpageprefix\overlaywidth:\overlayheight:\overlaydepth:\MPcolor\overlaycolor:\MPcolor\overlaylinecolor}
+
+\long\def\startuniqueMPpagegraphic
+ {\blabelgroup
+ \dodoublegroupempty\dostartuniqueMPpagegraphic}
+
+\long\def\dostartuniqueMPpagegraphic#1#2#3\stopuniqueMPpagegraphic
+ {\long\setgvalue{\@@MPG o:#1}{\handleuniqueMPgraphic{o:#1}{#2}{#3}}%
+ \long\setgvalue{\@@MPG e:#1}{\handleuniqueMPgraphic{e:#1}{#2}{#3}}%
+ \elabelgroup}
+
+\unexpanded\def\uniqueMPpagegraphic
+ {\dodoublegroupempty\douniqueMPpagegraphic}
+
+\def\douniqueMPpagegraphic#1#2%
+ {\blabelgroup
+ \let\overlaystamp\overlaypagestamp
+ \setupMPvariables[\MPpageprefix#1][#2]% prefix is new here
+ \getvalue{\@@MPG\MPpageprefix#1}{}%
+ \elabelgroup}
+
+%D One way of defining a stamp is:
+%D
+%D \starttyping
+%D \def\extendMPoverlaystamp#1%
+%D {\def\docommand##1%
+%D {\edef\overlaystamp{\overlaystamp:\MPvariable{##1}}}%
+%D \processcommalist[#1]\docommand}
+%D \stoptyping
+
+%D Since we need to feed \METAPOST\ with expanded dimensions,
+%D we introduce a dedicated expansion engine.
+
+\def\prepareMPvariable#1%
+ {\ifundefined{\@@framed\@@meta#1}%
+ \doprepareMPvariable{\@@meta#1}%
+ \else
+ \doprepareMPvariable{\@@framed\@@meta#1}%
+ \fi}
+
+% \startlines
+% \def\xxx{\lineheight} \doprepareMPvariable{xxx} \xxx
+% \def\xxx{2pt} \doprepareMPvariable{xxx} \xxx
+% \def\xxx{2} \doprepareMPvariable{xxx} \xxx
+% \def\xxx{\scratchcounter} \doprepareMPvariable{xxx} \xxx
+% \def\xxx{red} \doprepareMPvariable{xxx} \xxx
+% \def\xxx{0.4} \doprepareMPvariable{xxx} \xxx
+% \stoplines
+
+\def\doprepareMPvariable#1%
+ {\edef\theMPvariable{\getvalue{#1}}%
+ \doifelsenothing\theMPvariable
+ {\setevalue{#1}{\MPcolor{black}}}
+ {\defconvertedcommand\ascii\theMPvariable % otherwise problems
+ \doifcolorelse \ascii % with 2\bodyfontsize
+ {\setevalue{#1}{\MPcolor\theMPvariable}}
+ {% can be aux macro
+ \setbox\scratchbox\hbox{\scratchdimen\theMPvariable sp}%
+ \ifdim\wd\scratchbox=\zeropoint
+ % \scratchcounter\theMPvariable
+ % \setevalue{#1}{\the\scratchcounter}%
+ % also accepts 0.number :
+ \setevalue{#1}{\number\theMPvariable}%
+ \else
+ \scratchdimen\theMPvariable
+ \setevalue{#1}{\the\scratchdimen}%
+ \fi}}}
+
+%D We redefine \type {\extendMPoverlaystamp} to preprocess
+%D variables using \type {\prepareMPvariable}.
+
+\def\doextendMPoverlaystamp#1%
+ {\prepareMPvariable{#1}%
+ \edef\overlaystamp{\overlaystamp:\MPvariable{#1}}}
+
+\def\extendMPoverlaystamp#1%
+ {\processcommalist[#1]\doextendMPoverlaystamp}
+
+\def\prepareMPvariables#1%
+ {\processcommalist[#1]\prepareMPvariable}
+
+%D \macros
+%D {MPdatafile}
+%D
+%D We redefine a macro from \type {supp-mps.tex}:
+
+\def\MPdataMPDfile{\jobname-mp.mpd}
+\def\MPdataMPOfile{\jobname-mp.mpo}
+\def\MPdataMPYfile{\jobname-mp.mpy}
+
+\startMPextensions
+ boolean collapse_data; collapse_data:=true;
+ def data_mpd_file = "\MPdataMPDfile" enddef ;
+ def data_mpo_file = "\MPdataMPOfile" enddef ;
+ def data_mpy_file = "\MPdataMPYfile" enddef ;
+\stopMPextensions
+
+\chardef\currentMPgraphic\plusone
+
+\def\getMPdata
+ {\let\MPdata\secondoftwoarguments
+ \startreadingfile
+ \startnointerference
+ \readlocfile\MPdataMPDfile\donothing\donothing
+ \stopnointerference
+ \stopreadingfile}
+
+%D \macros
+%D {MPrunfile}
+%D
+%D This one is more abstract and does not assume knowledge
+%D of buffer prefixes.
+
+\def\MPrunfile#1%
+ {\bufferprefix mprun.#1}
+
+%D For the moment, the next one is a private macro:
+
+% TODO ! ! ! ! ! !
+
+\def\processMPbuffer
+ {\dosingleempty\doprocessMPbuffer}
+
+\def\doprocessMPbuffer[#1]%
+ {\doifelsenothing{#1}
+ {\doprocessMPbuffer[\jobname]}
+ {\processMPgraphic{\ctxlua{tex.sprint(tex.ctxcatcodes,buffers.collect(string.split("#1",",")))}}}}
+
+\def\runMPbuffer
+ {\dosingleempty\dorunMPbuffer}
+
+\def\dorunMPbuffer[#1]% processing only
+ {\startnointerference\doprocessMPbuffer[#1]\stopnointerference}
+
+%D \macros
+%D {startMPenvironment, resetMPenvironment}
+%D
+%D In order to synchronize the main \TEX\ run and the runs
+%D local to \METAPOST, environments can be passed.
+
+\ifx\everyMPTEXgraphic\undefined
+ \newtoks\everyMPTEXgraphic
+\fi
+
+%D A more general way of passing environments is:
+
+% \def\startMPenvironment % second arg gobbles spaces, so that reset gives \emptytoks
+% {\bgroup
+% \catcode`\^^M=\@@space
+% \dodoubleempty\dostartMPenvironment}
+
+% \long\def\dostartMPenvironment[#1][#2]#3\stopMPenvironment
+% {\egroup
+% \doif{#1}\s!reset\resetMPenvironment % reset mp toks
+% \doif{#1}\v!global{#3}% % use in main doc too
+% \doif{#1}+{#3}% % use in main doc too
+% \defconvertedargument\ascii{#3}%
+% \expandafter\appendtoks\ascii\to\everyMPTEXgraphic}
+
+% \def\resetMPenvironment
+% {\everyMPTEXgraphic\emptytoks % = is really needed !
+% \startMPenvironment
+% \global\loadfontfileoncetrue
+% \stopMPenvironment}
+
+\def\startMPenvironment % second arg gobbles spaces, so that reset gives \emptytoks
+ {\dodoubleempty\dostartMPenvironment}
+
+\long\def\dostartMPenvironment[#1][#2]#3\stopMPenvironment
+ {\doif{#1}\s!reset\resetMPenvironment % reset mp toks
+ \doif{#1}\v!global{#3}% % use in main doc too
+ \doif{#1}+{#3}% % use in main doc too
+ \ctxlua{metapost.tex.set(\!!bs\detokenize{#3}\!!es)}}
+
+\def\resetMPenvironment
+ {\ctxlua{metapost.tex.reset()}}
+
+\resetMPenvironment
+
+\def\useMPenvironmentbuffer[#1]%
+ {\ctxlua{metapost.tex.set(buffers.content("#1"))}}
+
+% \useMPenvironmentbuffer[mp] % hm, what is this?
+
+%D This command takes \type {[reset]} as optional
+%D argument.
+%D
+%D \starttyping
+%D \startMPenvironment
+%D \setupbodyfont[pos,14.4pt]
+%D \stopMPenvironment
+%D
+%D \startMPcode
+%D draw btex \sl Hans Hagen etex scaled 5 ;
+%D \stopMPcode
+%D \stoptyping
+%D
+%D The most simple case:
+
+\long\def\startMPcode#1\stopMPcode
+ {\processMPgraphic{#1}}
+
+\let\stopMPcode\relax
+
+%D The \type {\resetMPenvironment} is a quick way to erase
+%D the token list.
+%D
+%D You should be aware of independencies. For instance, if you use a font
+%D in a graphic that is not used in the main document, you need to load the
+%D typescript at the outer level (either directly or by using the global
+%D option).
+%D
+%D \starttyping
+%D \usetypescript[palatino][texnansi]
+%D
+%D \startMPenvironment
+%D \usetypescript[palatino][texnansi]
+%D \enableregime[utf]
+%D \setupbodyfont[palatino]
+%D \stopMPenvironment
+%D
+%D \startMPpage
+%D draw btex aap‒noot coördinatie – één etex ;
+%D \stopMPpage
+%D \stoptyping
+
+%D Loading specific \METAPOST\ related definitions is
+%D accomplished by:
+
+\def\douseMPlibrary#1%
+ {\ifundefined{\c!file\f!metapostprefix#1}%
+ \letvalueempty{\c!file\f!metapostprefix#1}%
+ \makeshortfilename[\truefilename{\f!metapostprefix#1}]%
+ \startreadingfile
+ \readsysfile\shortfilename{\showmessage\m!metapost1{#1}}\donothing
+ \stopreadingfile
+ \fi}
+
+\def\useMPlibrary[#1]%
+ {\processcommalist[#1]\douseMPlibrary}
+
+%D \macros
+%D {setMPtext, MPtext, MPstring, MPbetex}
+%D
+%D To be documented:
+%D
+%D \starttyping
+%D \setMPtext{identifier}{text}
+%D
+%D \MPtext {identifier}
+%D \MPstring{identifier}
+%D \MPbetex {identifier}
+%D \stoptyping
+
+\def\@@MPT{@MPT@}
+
+\def\forceMPTEXgraphic
+ {\long\def\checkMPTEXgraphic##1{\global\MPTEXgraphictrue}}
+
+\def\setMPtext#1#2% todo : #1 must be made : safe
+ {%\forceMPTEXgraphic
+ \defconvertedargument\ascii{#2}%
+ \dodoglobal\letvalue{\@@MPT#1}\ascii}
+
+\def\MPtext #1{\executeifdefined{\@@MPT#1}\empty}
+\def\MPstring #1{"\executeifdefined{\@@MPT#1}\empty"}
+\def\MPbetex #1{btex \executeifdefined{\@@MPT#1}\empty\space etex}
+
+%D Unfortunately \METAPOST\ does not have \CMYK\ support
+%D built in, but by means of specials we can supply the
+%D information needed to handle them naturaly.
+
+% \newif\ifMPcmykcolors \MPcmykcolorstrue
+% \newif\ifMPspotcolors \MPspotcolorstrue
+
+\startMPinitializations
+ cmykcolors:=\ifMPcmykcolors true\else false\fi;
+ spotcolors:=\ifMPspotcolors true\else false\fi;
+\stopMPinitializations
+
+%D In order to communicate conveniently with the \TEX\
+%D engine, we introduce some typesetting variables.
+
+\startMPextensions
+ color OverlayColor,OverlayLineColor;
+\stopMPextensions
+
+\startMPinitializations
+ OverlayWidth:=\overlaywidth;
+ OverlayHeight:=\overlayheight;
+ OverlayDepth:=\overlayheight;
+ OverlayColor:=\MPcolor{\overlaycolor};
+ OverlayLineWidth:=\overlaylinewidth;
+ OverlayLineColor:=\MPcolor{\overlaylinecolor};
+ %
+ BaseLineSkip:=\the\baselineskip;
+ LineHeight:=\the\baselineskip;
+ BodyFontSize:=\the\bodyfontsize;
+ %
+ TopSkip:=\the\topskip;
+ StrutHeight:=\strutheight;
+ StrutDepth:=\strutdepth;
+ %
+ CurrentWidth:=\the\hsize;
+ CurrentHeight:=\the\vsize;
+ %
+ EmWidth:=\the\emwidth;
+ ExHeight:=\the\exheight;
+ %
+ PageNumber:=\the\pageno;
+ RealPageNumber:=\the\realpageno;
+ LastPageNumber:= \lastpage;
+\stopMPinitializations
+
+\appendtoks
+ \disablediscretionaries
+ \disablecompoundcharacters
+\to \everyMPgraphic
+
+\appendtoks
+ \expanded{\definecolor[currentcolor][\currentcolorname]}%
+\to \everyMPgraphic
+
+\appendtoks
+ \baselineskip1\baselineskip
+ \lineheight 1\lineheight
+ \topskip 1\topskip
+\to \everyMPgraphic
+
+\appendtoks
+ \let \# \letterhash
+ \let \_ \letterunderscore
+ \let \& \letterampersand
+ \let \{ \letteropenbrace
+ \let \} \letterclosebrace
+\to \everyMPgraphic
+
+%D Alas, the prologue settings differ per driver.
+
+\ifx\undefined\MPprologues \def\MPprologues{0} \fi
+
+\startMPinitializations
+ prologues:=\MPprologues;
+ mpprocset:=1;
+\stopMPinitializations
+
+\appendtoks
+ \def\MPprologues{0}%
+ \def\MPOSTdriver{dvips}%
+\to \everyresetspecials
+
+%D \macros
+%D {PDFMPformoffset}
+%D
+%D In \PDF, forms are clipped and therefore we have to take
+%D precautions to get this right. Since this is related to
+%D objects, we use the same offset as used there.
+
+\def\PDFMPformoffset{\objectoffset}
+
+%D \macros
+%D {insertMPfile}
+%D
+%D Bypassing the special driver and figure mechanism is not
+%D that nice but saves upto 5\% time in embedding \METAPOST\
+%D graphics by using the low level \PDF\ converter directly,
+%D given of course that we use \PDFTEX. As a result we need to
+%D fool around with the object trigger.
+
+\newtoks\everyinsertMPfile
+
+\let\insertMPfileARG\insertMPfile
+
+\def\insertMPfile#1#2% in context #2 is empty
+ {\doifelsenothing{#2}{\doinsertMPfile{#1}}{\insertMPfileARG{#1}{#2}}}
+
+\def\includeMPasEPS#1% untested !!
+ {\bgroup
+ \message{[MP as EPS #1]}%
+ \the\everyinsertMPfile
+ \dogetEPSboundingbox{#1}\!!widtha\!!heighta\!!widthb\!!heightb
+ \setbox\scratchbox\vbox to \!!heightb
+ {\vfill
+ \let \@@DriverImageType \c!mps
+ \def \@@DriverImageFile {#1}%
+ \edef\@@DriverImageWidth {\the\!!widthb }%
+ \edef\@@DriverImageHeight{\the\!!heightb}%
+ \doinsertfile}%
+ \wd\scratchbox\!!widthb
+ \dp\scratchbox\zeropoint
+ \box\scratchbox
+ \egroup}
+
+\def\includeMPasPDF#1%
+ {\bgroup
+ \the\everyinsertMPfile
+ \ifinobject \else \chardef\makeMPintoPDFobject\plustwo \fi % when needed
+ \convertMPtoPDF{#1}{1}{1}% no \plusone !
+ \egroup}
+
+%D So, using a low level approach (thereby avoiding the slower
+%D figure analysis macros) pays off. This kind of
+%D optimizations are a bit tricky since we must make sure that
+%D special resources end up in the (PDF) files. Because the
+%D \METAPOST\ to \PDF\ can handle objects itself, it is not
+%D that complicated.
+
+%D We hook a couple of initializations into the graphic
+%D macros.
+
+\appendtoks
+ \let\figuretypes\c!mps
+ \runutilityfilefalse
+ \consultutilityfilefalse
+\to \everyinsertMPfile
+
+%D One more: (still needed?)
+
+\startMPextensions
+ def initialize_form_numbers =
+ do_initialize_numbers;
+ enddef;
+\stopMPextensions
+
+\startMPinitializations
+ HSize:=\the\hsize ;
+ VSize:=\the\vsize ;
+\stopMPinitializations
+
+\startMPextensions
+ vardef ForegroundBox =
+ unitsquare xysized(HSize,VSize)
+ enddef ;
+ vardef PageFraction =
+ if \lastpage>1: (\realfolio-1)/(\lastpage-1) else: 1 fi
+ enddef ;
+\stopMPextensions
+
+%D And some more. These are not really needed since we
+%D don't use the normal figure inclusion macros any longer.
+
+\appendtoks
+ \externalfigurepostprocessors\emptytoks % safeguard
+\to \everyinsertMPfile
+
+%D We also take care of disabling fancy figure features, that
+%D can terribly interfere when dealing with symbols,
+%D background graphics and running (postponed) graphics.
+%D You won't believe me if I tell you what funny side effects
+%D can occur. One took me over a day to uncover when
+%D processing the screen version of the \METAFUN\ manual.
+
+%D For my eyes only:
+
+\def\doifelseMPgraphic#1{\doifdefinedelse{\@@MPG#1}}
+
+%D \macros
+%D {startMPcolor}
+%D
+%D The following time consuming method uses \METAPOST\ to
+%D calculate a color. This enables a match between colors
+%D resulting from a complex calculation (e.g. for a title
+%D page) and those in the text.
+
+% \startuseMPgraphic{somecolors}
+% color c[] ; c[1] := .7[red,green] ; c[2] := .7[blue,yellow] ;
+% \stopuseMPgraphic
+
+% \startMPcolor[shade-1][t=.2,a=1]
+% \includeMPgraphic{somecolors} ; fill fullcircle withcolor c[1] ;
+% \stopMPcolor
+
+% \startMPcolor[shade-2][t=.2,a=1]
+% \includeMPgraphic{somecolors} ; fill fullcircle withcolor c[2] ;
+% \stopMPcolor
+
+% \blackrule[width=\hsize,height=4cm,color=shade-1]
+% \blackrule[width=\hsize,height=4cm,color=shade-2]
+
+\def\startMPcolor
+ {\dodoubleempty\dostartMPcolor}
+
+\long\def\dostartMPcolor[#1][#2]#3\stopMPcolor % slow but sometimes handy
+ {\startnointerference
+ \def\handleMPgraycolor{\expanded{\defineglobalcolor[#1][s=\!MPgMPa1,#2]}}%
+ \def\handleMPrgbcolor {\expanded{\defineglobalcolor[#1][r=\!MPgMPa1,g=\!MPgMPa2,b=\!MPgMPa3,#2]}}%
+ \def\handleMPcmykcolor{\expanded{\defineglobalcolor[#1][c=\!MPgMPa1,m=\!MPgMPa2,y=\!MPgMPa3,k=\!MPgMPa4,#2]}}%
+ \processMPgraphic{#3}%
+ \stopnointerference}
+
+%D New:
+
+\definelayerpreset % no dx,dy - else nasty non-mp placement
+ [mp]
+ [\c!y=-\MPury bp,
+ \c!x=\MPllx bp,
+ \c!method=\v!fit]
+
+\definelayer
+ [mp]
+ [\c!preset=mp]
+
+%D Usage:
+%D
+%D \starttyping
+%D \defineproperty[one][layer][state=start]
+%D \defineproperty[two][layer][state=stop]
+%D
+%D \startuseMPgraphic{step-1}
+%D fill fullcircle scaled 10cm withcolor red ;
+%D \stopuseMPgraphic
+%D
+%D \startuseMPgraphic{step-2}
+%D fill fullcircle scaled 5cm withcolor green ;
+%D \stopuseMPgraphic
+%D
+%D \setlayer[mp]{\property[one]{\useMPgraphic{step-1}}}
+%D \setlayer[mp]{\property[two]{\useMPgraphic{step-2}}}
+%D
+%D \ruledhbox{\flushlayer[mp]}
+%D \stoptyping
+%D
+%D Reusing graphics is also possible (now):
+%D
+%D \starttyping
+%D \startreusableMPgraphic{axis}
+%D tickstep := 1cm ; ticklength := 2mm ;
+%D drawticks unitsquare xscaled 4cm yscaled 3cm shifted (-1cm,-1cm) ;
+%D tickstep := tickstep/2 ; ticklength := ticklength/2 ;
+%D drawticks unitsquare xscaled 4cm yscaled 3cm shifted (-1cm,-1cm) ;
+%D \stopreusableMPgraphic
+%D
+%D \startuseMPgraphic{demo}
+%D drawpoint "1cm,1.5cm" ;
+%D \stopuseMPgraphic
+%D
+%D \definelayer[mp][preset=mp]
+%D \setlayer[mp]{\reuseMPgraphic{axis}}
+%D \setlayer[mp]{\useMPgraphic{demo}}
+%D \ruledhbox{\flushlayer[mp]}
+%D \stoptyping
+
+%D \macros
+%D {startstaticMPfigure,useMPstaticfigure}
+%D
+%D Static figures are processed only when there has been
+%D something changed. Here is Aditya Mahajan's testcase:
+%D
+%D \startbuffer
+%D \startstaticMPfigure{circle}
+%D fill fullcircle scaled 1cm withcolor blue;
+%D \stopstaticMPfigure
+%D
+%D \startstaticMPfigure{axis}
+%D drawarrow (0,0)--(2cm,0) ;
+%D drawarrow (0,0)--(0,2cm) ;
+%D label.llft(textext("(0,0)") ,origin) ;
+%D \stopstaticMPfigure
+%D \stopbuffer
+%D
+%D \typebuffer \getbuffer
+
+\def\usestaticMPfigure
+ {\dodoubleempty\dousestaticMPfigure}
+
+\def\dousestaticMPfigure[#1][#2]%
+ {\ifsecondargument
+ \scale[#2]{\reuseMPgraphic{#1@S@}}%
+ \else
+ \reuseMPgraphic{#1@S@}%
+ \fi}
+
+\def\startstaticMPfigure#1#2\stopstaticMPfigure
+ {\startreusableMPgraphic{static:#1}#2\stopreusableMPgraphic}
+
+\long\def\startstaticMPgraphic
+ {\blabelgroup
+ \dodoublegroupempty\dostartstaticMPgraphic}
+
+\long\def\dostartstaticMPgraphic#1#2#3\stopstaticMPgraphic
+ {\long\setgvalue{\@@MPG#1@S@}{\handlereusableMPgraphic{#1}{#2}{#3}}%
+ \elabelgroup}
+
+%D New:
+
+\newconditional\manyMPspecials % when set to true, > 1000 specials can be used
+
+\settrue \manyMPspecials % per 1/4/2006
+
+\prependtoks
+ _special_div_ := 1000\ifconditional\manyMPspecials0\fi ;
+\to \MPextensions
+
+%D Needed (will become default):
+
+\prependtoks
+ \resetlanguagespecifics
+\to \everyMPgraphic
+
+%D Needed too.
+
+\let\initializeMPgraphics\relax
+
+% Done.
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/meta-mis.tex b/Master/texmf-dist/tex/context/base/meta-mis.tex
index 6b39fa0dd55..29ab43007e7 100644
--- a/Master/texmf-dist/tex/context/base/meta-mis.tex
+++ b/Master/texmf-dist/tex/context/base/meta-mis.tex
@@ -27,7 +27,7 @@
currentpicture := currentpicture shifted (-4cm,0) ;
fill fullcircle scaled 3cm withcolor cmyk(0,0,1,0) ;
fill fullcircle scaled 2cm withcolor cmyk(0,1,0,0) ;
- fill fullcircle scaled 1cm withcolor cmyk(0,0,1,0) ;
+ fill fullcircle scaled 1cm withcolor cmyk(1,0,0,0) ;
currentpicture := currentpicture shifted (-4cm,0) ;
draw fullcircle scaled 3cm dashed evenly ;
draw fullcircle scaled 2cm dashed withdots ;
diff --git a/Master/texmf-dist/tex/context/base/meta-pag.tex b/Master/texmf-dist/tex/context/base/meta-pag.tex
index 1ed7db7f90c..000e56a2eb5 100644
--- a/Master/texmf-dist/tex/context/base/meta-pag.tex
+++ b/Master/texmf-dist/tex/context/base/meta-pag.tex
@@ -136,7 +136,7 @@
%D The \type {TextArea*} macros can be used to determine
%D overlap.
-\newcounter\currentMPtextareadata
+\newcount\currentMPtextareadata
\newtoks\MPsavedtextareadata
\newtoks\MPtextareadata
@@ -147,11 +147,11 @@
\def\registerMPtextarea#1%
{\ifpositioning
\bgroup
- \doglobal\increment\currentMPtextareadata
- %\hpos{gbd:\currentMPtextareadata}{#1}%
- \hpos{gbd:\currentMPtextareadata}%
+ \global\advance\currentMPtextareadata\plusone
+ %\hpos{gbd:\the\currentMPtextareadata}{#1}%
+ \hpos{gbd:\the\currentMPtextareadata}%
{\iftracetextareas\boxrulewidth1.5pt\ruledhbox\fi{#1}}%
- \edef\!!stringa{gbd:\currentMPtextareadata}%
+ \edef\!!stringa{gbd:\the\currentMPtextareadata}%
\edef\!!stringa{RegisterTextArea(%
\MPx\!!stringa,\MPy\!!stringa,%
\MPw\!!stringa,\MPh\!!stringa,\MPd\!!stringa);}%
@@ -164,11 +164,11 @@
\def\registerMPlocaltextarea#1%
{\ifpositioning
\bgroup
- \doglobal\increment\currentMPtextareadata
- %\hpos{gbd:\currentMPtextareadata}{#1}%
- \hpos{gbd:\currentMPtextareadata}%
+ \global\advance\currentMPtextareadata\plusone
+ %\hpos{gbd:\the\currentMPtextareadata}{#1}%
+ \hpos{gbd:\the\currentMPtextareadata}%
{\iftracetextareas\boxrulewidth3pt\ruledhbox\fi{#1}}%
- \edef\!!stringa{gbd:\currentMPtextareadata}%
+ \edef\!!stringa{gbd:\the\currentMPtextareadata}%
\edef\!!stringa{RegisterLocalTextArea(%
\MPx\!!stringa,\MPy\!!stringa,%
\MPw\!!stringa,\MPh\!!stringa,\MPd\!!stringa);}%
@@ -186,8 +186,8 @@
% {\ifpositioning
% \bgroup
% \ifx\namedtextarea\empty
-% \doglobal\increment\currentMPtextareadata
-% \edef\namedtextarea{gbd:\currentMPtextareadata}%
+% \global\advance\currentMPtextareadata\plusone
+% \edef\namedtextarea{gbd:\the\currentMPtextareadata}%
% \fi
% \hpos\namedtextarea{\iftracetextareas\boxrulewidth3pt\ruledhbox\fi{#1}}%
% \edef\ascii{RegisterLocalTextArea(%
diff --git a/Master/texmf-dist/tex/context/base/meta-pdf.lua b/Master/texmf-dist/tex/context/base/meta-pdf.lua
new file mode 100644
index 00000000000..648ff1afb59
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/meta-pdf.lua
@@ -0,0 +1,620 @@
+-- filename : meta-pdf.lua
+-- comment : companion to meta-pdf.tex
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+-- This is the third version. Version 1 converted to Lua code,
+-- version 2 gsubbed the file into TeX code, and version 3 uses
+-- the new lpeg functionality and streams the result into TeX.
+
+-- We will move old stuff to edu.
+
+--~ old lpeg 0.4 lpeg 0.5
+--~ 100 times test graphic 2.45 (T:1.07) 0.72 (T:0.24) 0.580 (0.560 no table) -- 0.54 optimized for one space (T:0.19)
+--~ 100 times big graphic 10.44 4.30/3.35 nogb 2.914 (2.050 no table) -- 1.99 optimized for one space (T:0.85)
+--~ 500 times test graphic T:1.29 T:1.16 (T:1.10 no table) -- T:1.10
+
+if not versions then versions = { } end versions['meta-pdf'] = 1.003
+
+mptopdf = { }
+mptopdf.parsers = { }
+mptopdf.parser = 'none'
+
+function mptopdf.reset()
+ mptopdf.data = ""
+ mptopdf.path = { }
+ mptopdf.stack = { }
+ mptopdf.texts = { }
+ mptopdf.version = 0
+ mptopdf.shortcuts = false
+ mptopdf.resetpath()
+end
+
+function mptopdf.resetpath()
+ mptopdf.stack.close = false
+ mptopdf.stack.path = { }
+ mptopdf.stack.concat = nil
+ mptopdf.stack.special = false
+end
+
+mptopdf.reset()
+
+function mptopdf.parsers.none()
+ -- no parser set
+end
+
+function mptopdf.parse()
+ mptopdf.parsers[mptopdf.parser]()
+end
+
+-- old code
+
+mptopdf.steps = { }
+
+mptopdf.descapes = {
+ ['('] = "\\\\char40 ",
+ [')'] = "\\\\char41 ",
+ ['"'] = "\\\\char92 "
+}
+
+function mptopdf.descape(str)
+ str = str:gsub("\\(%d%d%d)",function(n)
+ return "\\char" .. tonumber(n,8) .. " "
+ end)
+ return str:gsub("\\([%(%)\\])",mptopdf.descapes)
+end
+
+function mptopdf.steps.descape(str)
+ str = str:gsub("\\(%d%d%d)",function(n)
+ return "\\\\char" .. tonumber(n,8) .. " "
+ end)
+ return str:gsub("\\([%(%)\\])",mptopdf.descapes)
+end
+
+function mptopdf.steps.strip() -- .3 per expr
+ mptopdf.data = mptopdf.data:gsub("^(.-)%%+Page:.-%c+(.*)%s+%a+%s+%%+EOF.*$", function(preamble, graphic)
+ local bbox = "0 0 0 0"
+ for b in preamble:gmatch("%%%%%a+oundingBox: +(.-)%c+") do
+ bbox = b
+ end
+ local name, version = preamble:gmatch("%%%%Creator: +(.-) +(.-) ")
+ mptopdf.version = tostring(version or "0")
+ if preamble:find("/hlw{0 dtransform") then
+ mptopdf.shortcuts = true
+ end
+ -- the boundingbox specification needs to come before data, well, not really
+ return bbox .. " boundingbox\n" .. "\nbegindata\n" .. graphic .. "\nenddata\n"
+ end, 1)
+ mptopdf.data = mptopdf.data:gsub("%%%%MetaPostSpecials: +(.-)%c+", "%1 specials\n", 1)
+ mptopdf.data = mptopdf.data:gsub("%%%%MetaPostSpecial: +(.-)%c+", "%1 special\n")
+ mptopdf.data = mptopdf.data:gsub("%%.-%c+", "")
+end
+
+function mptopdf.steps.cleanup()
+ if not mptopdf.shortcuts then
+ mptopdf.data = mptopdf.data:gsub("gsave%s+fill%s+grestore%s+stroke", "both")
+ mptopdf.data = mptopdf.data:gsub("([%d%.]+)%s+([%d%.]+)%s+dtransform%s+exch%s+truncate%s+exch%s+idtransform%s+pop%s+setlinewidth", function(wx,wy)
+ if tonumber(wx) > 0 then return wx .. " setlinewidth" else return wy .. " setlinewidth" end
+ end)
+ mptopdf.data = mptopdf.data:gsub("([%d%.]+)%s+([%d%.]+)%s+dtransform%s+truncate%s+idtransform%s+setlinewidth%s+pop", function(wx,wy)
+ if tonumber(wx) > 0 then return wx .. " setlinewidth" else return wy .. " setlinewidth" end
+ end)
+ end
+end
+
+function mptopdf.steps.convert()
+ mptopdf.data = mptopdf.data:gsub("%c%((.-)%) (.-) (.-) fshow", function(str,font,scale)
+ mptopdf.texts[mptopdf.texts+1] = {mptopdf.steps.descape(str), font, scale}
+ return "\n" .. #mptopdf.texts .. " textext"
+ end)
+ mptopdf.data = mptopdf.data:gsub("%[%s*(.-)%s*%]", function(str)
+ return str:gsub("%s+"," ")
+ end)
+ local t
+ mptopdf.data = mptopdf.data:gsub("%s*([^%a]-)%s*(%a+)", function(args,cmd)
+ if cmd == "textext" then
+ t = mptopdf.texts[tonumber(args)]
+ return "mps.textext(" .. "\"" .. t[2] .. "\"," .. t[3] .. ",\"" .. t[1] .. "\")\n"
+ else
+ return "mps." .. cmd .. "(" .. args:gsub(" +",",") .. ")\n"
+ end
+ end)
+end
+
+function mptopdf.steps.process()
+ assert(loadstring(mptopdf.data))() -- () runs the loaded chunk
+end
+
+function mptopdf.parsers.gsub()
+ mptopdf.steps.strip()
+ mptopdf.steps.cleanup()
+ mptopdf.steps.convert()
+ mptopdf.steps.process()
+end
+
+-- end of old code
+
+-- from lua to tex
+
+function mptopdf.pdfcode(str)
+ tex.sprint(tex.ctxcatcodes,"\\PDFcode{" .. str .. "}")
+end
+
+function mptopdf.texcode(str)
+ tex.sprint(tex.ctxcatcodes,str)
+end
+
+-- auxiliary functions
+
+function mptopdf.flushconcat()
+ if mptopdf.stack.concat then
+ mptopdf.pdfcode(table.concat(mptopdf.stack.concat," ") .. " cm")
+ mptopdf.stack.concat = nil
+ end
+end
+
+function mptopdf.flushpath(cmd)
+ if #mptopdf.stack.path > 0 then
+ local path = { }
+ if mptopdf.stack.concat then
+ local sx, sy = mptopdf.stack.concat[1], mptopdf.stack.concat[4]
+ local rx, ry = mptopdf.stack.concat[2], mptopdf.stack.concat[3]
+ local tx, ty = mptopdf.stack.concat[5], mptopdf.stack.concat[6]
+ local d = (sx*sy) - (rx*ry)
+ local function concat(px, py)
+ return (sy*(px-tx)-ry*(py-ty))/d, (sx*(py-ty)-rx*(px-tx))/d
+ end
+ for _,v in ipairs(mptopdf.stack.path) do
+ v[1],v[2] = concat(v[1],v[2])
+ if #v == 7 then
+ v[3],v[4] = concat(v[3],v[4])
+ v[5],v[6] = concat(v[5],v[6])
+ end
+ path[#path+1] = table.concat(v," ")
+ end
+ else
+ for _,v in ipairs(mptopdf.stack.path) do
+ path[#path+1] = table.concat(v," ")
+ end
+ end
+ mptopdf.flushconcat()
+ mptopdf.texcode("\\MPSpath{" .. table.concat(path," ") .. "}")
+ if mptopdf.stack.close then
+ mptopdf.texcode("\\MPScode{h " .. cmd .. "}")
+ else
+ mptopdf.texcode("\\MPScode{" .. cmd .."}")
+ end
+ end
+ mptopdf.resetpath()
+end
+
+if texmf and texmf.instance then
+ function mptopdf.loaded(name)
+ local ok, n
+ mptopdf.reset()
+ ok, mptopdf.data, n = input.loadbinfile(texmf.instance, name, 'tex') -- we need a binary load !
+ return ok
+ end
+else
+ function mptopdf.loaded(name)
+ local f = io.open(name, 'rb')
+ if f then
+ mptopdf.reset()
+ mptopdf.data = f:read('*all')
+ f:close()
+ return true
+ else
+ return false
+ end
+ end
+end
+
+if not mptopdf.parse then
+ function mptopdf.parse() end -- forward declaration
+end
+
+function mptopdf.convertmpstopdf(name)
+ if mptopdf.loaded(name) then
+ garbagecollector.push()
+ input.starttiming(mptopdf)
+ mptopdf.parse()
+ mptopdf.reset()
+ input.stoptiming(mptopdf)
+ garbagecollector.pop()
+ else
+ tex.print("file " .. name .. " not found")
+ end
+end
+
+-- mp interface
+
+mps = mps or { }
+
+function mps.creator(a, b, c)
+ mptopdf.version = tonumber(b)
+end
+
+function mps.creationdate(a)
+ mptopdf.date= a
+end
+
+function mps.newpath()
+ mptopdf.stack.path = { }
+end
+
+function mps.boundingbox(llx, lly, urx, ury)
+ mptopdf.texcode("\\MPSboundingbox{" .. llx .. "}{" .. lly .. "}{" .. urx .. "}{" .. ury .. "}")
+end
+
+function mps.moveto(x,y)
+ mptopdf.stack.path[#mptopdf.stack.path+1] = {x,y,"m"}
+end
+
+function mps.curveto(ax, ay, bx, by, cx, cy)
+ mptopdf.stack.path[#mptopdf.stack.path+1] = {ax,ay,bx,by,cx,cy,"c"}
+end
+
+function mps.lineto(x,y)
+ mptopdf.stack.path[#mptopdf.stack.path+1] = {x,y,"l"}
+end
+
+function mps.rlineto(x,y)
+ local dx, dy = 0, 0
+ if #mptopdf.stack.path > 0 then
+ dx, dy = mptopdf.stack.path[#mptopdf.stack.path][1], mptopdf.stack.path[#mptopdf.stack.path][2]
+ end
+ mptopdf.stack.path[#mptopdf.stack.path+1] = {dx,dy,"l"}
+end
+
+function mps.translate(tx,ty)
+ mptopdf.pdfcode("1 0 0 0 1 " .. tx .. " " .. ty .. " cm")
+end
+
+function mps.scale(sx,sy)
+ mptopdf.stack.concat = {sx,0,0,sy,0,0}
+end
+
+function mps.concat(sx, rx, ry, sy, tx, ty)
+ mptopdf.stack.concat = {sx,rx,ry,sy,tx,ty}
+end
+
+function mps.setlinejoin(d)
+ mptopdf.pdfcode(d .. " j")
+end
+
+function mps.setlinecap(d)
+ mptopdf.pdfcode(d .. " J")
+end
+
+function mps.setmiterlimit(d)
+ mptopdf.pdfcode(d .. " M")
+end
+
+function mps.gsave()
+ mptopdf.pdfcode("q")
+end
+
+function mps.grestore()
+ mptopdf.pdfcode("Q")
+end
+
+function mps.setdash(...)
+ local n = select("#",...)
+ mptopdf.pdfcode("[" .. table.concat({...}," ",1,n-1) .. "] " .. select(n,...) .. " d")
+end
+
+function mps.resetdash()
+ mptopdf.pdfcode("[ ] 0 d")
+end
+
+function mps.setlinewidth(d)
+ mptopdf.pdfcode(d .. " w")
+end
+
+function mps.closepath()
+ mptopdf.stack.close = true
+end
+
+function mps.fill()
+ mptopdf.flushpath('f')
+end
+
+function mps.stroke()
+ mptopdf.flushpath('S')
+end
+
+function mps.both()
+ mptopdf.flushpath('B')
+end
+
+function mps.clip()
+ mptopdf.flushpath('W n')
+end
+
+function mps.textext(font, scale, str) -- old parser
+ local dx, dy = 0, 0
+ if #mptopdf.stack.path > 0 then
+ dx, dy = mptopdf.stack.path[1][1], mptopdf.stack.path[1][2]
+ end
+ mptopdf.flushconcat()
+ mptopdf.texcode("\\MPStextext{"..font.."}{"..scale.."}{"..str.."}{"..dx.."}{"..dy.."}")
+ mptopdf.resetpath()
+end
+
+--~ function mps.handletext(font,scale.str,dx,dy)
+--~ local one, two = string.match(str, "^(%d+)::::(%d+)")
+--~ if one and two then
+--~ mptopdf.texcode("\\MPTOPDFtextext{"..font.."}{"..scale.."}{"..one.."}{"..two.."}{"..dx.."}{"..dy.."}")
+--~ else
+--~ mptopdf.texcode("\\MPTOPDFtexcode{"..font.."}{"..scale.."}{"..str.."}{"..dx.."}{"..dy.."}")
+--~ end
+--~ end
+
+if false and ctx and ctx.aux and ctx.aux.definecolor then
+
+ logs.report("mptopdf", "using attribute based mps colors")
+
+ -- does not work due to Q-q mess-up
+
+ function mps.setrgbcolor(r,g,b) -- extra check
+ r, g, b = tonumber(r), tonumber(g), tonumber(b) -- needed when we use lpeg
+ if r == 0.0123 and g < 0.1 then -- g is extra check
+ mptopdf.texcode("\\doresetattribute{transparency}\\MPSspecial{" .. g*10000 .. "}{" .. b*10000 .. "}")
+ elseif r == 0.123 and g < 0.1 then -- g is extra check
+ mptopdf.texcode("\\doresetattribute{transparency}\\MPSspecial{" .. g* 1000 .. "}{" .. b* 1000 .. "}")
+ else
+ mptopdf.texcode("\\doresetattribute{transparency}\\dosetattribute{color}{" .. colors.register('color',nil,'rgb',r,g,b) .. "}")
+ end
+ end
+
+ function mps.setcmykcolor(c,m,y,k)
+ mptopdf.texcode("\\doresetattribute{transparency}\\dosetattribute{color}{" .. colors.register('color',nil,'cmyk',tonumber(c),tonumber(m),tonumber(y),tonumber(k)) .. "}")
+ end
+
+ function mps.setgray(s)
+ mptopdf.texcode("\\doresetattribute{transparency}\\dosetattribute{color}{" .. colors.register('color',nil,'gray',tonumber(s)) .. "}")
+ end
+
+else
+
+ function mps.setrgbcolor(r,g,b) -- extra check
+ r, g = tonumber(r), tonumber(g) -- needed when we use lpeg
+ if r == 0.0123 and g < 0.1 then
+ mptopdf.texcode("\\MPSspecial{" .. g*10000 .. "}{" .. b*10000 .. "}")
+ elseif r == 0.123 and g < 0.1 then
+ mptopdf.texcode("\\MPSspecial{" .. g* 1000 .. "}{" .. b* 1000 .. "}")
+ else
+ mptopdf.texcode("\\MPSrgb{" .. r .. "}{" .. g .. "}{" .. b .. "}")
+ end
+ end
+
+ function mps.setcmykcolor(c,m,y,k)
+ mptopdf.texcode("\\MPScmyk{" .. c .. "}{" .. m .. "}{" .. y .. "}{" .. k .. "}")
+ end
+
+ function mps.setgray(s)
+ mptopdf.texcode("\\MPSgray{" .. s .. "}")
+ end
+
+end
+
+function mps.specials(version,signal,factor) -- 2.0 123 1000
+end
+
+function mps.special(...) -- 7 1 0.5 1 0 0 1 3
+ local n = select("#",...)
+ mptopdf.texcode("\\MPSbegin\\MPSset{" .. table.concat({...},"}\\MPSset{",2,n) .. "}\\MPSend")
+end
+
+function mps.begindata()
+end
+
+function mps.enddata()
+end
+
+function mps.showpage()
+end
+
+mps.n = mps.newpath -- n
+mps.p = mps.closepath -- h
+mps.l = mps.lineto -- l
+mps.r = mps.rlineto -- r
+mps.m = mps.moveto -- m
+mps.c = mps.curveto -- c
+mps.hlw = mps.setlinewidth
+mps.vlw = mps.setlinewidth
+
+mps.C = mps.setcmykcolor -- k
+mps.G = mps.setgray -- g
+mps.R = mps.setrgbcolor -- rg
+
+mps.lj = mps.setlinejoin -- j
+mps.ml = mps.setmiterlimit -- M
+mps.lc = mps.setlinecap -- J
+mps.sd = mps.setdash -- d
+mps.rd = mps.resetdash
+
+mps.S = mps.stroke -- S
+mps.F = mps.fill -- f
+mps.B = mps.both -- B
+mps.W = mps.clip -- W
+
+mps.q = mps.gsave -- q
+mps.Q = mps.grestore -- Q
+
+mps.s = mps.scale -- (not in pdf)
+mps.t = mps.concat -- (not the same as pdf anyway)
+
+mps.P = mps.showpage
+
+-- experimental
+
+function mps.attribute(id,value)
+ mptopdf.texcode("\\attribute " .. id .. "=" .. value .. " ")
+-- mptopdf.texcode("\\dompattribute{" .. id .. "}{" .. value .. "}")
+end
+
+-- lpeg parser
+
+-- The lpeg based parser is rather optimized for the kind of output
+-- that MetaPost produces. It's my first real lpeg code, which may
+-- show. Because the parser binds to functions, we define it last.
+
+do -- assumes \let\c\char
+
+ local byte = string.byte
+ local digit = lpeg.R("09")
+ local spec = digit^2 * lpeg.P("::::") * digit^2
+ local text = lpeg.Cc("{") * (
+ lpeg.P("\\") * ( (digit * digit * digit) / function(n) return "c" .. tonumber(n,8) end) +
+ lpeg.P(" ") / function(n) return "\\c32" end + -- never in new mp
+ lpeg.P(1) / function(n) return "\\c" .. byte(n) end
+ ) * lpeg.Cc("}")
+ local package = lpeg.Cs(spec + text^0)
+
+ function mps.fshow(str,font,scale) -- lpeg parser
+ mps.textext(font,scale,package:match(str))
+ end
+
+end
+
+do
+
+ local eol = lpeg.S('\r\n')^1
+ local sp = lpeg.P(' ')^1
+ local space = lpeg.S(' \r\n')^1
+ local number = lpeg.S('0123456789.-+')^1
+ local nonspace = lpeg.P(1-lpeg.S(' \r\n'))^1
+
+ local cnumber = lpeg.C(number)
+ local cstring = lpeg.C(nonspace)
+
+ local specials = (lpeg.P("%%MetaPostSpecials:") * sp * (cstring * sp^0)^0 * eol) / mps.specials
+ local special = (lpeg.P("%%MetaPostSpecial:") * sp * (cstring * sp^0)^0 * eol) / mps.special
+ local boundingbox = (lpeg.P("%%BoundingBox:") * sp * (cnumber * sp^0)^4 * eol) / mps.boundingbox
+ local highresboundingbox = (lpeg.P("%%HiResBoundingBox:") * sp * (cnumber * sp^0)^4 * eol) / mps.boundingbox
+
+ local setup = lpeg.P("%%BeginSetup") * (1 - lpeg.P("%%EndSetup") )^1
+ local prolog = lpeg.P("%%BeginProlog") * (1 - lpeg.P("%%EndProlog"))^1
+ local comment = lpeg.P('%')^1 * (1 - eol)^1
+
+ local curveto = ((cnumber * sp)^6 * lpeg.P("curveto") ) / mps.curveto
+ local lineto = ((cnumber * sp)^2 * lpeg.P("lineto") ) / mps.lineto
+ local rlineto = ((cnumber * sp)^2 * lpeg.P("rlineto") ) / mps.rlineto
+ local moveto = ((cnumber * sp)^2 * lpeg.P("moveto") ) / mps.moveto
+ local setrgbcolor = ((cnumber * sp)^3 * lpeg.P("setrgbcolor") ) / mps.setrgbcolor
+ local setcmykcolor = ((cnumber * sp)^4 * lpeg.P("setcmykcolor") ) / mps.setcmykcolor
+ local setgray = ((cnumber * sp)^1 * lpeg.P("setgray") ) / mps.setgray
+ local newpath = ( lpeg.P("newpath") ) / mps.newpath
+ local closepath = ( lpeg.P("closepath") ) / mps.closepath
+ local fill = ( lpeg.P("fill") ) / mps.fill
+ local stroke = ( lpeg.P("stroke") ) / mps.stroke
+ local clip = ( lpeg.P("clip") ) / mps.clip
+ local both = ( lpeg.P("gsave fill grestore")) / mps.both
+ local showpage = ( lpeg.P("showpage") )
+ local setlinejoin = ((cnumber * sp)^1 * lpeg.P("setlinejoin") ) / mps.setlinejoin
+ local setlinecap = ((cnumber * sp)^1 * lpeg.P("setlinecap") ) / mps.setlinecap
+ local setmiterlimit = ((cnumber * sp)^1 * lpeg.P("setmiterlimit") ) / mps.setmiterlimit
+ local gsave = ( lpeg.P("gsave") ) / mps.gsave
+ local grestore = ( lpeg.P("grestore") ) / mps.grestore
+
+ local setdash = (lpeg.P("[") * (cnumber * sp^0)^0 * lpeg.P("]") * sp * cnumber * sp * lpeg.P("setdash")) / mps.setdash
+ local concat = (lpeg.P("[") * (cnumber * sp^0)^6 * lpeg.P("]") * sp * lpeg.P("concat") ) / mps.concat
+ local scale = ( (cnumber * sp^0)^6 * sp * lpeg.P("concat") ) / mps.concat
+
+ local fshow = (lpeg.P("(") * lpeg.C((1-lpeg.P(")"))^1) * lpeg.P(")") * space * cstring * space * cnumber * space * lpeg.P("fshow")) / mps.fshow
+ local fshow = (lpeg.P("(") *
+ lpeg.Cs( ( lpeg.P("\\(")/"\\050" + lpeg.P("\\)")/"\\051" + (1-lpeg.P(")")) )^1 )
+ * lpeg.P(")") * space * cstring * space * cnumber * space * lpeg.P("fshow")) / mps.fshow
+
+ local setlinewidth_x = (lpeg.P("0") * sp * cnumber * sp * lpeg.P("dtransform truncate idtransform setlinewidth pop")) / mps.setlinewidth
+ local setlinewidth_y = (cnumber * sp * lpeg.P("0 dtransform exch truncate exch idtransform pop setlinewidth") ) / mps.setlinewidth
+
+ local c = ((cnumber * sp)^6 * lpeg.P("c") ) / mps.curveto -- ^6 very inefficient, ^1 ok too
+ local l = ((cnumber * sp)^2 * lpeg.P("l") ) / mps.lineto
+ local r = ((cnumber * sp)^2 * lpeg.P("r") ) / mps.rlineto
+ local m = ((cnumber * sp)^2 * lpeg.P("m") ) / mps.moveto
+ local vlw = ((cnumber * sp)^1 * lpeg.P("vlw")) / mps.setlinewidth
+ local hlw = ((cnumber * sp)^1 * lpeg.P("hlw")) / mps.setlinewidth
+
+ local R = ((cnumber * sp)^3 * lpeg.P("R") ) / mps.setrgbcolor
+ local C = ((cnumber * sp)^4 * lpeg.P("C") ) / mps.setcmykcolor
+ local G = ((cnumber * sp)^1 * lpeg.P("G") ) / mps.setgray
+
+ local lj = ((cnumber * sp)^1 * lpeg.P("lj") ) / mps.setlinejoin
+ local ml = ((cnumber * sp)^1 * lpeg.P("ml") ) / mps.setmiterlimit
+ local lc = ((cnumber * sp)^1 * lpeg.P("lc") ) / mps.setlinecap
+
+ local n = lpeg.P("n") / mps.newpath
+ local p = lpeg.P("p") / mps.closepath
+ local S = lpeg.P("S") / mps.stroke
+ local F = lpeg.P("F") / mps.fill
+ local B = lpeg.P("B") / mps.both
+ local W = lpeg.P("W") / mps.clip
+ local P = lpeg.P("P") / mps.showpage
+
+ local q = lpeg.P("q") / mps.gsave
+ local Q = lpeg.P("Q") / mps.grestore
+
+ local sd = (lpeg.P("[") * (cnumber * sp^0)^0 * lpeg.P("]") * sp * cnumber * sp * lpeg.P("sd")) / mps.setdash
+ local rd = ( lpeg.P("rd")) / mps.resetdash
+
+ local s = ( (cnumber * sp^0)^2 * lpeg.P("s") ) / mps.scale
+ local t = (lpeg.P("[") * (cnumber * sp^0)^6 * lpeg.P("]") * sp * lpeg.P("t") ) / mps.concat
+
+ -- experimental
+
+ local attribute = ((cnumber * sp)^2 * lpeg.P("attribute")) / mps.attribute
+ local A = ((cnumber * sp)^2 * lpeg.P("A")) / mps.attribute
+
+ local preamble = (
+ prolog + setup +
+ boundingbox + highresboundingbox + specials + special +
+ comment
+ )
+
+ local procset = (
+ lj + ml + lc +
+ c + l + m + n + p + r +
+ A +
+ R + C + G +
+ S + F + B + W +
+ vlw + hlw +
+ Q + q +
+ sd + rd +
+ t + s +
+ fshow +
+ P
+ )
+
+ local verbose = (
+ curveto + lineto + moveto + newpath + closepath + rlineto +
+ setrgbcolor + setcmykcolor + setgray +
+ attribute +
+ setlinejoin + setmiterlimit + setlinecap +
+ stroke + fill + clip + both +
+ setlinewidth_x + setlinewidth_y +
+ gsave + grestore +
+ concat + scale +
+ fshow +
+ setdash + -- no resetdash
+ showpage
+ )
+
+ -- order matters in terms of speed / we could check for procset first
+
+ local captures_old = ( space + verbose + preamble )^0
+ local captures_new = ( space + procset + preamble + verbose )^0
+
+ function mptopdf.parsers.lpeg()
+ if mptopdf.data:find("%%%%BeginResource: procset mpost") then
+ captures_new:match(mptopdf.data)
+ else
+ captures_old:match(mptopdf.data)
+ end
+ end
+
+end
+
+mptopdf.parser = 'lpeg'
diff --git a/Master/texmf-dist/tex/context/base/meta-pdf.mkii b/Master/texmf-dist/tex/context/base/meta-pdf.mkii
index 3060de539d6..51e01d8ed06 100644
--- a/Master/texmf-dist/tex/context/base/meta-pdf.mkii
+++ b/Master/texmf-dist/tex/context/base/meta-pdf.mkii
@@ -639,8 +639,15 @@
%D finally I saw the light. It proved that we also had to
%D take care of \type{(split arguments)}.
+% \startMPcode
+% draw btex Ga toch effe f\kern0ptietsen?{}` etex ;
+% \stopMPcode
+
+\newtoks \everyMPshowfont
+
\def\setMPfshowfont#1#2%
- {\font\temp=#1\space at #2\relax\temp}
+ {\font\temp=#1\space at #2\relax\temp
+ \the\everyMPshowfont}
\let\MPfshowcommand\empty
@@ -648,7 +655,7 @@
{\setbox\scratchbox\hbox
{\obeyMPspecials
\edef\MPtextsize{\gMPa\nofMParguments}%
- \def\do(##1){##1}%
+ \def\do(##1){##1}% only works in latest mp
\edef\MPtextdata{\dogMPa1}% beware, stack can have more
\handleMPtext}%
\setbox\scratchbox\hbox
@@ -665,13 +672,36 @@
{\ifnum\nofMParguments>\plusthree
\handleMPtextnormal
\else
- \convertcommand\MPtextdata\to\MPtextdata
+ \defconvertedcommand\MPtextdata\MPtextdata
\expanded{\splitstring\MPtextdata}\at::::\to\MPtexttag\and\MPtextnumber
\executeifdefined{handleMPtext\MPtexttag}\handleMPtextnormal
\fi}
% elsewhere we will implement \handleMPtextmptxt
+\def\doflushMPtext#1%
+ {\edef\!!stringa{#1}%
+ \@EA\dodoflushMPtext\!!stringa\relax}
+
+\def\dodoflushMPtext
+ {\afterassignment\dododoflushMPtext\let\nexttoken=}
+
+\def\dododoflushMPtext
+ {\ifx\nexttoken\relax
+ % done
+ \else\ifx\nexttoken\char
+ \@EA\@EA\@EA\dodododoflushMPtext
+ \else
+ {\nexttoken}%
+ \@EA\@EA\@EA\dodoflushMPtext
+ \fi\fi}
+
+\def\dodododoflushMPtext
+ {\afterassignment\dododododoflushMPtext\scratchcounter}
+
+\def\dododododoflushMPtext
+ {{\char\scratchcounter}\let\next\dodoflushMPtext}
+
\def\handleMPtextnormal
{\let\ \relax % mp breaks long lines and appends a \
\ifx\MPtextsize\PSnfont % round font size (to pt)
@@ -694,8 +724,8 @@
\MPfshowcommand
{\ifnum\nofMParguments=\plusone
\def\do(##1){##1}%
- \dogMPa1%
- \else
+ \doflushMPtext{\dogMPa1}%
+ \else % can't happen anymore in mp version 1+
% we need to catch ( a ) (a a a) (\123 \123 \123) etc
\scratchcounter\plusone
\def\dodo##1% Andreas Fieger's bug: (\304...)
@@ -860,9 +890,9 @@
\resetMPmoveto
\PDFcode{\!MPgMPs1 \!MPgMPs2 \!MPgMPs3 \!MPgMPs4 \!MPgMPs5 \!MPgMPs6 c}%
\or
- \ifx\lastMPmoveX\empty \else % bugged
+ \ifx\lastMPmoveX\empty \else % we assume 0,0 rlineto
\flushMPmoveto
- \PDFcode{\!MP\lastMPmoveX\space \!MP\lastMPmoveY\space l S}%
+ \PDFcode{\!MP\lastMPmoveX\space \!MP\lastMPmoveY\space l}%
\resetMPmoveto
\fi
\or
@@ -891,12 +921,13 @@
\PDFcode{\!MP\a\space\!MP\b\space
\!MP\c\space\!MP\d\space
\!MP\e\space\!MP\f\space c}%
- \or
+ \or % rather mp specific ... rline always has 0,0
\bgroup
\noMPtranslate
\flushMPconcatmoveto
+ % next should be \lastMPmoveX+\a,\lastMPmoveY+\b but we know it's 0,0
+ \PDFcode{\!MP\lastMPmoveX\space\!MP\lastMPmoveY\space l S}%
\resetMPmoveto
- \PDFcode{\!MP\a\space\!MP\b\space l S}%
\egroup
\or
% \flushMPconcatmoveto
diff --git a/Master/texmf-dist/tex/context/base/meta-pdf.mkiv b/Master/texmf-dist/tex/context/base/meta-pdf.mkiv
new file mode 100644
index 00000000000..eded7d59dbc
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/meta-pdf.mkiv
@@ -0,0 +1,155 @@
+%D \module
+%D [ file=meta-pdf,
+%D version=2006.29.09,
+%D title=\CONTEXT\ Support Macros,
+%D subtitle=\METAPOST\ to \PDF\ conversion,
+%D author=Hans Hagen \& others (see text),
+%D date=\currentdate,
+%D copyright=\PRAGMA]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\unprotect
+
+% Using test case at end of meta-pdf.tex:
+%
+% \useMPgraphic{1}
+% \testfeatureonce{250}{\setbox0\hbox{\convertMPtoPDF{test-mps-mpgraph.1}{1}{1}}}
+%
+% 8.4 : mkii, direct parsing by tex
+% 11.8 : mkiv, dirty conversion (10.8 with dirty tricks)
+% 14.5 : mkiv, clean conversion
+% 7.4 : mkiv, simulated clean direct lua from mp
+% 0.3 : time taken by tex to handle converted code
+
+\registerctxluafile{meta-pdf}{1.003}
+
+%D Plugin.
+
+\def\mkconvertMPtoPDF % watch the transparency reset
+ {\vbox\bgroup
+ \forgetall
+ \offinterlineskip
+ %\ifcase\blackoutMPgraphic\or\PDFcode{0 g 0 G}\fi % fixed in mp
+ \setbox\scratchbox\vbox\bgroup
+ \setnormalcatcodes % we can be in verbatim or so
+ \message{[MP to PDF]}%
+ \startMPresources
+ \PDFcomment{mps begin}%
+ \PDFcode{q 1 0 0 1 0 0 cm}%
+ \ctxlua{mptopdf.convertmpstopdf("\MPfilename")}\removeunwantedspaces
+ \dohandleMPresettransparency % a bit messy here, should be a toks
+ \PDFcode{Q}%
+ \PDFcomment{mps end}%
+ \stopMPresources
+ \egroup
+ \setbox\scratchbox\hbox\bgroup
+ \hskip-\MPllx\onebasepoint
+ \raise-\MPlly\onebasepoint
+ \box\scratchbox
+ \egroup
+ \setbox\scratchbox\vbox to \MPheight\bgroup
+ \vfill
+ \hsize\MPwidth
+ \smashbox\scratchbox
+ \box\scratchbox
+ \egroup
+ \wd\scratchbox\MPwidth
+ \ht\scratchbox\MPheight
+ \dopackageMPgraphic\scratchbox
+ \egroup}
+
+\let\mkprocessMPtoPDFfile\mkconvertMPtoPDF
+
+% \def\TEXcode#1#2#3#4#5%
+% {\setbox\scratchbox\hbox
+% {\font\temp=#1\space at #2\onebasepoint
+% \temp
+% \MPfshowcommand{#3}}%
+% \setbox\scratchbox\hbox
+% {\hskip#4\onebasepoint
+% \raise#5\onebasepoint
+% \box\scratchbox}%
+% \smashbox\scratchbox
+% \box\scratchbox}
+
+% will be done better
+
+\def\MPStextext#1#2#3#4#5% if we clean up this plugin model, we can
+ {\def\MPtextdata{#3}% % delegate the splitter to lua + redesign
+ \def\MPtextsize{#2}%
+ \def\lastMPmoveX{#4}%
+ \def\lastMPmoveY{#5}%
+ \defconvertedcommand\MPtextdata\MPtextdata % no edef
+ \splitstring\MPtextdata\at::::\to\MPtexttag\and\MPtextnumber
+ \executeifdefined{handleMPtext\MPtexttag}
+ {\setbox\scratchbox\hbox
+ {\font\temp=#1\space at #2\onebasepoint
+ \let\c\char
+ \temp
+ \MPfshowcommand{#3}}%
+ \setbox\scratchbox\hbox
+ {\hskip#4\onebasepoint
+ \raise#5\onebasepoint
+ \box\scratchbox}%
+ \smashbox\scratchbox
+ \box\scratchbox}}
+
+%D We save the special variables on a stack. It's not that
+%D fast, but it make implementing the special more convenient.
+
+\def\MPSbegin
+ {\nofMParguments\zerocount}
+
+\def\MPSend
+ {\csname\MPspecial\endcsname}
+
+\def\MPSset
+ {\advance\nofMParguments\plusone
+ \expandafter\def\csname\@@MP\number\nofMParguments\endcsname}
+
+\def\gMPs#1{\csname\@@MP\number#1\endcsname}
+
+%D The boundingbox.
+
+\def\MPSboundingbox#1#2#3#4%
+ {\xdef\MPllx{#1}%
+ \xdef\MPlly{#2}%
+ \xdef\MPurx{#3}%
+ \xdef\MPury{#4}%
+ \xdef\MPwidth {\the\dimexpr#3\onebasepoint-#1\onebasepoint\relax}%
+ \xdef\MPheight{\the\dimexpr#4\onebasepoint-#2\onebasepoint\relax}}
+
+\MPSboundingbox0000
+
+\def\MPSspecial#1#2%
+ {\csname\@@MPSK#2\endcsname}
+
+%D A path is (in most cases) just a sequence of \PDF\ commands.
+
+% \newcontitional\ignoreMPpath
+
+\def\MPSpath
+ {\PDFcode}
+
+\def\MPScode % hack, will be improved
+ {\ifconditional\ignoreMPpath
+ \PDFcode{h W n}%
+ \ifx\extraMPpathcode\empty\else
+ \PDFcode{\extraMPpathcode}%
+ \let\extraMPpathcode\empty
+ \fi
+ \setfalse\ignoreMPpath
+ \expandafter\gobbleoneargument
+ \else
+ \expandafter\PDFcode
+ \fi}
+
+\let\MPSrgb \dohandleMPrgb
+\let\MPScmyk\dohandleMPcmyk
+\let\MPSgray\dohandleMPgray
+\let\MPSspot\dohandleMPspot
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/meta-pdf.tex b/Master/texmf-dist/tex/context/base/meta-pdf.tex
index ad4a57fd942..d5b7f202fcd 100644
--- a/Master/texmf-dist/tex/context/base/meta-pdf.tex
+++ b/Master/texmf-dist/tex/context/base/meta-pdf.tex
@@ -13,6 +13,8 @@
%D Formerly known as supp-pdf.tex and supp-mpe.tex.
+%D We will clean up the color mess later.
+
%D These macros are written as generic as possible. Some
%D general support macro's are loaded from a small module
%D especially made for non \CONTEXT\ use. In this module I
@@ -811,7 +813,7 @@
{\global\let\MPresolvedspace\MPcmykspace
\xdef\MPresolvedcolor{##1 ##2 ##3 ##4}}%
\def\dostartspotcolormode##1##2%
- {\global\let\MPspotspace\empty
+ {\global\let\MPspotspace\empty % left over ?
\xdef\MPresolvedspace{##1}%
\xdef\MPresolvedcolor{##2}%
\global\let\MPspotspace\MPresolvedspace}% signal
@@ -961,4 +963,52 @@
% filldraw boundingbox currentpicture enlarged -3cm withpen pencircle scaled 1pt withcolor .5white ;
% \stopMPcode
+% This code will move to meta-pdf.mkiv and the call to lua will move to the
+% converter code (saves a lua call). We will do this when we made the final
+% move to attribute bases color. Actually, we cannot use attributes for
+% switching colors in mp literals because grouping (qQ) interferes.
+
+\ifx\colorversion\undefined \else \ifnum\colorversion>\plusone
+
+ \def\dohandleMPgraycolor #1{\ctxlua{ctx.pdffinishtransparency()
+ ctx.pdfgrayliteral(\the\currentcolormodel,#1)}}
+ \def\dohandleMPrgbcolor #1#2#3{\ctxlua{ctx.pdffinishtransparency()
+ ctx.pdfrgbliteral (\the\currentcolormodel,#1,#2,#3)}}
+ \def\dohandleMPcmykcolor#1#2#3#4{\ctxlua{ctx.pdffinishtransparency()
+ ctx.pdfcmykliteral(\the\currentcolormodel,#1,#2,#3,#4)}}
+ \def\dohandleMPspotcolor#1#2#3#4{\ctxlua{ctx.pdffinishtransparency()
+ ctx.pdfspotliteral(\the\currentcolormodel,"#1",#2,"#3","#4")}}
+
+ % we can combine the next calls
+
+ \def\dohandleMPgraytransparency #1#2#3{\ctxlua{ctx.pdfgrayliteral(\the\currentcolormodel,#1)
+ ctx.pdftransparencyliteral(#2,#3)}}
+ \def\dohandleMPrgbtransparency #1#2#3#4#5{\ctxlua{ctx.pdfrgbliteral (\the\currentcolormodel,#1,#2,#3)
+ ctx.pdftransparencyliteral(#4,#5)}}
+ \def\dohandleMPcmyktransparency#1#2#3#4#5#6{\ctxlua{ctx.pdfcmykliteral(\the\currentcolormodel,#1,#2,#3,#4)
+ ctx.pdftransparencyliteral(#5,#6)}}
+ \def\dohandleMPspottransparency#1#2#3#4#5#6{\ctxlua{ctx.pdfspotliteral(\the\currentcolormodel,"#1",#2,"#3","#4")
+ ctx.pdftransparencyliteral(#5,#6)}}
+
+ \def\dohandleMPresettransparency {\ctxlua{ctx.pdffinishtransparency()}}
+
+ \def\resolveMPgraycolor #1\to#2{\ctxlua{ctx.resolvempgraycolor("\strippedcsname#2","MPresolvedspace",\number\currentcolormodel,#1)}}
+ \def\resolveMPrgbcolor #1#2#3\to#4{\ctxlua{ctx.resolvemprgbcolor ("\strippedcsname#4","MPresolvedspace",\number\currentcolormodel,#1,#2,#3)}}
+ \def\resolveMPcmykcolor#1#2#3#4\to#5{\ctxlua{ctx.resolvempcmykcolor("\strippedcsname#5","MPresolvedspace",\number\currentcolormodel,#1,#2,#3,#4)}}
+
+ \def\resolveMPspotcolor#1#2#3#4\to#5% unchecked
+ {\ctxlua{ctx.resolvempspotcolor("\strippedcsname#5","MPresolvedspace",\number\currentcolormodel,"#1",#2,"#3","#4")}%
+ \xdef\MPresolvedspace{#1}%
+ \xdef\MPresolvedcolor{#4}%
+ \global\let\MPspotspace\MPresolvedspace}
+
+ % used as callers
+
+ \let\MPSgray\dohandleMPgraycolor
+ \let\MPSrgb \dohandleMPrgbcolor
+ \let\MPScmyk\dohandleMPcmykcolor
+ \let\MPspot \dohandleMPspotcolor
+
+\fi \fi
+
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/meta-tex.mkii b/Master/texmf-dist/tex/context/base/meta-tex.mkii
new file mode 100644
index 00000000000..5766f659f14
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/meta-tex.mkii
@@ -0,0 +1,349 @@
+%D \module
+%D [ file=meta-tex,
+%D version=2006.06.07,
+%D title=\CONTEXT\ Support Macros,
+%D subtitle=\METAPOST\ fast text insertion,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright=\PRAGMA]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D Many thanks to Fabrice Popineau and Taco Hoekwater in helping me
+%D figure out some aspects of the text inclusion method implemented
+%D here. The following code is derived from a more advanced (and to
+%D be used) mechanism where \TEX, \METAPOST\ and \LUA\ play together.
+
+%D Much of this mechanism was written with running live DVD's of
+%D the Dave Matthews band in the background (or the corner of my
+%D screen).
+
+% todo: testmacro for empty pic
+
+\unprotect
+
+\newwrite\TeXtextwrite
+
+\def\openTeXtexts {\immediate\openout \TeXtextwrite\currentTeXtext.mpb\relax}
+\def\closeTeXtexts{\immediate\closeout\TeXtextwrite}
+
+\def\currentTeXtext {\jobname-mpgraph}
+\def\currentTeXstack{mpgtxt}
+
+\initializeboxstack\currentTeXstack
+
+\newtoks\collectedmptexts
+\newtoks\everyTeXtexts
+
+\chardef\TeXtextsmode\zerocount % no inheritance
+
+\long\def\startTeXtexts#1\stopTeXtexts
+ {\global\collectedmptexts\expandafter{\the\collectedmptexts#1}}
+
+\def\dostartTeXtexts
+ {\global\setfalse\TeXtextdone
+ \startnointerference
+ \openTeXtexts
+ \ifcase\TeXtextsmode
+ % normally there is no need for this (faster anyway)
+ \or
+ \scantokens\expandafter{\the\everyMPTEXgraphic}% brr
+ \or
+ \the\everyTeXtexts
+ \fi
+ \ifrunMPgraphics
+ \initializeboxstack\currentTeXstack
+ \else
+ \global\let\openTeXtexts\relax
+ \global\let\finishTeXtexts\closeTeXtexts
+ \fi}
+
+\def\dostopTeXtexts
+ {\ifrunMPgraphics
+ \closeTeXtexts
+ \fi
+ \stopnointerference}
+
+\let\finishTeXtexts\relax
+
+\appendtoks
+ \finishTeXtexts
+\to \everystoptext
+
+\newconditional\TeXtextdone
+
+% \long\def\TeXtext#1%
+% {\dowithnextboxcontent
+% {\setnormalcatcodes}
+% {\global\settrue\TeXtextdone
+% \immediate\write\TeXtextwrite{savetxt(#1,\the\wd\nextbox,\the\ht\nextbox,\the\dp\nextbox);}%
+% \savebox\currentTeXstack{#1}{\box\nextbox}}
+% \hbox}
+
+\long\def\TeXtext
+ {\dosingleempty\doTeXtext}
+
+% currently, colors in the converter don't use the color stack
+%
+% 0 = nothing, withcolor works ok, but nested colors fail
+% 1 = local color stack ok
+% 2 = obey color stack (not yet supported)
+
+\chardef\TeXtextcolormode\plusone
+
+\def\definetextext[#1]#2{\setvalue{textext@@#1}{#2}}
+
+% \definetextext[framed]{\framed}
+%
+% \startMPcode
+% draw \sometxt[framed]{black} rotated 45 ;
+% \stopMPcode
+
+\long\def\doTeXtext[#1]#2#3%
+ {\begingroup
+ \setbox\nextbox\hbox
+ {\setnormalcatcodes
+ \endlinechar\minusone
+ \everyeof\emptytoks
+ %\def\ascii{#3}\scantokens\expandafter{\ascii}}%
+ \ifcase\TeXtextcolormode
+ \scantokens{\executeifdefined{textext@@#1}\firstofoneargument{#3}}%
+ \else
+ \localcolortrue
+ \startcurrentcolor
+ \scantokens{\executeifdefined{textext@@#1}\firstofoneargument{#3}}%
+ \stopcurrentcolor
+ \fi}%
+ \global\settrue\TeXtextdone
+ \edef\currenttextxt{\number#2}%
+ \executeifdefined{textext::#1}{\getvalue{textext::depth}}%
+ \savebox\currentTeXstack\currenttextxt{\box\nextbox}%
+ \endgroup}
+
+\setvalue{textext::depth}{\immediate\write\TeXtextwrite{savetxt(\currenttextxt,\the\nextboxwd,\the\nextboxht,\the\nextboxdp) shifted (0,-\the\nextboxdp);}}
+\setvalue{textext::nodepth}{\immediate\write\TeXtextwrite{savetxt(\currenttextxt,\the\nextboxwd,\the\nextboxht,\the\nextboxdp);}}
+
+\setvalue{textext::d}{\getvalue{textext::depth}}
+\setvalue{textext::n}{\getvalue{textext::nodepth}}
+
+\newbox\mptextbox
+
+% \loadmapfile[lm-texnansi.map] % the font is not really used, i.e. nothing ends up in the file
+\definefontsynonym[MPtxtfont][texnansi-lmtt10]
+\definefont[localMPtxtfont][MPtxtfont at 10bp]
+
+\ifx\getTeXtext\undefined
+
+ % this took a while to figure out
+
+ \let\MPtextdata\empty
+
+ \def\getTeXtext
+ {\ifx\MPtextdata\empty\else
+ \localMPtxtfont
+ \setbox\mptextbox\hbox{\foundbox\currentTeXstack{\number\nofTeXtexts}}%
+ \setbox\scratchbox\hbox{\MPtextdata}% set in meta-pdf.mkii/mkiv
+ \edef\mpwd{\the\dimexpr\MPtextsize\dimexpr\wd\scratchbox/10\relax\relax}%
+ \edef\mpht{\the\dimexpr\MPtextsize\dimexpr\ht\scratchbox/10\relax\relax}%
+ \setbox\mptextbox\hbox{\raise\dp\mptextbox\box\mptextbox}%
+ \dp\mptextbox\zeropoint
+ \scale[\c!width=\mpwd,\c!height=\mpht]{\box\mptextbox}%
+ \fi}
+
+\fi
+
+\let\nofTeXtexts\!!zerocount
+
+\setvalue{handleMPtext00001}% only height in tag (00001)
+ {\setbox\scratchbox\hbox
+ {\obeyMPspecials
+ \edef\nofTeXtexts{\number\MPtextnumber}%
+ \getTeXtext}%
+ \setbox\scratchbox\hbox
+ {\hskip\lastMPmoveX\onebasepoint\raise\lastMPmoveY\onebasepoint
+ \box\scratchbox}%
+ \ht\scratchbox\zeropoint
+ \dp\scratchbox\zeropoint
+ \wd\scratchbox\zeropoint
+ \box\scratchbox}
+
+\startMPextensions
+ string txtfile ; txtfile := "\currentTeXtext.mpb" ;
+ string txtfont ; txtfont := "\truefontname{MPtxtfont}" ;
+ string txtpref ; txtpref := "00001::::" ;
+\stopMPextensions
+
+\newcount\metatxtcounter
+
+\long\def\dodofiltersometxt#1#2#3%
+ {\ifx#2\empty
+ \else
+ \advance\metatxtcounter\plusone
+ \TeXtext{\the\metatxtcounter}{#1}%
+ \expandafter\filtersometxt
+ \fi#2#3}
+
+\long\def\redofiltersometxt[#1]#2%
+ {\advance\metatxtcounter\plusone
+ \TeXtext[#1]{\the\metatxtcounter}{#2}%
+ \filtersometxt}
+
+\long\def\filtersometxt#1\sometxt
+ {\doifnextcharelse[\redofiltersometxt\dodofiltersometxt}
+
+% cleaner in mkiv
+%
+% \filtersometxt abc\sometxt{def};hij\sometxt{klm};\sometxt{}\empty\relax
+
+\long\def\flushTeXtexts#1%
+ {\metatxtcounter\zerocount
+ \dostartTeXtexts
+ \the\collectedmptexts
+ \filtersometxt#1\sometxt{}\empty\relax
+ \dostopTeXtexts
+ \ifconditional\TeXtextdone
+ \immediate\write\MPwrite{loadtxts ; txtnext := 0 ;}%
+ \global\collectedmptexts\emptytoks
+ \fi
+ \metatxtcounter\zerocount}
+
+% \long\def\sometxt#1{sometxt(nexttxt)} % to be used in mp definitions, no ; here
+
+\long\def\sometxt #1#{\dosometxt} % grab optional [args]
+\long\def\dosometxt#1{sometxt(nexttxt)} % to be used in mp definitions, no ; here
+
+% we redefine the writer:
+
+\long\def\writecheckedMPgraphic#1%
+ {\ifforceMPTEXgraphic
+ \global\MPTEXgraphictrue
+ \else
+ \global\MPTEXgraphicfalse
+ \edef\ascii{#1}\defconvertedcommand\MPascii\ascii
+ \the\MPTEXgraphicchecks\relax % \relax is end condition!
+ \fi
+ \flushMPTEXgraphic% % verbatimtex etc
+ \flushTeXtexts{#1}% added
+ \writeMPgraphic{#1}} % potential optimization: pass \ascii
+
+\protect \endinput
+
+% torture test (will move)
+
+\startMPpage
+ numeric a_b_c ;
+ picture p ; pickup pencircle scaled .1pt ;
+ p := \sometxt{Just a \color[blue]{simple} example text.} ;
+ p := image(draw p; draw boundingbox p withcolor red; ) ;
+ p := p rotatedaround(center p, 360*(5/100)) ;
+ draw p ; draw boundingbox p withcolor blue ;
+ currentpicture := currentpicture scaled 20 ;
+ draw boundingbox currentpicture withcolor .5white ;
+ setbounds currentpicture to boundingbox currentpicture enlarged 10pt ;
+\stopMPpage
+
+\startMPpage
+ picture p ;
+ p := \sometxt{\framed[width=fit,align=middle]{\input tufte\relax}} ;
+ draw p rotatedaround(center p, 30) ;
+\stopMPpage
+
+\startMPpage
+ picture p ;
+ p := \sometxt{\framed[width=fit,align=middle]{\input tufte\relax}} ;
+ draw p slanted .5 ;
+\stopMPpage
+
+\dorecurse{10} {
+ \startTeXtexts
+ \TeXtext{\recurselevel}{\ruledhbox{I must be {\green crazy} to implement this}}
+ \stopTeXtexts
+ \startMPpage
+ picture p ; pickup pencircle scaled .1pt ;
+ numeric i ; i := \recurselevel ;
+ p := sometxt(i) ;
+ p := p rotatedaround(center p, 360*(i*5/100)) ;
+ draw p ; draw boundingbox p withcolor blue ;
+ currentpicture := currentpicture scaled 20 ;
+ draw boundingbox currentpicture withcolor .5white ;
+ \stopMPpage
+}
+
+\startTeXtexts
+ \dorecurse{100}{\TeXtext{\recurselevel}{\ruledhbox{\strut interesting \recurselevel}}}
+\stopTeXtexts
+
+\startMPpage
+ picture p ; pickup pencircle scaled .1pt ;
+ for i = 1 upto 100:
+ p := sometxt(i) ;
+ p := p rotatedaround(center p, 360*(i*5/100)) ;
+ draw p ; draw boundingbox p withcolor blue ;
+ endfor ;
+ currentpicture := currentpicture scaled 20 ;
+ draw boundingbox currentpicture withcolor .5white ;
+\stopMPpage
+
+\startTeXtexts
+ \dorecurse{100}{\TeXtext{\recurselevel}{\ruledhbox{\strut interesting \recurselevel}}}
+\stopTeXtexts
+
+\startMPpage
+ picture p ; pickup pencircle scaled .1pt ;
+ for i = 1 step 5 until 100 :
+ p := sometxt(i) ;
+ p := p rotatedaround(center p, 360*(i/100)) ;
+ draw p ; draw boundingbox p withcolor blue ;
+ endfor ;
+ currentpicture := currentpicture scaled 20 ;
+ draw boundingbox currentpicture withcolor .5white ;
+\stopMPpage
+
+\startTeXtexts
+ \dorecurse{20}{\TeXtext{\recurselevel}{\externalfigure[t:/sources/cow.pdf][width=1cm]}}
+\stopTeXtexts
+
+\startMPpage
+ picture p ; pickup pencircle scaled .1pt ;
+ for i = 1 upto 20 :
+ p := sometxt(i) ;
+ p := p shifted (2.5cm,0) rotated (360*(i/20)) ;
+ draw p ; draw boundingbox p withcolor blue ;
+ endfor ;
+ currentpicture := currentpicture scaled 10 ;
+ draw boundingbox currentpicture withcolor .5white ;
+\stopMPpage
+
+\startTeXtexts
+ \dorecurse{200}{\TeXtext{\recurselevel}{\ruledhbox{\strut I must be {\green crazy} \recurselevel}}}
+\stopTeXtexts
+
+\startMPpage
+ picture p ; pickup pencircle scaled .1pt ;
+ numeric i ; i := 100 ;
+ p := sometxt(i) ;
+ p := p rotatedaround(center p, 360*(i*36/100)) ;
+ draw p ; draw boundingbox p withcolor blue ;
+ currentpicture := currentpicture scaled 20 ;
+ draw boundingbox currentpicture withcolor .5white ;
+\stopMPpage
+
+\dorecurse{10}{
+ \startTeXtexts
+ \dorecurse{200}{\TeXtext{\recurselevel}{\ruledhbox{\strut I must be {\green crazy} \recurselevel}}}
+ \stopTeXtexts
+ \startMPpage
+ picture p ; pickup pencircle scaled .1pt ;
+ j := 10*\recurselevel-9;
+ k := 10*\recurselevel;
+ for i = j upto k:
+ p := sometxt(i) ;
+ p := p rotatedaround(center p, 360*(i/100)) ;
+ draw p ; draw boundingbox p withcolor blue ;
+ endfor ;
+ currentpicture := currentpicture scaled 20 ;
+ draw boundingbox currentpicture withcolor red ;
+ \stopMPpage
+}
diff --git a/Master/texmf-dist/tex/context/base/meta-tex.mkiv b/Master/texmf-dist/tex/context/base/meta-tex.mkiv
new file mode 100644
index 00000000000..6afc7efc52d
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/meta-tex.mkiv
@@ -0,0 +1,35 @@
+%D \module
+%D [ file=meta-tex,
+%D version=2006.06.07,
+%D title=\CONTEXT\ Support Macros,
+%D subtitle=\METAPOST\ fast text insertion,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright=\PRAGMA]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\unprotect
+
+\long\def\startTeXtexts#1\stopTeXtexts{[do we need TeXtexts in MkIV]}
+\long\def\doTeXtext[#1]#2{[do we need TeXtexts in MkIV]}
+\long\def\TeXtext{\dosingleempty\doTeXtext}
+
+\def\definetextext[#1]#2{\setvalue{textext@@#1}{#2}}
+
+% \definetextext[framed]{\framed}
+%
+% \startMPcode
+% draw \sometxt[framed]{black} rotated 45 ;
+% \stopMPcode
+
+\def\definetextext[#1]#2{\setvalue{@@st@@[#1]}{#2}}
+
+\long\def\sometxt#1#{\dosometxt{#1}} % grab optional [args]
+
+\long\def\dosometxt#1#2%
+ {textext("\ifcsname @@st@@#1\endcsname\csname @@st@@#1\endcsname{#2}\else#2\fi")}
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/meta-txt.tex b/Master/texmf-dist/tex/context/base/meta-txt.tex
index de4239e8543..564a40752f6 100644
--- a/Master/texmf-dist/tex/context/base/meta-txt.tex
+++ b/Master/texmf-dist/tex/context/base/meta-txt.tex
@@ -24,6 +24,9 @@
% textext ipv btex ... etex
+\ifx\undefined\MPtoks \newtoks\MPtoks \fi
+\ifx\undefined\MPnox \newbox \MPbox \fi
+
\unprotect
\startMPextensions
@@ -46,16 +49,16 @@
\def\startshapetext[#1]%
{\global\newcounter\currentshapetext
- \global\setbox\shapetextbox=\vbox\bgroup
+ \global\setbox\shapetextbox\vbox\bgroup
\expanded{\switchtobodyfont[\@@shbodyfont]}%
\dontcomplain
\hsize\parwidth
\setuptolerance[\v!verytolerant,\v!stretch]%
- \!!counta=0
- \!!toksa=\emptytoks
+ \!!counta\zerocount
+ \!!toksa\emptytoks
\def\docommand##1%
- {\setbox\scratchbox=\hbox{\useMPgraphic{##1}}%
- \global\chardef\parfirst=0
+ {\setbox\scratchbox\hbox{\useMPgraphic{##1}}%
+ \global\chardef\parfirst\zerocount
\getMPdata % \readlocfile{\MPdatafile}{}{}%
\setshapecharacteristics
\advance\!!counta by \parlines
@@ -71,7 +74,7 @@
\ifparseries\def\par{\endgraf\adaptparshape}\fi
\EveryPar{\begstrut}}
-\def\stopshapetext%
+\def\stopshapetext
{\endstrut
%\removebottomthings
\egroup
@@ -104,8 +107,8 @@
\global\parhoffset \getvalue{parhoffset:\currentshapetext}%
\global\parwidth \getvalue{parwidth:\currentshapetext}%
\global\parheight \getvalue{parheight:\currentshapetext}}
- {\global\parlines 1
- \global\chardef\parfirst 0
+ {\global\parlines \plusone
+ \global\chardef\parfirst \zerocount
\global\parvoffset \zeropoint
\global\parhoffset \zeropoint
\global\parwidth \hsize
@@ -172,7 +175,7 @@
\MPtoks\emptytoks
\resetMPdrawing
\startMPdrawing
- \includeMPgraphic{followtokens}
+ \includeMPgraphic{followtokens} ;
picture pic[] ; numeric len[], n ; n := 0 ;
\stopMPdrawing
\handletokens#1\with\processfollowingtoken
@@ -268,10 +271,10 @@
[medium]
\startuniqueMPgraphic{EnglishRule}{height,width,color}
- height = \MPvar{height} ;
- x1 = 0 ; x3 = \MPvar{width} ; x2 = x4 = .5x3 ;
- y1 = y3 = 0 ; y2 = -y4 = height/2 ;
- fill z1..z2..z3 & z3..z4..z1 & cycle withcolor \MPvar{color} ;
+ height = \MPvar{height} ;
+ x1 = 0 ; x3 = \MPvar{width} ; x2 = x4 = .5x3 ;
+ y1 = y3 = 0 ; y2 = -y4 = height/2 ;
+ fill z1..z2..z3 & z3..z4..z1 & cycle withcolor \MPvar{color} ;
\stopuniqueMPgraphic
\def\EnglishRule%
diff --git a/Master/texmf-dist/tex/context/base/meta-xml.tex b/Master/texmf-dist/tex/context/base/meta-xml.tex
index 2138111f835..f6f81f767b0 100644
--- a/Master/texmf-dist/tex/context/base/meta-xml.tex
+++ b/Master/texmf-dist/tex/context/base/meta-xml.tex
@@ -23,7 +23,7 @@
\def\setMPtextXML#1#2%
{\bgroup
\enableXML
- \expanded{\convertcommand#2}\to\ascii
+ \expanded{\defconvertedcommand\noexpand\ascii{#2}}%
\expanded{\egroup\noexpand\dodoglobal\noexpand\setvalue{\@@MPT#1}{\ascii}}}
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/mlib-ctx.lua b/Master/texmf-dist/tex/context/base/mlib-ctx.lua
new file mode 100644
index 00000000000..6ada8ad1922
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mlib-ctx.lua
@@ -0,0 +1,39 @@
+if not modules then modules = { } end modules ['mlib-ctx'] = {
+ version = 1.001,
+ comment = "companion to mlib-ctx.tex",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files",
+}
+
+-- todo
+
+local format, join = string.format, table.concat
+local sprint = tex.sprint
+
+metapost = metapost or {}
+metapost.defaultformat = "metafun"
+
+function metapost.graphic(mpsformat,str,preamble)
+ local mpx = metapost.format(mpsformat or metapost.defaultformat)
+ metapost.graphic_base_pass(mpx,str,preamble)
+end
+
+function metapost.filterclippath(result)
+ if result then
+ local figures = result.fig
+ if figures and #figures > 0 then
+ local figure = figures[1]
+ local objects = figure:objects()
+ if objects then
+ for o=1,#objects do
+ local object = objects[o]
+ if object.type == "start_clip" then
+ return join(flushnormalpath(object.path,{ }),"\n")
+ end
+ end
+ end
+ end
+ end
+ return ""
+end
diff --git a/Master/texmf-dist/tex/context/base/mlib-ctx.tex b/Master/texmf-dist/tex/context/base/mlib-ctx.tex
new file mode 100644
index 00000000000..6f56b7e685c
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mlib-ctx.tex
@@ -0,0 +1,81 @@
+%D \module
+%D [ file=mlib-ctx,
+%D version=2008.03.25,
+%D title=\METAPOST\ Integrated Graphics,
+%D subtitle=Basics,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright=PRAGMA]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D This file contains the \MPLIB\ variants of the by now ancient
+%D \MPTOPDF\ code.
+
+\writestatus{loading}{MetaPost Library Graphics / Initializations}
+
+\registerctxluafile{mlib-run}{1.001}
+\registerctxluafile{mlib-ctx}{1.001}
+
+\unprotect
+
+\protect \endinput
+
+% local mpgraphic = [[
+% for i=1 upto 1000 :
+% beginfig(0);
+% draw halfcircle scaled 1cm withcolor green ;
+% picture p ; p := "oeps" infont defaultfont scaled .75 rotated 45 ;
+% p := p shifted - (xpart center p,0) ;
+% draw p ; draw boundingbox p ;
+% endfig ;
+% beginfig(0);
+% draw halfcircle scaled 1cm dashed evenly withcolor green ;
+% endfig ;
+% beginfig(0);
+% pickup pencircle xscaled .5mm yscaled .25mm rotated 45 ;
+% draw halfcircle scaled 1cm withcolor red ;
+% endfig ;
+% beginfig(0);
+% draw halfcircle scaled 1cm ;
+% endfig ;
+% beginfig(0);
+% pickup pencircle xscaled .5mm yscaled .25mm rotated 45 ;
+% for k:=1 upto 10 :
+% draw halfcircle scaled uniformdeviate(1cm) withcolor (red/(k/4)) ;
+% endfor ;
+% endfig ;
+% endfor ;
+% ]]
+% -- local mpx = metapost.format("metafun")
+% metapost.process(metapost.format("metafun"),mpgraphic)
+
+% \starttext
+% \setupcolors[state=start]
+% \definecolor[red] [r=1]
+% \definecolor[cyan][c=1]
+% \setbox\scratchbox\hbox{\startMPcode\stopMPcode} % first specials are forgotten
+% \definecolor[sss][t=.5,a=1,r=1]
+% \definespotcolor[oeps1][green][p=.5]
+% \definespotcolor[oeps2][green][p=.25]
+% \definespotcolor[oeps3][green][p=.25,t=.5,a=1]
+% \startMPpage
+% fill fullcircle scaled 10cm withcolor \MPcolor{red} ;
+% fill fullcircle scaled 8cm withcolor cmyk(1,0,0,0) ;
+% fill fullcircle scaled 6cm withcolor cmyk(0,1,0,0) ;
+% fill fullcircle scaled 4cm withcolor cmyk(0,0,1,0) ;
+% fill fullcircle scaled 2cm withcolor cmyk(0,0,0,1) ;
+% currentpicture := currentpicture shifted (-7.5cm,0) ;
+% fill fullcircle scaled 10cm withcolor transparent(1,0.75,cmyk(0,0,1,0)) ;
+% fill fullcircle scaled 8cm withcolor \MPcolor{sss} ;
+% fill fullcircle scaled 6cm withcolor \MPcolor{oeps1} ;
+% fill fullcircle scaled 4cm withcolor \MPcolor{oeps2} ;
+% currentpicture := currentpicture shifted (-7.5cm,0) ;
+% fill fullcircle scaled 10cm withcolor \MPcolor{oeps3} ;
+% circular_shade(fullcircle scaled 8cm, 1, red, blue) ;
+% circular_shade(fullcircle scaled 6cm, 1, (1,0,0,0), (0,1,0,0)) ;
+% circular_shade(fullcircle scaled 4cm, 1, cmyk(.5,.5,1,0), (0,1,0,0)) ;
+% \stopMPpage
+% \stoptext
diff --git a/Master/texmf-dist/tex/context/base/mlib-pdf.lua b/Master/texmf-dist/tex/context/base/mlib-pdf.lua
new file mode 100644
index 00000000000..344052607a3
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mlib-pdf.lua
@@ -0,0 +1,526 @@
+if not modules then modules = { } end modules ['mlib-pdf'] = {
+ version = 1.001,
+ comment = "companion to mlib-ctx.tex",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files",
+}
+
+local format, join = string.format, table.concat
+local sprint = tex.sprint
+local abs, sqrt, round = math.abs, math.sqrt, math.round
+
+metapost = metapost or { }
+metapost.multipass = false
+metapost.n = 0
+
+function metapost.convert(result, trialrun, flusher, multipass)
+ if trialrun then
+ metapost.multipass = false
+ metapost.parse(result, flusher)
+ if multipass and not metapost.multipass then
+ metapost.flush(result, flusher) -- saves a run
+ else
+ return false
+ end
+ else
+ metapost.flush(result, flusher)
+ end
+ return true -- done
+end
+
+function metapost.comment(message)
+ if message then
+ sprint(tex.ctxcatcodes,format("\\MPLIBtoPDF{\\letterpercent\\space mps graphic %s: %s}", metapost.n, message))
+ end
+end
+
+metapost.flushers = { }
+metapost.flushers.pdf = { }
+
+function metapost.flushers.pdf.startfigure(n,llx,lly,urx,ury,message)
+ metapost.n = metapost.n + 1
+ sprint(tex.ctxcatcodes,format("\\startMPLIBtoPDF{%s}{%s}{%s}{%s}",llx,lly,urx,ury))
+ if message then metapost.comment(message) end
+end
+
+function metapost.flushers.pdf.stopfigure(message)
+ if message then metapost.comment(message) end
+ sprint(tex.ctxcatcodes,"\\stopMPLIBtoPDF")
+end
+
+function metapost.flushers.pdf.flushfigure(pdfliterals) -- table
+ if #pdfliterals > 0 then
+ sprint(tex.ctxcatcodes,"\\MPLIBtoPDF{",join(pdfliterals,"\n"),"}")
+ end
+end
+
+function metapost.flushers.pdf.textfigure(font,size,text,width,height,depth) -- we could save the factor
+ text = text:gsub(".","\\hbox{%1}") -- kerning happens in metapost (i have to check if this is true for mplib)
+ sprint(tex.ctxcatcodes,format("\\MPLIBtextext{%s}{%s}{%s}{%s}{%s}",font,size,text,0,-number.dimenfactors.bp*depth))
+end
+
+-- the pen calculations are taken from metapost, first converted by
+-- taco from c to lua, and then optimized by hans, so all errors are his
+
+local function pyth(a,b)
+ return sqrt(a*a + b*b) -- much faster than sqrt(a^2 + b^2)
+end
+
+local aspect_bound = 10/65536
+local aspect_default = 1/65536
+local bend_tolerance = 131/65536
+local eps = 0.0001
+
+local function coord_range_x(h, dz) -- direction x
+ local zlo, zhi = 0, 0
+ for i=1, #h do
+ local p = h[i]
+ local z = p.x_coord
+ if z < zlo then zlo = z elseif z > zhi then zhi = z end
+ z = p.right_x
+ if z < zlo then zlo = z elseif z > zhi then zhi = z end
+ z = p.left_x
+ if z < zlo then zlo = z elseif z > zhi then zhi = z end
+ end
+ return (zhi - zlo <= dz and aspect_bound) or aspect_default
+end
+
+local function coord_range_y(h, dz) -- direction y
+ local zlo, zhi = 0, 0
+ for i=1, #h do
+ local p = h[i]
+ local z = p.y_coord
+ if z < zlo then zlo = z elseif z > zhi then zhi = z end
+ z = p.right_y
+ if z < zlo then zlo = z elseif z > zhi then zhi = z end
+ z = p.left_y
+ if z < zlo then zlo = z elseif z > zhi then zhi = z end
+ end
+ return (zhi - zlo <= dz and aspect_bound) or aspect_default
+end
+
+local rx, sx, sy, ry, tx, ty, divider = 1, 0, 0, 1, 0, 0, 1
+
+local function pen_characteristics(object)
+ local p = object.pen[1]
+ local x_coord, y_coord, left_x, left_y, right_x, right_y = p.x_coord, p.y_coord, p.left_x, p.left_y, p.right_x, p.right_y
+ local wx, wy, width
+ if right_x == x_coord and left_y == y_coord then
+ wx = abs(left_x - x_coord)
+ wy = abs(right_y - y_coord)
+ else
+ wx = pyth(left_x - x_coord, right_x - x_coord)
+ wy = pyth(left_y - y_coord, right_y - y_coord)
+ end
+ if wy/coord_range_x(object.path, wx) >= wx/coord_range_y(object.path, wy) then
+ width = wy
+ else
+ width = wx
+ end
+ sx, rx, ry, sy, tx, ty = left_x, left_y, right_x, right_y, x_coord, y_coord
+ sx, rx, ry, sy = (sx-tx), (rx-ty), (ry-tx), (sy-ty) -- combine with previous
+ if width ~= 1 then
+ if width == 0 then
+ sx, sy = 1, 1
+ else
+ rx, ry, sx, sy = rx/width, ry/width, sx/width, sy/width
+ end
+ end
+ -- sx rx ry sy tx ty -> 1 0 0 1 0 0 is ok, but 0 0 0 0 0 0 not
+ if true then
+ if abs(sx) < eps then sx = eps end
+ if abs(sy) < eps then sy = eps end
+ else
+ -- this block looks complicated but it only captures invalid transforms
+ -- to be checked rx vs sx and so
+ local det = sx/sy - ry/rx
+ local aspect = 4*aspect_bound + aspect_default
+ if abs(det) < aspect then
+ local s
+ if det >= 0 then
+ s, aspect = 1, aspect - det
+ else
+ s, aspect = -1, -aspect - det -- - ?
+ end
+ local absrx, absry, abssy, abssx = abs(rx), abs(ry), abs(sy), abs(sx)
+ if abssx + abssy >= absry + absrx then -- was yy
+ if abssx > abssy then
+ sy = sy + (aspect + s*abssx) / sx
+ else
+ sx = sx + (aspect + s*abssy) / sy
+ end
+ else
+ if absry > absrx then
+ rx = rx + (aspect + s*absry) / ry
+ else
+ ry = ry + (aspect + s*absrx) / rx
+ end
+ end
+ end
+ end
+ divider = sx*sy - rx*ry
+ return not (sx==1 and rx==0 and ry==0 and sy==1 and tx==0 and ty==0), width
+end
+
+local function concat(px, py) -- no tx, ty here
+ return (sy*px-ry*py)/divider,(sx*py-rx*px)/divider
+end
+
+local function curved(ith,pth)
+ local d = pth.left_x - ith.right_x
+ if abs(ith.right_x-ith.x_coord-d) <= bend_tolerance and abs(pth.x_coord-pth.left_x-d) <= bend_tolerance then
+ d = pth.left_y - ith.right_y
+ if abs(ith.right_y-ith.y_coord-d) <= bend_tolerance and abs(pth.y_coord-pth.left_y-d) <= bend_tolerance then
+ return false
+ end
+ end
+ return true
+end
+
+local function flushnormalpath(path, t, open)
+ local pth, ith
+ for i=1,#path do
+ pth = path[i]
+ if not ith then
+ t[#t+1] = format("%f %f m",pth.x_coord,pth.y_coord)
+ elseif curved(ith,pth) then
+ t[#t+1] = format("%f %f %f %f %f %f c",ith.right_x,ith.right_y,pth.left_x,pth.left_y,pth.x_coord,pth.y_coord)
+ else
+ t[#t+1] = format("%f %f l",pth.x_coord,pth.y_coord)
+ end
+ ith = pth
+ end
+ if not open then
+ local one = path[1]
+ if curved(pth,one) then
+ t[#t+1] = format("%f %f %f %f %f %f c",pth.right_x,pth.right_y,one.left_x,one.left_y,one.x_coord,one.y_coord )
+ else
+ t[#t+1] = format("%f %f l",one.x_coord,one.y_coord)
+ end
+ end
+ return t
+end
+
+local function flushconcatpath(path, t, open)
+ t[#t+1] = format("%f %f %f %f %f %f cm", sx, rx, ry, sy, tx ,ty)
+ local pth, ith
+ for i=1,#path do
+ pth = path[i]
+ if not ith then
+ t[#t+1] = format("%f %f m",concat(pth.x_coord,pth.y_coord))
+ elseif curved(ith,pth) then
+ local a, b = concat(ith.right_x,ith.right_y)
+ local c, d = concat(pth.left_x,pth.left_y)
+ t[#t+1] = format("%f %f %f %f %f %f c",a,b,c,d,concat(pth.x_coord, pth.y_coord))
+ else
+ t[#t+1] = format("%f %f l",concat(pth.x_coord, pth.y_coord))
+ end
+ ith = pth
+ end
+ if not open then
+ local one = path[1]
+ if curved(pth,one) then
+ local a, b = concat(pth.right_x,pth.right_y)
+ local c, d = concat(one.left_x,one.left_y)
+ t[#t+1] = format("%f %f %f %f %f %f c",a,b,c,d,concat(one.x_coord, one.y_coord))
+ else
+ t[#t+1] = format("%f %f l",concat(one.x_coord,one.y_coord))
+ end
+ end
+ return t
+end
+
+metapost.specials = metapost.specials or { }
+
+-- we have two extension handlers, one for pre and postscripts, and one for colors
+
+-- the flusher is pdf based, if another backend is used, we need to overload the
+-- flusher; this is beta code, the organization will change
+
+function metapost.flush(result,flusher) -- pdf flusher, table en dan concat is sneller, 1 literal
+ if result then
+ local figures = result.fig
+ if figures then
+ flusher = flusher or metapost.flushers.pdf
+ local colorconverter = metapost.colorconverter() -- function !
+ local colorhandler = metapost.colorhandler
+ for f=1, #figures do
+ local figure = figures[f]
+--~ local objects = figure:objects()
+local objects = result.objects
+if not objects then
+ objects = figure:objects()
+ result.objects = objects
+end
+ local fignum = tonumber((figure:filename()):match("([%d]+)$") or 0)
+ local t = { }
+ local miterlimit, linecap, linejoin, dashed = -1, -1, -1, false
+ local bbox = figure:boundingbox()
+ local llx, lly, urx, ury = bbox[1], bbox[2], bbox[3], bbox[4] -- faster than unpack
+ if urx < llx then
+ -- invalid
+ flusher.startfigure(fignum,0,0,0,0,"invalid")
+ flusher.stopfigure()
+ else
+ flusher.startfigure(fignum,llx,lly,urx,ury,"begin")
+ t[#t+1] = "q"
+ if objects then
+ for o=1,#objects do
+ local object = objects[o]
+ local objecttype = object.type
+ if objecttype == "start_bounds" or objecttype == "stop_bounds" then
+ -- skip
+ elseif objecttype == "start_clip" then
+ t[#t+1] = "q"
+ flushnormalpath(object.path,t,false)
+ t[#t+1] = "W n"
+ elseif objecttype == "stop_clip" then
+ t[#t+1] = "Q"
+ miterlimit, linecap, linejoin, dashed = -1, -1, -1, false
+ elseif objecttype == "special" then
+ metapost.specials.register(object.prescript)
+ elseif objecttype == "text" then
+ t[#t+1] = "q"
+ local ot = object.transform -- 3,4,5,6,1,2
+ t[#t+1] = format("%f %f %f %f %f %f cm",ot[3],ot[4],ot[5],ot[6],ot[1],ot[2]) -- TH: format("%f %f m %f %f %f %f 0 0 cm",unpack(ot))
+ flusher.flushfigure(t)
+ t = { }
+ flusher.textfigure(object.font,object.dsize,object.text,object.width,object.height,object.depth)
+ t[#t+1] = "Q"
+ else
+ -- alternatively we can pass on the stack, could be a helper
+ local currentobject = { -- not needed when no extensions
+ type = object.type,
+ miterlimit = object.miterlimit,
+ linejoin = object.linejoin,
+ linecap = object.linecap,
+ color = object.color,
+ dash = object.dash,
+ path = object.path,
+ htap = object.htap,
+ pen = object.pen,
+ prescript = object.prescript,
+ postscript = object.postscript,
+ }
+ --
+ local before, inbetween, after = nil, nil, nil
+ --
+ local cs, cr = currentobject.color, nil
+ -- todo document why ...
+ if cs and colorhandler and #cs > 0 and round(cs[1]*10000) == 123 then -- test in function
+ currentobject, cr = colorhandler(cs,currentobject,t,colorconverter)
+ objecttype = currentobject.type
+ end
+ --
+ local prescript = currentobject.prescript
+ if prescript then
+ -- move test to function
+ local special = metapost.specials[prescript]
+ if special then
+ currentobject, before, inbetween, after = special(currentobject.postscript,currentobject,t,flusher)
+ objecttype = currentobject.type
+ end
+ end
+ --
+ cs = currentobject.color
+ if cs and #cs > 0 then
+ t[#t+1], cr = colorconverter(cs)
+ end
+ --
+ if before then object, t = before() end
+ local ml = currentobject.miterlimit
+ if ml and ml ~= miterlimit then
+ miterlimit = ml
+ t[#t+1] = format("%f M",ml)
+ end
+ local lj = currentobject.linejoin
+ if lj and lj ~= linejoin then
+ linejoin = lj
+ t[#t+1] = format("%i j",lj)
+ end
+ local lc = currentobject.linecap
+ if lc and lc ~= linecap then
+ linecap = lc
+ t[#t+1] = format("%i J",lc)
+ end
+ local dl = currentobject.dash
+ if dl then
+ local d = format("[%s] %i d",join(dl.dashes or {}," "),dl.offset)
+ if d ~= dashed then
+ dashed = d
+ t[#t+1] = dashed
+ end
+ elseif dashed then
+ t[#t+1] = "[] 0 d"
+ dashed = false
+ end
+ if inbetween then object, t = inbetween() end
+ local path = currentobject.path
+ local transformed, penwidth = false, 1
+ local open = path and path[1].left_type and path[#path].right_type -- at this moment only "end_point"
+ local pen = currentobject.pen
+ if pen then
+ if pen.type=='elliptical' then
+ transformed, penwidth = pen_characteristics(object) -- boolean, value
+ t[#t+1] = format("%f w",penwidth) -- todo: only if changed
+ if objecttype == 'fill' then
+ objecttype = 'both'
+ end
+ else -- calculated by mplib itself
+ objecttype = 'fill'
+ end
+ end
+ if transformed then
+ t[#t+1] = "q"
+ end
+ if path then
+ if transformed then
+ flushconcatpath(path,t,open)
+ else
+ flushnormalpath(path,t,open)
+ end
+ if objecttype == "fill" then
+ t[#t+1] = "h f"
+ elseif objecttype == "outline" then
+ t[#t+1] = (open and "S") or "h S"
+ elseif objecttype == "both" then
+ t[#t+1] = "h B"
+ end
+ end
+ if transformed then
+ t[#t+1] = "Q"
+ end
+ local path = currentobject.htap
+ if path then
+ if transformed then
+ t[#t+1] = "q"
+ end
+ if transformed then
+ flushconcatpath(path,t,open)
+ else
+ flushnormalpath(path,t,open)
+ end
+ if objecttype == "fill" then
+ t[#t+1] = "h f"
+ elseif objecttype == "outline" then
+ t[#t+1] = (open and "S") or "h S"
+ elseif objecttype == "both" then
+ t[#t+1] = "h B"
+ end
+ if transformed then
+ t[#t+1] = "Q"
+ end
+ end
+ if cr then
+ t[#t+1] = cr
+ end
+ if after then object, t = after() end
+ end
+ end
+ end
+ t[#t+1] = "Q"
+ flusher.flushfigure(t)
+ flusher.stopfigure("end")
+ end
+ end
+ end
+ end
+end
+
+function metapost.parse(result)
+ if result then
+ local figures = result.fig
+ if figures then
+ for f=1, #figures do
+ local figure = figures[f]
+--~ local objects = figure:objects()
+local objects = result.objects
+if not objects then
+ objects = figure:objects()
+ result.objects = objects
+end
+ if objects then
+ for o=1,#objects do
+ local object = objects[o]
+ if object.type == "outline" then
+ local prescript = object.prescript
+ if prescript then
+ local special = metapost.specials[prescript]
+ if special then
+ special(object.postscript,object)
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+end
+
+do
+
+ -- just tracing
+
+ local t = { }
+
+ local flusher = {
+ startfigure = function()
+ t = { }
+ sprint(tex.ctxcatcodes,"\\startnointerference")
+ end,
+ flushfigure = function(literals)
+ for i=1, #literals do
+ t[#t+1] = literals[i]
+ end
+ end,
+ stopfigure = function()
+ sprint(tex.ctxcatcodes,"\\stopnointerference")
+ end
+ }
+
+ function metapost.pdfliterals(result)
+ metapost.flush(result,flusher)
+ return t
+ end
+
+end
+
+function metapost.totable(result)
+ local figure = result and result.fig and result.fig[1]
+ if figure then
+ local t = { }
+ local objects = figure:objects()
+ for _, object in ipairs(objects) do
+ local tt = { }
+ for _, field in ipairs(mplib.fields(object)) do
+ tt[field] = object[field]
+ end
+ t[#t+1] = tt
+ end
+ local b = figure:boundingbox()
+ return {
+ boundingbox = { llx = b[1], lly = b[2], urx = b[3], ury = b[4] },
+ objects = t
+ }
+ else
+ return nil
+ end
+end
+
+function metapost.colorconverter()
+ return function(cr)
+ local n = #cr
+ if n == 4 then
+ local c, m, y, k = cr[1], cr[2], cr[3], cr[4]
+ return format("%.3f %.3f %.3f %.3f k %.3f %.3f %.3f %.3f K",c,m,y,k,c,m,y,k), "0 g 0 G"
+ elseif n == 3 then
+ local r, g, b = cr[1], cr[2], cr[3]
+ return format("%.3f %.3f %.3f rg %.3f %.3f %.3f RG",r,g,b,r,g,b), "0 g 0 G"
+ else
+ local s = cr[1]
+ return format("%.3f g %.3f G",s,s), "0 g 0 G"
+ end
+ end
+end
diff --git a/Master/texmf-dist/tex/context/base/mlib-pdf.tex b/Master/texmf-dist/tex/context/base/mlib-pdf.tex
new file mode 100644
index 00000000000..b7b8506ad64
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mlib-pdf.tex
@@ -0,0 +1,90 @@
+%D \module
+%D [ file=mlib-pdf,
+%D version=2008.03.25,
+%D title=\METAPOST\ Integrated Graphics,
+%D subtitle=Conversion to PDF,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright=PRAGMA]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\unprotect
+
+\registerctxluafile{mlib-pdf}{1.001}
+
+\let\MPLIBtoPDF\pdfliteral
+
+\def\MPLIBboundingbox#1#2#3#4%
+ {\xdef\MPllx{#1}%
+ \xdef\MPlly{#2}%
+ \xdef\MPurx{#3}%
+ \xdef\MPury{#4}%
+ \xdef\MPwidth {\the\dimexpr#3\onebasepoint-#1\onebasepoint\relax}%
+ \xdef\MPheight{\the\dimexpr#4\onebasepoint-#2\onebasepoint\relax}}
+
+\def\startMPLIBtoPDF#1#2#3#4% watch the transparency reset
+ {\hbox\bgroup
+ \MPLIBboundingbox{#1}{#2}{#3}{#4}%
+ \forgetall
+ \setbox\scratchbox\vbox\bgroup
+ \noindent % this is really needed in order to force tex into proper cm's
+ \startMPresources}
+
+\def\stopMPLIBtoPDF % watch the transparency reset
+ {%\dohandleMPresettransparency % not needed
+ \stopMPresources
+ \egroup
+ \setbox\scratchbox\hbox\bgroup
+ \hskip-\MPllx\onebasepoint
+ \raise-\MPlly\onebasepoint
+ \box\scratchbox
+ \egroup
+ \setbox\scratchbox\vbox to \MPheight\bgroup
+ \vfill
+ \hsize\MPwidth
+ \smashbox\scratchbox
+ \box\scratchbox
+ \egroup
+ \wd\scratchbox\MPwidth
+ \ht\scratchbox\MPheight
+ \dopackageMPgraphic\scratchbox
+ \egroup}
+
+% \def\MPLIBtextext#1#2#3#4#5%
+% {\begingroup
+% \def\MPtextdata{#3}% delegate the splitter to lua
+% \defconvertedcommand\MPtextdata\MPtextdata % no edef
+% \splitstring\MPtextdata\at::::\to\MPtexttag\and\MPtextnumber
+% \executeifdefined{handleMPtext\MPtexttag}
+% {\setbox\scratchbox\hbox
+% {\font\temp=#1\space at #2\onebasepoint
+% \let\c\char
+% \temp
+% \MPfshowcommand{#3}}%
+% \setbox\scratchbox\hbox
+% {\hskip#4\onebasepoint
+% \raise#5\onebasepoint
+% \box\scratchbox}%
+% \smashbox\scratchbox
+% \box\scratchbox}%
+% \endgroup}
+
+\def\MPLIBtextext#1#2#3#4#5%
+ {\begingroup
+ \setbox\scratchbox\hbox
+ {\font\temp=#1\space at #2\onebasepoint
+ \let\c\char
+ \temp
+ \MPfshowcommand{#3}}%
+ \setbox\scratchbox\hbox
+ {\hskip#4\onebasepoint
+ \raise#5\onebasepoint
+ \box\scratchbox}%
+ \smashbox\scratchbox
+ \box\scratchbox
+ \endgroup}
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/mlib-pps.lua b/Master/texmf-dist/tex/context/base/mlib-pps.lua
new file mode 100644
index 00000000000..0e3d2e3ecea
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mlib-pps.lua
@@ -0,0 +1,832 @@
+if not modules then modules = { } end modules ['mlib-pps'] = { -- prescript, postscripts and specials
+ version = 1.001,
+ comment = "companion to mlib-ctx.tex",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files",
+}
+
+local format, concat, round = string.format, table.concat, math.round
+local sprint = tex.sprint
+
+colors = colors or { }
+
+local rgbtocmyk = colors.rgbtocmyk or function() return 0,0,0,1 end
+local cmyktorgb = colors.cmyktorgb or function() return 0,0,0 end
+local rgbtogray = colors.rgbtogray or function() return 0 end
+local cmyktogray = colors.cmyktogray or function() return 0 end
+
+metapost = metapost or { }
+metapost.specials = metapost.specials or { }
+metapost.specials.data = metapost.specials.data or { }
+
+local data = metapost.specials.data
+
+local colordata = { {}, {}, {}, {}, {} }
+
+--~ (r,g,b) => cmyk : r=123 g= 1 b=hash
+--~ => spot : r=123 g= 2 b=hash
+--~ => transparent rgb : r=123 g= 3 b=hash
+--~ => transparent cmyk : r=123 g= 4 b=hash
+--~ => transparent spot : r=123 g= 5 b=hash
+--~ => rest : r=123 g=n>10 b=whatever
+
+function metapost.specials.register(str) -- only colors
+ local size, content, n, class = str:match("^%%%%MetaPostSpecial: (%d+) (.*) (%d+) (%d+)$")
+ if class then
+ local data = { }
+ for s in content:gmatch("[^ ]+") do
+ data[#data+1] = s
+ end
+ class, n = tonumber(class), tonumber(n)
+ if class == 3 or class == 4 or class == 5 then -- weird
+ colordata[class][n] = data
+ else
+ colordata[class][tonumber(data[1])] = data
+ end
+ end
+end
+
+function metapost.colorhandler(cs, object, result, colorconverter)
+ local cr = "0 g 0 G"
+ local what = round(cs[2]*10000)
+ local data = colordata[what][round(cs[3]*10000)]
+ if not data then
+ --
+ elseif what == 1 then
+ result[#result+1], cr = colorconverter({ data[2], data[3], data[4], data[5] })
+ elseif what == 2 then
+ ctx.registerspotcolor(data[2])
+ result[#result+1] = ctx.pdfcolor(colors.model,colors.register('color',nil,'spot',data[2],data[3],data[4],data[5]))
+ else
+ if what == 3 then
+ result[#result+1], cr = colorconverter({ data[3], data[4], data[5]})
+ elseif what == 4 then
+ result[#result+1], cr = colorconverter({ data[3], data[4], data[5], data[6]})
+ elseif what == 5 then
+ ctx.registerspotcolor(data[3])
+ result[#result+1] = ctx.pdfcolor(colors.model,colors.register('color',nil,'spot',data[3],data[4],data[5],data[6]))
+ end
+ object.prescript = "tr"
+ object.postscript = data[1] .. "," .. data[2]
+ end
+ object.color = nil
+ return object, cr
+end
+
+function metapost.colorspec(cs)
+ local what = round(cs[2]*10000)
+ local data = colordata[what][round(cs[3]*10000)]
+ if not data then
+ return { 0 }
+ elseif what == 1 then
+ return { data[2], data[3], data[4], data[5] }
+ elseif what == 2 then
+ ctx.registerspotcolor(data[2])
+ return ctx.pdfcolor(colors.model,colors.register('color',nil,'spot',data[2],data[3],data[4],data[5]))
+ elseif what == 3 then
+ return { data[3], data[4], data[5] }
+ elseif what == 4 then
+ return { data[3], data[4], data[5], data[6] }
+ elseif what == 5 then
+ ctx.registerspotcolor(data[3])
+ return ctx.pdfcolor(colors.model,colors.register('color',nil,'spot',data[3],data[4],data[5],data[6]))
+ end
+end
+
+function metapost.specials.tr(specification,object,result)
+ local a, t = specification:match("^(.+),(.+)$")
+ local before = a and t and function()
+ result[#result+1] = format("/Tr%s gs",transparencies.register('mp',a,t))
+ return object, result
+ end
+ local after = before and function()
+ result[#result+1] = "/Tr0 gs"
+ return object, result
+ end
+ return object, before, nil, after
+end
+
+--~ -- possible speedup: hash registered colors
+--~
+--~ function metapost.specials.sp(specification,object,result) -- todo: color conversion
+--~ local s = object.color[1]
+--~ object.color = nil
+--~ local before = function()
+--~ local spec = specification:split(" ")
+--~ ctx.registerspotcolor(spec[1])
+--~ result[#result+1] = ctx.pdfcolor(colors.model,colors.register('color',nil,'spot',spec[1],spec[2],spec[3],s))
+--~ return object, result
+--~ end
+--~ local after = function()
+--~ result[#result+1] = "0 g 0 G"
+--~ return object, result
+--~ end
+--~ return object, before, nil, nil
+--~ end
+
+-- Unfortunately we cannot use cmyk colors natively because there is no
+-- generic color allocation primitive ... it's just an rgbcolor color.. This
+-- means that we cannot pass colors in either cmyk or rgb form.
+--
+-- def cmyk(expr c,m,y,k) =
+-- 1 withprescript "cc" withpostscript ddddecimal (c,m,y,k)
+-- enddef ;
+--
+-- This is also an example of a simple plugin.
+
+--~ function metapost.specials.cc(specification,object,result)
+--~ object.color = specification:split(" ")
+--~ return object, nil, nil, nil
+--~ end
+--~ function metapost.specials.cc(specification,object,result)
+--~ local c = specification:split(" ")
+--~ local o = object.color[1]
+--~ c[1],c[2],c[3],c[4] = o*c[1],o*c[2],o*c[3],o*c[4]
+--~ return object, nil, nil, nil
+--~ end
+
+-- thanks to taco's reading of the postscript manual:
+--
+-- x' = sx * x + ry * y + tx
+-- y' = rx * x + sy * y + ty
+
+function metapost.specials.fg(specification,object,result,flusher)
+ local op = object.path
+ local first, second, fourth = op[1], op[2], op[4]
+ local tx, ty = first.x_coord , first.y_coord
+ local sx, sy = second.x_coord - tx, fourth.y_coord - ty
+ local rx, ry = second.y_coord - ty, fourth.x_coord - tx
+ if sx == 0 then sx = 0.00001 end
+ if sy == 0 then sy = 0.00001 end
+ local before = specification and function()
+ flusher.flushfigure(result)
+ sprint(tex.ctxcatcodes,format("\\MPLIBfigure{%f}{%f}{%f}{%f}{%f}{%f}{%s}",sx,rx,ry,sy,tx,ty,specification))
+ return object, { }
+ end
+ return { } , before, nil, nil -- replace { } by object for tracing
+end
+
+local nofshades = 0 -- todo: hash resources, start at 1000 in order not to clash with older
+
+local function normalize(ca,cb)
+ if #cb == 1 then
+ if #ca == 4 then
+ cb[1], cb[2], cb[3], cb[4] = 0, 0, 0, 1-cb[1]
+ else
+ cb[1], cb[2], cb[3] = cb[1], cb[1], cb[1]
+ end
+ elseif #cb == 3 then
+ if #ca == 4 then
+ cb[1], cb[2], cb[3], cb[4] = rgbtocmyk(cb[1],cb[2],cb[3])
+ else
+ cb[1], cb[2], cb[3] = cmyktorgb(cb[1],cb[2],cb[3],cb[4])
+ end
+ end
+end
+
+function metapost.specials.cs(specification,object,result,flusher) -- spot colors?
+ nofshades = nofshades + 1
+ flusher.flushfigure(result)
+ result = { }
+ local t = specification:split(" ")
+ -- we need a way to move/scale
+ local ca = t[4]:split(":")
+ local cb = t[8]:split(":")
+ if round(ca[1]*10000) == 123 then ca = metapost.colorspec(ca) end
+ if round(cb[1]*10000) == 123 then cb = metapost.colorspec(cb) end
+ if type(ca) == "string" then
+ -- spot color, not supported, maybe at some point use the fallbacks
+ sprint(tex.ctxcatcodes,format("\\MPLIBcircularshade{%s}{%s %s}{%.3f}{%.3f}{%s}{%s}{%s %s %s %s %s %s}",
+ nofshades,
+ t[1], t[2], 0, 1, 1, "DeviceGray",
+ t[5], t[6], t[7], t[9], t[10], t[11]))
+ else
+ if #ca > #cb then
+ normalize(ca,cb)
+ elseif #ca < #cb then
+ normalize(cb,ca)
+ end
+ local model = colors.model
+ if model == "all" then
+ model= (#ca == 4 and "cmyk") or (#ca == 3 and "rgb") or "gray"
+ end
+ if model == "rgb" then
+ if #ca == 4 then
+ ca[1], ca[2], ca[3] = cmyktorgb(ca[1],ca[2],ca[3],ca[4])
+ cb[1], cb[2], cb[3] = cmyktorgb(cb[1],cb[2],cb[3],cb[4])
+ elseif #ca == 1 then
+ local a, b = 1-ca[1], 1-cb[1]
+ ca[1], ca[2], ca[3] = a, a, a
+ cb[1], cb[2], cb[3] = b, b, b
+ end
+ sprint(tex.ctxcatcodes,format("\\MPLIBcircularshade{%s}{%s %s}{%.3f %.3f %.3f}{%.3f %.3f %.3f}{%s}{%s}{%s %s %s %s %s %s}",
+ nofshades,
+ t[1], t[2], ca[1], ca[2], ca[3], cb[1], cb[2], cb[3], 1, "DeviceRGB",
+ t[5], t[6], t[7], t[9], t[10], t[11]))
+ elseif model == "cmyk" then
+ if #ca == 3 then
+ ca[1], ca[2], ca[3], ca[4] = rgbtocmyk(ca[1],ca[2],ca[3])
+ cb[1], cb[2], cb[3], ca[4] = rgbtocmyk(cb[1],cb[2],cb[3])
+ elseif #ca == 1 then
+ ca[1], ca[2], ca[3], ca[4] = 0, 0, 0, ca[1]
+ cb[1], cb[2], cb[3], ca[4] = 0, 0, 0, ca[1]
+ end
+ sprint(tex.ctxcatcodes,format("\\MPLIBcircularshade{%s}{%s %s}{%.3f %.3f %.3f %.3f}{%.3f %.3f %.3f %.3f}{%s}{%s}{%s %s %s %s %s %s}",
+ nofshades,
+ t[1], t[2], ca[1], ca[2], ca[3], ca[4], cb[1], cb[2], cb[3], cb[4], 1, "DeviceCMYK",
+ t[5], t[6], t[7], t[9], t[10], t[11]))
+ else
+ if #ca == 4 then
+ ca[1] = cmyktogray(ca[1],ca[2],ca[3],ca[4])
+ cb[1] = cmyktogray(cb[1],cb[2],cb[3],cb[4])
+ elseif #ca == 3 then
+ ca[1] = rgbtogray(ca[1],ca[2],ca[3])
+ cb[1] = rgbtogray(cb[1],cb[2],cb[3])
+ end
+ sprint(tex.ctxcatcodes,format("\\MPLIBcircularshade{%s}{%s %s}{%.3f}{%.3f}{%s}{%s}{%s %s %s %s %s %s}",
+ nofshades,
+ t[1], t[2], ca[1], cb[1], 1, "DeviceGray",
+ t[5], t[6], t[7], t[9], t[10], t[11]))
+ end
+ end
+ local before = function()
+ result[#result+1] = "q /Pattern cs"
+ return object, result
+ end
+ local after = function()
+ result[#result+1] = format("W n /MpSh%s sh Q", nofshades)
+ return object, result
+ end
+ object.color, object.type = nil, nil
+ return object, before, nil, after
+end
+
+function metapost.specials.ls(specification,object,result,flusher)
+ nofshades = nofshades + 1
+ flusher.flushfigure(result)
+ result = { }
+ local t = specification:split(" ")
+ -- we need a way to move/scale
+ local ca = t[4]:split(":")
+ local cb = t[7]:split(":")
+ if round(ca[1]*10000) == 123 then ca = metapost.colorspec(ca) end
+ if round(cb[1]*10000) == 123 then cb = metapost.colorspec(cb) end
+ if type(ca) == "string" then
+ -- spot color, not supported, maybe at some point use the fallbacks
+ sprint(tex.ctxcatcodes,format("\\MPLIBlinearshade{%s}{%s %s}{%.3f}{%.3f}{%s}{%s}{%s %s %s %s}",
+ nofshades,
+ t[1], t[2], 0, 1, 1, "DeviceGray",
+ t[5], t[6], t[8], t[9]))
+ else
+ if #ca > #cb then
+ normalize(ca,cb)
+ elseif #ca < #cb then
+ normalize(cb,ca)
+ end
+ local model = colors.model
+ if model == "all" then
+ model= (#ca == 4 and "cmyk") or (#ca == 3 and "rgb") or "gray"
+ end
+ if model == "rgb" then
+ if #ca == 4 then
+ ca[1], ca[2], ca[3] = cmyktorgb(ca[1],ca[2],ca[3],ca[4])
+ cb[1], cb[2], cb[3] = cmyktorgb(cb[1],cb[2],cb[3],cb[4])
+ elseif #ca == 1 then
+ local a, b = 1-ca[1], 1-cb[1]
+ ca[1], ca[2], ca[3] = a, a, a
+ cb[1], cb[2], cb[3] = b, b, b
+ end
+ sprint(tex.ctxcatcodes,format("\\MPLIBlinearshade{%s}{%s %s}{%.3f %.3f %.3f}{%.3f %.3f %.3f}{%s}{%s}{%s %s %s %s}",
+ nofshades,
+ t[1], t[2], ca[1], ca[2], ca[3], cb[1], cb[2], cb[3], 1, "DeviceRGB",
+ t[5], t[6], t[8], t[9]))
+ elseif model == "cmyk" then
+ if #ca == 3 then
+ ca[1], ca[2], ca[3], ca[4] = rgbtocmyk(ca[1],ca[2],ca[3])
+ cb[1], cb[2], cb[3], ca[4] = rgbtocmyk(cb[1],cb[2],cb[3])
+ elseif #ca == 1 then
+ ca[1], ca[2], ca[3], ca[4] = 0, 0, 0, ca[1]
+ cb[1], cb[2], cb[3], ca[4] = 0, 0, 0, ca[1]
+ end
+ sprint(tex.ctxcatcodes,format("\\MPLIBlinearshade{%s}{%s %s}{%.3f %.3f %.3f %.3f}{%.3f %.3f %.3f %.3f}{%s}{%s}{%s %s %s %s}",
+ nofshades,
+ t[1], t[2], ca[1], ca[2], ca[3], ca[4], cb[1], cb[2], cb[3], cb[4], 1, "DeviceCMYK",
+ t[5], t[6], t[8], t[9]))
+ else
+ if #ca == 4 then
+ ca[1] = cmyktogray(ca[1],ca[2],ca[3],ca[4])
+ cb[1] = cmyktogray(cb[1],cb[2],cb[3],cb[4])
+ elseif #ca == 3 then
+ ca[1] = rgbtogray(ca[1],ca[2],ca[3])
+ cb[1] = rgbtogray(cb[1],cb[2],cb[3])
+ end
+ sprint(tex.ctxcatcodes,format("\\MPLIBlinearshade{%s}{%s %s}{%.3f}{%.3f}{%s}{%s}{%s %s %s %s}",
+ nofshades,
+ t[1], t[2], ca[1], cb[1], 1, "DeviceGray",
+ t[5], t[6], t[8], t[9]))
+ end
+ end
+ local before = function()
+ result[#result+1] = "q /Pattern cs"
+ return object, result
+ end
+ local after = function()
+ result[#result+1] = format("W n /MpSh%s sh Q", nofshades)
+ return object, result
+ end
+ object.color, object.type = nil, nil
+ return object, before, nil, after
+end
+
+-- no need for a before here
+
+local current_format, current_graphic
+
+--~ metapost.first_box, metapost.last_box = 1000, 1100
+
+metapost.textext_current = metapost.first_box
+metapost.trace_texttexts = false
+metapost.multipass = false
+
+function metapost.specials.tf(specification,object)
+--~ print("setting", metapost.textext_current)
+ local n, str = specification:match("^(%d+):(.+)$")
+ if metapost.textext_current < metapost.last_box then
+ metapost.textext_current = metapost.first_box + n - 1
+ end
+ if metapost.trace_texttexts then
+ print("metapost", format("first pass: order %s, box %s",n,metapost.textext_current))
+ end
+ sprint(tex.ctxcatcodes,format("\\MPLIBsettext{%s}{%s}",metapost.textext_current,str))
+ metapost.multipass = true
+ return { }, nil, nil, nil
+end
+
+function metapost.specials.ts(specification,object,result,flusher)
+ -- print("getting", metapost.textext_current)
+ local n, str = specification:match("^(%d+):(.+)$")
+ if metapost.trace_texttexts then
+ print("metapost", format("second pass: order %s, box %s",n,metapost.textext_current))
+ end
+ local op = object.path
+ local first, second, fourth = op[1], op[2], op[4]
+ local tx, ty = first.x_coord , first.y_coord
+ local sx, sy = second.x_coord - tx, fourth.y_coord - ty
+ local rx, ry = second.y_coord - ty, fourth.x_coord - tx
+ if sx == 0 then sx = 0.00001 end
+ if sy == 0 then sy = 0.00001 end
+ local before = function() -- no need for function
+ --~ flusher.flushfigure(result)
+ --~ sprint(tex.ctxcatcodes,format("\\MPLIBgettext{%f}{%f}{%f}{%f}{%f}{%f}{%s}",sx,rx,ry,sy,tx,ty,metapost.textext_current))
+ --~ result = { }
+ result[#result+1] = format("q %f %f %f %f %f %f cm", sx,rx,ry,sy,tx,ty)
+ flusher.flushfigure(result)
+ if metapost.textext_current < metapost.last_box then
+ metapost.textext_current = metapost.first_box + n - 1
+ end
+ local b = metapost.textext_current
+ sprint(tex.ctxcatcodes,format("\\MPLIBgettextscaled{%s}{%s}{%s}",b, metapost.sxsy(tex.wd[b],tex.ht[b],tex.dp[b])))
+ result = { "Q" }
+ return object, result
+ end
+ return { }, before, nil, nil -- replace { } by object for tracing
+end
+
+function metapost.colorconverter()
+ -- it no longer pays off to distinguish between outline and fill
+ -- (we now have both too, e.g. in arrows)
+ local model = colors.model
+ if model == "all" then
+ return function(cr)
+ local n = #cr
+ if n == 1 then
+ local s = cr[1]
+ return format("%.3f g %.3f G",s,s), "0 g 0 G"
+ elseif n == 4 then
+ local c, m, y, k = cr[1], cr[2], cr[3], cr[4]
+ return format("%.3f %.3f %.3f %.3f k %.3f %.3f %.3f %.3f K",c,m,y,k,c,m,y,k), "0 g 0 G"
+ else
+ local r, g, b = cr[1], cr[2], cr[3]
+ return format("%.3f %.3f %.3f rg %.3f %.3f %.3f RG",r,g,b,r,g,b), "0 g 0 G"
+ end
+ end
+ elseif model == "rgb" then
+ return function(cr)
+ local n = #cr
+ if n == 1 then
+ local s = cr[1]
+ return format("%.3f g %.3f G",s,s), "0 g 0 G"
+ end
+ local r, g, b
+ if n == 4 then
+ r, g, b = cmyktorgb(cr[1],cr[2],cr[3],cr[4])
+ else
+ r, g, b = cr[1],cr[2],cr[3]
+ end
+ return format("%.3f %.3f %.3f rg %.3f %.3f %.3f RG",r,g,b,r,g,b), "0 g 0 G"
+ end
+ elseif model == "cmyk" then
+ return function(cr)
+ local n = #cr
+ if n == 1 then
+ local s = cr[1]
+ return format("%.3f g %.3f G",s,s), "0 g 0 G"
+ end
+ local c, m, y, k
+ if n == 4 then
+ c, m, y, k = cr[1], cr[2], cr[3], cr[4]
+ else
+ c, m, y, k = rgbtocmyk(cr[1],cr[2],cr[3])
+ end
+ return format("%.3f %.3f %.3f %.3f k %.3f %.3f %.3f %.3f K",c,m,y,k,c,m,y,k), "0 g 0 G"
+ end
+ else
+ return function(cr)
+ local s
+ local n = #cr
+ if n == 4 then
+ s = cmyktogray(cr[1],cr[2],cr[3],cr[4])
+ elseif n == 3 then
+ s = rgbtogray(cr[1],cr[2],cr[3])
+ else
+ s = cr[1]
+ end
+ return format("%.3f g %.3f G",s,s), "0 g 0 G"
+ end
+ end
+end
+
+--~ local cmyk_fill = "%.3f %.3f %.3f %.3f k"
+--~ local rgb_fill = "%.3f %.3f %.3f rg"
+--~ local gray_fill = "%.3f g"
+--~ local reset_fill = "0 g"
+
+--~ local cmyk_stroke = "%.3f %.3f %.3f %.3f K"
+--~ local rgb_stroke = "%.3f %.3f %.3f RG"
+--~ local gray_stroke = "%.3f G"
+--~ local reset_stroke = "0 G"
+
+metapost.reducetogray = true
+
+function metapost.colorconverter() -- rather generic pdf, so use this elsewhere too
+ -- it no longer pays off to distinguish between outline and fill
+ -- (we now have both too, e.g. in arrows)
+ local model = colors.model
+ local reduce = metapost.reducetogray
+ if model == "all" then
+ return function(cr)
+ local n = #cr
+ if reduce then
+ if n == 1 then
+ local s = cr[1]
+ return format("%.3f g %.3f G",s,s), "0 g 0 G"
+ elseif n == 3 then
+ local r, g, b = cr[1], cr[2], cr[3]
+ if r == g and g == b then
+ return format("%.3f g %.3f G",r,r), "0 g 0 G"
+ else
+ return format("%.3f %.3f %.3f rg %.3f %.3f %.3f RG",r,g,b,r,g,b), "0 g 0 G"
+ end
+ else
+ local c, m, y, k = cr[1], cr[2], cr[3], cr[4]
+ if c == m and m == y and y == 0 then
+ k = 1 - k
+ return format("%.3f g %.3f G",k,k), "0 g 0 G"
+ else
+ return format("%.3f %.3f %.3f %.3f k %.3f %.3f %.3f %.3f K",c,m,y,k,c,m,y,k), "0 g 0 G"
+ end
+ end
+ elseif n == 1 then
+ local s = cr[1]
+ return format("%.3f g %.3f G",s,s), "0 g 0 G"
+ elseif n == 3 then
+ local r, g, b = cr[1], cr[2], cr[3]
+ return format("%.3f %.3f %.3f rg %.3f %.3f %.3f RG",r,g,b,r,g,b), "0 g 0 G"
+ else
+ local c, m, y, k = cr[1], cr[2], cr[3], cr[4]
+ return format("%.3f %.3f %.3f %.3f k %.3f %.3f %.3f %.3f K",c,m,y,k,c,m,y,k), "0 g 0 G"
+ end
+ end
+ elseif model == "rgb" then
+ return function(cr)
+ local n = #cr
+ if reduce then
+ if n == 1 then
+ local s = cr[1]
+ return format("%.3f g %.3f G",s,s), "0 g 0 G"
+ elseif n == 3 then
+ local r, g, b = cr[1], cr[2], cr[3]
+ if r == g and g == b then
+ return format("%.3f g %.3f G",r,r), "0 g 0 G"
+ else
+ return format("%.3f %.3f %.3f rg %.3f %.3f %.3f RG",r,g,b,r,g,b), "0 g 0 G"
+ end
+ else
+ local c, m, y, k = cr[1], cr[2], cr[3], cr[4]
+ if c == m and m == y and y == 0 then
+ k = 1 - k
+ return format("%.3f g %.3f G",k,k), "0 g 0 G"
+ else
+ local r, g, b = cmyktorgb(c,m,y,k)
+ return format("%.3f %.3f %.3f rg %.3f %.3f %.3f RG",r,g,b,r,g,b), "0 g 0 G"
+ end
+ end
+ elseif n == 1 then
+ local s = cr[1]
+ return format("%.3f g %.3f G",s,s), "0 g 0 G"
+ else
+ local r, g, b
+ if n == 3 then
+ r, g, b = cmyktorgb(cr[1],cr[2],cr[3],cr[4])
+ else
+ r, g, b = cr[1], cr[2], cr[3]
+ end
+ return format("%.3f %.3f %.3f rg %.3f %.3f %.3f RG",r,g,b,r,g,b), "0 g 0 G"
+ end
+ end
+ elseif model == "cmyk" then
+ return function(cr)
+ local n = #cr
+ if reduce then
+ if n == 1 then
+ local s = cr[1]
+ return format("%.3f g %.3f G",s,s), "0 g 0 G"
+ elseif n == 3 then
+ local r, g, b = cr[1], cr[2], cr[3]
+ if r == g and g == b then
+ return format("%.3f g %.3f G",r,r), "0 g 0 G"
+ else
+ local c, m, y, k = rgbtocmyk(r,g,b)
+ return format("%.3f %.3f %.3f %.3f k %.3f %.3f %.3f %.3f K",c,m,y,k,c,m,y,k), "0 g 0 G"
+ end
+ else
+ local c, m, y, k = cr[1], cr[2], cr[3], cr[4]
+ if c == m and m == y and y == 0 then
+ k = 1 - k
+ return format("%.3f g %.3f G",k,k), "0 g 0 G"
+ else
+ return format("%.3f %.3f %.3f %.3f k %.3f %.3f %.3f %.3f K",c,m,y,k,c,m,y,k), "0 g 0 G"
+ end
+ end
+ elseif n == 1 then
+ local s = cr[1]
+ return format("%.3f g %.3f G",s,s), "0 g 0 G"
+ else
+ local c, m, y, k
+ if n == 3 then
+ c, m, y, k = rgbtocmyk(cr[1],cr[2],cr[3])
+ else
+ c, m, y, k = cr[1], cr[2], cr[3], cr[4]
+ end
+ return format("%.3f %.3f %.3f %.3f k %.3f %.3f %.3f %.3f K",c,m,y,k,c,m,y,k), "0 g 0 G"
+ end
+ end
+ else
+ return function(cr)
+ local n, s = #cr, 0
+ if n == 4 then
+ s = cmyktogray(cr[1],cr[2],cr[3],cr[4])
+ elseif n == 3 then
+ s = rgbtogray(cr[1],cr[2],cr[3])
+ else
+ s = cr[1]
+ end
+ return format("%.3f g %.3f G",s,s), "0 g 0 G"
+ end
+ end
+end
+
+do
+
+ local P, S, V, Cs = lpeg.P, lpeg.S, lpeg.V, lpeg.Cs
+
+ local btex = P("btex")
+ local etex = P(" etex")
+ local vtex = P("verbatimtex")
+ local ttex = P("textext")
+ local gtex = P("graphictext")
+ local spacing = S(" \n\r\t\v")^0
+ local dquote = P('"')
+
+ local found = false
+
+ local function convert(str)
+ found = true
+ return "textext(\"" .. str .. "\")"
+ end
+ local function ditto(str)
+ return "\" & ditto & \""
+ end
+ local function register()
+ found = true
+ end
+
+ local parser = P {
+ [1] = Cs((V(2)/register + V(3)/convert + 1)^0),
+ [2] = ttex + gtex,
+ [3] = (btex + vtex) * spacing * Cs((dquote/ditto + (1 - etex))^0) * etex,
+ }
+
+ -- currently a a one-liner produces less code
+
+ local parser = Cs(((ttex + gtex)/register + ((btex + vtex) * spacing * Cs((dquote/ditto + (1 - etex))^0) * etex)/convert + 1)^0)
+
+ function metapost.check_texts(str)
+ found = false
+ return parser:match(str), found
+ end
+
+end
+
+local factor = 65536*(7200/7227)
+
+function metapost.edefsxsy(wd,ht,dp) -- helper for text
+ commands.edef("sx",(wd ~= 0 and 1/( wd /(factor))) or 0)
+ commands.edef("sy",(wd ~= 0 and 1/((ht+dp)/(factor))) or 0)
+end
+
+function metapost.sxsy(wd,ht,dp) -- helper for text
+ return (wd ~= 0 and 1/(wd/(factor))) or 0, (wd ~= 0 and 1/((ht+dp)/(factor))) or 0
+end
+
+function metapost.text_texts_data()
+ local t, n = { }, 0
+ for i = metapost.first_box, metapost.last_box do
+ n = n + 1
+ if metapost.trace_texttexts then
+ print("metapost", format("passed data: order %s, box %s",n,i))
+ end
+ if tex.box[i] then
+ t[#t+1] = format("_tt_w_[%i]:=%f;_tt_h_[%i]:=%f;_tt_d_[%i]:=%f;", n,tex.wd[i]/factor, n,tex.ht[i]/factor, n,tex.dp[i]/factor)
+ else
+ break
+ end
+ end
+ return t
+end
+
+metapost.intermediate = metapost.intermediate or {}
+metapost.intermediate.actions = metapost.intermediate.actions or {}
+metapost.intermediate.needed = false
+
+--~ function metapost.graphic_base_pass(mpsformat,str,preamble)
+--~ local prepared, done = metapost.check_texts(str)
+--~ metapost.textext_current = metapost.first_box
+--~ metapost.intermediate.needed = false
+--~ if done then
+--~ current_format, current_graphic = mpsformat, prepared
+--~ metapost.process(mpsformat, {
+--~ preamble or "",
+--~ "beginfig(1); ",
+--~ "_trial_run_ := true ;",
+--~ prepared,
+--~ "endfig ;"
+--~ }, true ) -- true means: trialrun
+--~ if metapost.intermediate.needed then
+--~ for _, action in pairs(metapost.intermediate.actions) do
+--~ action()
+--~ end
+--~ end
+--~ sprint(tex.ctxcatcodes,"\\ctxlua{metapost.graphic_extra_pass()}")
+--~ else
+--~ metapost.process(mpsformat, {
+--~ preamble or "",
+--~ "beginfig(1); ",
+--~ "_trial_run_ := false ;",
+--~ "resettextexts;",
+--~ str,
+--~ "endfig ;"
+--~ } )
+--~ end
+--~ end
+
+metapost.method = 1 -- 1:dumb 2:clever
+
+function metapost.graphic_base_pass(mpsformat,str,preamble)
+ local done_1, done_2
+ str, done_1 = metapost.check_texts(str)
+ if preamble then
+ preamble, done_2 = metapost.check_texts(preamble)
+ else
+ preamble, done_2 = "", false
+ end
+ metapost.textext_current = metapost.first_box
+ metapost.intermediate.needed = false
+ metapost.multipass = false -- no needed here
+ current_format, current_graphic = mpsformat, str
+ if metapost.method == 1 or (metapost.method == 2 and (done_1 or done_2)) then
+ local flushed = metapost.process(mpsformat, {
+ preamble,
+ "beginfig(1); ",
+ "_trial_run_ := true ;",
+--~ "resettextexts;",
+ str,
+ "endfig ;"
+ }, true, nil, true ) -- true means: trialrun, true means: avoid extra run if no multipass
+ if metapost.intermediate.needed then
+ for _, action in pairs(metapost.intermediate.actions) do
+ action()
+ end
+ end
+ if not flushed then
+ sprint(tex.ctxcatcodes,"\\ctxlua{metapost.graphic_extra_pass()}")
+ end
+ else
+ metapost.process(mpsformat, {
+ preamble or "",
+ "beginfig(1); ",
+ "_trial_run_ := false ;",
+--~ "resettextexts;",
+ str,
+ "endfig ;"
+ } )
+ end
+end
+
+function metapost.graphic_extra_pass()
+ metapost.textext_current = metapost.first_box
+ metapost.process(current_format, {
+ "beginfig(0); ",
+ "_trial_run_ := false ;",
+--~ "resettextexts;",
+ concat(metapost.text_texts_data()," ;\n"),
+ current_graphic,
+ "endfig ;"
+ })
+end
+
+function metapost.getclippath(data)
+ local mpx = metapost.format("metafun")
+ if mpx and data then
+ input.starttiming(metapost)
+ input.starttiming(metapost.exectime)
+ local result = mpx:execute(format("beginfig(1);%s;endfig;",data))
+ input.stoptiming(metapost.exectime)
+ if result.status > 0 then
+ print("error", result.status, result.error or result.term or result.log)
+ result = ""
+ else
+ result = metapost.filterclippath(result)
+ end
+ input.stoptiming(metapost)
+ sprint(result)
+ end
+end
+
+metapost.tex = metapost.tex or { }
+
+do -- only used in graphictexts
+
+ local environments = { }
+
+ function metapost.tex.set(str)
+ environments[#environments+1] = str
+ end
+ function metapost.tex.reset()
+ environments = { }
+ end
+ function metapost.tex.get()
+ return concat(environments,"\n")
+ end
+
+end
+
+do -- not that beautiful but ok, we could save a md5 hash in the tui file !
+
+ local graphics = { }
+ local start = [[\starttext]]
+ local preamble = [[\long\def\MPLIBgraphictext#1{\startTEXpage[scale=10000]#1\stopTEXpage}]]
+ local stop = [[\stoptext]]
+
+ function metapost.specials.gt(specification,object) -- number, so that we can reorder
+ graphics[#graphics+1] = format("\\MPLIBgraphictext{%s}",specification)
+ metapost.intermediate.needed = true
+ metapost.multipass = true
+ return { }, nil, nil, nil
+ end
+
+ function metapost.intermediate.actions.makempy()
+ if #graphics > 0 then
+ local mpofile = tex.jobname .. "-mp"
+ local mpyfile = file.replacesuffix(mpofile,"mpy")
+ local pdffile = file.replacesuffix(mpofile,"pdf")
+ local texfile = file.replacesuffix(mpofile,"tex")
+ io.savedata(texfile, { start, preamble, metapost.tex.get(), concat(graphics,"\n"), stop }, "\n")
+ os.execute(format("context --once %s", texfile))
+ if io.exists(pdffile) then
+ os.execute(format("pstoedit -ssp -dt -f mpost %s %s", pdffile, mpyfile))
+ local result = { }
+ if io.exists(mpyfile) then
+ local data = io.loaddata(mpyfile)
+ for figure in data:gmatch("beginfig(.-)endfig") do
+ result[#result+1] = format("begingraphictextfig%sendgraphictextfig ;\n", figure)
+ end
+ io.savedata(mpyfile,concat(result,""))
+ end
+ end
+ graphics = { }
+ end
+ end
+
+end
diff --git a/Master/texmf-dist/tex/context/base/mlib-pps.tex b/Master/texmf-dist/tex/context/base/mlib-pps.tex
new file mode 100644
index 00000000000..df325c316c6
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mlib-pps.tex
@@ -0,0 +1,61 @@
+%D \module
+%D [ file=mlib-pps,
+%D version=2008.03.25,
+%D title=\METAPOST\ Integrated Graphics,
+%D subtitle=Basics,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright=PRAGMA]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\unprotect
+
+\registerctxluafile{mlib-pps}{1.001}
+
+\def\MPLIBcircularshade#1#2#3#4#5#6#7% nr domain color-a color-b ? colorspace oordinates
+ {\immediate\pdfobj{<</FunctionType 2 /Domain [#2] /C0 [#3] /C1 [#4] /N #5>>}%
+ \immediate\pdfobj{<</ShadingType 3 /ColorSpace /#6 /Function \the\pdflastobj\space 0 R /Coords [#7] /Extend [true true]>>}%
+ \appendtoPDFdocumentshades{/MpSh#1 \the\pdflastobj\space0 R }}
+
+\def\MPLIBlinearshade#1#2#3#4#5#6#7% nr domain color-a color-b ? colorspace oordinates
+ {\immediate\pdfobj{<</FunctionType 2 /Domain [#2] /C0 [#3] /C1 [#4] /N #5>>}%
+ \immediate\pdfobj{<</ShadingType 2 /ColorSpace /#6 /Function \the\pdflastobj\space 0 R /Coords [#7] /Extend [true true]>>}%
+ \appendtoPDFdocumentshades{/MpSh#1 \the\pdflastobj\space0 R }}
+
+\def\MPLIBfigure#1#2#3#4#5#6#7% todo: move Q q to lua
+ {\setbox\scratchbox\hbox{\externalfigure[#7]}%
+ \ctxlua{metapost.edefsxsy(\number\wd\scratchbox,\number\ht\scratchbox,0)}%
+ \pdfliteral direct{q #1 #2 #3 #4 #5 #6 cm}% no direct
+ \vbox to \zeropoint{\vss\hbox to \zeropoint{\scale[sx=\sx,sy=\sy]{\box\scratchbox}\hss}}%
+ \pdfliteral direct{Q}}
+
+\def\MPLIBsettext#1% #2%
+ {\global\setbox#1\hbox}% {#2}}
+
+% \def\MPLIBgettext#1#2#3#4#5#6#7% we can also use this for the figure and pass sx/sy
+% {\ctxlua{metapost.edefsxsy(\number\wd#7,\number\ht#7,\number\dp#7)}%
+% \pdfliteral{q #1 #2 #3 #4 #5 #6 cm}%
+% \vbox to \zeropoint{\vss\hbox to \zeropoint{\scale[sx=\sx,sy=\sy]{\raise\dp#7\box#7}\hss}}%
+% \pdfliteral{Q}}
+
+\def\MPLIBgettextscaled#1#2#3%
+ {\vbox to \zeropoint{\vss\hbox to \zeropoint{\scale[sx=#2,sy=#3]{\raise\dp#1\box#1}\hss}}}
+
+\def\MPLIBallocate#1%
+ {\newbox\MPLIBfirst
+ \dorecurse{\numexpr#1-1\relax}{\newbox\MPLIBlast}%
+ \MPLIBregister}
+
+\def\MPLIBregister
+ {\ctxlua{metapost.first_box, metapost.last_box = \number\MPLIBfirst, \number\MPLIBlast}}
+
+\appendtoks \MPLIBallocate{500}\to \everydump
+\appendtoks \MPLIBregister \to \everyjob
+
+\def\MPLIBgraphictext#1%
+ {\startTEXpage[scale=10000]#1\stopTEXpage}
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/mlib-run.lua b/Master/texmf-dist/tex/context/base/mlib-run.lua
new file mode 100644
index 00000000000..30cd01c736d
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mlib-run.lua
@@ -0,0 +1,250 @@
+if not modules then modules = { } end modules ['mlib-run'] = {
+ version = 1.001,
+ comment = "companion to mlib-ctx.tex",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files",
+}
+
+--~ cmyk -> done, native
+--~ spot -> done, but needs reworking (simpler)
+--~ multitone ->
+--~ shade -> partly done, todo: cm
+--~ figure -> done
+--~ hyperlink -> low priority, easy
+
+-- new * run
+-- or
+-- new * execute^1 * finish
+
+-- a*[b,c] == b + a * (c-b)
+
+--[[ldx--
+<p>The directional helpers and pen analysis are more or less translated from the
+<l n='c'/> code. It really helps that Taco know that source so well. Taco and I spent
+quite some time on speeding up the <l n='lua'/> and <l n='c'/> code. There is not
+much to gain, especially if on ekeeps in mind that when integrated in <l n='tex'/>
+only a part of the time is spent in <l n='metapost'/>. Of course an integrated
+approach is way faster than an external <l n='metapost'/> and processing time
+nears zero.</p>
+--ldx]]--
+
+local format = string.format
+
+metapost = metapost or { }
+
+local function finder(name, mode, ftype)
+ if mode=="w" then
+ return name
+ elseif input.aux.qualified_path(name) then
+ return name
+ else
+ return input.find_file((texmf and texmf.instance) or instance,name,ftype)
+ end
+end
+
+metapost.finder = finder
+
+--~ statistics = {
+--~ ["hash_size"]=1774,
+--~ ["main_memory"]=50237,
+--~ ["max_in_open"]=5,
+--~ ["param_size"]=4,
+--~ }
+
+metapost.parameters = {
+ hash_size = 100000,
+ main_memory = 2000000,
+ max_in_open = 50,
+ param_size = 100000,
+}
+
+metapost.exectime = metapost.exectime or { } -- hack
+
+function metapost.make(name, target, version)
+ input.starttiming(mplib)
+ target = file.replacesuffix(target or name, "mem")
+ local mpx = mplib.new ( table.merged (
+ metapost.parameters,
+ {
+ ini_version = true,
+ find_file = finder,
+ job_name = file.stripsuffix(target),
+ }
+ ) )
+ if mpx then
+ input.starttiming(metapost.exectime)
+ local result = mpx:execute(format('\\ ; boolean mplib ; mplib := true ; string mp_parent_version ; mp_parent_version := "%s" ; show mp_parent_version ; input %s ; dump ;', version or "unknown", name))
+ input.stoptiming(metapost.exectime)
+ if mpx then
+ mpx:finish()
+ end
+ end
+ input.stoptiming(mplib)
+ return mpx -- mpx = nil will free memory
+end
+
+function metapost.load(name)
+ input.starttiming(mplib)
+ local mpx = mplib.new ( table.merged (
+ metapost.parameters,
+ {
+ mem_name = file.replacesuffix(name,"mem"),
+ find_file = finder,
+ }
+ ) )
+ if mpx then
+ input.starttiming(metapost.exectime)
+ mpx:execute("\\")
+ input.stoptiming(metapost.exectime)
+ end
+ input.stoptiming(mplib)
+ return mpx
+end
+
+function metapost.unload(mpx)
+ input.starttiming(mplib)
+ if mpx then
+ mpx:finish()
+ end
+ input.stoptiming(mplib)
+end
+
+function metapost.checkformat(mpsinput, mpsformat)
+ mpsinput = file.addsuffix(mpsinput or "metafun", "mp")
+ mpsformat = file.stripsuffix(file.basename(mpsformat or texconfig.formatname or tex.formatname or mpsinput))
+ local mpsbase = file.stripsuffix(file.basename(mpsinput))
+ if mpsbase ~= mpsformat then
+ mpsformat = mpsformat .. "-" .. mpsbase
+ end
+ mpsformat = file.addsuffix(mpsformat, "mem")
+ local pth = file.dirname(texconfig.formatname or "")
+ if pth ~= "" then
+ mpsformat = file.join(pth,mpsformat)
+ end
+ local the_version = environment.version or "unset version"
+ if io.exists(mpsformat) then
+ commands.writestatus("mplib", format("loading format: %s, name: %s", mpsinput, mpsformat))
+ local mpx = metapost.load(mpsformat)
+ if mpx then
+ local result = mpx:execute(format("show mp_parent_version ;"))
+ local version = result.log:match(">> *(.-)[\n\r]") or "unknown"
+ version = version:gsub("[\'\"]","")
+ if version ~= the_version then
+ commands.writestatus("mplib", format("version mismatch: %s <> %s", version or "unknown", the_version))
+ else
+ return mpx
+ end
+ end
+ end
+ commands.writestatus("mplib", format("making format: %s, name: %s", mpsinput, mpsformat))
+ metapost.make(mpsinput,mpsformat,the_version) -- somehow return ... fails here
+ if io.exists(mpsformat) then
+ commands.writestatus("mplib", format("loading format: %s, name: %s", mpsinput, mpsformat))
+ return metapost.load(mpsformat)
+ else
+ commands.writestatus("mplib", format("problems with format: %s, name: %s", mpsinput, mpsformat))
+ end
+end
+
+--~ if environment.initex then
+--~ metapost.unload(metapost.checkformat("metafun"))
+--~ end
+
+local mpxformats = {}
+
+function metapost.format(name)
+ local mpx = mpxformats[name]
+ if not mpx then
+ mpx = metapost.checkformat(name)
+ mpxformats[name] = mpx
+ end
+ return mpx
+end
+
+function metapost.reset(mpx)
+ if not mpx then
+ -- nothing
+ elseif type(mpx) == "string" then
+ if mpxformats[mpx] then
+ mpxformats[mpx]:finish()
+ mpxformats[mpx] = nil
+ end
+ else
+ for name=1,#mpxformats do
+ if mpxformats[name] == mpx then
+ mpxformats[name] = nil
+ break
+ end
+ end
+ mpx:finish()
+ end
+end
+
+metapost.showlog = false
+
+function metapost.process(mpx, data, trialrun, flusher, multipass)
+ local converted, result = false, {}
+ if type(mpx) == "string" then
+ mpx = metapost.format(mpx) -- goody
+ end
+ if mpx and data then
+ input.starttiming(metapost)
+ if type(data) == "table" then
+ for i=1,#data do
+ local d = data[i]
+ if d then
+ input.starttiming(metapost.exectime)
+ result = mpx:execute(d)
+ input.stoptiming(metapost.exectime)
+ if not result then
+ metapost.report("mp error", "no result object returned")
+ elseif result.status > 0 then
+ local t, e, l = result.term, result.error, result.log
+ if t then
+ metapost.report("mp terminal",t)
+ end
+ if e then
+ metapost.report("mp error",e)
+ end
+ if not t and not e and l then
+ metapost.report("mp log",l)
+ else
+ metapost.report("mp error","unknown, no error, terminal or log messages")
+ end
+ elseif metapost.showlog then
+ metapost.report("mp info",result.term or "no terminal output")
+ elseif result.fig then
+ converted = metapost.convert(result, trialrun, flusher, multipass)
+ end
+ else
+ metapost.report("mp error", "invalid graphic component " .. i)
+ end
+ end
+ else
+ input.starttiming(metapost.exectime)
+ result = mpx:execute(data)
+ input.stoptiming(metapost.exectime)
+ -- todo: error message
+ if not result then
+ metapost.report("error", "no result object returned")
+ elseif result.status > 0 then
+ metapost.report("error",(result.term or "no-term") .. "\n" .. (result.error or "no-error"))
+ elseif metapost.showlog then
+ metapost.report("info",result.term or "no-term")
+ elseif result.fig then
+ converted = metapost.convert(result, trialrun, flusher, multipass)
+ end
+ end
+ input.stoptiming(metapost)
+ end
+ return converted, result
+end
+
+function metapost.convert(result, trialrun, multipass)
+ metapost.report('Warning','no converter set')
+end
+
+function metapost.report(...)
+ logs.report(...)
+end
diff --git a/Master/texmf-dist/tex/context/base/mult-com.tex b/Master/texmf-dist/tex/context/base/mult-com.tex
index 599fd61d2cc..96552e3628e 100644
--- a/Master/texmf-dist/tex/context/base/mult-com.tex
+++ b/Master/texmf-dist/tex/context/base/mult-com.tex
@@ -1764,7 +1764,7 @@ determineregistercharacteristics: bepaalregisterkenmerken determineregi
impostaenumerazioni seteazaenumerare
regleenumerations
setupindentations: steldoorspringenin setupindentations
- stelleeinzuegein nastavodsazovani
+ stelleeinzuegein nastavodsazeni
impostarientri seteazaaliniate
reglealineas
setuptab: steltabin setuptab
diff --git a/Master/texmf-dist/tex/context/base/mult-con.tex b/Master/texmf-dist/tex/context/base/mult-con.tex
index de24230ae83..c80911c7970 100644
--- a/Master/texmf-dist/tex/context/base/mult-con.tex
+++ b/Master/texmf-dist/tex/context/base/mult-con.tex
@@ -18,6 +18,13 @@
\startlogginginterface context.con
+%D Todo:
+
+\startvariables all
+ lesshyphenation: lesshyphenation
+ morehyphenation: morehyphenation
+\stopvariables
+
%D First come some variables. These are used as keywords and
%D therefore need a different treatment.
@@ -495,6 +502,10 @@ subsubsubsubsubsubject: subsubsubsubsubonderwerp subsubsubsubsub
zitat citace
citazione citat
citation
+ blockquote: blokcitaat blockquote
+ blockquote blockquote
+ blockquote blockquote
+ blockquote
quote: citeer quote
zitieren citovat
menzione minicitat
@@ -729,6 +740,10 @@ subsubsubsubsubsubject: subsubsubsubsubonderwerp subsubsubsubsub
ausgleichen rovnovaha
bilanciamento balanta
equilibre
+ bookmark: bookmark bookmark
+ bookmark zalozka
+ segnalibro semncarte
+ marquepage
wfactor: bfactor wfactor
bfaktor sfaktor
wfactor factorw
@@ -1153,6 +1168,14 @@ subsubsubsubsubsubject: subsubsubsubsubonderwerp subsubsubsubsub
linkerrand levyokraj
marginesinistro marginestanga
margegauche
+ innermargin: binnenmarge innermargin
+ innermargin innermargin
+ margineinterno innermargin
+ margeinterieure
+ outermargin: buitenmarge outermargin
+ outermargin outermargin
+ margineesterno outermargin
+ margeexterieure
leftmargindistance: linkermargeafstand leftmargindistance
linkerrandabstand vzdalenostlevehookraje
distanzamarginesinistro distantamarginestanga
@@ -1650,6 +1673,16 @@ subsubsubsubsubsubject: subsubsubsubsubonderwerp subsubsubsubsub
symbol symbol
simbolo simbol
symbole
+
+ closesymbol: sluitsymbool closesymbol
+ closesymbol closesymbol
+ closesymbol closesymbol
+ closesymbol
+ closecommand: sluitcommando closecommand
+ closecommand closecommand
+ closecommand closecommand
+ closecommand
+
symbolset: symboolset symbolset
symbolset sadasymbolu
setsimboli setsimbol
@@ -1694,6 +1727,10 @@ subsubsubsubsubsubject: subsubsubsubsubonderwerp subsubsubsubsub
textbreite sirkatextu
ampiezzatesto latimetext
largeurtexte
+numberwidth: nummerbreedte numberwidth
+ numberwidth numberwidth
+ numberwidth numberwidth
+ numberwidth
textcommand: tekstcommando textcommand
textbefehl textovyprikaz
comandotesto comandatext
@@ -1734,6 +1771,20 @@ subsubsubsubsubsubject: subsubsubsubsubonderwerp subsubsubsubsub
titelabstand vzdalenosttitulek
distanzatitolo distantatitlu
distancetitre
+
+ titleleft: titellinks titleleft % new
+ titleleft titleleft
+ titleleft titleleft
+ titleleft
+ titleright: titelrechts titleright % new
+ titleright titleright
+ titleright titleright
+ titleright
+ titlecommand: titelcommando titlecommand % new
+ titlecommand titlecommand
+ titlecommand titlecommand
+ titlecommand
+
aligntitle: titeluitlijnen aligntitle
titelausrichten zarovnejtitul
allineatitolo alinieretitlu
@@ -1754,6 +1805,10 @@ subsubsubsubsubsubject: subsubsubsubsubonderwerp subsubsubsubsub
ausrichtung zarovnani
allinea aliniere
alignement
+ symalign: symuitlijnen symalign
+ symausrichtung symzarovnani
+ symallinea symaliniere
+ symalignement
urlspace: urlspatie urlspace
urlspatium prostorurl
spaziourl spatiuurl
@@ -1886,6 +1941,11 @@ subsubsubsubsubsubject: subsubsubsubsubonderwerp subsubsubsubsub
selbeseite stejnastranka
stessapagina aceeasipagina
memepage
+% new
+itemalign: itemuitlijnen itemalign
+ itemalign itemalign
+ itemalign itemalign
+ itemalign
sidealign: zijuitlijnen sidealign
sidealign sidealign
sidealign sidealign
@@ -1914,6 +1974,10 @@ subsubsubsubsubsubject: subsubsubsubsubonderwerp subsubsubsubsub
feldoffset offsetpole
offsetcampo offsetcamp
offsetchamp
+ action: actie action
+ aktion akce
+ azione actiune
+ action
openaction: openactie openaction
oeffenaktion otevriakci
azioneapri actiunedeschidere
@@ -2264,6 +2328,10 @@ subsubsubsubsubsubject: subsubsubsubsubonderwerp subsubsubsubsub
gritter mrizka
griglia grila
grille
+ nogrid: geengrid nogrid
+ nogrid nogrid
+ nogrid nogrid
+ nogrid
big: groot big
gross velke
grande mare
@@ -2700,6 +2768,10 @@ subsubsubsubsubsubject: subsubsubsubsubonderwerp subsubsubsubsub
passend prizpusobive
adatta ajustat
adapte
+nofit: nietpassend nofit
+ nofit nofit
+ nofit nofit
+ nofit
postscript: postscript postscript
postscript postscript
postscript postscript
@@ -2940,6 +3012,10 @@ subsubsubsubsubsubject: subsubsubsubsubonderwerp subsubsubsubsub
fett tucne
grassetto aldin
gras
+ sansbold: sansvet sansbold
+ sansfett sanstucne
+ sansgrassetto sansaldin
+ sansgras
boldslanted: vetschuin boldslanted
fettgeneigt tucnesklonene
grassettoinclinato aldininclinat
@@ -3336,116 +3412,116 @@ subsubsubsubsubsubject: subsubsubsubsubonderwerp subsubsubsubsub
%D \stopcompressdefinitions
-%D All relevent commands of \CONTEXT\ are specified in a
-%D structured way that enables the generation of reference
-%D cards. This specification is setup in a language independant
-%D way. The next category of variables is only used in this
-%D context.
-
-%D \startcompressdefinitions
-
-\startsetupvariables dutch english
- german czech
- italian romanian
- french
-
- enumeration: doornummering enumeration
- nummerierung vycet
- enumerazione enumerare
- enumeration
- description: doordefinitie description
- beschreibung popis
- descrizione descriere
- description
- indentation: doorsprong indentation
- einzug odsazovani
- rientro indentare
- indentation
- labeling: doorlabel labeling
- beschriften oznacovani
- etichettatura etichetare
- etiquettage
- combinedlist: samengesteldelijst combinedlist
- kombiniereliste kombinovanyseznam
- elencocombinato listacombinata
- listeimbriquee
- % beware: section clashes with sectionlevel
- section: sectie section
- abschnitt oddil
- sezione sectiune
- section
- register: register register
- register rejstrik
- registro registru
- registre
- interaction: interactie interaction
- interaktion interakce
- interazione interactiune
- interaction
- synonym: synoniem synonym
- synonym synonymum
- sinonimo sinonim
- synonyme
- synonyms: synoniemen synonyms
- synonyme synonyma
- sinonimi sinonime
- synonymes
- sort: sorteer sort
- sortiere trid
- sort sortare
- tri
- sorts: sorteren sorts
- sortieren tridit
- sorts sortari
- tris
- name: naam name
- name jmeno
- nome nume
- name
- float: blok float
- gleitobjekt plvouciobjekt
- oggettomobile obiectmobil
- flottant
- floats: blokken floats
- gleitobjekte plvouciobjekty
- oggettimobili obiectemobile
- flottants
- paragraph: alinea paragraph
- absatz odstavec
- capoverso paragraf
- paragraphe
- framedtext: kadertekst framedtext
- umrahmtertext oramovanytext
- testoincorniciato textinconjurat
- texteencadre
- itemgroup: itemgroup itemgroup
- itemgroup itemgroup
- itemgroup itemgroup
- itemgroup
- typing: typen typing
- tippen typing
- typing typing
- typing
- buffer: buffer buffer
- puffer buffer
- buffer buffer
- buffer
- formula: formule formula
- formel rovnice
- formula formula
- formule
- subformula: subformule subformula
- unterformel podrovnice
- sottoformula subformula
- sousformule
- tabulate: tabulatie tabulate
- tabulator tabelator
- tabulato tabulate
- tabule
-
-\stopsetupvariables
-
-%D \stopcompressdefinitions
+% %D All relevent commands of \CONTEXT\ are specified in a
+% %D structured way that enables the generation of reference
+% %D cards. This specification is setup in a language independant
+% %D way. The next category of variables is only used in this
+% %D context.
+
+% %D \startcompressdefinitions
+%
+% \startsetupvariables dutch english
+% german czech
+% italian romanian
+% french
+%
+% enumeration: doornummering enumeration
+% nummerierung vycet
+% enumerazione enumerare
+% enumeration
+% description: doordefinitie description
+% beschreibung popis
+% descrizione descriere
+% description
+% indentation: doorsprong indentation
+% einzug odsazeni
+% rientro indentare
+% indentation
+% labeling: doorlabel labeling
+% beschriften oznacovani
+% etichettatura etichetare
+% etiquettage
+% combinedlist: samengesteldelijst combinedlist
+% kombiniereliste kombinovanyseznam
+% elencocombinato listacombinata
+% listeimbriquee
+% % beware: section clashes with sectionlevel
+% section: sectie section
+% abschnitt oddil
+% sezione sectiune
+% section
+% register: register register
+% register rejstrik
+% registro registru
+% registre
+% interaction: interactie interaction
+% interaktion interakce
+% interazione interactiune
+% interaction
+% synonym: synoniem synonym
+% synonym synonymum
+% sinonimo sinonim
+% synonyme
+% synonyms: synoniemen synonyms
+% synonyme synonyma
+% sinonimi sinonime
+% synonymes
+% sort: sorteer sort
+% sortiere trid
+% sort sortare
+% tri
+% sorts: sorteren sorts
+% sortieren tridit
+% sorts sortari
+% tris
+% name: naam name
+% name jmeno
+% nome nume
+% name
+% float: blok float
+% gleitobjekt plvouciobjekt
+% oggettomobile obiectmobil
+% flottant
+% floats: blokken floats
+% gleitobjekte plvouciobjekty
+% oggettimobili obiectemobile
+% flottants
+% paragraph: alinea paragraph
+% absatz odstavec
+% capoverso paragraf
+% paragraphe
+% framedtext: kadertekst framedtext
+% umrahmtertext oramovanytext
+% testoincorniciato textinconjurat
+% texteencadre
+% itemgroup: itemgroup itemgroup
+% itemgroup itemgroup
+% itemgroup itemgroup
+% itemgroup
+% typing: typen typing
+% tippen typing
+% typing typing
+% typing
+% buffer: buffer buffer
+% puffer buffer
+% buffer buffer
+% buffer
+% formula: formule formula
+% formel rovnice
+% formula formula
+% formule
+% subformula: subformule subformula
+% unterformel podrovnice
+% sottoformula subformula
+% sousformule
+% tabulate: tabulatie tabulate
+% tabulator tabelator
+% tabulato tabulate
+% tabule
+%
+% \stopsetupvariables
+
+% %D \stopcompressdefinitions
%D The number of elements used for composing user defined
%D commands is rather small. We use a \type{-} for empty
@@ -3833,6 +3909,15 @@ subsubsubsubsubsubject: subsubsubsubsubonderwerp subsubsubsubsub
ToggleLayer ToggleLayer
ToggleLayer
+ ShowThumbs: ShowThumbs ShowThumbs
+ ShowThumbs UkazNahledy
+ MostraThumbs ShowThumbs
+ ShowThumbs
+ ShowBookmarks: ShowBookmarks ShowBookmarks
+ ShowBookmarks UkazZalozky
+ MostraSegnalibro ShowBookmarks
+ ShowBookmarks
+
\stopvariables
%D Here are some symbol names. We capitalize them because they are
diff --git a/Master/texmf-dist/tex/context/base/mult-ini.lua b/Master/texmf-dist/tex/context/base/mult-ini.lua
new file mode 100644
index 00000000000..a92561b09b7
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mult-ini.lua
@@ -0,0 +1,56 @@
+if not modules then modules = { } end modules ['mult-ini'] = {
+ version = 1.001,
+ comment = "companion to mult-ini.tex",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+interfaces = interfaces or { }
+interfaces.messages = interfaces.messages or { }
+interfaces.constants = interfaces.constants or { }
+interfaces.variables = interfaces.variables or { }
+
+input.storage.register(false,"interfaces/messages", interfaces.messages, "interfaces.messages" )
+input.storage.register(false,"interfaces/constants", interfaces.constants, "interfaces.constants")
+input.storage.register(false,"interfaces/variables", interfaces.variables, "interfaces.variables")
+
+function interfaces.setmessage(category,str)
+ local m = interfaces.messages[category] or { }
+ for k, v in str:gmatch("(%S+) *: *(.-) *[\n\r]") do
+ m[k] = v:gsub("%-%-","%%s")
+ end
+ interfaces.messages[category] = m
+end
+
+function interfaces.getmessage(category,tag)
+ local m = interfaces.messages[category]
+ return (m and m[tag]) or "unknown message"
+end
+
+function interfaces.makemessage(category,tag,arguments)
+ local m = interfaces.messages[category]
+ m = (m and m[tag] ) or "unknown message"
+ if not m then
+ return m .. " " .. tag
+ elseif not arguments then
+ return m
+ elseif arguments:find(",") then
+ return string.format(m,unpack(arguments:split(",")))
+ else
+ return string.format(m,arguments)
+ end
+end
+
+function interfaces.showmessage(category,tag,arguments)
+ local m = interfaces.messages[category]
+ ctx.writestatus((m and m.title) or "unknown title",interfaces.makemessage(category,tag,arguments))
+end
+
+function interfaces.setvariable(variable,given)
+ interfaces.variables[given] = variable
+end
+
+function interfaces.setconstant(constant,given)
+ interfaces.constants[given] = constant
+end
diff --git a/Master/texmf-dist/tex/context/base/mult-ini.mkii b/Master/texmf-dist/tex/context/base/mult-ini.mkii
new file mode 100644
index 00000000000..fff800df193
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mult-ini.mkii
@@ -0,0 +1,131 @@
+%D \module
+%D [ file=mult-ini,
+%D version=1996.06.01,
+%D title=\CONTEXT\ Multilingual Macros,
+%D subtitle=Initialization,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\unprotect
+
+%D This is the oldest variant. Here we filter messages from a big string.
+
+\def\findinterfacemessage#1#2%
+ {\let#2\empty
+ \def\dofindinterfacemessage##1 #1: ##2\relax##3\end{\def#2{##2}}%
+ \edef\!!stringa{\getvalue{\??ms\currentmessagelibrary} #1: \relax}%
+ \expandafter\dofindinterfacemessage\!!stringa\end}
+
+\def\composemessagetext#1--#2--#3--#4--#5--#6--#7--#8--#9\\%
+ {\def\docomposemessagetext##1,##2,##3,##4,##5,##6,##7,##8,##9\\%
+ {\edef\currentmessagetext{#1##1#2##2#3##3#4##4#5##5#6##6#7##7#8##8}}%
+ \docomposemessagetext}
+
+\def\setmessagetext#1#2%
+ {\def\currentmessagelibrary{#1}%
+ \findinterfacemessage{#2}\currentmessagetext}
+
+\unexpanded\def\getmessage#1#2%
+ {\def\currentmessagelibrary{#1}%
+ \findinterfacemessage{#2}\currentmessagetext
+ \currentmessagetext}
+
+\unexpanded\def\makemessage#1#2#3%
+ {\def\currentmessagelibrary{#1}%
+ \findinterfacemessage{#2}\currentmessagetext
+ \@EA\composemessagetext\currentmessagetext----------------\\#3,,,,,,,,\\%
+ \currentmessagetext}
+
+\def\showmessage#1#2#3%
+ {\def\currentmessagelibrary{#1}%
+ \findinterfacemessage{#2}\currentmessagetext
+ \findinterfacemessage{title}\currentmessagetitle
+ \ifx\currentmessagetext\empty
+ \def\currentmessagetext{<unknown message #2>}%
+ \else
+ \@EA\composemessagetext\currentmessagetext----------------\\#3,,,,,,,,\\%
+ \fi
+ \@EA\writestatus\@EA{\currentmessagetitle}{\currentmessagetext}}
+
+\def\doaddinterfacemessage#1#2%
+ {\findinterfacemessage{#1}\currentmessagetext
+ \doifelsenothing\currentmessagetext
+ {\setxvalue{\??ms\currentmessagelibrary}%
+ {\getvalue{\??ms\currentmessagelibrary} #1: #2\relax}}
+ {\debuggerinfotrue % we consider this an important error
+ \debuggerinfo
+ {message}
+ {duplicate tag #1
+ in library \currentmessagelibrary\space
+ of interface \currentresponses}}%
+ \futurelet\next\getinterfacemessage}
+
+\bgroup
+\obeylines
+\gdef\addinterfacemessage#1: #2
+ {\doaddinterfacemessage{#1}{#2}}%
+\egroup
+
+\def\getinterfacemessage
+ {\ifx\next\stopmessages
+ \egroup\expandafter\gobbleoneargument
+ \else
+ \expandafter\addinterfacemessage
+ \fi}
+
+\let\stopmessages\undefined % for dep checker
+
+\def\startmessages #1 library: #2
+ {\definemessageconstant{#2}% handy for modules
+ \bgroup
+ \obeylines
+ \doifinsetelse{#1}{\currentresponses,all}
+ {\def\next
+ {\def\currentmessagelibrary{#2}%
+ \doifundefined{\??ms\currentmessagelibrary}
+ {\letgvalueempty{\??ms\currentmessagelibrary}}%
+ \futurelet\next\getinterfacemessage}}
+ {\long\def\next##1\stopmessages{\egroup}}%
+ \next}
+
+%D Here, the messages are stored in a way that saves hash
+%D entries, i.e. they are packed in one macro per library.
+%D This was important in the days when we used \TEX's with
+%D hash tables of about 10.000. The next, less efficient way
+%D of storing the message, makes \CONTEXT\ run upto 5\%
+%D faster by storing each message in a macro. In July 2000,
+%D this costs some 185 additional hash entries, and since
+%D we run large \TEX's, let do it!
+
+\def\startmessages #1 library: #2
+ {\definemessageconstant{#2}% handy for modules
+ \bgroup
+ \obeylines
+ \doifundefined{\m!prefix!#2}{\setgvalue{\m!prefix!#2}{#2}}%
+ \doifinsetelse{#1}{\currentresponses,all}
+ {\def\next
+ {\def\currentmessagelibrary{#2}%
+ \futurelet\next\getinterfacemessage}}
+ {\long\def\next##1\stopmessages{\egroup}}%
+ \next}
+
+\def\findinterfacemessage#1#2%
+ {\edef#2{\getvalue{\??ms\currentmessagelibrary#1}}}
+
+\def\doaddinterfacemessage#1#2%
+ {\doifdefined{\??ms\currentmessagelibrary#1}
+ {\debuggerinfotrue % we consider this an important error
+ \debuggerinfo
+ {message}
+ {duplicate tag #1
+ in library \currentmessagelibrary\space
+ of interface \currentresponses}}%
+ \setxvalue{\??ms\currentmessagelibrary#1}{#2}%
+ \futurelet\next\getinterfacemessage}
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/mult-ini.mkiv b/Master/texmf-dist/tex/context/base/mult-ini.mkiv
new file mode 100644
index 00000000000..e785624f513
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mult-ini.mkiv
@@ -0,0 +1,41 @@
+%D \module
+%D [ file=mult-ini,
+%D version=2008.02.15,
+%D title=\CONTEXT\ Multilingual Macros,
+%D subtitle=Initialization,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\unprotect
+
+\registerctxluafile{mult-ini}{1.001}
+
+\def\startmessages #1 library: #2 %
+ {\bgroup
+ \doifundefined{\m!prefix!#2}{\setgvalue{\m!prefix!#2}{#2}}%
+ \catcode13=\active
+ \doifinsetelse{#1}{\currentresponses,all}\dostartmessages\nostartmessages{#2}}
+
+\def\dostartmessages#1#2\stopmessages
+ {\ctxlua{interfaces.setmessage("#1",[[#2]])}%
+ \egroup}
+
+\def\nostartmessages#1#2\stopmessages
+ {\egroup}
+
+\unexpanded\def\setmessagetext #1#2{\edef\currentmessagetext{\ctxlua{tex.sprint(tex.ctxcatcodes,interfaces.getmessage("#1","#2"))}}}
+\unexpanded\def\getmessage #1#2{\ctxlua{tex.sprint(tex.ctxcatcodes,interfaces.getmessage("#1","#2"))}}
+\unexpanded\def\makemessage #1#2#3{\ctxlua{tex.sprint(tex.ctxcatcodes,interfaces.makemessage("#1","#2","#3"))}}
+\unexpanded\def\showmessage #1#2#3{\ctxlua{interfaces.showmessage("#1","#2","#3")}}
+
+%D This way we also have the keywords at the lua end:
+
+\def\dowithinterfaceconstant#1#2{\ctxlua{interfaces.setconstant("#1","#2")}}
+\def\dowithinterfacevariable#1#2{\ctxlua{interfaces.setvariable("#1","#2")}}
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/mult-ini.tex b/Master/texmf-dist/tex/context/base/mult-ini.tex
index 444edcfeef6..53a1014c5ba 100644
--- a/Master/texmf-dist/tex/context/base/mult-ini.tex
+++ b/Master/texmf-dist/tex/context/base/mult-ini.tex
@@ -77,8 +77,10 @@
\def\c!prefix!{c!} \def\e!prefix!{e!} \def\f!prefix!{f!}
\def\k!prefix!{k!} \def\l!prefix!{l!} \def\m!prefix!{m!}
\def\p!prefix!{p!} \def\r!prefix!{r!} \def\s!prefix!{s!}
-\def\v!prefix!{v!} \def\x!prefix!{x!} \def\y!prefix!{y!}
-\def\t!prefix!{t!}
+\def\v!prefix!{v!} \def\t!prefix!{t!}
+
+% \def\x!prefix!{x!} % obsolete
+% \def\y!prefix!{y!} % obsolete
%D \macros
%D [constants,variables,commands]
@@ -381,121 +383,11 @@
%D are a bit more complicated than neccessary. The \NEWLINE\
%D token is used as message separator.
%D
-%D For internal purposes one can use \type {\dogetmessage},
+%D For internal purposes one can use \type {\setmessagetext},
%D which puts the message text asked for in \type
%D {\currentmessagetext}.
-\def\findinterfacemessage#1#2%
- {\let#2\empty
- \def\dofindinterfacemessage##1 #1: ##2\relax##3\end{\def#2{##2}}%
- \edef\!!stringa{\getvalue{\??ms\currentmessagelibrary} #1: \relax}%
- \expandafter\dofindinterfacemessage\!!stringa\end}
-
-\def\composemessagetext#1--#2--#3--#4--#5--#6--#7--#8--#9\\%
- {\def\docomposemessagetext##1,##2,##3,##4,##5,##6,##7,##8,##9\\%
- {\edef\currentmessagetext{#1##1#2##2#3##3#4##4#5##5#6##6#7##7#8##8}}%
- \docomposemessagetext}
-
-\def\dogetmessage#1#2%
- {\def\currentmessagelibrary{#1}%
- \findinterfacemessage{#2}\currentmessagetext}
-
-\unexpanded\def\getmessage#1#2%
- {\def\currentmessagelibrary{#1}%
- \findinterfacemessage{#2}\currentmessagetext
- \currentmessagetext}
-
-\unexpanded\def\makemessage#1#2#3%
- {\def\currentmessagelibrary{#1}%
- \findinterfacemessage{#2}\currentmessagetext
- \@EA\composemessagetext\currentmessagetext----------------\\#3,,,,,,,,\\%
- \currentmessagetext}
-
-\def\showmessage#1#2#3%
- {\def\currentmessagelibrary{#1}%
- \findinterfacemessage{#2}\currentmessagetext
- \findinterfacemessage{title}\currentmessagetitle
- \ifx\currentmessagetext\empty
- \def\currentmessagetext{<unknown message #2>}%
- \else
- \@EA\composemessagetext\currentmessagetext----------------\\#3,,,,,,,,\\%
- \fi
- \@EA\writestatus\@EA{\currentmessagetitle}{\currentmessagetext}}
-
-\def\doaddinterfacemessage#1#2%
- {\findinterfacemessage{#1}\currentmessagetext
- \doifelsenothing\currentmessagetext
- {\setxvalue{\??ms\currentmessagelibrary}%
- {\getvalue{\??ms\currentmessagelibrary} #1: #2\relax}}
- {\debuggerinfotrue % we consider this an important error
- \debuggerinfo
- {message}
- {duplicate tag #1
- in library \currentmessagelibrary\space
- of interface \currentresponses}}%
- \futurelet\next\getinterfacemessage}
-
-\bgroup
-\obeylines
-\gdef\addinterfacemessage#1: #2
- {\doaddinterfacemessage{#1}{#2}}%
-\egroup
-
-\def\getinterfacemessage
- {\ifx\next\stopmessages
- \egroup\expandafter\gobbleoneargument
- \else
- \expandafter\addinterfacemessage
- \fi}
-
-\let\stopmessages\undefined % for dep checker
-
-\def\startmessages #1 library: #2
- {\definemessageconstant{#2}% handy for modules
- \bgroup
- \obeylines
- \doifinsetelse{#1}{\currentresponses,all}
- {\def\next
- {\def\currentmessagelibrary{#2}%
- \doifundefined{\??ms\currentmessagelibrary}
- {\letgvalueempty{\??ms\currentmessagelibrary}}%
- \futurelet\next\getinterfacemessage}}
- {\long\def\next##1\stopmessages{\egroup}}%
- \next}
-
-%D Here, the messages are stored in a way that saves hash
-%D entries, i.e. they are packed in one macro per library.
-%D This was important in the days when we used \TEX's with
-%D hash tables of about 10.000. The next, less efficient way
-%D of storing the message, makes \CONTEXT\ run upto 5\%
-%D faster by storing each message in a macro. In July 2000,
-%D this costs some 185 additional hash entries, and since
-%D we run large \TEX's, let do it!
-
-\def\startmessages #1 library: #2
- {\definemessageconstant{#2}% handy for modules
- \bgroup
- \obeylines
- \doifinsetelse{#1}{\currentresponses,all}
- {\def\next
- {\def\currentmessagelibrary{#2}%
- \futurelet\next\getinterfacemessage}}
- {\long\def\next##1\stopmessages{\egroup}}%
- \next}
-
-\def\findinterfacemessage#1#2%
- {\edef#2{\getvalue{\??ms\currentmessagelibrary#1}}}
-
-\def\doaddinterfacemessage#1#2%
- {\doifdefined{\??ms\currentmessagelibrary#1}
- {\debuggerinfotrue % we consider this an important error
- \debuggerinfo
- {message}
- {duplicate tag #1
- in library \currentmessagelibrary\space
- of interface \currentresponses}}%
- \setxvalue{\??ms\currentmessagelibrary#1}{#2}%
- \futurelet\next\getinterfacemessage}
+\loadmarkfile{mult-ini}
%D \macros
%D {ifshowwarnings, ifshowmessages}
@@ -512,6 +404,8 @@
%D Turning off messages also turns off warnings, which is
%D quote logical because they are less important.
+% not yet mkiv
+
\newif\ifshowwarnings \showwarningstrue
\newif\ifshowmessages \showmessagestrue
@@ -1280,20 +1174,35 @@
\def\c!internal!n {-}
\let\c!internal! \c!internal!y
+% \def\setinterfaceconstant#1#2%
+% {\setvalue{\c!prefix!#1}{\c!internal!#1}%
+% \doifelse{#2}\nointerfaceobject % ?
+% {\debuggerinfo{constant}{#1 defined as #1 by default}%
+% }% \setvalue{\k!prefix!#1}{#1}} % was #2 -> #1
+% {\debuggerinfo{constant}{#1 defined as #2}%
+% \ifinterfacetranslation
+% \setvalue{\x!prefix!#1}{#2}%
+% \fi
+% \checksetvalue{\k!prefix!#2}{#1}%
+% \setvalue{\k!prefix!#2}{#1}}}
+
+% temporary mkiv hack
+
+\ifx\dowithinterfaceconstant\undefined \let\dowithinterfaceconstant\gobbletwoarguments \fi
+\ifx\dowithinterfacevariable\undefined \let\dowithinterfacevariable\gobbletwoarguments \fi
+
\def\setinterfaceconstant#1#2%
- {\setvalue{\c!prefix!#1}{\c!internal!#1}%
+ {\dowithinterfaceconstant{#1}{#2}%
+ \setvalue{\c!prefix!#1}{\c!internal!#1}%
\doifelse{#2}\nointerfaceobject % ?
- {\debuggerinfo{constant}{#1 defined as #1 by default}%
- }% \setvalue{\k!prefix!#1}{#1}} % was #2 -> #1
+ {\debuggerinfo{constant}{#1 defined as #1 by default}}%
{\debuggerinfo{constant}{#1 defined as #2}%
- \ifinterfacetranslation
- \setvalue{\x!prefix!#1}{#2}%
- \fi
\checksetvalue{\k!prefix!#2}{#1}%
\setvalue{\k!prefix!#2}{#1}}}
\def\setinterfacevariable#1#2%
- {\doifelse{#2}\nointerfaceobject
+ {\dowithinterfacevariable{#1}{#2}%
+ \doifelse{#2}\nointerfaceobject
{\debuggerinfo{variable}{#1 defined as #1 by default}%
\checksetvalue{\v!prefix!#1}{#1}%
\setvalue{\v!prefix!#1}{#1}}
@@ -1305,6 +1214,17 @@
{\doifdefined{#1}{\doifvaluesomething{#1}{\doifnotvalue{#1}{#2}
{\writestatus{problems}{set #1 to #2 overloads \getvalue{#1}}}}}}
+% \def\checksetvalue#1#2%
+% {\expandafter\ifx\csname#1\endcsname\relax\else
+% \expandafter\ifx\csname#1\endcsname\empty\else
+% \def\!!stringa{#1}%
+% \def\!!stringb{#2}%
+% \ifx\!!stringa\!!stringb\else
+% \writestatus{problems}{set #1 to #2 overloads \getvalue{#1}}%
+% \fi
+% \fi
+% \fi}
+
\def\startvariables{\startinterfaceobjects\setinterfacevariable\stopvariables}
\def\startconstants{\startinterfaceobjects\setinterfaceconstant\stopconstants}
@@ -1319,40 +1239,43 @@
%D in these situations we could use the c||version, but for
%D documentation purposes the x||alternative comes in handy.
-\def\defineinterfaceconstant#1#2%
- {\setvalue{\c!prefix!#1}{#2}%
- \ifinterfacetranslation
- \setvalue{\x!prefix!#1}{#2}%
- \fi}
-
-%D \macros
-%D {startinterfacesetupconstant}
-%D
-%D The next command, \type{\startinterfacesetupconstant}, which
-%D behavior also depends on the boolean, is used for constants
-%D that are only needed in these quick reference macro's. The
-%D following, more efficient approach does not work here,
-%D because it sometimes generates spaces.
-%D
-%D \starttyping
-%D \def\setinterfacesetupconstant
-%D {\ifinterfacetranslation
-%D \expandafter\setinterfaceconstant
-%D \fi}
-%D \stoptyping
-%D
-%D We therefore use the more redundant but robust method:
-
-\def\setinterfacesetupvariable#1#2%
- {\ifinterfacetranslation
- \doifelse{#2}\nointerfaceobject
- {\setvalue{\y!prefix!#1}{#1}}
- {\setvalue{\y!prefix!#1}{#2}}%
- \fi}
-
-\def\startsetupvariables{\startinterfaceobjects\setinterfacesetupvariable\stopsetupvariables}
+% \def\defineinterfaceconstant#1#2%
+% {\setvalue{\c!prefix!#1}{#2}%
+% \ifinterfacetranslation
+% \setvalue{\x!prefix!#1}{#2}%
+% \fi}
-\let\stopsetupvariables\relax
+\def\defineinterfaceconstant#1#2%
+ {\setvalue{\c!prefix!#1}{#2}}
+
+% %D \macros
+% %D {startinterfacesetupconstant}
+% %D
+% %D The next command, \type{\startinterfacesetupconstant}, which
+% %D behavior also depends on the boolean, is used for constants
+% %D that are only needed in these quick reference macro's. The
+% %D following, more efficient approach does not work here,
+% %D because it sometimes generates spaces.
+% %D
+% %D \starttyping
+% %D \def\setinterfacesetupconstant
+% %D {\ifinterfacetranslation
+% %D \expandafter\setinterfaceconstant
+% %D \fi}
+% %D \stoptyping
+% %D
+% %D We therefore use the more redundant but robust method:
+
+% \def\setinterfacesetupvariable#1#2%
+% {\ifinterfacetranslation
+% \doifelse{#2}\nointerfaceobject
+% {\setvalue{\y!prefix!#1}{#1}}
+% {\setvalue{\y!prefix!#1}{#2}}%
+% \fi}
+%
+% \def\startsetupvariables{\startinterfaceobjects\setinterfacesetupvariable\stopsetupvariables}
+%
+% \let\stopsetupvariables\relax
%D \macros
%D {startelements}
@@ -1421,83 +1344,68 @@
%D
%D \stopcommands
%D \stoptyping
-%D
-%D Here we also have to take care of the optional translation
-%D needed for reference cards.
-% \ifx\doifdefinedascommandelse\undefined
-% \let\doifdefinedascommandelse\thirdofthreearguments
-% \else
-% % this one will be defined in the encoding modules
-% \fi
+% %D Here we also have to take care of the optional translation
+% %D needed for reference cards.
+
+% \def\setinterfacecommand#1#2%
+% {\doifelse{#2}\nointerfaceobject
+% {\debuggerinfo{command}{no link to #1}%
+% \setinterfacesetupvariable{#1}{#1}}
+% {\doifelse{#1}{#2}
+% {\debuggerinfo{command}{#1 remains #1}}
+% {\doifdefinedelse{#2}
+% {\debuggerinfo{command}{core command #2 redefined as #1}}%
+% {\debuggerinfo{command}{#2 defined as #1}}%
+% %\@EAEAEA\def\@EA\csname\@EA#2\@EA\endcsname\@EA{\csname#1\endcsname}}%
+% \@EA\def\csname#2\@EA\endcsname\@EA{\csname#1\endcsname}}% ugly but faster
+% \setinterfacesetupvariable{#1}{#2}}}
\def\setinterfacecommand#1#2%
{\doifelse{#2}\nointerfaceobject
- {\debuggerinfo{command}{no link to #1}%
- \setinterfacesetupvariable{#1}{#1}}
+ {\debuggerinfo{command}{no link to #1}}
{\doifelse{#1}{#2}
{\debuggerinfo{command}{#1 remains #1}}
{\doifdefinedelse{#2}
{\debuggerinfo{command}{core command #2 redefined as #1}}%
{\debuggerinfo{command}{#2 defined as #1}}%
- %\@EAEAEA\def\@EA\csname\@EA#2\@EA\endcsname\@EA{\csname#1\endcsname}}%
- \@EA\def\csname#2\@EA\endcsname\@EA{\csname#1\endcsname}}% ugly but faster
- \setinterfacesetupvariable{#1}{#2}}}
+ \@EA\def\csname#2\@EA\endcsname\@EA{\csname#1\endcsname}}}}
\def\startcommands{\startinterfaceobjects\setinterfacecommand\stopcommands}
\let\stopcommands\relax
-%D \macros
-%D {getinterfaceconstant, getinterfacevariable}
-%D
-%D Generating the interface translation macro's that are used
-%D in the reference lists, is enabled by setting the boolean:
-%D
-%D \starttyping
-%D \interfacetranslationtrue
-%D \stoptyping
-%D
-%D Keep in mind that enabling interfacetranslation costs a
-%D bit of hash space.
+% %D \macros
+% %D {getinterfaceconstant, getinterfacevariable}
+% %D
+% %D Generating the interface translation macro's that are used
+% %D in the reference lists, is enabled by setting the boolean:
+% %D
+% %D \starttyping
+% %D \interfacetranslationtrue
+% %D \stoptyping
+% %D
+% %D Keep in mind that enabling interfacetranslation costs a
+% %D bit of hash space.
+%
+% %D Interface translation is obsolete now that we use an \XML\
+% %D definition base.
-\newif\ifinterfacetranslation
+% \newif\ifinterfacetranslation
-% for a long time:
-%
% \def\getinterfaceconstant#1%
% {\ifinterfacetranslation
-% \doifdefinedelse{\x!prefix!#1}
-% {\getvalue{\x!prefix!#1}}
-% {#1}%
+% \executeifdefined{\x!prefix!#1}{#1}%
% \else
% #1%
% \fi}
-%
+
% \def\getinterfacevariable#1%
% {\ifinterfacetranslation
-% \doifdefinedelse{\y!prefix!#1}
-% {\getvalue{\y!prefix!#1}}
-% {#1}%
+% \executeifdefined{\y!prefix!#1}{#1}%
% \else
% #1%
% \fi}
-%
-% more compact
-
-\def\getinterfaceconstant#1%
- {\ifinterfacetranslation
- \executeifdefined{\x!prefix!#1}{#1}%
- \else
- #1%
- \fi}
-
-\def\getinterfacevariable#1%
- {\ifinterfacetranslation
- \executeifdefined{\y!prefix!#1}{#1}%
- \else
- #1%
- \fi}
%D When a reference list is generated, one does not need to
%D generate a new format. Just reloading the relevant
diff --git a/Master/texmf-dist/tex/context/base/mult-sys.tex b/Master/texmf-dist/tex/context/base/mult-sys.tex
index 1e0cb5f3dbf..2b17c959026 100644
--- a/Master/texmf-dist/tex/context/base/mult-sys.tex
+++ b/Master/texmf-dist/tex/context/base/mult-sys.tex
@@ -29,6 +29,9 @@
%D
%D This commands generate \type{\s!word} and \type{\m!word}.
+\definesystemconstant {hans}
+\definesystemconstant {taco}
+
%D First we define some system constants used for both the
%D multi||lingual interface and multi||linguag typesetting.
@@ -87,6 +90,7 @@
%D As the name of their define command states, the next set of
%D constants is used in the message macro's.
+\definemessageconstant {check}
\definemessageconstant {colors}
\definemessageconstant {columns}
\definemessageconstant {encodings}
@@ -105,6 +109,7 @@
\definemessageconstant {structures}
\definemessageconstant {symbols}
\definemessageconstant {systems}
+\definemessageconstant {lua}
\definemessageconstant {textblocks}
\definemessageconstant {verbatims}
\definemessageconstant {versions}
@@ -114,32 +119,23 @@
\definesystemconstant {next}
\definesystemconstant {pickup}
-
\definesystemconstant {ascii}
\definesystemconstant {default}
\definesystemconstant {unknown}
-
\definesystemconstant {action}
\definesystemconstant {compare}
-
\definesystemconstant {do}
\definesystemconstant {dodo}
-
\definesystemconstant {complex}
\definesystemconstant {simple}
-
\definesystemconstant {start}
\definesystemconstant {stop}
-
\definesystemconstant {dummy}
-
\definesystemconstant {local}
\definesystemconstant {global}
-
\definesystemconstant {done}
-
\definesystemconstant {font}
-
+\definesystemconstant {link}
\definesystemconstant {section} \let\v!sectionlevel\s!section % for old times sake
%D A more experienced \TEX\ user will recognize the next four
@@ -159,11 +155,13 @@
\definesystemconstant {skewchar}
\definesystemconstant {hyphenchar}
\definesystemconstant {encoding}
+\definesystemconstant {resource}
\definesystemconstant {mapping}
\definesystemconstant {language}
\definesystemconstant {patterns}
\definesystemconstant {rscale}
\definesystemconstant {handling}
+\definesystemconstant {features}
\definesystemconstant {ucmap}
\definesystemconstant {property}
@@ -171,6 +169,8 @@
\definesystemconstant {layer}
\definesystemconstant {effect}
\definesystemconstant {negative}
+\definesystemconstant {color}
+\definesystemconstant {transparency}
\definesystemconstant {black}
\definesystemconstant {white}
@@ -196,6 +196,7 @@
\definesystemconstant {entrya}
\definesystemconstant {entryb}
\definesystemconstant {entryc}
+\definesystemconstant {entryd}
\definesystemconstant {entry}
\definesystemconstant {see}
\definesystemconstant {from}
@@ -377,6 +378,7 @@
\definesystemvariable {bl} % BLanko
\definesystemvariable {bg} % BleedinG
\definesystemvariable {bo} % BlankO (definitions)
+\definesystemvariable {bp} % BreakPoint
\definesystemvariable {br} % sideBaR
\definesystemvariable {bs} % SelecteerBlokken
\definesystemvariable {bt} % BuTton
@@ -386,7 +388,9 @@
\definesystemvariable {cb} % CollectBox
\definesystemvariable {cc} % Comment
\definesystemvariable {ce} % CasEs
+\definesystemvariable {ch} % CHaracterspacing
\definesystemvariable {ci} % CItaat
+\definesystemvariable {ck} % Character Kerning
\definesystemvariable {cl} % kleur (CoLor setup)
\definesystemvariable {cn} % CollumN
\definesystemvariable {co} % COmbinaties
@@ -412,7 +416,7 @@
\definesystemvariable {eq} % EQalign
\definesystemvariable {er} % external resources
\definesystemvariable {ex} % ExterneFiguren
-\definesystemvariable {ht} % HiddenText
+\definesystemvariable {fa} % font feature
\definesystemvariable {fc} % FramedContent
\definesystemvariable {fd} % FielD
\definesystemvariable {fe} % FoxetExtensions
@@ -430,6 +434,7 @@
\definesystemvariable {fx} % FoXet
\definesystemvariable {ha} % HAng
\definesystemvariable {hs} % HSpace
+\definesystemvariable {ht} % HiddenText
\definesystemvariable {ia} % Interactie
\definesystemvariable {ib} % InteractieBalk
\definesystemvariable {id} % Index
@@ -462,6 +467,7 @@
\definesystemvariable {lf} % LocalFigures
\definesystemvariable {lg} % taal (LanGuage)
\definesystemvariable {li} % LIjst
+\definesystemvariable {lk} % LinK
\definesystemvariable {ll} % Layers
\definesystemvariable {lx} % LayerteXt
\definesystemvariable {ln} % LijNen
@@ -535,6 +541,7 @@
\definesystemvariable {st} % STickers
\definesystemvariable {su} % SetUp
\definesystemvariable {sv} % SysteemVariabelen
+\definesystemvariable {sw} % SectionWorld
\definesystemvariable {sx} % Selector
\definesystemvariable {sy} % SYnchronisatie
\definesystemvariable {ta} % TAb
@@ -560,6 +567,7 @@
\definesystemvariable {vn} % VoetNoten
\definesystemvariable {vt} % VerTical
\definesystemvariable {wr} % WitRuimte
+\definesystemvariable {wl} % WordList
\definesystemvariable {xf} % XML File
\definesystemvariable {xp} % XML Processing
\definesystemvariable {xy} % schaal
@@ -660,8 +668,8 @@
%D The next two files specify user settings as well as
%D \TEXEXEC\ settings when generating a format.
-\definefileconstant {usrfilename} {cont-usr}
-\definefileconstant {fmtfilename} {cont-fmt}
+\definefileconstant {usrfilename} {cont-usr} % .tex
+\definefileconstant {fmtfilename} {cont-fmt} % .tex
%D The setup files for the language, font, color and special
%D subsystems have a common prefix. This means that we have at
@@ -762,7 +770,7 @@
%D And only after this selection is done, we can define
%D messages, otherwise the default language is in use.
-\ifinterfacetranslation \else
+% \ifinterfacetranslation \else % interfacetranslation is obsolete
\startmessages dutch library: check
title: controle
@@ -822,7 +830,7 @@
3: -- -- remplace une macro, utilisez des MAJUSCULES !
\stopmessages
-\fi
+% \fi
%D Ok, here are some more, because we've got ouselves some
%D extensions to \CONTEXT.
diff --git a/Master/texmf-dist/tex/context/base/node-ini.lua b/Master/texmf-dist/tex/context/base/node-ini.lua
new file mode 100644
index 00000000000..5923a49e40b
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/node-ini.lua
@@ -0,0 +1,1042 @@
+if not modules then modules = { } end modules ['node-ini'] = {
+ version = 1.001,
+ comment = "companion to node-ini.tex",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+--[[ldx--
+<p>Access to nodes is what gives <l n='luatex'/> its power. Here we
+implement a few helper functions. These functions are rather optimized.</p>
+--ldx]]--
+
+nodes = nodes or { }
+nodes.trace = false
+nodes.ignore = nodes.ignore or false
+
+-- handy helpers
+
+if node.protect_glyphs then
+
+ nodes.protect_glyphs = node.protect_glyphs
+ nodes.unprotect_glyphs = node.unprotect_glyphs
+
+else do
+
+ -- initial value subtype : X000 0001 = 1 = 0x01 = char
+ --
+ -- expected before linebreak : X000 0000 = 0 = 0x00 = glyph
+ -- X000 0010 = 2 = 0x02 = ligature
+ -- X000 0100 = 4 = 0x04 = ghost
+ -- X000 1010 = 10 = 0x0A = leftboundary lig
+ -- X001 0010 = 18 = 0x12 = rightboundary lig
+ -- X001 1010 = 26 = 0x1A = both boundaries lig
+ -- X000 1100 = 12 = 0x1C = leftghost
+ -- X001 0100 = 20 = 0x14 = rightghost
+
+
+ local glyph = node.id('glyph')
+ local traverse_id = node.traverse_id
+
+ function nodes.protect_glyphs(head)
+ local done = false
+ for g in traverse_id(glyph,head) do
+ local s = g.subtype
+ if s == 1 then
+ done, g.subtype = true, 256
+ elseif s <= 256 then
+ done, g.subtype = true, 256 + s
+ end
+ end
+ return done
+ end
+
+ function nodes.unprotect_glyphs(head)
+ local done = false
+ for g in traverse_id(glyph,head) do
+ local s = g.subtype
+ if s > 256 then
+ done, g.subtype = true, s - 256
+ end
+ end
+ return done
+ end
+
+end end
+
+do
+
+ local remove, free = node.remove, node.free
+
+ --~ function nodes.remove(head, current, free_too)
+ --~ if head == current then
+ --~ local cn = current.next
+ --~ if cn then
+ --~ cn.prev = nil
+ --~ if free_too then
+ --~ node.free(current)
+ --~ return cn, cn, nil
+ --~ else
+ --~ current.prev = nil
+ --~ current.next = nil
+ --~ return cn, cn, current
+ --~ end
+ --~ else
+ --~ if free_too then
+ --~ node.free(current)
+ --~ return nil, nil, nil
+ --~ else
+ --~ return head,current,current
+ --~ end
+ --~ end
+ --~ else
+ --~ local cp = current.prev
+ --~ local cn = current.next
+ --~ if not cp and head.next == current then
+ --~ cp = head
+ --~ end
+ --~ if cn then
+ --~ cn.prev = cp
+ --~ if cp then
+ --~ cp.next = cn
+ --~ end
+ --~ elseif cp then
+ --~ cp.next = nil
+ --~ end
+ --~ if free_too then
+ --~ node.free(current)
+ --~ return head, cn, nil
+ --~ else
+ --~ current.prev = nil
+ --~ current.next = nil
+ --~ return head, cn, current
+ --~ end
+ --~ end
+ --~ end
+
+ function nodes.remove(head, current, free_too)
+ local t = current
+ head, current = remove(head,current)
+ if t then
+ if free_too then
+ free(t)
+ t = nil
+ else
+ t.next, t.prev = nil, nil
+ end
+ end
+ return head, current, t
+ end
+
+ function nodes.delete(head,current)
+ return nodes.remove(head,current,true)
+ end
+
+ nodes.before = node.insert_before -- broken
+ nodes.after = node.insert_after
+
+ function nodes.before(h,c,n)
+ if c then
+ if c == h then
+ n.next = h
+ n.prev = nil
+ h.prev = n
+ else
+ local cp = c.prev
+ n.next = c
+ n.prev = cp
+ if cp then
+ cp.next = n
+ end
+ c.prev = n
+ return h, n
+ end
+ end
+ return n, n
+ end
+
+ function nodes.after(h,c,n)
+ if c then
+ local cn = c.next
+ if cn then
+ n.next = cn
+ cn.prev = n
+ else
+ n.next = nil
+ end
+ c.next = n
+ n.prev = c
+ if c ~= h then
+ return h, n
+ end
+ end
+ return n, n
+ end
+
+ function nodes.show_list(head, message)
+ if message then
+ texio.write_nl(message)
+ end
+ for n in node.traverse(head) do
+ texio.write_nl(tostring(n))
+ end
+ end
+
+end
+
+-- will move
+
+nodes.processors = { }
+nodes.processors.char = { }
+nodes.processors.char.proc = { }
+
+function nodes.report(t,done)
+ if nodes.trace then -- best also test this before calling
+ if done then
+ if status.output_active then
+ texio.write(string.format("<++ %s>",nodes.count(t)))
+ else
+ texio.write(string.format("<+ %s>",nodes.count(t)))
+ end
+ else
+ if status.output_active then
+ texio.write(string.format("<-- %s>",nodes.count(t)))
+ else
+ texio.write(string.format("<- %s>",nodes.count(t)))
+ end
+ end
+ end
+end
+
+do
+
+ local hlist, vlist = node.id('hlist'), node.id('vlist')
+
+ local function count(stack,flat)
+ local n = 0
+ while stack do
+ local id = stack.id
+ if not flat and id == hlist or id == vlist then
+ local list = stack.list
+ if list then
+ n = n + 1 + count(list) -- self counts too
+ else
+ n = n + 1
+ end
+ else
+ n = n + 1
+ end
+ stack = stack.next
+ end
+ return n
+ end
+
+ nodes.count = count
+
+end
+
+--[[ldx--
+<p>When manipulating node lists in <l n='context'/>, we will remove
+nodes and insert new ones. While node access was implemented, we did
+quite some experiments in order to find out if manipulating nodes
+in <l n='lua'/> was feasible from the perspective of performance.</p>
+
+<p>First of all, we noticed that the bottleneck is more with excessive
+callbacks (some gets called very often) and the conversion from and to
+<l n='tex'/>'s datastructures. However, at the <l n='lua'/> end, we
+found that inserting and deleting nodes in a table could become a
+bottleneck.</p>
+
+<p>This resulted in two special situations in passing nodes back to
+<l n='tex'/>: a table entry with value <type>false</type> is ignored,
+and when instead of a table <type>true</type> is returned, the
+original table is used.</p>
+
+<p>Insertion is handled (at least in <l n='context'/> as follows. When
+we need to insert a node at a certain position, we change the node at
+that position by a dummy node, tagged <type>inline</type> which itself
+has_attribute the original node and one or more new nodes. Before we pass
+back the list we collapse the list. Of course collapsing could be built
+into the <l n='tex'/> engine, but this is a not so natural extension.</p>
+
+<p>When we collapse (something that we only do when really needed), we
+also ignore the empty nodes. [This is obsolete!]</p>
+--ldx]]--
+
+
+--[[ldx--
+<p>Serializing nodes can be handy for tracing. Also, saving and
+loading node lists can come in handy as soon we are going to
+use external applications to process node lists.</p>
+--ldx]]--
+
+function nodes.show(stack)
+--~ texio.write_nl(table.serialize(stack))
+end
+
+function nodes.save(stack,name) -- *.ltn : luatex node file
+--~ if name then
+--~ file.savedata(name,table.serialize(stack))
+--~ else
+--~ texio.write_nl('log',table.serialize(stack))
+--~ end
+end
+
+function nodes.load(name)
+--~ return file.loaddata(name)
+end
+
+-- node-cap.lua
+
+--~ nodes.capture = { } -- somehow fails
+
+--~ function nodes.capture.start(cbk)
+--~ local head, tail = nil, nil
+--~ callbacks.push(cbk, function(t)
+--~ if tail then
+--~ tail.next = t
+--~ else
+--~ head, tail = t, t
+--~ end
+--~ while tail.next do
+--~ tail = tail.next
+--~ end
+--~ return false
+--~ end)
+--~ function nodes.capture.stop()
+--~ function nodes.capture.stop() end
+--~ function nodes.capture.get()
+--~ function nodes.capture.get() end
+--~ return head
+--~ end
+--~ callbacks.pop(cbk)
+--~ end
+--~ function nodes.capture.get() end -- error
+--~ end
+
+--~ nodes.capture.stop = function() end
+--~ nodes.capture.get = function() end
+
+-- node-gly.lua
+
+if not fonts then fonts = { } end
+if not fonts.otf then fonts.otf = { } end
+if not fonts.tfm then fonts.tfm = { } end
+if not fonts.tfm.id then fonts.tfm.id = { } end
+
+do
+
+ local glyph = node.id('glyph')
+ local has_attribute = node.has_attribute
+ local traverse_id = node.traverse_id
+
+ local pairs = pairs
+
+ local starttiming, stoptiming = input.starttiming, input.stoptiming
+
+ function nodes.process_characters(head)
+ -- not ok yet; we need a generic blocker
+ -- if status.output_active then
+ if false then -- status.output_active then
+ return head, false -- true
+ else
+ -- either next or not, but definitely no already processed list
+ starttiming(nodes)
+ local usedfonts, attrfonts, done = { }, { }, false
+ -- todo: should be independent of otf
+ local set_dynamics, font_ids = fonts.otf.set_dynamics, fonts.tfm.id -- todo: font-var.lua so that we can global this one
+ local a, u, prevfont, prevattr = 0, 0, nil, 0
+ for n in traverse_id(glyph,head) do
+ local font, attr = n.font, has_attribute(n,0) -- zero attribute is reserved for fonts, preset to 0 is faster (first match)
+ if attr and attr > 0 then
+ if font ~= prevfont or attr ~= prevattr then
+ local used = attrfonts[font]
+ if not used then
+ used = { }
+ attrfonts[font] = used
+ end
+ if not used[attr] then
+ local d = set_dynamics(font_ids[font],attr) -- todo, script, language -> n.language also axis
+ if d then
+ used[attr] = d
+ a = a + 1
+ end
+ end
+ prevfont, prevattr = font, attr
+ end
+ elseif font ~= prevfont then
+ prevfont, prevattr = font, 0
+ local used = usedfonts[font]
+ if not used then
+ local data = font_ids[font]
+ if data then
+ local shared = data.shared -- we need to check shared, only when same features
+ if shared then
+ local processors = shared.processors
+ if processors and #processors > 0 then
+ usedfonts[font] = processors
+ u = u + 1
+ end
+ end
+ else
+ -- probably nullfont
+ end
+ end
+ else
+ prevattr = attr
+ end
+ end
+ -- we could combine these and just make the attribute nil
+ if u > 0 then
+ for font, processors in pairs(usedfonts) do
+ local n = #processors
+ if n == 1 then
+ local h, d = processors[1](head,font,false)
+ head, done = h or head, done or d
+ else
+ for i=1,#processors do
+ local h, d = processors[i](head,font,false)
+ head, done = h or head, done or d
+ end
+ end
+ end
+ end
+ if a > 0 then -- we need to get rid of a loop here
+ for font, dynamics in pairs(attrfonts) do
+ for attribute, processors in pairs(dynamics) do -- attr can switch in between
+ local n = #processors
+ if n == 1 then
+ local h, d = processors[1](head,font,attribute)
+ head, done = h or head, done or d
+ else
+ for i=1,n do
+ local h, d = processors[i](head,font,attribute)
+ head, done = h or head, done or d
+ end
+ end
+ end
+ end
+ end
+ stoptiming(nodes)
+ if nodes.trace then
+ nodes.report(head,done)
+ end
+ return head, true
+ end
+ end
+
+end
+
+-- vbox: grouptype: vbox vtop output split_off split_keep | box_type: exactly|aditional
+-- hbox: grouptype: hbox adjusted_hbox(=hbox_in_vmode) | box_type: exactly|aditional
+
+do
+
+ local has_attribute, set, attribute = node.has_attribute, node.set_attribute, tex.attribute
+
+ function nodes.inherit_attributes(n) -- still ok ?
+ if n then
+ local i = 1
+ while true do
+ local a = attribute[i]
+ if a < 0 then
+ break
+ else
+ local ai = has_attribute(n,i)
+ if not ai then
+ set(n,i,a)
+ end
+ i = i + 1
+ end
+ end
+ end
+ end
+
+end
+
+function nodes.length(head)
+ if head then
+ local m = 0
+ for n in node.traverse(head) do
+ m = m + 1
+ end
+ return m
+ else
+ return 0
+ end
+end
+
+--~ nodes.processors.actions = nodes.processors.actions or { }
+
+--~ function nodes.processors.action(head)
+--~ if head then
+--~ node.slide(head)
+--~ local done = false
+--~ local actions = nodes.processors.actions
+--~ for i=1,#actions do
+--~ local h, ok = actions[i](head)
+--~ if ok then
+--~ head, done = h, true
+--~ end
+--~ end
+--~ if done then
+--~ return head
+--~ else
+--~ return true
+--~ end
+--~ else
+--~ return head
+--~ end
+--~ end
+
+lists = lists or { }
+lists.plugins = lists.plugins or { }
+
+chars = chars or { }
+chars.plugins = chars.plugins or { }
+
+--~ words = words or { }
+--~ words.plugins = words.plugins or { }
+
+callbacks.trace = false
+
+do
+
+ kernel = kernel or { }
+
+ local starttiming, stoptiming = input.starttiming, input.stoptiming
+ local hyphenate, ligaturing, kerning = lang.hyphenate, node.ligaturing, node.kerning
+
+ function kernel.hyphenation(head,tail) -- lang.hyphenate returns done
+ starttiming(kernel)
+ local done = hyphenate(head,tail)
+ stoptiming(kernel)
+ return head, tail, done
+ end
+ function kernel.ligaturing(head,tail) -- node.ligaturing returns head,tail,done
+ starttiming(kernel)
+ local head, tail, done = ligaturing(head,tail)
+ stoptiming(kernel)
+ return head, tail, done
+ end
+ function kernel.kerning(head,tail) -- node.kerning returns head,tail,done
+ starttiming(kernel)
+ local head, tail, done = kerning(head,tail)
+ stoptiming(kernel)
+ return head, tail, done
+ end
+
+end
+
+callback.register('hyphenate' , function(head,tail) return tail end)
+callback.register('ligaturing', function(head,tail) return tail end)
+callback.register('kerning' , function(head,tail) return tail end)
+
+-- used to be loop, this is faster, called often; todo: shift up tail or even better,
+-- handle tail everywhere; for the moment we're safe
+
+do
+
+ local charplugins, listplugins = chars.plugins, lists.plugins
+
+ nodes.processors.actions = function(head,tail) -- removed: if head ... end
+ local ok, done = false, false
+ head, ok = nodes.process_attributes(head,charplugins) ; done = done or ok -- attribute driven
+ head, tail, ok = kernel.hyphenation (head,tail) ; done = done or ok -- language driven
+ head, ok = languages.words.check (head,tail) ; done = done or ok -- language driven
+ head, ok = nodes.process_characters(head) ; done = done or ok -- font driven
+ ok = nodes.protect_glyphs (head) ; done = done or ok -- turn chars into glyphs
+ head, tail, ok = kernel.ligaturing (head,tail) ; done = done or ok -- normal ligaturing routine / needed for base mode
+ head, tail, ok = kernel.kerning (head,tail) ; done = done or ok -- normal kerning routine / needed for base mode
+ head, ok = nodes.process_attributes(head,listplugins) ; done = done or ok -- attribute driven
+ return head, done
+ end
+
+end
+
+do
+
+ local actions = nodes.processors.actions
+ local first_character = node.first_character
+ local slide = node.slide
+
+ local function tracer(what,state,head,groupcode,glyphcount)
+ texio.write_nl(string.format("%s %s: group: %s, nodes: %s",
+ (state and "Y") or "N", what, groupcode or "?", nodes.count(head,true)))
+ end
+
+ function nodes.processors.pre_linebreak_filter(head,groupcode) -- todo: tail
+ local first, found = first_character(head)
+ if found then
+ if callbacks.trace then tracer("pre_linebreak",true,head,groupcode) end
+ local head, done = actions(head,slide(head))
+ return (done and head) or true
+ else
+ if callbacks.trace then tracer("pre_linebreak",false,head,groupcode) end
+ return true
+ end
+ end
+
+ function nodes.processors.hpack_filter(head,groupcode) -- todo: tail
+ local first, found = first_character(head)
+ if found then
+ if callbacks.trace then tracer("hpack",true,head,groupcode) end
+ local head, done = actions(head,slide(head))
+ return (done and head) or true
+ end
+ if callbacks.trace then tracer("hpack",false,head,groupcode) end
+ return true
+ end
+
+end
+
+callback.register('pre_linebreak_filter', nodes.processors.pre_linebreak_filter)
+callback.register('hpack_filter' , nodes.processors.hpack_filter)
+
+do
+
+ -- beware, some field names will change in a next release of luatex
+
+ local expand = table.tohash {
+ "list", -- list_ptr & ins_ptr & adjust_ptr
+ "pre", --
+ "post", --
+ "spec", -- glue_ptr
+ "top_skip", --
+ "attr", --
+ "replace", -- nobreak
+ "components", -- lig_ptr
+ "box_left", --
+ "box_right", --
+ "glyph", -- margin_char
+ "leader", -- leader_ptr
+ "action", -- action_ptr
+ "value", -- user_defined nodes with subtype 'a' en 'n'
+ }
+
+ -- page_insert: "height", "last_ins_ptr", "best_ins_ptr"
+ -- split_insert: "height", "last_ins_ptr", "best_ins_ptr", "broken_ptr", "broken_ins"
+
+ local ignore = table.tohash {
+ "page_insert",
+ "split_insert",
+ "ref_count",
+ }
+
+ local dimension = table.tohash {
+ "width", "height", "depth", "shift",
+ "stretch", "shrink",
+ "xoffset", "yoffset",
+ "surround",
+ "kern",
+ "box_left_width", "box_right_width"
+ }
+
+ -- flat: don't use next, but indexes
+ -- verbose: also add type
+ -- can be sped up
+
+ nodes.dimensionfields = dimension
+ nodes.listablefields = expand
+ nodes.ignorablefields = ignore
+
+ -- not ok yet:
+
+ function nodes.astable(n,sparse) -- not yet ok
+ local f, t = node.fields(n.id,n.subtype), { }
+ for i=1,#f do
+ local v = f[i]
+ local d = n[v]
+ if d then
+ if ignore[v] or v == "id" then
+ -- skip
+ elseif expand[v] then -- or: type(n[v]) ~= "string" or type(n[v]) ~= "number" or type(n[v]) ~= "table"
+ t[v] = "pointer to list"
+ elseif sparse then
+ if (type(d) == "number" and d ~= 0) or (type(d) == "string" and d ~= "") then
+ t[v] = d
+ end
+ else
+ t[v] = d
+ end
+ end
+ end
+ t.type = node.type(n.id)
+ return t
+ end
+
+ local nodefields = node.fields
+ local nodetype = node.type
+
+ -- under construction:
+
+ local function totable(n,flat,verbose)
+ local function to_table(n)
+ local f = nodefields(n.id,n.subtype)
+ local tt = { }
+ for k=1,#f do
+ local v = f[k]
+ local nv = n[v]
+ if nv then
+ if ignore[v] then
+ -- skip
+ elseif expand[v] then
+ if type(nv) == "number" or type(nv) == "string" then
+ tt[v] = nv
+ else
+ tt[v] = totable(nv,flat,verbose)
+ end
+ elseif type(nv) == "table" then
+ tt[v] = nv -- totable(nv,flat,verbose) -- data
+ else
+ tt[v] = nv
+ end
+ end
+ end
+ if verbose then
+ tt.type = nodetype(tt.id)
+ end
+ return tt
+ end
+ if n then
+ if flat then
+ local t = { }
+ while n do
+ t[#t+1] = to_table(n)
+ n = n.next
+ end
+ return t
+ else
+ local t = to_table(n)
+ if n.next then
+ t.next = totable(n.next,flat,verbose)
+ end
+ return t
+ end
+ else
+ return { }
+ end
+ end
+
+ nodes.totable = totable
+
+ local function key(k)
+ return ((type(k) == "number") and "["..k.."]") or k
+ end
+
+ -- not ok yet:
+
+ local function serialize(root,name,handle,depth,m)
+ handle = handle or print
+ if depth then
+ depth = depth .. " "
+ handle(("%s%s={"):format(depth,key(name)))
+ else
+ depth = ""
+ local tname = type(name)
+ if tname == "string" then
+ if name == "return" then
+ handle("return {")
+ else
+ handle(name .. "={")
+ end
+ elseif tname == "number"then
+ handle("[" .. name .. "]={")
+ else
+ handle("t={")
+ end
+ end
+ if root then
+ local fld
+ if root.id then
+ fld = nodefields(root.id,root.subtype) -- we can cache these (todo)
+ else
+ fld = table.sortedkeys(root)
+ end
+ if type(root) == 'table' and root['type'] then -- userdata or table
+ handle(("%s %s=%q,"):format(depth,'type',root['type']))
+ end
+ for _,k in ipairs(fld) do
+ if k == "ref_count" then
+ -- skip
+ elseif k then
+ local v = root[k]
+ local t = type(v)
+ if t == "number" then
+ if v == 0 then
+ -- skip
+ else
+ handle(("%s %s=%s,"):format(depth,key(k),v))
+ end
+ elseif t == "string" then
+ if v == "" then
+ -- skip
+ else
+ handle(("%s %s=%q,"):format(depth,key(k),v))
+ end
+ elseif v then -- userdata or table
+ serialize(v,k,handle,depth,m+1)
+ end
+ end
+ end
+ if root['next'] then -- userdata or table
+ serialize(root['next'],'next',handle,depth,m+1)
+ end
+ end
+ if m and m > 0 then
+ handle(("%s},"):format(depth))
+ else
+ handle(("%s}"):format(depth))
+ end
+ end
+
+ function nodes.serialize(root,name)
+ local t = { }
+ local function flush(s)
+ t[#t+1] = s
+ end
+ serialize(root, name, flush, nil, 0)
+ return table.concat(t,"\n")
+ end
+
+ function nodes.serializebox(n,flat,verbose)
+ return nodes.serialize(nodes.totable(tex.box[n],flat,verbose))
+ -- return nodes.serialize(tex.box[n])
+ end
+
+ function nodes.visualizebox(...)
+ -- tex.sprint(tex.ctxcatcodes,"\\starttyping\n" .. nodes.serializebox(...) .. "\n\\stoptyping\n")
+ tex.print(tex.ctxcatcodes,"\\starttyping")
+ tex.print(nodes.serializebox(...))
+ tex.print("\\stoptyping")
+ end
+
+ function nodes.check_for_leaks(sparse)
+ local l = { }
+ local q = node.usedlist()
+ for p in node.traverse(q) do
+ local s = table.serialize(nodes.astable(p,sparse),node.type(p.id))
+ l[s] = (l[s] or 0) + 1
+ end
+ node.flush_list(q)
+ for k, v in pairs(l) do
+ texio.write_nl(string.format("%s * %s", v, k))
+ end
+ end
+
+end
+
+if not node.list_has_attribute then -- no longer needed
+
+ function node.list_has_attribute(list,attribute)
+ if list and attribute then
+ for n in node.traverse(list) do
+ local a = has_attribute(n,attribute)
+ if a then return a end
+ end
+ end
+ return false
+ end
+
+end
+
+function nodes.pack_list(head)
+ local t = { }
+ for n in node.traverse(head) do
+ t[#t+1] = tostring(n)
+ end
+ return t
+end
+
+do
+
+ local glue, whatsit, hlist = node.id("glue"), node.id("whatsit"), node.id("hlist")
+
+ function nodes.leftskip(n)
+ while n do
+ local id = n.id
+ if id == glue then
+ if n.subtype == 8 then -- 7 in c/web source
+ return (n.spec and n.spec.width) or 0
+ else
+ return 0
+ end
+ elseif id == whatsit then
+ n = n.next
+ elseif id == hlist then
+ return n.width
+ else
+ break
+ end
+ end
+ return 0
+ end
+ function nodes.rightskip(n)
+ if n then
+ n = node.slide(n)
+ while n do
+ local id = n.id
+ if id == glue then
+ if n.subtype == 9 then -- 8 in the c/web source
+ return (n.spec and n.spec.width) or 0
+ else
+ return 0
+ end
+ elseif id == whatsit then
+ n = n.prev
+ else
+ break
+ end
+ end
+ end
+ return false
+ end
+
+end
+
+-- goodie
+--
+-- if node.valid(tex.box[0]) then print("valid node") end
+
+--~ do
+--~ local n = node.new(0,0)
+--~ local m = getmetatable(n)
+--~ m.__metatable = 'node'
+--~ node.free(n)
+
+--~ function node.valid(n)
+--~ return n and getmetatable(n) == 'node'
+--~ end
+--~ end
+
+-- for the moment we put this here:
+
+do
+
+ nodes.tracers = { }
+ nodes.tracers.characters = { }
+
+ local glyph, disc = node.id('glyph'), node.id('disc')
+
+ local fontdata = fonts.tfm.id
+
+ local function collect(head,list,tag,n)
+ n = n or 0
+ local ok, fn = false, nil
+ while head do
+ local id = head.id
+ if id == glyph then
+ local f = head.font
+ if f ~= fn then
+ ok, fn = false, f
+ end
+ local c = head.char
+ local d = fontdata[f].characters[c]
+ local i = (d and d.description.index) or -1
+ if not ok then
+ ok = true
+ n = n + 1
+ list[n] = list[n] or { }
+ list[n][tag] = { }
+ end
+ local l = list[n][tag]
+ l[#l+1] = { c, f, i }
+ elseif id == disc then
+ -- skip
+ else
+ ok = false
+ end
+ head = head.next
+ end
+ end
+
+ function nodes.tracers.characters.equal(ta, tb)
+ if #ta ~= #tb then
+ return false
+ else
+ for i=1,#ta do
+ local a, b = ta[i], tb[i]
+ if a[1] ~= b[1] or a[2] ~= b[2] or a[3] ~= b[3] then
+ return false
+ end
+ end
+ end
+ return true
+ end
+ function nodes.tracers.characters.string(t)
+ local tt = { }
+ for i=1,#t do
+ tt[i] = utf.char(t[i][1])
+ end
+ return table.concat(tt,"")
+ end
+ function nodes.tracers.characters.unicodes(t,decimal)
+ local tt = { }
+ for i=1,#t do
+ if decimal then
+ tt[i] = t[i][1]
+ else
+ tt[i] = string.format("%04X",t[i][1])
+ end
+ end
+ return table.concat(tt," ")
+ end
+ function nodes.tracers.characters.indices(t,decimal)
+ local tt = { }
+ for i=1,#t do
+ if decimal then
+ tt[i] = t[i][3]
+ else
+ tt[i] = string.format("%04X",t[i][3])
+ end
+ end
+ return table.concat(tt," ")
+ end
+ function nodes.tracers.characters.fonts(t)
+ local f = t[1] and t[1][2]
+ return (f and file.basename(fontdata[f].filename or "unknown")) or "unknown"
+ end
+
+ function nodes.tracers.characters.start()
+ local npc = nodes.process_characters
+ local list = { }
+ function nodes.process_characters(head)
+ local n = #list
+ collect(head,list,'before',n)
+ local h, d = npc(head)
+ collect(head,list,'after',n)
+ if #list > n then
+ list[#list+1] = { }
+ end
+ return h, d
+ end
+ function nodes.tracers.characters.stop()
+ tracers.list['characters'] = list
+ lmx.set('title', 'ConTeXt Character Processing Information')
+ lmx.set('color-background-one', lmx.get('color-background-yellow'))
+ lmx.set('color-background-two', lmx.get('color-background-purple'))
+ lmx.show('context-characters.lmx')
+ lmx.restore()
+ nodes.process_characters = npc
+ end
+ end
+
+ local stack = { }
+
+ function nodes.tracers.start(tag)
+ stack[#stack+1] = tag
+ local tracer = nodes.tracers[tag]
+ if tracer and tracer.start then
+ tracer.start()
+ end
+ end
+ function nodes.tracers.stop()
+ local tracer = stack[#stack]
+ if tracer and tracer.stop then
+ tracer.stop()
+ end
+ stack[#stack] = nil
+ end
+
+end
diff --git a/Master/texmf-dist/tex/context/base/node-ini.tex b/Master/texmf-dist/tex/context/base/node-ini.tex
new file mode 100644
index 00000000000..845a62b31c3
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/node-ini.tex
@@ -0,0 +1,56 @@
+%D \module
+%D [ file=node-ini,
+%D version=2006.08.20,
+%D title=\CONTEXT\ Character Macros,
+%D subtitle=Node Support (Initialization),
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright=PRAGMA]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{Node Support (initialization)}
+
+\registerctxluafile{node-ini}{1.001}
+
+% \appendtoks
+% \ctxlua {
+% callbacks.push('hpack_filter')
+% callbacks.push('vpack_filter')
+% callbacks.push('buildpage_filter')
+% callbacks.push('pre_linebreak_filter')
+% callbacks.push('pre_output_filter')
+% }%
+% \to \everybeforeoutput
+% \appendtoks
+% \ctxlua {
+% callbacks.pop('hpack_filter')
+% callbacks.pop('vpack_filter')
+% callbacks.pop('buildpage_filter')
+% callbacks.pop('pre_linebreak_filter')
+% callbacks.pop('pre_output_filter')
+% }%
+% \to \everyafteroutput
+
+\newcount\shownodescounter
+
+\def\shownextnodes {\afterassignment\doshownodes\shownextnodescounter}
+\def\showflatnodes {\afterassignment\doshownodes\showflatnodescounter}
+\def\doshownextnodes {\ctxlua{texio.write_nl('log',nodes.serializebox(\number\shownodescounter,false,true))}}
+\def\doshowflatnodes {\ctxlua{texio.write_nl('log',nodes.serializebox(\number\shownodescounter,true, true))}}
+\def\visualizenextnodes{\dowithnextbox{\ctxlua{nodes.visualizebox(\number\nextbox,false,true)}}}
+\def\visualizeflatnodes{\dowithnextbox{\ctxlua{nodes.visualizebox(\number\nextbox,true,true)}}}
+
+\def\starttracingnodes[#1]{\ctxlua{nodes.tracers.characters.start("#1")}}
+\def\stoptracingnodes {\ctxlua{nodes.tracers.characters.stop()}}
+
+% \starttext
+% \starttracingnodes[characters]
+% \input tufte \par
+% \input tufte \par
+% \stoptracingnodes
+% \stoptext
+
+\endinput
diff --git a/Master/texmf-dist/tex/context/base/page-bck.tex b/Master/texmf-dist/tex/context/base/page-bck.tex
index 886a4283730..c2430967ca6 100644
--- a/Master/texmf-dist/tex/context/base/page-bck.tex
+++ b/Master/texmf-dist/tex/context/base/page-bck.tex
@@ -13,6 +13,8 @@
\writestatus{loading}{Context Page Macros / Backgrounds}
+% \chardef\kindofpagetextareas=1 will isolate graphics from backgrounds
+
\unprotect
\startmessages dutch library: layouts
diff --git a/Master/texmf-dist/tex/context/base/page-flt.tex b/Master/texmf-dist/tex/context/base/page-flt.tex
index 98d62bcb5ec..0e61a6baa6f 100644
--- a/Master/texmf-dist/tex/context/base/page-flt.tex
+++ b/Master/texmf-dist/tex/context/base/page-flt.tex
@@ -186,6 +186,9 @@
\def\floatparameter #1{\csname\??fl\currentfloat#1\endcsname}
\def\floatcaptionparameter#1{\csname\??kj\currentfloat#1\endcsname}
+% \def\floatparameter #1{\csname \ifcsname\??fl\currentfloat#1\endcsname\??fl\currentfloat\else\??bk\fi#1\endcsname}
+% \def\floatcaptionparameter#1{\csname\??kj\ifcsname\??kj\currentfloat#1\endcsname \currentfloat \fi#1\endcsname}
+
% for the moment we need to define the parameters anyway, first we need to implement a
% proper parent chain (also for framed); no problem now that machines are fast (tests
% show that this may save 20 k or more in the format)
@@ -194,7 +197,7 @@
% \def\floatcaptionparameter#1{\executeifdefined{\??kj\currentfloat#1}{\csname\??bk#1\endcsname}}
\def\setupfloats
- {\dodoubleargument\getparameters[\??bk]}
+ {\dodoubleargument\getparameters[\??bk]} % funny, why not \??fl, must be a reason
\def\setupcaptions
{\dodoubleargument\getparameters[\??kj]}
@@ -213,7 +216,6 @@
\def\setupcaption
{\dodoubleargument\dosetupcaption}
-
\def\doemptyblock#1%
{\localframed
[\??fl#1]
@@ -234,7 +236,7 @@
{\edef\currentfloat{#1}%
\doifelsenothing\currentfloat
{\let\currentfloat\v!figure}
- {\doifundefined{\??fl#1\c!default}{\let\currentfloat\v!figure}}%
+ {}% {\doifundefined{\??fl#1\c!default}{\let\currentfloat\v!figure}}%
\doifelsenothing{#2}
{\edef\floatlocation{\floatparameter\c!default}}
{\edef\floatlocation{#2}}%
@@ -321,7 +323,7 @@
\global\chardef\textfloatmethod\floatparameter\c!textmethod
\global\chardef\sidefloatalign\zerocount
\globallet\floatrotation\!!zerocount
- \calculatefloatskips{#1}%
+ \calculatefloatskips
\ifparfloat
\processaction
[\floatparameter\c!sidealign]
@@ -364,6 +366,8 @@
{\ConvertToConstant\doifelse{#4}\v!none
{\global\nofloatcaptiontrue}
{\global\nofloatcaptionfalse}}%
+ \doif{\floatcaptionparameter\c!number}\v!none % new
+ {\global\nofloatcaptiontrue}%
\ifemptyfloatcaption \ifnofloatnumber
\global\nofloatcaptiontrue
\fi \fi}
@@ -511,41 +515,41 @@
% pas op, maxbreedte niet instellen als plaats=links/rechts
-\def\setlocalfloatdimensions#1#2#3#4% experimental / #3 box number #4 prefix
+\def\setlocalfloatdimensions#1%
{\global\sidefloatshift \zeropoint % duplicate
\global\sidefloatmaximum\zeropoint\relax % duplicate
\ifextrafloatactions
\ifdim\sidefloatdownshift=\zeropoint\else
- #4\setbox#3\vbox
- {\vskip\sidefloatdownshift\nointerlineskip\box#3}%
+ \global\setbox\floatbox\vbox
+ {\vskip\sidefloatdownshift\nointerlineskip\box\floatbox}%
\fi
\doifsomething{\floatparameter\c!minwidth}
{\scratchdimen\floatparameter\c!minwidth\relax
- \ifdim\wd#3<\scratchdimen
- #4\setbox#3\hbox to \scratchdimen
+ \ifdim\wd\floatbox<\scratchdimen
+ \global\setbox\floatbox\hbox to \scratchdimen
{\doifnot{\floatparameter\c!location}\v!left \hss
- \box#3%
+ \box\floatbox%
\doifnot{\floatparameter\c!location}\v!right\hss}%
\fi}%
% todo: rand / rug
- \doifinset\v!hanging{#2}
- {\doifcommonelse{\v!inleft,\v!leftmargin}{#2}
+ \doifinset\v!hanging{#1}
+ {\doifcommonelse{\v!inleft,\v!leftmargin}{#1}
{\letvalue{\??fl\currentfloat\c!maxwidth}\leftmarginwidth}%
- {\doifcommon{\v!inright,\v!rightmargin}{#2}
+ {\doifcommon{\v!inright,\v!rightmargin}{#1}
{\letvalue{\??fl\currentfloat\c!maxwidth}\rightmarginwidth}}}%
\doifsomething{\floatparameter\c!maxwidth}
{\scratchdimen\floatparameter\c!maxwidth\relax
- \ifdim\wd#3>\scratchdimen
+ \ifdim\wd\floatbox>\scratchdimen
\doifcommonelse{\v!inright,\v!rightmargin,\v!rightedge
- \v!inleft,\v!leftmargin,\v!leftedge}{#2}
+ \v!inleft,\v!leftmargin,\v!leftedge}{#1}
{\global\sidefloatmaximum\scratchdimen}
- {#4\setbox#3\hbox to \scratchdimen
- {\doifcommonelse{\v!right,\v!left}{#2}
- {\doifnotinset\v!right{#2}\hss
- \box#3%
- \doifnotinset\v!left{#2}\hss}%
+ {\global\setbox\floatbox\hbox to \scratchdimen
+ {\doifcommonelse{\v!right,\v!left}{#1}
+ {\doifnotinset\v!right{#1}\hss
+ \box\floatbox
+ \doifnotinset\v!left{#1}\hss}%
{\doifnot{\floatparameter\c!location}\v!left\hss
- \box#3%
+ \box\floatbox
\doifnot{\floatparameter\c!location}\v!right\hss}}}%
\fi}%
\fi}
@@ -576,25 +580,29 @@
% todo: \floatparameter + \currentfloat - saves many hash entries
-\def\dododefinefloat[#1][#2]%
+\def\dododefinefloat[#1][#2]% inherits from kj and not from parent
{\def\currentfloat{#1}%
\presetlocalframed[\??fl#1]%
\setupfloat
[#1]
[%\c!width=8\lineheight, % 15\bodyfontsize,
%\c!height=6\lineheight, % 10\bodyfontsize,
-\c!offset=\v!overlay,
-\c!width=\v!fit,
-\c!height=\v!fit,
+ \c!offset=\v!overlay,
+ \c!width=\v!fit,
+ \c!height=\v!fit,
\c!minwidth=,
\c!maxwidth=,
\c!maxheight=,
\c!criterium=,
-% inherited
+ % inherited
\c!sidespacebefore=\@@bksidespacebefore,
\c!sidespaceafter=\@@bksidespaceafter,
\c!sidealign=\@@bksidealign, % \v!line
\c!margin=\@@bkmargin,
+ \c!leftmargin=\@@bkleftmargin,
+ \c!rightmargin=\@@bkrightmargin,
+ \c!innermargin=\@@bkinnermargin,
+ \c!outermargin=\@@bkoutermargin,
\c!leftmargindistance=\@@bkleftmargindistance,
\c!rightmargindistance=\@@bkrightmargindistance,
\c!frame=\@@bkframe,
@@ -613,6 +621,7 @@
%\c!local=\@@bklocal,
\c!textmethod=\@@bktextmethod,
\c!sidemethod=\@@bksidemethod,
+ \c!method=\@@bkmethod,
\c!pageboundaries=,
\c!default=]%
\setupcaption
@@ -628,9 +637,9 @@
%\c!before=\@@kjbefore,
\c!inbetween=\@@kjinbetween,
%\c!after=\@@kjafter,
-\c!spacebefore=\@@kjspacebefore,
-\c!spaceinbetween=\@@kjspaceinbetween,
-\c!spaceafter=\@@kjspaceafter,
+ \c!spacebefore=\@@kjspacebefore,
+ \c!spaceinbetween=\@@kjspaceinbetween,
+ \c!spaceafter=\@@kjspaceafter,
\c!width=\@@kjwidth,
\c!minwidth=\@@kjminwidth,
\c!align=\@@kjalign,
@@ -643,16 +652,17 @@
\c!stopper=\@@kjstopper,
\c!suffix=\@@kjsuffix, % hook
\c!command=\@@kjcommand,
- \c!conversion=\@@kjconversion
+ \c!conversion=\@@kjconversion,
+ \c!leftmargin=\@@kjleftmargin,
+ \c!rightmargin=\@@kjrightmargin,
+ \c!outermargin=\@@kjoutermargin,
+ \c!innermargin=\@@kjinnermargin,
+ \c!setups=\@@kjsetups,
]%
\definenumber % \definelabel
[#1]
[\c!text=#1,
\c!location=\v!intext,
-% \c!way=\getvalue{\??kj#1\c!way},
-% \c!blockway=\getvalue{\??kj#1\c!blockway},
-% \c!sectionnumber=\getvalue{\??kj#1\c!sectionnumber},
-% \c!conversion=\getvalue{\??kj#1\c!conversion}]%
\c!way=\floatcaptionparameter\c!way,
\c!blockway=\floatcaptionparameter\c!blockway,
\c!sectionnumber=\floatcaptionparameter\c!sectionnumber,
@@ -677,31 +687,31 @@
% \setupfloat[...][leftmargindistance=1cm,default={left,none}]
-\def\redodefinefloat[#1][#2][#3]% same label/number
- {\presetlocalframed[\??fl#1]%
- \copylocalframed[\??fl#1][\??fl#3]%
- \copyparameters[\??fl#1][\??fl#3]
- [\c!width,\c!height,%\c!local,
- \c!maxwidth,\c!maxheight,\c!minwidth,
- \c!margin,\c!sidespacebefore,\c!sidespaceafter,\c!sidealign,
- \c!leftmargindistance,\c!rightmargindistance,\c!criterium,
- \c!frame,\c!radius,\c!corner,\c!location,\c!background,\c!framecolor,
- \c!backgroundscreen,\c!backgroundcolor,\c!backgroundoffset,
- \c!topframe,\c!bottomframe,\c!leftframe,\c!rightframe,
- \c!frameoffset,\c!pageboundaries,\c!default,
- \c!textmethod,\c!sidemethod]%
- \copyparameters[\??kj#1][\??kj#3]
- [\c!location,\c!before,\c!inbetween,\c!after,
- \c!spacebefore,\c!spaceinbetween,\c!spaceafter,
- \c!width,\c!headstyle,\c!headcolor,\c!style,\c!color,
- \c!textstyle,\c!textcolor,\c!minwidth,
- \c!align,\c!number,\c!way,\c!blockway,
- \c!sectionnumber,\c!separator,\c!stopper,\c!suffix,\c!distance,\c!conversion]%
- \definenumber[#1][#3]%
- \presetlabeltext[#1=\labeltext{#3}]%
- \dodefinefloatcommands[#1][#2]}
-
-% todo: ook in localframed een parent chain, then we can inherit without defs
+% \def\redodefinefloat[#1][#2][#3]% same label/number
+% {\presetlocalframed[\??fl#1]%
+% \copylocalframed[\??fl#1][\??fl#3]%
+% \copyparameters[\??fl#1][\??fl#3]
+% [\c!width,\c!height,%\c!local,
+% \c!maxwidth,\c!maxheight,\c!minwidth,
+% \c!margin,\c!sidespacebefore,\c!sidespaceafter,\c!sidealign,
+% \c!leftmargindistance,\c!rightmargindistance,\c!criterium,
+% \c!leftmargin,\c!rightmargin,\c!innermargin,\c!outermargin,
+% \c!frame,\c!radius,\c!corner,\c!location,\c!background,\c!framecolor,
+% \c!backgroundscreen,\c!backgroundcolor,\c!backgroundoffset,
+% \c!topframe,\c!bottomframe,\c!leftframe,\c!rightframe,
+% \c!frameoffset,\c!pageboundaries,\c!default,
+% \c!textmethod,\c!sidemethod,\c!method]%
+% \copyparameters[\??kj#1][\??kj#3]
+% [\c!location,\c!before,\c!inbetween,\c!after,
+% \c!spacebefore,\c!spaceinbetween,\c!spaceafter,
+% \c!width,\c!headstyle,\c!headcolor,\c!style,\c!color,
+% \c!textstyle,\c!textcolor,\c!minwidth,
+% \c!align,\c!number,\c!way,\c!blockway,\c!setups,
+% \c!leftmargin,\c!rightmargin,\c!innermargin,\c!outermargin,
+% \c!sectionnumber,\c!separator,\c!stopper,\c!suffix,\c!distance,\c!conversion]%
+% \definenumber[#1][#3]%
+% \presetlabeltext[#1=\labeltext{#3}]%
+% \dodefinefloatcommands[#1][#2]}
\def\redodefinefloat[#1][#2][#3]% same label/number
{\presetlocalframed[\??fl#1]%
@@ -711,23 +721,24 @@
\c!maxwidth,\c!maxheight,\c!minwidth,
\c!margin,\c!sidespacebefore,\c!sidespaceafter,\c!sidealign,
\c!leftmargindistance,\c!rightmargindistance,\c!criterium,
+ \c!leftmargin,\c!rightmargin,\c!innermargin,\c!outermargin,
\c!frame,\c!radius,\c!corner,\c!location,\c!background,\c!framecolor,
\c!backgroundscreen,\c!backgroundcolor,\c!backgroundoffset,
\c!topframe,\c!bottomframe,\c!leftframe,\c!rightframe,
\c!frameoffset,\c!pageboundaries,\c!default,
- \c!textmethod,\c!sidemethod]%
+ \c!textmethod,\c!sidemethod,\c!method]%
\copyparameters[\??kj#1][\??kj#3]
[\c!location,\c!before,\c!inbetween,\c!after,
\c!spacebefore,\c!spaceinbetween,\c!spaceafter,
\c!width,\c!headstyle,\c!headcolor,\c!style,\c!color,
\c!textstyle,\c!textcolor,\c!minwidth,
- \c!align,\c!number,\c!way,\c!blockway,
+ \c!leftmargin,\c!rightmargin,\c!innermargin,\c!outermargin,
+ \c!align,\c!number,\c!way,\c!blockway,\c!setups,
\c!sectionnumber,\c!separator,\c!stopper,\c!suffix,\c!distance,\c!conversion]%
\definenumber[#1][#3]%
\presetlabeltext[#1=\labeltext{#3}]%
\dodefinefloatcommands[#1][#2]}
-
\def\placefloat
{\dotripleempty\docomplexplacefloat}
@@ -852,6 +863,7 @@
\def\dofloatinfomessage#1#2#3%
{\bgroup
\showmessage\m!floatblocks{#2}{#3}%
+ \setmessagetext\m!floatblocks{#2}%
\@EA\floatinfo\@EA#1\@EA{\currentmessagetext}%
\egroup}
@@ -868,35 +880,6 @@
\def\doinsertfloatinfo
{\dofloatinfomessage<4{\the\totalnoffloats}}
-% \def\dogetfloat
-% {\ifsomefloatwaiting
-% \global\setbox\floatlist\vbox
-% {\unvbox\floatlist
-% \global\setbox\globalscratchbox\lastbox}%
-% \ifcenterfloatbox
-% \ifdim\wd\globalscratchbox<\hsize
-% \setbox\floatbox\hbox to \hsize{\hss\box\globalscratchbox\hss}%
-% \else
-% \setbox\floatbox\box\globalscratchbox % local !
-% % retain special alignments
-% \ifinsidecolumns
-% \ifdim\wd\floatbox>\makeupwidth
-% \wd\floatbox\makeupwidth
-% \fi
-% \fi
-% \fi
-% \else
-% \setbox\floatbox\box\globalscratchbox % local !
-% \fi
-% \global\advance\savednoffloats \minusone
-% \ifcase\savednoffloats
-% \global\somefloatwaitingfalse
-% \fi
-% \else
-% \global\savednoffloats\zerocount
-% \global\setbox\floatbox\box\voidb@x
-% \fi}
-
\def\dogetfloat
{\ifsomefloatwaiting
\global\setbox\floatlist\vbox
@@ -1234,7 +1217,7 @@
% voor het plaatsen van tabellen en figuren (klopt niet
% meer).
%
-% \dofloat {plaats} {label1} {label2} {kader}
+% \dofloat {plaats} {label1} {label2}
%
% \docompletefloat {nummer} {referentie} {lijst}
% {plaats} {label1} {label2} {inhoud}
@@ -1271,17 +1254,17 @@
{\setbox0\vbox{\whitespace\expanded{\blank[#2]}}%
\global#1\ht0}}}
-\def\calculatefloatskips#1% todo floatparam
- {{\docalculatefloatskip\floattopskip \@@bkspacebefore
- \docalculatefloatskip\floatbottomskip \@@bkspaceafter
- \docalculatefloatskip\sidefloattopskip {\getvalue{\??fl#1\c!sidespacebefore}}% \@@bksidespacebefore
- \docalculatefloatskip\sidefloatbottomskip{\getvalue{\??fl#1\c!sidespaceafter}}% \@@bksidespaceafter
- \gdef\sidefloattopoffset{\openstrutdepth}% was \def
- \global\floatsideskip \getvalue{\??fl#1\c!margin}%
- \global\sidefloatleftshift \getvalue{\??fl#1\c!leftmargindistance}%
- \global\sidefloatrightshift\getvalue{\??fl#1\c!rightmargindistance}%
- \global\noftopfloats\@@bkntop \relax
- \global\nofbotfloats\@@bknbottom\relax}}
+\def\calculatefloatskips
+ {{\docalculatefloatskip\floattopskip \@@bkspacebefore
+ \docalculatefloatskip\floatbottomskip \@@bkspaceafter
+ \docalculatefloatskip\sidefloattopskip {\floatparameter\c!sidespacebefore}%
+ \docalculatefloatskip\sidefloatbottomskip{\floatparameter\c!sidespaceafter }%
+ \gdef \sidefloattopoffset{\openstrutdepth}% was \def
+ \global\floatsideskip \floatparameter\c!margin
+ \global\sidefloatleftshift \floatparameter\c!leftmargindistance
+ \global\sidefloatrightshift\floatparameter\c!rightmargindistance
+ \global\noftopfloats \@@bkntop \relax
+ \global\nofbotfloats \@@bknbottom\relax}}
\let\floatcaptionsuffix\empty % an optional suffix
\let\floatcaptionnumber\empty % a logical counter
@@ -1316,9 +1299,11 @@
% indirect macro can be more efficient
\setgvalue{@fl@r@#1}%
{\tracefloatnumber{#1}%
+\ifconditional\retainfloatnumber\else
\dowritetolist{#1}{\getvalue{@fl@n@#1}}{#3}{#1}%
- \doglobal\convertargument#3\to\flasciititle % \asciititle is global
+ \gdefconvertedargument\flasciititle{#3}% \asciititle is global
\doifsomething{#2}{\rawreference\s!flt{#2}{{\getvalue{@fl@n@#1}}{\flasciititle}}}%
+\fi
\letgvalue{@fl@r@#1}\relax}% nils
\setgvalue{@fl@t@#1}%
{\preparefullnumber{\??kj#1}{\getvalue{@fl@n@#1}}\preparednumber
@@ -1339,20 +1324,20 @@
\let\placefloatlabeltext \placefloatcaptiontext
\let\placefloatlabelreference \placefloatcaptionreference
-\def\borderedfloatbox#1%
- {\localframed[\??fl#1][\c!location=\v!normal]{\box\floatbox}}
+\def\borderedfloatbox
+ {\localframed[\??fl\currentfloat][\c!location=\v!normal]{\box\floatbox}}
\newbox\captionbox
-\def\putcompletecaption#1#2#3%
+\def\putcompletecaption#1#2%
{\doifsomething{\floatcaptionparameter\c!spacebefore}{\blank[\floatcaptionparameter\c!spacebefore]}%
% \floatcaptionparameter\c!before % test for side effects first
\noindent
- \xdef\lastcaptiontag{\strut#2}%
- \dostartattributes{\??kj#1}\c!style\c!color\empty
+ \xdef\lastcaptiontag{\strut#1}%
+ \dostartattributes{\??kj\currentfloat}\c!style\c!color\empty
\ifnofloatnumber
\else
- \hbox{\doattributes{\??kj#1}\c!headstyle\c!headcolor{\strut#2}}%
+ \hbox{\doattributes{\??kj\currentfloat}\c!headstyle\c!headcolor{\strut#1}}%
\ifnofloatcaption \else \ifemptyfloatcaption \else
\doifelsenothing{\floatcaptionparameter\c!spaceinbetween}
{\scratchskip\floatcaptionparameter\c!distance\relax
@@ -1364,10 +1349,10 @@
\globallet\lastcaptionht\!!zeropoint
\globallet\lastcaptiondp\!!zeropoint
\else
- \doattributes{\??kj#1}\c!textstyle\c!textcolor
+ \doattributes{\??kj\currentfloat}\c!textstyle\c!textcolor
{\xdef\lastcaptionht{\strutheight}%
\xdef\lastcaptiondp{\strutdepth}%
- \begstrut#3\endstrut\endgraf}%
+ \begstrut#2\endstrut\endgraf}%
\fi
\dostopattributes
% \floatcaptionparameter\c!after % test for side effects first
@@ -1390,10 +1375,42 @@
%\stelblokkopjesin[\c!align=\v!left]
%\stelblokkopjesin[\c!align=\v!right]
-\def\docheckcaptioncontent#1#2#3#4%
+
+% \definefloat [figure-1] [figure]
+% \definefloat [figure-2] [figure]
+% \setupfloat [figure-1] [location=left,leftmargin=10mm]
+% \setupfloat [figure-2] [location=left,leftmargin=-5mm]
+% \setupcaption [figure-1] [align=flushleft]
+% \setupcaption [figure-2] [align=flushleft,leftmargin=15mm]
+%
+% \startsetups somefigure
+% \ifdim\wd\nextbox>\textwidth
+% \placefloat[figure-2][][]{}{\box\nextbox}
+% \else
+% \placefloat[figure-1][][]{}{\box\nextbox}
+% \fi
+% \stopsetups
+%
+% \def\setupswithbox[#1]{\dowithnextbox{\setups[#1]}\vbox}
+%
+% test \setupswithbox[somefigure]{\framed[width=3cm] {}} test
+% test \setupswithbox[somefigure]{\framed[width=\dimexpr\textwidth+3cm\relax]{}} test
+
+\def\dosetcaptionthings
+ {\setups[\floatcaptionparameter\c!setups]% expanded ?
+% \advance\leftskip \floatcaptionparameter\c!leftmargin
+% \advance\rightskip\floatcaptionparameter\c!rightmargin
+ \relax}
+
+\def\dofakecaptionthings
+ {\hbox{\dosetcaptionthings\hskip\leftskip\hskip\rightskip}}
+
+\def\docheckcaptioncontent#1#2%
{\ifnofloatcaption \else
\setbox\tempcaptionbox\hbox
- {\trialtypesettingtrue\notesenabledfalse\putcompletecaption{#4}{#2}{#3}}%
+ {\trialtypesettingtrue
+ \notesenabledfalse
+ \putcompletecaption{#1}{#2}}%
% new, \placefigure{\XMLflush{somecaption}}{} passes earlier empty check
% so here we misuse the scratch box; actually this means that the previous
% test can go away (some day, when i redo this module)
@@ -1402,6 +1419,8 @@
\ifnofloatnumber
\global\nofloatcaptiontrue
\fi
+ \else
+ \setbox\tempcaptionbox\hbox{\dosetcaptionthings\hskip\leftskip\box\tempcaptionbox}% yet incomplete
\fi
\fi}
@@ -1409,56 +1428,21 @@
\ifx\moveboxontogrid\undefined \let\movecaptionontogrid\gobblethreearguments \fi
-% \def\dosetpagfloat#1#2#3#4% \copy wegwerken
-% {\bgroup
-% \setlocalfloathsize
-% \ifnum\floatrotation>0
-% \swapdimens\hsize\vsize
-% \fi
-% \forgetall
-% \postponenotes
-% \dontcomplain
-% \setbox\tempfloatbox\vbox{\borderedfloatbox{#4}}%
-% \def\locatefloat
-% {\chardef\alignstrutmode\zerocount
-% \alignedline{\floatparameter\c!location}\v!middle}%
-% \docheckcaptioncontent{#1}{#2}{#3}{#4}%
-% \ifnofloatcaption
-% \dopreparenocaption{#1}{#2}{#3}{#4}%
-% \edef\width{\the\wd\floatbox}%
-% \doglobal\addlocalbackgroundtobox\floatbox
-% \else
-% % todo: installable maken, variant/method=auto vs macro
-% \doifinsetelse{\floatcaptionparameter\c!location}{\v!high,\v!middle,\v!low}
-% {\dopreparesidecaption{#1}{#2}{#3}{#4}}
-% {\doifelse{\floatcaptionparameter\c!minwidth}\v!fit
-% {\doifelse{\floatcaptionparameter\c!width}\v!max
-% {\dopreparestackcaptionmax{#1}{#2}{#3}{#4}}
-% {\ifdim\wd\tempcaptionbox>\wd\tempfloatbox % wider caption
-% \doifelse{\floatcaptionparameter\c!width}\v!fit
-% {\dopreparestackcaptionaut{#1}{#2}{#3}{#4}}
-% {\dopreparestackcaptionwid{#1}{#2}{#3}{#4}}%
-% \else
-% \dopreparestackcaptionmin{#1}{#2}{#3}{#4}%
-% \fi}}
-% {\dopreparestackcaptionfix{#1}{#2}{#3}{#4}}}% new, special effects (see icare)
-% \edef\width{\the\wd\tempfloatbox}%
-% \addlocalbackgroundtobox\tempfloatbox
-% \setbox\tempcaptionbox\hbox{\floatcaptionparameter\c!command{\box\tempcaptionbox}}%
-% \moveboxontogrid\tempcaptionbox{\floatcaptionparameter\c!grid}\lastcaptionht
-% \addlocalbackgroundtobox\tempcaptionbox
-% \buildfloatbox
-% \fi
-% \ifnum\floatrotation>0
-% \global\setbox\floatbox\vbox
-% {\rotate[\c!rotation=\floatrotation]{\box\floatbox}}%
-% \edef\width{\the\wd\tempfloatbox}%
-% \else
-% \postcenterfloatbox\width
-% \fi
-% \egroup}
-
-\def\dosetpagfloat#1#2#3#4% \copy wegwerken
+\def\locatefloatbox
+ {\chardef\alignstrutmode\zerocount
+ \shiftalignedline
+ {\floatparameter\c!leftmargin }{\floatparameter\c!rightmargin}%
+ {\floatparameter\c!innermargin}{\floatparameter\c!outermargin}%
+ \alignedline{\floatparameter\c!location}\v!middle}
+
+\def\locatecaptionbox
+ {\chardef\alignstrutmode\zerocount
+ \shiftalignedline
+ {\floatcaptionparameter\c!leftmargin }{\floatcaptionparameter\c!rightmargin}%
+ {\floatcaptionparameter\c!innermargin}{\floatcaptionparameter\c!outermargin}%
+ \alignedline{\floatparameter\c!location}\v!middle}
+
+\def\dosetpagfloat#1#2#3% \copy wegwerken
{\bgroup
\setlocalfloathsize
\ifnum\floatrotation>0
@@ -1467,25 +1451,31 @@
\forgetall
\postponenotes
\dontcomplain
- \setbox\tempfloatbox\vbox{\borderedfloatbox{#4}}%
- \def\locatefloat
- {\chardef\alignstrutmode\zerocount
- \alignedline{\floatparameter\c!location}\v!middle}%
- \docheckcaptioncontent{#1}{#2}{#3}{#4}%
- \ifnofloatcaption
- \dopreparenocaption{#1}{#2}{#3}{#4}%
- \edef\width{\the\wd\floatbox}%
- \doglobal\addlocalbackgroundtobox\floatbox
- \else
- % todo: installable maken, variant/method=auto vs macro
- \dopreparedocaption{#1}{#2}{#3}{#4}%
- \settracedcaptionbox
- \edef\width{\the\wd\tempfloatbox}%
- \addlocalbackgroundtobox\tempfloatbox
- \setbox\tempcaptionbox\hbox{\floatcaptionparameter\c!command{\box\tempcaptionbox}}%
- \moveboxontogrid\tempcaptionbox{\floatcaptionparameter\c!grid}\lastcaptionht
- \addlocalbackgroundtobox\tempcaptionbox
- \buildfloatbox
+ \setbox\tempfloatbox\vbox{\borderedfloatbox}%
+ \let\locatefloat \locatefloatbox
+ \let\locatecaption\locatecaptionbox
+ \docheckcaptioncontent{#2}{#3}%
+ \ifcase\floatparameter\c!method
+ \or % automatic
+ \ifnofloatcaption
+ \dopreparenocaption{#1}{#2}{#3}%
+ \edef\width{\the\wd\floatbox}%
+ \doglobal\addlocalbackgroundtobox\floatbox
+ \else
+ % todo: installable maken, variant/method=auto vs macro
+ \dopreparedocaption{#1}{#2}{#3}%
+ \settracedcaptionbox
+ \edef\width{\the\wd\tempfloatbox}%
+ \addlocalbackgroundtobox\tempfloatbox
+ \setbox\tempcaptionbox\hbox
+ {\dosetcaptionthings
+ \floatcaptionparameter\c!command{\box\tempcaptionbox}}%
+ \moveboxontogrid\tempcaptionbox{\floatcaptionparameter\c!grid}\lastcaptionht
+ \addlocalbackgroundtobox\tempcaptionbox
+ \buildfloatbox
+ \fi
+ \or % semi automatic
+ \or % manual
\fi
\ifnum\floatrotation>0
\global\setbox\floatbox\vbox
@@ -1499,31 +1489,31 @@
\def\captionminwidth {15\bodyfontsize}
\def\captionovershoot {2em}
-\def\dopreparenocaption#1#2#3#4%
+\def\dopreparenocaption#1#2#3%
{\global\setbox\floatbox\vbox % pas op als wd groter dan hsize
{\ifinsidecolumns\ifdim\wd\tempfloatbox>\hsize
\let\locatefloat\relax
\fi\fi
\locatefloat{\copy\tempfloatbox}}}
-\def\dopreparedocaption#1#2#3#4%
+\def\dopreparedocaption#1#2#3%
{\doifinsetelse{\floatcaptionparameter\c!location}{\v!top,\v!bottom}
{\doifinsetelse{\floatcaptionparameter\c!width}{\v!fit,\v!max}
{\doifelse{\floatcaptionparameter\c!minwidth}\v!fit
{\doifelse{\floatcaptionparameter\c!width}\v!max
- {\dopreparestackcaptionmax{#1}{#2}{#3}{#4}}
+ {\dopreparestackcaptionmax{#1}{#2}{#3}}
{\ifdim\wd\tempcaptionbox>\wd\tempfloatbox % wider caption
\doifelse{\floatcaptionparameter\c!width}\v!fit
- {\dopreparestackcaptionaut{#1}{#2}{#3}{#4}}
- {\dopreparestackcaptionwid{#1}{#2}{#3}{#4}}%
+ {\dopreparestackcaptionaut{#1}{#2}{#3}}
+ {\dopreparestackcaptionwid{#1}{#2}{#3}}%
\else
- \dopreparestackcaptionmin{#1}{#2}{#3}{#4}%
+ \dopreparestackcaptionmin{#1}{#2}{#3}%
\fi}}
- {\dopreparestackcaptionfix{#1}{#2}{#3}{#4}}}%
- {\dopreparesidewidthcaption{#1}{#2}{#3}{#4}}}% new, special effects (see icare)
+ {\dopreparestackcaptionfix{#1}{#2}{#3}}}%
+ {\dopreparesidewidthcaption{#1}{#2}{#3}}}% new, special effects (see icare)
{\doifinsetelse{\floatcaptionparameter\c!width}{\v!fit,\v!max}
- {\dopreparesideautocaption{#1}{#2}{#3}{#4}}
- {\dopreparesidewidthcaption{#1}{#2}{#3}{#4}}}}
+ {\dopreparesideautocaption{#1}{#2}{#3}}
+ {\dopreparesidewidthcaption{#1}{#2}{#3}}}}
% \def\dosettempcaptionbox
% {\dosetraggedvbox{\floatcaptionparameter\c!align}%
@@ -1531,10 +1521,12 @@
\def\dosettempcaptionbox
{\setbox\tempcaptionbox\vbox\bgroup
- \expanded{\setupalign[\v!new,\v!reset,\floatcaptionparameter\c!align,\v!old]}%
- \let\next}
+ %expanded{\setupalign[\v!new,\v!reset,\floatcaptionparameter\c!align,\v!old]}% wrong! see icare
+ \expanded{\setupalign[\v!reset,\floatcaptionparameter\c!align]}% i need to check what reset does
+ \dosetcaptionthings
+ \let\next}
-\def\dopreparesideautocaption#1#2#3#4%
+\def\dopreparesideautocaption#1#2#3%
{\scratchdimen\dimexpr\hsize-\wd\tempfloatbox-\@@bkmargin\relax % was \tfskipsize\relax
\ifdim\wd\tempcaptionbox>\scratchdimen
\ifdim\wd\tempcaptionbox<1.3\scratchdimen
@@ -1543,35 +1535,35 @@
\fi
\dosettempcaptionbox
{\hsize\scratchdimen
- \putcompletecaption{#4}{#2}{#3}}}
+ \putcompletecaption{#2}{#3}}}
-\def\dopreparesidewidthcaption#1#2#3#4%
+\def\dopreparesidewidthcaption#1#2#3%
{\dosettempcaptionbox
{\hsize\floatcaptionparameter\c!width
- \putcompletecaption{#4}{#2}{#3}}}
+ \putcompletecaption{#2}{#3}}}
-\def\dopreparestackcaptionfix#1#2#3#4%
+\def\dopreparestackcaptionfix#1#2#3%
{\dosettempcaptionbox
{\hsize\floatcaptionparameter\c!minwidth % special effects
- \putcompletecaption{#4}{#2}{#3}}}
+ \putcompletecaption{#2}{#3}}}
-\def\dopreparestackcaptionmax#1#2#3#4%
+\def\dopreparestackcaptionmax#1#2#3%
{\dosettempcaptionbox
{\hsize\wd\tempfloatbox
- \putcompletecaption{#4}{#2}{#3}}}
+ \putcompletecaption{#2}{#3}}}
-\def\dopreparestackcaptionwid#1#2#3#4%
+\def\dopreparestackcaptionwid#1#2#3%
{\dosettempcaptionbox
{\hsize\floatcaptionparameter\c!width
- \putcompletecaption{#4}{#2}{#3}}}
+ \putcompletecaption{#2}{#3}}}
-\def\dopreparestackcaptionmin#1#2#3#4%
+\def\dopreparestackcaptionmin#1#2#3%
{\dosettempcaptionbox
{\hsize\wd\tempfloatbox
\doifnothing{\floatcaptionparameter\c!align}\raggedcenter % on purpose overloads align !
- \putcompletecaption{#4}{#2}{#3}}}
+ \putcompletecaption{#2}{#3}}}
-\def\dopreparestackcaptionaut#1#2#3#4%
+\def\dopreparestackcaptionaut#1#2#3%
{\doifsomething{\floatcaptionparameter\c!align}
{\doifnotinset{\v!middle}{\floatcaptionparameter\c!align}%
{\let\captionovershoot\!!zeropoint}}%
@@ -1582,7 +1574,7 @@
{\trialtypesettingtrue
\hsize\captionhsize
\notesenabledfalse
- \putcompletecaption{#4}{#2}{#3}}%
+ \putcompletecaption{#2}{#3}}%
\ifdim\ht\scratchbox>\lineheight % more lines
\dosettempcaptionbox
{\hsize\captionhsize
@@ -1590,11 +1582,11 @@
\ifdim\hsize<\captionminwidth\relax
\hsize\captionhsize
\fi
- \putcompletecaption{#4}{#2}{#3}}%
+ \putcompletecaption{#2}{#3}}%
\else
\dosettempcaptionbox
{\hsize\captionhsize
- \putcompletecaption{#4}{#2}{#3}}%
+ \putcompletecaption{#2}{#3}}%
\fi
\else
% float is smaller of equal to \hsize
@@ -1609,30 +1601,30 @@
\advance\scratchdimen 3em % an average word length
\ifdim\scratchdimen<\hsize \hsize\scratchdimen \fi
\notesenabledfalse
- \putcompletecaption{#4}{#2}{#3}}%
+ \putcompletecaption{#2}{#3}}%
\ifdim\ht\scratchbox>\lineheight
% at least an average word longer than a line
\dosettempcaptionbox
{\scratchdimen\captionhsize
\advance\scratchdimen \captionovershoot
\ifdim\scratchdimen<\hsize \hsize\scratchdimen \fi
- \putcompletecaption{#4}{#2}{#3}}%
+ \putcompletecaption{#2}{#3}}%
\else
% just over a line, don't use an overshoot % % % todo: outer/inner and such
\doifcommonelse{\floatcaptionparameter\c!align}{\v!left,\v!right,\v!flushleft,\v!flushright}
{\dosettempcaptionbox
{\hsize\captionhsize
% strange : \raggedcenter
- \putcompletecaption{#4}{#2}{#3}}}
+ \putcompletecaption{#2}{#3}}}
{% nicer
\dosettempcaptionbox
{\hsize\captionhsize
\doifnothing{\floatcaptionparameter\c!align}\raggedcenter% overloads
- \putcompletecaption{#4}{#2}{#3}}}%
+ \putcompletecaption{#2}{#3}}}%
\fi
\fi}
-\def\dopreparesidecaption#1#2#3#4%
+\def\dopreparesidecaption#1#2#3%
{\scratchdimen\dimexpr\hsize-\wd\tempfloatbox-\@@bkmargin\relax % was \tfskipsize\relax
\ifdim\wd\tempcaptionbox>\scratchdimen
\ifdim\wd\tempcaptionbox<1.3\scratchdimen
@@ -1642,7 +1634,7 @@
\dosettempcaptionbox % \setbox\tempcaptionbox\vbox
{\hsize\scratchdimen
\doifnothing{\floatcaptionparameter\c!align}\raggedright % on purpose overloads align !
- \putcompletecaption{#4}{#2}{#3}}}
+ \putcompletecaption{#2}{#3}}}
\newdimen\tempfloatheight
\newdimen\tempfloatwidth
@@ -1781,62 +1773,6 @@
\def\dofloatboxmiddlebuilder
{\dofloatboxnextbuilder{\vfill\box\tempcaptionbox\vfill}}
-% \def\dofloatboxnormalstackbuilder#1#2#3#4% hbox needed
-% {\tempfloatwidth\wd\tempfloatbox
-% \ifparfloat
-% \hbox{#3}\dofloatboxbetweenstack\hbox{#4}%
-% \else
-% \hbox{#1}\dofloatboxbetweenstack\hbox{#2}%
-% \fi}
-
-% \def\dofloatboxgridstackbuilder#1#2#3#4%
-% {\dp\tempcaptionbox\strutdepth
-% \setbox\scratchbox\vbox
-% {\tempfloatwidth\wd\tempfloatbox
-% \ifparfloat
-% #3\vss\dofloatboxbetweenstack#4%
-% \else
-% #1\vss\dofloatboxbetweenstack#2%
-% \fi}%
-% \getnoflines{\dimexpr\htdp\scratchbox-10\scaledpoint\relax}% get rid of inaccuracy
-% \vbox to \noflines\lineheight{\unvbox\scratchbox}}
-
-% \def\dofloatboxstretchstackbuilder#1#2#3#4%
-% {\dp\tempcaptionbox\strutdepth
-% \setbox\scratchbox\vbox
-% {\locatefloat{\copy#1}%
-% \locatefloat{\copy#2}}%
-% \getnoflines{\dimexpr\htdp\scratchbox-10\scaledpoint\relax}% get rid of inaccuracy
-% \vbox to \noflines\lineheight
-% {\tempfloatwidth\wd\tempfloatbox
-% \ifparfloat
-% #3\vss\dofloatboxbetweenstack\vss#4%
-% \else
-% #1\vss\dofloatboxbetweenstack\vss#2%
-% \fi}}
-
-% \def\dofloatboxtopbuilder
-% {\let\next\dofloatboxnormalstackbuilder
-% \expanded{\processallactionsinset[\floatcaptionparameter\c!location]}
-% [ \v!grid=>\let\next\dofloatboxgridstackbuilder,
-% \v!stretch=>\let\next\dofloatboxstretchstackbuilder]%
-% \next
-% {\locatetextfloat{\box\tempcaptionbox}}
-% {\locatefloat {\box\tempfloatbox }}
-% {\locatesidefloat{\box\tempcaptionbox}}
-% {\hbox {\box\tempfloatbox }}}
-
-% \def\dofloatboxbottombuilder
-% {\let\next\dofloatboxnormalstackbuilder
-% \expanded{\processallactionsinset[\floatcaptionparameter\c!location]}
-% [ \v!grid=>\let\next\dofloatboxgridstackbuilder,
-% \v!stretch=>\let\next\dofloatboxstretchstackbuilder]%
-% \next
-% {\locatefloat {\box\tempfloatbox }}
-% {\locatetextfloat{\box\tempcaptionbox}}
-% {\hbox {\box\tempfloatbox }}
-% {\locatesidefloat{\box\tempcaptionbox}}}
-
% \definefloat
% [lefty][lefties][figure]
% \setupfloat
@@ -1917,8 +1853,8 @@
\def\dofloatboxstretchtopstackbuilder
{\dp\tempcaptionbox\strutdepth
\setbox\scratchbox\vbox
- {\locatefloat{\copy\tempcaptionbox}%
- \locatefloat{\copy\tempfloatbox }}%
+ {\locatecaption{\copy\tempcaptionbox}%
+ \locatefloat {\copy\tempfloatbox }}%
\getnoflines{\dimexpr\htdp\scratchbox-10\scaledpoint\relax}% get rid of inaccuracy
\vbox to \noflines\lineheight
{\tempfloatwidth\wd\tempfloatbox
@@ -1935,8 +1871,8 @@
\def\dofloatboxstretchbotstackbuilder
{\dp\tempcaptionbox\strutdepth
\setbox\scratchbox\vbox
- {\locatefloat{\copy\tempfloatbox }%
- \locatefloat{\copy\tempcaptionbox}}%
+ {\locatefloat {\copy\tempfloatbox }%
+ \locatecaption{\copy\tempcaptionbox}}%
\getnoflines{\dimexpr\htdp\scratchbox-10\scaledpoint\relax}% get rid of inaccuracy
\vbox to \noflines\lineheight
{\tempfloatwidth\wd\tempfloatbox
@@ -1964,8 +1900,8 @@
\v!stretch=>\let\next\dofloatboxstretchstackbuilder]%
\next}
-\def\relocatecaptionright#1{\locatefloat{\hbox to \tempfloatwidth{\hss#1}}}
-\def\relocatecaptionleft #1{\locatefloat{\hbox to \tempfloatwidth{#1\hss}}}
+\def\relocatecaptionright#1{\locatecaption{\hbox to \tempfloatwidth{\hss#1}}}
+\def\relocatecaptionleft #1{\locatecaption{\hbox to \tempfloatwidth{#1\hss}}}
\long\def\installfloatboxbuilder#1#2{\setvalue{\??kj:#1}{#2}}
@@ -1980,7 +1916,7 @@
\executeifdefined{\??kj:\floatcaptionarrangement}{\getvalue{\??kj:\s!default}}}}
\def\locatetextfloat
- {\let\next\locatefloat
+ {\let\next\locatecaption
\expanded{\processallactionsinset[\floatcaptionparameter\c!location]}
[ \v!left=>\let\next\relocatecaptionleft,
\v!right=>\let\next\relocatecaptionright,
@@ -2041,19 +1977,19 @@
\box\floatbox
\ifdone\hskip\effectiverightskip\fi\hss}}
-\def\dosetparfloat#1#2#3#4%
+\def\dosetparfloat#1#2#3%
{\bgroup
\forgetall
\postponenotes
\dontcomplain
%\showcomposition
- \setbox\tempfloatbox\vbox{\borderedfloatbox{#4}}%
+ \setbox\tempfloatbox\vbox{\borderedfloatbox}%
\addlocalbackgroundtobox\tempfloatbox % no \doglobal
- \docheckcaptioncontent{#1}{#2}{#3}{#4}%
+ \docheckcaptioncontent{#2}{#3}%
\ifnofloatcaption
\global\setbox\floatbox\vbox{\box\tempfloatbox}%
\else
- \dopreparedosidecaption{#1}{#2}{#3}{#4}%
+ \dopreparedosidecaption{#1}{#2}{#3}%
\settracedcaptionbox
\setbox\tempcaptionbox\hbox{\floatcaptionparameter\c!command{\box\tempcaptionbox}}%
\moveboxontogrid\tempcaptionbox{\floatcaptionparameter\c!grid}\lastcaptionht
@@ -2062,24 +1998,29 @@
\fi
\egroup}
-\def\dopreparedosidecaption#1#2#3#4% will be enhanced
+\def\dopreparedosidecaption#1#2#3% will be enhanced
{\doifelse{\floatcaptionparameter\c!width}\v!max
{\dosettempcaptionbox
- {\hsize\wd\tempfloatbox\putcompletecaption{#4}{#2}{#3}}}%
+ {\hsize\wd\tempfloatbox
+ \putcompletecaption{#2}{#3}}}%
{\doifelse{\floatcaptionparameter\c!width}\v!fit
{\ifdim\wd\tempcaptionbox>\wd\tempfloatbox\relax
\setbox\tempcaptionbox\vbox
- {\forgetall\hsize\wd\tempfloatbox\putcompletecaption{#4}{#2}{#3}}%
+ {\forgetall % needed?
+ \hsize\wd\tempfloatbox
+ \dosetcaptionthings
+ \putcompletecaption{#2}{#3}}%
\else
\setbox\tempcaptionbox\hbox to \wd\tempfloatbox
{\hss\box\tempcaptionbox\hss}%
\fi}
{\dosettempcaptionbox
{\hsize\floatcaptionparameter\c!width % \wd\tempfloatbox
- \putcompletecaption{#4}{#2}{#3}}}}}
+ \putcompletecaption{#2}{#3}}}}}
\def\buildsidefloatbox
- {\let\locatefloat\relax
+ {\let\locatefloat \relax
+ \let\locatecaption\relax
\def\locatesidefloat##1%
{\begingroup
\chardef\alignstrutmode\zerocount
@@ -2090,16 +2031,12 @@
\newif\ifparfloat
-\long\def\dosetfloatbox#1#2#3#4% todo : \global\setbox
+\long\def\dosetfloatbox#1#2#3% todo : \global\setbox
{\ifvisible
\par
\edef\floatcaptiondirectives{\floatparameter\c!location,\floatcaptionparameter\c!location}%
- \ifparfloat
- \@EA\dosetparfloat % {#1}{#2}{#3}{#4}%
- \else
- \@EA\dosetpagfloat % {#1}{#2}{#3}{#4}%
- \fi{#1}{#2}{#3}{#4}%
- \setlocalfloatdimensions{#4}{#1}\floatbox\global % tzt arg 3/4 weg
+ \ifparfloat\@EA\dosetparfloat\else\@EA\dosetpagfloat\fi{#1}{#2}{#3}%
+ \setlocalfloatdimensions{#1}%
\setbox\floatbox\hbox
{\dosavefloatdata\restoretextcolor{\box\floatbox}}%
\global\floatheight\ht\floatbox
@@ -2126,8 +2063,8 @@
\newcounter\noxfloatlocations
-\long\def\dofloat#1#2#3#4%
- {\dosetfloatbox{#1}{#2}{#3}{#4}%
+\long\def\dofloat#1#2#3%
+ {\dosetfloatbox{#1}{#2}{#3}%
\dogetfloatbox{#1}\empty}
\let\naturalfloatheight\!!zeropoint
@@ -2139,6 +2076,10 @@
\xdef\naturalfloatwidth {\the\wd#1}%
\xdef\naturalfloatdepth {\the\dp#1}}
+\def\doifelsemainfloatbody#1#2%
+ {\ifinsidesplitfloat\ifconditional\splitfloatfirstdone#2\else#1\fi\else#1\fi}
+
+
\long\def\docompletefloat#1#2#3#4#5#6#7% #7 = box number
{%\flushsidefloats % moved
\presetfloatvariables{#1}{#4}{#2}{#6}%
@@ -2156,28 +2097,31 @@
\ifnofloatcaption
\global\setbox\floatbox\vbox
{\unvbox\floatbox
- \vss % gets rid of the depth (unless tabulate)
- \rawpagereference\s!flt{#2}}%
+ \doifelsemainfloatbody{\rawpagereference\s!flt{#2}}\donothing
+ \vss}% gets rid of the depth (unless tabulate)
\egroup
- \dofloat{#4}{}{#6}{#1}%
+ \dofloat{#4}{}{#6}%
\else
- \doglobal\convertargument#6\to\asciititle % \asciititle is global
+ \gdefconvertedargument\asciititle{#6}% \asciititle is global
\ifnofloatnumber
\global\setbox\floatbox\vbox
{\unvbox\floatbox % no \vss, keep the depth
- \rawreference\s!flt{#2}{{}{\asciititle}}}%
+ \doifelsemainfloatbody{\rawreference\s!flt{#2}{{}{\asciititle}}}\donothing}%
\egroup
- \dofloat{#4}{}{#6}{#1}%
+ \dofloat{#4}{}{#6}%
\else
\preparefloatnumber{#1}%
\global\setbox\floatbox\vbox
{\unvbox\floatbox % no \vss, keep the depth
- \tracefloatnumber{#1}%
- \rawreference\s!flt{#2}{{\composedsectionnumber}{\asciititle}}%
- \dowritetolist{#3}{\composedsectionnumber}{#6}{#3}}%
+ \doifelsemainfloatbody
+ {\tracefloatnumber{#1}%
+ \rawreference\s!flt{#2}{{\composedsectionnumber}{\asciititle}}%
+ \dowritetolist{#3}{\composedsectionnumber}{#6}{#3}}
+ \donothing
+ }%
\egroup
\preparefullnumber{\??kj#1}\composedsectionnumber\preparednumber
- \dofloat{#4}{\labeltexts{#5}{\preparednumber}}{#6}{#1}%
+ \dofloat{#4}{\labeltexts{#5}{\preparednumber}}{#6}%
\fi
\fi
\global\insidefloatfalse}
@@ -2355,10 +2299,16 @@
\unvbox\collectedpagefloats
\fi}
+% \def\flushrestfloats
+% {\doif\@@bkcache\v!no\doflushfloats}
+
+% \let\flushrestfloats\relax
+
\def\dopostponeblock
{\bgroup % new may 2004
\setsystemmode\v!postponing % new may 2004
\the\everytopofpage
+% \flushrestfloats
\flushpagefloats
\donefalse
\ifinpostponing \else
@@ -2368,18 +2318,17 @@
\ifdone
\bgroup % we need the color/font switch, else problems inside split verbatim
\setnormalcatcodes % postponing in verbatim
- \edef\savedtopofpagecolor{\topofpagecolor}%
- \doifsomething\savedtopofpagecolor\restorecolormode % \stopcolormode
+ \pushpostponedpagecolor
\restoreglobalbodyfont % The \nof-test is
\global\pagetotal\zeropoint % recently added and
\global\inpostponingtrue % definitely needed else
\the\postponedpageblocks % we can loose or disorder
\dorecurse\nofpostponedblocks % floats; anyhow, this
- {\getbuffer[pbuf-\recurselevel]} % mechanism is still
+ {\getbuffer[pbuf-\recurselevel]}% % mechanism is still
\doflushfloats % new but potential dangerous % suboptimal and needs a
\doglobal\newcounter\nofpostponedblocks % proper analysis
\global\inpostponingfalse
- \doifsomething\savedtopofpagecolor\startcolormode\savedtopofpagecolor
+ \poppostponedpagecolor
\egroup
\fi
\egroup} % new may 2004
@@ -2409,8 +2358,7 @@
\def\dodostartpostponing
{\doglobal\increment\nofpostponedblocks
\showmessage\m!layouts3\nofpostponedblocks
- \dostartbuffer[pbuf-\nofpostponedblocks]%
- [\e!start\v!postponing][\e!stop\v!postponing]}
+ \expanded{\dostartbuffer[pbuf-\nofpostponedblocks][\e!start\v!postponing][\e!stop\v!postponing]}}
\def\dooutput{\sidefloatoutput} % redefinition of \dooutput
@@ -2455,13 +2403,18 @@
\c!before=, % not used (yet)
\c!inbetween={\blank[\v!medium]},
\c!after=, % not used (yet)
-\c!spacebefore=,
-\c!spaceinbetween=, % replaces fuzzy inbetween dual usage
-\c!spaceafter=,
+ \c!spacebefore=,
+ \c!spaceinbetween=, % replaces fuzzy inbetween dual usage
+ \c!spaceafter=,
\c!width=\v!fit,
\c!minwidth=\v!fit, % id est: the width of the floatbox in some cases
\c!headstyle=\v!bold,
\c!headcolor=,
+ \c!leftmargin=\zeropoint,
+ \c!rightmargin=\zeropoint,
+ \c!outermargin=\zeropoint,
+ \c!innermargin=\zeropoint,
+ \c!setups=,
\c!style=\v!normal,
\c!color=,
\c!textstyle=,
@@ -2503,9 +2456,15 @@
\c!sidespaceafter=\@@bkspaceafter,
\c!sidealign=\v!normal,
\c!textmethod=\ifgridsnapping2\else0\fi, % 0=raw 1=safe (.99pg) 2=tight (-1pt)
- \c!sidemethod=\ifgridsnapping2\else1\fi, % 0=raw 1=safe (.99pg) 2=tight (-1pt)
+ \c!sidemethod=\ifgridsnapping2\else1\fi, % 0=raw 1=safe (.99pg) 2=tight (-1pt)
\c!indentnext=\v!no,
\c!margin=1em,
+ \c!method=1,
+ \c!cache=\v!yes, % when no, then intermediate flush
+ \c!leftmargin=\zeropoint, % displacement in 'normal floats'
+ \c!rightmargin=\zeropoint, % idem
+ \c!innermargin=\zeropoint, % idem
+ \c!outermargin=\zeropoint, % idem
\c!leftmargindistance=\zeropoint,
\c!rightmargindistance=\@@bkleftmargindistance,
\c!ntop=2,
diff --git a/Master/texmf-dist/tex/context/base/page-imp.tex b/Master/texmf-dist/tex/context/base/page-imp.tex
index bdb3a7b65db..4c8a334bf67 100644
--- a/Master/texmf-dist/tex/context/base/page-imp.tex
+++ b/Master/texmf-dist/tex/context/base/page-imp.tex
@@ -125,11 +125,21 @@
\newbox\postponedcontent
+% \def\flushatshipout
+% {\dowithnextbox
+% {\global\setbox\postponedcontent\hbox to \zeropoint
+% {%\hskip-\maxdimen % niet hier, gaat mis in acrobat (clipt)
+% \box\postponedcontent\flushnextbox}%
+% \global\ht\postponedcontent\zeropoint
+% \global\dp\postponedcontent\zeropoint
+% \global\wd\postponedcontent\zeropoint}%
+% \hbox}
+
\def\flushatshipout
{\dowithnextbox
{\global\setbox\postponedcontent\hbox to \zeropoint
{%\hskip-\maxdimen % niet hier, gaat mis in acrobat (clipt)
- \box\postponedcontent\flushnextbox}%
+ \unhbox\postponedcontent\unhbox\nextbox}%
\global\ht\postponedcontent\zeropoint
\global\dp\postponedcontent\zeropoint
\global\wd\postponedcontent\zeropoint}%
@@ -144,6 +154,8 @@
\let\pagestoshipout\empty % {1,3,6}
\chardef\whichpagetoshipout=0 % 0=all 1=odd 2=even
+\ifx\finalizeshipoutbox\undefined \let\finalizeshipoutbox\firstofoneargument \fi
+
\def\actualshipout#1%
{\global\advance\shippedoutpages\plusone
% this is not resource safe!
@@ -170,7 +182,7 @@
\vskip\scratchdimen
\hskip\scratchdimen
\hbox % \setbox0=\box.. is nicer
- {\setbox0\hbox{#1}% just in case there are objects there
+ {\setbox0\hbox{\finalizeshipoutbox{#1}}% just in case there are objects there, hook for testing
\setbox\scratchbox\hbox
{% before the main one !
\ifcase\realfolio \or
@@ -859,7 +871,7 @@
{\setuppageshift[\v!page][#1][#2]}%
\else\iffirstargument
\setuppageshift[\v!page][#1][#1]%
- \fi\fi}
+ \fi\fi\fi}
%D One can (mis)use this mechanism, in close cooperation
%D with \PDFTEX\ to arrange pages of already produced files.
diff --git a/Master/texmf-dist/tex/context/base/page-ini.tex b/Master/texmf-dist/tex/context/base/page-ini.tex
index 180b5ca4fda..b3cab9bdc71 100644
--- a/Master/texmf-dist/tex/context/base/page-ini.tex
+++ b/Master/texmf-dist/tex/context/base/page-ini.tex
@@ -92,7 +92,7 @@
\startmessages german library: systems
title: system
- 1: Laden der Hilfsdatei verschoben (tippenmodus)
+ 1: Laden der Hilfsdatei aufgeschoben (Eingabe-Modus)
2: -- geladen
% 3: Versuche LaTeX
4: Befehl -- ist bereits definiert
@@ -519,7 +519,7 @@
8: balanced in -- step(s)
9: check raggedness
10: (less than) 1 line left
- 11: float to wide for column
+ 11: float too wide for column
12: float moved to next column / --
13: wide float moved to top of columns
\stopmessages
@@ -632,6 +632,10 @@
\fi
+\ifx\mkprocesscolumncontents\undefined\let\mkprocesscolumncontents\gobbleoneargument\fi
+\ifx\mkprocesspagecontents \undefined\let\mkprocesspagecontents \gobbleoneargument\fi
+\ifx\mkprocessboxcontents \undefined\let\mkprocessboxcontents \gobbleoneargument\fi
+
\def\normalejectpenalty{-\@M} \let\ejectpenalty\normalejectpenalty
\def\normalsuperpenalty{-\@MM} \let\superpenalty\normalsuperpenalty
@@ -774,9 +778,18 @@
\outputmessage-{normal}\outputpenalty}
\mainoutput{\invokeoutputroutine} \output{\inotrtrue\the\mainoutput}
+
+%D Some hooks:
+
+\output{\inotrtrue\the\everybeforeoutput\the\mainoutput\the\everyafteroutput}
+\ifx\pagediscards\undefined \let\pagediscards\relax \fi
+
\installoutput\synchronizeoutput % maybe add pagediscards
- {\ifvoid\normalpagebox\else\unvbox\normalpagebox\fi}
+ {\ifvoid\normalpagebox\else
+ \unvbox\normalpagebox
+ \pagediscards % maybe not needed ?
+ \fi}
\installoutput\discardpage
{\setbox\scratchbox\box\normalpagebox}
@@ -1000,7 +1013,7 @@
\def\dofinaloutput#1#2% \vbox: prevents spurious spaces in every..pagebody
{\beforefinaloutput
- \the\everybeforeshipout
+ \the\everybeforeshipout % brrr not in shipout
\ifspecialbasedsettings
\myshipout{\hbox{\hbox to \zeropoint{\the\pageboundsettings}%
\hbox{\vbox{\dopagebody#1#2\setpagecounters}}}}%
@@ -1066,7 +1079,7 @@
\def\doplaceversiontext#1#2%
{\doifsomething{#2}
- {\@EA\convertargument#2\to\ascii
+ {\defconvertedcommand\ascii{#2}%
\space#1:\space\ascii\space
\!!doneatrue}}
@@ -1123,13 +1136,13 @@
\hsize\paperwidth
\hfill\hbox{\placetestinfo\hskip.5cm}\vss
\settexthoffset\hskip\texthoffset % brrrr
- %\tlap{\placeversioninfo}\vskip.5cm}}
+ %\tlap{\placeversioninfo}\vskip.5cm
\vbox to 1cm{\vss\placeversioninfo\vss}}}
\def\dotestinfo#1#2#3%
{\ifinpagebody\else\ifnum\conceptmode=\plusthree
\begingroup
- \@EA\convertargument#3\to\ascii
+ \defconvertedcommand\ascii{#3}%
\xdef\extratestinfo
{#2\space\ascii}%
\gdef\totaltestinfo
@@ -1455,11 +1468,12 @@
\chardef\testpagemethod \zerocount % todo: \testnewpage[method=,lines=,voffset=]
\chardef\testpagetrigger\zerocount
-\def\testpage {\dotripleempty\dotestpage[\plusone]} %
-\def\testpageonly{\dotripleempty\dotestpage[\plustwo]} % no penalties added to the mvl
+\def\testpage {\dotripleempty\dotestpage[\plusone ]} %
+\def\testpageonly{\dotripleempty\dotestpage[\plustwo ]} % no penalties added to the mvl
+\def\testpagesync{\dotripleempty\dotestpage[\plusthree]} % force sync
\def\dotestpage[#1][#2][#3]% don't change, only add more methods
- {%\relax % needed before \if
+ {\relax % needed before \if
\ifpaginageblokkeerd
\endgraf
\else
@@ -1508,13 +1522,25 @@
\fi
\fi
\else
- % force page break / new / does not work as expected
- % never: \penalty-\!!tenthousand\relax
+ \ifnum#1=\plusthree
+ \flushpagesofar
+ \fi
\fi
\else
\ifnum#1=\plusone\goodbreak\fi
\fi
\fi}
+
+\def\flushpagesofar
+ {\endgraf
+ \ifdim\pagetotal>\pagegoal
+ \ifdim\dimexpr\pagetotal-\pageshrink\relax>\pagegoal
+ \goodbreak % \penalty0
+ \else
+ \page
+ \fi
+ \else
+ \fi}
\def\testcolumn
{\dodoubleempty\dotestcolumn}
@@ -1823,6 +1849,7 @@
\def\noshipout
{\writestatus\m!systems{ignoring further shipouts}%
+ \global\advance\realpageno\minusone % else no flush of resources
\dowithnextbox{\deadcycles\zerocount}}
% \def\doignorerestoftext
diff --git a/Master/texmf-dist/tex/context/base/page-lin.lua b/Master/texmf-dist/tex/context/base/page-lin.lua
new file mode 100644
index 00000000000..a8d868f36bf
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/page-lin.lua
@@ -0,0 +1,236 @@
+if not modules then modules = { } end modules ['page-lin'] = {
+ version = 1.001,
+ comment = "companion to page-lin.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- experimental
+
+nodes = nodes or { }
+nodes.lines = nodes.lines or { }
+nodes.lines.data = nodes.lines.data or { } -- start step tag
+
+do
+
+ -- if there is demand for it, we can support multiple numbering streams
+ -- and use more than one attibute
+
+ local hlist, vlist, whatsit = node.id('hlist'), node.id('vlist'), node.id('whatsit')
+
+ local display_math = attributes.numbers['display-math'] or 121
+ local line_number = attributes.numbers['line-number'] or 131
+ local line_reference = attributes.numbers['line-reference'] or 132
+
+ local current_list = { }
+ local cross_references = { }
+ local chunksize = 250 -- not used in boxed
+
+ local has_attribute = node.has_attribute
+ local traverse_id = node.traverse_id
+ local copy = node.copy
+ local format = string.format
+ local sprint = tex.sprint
+
+ local data = nodes.lines.data
+
+ nodes.lines.scratchbox = nodes.lines.scratchbox or 0
+
+ -- cross referencing
+
+ function nodes.lines.number(n)
+ local cr = cross_references[n] or 0
+ cross_references[n] = nil
+ return cr
+ end
+
+ local function resolve(n,m)
+ while n do
+ local id = n.id
+ if id == whatsit then
+ local a = has_attribute(n,line_reference)
+ if a then
+ cross_references[a] = m
+ end
+ elseif id == hlist or id == vlist then
+ resolve(n.list,m)
+ end
+ n = n.next
+ end
+ end
+
+ -- boxed variant
+
+ nodes.lines.boxed = { }
+
+ function nodes.lines.boxed.register(configuration)
+ data[#data+1] = configuration
+ return #data
+ end
+ function nodes.lines.boxed.setup(n,configuration)
+ local d = data[n]
+ if d then
+ for k,v in pairs(configuration) do d[k] = v end
+ else
+ data[n] = configuration
+ end
+ return n
+ end
+
+ local leftskip = nodes.leftskip
+
+ function nodes.lines.boxed.stage_one(n)
+ current_list = { }
+ local head = tex.box[n].list
+ local function check_number(n,a) -- move inline
+ local d = data[a]
+ if d then
+ local s = d.start
+ current_list[#current_list+1] = { n, s }
+ if d.start % d.step == 0 then
+ sprint(tex.ctxcatcodes, format("\\makenumber{%s}{%s}{%s}{%s}{%s}\\endgraf", d.tag or "", s, n.shift, n.width, leftskip(n.list)))
+ else
+ sprint(tex.ctxcatcodes, "\\skipnumber\\endgraf")
+ end
+ d.start = s + 1 -- (d.step or 1)
+ end
+ end
+ for n in traverse_id(hlist,head) do -- attr test here and quit as soon as zero found
+ if n.height == 0 and n.depth == 0 then
+ -- skip funny hlists
+ else
+ local a = has_attribute(n.list,line_number)
+ if a and a > 0 then
+ if has_attribute(n,display_math) then
+ if nodes.is_display_math(n) then
+ check_number(n,a)
+ end
+ else
+ if node.first_character(n.list) then
+ check_number(n,a)
+ end
+ end
+ end
+ end
+ end
+ end
+
+ function nodes.lines.boxed.stage_two(n,m)
+ m = m or nodes.lines.scratchbox
+ local t, i = { }, 0
+ for l in traverse_id(hlist,tex.box[m].list) do
+ t[#t+1] = copy(l)
+ end
+ for _, l in ipairs(current_list) do
+ local n, m = l[1], l[2]
+ i = i + 1
+ t[i].next = n.list
+ n.list = t[i]
+ resolve(n,m)
+ end
+ end
+
+ -- flow variant
+ --
+ -- it's too hard to make this one robust, so for the moment it's not
+ -- available; todo: line refs
+
+ if false then
+
+ nodes.lines.flowed = { }
+
+ function nodes.lines.flowed.prepare()
+ for i=1,#data do
+ sprint(tex.ctxcatcodes,format("\\ctxlua{nodes.lines.flowed.prepare_a(%s)}\\ctxlua{nodes.lines.flowed.prepare_b(%s)}",i, i))
+ end
+ end
+
+ function nodes.lines.flowed.prepare_a(i)
+ local d = data[i]
+ local p = d.present
+ if p < chunksize then
+ local b = nodes.lines.scratchbox
+ sprint(tex.ctxcatcodes, format("{\\forgetall\\global\\setbox%s=\\vbox{\\unvbox%s\\relax\\offinterlineskip", b, b))
+ while p < chunksize do
+ sprint(tex.ctxcatcodes, format("\\mkmaketextlinenumber{%s}{%s}\\endgraf",d.start,1))
+ p = p + 1
+ d.start = d.start + d.step
+ end
+ d.present = p
+ sprint(tex.ctxcatcodes, "}}")
+ end
+ end
+
+ function nodes.lines.flowed.prepare_b(i)
+ local d = data[i]
+ local b = nodes.lines.scratchbox
+ local l = tex.box[b]
+ if l then
+ l = l.list
+ local n = d.numbers
+ while l do
+ if l.id == hlist then
+ local m = node.copy(l)
+ m.next = nil
+ if n then
+ n.next = m
+ else
+ d.numbers = m
+ end
+ n = m
+ end
+ l = l.next
+ end
+ end
+ tex.box[b] = nil
+ end
+
+ function nodes.lines.flowed.cleanup(i)
+ if i then
+ node.flush_list(data[i].numbers)
+ else
+ for i=1,#data do
+ node.flush_list(data[i].numbers)
+ end
+ end
+ end
+
+ function nodes.lines.flowed.apply(head)
+ local function check_number(n,a)
+ local d = data[a]
+ if d then
+ local m = d.numbers
+ if m then
+ d.numbers = m.next
+ m.next = n.list
+ n.list = m
+ d.present = d.present - 1
+ end
+ end
+ end
+ for n in node.traverse(head) do
+ local id = n.id
+ if id == hlist then
+ if n.height == 0 and n.depth == 0 then
+ -- skip funny hlists
+ else
+ local a = has_attribute(n,line_number)
+ if a and a > 0 then
+ if has_attribute(n,display_math) then
+ if nodes.is_display_math(n) then
+ check_number(n,a)
+ end
+ else
+ check_number(n,a)
+ end
+ end
+ end
+ end
+ end
+ return head, true
+ end
+
+ end
+
+end
diff --git a/Master/texmf-dist/tex/context/base/page-lin.mkii b/Master/texmf-dist/tex/context/base/page-lin.mkii
new file mode 100644
index 00000000000..35728325231
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/page-lin.mkii
@@ -0,0 +1,312 @@
+%D \module
+%D [ file=page-lin, % copied from main-001
+%D version=1997.03.31,
+%D title=\CONTEXT\ Core Macros,
+%D subtitle=Line Numbering,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{Context Core Macros / Line Numbering}
+
+\unprotect
+
+\newif\ifnumberinglines
+\newif\iftypesettinglines
+
+\newcount\linenumber
+\newcount\linestepper
+
+\chardef\linenumberlocation=0
+
+\newtoks\beforeeverylinenumbering
+\newtoks\aftereverylinenumbering
+
+% het gebruik van \setlocalreference scheelt een hash entry
+
+\def\dodoshowlinenumber % for use elsewhere, to be extended
+ {\doplacelinenumber
+ \global\advance\linenumber \plusone}
+
+\def\completelinenumber
+ {\@@rnleft\convertnumber\@@rnconversion\linenumber\@@rnright}
+
+\def\dosetuplinenumbering[#1]%
+ {\getparameters[\??rn][\c!start=1,\c!step=1,#1]%
+ \global\linenumber\plusone}
+
+\def\setuplinenumbering
+ {\dosingleargument\dosetuplinenumbering}
+
+\def\dostartnummerenLINE
+ {\EveryPar{\placelinenumber}} % why not append to everypar ? better
+
+\def\dostopnummerenLINE
+ {\the\aftereverylinenumbering
+ \egroup}
+
+\def\dostartnummerenVERB
+ {\EveryLine{\placelinenumber}}
+
+\def\dostopnummerenVERB
+ {\the\aftereverylinenumbering
+ \egroup}
+
+\newevery \everylinenumber \relax
+
+\def\dodoplacelinenumber
+ {% beware of em's, the font is already switched !
+ \setbox\scratchbox\hbox
+ {\setbox0\hbox{\@@rncommand{\completelinenumber}}\vsmashbox0%
+ \ifcase\linenumberlocation
+ \iftypesettinglines % hack
+ \expandafter\llap
+ \else
+ \expandafter\rlap
+ \fi{\hbox to \@@rnwidth{\box0\hss}}% was \llap, nog testen !!
+ \or
+ \inleftmargin
+ {\forgetall
+ \doifelse\@@rnwidth\v!margin
+ {\hsize\leftmarginwidth}{\hsize\@@rnwidth}%
+ \alignedline\@@rnalign\v!right{\box0\hskip\@@rndistance}}%
+ \else
+ \inrightmargin
+ {\forgetall
+ \doifelse\@@rnwidth\v!margin
+ {\hsize\rightmarginwidth}{\hsize\@@rnwidth}%
+ \alignedline\@@rnalign\v!left{\hskip\@@rndistance\box0}}%
+ \fi}%
+ \vsmashbox\scratchbox
+ \box\scratchbox
+ \the\everylinenumber}
+
+\def\complexstartlinenumbering[#1]%
+ {\doifnot{#1}\v!continue
+ {\doifnumberelse{#1}
+ {\global\linenumber#1\relax}
+ {\doifelsenothing\@@rnstart
+ {\global\linenumber\plusone}
+ {\global\linenumber\@@rnstart}}}%
+ \chardef\linenumberlocation\zerocount
+ \processaction
+ [\@@rnlocation]
+ [ \v!inmargin=>\chardef\linenumberlocation\plusone,
+ \v!inleft=>\chardef\linenumberlocation\plusone,
+ \v!inright=>\chardef\linenumberlocation\plustwo,
+ \v!margin=>\chardef\linenumberlocation\plusone]%
+ % \v!text=>\chardef\linenumberlocation\zerocount,
+ %\s!unknown=>\chardef\linenumberlocation\zerocount,
+ %\s!default=>\chardef\linenumberlocation\zerocount]%
+ \doifnot\@@rnwidth\v!margin
+ {\freezedimenmacro\@@rnwidth
+ \ifcase\linenumberlocation % text
+ \advance\leftskip\@@rnwidth\relax
+ \fi}%
+ \freezedimenmacro\@@rndistance
+ \chardef\@@rn@@rnmethod
+ \ifprocessingverbatim\zerocount\else\iftypesettinglines\plusone\else\plustwo\fi\fi
+ \processaction
+ [\@@rnmethod]
+ [ \v!type=>\chardef\@@rn@@rnmethod\zerocount,
+ \v!line=>\chardef\@@rn@@rnmethod\plusone,
+ \v!text=>\chardef\@@rn@@rnmethod\plustwo,
+ \v!file=>\chardef\@@rn@@rnmethod\plusthree]%
+ \ifcase\@@rn@@rnmethod % verbatim, line by line
+ \typesettinglinestrue
+ \let\dostartnummeren\dostartnummerenVERB
+ \let\stoplinenumbering\dostopnummerenVERB
+ \def\placelinenumber
+ {\doplacelinenumber
+ \global\advance\linenumber \plusone}%
+ \or % text, line by line
+ \let\dostartnummeren\dostartnummerenLINE
+ \let\stoplinenumbering\dostopnummerenLINE
+ \def\placelinenumber
+ {\doplacelinenumber
+ \global\advance\linenumber \plusone}%
+ \or % text, whole lot
+ \let\dostartnummeren\dostartnummerenPAR
+ \let\stoplinenumbering\dostopnummerenPAR
+ \def\placelinenumber
+ {\global\advance\linenumber \minusone
+ \doplacelinenumber}%
+ \or % verbatim, selective line by line
+ \typesettinglinestrue
+ \let\dostartnummeren\dostartnummerenVERB
+ \let\stoplinenumbering\dostopnummerenVERB
+ \def\placelinenumber
+ {\global\linenumber\verbatimlinenumber
+ \global\advance\linenumber \minusone
+ \doplacelinenumber}%
+ \fi
+ \dostartnummeren}
+
+\def\startlinenumbering
+ {\bgroup
+ \the\beforeeverylinenumbering
+ \numberinglinestrue
+ \complexorsimpleempty\startlinenumbering}
+
+\def\donoplacelinenumber
+ {\the\everylinenumber}
+
+\def\doplacelinenumber
+ {\ifnum\linenumber<\@@rnstart\relax
+ \donoplacelinenumber
+ \else
+ \ifnum\numexpr(\linenumber/\@@rnstep)*\@@rnstep\relax=\linenumber
+ \doattributes\??rn\c!style\c!color\dodoplacelinenumber
+ \else
+ \donoplacelinenumber
+ \fi
+ \fi}
+
+\def\someline[#1]%
+ {\dolinereference0[#1]\ignorespaces}
+
+\def\startline[#1]%
+ {\dolinereference1[#1]\ignorespaces}
+
+\def\stopline[#1]%
+ {\removelastspace\dolinereference2[#1]}
+
+\def\inline#1[#2]%
+ {\doifelsenothing{#1}
+ {\doifinstringelse{--}\currenttextreference
+ {\in{\leftlabeltext\v!lines}{\rightlabeltext\v!lines}[\@@rnprefix#2]}
+ {\in{\leftlabeltext\v!line }{\rightlabeltext\v!line }[\@@rnprefix#2]}}
+ {\in{#1}[\@@rnprefix#2]}}
+
+\def\dostartnummerenPAR
+ {\beginofshapebox
+ \doglobal\newcounter\linereference}
+
+% localcrossref heroverwegen
+
+\def\setlinereference#1#2#3#4%
+ {\setxvalue{lrf:#1}{\noexpand\dogetlinereference{#2}{#3}{#4}}}
+
+\def\getlinereference#1%
+ {\getvalue{lrf:#1}}
+
+\def\dogetlinereference#1#2#3%
+ {\edef\linereferencename{#1}%
+ \edef\linereferenceline{#2}%
+ \edef\linereferenceplus{#3}}
+
+% 1 xxx xxx xxx xxx xxx xxx xxx
+% 2 xxx yyy yyy yyy yyy yyy yyy <= start y
+% 3 yyy yyy yyy yyy yyy yyy yyy
+% 4 yyy yyy yyy yyy yyy xxx xxx <= stop y
+% 5 xxx xxx xxx xxx xxx xxx xxx
+
+\def\dolinereference#1[#2]%
+ {\bgroup
+ \dimen0=\strutdp
+ \doif\@@rnreferencing\v!on
+ {\doglobal\increment\linereference
+ % start 1=>(n=y,l=0,p=1)
+ % stop 2=>(n=y,l=0,p=2)
+ \setlinereference{\linereference}{\@@rnprefix#2}{0}{#1}%
+ \advance\dimen0 \linereference sp}%
+ \prewordbreak
+ \vrule \!!width \zeropoint \!!depth \dimen0 \!!height \zeropoint
+ \prewordbreak
+ \egroup}
+
+\def\dostopnummerenPAR % dp's -> openstrutdepth
+ {\endofshapebox
+ \checkreferences
+ \linestepper\zerocount
+ \reshapebox{\global\advance\linestepper \plusone}%
+ \global\advance\linenumber \linestepper
+ \doifelse\@@rnreferencing\v!on
+ {\reshapebox % We are going back!
+ {\global\advance\linenumber \minusone
+ \dimen0=\dp\shapebox
+ \advance\dimen0 -\strutdp\relax
+ \ifdim\dimen0>\zeropoint
+ % 1=>4 | 2=>4 1=>2
+ % start 1=>(n=y,l=2,p=1)
+ % stop 2=>(n=y,l=4,p=2)
+ \dostepwiserecurse\plusone{\number\dimen0}\plusone
+ {\getlinereference\recurselevel
+ \setlinereference\recurselevel
+ {\linereferencename}{\the\linenumber}{\linereferenceplus}}%
+ \fi}%
+ \global\advance\linenumber \linestepper
+ \ifnum\linereference>\zerocount % anders vreemde loop in paragraphs+recurse
+ \dorecurse\linereference
+ {\getlinereference\recurselevel
+ \ifnum\linereferenceplus=2 % stop
+ % ref y: text = 4 / Kan dit buiten referentie mechanisme om?
+ \expanded{\setlocalcrossreference
+ {\referenceprefix\linereferencename}{}{}{\linereferenceline}}%
+ \fi}%
+ \dorecurse\linereference
+ {\getlinereference\recurselevel
+ \ifnum\linereferenceplus<2 % start / lone
+ \ifnum\linereferenceplus=1 % start
+ \getreferenceelements\linereferencename % text = 4
+ \ifnum\linereferenceline<0\currenttextreference\relax % 0 prevents error
+ \edef\linereferenceline{\linereferenceline--\currenttextreference}%
+ \fi
+ \fi
+ \expanded{\setlocalcrossreference
+ {\referenceprefix\linereferencename}{}{}{\linereferenceline}}%
+ \fi}%
+ \global\let\scratchline\linenumber % We are going back!
+ \reshapebox
+ {\doglobal\decrement\scratchline
+ \hbox
+ {\dorecurse\linereference
+ {\getlinereference\recurselevel
+ \getreferenceelements\linereferencename
+ \beforesplitstring\currenttextreference--\at--\to\firstline
+ \ifnum\firstline=\scratchline\relax
+ % beter een rawtextreference, i.e. expanded
+ % \textreference[\linereferencename]{\currenttextreference}%
+ \rawtextreference\s!lin\linereferencename\currenttextreference
+ \expanded{\setlocalcrossreference
+ {\referenceprefix\linereferencename}{}{}{0}}% ==done
+ \fi}%
+ \dimen0\dp\shapebox
+ \advance\dimen0 -\strutdp\relax
+ \ifdim\dimen0>\zeropoint
+ \dp\shapebox\strutdp
+ \fi
+ \placelinenumber\box\shapebox}}% no \strut !
+ \else
+ \reshapebox{\hbox{\placelinenumber\box\shapebox}}% no \strut !
+ \fi}
+ {\reshapebox{\global\advance\linenumber \minusone}%
+ \global\advance\linenumber \linestepper
+ \reshapebox{\hbox{\placelinenumber\box\shapebox}}}% no \strut !
+ \global\advance\linenumber \linestepper
+ \flushshapebox
+ \the\aftereverylinenumbering
+ \egroup}
+
+\setuplinenumbering
+ [\c!method=,
+ \c!conversion=\v!numbers,
+ \c!start=1,
+ \c!step=1,
+ \c!location=\v!margin,
+ \c!style=,
+ \c!color=,
+ \c!prefix=,
+ \c!referencing=\v!on,
+ \c!width=\ifcase\linenumberlocation2em\else\v!margin\fi,
+ \c!left=,
+ \c!right=,
+ \c!command=,
+ \c!distance=\zeropoint,
+ \c!align=\ifcase\linenumberlocation\v!right\or\v!right\or\v!left\fi]
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/page-lin.mkiv b/Master/texmf-dist/tex/context/base/page-lin.mkiv
new file mode 100644
index 00000000000..4b805e0a308
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/page-lin.mkiv
@@ -0,0 +1,434 @@
+%D \module
+%D [ file=page-lin,
+%D version=2007.11.29,
+%D title=\CONTEXT\ Core Macros,
+%D subtitle=Line Numbering,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+% generic or not ... maybe not bother too much and simplify to mkiv only
+
+\writestatus{loading}{Context Core Macros / Line Numbering}
+
+\unprotect
+
+% low level interface
+
+\defineattribute[line-number]
+\defineattribute[line-reference]
+
+\registerctxluafile{page-lin}{1.001}
+% \ctxluafileload{page-lin}{1.001}
+
+\appendtoksonce\doresetattribute{line-number}\to\everyforgetall
+\appendtoksonce\dosetattribute{display-math}{1}\to\everybeforedisplayformula
+
+\newbox \linenumberscratchbox
+\newcount\linenumberchunk
+\newcount\linerefcounter
+
+\newconditional\tracelinenumbering
+
+\def\mkaddtextlinenumbers#1#2#3% box col max
+ {\bgroup
+ \def\skipnumber{\hbox{}}%
+ \ifcase#3\relax
+ \let\makenumber\mkskiplinenumber
+ \or
+ \let\makenumber\mkleftlinenumber
+ \else\ifcase#2\relax
+ \let\makenumber\mkskiplinenumber
+ \or
+ \let\makenumber\mkleftlinenumber
+ \else
+ \let\makenumber\mkrightlinenumber
+ \fi\fi
+ \mkprocesstextlinenumbers{#1}%
+ \egroup}
+
+\def\mkprocesstextlinenumbers#1%
+ {\setbox\linenumberscratchbox\vbox{\forgetall\offinterlineskip\ctxlua{nodes.lines.boxed.stage_one(\number#1)}}%
+ \ctxlua{nodes.lines.boxed.stage_two(\number#1,\number\linenumberscratchbox)}}% can move to lua code
+
+% id nr shift width leftskip
+
+\def\mkskiplinenumber #1#2#3#4#5{}
+\def\mkleftlinenumber #1#2#3#4#5{\hbox{\llap{#2\quad\hskip#3\scaledpoint}}}
+\def\mkrightlinenumber#1#2#3#4#5{\hbox{\rlap{\hskip#4\scaledpoint\hskip#3\scaledpoint\quad#2}}}
+
+\def\makenumber#1#2{\hbox{\llap{#1\quad\hskip#2\scaledpoint}}\endgraf}%
+
+\def\mkdoprocesspagecontents #1{\mkaddtextlinenumbers{#1}\plusone \plusone}
+\def\mkdoprocessboxcontents #1{\mkaddtextlinenumbers{#1}\plusone \plusone}
+\def\mkdoprocesscolumncontents#1{\mkaddtextlinenumbers{#1}\currentcolumn\nofcolumns}
+
+\def\mkcurrentstart{0}
+\def\mkcurrentstep {1}
+
+\def\mkdefinetextlinenumbering#1%
+ {\begingroup
+ \scratchcounter\ctxlua{tex.sprint(nodes.lines.boxed.register({start=\mkcurrentstart,step=\mkcurrentstep,tag="#1"}))}%
+ \setxvalue{ln:c:#1}{\number\scratchcounter}%
+ \endgroup}
+
+\def\mkstarttextlinenumbering#1#2%
+ {\globallet\mkprocesspagecontents \mkdoprocesspagecontents
+ \globallet\mkprocesscolumncontents\mkdoprocesscolumncontents
+ \ifcase#2\relax
+ % continue
+ \or
+ \mkdefinetextlinenumbering{#1}% restart
+ \fi
+ \dosetattribute{line-number}{\getvalue{ln:c:#1}}}
+
+\def\mksetuptextlinenumbering#1%
+ {\ctxlua{nodes.lines.boxed.setup(\getvalue{ln:c:#1},{start=\mkcurrentstart,step=\mkcurrentstep,tag="#1"})}}
+
+\def\mkstoptextlinenumbering
+ {\doresetattribute{line-number}}
+
+\def\mksomelinereference#1#2#3%
+ {\dontleavehmode\begingroup
+ \global\advance\linerefcounter\plusone
+ \dosetattribute{line-reference}\linerefcounter
+ #3\rawtextreference\s!lin{#2}{\noexpand\ctxlua{tex.sprint(nodes.lines.number(\the\linerefcounter))}}%
+ \endgroup}
+
+\def\mkstartlinereference#1{\mksomelinereference{#1}{lr:b:#1}{}\ignorespaces}
+\def\mkstoplinereference #1{\removeunwantedspaces\mksomelinereference{#1}{lr:e:#1}{}}
+
+\def\mklinestartreference#1[#2]{\in{#1}[lr:b:#2]} % not interfaced
+\def\mklinestopreference #1[#2]{\in{#1}[lr:e:#2]} % not interfaced
+
+% high level interface
+
+\newif\ifnumberinglines
+\newif\iftypesettinglines
+
+\let\currentlinenumbering\empty
+
+\chardef\linenumbermode = 1 % 0=continue, 1=restart
+\chardef\linenumberlocation = 1 % 0=middle, 1=left, 2=right, 3=inner, 4=outer, 5=text
+\chardef\linenumberalignment = 5 % 0=middle, 1=left, 2=right, 5=auto
+
+\newevery \beforeeverylinenumbering \relax
+\newevery \aftereverylinenumbering \relax
+\newevery \everylinenumber \relax
+
+\newdimen\linenumberwidth
+\newdimen\linenumberdistance
+
+\def\definelinenumbering
+ {\dosingleempty\dodefinelinenumbering}
+
+\def\dodefinelinenumbering[#1]%
+ {\def\currentlinenumbering{#1}%
+ \mkdefinetextlinenumbering\currentlinenumbering}
+
+\def\setuplinenumbering
+ {\dodoubleempty\dosetuplinenumbering}
+
+\def\dosetuplinenumbering[#1][#2]%
+ {\ifsecondargument
+ \def\currentlinenumbering{#1}%
+ \getparameters[\??rn#1][#2]%
+ \else
+ \let\currentlinenumbering\empty
+ \getparameters[\??rn][#1]%
+ \fi
+ \mksetuptextlinenumbering\currentlinenumbering}
+
+\def\linenumberparameter#1%
+ {\csname\??rn\ifcsname\??rn\currentlinenumbering#1\endcsname\currentlinenumbering\fi#1\endcsname}
+
+\def\linenumberattributes
+ {\doattributes{\??rn\ifcsname\??rn\currentlinenumbering\c!style\endcsname\currentlinenumbering\fi}}
+
+\definelinenumbering
+
+\setuplinenumbering
+ [\c!conversion=\v!numbers,
+ \c!start=1,
+ \c!step=1,
+ \c!continue=v!no,
+ \c!location=\v!left,
+ \c!style=,
+ \c!color=,
+ \c!width=2em,
+ \c!left=,
+ \c!right=,
+ \c!command=,
+ \c!distance=\zeropoint,
+ \c!align=\v!auto]
+
+\def\startlinenumbering
+ {\dodoubleempty\dostartlinenumbering}
+
+% no intermediate changes in values, define a class, otherwise each range
+% would need a number
+
+\def\mkcurrentstart{\linenumberparameter\c!start}
+\def\mkcurrentstep {\linenumberparameter\c!step }
+
+% todo: text
+
+\expandafter\chardef\csname\??rn:l:\v!middle \endcsname \zerocount
+\expandafter\chardef\csname\??rn:l:\v!left \endcsname \plusone
+\expandafter\chardef\csname\??rn:l:\v!margin \endcsname \plusone
+\expandafter\chardef\csname\??rn:l:\v!inmargin\endcsname \plusone
+\expandafter\chardef\csname\??rn:l:\v!inleft \endcsname \plusone
+\expandafter\chardef\csname\??rn:l:\v!right \endcsname \plustwo
+\expandafter\chardef\csname\??rn:l:\v!inright \endcsname \plustwo
+\expandafter\chardef\csname\??rn:l:\v!inner \endcsname \plusthree
+\expandafter\chardef\csname\??rn:l:\v!outer \endcsname \plusfour
+\expandafter\chardef\csname\??rn:l:\v!text \endcsname \plusfive
+
+\expandafter\chardef\csname\??rn:a:\v!middle \endcsname \zerocount
+\expandafter\chardef\csname\??rn:a:\v!right \endcsname \plusone
+\expandafter\chardef\csname\??rn:a:\v!flushleft \endcsname \plusone
+\expandafter\chardef\csname\??rn:a:\v!left \endcsname \plustwo
+\expandafter\chardef\csname\??rn:a:\v!flushright\endcsname \plustwo
+\expandafter\chardef\csname\??rn:a:\v!auto \endcsname \plusfive
+
+\def\dostartlinenumbering[#1][#2]% todo: c!continue
+ {\begingroup
+ \chardef\linenumbermode\plusone
+ \ifsecondargument
+ \def\currentlinenumbering{#1}%
+ \doifnumberelse{#2}% downward compatible
+ {\setvalue{\??rn#1\c!start}{#2}}%
+ {\doif{#2}\v!continue{\chardef\linenumbermode\zerocount}}%
+ \else\iffirstargument
+ \doifnumberelse{#1}% downward compatible
+ {\let\currentlinenumbering\empty
+ \setvalue{\??rn\c!start}{#1}}%
+ {\doifelse{#1}\v!continue
+ {\let\currentlinenumbering\empty
+ \chardef\linenumbermode\zerocount}
+ {\def\currentlinenumbering{#1}}}%
+ \fi\fi
+ \doifelse{\linenumberparameter\c!continue}\v!yes
+ {\chardef\linenumbermode\zerocount}%
+ \numberinglinestrue
+ \the\beforeeverylinenumbering
+ \mkstarttextlinenumbering\currentlinenumbering\linenumbermode}
+
+\def\stoplinenumbering
+ {\mkstoptextlinenumbering
+ \the\aftereverylinenumbering
+ \endgroup}
+
+% number placement
+
+\let\mkskiplinenumber \gobblefivearguments
+
+\def\mkdoinnerlinenumber{\doifoddpageelse\mkdoleftlinenumber\mkdorightlinenumber}
+\def\mkdoouterlinenumber{\doifoddpageelse\mkdorightlinenumber\mkdoleftlinenumber}
+
+\def\mkleftlinenumber
+ {\ifcase\linenumberlocation
+ \expandafter\mkdoleftlinenumber
+ \or
+ \expandafter\mkdoleftlinenumber
+ \or
+ \expandafter\mkdoleftlinenumber
+ \or
+ \expandafter\mkdoinnerlinenumber
+ \or
+ \expandafter\mkdoouterlinenumber
+ \fi}
+
+\def\mkrightlinenumber
+ {\ifcase\linenumberlocation
+ \expandafter\mkdorightlinenumber
+ \or
+ \expandafter\mkdorightlinenumber
+ \or
+ \expandafter\mkdorightlinenumber
+ \or
+ \expandafter\mkdoouterlinenumber
+ \or
+ \expandafter\mkdoinnerlinenumber
+ \fi}
+
+\def\mkaddtextlinenumbers#1#2#3% box col max
+ {\bgroup
+ \def\skipnumber{\hbox{}}%
+ \ifcase#3\relax
+ \let\makenumber\mkskiplinenumber
+ \or
+ \let\makenumber\mkleftlinenumber
+ \else\ifcase#2\relax
+ \let\makenumber\mkskiplinenumber
+ \or
+ \let\makenumber\mkdoleftlinenumber
+ \ifcase\linenumberlocation\or
+ \chardef\linenumberlocation\plusone
+ \or
+ \chardef\linenumberlocation\plustwo
+ \or
+ \chardef\linenumberlocation\plusone
+ \or
+ \chardef\linenumberlocation\plusone
+ \or
+ \chardef\linenumberlocation\plusone
+ \fi
+ \else
+ \let\makenumber\mkdorightlinenumber
+ \ifcase\linenumberlocation\or
+ \chardef\linenumberlocation\plustwo
+ \or
+ \chardef\linenumberlocation\plusone
+ \or
+ \chardef\linenumberlocation\plustwo
+ \or
+ \chardef\linenumberlocation\plustwo
+ \fi
+ \fi\fi
+ \mkprocesstextlinenumbers{#1}%
+ \egroup}
+
+\def\mkdoleftlinenumber #1#2#3#4#5%
+ {\hbox{\llap{\dosomelinenumber{#1}{2}{#2}{#5}\hskip#3\scaledpoint}}}
+\def\mkdorightlinenumber#1#2#3#4#5%
+ {\hbox{\rlap{\hskip#4\scaledpoint\hskip#3\scaledpoint\dosomelinenumber{#1}{1}{#2}{#5}}}}
+
+\def\dosomelinenumber#1#2#3#4% tag 1=left|2=right linenumber leftskip
+ {\begingroup
+ \def\currentlinenumbering{#1}%
+ \chardef\linenumberlocation \executeifdefined{\??rn:l:\linenumberparameter\c!location}\plusone % left
+ \chardef\linenumberalignment\executeifdefined{\??rn:a:\linenumberparameter\c!align }\plusfive % auto
+ \doifelse{\linenumberparameter\c!width}\v!margin
+ {\linenumberwidth\leftmarginwidth}
+ {\linenumberwidth\linenumberparameter\c!width}%
+ \linenumberdistance\linenumberparameter\c!distance\relax
+ \ifcase#2\relax\or\hskip\linenumberdistance\fi\relax
+ \ifnum\linenumberlocation=\plusfive
+ \scratchdimen\dimexpr#4\scaledpoint-\linenumberdistance\relax
+ \chardef\linenumberlocation\plusone
+ \else
+ \scratchdimen\zeropoint
+ \fi
+ \ifcase\linenumberalignment
+ \chardef\linenumberlocation\zerocount % middle
+ \or
+ \chardef\linenumberlocation\plusone % left
+ \or
+ \chardef\linenumberlocation\plustwo % right
+ \fi
+ \ifconditional\tracelinenumbering\ruledhbox\else\hbox\fi to \linenumberwidth
+ {\ifcase\linenumberlocation
+ \hss % middle
+ \or
+ % left
+ \or
+ \hss % right
+ \or
+ \doifoddpageelse\relax\hss % inner
+ \or
+ \doifoddpageelse\hss\relax % outer
+ \fi
+ \linenumberattributes\c!style\c!color
+ {\linenumberparameter\c!command
+ {\linenumberparameter\c!left
+ \convertnumber{\linenumberparameter\c!conversion}{#3}%
+ \linenumberparameter\c!right}}%
+ \ifcase\linenumberlocation
+ \hss % middle
+ \or
+ \hss % left
+ \or
+ % right
+ \or
+ \doifoddpageelse\hss\relax % inner
+ \or
+ \doifoddpageelse\relax\hss % outer
+ \fi}%
+ \ifcase#2\relax\or\or\hskip\linenumberdistance\fi\relax
+ \hskip-\scratchdimen
+ \the\everylinenumber
+ \endgroup}
+
+% left right inner outer
+
+% align: \alignedline\@@rnalign\v!right{\box0\hskip\@@rndistance}
+
+% referencing
+
+\def\someline [#1]{\mkstartlinereference{#1}\mkstoplinereference{#1}}
+\def\startline[#1]{\mkstartlinereference{#1}}
+\def\stopline [#1]{\mkstoplinereference {#1}}
+
+\def\mkshowstartlinereference#1%
+ {\ifconditional\tracelinenumbering
+ \setbox\scratchbox\hbox{\llap
+ {\vrule\!!width\onepoint\!!depth\strutdp\!!height.8\strutht\raise.85\strutht\hbox{\llap{\tt\txx#1}}}}%
+ \smashbox\scratchbox\box\scratchbox
+ \fi}
+\def\mkshowstoplinereference#1%
+ {\ifconditional\tracelinenumbering
+ \setbox\scratchbox\hbox{\rlap
+ {\raise.85\strutht\hbox{\rlap{\tt\txx#1}}\vrule\!!width\onepoint\!!depth\strutdp\!!height.8\strutht}}%
+ \smashbox\scratchbox\box\scratchbox
+ \fi}
+
+\def\mkstartlinereference#1{\mksomelinereference{#1}{lr:b:#1}{\mkshowstartlinereference{#1}}\ignorespaces}
+\def\mkstoplinereference #1{\removeunwantedspaces\mksomelinereference{#1}{lr:e:#1}{\mkshowstoplinereference{#1}}}
+
+% eventually we will do this in lua
+
+\def\doifelsesamelinereference#1#2#3%
+ {\doifreferencefoundelse{lr:b:#1}
+ {\let\fline\currenttextreference
+ \doifreferencefoundelse{lr:e:#1}
+ {\let\tline\currenttextreference
+ \ifx\fline\tline#2\else#3\fi}
+ {#2}}
+ {#2}}
+
+\def\inline#1[#2]%
+ {\doifelsenothing{#1}
+ {\doifelsesamelinereference{#2}
+ {\in{\leftlabeltext\v!line}{\rightlabeltext\v!line}[lr:b:#2]}
+ {\in{\leftlabeltext\v!lines}{}[lr:b:#2]--\in{}{\rightlabeltext\v!lines}[lr:e:#2]}}
+ {\doifelsesamelinereference{#2}
+ {\in{#1}[lr:b:#2]}
+ {\in{#1}[lr:b:#2]--\in[lr:e:#2]}}}
+
+\protect \endinput
+
+\iffalse % \iftrue
+
+ \appendtoks\ctxlua{nodes.lines.flowed.prepare()}\to\everyshipout
+ \appendtoks\ctxlua{nodes.lines.flowed.cleanup()}\to\everybye
+
+ \def\mkstarttextlinenumbering#1#2%
+ {\ctxlua{nodes.lines.flowed.prepare(#1)}%
+ \dosetattribute{line-number}{#1}}
+
+ \def\mkstoptextlinenumbering
+ {\doresetattribute{line-number}}
+
+ \def\mkmaketextlinenumber#1#2%
+ {\hbox \bgroup
+ \ifcase#2\relax
+ %
+ \or
+ \llap{#1\quad\hskip#2\scaledpoint}%
+ \else
+ \rlap{\hskip\textwidth\quad#1\hskip#2\scaledpoint}%
+ \fi
+ \egroup}
+
+ \ctxlua{
+ nodes.lines.scratchbox = \number\linenumberscratchbox ;
+ % callback.register('vpack_filter', nodes.lines.flowed.apply)
+ callback.register('post_linebreak_filter', nodes.lines.flowed.apply)
+ }
+
+\fi
diff --git a/Master/texmf-dist/tex/context/base/page-log.tex b/Master/texmf-dist/tex/context/base/page-log.tex
index d0671a73260..5140486af56 100644
--- a/Master/texmf-dist/tex/context/base/page-log.tex
+++ b/Master/texmf-dist/tex/context/base/page-log.tex
@@ -24,7 +24,7 @@
\stopmessages
\startmessages german library: layouts
- 7: berechne Platz des Logo
+ 7: berechne Platzbedarf des Logos
\stopmessages
\startmessages czech library: layouts
diff --git a/Master/texmf-dist/tex/context/base/page-lyr.tex b/Master/texmf-dist/tex/context/base/page-lyr.tex
index b0fabc3f7c5..a1af3adc9d3 100644
--- a/Master/texmf-dist/tex/context/base/page-lyr.tex
+++ b/Master/texmf-dist/tex/context/base/page-lyr.tex
@@ -125,7 +125,7 @@
%D \setlayer [identifier] [optional parameters] {data}
%D \stoptyping
-\def\currentlayerdata{0}
+\newcount\currentlayerdata
\let\currentlayerwidth \!!zeropoint
\let\currentlayerheight\!!zeropoint
@@ -156,7 +156,7 @@
{\bgroup
\recalculatebackgrounds
\recalculatelogos
- \doglobal\increment\currentlayerdata
+ \global\advance\currentlayerdata\plusone
\forgetall
\dontcomplain
\doifvalue{\??ll#1\c!option}\v!test\tracelayerstrue
@@ -199,20 +199,10 @@
% todo left/right
-% \def\setlastlayerpos#1%
-% {\edef\layerpage{\MPp{lyr:\currentlayerdata}}%
-% \scratchdimen\MPx{lyr:#1:\layerpage}%
-% \scratchdimen-\scratchdimen
-% \advance\scratchdimen\MPx{lyr:\currentlayerdata}%
-% \xdef\lastlayerxpos{\the\scratchdimen}%
-% \scratchdimen\MPy{lyr:#1:\layerpage}%
-% \advance\scratchdimen-\MPy{lyr:\currentlayerdata}%
-% \xdef\lastlayerypos{\the\scratchdimen}}
-
\def\setlastlayerpos#1%
- {\edef\layerpage{\MPp{lyr:\currentlayerdata}}%
- \xdef\lastlayerxpos{\the\dimexpr-\MPx{lyr:#1:\layerpage}+\MPx{lyr:\currentlayerdata}\relax}%
- \xdef\lastlayerypos{\the\dimexpr \MPy{lyr:#1:\layerpage}-\MPy{lyr:\currentlayerdata}\relax}}
+ {\edef\layerpage{\MPp{lyr:\the\currentlayerdata}}%
+ \xdef\lastlayerxpos{\the\dimexpr-\MPx{lyr:#1:\layerpage}+\MPx{lyr:\the\currentlayerdata}\relax}%
+ \xdef\lastlayerypos{\the\dimexpr \MPy{lyr:#1:\layerpage}-\MPy{lyr:\the\currentlayerdata}\relax}}
\def\definelayerpreset
{\dodoubleargument\dodefinelayerpreset}
@@ -249,6 +239,14 @@
% preroll
\getparameters[\??ll\currentlayer][#3]%
% presets and real roll
+% maybe todo:
+% \doif{\layerparameter\c!method}\v!fit
+% {\@@layerxsiz\thelayerwidth \currentlayer
+% \@@layerysiz\thelayerheight\currentlayer
+% \layerwidth \@@layerxsiz
+% \layerheight\@@layerysiz
+% }%
+ % etc
\executeifdefined{\??ll\??ll\layerparameter\c!preset}\gobbletwoarguments\currentlayer{#3}%
% that was real slow
\doif{\layerparameter\c!position}\v!overlay % slow
@@ -282,7 +280,7 @@
\letgvalue{\??ll\currentlayer\layerpage\c!position}\v!yes
\letgvalue{\??ll\currentlayer\c!state}\v!start % needed ?
\setbox\layerbox\vbox to \@@layerysiz
- {\hbox to \@@layerxsiz{\xypos{lyr:\currentlayerdata}\hss}\vss}}
+ {\hbox to \@@layerxsiz{\xypos{lyr:\the\currentlayerdata}\hss}\vss}}
{\setbox\layerbox\emptybox
\globallet\lastlayerxpos\!!zeropoint
\globallet\lastlayerypos\!!zeropoint
diff --git a/Master/texmf-dist/tex/context/base/page-mar.tex b/Master/texmf-dist/tex/context/base/page-mar.tex
index e11d0d15e08..c6804704b2f 100644
--- a/Master/texmf-dist/tex/context/base/page-mar.tex
+++ b/Master/texmf-dist/tex/context/base/page-mar.tex
@@ -2,7 +2,7 @@
%D [ file=page-mar, % moved here from main-001
%D version=1997.03.31,
%D title=\CONTEXT\ Core Macros,
-%D subtitle=Marginal Things
+%D subtitle=Marginal Things,
%D author=Hans Hagen,
%D date=\currentdate,
%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
@@ -193,8 +193,8 @@
\let \margincontentseparator \empty
\def \margincontentstrutheight {\strutht}
-\newcounter\margincontentlevel
-\newdimen \margincontentheight
+\newcount\margincontentlevel
+\newdimen\margincontentheight
\def\setupinmargin
{\dodoubleempty\dosetupinmargin}
@@ -700,8 +700,8 @@
{\global\chardef\margintextcollected\plusone
\edef\margincontenttag{#1}%
\ifx\margincontenttag\empty
- \doglobal\increment\margincontentlevel
- \let\margincontenttag\margincontentlevel
+ \global\advance\margincontentlevel\plusone
+ \edef\margincontenttag{\number\margincontentlevel}%
\fi
\checkinmargin[\margincontenttag]%
\doglobal \appendetoks
@@ -790,7 +790,7 @@
% Yet undocumented, for a manual flush in for instance headers.
\def\resetmargincontent
- {\doglobal\newcounter\margincontentlevel
+ {\global\margincontentlevel\zerocount
\global\chardef\margintextcollected\zerocount
\global\collectedmargintexts\emptytoks}
diff --git a/Master/texmf-dist/tex/context/base/page-mul.tex b/Master/texmf-dist/tex/context/base/page-mul.tex
index edbf6206e02..e8375d2e0e5 100644
--- a/Master/texmf-dist/tex/context/base/page-mul.tex
+++ b/Master/texmf-dist/tex/context/base/page-mul.tex
@@ -355,29 +355,12 @@
%D dimensions are influenced by bodyfont switches inside
%D multi||column mode.
-% \def\setcolumnvsize
-% {%\global\vsize\columntextheight
-% \global\vsize-\columntextoffset
-% \global\multiply\vsize \plustwo
-% \global\advance\vsize \columntextheight
-% \ifdim\precolumnboxheight>\zeropoint
-% \global\advance\vsize -\precolumnboxheight
-% \fi
-% %\getinsertionheights\to\dimen0\\%
-% %\global\advance\vsize -\dimen0
-% \settotalinsertionheight
-% \global\advance\vsize -\totalinsertionheight
-% %%%\ifgridsnapping % evt altijd, nog testen, testing now, see columned tocs
-% \getnoflines\vsize
-% \vsize\noflines\openlineheight
-% \advance\vsize .5\openlineheight % collect enough data
-% %%%\fi
-% \global\vsize\nofcolumns\vsize
-% \global\pagegoal\vsize} % let's do it only here
-
\newdimen\mcscratchdimen
\newcount\nofcolumnlines
+\chardef\multicolumnlinemethod\zerocount % 0: overshoot (old default), 1: tight
+% \chardef\multicolumnlinemethod\plusone
+
\def\getmulticolumnlines
{\mcscratchdimen-\columntextoffset
\multiply\mcscratchdimen \plustwo
@@ -387,38 +370,22 @@
\fi
\settotalinsertionheight
\advance\mcscratchdimen -\totalinsertionheight
- \getnoflines\mcscratchdimen
+ \ifcase\multicolumnlinemethod \getnoflines\mcscratchdimen
+ \or \getrawnoflines\mcscratchdimen
+ \else \getrawnoflines\mcscratchdimen
+ \fi
% added 30/7/2004
\ifnum\layoutlines>\zerocount \ifnum\noflines>\layoutlines
\noflines\layoutlines
\fi \fi
\nofcolumnlines\noflines}
-% probaby better, test first, don't replace yet
-%
-% \def\getmulticolumnlines
-% {\mcscratchdimen-\columntextoffset
-% \multiply\mcscratchdimen \plustwo
-% % \advance\mcscratchdimen \columntextheight
-% \ifdim\precolumnboxheight>\zeropoint
-% \advance\mcscratchdimen -\precolumnboxheight
-% \fi
-% \settotalinsertionheight
-% \advance\mcscratchdimen -\totalinsertionheight
-% \getnoflines\mcscratchdimen
-% \ifnum\layoutlines>\zerocount
-% \noflines-\noflines
-% \advance\noflines\layoutlines
-% \ifnum\noflines<\zerocount
-% \noflines\zerocount
-% \fi
-% \fi
-% \nofcolumnlines\noflines}
+\def\multicolumnovershootratio{.5} % {\ifgridsnapping0\else.5\fi}
\def\setcolumnvsize
{\getmulticolumnlines
\mcscratchdimen\nofcolumnlines\openlineheight
- \advance\mcscratchdimen .5\openlineheight % collect enough data
+ \advance\mcscratchdimen \multicolumnovershootratio\openlineheight % collect enough data
\global\vsize\nofcolumns\mcscratchdimen
\global\pagegoal\vsize} % let's do it only here
@@ -460,7 +427,7 @@
\ifsomefloatwaiting
\showmessage\m!columns6{\the\savednoffloats}%
\global\setbox\savedfloatlist\box\floatlist
- \xdef\restoresavedfloats%
+ \xdef\restoresavedfloats
{\global\savednoffloats\the\savednoffloats
\global\setbox\floatlist\box\savedfloatlist
\global\noexpand\somefloatwaitingtrue}%
@@ -521,47 +488,25 @@
%D e.g. when there is no text given between \type{\begin..}
%D and \type{\end..}. The \type{\par} is needed!
-% \def\endmulticolumns
-% {%\par
-% \vskip\lineheight\vskip-\lineheight % take footnotes into account
-% \dontshowcomposition
-% \doflushcolumnfloat % added recently
-% %\doflushcolumnfloats % no, since it results in wrong top floats
-% \flushnotes % before start of columns
-% \par
-% \ifbalancecolumns
-% \global\output{\continuousmulticolumnsout}%
-% \goodbreak
-% \global\output{\balancedmulticolumnsout}%
-% \else
-% \goodbreak
-% \fi
-% \eject % the prevdepth is important, try e.g. toclist in
-% \prevdepth\zeropoint % columns before some noncolumned text text
-% \global\output\singlecolumnout
-% \global\output{\the\mainoutput}% % % % % todo
-% \ifvoid\precolumnbox\else
-% \unvbox\precolumnbox
-% \fi
-% \global\precolumnboxheight\zeropoint
-% \endgroup % here
-% \nofcolumns\plusone
-% \setvsize % the outer one!
-% \checkendcolumnfootnotes
-% \dosomebreak\allowbreak
-% \restoresavedfloats}
+\chardef\multicolumnendsyncmethod\plusone % 1: old sync 2: new sync (cont-loc/project) / may fail ! ! ! !
\def\endmulticolumns
{%\par
- \vskip\lineheight\vskip-\lineheight % take footnotes into account
+ \ifnum\multicolumnendsyncmethod=\plustwo
+ \synchronizeoutput
+ \else
+ \vskip\lineheight\vskip-\lineheight % take footnotes into account
+ \fi
\dontshowcomposition
\doflushcolumnfloat % added recently
%\doflushcolumnfloats % no, since it results in wrong top floats
\flushnotes % before start of columns
\par
\ifbalancecolumns
- \global\output{\continuousmulticolumnsout}%
- \goodbreak
+ \ifnum\multicolumnendsyncmethod=\plusone
+ \global\output{\continuousmulticolumnsout}%
+ \goodbreak
+ \fi
\global\output{\balancedmulticolumnsout}%
\else
\goodbreak
@@ -635,14 +580,36 @@
\edef\maxcolumndepth{\the\dp\currentcolumnbox}%
\fi}}
-\chardef\columnedtopflushmethod\plusone
+\chardef\multicolumntopflushmethod\plusone % 0: no correction, 1: correction when topstuff, 2: correction, 3: correction++
+\chardef\multicolumntopalignmethod\plustwo % 0: nothing, 1: force grid, 2: follow grid
+
+\def\flushprecolumnboxnogrid
+ {\unvbox\precolumnbox}
+
+\def\flushprecolumnboxongrid
+ {\scratchdimen\savedpagetotal
+ \advance\scratchdimen -\ht\precolumnbox
+ \advance\scratchdimen -\dp\precolumnbox
+ \advance\scratchdimen -\topskip
+ \box\precolumnbox
+ \kern\scratchdimen}
+
+\newconditional\someprecolumncontent
\def\flushcolumnedpage#1%
{\bgroup
+ \ifvoid\precolumnbox
+ \setfalse\someprecolumncontent % will be set elsewhere
+ \else
+ \settrue\someprecolumncontent
+\mkprocessboxcontents\precolumnbox
+ \fi
\forgetall
\setmulticolumnsout
\showcomposition
\setmaxcolumndimensions
+ \dohandleallcolumns
+ {\mkprocesscolumncontents\currentcolumnbox}%
\postprocesscolumns
\dohandleallcolumns % \hbox i.v.m. \showcomposition
{\global\setbox\currentcolumnbox\hbox to \localcolumnwidth
@@ -657,6 +624,7 @@
{\hbox to \finalcolumntextwidth
{\hskip\colleftskip\relax % new, \relax needed
\ifreversecolumns
+ \popsplitproperties % else wrong color stack
\@EA\dohandlerevcolumns
\else
\@EA\dohandleallcolumns
@@ -685,41 +653,54 @@
\hskip-\columntextwidth
\restoretextcolor{\box\scratchbox}}%
\postprocesscolumnpagebox % new, acts upon \box\columnpagebox
- \ifvoid\precolumnbox
- \else
+ \ifconditional\someprecolumncontent
+ \settrue\someprecolumncontent
% next some incredible crappy code
- \ifgridsnapping
- % somehow this junk fails in pascal
- \scratchdimen\savedpagetotal
- \advance\scratchdimen -\ht\precolumnbox
- \advance\scratchdimen -\dp\precolumnbox
- \advance\scratchdimen -\topskip
- \box\precolumnbox
- \kern\scratchdimen
+ \ifcase\multicolumntopalignmethod
+ \flushprecolumnboxnogrid % not on grid
+ \or
+ \flushprecolumnboxongrid % force on grid
+ \else\ifgridsnapping % somehow this junk fails in pascal
+ \flushprecolumnboxongrid % obey grid settings, force on grid
\else
- \unvbox\precolumnbox
- \fi
+ \flushprecolumnboxnogrid % ignore grid settings, not on grid
+ \fi \fi
\fi
\global\precolumnboxheight\zeropoint
\setvsize
- \dosomebreak\nobreak
- \ifgridsnapping \else
- \ifcase\columnedtopflushmethod
+ \dosomebreak\nobreak % hm, only needed when topstuff
+ \ifgridsnapping
+ \else
+ \ifcase\multicolumntopflushmethod
% sometimes method 1 goes wrong, so we need a way out; best sort this out
% when we run into it again
\or
% \input tufte \startcolumns \showbaselines \input tufte \stopcolumns \input tufte
- \scratchdimen\topskip
- \advance\scratchdimen -\openstrutheight
+ \ifconditional\someprecolumncontent
+% \scratchdimen\topskip
+% \advance\scratchdimen -\openstrutheight
+% \nointerlineskip
+% \vskip-\scratchdimen
+ \nointerlineskip
+ \vskip\dimexpr\openstrutheight-\topskip\relax
+ \fi
+ \or
+% \scratchdimen\topskip
+% \advance\scratchdimen -\openstrutheight
+% \nointerlineskip
+% \vskip-\scratchdimen
\nointerlineskip
- \vskip-\scratchdimen
+ \vskip\dimexpr\openstrutheight-\topskip\relax
\or
% untested but maybe handy
- \scratchdimen\topskip
- \advance\scratchdimen -\openstrutheight
+% \scratchdimen\topskip
+% \advance\scratchdimen -\openstrutheight
+% \nointerlineskip
+% \vskip-\scratchdimen
+% \vskip-\lineheight
+% \vbox{\strut}%
\nointerlineskip
- \vskip-\scratchdimen
- \vskip-\lineheight
+ \vskip\dimexpr\openstrutheight-\topskip-\lineheight\relax
\vbox{\strut}%
\fi
\fi
@@ -920,34 +901,6 @@
\fi
\fi}
-% \def\overlaycolumnfootnotes % VERVANGEN !!!
-% {\relax
-% \ifcase\clevernotes\else
-% \checknotepresence
-% \ifnotespresent
-% % the note box has the depth of the notefont
-% % because a column (i.e. first column has no depth,
-% % we need to anchor top down)
-% \bgroup
-% \scratchdimen\ht\firstcolumnbox
-% \advance\scratchdimen -\openstrutdepth % \strutdp
-% \getnoflines\scratchdimen
-% \advance\noflines -2
-% \scratchdimen\noflines\lineheight
-% \advance\scratchdimen \topskip
-% \setbox0\hbox
-% {\lower\scratchdimen\vbox{\placenoteinserts}}%
-% \ht0=\openstrutheight % \strutht
-% \dp0=\openstrutdepth % \strutdp
-% \scratchdimen\ht\lastcolumnbox
-% \global\setbox\lastcolumnbox\vbox to \scratchdimen
-% {\box\lastcolumnbox
-% \vskip-\scratchdimen
-% \restoretextcolor{\box0}}%
-% \egroup
-% \fi
-% \fi}
-
\def\overlaycolumnfootnotes
{\relax
\ifcase\clevernotes
@@ -961,7 +914,7 @@
\bgroup
\ifcase\clevernotes\or
\getmulticolumnlines
- \advance\nofcolumnlines -2 % ?
+ \advance\nofcolumnlines \minustwo
\scratchdimen\nofcolumnlines\lineheight
\advance\scratchdimen \topskip
\setbox0\hbox
@@ -978,7 +931,7 @@
\scratchdimen\ht\firstcolumnbox
\advance\scratchdimen -\openstrutdepth % \strutdp
\getnoflines\scratchdimen
- \advance\noflines -2
+ \advance\noflines \minustwo
\scratchdimen\noflines\lineheight
\advance\scratchdimen \topskip
\setbox0\hbox
@@ -1213,6 +1166,7 @@
\egroup
\fi
\else
+ % a one liner is not properly handled here, so best rewrite the text then
\showmessage\m!columns{10}\empty
\global\setbox\firstcolumnbox\vbox{\unvbox0}%
\fi
@@ -1586,7 +1540,7 @@
\nofcolumns\@@kln\relax
\processaction
[\@@klrule]
- [ \v!on=>\let\betweencolumns\linebetweencolumns,
+ [ \v!on=>\let\betweencolumns\linebetweencolumns,
\v!off=>\let\betweencolumns\spacebetweencolumns,
\s!default=>\let\betweencolumns\spacebetweencolumns,
\s!unknown=>\let\betweencolumns\@@klrule]}
diff --git a/Master/texmf-dist/tex/context/base/page-new.tex b/Master/texmf-dist/tex/context/base/page-new.tex
index 8158f2e9786..0b047ffbe6f 100644
--- a/Master/texmf-dist/tex/context/base/page-new.tex
+++ b/Master/texmf-dist/tex/context/base/page-new.tex
@@ -1,3 +1,15 @@
+%D \module
+%D [ file=page-new,
+%D version=2000.10.20,
+%D title=\CONTEXT\ Page Macros,
+%D subtitle=Page New,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
\unprotect
% % % NOT ENGLISH % % %
diff --git a/Master/texmf-dist/tex/context/base/page-num.tex b/Master/texmf-dist/tex/context/base/page-num.tex
index d9f3bcdc0bb..404974f82b5 100644
--- a/Master/texmf-dist/tex/context/base/page-num.tex
+++ b/Master/texmf-dist/tex/context/base/page-num.tex
@@ -94,7 +94,7 @@
\def\savenofsubpages
{\ifsubpaging
\showmessage\m!layouts6{\newnofsubpages,\the\subpageno}%
- \savetwopassdata{\s!subpage}{\newnofsubpages}{\the\subpageno}%
+ \immediatesavetwopassdata{\s!subpage}{\newnofsubpages}{\the\subpageno}%
\fi}
\def\setsubpagenumbers
@@ -117,7 +117,7 @@
\global\resettingsubpagenumberfalse
\fi
\ifsubpaging
- \edef\oldsubpage{\the\subpageno}%
+ \xdef\oldsubpage{\the\subpageno}%
\incrementnumber[\s!subpage]%
\global\subpageno\rawnumber[\s!subpage]\relax
\ifnum\subpageno=\plusone
diff --git a/Master/texmf-dist/tex/context/base/page-one.tex b/Master/texmf-dist/tex/context/base/page-one.tex
index b1931dd1e98..fd4f55387f8 100644
--- a/Master/texmf-dist/tex/context/base/page-one.tex
+++ b/Master/texmf-dist/tex/context/base/page-one.tex
@@ -198,7 +198,12 @@
\fakepagenotes}% was \fakenotes, but wrong! (check with \setupalign[height])
\ifbottomnotes
\ifgridsnapping
- \getnoflines\textheight
+\ifcase\layoutlines % todo: make macro of this
+ \getrawnoflines\textheight
+\else
+ \noflines\layoutlines
+\fi
+% \getnoflines\textheight
\advance\noflines \minusone
\scratchdimen\noflines\lineheight
\advance\scratchdimen \topskip
@@ -230,6 +235,28 @@
\newif\iftopofinsert
+% \def\OTRONEdosettopinserts
+% {\bgroup
+% \ifsomefloatwaiting
+% \noffloatinserts\zerocount
+% \let\totaltopinserted\!!zeropoint
+% \OTRONEdodosettopinserts
+% \ifnum\@@bknbottom=\zerocount
+% \ifnum\@@bknlines>\zerocount
+% \ifdim\totaltopinserted>\zeropoint\relax
+% \dimen0=\lineheight
+% \dimen0=\@@bknlines\dimen0
+% \advance\dimen0 \totaltopinserted\relax
+% \ifdim\dimen0>\textheight
+% \showmessage\m!floatblocks8\@@bknlines
+% \vfilll\eject
+% \fi
+% \fi
+% \fi
+% \fi
+% \fi
+% \egroup}
+
\def\OTRONEdosettopinserts
{\bgroup
\ifsomefloatwaiting
@@ -239,10 +266,7 @@
\ifnum\@@bknbottom=\zerocount
\ifnum\@@bknlines>\zerocount
\ifdim\totaltopinserted>\zeropoint\relax
- \dimen0=\lineheight
- \dimen0=\@@bknlines\dimen0
- \advance\dimen0 \totaltopinserted\relax
- \ifdim\dimen0>\textheight
+ \ifdim\dimexpr\@@bknlines\lineheight+\totaltopinserted\relax>\textheight
\showmessage\m!floatblocks8\@@bknlines
\vfilll\eject
\fi
@@ -260,9 +284,7 @@
\else
\topofinsertfalse
\fi
- \global\advance\topinserted \ht\floatbox
- \global\advance\topinserted \dp\floatbox
- \global\advance\topinserted \floatbottomskip\relax
+ \global\advance\topinserted\dimexpr\ht\floatbox+\dp\floatbox+\floatbottomskip\relax
\ifdim\topinserted<\textheight\relax
\xdef\totaltopinserted{\the\topinserted}%
\insert\topins
@@ -339,14 +361,38 @@
\ifflushingfloats \else
\OTRONEdosettopinserts
\OTRONEdosetbotinserts
+ \ifsomefloatwaiting
+ \doif\@@bkcache\v!no\doflushfloats
+ \fi
\fi}
+% \def\OTRONEdotopinsertions
+% {\ifvoid\topins\else
+% \ifgridsnapping
+% \box\topins
+% \vskip-\topskip \vskip\strutheight % [xx] new: see icare topbleed
+% \else
+% \unvbox\topins
+% \fi
+% \fi
+% \global\topinserted\zeropoint}
+
+\chardef\topinserttopskipmode=0 % 1 no topskip
+
\def\OTRONEdotopinsertions
{\ifvoid\topins\else
\ifgridsnapping
\box\topins
- \vskip-\topskip \vskip\strutheight % [xx] new: see icare topbleed
+ \vskip-\topskip
+ \vskip\strutheight % [xx] new: see icare topbleed
\else
+ \ifcase\topinserttopskipmode
+ % 0: default, do nothing
+ \or
+ % 1: no topskip (crossed fingers)
+ \vskip-\topskip
+ \vskip\strutheight
+ \fi
\unvbox\topins
\fi
\fi
@@ -442,18 +488,13 @@
\else
% new per 31/5/2004, should be an option, only one column mode
\begingroup
- \scratchdimen\pagetotal
- \advance\scratchdimen\lineheight % maybe strutheight
+ \scratchdimen\dimexpr\pagetotal+\lineheight\relax
\ifdim\scratchdimen>\pagegoal
\goodbreak % hack ? needed in icare-az
\fi
% should be an option
\endgroup
- \dimen0 \pagetotal
- \advance\dimen0 \ht\floatbox
- \advance\dimen0 \dp\floatbox
- \advance\dimen0 \floattopskip
- \advance\dimen0 -\pageshrink % toegevoegd
+ \dimen0\dimexpr\pagetotal+\ht\floatbox+\dp\floatbox+\floattopskip-\pageshrink\relax
%\message{c:\the\mofcolumns,t:\the\pagetotal,g:\the\pagegoal}%\wait
\dimen2\pagegoal
\relax % needed
diff --git a/Master/texmf-dist/tex/context/base/page-par.tex b/Master/texmf-dist/tex/context/base/page-par.tex
new file mode 100644
index 00000000000..fa1723d37ce
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/page-par.tex
@@ -0,0 +1,58 @@
+%D \module
+%D [ file=page-par, % copied from page-lin
+%D version=1997.03.31,
+%D title=\CONTEXT\ Core Macros,
+%D subtitle=Line Numbering,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{Context Core Macros / Paragraph Numbering}
+
+\unprotect
+
+\newcount\internalparagraphnumber
+
+\def\setupparagraphnumbering
+ {\dosingleempty\dosetupparagraphnumbering}
+
+\def\dosetupparagraphnumbering[#1]%
+ {\getparameters
+ [\??ph][#1]%
+ \processaction
+ [\@@phstate]
+ [\v!start=>\let\showparagraphnumber\doshowparagraphnumberA,
+ \v!stop=>\let\showparagraphnumber\relax,
+ \v!line=>\let\showparagraphnumber\doshowparagraphnumberB,
+ \v!reset=>\global\internalparagraphnumber\zerocount
+ \let\showparagraphnumber\doshowparagraphnumberA]}
+
+\def\dodoshowparagraphnumber
+ {\global\advance\internalparagraphnumber \plusone
+ \inleftmargin % \tf normalizes em
+ {\tf{\doattributes\??ph\c!style\c!color{\the\internalparagraphnumber}}%
+ \kern\@@phdistance}}
+
+\def\doshowparagraphnumberA
+ {\ifprocessingverbatim
+ \iflinepar\dodoshowparagraphnumber\fi
+ \else
+ \dodoshowparagraphnumber
+ \fi}
+
+\def\doshowparagraphnumberB
+ {\ifnumberinglines
+ \doshowparagraphnumberA
+ \fi}
+
+\setupparagraphnumbering
+ [\c!state=\v!stop,
+ \c!style=,
+ \c!color=,
+ \c!distance=\ifcase\linenumberlocation2em\else\!!zeropoint\fi] % will change
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/page-str.tex b/Master/texmf-dist/tex/context/base/page-str.tex
index ed1638029c5..1a68adf521e 100644
--- a/Master/texmf-dist/tex/context/base/page-str.tex
+++ b/Master/texmf-dist/tex/context/base/page-str.tex
@@ -145,8 +145,8 @@
\def\setmarknote[#1]#2%
{\doglobal\incrementvalue{mn:#1:n}%
- \setgvalue{mn:#1:t:\getvalue{mn:#1:n}}{#1}%
- \expanded{\marking[#1]{\getvalue{mn:#1:n}}}}
+ \setgvalue{mn:#1:t:\getvalue{mn:#1:n}}{#2}%
+ \expanded{\marking[mn:#1]{\getvalue{mn:#1:n}}}}
\def\flushmarknotes[#1]% assumes split
{\begingroup
diff --git a/Master/texmf-dist/tex/context/base/page-txt.tex b/Master/texmf-dist/tex/context/base/page-txt.tex
index ecc82c46ec0..c39d592ab5a 100644
--- a/Master/texmf-dist/tex/context/base/page-txt.tex
+++ b/Master/texmf-dist/tex/context/base/page-txt.tex
@@ -67,7 +67,7 @@
\def\setuplayouttext
{\dotripleempty\dosetuplayouttext}
-\def\dosetuplayouttext[#1][#2][#3]%
+\def\dosetuplayouttext[#1][#2][#3]% beware, non global
{\ifthirdargument
\getparameters[\??tk#1#2][#3]%
\else
@@ -196,7 +196,7 @@
\def\dosingletexts#1#2#3#4#5#6%
{\bgroup
- \convertargument#6\to\ascii
+ \defconvertedargument\ascii{#6}%
\doifsomething\ascii
{\doattributes{#1#2}#3#4%
{\placetextlinestrut{#1}% here !
@@ -428,6 +428,7 @@
\fi
\hskip\leftmargindistance
\egroup
+ \mkprocesspagecontents{#2}%
\settextpagecontent\scratchpagebox{#1}{#2}%
\setbox\scratchpagebox\vbox
{\startlayoutcomponent{textbody}{text body}%
diff --git a/Master/texmf-dist/tex/context/base/ppchtex.tex b/Master/texmf-dist/tex/context/base/ppchtex.tex
index f2a022b20d5..13c457800b5 100644
--- a/Master/texmf-dist/tex/context/base/ppchtex.tex
+++ b/Master/texmf-dist/tex/context/base/ppchtex.tex
@@ -19,7 +19,7 @@
% constante van phantom in definitie ONE: \setchemicaltextwidth 300
%
% it would be interesting to rewrite this module with todays
-% experiences and new context functionality, mybe ...
+% experiences and new context functionality, maybe ...
% Deze module ondersteunt het zetten van chemische
% (structuur)formules. Hoewel de macro' zijn afgestemd op
@@ -297,7 +297,7 @@
% and/or LaTeX2e we had to force \@@dochemicalstyle. Otherwise
% some weird \nullfont error comes up.
-\def\beginlatexmathmodehack%
+\def\beginlatexmathmodehack
{\ifmmode
\let\endlatexmathmodehack=\relax
\else
@@ -320,7 +320,7 @@
\global\loweredsubscriptstrue
\endlatexmathmodehack}
-\def\resetsubscripts%
+\def\resetsubscripts
{\ifloweredsubscripts
\beginlatexmathmodehack
\def\doresetsubscript##1##2%
@@ -337,14 +337,14 @@
\endlatexmathmodehack
\fi}
-\def\doresetsubscripts%
+\def\doresetsubscripts
{\resetsubscripts}
-\def\sethighsubscripts%
+\def\sethighsubscripts
{\resetsubscripts
\let\dosetsubscripts=\relax}
-\def\setlowsubscripts%
+\def\setlowsubscripts
{\def\dosetsubscripts{\setsubscripts}}
\setlowsubscripts
@@ -771,7 +771,7 @@
\def\@@chemicalpostponed{}%
\complexorsimpleempty\startchemical}
-\def\startchemical%
+\def\startchemical
{\bgroup % t.b.v. ungrouped floats
% \loadchemicaldimensions
% \ifskipchemical
@@ -785,7 +785,7 @@
% \fi
\dostartchemical}
-\def\stopchemical%
+\def\stopchemical
{%\ifskipchemical
% \getchemicaldimensions{\dimen0}{\dimen2}{\dimen4}%
% \dimen8=\dimen2\advance\dimen8 by \dimen4
@@ -864,7 +864,7 @@
\setcoordinatesystem point at {\the\horchemical} {\the\verchemical}
\fi}
-\def\resetchemicalcoordinates%
+\def\resetchemicalcoordinates
{\horchemical=0
\verchemical=0
\edef\chemicalxoffset{0}%
@@ -875,7 +875,7 @@
\setcoordinatesystem point at 0 0
\fi}
-\def\restorechemicalcoordinates%
+\def\restorechemicalcoordinates
{%\writestatus{ppchtex}{restoring \the\horchemical,\the\verchemical}%
\edef\chemicalxoffset{\the\horchemical}%
\edef\chemicalyoffset{\the\verchemical}%
@@ -1745,7 +1745,7 @@
{$\simplechemical{#1}{#2}{#3}$%
\egroup} % erbij
-\def\simplechemical%
+\def\simplechemical
{\ifinner
\innerchemicaltrue
\else
@@ -1865,7 +1865,7 @@
\processcommalist[\@@chemicaloffset,#1]\dodoprocesschemical}%
\ignorespaces}
-\def\chemicaloxidation#1#2#3%
+\unexpanded\def\chemicaloxidation#1#2#3%
{\chemicaltop
{\ifnum#20=0
0%
@@ -1879,11 +1879,11 @@
\def\chemicallfraction{\ifinchemical.1\else.1\fi}
\def\chemicalrfraction{\ifinchemical.1\else.1\fi}
-\def\chemicaltighttext%
+\def\chemicaltighttext
{\def\chemicaltfraction{\ifinchemical.3\else.6\fi}%
\def\chemicalbfraction{\ifinchemical.2\else.4\fi}%
- \def\chemicallfraction{\ifinchemical0\else0\fi}%
- \def\chemicalrfraction{\ifinchemical0\else0\fi}}
+ \def\chemicallfraction{\ifinchemical 0\else 0\fi}%
+ \def\chemicalrfraction{\ifinchemical 0\else 0\fi}}
\def\dochemicaltop#1#2#3#4%
{\vbox
@@ -2067,7 +2067,7 @@
\setvalue{\s!chemical\c!x1}{0}
\setvalue{\s!chemical\c!y1}{0}
-\def\executechemicalSAVE%
+\def\executechemicalSAVE
{%\writestatus{ppchtex}{saving \the\horchemical,\the\verchemical}%
\advance\chemicalstack by 1
\letvalue {\s!chemical n\the\chemicalstack}=\chemicalname
@@ -2080,7 +2080,7 @@
\doifdefined{\s!executechemical#1}{\getvalue{\s!executechemical#1}[]}%
\let\processchemical=\oldprocesschemical}
-\def\executechemicalRESTORE%
+\def\executechemicalRESTORE
{\ifnum\chemicalstack=0\relax
\horchemical=\getvalue{\s!chemical x1}\relax
\verchemical=\getvalue{\s!chemical y1}\relax
@@ -2142,18 +2142,18 @@
{\ifdim\ht4>\!!zeropoint\box4\fi}% % expands to \empty in test
\egroup}
-\def\chemicalsingleouterarrow%
+\def\chemicalsingleouterarrow
{\dochemicalouterarrow
{\hbox to \dimen2{\rightarrowfill}}}
-\def\chemicaldoubleouterarrow%
+\def\chemicaldoubleouterarrow
{\dochemicalouterarrow
{\lower.5\ht0\vbox
{\offinterlineskip
\hbox to \dimen2{\rightarrowfill}
\hbox to \dimen2{\leftarrowfill}}}}
-\def\chemicaltwintipouterarrow%
+\def\chemicaltwintipouterarrow
{\dochemicalouterarrow
{\hbox
{\hbox to \dimen2{\rightarrowfill}%
@@ -2366,7 +2366,7 @@
MOV##4##5=>\processchemicaltranslate{##4##5},
DIR##4##5=>\processchemicaldirection{##4##5},
OFF##4##5=>\processchemicaloffset{##4##5},
-CCD##4##5=>\processchemicaldottsegment{CC}{##4##5},
+ CCD##4##5=>\processchemicaldottsegment{CC}{##4##5},
LDD##4##5=>\processchemicaldashedlinesegment{DB1}{##4##5}%
\processchemicallinesegment{DB2}{##4##5},
RDD##4##5=>\processchemicallinesegment{DB1}{##4##5}%
@@ -2638,10 +2638,10 @@ CCD##4##5=>\processchemicaldottsegment{CC}{##4##5},
-RB##4=>\processchemicaldeltalinesegment{-R}{##4},
+RB##4=>\processchemicaldeltalinesegment{+R}{##4},
CRZ##4=>\processchemicaltextelement{CRZ}{##4}{#1}{0}{},
-RTN##4=>\processchemicaltextconstant{RTN}{##4}{\chemicaltextelementnumber}{0},
-RTT##4=>\processchemicaltextelement{RTN}{##4}{#1}{0}{},
-RBN##4=>\processchemicaltextconstant{RBN}{##4}{\chemicaltextelementnumber}{0},
-RBT##4=>\processchemicaltextelement{RBN}{##4}{#1}{0}{},
+ RTN##4=>\processchemicaltextconstant{RTN}{##4}{\chemicaltextelementnumber}{0},
+ RTT##4=>\processchemicaltextelement{RTN}{##4}{#1}{0}{},
+ RBN##4=>\processchemicaltextconstant{RBN}{##4}{\chemicaltextelementnumber}{0},
+ RBT##4=>\processchemicaltextelement{RBN}{##4}{#1}{0}{},
-SS##4=>\processchemicallinesegment{-SS}{##4},
+SS##4=>\processchemicallinesegment{+SS}{##4},
CCD##4=>\processchemicaldottsegment{CC}{##4},
@@ -2650,8 +2650,8 @@ RBT##4=>\processchemicaltextelement{RBN}{##4}{#1}{0}{},
RB##3##4=>\processchemicaldeltalinesegment{R}{##3##4},
ZN##3##4=>\processchemicaltextconstant{ZN}{##3##4}{\chemicaltextelementnumber}{0},
ZT##3##4=>\processchemicaltextelement{ZN}{##3##4}{#1}{0}{},
-RN##3##4=>\processchemicaltextconstant{RN}{##3##4}{\chemicaltextelementnumber}{0},
-RT##3##4=>\processchemicaltextelement{RN}{##3##4}{#1}{0}{},
+ RN##3##4=>\processchemicaltextconstant{RN}{##3##4}{\chemicaltextelementnumber}{0},
+ RT##3##4=>\processchemicaltextelement{RN}{##3##4}{#1}{0}{},
AU##3##4=>\processchemicaluparrowsegment{A}{##3##4},
AD##3##4=>\processchemicaldownarrowsegment{A}{##3##4},
CC##3##4=>\processchemicalcircsegment{CC}{##3##4},
@@ -3367,7 +3367,8 @@ RT##3##4##5=>\processchemicaltextelement{RN}{##3##4##5}{#1}{0}{},
%D \item styles hooked into \CONTEXT\ style mechanism
%D \item support for color and rulethickness (mp mode only)
%D \item position tracking
-%D \stopopsoming
+%D \stopitemize
+
\ifCONTEXT \else \protect \endinput \fi
diff --git a/Master/texmf-dist/tex/context/base/prop-ini.tex b/Master/texmf-dist/tex/context/base/prop-ini.tex
index db6a45c8d6b..084842fdd37 100644
--- a/Master/texmf-dist/tex/context/base/prop-ini.tex
+++ b/Master/texmf-dist/tex/context/base/prop-ini.tex
@@ -29,24 +29,12 @@
% more efficient:
\def\currentproperty {\csname\??py:c:\number\propertylevel\endcsname} % string
-
-% \def\previouspropertylevel{\numexpr(\csname\??py:p:\currentpropertytype\endcsname+1)}
-% \letvalue{\??py:p:0}\empty
-
\def\currentpropertytype {\csname\??py\currentproperty\c!type\endcsname}
\def\docheckproperty % watch the s instead of e
{\csname\s!check\currentpropertytype property\endcsname
\global\expandafter\let\csname\??py\s!check\currentproperty\endcsname\empty}
-% \def\checkproperty[#1]%
-% {\bgroup
-% \def\currentproperty{#1}%
-% \docheckproperty
-% \egroup}
-%
-% oeps, was wrong, no reset
-
\def\checkproperty[#1]%
{\bgroup
\def\currentproperty{#1}%
@@ -82,19 +70,9 @@
\global\advance\previouspropertylevel\minusone
\global\advance\propertylevel\minusone}
-% \def\propertyparameter #1{\csname\??py\currentproperty#1\endcsname}
-% \def\checkedpropertyparameter#1{\executeifdefined{\??py\currentproperty#1}}
-
\def\defineproperty
{\dotripleempty\dodefineproperty}
-% \def\dodefineproperty[#1][#2][#3]% global ! ! !
-% {\ifundefined{\??py#1\c!globaal}%
-% ... actions ...
-% \fi}
-%
-% since we may perform tests each time before a call, we prefer the faster:
-
\def\defineproperty
{\dotripleempty\dodefineproperty}
@@ -122,14 +100,14 @@
\doifelsevalue{\??py#1\c!method}\v!command
{\doifelsevalue{\??py#1\c!global}\v!yes
{\setgvalue{\e!start#1}{\dostartproperty{#1}}%
- \letgvalue{\e!stop#1}\dostopproperty}%
+ \letgvalue{\e!stop #1}\dostopproperty}%
{\setgvalue{\e!start#1}{\dostartgproperty{#1}}%
- \letgvalue{\e!stop#1}\dostopgproperty}}%
+ \letgvalue{\e!stop #1}\dostopgproperty}}%
{\doifelsevalue{\??py#1\c!global}\v!yes
{\setgvalue{\e!start#2}[##1]{\dostartproperty{##1}}%
- \letgvalue{\e!stop#2}\dostopproperty}%
+ \letgvalue{\e!stop #2}\dostopproperty}%
{\setgvalue{\e!start#2}[##1]{\dostartgproperty{##1}}%
- \letgvalue{\e!stop#2}\dostopgproperty}}}
+ \letgvalue{\e!stop #2}\dostopgproperty}}}
\def\nododefineproperty[#1][#2][#3]%
{}
@@ -146,17 +124,6 @@
\getparameters[\??py][#1]%
\fi}
-% \def\propertyparameter#1% expands to #1 when not defined (see \define...)
-% {\csname\??py
-% \ifcsname\??py\currentproperty#1\endcsname
-% \currentproperty#1%
-% \else\ifcsname\??py\currentpropertytype#1\endcsname
-% \currentpropertytype#1%
-% \else
-% :n:\currentproperty
-% \fi\fi
-% \endcsname}
-
\letvalue{\??py\s!empty}\empty
% beware, normally \*parameter concerns the current one
diff --git a/Master/texmf-dist/tex/context/base/prop-lay.tex b/Master/texmf-dist/tex/context/base/prop-lay.tex
index 0e5038d1999..f29298976b4 100644
--- a/Master/texmf-dist/tex/context/base/prop-lay.tex
+++ b/Master/texmf-dist/tex/context/base/prop-lay.tex
@@ -17,14 +17,6 @@
\unprotect
-% \def\checklayerproperty
-% {\dodefineviewerlayer
-% \currentproperty % tag
-% {\checkedpropertyparameter\c!title\currentproperty}%
-% {\checkedpropertyparameter\c!state\v!start}% visible or hidden
-% {0}% type (1=frozen)
-% {0}}% printable
-
\def\checklayerproperty
{\doifelse{\checkedpropertyparameter\v!printable\currentproperty}\v!no
{\def\printviewerlayer{0}}
diff --git a/Master/texmf-dist/tex/context/base/prop-mis.mkii b/Master/texmf-dist/tex/context/base/prop-mis.mkii
new file mode 100644
index 00000000000..3b372546dfe
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/prop-mis.mkii
@@ -0,0 +1,155 @@
+%D \module
+%D [ file=prop-mis,
+%D version=2004.05.29, % some code moved from private modules
+%D title=\CONTEXT\ Property Macros,
+%D subtitle=Miscelaneous,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\unprotect
+
+%D Overprint cum suis.
+
+\definepropertyhandler \v!overprint {\dostartoverprint}
+\definepropertyhandler \v!knockout {\dostopoverprint }
+
+\def\startoverprintproperty
+ {\ifincolor
+ \propertyhandler\currentproperty
+ \dooverprintmark\currentproperty
+ \fi}
+
+\def\stopoverprintproperty
+ {\ifincolor
+ \ifcase\currentpropertylevel\or
+ \dostopoverprint
+ \dooverprintmark\empty
+ \else
+ \propertyhandler\previousproperty
+ \dooverprintmark\previousproperty
+ \fi
+ \fi}
+
+\rawnewmark\overprintmark
+
+\def\dooverprintmark#1%
+ {\ifinpagebody \else \ifinframed \else
+ \expanded{\rawsetmark\noexpand\overprintmark{#1}}%
+ \fi \fi}
+
+\def\pushoverprintproperty
+ {\doifsomething{\rawgetbotmark\overprintmark}\dostopoverprint}
+
+\def\popoverprintproperty
+ {\doifsomething{\rawgetbotmark\overprintmark}%
+ {\propertyhandler{\rawgetbotmark\overprintmark}}}
+
+\def\popsplitoverprintproperty
+ {\getsplitmarks\overprintmark % hier wel
+ \doifsomething{\rawgetsplitbotmark\overprintmark}%
+ {\propertyhandler{\rawgetsplitbotmark\overprintmark}}}
+
+\appendtoks \pushoverprintproperty \to \everypushproperties
+\appendtoks \popoverprintproperty \to \everypopproperties
+\appendtoks \popsplitoverprintproperty \to \everypopsplitproperties
+
+%D Negative cum suis.
+
+\definepropertyhandler \v!negative {\dostartnegative}
+\definepropertyhandler \v!positive {\dostopnegative }
+
+\def\startnegativeproperty
+ {\ifincolor
+ \propertyhandler\currentproperty
+ \donegativemark\currentproperty
+ \fi}
+
+\def\stopnegativeproperty
+ {\ifincolor
+ \ifcase\currentpropertylevel\or
+ \dostopnegative
+ \donegativemark\empty
+ \else
+ \propertyhandler\previousproperty
+ \donegativemark\previousproperty
+ \fi
+ \fi}
+
+\rawnewmark\negativemark
+
+\def\donegativemark#1%
+ {\ifinpagebody \else \ifinframed \else
+ \expanded{\rawsetmark\noexpand\negativemark{#1}}%
+ \fi \fi}
+
+\def\pushnegativeproperty
+ {\doifsomething{\rawgetbotmark\negativemark}\dostopnegative}
+
+\def\popnegativeproperty
+ {\doifsomething{\rawgetbotmark\overprintmark}%
+ {\propertyhandler{\rawgetbotmark\negativemark}}}
+
+\def\popsplitnegativeproperty
+ {\getsplitmarks\negativemark % hier wel
+ \doifsomething{\rawgetsplitbotmark\negativemark}%
+ {\propertyhandler{\rawgetsplitbotmark\negativemark}}}
+
+\appendtoks \pushnegativeproperty \to \everypushproperties
+\appendtoks \popnegativeproperty \to \everypopproperties
+\appendtoks \popsplitnegativeproperty \to \everypopsplitproperties
+
+%D Effects.
+
+\definepropertyhandler \v!normal {0}
+\definepropertyhandler \v!inner {0}
+\definepropertyhandler \v!outer {1}
+\definepropertyhandler \v!both {2}
+\definepropertyhandler \v!hidden {3}
+
+\def\effectpropertydata#1%
+ {{\propertyhandler{#1}}%
+ {\propertyparameter{#1}\c!rulethickness}%
+ {\propertyparameter{#1}\c!stretch}}
+
+\def\starteffectproperty
+ {\expanded{\dostartfonteffect\effectpropertydata\currentproperty}%
+ \doeffectmark{\effectpropertydata\currentproperty}}
+
+\def\stopeffectproperty
+ {\dostopfonteffect
+ \ifcase\currentpropertylevel\or
+ \doeffectmark\empty
+ \else
+ \expanded{\dostartfonteffect\effectpropertydata\previousproperty}%
+ \doeffectmark{\effectpropertydata\previousproperty}%
+ \fi}
+
+\rawnewmark\effectmark
+
+\def\doeffectmark#1%
+ {\ifinpagebody \else \ifinframed \else
+ \expanded{\rawsetmark\noexpand\effectmark{#1}}% could be number
+ \fi \fi}
+
+\def\pusheffectproperty
+ {\doifsomething{\rawgetbotmark\effectmark}\dostopfonteffect}
+
+\def\popeffectproperty
+ {\doifsomething{\rawgetbotmark\effectmark}%
+ {\expanded{\dostartfonteffect\rawgetbotmark\effectmark}}}
+
+\def\popspliteffectproperty
+ {\getsplitmarks\effectmark
+ \doifsomething{\rawgetsplitbotmark\effectmark}%
+ {\expanded{\dostartfonteffect\rawgetsplitbotmark\effectmark}}}
+
+\appendtoks \pusheffectproperty \to \everypushproperties
+\appendtoks \popeffectproperty \to \everypopproperties
+\appendtoks \popspliteffectproperty \to \everypopsplitproperties
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/prop-mis.mkiv b/Master/texmf-dist/tex/context/base/prop-mis.mkiv
new file mode 100644
index 00000000000..ee292155efa
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/prop-mis.mkiv
@@ -0,0 +1,46 @@
+%D \module
+%D [ file=prop-mis,
+%D version=2004.05.29, % some code moved from private modules
+%D title=\CONTEXT\ Property Macros,
+%D subtitle=Miscelaneous,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\unprotect
+
+%D Overprint cum suis.
+
+\definepropertyhandler \v!overprint {\dotriggeroverprint\v!overprint}
+\definepropertyhandler \v!knockout {\dotriggeroverprint\v!knockout }
+
+\def\startoverprintproperty{\dotriggeroverprint\v!overprint}
+\def\stopoverprintproperty {\dotriggeroverprint\v!knockout }
+
+%D Negative cum suis.\def\dotriggeroverprint#1{\csname(os:#1)\endcsname}
+
+\definepropertyhandler \v!negative {\dotriggernegative\v!negative}
+\definepropertyhandler \v!positive {\dotriggernegative\v!positive}
+
+\def\startnegativeproperty{\dotriggernegative\v!negative}
+\def\stopnegativeproperty {\dotriggernegative\v!positive}
+
+%D Effects.
+
+\def\mktriggereffect#1%
+ {\dotriggereffect{#1}{\propertyparameter{#1}\c!stretch}{\propertyparameter{#1}\c!rulethickness}}
+
+\definepropertyhandler \v!normal {\mktriggereffect\v!normal}
+\definepropertyhandler \v!inner {\mktriggereffect\v!inner }
+\definepropertyhandler \v!outer {\mktriggereffect\v!outer }
+\definepropertyhandler \v!both {\mktriggereffect\v!both }
+\definepropertyhandler \v!hidden {\mktriggereffect\v!hidden}
+
+\def\starteffectproperty{\mktriggereffect\currentproperty}
+\def\stopeffectproperty {\mktriggereffect\v!normal }
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/prop-mis.tex b/Master/texmf-dist/tex/context/base/prop-mis.tex
index 769fc33f4ef..d78e0c5848c 100644
--- a/Master/texmf-dist/tex/context/base/prop-mis.tex
+++ b/Master/texmf-dist/tex/context/base/prop-mis.tex
@@ -26,199 +26,28 @@
\defineproperty[\v!overprint][\s!overprint] [\c!method=\v!command]
\defineproperty[\v!knockout] [\s!overprint] [\c!method=\v!command]
-\definepropertyhandler \v!overprint {\dostartoverprint}
-\definepropertyhandler \v!knockout {\dostopoverprint }
-
-\def\startoverprintproperty
- {\ifincolor
- \propertyhandler\currentproperty
- \dooverprintmark\currentproperty
- \fi}
-
-\def\stopoverprintproperty
- {\ifincolor
- \ifcase\currentpropertylevel\or
- \dostopoverprint
- \dooverprintmark\empty
- \else
- \propertyhandler\previousproperty
- \dooverprintmark\previousproperty
- \fi
- \fi}
-
-\rawnewmark\overprintmark
-
-\def\dooverprintmark#1%
- {\ifinpagebody \else \ifinframed \else
- \expanded{\rawsetmark\noexpand\overprintmark{#1}}%
- \fi \fi}
-
-\def\pushoverprintproperty
- {\doifsomething{\rawgetbotmark\overprintmark}\dostopoverprint}
-
-\def\popoverprintproperty
- {\doifsomething{\rawgetbotmark\overprintmark}%
- {\propertyhandler{\rawgetbotmark\overprintmark}}}
-
-\def\popsplitoverprintproperty
- {\getsplitmarks\overprintmark % hier wel
- \doifsomething{\rawgetsplitbotmark\overprintmark}%
- {\propertyhandler{\rawgetsplitbotmark\overprintmark}}}
-
-\appendtoks \pushoverprintproperty \to \everypushproperties
-\appendtoks \popoverprintproperty \to \everypopproperties
-\appendtoks \popsplitoverprintproperty \to \everypopsplitproperties
-
%D Negation.
\defineproperty [\v!negative] [\s!negative] [\c!method=\v!command]
\defineproperty [\v!positive] [\s!negative] [\c!method=\v!command]
-\definepropertyhandler \v!negative {\dostartnegative}
-\definepropertyhandler \v!positive {\dostopnegative }
-
-\def\startnegativeproperty
- {\ifincolor
- \propertyhandler\currentproperty
- \donegativemark\currentproperty
- \fi}
-
-\def\stopnegativeproperty
- {\ifincolor
- \ifcase\currentpropertylevel\or
- \dostopnegative
- \donegativemark\empty
- \else
- \propertyhandler\previousproperty
- \donegativemark\previousproperty
- \fi
- \fi}
-
-\rawnewmark\negativemark
-
-\def\donegativemark#1%
- {\ifinpagebody \else \ifinframed \else
- \expanded{\rawsetmark\noexpand\negativemark{#1}}%
- \fi \fi}
-
-\def\pushnegativeproperty
- {\doifsomething{\rawgetbotmark\negativemark}\dostopnegative}
-
-\def\popnegativeproperty
- {\doifsomething{\rawgetbotmark\overprintmark}%
- {\propertyhandler{\rawgetbotmark\negativemark}}}
-
-\def\popsplitnegativeproperty
- {\getsplitmarks\negativemark % hier wel
- \doifsomething{\rawgetsplitbotmark\negativemark}%
- {\propertyhandler{\rawgetsplitbotmark\negativemark}}}
-
-\appendtoks \pushnegativeproperty \to \everypushproperties
-\appendtoks \popnegativeproperty \to \everypopproperties
-\appendtoks \popsplitnegativeproperty \to \everypopsplitproperties
-
%D Special font effects.
\setupproperty
[\s!effect]
- [\c!rulethickness=.25pt,
- \c!stretch=1]
-
-\defineproperty [\v!inner] [\s!effect]
-\defineproperty [\v!outer] [\s!effect]
-\defineproperty [\v!both] [\s!effect]
-\defineproperty [\v!normal] [\s!effect]
-\defineproperty [\v!hidden] [\s!effect]
-
-\definepropertyhandler \v!normal {0}
-\definepropertyhandler \v!inner {0}
-\definepropertyhandler \v!outer {1}
-\definepropertyhandler \v!both {2}
-\definepropertyhandler \v!hidden {3}
-
-% \def\handleeffectproperty#1%
-% {\expanded{\dostartfonteffect
-% {\propertyhandler{#1}}%
-% {\propertyparameter{#1}\c!lijndikte}%
-% {\propertyparameter{#1}\c!rek}}}
-
-% \def\starteffectproperty
-% {\handleeffectproperty\currentproperty
-% \doeffectmark\currentproperty}
-
-% \def\stopeffectproperty
-% {\dostopfonteffect
-% \ifcase\currentpropertylevel\or
-% \doeffectmark\empty
-% \else
-% \handleeffectproperty\previousproperty
-% \doeffectmark\previousproperty
-% \fi}
-
-% \rawnewmark\effectmark
-
-% \def\doeffectmark#1%
-% {\ifinpagebody \else \ifinframed \else
-% \expanded{\rawsetmark\noexpand\effectmark{#1}}% could be number
-% \fi \fi}
-
-% \def\pusheffectproperty
-% {\doifsomething{\rawgetbotmark\effectmark}\dostopfonteffect}
-
-% \def\popeffectproperty
-% {\doifsomething{\rawgetbotmark\effectmark}%
-% {\handleeffectproperty{\rawgetbotmark\effectmark}}}
-
-% \def\popspliteffectproperty
-% {\getsplitmarks\effectmark
-% \doifsomething{\rawgetsplitbotmark\effectmark}%
-% {\handleeffectproperty{\rawgetsplitbotmark\effectmark}}}
-
-% \appendtoks \pusheffectproperty \to \everypushproperties
-% \appendtoks \popeffectproperty \to \everypopproperties
-% \appendtoks \popspliteffectproperty \to \everypopsplitproperties
-
-% %
-
-\def\effectpropertydata#1%
- {{\propertyhandler{#1}}%
- {\propertyparameter{#1}\c!rulethickness}%
- {\propertyparameter{#1}\c!stretch}}
-
-\def\starteffectproperty
- {\expanded{\dostartfonteffect\effectpropertydata\currentproperty}%
- \doeffectmark{\effectpropertydata\currentproperty}}
-
-\def\stopeffectproperty
- {\dostopfonteffect
- \ifcase\currentpropertylevel\or
- \doeffectmark\empty
- \else
- \expanded{\dostartfonteffect\effectpropertydata\previousproperty}%
- \doeffectmark{\effectpropertydata\previousproperty}%
- \fi}
-
-\rawnewmark\effectmark
-
-\def\doeffectmark#1%
- {\ifinpagebody \else \ifinframed \else
- \expanded{\rawsetmark\noexpand\effectmark{#1}}% could be number
- \fi \fi}
+ [\c!rulethickness=\zeropoint,
+ \c!stretch=0]
-\def\pusheffectproperty
- {\doifsomething{\rawgetbotmark\effectmark}\dostopfonteffect}
+\defineproperty [\v!inner] [\s!effect] [\c!rulethickness=.25pt]
+\defineproperty [\v!outer] [\s!effect] [\c!rulethickness=.25pt]
+\defineproperty [\v!both] [\s!effect] [\c!rulethickness=.25pt]
+\defineproperty [\v!normal] [\s!effect]
+\defineproperty [\v!hidden] [\s!effect]
-\def\popeffectproperty
- {\doifsomething{\rawgetbotmark\effectmark}%
- {\expanded{\dostartfonteffect\rawgetbotmark\effectmark}}}
+\defineproperty [\v!stretch] [\s!effect] [\c!stretch=1]
-\def\popspliteffectproperty
- {\getsplitmarks\effectmark
- \doifsomething{\rawgetsplitbotmark\effectmark}%
- {\expanded{\dostartfonteffect\rawgetsplitbotmark\effectmark}}}
+%D Plugin:
-\appendtoks \pusheffectproperty \to \everypushproperties
-\appendtoks \popeffectproperty \to \everypopproperties
-\appendtoks \popspliteffectproperty \to \everypopsplitproperties
+\loadmarkfile{prop-mis}
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/regi-8859-1.lua b/Master/texmf-dist/tex/context/base/regi-8859-1.lua
new file mode 100644
index 00000000000..affc65762b4
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/regi-8859-1.lua
@@ -0,0 +1,26 @@
+-- filename : regi-8859-1.lua
+-- comment : companion to char-reg.tex (in ConTeXt)
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+-- remark : compact version
+
+regimes.data["8859-1"] = { [0] =
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
+ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
+ 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
+ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F,
+ 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F,
+ 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
+ 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF,
+ 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7, 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF,
+ 0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7, 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00DF,
+ 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7, 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF,
+ 0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7, 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF
+}
diff --git a/Master/texmf-dist/tex/context/base/regi-8859-1.tex b/Master/texmf-dist/tex/context/base/regi-8859-1.tex
index 6f515251882..c291b029ad2 100644
--- a/Master/texmf-dist/tex/context/base/regi-8859-1.tex
+++ b/Master/texmf-dist/tex/context/base/regi-8859-1.tex
@@ -14,7 +14,7 @@
%D Support for iso-8859-1/Latin1 input encoding (regime) for West European languages,
%D see also cp1252 and iso-8859-15 (includes Euro).
%D
-%D (Contributors to the original file: Daniel Flipo, Hans Hagen & Denis Roegel.)
+%D (Contributors to the original file: Daniel Flipo, Hans Hagen \& Denis Roegel.)
%D
%D Usage: \type{\enableregime[8859-1]} (see \type {regi-syn} for
%D alternatives calls).
diff --git a/Master/texmf-dist/tex/context/base/regi-8859-10.lua b/Master/texmf-dist/tex/context/base/regi-8859-10.lua
new file mode 100644
index 00000000000..2b1d2d4ab74
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/regi-8859-10.lua
@@ -0,0 +1,26 @@
+-- filename : regi-8859-10.lua
+-- comment : companion to char-reg.tex (in ConTeXt)
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+-- remark : compact version
+
+regimes.data["8859-10"] = { [0] =
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
+ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
+ 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
+ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F,
+ 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F,
+ 0x00A0, 0x0104, 0x0112, 0x0122, 0x012A, 0x0128, 0x0136, 0x00A7, 0x013B, 0x0110, 0x0160, 0x0166, 0x017D, 0x00AD, 0x016A, 0x014A,
+ 0x00B0, 0x0105, 0x0113, 0x0123, 0x012B, 0x0129, 0x0137, 0x00B7, 0x013C, 0x0111, 0x0161, 0x0167, 0x017E, 0x2015, 0x016B, 0x014B,
+ 0x0100, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x012E, 0x010C, 0x00C9, 0x0118, 0x00CB, 0x0116, 0x00CD, 0x00CE, 0x00CF,
+ 0x00D0, 0x0145, 0x014C, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x0168, 0x00D8, 0x0172, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00DF,
+ 0x0101, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x012F, 0x010D, 0x00E9, 0x0119, 0x00EB, 0x0117, 0x00ED, 0x00EE, 0x00EF,
+ 0x00F0, 0x0146, 0x014D, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x0169, 0x00F8, 0x0173, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x0138
+}
diff --git a/Master/texmf-dist/tex/context/base/regi-8859-11.lua b/Master/texmf-dist/tex/context/base/regi-8859-11.lua
new file mode 100644
index 00000000000..f6ff34b6950
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/regi-8859-11.lua
@@ -0,0 +1,26 @@
+-- filename : regi-8859-11.lua
+-- comment : companion to char-reg.tex (in ConTeXt)
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+-- remark : compact version
+
+regimes.data["8859-11"] = { [0] =
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
+ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
+ 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
+ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F,
+ 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F,
+ 0x00A0, 0x0E01, 0x0E02, 0x0E03, 0x0E04, 0x0E05, 0x0E06, 0x0E07, 0x0E08, 0x0E09, 0x0E0A, 0x0E0B, 0x0E0C, 0x0E0D, 0x0E0E, 0x0E0F,
+ 0x0E10, 0x0E11, 0x0E12, 0x0E13, 0x0E14, 0x0E15, 0x0E16, 0x0E17, 0x0E18, 0x0E19, 0x0E1A, 0x0E1B, 0x0E1C, 0x0E1D, 0x0E1E, 0x0E1F,
+ 0x0E20, 0x0E21, 0x0E22, 0x0E23, 0x0E24, 0x0E25, 0x0E26, 0x0E27, 0x0E28, 0x0E29, 0x0E2A, 0x0E2B, 0x0E2C, 0x0E2D, 0x0E2E, 0x0E2F,
+ 0x0E30, 0x0E31, 0x0E32, 0x0E33, 0x0E34, 0x0E35, 0x0E36, 0x0E37, 0x0E38, 0x0E39, 0x0E3A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0E3F,
+ 0x0E40, 0x0E41, 0x0E42, 0x0E43, 0x0E44, 0x0E45, 0x0E46, 0x0E47, 0x0E48, 0x0E49, 0x0E4A, 0x0E4B, 0x0E4C, 0x0E4D, 0x0E4E, 0x0E4F,
+ 0x0E50, 0x0E51, 0x0E52, 0x0E53, 0x0E54, 0x0E55, 0x0E56, 0x0E57, 0x0E58, 0x0E59, 0x0E5A, 0x0E5B, 0x0000, 0x0000, 0x0000, 0x0000
+}
diff --git a/Master/texmf-dist/tex/context/base/regi-8859-13.lua b/Master/texmf-dist/tex/context/base/regi-8859-13.lua
new file mode 100644
index 00000000000..13b631e9bcb
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/regi-8859-13.lua
@@ -0,0 +1,26 @@
+-- filename : regi-8859-13.lua
+-- comment : companion to char-reg.tex (in ConTeXt)
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+-- remark : compact version
+
+regimes.data["8859-13"] = { [0] =
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
+ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
+ 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
+ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F,
+ 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F,
+ 0x00A0, 0x201D, 0x00A2, 0x00A3, 0x00A4, 0x201E, 0x00A6, 0x00A7, 0x00D8, 0x00A9, 0x0156, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00C6,
+ 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x201C, 0x00B5, 0x00B6, 0x00B7, 0x00F8, 0x00B9, 0x0157, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00E6,
+ 0x0104, 0x012E, 0x0100, 0x0106, 0x00C4, 0x00C5, 0x0118, 0x0112, 0x010C, 0x00C9, 0x0179, 0x0116, 0x0122, 0x0136, 0x012A, 0x013B,
+ 0x0160, 0x0143, 0x0145, 0x00D3, 0x014C, 0x00D5, 0x00D6, 0x00D7, 0x0172, 0x0141, 0x015A, 0x016A, 0x00DC, 0x017B, 0x017D, 0x00DF,
+ 0x0105, 0x012F, 0x0101, 0x0107, 0x00E4, 0x00E5, 0x0119, 0x0113, 0x010D, 0x00E9, 0x017A, 0x0117, 0x0123, 0x0137, 0x012B, 0x013C,
+ 0x0161, 0x0144, 0x0146, 0x00F3, 0x014D, 0x00F5, 0x00F6, 0x00F7, 0x0173, 0x0142, 0x015B, 0x016B, 0x00FC, 0x017C, 0x017E, 0x2019
+}
diff --git a/Master/texmf-dist/tex/context/base/regi-8859-14.lua b/Master/texmf-dist/tex/context/base/regi-8859-14.lua
new file mode 100644
index 00000000000..ae349ed3619
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/regi-8859-14.lua
@@ -0,0 +1,26 @@
+-- filename : regi-8859-14.lua
+-- comment : companion to char-reg.tex (in ConTeXt)
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+-- remark : compact version
+
+regimes.data["8859-14"] = { [0] =
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
+ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
+ 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
+ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F,
+ 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F,
+ 0x00A0, 0x1E02, 0x1E03, 0x00A3, 0x010A, 0x010B, 0x1E0A, 0x00A7, 0x1E80, 0x00A9, 0x1E82, 0x1E0B, 0x1EF2, 0x00AD, 0x00AE, 0x0178,
+ 0x1E1E, 0x1E1F, 0x0120, 0x0121, 0x1E40, 0x1E41, 0x00B6, 0x1E56, 0x1E81, 0x1E57, 0x1E83, 0x1E60, 0x1EF3, 0x1E84, 0x1E85, 0x1E61,
+ 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7, 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF,
+ 0x0174, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x1E6A, 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x0176, 0x00DF,
+ 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7, 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF,
+ 0x0175, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x1E6B, 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x0177, 0x00FF
+}
diff --git a/Master/texmf-dist/tex/context/base/regi-8859-15.lua b/Master/texmf-dist/tex/context/base/regi-8859-15.lua
new file mode 100644
index 00000000000..14891c7ffe3
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/regi-8859-15.lua
@@ -0,0 +1,26 @@
+-- filename : regi-8859-15.lua
+-- comment : companion to char-reg.tex (in ConTeXt)
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+-- remark : compact version
+
+regimes.data["8859-15"] = { [0] =
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
+ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
+ 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
+ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F,
+ 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F,
+ 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x20AC, 0x00A5, 0x0160, 0x00A7, 0x0161, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
+ 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x017D, 0x00B5, 0x00B6, 0x00B7, 0x017E, 0x00B9, 0x00BA, 0x00BB, 0x0152, 0x0153, 0x0178, 0x00BF,
+ 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7, 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF,
+ 0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7, 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00DF,
+ 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7, 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF,
+ 0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7, 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF
+}
diff --git a/Master/texmf-dist/tex/context/base/regi-8859-16.lua b/Master/texmf-dist/tex/context/base/regi-8859-16.lua
new file mode 100644
index 00000000000..426c43773bd
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/regi-8859-16.lua
@@ -0,0 +1,26 @@
+-- filename : regi-8859-16.lua
+-- comment : companion to char-reg.tex (in ConTeXt)
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+-- remark : compact version
+
+regimes.data["8859-16"] = { [0] =
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
+ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
+ 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
+ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F,
+ 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F,
+ 0x00A0, 0x0104, 0x0105, 0x0141, 0x20AC, 0x201E, 0x0160, 0x00A7, 0x0161, 0x00A9, 0x0218, 0x00AB, 0x0179, 0x00AD, 0x017A, 0x017B,
+ 0x00B0, 0x00B1, 0x010C, 0x0142, 0x017D, 0x201D, 0x00B6, 0x00B7, 0x017E, 0x010D, 0x0219, 0x00BB, 0x0152, 0x0153, 0x0178, 0x017C,
+ 0x00C0, 0x00C1, 0x00C2, 0x0102, 0x00C4, 0x0106, 0x00C6, 0x00C7, 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF,
+ 0x0110, 0x0143, 0x00D2, 0x00D3, 0x00D4, 0x0150, 0x00D6, 0x015A, 0x0170, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x0118, 0x021A, 0x00DF,
+ 0x00E0, 0x00E1, 0x00E2, 0x0103, 0x00E4, 0x0107, 0x00E6, 0x00E7, 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF,
+ 0x0111, 0x0144, 0x00F2, 0x00F3, 0x00F4, 0x0151, 0x00F6, 0x015B, 0x0171, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x0119, 0x021B, 0x00FF
+}
diff --git a/Master/texmf-dist/tex/context/base/regi-8859-2.lua b/Master/texmf-dist/tex/context/base/regi-8859-2.lua
new file mode 100644
index 00000000000..98988cd8e07
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/regi-8859-2.lua
@@ -0,0 +1,26 @@
+-- filename : regi-8859-2.lua
+-- comment : companion to char-reg.tex (in ConTeXt)
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+-- remark : compact version
+
+regimes.data["8859-2"] = { [0] =
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
+ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
+ 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
+ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F,
+ 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F,
+ 0x00A0, 0x0104, 0x02D8, 0x0141, 0x00A4, 0x013D, 0x015A, 0x00A7, 0x00A8, 0x0160, 0x015E, 0x0164, 0x0179, 0x00AD, 0x017D, 0x017B,
+ 0x00B0, 0x0105, 0x02DB, 0x0142, 0x00B4, 0x013E, 0x015B, 0x02C7, 0x00B8, 0x0161, 0x015F, 0x0165, 0x017A, 0x02DD, 0x017E, 0x017C,
+ 0x0154, 0x00C1, 0x00C2, 0x0102, 0x00C4, 0x0139, 0x0106, 0x00C7, 0x010C, 0x00C9, 0x0118, 0x00CB, 0x011A, 0x00CD, 0x00CE, 0x010E,
+ 0x0110, 0x0143, 0x0147, 0x00D3, 0x00D4, 0x0150, 0x00D6, 0x00D7, 0x0158, 0x016E, 0x00DA, 0x0170, 0x00DC, 0x00DD, 0x0162, 0x00DF,
+ 0x0155, 0x00E1, 0x00E2, 0x0103, 0x00E4, 0x013A, 0x0107, 0x00E7, 0x010D, 0x00E9, 0x0119, 0x00EB, 0x011B, 0x00ED, 0x00EE, 0x010F,
+ 0x0111, 0x0144, 0x0148, 0x00F3, 0x00F4, 0x0151, 0x00F6, 0x00F7, 0x0159, 0x016F, 0x00FA, 0x0171, 0x00FC, 0x00FD, 0x0163, 0x02D9
+}
diff --git a/Master/texmf-dist/tex/context/base/regi-8859-3.lua b/Master/texmf-dist/tex/context/base/regi-8859-3.lua
new file mode 100644
index 00000000000..ab94e5a772d
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/regi-8859-3.lua
@@ -0,0 +1,26 @@
+-- filename : regi-8859-3.lua
+-- comment : companion to char-reg.tex (in ConTeXt)
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+-- remark : compact version
+
+regimes.data["8859-3"] = { [0] =
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
+ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
+ 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
+ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F,
+ 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F,
+ 0x00A0, 0x0126, 0x02D8, 0x00A3, 0x00A4, 0x0000, 0x0124, 0x00A7, 0x00A8, 0x0130, 0x015E, 0x011E, 0x0134, 0x00AD, 0x0000, 0x017B,
+ 0x00B0, 0x0127, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x0125, 0x00B7, 0x00B8, 0x0131, 0x015F, 0x011F, 0x0135, 0x00BD, 0x0000, 0x017C,
+ 0x00C0, 0x00C1, 0x00C2, 0x0000, 0x00C4, 0x010A, 0x0108, 0x00C7, 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF,
+ 0x0000, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x0120, 0x00D6, 0x00D7, 0x011C, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x016C, 0x015C, 0x00DF,
+ 0x00E0, 0x00E1, 0x00E2, 0x0000, 0x00E4, 0x010B, 0x0109, 0x00E7, 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF,
+ 0x0000, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x0121, 0x00F6, 0x00F7, 0x011D, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x016D, 0x015D, 0x02D9
+}
diff --git a/Master/texmf-dist/tex/context/base/regi-8859-4.lua b/Master/texmf-dist/tex/context/base/regi-8859-4.lua
new file mode 100644
index 00000000000..07928559060
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/regi-8859-4.lua
@@ -0,0 +1,26 @@
+-- filename : regi-8859-4.lua
+-- comment : companion to char-reg.tex (in ConTeXt)
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+-- remark : compact version
+
+regimes.data["8859-4"] = { [0] =
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
+ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
+ 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
+ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F,
+ 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F,
+ 0x00A0, 0x0104, 0x0138, 0x0156, 0x00A4, 0x0128, 0x013B, 0x00A7, 0x00A8, 0x0160, 0x0112, 0x0122, 0x0166, 0x00AD, 0x017D, 0x00AF,
+ 0x00B0, 0x0105, 0x02DB, 0x0157, 0x00B4, 0x0129, 0x013C, 0x02C7, 0x00B8, 0x0161, 0x0113, 0x0123, 0x0167, 0x014A, 0x017E, 0x014B,
+ 0x0100, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x012E, 0x010C, 0x00C9, 0x0118, 0x00CB, 0x0116, 0x00CD, 0x00CE, 0x012A,
+ 0x0110, 0x0145, 0x014C, 0x0136, 0x00D4, 0x00D5, 0x00D6, 0x00D7, 0x00D8, 0x0172, 0x00DA, 0x00DB, 0x00DC, 0x0168, 0x016A, 0x00DF,
+ 0x0101, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x012F, 0x010D, 0x00E9, 0x0119, 0x00EB, 0x0117, 0x00ED, 0x00EE, 0x012B,
+ 0x0111, 0x0146, 0x014D, 0x0137, 0x00F4, 0x00F5, 0x00F6, 0x00F7, 0x00F8, 0x0173, 0x00FA, 0x00FB, 0x00FC, 0x0169, 0x016B, 0x02D9
+}
diff --git a/Master/texmf-dist/tex/context/base/regi-8859-5.lua b/Master/texmf-dist/tex/context/base/regi-8859-5.lua
new file mode 100644
index 00000000000..5f6df9242e0
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/regi-8859-5.lua
@@ -0,0 +1,26 @@
+-- filename : regi-8859-5.lua
+-- comment : companion to char-reg.tex (in ConTeXt)
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+-- remark : compact version
+
+regimes.data["8859-5"] = { [0] =
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
+ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
+ 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
+ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F,
+ 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F,
+ 0x00A0, 0x0401, 0x0402, 0x0403, 0x0404, 0x0405, 0x0406, 0x0407, 0x0408, 0x0409, 0x040A, 0x040B, 0x040C, 0x00AD, 0x040E, 0x040F,
+ 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F,
+ 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F,
+ 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F,
+ 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F,
+ 0x2116, 0x0451, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, 0x0457, 0x0458, 0x0459, 0x045A, 0x045B, 0x045C, 0x00A7, 0x045E, 0x045F
+}
diff --git a/Master/texmf-dist/tex/context/base/regi-8859-6.lua b/Master/texmf-dist/tex/context/base/regi-8859-6.lua
new file mode 100644
index 00000000000..86ed0b262e3
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/regi-8859-6.lua
@@ -0,0 +1,26 @@
+-- filename : regi-8859-6.lua
+-- comment : companion to char-reg.tex (in ConTeXt)
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+-- remark : compact version
+
+regimes.data["8859-6"] = { [0] =
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
+ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
+ 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
+ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F,
+ 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F,
+ 0x00A0, 0x0000, 0x0000, 0x0000, 0x00A4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x060C, 0x00AD, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x061B, 0x0000, 0x0000, 0x0000, 0x061F,
+ 0x0000, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627, 0x0628, 0x0629, 0x062A, 0x062B, 0x062C, 0x062D, 0x062E, 0x062F,
+ 0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x0637, 0x0638, 0x0639, 0x063A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0640, 0x0641, 0x0642, 0x0643, 0x0644, 0x0645, 0x0646, 0x0647, 0x0648, 0x0649, 0x064A, 0x064B, 0x064C, 0x064D, 0x064E, 0x064F,
+ 0x0650, 0x0651, 0x0652, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
+}
diff --git a/Master/texmf-dist/tex/context/base/regi-8859-7.lua b/Master/texmf-dist/tex/context/base/regi-8859-7.lua
new file mode 100644
index 00000000000..bb110fbfa42
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/regi-8859-7.lua
@@ -0,0 +1,26 @@
+-- filename : regi-8859-7.lua
+-- comment : companion to char-reg.tex (in ConTeXt)
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+-- remark : compact version
+
+regimes.data["8859-7"] = { [0] =
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
+ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
+ 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
+ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F,
+ 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F,
+ 0x00A0, 0x2018, 0x2019, 0x00A3, 0x20AC, 0x20AF, 0x00A6, 0x00A7, 0x00A8, 0x00A9, 0x037A, 0x00AB, 0x00AC, 0x00AD, 0x0000, 0x2015,
+ 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x0384, 0x0385, 0x0386, 0x00B7, 0x0388, 0x0389, 0x038A, 0x00BB, 0x038C, 0x00BD, 0x038E, 0x038F,
+ 0x0390, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F,
+ 0x03A0, 0x03A1, 0x0000, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7, 0x03A8, 0x03A9, 0x03AA, 0x03AB, 0x03AC, 0x03AD, 0x03AE, 0x03AF,
+ 0x03B0, 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7, 0x03B8, 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF,
+ 0x03C0, 0x03C1, 0x03C2, 0x03C3, 0x03C4, 0x03C5, 0x03C6, 0x03C7, 0x03C8, 0x03C9, 0x03CA, 0x03CB, 0x03CC, 0x03CD, 0x03CE, 0x0000
+}
diff --git a/Master/texmf-dist/tex/context/base/regi-8859-8.lua b/Master/texmf-dist/tex/context/base/regi-8859-8.lua
new file mode 100644
index 00000000000..a6821499add
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/regi-8859-8.lua
@@ -0,0 +1,26 @@
+-- filename : regi-8859-8.lua
+-- comment : companion to char-reg.tex (in ConTeXt)
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+-- remark : compact version
+
+regimes.data["8859-8"] = { [0] =
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
+ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
+ 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
+ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F,
+ 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F,
+ 0x00A0, 0x0000, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, 0x00A8, 0x00A9, 0x00D7, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
+ 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, 0x00B8, 0x00B9, 0x00F7, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2017,
+ 0x05D0, 0x05D1, 0x05D2, 0x05D3, 0x05D4, 0x05D5, 0x05D6, 0x05D7, 0x05D8, 0x05D9, 0x05DA, 0x05DB, 0x05DC, 0x05DD, 0x05DE, 0x05DF,
+ 0x05E0, 0x05E1, 0x05E2, 0x05E3, 0x05E4, 0x05E5, 0x05E6, 0x05E7, 0x05E8, 0x05E9, 0x05EA, 0x0000, 0x0000, 0x200E, 0x200F, 0x0000
+}
diff --git a/Master/texmf-dist/tex/context/base/regi-8859-9.lua b/Master/texmf-dist/tex/context/base/regi-8859-9.lua
new file mode 100644
index 00000000000..44a3a18abd4
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/regi-8859-9.lua
@@ -0,0 +1,26 @@
+-- filename : regi-8859-9.lua
+-- comment : companion to char-reg.tex (in ConTeXt)
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+-- remark : compact version
+
+regimes.data["8859-9"] = { [0] =
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
+ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
+ 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
+ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F,
+ 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F,
+ 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
+ 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF,
+ 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7, 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF,
+ 0x011E, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7, 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x0130, 0x015E, 0x00DF,
+ 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7, 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF,
+ 0x011F, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7, 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x0131, 0x015F, 0x00FF
+}
diff --git a/Master/texmf-dist/tex/context/base/regi-cp1250.lua b/Master/texmf-dist/tex/context/base/regi-cp1250.lua
new file mode 100644
index 00000000000..aa374193aed
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/regi-cp1250.lua
@@ -0,0 +1,26 @@
+-- filename : regi-cp1250.lua
+-- comment : companion to char-reg.tex (in ConTeXt)
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+-- remark : compact version
+
+regimes.data["cp1250"] = { [0] =
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
+ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
+ 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
+ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
+ 0x20AC, 0x0000, 0x201A, 0x0000, 0x201E, 0x2026, 0x2020, 0x2021, 0x0000, 0x2030, 0x0160, 0x2039, 0x015A, 0x0164, 0x017D, 0x0179,
+ 0x0000, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, 0x0000, 0x2122, 0x0161, 0x203A, 0x015B, 0x0165, 0x017E, 0x017A,
+ 0x00A0, 0x02C7, 0x02D8, 0x0141, 0x00A4, 0x0104, 0x00A6, 0x00A7, 0x00A8, 0x00A9, 0x015E, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x017B,
+ 0x00B0, 0x00B1, 0x02DB, 0x0142, 0x00B4, 0x00B5, 0x00B6, 0x00B7, 0x00B8, 0x0105, 0x015F, 0x00BB, 0x013D, 0x02DD, 0x013E, 0x017C,
+ 0x0154, 0x00C1, 0x00C2, 0x0102, 0x00C4, 0x0139, 0x0106, 0x00C7, 0x010C, 0x00C9, 0x0118, 0x00CB, 0x011A, 0x00CD, 0x00CE, 0x010E,
+ 0x0110, 0x0143, 0x0147, 0x00D3, 0x00D4, 0x0150, 0x00D6, 0x00D7, 0x0158, 0x016E, 0x00DA, 0x0170, 0x00DC, 0x00DD, 0x0162, 0x00DF,
+ 0x0155, 0x00E1, 0x00E2, 0x0103, 0x00E4, 0x013A, 0x0107, 0x00E7, 0x010D, 0x00E9, 0x0119, 0x00EB, 0x011B, 0x00ED, 0x00EE, 0x010F,
+ 0x0111, 0x0144, 0x0148, 0x00F3, 0x00F4, 0x0151, 0x00F6, 0x00F7, 0x0159, 0x016F, 0x00FA, 0x0171, 0x00FC, 0x00FD, 0x0163, 0x02D9
+}
diff --git a/Master/texmf-dist/tex/context/base/regi-cp1251.lua b/Master/texmf-dist/tex/context/base/regi-cp1251.lua
new file mode 100644
index 00000000000..88204df368c
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/regi-cp1251.lua
@@ -0,0 +1,26 @@
+-- filename : regi-cp1251.lua
+-- comment : companion to char-reg.tex (in ConTeXt)
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+-- remark : compact version
+
+regimes.data["cp1251"] = { [0] =
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
+ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
+ 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
+ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
+ 0x0402, 0x0403, 0x201A, 0x0453, 0x201E, 0x2026, 0x2020, 0x2021, 0x20AC, 0x2030, 0x0409, 0x2039, 0x040A, 0x040C, 0x040B, 0x040F,
+ 0x0452, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, 0x0000, 0x2122, 0x0459, 0x203A, 0x045A, 0x045C, 0x045B, 0x045F,
+ 0x00A0, 0x040E, 0x045E, 0x0408, 0x00A4, 0x0490, 0x00A6, 0x00A7, 0x0401, 0x00A9, 0x0404, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x0407,
+ 0x00B0, 0x00B1, 0x0406, 0x0456, 0x0491, 0x00B5, 0x00B6, 0x00B7, 0x0451, 0x2116, 0x0454, 0x00BB, 0x0458, 0x0405, 0x0455, 0x0457,
+ 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F,
+ 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F,
+ 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F,
+ 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F
+}
diff --git a/Master/texmf-dist/tex/context/base/regi-cp1252.lua b/Master/texmf-dist/tex/context/base/regi-cp1252.lua
new file mode 100644
index 00000000000..910656edfa6
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/regi-cp1252.lua
@@ -0,0 +1,26 @@
+-- filename : regi-cp1252.lua
+-- comment : companion to char-reg.tex (in ConTeXt)
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+-- remark : compact version
+
+regimes.data["cp1252"] = { [0] =
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
+ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
+ 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
+ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
+ 0x20AC, 0x0000, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021, 0x02C6, 0x2030, 0x0160, 0x2039, 0x0152, 0x0000, 0x017D, 0x0000,
+ 0x0000, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, 0x02DC, 0x2122, 0x0161, 0x203A, 0x0153, 0x0000, 0x017E, 0x0178,
+ 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
+ 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF,
+ 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7, 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF,
+ 0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7, 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00DF,
+ 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7, 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF,
+ 0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7, 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF
+}
diff --git a/Master/texmf-dist/tex/context/base/regi-cp1252.tex b/Master/texmf-dist/tex/context/base/regi-cp1252.tex
index 3911644ce6d..9a54f178f3e 100644
--- a/Master/texmf-dist/tex/context/base/regi-cp1252.tex
+++ b/Master/texmf-dist/tex/context/base/regi-cp1252.tex
@@ -14,7 +14,7 @@
%D Support for cp1252 input encoding (regime) for West European languages,
%D see also iso-8859-1 and iso-8859-15.
%D
-%D (Contributors to the original file: Tobias Burnus, Hans Hagen & Victor Figurnov.)
+%D (Contributors to the original file: Tobias Burnus, Hans Hagen \& Victor Figurnov.)
%D
%D Usage:
%D \type{\enableregime[cp1252]} or \type{\enablereregime[windows-1252]}
diff --git a/Master/texmf-dist/tex/context/base/regi-cp1253.lua b/Master/texmf-dist/tex/context/base/regi-cp1253.lua
new file mode 100644
index 00000000000..6d854e96700
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/regi-cp1253.lua
@@ -0,0 +1,26 @@
+-- filename : regi-cp1253.lua
+-- comment : companion to char-reg.tex (in ConTeXt)
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+-- remark : compact version
+
+regimes.data["cp1253"] = { [0] =
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
+ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
+ 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
+ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
+ 0x20AC, 0x0000, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021, 0x0000, 0x2030, 0x0000, 0x2039, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, 0x0000, 0x2122, 0x0000, 0x203A, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x00A0, 0x0385, 0x0386, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, 0x00A8, 0x00A9, 0x0000, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x2015,
+ 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x0384, 0x00B5, 0x00B6, 0x00B7, 0x0388, 0x0389, 0x038A, 0x00BB, 0x038C, 0x00BD, 0x038E, 0x038F,
+ 0x0390, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F,
+ 0x03A0, 0x03A1, 0x0000, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7, 0x03A8, 0x03A9, 0x03AA, 0x03AB, 0x03AC, 0x03AD, 0x03AE, 0x03AF,
+ 0x03B0, 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7, 0x03B8, 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF,
+ 0x03C0, 0x03C1, 0x03C2, 0x03C3, 0x03C4, 0x03C5, 0x03C6, 0x03C7, 0x03C8, 0x03C9, 0x03CA, 0x03CB, 0x03CC, 0x03CD, 0x03CE, 0x0000
+}
diff --git a/Master/texmf-dist/tex/context/base/regi-cp1254.lua b/Master/texmf-dist/tex/context/base/regi-cp1254.lua
new file mode 100644
index 00000000000..12f094b4640
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/regi-cp1254.lua
@@ -0,0 +1,26 @@
+-- filename : regi-cp1254.lua
+-- comment : companion to char-reg.tex (in ConTeXt)
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+-- remark : compact version
+
+regimes.data["cp1254"] = { [0] =
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
+ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
+ 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
+ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
+ 0x20AC, 0x0000, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021, 0x02C6, 0x2030, 0x0160, 0x2039, 0x0152, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, 0x02DC, 0x2122, 0x0161, 0x203A, 0x0153, 0x0000, 0x0000, 0x0178,
+ 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
+ 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF,
+ 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7, 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF,
+ 0x011E, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7, 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x0130, 0x015E, 0x00DF,
+ 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7, 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF,
+ 0x011F, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7, 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x0131, 0x015F, 0x00FF
+}
diff --git a/Master/texmf-dist/tex/context/base/regi-cp1255.lua b/Master/texmf-dist/tex/context/base/regi-cp1255.lua
new file mode 100644
index 00000000000..77119da565f
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/regi-cp1255.lua
@@ -0,0 +1,26 @@
+-- filename : regi-cp1255.lua
+-- comment : companion to char-reg.tex (in ConTeXt)
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+-- remark : compact version
+
+regimes.data["cp1255"] = { [0] =
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
+ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
+ 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
+ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
+ 0x20AC, 0x0000, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021, 0x02C6, 0x2030, 0x0000, 0x2039, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, 0x02DC, 0x2122, 0x0000, 0x203A, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x20AA, 0x00A5, 0x00A6, 0x00A7, 0x00A8, 0x00A9, 0x00D7, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
+ 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, 0x00B8, 0x00B9, 0x00F7, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF,
+ 0x05B0, 0x05B1, 0x05B2, 0x05B3, 0x05B4, 0x05B5, 0x05B6, 0x05B7, 0x05B8, 0x05B9, 0x0000, 0x05BB, 0x05BC, 0x05BD, 0x05BE, 0x05BF,
+ 0x05C0, 0x05C1, 0x05C2, 0x05C3, 0x05F0, 0x05F1, 0x05F2, 0x05F3, 0x05F4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x05D0, 0x05D1, 0x05D2, 0x05D3, 0x05D4, 0x05D5, 0x05D6, 0x05D7, 0x05D8, 0x05D9, 0x05DA, 0x05DB, 0x05DC, 0x05DD, 0x05DE, 0x05DF,
+ 0x05E0, 0x05E1, 0x05E2, 0x05E3, 0x05E4, 0x05E5, 0x05E6, 0x05E7, 0x05E8, 0x05E9, 0x05EA, 0x0000, 0x0000, 0x200E, 0x200F, 0x0000
+}
diff --git a/Master/texmf-dist/tex/context/base/regi-cp1256.lua b/Master/texmf-dist/tex/context/base/regi-cp1256.lua
new file mode 100644
index 00000000000..9bd3dbd739b
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/regi-cp1256.lua
@@ -0,0 +1,26 @@
+-- filename : regi-cp1256.lua
+-- comment : companion to char-reg.tex (in ConTeXt)
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+-- remark : compact version
+
+regimes.data["cp1256"] = { [0] =
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
+ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
+ 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
+ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
+ 0x20AC, 0x067E, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021, 0x02C6, 0x2030, 0x0679, 0x2039, 0x0152, 0x0686, 0x0698, 0x0688,
+ 0x06AF, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, 0x06A9, 0x2122, 0x0691, 0x203A, 0x0153, 0x200C, 0x200D, 0x06BA,
+ 0x00A0, 0x060C, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, 0x00A8, 0x00A9, 0x06BE, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
+ 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, 0x00B8, 0x00B9, 0x061B, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x061F,
+ 0x06C1, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627, 0x0628, 0x0629, 0x062A, 0x062B, 0x062C, 0x062D, 0x062E, 0x062F,
+ 0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x00D7, 0x0637, 0x0638, 0x0639, 0x063A, 0x0640, 0x0641, 0x0642, 0x0643,
+ 0x00E0, 0x0644, 0x00E2, 0x0645, 0x0646, 0x0647, 0x0648, 0x00E7, 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x0649, 0x064A, 0x00EE, 0x00EF,
+ 0x064B, 0x064C, 0x064D, 0x064E, 0x00F4, 0x064F, 0x0650, 0x00F7, 0x0651, 0x00F9, 0x0652, 0x00FB, 0x00FC, 0x200E, 0x200F, 0x06D2
+}
diff --git a/Master/texmf-dist/tex/context/base/regi-cp1257.lua b/Master/texmf-dist/tex/context/base/regi-cp1257.lua
new file mode 100644
index 00000000000..d043b256f30
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/regi-cp1257.lua
@@ -0,0 +1,26 @@
+-- filename : regi-cp1257.lua
+-- comment : companion to char-reg.tex (in ConTeXt)
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+-- remark : compact version
+
+regimes.data["cp1257"] = { [0] =
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
+ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
+ 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
+ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
+ 0x20AC, 0x0000, 0x201A, 0x0000, 0x201E, 0x2026, 0x2020, 0x2021, 0x0000, 0x2030, 0x0000, 0x2039, 0x0000, 0x00A8, 0x02C7, 0x00B8,
+ 0x0000, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, 0x0000, 0x2122, 0x0000, 0x203A, 0x0000, 0x00AF, 0x02DB, 0x0000,
+ 0x00A0, 0x0000, 0x00A2, 0x00A3, 0x00A4, 0x0000, 0x00A6, 0x00A7, 0x00D8, 0x00A9, 0x0156, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00C6,
+ 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, 0x00F8, 0x00B9, 0x0157, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00E6,
+ 0x0104, 0x012E, 0x0100, 0x0106, 0x00C4, 0x00C5, 0x0118, 0x0112, 0x010C, 0x00C9, 0x0179, 0x0116, 0x0122, 0x0136, 0x012A, 0x013B,
+ 0x0160, 0x0143, 0x0145, 0x00D3, 0x014C, 0x00D5, 0x00D6, 0x00D7, 0x0172, 0x0141, 0x015A, 0x016A, 0x00DC, 0x017B, 0x017D, 0x00DF,
+ 0x0105, 0x012F, 0x0101, 0x0107, 0x00E4, 0x00E5, 0x0119, 0x0113, 0x010D, 0x00E9, 0x017A, 0x0117, 0x0123, 0x0137, 0x012B, 0x013C,
+ 0x0161, 0x0144, 0x0146, 0x00F3, 0x014D, 0x00F5, 0x00F6, 0x00F7, 0x0173, 0x0142, 0x015B, 0x016B, 0x00FC, 0x017C, 0x017E, 0x02D9
+}
diff --git a/Master/texmf-dist/tex/context/base/regi-cp1258.lua b/Master/texmf-dist/tex/context/base/regi-cp1258.lua
new file mode 100644
index 00000000000..45fa7eca081
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/regi-cp1258.lua
@@ -0,0 +1,26 @@
+-- filename : regi-cp1258.lua
+-- comment : companion to char-reg.tex (in ConTeXt)
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+-- remark : compact version
+
+regimes.data["cp1258"] = { [0] =
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F,
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
+ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
+ 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
+ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
+ 0x20AC, 0x0000, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021, 0x02C6, 0x2030, 0x0000, 0x2039, 0x0152, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, 0x02DC, 0x2122, 0x0000, 0x203A, 0x0153, 0x0000, 0x0000, 0x0178,
+ 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
+ 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF,
+ 0x00C0, 0x00C1, 0x00C2, 0x0102, 0x00C4, 0x00C5, 0x00C6, 0x00C7, 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x0300, 0x00CD, 0x00CE, 0x00CF,
+ 0x0110, 0x00D1, 0x0309, 0x00D3, 0x00D4, 0x01A0, 0x00D6, 0x00D7, 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x01AF, 0x0303, 0x00DF,
+ 0x00E0, 0x00E1, 0x00E2, 0x0103, 0x00E4, 0x00E5, 0x00E6, 0x00E7, 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x0301, 0x00ED, 0x00EE, 0x00EF,
+ 0x0111, 0x00F1, 0x0323, 0x00F3, 0x00F4, 0x01A1, 0x00F6, 0x00F7, 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x01B0, 0x20AB, 0x00FF
+}
diff --git a/Master/texmf-dist/tex/context/base/regi-ini.lua b/Master/texmf-dist/tex/context/base/regi-ini.lua
new file mode 100644
index 00000000000..a12fd24a24f
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/regi-ini.lua
@@ -0,0 +1,110 @@
+if not modules then modules = { } end modules ['regi-ini'] = {
+ version = 1.001,
+ comment = "companion to regi-ini.tex",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+--[[ldx--
+<p>Regimes take care of converting the input characters into
+<l n='utf'/> sequences. The conversion tables are loaded at
+runtime.</p>
+--ldx]]--
+
+regimes = regimes or { }
+regimes.data = regimes.data or { }
+regimes.utf = regimes.utf or { }
+regimes.context = regimes.context or { }
+
+-- setmetatable(regimes.data,_empty_table_)
+
+regimes.currentregime = ""
+
+--[[ldx--
+<p>We will hook regime handling code into the input methods.</p>
+--ldx]]--
+
+input = input or { }
+input.filters = input.filters or { }
+
+function regimes.number(n)
+ if type(n) == "string" then return tonumber(n,16) else return n end
+end
+
+function regimes.define(c) -- is this used at all?
+ local r, u, s = c.regime, c.unicodeslot, c.slot
+ regimes.data[r] = regimes.data[r] or { }
+ if s then
+ if u then
+ regimes.data[r][regimes.number(s)] = regimes.number(u)
+ else
+ regimes.data[r][regimes.number(s)] = 0
+ end
+ else
+ input.report(string.format("regi-ini: invalid regime code %s/%s", r, s))
+ end
+end
+
+function regimes.load(regime)
+ environment.loadlucfile("regi-"..regime, 1.001)
+ if regimes.data[regime] then
+ regimes.utf[regime] = { }
+ for k,v in pairs(regimes.data[regime]) do
+ regimes.utf[regime][string.char(k)] = unicode.utf8.char(v)
+ end
+ end
+end
+
+function regimes.translate(line,regime)
+ if regime and line then
+ local rur = regimes.utf[regime]
+ if rur then
+ return line:gsub("(.)", rur) -- () redundant
+ end
+ end
+ return line
+end
+
+function regimes.enable(regime)
+ if regimes.data[regime] then
+ regimes.currentregime = regime
+ local translate = regimes.translate
+ input.filters.dynamic_translator = function(s)
+ return translate(s,regime)
+ end
+ else
+ regimes.disable()
+ end
+end
+
+function regimes.disable()
+ regimes.currentregime = ""
+ input.filters.dynamic_translator = nil
+end
+
+function input.filters.frozen_translator(regime)
+ return function(s)
+ return regimes.translate(s,regime)
+ end
+end
+
+--[[ldx--
+<p>The following code is rather <l n='context'/> specific.</p>
+--ldx]]--
+
+function regimes.context.show(regime)
+ local flush, tc = tex.sprint, tex.ctxcatcodes
+ local r = regimes.data[regime]
+ if r then
+ flush(tc, "\\starttabulate[|rT|T|rT|lT|lT|lT|]")
+ for k, v in ipairs(r) do
+ flush(tc, string.format("\\NC %s\\NC\\getvalue{%s}\\NC %s\\NC %s\\NC %s\\NC %s\\NC\\NR", k,
+ characters.contextname(v), characters.hexindex(v), characters.contextname(v),
+ characters.category(v), characters.description(v)))
+ end
+ flush(tc, "\\stoptabulate")
+ else
+ flush(tc, "unknown regime " .. regime)
+ end
+end
diff --git a/Master/texmf-dist/tex/context/base/regi-ini.mkii b/Master/texmf-dist/tex/context/base/regi-ini.mkii
index 7c0850b9050..538db3bcf96 100644
--- a/Master/texmf-dist/tex/context/base/regi-ini.mkii
+++ b/Master/texmf-dist/tex/context/base/regi-ini.mkii
@@ -15,24 +15,46 @@
%D Plugs into the common interface.
-\def\mkloadregime#1%
- {\makeshortfilename[\truefilename{\f!regimeprefix#1}]%
- \startreadingfile
- \readsysfile\shortfilename
- {\showmessage\m!regimes2{#1}}
- {\showmessage\m!regimes3{#1}}%
- \stopreadingfile}
+\beginOLDTEX
-\def\mkenableregime#1%
- {\the\executeifdefined{\@reg@#1}\emptytoks}
+ \def\mkloadregime#1%
+ {\makeshortfilename[\truefilename{\f!regimeprefix#1}]%
+ \startreadingfile
+ \readsysfile\shortfilename
+ {\showmessage\m!regimes2{#1}}
+ {\showmessage\m!regimes3{#1}}%
+ \stopreadingfile}
-\def\mkwalkregime#1%
- {\the\executeifdefined{\@reg@\currentregime}\emptytoks}
+ \def\mkenableregime#1%
+ {\the\executeifdefined{\@reg@#1}\emptytoks}
-\def\mkautosetregime#1#2%
- {\ifnum#2>127
- \expanded{\defineactivetoken #2 \@EA\noexpand\csname#1\endcsname}%
- \fi}
+ \def\mkwalkregime#1%
+ {\the\executeifdefined{\@reg@\currentregime}\emptytoks}
+
+ \def\mkautosetregime#1#2%
+ {\ifnum#2>127
+ \expanded{\defineactivetoken #2 \@EA\noexpand\csname#1\endcsname}%
+ \fi}
+
+\endOLDTEX
+
+\beginXETEX
+
+ \let\mkloadregime \gobbleoneargument
+ \let\mkenableregime \gobbleoneargument
+ \let\mkwalkregime \gobbleoneargument
+ \let\mkautosetregime\gobbletwoarguments
+
+ % \def\mkenableregime#1%
+ % {\XeTeXinputencoding "#1"\relax}
+
+ \def\mkenableregime#1%
+ {\doifelse{#1}{utf}%
+ {\writestatus\m!regimes{mapping utf to utf-8}%
+ \XeTeXinputencoding{utf-8}}
+ {\XeTeXinputencoding{#1}}}
+
+\endXETEX
%D Remark: regimes accumulate, so there is no explicit reset in
%D mkii mode.
@@ -148,6 +170,10 @@
%D Preloading:
-\useregime[def,uni,utf] % we load the rest runtime
+\beginOLDTEX
+
+ \useregime[def,uni,utf] % we load the rest runtime
+
+\endOLDTEX
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/regi-ini.mkiv b/Master/texmf-dist/tex/context/base/regi-ini.mkiv
new file mode 100644
index 00000000000..ef269985c76
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/regi-ini.mkiv
@@ -0,0 +1,39 @@
+%D \module
+%D [ file=char-reg,
+%D version=2005.04.25,
+%D title=\CONTEXT\ Lua Macros,
+%D subtitle=Regime Support,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright=PRAGMA]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\unprotect
+
+%D First some initialization code:
+
+\registerctxluafile{regi-ini}{1.001}
+
+\def\mkloadregime #1{\ctxlua{regimes.load("#1")}}
+\def\mkenableregime #1{\ctxlua{regimes.enable("#1")}}
+\def\mkdisableregime {\ctxlua{regimes.disable()}}
+\def\mkshowregime #1{\ctxlua{regimes.context.show("#1")}}
+
+\appendtoks
+ \pushmacro\currentregime
+ \disableregime
+\to \everystartreadingfile
+
+\appendtoks
+ \popmacro\currentregime
+ \enableregime[\currentregime]%
+\to \everystopreadingfile
+
+\protect \endinput
+
+% \starttext
+% \showregimetable{cp1250}
+% \stoptext
diff --git a/Master/texmf-dist/tex/context/base/regi-ini.tex b/Master/texmf-dist/tex/context/base/regi-ini.tex
index 3de73d90ab1..42bbf9718a8 100644
--- a/Master/texmf-dist/tex/context/base/regi-ini.tex
+++ b/Master/texmf-dist/tex/context/base/regi-ini.tex
@@ -177,6 +177,6 @@
%D Plugins.
-\loadmkfile{regi-ini}
+\loadmarkfile{regi-ini}
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/regi-utf.tex b/Master/texmf-dist/tex/context/base/regi-utf.tex
index 90e01868405..297ad96496b 100644
--- a/Master/texmf-dist/tex/context/base/regi-utf.tex
+++ b/Master/texmf-dist/tex/context/base/regi-utf.tex
@@ -37,9 +37,9 @@
\expandafter \endinput
\endXETEX
-\beginMETATEX
+\beginLUATEX
\expandafter \endinput
-\endMETATEX
+\endLUATEX
\unprotect
diff --git a/Master/texmf-dist/tex/context/base/rlxcache.rlx b/Master/texmf-dist/tex/context/base/rlxcache.rlx
new file mode 100644
index 00000000000..006e5feac7b
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/rlxcache.rlx
@@ -0,0 +1,71 @@
+<?xml version='1.0 standalone='yes'?>
+
+<rl:manipulators>
+
+ <rl:manipulator name='pdf' suffix='eps'>
+ <rl:old><rl:value name='path'/>/<rl:value name='file' method='nosuffix'/>.eps</rl:old>
+ <rl:new><rl:value name='cache' default='rlxcache'/>/<rl:value name='file' method='nosuffix'/>.pdf</rl:new>
+ <rl:step>
+ texmfstart pstopdf --convert
+ --inputpath="<rl:value name='path'/>"
+ --outputpath="<rl:value name='cache' default='.'/>"
+ "<rl:value name='file' method='nosuffix'/>.eps"
+ </rl:step>
+ </rl:manipulator>
+
+ <rl:manipulator name='pdf' suffix='svg'>
+ <rl:old><rl:value name='path'/>/<rl:value name='file' method='nosuffix'/>.svg</rl:old>
+ <rl:new><rl:value name='cache' default='rlxcache'/>/<rl:value name='file' method='nosuffix'/>.pdf</rl:new>
+ <rl:step>
+ texmfstart pstopdf --convert
+ --inputpath="<rl:value name='path'/>"
+ --outputpath="<rl:value name='cache' default='.'/>"
+ "<rl:value name='file' method='nosuffix'/>.svg"
+ </rl:step>
+ </rl:manipulator>
+
+ <rl:manipulator name='pdf' suffix='svgz'>
+ <rl:old><rl:value name='path'/>/<rl:value name='file' method='nosuffix'/>.svgz</rl:old>
+ <rl:new><rl:value name='cache' default='rlxcache'/>/<rl:value name='file' method='nosuffix'/>.pdf</rl:new>
+ <rl:step>
+ texmfstart pstopdf --convert
+ --inputpath="<rl:value name='path'/>"
+ --outputpath="<rl:value name='cache' default='.'/>"
+ "<rl:value name='file' method='nosuffix'/>.svgz"
+ </rl:step>
+ </rl:manipulator>
+
+ <rl:manipulator name='pdf' suffix='gif'>
+ <rl:old><rl:value name='path'/>/<rl:value name='file' method='nosuffix'/>.gif</rl:old>
+ <rl:new><rl:value name='cache' default='rlxcache'/>/<rl:value name='file' method='nosuffix'/>.pdf</rl:new>
+ <rl:step>
+ texmfstart pstopdf --convert
+ --inputpath="<rl:value name='path'/>"
+ --outputpath="<rl:value name='cache' default='.'/>"
+ "<rl:value name='file' method='nosuffix'/>.gif"
+ </rl:step>
+ </rl:manipulator>
+
+ <rl:manipulator name='pdf' suffix='tif'>
+ <rl:old><rl:value name='path'/>/<rl:value name='file' method='nosuffix'/>.tif</rl:old>
+ <rl:new><rl:value name='cache' default='rlxcache'/>/<rl:value name='file' method='nosuffix'/>.pdf</rl:new>
+ <rl:step>
+ texmfstart pstopdf --convert
+ --inputpath="<rl:value name='path'/>"
+ --outputpath="<rl:value name='cache' default='.'/>"
+ "<rl:value name='file' method='nosuffix'/>.tif"
+ </rl:step>
+ </rl:manipulator>
+
+ <rl:manipulator name='pdf' suffix='tiff'>
+ <rl:old><rl:value name='path'/>/<rl:value name='file' method='nosuffix'/>.tiff</rl:old>
+ <rl:new><rl:value name='cache' default='rlxcache'/>/<rl:value name='file' method='nosuffix'/>.pdf</rl:new>
+ <rl:step>
+ texmfstart pstopdf --convert
+ --inputpath="<rl:value name='path'/>"
+ --outputpath="<rl:value name='cache' default='.'/>"
+ "<rl:value name='file' method='nosuffix'/>.tiff"
+ </rl:step>
+ </rl:manipulator>
+
+</rl:manipulators>
diff --git a/Master/texmf-dist/tex/context/base/s-abr-01.tex b/Master/texmf-dist/tex/context/base/s-abr-01.tex
index 3be27702396..f7665177dca 100644
--- a/Master/texmf-dist/tex/context/base/s-abr-01.tex
+++ b/Master/texmf-dist/tex/context/base/s-abr-01.tex
@@ -19,104 +19,128 @@
\protect
+\logo [MKI] {MkI}
+\logo [MKII] {MkII}
+\logo [MKIII] {MkIII}
+\logo [MKIV] {MkIV}
+
+%logo [FGA] {fga}
+%logo [FGBBS] {fgbbs}
\logo [ACROBAT] {Acro\-bat}
\logo [AFM] {afm}
+\logo [API] {api}
\logo [ALEPH] {Aleph} % {\mathematics{\aleph}}
\logo [ALGOL] {ALGOL}
-\logo [ARABTEX] {Arab\TeX}
+\logo [AMS] {ams}
\logo [AMSLATEX] {\AmSLaTeX}
\logo [AMSTEX] {\AmSTeX}
-\logo [AMS] {ams}
\logo [ANSI] {ansi}
-\logo [ASCIITEX] {ascii\TeX}
+\logo [ARABTEX] {Arab\TeX}
\logo [ASCII] {ascii}
+\logo [ASCIITEX] {ascii\TeX}
+\logo [BACHOTEX] {Bacho\TeX}
\logo [BIBTEX] {bib\TeX}
\logo [BLUESKY] {BlueSky}
-\logo [BSD] {bsd}
\logo [BMP] {bmp}
-\logo [CDROM] {cdrom}
+\logo [BSD] {bsd}
+\logo [CCODE] {c}
+\logo [CALCMATH] {CalcMath}
\logo [CD] {cd}
+\logo [CPU] {cpu}
+\logo [CDROM] {cdrom}
+\logo [CID] {cid}
+\logo [CJK] {cjk}
\logo [CMR] {cmr}
\logo [CMYK] {cmyk}
\logo [CODHOST] {CodHost}
\logo [CONTEXT] {\ConTeXt}
\logo [CSS] {css}
\logo [CTAN] {ctan}
+\logo [CTXTOOLS] {ctxtools}
\logo [CWEB] {cweb}
\logo [DANTE] {Dante}
\logo [DISTILLER] {distiller}
+\logo [DRATEX] {Dra\TeX}
\logo [DSC] {dsc}
\logo [DTD] {dtd}
\logo [DTK] {dtk}
\logo [DTP] {dtp}
\logo [DVD] {dvd}
-\logo [DVIPSONE] {dvipsone}
+\logo [DVI] {dvi}
\logo [DVIPDFM] {dvipdfm}
\logo [DVIPDFMX] {dvipdfmx}
\logo [DVIPOS] {dvipos}
\logo [DVIPS] {dvips}
+\logo [DVIPSONE] {dvipsone}
\logo [DVISCR] {dviscr}
\logo [DVIWINDO] {dviwindo}
-\logo [DVI] {dvi}
\logo [EC] {ec}
\logo [EIFFEL] {Eiffel}
\logo [EMACS] {emacs}
\logo [EMTEX] {em\TeX}
+\logo [ENCODING] {enc}
\logo [ENCTEX] {enc\TeX}
\logo [EPS] {eps}
-\logo [EXAMPLEX] {examplex}
-\logo [EXAMPLET] {examplet}
-\logo [EXAMPLER] {exampler}
-\logo [EXAMPLEQ] {exampleq}
-\logo [EXAMPLED] {exampled}
-\logo [EXAMPLE] {eXaMpLe}
-\logo [EXIMPLE] {eXiMpLe}
\logo [ETEX] {\eTeX}
+\logo [EUROBACHOTEX] {EuroBacho\TeX}
\logo [EUROMATH] {EuroMath}
\logo [EUROTEX] {Euro\TeX}
+\logo [EXAMPLE] {eXaMpLe}
+\logo [EXAMPLED] {exampled}
+\logo [EXAMPLEQ] {exampleq}
+\logo [EXAMPLER] {exampler}
+\logo [EXAMPLET] {examplet}
+\logo [EXAMPLEX] {examplex}
+\logo [EXIMPLE] {eXiMpLe}
\logo [FAQ] {faq}
-%logo [FGA] {fga}
\logo [FDF] {fdf}
-%logo [FGBBS] {fgbbs}
+\logo [FONTFORGE] {FontForge}
+\logo [FOXET] {foXet}
\logo [FPTEX] {fp\TeX}
\logo [FREEBSD] {FreeBSD}
-\logo [FOXET] {foXet}
\logo [FTP] {ftp}
\logo [GHOSTSCRIPT]{Ghost\-script}
\logo [GHOSTVIEW] {Ghost\-view}
\logo [GIF] {gif}
\logo [GNU] {gnu}
+\logo [GNUPLOT] {gnuplot}
\logo [GS] {Ghost\-Script}
\logo [GUST] {Gust}
\logo [GWTEX] {gw\TeX}
-\logo [HZ] {hz}
-\logo [HTTP] {http}
\logo [HSB] {hsb}
\logo [HTML] {html}
+\logo [HTTP] {http}
+\logo [HZ] {hz}
\logo [IBM] {ibm}
\logo [IMAGEMAGICK]{ImageMagick}
+\logo [INITEX] {ini\TeX}
\logo [INRSTEX] {inrs\TeX}
\logo [IO] {io}
\logo [IRCNET] {IRCnet}
\logo [ISO] {iso}
-\logo [JAVASCRIPT] {Java\-Script}
\logo [JAVA] {Java}
+\logo [JAVASCRIPT] {Java\-Script}
\logo [JPEG] {jpeg}
\logo [JPG] {jpg}
+\logo [KPATHSEA] {kpathsea}
\logo [KPSE] {kpse}
\logo [KPSEWHICH] {kpsewhich}
+\logo [MKTEXLSR] {mktexlsr}
\logo [LAMSTEX] {\LamSTeX}
+\logo [LATEX] {\LaTeX}
\logo [LATEXTE] {\LaTeX2e}
\logo [LATEXTN] {\LaTeX2.09}
-\logo [LATEX] {\LaTeX}
\logo [LINUX] {linux}
\logo [LISP] {Lisp}
-\logo [LUAJIT] {LuaJIT}
+\logo [LPEG] {lpeg}
\logo [LUA] {Lua}
+\logo [LUAJIT] {LuaJIT}
\logo [LUATEX] {Lua\TeX}
\logo [LUATOOLS] {luatools}
\logo [MACOSX] {MacOSX}
+\logo [MACROTEX] {Macro\TeX}
\logo [MAKEMPY] {MakeMPY}
+\logo [MAPPING] {map}
\logo [MAPS] {Maps}
\logo [MATHML] {MathML}
\logo [METAFONT] {\MetaFont}
@@ -124,29 +148,38 @@
\logo [METATEX] {Meta\TeX}
\logo [MIKTEX] {Mik\TeX}
\logo [MLTEX] {ml\TeX}
-\logo [MTXTOOLS] {mtxtools}
+\logo [METATYPE] {MetaType1}
\logo [MODULA] {Modula}
\logo [MOV] {mov}
\logo [MPS] {mps}
\logo [MPTOPDF] {mptopdf}
+\logo [MPLIB] {mplib}
\logo [MSDOS] {msdos}
\logo [MSWINDOWS] {MS~Windows}
+\logo [MTXRUN] {mtxrun}
+\logo [MTXTOOLS] {mtxtools}
\logo [NETPBM] {NetPBM}
\logo [NTG] {ntg}
\logo [NTS] {nts}
+\logo [OFM] {ofm}
\logo [OMEGA] {Omega}
-\logo [OPI] {opi}
\logo [OPENMATH] {OpenMath}
+\logo [OPENTYPE] {OpenType}
+\logo [OPI] {opi}
+\logo [OTF] {otf}
\logo [OTP] {otp}
+\logo [OVF] {ovf}
\logo [PASCAL] {Pascal}
\logo [PCTEX] {pc\TeX}
+\logo [PDF] {pdf}
\logo [PDFETEX] {pdfe\TeX}
\logo [PDFTEX] {pdf\TeX}
+\logo [PDFTOOLS] {pdftools}
\logo [PDFTOPS] {pdftops}
-\logo [PDF] {pdf}
-\logo [PERLTK] {Perl/Tk}
\logo [PERL] {Perl}
+\logo [PERLTK] {Perl/Tk}
\logo [PICTEX] {\PiCTeX}
+\logo [PK] {pk}
\logo [PLAIN] {Plain}
\logo [PNG] {png}
\logo [POSIX] {posix}
@@ -155,16 +188,18 @@
\logo [PRAGMA] {Pragma ADE}
\logo [PRESS] {press}
\logo [PRIFIL] {prifil}
+\logo [PS] {Post\-Script}
\logo [PSCHECK] {pscheck}
+\logo [PSTOEDIT] {pstoedit}
\logo [PSTOPAGE] {pstopage}
\logo [PSTOPDF] {pstopdf}
\logo [PSTRICKS] {pstricks}
-\logo [PSTOEDIT] {pstoedit}
-\logo [PS] {Post\-Script}
+\logo [RAM] {ram}
\logo [READER] {Acro\-bat Reader}
\logo [RELAXNG] {Relax\kern.125emNG}
-\logo [RUBY] {Ruby}
\logo [RGB] {rgb}
+\logo [RLXTOOLS] {rlxtools}
+\logo [RUBY] {Ruby}
\logo [SCITE] {SciTE}
\logo [SGML] {sgml}
\logo [SI] {si}
@@ -173,63 +208,73 @@
\logo [TCPIP] {tcp/ip}
\logo [TDS] {tds} % no sc te
\logo [TETEX] {te\TeX} % no sc te
+\logo [TEX] {\TeX}
\logo [TEXADRES] {\TeX adress}
\logo [TEXBASE] {\TeX base}
\logo [TEXEDIT] {\TeX edit}
\logo [TEXEXEC] {\TeX exec}
+\logo [TEXFONT] {\TeX font}
\logo [TEXFORM] {\TeX form}
\logo [TEXLIVE] {\TeX Live}
+\logo [TEXLUA] {\TeX Lua}
\logo [TEXMF] {texmf}
-\logo [TEXNL] {TEX-NL}
+\logo [TEXMFSTART] {texmfstart}
+\logo [TEXNL] {tex-nl}
\logo [TEXSHOW] {\TeX show}
\logo [TEXSPELL] {\TeX spell}
+\logo [TEXGYRE] {\TeX\ Gyre}
+\logo [TEXSYNC] {texsync}
+\logo [TEXTMATE] {TextMate}
+\logo [TEXTOOLS] {\TeX tools}
\logo [TEXUTIL] {\TeX util}
\logo [TEXWORK] {\TeX work}
-\logo [TEXFONT] {\TeX font}
-\logo [TEXTOOLS] {textools}
-\logo [XMLTOOLS] {xmltools}
-\logo [PDFTOOLS] {pdftools}
-\logo [RLXTOOLS] {rlxtools}
-\logo [CTXTOOLS] {ctxtools}
-\logo [TMFTOOLS] {tmftools}
-\logo [TEXMFSTART] {texmfstart}
-\logo [TEXSYNC] {texsync}
-\logo [TEX] {\TeX}
+\logo [TEXXET] {\TeX\XeT} \def\XeT{XeT}
\logo [TFM] {tfm}
+\logo [TIF] {tif}
+\logo [TIFF] {tiff}
\logo [TIFFINFO] {tiffinfo}
\logo [TIFFTAGS] {tifftags}
-\logo [TIFF] {tiff}
-\logo [TIF] {tif}
+\logo [TMFTOOLS] {tmftools}
\logo [TPIC] {tpic}
+\logo [TPM] {tpm}
+\logo [TRUETYPE] {TrueType}
+\logo [TTF] {ttf}
+\logo [TUG] {tug}
\logo [TUGBOAT] {Tug\-Boat}
\logo [TUGNEWS] {Tug\-News}
-\logo [TUG] {tug}
+\logo [TYPEONE] {Type1}
+\logo [UCS] {ucs}
\logo [UNICODE] {Uni\-code}
\logo [UNIX] {Unix}
\logo [URI] {uri}
\logo [URL] {url}
\logo [USA] {usa}
-\logo [UTF] {utf}
-\logo [UCS] {ucs}
\logo [USENET] {usenet}
\logo [UTF] {utf}
+\logo [UTF] {utf}
+\logo [VF] {vf}
\logo [WDT] {wdt}
-\logo [WEBC] {web2c}
\logo [WEB] {web}
+\logo [WEBC] {web2c}
+\logo [WIKI] {Wiki}
+\logo [WINDOWS] {Windows}
\logo [WINNT] {WinNT}
\logo [WINNX] {Win9x}
\logo [WWW] {www}
\logo [WYSIWYG] {wysiwyg}
\logo [XDVI] {Xdvi}
+\logo [XETEX] {\XeTeX}
+\logo [XFDF] {xfdf}
+\logo [XHTML] {xhtml}
\logo [XINDY] {Xindy}
\logo [XML] {xml}
-\logo [XFDF] {xfdf}
+\logo [XPATH] {xpath}
+\logo [XMLTOOLS] {xmltools}
\logo [XPDFETEX] {xpdfe\TeX}
-\logo [XSLT] {xslt}
-\logo [XSLTPROC] {xsltproc}
\logo [XSL] {xsl}
-\logo [XETEX] {\XeTeX}
\logo [XSLFO] {xsl-fo}
+\logo [XSLT] {xslt}
+\logo [XSLTPROC] {xsltproc}
\logo [XYPIC] {XYPIC} % wrong logo
\logo [YandY] {y\&y}
\logo [ZIP] {zip}
diff --git a/Master/texmf-dist/tex/context/base/s-cdr-01.tex b/Master/texmf-dist/tex/context/base/s-cdr-01.tex
new file mode 100644
index 00000000000..80103936d4f
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/s-cdr-01.tex
@@ -0,0 +1,131 @@
+%D \module
+%D [ file=s-cdr-01,
+%D version=2001.2.07, % maybe earlier
+%D title=\CONTEXT\ Style File,
+%D subtitle=CDROM Cover,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright=Hans Hagen]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\def\PDFMPformoffset{20cm}
+
+\definepapersize
+ [CDcover]
+ [width=12.5cm,
+ height=12.4cm]
+
+\definelayout
+ [CDcover]
+ [topspace=5mm,
+ backspace=5mm,
+ header=0pt,
+ footer=0pt,
+ width=middle,
+ height=middle]
+
+\setuparranging
+ [2SIDE]
+
+\setuppapersize
+ [CDcover]
+ [A4,landscape]
+
+\setuplayout
+ [CDcover]
+
+\setuplayout
+ [location=middle]
+
+\setupcolors
+ [state=start]
+
+\setupbackgrounds
+ [leftpage]
+ [background=leftcover]
+
+\setupbackgrounds
+ [rightpage]
+ [background=rightcover]
+
+\setuppagenumbering
+ [alternative=doublesided]
+
+\defineoverlay[leftcover] [\useMPgraphic{leftcover}]
+\defineoverlay[rightcover][\useMPgraphic{rightcover}]
+
+\startuseMPgraphic{leftcover}
+ StartPage ;
+ pickup pencircle scaled .5pt ;
+ draw
+ bottomboundary Page &
+ rightboundary Page &
+ topboundary Page ;
+ draw
+ bottomboundary (Page enlarged 3mm) &
+ rightboundary (Page enlarged 3mm) &
+ topboundary (Page enlarged 3mm) dashed evenly ;
+ StopPage ;
+\stopuseMPgraphic
+
+\startuseMPgraphic{rightcover}
+ StartPage ;
+ pickup pencircle scaled .5pt ;
+ draw
+ topboundary Page &
+ leftboundary Page &
+ bottomboundary Page ;
+ draw
+ topboundary (Page enlarged 3mm) &
+ leftboundary (Page enlarged 3mm) &
+ bottomboundary (Page enlarged 3mm) dashed evenly ;
+ draw
+ bottomboundary Page --
+ lrcorner Page shifted (-5mm,-1cm) --
+ llcorner Page shifted ( 5mm,-1cm) -- cycle ;
+ draw
+ topboundary Page --
+ ulcorner Page shifted ( 5mm, 1cm) --
+ urcorner Page shifted (-5mm, 1cm) -- cycle ;
+ StopPage ;
+ setbounds currentpicture to Page ;
+\stopuseMPgraphic
+
+\setupmakeup
+ [standard]
+ [doublesided=no,page=]
+
+\setuplayout
+ [topspace=5mm,
+ backspace=5mm,
+ header=0pt,
+ footer=0pt,
+ width=middle,
+ height=middle]
+
+\defineframedtext
+ [maintext]
+ [background={foreground,color},
+ backgroundcolor=a-bit-white,
+ frame=off,
+ before=,
+ after=,
+ align=right,
+ strut=no,
+ height=fit,
+ width=\textheight]
+
+\doifnotmode{demo}{\endinput}
+
+\starttext
+ \startstandardmakeup
+ page 1
+ \stopstandardmakeup
+
+ \startstandardmakeup
+ page 2
+ \stopstandardmakeup
+\stoptext
diff --git a/Master/texmf-dist/tex/context/base/s-fnt-02.tex b/Master/texmf-dist/tex/context/base/s-fnt-02.tex
index c3ffeb9b4c5..69f976102b1 100644
--- a/Master/texmf-dist/tex/context/base/s-fnt-02.tex
+++ b/Master/texmf-dist/tex/context/base/s-fnt-02.tex
@@ -58,10 +58,38 @@
\definefont[FontOne][\getvariable{glyphs}{name-1} at 280pt]
\definefont[FontTwo][\getvariable{glyphs}{name-2} at 280pt]
+% \dostepwiserecurse{0}{255}{1}
+% {\doiffontcharelse{\getvariable{glyphs}{name-1}}{\recurselevel}
+% {\doiffontcharelse{\getvariable{glyphs}{name-2}}{\recurselevel}
+% {\startstandardmakeup
+% \doifelse{\getvariable{glyphs}{frame}}{on} % too many box calculations when off, but who cares
+% {\boxrulewidth=2pt}
+% {\boxrulewidth=0pt}
+% \setbox 0=\hbox{\white\ruledhbox{\FontOne \char\recurselevel}}
+% \setbox 2=\hbox{\white\ruledhbox{\FontTwo \char\recurselevel}}
+% \setbox 4=\hbox{\FontOne \ColorOne \char\recurselevel}
+% \setbox 6=\hbox{\FontTwo \ColorTwo \char\recurselevel}
+% \setbox 8=\hbox{\BackOne \ruledhbox{\FontOne \phantom{\char\recurselevel}}}
+% \setbox10=\hbox{\BackTwo \ruledhbox{\FontTwo \phantom{\char\recurselevel}}}
+% \vfill
+% \hbox{\dostepwiserecurse{0}{10}{2}{\hbox to \hsize{\hss\box\recurselevel\hss}\hskip-\hsize}}
+% \vfill
+% \tttf
+% \setstrut
+% \hbox to \hsize{\strut\hss
+% {\ColorOne \getvariable{glyphs}{name-1}}\quad
+% {\ColorTwo \getvariable{glyphs}{name-2}}\quad
+% {\ColorNone char \recurselevel }\hss}
+% \stopstandardmakeup}
+% {}}
+% {}}
+
\dostepwiserecurse{0}{255}{1}
- {\doiffontcharelse{\getvariable{glyphs}{name-1}}{\recurselevel}
- {\doiffontcharelse{\getvariable{glyphs}{name-2}}{\recurselevel}
- {\startstandardmakeup
+ {\donefalse
+ \doiffontcharelse{\getvariable{glyphs}{name-1}}{\recurselevel}{\donetrue}{}%
+ \doiffontcharelse{\getvariable{glyphs}{name-2}}{\recurselevel}{\donetrue}{}%
+ \ifdone
+ \startstandardmakeup
\doifelse{\getvariable{glyphs}{frame}}{on} % too many box calculations when off, but who cares
{\boxrulewidth=2pt}
{\boxrulewidth=0pt}
@@ -80,9 +108,8 @@
{\ColorOne \getvariable{glyphs}{name-1}}\quad
{\ColorTwo \getvariable{glyphs}{name-2}}\quad
{\ColorNone char \recurselevel }\hss}
- \stopstandardmakeup}
- {}}
- {}}
+ \stopstandardmakeup
+ \fi}
\stopsetups
diff --git a/Master/texmf-dist/tex/context/base/s-mag-01.tex b/Master/texmf-dist/tex/context/base/s-mag-01.tex
index 79d944f4cd8..54d997fc10c 100644
--- a/Master/texmf-dist/tex/context/base/s-mag-01.tex
+++ b/Master/texmf-dist/tex/context/base/s-mag-01.tex
@@ -377,6 +377,13 @@
\definetyping[xtyping] [style=\ttx]
\definetyping[xxtyping][style=\ttxx]
+\definetypeface
+ [narrowtt] [tt]
+ [mono] [modern-cond] [default] [encoding=\defaultencoding]
+
+\definetyping[ntyping] \setuptyping[ntyping][style=\narrowtt]
+\definetype [ntype] \setuptype [ntype] [style=\narrowtt]
+
\doifnotmode{demo}{\endinput}
\startbuffer[abstract]
diff --git a/Master/texmf-dist/tex/context/base/s-map-10.tex b/Master/texmf-dist/tex/context/base/s-map-10.tex
index ec7ef6128b2..362aa2700db 100644
--- a/Master/texmf-dist/tex/context/base/s-map-10.tex
+++ b/Master/texmf-dist/tex/context/base/s-map-10.tex
@@ -385,9 +385,13 @@
\advance \rightskip 0pt plus 2em
\MapsSubTitle\par}
\fi
- \blank[30pt]
+ \doifmodeelse{newstyle}
+ {\blank[22pt]}
+ {\blank[30pt]}
\egroup
\switchtobodyfont[rm,10pt]
+ \doifmode{newstyle}
+ {\noindent\MapsAuthor\blank[line]}
\setupalign[width]
\ifMapsInColumns
\startcolumns\hyphenpenalty1000
diff --git a/Master/texmf-dist/tex/context/base/s-mod-02.tex b/Master/texmf-dist/tex/context/base/s-mod-02.tex
index b6260ab3801..9dae3ecc0dd 100644
--- a/Master/texmf-dist/tex/context/base/s-mod-02.tex
+++ b/Master/texmf-dist/tex/context/base/s-mod-02.tex
@@ -21,12 +21,15 @@
% todo: internationalize + setups
\setuphead[paragraaf][expansion=command]
+\setuphead[section][expansion=command]
\def\complexmodule[#1]% redefined
{\startglobal % i.v.m. \bgroup in \startdocumentation
\getparameters[Module][#1]
\stopglobal % i.v.m. \bgroup in \startdocumentation
- \section{\Modulesubtitle}
+ %%\section{\Modulesubtitle}
+ \xdef\Temp{\Modulesubtitle}%%Modulesubtitle:\framed{BEGIN \Modulesubtitle END} :#1 !}
+ \@EA\section\@EA{\Temp}
\WriteLists}
\def\stopmodule % redefined
@@ -54,7 +57,7 @@
{\doglobal\increment\ModuleNumber
% \immediate\write\BatchFile{call modu-run \FileName\space \ModuleNumber}}
% \immediate\write\BatchFile{texmfstart texutil --modu \FileName}}
- \immediate\write\BatchFile{texmfstart texexec --pdf --modu \FileName}}
+ \immediate\write\BatchFile{texmfstart texexec --pdf --modu --batch \FileName }}
\newif\ifProcessingPublic
diff --git a/Master/texmf-dist/tex/context/base/s-pre-64.tex b/Master/texmf-dist/tex/context/base/s-pre-64.tex
new file mode 100644
index 00000000000..bdc17e18ce2
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/s-pre-64.tex
@@ -0,0 +1,203 @@
+%D \module
+%D [ file=s-pre-64,
+%D version=2006.05.11,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Presentation Environment 64,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+% To be documented, used in 2007
+
+\usemodule[s][pre-60]
+
+\newcounter\shapesynctag
+\newdimen\slantedshapedimen
+\newdimen\slantedshapestep
+\newdimen\slantedshapeleftskip
+\newdimen\slantedshapeoffset
+\newdimen\slantedshapeextra
+
+\positioningtrue
+
+\def\AdaptShape
+ {\doglobal\increment\shapesynctag
+ \getnoflines\textheight
+ \slantedshapestep\dimexpr\slantedshapeleftskip/\noflines\relax
+ \leftskip\slantedshapeleftskip
+ \scratchdimen\dimexpr\MPy{text:\MPp\shapesynctag}+\MPh{text:\MPp\shapesynctag}-\topskip-\MPy\shapesynctag\relax
+ \advance\scratchdimen\slantedshapeextra
+ \getnoflines\scratchdimen
+ \slantedshapedimen \noflines \slantedshapestep
+ \scratchtoks\emptytoks
+ \dorecurse{30}
+ {\appendetoks
+ \the\dimexpr-\slantedshapedimen+\slantedshapeoffset \relax\space
+ \the\dimexpr \hsize-2\slantedshapeoffset\relax\space
+ \to\scratchtoks
+ \advance\slantedshapedimen \slantedshapestep}%
+ \parshape 30 \the\scratchtoks
+ \strut\xypos\shapesynctag}
+
+\def\AdaptShapeX
+ {\doglobal\increment\shapesynctag
+ \getnoflines\textheight
+ \slantedshapestep\dimexpr\slantedshapeleftskip/\noflines\relax
+ \leftskip\slantedshapeleftskip
+ \scratchdimen\dimexpr\MPy{text:\MPp\shapesynctag}+\MPh{text:\MPp\shapesynctag}-\topskip-\MPy\shapesynctag\relax
+ \advance\scratchdimen\slantedshapeextra
+ \getnoflines\scratchdimen
+ \slantedshapedimen \noflines \slantedshapestep
+ \scratchtoks\emptytoks
+ \dorecurse{30}
+ {\appendetoks
+ \the\dimexpr-\slantedshapedimen+\slantedshapeoffset +5cm \relax\space
+ \the\dimexpr \hsize-2\slantedshapeoffset\relax\space
+ \to\scratchtoks
+ \advance\slantedshapedimen \slantedshapestep}%
+ \parshape 30 \the\scratchtoks
+ \strut\xypos\shapesynctag}
+
+\setuppapersize[S6][S6]
+
+\setupinteraction
+ [state=start,
+ click=no]
+
+\setupinteractionscreen
+ [option=max]
+
+\setuplayout
+ [backspace=12pt,
+ topspace=24pt,
+ height=middle,
+ width=middle,
+ header=0pt,
+ footer=0pt]
+
+\definecolor[maincolor][b=.5]
+\definecolor[somecolor][g=.5]
+\definecolor[morecolor][r=.5]
+
+\setupcolors
+ [textcolor=maincolor,
+ state=start]
+
+\setupbackgrounds
+ [text]% [text]
+ [background={base,text,invoke}]
+
+\definelayer
+ [text]
+ [width=\textwidth,
+ height=\textheight]
+
+\definelayer
+ [base]
+ [width=\textwidth,
+ height=\textheight]
+
+\definetype [epet] [style=,color=morecolor]
+\setuptype [style=,color=somecolor]
+
+\slantedshapeleftskip150pt
+\slantedshapeoffset12pt
+\slantedshapeextra10pt
+
+\startreusableMPgraphic{page}
+ StartPage ;
+ fill Page withcolor \MPcolor{maincolor} ;
+ path p ; p := Field[Text][Text] enlarged 6pt ;
+ p :=
+ llcorner p shifted (0,-12pt) --
+ lrcorner p shifted (-150pt,0) --
+ urcorner p shifted (0,12pt) --
+ ulcorner p shifted (150pt,0) --
+ cycle ;
+ fill p
+ withcolor .9white ;
+ StopPage ;
+\stopreusableMPgraphic
+
+\defineoverlay[page][\reuseMPgraphic{page}]
+\setupbackgrounds[page][background=page]
+
+\setupalign[flushleft]
+
+\def\StartItem
+ {\blank[line]
+ \begingroup
+ \EveryPar {\AdaptShape}} % beware: \ABBREV aan gegin gaat fout
+
+\def\StopItem
+ {\endgraf
+ \endgroup
+ \blank[line]}
+
+\def\StartType
+ {\blank[halfline]
+ \begingroup
+ \EveryPar {\AdaptShape}
+ \dontleavehmode \quad}
+
+\def\StopType
+ {\endgraf
+ \endgroup
+ \blank[halfline]}
+
+\def\Title#1%
+ {\page
+ \setlayer
+ [text]
+ [preset=lefttop,
+ rotation=90]
+ {\color[white]{\scale[height=24pt]{\strut#1}}}}
+
+\def\SetBanner#1%
+ {\setuplayer[base][state=repeat]
+ \setlayer[base][preset=rightbottom]{\color[white]{\scale[height=9pt]{\strut#1}}}}
+
+\let\titlefont\relax
+
+\startmode[atpragma]
+ \definefontfeature[default][method=node,script=latn,language=dflt,liga=yes,onum=yes,kern=yes]
+ \definedfont[palatinosanscom-regular*default at 12pt] \setupinterlinespace[line=15pt]
+ \definefont[titlefont][palatinosanscom-bold*default at 48pt]
+\stopmode
+
+\endinput
+
+% \starttext
+
+% \SetBanner{tug 2007 san diego}
+
+% \Title {hans hagen}
+
+% \startstandardmakeup \titlefont \setupinterlinespace[line=3ex] \vfill
+
+% \StartItem \dontleavehmode \quad {\morecolor zapfino, a} \StopItem
+% \StartItem \dontleavehmode \quad {\morecolor torture test} \StopItem
+% \StartItem \dontleavehmode \quad {\morecolor for luatex} \StopItem
+
+% \vfill \stopstandardmakeup
+
+% \Title{loading fonts}
+
+% \StartSteps
+
+% \StartItem the \OPENTYPE\ font reader is borrowed from \FONTFORGE\ \FlushStep \StopItem
+% \StartItem once it was ready, we could look into such a font \FlushStep \StopItem
+% \StartItem it tooks while to figure out the format due to rather fuzzy specs \FlushStep \StopItem
+% \StartItem it took us even more time to find out that the loader was flawed \FlushStep \StopItem
+% \StartItem one reason was that fonts themselves may have bugs or be incomplete \FlushStep \StopItem
+% \StartItem then we changed to \FONTFORGE\ version 2 \FlushStep \StopItem
+% \StartItem this made the missing pieces surface in more complex feature handling \FlushStep \StopItem
+% \StartItem while implementing features the new table format was cleaned up \FlushStep \StopItem
+
+% \StopSteps
+
+% \stoptext
diff --git a/Master/texmf-dist/tex/context/base/s-sys-01.tex b/Master/texmf-dist/tex/context/base/s-sys-01.tex
new file mode 100644
index 00000000000..77d3410c418
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/s-sys-01.tex
@@ -0,0 +1,61 @@
+% engine=luatex
+
+%D \module
+%D [ file=s-sys-01,
+%D version=2008.03.32,
+%D title=\CONTEXT\ Style File,
+%D subtitle=Generate List of Math Symbol,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\startluacode
+function showmath()
+ local slots = mathematics.slots.traditional
+ local escape = characters.filters.utf.private.escape
+ local data = characters.data
+ tex.sprint(tex.ctxcatcodes,"\\starttabulate[|T|c|T|T|T|T||||]")
+ local texsprint = tex.sprint
+% -- function texsprint(a,b) print(b) end
+ for _, v in ipairs(table.sortedkeys(slots)) do
+ local t, d, u = slots[v], data[v], escape(utf.char(v))
+ local class, name, description = d.mathclass or "", d.mathname or "" , d.description or ""
+ if class == "accent" then
+ u = ""
+ end
+ if t[3] and t[4] then
+ texsprint(tex.ctxcatcodes,string.format(
+ "\\NC 0x%04X\\NC $%s$\\NC %s\\NC 0x%04X\\NC %s\\NC 0x%04X\\NC %s\\NC %s\\NC %s\\NC\\NR",
+ v,u,t[1],t[2],t[3],t[4],class,name,description))
+ else
+ texsprint(tex.ctxcatcodes,string.format(
+ "\\NC 0x%04X\\NC $%s$\\NC %s\\NC 0x%04X\\NC\\NC\\NC %s\\NC %s\\NC %s\\NC\\NR",
+ v,u,t[1],t[2],class,name,description))
+ end
+ end
+ tex.sprint(tex.ctxcatcodes,"\\stoptabulate")
+end
+\stopluacode
+
+\setuplayout
+ [backspace=1cm,
+ topspace=1cm,
+ footer=1cm,
+ header=0cm,
+ height=middle,
+ width=middle]
+
+\setupbodyfont
+ [9pt]
+
+\setupfootertexts
+ []
+ [math characters -- \pagenumber]
+
+\starttext
+\ctxlua{showmath()}
+\stoptext
diff --git a/Master/texmf-dist/tex/context/base/sort-def.mkii b/Master/texmf-dist/tex/context/base/sort-def.mkii
new file mode 100644
index 00000000000..10dc31b14e4
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/sort-def.mkii
@@ -0,0 +1,450 @@
+%D \module
+%D [ file=sort-def,
+%D version=2005.08.08,
+%D title=\CONTEXT\ Sort Macros,
+%D subtitle=Defaults,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D This module replaces existing sort key handling and is meant to be
+%D used with the new texutil functionality. Here we define the default
+%D mappings
+
+\exportsortexpansion{aeligature} {ae}
+\exportsortexpansion{AEligature} {AE}
+\exportsortexpansion{ijligature} {ij}
+\exportsortexpansion{IJligature} {IJ}
+\exportsortexpansion{oeligature} {oe}
+\exportsortexpansion{OEligature} {OE}
+
+\exportsortexpansion{ssharp} {ss}
+\exportsortexpansion{Ssharp} {SS}
+
+\exportsortexpansion{thorn} {}
+\exportsortexpansion{Thorn} {}
+
+\exportsortexpansion{eth} {}
+\exportsortexpansion{Eth} {}
+
+\exportsortexpansion{dj} {dstroke}
+\exportsortexpansion{Dj} {Dstroke}
+
+\exportsortexpansion{Acircumflex} {}
+\exportsortexpansion{acircumflex} {}
+\exportsortexpansion{Ccircumflex} {}
+\exportsortexpansion{ccircumflex} {}
+\exportsortexpansion{Ecircumflex} {}
+\exportsortexpansion{ecircumflex} {}
+\exportsortexpansion{Gcircumflex} {}
+\exportsortexpansion{gcircumflex} {}
+\exportsortexpansion{Hcircumflex} {}
+\exportsortexpansion{hcircumflex} {}
+\exportsortexpansion{Icircumflex} {}
+\exportsortexpansion{icircumflex} {}
+\exportsortexpansion{Jcircumflex} {}
+\exportsortexpansion{jcircumflex} {}
+\exportsortexpansion{Ocircumflex} {}
+\exportsortexpansion{ocircumflex} {}
+\exportsortexpansion{Scircumflex} {}
+\exportsortexpansion{scircumflex} {}
+\exportsortexpansion{Ucircumflex} {}
+\exportsortexpansion{ucircumflex} {}
+\exportsortexpansion{Wcircumflex} {}
+\exportsortexpansion{wcircumflex} {}
+\exportsortexpansion{Ycircumflex} {}
+\exportsortexpansion{ycircumflex} {}
+
+\exportsortexpansion{Agrave} {}
+\exportsortexpansion{agrave} {}
+\exportsortexpansion{Egrave} {}
+\exportsortexpansion{egrave} {}
+\exportsortexpansion{Igrave} {}
+\exportsortexpansion{igrave} {}
+\exportsortexpansion{Ograve} {}
+\exportsortexpansion{ograve} {}
+\exportsortexpansion{Ugrave} {}
+\exportsortexpansion{ugrave} {}
+\exportsortexpansion{Ygrave} {}
+\exportsortexpansion{ygrave} {}
+
+\exportsortexpansion{Atilde} {}
+\exportsortexpansion{atilde} {}
+\exportsortexpansion{Itilde} {}
+\exportsortexpansion{itilde} {}
+\exportsortexpansion{Ntilde} {}
+\exportsortexpansion{ntilde} {}
+\exportsortexpansion{Otilde} {}
+\exportsortexpansion{otilde} {}
+\exportsortexpansion{Utilde} {}
+\exportsortexpansion{utilde} {}
+\exportsortexpansion{Ytilde} {}
+\exportsortexpansion{ytilde} {}
+
+\exportsortexpansion{Adiaeresis} {}
+\exportsortexpansion{adiaeresis} {}
+\exportsortexpansion{Ediaeresis} {}
+\exportsortexpansion{ediaeresis} {}
+\exportsortexpansion{Idiaeresis} {}
+\exportsortexpansion{idiaeresis} {}
+\exportsortexpansion{Odiaeresis} {}
+\exportsortexpansion{odiaeresis} {}
+\exportsortexpansion{Udiaeresis} {}
+\exportsortexpansion{udiaeresis} {}
+\exportsortexpansion{Ydiaeresis} {}
+\exportsortexpansion{ydiaeresis} {}
+
+\exportsortexpansion{Aacute} {}
+\exportsortexpansion{aacute} {}
+\exportsortexpansion{Cacute} {}
+\exportsortexpansion{cacute} {}
+\exportsortexpansion{Eacute} {}
+\exportsortexpansion{eacute} {}
+\exportsortexpansion{Iacute} {}
+\exportsortexpansion{iacute} {}
+\exportsortexpansion{Lacute} {}
+\exportsortexpansion{lacute} {}
+\exportsortexpansion{Nacute} {}
+\exportsortexpansion{nacute} {}
+\exportsortexpansion{Oacute} {}
+\exportsortexpansion{oacute} {}
+\exportsortexpansion{Racute} {}
+\exportsortexpansion{racute} {}
+\exportsortexpansion{Sacute} {}
+\exportsortexpansion{sacute} {}
+\exportsortexpansion{Uacute} {}
+\exportsortexpansion{uacute} {}
+\exportsortexpansion{Yacute} {}
+\exportsortexpansion{yacute} {}
+\exportsortexpansion{Zacute} {}
+\exportsortexpansion{zacute} {}
+
+\exportsortexpansion{dstroke} {}
+\exportsortexpansion{Dstroke} {}
+\exportsortexpansion{Hstroke} {}
+\exportsortexpansion{hstroke} {}
+\exportsortexpansion{Tstroke} {}
+\exportsortexpansion{tstroke} {}
+
+\exportsortexpansion{Cdotaccent} {}
+\exportsortexpansion{cdotaccent} {}
+\exportsortexpansion{Edotaccent} {}
+\exportsortexpansion{edotaccent} {}
+\exportsortexpansion{Gdotaccent} {}
+\exportsortexpansion{gdotaccent} {}
+\exportsortexpansion{Idotaccent} {}
+\exportsortexpansion{idotaccent} {}
+\exportsortexpansion{Zdotaccent} {}
+\exportsortexpansion{zdotaccent} {}
+
+\exportsortexpansion{Amacron} {}
+\exportsortexpansion{amacron} {}
+\exportsortexpansion{Emacron} {}
+\exportsortexpansion{emacron} {}
+\exportsortexpansion{Imacron} {}
+\exportsortexpansion{imacron} {}
+\exportsortexpansion{Omacron} {}
+\exportsortexpansion{omacron} {}
+\exportsortexpansion{Umacron} {}
+\exportsortexpansion{umacron} {}
+
+\exportsortexpansion{Ccedilla} {}
+\exportsortexpansion{ccedilla} {}
+\exportsortexpansion{Kcedilla} {}
+\exportsortexpansion{kcedilla} {}
+\exportsortexpansion{Lcedilla} {}
+\exportsortexpansion{lcedilla} {}
+\exportsortexpansion{Ncedilla} {}
+\exportsortexpansion{ncedilla} {}
+\exportsortexpansion{Rcedilla} {}
+\exportsortexpansion{rcedilla} {}
+\exportsortexpansion{Scedilla} {}
+\exportsortexpansion{scedilla} {}
+\exportsortexpansion{Tcedilla} {}
+\exportsortexpansion{tcedilla} {}
+
+\exportsortexpansion{Ohungarumlaut} {}
+\exportsortexpansion{ohungarumlaut} {}
+\exportsortexpansion{Uhungarumlaut} {}
+\exportsortexpansion{uhungarumlaut} {}
+
+\exportsortexpansion{Aogonek} {}
+\exportsortexpansion{aogonek} {}
+\exportsortexpansion{Eogonek} {}
+\exportsortexpansion{eogonek} {}
+\exportsortexpansion{Iogonek} {}
+\exportsortexpansion{iogonek} {}
+\exportsortexpansion{Uogonek} {}
+\exportsortexpansion{uogonek} {}
+
+\exportsortexpansion{Aring} {}
+\exportsortexpansion{aring} {}
+\exportsortexpansion{Uring} {}
+\exportsortexpansion{uring} {}
+
+\exportsortexpansion{Abreve} {}
+\exportsortexpansion{abreve} {}
+\exportsortexpansion{Ebreve} {}
+\exportsortexpansion{ebreve} {}
+\exportsortexpansion{Gbreve} {}
+\exportsortexpansion{gbreve} {}
+\exportsortexpansion{Ibreve} {}
+\exportsortexpansion{ibreve} {}
+\exportsortexpansion{Obreve} {}
+\exportsortexpansion{obreve} {}
+\exportsortexpansion{Ubreve} {}
+\exportsortexpansion{ubreve} {}
+
+\exportsortexpansion{Ccaron} {}
+\exportsortexpansion{ccaron} {}
+\exportsortexpansion{Dcaron} {}
+\exportsortexpansion{dcaron} {}
+\exportsortexpansion{Ecaron} {}
+\exportsortexpansion{ecaron} {}
+\exportsortexpansion{Lcaron} {}
+\exportsortexpansion{lcaron} {}
+\exportsortexpansion{Ncaron} {}
+\exportsortexpansion{ncaron} {}
+\exportsortexpansion{Rcaron} {}
+\exportsortexpansion{rcaron} {}
+\exportsortexpansion{Scaron} {}
+\exportsortexpansion{scaron} {}
+\exportsortexpansion{Tcaron} {}
+\exportsortexpansion{tcaron} {}
+\exportsortexpansion{Ycaron} {}
+\exportsortexpansion{ycaron} {}
+\exportsortexpansion{Zcaron} {}
+\exportsortexpansion{zcaron} {}
+
+\exportsortexpansion{Lstroke} {}
+\exportsortexpansion{lstroke} {}
+\exportsortexpansion{Ostroke} {}
+\exportsortexpansion{ostroke} {}
+
+\exportsortexpansion{aumlaut} {}
+\exportsortexpansion{eumlaut} {}
+\exportsortexpansion{iumlaut} {}
+\exportsortexpansion{oumlaut} {}
+\exportsortexpansion{uumlaut} {}
+
+\exportsortexpansion{Aumlaut} {}
+\exportsortexpansion{Eumlaut} {}
+\exportsortexpansion{Iumlaut} {}
+\exportsortexpansion{Oumlaut} {}
+\exportsortexpansion{Uumlaut} {}
+
+\exportsortexpansion{scommaaccent} {}
+\exportsortexpansion{Scommaaccent} {}
+\exportsortexpansion{tcommaaccent} {}
+\exportsortexpansion{Tcommaaccent} {}
+
+\exportsortexpansion{Etilde} {}
+\exportsortexpansion{etilde} {}
+
+\exportsortexpansion{Ahook} {}
+\exportsortexpansion{ahook} {}
+\exportsortexpansion{Ehook} {}
+\exportsortexpansion{ehook} {}
+\exportsortexpansion{Ihook} {}
+\exportsortexpansion{ihook} {}
+\exportsortexpansion{Ohook} {}
+\exportsortexpansion{ohook} {}
+\exportsortexpansion{Uhook} {}
+\exportsortexpansion{uhook} {}
+\exportsortexpansion{Yhook} {}
+\exportsortexpansion{yhook} {}
+
+\exportsortexpansion{Acircumflexgrave} {}
+\exportsortexpansion{Acircumflexacute} {}
+\exportsortexpansion{Acircumflextilde} {}
+\exportsortexpansion{Acircumflexhook} {}
+\exportsortexpansion{acircumflexgrave} {}
+\exportsortexpansion{acircumflexacute} {}
+\exportsortexpansion{acircumflextilde} {}
+\exportsortexpansion{acircumflexhook} {}
+\exportsortexpansion{Ecircumflexgrave} {}
+\exportsortexpansion{Ecircumflexacute} {}
+\exportsortexpansion{Ecircumflextilde} {}
+\exportsortexpansion{Ecircumflexhook} {}
+\exportsortexpansion{ecircumflexgrave} {}
+\exportsortexpansion{ecircumflexacute} {}
+\exportsortexpansion{ecircumflextilde} {}
+\exportsortexpansion{ecircumflexhook} {}
+\exportsortexpansion{Ocircumflexgrave} {}
+\exportsortexpansion{Ocircumflexacute} {}
+\exportsortexpansion{Ocircumflextilde} {}
+\exportsortexpansion{Ocircumflexhook} {}
+\exportsortexpansion{ocircumflexgrave} {}
+\exportsortexpansion{ocircumflexacute} {}
+\exportsortexpansion{ocircumflextilde} {}
+\exportsortexpansion{ocircumflexhook} {}
+
+\exportsortexpansion{Abrevegrave} {}
+\exportsortexpansion{Abreveacute} {}
+\exportsortexpansion{Abrevetilde} {}
+\exportsortexpansion{Abrevehook} {}
+\exportsortexpansion{abrevegrave} {}
+\exportsortexpansion{abreveacute} {}
+\exportsortexpansion{abrevetilde} {}
+\exportsortexpansion{abrevehook} {}
+
+\exportsortexpansion{Adotbelow} {}
+\exportsortexpansion{adotbelow} {}
+\exportsortexpansion{Edotbelow} {}
+\exportsortexpansion{edotbelow} {}
+\exportsortexpansion{Idotbelow} {}
+\exportsortexpansion{idotbelow} {}
+\exportsortexpansion{Odotbelow} {}
+\exportsortexpansion{odotbelow} {}
+\exportsortexpansion{Udotbelow} {}
+\exportsortexpansion{udotbelow} {}
+\exportsortexpansion{Ydotbelow} {}
+\exportsortexpansion{ydotbelow} {}
+\exportsortexpansion{Ohorndotbelow} {}
+\exportsortexpansion{ohorndotbelow} {}
+\exportsortexpansion{Uhorndotbelow} {}
+\exportsortexpansion{uhorndotbelow} {}
+
+\exportsortexpansion{Acircumflexdotbelow} {}
+\exportsortexpansion{acircumflexdotbelow} {}
+\exportsortexpansion{Ecircumflexdotbelow} {}
+\exportsortexpansion{ecircumflexdotbelow} {}
+\exportsortexpansion{Ocircumflexdotbelow} {}
+\exportsortexpansion{ocircumflexdotbelow} {}
+\exportsortexpansion{Abrevedotbelow} {}
+\exportsortexpansion{abrevedotbelow} {}
+
+\exportsortexpansion{Ohorn} {}
+\exportsortexpansion{Ohorngrave} {}
+\exportsortexpansion{Ohornacute} {}
+\exportsortexpansion{Ohorntilde} {}
+\exportsortexpansion{Ohornhook } {}
+\exportsortexpansion{ohorn} {}
+\exportsortexpansion{ohorngrave} {}
+\exportsortexpansion{ohornacute} {}
+\exportsortexpansion{ohorntilde} {}
+\exportsortexpansion{ohornhook } {}
+\exportsortexpansion{Uhorn} {}
+\exportsortexpansion{Uhorngrave} {}
+\exportsortexpansion{Uhornacute} {}
+\exportsortexpansion{Uhorntilde} {}
+\exportsortexpansion{Uhornhook } {}
+\exportsortexpansion{uhorn} {}
+\exportsortexpansion{uhorngrave} {}
+\exportsortexpansion{uhornacute} {}
+\exportsortexpansion{uhorntilde} {}
+\exportsortexpansion{uhornhook} {}
+
+\exportsortexpansion{eszett} {ssharp}
+\exportsortexpansion{Eszett} {Ssharp}
+
+\exportsortexpansion{lslash} {lstroke}
+\exportsortexpansion{Lslash} {Lstroke}
+\exportsortexpansion{dslash} {dstroke}
+\exportsortexpansion{Dslash} {Dstroke}
+\exportsortexpansion{oslash} {ostroke}
+\exportsortexpansion{Oslash} {Ostroke}
+
+\exportsortexpansion{dcroat} {dstroke}
+\exportsortexpansion{Dcroat} {Dstroke}
+
+% more
+
+\exportsortshortcut{\^ A} {\Acircumflex} \exportsortshortcut{\^ a} {\acircumflex}
+\exportsortshortcut{\^ C} {\Ccircumflex} \exportsortshortcut{\^ c} {\ccircumflex}
+\exportsortshortcut{\^ E} {\Ecircumflex} \exportsortshortcut{\^ e} {\ecircumflex}
+\exportsortshortcut{\^ G} {\Gcircumflex} \exportsortshortcut{\^ g} {\gcircumflex}
+\exportsortshortcut{\^ H} {\Hcircumflex} \exportsortshortcut{\^ h} {\hcircumflex}
+\exportsortshortcut{\^ I} {\Icircumflex} \exportsortshortcut{\^ i} {\icircumflex} \exportsortshortcut{\^\i} {\icircumflex}
+\exportsortshortcut{\^ J} {\Jcircumflex} \exportsortshortcut{\^ j} {\jcircumflex} \exportsortshortcut{\^\j} {\jcircumflex}
+\exportsortshortcut{\^ O} {\Ocircumflex} \exportsortshortcut{\^ o} {\ocircumflex}
+\exportsortshortcut{\^ S} {\Scircumflex} \exportsortshortcut{\^ s} {\scircumflex}
+\exportsortshortcut{\^ U} {\Ucircumflex} \exportsortshortcut{\^ u} {\ucircumflex}
+\exportsortshortcut{\^ W} {\Wcircumflex} \exportsortshortcut{\^ w} {\wcircumflex}
+\exportsortshortcut{\^ Y} {\Ycircumflex} \exportsortshortcut{\^ y} {\ycircumflex}
+
+\exportsortshortcut{\` A} {\Agrave} \exportsortshortcut{\` a} {\agrave}
+\exportsortshortcut{\` E} {\Egrave} \exportsortshortcut{\` e} {\egrave}
+\exportsortshortcut{\` I} {\Igrave} \exportsortshortcut{\` i} {\igrave} \exportsortshortcut{\`\i} {\igrave}
+\exportsortshortcut{\` O} {\Ograve} \exportsortshortcut{\` o} {\ograve}
+\exportsortshortcut{\` U} {\Ugrave} \exportsortshortcut{\` u} {\ugrave}
+\exportsortshortcut{\` Y} {\Ygrave} \exportsortshortcut{\` y} {\ygrave}
+
+\exportsortshortcut{\~ A} {\Atilde} \exportsortshortcut{\~ a} {\atilde}
+\exportsortshortcut{\~ I} {\Itilde} \exportsortshortcut{\~ i} {\itilde} \exportsortshortcut{\~\i} {\itilde}
+\exportsortshortcut{\~ O} {\Otilde} \exportsortshortcut{\~ o} {\otilde}
+\exportsortshortcut{\~ U} {\Utilde} \exportsortshortcut{\~ u} {\utilde}
+
+\exportsortshortcut{\" A} {\Adiaeresis} \exportsortshortcut{\" a} {\adiaeresis}
+\exportsortshortcut{\" E} {\Ediaeresis} \exportsortshortcut{\" e} {\ediaeresis}
+\exportsortshortcut{\" I} {\Idiaeresis} \exportsortshortcut{\" i} {\idiaeresis} \exportsortshortcut{\"\i} {\idiaeresis}
+\exportsortshortcut{\" O} {\Odiaeresis} \exportsortshortcut{\" o} {\odiaeresis}
+\exportsortshortcut{\" U} {\Udiaeresis} \exportsortshortcut{\" u} {\udiaeresis}
+\exportsortshortcut{\" Y} {\Ydiaeresis} \exportsortshortcut{\" y} {\ydiaeresis}
+
+\exportsortshortcut{\' A} {\Aacute} \exportsortshortcut{\' a} {\aacute}
+\exportsortshortcut{\' C} {\Cacute} \exportsortshortcut{\' c} {\cacute}
+\exportsortshortcut{\' E} {\Eacute} \exportsortshortcut{\' e} {\eacute}
+\exportsortshortcut{\' I} {\Iacute} \exportsortshortcut{\' i} {\iacute} \exportsortshortcut{\'\i} {\iacute}
+\exportsortshortcut{\' L} {\Lacute} \exportsortshortcut{\' l} {\lacute}
+\exportsortshortcut{\' N} {\Nacute} \exportsortshortcut{\' n} {\nacute}
+\exportsortshortcut{\' O} {\Oacute} \exportsortshortcut{\' o} {\oacute}
+\exportsortshortcut{\' R} {\Racute} \exportsortshortcut{\' r} {\racute}
+\exportsortshortcut{\' S} {\Sacute} \exportsortshortcut{\' s} {\sacute}
+\exportsortshortcut{\' U} {\Uacute} \exportsortshortcut{\' u} {\uacute}
+\exportsortshortcut{\' Y} {\Yacute} \exportsortshortcut{\' y} {\yacute}
+\exportsortshortcut{\' Z} {\Zacute} \exportsortshortcut{\' z} {\zacute}
+
+\exportsortshortcut{\. C} {\Cdotaccent} \exportsortshortcut{\. c} {\cdotaccent}
+\exportsortshortcut{\. E} {\Edotaccent} \exportsortshortcut{\. e} {\edotaccent}
+\exportsortshortcut{\. G} {\Gdotaccent} \exportsortshortcut{\. g} {\gdotaccent}
+\exportsortshortcut{\. I} {\Idotaccent} \exportsortshortcut{\. i} {\idotaccent} \exportsortshortcut{\.\i} {\idotaccent}
+\exportsortshortcut{\. Z} {\Zdotaccent} \exportsortshortcut{\. z} {\zdotaccent}
+
+\exportsortshortcut{\= A} {\Amacron} \exportsortshortcut{\= a} {\amacron}
+\exportsortshortcut{\= E} {\Emacron} \exportsortshortcut{\= e} {\emacron}
+\exportsortshortcut{\= I} {\Imacron} \exportsortshortcut{\= i} {\imacron} \exportsortshortcut{\=\i} {\imacron}
+\exportsortshortcut{\= O} {\Omacron} \exportsortshortcut{\= o} {\omacron}
+\exportsortshortcut{\= U} {\Umacron} \exportsortshortcut{\= u} {\umacron}
+
+\exportsortshortcut{\c C} {\Ccedilla} \exportsortshortcut{\c c} {\ccedilla}
+\exportsortshortcut{\c K} {\Kcedilla} \exportsortshortcut{\c k} {\kcedilla}
+\exportsortshortcut{\c L} {\Lcedilla} \exportsortshortcut{\c l} {\lcedilla}
+\exportsortshortcut{\c N} {\Ncedilla} \exportsortshortcut{\c n} {\ncedilla}
+\exportsortshortcut{\c R} {\Rcedilla} \exportsortshortcut{\c r} {\rcedilla}
+\exportsortshortcut{\c S} {\Scedilla} \exportsortshortcut{\c s} {\scedilla}
+\exportsortshortcut{\c T} {\Tcedilla} \exportsortshortcut{\c t} {\tcedilla}
+
+\exportsortshortcut{\H O} {\Ohungarumlaut} \exportsortshortcut{\H o} {\ohungarumlaut}
+\exportsortshortcut{\H u} {\uhungarumlaut} \exportsortshortcut{\H U} {\Uhungarumlaut}
+
+\exportsortshortcut{\k A} {\Aogonek} \exportsortshortcut{\k a} {\aogonek}
+\exportsortshortcut{\k E} {\Eogonek} \exportsortshortcut{\k e} {\eogonek}
+\exportsortshortcut{\k I} {\Iogonek} \exportsortshortcut{\k i} {\iogonek}
+\exportsortshortcut{\k U} {\Uogonek} \exportsortshortcut{\k u} {\uogonek}
+
+\exportsortshortcut{\r A} {\Aring} \exportsortshortcut{\r a} {\aring}
+\exportsortshortcut{\r U} {\Uring} \exportsortshortcut{\r u} {\uring}
+
+\exportsortshortcut{\u A} {\Abreve} \exportsortshortcut{\u a} {\abreve}
+\exportsortshortcut{\u E} {\Ebreve} \exportsortshortcut{\u e} {\ebreve}
+\exportsortshortcut{\u G} {\Gbreve} \exportsortshortcut{\u g} {\gbreve}
+\exportsortshortcut{\u I} {\Ibreve} \exportsortshortcut{\u i} {\ibreve} \exportsortshortcut{\u\i} {\ibreve}
+\exportsortshortcut{\u O} {\Obreve} \exportsortshortcut{\u o} {\obreve}
+\exportsortshortcut{\u U} {\Ubreve} \exportsortshortcut{\u u} {\ubreve}
+
+\exportsortshortcut{\v C} {\Ccaron} \exportsortshortcut{\v c} {\ccaron}
+\exportsortshortcut{\v D} {\Dcaron} \exportsortshortcut{\v d} {\dcaron}
+\exportsortshortcut{\v E} {\Ecaron} \exportsortshortcut{\v e} {\ecaron}
+\exportsortshortcut{\v L} {\Lcaron} \exportsortshortcut{\v l} {\lcaron}
+\exportsortshortcut{\v N} {\Ncaron} \exportsortshortcut{\v n} {\ncaron}
+\exportsortshortcut{\v R} {\Rcaron} \exportsortshortcut{\v r} {\rcaron}
+\exportsortshortcut{\v S} {\Scaron} \exportsortshortcut{\v s} {\scaron}
+\exportsortshortcut{\v T} {\Tcaron} \exportsortshortcut{\v t} {\tcaron}
+\exportsortshortcut{\v Z} {\Zcaron} \exportsortshortcut{\v z} {\zcaron}
+
+\endinput
diff --git a/Master/texmf-dist/tex/context/base/sort-def.mkiv b/Master/texmf-dist/tex/context/base/sort-def.mkiv
new file mode 100644
index 00000000000..8cc92a02e1b
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/sort-def.mkiv
@@ -0,0 +1,16 @@
+%D \module
+%D [ file=sort-def,
+%D version=2005.08.08,
+%D title=\CONTEXT\ Sort Macros,
+%D subtitle=Defaults,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+% nothing here
+
+\endinput
diff --git a/Master/texmf-dist/tex/context/base/sort-def.tex b/Master/texmf-dist/tex/context/base/sort-def.tex
index 10dc31b14e4..502fb787f40 100644
--- a/Master/texmf-dist/tex/context/base/sort-def.tex
+++ b/Master/texmf-dist/tex/context/base/sort-def.tex
@@ -15,436 +15,6 @@
%D used with the new texutil functionality. Here we define the default
%D mappings
-\exportsortexpansion{aeligature} {ae}
-\exportsortexpansion{AEligature} {AE}
-\exportsortexpansion{ijligature} {ij}
-\exportsortexpansion{IJligature} {IJ}
-\exportsortexpansion{oeligature} {oe}
-\exportsortexpansion{OEligature} {OE}
-
-\exportsortexpansion{ssharp} {ss}
-\exportsortexpansion{Ssharp} {SS}
-
-\exportsortexpansion{thorn} {}
-\exportsortexpansion{Thorn} {}
-
-\exportsortexpansion{eth} {}
-\exportsortexpansion{Eth} {}
-
-\exportsortexpansion{dj} {dstroke}
-\exportsortexpansion{Dj} {Dstroke}
-
-\exportsortexpansion{Acircumflex} {}
-\exportsortexpansion{acircumflex} {}
-\exportsortexpansion{Ccircumflex} {}
-\exportsortexpansion{ccircumflex} {}
-\exportsortexpansion{Ecircumflex} {}
-\exportsortexpansion{ecircumflex} {}
-\exportsortexpansion{Gcircumflex} {}
-\exportsortexpansion{gcircumflex} {}
-\exportsortexpansion{Hcircumflex} {}
-\exportsortexpansion{hcircumflex} {}
-\exportsortexpansion{Icircumflex} {}
-\exportsortexpansion{icircumflex} {}
-\exportsortexpansion{Jcircumflex} {}
-\exportsortexpansion{jcircumflex} {}
-\exportsortexpansion{Ocircumflex} {}
-\exportsortexpansion{ocircumflex} {}
-\exportsortexpansion{Scircumflex} {}
-\exportsortexpansion{scircumflex} {}
-\exportsortexpansion{Ucircumflex} {}
-\exportsortexpansion{ucircumflex} {}
-\exportsortexpansion{Wcircumflex} {}
-\exportsortexpansion{wcircumflex} {}
-\exportsortexpansion{Ycircumflex} {}
-\exportsortexpansion{ycircumflex} {}
-
-\exportsortexpansion{Agrave} {}
-\exportsortexpansion{agrave} {}
-\exportsortexpansion{Egrave} {}
-\exportsortexpansion{egrave} {}
-\exportsortexpansion{Igrave} {}
-\exportsortexpansion{igrave} {}
-\exportsortexpansion{Ograve} {}
-\exportsortexpansion{ograve} {}
-\exportsortexpansion{Ugrave} {}
-\exportsortexpansion{ugrave} {}
-\exportsortexpansion{Ygrave} {}
-\exportsortexpansion{ygrave} {}
-
-\exportsortexpansion{Atilde} {}
-\exportsortexpansion{atilde} {}
-\exportsortexpansion{Itilde} {}
-\exportsortexpansion{itilde} {}
-\exportsortexpansion{Ntilde} {}
-\exportsortexpansion{ntilde} {}
-\exportsortexpansion{Otilde} {}
-\exportsortexpansion{otilde} {}
-\exportsortexpansion{Utilde} {}
-\exportsortexpansion{utilde} {}
-\exportsortexpansion{Ytilde} {}
-\exportsortexpansion{ytilde} {}
-
-\exportsortexpansion{Adiaeresis} {}
-\exportsortexpansion{adiaeresis} {}
-\exportsortexpansion{Ediaeresis} {}
-\exportsortexpansion{ediaeresis} {}
-\exportsortexpansion{Idiaeresis} {}
-\exportsortexpansion{idiaeresis} {}
-\exportsortexpansion{Odiaeresis} {}
-\exportsortexpansion{odiaeresis} {}
-\exportsortexpansion{Udiaeresis} {}
-\exportsortexpansion{udiaeresis} {}
-\exportsortexpansion{Ydiaeresis} {}
-\exportsortexpansion{ydiaeresis} {}
-
-\exportsortexpansion{Aacute} {}
-\exportsortexpansion{aacute} {}
-\exportsortexpansion{Cacute} {}
-\exportsortexpansion{cacute} {}
-\exportsortexpansion{Eacute} {}
-\exportsortexpansion{eacute} {}
-\exportsortexpansion{Iacute} {}
-\exportsortexpansion{iacute} {}
-\exportsortexpansion{Lacute} {}
-\exportsortexpansion{lacute} {}
-\exportsortexpansion{Nacute} {}
-\exportsortexpansion{nacute} {}
-\exportsortexpansion{Oacute} {}
-\exportsortexpansion{oacute} {}
-\exportsortexpansion{Racute} {}
-\exportsortexpansion{racute} {}
-\exportsortexpansion{Sacute} {}
-\exportsortexpansion{sacute} {}
-\exportsortexpansion{Uacute} {}
-\exportsortexpansion{uacute} {}
-\exportsortexpansion{Yacute} {}
-\exportsortexpansion{yacute} {}
-\exportsortexpansion{Zacute} {}
-\exportsortexpansion{zacute} {}
-
-\exportsortexpansion{dstroke} {}
-\exportsortexpansion{Dstroke} {}
-\exportsortexpansion{Hstroke} {}
-\exportsortexpansion{hstroke} {}
-\exportsortexpansion{Tstroke} {}
-\exportsortexpansion{tstroke} {}
-
-\exportsortexpansion{Cdotaccent} {}
-\exportsortexpansion{cdotaccent} {}
-\exportsortexpansion{Edotaccent} {}
-\exportsortexpansion{edotaccent} {}
-\exportsortexpansion{Gdotaccent} {}
-\exportsortexpansion{gdotaccent} {}
-\exportsortexpansion{Idotaccent} {}
-\exportsortexpansion{idotaccent} {}
-\exportsortexpansion{Zdotaccent} {}
-\exportsortexpansion{zdotaccent} {}
-
-\exportsortexpansion{Amacron} {}
-\exportsortexpansion{amacron} {}
-\exportsortexpansion{Emacron} {}
-\exportsortexpansion{emacron} {}
-\exportsortexpansion{Imacron} {}
-\exportsortexpansion{imacron} {}
-\exportsortexpansion{Omacron} {}
-\exportsortexpansion{omacron} {}
-\exportsortexpansion{Umacron} {}
-\exportsortexpansion{umacron} {}
-
-\exportsortexpansion{Ccedilla} {}
-\exportsortexpansion{ccedilla} {}
-\exportsortexpansion{Kcedilla} {}
-\exportsortexpansion{kcedilla} {}
-\exportsortexpansion{Lcedilla} {}
-\exportsortexpansion{lcedilla} {}
-\exportsortexpansion{Ncedilla} {}
-\exportsortexpansion{ncedilla} {}
-\exportsortexpansion{Rcedilla} {}
-\exportsortexpansion{rcedilla} {}
-\exportsortexpansion{Scedilla} {}
-\exportsortexpansion{scedilla} {}
-\exportsortexpansion{Tcedilla} {}
-\exportsortexpansion{tcedilla} {}
-
-\exportsortexpansion{Ohungarumlaut} {}
-\exportsortexpansion{ohungarumlaut} {}
-\exportsortexpansion{Uhungarumlaut} {}
-\exportsortexpansion{uhungarumlaut} {}
-
-\exportsortexpansion{Aogonek} {}
-\exportsortexpansion{aogonek} {}
-\exportsortexpansion{Eogonek} {}
-\exportsortexpansion{eogonek} {}
-\exportsortexpansion{Iogonek} {}
-\exportsortexpansion{iogonek} {}
-\exportsortexpansion{Uogonek} {}
-\exportsortexpansion{uogonek} {}
-
-\exportsortexpansion{Aring} {}
-\exportsortexpansion{aring} {}
-\exportsortexpansion{Uring} {}
-\exportsortexpansion{uring} {}
-
-\exportsortexpansion{Abreve} {}
-\exportsortexpansion{abreve} {}
-\exportsortexpansion{Ebreve} {}
-\exportsortexpansion{ebreve} {}
-\exportsortexpansion{Gbreve} {}
-\exportsortexpansion{gbreve} {}
-\exportsortexpansion{Ibreve} {}
-\exportsortexpansion{ibreve} {}
-\exportsortexpansion{Obreve} {}
-\exportsortexpansion{obreve} {}
-\exportsortexpansion{Ubreve} {}
-\exportsortexpansion{ubreve} {}
-
-\exportsortexpansion{Ccaron} {}
-\exportsortexpansion{ccaron} {}
-\exportsortexpansion{Dcaron} {}
-\exportsortexpansion{dcaron} {}
-\exportsortexpansion{Ecaron} {}
-\exportsortexpansion{ecaron} {}
-\exportsortexpansion{Lcaron} {}
-\exportsortexpansion{lcaron} {}
-\exportsortexpansion{Ncaron} {}
-\exportsortexpansion{ncaron} {}
-\exportsortexpansion{Rcaron} {}
-\exportsortexpansion{rcaron} {}
-\exportsortexpansion{Scaron} {}
-\exportsortexpansion{scaron} {}
-\exportsortexpansion{Tcaron} {}
-\exportsortexpansion{tcaron} {}
-\exportsortexpansion{Ycaron} {}
-\exportsortexpansion{ycaron} {}
-\exportsortexpansion{Zcaron} {}
-\exportsortexpansion{zcaron} {}
-
-\exportsortexpansion{Lstroke} {}
-\exportsortexpansion{lstroke} {}
-\exportsortexpansion{Ostroke} {}
-\exportsortexpansion{ostroke} {}
-
-\exportsortexpansion{aumlaut} {}
-\exportsortexpansion{eumlaut} {}
-\exportsortexpansion{iumlaut} {}
-\exportsortexpansion{oumlaut} {}
-\exportsortexpansion{uumlaut} {}
-
-\exportsortexpansion{Aumlaut} {}
-\exportsortexpansion{Eumlaut} {}
-\exportsortexpansion{Iumlaut} {}
-\exportsortexpansion{Oumlaut} {}
-\exportsortexpansion{Uumlaut} {}
-
-\exportsortexpansion{scommaaccent} {}
-\exportsortexpansion{Scommaaccent} {}
-\exportsortexpansion{tcommaaccent} {}
-\exportsortexpansion{Tcommaaccent} {}
-
-\exportsortexpansion{Etilde} {}
-\exportsortexpansion{etilde} {}
-
-\exportsortexpansion{Ahook} {}
-\exportsortexpansion{ahook} {}
-\exportsortexpansion{Ehook} {}
-\exportsortexpansion{ehook} {}
-\exportsortexpansion{Ihook} {}
-\exportsortexpansion{ihook} {}
-\exportsortexpansion{Ohook} {}
-\exportsortexpansion{ohook} {}
-\exportsortexpansion{Uhook} {}
-\exportsortexpansion{uhook} {}
-\exportsortexpansion{Yhook} {}
-\exportsortexpansion{yhook} {}
-
-\exportsortexpansion{Acircumflexgrave} {}
-\exportsortexpansion{Acircumflexacute} {}
-\exportsortexpansion{Acircumflextilde} {}
-\exportsortexpansion{Acircumflexhook} {}
-\exportsortexpansion{acircumflexgrave} {}
-\exportsortexpansion{acircumflexacute} {}
-\exportsortexpansion{acircumflextilde} {}
-\exportsortexpansion{acircumflexhook} {}
-\exportsortexpansion{Ecircumflexgrave} {}
-\exportsortexpansion{Ecircumflexacute} {}
-\exportsortexpansion{Ecircumflextilde} {}
-\exportsortexpansion{Ecircumflexhook} {}
-\exportsortexpansion{ecircumflexgrave} {}
-\exportsortexpansion{ecircumflexacute} {}
-\exportsortexpansion{ecircumflextilde} {}
-\exportsortexpansion{ecircumflexhook} {}
-\exportsortexpansion{Ocircumflexgrave} {}
-\exportsortexpansion{Ocircumflexacute} {}
-\exportsortexpansion{Ocircumflextilde} {}
-\exportsortexpansion{Ocircumflexhook} {}
-\exportsortexpansion{ocircumflexgrave} {}
-\exportsortexpansion{ocircumflexacute} {}
-\exportsortexpansion{ocircumflextilde} {}
-\exportsortexpansion{ocircumflexhook} {}
-
-\exportsortexpansion{Abrevegrave} {}
-\exportsortexpansion{Abreveacute} {}
-\exportsortexpansion{Abrevetilde} {}
-\exportsortexpansion{Abrevehook} {}
-\exportsortexpansion{abrevegrave} {}
-\exportsortexpansion{abreveacute} {}
-\exportsortexpansion{abrevetilde} {}
-\exportsortexpansion{abrevehook} {}
-
-\exportsortexpansion{Adotbelow} {}
-\exportsortexpansion{adotbelow} {}
-\exportsortexpansion{Edotbelow} {}
-\exportsortexpansion{edotbelow} {}
-\exportsortexpansion{Idotbelow} {}
-\exportsortexpansion{idotbelow} {}
-\exportsortexpansion{Odotbelow} {}
-\exportsortexpansion{odotbelow} {}
-\exportsortexpansion{Udotbelow} {}
-\exportsortexpansion{udotbelow} {}
-\exportsortexpansion{Ydotbelow} {}
-\exportsortexpansion{ydotbelow} {}
-\exportsortexpansion{Ohorndotbelow} {}
-\exportsortexpansion{ohorndotbelow} {}
-\exportsortexpansion{Uhorndotbelow} {}
-\exportsortexpansion{uhorndotbelow} {}
-
-\exportsortexpansion{Acircumflexdotbelow} {}
-\exportsortexpansion{acircumflexdotbelow} {}
-\exportsortexpansion{Ecircumflexdotbelow} {}
-\exportsortexpansion{ecircumflexdotbelow} {}
-\exportsortexpansion{Ocircumflexdotbelow} {}
-\exportsortexpansion{ocircumflexdotbelow} {}
-\exportsortexpansion{Abrevedotbelow} {}
-\exportsortexpansion{abrevedotbelow} {}
-
-\exportsortexpansion{Ohorn} {}
-\exportsortexpansion{Ohorngrave} {}
-\exportsortexpansion{Ohornacute} {}
-\exportsortexpansion{Ohorntilde} {}
-\exportsortexpansion{Ohornhook } {}
-\exportsortexpansion{ohorn} {}
-\exportsortexpansion{ohorngrave} {}
-\exportsortexpansion{ohornacute} {}
-\exportsortexpansion{ohorntilde} {}
-\exportsortexpansion{ohornhook } {}
-\exportsortexpansion{Uhorn} {}
-\exportsortexpansion{Uhorngrave} {}
-\exportsortexpansion{Uhornacute} {}
-\exportsortexpansion{Uhorntilde} {}
-\exportsortexpansion{Uhornhook } {}
-\exportsortexpansion{uhorn} {}
-\exportsortexpansion{uhorngrave} {}
-\exportsortexpansion{uhornacute} {}
-\exportsortexpansion{uhorntilde} {}
-\exportsortexpansion{uhornhook} {}
-
-\exportsortexpansion{eszett} {ssharp}
-\exportsortexpansion{Eszett} {Ssharp}
-
-\exportsortexpansion{lslash} {lstroke}
-\exportsortexpansion{Lslash} {Lstroke}
-\exportsortexpansion{dslash} {dstroke}
-\exportsortexpansion{Dslash} {Dstroke}
-\exportsortexpansion{oslash} {ostroke}
-\exportsortexpansion{Oslash} {Ostroke}
-
-\exportsortexpansion{dcroat} {dstroke}
-\exportsortexpansion{Dcroat} {Dstroke}
-
-% more
-
-\exportsortshortcut{\^ A} {\Acircumflex} \exportsortshortcut{\^ a} {\acircumflex}
-\exportsortshortcut{\^ C} {\Ccircumflex} \exportsortshortcut{\^ c} {\ccircumflex}
-\exportsortshortcut{\^ E} {\Ecircumflex} \exportsortshortcut{\^ e} {\ecircumflex}
-\exportsortshortcut{\^ G} {\Gcircumflex} \exportsortshortcut{\^ g} {\gcircumflex}
-\exportsortshortcut{\^ H} {\Hcircumflex} \exportsortshortcut{\^ h} {\hcircumflex}
-\exportsortshortcut{\^ I} {\Icircumflex} \exportsortshortcut{\^ i} {\icircumflex} \exportsortshortcut{\^\i} {\icircumflex}
-\exportsortshortcut{\^ J} {\Jcircumflex} \exportsortshortcut{\^ j} {\jcircumflex} \exportsortshortcut{\^\j} {\jcircumflex}
-\exportsortshortcut{\^ O} {\Ocircumflex} \exportsortshortcut{\^ o} {\ocircumflex}
-\exportsortshortcut{\^ S} {\Scircumflex} \exportsortshortcut{\^ s} {\scircumflex}
-\exportsortshortcut{\^ U} {\Ucircumflex} \exportsortshortcut{\^ u} {\ucircumflex}
-\exportsortshortcut{\^ W} {\Wcircumflex} \exportsortshortcut{\^ w} {\wcircumflex}
-\exportsortshortcut{\^ Y} {\Ycircumflex} \exportsortshortcut{\^ y} {\ycircumflex}
-
-\exportsortshortcut{\` A} {\Agrave} \exportsortshortcut{\` a} {\agrave}
-\exportsortshortcut{\` E} {\Egrave} \exportsortshortcut{\` e} {\egrave}
-\exportsortshortcut{\` I} {\Igrave} \exportsortshortcut{\` i} {\igrave} \exportsortshortcut{\`\i} {\igrave}
-\exportsortshortcut{\` O} {\Ograve} \exportsortshortcut{\` o} {\ograve}
-\exportsortshortcut{\` U} {\Ugrave} \exportsortshortcut{\` u} {\ugrave}
-\exportsortshortcut{\` Y} {\Ygrave} \exportsortshortcut{\` y} {\ygrave}
-
-\exportsortshortcut{\~ A} {\Atilde} \exportsortshortcut{\~ a} {\atilde}
-\exportsortshortcut{\~ I} {\Itilde} \exportsortshortcut{\~ i} {\itilde} \exportsortshortcut{\~\i} {\itilde}
-\exportsortshortcut{\~ O} {\Otilde} \exportsortshortcut{\~ o} {\otilde}
-\exportsortshortcut{\~ U} {\Utilde} \exportsortshortcut{\~ u} {\utilde}
-
-\exportsortshortcut{\" A} {\Adiaeresis} \exportsortshortcut{\" a} {\adiaeresis}
-\exportsortshortcut{\" E} {\Ediaeresis} \exportsortshortcut{\" e} {\ediaeresis}
-\exportsortshortcut{\" I} {\Idiaeresis} \exportsortshortcut{\" i} {\idiaeresis} \exportsortshortcut{\"\i} {\idiaeresis}
-\exportsortshortcut{\" O} {\Odiaeresis} \exportsortshortcut{\" o} {\odiaeresis}
-\exportsortshortcut{\" U} {\Udiaeresis} \exportsortshortcut{\" u} {\udiaeresis}
-\exportsortshortcut{\" Y} {\Ydiaeresis} \exportsortshortcut{\" y} {\ydiaeresis}
-
-\exportsortshortcut{\' A} {\Aacute} \exportsortshortcut{\' a} {\aacute}
-\exportsortshortcut{\' C} {\Cacute} \exportsortshortcut{\' c} {\cacute}
-\exportsortshortcut{\' E} {\Eacute} \exportsortshortcut{\' e} {\eacute}
-\exportsortshortcut{\' I} {\Iacute} \exportsortshortcut{\' i} {\iacute} \exportsortshortcut{\'\i} {\iacute}
-\exportsortshortcut{\' L} {\Lacute} \exportsortshortcut{\' l} {\lacute}
-\exportsortshortcut{\' N} {\Nacute} \exportsortshortcut{\' n} {\nacute}
-\exportsortshortcut{\' O} {\Oacute} \exportsortshortcut{\' o} {\oacute}
-\exportsortshortcut{\' R} {\Racute} \exportsortshortcut{\' r} {\racute}
-\exportsortshortcut{\' S} {\Sacute} \exportsortshortcut{\' s} {\sacute}
-\exportsortshortcut{\' U} {\Uacute} \exportsortshortcut{\' u} {\uacute}
-\exportsortshortcut{\' Y} {\Yacute} \exportsortshortcut{\' y} {\yacute}
-\exportsortshortcut{\' Z} {\Zacute} \exportsortshortcut{\' z} {\zacute}
-
-\exportsortshortcut{\. C} {\Cdotaccent} \exportsortshortcut{\. c} {\cdotaccent}
-\exportsortshortcut{\. E} {\Edotaccent} \exportsortshortcut{\. e} {\edotaccent}
-\exportsortshortcut{\. G} {\Gdotaccent} \exportsortshortcut{\. g} {\gdotaccent}
-\exportsortshortcut{\. I} {\Idotaccent} \exportsortshortcut{\. i} {\idotaccent} \exportsortshortcut{\.\i} {\idotaccent}
-\exportsortshortcut{\. Z} {\Zdotaccent} \exportsortshortcut{\. z} {\zdotaccent}
-
-\exportsortshortcut{\= A} {\Amacron} \exportsortshortcut{\= a} {\amacron}
-\exportsortshortcut{\= E} {\Emacron} \exportsortshortcut{\= e} {\emacron}
-\exportsortshortcut{\= I} {\Imacron} \exportsortshortcut{\= i} {\imacron} \exportsortshortcut{\=\i} {\imacron}
-\exportsortshortcut{\= O} {\Omacron} \exportsortshortcut{\= o} {\omacron}
-\exportsortshortcut{\= U} {\Umacron} \exportsortshortcut{\= u} {\umacron}
-
-\exportsortshortcut{\c C} {\Ccedilla} \exportsortshortcut{\c c} {\ccedilla}
-\exportsortshortcut{\c K} {\Kcedilla} \exportsortshortcut{\c k} {\kcedilla}
-\exportsortshortcut{\c L} {\Lcedilla} \exportsortshortcut{\c l} {\lcedilla}
-\exportsortshortcut{\c N} {\Ncedilla} \exportsortshortcut{\c n} {\ncedilla}
-\exportsortshortcut{\c R} {\Rcedilla} \exportsortshortcut{\c r} {\rcedilla}
-\exportsortshortcut{\c S} {\Scedilla} \exportsortshortcut{\c s} {\scedilla}
-\exportsortshortcut{\c T} {\Tcedilla} \exportsortshortcut{\c t} {\tcedilla}
-
-\exportsortshortcut{\H O} {\Ohungarumlaut} \exportsortshortcut{\H o} {\ohungarumlaut}
-\exportsortshortcut{\H u} {\uhungarumlaut} \exportsortshortcut{\H U} {\Uhungarumlaut}
-
-\exportsortshortcut{\k A} {\Aogonek} \exportsortshortcut{\k a} {\aogonek}
-\exportsortshortcut{\k E} {\Eogonek} \exportsortshortcut{\k e} {\eogonek}
-\exportsortshortcut{\k I} {\Iogonek} \exportsortshortcut{\k i} {\iogonek}
-\exportsortshortcut{\k U} {\Uogonek} \exportsortshortcut{\k u} {\uogonek}
-
-\exportsortshortcut{\r A} {\Aring} \exportsortshortcut{\r a} {\aring}
-\exportsortshortcut{\r U} {\Uring} \exportsortshortcut{\r u} {\uring}
-
-\exportsortshortcut{\u A} {\Abreve} \exportsortshortcut{\u a} {\abreve}
-\exportsortshortcut{\u E} {\Ebreve} \exportsortshortcut{\u e} {\ebreve}
-\exportsortshortcut{\u G} {\Gbreve} \exportsortshortcut{\u g} {\gbreve}
-\exportsortshortcut{\u I} {\Ibreve} \exportsortshortcut{\u i} {\ibreve} \exportsortshortcut{\u\i} {\ibreve}
-\exportsortshortcut{\u O} {\Obreve} \exportsortshortcut{\u o} {\obreve}
-\exportsortshortcut{\u U} {\Ubreve} \exportsortshortcut{\u u} {\ubreve}
-
-\exportsortshortcut{\v C} {\Ccaron} \exportsortshortcut{\v c} {\ccaron}
-\exportsortshortcut{\v D} {\Dcaron} \exportsortshortcut{\v d} {\dcaron}
-\exportsortshortcut{\v E} {\Ecaron} \exportsortshortcut{\v e} {\ecaron}
-\exportsortshortcut{\v L} {\Lcaron} \exportsortshortcut{\v l} {\lcaron}
-\exportsortshortcut{\v N} {\Ncaron} \exportsortshortcut{\v n} {\ncaron}
-\exportsortshortcut{\v R} {\Rcaron} \exportsortshortcut{\v r} {\rcaron}
-\exportsortshortcut{\v S} {\Scaron} \exportsortshortcut{\v s} {\scaron}
-\exportsortshortcut{\v T} {\Tcaron} \exportsortshortcut{\v t} {\tcaron}
-\exportsortshortcut{\v Z} {\Zcaron} \exportsortshortcut{\v z} {\zcaron}
+\loadmarkfile{sort-def}
\endinput
diff --git a/Master/texmf-dist/tex/context/base/sort-ini.lua b/Master/texmf-dist/tex/context/base/sort-ini.lua
new file mode 100644
index 00000000000..e14c927d7b2
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/sort-ini.lua
@@ -0,0 +1,181 @@
+-- filename : sort-ini.lua
+-- comment : companion to sort-ini.tex
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+-- todo:
+--
+-- out of range
+-- uppercase
+-- texutil compatible
+-- always expand to utf
+
+if not versions then versions = { } end versions['sort-ini'] = 1.001
+
+sorters = { }
+sorters.comparers = { }
+sorters.splitters = { }
+sorters.entries = { }
+sorters.mappings = { }
+sorters.replacements = { }
+sorters.language = 'en'
+
+function sorters.comparers.basic(a,b,i) -- [2] has entry, key, cmp
+ local sort_a, sort_b = a[2][i][3], b[2][i][3]
+ if #sort_a > #sort_b then
+ if #sort_b == 0 then
+ return 1
+ else
+ for i=1,#sort_b do
+ local ai, bi = sort_a[i], sort_b[i]
+ if ai > bi then
+ return 1
+ elseif ai < bi then
+ return -1
+ end
+ end
+ return 1
+ end
+ elseif #sort_a < #sort_b then
+ if #sort_a == 0 then
+ return -1
+ else
+ for i=1,#sort_a do
+ local ai, bi = sort_a[i], sort_b[i]
+ if ai > bi then
+ return 1
+ elseif ai < bi then
+ return -1
+ end
+ end
+ return -1
+ end
+ elseif #sort_a == 0 then
+ return 0
+ else
+ for i=1,#sort_a do
+ local ai, bi = sort_a[i], sort_b[i]
+ if ai > bi then
+ return 1
+ elseif ai < bi then
+ return -1
+ end
+ end
+ sort_a, sort_b = a[2][i][2], b[2][i][2]
+ if sort_a == "" then sort_a = a[2][i][1] end
+ if sort_b == "" then sort_b = b[2][i][1] end
+ if sort_a < sort_b then
+ return -1
+ elseif sort_a > sort_b then
+ return 1
+ else
+ return 0
+ end
+ end
+end
+
+function sorters.prepare(data,split,n)
+ local strip = sorters.strip
+ for k,v in ipairs(data) do
+ for i=1,n do
+ local vv = v[2][i]
+ if vv then
+ if vv[2] then
+ if vv[2] ~= "" then
+ vv[3] = split(strip(vv[2]))
+ else
+ vv[3] = split(strip(vv[1]))
+ end
+ else
+ vv[2] = { }
+ vv[3] = split(strip(vv[1]))
+ end
+ else
+ v[2][i] = { {}, {}, {} }
+ end
+ end
+ end
+end
+
+function sorters.strip(str) -- todo: only letters and such utf.gsub("([^%w%d])","")
+ str = str:gsub("\\%S*","")
+ str = str:gsub("[%s%[%](){}%$\"\']*","")
+ str = str:gsub("(%d+)",function(s) return (" "):rep(10-#s) .. s end) -- sort numbers properly
+ return str
+end
+
+sorters.defaultlanguage = 'en'
+
+function sorters.splitters.utf(str)
+ local r = sorters.replacements[sorters.language] or sorters.replacements[sorters.defaultlanguage] or { }
+ local m = sorters.mappings [sorters.language] or sorters.mappings [sorters.defaultlanguage] or { }
+ local u = characters.uncompose
+ local b = utf.byte
+ local t = { }
+ for _,v in pairs(r) do
+ str = str:gsub(v[1],v[2])
+ end
+ for c in string.utfcharacters(str) do
+ if m[c] then
+ t[#t+1] = m[c]
+ elseif #c == 1 then
+ t[#t+1] = b(c)
+ else
+ for cc in string.characters(u(c)) do
+ t[#t+1] = m[cc] or b(cc)
+ end
+ end
+ end
+ return t
+end
+
+function sorters.sort(data,cmp)
+ table.sort(data,function(a,b) return cmp(a,b) == -1 end)
+end
+
+function sorters.cleanup(data)
+ for k,v in ipairs(data) do
+ for kk,vv in ipairs(v[2]) do
+ if vv and #vv[1] == 0 then
+ v[1][kk] = nil
+ else
+ vv[3] = nil
+ end
+ end
+ for kk,vv in pairs(v) do
+ if vv == "" then
+ v[kk] = nil
+ end
+ end
+ end
+end
+
+function sorters.unique(data)
+ local prev, last = nil, 0
+ for _,v in ipairs(data) do
+ if not prev or not table.are_equal(prev,v,2,3) then -- check range
+ last = last + 1
+ data[last] = v
+ prev = v
+ end
+ end
+ for i=last+1,#data do
+ data[i] = nil
+ end
+end
+
+function sorters.process(kind,data)
+ if data.entries then
+ if not data.sorted then
+ sorters.language = data.language or sorters.language
+ sorters[kind].prepare(data.entries)
+ sorters[kind].sort(data.entries)
+ sorters[kind].unique(data.entries)
+ data.sorted = true
+ end
+ return sorters[kind].flush(sorters[kind].finalize(data.entries),data.class,data.flush)
+ else
+ return { }
+ end
+end
diff --git a/Master/texmf-dist/tex/context/base/sort-ini.mkii b/Master/texmf-dist/tex/context/base/sort-ini.mkii
new file mode 100644
index 00000000000..0f049994637
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/sort-ini.mkii
@@ -0,0 +1,149 @@
+%D \module
+%D [ file=sort-ini,
+%D version=2005.08.08,
+%D title=\CONTEXT\ Sort Macros,
+%D subtitle=Initialization,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+% todo: autokeyexpansion => igv utf: \setupregister[index][keyexpansion=yes]
+
+%D This module replaces existing sort key handling and is meant to be
+%D used with the new texutil functionality. This module defines a few
+%D auxiliary macros.
+
+\ifx\exportsortaction\undefined \else \endinput \fi
+
+%D The sorting method is largely bases on the one used in the old version
+%D of texutil but i've changed the interface a bit. It all boils down to
+%D a bunch of substitutions. The reimplementation makes it easier to extend
+%D the rules. Currently we have multipass substitution and onepass sorting,
+%D but we may change this some day. Since there is a plugin mechanism, using
+%D an external sorter is also possible.
+
+% test file:
+%
+% \mainlanguage[sl] \readfile{sort-ini}{}{}
+%
+% \starttext
+% test \index {aa1} test \index {ab1} test \index {aa2}
+% test \index {ab2} test \index {aa10} test \index {aa8}
+% test \index {aa9} test \index {aa11} test \index {aa10}
+% test \index {cccc} test \index {\ccaron ccc} test \index {\cacute ccc}
+% test \index {caaa} test \index {\ccaron aaa} test \index {\cacute aaa}
+% \placeindex
+% \stoptext
+
+% definitions:
+%
+% \exportsortshortcut{\\\'\\i}{iacute}
+% \exportsortshortcut{\\\'i} {iacute}
+% \exportsortshortcut{\\\"e} {ediaeresis}
+% \exportsortshortcut{\\\'o} {oacute}
+%
+% \exportsortexpansion{aeligature}{ae}
+% \exportsortexpansion{ijligature}{y}
+% \exportsortexpansion{oacute} {oz}
+% \exportsortexpansion{eacute} {ezzz} % or e3
+% \exportsortexpansion{egrave} {ezz} % or e2
+% \exportsortexpansion{ediaeresis}{ez} % or e1
+% \exportsortexpansion{adiaeresis}{az}
+% \exportsortreduction{ch} {c}
+% \exportsortreduction{ij} {y}
+%
+% \exportsortexpansion{ccaron} {cz}
+% \exportsortexpansion{cacute} {czz}
+% \exportsortexpansion{dstroke} {dz}
+% \exportsortexpansion{scaron} {sz}
+% \exportsortexpansion{zcaron} {zz}
+%
+% \exportsortreduction{ch}{c}
+% \exportsortreduction{ij}{y}
+%
+% \exportsortexpansion {ccaron} {c+1}
+% \exportsortdivision {c+1} {ccaron}
+% ==
+% \exportsortrule {ccaron} {c+1}
+
+\unprotect
+
+\let\currentexportclass\empty
+
+\def\exportsortaction#1#2#3%
+ {\defconvertedargument\asciia{#2}%
+ \defconvertedargument\asciib{#3}%
+ \immediatewriteutility{x #1 {\currentexportclass} {\asciia} {\asciib}}}
+
+\def\exportsortshortcut {\exportsortaction s}
+\def\exportsortexpansion{\exportsortaction e}
+\def\exportsortreduction{\exportsortaction r}
+\def\exportsortdivision {\exportsortaction d}
+
+\def\exportsortrule#1#2%
+ {\exportsortexpansion{#1}{#2}%
+ \exportsortdivision {#2}{#1}}
+
+\def\exportutfsortexpansion#1#2#3%
+ {\bgroup
+ \edef\utfsorta{\string\unknownchar}%
+ \dostepwiserecurse{#2}{#3}\plusone
+ {\edef\utfsortb{\@EA\string\csname\doutfunihash{#1}{\recurselevel}\endcsname}%
+ \ifx\utfsortb\utfsorta \else
+ \edef\utfsortc{\numbertoutf{\numexpr#1*256+\recurselevel\relax}}%
+ \expanded{\exportsortshortcut{\utfsortc}{\utfsortb\space}}% space is really needed
+ \fi}%
+ \egroup}
+
+\def\savesortdefinitions
+ {\bgroup
+ \doifelse \currentregime {utf}
+ {\exportutfsortexpansion{0}{128}{255}%
+ \exportutfsortexpansion{1}{0}{255}}
+ {\def\defineactivecharacter##1 ##2% mkii code !
+ {\expanded{\exportsortshortcut{\rawcharacter{##1}}}{##2}}%
+ \doifelsenothing\currentregime
+ {\doifnot\characterencoding\nocharacterencoding % to be sure, autoregime
+ {\dowalkregime\characterencoding}}%
+ {\dowalkregime\characterencoding}}%
+ \egroup
+ \startnointerference
+% \startreadingfile
+\setcatcodetable\ctxcatcodes
+ \readsysfile{\f!sortprefix def}\donothing\donothing % default
+% \stopreadingfile
+ \stopnointerference
+ \global\let\savesortdefinitions\relax}
+
+\def\savesortlanguage#1% language specifics
+ {\doifsomething{#1}
+ {\doifundefined{\f!sortprefix::#1}%
+ {\startnointerference
+ \global\letvalue{\f!sortprefix::#1}\empty
+ \def\currentexportclass{#1}%
+ \enablemode[sortorder-#1]%
+% \startreadingfile
+\setcatcodetable\ctxcatcodes
+ \readsysfile{\f!sortprefix lan}\donothing\donothing
+% \stopreadingfile
+ \stopnointerference}}}
+
+\prependtoks
+ \savesortdefinitions
+\to \everysavesortkeys
+
+% \defineregister[one]
+% \defineregister[two] \setupregister[two][language=cz]
+%
+% \starttext
+% test \one{one} test \one{two} test \one {\aacute} test \one{alpha} test \one{chow}
+% test \two{one} test \two{two} test \two {\aacute} test \two{alpha} test \two{chow}
+% \blank[3*big] \placeregister[one]
+% \blank[3*big] \placeregister[two]
+% \stoptext
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/sort-ini.mkiv b/Master/texmf-dist/tex/context/base/sort-ini.mkiv
new file mode 100644
index 00000000000..9c87edb11ef
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/sort-ini.mkiv
@@ -0,0 +1,21 @@
+%D \module
+%D [ file=sort-ini,
+%D version=2005.08.08,
+%D title=\CONTEXT\ Sort Macros,
+%D subtitle=Initialization,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\registerctxluafile{sort-ini}{1.001}
+
+\let\savesortlanguage\gobbleoneargument
+
+\readfile{sort-def.tex}{}{} % runtime loaded in mkii
+\readfile{sort-lan.tex}{}{} % runtime loaded in mkii
+
+\endinput
diff --git a/Master/texmf-dist/tex/context/base/sort-ini.tex b/Master/texmf-dist/tex/context/base/sort-ini.tex
index c3cbb319cc0..2baa609fb15 100644
--- a/Master/texmf-dist/tex/context/base/sort-ini.tex
+++ b/Master/texmf-dist/tex/context/base/sort-ini.tex
@@ -11,141 +11,22 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-% dodo: autokeyexpansion => igv utf: \setupregister[index][keyexpansion=yes]
-
%D This module replaces existing sort key handling and is meant to be
%D used with the new texutil functionality. This module defines a few
%D auxiliary macros.
-\ifx\exportsortaction\undefined \else \endinput \fi
-
\writestatus{loading}{Context Sorting Macros (ini)}
-%D The sorting method is largely bases on the one used in the old version
-%D of texutil but i've changed the interface a bit. It all boils down to
-%D a bunch of substitutions. The reimplementation makes it easier to extend
-%D the rules. Currently we have multipass substitution and onepass sorting,
-%D but we may change this some day. Since there is a plugin mechanism, using
-%D an external sorter is also possible.
-
-% test file:
-%
-% \mainlanguage[sl] \readfile{sort-ini}{}{}
-%
-% \starttext
-% test \index {aa1} test \index {ab1} test \index {aa2}
-% test \index {ab2} test \index {aa10} test \index {aa8}
-% test \index {aa9} test \index {aa11} test \index {aa10}
-% test \index {cccc} test \index {\ccaron ccc} test \index {\cacute ccc}
-% test \index {caaa} test \index {\ccaron aaa} test \index {\cacute aaa}
-% \placeindex
-% \stoptext
-
-% definitions:
-%
-% \exportsortshortcut{\\\'\\i}{iacute}
-% \exportsortshortcut{\\\'i} {iacute}
-% \exportsortshortcut{\\\"e} {ediaeresis}
-% \exportsortshortcut{\\\'o} {oacute}
-%
-% \exportsortexpansion{aeligature}{ae}
-% \exportsortexpansion{ijligature}{y}
-% \exportsortexpansion{oacute} {oz}
-% \exportsortexpansion{eacute} {ezzz} % or e3
-% \exportsortexpansion{egrave} {ezz} % or e2
-% \exportsortexpansion{ediaeresis}{ez} % or e1
-% \exportsortexpansion{adiaeresis}{az}
-% \exportsortreduction{ch} {c}
-% \exportsortreduction{ij} {y}
-%
-% \exportsortexpansion{ccaron} {cz}
-% \exportsortexpansion{cacute} {czz}
-% \exportsortexpansion{dstroke} {dz}
-% \exportsortexpansion{scaron} {sz}
-% \exportsortexpansion{zcaron} {zz}
-%
-% \exportsortreduction{ch}{c}
-% \exportsortreduction{ij}{y}
-%
-% \exportsortexpansion {ccaron} {c+1}
-% \exportsortdivision {c+1} {ccaron}
-% ==
-% \exportsortrule {ccaron} {c+1}
-
-\unprotect
-
\newevery \everysavesortkeys \relax
-\let\currentexportclass\empty
-
-\def\exportsortaction#1#2#3%
- {\convertargument#2\to\asciia
- \convertargument#3\to\asciib
- \immediatewriteutility{x #1 {\currentexportclass} {\asciia} {\asciib}}}
-
-\def\exportsortshortcut {\exportsortaction s}
-\def\exportsortexpansion{\exportsortaction e}
-\def\exportsortreduction{\exportsortaction r}
-\def\exportsortdivision {\exportsortaction d}
-
-\def\exportsortrule#1#2%
- {\exportsortexpansion{#1}{#2}%
- \exportsortdivision {#2}{#1}}
-
-\def\exportutfsortexpansion#1#2#3%
- {\bgroup
- \edef\utfsorta{\string\unknownchar}%
- \dostepwiserecurse{#2}{#3}\plusone
- {\edef\utfsortb{\@EA\string\csname\doutfunihash{#1}{\recurselevel}\endcsname}%
- \ifx\utfsortb\utfsorta \else
- \edef\utfsortc{\numbertoutf{\numexpr#1*256+\recurselevel\relax}}%
- \expanded{\exportsortshortcut{\utfsortc}{\utfsortb\space}}% space is really needed
- \fi}%
- \egroup}
-
-\def\savesortdefinitions
- {\bgroup
- \doifelse \currentregime {utf}
- {\exportutfsortexpansion{0}{128}{255}%
- \exportutfsortexpansion{1}{0}{255}}
- {\def\defineactivecharacter##1 ##2% mkii code !
- {\expanded{\exportsortshortcut{\rawcharacter{##1}}}{##2}}%
- \doifelsenothing\currentregime
- {\doifnot\characterencoding\nocharacterencoding % to be sure, autoregime
- {\dowalkregime\characterencoding}}%
- {\dowalkregime\characterencoding}}%
- \egroup
- \readsysfile{\f!sortprefix def}\donothing\donothing % default
- \global\let\savesortdefinitions\relax}
-
-\def\savesortlanguage#1% language specifics
- {\doifsomething{#1}
- {\doifundefined{\f!sortprefix::#1}%
- {\bgroup
- \global\letvalue{\f!sortprefix::#1}\empty
- \def\currentexportclass{#1}%
- \enablemode[sortorder-#1]%
- \readsysfile{\f!sortprefix lan}\donothing\donothing
- \egroup}}}
-
-\prependtoks
- \savesortdefinitions
-\to \everysavesortkeys
-
\def\savesortkeys
- {\the\everysavesortkeys
- \global\everysavesortkeys\emptytoks}
+ {\ifproductionrun
+ \the\everysavesortkeys
+ \global\everysavesortkeys\emptytoks
+ \fi}
-% \defineregister[one]
-% \defineregister[two] \setupregister[two][language=cz]
-%
-% \starttext
-% test \one{one} test \one{two} test \one {\aacute} test \one{alpha} test \one{chow}
-% test \two{one} test \two{two} test \two {\aacute} test \two{alpha} test \two{chow}
-% \blank[3*big] \placeregister[one]
-% \blank[3*big] \placeregister[two]
-% \stoptext
+\appendtoks \savesortkeys \to \everyshipout
-\prependtoks \savesortkeys \to \everystarttext
+\loadmarkfile{sort-ini}
-\protect \endinput
+\endinput
diff --git a/Master/texmf-dist/tex/context/base/sort-lan.lua b/Master/texmf-dist/tex/context/base/sort-lan.lua
new file mode 100644
index 00000000000..dd3a2353f57
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/sort-lan.lua
@@ -0,0 +1,287 @@
+-- filename : sort-lan.lua
+-- comment : companion to sort-lan.tex
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+if not versions then versions = { } end versions['sort-lan'] = 1.001
+
+-- this is a rather preliminary and incomplete file
+-- maybe we should load this kind of stuff runtime
+
+-- english
+
+do
+ -- The next one can be more efficient when not indexed this way, but
+ -- other languages are sparse so for the moment we keep this one.
+
+ sorters.entries['en'] = {
+ [ 1] = "a", [ 3] = "b", [ 5] = "c", [ 7] = "d", [ 9] = "e",
+ [11] = "f", [13] = "g", [15] = "h", [17] = "i", [19] = "j",
+ [21] = "k", [23] = "l", [25] = "m", [27] = "n", [29] = "o",
+ [31] = "p", [33] = "q", [35] = "r", [37] = "s", [39] = "t",
+ [41] = "u", [43] = "v", [45] = "w", [47] = "x", [49] = "y",
+ [51] = "z",
+ [ 2] = 1, [ 4] = 3, [ 6] = 5, [ 8] = 7, [10] = 9,
+ [12] = 11, [14] = 13, [16] = 15, [18] = 17, [20] = 19,
+ [22] = 21, [24] = 23, [26] = 25, [28] = 27, [30] = 29,
+ [32] = 31, [34] = 33, [36] = 35, [38] = 37, [40] = 39,
+ [42] = 41, [44] = 43, [46] = 45, [48] = 47, [50] = 49,
+ [52] = 51,
+ }
+ sorters.mappings['en'] = {
+ ["a"] = 1, ["b"] = 3, ["c"] = 5, ["d"] = 7, ["e"] = 9,
+ ["f"] = 11, ["g"] = 13, ["h"] = 15, ["i"] = 17, ["j"] = 19,
+ ["k"] = 21, ["l"] = 23, ["m"] = 25, ["n"] = 27, ["o"] = 29,
+ ["p"] = 31, ["q"] = 33, ["r"] = 35, ["s"] = 37, ["t"] = 39,
+ ["u"] = 41, ["v"] = 43, ["w"] = 45, ["x"] = 47, ["y"] = 49,
+ ["z"] = 51,
+ ["A"] = 2, ["B"] = 4, ["C"] = 6, ["D"] = 8, ["E"] = 10,
+ ["F"] = 12, ["G"] = 14, ["H"] = 16, ["I"] = 18, ["J"] = 20,
+ ["K"] = 22, ["L"] = 24, ["M"] = 26, ["N"] = 28, ["O"] = 30,
+ ["P"] = 32, ["Q"] = 34, ["R"] = 36, ["S"] = 38, ["T"] = 40,
+ ["U"] = 42, ["V"] = 44, ["W"] = 46, ["X"] = 48, ["Y"] = 50,
+ ["Z"] = 52,
+ }
+end
+
+-- dutch
+
+do
+ sorters.replacements['nl'] = { { "ij", 'y' }, { "IJ", 'Y' } }
+ sorters.entries ['nl'] = sorters.entries ['en']
+ sorters.mappings ['nl'] = sorters.mappings['en']
+end
+
+-- czech
+
+do
+
+ local uc = unicode.utf8.char
+ local ub = unicode.utf8.byte
+
+ sorters.replacements['cz'] = {
+ [1] = { "ch", uc(0xFF01) }
+ }
+
+ sorters.entries['cz'] = {
+ [ 1] = "a",
+ [ 2] = 1,
+ [ 3] = "b",
+ [ 4] = "c",
+ [ 5] = uc(0x010D), -- ccaron
+ [ 6] = "d",
+ [ 7] = uc(0x010F), -- dcaron
+ [ 8] = "e",
+ [ 9] = 8,
+ [10] = 8,
+ [11] = "f",
+ [12] = "g",
+ [13] = "h",
+ [14] = "ch",
+ [15] = "i",
+ [16] = 15,
+ [17] = "j",
+ [18] = "k",
+ [19] = "l",
+ [20] = "m",
+ [21] = "n",
+ [22] = uc(0x0147), -- ncaron
+ [23] = "o",
+ [24] = "p",
+ [25] = "q",
+ [26] = "r",
+ [27] = uc(0x0147), -- rcaron
+ [28] = "s",
+ [29] = uc(0x0161), -- scaron
+ [30] = "t",
+ [31] = uc(0x0165), -- tcaron
+ [32] = "u",
+ [33] = 32,
+ [34] = 32,
+ [35] = "v",
+ [36] = "w",
+ [37] = "x",
+ [38] = "y",
+ [49] = "z",
+ [40] = uc(0x017E), -- zcaron
+ }
+
+ sorters.mappings['cz'] = {
+ ['a'] = 1, -- a
+ [uc(0x00E1)] = 2, -- aacute
+ ['b'] = 3, -- b
+ ['c'] = 4, -- c
+ [uc(0x010D)] = 5, -- ccaron
+ ['d'] = 6, -- d
+ [uc(0x010F)] = 7, -- dcaron
+ ['e'] = 8, -- e
+ [uc(0x00E9)] = 9, -- eacute
+ [uc(0x011B)] = 10, -- ecaron
+ ['f'] = 11, -- f
+ ['g'] = 12, -- g
+ ['h'] = 13, -- h
+ [uc(0xFF01)] = 14, -- ch
+ ['i'] = 15, -- i
+ [uc(0x00ED)] = 16, -- iacute
+ ['j'] = 17, -- j
+ ['k'] = 18, -- k
+ ['l'] = 19, -- l
+ ['m'] = 20, -- m
+ ['n'] = 21, -- n
+ [uc(0x0147)] = 22, -- ncaron
+ ['o'] = 23, -- o
+ ['p'] = 24, -- p
+ ['q'] = 25, -- q
+ ['s'] = 26, -- r
+ [uc(0x0147)] = 27, -- rcaron
+ ['s'] = 28, -- s
+ [uc(0x0161)] = 29, -- scaron
+ ['t'] = 30, -- t
+ [uc(0x0165)] = 31, -- tcaron
+ ['u'] = 32, -- u
+ [uc(0x00FA)] = 33, -- uacute
+ [uc(0x01F6)] = 34, -- uring
+ ['v'] = 35, -- v
+ ['w'] = 36, -- w
+ ['x'] = 37, -- x
+ ['y'] = 38, -- y
+ ['z'] = 49, -- z
+ [uc(0x017E)] = 40, -- zcaron
+ }
+
+end
+
+-- The german vectors are provided by Wolfgang Schuster.
+
+-- DIN 5007-1
+
+do
+ sorters.entries ['DIN 5007-1'] = sorters.entries ['en']
+ sorters.mappings ['DIN 5007-1'] = sorters.mappings['en']
+end
+
+-- DIN 5007-2
+
+do
+ sorters.replacements['DIN 5007-2'] = {
+ { "ä", 'ae' },
+ { "ö", 'oe' },
+ { "ü", 'ue' },
+ { "Ä", 'Ae' },
+ { "Ö", 'Oe' },
+ { "Ü", 'Ue' }
+ }
+ sorters.entries ['DIN 5007-2'] = sorters.entries ['en']
+ sorters.mappings ['DIN 5007-2'] = sorters.mappings['en']
+end
+
+-- Duden
+
+do
+ sorters.replacements['Duden'] = { { "ß", 's' } }
+ sorters.entries ['Duden'] = sorters.entries ['en']
+ sorters.mappings ['Duden'] = sorters.mappings['en']
+end
+
+-- new german
+
+do
+ sorters.entries ['de'] = sorters.entries ['en']
+ sorters.mappings ['de'] = sorters.mappings['en']
+end
+
+-- old german
+
+do
+ sorters.entries ['deo'] = sorters.entries ['de']
+ sorters.mappings ['deo'] = sorters.mappings['de']
+end
+
+-- german - Germany
+
+do
+ sorters.entries ['de-DE'] = sorters.entries ['de']
+ sorters.mappings ['de-DE'] = sorters.mappings['de']
+end
+
+-- german - Swiss
+
+do
+ sorters.entries ['de-CH'] = sorters.entries ['de']
+ sorters.mappings ['de-CH'] = sorters.mappings['de']
+end
+
+-- german - Austria
+
+do
+ sorters.entries['de-AT'] = {
+ [ 1] = "a", [ 3] = 1, [ 5] = "b", [ 7] = "c", [ 9] = "d",
+ [11] = "e", [13] = "f", [15] = "g", [17] = "h", [19] = "i",
+ [21] = "j", [23] = "k", [25] = "l", [27] = "m", [29] = "n",
+ [31] = "o", [33] = 31, [35] = "p", [37] = "q", [39] = "r",
+ [41] = "s", [43] = "t", [45] = "u", [47] = 45, [49] = "v",
+ [51] = "w", [53] = "y", [55] = "y", [57] = "z",
+ [ 2] = 1, [ 4] = 3, [ 6] = 5, [ 8] = 7, [10] = 9,
+ [12] = 11, [14] = 13, [16] = 15, [18] = 17, [20] = 19,
+ [22] = 21, [24] = 23, [26] = 25, [28] = 27, [30] = 29,
+ [32] = 31, [34] = 33, [36] = 35, [38] = 37, [40] = 39,
+ [42] = 41, [44] = 43, [46] = 45, [48] = 47, [50] = 49,
+ [52] = 51, [54] = 53, [56] = 55, [58] = 57,
+ }
+ sorters.mappings['de-AT'] = {
+ ["a"] = 1, ["ä"] = 3, ["b"] = 5, ["c"] = 7, ["d"] = 9,
+ ["e"] = 11, ["f"] = 13, ["g"] = 15, ["h"] = 17, ["i"] = 19,
+ ["j"] = 21, ["k"] = 23, ["l"] = 25, ["m"] = 27, ["n"] = 29,
+ ["o"] = 31, ["ö"] = 33, ["p"] = 35, ["q"] = 37, ["r"] = 39,
+ ["s"] = 41, ["t"] = 43, ["u"] = 45, ["ü"] = 47, ["v"] = 49,
+ ["w"] = 51, ["x"] = 53, ["y"] = 55, ["z"] = 57,
+ ["A"] = 2, ["Ä"] = 4, ["B"] = 6, ["C"] = 8, ["D"] = 10,
+ ["E"] = 12, ["F"] = 14, ["G"] = 16, ["H"] = 18, ["I"] = 20,
+ ["J"] = 22, ["K"] = 24, ["L"] = 26, ["M"] = 28, ["N"] = 30,
+ ["O"] = 32, ["Ö"] = 34, ["P"] = 36, ["Q"] = 38, ["R"] = 40,
+ ["S"] = 42, ["T"] = 44, ["U"] = 46, ["Ü"] = 48, ["V"] = 50,
+ ["W"] = 52, ["X"] = 54, ["Y"] = 56, ["Z"] = 58,
+ }
+end
+
+
+--~ sorters.test = ''
+--~ sorters.test = 'nl'
+--~ sorters.test = 'cz'
+
+--~ if sorters.test == 'nl' then -- dutch test
+
+--~ data = {
+--~ { 'e', { {"ijsco",""} },2,"","","",""},
+--~ { 'e', { {"ysco" ,""} },2,"","","",""},
+--~ { 'e', { {"ijsco",""} },2,"","","",""},
+--~ { 'e', { {"hans" ,""}, {"aap" ,""} },2,"","","",""},
+--~ { 'e', { {"$a$" ,""} },2,"","","",""},
+--~ { 'e', { {"aap" ,""} },2,"","","",""},
+--~ { 'e', { {"hans" ,""}, {"aap" ,""} },6,"","","",""},
+--~ { 'e', { {"hans" ,""}, {"noot",""} },2,"","","",""},
+--~ { 'e', { {"hans" ,""}, {"mies",""} },2,"","","",""},
+--~ { 'e', { {"hans" ,""}, {"mies",""} },2,"","","",""},
+--~ { 'e', { {"hans" ,""}, {"mies",""}, [3] = {"oeps",""} },2,"","","",""},
+--~ { 'e', { {"hans" ,""}, {"mies",""}, [3] = {"oeps",""} },4,"","","",""},
+--~ }
+--~ sorters.index.process({ entries = data, language = 'nl'})
+
+--~ elseif sorters.test == 'cz' then -- czech test
+
+--~ data = {
+--~ { 'e', { {"blabla",""} },2,"","","",""},
+--~ { 'e', { {"czacza",""} },2,"","","",""},
+--~ { 'e', { {"albalb",""} },2,"","","",""},
+--~ { 'e', { {"azcazc",""} },2,"","","",""},
+--~ { 'e', { {"chacha",""} },2,"","","",""},
+--~ { 'e', { {"hazzah",""} },2,"","","",""},
+--~ { 'e', { {"iaccai",""} },2,"","","",""},
+--~ }
+--~ sorters.index.process({ entries = data, language = 'cz'})
+
+--~ end
+
+
+--~ print(table.serialize(sorters))
diff --git a/Master/texmf-dist/tex/context/base/sort-lan.mkii b/Master/texmf-dist/tex/context/base/sort-lan.mkii
new file mode 100644
index 00000000000..ad5232b02c8
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/sort-lan.mkii
@@ -0,0 +1,203 @@
+%D \module
+%D [ file=sort-lan,
+%D version=2005.08.08,
+%D title=\CONTEXT\ Sort Macros,
+%D subtitle=Language Definitions,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+% for testing:
+
+\startmode[sortorder-en]
+ \exportsortexpansion{aacute}{a+1}
+ \exportsortexpansion{Aacute}{A+2}
+ \exportsortexpansion{agrave}{a+1}
+ \exportsortexpansion{Agrave}{A+2}
+\stopmode
+
+%D This module replaces existing sort key handling and is meant to be
+%D used with the new texutil functionality. Here we define the language
+%D specific sort rules.
+
+% slovenian
+%
+% a-c, ccaron, cacute, d, dstroke, e-s, scaron, t-z, zcaron
+
+% \enableregime[utf]
+% \mainlanguage[sl]
+% \starttext
+% \ccaron\index{\ccaron\space 1}
+% \Ccaron\index{\Ccaron\space 1}
+% Ä\index{Ä 2}
+% Č\index{Č 2}
+% \v c\index{\v c 3}
+% \v C\index{\v C 3}
+% \placeindex
+% \stoptext
+
+% \startmode[sortorder-sl]
+% \exportsortexpansion {ccaron} {cz}
+% \exportsortexpansion {cacute} {czz}
+% \exportsortexpansion {dstroke} {dz}
+% \exportsortexpansion {scaron} {sz}
+% \exportsortexpansion {zacron} {zz}
+
+% \exportsortdivision {cz} {ccaron}
+% \exportsortdivision {czz} {cacute}
+% \exportsortdivision {dz} {dstroke}
+% \exportsortdivision {sz} {scaron}
+% \exportsortdivision {zz} {zacron}
+% \stopmode
+%
+% \startmode[sortorder-sl]
+% \exportsortexpansion {ccaron} {c+1}
+% \exportsortexpansion {cacute} {c+2}
+% \exportsortexpansion {dstroke} {d+1}
+% \exportsortexpansion {scaron} {s+1}
+% \exportsortexpansion {zacron} {z+1}
+%
+% \exportsortdivision {c+1} {ccaron}
+% \exportsortdivision {c+2} {cacute}
+% \exportsortdivision {d+1} {dstroke}
+% \exportsortdivision {s+1} {scaron}
+% \exportsortdivision {z+1} {zacron}
+% \stopmode
+
+\startmode[sortorder-sl]
+ \exportsortrule {ccaron} {c+1}
+ \exportsortrule {cacute} {c+2}
+ \exportsortrule {dstroke} {d+1}
+ \exportsortrule {scaron} {s+1}
+ \exportsortrule {zacron} {z+1}
+\stopmode
+
+% finnish
+%
+% a-u, v+w sorted together, x-z, aring, adiaeresis, odiaeresis
+
+\startmode[sortorder-fi]
+ \exportsortrule {v} {w}
+ \exportsortrule {aring} {z+1}
+ \exportsortrule {adiaeresis} {z+2}
+ \exportsortrule {odiaeresis} {z+3}
+\stopmode
+
+% swedish
+%
+% a-z, aring, adiaeresis, odiaeresis
+
+% \mainlanguage[sv]
+% \starttext
+% a\index{a}
+% a\index{a}
+% z\index{z}
+% z\index{z}
+% q\index{q}
+% q\index{q}
+% å\index{å}
+% å\index{å}
+% å\index{å}
+% ä\index{ä}
+% ä\index{ä}
+% ä\index{ä}
+% ä\index{ä}
+% ö\index{ö}
+% ö\index{ö}
+% \aring\index{\aring}
+% \adiaeresis\index{\adiaeresis}
+% \odiaeresis\index{\odiaeresis}
+% A\index{A}
+% Å\index{Å}
+% Ä\index{Ä}
+% Ö\index{Ö}
+% \Aring\index{\Aring}
+% \Adiaeresis\index{\Adiaeresis}
+% \Odiaeresis\index{\Odiaeresis}
+% \placeindex
+% \stoptext
+
+\startmode[sortorder-sv]
+ \exportsortrule {aring} {z+1}
+ \exportsortrule {adiaeresis} {z+2}
+ \exportsortrule {odiaeresis} {z+3}
+\stopmode
+
+% norwegian, danish
+%
+% a-z, aeligature, oslash, aring
+
+\startmode[sortorder-no,sortorder-da]
+ \exportsortrule {aeligature} {z+1}
+ \exportsortrule {oslash} {z+2}
+ \exportsortrule {aring} {z+3}
+\stopmode
+
+% islandic
+%
+% a, aacute, b, c, d, eth, e, eacute, f-i, iacute, j-o, oacute, p-u, uacute, v, w (?), x, y, yacute, z, aeligature, oslash, thorn
+
+% estonian
+%
+% a-s, scaron, z, zcaron, t-w, otilde, adiaeresis, odiaeresis, udiaeresis, x, y
+
+% czech
+%
+% a) make a single group for: "a", "á", "A", "Á"
+% b) make a different two groups for: "c", "C" and "c", "C"
+% c) sorting rule: "A" < "Á" < "a" < "á" < "C" < "c" < "C" < "c"
+% d) sorting rule: "h" < "ch" < "i" ("c" < "h")
+
+\gdef\czsortdivisionch{ch}
+\gdef\czsortdivisionCh{Ch}
+
+\startmode[sortorder-cz]
+ \exportsortexpansion {aacute} {a+1}
+ \exportsortexpansion {Aacute} {A+1}
+ \exportsortexpansion {ccaron} {c+1}
+ \exportsortexpansion {Ccaron} {C+1}
+ \exportsortdivision {c+1} {ccaron}
+ \exportsortexpansion {dcaron} {d+1}
+ \exportsortexpansion {Dcaron} {D+1}
+ \exportsortdivision {d+1} {dcaron}
+ \exportsortexpansion {eacute} {e+1}
+ \exportsortexpansion {Eacute} {E+1}
+ \exportsortexpansion {ecaron} {e+2}
+ \exportsortexpansion {Ecaron} {E+2}
+ \exportsortreduction {ch} {h+1}
+ \exportsortexpansion {ch} {h+1}
+ \exportsortreduction {Ch} {H+1}
+ \exportsortexpansion {Ch} {H+1}
+ \exportsortdivision {h+1} {czsortdivisionch}
+ \exportsortexpansion {iacute} {i+1}
+ \exportsortexpansion {Iacute} {I+1}
+ \exportsortexpansion {ncaron} {n+1}
+ \exportsortexpansion {Ncaron} {N+1}
+ \exportsortdivision {n+1} {ncaron}
+ \exportsortexpansion {oacute} {o+1}
+ \exportsortexpansion {Oacute} {O+1}
+ \exportsortexpansion {rcaron} {r+1}
+ \exportsortexpansion {Rcaron} {R+1}
+ \exportsortdivision {r+1} {rcaron}
+ \exportsortexpansion {scaron} {s+1}
+ \exportsortexpansion {Scaron} {S+1}
+ \exportsortdivision {s+1} {scaron}
+ \exportsortexpansion {tcaron} {t+1}
+ \exportsortexpansion {Tcaron} {T+1}
+ \exportsortdivision {t+1} {tcaron}
+ \exportsortexpansion {uacute} {u+1}
+ \exportsortexpansion {Uacute} {U+1}
+ \exportsortexpansion {uring} {u+2}
+ \exportsortexpansion {Uring} {U+2}
+ \exportsortexpansion {yacute} {y+1}
+ \exportsortexpansion {Yacute} {Y+1}
+ \exportsortexpansion {zcaron} {z+1}
+ \exportsortexpansion {Zcaron} {Z+1}
+ \exportsortdivision {z+1} {zcaron}
+\stopmode
+
+\endinput
diff --git a/Master/texmf-dist/tex/context/base/sort-lan.mkiv b/Master/texmf-dist/tex/context/base/sort-lan.mkiv
new file mode 100644
index 00000000000..918f7f9b75b
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/sort-lan.mkiv
@@ -0,0 +1,16 @@
+%D \module
+%D [ file=sort-lan,
+%D version=2005.08.08,
+%D title=\CONTEXT\ Sort Macros,
+%D subtitle=Language Definitions,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\registerctxluafile{sort-lan}{1.001}
+
+\endinput
diff --git a/Master/texmf-dist/tex/context/base/sort-lan.tex b/Master/texmf-dist/tex/context/base/sort-lan.tex
index ad5232b02c8..1eadae40715 100644
--- a/Master/texmf-dist/tex/context/base/sort-lan.tex
+++ b/Master/texmf-dist/tex/context/base/sort-lan.tex
@@ -11,193 +11,8 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-% for testing:
+\writestatus{loading}{Context Sorting Macros (languages)}
-\startmode[sortorder-en]
- \exportsortexpansion{aacute}{a+1}
- \exportsortexpansion{Aacute}{A+2}
- \exportsortexpansion{agrave}{a+1}
- \exportsortexpansion{Agrave}{A+2}
-\stopmode
-
-%D This module replaces existing sort key handling and is meant to be
-%D used with the new texutil functionality. Here we define the language
-%D specific sort rules.
-
-% slovenian
-%
-% a-c, ccaron, cacute, d, dstroke, e-s, scaron, t-z, zcaron
-
-% \enableregime[utf]
-% \mainlanguage[sl]
-% \starttext
-% \ccaron\index{\ccaron\space 1}
-% \Ccaron\index{\Ccaron\space 1}
-% Ä\index{Ä 2}
-% Č\index{Č 2}
-% \v c\index{\v c 3}
-% \v C\index{\v C 3}
-% \placeindex
-% \stoptext
-
-% \startmode[sortorder-sl]
-% \exportsortexpansion {ccaron} {cz}
-% \exportsortexpansion {cacute} {czz}
-% \exportsortexpansion {dstroke} {dz}
-% \exportsortexpansion {scaron} {sz}
-% \exportsortexpansion {zacron} {zz}
-
-% \exportsortdivision {cz} {ccaron}
-% \exportsortdivision {czz} {cacute}
-% \exportsortdivision {dz} {dstroke}
-% \exportsortdivision {sz} {scaron}
-% \exportsortdivision {zz} {zacron}
-% \stopmode
-%
-% \startmode[sortorder-sl]
-% \exportsortexpansion {ccaron} {c+1}
-% \exportsortexpansion {cacute} {c+2}
-% \exportsortexpansion {dstroke} {d+1}
-% \exportsortexpansion {scaron} {s+1}
-% \exportsortexpansion {zacron} {z+1}
-%
-% \exportsortdivision {c+1} {ccaron}
-% \exportsortdivision {c+2} {cacute}
-% \exportsortdivision {d+1} {dstroke}
-% \exportsortdivision {s+1} {scaron}
-% \exportsortdivision {z+1} {zacron}
-% \stopmode
-
-\startmode[sortorder-sl]
- \exportsortrule {ccaron} {c+1}
- \exportsortrule {cacute} {c+2}
- \exportsortrule {dstroke} {d+1}
- \exportsortrule {scaron} {s+1}
- \exportsortrule {zacron} {z+1}
-\stopmode
-
-% finnish
-%
-% a-u, v+w sorted together, x-z, aring, adiaeresis, odiaeresis
-
-\startmode[sortorder-fi]
- \exportsortrule {v} {w}
- \exportsortrule {aring} {z+1}
- \exportsortrule {adiaeresis} {z+2}
- \exportsortrule {odiaeresis} {z+3}
-\stopmode
-
-% swedish
-%
-% a-z, aring, adiaeresis, odiaeresis
-
-% \mainlanguage[sv]
-% \starttext
-% a\index{a}
-% a\index{a}
-% z\index{z}
-% z\index{z}
-% q\index{q}
-% q\index{q}
-% å\index{å}
-% å\index{å}
-% å\index{å}
-% ä\index{ä}
-% ä\index{ä}
-% ä\index{ä}
-% ä\index{ä}
-% ö\index{ö}
-% ö\index{ö}
-% \aring\index{\aring}
-% \adiaeresis\index{\adiaeresis}
-% \odiaeresis\index{\odiaeresis}
-% A\index{A}
-% Å\index{Å}
-% Ä\index{Ä}
-% Ö\index{Ö}
-% \Aring\index{\Aring}
-% \Adiaeresis\index{\Adiaeresis}
-% \Odiaeresis\index{\Odiaeresis}
-% \placeindex
-% \stoptext
-
-\startmode[sortorder-sv]
- \exportsortrule {aring} {z+1}
- \exportsortrule {adiaeresis} {z+2}
- \exportsortrule {odiaeresis} {z+3}
-\stopmode
-
-% norwegian, danish
-%
-% a-z, aeligature, oslash, aring
-
-\startmode[sortorder-no,sortorder-da]
- \exportsortrule {aeligature} {z+1}
- \exportsortrule {oslash} {z+2}
- \exportsortrule {aring} {z+3}
-\stopmode
-
-% islandic
-%
-% a, aacute, b, c, d, eth, e, eacute, f-i, iacute, j-o, oacute, p-u, uacute, v, w (?), x, y, yacute, z, aeligature, oslash, thorn
-
-% estonian
-%
-% a-s, scaron, z, zcaron, t-w, otilde, adiaeresis, odiaeresis, udiaeresis, x, y
-
-% czech
-%
-% a) make a single group for: "a", "á", "A", "Á"
-% b) make a different two groups for: "c", "C" and "c", "C"
-% c) sorting rule: "A" < "Á" < "a" < "á" < "C" < "c" < "C" < "c"
-% d) sorting rule: "h" < "ch" < "i" ("c" < "h")
-
-\gdef\czsortdivisionch{ch}
-\gdef\czsortdivisionCh{Ch}
-
-\startmode[sortorder-cz]
- \exportsortexpansion {aacute} {a+1}
- \exportsortexpansion {Aacute} {A+1}
- \exportsortexpansion {ccaron} {c+1}
- \exportsortexpansion {Ccaron} {C+1}
- \exportsortdivision {c+1} {ccaron}
- \exportsortexpansion {dcaron} {d+1}
- \exportsortexpansion {Dcaron} {D+1}
- \exportsortdivision {d+1} {dcaron}
- \exportsortexpansion {eacute} {e+1}
- \exportsortexpansion {Eacute} {E+1}
- \exportsortexpansion {ecaron} {e+2}
- \exportsortexpansion {Ecaron} {E+2}
- \exportsortreduction {ch} {h+1}
- \exportsortexpansion {ch} {h+1}
- \exportsortreduction {Ch} {H+1}
- \exportsortexpansion {Ch} {H+1}
- \exportsortdivision {h+1} {czsortdivisionch}
- \exportsortexpansion {iacute} {i+1}
- \exportsortexpansion {Iacute} {I+1}
- \exportsortexpansion {ncaron} {n+1}
- \exportsortexpansion {Ncaron} {N+1}
- \exportsortdivision {n+1} {ncaron}
- \exportsortexpansion {oacute} {o+1}
- \exportsortexpansion {Oacute} {O+1}
- \exportsortexpansion {rcaron} {r+1}
- \exportsortexpansion {Rcaron} {R+1}
- \exportsortdivision {r+1} {rcaron}
- \exportsortexpansion {scaron} {s+1}
- \exportsortexpansion {Scaron} {S+1}
- \exportsortdivision {s+1} {scaron}
- \exportsortexpansion {tcaron} {t+1}
- \exportsortexpansion {Tcaron} {T+1}
- \exportsortdivision {t+1} {tcaron}
- \exportsortexpansion {uacute} {u+1}
- \exportsortexpansion {Uacute} {U+1}
- \exportsortexpansion {uring} {u+2}
- \exportsortexpansion {Uring} {U+2}
- \exportsortexpansion {yacute} {y+1}
- \exportsortexpansion {Yacute} {Y+1}
- \exportsortexpansion {zcaron} {z+1}
- \exportsortexpansion {Zcaron} {Z+1}
- \exportsortdivision {z+1} {zcaron}
-\stopmode
+\loadmarkfile{sort-lan}
\endinput
diff --git a/Master/texmf-dist/tex/context/base/spec-def.mkiv b/Master/texmf-dist/tex/context/base/spec-def.mkiv
new file mode 100644
index 00000000000..82e12186476
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/spec-def.mkiv
@@ -0,0 +1,19 @@
+%D \module
+%D [ file=spec-def,
+%D version=2006.09.18,
+%D title=\CONTEXT\ Special Macros,
+%D subtitle=Definitions,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D We load the lua scripts here because we don't want to load
+%D them multiple times.
+
+\registerctxluafile{spec-pdf}{1.001}
+
+\endinput
diff --git a/Master/texmf-dist/tex/context/base/spec-def.tex b/Master/texmf-dist/tex/context/base/spec-def.tex
index 933d4219777..fcffbefde8d 100644
--- a/Master/texmf-dist/tex/context/base/spec-def.tex
+++ b/Master/texmf-dist/tex/context/base/spec-def.tex
@@ -16,6 +16,8 @@
\writestatus{loading}{Context Special Macros / Definitions}
+\unprotect
+
%D The following libraries are defined. Two postscript
%D drivers are supported, as well as two mechanisms for
%D interactive texts.
@@ -979,10 +981,10 @@
\defineoutput [dpx] [dpx]
\defineoutput [acrobat] [pdf,ps,tr]
-\defineoutput [xetex] [dpx]
-\defineoutput [xtx] [dpx]
-\defineoutput [xdv] [dvi,xtx]
-\defineoutput [xdv2pdf] [dvi,xtx]
+\defineoutput [xetex] [dpx,xet]
+\defineoutput [xtx] [dpx,xet]
+\defineoutput [xdv] [dvi,xtx,xet]
+\defineoutput [xdv2pdf] [dvi,xtx,xet]
%D Please let me know if we need more. From now on we default
%D to:
diff --git a/Master/texmf-dist/tex/context/base/spec-dpx.tex b/Master/texmf-dist/tex/context/base/spec-dpx.tex
index 44bbe10b699..3dc82d49e46 100644
--- a/Master/texmf-dist/tex/context/base/spec-dpx.tex
+++ b/Master/texmf-dist/tex/context/base/spec-dpx.tex
@@ -219,7 +219,7 @@
\def\dopresetPDFtransparency#1#2%
{\global\advance\PDFcurrenttransparency \plusone
- \doPDFreserveDPXobject{TR:\the\PDFcurrenttransparency}{<< >>}%
+ \doPDFreserveDPXobject{TR:\the\PDFcurrenttransparency}{<< >>}% hack
\special{pdf:\doPDFcheckedDPXobject{TR:\the\PDFcurrenttransparency}\PDFtransparancydictionary{#1}{#2}{}}%
\edef\PDFtransparencyidentifier{/Tr\the\PDFcurrenttransparency}%
\edef\PDFtransparencyreference {@TR:\the\PDFcurrenttransparency}%
@@ -230,7 +230,7 @@
\PDFtransparencyreference\space}}
\def\initializePDFtransparency
- {\doPDFreserveDPXobject{TR:0}{<< >>}%
+ {\doPDFreserveDPXobject{TR:0}{<< >>}% hack
\special{pdf:\doPDFcheckedDPXobject{TR:0}\PDFtransparancydictionary{1}{1}{/AIS false}}%
\xdef\PDFtransparencyresetidentifier{/Tr0}%
\xdef\PDFtransparencyresetreference{@TR:0}%
@@ -393,9 +393,10 @@
\global\let\currentPDFresources\empty
\fi
\special{pdf:exobj}}%
- \smashbox\nextbox
- \flushatshipout{\box\nextbox}%
- \egroup}%
+ \finalizeobjectbox\nextbox
+ \smashbox\nextbox
+ \flushatshipout{\box\nextbox}%
+ \egroup}%
\hbox\bgroup}
\def\doDVIPDFMXstopobject
@@ -622,9 +623,22 @@
\def\doPDFcheckedDPXobject#1{\ifundefined{r:pdx:d:#1}object\else put\fi\space @#1\space}
-% todo when etex is fixed, \everyPDFpresets, leeg voor pdftex, nodig voor dvipdfmx
+% new, experimental, can save a run, bugged, too many xforms now
+%
+% \def\doreservePDFobject#1#2%
+% {\dosetobjectreference{#1}{#2}{@#1::#2}}
+%
+% \def\doPDFreserveddictionaryobject#1#2#3%
+% {\flushatshipout{\special{pdf:object @#1::#2 << #3 >>}}}
+%
+% \def\doPDFreservedarrayobject#1#2#3%
+% {\flushatshipout{\special{pdf:object @#1::#2 [ #3 ]}}}
+%
+% \doreservePDFobject{FDF}{docuextgstates}
+% \doreservePDFobject{FDF}{colorspaces}
+% \doreservePDFobject{FDF}{docushades}
-\doPDFreserveDPXobjectfirst{FDF::docuextgstates}{<< >>}
+% so this is to be checked
\def\doPDFdictionaryobject#1#2#3%
{\flushatshipout
@@ -749,6 +763,7 @@
{\scratchdimen\wd#2\scratchdimen.5\scratchdimen\hskip-\the\scratchdimen
\special{pdf:uxobj @MPPDF::\MPPDFobjectcounter}}}}%
\expanded{\doDVIPDFMXstartobject\zerocount{MPPDF}\MPPDFobjectcounter{\the\wd#2}{\the\ht#2}{\the\dp#2}}%
+ \finalizeobjectbox#2%
\box#2%
\doDVIPDFMXstopobject}
diff --git a/Master/texmf-dist/tex/context/base/spec-fdf.mkii b/Master/texmf-dist/tex/context/base/spec-fdf.mkii
index d04890381c2..a329dc50aa0 100644
--- a/Master/texmf-dist/tex/context/base/spec-fdf.mkii
+++ b/Master/texmf-dist/tex/context/base/spec-fdf.mkii
@@ -94,7 +94,7 @@
\lccode`< \zerocount \lccode`> \zerocount
\lccode`[ \zerocount \lccode`] \zerocount
\lccode`\\\zerocount \lccode`/ \zerocount
- \lowercase{\convertargument#1\to\ascii}%
+ \lowercase{\defconvertedargument\ascii{#1}}%
% by integrating the split in the loop below
% \splitofftokens\maxPDFstringsize\from\ascii\to\ascii
% we diminish the processing time considerably
diff --git a/Master/texmf-dist/tex/context/base/spec-fdf.mkiv b/Master/texmf-dist/tex/context/base/spec-fdf.mkiv
new file mode 100644
index 00000000000..87a30d0cafa
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/spec-fdf.mkiv
@@ -0,0 +1,19 @@
+%D \module
+%D [ file=spec-fdf,
+%D version=2006.09.18,
+%D title=\CONTEXT\ \PDF\ Macros,
+%D subtitle=Support Macros,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\unprotect
+
+\def\setPDFdestination#1{\xdef\PDFdestination{\ctxlua{pdf.cleandestination("\luaescapestring{#1}")}}}
+\def\sanitizePDFstring#1\to#2{\xdef#2{\ctxlua{pdf.sanitizedstring("\luaescapestring{#1}")}}}
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/spec-fdf.tex b/Master/texmf-dist/tex/context/base/spec-fdf.tex
index fbb88677281..51da45ff7a6 100644
--- a/Master/texmf-dist/tex/context/base/spec-fdf.tex
+++ b/Master/texmf-dist/tex/context/base/spec-fdf.tex
@@ -177,6 +177,7 @@
\def\checkPDFextgstates
{\ifx\docuPDFextgstates\empty \else
\ifnum\realpageno=\lastpage\relax
+ %\doPDFreserveddictionaryobject{FDF}{docuextgstates}{\docuPDFextgstates}%
\doPDFdictionaryobject{FDF}{docuextgstates}{\docuPDFextgstates}%
\fi
\doPDFgetobjectreference{FDF}{docuextgstates}\PDFobjectreference
@@ -197,6 +198,7 @@
\def\checkPDFcolorspaces
{\ifx\docuPDFcolorspaces\empty \else
\ifnum\realpageno=\lastpage\relax
+ %\doPDFreserveddictionaryobject{FDF}{colorspaces}{\docuPDFcolorspaces}%
\doPDFdictionaryobject{FDF}{colorspaces}{\docuPDFcolorspaces}%
\fi
\doPDFgetobjectreference{FDF}{colorspaces}\PDFobjectreference
@@ -217,6 +219,7 @@
\def\checkPDFshades
{\ifx\docuPDFshades\empty \else
\ifnum\realpageno=\lastpage\relax
+ %\doPDFreserveddictionaryobject{FDF}{docushades}{\docuPDFshades}%
\doPDFdictionaryobject{FDF}{docushades}{\docuPDFshades}%
\fi
\doPDFgetobjectreference{FDF}{docushades}\PDFobjectreference
@@ -307,12 +310,9 @@
\def\doPDFsetupwhateverbox#1#2#3#4#5#6% watch the extra arguments
{\bgroup
- \!!widtha#5%
- \advance\!!widtha#3%
- \!!heighta-#6%
- \!!heightb#2% extra argument
- \advance\!!heightb -#4%
- \advance\!!heighta \!!heightb
+ \!!widtha \dimexpr#5+#3\relax
+ \!!heightb\dimexpr#2-#4\relax
+ \!!heighta\dimexpr\!!heightb-#6\relax
% sometimes whole values give better results
% \PointsToWholeBigPoints{#3}\left
% \PointsToWholeBigPoints\!!heighta\bottom
@@ -889,8 +889,8 @@
\@EA\processallactionsinset\@EA
[#3]
[\v!repeat=>\edef\pdf@@actions{\pdf@@actions /Mode /Repeat }]%
-\collectdriverresource
-% \flushatshipout % since it can be buried in a chained box
+ \collectdriverresource
+ %\flushatshipout % since it can be buried in a chained box
{\doPDFannotation{0pt}{0pt}
{/Subtype /Movie
/Border [0 0 0]
@@ -913,7 +913,7 @@
\def\doPDFattachfile#1#2#3#4#5#6#7#8%
{\bgroup % title width height color symbol file
- \edef\PDFfile{#8}\convertcommand\PDFfile\to\PDFfile
+ \edefconvertedargument\PDFfile{#8}%
% beware: the symbol may (indirectly) use the file
% reference when typesetting the object number;
\presetPDFsymbolappearance{#5}{#6}{#2}{#3}{#4}% sets width/height
@@ -934,17 +934,17 @@
% semi-public
\def\doPDFembedfile#1#2#3% symbolic name | filename | user name
- {\edef\PDFfile{#1}\convertcommand\PDFfile\to\PDFfile
+ {\edefconvertedargument\PDFfile{#1}%
\doifnotflagged{a:\PDFfile}%
{\doPDFfilestreamobject{PDFEF}{\PDFfile}{#2}{#3}%
\doglobal\setflag{a:\PDFfile}}}
\def\doPDFgetembeddedfilereference#1#2%
- {\edef\PDFfile{#1}\convertcommand\PDFfile\to\PDFfile
+ {\edefconvertedargument\PDFfile{#1}%
\doPDFgetobjectreference{PDFEF}\PDFfile#2}
\def\doPDFgetembeddedfilestreamreference#1#2%
- {\edef\PDFfile{#1}\convertcommand\PDFfile\to\PDFfile
+ {\edefconvertedargument\PDFfile{#1}%
\doPDFgetfilestreamreference\PDFfile#2} % == \doPDFgetobjectreference{PDFFS}\PDFfile#2
\definespecial \doattachfile {\doPDFattachfile}
@@ -2299,9 +2299,9 @@
\def/doVb##1##2 {\egroup\check\Value{##2}} % watch the space
\def\check##1##2%
{\def##1{##2}
- \advance\scratchcounter by 1
+ \advance\scratchcounter\plusone\relax
\ifodd\scratchcounter \else
- \convertcommand\Title\to\asciia
+ \defconvertedcommand\asciia\Title
\global\setFDFfield{\asciia}{\Value}
\doglobal\addtocommalist\Title\allFDFfields
\fi}
@@ -2421,9 +2421,13 @@
\long\def\doPDFinsertcomment#1#2#3#4#5#6#7#8% % \@@DriverCommentLayer set otherwise
{\bgroup % title width height color open symbol collect data
\presetPDFsymbolappearance{#4}{#6}{#2}{#3}\!!zeropoint% sets width/height
+% \doifelsenothing{#1}
+% {\let\PDFidentifier\empty}
+% {\def\PDFidentifier{/T (#1)}}%
\doifelsenothing{#1}
{\let\PDFidentifier\empty}
- {\def\PDFidentifier{/T (#1)}}%
+ {\sanitizePDFencoding#1\to\PDFcommenttitle
+ \def\PDFidentifier{/T \ifPDFunicode <\PDFcommenttitle>\else (\PDFcommenttitle)\fi}}%
\sanitizePDFencoding#8\to\PDFdata
\setFDFlayer\@@DriverCommentLayer
\startPDFsymbolappearance
@@ -2886,17 +2890,51 @@
\definespecial\doregisterspotcolorname{\doPDFregisterspotcolorname}
-\def\doPDFregisterrgbspotcolor#1#2#3#4#5#6#7% name noffractions names p's r g b
+\def\dodoPDFregisterrgbspotcolor#1#2#3#4#5#6#7% name noffractions names p's r g b
{\doPDFregistersomespotcolor{#1}{#2}{#3}{#4}{RGB}{0.0 1.0 0.0 1.0 0.0 1.0}%
{\ifcase#2\or dup #5 mul exch dup #6 mul exch #7 mul\else#5 #6 #7\fi}}
-\def\doPDFregistercmykspotcolor#1#2#3#4#5#6#7#8% name noffractions names p's c m y k
+\def\dodoPDFregistercmykspotcolor#1#2#3#4#5#6#7#8% name noffractions names p's c m y k
{\doPDFregistersomespotcolor{#1}{#2}{#3}{#4}{CMYK}{0.0 1.0 0.0 1.0 0.0 1.0 0.0 1.0}%
{\ifcase#2\or dup #5 mul exch dup #6 mul exch dup #7 mul exch #8 mul\else #5 #6 #7 #8\fi}}
-\def\doPDFregistergrayspotcolor#1#2#3#4#5% name noffractions names p's s
+\def\dodoPDFregistergrayspotcolor#1#2#3#4#5% name noffractions names p's s
{\doPDFregistersomespotcolor{#1}{#2}{#3}{#4}{Gray}{0.0 1.0}%
- {\ifcase#2\or pop\else#5\fi}}
+ {\ifcase#2\or #5 mul\else #5\fi}}
+
+% \let\doPDFregisterrgbspotcolor \dodoPDFregisterrgbspotcolor
+% \let\doPDFregistercmykspotcolor\dodoPDFregistercmykspotcolor
+% \let\doPDFregistergrayspotcolor\dodoPDFregistergrayspotcolor
+
+\def\doPDFregisterrgbspotcolor#1#2#3#4#5#6#7% name noffractions names p's r g b
+ {\ifRGBsupported
+ \dodoPDFregisterrgbspotcolor{#1}{#2}{#3}{#4}{#5}{#6}{#7}%
+ \else
+ \edef\@@cl@@r{#5}\edef\@@cl@@g{#6}\edef\@@cl@@b{#7}%
+ \ifCMYKsupported
+ \convertRGBtoCMYK\@@cl@@r\@@cl@@g\@@cl@@b
+ \dodoPDFregistercmykspotcolor{#1}{#2}{#3}{#4}\@@cl@@c\@@cl@@m\@@cl@@y\@@cl@@k
+ \else
+ \convertRGBtoGRAY\@@cl@@r\@@cl@@g\@@cl@@b
+ \dodoPDFregistergrayspotcolor{#1}{#2}{#3}{#4}\@@cl@@s
+ \fi
+ \fi}
+
+\def\doPDFregistercmykspotcolor#1#2#3#4#5#6#7#8% name noffractions names p's c m y k
+ {\ifCMYKsupported
+ \dodoPDFregistercmykspotcolor{#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8}%
+ \else
+ \edef\@@cl@@c{#5}\edef\@@cl@@m{#6}\edef\@@cl@@y{#7}\edef\@@cl@@k{#8}%
+ \ifRGBsupported
+ \convertCMYKtoRGB\@@cl@@c\@@cl@@m\@@cl@@y\@@cl@@k
+ \dodoPDFregisterrgbspotcolor{#1}{#2}{#3}{#4}\@@cl@@r\@@cl@@g\@@cl@@b
+ \else
+ \convertCMYKtoGRAY\@@cl@@c\@@cl@@m\@@cl@@y\@@cl@@k
+ \dodoPDFregistergrayspotcolor{#1}{#2}{#3}{#4}\@@cl@@s
+ \fi
+ \fi}
+
+\def\doPDFregistergrayspotcolor{\dodoPDFregistergrayspotcolor}
%D New and very experimental.
@@ -2912,12 +2950,6 @@
{\doPDFregistersomeindexcolor{#1}{#2}{#3}{#4}{Gray}{0.0 1.0}%
{pop}}
-% \def\doPDFregisterfigurecolor#1%
-% {\dogetobjectreference
-% {PDF\ifcase\internalspotcolorsize{#1} CS\or CS\else IX\fi}
-% {\internalspotcolorname{#1}}
-% \PDFimagecolorreference}
-
\let\checkpredefinedcolor\predefineindexcolor % we need an index in order to negate bitmaps
\def\doPDFregisterfigurecolor#1% always an index color
@@ -3048,10 +3080,10 @@
{\ifx\initializePDFoverprint\undefined\else
\initializePDFoverprint
% \PDFdirectcode{/GSknockout gs}%
- \PDFcode{/GSknockout gs}%
+ \PDFcode{/GSknockout gs}% wrong
\fi}
-%D Transparency support (experimental):
+%D Transparency support:
\newif\ifPDFtransparencysupported
@@ -3066,11 +3098,9 @@
\def\dodoPDFstarttransparency#1#2%
{\presetPDFtransparency{#1}{#2}%
-% \PDFdirectcode{\PDFtransparencyidentifier\space gs }}
\PDFcode{\PDFtransparencyidentifier\space gs }}
\def\dodoPDFstoptransparency
-% {\PDFdirectcode{/Tr0 gs }}
{\PDFcode{/Tr0 gs }}
\def\doPDFstarttransparency
@@ -3242,7 +3272,8 @@
%D Handy for the \METAPOST\ to \PDF\ converter:
-\newevery \everyPDFxform \relax % we can also use this one in meta-pdf
+\newevery \everyPDFximage \relax
+\newevery \everyPDFxform \relax
\appendtoksonce
\collectPDFresources
@@ -3251,13 +3282,13 @@
\let\collectedPDFresources\empty
-\def\collectPDFresources
- {\doifobjectreferencefoundelse{FDF}{docushades}
+\def\collectPDFresources % suboptimal
+ {\doifobjectreferencefoundelse{FDF}{docushades} % redundant, we have an reserved object now
{\doPDFgetobjectreference{FDF}{docushades}\PDFobjectreference
- \xdef\collectedPDFresources{\collectedPDFresources/Shading \PDFobjectreference}}\donothing
+ \xdef\collectedPDFresources{\collectedPDFresources/Shading \PDFobjectreference}}\donothing
\doifobjectreferencefoundelse{FDF}{docuextgstates}
{\doPDFgetobjectreference{FDF}{docuextgstates}\PDFobjectreference
- \xdef\collectedPDFresources{\collectedPDFresources/ExtGState \PDFobjectreference}}\donothing
+ \xdef\collectedPDFresources{\collectedPDFresources/ExtGState \PDFobjectreference}}\donothing
\doifobjectreferencefoundelse{FDF}{colorspaces}
{\doPDFgetobjectreference{FDF}{colorspaces}\PDFobjectreference
\xdef\collectedPDFresources{\collectedPDFresources/ColorSpace \PDFobjectreference}}\donothing
diff --git a/Master/texmf-dist/tex/context/base/spec-mis.tex b/Master/texmf-dist/tex/context/base/spec-mis.tex
index fce36403894..bfd25320524 100644
--- a/Master/texmf-dist/tex/context/base/spec-mis.tex
+++ b/Master/texmf-dist/tex/context/base/spec-mis.tex
@@ -101,7 +101,7 @@
% \def\doiffileinsertionsupportedelse#1%
% {\expanded{\doifinstringelse{#1}{\c!tex,\c!tmp,\supportedfileinsertions}}}
-\def\doiffileinsertionsupportedelse#1%
+\def\doiffileinsertionsupportedelse#1% lowercasing happens at tex end
{\expanded{\doifinstringelse{\truegraphictype{#1}}{\c!tex,\c!tmp,\supportedfileinsertions}}}
%D This macro is called with 10 arguments, where the first
@@ -163,7 +163,7 @@
*egroup
\long\def\escapePSstring#1\to#2%
- {\convertargument#1\to#2%
+ {\defconvertedargument#2{#1}%
\bgroup
\ifx#2\empty \else
\setverbosecscharacters
@@ -276,4 +276,9 @@
\fi
+%D Handy to have this available asap:
+
+\newevery \everyPDFxform \relax
+\newevery \everyPDFximage \relax
+
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/spec-pdf.lua b/Master/texmf-dist/tex/context/base/spec-pdf.lua
new file mode 100644
index 00000000000..04886b7247b
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/spec-pdf.lua
@@ -0,0 +1,28 @@
+if not modules then modules = { } end modules ['spec-pdf'] = {
+ version = 1.001,
+ comment = "companion to spec-fdf.tex",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+--[[ldx--
+<p>This module implements a couple of cleanup methods. We need these
+in order to meet the <l n='pdf'/> specification. Watch the double
+parenthesis; they are needed because otherwise we would pass more
+than one argument to <l n='tex'/>.</p>
+--ldx]]--
+
+pdf = pdf or { }
+
+function pdf.cleandestination(str)
+ tex.sprint((str:gsub("[%/%#%<%>%[%]%(%)%-%s]+","-")))
+end
+
+function pdf.cleandestination(str)
+ tex.sprint((str:gsub("[%/%#%<%>%[%]%(%)%-%s]+","-")))
+end
+
+function pdf.santizedstring(str)
+ tex.sprint((str:gsub("([\\/#<>%[%]%(%)])","\\%1")))
+end
diff --git a/Master/texmf-dist/tex/context/base/spec-tpd.tex b/Master/texmf-dist/tex/context/base/spec-tpd.tex
index 8d6d93d38eb..b6d2bddf0c8 100644
--- a/Master/texmf-dist/tex/context/base/spec-tpd.tex
+++ b/Master/texmf-dist/tex/context/base/spec-tpd.tex
@@ -226,7 +226,9 @@
\ifx\pdfmapfile\undefined \let\pdfmapfile\gobbletwoarguments \fi
\ifx\pdfmapline\undefined \let\pdfmapline\gobbletwoarguments \fi
-\definespecial\doresetmapfilelist{\pdfmapfile{original-empty.map}}
+\definespecial\doresetmapfilelist
+ {\global\let\doresetmapfilelist\relax
+ \pdfmapfile{original-empty.map}}
\ifnum\pdftexversion<120
@@ -310,9 +312,8 @@
\ifx\temp\empty
\exitloop
\else
- \let\filesuffix\temp
+ \lowercasestring\temp\to\filesuffix % insertion check also needs lowercase
% a temporary hack
- \doif\filesuffix{PDF}{\pdfimageresolution72}%
\doif\filesuffix{pdf}{\pdfimageresolution72}%
% because pdfTeX scales back
\fi}}
@@ -538,7 +539,7 @@
\definespecial\dostartnonecolormode{\doPDFstartnonecolormode}
\definespecial\doregisternonecolor {\doPDFregisternonecolor}
-\def\doPDFregisterspotcolorname#1#2%
+\def\doPDFregisterspotcolorname#1#2% no need for escape in luatex
{\bgroup
\let\ascii\empty
\def\docommand##1%
@@ -649,7 +650,7 @@
%D {dostarttransparency,dostoptransparency}
%D
%D For transparency, we need to implement a couple of
-%D auxiliary macros. If needed, we will generalize tham later.
+%D auxiliary macros. If needed, we will generalize them later.
\definespecial\dostarttransparency{\doPDFstarttransparency}
\definespecial\dostoptransparency {\doPDFstoptransparency}
@@ -904,6 +905,7 @@
% won't work in xforms; some day I will optimize
% this.
\the\everyPDFxform
+ \finalizeobjectbox\nextbox
\immediate\pdfxform
resources {\currentPDFresources\the\pdfpageresources}%
\nextbox
@@ -1233,6 +1235,24 @@
{\immediate\pdfobj{[ #3 ]}%
\dosetobjectreference{#1}{#2}{\the\pdflastobj}}}
+% tricky .. too many xforms now
+%
+% \def\doreservePDFobject#1#2%
+% {\pdfobj reserveobjnum{}%
+% \driverreferenced\dosetobjectreference{#1}{#2}{\the\pdflastobj}}
+%
+% \def\doPDFreserveddictionaryobject#1#2#3%
+% {\doPDFgetobjectnumber{#1}{#2}\PDFobjectnumber
+% \immediate\pdfobj useobjnum \PDFobjectnumber {<< #3 >>}}
+%
+% \def\doPDFreservedarrayobject#1#2#3%
+% {\doPDFgetobjectnumber{#1}{#2}\PDFobjectnumber
+% \immediate\pdfobj useobjnum \PDFobjectnumber {[ #3 ]}}
+
+% \doreservePDFobject{FDF}{docuextgstates}
+% \doreservePDFobject{FDF}{colorspaces}
+% \doreservePDFobject{FDF}{docushades}
+
%D \macros
%D {defaultobjectreference,doPDFgetobjectreference}
%D
@@ -1247,6 +1267,10 @@
{\dogetobjectreference{#1}{#2}#3%
\edef#3{\ifx#3\empty null\else\PDFobjref{#3}\fi}}
+\def\doPDFgetobjectnumber#1#2#3%
+ {\dogetobjectreference{#1}{#2}#3%
+ \edef#3{\ifx#3\empty 0\else#3\fi}}
+
% \def\doPDFgetobjectpage #1#2#3{..}
% \def\doPDFgetobjectpagereference#1#2#3{..}
@@ -1333,6 +1357,7 @@
\def\setMPPDFobject#1#2% resources boxnumber
{\the\everyPDFxform
+ \finalizeobjectbox{#2}%
\immediate\pdfxform resources{#1}#2%
\edef\getMPPDFobject{\noexpand\pdfrefxform\the\pdflastxform}}
diff --git a/Master/texmf-dist/tex/context/base/spec-tst.tex b/Master/texmf-dist/tex/context/base/spec-tst.tex
index b8424e18ee1..e699475bc2e 100644
--- a/Master/texmf-dist/tex/context/base/spec-tst.tex
+++ b/Master/texmf-dist/tex/context/base/spec-tst.tex
@@ -2,7 +2,7 @@
%D [ file=spec-tst,
%D version=2002.12.08,
%D title=\CONTEXT\ \PDF\ Macros,
-%D subtitle=Special Test Macro
+%D subtitle=Special Test Macro,
%D author=Hans Hagen,
%D date=\currentdate,
%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
diff --git a/Master/texmf-dist/tex/context/base/spec-xet.tex b/Master/texmf-dist/tex/context/base/spec-xet.tex
new file mode 100644
index 00000000000..0cbd55ba7fd
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/spec-xet.tex
@@ -0,0 +1,66 @@
+%D \module
+%D [ file=spec-xtx,
+%D version=2004.11.08,
+%D title=\CONTEXT\ Special Macros,
+%D subtitle=\XETEX\ support,
+%D author={Adam Lindsay \& Hans Hagen \& \unknown},
+%D date=\currentdate,
+%D copyright={Adam Lindsay \& Hans Hagen}]
+
+\unprotect
+
+\definespecial\doinsertfile
+ {\dofileinsertion{xtx}\@@DriverImageType}
+
+\definefileinsertion{xtx}{jpg}{\xtxhandleotherimage}
+\definefileinsertion{xtx}{png}{\xtxhandleotherimage}
+\definefileinsertion{xtx}{gif}{\xtxhandleotherimage}
+\definefileinsertion{xtx}{tif}{\xtxhandleotherimage}
+\definefileinsertion{xtx}{pdf}{\xtxhandlepdfimage }
+
+\def\checkpdfimagepagenumber
+ {\edef\pdfimagepagenumber
+ {\ifx\@@DriverImagePage\empty\else\ifnum\@@DriverImagePage>\zerocount
+ \space page\space\@@DriverImagePage\space
+ \fi\fi}}
+
+\def\xtxhandleotherimage
+ {\XeTeXpicfile "\@@DriverImageFile"
+ \ifdim\@@DriverImageWidth >\zeropoint \!!width \@@DriverImageWidth \space\fi
+ \ifdim\@@DriverImageHeight>\zeropoint \!!height \@@DriverImageHeight \fi
+ \relax}
+
+\def\xtxhandlepdfimage
+ {\checkpdfimagepagenumber
+ \XeTeXpdffile "\@@DriverImageFile"
+ \pdfimagepagenumber
+ \ifdim\@@DriverImageWidth >\zeropoint \!!width \@@DriverImageWidth \space\fi
+ \ifdim\@@DriverImageHeight>\zeropoint \!!height \@@DriverImageHeight \fi
+ \relax}
+
+\def\dogetXTXfiguresize
+ {\setbox\foundexternalfigure\vbox{\XeTeXpicfile "\@@DriverImageFile"\relax}%
+ \xdef\analyzedfigurewidth {\the\wd\foundexternalfigure}%
+ \xdef\analyzedfigureheight{\the\ht\foundexternalfigure}}
+
+\def\dogetXTXpdfsize
+ {\checkpdfimagepagenumber
+ \setbox\foundexternalfigure\vbox{\XeTeXpdffile "\@@DriverImageFile" \pdfimagepagenumber\relax}%
+ \xdef\analyzedfigurewidth {\the\wd\foundexternalfigure}%
+ \xdef\analyzedfigureheight{\the\ht\foundexternalfigure}}
+
+\definefilechecker{xtx}{png}{\dogetXTXfiguresize}
+\definefilechecker{xtx}{jpg}{\dogetXTXfiguresize}
+\definefilechecker{xtx}{gif}{\dogetXTXfiguresize}
+\definefilechecker{xtx}{tif}{\dogetXTXfiguresize}
+\definefilechecker{xtx}{pdf}{\dogetXTXpdfsize }
+
+\definespecial\dogetfiguresize
+ {\dofilechecker{xtx}\@@DriverImageType}
+
+%D The figure object system caused no end of headaches. They all
+%D went away with this single line:
+
+\setupexternalfigures[\c!object=\v!no]
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/spec-xtx.tex b/Master/texmf-dist/tex/context/base/spec-xtx.tex
index 0cd9baaddec..799c6ca8d31 100644
--- a/Master/texmf-dist/tex/context/base/spec-xtx.tex
+++ b/Master/texmf-dist/tex/context/base/spec-xtx.tex
@@ -73,64 +73,8 @@
\definespecial\doloadmapfile #1#2{\special{x:fontmapfile #1#2}}
\definespecial\doloadmapline #1#2{\special{x:fontmapline #1#2}}
-%D \XETEX\ supports \type{\doPDFdestination} and
-%D \type{\doPDFbookmark} inherited straight from \DVIPDFMX.
-
-\definespecial\doinsertfile
- {\dofileinsertion{xtx}\@@DriverImageType}
-
-\definefileinsertion{xtx}{jpg}{\xtxhandleotherimage}
-\definefileinsertion{xtx}{png}{\xtxhandleotherimage}
-\definefileinsertion{xtx}{gif}{\xtxhandleotherimage}
-\definefileinsertion{xtx}{tif}{\xtxhandleotherimage}
-\definefileinsertion{xtx}{pdf}{\xtxhandlepdfimage }
-
-\def\checkpdfimagepagenumber
- {\edef\pdfimagepagenumber
- {\ifx\@@DriverImagePage\empty\else\ifnum\@@DriverImagePage>\zerocount
- \space page\space\@@DriverImagePage\space
- \fi\fi}}
-
-\def\xtxhandleotherimage
- {\XeTeXpicfile "\@@DriverImageFile"
- \ifdim\@@DriverImageWidth >\zeropoint \!!width \@@DriverImageWidth \space\fi
- \ifdim\@@DriverImageHeight>\zeropoint \!!height \@@DriverImageHeight \fi
- \relax}
-
-\def\xtxhandlepdfimage
- {\checkpdfimagepagenumber
- \XeTeXpdffile "\@@DriverImageFile"
- \pdfimagepagenumber
- \ifdim\@@DriverImageWidth >\zeropoint \!!width \@@DriverImageWidth \space\fi
- \ifdim\@@DriverImageHeight>\zeropoint \!!height \@@DriverImageHeight \fi
- \relax}
-
-\def\dogetXTXfiguresize
- {\setbox\foundexternalfigure\vbox{\XeTeXpicfile "\@@DriverImageFile"}%
- \xdef\analyzedfigurewidth {\the\wd\foundexternalfigure}%
- \xdef\analyzedfigureheight{\the\ht\foundexternalfigure}}
-
-\def\dogetXTXpdfsize
- {\checkpdfimagepagenumber
- \setbox\foundexternalfigure\vbox{\XeTeXpdffile "\@@DriverImageFile" \pdfimagepagenumber}%
- \xdef\analyzedfigurewidth {\the\wd\foundexternalfigure}%
- \xdef\analyzedfigureheight{\the\ht\foundexternalfigure}}
-
-\definefilechecker{xtx}{png}{\dogetXTXfiguresize}
-\definefilechecker{xtx}{jpg}{\dogetXTXfiguresize}
-\definefilechecker{xtx}{gif}{\dogetXTXfiguresize}
-\definefilechecker{xtx}{tif}{\dogetXTXfiguresize}
-\definefilechecker{xtx}{pdf}{\dogetXTXpdfsize }
-
-\definespecial\dogetfiguresize
- {\dofilechecker{xtx}\@@DriverImageType}
-
-%D The figure object system caused no end of headaches. They all
-%D went away with this single line:
-
-\setupexternalfigures[\c!object=\v!no]
-
-%D
+%D \macros
+%D {dosetuppaper}
\ifx\pdfpagewidth\undefined \else
\definespecial\dosetuppaper#1#2#3%
diff --git a/Master/texmf-dist/tex/context/base/supp-box.tex b/Master/texmf-dist/tex/context/base/supp-box.tex
index e4f4922c782..69035d45fcb 100644
--- a/Master/texmf-dist/tex/context/base/supp-box.tex
+++ b/Master/texmf-dist/tex/context/base/supp-box.tex
@@ -626,16 +626,24 @@
%D {llap, rlap, tlap, blap, clap}
%D
%D Some well known friends, but we implement them our own
-%D way.
+%D way. We want the macros to work in both math and text mode.
-\def\rlap{\begingroup\dowithnextbox{\normalhbox to \zeropoint
- {\flushnextbox\normalhss}\endgroup}\normalhbox}
+\def\dorlap{\begingroup\dowithnextbox{\normalhbox to \zeropoint
+ {\flushnextbox\normalhss}\endgroup}\normalhbox}
-\def\llap{\begingroup\dowithnextbox{\normalhbox to \zeropoint
- {\normalhss\flushnextbox}\endgroup}\normalhbox}
+\def\dollap{\begingroup\dowithnextbox{\normalhbox to \zeropoint
+ {\normalhss\flushnextbox}\endgroup}\normalhbox}
-\def\clap{\begingroup\dowithnextbox{\normalhbox to \zeropoint
- {\normalhss\flushnextbox\normalhss}\endgroup}\normalhbox}
+\def\doclap{\begingroup\dowithnextbox{\normalhbox to \zeropoint
+ {\normalhss\flushnextbox\normalhss}\endgroup}\normalhbox}
+
+\def\domathclap{\mathpalette\dodomathclap} \def\dodomathclap#1#2{\doclap{$\m@th#1#2$}}
+\def\domathllap{\mathpalette\dodomathllap} \def\dodomathllap#1#2{\dollap{$\m@th#1#2$}}
+\def\domathrlap{\mathpalette\dodomathrlap} \def\dodomathrlap#1#2{\dorlap{$\m@th#1#2$}}
+
+\unexpanded\def\rlap{\mathortext\domathrlap\dorlap}
+\unexpanded\def\llap{\mathortext\domathllap\dollap}
+\unexpanded\def\clap{\mathortext\domathclap\doclap}
\def\tlap{\begingroup\dowithnextbox{\normalvbox to \zeropoint
{\normalvss\flushnextbox}\endgroup}\normalvbox}
@@ -821,6 +829,9 @@
\def\restoreshapebox % compensates for the signal
{\global\setbox\tmpshapebox\vbox{\vskip-\lineheight\unvcopy\oldshapebox}}
+\def\shapeboxstrut % put this in front if needed !
+ {\vrule\!!width\zeropoint\!!height\ht\shapebox\!!depth\dp\shapebox}
+
\def\dodoreshapebox#1#2#3#4% \shapebox, \shapepenalty, \shapekern, \shapeskip
{\ifzeropt\lastskip % \ifdim\lastskip=\zeropoint\relax
\ifzeropt\lastkern % \ifdim\lastkern=\zeropoint\relax
@@ -1067,7 +1078,7 @@
\exhyphenpenalty\zerocount
\setbox0\normalvbox
{\hsize\zeropoint
- \hskip\zeropoint % really needed
+ \hskip\zeropoint\relax % really needed
\ifnum#1<\zeropoint
\obeyspaces
\obeylines
@@ -1557,8 +1568,9 @@
\def\processisolatedwords##1##2{##2{##1}}% we split only once
\fi
\global\let\localbetweenisolatedwords\betweenisolatedwords
- \setbox0\normalhbox % we default to spaces, but from inside out
- {\ignorespaces#1% \localbetweenisolatedwords can be overruled
+ \setbox0\normalhbox % we default to spaces, but from inside out
+ {\normallanguage\minusone % needed for mkiv
+ \ignorespaces#1% \localbetweenisolatedwords can be overruled
\global\isolatedlastskip\lastskip}%
\setbox2\normalvbox
{%\hyphenpenalty10000 % this one fails in \url breaking,
@@ -2339,12 +2351,13 @@
%D The alternatives \type {\tbox} and \type {\bbox} can be used
%D to properly align boxes, like in:
%D
+%D \setupexternalfigures[directory={../sample}]
%D \startbuffer
%D \starttable[|||]
%D \HL
-%D \VL \tbox{\externalfigure[koe][height=3cm,frame=on]} \VL top aligned \VL\SR
+%D \VL \tbox{\externalfigure[cow][height=3cm,frame=on]} \VL top aligned \VL\SR
%D \HL
-%D \VL \bbox{\externalfigure[koe][height=3cm,frame=on]} \VL bottom aligned \VL\SR
+%D \VL \bbox{\externalfigure[cow][height=3cm,frame=on]} \VL bottom aligned \VL\SR
%D \HL
%D \stoptable
%D \stopbuffer
diff --git a/Master/texmf-dist/tex/context/base/supp-fil.lua b/Master/texmf-dist/tex/context/base/supp-fil.lua
new file mode 100644
index 00000000000..a1c176dcd91
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/supp-fil.lua
@@ -0,0 +1,79 @@
+if not modules then modules = { } end modules ['supp-fil'] = {
+ version = 1.001,
+ comment = "companion to supp-fil.tex",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+--[[ldx--
+<p>It's more convenient to manipulate filenames (paths) in
+<l n='lua'/> than in <l n='tex'/>. These methods have counterparts
+at the <l n='tex'/> side.</p>
+--ldx]]--
+
+support = support or { }
+environment = environment or { }
+
+environment.outputfilename = environment.outputfilename or environment.jobname
+
+function support.checkfilename(str) -- "/whatever..." "c:..." "http://..."
+ cs.chardef("kindoffile",boolean.tonumber(str:find("^/") or str:find("[%a]:")))
+end
+
+function support.thesanitizedfilename(str)
+ tex.write((str:gsub("\\","/")))
+end
+
+function support.splitfilename(fullname)
+ local path, name, base, suffix, kind = '', fullname, fullname, '', 0
+ local p, n = fullname:match("^(.+)/(.-)$")
+ if p and n then
+ path, name, base = p, n, n
+ end
+ local b, s = base:match("^(.+)%.(.-)$")
+ if b and s then
+ name, suffix = b, s
+ end
+ if path == "" then
+ kind = 0
+ elseif path == '.' then
+ kind = 1
+ else
+ kind = 2
+ end
+--~ print(fullname,path,base,name,suffix)
+ cs.def("splitofffull", fullname)
+ cs.def("splitoffpath", path)
+ cs.def("splitoffbase", base)
+ cs.def("splitoffname", name)
+ cs.def("splitofftype", suffix)
+ cs.chardef("splitoffkind", kind)
+end
+
+function support.splitfiletype(fullname)
+ local name, suffix = fullname, ''
+ local n, s = fullname:match("^(.+)%.(.-)$")
+ if n and s then
+ name, suffix = n, s
+ end
+ cs.def("splitofffull", fullname)
+ cs.def("splitoffpath", "")
+ cs.def("splitoffname", name)
+ cs.def("splitofftype", suffix)
+end
+
+function support.doifparentfileelse(n)
+ cs.testcase(n==environment.jobname or n==environment.jobname..'.tex' or n==environment.outputfilename)
+end
+
+-- saves some .15 sec on 12 sec format generation
+
+function support.doiffileexistelse(name)
+ if not name or name == "" then
+ return cs.testcase(false)
+ else
+ local n = input.findtexfile(texmf.instance,name)
+ return cs.testcase(n and n ~= "")
+ end
+end
diff --git a/Master/texmf-dist/tex/context/base/supp-fil.mkii b/Master/texmf-dist/tex/context/base/supp-fil.mkii
index 56810f8269a..ff4a2ab01ca 100644
--- a/Master/texmf-dist/tex/context/base/supp-fil.mkii
+++ b/Master/texmf-dist/tex/context/base/supp-fil.mkii
@@ -13,6 +13,9 @@
\unprotect
+\def\openinputfile #1#2{\immediate\openin #1="#2"\relax} \def\closeinputfile #1{\immediate\closein #1}
+\def\openoutputfile#1#2{\immediate\openout#1="#2"\relax} \def\closeoutputfile#1{\immediate\closeout#1}
+
%D For the moment, we limit sanitizing to taking care of
%D active \type {/}.
@@ -33,7 +36,6 @@
\lccode`\\=`\/
\lowercase{\expanded{\xdef\noexpand\sanitizedfilename{#1}}}%
\egroup
- % maybe \convertcommand\sanitizedfilename\to#2%
\let#2\sanitizedfilename}
\egroup
diff --git a/Master/texmf-dist/tex/context/base/supp-fil.mkiv b/Master/texmf-dist/tex/context/base/supp-fil.mkiv
new file mode 100644
index 00000000000..586004259fa
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/supp-fil.mkiv
@@ -0,0 +1,32 @@
+%D \module
+%D [ file=supp-fil,
+%D version=2006.09.18,
+%D title=\CONTEXT\ Support Macros,
+%D subtitle=Files,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details
+
+% \input supp-fil.mkii \endinput
+
+\registerctxluafile{supp-fil}{1.001}
+
+% \def\sanitizefilename#1\to#2%
+% {\edef#2{\ctxlua{support.thesanitizedfilename("\luaescapestring{#1}")}}}
+% \def\checkfilename #1{\ctxlua{support.checkfilename("\luaescapestring{#1}")}}
+% \def\splitfilename #1{\ctxlua{support.splitfilename("\luaescapestring{#1}")}}
+% \def\splitfiletype #1{\ctxlua{support.splitfiletype("\luaescapestring{#1}")}}
+% \def\doifparentfileelse#1{\ctxlua{support.doifparentfileelse("\luaescapestring{#1}")}}
+
+\def\sanitizefilename#1\to#2{\edef#2{\ctxlua{support.thesanitizedfilename([[#1]])}}}
+\def\checkfilename #1{\ctxlua{support.checkfilename([[#1]])}}
+\def\splitfilename #1{\ctxlua{support.splitfilename([[#1]])}}
+\def\splitfiletype #1{\ctxlua{support.splitfiletype([[#1]])}}
+\def\doifparentfileelse #1{\ctxlua{support.doifparentfileelse([[#1]])}}
+\def\doiffileexistselse #1{\ctxlua{support.doiffileexistelse([[#1]])}}
+
+\endinput
diff --git a/Master/texmf-dist/tex/context/base/supp-fil.tex b/Master/texmf-dist/tex/context/base/supp-fil.tex
index b41858396d2..4d31bfd280e 100644
--- a/Master/texmf-dist/tex/context/base/supp-fil.tex
+++ b/Master/texmf-dist/tex/context/base/supp-fil.tex
@@ -42,8 +42,14 @@
%D
%D We save a few primitives first.
-\let\normalwrite\write
+\let\normalwrite \write
\let\normalimmediate\immediate
+
+% \def\openinputfile #1#2{\immediate\openin #1="#2"\relax} \def\closeinputfile #1{\immediate\closein #1}
+% \def\openoutputfile#1#2{\immediate\openout#1="#2"\relax} \def\closeoutputfile#1{\immediate\closeout#1}
+
+\def\openinputfile #1#2{\immediate\openin #1=#2\relax} \def\closeinputfile #1{\immediate\closein #1}
+\def\openoutputfile#1#2{\immediate\openout#1=#2\relax} \def\closeoutputfile#1{\immediate\closeout#1}
%D \macros
%D {pushendofline,popendofline}
@@ -75,18 +81,18 @@
%
% support for nested usage:
-\newcounter \endoflinelevel
+\newcount \endoflinelevel
\ifx\newlinecode\undefined \chardef\newlinecode=`\^^M \fi
\def\pushendofline
- {\fastincrement\endoflinelevel
- \expandafter\chardef\csname :eol:\endoflinelevel\endcsname\catcode\newlinecode
+ {\advance\endoflinelevel\plusone
+ \expandafter\chardef\csname :eol:\number\endoflinelevel\endcsname\catcode\newlinecode
\catcode\newlinecode\@@comment\relax}
\def\popendofline
- {\catcode\newlinecode\csname :eol:\endoflinelevel\endcsname
- \fastdecrement\endoflinelevel}
+ {\catcode\newlinecode\csname :eol:\number\endoflinelevel\endcsname
+ \advance\endoflinelevel\minusone}
\def\restoreendofline
{\catcode\newlinecode\@@endofline}
@@ -109,7 +115,8 @@
%D one.
\def\unlinkfile#1%
- {\immediate\openout\scratchwrite=#1\immediate\closeout\scratchwrite}
+ {\openoutputfile \scratchwrite{#1}%
+ \closeoutputfile\scratchwrite}
%D \macros
%D {writeln}
@@ -121,12 +128,12 @@
\def\doiffileexistselse#1%
{\doifelsenothing{#1}
{\secondoftwoarguments}
- {\immediate\openin\scratchread=#1\relax
+ {\openinputfile\scratchread{#1}%
\ifeof\scratchread
- \immediate\closein\scratchread
+ \closeinputfile\scratchread
\expandafter\secondoftwoarguments
\else
- \immediate\closein\scratchread
+ \closeinputfile\scratchread
\expandafter\firstoftwoarguments
\fi}}
@@ -151,14 +158,14 @@
\let\fileline\empty
\def\doprocessfile#1#2#3%
- {\immediate\openin#1=#2\relax
+ {\openinputfile{#1}{#2}%
\ifeof#1%
\fileprocessedfalse
- \immediate\closein#1%
+ \closeinputfile#1%
\else
\fileprocessedtrue
\gdef\dofinishfile
- {\immediate\closein#1%
+ {\closeinputfile#1%
\global\let\doprocessline\relax}%
\gdef\doprocessline
{\ifeof#1%
@@ -214,6 +221,8 @@
\unexpanded\def\input{\normalinput}
+\def\inputgivenfile#1{\normalinput"#1"\relax}
+
%D \macros
%D {readfile,ReadFile,maxreadlevel}
%D
@@ -277,6 +286,8 @@
\newif\iftracefiles
+\newcount\readlevel
+
\def\maxreadlevel{3}
\newconditional\trackfilenames
@@ -329,7 +340,7 @@
\iftracefiles\writestatus\m!systems{#1 located}\fi
\def\next{#2\dodoreadfile}}%
{\iftracefiles\writestatus\m!systems{cannot locate #1}\fi
- \decrement\readlevel\relax
+ \advance\readlevel\minusone
\ifnum\readlevel>\zerocount
\edef\readfilename{\pathplusfile{\f!parentpath}{\readfilename}}%
\def\next{\redoreadfile\readfilename{#2}{#3}}%
@@ -343,13 +354,14 @@
\setxvalue{fn..\trackedfilename}{\readfilename}%
\fi
\the\everybeforereadfile
- \normalinput\readfilename\relax
+% \normalinput\readfilename\relax
+ \relax\inputgivenfile\readfilename\relax
\the\everyafterreadfile}
% too less:
%
% \unexpanded\def\readfile% #1%
-% {\let\readlevel\maxreadlevel
+% {\readlevel\maxreadlevel
% \doreadfile\empty} % {#1}
%
% too much:
@@ -388,15 +400,15 @@
%D Due to different needs, we decided to offer four alternative
%D loading commands. With \type{\readjobfile} we load a local
%D file and do no backtracking, while \type{\readlocfile}
-%D backtracks~\readlevel\ directories, including the current
+%D backtracks~\number\readlevel\ directories, including the current
%D one.
\unexpanded\def\readjobfile % #1% current path, no backtracking
- {\newcounter\readlevel
+ {\readlevel\zerocount
\doreadfile\f!currentpath} % {#1}}
\unexpanded\def\readlocfile % #1% current path, backtracking
- {\let\readlevel\maxreadlevel
+ {\readlevel\maxreadlevel
\doreadfile\f!currentpath} % {#1}}
%D System files can be anywhere and therefore
@@ -404,7 +416,7 @@
%D and obeys the \TEX\ implementation.
\unexpanded\def\readsysfile % #1% current path, obeys tex search
- {\newcounter\readlevel
+ {\readlevel\zerocount
\doreadfile\empty} % {#1}}
%D Of the last two, \type{\readfixfile} searches on the
@@ -412,11 +424,11 @@
%D \type{\readsetfile} does only search on the specified path.
\unexpanded\def\readfixfile % #1#2% specified path, backtracking
- {\let\readlevel\maxreadlevel
+ {\readlevel\maxreadlevel
\doreadfile} % {#1}{#2}}
\unexpanded\def\readsetfile % #1#2% specified path, no backtracking
- {\newcounter\readlevel
+ {\readlevel\zerocount
\doreadfile} % {#1}{#2}}
%D After having defined this commands, we reconsidered the
@@ -451,31 +463,31 @@
{\sanitizefilename#2\to\readfilename
\checkfilename\readfilename
\ifcase\kindoffile
- \increment\readlevel
- \immediate\openin#1=\readfilename\relax
+ \advance\readlevel\plusone
+ \openinputfile{#1}\readfilename
\ifeof#1% \relax
\ifnum\readlevel>\maxreadlevel % \relax
\else
- \immediate\closein#1% \relax
+ \closeinputfile#1% \relax
\doopenin{#1}{\pathplusfile\f!parentpath{#2}}%
\fi
\fi
\fi}
\def\openjobin#1#2%
- {\newcounter\readlevel
+ {\readlevel\zerocount
\doopenin{#1}{\pathplusfile\f!currentpath{#2}}}
\def\opensysin % #1#2%
- {\let\readlevel\maxreadlevel
+ {\readlevel\maxreadlevel
\doopenin} % {#1}{#2}}
\def\openlocin#1#2%
- {\let\readlevel\maxreadlevel
+ {\readlevel\maxreadlevel
\doopenin{#1}{\pathplusfile\f!currentpath{#2}}}
\def\openfixin#1#2#3%
- {\let\readlevel\maxreadlevel
+ {\readlevel\maxreadlevel
\doopenin{#1}{\pathplusfile{#2}{#3}}}
%D \macros
@@ -532,7 +544,8 @@
{\gobbleoneargument}}
\def\doinputonce#1%
- {\doonlyonce{#1}{\doiffileelse{#1}{\normalinput#1\relax}\donothing}}
+% {\doonlyonce{#1}{\doiffileelse{#1}{\normalinput#1\relax}\donothing}}
+ {\doonlyonce{#1}{\doiffileelse{#1}{\inputgivenfile{#1}}\donothing}}
\def\doendinputonce#1%
{\doifdefined{@@@#1@@@}\endinput}
@@ -565,7 +578,7 @@
\def\normalequal {=} % geen \let !
\def\normaldblquote{"} % geen \let !
-\newcounter\readingfilelevel
+\newcount\readingfilelevel
\def\popfilecharacter#1#2%
{\ifnum\catcode`#1=\@@other \ifnum#2=\@@other \else
@@ -585,43 +598,8 @@
\newtoks \everystartreadingfile
\newtoks \everystopreadingfile
-% \def\startreadingfile% beter een every en \setnormalcatcodes
-% {\doglobal\increment\readingfilelevel
-% \the\everystartreadingfile
-% \setxvalue{\string\readingfilelevel::\readingfilelevel}%
-% {\catcode`/ =\the\catcode`/%
-% %\catcode`_ =\the\catcode`_% math ! ! !
-% \catcode`" =\the\catcode`"%
-% \catcode`: =\the\catcode`:%
-% \catcode`; =\the\catcode`;%
-% \catcode`< =\the\catcode`<%
-% \catcode`> =\the\catcode`>%
-% \catcode`\noexpand\\=\the\catcode`\\%
-% \catcode`\noexpand\{=\the\catcode`\{%
-% \catcode`\noexpand\}=\the\catcode`\}%
-% \catcode`\noexpand\%=\the\catcode`\%}%
-% \catcode`/ =\@@other
-% %\catcode`_ =\@@other
-% \catcode`" =\@@other
-% \catcode`: =\@@other
-% \catcode`; =\@@other
-% \catcode`< =\@@other
-% \catcode`> =\@@other
-% \catcode`\\=\@@escape
-% \catcode`\{=\@@begingroup
-% \catcode`\}=\@@endgroup
-% \catcode`\%=\@@comment
-% \pushendofline
-% \restoreendofline}
-
-% \def\stopreadingfile
-% {\popendofline
-% \getvalue{\string\readingfilelevel::\readingfilelevel}%
-% \the\everystopreadingfile
-% \doglobal\decrement\readingfilelevel}
-
\def\startreadingfile% beter een every en \setnormalcatcodes
- {\doglobal\increment\readingfilelevel
+ {\global\advance\readingfilelevel\plusone
\the\everystartreadingfile
\beginrestorecatcodes
\setcatcodetable\prtcatcodes}
@@ -629,7 +607,7 @@
\def\stopreadingfile
{\endrestorecatcodes
\the\everystopreadingfile
- \doglobal\decrement\readingfilelevel}
+ \global\advance\readingfilelevel\minusone}
\let\normalstartreadingfile\startreadingfile
\let\normalstopreadingfile \stopreadingfile
@@ -671,57 +649,6 @@
\let\splitfilename\gobbleoneargument % defined in mk
\let\splitfiletype\gobbleoneargument % defined in mk
-
-%% % gebruikt voor normale (!) files, will change to proper
-%% % installer maybe combined with verb module push/popper
-%%
-%% \def\startreadingfile% beter een every
-%% {\doglobal\increment\readingfilelevel
-%% \setxvalue{popfilecharacters::\readingfilelevel}%
-%% {%\expnormalcatcodes
-%% \expspecialcatcodes}%
-%% %\setnormalcatcodes
-%% \setspecialcatcodes}
-%%
-%% \def\stopreadingfile%
-%% {\getvalue{popfilecharacters::\readingfilelevel}%
-%% \doglobal\decrement\readingfilelevel}
-%%
-%% \ifx\\\undefined \let\\\relax \fi
-%% \ifx\!\undefined \let\!\relax \fi
-%% \ifx\?\undefined \let\?\relax \fi
-%%
-%% \def\expnormalcatcodes%
-%% {\catcode`\noexpand\!=\the\catcode`\! \catcode`\noexpand\?=\the\catcode`\?%
-%% \catcode`\noexpand\&=\the\catcode`\&
-%% \catcode`\noexpand\#=\the\catcode`\# \catcode`\noexpand\$=\the\catcode`\$%
-%% \catcode`\noexpand\%=\the\catcode`\% \catcode`\noexpand\\=\the\catcode`\\%
-%% \catcode`\noexpand\^=\the\catcode`\^ \catcode`\noexpand\_=\the\catcode`\_%
-%% \catcode`\noexpand\{=\the\catcode`\{ \catcode`\noexpand\}=\the\catcode`\}}
-%%
-%% \def\setnormalcatcodes%
-%% {%\ifcase\protectionlevel
-%% \catcode`\!=\@@other \catcode`\?=\@@other
-%% %\else
-%% % \catcode`\!=\@@letter \catcode`\?=\@@letter
-%% %\fi
-%% \catcode`\&=\@@alignment
-%% \catcode`\#=\@@parameter \catcode`\$=\@@mathshift
-%% \catcode`\%=\@@comment \catcode`\\=\@@escape
-%% \catcode`\^=\@@superscript \catcode`\_=\@@subscript
-%% \catcode`\{=\@@begingroup \catcode`\}=\@@endgroup}
-%%
-%% \def\expspecialcatcodes%
-%% {\catcode`\noexpand/=\the\catcode`/%
-%% \catcode`\noexpand"=\the\catcode`"%
-%% \catcode`\noexpand<=\the\catcode`<%
-%% \catcode`\noexpand>=\the\catcode`>}
-%%
-%% \def\setspecialcatcodes%
-%% {\catcode`/=\@@other
-%% \catcode`"=\@@other
-%% \catcode`<=\@@other
-%% \catcode`>=\@@other}
\loadmarkfile{supp-fil}
diff --git a/Master/texmf-dist/tex/context/base/supp-fun.tex b/Master/texmf-dist/tex/context/base/supp-fun.tex
index 41cd8919917..b3b27032826 100644
--- a/Master/texmf-dist/tex/context/base/supp-fun.tex
+++ b/Master/texmf-dist/tex/context/base/supp-fun.tex
@@ -132,11 +132,12 @@
\fi
\def\DroppedCaps#1#2#3#4#5#6#7% does not yet handle accented chars
- {\convertargument #7\to\asciia
- \convertcommand \DroppedString\to\asciib
+ {\defconvertedargument\asciia{#7}%
+ \defconvertedcommand \asciib{\DroppedString}%
\ExpandBothAfter\doifinstringelse\asciia\asciib
{\noindentation
\dontleavehmode
+ \checkindentation % redo this one
%\ifhmode\hskip-\parindent\fi % sensitive for context mechanism
\keeplinestogether{#6}%
\setbox0\hbox{\definedfont[#2 at #3]#1{#7}\hskip#4}%
@@ -163,7 +164,9 @@
\globaldropcaps\chardef\DroppedStatus\plustwo
\globaldropcaps\hangindent\DroppedIndent
\globaldropcaps\hangafter-\DroppedLines
- \noindent
+% \noindent
+ \noindentation
+ \checkindentation % redo this one
\hskip-\DroppedIndent
\fi
\vbox{\forgetall\box0}%
@@ -257,7 +260,7 @@
\globaldropcaps\hangindent\DroppedIndent
\globaldropcaps\hangafter-\DroppedLines
\globaldropcaps\advance\hangafter \droppedlines
- \hskip-\parindent
+ \hskip-\parindent % brrr
\let\next\AutoDroppedNext
\else
\globaldropcaps\chardef\DroppedStatus\zerocount
diff --git a/Master/texmf-dist/tex/context/base/supp-lan.tex b/Master/texmf-dist/tex/context/base/supp-lan.tex
index 0daf134a631..ec9176b50dc 100644
--- a/Master/texmf-dist/tex/context/base/supp-lan.tex
+++ b/Master/texmf-dist/tex/context/base/supp-lan.tex
@@ -21,7 +21,7 @@
%D \blank}
%D
%D \gdef\test#1%
-%D {\convertargument#1\to\ascii\ascii&\hyphenatedword{#1}&#1\cr}
+%D {\defconvertedargument\ascii{#1}\ascii&\hyphenatedword{#1}&#1\cr}
%D One of \TEX's strong points in building paragraphs is the way
%D hyphenations are handled. Although for real good hyphenation
@@ -298,7 +298,7 @@
\beginTEX
\def\installdiscretionaries#1#2#3%
- {\convertargument#1\to\ascii
+ {\defconvertedargument\ascii{#1}%
\setevalue{\strippedcsname\mathmodediscretionary\string#1}{\ascii}%
\setvalue {\strippedcsname\textmodediscretionary\string#1}{#3}%
\catcode`#1=\@@active
@@ -713,7 +713,7 @@
\next}
\def\activedododotextmodediscretionary#1#2%
- {\convertargument#2\to\discretionarytoken
+ {\defconvertedargument\discretionarytoken{#2}%
\def\textmodediscretionary
{\getvalue{\strippedcsname\textmodediscretionary\string#1}}%
\ifx#1\nextnext % takes care of ||| and +++ and ......
@@ -729,20 +729,20 @@
% but an hbox blocks a possible \discretionary
\prewordbreak\textmodediscretionary\nextnext\allowbreak\postwordbreak
\egroup
- \else\convertargument=\to\next\ifx\next\discretionarytoken
+ \else\defconvertedargument\next=\ifx\next\discretionarytoken
\prewordbreak\textmodediscretionary
- \else\convertargument~\to\next\ifx\next\discretionarytoken
+ \else\defconvertedargument\next~\ifx\next\discretionarytoken
\prewordbreak\discretionary{-}{}{\thinspace}\postwordbreak
- \else\convertargument_\to\next\ifx\next\discretionarytoken
+ \else\defconvertedargument\next_\ifx\next\discretionarytoken
\prewordbreak\discretionary{\textmodediscretionary}
{\textmodediscretionary}{\textmodediscretionary}\prewordbreak
- \else\convertargument(\to\next\ifx\next\discretionarytoken
+ \else\defconvertedargument\next(\ifx\next\discretionarytoken
\ifdim\lastskip>\zeropoint\relax
(\prewordbreak
\else
\prewordbreak\discretionary{}{(-}{(}\prewordbreak
\fi
- \else\convertargument)\to\next\ifx\next\discretionarytoken
+ \else\defconvertedargument\next)\ifx\next\discretionarytoken
\ifx\nextnext\blankspace
\prewordbreak)\relax
\else\ifx\nextnext\space
@@ -750,13 +750,13 @@
\else
\prewordbreak\discretionary{-)}{}{)}\prewordbreak
\fi\fi
- \else\convertargument'\to\next\ifx\next\discretionarytoken
+ \else\defconvertedargument\next'\ifx\next\discretionarytoken
\prewordbreak\discretionary{-}{}{'}\postwordbreak
- \else\convertargument<\to\next\ifx\next\discretionarytoken
+ \else\defconvertedargument\next<\ifx\next\discretionarytoken
\beginofsubsentence\prewordbreak\beginofsubsentencespacing
- \else\convertargument>\to\next\ifx\next\discretionarytoken
+ \else\defconvertedargument\next>\ifx\next\discretionarytoken
\endofsubsentencespacing\prewordbreak\endofsubsentence
- \else\convertargument^\to\next\ifx\next\discretionarytoken
+ \else\defconvertedargument\next^\ifx\next\discretionarytoken
\prewordbreak\discretionary{\hbox{$|$}}{}{\hbox{$|$}}%
\allowbreak\postwordbreak
\else
@@ -778,7 +778,7 @@
\def\@tmd@{@@tmd@@}
\def\activedododotextmodediscretionary#1#2%
- {\convertargument#2\to\discretionarytoken
+ {\defconvertedargument\discretionarytoken{#2}%
\def\textmodediscretionary%
{\getvalue{\strippedcsname\textmodediscretionary\string#1}}%
\ifx\discretionarytoken\empty
@@ -814,7 +814,7 @@
\nextnextnext} % lookahead in commands
\def\definetextmodediscretionary #1
- {\convertargument#1\to\ascii
+ {\defconvertedargument\ascii{#1}%
\setvalue{\@tmd@\ascii}}
\definetextmodediscretionary {} % empty case, also handled in parser
@@ -913,7 +913,7 @@
%D we have \type {\nextnextnext}.
\unexpanded\def\directdiscretionary#1%
- {\convertargument#1\to\discretionarytoken
+ {\defconvertedargument\discretionarytoken{#1}%
\let\textmodediscretionary\compoundhyphen
\expandafter\ifx\csname\@tmd@\string#1\endcsname\relax
\prewordbreak
@@ -1298,7 +1298,7 @@
%D This would be better, but it spoils \type {\~} and so:
%D
%D \starttyping
-%D \convertargument#1\to\ascii
+%D \defconvertedargument\ascii{#1}
%D \expandafter\handletokens\ascii\with\scanurl
%D \stoptyping
@@ -1395,7 +1395,7 @@
%D {{\let~\lettertilde\useURL[dummy][#1]\goto{\url[dummy]}[URL(dummy)]}}
%D
%D \def\whateverurl#1%
-%D {\convertargument#1\to\ascii
+%D {\defconvertedargument\ascii{#1}%
%D \expanded{\useURL[dummy][\ascii]}\goto{\url[dummy]}[URL(dummy)]}
%D \stoptyping
diff --git a/Master/texmf-dist/tex/context/base/supp-mat.tex b/Master/texmf-dist/tex/context/base/supp-mat.tex
index f21ee6afae9..3c66566d329 100644
--- a/Master/texmf-dist/tex/context/base/supp-mat.tex
+++ b/Master/texmf-dist/tex/context/base/supp-mat.tex
@@ -48,7 +48,7 @@
\long\def\mathematics#1{\relax\ifmmode#1\else $#1$\fi} % lookahead bug reported by brooks
\long\def\displaymath#1{\relax\ifmmode#1\else$$#1$$\fi}
-\long\def\inlinemath #1{\relax\ifmmode#1\else $#1$\fi}
+\long\def\inlinemath #1{\dontleavehmode\relax\ifmmode#1\else $#1$\fi}
\let\stopmathmode\relax
@@ -77,7 +77,7 @@
%D An example of usage of the following can be found in the MathML module:
\long\def\displaymathematics#1{\relax\ifmmode#1\else\dostartformula{}#1\dostopformula\fi}
- \let\inlinemathematics \mathematics
+ \def\inlinemathematics {\dontleavehmode\mathematics}
\def\automathematics {\relax\ifhmode\@EA\inlinemathematics\else\@EA\displaymathematics\fi}
% better, esp when used in bTABLE ... eTABLE
@@ -189,4 +189,98 @@
\fi
\fi}
+%D \macros
+%D {cramped}
+%D
+%D \TEX provides no primitive to force in cramped math mode. Here is
+%D a macro that does so. It is based on a solution by Don Knuth (\userul
+%D {http://www.ctan.org/tex-archive/digests/tex-implementors/042}).
+
+\def\cramped
+ {\mathpalette\docramped}
+
+%D We force a cramped style by issuing a non||existing radical (box).
+%D After that we make sure the height is correct. (Comment taken from
+%D Morten Høgholm's mathtools package.) Macro suggested by AM and
+%D cleaned up a bit by HH.
+
+% original
+%
+% \def\docramped#1#2%
+% {\setbox\scratchbox\hbox
+% {\nulldelimiterspace\zeropoint
+% $\m@th#1\radical\zerocount{#2}$}%
+% \ifx#1\displaystyle
+% \scratchdimen\fontdimen8\textfont3
+% \advance\scratchdimen .25\fontdimen5\textfont2
+% \else
+% \scratchdimen1.25\fontdimen8
+% \ifx#1\textstyle\textfont
+% \else
+% \ifx#1\scriptstyle\scriptfont\else\scriptscriptfont\fi
+% \fi
+% 3
+% \fi
+% \advance\scratchdimen-\ht\scratchbox
+% \ht\scratchbox-\scratchdimen
+% \box\scratchbox}
+
+\def\docramped#1#2%
+ {\begingroup % added HH, made even more cramped
+ \setbox\scratchbox\hbox
+ {\nulldelimiterspace\zeropoint
+ $\m@th#1\radical\zerocount{#2}$}%
+ \ht\scratchbox-\dimexpr
+ \ifx#1\displaystyle
+ \fontdimen8\textfont3
+ +.25\fontdimen5\textfont2
+ \else
+ 1.25\fontdimen8
+ \ifx#1\textstyle
+ \textfont
+ \else\ifx#1\scriptstyle
+ \scriptfont
+ \else
+ \scriptscriptfont
+ \fi \fi
+ \plusthree
+ \fi
+ -\ht\scratchbox
+ \relax
+ \box\scratchbox
+ \endgroup}
+
+%D \macros
+%D {cramedllap, crampedrlap, crampedclap}
+%D
+%D In many cases, one wants to use the \tex {clap} macro in
+%D math mode while using subscripts. Normally, subscripts are
+%D in cramped mode, and these macros allow you to go to
+%D cramped mode. For example:
+%D
+%D \startbuffer
+%D \startformula
+%D \sum_{a^2 < b^2 < c^2} \quad
+%D \sum_{\clap{a^2 < b^2 < c^2}} \quad
+%D \sum_{\crampedclap{a^2 < b^2 < c^2}}
+%D \stopformula
+%D \stopbuffer
+%D
+%D \start
+%D \typebuffer
+%D \switchtobodyfont[24pt]
+%D \getbuffer
+%D \stop
+%D
+%D Notice that \type {\clap{\cramped ... }} would also work,
+%D but it requires \TEX\ to typeset it arguments 16 times.
+
+\def\docrampedllap#1#2{{}\dollap{\docramped #1{#2}}}
+\def\docrampedrlap#1#2{{}\dorlap{\docramped #1{#2}}}
+\def\docrampedclap#1#2{{}\doclap{\docramped #1{#2}}}
+
+\def\crampedllap{\mathpalette\docrampedllap}
+\def\crampedrlap{\mathpalette\docrampedrlap}
+\def\crampedclap{\mathpalette\docrampedclap}
+
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/supp-mps.tex b/Master/texmf-dist/tex/context/base/supp-mps.tex
index 22d59a064b8..6b3cea88c73 100644
--- a/Master/texmf-dist/tex/context/base/supp-mps.tex
+++ b/Master/texmf-dist/tex/context/base/supp-mps.tex
@@ -514,7 +514,7 @@
\newtoks\MPTEXgraphicchecks
\long\def\writecheckedMPgraphic#1%
- {\ifforceMPTEXgraphic
+ {\ifgrTEXgraphic
\global\MPTEXgraphictrue
\else
\global\MPTEXgraphicfalse
@@ -1498,6 +1498,7 @@
%D Now let's see if things work all right and show the example
%D files that are part of the \METAPOST\ distribution:
%D
+%D \setupexternalfigures[directory={../sample}]
%D \startlinecorrection
%D \setupalign[middle]
%D \leavevmode
@@ -1871,8 +1872,7 @@
\long\def\startMPclip#1#2\stopMPclip
{\blabelgroup
- \long\setgvalue{MPC:#1}%
- {\startMPgraphic#2\stopMPgraphic\dograbMPclippath}%
+ \long\setgvalue{MPC:#1}{\startMPgraphic#2\stopMPgraphic\dograbMPclippath}%
\elabelgroup}
\let\stopMPclip\relax
@@ -1899,6 +1899,22 @@
%D and the \type {%} triggers the grabber. Next we filter the
%D clipping path, or actually, the first path.
+% \bgroup
+% \catcode`\%=\@@active
+% \catcode`\/=\@@comment
+% \gdef\dograbMPclippath/
+% {\setbox\scratchbox=\hbox\bgroup/
+% \catcode`\%=\@@active
+% \obeylines\let\obeyedline\space
+% \def\do##1newpath##2closepath##3\od/
+% {\xdef\MPclippath{##2}\endinput}/
+% \def%##1%%EOF/
+% {\do##1newpathclosepath\od\endinput}/
+% \readfile{\MPgraphicfile.\the\currentMPgraphic}{}{}/
+% \deallocateMPslot\currentMPgraphic / new
+% \egroup}
+% \egroup
+
\bgroup
\catcode`\%=\@@active
\catcode`\/=\@@comment
@@ -1906,11 +1922,18 @@
{\setbox\scratchbox=\hbox\bgroup/
\catcode`\%=\@@active
\obeylines\let\obeyedline\space
- \def\do##1newpath##2closepath##3\od/
+ \def\do##1q n##2p W##3\od/
{\xdef\MPclippath{##2}\endinput}/
\def%##1%%EOF/
- {\do##1newpathclosepath\od\endinput}/
+ {\do##1q np W\od\endinput}/
\readfile{\MPgraphicfile.\the\currentMPgraphic}{}{}/
+ \ifx\MPclippath\empty
+ \def\do##1newpath##2closepath##3\od/
+ {\xdef\MPclippath{##2}\endinput}/
+ \def%##1%%EOF/
+ {\do##1newpathclosepath\od\endinput}/
+ \readfile{\MPgraphicfile.\the\currentMPgraphic}{}{}/
+ \fi
\deallocateMPslot\currentMPgraphic / new
\egroup}
\egroup
diff --git a/Master/texmf-dist/tex/context/base/supp-pat.tex b/Master/texmf-dist/tex/context/base/supp-pat.tex
index 15c69e2c2c6..6c11c1d9217 100644
--- a/Master/texmf-dist/tex/context/base/supp-pat.tex
+++ b/Master/texmf-dist/tex/context/base/supp-pat.tex
@@ -155,6 +155,7 @@
%D An example of usage in another format than \CONTEXT:
%D
+%D \starttyping
%D \bgroup
%D
%D \lccode"E4="E4 \definepatterntoken adiaeresis ^^e4
@@ -169,6 +170,7 @@
%D \input lang-de.hyp
%D
%D \egroup
+%D \stoptyping
%D
%D This is a minimal example for EC encoding, and of course
%D a couple of more language related settings need to take
diff --git a/Master/texmf-dist/tex/context/base/supp-tpi.tex b/Master/texmf-dist/tex/context/base/supp-tpi.tex
index 2feeeac188f..dc9d2e0e5ff 100644
--- a/Master/texmf-dist/tex/context/base/supp-tpi.tex
+++ b/Master/texmf-dist/tex/context/base/supp-tpi.tex
@@ -8,8 +8,8 @@
%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
%C
%C This module is part of the \CONTEXT\ macro||package and is
-%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
-%C details.
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
%D This modules implements the conversion of graphic \TPIC\
%D specials using \METAPOST.
@@ -19,6 +19,8 @@
%D \type{supp-spe} as well as the \METAPOST\ run||time support
%D implemented in \type{supp-mps}.
+\beginLUATEX \endinput \endLUATEX % to be sure, we don't want to load the following
+
\ifx\undefined\writestatus \input supp-mis \relax \fi
\ifx\undefined\mimmickspecials \input supp-spe \relax \fi
\ifx\undefined\MPgraphicbox \input supp-mps \relax \fi
@@ -128,10 +130,10 @@
%D variable {\it currentpicture}, around the $x$-axis.
\def\stopTPICspecials
- {\startMPdrawing
+ {\startMPdrawing
currentpicture:=currentpicture reflectedabout ((0,0),(4095,0));
\stopMPdrawing
- \MPdrawingdonetrue
+ \MPdrawingdonetrue
\setbox\MPgraphicbox\hbox
{\getMPdrawing}%
\setbox\MPgraphicbox\hbox to \zeropoint
@@ -193,7 +195,7 @@
{\startTPICspecials
\bgroup
\dimen0=#1pt \dimen0=.07227\dimen0
- \startMPdrawing
+ \startMPdrawing
pickup pencircle scaled \the\dimen0;
\stopMPdrawing
\egroup}
@@ -271,7 +273,7 @@
\ifTPICdraw
\def\TPICgrayscale{}%
\fi
- \startMPdrawing
+ \startMPdrawing
\ifTPICfill fill\fi\ifTPICdraw draw\fi\space
for i:=1 upto \the\TPICcounter-1:
p[i]\ifTPICcurve..\else--\fi
diff --git a/Master/texmf-dist/tex/context/base/symb-eur.tex b/Master/texmf-dist/tex/context/base/symb-eur.tex
index 515db6ae588..400e88ac5cd 100644
--- a/Master/texmf-dist/tex/context/base/symb-eur.tex
+++ b/Master/texmf-dist/tex/context/base/symb-eur.tex
@@ -37,9 +37,7 @@
\definesymbol [euro] [\getglyph{Euro}{\char160}]
\startencoding[default]
-
\definecharacter texteuro {\symbol[euro]}
-
\stopencoding
\unexpanded\def\euro{\doiftextelse\texteuro\texteuro{\symbol[euro]}}
diff --git a/Master/texmf-dist/tex/context/base/symb-glm.tex b/Master/texmf-dist/tex/context/base/symb-glm.tex
index b07a3a42669..0b01ca7dfdb 100644
--- a/Master/texmf-dist/tex/context/base/symb-glm.tex
+++ b/Master/texmf-dist/tex/context/base/symb-glm.tex
@@ -13,8 +13,9 @@
%D Watch the \type {x} before the local symbols.
-\loadmapfile [ec-public-lm.map]
+% \loadmapfile [ec-public-lm.map]
% \loadmapfile [ec-lm.map]
+\loadmapfile [lm-ec.map]
% this used to be:
%
diff --git a/Master/texmf-dist/tex/context/base/symb-was.tex b/Master/texmf-dist/tex/context/base/symb-was.tex
index ba261730618..d6c32486408 100644
--- a/Master/texmf-dist/tex/context/base/symb-was.tex
+++ b/Master/texmf-dist/tex/context/base/symb-was.tex
@@ -136,7 +136,7 @@
\definesymbol [RIGHTarrow] [\WaldiSymbol {17}]
\definesymbol [UParrow] [\WaldiSymbol {75}]
\definesymbol [DOWNarrow] [\WaldiSymbol {76}]
- \definesymbol [Box] [\WaldiSymbol {32}]
+ \definesymbol [Box] [\WaldiSymbol {50}]
\definesymbol [APLbox] [\WaldiSymbol{126}]
\definesymbol [XBox] [\WaldiSymbol {52}]
\definesymbol [Bowtie] [\WaldiSymbol {49}]
diff --git a/Master/texmf-dist/tex/context/base/syst-cat.mkiv b/Master/texmf-dist/tex/context/base/syst-cat.mkiv
new file mode 100644
index 00000000000..46ee0f394db
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/syst-cat.mkiv
@@ -0,0 +1,120 @@
+%D \module
+%D [ file=syst-cat,
+%D version=2006.09.18,
+%D title=\CONTEXT\ System Macros,
+%D subtitle=Catcode Handling,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\unprotect
+
+\def\newcatcodetable#1%
+ {\global\advance\cctdefcounter\plusone
+ \expandafter\xdef\csname @@ccn:\number\cctdefcounter\endcsname{\string#1}% logging
+ \global\mathchardef#1\cctdefcounter}
+
+\newcatcodetable \scratchcatcodetable \initcatcodetable\scratchcatcodetable
+
+\ifx\nilcatcodes \undefined \newcatcodetable \nilcatcodes \fi
+\ifx\texcatcodes \undefined \newcatcodetable \texcatcodes \fi
+\ifx\ctxcatcodes \undefined \newcatcodetable \ctxcatcodes \fi
+\ifx\notcatcodes \undefined \newcatcodetable \notcatcodes \fi
+\ifx\mthcatcodes \undefined \newcatcodetable \mthcatcodes \fi % brrr
+\ifx\vrbcatcodes \undefined \newcatcodetable \vrbcatcodes \fi
+\ifx\prtcatcodes \undefined \newcatcodetable \prtcatcodes \fi
+\ifx\xmlcatcodesn\undefined \newcatcodetable \xmlcatcodesn \fi % normal
+\ifx\xmlcatcodese\undefined \newcatcodetable \xmlcatcodese \fi % entitle
+\ifx\xmlcatcodesr\undefined \newcatcodetable \xmlcatcodesr \fi % reduce
+
+\newtoks \setdefaultcatcodes
+
+\setdefaultcatcodes
+ {\catcode`\\ 12
+ \catcode`\^^M 12
+ \catcode`\ 12
+ \catcode`\% 12
+ \catcode127 12 }
+
+\long\def\startcatcodetable#1#2\stopcatcodetable
+ {\bgroup
+ \catcodetable\scratchcatcodetable
+ \the\setdefaultcatcodes
+ #2%
+ \savecatcodetable#1\relax
+ \egroup}
+
+\newcatcodetable\dummycatcodes
+
+% \long\def\startextendcatcodetable#1#2\stopextendcatcodetable
+% {\bgroup
+% \catcodetable#1\relax
+% #2%
+% \savecatcodetable\dummycatcodes
+% \catcodetable\dummycatcodes
+% \savecatcodetable#1\relax
+% \egroup}
+
+\long\def\startextendcatcodetable#1#2\stopextendcatcodetable
+ {\bgroup
+ \catcodetable#1\relax
+ \globaldefs\plusone
+ #2%
+ \globaldefs\zerocount
+ \egroup}
+
+% ==
+%
+% \long\def\startextendcatcodetable#1#2\stopextendcatcodetable
+% {\bgroup
+% \scratchcounter\the\catcodetable
+% \catcodetable #1 #2
+% \catcodetable\scratchcounter
+% \egroup}
+
+\def\letcatcodecommand
+ {\afterassignment\letcatcodecommanda\cctcountera}
+
+\def\letcatcodecommanda
+ {\afterassignment\letcatcodecommandb\cctcounterb}
+
+% construct the definition in lua
+%
+% \def\letcatcodecommandb
+% {\scratchcounter\catcode\cctcounterb \catcode\cctcounterb=13
+% \directlua\CTXlua{tex.print(tex.texcatcodes,"\\xdef " .. string.char(\number\cctcounterb)
+% .. "{\\noexpand\\catcodecommand{\number\cctcounterb}}")}%
+% \catcode\cctcounterb\scratchcounter
+% \expandafter\let\csname cc:\number\cctcountera:\number\cctcounterb\endcsname}
+%
+% or less messy:
+%
+% \def\letcatcodecommandb
+% {\chardef\savedcctcode\catcode\cctcounterb
+% \catcode\cctcounterb=13
+% \expandafter\edef\directlua\CTXlua{tex.sprint(tex.texcatcodes,string.char(\number\cctcounterb))}%
+% {\noexpand\catcodecommand{\number\cctcounterb}}%
+% \catcode\cctcounterb\savedcctcode
+% \expandafter\let\csname cc:\number\cctcountera:\number\cctcounterb\endcsname}
+
+\let\currentcatcodetable\catcodetable
+
+\startruntimectxluacode
+ tex.nilcatcodes = \number\nilcatcodes ;
+ tex.texcatcodes = \number\texcatcodes ;
+ tex.ctxcatcodes = \number\ctxcatcodes ;
+ tex.notcatcodes = \number\notcatcodes ;
+ tex.mthcatcodes = \number\mthcatcodes ;
+ tex.vrbcatcodes = \number\vrbcatcodes ;
+ tex.prtcatcodes = \number\prtcatcodes ;
+ tex.xmlcatcodes = \number\xmlcatcodesn ;
+ tex.xmlcatcodesn = \number\xmlcatcodesn ; % normal
+ tex.xmlcatcodese = \number\xmlcatcodese ; % entitle
+ tex.xmlcatcodesr = \number\xmlcatcodesr ; % reduce
+\stopruntimectxluacode
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/syst-cat.tex b/Master/texmf-dist/tex/context/base/syst-cat.tex
index fb672c327d8..8994f207b24 100644
--- a/Master/texmf-dist/tex/context/base/syst-cat.tex
+++ b/Master/texmf-dist/tex/context/base/syst-cat.tex
@@ -116,9 +116,10 @@
\ifx\nilcatcodes \undefined \newcatcodetable \nilcatcodes \fi
\ifx\texcatcodes \undefined \newcatcodetable \texcatcodes \fi
\ifx\ctxcatcodes \undefined \newcatcodetable \ctxcatcodes \fi
+\ifx\notcatcodes \undefined \newcatcodetable \notcatcodes \fi
\ifx\vrbcatcodes \undefined \newcatcodetable \vrbcatcodes \fi
\ifx\prtcatcodes \undefined \newcatcodetable \prtcatcodes \fi
-\ifx\mthcatcodes \undefined \newcatcodetable \mthcatcodes \fi % math
+\ifx\mthcatcodes \undefined \newcatcodetable \mthcatcodes \fi % math, not used, too tricky
\ifx\xmlcatcodesn\undefined \newcatcodetable \xmlcatcodesn \fi % normal
\ifx\xmlcatcodese\undefined \newcatcodetable \xmlcatcodese \fi % entitle
\ifx\xmlcatcodesr\undefined \newcatcodetable \xmlcatcodesr \fi % reduce
@@ -178,6 +179,50 @@
\catcode`\| = 13
\stopcatcodetable
+\startcatcodetable \notcatcodes
+ \catcode`\^^I = 10 % ascii tab is a blank space
+ \catcode`\^^M = 5 % ascii return is end-line
+ \catcode`\^^L = 5 % ascii form-feed
+ \catcode`\ = 10 % ascii space is blank space
+ \catcode`\^^Z = 9 % ascii eof is ignored
+ \catcode`\~ = 12
+ \catcode`\# = 12 % probably too much, in principle
+ \catcode`\$ = 12 % nilcatcodes would be ok too
+ \catcode`\% = 12
+ \catcode`\^ = 12
+ \catcode`\& = 12
+ \catcode`\_ = 12
+ \catcode`\< = 12
+ \catcode`\> = 12
+ \catcode`\{ = 12
+ \catcode`\} = 12
+ \catcode`\" = 12
+ \catcode`\' = 12
+ \catcode`\/ = 12
+ \catcode`\\ = 12
+ \catcode`\| = 12
+\stopcatcodetable
+
+\startcatcodetable \mthcatcodes
+ \catcode`\^^I = 10
+ \catcode`\^^M = 5
+ %\catcode`\^^J = 10 % new
+ \catcode`\^^L = 5
+ \catcode`\ = 10
+ \catcode`\^^Z = 9
+ \catcode`\\ = 0
+ \catcode`\{ = 1
+ \catcode`\} = 2
+ \catcode`\$ = 3
+ \catcode`\& = 4
+ \catcode`\# = 6
+ \catcode`\^ = 7
+ \catcode`\_ = 8
+ \catcode`\% = 14
+ %\catcode`\~ = 13
+ %\catcode`\| = 13
+\stopcatcodetable
+
\startcatcodetable \prtcatcodes
\catcode`\^^I = 10
\catcode`\^^M = 5
@@ -390,7 +435,6 @@
%D \macros
%D {installactivecharacter}
-
\def\installactivecharacter#1 %
{\edef\temp{\detokenize{#1}}%
\cctcounterc\expandafter`\temp\relax % relax needed
@@ -408,14 +452,26 @@
\chardef\activehackcode=`~
-\def\defineactivecharacter #1 #2%
+% \def\defineactivecharacter #1 #2%
+% {\cctcounterc\uccode\activehackcode
+% \uccode\activehackcode\expandafter\doifnumberelse\expandafter{\string#1}\empty`#1%
+% \catcode\uccode\activehackcode13
+% \uppercase{\def\next{~}}%
+% \uccode\activehackcode\cctcounterc
+% \expandafter\expandafter\expandafter\def\expandafter\next\expandafter
+% {\expandafter\dohandleactivecharacter\next{#2}}}
+%
+% \defineactivecharacter "0EFFF {oeps} \utfchar{0xEFFF}
+
+\def\defineactivecharacter #1#2 #3%
{\cctcounterc\uccode\activehackcode
- \uccode\activehackcode\expandafter\doifnumberelse\expandafter{\string#1}\empty`#1%
+ \if#1"\uccode\activehackcode\expandafter\doifnumberelse\expandafter{\string#1#2}\empty #1#2\else
+ \uccode\activehackcode\expandafter\doifnumberelse\expandafter{\string#1#2}\empty`#1#2\fi
\catcode\uccode\activehackcode13
\uppercase{\def\next{~}}%
\uccode\activehackcode\cctcounterc
\expandafter\expandafter\expandafter\def\expandafter\next\expandafter
- {\expandafter\dohandleactivecharacter\next{#2}}}
+ {\expandafter\dohandleactivecharacter\next{#3}}}
\chardef\activecharactermode\plusone % overloading still backward compatible
diff --git a/Master/texmf-dist/tex/context/base/syst-con.lua b/Master/texmf-dist/tex/context/base/syst-con.lua
new file mode 100644
index 00000000000..519808e175d
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/syst-con.lua
@@ -0,0 +1,35 @@
+if not modules then modules = { } end modules ['syst-con'] = {
+ version = 1.001,
+ comment = "companion to syst-con.tex",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+converters = converters or { }
+
+--[[ldx--
+<p>For raw 8 bit characters, the offset is 0x110000 (bottom of plane 18) at
+the top of <l n='luatex'/>'s char range but outside the unicode range.</p>
+--ldx]]--
+
+do
+ local char, flush, format = unicode.utf8.char, tex.sprint, string.format
+
+ function converters.hexstringtonumber(n) flush(tonumber(n,16)) end
+ function converters.octstringtonumber(n) flush(tonumber(n, 8)) end
+ function converters.rawcharacter (n) flush(char(0x110000+n)) end
+
+ function converters.lchexnumber (n) flush(format("%x" ,n)) end
+ function converters.uchexnumber (n) flush(format("%X" ,n)) end
+ function converters.lchexnumbers (n) flush(format("%02x",n)) end
+ function converters.uchexnumbers (n) flush(format("%02X",n)) end
+ function converters.octnumber (n) flush(format("%03o",n)) end
+
+ function converters.lchexnumber (n) flush(("%x" ):format(n)) end
+ function converters.uchexnumber (n) flush(("%X" ):format(n)) end
+ function converters.lchexnumbers (n) flush(("%02x"):format(n)) end
+ function converters.uchexnumbers (n) flush(("%02X"):format(n)) end
+ function converters.octnumber (n) flush(("%03o"):format(n)) end
+
+end
diff --git a/Master/texmf-dist/tex/context/base/syst-con.mkiv b/Master/texmf-dist/tex/context/base/syst-con.mkiv
new file mode 100644
index 00000000000..2f84395f045
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/syst-con.mkiv
@@ -0,0 +1,27 @@
+%D \module
+%D [ file=syst-con,
+%D version=2006.09.16,
+%D title=\CONTEXT\ System Macros,
+%D subtitle=Conversions,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\registerctxluafile{syst-con}{1.001}
+
+\unprotect
+
+\def\lchexnumber #1{\ctxlua{converters.lchexnumber(\number#1)}}
+\def\uchexnumber #1{\ctxlua{converters.uchexnumber(\number#1)}}
+\def\lchexnumbers #1{\ctxlua{converters.lchexnumbers(\number#1)}}
+\def\uchexnumbers #1{\ctxlua{converters.uchexnumbers(\number#1)}}
+\def\octnumber #1{\ctxlua{converters.octnumber(\number#1)}}
+\def\hexstringtonumber#1{\ctxlua{converters.hexstringtonumber("#1")}}
+\def\octstringtonumber#1{\ctxlua{converters.octstringtonumber("#1")}}
+\def\rawcharacter #1{\ctxlua{converters.rawcharacter(\number#1)}}
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/syst-etx.tex b/Master/texmf-dist/tex/context/base/syst-etx.tex
index 093c3d17f88..13163a68178 100644
--- a/Master/texmf-dist/tex/context/base/syst-etx.tex
+++ b/Master/texmf-dist/tex/context/base/syst-etx.tex
@@ -209,6 +209,8 @@
\def\newmarks {\myalloc@8\marks \mathchardef\@@maxallocation}
\def\newlanguage{\myalloc@9\language\chardef \@@minallocation}
+\def\topofboxstack{\number\count24 }
+
%D Since in \CONTEXT\ we only have one math family left we
%D redefine \type {\newfam}.
@@ -228,7 +230,7 @@
%D are needed, but, for critical editions, we may need many
%D more, so:
-\chardef\@@insallocation = 32
+\chardef\@@insallocation = 32
%D However, there's a bug in \ETEX\ versions smaller than 2.2,
%D so we need to play safe:
diff --git a/Master/texmf-dist/tex/context/base/syst-ext.tex b/Master/texmf-dist/tex/context/base/syst-ext.tex
index bee6049bf24..7723d9deb6f 100644
--- a/Master/texmf-dist/tex/context/base/syst-ext.tex
+++ b/Master/texmf-dist/tex/context/base/syst-ext.tex
@@ -141,6 +141,35 @@
% \redefine\hans{hans}
% \define\hans#1[]#2#3{hans}
+%D The next variant fits nicely in the setups syntax:
+%D
+%D \starttyping
+%D \starttexdefinition bagger [#1] #2
+%D oeps
+%D #1
+%D oeps
+%D \stoptexdefinition
+%D
+%D \bagger [a] {b}
+%D \stoptyping
+
+\bgroup \obeylines
+
+\gdef\starttexdefinition%
+ {\bgroup%
+ \obeylines%
+ \dostarttexdefinition}
+
+\gdef\dostarttexdefinition #1 #2
+ {\catcode13=\@@ignore%
+ \dodostarttexdefinition{#1}{#2}}%
+
+\long\gdef\dodostarttexdefinition#1#2#3\stoptexdefinition%
+ {\egroup%
+ \long\setvalue{#1}#2{#3}}
+
+\egroup
+
%D \macros
%D {newcounter,
%D increment,decrement}
@@ -1205,10 +1234,6 @@
\def\convertedcommand
{\expandafter\doconvertargument\meaning}
-%\long\def\convertargument#1\to#2%
-% {\long\def\convertedargument{#1}%
-% \dodoglobal\edef#2{\convertedcommand\convertedargument}}
-
\long\def\convertargument#1\to#2%
{\long\def#2{#1}% saves a restore
\dodoglobal\edef#2{\convertedcommand#2}}
@@ -1216,20 +1241,29 @@
\long\def\convertcommand#1\to#2%
{\dodoglobal\edef#2{\convertedcommand#1}}
+% no dodoglobal !
+
\long\def\defconvertedargument#1#2% less sensitive for \to
{\long\def#1{#2}% saves a restore
- \dodoglobal\edef#1{\convertedcommand#1}}
+ \edef#1{\convertedcommand#1}}
\long\def\defconvertedcommand#1#2% less sensitive for \to
- {\dodoglobal\edef#1{\convertedcommand#2}}
+ {\edef#1{\convertedcommand#2}}
+
+\long\def\gdefconvertedargument#1#2% less sensitive for \to
+ {\long\gdef#1{#2}% saves a restore
+ \xdef#1{\convertedcommand#1}}
+
+\long\def\gdefconvertedcommand#1#2% less sensitive for \to
+ {\xdef#1{\convertedcommand#2}}
\endTEX
\def\convertvalue#1\to
{\expandafter\convertcommand\csname#1\endcsname\to}
-\def\defconvertvalue#1#2% less sensitive for \to
- {\@EA\defconvertcommand\@EA#1\csname#2\endcsname}
+\def\defconvertedvalue#1#2% less sensitive for \to
+ {\@EA\defconvertedcommand\@EA#1\csname#2\endcsname}
%D \macros
%D {doifassignmentelse}
@@ -1287,22 +1321,21 @@
%D something I found out when primitives like \type
%D {\jobname} were fed (or something undefined).
-\beginETEX \detokenize
+% command variant: one level expansion !
-\long\def\convertargument#1\to#2%
- {\dodoglobal\edef#2{\detokenize{#1}}}
-
-% \long\def\convertcommand#1\to#2%
-% {\@EA\dodoglobal\@EA\edef\@EA#2\@EA{\@EA\detokenize\@EA{#1}}}
-
-\long\def\convertcommand#1\to#2%
- {\dodoglobal\edef#2{\@EA\detokenize\@EA{#1}}} % hm, only second is also ok
+\beginETEX \detokenize
-\long\def\defconvertedargument#1#2% less sensitive for \to
- {\dodoglobal\edef#1{\detokenize{#2}}}
+\long\def\convertargument#1\to#2{\dodoglobal\edef#2{\detokenize{#1}}}
+\long\def\convertcommand #1\to#2{\dodoglobal\edef#2{\@EA\detokenize\@EA{#1}}} % hm, only second is also ok
-\long\def\defconvertedcommand#1#2% less sensitive for \to
- {\dodoglobal\edef#1{\detokenize\@EA{#2}}}
+\long\def\defconvertedargument #1#2{\edef#1{\detokenize {#2}}}
+\long\def\defconvertedcommand #1#2{\edef#1{\detokenize\@EA{#2}}}
+\long\def\edefconvertedargument#1#2{\edef#1{#2}%
+ \edef#1{\detokenize\@EA{#1}}}
+\long\def\gdefconvertedargument#1#2{\xdef#1{\detokenize {#2}}}
+\long\def\gdefconvertedcommand #1#2{\xdef#1{\detokenize\@EA{#2}}}
+\long\def\xdefconvertedargument#1#2{\xdef#1{#2}%
+ \xdef#1{\detokenize\@EA{#1}}}
\endETEX
@@ -1324,35 +1357,6 @@
%D The \type{-}, the delimiter \type{\\\\} and the the second
%D argument are completely redundant.
-% %D As said, the \TEX\ alternative fails on expanding primitives,
-% %D like in:
-% %D
-% %D \starttyping
-% %D \convertcommand\someprimitive\to\ascii
-% %D \stoptyping
-% %D
-% %D Because these primitives convert to themselves, we can use
-% %D the backslash as a signal to treat them different. At the
-% %D cost of slightly more overhead we can therefore define a
-% %D more robust alternative. The catcode trickery is needed to
-% %D get the backslash into the test as character (and not as
-% %D escape, letter or whatever code else).
-% %
-% % does not work:
-% %
-% % \beginTEX
-% %
-% % \let\dodoconvertargument\doconvertargument
-% %
-% % \bgroup
-% % \catcode`\*=\@@escape
-% % \catcode`\\=\@@other
-% % *gdef*doconvertargument#1%
-% % {*ifx#1\*else*expandafter*dodoconvertargument*fi#1}
-% % *egroup
-% %
-% % \endTEX
-
%D \macros
%D {showvalue,showargument}
%D
@@ -1373,7 +1377,7 @@
\endETEX
\long\def\showargument#1%
- {\convertargument#1\to\ascii\show\ascii}
+ {\defconvertedargument\ascii{#1}\ascii}
%D \macros
%D {doifmeaningelse}
@@ -1513,8 +1517,8 @@
\beginTEX
\def\ConvertToConstant#1#2#3%
- {\expandafter\convertargument\expandafter{#2}\to\!!stringa
- \expandafter\convertargument\expandafter{#3}\to\!!stringb
+ {\expandafter\defconvertedargument\expandafter\!!stringa\expandafter{#2}%
+ \expandafter\defconvertedargument\expandafter\!!stringb\expandafter{#3}%
#1{\!!stringa}{\!!stringb}}
\endTEX
@@ -3647,16 +3651,25 @@
\beginETEX
+% \def\executeifdefined#1% #2 / never change this one again
+% {\ifcsname#1\endcsname
+% \expandafter\firstoftwoarguments
+% \else
+% \expandafter\secondoftwoarguments
+% \fi
+% {\csname#1\endcsname}}
+
\def\executeifdefined#1% #2 / never change this one again
{\ifcsname#1\endcsname
- \expandafter\firstoftwoarguments
+ \csname#1\expandafter\expandafter\expandafter\endcsname\expandafter\gobbleoneargument
\else
- \expandafter\secondoftwoarguments
- \fi
- {\csname#1\endcsname}}
+ \expandafter\firstofoneargument
+ \fi}
\endETEX
+% \letvalue{f }\firstofoneargument \def\executeifdefined#1{\csname\ifcsname#1\endcsname#1\else f \fi\endcsname}
+
%D This one also has the advantage that it is fully
%D expandable and that it can be used after an assignment.
@@ -3842,19 +3855,45 @@
%D Therefore we smuggle a \type {\relax} in front of the
%D argument, which we remove afterwards.
+% \def\doprocessseparatedlist#1]#2[#3]#4%
+% {\def\dodoprocessseparatedlist##1##2#3%
+% {\if]##1%
+% \let\dodoprocessseparatedlist\relax
+% \else\if]##2%
+% \let\dodoprocessseparatedlist\relax
+% \else\ifx\blankspace##2%
+% #4{##1}%
+% \else
+% #4{##1##2}%
+% \fi\fi\fi
+% \dodoprocessseparatedlist}%
+% \@EA\dodoprocessseparatedlist\gobbleoneargument#1#3]#3}
+
+% testcase Vit Zyka:
+%
+% \def\Do#1{(#1)}
+% 1\processseparatedlist[{aap noot}] [ ]\Do \par
+% 2\processseparatedlist[{aap} {noot}][ ]\Do \par
+% 3\processseparatedlist[aap {noot}] [ ]\Do \par
+% 4\processseparatedlist[aap noot] [ ]\Do \par
+% 5\processseparatedlist[aap;noot;a noot;noot a; noot a noot][;]\Do \par
+% 6\processseparatedlist[][;]\Do \par
+% 7\processseparatedlist[;][;]\Do \par
+
\def\doprocessseparatedlist#1]#2[#3]#4%
- {\def\dodoprocessseparatedlist##1##2#3%
- {\if]##1%
- \let\dodoprocessseparatedlist\relax
- \else\if]##2%
- \let\dodoprocessseparatedlist\relax
- \else\ifx\blankspace##2%
- #4{##1}%
- \else
- #4{##1##2}%
- \fi\fi\fi
- \dodoprocessseparatedlist}%
- \@EA\dodoprocessseparatedlist\gobbleoneargument#1#3]#3}
+ {\def\dodoprocessseparatedlist##1##2#3%
+ {\def\!!stringa{##2}% suggested by VZ
+ \if]##1%
+ \let\dodoprocessseparatedlist\relax
+ \else\ifx\blankspace\!!stringa
+ #4{##1}%
+ \else\if]##2%
+ \let\dodoprocessseparatedlist\relax
+ \else
+ #4{##1##2}%
+ \fi\fi\fi
+ \dodoprocessseparatedlist}%
+ \@EA\dodoprocessseparatedlist\gobbleoneargument#1#3]#3}
\def\processseparatedlist[%
{\doprocessseparatedlist\relax}
@@ -4436,11 +4475,11 @@
\def\dotwodigitrounding#1.#2#3#4\relax{\ifx#2*#1\else#1.#2#3\fi}
\def\integerrounding#1%
- {\@EA\@EA\@EA\dointegerrounding \@EA\WITHOUTPT\the\dimexpr#1\points+32768sp\relax.\relax}
+ {\@EA\@EA\@EA\dointegerrounding \@EA\WITHOUTPT\the\dimexpr#1\points+.5\points\relax.\relax}
\def\onedigitrounding#1%
- {\@EA\@EA\@EA\doonedigitrounding\@EA\WITHOUTPT\the\dimexpr#1\points+32768sp\relax00.*0\relax}
+ {\@EA\@EA\@EA\doonedigitrounding\@EA\WITHOUTPT\the\dimexpr#1\points+.05\points\relax00.*0\relax}
\def\twodigitrounding#1%
- {\@EA\@EA\@EA\dotwodigitrounding\@EA\WITHOUTPT\the\dimexpr#1\points+32768sp\relax000.*00\relax}
+ {\@EA\@EA\@EA\dotwodigitrounding\@EA\WITHOUTPT\the\dimexpr#1\points+.005\points\relax000.*00\relax}
\endETEX
diff --git a/Master/texmf-dist/tex/context/base/syst-gen.tex b/Master/texmf-dist/tex/context/base/syst-gen.tex
index 94a622c76c8..626c1445bba 100644
--- a/Master/texmf-dist/tex/context/base/syst-gen.tex
+++ b/Master/texmf-dist/tex/context/base/syst-gen.tex
@@ -168,7 +168,7 @@
%D nesting deeper than one level, the system shows the
%D protection level.
-\newcount\protectionlevel
+\ifx\protectionlevel\undefined \newcount\protectionlevel \fi
\ifx\protect\undefined
\def\protect{\writestatus{protection}{too much protection}}
@@ -365,6 +365,8 @@
\newcount \zerocount
\newcount \minusone
\minusone = -1
+\newcount \minustwo
+ \minustwo = -2
\chardef \plusone = 1
\chardef \plustwo = 2
@@ -2237,8 +2239,8 @@
\def\unexpandedaction#1>{}
\def\noexpandedaction#1#2%
- {\def\convertedargument{#2}%
- \@EA\edef\@EA#1\@EA{\@EA\unexpandedaction\meaning\convertedargument}}
+ {\def\@@convertedargument{#2}%
+ \@EA\edef\@EA#1\@EA{\@EA\unexpandedaction\meaning\@@convertedargument}}
\def\dontexpandactions%
{\let\expandedaction\noexpandedaction}
diff --git a/Master/texmf-dist/tex/context/base/syst-mtx.tex b/Master/texmf-dist/tex/context/base/syst-mtx.tex
index 4e5e2ef26a4..e2a978671a0 100644
--- a/Master/texmf-dist/tex/context/base/syst-mtx.tex
+++ b/Master/texmf-dist/tex/context/base/syst-mtx.tex
@@ -43,12 +43,14 @@
\def\newfam#1{\chardef#1=15 }
+\def\topofboxstack{\number\count24 }
+
\count18=1
\mathchardef\@@minallocation = 16
\mathchardef\@@medallocation = 256
\mathchardef\@@maxallocation = 32767
-\chardef \@@insallocation = 32
+\chardef \@@insallocation = 128 % was 32, but if we want continuous ranges (mplib) we need to pass 256 soon 32
\def\myalloc@#1#2#3#4#5%
{\global\advance\count1#1by\@ne
diff --git a/Master/texmf-dist/tex/context/base/syst-new.tex b/Master/texmf-dist/tex/context/base/syst-new.tex
index dca897ac0cc..5d98977ec9b 100644
--- a/Master/texmf-dist/tex/context/base/syst-new.tex
+++ b/Master/texmf-dist/tex/context/base/syst-new.tex
@@ -50,7 +50,7 @@
\dounspaced}
\def\unspaceargument#1\to#2%
- {\convertargument#1\to#2%
+ {\defconvertedargument#2{#1}%
\@EA\edef\@EA#2\@EA{\@EA\unspaced\@EA{#2}}}
\def\unspaceafter#1#2%
@@ -65,6 +65,21 @@
\def\unspaceafter#1#2%
{\edef\ascii{\dounspaced#2\end}\@EA#1\@EA{\ascii}}
+
+% sometimes handy:
+
+\def\doifhasspaceelse#1%
+ {\edef\!!stringa{#1}%
+ \expanded{\dodoifhasspaceelse#1\space}\empty\relax}
+
+\def\dodoifhasspaceelse#1 #2#3\relax % \space\empty\relax
+ {\ifx\!!stringa\space
+ \@EA\firstoftwoarguments
+ \else\ifx#2\empty
+ \@EAEAEA\secondoftwoarguments
+ \else
+ \@EAEAEA\firstoftwoarguments
+ \fi\fi}
% this will replace loadfile once and alike !!! todo
@@ -535,9 +550,9 @@
%D new stuff :
\def\partialexpanded#1%
- {\let\notexpanded\noexpand
+ {\let\@@notexpanded\noexpand
\long\xdef\@@expanded{\noexpand#1}%
- \let\notexpanded\empty
+ \let\@@notexpanded\empty
\@@expanded}
% for Simon ; watch how we make them fully expandable (i.e.
@@ -623,7 +638,7 @@
{\ifx\compressedlist\empty\else\compressedlist,\fi
{\the\!!counta}{\ifnum\!!countb>\!!counta\the\!!countb\fi}}}
-%D \def\test#1{{\tttf#1->\compresscommalistnrs[#1]\convertcommand\compressedlist\to\ascii\ascii}}
+%D \def\test#1{{\tttf#1->\compresscommalistnrs[#1]\defconvertedcommand\ascii\compressedlist\ascii}}
%D \startlines
%D \test{}
%D \test{1}
@@ -657,7 +672,7 @@
\fi
\fi}
-%D \def\test#1{{\tttf#1->\compresscommalist[#1]\convertcommand\compressedlist\to\ascii\ascii}}
+%D \def\test#1{{\tttf#1->\compresscommalist[#1]\defconvertedcommand\ascii\compressedlist\ascii}}
%D \startlines
%D \test{}
%D \test{1}
@@ -684,7 +699,7 @@
\def\reversecommacommand[#1]%
{\expanded{\reversecommalist[#1]}}
-%D \def\test#1{{\tttf#1->\reversecommalist[#1]\convertcommand\reversedlist\to\ascii\ascii}}
+%D \def\test#1{{\tttf#1->\reversecommalist[#1]\defconvertedcommand\ascii\reversedlist\ascii}}
%D \startlines
%D \test{}
%D \test{1}
@@ -708,7 +723,7 @@
\def\stripstring#1% #1 is \cs
{\bgroup
- \convertcommand#1\to\ascii
+ \defconvertedcommand\ascii{#1}%
\global\let\globalascii\empty
\donefalse
\expandafter\handletokens\ascii\with\dostripstring
diff --git a/Master/texmf-dist/tex/context/base/syst-omg.tex b/Master/texmf-dist/tex/context/base/syst-omg.tex
index 1bedb195b82..01f140dac9f 100644
--- a/Master/texmf-dist/tex/context/base/syst-omg.tex
+++ b/Master/texmf-dist/tex/context/base/syst-omg.tex
@@ -31,6 +31,8 @@
\def\newfam#1{\chardef#1=15 }
+\def\topofboxstack{\number\count24 }
+
\count18=1
\mathchardef\@@minallocation = 16
@@ -72,14 +74,6 @@
\errmessage{This version of Omega is way to buggy (+ \string\SGMLFontEntity\space mess)!}
-% \let\normalSGMLFontEntity\SGMLFontEntity
-%
-% \def\SGMLFontEntity#1#2#3#4#5%
-% {\convertargument#3\to\ascii
-% \expanded{\doifinstringelse{\letterbackslash}{\ascii}}
-% {\normalSGMLFontEntity{#1}{#2}{#3}{#4}{#5}}
-% {\normalSGMLFontEntity{#1}{#2}{\string#3}{#4}{#5}}}
-
\fi
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/syst-pdt.tex b/Master/texmf-dist/tex/context/base/syst-pdt.tex
index 079c664ef65..c8f2555f34e 100644
--- a/Master/texmf-dist/tex/context/base/syst-pdt.tex
+++ b/Master/texmf-dist/tex/context/base/syst-pdt.tex
@@ -27,8 +27,8 @@
\bindprimitive setrandomseed pdfsetrandomseed
\bindprimitive uniformdeviate pdfuniformdeviate
-\bindprimitive resettimer pdfresettimer
-\bindprimitive elapsedtime pdfelapsedtime
+\bindprimitive resettimer pdfresettimer
+\bindprimitive elapsedtime pdfelapsedtime
% new per 1.40
@@ -44,6 +44,7 @@
{\pdfcompresslevel \zerocount
\pdfobjcompresslevel\zerocount}
+\let\normalquitvmode \quitvmode
\let\normalnoligatures\noligatures
\protect
diff --git a/Master/texmf-dist/tex/context/base/syst-prm.tex b/Master/texmf-dist/tex/context/base/syst-prm.tex
index e54c2e20cb1..dc259dff700 100644
--- a/Master/texmf-dist/tex/context/base/syst-prm.tex
+++ b/Master/texmf-dist/tex/context/base/syst-prm.tex
@@ -102,19 +102,51 @@
\ifx\directlua\undefined
- \long\gdef\beginMETATEX#1\endMETATEX%
+ \long\gdef\beginLUATEX#1\endLUATEX%
{}
\else
- \gdef\beginMETATEX%
- {\bgroup\obeylines\dobeginMETATEX}
+ \gdef\beginLUATEX%
+ {\bgroup\obeylines\dobeginLUATEX}
- \gdef\dobeginMETATEX#1
+ \gdef\dobeginLUATEX#1
{\egroup\immediate\write16%
- {system (METATEX) : [line \the\inputlineno] \detokenize{#1}}}
+ {system (LUATEX) : [line \the\inputlineno] \detokenize{#1}}}
- \global\let\endMETATEX\relax
+ \global\let\endLUATEX\relax
+
+\fi
+
+% traditional tex's vs de utf tex's
+
+\ifx\XeTeXversion\undefined \ifx\directlua\undefined
+
+ \gdef\beginOLDTEX%
+ {\bgroup\obeylines\dobeginOLDTEX}
+
+ \gdef\dobeginOLDTEX#1
+ {\egroup\immediate\write16%
+ {system (OLDTEX) : [line \the\inputlineno] \detokenize{#1}}}
+
+ \global\let\endOLDTEX\relax
+
+ \long\gdef\beginNEWTEX#1\endNEWTEX%
+ {}
+
+\fi \fi \ifx\beginOLDTEX\undefined
+
+ \long\gdef\beginOLDTEX#1\endOLDTEX%
+ {}
+
+ \gdef\beginNEWTEX%
+ {\bgroup\obeylines\dobeginNEWTEX}
+
+ \gdef\dobeginNEWTEX#1
+ {\egroup\immediate\write16%
+ {system (NEWTEX) : [line \the\inputlineno] \detokenize{#1}}}
+
+ \global\let\endNEWTEX\relax
\fi
@@ -122,7 +154,7 @@
%D Let's get rid of this one:
-% \def\wlog#1{}
+\def\wlog#1{}
%D Just for tracing purposes we set:
diff --git a/Master/texmf-dist/tex/context/base/syst-rtp.mkiv b/Master/texmf-dist/tex/context/base/syst-rtp.mkiv
new file mode 100644
index 00000000000..36ce8edb18a
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/syst-rtp.mkiv
@@ -0,0 +1,18 @@
+%D \module
+%D [ file=syst-rtp,
+%D version=2006.10.13,
+%D title=\CONTEXT\ Core Macros,
+%D subtitle=Run Time Processes,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\unprotect
+
+\def\executesystemcommand#1{\ctxlua{os.execute([[#1]])}}
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/syst-str.mkiv b/Master/texmf-dist/tex/context/base/syst-str.mkiv
new file mode 100644
index 00000000000..6d0f0565e9b
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/syst-str.mkiv
@@ -0,0 +1,27 @@
+%D \module
+%D [ file=syst-str,
+%D version=2006.09.18,
+%D title=\CONTEXT\ System Macros,
+%D subtitle=String Processing,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\unprotect
+
+% todo: escape special chars in expr (\luaescapeexpression)
+
+\def\replacecharacters#1#2#3% macro characters replacement
+ {\dodoglobal\edef#1{\ctxlua{tex.sprint((string.gsub("#1",string.esc(#2),"#3")))}}}
+
+\def\separatestring#1\to#2%
+ {\dodoglobal\def#2{\ctxlua{tex.sprint(string.gsub(("#1","\letterpercent s+",","))})}}
+
+\def\unspacefilename#1\to#2%
+ {\dodoglobal\def#2{\ctxlua{tex.sprint(string.gsub(("#1","\letterpercent s+","-")))}}}
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/syst-xtx.tex b/Master/texmf-dist/tex/context/base/syst-xtx.tex
index 83a28d36d88..a10173117e4 100644
--- a/Master/texmf-dist/tex/context/base/syst-xtx.tex
+++ b/Master/texmf-dist/tex/context/base/syst-xtx.tex
@@ -22,8 +22,12 @@
% patch needed for turkish
-\setcclcuc 201C 201C 201C
-\setcclcuc 201D 201D 201D
+\setcclcucx 201C 201C 201C
+\setcclcucx 201D 201D 201D
+
+% patch needed for greek
+
+% \setcclcucx 1FFD 1FFD 1FFD
\ifx\XeTeXuseglyphmetrics\undefined \else
\XeTeXuseglyphmetrics=1
diff --git a/Master/texmf-dist/tex/context/base/thrd-pic.tex b/Master/texmf-dist/tex/context/base/thrd-pic.tex
index 3c6375cbd73..3c25d8a81d1 100644
--- a/Master/texmf-dist/tex/context/base/thrd-pic.tex
+++ b/Master/texmf-dist/tex/context/base/thrd-pic.tex
@@ -1339,7 +1339,7 @@ should have been specified.} %.A.................
\def\plot{%
\!ifnextchar"{\!plotfromfile}{\!drawcurve}}
\def\!plotfromfile"#1"{%
- \expandafter\!drawcurve \input #1 /}
+ \expandafter\!drawcurve \normalinput #1 /}
% Command to set piecewise quadratic mode
% See Subsections 5.1, 7.3, and 7.4 of the manual.
@@ -2344,7 +2344,7 @@ should have been specified.} %.A.................
\!setputobject{#1}{#2}%
\!ifnextchar"{\!putfromfile}{\!multiput}}
\def\!putfromfile"#1"{%
- \expandafter\!multiput \input #1 /}
+ \expandafter\!multiput \normalinput #1 /}
\def\!multiput{%
\futurelet\!nextchar\!!multiput}
\def\!!multiput{%
@@ -2634,7 +2634,7 @@ should have been specified.} %.A.................
% ** on "FILE_NAME"
% ** See Subsection 5.6 of the manual.
\def\replot"#1" {%
- \expandafter\!replot\input #1 /}
+ \expandafter\!replot\normalinput #1 /}
\def\!replot#1,#2. {%
\!dimenA=#1sp
\kern\!dimenA\raise#2sp\copy\!plotsymbol\kern-\!dimenA
diff --git a/Master/texmf-dist/tex/context/base/thrd-tab.tex b/Master/texmf-dist/tex/context/base/thrd-tab.tex
index 7189d6a190e..8ca90665e66 100644
--- a/Master/texmf-dist/tex/context/base/thrd-tab.tex
+++ b/Master/texmf-dist/tex/context/base/thrd-tab.tex
@@ -7,10 +7,16 @@
% splitting over pages, color and consistent spacing.
% We've patched this file for catcode ! because in luatex we use
-% catcode tables and using unprotect/protect is cleaner.
+% catcode tables and using unprotect/protect is cleaner. Late
+% 2007 we also decided no longer to treat quotes and bars the
+% TaBLe way and instead of messy pushing and popping of catcodes
+% we commented a couple of lines here. We just assume that the
+% template has no active bar and quote. Inside tables we now
+% have the regular meaning of active bars in ConTeXt. More
+% drastic extensions and patched can be found in core-tab.tex.
% TABLE 1.0
-% Copyright Michael J. Wichura August 1988
+% Copyright Michael J. Wichura August 1988 (patched by Hans Hagen)
% The TABLE macros are divided into sections, roughly according to
% function:
@@ -109,7 +115,6 @@
% \| t
% | t
% ~ t
-%
\unprotect
@@ -132,8 +137,6 @@
% To continue with a "bottom-up" approach, read next Sections k,
% f, and t. (Top-downers should reverse the order.) The other
% Sections can be looked at as the need arises.
-
-
% *********************************************************************
% SECTION A: ALLOCATION
@@ -598,8 +601,8 @@
% BEGIN FORMAT
\def\BeginFormat{%
- \catcode`\|=12 % Inhibit expansion if | immediately follows a <number>
- \catcode`\"=12 % read by \getvalue.
+ %catcode`\|=12 % Inhibit expansion if | immediately follows a <number>
+ %catcode`\"=12 % read by \getvalue.
\!taPreamble={}%
\!taColumnNumber=0
\skip0 =\InterColumnSpaceUnit
@@ -863,8 +866,8 @@
\!thMessage{Row Of Widths="\!tfRowOfWidths"}
\fi
\!taBeginFormatfalse % Intercepts "|", tabskips, and "."
- \catcode`\|=13
- \catcode`\"=13
+ %\catcode`\|=13
+ %\catcode`\"=13
\!ttDoHalign}
% ERROR MESSAGE FOR NOT ENOUGH "|"'s
@@ -877,14 +880,17 @@
% REFORMAT [<key letters>]{<text>}: Formats <text> according to
% <key letters>. Used to override the template for a column,
% or columns when used after \use.
-\def\ReFormat[{%
+\def\ReFormat[#1]{%
\omit
\!taDataColumnTemplate{##}%
\!taLeftGlue{}%
\!taRightGlue{}%
- \catcode`\|=12 % Inhibit expansion if | immediately follows a <number>
- \catcode`\"=12 % read by \getvalue. Actually, '|' and '"' shouldn't
- \ReadFormatKeys}% appear in a \ReFormat cmd; this is here as a safeguard.
+ %\catcode`\|=12 % Inhibit expansion if | immediately follows a <number>
+ %\catcode`\"=12 % read by \getvalue. Actually, '|' and '"' shouldn't
+ \begingroup
+ \@@useotherbar
+ \@@useotherquote
+ \expanded{\endgroup\noexpand\ReadFormatKeys#1]}}% appear in a \ReFormat cmd; this is here as a safeguard.
% END REFORMAT: Invoked by the key "]"
\def\!tfEndReFormat{%
@@ -894,8 +900,8 @@
\hbox{\the\!taDataColumnTemplate}% White lie
\the\!taRightGlue}
\fi
- \catcode`\|=13
- \catcode`\"=13
+ %\catcode`\|=13
+ %\catcode`\"=13
\!tfReFormat}
\def\!tfReFormat#1{%
@@ -1654,31 +1660,58 @@
\fi}
% INITIALIZE TABLE
+% \bgroup
+% \catcode`\|=13
+% \catcode`\"=13
+% \catcode`\~=13
+% \gdef\!ttInitializeTable{%
+% \let\!ttTie=~ % Meanings of ~ and \- are
+% \let\!ttDH=\- % restored by \BeginTableParBox
+% \catcode`\|=\active
+% \catcode`\"=\active
+% \catcode`\~=\active
+% \def |{\unskip\!ttRightGlue&&}% Use rule-column template
+% \def\|{\unskip\!ttRightGlue&\omit\!ttAlternateVrule}%
+% % Override rule-column template
+% \def"{\unskip\!ttRightGlue&\omit&}% Omit rule-column template
+% \def~{\kern .5em}% ~ now has the width of a digit
+% \def\\{\!ttEndOfRow}%
+% \def\-{\!ttShortHrule}%
+% \def\={\!ttLongHrule}%
+% \def\_{\!ttFullHrule}%
+% \def\Left##1{##1\hfill\null}% \null prevents \unskip from
+% \def\Center##1{\hfill##1\hfill\null}% killing the \hfill
+% \def\Right##1{\hfill##1}%
+% \def\use{\!ttuse}%
+% \def\Use{\!ttUse}%
+% \the\EveryTable}
+% \egroup
+
\bgroup
- \catcode`\|=13
- \catcode`\"=13
+ %catcode`\|=13
+ %catcode`\"=13
\catcode`\~=13
\gdef\!ttInitializeTable{%
- \let\!ttTie=~ % Meanings of ~ and \- are
- \let\!ttDH=\- % restored by \BeginTableParBox
- \catcode`\|=\active
- \catcode`\"=\active
+ \let\!ttTie=~ %
+ \let\!ttDH=\- %
+ %catcode`\|=\active
+ %catcode`\"=\active
\catcode`\~=\active
- \def |{\unskip\!ttRightGlue&&}% Use rule-column template
- \def\|{\unskip\!ttRightGlue&\omit\!ttAlternateVrule}%
- % Override rule-column template
- \def"{\unskip\!ttRightGlue&\omit&}% Omit rule-column template
- \def~{\kern .5em}% ~ now has the width of a digit
- \def\\{\!ttEndOfRow}%
- \def\-{\!ttShortHrule}%
- \def\={\!ttLongHrule}%
- \def\_{\!ttFullHrule}%
- \def\Left##1{##1\hfill\null}% \null prevents \unskip from
- \def\Center##1{\hfill##1\hfill\null}% killing the \hfill
- \def\Right##1{\hfill##1}%
+ %def |{\unskip\!ttRightGlue&&}%
+ %def\|{\unskip\!ttRightGlue&\omit\!ttAlternateVrule}%
+ %def"{\unskip\!ttRightGlue&\omit&}%
+ \def~{\kern .5em}%
+ %def\\{\!ttEndOfRow}%
+ \def\\{\par}
+ %def\-{\!ttShortHrule}%
+ %def\={\!ttLongHrule}%
+ %def\_{\!ttFullHrule}%
+ \def\Left ##1{##1\hfill\null}% % \null prevents \unskip from
+ \def\Center##1{\hfill##1\hfill\null}% % killing the \hfill
+ \def\Right ##1{\hfill##1}%
\def\use{\!ttuse}%
\def\Use{\!ttUse}%
- \the\EveryTable}
+ \the\EveryTable}% comes too soon
\egroup
\let\!ttRightGlue=\relax % This may be changed, in a group, by
diff --git a/Master/texmf-dist/tex/context/base/thrd-trg.tex b/Master/texmf-dist/tex/context/base/thrd-trg.tex
index 3fce672d5a3..dda81a8afde 100644
--- a/Master/texmf-dist/tex/context/base/thrd-trg.tex
+++ b/Master/texmf-dist/tex/context/base/thrd-trg.tex
@@ -6,6 +6,12 @@
\unprotect
+% compare: \number 0.5 \number -0.5 \number 1.5 \number -1.5
+%
+% so we need:
+
+\def\realnumber#1{\withoutpt\the\dimexpr#1\s!pt\relax} % brrr
+
\chardef \@iv = 4
\chardef \@xc = 90 % was \nin@ty
\chardef \@clxx = 180
@@ -51,22 +57,22 @@
%D calculations.
\def\calculatesin#1%
- {{\expandafter\ifx\csname sin \number#1\endcsname\relax
+ {{\expandafter\ifx\csname sin \realnumber{#1}\endcsname\relax
\!!dimena#1\onepoint
\tg@@sin
- \expandafter\xdef\csname sin \number#1\endcsname{\withoutpt\the\!!dimena}%
+ \expandafter\xdef\csname sin \realnumber{#1}\endcsname{\withoutpt\the\!!dimena}%
\fi}}
\def\calculatecos#1%
- {{\expandafter\ifx\csname cos \number#1\endcsname\relax
+ {{\expandafter\ifx\csname cos \realnumber{#1}\endcsname\relax
\!!dimena\@xc\onepoint
\advance\!!dimena-#1\onepoint
\tg@@sin
- \expandafter\xdef\csname cos \number#1\endcsname{\withoutpt\the\!!dimena}%
+ \expandafter\xdef\csname cos \realnumber{#1}\endcsname{\withoutpt\the\!!dimena}%
\fi}}
\def\calculatetan#1%
- {{\expandafter\ifx\csname tan \number#1\endcsname\relax
+ {{\expandafter\ifx\csname tan \realnumber{#1}\endcsname\relax
\calculatesin{#1}%
\calculatecos{#1}%
\!!dimena\calculatedcos{#1}\onepoint
@@ -74,40 +80,40 @@
\!!dimenb\calculatedsin{#1}\onepoint
\!!dimenb\@xvi@k\!!dimenb
\divide\!!dimenb\!!dimena
- \expandafter\xdef\csname tan \number#1\endcsname{\withoutpt\the\!!dimenb}%
+ \expandafter\xdef\csname tan \realnumber{#1}\endcsname{\withoutpt\the\!!dimenb}%
\fi}}
%D The results are accessed with:
-\def\calculatedsin#1{\csname sin \number#1\endcsname}
-\def\calculatedcos#1{\csname cos \number#1\endcsname}
-\def\calculatedtan#1{\csname tan \number#1\endcsname}
+\def\calculatedsin#1{\csname sin \realnumber{#1}\endcsname}
+\def\calculatedcos#1{\csname cos \realnumber{#1}\endcsname}
+\def\calculatedtan#1{\csname tan \realnumber{#1}\endcsname}
%D A more save implementation would be:
-\def\calculatedsin#1{\executeifdefined{sin \number#1}\!!zerocount}
-\def\calculatedcos#1{\executeifdefined{cos \number#1}\!!plusone}
-\def\calculatedtan#1{\executeifdefined{tan \number#1}\!!zerocount}
+\def\calculatedsin#1{\executeifdefined{sin \realnumber{#1}}\!!zerocount}
+\def\calculatedcos#1{\executeifdefined{cos \realnumber{#1}}\!!plusone }
+\def\calculatedtan#1{\executeifdefined{tan \realnumber{#1}}\!!zerocount}
%D A few values are predefined, although, on todays systems there
%D is no real reason for that. I've added the 270 ones and changed
%D the -90 tan. Also, I prefer text (\type {\!!..} instead of
%D counters \type {\..}.
-\expandafter\let\csname sin 0\endcsname\!!zerocount
-\expandafter\let\csname cos 0\endcsname\!!plusone
-\expandafter\let\csname sin 90\endcsname\!!plusone
-\expandafter\let\csname cos 90\endcsname\!!zerocount
-\expandafter\let\csname sin 180\endcsname\!!zerocount
-\expandafter\let\csname cos 180\endcsname\!!minusone
-\expandafter\let\csname sin 270\endcsname\!!minusone
-\expandafter\let\csname cos 270\endcsname\!!zerocount
+\expandafter\let\csname sin \realnumber{ 0}\endcsname\!!zerocount
+\expandafter\let\csname cos \realnumber{ 0}\endcsname\!!plusone
+\expandafter\let\csname sin \realnumber{ 90}\endcsname\!!plusone
+\expandafter\let\csname cos \realnumber{ 90}\endcsname\!!zerocount
+\expandafter\let\csname sin \realnumber{180}\endcsname\!!zerocount
+\expandafter\let\csname cos \realnumber{180}\endcsname\!!minusone
+\expandafter\let\csname sin \realnumber{270}\endcsname\!!minusone
+\expandafter\let\csname cos \realnumber{270}\endcsname\!!zerocount
-\expandafter\let\csname sin -90\endcsname\!!minusone
-\expandafter\let\csname cos -90\endcsname\!!zerocount
+\expandafter\let\csname sin \realnumber{-90}\endcsname\!!minusone
+\expandafter\let\csname cos \realnumber{-90}\endcsname\!!zerocount
-\expandafter\def\csname tan 90\endcsname{\writestatus\m!systems{infinite tan +90}}
-\expandafter\def\csname tan -90\endcsname{\writestatus\m!systems{infinite tan -90}}
+\expandafter\def\csname tan \realnumber{ 90}\endcsname{\writestatus\m!systems{infinite tan +90}}
+\expandafter\def\csname tan \realnumber{-90}\endcsname{\writestatus\m!systems{infinite tan -90}}
%D Usage: \type {\calculatesin{10}} and \type {\calculatedsin{10}}
diff --git a/Master/texmf-dist/tex/context/base/todo-mkii.tex b/Master/texmf-dist/tex/context/base/todo-mkii.tex
new file mode 100644
index 00000000000..5a0f340bdd3
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/todo-mkii.tex
@@ -0,0 +1 @@
+MKII Todo List
diff --git a/Master/texmf-dist/tex/context/base/todo-mkiv.tex b/Master/texmf-dist/tex/context/base/todo-mkiv.tex
new file mode 100644
index 00000000000..94fd6d478f2
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/todo-mkiv.tex
@@ -0,0 +1,6 @@
+MKIV Todo List
+
+-- language dependent case swapping (using char-map.lua)
+-- figures (locating and scaling)
+-- numbering
+-- cross references
diff --git a/Master/texmf-dist/tex/context/base/toks-ini.lua b/Master/texmf-dist/tex/context/base/toks-ini.lua
new file mode 100644
index 00000000000..d39188215ff
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/toks-ini.lua
@@ -0,0 +1,323 @@
+if not modules then modules = { } end modules ['toks-ini'] = {
+ version = 1.001,
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+utf = utf or unicode.utf8
+
+--[[ldx--
+<p>This code is experimental.</p>
+--ldx]]--
+
+
+-- 1 = command, 2 = modifier (char), 3 = controlsequence id
+--
+-- callback.register('token_filter', token.get_next)
+--
+-- token.get_next()
+-- token.expand()
+-- token.create()
+-- token.csname_id()
+-- token.csname_name(v)
+-- token.command_id()
+-- token.command_name(v)
+-- token.is_expandable()
+-- token.is_activechar()
+-- token.lookup(v)
+
+-- actually, we can use token registers to store tokens
+
+tokens = tokens or { }
+
+tokens.vbox = token.create("vbox")
+tokens.hbox = token.create("hbox")
+tokens.vtop = token.create("vtop")
+tokens.bgroup = token.create(utf.byte("{"), 1)
+tokens.egroup = token.create(utf.byte("}"), 2)
+
+tokens.letter = function(chr) return token.create(utf.byte(chr), 11) end
+tokens.other = function(chr) return token.create(utf.byte(chr), 12) end
+
+tokens.letters = function(str)
+ local t = { }
+ for chr in string.utfvalues(str) do
+ t[#t+1] = token.create(chr, 11)
+ end
+ return t
+end
+
+collectors = collectors or { }
+collectors.data = collectors.data or { }
+
+function tex.printlist(data)
+ callbacks.push('token_filter', function ()
+ callbacks.pop('token_filter')
+ return data
+ end)
+end
+
+function collectors.flush(tag)
+ tex.printlist(collectors.data[tag])
+end
+
+function collectors.test(tag)
+ tex.printlist(collectors.data[tag])
+end
+
+collectors.registered = { }
+
+function collectors.register(name)
+ collectors.registered[token.csname_id(name)] = name
+end
+
+--~ function collectors.install(tag,end_cs)
+--~ collectors.data[tag] = { }
+--~ local data = collectors.data[tag]
+--~ local call = token.command_id("call")
+--~ local relax = token.command_id("relax")
+--~ local endcs = token.csname_id(end_cs)
+--~ local expand = collectors.registered
+--~ local get = token.get_next -- so no callback!
+--~ while true do
+--~ local t = get()
+--~ local a, b = t[1], t[3]
+--~ if a == relax and b == endcs then
+--~ return
+--~ elseif a == call and expand[b] then
+--~ token.expand()
+--~ else
+--~ data[#data+1] = t
+--~ end
+--~ end
+--~ end
+
+function collectors.install(tag,end_cs)
+ collectors.data[tag] = { }
+ local data = collectors.data[tag]
+ local call = token.command_id("call")
+ local endcs = token.csname_id(end_cs)
+ local expand = collectors.registered
+ local get = token.get_next
+ while true do
+ local t = get()
+ local a, b = t[1], t[3]
+ if b == endcs then
+ tex.print('\\' ..end_cs)
+ return
+ elseif a == call and expand[b] then
+ token.expand()
+ else
+ data[#data+1] = t
+ end
+ end
+end
+
+function collectors.handle(tag,handle,flush)
+ collectors.data[tag] = handle(collectors.data[tag])
+ if flush then
+ collectors.flush(tag)
+ end
+end
+
+collectors.show_methods = { }
+
+function collectors.show(tag, method)
+ if type(tag) == "table" then
+ collectors.show_methods[method or 'a'](tag)
+ else
+ collectors.show_methods[method or 'a'](collectors.data[tag])
+ end
+end
+
+commands = commands or { }
+
+commands.letter = token.command_id("letter")
+commands.other = token.command_id("other_char")
+
+function collectors.default_words(t,str)
+ t[#t+1] = tokens.bgroup
+ t[#t+1] = token.create("red")
+ for k,v in ipairs(str) do
+ t[#t+1] = tokens.other('*')
+ end
+ t[#t+1] = tokens.egroup
+end
+
+function collectors.with_words(tag,handle)
+ local t, w = { }, { }
+ handle = handle or collectors.default_words
+ for _,v in ipairs(collectors.data[tag]) do
+ if v[1] == commands.letter then
+ w[#w+1] = v[2]
+ else
+ if #w > 0 then
+ handle(t,w)
+ w = { }
+ end
+ t[#t+1] = v
+ end
+ end
+ if #w > 0 then
+ handle(t,w)
+ end
+ collectors.data[tag] = t
+end
+
+function collectors.show_token(t)
+ if t then
+ local cmd, chr, id, cs, name = t[1], t[2], t[3], nil, token.command_name(t) or ""
+ if cmd == commands.letter or cmd == commands.other then
+ return string.format("%s-> %s -> %s", name, chr, utf.char(chr))
+ elseif id > 0 then
+ cs = token.csname_name(t) or nil
+ if cs then
+ return string.format("%s-> %s", name, cs)
+ elseif tonumber(chr) < 0 then
+ return string.format("%s-> %s", name, id)
+ else
+ return string.format("%s-> (%s,%s)", name, chr, id)
+ end
+ else
+ return string.format("%s", name)
+ end
+ else
+ return "no node"
+ end
+end
+
+function collectors.trace()
+ local t = token.get_next()
+ texio.write_nl(collectors.show_token(t))
+ return t
+end
+
+collectors.show_methods.a = function(data) -- no need to store the table, just pass directly
+ local flush, ct = tex.sprint, tex.ctxcatcodes
+ local template = "\\NC %s\\NC %s\\NC %s\\NC %s\\NC %s\\NC\\NR "
+ flush(ct, "\\starttabulate[|T|Tr|cT|Tr|T|]")
+ flush(ct, template:format("cmd","chr","","id","name"))
+ flush(ct, "\\HL")
+ for _,v in pairs(data) do
+ local cmd, chr, id, cs, sym = v[1], v[2], v[3], "", ""
+ local name = (token.command_name(v) or ""):gsub("_","\\_")
+ if id > 0 then
+ cs = token.csname_name(v) or ""
+ if cs ~= "" then cs = "\\string " .. cs end
+ else
+ id = ""
+ end
+ if cmd == commands.letter or cmd == commands.other then
+ sym = "\\char " .. chr
+ end
+ if tonumber(chr) < 0 then
+ flush(ct, template:format(name, "", sym, id, cs))
+ else
+ flush(ct, template:format(name, chr, sym, id, cs))
+ end
+ end
+ flush(ct, "\\stoptabulate")
+end
+
+collectors.show_methods.b_c = function(data,swap) -- no need to store the table, just pass directly
+ local flush, ct = tex.sprint, tex.ctxcatcodes
+ local template = "\\NC %s\\NC %s\\NC %s\\NC\\NR"
+ if swap then
+ flush(ct, "\\starttabulate[|Tl|Tl|Tr|]")
+ else
+ flush(ct, "\\starttabulate[|Tl|Tr|Tl|]")
+ end
+ flush(ct, template:format("cmd","chr","name"))
+ flush(ct, "\\HL")
+ for _,v in pairs(data) do
+ local cmd, chr, id, cs, sym = v[1], v[2], v[3], "", ""
+ local name = (token.command_name(v) or ""):gsub("_","\\_")
+ if id > 0 then
+ cs = token.csname_name(v) or ""
+ end
+ if cmd == commands.letter or cmd == commands.other then
+ sym = "\\char " .. chr
+ elseif cs ~= "" then
+ if token.is_activechar(v) then
+ sym = "\\string " .. cs
+ else
+ sym = "\\string\\" .. cs
+ end
+ end
+ if swap then
+ flush(ct, template:format(name, sym, chr))
+ elseif tonumber(chr) < 0 then
+ flush(ct, template:format(name, "", sym))
+ else
+ flush(ct, template:format(name, chr, sym))
+ end
+ end
+ flush(ct, "\\stoptabulate")
+end
+
+-- Even more experimental ...
+
+collectors.show_methods.b = function(tag) collectors.show_methods.b_c(tag,false) end
+collectors.show_methods.c = function(tag) collectors.show_methods.b_c(tag,true ) end
+
+collectors.remapper = {
+ -- namespace
+}
+
+collectors.remapper.data = {
+ -- user mappings
+}
+
+function collectors.remapper.store(tag,class,key)
+ local s = collectors.remapper.data[class]
+ if not s then
+ s = { }
+ collectors.remapper.data[class] = s
+ end
+ s[key] = collectors.data[tag]
+ collectors.data[tag] = nil
+end
+
+function collectors.remapper.convert(tag,toks)
+ local data = collectors.remapper.data[tag]
+ local leftbracket, rightbracket = utf.byte('['), utf.byte(']')
+ local skipping = 0
+ -- todo: math
+ if data then
+ local t = { }
+ for s=1,#toks do
+ local tok = toks[s]
+ local one, two = tok[1], tok[2]
+ if one == 11 or one == 12 then
+ if two == leftbracket then
+ skipping = skipping + 1
+ t[#t+1] = tok
+ elseif two == rightbracket then
+ skipping = skipping - 1
+ t[#t+1] = tok
+ elseif skipping == 0 then
+ local new = data[two]
+ if new then
+ if #new > 1 then
+ for n=1,#new do
+ t[#t+1] = new[n]
+ end
+ else
+ t[#t+1] = new[1]
+ end
+ else
+ t[#t+1] = tok
+ end
+ else
+ t[#t+1] = tok
+ end
+ else
+ t[#t+1] = tok
+ end
+ end
+ return t
+ else
+ return toks
+ end
+end
diff --git a/Master/texmf-dist/tex/context/base/toks-ini.tex b/Master/texmf-dist/tex/context/base/toks-ini.tex
new file mode 100644
index 00000000000..90311eb13ba
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/toks-ini.tex
@@ -0,0 +1,78 @@
+%D \module
+%D [ file=toks-ini,
+%D version=2007.03.03,
+%D title=\CONTEXT\ Character Macros,
+%D subtitle=Token Support (Initialization),
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright=PRAGMA]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{Token Support (initialization)}
+
+\registerctxluafile{toks-ini}{1.001}
+
+\unprotect
+
+%D Handy for manuals \unknown
+
+\def\starttokens [#1]{\ctxlua{collectors.install("#1", "stoptokens")}}
+\let\stoptokens \relax
+\def\flushtokens [#1]{\ctxlua{collectors.flush("#1")}}
+\def\showtokens [#1]{\ctxlua{collectors.show("#1")}}
+\def\testtokens [#1]{\ctxlua{collectors.with_words("#1")}}
+\def\registertoken #1{\ctxlua{collectors.register("#1")}}
+
+%D Inspired by a prototype by Taco for Thomas cum suis.
+
+% \defineremapper[babelgreek]
+%
+% \remapcharacter[babelgreek][`a]{\alpha}
+% \remapcharacter[babelgreek][`b]{\beta}
+% \remapcharacter[babelgreek][`c]{\gamma}
+% \remapcharacter[babelgreek][`d]{OEPS}
+%
+% \starttext
+%
+% [\startbabelgreek
+% a b c some stuff here \blank[big] oeps b d
+% \stopbabelgreek]
+%
+% [\babelgreek{some stuff here}]
+%
+% \stoptext
+
+% incompatible with mkii ! ! ! ! so we need other names here
+%
+% \def\dograbuntil#1#2%
+% {\long\def\next##1#1{#2##1}\next}
+%
+% \def\grabuntil#1%
+% {\expandafter\dograbuntil\expandafter{\csname#1\endcsname}}
+
+\def\dostartremapper#1%
+ {\ctxlua{collectors.install("#1", "\e!stop#1")}}
+
+\def\dostopremapper#1%
+ {\ctxlua{collectors.handle("#1",function(str) return collectors.remapper.convert("#1",str) end, true)}}
+
+\def\remaptokens#1%
+ {\ctxlua{collectors.handle("#1",function(str) return collectors.remapper.convert("#1",str) end)}}
+
+\def\defineremapper[#1]%
+ {\setvalue{\e!start#1}{\dostartremapper{#1}}%
+ \setvalue{\e!stop #1}{\dostopremapper {#1}}%
+ \def\next##1{\setvalue{#1}####1{\getvalue{\e!start#1}####1##1}}%
+ \expandafter\next\csname\e!stop#1\endcsname}
+
+\def\remapcharacter
+ {\dodoubleempty\doremapcharacter}
+
+\def\doremapcharacter[#1][#2]#3%
+ {\ctxlua{collectors.install("store", "ctxlua")}#3%
+ \ctxlua{collectors.remapper.store("store","#1",\number#2)}}
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/type-buy.tex b/Master/texmf-dist/tex/context/base/type-buy.tex
index 533f727d7c3..4e6eb30647e 100644
--- a/Master/texmf-dist/tex/context/base/type-buy.tex
+++ b/Master/texmf-dist/tex/context/base/type-buy.tex
@@ -20,455 +20,442 @@
% temporary code, replaced by setups
\starttypescript [serif] [fallback]
-
- \definefontsynonym [SerifBold] [Serif]
- \definefontsynonym [SerifItalic] [Serif]
- \definefontsynonym [SerifSlanted] [SerifItalic]
- \definefontsynonym [SerifBoldItalic] [SerifBold]
- \definefontsynonym [SerifBoldSlanted] [SerifBoldItalic]
- \definefontsynonym [SerifCaps] [Serif]
-
+ \definefontsynonym [SerifBold] [Serif]
+ \definefontsynonym [SerifItalic] [Serif]
+ \definefontsynonym [SerifSlanted] [SerifItalic]
+ \definefontsynonym [SerifBoldItalic] [SerifBold]
+ \definefontsynonym [SerifBoldSlanted] [SerifBoldItalic]
+ \definefontsynonym [SerifCaps] [Serif]
\stoptypescript
\starttypescript [sans] [fallback]
-
- \definefontsynonym [SansBold] [Sans]
- \definefontsynonym [SansItalic] [Sans]
- \definefontsynonym [SansSlanted] [SansItalic]
- \definefontsynonym [SansBoldItalic] [SansBold]
- \definefontsynonym [SansBoldSlanted] [SansBoldItalic]
- \definefontsynonym [SansCaps] [Sans]
-
+ \definefontsynonym [SansBold] [Sans]
+ \definefontsynonym [SansItalic] [Sans]
+ \definefontsynonym [SansSlanted] [SansItalic]
+ \definefontsynonym [SansBoldItalic] [SansBold]
+ \definefontsynonym [SansBoldSlanted] [SansBoldItalic]
+ \definefontsynonym [SansCaps] [Sans]
\stoptypescript
\starttypescript [mono] [fallback]
-
- \definefontsynonym [MonoBold] [Mono]
- \definefontsynonym [MonoItalic] [Mono]
- \definefontsynonym [MonoSlanted] [MonoItalic]
- \definefontsynonym [MonoBoldItalic] [MonoBold]
- \definefontsynonym [MonoBoldSlanted] [MonoBoldItalic]
- \definefontsynonym [MonoCaps] [Mono]
-
+ \definefontsynonym [MonoBold] [Mono]
+ \definefontsynonym [MonoItalic] [Mono]
+ \definefontsynonym [MonoSlanted] [MonoItalic]
+ \definefontsynonym [MonoBoldItalic] [MonoBold]
+ \definefontsynonym [MonoBoldSlanted] [MonoBoldItalic]
+ \definefontsynonym [MonoCaps] [Mono]
\stoptypescript
% Lucida Bright : Biggelow and Holmes
-\starttypescript [map] [lucida] [ec,8r,texnansi]
- \loadmapfile [\typescriptthree-bh-lucida.map]
-\stoptypescript
-
\starttypescript [serif] [lucida] [name]
- \definefontsynonym [Serif] [LucidaBright]
- \definefontsynonym [SerifBold] [LucidaBright-Demi]
- \definefontsynonym [SerifItalic] [LucidaBright-Italic]
- \definefontsynonym [SerifSlanted] [LucidaBright-Oblique]
- \definefontsynonym [SerifBoldItalic] [LucidaBright-DemiItalic]
- \definefontsynonym [SerifBoldSlanted] [LucidaBright-DemiItalic]
- \definefontsynonym [SerifCaps] [LucidaBrightSmallcaps]
- \definefontsynonym [SerifBoldCaps] [LucidaBrightSmallcaps-Demi]
+ \definefontsynonym [Serif] [LucidaBright]
+ \definefontsynonym [SerifBold] [LucidaBright-Demi]
+ \definefontsynonym [SerifItalic] [LucidaBright-Italic]
+ \definefontsynonym [SerifSlanted] [LucidaBright-Oblique]
+ \definefontsynonym [SerifBoldItalic] [LucidaBright-DemiItalic]
+ \definefontsynonym [SerifBoldSlanted] [LucidaBright-DemiItalic]
+ \definefontsynonym [SerifCaps] [LucidaBrightSmallcaps]
+ \definefontsynonym [SerifBoldCaps] [LucidaBrightSmallcaps-Demi]
\stoptypescript
\starttypescript [sans] [lucida] [name]
- \definefontsynonym [Sans] [LucidaSans]
- \definefontsynonym [SansBold] [LucidaSans-Demi]
- \definefontsynonym [SansItalic] [LucidaSans-Italic]
- \definefontsynonym [SansSlanted] [LucidaSans-Italic]
- \definefontsynonym [SansBoldItalic] [LucidaSans-DemiItalic]
- \definefontsynonym [SansBoldSlanted] [LucidaSans-DemiItalic]
- \definefontsynonym [SansCaps] [LucidaSans]
+ \definefontsynonym [Sans] [LucidaSans]
+ \definefontsynonym [SansBold] [LucidaSans-Demi]
+ \definefontsynonym [SansItalic] [LucidaSans-Italic]
+ \definefontsynonym [SansSlanted] [LucidaSans-Italic]
+ \definefontsynonym [SansBoldItalic] [LucidaSans-DemiItalic]
+ \definefontsynonym [SansBoldSlanted] [LucidaSans-DemiItalic]
+ \definefontsynonym [SansCaps] [LucidaSans]
\stoptypescript
\starttypescript [mono] [lucida] [name]
- \definefontsynonym [Mono] [LucidaSans-Typewriter]
- \definefontsynonym [MonoBold] [LucidaSans-TypewriterBold]
- \definefontsynonym [MonoItalic] [LucidaSans-TypewriterOblique]
- \definefontsynonym [MonoSlanted] [LucidaSans-TypewriterOblique]
- \definefontsynonym [MonoBoldItalic] [LucidaSans-TypewriterBoldOblique]
- \definefontsynonym [MonoBoldSlanted] [LucidaSans-TypewriterBoldOblique]
- \definefontsynonym [MonoCaps] [LucidaSans-Typewriter]
+ \definefontsynonym [Mono] [LucidaSans-Typewriter]
+ \definefontsynonym [MonoBold] [LucidaSans-TypewriterBold]
+ \definefontsynonym [MonoItalic] [LucidaSans-TypewriterOblique]
+ \definefontsynonym [MonoSlanted] [LucidaSans-TypewriterOblique]
+ \definefontsynonym [MonoBoldItalic] [LucidaSans-TypewriterBoldOblique]
+ \definefontsynonym [MonoBoldSlanted] [LucidaSans-TypewriterBoldOblique]
+ \definefontsynonym [MonoCaps] [LucidaSans-Typewriter]
\stoptypescript
\starttypescript [math] [lucida] [name]
- \definefontsynonym [MathRoman] [LucidaBright]
- \definefontsynonym [MathExtension] [LucidaNewMath-Extension]
- \definefontsynonym [MathItalic] [LucidaNewMath-AltItalic]
- \definefontsynonym [MathSymbol] [LucidaNewMath-Symbol]
- \definefontsynonym [MathAlpha] [LucidaNewMath-Arrows]
- \definefontsynonym [MathBeta] [LucidaNewMath-Roman]
+ \definefontsynonym [MathRoman] [LucidaBright]
+ \definefontsynonym [MathExtension] [LucidaNewMath-Extension]
+ \definefontsynonym [MathItalic] [LucidaNewMath-AltItalic]
+ \definefontsynonym [MathSymbol] [LucidaNewMath-Symbol]
+ \definefontsynonym [MathAlpha] [LucidaNewMath-Arrows]
+ \definefontsynonym [MathBeta] [LucidaNewMath-Roman]
\stoptypescript
\starttypescript [math] [lucida] [name]
- \definefontsynonym [OldStyle] [MathItalic]
- \definefontsynonym [Fraktur] [eufm10]
- \definefontsynonym [Blackboard] [MathAlpha]
- \definefontsynonym [Gothic] [eufm10]
- \definefontsynonym [Calligraphic] [MathSymbol] % math caligraphic !
+ \definefontsynonym [OldStyle] [MathItalic]
+ \definefontsynonym [Fraktur] [eufm10]
+ \definefontsynonym [Blackboard] [MathAlpha]
+ \definefontsynonym [Gothic] [eufm10]
+ \definefontsynonym [Calligraphic] [MathSymbol] % math caligraphic !
\stoptypescript
\starttypescript [boldmath] [lucida] [name]
- \definefontsynonym [MathRoman] [LucidaBright-Demi]
- \definefontsynonym [MathExtension] [LucidaNewMath-Extension]
- \definefontsynonym [MathItalic] [LucidaNewMath-AltDemiItalic]
- \definefontsynonym [MathSymbol] [LucidaNewMath-Symbol-Demi]
- \definefontsynonym [MathAlpha] [LucidaNewMath-Arrows-Demi]
- \definefontsynonym [MathBeta] [LucidaNewMath-Demi]
+ \definefontsynonym [MathRoman] [LucidaBright-Demi]
+ \definefontsynonym [MathExtension] [LucidaNewMath-Extension]
+ \definefontsynonym [MathItalic] [LucidaNewMath-AltDemiItalic]
+ \definefontsynonym [MathSymbol] [LucidaNewMath-Symbol-Demi]
+ \definefontsynonym [MathAlpha] [LucidaNewMath-Arrows-Demi]
+ \definefontsynonym [MathBeta] [LucidaNewMath-Demi]
\stoptypescript
\starttypescript [bfmath] [lucida] [name]
- \definefontsynonym [MathRomanBold] [LucidaNewMath-Demi]
- \definefontsynonym [MathExtensionBold] [LucidaNewMath-Extension]
- \definefontsynonym [MathItalicBold] [LucidaNewMath-AltDemiItalic]
- \definefontsynonym [MathSymbolBold] [LucidaNewMath-Symbol-Demi]
- \definefontsynonym [MathAlphaBold] [LucidaNewMath-Arrows-Demi]
- \definefontsynonym [MathBetaBold] [LucidaNewMath-Demi]
+ \definefontsynonym [MathRomanBold] [LucidaNewMath-Demi]
+ \definefontsynonym [MathExtensionBold] [LucidaNewMath-Extension]
+ \definefontsynonym [MathItalicBold] [LucidaNewMath-AltDemiItalic]
+ \definefontsynonym [MathSymbolBold] [LucidaNewMath-Symbol-Demi]
+ \definefontsynonym [MathAlphaBold] [LucidaNewMath-Arrows-Demi]
+ \definefontsynonym [MathBetaBold] [LucidaNewMath-Demi]
\stoptypescript
\starttypescript [handwriting] [lucida] [name]
- \definefontsynonym [Handwriting] [LucidaHandwriting-Italic]
+ \definefontsynonym [Handwriting] [LucidaHandwriting-Italic]
\stoptypescript
\starttypescript [calligraphy] [lucida] [name]
- \definefontsynonym [Calligraphy] [LucidaCalligraphy-Italic]
+ \definefontsynonym [Calligraphy] [LucidaCalligraphy-Italic]
\stoptypescript
\starttypescript [serif] [lucida] [texnansi,ec,8r]
- \definefontsynonym [LucidaBright] [\typescriptthree-lbr] [encoding=\typescriptthree]
- \definefontsynonym [LucidaBright-Demi] [\typescriptthree-lbd] [encoding=\typescriptthree]
- \definefontsynonym [LucidaBright-DemiItalic] [\typescriptthree-lbdi] [encoding=\typescriptthree]
- \definefontsynonym [LucidaBright-Italic] [\typescriptthree-lbi] [encoding=\typescriptthree]
- \definefontsynonym [LucidaBrightSmallcaps] [\typescriptthree-lbrsc] [encoding=\typescriptthree]
- \definefontsynonym [LucidaBrightSmallcaps-Demi] [\typescriptthree-lbdsc] [encoding=\typescriptthree]
- \definefontsynonym [LucidaBright-Oblique] [\typescriptthree-lbsl] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaBright] [\typescriptthree-lbr] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaBright-Demi] [\typescriptthree-lbd] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaBright-DemiItalic] [\typescriptthree-lbdi] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaBright-Italic] [\typescriptthree-lbi] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaBrightSmallcaps] [\typescriptthree-lbrsc] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaBrightSmallcaps-Demi] [\typescriptthree-lbdsc] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaBright-Oblique] [\typescriptthree-lbsl] [encoding=\typescriptthree]
\stoptypescript
\starttypescript [sans] [lucida] [texnansi,ec,8r]
- \definefontsynonym [LucidaSans] [\typescriptthree-lsr] [encoding=\typescriptthree]
- \definefontsynonym [LucidaSans-Demi] [\typescriptthree-lsd] [encoding=\typescriptthree]
- \definefontsynonym [LucidaSans-DemiItalic] [\typescriptthree-lsdi] [encoding=\typescriptthree]
- \definefontsynonym [LucidaSans-Italic] [\typescriptthree-lsi] [encoding=\typescriptthree]
- \definefontsynonym [LucidaSans-Bold] [\typescriptthree-lsb] [encoding=\typescriptthree]
- \definefontsynonym [LucidaSans-BoldItalic] [\typescriptthree-lsbi] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaSans] [\typescriptthree-lsr] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaSans-Demi] [\typescriptthree-lsd] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaSans-DemiItalic] [\typescriptthree-lsdi] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaSans-Italic] [\typescriptthree-lsi] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaSans-Bold] [\typescriptthree-lsb] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaSans-BoldItalic] [\typescriptthree-lsbi] [encoding=\typescriptthree]
\stoptypescript
\starttypescript [mono] [lucida] [texnansi,ec,8r]
- \definefontsynonym [LucidaSans-Typewriter] [\typescriptthree-lstr] [encoding=\typescriptthree]
- \definefontsynonym [LucidaSans-TypewriterBold] [\typescriptthree-lstb] [encoding=\typescriptthree]
- \definefontsynonym [LucidaSans-TypewriterBoldOblique] [\typescriptthree-lstbo] [encoding=\typescriptthree]
- \definefontsynonym [LucidaSans-TypewriterOblique] [\typescriptthree-lsto] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaSans-Typewriter] [\typescriptthree-lstr] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaSans-TypewriterBold] [\typescriptthree-lstb] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaSans-TypewriterBoldOblique] [\typescriptthree-lstbo] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaSans-TypewriterOblique] [\typescriptthree-lsto] [encoding=\typescriptthree]
+ \loadmapfile [\typescriptthree-bh-lucida.map]
+ \fakecontrolspace
\stoptypescript
\starttypescript [math] [lucida] [texnansi,ec,8r]
- \definefontsynonym [LucidaBright] [\typescriptthree-lbr] [encoding=\typescriptthree]
- \definefontsynonym [LucidaNewMath-AltItalic] [lbmo]
- \definefontsynonym [LucidaNewMath-Arrows] [lbma]
- \definefontsynonym [LucidaNewMath-Extension] [lbme]
- \definefontsynonym [LucidaNewMath-Roman] [lbmr]
- \definefontsynonym [LucidaNewMath-Italic] [lbmi]
- \definefontsynonym [LucidaNewMath-Symbol] [lbms]
- \definefontsynonym [LucidaBlackletter] [lbl]
+ \definefontsynonym [LucidaBright] [\typescriptthree-lbr] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaNewMath-AltItalic] [lbmo]
+ \definefontsynonym [LucidaNewMath-Arrows] [lbma]
+ \definefontsynonym [LucidaNewMath-Extension] [lbme]
+ \definefontsynonym [LucidaNewMath-Roman] [lbmr]
+ \definefontsynonym [LucidaNewMath-Italic] [lbmi]
+ \definefontsynonym [LucidaNewMath-Symbol] [lbms]
+ \definefontsynonym [LucidaBlackletter] [lbl]
+ \loadmapfile [\typescriptthree-bh-lucida.map]
\stoptypescript
\starttypescript [boldmath,bfmath] [lucida] [texnansi,ec,8r]
- \definefontsynonym [LucidaNewMath-AltDemiItalic] [lbmdo]
- \definefontsynonym [LucidaNewMath-Arrows-Demi] [lbmad]
- \definefontsynonym [LucidaNewMath-Extension] [lbme]
- \definefontsynonym [LucidaNewMath-Demi] [lbmd]
- \definefontsynonym [LucidaNewMath-DemiItalic] [lbmdi]
- \definefontsynonym [LucidaNewMath-Symbol-Demi] [lbmsd]
+ \definefontsynonym [LucidaNewMath-AltDemiItalic] [lbmdo]
+ \definefontsynonym [LucidaNewMath-Arrows-Demi] [lbmad]
+ \definefontsynonym [LucidaNewMath-Extension] [lbme]
+ \definefontsynonym [LucidaNewMath-Demi] [lbmd]
+ \definefontsynonym [LucidaNewMath-DemiItalic] [lbmdi]
+ \definefontsynonym [LucidaNewMath-Symbol-Demi] [lbmsd]
+ \loadmapfile [\typescriptthree-bh-lucida.map]
\stoptypescript
\starttypescript [calligraphy] [lucida] [texnansi,ec,8r]
- \definefontsynonym [LucidaCalligraphy-Italic] [\typescriptthree-lbc] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaCalligraphy-Italic] [\typescriptthree-lbc] [encoding=\typescriptthree]
+ \loadmapfile [\typescriptthree-bh-lucida.map]
\stoptypescript
\starttypescript [casual] [lucida] [texnansi,ec,8r]
- \definefontsynonym [LucidaCasual] [\typescriptthree-lbkr] [encoding=\typescriptthree]
- \definefontsynonym [LucidaCasual-Italic] [\typescriptthree-lbki] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaCasual] [\typescriptthree-lbkr] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaCasual-Italic] [\typescriptthree-lbki] [encoding=\typescriptthree]
+ \loadmapfile [\typescriptthree-bh-lucida.map]
\stoptypescript
\starttypescript [handwriting] [lucida] [texnansi,ec,8r]
- \definefontsynonym [LucidaHandwriting-Italic] [\typescriptthree-lbh] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaHandwriting-Italic] [\typescriptthree-lbh] [encoding=\typescriptthree]
+ \loadmapfile [\typescriptthree-bh-lucida.map]
\stoptypescript
\starttypescript [fax] [lucida] [texnansi,ec,8r]
- \definefontsynonym [LucidaFax] [\typescriptthree-lfr] [encoding=\typescriptthree]
- \definefontsynonym [LucidaFax-Demi] [\typescriptthree-lfd] [encoding=\typescriptthree]
- \definefontsynonym [LucidaFax-DemiItalic] [\typescriptthree-lfdi] [encoding=\typescriptthree]
- \definefontsynonym [LucidaFax-Italic] [\typescriptthree-lfi] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaFax] [\typescriptthree-lfr] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaFax-Demi] [\typescriptthree-lfd] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaFax-DemiItalic] [\typescriptthree-lfdi] [encoding=\typescriptthree]
+ \definefontsynonym [LucidaFax-Italic] [\typescriptthree-lfi] [encoding=\typescriptthree]
+ \loadmapfile [\typescriptthree-bh-lucida.map]
\stoptypescript
-% Informal : Vulis
+\starttypescript [lucida,lucidabfm] [texnansi,ec,8r,uc]
+ \definetypeface [\typescriptone] [rm] [serif] [lucida] [default] [encoding=\typescripttwo]
+ \definetypeface [\typescriptone] [ss] [sans] [lucida] [default] [encoding=\typescripttwo]
+ \definetypeface [\typescriptone] [tt] [mono] [lucida] [default] [encoding=\typescripttwo]
+ \definetypeface [\typescriptone] [hw] [handwriting] [lucida] [default] [encoding=\typescripttwo]
+ \definetypeface [\typescriptone] [cg] [calligraphy] [lucida] [default] [encoding=\typescripttwo]
+ \loadmapfile [\typescripttwo-bh-lucida.map]
+\stoptypescript
+
+\starttypescript [lucida] [texnansi,ec,8r]
+ \definetypeface [lucida] [mm] [math] [lucida] [default] [encoding=\typescripttwo]
+\stoptypescript
+
+\starttypescript [lucidaboldmath] [texnansi,ec,8r]
+ \definetypeface [lucidaboldmath] [rm] [serif] [lucida] [default] [encoding=\typescripttwo] % needed ?
+ \definetypeface [lucidaboldmath] [ss] [sans] [lucida] [default] [encoding=\typescripttwo] % needed ?
+ \definetypeface [lucidaboldmath] [tt] [mono] [lucida] [default] [encoding=\typescripttwo] % needed ?
+ \definetypeface [lucidaboldmath] [mm] [boldmath] [lucida] [default] [encoding=\typescripttwo]
+\stoptypescript
-\starttypescript [map] [informal] [default]
- \loadmapfile[original-micropress-informal.map]
+\starttypescript [lucidabfm,lucidaboldmath] [texnansi,ec,8r]
+ \definetypeface [lucida] [mm] [bfmath] [lucida] [default] [encoding=\typescripttwo]
+ \definetypeface [lucidaboldmath] [mm] [bfmath] [lucida] [default] [encoding=\typescripttwo]
\stoptypescript
+\starttypescript [lucida,lucidabfm,lucidaboldmath] [texnansi,ec,8r]
+ \usemathcollection[lbr]
+ \quittypescriptscanning % last in the row
+\stoptypescript
+
+% Informal : Vulis
+
\starttypescript [casual] [informal] [name]
- \definefontsynonym [Serif] [Informal-Regular]
- \definefontsynonym [SerifBold] [Informal-Bold]
- \definefontsynonym [SerifSlanted] [Informal-Oblique]
- \definefontsynonym [SerifItalic] [Informal-Oblique]
- \definefontsynonym [SerifBoldSlanted] [Informal-BoldOblique]
- \definefontsynonym [SerifBoldItalic] [Informal-BoldOblique]
- \definefontsynonym [SerifCaps] [Informal-Regular]
+ \definefontsynonym [Serif] [Informal-Regular]
+ \definefontsynonym [SerifBold] [Informal-Bold]
+ \definefontsynonym [SerifSlanted] [Informal-Oblique]
+ \definefontsynonym [SerifItalic] [Informal-Oblique]
+ \definefontsynonym [SerifBoldSlanted] [Informal-BoldOblique]
+ \definefontsynonym [SerifBoldItalic] [Informal-BoldOblique]
+ \definefontsynonym [SerifCaps] [Informal-Regular]
\stoptypescript
\starttypescript [math] [informal] [name]
- \definefontsynonym [MathRoman] [Informal-Regular]
- \definefontsynonym [MathExtension] [Informal-MathExtendedSymbols]
- \definefontsynonym [MathItalic] [Informal-MathItalics]
- \definefontsynonym [MathSymbol] [Informal-MathSymbols]
+ \definefontsynonym [MathRoman] [Informal-Regular]
+ \definefontsynonym [MathExtension] [Informal-MathExtendedSymbols]
+ \definefontsynonym [MathItalic] [Informal-MathItalics]
+ \definefontsynonym [MathSymbol] [Informal-MathSymbols]
\stoptypescript
\starttypescript [casual] [informal] [default]
- \definefontsynonym [Informal-Regular] [ifrm10cm]
- \definefontsynonym [Informal-Bold] [ifrb10cm]
- \definefontsynonym [Informal-Oblique] [ifro10cm]
- \definefontsynonym [Informal-BoldOblique] [ifbo10cm]
+ \definefontsynonym [Informal-Regular] [ifrm10cm]
+ \definefontsynonym [Informal-Bold] [ifrb10cm]
+ \definefontsynonym [Informal-Oblique] [ifro10cm]
+ \definefontsynonym [Informal-BoldOblique] [ifbo10cm]
+ \loadmapfile[original-micropress-informal.map]
\stoptypescript
\starttypescript [math] [informal] [default]
- \definefontsynonym [Informal-Regular] [ifrm10cm]
- \definefontsynonym [Informal-MathExtendedSymbols] [ifex10]
- \definefontsynonym [Informal-MathItalics] [ifmi10]
- \definefontsynonym [Informal-MathSymbols] [ifsy10]
+ \definefontsynonym [Informal-Regular] [ifrm10cm]
+ \definefontsynonym [Informal-MathExtendedSymbols] [ifex10]
+ \definefontsynonym [Informal-MathItalics] [ifmi10]
+ \definefontsynonym [Informal-MathSymbols] [ifsy10]
+ \loadmapfile[original-micropress-informal.map]
\stoptypescript
% ITC Officina
-\starttypescript [map] [officina] [ec,8r,texnansi]
- \loadmapfile [\typescriptthree-itc-officina.map]
-\stoptypescript
-
\starttypescript [serif] [officina] [name]
-
- \definefontsynonym [Serif] [OfficinaSerif-Book]
- \definefontsynonym [SerifItalic] [OfficinaSerif-BookItalic]
- \definefontsynonym [SerifSlanted] [OfficinaSerif-BookSlanted]
- \definefontsynonym [SerifBold] [OfficinaSerif-Bold]
- \definefontsynonym [SerifBoldItalic] [OfficinaSerif-BoldItalic]
- \definefontsynonym [SerifBoldSlanted][OfficinaSerif-BoldSlanted]
- \definefontsynonym [SerifCaps] [OfficinaSerif-Caps]
-
+ \definefontsynonym [Serif] [OfficinaSerif-Book]
+ \definefontsynonym [SerifItalic] [OfficinaSerif-BookItalic]
+ \definefontsynonym [SerifSlanted] [OfficinaSerif-BookSlanted]
+ \definefontsynonym [SerifBold] [OfficinaSerif-Bold]
+ \definefontsynonym [SerifBoldItalic] [OfficinaSerif-BoldItalic]
+ \definefontsynonym [SerifBoldSlanted] [OfficinaSerif-BoldSlanted]
+ \definefontsynonym [SerifCaps] [OfficinaSerif-Caps]
\stoptypescript
\starttypescript [sans] [officina] [name]
-
- \definefontsynonym [Sans] [OfficinaSans-Book]
- \definefontsynonym [SansItalic] [OfficinaSans-BookItalic]
- \definefontsynonym [SansSlanted] [OfficinaSans-BookSlanted]
- \definefontsynonym [SansBold] [OfficinaSans-Bold]
- \definefontsynonym [SansBoldItalic] [OfficinaSans-BoldItalic]
- \definefontsynonym [SansBoldSlanted][OfficinaSans-BoldSlanted]
- \definefontsynonym [SansCaps] [OfficinaSans-Caps]
-
+ \definefontsynonym [Sans] [OfficinaSans-Book]
+ \definefontsynonym [SansItalic] [OfficinaSans-BookItalic]
+ \definefontsynonym [SansSlanted] [OfficinaSans-BookSlanted]
+ \definefontsynonym [SansBold] [OfficinaSans-Bold]
+ \definefontsynonym [SansBoldItalic] [OfficinaSans-BoldItalic]
+ \definefontsynonym [SansBoldSlanted] [OfficinaSans-BoldSlanted]
+ \definefontsynonym [SansCaps] [OfficinaSans-Caps]
\stoptypescript
\starttypescript [serif] [officina] [texnansi,ec,8r]
-
- \definefontsynonym [OfficinaSerif-Book] [\typescriptthree-ovbk] [encoding=\typescriptthree]
- \definefontsynonym [OfficinaSerif-BookItalic] [\typescriptthree-ovwi] [encoding=\typescriptthree]
- \definefontsynonym [OfficinaSerif-Bold] [\typescriptthree-ovb] [encoding=\typescriptthree]
- \definefontsynonym [OfficinaSerif-BoldItalic] [\typescriptthree-ovbi] [encoding=\typescriptthree]
-
- \definefontsynonym [OfficinaSerif-BookSlanted][\typescriptthree-ovbk-slanted-167] [encoding=\typescriptthree]
- \definefontsynonym [OfficinaSerif-BoldSlanted][\typescriptthree-ovb-slanted-167] [encoding=\typescriptthree]
- \definefontsynonym [OfficinaSerif-Caps] [\typescriptthree-ovbk-capitalized-800] [encoding=\typescriptthree]
-
+ \definefontsynonym [OfficinaSerif-Book] [\typescriptthree-ovbk] [encoding=\typescriptthree]
+ \definefontsynonym [OfficinaSerif-BookItalic] [\typescriptthree-ovwi] [encoding=\typescriptthree]
+ \definefontsynonym [OfficinaSerif-Bold] [\typescriptthree-ovb] [encoding=\typescriptthree]
+ \definefontsynonym [OfficinaSerif-BoldItalic] [\typescriptthree-ovbi] [encoding=\typescriptthree]
+ \definefontsynonym [OfficinaSerif-BookSlanted] [\typescriptthree-ovbk-slanted-167] [encoding=\typescriptthree]
+ \definefontsynonym [OfficinaSerif-BoldSlanted] [\typescriptthree-ovb-slanted-167] [encoding=\typescriptthree]
+ \definefontsynonym [OfficinaSerif-Caps] [\typescriptthree-ovbk-capitalized-800] [encoding=\typescriptthree]
+ \loadmapfile [\typescriptthree-itc-officina.map]
\stoptypescript
\starttypescript [sans] [officina] [texnansi,ec,8r]
-
- \definefontsynonym [OfficinaSans-Book] [\typescriptthree-owbk] [encoding=\typescriptthree]
- \definefontsynonym [OfficinaSans-BookItalic] [\typescriptthree-owwi] [encoding=\typescriptthree]
- \definefontsynonym [OfficinaSans-Bold] [\typescriptthree-owb] [encoding=\typescriptthree]
- \definefontsynonym [OfficinaSans-BoldItalic] [\typescriptthree-owbi] [encoding=\typescriptthree]
-
- \definefontsynonym [OfficinaSans-BookSlanted][\typescriptthree-owbk-slanted-167] [encoding=\typescriptthree]
- \definefontsynonym [OfficinaSans-BoldSlanted][\typescriptthree-owb-slanted-167] [encoding=\typescriptthree]
- \definefontsynonym [OfficinaSans-Caps] [\typescriptthree-owbk-capitalized-800] [encoding=\typescriptthree]
-
+ \definefontsynonym [OfficinaSans-Book] [\typescriptthree-owbk] [encoding=\typescriptthree]
+ \definefontsynonym [OfficinaSans-BookItalic] [\typescriptthree-owwi] [encoding=\typescriptthree]
+ \definefontsynonym [OfficinaSans-Bold] [\typescriptthree-owb] [encoding=\typescriptthree]
+ \definefontsynonym [OfficinaSans-BoldItalic] [\typescriptthree-owbi] [encoding=\typescriptthree]
+ \definefontsynonym [OfficinaSans-BookSlanted] [\typescriptthree-owbk-slanted-167] [encoding=\typescriptthree]
+ \definefontsynonym [OfficinaSans-BoldSlanted] [\typescriptthree-owb-slanted-167] [encoding=\typescriptthree]
+ \definefontsynonym [OfficinaSans-Caps] [\typescriptthree-owbk-capitalized-800] [encoding=\typescriptthree]
+ \loadmapfile [\typescriptthree-itc-officina.map]
\stoptypescript
% FontFont Meta
-\starttypescript [map] [meta] [ec,8r,texnansi]
- \loadmapfile [\typescriptthree-fontfont-meta.map]
-\stoptypescript
-
\starttypescript [sans] [meta] [name]
+ \definefontsynonym [Sans] [MetaNormal-Roman]
+ \definefontsynonym [SansItalic] [MetaNormal-Italic]
+ \definefontsynonym [SansSlanted] [MetaNormal-Italic]
+ \definefontsynonym [SansBold] [MetaBold-Roman]
+ \definefontsynonym [SansBoldItalic] [MetaBold-Italic]
+ \definefontsynonym [SansBoldSlanted][MetaBold-Italic]
+ \definefontsynonym [SansCaps] [MetaNormal-Caps]
+\stoptypescript
- \definefontsynonym [Sans] [MetaNormal-Roman]
- \definefontsynonym [SansItalic] [MetaNormal-Italic]
- \definefontsynonym [SansSlanted] [MetaNormal-Italic]
- \definefontsynonym [SansBold] [MetaBold-Roman]
- \definefontsynonym [SansBoldItalic] [MetaBold-Italic]
- \definefontsynonym [SansBoldSlanted][MetaBold-Italic]
- \definefontsynonym [SansCaps] [MetaNormal-Caps]
-
+\starttypescript [sans] [meta-medium] [name]
+ \definefontsynonym [Sans] [MetaMedium-Roman]
+ \definefontsynonym [SansItalic] [MetaMedium-Italic]
+ \definefontsynonym [SansSlanted] [MetaMedium-Italic]
+ \definefontsynonym [SansBold] [MetaBold-Roman]
+ \definefontsynonym [SansBoldItalic] [MetaBold-Italic]
+ \definefontsynonym [SansBoldSlanted][MetaBold-Italic]
+ \definefontsynonym [SansCaps] [MetaMedium-Caps]
\stoptypescript
\starttypescript [sans] [meta-lf] [name]
-
- \definefontsynonym [Sans] [MetaBookLF-Roman]
- \definefontsynonym [SansBold] [MetaBoldLF-Roman]
- \definefontsynonym [SansItalic] [MetaBookLF-Italic]
- \definefontsynonym [SansBoldItalic] [MetaBoldLF-Italic]
- \definefontsynonym [SansCaps] [MetaBookLF-Caps]
-
+ \definefontsynonym [Sans] [MetaBookLF-Roman]
+ \definefontsynonym [SansBold] [MetaBoldLF-Roman]
+ \definefontsynonym [SansItalic] [MetaBookLF-Italic]
+ \definefontsynonym [SansBoldItalic] [MetaBoldLF-Italic]
+ \definefontsynonym [SansCaps] [MetaBookLF-Caps]
\stoptypescript
\starttypescript [sans] [meta,meta-book] [texnansi,ec,8r]
-
- \definefontsynonym [MetaBook-Roman] [\typescriptthree-mtbk] [encoding=\typescriptthree]
- \definefontsynonym [MetaBook-Italic] [\typescriptthree-mtbki] [encoding=\typescriptthree]
- \definefontsynonym [MetaBook-Caps] [\typescriptthree-mtbkc] [encoding=\typescriptthree]
- \definefontsynonym [MetaBook-ItalicCaps] [\typescriptthree-mtbkic] [encoding=\typescriptthree]
-
+ \definefontsynonym [MetaBook-Roman] [\typescriptthree-mtbk] [encoding=\typescriptthree]
+ \definefontsynonym [MetaBook-Italic] [\typescriptthree-mtbki] [encoding=\typescriptthree]
+ \definefontsynonym [MetaBook-Caps] [\typescriptthree-mtbkc] [encoding=\typescriptthree]
+ \definefontsynonym [MetaBook-ItalicCaps] [\typescriptthree-mtbkic] [encoding=\typescriptthree]
+ \loadmapfile [\typescriptthree-fontfont-meta.map]
\stoptypescript
\starttypescript [sans] [meta-lf,meta-book-lf] [texnansi,ec,8r]
-
- \definefontsynonym [MetaBookLF-Roman] [\typescriptthree-mtbkf] [encoding=\typescriptthree]
- \definefontsynonym [MetaBookLF-Italic] [\typescriptthree-mtbkfi] [encoding=\typescriptthree]
- \definefontsynonym [MetaBookLF-Caps] [\typescriptthree-mtbkfc] [encoding=\typescriptthree]
- \definefontsynonym [MetaBookLF-ItalicCaps] [\typescriptthree-mtbkfic] [encoding=\typescriptthree]
-
+ \definefontsynonym [MetaBookLF-Roman] [\typescriptthree-mtbkf] [encoding=\typescriptthree]
+ \definefontsynonym [MetaBookLF-Italic] [\typescriptthree-mtbkfi] [encoding=\typescriptthree]
+ \definefontsynonym [MetaBookLF-Caps] [\typescriptthree-mtbkfc] [encoding=\typescriptthree]
+ \definefontsynonym [MetaBookLF-ItalicCaps] [\typescriptthree-mtbkfic] [encoding=\typescriptthree]
+ \loadmapfile [\typescriptthree-fontfont-meta.map]
\stoptypescript
\starttypescript [sans] [meta,meta-bold] [texnansi,ec,8r]
-
- \definefontsynonym [MetaBold-Roman] [\typescriptthree-mtbd] [encoding=\typescriptthree]
- \definefontsynonym [MetaBold-Italic] [\typescriptthree-mtbdi] [encoding=\typescriptthree]
- \definefontsynonym [MetaBold-Caps] [\typescriptthree-mtbdc] [encoding=\typescriptthree]
- \definefontsynonym [MetaBold-ItalicCaps] [\typescriptthree-mtbdic] [encoding=\typescriptthree]
-
+ \definefontsynonym [MetaBold-Roman] [\typescriptthree-mtbd] [encoding=\typescriptthree]
+ \definefontsynonym [MetaBold-Italic] [\typescriptthree-mtbdi] [encoding=\typescriptthree]
+ \definefontsynonym [MetaBold-Caps] [\typescriptthree-mtbdc] [encoding=\typescriptthree]
+ \definefontsynonym [MetaBold-ItalicCaps] [\typescriptthree-mtbdic] [encoding=\typescriptthree]
+ \loadmapfile [\typescriptthree-fontfont-meta.map]
\stoptypescript
\starttypescript [sans] [meta-lf,meta-bold-lf] [texnansi,ec,8r]
-
- \definefontsynonym [MetaBoldLF-Roman] [\typescriptthree-mtbdf] [encoding=\typescriptthree]
- \definefontsynonym [MetaBoldLF-Italic] [\typescriptthree-mtbdfi] [encoding=\typescriptthree]
- \definefontsynonym [MetaBoldLF-Caps] [\typescriptthree-mtbdfc] [encoding=\typescriptthree]
- \definefontsynonym [MetaBoldLF-ItalicCaps] [\typescriptthree-mtbdfic] [encoding=\typescriptthree]
-
+ \definefontsynonym [MetaBoldLF-Roman] [\typescriptthree-mtbdf] [encoding=\typescriptthree]
+ \definefontsynonym [MetaBoldLF-Italic] [\typescriptthree-mtbdfi] [encoding=\typescriptthree]
+ \definefontsynonym [MetaBoldLF-Caps] [\typescriptthree-mtbdfc] [encoding=\typescriptthree]
+ \definefontsynonym [MetaBoldLF-ItalicCaps] [\typescriptthree-mtbdfic] [encoding=\typescriptthree]
+ \loadmapfile [\typescriptthree-fontfont-meta.map]
\stoptypescript
\starttypescript [sans] [meta-normal] [texnansi,ec,8r]
-
- \definefontsynonym [MetaNormal-Roman] [\typescriptthree-mtn] [encoding=\typescriptthree]
- \definefontsynonym [MetaNormal-Italic] [\typescriptthree-mtni] [encoding=\typescriptthree]
- \definefontsynonym [MetaNormal-Caps] [\typescriptthree-mtnc] [encoding=\typescriptthree]
- \definefontsynonym [MetaNormal-ItalicCaps] [\typescriptthree-mtnic] [encoding=\typescriptthree]
-
+ \definefontsynonym [MetaNormal-Roman] [\typescriptthree-mtn] [encoding=\typescriptthree]
+ \definefontsynonym [MetaNormal-Italic] [\typescriptthree-mtni] [encoding=\typescriptthree]
+ \definefontsynonym [MetaNormal-Caps] [\typescriptthree-mtnc] [encoding=\typescriptthree]
+ \definefontsynonym [MetaNormal-ItalicCaps] [\typescriptthree-mtnic] [encoding=\typescriptthree]
+ \loadmapfile [\typescriptthree-fontfont-meta.map]
\stoptypescript
\starttypescript [sans] [meta-normal-lf] [texnansi,ec,8r]
-
- \definefontsynonym [MetaNormalLF-Roman] [\typescriptthree-mtnf] [encoding=\typescriptthree]
- \definefontsynonym [MetaNormalLF-Italic] [\typescriptthree-mtnfi] [encoding=\typescriptthree]
- \definefontsynonym [MetaNormalLF-Caps] [\typescriptthree-mtnfc] [encoding=\typescriptthree]
- \definefontsynonym [MetaNormalLF-ItalicCaps] [\typescriptthree-mtnfic] [encoding=\typescriptthree]
-
+ \definefontsynonym [MetaNormalLF-Roman] [\typescriptthree-mtnf] [encoding=\typescriptthree]
+ \definefontsynonym [MetaNormalLF-Italic] [\typescriptthree-mtnfi] [encoding=\typescriptthree]
+ \definefontsynonym [MetaNormalLF-Caps] [\typescriptthree-mtnfc] [encoding=\typescriptthree]
+ \definefontsynonym [MetaNormalLF-ItalicCaps] [\typescriptthree-mtnfic] [encoding=\typescriptthree]
+ \loadmapfile [\typescriptthree-fontfont-meta.map]
\stoptypescript
\starttypescript [sans] [meta-medium] [texnansi,ec,8r]
-
- \definefontsynonym [MetaMedium-Roman] [\typescriptthree-mtm] [encoding=\typescriptthree]
- \definefontsynonym [MetaMedium-Italic] [\typescriptthree-mtmi] [encoding=\typescriptthree]
- \definefontsynonym [MetaMedium-Caps] [\typescriptthree-mtmc] [encoding=\typescriptthree]
- \definefontsynonym [MetaMedium-ItalicCaps] [\typescriptthree-mtmic] [encoding=\typescriptthree]
-
+ \definefontsynonym [MetaMedium-Roman] [\typescriptthree-mtm] [encoding=\typescriptthree]
+ \definefontsynonym [MetaMedium-Italic] [\typescriptthree-mtmi] [encoding=\typescriptthree]
+ \definefontsynonym [MetaMedium-Caps] [\typescriptthree-mtmc] [encoding=\typescriptthree]
+ \definefontsynonym [MetaMedium-ItalicCaps] [\typescriptthree-mtmic] [encoding=\typescriptthree]
+ \loadmapfile [\typescriptthree-fontfont-meta.map]
\stoptypescript
\starttypescript [sans] [meta-medium-lf] [texnansi,ec,8r]
-
- \definefontsynonym [MetaMediumLF-Roman] [\typescriptthree-mtmf] [encoding=\typescriptthree]
- \definefontsynonym [MetaMediumLF-Italic] [\typescriptthree-mtmfi] [encoding=\typescriptthree]
- \definefontsynonym [MetaMediumLF-Caps] [\typescriptthree-mtmfc] [encoding=\typescriptthree]
- \definefontsynonym [MetaMediumLF-ItalicCaps] [\typescriptthree-mtmfic] [encoding=\typescriptthree]
-
+ \definefontsynonym [MetaMediumLF-Roman] [\typescriptthree-mtmf] [encoding=\typescriptthree]
+ \definefontsynonym [MetaMediumLF-Italic] [\typescriptthree-mtmfi] [encoding=\typescriptthree]
+ \definefontsynonym [MetaMediumLF-Caps] [\typescriptthree-mtmfc] [encoding=\typescriptthree]
+ \definefontsynonym [MetaMediumLF-ItalicCaps] [\typescriptthree-mtmfic] [encoding=\typescriptthree]
+ \loadmapfile [\typescriptthree-fontfont-meta.map]
\stoptypescript
\starttypescript [sans] [meta-black] [texnansi,ec,8r]
-
- \definefontsynonym [MetaBlack-Roman] [\typescriptthree-mtbl] [encoding=\typescriptthree]
- \definefontsynonym [MetaBlack-Italic] [\typescriptthree-mtbli] [encoding=\typescriptthree]
- \definefontsynonym [MetaBlack-Caps] [\typescriptthree-mtblc] [encoding=\typescriptthree]
- \definefontsynonym [MetaBlack-ItalicCaps] [\typescriptthree-mtblic] [encoding=\typescriptthree]
-
+ \definefontsynonym [MetaBlack-Roman] [\typescriptthree-mtbl] [encoding=\typescriptthree]
+ \definefontsynonym [MetaBlack-Italic] [\typescriptthree-mtbli] [encoding=\typescriptthree]
+ \definefontsynonym [MetaBlack-Caps] [\typescriptthree-mtblc] [encoding=\typescriptthree]
+ \definefontsynonym [MetaBlack-ItalicCaps] [\typescriptthree-mtblic] [encoding=\typescriptthree]
+ \loadmapfile [\typescriptthree-fontfont-meta.map]
\stoptypescript
\starttypescript [sans] [meta-black-lf] [texnansi,ec,8r]
-
- \definefontsynonym [MetaBlackLF-Roman] [\typescriptthree-mtblf] [encoding=\typescriptthree]
- \definefontsynonym [MetaBlackLF-Italic] [\typescriptthree-mtblfi] [encoding=\typescriptthree]
- \definefontsynonym [MetaBlackLF-Caps] [\typescriptthree-mtblfc] [encoding=\typescriptthree]
- \definefontsynonym [MetaBlackLF-ItalicCaps] [\typescriptthree-mtblfic] [encoding=\typescriptthree]
-
+ \definefontsynonym [MetaBlackLF-Roman] [\typescriptthree-mtblf] [encoding=\typescriptthree]
+ \definefontsynonym [MetaBlackLF-Italic] [\typescriptthree-mtblfi] [encoding=\typescriptthree]
+ \definefontsynonym [MetaBlackLF-Caps] [\typescriptthree-mtblfc] [encoding=\typescriptthree]
+ \definefontsynonym [MetaBlackLF-ItalicCaps] [\typescriptthree-mtblfic] [encoding=\typescriptthree]
+ \loadmapfile [\typescriptthree-fontfont-meta.map]
\stoptypescript
\starttypescript [expert] [meta] % incomplete
-
- \definefontsynonym [MetaNormal-Expert] [mtnx]
-
+ \definefontsynonym [MetaNormal-Expert] [mtnx]
+ \loadmapfile [\typescriptthree-fontfont-meta.map]
\stoptypescript
%D Linotype Univers
-\starttypescript [map] [univers] [texnansi]
- \loadmapfile[\typescriptthree-linotype-univers.map]
-\stoptypescript
-
\starttypescript [sans] [univers,univers-light,univers-black] [name]
-
\definefontsynonym [Sans] [Univers]
\definefontsynonym [SansBold] [Univers-Bold]
\definefontsynonym [SansSlanted] [Univers-Oblique]
\definefontsynonym [SansBoldSlanted] [Univers-BoldOblique]
-
\stoptypescript
\starttypescript [sans] [univers-light] [name]
-
\definefontsynonym [Sans] [Univers-Light]
\definefontsynonym [SansSlanted] [Univers-LightOblique]
-
\stoptypescript
\starttypescript [sans] [univers-black] [name]
-
\definefontsynonym [Sans] [Univers-Black]
\definefontsynonym [SansSlanted] [Univers-BlackOblique]
\definefontsynonym [SansBold] [Univers-Black]
\definefontsynonym [SansBoldSlanted] [Univers-BlackOblique]
-
\stoptypescript
\starttypescript [sans] [univers,univers-black,univers-light] [texnansi,ec,8r]
-
- \definefontsynonym [Univers-Light] [\typescriptthree-lt50136] [encoding=\typescriptthree]
- \definefontsynonym [Univers-LightOblique] [\typescriptthree-lt50137] [encoding=\typescriptthree]
-
- \definefontsynonym [Univers] [\typescriptthree-lt50138] [encoding=\typescriptthree]
- \definefontsynonym [Univers-Oblique] [\typescriptthree-lt50139] [encoding=\typescriptthree]
- \definefontsynonym [Univers-Bold] [\typescriptthree-lt50140] [encoding=\typescriptthree]
- \definefontsynonym [Univers-BoldOblique] [\typescriptthree-lt50141] [encoding=\typescriptthree]
-
- \definefontsynonym [Univers-Black] [\typescriptthree-lt50142] [encoding=\typescriptthree]
- \definefontsynonym [Univers-BlackOblique] [\typescriptthree-lt50143] [encoding=\typescriptthree]
-
+ \definefontsynonym [Univers-Light] [\typescriptthree-lt50136] [encoding=\typescriptthree]
+ \definefontsynonym [Univers-LightOblique] [\typescriptthree-lt50137] [encoding=\typescriptthree]
+ \definefontsynonym [Univers] [\typescriptthree-lt50138] [encoding=\typescriptthree]
+ \definefontsynonym [Univers-Oblique] [\typescriptthree-lt50139] [encoding=\typescriptthree]
+ \definefontsynonym [Univers-Bold] [\typescriptthree-lt50140] [encoding=\typescriptthree]
+ \definefontsynonym [Univers-BoldOblique] [\typescriptthree-lt50141] [encoding=\typescriptthree]
+ \definefontsynonym [Univers-Black] [\typescriptthree-lt50142] [encoding=\typescriptthree]
+ \definefontsynonym [Univers-BlackOblique] [\typescriptthree-lt50143] [encoding=\typescriptthree]
+ \loadmapfile[\typescriptthree-linotype-univers.map]
\stoptypescript
% mendoza
-\starttypescript [map] [mendoza] [ec,8r,texnansi]
- \loadmapfile[\typescriptthree-itc-mendoza.map]
-\stoptypescript
-
\starttypescript [serif] [mendoza] [name]
-
\definefontsynonym [Serif] [MendozaRoman-Book]
\definefontsynonym [SerifCaps] [MendozaRoman-Book]
\definefontsynonym [SerifSlanted] [MendozaRoman-BookItalic]
@@ -476,370 +463,241 @@
\definefontsynonym [SerifBold] [MendozaRoman-Bold]
\definefontsynonym [SerifBoldSlanted] [MendozaRoman-BoldItalic]
\definefontsynonym [SerifBoldItalic] [MendozaRoman-BoldItalic]
-
\stoptypescript
\starttypescript [serif] [mendoza] [ec,8r,texnansi]
-
- \definefontsynonym[MendozaRoman-Bold] [\typescriptthree-zab] [encoding=\typescriptthree]
- \definefontsynonym[MendozaRoman-BoldItalic] [\typescriptthree-zabi][encoding=\typescriptthree]
- \definefontsynonym[MendozaRoman-Medium] [\typescriptthree-zam] [encoding=\typescriptthree]
- \definefontsynonym[MendozaRoman-MediumItalic][\typescriptthree-zami][encoding=\typescriptthree]
- \definefontsynonym[MendozaRoman-Book] [\typescriptthree-zaw] [encoding=\typescriptthree]
- \definefontsynonym[MendozaRoman-BookItalic] [\typescriptthree-zawi][encoding=\typescriptthree]
-
+ \definefontsynonym[MendozaRoman-Bold] [\typescriptthree-zab] [encoding=\typescriptthree]
+ \definefontsynonym[MendozaRoman-BoldItalic] [\typescriptthree-zabi][encoding=\typescriptthree]
+ \definefontsynonym[MendozaRoman-Medium] [\typescriptthree-zam] [encoding=\typescriptthree]
+ \definefontsynonym[MendozaRoman-MediumItalic][\typescriptthree-zami][encoding=\typescriptthree]
+ \definefontsynonym[MendozaRoman-Book] [\typescriptthree-zaw] [encoding=\typescriptthree]
+ \definefontsynonym[MendozaRoman-BookItalic] [\typescriptthree-zawi][encoding=\typescriptthree]
+ \loadmapfile[\typescriptthree-itc-mendoza.map]
\stoptypescript
% frutiger
-\starttypescript [map] [frutiger] [ec,8r,texnansi]
- \loadmapfile[\typescriptthree-adobe-frutiger.map]
-\stoptypescript
-
\starttypescript [sans] [frutiger] [name]
-
- \definefontsynonym [Sans] [Frutiger-Roman]
- \definefontsynonym [SansCaps] [Frutiger-Roman]
- \definefontsynonym [SansItalic] [Frutiger-Italic]
- \definefontsynonym [SansSlanted] [Frutiger-Italic]
- \definefontsynonym [SansBold] [Frutiger-Bold]
- \definefontsynonym [SansBoldItalic] [Frutiger-BoldItalic]
- \definefontsynonym [SansBoldSlanted] [Frutiger-BoldItalic]
-
+ \definefontsynonym [Sans] [Frutiger-Roman]
+ \definefontsynonym [SansCaps] [Frutiger-Roman]
+ \definefontsynonym [SansItalic] [Frutiger-Italic]
+ \definefontsynonym [SansSlanted] [Frutiger-Italic]
+ \definefontsynonym [SansBold] [Frutiger-Bold]
+ \definefontsynonym [SansBoldItalic] [Frutiger-BoldItalic]
+ \definefontsynonym [SansBoldSlanted] [Frutiger-BoldItalic]
\stoptypescript
\starttypescript [sans] [frutiger] [ec,8r,texnansi]
-
- \definefontsynonym[Frutiger-Bold] [\typescriptthree-ftb] [encoding=\typescriptthree]
- \definefontsynonym[Frutiger-BoldItalic] [\typescriptthree-ftbi] [encoding=\typescriptthree]
- \definefontsynonym[Frutiger-Black] [\typescriptthree-ftbl] [encoding=\typescriptthree]
- \definefontsynonym[Frutiger-BlackItalic][\typescriptthree-ftbli][encoding=\typescriptthree]
- \definefontsynonym[Frutiger-Italic] [\typescriptthree-fti] [encoding=\typescriptthree]
- \definefontsynonym[Frutiger-Light] [\typescriptthree-ftl] [encoding=\typescriptthree]
- \definefontsynonym[Frutiger-LightItalic][\typescriptthree-ftli] [encoding=\typescriptthree]
- \definefontsynonym[Frutiger-Roman] [\typescriptthree-ftr] [encoding=\typescriptthree]
- \definefontsynonym[Frutiger-UltraBlack] [\typescriptthree-ftubl][encoding=\typescriptthree]
-
+ \definefontsynonym[Frutiger-Bold] [\typescriptthree-ftb] [encoding=\typescriptthree]
+ \definefontsynonym[Frutiger-BoldItalic] [\typescriptthree-ftbi] [encoding=\typescriptthree]
+ \definefontsynonym[Frutiger-Black] [\typescriptthree-ftbl] [encoding=\typescriptthree]
+ \definefontsynonym[Frutiger-BlackItalic][\typescriptthree-ftbli][encoding=\typescriptthree]
+ \definefontsynonym[Frutiger-Italic] [\typescriptthree-fti] [encoding=\typescriptthree]
+ \definefontsynonym[Frutiger-Light] [\typescriptthree-ftl] [encoding=\typescriptthree]
+ \definefontsynonym[Frutiger-LightItalic][\typescriptthree-ftli] [encoding=\typescriptthree]
+ \definefontsynonym[Frutiger-Roman] [\typescriptthree-ftr] [encoding=\typescriptthree]
+ \definefontsynonym[Frutiger-UltraBlack] [\typescriptthree-ftubl][encoding=\typescriptthree]
+ \loadmapfile[\typescriptthree-adobe-frutiger.map]
\stoptypescript
% kabel
-\starttypescript [map] [kabel] [ec,8r,texnansi]
- \loadmapfile [\typescriptthree-itc-kabel.map]
-\stoptypescript
-
-% \starttypescript [sans] [kabel] [name]
-
-% \definefontsynonym [Sans] [ItcKabel-Bold]
-% \definefontsynonym [SansItalic] [ItcKabel-Bold]
-% \definefontsynonym [SansSlanted] [ItcKabel-Bold]
-% \definefontsynonym [SansBold] [ItcKabel-Bold]
-% \definefontsynonym [SansBoldItalic] [ItcKabel-Bold]
-% \definefontsynonym [SansBoldSlanted] [ItcKabel-Bold]
-
-% \stoptypescript
-
\starttypescript [sans] [kabel] [ec,8r,texnansi]
-
- \definefontsynonym [ItcKabel-Bold] [\typescriptthree-kbb] [encoding=\typescriptthree]
- \definefontsynonym [ItcKabel-Demi] [\typescriptthree-kbd] [encoding=\typescriptthree]
- \definefontsynonym [ItcKabel-Medium] [\typescriptthree-kbm] [encoding=\typescriptthree]
- \definefontsynonym [ItcKabel-Ultra] [\typescriptthree-kbu] [encoding=\typescriptthree]
- \definefontsynonym [ItcKabel-Book] [\typescriptthree-kbw] [encoding=\typescriptthree]
-
+ \definefontsynonym [ItcKabel-Bold] [\typescriptthree-kbb] [encoding=\typescriptthree]
+ \definefontsynonym [ItcKabel-Demi] [\typescriptthree-kbd] [encoding=\typescriptthree]
+ \definefontsynonym [ItcKabel-Medium] [\typescriptthree-kbm] [encoding=\typescriptthree]
+ \definefontsynonym [ItcKabel-Ultra] [\typescriptthree-kbu] [encoding=\typescriptthree]
+ \definefontsynonym [ItcKabel-Book] [\typescriptthree-kbw] [encoding=\typescriptthree]
+ \loadmapfile [\typescriptthree-itc-kabel.map]
\stoptypescript
% thesans
-\starttypescript [map] [thesans] [ec,8r,texnansi]
- \loadmapfile[\typescriptthree-lucas-thesans.map]
-\stoptypescript
-
\starttypescript [sans] [thesans] [name]
-
- \definefontsynonym [Sans] [TheSans-Plain]
- \definefontsynonym [SansItalic] [TheSans-Italic]
- \definefontsynonym [SansSlanted] [TheSans-Italic]
- \definefontsynonym [SansBold] [TheSansBold-Plain]
- \definefontsynonym [SansBoldItalic] [TheSansBold-Italic]
- \definefontsynonym [SansBoldSlanted] [TheSansBold-Italic]
-
- \definefontsynonym [SansCaps] [TheSans-Caps]
- \definefontsynonym [SansCapsItalic] [TheSans-CapsItalic]
- \definefontsynonym [SansCapsSlanted] [TheSans-CapsItalic]
- \definefontsynonym [SansCapsBold] [TheSansBold-Caps]
- \definefontsynonym [SansCapsBoldItalic] [TheSansBold-CapsItalic]
- \definefontsynonym [SansCapsBoldSlanted] [TheSansBold-CapsItalic]
-
+ \definefontsynonym [Sans] [TheSans-Plain]
+ \definefontsynonym [SansItalic] [TheSans-Italic]
+ \definefontsynonym [SansSlanted] [TheSans-Italic]
+ \definefontsynonym [SansBold] [TheSansBold-Plain]
+ \definefontsynonym [SansBoldItalic] [TheSansBold-Italic]
+ \definefontsynonym [SansBoldSlanted] [TheSansBold-Italic]
+ \definefontsynonym [SansCaps] [TheSans-Caps]
+ \definefontsynonym [SansCapsItalic] [TheSans-CapsItalic]
+ \definefontsynonym [SansCapsSlanted] [TheSans-CapsItalic]
+ \definefontsynonym [SansCapsBold] [TheSansBold-Caps]
+ \definefontsynonym [SansCapsBoldItalic] [TheSansBold-CapsItalic]
+ \definefontsynonym [SansCapsBoldSlanted] [TheSansBold-CapsItalic]
\stoptypescript
\starttypescript [mono] [thesans] [name]
-
- \definefontsynonym [Mono] [TheSansTypewriter-Plain]
- \definefontsynonym [MonoCaps] [TheSansTypewriter-Plain]
- \definefontsynonym [MonoItalic] [TheSansTypewriter-Italic]
- \definefontsynonym [MonoSlanted] [TheSansTypewriter-Italic]
- \definefontsynonym [MonoBold] [TheSansTypewriter-Bold]
- \definefontsynonym [MonoBoldItalic] [TheSansTypewriter-BoldItalic]
- \definefontsynonym [MonoBoldSlanted] [TheSansTypewriter-BoldItalic]
-
+ \definefontsynonym [Mono] [TheSansTypewriter-Plain]
+ \definefontsynonym [MonoCaps] [TheSansTypewriter-Plain]
+ \definefontsynonym [MonoItalic] [TheSansTypewriter-Italic]
+ \definefontsynonym [MonoSlanted] [TheSansTypewriter-Italic]
+ \definefontsynonym [MonoBold] [TheSansTypewriter-Bold]
+ \definefontsynonym [MonoBoldItalic] [TheSansTypewriter-BoldItalic]
+ \definefontsynonym [MonoBoldSlanted] [TheSansTypewriter-BoldItalic]
\stoptypescript
\starttypescript [sans] [thesans] [ec,8r,texnansi]
-
- \definefontsynonym [TheSans-Plain] [\typescriptthree-tsan5] [encoding=\typescriptthree]
- \definefontsynonym [TheSans-Italic] [\typescriptthree-tsan5i] [encoding=\typescriptthree]
- \definefontsynonym [TheSansBold-Plain] [\typescriptthree-tsan7] [encoding=\typescriptthree]
- \definefontsynonym [TheSansBold-Italic] [\typescriptthree-tsan7i] [encoding=\typescriptthree]
-
- \definefontsynonym [TheSans-Caps] [\typescriptthree-tsan5c] [encoding=\typescriptthree]
- \definefontsynonym [TheSans-CapsItalic] [\typescriptthree-tsan5ci] [encoding=\typescriptthree]
- \definefontsynonym [TheSansBold-Caps] [\typescriptthree-tsan7c] [encoding=\typescriptthree]
- \definefontsynonym [TheSansBold-CapsItalic] [\typescriptthree-tsan7ci] [encoding=\typescriptthree]
-
-% \definefontsynonym[TheSans-B2ExtraLight] [\typescriptthree-thesnb2] [encoding=\typescriptthree]
-% \definefontsynonym[TheSans-B2ExtraLightItalic] [\typescriptthree-thesnb2i] [encoding=\typescriptthree]
-% \definefontsynonym[TheSans-B3Light] [\typescriptthree-thesnb3] [encoding=\typescriptthree]
-% \definefontsynonym[TheSans-B3LightItalic] [\typescriptthree-thesnb3i] [encoding=\typescriptthree]
-% \definefontsynonym[TheSans-B4SemiLight] [\typescriptthree-thesnb4] [encoding=\typescriptthree]
-% \definefontsynonym[TheSans-B4SemiLightItalic] [\typescriptthree-thesnb4i] [encoding=\typescriptthree]
-% \definefontsynonym[TheSans-B5Plain] [\typescriptthree-thesnb5] [encoding=\typescriptthree]
-% \definefontsynonym[TheSans-B5PlainItalic] [\typescriptthree-thesnb5i] [encoding=\typescriptthree]
-% \definefontsynonym[TheSans-B6SemiBold] [\typescriptthree-thesnb6] [encoding=\typescriptthree]
-% \definefontsynonym[TheSans-B6SemiBoldItalic] [\typescriptthree-thesnb6i] [encoding=\typescriptthree]
-% \definefontsynonym[TheSans-B7Bold] [\typescriptthree-thesnb7] [encoding=\typescriptthree]
-% \definefontsynonym[TheSans-B7BoldItalic] [\typescriptthree-thesnb7i] [encoding=\typescriptthree]
-% \definefontsynonym[TheSans-B8ExtraBold] [\typescriptthree-thesnb8] [encoding=\typescriptthree]
-% \definefontsynonym[TheSans-B8ExtraBoldItalic] [\typescriptthree-thesnb8i] [encoding=\typescriptthree]
-% \definefontsynonym[TheSans-B8ExtraBoldItalic] [\typescriptthree-thesnb8i] [encoding=\typescriptthree]
-% \definefontsynonym[TheSans-B9Black] [\typescriptthree-thesnb9] [encoding=\typescriptthree]
-% \definefontsynonym[TheSans-B9BlackItalic] [\typescriptthree-thesnb9i] [encoding=\typescriptthree]
-
+ \definefontsynonym [TheSans-Plain] [\typescriptthree-tsan5] [encoding=\typescriptthree]
+ \definefontsynonym [TheSans-Italic] [\typescriptthree-tsan5i] [encoding=\typescriptthree]
+ \definefontsynonym [TheSansBold-Plain] [\typescriptthree-tsan7] [encoding=\typescriptthree]
+ \definefontsynonym [TheSansBold-Italic] [\typescriptthree-tsan7i] [encoding=\typescriptthree]
+ \definefontsynonym [TheSans-Caps] [\typescriptthree-tsan5c] [encoding=\typescriptthree]
+ \definefontsynonym [TheSans-CapsItalic] [\typescriptthree-tsan5ci] [encoding=\typescriptthree]
+ \definefontsynonym [TheSansBold-Caps] [\typescriptthree-tsan7c] [encoding=\typescriptthree]
+ \definefontsynonym [TheSansBold-CapsItalic] [\typescriptthree-tsan7ci] [encoding=\typescriptthree]
+ \loadmapfile[\typescriptthree-lucas-thesans.map]
\stoptypescript
\starttypescript [mono] [thesans] [ec,8r,texnansi]
-
- \definefontsynonym [TheSansTypewriter-Plain] [\typescriptthree-tsaty5] [encoding=\typescriptthree]
- \definefontsynonym [TheSansTypewriter-Italic] [\typescriptthree-tsaty5i] [encoding=\typescriptthree]
- \definefontsynonym [TheSansTypewriter-Bold] [\typescriptthree-tsaty7] [encoding=\typescriptthree]
- \definefontsynonym [TheSansTypewriter-BoldItalic] [\typescriptthree-tsaty7i] [encoding=\typescriptthree]
-
+ \definefontsynonym [TheSansTypewriter-Plain] [\typescriptthree-tsaty5] [encoding=\typescriptthree]
+ \definefontsynonym [TheSansTypewriter-Italic] [\typescriptthree-tsaty5i] [encoding=\typescriptthree]
+ \definefontsynonym [TheSansTypewriter-Bold] [\typescriptthree-tsaty7] [encoding=\typescriptthree]
+ \definefontsynonym [TheSansTypewriter-BoldItalic] [\typescriptthree-tsaty7i] [encoding=\typescriptthree]
+ \loadmapfile[\typescriptthree-lucas-thesans.map]
\stoptypescript
\starttypescript [expert] [thesans]
-
- \definefontsynonym [TheSans-Expert] [tsan5e] [encoding=\typescriptthree]
- \definefontsynonym [TheSans-ExpertItalic] [tsan5ei] [encoding=\typescriptthree]
- \definefontsynonym [TheSansBold-Expert] [tsan7e] [encoding=\typescriptthree]
- \definefontsynonym [TheSansBold-ExpertItalic] [tsan7ei] [encoding=\typescriptthree]
-
+ \definefontsynonym [TheSans-Expert] [tsan5e] [encoding=\typescriptthree]
+ \definefontsynonym [TheSans-ExpertItalic] [tsan5ei] [encoding=\typescriptthree]
+ \definefontsynonym [TheSansBold-Expert] [tsan7e] [encoding=\typescriptthree]
+ \definefontsynonym [TheSansBold-ExpertItalic] [tsan7ei] [encoding=\typescriptthree]
+ \loadmapfile[\typescriptthree-lucas-thesans.map]
\stoptypescript
% monotype sabon
-\starttypescript [map] [sabon] [ec,8r,texnansi]
- \loadmapfile[\typescriptthree-monotype-sabon.map]
-\stoptypescript
-
\starttypescript [serif] [sabon] [name]
-
- \definefontsynonym [Serif] [SabonMT]
- \definefontsynonym [SerifItalic] [SabonMT-Italic]
- \definefontsynonym [SerifSlanted] [SabonMT-Italic]
- \definefontsynonym [SerifBold] [SabonMT-SemiBold]
- \definefontsynonym [SerifBoldItalic] [SabonMT-SemiBoldItalic]
- \definefontsynonym [SerifBoldSlanted] [SabonMT-SemiBoldItalic]
- \definefontsynonym [SerifCaps] [SabonMT-RegularSC]
-
+ \definefontsynonym [Serif] [SabonMT]
+ \definefontsynonym [SerifItalic] [SabonMT-Italic]
+ \definefontsynonym [SerifSlanted] [SabonMT-Italic]
+ \definefontsynonym [SerifBold] [SabonMT-SemiBold]
+ \definefontsynonym [SerifBoldItalic] [SabonMT-SemiBoldItalic]
+ \definefontsynonym [SerifBoldSlanted] [SabonMT-SemiBoldItalic]
+ \definefontsynonym [SerifCaps] [SabonMT-RegularSC]
\stoptypescript
\starttypescript [serif] [sabon] [ec,8r,texnansi]
-
- \definefontsynonym[SabonMT] [\typescriptthree-sab] [encoding=\typescriptthree]
- \definefontsynonym[SabonMT-Italic] [\typescriptthree-sabi] [encoding=\typescriptthree]
- \definefontsynonym[SabonMT-ItalicOsF] [\typescriptthree-saboi][encoding=\typescriptthree]
- \definefontsynonym[SabonMT-SemiBoldOsF] [\typescriptthree-sabos][encoding=\typescriptthree]
- \definefontsynonym[SabonMT-SemiBold] [\typescriptthree-sabs] [encoding=\typescriptthree]
- \definefontsynonym[SabonMT-RegularSC] [\typescriptthree-sabsc][encoding=\typescriptthree]
- \definefontsynonym[SabonMT-SemiBoldItalic] [\typescriptthree-sabsi][encoding=\typescriptthree]
- \definefontsynonym[SabonMT-SemiBoldItalicOsF][\typescriptthree-sasio][encoding=\typescriptthree]
-
+ \definefontsynonym[SabonMT] [\typescriptthree-sab] [encoding=\typescriptthree]
+ \definefontsynonym[SabonMT-Italic] [\typescriptthree-sabi] [encoding=\typescriptthree]
+ \definefontsynonym[SabonMT-ItalicOsF] [\typescriptthree-saboi][encoding=\typescriptthree]
+ \definefontsynonym[SabonMT-SemiBoldOsF] [\typescriptthree-sabos][encoding=\typescriptthree]
+ \definefontsynonym[SabonMT-SemiBold] [\typescriptthree-sabs] [encoding=\typescriptthree]
+ \definefontsynonym[SabonMT-RegularSC] [\typescriptthree-sabsc][encoding=\typescriptthree]
+ \definefontsynonym[SabonMT-SemiBoldItalic] [\typescriptthree-sabsi][encoding=\typescriptthree]
+ \definefontsynonym[SabonMT-SemiBoldItalicOsF][\typescriptthree-sasio][encoding=\typescriptthree]
+ \loadmapfile[\typescriptthree-monotype-sabon.map]
\stoptypescript
% itc stone
-\starttypescript [map] [stone] [ec,texnansi]
- \loadmapfile[\typescriptthree-itc-stone.map]
-\stoptypescript
-
-% less readable but less parsing
-%
-% \starttypescript [sans,serif] [stone] [name]
-%
-% \definefontsynonym [\typescriptprefix\typescriptone ] [Stone\typescriptprefix\typescriptone ITC-Medium]
-% \definefontsynonym [\typescriptprefix\typescriptone Italic] [Stone\typescriptprefix\typescriptone ITC-MediumItalic]
-% \definefontsynonym [\typescriptprefix\typescriptone Slanted] [Stone\typescriptprefix\typescriptone ITC-MediumItalic]
-% \definefontsynonym [\typescriptprefix\typescriptone Bold] [Stone\typescriptprefix\typescriptone ITC-Bold]
-% \definefontsynonym [\typescriptprefix\typescriptone BoldItalic] [Stone\typescriptprefix\typescriptone ITC-BoldItalic]
-% \definefontsynonym [\typescriptprefix\typescriptone BoldSlanted] [Stone\typescriptprefix\typescriptone ITC-BoldItalic]
-% \definefontsynonym [\typescriptprefix\typescriptone Caps] [Stone\typescriptprefix\typescriptone SCITC-Medium]
-%
-% \stoptypescript
-
\starttypescript [sans] [stone] [name]
-
- \definefontsynonym [Sans] [StoneSansITC-Medium]
- \definefontsynonym [SansItalic] [StoneSansITC-MediumItalic]
- \definefontsynonym [SansSlanted] [StoneSansITC-MediumItalic]
- \definefontsynonym [SansBold] [StoneSansITC-Bold]
- \definefontsynonym [SansBoldItalic] [StoneSansITC-BoldItalic]
- \definefontsynonym [SansBoldSlanted] [StoneSansITC-BoldItalic]
- \definefontsynonym [SansCaps] [StoneSansSCITC-Medium]
-
+ \definefontsynonym [Sans] [StoneSansITC-Medium]
+ \definefontsynonym [SansItalic] [StoneSansITC-MediumItalic]
+ \definefontsynonym [SansSlanted] [StoneSansITC-MediumItalic]
+ \definefontsynonym [SansBold] [StoneSansITC-Bold]
+ \definefontsynonym [SansBoldItalic] [StoneSansITC-BoldItalic]
+ \definefontsynonym [SansBoldSlanted] [StoneSansITC-BoldItalic]
+ \definefontsynonym [SansCaps] [StoneSansSCITC-Medium]
\stoptypescript
\starttypescript [serif] [stone] [name]
-
- \definefontsynonym [Serif] [StoneSerifITC-Medium]
- \definefontsynonym [SerifItalic] [StoneSerifITC-MediumItalic]
- \definefontsynonym [SerifSlanted] [StoneSerifITC-MediumItalic]
- \definefontsynonym [SerifBold] [StoneSerifITC-Bold]
- \definefontsynonym [SerifBoldItalic] [StoneSerifITC-BoldItalic]
- \definefontsynonym [SerifBoldSlanted] [StoneSerifITC-BoldItalic]
- \definefontsynonym [SerifCaps] [StoneSerifSCITC-Medium]
-
+ \definefontsynonym [Serif] [StoneSerifITC-Medium]
+ \definefontsynonym [SerifItalic] [StoneSerifITC-MediumItalic]
+ \definefontsynonym [SerifSlanted] [StoneSerifITC-MediumItalic]
+ \definefontsynonym [SerifBold] [StoneSerifITC-Bold]
+ \definefontsynonym [SerifBoldItalic] [StoneSerifITC-BoldItalic]
+ \definefontsynonym [SerifBoldSlanted] [StoneSerifITC-BoldItalic]
+ \definefontsynonym [SerifCaps] [StoneSerifSCITC-Medium]
\stoptypescript
\starttypescript [sans] [stone-oldstyle] [name]
-
- \definefontsynonym [Sans] [StoneSansOSITC-Medium]
- \definefontsynonym [SansItalic] [StoneSansOSITC-MediumItalic]
- \definefontsynonym [SansSlanted] [StoneSansOSITC-MediumItalic]
- \definefontsynonym [SansBold] [StoneSansOSITC-Bold]
- \definefontsynonym [SansBoldItalic] [StoneSansOSITC-BoldItalic]
- \definefontsynonym [SansBoldSlanted] [StoneSansOSITC-BoldItalic]
- \definefontsynonym [SansCaps] [StoneSansSCITC-Medium]
-
+ \definefontsynonym [Sans] [StoneSansOSITC-Medium]
+ \definefontsynonym [SansItalic] [StoneSansOSITC-MediumItalic]
+ \definefontsynonym [SansSlanted] [StoneSansOSITC-MediumItalic]
+ \definefontsynonym [SansBold] [StoneSansOSITC-Bold]
+ \definefontsynonym [SansBoldItalic] [StoneSansOSITC-BoldItalic]
+ \definefontsynonym [SansBoldSlanted] [StoneSansOSITC-BoldItalic]
+ \definefontsynonym [SansCaps] [StoneSansSCITC-Medium]
\stoptypescript
\starttypescript [serif] [stone-oldstyle] [name]
-
- \definefontsynonym [Serif] [StoneSerifOSITC-Medium]
- \definefontsynonym [SerifItalic] [StoneSerifOSITC-MediumItalic]
- \definefontsynonym [SerifSlanted] [StoneSerifOSITC-MediumItalic]
- \definefontsynonym [SerifBold] [StoneSerifOSITC-Bold]
- \definefontsynonym [SerifBoldItalic] [StoneSerifOSITC-BoldItalic]
- \definefontsynonym [SerifBoldSlanted] [StoneSerifOSITC-BoldItalic]
- \definefontsynonym [SerifCaps] [StoneSerifSCITC-Medium]
-
+ \definefontsynonym [Serif] [StoneSerifOSITC-Medium]
+ \definefontsynonym [SerifItalic] [StoneSerifOSITC-MediumItalic]
+ \definefontsynonym [SerifSlanted] [StoneSerifOSITC-MediumItalic]
+ \definefontsynonym [SerifBold] [StoneSerifOSITC-Bold]
+ \definefontsynonym [SerifBoldItalic] [StoneSerifOSITC-BoldItalic]
+ \definefontsynonym [SerifBoldSlanted] [StoneSerifOSITC-BoldItalic]
+ \definefontsynonym [SerifCaps] [StoneSerifSCITC-Medium]
\stoptypescript
\starttypescript [sans] [stone] [ec,texnansi]
-
- \definefontsynonym[StoneSansITC-Bold] [\typescriptthree-stosnb] [encoding=\typescriptthree]
- \definefontsynonym[StoneSansITC-BoldItalic] [\typescriptthree-stosnbi] [encoding=\typescriptthree]
- \definefontsynonym[StoneSansITC-Medium] [\typescriptthree-stosnm] [encoding=\typescriptthree]
- \definefontsynonym[StoneSansITC-MediumItalic] [\typescriptthree-stosnmi] [encoding=\typescriptthree]
- \definefontsynonym[StoneSansOSITC-Bold] [\typescriptthree-stosnob] [encoding=\typescriptthree]
- \definefontsynonym[StoneSansOSITC-BoldItalic] [\typescriptthree-stosnobi][encoding=\typescriptthree]
- \definefontsynonym[StoneSansOSITC-Medium] [\typescriptthree-stosnom] [encoding=\typescriptthree]
- \definefontsynonym[StoneSansOSITC-MediumItalic][\typescriptthree-stosnomi][encoding=\typescriptthree]
- \definefontsynonym[StoneSansSCITC-Medium] [\typescriptthree-stosnscm][encoding=\typescriptthree]
- \definefontsynonym[StoneSansSemITC-Semi] [\typescriptthree-stosns] [encoding=\typescriptthree]
- \definefontsynonym[StoneSansSemITC-SemiIta] [\typescriptthree-stosnsi] [encoding=\typescriptthree]
- \definefontsynonym[StoneSansSemOSITC-Semi] [\typescriptthree-stosnos] [encoding=\typescriptthree]
- \definefontsynonym[StoneSansSemOSITC-SemiIta] [\typescriptthree-stosnosi][encoding=\typescriptthree]
- \definefontsynonym[StoneSansSemSCITC-Semi] [\typescriptthree-stosnscs][encoding=\typescriptthree]
-
+ \definefontsynonym[StoneSansITC-Bold] [\typescriptthree-stosnb] [encoding=\typescriptthree]
+ \definefontsynonym[StoneSansITC-BoldItalic] [\typescriptthree-stosnbi] [encoding=\typescriptthree]
+ \definefontsynonym[StoneSansITC-Medium] [\typescriptthree-stosnm] [encoding=\typescriptthree]
+ \definefontsynonym[StoneSansITC-MediumItalic] [\typescriptthree-stosnmi] [encoding=\typescriptthree]
+ \definefontsynonym[StoneSansOSITC-Bold] [\typescriptthree-stosnob] [encoding=\typescriptthree]
+ \definefontsynonym[StoneSansOSITC-BoldItalic] [\typescriptthree-stosnobi][encoding=\typescriptthree]
+ \definefontsynonym[StoneSansOSITC-Medium] [\typescriptthree-stosnom] [encoding=\typescriptthree]
+ \definefontsynonym[StoneSansOSITC-MediumItalic][\typescriptthree-stosnomi][encoding=\typescriptthree]
+ \definefontsynonym[StoneSansSCITC-Medium] [\typescriptthree-stosnscm][encoding=\typescriptthree]
+ \definefontsynonym[StoneSansSemITC-Semi] [\typescriptthree-stosns] [encoding=\typescriptthree]
+ \definefontsynonym[StoneSansSemITC-SemiIta] [\typescriptthree-stosnsi] [encoding=\typescriptthree]
+ \definefontsynonym[StoneSansSemOSITC-Semi] [\typescriptthree-stosnos] [encoding=\typescriptthree]
+ \definefontsynonym[StoneSansSemOSITC-SemiIta] [\typescriptthree-stosnosi][encoding=\typescriptthree]
+ \definefontsynonym[StoneSansSemSCITC-Semi] [\typescriptthree-stosnscs][encoding=\typescriptthree]
+ \loadmapfile[\typescriptthree-itc-stone.map]
\stoptypescript
\starttypescript [serif] [stone] [ec,texnansi]
-
- \definefontsynonym[StoneSerifITC-Bold] [\typescriptthree-stosfb] [encoding=\typescriptthree]
- \definefontsynonym[StoneSerifITC-BoldItalic] [\typescriptthree-stosfbi] [encoding=\typescriptthree]
- \definefontsynonym[StoneSerifITC-Medium] [\typescriptthree-stosfm] [encoding=\typescriptthree]
- \definefontsynonym[StoneSerifITC-MediumItalic] [\typescriptthree-stosfmi] [encoding=\typescriptthree]
- \definefontsynonym[StoneSerifOSITC-Bold] [\typescriptthree-stosfob] [encoding=\typescriptthree]
- \definefontsynonym[StoneSerifOSITC-BoldItalic] [\typescriptthree-stosfobi][encoding=\typescriptthree]
- \definefontsynonym[StoneSerifOSITC-Medium] [\typescriptthree-stosfom] [encoding=\typescriptthree]
- \definefontsynonym[StoneSerifOSITC-MediumItalic][\typescriptthree-stosfomi][encoding=\typescriptthree]
- \definefontsynonym[StoneSerifSCITC-Medium] [\typescriptthree-stosfscm][encoding=\typescriptthree]
- \definefontsynonym[StoneSerifSemITC-Semi] [\typescriptthree-stosfs] [encoding=\typescriptthree]
- \definefontsynonym[StoneSerifSemITC-SemiIta] [\typescriptthree-stosfsi] [encoding=\typescriptthree]
- \definefontsynonym[StoneSerifSemOSITC-Semi] [\typescriptthree-stosfos] [encoding=\typescriptthree]
- \definefontsynonym[StoneSerifSemOSITC-SemiIta] [\typescriptthree-stosfosi][encoding=\typescriptthree]
- \definefontsynonym[StoneSerifSemSCITC-Semi] [\typescriptthree-stosfscs][encoding=\typescriptthree]
-
+ \definefontsynonym[StoneSerifITC-Bold] [\typescriptthree-stosfb] [encoding=\typescriptthree]
+ \definefontsynonym[StoneSerifITC-BoldItalic] [\typescriptthree-stosfbi] [encoding=\typescriptthree]
+ \definefontsynonym[StoneSerifITC-Medium] [\typescriptthree-stosfm] [encoding=\typescriptthree]
+ \definefontsynonym[StoneSerifITC-MediumItalic] [\typescriptthree-stosfmi] [encoding=\typescriptthree]
+ \definefontsynonym[StoneSerifOSITC-Bold] [\typescriptthree-stosfob] [encoding=\typescriptthree]
+ \definefontsynonym[StoneSerifOSITC-BoldItalic] [\typescriptthree-stosfobi][encoding=\typescriptthree]
+ \definefontsynonym[StoneSerifOSITC-Medium] [\typescriptthree-stosfom] [encoding=\typescriptthree]
+ \definefontsynonym[StoneSerifOSITC-MediumItalic][\typescriptthree-stosfomi][encoding=\typescriptthree]
+ \definefontsynonym[StoneSerifSCITC-Medium] [\typescriptthree-stosfscm][encoding=\typescriptthree]
+ \definefontsynonym[StoneSerifSemITC-Semi] [\typescriptthree-stosfs] [encoding=\typescriptthree]
+ \definefontsynonym[StoneSerifSemITC-SemiIta] [\typescriptthree-stosfsi] [encoding=\typescriptthree]
+ \definefontsynonym[StoneSerifSemOSITC-Semi] [\typescriptthree-stosfos] [encoding=\typescriptthree]
+ \definefontsynonym[StoneSerifSemOSITC-SemiIta] [\typescriptthree-stosfosi][encoding=\typescriptthree]
+ \definefontsynonym[StoneSerifSemSCITC-Semi] [\typescriptthree-stosfscs][encoding=\typescriptthree]
+ \loadmapfile[\typescriptthree-itc-stone.map]
\stoptypescript
% linotype industria
-\starttypescript [map] [industria] [ec,texnansi]
- \loadmapfile[\typescriptthree-linotype-industria.map]
-\stoptypescript
-
\starttypescript [sans] [industria] [ec,texnansi]
-
- \loadmapfile[\typescriptthree-linotype-industria.map]
-
- \definefontsynonym[Industria-Solid][\typescriptthree-lt50545][encoding=\typescriptthree]
-
+ \definefontsynonym[Industria-Solid][\typescriptthree-lt50545][encoding=\typescriptthree]
+ \loadmapfile[\typescriptthree-linotype-industria.map]
\stoptypescript
% itc bauhaus
%
% texfont --enc=texnansi --ven=itc --col=bauhaus type-buy.dat
-\starttypescript [map] [bauhaus] [ec,texnansi]
- \loadmapfile[\typescriptthree-itc-bauhaus.map]
-\stoptypescript
-
\starttypescript [sans] [bauhaus] [ec,texnansi]
-
- \loadmapfile[\typescriptthree-itc-bauhaus.map]
-
- \definefontsynonym[Bauhaus-Light] [\typescriptthree-bhl] [encoding=\typescriptthree]
- \definefontsynonym[Bauhaus-Medium] [\typescriptthree-bhm] [encoding=\typescriptthree]
- \definefontsynonym[Bauhaus-Demi] [\typescriptthree-bhd] [encoding=\typescriptthree]
- \definefontsynonym[Bauhaus-Bold] [\typescriptthree-bhb] [encoding=\typescriptthree]
- \definefontsynonym[Bauhaus-Heavy] [\typescriptthree-bhh] [encoding=\typescriptthree]
-
- \definefontsynonym[Bauhaus-Bold-Slanted] [\typescriptthree-bhb-slanted-167][encoding=\typescriptthree]
- \definefontsynonym[Bauhaus-Demi-Slanted] [\typescriptthree-bhd-slanted-167][encoding=\typescriptthree]
- \definefontsynonym[Bauhaus-Heavy-Slanted] [\typescriptthree-bhh-slanted-167][encoding=\typescriptthree]
- \definefontsynonym[Bauhaus-Light-Slanted] [\typescriptthree-bhl-slanted-167][encoding=\typescriptthree]
- \definefontsynonym[Bauhaus-Medium-Slanted][\typescriptthree-bhm-slanted-167][encoding=\typescriptthree]
-
+ \definefontsynonym[Bauhaus-Light] [\typescriptthree-bhl] [encoding=\typescriptthree]
+ \definefontsynonym[Bauhaus-Medium] [\typescriptthree-bhm] [encoding=\typescriptthree]
+ \definefontsynonym[Bauhaus-Demi] [\typescriptthree-bhd] [encoding=\typescriptthree]
+ \definefontsynonym[Bauhaus-Bold] [\typescriptthree-bhb] [encoding=\typescriptthree]
+ \definefontsynonym[Bauhaus-Heavy] [\typescriptthree-bhh] [encoding=\typescriptthree]
+ \definefontsynonym[Bauhaus-Bold-Slanted] [\typescriptthree-bhb-slanted-167][encoding=\typescriptthree]
+ \definefontsynonym[Bauhaus-Demi-Slanted] [\typescriptthree-bhd-slanted-167][encoding=\typescriptthree]
+ \definefontsynonym[Bauhaus-Heavy-Slanted] [\typescriptthree-bhh-slanted-167][encoding=\typescriptthree]
+ \definefontsynonym[Bauhaus-Light-Slanted] [\typescriptthree-bhl-slanted-167][encoding=\typescriptthree]
+ \definefontsynonym[Bauhaus-Medium-Slanted][\typescriptthree-bhm-slanted-167][encoding=\typescriptthree]
+ \loadmapfile[\typescriptthree-itc-bauhaus.map]
\stoptypescript
-
% ef swift
%
% texfont --enc=texnansi --ven=ef --col=swift type-buy.dat
-\starttypescript [map] [swift] [ec,texnansi]
- \loadmapfile[\typescriptthree-itc-bauhaus.map]
-\stoptypescript
-
-\starttypescript [serif] [swift] [ec,texnansi]
-
- \loadmapfile[\typescriptthree-ef-swift.map]
-
- \definefontsynonym[SwiftEF-Light] [\typescriptthree-swlt] [encoding=\typescriptthree]
- \definefontsynonym[SwiftEF-Regular] [\typescriptthree-swrg] [encoding=\typescriptthree]
- \definefontsynonym[SwiftEF-Bold] [\typescriptthree-swbd] [encoding=\typescriptthree]
- \definefontsynonym[SwiftEF-ExtraBold] [\typescriptthree-swxb] [encoding=\typescriptthree]
-
- \definefontsynonym[SwiftEF-LightItalic] [\typescriptthree-swlti][encoding=\typescriptthree]
- \definefontsynonym[SwiftEF-RegularItalic][\typescriptthree-swrgi][encoding=\typescriptthree]
-
- \definefontsynonym[SwiftEF-BoldCondensed][\typescriptthree-swbdc][encoding=\typescriptthree]
- \definefontsynonym[SwiftSCEF-Regular] [\typescriptthree-swrgs][encoding=\typescriptthree]
-
-\stoptypescript
-
\starttypescript [serif] [swift] [name]
-
\definefontsynonym [Serif] [SwiftEF-Regular]
\definefontsynonym [SerifItalic] [SwiftEF-RegularItalic]
\definefontsynonym [SerifSlanted] [SwiftEF-RegularItalic]
@@ -847,11 +705,9 @@
\definefontsynonym [SerifBoldItalic] [SwiftEF-Bold]
\definefontsynonym [SerifBoldSlanted] [SwiftEF-Bold]
\definefontsynonym [SerifCaps] [SwiftSCEF-Regular]
-
\stoptypescript
\starttypescript [serif] [swift-light] [name]
-
\definefontsynonym [Serif] [SwiftEF-Light]
\definefontsynonym [SerifItalic] [SwiftEF-LightItalic]
\definefontsynonym [SerifSlanted] [SwiftEF-LightItalic]
@@ -859,63 +715,59 @@
\definefontsynonym [SerifBoldItalic] [SwiftEF-RegularItalic]
\definefontsynonym [SerifBoldSlanted] [SwiftEF-RegularItalic]
\definefontsynonym [SerifCaps] [SwiftSCEF-Regular]
+\stoptypescript
+\starttypescript [serif] [swift] [ec,texnansi]
+ \definefontsynonym[SwiftEF-Light] [\typescriptthree-swlt] [encoding=\typescriptthree]
+ \definefontsynonym[SwiftEF-Regular] [\typescriptthree-swrg] [encoding=\typescriptthree]
+ \definefontsynonym[SwiftEF-Bold] [\typescriptthree-swbd] [encoding=\typescriptthree]
+ \definefontsynonym[SwiftEF-ExtraBold] [\typescriptthree-swxb] [encoding=\typescriptthree]
+ \definefontsynonym[SwiftEF-LightItalic] [\typescriptthree-swlti][encoding=\typescriptthree]
+ \definefontsynonym[SwiftEF-RegularItalic][\typescriptthree-swrgi][encoding=\typescriptthree]
+ \definefontsynonym[SwiftEF-BoldCondensed][\typescriptthree-swbdc][encoding=\typescriptthree]
+ \definefontsynonym[SwiftSCEF-Regular] [\typescriptthree-swrgs][encoding=\typescriptthree]
+ \loadmapfile[\typescriptthree-ef-swift.map]
\stoptypescript
% linotype syntax
-\starttypescript [sans] [syntax] [ec,texnansi]
-
- \loadmapfile[\typescriptthree-linotype-syntax.map]
-
- \definefontsynonym [SyntaxLT-Roman] [\typescriptthree-lte50617] [encoding=\typescriptthree]
- \definefontsynonym [SyntaxLT-Italic] [\typescriptthree-lte50618] [encoding=\typescriptthree]
- \definefontsynonym [SyntaxLT-Bold] [\typescriptthree-lte50619] [encoding=\typescriptthree]
- \definefontsynonym [SyntaxLT-Black] [\typescriptthree-lte50620] [encoding=\typescriptthree]
- \definefontsynonym [SyntaxLT-UltraBlack] [\typescriptthree-lte50621] [encoding=\typescriptthree]
-
-\stoptypescript
-
\starttypescript [sans] [syntax] [name]
-
- \loadmapfile[\typescriptthree-linotype-syntax.map]
-
\definefontsynonym [Sans] [SyntaxLT-Roman]
\definefontsynonym [SansItalic] [SyntaxLT-Italic]
\definefontsynonym [SansSlanted] [SyntaxLT-Italic]
\definefontsynonym [SansBold] [SyntaxLT-Black]
\definefontsynonym [SansBoldItalic] [SyntaxLT-Black]
\definefontsynonym [SansBoldSlanted][SyntaxLT-Black]
+\stoptypescript
+\starttypescript [sans] [syntax] [ec,texnansi]
+ \definefontsynonym [SyntaxLT-Roman] [\typescriptthree-lte50617] [encoding=\typescriptthree]
+ \definefontsynonym [SyntaxLT-Italic] [\typescriptthree-lte50618] [encoding=\typescriptthree]
+ \definefontsynonym [SyntaxLT-Bold] [\typescriptthree-lte50619] [encoding=\typescriptthree]
+ \definefontsynonym [SyntaxLT-Black] [\typescriptthree-lte50620] [encoding=\typescriptthree]
+ \definefontsynonym [SyntaxLT-UltraBlack] [\typescriptthree-lte50621] [encoding=\typescriptthree]
+ \loadmapfile[\typescriptthree-linotype-syntax.map]
\stoptypescript
% linotype linoletter
-\starttypescript [serif] [linoletter] [ec,texnansi]
-
- \loadmapfile[\typescriptthree-linotype-linoletter.map]
-
- \definefontsynonym[LinoLetterLT-Roman] [texnansi-lte51129] [encoding=\typescriptthree]
- \definefontsynonym[LinoLetterLT-Italic] [texnansi-lte51130] [encoding=\typescriptthree]
- \definefontsynonym[LinoLetterLT-Bold] [texnansi-lte51133] [encoding=\typescriptthree]
- \definefontsynonym[LinoLetterLT-BoldItalic] [texnansi-lte51134] [encoding=\typescriptthree]
-
- \definefontsynonym[LinoLetterLT-BlackItalic] [texnansi-lte51136] [encoding=\typescriptthree]
- \definefontsynonym[LinoLetter-MediumSC] [texnansi-llmsc] [encoding=\typescriptthree]
-
-\stoptypescript
-
\starttypescript [serif] [linoletter] [name]
+ \definefontsynonym [Serif] [LinoLetterLT-Roman]
+ \definefontsynonym [SerifItalic] [LinoLetterLT-Italic]
+ \definefontsynonym [SerifSlanted] [LinoLetterLT-Italic]
+ \definefontsynonym [SerifBold] [LinoLetterLT-Bold]
+ \definefontsynonym [SerifBoldItalic] [LinoLetterLT-BoldItalic]
+ \definefontsynonym [SerifBoldSlanted][LinoLetterLT-BoldItalic]
+\stoptypescript
- \loadmapfile[\typescriptthree-linotype-linoletter.map]
-
- \definefontsynonym [Serif] [LinoLetterLT-Roman]
- \definefontsynonym [SerifItalic] [LinoLetterLT-Italic]
- \definefontsynonym [SerifSlanted] [LinoLetterLT-Italic]
- \definefontsynonym [SerifBold] [LinoLetterLT-Bold]
- \definefontsynonym [SerifBoldItalic] [LinoLetterLT-BoldItalic]
- \definefontsynonym [SerifBoldSlanted][LinoLetterLT-BoldItalic]
-
+\starttypescript [serif] [linoletter] [ec,texnansi]
+ \definefontsynonym[LinoLetterLT-Roman] [texnansi-lte51129] [encoding=\typescriptthree]
+ \definefontsynonym[LinoLetterLT-Italic] [texnansi-lte51130] [encoding=\typescriptthree]
+ \definefontsynonym[LinoLetterLT-Bold] [texnansi-lte51133] [encoding=\typescriptthree]
+ \definefontsynonym[LinoLetterLT-BoldItalic] [texnansi-lte51134] [encoding=\typescriptthree]
+ \definefontsynonym[LinoLetterLT-BlackItalic] [texnansi-lte51136] [encoding=\typescriptthree]
+ \definefontsynonym[LinoLetter-MediumSC] [texnansi-llmsc] [encoding=\typescriptthree]
+ \loadmapfile[\typescriptthree-linotype-linoletter.map]
\stoptypescript
\stoptypescriptcollection
diff --git a/Master/texmf-dist/tex/context/base/type-cbg.tex b/Master/texmf-dist/tex/context/base/type-cbg.tex
index 1c041376b25..93cfa077ece 100644
--- a/Master/texmf-dist/tex/context/base/type-cbg.tex
+++ b/Master/texmf-dist/tex/context/base/type-cbg.tex
@@ -33,90 +33,82 @@
\starttypescriptcollection[cbgreek]
\starttypescript [serif] [cbgreek] [name]
-
- \definefontsynonym [CBGreek-Regular-Medium-Normal] [grmn1000]
- \definefontsynonym [CBGreek-Regular-Medium-Oblique] [grmo1000]
- \definefontsynonym [CBGreek-Regular-Medium-Italic] [grmi1000]
- \definefontsynonym [CBGreek-Regular-Medium-UprightItalic] [grmu1000]
- \definefontsynonym [CBGreek-Regular-Medium-Caps] [grmc1000]
- \definefontsynonym [CBGreek-Regular-Medium-Leipzig] [grml1000]
- \definefontsynonym [CBGreek-Regular-Medium-Roman] [grmr1000]
-
- \definefontsynonym [CBGreek-Regular-BoldExtended-Normal] [grxn1000]
- \definefontsynonym [CBGreek-Regular-BoldExtended-Oblique] [grxo1000]
- \definefontsynonym [CBGreek-Regular-BoldExtended-Italic] [grxi1000]
- \definefontsynonym [CBGreek-Regular-BoldExtended-UprightItalic] [grxu1000]
- \definefontsynonym [CBGreek-Regular-BoldExtended-Caps] [grxc1000]
- \definefontsynonym [CBGreek-Regular-BoldExtended-Leipzig] [grxl1000]
- \definefontsynonym [CBGreek-Regular-BoldExtended-Roman] [grxr1000]
-
+ \definefontsynonym [CBGreek-Regular-Medium-Normal] [grmn1000]
+ \definefontsynonym [CBGreek-Regular-Medium-Oblique] [grmo1000]
+ \definefontsynonym [CBGreek-Regular-Medium-Italic] [grmi1000]
+ \definefontsynonym [CBGreek-Regular-Medium-UprightItalic] [grmu1000]
+ \definefontsynonym [CBGreek-Regular-Medium-Caps] [grmc1000]
+ \definefontsynonym [CBGreek-Regular-Medium-Leipzig] [grml1000]
+ \definefontsynonym [CBGreek-Regular-Medium-Roman] [grmr1000]
+ \definefontsynonym [CBGreek-Regular-BoldExtended-Normal] [grxn1000]
+ \definefontsynonym [CBGreek-Regular-BoldExtended-Oblique] [grxo1000]
+ \definefontsynonym [CBGreek-Regular-BoldExtended-Italic] [grxi1000]
+ \definefontsynonym [CBGreek-Regular-BoldExtended-UprightItalic] [grxu1000]
+ \definefontsynonym [CBGreek-Regular-BoldExtended-Caps] [grxc1000]
+ \definefontsynonym [CBGreek-Regular-BoldExtended-Leipzig] [grxl1000]
+ \definefontsynonym [CBGreek-Regular-BoldExtended-Roman] [grxr1000]
+ \loadmapfile [cbgreek.map]
\stoptypescript
\starttypescript [sans] [cbgreek] [name]
-
- \definefontsynonym [CBGreek-Sans-Medium-Normal] [gsmn1000]
- \definefontsynonym [CBGreek-Sans-Medium-Oblique] [gsmo1000]
- \definefontsynonym [CBGreek-Sans-Medium-Italic] [gsmi1000]
- \definefontsynonym [CBGreek-Sans-Medium-UprightItalic] [gsmu1000]
- \definefontsynonym [CBGreek-Sans-Medium-Caps] [gsmc1000]
- \definefontsynonym [CBGreek-Sans-Medium-Leipzig] [gsml1000]
- \definefontsynonym [CBGreek-Sans-Medium-Roman] [gsmr1000]
-
- \definefontsynonym [CBGreek-Sans-BoldExtended-Normal] [gsxn1000]
- \definefontsynonym [CBGreek-Sans-BoldExtended-Oblique] [gsxo1000]
- \definefontsynonym [CBGreek-Sans-BoldExtended-Italic] [gsxi1000]
- \definefontsynonym [CBGreek-Sans-BoldExtended-UprightItalic] [gsxu1000]
- \definefontsynonym [CBGreek-Sans-BoldExtended-Caps] [gsxc1000]
- \definefontsynonym [CBGreek-Sans-BoldExtended-Leipzig] [gsxl1000]
- \definefontsynonym [CBGreek-Sans-BoldExtended-Roman] [gsxr1000]
-
+ \definefontsynonym [CBGreek-Sans-Medium-Normal] [gsmn1000]
+ \definefontsynonym [CBGreek-Sans-Medium-Oblique] [gsmo1000]
+ \definefontsynonym [CBGreek-Sans-Medium-Italic] [gsmi1000]
+ \definefontsynonym [CBGreek-Sans-Medium-UprightItalic] [gsmu1000]
+ \definefontsynonym [CBGreek-Sans-Medium-Caps] [gsmc1000]
+ \definefontsynonym [CBGreek-Sans-Medium-Leipzig] [gsml1000]
+ \definefontsynonym [CBGreek-Sans-Medium-Roman] [gsmr1000]
+ \definefontsynonym [CBGreek-Sans-BoldExtended-Normal] [gsxn1000]
+ \definefontsynonym [CBGreek-Sans-BoldExtended-Oblique] [gsxo1000]
+ \definefontsynonym [CBGreek-Sans-BoldExtended-Italic] [gsxi1000]
+ \definefontsynonym [CBGreek-Sans-BoldExtended-UprightItalic] [gsxu1000]
+ \definefontsynonym [CBGreek-Sans-BoldExtended-Caps] [gsxc1000]
+ \definefontsynonym [CBGreek-Sans-BoldExtended-Leipzig] [gsxl1000]
+ \definefontsynonym [CBGreek-Sans-BoldExtended-Roman] [gsxr1000]
+ \loadmapfile [cbgreek.map]
\stoptypescript
\starttypescript [mono] [cbgreek] [name]
-
- \definefontsynonym [CBGreek-Typewriter-Medium-Normal] [gttn1000]
- \definefontsynonym [CBGreek-Typewriter-Medium-Oblique] [gtto1000]
- \definefontsynonym [CBGreek-Typewriter-Medium-Italic] [gtti1000]
- \definefontsynonym [CBGreek-Typewriter-Medium-UprightItalic] [gttu1000]
- \definefontsynonym [CBGreek-Typewriter-Medium-Caps] [gttc1000]
- \definefontsynonym [CBGreek-Typewriter-Medium-Leipzig] [gttl1000]
- \definefontsynonym [CBGreek-Typewriter-Medium-Roman] [gttr1000]
-
+ \definefontsynonym [CBGreek-Typewriter-Medium-Normal] [gttn1000]
+ \definefontsynonym [CBGreek-Typewriter-Medium-Oblique] [gtto1000]
+ \definefontsynonym [CBGreek-Typewriter-Medium-Italic] [gtti1000]
+ \definefontsynonym [CBGreek-Typewriter-Medium-UprightItalic] [gttu1000]
+ \definefontsynonym [CBGreek-Typewriter-Medium-Caps] [gttc1000]
+ \definefontsynonym [CBGreek-Typewriter-Medium-Leipzig] [gttl1000]
+ \definefontsynonym [CBGreek-Typewriter-Medium-Roman] [gttr1000]
+ \loadmapfile [cbgreek.map]
\stoptypescript
\starttypescript [serif] [cbgreek] [name]
-
- \definefontsynonym [Serif] [CBGreek-Regular-Medium-Normal]
- \definefontsynonym [SerifSlanted] [CBGreek-Regular-Medium-Oblique]
- \definefontsynonym [SerifItalic] [CBGreek-Regular-Medium-Italic]
- \definefontsynonym [SerifCaps] [CBGreek-Regular-Medium-Caps]
- \definefontsynonym [SerifBold] [CBGreek-Regular-BoldExtended-Normal]
- \definefontsynonym [SerifBoldSlanted] [CBGreek-Regular-BoldExtended-Oblique]
- \definefontsynonym [SerifBoldItalic] [CBGreek-Regular-BoldExtended-Italic]
- \definefontsynonym [SerifBoldCaps] [CBGreek-Regular-BoldExtended-Caps]
-
+ \definefontsynonym [Serif] [CBGreek-Regular-Medium-Normal]
+ \definefontsynonym [SerifSlanted] [CBGreek-Regular-Medium-Oblique]
+ \definefontsynonym [SerifItalic] [CBGreek-Regular-Medium-Italic]
+ \definefontsynonym [SerifCaps] [CBGreek-Regular-Medium-Caps]
+ \definefontsynonym [SerifBold] [CBGreek-Regular-BoldExtended-Normal]
+ \definefontsynonym [SerifBoldSlanted] [CBGreek-Regular-BoldExtended-Oblique]
+ \definefontsynonym [SerifBoldItalic] [CBGreek-Regular-BoldExtended-Italic]
+ \definefontsynonym [SerifBoldCaps] [CBGreek-Regular-BoldExtended-Caps]
+ \loadmapfile [cbgreek.map]
\stoptypescript
\starttypescript [sans] [cbgreek] [name]
-
- \definefontsynonym [Sans] [CBGreek-Sans-Medium-Normal]
- \definefontsynonym [SansSlanted] [CBGreek-Sans-Medium-Oblique]
- \definefontsynonym [SansItalic] [CBGreek-Sans-Medium-Italic]
- \definefontsynonym [SansCaps] [CBGreek-Sans-Medium-Caps]
- \definefontsynonym [SansBold] [CBGreek-Sans-BoldExtended-Normal]
- \definefontsynonym [SansBoldSlanted] [CBGreek-Sans-BoldExtended-Oblique]
- \definefontsynonym [SansBoldItalic] [CBGreek-Sans-BoldExtended-Italic]
- \definefontsynonym [SansBoldCaps] [CBGreek-Sans-BoldExtended-Caps]
-
+ \definefontsynonym [Sans] [CBGreek-Sans-Medium-Normal]
+ \definefontsynonym [SansSlanted] [CBGreek-Sans-Medium-Oblique]
+ \definefontsynonym [SansItalic] [CBGreek-Sans-Medium-Italic]
+ \definefontsynonym [SansCaps] [CBGreek-Sans-Medium-Caps]
+ \definefontsynonym [SansBold] [CBGreek-Sans-BoldExtended-Normal]
+ \definefontsynonym [SansBoldSlanted] [CBGreek-Sans-BoldExtended-Oblique]
+ \definefontsynonym [SansBoldItalic] [CBGreek-Sans-BoldExtended-Italic]
+ \definefontsynonym [SansBoldCaps] [CBGreek-Sans-BoldExtended-Caps]
+ \loadmapfile [cbgreek.map]
\stoptypescript
\starttypescript [mono] [cbgreek] [name]
-
- \definefontsynonym [Mono] [CBGreek-Typewriter-Medium-Normal]
- \definefontsynonym [MonoSlanted] [CBGreek-Typewriter-Medium-Oblique]
- \definefontsynonym [MonoItalic] [CBGreek-Typewriter-Medium-Italic]
- \definefontsynonym [MonoCaps] [CBGreek-Typewriter-Medium-Caps]
-
+ \definefontsynonym [Mono] [CBGreek-Typewriter-Medium-Normal]
+ \definefontsynonym [MonoSlanted] [CBGreek-Typewriter-Medium-Oblique]
+ \definefontsynonym [MonoItalic] [CBGreek-Typewriter-Medium-Italic]
+ \definefontsynonym [MonoCaps] [CBGreek-Typewriter-Medium-Caps]
+ \loadmapfile [cbgreek.map]
\stoptypescript
% Please note that we use Bold Extended instead of Bold
@@ -168,6 +160,8 @@
bf=grxn1440 sa 1,bs=grxo1440 sa 1,bi=grxi1440 sa 1,
sc=grmc1440 sa 1]
+ \loadmapfile [cbgreek.map]
+
\stoptypescript
\starttypescript [sans] [cbgreek-all] [size]
@@ -217,6 +211,8 @@
bf=gsxn1440 sa 1,bs=gsxo1440 sa 1,bi=gsxi1440 sa 1,
sc=gsmc1440 sa 1]
+ \loadmapfile [cbgreek.map]
+
\stoptypescript
\starttypescript [mono] [cbgreek-all] [size]
@@ -257,6 +253,8 @@
[tf=gttn1440 sa 1,sl=gtto1440 sa 1,it=gtti1440 sa 1,
sc=gttc1440 sa 1]
+ \loadmapfile [cbgreek.map]
+
\stoptypescript
\starttypescript [serif] [cbgreek-medium] [size]
@@ -276,6 +274,8 @@
bf=grxn1200 sa 1,bs=grxo1200 sa 1,bi=grxi1200 sa 1,
sc=grmc1200 sa 1]
+ \loadmapfile [cbgreek.map]
+
\stoptypescript
\starttypescript [sans] [cbgreek-medium] [size]
@@ -295,6 +295,8 @@
bf=gsxn1200 sa 1,bs=gsxo1200 sa 1,bi=gsxi1200 sa 1,
sc=gsmc1200 sa 1]
+ \loadmapfile [cbgreek.map]
+
\stoptypescript
\starttypescript [mono] [cbgreek-medium] [size]
@@ -311,11 +313,8 @@
[tf=gttn1200 sa 1,sl=gtto1200 sa 1,it=gtti1200 sa 1,
sc=gttc1200 sa 1]
-\stoptypescript
-
-\starttypescript [map] [cbgreek]
\loadmapfile [cbgreek.map]
-% \loadmapfile [cbsmall.map]
+
\stoptypescript
\starttypescript [cbgreek-all]
diff --git a/Master/texmf-dist/tex/context/base/type-cow.tex b/Master/texmf-dist/tex/context/base/type-cow.tex
index 027f6b6b7bd..bda8489a500 100644
--- a/Master/texmf-dist/tex/context/base/type-cow.tex
+++ b/Master/texmf-dist/tex/context/base/type-cow.tex
@@ -67,12 +67,14 @@
\stoptypescript
\starttypescript [cow] [default]
+ \definetypeface [cow] [rm][serif][cow] [default][encoding=default]
\definetypeface [cow] [ss][serif][cow] [default][encoding=default]
\definetypeface [cow] [mm][math] [cow] [default][encoding=default]
\definetypeface [cow] [tt][mono] [modern][default][encoding=default,rscale=.85]
\stoptypescript
\starttypescript [sheep] [default]
+ \definetypeface [sheep][rm][serif][sheep] [default][encoding=default]
\definetypeface [sheep][ss][serif][sheep] [default][encoding=default]
\definetypeface [sheep][mm][math] [sheep] [default][encoding=default]
\definetypeface [sheep][tt][mono] [modern][default][encoding=default,rscale=.85]
diff --git a/Master/texmf-dist/tex/context/base/type-def.tex b/Master/texmf-dist/tex/context/base/type-def.tex
index e78087b944e..6469a5925d8 100644
--- a/Master/texmf-dist/tex/context/base/type-def.tex
+++ b/Master/texmf-dist/tex/context/base/type-def.tex
@@ -18,47 +18,111 @@
\definefontsynonym [DefaultFont] [cmvtt10]
\startsetups [font:fallback:serif]
- \definefontsynonym [Serif] [DefaultFont]
- \definefontsynonym [SerifBold] [Serif]
- \definefontsynonym [SerifItalic] [Serif]
- \definefontsynonym [SerifSlanted] [SerifItalic]
- \definefontsynonym [SerifBoldItalic] [Serif]
- \definefontsynonym [SerifBoldSlanted] [SerifBoldItalic]
- \definefontsynonym [SerifCaps] [Serif]
+ \definefontsynonym [Serif] [DefaultFont]
+ \definefontsynonym [SerifBold] [Serif]
+ \definefontsynonym [SerifItalic] [Serif]
+ \definefontsynonym [SerifSlanted] [SerifItalic]
+ \definefontsynonym [SerifBoldItalic] [Serif]
+ \definefontsynonym [SerifBoldSlanted] [SerifBoldItalic]
+ \definefontsynonym [SerifCaps] [Serif]
\stopsetups
\startsetups [font:fallback:sans]
- \definefontsynonym [Sans] [DefaultFont]
- \definefontsynonym [SansBold] [Sans]
- \definefontsynonym [SansItalic] [Sans]
- \definefontsynonym [SansSlanted] [SansItalic]
- \definefontsynonym [SansBoldItalic] [Sans]
- \definefontsynonym [SansBoldSlanted] [SansBoldItalic]
- \definefontsynonym [SansCaps] [Sans]
+ \definefontsynonym [Sans] [DefaultFont]
+ \definefontsynonym [SansBold] [Sans]
+ \definefontsynonym [SansItalic] [Sans]
+ \definefontsynonym [SansSlanted] [SansItalic]
+ \definefontsynonym [SansBoldItalic] [Sans]
+ \definefontsynonym [SansBoldSlanted] [SansBoldItalic]
+ \definefontsynonym [SansCaps] [Sans]
\stopsetups
\startsetups [font:fallback:mono]
- \definefontsynonym [Mono] [DefaultFont]
- \definefontsynonym [MonoBold] [Mono]
- \definefontsynonym [MonoItalic] [Mono]
- \definefontsynonym [MonoSlanted] [MonoItalic]
- \definefontsynonym [MonoBoldItalic] [Mono]
- \definefontsynonym [MonoBoldSlanted] [MonoBoldItalic]
- \definefontsynonym [MonoCaps] [Mono]
+ \definefontsynonym [Mono] [DefaultFont]
+ \definefontsynonym [MonoBold] [Mono]
+ \definefontsynonym [MonoItalic] [Mono]
+ \definefontsynonym [MonoSlanted] [MonoItalic]
+ \definefontsynonym [MonoBoldItalic] [Mono]
+ \definefontsynonym [MonoBoldSlanted] [MonoBoldItalic]
+ \definefontsynonym [MonoCaps] [Mono]
\stopsetups
\startsetups [font:allbold:serif]
- \definefontsynonym [Serif] [SerifBold]
- \definefontsynonym [SerifItalic] [SerifBoldItalic]
- \definefontsynonym [SerifSlanted] [SerifBoldSlanted]
- %definefontsynonym [SerifCaps] [SerifBold]
+ \definefontsynonym [Serif] [SerifBold]
+ \definefontsynonym [SerifItalic] [SerifBoldItalic]
+ \definefontsynonym [SerifSlanted] [SerifBoldSlanted]
+ %definefontsynonym [SerifCaps] [SerifBold]
\stopsetups
\startsetups [font:allbold:sans]
- \definefontsynonym [Sans] [SansBold]
- \definefontsynonym [SansItalic] [SansBoldItalic]
- \definefontsynonym [SansSlanted] [SansBoldSlanted]
- %definefontsynonym [SansCaps] [SansBold]
+ \definefontsynonym [Sans] [SansBold]
+ \definefontsynonym [SansItalic] [SansBoldItalic]
+ \definefontsynonym [SansSlanted] [SansBoldSlanted]
+ %definefontsynonym [SansCaps] [SansBold]
\stopsetups
+\starttypescript [serif] [simple] [name]
+ \definefontsynonym [Serif] [Simple]
+ \definefontsynonym [SerifBold] [Serif]
+ \definefontsynonym [SerifItalic] [Serif]
+ \definefontsynonym [SerifSlanted] [Serif]
+ \definefontsynonym [SerifBoldItalic] [Serif]
+ \definefontsynonym [SerifBoldSlanted] [Serif]
+ \definefontsynonym [SerifCaps] [Serif]
+\stoptypescript
+
+\starttypescript [sans] [simple] [name]
+ \definefontsynonym [Sans] [Simple]
+ \definefontsynonym [SansBold] [Sans]
+ \definefontsynonym [SansItalic] [Sans]
+ \definefontsynonym [SansSlanted] [Sans]
+ \definefontsynonym [SansBoldItalic] [Sans]
+ \definefontsynonym [SansBoldSlanted] [Sans]
+ \definefontsynonym [SansCaps] [Sans]
+\stoptypescript
+
+\starttypescript [mono] [simple] [name]
+ \definefontsynonym [Mono] [Simple]
+ \definefontsynonym [MonoBold] [Mono]
+ \definefontsynonym [MonoItalic] [Mono]
+ \definefontsynonym [MonoSlanted] [Mono]
+ \definefontsynonym [MonoBoldItalic] [Mono]
+ \definefontsynonym [MonoBoldSlanted] [Mono]
+ \definefontsynonym [MonoCaps] [Mono]
+\stoptypescript
+
+% handy
+
+% \starttypescript [serif] [simple] [name]
+% \definefontsynonym [Simple] [cmvtt10]
+% \setupfontsynonym [Simple] [handling=pure]
+% \stoptypescript
+
+\starttypescript [serif,sans,mono] [handling,hanging] [pure,normal]
+ \setupfontsynonym [\typescriptprefix\typescriptone ] [handling=\typescriptthree]
+ \setupfontsynonym [\typescriptprefix\typescriptone Bold] [handling=\typescriptthree bold]
+ \setupfontsynonym [\typescriptprefix\typescriptone Slanted] [handling=\typescriptthree slanted]
+ \setupfontsynonym [\typescriptprefix\typescriptone Italic] [handling=\typescriptthree italic]
+ \setupfontsynonym [\typescriptprefix\typescriptone BoldSlanted] [handling=\typescriptthree boldslanted]
+ \setupfontsynonym [\typescriptprefix\typescriptone BoldItalic] [handling=\typescriptthree bolditalic]
+\stoptypescript
+
+\starttypescript [serif,sans,mono] [handling,hz] [hz,quality,highquality]
+ \setupfontsynonym [\typescriptprefix\typescriptone ] [handling=\typescriptthree]
+ \setupfontsynonym [\typescriptprefix\typescriptone Bold] [handling=\typescriptthree]
+ \setupfontsynonym [\typescriptprefix\typescriptone Slanted] [handling=\typescriptthree]
+ \setupfontsynonym [\typescriptprefix\typescriptone Italic] [handling=\typescriptthree]
+ \setupfontsynonym [\typescriptprefix\typescriptone BoldSlanted] [handling=\typescriptthree]
+ \setupfontsynonym [\typescriptprefix\typescriptone BoldItalic] [handling=\typescriptthree]
+\stoptypescript
+
+\starttypescript [serif,sans,mono] [handling] [noligs,prespacing,flexspacing]
+ \setupfontsynonym [\typescriptprefix\typescriptone ] [handling=\typescriptthree]
+ \setupfontsynonym [\typescriptprefix\typescriptone Bold] [handling=\typescriptthree]
+ \setupfontsynonym [\typescriptprefix\typescriptone Slanted] [handling=\typescriptthree]
+ \setupfontsynonym [\typescriptprefix\typescriptone Italic] [handling=\typescriptthree]
+ \setupfontsynonym [\typescriptprefix\typescriptone BoldSlanted] [handling=\typescriptthree]
+ \setupfontsynonym [\typescriptprefix\typescriptone BoldItalic] [handling=\typescriptthree]
+\stoptypescript
+
\endinput
diff --git a/Master/texmf-dist/tex/context/base/type-enc.tex b/Master/texmf-dist/tex/context/base/type-enc.tex
index 4209e0bb656..d43f84326c3 100644
--- a/Master/texmf-dist/tex/context/base/type-enc.tex
+++ b/Master/texmf-dist/tex/context/base/type-enc.tex
@@ -30,39 +30,9 @@
% fallbacks, no math in latin modern
- \definefontsynonym[lmbsy10] [cmbsy10]
- \definefontsynonym[lmbsy5] [cmbsy5]
- \definefontsynonym[lmbsy6] [cmbsy7]
- \definefontsynonym[lmbsy7] [cmbsy7]
- \definefontsynonym[lmbsy8] [cmbsy7]
- \definefontsynonym[lmbsy9] [cmbsy10]
- \definefontsynonym[lmdunh10][cmdunh10]
- \definefontsynonym[lmex10] [cmex10]
- \definefontsynonym[lmex7] [cmex10]
- \definefontsynonym[lmex8] [cmex10]
- \definefontsynonym[lmex9] [cmex10]
\definefontsynonym[lmff10] [cmff10]
\definefontsynonym[lmfi10] [cmfi10]
\definefontsynonym[lmfib8] [cmfib8]
- \definefontsynonym[lmmi10] [cmmi10]
- \definefontsynonym[lmmi12] [cmmi12]
- \definefontsynonym[lmmi5] [cmmi5]
- \definefontsynonym[lmmi6] [cmmi6]
- \definefontsynonym[lmmi7] [cmmi7]
- \definefontsynonym[lmmi8] [cmmi8]
- \definefontsynonym[lmmi9] [cmmi9]
- \definefontsynonym[lmmib10] [cmmib10]
- \definefontsynonym[lmmib5] [cmmib5]
- \definefontsynonym[lmmib6] [cmmib7]
- \definefontsynonym[lmmib7] [cmmib7]
- \definefontsynonym[lmmib8] [cmmib7]
- \definefontsynonym[lmmib9] [cmmib10]
- \definefontsynonym[lmsy10] [cmsy10]
- \definefontsynonym[lmsy5] [cmsy5]
- \definefontsynonym[lmsy6] [cmsy6]
- \definefontsynonym[lmsy7] [cmsy7]
- \definefontsynonym[lmsy8] [cmsy8]
- \definefontsynonym[lmsy9] [cmsy9]
\definefontsynonym[lmtex10] [cmtex10]
\definefontsynonym[lmtex8] [cmtex8]
\definefontsynonym[lmtex9] [cmtex9]
@@ -189,6 +159,37 @@
\stoptypescript
+\starttypescript [math] [modern,latin-modern]
+
+ \definefontsynonym [LMMathSymbols5-BoldItalic] [lmbsy5]
+ \definefontsynonym [LMMathSymbols7-BoldItalic] [lmbsy7]
+ \definefontsynonym [LMMathSymbols10-BoldItalic][lmbsy10]
+ \definefontsynonym [LMMathSymbols5-Italic] [lmsy5]
+ \definefontsynonym [LMMathSymbols6-Italic] [lmsy6]
+ \definefontsynonym [LMMathSymbols7-Italic] [lmsy7]
+ \definefontsynonym [LMMathSymbols8-Italic] [lmsy8]
+ \definefontsynonym [LMMathSymbols9-Italic] [lmsy9]
+ \definefontsynonym [LMMathSymbols10-Italic] [lmsy10]
+ \definefontsynonym [LMMathExtension10-Regular] [lmex10]
+ \definefontsynonym [LMMathItalic5-Italic] [lmmi5]
+ \definefontsynonym [LMMathItalic6-Italic] [lmmi6]
+ \definefontsynonym [LMMathItalic7-Italic] [lmmi7]
+ \definefontsynonym [LMMathItalic8-Italic] [lmmi8]
+ \definefontsynonym [LMMathItalic9-Italic] [lmmi9]
+ \definefontsynonym [LMMathItalic10-Italic] [lmmi10]
+ \definefontsynonym [LMMathItalic12-Italic] [lmmi12]
+ \definefontsynonym [LMMathItalic5-BoldItalic] [lmmib5]
+ \definefontsynonym [LMMathItalic7-BoldItalic] [lmmib7]
+ \definefontsynonym [LMMathItalic10-BoldItalic] [lmmib10]
+
+ \definefontsynonym [LMMathSymbols-BoldItalic] [LMMathSymbols10-BoldItalic]
+ \definefontsynonym [LMMathSymbols-Italic] [LMMathSymbols10-Italic]
+ \definefontsynonym [LMMathExtension-Regular] [LMMathExtension10-Regular]
+ \definefontsynonym [LMMathItalic-Italic] [LMMathItalic10-Italic]
+ \definefontsynonym [LMMathItalic-BoldItalic] [LMMathItalic10-BoldItalic]
+
+\stoptypescript
+
% todo: map these onto verbose names
\starttypescript [serif] [modern,latin-modern,computer-modern] [texnansi,ec,qx,t5]
@@ -229,6 +230,14 @@
\definefontsynonym [cmcsc10] [\typescriptthree-lmcsc10] [encoding=\typescriptthree]
\definefontsynonym [cmcscsl10][\typescriptthree-lmcsco10] [encoding=\typescriptthree]
+ \definefontsynonym [cmr12 ][rm-lmr12] % hack needed to fool math roman
+ \definefontsynonym [cmr10 ][rm-lmr10] % into not messing around with
+ \definefontsynonym [cmr9 ] [rm-lmr9] % encodings, probably no longer
+ \definefontsynonym [cmr8 ] [rm-lmr8] % needed now
+ \definefontsynonym [cmr7 ] [rm-lmr7] %
+ \definefontsynonym [cmr6 ] [rm-lmr6] % no space appended here, needs
+ \definefontsynonym [cmr5 ] [rm-lmr5] % some testing
+
\stoptypescript
\starttypescript [sans] [modern,latin-modern,computer-modern] [texnansi,ec,qx,t5]
@@ -274,6 +283,31 @@
\stoptypescript
+\starttypescript [math] [modern,latin-modern,computer-modern]
+
+ \definefontsynonym [cmbsy5] [lmbsy5]
+ \definefontsynonym [cmbsy7] [lmbsy7]
+ \definefontsynonym [cmbsy10] [lmbsy10]
+ \definefontsynonym [cmsy5] [lmsy5]
+ \definefontsynonym [cmsy6] [lmsy6]
+ \definefontsynonym [cmsy7] [lmsy7]
+ \definefontsynonym [cmsy8] [lmsy8]
+ \definefontsynonym [cmsy9] [lmsy9]
+ \definefontsynonym [cmsy10] [lmsy10]
+ \definefontsynonym [cmex10] [lmex10]
+ \definefontsynonym [cmmi5] [lmmi5]
+ \definefontsynonym [cmmi6] [lmmi6]
+ \definefontsynonym [cmmi7] [lmmi7]
+ \definefontsynonym [cmmi8] [lmmi8]
+ \definefontsynonym [cmmi9] [lmmi9]
+ \definefontsynonym [cmmi10] [lmmi10]
+ \definefontsynonym [cmmi12] [lmmi12]
+ \definefontsynonym [cmmib5] [lmmib5]
+ \definefontsynonym [cmmib7] [lmmib7]
+ \definefontsynonym [cmmib10] [lmmib10]
+
+\stoptypescript
+
%D {\em Comments by Victor Figurnov:} the wcmb10, wcmbx10,
%D \unknown\ fonts below are taken from the Paradissa
%D collection by Basil Malyshev. These fonts don't conform t2a
@@ -541,18 +575,18 @@
\starttypescript [math] [modern,computer-modern,latin-modern] % [default]
% watch the space, it prevents remapping
- \definefontsynonym [ComputerModernMath-Roman] [cmr10 ]
- \definefontsynonym [ComputerModernMath-Extension] [cmex10]
- \definefontsynonym [ComputerModernMath-Italic] [cmmi10]
- \definefontsynonym [ComputerModernMath-Symbol] [cmsy10]
+ \definefontsynonym [ComputerModernMath-Roman] [lmr10 ]
+ \definefontsynonym [ComputerModernMath-Extension] [lmex10]
+ \definefontsynonym [ComputerModernMath-Italic] [lmmi10]
+ \definefontsynonym [ComputerModernMath-Symbol] [lmsy10]
\stoptypescript
\starttypescript [boldmath,bfmath] [modern,computer-modern,latin-modern] % [default]
% watch the space, it prevents remapping
- \definefontsynonym [ComputerModernMath-Roman-Bold] [cmb10 ]
- \definefontsynonym [ComputerModernMath-Extension] [cmex10]
- \definefontsynonym [ComputerModernMath-Italic-Bold] [cmmib10]
- \definefontsynonym [ComputerModernMath-Symbol-Bold] [cmbsy10]
+ \definefontsynonym [ComputerModernMath-Roman-Bold] [lmb10 ]
+ \definefontsynonym [ComputerModernMath-Extension] [lmex10]
+ \definefontsynonym [ComputerModernMath-Italic-Bold] [lmmib10]
+ \definefontsynonym [ComputerModernMath-Symbol-Bold] [lmbsy10]
\stoptypescript
% Till we have cyrilic in lm:
diff --git a/Master/texmf-dist/tex/context/base/type-exa.tex b/Master/texmf-dist/tex/context/base/type-exa.tex
index 123e2cb4daa..29f882f0272 100644
--- a/Master/texmf-dist/tex/context/base/type-exa.tex
+++ b/Master/texmf-dist/tex/context/base/type-exa.tex
@@ -11,244 +11,17 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-%D A couple of goodies:
-
-\starttypescriptcollection[examples]
-
-\starttypescript [fallback] [texnansi,ec,qx,t5,default]
-
- % no fontclass, so this is the fall back
-
- \definetypeface [] [rm] [serif] [modern] [computer-modern] [encoding=\typescripttwo]
- \definetypeface [] [ss] [sans] [modern] [computer-modern] [encoding=\typescripttwo]
- \definetypeface [] [tt] [mono] [modern] [computer-modern] [encoding=\typescripttwo]
- \definetypeface [] [mm] [math] [modern] [computer-modern] [encoding=\typescripttwo]
-
- \quittypescriptscanning
-
-\stoptypescript
-
-\starttypescript [modern] [texnansi,ec,qx,t5,default]
-
- \definetypeface [modern] [rm] [serif] [modern] [computer-modern] [encoding=\typescripttwo]
- \definetypeface [modern] [ss] [sans] [modern] [computer-modern] [encoding=\typescripttwo]
- \definetypeface [modern] [tt] [mono] [modern] [computer-modern] [encoding=\typescripttwo]
- \definetypeface [modern] [mm] [math] [modern] [computer-modern] [encoding=\typescripttwo]
-
- \quittypescriptscanning
-
-\stoptypescript
-
-\starttypescript [modern-base] [texnansi,ec,qx,t5,default]
-
- \definetypeface [modern] [rm] [serif] [modern] [default] [encoding=\typescripttwo]
- \definetypeface [modern] [ss] [sans] [modern] [default] [encoding=\typescripttwo]
- \definetypeface [modern] [tt] [mono] [modern] [default] [encoding=\typescripttwo]
- \definetypeface [modern] [mm] [math] [modern] [default] [encoding=\typescripttwo]
-
- \quittypescriptscanning
-
-\stoptypescript
-
-\starttypescript [modern-base] [t2a,t2b,t2c,x2]
-
- \definetypeface [modern] [rm] [serif] [computer-modern] [default] [encoding=\typescripttwo]
- \definetypeface [modern] [ss] [sans] [computer-modern] [default] [encoding=\typescripttwo]
- \definetypeface [modern] [tt] [mono] [computer-modern] [default] [encoding=\typescripttwo]
- \definetypeface [modern] [mm] [math] [computer-modern] [default] [encoding=\typescripttwo]
-
- \quittypescriptscanning
-
-\stoptypescript
+%D The examples are moved to \type {type-one}, \type {type-otf} and
+%D \type {type-buy}.
\starttypescript [fallback,modern,modern-base] [il2]
- \usetypescript[\typescriptone][ec]
- \enableregime[il2]
-\stoptypescript
-\starttypescript [fallback,modern,modern-base] [pl0]
- \usetypescript[\typescriptone][qx]
- \enableregime[pl0]
-\stoptypescript
-
-\starttypescript [postscript] [texnansi,ec,qx,t5,uc,8r]
-
- \definetypeface [postscript] [rm] [serif] [times] [default] [encoding=\typescripttwo]
- \definetypeface [postscript] [ss] [sans] [helvetica] [default] [rscale=.9,encoding=\typescripttwo]
- \definetypeface [postscript] [tt] [mono] [courier] [default] [rscale=1.1,encoding=\typescripttwo]
- \definetypeface [postscript] [mm] [math] [times] [default]
-
- \quittypescriptscanning
-
-\stoptypescript
-
-\starttypescript [times] [texnansi,ec,qx,8r,t5,uc]
-
- \definetypeface [times] [rm] [serif] [times] [default] [encoding=\typescripttwo]
- \definetypeface [times] [ss] [sans] [helvetica] [default] [encoding=\typescripttwo,rscale=0.9]
- \definetypeface [times] [tt] [mono] [modern] [default] [encoding=\typescripttwo,rscale=1.05]
- \definetypeface [times] [mm] [math] [times] [default] [encoding=\typescripttwo]
-
-% \usemathcollection[default]
-
- \quittypescriptscanning
-
-\stoptypescript
-
-\starttypescript [palatino] [texnansi,ec,qx,8r,t5,uc]
-
- \definetypeface [palatino] [rm] [serif] [palatino] [default] [encoding=\typescripttwo]
- \definetypeface [palatino] [tt] [mono] [modern] [default] [encoding=\typescripttwo,rscale=1.075]
- \definetypeface [palatino] [mm] [math] [palatino] [default] [encoding=default]
-
-% \usemathcollection[default]
-
- \quittypescriptscanning
-
+ \usetypescript[\typescriptone][ec]
+ \enableregime[il2]
\stoptypescript
-\starttypescript [fourier] [ec]
-
- \definetypeface [fourier] [rm] [serif] [fourier] [default] [encoding=ec]
- \definetypeface [fourier] [mm] [math] [fourier] [default] [encoding=default]
- \definetypeface [fourier] [tt] [mono] [modern] [default] [encoding=ec,rscale=1.07]
-
- \usemathcollection[fou]
-
- \quittypescriptscanning
-
-\stoptypescript
-
-% \starttypescript [utopia] [ec]
-
-% \definetypeface [fourier] [rm] [serif] [fourier] [default] [encoding=ec]
-% \definetypeface [fourier] [mm] [math] [fourier] [default] [encoding=default]
-% \definetypeface [fourier] [tt] [mono] [modern] [default] [rscale=1.070,encoding=ec]
-
-% \usemathcollection[fou]
-
-% \stoptypescript
-
-\starttypescript [lucida,lucidabfm] [texnansi,ec,8r,uc]
-
- \definetypeface [lucida] [rm] [serif] [lucida] [default] [encoding=\typescripttwo]
- \definetypeface [lucida] [ss] [sans] [lucida] [default] [encoding=\typescripttwo]
- \definetypeface [lucida] [tt] [mono] [lucida] [default] [encoding=\typescripttwo]
- \definetypeface [lucida] [hw] [handwriting] [lucida] [default] [encoding=\typescripttwo]
- \definetypeface [lucida] [cg] [calligraphy] [lucida] [default] [encoding=\typescripttwo]
-
-\stoptypescript
-
-\starttypescript [lucida] [texnansi,ec,8r]
-
- \definetypeface [lucida] [mm] [math] [lucida] [default] [encoding=\typescripttwo]
-
-\stoptypescript
-
-\starttypescript [lucidaboldmath] [texnansi,ec,8r]
-
- \definetypeface [lucidaboldmath] [rm] [serif] [lucida] [default] [encoding=\typescripttwo] % needed ?
- \definetypeface [lucidaboldmath] [ss] [sans] [lucida] [default] [encoding=\typescripttwo] % needed ?
- \definetypeface [lucidaboldmath] [tt] [mono] [lucida] [default] [encoding=\typescripttwo] % needed ?
- \definetypeface [lucidaboldmath] [mm] [boldmath] [lucida] [default] [encoding=\typescripttwo]
-
-\stoptypescript
-
-\starttypescript [lucidabfm,lucidaboldmath] [texnansi,ec,8r]
-
- \definetypeface [lucida] [mm] [bfmath] [lucida] [default] [encoding=\typescripttwo]
- \definetypeface [lucidaboldmath] [mm] [bfmath] [lucida] [default] [encoding=\typescripttwo]
-
-\stoptypescript
-
-\starttypescript [lucida,lucidabfm,lucidaboldmath] [texnansi,ec,8r]
-
- \usemathcollection[lbr]
-
- \quittypescriptscanning % last in the row
-
-\stoptypescript
-
-\starttypescript [serif,sans,mono] [handling,hanging] [pure,normal]
-
- \setupfontsynonym [\typescriptprefix\typescriptone ] [handling=\typescriptthree]
- \setupfontsynonym [\typescriptprefix\typescriptone Bold] [handling=\typescriptthree bold]
- \setupfontsynonym [\typescriptprefix\typescriptone Slanted] [handling=\typescriptthree slanted]
- \setupfontsynonym [\typescriptprefix\typescriptone Italic] [handling=\typescriptthree italic]
- \setupfontsynonym [\typescriptprefix\typescriptone BoldSlanted] [handling=\typescriptthree boldslanted]
- \setupfontsynonym [\typescriptprefix\typescriptone BoldItalic] [handling=\typescriptthree bolditalic]
-
-\stoptypescript
-
-\starttypescript [serif,sans,mono] [handling,hz] [hz,quality,highquality]
-
- \setupfontsynonym [\typescriptprefix\typescriptone ] [handling=\typescriptthree]
- \setupfontsynonym [\typescriptprefix\typescriptone Bold] [handling=\typescriptthree]
- \setupfontsynonym [\typescriptprefix\typescriptone Slanted] [handling=\typescriptthree]
- \setupfontsynonym [\typescriptprefix\typescriptone Italic] [handling=\typescriptthree]
- \setupfontsynonym [\typescriptprefix\typescriptone BoldSlanted] [handling=\typescriptthree]
- \setupfontsynonym [\typescriptprefix\typescriptone BoldItalic] [handling=\typescriptthree]
-
-\stoptypescript
-
-
-\starttypescript [serif,sans,mono] [handling] [noligs,prespacing,flexspacing]
-
- \setupfontsynonym [\typescriptprefix\typescriptone ] [handling=\typescriptthree]
- \setupfontsynonym [\typescriptprefix\typescriptone Bold] [handling=\typescriptthree]
- \setupfontsynonym [\typescriptprefix\typescriptone Slanted] [handling=\typescriptthree]
- \setupfontsynonym [\typescriptprefix\typescriptone Italic] [handling=\typescriptthree]
- \setupfontsynonym [\typescriptprefix\typescriptone BoldSlanted] [handling=\typescriptthree]
- \setupfontsynonym [\typescriptprefix\typescriptone BoldItalic] [handling=\typescriptthree]
-
-\stoptypescript
-
-% handy
-
-\starttypescript [serif] [simple] [name] % bad, will be changed but in sycn with manuals that use it
-
- \definefontsynonym [Simple] [cmvtt10]
- \setupfontsynonym [Simple] [handling=pure]
-
-\stoptypescript
-
-\starttypescript [modernvariable] [texnansi,ec,qx,8r,t5]
-
- \definetypeface [modernvariable] [rm] [serif] [simple] [default] [encoding=\typescripttwo]
- \definetypeface [modernvariable] [ss] [sans] [modern] [default] [encoding=\typescripttwo]
- \definetypeface [modernvariable] [tt] [mono] [modern] [default] [encoding=\typescripttwo]
- \definetypeface [modernvariable] [mm] [math] [modern] [default]
-
-\stoptypescript
-
-\starttypescript [optima] [texnansi,ec,qx]
-
- \definetypeface[optima][ss][sans] [optima-nova][default][encoding=\typescripttwo]
- \definetypeface[optima][rm][serif][palatino] [default][encoding=\typescripttwo]
- \definetypeface[optima][tt][mono] [modern] [default][encoding=\typescripttwo,rscale=1.1]
- \definetypeface[optima][mm][math] [palatino] [default][encoding=\typescripttwo]
-
-\stoptypescript
-
-\starttypescript [antykwa-torunska] [texnansi,ec,8r,uc,t2a]
-
- \definetypeface[antykwa][rm][serif][antykwa-torunska] [default][encoding=\typescripttwo]
- \definetypeface[antykwa][ss][sans] [modern] [default][encoding=\typescripttwo,rscale=1.05]
- \definetypeface[antykwa][tt][mono] [modern] [default][encoding=\typescripttwo,rscale=1.1]
- \definetypeface[antykwa][mm][math] [antykwa-torunska] [default][encoding=\typescripttwo]
-
-\stoptypescript
-
-\starttypescript [iwona,iwona-light,iwona-heavy,iwona-medium] [texnansi,ec,8r,uc,t2a]
-
- % todo: rscale
-
- \definetypeface[\typescriptone][ss][sans] [\typescriptone] [default][encoding=\typescripttwo]
- \definetypeface[\typescriptone][rm][serif][modern] [default][encoding=\typescripttwo]
- \definetypeface[\typescriptone][tt][mono] [modern] [default][encoding=\typescripttwo]
- \definetypeface[\typescriptone][mm][math] [\typescriptone] [default][encoding=\typescripttwo,text=ss]
-
+\starttypescript [fallback,modern,modern-base] [pl0]
+ \usetypescript[\typescriptone][qx]
+ \enableregime[pl0]
\stoptypescript
-\stoptypescriptcollection
-
\endinput
diff --git a/Master/texmf-dist/tex/context/base/type-exp.tex b/Master/texmf-dist/tex/context/base/type-exp.tex
new file mode 100644
index 00000000000..432685a034c
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/type-exp.tex
@@ -0,0 +1,95 @@
+%D \module
+%D [ file=type-exp,
+%D version=2007.01.28,
+%D title=\CONTEXT\ Typescript Macros,
+%D subtitle=Experimental Definitions,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+% \usetypescript[palatino-light] [texnansi] \setupbodyfont[palatino-light] \input zapf \par
+% \usetypescript[palatino-normal][texnansi] \setupbodyfont[palatino-normal] \input zapf \par
+% \usetypescript[palatino-medium][texnansi] \setupbodyfont[palatino-medium] \input zapf \par
+
+%D This file is used for \LUATEX\ experiments.
+
+\starttypescriptcollection[experiment]
+
+\starttypescript [sans] [palatino-sans-light] [name]
+
+ \definefontsynonym [Sans] [PalatinoSans-Light]
+ \definefontsynonym [SansItalic] [PalatinoSans-LightItalic]
+ \definefontsynonym [SansBold] [PalatinoSans-Regular]
+ \definefontsynonym [SansBoldItalic] [PalatinoSans-Italic]
+ \definefontsynonym [SansSlanted] [PalatinoSans-Regular]
+ \definefontsynonym [SansBoldSlanted] [PalatinoSans-Italic]
+ \definefontsynonym [SansCaps] [PalatinoSans-Light]
+
+\stoptypescript
+
+\starttypescript [sans] [palatino-sans-normal] [name]
+
+ \definefontsynonym [Sans] [PalatinoSans-Regular]
+ \definefontsynonym [SansItalic] [PalatinoSans-Italic]
+ \definefontsynonym [SansBold] [PalatinoSans-Bold]
+ \definefontsynonym [SansBoldItalic] [PalatinoSans-BoldItalic]
+ \definefontsynonym [SansSlanted] [PalatinoSans-Italic]
+ \definefontsynonym [SansBoldSlanted] [PalatinoSans-BoldItalic]
+ \definefontsynonym [SansCaps] [PalatinoSans-Regular]
+
+\stoptypescript
+
+\starttypescript [sans] [palatino-sans-medium] [name]
+
+ \definefontsynonym [Sans] [PalatinoSans-Medium]
+ \definefontsynonym [SansItalic] [PalatinoSans-MediumItalic]
+ \definefontsynonym [SansBold] [PalatinoSans-Bold]
+ \definefontsynonym [SansBoldItalic] [PalatinoSans-BoldItalic]
+ \definefontsynonym [SansSlanted] [PalatinoSans-Bold]
+ \definefontsynonym [SansBoldSlanted] [PalatinoSans-BoldItalic]
+ \definefontsynonym [SansCaps] [PalatinoSans-MediumSC]
+
+\stoptypescript
+
+\starttypescript [sans] [palatino-sans-light,palatino-sans-normal,palatino-sans-medium] [texnansi,ec,8r]
+
+ \definefontsynonym[PalatinoSans-Light] [\typescriptthree-palatinosanscom-light] [encoding=\typescriptthree]
+ \definefontsynonym[PalatinoSans-LightItalic] [\typescriptthree-palatinosanscom-lightitalic] [encoding=\typescriptthree]
+ \definefontsynonym[PalatinoSans-Regular] [\typescriptthree-palatinosanscom-regular] [encoding=\typescriptthree]
+ \definefontsynonym[PalatinoSans-Italic] [\typescriptthree-palatinosanscom-italic] [encoding=\typescriptthree]
+ \definefontsynonym[PalatinoSans-Medium] [\typescriptthree-palatinosanscom-medium] [encoding=\typescriptthree]
+ \definefontsynonym[PalatinoSans-MediumItalic][\typescriptthree-palatinosanscom-mediumitalic][encoding=\typescriptthree]
+ \definefontsynonym[PalatinoSans-Bold] [\typescriptthree-palatinosanscom-bold] [encoding=\typescriptthree]
+ \definefontsynonym[PalatinoSans-BoldItalic] [\typescriptthree-palatinosanscom-bolditalic] [encoding=\typescriptthree]
+
+\stoptypescript
+
+\starttypescript[palatino-normal][texnansi,ec]
+ \definetypeface[palatino-normal][ss][sans] [palatino-sans-normal] [default][encoding=\typescripttwo]
+ \definetypeface[palatino-normal][rm][serif][palatino-nova] [default][encoding=\typescripttwo]
+ \definetypeface[palatino-normal][tt][mono] [latin-modern] [default][encoding=\typescripttwo,rscale=1.1]
+ \definetypeface[palatino-normal][mm][mono] [latin-modern] [default][encoding=\typescripttwo,rscale=1.1]
+ \quittypescriptscanning
+\stoptypescript
+
+\starttypescript[palatino-medium][texnansi,ec]
+ \definetypeface[palatino-medium][ss][sans] [palatino-sans-medium] [default][encoding=\typescripttwo]
+ \definetypeface[palatino-medium][rm][serif][palatino-nova] [default][encoding=\typescripttwo]
+ \definetypeface[palatino-medium][tt][mono] [latin-modern] [default][encoding=\typescripttwo,rscale=1.1]
+ \definetypeface[palatino-medium][mm][mono] [latin-modern] [default][encoding=\typescripttwo,rscale=1.1]
+ \quittypescriptscanning
+\stoptypescript
+
+\starttypescript[palatino-light][texnansi,ec]
+ \definetypeface[palatino-light][ss][sans] [palatino-sans-light] [default][encoding=\typescripttwo]
+ \definetypeface[palatino-light][rm][serif][palatino-nova] [default][encoding=\typescripttwo]
+ \definetypeface[palatino-light][tt][mono] [latin-modern] [default][encoding=\typescripttwo,rscale=1.1]
+ \definetypeface[palatino-light][mm][mono] [latin-modern] [default][encoding=\typescripttwo,rscale=1.1]
+ \quittypescriptscanning
+\stoptypescript
+
+\stoptypescriptcollection
diff --git a/Master/texmf-dist/tex/context/base/type-fsf.tex b/Master/texmf-dist/tex/context/base/type-fsf.tex
index 835fb4153e9..7813b7b5dbd 100644
--- a/Master/texmf-dist/tex/context/base/type-fsf.tex
+++ b/Master/texmf-dist/tex/context/base/type-fsf.tex
@@ -1,3 +1,19 @@
+%D \module
+%D [ file=page-new,
+%D version=2000.10.20,
+%D title=\CONTEXT\ Page Macros,
+%D subtitle=Fontsite 500,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D I'm not sure how correct the fontsite cd is. These are probably
+%D mostly rip-offs. I no longer use these fonts.
+
% run texfont from currentpath with the fonts on subpath fontsite/500
% texfont --en=texnansi --ve=fontsite --co=opus type-fsf.dat
@@ -5,99 +21,72 @@
\starttypescriptcollection[font site 500]
-\starttypescript [sans] [opus] [name]
-
- \definefontsynonym [Sans] [Opus]
- \definefontsynonym [SansCaps] [OpusSmCaps]
- \definefontsynonym [SansItalic] [Opus-Italic]
- \definefontsynonym [SansBold] [Opus-Bold]
- \definefontsynonym [SansBoldCaps] [OpusSmCaps-Bold]
- \definefontsynonym [SansBoldItalic] [Opus-BoldItalic]
-
- \definefontsynonym [SansSlanted] [Opus-Slanted] % faked
- \definefontsynonym [SansBoldSlanted] [Opus-BoldSlanted] % faked
+%D Please use the original Optima!
+\starttypescript [sans] [opus] [name]
+ \definefontsynonym [Sans] [Opus]
+ \definefontsynonym [SansCaps] [OpusSmCaps]
+ \definefontsynonym [SansItalic] [Opus-Italic]
+ \definefontsynonym [SansBold] [Opus-Bold]
+ \definefontsynonym [SansBoldCaps] [OpusSmCaps-Bold]
+ \definefontsynonym [SansBoldItalic] [Opus-BoldItalic]
+ \definefontsynonym [SansSlanted] [Opus-Slanted] % faked
+ \definefontsynonym [SansBoldSlanted] [Opus-BoldSlanted] % faked
\stoptypescript
\starttypescript [sans] [opus] [texnansi,ec,8r]
-
- \definefontsynonym [Opus] [\typescriptthree-opusrg] [encoding=\typescriptthree]
- \definefontsynonym [OpusSmCaps] [\typescriptthree-opusscrg] [encoding=\typescriptthree]
- \definefontsynonym [Opus-Italic] [\typescriptthree-opusi] [encoding=\typescriptthree]
- \definefontsynonym [Opus-Bold] [\typescriptthree-opusb] [encoding=\typescriptthree]
- \definefontsynonym [Opus-BoldItalic] [\typescriptthree-opusbi] [encoding=\typescriptthree]
- \definefontsynonym [OpusSmCaps-Bold] [\typescriptthree-opusscb] [encoding=\typescriptthree]
-
- \definefontsynonym [Opus-Slanted] [\typescriptthree-opusrg-slanted-167] [encoding=\typescriptthree]
- \definefontsynonym [Opus-BoldSlanted] [\typescriptthree-opusb-slanted-167] [encoding=\typescriptthree]
-
-\stoptypescript
-
-\starttypescript [map] [opus] [texnansi,ec,8r]
- \loadmapfile[\typescriptthree-fontsite-opus.map]
+ \definefontsynonym [Opus] [\typescriptthree-opusrg] [encoding=\typescriptthree]
+ \definefontsynonym [OpusSmCaps] [\typescriptthree-opusscrg] [encoding=\typescriptthree]
+ \definefontsynonym [Opus-Italic] [\typescriptthree-opusi] [encoding=\typescriptthree]
+ \definefontsynonym [Opus-Bold] [\typescriptthree-opusb] [encoding=\typescriptthree]
+ \definefontsynonym [Opus-BoldItalic] [\typescriptthree-opusbi] [encoding=\typescriptthree]
+ \definefontsynonym [OpusSmCaps-Bold] [\typescriptthree-opusscb] [encoding=\typescriptthree]
+ \definefontsynonym [Opus-Slanted] [\typescriptthree-opusrg-slanted-167] [encoding=\typescriptthree]
+ \definefontsynonym [Opus-BoldSlanted] [\typescriptthree-opusb-slanted-167] [encoding=\typescriptthree]
+ \loadmapfile[\typescriptthree-fontsite-opus.map]
\stoptypescript
\starttypescript [mono] [typewriter] [name]
-
- \definefontsynonym [Mono] [Typewriter]
- \definefontsynonym [MonoItalic] [Typewriter-Italic]
- \definefontsynonym [MonoBold] [Typewriter-Bold]
- \definefontsynonym [MonoBoldItalic] [Typewriter-BoldItalic]
-
- \definefontsynonym [MonoSlanted] [Typewriter-Slanted] % faked
- \definefontsynonym [MonoBoldSlanted] [Typewriter-BoldSlanted] % faked
-
+ \definefontsynonym [Mono] [Typewriter]
+ \definefontsynonym [MonoItalic] [Typewriter-Italic]
+ \definefontsynonym [MonoBold] [Typewriter-Bold]
+ \definefontsynonym [MonoBoldItalic] [Typewriter-BoldItalic]
+ \definefontsynonym [MonoSlanted] [Typewriter-Slanted] % faked
+ \definefontsynonym [MonoBoldSlanted] [Typewriter-BoldSlanted] % faked
\stoptypescript
\starttypescript [mono] [typewriter] [texnansi,ec,8r]
-
-
- \definefontsynonym [Typewriter] [\typescriptthree-typerg] [encoding=\typescriptthree]
- \definefontsynonym [Typewriter-Italic] [\typescriptthree-typei] [encoding=\typescriptthree]
- \definefontsynonym [Typewriter-Bold] [\typescriptthree-typeb] [encoding=\typescriptthree]
- \definefontsynonym [Typewriter-BoldItalic] [\typescriptthree-typebi] [encoding=\typescriptthree]
-
- \definefontsynonym [Typewriter-Slanted] [\typescriptthree-typerg-slanted-167] [encoding=\typescriptthree]
- \definefontsynonym [Typewriter-BoldSlanted] [\typescriptthree-typeb-slanted-167] [encoding=\typescriptthree]
-
- \definefontsynonym [TypewriterCond] [\typescriptthree-typecrg]
- \definefontsynonym [TypewriterCond-Bold] [\typescriptthree-typecb]
-
-\stoptypescript
-
-\starttypescript [map] [typewriter] [texnansi,ec,8r]
- \loadmapfile[\typescriptthree-fontsite-typewriter.map]
+ \definefontsynonym [Typewriter] [\typescriptthree-typerg] [encoding=\typescriptthree]
+ \definefontsynonym [Typewriter-Italic] [\typescriptthree-typei] [encoding=\typescriptthree]
+ \definefontsynonym [Typewriter-Bold] [\typescriptthree-typeb] [encoding=\typescriptthree]
+ \definefontsynonym [Typewriter-BoldItalic] [\typescriptthree-typebi] [encoding=\typescriptthree]
+ \definefontsynonym [Typewriter-Slanted] [\typescriptthree-typerg-slanted-167] [encoding=\typescriptthree]
+ \definefontsynonym [Typewriter-BoldSlanted] [\typescriptthree-typeb-slanted-167] [encoding=\typescriptthree]
+ \definefontsynonym [TypewriterCond] [\typescriptthree-typecrg]
+ \definefontsynonym [TypewriterCond-Bold] [\typescriptthree-typecb]
+ \loadmapfile[\typescriptthree-fontsite-typewriter.map]
\stoptypescript
\starttypescript [serif] [garamond] [name]
-
- \definefontsynonym [Serif] [FSGaramond]
- \definefontsynonym [SerifCaps] [FSGaramondSmCaps]
- \definefontsynonym [SerifItalic] [FSGaramond-Italic]
- \definefontsynonym [SerifBold] [FSGaramond-Bold]
- \definefontsynonym [SerifBoldCaps] [FSGaramondSmCaps-Bold]
-
- \definefontsynonym [SerifSlanted] [FSGaramond-Slanted]
- \definefontsynonym [SerifBoldSlanted] [FSGaramond-BoldSlanted]
-
+ \definefontsynonym [Serif] [FSGaramond]
+ \definefontsynonym [SerifCaps] [FSGaramondSmCaps]
+ \definefontsynonym [SerifItalic] [FSGaramond-Italic]
+ \definefontsynonym [SerifBold] [FSGaramond-Bold]
+ \definefontsynonym [SerifBoldCaps] [FSGaramondSmCaps-Bold]
+ \definefontsynonym [SerifSlanted] [FSGaramond-Slanted]
+ \definefontsynonym [SerifBoldSlanted] [FSGaramond-BoldSlanted]
\stoptypescript
\starttypescript [serif] [garamond] [texnansi,ec,8r]
-
- \definefontsynonym [FSGaramond] [\typescriptthree-garamond] [encoding=\typescriptthree]
- \definefontsynonym [FSGaramondSmCaps] [\typescriptthree-garasc] [encoding=\typescriptthree]
- \definefontsynonym [FSGaramond-Italic] [\typescriptthree-garai] [encoding=\typescriptthree]
- \definefontsynonym [FSGaramond-Bold] [\typescriptthree-garab] [encoding=\typescriptthree]
- \definefontsynonym [FSGaramond-BoldItalic] [\typescriptthree-garabi] [encoding=\typescriptthree]
- \definefontsynonym [FSGaramondSmCaps-Bold] [\typescriptthree-garascb] [encoding=\typescriptthree]
-
- \definefontsynonym [FSGaramond-Slanted] [\typescriptthree-garamond-slanted-167] [encoding=\typescriptthree]
- \definefontsynonym [FSGaramond-BoldSlanted] [\typescriptthree-garab-slanted-167] [encoding=\typescriptthree]
-
-\stoptypescript
-
-\starttypescript [map] [garamond] [texnansi,ec,8r]
- \loadmapfile[\typescriptthree-fontsite-garamond.map]
+ \definefontsynonym [FSGaramond] [\typescriptthree-garamond] [encoding=\typescriptthree]
+ \definefontsynonym [FSGaramondSmCaps] [\typescriptthree-garasc] [encoding=\typescriptthree]
+ \definefontsynonym [FSGaramond-Italic] [\typescriptthree-garai] [encoding=\typescriptthree]
+ \definefontsynonym [FSGaramond-Bold] [\typescriptthree-garab] [encoding=\typescriptthree]
+ \definefontsynonym [FSGaramond-BoldItalic] [\typescriptthree-garabi] [encoding=\typescriptthree]
+ \definefontsynonym [FSGaramondSmCaps-Bold] [\typescriptthree-garascb] [encoding=\typescriptthree]
+ \definefontsynonym [FSGaramond-Slanted] [\typescriptthree-garamond-slanted-167] [encoding=\typescriptthree]
+ \definefontsynonym [FSGaramond-BoldSlanted] [\typescriptthree-garab-slanted-167] [encoding=\typescriptthree]
+ \loadmapfile[\typescriptthree-fontsite-garamond.map]
\stoptypescript
\stoptypescriptcollection
diff --git a/Master/texmf-dist/tex/context/base/type-ghz.tex b/Master/texmf-dist/tex/context/base/type-ghz.tex
index afb637818f9..52de82043f3 100644
--- a/Master/texmf-dist/tex/context/base/type-ghz.tex
+++ b/Master/texmf-dist/tex/context/base/type-ghz.tex
@@ -59,8 +59,6 @@
\starttypescript [sans] [optima,optima-nova] [texnansi,ec,8r]
- \loadmapfile[\typescriptthree-linotype-optima.map]
-
\definefontsynonym [OptimaLT] [\typescriptthree-lte50019] [encoding=\typescriptthree]
\definefontsynonym [OptimaLT-Italic] [\typescriptthree-lte52401] [encoding=\typescriptthree]
\definefontsynonym [OptimaLT-Bold] [\typescriptthree-lte50021] [encoding=\typescriptthree]
@@ -75,37 +73,21 @@
\definefontsynonym [OptimaLT-ExtraBlack] [\typescriptthree-lte53511] [encoding=\typescriptthree]
\definefontsynonym [OptimaLT-ExtraBlackItalic] [\typescriptthree-lte53512] [encoding=\typescriptthree]
-\stoptypescript
-
-\starttypescript [map] [optima,optima-nova] [texnansi,ec,8r]
-
\loadmapfile[\typescriptthree-linotype-optima.map]
\stoptypescript
-% optima nova
-
-% see antykwa, we could define variants for light and osf
-
-\starttypescript[optima-nova][texnansi,ec] % will change to more narrow tt
- \definetypeface[optima][ss][sans][optima-nova] [default][encoding=\typescripttwo]
- \definetypeface[optima][rm][sans][optima-nova] [default][encoding=\typescripttwo]
-% \definetypeface[optima][tt][mono][latin-modern][default][encoding=\typescripttwo,rscale=1.125]
-% \definetypeface[optima][mm][mono][latin-modern][default][encoding=\typescripttwo,rscale=1.125]
- \definetypeface[optima][tt][mono][latin-modern][default][encoding=\typescripttwo,rscale=1.1]
- \definetypeface[optima][mm][mono][latin-modern][default][encoding=\typescripttwo,rscale=1.1]
+\starttypescript [optima] [texnansi,ec,qx]
+ \definetypeface[optima][ss][sans] [optima-nova][default][encoding=\typescripttwo]
+ \definetypeface[optima][rm][serif][palatino] [default][encoding=\typescripttwo]
+ \definetypeface[optima][tt][mono] [modern] [default][encoding=\typescripttwo,rscale=1.1]
+ \definetypeface[optima][mm][math] [palatino] [default][encoding=\typescripttwo]
\quittypescriptscanning
\stoptypescript
-\starttypescript[optima-nova-os][texnansi,ec] % will change to more narrow tt
- \definetypeface[optima-os][ss][sans][optima-nova-os] [default][encoding=\typescripttwo]
- \definetypeface[optima-os][rm][sans][optima-nova-os] [default][encoding=\typescripttwo]
-% \definetypeface[optima-os][tt][mono][latin-modern] [default][encoding=\typescripttwo,rscale=1.125]
-% \definetypeface[optima-os][mm][mono][latin-modern] [default][encoding=\typescripttwo,rscale=1.125]
- \definetypeface[optima-os][tt][mono][latin-modern] [default][encoding=\typescripttwo,rscale=1.1]
- \definetypeface[optima-os][mm][mono][latin-modern] [default][encoding=\typescripttwo,rscale=1.1]
- \quittypescriptscanning
-\stoptypescript
+% optima nova
+
+% see antykwa, we could define variants for light and osf
\starttypescript [sans] [optima-nova] [name]
@@ -176,8 +158,6 @@
\starttypescript [sans] [optima-nova,optima-nova-light,optima-nova-medium,optima-nova-os] [texnansi,ec,8r]
- \loadmapfile[\typescriptthree-linotype-optima-nova.map]
-
\definefontsynonym[OptimaNovaLT-Light] [\typescriptthree-lt55476][encoding=\typescriptthree]
\definefontsynonym[OptimaNovaLT-LightSC] [\typescriptthree-lt55477][encoding=\typescriptthree]
\definefontsynonym[OptimaNovaLT-LightOsF] [\typescriptthree-lt55478][encoding=\typescriptthree]
@@ -219,10 +199,24 @@
\definefontsynonym[OptimaNovaLT-Black] [\typescriptthree-lt55514][encoding=\typescriptthree]
\definefontsynonym[OptimaNovaLT-BlackItalic] [\typescriptthree-lt55515][encoding=\typescriptthree]
+ \loadmapfile[\typescriptthree-linotype-optima-nova.map]
+
\stoptypescript
-\starttypescript [map] [optima-nova,optima-nova-light,optima-nova-medium,optima-nova-os] [texnansi,ec,8r]
- \loadmapfile[\typescriptthree-linotype-optima-nova.map]
+\starttypescript[optima-nova][texnansi,ec] % will change to more narrow tt
+ \definetypeface[optima][ss][sans][optima-nova] [default][encoding=\typescripttwo]
+ \definetypeface[optima][rm][sans][optima-nova] [default][encoding=\typescripttwo]
+ \definetypeface[optima][tt][mono][latin-modern][default][encoding=\typescripttwo,rscale=1.1]
+ \definetypeface[optima][mm][mono][latin-modern][default][encoding=\typescripttwo,rscale=1.1]
+ \quittypescriptscanning
+\stoptypescript
+
+\starttypescript[optima-nova-os][texnansi,ec] % will change to more narrow tt
+ \definetypeface[optima-os][ss][sans][optima-nova-os] [default][encoding=\typescripttwo]
+ \definetypeface[optima-os][rm][sans][optima-nova-os] [default][encoding=\typescripttwo]
+ \definetypeface[optima-os][tt][mono][latin-modern] [default][encoding=\typescripttwo,rscale=1.1]
+ \definetypeface[optima-os][mm][mono][latin-modern] [default][encoding=\typescripttwo,rscale=1.1]
+ \quittypescriptscanning
\stoptypescript
% palatino
@@ -242,8 +236,6 @@
\starttypescript [serif] [palatino] [texnansi,ec,8r]
- \loadmapfile[\typescriptthree-linotype-palatino.map]
-
\definefontsynonym[PalatinoLT-Roman] [\typescriptthree-lte50001] [encoding=\typescriptthree]
\definefontsynonym[PalatinoLT-Italic] [\typescriptthree-lte50002] [encoding=\typescriptthree]
\definefontsynonym[PalatinoLT-Bold] [\typescriptthree-lte50003] [encoding=\typescriptthree]
@@ -261,10 +253,8 @@
\definefontsynonym[PalatinoSC] [\typescriptthree-posc] [encoding=\typescriptthree]
-\stoptypescript
-
-\starttypescript [map] [palatino] [texnansi,ec,8r]
\loadmapfile[\typescriptthree-linotype-palatino.map]
+
\stoptypescript
% palatino nova
@@ -317,8 +307,6 @@
\starttypescript [serif] [palatino-nova,palatino-nova-light,palatino-nova-medium] [texnansi,ec,8r]
- \loadmapfile[\typescriptthree-linotype-palatino-nova.map]
-
\definefontsynonym[PalatinoNova-Light] [\typescriptthree-PalatinoNova-Light] [encoding=\typescriptthree]
\definefontsynonym[PalatinoNova-LightItalic] [\typescriptthree-PalatinoNova-LightItalic] [encoding=\typescriptthree]
\definefontsynonym[PalatinoNova-Regular] [\typescriptthree-PalatinoNova-Regular] [encoding=\typescriptthree]
@@ -330,8 +318,6 @@
\definefontsynonym[PalatinoNova-Imperial] [\typescriptthree-PalatinoNova-Imperial] [encoding=\typescriptthree]
\definefontsynonym[PalatinoNova-Titling] [\typescriptthree-PalatinoNova-Titling] [encoding=\typescriptthree]
- \loadmapfile[\typescriptthree-sc-linotype-palatino-nova.map]
-
\definefontsynonym[PalatinoNova-LightSC] [\typescriptthree-sc-PalatinoNova-Light] [encoding=\typescriptthree]
\definefontsynonym[PalatinoNova-LightItalicSC] [\typescriptthree-sc-PalatinoNova-LightItalic] [encoding=\typescriptthree]
\definefontsynonym[PalatinoNova-RegularSC] [\typescriptthree-sc-PalatinoNova-Regular] [encoding=\typescriptthree]
@@ -343,12 +329,9 @@
\definefontsynonym[PalatinoNova-ImperialSC] [\typescriptthree-sc-PalatinoNova-Imperial] [encoding=\typescriptthree]
\definefontsynonym[PalatinoNova-TitlingSC] [\typescriptthree-sc-PalatinoNova-Titling] [encoding=\typescriptthree]
-\stoptypescript
-
-\starttypescript [map] [palatino-nova,palatino-nova-light,palatino-nova-medium] [texnansi,ec,8r]
\loadmapfile[\typescriptthree-linotype-palatino-nova.map]
\loadmapfile[\typescriptthree-sc-linotype-palatino-nova.map]
-% \loadmapfile[\typescriptthree-os-linotype-palatino-nova.map]
+
\stoptypescript
% aldusnova
@@ -377,27 +360,20 @@
\starttypescript [serif] [aldus-nova] [texnansi,ec,8r]
- \loadmapfile[\typescriptthree-linotype-aldus-nova.map]
-
\definefontsynonym[AldusNova-Book] [\typescriptthree-AldusNova-Book] [encoding=\typescriptthree]
\definefontsynonym[AldusNova-BookItalic] [\typescriptthree-AldusNova-BookItalic] [encoding=\typescriptthree]
\definefontsynonym[AldusNova-Bold] [\typescriptthree-AldusNova-Bold] [encoding=\typescriptthree]
\definefontsynonym[AldusNova-BoldItalic] [\typescriptthree-AldusNova-BoldItalic] [encoding=\typescriptthree]
- \loadmapfile[\typescriptthree-sc-linotype-aldus-nova.map]
-
\definefontsynonym[AldusNova-BookSC] [\typescriptthree-sc-AldusNova-Book] [encoding=\typescriptthree]
\definefontsynonym[AldusNova-BookItalicSC] [\typescriptthree-sc-AldusNova-BookItalic] [encoding=\typescriptthree]
\definefontsynonym[AldusNova-BoldSC] [\typescriptthree-sc-AldusNova-Bold] [encoding=\typescriptthree]
\definefontsynonym[AldusNova-BoldItalicSC] [\typescriptthree-sc-AldusNova-BoldItalic] [encoding=\typescriptthree]
-\stoptypescript
-
-\starttypescript [map] [aldus-nova] [texnansi,ec,8r]
\loadmapfile[\typescriptthree-linotype-aldus-nova.map]
\loadmapfile[\typescriptthree-sc-linotype-aldus-nova.map]
-\stoptypescript
+\stoptypescript
% melior
@@ -419,17 +395,13 @@
\starttypescript [serif] [melior] [texnansi,ec,8r]
- \loadmapfile[\typescriptthree-linotype-melior.map]
-
\definefontsynonym [MeliorLT] [texnansi-lte50062] [encoding=\typescriptthree]
\definefontsynonym [MeliorLT-Italic] [texnansi-lte50063] [encoding=\typescriptthree]
\definefontsynonym [MeliorLT-Bold] [texnansi-lte50064] [encoding=\typescriptthree]
\definefontsynonym [MeliorLT-BoldItalic] [texnansi-lte50065] [encoding=\typescriptthree]
-\stoptypescript
-
-\starttypescript [map] [melior] [texnansi,ec,8r]
\loadmapfile[\typescriptthree-linotype-melior.map]
+
\stoptypescript
\stoptypescriptcollection
diff --git a/Master/texmf-dist/tex/context/base/type-gyr.tex b/Master/texmf-dist/tex/context/base/type-gyr.tex
index ee53e25c2f5..80b391f771e 100644
--- a/Master/texmf-dist/tex/context/base/type-gyr.tex
+++ b/Master/texmf-dist/tex/context/base/type-gyr.tex
@@ -11,6 +11,12 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
+% \beginNEWTEX already-otf-gyre
+% \endinput
+% \endNEWTEX
+
+%D These definitions will eventually replace the ones in \type {type-one}!
+
% \usetypescriptfile[type-gyr]
% \definetypeface[pagella][rm][serif][pagella][default][encoding=t5]
% \setupbodyfont[pagella]
@@ -26,61 +32,88 @@
% \showfont[SerifItalicCaps]
% \stoptext
+% Beware, because tetex demanded a different map file naming scheme, we ship
+% alternatively named files as well, just to make sure that older installations
+% still work (where users may load their own instances). In due time we will
+% follow that scheme (well, in due time we will drop map files anyway).
+
\starttypescriptcollection[gyre]
%D First we define the new ones. Watch how we use the systematic name composition.
\definetypescriptprefix [n:pagella] [TeXGyrePagella]
\definetypescriptprefix [n:termes] [TeXGyreTermes]
+\definetypescriptprefix [n:heros] [TeXGyreHeros]
\definetypescriptprefix [n:bonum] [TeXGyreBonum]
\definetypescriptprefix [n:schola] [TeXGyreSchola]
+\definetypescriptprefix [n:adventor][TeXGyreAdventor]
\definetypescriptprefix [f:pagella] [pl]
\definetypescriptprefix [f:termes] [tm]
+\definetypescriptprefix [f:heros] [hv]
\definetypescriptprefix [f:bonum] [bk]
\definetypescriptprefix [f:schola] [cs]
+\definetypescriptprefix [f:adventor][ag]
+
+\starttypescript [serif] [pagella,termes,heros,bonum,schola,adventor] [ec,texnansi,cs,el,qx,rm,t5,t2a,t2b,t2c,l7x]
+ \definefontsynonym [\typescriptprefix{n:\typescripttwo}-Regular] [\typescriptthree-q\typescriptprefix{f:\typescripttwo}r] [encoding=\typescriptthree]
+ \definefontsynonym [\typescriptprefix{n:\typescripttwo}-Italic] [\typescriptthree-q\typescriptprefix{f:\typescripttwo}ri] [encoding=\typescriptthree]
+ \definefontsynonym [\typescriptprefix{n:\typescripttwo}-Bold] [\typescriptthree-q\typescriptprefix{f:\typescripttwo}b] [encoding=\typescriptthree]
+ \definefontsynonym [\typescriptprefix{n:\typescripttwo}-BoldItalic] [\typescriptthree-q\typescriptprefix{f:\typescripttwo}bi] [encoding=\typescriptthree]
-\starttypescript [serif] [pagella,termes,bonum,schola] [ec,texnansi,cs,el,qx,rm,t5,t2a,t2b,t2c,l7x]
- \loadmapfile[\typescriptthree-q\typescriptprefix{f:\typescripttwo}.map]
+ \definefontsynonym [\typescriptprefix{n:\typescripttwo}-Caps] [\typescriptthree-q\typescriptprefix{f:\typescripttwo}r-sc] [encoding=\typescriptthree]
+ \definefontsynonym [\typescriptprefix{n:\typescripttwo}-ItalicCaps] [\typescriptthree-q\typescriptprefix{f:\typescripttwo}ri-sc] [encoding=\typescriptthree]
+ \definefontsynonym [\typescriptprefix{n:\typescripttwo}-BoldCaps] [\typescriptthree-q\typescriptprefix{f:\typescripttwo}b-sc] [encoding=\typescriptthree]
+ \definefontsynonym [\typescriptprefix{n:\typescripttwo}-BoldItalicCaps] [\typescriptthree-q\typescriptprefix{f:\typescripttwo}bi-sc] [encoding=\typescriptthree]
- \definefontsynonym [\typescriptprefix{n:\typescripttwo}-Regular] [\typescriptthree-q\typescriptprefix{f:\typescripttwo}r] [encoding=\typescriptthree]
- \definefontsynonym [\typescriptprefix{n:\typescripttwo}-Italic] [\typescriptthree-q\typescriptprefix{f:\typescripttwo}ri] [encoding=\typescriptthree]
- \definefontsynonym [\typescriptprefix{n:\typescripttwo}-Bold] [\typescriptthree-q\typescriptprefix{f:\typescripttwo}b] [encoding=\typescriptthree]
- \definefontsynonym [\typescriptprefix{n:\typescripttwo}-BoldItalic] [\typescriptthree-q\typescriptprefix{f:\typescripttwo}bi] [encoding=\typescriptthree]
- \definefontsynonym [\typescriptprefix{n:\typescripttwo}-Caps] [\typescriptthree-q\typescriptprefix{f:\typescripttwo}r-sc] [encoding=\typescriptthree]
- \definefontsynonym [\typescriptprefix{n:\typescripttwo}-ItalicCaps] [\typescriptthree-q\typescriptprefix{f:\typescripttwo}ri-sc] [encoding=\typescriptthree]
- \definefontsynonym [\typescriptprefix{n:\typescripttwo}-BoldCaps] [\typescriptthree-q\typescriptprefix{f:\typescripttwo}b-sc] [encoding=\typescriptthree]
- \definefontsynonym [\typescriptprefix{n:\typescripttwo}-BoldItalicCaps] [\typescriptthree-q\typescriptprefix{f:\typescripttwo}bi-sc] [encoding=\typescriptthree]
+ \definefontsynonym [\typescriptprefix{n:\typescripttwo}-Slanted] [\typescriptprefix{n:\typescripttwo}-Italic]
+ \definefontsynonym [\typescriptprefix{n:\typescripttwo}-BoldSlanted] [\typescriptprefix{n:\typescripttwo}-BoldItalic]
- \definefontsynonym [\typescriptprefix{n:\typescripttwo}-Slanted] [\typescriptprefix{n:\typescripttwo}-Italic]
- \definefontsynonym [\typescriptprefix{n:\typescripttwo}-BoldSlanted] [\typescriptprefix{n:\typescripttwo}-BoldItalic]
+ \loadmapfile[q\typescriptprefix{f:\typescripttwo}-\typescriptthree.map]
\stoptypescript
\starttypescript [serif] [pagella,termes,bonum,schola] [name]
- \definefontsynonym [Serif] [\typescriptprefix{n:\typescripttwo}-Regular]
- \definefontsynonym [SerifItalic] [\typescriptprefix{n:\typescripttwo}-Italic]
- \definefontsynonym [SerifBold] [\typescriptprefix{n:\typescripttwo}-Bold]
- \definefontsynonym [SerifBoldItalic] [\typescriptprefix{n:\typescripttwo}-BoldItalic]
- \definefontsynonym [SerifCaps] [\typescriptprefix{n:\typescripttwo}-Caps]
- \definefontsynonym [SerifSlanted] [\typescriptprefix{n:\typescripttwo}-Slanted]
- \definefontsynonym [SerifBoldSlanted] [\typescriptprefix{n:\typescripttwo}-BoldSlanted]
-
- \definefontvariant [Serif][osf][Caps]
- \definefontvariant [Serif][sc] [Caps]
-
- \definefontsynonym [SerifRegular] [\typescriptprefix{n:\typescripttwo}-Regular]
- \definefontsynonym [SerifRegularCaps] [\typescriptprefix{n:\typescripttwo}-Caps]
- \definefontsynonym [SerifItalicCaps] [\typescriptprefix{n:\typescripttwo}-ItalicCaps]
- \definefontsynonym [SerifBoldCaps] [\typescriptprefix{n:\typescripttwo}-BoldCaps]
- \definefontsynonym [SerifBoldItalicCaps] [\typescriptprefix{n:\typescripttwo}-BoldItalicCaps]
- \definefontsynonym [SerifCapsCaps] [\typescriptprefix{n:\typescripttwo}-Caps]
- \definefontsynonym [SerifSlantedCaps] [\typescriptprefix{n:\typescripttwo}-ItalicCaps]
- \definefontsynonym [SerifBoldSlantedCaps] [\typescriptprefix{n:\typescripttwo}-BoldItalicCaps]
-
+ \definefontsynonym [Serif] [\typescriptprefix{n:\typescripttwo}-Regular]
+ \definefontsynonym [SerifItalic] [\typescriptprefix{n:\typescripttwo}-Italic]
+ \definefontsynonym [SerifBold] [\typescriptprefix{n:\typescripttwo}-Bold]
+ \definefontsynonym [SerifBoldItalic] [\typescriptprefix{n:\typescripttwo}-BoldItalic]
+ \definefontsynonym [SerifCaps] [\typescriptprefix{n:\typescripttwo}-Caps]
+ \definefontsynonym [SerifSlanted] [\typescriptprefix{n:\typescripttwo}-Slanted]
+ \definefontsynonym [SerifBoldSlanted] [\typescriptprefix{n:\typescripttwo}-BoldSlanted]
+
+ \definefontvariant [Serif][osf][Caps]
+ \definefontvariant [Serif][sc] [Caps]
+
+ \definefontsynonym [SerifRegular] [\typescriptprefix{n:\typescripttwo}-Regular]
+ \definefontsynonym [SerifRegularCaps] [\typescriptprefix{n:\typescripttwo}-Caps]
+ \definefontsynonym [SerifItalicCaps] [\typescriptprefix{n:\typescripttwo}-ItalicCaps]
+ \definefontsynonym [SerifBoldCaps] [\typescriptprefix{n:\typescripttwo}-BoldCaps]
+ \definefontsynonym [SerifBoldItalicCaps] [\typescriptprefix{n:\typescripttwo}-BoldItalicCaps]
+ \definefontsynonym [SerifCapsCaps] [\typescriptprefix{n:\typescripttwo}-Caps]
+ \definefontsynonym [SerifSlantedCaps] [\typescriptprefix{n:\typescripttwo}-ItalicCaps]
+ \definefontsynonym [SerifBoldSlantedCaps] [\typescriptprefix{n:\typescripttwo}-BoldItalicCaps]
\stoptypescript
-\starttypescript [map] [pagella,termes,bonum,schola] [ec,texnansi,cs,el,qx,rm,t5,t2a,t2b,t2c,l7x]
- \loadmapfile[\typescriptthree-q\typescriptprefix{f:\typescripttwo}.map]
+\starttypescript [sans] [heros,adventor] [name]
+ \definefontsynonym [Sans] [\typescriptprefix{n:\typescripttwo}-Regular]
+ \definefontsynonym [SansItalic] [\typescriptprefix{n:\typescripttwo}-Italic]
+ \definefontsynonym [SansBold] [\typescriptprefix{n:\typescripttwo}-Bold]
+ \definefontsynonym [SansBoldItalic] [\typescriptprefix{n:\typescripttwo}-BoldItalic]
+ \definefontsynonym [SansCaps] [\typescriptprefix{n:\typescripttwo}-Caps]
+ \definefontsynonym [SansSlanted] [\typescriptprefix{n:\typescripttwo}-Slanted]
+ \definefontsynonym [SansBoldSlanted] [\typescriptprefix{n:\typescripttwo}-BoldSlanted]
+
+ \definefontvariant [Sans][osf][Caps]
+ \definefontvariant [Sans][sc] [Caps]
+
+ \definefontsynonym [SansRegular] [\typescriptprefix{n:\typescripttwo}-Regular]
+ \definefontsynonym [SansRegularCaps] [\typescriptprefix{n:\typescripttwo}-Caps]
+ \definefontsynonym [SansItalicCaps] [\typescriptprefix{n:\typescripttwo}-ItalicCaps]
+ \definefontsynonym [SansBoldCaps] [\typescriptprefix{n:\typescripttwo}-BoldCaps]
+ \definefontsynonym [SansBoldItalicCaps] [\typescriptprefix{n:\typescripttwo}-BoldItalicCaps]
+ \definefontsynonym [SansCapsCaps] [\typescriptprefix{n:\typescripttwo}-Caps]
+ \definefontsynonym [SansSlantedCaps] [\typescriptprefix{n:\typescripttwo}-ItalicCaps]
+ \definefontsynonym [SansBoldSlantedCaps] [\typescriptprefix{n:\typescripttwo}-BoldItalicCaps]
\stoptypescript
%D Here we overload the older (URW) fonts.
@@ -93,16 +126,17 @@
% qplbi TeXGyrePagella-BoldItalic
\starttypescript [serif] [palatino] [ec,texnansi,cs,el,qx,rm,t5,t2a,t2b,t2c,l7x]
- \loadmapfile[\typescriptthree-qpl.map]
+ \definefontsynonym [Palatino] [\typescriptthree-qplr] [encoding=\typescriptthree]
+ \definefontsynonym [Palatino-Italic] [\typescriptthree-qplri] [encoding=\typescriptthree]
+ \definefontsynonym [Palatino-Bold] [\typescriptthree-qplb] [encoding=\typescriptthree]
+ \definefontsynonym [Palatino-BoldItalic] [\typescriptthree-qplbi] [encoding=\typescriptthree]
+ \definefontsynonym [Palatino-Caps] [\typescriptthree-qplr-sc] [encoding=\typescriptthree]
- \definefontsynonym [Palatino] [\typescriptthree-qplr] [encoding=\typescriptthree]
- \definefontsynonym [Palatino-Italic] [\typescriptthree-qplri] [encoding=\typescriptthree]
- \definefontsynonym [Palatino-Bold] [\typescriptthree-qplb] [encoding=\typescriptthree]
- \definefontsynonym [Palatino-BoldItalic] [\typescriptthree-qplbi] [encoding=\typescriptthree]
- \definefontsynonym [Palatino-Caps] [\typescriptthree-qplr-sc] [encoding=\typescriptthree]
+ \definefontsynonym [Palatino-Slanted] [Palatino-Italic]
+ \definefontsynonym [Palatino-BoldSlanted] [Palatino-BoldItalic]
- \definefontsynonym [Palatino-Slanted] [Palatino-Italic]
- \definefontsynonym [Palatino-BoldSlanted] [Palatino-BoldItalic]
+ \loadmapfile[qpl-\typescriptthree.map]
+ \unloadmapfile[\typescriptthree-urw-palatino.map]
\stoptypescript
% TeXGyreTermes
@@ -113,16 +147,53 @@
% qtmbi TeXGyreTermes-BoldItalic
\starttypescript [serif] [times] [ec,texnansi,cs,el,qx,rm,t5,t2a,t2b,t2c,l7x]
- \loadmapfile[\typescriptthree-qtm.map]
+ \definefontsynonym [Times-Roman] [\typescriptthree-qtmr] [encoding=\typescriptthree]
+ \definefontsynonym [Times-Italic] [\typescriptthree-qtmri] [encoding=\typescriptthree]
+ \definefontsynonym [Times-Bold] [\typescriptthree-qtmb] [encoding=\typescriptthree]
+ \definefontsynonym [Times-BoldItalic] [\typescriptthree-qtmbi] [encoding=\typescriptthree]
+ \definefontsynonym [Times-Caps] [\typescriptthree-qtmr-sc] [encoding=\typescriptthree]
+
+ \definefontsynonym [Times-Slanted] [Times-Italic]
+ \definefontsynonym [Times-BoldSlanted] [Times-BoldItalic]
+
+ \loadmapfile[qtm-\typescriptthree.map]
+ \unloadmapfile[\typescriptthree-urw-times.map]
+\stoptypescript
- \definefontsynonym [Times-Roman] [\typescriptthree-qtmr] [encoding=\typescriptthree]
- \definefontsynonym [Times-Italic] [\typescriptthree-qtmri] [encoding=\typescriptthree]
- \definefontsynonym [Times-Bold] [\typescriptthree-qtmb] [encoding=\typescriptthree]
- \definefontsynonym [Times-BoldItalic] [\typescriptthree-qtmbi] [encoding=\typescriptthree]
- \definefontsynonym [Times-Caps] [\typescriptthree-qtmr-sc] [encoding=\typescriptthree]
+% TeXGyreHeros
+%
+% qtmr TeXGyreHeros-Regular
+% qtmri TeXGyreHeros-Italic
+% qtmb TeXGyreHeros-Bold
+% qtmbi TeXGyreHeros-BoldItalic
+
+\starttypescript [sans] [heros,helvetica] [ec,texnansi,cs,el,qx,rm,t5,t2a,t2b,t2c,l7x]
+ \definefontsynonym [Helvetica] [\typescriptthree-qhvr] [encoding=\typescriptthree]
+ \definefontsynonym [Helvetica-Oblique] [\typescriptthree-qhvri] [encoding=\typescriptthree]
+ \definefontsynonym [Helvetica-Bold] [\typescriptthree-qhvb] [encoding=\typescriptthree]
+ \definefontsynonym [Helvetica-BoldOblique] [\typescriptthree-qhvbi] [encoding=\typescriptthree]
+ \definefontsynonym [Helvetica-Caps] [\typescriptthree-qhvr-sc] [encoding=\typescriptthree]
+
+ \loadmapfile[qhv-\typescriptthree.map]
+ \unloadmapfile[\typescriptthree-urw-helvetica.map]
+\stoptypescript
- \definefontsynonym [Times-Slanted] [Times-Italic]
- \definefontsynonym [Times-BoldSlanted] [Times-BoldItalic]
+% TeXGyreCursor
+%
+% qcrr TeXGyreCursor-Regular
+% qcrri TeXGyreCursor-Italic
+% qcrb TeXGyreCursor-Bold
+% qcrbi TeXGyreCursor-BoldItalic
+
+\starttypescript [mono] [cursor,courier] [ec,texnansi,cs,el,qx,rm,t5,t2a,t2b,t2c,l7x]
+ \definefontsynonym [Courier] [\typescriptthree-qcrr] [encoding=\typescriptthree]
+ \definefontsynonym [Courier-Bold] [\typescriptthree-qcrri] [encoding=\typescriptthree]
+ \definefontsynonym [Courier-Oblique] [\typescriptthree-qcrb] [encoding=\typescriptthree]
+ \definefontsynonym [Courier-BoldOblique] [\typescriptthree-qcrbi] [encoding=\typescriptthree]
+ \fakecontrolspace
+
+ \loadmapfile[qcr-\typescriptthree.map]
+ \unloadmapfile[\typescriptthree-urw-courier.map]
\stoptypescript
% TeXGyreBonum
@@ -133,16 +204,17 @@
% qtmbi TeXGyreBonum-BoldItalic
\starttypescript [serif] [bookman] [ec,texnansi,cs,el,qx,rm,t5,t2a,t2b,t2c,l7x]
- \loadmapfile[\typescriptthree-qbk.map]
+ \definefontsynonym [Bookman-Light] [\typescriptthree-qbkr] [encoding=\typescriptthree]
+ \definefontsynonym [Bookman-LightItalic] [\typescriptthree-qbkri] [encoding=\typescriptthree]
+ \definefontsynonym [Bookman-DemiBold] [\typescriptthree-qbkb] [encoding=\typescriptthree]
+ \definefontsynonym [Bookman-DemiBoldItalic] [\typescriptthree-qbkbi] [encoding=\typescriptthree]
+ \definefontsynonym [Bookman-Light-Caps] [\typescriptthree-qbkr-sc] [encoding=\typescriptthree]
- \definefontsynonym [Bookman-Light] [\typescriptthree-qbkr] [encoding=\typescriptthree]
- \definefontsynonym [Bookman-LightItalic] [\typescriptthree-qbkri] [encoding=\typescriptthree]
- \definefontsynonym [Bookman-DemiBold] [\typescriptthree-qbkb] [encoding=\typescriptthree]
- \definefontsynonym [Bookman-DemiBoldItalic] [\typescriptthree-qbkbi] [encoding=\typescriptthree]
- \definefontsynonym [Bookman-Light-Caps] [\typescriptthree-qbkr-sc] [encoding=\typescriptthree]
+ \definefontsynonym [Bookman-LightSlanted] [Bookman-LightItalic]
+ \definefontsynonym [Bookman-DemiBoldSlanted] [Bookman-DemiBoldItalic]
- \definefontsynonym [Bookman-LightSlanted] [Bookman-LightItalic]
- \definefontsynonym [Bookman-DemiBoldSlanted] [Bookman-DemiBoldItalic]
+ \loadmapfile[qbk-\typescriptthree.map]
+ \unloadmapfile[\typescriptthree-urw-bookman.map]
\stoptypescript
% TeXGyreScola
@@ -153,16 +225,26 @@
% qcsbi TeXGyreSchola-BoldItalic
\starttypescript [serif] [schoolbook] [ec,texnansi,cs,el,qx,rm,t5,t2a,t2b,t2c,l7x]
- \loadmapfile[\typescriptthree-qcs.map]
+ \definefontsynonym [Schoolbook-Roman] [\typescriptthree-qcsr] [encoding=\typescriptthree]
+ \definefontsynonym [Schoolbook-Italic] [\typescriptthree-qcsri] [encoding=\typescriptthree]
+ \definefontsynonym [Schoolbook-Bold] [\typescriptthree-qcsb] [encoding=\typescriptthree]
+ \definefontsynonym [Schoolbook-BoldItalic] [\typescriptthree-qcsbi] [encoding=\typescriptthree]
+ \definefontsynonym [Schoolbook-Roman-Caps] [\typescriptthree-qcsr-sc] [encoding=\typescriptthree]
- \definefontsynonym [Schoolbook-Roman] [\typescriptthree-qcsr] [encoding=\typescriptthree]
- \definefontsynonym [Schoolbook-Italic] [\typescriptthree-qcsri] [encoding=\typescriptthree]
- \definefontsynonym [Schoolbook-Bold] [\typescriptthree-qcsb] [encoding=\typescriptthree]
- \definefontsynonym [Schoolbook-BoldItalic] [\typescriptthree-qcsbi] [encoding=\typescriptthree]
- \definefontsynonym [Schoolbook-Roman-Caps] [\typescriptthree-qcsr-sc] [encoding=\typescriptthree]
+ \definefontsynonym [Schoolbook-Slanted] [Schoolbook-Italic]
+ \definefontsynonym [Schoolbook-BoldSlanted] [Schoolbook-BoldItalic]
- \definefontsynonym [Schoolbook-Slanted] [Schoolbook-Italic]
- \definefontsynonym [Schoolbook-BoldSlanted] [Schoolbook-BoldItalic]
+ \loadmapfile[qcs-\typescriptthree.map]
+ \unloadmapfile[\typescriptthree-urw-ncntrsbk.map]
\stoptypescript
+% TeXGyreAdventor
+%
+% qagr TeXGyreAdventor-Regular
+% qagri TeXGyreAdventor-Italic
+% qagb TeXGyreAdventor-Bold
+% qagbi TeXGyreAdventor-BoldItalic
+
+% not previously defined
+
\stoptypescriptcollection
diff --git a/Master/texmf-dist/tex/context/base/type-ini.tex b/Master/texmf-dist/tex/context/base/type-ini.tex
index 3244cc430f9..d01b9c73bfb 100644
--- a/Master/texmf-dist/tex/context/base/type-ini.tex
+++ b/Master/texmf-dist/tex/context/base/type-ini.tex
@@ -76,25 +76,39 @@
{\splitfiletype{#1}%
\addtocommalist\splitoffname\typescriptfiles}}
-\usetypescriptfile[\f!typeprefix exa] % some examples
-\usetypescriptfile[\f!typeprefix syn] % font file synonyms
-\usetypescriptfile[\f!typeprefix enc] % files and encodings
-%usetypescriptfile[\f!typeprefix dis] % funny name remappings, obsolete
-\usetypescriptfile[\f!typeprefix siz] % specific font sizes
-\usetypescriptfile[\f!typeprefix map] % pdftex mapping
-\usetypescriptfile[\f!typeprefix spe] % special macros
-\usetypescriptfile[\f!typeprefix akb] % adobe karl berry names
+% \usetypescriptfile[\f!typeprefix exa] % some examples
+% \usetypescriptfile[\f!typeprefix syn] % font file synonyms
+% \usetypescriptfile[\f!typeprefix enc] % files and encodings
+% %usetypescriptfile[\f!typeprefix dis] % funny name remappings, obsolete
+% \usetypescriptfile[\f!typeprefix siz] % specific font sizes
+% \usetypescriptfile[\f!typeprefix map] % pdftex mapping
+% \usetypescriptfile[\f!typeprefix spe] % special macros
+% \usetypescriptfile[\f!typeprefix akb] % adobe karl berry names
+%
+% \beginXETEX \font
+% \usetypescriptfile[\f!typeprefix xtx] % xetex definitions
+% \endXETEX
-\beginXETEX \font
+\usetypescriptfile[\f!typeprefix tmf]
+\usetypescriptfile[\f!typeprefix siz]
- \usetypescriptfile[\f!typeprefix xtx] % xetex definitions
+\beginOLDTEX \font
+ \usetypescriptfile[\f!typeprefix one]
+ %usetypescriptfile[\f!typeprefix gyr] % to be merged into one
+ \usetypescriptfile[\f!typeprefix akb] % will go away when gyre is merged
+\endOLDTEX
+\beginNEWTEX \font
+ \usetypescriptfile[\f!typeprefix otf]
+\endNEWTEX
+
+\beginXETEX \font
+ \usetypescriptfile[\f!typeprefix xtx]
\endXETEX
-\usetypescriptfile[\f!typeprefix loc] % local scripts
+\usetypescriptfile[\f!typeprefix loc]
-%usetypescriptfile[\f!typeprefix pre] % predefined scripts (compatible)
-%usetypescriptfile[typeface] % project scripts
+% SO FAR
\let\currenttypescripts\empty
@@ -148,6 +162,7 @@
% {\startreadingfile
% \pushmacro\currenttypefile
% \def\currenttypefile{#1}%
+% \def\currenttypefile{#1}%
% \readfile\currenttypefile\donothing\donothing
% \popmacro\currenttypefile
% \stopreadingfile}
@@ -371,11 +386,9 @@
\setxvalue{\splitoffname \c!state}{3}%
\doglobal\removefromcommalist\splitoffname\allfontmapsfiles}
-\def\preloadmapfile[#1]%
- {\expanded{\processcommalist[#1]}\dopreloadmapfile}
-
-\def\loadmapfile[#1]%
- {\expanded{\processcommalist[#1]}\loadthemapfile}
+\def\preloadmapfile[#1]{\expanded{\processcommalist[#1]}\dopreloadmapfile}
+\def\loadmapfile [#1]{\expanded{\processcommalist[#1]}\loadthemapfile}
+\def\unloadmapfile [#1]{\expanded{\processcommalist[#1]}\unloadthemapfile}
% too soon, no driver known, \ifproductionrun \loadallfontmapfiles \fi
@@ -401,6 +414,10 @@
\fi \fi
+\def\unloadthemapfile#1%
+ {\splitfiletype{#1}%
+ \doglobal\removefromcommalist\splitoffname\allfontmapsfiles}
+
\let\usedmapfile\gobbletwoarguments
\let\usedmapline\gobbletwoarguments
@@ -535,22 +552,26 @@
% we can use \rawgetparameters or \rawgeteparameters
+\ifx\mkdodefinetypeface\undefined
+ \let\mkdodefinetypeface\gobblefivearguments
+\fi
+
\def\dodefinetypeface[#1][#2][#3][#4][#5][#6]%
{\dododefinetypeface[#1][#2]%
\iffifthargument % sixth is optional
% we need to expand since in #6 there can be a \typescripttwo
- \expanded{\getparameters[\??ts][\s!rscale=\plusone,\s!encoding=\defaultencoding,\s!text=,#6]}% \geteparameters
+ \expanded{\getparameters[\??ts][\s!rscale=\plusone,\s!encoding=\defaultencoding,\s!features=,\s!text=,#6]}% \geteparameters
\pushmacro\relativefontsize
\pushmacro\typefaceencoding
\pushmacro\fontclass
\let\relativefontsize\@@tsrscale
\let\typefaceencoding\@@tsencoding
\setcurrentfontclass{#1}%
+ \letvalue{\fontclass\s!features}\@@tsfeatures % new per 16/6/2007
\saverelativefontsize{#2}\relativefontsize % fall back
\savemathtextstyle\@@tstext % math text style (new per 28/4/2006)
\iftracetypescripts\writestatus\m!fonts{define: [#1] [#2] [#3] [#4] / \typefaceencoding}\fi
- %\usetypescript[map][\typefaceencoding]% latest versions of pdftex can load after first page
- \usetypescript[#3,\t!map][#4][\t!name,\t!default,\typefaceencoding,\t!special]% is default needed
+ \usetypescript[#3,\t!map][#4][\t!name,\t!default,\typefaceencoding,\t!special]% map is needed for backward cmp
\usetypescript[#3][#5][\t!size]%
\popmacro\fontclass
\popmacro\typefaceencoding
@@ -599,7 +620,7 @@
%D \inherittypeface[palatino][rm][\fontclass]
%D \inherittypeface[palatino][rm] % == \fontclass
%D \inherittypeface[palatino] % == [rm,ss,tt,mm]
-%D \starttyping
+%D \stoptyping
\def\inherittypeface
{\dotripleempty\doinherittypeface}
diff --git a/Master/texmf-dist/tex/context/base/type-map.tex b/Master/texmf-dist/tex/context/base/type-map.tex
index 968e42511b8..37eef0ed599 100644
--- a/Master/texmf-dist/tex/context/base/type-map.tex
+++ b/Master/texmf-dist/tex/context/base/type-map.tex
@@ -16,60 +16,62 @@
%D This one plays safe:
\starttypescript [map] [base] [all]
- \loadmapfile[original-base.map]
- \loadmapfile[ec-base.map]
- \loadmapfile[texnansi-base.map]
- \loadmapfile[8r-base.map]
- \loadmapfile[qx-base.map]
- \loadmapfile[t5-base.map]
+ \loadmapfile[original-base.map]
+ \loadmapfile[ec-base.map]
+ \loadmapfile[texnansi-base.map]
+ \loadmapfile[8r-base.map]
+ \loadmapfile[qx-base.map]
+ \loadmapfile[t5-base.map]
\stoptypescript
\starttypescript [map] [base,euler,ams] [all]
- \loadmapfile[original-ams-base.map]
-% \loadmapfile[original-ams-cmr.map]
- \loadmapfile[original-ams-euler.map]
- \loadmapfile[original-public-lm.map]
+ \loadmapfile[original-ams-base.map]
+ %loadmapfile[original-ams-cmr.map]
+ \loadmapfile[original-ams-euler.map]
+ \loadmapfile[original-public-lm.map]
\stoptypescript
% This is the base map file, load it to be sure.
\starttypescript [map] [all] [ec,8r,texnansi,qx,t5]
- \loadmapfile[original-base.map]
- \loadmapfile[\typescriptthree-base.map]
+ \loadmapfile[original-base.map]
+ \loadmapfile[\typescriptthree-base.map]
\stoptypescript
% if we were in full control, we could have
%
% \starttypescript [berry] [ec]
-% \loadmapfile[ec-base.map]
+% \loadmapfile[ec-base.map]
% \stoptypescript
% cmr and related
\starttypescript [map] [cmr,lm,lmr]
- \loadmapfile[original-public-lm.map]
- \loadmapfile[original-ams-base.map]
- \loadmapfile[original-ams-euler.map]
+ \loadmapfile[original-public-lm.map]
+ \loadmapfile[original-ams-base.map]
+ \loadmapfile[original-ams-euler.map]
\stoptypescript
% cyrillic
\starttypescript [map] [computer-modern] [t2a,t2b,t2c,x2]
- \loadmapfile[subset-cmsuper-\typescriptthree.map]
- \loadmapfile[cm-super-\typescriptthree.map]
+ \loadmapfile[subset-cmsuper-\typescriptthree.map]
+ \loadmapfile[cm-super-\typescriptthree.map]
\stoptypescript
% latin modern (watch the unfortunate \quote {lm-encoding} order
% in the name; for the moment we ship copies of the map files.
\starttypescript [map] [modern,modern-vari,modern-cond,computer-modern,latin-modern,latin-modern-vari,latin-modern-cond,] [ec,texnansi,qx,t5]
- % this was what we had at the start and what fits best into our naming scheme
- % well, all those changes in lm gave too many user problem reports so i revert to:
- % \loadmapfile[\typescriptthree-public-lm.map]
- % this one also fits into the naming scheme but has been dropped by the distributers
- % \loadmapfile[\typescriptthree-lm.map]
- % this is what the latest distributions provide
- \loadmapfile[lm-\typescriptthree.map] % maybe some day
+ % this was what we had at the start and what fits best into our naming scheme
+ % well, all those changes in lm gave too many user problem reports so i revert to:
+ % \loadmapfile[\typescriptthree-public-lm.map]
+ % this one also fits into the naming scheme but has been dropped by the distributers
+ % \loadmapfile[\typescriptthree-lm.map]
+ % this is what the latest distributions provide
+ \loadmapfile[lm-\typescriptthree.map] % maybe some day
+ \loadmapfile[lm-math.map]
+ \loadmapfile[lm-rm.map]
\stoptypescript
% \usetypescript [map] [latin-modern-os] [ec] % lm is loaded under ec regime
@@ -78,116 +80,116 @@
% \stoptext
\starttypescript [map] [latin-modern-os] [ec,texnansi,qx,t5]
- \loadmapfile[\typescriptthree-os-public-lm.map]
+ \loadmapfile[\typescriptthree-os-public-lm.map]
\stoptypescript
% the next applies to texfont generated metrics
\starttypescript [map] [utopia] [ec,texnansi,t5,8r]
- \loadmapfile[\typescriptthree-adobe-utopia.map]
+ \loadmapfile[\typescriptthree-adobe-utopia.map]
\stoptypescript
\starttypescript [map] [charter] [ec,texnansi,t5,8r]
- \loadmapfile[\typescriptthree-bitstrea-charter.map]
+ \loadmapfile[\typescriptthree-bitstrea-charter.map]
\stoptypescript
% \starttypescript [map] [antykwa-torunska,antykwa-torunska-light,antykwa-torunska-cond,antykwa-torunska-lightcond] [texnansi,ec,qx,t5,t2a,t2b,t2c,default]
-% \loadmapfile[\typescriptthree-antt.map]
-% \loadmapfile[rm-antt.map]
-% \loadmapfile[mi-antt.map]
-% \loadmapfile[sy-antt.map]
-% \loadmapfile[ex-antt.map]
+% \loadmapfile[\typescriptthree-antt.map]
+% \loadmapfile[rm-antt.map]
+% \loadmapfile[mi-antt.map]
+% \loadmapfile[sy-antt.map]
+% \loadmapfile[ex-antt.map]
% \stoptypescript
\starttypescript [map] [antykwa-torunska,antykwa-torunska-light,antykwa-torunska-cond,antykwa-torunska-lightcond] [texnansi,ec,qx,t5,t2a,t2b,t2c,default]
- \loadmapfile[antt-\typescriptthree.map]
- \loadmapfile[antt-rm.map]
- \loadmapfile[antt-mi.map]
- \loadmapfile[antt-sy.map]
- \loadmapfile[antt-ex.map]
+ \loadmapfile[antt-\typescriptthree.map]
+ \loadmapfile[antt-rm.map]
+ \loadmapfile[antt-mi.map]
+ \loadmapfile[antt-sy.map]
+ \loadmapfile[antt-ex.map]
\stoptypescript
\starttypescript [map] [antykwa-poltawskiego] [ec,texnansi,qx,t5]
- \loadmapfile[\typescriptthree-public-antp.map]
+ \loadmapfile[\typescriptthree-public-antp.map]
\stoptypescript
% \starttypescript [map] [iwona,iwona-light,iwona-medium,iwona-heavy] [ec,texnansi,qx,t5]
-% \loadmapfile[\typescriptthree-iwona.map]
-% \loadmapfile[rm-iwona.map]
-% \loadmapfile[mi-iwona.map]
-% \loadmapfile[sy-iwona.map]
-% \loadmapfile[ex-iwona.map]
+% \loadmapfile[\typescriptthree-iwona.map]
+% \loadmapfile[rm-iwona.map]
+% \loadmapfile[mi-iwona.map]
+% \loadmapfile[sy-iwona.map]
+% \loadmapfile[ex-iwona.map]
% \stoptypescript
\starttypescript [map] [iwona,iwona-light,iwona-medium,iwona-heavy] [ec,texnansi,qx,t5]
- \loadmapfile[iwona-\typescriptthree.map]
- \loadmapfile[iwona-rm.map]
- \loadmapfile[iwona-mi.map]
- \loadmapfile[iwona-sy.map]
- \loadmapfile[iwona-ex.map]
+ \loadmapfile[iwona-\typescriptthree.map]
+ \loadmapfile[iwona-rm.map]
+ \loadmapfile[iwona-mi.map]
+ \loadmapfile[iwona-sy.map]
+ \loadmapfile[iwona-ex.map]
\stoptypescript
% \starttypescript [map] [kurier,kurier-light,kurier-medium,kurier-heavy] [ec,texnansi,qx,t5,default]
-% \loadmapfile[\typescriptthree-kurier.map]
-% \loadmapfile[rm-kurier.map]
-% \loadmapfile[mi-kurier.map]
-% \loadmapfile[sy-kurier.map]
-% \loadmapfile[ex-kurier.map]
+% \loadmapfile[\typescriptthree-kurier.map]
+% \loadmapfile[rm-kurier.map]
+% \loadmapfile[mi-kurier.map]
+% \loadmapfile[sy-kurier.map]
+% \loadmapfile[ex-kurier.map]
% \stoptypescript
\starttypescript [map] [kurier,kurier-light,kurier-medium,kurier-heavy] [ec,texnansi,qx,t5,default]
- \loadmapfile[kurier-\typescriptthree.map]
- \loadmapfile[kurier-rm.map]
- \loadmapfile[kurier-mi.map]
- \loadmapfile[kurier-sy.map]
- \loadmapfile[kurier-ex.map]
+ \loadmapfile[kurier-\typescriptthree.map]
+ \loadmapfile[kurier-rm.map]
+ \loadmapfile[kurier-mi.map]
+ \loadmapfile[kurier-sy.map]
+ \loadmapfile[kurier-ex.map]
\stoptypescript
\starttypescript [map] [bookman] [ec,texnansi,t5,8r]
- \loadmapfile[\typescriptthree-urw-bookman.map]
+ \loadmapfile[\typescriptthree-urw-bookman.map]
\stoptypescript
\starttypescript [map] [courier] [ec,texnansi,t5,8r]
- \loadmapfile[\typescriptthree-urw-courier.map]
+ \loadmapfile[\typescriptthree-urw-courier.map]
\stoptypescript
\starttypescript [map] [helvetica] [ec,texnansi,t5,8r]
- \loadmapfile[\typescriptthree-urw-helvetica.map]
+ \loadmapfile[\typescriptthree-urw-helvetica.map]
\stoptypescript
\starttypescript [map] [palatino] [ec,texnansi,t5,8r]
- \loadmapfile[\typescriptthree-urw-palatino.map]
-% \loadmapfile[\typescriptthree-public-pfl.map]
+ \loadmapfile[\typescriptthree-urw-palatino.map]
+ %loadmapfile[\typescriptthree-public-pfl.map]
\stoptypescript
\starttypescript [map] [times] [ec,texnansi,t5,8r]
- \loadmapfile[\typescriptthree-urw-times.map]
+ \loadmapfile[\typescriptthree-urw-times.map]
\stoptypescript
\starttypescript [map] [chancery] [ec,texnansi,t5,8r]
- \loadmapfile[\typescriptthree-urw-zapfchan.map]
+ \loadmapfile[\typescriptthree-urw-zapfchan.map]
\stoptypescript
\starttypescript [map] [schoolbook] [ec,texnansi,t5,8r]
- \loadmapfile[\typescriptthree-urw-ncntrsbk.map]
+ \loadmapfile[\typescriptthree-urw-ncntrsbk.map]
\stoptypescript
% once i can be sure that the map files are in the tree, i will
% use those instead of original (too many variants anyway)
\starttypescript [map] [palatino] [default,ec,texnansi,t5,8r]
- \loadmapfile[original-youngryu-px.map]
+ \loadmapfile[original-youngryu-px.map]
\stoptypescript
\starttypescript [map] [times] [default,ec,texnansi,t5,8r]
- \loadmapfile[original-youngryu-tx.map]
+ \loadmapfile[original-youngryu-tx.map]
\stoptypescript
% to do: maybe original, maybe not
\starttypescript [map] [fourier] [ec]
- \loadmapfile[fourier.map]
- \loadmapfile[fourier-utopia-expert.map]
+ \loadmapfile[fourier.map]
+ \loadmapfile[fourier-utopia-expert.map]
\stoptypescript
\stoptypescriptcollection
diff --git a/Master/texmf-dist/tex/context/base/type-msw.tex b/Master/texmf-dist/tex/context/base/type-msw.tex
index 985aa9c17e8..343e76eab84 100644
--- a/Master/texmf-dist/tex/context/base/type-msw.tex
+++ b/Master/texmf-dist/tex/context/base/type-msw.tex
@@ -31,57 +31,37 @@
% verdana
\starttypescript [sans] [verdana] [name]
-
- \setups[font:fallback:sans]
-
- \definefontsynonym [Sans] [Verdana]
- \definefontsynonym [SansBold] [Verdana-Bold]
- \definefontsynonym [SansItalic] [Verdana-Italic]
- \definefontsynonym [SansBoldItalic] [Verdana-BoldItalic]
-
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [Verdana]
+ \definefontsynonym [SansBold] [Verdana-Bold]
+ \definefontsynonym [SansItalic] [Verdana-Italic]
+ \definefontsynonym [SansBoldItalic] [Verdana-BoldItalic]
\stoptypescript
\starttypescript [sans] [verdana] [texnansi]
-
- \definefontsynonym [Verdana] [\typescriptthree-verdana] [encoding=\typescriptthree]
- \definefontsynonym [Verdana-Bold] [\typescriptthree-verdanab] [encoding=\typescriptthree]
- \definefontsynonym [Verdana-Italic] [\typescriptthree-verdanai] [encoding=\typescriptthree]
- \definefontsynonym [Verdana-BoldItalic] [\typescriptthree-verdanaz] [encoding=\typescriptthree]
-
-\stoptypescript
-
-\starttypescript [map] [verdana] [texnansi]
-
- \loadmapfile[texnansi-microsoft-verdana.map]
-
+ \definefontsynonym [Verdana] [\typescriptthree-verdana] [encoding=\typescriptthree]
+ \definefontsynonym [Verdana-Bold] [\typescriptthree-verdanab] [encoding=\typescriptthree]
+ \definefontsynonym [Verdana-Italic] [\typescriptthree-verdanai] [encoding=\typescriptthree]
+ \definefontsynonym [Verdana-BoldItalic] [\typescriptthree-verdanaz] [encoding=\typescriptthree]
+ \loadmapfile[texnansi-microsoft-verdana.map]
\stoptypescript
% arial
\starttypescript [sans] [arial] [name]
-
\setups[font:fallback:sans]
-
\definefontsynonym [Sans] [ArialMT]
\definefontsynonym [SansBold] [Arial-BoldMT]
\definefontsynonym [SansItalic] [Arial-ItalicMT]
\definefontsynonym [SansBoldItalic] [Arial-BoldItalicMT]
-
\stoptypescript
\starttypescript [sans] [arial] [texnansi]
-
- \definefontsynonym [ArialMT] [\typescriptthree-arial] [encoding=\typescriptthree]
- \definefontsynonym [Arial-BoldMT] [\typescriptthree-arialbd] [encoding=\typescriptthree]
- \definefontsynonym [Arial-ItalicMT] [\typescriptthree-ariali] [encoding=\typescriptthree]
- \definefontsynonym [Arial-BoldItalicMT] [\typescriptthree-arialbi] [encoding=\typescriptthree]
-
-\stoptypescript
-
-\starttypescript [map] [arial] [texnansi]
-
- \loadmapfile[texnansi-microsoft-arial.map]
-
+ \definefontsynonym [ArialMT] [\typescriptthree-arial] [encoding=\typescriptthree]
+ \definefontsynonym [Arial-BoldMT] [\typescriptthree-arialbd] [encoding=\typescriptthree]
+ \definefontsynonym [Arial-ItalicMT] [\typescriptthree-ariali] [encoding=\typescriptthree]
+ \definefontsynonym [Arial-BoldItalicMT] [\typescriptthree-arialbi] [encoding=\typescriptthree]
+ \loadmapfile[texnansi-microsoft-arial.map]
\stoptypescript
\stoptypescriptcollection
diff --git a/Master/texmf-dist/tex/context/base/type-one.tex b/Master/texmf-dist/tex/context/base/type-one.tex
new file mode 100644
index 00000000000..ae9a9275b50
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/type-one.tex
@@ -0,0 +1,1175 @@
+%D \module
+%D [ file=type-one,
+%D version=2007.07.30,
+%D title=\CONTEXT\ Typescript Macros,
+%D subtitle=Type One Definitions,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D This file merges the traditional enc, syn and map files into one. If
+%D you think that it looks messy you're right. It shows some history of
+%D \TEX\ fonts and the development towards latin modern.
+
+% texfont --ven=public --col=antt --enc=ec --sou=auto
+% texfont --ven=public --col=antp --enc=ec --sou=auto
+% texfont --ven=urw --col=palatino --enc=ec --sou=auto
+% texfont --ven-lucas --col=sun --enc=ec --sou=.
+
+% \usetypescript [all] [modern] [texnansi]
+% \setupbodyfont[reset] \setupbodyfont[cmr]
+% \starttext \showfont[Serif] \stoptext
+
+\starttypescriptcollection[examples]
+
+\starttypescript [fallback] [texnansi,ec,qx,t5,default]
+ \definetypeface [] [rm] [serif] [modern] [computer-modern] [encoding=\typescripttwo]
+ \definetypeface [] [ss] [sans] [modern] [computer-modern] [encoding=\typescripttwo]
+ \definetypeface [] [tt] [mono] [modern] [computer-modern] [encoding=\typescripttwo]
+ \definetypeface [] [mm] [math] [modern] [computer-modern] [encoding=\typescripttwo]
+ \quittypescriptscanning
+\stoptypescript
+
+\starttypescript [modern] [texnansi,ec,qx,t5,default]
+ \definetypeface [modern] [rm] [serif] [modern] [computer-modern] [encoding=\typescripttwo]
+ \definetypeface [modern] [ss] [sans] [modern] [computer-modern] [encoding=\typescripttwo]
+ \definetypeface [modern] [tt] [mono] [modern] [computer-modern] [encoding=\typescripttwo]
+ \definetypeface [modern] [mm] [math] [modern] [computer-modern] [encoding=\typescripttwo]
+ \quittypescriptscanning
+\stoptypescript
+
+\starttypescript [modern-base] [texnansi,ec,qx,t5,default]
+ \definetypeface [modern] [rm] [serif] [modern] [default] [encoding=\typescripttwo]
+ \definetypeface [modern] [ss] [sans] [modern] [default] [encoding=\typescripttwo]
+ \definetypeface [modern] [tt] [mono] [modern] [default] [encoding=\typescripttwo]
+ \definetypeface [modern] [mm] [math] [modern] [default] [encoding=\typescripttwo]
+ \quittypescriptscanning
+\stoptypescript
+
+\starttypescript [modern-base] [t2a,t2b,t2c,x2]
+ \definetypeface [modern] [rm] [serif] [computer-modern] [default] [encoding=\typescripttwo]
+ \definetypeface [modern] [ss] [sans] [computer-modern] [default] [encoding=\typescripttwo]
+ \definetypeface [modern] [tt] [mono] [computer-modern] [default] [encoding=\typescripttwo]
+ \definetypeface [modern] [mm] [math] [computer-modern] [default] [encoding=\typescripttwo]
+ \quittypescriptscanning
+\stoptypescript
+
+\starttypescript [postscript] [texnansi,ec,qx,t5,uc,8r]
+ \definetypeface [postscript] [rm] [serif] [times] [default] [encoding=\typescripttwo]
+ \definetypeface [postscript] [ss] [sans] [helvetica] [default] [rscale=.9,encoding=\typescripttwo]
+ \definetypeface [postscript] [tt] [mono] [courier] [default] [rscale=1.1,encoding=\typescripttwo]
+ \definetypeface [postscript] [mm] [math] [times] [default]
+ \usemathcollection[default]
+ \quittypescriptscanning
+\stoptypescript
+
+\starttypescript [times] [texnansi,ec,qx,8r,t5,uc]
+ \definetypeface [times] [rm] [serif] [times] [default] [encoding=\typescripttwo]
+ \definetypeface [times] [ss] [sans] [helvetica] [default] [encoding=\typescripttwo,rscale=0.9]
+ \definetypeface [times] [tt] [mono] [modern] [default] [encoding=\typescripttwo,rscale=1.05]
+ \definetypeface [times] [mm] [math] [times] [default] [encoding=\typescripttwo]
+ \usemathcollection[default]
+ \quittypescriptscanning
+\stoptypescript
+
+\starttypescript [palatino] [texnansi,ec,qx,8r,t5,uc]
+ \definetypeface [palatino] [rm] [serif] [palatino] [default] [encoding=\typescripttwo]
+ \definetypeface [palatino] [tt] [mono] [modern] [default] [encoding=\typescripttwo,rscale=1.075]
+ \definetypeface [palatino] [mm] [math] [palatino] [default] [encoding=default]
+ \usemathcollection[default]
+ \quittypescriptscanning
+\stoptypescript
+
+\starttypescript [fourier] [ec]
+ \definetypeface [fourier] [rm] [serif] [fourier] [default] [encoding=ec]
+ \definetypeface [fourier] [mm] [math] [fourier] [default] [encoding=default]
+ \definetypeface [fourier] [tt] [mono] [modern] [default] [encoding=ec,rscale=1.07]
+ \usemathcollection[fou]
+ \quittypescriptscanning
+\stoptypescript
+
+% handy
+
+\starttypescript [serif] [simple] [name] % bad, will be changed but in sycn with manuals that use it
+ \definefontsynonym [Simple] [cmvtt10]
+ \setupfontsynonym [Simple] [handling=pure]
+\stoptypescript
+
+\starttypescript [modernvariable] [texnansi,ec,qx,8r,t5]
+ \definetypeface [modernvariable] [rm] [serif] [simple] [default] [encoding=\typescripttwo]
+ \definetypeface [modernvariable] [ss] [sans] [modern] [default] [encoding=\typescripttwo]
+ \definetypeface [modernvariable] [tt] [mono] [modern] [default] [encoding=\typescripttwo]
+ \definetypeface [modernvariable] [mm] [math] [modern] [default]
+ \quittypescriptscanning
+\stoptypescript
+
+\starttypescript [optima] [texnansi,ec,qx]
+ \definetypeface[optima][ss][sans] [optima-nova][default][encoding=\typescripttwo]
+ \definetypeface[optima][rm][serif][palatino] [default][encoding=\typescripttwo]
+ \definetypeface[optima][tt][mono] [modern] [default][encoding=\typescripttwo,rscale=1.1]
+ \definetypeface[optima][mm][math] [palatino] [default][encoding=\typescripttwo]
+ \quittypescriptscanning
+\stoptypescript
+
+\starttypescript [antykwa-torunska] [texnansi,ec,8r,uc,t2a]
+ \definetypeface[antykwa][rm][serif][antykwa-torunska] [default][encoding=\typescripttwo]
+ \definetypeface[antykwa][ss][sans] [modern] [default][encoding=\typescripttwo,rscale=1.05]
+ \definetypeface[antykwa][tt][mono] [modern] [default][encoding=\typescripttwo,rscale=1.1]
+ \definetypeface[antykwa][mm][math] [antykwa-torunska] [default][encoding=\typescripttwo]
+ \quittypescriptscanning
+\stoptypescript
+
+\starttypescript [iwona,iwona-light,iwona-heavy,iwona-medium] [texnansi,ec,8r,uc,t2a]
+ \definetypeface[\typescriptone][ss][sans] [\typescriptone] [default][encoding=\typescripttwo]
+ \definetypeface[\typescriptone][rm][serif][modern] [default][encoding=\typescripttwo]
+ \definetypeface[\typescriptone][tt][mono] [modern] [default][encoding=\typescripttwo]
+ \definetypeface[\typescriptone][mm][math] [\typescriptone] [default][encoding=\typescripttwo,text=ss]
+ \quittypescriptscanning
+\stoptypescript
+
+\stoptypescriptcollection
+
+\starttypescriptcollection[typeone]
+
+\starttypescript [map] [all]
+ \loadmapfile[original-base.map]
+ \loadmapfile[original-ams-base.map]
+\stoptypescript
+
+\starttypescript[all][modern,latin-modern][all]
+
+ % fallbacks, no math in latin modern
+
+ \definefontsynonym[lmdunh10][cmdunh10]
+ \definefontsynonym[lmff10] [cmff10]
+ \definefontsynonym[lmfi10] [cmfi10]
+ \definefontsynonym[lmfib8] [cmfib8]
+ \definefontsynonym[lmtex10] [cmtex10]
+ \definefontsynonym[lmtex8] [cmtex8]
+ \definefontsynonym[lmtex9] [cmtex9]
+
+ \loadmapfile[original-public-lm.map]
+\stoptypescript
+
+\starttypescript [serif] [modern,latin-modern] [texnansi,ec,qx,t5]
+ \definefontsynonym [LMRoman5-Regular] [\typescriptthree-lmr5] [encoding=\typescriptthree]
+ \definefontsynonym [LMRoman6-Regular] [\typescriptthree-lmr6] [encoding=\typescriptthree]
+ \definefontsynonym [LMRoman7-Regular] [\typescriptthree-lmr7] [encoding=\typescriptthree]
+ \definefontsynonym [LMRoman8-Regular] [\typescriptthree-lmr8] [encoding=\typescriptthree]
+ \definefontsynonym [LMRoman9-Regular] [\typescriptthree-lmr9] [encoding=\typescriptthree]
+ \definefontsynonym [LMRoman10-Regular] [\typescriptthree-lmr10] [encoding=\typescriptthree]
+ \definefontsynonym [LMRoman12-Regular] [\typescriptthree-lmr12] [encoding=\typescriptthree]
+ \definefontsynonym [LMRoman17-Regular] [\typescriptthree-lmr17] [encoding=\typescriptthree]
+ \definefontsynonym [LMRoman5-Bold] [\typescriptthree-lmbx5] [encoding=\typescriptthree]
+ \definefontsynonym [LMRoman6-Bold] [\typescriptthree-lmbx6] [encoding=\typescriptthree]
+ \definefontsynonym [LMRoman7-Bold] [\typescriptthree-lmbx7] [encoding=\typescriptthree]
+ \definefontsynonym [LMRoman8-Bold] [\typescriptthree-lmbx8] [encoding=\typescriptthree]
+ \definefontsynonym [LMRoman9-Bold] [\typescriptthree-lmbx9] [encoding=\typescriptthree]
+ \definefontsynonym [LMRoman10-Bold] [\typescriptthree-lmbx10] [encoding=\typescriptthree]
+ \definefontsynonym [LMRoman12-Bold] [\typescriptthree-lmbx12] [encoding=\typescriptthree]
+ \definefontsynonym [LMRoman7-Italic] [\typescriptthree-lmri7] [encoding=\typescriptthree]
+ \definefontsynonym [LMRoman8-Italic] [\typescriptthree-lmri8] [encoding=\typescriptthree]
+ \definefontsynonym [LMRoman9-Italic] [\typescriptthree-lmri9] [encoding=\typescriptthree]
+ \definefontsynonym [LMRoman10-Italic] [\typescriptthree-lmri10] [encoding=\typescriptthree]
+ \definefontsynonym [LMRoman12-Italic] [\typescriptthree-lmri12] [encoding=\typescriptthree]
+ \definefontsynonym [LMRoman10-BoldItalic] [\typescriptthree-lmbxi10] [encoding=\typescriptthree]
+ \definefontsynonym [LMRoman8-Oblique] [\typescriptthree-lmro8] [encoding=\typescriptthree]
+ \definefontsynonym [LMRoman9-Oblique] [\typescriptthree-lmro9] [encoding=\typescriptthree]
+ \definefontsynonym [LMRoman10-Oblique] [\typescriptthree-lmro10] [encoding=\typescriptthree]
+ \definefontsynonym [LMRoman12-Oblique] [\typescriptthree-lmro12] [encoding=\typescriptthree]
+ \definefontsynonym [LMRoman17-Oblique] [\typescriptthree-lmro17] [encoding=\typescriptthree]
+ \definefontsynonym [LMRoman10-BoldOblique] [\typescriptthree-lmbxo10] [encoding=\typescriptthree]
+ \definefontsynonym [LMRoman10-Demi] [\typescriptthree-lmb10] [encoding=\typescriptthree]
+ \definefontsynonym [LMRoman10-DemiOblique] [\typescriptthree-lmbo10] [encoding=\typescriptthree]
+ \definefontsynonym [LMRoman10-CapsRegular] [\typescriptthree-lmcsc10] [encoding=\typescriptthree]
+ \definefontsynonym [LMRoman10-CapsOblique] [\typescriptthree-lmcsco10] [encoding=\typescriptthree]
+
+ \definefontsynonym [LMRoman10-Dunhill] [\typescriptthree-lmdunh10] [encoding=\typescriptthree]
+ \definefontsynonym [LMRoman10-DunhillOblique] [\typescriptthree-lmduno10] [encoding=\typescriptthree]
+
+ \loadmapfile[lm-\typescriptthree.map]
+\stoptypescript
+
+\starttypescript [sans] [modern,latin-modern] [texnansi,ec,qx,t5]
+ \definefontsynonym [LMSans8-Regular] [\typescriptthree-lmss8] [encoding=\typescriptthree]
+ \definefontsynonym [LMSans9-Regular] [\typescriptthree-lmss9] [encoding=\typescriptthree]
+ \definefontsynonym [LMSans10-Regular] [\typescriptthree-lmss10] [encoding=\typescriptthree]
+ \definefontsynonym [LMSans12-Regular] [\typescriptthree-lmss12] [encoding=\typescriptthree]
+ \definefontsynonym [LMSans17-Regular] [\typescriptthree-lmss17] [encoding=\typescriptthree]
+ \definefontsynonym [LMSans10-Bold] [\typescriptthree-lmssbx10] [encoding=\typescriptthree]
+ \definefontsynonym [LMSans8-Oblique] [\typescriptthree-lmsso8] [encoding=\typescriptthree]
+ \definefontsynonym [LMSans9-Oblique] [\typescriptthree-lmsso9] [encoding=\typescriptthree]
+ \definefontsynonym [LMSans10-Oblique] [\typescriptthree-lmsso10] [encoding=\typescriptthree]
+ \definefontsynonym [LMSans12-Oblique] [\typescriptthree-lmsso12] [encoding=\typescriptthree]
+ \definefontsynonym [LMSans17-Oblique] [\typescriptthree-lmsso17] [encoding=\typescriptthree]
+ \definefontsynonym [LMSans10-BoldOblique] [\typescriptthree-lmssbo10] [encoding=\typescriptthree]
+ \definefontsynonym [LMSans10-DemiCondensed] [\typescriptthree-lmssdc10] [encoding=\typescriptthree]
+ \definefontsynonym [LMSans10-DemiCondensedOblique] [\typescriptthree-lmssdo10] [encoding=\typescriptthree]
+ \definefontsynonym [LMSansQuotation8-Regular] [\typescriptthree-lmssq8] [encoding=\typescriptthree]
+ \definefontsynonym [LMSansQuotation8-Bold] [\typescriptthree-lmssqbx8] [encoding=\typescriptthree]
+ \definefontsynonym [LMSansQuotation8-Oblique] [\typescriptthree-lmssqo8] [encoding=\typescriptthree]
+ \definefontsynonym [LMSansQuotation8-BoldOblique] [\typescriptthree-lmssqbo8] [encoding=\typescriptthree]
+
+ \loadmapfile[lm-\typescriptthree.map]
+\stoptypescript
+
+\starttypescript [mono] [modern,latin-modern,modern-vari,latin-modern-vari,modern-cond,latin-modern-cond] [texnansi,ec,qx,t5]
+ \definefontsynonym [LMTypewriter8-Regular] [\typescriptthree-lmtt8] [encoding=\typescriptthree]
+ \definefontsynonym [LMTypewriter9-Regular] [\typescriptthree-lmtt9] [encoding=\typescriptthree]
+ \definefontsynonym [LMTypewriter10-Regular] [\typescriptthree-lmtt10] [encoding=\typescriptthree]
+ \definefontsynonym [LMTypewriter12-Regular] [\typescriptthree-lmtt12] [encoding=\typescriptthree]
+ \definefontsynonym [LMTypewriter10-Italic] [\typescriptthree-lmtti10] [encoding=\typescriptthree]
+ \definefontsynonym [LMTypewriter10-Oblique] [\typescriptthree-lmtto10] [encoding=\typescriptthree]
+ \definefontsynonym [LMTypewriter10-CapsRegular] [\typescriptthree-lmtcsc10] [encoding=\typescriptthree]
+ \definefontsynonym [LMTypewriter10-CapsOblique] [\typescriptthree-lmtcso10] [encoding=\typescriptthree]
+ \definefontsynonym [LMTypewriter10-Light] [\typescriptthree-lmtl10] [encoding=\typescriptthree]
+ \definefontsynonym [LMTypewriter10-LightOblique] [\typescriptthree-lmtlo10] [encoding=\typescriptthree]
+ \definefontsynonym [LMTypewriter10-LightCondensed] [\typescriptthree-lmtlc10] [encoding=\typescriptthree]
+ \definefontsynonym [LMTypewriter10-LightCondensedOblique] [\typescriptthree-lmtlco10] [encoding=\typescriptthree]
+ \definefontsynonym [LMTypewriter10-Dark] [\typescriptthree-lmtk10] [encoding=\typescriptthree]
+ \definefontsynonym [LMTypewriter10-DarkOblique] [\typescriptthree-lmtko10] [encoding=\typescriptthree]
+
+ \definefontsynonym [LMTypewriter10-Unslanted] [\typescriptthree-lmu10] [encoding=\typescriptthree]
+
+ \definefontsynonym [LMTypewriterVarWd10-Regular] [\typescriptthree-lmvtt10] [encoding=\typescriptthree]
+ \definefontsynonym [LMTypewriterVarWd10-Oblique] [\typescriptthree-lmvtto10] [encoding=\typescriptthree]
+ \definefontsynonym [LMTypewriterVarWd10-Light] [\typescriptthree-lmvtl10] [encoding=\typescriptthree]
+ \definefontsynonym [LMTypewriterVarWd10-LightOblique] [\typescriptthree-lmvtlo10] [encoding=\typescriptthree]
+ \definefontsynonym [LMTypewriterVarWd10-Dark] [\typescriptthree-lmvtk10] [encoding=\typescriptthree]
+ \definefontsynonym [LMTypewriterVarWd10-DarkOblique] [\typescriptthree-lmvtko10] [encoding=\typescriptthree]
+
+ \loadmapfile[lm-\typescriptthree.map]
+\stoptypescript
+
+\starttypescript [math] [modern,latin-modern]
+ \definefontsynonym [LMMathRoman5-Regular] [rm-lmr5]
+ \definefontsynonym [LMMathRoman6-Regular] [rm-lmr6]
+ \definefontsynonym [LMMathRoman7-Regular] [rm-lmr7]
+ \definefontsynonym [LMMathRoman8-Regular] [rm-lmr8]
+ \definefontsynonym [LMMathRoman9-Regular] [rm-lmr9]
+ \definefontsynonym [LMMathRoman10-Regular] [rm-lmr10]
+ \definefontsynonym [LMMathRoman12-Regular] [rm-lmr12]
+ \definefontsynonym [LMMathRoman17-Regular] [rm-lmr17]
+ \definefontsynonym [LMMathRoman5-Bold] [rm-lmbx5]
+ \definefontsynonym [LMMathRoman6-Bold] [rm-lmbx6]
+ \definefontsynonym [LMMathRoman7-Bold] [rm-lmbx7]
+ \definefontsynonym [LMMathRoman8-Bold] [rm-lmbx8]
+ \definefontsynonym [LMMathRoman9-Bold] [rm-lmbx9]
+ \definefontsynonym [LMMathRoman10-Bold] [rm-lmbx10]
+ \definefontsynonym [LMMathRoman12-Bold] [rm-lmbx12]
+ \definefontsynonym [LMMathSymbols5-BoldItalic] [lmbsy5]
+ \definefontsynonym [LMMathSymbols7-BoldItalic] [lmbsy7]
+ \definefontsynonym [LMMathSymbols10-BoldItalic][lmbsy10]
+ \definefontsynonym [LMMathSymbols5-Italic] [lmsy5]
+ \definefontsynonym [LMMathSymbols6-Italic] [lmsy6]
+ \definefontsynonym [LMMathSymbols7-Italic] [lmsy7]
+ \definefontsynonym [LMMathSymbols8-Italic] [lmsy8]
+ \definefontsynonym [LMMathSymbols9-Italic] [lmsy9]
+ \definefontsynonym [LMMathSymbols10-Italic] [lmsy10]
+ \definefontsynonym [LMMathExtension10-Regular] [lmex10]
+ \definefontsynonym [LMMathItalic5-Italic] [lmmi5]
+ \definefontsynonym [LMMathItalic6-Italic] [lmmi6]
+ \definefontsynonym [LMMathItalic7-Italic] [lmmi7]
+ \definefontsynonym [LMMathItalic8-Italic] [lmmi8]
+ \definefontsynonym [LMMathItalic9-Italic] [lmmi9]
+ \definefontsynonym [LMMathItalic10-Italic] [lmmi10]
+ \definefontsynonym [LMMathItalic12-Italic] [lmmi12]
+ \definefontsynonym [LMMathItalic5-BoldItalic] [lmmib5]
+ \definefontsynonym [LMMathItalic7-BoldItalic] [lmmib7]
+ \definefontsynonym [LMMathItalic10-BoldItalic] [lmmib10]
+
+ \loadmapfile[lm-math.map]
+ \loadmapfile[lm-rm.map]
+\stoptypescript
+
+%D {\em Comments by Victor Figurnov:} the wcmb10, wcmbx10,
+%D \unknown\ fonts below are taken from the Paradissa
+%D collection by Basil Malyshev. These fonts don't conform t2a
+%D encoding but are in MS Windows Cyrillic codepage 1251
+%D encoding. These fonts contain only 33 russian letters in
+%D upper and lower case, the number sign, and guillemots. But
+%D even among these characters only the basic 32 russian
+%D letters (in upper and lower case) will be typeset correctly
+%D with this definition. The letters cyrillicYO and
+%D cyrillicyo, as well as number sign (textnumero) and
+%D guillemots won't be typeset properly, because these symbols
+%D have different positions in t2a and MS CP1251 encodings.
+%D
+%D I think that the russian lh fonts and|/|or cm-super provide
+%D better alternatives (type1). Therefore, the names below
+%D match those of cm-super (\type {0NNN} instead of \type
+%D {NNN}, i.e.\ four digit numbers).
+
+\starttypescript [serif] [computer-modern] [cyr]
+ \definefontsynonym [cmb10] [wcmb10] [encoding=t2a]
+ \definefontsynonym [cmbsy10] [wcmbsy10] [encoding=t2a]
+ \definefontsynonym [cmbx10] [wcmbx10] [encoding=t2a]
+ \definefontsynonym [cmbx12] [wcmbx12] [encoding=t2a]
+ \definefontsynonym [cmbx5] [wcmbx5] [encoding=t2a]
+ \definefontsynonym [cmbx6] [wcmbx6] [encoding=t2a]
+ \definefontsynonym [cmbx7] [wcmbx7] [encoding=t2a]
+ \definefontsynonym [cmbx8] [wcmbx8] [encoding=t2a]
+ \definefontsynonym [cmbx9] [wcmbx9] [encoding=t2a]
+ \definefontsynonym [cmbxsl10] [wcmbxsl10] [encoding=t2a]
+ \definefontsynonym [cmbxti10] [wcmbxti10] [encoding=t2a]
+ \definefontsynonym [cmcsc10] [wcmcsc10] [encoding=t2a]
+ %definefontsynonym [cmdunh10] [wcmdunh10] [encoding=t2a]
+ \definefontsynonym [cminch] [wcminch] [encoding=t2a]
+ \definefontsynonym [cmr10] [wcmr10] [encoding=t2a]
+ \definefontsynonym [cmr12] [wcmr12] [encoding=t2a]
+ \definefontsynonym [cmr17] [wcmr17] [encoding=t2a]
+ \definefontsynonym [cmr5] [wcmr5] [encoding=t2a]
+ \definefontsynonym [cmr6] [wcmr6] [encoding=t2a]
+ \definefontsynonym [cmr7] [wcmr7] [encoding=t2a]
+ \definefontsynonym [cmr8] [wcmr8] [encoding=t2a]
+ \definefontsynonym [cmr9] [wcmr9] [encoding=t2a]
+ \definefontsynonym [cmsl10] [wcmsl10] [encoding=t2a]
+ \definefontsynonym [cmsl12] [wcmsl12] [encoding=t2a]
+ \definefontsynonym [cmsl8] [wcmsl8] [encoding=t2a]
+ \definefontsynonym [cmsl9] [wcmsl9] [encoding=t2a]
+ \definefontsynonym [cmti10] [wcmti10] [encoding=t2a]
+ \definefontsynonym [cmti12] [wcmti12] [encoding=t2a]
+ \definefontsynonym [cmti7] [wcmti7] [encoding=t2a]
+ \definefontsynonym [cmti8] [wcmti8] [encoding=t2a]
+ \definefontsynonym [cmti9] [wcmti9] [encoding=t2a]
+ \definefontsynonym [cmu10] [wcmu10] [encoding=t2a]
+\stoptypescript
+
+\starttypescript [sans] [computer-modern] [cyr]
+ \definefontsynonym [cmss10] [wcmss10] [encoding=t2a]
+ \definefontsynonym [cmss12] [wcmss12] [encoding=t2a]
+ \definefontsynonym [cmss17] [wcmss17] [encoding=t2a]
+ \definefontsynonym [cmss8] [wcmss8] [encoding=t2a]
+ \definefontsynonym [cmss9] [wcmss9] [encoding=t2a]
+ %definefontsynonym [cmssbi10] [wcmssbi10] [encoding=t2a]
+ \definefontsynonym [cmssbx10] [wcmssbx10] [encoding=t2a]
+ \definefontsynonym [cmssdc10] [wcmssdc10] [encoding=t2a]
+ \definefontsynonym [cmssi10] [wcmssi10] [encoding=t2a]
+ \definefontsynonym [cmssi12] [wcmssi12] [encoding=t2a]
+ \definefontsynonym [cmssi17] [wcmssi17] [encoding=t2a]
+ \definefontsynonym [cmssi8] [wcmssi8] [encoding=t2a]
+ \definefontsynonym [cmssi9] [wcmssi9] [encoding=t2a]
+ \definefontsynonym [cmssq8] [wcmssq8] [encoding=t2a]
+ \definefontsynonym [cmssqi8] [wcmssqi8] [encoding=t2a]
+\stoptypescript
+
+\starttypescript [mono] [computer-modern] [cyr]
+ \definefontsynonym [cmitt10] [wcmitt10] [encoding=t2a]
+ \definefontsynonym [cmsltt10] [wcmsltt10] [encoding=t2a]
+ \definefontsynonym [cmtt10] [wcmtt10] [encoding=t2a]
+ \definefontsynonym [cmtt12] [wcmtt12] [encoding=t2a]
+ \definefontsynonym [cmtt8] [wcmtt8] [encoding=t2a]
+ \definefontsynonym [cmtt9] [wcmtt9] [encoding=t2a]
+ %definefontsynonym [cmvtt10] [wcmvtt10] [encoding=t2a]
+\stoptypescript
+
+\definetypescriptprefix [c:t2a] [la]
+\definetypescriptprefix [c:t2b] [lb]
+\definetypescriptprefix [c:t2c] [lc]
+\definetypescriptprefix [c:x2] [rx]
+
+\starttypescript [all] [computer-modern] [t2a,t2b,t2c,x2]
+ \loadmapfile[subset-cmsuper-\typescriptthree.map]
+ \loadmapfile[subset-cmsuper-\typescriptthree.map]
+ \loadmapfile[cm-super-\typescriptthree.map]
+\stoptypescript
+
+\starttypescript [serif] [computer-modern] [t2a,t2b,t2c,x2]
+ \definefontsynonym [cmb10] [\typescriptprefix{c:\typescriptthree}rb1000] [encoding=\typescriptthree]
+ \definefontsynonym [cmbx10] [\typescriptprefix{c:\typescriptthree}bx1000] [encoding=\typescriptthree]
+ \definefontsynonym [cmbx12] [\typescriptprefix{c:\typescriptthree}bx1200] [encoding=\typescriptthree]
+ \definefontsynonym [cmbx5] [\typescriptprefix{c:\typescriptthree}bx0500] [encoding=\typescriptthree]
+ \definefontsynonym [cmbx6] [\typescriptprefix{c:\typescriptthree}bx0600] [encoding=\typescriptthree]
+ \definefontsynonym [cmbx7] [\typescriptprefix{c:\typescriptthree}bx0700] [encoding=\typescriptthree]
+ \definefontsynonym [cmbx8] [\typescriptprefix{c:\typescriptthree}bx0800] [encoding=\typescriptthree]
+ \definefontsynonym [cmbx9] [\typescriptprefix{c:\typescriptthree}bx0900] [encoding=\typescriptthree]
+ \definefontsynonym [cmbxsl10] [\typescriptprefix{c:\typescriptthree}bl1000] [encoding=\typescriptthree]
+ \definefontsynonym [cmbxti10] [\typescriptprefix{c:\typescriptthree}bi1000] [encoding=\typescriptthree]
+ \definefontsynonym [cmcsc10] [\typescriptprefix{c:\typescriptthree}cc1000] [encoding=\typescriptthree]
+ \definefontsynonym [cmdunh10] [\typescriptprefix{c:\typescriptthree}dh1000] [encoding=\typescriptthree]
+ \definefontsynonym [cmff10] [\typescriptprefix{c:\typescriptthree}ff1000] [encoding=\typescriptthree]
+ \definefontsynonym [cmfi10] [\typescriptprefix{c:\typescriptthree}fi1000] [encoding=\typescriptthree]
+ \definefontsynonym [cmfib8] [\typescriptprefix{c:\typescriptthree}fb0800] [encoding=\typescriptthree]
+ %\definefontsynonym [cminch] [\typescriptprefix{c:\typescriptthree}inch00] [encoding=\typescriptthree]
+ \definefontsynonym [cmr10] [\typescriptprefix{c:\typescriptthree}rm1000] [encoding=\typescriptthree]
+ \definefontsynonym [cmr12] [\typescriptprefix{c:\typescriptthree}rm1200] [encoding=\typescriptthree]
+ \definefontsynonym [cmr17] [\typescriptprefix{c:\typescriptthree}rm1700] [encoding=\typescriptthree]
+ \definefontsynonym [cmr5] [\typescriptprefix{c:\typescriptthree}rm0500] [encoding=\typescriptthree]
+ \definefontsynonym [cmr6] [\typescriptprefix{c:\typescriptthree}rm0600] [encoding=\typescriptthree]
+ \definefontsynonym [cmr7] [\typescriptprefix{c:\typescriptthree}rm0700] [encoding=\typescriptthree]
+ \definefontsynonym [cmr8] [\typescriptprefix{c:\typescriptthree}rm0800] [encoding=\typescriptthree]
+ \definefontsynonym [cmr9] [\typescriptprefix{c:\typescriptthree}rm0900] [encoding=\typescriptthree]
+ \definefontsynonym [cmsl10] [\typescriptprefix{c:\typescriptthree}sl1000] [encoding=\typescriptthree]
+ \definefontsynonym [cmsl12] [\typescriptprefix{c:\typescriptthree}sl1200] [encoding=\typescriptthree]
+ \definefontsynonym [cmsl8] [\typescriptprefix{c:\typescriptthree}sl0800] [encoding=\typescriptthree]
+ \definefontsynonym [cmsl9] [\typescriptprefix{c:\typescriptthree}sl0900] [encoding=\typescriptthree]
+ \definefontsynonym [cmtcsc10] [\typescriptprefix{c:\typescriptthree}tc1000] [encoding=\typescriptthree]
+ \definefontsynonym [cmti10] [\typescriptprefix{c:\typescriptthree}ti1000] [encoding=\typescriptthree]
+ \definefontsynonym [cmti12] [\typescriptprefix{c:\typescriptthree}ti1200] [encoding=\typescriptthree]
+ \definefontsynonym [cmti7] [\typescriptprefix{c:\typescriptthree}ti0700] [encoding=\typescriptthree]
+ \definefontsynonym [cmti8] [\typescriptprefix{c:\typescriptthree}ti0800] [encoding=\typescriptthree]
+ \definefontsynonym [cmti9] [\typescriptprefix{c:\typescriptthree}ti0900] [encoding=\typescriptthree]
+ \definefontsynonym [cmu10] [\typescriptprefix{c:\typescriptthree}ui1000] [encoding=\typescriptthree]
+\stoptypescript
+
+\starttypescript [sans] [computer-modern] [t2a,t2b,t2c,x2]
+ \definefontsynonym [cmss10] [\typescriptprefix{c:\typescriptthree}ss1000] [encoding=\typescriptthree]
+ \definefontsynonym [cmss12] [\typescriptprefix{c:\typescriptthree}ss1200] [encoding=\typescriptthree]
+ \definefontsynonym [cmss17] [\typescriptprefix{c:\typescriptthree}ss1700] [encoding=\typescriptthree]
+ \definefontsynonym [cmss8] [\typescriptprefix{c:\typescriptthree}ss0800] [encoding=\typescriptthree]
+ \definefontsynonym [cmss9] [\typescriptprefix{c:\typescriptthree}ss0900] [encoding=\typescriptthree]
+ \definefontsynonym [cmssbx10] [\typescriptprefix{c:\typescriptthree}sx1000] [encoding=\typescriptthree]
+ %\definefontsynonym [cmssdc10] [\typescriptprefix{c:\typescriptthree}ssdc1000] [encoding=\typescriptthree]
+ \definefontsynonym [cmssi10] [\typescriptprefix{c:\typescriptthree}si1000] [encoding=\typescriptthree]
+ \definefontsynonym [cmssi12] [\typescriptprefix{c:\typescriptthree}si1200] [encoding=\typescriptthree]
+ \definefontsynonym [cmssi17] [\typescriptprefix{c:\typescriptthree}si1700] [encoding=\typescriptthree]
+ \definefontsynonym [cmssi8] [\typescriptprefix{c:\typescriptthree}si0800] [encoding=\typescriptthree]
+ \definefontsynonym [cmssi9] [\typescriptprefix{c:\typescriptthree}si0900] [encoding=\typescriptthree]
+ \definefontsynonym [cmssq8] [\typescriptprefix{c:\typescriptthree}ss0800] [encoding=\typescriptthree]
+ \definefontsynonym [cmssqi8] [\typescriptprefix{c:\typescriptthree}si0800] [encoding=\typescriptthree]
+\stoptypescript
+
+\starttypescript [mono] [computer-modern] [t2a,t2b,t2c,x2]
+ \definefontsynonym [cmitt10] [\typescriptprefix{c:\typescriptthree}it1000] [encoding=\typescriptthree]
+ \definefontsynonym [cmsltt10] [\typescriptprefix{c:\typescriptthree}st1000] [encoding=\typescriptthree]
+ \definefontsynonym [cmtt10] [\typescriptprefix{c:\typescriptthree}tt1000] [encoding=\typescriptthree]
+ \definefontsynonym [cmtt12] [\typescriptprefix{c:\typescriptthree}tt1200] [encoding=\typescriptthree]
+ \definefontsynonym [cmtt8] [\typescriptprefix{c:\typescriptthree}tt0800] [encoding=\typescriptthree]
+ \definefontsynonym [cmtt9] [\typescriptprefix{c:\typescriptthree}tt0900] [encoding=\typescriptthree]
+ \definefontsynonym [cmvtt10] [\typescriptprefix{c:\typescriptthree}vt1000] [encoding=\typescriptthree]
+\stoptypescript
+
+\starttypescript [serif] [computer-modern] [lcy]
+ \definefontsynonym [cmb10] [lhb10] [encoding=lcy]
+ \definefontsynonym [cmbx10] [lhbx10] [encoding=lcy]
+ \definefontsynonym [cmbx12] [lhbx12] [encoding=lcy]
+ \definefontsynonym [cmbx5] [lhbx5] [encoding=lcy]
+ \definefontsynonym [cmbx6] [lhbx6] [encoding=lcy]
+ \definefontsynonym [cmbx7] [lhbx7] [encoding=lcy]
+ \definefontsynonym [cmbx8] [lhbx8] [encoding=lcy]
+ \definefontsynonym [cmbx9] [lhbx9] [encoding=lcy]
+ \definefontsynonym [cmbxsl10] [lhbxsl10] [encoding=lcy]
+ \definefontsynonym [cmbxti10] [lhbxti10] [encoding=lcy]
+ \definefontsynonym [cmcsc10] [lhcsc10] [encoding=lcy]
+ \definefontsynonym [cmdunh10] [lhdunh10] [encoding=lcy]
+ \definefontsynonym [cmff10] [lhff10] [encoding=lcy]
+ \definefontsynonym [cmfi10] [lhfi10] [encoding=lcy]
+ \definefontsynonym [cmfib8] [lhfib8] [encoding=lcy]
+ \definefontsynonym [cminch] [lhinch] [encoding=lcy]
+ \definefontsynonym [cmr10] [lhr10] [encoding=lcy]
+ \definefontsynonym [cmr12] [lhr12] [encoding=lcy]
+ \definefontsynonym [cmr17] [lhr17] [encoding=lcy]
+ \definefontsynonym [cmr5] [lhr5] [encoding=lcy]
+ \definefontsynonym [cmr6] [lhr6] [encoding=lcy]
+ \definefontsynonym [cmr7] [lhr7] [encoding=lcy]
+ \definefontsynonym [cmr8] [lhr8] [encoding=lcy]
+ \definefontsynonym [cmr9] [lhr9] [encoding=lcy]
+ \definefontsynonym [cmsl10] [lhsl10] [encoding=lcy]
+ \definefontsynonym [cmsl12] [lhsl12] [encoding=lcy]
+ \definefontsynonym [cmsl8] [lhsl8] [encoding=lcy]
+ \definefontsynonym [cmsl9] [lhsl9] [encoding=lcy]
+ \definefontsynonym [cmtcsc10] [lhtcsc10] [encoding=lcy]
+ \definefontsynonym [cmtex10] [lhtex10] [encoding=lcy]
+ \definefontsynonym [cmtex8] [lhtex8] [encoding=lcy]
+ \definefontsynonym [cmtex9] [lhtex9] [encoding=lcy]
+ \definefontsynonym [cmti10] [lhti10] [encoding=lcy]
+ \definefontsynonym [cmti12] [lhti12] [encoding=lcy]
+ \definefontsynonym [cmti7] [lhti7] [encoding=lcy]
+ \definefontsynonym [cmti8] [lhti8] [encoding=lcy]
+ \definefontsynonym [cmti9] [lhti9] [encoding=lcy]
+ \definefontsynonym [cmu10] [lhu10] [encoding=lcy]
+\stoptypescript
+
+\starttypescript [sans] [computer-modern] [lcy]
+ \definefontsynonym [cmss10] [lhss10] [encoding=lcy]
+ \definefontsynonym [cmss12] [lhss12] [encoding=lcy]
+ \definefontsynonym [cmss17] [lhss17] [encoding=lcy]
+ \definefontsynonym [cmss8] [lhss8] [encoding=lcy]
+ \definefontsynonym [cmss9] [lhss9] [encoding=lcy]
+ \definefontsynonym [cmssbi10] [lhssbi10] [encoding=lcy]
+ \definefontsynonym [cmssbx10] [lhssbx10] [encoding=lcy]
+ \definefontsynonym [cmssdc10] [lhssdc10] [encoding=lcy]
+ \definefontsynonym [cmssi10] [lhssi10] [encoding=lcy]
+ \definefontsynonym [cmssi12] [lhssi12] [encoding=lcy]
+ \definefontsynonym [cmssi17] [lhssi17] [encoding=lcy]
+ \definefontsynonym [cmssi8] [lhssi8] [encoding=lcy]
+ \definefontsynonym [cmssi9] [lhssi9] [encoding=lcy]
+ \definefontsynonym [cmssq8] [lhssq8] [encoding=lcy]
+ \definefontsynonym [cmssqi8] [lhssqi8] [encoding=lcy]
+\stoptypescript
+
+\starttypescript [mono] [computer-modern] [lcy]
+ \definefontsynonym [cmitt10] [lhitt10] [encoding=lcy]
+ \definefontsynonym [cmsltt10] [lhsltt10] [encoding=lcy]
+ \definefontsynonym [cmtt10] [lhtt10] [encoding=lcy]
+ \definefontsynonym [cmtt12] [lhtt12] [encoding=lcy]
+ \definefontsynonym [cmtt8] [lhtt8] [encoding=lcy]
+ \definefontsynonym [cmtt9] [lhtt9] [encoding=lcy]
+ \definefontsynonym [cmvtt10] [lhvtt10] [encoding=lcy]
+\stoptypescript
+
+%
+
+\starttypescript [math] [modern,computer-modern,latin-modern] % [default]
+ % watch the space, it prevents remapping
+ \definefontsynonym [ComputerModernMath-Roman] [rm-lmr10]% [lmr10 ]
+ \definefontsynonym [ComputerModernMath-Extension] [lmex10]
+ \definefontsynonym [ComputerModernMath-Italic] [lmmi10]
+ \definefontsynonym [ComputerModernMath-Symbol] [lmsy10]
+\stoptypescript
+
+\starttypescript [boldmath,bfmath] [modern,computer-modern,latin-modern] % [default]
+ % watch the space, it prevents remapping
+ \definefontsynonym [ComputerModernMath-Roman-Bold] [rm-lmb10] % [lmb10 ]
+ \definefontsynonym [ComputerModernMath-Extension] [lmex10]
+ \definefontsynonym [ComputerModernMath-Italic-Bold] [lmmib10]
+ \definefontsynonym [ComputerModernMath-Symbol-Bold] [lmbsy10]
+\stoptypescript
+
+% Till we have cyrilic in lm:
+
+% \usetypescript[modern-base][t2a]
+% \setupbodyfont[modern,10pt]
+
+\starttypescript [serif] [computer-modern] [t2a,t2b,t2c,x2]
+ \definefontsynonym [ComputerModern] [\typescriptprefix{c:\typescriptthree}rm1000] [encoding=\typescriptthree]
+ \definefontsynonym [ComputerModern-Italic] [\typescriptprefix{c:\typescriptthree}ti1000] [encoding=\typescriptthree]
+ \definefontsynonym [ComputerModern-Slanted] [\typescriptprefix{c:\typescriptthree}sl1000] [encoding=\typescriptthree]
+ \definefontsynonym [ComputerModern-Bold] [\typescriptprefix{c:\typescriptthree}bx1000] [encoding=\typescriptthree]
+ \definefontsynonym [ComputerModern-BoldItalic] [\typescriptprefix{c:\typescriptthree}bi1000] [encoding=\typescriptthree]
+ \definefontsynonym [ComputerModern-BoldSlanted] [\typescriptprefix{c:\typescriptthree}bl1000] [encoding=\typescriptthree]
+ \definefontsynonym [ComputerModern-Caps] [\typescriptprefix{c:\typescriptthree}cc1000] [encoding=\typescriptthree]
+ \definefontsynonym [ComputerModern-CapsSlanted] [\typescriptprefix{c:\typescriptthree}sc1000] [encoding=\typescriptthree]
+\stoptypescript
+
+\starttypescript [sans] [computer-modern] [t2a,t2b,t2c,x2]
+ \definefontsynonym [ComputerModernSans] [\typescriptprefix{c:\typescriptthree}ss1000] [encoding=\typescriptthree]
+ %definefontsynonym [ComputerModernSans-Italic] [\typescriptprefix{c:\typescriptthree}1000] [encoding=\typescriptthree]
+ \definefontsynonym [ComputerModernSans-Slanted] [\typescriptprefix{c:\typescriptthree}si1000] [encoding=\typescriptthree]
+ \definefontsynonym [ComputerModernSans-Bold] [\typescriptprefix{c:\typescriptthree}sx1000] [encoding=\typescriptthree]
+ %definefontsynonym [ComputerModernSans-BoldItalic] [\typescriptprefix{c:\typescriptthree}1000] [encoding=\typescriptthree]
+ \definefontsynonym [ComputerModernSans-BoldSlanted] [\typescriptprefix{c:\typescriptthree}so1000] [encoding=\typescriptthree]
+ %definefontsynonym [ComputerModernSans-Caps] [\typescriptprefix{c:\typescriptthree}1000] [encoding=\typescriptthree]
+ %definefontsynonym [ComputerModernSans-CapsSlanted] [\typescriptprefix{c:\typescriptthree}1000] [encoding=\typescriptthree]
+\stoptypescript
+
+\starttypescript [mono] [computer-modern] [t2a,t2b,t2c,x2]
+ \definefontsynonym [ComputerModernMono] [\typescriptprefix{c:\typescriptthree}tt1000] [encoding=\typescriptthree]
+ \definefontsynonym [ComputerModernMono-Italic] [\typescriptprefix{c:\typescriptthree}it1000] [encoding=\typescriptthree]
+ \definefontsynonym [ComputerModernMono-Slanted] [\typescriptprefix{c:\typescriptthree}st1000] [encoding=\typescriptthree]
+ %definefontsynonym [ComputerModernMono-Bold] [\typescriptprefix{c:\typescriptthree}1000] [encoding=\typescriptthree]
+ %definefontsynonym [ComputerModernMono-BoldItalic] [\typescriptprefix{c:\typescriptthree}1000] [encoding=\typescriptthree]
+ %definefontsynonym [ComputerModernMono-BoldSlanted] [\typescriptprefix{c:\typescriptthree}1000] [encoding=\typescriptthree]
+ \definefontsynonym [ComputerModernMono-Caps] [\typescriptprefix{c:\typescriptthree}tc1000] [encoding=\typescriptthree]
+ %definefontsynonym [ComputerModernMono-CapsSlanted] [\typescriptprefix{c:\typescriptthree}1000] [encoding=\typescriptthree]
+\stoptypescript
+
+% Computer Concrete (AMS)
+
+\starttypescript [serif] [concrete] [default]
+ \definefontsynonym [ComputerConcrete] [ccr10]
+ \definefontsynonym [ComputerConcrete-Italic] [ccti10]
+ \definefontsynonym [ComputerConcrete-Slanted] [ccsl10]
+ \definefontsynonym [ComputerConcrete-Bold] [ComputerConcrete]
+ \definefontsynonym [ComputerConcrete-BoldItalic] [ComputerConcrete-Italic]
+ \definefontsynonym [ComputerConcrete-BoldSlanted] [ComputerConcrete-Slanted]
+ \definefontsynonym [ComputerConcrete-Caps] [cccsc10]
+\stoptypescript
+
+% Euler (AMS)
+
+\starttypescript [math] [euler] [default]
+ \definefontsynonym [Euler-Roman] [zeurm10]
+ \definefontsynonym [Euler-Extension] [zeuex10]
+ \definefontsynonym [Euler-Symbol] [zeusm10]
+ \definefontsynonym [Euler-Fraktur] [eufm10]
+
+ \loadmapfile[original-ams-euler.map]
+\stoptypescript
+
+\starttypescript [boldmath,bfmath] [euler] [default]
+ \definefontsynonym [Euler-Roman-Bold] [zeurb10]
+ \definefontsynonym [Euler-Extension] [zeuex10]
+ \definefontsynonym [Euler-Symbol-Bold] [zeusb10]
+ \definefontsynonym [Euler-Fraktur-Bold] [eufb10]
+
+ \loadmapfile[original-ams-euler.map]
+\stoptypescript
+
+% AMS (AMS)
+
+\starttypescript [math] [modern,computer-modern,latin-modern,ams] [default]
+ \definefontsynonym [AMS-SymbolA] [msam10]
+ \definefontsynonym [AMS-SymbolB] [msbm10]
+\stoptypescript
+
+% Fourier (Utopia)
+
+\starttypescript [math] [fourier] [default,ec]
+ \definefontsynonym [Fourier-Math-Letters] [futr8t] [encoding=ec]
+ %definefontsynonym [Fourier-Math-Letters] [futmi]
+ \definefontsynonym [Fourier-Math-Letters-Italic] [futmii]
+ \definefontsynonym [Fourier-Math-Symbols] [futsy]
+ \definefontsynonym [Fourier-Math-Extension] [fourier-mex]
+
+ \loadmapfile[fourier.map]
+\stoptypescript
+
+\starttypescript [serif] [fourier] [ec]
+ \definefontsynonym [Fourier-Regular] [futr8t] [encoding=ec]
+ \definefontsynonym [Fourier-Slanted] [futro8t] [encoding=ec]
+ \definefontsynonym [Fourier-Italic] [futri8t] [encoding=ec]
+ \definefontsynonym [Fourier-RegularCaps] [futrc8t] [encoding=ec]
+ \definefontsynonym [Fourier-Bold] [futb8t] [encoding=ec]
+ \definefontsynonym [Fourier-BoldSlanted] [futbo8t] [encoding=ec]
+ \definefontsynonym [Fourier-BoldItalic] [futbi8t] [encoding=ec]
+ \definefontsynonym [Fourier-BoldCaps] [futbc8t] [encoding=ec]
+
+ \definefontsynonym [Fourier-Regular-Expert] [futr9e] [encoding=ec]
+ \definefontsynonym [Fourier-Slanted-Expert] [futro9e] [encoding=ec]
+ \definefontsynonym [Fourier-Italic-Expert] [futri9e] [encoding=ec]
+ \definefontsynonym [Fourier-RegularCaps-Expert] [futrc9e] [encoding=ec]
+ \definefontsynonym [Fourier-Semi-Expert] [futs9e] [encoding=ec]
+ \definefontsynonym [Fourier-SemiSlanted-Expert] [futso9e] [encoding=ec]
+ \definefontsynonym [Fourier-SemiItalic-Expert] [futsi9e] [encoding=ec]
+ \definefontsynonym [Fourier-SemiCaps-Expert] [futsc9e] [encoding=ec]
+ \definefontsynonym [Fourier-Bold-Expert] [futb9e] [encoding=ec]
+ \definefontsynonym [Fourier-BoldSlanted-Expert] [futbo9e] [encoding=ec]
+ \definefontsynonym [Fourier-BoldItalic-Expert] [futbi9e] [encoding=ec]
+ \definefontsynonym [Fourier-Black-Expert] [futc9e] [encoding=ec]
+
+ \definefontsynonym [Fourier-Regular-OldStyle] [futr9d] [encoding=ec]
+ \definefontsynonym [Fourier-Slanted-OldStyle] [futro9d] [encoding=ec]
+ \definefontsynonym [Fourier-Italic-OldStyle] [futri9d] [encoding=ec]
+ \definefontsynonym [Fourier-RegularCaps-OldStyle] [futrc9d] [encoding=ec]
+ \definefontsynonym [Fourier-Semi-OldStyle] [futs9d] [encoding=ec]
+ \definefontsynonym [Fourier-SemiSlanted-OldStyle] [futso9d] [encoding=ec]
+ \definefontsynonym [Fourier-SemiItalic-OldStyle] [futsi9d] [encoding=ec]
+ \definefontsynonym [Fourier-SemiCaps-OldStyle] [futsc9d] [encoding=ec]
+ \definefontsynonym [Fourier-Bold-OldStyle] [futb9d] [encoding=ec]
+ \definefontsynonym [Fourier-BoldSlanted-OldStyle] [futbo9d] [encoding=ec]
+ \definefontsynonym [Fourier-BoldItalic-OldStyle] [futbi9d] [encoding=ec]
+ \definefontsynonym [Fourier-Black-OldStyle] [futc9d] [encoding=ec]
+
+ \loadmapfile[fourier.map]
+ \loadmapfile[fourier-utopia-expert.map]
+\stoptypescript
+
+% Courier (URW)
+
+\starttypescript [mono] [courier] [qx]
+ \definefontsynonym [qx-ucrr8a] [qcrr] [encoding=qx]
+ \definefontsynonym [qx-ucrb8a] [qcrb] [encoding=qx]
+ \definefontsynonym [qx-ucrro8a] [qcrri] [encoding=qx]
+ \definefontsynonym [qx-ucrbo8a] [qcrbi] [encoding=qx]
+\stoptypescript
+
+\starttypescript [mono] [courier] [texnansi,ec,8r,t5]
+ \definefontsynonym [Courier] [\typescriptthree-ucrr8a] [encoding=\typescriptthree]
+ \definefontsynonym [Courier-Bold] [\typescriptthree-ucrb8a] [encoding=\typescriptthree]
+ \definefontsynonym [Courier-Oblique] [\typescriptthree-ucrro8a] [encoding=\typescriptthree]
+ \definefontsynonym [Courier-BoldOblique] [\typescriptthree-ucrbo8a] [encoding=\typescriptthree]
+
+ \loadmapfile[\typescriptthree-urw-courier.map]
+\stoptypescript
+
+% Helvetica (URW)
+
+\starttypescript [sans] [helvetica] [qx]
+ \definefontsynonym [qx-uhvr8a] [qhvr] [encoding=qx]
+ \definefontsynonym [qx-uhvri8a] [qhvri] [encoding=qx]
+ \definefontsynonym [qx-uhvro8a] [qhvri] [encoding=qx]
+ \definefontsynonym [qx-uhvb8a] [qhvb] [encoding=qx]
+ \definefontsynonym [qx-uhvbi8a] [qhvbi] [encoding=qx]
+ \definefontsynonym [qx-uhvbo8a] [qhvbi] [encoding=qx]
+\stoptypescript
+
+\starttypescript [sans] [helvetica] [texnansi,ec,8r,t5]
+ \definefontsynonym [Helvetica] [\typescriptthree-uhvr8a] [encoding=\typescriptthree]
+ \definefontsynonym [Helvetica-Italic] [\typescriptthree-uhvri8a] [encoding=\typescriptthree]
+ \definefontsynonym [Helvetica-Oblique] [\typescriptthree-uhvro8a] [encoding=\typescriptthree]
+ \definefontsynonym [Helvetica-Bold] [\typescriptthree-uhvb8a] [encoding=\typescriptthree]
+ \definefontsynonym [Helvetica-BoldItalic] [\typescriptthree-uhvbi8a] [encoding=\typescriptthree]
+ \definefontsynonym [Helvetica-BoldOblique] [\typescriptthree-uhvbo8a] [encoding=\typescriptthree]
+
+ \loadmapfile[\typescriptthree-urw-helvetica.map]
+\stoptypescript
+
+% Times Roman (URW)
+
+\starttypescript [serif] [times] [qx]
+ \definefontsynonym [qx-utmr8a] [qtmr] [encoding=qx]
+ \definefontsynonym [qx-utmri8a] [qtmri] [encoding=qx]
+ \definefontsynonym [qx-utmb8a] [qtmb] [encoding=qx]
+ \definefontsynonym [qx-utmbi8a] [qtmbi] [encoding=qx]
+ \definefontsynonym [qx-utmr8a-slanted-167] [qtmri] [encoding=qx]
+ \definefontsynonym [qx-utmb8a-slanted-167] [qtmbi] [encoding=qx]
+\stoptypescript
+
+\starttypescript [serif] [times] [texnansi,ec,8r,t5]
+ \definefontsynonym [Times-Roman] [\typescriptthree-utmr8a] [encoding=\typescriptthree]
+ \definefontsynonym [Times-Italic] [\typescriptthree-utmri8a] [encoding=\typescriptthree]
+ \definefontsynonym [Times-Bold] [\typescriptthree-utmb8a] [encoding=\typescriptthree]
+ \definefontsynonym [Times-BoldItalic] [\typescriptthree-utmbi8a] [encoding=\typescriptthree]
+ \definefontsynonym [Times-Slanted] [\typescriptthree-utmr8a-slanted-167] [encoding=\typescriptthree]
+ \definefontsynonym [Times-BoldSlanted] [\typescriptthree-utmb8a-slanted-167] [encoding=\typescriptthree]
+ \definefontsynonym [Times-Caps] [Times-Roman]
+ \definefontsynonym [Times] [Times-Roman]
+
+ \loadmapfile[\typescriptthree-urw-times.map]
+\stoptypescript
+
+% Math Times (tx)
+
+\starttypescript [math] [times] [all]
+ \definefontsynonym [Times-Roman-Upright] [txr]
+ \definefontsynonym [Times-Roman-Italic] [txi]
+ \definefontsynonym [Times-Roman-Slanted] [txsl]
+ \definefontsynonym [Times-Roman-Caps] [txsc]
+ \definefontsynonym [Times-Companion-Upright] [tcxr]
+ \definefontsynonym [Times-Companion-Italic] [tcxi]
+ \definefontsynonym [Times-Companion-Slanted] [tcxsl]
+ \definefontsynonym [Times-Math-Italic] [txmi]
+ \definefontsynonym [Times-Math-Symbols] [txsy]
+ \definefontsynonym [Times-Math-Extension] [txex]
+ \definefontsynonym [Times-Math-SymbolsA] [txsya]
+ \definefontsynonym [Times-Math-SymbolsB] [txsyb]
+ \definefontsynonym [Times-Math-SymbolsC] [txsyc]
+ \definefontsynonym [Times-Math-Italic-A] [txmia]
+ \definefontsynonym [Times-Math-Extension-A] [txexa]
+
+ \loadmapfile[original-youngryu-tx.map]
+\stoptypescript
+
+% Antykwa Torunska (GUST)
+
+% \starttypescript [serif] [antykwa-torunska] [texnansi,ec,8r]
+% \definefontsynonym [AntykwaTorunska-Regular] [\typescriptthree-anttr] [encoding=\typescriptthree]
+% \definefontsynonym [AntykwaTorunska-Bold] [\typescriptthree-anttb] [encoding=\typescriptthree]
+% \definefontsynonym [AntykwaTorunska-Italic] [\typescriptthree-anttri] [encoding=\typescriptthree]
+% \stoptypescript
+
+\starttypescript [serif] [antykwa-torunska,antykwa-torunska-light,antykwa-torunska-cond,antykwa-torunska-lightcond] [texnansi,qx,t5,ec,t2a,t2b,t2c,greek]
+ \definefontsynonym [AntykwaTorunska-Regular] [\typescriptthree-anttr] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaTorunska-Italic] [\typescriptthree-anttri] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaTorunska-Bold] [\typescriptthree-anttb] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaTorunska-BoldItalic] [\typescriptthree-anttbi] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaTorunska-Light] [\typescriptthree-anttl] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaTorunska-LightItalic] [\typescriptthree-anttli] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaTorunska-Medium] [\typescriptthree-anttm] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaTorunska-MedItalic] [\typescriptthree-anttmi] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaTorunska-CondRegular] [\typescriptthree-anttcr] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaTorunska-CondItalic] [\typescriptthree-anttcri] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaTorunska-CondBold] [\typescriptthree-anttcb] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaTorunska-CondBoldItalic] [\typescriptthree-anttcbi] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaTorunska-CondLight] [\typescriptthree-anttcl] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaTorunska-CondLightItalic][\typescriptthree-anttcli] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaTorunska-CondMedium] [\typescriptthree-anttcm] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaTorunska-CondMedItalic] [\typescriptthree-anttcmi] [encoding=\typescriptthree]
+
+ \loadmapfile[antt-\typescriptthree.map]
+\stoptypescript
+
+\starttypescript [serif] [antykwa-torunska,antykwa-torunska-light,antykwa-torunska-cond,antykwa-torunska-lightcond] [texnansi,qx,t5,ec]
+ \definefontsynonym [AntykwaTorunska-Cap] [\typescriptthree-anttrcap] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaTorunska-ItalicCap] [\typescriptthree-anttricap] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaTorunska-BoldCap] [\typescriptthree-anttbcap] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaTorunska-BoldItalicCap] [\typescriptthree-anttbicap] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaTorunska-LightCap] [\typescriptthree-anttlcap] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaTorunska-LightItalicCap] [\typescriptthree-anttlicap] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaTorunska-MediumCap] [\typescriptthree-anttmcap] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaTorunska-MedItalicCap] [\typescriptthree-anttmicap] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaTorunska-CondCap] [\typescriptthree-anttcrcap] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaTorunska-CondItalicCap] [\typescriptthree-anttcricap] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaTorunska-CondBoldCap] [\typescriptthree-anttcbcap] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaTorunska-CondBoldItalicCap] [\typescriptthree-anttcbicap] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaTorunska-CondLightCap] [\typescriptthree-anttclcap] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaTorunska-CondLightItalicCap][\typescriptthree-anttclicap] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaTorunska-CondMediumCap] [\typescriptthree-anttcmcap] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaTorunska-CondMedItalicCap] [\typescriptthree-anttcmicap] [encoding=\typescriptthree]
+
+ \loadmapfile[antt-\typescriptthree.map]
+\stoptypescript
+
+% duplicates ? ?
+% atl: no: fallbacks for the named variants
+
+\starttypescript [serif] [antykwa-torunska,antykwa-torunska-light,antykwa-torunska-cond,antykwa-torunska-lightcond] [t2a,t2b,t2c,greek]
+ \definefontsynonym [AntykwaTorunska-BoldCap] [\typescriptthree-anttb] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaTorunska-BoldItalicCap] [\typescriptthree-anttbi] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaTorunska-LightCap] [\typescriptthree-anttl] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaTorunska-LightItalicCap] [\typescriptthree-anttli] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaTorunska-MediumCap] [\typescriptthree-anttm] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaTorunska-MedItalicCap] [\typescriptthree-anttmi] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaTorunska-Cap] [\typescriptthree-anttr] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaTorunska-ItalicCap] [\typescriptthree-anttri] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaTorunska-CondBoldCap] [\typescriptthree-anttcb] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaTorunska-CondBoldItalicCap] [\typescriptthree-anttcbi] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaTorunska-CondLightCap] [\typescriptthree-anttcl] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaTorunska-CondLightItalicCap][\typescriptthree-anttcli] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaTorunska-CondMediumCap] [\typescriptthree-anttcm] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaTorunska-CondMedItalicCap] [\typescriptthree-anttcmi] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaTorunska-CondCap] [\typescriptthree-anttcr] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaTorunska-CondItalicCap] [\typescriptthree-anttcri] [encoding=\typescriptthree]
+
+ \loadmapfile[antt-\typescriptthree.map]
+\stoptypescript
+
+\starttypescript [serif] [antykwa-torunska,antykwa-torunska-light,antykwa-torunska-cond,antykwa-torunska-lightcond] [t2a,t2b,t2c]
+ \definefontsynonym [AntykwaTorunska-BoldCap] [\typescriptthree-anttb] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaTorunska-BoldItalicCap] [\typescriptthree-anttbi] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaTorunska-LightCap] [\typescriptthree-anttl] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaTorunska-LightItalicCap] [\typescriptthree-anttli] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaTorunska-MediumCap] [\typescriptthree-anttm] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaTorunska-MedItalicCap] [\typescriptthree-anttmi] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaTorunska-Cap] [\typescriptthree-anttr] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaTorunska-ItalicCap] [\typescriptthree-anttri] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaTorunska-CondBoldCap] [\typescriptthree-anttcb] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaTorunska-CondBoldItalicCap] [\typescriptthree-anttcbi] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaTorunska-CondLightCap] [\typescriptthree-anttcl] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaTorunska-CondLightItalicCap][\typescriptthree-anttcli] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaTorunska-CondMediumCap] [\typescriptthree-anttcm] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaTorunska-CondMedItalicCap] [\typescriptthree-anttcmi] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaTorunska-CondCap] [\typescriptthree-anttcr] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaTorunska-CondItalicCap] [\typescriptthree-anttcri] [encoding=\typescriptthree]
+
+ \loadmapfile[antt-\typescriptthree.map]
+\stoptypescript
+
+% mabye no -Regular etc
+% dunny reverse of condlight lightcond
+
+\starttypescript [math] [antykwa-torunska] [default]
+ \definefontsynonym [AntykwaTorunska-Math-Letters-Regular] [rm-anttr]
+ \definefontsynonym [AntykwaTorunska-Math-Letters-Italic] [mi-anttri]
+ \definefontsynonym [AntykwaTorunska-Math-Symbols-Regular] [sy-anttrz]
+ \definefontsynonym [AntykwaTorunska-Math-Extension-Regular] [ex-anttr]
+\stoptypescript
+
+\starttypescript [math] [antykwa-torunska-light] [default]
+ \definefontsynonym [AntykwaTorunska-Math-Letters-Light] [rm-anttl]
+ \definefontsynonym [AntykwaTorunska-Math-Letters-LightItalic] [mi-anttli]
+ \definefontsynonym [AntykwaTorunska-Math-Symbols-Light] [sy-anttlz]
+ \definefontsynonym [AntykwaTorunska-Math-Extension-Light] [ex-anttl]
+\stoptypescript
+
+\starttypescript [math] [antykwa-torunska-cond] [default]
+ \definefontsynonym [AntykwaTorunska-Math-Letters-CondRegular] [rm-anttcr]
+ \definefontsynonym [AntykwaTorunska-Math-Letters-CondItalic] [mi-anttcri]
+ \definefontsynonym [AntykwaTorunska-Math-Symbols-CondRegular] [sy-anttcrz]
+ \definefontsynonym [AntykwaTorunska-Math-Extension-CondRegular] [ex-anttcr]
+\stoptypescript
+
+\starttypescript [math] [antykwa-torunska-lightcond] [default]
+ \definefontsynonym [AntykwaTorunska-Math-Letters-CondLight] [rm-anttcl]
+ \definefontsynonym [AntykwaTorunska-Math-Letters-CondLightItalic] [mi-anttcli]
+ \definefontsynonym [AntykwaTorunska-Math-Symbols-CondLight] [sy-anttclz]
+ \definefontsynonym [AntykwaTorunska-Math-Extension-CondLight] [ex-anttcl]
+\stoptypescript
+
+\starttypescript [math] [antykwa-torunska,antykwa-torunska-light,antykwa-torunska-cond,antykwa-torunska-lightcond] [default]
+ \loadmapfile[antt-rm.map]
+ \loadmapfile[antt-mi.map]
+ \loadmapfile[antt-sy.map]
+ \loadmapfile[antt-ex.map]
+\stoptypescript
+
+% Antykwa Poltawskiego (GUST)
+
+\starttypescript [serif] [antykwa-poltawskiego] [texnansi,ec,8r]
+ \definefontsynonym [AntykwaPoltawskiego-Regular] [\typescriptthree-antpr] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-Bold] [\typescriptthree-antpb] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-Italic] [\typescriptthree-antpri] [encoding=\typescriptthree]
+ \definefontsynonym [AntykwaPoltawskiego-BoldItalic] [\typescriptthree-antpbi] [encoding=\typescriptthree]
+
+ \loadmapfile[\typescriptthree-public-antp.map]
+\stoptypescript
+
+% Iwona (JMN)
+
+% maybe this will change in Iwona-Math-Letters and Iwona-Math-Letters-Italic
+
+\starttypescript [sans] [iwona-light,iwona,iwona-medium,iwona-heavy,iwona-light-cond,iwona-cond,iwona-medium-cond,iwona-heavy-cond] [texnansi,ec,el,qx,t5]
+
+ \definefontsynonym[Iwona-Regular] [\typescriptthree-iwonar] [encoding=\typescriptthree]
+ \definefontsynonym[Iwona-Italic] [\typescriptthree-iwonari] [encoding=\typescriptthree]
+ \definefontsynonym[Iwona-Bold] [\typescriptthree-iwonab] [encoding=\typescriptthree]
+ \definefontsynonym[Iwona-BoldItalic] [\typescriptthree-iwonabi] [encoding=\typescriptthree]
+ \definefontsynonym[Iwona-Light-Regular] [\typescriptthree-iwonal] [encoding=\typescriptthree]
+ \definefontsynonym[Iwona-Light-Italic] [\typescriptthree-iwonali] [encoding=\typescriptthree]
+ \definefontsynonym[Iwona-Medium-Regular] [\typescriptthree-iwonam] [encoding=\typescriptthree]
+ \definefontsynonym[Iwona-Medium-Italic] [\typescriptthree-iwonami] [encoding=\typescriptthree]
+ \definefontsynonym[Iwona-Heavy-Regular] [\typescriptthree-iwonah] [encoding=\typescriptthree]
+ \definefontsynonym[Iwona-Heavy-Italic] [\typescriptthree-iwonahi] [encoding=\typescriptthree]
+
+ \definefontsynonym[Iwona-CapsRegular] [\typescriptthree-iwonarcap] [encoding=\typescriptthree]
+ \definefontsynonym[Iwona-CapsItalic] [\typescriptthree-iwonaricap] [encoding=\typescriptthree]
+ \definefontsynonym[Iwona-CapsBold] [\typescriptthree-iwonabcap] [encoding=\typescriptthree]
+ \definefontsynonym[Iwona-CapsBoldItalic] [\typescriptthree-iwonabicap] [encoding=\typescriptthree]
+ \definefontsynonym[Iwona-CapsLight-Regular] [\typescriptthree-iwonalcap] [encoding=\typescriptthree]
+ \definefontsynonym[Iwona-CapsLight-Italic] [\typescriptthree-iwonalicap] [encoding=\typescriptthree]
+ \definefontsynonym[Iwona-CapsMedium-Regular] [\typescriptthree-iwonamcap] [encoding=\typescriptthree]
+ \definefontsynonym[Iwona-CapsMedium-Italic] [\typescriptthree-iwonamicap] [encoding=\typescriptthree]
+ \definefontsynonym[Iwona-CapsHeavy-Regular] [\typescriptthree-iwonahcap] [encoding=\typescriptthree]
+ \definefontsynonym[Iwona-CapsHeavy-Italic] [\typescriptthree-iwonahicap] [encoding=\typescriptthree]
+
+ \definefontsynonym[Iwona-CondRegular] [\typescriptthree-iwonacr] [encoding=\typescriptthree]
+ \definefontsynonym[Iwona-CondItalic] [\typescriptthree-iwonacri] [encoding=\typescriptthree]
+ \definefontsynonym[Iwona-CondBold] [\typescriptthree-iwonacb] [encoding=\typescriptthree]
+ \definefontsynonym[Iwona-CondBoldItalic] [\typescriptthree-iwonacbi] [encoding=\typescriptthree]
+ \definefontsynonym[Iwona-CondLight-Regular] [\typescriptthree-iwonacl] [encoding=\typescriptthree]
+ \definefontsynonym[Iwona-CondLight-Italic] [\typescriptthree-iwonacli] [encoding=\typescriptthree]
+ \definefontsynonym[Iwona-CondMedium-Regular] [\typescriptthree-iwonacm] [encoding=\typescriptthree]
+ \definefontsynonym[Iwona-CondMedium-Italic] [\typescriptthree-iwonacmi] [encoding=\typescriptthree]
+ \definefontsynonym[Iwona-CondHeavy-Regular] [\typescriptthree-iwonach] [encoding=\typescriptthree]
+ \definefontsynonym[Iwona-CondHeavy-Italic] [\typescriptthree-iwonachi] [encoding=\typescriptthree]
+
+ \definefontsynonym[Iwona-CapsCondRegular] [\typescriptthree-iwonacrcap] [encoding=\typescriptthree]
+ \definefontsynonym[Iwona-CapsCondItalic] [\typescriptthree-iwonacricap] [encoding=\typescriptthree]
+ \definefontsynonym[Iwona-CapsCondBold] [\typescriptthree-iwonacbcap] [encoding=\typescriptthree]
+ \definefontsynonym[Iwona-CapsCondBoldItalic] [\typescriptthree-iwonacbicap] [encoding=\typescriptthree]
+ \definefontsynonym[Iwona-CapsCondLight-Regular] [\typescriptthree-iwonaclcap] [encoding=\typescriptthree]
+ \definefontsynonym[Iwona-CapsCondLight-Italic] [\typescriptthree-iwonaclicap] [encoding=\typescriptthree]
+ \definefontsynonym[Iwona-CapsCondMedium-Regular][\typescriptthree-iwonacmcap] [encoding=\typescriptthree]
+ \definefontsynonym[Iwona-CapsCondMedium-Italic] [\typescriptthree-iwonacmicap] [encoding=\typescriptthree]
+ \definefontsynonym[Iwona-CapsCondHeavy-Regular] [\typescriptthree-iwonachcap] [encoding=\typescriptthree]
+ \definefontsynonym[Iwona-CapsCondHeavy-Italic] [\typescriptthree-iwonachicap] [encoding=\typescriptthree]
+
+ \loadmapfile[iwona-\typescriptthree.map]
+\stoptypescript
+
+\starttypescript [math] [iwona] [default]
+ \definefontsynonym [Iwona-Math-Letters-Regular] [rm-iwonar]
+ \definefontsynonym [Iwona-Math-Letters-Italic] [mi-iwonari]
+ \definefontsynonym [Iwona-Math-Symbols-Regular] [sy-iwonarz]
+ \definefontsynonym [Iwona-Math-Extension-Regular] [ex-iwonar]
+\stoptypescript
+
+\starttypescript [math] [iwona-light] [default]
+ \definefontsynonym [Iwona-Math-Letters-Light-Regular] [rm-iwonal]
+ \definefontsynonym [Iwona-Math-Letters-Light-Italic] [mi-iwonali]
+ \definefontsynonym [Iwona-Math-Symbols-Light] [sy-iwonalz]
+ \definefontsynonym [Iwona-Math-Extension-Light] [ex-iwonal]
+\stoptypescript
+
+\starttypescript [math] [iwona-medium] [default]
+ \definefontsynonym [Iwona-Math-Letters-Medium-Regular][rm-iwonam]
+ \definefontsynonym [Iwona-Math-Letters-Medium-Italic] [mi-iwonami]
+ \definefontsynonym [Iwona-Math-Symbols-Medium] [sy-iwonamz]
+ \definefontsynonym [Iwona-Math-Extension-Medium] [ex-iwonam]
+\stoptypescript
+
+\starttypescript [math] [iwona-heavy] [default]
+ \definefontsynonym [Iwona-Math-Letters-Heavy-Regular] [rm-iwonah]
+ \definefontsynonym [Iwona-Math-Letters-Heavy-Italic] [mi-iwonahi]
+ \definefontsynonym [Iwona-Math-Symbols-Heavy] [sy-iwonahz]
+ \definefontsynonym [Iwona-Math-Extension-Heavy] [ex-iwonah]
+\stoptypescript
+
+\starttypescript [math] [iwona,iwona-light,iwona-medium,iwona-heavy] [default]
+ \loadmapfile[iwona-rm.map]
+ \loadmapfile[iwona-mi.map]
+ \loadmapfile[iwona-sy.map]
+ \loadmapfile[iwona-ex.map]
+\stoptypescript
+
+% Kurier (JMN)
+
+\starttypescript [sans] [kurier-light,kurier,kurier-medium] [texnansi,ec,qx,t5]
+ \definefontsynonym[Kurier-Regular] [\typescriptthree-kurierr] [encoding=\typescriptthree]
+ \definefontsynonym[Kurier-Italic] [\typescriptthree-kurierri] [encoding=\typescriptthree]
+ \definefontsynonym[Kurier-Bold] [\typescriptthree-kurierb] [encoding=\typescriptthree]
+ \definefontsynonym[Kurier-BoldItalic] [\typescriptthree-kurierbi] [encoding=\typescriptthree]
+ \definefontsynonym[Kurier-Light-Regular] [\typescriptthree-kurierl] [encoding=\typescriptthree]
+ \definefontsynonym[Kurier-Light-Italic] [\typescriptthree-kurierli] [encoding=\typescriptthree]
+ \definefontsynonym[Kurier-Medium-Regular][\typescriptthree-kurierm] [encoding=\typescriptthree]
+ \definefontsynonym[Kurier-Medium-Italic] [\typescriptthree-kuriermi] [encoding=\typescriptthree]
+ \definefontsynonym[Kurier-Heavy-Regular] [\typescriptthree-kurierh] [encoding=\typescriptthree]
+ \definefontsynonym[Kurier-Heavy-Italic] [\typescriptthree-kurierhi] [encoding=\typescriptthree]
+
+ \loadmapfile[kurier-\typescriptthree.map]
+\stoptypescript
+
+\starttypescript [math] [kurier] [default]
+ \definefontsynonym [Kurier-Math-Letters-Regular] [rm-kurierr]
+ \definefontsynonym [Kurier-Math-Letters-Italic] [mi-kurierri]
+ \definefontsynonym [Kurier-Math-Symbols-Regular] [sy-kurierrz]
+ \definefontsynonym [Kurier-Math-Extension-Regular] [ex-kurierr]
+\stoptypescript
+
+\starttypescript [math] [kurier-light] [default]
+ \definefontsynonym [Kurier-Math-Letters-Light-Regular] [rm-kurierl]
+ \definefontsynonym [Kurier-Math-Letters-Light-Italic] [mi-kurierli]
+ \definefontsynonym [Kurier-Math-Symbols-Light] [sy-kurierlz]
+ \definefontsynonym [Kurier-Math-Extension-Light] [ex-kurierl]
+\stoptypescript
+
+\starttypescript [math] [kurier-medium] [default]
+ \definefontsynonym [Kurier-Math-Letters-Medium-Regular][rm-kurierm]
+ \definefontsynonym [Kurier-Math-Letters-Medium-Italic] [mi-kuriermi]
+ \definefontsynonym [Kurier-Math-Symbols-Medium] [sy-kuriermz]
+ \definefontsynonym [Kurier-Math-Extension-medium] [ex-kurierm]
+\stoptypescript
+
+\starttypescript [math] [kurier,kurier-light,kurier-medium] [default]
+ \loadmapfile[kurier-rm.map]
+ \loadmapfile[kurier-mi.map]
+ \loadmapfile[kurier-sy.map]
+ \loadmapfile[kurier-ex.map]
+\stoptypescript
+
+% Palatino (URW)
+
+\starttypescript [serif] [palatino] [qx]
+ \definefontsynonym [qx-uplr8a] [qplr] [encoding=qx]
+ \definefontsynonym [qx-uplri8a] [qplri] [encoding=qx]
+ \definefontsynonym [qx-uplb8a] [qplb] [encoding=qx]
+ \definefontsynonym [qx-uplbi8a] [qplbi] [encoding=qx]
+ \definefontsynonym [qx-uplr8a-slanted-167] [qplri] [encoding=qx]
+ \definefontsynonym [qx-uplb8a-slanted-167] [qplbi] [encoding=qx]
+ \definefontsynonym [qx-uplr8a-capitalized-800] [qplr] [encoding=qx]
+\stoptypescript
+
+\starttypescript [serif] [palatino] [texnansi,ec,8r,t5]
+ \definefontsynonym [Palatino] [\typescriptthree-uplr8a] [encoding=\typescriptthree]
+ \definefontsynonym [Palatino-Italic] [\typescriptthree-uplri8a] [encoding=\typescriptthree]
+ \definefontsynonym [Palatino-Bold] [\typescriptthree-uplb8a] [encoding=\typescriptthree]
+ \definefontsynonym [Palatino-BoldItalic] [\typescriptthree-uplbi8a] [encoding=\typescriptthree]
+
+ \definefontsynonym [Palatino-Slanted] [\typescriptthree-uplr8a-slanted-167] [encoding=\typescriptthree]
+ \definefontsynonym [Palatino-BoldSlanted] [\typescriptthree-uplb8a-slanted-167] [encoding=\typescriptthree]
+ \definefontsynonym [Palatino-Caps] [\typescriptthree-uplr8a-capitalized-800] [encoding=\typescriptthree]
+
+ \loadmapfile[\typescriptthree-urw-palatino.map]
+\stoptypescript
+
+% bonus definitions
+
+% when these fonts are in tex live ...
+%
+% \definefontsynonym [Palatino-Caps] [TeXPalladioL-SC] [encoding=\typescriptthree]
+
+\starttypescript [serif] [palatino] [ec,texnansi,8r]
+
+ \definefontsynonym[TeXPalladioL-BoldItalicOsF][\typescriptthree-fplbij8a][encoding=\typescriptthree]
+ \definefontsynonym[TeXPalladioL-BoldOsF] [\typescriptthree-fplbj8a] [encoding=\typescriptthree]
+ \definefontsynonym[TeXPalladioL-SC] [\typescriptthree-fplrc8a] [encoding=\typescriptthree]
+ \definefontsynonym[TeXPalladioL-ItalicOsF] [\typescriptthree-fplrij8a][encoding=\typescriptthree]
+
+ \loadmapfile[\typescriptthree-urw-palatino.map]
+\stoptypescript
+
+% Palatino Math (PX)
+
+\starttypescript [math] [palatino] [all]
+ \definefontsynonym [Palatino-Roman-Upright] [pxr]
+ \definefontsynonym [Palatino-Roman-Italic] [pxi]
+ \definefontsynonym [Palatino-Roman-Slanted] [pxsl]
+ \definefontsynonym [Palatino-Roman-Caps] [pxsc]
+ \definefontsynonym [Palatino-Companion-Upright] [pcxr]
+ \definefontsynonym [Palatino-Companion-Italic] [pcxi]
+ \definefontsynonym [Palatino-Companion-Slanted] [pcxsl]
+ \definefontsynonym [Palatino-Math-Italic] [pxmi]
+ \definefontsynonym [Palatino-Math-Symbols] [pxsy]
+ \definefontsynonym [Palatino-Math-Extension] [pxex]
+ \definefontsynonym [Palatino-Math-SymbolsA] [pxsya]
+ \definefontsynonym [Palatino-Math-SymbolsB] [pxsyb]
+ \definefontsynonym [Palatino-Math-SymbolsC] [pxsyc]
+ \definefontsynonym [Palatino-Math-Italic-A] [pxmia]
+ \definefontsynonym [Palatino-Math-Extension-A] [pxexa]
+
+ \loadmapfile[original-youngryu-px.map]
+\stoptypescript
+
+% Bookman (URW)
+
+\starttypescript [serif] [bookman] [qx]
+ \definefontsynonym [qx-ubkl8a] [qbkr] [encoding=qx]
+ \definefontsynonym [qx-ubkli8a] [qbkri] [encoding=qx]
+ \definefontsynonym [qx-ubkd8a] [qbkb] [encoding=qx]
+ \definefontsynonym [qx-ubkdi8a] [qbkbi] [encoding=qx]
+ \definefontsynonym [qx-ubkl8a-slanted-167] [qbkri] [encoding=qx]
+ \definefontsynonym [qx-ubkd8a-slanted-167] [qbkbi] [encoding=qx]
+ \definefontsynonym [qx-ubkl8a-capitalized-800] [qbkr] [encoding=qx]
+\stoptypescript
+
+\starttypescript [serif] [bookman] [ec,texnansi,8r,t5]
+ \definefontsynonym [Bookman-Light] [\typescriptthree-ubkl8a] [encoding=\typescriptthree]
+ \definefontsynonym [Bookman-LightItalic] [\typescriptthree-ubkli8a] [encoding=\typescriptthree]
+ \definefontsynonym [Bookman-DemiBold] [\typescriptthree-ubkd8a] [encoding=\typescriptthree]
+ \definefontsynonym [Bookman-DemiBoldItalic] [\typescriptthree-ubkdi8a] [encoding=\typescriptthree]
+ \definefontsynonym [Bookman-LightSlanted] [\typescriptthree-ubkl8a-slanted-167] [encoding=\typescriptthree]
+ \definefontsynonym [Bookman-DemiBoldSlanted] [\typescriptthree-ubkd8a-slanted-167] [encoding=\typescriptthree]
+ \definefontsynonym [Bookman-Light-Caps] [\typescriptthree-ubkl8a-capitalized-800] [encoding=\typescriptthree]
+
+ \loadmapfile[\typescriptthree-urw-bookman.map]
+\stoptypescript
+
+% Chancery (URW)
+
+\starttypescript [calligraphy] [chancery] [qx]
+ \definefontsynonym [qx-uzcmi8a] [qzcmi] [encoding=qx]
+\stoptypescript
+
+\starttypescript [calligraphy] [chancery] [ec,texnansi,8r]
+ \definefontsynonym [Chancery] [\typescriptthree-uzcmi8a] [encoding=\typescriptthree]
+ \loadmapfile[\typescriptthree-urw-zapfchan.map]
+\stoptypescript
+
+% New Century Schoolbook (URW)
+
+\starttypescript [serif] [schoolbook] [ec,texnansi,8r,t5]
+ \definefontsynonym [Schoolbook-Roman] [\typescriptthree-uncr8a] [encoding=\typescriptthree]
+ \definefontsynonym [Schoolbook-Italic] [\typescriptthree-uncri8a] [encoding=\typescriptthree]
+ \definefontsynonym [Schoolbook-Bold] [\typescriptthree-uncb8a] [encoding=\typescriptthree]
+ \definefontsynonym [Schoolbook-BoldItalic] [\typescriptthree-uncbi8a] [encoding=\typescriptthree]
+ \definefontsynonym [Schoolbook-RomanSlanted] [\typescriptthree-uncr8a-slanted-167] [encoding=\typescriptthree]
+ \definefontsynonym [Schoolbook-BoldSlanted] [\typescriptthree-uncb8a-slanted-167] [encoding=\typescriptthree]
+ \definefontsynonym [Schoolbook-Roman-Caps] [\typescriptthree-uncr8a-capitalized-800] [encoding=\typescriptthree]
+
+ \loadmapfile[\typescriptthree-urw-ncntrsbk.map]
+\stoptypescript
+
+% Utopia (Adobe)
+
+\starttypescript [serif] [utopia] [ec,texnansi]
+ \definefontsynonym [Utopia-Regular] [\typescriptthree-putr8a] [encoding=\typescriptthree]
+ \definefontsynonym [Utopia-Italic] [\typescriptthree-putri8a] [encoding=\typescriptthree]
+ \definefontsynonym [Utopia-Bold] [\typescriptthree-putb8a] [encoding=\typescriptthree]
+ \definefontsynonym [Utopia-BoldItalic] [\typescriptthree-putbi8a] [encoding=\typescriptthree]
+ \definefontsynonym [Utopia-Slanted] [\typescriptthree-putr8a-slanted-167] [encoding=\typescriptthree]
+ \definefontsynonym [Utopia-BoldSlanted] [\typescriptthree-putb8a-slanted-167] [encoding=\typescriptthree]
+ \definefontsynonym [Utopia-Regular-Caps][\typescriptthree-putr8a-capitalized-800] [encoding=\typescriptthree]
+
+ \loadmapfile[\typescriptthree-adobe-utopia.map]
+\stoptypescript
+
+% Charter (Bitstream)
+
+\starttypescript [serif] [charter] [ec,texnansi,8r]
+ \definefontsynonym [Charter-Roman] [\typescriptthree-bchr8a] [encoding=\typescriptthree]
+ \definefontsynonym [Charter-Italic] [\typescriptthree-bchri8a] [encoding=\typescriptthree]
+ \definefontsynonym [Charter-Bold] [\typescriptthree-bchb8a] [encoding=\typescriptthree]
+ \definefontsynonym [Charter-BoldItalic] [\typescriptthree-bchbi8a] [encoding=\typescriptthree]
+ \definefontsynonym [Charter-Slanted] [\typescriptthree-bchr8a-slanted-167] [encoding=\typescriptthree]
+ \definefontsynonym [Charter-BoldSlanted][\typescriptthree-bchb8a-slanted-167] [encoding=\typescriptthree]
+ \definefontsynonym [Charter-Roman-Caps] [\typescriptthree-bchr8a-capitalized-800] [encoding=\typescriptthree]
+
+ \loadmapfile[\typescriptthree-bitstrea-charter.map]
+\stoptypescript
+
+% Whatever else we need:
+
+\starttypescript
+ \definefontsynonym [ZapfDingbats] [uzdr]
+ \definefontsynonym [RalfSmithFormalScript] [rsfs10]
+ \definefontsynonym [MartinVogel] [fmvr8x]
+\stoptypescript
+
+\stoptypescriptcollection
+
+\endinput
diff --git a/Master/texmf-dist/tex/context/base/type-otf.tex b/Master/texmf-dist/tex/context/base/type-otf.tex
new file mode 100644
index 00000000000..0449be8784d
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/type-otf.tex
@@ -0,0 +1,767 @@
+%D \module
+%D [ file=type-otf,
+%D version=2007.07.30,
+%D title=\CONTEXT\ Typescript Macros,
+%D subtitle=Opentype Definitions,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D Actually, \LUATEX\ does not need all these definitions since it can
+%D consult its database. However, here we use the names that we used
+%D in good old \TEX, and these may differ a bit. Here we also see
+%D some oldstyle definitions which normally are done with features.
+
+\starttypescriptcollection[examples]
+
+\starttypescript [fallback]
+ \definetypeface [] [rm] [serif] [modern] [computer-modern]
+ \definetypeface [] [ss] [sans] [modern] [computer-modern]
+ \definetypeface [] [tt] [mono] [modern] [computer-modern]
+ \definetypeface [] [mm] [math] [modern] [computer-modern]
+ \quittypescriptscanning
+\stoptypescript
+
+\starttypescript [modern]
+ \definetypeface [modern] [rm] [serif] [modern] [computer-modern]
+ \definetypeface [modern] [ss] [sans] [modern] [computer-modern]
+ \definetypeface [modern] [tt] [mono] [modern] [computer-modern]
+ \definetypeface [modern] [mm] [math] [modern] [computer-modern]
+ \quittypescriptscanning
+\stoptypescript
+
+\starttypescript [modern-base]
+ \definetypeface [modern] [rm] [serif] [modern] [default]
+ \definetypeface [modern] [ss] [sans] [modern] [default]
+ \definetypeface [modern] [tt] [mono] [modern] [default]
+ \definetypeface [modern] [mm] [math] [modern] [default]
+ \quittypescriptscanning
+\stoptypescript
+
+\starttypescript [postscript]
+ \definetypeface [postscript] [rm] [serif] [times] [default]
+ \definetypeface [postscript] [ss] [sans] [helvetica] [default] [rscale=.9]
+ \definetypeface [postscript] [tt] [mono] [courier] [default] [rscale=1.1]
+ \definetypeface [postscript] [mm] [math] [times] [default]
+ \quittypescriptscanning
+\stoptypescript
+
+\starttypescript [times]
+ \definetypeface [times] [rm] [serif] [times] [default]
+ \definetypeface [times] [ss] [sans] [helvetica] [default] [rscale=0.9]
+ \definetypeface [times] [tt] [mono] [modern] [default] [rscale=1.05]
+ \definetypeface [times] [mm] [math] [times] [default]
+ \quittypescriptscanning
+\stoptypescript
+
+\starttypescript [palatino]
+ \definetypeface [palatino] [rm] [serif] [palatino] [default]
+ \definetypeface [palatino] [tt] [mono] [modern] [default] [rscale=1.075]
+ \definetypeface [palatino] [mm] [math] [palatino] [default]
+ \quittypescriptscanning
+\stoptypescript
+
+\starttypescript [modernvariable]
+ \definetypeface [modernvariable] [rm] [serif] [simple] [default]
+ \definetypeface [modernvariable] [ss] [sans] [modern] [default]
+ \definetypeface [modernvariable] [tt] [mono] [modern] [default]
+ \definetypeface [modernvariable] [mm] [math] [modern] [default]
+ \quittypescriptscanning
+\stoptypescript
+
+\starttypescript [antykwa-torunska]
+ \definetypeface[antykwa][rm][serif][antykwa-torunska] [default]
+ \definetypeface[antykwa][ss][sans] [modern] [default] [rscale=1.05]
+ \definetypeface[antykwa][tt][mono] [modern] [default] [rscale=1.1]
+ \definetypeface[antykwa][mm][math] [antykwa-torunska] [default]
+ \quittypescriptscanning
+\stoptypescript
+
+\starttypescript [iwona,iwona-light,iwona-heavy,iwona-medium]
+ \definetypeface[\typescriptone][ss][sans] [\typescriptone] [default]
+ \definetypeface[\typescriptone][rm][serif][modern] [default]
+ \definetypeface[\typescriptone][tt][mono] [modern] [default]
+ \definetypeface[\typescriptone][mm][math] [\typescriptone] [default][text=ss]
+ \quittypescriptscanning
+\stoptypescript
+
+\stoptypescriptcollection
+
+% if a fontname equals the filename, then use
+%
+% \setupfontsynonym [LMRoman10-DemiOblique] [features=default] % file is lowercase, so fails
+% \definefontsynonym [LMRoman10-DemiOblique] [name:LMRoman10-DemiOblique] [features=default]
+% \definefontsynonym [LMRoman10-DemiOblique] [lmroman10-demioblique] [features=default]
+
+\starttypescriptcollection[opentype]
+
+%D The names have changed (again) ... but I will not change the symbolic names
+%D any more. Filename changes will be catched in luatex (fallbacks) but not in
+%D other tex's.
+
+\starttypescript [serif] [modern,latin-modern]
+ \definefontsynonym [LMRoman5-Regular] [file:lmroman5-regular] [features=default]
+ \definefontsynonym [LMRoman6-Regular] [file:lmroman6-regular] [features=default]
+ \definefontsynonym [LMRoman7-Regular] [file:lmroman7-regular] [features=default]
+ \definefontsynonym [LMRoman8-Regular] [file:lmroman8-regular] [features=default]
+ \definefontsynonym [LMRoman9-Regular] [file:lmroman9-regular] [features=default]
+ \definefontsynonym [LMRoman10-Regular] [file:lmroman10-regular] [features=default]
+ \definefontsynonym [LMRoman12-Regular] [file:lmroman12-regular] [features=default]
+ \definefontsynonym [LMRoman17-Regular] [file:lmroman17-regular] [features=default]
+ \definefontsynonym [LMRoman5-Bold] [file:lmroman5-bold] [features=default]
+ \definefontsynonym [LMRoman6-Bold] [file:lmroman6-bold] [features=default]
+ \definefontsynonym [LMRoman7-Bold] [file:lmroman7-bold] [features=default]
+ \definefontsynonym [LMRoman8-Bold] [file:lmroman8-bold] [features=default]
+ \definefontsynonym [LMRoman9-Bold] [file:lmroman9-bold] [features=default]
+ \definefontsynonym [LMRoman10-Bold] [file:lmroman10-bold] [features=default]
+ \definefontsynonym [LMRoman12-Bold] [file:lmroman12-bold] [features=default]
+ \definefontsynonym [LMRoman7-Italic] [file:lmroman7-italic] [features=default]
+ \definefontsynonym [LMRoman8-Italic] [file:lmroman8-italic] [features=default]
+ \definefontsynonym [LMRoman9-Italic] [file:lmroman9-italic] [features=default]
+ \definefontsynonym [LMRoman10-Italic] [file:lmroman10-italic] [features=default]
+ \definefontsynonym [LMRoman12-Italic] [file:lmroman12-italic] [features=default]
+ \definefontsynonym [LMRoman10-BoldItalic] [file:lmroman10-bolditalic] [features=default]
+ \definefontsynonym [LMRoman8-Oblique] [file:lmromanslant8-regular] [features=default]
+ \definefontsynonym [LMRoman9-Oblique] [file:lmromanslant9-regular] [features=default]
+ \definefontsynonym [LMRoman10-Oblique] [file:lmromanslant10-regular][features=default]
+ \definefontsynonym [LMRoman12-Oblique] [file:lmromanslant12-regular][features=default]
+ \definefontsynonym [LMRoman17-Oblique] [file:lmromanslant17-regular][features=default]
+ \definefontsynonym [LMRoman10-BoldOblique] [file:lmromanslant10-bold] [features=default]
+ \definefontsynonym [LMRoman10-Demi] [file:lmromandemi10-regular] [features=default]
+ \definefontsynonym [LMRoman10-DemiOblique] [file:lmromandemi10-oblique] [features=default]
+ \definefontsynonym [LMRoman10-CapsRegular] [file:lmromancaps10-regular] [features=default] % features=smallcaps?
+ \definefontsynonym [LMRoman10-CapsOblique] [file:lmromancaps10-oblique] [features=default]
+
+ \definefontsynonym [LMRoman10-Dunhill] [file:lmromandunh10-regular] [features=default]
+ \definefontsynonym [LMRoman10-DunhillOblique] [file:lmromandunh10-oblique] [features=default]
+ \definefontsynonym [LMRoman10-Unslanted] [file:lmromanunsl10-regular] [features=default]
+\stoptypescript
+
+\starttypescript [sans] [modern,latin-modern]
+ \definefontsynonym [LMSans8-Regular] [file:lmsans8-regular] [features=default]
+ \definefontsynonym [LMSans9-Regular] [file:lmsans9-regular] [features=default]
+ \definefontsynonym [LMSans10-Regular] [file:lmsans10-regular] [features=default]
+ \definefontsynonym [LMSans12-Regular] [file:lmsans12-regular] [features=default]
+ \definefontsynonym [LMSans17-Regular] [file:lmsans17-regular] [features=default]
+ \definefontsynonym [LMSans10-Bold] [file:lmsans10-bold] [features=default]
+ \definefontsynonym [LMSans8-Oblique] [file:lmsans8-oblique] [features=default]
+ \definefontsynonym [LMSans9-Oblique] [file:lmsans9-oblique] [features=default]
+ \definefontsynonym [LMSans10-Oblique] [file:lmsans10-oblique] [features=default]
+ \definefontsynonym [LMSans12-Oblique] [file:lmsans12-oblique] [features=default]
+ \definefontsynonym [LMSans17-Oblique] [file:lmsans17-oblique] [features=default]
+ \definefontsynonym [LMSans10-BoldOblique] [file:lmsans10-boldoblique] [features=default]
+
+ \definefontsynonym [LMSans10-DemiCondensed] [file:lmsansdemicond10-regular] [features=default]
+ \definefontsynonym [LMSans10-DemiCondensedOblique] [file:lmsansdemicond10-oblique] [features=default]
+
+ \definefontsynonym [LMSansQuotation8-Regular] [file:lmsansquot8-regular] [features=default]
+ \definefontsynonym [LMSansQuotation8-Bold] [file:lmsansquot8-bold] [features=default]
+ \definefontsynonym [LMSansQuotation8-Oblique] [file:lmsansquot8-oblique] [features=default]
+ \definefontsynonym [LMSansQuotation8-BoldOblique] [file:lmsansquot8-boldoblique] [features=default]
+\stoptypescript
+
+\starttypescript [mono] [modern,latin-modern,modern-vari,latin-modern-vari,modern-cond,latin-modern-cond]
+ \definefontsynonym [LMTypewriter8-Regular] [file:lmmono8-regular]
+ \definefontsynonym [LMTypewriter9-Regular] [file:lmmono9-regular]
+ \definefontsynonym [LMTypewriter10-Regular] [file:lmmono10-regular]
+ \definefontsynonym [LMTypewriter12-Regular] [file:lmmono12-regular]
+ \definefontsynonym [LMTypewriter10-Italic] [file:lmmono10-italic]
+ \definefontsynonym [LMTypewriter10-Oblique] [file:lmmonoslant10-regular]
+ \definefontsynonym [LMTypewriter10-CapsRegular] [file:lmmonocaps10-regular] % features=smallcaps?
+ \definefontsynonym [LMTypewriter10-CapsOblique] [file:lmmonocaps10-oblique]
+
+ \definefontsynonym [LMTypewriter10-Light] [file:lmmonolt10-regular]
+ \definefontsynonym [LMTypewriter10-LightOblique] [file:lmmonolt10-oblique]
+ \definefontsynonym [LMTypewriter10-LightCondensed] [file:lmmonoltcond10-regular]
+ \definefontsynonym [LMTypewriter10-LightCondensedOblique] [file:lmmonoltcond10-oblique]
+
+ \definefontsynonym [LMTypewriter10-Dark] [file:lmmonolt10-bold]
+ \definefontsynonym [LMTypewriter10-DarkOblique] [file:lmmonolt10-boldoblique]
+
+ \definefontsynonym [LMTypewriterVarWd10-Regular] [file:lmmonoproplt10-regular] [features=default]
+ \definefontsynonym [LMTypewriterVarWd10-Oblique] [file:lmmonoproplt10-oblique] [features=default]
+ \definefontsynonym [LMTypewriterVarWd10-Light] [file:lmmonoprop10-regular] [features=default]
+ \definefontsynonym [LMTypewriterVarWd10-LightOblique] [file:lmmonoprop10-oblique] [features=default]
+ \definefontsynonym [LMTypewriterVarWd10-Dark] [file:lmmonoproplt10-bold] [features=default]
+ \definefontsynonym [LMTypewriterVarWd10-DarkOblique] [file:lmmonoproplt10-boldoblique] [features=default]
+\stoptypescript
+
+\starttypescript [math] [modern,latin-modern]
+ \definefontsynonym [LMMathRoman5-Regular] [rm-lmr5]
+ \definefontsynonym [LMMathRoman6-Regular] [rm-lmr6]
+ \definefontsynonym [LMMathRoman7-Regular] [rm-lmr7]
+ \definefontsynonym [LMMathRoman8-Regular] [rm-lmr8]
+ \definefontsynonym [LMMathRoman9-Regular] [rm-lmr9]
+ \definefontsynonym [LMMathRoman10-Regular] [rm-lmr10]
+ \definefontsynonym [LMMathRoman12-Regular] [rm-lmr12]
+ \definefontsynonym [LMMathRoman17-Regular] [rm-lmr17]
+ \definefontsynonym [LMMathRoman5-Bold] [rm-lmbx5]
+ \definefontsynonym [LMMathRoman6-Bold] [rm-lmbx6]
+ \definefontsynonym [LMMathRoman7-Bold] [rm-lmbx7]
+ \definefontsynonym [LMMathRoman8-Bold] [rm-lmbx8]
+ \definefontsynonym [LMMathRoman9-Bold] [rm-lmbx9]
+ \definefontsynonym [LMMathRoman10-Bold] [rm-lmbx10]
+ \definefontsynonym [LMMathRoman12-Bold] [rm-lmbx12]
+ \definefontsynonym [LMMathSymbols5-BoldItalic] [lmbsy5]
+ \definefontsynonym [LMMathSymbols7-BoldItalic] [lmbsy7]
+ \definefontsynonym [LMMathSymbols10-BoldItalic][lmbsy10]
+ \definefontsynonym [LMMathSymbols5-Italic] [lmsy5]
+ \definefontsynonym [LMMathSymbols6-Italic] [lmsy6]
+ \definefontsynonym [LMMathSymbols7-Italic] [lmsy7]
+ \definefontsynonym [LMMathSymbols8-Italic] [lmsy8]
+ \definefontsynonym [LMMathSymbols9-Italic] [lmsy9]
+ \definefontsynonym [LMMathSymbols10-Italic] [lmsy10]
+ \definefontsynonym [LMMathExtension10-Regular] [lmex10]
+ \definefontsynonym [LMMathItalic5-Italic] [lmmi5]
+ \definefontsynonym [LMMathItalic6-Italic] [lmmi6]
+ \definefontsynonym [LMMathItalic7-Italic] [lmmi7]
+ \definefontsynonym [LMMathItalic8-Italic] [lmmi8]
+ \definefontsynonym [LMMathItalic9-Italic] [lmmi9]
+ \definefontsynonym [LMMathItalic10-Italic] [lmmi10]
+ \definefontsynonym [LMMathItalic12-Italic] [lmmi12]
+ \definefontsynonym [LMMathItalic5-BoldItalic] [lmmib5]
+ \definefontsynonym [LMMathItalic7-BoldItalic] [lmmib7]
+ \definefontsynonym [LMMathItalic10-BoldItalic] [lmmib10]
+
+ \loadmapfile[lm-math.map]
+ \loadmapfile[lm-rm.map]
+\stoptypescript
+
+\starttypescript [math] [modern,computer-modern,latin-modern]
+ % watch the space, it prevents remapping
+ \definefontsynonym [ComputerModernMath-Roman] [rm-lmr10]
+ \definefontsynonym [ComputerModernMath-Extension] [lmex10]
+ \definefontsynonym [ComputerModernMath-Italic] [lmmi10]
+ \definefontsynonym [ComputerModernMath-Symbol] [lmsy10]
+\stoptypescript
+
+\starttypescript [boldmath,bfmath] [modern,computer-modern,latin-modern]
+ % watch the space, it prevents remapping
+ \definefontsynonym [ComputerModernMath-Roman-Bold] [rm-lmb10]
+ \definefontsynonym [ComputerModernMath-Extension] [lmex10]
+ \definefontsynonym [ComputerModernMath-Italic-Bold] [lmmib10]
+ \definefontsynonym [ComputerModernMath-Symbol-Bold] [lmbsy10]
+\stoptypescript
+
+% Computer Concrete (AMS)
+
+\starttypescript [serif] [concrete]
+ \definefontsynonym [ComputerConcrete] [ccr10]
+ \definefontsynonym [ComputerConcrete-Italic] [ccti10]
+ \definefontsynonym [ComputerConcrete-Slanted] [ccsl10]
+ \definefontsynonym [ComputerConcrete-Bold] [ComputerConcrete]
+ \definefontsynonym [ComputerConcrete-BoldItalic] [ComputerConcrete-Italic]
+ \definefontsynonym [ComputerConcrete-BoldSlanted] [ComputerConcrete-Slanted]
+ \definefontsynonym [ComputerConcrete-Caps] [cccsc10]
+\stoptypescript
+
+% Euler (AMS)
+
+\starttypescript [math] [euler]
+ \definefontsynonym [Euler-Roman] [zeurm10]
+ \definefontsynonym [Euler-Extension] [zeuex10]
+ \definefontsynonym [Euler-Symbol] [zeusm10]
+ \definefontsynonym [Euler-Fraktur] [eufm10]
+
+ \loadmapfile[original-ams-euler.map]
+\stoptypescript
+
+\starttypescript [boldmath,bfmath] [euler]
+ \definefontsynonym [Euler-Roman-Bold] [zeurb10]
+ \definefontsynonym [Euler-Extension] [zeuex10]
+ \definefontsynonym [Euler-Symbol-Bold] [zeusb10]
+ \definefontsynonym [Euler-Fraktur-Bold] [eufb10]
+
+ \loadmapfile[original-ams-euler.map]
+\stoptypescript
+
+% AMS (AMS)
+
+\starttypescript [math] [modern,computer-modern,latin-modern,ams]
+ \definefontsynonym [AMS-SymbolA] [msam10]
+ \definefontsynonym [AMS-SymbolB] [msbm10]
+\stoptypescript
+
+% TeXGyre
+
+\definetypescriptprefix [n:pagella] [TeXGyrePagella] \definetypescriptprefix [f:pagella] [pagella]
+\definetypescriptprefix [n:termes] [TeXGyreTermes] \definetypescriptprefix [f:termes] [termes]
+\definetypescriptprefix [n:heros] [TeXGyreHeros] \definetypescriptprefix [f:heros] [heros]
+\definetypescriptprefix [n:bonum] [TeXGyreBonum] \definetypescriptprefix [f:bonum] [bonum]
+\definetypescriptprefix [n:schola] [TeXGyreSchola] \definetypescriptprefix [f:schola] [schola]
+\definetypescriptprefix [n:adventor][TeXGyreAdventor] \definetypescriptprefix [f:adventor][adventor]
+\definetypescriptprefix [n:cursor] [TeXGyreCursor] \definetypescriptprefix [f:cursor] [cursor]
+\definetypescriptprefix [n:chorus] [TeXGyreChorus] \definetypescriptprefix [f:chorus] [chorus] % not the full set
+
+\starttypescript [serif] [adventor,bonum,cursor,heros,pagella,schola,termes]
+ \definefontsynonym [\typescriptprefix{n:\typescripttwo}-Regular] [file:texgyre\typescriptprefix{f:\typescripttwo}-regular] [features=default]
+ \definefontsynonym [\typescriptprefix{n:\typescripttwo}-Italic] [file:texgyre\typescriptprefix{f:\typescripttwo}-italic] [features=default]
+ \definefontsynonym [\typescriptprefix{n:\typescripttwo}-Bold] [file:texgyre\typescriptprefix{f:\typescripttwo}-bold] [features=default]
+ \definefontsynonym [\typescriptprefix{n:\typescripttwo}-BoldItalic] [file:texgyre\typescriptprefix{f:\typescripttwo}-bolditalic] [features=default]
+ \definefontsynonym [\typescriptprefix{n:\typescripttwo}-Caps] [file:texgyre\typescriptprefix{f:\typescripttwo}-regular] [features=oldstyle]
+ \definefontsynonym [\typescriptprefix{n:\typescripttwo}-ItalicCaps] [file:texgyre\typescriptprefix{f:\typescripttwo}-italic] [features=oldstyle]
+ \definefontsynonym [\typescriptprefix{n:\typescripttwo}-BoldCaps] [file:texgyre\typescriptprefix{f:\typescripttwo}-bold] [features=oldstyle]
+ \definefontsynonym [\typescriptprefix{n:\typescripttwo}-BoldItalicCaps] [file:texgyre\typescriptprefix{f:\typescripttwo}-bolditalic] [features=oldstyle]
+ \definefontsynonym [\typescriptprefix{n:\typescripttwo}-Slanted] [\typescriptprefix{n:\typescripttwo}-Italic] [features=default]
+ \definefontsynonym [\typescriptprefix{n:\typescripttwo}-BoldSlanted] [\typescriptprefix{n:\typescripttwo}-BoldItalic] [features=default]
+\stoptypescript
+
+\starttypescript [serif] [pagella,termes,bonum,schola,chorus] [name]
+ \definefontsynonym [Serif] [\typescriptprefix{n:\typescripttwo}-Regular] [features=default]
+ \definefontsynonym [SerifItalic] [\typescriptprefix{n:\typescripttwo}-Italic] [features=default]
+ \definefontsynonym [SerifBold] [\typescriptprefix{n:\typescripttwo}-Bold] [features=default]
+ \definefontsynonym [SerifBoldItalic] [\typescriptprefix{n:\typescripttwo}-BoldItalic] [features=default]
+ \definefontsynonym [SerifCaps] [\typescriptprefix{n:\typescripttwo}-Caps] [features=smallcaps]
+ \definefontsynonym [SerifSlanted] [\typescriptprefix{n:\typescripttwo}-Slanted] [features=default]
+ \definefontsynonym [SerifBoldSlanted] [\typescriptprefix{n:\typescripttwo}-BoldSlanted] [features=default]
+
+ \definefontvariant [Serif][osf][Caps]
+ \definefontvariant [Serif][sc] [Caps]
+
+ \definefontsynonym [SerifRegular] [\typescriptprefix{n:\typescripttwo}-Regular] [features=default]
+ \definefontsynonym [SerifRegularCaps] [\typescriptprefix{n:\typescripttwo}-Caps] [features=smallcaps]
+ \definefontsynonym [SerifItalicCaps] [\typescriptprefix{n:\typescripttwo}-ItalicCaps] [features=smallcaps]
+ \definefontsynonym [SerifBoldCaps] [\typescriptprefix{n:\typescripttwo}-BoldCaps] [features=smallcaps]
+ \definefontsynonym [SerifBoldItalicCaps] [\typescriptprefix{n:\typescripttwo}-BoldItalicCaps] [features=smallcaps]
+ \definefontsynonym [SerifCapsCaps] [\typescriptprefix{n:\typescripttwo}-Caps] [features=smallcaps]
+ \definefontsynonym [SerifSlantedCaps] [\typescriptprefix{n:\typescripttwo}-ItalicCaps] [features=smallcaps]
+ \definefontsynonym [SerifBoldSlantedCaps] [\typescriptprefix{n:\typescripttwo}-BoldItalicCaps] [features=smallcaps]
+\stoptypescript
+
+\starttypescript [sans] [heros,adventor] [name]
+ \definefontsynonym [Sans] [\typescriptprefix{n:\typescripttwo}-Regular] [features=default]
+ \definefontsynonym [SansItalic] [\typescriptprefix{n:\typescripttwo}-Italic] [features=default]
+ \definefontsynonym [SansBold] [\typescriptprefix{n:\typescripttwo}-Bold] [features=default]
+ \definefontsynonym [SansBoldItalic] [\typescriptprefix{n:\typescripttwo}-BoldItalic] [features=default]
+ \definefontsynonym [SansCaps] [\typescriptprefix{n:\typescripttwo}-Caps] [features=smallcaps]
+ \definefontsynonym [SansSlanted] [\typescriptprefix{n:\typescripttwo}-Slanted] [features=default]
+ \definefontsynonym [SansBoldSlanted] [\typescriptprefix{n:\typescripttwo}-BoldSlanted] [features=default]
+
+ \definefontvariant [Sans][osf][Caps]
+ \definefontvariant [Sans][sc] [Caps]
+
+ \definefontsynonym [SansRegular] [\typescriptprefix{n:\typescripttwo}-Regular] [features=default]
+ \definefontsynonym [SansRegularCaps] [\typescriptprefix{n:\typescripttwo}-Caps] [features=smallcaps]
+ \definefontsynonym [SansItalicCaps] [\typescriptprefix{n:\typescripttwo}-ItalicCaps] [features=smallcaps]
+ \definefontsynonym [SansBoldCaps] [\typescriptprefix{n:\typescripttwo}-BoldCaps] [features=smallcaps]
+ \definefontsynonym [SansBoldItalicCaps] [\typescriptprefix{n:\typescripttwo}-BoldItalicCaps] [features=smallcaps]
+ \definefontsynonym [SansCapsCaps] [\typescriptprefix{n:\typescripttwo}-Caps] [features=smallcaps]
+ \definefontsynonym [SansSlantedCaps] [\typescriptprefix{n:\typescripttwo}-ItalicCaps] [features=smallcaps]
+ \definefontsynonym [SansBoldSlantedCaps] [\typescriptprefix{n:\typescripttwo}-BoldItalicCaps] [features=smallcaps]
+\stoptypescript
+
+\starttypescript [sans] [cursor] [name]
+ \definefontsynonym [Mono] [\typescriptprefix{n:\typescripttwo}-Regular]
+ \definefontsynonym [MonoItalic] [\typescriptprefix{n:\typescripttwo}-Italic]
+ \definefontsynonym [MonoBold] [\typescriptprefix{n:\typescripttwo}-Bold]
+ \definefontsynonym [MonoBoldItalic] [\typescriptprefix{n:\typescripttwo}-BoldItalic]
+ \definefontsynonym [MonoSlanted] [MonoItalic]
+ \definefontsynonym [MonoBoldSlanted] [MonoBoldItalic]
+\stoptypescript
+
+%D Here we overload the older (URW) fonts.
+
+% TeXGyrePagella
+%
+% qplr TeXGyrePagella-Regular
+% qplri TeXGyrePagella-Italic
+% qplb TeXGyrePagella-Bold
+% qplbi TeXGyrePagella-BoldItalic
+
+\starttypescript [serif] [palatino,pagella]
+ \definefontsynonym [Palatino] [texgyrepagella-regular] [features=default]
+ \definefontsynonym [Palatino-Italic] [texgyrepagella-italic] [features=default]
+ \definefontsynonym [Palatino-Bold] [texgyrepagella-bold] [features=default]
+ \definefontsynonym [Palatino-BoldItalic] [texgyrepagella-bolditalic] [features=default]
+ \definefontsynonym [Palatino-Caps] [texgyrepagella-regular] [features=smallcaps]
+ \definefontsynonym [Palatino-Slanted] [Palatino-Italic]
+ \definefontsynonym [Palatino-BoldSlanted] [Palatino-BoldItalic]
+\stoptypescript
+
+% TeXGyreTermes
+%
+% qtmr TeXGyreTermes-Regular
+% qtmri TeXGyreTermes-Italic
+% qtmb TeXGyreTermes-Bold
+% qtmbi TeXGyreTermes-BoldItalic
+
+\starttypescript [serif] [times]
+ \definefontsynonym [Times-Roman] [texgyretermes-regular] [features=default]
+ \definefontsynonym [Times-Italic] [texgyretermes-italic] [features=default]
+ \definefontsynonym [Times-Bold] [texgyretermes-bold] [features=default]
+ \definefontsynonym [Times-BoldItalic] [texgyretermes-bolditalic] [features=default]
+ \definefontsynonym [Times-Caps] [texgyretermes-regular] [features=smallcaps]
+ \definefontsynonym [Times-Slanted] [Times-Italic]
+ \definefontsynonym [Times-BoldSlanted] [Times-BoldItalic]
+\stoptypescript
+
+% TeXGyreHeros
+%
+% qtmr TeXGyreHeros-Regular
+% qtmri TeXGyreHeros-Italic
+% qtmb TeXGyreHeros-Bold
+% qtmbi TeXGyreHeros-BoldItalic
+
+\starttypescript [sans] [helvetica]
+ \definefontsynonym [Helvetica] [texgyreheros-regular] [features=default]
+ \definefontsynonym [Helvetica-Oblique] [texgyreheros-italic] [features=default]
+ \definefontsynonym [Helvetica-Bold] [texgyreheros-bold] [features=default]
+ \definefontsynonym [Helvetica-BoldOblique] [texgyreheros-bolditalic] [features=default]
+ \definefontsynonym [Helvetica-Caps] [texgyreheros-regular] [features=smallcaps]
+\stoptypescript
+
+% TeXGyreBonum
+%
+% qtmr TeXGyreBonum-Regular
+% qtmri TeXGyreBonum-Italic
+% qtmb TeXGyreBonum-Bold
+% qtmbi TeXGyreBonum-BoldItalic
+
+\starttypescript [serif] [bookman]
+ \definefontsynonym [Bookman-Light] [texgyrebonum-regular] [features=default]
+ \definefontsynonym [Bookman-LightItalic] [texgyrebonum-italic] [features=default]
+ \definefontsynonym [Bookman-DemiBold] [texgyrebonum-bold] [features=default]
+ \definefontsynonym [Bookman-DemiBoldItalic] [texgyrebonum-bolditalic] [features=default]
+ \definefontsynonym [Bookman-Light-Caps] [texgyrebonum-regular] [features=smallcaps]
+ \definefontsynonym [Bookman-LightSlanted] [Bookman-LightItalic] [features=default]
+ \definefontsynonym [Bookman-DemiBoldSlanted] [Bookman-DemiBoldItalic] [features=default]
+\stoptypescript
+
+% TeXGyreScola
+%
+% qcsr TeXGyreSchola-Regular
+% qcsri TeXGyreSchola-Italic
+% qcsb TeXGyreSchola-Bold
+% qcsbi TeXGyreSchola-BoldItalic
+
+\starttypescript [serif] [schoolbook]
+ \definefontsynonym [Schoolbook-Roman] [texgyreschola-regular] [features=default]
+ \definefontsynonym [Schoolbook-Italic] [texgyreschola-italic] [features=default]
+ \definefontsynonym [Schoolbook-Bold] [texgyreschola-bold] [features=default]
+ \definefontsynonym [Schoolbook-BoldItalic] [texgyreschola-bolditalic] [features=default]
+ \definefontsynonym [Schoolbook-Roman-Caps] [texgyreschola-regular] [features=smallcaps]
+ \definefontsynonym [Schoolbook-Slanted] [Schoolbook-Italic] [features=default]
+ \definefontsynonym [Schoolbook-BoldSlanted] [Schoolbook-BoldItalic] [features=default]
+\stoptypescript
+
+% TeXGyreAdventor
+%
+% qagr TeXGyreAdventor-Regular
+% qagri TeXGyreAdventor-Italic
+% qagb TeXGyreAdventor-Bold
+% qagbi TeXGyreAdventor-BoldItalic
+
+% TeXGyreCursor
+%
+% crgr TeXGyreCursor-Regular
+% crgri TeXGyreCursor-Italic
+% crgb TeXGyreCursor-Bold
+% crgbi TeXGyreCursor-BoldItalic
+
+\starttypescript [mono] [courier] [name]
+ \definefontsynonym [Courier] [texgyrecursor-regular] [features=default]
+ \definefontsynonym [Courier-Bold] [texgyrecursor-bold] [features=default]
+ \definefontsynonym [Courier-Oblique] [texgyrecursor-italic] [features=default]
+ \definefontsynonym [Courier-BoldOblique] [texgyrecursor-bolditalic] [features=default]
+ \fakecontrolspace
+\stoptypescript
+
+% TeXGyreChorus
+%
+% qzcr TeXGyreChorus-Regular
+
+\starttypescript [calligraphy] [chancery]
+ \definefontsynonym [Chancery] [texgyrechorus-mediumitalic] [features=default]
+ \definefontsynonym [texgyrechorus-regular] [texgyrechorus-mediumitalic]
+\stoptypescript
+
+% Math Times (tx)
+
+\starttypescript [math] [times] [all]
+ \definefontsynonym [Times-Roman-Upright] [txr]
+ \definefontsynonym [Times-Roman-Italic] [txi]
+ \definefontsynonym [Times-Roman-Slanted] [txsl]
+ \definefontsynonym [Times-Roman-Caps] [txsc]
+ \definefontsynonym [Times-Companion-Upright] [tcxr]
+ \definefontsynonym [Times-Companion-Italic] [tcxi]
+ \definefontsynonym [Times-Companion-Slanted] [tcxsl]
+ \definefontsynonym [Times-Math-Italic] [txmi]
+ \definefontsynonym [Times-Math-Symbols] [txsy]
+ \definefontsynonym [Times-Math-Extension] [txex]
+ \definefontsynonym [Times-Math-SymbolsA] [txsya]
+ \definefontsynonym [Times-Math-SymbolsB] [txsyb]
+ \definefontsynonym [Times-Math-SymbolsC] [txsyc]
+ \definefontsynonym [Times-Math-Italic-A] [txmia]
+ \definefontsynonym [Times-Math-Extension-A] [txexa]
+
+ \loadmapfile[original-youngryu-tx.map]
+ \usemathcollection[default]
+\stoptypescript
+
+% Palatino Math (PX)
+
+\starttypescript [math] [palatino] [all]
+ \definefontsynonym [Palatino-Roman-Upright] [pxr]
+ \definefontsynonym [Palatino-Roman-Italic] [pxi]
+ \definefontsynonym [Palatino-Roman-Slanted] [pxsl]
+ \definefontsynonym [Palatino-Roman-Caps] [pxsc]
+ \definefontsynonym [Palatino-Companion-Upright] [pcxr]
+ \definefontsynonym [Palatino-Companion-Italic] [pcxi]
+ \definefontsynonym [Palatino-Companion-Slanted] [pcxsl]
+ \definefontsynonym [Palatino-Math-Italic] [pxmi]
+ \definefontsynonym [Palatino-Math-Symbols] [pxsy]
+ \definefontsynonym [Palatino-Math-Extension] [pxex]
+ \definefontsynonym [Palatino-Math-SymbolsA] [pxsya]
+ \definefontsynonym [Palatino-Math-SymbolsB] [pxsyb]
+ \definefontsynonym [Palatino-Math-SymbolsC] [pxsyc]
+ \definefontsynonym [Palatino-Math-Italic-A] [pxmia]
+ \definefontsynonym [Palatino-Math-Extension-A] [pxexa]
+
+ \loadmapfile[original-youngryu-px.map]
+ \usemathcollection[default]
+\stoptypescript
+
+% Antykwa Torunska (GUST)
+
+\starttypescript [serif] [antykwa-torunska,antykwa-torunska-light,antykwa-torunska-cond,antykwa-torunska-lightcond]
+ \definefontsynonym [AntykwaTorunska-Regular] [file:AntykwaTorunska-Regular] [features=default]
+ \definefontsynonym [AntykwaTorunska-Italic] [file:AntykwaTorunska-Italic] [features=default]
+ \definefontsynonym [AntykwaTorunska-Bold] [file:AntykwaTorunska-Bold] [features=default]
+ \definefontsynonym [AntykwaTorunska-BoldItalic] [file:AntykwaTorunska-BoldItalic] [features=default]
+ \definefontsynonym [AntykwaTorunska-Light] [file:AntykwaTorunskaLight-Regular] [features=default]
+ \definefontsynonym [AntykwaTorunska-LightItalic] [file:AntykwaTorunskaLight-Italic] [features=default]
+ \definefontsynonym [AntykwaTorunska-Medium] [file:AntykwaTorunskaMed-Regular] [features=default]
+ \definefontsynonym [AntykwaTorunska-MedItalic] [file:AntykwaTorunskaMed-Italic] [features=default]
+ \definefontsynonym [AntykwaTorunska-CondRegular] [file:AntykwaTorunskaCond-Regular] [features=default]
+ \definefontsynonym [AntykwaTorunska-CondItalic] [file:AntykwaTorunskaCond-Italic] [features=default]
+ \definefontsynonym [AntykwaTorunska-CondBold] [file:AntykwaTorunskaCond-Bold] [features=default]
+ \definefontsynonym [AntykwaTorunska-CondBoldItalic] [file:AntykwaTorunskaCond-BoldItalic] [features=default]
+ \definefontsynonym [AntykwaTorunska-CondLight] [file:AntykwaTorunskaCondLight-Regular] [features=default]
+ \definefontsynonym [AntykwaTorunska-CondLightItalic] [file:AntykwaTorunskaCondLight-Italic] [features=default]
+ \definefontsynonym [AntykwaTorunska-CondMedium] [file:AntykwaTorunskaCondMed-Regular] [features=default]
+ \definefontsynonym [AntykwaTorunska-CondMedItalic] [file:AntykwaTorunskaCondMed-Italic] [features=default]
+
+ \definefontsynonym [AntykwaTorunska-Cap] [file:AntykwaTorunska-Regular] [features=smallcaps]
+ \definefontsynonym [AntykwaTorunska-ItalicCap] [file:AntykwaTorunska-Italic] [features=smallcaps]
+ \definefontsynonym [AntykwaTorunska-BoldCap] [file:AntykwaTorunska-Bold] [features=smallcaps]
+ \definefontsynonym [AntykwaTorunska-BoldItalicCap] [file:AntykwaTorunska-BoldItalic] [features=smallcaps]
+ \definefontsynonym [AntykwaTorunska-LightCap] [file:AntykwaTorunskaLight-Regular] [features=smallcaps]
+ \definefontsynonym [AntykwaTorunska-LightItalicCap] [file:AntykwaTorunskaLight-Italic] [features=smallcaps]
+ \definefontsynonym [AntykwaTorunska-MediumCap] [file:AntykwaTorunskaMed-Regular] [features=smallcaps]
+ \definefontsynonym [AntykwaTorunska-MedItalicCap] [file:AntykwaTorunskaMed-Italic] [features=smallcaps]
+ \definefontsynonym [AntykwaTorunska-CondCap] [file:AntykwaTorunskaCond-Regular] [features=smallcaps]
+ \definefontsynonym [AntykwaTorunska-CondItalicCap] [file:AntykwaTorunskaCond-Italic] [features=smallcaps]
+ \definefontsynonym [AntykwaTorunska-CondBoldCap] [file:AntykwaTorunskaCond-Bold] [features=smallcaps]
+ \definefontsynonym [AntykwaTorunska-CondBoldItalicCap] [file:AntykwaTorunskaCond-BoldItalic] [features=smallcaps]
+ \definefontsynonym [AntykwaTorunska-CondLightCap] [file:AntykwaTorunskaCondLight-Regular] [features=smallcaps]
+ \definefontsynonym [AntykwaTorunska-CondLightItalicCap][file:AntykwaTorunskaCondLight-Italic] [features=smallcaps]
+ \definefontsynonym [AntykwaTorunska-CondMediumCap] [file:AntykwaTorunskaCondMed-Regular] [features=smallcaps]
+ \definefontsynonym [AntykwaTorunska-CondMedItalicCap] [file:AntykwaTorunskaCondMed-Italic] [features=smallcaps]
+\stoptypescript
+
+\starttypescript [math] [antykwa-torunska] [default]
+ \definefontsynonym [AntykwaTorunska-Math-Letters-Regular] [rm-anttr]
+ \definefontsynonym [AntykwaTorunska-Math-Letters-Italic] [mi-anttri]
+ \definefontsynonym [AntykwaTorunska-Math-Symbols-Regular] [sy-anttrz]
+ \definefontsynonym [AntykwaTorunska-Math-Extension-Regular] [ex-anttr]
+\stoptypescript
+
+\starttypescript [math] [antykwa-torunska-light] [default]
+ \definefontsynonym [AntykwaTorunska-Math-Letters-Light] [rm-anttl]
+ \definefontsynonym [AntykwaTorunska-Math-Letters-LightItalic] [mi-anttli]
+ \definefontsynonym [AntykwaTorunska-Math-Symbols-Light] [sy-anttlz]
+ \definefontsynonym [AntykwaTorunska-Math-Extension-Light] [ex-anttl]
+\stoptypescript
+
+\starttypescript [math] [antykwa-torunska-cond] [default]
+ \definefontsynonym [AntykwaTorunska-Math-Letters-CondRegular] [rm-anttcr]
+ \definefontsynonym [AntykwaTorunska-Math-Letters-CondItalic] [mi-anttcri]
+ \definefontsynonym [AntykwaTorunska-Math-Symbols-CondRegular] [sy-anttcrz]
+ \definefontsynonym [AntykwaTorunska-Math-Extension-CondRegular] [ex-anttcr]
+\stoptypescript
+
+\starttypescript [math] [antykwa-torunska-lightcond] [default]
+ \definefontsynonym [AntykwaTorunska-Math-Letters-CondLight] [rm-anttcl]
+ \definefontsynonym [AntykwaTorunska-Math-Letters-CondLightItalic] [mi-anttcli]
+ \definefontsynonym [AntykwaTorunska-Math-Symbols-CondLight] [sy-anttclz]
+ \definefontsynonym [AntykwaTorunska-Math-Extension-CondLight] [ex-anttcl]
+\stoptypescript
+
+\starttypescript [math] [antykwa-torunska,antykwa-torunska-light,antykwa-torunska-cond,antykwa-torunska-lightcond]
+ \usemathcollection[default]
+ \loadmapfile[antt-rm.map]
+ \loadmapfile[antt-mi.map]
+ \loadmapfile[antt-sy.map]
+ \loadmapfile[antt-ex.map]
+\stoptypescript
+
+% Antykwa Poltawskiego (GUST)
+
+\starttypescript [serif] [antykwa-poltawskiego]
+ \definefontsynonym [AntykwaPoltawskiego-Regular] [antpr]
+ \definefontsynonym [AntykwaPoltawskiego-Bold] [antpb]
+ \definefontsynonym [AntykwaPoltawskiego-Italic] [antpri]
+ \definefontsynonym [AntykwaPoltawskiego-BoldItalic] [antpbi]
+\stoptypescript
+
+% Iwona (JMN)
+
+% maybe this will change in Iwona-Math-Letters and Iwona-Math-Letters-Italic
+
+% These names are a depressing mess. They have changed over time and are
+% still not consistent. I'd expect Bold-Regular and Bold-Italic.
+
+\starttypescript [sans] [iwona-light,iwona,iwona-medium,iwona-heavy,iwona-light-cond,iwona-cond,iwona-medium-cond,iwona-heavy-cond]
+
+ \definefontsynonym [Iwona-Regular] [file:Iwona-Regular] [features=default]
+ \definefontsynonym [Iwona-Italic] [file:Iwona-Italic] [features=default]
+ \definefontsynonym [Iwona-Bold] [file:Iwona-Bold] [features=default]
+ \definefontsynonym [Iwona-BoldItalic] [file:Iwona-BoldItalic] [features=default]
+ \definefontsynonym [Iwona-Light-Regular] [file:IwonaLight-Regular] [features=default]
+ \definefontsynonym [Iwona-Light-Italic] [file:IwonaLight-Italic] [features=default]
+ \definefontsynonym [Iwona-Medium-Regular] [file:IwonaMedium-Regular] [features=default]
+ \definefontsynonym [Iwona-Medium-Italic] [file:IwonaMedium-Italic] [features=default]
+ \definefontsynonym [Iwona-Heavy-Regular] [file:IwonaHeavy-Regular] [features=default]
+ \definefontsynonym [Iwona-Heavy-Italic] [file:IwonaHeavy-Italic] [features=default]
+
+ \definefontsynonym [Iwona-CapsRegular] [file:Iwona-Regular] [features=smallcaps]
+ \definefontsynonym [Iwona-CapsItalic] [file:Iwona-Italic] [features=smallcaps]
+ \definefontsynonym [Iwona-CapsBold] [file:Iwona-Bold] [features=smallcaps]
+ \definefontsynonym [Iwona-CapsBoldItalic] [file:Iwona-BoldItalic] [features=smallcaps]
+ \definefontsynonym [Iwona-CapsLight] [file:IwonaLight-Regular] [features=smallcaps]
+ \definefontsynonym [Iwona-CapsLight-Italic] [file:IwonaLight-Italic] [features=smallcaps]
+ \definefontsynonym [Iwona-CapsMedium] [file:IwonaMedium-Regular] [features=smallcaps]
+ \definefontsynonym [Iwona-CapsMedium-Italic] [file:IwonaMedium-Italic] [features=smallcaps]
+ \definefontsynonym [Iwona-CapsHeavy] [file:IwonaHeavy-Regular] [features=smallcaps]
+ \definefontsynonym [Iwona-CapsHeavy-Italic] [file:IwonaHeavy-Italic] [features=smallcaps]
+
+ \definefontsynonym [Iwona-CondRegular] [file:IwonaCond-Regular] [features=default]
+ \definefontsynonym [Iwona-CondItalic] [file:IwonaCond-Italic] [features=default]
+ \definefontsynonym [Iwona-CondBold] [file:IwonaCond-Bold] [features=default]
+ \definefontsynonym [Iwona-CondBoldItalic] [file:IwonaCond-BoldItalic] [features=default]
+ \definefontsynonym [Iwona-CondLight-Regular] [file:IwonaCondLight-Regular] [features=default]
+ \definefontsynonym [Iwona-CondLight-Italic] [file:IwonaCondLight-Italic] [features=default]
+ \definefontsynonym [Iwona-CondMedium-Regular] [file:IwonaCondMedium-Regular] [features=default]
+ \definefontsynonym [Iwona-CondMedium-Italic] [file:IwonaCondMedium-Italic] [features=default]
+ \definefontsynonym [Iwona-CondHeavy-Regular] [file:IwonaCondHeavy-Regular] [features=default]
+ \definefontsynonym [Iwona-CondHeavy-Italic] [file:IwonaCondHeavy-Italic] [features=default]
+
+ \definefontsynonym [Iwona-CapsCondRegular] [file:IwonaCond-Regular] [features=smallcaps]
+ \definefontsynonym [Iwona-CapsCondItalic] [file:IwonaCond-Italic] [features=smallcaps]
+ \definefontsynonym [Iwona-CapsCondBold] [file:IwonaCond-Bold] [features=smallcaps]
+ \definefontsynonym [Iwona-CapsCondBoldItalic] [file:IwonaCond-BoldItalic] [features=smallcaps]
+ \definefontsynonym [Iwona-CapsCondLight-Regular] [file:IwonaCondLight-Regular] [features=smallcaps]
+ \definefontsynonym [Iwona-CapsCondLight-Italic] [file:IwonaCondLight-Italic] [features=smallcaps]
+ \definefontsynonym [Iwona-CapsCondMedium-Regular][file:IwonaCondMedium-Regular] [features=smallcaps]
+ \definefontsynonym [Iwona-CapsCondMedium-Italic] [file:IwonaCondMedium-Italic] [features=smallcaps]
+ \definefontsynonym [Iwona-CapsCondHeavy-Regular] [file:IwonaCondHeavy-Regular] [features=smallcaps]
+ \definefontsynonym [Iwona-CapsCondHeavy-Italic] [file:IwonaCondHeavy-Italic] [features=smallcaps]
+
+\stoptypescript
+
+\starttypescript [math] [iwona] [default]
+ \definefontsynonym [Iwona-Math-Letters-Regular] [rm-iwonar]
+ \definefontsynonym [Iwona-Math-Letters-Italic] [mi-iwonari]
+ \definefontsynonym [Iwona-Math-Symbols-Regular] [sy-iwonarz]
+ \definefontsynonym [Iwona-Math-Extension-Regular] [ex-iwonar]
+\stoptypescript
+
+\starttypescript [math] [iwona-light] [default]
+ \definefontsynonym [Iwona-Math-Letters-Light-Regular] [rm-iwonal]
+ \definefontsynonym [Iwona-Math-Letters-Light-Italic] [mi-iwonali]
+ \definefontsynonym [Iwona-Math-Symbols-Light] [sy-iwonalz]
+ \definefontsynonym [Iwona-Math-Extension-Light] [ex-iwonal]
+\stoptypescript
+
+\starttypescript [math] [iwona-medium] [default]
+ \definefontsynonym [Iwona-Math-Letters-Medium-Regular][rm-iwonam]
+ \definefontsynonym [Iwona-Math-Letters-Medium-Italic] [mi-iwonami]
+ \definefontsynonym [Iwona-Math-Symbols-Medium] [sy-iwonamz]
+ \definefontsynonym [Iwona-Math-Extension-Medium] [ex-iwonam]
+\stoptypescript
+
+\starttypescript [math] [iwona-heavy] [default]
+ \definefontsynonym [Iwona-Math-Letters-Heavy-Regular] [rm-iwonah]
+ \definefontsynonym [Iwona-Math-Letters-Heavy-Italic] [mi-iwonahi]
+ \definefontsynonym [Iwona-Math-Symbols-Heavy] [sy-iwonahz]
+ \definefontsynonym [Iwona-Math-Extension-Heavy] [ex-iwonah]
+\stoptypescript
+
+\starttypescript [math] [iwona,iwona-light,iwona-medium,iwona-heavy] [default]
+ \usemathcollection[default]
+ \loadmapfile[iwona-rm.map]
+ \loadmapfile[iwona-mi.map]
+ \loadmapfile[iwona-sy.map]
+ \loadmapfile[iwona-ex.map]
+\stoptypescript
+
+% Kurier (JMN) / no open type fonts
+
+\starttypescript [sans] [kurier-light,kurier,kurier-medium]
+ \definefontsynonym[Kurier-Light] [kurierl]
+ \definefontsynonym[Kurier-Regular] [kurierr]
+ \definefontsynonym[Kurier-Medium] [kurierm]
+ \definefontsynonym[Kurier-Bold] [kurierb]
+ \definefontsynonym[Kurier-Heavy] [kurierh]
+ \definefontsynonym[Kurier-LightItalic] [kurierli]
+ \definefontsynonym[Kurier-Italic] [kurierri]
+ \definefontsynonym[Kurier-MediumItalic] [kuriermi]
+ \definefontsynonym[Kurier-BoldItalic] [kurierbi]
+ \definefontsynonym[Kurier-HeavyItalic] [kurierhi]
+\stoptypescript
+
+\starttypescript [math] [kurier] [default]
+ \definefontsynonym [Kurier-Math-Letters-Regular] [rm-kurierr]
+ \definefontsynonym [Kurier-Math-Letters-Italic] [mi-kurierri]
+ \definefontsynonym [Kurier-Math-Symbols-Regular] [sy-kurierrz]
+ \definefontsynonym [Kurier-Math-Extension-Regular] [ex-kurierr]
+\stoptypescript
+
+\starttypescript [math] [kurier-light] [default]
+ \definefontsynonym [Kurier-Math-Letters-Light-Regular] [rm-kurierl]
+ \definefontsynonym [Kurier-Math-Letters-Light-Italic] [mi-kurierli]
+ \definefontsynonym [Kurier-Math-Symbols-Light] [sy-kurierlz]
+ \definefontsynonym [Kurier-Math-Extension-Light] [ex-kurierl]
+\stoptypescript
+
+\starttypescript [math] [kurier-medium] [default]
+ \definefontsynonym [Kurier-Math-Letters-Medium-Regular] [rm-kurierm]
+ \definefontsynonym [Kurier-Math-Letters-Medium-Italic] [mi-kuriermi]
+ \definefontsynonym [Kurier-Math-Symbols-Medium-Regular] [sy-kuriermz]
+ \definefontsynonym [Kurier-Math-Extension-Medium] [ex-kurierm]
+\stoptypescript
+
+\starttypescript [math] [kurier,kurier-light,kurier-medium] [default]
+ \loadmapfile[kurier-rm.map]
+ \loadmapfile[kurier-mi.map]
+ \loadmapfile[kurier-sy.map]
+ \loadmapfile[kurier-ex.map]
+\stoptypescript
+
+% Whatever else we need:
+
+\starttypescript
+ \definefontsynonym [ZapfDingbats] [uzdr]
+ \definefontsynonym [RalfSmithFormalScript] [rsfs10]
+ \definefontsynonym [MartinVogel] [fmvr8x]
+\stoptypescript
+
+% Temp here
+
+\starttypescript [serif] [charter]
+ \definefontsynonym [Charter-Roman] [name:CharterBT-Roman] % or: [bchr8a]
+ \definefontsynonym [Charter-Italic] [name:CharterBT-Italic] % or: [bchri8a]
+ \definefontsynonym [Charter-Bold] [name:CharterBT-Bold] % or: [bchb8a]
+ \definefontsynonym [Charter-BoldItalic] [name:CharterBT-BoldItalic] % or: [bchbi8a]
+ \definefontsynonym [Charter-Slanted] [name:CharterBT-Italic] % or: [bchri8a]
+ \definefontsynonym [Charter-BoldSlanted] [name:CharterBT-BoldItalic] % or: [bchbi8a]
+ \definefontsynonym [Charter-Roman-Caps] [name:CharterBT-SmallCap] % or: [bchrc8a]
+\stoptypescript
+
+\stoptypescriptcollection
+
+\endinput
diff --git a/Master/texmf-dist/tex/context/base/type-siz.tex b/Master/texmf-dist/tex/context/base/type-siz.tex
index 6a2e35b30a6..018f979bbad 100644
--- a/Master/texmf-dist/tex/context/base/type-siz.tex
+++ b/Master/texmf-dist/tex/context/base/type-siz.tex
@@ -394,15 +394,18 @@
\starttypescript [math] [modern,computer-modern,latin-modern] [size]
- % hack to prevent mapping of filenames, watch the space!
-
- \definefontsynonym[xcmr12][cmr12 ]
- \definefontsynonym[xcmr10][cmr10 ]
- \definefontsynonym[xcmr9] [cmr9 ]
- \definefontsynonym[xcmr8] [cmr8 ]
- \definefontsynonym[xcmr7] [cmr7 ]
- \definefontsynonym[xcmr6] [cmr6 ]
- \definefontsynonym[xcmr5] [cmr5 ]
+ % hack to prevent mapping of filenames, watch the space! before
+ % latin modern came aroudn we needed this trick to make sure that
+ % we loaded the raw cmr12 etc instead of the ones mapped onto
+ % an encoding
+
+ % \definefontsynonym[xcmr12][cmr12 ]
+ % \definefontsynonym[xcmr10][cmr10 ]
+ % \definefontsynonym[xcmr9] [cmr9 ]
+ % \definefontsynonym[xcmr8] [cmr8 ]
+ % \definefontsynonym[xcmr7] [cmr7 ]
+ % \definefontsynonym[xcmr6] [cmr6 ]
+ % \definefontsynonym[xcmr5] [cmr5 ]
\definebodyfont [12pt] [mm]
[mr=xcmr12,
diff --git a/Master/texmf-dist/tex/context/base/type-syn.tex b/Master/texmf-dist/tex/context/base/type-syn.tex
index 0470622fb41..b7e9335df71 100644
--- a/Master/texmf-dist/tex/context/base/type-syn.tex
+++ b/Master/texmf-dist/tex/context/base/type-syn.tex
@@ -13,92 +13,94 @@
\starttypescriptcollection[synonyms]
-% Simple Minded Fonts / to be redone so that it's not bound to modern
-
-\starttypescript [serif] [simple] [name]
- \definefontsynonym [Serif] [Simple]
- \definefontsynonym [SerifBold] [Serif]
- \definefontsynonym [SerifItalic] [Serif]
- \definefontsynonym [SerifSlanted] [Serif]
- \definefontsynonym [SerifBoldItalic] [Serif]
- \definefontsynonym [SerifBoldSlanted] [Serif]
- \definefontsynonym [SerifCaps] [Serif]
-\stoptypescript
-
-% \starttypescript [sans] [simple] [name]
-% \definefontsynonym [Sans] [Simple]
-% \definefontsynonym [SansBold] [Sans]
-% \definefontsynonym [SansItalic] [Sans]
-% \definefontsynonym [SansSlanted] [Sans]
-% \definefontsynonym [SansBoldItalic] [Sans]
-% \definefontsynonym [SansBoldSlanted] [Sans]
-% \definefontsynonym [SansCaps] [Sans]
-% \stoptypescript
-
-% \starttypescript [mono] [simple] [name]
-% \definefontsynonym [Mono] [Simple]
-% \definefontsynonym [MonoBold] [Mono]
-% \definefontsynonym [MonoItalic] [Mono]
-% \definefontsynonym [MonoSlanted] [Mono]
-% \definefontsynonym [MonoBoldItalic] [Mono]
-% \definefontsynonym [MonoBoldSlanted] [Mono]
-% \definefontsynonym [MonoCaps] [Mono]
-% \stoptypescript
% Computer Modern Roman : Donald Knuth
+% Latin Modern: LM Font Revision Team
+
+% LM math vs CM math (analysis by Taco):
+%
+% lmex10.tfm % identical
+% lmmi5.tfm % identical
+% lmmi6.tfm % identical
+% lmmi7.tfm % identical
+% lmmi8.tfm % identical
+% lmmi9.tfm % identical
+% lmmi10.tfm % identical
+% lmmi12.tfm % identical
+% lmmib10.tfm % identical
+% lmsy5.tfm % extra chars: 254,255 (octal)
+% lmsy6.tfm % extra chars: 254,255 (octal)
+% lmsy7.tfm % extra chars: 254,255 (octal)
+% lmsy8.tfm % extra chars: 254,255 (octal)
+% lmsy9.tfm % extra chars: 254,255 (octal)
+% lmsy10.tfm % extra chars: 254,255 (octal)
+% lmbsy10.tfm % extra chars: 254,255 (octal)
+%
+% From the 'AMS' set:
+%
+% lmmib5.tfm % identical
+% lmmib7.tfm % identical
+% lmbsy5.tfm % extra chars: 254,255 (octal)
+% lmbsy7.tfm % extra chars: 254,255 (octal)
+%
+% The two extra characters are:
+%
+% /lessorequalslant
+% /greaterorequalslant
\starttypescript [serif] [modern,computer-modern,latin-modern] [name]
- \definefontsynonym [Serif] [ComputerModern]
- \definefontsynonym [SerifBold] [ComputerModern-Bold]
- \definefontsynonym [SerifItalic] [ComputerModern-Italic]
- \definefontsynonym [SerifSlanted] [ComputerModern-Slanted]
- \definefontsynonym [SerifBoldItalic] [ComputerModern-BoldItalic]
- \definefontsynonym [SerifBoldSlanted] [ComputerModern-BoldSlanted]
- \definefontsynonym [SerifCaps] [ComputerModern-Caps]
- \definefontsynonym [SerifCapsSlanted] [ComputerModern-CapsSlanted]
+ \definefontsynonym [Serif] [LMRoman-Regular]
+ \definefontsynonym [SerifBold] [LMRoman-Bold]
+ \definefontsynonym [SerifItalic] [LMRoman-Italic]
+ \definefontsynonym [SerifSlanted] [LMRoman-Oblique]
+ \definefontsynonym [SerifBoldItalic] [LMRoman-BoldItalic]
+ \definefontsynonym [SerifBoldSlanted] [LMRoman-BoldOblique]
+ \definefontsynonym [SerifCaps] [LMRoman-CapsRegular]
+ \definefontsynonym [SerifCapsSlanted] [LMRoman-CapsOblique]
\stoptypescript
\starttypescript [sans] [modern,computer-modern,latin-modern] [name]
- \definefontsynonym [Sans] [ComputerModernSans]
- \definefontsynonym [SansBold] [ComputerModernSans-Bold]
- \definefontsynonym [SansItalic] [ComputerModernSans-Italic]
- \definefontsynonym [SansSlanted] [ComputerModernSans-Slanted]
- \definefontsynonym [SansBoldItalic] [ComputerModernSans-BoldItalic]
- \definefontsynonym [SansBoldSlanted] [ComputerModernSans-BoldSlanted]
- \definefontsynonym [SansCaps] [ComputerModernSans-Caps]
- \definefontsynonym [SansCapsSlanted] [ComputerModernSans-CapsSlanted]
+ \definefontsynonym [Sans] [LMSans-Regular]
+ \definefontsynonym [SansBold] [LMSans-Bold]
+ \definefontsynonym [SansItalic] [LMSans-Oblique]
+ \definefontsynonym [SansSlanted] [LMSans-Oblique]
+ \definefontsynonym [SansBoldItalic] [LMSans-BoldOblique]
+ \definefontsynonym [SansBoldSlanted] [LMSans-BoldOblique]
+ \definefontsynonym [SansCaps] [LMSans-Regular]
+ \definefontsynonym [SansCapsSlanted] [LMSans-Oblique]
\stoptypescript
\starttypescript [mono] [modern,computer-modern,latin-modern] [name]
- \definefontsynonym [Mono] [ComputerModernMono]
- \definefontsynonym [MonoBold] [ComputerModernMono-Bold]
- \definefontsynonym [MonoItalic] [ComputerModernMono-Italic]
- \definefontsynonym [MonoSlanted] [ComputerModernMono-Slanted]
- \definefontsynonym [MonoBoldItalic] [ComputerModernMono-BoldItalic]
- \definefontsynonym [MonoBoldSlanted] [ComputerModernMono-BoldSlanted]
- \definefontsynonym [MonoCaps] [ComputerModernMono-Caps]
- \definefontsynonym [MonoCapsSlanted] [ComputerModernMono-CapsSlanted]
+ \definefontsynonym [Mono] [LMTypewriter-Regular]
+ \definefontsynonym [MonoBold] [LMTypewriter-Dark]
+ \definefontsynonym [MonoItalic] [LMTypewriter-Italic]
+ \definefontsynonym [MonoSlanted] [LMTypewriter-Oblique]
+ \definefontsynonym [MonoBoldItalic] [LMTypewriter-DarkOblique]
+ \definefontsynonym [MonoBoldSlanted] [LMTypewriter-DarkOblique]
+ \definefontsynonym [MonoCaps] [LMTypewriter-CapsRegular]
+ \definefontsynonym [MonoCapsSlanted] [LMTypewriter-CapsOblique]
+ \definefontsynonym [MonoVariable] [LMTypewriterVarWd-Regular]
\stoptypescript
\starttypescript [math] [modern,computer-modern,latin-modern] [name]
- \definefontsynonym [MathRoman] [ComputerModernMath-Roman]
- \definefontsynonym [MathExtension] [ComputerModernMath-Extension]
- \definefontsynonym [MathItalic] [ComputerModernMath-Italic]
- \definefontsynonym [MathSymbol] [ComputerModernMath-Symbol]
+ \definefontsynonym [MathRoman] [LMRoman-Regular]
+ \definefontsynonym [MathExtension] [LMMathExtension-Regular]
+ \definefontsynonym [MathItalic] [LMMathItalic-Italic]
+ \definefontsynonym [MathSymbol] [LMMathSymbols-Italic]
\stoptypescript
\starttypescript [boldmath] [modern,computer-modern,latin-modern] [name]
- \definefontsynonym [MathRoman] [ComputerModernMath-Roman-Bold]
- \definefontsynonym [MathExtension] [ComputerModernMath-Extension]
- \definefontsynonym [MathItalic] [ComputerModernMath-Italic-Bold]
- \definefontsynonym [MathSymbol] [ComputerModernMath-Symbol-Bold]
+ \definefontsynonym [MathRoman] [LMRoman-Bold]
+ \definefontsynonym [MathExtension] [LMMathExtension-Regular]
+ \definefontsynonym [MathItalic] [LMMathItalic-BoldItalic]
+ \definefontsynonym [MathSymbol] [LMMathSymbols-BoldItalic]
\stoptypescript
\starttypescript [bfmath] [modern,computer-modern,latin-modern] [name]
- \definefontsynonym [MathRomanBold] [ComputerModernMath-Roman-Bold]
- \definefontsynonym [MathExtension] [ComputerModernMath-Extension]
- \definefontsynonym [MathItalicBold] [ComputerModernMath-Italic-Bold]
- \definefontsynonym [MathSymbolBold] [ComputerModernMath-Symbol-Bold]
+ \definefontsynonym [MathRomanBold] [LMRoman-Bold]
+ \definefontsynonym [MathExtension] [LMMathExtension-Regular]
+ \definefontsynonym [MathItalicBold] [LMMathItalic-BoldItalic]
+ \definefontsynonym [MathSymbolBold] [LMMathSymbols-BoldItalic]
\stoptypescript
\starttypescript [serif] [modern-vari,computer-modern-vari,latin-modern-vari] [name]
@@ -452,142 +454,142 @@
\starttypescript [sans] [iwona-light] [name]
\setups[font:fallback:sans]
- \definefontsynonym [Sans] [Iwona-Light] [encoding=\typescriptthree]
- \definefontsynonym [SansItalic] [Iwona-LightItalic] [encoding=\typescriptthree]
- \definefontsynonym [SansBold] [Iwona-Medium] [encoding=\typescriptthree]
- \definefontsynonym [SansBoldItalic] [Iwona-MediumItalic] [encoding=\typescriptthree]
- \definefontsynonym [SansCaps] [Iwona-CapsLight] [encoding=\typescriptthree]
- \definefontsynonym [SansItalicCaps] [Iwona-CapsLightItalic] [encoding=\typescriptthree]
- \definefontsynonym [SansBoldCaps] [Iwona-CapsMedium] [encoding=\typescriptthree]
- \definefontsynonym [SansBoldItalicCaps] [Iwona-CapsMediumItalic] [encoding=\typescriptthree]
+ \definefontsynonym [Sans] [Iwona-Light]
+ \definefontsynonym [SansItalic] [Iwona-LightItalic]
+ \definefontsynonym [SansBold] [Iwona-Medium]
+ \definefontsynonym [SansBoldItalic] [Iwona-MediumItalic]
+ \definefontsynonym [SansCaps] [Iwona-CapsLight]
+ \definefontsynonym [SansItalicCaps] [Iwona-CapsLightItalic]
+ \definefontsynonym [SansBoldCaps] [Iwona-CapsMedium]
+ \definefontsynonym [SansBoldItalicCaps] [Iwona-CapsMediumItalic]
\stoptypescript
\starttypescript [sans] [iwona-light-caps] [name]
\setups[font:fallback:sans]
- \definefontsynonym [Sans] [Iwona-CapsLight] [encoding=\typescriptthree]
- \definefontsynonym [SansItalic] [Iwona-CapsLightItalic] [encoding=\typescriptthree]
- \definefontsynonym [SansBold] [Iwona-CapsMedium] [encoding=\typescriptthree]
- \definefontsynonym [SansBoldItalic] [Iwona-CapsMediumItalic] [encoding=\typescriptthree]
+ \definefontsynonym [Sans] [Iwona-CapsLight]
+ \definefontsynonym [SansItalic] [Iwona-CapsLightItalic]
+ \definefontsynonym [SansBold] [Iwona-CapsMedium]
+ \definefontsynonym [SansBoldItalic] [Iwona-CapsMediumItalic]
\stoptypescript
\starttypescript [sans] [iwona] [name]
\setups[font:fallback:sans]
- \definefontsynonym [Sans] [Iwona-Regular] [encoding=\typescriptthree]
- \definefontsynonym [SansItalic] [Iwona-RegularItalic] [encoding=\typescriptthree]
- \definefontsynonym [SansBold] [Iwona-Bold] [encoding=\typescriptthree]
- \definefontsynonym [SansBoldItalic] [Iwona-BoldItalic] [encoding=\typescriptthree]
- \definefontsynonym [SansCaps] [Iwona-CapsRegular] [encoding=\typescriptthree]
- \definefontsynonym [SansItalicCaps] [Iwona-CapsRegularItalic] [encoding=\typescriptthree]
- \definefontsynonym [SansBoldCaps] [Iwona-CapsBold] [encoding=\typescriptthree]
- \definefontsynonym [SansBoldItalicCaps] [Iwona-CapsBoldItalic] [encoding=\typescriptthree]
+ \definefontsynonym [Sans] [Iwona-Regular]
+ \definefontsynonym [SansItalic] [Iwona-RegularItalic]
+ \definefontsynonym [SansBold] [Iwona-Bold]
+ \definefontsynonym [SansBoldItalic] [Iwona-BoldItalic]
+ \definefontsynonym [SansCaps] [Iwona-CapsRegular]
+ \definefontsynonym [SansItalicCaps] [Iwona-CapsRegularItalic]
+ \definefontsynonym [SansBoldCaps] [Iwona-CapsBold]
+ \definefontsynonym [SansBoldItalicCaps] [Iwona-CapsBoldItalic]
\stoptypescript
\starttypescript [sans] [iwona-caps] [name]
\setups[font:fallback:sans]
- \definefontsynonym [Sans] [Iwona-CapsRegular] [encoding=\typescriptthree]
- \definefontsynonym [SansItalic] [Iwona-CapsRegularItalic] [encoding=\typescriptthree]
- \definefontsynonym [SansBold] [Iwona-CapsBold] [encoding=\typescriptthree]
- \definefontsynonym [SansBoldItalic] [Iwona-CapsBoldItalic] [encoding=\typescriptthree]
+ \definefontsynonym [Sans] [Iwona-CapsRegular]
+ \definefontsynonym [SansItalic] [Iwona-CapsRegularItalic]
+ \definefontsynonym [SansBold] [Iwona-CapsBold]
+ \definefontsynonym [SansBoldItalic] [Iwona-CapsBoldItalic]
\stoptypescript
\starttypescript [sans] [iwona-medium] [name]
\setups[font:fallback:sans]
- \definefontsynonym [Sans] [Iwona-Medium] [encoding=\typescriptthree]
- \definefontsynonym [SansItalic] [Iwona-MediumItalic] [encoding=\typescriptthree]
- \definefontsynonym [SansBold] [Iwona-Heavy] [encoding=\typescriptthree]
- \definefontsynonym [SansBoldItalic] [Iwona-HeavyItalic] [encoding=\typescriptthree]
- \definefontsynonym [SansCaps] [Iwona-CapsHeavy] [encoding=\typescriptthree]
- \definefontsynonym [SansItalicCaps] [Iwona-CapsMediumItalic] [encoding=\typescriptthree]
- \definefontsynonym [SansBoldCaps] [Iwona-CapsHeavy] [encoding=\typescriptthree]
- \definefontsynonym [SansBoldItalicCaps] [Iwona-CapsHeavyItalic] [encoding=\typescriptthree]
+ \definefontsynonym [Sans] [Iwona-Medium]
+ \definefontsynonym [SansItalic] [Iwona-MediumItalic]
+ \definefontsynonym [SansBold] [Iwona-Heavy]
+ \definefontsynonym [SansBoldItalic] [Iwona-HeavyItalic]
+ \definefontsynonym [SansCaps] [Iwona-CapsHeavy]
+ \definefontsynonym [SansItalicCaps] [Iwona-CapsMediumItalic]
+ \definefontsynonym [SansBoldCaps] [Iwona-CapsHeavy]
+ \definefontsynonym [SansBoldItalicCaps] [Iwona-CapsHeavyItalic]
\stoptypescript
\starttypescript [sans] [iwona-medium-caps] [name]
\setups[font:fallback:sans]
- \definefontsynonym [Sans] [Iwona-CapsHeavy] [encoding=\typescriptthree]
- \definefontsynonym [SansItalic] [Iwona-CapsMediumItalic] [encoding=\typescriptthree]
- \definefontsynonym [SansBold] [Iwona-CapsHeavy] [encoding=\typescriptthree]
- \definefontsynonym [SansBoldItalic] [Iwona-CapsHeavyItalic] [encoding=\typescriptthree]
+ \definefontsynonym [Sans] [Iwona-CapsHeavy]
+ \definefontsynonym [SansItalic] [Iwona-CapsMediumItalic]
+ \definefontsynonym [SansBold] [Iwona-CapsHeavy]
+ \definefontsynonym [SansBoldItalic] [Iwona-CapsHeavyItalic]
\stoptypescript
\starttypescript [sans] [iwona-heavy] [name]
\setups[font:fallback:sans]
- \definefontsynonym [Sans] [Iwona-Heavy] [encoding=\typescriptthree]
- \definefontsynonym [SansItalic] [Iwona-HeavyItalic] [encoding=\typescriptthree]
- \definefontsynonym [SansBold] [Iwona-Heavy] [encoding=\typescriptthree]
- \definefontsynonym [SansBoldItalic] [Iwona-HeavyItalic] [encoding=\typescriptthree]
- \definefontsynonym [SansCaps] [Iwona-CapsHeavy] [encoding=\typescriptthree]
- \definefontsynonym [SansItalicCaps] [Iwona-CapsHeavyItalic] [encoding=\typescriptthree]
- \definefontsynonym [SansBoldCaps] [Iwona-CapsHeavy] [encoding=\typescriptthree]
- \definefontsynonym [SansBoldItalicCaps] [Iwona-CapsHeavyItalic] [encoding=\typescriptthree]
+ \definefontsynonym [Sans] [Iwona-Heavy]
+ \definefontsynonym [SansItalic] [Iwona-HeavyItalic]
+ \definefontsynonym [SansBold] [Iwona-Heavy]
+ \definefontsynonym [SansBoldItalic] [Iwona-HeavyItalic]
+ \definefontsynonym [SansCaps] [Iwona-CapsHeavy]
+ \definefontsynonym [SansItalicCaps] [Iwona-CapsHeavyItalic]
+ \definefontsynonym [SansBoldCaps] [Iwona-CapsHeavy]
+ \definefontsynonym [SansBoldItalicCaps] [Iwona-CapsHeavyItalic]
\stoptypescript
\starttypescript [sans] [iwona-heavy-caps] [name]
\setups[font:fallback:sans]
- \definefontsynonym [SansCaps] [Iwona-CapsHeavy] [encoding=\typescriptthree]
- \definefontsynonym [SansItalicCaps] [Iwona-CapsHeavyItalic] [encoding=\typescriptthree]
- \definefontsynonym [SansBoldCaps] [Iwona-CapsHeavy] [encoding=\typescriptthree]
- \definefontsynonym [SansBoldItalicCaps] [Iwona-CapsHeavyItalic] [encoding=\typescriptthree]
+ \definefontsynonym [SansCaps] [Iwona-CapsHeavy]
+ \definefontsynonym [SansItalicCaps] [Iwona-CapsHeavyItalic]
+ \definefontsynonym [SansBoldCaps] [Iwona-CapsHeavy]
+ \definefontsynonym [SansBoldItalicCaps] [Iwona-CapsHeavyItalic]
\stoptypescript
\starttypescript [sans] [iwona-light-cond] [name]
\setups[font:fallback:sans]
- \definefontsynonym [Sans] [Iwona-CondLight] [encoding=\typescriptthree]
- \definefontsynonym [SansItalic] [Iwona-CondLightItalic] [encoding=\typescriptthree]
- \definefontsynonym [SansBold] [Iwona-CondMedium] [encoding=\typescriptthree]
- \definefontsynonym [SansBoldItalic] [Iwona-CondMediumItalic] [encoding=\typescriptthree]
- \definefontsynonym [SansCaps] [Iwona-CondCapsLight] [encoding=\typescriptthree]
- \definefontsynonym [SansItalicCaps] [Iwona-CondCapsLightItalic] [encoding=\typescriptthree]
- \definefontsynonym [SansBoldCaps] [Iwona-CondCapsMedium] [encoding=\typescriptthree]
- \definefontsynonym [SansBoldItalicCaps] [Iwona-CondCapsMediumItalic] [encoding=\typescriptthree]
+ \definefontsynonym [Sans] [Iwona-CondLight]
+ \definefontsynonym [SansItalic] [Iwona-CondLightItalic]
+ \definefontsynonym [SansBold] [Iwona-CondMedium]
+ \definefontsynonym [SansBoldItalic] [Iwona-CondMediumItalic]
+ \definefontsynonym [SansCaps] [Iwona-CondCapsLight]
+ \definefontsynonym [SansItalicCaps] [Iwona-CondCapsLightItalic]
+ \definefontsynonym [SansBoldCaps] [Iwona-CondCapsMedium]
+ \definefontsynonym [SansBoldItalicCaps] [Iwona-CondCapsMediumItalic]
\stoptypescript
\starttypescript [sans] [iwona-light-cond-caps] [name]
\setups[font:fallback:sans]
- \definefontsynonym [Sans] [Iwona-CondCapsLight] [encoding=\typescriptthree]
- \definefontsynonym [SansItalic] [Iwona-CondCapsLightItalic] [encoding=\typescriptthree]
- \definefontsynonym [SansBold] [Iwona-CondCapsMedium] [encoding=\typescriptthree]
- \definefontsynonym [SansBoldItalic] [Iwona-CondCapsMediumItalic] [encoding=\typescriptthree]
+ \definefontsynonym [Sans] [Iwona-CondCapsLight]
+ \definefontsynonym [SansItalic] [Iwona-CondCapsLightItalic]
+ \definefontsynonym [SansBold] [Iwona-CondCapsMedium]
+ \definefontsynonym [SansBoldItalic] [Iwona-CondCapsMediumItalic]
\stoptypescript
\starttypescript [sans] [iwona-cond] [name]
\setups[font:fallback:sans]
- \definefontsynonym [Sans] [Iwona-CondRegular] [encoding=\typescriptthree]
- \definefontsynonym [SansItalic] [Iwona-CondRegularItalic] [encoding=\typescriptthree]
- \definefontsynonym [SansBold] [Iwona-CondBold] [encoding=\typescriptthree]
- \definefontsynonym [SansBoldItalic] [Iwona-CondBoldItalic] [encoding=\typescriptthree]
- \definefontsynonym [SansCaps] [Iwona-CondCapsRegular] [encoding=\typescriptthree]
- \definefontsynonym [SansItalicCaps] [Iwona-CondCapsRegularItalic] [encoding=\typescriptthree]
- \definefontsynonym [SansBoldCaps] [Iwona-CondCapsBold] [encoding=\typescriptthree]
- \definefontsynonym [SansBoldItalicCaps] [Iwona-CondCapsBoldItalic] [encoding=\typescriptthree]
+ \definefontsynonym [Sans] [Iwona-CondRegular]
+ \definefontsynonym [SansItalic] [Iwona-CondRegularItalic]
+ \definefontsynonym [SansBold] [Iwona-CondBold]
+ \definefontsynonym [SansBoldItalic] [Iwona-CondBoldItalic]
+ \definefontsynonym [SansCaps] [Iwona-CondCapsRegular]
+ \definefontsynonym [SansItalicCaps] [Iwona-CondCapsRegularItalic]
+ \definefontsynonym [SansBoldCaps] [Iwona-CondCapsBold]
+ \definefontsynonym [SansBoldItalicCaps] [Iwona-CondCapsBoldItalic]
\stoptypescript
\starttypescript [sans] [iwona-cond-caps] [name]
\setups[font:fallback:sans]
- \definefontsynonym [Sans] [Iwona-CondCapsRegular] [encoding=\typescriptthree]
- \definefontsynonym [SansItalic] [Iwona-CondCapsRegularItalic] [encoding=\typescriptthree]
- \definefontsynonym [SansBold] [Iwona-CondCapsBold] [encoding=\typescriptthree]
- \definefontsynonym [SansBoldItalic] [Iwona-CondCapsBoldItalic] [encoding=\typescriptthree]
+ \definefontsynonym [Sans] [Iwona-CondCapsRegular]
+ \definefontsynonym [SansItalic] [Iwona-CondCapsRegularItalic]
+ \definefontsynonym [SansBold] [Iwona-CondCapsBold]
+ \definefontsynonym [SansBoldItalic] [Iwona-CondCapsBoldItalic]
\stoptypescript
\starttypescript [sans] [iwona-medium-cond] [name]
\setups[font:fallback:sans]
- \definefontsynonym [Sans] [Iwona-CondMedium] [encoding=\typescriptthree]
- \definefontsynonym [SansItalic] [Iwona-CondMediumItalic] [encoding=\typescriptthree]
- \definefontsynonym [SansBold] [Iwona-CondHeavy] [encoding=\typescriptthree]
- \definefontsynonym [SansBoldItalic] [Iwona-CondHeavyItalic] [encoding=\typescriptthree]
- \definefontsynonym [SansCaps] [Iwona-CondCapsHeavy] [encoding=\typescriptthree]
- \definefontsynonym [SansItalicCaps] [Iwona-CondCapsMediumItalic] [encoding=\typescriptthree]
- \definefontsynonym [SansBoldCaps] [Iwona-CondCapsHeavy] [encoding=\typescriptthree]
- \definefontsynonym [SansBoldItalicCaps] [Iwona-CondCapsHeavyItalic] [encoding=\typescriptthree]
+ \definefontsynonym [Sans] [Iwona-CondMedium]
+ \definefontsynonym [SansItalic] [Iwona-CondMediumItalic]
+ \definefontsynonym [SansBold] [Iwona-CondHeavy]
+ \definefontsynonym [SansBoldItalic] [Iwona-CondHeavyItalic]
+ \definefontsynonym [SansCaps] [Iwona-CondCapsHeavy]
+ \definefontsynonym [SansItalicCaps] [Iwona-CondCapsMediumItalic]
+ \definefontsynonym [SansBoldCaps] [Iwona-CondCapsHeavy]
+ \definefontsynonym [SansBoldItalicCaps] [Iwona-CondCapsHeavyItalic]
\stoptypescript
\starttypescript [sans] [iwona-medium-cond-caps] [name]
\setups[font:fallback:sans]
- \definefontsynonym [Sans] [Iwona-CondCapsHeavy] [encoding=\typescriptthree]
- \definefontsynonym [SansItalic] [Iwona-CondCapsMediumItalic] [encoding=\typescriptthree]
- \definefontsynonym [SansBold] [Iwona-CondCapsHeavy] [encoding=\typescriptthree]
- \definefontsynonym [SansBoldItalic] [Iwona-CondCapsHeavyItalic] [encoding=\typescriptthree]
+ \definefontsynonym [Sans] [Iwona-CondCapsHeavy]
+ \definefontsynonym [SansItalic] [Iwona-CondCapsMediumItalic]
+ \definefontsynonym [SansBold] [Iwona-CondCapsHeavy]
+ \definefontsynonym [SansBoldItalic] [Iwona-CondCapsHeavyItalic]
\stoptypescript
\starttypescript [math] [iwona-light] [name]
@@ -622,26 +624,26 @@
\starttypescript [sans] [kurier-light] [name]
\setups[font:fallback:sans]
- \definefontsynonym [Sans] [Kurier-Light] [encoding=\typescriptthree]
- \definefontsynonym [SansItalic] [Kurier-LightItalic] [encoding=\typescriptthree]
- \definefontsynonym [SansBold] [Kurier-Medium] [encoding=\typescriptthree]
- \definefontsynonym [SansBoldItalic] [Kurier-MediumItalic] [encoding=\typescriptthree]
+ \definefontsynonym [Sans] [Kurier-Light]
+ \definefontsynonym [SansItalic] [Kurier-LightItalic]
+ \definefontsynonym [SansBold] [Kurier-Medium]
+ \definefontsynonym [SansBoldItalic] [Kurier-MediumItalic]
\stoptypescript
\starttypescript [sans] [kurier] [name]
\setups[font:fallback:sans]
- \definefontsynonym [Sans] [Kurier-Regular] [encoding=\typescriptthree]
- \definefontsynonym [SansItalic] [Kurier-RegularItalic] [encoding=\typescriptthree]
- \definefontsynonym [SansBold] [Kurier-Bold] [encoding=\typescriptthree]
- \definefontsynonym [SansBoldItalic] [Kurier-BoldItalic] [encoding=\typescriptthree]
+ \definefontsynonym [Sans] [Kurier-Regular]
+ \definefontsynonym [SansItalic] [Kurier-RegularItalic]
+ \definefontsynonym [SansBold] [Kurier-Bold]
+ \definefontsynonym [SansBoldItalic] [Kurier-BoldItalic]
\stoptypescript
\starttypescript [sans] [kurier-medium] [name]
\setups[font:fallback:sans]
- \definefontsynonym [Sans] [Kurier-Medium] [encoding=\typescriptthree]
- \definefontsynonym [SansItalic] [Kurier-MediumItalic] [encoding=\typescriptthree]
- \definefontsynonym [SansBold] [Kurier-Heavy] [encoding=\typescriptthree]
- \definefontsynonym [SansBoldItalic] [Kurier-HeavyItalic] [encoding=\typescriptthree]
+ \definefontsynonym [Sans] [Kurier-Medium]
+ \definefontsynonym [SansItalic] [Kurier-MediumItalic]
+ \definefontsynonym [SansBold] [Kurier-Heavy]
+ \definefontsynonym [SansBoldItalic] [Kurier-HeavyItalic]
\stoptypescript
\starttypescript [math] [kurier-light] [name]
@@ -786,13 +788,6 @@
\definefontsynonym [SerifCaps] [Times-Roman]
\stoptypescript
-% \starttypescript [math] [times] [name]
-% \definefontsynonym [MathRoman] [Times-MathRoman]
-% \definefontsynonym [MathExtension] [Times-MathExtension]
-% \definefontsynonym [MathItalic] [Times-MathItalic]
-% \definefontsynonym [MathSymbol] [Times-MathSymbol]
-% \stoptypescript
-
\starttypescript [math] [times] [name]
\definefontsynonym [MathRoman] [Times-Roman-Upright]
\definefontsynonym [MathExtension] [Times-Math-Extension]
diff --git a/Master/texmf-dist/tex/context/base/type-tmf.tex b/Master/texmf-dist/tex/context/base/type-tmf.tex
new file mode 100644
index 00000000000..55a6259568c
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/type-tmf.tex
@@ -0,0 +1,1090 @@
+%D \module
+%D [ file=type-tmf,
+%D version=2007.07.30,
+%D title=\CONTEXT\ Typescript Macros,
+%D subtitle=Core \TEX\ Fonts,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\starttypescriptcollection[synonyms]
+
+% Computer Modern Roman : Donald Knuth
+% Latin Modern: LM Font Revision Team
+
+% LM math vs CM math (analysis by Taco):
+%
+% lmex10.tfm % identical
+% lmmi5.tfm % identical
+% lmmi6.tfm % identical
+% lmmi7.tfm % identical
+% lmmi8.tfm % identical
+% lmmi9.tfm % identical
+% lmmi10.tfm % identical
+% lmmi12.tfm % identical
+% lmmib10.tfm % identical
+% lmsy5.tfm % extra chars: 254,255 (octal)
+% lmsy6.tfm % extra chars: 254,255 (octal)
+% lmsy7.tfm % extra chars: 254,255 (octal)
+% lmsy8.tfm % extra chars: 254,255 (octal)
+% lmsy9.tfm % extra chars: 254,255 (octal)
+% lmsy10.tfm % extra chars: 254,255 (octal)
+% lmbsy10.tfm % extra chars: 254,255 (octal)
+%
+% From the 'AMS' set:
+%
+% lmmib5.tfm % identical
+% lmmib7.tfm % identical
+% lmbsy5.tfm % extra chars: 254,255 (octal)
+% lmbsy7.tfm % extra chars: 254,255 (octal)
+%
+% The two extra characters are:
+%
+% /lessorequalslant
+% /greaterorequalslant
+
+\starttypescript [serif] [modern,computer-modern,latin-modern] [name]
+ \definefontsynonym [Serif] [LMRoman-Regular]
+ \definefontsynonym [SerifBold] [LMRoman-Bold]
+ \definefontsynonym [SerifItalic] [LMRoman-Italic]
+ \definefontsynonym [SerifSlanted] [LMRoman-Oblique]
+ \definefontsynonym [SerifBoldItalic] [LMRoman-BoldItalic]
+ \definefontsynonym [SerifBoldSlanted] [LMRoman-BoldOblique]
+ \definefontsynonym [SerifCaps] [LMRoman-CapsRegular]
+ \definefontsynonym [SerifCapsSlanted] [LMRoman-CapsOblique]
+\stoptypescript
+
+\starttypescript [sans] [modern,computer-modern,latin-modern] [name]
+ \definefontsynonym [Sans] [LMSans-Regular]
+ \definefontsynonym [SansBold] [LMSans-Bold]
+ \definefontsynonym [SansItalic] [LMSans-Oblique]
+ \definefontsynonym [SansSlanted] [LMSans-Oblique]
+ \definefontsynonym [SansBoldItalic] [LMSans-BoldOblique]
+ \definefontsynonym [SansBoldSlanted] [LMSans-BoldOblique]
+ \definefontsynonym [SansCaps] [LMSans-Regular]
+ \definefontsynonym [SansCapsSlanted] [LMSans-Oblique]
+\stoptypescript
+
+\starttypescript [mono] [modern,computer-modern,latin-modern] [name]
+ \definefontsynonym [Mono] [LMTypewriter-Regular]
+ \definefontsynonym [MonoBold] [LMTypewriter-Dark]
+ \definefontsynonym [MonoItalic] [LMTypewriter-Italic]
+ \definefontsynonym [MonoSlanted] [LMTypewriter-Oblique]
+ \definefontsynonym [MonoBoldItalic] [LMTypewriter-DarkOblique]
+ \definefontsynonym [MonoBoldSlanted] [LMTypewriter-DarkOblique]
+ \definefontsynonym [MonoCaps] [LMTypewriter-CapsRegular]
+ \definefontsynonym [MonoCapsSlanted] [LMTypewriter-CapsOblique]
+ \definefontsynonym [MonoVariable] [LMTypewriterVarWd-Regular]
+\stoptypescript
+
+\starttypescript [math] [modern,computer-modern,latin-modern] [name]
+ \definefontsynonym [MathRoman] [LMMathRoman-Regular]
+ \definefontsynonym [MathExtension] [LMMathExtension-Regular]
+ \definefontsynonym [MathItalic] [LMMathItalic-Italic]
+ \definefontsynonym [MathSymbol] [LMMathSymbols-Italic]
+\stoptypescript
+
+% maybe we can by now just use: (to be tested first)
+
+% \starttypescript [math] [modern,computer-modern,latin-modern] [name]
+% \definefontsynonym[xcmr12][LMRoman-Regular12]
+% \definefontsynonym[xcmr10][LMRoman-Regular10]
+% \definefontsynonym[xcmr9] [LMRoman-Regular9]
+% \definefontsynonym[xcmr8] [LMRoman-Regular8]
+% \definefontsynonym[xcmr7] [LMRoman-Regular7]
+% \definefontsynonym[xcmr6] [LMRoman-Regular6]
+% \definefontsynonym[xcmr5] [LMRoman-Regular5]
+% \stoptypescript
+
+\starttypescript [math] [modern,computer-modern,latin-modern] [name]
+ \definefontsynonym[xcmr12][rm-lmr12]
+ \definefontsynonym[xcmr10][rm-lmr10]
+ \definefontsynonym[xcmr9] [rm-lmr9]
+ \definefontsynonym[xcmr8] [rm-lmr8]
+ \definefontsynonym[xcmr7] [rm-lmr7]
+ \definefontsynonym[xcmr6] [rm-lmr6]
+ \definefontsynonym[xcmr5] [rm-lmr5]
+\stoptypescript
+
+\starttypescript [boldmath] [modern,computer-modern,latin-modern] [name]
+ \definefontsynonym [MathRoman] [LMMathRoman-Bold]
+ \definefontsynonym [MathExtension] [LMMathExtension-Regular]
+ \definefontsynonym [MathItalic] [LMMathItalic-BoldItalic]
+ \definefontsynonym [MathSymbol] [LMMathSymbols-BoldItalic]
+\stoptypescript
+
+\starttypescript [bfmath] [modern,computer-modern,latin-modern] [name]
+ \definefontsynonym [MathRomanBold] [LMMathRoman-Bold]
+ \definefontsynonym [MathExtension] [LMMathExtension-Regular]
+ \definefontsynonym [MathItalicBold] [LMMathItalic-BoldItalic]
+ \definefontsynonym [MathSymbolBold] [LMMathSymbols-BoldItalic]
+\stoptypescript
+
+\starttypescript [math,boldmath,bfmath] [modern,computer-modern,latin-modern] [name]
+ \usemathcollection[default]
+\stoptypescript
+
+\starttypescript [serif] [modern-vari,computer-modern-vari,latin-modern-vari] [name]
+ \definefontsynonym [Serif] [LMTypewriterVarWd-Regular]
+ \definefontsynonym [SerifBold] [LMTypewriterVarWd-Oblique]
+ \definefontsynonym [SerifItalic] [LMTypewriterVarWd-Oblique]
+ \definefontsynonym [SerifSlanted] [LMTypewriterVarWd-Dark]
+ \definefontsynonym [SerifBoldItalic] [LMTypewriterVarWd-DarkOblique]
+ \definefontsynonym [SerifBoldSlanted] [LMTypewriterVarWd-DarkOblique]
+ \definefontsynonym [SerifCaps] [LMTypewriterVarWd-Regular]
+ \definefontsynonym [SerifCapsSlanted] [LMTypewriterVarWd-Oblique]
+\stoptypescript
+
+\starttypescript [mono] [modern-cond,computer-modern-cond,latin-modern-cond,modern-lightcond,computer-modern-lightcond,latin-modern-lightcond] [name]
+ \definefontsynonym [Mono] [LMTypewriter-LightCondensed]
+ \definefontsynonym [MonoBold] [LMTypewriter-LightCondensed]
+ \definefontsynonym [MonoItalic] [LMTypewriter-LightCondensedOblique]
+ \definefontsynonym [MonoSlanted] [LMTypewriter-LightCondensedOblique]
+ \definefontsynonym [MonoBoldItalic] [LMTypewriter-LightCondensed]
+ \definefontsynonym [MonoBoldSlanted] [LMTypewriter-LightCondensed]
+ \definefontsynonym [MonoCaps] [LMTypewriter-LightCondensed]
+ \definefontsynonym [MonoCapsSlanted] [LMTypewriter-LightCondensed]
+\stoptypescript
+
+\starttypescript [mono] [modern-light,computer-modern-light,latin-modern-light] [name]
+ \definefontsynonym [Mono] [LMTypewriter-Light]
+ \definefontsynonym [MonoBold] [LMTypewriter-Light]
+ \definefontsynonym [MonoItalic] [LMTypewriter-LightOblique]
+ \definefontsynonym [MonoSlanted] [LMTypewriter-LightOblique]
+ \definefontsynonym [MonoBoldItalic] [LMTypewriter-Light]
+ \definefontsynonym [MonoBoldSlanted] [LMTypewriter-Light]
+ \definefontsynonym [MonoCaps] [LMTypewriter-Light]
+ \definefontsynonym [MonoCapsSlanted] [LMTypewriter-Light]
+\stoptypescript
+
+% Later we will map the real fonts, here we just map synonyms.
+
+\starttypescript [serif] [modern,latin-modern]
+ \definefontsynonym [LMRoman-DemiOblique] [LMRoman10-DemiOblique]
+ \definefontsynonym [LMRoman-Bold] [LMRoman10-Bold]
+ \definefontsynonym [LMRoman-BoldItalic] [LMRoman10-BoldItalic]
+ \definefontsynonym [LMRoman-BoldOblique] [LMRoman10-BoldOblique]
+ \definefontsynonym [LMRoman-CapsRegular] [LMRoman10-CapsRegular]
+ \definefontsynonym [LMRoman-CapsOblique] [LMRoman10-CapsOblique]
+ \definefontsynonym [LMRoman-Regular] [LMRoman10-Regular]
+ \definefontsynonym [LMRoman-Italic] [LMRoman10-Italic]
+ \definefontsynonym [LMRoman-Oblique] [LMRoman10-Oblique]
+\stoptypescript
+
+\starttypescript [sans] [modern,latin-modern]
+ \definefontsynonym [LMSans-Regular] [LMSans10-Regular]
+ \definefontsynonym [LMSans-BoldOblique] [LMSans10-BoldOblique]
+ \definefontsynonym [LMSans-Bold] [LMSans10-Bold]
+ \definefontsynonym [LMSans-DemiCondensed] [LMSans10-DemiCondensed]
+ \definefontsynonym [LMSans-DemiCondensedOblique] [LMSans10-DemiCondensedOblique]
+ \definefontsynonym [LMSans-Oblique] [LMSans10-Oblique]
+\stoptypescript
+
+\starttypescript [mono] [modern,latin-modern,modern-vari,latin-modern-vari,modern-cond,latin-modern-cond]
+ \definefontsynonym [LMTypewriter-CapsRegular] [LMTypewriter10-CapsRegular]
+ \definefontsynonym [LMTypewriter-CapsOblique] [LMTypewriter10-CapsOblique]
+ \definefontsynonym [LMTypewriter-Light] [LMTypewriter10-Light]
+ \definefontsynonym [LMTypewriter-LightOblique] [LMTypewriter10-LightOblique]
+ \definefontsynonym [LMTypewriter-LightCondensed] [LMTypewriter10-LightCondensed]
+ \definefontsynonym [LMTypewriter-LightCondensedOblique] [LMTypewriter10-LightCondensedOblique]
+ \definefontsynonym [LMTypewriter-Dark] [LMTypewriter10-Dark]
+ \definefontsynonym [LMTypewriter-DarkOblique] [LMTypewriter10-DarkOblique]
+ \definefontsynonym [LMTypewriter-Regular] [LMTypewriter10-Regular]
+ \definefontsynonym [LMTypewriter-Italic] [LMTypewriter10-Italic]
+ \definefontsynonym [LMTypewriter-Oblique] [LMTypewriter10-Oblique]
+ \definefontsynonym [LMTypewriterVarWd-Regular] [LMTypewriterVarWd10-Regular]
+ \definefontsynonym [LMTypewriterVarWd-Oblique] [LMTypewriterVarWd10-Oblique]
+ \definefontsynonym [LMTypewriterVarWd-Light] [LMTypewriterVarWd10-Light]
+ \definefontsynonym [LMTypewriterVarWd-LightOblique] [LMTypewriterVarWd10-LightOblique]
+ \definefontsynonym [LMTypewriterVarWd-Dark] [LMTypewriterVarWd10-Dark]
+ \definefontsynonym [LMTypewriterVarWd-DarkOblique] [LMTypewriterVarWd10-DarkOblique]
+\stoptypescript
+
+\starttypescript [serif] [modern,computer-modern,latin-modern]
+ \definefontsynonym [ComputerModern] [LMRoman-Regular]
+ \definefontsynonym [ComputerModern-Italic] [LMRoman-Italic]
+ \definefontsynonym [ComputerModern-Slanted] [LMRoman-Oblique]
+ \definefontsynonym [ComputerModern-Bold] [LMRoman-Bold]
+ \definefontsynonym [ComputerModern-BoldItalic] [LMRoman-BoldItalic]
+ \definefontsynonym [ComputerModern-BoldSlanted] [LMRoman-BoldOblique]
+ \definefontsynonym [ComputerModern-Caps] [LMRoman-CapsRegular]
+ \definefontsynonym [ComputerModern-CapsSlanted] [LMRoman-CapsOblique]
+\stoptypescript
+
+\starttypescript [sans] [modern,computer-modern,latin-modern]
+ \definefontsynonym [ComputerModernSans] [LMSans-Regular]
+ \definefontsynonym [ComputerModernSans-Italic] [LMSans-Oblique]
+ \definefontsynonym [ComputerModernSans-Slanted] [LMSans-Oblique]
+ \definefontsynonym [ComputerModernSans-Bold] [LMSans-Bold]
+ \definefontsynonym [ComputerModernSans-BoldItalic] [LMSans-BoldOblique]
+ \definefontsynonym [ComputerModernSans-BoldSlanted] [LMSans-BoldOblique]
+ \definefontsynonym [ComputerModernSans-Caps] [LMSans-Regular] % [LMSans-CapsRegular]
+ \definefontsynonym [ComputerModernSans-CapsSlanted] [LMSans-Oblique] % [LMSans-CapsOblique]
+\stoptypescript
+
+\starttypescript [mono] [modern,computer-modern,latin-modern]
+ \definefontsynonym [ComputerModernMono] [LMTypewriter-Regular]
+ \definefontsynonym [ComputerModernMono-Italic] [LMTypewriter-Italic]
+ \definefontsynonym [ComputerModernMono-Slanted] [LMTypewriter-Oblique]
+ \definefontsynonym [ComputerModernMono-Bold] [LMTypewriter-Dark]
+ \definefontsynonym [ComputerModernMono-BoldItalic] [LMTypewriter-DarkOblique] % !
+ \definefontsynonym [ComputerModernMono-BoldSlanted] [LMTypewriter-DarkOblique]
+ \definefontsynonym [ComputerModernMono-Caps] [LMTypewriter-CapsRegular]
+ \definefontsynonym [ComputerModernMono-CapsSlanted] [LMTypewriter-CapsOblique]
+ \definefontsynonym [ComputerModernMono-Variable] [LMTypewriterVarWd-Regular]
+\stoptypescript
+
+\starttypescript [serif] [modern-vari,computer-modern-vari,latin-modern-vari]
+ \definefontsynonym [ComputerModernVariable] [LMTypewriterVarWd-Regular]
+ \definefontsynonym [ComputerModernVariable-Italic] [LMTypewriterVarWd-Oblique]
+ \definefontsynonym [ComputerModernVariable-Slanted] [LMTypewriterVarWd-Oblique]
+ \definefontsynonym [ComputerModernVariable-Bold] [LMTypewriterVarWd-Dark]
+ \definefontsynonym [ComputerModernVariable-BoldItalic] [LMTypewriterVarWd-DarkOblique]
+ \definefontsynonym [ComputerModernVariable-BoldSlanted] [LMTypewriterVarWd-DarkOblique]
+ \definefontsynonym [ComputerModernVariable-Caps] [LMTypewriterVarWd-Regular]
+ \definefontsynonym [ComputerModernVariable-CapsSlanted] [LMTypewriterVarWd-Oblique]
+\stoptypescript
+
+\starttypescript [math] [modern,latin-modern]
+ \definefontsynonym [LMMathRoman-Regular] [LMMathRoman10-Regular]
+ \definefontsynonym [LMMathRoman-Bold] [LMMathRoman10-Bold]
+ \definefontsynonym [LMMathSymbols-BoldItalic] [LMMathSymbols10-BoldItalic]
+ \definefontsynonym [LMMathSymbols-Italic] [LMMathSymbols10-Italic]
+ \definefontsynonym [LMMathExtension-Regular] [LMMathExtension10-Regular]
+ \definefontsynonym [LMMathItalic-Italic] [LMMathItalic10-Italic]
+ \definefontsynonym [LMMathItalic-BoldItalic] [LMMathItalic10-BoldItalic]
+\stoptypescript
+
+% can boldmath and bfmath be joined?
+\starttypescript [boldmath] [modern,computer-modern,latin-modern] [name]
+ \definefontsynonym [LMMathRoman-Bold] [LMMathRoman10-Bold]
+ \definefontsynonym [LMMathExtension-Regular] [LMMathExtension10-Regular]
+ \definefontsynonym [LMMathItalic-BoldItalic] [LMMathItalic10-BoldItalic]
+ \definefontsynonym [LMMathSymbols-BoldItalic] [LMMathSymbols10-BoldItalic]
+\stoptypescript
+
+\starttypescript [bfmath] [modern,computer-modern,latin-modern] [name]
+ \definefontsynonym [LMMathRoman-Bold] [LMMathRoman10-Bold]
+ \definefontsynonym [LMMathExtension-Regular] [LMMathExtension10-Regular]
+ \definefontsynonym [LMMathItalic-BoldItalic] [LMMathItalic10-BoldItalic]
+ \definefontsynonym [LMMathSymbols-BoldItalic] [LMMathSymbols10-BoldItalic]
+\stoptypescript
+
+\starttypescript [serif] [modern,latin-modern,computer-modern]
+ \definefontsynonym [cmr5] [LMRoman5-Regular]
+ \definefontsynonym [cmr6] [LMRoman6-Regular]
+ \definefontsynonym [cmr7] [LMRoman7-Regular]
+ \definefontsynonym [cmr8] [LMRoman8-Regular]
+ \definefontsynonym [cmr9] [LMRoman9-Regular]
+ \definefontsynonym [cmr10] [LMRoman10-Regular]
+ \definefontsynonym [cmr12] [LMRoman12-Regular]
+ \definefontsynonym [cmr17] [LMRoman17-Regular]
+ \definefontsynonym [cmbx5] [LMRoman5-Bold]
+ \definefontsynonym [cmbx6] [LMRoman6-Bold]
+ \definefontsynonym [cmbx7] [LMRoman7-Bold]
+ \definefontsynonym [cmbx8] [LMRoman8-Bold]
+ \definefontsynonym [cmbx9] [LMRoman9-Bold]
+ \definefontsynonym [cmbx10] [LMRoman10-Bold]
+ \definefontsynonym [cmbx12] [LMRoman12-Bold]
+ \definefontsynonym [cmsl10] [LMRoman10-Oblique]
+ \definefontsynonym [cmsl12] [LMRoman12-Oblique]
+ \definefontsynonym [cmsl17] [LMRoman17-Oblique]
+ \definefontsynonym [cmsl8] [LMRoman8-Oblique]
+ \definefontsynonym [cmsl9] [LMRoman9-Oblique]
+ \definefontsynonym [cmti7] [LMRoman7-Italic]
+ \definefontsynonym [cmti8] [LMRoman8-Italic]
+ \definefontsynonym [cmti9] [LMRoman9-Italic]
+ \definefontsynonym [cmti10] [LMRoman10-Italic]
+ \definefontsynonym [cmti12] [LMRoman12-Italic]
+ \definefontsynonym [cmbsl10] [LMRoman10-DemiOblique]
+ \definefontsynonym [cmbxsl10] [LMRoman10-BoldOblique]
+ \definefontsynonym [cmbxti10] [LMRoman10-BoldItalic]
+ \definefontsynonym [cmcsc10] [LMRoman10-CapsRegular]
+ \definefontsynonym [cmcscsl10][LMRoman10-CapsOblique]
+
+ %definefontsynonym [cmb10]
+\stoptypescript
+
+\starttypescript [sans] [modern,latin-modern,computer-modern]
+ \definefontsynonym [cmss8] [LMSans8-Regular]
+ \definefontsynonym [cmss9] [LMSans9-Regular]
+ \definefontsynonym [cmss10] [LMSans10-Regular]
+ \definefontsynonym [cmss12] [LMSans12-Regular]
+ \definefontsynonym [cmss17] [LMSans17-Regular]
+ \definefontsynonym [cmssi10] [LMSans10-Oblique]
+ \definefontsynonym [cmssi12] [LMSans12-Oblique]
+ \definefontsynonym [cmssi17] [LMSans17-Oblique]
+ \definefontsynonym [cmssi8] [LMSans8-Oblique]
+ \definefontsynonym [cmssi9] [LMSans9-Oblique]
+ \definefontsynonym [cmssq8] [LMSansQuotation8-Regular]
+ \definefontsynonym [cmssqb8] [LMSansQuotation8-Bold]
+ \definefontsynonym [cmssqbi8] [LMSansQuotation8-BoldOblique]
+ \definefontsynonym [cmssqi8] [LMSansQuotation8-Oblique]
+ \definefontsynonym [cmssbx10] [LMSans10-Bold]
+ \definefontsynonym [cmssdc10] [LMSans10-DemiCondensed]
+ \definefontsynonym [cmssbi10] [LMSans10-BoldOblique]
+ \definefontsynonym [cmssdi10] [LMSans10-DemiCondensedOblique]
+\stoptypescript
+
+\starttypescript [mono] [modern,latin-modern,computer-modern]
+ \definefontsynonym [cmtt8] [LMTypewriter8-Regular]
+ \definefontsynonym [cmtt9] [LMTypewriter9-Regular]
+ \definefontsynonym [cmtt10] [LMTypewriter10-Regular]
+ \definefontsynonym [cmtt12] [LMTypewriter12-Regular]
+ \definefontsynonym [cmitt10] [LMTypewriter10-Italic]
+ \definefontsynonym [cmsltt10] [LMTypewriter10-Oblique]
+ \definefontsynonym [cmvtt10] [LMTypewriterVarWd10-Regular]
+ \definefontsynonym [cmvtti10] [LMTypewriterVarWd10-Oblique]
+ \definefontsynonym [cmtcsc10] [LMTypewriter10-CapsRegular]
+\stoptypescript
+
+\starttypescript [math] [modern,latin-modern,computer-modern]
+ \definefontsynonym [cmbsy5] [LMMathSymbols5-BoldItalic]
+ \definefontsynonym [cmbsy7] [LMMathSymbols7-BoldItalic]
+ \definefontsynonym [cmbsy10] [LMMathSymbols10-BoldItalic]
+ \definefontsynonym [cmsy5] [LMMathSymbols5-Italic]
+ \definefontsynonym [cmsy6] [LMMathSymbols6-Italic]
+ \definefontsynonym [cmsy7] [LMMathSymbols7-Italic]
+ \definefontsynonym [cmsy8] [LMMathSymbols8-Italic]
+ \definefontsynonym [cmsy9] [LMMathSymbols9-Italic]
+ \definefontsynonym [cmsy10] [LMMathSymbols10-Italic]
+ \definefontsynonym [cmex10] [LMMathExtension10-Regular]
+ \definefontsynonym [cmmi5] [LMMathItalic5-Italic]
+ \definefontsynonym [cmmi6] [LMMathItalic6-Italic]
+ \definefontsynonym [cmmi7] [LMMathItalic7-Italic]
+ \definefontsynonym [cmmi8] [LMMathItalic8-Italic]
+ \definefontsynonym [cmmi9] [LMMathItalic9-Italic]
+ \definefontsynonym [cmmi10] [LMMathItalic10-Italic]
+ \definefontsynonym [cmmi12] [LMMathItalic12-Italic]
+ \definefontsynonym [cmmib5] [LMMathItalic5-BoldItalic]
+ \definefontsynonym [cmmib7] [LMMathItalic7-BoldItalic]
+ \definefontsynonym [cmmib10] [LMMathItalic10-BoldItalic]
+\stoptypescript
+
+% This will change some day.
+
+\starttypescript [math] [modern,computer-modern,latin-modern] [name]
+ \definefontsynonym [OldStyle] [MathItalic]
+ \definefontsynonym [Fraktur] [eufm10]
+ \definefontsynonym [Blackboard] [msbm10]
+ \definefontsynonym [Gothic] [eufm10]
+ \definefontsynonym [Calligraphic] [cmsy10]
+\stoptypescript
+
+% Concrete Modern Roman : Donald Knuth
+
+\starttypescript [serif] [concrete] [name]
+ \definefontsynonym [Serif] [ComputerConcrete]
+ \definefontsynonym [SerifBold] [ComputerConcrete]
+ \definefontsynonym [SerifItalic] [ComputerConcrete-Italic]
+ \definefontsynonym [SerifSlanted] [ComputerConcrete-Slanted]
+ \definefontsynonym [SerifBoldItalic] [ComputerConcrete-Italic]
+ \definefontsynonym [SerifBoldSlanted] [ComputerConcrete-Slanted]
+ \definefontsynonym [SerifCaps] [ComputerConcrete-Caps]
+\stoptypescript
+
+% Euler : Hermann Zapf
+
+\starttypescript [math] [euler] [name]
+ \definefontsynonym [MathRoman] [Euler-Roman] % mr
+ \definefontsynonym [MathItalic] [Euler-Fraktur] % mi
+ \definefontsynonym [MathExtension] [Euler-Extension] % ex
+ \definefontsynonym [MathSymbol] [Euler-Symbol] % sy
+\stoptypescript
+
+\starttypescript [boldmath] [euler] [name]
+ \definefontsynonym [MathRoman] [Euler-Roman-Bold] % mr
+ \definefontsynonym [MathItalic] [Euler-Fraktur-Bold] % mi
+ \definefontsynonym [MathExtension] [Euler-Extension] % ex
+ \definefontsynonym [MathSymbol] [Euler-Symbol-Bold] % sy
+\stoptypescript
+
+\starttypescript [bfmath] [euler] [name]
+ \definefontsynonym [MathRomanBold] [Euler-Roman-Bold] % mr
+ \definefontsynonym [MathItalicBold] [Euler-Fraktur-Bold] % mi
+ \definefontsynonym [MathExtension] [Euler-Extension] % ex
+ \definefontsynonym [MathSymbolBold] [Euler-Symbol-Bold] % sy
+\stoptypescript
+
+\starttypescript [math] [euler] [name]
+ \definefontsynonym [OldStyle] [MathItalic]
+ \definefontsynonym [Fraktur] [MathItalic]
+ \definefontsynonym [Gothic] [MathItalic]
+ \definefontsynonym [Calligraphic] [MathSymbol]
+\stoptypescript
+
+\starttypescript [boldmath] [euler] [name]
+ \definefontsynonym [OldStyle] [MathItalicBold]
+ \definefontsynonym [Fraktur] [MathItalicBold]
+ \definefontsynonym [Gothic] [MathItalicBold]
+ \definefontsynonym [Calligraphic] [MathSymbolBold]
+\stoptypescript
+
+\starttypescript [math,boldmath,bfmath] [euler] [name]
+ \usemathcollection[eul]
+\stoptypescript
+
+% American Math Society : Michael Spivak
+
+\starttypescript [math] [modern,computer-modern,latin-modern,ams] [name]
+ \definefontsynonym [MathAlpha] [AMS-SymbolA]
+ \definefontsynonym [MathBeta] [AMS-SymbolB]
+\stoptypescript
+
+% Antykwa Torunska :
+
+\starttypescript [serif] [antykwa-torunska] [name]
+ \definefontsynonym [Serif] [AntykwaTorunska-Regular]
+ \definefontsynonym [SerifBold] [AntykwaTorunska-Bold]
+ \definefontsynonym [SerifItalic] [AntykwaTorunska-Italic]
+ \definefontsynonym [SerifSlanted] [AntykwaTorunska-Italic]
+ \definefontsynonym [SerifBoldItalic] [AntykwaTorunska-BoldItalic]
+ \definefontsynonym [SerifBoldSlanted] [AntykwaTorunska-BoldItalic]
+ \definefontsynonym [SerifCaps] [AntykwaTorunska-Cap]
+\stoptypescript
+
+\starttypescript [serif] [antykwa-torunska-light] [name]
+ \definefontsynonym [Serif] [AntykwaTorunska-Light]
+ \definefontsynonym [SerifBold] [AntykwaTorunska-Medium]
+ \definefontsynonym [SerifItalic] [AntykwaTorunska-LightItalic]
+ \definefontsynonym [SerifSlanted] [AntykwaTorunska-LightItalic]
+ \definefontsynonym [SerifBoldItalic] [AntykwaTorunska-MedItalic]
+ \definefontsynonym [SerifBoldSlanted] [AntykwaTorunska-MedItalic]
+ \definefontsynonym [SerifCaps] [AntykwaTorunska-LightCap]
+\stoptypescript
+
+\starttypescript [serif] [antykwa-torunska-cond] [name]
+ \definefontsynonym [Serif] [AntykwaTorunska-CondRegular]
+ \definefontsynonym [SerifBold] [AntykwaTorunska-CondBold]
+ \definefontsynonym [SerifItalic] [AntykwaTorunska-CondItalic]
+ \definefontsynonym [SerifSlanted] [AntykwaTorunska-CondItalic]
+ \definefontsynonym [SerifBoldItalic] [AntykwaTorunska-CondBoldItalic]
+ \definefontsynonym [SerifBoldSlanted] [AntykwaTorunska-CondBoldItalic]
+ \definefontsynonym [SerifCaps] [AntykwaTorunska-CondCap]
+\stoptypescript
+
+\starttypescript [serif] [antykwa-torunska-lightcond] [name]
+ \definefontsynonym [Serif] [AntykwaTorunska-CondLight]
+ \definefontsynonym [SerifBold] [AntykwaTorunska-CondMedium]
+ \definefontsynonym [SerifItalic] [AntykwaTorunska-CondLightItalic]
+ \definefontsynonym [SerifSlanted] [AntykwaTorunska-CondLightItalic]
+ \definefontsynonym [SerifBoldItalic] [AntykwaTorunska-CondMedItalic]
+ \definefontsynonym [SerifBoldSlanted] [AntykwaTorunska-CondMedItalic]
+ \definefontsynonym [SerifCaps] [AntykwaTorunska-CondLightCap]
+\stoptypescript
+
+\starttypescript [serif] [antykwa-torunska] [name]
+ \definefontsynonym [SerifRegular] [Serif]
+ \definefontsynonym [SerifRegularCaps] [AntykwaTorunska-Cap]
+ \definefontsynonym [SerifBoldCaps] [AntykwaTorunska-BoldCap]
+ \definefontsynonym [SerifItalicCaps] [AntykwaTorunska-ItalicCap]
+ \definefontsynonym [SerifSlantedCaps] [AntykwaTorunska-ItalicCap]
+ \definefontsynonym [SerifBoldItalicCaps] [AntykwaTorunska-BoldItalicCap]
+ \definefontsynonym [SerifBoldSlantedCaps] [AntykwaTorunska-BoldItalicCap]
+ \definefontsynonym [SerifCapsCaps] [AntykwaTorunska-Cap]
+
+ \definefontvariant [Serif][osf][Caps]
+ \definefontvariant [Serif][sc] [Caps]
+
+ \definefontsynonym [SerifRegularLight] [AntykwaTorunska-Light]
+ \definefontsynonym [SerifBoldLight] [AntykwaTorunska-Medium]
+ \definefontsynonym [SerifItalicLight] [AntykwaTorunska-LightItalic]
+ \definefontsynonym [SerifSlantedLight] [AntykwaTorunska-LightItalic]
+ \definefontsynonym [SerifBoldItalicLight] [AntykwaTorunska-MedItalic]
+ \definefontsynonym [SerifBoldSlantedLight] [AntykwaTorunska-MedItalic]
+ \definefontsynonym [SerifCapsLight] [AntykwaTorunska-LightCap]
+
+ \definefontvariant [Serif][lt][Light]
+
+ \definefontsynonym [SerifRegularCond] [AntykwaTorunska-CondRegular]
+ \definefontsynonym [SerifBoldCond] [AntykwaTorunska-CondBold]
+ \definefontsynonym [SerifItalicCond] [AntykwaTorunska-CondItalic]
+ \definefontsynonym [SerifSlantedCond] [AntykwaTorunska-CondItalic]
+ \definefontsynonym [SerifBoldItalicCond] [AntykwaTorunska-CondBoldItalic]
+ \definefontsynonym [SerifBoldSlantedCond] [AntykwaTorunska-CondBoldItalic]
+ \definefontsynonym [SerifCapsCond] [AntykwaTorunska-CondCap]
+
+ \definefontvariant [Serif][cond][Cond]
+
+\stoptypescript
+
+\starttypescript [serif] [antykwa-torunska-light] [name]
+ \definefontsynonym [SerifRegular] [Serif]
+ \definefontsynonym [SerifRegularCaps] [AntykwaTorunska-LightCap]
+ \definefontsynonym [SerifBoldCaps] [AntykwaTorunska-MediumCap]
+ \definefontsynonym [SerifItalicCaps] [AntykwaTorunska-LightItalicCap]
+ \definefontsynonym [SerifSlantedCaps] [AntykwaTorunska-LightItalicCap]
+ \definefontsynonym [SerifBoldItalicCaps] [AntykwaTorunska-MedItalicCap]
+ \definefontsynonym [SerifBoldSlantedCaps] [AntykwaTorunska-MedItalicCap]
+ \definefontsynonym [SerifCapsCaps] [AntykwaTorunska-LightCap]
+
+ \definefontvariant [Serif][osf][Caps]
+ \definefontvariant [Serif][sc] [Caps]
+
+ \definefontsynonym [SerifRegularDark] [AntykwaTorunska-Regular]
+ \definefontsynonym [SerifBoldDark] [AntykwaTorunska-Bold]
+ \definefontsynonym [SerifItalicDark] [AntykwaTorunska-Italic]
+ \definefontsynonym [SerifSlantedDark] [AntykwaTorunska-Italic]
+ \definefontsynonym [SerifBoldItalicDark] [AntykwaTorunska-BoldItalic]
+ \definefontsynonym [SerifBoldSlantedDark] [AntykwaTorunska-BoldItalic]
+ \definefontsynonym [SerifCapsDark] [AntykwaTorunska-Cap]
+
+ \definefontvariant [Serif][dk][Dark]
+
+ \definefontsynonym [SerifRegularCond] [AntykwaTorunska-CondLight]
+ \definefontsynonym [SerifBoldCond] [AntykwaTorunska-CondMedium]
+ \definefontsynonym [SerifItalicCond] [AntykwaTorunska-CondLightItalic]
+ \definefontsynonym [SerifSlantedCond] [AntykwaTorunska-CondLightItalic]
+ \definefontsynonym [SerifBoldItalicCond] [AntykwaTorunska-CondMedItalic]
+ \definefontsynonym [SerifBoldSlantedCond] [AntykwaTorunska-CondMedItalic]
+ \definefontsynonym [SerifCapsCond] [AntykwaTorunska-CondLightCap]
+
+ \definefontvariant [Serif][cond][Cond]
+
+\stoptypescript
+
+\starttypescript [serif] [antykwa-torunska-cond] [name]
+ \definefontsynonym [SerifRegular] [Serif]
+ \definefontsynonym [SerifRegularCaps] [AntykwaTorunska-CondCap]
+ \definefontsynonym [SerifBoldCaps] [AntykwaTorunska-CondBoldCap]
+ \definefontsynonym [SerifItalicCaps] [AntykwaTorunska-CondItalicCap]
+ \definefontsynonym [SerifSlantedCaps] [AntykwaTorunska-CondItalicCap]
+ \definefontsynonym [SerifBoldItalicCaps] [AntykwaTorunska-CondBoldItalicCap]
+ \definefontsynonym [SerifBoldSlantedCaps] [AntykwaTorunska-CondBoldItalicCap]
+ \definefontsynonym [SerifCapsCaps] [AntykwaTorunska-CondCap]
+
+ \definefontvariant [Serif][osf][Caps]
+ \definefontvariant [Serif][sc] [Caps]
+
+ \definefontsynonym [SerifRegularLight] [AntykwaTorunska-CondLight]
+ \definefontsynonym [SerifBoldLight] [AntykwaTorunska-CondMedium]
+ \definefontsynonym [SerifItalicLight] [AntykwaTorunska-CondLightItalic]
+ \definefontsynonym [SerifSlantedLight] [AntykwaTorunska-CondLightItalic]
+ \definefontsynonym [SerifBoldItalicLight] [AntykwaTorunska-CondMedItalic]
+ \definefontsynonym [SerifBoldSlantedLight] [AntykwaTorunska-CondMedItalic]
+ \definefontsynonym [SerifCapsLight] [AntykwaTorunska-CondLightCap]
+
+ \definefontvariant [Serif][lt][Light]
+
+ \definefontsynonym [SerifRegularExp] [AntykwaTorunska-Regular]
+ \definefontsynonym [SerifBoldExp] [AntykwaTorunska-Bold]
+ \definefontsynonym [SerifItalicExp] [AntykwaTorunska-Italic]
+ \definefontsynonym [SerifSlantedExp] [AntykwaTorunska-Italic]
+ \definefontsynonym [SerifBoldItalicExp] [AntykwaTorunska-BoldItalic]
+ \definefontsynonym [SerifBoldSlantedExp] [AntykwaTorunska-BoldItalic]
+ \definefontsynonym [SerifCapsExp] [AntykwaTorunska-Cap]
+
+ \definefontvariant [Serif][exp][Exp]
+
+\stoptypescript
+
+\starttypescript [serif] [antykwa-torunska-lightcond] [name]
+ \definefontsynonym [SerifRegular] [Serif]
+ \definefontsynonym [SerifRegularCaps] [AntykwaTorunska-CondLightCap]
+ \definefontsynonym [SerifBoldCaps] [AntykwaTorunska-CondMediumCap]
+ \definefontsynonym [SerifItalicCaps] [AntykwaTorunska-CondLightItalicCap]
+ \definefontsynonym [SerifSlantedCaps] [AntykwaTorunska-CondLightItalicCap]
+ \definefontsynonym [SerifBoldItalicCaps] [AntykwaTorunska-CondMedItalicCap]
+ \definefontsynonym [SerifBoldSlantedCaps] [AntykwaTorunska-CondMedItalicCap]
+ \definefontsynonym [SerifCapsCaps] [AntykwaTorunska-CondLightCap]
+
+ \definefontvariant [Serif][osf][Caps]
+ \definefontvariant [Serif][sc] [Caps]
+
+ \definefontsynonym [SerifRegularDark] [AntykwaTorunska-CondRegular]
+ \definefontsynonym [SerifBoldDark] [AntykwaTorunska-CondBold]
+ \definefontsynonym [SerifItalicDark] [AntykwaTorunska-CondItalic]
+ \definefontsynonym [SerifSlantedDark] [AntykwaTorunska-CondItalic]
+ \definefontsynonym [SerifBoldItalicDark] [AntykwaTorunska-CondBoldItalic]
+ \definefontsynonym [SerifBoldSlantedDark] [AntykwaTorunska-CondBoldItalic]
+ \definefontsynonym [SerifCapsDark] [AntykwaTorunska-CondCap]
+
+ \definefontvariant [Serif][dk][Dark]
+
+ \definefontsynonym [SerifRegularExp] [AntykwaTorunska-Light]
+ \definefontsynonym [SerifBoldExp] [AntykwaTorunska-Medium]
+ \definefontsynonym [SerifItalicExp] [AntykwaTorunska-LightItalic]
+ \definefontsynonym [SerifSlantedExp] [AntykwaTorunska-LightItalic]
+ \definefontsynonym [SerifBoldItalicExp] [AntykwaTorunska-MedItalic]
+ \definefontsynonym [SerifBoldSlantedExp] [AntykwaTorunska-MedItalic]
+ \definefontsynonym [SerifCapsExp] [AntykwaTorunska-LightCap]
+
+ \definefontvariant [Serif][exp][Exp]
+
+\stoptypescript
+
+% maybe no -Regular etc
+
+\starttypescript [math] [antykwa-torunska-light] [name]
+ \definefontsynonym [MathRoman] [AntykwaTorunska-Math-Letters-Light]
+ \definefontsynonym [MathItalic] [AntykwaTorunska-Math-Letters-LightItalic]
+ \definefontsynonym [MathSymbol] [AntykwaTorunska-Math-Symbols-Light]
+ \definefontsynonym [MathExtension] [AntykwaTorunska-Math-Extension-Light]
+\stoptypescript
+
+\starttypescript [math] [antykwa-torunska] [name]
+ \definefontsynonym [MathRoman] [AntykwaTorunska-Math-Letters-Regular]
+ \definefontsynonym [MathItalic] [AntykwaTorunska-Math-Letters-Italic]
+ \definefontsynonym [MathSymbol] [AntykwaTorunska-Math-Symbols-Regular]
+ \definefontsynonym [MathExtension] [AntykwaTorunska-Math-Extension-Regular]
+\stoptypescript
+
+\starttypescript [math] [antykwa-torunska-cond] [name]
+ \definefontsynonym [MathRoman] [AntykwaTorunska-Math-Letters-CondRegular]
+ \definefontsynonym [MathItalic] [AntykwaTorunska-Math-Letters-CondItalic]
+ \definefontsynonym [MathSymbol] [AntykwaTorunska-Math-Symbols-CondRegular]
+ \definefontsynonym [MathExtension] [AntykwaTorunska-Math-Extension-CondRegular]
+\stoptypescript
+
+\starttypescript [math] [antykwa-torunska-lightcond] [name]
+ \definefontsynonym [MathRoman] [AntykwaTorunska-Math-Letters-CondLight]
+ \definefontsynonym [MathItalic] [AntykwaTorunska-Math-Letters-CondLightItalic]
+ \definefontsynonym [MathSymbol] [AntykwaTorunska-Math-Symbols-CondLight]
+ \definefontsynonym [MathExtension] [AntykwaTorunska-Math-Extension-CondLight]
+\stoptypescript
+
+% Antykwa Poltawskiego :
+
+\starttypescript [serif] [antykwa-poltawskiego] [name]
+ \definefontsynonym [Serif] [AntykwaPoltawskiego-Regular]
+ \definefontsynonym [SerifBold] [AntykwaPoltawskiego-Bold]
+ \definefontsynonym [SerifItalic] [AntykwaPoltawskiego-Italic]
+ \definefontsynonym [SerifSlanted] [AntykwaPoltawskiego-Italic]
+ \definefontsynonym [SerifBoldItalic] [AntykwaPoltawskiego-Bold]
+ \definefontsynonym [SerifBoldSlanted] [AntykwaPoltawskiego-Bold]
+ \definefontsynonym [SerifCaps] [AntykwaPoltawskiego-Regular]
+\stoptypescript
+
+% Iwona
+
+\starttypescript [sans] [iwona-light] [name]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [Iwona-Light-Regular]
+ \definefontsynonym [SansItalic] [Iwona-Light-Italic]
+ \definefontsynonym [SansBold] [Iwona-Medium-Regular]
+ \definefontsynonym [SansBoldItalic] [Iwona-Medium-Italic]
+ \definefontsynonym [SansCaps] [Iwona-CapsLight]
+ \definefontsynonym [SansItalicCaps] [Iwona-CapsLightItalic]
+ \definefontsynonym [SansBoldCaps] [Iwona-CapsMedium]
+ \definefontsynonym [SansBoldItalicCaps] [Iwona-CapsMediumItalic]
+\stoptypescript
+
+\starttypescript [sans] [iwona-light-caps] [name]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [Iwona-CapsLight-Regular]
+ \definefontsynonym [SansItalic] [Iwona-CapsLight-Italic]
+ \definefontsynonym [SansBold] [Iwona-CapsMedium-Regular]
+ \definefontsynonym [SansBoldItalic] [Iwona-CapsMedium-Italic]
+\stoptypescript
+
+\starttypescript [sans] [iwona] [name]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [Iwona-Regular]
+ \definefontsynonym [SansItalic] [Iwona-Italic]
+ \definefontsynonym [SansBold] [Iwona-Bold]
+ \definefontsynonym [SansBoldItalic] [Iwona-BoldItalic]
+ \definefontsynonym [SansCaps] [Iwona-CapsRegular]
+ \definefontsynonym [SansItalicCaps] [Iwona-CapsItalic]
+ \definefontsynonym [SansBoldCaps] [Iwona-CapsBold]
+ \definefontsynonym [SansBoldItalicCaps] [Iwona-CapsBoldItalic]
+\stoptypescript
+
+\starttypescript [sans] [iwona-caps] [name]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [Iwona-CapsRegular]
+ \definefontsynonym [SansItalic] [Iwona-CapsItalic]
+ \definefontsynonym [SansBold] [Iwona-CapsBold]
+ \definefontsynonym [SansBoldItalic] [Iwona-CapsBoldItalic]
+\stoptypescript
+
+\starttypescript [sans] [iwona-medium] [name]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [Iwona-Medium-Regular]
+ \definefontsynonym [SansItalic] [Iwona-Medium-Italic]
+ \definefontsynonym [SansBold] [Iwona-Heavy-Regular]
+ \definefontsynonym [SansBoldItalic] [Iwona-Heavy-Italic]
+ \definefontsynonym [SansCaps] [Iwona-CapsHeavy-Regular]
+ \definefontsynonym [SansItalicCaps] [Iwona-CapsMedium-Italic]
+ \definefontsynonym [SansBoldCaps] [Iwona-CapsHeavy-Regular]
+ \definefontsynonym [SansBoldItalicCaps] [Iwona-CapsHeavy-Italic]
+\stoptypescript
+
+\starttypescript [sans] [iwona-medium-caps] [name]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [Iwona-CapsHeavy-Regular]
+ \definefontsynonym [SansItalic] [Iwona-CapsMedium-Italic]
+ \definefontsynonym [SansBold] [Iwona-CapsHeavy-Regular]
+ \definefontsynonym [SansBoldItalic] [Iwona-CapsHeavy-Italic]
+\stoptypescript
+
+\starttypescript [sans] [iwona-heavy] [name]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [Iwona-Heavy-Regular]
+ \definefontsynonym [SansItalic] [Iwona-Heavy-Italic]
+ \definefontsynonym [SansBold] [Iwona-Heavy-Regular]
+ \definefontsynonym [SansBoldItalic] [Iwona-Heavy-Italic]
+ \definefontsynonym [SansCaps] [Iwona-CapsHeavy-Regular]
+ \definefontsynonym [SansItalicCaps] [Iwona-CapsHeavy-Italic]
+ \definefontsynonym [SansBoldCaps] [Iwona-CapsHeavy-Regular]
+ \definefontsynonym [SansBoldItalicCaps] [Iwona-CapsHeavy-Italic]
+\stoptypescript
+
+\starttypescript [sans] [iwona-heavy-caps] [name]
+ \setups[font:fallback:sans]
+ \definefontsynonym [SansCaps] [Iwona-CapsHeavy-Regular]
+ \definefontsynonym [SansItalicCaps] [Iwona-CapsHeavy-Italic]
+ \definefontsynonym [SansBoldCaps] [Iwona-CapsHeavy-Regular]
+ \definefontsynonym [SansBoldItalicCaps] [Iwona-CapsHeavy-Italic]
+\stoptypescript
+
+\starttypescript [sans] [iwona-light-cond] [name]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [Iwona-CondLight-Regular]
+ \definefontsynonym [SansItalic] [Iwona-CondLight-Italic]
+ \definefontsynonym [SansBold] [Iwona-CondMedium-Regular]
+ \definefontsynonym [SansBoldItalic] [Iwona-CondMedium-Italic]
+ \definefontsynonym [SansCaps] [Iwona-CapsCondLight-Regular]
+ \definefontsynonym [SansItalicCaps] [Iwona-CapsCondLight-Italic]
+ \definefontsynonym [SansBoldCaps] [Iwona-CapsCondMedium-Regular]
+ \definefontsynonym [SansBoldItalicCaps] [Iwona-CapsCondMedium-Italic]
+\stoptypescript
+
+\starttypescript [sans] [iwona-light-cond-caps,iwona-light-caps-cond] [name]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [Iwona-CapsCondLight-Regular]
+ \definefontsynonym [SansItalic] [Iwona-CapsCondLight-Italic]
+ \definefontsynonym [SansBold] [Iwona-CapsCondMedium-Regular]
+ \definefontsynonym [SansBoldItalic] [Iwona-CapsCondMedium-Italic]
+\stoptypescript
+
+\starttypescript [sans] [iwona-cond] [name]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [Iwona-CondRegular]
+ \definefontsynonym [SansItalic] [Iwona-CondItalic]
+ \definefontsynonym [SansBold] [Iwona-CondBold]
+ \definefontsynonym [SansBoldItalic] [Iwona-CondBoldItalic]
+ \definefontsynonym [SansCaps] [Iwona-CapsCondRegular]
+ \definefontsynonym [SansItalicCaps] [Iwona-CapsCondItalic]
+ \definefontsynonym [SansBoldCaps] [Iwona-CapsCondBold]
+ \definefontsynonym [SansBoldItalicCaps] [Iwona-CapsCondBoldItalic]
+\stoptypescript
+
+\starttypescript [sans] [iwona-cond-caps,iwona-caps-cond] [name]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [Iwona-CapsCondRegular]
+ \definefontsynonym [SansItalic] [Iwona-CapsCondItalic]
+ \definefontsynonym [SansBold] [Iwona-CapsCondBold]
+ \definefontsynonym [SansBoldItalic] [Iwona-CapsCondBoldItalic]
+\stoptypescript
+
+\starttypescript [sans] [iwona-medium-cond] [name]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [Iwona-CondMedium-Regular]
+ \definefontsynonym [SansItalic] [Iwona-CondMedium-Italic]
+ \definefontsynonym [SansBold] [Iwona-CondHeavy-Regular]
+ \definefontsynonym [SansBoldItalic] [Iwona-CondHeavy-Italic]
+ \definefontsynonym [SansCaps] [Iwona-CapsCondHeavy-Regular]
+ \definefontsynonym [SansItalicCaps] [Iwona-CapsCondMedium-Italic]
+ \definefontsynonym [SansBoldCaps] [Iwona-CapsCondHeavy-Regular]
+ \definefontsynonym [SansBoldItalicCaps] [Iwona-CapsCondHeavy-Italic]
+\stoptypescript
+
+\starttypescript [sans] [iwona-medium-cond-caps,iwona-medium-caps-cond] [name]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [Iwona-CapsCondHeavy-Regular]
+ \definefontsynonym [SansItalic] [Iwona-CapsCondMedium-Italic]
+ \definefontsynonym [SansBold] [Iwona-CapsCondHeavy-Regular]
+ \definefontsynonym [SansBoldItalic] [Iwona-CapsCondHeavy-Italic]
+\stoptypescript
+
+\starttypescript [math] [iwona-light] [name]
+ \definefontsynonym [MathRoman] [Iwona-Math-Letters-Light-Regular]
+ \definefontsynonym [MathItalic] [Iwona-Math-Letters-Light-Italic]
+ \definefontsynonym [MathSymbol] [Iwona-Math-Symbols-Light]
+ \definefontsynonym [MathExtension] [Iwona-Math-Extension-Light]
+\stoptypescript
+
+\starttypescript [math] [iwona] [name]
+ \definefontsynonym [MathRoman] [Iwona-Math-Letters-Regular]
+ \definefontsynonym [MathItalic] [Iwona-Math-Letters-Italic]
+ \definefontsynonym [MathSymbol] [Iwona-Math-Symbols-Regular]
+ \definefontsynonym [MathExtension] [Iwona-Math-Extension-Regular]
+\stoptypescript
+
+\starttypescript [math] [iwona-medium] [name]
+ \definefontsynonym [MathRoman] [Iwona-Math-Letters-Medium-Regular]
+ \definefontsynonym [MathItalic] [Iwona-Math-Letters-Medium-Italic]
+ \definefontsynonym [MathSymbol] [Iwona-Math-Symbols-Medium]
+ \definefontsynonym [MathExtension] [Iwona-Math-Extension-Medium]
+\stoptypescript
+
+\starttypescript [math] [iwona-heavy] [name]
+ \definefontsynonym [MathRoman] [Iwona-Math-Letters-Heavy-Regular]
+ \definefontsynonym [MathItalic] [Iwona-Math-Letters-Heavy-Italic]
+ \definefontsynonym [MathSymbol] [Iwona-Math-Symbols-Heavy]
+ \definefontsynonym [MathExtension] [Iwona-Math-Extension-Heavy]
+\stoptypescript
+
+% Kurier
+
+\starttypescript [sans] [kurier-light] [name]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [Kurier-Light-Regular]
+ \definefontsynonym [SansItalic] [Kurier-Light-Italic]
+ \definefontsynonym [SansBold] [Kurier-Medium-Regular]
+ \definefontsynonym [SansBoldItalic] [Kurier-Medium-Italic]
+\stoptypescript
+
+\starttypescript [sans] [kurier] [name]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [Kurier-Regular]
+ \definefontsynonym [SansItalic] [Kurier-Italic]
+ \definefontsynonym [SansBold] [Kurier-Bold]
+ \definefontsynonym [SansBoldItalic] [Kurier-BoldItalic]
+\stoptypescript
+
+\starttypescript [sans] [kurier-medium] [name]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [Kurier-Medium-Regular]
+ \definefontsynonym [SansItalic] [Kurier-Medium-Italic]
+ \definefontsynonym [SansBold] [Kurier-Heavy-Regular]
+ \definefontsynonym [SansBoldItalic] [Kurier-Heavy-Italic]
+\stoptypescript
+
+\starttypescript [math] [kurier-light] [name]
+ \definefontsynonym [MathRoman] [Kurier-Math-Letters-Light-Regular]
+ \definefontsynonym [MathItalic] [Kurier-Math-Letters-Light-Italic]
+ \definefontsynonym [MathSymbol] [Kurier-Math-Symbols-Light]
+ \definefontsynonym [MathExtension] [Kurier-Math-Extension-Light]
+\stoptypescript
+
+\starttypescript [math] [kurier] [name]
+ \definefontsynonym [MathRoman] [Kurier-Math-Letters-Regular]
+ \definefontsynonym [MathItalic] [Kurier-Math-Letters-Italic]
+ \definefontsynonym [MathSymbol] [Kurier-Math-Symbols-Regular]
+ \definefontsynonym [MathExtension] [Kurier-Math-Extension-Regular]
+\stoptypescript
+
+\starttypescript [math] [kurier-medium] [name]
+ \definefontsynonym [MathRoman] [Kurier-Math-Letters-Medium-Regular]
+ \definefontsynonym [MathItalic] [Kurier-Math-Letters-Medium-Italic]
+ \definefontsynonym [MathSymbol] [Kurier-Math-Symbols-Medium]
+ \definefontsynonym [MathExtension] [Kurier-Math-Extension-Medium]
+\stoptypescript
+
+% Bookman :
+
+\starttypescript [serif] [bookman] [name]
+ \definefontsynonym [Serif] [Bookman-Light]
+ \definefontsynonym [SerifItalic] [Bookman-LightItalic]
+ \definefontsynonym [SerifBold] [Bookman-DemiBold]
+ \definefontsynonym [SerifBoldItalic] [Bookman-DemiBoldItalic]
+ \definefontsynonym [SerifSlanted] [Bookman-LightSlanted]
+ \definefontsynonym [SerifBoldSlanted] [Bookman-DemiBoldSlanted]
+ \definefontsynonym [SerifCaps] [Bookman-Light-Caps]
+\stoptypescript
+
+% Chancery : Zapf
+
+\starttypescript [calligraphy] [chancery] [name]
+ \definefontsynonym [Calligraphy] [Chancery]
+\stoptypescript
+
+% Schoolbook :
+
+\starttypescript [serif] [schoolbook] [name]
+ \definefontsynonym [Serif] [Schoolbook-Roman]
+ \definefontsynonym [SerifItalic] [Schoolbook-Italic]
+ \definefontsynonym [SerifBold] [Schoolbook-Bold]
+ \definefontsynonym [SerifBoldItalic] [Schoolbook-BoldItalic]
+ \definefontsynonym [SerifSlanted] [Schoolbook-RomanSlanted]
+ \definefontsynonym [SerifBoldSlanted] [Schoolbook-BoldSlanted]
+ \definefontsynonym [SerifCaps] [Schoolbook-Roman-Caps]
+\stoptypescript
+
+% Utopia : Adobe
+
+\starttypescript [serif] [utopia] [name]
+ \definefontsynonym [Serif] [Utopia-Regular]
+ \definefontsynonym [SerifItalic] [Utopia-Italic]
+ \definefontsynonym [SerifBold] [Utopia-Bold]
+ \definefontsynonym [SerifBoldItalic] [Utopia-BoldItalic]
+ \definefontsynonym [SerifSlanted] [Utopia-Slanted]
+ \definefontsynonym [SerifBoldSlanted] [Utopia-BoldSlanted]
+ \definefontsynonym [SerifCaps] [Utopia-Regular-Caps]
+\stoptypescript
+
+% Fourier : Michael Bovani
+
+\starttypescript [serif] [fourier] [name]
+ \definefontsynonym [Serif] [Fourier-Regular]
+ \definefontsynonym [SerifSlanted] [Fourier-Slanted]
+ \definefontsynonym [SerifItalic] [Fourier-Italic]
+ \definefontsynonym [SerifCaps] [Fourier-RegularCaps]
+ \definefontsynonym [SerifBold] [Fourier-Bold]
+ \definefontsynonym [SerifBoldSlanted] [Fourier-BoldSlanted]
+ \definefontsynonym [SerifBoldItalic] [Fourier-BoldItalic]
+ \definefontsynonym [SerifBoldCaps] [Fourier-BoldCaps]
+
+ \definefontsynonym [Serif-Expert] [Fourier-Regular-Expert]
+ \definefontsynonym [SerifSlanted-Expert] [Fourier-Slanted-Expert]
+ \definefontsynonym [SerifItalic-Expert] [Fourier-Italic-Expert]
+ \definefontsynonym [SerifCaps-Expert] [Fourier-RegularCaps-Expert]
+ \definefontsynonym [SerifSemiBold-Expert] [Fourier-Semi-Expert]
+ \definefontsynonym [SerifSemiSlanted-Expert] [Fourier-SemiSlanted-Expert]
+ \definefontsynonym [SerifSemiItalic-Expert] [Fourier-SemiItalic-Expert]
+ \definefontsynonym [SerifSemiCaps-Expert] [Fourier-SemiCaps-Expert]
+ \definefontsynonym [SerifBold-Expert] [Fourier-Bold-Expert]
+ \definefontsynonym [SerifBoldSlanted-Expert] [Fourier-BoldSlanted-Expert]
+ \definefontsynonym [SerifBoldItalic-Expert] [Fourier-BoldItalic-Expert]
+ \definefontsynonym [SerifBlack-Expert] [Fourier-Black-Expert]
+
+ \definefontsynonym [Serif-OldStyle] [Fourier-Regular-OldStyle]
+ \definefontsynonym [SerifSlanted-OldStyle] [Fourier-Slanted-OldStyle]
+ \definefontsynonym [SerifItalic-OldStyle] [Fourier-Italic-OldStyle]
+ \definefontsynonym [SerifCaps-OldStyle] [Fourier-RegularCaps-OldStyle]
+ \definefontsynonym [SerifSemiBold-OldStyle] [Fourier-Semi-OldStyle]
+ \definefontsynonym [SerifSemiSlanted-OldStyle] [Fourier-SemiSlanted-OldStyle]
+ \definefontsynonym [SerifSemiItalic-OldStyle] [Fourier-SemiItalic-OldStyle]
+ \definefontsynonym [SerifSemiCaps-OldStyle] [Fourier-SemiCaps-OldStyle]
+ \definefontsynonym [SerifBold-OldStyle] [Fourier-Bold-OldStyle]
+ \definefontsynonym [SerifBoldSlanted-OldStyle] [Fourier-BoldSlanted-OldStyle]
+ \definefontsynonym [SerifBoldItalic-OldStyle] [Fourier-BoldItalic-OldStyle]
+ \definefontsynonym [SerifBlack-OldStyle] [Fourier-Black-OldStyle]
+ \definefontsynonym [SerifBlackSlanted-OldStyle] [Fourier-BlackSlanted-OldStyle]
+\stoptypescript
+
+\starttypescript [math] [fourier] [name]
+ \definefontsynonym [MathRoman] [Fourier-Math-Letters]
+ \definefontsynonym [MathItalic] [Fourier-Math-Letters-Italic]
+ \definefontsynonym [MathSymbol] [Fourier-Math-Symbols]
+ \definefontsynonym [MathExtension] [Fourier-Math-Extension]
+\stoptypescript
+
+\starttypescript [math] [fourier] [name] % todo
+ \definefontsynonym [OldStyle] [Serif-OldStyle] % strange, no oldstyles
+ \definefontsynonym [Fraktur] [eufm10]
+ \definefontsynonym [Blackboard] [msbm10]
+ \definefontsynonym [Gothic] [eufm10]
+ \definefontsynonym [Calligraphic] [eusm10]
+\stoptypescript
+
+% Charter :
+
+\starttypescript [serif] [charter] [name]
+ \definefontsynonym [Serif] [Charter-Roman]
+ \definefontsynonym [SerifItalic] [Charter-Italic]
+ \definefontsynonym [SerifBold] [Charter-Bold]
+ \definefontsynonym [SerifBoldItalic] [Charter-BoldItalic]
+ \definefontsynonym [SerifSlanted] [Charter-Slanted]
+ \definefontsynonym [SerifBoldSlanted] [Charter-BoldSlanted]
+ \definefontsynonym [SerifCaps] [Charter-Roman-Caps]
+\stoptypescript
+
+% Times :
+
+\starttypescript [serif] [times] [name]
+ \definefontsynonym [Serif] [Times-Roman]
+ \definefontsynonym [SerifBold] [Times-Bold]
+ \definefontsynonym [SerifItalic] [Times-Italic]
+ \definefontsynonym [SerifSlanted] [Times-Italic]
+ \definefontsynonym [SerifBoldItalic] [Times-BoldItalic]
+ \definefontsynonym [SerifBoldSlanted] [Times-BoldItalic]
+ \definefontsynonym [SerifCaps] [Times-Caps]
+\stoptypescript
+
+\starttypescript [math] [times] [name]
+ \definefontsynonym [MathRoman] [Times-Roman-Upright]
+ \definefontsynonym [MathExtension] [Times-Math-Extension]
+ \definefontsynonym [MathItalic] [Times-Math-Italic]
+ \definefontsynonym [MathSymbol] [Times-Math-Symbols]
+ \definefontsynonym [MathAlpha] [Times-Math-SymbolsA]
+ \definefontsynonym [MathBeta] [Times-Math-SymbolsB]
+\stoptypescript
+
+\starttypescript [math] [times] [name]
+ \definefontsynonym [OldStyle] [MathItalic]
+ \definefontsynonym [Fraktur] [eufm10]
+ \definefontsynonym [Blackboard] [MathBeta]
+ \definefontsynonym [Gothic] [eufm10]
+ \definefontsynonym [Calligraphic] [eusm10]
+\stoptypescript
+
+% Helvetica :
+
+\starttypescript [sans] [helvetica] [name]
+ \definefontsynonym [Sans] [Helvetica]
+ \definefontsynonym [SansBold] [Helvetica-Bold]
+ \definefontsynonym [SansItalic] [Helvetica-Oblique]
+ \definefontsynonym [SansSlanted] [Helvetica-Oblique]
+ \definefontsynonym [SansBoldItalic] [Helvetica-BoldOblique]
+ \definefontsynonym [SansBoldSlanted] [Helvetica-BoldOblique]
+ \definefontsynonym [SansCaps] [Helvetica-Caps]
+\stoptypescript
+
+\starttypescript [math] [helvetica] [name]
+ \definefontsynonym [MathRoman] [Helvetica-MathRoman]
+ \definefontsynonym [MathExtension] [Helvetica-MathExtendedSymbols]
+ \definefontsynonym [MathItalic] [Helvetica-MathItalics]
+ \definefontsynonym [MathSymbol] [Helvetica-MathSymbols]
+\stoptypescript
+
+% Courier :
+
+\starttypescript [mono] [courier] [name]
+ \definefontsynonym [Mono] [Courier]
+ \definefontsynonym [MonoBold] [Courier-Bold]
+ \definefontsynonym [MonoItalic] [Courier-Oblique]
+ \definefontsynonym [MonoSlanted] [Courier-Oblique]
+ \definefontsynonym [MonoBoldItalic] [Courier-BoldOblique]
+ \definefontsynonym [MonoBoldSlanted] [Courier-BoldOblique]
+ \definefontsynonym [MonoCaps] [Courier-Caps]
+\stoptypescript
+
+% Palatino : Hermann Zapf / URW
+
+\starttypescript [serif] [palatino] [name]
+ \definefontsynonym [Serif] [Palatino]
+ \definefontsynonym [SerifBold] [Palatino-Bold]
+ \definefontsynonym [SerifItalic] [Palatino-Italic]
+ \definefontsynonym [SerifSlanted] [Palatino-Slanted]
+ \definefontsynonym [SerifBoldItalic] [Palatino-BoldItalic]
+ \definefontsynonym [SerifBoldSlanted] [Palatino-BoldSlanted]
+ \definefontsynonym [SerifCaps] [Palatino-Caps]
+\stoptypescript
+
+\starttypescript [math] [palatino] [name]
+ \definefontsynonym [MathRoman] [Palatino-Roman-Upright]
+ \definefontsynonym [MathExtension] [Palatino-Math-Extension]
+ \definefontsynonym [MathItalic] [Palatino-Math-Italic]
+ \definefontsynonym [MathSymbol] [Palatino-Math-Symbols]
+ \definefontsynonym [MathAlpha] [Palatino-Math-SymbolsA]
+ \definefontsynonym [MathBeta] [Palatino-Math-SymbolsB]
+\stoptypescript
+
+\starttypescript [math] [palatino] [name]
+ \definefontsynonym [OldStyle] [MathItalic]
+ \definefontsynonym [Fraktur] [eufm10]
+ \definefontsynonym [Blackboard] [MathBeta]
+ \definefontsynonym [Gothic] [eufm10]
+ \definefontsynonym [Calligraphic] [eusm10]
+\stoptypescript
+
+% bonus definitions / will disappear
+
+\starttypescript [serif] [palatino] [name]
+ \definefontsynonym [SerifRegular] [Serif]
+ \definefontsynonym [SerifRegularOsF] [TeXPalladioL-SC]
+ \definefontsynonym [SerifItalicOsF] [TeXPalladioL-ItalicOsF]
+ \definefontsynonym [SerifBoldOsF] [TeXPalladioL-BoldOsF]
+ \definefontsynonym [SerifBoldItalicOsF][TeXPalladioL-BoldItalicOsF]
+ \definefontsynonym [SerifCapsOsF] [TeXPalladioL-SC]
+\stoptypescript
+
+\stoptypescriptcollection
+
+\endinput
diff --git a/Master/texmf-dist/tex/context/base/type-xtx.tex b/Master/texmf-dist/tex/context/base/type-xtx.tex
index c2c217515b6..32ff858d183 100644
--- a/Master/texmf-dist/tex/context/base/type-xtx.tex
+++ b/Master/texmf-dist/tex/context/base/type-xtx.tex
@@ -12,7 +12,7 @@
%C details.
%D Here are some fonts definitions that can get you started with
-%D \XETEX (for more details see Adam's MyWay documents).
+%D \XETEX\ (for more details see Adam's MyWay documents).
%D
%D Most typescripts in this file are mostly independent of the other
%D typescript files. Generally, you can speed things up a lot by
@@ -36,7 +36,7 @@
%D
%D \starttyping
%D \definetypeface[basic][rm][Xserif][Baskerville]
-%D \definetypeface[basic][ss][Xsans] [Optima Regular][default][encoding=uc,rscale=.87]
+%D \definetypeface[basic][ss][Xsans] [Optima Regular][default][features=default,rscale=.87]
%D \definetypeface[basic][tt][Xmono] [Courier] [default]
%D \stoptyping
%D
@@ -46,14 +46,74 @@
%D \setupbodyfont[basic]
%D \stoptyping
+%D This file is hacked by Taco Hoekwater in an attempt to figure out the right approach
+%D to font loading in \XeTeX. (jun19,2007)
+
+%D The General \XeTeX\ low-level font syntax is (at least) as follows.
+%D
+%D Named font:
+%D \starttyping
+%D \font\x = "<fontname><engine-options>:<featurelist>" <at or scaled>
+%D \stoptyping
+%D \type{<fontname>} = Font name as seen in a system font menu or the output of fc-list
+%D
+%D \type{<engine-options>} = \type{/B} or \type{/I} or \tupe{/BI}, and||or \type{/S=<X>}.
+%D That last one selects an optical scaled variant for size \type{<X>}
+%D (it is a bare number, the unit is points).
+%D
+%D \type{<featurelist>} = comma- or semicolon- separated list of font features.
+%D
+%D Opentype features are selected using \type{+<tag>}, and deselected using \type{-<tag>},
+%D except that key||value pairs are used for \type{script=<tag>} and \type{language=<tag>}
+%D
+%D AAT features are always key||value pairs, often including spaces.
+%D
+%D \XETEX's own features are key||value pairs, and can be applied to both OpenType
+%D and AAT fonts:
+%D \type{mapping=<font map>} for glyph remapping
+%D \type{color=RRGGBB[TT]} for color (hex numbers, with optional transparancy),
+%D \type{letterspace=<x>} to add \type{<x>/<fontsize>} intercharacter spacing.
+%D
+%D Full example showing all parts of the syntax for an OTF font:
+%D \starttyping
+%D \font\f= "Warnock Pro/I/S=5:+smcp,-liga,mapping=tex-text,script=latn"
+%D \stoptyping
+
+%D Non-installed (filename-based) fonts :
+%D
+%D \starttyping
+%D \font\x = "[<fontname>]:<featurelist>" <at or scaled>
+%D \stoptyping
+%D
+%D Here, there are no \type{<engine-options>}, because there is no
+%D font discovery engine available to be queried.
+
+
+%D TH: This \type{\xetexcolon} definition seems needed because the name/file \
+%D parser otherwise drops the rest of the argument into oblivion.
+
+\unexpanded\def\xetexcolon{:}
+
\starttypescriptcollection[xetex]
\starttypescript[Xserif][all][name]
-\definefontsynonym[Dummy] ['\typescripttwo:mapping=tex-text'] [encoding=uc]
-\definefontsynonym[DummyItalic] ['\typescripttwo/I:mapping=tex-text'] [encoding=uc]
-\definefontsynonym[DummyBold] ['\typescripttwo/B:mapping=tex-text'] [encoding=uc]
-\definefontsynonym[DummyBoldItalic]['\typescripttwo/BI:mapping=tex-text'][encoding=uc]
+%D TH: I removed all single quotes because they don't seem to add anything. And I added
+%D the \type{name:} everywhere, because passing that information on \type{\typescripttwo}
+%D doesn't work either (maybe \type{\typescripttwo} is expanded incorrectly)
+%D
+%D And even if that would have worked, \type{file:} will not work properly anyway
+%D in this case since tricks like \type{/I} will never, ever work for local fonts,
+%D so there is really only one choice.
+
+%D HH: todo, define feature set switch mapping=tex-tex
+
+\definefontsynonym[Dummy] [name:\typescripttwo] [features=default]
+\definefontsynonym[DummyItalic] [name:\typescripttwo/I] [features=default]
+\definefontsynonym[DummyBold] [name:\typescripttwo/B] [features=default]
+\definefontsynonym[DummyBoldItalic][name:\typescripttwo/BI][features=default]
+
+\definefontsynonym[DummyCaps] [name:\typescripttwo] [features=smallcaps]
\definefontsynonym[Serif] [Dummy]
\definefontsynonym[SerifBold] [DummyBold]
@@ -61,16 +121,18 @@
\definefontsynonym[SerifBoldItalic] [DummyBoldItalic]
\definefontsynonym[SerifSlanted] [DummyItalic]
\definefontsynonym[SerifBoldSlanted][DummyBoldItalic]
-\definefontsynonym[SerifCaps] [Dummy]
+\definefontsynonym[SerifCaps] [DummyCaps]
\stoptypescript
\starttypescript[Xsans][all][name]
-\definefontsynonym[DummySans] ['\typescripttwo:mapping=tex-text'] [encoding=uc]
-\definefontsynonym[DummySansItalic] ['\typescripttwo/I:mapping=tex-text'] [encoding=uc]
-\definefontsynonym[DummySansBold] ['\typescripttwo/B:mapping=tex-text'] [encoding=uc]
-\definefontsynonym[DummySansBoldItalic]['\typescripttwo/BI:mapping=tex-text'][encoding=uc]
+\definefontsynonym[DummySans] [name:\typescripttwo] [features=default]
+\definefontsynonym[DummySansItalic] [name:\typescripttwo/I] [features=default]
+\definefontsynonym[DummySansBold] [name:\typescripttwo/B] [features=default]
+\definefontsynonym[DummySansBoldItalic][name:\typescripttwo/BI][features=default]
+
+\definefontsynonym[DummySansCaps] [name:\typescripttwo] [features=smallcaps]
\definefontsynonym[Sans] [DummySans]
\definefontsynonym[SansBold] [DummySansBold]
@@ -78,16 +140,18 @@
\definefontsynonym[SansBoldItalic] [DummySansBoldItalic]
\definefontsynonym[SansSlanted] [DummySansItalic]
\definefontsynonym[SansBoldSlanted][DummySansBoldItalic]
-\definefontsynonym[SansCaps] [DummySans]
+\definefontsynonym[SansCaps] [DummySansCaps]
\stoptypescript
\starttypescript[Xmono][all][name]
-\definefontsynonym[DummyMono] ['\typescripttwo'] [encoding=uc]
-\definefontsynonym[DummyMonoItalic] ['\typescripttwo/I'] [encoding=uc]
-\definefontsynonym[DummyMonoBold] ['\typescripttwo/B'] [encoding=uc]
-\definefontsynonym[DummyMonoBoldItalic]['\typescripttwo/BI'][encoding=uc]
+\definefontsynonym[DummyMono] [name:\typescripttwo]
+\definefontsynonym[DummyMonoItalic] [name:\typescripttwo/I]
+\definefontsynonym[DummyMonoBold] [name:\typescripttwo/B]
+\definefontsynonym[DummyMonoBoldItalic][name:\typescripttwo/BI]
+
+% TODO: smallcaps without other features
\definefontsynonym[Mono] [DummyMono]
\definefontsynonym[MonoBold] [DummyMonoBold]
@@ -101,8 +165,8 @@
\starttypescript[Xserif][default][size]
\definebodyfont
- [4pt,5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt,17.3pt]
- [rm] [default]
+ [4pt,5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt,17.3pt] [rm]
+ [default]
\stoptypescript
\starttypescript[Xsans][default][size]
@@ -146,10 +210,10 @@
\starttypescript[serif][times][uc]
-\definefontsynonym[Times-Roman] ['Times Roman:mapping=tex-text'] [encoding=uc]
-\definefontsynonym[Times-Italic] ['Times Italic:mapping=tex-text'] [encoding=uc]
-\definefontsynonym[Times-Bold] ['Times Bold:mapping=tex-text'] [encoding=uc]
-\definefontsynonym[Times-BoldItalic]['Times Bold Italic:mapping=tex-text;'][encoding=uc]
+\definefontsynonym[Times-Roman] [name:Times Roman] [features=default]
+\definefontsynonym[Times-Italic] [name:Times Italic] [features=default]
+\definefontsynonym[Times-Bold] [name:Times Bold] [features=default]
+\definefontsynonym[Times-BoldItalic][name:Times Bold Italic][features=default]
\stoptypescript
@@ -157,14 +221,14 @@
\starttypescript[serif][palatino][uc]
-\definefontsynonym[Palatino] ['Book Antiqua:mapping=tex-text'] [encoding=uc]
-\definefontsynonym[Palatino-Italic] ['Book Antiqua Italic:mapping=tex-text'] [encoding=uc]
-\definefontsynonym[Palatino-Bold] ['Book Antiqua Bold:mapping=tex-text'] [encoding=uc]
-\definefontsynonym[Palatino-BoldItalic] ['Book Antiqua Bold Italic:mapping=tex-text'][encoding=uc]
+\definefontsynonym[Palatino] [name:Book Antiqua] [features=default]
+\definefontsynonym[Palatino-Italic] [name:Book Antiqua Italic] [features=default]
+\definefontsynonym[Palatino-Bold] [name:Book Antiqua Bold] [features=default]
+\definefontsynonym[Palatino-BoldItalic] [name:Book Antiqua Bold Italic][features=default]
-\definefontsynonym[Palatino-Slanted] [Palatino-Italic]
-\definefontsynonym[Palatino-BoldSlanted][Palatino-BoldItalic]
-\definefontsynonym[Palatino-Caps] [Palatino]
+\definefontsynonym[Palatino-Slanted] [Palatino-Italic]
+\definefontsynonym[Palatino-BoldSlanted] [Palatino-BoldItalic]
+\definefontsynonym[Palatino-Caps] [Palatino]
\stoptypescript
@@ -173,10 +237,10 @@
\starttypescript[sans][helvetica][uc]
-\definefontsynonym[Helvetica] ['Helvetica Neue:mapping=tex-text'] [encoding=uc]
-\definefontsynonym[Helvetica-Oblique] ['Helvetica Neue Italic:mapping=tex-text'] [encoding=uc]
-\definefontsynonym[Helvetica-Bold] ['Helvetica Neue Bold:mapping=tex-text'] [encoding=uc]
-\definefontsynonym[Helvetica-BoldOblique]['Helvetica Neue Bold Italic:mapping=tex-text'][encoding=uc]
+\definefontsynonym[Helvetica] [name:Helvetica Neue] [features=default]
+\definefontsynonym[Helvetica-Oblique] [name:Helvetica Neue Italic] [features=default]
+\definefontsynonym[Helvetica-Bold] [name:Helvetica Neue Bold] [features=default]
+\definefontsynonym[Helvetica-BoldOblique][name:Helvetica Neue Bold Italic][features=default]
\stoptypescript
@@ -186,30 +250,30 @@
\starttypescript[mono][courier][uc]
-\definefontsynonym[Courier] ['Courier:mapping=tex-text'] [encoding=uc]
+\definefontsynonym[Courier] [name:Courier]
\definefontsynonym[Courier-Oblique] [Courier]
-\definefontsynonym[Courier-Bold] ['Courier Bold:mapping=tex-text'][encoding=uc]
+\definefontsynonym[Courier-Bold] [name:Courier Bold]
\definefontsynonym[Courier-BoldOblique][Courier-Bold]
\stoptypescript
%D The following fonts go beyond the usual four variants that
%D are accessible via the above wildcard typescripts, so they
-%D get a more expanded treatment here:
+%D get a more expanded treatment here\xetexcolon
\starttypescript[serif][hoefler][uc]
-\definefontsynonym[Hoefler] ['Hoefler Text:mapping=tex-text;
- Ligatures=Diphthongs'] [encoding=uc]
-\definefontsynonym[HoeflerItalic]['Hoefler Text Italic:mapping=tex-text;
- Ligatures=Diphthongs'] [encoding=uc]
-\definefontsynonym[HoeflerBlack] ['Hoefler Text Black:mapping=tex-text;
- Ligatures=Diphthongs'] [encoding=uc]
-\definefontsynonym[HoeflerBlackItalic]['Hoefler Text Black Italic:mapping=tex-text;
- Ligatures=Diphthongs'] [encoding=uc]
-\definefontsynonym[HoeflerSmCap] ['Hoefler Text:mapping=tex-text;
- Ligatures=Diphthongs;
- Letter Case=Small Caps'][encoding=uc]
+\definefontsynonym[Hoefler] [name:Hoefler Text\xetexcolon mapping=tex-text;%
+ Ligatures=Diphthongs] [encoding=uc]
+\definefontsynonym[HoeflerItalic][name:Hoefler Text Italic\xetexcolon mapping=tex-text;%
+ Ligatures=Diphthongs] [encoding=uc]
+\definefontsynonym[HoeflerBlack] [name:Hoefler Text Black\xetexcolon mapping=tex-text;%
+ Ligatures=Diphthongs] [encoding=uc]
+\definefontsynonym[HoeflerBlackItalic][name:Hoefler Text Black Italic\xetexcolon mapping=tex-text;%
+ Ligatures=Diphthongs] [encoding=uc]
+\definefontsynonym[HoeflerSmCap] [name:Hoefler Text\xetexcolon mapping=tex-text;%
+ Ligatures=Diphthongs;%
+ Letter Case=Small Caps][encoding=uc]
\stoptypescript
\starttypescript[serif][hoefler][name]
@@ -226,8 +290,8 @@
\starttypescript[sans][lucidagrande][uc]
-\definefontsynonym[LucidaGrande] ['Lucida Grande:mapping=tex-text'] [encoding=uc]
-\definefontsynonym[LucidaGrandeBold]['Lucida Grande Bold:mapping=tex-text'][encoding=uc]
+\definefontsynonym[LucidaGrande] [name:Lucida Grande] [features=default]
+\definefontsynonym[LucidaGrandeBold][name:Lucida Grande Bold][features=default]
\stoptypescript
@@ -244,11 +308,11 @@
\stoptypescript
\starttypescript[sans][optima][uc]
-\definefontsynonym[Optima] ['Optima Regular:mapping=tex-text'] [encoding=uc]
-\definefontsynonym[OptimaItalic] ['Optima Italic:mapping=tex-text'] [encoding=uc]
-\definefontsynonym[OptimaBold] ['Optima Bold:mapping=tex-text'] [encoding=uc]
-\definefontsynonym[OptimaBoldItalic]['Optima Bold Italic:mapping=tex-text'][encoding=uc]
-\definefontsynonym[OptimaBlack] ['Optima ExtraBlack:mapping=tex-text'] [encoding=uc]
+\definefontsynonym[Optima] [name:Optima Regular] [features=default]
+\definefontsynonym[OptimaItalic] [name:Optima Italic] [features=default]
+\definefontsynonym[OptimaBold] [name:Optima Bold] [features=default]
+\definefontsynonym[OptimaBoldItalic][name:Optima Bold Italic][features=default]
+\definefontsynonym[OptimaBlack] [name:Optima ExtraBlack] [features=default]
\stoptypescript
\starttypescript[sans][optima][name]
@@ -265,12 +329,12 @@
\starttypescript[sans][gillsans,gillsanslt][uc]
-\definefontsynonym[GillSans] ['Gill Sans:mapping=tex-text'] [encoding=uc]
-\definefontsynonym[GillSansItalic] ['Gill Sans Italic:mapping=tex-text'] [encoding=uc]
-\definefontsynonym[GillSansBold] ['Gill Sans Bold:mapping=tex-text'] [encoding=uc]
-\definefontsynonym[GillSansBoldItalic] ['Gill Sans Bold Italic:mapping=tex-text'] [encoding=uc]
-\definefontsynonym[GillSansLight] ['Gill Sans Light:mapping=tex-text'] [encoding=uc]
-\definefontsynonym[GillSansLightItalic]['Gill Sans Light Italic:mapping=tex-text'][encoding=uc]
+\definefontsynonym[GillSans] [name:Gill Sans] [features=default]
+\definefontsynonym[GillSansItalic] [name:Gill Sans Italic] [features=default]
+\definefontsynonym[GillSansBold] [name:Gill Sans Bold] [features=default]
+\definefontsynonym[GillSansBoldItalic] [name:Gill Sans Bold Italic] [features=default]
+\definefontsynonym[GillSansLight] [name:Gill Sans Light] [features=default]
+\definefontsynonym[GillSansLightItalic][name:Gill Sans Light Italic][features=default]
\stoptypescript
@@ -300,13 +364,13 @@
\starttypescript[serif,handwriting][zapfino][uc]
-\definefontsynonym[ZapfinoOne] ['Zapfino:mapping=tex-text'] [encoding=uc]
-\definefontsynonym[ZapfinoTwo] ['Zapfino:mapping=tex-text;
- Stylistic Variants=First variant glyph set'] [encoding=uc]
-\definefontsynonym[ZapfinoThree]['Zapfino:mapping=tex-text;
- Stylistic Variants=Second variant glyph set'][encoding=uc]
-\definefontsynonym[ZapfinoFour] ['Zapfino:mapping=tex-text;
- Stylistic Variants=Third variant glyph set'] [encoding=uc]
+\definefontsynonym[ZapfinoOne] [name:Zapfino\xetexcolon mapping=tex-text] [encoding=uc]
+\definefontsynonym[ZapfinoTwo] [name:Zapfino\xetexcolon mapping=tex-text;%
+ Stylistic Variants=First variant glyph set] [encoding=uc]
+\definefontsynonym[ZapfinoThree][name:Zapfino\xetexcolon mapping=tex-text;%
+ Stylistic Variants=Second variant glyph set][encoding=uc]
+\definefontsynonym[ZapfinoFour] [name:Zapfino\xetexcolon mapping=tex-text;%
+ Stylistic Variants=Third variant glyph set] [encoding=uc]
\stoptypescript
\starttypescript[handwriting][zapfino][name]
@@ -329,24 +393,24 @@
\starttypescript[serif,calligraphy][applechancery][uc]
-\definefontsynonym[AppleChanceryOne] ['Apple Chancery:mapping=tex-text;
- Number Case=Old Styles'] [encoding=uc]
-\definefontsynonym[AppleChanceryTwo] ['Apple Chancery:mapping=tex-text;
- Number Case=Old Styles;
- Design Complexity=Elegant Design Level'][encoding=uc]
-\definefontsynonym[AppleChanceryThree] ['Apple Chancery:mapping=tex-text;
- Number Case=Old Styles;
- Design Complexity=Flourishes Set A'] [encoding=uc]
-\definefontsynonym[AppleChanceryFour] ['Apple Chancery:mapping=tex-text;
- Number Case=Old Styles;
- Design Complexity=Flourishes Set B'] [encoding=uc]
-\definefontsynonym[AppleChanceryCaps] ['Apple Chancery:mapping=tex-text;
- Number Case=Old Styles;
- Letter Case=Small Caps'] [encoding=uc]
-\definefontsynonym[AppleChanceryCapsTwo]['Apple Chancery:mapping=tex-text;
- Number Case=Old Styles;
- Letter Case=Small Caps;
- Design Complexity=Flourishes Set B'] [encoding=uc]
+\definefontsynonym[AppleChanceryOne] [name:Apple Chancery\xetexcolon mapping=tex-text;%
+ Number Case=Old Styles] [encoding=uc]
+\definefontsynonym[AppleChanceryTwo] [name:Apple Chancery\xetexcolon mapping=tex-text;%
+ Number Case=Old Styles;%
+ Design Complexity=Elegant Design Level][encoding=uc]
+\definefontsynonym[AppleChanceryThree] [name:Apple Chancery\xetexcolon mapping=tex-text;%
+ Number Case=Old Styles;%
+ Design Complexity=Flourishes Set A] [encoding=uc]
+\definefontsynonym[AppleChanceryFour] [name:Apple Chancery\xetexcolon mapping=tex-text;%
+ Number Case=Old Styles;%
+ Design Complexity=Flourishes Set B] [encoding=uc]
+\definefontsynonym[AppleChanceryCaps] [name:Apple Chancery\xetexcolon mapping=tex-text;%
+ Number Case=Old Styles;%
+ Letter Case=Small Caps] [encoding=uc]
+\definefontsynonym[AppleChanceryCapsTwo][name:Apple Chancery\xetexcolon mapping=tex-text;%
+ Number Case=Old Styles;%
+ Letter Case=Small Caps;%
+ Design Complexity=Flourishes Set B] [encoding=uc]
\stoptypescript
\starttypescript[calligraphy][applechancery][name]
@@ -372,10 +436,10 @@
\starttypescript[serif][timesnewroman][uc]
-\definefontsynonym[MSTimes] ['Times New Roman:mapping=tex-text'] [encoding=uc]
-\definefontsynonym[MSTimesItalic] ['Times New Roman Italic:mapping=tex-text'] [encoding=uc]
-\definefontsynonym[MSTimesBold] ['Times New Roman Bold:mapping=tex-text'] [encoding=uc]
-\definefontsynonym[MSTimesBoldItalic]['Times New Roman Bold Italic:mapping=tex-text'][encoding=uc]
+\definefontsynonym[MSTimes] [name:Times New Roman] [features=default]
+\definefontsynonym[MSTimesItalic] [name:Times New Roman Italic] [features=default]
+\definefontsynonym[MSTimesBold] [name:Times New Roman Bold] [features=default]
+\definefontsynonym[MSTimesBoldItalic][name:Times New Roman Bold Italic][features=default]
\stoptypescript
@@ -393,10 +457,10 @@
\starttypescript[sans][arial][uc]
-\definefontsynonym[Arial] ['Arial:mapping=tex-text'] [encoding=uc]
-\definefontsynonym[ArialItalic] ['Arial Italic:mapping=tex-text'] [encoding=uc]
-\definefontsynonym[ArialBold] ['Arial Bold:mapping=tex-text'] [encoding=uc]
-\definefontsynonym[ArialBoldItalic]['Arial Bold Italic:mapping=tex-text'][encoding=uc]
+\definefontsynonym[Arial] [name:Arial] [features=default]
+\definefontsynonym[ArialItalic] [name:Arial Italic] [features=default]
+\definefontsynonym[ArialBold] [name:Arial Bold] [features=default]
+\definefontsynonym[ArialBoldItalic][name:Arial Bold Italic][features=default]
\stoptypescript
@@ -418,10 +482,10 @@
\starttypescript [serif] [lucida] [uc]
- \definefontsynonym [LucidaBright] ['Lucida Bright:mapping=tex-text'] [encoding=uc]
- \definefontsynonym [LucidaBright-Demi] ['Lucida Bright Demibold:mapping=tex-text'][encoding=uc]
- \definefontsynonym [LucidaBright-DemiItalic] ['Lucida Bright Demibold:mapping=tex-text'][encoding=uc]
- \definefontsynonym [LucidaBright-Italic] ['Lucida Bright:mapping=tex-text'] [encoding=uc]
+ \definefontsynonym [LucidaBright] [name:Lucida Bright] [features=default]
+ \definefontsynonym [LucidaBright-Demi] [name:Lucida Bright Demibold][features=default]
+ \definefontsynonym [LucidaBright-DemiItalic] [name:Lucida Bright Demibold][features=default]
+ \definefontsynonym [LucidaBright-Italic] [name:Lucida Bright] [features=default]
\definefontsynonym [LucidaBrightSmallcaps] [LucidaBright]
\definefontsynonym [LucidaBrightSmallcaps-Demi][LucidaBright-Demi]
@@ -430,10 +494,10 @@
\stoptypescript
\starttypescript [sans] [lucida] [uc]
- \definefontsynonym [LucidaSans] ['Lucida Sans Regular:mapping=tex-text'] [encoding=uc]
- \definefontsynonym [LucidaSans-Demi] ['Lucida Sans Demibold Roman:mapping=tex-text'] [encoding=uc]
- \definefontsynonym [LucidaSans-DemiItalic]['Lucida Sans Demibold Italic:mapping=tex-text'][encoding=uc]
- \definefontsynonym [LucidaSans-Italic] ['Lucida Sans Italic:mapping=tex-text'] [encoding=uc]
+ \definefontsynonym [LucidaSans] [name:Lucida Sans Regular] [features=default]
+ \definefontsynonym [LucidaSans-Demi] [name:Lucida Sans Demibold Roman] [features=default]
+ \definefontsynonym [LucidaSans-DemiItalic][name:Lucida Sans Demibold Italic][features=default]
+ \definefontsynonym [LucidaSans-Italic] [name:Lucida Sans Italic] [features=default]
\definefontsynonym [LucidaSans-Bold] [LucidaSans-Demi]
\definefontsynonym [LucidaSans-BoldItalic][LucidaSans-DemiItalic]
@@ -442,16 +506,16 @@
\starttypescript [mono] [lucida] [uc]
- \definefontsynonym [LucidaSans-Typewriter] ['Lucida Sans Typewriter Regular'] [encoding=uc]
- \definefontsynonym [LucidaSans-TypewriterBold] ['Lucida Sans Typewriter Bold'] [encoding=uc]
- \definefontsynonym [LucidaSans-TypewriterBoldOblique]['Lucida Sans Typewriter Bold Oblique'][encoding=uc]
- \definefontsynonym [LucidaSans-TypewriterOblique] ['Lucida Sans Typewriter Oblique'] [encoding=uc]
+ \definefontsynonym [LucidaSans-Typewriter] [name:Lucida Sans Typewriter Regular] [encoding=uc]
+ \definefontsynonym [LucidaSans-TypewriterBold] [name:Lucida Sans Typewriter Bold] [encoding=uc]
+ \definefontsynonym [LucidaSans-TypewriterBoldOblique][name:Lucida Sans Typewriter Bold Oblique][encoding=uc]
+ \definefontsynonym [LucidaSans-TypewriterOblique] [name:Lucida Sans Typewriter Oblique] [encoding=uc]
\stoptypescript
\starttypescript [calligraphy] [lucida] [uc]
- \definefontsynonym[LucidaCalligraphy-Italic]['Lucida Calligraphy Italic:mapping=tex-text'][encoding=uc]
+ \definefontsynonym[LucidaCalligraphy-Italic][name:Lucida Calligraphy Italic][features=default]
\stoptypescript
@@ -459,16 +523,16 @@
\starttypescript[handwriting][lucida][uc]
- \definefontsynonym[LucidaHandwriting-Italic]['Lucida Handwriting Italic:mapping=tex-text'][encoding=uc]
+ \definefontsynonym[LucidaHandwriting-Italic][name:Lucida Handwriting Italic][features=default]
\stoptypescript
\starttypescript[fax][lucida][uc]
- \definefontsynonym[LucidaFax] ['Lucida Fax Regular:mapping=tex-text'] [encoding=uc]
- \definefontsynonym[LucidaFax-Demi] ['Lucida Fax Demibold:mapping=tex-text'] [encoding=uc]
- \definefontsynonym[LucidaFax-DemiItalic]['Lucida Fax Demibold Italic:mapping=tex-text'][encoding=uc]
- \definefontsynonym[LucidaFax-Italic] ['Lucida Fax Italic:mapping=tex-text'] [encoding=uc]
+ \definefontsynonym[LucidaFax] [name:Lucida Fax Regular] [features=default]
+ \definefontsynonym[LucidaFax-Demi] [name:Lucida Fax Demibold] [features=default]
+ \definefontsynonym[LucidaFax-DemiItalic][name:Lucida Fax Demibold Italic][features=default]
+ \definefontsynonym[LucidaFax-Italic] [name:Lucida Fax Italic] [features=default]
\stoptypescript
@@ -478,8 +542,8 @@
\starttypescript[serif][gentium][uc]
-\definefontsynonym[Gentium] ['Gentium:mapping=tex-text'] [encoding=uc]
-\definefontsynonym[GentiumItalic]['Gentium Italic:mapping=tex-text'][encoding=uc]
+\definefontsynonym[Gentium] [name:Gentium] [features=default]
+\definefontsynonym[GentiumItalic][name:Gentium Italic][features=default]
\stoptypescript
diff --git a/Master/texmf-dist/tex/context/base/unic-001.tex b/Master/texmf-dist/tex/context/base/unic-001.tex
index 6c6af6f4c63..e37de91367c 100644
--- a/Master/texmf-dist/tex/context/base/unic-001.tex
+++ b/Master/texmf-dist/tex/context/base/unic-001.tex
@@ -23,6 +23,7 @@
%D Zcaron\or zcaron\else unknownchar\fi
%D \stopunicodevector
%D
+%D \stoptyping
%D But we can speed things up, watch how we avoid zero and \TEX's
%D automatically added \type {\relax}.
diff --git a/Master/texmf-dist/tex/context/base/unic-003.tex b/Master/texmf-dist/tex/context/base/unic-003.tex
index 1ce1ade8d6a..d37563d264c 100644
--- a/Master/texmf-dist/tex/context/base/unic-003.tex
+++ b/Master/texmf-dist/tex/context/base/unic-003.tex
@@ -14,8 +14,14 @@
\unprotect
\startunicodevector 3
- \ifcase\numexpr#1-132\relax
- % special greek
+ \ifcase\numexpr#1-126\relax
+ % special greek
+ \strippedcsname \greekquestionmark \or
+ \strippedcsname \unknownchar \or
+ \strippedcsname \unknownchar \or
+ \strippedcsname \unknownchar \or
+ \strippedcsname \unknownchar \or
+ \strippedcsname \unknownchar \or
\strippedcsname \greektonos \or
\strippedcsname \greekdialytikatonos \or
\strippedcsname \greekAlphatonos \or
diff --git a/Master/texmf-dist/tex/context/base/unic-cjk.tex b/Master/texmf-dist/tex/context/base/unic-cjk.tex
index a4155f13605..786546318c0 100644
--- a/Master/texmf-dist/tex/context/base/unic-cjk.tex
+++ b/Master/texmf-dist/tex/context/base/unic-cjk.tex
@@ -15,4 +15,8 @@
\dostepwiserecurse{172}{215}{1}{\expanded{\defineunicodecommand{\recurselevel}} {\lookaheaduchar}}
\dostepwiserecurse{249}{250}{1}{\expanded{\defineunicodecommand{\recurselevel}} {\lookaheaduchar}}
+% special chars
+
+\dostepwiserecurse{255}{255}{1}{\expanded{\defineunicodecommand{\recurselevel}} {\lookaheaduchar}}
+
\endinput
diff --git a/Master/texmf-dist/tex/context/base/unic-ini.mkii b/Master/texmf-dist/tex/context/base/unic-ini.mkii
new file mode 100644
index 00000000000..ac1851fb662
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/unic-ini.mkii
@@ -0,0 +1,802 @@
+%D \module
+%D [ file=unic-ini,
+%D version=2002.12.03,
+%D title=\CONTEXT\ \UNICODE\ Support,
+%D subtitle=\UNICODE\ \& UTF-8 support,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{Context UNICODE Macros (ini)}
+
+%D Sorry, we only support his in \ETEX.
+
+\beginTEX
+ \def\useunicodevector[#1]{}
+ \expandafter \endinput
+\endTEX
+
+\unprotect
+
+% ÀÃÂÃÄÅàáâãäå
+% ÆÇæç
+% ÈÉÊËèéêë
+% ÃŒÃÃŽÃÞìíîïþ
+% Ãð
+% Ññ
+% ÒÓÔÕÖòóôõö
+% Øø
+% ÙÚÛÜùúû
+% Ãýÿ
+% ß
+
+%D This module deals with unicode, and in particular with
+%D \UTF-8 conversion. The prelude to this module was \type
+%D {xtag-utf}, which is now replaced by a one||liner. The
+%D macros below deal with conversions. Thanks to Taco for
+%D providing the following conversion rules.
+%D
+%D \starttabulate[|c|c|c|c|c|]
+%D \NC $b_1$ \NC $b_2$ \NC $b_3$ \NC $b_4$ \NC unicode \NC \NR
+%D \NC192---223\NC128---191\NC \NC \NC 0x80---0x7FF \NC \NR
+%D \NC224---239\NC128---191\NC128---191\NC \NC 0x800---0xFFFF \NC \NR
+%D \NC240---247\NC128---191\NC128---191\NC128---191\NC0x10000---0x1FFFF\NC \NR
+%D \stoptabulate
+%D
+%D In \UTF-8 the characters in the range 128---191 are illegal
+%D as first characters. The characters 254 and 255 are
+%D completely illegal and should not appear at all (they are
+%D related to UTF-16).
+%D
+%D The unicode number for an \UTF-8 sequence can be calculated
+%D as follows:
+%D
+%D \starttabulate[|mc|m|mc|m|mc|m|mc|m|]
+%D \NC b_1 \NC \NC \NC \NC \NC \NC \NC if b_1<=127\NC \NR
+%D \NC 64(b_1-192)\NC+\NC (b_2-128)\NC \NC \NC \NC \NC if 192<=b1<=223\NC \NR
+%D \NC 4096(b_1-224)\NC+\NC 64(b_2-128)\NC+\NC (b_3-128)\NC \NC \NC if 224<=b1<=239\NC \NR
+%D \NC262144(b_1-240)\NC+\NC4096(b_2-128)\NC+\NC64(b_3-128)\NC+\NC(b_4-128)\NC if 240<=b1<=247\NC \NR
+%D \stoptabulate
+%D
+%D A lot of information about unicode can be found on the
+%D web (search for Markus Kuhn and unicode and you'll
+%D probably end up at the right place).
+
+%D In \ETEX\ vocabulary such a conversion looks as follows.
+%D We need the \type {`} in order to turn a character into a
+%D number.
+%D
+%D \starttyping
+%D \def\utftwounicode#1#2%
+%D {\number\numexpr (64*(\numexpr (#1-192))+%
+%D (\numexpr(`#2-128)))}
+%D
+%D \def\utfthreeunicode#1#2#3%
+%D {\number\numexpr (4096*(\numexpr (#1-224))+
+%D 64*(\numexpr(`#2-128))+%
+%D (\numexpr(`#3-128)))}
+%D
+%D \def\utffourunicode#1#2#3#4%
+%D {\number\numexpr(262144*(\numexpr (#1-240))+
+%D 4096*(\numexpr(`#1-128))+
+%D 64*(\numexpr(`#2-128))+%
+%D (\numexpr(`#3-128)))}
+%D \stoptyping
+%D
+%D When we map the unicode number on one of the 256 char wide
+%D unicode tables, we need to do a bit of div and mod. Watch
+%D out: an \ETEX\ \type {/} is not the same as \TEX's \type
+%D {\divide}. The former rounds, while the later truncates, so
+%D we need to trucate ourselves. In case you wonder why we
+%D use \type {\numexpr}: this is not only more convenient, but
+%D also makes it possible to avoid scratch counters, so that we
+%D get fast and fully expandable conversions.
+%D
+%D \starttyping
+%D \def\utfdiv#1{\number\numexpr((#1-128)/256)}
+%D \def\utfmod#1{\number\numexpr((#1)-(256*(\utfdiv{#1})))}
+%D \stoptyping
+%D
+%D So far for the readable alternatives. When using \type
+%D {\numexpr} you should be aware of rather unexpected look
+%D ahead effects. The next implementation uses registers,
+%D which saves tokens and is faster. In this case we gain
+%D some 10\% time.
+
+\chardef \utf@a= 64
+\mathchardef \utf@b= 4096
+\newcount\utf@c\utf@c=262144
+\chardef \utf@d= 192
+\chardef \utf@e= 224
+\chardef \utf@f= 240
+\chardef \utf@g= 128
+\mathchardef \utf@h= 256
+\chardef \utf@i= 127
+\mathchardef \utf@j= 2048
+
+%D The definitions now become:
+%D
+%D \starttyping
+%D \def\utftwounicode#1#2%
+%D {\number\numexpr(\utf@a*(\numexpr (#1-\utf@d))+%
+%D (\numexpr(`#2-\utf@g)))}
+%D
+%D \def\utfthreeunicode#1#2#3%
+%D {\number\numexpr(\utf@b*(\numexpr (#1-\utf@e))+
+%D \utf@a*(\numexpr(`#2-\utf@g))+%
+%D (\numexpr(`#3-\utf@g)))}
+%D
+%D \def\utffourunicode#1#2#3#4%
+%D {\number\numexpr(\utf@c*(\numexpr (#1-\utf@f))+
+%D \utf@b*(\numexpr(`#2-\utf@g))+
+%D \utf@a*(\numexpr(`#3-\utf@g))+%
+%D (\numexpr(`#4-\utf@g)))}
+%D \stoptyping
+%D
+%D And:
+%D
+%D \starttyping
+%D \def\utfdiv#1{\number\numexpr((#1-\utf@g)/\utf@h)}
+%D \def\utfmod#1{\number\numexpr((#1)-(\utf@h*(\utfdiv{#1})))}
+%D \stoptyping
+%D
+%D Depending on the usage, you can rely on parenthesis only:
+%D
+%D \starttyping
+%D \def\utftwounicode#1#2%
+%D {\numexpr(\utf@a*(#1-\utf@d)+%
+%D `#2-\utf@g)}
+%D
+%D \def\utfthreeunicode#1#2#3%
+%D {\numexpr(\utf@b*(#1-\utf@e)+%
+%D \utf@a*(`#2-\utf@g)+%
+%D `#3-\utf@g)}
+%D
+%D \def\utffourunicode#1#2#3#4%
+%D {\numexpr(\utf@c*(#1-\utf@f)+%
+%D \utf@b*(`#2-\utf@g)+%
+%D \utf@a*(`#3-\utf@g)+%
+%D `#4-\utf@g)}
+%D \stoptyping
+
+% beware, unless surrounded by \numexpr .. \relax, a division
+% results in a float until the final result is calculated
+
+\def\utfdiv#1{\the\numexpr (#1-\utf@g)/\utf@h \relax}
+\def\utfmod#1{\the\numexpr#1-\utf@h*((#1-\utf@g)/\utf@h)\relax}
+
+%D The next one also handles the zero case well: (not really utf specific btw)
+
+\def\utfdiv#1{\the\numexpr\ifcase\numexpr#1\relax0\else (#1-\utf@g)/\utf@h \fi\relax}
+\def\utfmod#1{\the\numexpr\ifcase\numexpr#1\relax0\else#1-\utf@h*((#1-\utf@g)/\utf@h)\fi\relax}
+
+% or
+%
+% \def\utfdiv#1{\ifcase\numexpr#1\relax0\else\the\numexpr(#1-\utf@g)/\utf@h\relax\fi}
+% \def\utfmod#1{\ifcase\numexpr#1\relax0\else\the\numexpr#1-\utf@h*((#1-\utf@g)/\utf@h)\relax\fi}
+
+%D When tracing we also need:
+
+\def\utfvid#1{\the\numexpr(#1-\medcard)/\maxcard\relax}
+
+%D Using the three conversion macros, we can now implement
+%D a few handlers. They all call the general \type
+%D {\unicodechar} conversion macro.
+%D
+%D \starttyping
+%D \def\utftwouniglph#1#2%
+%D {\unicodechar{\utftwounicode {#1}{#2}}}
+%D
+%D \def\utfthreeuniglph#1#2#3%
+%D {\unicodechar{\utfthreeunicode{#1}{#2}{#3}}}
+%D
+%D \def\utffouruniglph#1#2#3#4%
+%D {\unicodechar{\utffourunicode {#1}{#2}{#3}{#4}}}
+%D \stoptyping
+%D
+%D Because the unicode number is used a few times per
+%D conversion, we can expand it once (\type {\the} and \type
+%D {\number} make sure of this). This saves us another 10\%.
+%D
+%D \starttyping
+%D \def\utftwouniglph#1#2%
+%D {\@EA\unicodechar\@EA{\the\utftwounicode{#1}{#2}}}
+%D
+%D \def\utfthreeuniglph#1#2#3%
+%D {\@EA\unicodechar\@EA{\the\utfthreeunicode{#1}{#2}{#3}}}
+%D
+%D \def\utffouruniglph#1#2#3#4%
+%D {\@EA\unicodechar\@EA{\the\utffourunicode{#1}{#2}{#3}{#4}}}
+%D \stoptyping
+%D
+%D We can rewrite these macros to faster alternatives: the
+%D less arguments we pass, the faster the conversion will be,
+%D but at the price of readability. So we have:
+%D
+%D \starttyping
+%D \def\utftwouniglph#1#2%
+%D {\@EA\unicodechar\@EA{\the\numexpr(\utf@a*(#1-\utf@d)+%
+%D `#2-\utf@g)}}
+%D
+%D \def\utfthreeuniglph#1#2#3%
+%D {\@EA\unicodechar\@EA{\the\numexpr(\utf@b*(#1-\utf@e)+%
+%D \utf@a*(`#2-\utf@g)+`#3-\utf@g)}}
+%D
+%D \def\utffouruniglph#1#2#3#4%
+%D {\@EA\unicodechar\@EA{\the\numexpr(\utf@c*(#1-\utf@f)+%
+%D \utf@b*(`#2-\utf@g)+\utf@a*(`#3-\utf@g)+`#4-\utf@g)}}
+%D \stoptyping
+%D
+%D Less parsing, and therefore faster:
+
+% beware, this may change: #1 rawchar (=> `#1 and such, saves tokens)
+
+\def\utftwouniglph#1#2%
+ {\@EA\unicodechar\@EA{\the\numexpr\utf@a*(#1-\utf@d)+`#2-\utf@g\relax}}
+
+\def\utfthreeuniglph#1#2#3%
+ {\@EA\unicodechar\@EA{\the\numexpr\utf@b*(#1-\utf@e)+\utf@a*(`#2-\utf@g)+`#3-\utf@g\relax}}
+
+\def\utffouruniglph#1#2#3#4%
+ {\@EA\unicodechar\@EA{\the\numexpr\utf@c*(#1-\utf@f)+\utf@b*(`#2-\utf@g)+\utf@a*(`#3-\utf@g)+`#4-\utf@g\relax}}
+
+% \def\keeputfcharacters
+% {\def\utftwouniglph ##1##2{\rawcharacter{##1}\string##2}%
+% \def\utfthreeuniglph ##1##2##3{\rawcharacter{##1}\string##2\string##3}%
+% \def\utffouruniglph ##1##2##3##4{\rawcharacter{##1}\string##2\string##3\string##4}}
+
+\def\keeputfcharacters
+ {\let\utftwouniglph \rawcharacter
+ \let\utfthreeuniglph\rawcharacter
+ \let\utffouruniglph \rawcharacter}
+
+\appendtoks \keeputfcharacters \to \everywritestring
+
+% \bgroup
+% \keeputfcharacters
+% \expanded{\index{\XMLflush{whatever}}}
+% \egroup
+
+%D Now we come to the unicode handler itself. We will use a few
+%D constants, which saves us (at least at the time of writing
+%D and testing these macros) another 10\%.
+
+\def\@@univector {univ}
+\def\@@unicommand {unic}
+\def\@@unknownchar{unknownchar}
+
+%D Now comes the nice part: turning codes into glyphs. The
+%D actual conversion does not take place here, but is done by
+%D macros in \type{unic-nnn} files. There we map a range onto
+%D named glyphs, so that they fit well into the rest of
+%D \CONTEXT.
+
+%D \macros
+%D {utfunicodetracer}
+%D
+%D By default, the converter produces a character representation,
+%D but for tracing purposes, you can set a trace option.
+
+\chardef\utfunicodetracer=0
+
+%D \def\TraceUnic#1%
+%D {\chardef\utfunicodetracer#1\relax\enableregime[utf]Å°}
+%D
+%D \starttabulate[|c|c|c|c|c|c|]
+%D \NC option \NC number\NC mapping\NC glyph\NC string\NC example \NC \NR
+%D \NC 0 \NC \NC \NC \star\NC \NC \TraceUnic0\NC \NR
+%D \NC 1 \NC \star \NC \NC \NC \NC \TraceUnic1\NC \NR
+%D \NC 2 \NC \NC \star \NC \NC \NC \TraceUnic2\NC \NR
+%D \NC 3 \NC \star \NC \star \NC \NC \NC \TraceUnic3\NC \NR
+%D \NC 4 \NC \star \NC \NC \star\NC \NC \TraceUnic4\NC \NR
+%D \NC 5 \NC \NC \star \NC \star\NC \NC \TraceUnic5\NC \NR
+%D \NC 6 \NC \star \NC \star \NC \star\NC \NC \TraceUnic6\NC \NR
+%D \NC 7 \NC \NC \NC \NC \star \NC \TraceUnic7\NC \NR
+%D \NC 8 \NC \star \NC \NC \NC \NC \TraceUnic8\NC \NR
+%D \NC otherwise\NC \NC \NC \star\NC \NC \TraceUnic9\NC \NR
+%D \stoptabulate
+
+%D \macros
+%D {unicodechar}
+%D
+%D Next we implement the character handler:
+
+\def\unicodechar
+ {\ifcase\utfunicodetracer
+ \expandafter\utfunihash \or
+ \expandafter\utfunichar \or
+ \expandafter\utfunisplit \or
+ \expandafter\utfuniboth \or
+ \expandafter\utfunihashchar \or
+ \expandafter\utfunihashsplit \or
+ \expandafter\utfunihashboth \or
+ \expandafter\utfuniglyphname \or
+ \expandafter\utfunientity \else
+ \expandafter\utfunihash
+ \fi}
+
+%D \startbuffer
+%D \enableregime[utf] \dostepwiserecurse{0}{8}{1}
+%D {\recurselevel:
+%D \chardef\utfunicodetracer=\recurselevel aap‒noot coördinatie – één
+%D \crlf}
+%D \stopbuffer
+%D
+%D \typebuffer \start \getbuffer \stop
+
+%D \macros
+%D {unicodehexnumber}
+%D
+%D A few auxiliary macros, producing the range||char pair:
+
+\def\unicodepair#1%
+ {\utfdiv{#1}:\utfmod{#1}}
+
+\def\unicodenumber#1{\number#1}
+
+\def\unicodehexnumber#1%
+ {\ifnum#1>\maxcard
+ \expanded{\uchexnumbers{\utfvid{#1}}}%
+ \expanded{\uchexnumbers{\utfdiv{\utfdiv{#1}}}}%
+ \else
+ 00%
+ \expanded{\uchexnumbers{\utfdiv{#1}}}%
+ \fi
+ \expanded{\uchexnumbers{\utfmod{#1}}}}
+
+%D The following macros visualize the unicode character. The
+%D \type {\relax} in front of the \type {-} prevents lookahead
+%D problems; somehow \type {\numexpr} cannot look beyond this
+%D sign, and expects a number.
+
+\ifx\tttf\undefined \let\tttf\relax \fi
+
+\def\utfunichar #1{{\tttf U\low{\tx\unicodenumber{#1}}}}
+\def\utfunisplit #1{{\tttf U\low{\tx\unicodepair{#1}}}}
+\def\utfuniboth #1{{\tttf U\low{\tx\unicodenumber{#1}->\unicodepair{#1}}}}
+\def\utfunientity #1{{\tttf\&\#x\unicodehexnumber{#1};}}
+
+%D The character itself is accessed and typeset by:
+%D
+%D \starttyping
+%D \def\utfunihash#1%
+%D {\executeifdefined{\@@univector\utfdiv{#1}}%
+%D \gobbleoneargument{\utfmod{#1}}}
+%D \stoptyping
+%D
+%D Again, we can provide a faster alternative, because inside
+%D the conditional executer, the argument is expanded twice,
+%D and therefore the calculation done once more than needed.
+%D So, we make sure that the argument is expansion on
+%D forehand. Just to remind you: \type {#1} is the \UNICODE\
+%D number.
+%D
+%D \starttyping
+%D \def\utfunihash#1%
+%D {\@EA\executeifdefined\@EA{\@EA\@@univector\number\utfdiv{#1}}%
+%D {\unknownchar\gobbleoneargument}{\utfmod{#1}}}
+%D \stoptyping
+%D
+%D In order to save calculation time, I decided to change
+%D this definition into:
+
+%D \starttyping
+%D \def\utfunihash#1%
+%D {\@EA\doutfunihash\@EA{\number\utfdiv{#1}}{#1}}
+%D
+%D \def\doutfunihash#1#2%
+%D {\ifcsname\@@univector\number#1\endcsname
+%D \csname\csname\@@univector#1\endcsname{\utfmod{#2}}\endcsname
+%D \else
+%D \unknownchar
+%D \fi}
+%D \stoptyping
+%D
+%D Or leaner and meaner:
+%D
+%D \starttyping
+%D \def\doutfunihash#1#2%
+%D {\csname
+%D \ifcsname\@@univector\number#1\endcsname
+%D \csname\@@univector#1\endcsname{\utfmod{#2}}%
+%D \else
+%D \@@unknownchar
+%D \fi
+%D \endcsname}
+%D \stoptyping
+%D
+%D And finaly it became:
+
+\def\doutfunihash#1#2%
+ {\ifcsname\@@univector\number#1\endcsname
+ \csname\@@univector#1\endcsname{\utfmod{#2}}%
+ \else
+ \@@unknownchar
+ \fi}
+
+\def\utfunihashglyph#1%
+ {\csname\@EA\doutfunihash\@EA{\number\utfdiv{#1}}{#1}\endcsname}
+
+\def\utfunihashcommand
+ {\@EAEAEA\string\utfunihashglyph}
+
+%D For practical purposes, we handle the normal \ASCII\
+%D characters here:
+
+\def\utfunihashglyph#1%
+ {\csname
+ \ifnum#1<\utf@i
+ \strippedcsname\unicodeasciicharacter\endcsname{#1}%
+ \else
+ \@EA\doutfunihash\@EA{\number\utfdiv{#1}}{#1}\endcsname
+ \fi}
+
+%D Well, we also want a plug-in mechanism, so we en dup with
+%D a messy:
+
+\def\utfunihashglyph#1%
+ {\@EA\doutfunihashglyph\@EA{\number\numexpr\utfdiv{#1}\@EA\relax\@EA}\@EA{\number\utfmod{#1}}{#1}}
+
+% \def\doutfunihashglyph#1#2#3% div mod raw
+% {\csname
+% \ifnum#3<\utf@i
+% \strippedcsname\unicodeasciicharacter\endcsname{#2}%
+% \else\ifcsname\@@unicommand#1\endcsname
+% \@@unicommand#1\endcsname{#2}%
+% \else\ifcsname\@@univector#1\endcsname
+% \csname\@@univector#1\endcsname{#2}\endcsname % watch the nested csname; it's a speed up
+% \else
+% \strippedcsname\unicodeunknowncharacter\endcsname{#2}%
+% \fi\fi\fi}
+%
+% \def\unicodeunknowncharacter#1%
+% {\unknownchar}
+%
+% The next one permits lookahead
+
+\def\doutfunihashglyph#1#2#3% div mod raw
+ {\csname utf!\ifnum#3<\utf@i 1\else
+ \ifcsname\@@unicommand#1\endcsname2\else
+ \ifcsname\@@univector #1\endcsname3\else
+ 4\fi\fi\fi !\endcsname{#1}{#2}}
+
+\setvalue{utf!1!}#1{\unicodeasciicharacter} % {#2}
+\setvalue{utf!2!}#1{\csname\@@unicommand#1\endcsname} % {#2}
+\setvalue{utf!3!}#1#2{\csname\csname\@@univector#1\endcsname{#2}\endcsname} % watch the nested csname; it's a speed up
+\setvalue{utf!4!}#1#2{\unicodeunknowncharacter}
+
+\def\unicodeunknowncharacter
+ {\unknownchar}
+
+%D With:
+
+\let\unicodeasciicharacter\rawcharacter
+
+%D Commands are defined with:
+
+\def\defineunicodecommand #1 #2% #2{range number}{char number}
+ {\setvalue{\@@unicommand#1}##1{#2{#1}{##1}}}
+
+%D For instance:
+%D
+%D \starttyping
+%D \defineutfcommand 81 {\uchar}
+%D \stoptyping
+
+%D Now we can also say:
+
+\let\utfunihash\utfunihashglyph
+
+%D We also need:
+
+\def\utfuniglyphname#1%
+ {{\tttf
+ \ifnum#1<\utf@i
+ \unicodeasciicharacter{#1}%
+ \else
+ \expandafter\string\csname\doutfunihash{\number\utfdiv{#1}}{#1}\endcsname
+ \fi}}
+
+%D The combined presentation is implemented by:
+
+\def\utfunihashchar #1%
+ {\utfunihash{#1}\low{\infofont\unicodenumber{#1}}}
+
+\def\utfunihashsplit#1%
+ {\utfunihash{#1}\low{\infofont\unicodepair{#1}}}
+
+\def\utfunihashboth #1%
+ {\utfunihash{#1}\low{\infofont\unicodenumber{#1}->\unicodepair{#1}}}
+
+%D Unknown characters get a placeholder.
+
+\unexpanded\def\unknownchar % {} prevents problems with arguments
+ {{\hbox{\vrule\!!width.5em\!!height1ex\!!depth\zeropoint}}}
+
+%D So far for the conversion macros. The optimizations we
+%D did, brought down the runtime some 50\%, which, given that
+%D the majority of characters will be normal \ASCII\
+%D characters, the penalty of conversion is not that large.
+
+%D \macros
+%D {useunicodevector}
+%D
+%D Since we end up with many encodings, it starts making
+%D sense to postpone loading, so let's start doing this
+%D with \UNICODE.
+
+\def\doifunicodevector#1%
+ {\doifdefined{\@@univector#1}}
+
+\def\useunicodevector[#1]%
+ {\processcommalist[#1]\douseunicodevector}
+
+\def\douseunicodevector#1%
+ {\ifundefined{\@@univector#1}%
+ % \readsysfile{\f!unicprefix\threedigits{#1}}
+ \readsysfile{\f!unicprefix\doifnumberelse{#1}{\threedigits{#1}}{#1}}
+ {\writestatus{unicode}{loading vector #1}}
+ {\writestatus{unicode}{unknown vector #1}}%
+ \fi}
+
+%D \macros
+%D {startunicodevector}
+%D
+%D A vector roughly looks as follows. By putting the text
+%D inside the name constructor, we prevent problems with
+%D partial expansion in macros and special cases.
+%D
+%D \starttyping
+%D \startunicodevector 0
+%D \ifcase\numexpr(#1-159)\or
+%D \@@unknownchar\or % NO-BREAK SPACE
+%D exclamdown\or
+%D textcent\or
+%D ....\else
+%D \@@unknowncharacter
+%D \fi
+%D \stopunicodevector
+%D \stoptyping
+%D
+%D In vector \type {unix-000} you will find another
+%D optimizations. By using as less tokens as possible, we limit
+%D the time skipping branches in the test, and save upto 20\%
+%D runtime.
+
+\def\startunicodevector #1 #2\stopunicodevector
+ {\setgvalue{\@@univector#1}##1{#2}}
+
+%D We define (as a practical example) the utf signal FEFF:
+
+\ifx\zwnbsp\undefined
+ \let\zwnbsp\relax % zerowidthnonbreakablespace
+\fi
+
+\startunicodevector 254
+ \expandafter\strippedcsname\ifnum#1<255 \unknownchar\else\zwnbsp\fi
+\stopunicodevector
+
+%D Here we provide another auxiliary macro:
+%D
+%D \startbuffer
+%D \unicodeinfoline{196}{Ä}{LATIN CAPITAL LETTER A WITH DIAERESIS}
+%D \unicodeinfoline{197}{Ã…}{LATIN CAPITAL LETTER A WITH RING ABOVE}
+%D \unicodeinfoline{198}{Æ}{LATIN CAPITAL LETTER AE}
+%D \unicodeinfoline{199}{Ç}{LATIN CAPITAL LETTER C WITH CEDILLA}
+%D \unicodeinfoline{200}{È}{LATIN CAPITAL LETTER E WITH GRAVE}
+%D \unicodeinfoline{201}{É}{LATIN CAPITAL LETTER E WITH ACUTE}
+%D \stopbuffer
+%D
+%D \typebuffer
+%D
+%D \start \enableregime[utf]\getbuffer \stop
+
+\def\unicodeinfoline#1#2#3%
+ {\ifnum#1>\utf@g % 128
+ \noindent \hbox
+ {\hbox to 4em{\tttf\unicodehexnumber{#1}\hss}\quad
+ \hbox to 1em{#2\hss}\quad
+ \hbox to 9em{\tttf\unicodenumber{#1}->\unicodepair{#1}\hss}\quad
+ \hbox to 9em{\tttf\let\utfunihash\utfunihashcommand#2\hss}\quad % tricky
+ \lowercase {\tttf#3}}\par
+ \fi}
+
+%D The next code permits utf code in hyperlinks:
+
+\def\cleanunicodechar#1{.#1.}
+
+\appendtoks \let\unicodechar\cleanunicodechar \to \everycleanupfeatures
+
+%D We will now hook this mechanism in the existing font
+%D handler. More documentation will follow. Probably, some
+%D features in \type {font-uni.tex} will be generalized
+%D and moved here.
+
+\def\unidiv{0} \def\unimod{0}
+
+\chardef\utfunihashmode=0 % 0=hash glyph / 1=font glyph
+
+\def\utfunifontglyph#1%
+ {\xdef\unidiv{\number\utfdiv{#1}}%
+ \xdef\unimod{\number\utfmod{#1}}%
+ \ifnum#1<\utf@i
+ \char\unimod % \unicodeascii\unimod
+ \else\ifcsname\@@univector\unidiv\endcsname
+ \csname\doutfunihash{\unidiv}{#1}\endcsname
+ \else % so, these can be different fonts !
+ \unicodeglyph\unidiv\unimod % no \uchar (yet)
+ \fi\fi}
+
+\chardef\utfunicommandmode=0 % 1 = hex
+
+\def\unicodecommandchar#1#2%
+ {\string\char
+ \ifcase\utfunicommandmode
+ #1:#2\else\lchexnumbers#1:\lchexnumbers#2%
+ \fi}
+
+\def\utfunifontcommand#1%
+ {\xdef\unidiv{\number\utfdiv{#1}}%
+ \xdef\unimod{\number\utfmod{#1}}%
+ \ifnum#1<\utf@i
+ \unicodecommandchar\unidiv\unimod
+ \else\ifcsname\@@univector\unidiv\endcsname
+ \@EA\string\csname\doutfunihash{\unidiv}{#1}\endcsname
+ \else
+ \unicodecommandchar\unidiv\unimod
+ \fi\fi}
+
+\def\utfunihash
+ {\ifcase\utfunihashmode
+ \@EA\utfunihashglyph
+ \else
+ \@EA\utfunifontglyph
+ \fi}
+
+\def\utfunihushcommand
+ {\@EAEAEA\string\utfunihashglyph}
+
+\def\utfunihashcommand
+ {\ifcase\utfunihashmode
+ \@EA\utfunihushcommand
+ \else
+ \@EA\utfunifontcommand
+ \fi}
+
+%D We can convert from a number to some UTF code with the folowing
+%D conversion macro.
+
+% The first, na\"ive version:
+%
+% \def\numbertoutf#1%
+% {\ifnum#1<128
+% \rawcharacter{#1}%
+% \else\ifnum#1<2048
+% \rawcharacter{\the\numexpr192+#1/64\relax}%
+% \rawcharacter{\the\numexpr128+#1-(#1/64)*64\relax}%
+% \else % 3 bytes
+% \rawcharacter{\the\numexpr224+#1/4096\relax}%
+% \rawcharacter{\the\numexpr128+(#1-(#1/4096)*4096)/128\relax}%
+% \rawcharacter{\the\numexpr128+(#1-(#1/4096)*4096)+(#1-(#1/4096)*4096)/128\relax}%
+% \fi\fi}
+
+% We have to compensate for etex's rounding (thanks to Taco and
+% Nanning) for pointing/sorting this out:
+
+% \def\numbertoutf#1%
+% {\ifnum#1<128
+% \rawcharacter{#1}%
+% \else\ifnum#1<2048
+% \rawcharacter{\the\numexpr192+(#1-32)/64\relax}%
+% \rawcharacter{\the\numexpr128+(#1-((#1-32)/64)*64)\relax}%
+% \else
+% \rawcharacter{\the\numexpr224+(#1-2048)/4096\relax}%
+% \rawcharacter{\the\numexpr128+(#1-(((#1-2048)/4096)*4096)-32)/64\relax}%
+% \rawcharacter{\the\numexpr128+(#1-(((#1-2048)/4096)*4096)-((#1-(((#1-2048)/4096)*4096)-32)/64)*64)\relax}%
+% \fi\fi}
+
+\beginETEX \numexpr
+
+ \chardef \utf@a= 64
+ \mathchardef \utf@b= 4096
+ \newcount\utf@c\utf@c=262144
+ \chardef \utf@d= 192
+ \chardef \utf@e= 224
+ \chardef \utf@f= 240
+ \chardef \utf@g= 128
+ \mathchardef \utf@h= 256
+ \chardef \utf@i= 127
+ \mathchardef \utf@j= 2048
+ \chardef \utf@k= 32
+
+ % div: \numexp#1/#2\relax
+ % mod: \numexp#1-(#1/#2)*#2\relax
+
+ % \def\numbertoutf#1%
+ % {\ifnum#1<\utf@g
+ % \rawcharacter{#1}%
+ % \else\ifnum#1<2048
+ % \rawcharacter{\numexpr192+(#1/64)\relax}% 192 + (ud div 64)
+ % \rawcharacter{\numexpr128+(#1-(#1/64)*64)\relax}% 128 + (ud mod 64)
+ % \else\ifnum#1<2097152
+ % \rawcharacter{\numexpr224+(#1-(#1/4096)\relax}% 224 + (ud div 4096)
+ % \rawcharacter{\numexpr128+(#1-((#1/64)-((#1/64)/64)*64)\relax}% 128 + ((ud div 64) mod 64)
+ % \rawcharacter{\numexpr128+(#1-(#1-(#1/64)*64)\relax}% 128 + (ud mod 64)
+ % \else
+ % % todo
+ % \fi\fi}
+
+ \def\numbertoutf#1% okay?
+ {\ifnum#1<\utf@g
+ \rawcharacter{#1}%
+ \else\ifnum#1<\utf@j
+ \rawcharacter{\the\numexpr\utf@d+(#1-\utf@k)/\utf@a\relax}%
+ \rawcharacter{\the\numexpr\utf@g+(#1-((#1-\utf@k)/\utf@a)*\utf@a)\relax}%
+ \else
+ \rawcharacter{\the\numexpr\utf@e+(#1-\utf@j)/\utf@b\relax}%
+ \rawcharacter{\the\numexpr\utf@g+(#1-(((#1-\utf@j)/\utf@b)*\utf@b)-\utf@k)/\utf@a\relax}%
+ \rawcharacter{\the\numexpr\utf@g+(#1-(((#1-\utf@j)/\utf@b)*\utf@b)-((#1-(((#1-\utf@j)/\utf@b)*\utf@b)-\utf@k)/\utf@a)*\utf@a)\relax}%
+ \fi\fi}
+
+\endETEX
+
+\def\numbertohexstring#1{0x\uchexnumbers{\utfdiv{#1}}\uchexnumbers{\utfmod{#1}}}
+
+\beginXETEX
+ \let\numbertoutf\numbertohexstring
+\endXETEX
+
+\beginTEX
+ \let\numbertoutf\numbertohexstring
+\endTEX
+
+\def\uchartoutf#1#2%
+ {\expandafter\numbertoutf\expandafter{\the\numexpr#1*\utf@h+#2\relax}}
+
+%D Here is a mapping trick. By mapping the tex specific characters to
+%D private ones, we can prevent problems with utility files.
+
+\defineunicodecommand{240} {\doprivateunicodechar}
+
+\def\doprivateunicodechar#1#2{\char#2\relax}
+
+\def\registerprivateunicodechar#1 {\letvalue{puc::\number#1}\relax}
+
+\registerprivateunicodechar `\%
+\registerprivateunicodechar `\$
+\registerprivateunicodechar `\{
+\registerprivateunicodechar `\}
+\registerprivateunicodechar `\~
+\registerprivateunicodechar `\_
+\registerprivateunicodechar `\^
+\registerprivateunicodechar `\#
+
+\def\numbertoutp#1{\numbertoutf{\the\numexpr#1\ifcsname puc::\number#1\endcsname+"F000\fi\relax}}
+
+%D In the \XML\ expander we will do:
+%D
+%D \starttyping
+%D \def\getXMLhexcharacter##1{\numbertoutp{"##1}}%
+%D \def\getXMLdeccharacter##1{\numbertoutp {##1}}%
+%D \stoptyping
+
+%D Goodies:
+
+\fetchruntimecommand \showunicodevector {\f!unicprefix\s!run}
+\fetchruntimecommand \showunicodetable {\f!unicprefix\s!run}
+
+%D Well, let's at least preload a few familiar ones. Here we
+%D also load the \UTF\ regime.
+
+\useunicodevector[0,1,2,3,4,5,30,31,32,33,34,37,39,251]
+\useunicodevector[cjk]
+
+\useregime[utf]
+
+% 31, text mem usage first
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/unic-ini.mkiv b/Master/texmf-dist/tex/context/base/unic-ini.mkiv
new file mode 100644
index 00000000000..a174f7a39c7
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/unic-ini.mkiv
@@ -0,0 +1,48 @@
+%D \module
+%D [ file=unic-ini,
+%D version=2002.12.03,
+%D title=\CONTEXT\ \UNICODE\ Support,
+%D subtitle=\UNICODE\ \& UTF-8 support,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{Context UNICODE Macros (ini)}
+
+%D Much of this is not needed at all in \LUATEX\ and we can save some
+%D 50K on the compressed format.
+
+\unprotect
+
+\def\keeputfcharacters {}
+\def\registerprivateunicodechar#1 {}
+\def\defineunicodecommand #1 #2{}
+\def\doifunicodevector #1{\firstofoneargument}
+\def\useunicodevector [#1]{}
+\def\startunicodevector #1\stopunicodevector{}
+\def\unicodeinfoline #1#2#3{}
+\def\cleanunicodechar #1{#1}
+\def\unicodeunknowncharacter {\unknownchar}
+
+\chardef\utfunicodetracer \zerocount
+\chardef\utfunicommandmode\zerocount
+
+\def\unicodechar #1{\char\numexpr#1\relax} % no lookahead
+\def\unicodenumber #1{\the \numexpr#1\relax} % no lookahead
+\def\unicodehexnumber#1{\ctxlua{tex.sprint(number.toevenhex(\number#1))}}
+
+\unexpanded\def\unknownchar{{\hbox{\vrule\!!width.5em\!!height1ex\!!depth\zeropoint}}}
+
+\ifx\zwnbsp\undefined \let\zwnbsp\relax \fi % zerowidthnonbreakablespace
+
+\def\showunicodevector[#1]{}
+\def\showunicodetable [#1]{}
+
+% \fetchruntimecommand \showunicodevector {\f!unicprefix\s!run}
+% \fetchruntimecommand \showunicodetable {\f!unicprefix\s!run}
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/verb-ini.tex b/Master/texmf-dist/tex/context/base/verb-ini.tex
index c76e0847f69..e30c9ecfe8f 100644
--- a/Master/texmf-dist/tex/context/base/verb-ini.tex
+++ b/Master/texmf-dist/tex/context/base/verb-ini.tex
@@ -13,7 +13,10 @@
%D Today I would implement the pretty handler slightly
%D different, using stack and intermediate flushing. Maybe
-%D even without active chars. So, someday \unknown
+%D even without active chars. So, someday \unknown. Also
+%D I think that there are better ways (the current approach
+%D is an accumulation; for instance, we could save a second
+%D argument by turning chars into numbers and vise versa.
%D Because this module is quite independant of system macros,
%D it can be used as a stand||alone verbatim environment.
@@ -59,11 +62,9 @@
%D use the following construction for display verbatim:
%D
%D \starttyping
-%D \starttyping
%D The Dutch word 'typen' stands for 'typing', therefore in the Dutch version
%D one will not find the word 'verbatim'.
%D \stoptyping
-%D \stoptyping
%D
%D In \CONTEXT\ files can be typed with \type{\typefile} and
%D inline verbatim can be accomplished with \type{\type}. This
@@ -760,7 +761,7 @@
{\par
\bgroup
\processingverbatimtrue
- \global\verbatimlinenumber0
+ \global\verbatimlinenumber\zerocount
\global\linepartrue
\beginofverbatimlines
\bgroup
@@ -781,7 +782,8 @@
\obeycharacters
\ignoreeofs
\catcode`\^^M=\@@ignore % \par is already taken care of
- \openin\verbatiminput=#1\relax
+% \openin\verbatiminput=#1\relax
+ \openinputfile\verbatiminput{#1}%
\skipfirstverbatimlinefalse
\initializeverbatimline
\def\readline%
@@ -1393,7 +1395,7 @@
%D text and files verbatim. The inline alternative also accepts
%D user supplied delimiters.
%D
-%D \starttyping
+%D
%D \type{text}
%D
%D \starttyping
@@ -1401,7 +1403,6 @@
%D \stoptyping
%D
%D \typefile{filename}
-%D \stoptyping
%D
%D We can turn on the options by:
%D
diff --git a/Master/texmf-dist/tex/context/base/verb-lua.lua b/Master/texmf-dist/tex/context/base/verb-lua.lua
new file mode 100644
index 00000000000..78d5f2a2c1f
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/verb-lua.lua
@@ -0,0 +1,212 @@
+-- filename : type-lua.lua
+-- comment : companion to core-buf.tex
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+-- BROKEN : result is now table
+
+
+
+if not buffers then buffers = { } end
+if not buffers.visualizers then buffers.visualizers = { } end
+if not buffers.visualizers.lua then buffers.visualizers.lua = { } end
+
+buffers.visualizers.lua.identifiers = { }
+
+-- borrowed from scite
+
+buffers.visualizers.lua.identifiers.core = {
+ "and", "break", "do", "else", "elseif", "end", "false", "for", "function",
+ "if", "in", "local", "nil", "not", "or", "repeat", "return", "then",
+ "true", "until", "while"
+}
+
+buffers.visualizers.lua.identifiers.base = {
+ "assert", "collectgarbage", "dofile", "error", "gcinfo", "loadfile",
+ "loadstring", "print", "rawget", "rawset", "require", "tonumber",
+ "tostring", "type", "unpack",
+}
+
+buffers.visualizers.lua.identifiers.five = {
+ "_G", "getfenv", "getmetatable", "ipairs", "loadlib", "next", "pairs",
+ "pcall", "rawequal", "setfenv", "setmetatable", "xpcall", "string", "table",
+ "math", "coroutine", "io", "os", "debug", "load", "module", "select"
+}
+
+buffers.visualizers.lua.identifiers.libs = {
+ -- coroutine
+ "coroutine.create", "coroutine.resume", "coroutine.status", "coroutine.wrap",
+ "coroutine.yield", "coroutine.running",
+ -- package
+ "package.cpath", "package.loaded", "package.loadlib", "package.path",
+ -- io
+ "io.close", "io.flush", "io.input", "io.lines", "io.open", "io.output",
+ "io.read", "io.tmpfile", "io.type", "io.write", "io.stdin", "io.stdout",
+ "io.stderr", "io.popen",
+ -- math
+ "math.abs", "math.acos", "math.asin", "math.atan", "math.atan2", "math.ceil",
+ "math.cos", "math.deg", "math.exp", "math.floor math.", "math.ldexp",
+ "math.log", "math.log10", "math.max", "math.min math.mod math.pi", "math.pow",
+ "math.rad", "math.random", "math.randomseed", "math.sin", "math.sqrt",
+ "math.tan", "math.cosh", "math.fmod", "math.modf", "math.sinh", "math.tanh",
+ "math.huge",
+ -- string
+ "string.byte", "string.char", "string.dump", "string.find", "string.len",
+ "string.lower", "string.rep", "string.sub", "string.upper", "string.format",
+ "string.gfind", "string.gsub", "string.gmatch", "string.match", "string.reverse",
+ -- table
+ "table.maxn", "table.concat", "table.foreach", "table.foreachi", "table.getn",
+ "table.sort", "table.insert", "table.remove", "table.setn",
+ -- os
+ "os.clock", "os.date", "os.difftime", "os.execute", "os.exit", "os.getenv",
+ "os.remove", "os.rename", "os.setlocale", "os.time", "os.tmpname",
+ -- package
+ "package.preload", "package.seeall"
+}
+
+buffers.visualizers.lua.words = { }
+
+for k,v in pairs(buffers.visualizers.lua.identifiers) do
+ for _,w in pairs(v) do
+ buffers.visualizers.lua.words[w] = k
+ end
+end
+
+buffers.visualizers.lua.styles = { }
+
+buffers.visualizers.lua.styles.core = ""
+buffers.visualizers.lua.styles.base = "\\sl "
+buffers.visualizers.lua.styles.five = "\\sl "
+buffers.visualizers.lua.styles.libs = "\\sl "
+
+-- btex .. etex
+
+buffers.visualizers.lua.colors = {
+ "prettyone",
+ "prettytwo",
+ "prettythree",
+ "prettyfour",
+}
+
+buffers.visualizers.lua.states = {
+ ['1']=1, ['2']=1, ['3']=1, ['4']=1, ['5']=1, ['6']=1, ['7']=1, ['8']=1, ['9']=1, ['0']=1,
+ ['--']=4,
+ ['"']=3, ["'"]=3,
+ ['+']=1, ['-']=1, ['*']=1, ['/']=1, ['%']=1, ['^']=1,
+}
+
+buffers.visualizers.lua.options = { }
+
+buffers.visualizers.lua.options.colorize_strings = false
+buffers.visualizers.lua.options.colorize_comments = false
+
+function buffers.flush_lua_word(state, word, result)
+ if #word>0 then
+ local id = buffers.visualizers.lua.words[word]
+ if id then
+ state, result = buffers.change_state(2, state, result)
+ if buffers.visualizers.lua.styles[id] then
+ state, result = buffers.finish_state(state,result .. buffers.visualizers.lua.styles[id] .. word)
+ else
+ state, result = buffers.finish_state(state,result .. word)
+ end
+ return state, result
+ else
+ state, result = buffers.finish_state(state,result)
+ return state, result .. buffers.escaped(word) -- cmp mp
+ end
+ else
+ state, result = buffers.finish_state(state,result)
+ return state, result
+ end
+end
+
+buffers.visualizers.lua.states.incomment = false
+
+-- to be sped up
+
+function buffers.visualizers.lua.flush_line(str, nested)
+ local result, state = { }, 0
+ local instr, inesc, incom = false, false, false
+ local c, p
+ local sb, ss, sf = string.byte, string.sub, string.find
+ local code, comment
+--~ buffers.currentcolors = buffers.visualizers.lua.colors
+--~ if sf(str,"^%-%-%[") then
+--~ buffers.visualizers.lua.states.incomment = true
+--~ code, comment, incom = "", str, true
+--~ elseif sf(str,"^%]%-%-") then
+--~ buffers.visualizers.lua.states.incomment = false
+--~ code, comment, incom = "", str, true
+--~ elseif buffers.visualizers.lua.states.incomment then
+--~ code, comment, incom = "", str, true
+--~ else
+--~ code, comment = string.match(str,"^(.-)%-%-(.*)$")
+--~ if not code then
+--~ code, comment = str, ""
+--~ end
+--~ end
+--~ -- bla bla1 bla.bla
+--~ for c in string.utfcharacters(code) do
+--~ if instr then
+--~ if c == s then
+--~ if inesc then
+--~ result = result .. "\\char" .. sb(c) .. " "
+--~ inesc = false
+--~ else
+--~ state, result = buffers.change_state(buffers.visualizers.lua.states[c], state, result)
+--~ instr = false
+--~ result = result .. "\\char" .. sb(c) .. " "
+--~ state, result = buffers.finish_state(state,result)
+--~ end
+--~ elseif c == "\\" then
+--~ inesc = not inesc
+--~ result = result .. buffers.escaped_chr(c)
+--~ else
+--~ inesc = false
+--~ result = result .. buffers.escaped_chr(c)
+--~ end
+--~ elseif sf(c,"^([\'\"])$") then
+--~ s, instr = c, true
+--~ state, result = buffers.change_state(buffers.visualizers.lua.states[c], state, result)
+--~ result = result .. "\\char" .. sb(c) .. " "
+--~ if not buffers.visualizers.lua.options.colorize_strings then
+--~ state, result = buffers.finish_state(state,result)
+--~ end
+--~ elseif c == " " then
+--~ state, result = buffers.flush_lua_word(state, word, result)
+--~ word = ""
+--~ result = result .. "\\obs "
+--~ elseif sf(c,"^[%a]$") then
+--~ state, result = buffers.finish_state(state,result)
+--~ word = word .. c
+--~ elseif (#word > 1) and sf(c,"^[%d%.%_]$") then
+--~ word = word .. c
+--~ else
+--~ state, result = buffers.flush_lua_word(state, word, result)
+--~ word = ""
+--~ state, result = buffers.change_state(buffers.visualizers.lua.states[c], state, result)
+--~ result = result .. "\\char" .. sb(c) .. " "
+--~ instr = (c == '"')
+--~ end
+--~ end
+--~ state, result = buffers.flush_lua_word(state, word, result)
+--~ if comment ~= "" then
+--~ state, result = buffers.change_state(buffers.visualizers.lua.states['--'], state, result)
+--~ if not incom then
+--~ result = result .. buffers.escaped("--")
+--~ end
+--~ if buffers.visualizers.lua.options.colorize_comments then
+--~ state, result = buffers.finish_state(state,result)
+--~ result = result .. buffers.escaped(comment)
+--~ else
+--~ result = result .. buffers.escaped(comment)
+--~ state, result = buffers.finish_state(state,result)
+--~ end
+--~ else
+--~ state, result = buffers.finish_state(state,result)
+--~ end
+--~ tex.sprint(tex.ctxcatcodes,result)
+ return "not yet finished"
+end
diff --git a/Master/texmf-dist/tex/context/base/verb-mp.lua b/Master/texmf-dist/tex/context/base/verb-mp.lua
new file mode 100644
index 00000000000..90091a2a98c
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/verb-mp.lua
@@ -0,0 +1,234 @@
+-- filename : type-mp.lua
+-- comment : companion to core-buf.tex
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+if not buffers then buffers = { } end
+if not buffers.visualizers then buffers.visualizers = { } end
+if not buffers.visualizers.mp then buffers.visualizers.mp = { } end
+
+buffers.visualizers.mp.identifiers = { }
+
+buffers.visualizers.mp.identifiers.primitives = {
+ 'charcode', 'day', 'linecap', 'linejoin', 'miterlimit', 'month', 'pausing',
+ 'prologues', 'showstopping', 'time', 'tracingcapsules', 'tracingchoices',
+ 'tracingcommands', 'tracingequations', 'tracinglostchars',
+ 'tracingmacros', 'tracingonline', 'tracingoutput', 'tracingrestores',
+ 'tracingspecs', 'tracingstats', 'tracingtitles', 'truecorners',
+ 'warningcheck', 'year', 'mpprocset',
+ 'false', 'nullpicture', 'pencircle', 'true',
+ 'and', 'angle', 'arclength', 'arctime', 'ASCII', 'bluepart', 'boolean', 'bot',
+ 'char', 'color', 'cosd', 'cycle', 'decimal', 'directiontime', 'floor', 'fontsize',
+ 'greenpart', 'hex', 'infont', 'intersectiontimes', 'known', 'length', 'llcorner',
+ 'lrcorner', 'makepath', 'makepen', 'mexp', 'mlog', 'normaldeviate', 'not',
+ 'numeric', 'oct', 'odd', 'or', 'path', 'pair', 'pen', 'penoffset', 'picture', 'point',
+ 'postcontrol', 'precontrol', 'redpart', 'reverse', 'rotated', 'scaled',
+ 'shifted', 'sind', 'slanted', 'sqrt', 'str', 'string', 'subpath', 'substring',
+ 'transform', 'transformed', 'ulcorner', 'uniformdeviate', 'unknown',
+ 'urcorner', 'xpart', 'xscaled', 'xxpart', 'xypart', 'ypart', 'yscaled', 'yxpart',
+ 'yypart', 'zscaled',
+ 'addto', 'clip', 'input', 'interim', 'let', 'newinternal', 'save', 'setbounds',
+ 'shipout', 'show', 'showdependencies', 'showtoken', 'showvariable',
+ 'special',
+ 'begingroup', 'endgroup', 'of', 'curl', 'tension', 'and', 'controls',
+ 'reflectedabout', 'rotatedaround', 'interpath', 'on', 'off', 'beginfig',
+ 'endfig', 'def', 'vardef', 'enddef', 'epxr', 'suffix', 'text', 'primary', 'secondary',
+ 'tertiary', 'primarydef', 'secondarydef', 'tertiarydef', 'top', 'bottom',
+ 'ulft', 'urt', 'llft', 'lrt', 'randomseed', 'also', 'contour', 'doublepath',
+ 'withcolor', 'withpen', 'dashed', 'if', 'else', 'elseif', 'fi', 'for', 'endfor', 'forever', 'exitif',
+ 'forsuffixes', 'downto', 'upto', 'step', 'until',
+ 'charlist', 'extensible', 'fontdimen', 'headerbyte', 'kern', 'ligtable',
+ 'boundarychar', 'chardp', 'charext', 'charht', 'charic', 'charwd', 'designsize',
+ 'fontmaking', 'charexists',
+ 'cullit', 'currenttransform', 'gfcorners', 'grayfont', 'hround',
+ 'imagerules', 'lowres_fix', 'nodisplays', 'notransforms', 'openit',
+ 'displaying', 'currentwindow', 'screen_rows', 'screen_cols',
+ 'pixels_per_inch', 'cull', 'display', 'openwindow', 'numspecial',
+ 'totalweight', 'autorounding', 'fillin', 'proofing', 'tracingpens',
+ 'xoffset', 'chardx', 'granularity', 'smoothing', 'turningcheck', 'yoffset',
+ 'chardy', 'hppp', 'tracingedges', 'vppp',
+ 'extra_beginfig', 'extra_endfig', 'mpxbreak',
+ 'end', 'btex', 'etex', 'verbatimtex'
+}
+
+buffers.visualizers.mp.identifiers.plain = {
+ 'ahangle', 'ahlength', 'bboxmargin', 'defaultpen', 'defaultscale',
+ 'labeloffset', 'background', 'currentpen', 'currentpicture', 'cuttings',
+ 'defaultfont', 'extra_beginfig', 'extra_endfig',
+ 'beveled', 'black', 'blue', 'bp', 'butt', 'cc', 'cm', 'dd', 'ditto', 'down', 'epsilon',
+ 'evenly', 'fullcircle', 'green', 'halfcircle', 'identity', 'in', 'infinity', 'left',
+ 'mitered', 'mm', 'origin', 'pensquare', 'pt', 'quartercircle', 'red', 'right',
+ 'rounded', 'squared', 'unitsquare', 'up', 'white', 'withdots',
+ 'abs', 'bbox', 'ceiling', 'center', 'cutafter', 'cutbefore', 'dir',
+ 'directionpoint', 'div', 'dotprod', 'intersectionpoint', 'inverse', 'mod', 'lft',
+ 'round', 'rt', 'unitvector', 'whatever',
+ 'cutdraw', 'draw', 'drawarrow', 'drawdblarrow', 'fill', 'filldraw', 'drawdot',
+ 'loggingall', 'pickup', 'tracingall', 'tracingnone', 'undraw', 'unfill',
+ 'unfilldraw',
+ 'buildcycle', 'dashpattern', 'decr', 'dotlabel', 'dotlabels', 'drawoptions',
+ 'incr', 'label', 'labels', 'max', 'min', 'thelabel', 'z',
+ 'beginchar', 'blacker', 'capsule_end', 'change_width',
+ 'define_blacker_pixels', 'define_corrected_pixels',
+ 'define_good_x_pixels', 'define_good_y_pixels',
+ 'define_horizontal_corrected_pixels', 'define_pixels',
+ 'define_whole_blacker_pixels', 'define_whole_pixels',
+ 'define_whole_vertical_blacker_pixels',
+ 'define_whole_vertical_pixels', 'endchar', 'extra_beginchar',
+ 'extra_endchar', 'extra_setup', 'font_coding_scheme',
+ 'font_extra_space'
+}
+
+buffers.visualizers.mp.identifiers.metafun = {
+ 'unitcircle', 'fulldiamond', 'unitdiamond',
+ 'halfcircle', 'quartercircle',
+ 'llcircle', 'lrcircle', 'urcircle', 'ulcircle',
+ 'tcircle', 'bcircle', 'lcircle', 'rcircle',
+ 'lltriangle', 'lrtriangle', 'urtriangle', 'ultriangle',
+ 'smoothed', 'cornered', 'superellipsed', 'randomized', 'squeezed',
+ 'punked', 'curved', 'unspiked', 'simplified', 'blownup', 'stretched',
+ 'enlarged', 'leftenlarged', 'topenlarged', 'rightenlarged', 'bottomenlarged',
+ 'llenlarged', 'lrenlarged', 'urenlarged', 'ulenlarged',
+ 'llmoved', 'lrmoved', 'urmoved', 'ulmoved',
+ 'boundingbox', 'innerboundingbox', 'outerboundingbox',
+ 'bottomboundary', 'leftboundary', 'topboundary', 'rightboundary',
+ 'xsized', 'ysized', 'xysized',
+ 'cmyk', 'transparent', 'withshade', 'spotcolor',
+ 'drawfill', 'undrawfill',
+ 'inverted', 'uncolored', 'softened', 'grayed',
+ 'textext', 'graphictext',
+ 'loadfigure', 'externalfigure'
+}
+
+buffers.visualizers.mp.words = { }
+
+for k,v in pairs(buffers.visualizers.mp.identifiers) do
+ for _,w in pairs(v) do
+ buffers.visualizers.mp.words[w] = k
+ end
+end
+
+buffers.visualizers.mp.styles = { }
+
+buffers.visualizers.mp.styles.primitives = ""
+buffers.visualizers.mp.styles.plain = "\\sl "
+buffers.visualizers.mp.styles.metafun = "\\sl "
+
+-- btex .. etex
+
+buffers.visualizers.mp.colors = {
+ "prettyone",
+ "prettytwo",
+ "prettythree",
+ "prettyfour",
+}
+
+buffers.visualizers.mp.states = {
+ [';']=1, ['$']=1, ['@']=1, ['#']=1,
+ ['\\']=2,
+ ['(']=3, [')']=3, ['[']=3, [']']=3, [':']=3, ['=']=3, ['<']=3, ['>']=3,
+ ['-']=4, ['+']=4, ['/']=4, ['*']=4, ['|']=4, ['`']=4, ['!']=4, ['?']=4, ['^']=4, ['&']=4, ['%']=4,
+ ['%']=4, ['.']=4, [',']=4
+}
+
+function buffers.flush_mp_word(state, word, intex, result)
+ if #word>0 then
+ if intex then
+ if word == 'etex' then
+ state = buffers.change_state(2, state, result)
+ result[#result+1] = word
+ state = buffers.finish_state(state,result)
+ return state, false
+ else
+ result[#result+1] = word
+ return state, true
+ end
+ else
+ local id = buffers.visualizers.mp.words[word]
+ if id then
+ state = buffers.change_state(2, state, result)
+ if buffers.visualizers.mp.styles[id] then
+ result[#result+1] = buffers.visualizers.mp.styles[id] .. word
+ else
+ result[#result+1] = word
+ end
+ state = buffers.finish_state(state,result)
+ return state, (word == 'btex') or (word == 'verbatimtex')
+ else
+ state = buffers.finish_state(state,result)
+ result[#result+1] = word
+ return state, intex
+ end
+ end
+ else
+ state = buffers.finish_state(state,result)
+ return state, intex
+ end
+end
+
+-- todo: split string in code and comment, and escape comment fast
+-- could be generic
+
+-- to be considered: visualizer => table [result, instr, incomment, word]
+
+function buffers.visualizers.mp.flush_line_(str,nested)
+ local result, state, word = { }, 0, ""
+ local instr, intex, incomment = false, false, false
+ local byte, find = utf.byte, utf.find
+ local finish, change = buffers.finish_state, buffers.change_state
+ buffers.currentcolors = buffers.visualizers.mp.colors
+ for c in string.utfcharacters(str) do
+ if incomment then
+ result[#result+1] = buffers.escaped_chr(c)
+ elseif c == '%' then
+ state = change(buffers.visualizers.mp.states[c], state, result)
+ incomment = true
+ result[#result+1] = "\\char" .. byte(c) .. " "
+ state = finish(state,result)
+ elseif instr then
+ if c == '"' then
+ state = change(buffers.visualizers.mp.states[c], state, result)
+ instr = false
+ result[#result+1] = "\\char" .. byte(c) .. " "
+ state = finish(state,result)
+ elseif find(c,"^[%a%d]$") then
+ result[#result+1] = c
+ else
+ result[#result+1] = "\\char" .. byte(c) .. " "
+ end
+ elseif c == " " then
+ state, intex = buffers.flush_mp_word_(state, word, intex, result)
+ word = ""
+ result[#result+1] = "\\obs "
+ elseif intex then
+ if find(c,"^[%a]$") then
+ word = word .. c
+ else
+ state, intex = buffers.flush_mp_word_(state, word, intex, result)
+ word = ""
+ if intex then
+ if find(c,"^[%d]$") then
+ result[#result+1] = c
+ else
+ result[#result+1] = "\\char" .. byte(c) .. " "
+ end
+ else
+ state = change(buffers.visualizers.mp.states[c], state, result)
+ result[#result+1] = "\\char" .. byte(c) .. " "
+ end
+ end
+ elseif find(c,"^[%a]$") then
+ state = finish(state,result)
+ word = word .. c
+ else
+ state, intex = buffers.flush_mp_word_(state, word, intex, result)
+ word = ""
+ state = change(buffers.visualizers.mp.states[c], state, result)
+ result[#result+1] = "\\char" .. byte(c) .. " "
+ instr = (c == '"')
+ end
+ end
+ state, intex = buffers.flush_mp_word_(state, word, intex, result)
+ state = finish(state,result)
+ buffers.flush_result(result,false)
+end
diff --git a/Master/texmf-dist/tex/context/base/verb-tex.lua b/Master/texmf-dist/tex/context/base/verb-tex.lua
new file mode 100644
index 00000000000..dbb483ad5df
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/verb-tex.lua
@@ -0,0 +1,122 @@
+-- filename : type-tex.lua
+-- comment : companion to core-buf.tex
+-- author : Hans Hagen, PRAGMA-ADE, Hasselt NL
+-- copyright: PRAGMA ADE / ConTeXt Development Team
+-- license : see context related readme files
+
+if not buffers then buffers = { } end
+if not buffers.visualizers then buffers.visualizers = { } end
+if not buffers.visualizers.tex then buffers.visualizers.tex = { } end
+
+buffers.visualizers.tex.colors = {
+ "prettytwo",
+ "prettyone",
+ "prettythree",
+ "prettyfour"
+}
+
+buffers.visualizers.tex.states = {
+ ['$']=2, ['{']=2, ['}']=2,
+ ['[']=3, [']']=3, ['(']=3, [')']=3, ['<']=3, ['>']=3, ['#']=3, ['=']=3, ['"']=3,
+ ['/']=4, ['^']=4, ['_']=4, ['-']=4, ['&']=4, ['+']=4, ["'"]=4, ['`']=4, ['|']=4, ['%']=4
+}
+
+-- using a table to store the result does not make sense here (actually,
+-- it's substantial slower since we're flushing lines on the fly)
+--
+-- we could use a special catcode regime: only \ { }
+
+function buffers.visualizers.tex.flush_line(str,nested)
+ local result, state = { }, 0
+ local first, escaping = false, false
+ local byte, find = utf.byte, utf.find
+ local finish, change = buffers.finish_state, buffers.change_state
+ buffers.currentcolors = buffers.visualizers.tex.colors
+ for c in string.utfcharacters(str) do
+ if c == " " then
+ if escaping then
+ result[#result+1] = " "
+ else
+ state = finish(state, result)
+ result[#result+1] = "\\obs "
+ end
+ escaping, first = false, false
+ elseif c == "\t" then
+ if escaping then
+ result[#result+1] = " "
+ else
+ state = finish(state, result)
+ result[#result+1] = "\\obs "
+ end
+ if buffers.visualizers.enabletab then
+ result[#result+1] = string.rep("\\obs ",i%buffers.visualizers.tablength)
+ end
+ escaping, first = false, false
+ elseif buffers.visualizers.enableescape and (c == buffers.visualizers.escapetoken) then
+ if escaping then
+ if first then
+ if find(c,"^[%a%!%?%@]$") then
+ result[#result+1] =c
+ else
+ result[#result+1] ="\\char" .. byte(c) .. " "
+ end
+ first = false
+ else
+ result[#result+1] = "\\"
+ first = true
+ end
+ else
+ state = finish(state, result)
+ result[#result+1] = "\\"
+ escaping, first = true, true
+ end
+ elseif escaping then
+ if find(c,"^[%a%!%?%@]$") then
+ result[#result+1] = c
+ else
+ result[#result+1] = "\\char" .. byte(c) .. " "
+ end
+ first = false
+ elseif first then
+ state = 1
+ if find(c,"^[%a%!%?%@]$") then
+ result[#result+1] = c
+ else
+ result[#result+1] = "\\char" .. byte(c) .. " "
+ state = finish(state, result)
+ end
+ first = false
+ elseif state == 1 then
+ if find(c,"^[%a%!%?%@]$") then
+ result[#result+1] = c
+ first = false
+ elseif c == "\\" then
+ state = change(1, state, result)
+ result[#result+1] = "\\char" .. byte(c) .. " "
+ first = true
+ else
+ state = change(buffers.visualizers.tex.states[c], state, result)
+ if state == 0 then
+ result[#result+1] = c
+ else
+ result[#result+1] = "\\char" .. byte(c) .. " "
+ end
+ first = false
+ end
+ elseif c == "\\" then
+ first = true
+ state = change(1, state, result)
+ result[#result+1] = "\\char" .. byte(c) .. " "
+ else
+ state = change(buffers.visualizers.tex.states[c], state, result)
+ if state == 0 then
+ result[#result+1] = c
+ else
+ result[#result+1] = "\\char" .. byte(c) .. " "
+ end
+ first = false
+ end
+ end
+ state = finish(state, result)
+ buffers.flush_result(result,nested)
+end
diff --git a/Master/texmf-dist/tex/context/base/verb-xml.tex b/Master/texmf-dist/tex/context/base/verb-xml.tex
index f80147ebee9..7b023731529 100644
--- a/Master/texmf-dist/tex/context/base/verb-xml.tex
+++ b/Master/texmf-dist/tex/context/base/verb-xml.tex
@@ -105,10 +105,9 @@
\setpretty`\7=17 \setpretty`\8=17 \setpretty`\9=17
\setpretty`\==16
\setpretty`\"=20
- \setpretty`\(=30 \setpretty`\)=30 \setpretty`\,=30
- \setpretty`\*=30 \setpretty`\+=30 \setpretty`\#=30
-% \setpretty`\:=30
- \setpretty`\:=10 % better for tags
+ \setpretty`\(=31 \setpretty`\)=31 \setpretty`\,=31
+ \setpretty`\*=31 \setpretty`\+=31 \setpretty`\#=31
+ \setpretty`\:=32
\setpretty`\&=41 \setpretty`\;=42 }
\gdef\XMLsethandlers%
@@ -121,7 +120,8 @@
\installprettyhandler 15 \XMLtypeonefive
\installprettyhandler 16 \XMLtypeonesix
\installprettyhandler 20 \XMLdoublequote
- \installprettyhandler 30 \XMLtypethree
+ \installprettyhandler 31 \XMLtypethreeone
+ \installprettyhandler 32 \XMLtypethreetwo
\installprettyhandler 41 \XMLbampersand
\installprettyhandler 42 \XMLeampersand }
@@ -256,7 +256,7 @@
\ifnum\prettytype=11 % >
\expandafter\dododoXMLtypeonetwo
\else % treat as `green' character
- \expandafter\XMLtypethree
+ \expandafter\XMLtypethreeone
\fi
{#1}#2}
@@ -386,7 +386,7 @@
% symbols like `(', `)' and `,' should be green
-\gdef\XMLtypethree#1%
+\gdef\XMLtypethreeone#1%
{\ifinXMLcomment
\getpretty{#1}%
\else
@@ -403,6 +403,22 @@
\fi
\fi}
+% \gdef\XMLtypethreetwo#1%
+% {\ifinXMLcomment
+% \getpretty{#1}%
+% \else
+% \ifinXMLtagname
+% \endofpretty
+% \beginofpretty[\!!prettythree]\getpretty{#1}\endofpretty
+% \beginofpretty[\!!prettyone]%
+% \else
+% \getpretty{#1}%
+% \fi
+% \fi}
+
+\gdef\XMLtypethreetwo#1%
+ {\getpretty{#1}}
+
% special characters with `&'
\gdef\XMLbampersand#1%
diff --git a/Master/texmf-dist/tex/context/base/x-cals.mkiv b/Master/texmf-dist/tex/context/base/x-cals.mkiv
new file mode 100644
index 00000000000..314ec5bb9c8
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/x-cals.mkiv
@@ -0,0 +1,178 @@
+%D \module
+%D [ file=x-cals,
+%D version=2007.09.05,
+%D title=\CONTEXT\ XML Modules,
+%D subtitle=Cals table renderer,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{Context XML Macros (cals tables)}
+
+\startluacode
+do
+
+ lxml.cals = { }
+ lxml.cals.ignore_widths = false
+
+ local format = string.format
+ local texsprint = tex.sprint
+ local xmlsprint = xml.sprint
+ local xmlcprint = xml.cprint
+
+ local halignments = {
+ left = "flushleft",
+ right = "flushright",
+ center = "middle",
+ centre = "middle",
+ justify = "normal",
+ }
+
+ local valignments = {
+ top = "high",
+ bottom = "low",
+ middle = "lohi",
+ }
+
+ local function getspecs(root, pattern, names, widths)
+ local ignore_widths = lxml.cals.ignore_widths
+ for r, d, k in xml.elements(root,pattern) do
+ local dk = d[k]
+ local at = dk.at
+ local column = at.colnum
+ if column then
+ if not ignore_widths then
+ local width = at.colwidth
+ if width then
+ widths[tonumber(column)] = width:lower()
+ end
+ end
+ local name = at.colname
+ if name then
+ names[name] = tonumber(column)
+ end
+ end
+ end
+ end
+
+ local function getspans(root, pattern, names, spans)
+ for r, d, k in xml.elements(root,pattern) do
+ local dk = d[k]
+ local at = dk.at
+ local name, namest, nameend = at.colname, names[at.namest or "?"], names[at.nameend or "?"]
+ if name and namest and nameend then
+ spans[name] = tonumber(nameend) - tonumber(namest) + 1
+ end
+ end
+ end
+
+ --local function texsprint(a,b) print(b) end
+ --local function xmlsprint(a) print(a) end
+
+ function lxml.cals.table(root,namespace)
+
+ local prefix = (namespace or "cals") .. ":"
+ local p = "/" .. prefix
+
+ local tgroupspec = p .. "tgroup"
+ local colspec = p .. "colspec"
+ local spanspec = p .. "spanspec"
+ local hcolspec = p .. "thead" .. p .. "colspec"
+ local bcolspec = p .. "tbody" .. p .. "colspec"
+ local fcolspec = p .. "tfoot" .. p .. "colspec"
+ local entryspec = p .. "entry" .. "|" ..prefix .. "entrytbl"
+ local hrowspec = p .. "thead" .. p .. "row"
+ local browspec = p .. "tbody" .. p .. "row"
+ local frowspec = p .. "tfoot" .. p .. "row"
+
+ local function tablepart(root, xcolspec, xrowspec, before, after)
+ texsprint(tex.ctxcatcodes,before)
+ local at = root.at
+ local pphalign, ppvalign = at.align, at.valign
+ local names, widths, spans = { }, { }, { }
+ getspecs(root, colspec , names, widths)
+ getspecs(root, xcolspec, names, widths)
+ getspans(root, spanspec, names, spans)
+ for r, d, k in xml.elements(root,xrowspec) do
+ texsprint(tex.ctxcatcodes,"\\bTR")
+ local dk = d[k]
+ local at = dk.at
+ local phalign, pvalign = at.align or pphalign, at.valign or ppvalign -- todo: __p__ test
+ local col = 1
+ for rr, dd, kk in xml.elements(dk,entryspec) do
+ local dk = dd[kk]
+ if dk.tg == "entrytbl" then
+ texsprint(tex.ctxcatcodes,"\\bTD{")
+ lxml.cals.table(dk)
+ texsprint(tex.ctxcatcodes,"}\\eTD")
+ col = col + 1
+ else
+ local at = dk.at
+ local b, e, s, m = names[at.namest or "?"], names[at.nameend or "?"], spans[at.spanname or "?"], at.morerows
+ local halign, valign = at.align or phalign, at.valign or pvalign
+ if b and e then
+ s = e - b + 1
+ end
+ if halign then
+ halign = halignments[halign]
+ end
+ if valign then
+ valign = valignments[valign]
+ end
+ local width = widths[col]
+ if s or m or halign or valign or width then -- only english interface !
+ texsprint(tex.ctxcatcodes,format("\\bTD[nx=%s,ny=%s,align={%s,%s},width=%s]",
+ s or 1, (m or 0)+1, halign or "flushleft", valign or "high", width or "fit"))
+ else
+ texsprint(tex.ctxcatcodes,"\\bTD[align={flushleft,high},width=fit]") -- else problems with vertical material
+ end
+ -- xmlsprint(dk)
+ xmlcprint(dk)
+ texsprint(tex.ctxcatcodes,"\\eTD")
+ col = col + (s or 1)
+ end
+ end
+ texsprint(tex.ctxcatcodes,"\\eTR")
+ end
+ texsprint(tex.ctxcatcodes,after)
+ end
+
+ for r, d, k in xml.elements(lxml.id(root),tgroupspec) do
+ local tgroup = d[k]
+ lxml.directives.before(root,"cdx") -- "cals:table"
+ texsprint(tex.ctxcatcodes, "\\bgroup")
+ lxml.directives.setup(root,"cdx") -- "cals:table"
+ texsprint(tex.ctxcatcodes, "\\bTABLE")
+ tablepart(tgroup, hcolspec, hrowspec, "\\bTABLEhead", "\\eTABLEhead")
+ tablepart(tgroup, bcolspec, browspec, "\\bTABLEbody", "\\eTABLEbody")
+ tablepart(tgroup, fcolspec, frowspec, "\\bTABLEfoot", "\\eTABLEfoot")
+ texsprint(tex.ctxcatcodes, "\\eTABLE")
+ texsprint(tex.ctxcatcodes, "\\egroup")
+ lxml.directives.after(root,"cdx") -- "cals:table"
+ end
+ end
+
+end
+\stopluacode
+
+% \startxmlsetups xml:cals:process
+% \xmlsetsetup {\xmldocument} {cals:table} {*}
+% \stopxmlsetups
+% \startxmlsetups cals:table
+% \ctxlua{lxml.cals.table("#1")}
+% \stopxmlsetups
+% \xmlregistersetup{xml:cals:process}
+
+\startxmlsetups xml:cals:process
+ \xmlsetfunction {\xmldocument} {cals:table} {lxml.cals.table}
+\stopxmlsetups
+
+\xmlregistersetup{xml:cals:process}
+
+\xmlregisterns{cals}{cals}
+
+\endinput
diff --git a/Master/texmf-dist/tex/context/base/x-cml.mkiv b/Master/texmf-dist/tex/context/base/x-cml.mkiv
new file mode 100644
index 00000000000..37216509223
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/x-cml.mkiv
@@ -0,0 +1,262 @@
+%D \module
+%D [ file=x-cml,
+%D version=2007.09.03, % reimplementation
+%D title=\CONTEXT\ XML Modules,
+%D subtitle=MkIV ChemML renderer,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{Context XML Macros (chemml mkiv)}
+
+\usemodule[pictex,chemic] % someday we will do structural fomulas in mp
+
+%D The following code assumes a load||flush approach to \XML.
+
+\unprotect
+
+\startxmlsetups xml:cml:process
+
+ \xmlstrip {\xmldocument} {cml:chem|cml:ichem|cml:dchem|cml:reaction|cml:molecule|cml:ion|cml:structure}
+
+ \xmlgrab {\xmldocument} {cml:*} {*}
+ \xmlgrab {\xmldocument} {cml:gives|cml:equilibrium|cml:mesomeric} {cml:arrow}
+ \xmlgrab {\xmldocument} {cml:plus|cml:minus|cml:equal} {cml:operator}
+ \xmlgrab {\xmldocument} {cml:bond|cml:singlebond|cml:doublebound|cml:triplebond} {cml:bond}
+
+ \xmlgrab {\xmldocument} {pi::chemml} {cml:pi}
+\stopxmlsetups
+
+\xmlregistersetup{xml:cml:process}
+
+\xmlregisterns{cml}{chemml}
+
+\def\setupCMLappearance[#1]{\dodoubleargument\getparameters[@@CML#1]}
+
+\setupCMLappearance [ion] [\c!alternative=\v!a]
+
+\startluacode
+ function lxml.cml_do_pi(id)
+ local str = xml.content(lxml.id(id))
+ local _, class, key, value = str:match("^(%S+)%s+(%S+)%s+(%S+)%s+(%S+)%s*$")
+ if key and value then
+ tex.sprint(tex.ctxcatcodes,string.format("\\setupCMLappearance[%s][%s=%s]",class, key, value))
+ end
+ end
+\stopluacode
+
+\def\doifelseCMLvariable#1#2#3% id key value
+ {\doifelse{\xmlatt{#1}{#2}}{#3}
+ \firstoftwoarguments
+ {\doifelse{\getvalue{@@CML\xmltag{#1}#2}}{#3}
+ \firstoftwoarguments
+ \secondoftwoarguments}}
+
+\startxmlsetups cml:pi
+ \ctxlua{lxml.cml_do_pi(#1)}
+\stopxmlsetups
+
+\startxmlsetups cml:chem
+ \automathematics{\xmlflush{#1}}
+\stopxmlsetups
+\startxmlsetups cml:ichem
+ \inlinemathematics{\xmlflush{#1}}
+\stopxmlsetups
+\startxmlsetups cml:dchem
+ \displaymathematics{\xmlflush{#1}}
+\stopxmlsetups
+
+\startxmlsetups cml:reaction
+ \xmlflush{#1}
+\stopxmlsetups
+
+\def\doCMLtext#1#2#3% main top bot
+ {\setbox0\hbox{\doifsomething{#2}{\txx\setstrut\strut\ignorespaces#2\unskip}}%
+ \setbox2\hbox{\ignorespaces\strut#1\unskip}%
+ \setbox4\hbox{\doifsomething{#3}{\txx\setstrut\strut\ignorespaces#3\unskip}}%
+ \scratchdimen=\wd2\advance\scratchdimen-.5em
+ \ifdim\wd0>\scratchdimen
+ \setbox0\hbox spread .5em{\hss\box0\hss}%
+ \fi
+ \ifdim\wd4>\scratchdimen
+ \setbox4\hbox spread .5em{\hss\box4\hss}%
+ \fi
+ \setbox6=\vbox
+ {\offinterlineskip\halign{\hss##\hss\cr\copy0\cr\copy2\cr\copy4\cr}}%
+ \hbox{\lower\ht4\hbox{\lower\dp2\box6}}}
+
+\def\doCMLamount#1%
+ {\scratchcounter0\xmlatt{#1}{n}\relax
+ \ifnum\scratchcounter>0 \number\scratchcounter \fi}
+
+\startxmlsetups cml:molecule
+ \doCMLtext
+ {\doCMLamount{#1}
+ \xmlall{#1}{cml:atom|cml:bond|cml:singlebond|cml:doublebond|cml:triplebond}}
+ {\xmlindex{#1}{cml:caption}{2}}
+ {\xmlindex{#1}{cml:caption}{1}}
+\stopxmlsetups
+
+\startxmlsetups cml:atom
+ \doCMLtext {
+ \lohi {
+ $\tfxx\xmlatt{#1}{protons}$
+ } {
+ $\tfxx\xmlatt{#1}{weight}$
+ }
+ \xmlflush{#1}
+ \lohi {
+ $\tfxx\xmlatt{#1}{n}$
+ } {
+ $\tfxx\xmlatt{#1}{charge}$%
+ }
+ }
+ {\xmlindex{#1}{cml:caption}{2}}
+ {\xmlindex{#1}{cml:caption}{1}}
+\stopxmlsetups
+
+\startxmlsetups cml:ion
+ \doifelseCMLvariable{#1}{alternative}{b} {
+ \left[
+ \doCMLtext
+ {\doCMLamount{#1}
+ \xmlall{#1}{cml:atom}}
+ {\xmlindex{#1}{cml:caption}{2}}
+ {\xmlindex{#1}{cml:caption}{1}}
+ \right]
+ } {
+ \doCMLtext
+ {\doCMLamount{#1}
+ \xmlall{#1}{cml:atom}}
+ {\xmlindex{#1}{cml:caption}{2}}
+ {\xmlindex{#1}{cml:caption}{1}}
+ }
+ \high {\xmlatt{#1}{charge}}
+\stopxmlsetups
+
+\def\doCMLgives {\xrightarrow}
+\def\doCMLequilibrium{\xleftrightarrow}
+\def\doCMLmesomeric {\xrightoverleftarrow}
+\def\doCMLplus {+}
+\def\doCMLminus {-}
+\def\doCMLequal {=}
+
+\startxmlsetups cml:arrow
+ \quad
+ \executeifdefined{doCML\xmlname{#1}}\doCMLgives{\tf\xmlindex{#1}{cml:caption}{2}}{\tf\xmlindex{#1}{cml:caption}{1}}
+ \quad
+\stopxmlsetups
+
+\startxmlsetups cml:operator
+ \quad
+ \mathop{\executeifdefined{doCML\xmlname{#1}}\doCMLplus}
+ \quad
+\stopxmlsetups
+
+\startxmlsetups cml:bond
+ \executeifdefined{doCML\xmlname{#1}} {
+ \ifcase0\xmlatt{#1}{n}\relax
+ \doCMLsinglebond
+ \or
+ \doCMLdoublebond
+ \or
+ \doCMLtriplebond
+ \fi
+ }
+\stopxmlsetups
+
+\def\doCMLbond
+ {\hrule\!!width\hsize\!!height.1ex\relax}
+
+\def\dodoCMLbond#1#2#3%
+ {\begingroup
+ \setbox\scratchbox\hbox{$M$}%
+ \vbox to \ht\scratchbox
+ {\hsize\wd\scratchbox
+ \vskip.1\wd\scratchbox
+ #1\vfill#2\vfill#3%
+ \vskip.1\wd\scratchbox}%
+ \endgroup}
+
+\def\doCMLsinglebond{\dodoCMLbond\relax \doCMLbond\relax }
+\def\doCMLdoublebond{\dodoCMLbond\doCMLbond\relax \doCMLbond}
+\def\doCMLtriplebond{\dodoCMLbond\doCMLbond\doCMLbond\doCMLbond}
+
+\startxmlsetups cml:structure
+ \startchemical
+ \xmlall{#1}{cml:component}
+ \stopchemical
+\stopxmlsetups
+
+% It makes not much sense to adapt ppchtex to accept different input. Maybe some day.
+
+\startluacode
+ function lxml.cml_do_graphic(id)
+ local t = { }
+ for r, d, k in xml.elements(lxml.id(id),"cml:graphic") do
+ t[#t+1] = xml.tostring(d[k].dt)
+ end
+ tex.sprint(tex.ctxcatcodes,table.concat(t,","))
+ end
+ function lxml.cml_no_graphic(id)
+ local t = { }
+ for r, d, k in xml.elements(lxml.id(id),"cml:text|cml:oxidation|cml:annotation") do
+ local dk = d[k]
+ if dk.tg == "oxidation" then
+ t[#t+1] = string.format("\\chemicaloxidation{%s}{%s}{%s}",r.at.sign or "",r.at.n or 1,xml.tostring(dk.dt))
+ elseif dk.tg == "annotation" then
+ local location = r.at.location or "r"
+ local caption = xml.content(xml.first(dk,"cml:caption"))
+ local text = xml.content(xml.first(dk,"cml:text"))
+ t[#t+1] = string.format("\\doCMLannotation{%s}{%s}{%s}",location,caption,text)
+ else
+ t[#t+1] = xml.tostring(dk.dt) or ""
+ end
+ end
+ tex.sprint(tex.ctxcatcodes,table.concat(t,","))
+ end
+\stopluacode
+
+\startxmlsetups cml:component
+ \expanded {
+ \chemical
+ [\ctxlua{lxml.cml_do_graphic("#1")}]
+ [\ctxlua{lxml.cml_no_graphic("#1")}]
+ }
+\stopxmlsetups
+
+\unexpanded\def\doCMLannotation#1% #2#3% loc caption text
+ {\XMLval{cml:a:l}{#1}{\chemicalright}}% {#2}{#3}}
+
+\mapXMLvalue {cml:a:l} {t} {\chemicaltop}
+\mapXMLvalue {cml:a:l} {b} {\chemicalbottom}
+\mapXMLvalue {cml:a:l} {l} {\chemicalleft}
+\mapXMLvalue {cml:a:l} {r} {\chemicalright}
+\mapXMLvalue {cml:a:l} {lc} {\chemicalleftcentered} % \mapXMLvalue {cml:a:l} {cl} {\chemicalleftcentered}
+\mapXMLvalue {cml:a:l} {rc} {\chemicalrightcentered} % \mapXMLvalue {cml:a:l} {cr} {\chemicalrightcentered}
+\mapXMLvalue {cml:a:l} {tl} {\chemicaltopleft} % \mapXMLvalue {cml:a:l} {lt} {\chemicaltopleft}
+\mapXMLvalue {cml:a:l} {bl} {\chemicalbottomleft} % \mapXMLvalue {cml:a:l} {lb} {\chemicalbottomleft}
+\mapXMLvalue {cml:a:l} {tr} {\chemicaltopright} % \mapXMLvalue {cml:a:l} {rt} {\chemicaltopright}
+\mapXMLvalue {cml:a:l} {br} {\chemicalbottomright} % \mapXMLvalue {cml:a:l} {rb} {\chemicalbottomright}
+\mapXMLvalue {cml:a:l} {lt} {\chemicallefttop} % \mapXMLvalue {cml:a:l} {tl} {\chemicallefttop}
+\mapXMLvalue {cml:a:l} {lb} {\chemicalleftbottom} % \mapXMLvalue {cml:a:l} {bl} {\chemicalleftbottom}
+\mapXMLvalue {cml:a:l} {rt} {\chemicalrighttop} % \mapXMLvalue {cml:a:l} {tr} {\chemicalrighttop}
+\mapXMLvalue {cml:a:l} {rb} {\chemicalrightbottom} % \mapXMLvalue {cml:a:l} {br} {\chemicalrightbottom}
+\mapXMLvalue {cml:a:l} {x} {\chemicaltighttext}
+\mapXMLvalue {cml:a:l} {sl} {\chemicalsmashedleft} % \mapXMLvalue {cml:a:l} {ls} {\chemicalsmashedleft}
+\mapXMLvalue {cml:a:l} {sm} {\chemicalsmashedmiddle} % \mapXMLvalue {cml:a:l} {ms} {\chemicalsmashedmiddle}
+\mapXMLvalue {cml:a:l} {sr} {\chemicalsmashedright} % \mapXMLvalue {cml:a:l} {rs} {\chemicalsmashedright}
+
+\startxmlsetups cml:forever
+ \left[\xmlflush{#1}\right]
+\stopxmlsetups
+
+% \starttext
+% \xmlprocess{main}{cmltest.xml}{xml:process}
+% \stoptext
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/x-contml.tex b/Master/texmf-dist/tex/context/base/x-contml.tex
index e1dda06c1ec..ba6762e77d6 100644
--- a/Master/texmf-dist/tex/context/base/x-contml.tex
+++ b/Master/texmf-dist/tex/context/base/x-contml.tex
@@ -80,7 +80,11 @@
\defineXMLsingular [context:compound] [token=]
{\mathortext % disc comm looks ahead, so \relax
{\doifXMLop{token}{\XMLop{token}}\compoundhyphen}%
- {\expanded{\discretionarycommand\noexpand|\XMLop{token}}|\relax}}
+ {\expanded{\directdiscretionary{\XMLop{token}}}\relax}}
+
+\defineXMLenvironmentsave [context:cp]
+ {}
+ {\expanded{\directdiscretionary{\XMLflush{cp}}}\relax}
%D \elements {p}
%D
@@ -225,7 +229,7 @@
%D The previous examples already demonstrated how we can include a graphic:
%D
%D <verbatim>
-%D <line><externalfigure file="koe" width="5cm" /></line>
+%D <line><externalfigure file="cow" width="5cm" /></line>
%D </verbatim>
%D \stopbuffer
%D
@@ -242,7 +246,7 @@
\egroup}
%D \elements {fixed}
-%D
+%D \setupexternalfigures[directory={../sample}]
%D \startbuffer
%D Something fixed will end up at the place where it defined in the input
%D stream. The main idea behind this element is that it gives you control
@@ -252,7 +256,7 @@
%D <item>
%D <fixed align="high">
%D <content>
-%D <externalfigure file="koe" frame="on" height="1cm" />
+%D <externalfigure file="cow" frame="on" height="1cm" />
%D </content>
%D </fixed>
%D </item>
@@ -275,15 +279,15 @@
\egroup}
%D \elements {float}
-%D
+%D \setupexternalfigures[directory={../sample}]
%D \startbuffer
%D A floating body will be placed at the first location available, unless
%D a location is specified. As with the <element>fixed</element> element,
-%D you can prvide a caption.
+%D you can provide a caption.
%D
%D <float type="figure">
%D <content>
-%D <externalfigure file="koe" frame="on" height="3cm" />
+%D <externalfigure file="cow" frame="on" height="3cm" />
%D </content>
%D <caption>This is a cow!</caption>
%D </float>
diff --git a/Master/texmf-dist/tex/context/base/x-ct.mkiv b/Master/texmf-dist/tex/context/base/x-ct.mkiv
new file mode 100644
index 00000000000..cf7bb64fb39
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/x-ct.mkiv
@@ -0,0 +1,202 @@
+%D \module
+%D [ file=x-cals,
+%D version=2007.09.05,
+%D title=\CONTEXT\ XML Modules,
+%D subtitle=\CONTEXT\ Structures,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{Context XML Macros (context)}
+
+\startluacode
+do
+ lxml.context = { }
+
+ local halignments = {
+ left = 'l',
+ flushleft = 'l',
+ right = 'r',
+ flushright = 'r',
+ center = 'c',
+ middle = 'c',
+ centre = 'c',
+ justify = '',
+ }
+
+ local texsprint = tex.sprint
+ local xmlsprint = xml.sprint
+
+ local function roottemplate(root)
+ local rt = root.at.template
+ if rt then
+ if not rt:find("|") then
+ rt = rt:gsub(",","|")
+ end
+ if not rt:find("^|") then rt = "|" .. rt end
+ if not rt:find("|$") then rt = rt .. "|" end
+ end
+ return rt
+ end
+
+ local function specifiedtemplate(root,templatespec)
+ local template = { }
+ for r, d, k in xml.elements(root,templatespec) do
+ local at = d[k].at
+ local tm = halignments[at.align] or ""
+ if toboolean(at.paragraph) then
+ tm = tm .. "p"
+ end
+ template[#template+1] = tm
+ end
+ if #template > 0 then
+ return "|" .. table.join(template,"|") .. "|"
+ else
+ return nil
+ end
+ end
+
+ local function autotemplate(root,rowspec,cellspec)
+ local max = 0
+ for r, d, k in xml.elements(root,rowspec) do
+ local n = xml.count(d[k],cellspec)
+ if n > max then max = n end
+ end
+ if max == 2 then
+ return "|l|p|"
+ elseif max > 0 then
+ return "|" .. string.rep("p|",max)
+ else
+ return nil
+ end
+ end
+
+ local defaulttemplate = "|l|p|"
+
+ function lxml.context.tabulate(root,namespace)
+ if not root then
+ return
+ else
+ root = lxml.id(root)
+ end
+
+ local prefix = (namespace or "context") .. ":"
+
+ local templatespec = "/" .. prefix .. "template" .. "/" .. prefix .. "column"
+ local bodyrowspec = "/" .. prefix .. "body" .. "/" .. prefix .. "row"
+ local cellspec = "/" .. prefix .. "cell"
+
+ local template =
+ roottemplate (root) or
+ specifiedtemplate (root,templatespec) or
+ autotemplate (root,bodyrowspec,cellspec) or
+ defaulttemplate
+
+ lxml.directives.before(root,'cdx')
+ texsprint(tex.ctxcatcodes, "\\bgroup")
+ lxml.directives.setup(root,'cdx')
+ -- todo: head and foot
+ texsprint(tex.ctxcatcodes, string.format("\\starttabulate[%s]",template))
+ for r, d, k in xml.elements(root,bodyrowspec) do
+ texsprint(tex.ctxcatcodes, "\\NC ")
+ for r, d, k in xml.elements(d[k],cellspec) do
+ texsprint(xml.content(d[k]))
+ texsprint(tex.ctxcatcodes, "\\NC")
+ end
+ texsprint(tex.ctxcatcodes, "\\NR")
+ end
+ texsprint(tex.ctxcatcodes, "\\stoptabulate")
+ texsprint(tex.ctxcatcodes, "\\egroup")
+ lxml.directives.after(root,'cdx')
+
+ end
+
+ function lxml.context.combination(root,namespace)
+
+ if not root then
+ return
+ else
+ root = lxml.id(root)
+ end
+
+ local prefix = (namespace or "context") .. ":"
+
+ local pairspec = "/" .. prefix .. "pair"
+ local contentspec = "/" .. prefix .. "content" .. "/text()"
+ local captionspec = "/" .. prefix .. "caption" .. "/text()"
+
+ local nx, ny = root.at.nx, root.at.ny
+
+ if not (nx or ny) then
+ nx = xml.count(root,pairspec) or 2
+ end
+ local template = string.format("%s*%s", nx or 1, ny or 1)
+
+ lxml.directives.before(root,'cdx')
+ texsprint(tex.ctxcatcodes, "\\bgroup")
+ lxml.directives.setup(root,'cdx')
+ -- todo: alignments
+ texsprint(tex.ctxcatcodes, string.format("\\startcombination[%s]",template))
+ for r, d, k in xml.elements(root,pairspec) do
+ local dk = d[k]
+ texsprint(tex.ctxcatcodes,"{")
+ xmlsprint(xml.filter(dk,contentspec) or "")
+ texsprint(tex.ctxcatcodes,"}")
+ texsprint(tex.ctxcatcodes,"{")
+ xmlsprint(xml.filter(dk,captionspec) or "")
+ texsprint(tex.ctxcatcodes,"}")
+ end
+ texsprint(tex.ctxcatcodes, "\\stopcombination")
+ texsprint(tex.ctxcatcodes, "\\egroup")
+ lxml.directives.after(root,'cdx')
+
+ end
+
+end
+\stopluacode
+
+\startxmlsetups xml:context:process
+ \xmlsetfunction {\xmldocument} {context:tabulate} {lxml.context.tabulate}
+ \xmlsetfunction {\xmldocument} {context:combination} {lxml.context.combination}
+\stopxmlsetups
+
+\xmlregistersetup{xml:context:process}
+
+\xmlregisterns{context}{context}
+
+\endinput
+
+% this replaces:
+
+% \startxmlsetups tabulate
+% \starttabulate[||p|]
+% \xmlall{#1}{/body/row}
+% \stoptabulate
+% \stopxmlsetups
+% \startxmlsetups tabulate:row
+% \NC \xmlall{#1}{/cell} \NR
+% \stopxmlsetups
+% \startxmlsetups tabulate:cell
+% \xmlflush{#1} \NC
+% \stopxmlsetups
+
+% \startxmlsetups combination
+% \startcollecting
+% \startcollect
+% \startcombination[\xmlatt{#1}{nx}*\xmlatt{#1}{ny}]
+% \stopcollect
+% \xmlloop {#1} {combiblock} {
+% \startcollect
+% {\xmli{/content}{##1}}
+% {\xmli{/caption}{##1}}
+% \stopcollect
+% }
+% \startcollect
+% \stopcombination
+% \stopcollect
+% \stopcollecting
+% \stopxmlsetups
diff --git a/Master/texmf-dist/tex/context/base/x-fig-00.tex b/Master/texmf-dist/tex/context/base/x-fig-00.tex
index cb4677fdc41..d293dc39f96 100644
--- a/Master/texmf-dist/tex/context/base/x-fig-00.tex
+++ b/Master/texmf-dist/tex/context/base/x-fig-00.tex
@@ -76,6 +76,50 @@
%D The special keyword \type {reset} can be used to reset
%D this list.
+%D We park some mkiv code here. Eventually we will hook this into mkiv
+%D searching differently (just a standard feature, no need for loading
+%D modules because we need less code). Actually, what we do here is more
+%D like res-*: we load the xml file once.
+
+% \startluacode
+%
+% document.figurebases = { }
+% document.figurebases.data = { }
+% document.figurebases.found = { }
+%
+% function document.figurebases.find(basename,askedlabel)
+% document.figurebases.found = { }
+% local base = document.figurebases.data[basename]
+% local page = 0
+% if not base then
+% base = xml.load(basename)
+% document.figurebases.data[basename] = base
+% end
+% for e, d, k in xml.elements(base,"figurelibrary/figure/label") do
+% page = page + 1
+% if xml.content(d[k]) == askedlabel then
+% document.figurebases.found = {
+% name = xml.filters.text(e,"file"),
+% page = page,
+% }
+% return true
+% end
+% end
+% return false
+% end
+%
+% function commands.findfigurefilenameinbase(basename,askedlabel)
+% if document.figurebases.find(basename,askedlabel) then
+% commands.xdef("figurefilename",document.figurebases.found.name or "")
+% commands.xdef("figurefilepage",document.figurebases.found.page or "")
+% end
+% end
+%
+% \stopluacode
+%
+% \def\findfigurefilenameinbase#1#2%
+% {\ctxlua{commands.findfigurefilenameinbase("#1","\askedlabel")}}
+
\startcommands dutch english
german czech
italian romanian
@@ -116,6 +160,9 @@
\xdef\figurefilename{\XMLpop{file}}\endinput}%
\egroup}
+\def\findfigurefilenameinbase#1#2% sets \figurefilename and \figurefilepage
+ {\processXMLfilegrouped{#1}}
+
\def\getfigurefilename#1#2%
{\startnointerference
\traceXMLelementsfalse
@@ -137,10 +184,14 @@
{\ifx\figurefilename\empty
\bgroup
\xdef\figurefilebasepath{#1}%
- \assignfullfilename{#1}\figurefilebase\to\filename
- \expanded{\processXMLfilegrouped{\filename.xml}}%
+ \assignfullfilename{#1}{\figurefilebase}\to\filename
+ \doiffileelse{\filename.xml}
+ {\doshowfigurestate{base file : \filename}%
+ \expanded{\findfigurefilenameinbase{\filename.xml}{\askedlabel}}}
+ \donothing
\ifx\figurefilename\empty\else
- \globallet\figurefilebase\figurefilebase
+% \globallet\figurefilebase\figurefilebase
+ \globallet\figurefilebase\filename % hm, bad omen that this is needed
\fi
\egroup
\fi}
@@ -151,69 +202,33 @@
\globalletempty\figurefilebasepath
\globalletempty\figurefilepage}
-\ifx\doanalyzefiguredimensionsfromfile\undefined
-
- % will become obsolete once the new core-fig is used
-
- \let\normalcalculateexternalfigure\calculateexternalfigure
-
- \def\calculateexternalfigure[#1][#2][#3][#4][#5][#6]%
- {\resetfigurefilebase
- \ifx\figurebaselist\empty
- \normalcalculateexternalfigure[#1][#2][#3][#4][#5][#6]%
- \else
- \def\docommand##1%
- {\doshowfigurestate{base : check #3 in ##1}%
- \getfigurefilename{##1}{#3}%
- \ifx\figurefilename\empty\else\quitcommalist\fi}%
- \processcommacommand[\figurebaselist]\docommand
- \ifx\figurefilename\empty
- \stripspaces\from#3\to\figurefilename % to be sure
- \normalcalculateexternalfigure[#1][#2][\figurefilename][#4][#5][#6]%
- \else
- \doiffileelse{\figurefilebase.pdf}
- {\let\figurepathlist\figurefilebasepath
- \normalcalculateexternalfigure
- [#1][#2][\figurefilebase.pdf]%
- [\c!page=\figurefilepage,#4][#5][#6]}
- {\@EA\stripspaces\@EA\from\figurefilename\to\figurefilename
- \normalcalculateexternalfigure[#1][#2][\figurefilename][#4][#5][#6]}%
- \fi
- \fi}
-
-\else
-
- % todo: use different internal names, \figurebasepage and such
-
- \def\doanalyzefiguredimensionsfromfile
- {\ifcase\figurestatus \ifx\figurebaselist\empty \else
- \resetfigurefilebase
- \doshowfigurestate{base list : \figurebaselist}%
- \processcommacommand[\figurebaselist]\dodoanalyzefiguredimensionsfromfile
- \ifx\figurefilename\empty
- \doshowfigurestate{base warning : no matching name found}%
- \else
- \doiffileelse{\figurefilebase.pdf}
- {\doshowfigurestate{base file : \figurefilebase.pdf}%
- \doshowfigurestate{base page : \figurefilepage}%
- \let\figurepathlist\figurefilebasepath
- \analyzefigurefilename{\figurefilebase.pdf}\wantedfigurelabel
- \let\wantedfigurepage\figurefilepage}
- {\doshowfigurestate{base missing : \figurefilebase.pdf}}
- \fi
- \ifcase\figurestatus
- \analyzefigurefilename\expandedfigurename\wantedfigurelabel
- \fi
- \fi \fi}
-
- \def\dodoanalyzefiguredimensionsfromfile#1%
- {\doshowfigurestate{base check : \wantedfigurename\space in #1}%
- \getfigurefilename{#1}\wantedfigurename
- \ifx\figurefilename\empty\else
- \quitcommalist
- \fi}
-
-\fi
+\def\doanalyzefiguredimensionsfromfile
+ {\ifcase\figurestatus \ifx\figurebaselist\empty \else
+ \resetfigurefilebase
+ \doshowfigurestate{base list : \figurebaselist}%
+ \processcommacommand[\figurebaselist]\dodoanalyzefiguredimensionsfromfile
+ \ifx\figurefilename\empty
+ \doshowfigurestate{base warning : no matching name found}%
+ \else
+ \doiffileelse{\figurefilebase.pdf}
+ {\doshowfigurestate{base file : \figurefilebase.pdf}%
+ \doshowfigurestate{base page : \figurefilepage}%
+ \let\figurepathlist\figurefilebasepath
+ \analyzefigurefilename{\figurefilebase.pdf}\wantedfigurelabel
+ \let\wantedfigurepage\figurefilepage}
+ {\doshowfigurestate{base missing : \figurefilebase.pdf}}
+ \fi
+ \ifcase\figurestatus
+ \analyzefigurefilename\expandedfigurename\wantedfigurelabel
+ \fi
+ \fi \fi}
+
+\def\dodoanalyzefiguredimensionsfromfile#1%
+ {\doshowfigurestate{base check : \wantedfigurename\space in #1}%
+ \getfigurefilename{#1}\wantedfigurename
+ \ifx\figurefilename\empty\else
+ \quitcommalist
+ \fi}
\def\usefigurebase[#1]%
{\doifelse{#1}\v!reset
diff --git a/Master/texmf-dist/tex/context/base/x-fo.tex b/Master/texmf-dist/tex/context/base/x-fo.tex
index 1ce18e509d2..3962255463d 100644
--- a/Master/texmf-dist/tex/context/base/x-fo.tex
+++ b/Master/texmf-dist/tex/context/base/x-fo.tex
@@ -2470,7 +2470,7 @@ leader-pattern-width=12pt,
\startsetups fo:position:absolute:stop
\egroup
% evt uitstellen tot otr, zodat text/realfolio is solved
- \edef\FOpartag{p:\parposcounter}
+ \edef\FOpartag{p:\number\parposcounter}
\edef\FOtxttag{text:\realfolio}
\FOcontainerWW\MPplus\FOpartag{1}{0pt}
\FOcontainerHH\zeropoint % todo: add anchors to each 'object'
@@ -2701,7 +2701,7 @@ leader-pattern-width=12pt,
\defineconversion[1][\numbers]
\def\handleFOformat#1#2%
- {\convertargument#2\to\ascii
+ {\defconvertedargument\ascii{#2}%
\doifconversiondefinedelse\ascii{\convertnumber\ascii{#1}}{#2}}
%D Element: fo:pagenumber-citation
diff --git a/Master/texmf-dist/tex/context/base/x-ldx.ctx b/Master/texmf-dist/tex/context/base/x-ldx.ctx
new file mode 100644
index 00000000000..21ef6db5f7d
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/x-ldx.ctx
@@ -0,0 +1,23 @@
+<?xml version='1.0' standalone='yes'?>
+
+<ctx:job>
+ <ctx:message>Lua Documentation</ctx:message>
+ <ctx:preprocess>
+ <ctx:processors>
+ <ctx:processor name='ldx'>mtxrun --verbose --internal x-ldx.lua <ctx:value name='old'/> <ctx:value name='new'/></ctx:processor>
+ </ctx:processors>
+ <ctx:files>
+ <ctx:file processor='ldx'><ctx:value name='old'/></ctx:file>
+ </ctx:files>
+ </ctx:preprocess>
+ <ctx:flags>
+ <ctx:flag>purge</ctx:flag>
+ <ctx:flag>forcexml</ctx:flag>
+ </ctx:flags>
+ <ctx:process>
+ <ctx:resources>
+ <ctx:module>ldx</ctx:module>
+ </ctx:resources>
+ </ctx:process>
+</ctx:job>
+
diff --git a/Master/texmf-dist/tex/context/base/x-ldx.tex b/Master/texmf-dist/tex/context/base/x-ldx.tex
new file mode 100644
index 00000000000..0d9350c1cd3
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/x-ldx.tex
@@ -0,0 +1,133 @@
+\defineregister[function][functions]
+\defineregister[variable][variables]
+
+\definehead[source][subject]
+\definehead[extra] [subsubject]
+\definehead[topic] [subsubsubject]
+
+\setuphead[source][style=\bfb]
+\setuphead[extra] [style=\bfa]
+\setuphead[topic] [style=\bf]
+
+\def\LDXkey #1{\bold{#1}}
+\def\LDXfunction#1{\LDXkey{function} #1\function{#1}}
+\def\LDXvariable#1{#1\variable{#1}}
+\def\LDXcomment #1{{\tt--#1}}
+\def\LDXsource #1{\source{#1}}
+
+\defineXMLenvironment
+ [ldx:document]
+ {\page}
+ {\determineregistercharacteristics[function]
+ \startmode[*register]
+ \extra{Functions}
+ \placeregister[function]
+ \stopmode
+ \determineregistercharacteristics[variable]
+ \startmode[*register]
+ \extra{Variables}
+ \placeregister[variable]
+ \stopmode}
+
+\defineXMLargument [ldx:source] \LDXsource
+\defineXMLargument [ldx:key] \LDXkey
+\defineXMLargument [ldx:variable] \LDXvariable
+\defineXMLargument [ldx:function] \LDXfunction
+\defineXMLargument [ldx:com] \LDXcomment
+
+\newcounter\CommentCounter
+
+\defineXMLenvironment[ldx:comment]
+ {\endgraf
+ \blank
+ \doglobal\increment\CommentCounter
+ \margintitle{\bf\CommentCounter}}
+ {\blank
+ \endgraf}
+
+\defineXMLenvironment[ldx:dqs]
+ {\bgroup\tt"}
+ {"\egroup}
+
+\defineXMLenvironment[ldx:sqs]
+ {\bgroup\tt'}
+ {'\egroup}
+
+\defineXMLenvironment[ldx:code]
+ {\startpacked}
+ {\stoppacked}
+
+\defineXMLenvironment[ldx:line][n=0,comment=] % maybe hangindent or leftskip
+ {\dontleavehmode
+ \hbox to \hsize\bgroup
+ \strut\hskip\dimexpr\XMLop{n}em/4\relax\relax
+ \doif {\XMLop{comment}} {yes} {\tt}}
+ {\hss
+ \egroup
+ \endgraf}
+
+\defineXMLsingular[ldx:line]
+ {\crlf}
+
+\defineXMLargument [source] \LDXsource
+\defineXMLargument [key] \LDXkey
+
+\defineXMLsingular[logo][label=,name=]
+ {\uppercasestring\XMLop{label}\XMLop{label}\to\ascii
+ \getvalue{\ascii}}
+
+\defineXMLsingular[l][l=,n=]
+ {\uppercasestring\XMLop{l}\XMLop{l}\to\ascii
+ \getvalue{\ascii}}
+
+\defineXMLenvironment
+ [typing]
+ {\blank
+ \startpacked \tt
+ \obeyspaces}
+ {\stoppacked
+ \blank}
+
+\defineXMLentity[amp]{\&}
+\defineXMLentity[lt] {<}
+\defineXMLentity[gt] {>}
+
+\usemodule[abr-02]
+
+\startnotmode[atpragma]
+ \definetypeface[mainfacenormal] [ss][sans] [iwona] [default]
+ \definetypeface[mainfacenormal] [rm][serif][palatino] [default]
+ \definetypeface[mainfacenormal] [tt][mono] [modern] [default][rscale=1.1]
+ \definetypeface[mainfacenormal] [mm][math] [iwona] [default][encoding=default]
+
+ \definetypeface[mainfacemedium] [ss][sans] [iwona-medium][default]
+ \definetypeface[mainfacenormal] [rm][serif][palatino] [default]
+ \definetypeface[mainfacemedium] [tt][mono] [modern] [default][rscale=1.1]
+ \definetypeface[mainfacemedium] [mm][math] [iwona-medium][default][encoding=default]
+
+ \definetypeface[mainfacenarrowtt][tt][mono] [modern-cond] [default][rscale=1.1]
+\stopnotmode
+
+\startmode[atpragma]
+ \usetypescriptfile[type-ghz]
+
+ \definetypeface[mainfacenormal] [ss][sans] [optima-nova] [default]
+ \definetypeface[mainfacenormal] [rm][serif][palatino] [default]
+ \definetypeface[mainfacenormal] [tt][mono] [modern] [default][rscale=1.1]
+ \definetypeface[mainfacenormal] [mm][math] [palatino] [default][encoding=default]
+
+ \definetypeface[mainfacemedium] [ss][sans] [optima-nova] [default]
+ \definetypeface[mainfacenormal] [rm][serif][palatino] [default]
+ \definetypeface[mainfacemedium] [tt][mono] [modern] [default][rscale=1.1]
+ \definetypeface[mainfacemedium] [mm][math] [palatino] [default][encoding=default]
+
+ \definetypeface[mainfacenarrowtt][tt][mono] [modern-cond] [default][rscale=1.1]
+\stopmode
+
+\setupbodyfont[mainfacenormal,11pt]
+
+\setupwhitespace[big]
+
+% \starttext
+% \processXMLfilegrouped{\inputfilename}
+% \stoptext
diff --git a/Master/texmf-dist/tex/context/base/x-mathml.lua b/Master/texmf-dist/tex/context/base/x-mathml.lua
new file mode 100644
index 00000000000..fa5e617e607
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/x-mathml.lua
@@ -0,0 +1,300 @@
+if not modules then modules = { } end modules ['x-mathml'] = {
+ version = 1.001,
+ comment = "companion to x-mathml.tex",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+lxml.mml = lxml.mml or { }
+
+local texsprint = tex.sprint
+local format = string.format
+local xmlsprint = xml.sprint
+local xmlcprint = xml.cprint
+
+-- an alternative is to remap to private codes, where we can have
+-- different properties .. to be done; this will move and become
+-- generic
+
+local n_replacements = {
+-- [" "] = utf.char(0x2002), -- "&textspace;" -> tricky, no &; in mkiv
+ ["."] = "{.}",
+ [","] = "{,}",
+ [" "] = "",
+}
+
+local o_replacements = {
+ ["@l"] = "\\mmlleftdelimiter.",
+ ["@r"] = "\\mmlrightdelimiter.",
+ ["{"] = "\\mmlleftdelimiter\\lbrace",
+ ["}"] = "\\mmlrightdelimiter\\rbrace",
+ ["("] = "\\mmlleftdelimiter(",
+ [")"] = "\\mmlrightdelimiter)",
+ ["["] = "\\mmlleftdelimiter[",
+ ["]"] = "\\mmlrightdelimiter]",
+ ["<"] = "\\mmlleftdelimiter<",
+ [">"] = "\\mmlrightdelimiter>",
+ ["#"] = "\\mmlchar{35}",
+ ["$"] = "\\mmlchar{36}", -- $
+ ["%"] = "\\mmlchar{37}",
+ ["&"] = "\\mmlchar{38}",
+ ["^"] = "\\mmlchar{94}{}", -- strange, sometimes luatex math sees the char instead of \char
+ ["_"] = "\\mmlchar{95}{}", -- so we need the {}
+ ["~"] = "\\mmlchar{126}",
+ [" "] = "",
+}
+
+local i_replacements = {
+ ["sin"] = "\\mathopnolimits{sin}",
+ ["cos"] = "\\mathopnolimits{cos}",
+ ["abs"] = "\\mathopnolimits{abs}",
+ ["arg"] = "\\mathopnolimits{arg}",
+ ["codomain"] = "\\mathopnolimits{codomain}",
+ ["curl"] = "\\mathopnolimits{curl}",
+ ["determinant"] = "\\mathopnolimits{det}",
+ ["divergence"] = "\\mathopnolimits{div}",
+ ["domain"] = "\\mathopnolimits{domain}",
+ ["gcd"] = "\\mathopnolimits{gcd}",
+ ["grad"] = "\\mathopnolimits{grad}",
+ ["identity"] = "\\mathopnolimits{id}",
+ ["image"] = "\\mathopnolimits{image}",
+ ["lcm"] = "\\mathopnolimits{lcm}",
+ ["max"] = "\\mathopnolimits{max}",
+ ["median"] = "\\mathopnolimits{median}",
+ ["min"] = "\\mathopnolimits{min}",
+ ["mode"] = "\\mathopnolimits{mode}",
+ ["mod"] = "\\mathopnolimits{mod}",
+ ["polar"] = "\\mathopnolimits{Polar}",
+ ["exp"] = "\\mathopnolimits{exp}",
+ ["ln"] = "\\mathopnolimits{ln}",
+ ["log"] = "\\mathopnolimits{log}",
+ ["sin"] = "\\mathopnolimits{sin}",
+ ["arcsin"] = "\\mathopnolimits{arcsin}",
+ ["sinh"] = "\\mathopnolimits{sinh}",
+ ["arcsinh"] = "\\mathopnolimits{arcsinh}",
+ ["cos"] = "\\mathopnolimits{cos}",
+ ["arccos"] = "\\mathopnolimits{arccos}",
+ ["cosh"] = "\\mathopnolimits{cosh}",
+ ["arccosh"] = "\\mathopnolimits{arccosh}",
+ ["tan"] = "\\mathopnolimits{tan}",
+ ["arctan"] = "\\mathopnolimits{arctan}",
+ ["tanh"] = "\\mathopnolimits{tanh}",
+ ["arctanh"] = "\\mathopnolimits{arctanh}",
+ ["cot"] = "\\mathopnolimits{cot}",
+ ["arccot"] = "\\mathopnolimits{arccot}",
+ ["coth"] = "\\mathopnolimits{coth}",
+ ["arccoth"] = "\\mathopnolimits{arccoth}",
+ ["csc"] = "\\mathopnolimits{csc}",
+ ["arccsc"] = "\\mathopnolimits{arccsc}",
+ ["csch"] = "\\mathopnolimits{csch}",
+ ["arccsch"] = "\\mathopnolimits{arccsch}",
+ ["sec"] = "\\mathopnolimits{sec}",
+ ["arcsec"] = "\\mathopnolimits{arcsec}",
+ ["sech"] = "\\mathopnolimits{sech}",
+ ["arcsech"] = "\\mathopnolimits{arcsech}",
+ [" "] = "",
+
+ ["false"] = "{\\mr false}",
+ ["notanumber"] = "{\\mr NaN}",
+ ["otherwise"] = "{\\mr otherwise}",
+ ["true"] = "{\\mr true}",
+ ["declare"] = "{\\mr declare}",
+ ["as"] = "{\\mr as}",
+}
+
+function lxml.mml.checked_operator(str)
+ texsprint(tex.ctxcatcodes,(str:gsub(".",o_replacements)))
+end
+
+function lxml.mml.mn(id,pattern)
+ local str = xml.content(lxml.id(id),pattern) or ""
+ texsprint(tex.ctxcatcodes,(str:gsub(".",n_replacements)))
+end
+function lxml.mml.mo(id,pattern)
+ local str = xml.content(lxml.id(id),pattern) or ""
+ tex.sprint(tex.ctxcatcodes,(str:gsub(".",o_replacements)))
+end
+function lxml.mml.mi(id,pattern)
+ local str = xml.content(lxml.id(id),pattern) or ""
+ str = str:gsub("^%s*(.*)%s*$","%1")
+ local rep = i_replacements[str]
+ if rep then
+ tex.sprint(tex.ctxcatcodes,rep)
+ else
+ tex.sprint(tex.ctxcatcodes,(str:gsub(".",i_replacements)))
+ end
+end
+
+function lxml.mml.mfenced(id,pattern) -- multiple separators
+ id = lxml.id(id)
+ local left, right, separators = id.at.open or "(", id.at.close or ")", id.at.separators or ","
+ local l, r = left:find("[%(%{%<%[]"), right:find("[%)%}%>%]]")
+ texsprint(tex.ctxcatcodes,"\\enabledelimiter")
+ if l then
+ texsprint(tex.ctxcatcodes,o_replacements[left])
+ else
+ texsprint(tex.ctxcatcodes,o_replacements["@l"])
+ texsprint(tex.ctxcatcodes,left)
+ end
+ texsprint(tex.ctxcatcodes,"\\disabledelimiter")
+ local n = xml.count(id,pattern)
+ if n == 0 then
+ -- skip
+ elseif n == 1 then
+ lxml.all(id,pattern)
+ else
+ local t = { }
+ for s in utf.gmatch(separators,"([^%s])") do
+ t[#t+1] = s
+ end
+ for i=1,n do
+ lxml.idx(id,pattern,i) -- kind of slow, some day ...
+ if i < n then
+ local m = t[i] or t[#t] or ""
+ if m == "|" then
+ m = "\\enabledelimiter\\middle|\\relax\\disabledelimiter"
+ elseif m == "{" then
+ m = "\\{"
+ elseif m == "}" then
+ m = "\\}"
+ end
+ texsprint(tex.ctxcatcodes,m)
+ end
+ end
+ end
+ texsprint(tex.ctxcatcodes,"\\enabledelimiter")
+ if r then
+ texsprint(tex.ctxcatcodes,o_replacements[right])
+ else
+ texsprint(tex.ctxcatcodes,right)
+ texsprint(tex.ctxcatcodes,o_replacements["@r"])
+ end
+ texsprint(tex.ctxcatcodes,"\\disabledelimiter")
+end
+
+local function flush(e,tag,toggle)
+ -- texsprint(tex.ctxcatcodes,(toggle and "^{") or "_{")
+ if toggle then
+ texsprint(tex.ctxcatcodes,"^{")
+ else
+ texsprint(tex.ctxcatcodes,"_{")
+ end
+ if tag == "none" then
+ texsprint(tex.ctxcatcodes,"{}")
+ else
+ xmlsprint(e.dt)
+ end
+ if not toggle then
+ texsprint(tex.ctxcatcodes,"}")
+ else
+ texsprint(tex.ctxcatcodes,"}{}")
+ end
+ return not toggle
+end
+
+function lxml.mml.mmultiscripts(id)
+ local done, toggle = false, false
+ id = lxml.id(id)
+ -- for i=1,#id.dt do local e = id.dt[i] if type(e) == table then ...
+ for r, d, k in xml.elements(id,"/*") do
+ local e = d[k]
+ local tag = e.tg
+ if tag == "mprescripts" then
+ texsprint(tex.ctxcatcodes,"{}")
+ done = true
+ elseif done then
+ toggle = flush(e,tag,toggle)
+ end
+ end
+ local done, toggle = false, false
+ for r, d, k in xml.elements(id,"/*") do
+ local e = d[k]
+ local tag = e.tg
+ if tag == "mprescripts" then
+ break
+ elseif done then
+ toggle = flush(e,tag,toggle)
+ else
+ xmlsprint(e.dt)
+ done = true
+ end
+ end
+end
+
+local columnalignments = {
+ left = "flushleft",
+ right = "flushright",
+ center = "middle",
+}
+
+local rowalignments = {
+ top = "high",
+ bottom = "low",
+ center = "lohi",
+ baseline = "top",
+ axis = "lohi",
+}
+
+local frametypes = {
+ none = "off",
+ solid = "on",
+ dashed = "on",
+}
+
+function lxml.mml.mtable(root)
+
+ root = lxml.id(root)
+
+ -- todo: align, rowspacing, columnspacing, rowlines, columnlines
+
+ local at = root.at
+ local rowalign = at.rowalign
+ local columnalign = at.columnalign
+ local frame = at.frame
+ local rowaligns = rowalign and rowalign :split(" ") -- we have a faster one
+ local columnaligns = columnalign and columnalign:split(" ") -- we have a faster one
+ local frames = frame and frame :split(" ") -- we have a faster one
+ local framespacing = at.framespacing or ".5ex"
+
+ texsprint(tex.ctxcatcodes, format("\\bTABLE[frame=%s,offset=%s]",frametypes[frame or "none"] or "off",framespacing))
+ for r, d, k in xml.elements(root,"/(mml:mtr|mml:mlabeledtr)") do
+ texsprint(tex.ctxcatcodes,"\\bTR")
+ local dk = d[k]
+ local at = dk.at
+ local col = 0
+ local rfr = at.frame or (frames and frames [#frames])
+ local rra = at.rowalign or (rowaligns and rowaligns [#rowaligns])
+ local rca = at.columnalign or (columnaligns and columnaligns[#columnaligns])
+ for rr, dd, kk in xml.elements(dk,"/mml:mtd") do
+ col = col + 1
+ local dk = dd[kk]
+ local at = dk.at
+ local rowspan, columnspan = at.rowspan or 1, at.columnspan or 1
+ local cra = rowalignments [at.rowalign or (rowaligns and rowaligns [col]) or rra or "center"] or "lohi"
+ local cca = columnalignments[at.columnalign or (columnaligns and columnaligns[col]) or rca or "center"] or "middle"
+ local cfr = frametypes [at.frame or (frames and frames [col]) or rfr or "none" ] or "off"
+ texsprint(tex.ctxcatcodes,format("\\bTD[align={%s,%s},frame=%s,nx=%s,ny=%s]$\\ignorespaces",cra,cca,cfr,columnspan,rowspan))
+ xmlcprint(dk)
+ texsprint(tex.ctxcatcodes,"\\removeunwantedspaces$\\eTD") -- $
+ end
+ if dk.tg == "mlabeledtr" then
+ texsprint(tex.ctxcatcodes,"\\bTD")
+ xmlcprint(xml.first(dk,"/!mml:mtd"))
+ texsprint(tex.ctxcatcodes,"\\eTD")
+ end
+ texsprint(tex.ctxcatcodes,"\\eTR")
+ end
+ texsprint(tex.ctxcatcodes, "\\eTABLE")
+end
+
+function lxml.mml.csymbol(root)
+ root = lxml.id(root)
+ local encoding = root.at.encoding or ""
+ local hash = url.hashed((root.at.definitionUrl or ""):lower())
+ local full = hash.original or ""
+ local base = hash.path or ""
+ local text = string.strip(xml.content(root) or "")
+ texsprint(tex.ctxcatcodes,format("\\mmlapplycsymbol{%s}{%s}{%s}{%s}",full,base,encoding,text))
+end
+
diff --git a/Master/texmf-dist/tex/context/base/x-mmb.mkiv b/Master/texmf-dist/tex/context/base/x-mmb.mkiv
new file mode 100644
index 00000000000..85da90c45e1
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/x-mmb.mkiv
@@ -0,0 +1,256 @@
+%D \module
+%D [ file=x-mmb,
+%D version=2007.09.04,
+%D title=\CONTEXT\ XML Modules,
+%D subtitle=Base of MathML Renderer,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+% \defineXMLentity [mathematicald] {d}
+
+% \defineXMLentity [imaginaryi] {{\rm i}}
+% \defineXMLentity [differentiald] {\partial}
+% \defineXMLentity [exponentiale] {{\rm e}}
+% \defineXMLentity [capitaldifferentiald] {D}
+
+% \defineXMLentity [ii] {\getXMLentity{imaginaryi}}
+% \defineXMLentity [dd] {\getXMLentity{differentiald}}
+% \defineXMLentity [ee] {\getXMLentity{exponentiale}}
+% \defineXMLentity [DD] {\getMMLentity{capitaldifferentiald}}
+
+% \defineXMLentity [ImaginaryI] {\getXMLentity{imaginaryi}}
+% \defineXMLentity [DifferentialD] {\getXMLentity{differentiald}}
+% \defineXMLentity [ExponentialE] {\getXMLentity{exponentiale}}
+% \defineXMLentity [CapitalDifferentialD] {\getXMLentity{differentiald}}
+
+% \defineXMLentity [NaN] {\getXMLentity{notanumber}}
+% \defineXMLentity [NotANumber] {\getXMLentity{notanumber}}
+
+% \defineXMLentity [and] {\wedge}
+% \defineXMLentity [exists] {\exists}
+% \defineXMLentity [forall] {\forall}
+% \defineXMLentity [implies] {\Rightarrow}
+% \defineXMLentity [not] {\neg}
+% \defineXMLentity [or] {\vee}
+% \defineXMLentity [xor] {\mathopnolimits{xor}}
+
+% \defineXMLentity [imaginary] {\Im}
+% \defineXMLentity [real] {\Re}
+
+% \defineXMLentity [lceiling] {\lceil}
+% \defineXMLentity [rceiling] {\rceil}
+% \defineXMLentity [lfloor] {\lfloor}
+% \defineXMLentity [rfloor] {\rfloor}
+
+% \defineXMLentity [ne] {\neq}
+% \defineXMLentity [neq] {\neq}
+% \defineXMLentity [gt] {>}
+% \defineXMLentity [lt] {<}
+% \defineXMLentity [ge] {\geq}
+% \defineXMLentity [geq] {\geq}
+% \defineXMLentity [le] {\leq}
+% \defineXMLentity [leq] {\leq}
+% \defineXMLentity [equivalent] {\equiv}
+% \defineXMLentity [equiv] {\equiv}
+% \defineXMLentity [approx] {\approx}
+
+% \defineXMLentity [factorof] {\mid}
+% \defineXMLentity [mapsto] {\mapsto}
+
+% \defineXMLentity [int] {\int}
+% \defineXMLentity [prime] {\prime}
+% \defineXMLentity [laplacian] {\nabla^2}
+% \defineXMLentity [partial] {\partial}
+
+% \defineXMLentity [union] {\cup}
+% \defineXMLentity [intersect] {\cap}
+% \defineXMLentity [in] {\in}
+% \defineXMLentity [notin] {\not\in}
+% \defineXMLentity [subset] {\subset}
+% \defineXMLentity [prsubset] {\subseteq}
+% \defineXMLentity [notsubset] {\not\subset}
+% \defineXMLentity [notprsubset] {\not\subseteq}
+% \defineXMLentity [setdiff] {\setminus}
+
+% \defineXMLentity [card] {\vert}
+% \defineXMLentity [cartesianproduct] {\times}
+
+% \defineXMLentity [sum] {\sum}
+% \defineXMLentity [prod] {\prod}
+% \defineXMLentity [product] {\prod}
+% \defineXMLentity [lim] {\lim}
+
+% \defineXMLentity [transpose] {^{\rm T}}
+
+% \defineXMLentity [plusminus] {\mathematics{\pm}}
+% \defineXMLentity [minusplus] {\mathematics{\mp}}
+
+% \defineXMLentity [vectorproduct] {\times}
+% \defineXMLentity [scalarproduct] {\cdot}
+% \defineXMLentity [outerproduct] {\otimes}
+
+% \defineXMLentity [integers] {\integers}
+% \defineXMLentity [reals] {\reals}
+% \defineXMLentity [rationals] {\rationals}
+% \defineXMLentity [naturalnumbers] {\naturalnumbers}
+% \defineXMLentity [complexes] {\complexes}
+% \defineXMLentity [primes] {\primes}
+
+% \defineXMLentity [emptyset] {\emptyset}
+% \defineXMLentity [pi] {\pi}
+% \defineXMLentity [eulergamma] {\gamma}
+% \defineXMLentity [infinity] {\mathematics{\infty}}
+
+% \defineXMLentity [InvisibleTimes] {}
+% \defineXMLentity [InvisibleComma] {}
+% \defineXMLentity [ApplyFunction] {}
+
+% \defineXMLentity [it] {\getXMLentity{InvisibleTines}}
+% \defineXMLentity [ic] {\getXMLentity{InvisibleComma}}
+% \defineXMLentity [af] {\getXMLentity{ApplyFunction}}
+
+% \defineXMLentity [PlusMinus] {\getXMLentity{plusminus}}
+
+% \defineXMLentity [infin] {\getXMLentity{infinity}}
+% \defineXMLentity [infty] {\getXMLentity{infinity}}
+% \defineXMLentity [part] {\getXMLentity{differentiald}}
+
+% \defineXMLentity [RightArrow] {\normalorfiller\rightarrow\rightarrowfill}
+% \defineXMLentity [LeftArrow] {\normalorfiller\leftarrow\leftarrowfill}
+% \defineXMLentity [UnderBrace] {\normalorfiller\empty\upbracefill}
+% \defineXMLentity [OverBrace] {\normalorfiller\empty\downbracefill}
+% \defineXMLentity [UnderBar] {\normalorfiller\hrule\hrulefill}
+% \defineXMLentity [OverBar] {\normalorfiller\hrule\hrulefill}
+% \defineXMLentity [Hat] {\normalorfiller\empty\empty} % todo
+
+% \defineXMLentity [downarrow] {\mathortext\downarrow\empty}
+% \defineXMLentity [uparrow] {\mathortext\uparrow\empty}
+
+% \defineXMLentity [Tab] {\hskip4em}
+% \defineXMLentity [NewLine] {\mathortext\empty\crlf}
+% \defineXMLentity [IndentingNewLine] {\mathortext\empty\crlf}
+
+% \defineXMLentity [NoBreak] {\nobreak}
+% \defineXMLentity [GoodBreak] {\goodbreak}
+% \defineXMLentity [BadBreak] {\nobreak}
+
+% \defineXMLentity [Space] {\getXMLentity{MediumSpace}}
+% \defineXMLentity [NonBreakingSpace] {\getXMLentity{MediumSpace}}
+% \defineXMLentity [ZeroWidthSpace] {}
+
+% \def\somespaceentity#1#2%
+% {\mathortext
+% {\mskip#1mu}
+% {\ifvmode\dontleavehmode\else\unskip\fi\hskip#2em\strut\hskip\zeropoint\ignorespaces}%
+% \relax}
+
+% \defineXMLentity [VeryThinSpace] {\somespaceentity {2}{.125}}
+% \defineXMLentity [ThinSpace] {\somespaceentity {3}{.25}}
+% \defineXMLentity [MediumSpace] {\somespaceentity {4}{.5}}
+% \defineXMLentity [ThickSpace] {\somespaceentity {5}{1}}
+% \defineXMLentity [NegativeVeryThinSpace] {\somespaceentity{-2}{-.125}}
+% \defineXMLentity [NegativeThinSpace] {\somespaceentity{-3}{-.25}}
+% \defineXMLentity [NegativeMediumSpace] {\somespaceentity{-4}{-.5}}
+% \defineXMLentity [NegativeThickSpace] {\somespaceentity{-5}{-1}}
+
+% \defineXMLentity [NegVeryThinSpace] {\getXMLentity{NegativeVeryThinSpace}}
+% \defineXMLentity [NegThinSpace] {\getXMLentity{NegativeThinSpace}}
+% \defineXMLentity [NegMediumSpace] {\getXMLentity{NegativeMediumSpace}}
+% \defineXMLentity [NegThickSpace] {\getXMLentity{NegativeThickSpace}}
+
+% \defineXMLentity [nbsp] {\getXMLentity{NonBreakingSpace}}
+% \defineXMLentity [thinsp] {\getXMLentity{ThinSpace}}
+% \defineXMLentity [medsp] {\getXMLentity{MediumSpace}}
+% \defineXMLentity [thicksp] {\getXMLentity{ThickSpace}}
+
+% \defineXMLentity [larr] {\getXMLentity{LeftArrow}}
+% \defineXMLentity [rarr] {\getXMLentity{RightArrow}}
+
+
+% \defineXMLentity [lbrace] {\normalordelimiter{\{}{\MMLleft \{}}
+% \defineXMLentity [rbrace] {\normalordelimiter{\}}{\MMLright\}}}
+% \defineXMLentity [lbracket] {\normalordelimiter{[}{\MMLleft [}}
+% \defineXMLentity [rbracket] {\normalordelimiter{]}{\MMLright]}}
+% \defineXMLentity [lparenthesis] {\normalordelimiter{(}{\MMLleft (}}
+% \defineXMLentity [rparenthesis] {\normalordelimiter{)}{\MMLright)}}
+% \defineXMLentity [langle] {\normalordelimiter{\langle}{\MMLleft \langle}}
+% \defineXMLentity [rangle] {\normalordelimiter{\rangle}{\MMLright\rangle}}
+
+% \defineXMLentity [lang] {\getXMLentity{langle}}
+% \defineXMLentity [rang] {\getXMLentity{rangle}}
+% \defineXMLentity [lbrack] {\getXMLentity{lbracket}}
+% \defineXMLentity [rbrack] {\getXMLentity{rbracket}}
+% \defineXMLentity [lparent] {\getXMLentity{lparenthesis}}
+% \defineXMLentity [rparent] {\getXMLentity{rparenthesis}}
+
+% \defineXMLentity [\letterleftbrace ] {\getXMLentity{lbrace}}
+% \defineXMLentity [\letterrightbrace] {\getXMLentity{rbrace}}
+
+% \defineXMLentity [times] {\mathematics{\times}}
+% \defineXMLentity [minus] {\mathematics{-}}
+% \defineXMLentity [plus] {\mathematics{+}}
+% \defineXMLentity [plusmn] {\mathematics{\pm}}
+
+% \defineXMLentity [nabla] {\nabla}
+
+% \def\myspecialnormalvert {\mathematics{\vert}}
+% \def\myspecialstretchvert{\;\vrule\;}
+
+% \defineXMLentity [,] {{,}}
+% \defineXMLentity [.] {{.}}
+% \defineXMLentity [+] {+}
+% \defineXMLentity [-] {-}
+% \defineXMLentity [|] {\myspecialnormalvert}
+% \defineXMLentity [/] {/}
+% \defineXMLentity [*] {\times}
+% \defineXMLentity [=] {=}
+
+% \defineXMLentity [++] {++}
+% \defineXMLentity [--] {--}
+% \defineXMLentity [//] {//}
+% \defineXMLentity [**] {\times\times}
+% \defineXMLentity [==] {==}
+% \defineXMLentity [...] {\cdots}
+
+% \defineXMLentity [quot] {"}
+
+% \defineXMLentity [triangle] {\mathematics\triangle}
+% \defineXMLentity [otimes] {\mathematics\otimes}
+% \defineXMLentity [oplus] {\mathematics\oplus}
+% \defineXMLentity [cup] {\mathematics\cup}
+% \defineXMLentity [cap] {\mathematics\cap}
+% \defineXMLentity [sdot] {\mathematics\cdot}
+% \defineXMLentity [dot] {\mathematics\cdot}
+% \defineXMLentity [sim] {\mathematics\sim}
+% \defineXMLentity [circ] {\mathematics\circ}
+% \defineXMLentity [dagger] {\mathematics\dagger}
+% \defineXMLentity [cdots] {\mathematics\cdots}
+
+% \defineXMLentity [...] {\getXMLentity{cdots}}
+% \defineXMLentity [continued] {\getXMLentity{cdots}}
+
+% \defineXMLentity [sub] {\getXMLentity{subset}}
+% \defineXMLentity [sube] {\getXMLentity{prsubset}}
+% \defineXMLentity [notprsubset] {\getXMLentity{notprsubset}}
+
+% \defineXMLentity [ndash] {\endash}
+% \defineXMLentity [mdash] {\emdash}
+
+% -- ignored: malignmark
+% -- luacode will be moved to x-mmp.lua
+% -- { } # % _ ^ & etc escapen, {} in mathtype entities; mo/mtext
+
+\ifx\MMLleft \undefined \let\MMLleft \firstofoneargument \fi
+\ifx\MMLright\undefined \let\MMLright\firstofoneargument \fi
+
+\def\mmlleftdelimiter #1{\normalordelimiter{#1}{\MMLleft #1}}
+\def\mmlrightdelimiter#1{\normalordelimiter{#1}{\MMLright#1}}
+\def\mmlchar #1{\char#1 }
+\def\mmlnolim #1{\mathopnolimits{#1}}
+
+\endinput
diff --git a/Master/texmf-dist/tex/context/base/x-mmc.mkiv b/Master/texmf-dist/tex/context/base/x-mmc.mkiv
new file mode 100644
index 00000000000..042ef340652
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/x-mmc.mkiv
@@ -0,0 +1,2201 @@
+%D \module
+%D [ file=x-newmml,
+%D version=2005.06.10, % 1999.12.20,
+%D title=\CONTEXT\ XML Modules,
+%D subtitle=MathML Renderer,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+% todo: more consistent both pi's and attributes to apply
+
+\doifnotmode {atpragma} {\endinput}
+
+% \xmlfilter{#1}{/*/name()} -> \xmltag
+
+\xmlresolveentities
+
+\startluacode
+ function math.register_xml_entities()
+ local entities, char = xml.entities, utf.char
+ for name, unicode in pairs(math.entities) do
+ if not entities[name] then
+ entities[name] = char(unicode)
+ end
+ end
+ end
+ math.register_xml_entities()
+
+ -- not yet needed, we have class info in char-def already
+ --
+ -- characters.data[0x2190].activemath = "mathleftarrow"
+ -- characters.data[0x2190].activemath = "mathuparrow"
+ -- characters.data[0x2192].activemath = "mathrightarrow"
+ -- characters.data[0x2193].activemath = "mathdownarrow"
+ --
+ -- function characters.activate(catcodes)
+ -- local char, sprint, format = utf.char, tex.sprint, string.format
+ -- for k,v in pairs(characters.data) do
+ -- local a = v.activemath
+ -- if a then -- how fast is this?
+ -- sprint(format("\\letcatcodecommand %s %s \\%s",catcodes,k,a))
+ -- end
+ -- end
+ -- end
+ --
+ -- better do this the official way, i.e. defineactivecharacter since it
+ -- permits different meanings for different catcode tables (todo)
+ --
+ -- characters.activate(tex.ctxcatcodes)
+ -- characters.activate(tex.notcatcodes)
+\stopluacode
+
+% \def\mathrightarrow{\normalorfiller\rightarrow\rightarrowfill}
+% \def\mathleftarrow {\normalorfiller\leftarrow \leftarrowfill}
+% \def\mathdownarrow {\mathortext \downarrow \empty}
+% \def\mathuparrow {\mathortext \uparrow \empty}
+
+% \def\mathunderbrace{\normalorfiller\empty\upbracefill}
+% \def\mathoverbrace {\normalorfiller\empty\downbracefill}
+% \def\mathunderbar {\normalorfiller\hrule\hrulefill}
+% \def\mathoverbar {\normalorfiller\hrule\hrulefill}
+% \def\mathhat {\normalorfiller\empty\empty} % todo
+
+%D Remark: from now on this is a module and no longer an xtag
+%D filter. There is an intermediate cleaner module but it has
+%D some namespace limitations. Here we do it the \MKV\ way.
+
+\unprotect
+
+\def\widevec#1%
+ {\vbox{\m@th\ialign{##\crcr
+ \rightarrowfill\crcr\noalign{\nointerlineskip}%
+ $\hfil\displaystyle{#1}\hfil$\crcr}}}
+
+\protect
+
+\ifx\inlinemathematics\undefined
+ \def\inlinemathematics {\dontleavehmode\mathematics} % already in kernel
+ \long\def\inlinemath #1{\dontleavehmode\relax\ifmmode#1\else $#1$\fi}
+\fi
+
+%D Then we start defining the rendering macros:
+
+\writestatus{loading}{Context XML Macros (MathML Renderer)}
+
+\startmodule [mathml]
+
+\ctxlua{environment.loadlucfile("x-mathml")}
+
+\unprotect
+
+\def\MMLrm{\mr}
+
+\def\MMLseparator#1{\removeunwantedspaces{#1}\ignorespaces} % nils space after separator
+
+%D First we define some general formula elements.
+
+ % \defineXMLenvironment [formula] [label=,sublabel=]
+ % {\dostartXMLformula\placeformula}
+ % {\dostopXMLformula}
+
+ % \defineXMLenvironment [subformula] [label=,sublabel=]
+ % {\dostartXMLformula\placesubformula}
+ % {\dostopXMLformula}
+
+ % \def\dostartXMLformula#1%
+ % {\doifelsenothingXMLop{label}
+ % {\startformula}
+ % {\expanded{#1[\XMLop{label}]{\XMLop{sublabel}}}\startformula}}
+
+ % \def\dostopXMLformula
+ % {\stopformula}
+
+%D Since I only had the draft of MathML 2 as example of
+%D rendering, there are probably a lot of omissions and
+%D misinterpretations. At least I learned some bits and
+%D pieces of math rendering.
+%D
+%D The main complications were not so much the math, but to
+%D find the most efficient way to handle elements without
+%D spacing beging messed up. The first implementation was
+%D aimed at getting reasonable output, this second
+%D implementation is already better in terms of handling
+%D nesting, and I will definitely need a third one that has
+%D more efficient and less ugly code.
+%D
+%D The \TEX\ part is not that complicated and once the
+%D preprocessor was okay, the rest way just a lot of keying
+%D and testing. It all comes down to gobbling, redefining,
+%D and not so much to parsing.
+%D
+%D The second implementation expanded the whole math sequence
+%D into an internal \TEX\ representation. This is a rather clean
+%D and fast process. Filtering and testing takes place by
+%D redefining teh internal representation macros.
+%D
+%D The third implementation may look a bit more messy in some
+%D respects. This is because in \TEX\ it's not that trivial to
+%D implement a tree handler. We use a stack for the \type {apply}
+%D element and other sequential content. Occasionally we need to
+%D peek into child elements which involves messy code. This
+%D implementation is closer to the normal \XML\ handling in
+%D \CONTEXT.
+
+%D We start with the parent elements and the option handler.
+
+% \defineXMLdirective [mathml] \setupMMLappearance % todo
+
+\def\xmlmathmldirective#1{\dosetvalue{MML#1}}
+
+%D In the styles, options can be set with:
+
+\def\setupMMLappearance[#1]{\dodoubleargument\getparameters[MML#1]} % no @@ because passed to lua
+
+%D We will apply inner math to all bits and pieces made up by an
+%D \type {apply}.
+
+\def\MMLmathinner
+ {\ifinner \expandafter \firstofoneargument \else \expandafter \mathinner \fi}
+
+%D Auxiliary MathML macros: (to be generalized)
+
+\def\mmlfirst #1{\xmlindex{#1}{/*}{1}} % \xmlsnippet{1}
+\def\mmlsecond #1{\xmlindex{#1}{/*}{2}} % \xmlsnippet{2}
+\def\mmlthird #1{\xmlindex{#1}{/*}{3}} % \xmlsnippet{3}
+\def\mmlprelast#1{\xmlindex{#1}{/*}{-2}} %
+\def\mmllast #1{\xmlin{#1}{/*}{-1}} %
+
+\starttexdefinition doifelsemmlfunction #1
+ \xmldoifelse {#1} {/mml:fn} {
+ \firstoftwoarguments
+ } {
+ \xmldoifelse {#1} {/mml:apply/mml:fn} {
+ \firstoftwoarguments
+ } {
+ \xmldoifelse {#1} {/mml:ci[@type=='fn']} {
+ \firstoftwoarguments
+ } {
+ \secondoftwoarguments
+ }
+ }
+ }
+\stoptexdefinition
+
+%D Special features:
+
+ \newtoks \@@postponedMMLactions \setfalse \somepostponedMMLactions
+
+ \def\postponeMMLactions#1%
+ {\global\settrue\somepostponedMMLactions
+ \global\@@postponedMMLactions\expandafter{\the\@@postponedMMLactions#1}}
+
+ \def\postponedMMLactions
+ {\global\setfalse\somepostponedMMLactions
+ \@EA\global\@EA\@@postponedMMLactions\@EA\emptytoks
+ \the\@@postponedMMLactions}
+
+%D A couple of lists:
+
+\convertargument
+ mml:times|mml:divide|mml:power|%
+ mml:lt|mml:gt|mml:eq|mml:leq|mml:geq|%
+ mml:in|mml:inverse|%
+ mml:fn|%
+ mml:floor|mml:ceiling|%
+ mml:mean|%
+ mml:selector|%
+ mml:abs|mml:int|mml:limit|mml:sum|mml:product|%
+ mml:outerproduct|mml:innerproduct|mml:scalarproduct%
+\to \MMLcmainresetlist
+
+\convertargument
+ mml:sin|mml:arcsin|mml:sinh|mml:arcsinh|%
+ mml:cos|mml:arccos|mml:cosh|mml:arccosh|%
+ mml:tan|mml:arctan|mml:tanh|mml:arctanh|%
+ mml:cot|mml:arccot|mml:coth|mml:arccoth|%
+ mml:csc|mml:arccsc|mml:csch|mml:arccsch|%
+ mml:sec|mml:arcsec|mml:sech|mml:arcsech|%
+ mml:ln|mml:exp|mml:log|%
+ mml:abs|mml:int|mml:limit|mml:sum|mml:product|%
+ mml:fn%
+\to \MMLcfunctionlist
+
+\convertargument
+ mml:sin|mml:arcsin|mml:sinh|mml:arcsinh|%
+ mml:cos|mml:arccos|mml:cosh|mml:arccosh|%
+ mml:tan|mml:arctan|mml:tanh|mml:arctanh|%
+ mml:cot|mml:arccot|mml:coth|mml:arccoth|%
+ mml:csc|mml:arccsc|mml:csch|mml:arccsch|%
+ mml:sec|mml:arcsec|mml:sech|mml:arcsech|%
+ mml:ln|mml:exp|mml:log|%
+ mml:abs%
+\to \MMLcpurefunctionlist
+
+\convertargument
+ mml:diff|mml:partialdiff|mml:root%
+\to \MMLcconstructlist
+
+%D We use inner and grouping (begin/end and no b/e) else we
+%D get problems with 1/2(1+2) and alike (todo: ask taco).
+%D
+%D The problem with apply is that we need to take care of
+%D several situations, like:
+%D
+%D \starttyping
+%D <apply> <.../> ...
+%D <apply> <fn> ...
+%D <apply> <apply> <ci> ...
+%D <apply> <apply> <fn> <ci> ...
+%D \stoptyping
+%D
+%D Because we translated version 2 of this renderer into
+%D version 3 the following definitions may be sub optimal or
+%D more complex than actually needed.
+
+% simple version
+
+\newcount\@MMLlevel \def\MMLcreset{\@MMLlevel\zerocount}
+
+\let\MMLctempresetlist\empty \def\setMMLcreset{\edef\MMLctempresetlist}
+
+\let\MMLdoL\donothing
+\let\MMLdoR\donothing
+
+\newcount\mmlapplydepth \def\MMLcreset{\mmlapplydepth\zerocount}
+
+\startxmlsetups mml:apply
+ \MMLmathinner {
+ \xmldoif {#1} {/(\MMLcmainresetlist\string|\MMLctempresetlist)} {
+ % \MMLcreset
+ }
+ \edef\mmlapplyopentoken {\xmlatt{#1}{open}}
+ \edef\mmlapplyclosetoken{\xmlatt{#1}{close}}
+ \ifcase\mmlapplydepth \else
+ \ifx\mmlapplyopentoken\empty
+ \def\mmlapplyopentoken {(}
+ \def\mmlapplyclosetoken{)}
+ \fi
+ \fi
+ \advance\mmlapplydepth\plusone
+ \begingroup
+ \ifx\mmlapplyopentoken\empty
+ \let\MMLdoL\donothing
+ \let\MMLdoR\donothing
+ \else
+ \edef\MMLdoL{\noexpand\left \mmlapplyopentoken }
+ \edef\MMLdoR{\noexpand\right\mmlapplyclosetoken}
+ \fi
+ \let\MMLctempresetlist\empty
+ \xmldoifelse {#1} {/mml:apply} {
+% % <apply> <apply> ... </apply> <ci> .. </ci> </apply>
+% \xmldoifelse {#1} {/mml:apply(mml:plus|mml:minus)} {% [a]
+% % yet incomplete and rather untested
+% % <apply> <apply> <minus/> <tan/> <cos/> </apply> <ci>x</ci> </apply>
+ } {% [b]
+% \MMLcreset
+ }
+% \MMLdoL
+% \xmlfirst{#1}{/*}
+% \ifconditional\somepostponedMMLactions
+% \postponedMMLactions
+% \else
+% \left(\MMLcreset\mmlsecond{#1}\right)
+% \fi
+% \MMLdoR
+% } {
+ \edef\mmlapplyaction{\xmlfilter{#1}{/*/name()}}
+ \doifsetupselse {mml:apply:\mmlapplyaction} {
+ \xmlsetup{#1}{mml:apply:\mmlapplyaction}
+ } {
+% \MMLdoL
+ \xmlsetup{#1}{\xmlfilter{#1}{/*/name()}}
+% \MMLdoR
+ }
+% }
+ \endgroup
+ \advance\mmlapplydepth\minusone
+ }
+\stopxmlsetups
+
+\startxmlsetups mml:apply:mml:apply
+ \xmlflush{#1}
+ \xmlall{#1}{../[position()>1]}
+\stopxmlsetups
+\startxmlsetups mml:apply:mml:fn
+ \hbox{todo}% obsolete
+\stopxmlsetups
+\startxmlsetups mml:apply:mml:csymbol
+ \hbox{todo}
+\stopxmlsetups
+
+ % \startsetups mmc:fn:apply
+ % \begingroup
+ % \rawXMLstacktext\plusone % still on stack, no check, just fn content
+ % \doifelse {\getXMLstackname\plusone} {ci} {
+ % \flattenXMLcontent{\getXMLstackdata\plusone}
+ % \doifsetupselse{mmc:fn:\flattenedXMLcontent} {
+ % % \MMLdoL/MMLdoR to be handled in plugin
+ % \global\defXMLstackdata\XMLfnoperator\plusone
+ % \expanded{\endgroup\noexpand\directsetup{mmc:fn:\flattenedXMLcontent}}
+ % } {
+ % \endgroup
+ % \MMLcreset
+ % \MMLdoL
+ % \getXMLstackdata\plusone
+ % \ifnum\XMLstacklevel>\plusone
+ % \getXMLentity{NegThinSpace}
+ % \left(\MMLcreset\flushXMLstackwith\plustwo{\MMLseparator,}\right)
+ % \fi
+ % \MMLdoR
+ % }
+ % } {
+ % \endgroup
+ % \MMLcreset
+ % \MMLdoL
+ % \getXMLstackdata\plusone
+ % \MMLdoR
+ % }
+ % \stopsetups
+
+ % \startsetups mmc:csymbol:apply
+ % \begingroup
+ % \defineXMLsave[csymbol][definitionURL=,encoding=]
+ % \rawXMLstackdata\plusone % was text % still on stack, no check, just attr test
+ % % \MMLdoL/MMLdoR to be handled in plugin
+ % \lowercasestring\XMLpar{csymbol}{definitionURL}{}\to\mmcSymbolURL
+ % \doifsetupselse{mmc:csymbol:\mmcSymbolURL} {
+ % \expanded{\endgroup\noexpand\directsetup{mmc:csymbol:\mmcSymbolURL}}
+ % } {
+ % \endgroup
+ % %\XMLval{mmc:cs}{\XMLop{encoding}}{\firstofoneargument}% fails when no content
+ % \XMLval{mmc:cs}{\XMLop{encoding}}{}
+ % }
+ % \stopsetups
+
+
+\startxmlsetups mml:apply:mml:ci
+ \xmlfirst{#1}{/mml:ci}
+ \ifnum\xmlcount{#1}{/*}>\plusone
+ \left(\MMLcreset\xmlconcatrange{#1}{/*}{2}{}{\MMLseparator,}\right)
+ \fi
+\stopxmlsetups
+
+% reln
+
+\startxmlsetups mml:reln
+ \writestatus{XML}{MathML element "reln" is obsolete}
+\stopxmlsetups
+
+% fn
+
+ \startsetups mmc:fn:plusminus
+ \ifnum\XMLstacklevel>\plustwo
+ \MMLcreset
+ \left(\expandafter\flushXMLstackwith\expandafter\plustwo\expandafter{\XMLfnoperator}\right)
+ \else
+ \getXMLstackdata\plustwo
+ \fi
+ \stopsetups
+
+ \startsetups mmc:fn:minusplus
+ \directsetup{mmc:fn:plusminus}
+ \stopsetups
+
+ \defineXMLnested
+ [fn]
+ {\directsetup{mmc:fn:start}}
+ {\directsetup{mmc:fn:stop}}
+
+ \startsetups mmc:fn:apply
+ \begingroup
+ \rawXMLstacktext\plusone % still on stack, no check, just fn content
+ \doifelse {\getXMLstackname\plusone} {ci} {
+ \flattenXMLcontent{\getXMLstackdata\plusone}
+ \doifsetupselse{mmc:fn:\flattenedXMLcontent} {
+ \global\defXMLstackdata\XMLfnoperator\plusone
+ \expanded{\endgroup\noexpand\directsetup{mmc:fn:\flattenedXMLcontent}}
+ } {
+ \endgroup
+ \MMLcreset
+ \getXMLstackdata\plusone
+ \ifnum\XMLstacklevel>\plusone
+ \getXMLentity{NegThinSpace}
+ \left(\MMLcreset\flushXMLstackwith\plustwo{\MMLseparator,}\right)
+ \fi
+ }
+ } {
+ \endgroup
+ \MMLcreset
+ \getXMLstackdata\plusone
+ }
+ \stopsetups
+
+ \startsetups mmc:fn:start
+ \ifnum\XMLstacklevel>\plustwo
+ \def\MMCfnleft {\left(}
+ \def\MMCfnright{\right)}
+ \else
+ \let\MMCfnleft \relax
+ \let\MMCfnright\relax
+ \fi
+ \begingroup
+ \stopsetups
+
+ \startsetups mmc:fn:stop
+ \doifelse {\getXMLstackname\plusone} {ci} {
+ \flattenXMLcontent{\getXMLstackdata\plusone}
+ \doifsetupselse{mmc:fn:\flattenedXMLcontent} {
+ \global\defXMLstackdata\XMLfnoperator\plusone
+ \directsetup{mmc:fn:\flattenedXMLcontent}
+ } {
+ \MMLcreset
+ \getXMLstackdata\plusone
+ }
+ \endgroup
+ } {
+ \doifelse {\getXMLstackname\plusone} {apply} {
+ \xmldoifelse {#1} {/(mml:plus\string|mml:minus)} {
+ \left(
+ \getXMLstackdata\plusone
+ \right)
+ } {
+ \getXMLstackdata\plusone
+ }
+ \endgroup
+ \ifnum\XMLstacklevel>\plusone
+ \left(
+ \getXMLstackdata\plustwo
+ \right)
+ \fi
+ } {
+ \MMLcreset
+ \getXMLentity{NegThinSpace}
+ \MMCfnleft
+ \ifnum\XMLstacklevel=\plustwo,\fi
+ \flushXMLstackwith\plustwo,
+ \MMCfnright
+ \endgroup
+ }
+ }
+ \stopsetups
+
+%D The next definition provide a kind of plug-in mechanism (see
+%D the open math extension module).
+
+% http://www.publishers.com/somename
+
+\starttexdefinition mmlapplycsymbol #1#2#3#4
+ % #1=full url, #2=name, #3=encoding, #4=text
+ \doifelse {#3} {text} {
+ {\mr #4}
+ } {
+ \doifsetupselse {mml:csymbol:#1} {
+ % full url
+ \directsetup{mml:csymbol:#1}
+ } {
+ % somename (fallback)
+ \doifsetupselse {mmc:csymbol:#2} {
+ \directsetup{mml:csymbol:#2}
+ } {
+ \XMLval{mmc:cs}{#3}{}% todo
+ }
+ }
+ }
+\stoptexdefinition
+
+\startxmlsetups mml:csymbol
+ \ctxlua{lxml.mml.csymbol("#1")}
+\stopxmlsetups
+
+% \startxmlsetups mml:csymbol:<url> \stopxmlsetups
+
+%D Alternative b will convert periods into comma's:
+%D
+%D \startbuffer
+%D \startXMLdata
+%D <imath><apply><cn>1.23</cn></apply></imath>
+%D <dmath><apply><cn>1.23</cn></apply></dmath>
+%D \stopXMLdata
+%D
+%D \type{\setupMMLappearance[cn] [alternative=b]}
+%D
+%D \startXMLdata
+%D <imath><apply><cn>1.23</cn></apply></imath>
+%D <dmath><apply><cn>1.23</cn></apply></dmath>
+%D \stopXMLdata
+%D \stopbuffer
+%D
+%D \start \typebuffer \getbuffer \stop
+
+\setupMMLappearance[cn] [\c!alternative=\v!a]
+\setupMMLappearance[polar] [\c!alternative=\v!a] % a|b|c
+\setupMMLappearance[float] [\c!symbol=\v!no] % \v!yes|dot
+\setupMMLappearance[enotation][\c!symbol=\v!no] % \v!yes|dot
+\setupMMLappearance[base] [\c!symbol=\v!numbers] % digits|characters|text|no
+
+\startxmlsetups mml:cs \xmlcommand{#1}{/}{mml:cs:\xmlattdef{#1}{type}{default}} \stopxmlsetups
+\startxmlsetups mml:ci \xmlcommand{#1}{/}{mml:ci:\xmlattdef{#1}{type}{default}} \stopxmlsetups
+\startxmlsetups mml:cn \xmlcommand{#1}{/}{mml:cn:\xmlattdef{#1}{type}{default}} \stopxmlsetups
+
+% helpers cn
+
+\startxmlsetups mml:cn:default
+ \mathopnolimits{\xmlflush{#1}}
+\stopxmlsetups
+
+% helpers ci
+
+\startxmlsetups mml:ci:default
+ \xmlflush{#1}
+\stopxmlsetups
+
+\startxmlsetups mml:ci:set
+ {\bbd\xmlflush{#1}}
+\stopxmlsetups
+
+\startxmlsetups mml:ci:vector
+ \widevec{\xmlflush{#1}}
+\stopxmlsetups
+
+\startxmlsetups mml:ci:matrix
+ {\bi\xmlflush{#1}}
+\stopxmlsetups
+
+\startxmlsetups mml:ci:function
+ \xmlflush{#1}\negthinspace
+\stopxmlsetups
+
+\startxmlsetups mml:ci:fn
+ \xmlsetup{#1}{mml:ci:function}
+\stopxmlsetups
+
+\startxmlsetups mml:ci:complex-cartesian
+ \xmlsetup{#1}{mml:cn:complex}
+\stopxmlsetups
+
+\startxmlsetups mml:ci:complex
+ \xmlsetup{#1}{mml:cn:complex}
+\stopxmlsetups
+
+\startxmlsetups mml:ci:complex-polar
+ \xmlsetup{#1}{mml:cn:polar}
+\stopxmlsetups
+
+\startxmlsetups mml:ci:polar
+ \xmlsetup{#1}{mml:cn:polar}
+\stopxmlsetups
+
+% \doif\MMLcnalternative\v!b{\redefinemathcharacter [.][ord][mi]["3B]\relax}%
+%
+% todo: number function from mmp
+
+% helpers ci
+
+\startxmlsetups mml:cn:default
+ \xmlflush{#1}
+\stopxmlsetups
+
+\startxmlsetups mml:cn:integer
+ \edef\mmlintegerbase{\xmlattdef{#1}{base}{}}
+ \ifx\mmlintegerbase\empty
+ \xmlflush{#1}
+ \else
+ \doifelse \MMLbasesymbol \v!no {
+ \MMLcCNbasedata{\xmlflush{#1}}
+ } {
+ \MMLcCNbasedata{\xmlflush{#1}}_{
+ \hbox {$
+ \mr
+ \scriptscriptstyle
+ \processaction
+ [\MMLbasesymbol]
+ [\v!characters=>\MMLcCNbasestring BODH,
+ \v!text=>\MMLcCNbasestring{BIN}{OCT}{DEC}{HEX},
+ \s!unknown=>\mmlintegerbase]
+ $}
+ }
+ }
+ \fi
+\stopxmlsetups
+
+\def\MMLcCNbasedata#1%
+ {\ifnum\mmlintegerbase>10 \relax{\mr#1}\else#1\fi}
+
+\def\MMLcCNbasestring#1#2#3#4%
+ {\ifnum\mmlintegerbase= 2 #1\else
+ \ifnum\mmlintegerbase= 8 #2\else
+ \ifnum\mmlintegerbase=10 #3\else
+ \ifnum\mmlintegerbase=16 #4\else
+ \mmlintegerbase \fi\fi\fi\fi}
+
+\startxmlsetups mml:cn:polar
+ \xmlsetup{#1}{mml:cn:polar:\MMLpolaralternative}
+\stopxmlsetups
+
+\startxmlsetups mml:cn:polar:a
+ \mathopnolimits{Polar}% ? ? ?
+ \left(\xmlsnippet{#1}{1},\xmlsnippet{#1}{1}\right)
+\stopxmlsetups
+
+\startxmlsetups mml:cn:polar:b
+% {\mr e}^{\xmlsnippet{#1}{1}\mskip2mu\getXMLentity{imaginaryi}}
+ {\mr e}^{\xmlsnippet{#1}{1}+\xmlsnippet{#1}{3}{\mr i}}
+\stopxmlsetups
+
+\startxmlsetups mml:cn:polar:c
+% \exp\left(\xmlsnippet{#1}{1}\mskip2mu\getXMLentity{imaginaryi}\right)}
+ \exp\left(\xmlsnippet{#1}{1}+\xmlsnippet{#1}{3}\mskip2mu\getXMLentity{imaginaryi}\right)
+\stopxmlsetups
+
+\startxmlsetups mml:cn:complex-polar
+ \xmlsetup{#1}{mml:cn:polar}
+\stopxmlsetups
+
+\startxmlsetups mml:cn:complex
+ \xmlsnippet{#1}{1} + \xmlsnippet{#1}{3}{\mr i}
+\stopxmlsetups
+
+\startxmlsetups mml:cn:complex-cartesian
+ \xmlsetup{#1}{mml:cn:complex}
+\stopxmlsetups
+
+\startxmlsetups mml:cn:float
+ \doifelse \MMLfloatsymbol \v!no {
+ % make sure that e shows up ok
+ \mathopnolimits{\xmlflush{#1}}
+ } {
+ % we should ignore \entities !
+ \edef\mmlfloatstring{\xmlflush{#1}}
+ \splitstring\mmlfloatstring\at e\to\first\and\last
+ \ifx\first\empty
+ \mmlfloatstring
+ \else\ifx\last\empty
+ \mmlfloatstring
+ \else
+ \first
+ \doifelse \MMLfloatsymbol {dot} \cdot \times
+ 10^{\last}
+ \fi \fi
+ }
+\stopxmlsetups
+
+\startxmlsetups mml:cn:real
+ \xmlsetup{#1}{mml:cn:float}
+\stopxmlsetups
+
+\startxmlsetups mml:cn:e-notation
+ \doifelse \MMLenotationsymbol \v!no {
+ \xmlsnippet{#1}{1}
+ \unskip\mathopnolimits{e}\ignorespaces
+ \xmlsnippet{#1}{3}
+ } {
+ \xmlsnippet{#1}{1}
+ \doifelse \MMLenotationsymbol {dot} \cdot
+ \times10^{\xmlsnippet{#1}{3}}
+ }
+\stopxmlsetups
+
+\startxmlsetups mml:cn:logical
+ \mathopnolimits{\xmlflush{#1}}
+\stopxmlsetups
+
+\startxmlsetups mml:cn:rational
+ \xmldoifelse {#1} {/mml:sep} {
+ \frac
+ {\xmlsnippet{#1}{1}}
+ {\xmlsnippet{#1}{3}}
+ } {
+ \xmlflush{#1}
+ }
+\stopxmlsetups
+
+% interval
+
+\setupMMLappearance[interval][\c!alternative=\v!a,\c!separator={,}]
+
+\startxmlsetups mml:interval
+ \xmlsetup{#1}{mml:interval:\xmlattdef{#1}{closure}{closed}}
+\stopxmlsetups
+
+\startxmlsetups mml:interval:closed
+ \left[\mmlfirst{#1}\MMLseparator\MMLintervalseparator\mmlsecond{#1}\right]
+\stopxmlsetups
+
+\startxmlsetups mml:interval:open-closed
+ \doifelse \MMLintervalalternative \v!b {
+ \left<\mmlfirst{#1}\MMLseparator\MMLintervalseparator\mmlsecond{#1}\right]
+ } {
+ \left(\mmlfirst{#1}\MMLseparator\MMLintervalseparator\mmlsecond{#1}\right]
+ }
+\stopxmlsetups
+
+\startxmlsetups mml:interval:closed-open
+ \doifelse \MMLintervalalternative \v!b {
+ \left[\mmlfirst{#1}\MMLseparator\MMLintervalseparator\mmlsecond{#1}\right>
+ } {
+ \left[\mmlfirst{#1}\MMLseparator\MMLintervalseparator\mmlsecond{#1}\right)
+ }
+\stopxmlsetups
+
+\startxmlsetups mml:interval:open
+ \doifelse \MMLintervalalternative \v!b {
+ \left<\mmlfirst{#1}\MMLseparator\MMLintervalseparator\mmlsecond{#1}\right>
+ } {
+ \left(\mmlfirst{#1}\MMLseparator\MMLintervalseparator\mmlsecond{#1}\right)
+ }
+\stopxmlsetups
+
+% inverse
+
+% \startxmlsetups mml:inverse
+% \xmldoifelse {#1} {/(\MMLcpurefunctionlist)} {
+% \mmlsecond{#1}^{-1}
+% \xmlall{#1}{/[position()>2]}
+% } {
+% {\left[\mmlthird{#1}\right]}^{-1}
+% }
+% \stopxmlsetups
+
+\setfalse\xmlinversefunction
+
+\startxmlsetups mml:apply:inverse
+ \settrue\xmlinversefunction
+% \ctxlua{print(table.serialize(lxml.id("#1")))}
+ \xmlsetup{#1}{\xmlfilter{#1}{/mml:apply/*/name(1)}}
+\stopxmlsetups
+
+\startxmlsetups xml:mml:inverse
+ \xmlsetsetup{\xmldocument}{mml:apply/mml:apply/mml:inverse/../../..}{mml:apply:inverse}
+\stopxmlsetups
+
+\xmlregistersetup{xml:mml:inverse}
+
+% condition
+
+% maybe a fast \xmlnonfirst
+
+\startxmlsetups mml:bvar \xmlflush{#1} \stopxmlsetups
+\startxmlsetups mml:lowlimit \xmlflush{#1} \stopxmlsetups
+\startxmlsetups mml:uplimit \xmlflush{#1} \stopxmlsetups
+\startxmlsetups mml:degree \xmlflush{#1} \stopxmlsetups
+
+\startxmlsetups mml:condition
+% \xmldoif {#1} {/mml:bvar} {
+% \xmlfirst{#1}{/mml:bvar}\mid
+% }
+ \xmlall{#1}{/!(mml:condition\string|mml:bvar)}
+\stopxmlsetups
+
+% declare
+
+\setupMMLappearance[declare][\c!state=\v!start]
+
+\startxmlsetups mml:declare
+ \doif \MMLdeclarestate \v!start {
+ \mathopnolimits{declare}
+ \xmlindex{#1}{/*}{1}
+ \ifnum \xmlcount{#1}{/} > \plusone
+ \thickspace
+ \mathopnolimits{as}
+ \thickspace
+ \fi
+ \mmlsecond{#1}
+ }
+\stopxmlsetups
+
+% lambda
+
+\setupMMLappearance[lambda][\c!alternative=b]
+
+\startxmlsetups mml:lambda
+ \begingroup
+ \doifelse \MMLlambdaalternative \v!a {
+ \lambda\left(\xmlconcat{#1}{/!mml:lambda}{\MMLseparator,}\left)
+ } {
+ \ifnum \xmlcount {#1} {/mml:bvar} > \plusone
+ \left(\xmlconcat{#1}{/mml:bvar}{\MMLseparator,}\right)
+ \else
+ \xmlfirst{#1}{/mml:bvar}
+ \fi
+ \mapsto
+ \MMLcreset
+ \xmlall{#1}{/!(mml:bvar|mml:lambda)}
+ }
+ \endgroup
+\stopxmlsetups
+
+% compose
+
+\startxmlsetups mml:compose
+ \begingroup
+ \MMLcreset
+% \let\MMLcCIfunction\firstofoneargument % brrr ? ? ?
+ \doifelsemmlfunction {
+ \left(\xmlconcatrange{#1}{/*}{2}{}{\circ}\right)
+ } {
+ \xmlconcatrange{#1}{/*}{2}{}{\circ}
+ }
+ \endgroup
+\stopxmlsetups
+
+\startxmlsetups mml:image
+ \mathopnolimits{image} \left( \xmlfilter{#1}{/!mml:image/name()} \right)
+\stopxmlsetups
+
+\setupMMLappearance[piece][\c!separator=]
+
+\startxmlsetups mml:piecewise
+ \processaction
+ [\MMLpieceseparator]
+ [ \v!yes=>\def\theMMLpieceseparator{,&},
+ \v!no=>\def\theMMLpieceseparator{&},
+ \s!default=>\def\theMMLpieceseparator{&},
+ \s!unknown=>\def\theMMLpieceseparator{\,\,\hbox{\MMLpieceseparator}\,\,}]
+ \cases{\xmlflush{#1}}
+\stopxmlsetups
+
+\startxmlsetups mml:piece
+ \mmlfirst{#1}\theMMLpieceseparator\mathematics{\mmlsecond{#1}}\crcr
+\stopxmlsetups
+
+\startxmlsetups mml:otherwise
+% \xmlflush{#1}\MMLcPIECEseparator&{\mr otherwise}\crcr
+ \xmlflush{#1}&{\mr otherwise}\crcr
+\stopxmlsetups
+
+% end of piece
+
+\startxmlsetups mml:quotient
+ \lfloor\mmlsecond{#1}/\mmlthird{#1}\rfloor
+\stopxmlsetups
+
+\startxmlsetups mml:factorial
+ \xmlall{#1}{/!factorial}!
+\stopxmlsetups
+
+\setupMMLappearance [divide] [\c!level=\!!maxcard,\c!alternative=\v!a]
+
+\newcount\mmldividelevel
+
+\startxmlsetups mml:divide
+ \advance\mmldividelevel\plusone
+ \doifelse \MMLdividealternative \v!b {
+ \mmlsecond{#1}/\mmlthird{#1}
+ } {
+ \ifnum \mmldividelevel > \MMLdividelevel \relax % threshold
+ \mmlsecond{#1}/\mmlthird{#1}
+ \else
+ \MMLcreset
+ \frac{\MMLcreset\mmlsecond{#1}}{\MMLcreset\mmlthird{#1}}
+ \fi
+ }
+ \advance\mmldividelevel\minusone
+\stopxmlsetups
+
+% min max
+
+\startxmlsetups mml:min \mathopnolimits{min} \xmlsetup{#1}{mml:minmax} \stopxmlsetups
+\startxmlsetups mml:max \mathopnolimits{max} \xmlsetup{#1}{mml:minmax} \stopxmlsetups
+
+\startxmlsetups mml:minmax
+ \xmldoif {#1} {/mml:bvar} {
+ {}_{\xmlfirst{#1}{/mml:bvar}}
+ }
+ \left\{
+ \xmlconcat{#1}{/!(mml:bvar\string|mml:max\string|mml:min)}{\MMLseparator,}
+ \right\}
+\stopxmlsetups
+
+% minus plus
+
+\setupMMLappearance [plus] [\c!alternative=\v!a] % b = no sign -> 3 1/4
+\setupMMLappearance [sign] [\c!reduction=\v!yes]
+
+% alternative b -> geen sign
+
+% branch needed, else (a-b) + (c-d) goes wrong
+% reset check in case of (-x) + 37
+% reset check in case of (-x) + 37
+
+\newcount\mmlpluscounter
+
+\startxmlsetups mml:plus
+ \doifelse \MMLsignreduction \v!yes {
+ \MMLdoL
+ \xmlsetup{#1}{mml:plus:reset}
+ \xmlcommand{#1}{/!mml:plus}{mml:plus:body}
+ \MMLdoR
+ } {
+ \ifnum\xmlcount{#1}{/!mml:plus}=\plusone
+ +\xmlfirst{#1}{/!mml:plus}
+ \else
+ \MMLdoL
+ \xmlconcat{#1}{/!mml:plus}{+}
+ \MMLdoR
+ \fi
+ }
+\stopxmlsetups
+
+\startxmlsetups mml:plus:reset
+ \mmlpluscounter\zerocount
+\stopxmlsetups
+
+\startxmlsetups mml:plus:body
+ \advance\mmlpluscounter\plusone
+ \ifnum\mmlpluscounter>\plusone
+ \xmldoifelse{#1}{/mml:minus} {
+ \ifnum\xmlcount{#1}{/!mml:minus}>\plusone
+ +
+ \fi
+ } {
+ \doifelse {\xmlatt{#1}{type}} {rational} {
+ % fraction
+ } {
+ +
+ }
+ }
+ \fi
+ \xmldirect{#1}
+\stopxmlsetups
+
+\newcount\mmlminuscounter
+
+\startsetups mml:minus
+ \doifelse \MMLsignreduction \v!yes {
+ } {
+ }
+ \ifnum\xmlcount{#1}{/!mml:minus}=\plusone
+ -\xmlfirst{#1}{/!mml:minus}
+ \else
+ \MMLdoL
+ \xmlsetup{#1}{mml:minus:reset}
+ \xmlcommand{#1}{/!mml:minus}{mml:minus:body}
+ \MMLdoR
+ \fi
+\stopsetups
+
+\startxmlsetups mml:minus:reset
+ \mmlminuscounter\zerocount
+\stopxmlsetups
+
+\startxmlsetups mml:minus:body
+ % we can slso use concat here
+ \advance\mmlminuscounter\plusone
+ \ifnum\mmlminuscounter>\plusone
+ -
+ \fi
+ \xmldirect{#1}
+\stopxmlsetups
+
+% power
+
+\setupMMLappearance[power][\c!reduction=\v!yes]
+
+\let\MMLpowerelement\empty
+
+\startxmlsetups mml:power
+ \xmldoifelse {#1} {/mml:apply} {
+ \doifelse \MMLpowerreduction \v!yes {
+ \xmldoifelse {#1} {/(\MMLcfunctionlist)} {
+ \gdef\MMLpowerelement{\mmlthird{#1}}% postpone, no xdef
+ \MMLcreset\mmlsecond{#1}
+ } {
+ \left(\MMLcreset\mmlsecond{#1}\right)^{\MMLcreset\mmlthird{#1}}
+ }
+ } {
+ \left(\MMLcreset\mmlsecond{#1}\right)^{\MMLcreset\mmlthird{#1}}
+ }
+ } {
+ \mmlsecond{#1}^{\MMLcreset\mmlthird{#1}}
+ }
+\stopxmlsetups
+
+% rem
+
+\startxmlsetups mml:rem
+ \xmlconcat{#1}{/!mml:rem}{\mathopnolimits{mod}}
+\stopxmlsetups
+
+\setupMMLappearance [times] [\c!symbol=\v!no,\c!auto=\v!yes] % new, auto catches cn cn cn
+
+\startxmlsetups mml:times
+ \setMMLcreset{\MMLcfunctionlist\string|\MMLcconstructlist}%
+ \doifelse\MMLtimesauto\v!no {
+ \let\MMLtimes@@symbol\MMLtimessymbol
+ } {
+ \xmldoifelse {#1} {/mml:cn[name(1) == 'mml:cn']} {% name(1) is next one
+ \doifinsetelse\MMLtimessymbol{\v!yes,\v!no} {
+ \let\MMLtimes@@symbol\v!yes
+ } {
+ \let\MMLtimes@@symbol\MMLtimessymbol
+ }
+ } {
+ \let\MMLtimes@@symbol\MMLtimessymbol
+ }
+ }
+ \doifelse\MMLtimes@@symbol\v!yes {
+ \xmlconcat{#1}{/!mml:times}{\times}
+ } {
+ \doifelse\MMLtimes@@symbol{dot} {
+ \xmlconcat{#1}{/!mml:times}{\cdot}
+ } {
+ \doifelse\MMLtimes@@symbol{times} {
+ \xmlconcat{#1}{/!mml:times}{\times}
+ } {
+ \xmlall{#1}{/!mml:times}
+ }
+ }
+ }
+\stopxmlsetups
+
+\setupMMLappearance[root][\c!symbol=\v!yes]
+
+\startxmlsetups mml:root
+ \xmldoifelse {#1} {/mml:degree} {
+ \root
+ \doifnot\MMLrootsymbol\v!no{\MMLcreset\xmltext{#1}{/mml:degree}}
+ \of
+ } {
+ \sqrt
+ }
+ {\MMLcreset\xmlall{#1}{/!(mml:degree\string|mml:root)}}
+\stopxmlsetups
+
+% gcd
+
+\startxmlsetups mml:gcd
+ \begingroup
+ \gcd\left(\MMLcreset\xmlconcat{#1}{/!mml:gcd}{\MMLseparator,}\right)
+ \endgroup
+\stopxmlsetups
+
+% and or xor implies, not
+
+\startxmlsetups mml:and \xmlconcat{#1}{/!mml:and} {\wedge} \stopxmlsetups
+\startxmlsetups mml:or \xmlconcat{#1}{/!mml:or} {\vee} \stopxmlsetups
+\startxmlsetups mml:xor \xmlconcat{#1}{/!mml:xor} {\mathopnolimits{xor}} \stopxmlsetups
+\startxmlsetups mml:implies \xmlconcat{#1}{/!mml:implies}{\Rightarrow} \stopxmlsetups
+\startxmlsetups mml:not \neg \xmlall {#1}{/!mml:not} \stopxmlsetups
+
+% forall exists
+
+%D We need to shift left below rotated A.
+
+\startxmlsetups mml:forall
+ \forall \negthinspace \xmlsetup{#1}{mml:forallexists}
+\stopxmlsetups
+
+\startxmlsetups mml:exists
+ \exists \xmlsetup{#1}{mml:forallexists}
+\stopxmlsetups
+
+\def\mmlforallexistslist{mml:bvar\string|mml:forall\string|mml:exists\string|mml:condition}
+
+\startxmlsetups mml:forallexists
+ _{\xmlconcat{#1}{/mml:bvar}{\MMLseparator,}}
+ \xmldoifelse {#1} {/mml:condition} {
+ \thickspace
+ \begingroup
+ \xmlfirst{#1}{/mml:condition}
+ \endgroup
+ \ifcase\xmlcount{#1}{/!(\mmlforallexistslist)}\relax
+ % nothing
+ \or
+ % == snelle volgende
+ \left\vert
+ \MMLcreset \medspace \xmlconcat{#1}{/!(\mmlforallexistslist)}{}
+ \right.
+ \else
+ % special case
+ \left\vert
+ \matrix {
+ \xmlconcat{#1}{/!(\mmlforallexistslist)}{\hfill\crcr}
+ }
+ \right.
+ \fi
+ } {
+ :\xmlfirst{#1}{/!(\mmlforallexistslist)}
+ }
+\stopxmlsetups
+
+\startxmlsetups mml:abs
+ \left\vert \MMLcreset\xmlall{#1}{/!mml:abs} \right\vert
+\stopxmlsetups
+
+\startxmlsetups mml:conjugate % watch extra {}
+ {\overline{\MMLcreset\xmlall{#1}{/!mml:conjugate}}}
+\stopxmlsetups
+
+\startxmlsetups mml:arg
+ \mathopnolimits{arg} \left( \MMLcreset\xmlall{#1}{/!mml:arg} \right)
+\stopxmlsetups
+
+\startxmlsetups mml:real
+ \Re \left( \MMLcreset \xmlall{#1}{/!mml:real} \right)
+\stopxmlsetups
+
+\startxmlsetups mml:imaginary
+ \Im \ left( \MMLcreset \xmlall{#1}{/!mml:imaginary} \right)
+\stopxmlsetups
+
+\startxmlsetups mml:lcm
+ \mathopnolimits{lcm} \left( \xmlconcat{#1}{/!mml:lcm}{\MMLseparator,} \right)
+\stopxmlsetups
+
+\startxmlsetups mml:floor
+ \lfloor \xmlall{#1}{/!mml:floor} \rfloor
+\stopxmlsetups
+
+\startxmlsetups mml:ceiling
+ \lceiling \xmlall{#1}{/!mml:ceiling} \rceiling
+\stopxmlsetups
+
+% relations
+
+% apply attr or eq
+
+\setupMMLappearance[relation][\c!align=\v!no]
+
+\mapXMLvalue {mml:relation} {mml:eq} {=}
+\mapXMLvalue {mml:relation} {mml:neq} {\neq}
+\mapXMLvalue {mml:relation} {mml:gt} {>}
+\mapXMLvalue {mml:relation} {mml:lt} {<}
+\mapXMLvalue {mml:relation} {mml:geq} {\geq}
+\mapXMLvalue {mml:relation} {mml:leq} {\leq}
+\mapXMLvalue {mml:relation} {mml:equivalent} {\equiv}
+\mapXMLvalue {mml:relation} {mml:approx} {\approx}
+\mapXMLvalue {mml:relation} {mml:factorof} {\mid}
+
+\startxmlsetups mml:eq \xmlsetup{#1}{mml:relation} \stopxmlsetups
+\startxmlsetups mml:neq \xmlsetup{#1}{mml:relation} \stopxmlsetups
+\startxmlsetups mml:gt \xmlsetup{#1}{mml:relation} \stopxmlsetups
+\startxmlsetups mml:lt \xmlsetup{#1}{mml:relation} \stopxmlsetups
+\startxmlsetups mml:geq \xmlsetup{#1}{mml:relation} \stopxmlsetups
+\startxmlsetups mml:leq \xmlsetup{#1}{mml:relation} \stopxmlsetups
+\startxmlsetups mml:equivalent \xmlsetup{#1}{mml:relation} \stopxmlsetups
+\startxmlsetups mml:approx \xmlsetup{#1}{mml:relation} \stopxmlsetups
+\startxmlsetups mml:factorof \xmlsetup{#1}{mml:relation} \stopxmlsetups
+
+\startxmlsetups mml:relation
+ \edef\mmlapplyaction{\xmlfilter{#1}{/*/name()}}
+ \MMLcreset \xmlsetup{#1}{mml:relation:\xmlattdef{#1}{align}{\MMLrelationalign}}
+\stopxmlsetups
+
+\startxmlsetups mml:relation:default
+ \xmlconcatrange{#1}{/*}{2}{}{\XMLval{mml:relation}{\mmlapplyaction}{?}}
+\stopxmlsetups
+\startxmlsetups mml:relation:last
+ \eqalign {
+ \xmlconcatrange{#1}{/*}{2}{-2}{&\XMLval{mml:relation}{\mmlapplyaction}{?}\crcr}
+ \mmlprelast{#1}&\XMLval{mml:relation}{\mmlapplyaction}{?}{}\mmllast{#1}
+ }
+\stopxmlsetups
+\startxmlsetups mml:relation:first
+ \eqalign {
+ \mmlsecond{#1}\XMLval{mml:relation}{\mmlapplyaction}{?}{}
+ &\xmlconcatrange{#1}{/*}{3}{}{\crcr\XMLval{mml:relation}{\mmlapplyaction}{?}{}&}
+ }
+\stopxmlsetups
+\startxmlsetups mml:relation:left
+ \eqalign {
+ \xmlconcatrange{#1}{/*}{2}{}{&\XMLval{mml:relation}{\mmlapplyaction}{?}\crcr}
+ }
+\stopxmlsetups
+\startxmlsetups mml:relation:right
+ \eqalign {
+ &\xmlconcatrange{#1}{/*}{2}{}{\crcr\XMLval{mml:relation}{\mmlapplyaction}{?}{}&}
+ }
+\stopxmlsetups
+\startxmlsetups mml:relation:no
+ \xmlsetup{#1}{mml:relation:default}
+\stopxmlsetups
+\startxmlsetups mml:relation:yes
+ \xmlsetup{#1}{mml:relation:left}
+\stopxmlsetups
+
+% personal goody:
+
+\edef\MMLcmainresetlist{\MMLcmainresetlist\string|becomes}
+
+\mapXMLvalue {mml:relation} {mml:becomes} {:=}
+
+\startxmlsetups mml:becomes \xmlsetup{#1}{mml:relation} \stopxmlsetups
+
+% calculus and vector calculus
+
+\startxmlsetups mml:domainofapplication
+ \xmlall{#1}{/!mml:domainofapplication}
+\stopxmlsetups
+
+\setupMMLappearance[int][\c!location=\v!top]
+
+\def\doMMLlimits#1{\doifelsevalue{MML#1\c!location}\v!top\limits\nolimits}
+
+\startxmlsetups mml:int
+ \MMLcreset
+ \xmldoifelse {#1} {/mml:domainofapplication} {
+ \int \doMMLlimits{int}_{\xmlfirst{#1}{/mml:domainofapplication}}\relax
+ } {
+ \xmldoifelse {#1} {/mml:condition} {
+ \int \doMMLlimits{int}_{\xmlfirst{#1}{/mml:condition}}\relax
+ } {
+ \xmldoifelse {#1} {/mml:lowlimit} {
+ \int \doMMLlimits{int}_{\xmlfirst{#1}{/mml:lowlimit}}^{\xmlfirst{#1}{/mml:uplimit}}
+ } {
+ % funny, why do we have lowlimit/uplimit then
+ \xmldoifelse {#1} {/mml:apply/mml:interval} {
+ \int \doMMLlimits{int}_{\xmlindex{#1}{/mml:apply}{2}}^{\xmlindex{#1}{/mml:apply}{3}}
+ } {
+ \int
+ }
+ }
+ }
+ }
+ \MMLcreset
+ \xmldoifelse {#1} {/mml:apply} {
+ \doifelsemmlfunction {#1} { % todo test
+ \xmlfirst{#1}{/mml:apply}
+ } {
+ % if there are too many () now, we need to be more clever
+ \left( \xmlfirst{#1}{/mml:apply} \right)
+ }
+ } {
+ \xmlfirst{#1}{/mml:ci}
+ }
+ \xmldoifelse {#1} {/mml:bvar} {
+ \thinspace {\mr d} \xmlfirst{#1}{/mml:bvar}
+ } {
+ % nothing
+ }
+\stopxmlsetups
+
+\setupMMLappearance[diff][\c!location=\v!top,\c!alternative=\v!a]
+
+% \setupMMLappearance[diff][alternative=b]
+%
+% \startXMLdata
+% <math><apply><apply><diff/><bvar><ci>x</ci></bvar><ci>f</ci></apply><ci>a</ci></apply></math>
+% <math><apply><apply><diff/><bvar><ci>x</ci></bvar><degree>2</degree><ci>f</ci></apply><ci>a</ci></apply></math>
+% \stopXMLdata
+
+% d^y/dx^2
+%
+% \startXMLdata
+% <math><apply><diff/>
+% <bvar><ci>x</ci><cn type="integer">2</cn></bvar>
+% <lambda><bvar><ci>x</ci></bvar><ci>y</ci></lambda>
+% </apply></math>
+% \stopXMLdata
+
+\startxmlsetups mml:diff
+ \MMLcreset
+ \doifelse \MMLdiffalternative \v!a {
+ \xmldoifelse {#1} {/mml:lambda} {
+ % a special case (mathadore/openmath)
+ \frac {
+ d^{\xmlfirst{#1}{/mml:bvar}\xmlfirst{#1}{/mml:cn}}{\xmlfirst{#1}{/mml:lambda}\xmlfirst{#1}{/mml:ci}}
+ } {
+ d{\xmlfirst{#1}{/mml:bvar}\xmlfirst{#1}{/mml:ci}}^{\xmlfirst{#1}{/mml:bvar}\xmlfirst{#1}{/mml:cn}}
+ }
+ } {
+ \xmldoifelse {#1} {/mml:bvar} {
+ \frac {
+ {\mr d}{
+ \xmldoifelse {#1} {/mml:degree} {
+ ^{\xmlconcat{#1}{/mml:degree}\empty}
+ } {
+ \xmldoif {#1} {/mml:bvar/mml:degree} {
+ ^{\xmlconcat{#1}{/mml:bvar/mml:degree}+}
+ }
+ }
+ }
+ \doif \MMLdifflocation \v!top {
+ \xmldoifelse {#1} {/mml:ci} {
+ \xmlfirst{#1}{/mml:ci}
+ } {
+ \MMLcreset
+ \xmlfirst{#1}{/mml:apply}
+ }
+ }
+ } {
+ {\mr d}
+ \xmlfirst{#1}{/mml:bvar/!mml:degree}
+ \xmldoif {#1} {/mml:bvar/mml:degree} {
+ ^{\xmlfirst{#1}{/mml:bvar/mml:degree}}
+ }
+ }
+ \doifnot \MMLdifflocation \v!top {
+ \left(\MMLcreset\xmlfirst{#1}{/(mml:apply\string|mml:ci)}\right)
+ }
+ } {
+ \xmlconcatrange{#1}{/*}{2}{}^\prime
+ }
+ }
+ } {
+ \MMLcreset
+ \xmlfirst{#1}{/(mml:apply\string|mml:ci)}
+ % there can be problems with nested diff's: ^^{} error
+ % so we add an empty group here
+ {}^
+ {
+ \xmldoifelse {#1} {/mml:degree} {
+ \edef\mmldegree{\xmlfirst{#1}{/mml:degree/mml:cn}}
+ \ifx\mmldegree\empty
+ % what to do here
+ \else
+ \dorecurse\mmldegree\prime
+ \fi
+ } {
+ \prime
+ }
+ }
+ }
+\stopxmlsetups
+
+\startxmlsetups mml:partialdiff
+ \xmldoifelse {#1} {/mml:list} {
+ {\mr D}_{
+ \begingroup
+ \setfalse\mmllistdelimiters
+ \xmlall{#1}{/mml:list}
+ \endgroup
+ }
+ \xmlfirst{#1}{/(mml:apply\string|mml:reln\string|mml:ci\string|mml:cn)}
+ } {
+ \xmldoifelse {#1} {/mml:bvar} {
+ \frac {
+ {\mr d}^{
+ \xmldoifelse {#1} {/mml:degree} {
+ \xmlconcat{#1}{/mml:degree}\empty
+ } {
+ \xmlconcat{#1}{/mml:bvar/mml:degree}+
+ }
+ }
+ \MMLcreset
+ \xmlfirst{#1}{/(mml:apply\string|mml:reln\string|mml:ci\string|mml:cn)}
+ } {
+ \xmlfirst{#1}{/mml:bvar}
+ {\mr d}\xmlfirst{#1}{/(mml:apply\string|mml:reln\string|mml:ci\string|mml:cn)}
+ \xmldoif {#1} {/mml:degree} {
+ ^{\xmlfirst{#1}{/mml:degree}}
+ }
+ }
+ } {
+ \xmlfirst{#1}{/(mml:apply\string|mml:reln\string|mml:ci\string|mml:cn)}
+ }
+ }
+\stopxmlsetups
+
+% option: to be discussed with taco/aditya: all math functions \mathentity
+%
+% \defineXMLentity [div] {\mathematics{\triangledown\times}}
+% \defineXMLentity [curl] {\mathematics{\triangledown .}}
+% \defineXMLentity [grad] {\mathematics{\triangledown }}
+
+\startxmlsetups mml:divergence \mathopnolimits{div} \xmlall{#1}{/!mml:divergence} \stopxmlsetups
+\startxmlsetups mml:grad \mathopnolimits{grad} \xmlall{#1}{/!mml:grad} \stopxmlsetups
+\startxmlsetups mml:curl \mathopnolimits{curl} \xmlall{#1}{/!mml:curl} \stopxmlsetups
+\startxmlsetups mml:laplacian \nabla^2 \xmlall{#1}{/!mml:laplacian} \stopxmlsetups
+\startxmlsetups mml:ident \mathopnolimits{identity} \xmlall{#1}{/!mml:ident} \stopxmlsetups
+
+\setupMMLappearance[domain] [symbol=]
+\setupMMLappearance[codomain][symbol=]
+
+\startxmlsetups mml:domain
+ \doifelsenothing \MMLdomainsymbol {
+ \mathopnolimits{domain}\MMLcreset\xmlall{#1}{/!mml:domain}
+ } {
+ \MMLdomainsymbol_{\xmlall{#1}{/!mml:domain}}
+ }
+\stopxmlsetups
+
+\startxmlsetups mml:codomain
+ \doifelsenothing \MMLcodomainsymbol {
+ \mathopnolimits{codomain}\MMLcreset\xmlall{#1}{/!mml:codomain}
+ } {
+ \MMLcodomainsymbol_{\xmlall{#1}{/!mml:codomain}}
+ }
+\stopxmlsetups
+
+% theory of sets
+
+\startxmlsetups mml:set
+ \left\{
+ \xmldoifelse {#1} {/mml:condition} {
+ \xmlfirst{#1}{/mml:bvar}\,\middle\vert\,\xmlfirst{#1}{/mml:condition}
+ } {
+ \xmlconcat{#1}{/!mml:set}{\MMLseparator,}
+ }
+ \right\}
+ \relax % needed
+\stopxmlsetups
+
+\settrue\mmllistdelimiters
+
+\startxmlsetups mml:list
+ \begingroup
+ \ifconditional\mmllistdelimiters\left [\fi
+ \begingroup
+ \settrue\mmllistdelimiters
+ \xmlconcat{#1}{/!mml:list}{\MMLseparator,}
+ \endgroup
+ \ifconditional\mmllistdelimiters\right]\fi
+ \endgroup
+\stopxmlsetups
+
+\startxmlsetups mml:union \mmlsecond{#1} \cup \mmlthird{#1} \stopxmlsetups
+\startxmlsetups mml:intersect \mmlsecond{#1} \cap \mmlthird{#1} \stopxmlsetups
+\startxmlsetups mml:in \mmlsecond{#1} \in \mmlthird{#1} \stopxmlsetups
+\startxmlsetups mml:notin \mmlsecond{#1} {\not\in} \mmlthird{#1} \stopxmlsetups
+\startxmlsetups mml:subset \mmlsecond{#1} \subset \mmlthird{#1} \stopxmlsetups
+\startxmlsetups mml:prsubset \mmlsecond{#1} \subseteq \mmlthird{#1} \stopxmlsetups
+\startxmlsetups mml:notsubset \mmlsecond{#1} {\not\subset} \mmlthird{#1} \stopxmlsetups
+\startxmlsetups mml:notprsubset \mmlsecond{#1} {\not\subseteq} \mmlthird{#1} \stopxmlsetups
+\startxmlsetups mml:setdiff \mmlsecond{#1} \setminus \mmlthird{#1} \stopxmlsetups
+
+\startxmlsetups mml:card
+ \left\vert \xmlall{#1}{/!mml:card} \right\vert
+\stopxmlsetups
+
+\startxmlsetups mml:cartesianproduct
+ \xmlconcat{#1}{/!mml:cartesianproduct}{\times}
+\stopxmlsetups
+
+% sequences and series
+
+\setupMMLappearance[sum] [\c!location=\v!top]
+\setupMMLappearance[product][\c!location=\v!top]
+
+\mapXMLvalue {mml:sumprod} {sum} {\sum}
+\mapXMLvalue {mml:sumprod} {product} {\prod}
+
+\startxmlsetups mml:sum \edef\mmlsumprodname{sum} \xmlsetup{#1}{mml:sumprod} \stopxmlsetups
+\startxmlsetups mml:product \edef\mmlsumprodname{product} \xmlsetup{#1}{mml:sumprod} \stopxmlsetups
+
+\def\mmlstackedsubscripts#1%
+ {\vbox
+ {\baselineskip\zeropoint % hack, taco vragen
+ \halign{$\scriptstyle\hss##\hss$\cr#1\crcr}}}
+
+% unfinished
+
+\startxmlsetups mml:sumprod
+ \begingroup
+ \xmldoifelse {#1} {/(mml:condition\string|mml:bvar\string|mml:lowlimit)} {
+ \def\mmlsumprodlower{
+ _{
+ \xmldoifelse {#1} {/mml:condition} {
+ \mmlstackedsubscripts{\xmlconcat{#1}{/mml:condition}{\crcr}}
+ } {
+ \xmldoif {#1} {/mml:bvar} {
+ \xmlfirst{#1}{/mml:bvar}
+ \xmldoif{#1}{/mml:lowlimit}{=}
+ }
+ \xmlfirst{#1}{/mml:lowlimit}
+ }
+ }
+ }
+ } {
+ \let\mmlsumprodlower\empty
+ }
+ \xmldoifelse {#1} {/mml:uplimit} {
+ \def\mmlsumprodupper{^{\xmlfirst{#1}{/mml:uplimit}}}
+ } {
+ \let\mmlsumprodupper\empty
+ }
+ \xmldoif {#1} {/mml:interval} { % open math converter gives this
+ \edef\mmlintervalfrom{\xmlindex{#1}{/mml:interval}{1}}
+ \edef\mmlintervalto {\xmlindex{#1}{/mml:interval}{2}}
+ \ifx \mmlintervalfrom \empty \else
+ \def\mmlsumprodlower{_{\xmldoif{#1}{/mml:bvar}{\xmlfirst{#1}{/mml:bvar}{=}}\mmlintervalfrom}}
+ \fi
+ \ifx \mmlintervalto \empty \else
+ \def\mmlsumprodupper{^{\mmlintervalto}}
+ \fi
+ }
+ \MMLcreset
+ \XMLval{mml:sumprod}{\mmlsumprodname}{}\doMMLlimits\mmlsumprodname\mmlsumprodupper\mmlsumprodlower
+ \MMLcreset
+ \xmldoifelse {#1} {/mml:lambda/mml:apply} {
+ \xmlfirst{#1}{/mml:lambda/mml:apply}% a bit of open math conversion mess
+ } {
+ \xmlfirst{#1}{/(mml:apply\string|mml:lambda\string|mml:ci)}%
+ }
+ \endgroup
+\stopxmlsetups
+
+\setupMMLappearance[limit][\c!location=\v!top]
+
+\startxmlsetups mml:limit
+ \MMLcreset \lim
+ \doMMLlimits {limit}_{
+ \MMLcreset
+ \xmldoifelse {#1} {/mml:condition} {
+ \xmlfirst{#1}{/mml:condition}
+ } {
+ \xmldoif {#1} {/mml:bvar} {
+ \xmlfirst{#1}{/mml:bvar}\rightarrow
+ }
+ \xmlfirst{#1}{/mml:lowlimit}
+ }
+ }
+ \begingroup
+ % a bit of open math conversion mess, lambda needed for openmath, ok?
+ \MMLcreset
+ \xmlfirst{#1}{/mml:lambda/mml:apply}
+ \xmlfirst{#1}{/(mml:apply\string|mml:lambda)}
+ \endgroup
+\stopxmlsetups
+
+% consider a faster index
+
+\startxmlsetups mml:tendsto
+ \MMLcreset \mmlsecond{#1}
+ \XMLval {mml:tendsto:type} {\xmlattdef{#1}{type}{default}} {\rightarrow}
+ \MMLcreset \mmlthird{#1}
+\stopxmlsetups
+
+\mapXMLvalue {mml:tendsto:type} {above} {\downarrow}
+\mapXMLvalue {mml:tendsto:type} {below} {\uparrow}
+\mapXMLvalue {mml:tendsto:type} {default} {\rightarrow}
+
+% elementary classical functions
+
+\setupMMLappearance[log][\c!location=\v!right]
+
+\startxmlsetups mml:exp
+% {\mr e}^{\xmlfirst{#1}{/mml:apply\string|mml:reln\string|mml:ci\string|mml:cn}}
+ {\mr e}^{\xmlfirst{#1}{/!mml:exp}}
+\stopxmlsetups
+
+\startxmlsetups mml:log
+ \xmldoifelse {#1} {/mml:logbase} {
+ \doifelse \MMLloglocation \v!left {
+ \mathop {
+ {}^{\xmlfirst{#1}{/mml:logbase}}\negthinspace\mathopnolimits{log}
+ }
+ } {
+ \mathopnolimits{log}_{\xmlfirst{#1}{/mml:logbase}}
+ }
+ } {
+ \mathopnolimits{log}
+ }
+ \MMLcreset
+ \xmlsetup{#1}{mml:function}
+\stopxmlsetups
+
+\startxmlsetups mml:ln
+ \mathopnolimits{ln}
+ \xmlsetup{#1}{mml:function}
+\stopxmlsetups
+
+% statistics
+
+\startxmlsetups mml:mean \overline {\mmlsecond{#1}} \stopxmlsetups
+\startxmlsetups mml:sdev \sigma \left(\MMLcreset\mmlsecond{#1}\right) \stopxmlsetups
+\startxmlsetups mml:variance \sigma \left(\MMLcreset\mmlsecond{#1}\right)^2 \stopxmlsetups
+\startxmlsetups mml:median \mathopnolimits{median}\left(\MMLcreset\mmlsecond{#1}\right) \stopxmlsetups
+\startxmlsetups mml:mode \mathopnolimits{mode} \left(\MMLcreset\mmlsecond{#1}\right) \stopxmlsetups
+
+% moments
+
+\startxmlsetups mml:moment
+ \left\langle
+ \xmlfirst{#1}{/(mml:apply\string|mml:reln\string|mml:ci\string|mml:cn)}^{\xmlfirst{#1}{/mml:degree}}
+ \right\rangle
+ \xmldoif {#1} {mml:momentabout} {
+ _{\xmlfirst{#1}{mml:momentabout}}
+ }
+\stopxmlsetups
+
+% linear algebra
+
+\setupMMLappearance [vector] [\c!direction=\v!horizontal,\c!separator={,}]
+
+\startxmlsetups mml:vector
+ \begingroup
+ \ifnum\xmlcount{#1}{/*}>\plusone
+ \doifelse\MMLvectordirection\v!horizontal {
+ \left(\xmlconcat{#1}{/*}{\MMLseparator\MMLvectorseparator}\right)
+ } {
+ \MMLcreset\left(\matrix{\xmlconcat{#1}{/*}{\MMLseparator\MMLvectorseparator}}\right)
+ }
+ \else
+ \overrightarrow{\charhtstrut\mmlfirst{#1}}
+ \fi
+ \endgroup
+\stopxmlsetups
+
+\settrue\MMCdelmatrix % ( ) when true
+
+\startxmlsetups mml:matrix
+ \begingroup
+ \MMLcreset
+ \ifconditional\MMCdelmatrix
+ \left(\matrix{\xmlcommand{#1}{/mml:matrixrow}{mml:matrixrow:do}}\right)
+ \else
+ \settrue\MMCdelmatrix
+ \matrix{\xmlcommand{#1}{/mml:matrixrow}{mml:matrixrow:do}}
+ \fi
+ \endgroup
+\stopxmlsetups
+
+\startxmlsetups mml:matrixrow
+ \begingroup
+ \MMLcreset
+ \left(\xmlsetup{#1}{mml:matrixrow:do}\right)
+ \endgroup
+\stopxmlsetups
+
+\startxmlsetups mml:matrixrow:do
+ \xmlconcat{#1}{/*}{&}\crcr
+\stopxmlsetups
+
+\startxmlsetups mml:determinant
+ \begingroup
+ \setfalse\MMCdelmatrix
+ \left|\mmlsecond{#1}\right|
+ \endgroup
+\stopxmlsetups
+
+\startxmlsetups mml:transpose
+ \mmlsecond{#1}^{\mathopnolimits{T}}
+\stopxmlsetups
+
+\startxmlsetups mml:selector
+ \MMLmathinner{\mmlsecond{#1}_{\MMLcreset\xmlconcatrange{#1}{/*}{3}{}{\MMLseparator,}}}
+\stopxmlsetups
+
+\startxmlsetups mml:vectorproduct \mmlsecond{#1}\times \mmlthird{#1} \stopxmlsetups
+\startxmlsetups mml:scalarproduct \mmlsecond{#1}\cdot \mmlthird{#1} \stopxmlsetups
+\startxmlsetups mml:outerproduct \mmlsecond{#1}\otimes\mmlthird{#1} \stopxmlsetups
+
+% semantic mapping elements
+
+\startxmlsetups mml:semantics
+ \xmlfirst{#1}{/(mml:annotation\string|apply)}
+\stopxmlsetups
+
+\usemodule[m][calcmath]
+
+\startxmlsetups mml:annotation
+ \xmldoifelse {#1} {[oneof(@encoding,'TeX','tex','TEX','ConTeXt','context','CONTEXT','ctx')]} {
+ \begingroup
+ \setcatcodetable\ctxcatcodes
+ \xmlflush{#1}
+ \endgroup
+ } {
+ \xmldoifelse {#1} {[oneof(@encoding,'calcmath','cm')]} {
+ \calcmath{\xmlflush{#1}}
+ } {
+ % unsupported
+ }
+ }
+\stopxmlsetups
+
+\startxmlsetups mml:annotation-xml
+ % maybe diagnostics
+\stopxmlsetups
+
+% misc
+
+\startxmlsetups mml:integers \integers \stopxmlsetups
+\startxmlsetups mml:reals \reals \stopxmlsetups
+\startxmlsetups mml:rationals \rationals \stopxmlsetups
+\startxmlsetups mml:naturalnumbers \naturalnumbers \stopxmlsetups
+\startxmlsetups mml:complexes \complexes \stopxmlsetups
+\startxmlsetups mml:primes \primes \stopxmlsetups
+\startxmlsetups mml:exponentiale \mathopnolimits{e} \stopxmlsetups
+\startxmlsetups mml:imaginaryi \mathopnolimits{i} \stopxmlsetups
+\startxmlsetups mml:notanumber \mathopnolimits{NaN} \stopxmlsetups
+\startxmlsetups mml:true \mathopnolimits{true} \stopxmlsetups
+\startxmlsetups mml:false \mathopnolimits{false} \stopxmlsetups
+\startxmlsetups mml:emptyset \mathopnolimits{\O} \stopxmlsetups
+\startxmlsetups mml:pi \pi \stopxmlsetups
+\startxmlsetups mml:eulergamma \gamma \stopxmlsetups
+\startxmlsetups mml:infinity \infty \stopxmlsetups
+
+% gonio functions
+
+\setupMMLappearance[function][\c!reduction=\v!yes]
+
+% todo: \mfunction which adapts itself when registered as command
+
+\startxmlsetups mml:sin \mathopnolimits {sin}\xmlsetup{#1}{mml:function} \stopxmlsetups
+\startxmlsetups mml:sinh \mathopnolimits{sinh}\xmlsetup{#1}{mml:function} \stopxmlsetups
+\startxmlsetups mml:cos \mathopnolimits {cos}\xmlsetup{#1}{mml:function} \stopxmlsetups
+\startxmlsetups mml:cosh \mathopnolimits{cosh}\xmlsetup{#1}{mml:function} \stopxmlsetups
+\startxmlsetups mml:tan \mathopnolimits {tan}\xmlsetup{#1}{mml:function} \stopxmlsetups
+\startxmlsetups mml:tanh \mathopnolimits{tanh}\xmlsetup{#1}{mml:function} \stopxmlsetups
+\startxmlsetups mml:cot \mathopnolimits {cot}\xmlsetup{#1}{mml:function} \stopxmlsetups
+\startxmlsetups mml:coth \mathopnolimits{coth}\xmlsetup{#1}{mml:function} \stopxmlsetups
+\startxmlsetups mml:csc \mathopnolimits {csc}\xmlsetup{#1}{mml:function} \stopxmlsetups
+\startxmlsetups mml:csch \mathopnolimits{csch}\xmlsetup{#1}{mml:function} \stopxmlsetups
+\startxmlsetups mml:sec \mathopnolimits {sec}\xmlsetup{#1}{mml:function} \stopxmlsetups
+\startxmlsetups mml:sech \mathopnolimits{sech}\xmlsetup{#1}{mml:function} \stopxmlsetups
+
+\startxmlsetups mml:function
+ \ifconditional\xmlinversefunction^{-1}\fi\setfalse\xmlinversefunction
+ \xmlsetup{#1}{mml:function:argument}
+\stopxmlsetups
+
+\startxmlsetups mml:function:argument
+ \doifelse \MMLfunctionreduction \v!yes {
+ \xmldoifelse {#1} {/mml:apply} {
+ \xmldoifelse {#1} {/mml:apply/(\MMLcfunctionlist\string|mml:divide)}
+ \donefalse
+ \donetrue
+ } {
+ \donefalse
+ }
+ } {
+ \donetrue
+ }
+ % beware, we still flush from 2 up
+ \ifdone
+ \left(
+ \MMLcreset
+ \xmlall{#1}{/[position()>1]}% \xmlconcatrange{#1}{/*}{2}{}\empty
+ \right)
+ \else
+ \MMLcreset
+ \xmlall{#1}{/[position()>1]}
+ \fi
+\stopxmlsetups
+
+% PRESENTATION MATHML
+%
+% there are some rough edges that need to be sorted out
+
+% helpers
+
+\mapXMLvalue {mml} {normal} {\tf}
+\mapXMLvalue {mml} {double-struck} {\bf}
+\mapXMLvalue {mml} {italic} {\it}
+\mapXMLvalue {mml} {fraktur} {\bf}
+\mapXMLvalue {mml} {script} {\tf}
+\mapXMLvalue {mml} {bold} {\bf}
+\mapXMLvalue {mml} {bold-italic} {\bi}
+\mapXMLvalue {mml} {bold-fraktur} {\bf}
+\mapXMLvalue {mml} {bold-script} {\bf}
+\mapXMLvalue {mml} {sans-serif} {\ss}
+\mapXMLvalue {mml} {bold-sans-serif} {\ss\bf}
+\mapXMLvalue {mml} {sans-serif-italic} {\ss\it}
+\mapXMLvalue {mml} {sans-serif-bold-italic} {\ss\bi}
+\mapXMLvalue {mml} {monospace} {\tt}
+
+\starttexdefinition setmmlmathstyle #1
+ \XMLval {mml} {\xmlatt{#1}{mathvariant}} \empty
+\stoptexdefinition
+
+\starttexdefinition applymmlmathcolor #1#2
+ \edef\mmlmathcolor{\xmlatt{#1}{mathcolor}}
+ \ifx \mmlmathcolor \empty
+ #2
+ \else
+ \color[\mmlmathcolor]{#2}
+ \fi
+\stoptexdefinition
+
+% todo: textbackgrounds
+
+\starttexdefinition applymmlmathbackground #1#2
+ \edef\mmlmathbackground{\xmlatt{#1}{mathbackground}}
+ \ifx \mmlmathbackground \empty
+ #2
+ \else
+ \backgroundline[\mmlmathbackground]{#2}
+ \fi
+\stoptexdefinition
+
+\starttexdefinition applymmlsometext #1#2
+ \applymmlmathbackground {#1} {
+ \applymmlmathcolor {#1} {
+ \setmmlmathstyle {#1}
+ \ignorespaces#2\removeunwantedspaces
+ }
+ }
+\stoptexdefinition
+
+% probably bugged:
+
+\starttexdefinition doMMLfiller #1
+ \pushmacro\doMMLfiller
+ \let\doMMLfiller\gobbleoneargument
+ \gdef\dodoMMLfiller{% where used
+ \disablefiller
+ \mathematics{#1}
+ }
+ \hbox {
+ \def\normalorfiller##1##2{
+ \gdef\dodoMMLfiller{\enablefiller#1}%
+ \let\normalorfiller\gobbletwoarguments
+ }
+ \mathematics{#1}
+ }
+ \popmacro\doMMLfiller
+\stoptexdefinition
+
+% setups
+
+\startxmlsetups mml:mi % todo: mathvariant mathsize mathcolor mathbackground
+ \ctxlua{lxml.mml.mi("#1","*")}
+\stopxmlsetups
+
+\startxmlsetups mml:mn % todo: mathvariant mathsize mathcolor mathbackground
+ \begingroup
+ \mr \ctxlua{lxml.mml.mn("#1","*")}% no \hbox, would be ok for . , but spoils rest
+ \endgroup
+\stopxmlsetups
+
+\startxmlsetups mml:mo
+ \ctxlua{lxml.mml.mo("#1","*")}
+\stopxmlsetups
+
+\startxmlsetups mml:mfenced % {} around separator is needed for spacing
+ \def\MMLleft {\left }% weird
+ \def\MMLright{\right}
+ \ctxlua{lxml.mml.mfenced("#1","/*")}
+\stopxmlsetups
+
+\startxmlsetups mml:menclose % notation=.....
+ \edef\mmlmenclosenotation{\xmlattdef{#1}{notation}{longdiv}}
+ \doifelse \mmlmenclosenotation {longdiv} {
+ \overline{\left)\xmlflush{#1}\right.}
+ } {
+ \doifelse \mmlmenclosenotation {actuarial} {
+ \overline{\left.\xmlflush{#1}\right|}
+ } {
+ \doifelse \mmlmenclosenotation {radical} {
+ \sqrt{\xmlflush{#1}}
+ } {
+ \xmlflush{#1}
+ }
+ }
+ }
+\stopxmlsetups
+
+\mapXMLvalue {mml:mfrac:linethickness} {thin} {.2pt}
+\mapXMLvalue {mml:mfrac:linethickness} {medium} {.4pt}
+\mapXMLvalue {mml:mfrac:linethickness} {thick} {.8pt}
+
+\startxmlsetups mml:mfrac % dodo: handle linethickness in lua + unit
+ \begingroup
+ \edef\mmlfraclinethickness{\xmlatt{#1}{linethickness}}
+ \ifx\mmlfraclinethickness\empty
+ \doifelse{\xmlatt{#1}{bevelled}}{true} {
+ \xmlindex{#1}{/*}{1}
+ \mathpunct{\kern-.2ex\left.\middle/\right.\kern-.25ex}
+ \mmlsecond{#1}
+ } {
+ \frac{\mmlfirst{#1}}{\mmlsecond{#1}}
+ }
+ \else
+ \doifXMLvalelse {mml:mfrac:linethickness} \mmlfraclinethickness {
+ \scratchdimen\XMLval{mml:mfrac:linethickness}\mmlfraclinethickness{.4pt}
+ } {
+ \setdimensionwithunit\scratchdimen\mmlfraclinethickness{pt}
+ }
+ {
+ {\mmlfirst{#1}}
+ \above\scratchdimen
+ {\mmlsecond{#1}}
+ }
+ \fi
+ \endgroup
+\stopxmlsetups
+
+\startxmlsetups mml:ms
+ \hbox {
+ \tf % else encoding problems
+ \edef\mmllquote{\xmlatt{#1}{lquote}}
+ \edef\mmlrquote{\xmlatt{#1}{rquote}}
+ \ifx\mmllquote\empty\symbol[leftquotation]\else\mmllquote\fi
+ \applymmlsometext{#1}{\xmlflush{#1}}
+ \ifx\mmlrquote\empty\symbol[rightquotation]\else\mmlrquote\fi
+ }
+\stopxmlsetups
+
+\startxmlsetups mml:mstyle
+ \begingroup
+ \setmmlmathstyle{#1}
+ \xmlflush{#1}
+ \endgroup
+\stopxmlsetups
+
+\startxmlsetups mml:mtext
+ \hbox {
+ \tf % else encoding problems, we can make mr an option
+ \applymmlsometext{#1}{\xmlflush{#1}}
+ }
+\stopxmlsetups
+
+\startxmlsetups mml:merror
+ \hbox{$\displaystyle\xmlflush{#1}$}
+\stopxmlsetups
+
+\startxmlsetups mml:mphantom
+ \phantom{\ignorespaces{}\xmlflush{#1}\unskip} % watch spacing {} hack
+\stopxmlsetups
+
+\startxmlsetups mml:mpadded
+ \xmlflush{#1}
+\stopxmlsetups
+
+% mrow
+
+% \startxmlsetups mml:mrow
+% \begingroup
+% \ifcase\xmlcount{#1}{/mml:mo}\relax
+% \xmlflush{#1}
+% \else % no \let
+% \def\MMLleft {\left }
+% \def\MMLright{\right}
+% \enabledelimiter
+% \checkdelimiters{\xmlall{#1}{/mml:mo}}
+% \fakeleftdelimiter
+% \xmlflush{#1}
+% \fakerightdelimiter
+% \disabledelimiter
+% \fi
+% \endgroup
+% \stopxmlsetups
+
+% option: no fenced
+
+\startxmlsetups mml:mrow
+ \begingroup
+ \ifnum\xmlcount{#1}{/mml:mo}=\plustwo
+ \xmldoifelse {#1} {/mml:mo[position()==1 or position()==\xmlcount{#1}{/*}]} {% we need a {}
+ \def\MMLleft {\left }
+ \def\MMLright{\right}
+ \enabledelimiter
+ \checkdelimiters{\xmlall{#1}{/mml:mo}}
+ \fakeleftdelimiter
+ \xmlflush{#1}
+ \fakerightdelimiter
+ \disabledelimiter
+ } {
+ \xmlflush{#1}
+ }
+ \else
+ \xmlflush{#1}
+ \fi
+ \endgroup
+\stopxmlsetups
+
+\startxmlsetups mml:msqrt
+ \sqrt{\xmlflush{#1}}
+\stopxmlsetups
+
+\startxmlsetups mml:mroot
+ \root{\mmlsecond{#1}}\of{\mmlfirst{#1}}
+\stopxmlsetups
+
+\setupMMLappearance[scripts][\c!alternative=\v!a] % {} rond base
+
+\startxmlsetups mml:msub
+ \doifelse\MMLscriptsalternative\v!a {
+ {\mmlfirst{#1}}_{\mmlsecond{#1}}
+ } {
+ \mmlfirst{#1} _{\mmlsecond{#1}}
+ }
+\stopxmlsetups
+
+\startxmlsetups mml:msup
+ \doifelse\MMLscriptsalternative\v!a {
+ {\mmlfirst{#1}}^{\mmlsecond{#1}}
+ } {
+ \mmlfirst{#1} ^{\mmlsecond{#1}}
+ }
+\stopxmlsetups
+
+\startxmlsetups mml:msubsup
+ \doifelse\MMLscriptsalternative\v!a {
+ {\mmlfirst{#1}}_{\mmlsecond{#1}}^{\mmlthird{#1}}
+ } {
+ \mmlfirst{#1} _{\mmlsecond{#1}}^{\mmlthird{#1}}
+ }
+\stopxmlsetups
+
+\startxmlsetups mml:mover
+ \mathop {
+ \edef\mmlovertoken{\xmlraw{#1}{/mml:mo[position()==2]}}
+ \doifelse{\utfmathclass\mmlovertoken}{accent} {
+ \utfmathcommand\mmlovertoken{\xmlindex{#1}{/*}{1}}
+ } {
+ \vbox {
+ \m@th\ialign {
+ \hss##\hss\crcr
+ \noalign{\kern3\p@}%
+ \disabledelimiter\doMMLfiller{
+ \xmlindex{#1}{/*}{2}
+ }\crcr
+ \noalign{\kern3\p@\nointerlineskip}%
+ \disabledelimiter\doMMLfiller{
+ \xmlindex{#1}{/*}{1}
+ }\crcr
+ }
+ }
+ }
+ }
+ \limits
+\stopxmlsetups
+
+\startxmlsetups mml:munder
+ \mathop {
+ \vtop {
+ \m@th\ialign{
+ \hss##\hss\crcr
+ \disabledelimiter\doMMLfiller{\xmlindex{#1}{/*}{1}}\crcr
+ \noalign{\kern3\p@\nointerlineskip}%
+ \disabledelimiter\doMMLfiller{\xmlindex{#1}{/*}{2}}\crcr
+ \noalign{\kern3\p@}
+ }
+ }
+ }
+ \limits
+\stopxmlsetups
+
+\startxmlsetups mml:munderover
+ \edef\mmlunderovertoken{\xmlraw{#1}{/mml:mo[position()==1]}}
+ \utfmathcommanddefault\mmlunderovertoken{xmlindex}{{#1}{/*}{1}}
+ _{\disablefiller\disabledelimiter\xmlindex{#1}{/*}{2}}
+ ^{\disablefiller\disabledelimiter\xmlindex{#1}{/*}{3}}
+\stopxmlsetups
+
+% tables (mml:mtable, mml:mtr, mml:mlabledtr, mml:mtd)
+
+\startxmlsetups mml:mtable % some more attributes need to be supported
+ \vcenter{\ctxlua{lxml.mml.mtable("#1")}}
+\stopxmlsetups
+
+\startxmlsetups mml:mspace % complete
+ \begingroup
+ \!!widtha \xmlattdef{#1}{width} \!!zeropoint % must be string
+ \!!heighta\xmlattdef{#1}{height}\!!zeropoint
+ \!!deptha \xmlattdef{#1}{depth} \!!zeropoint
+ \ifdim\!!heighta=\zeropoint
+ \ifdim\!!deptha=\zeropoint\else
+ \hbox{\vrule\!!depth\!!deptha\!!height\zeropoint\!!width\zeropoint}%
+ \fi
+ \else
+ \hbox{\vrule\!!depth\zeropoint\!!height\!!heighta\!!width\zeropoint}%
+ \fi
+ \ifdim\!!widtha=\zeropoint\else
+ \hskip\!!widtha
+ \fi
+ \endgroup
+\stopxmlsetups
+
+\startxmlsetups mml:mglyph % probably never ok
+ \begingroup
+ \edef\mmlglyphfontfamily{\xmlatt {#1}{fontfamily}}
+ \edef\mmlglyphalt {\xmlattdef{#1}{alt}{unknown}}
+ \edef\mmlglyphindex {\xmlatt {#1}{index}}
+ \ifx \mmlglyphfontfamily \empty
+ \hbox{\tttf[no fontfamily specified for \mmlglyphalt]}
+ \else\ifx\mmlglyphindex\empty
+ \hbox{\tttf[no index specified for \mmlglyphalt]}
+ \else
+ \getglyph\mmlglyphfontfamily\mmlglyphindex
+ \fi\fi
+ \endgroup
+\stopxmlsetups
+
+\startxmlsetups mml:maligngroup \stopxmlsetups % will be done when needed
+\startxmlsetups mml:malignmark \stopxmlsetups % will be done when needed
+
+\startxmlsetups mml:none \stopxmlsetups
+\startxmlsetups mml:mprescripts \stopxmlsetups
+
+\startxmlsetups mml:mmultiscripts
+ \ctxlua{lxml.mml.mmultiscripts("#1")}
+\stopxmlsetups
+
+\stopmodule
+
+\protect \endinput
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% TODO:
+
+\startmoduletestsection
+
+\def\xflushXMLstackwith#1#2#3#4% num bgroup egroup whatever
+ {\dostepwiserecurse{#1}\XMLstacklevel\plusone
+ {#2\relax
+ \ifnum\recurselevel>#1\relax#4\fi
+ \getXMLstackdata\recurselevel
+ #3}}
+
+\def\xflushXMLstackfrom#1#2#3%
+ {\dostepwiserecurse{#1}\XMLstacklevel\plusone
+ {#2\getXMLstackdata\recurselevel#3}}
+
+% <apply><divide/>
+% <apply><minus/>
+% <apply><minus/><ci>b</ci></apply>
+% <apply><minus/><ci>b</ci></apply>
+% <apply><root/> <ci>a</ci></apply>
+% </apply>
+% <apply><minus/>
+% <apply><minus/><ci>b</ci><ci>b</ci></apply>
+% <apply><minus/><ci>b</ci></apply>
+% <apply><root/> <ci>a</ci></apply>
+% </apply>
+% </apply>
+
+\startxmlsetups mml:minus
+ \doif \MMLsignreduction \v!yes {
+ \setMMLcreset{fn,\MMLcfunctionlist}
+ }
+ \ifcase\XMLstacklevel
+ \or
+ % self
+ \or
+ -\getXMLstackdata\plustwo
+ \else
+ \dostepwiserecurse \plustwo \XMLstacklevel \plusone {
+ \begingroup
+ \doifelse {\getXMLstackname\recurselevel} {apply} {
+ \ifnum\recurselevel=\plustwo
+ \begingroup
+ \dodoifelseMMCfunctioninapply \recurselevel {minus} {
+ \ifnum\XMLstacklevel>\plustwo
+ \endgroup
+ \else
+ \endgroup
+ \MMLcreset
+ \fi
+ } {
+ \endgroup
+ }
+ \else
+ \doifelseMMCfunctioninapply \recurselevel {\MMLcfunctionlist,\MMLcconstructlist} {
+ \MMLcreset
+ } {
+ }
+ \fi
+ } {
+ }
+ \getXMLstackdata\recurselevel
+ \ifnum\recurselevel<\XMLstacklevel\relax
+ -
+ \fi
+ \endgroup
+ }
+ \fi
+\stopxmlsetups
+
+\stopmoduletestsection
diff --git a/Master/texmf-dist/tex/context/base/x-mml.mkiv b/Master/texmf-dist/tex/context/base/x-mml.mkiv
new file mode 100644
index 00000000000..d2dd91a0900
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/x-mml.mkiv
@@ -0,0 +1,49 @@
+%D \module
+%D [ file=x-mml,
+%D version=2007.09.04,
+%D title=\CONTEXT\ XML Modules,
+%D subtitle=MathML Renderer,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D This is a first version of the \MKIV\ \MATHML\ processor using
+%D the \type {lxml} helper functions. The implementation is yet
+%D incomplete but I needed a quick hack for a project where I wanted
+%D to use the new \MKIV\ \XML\ handler. It's also a nice testcase.
+
+\startxmlsetups xml:mml:process
+ \xmlgrab {\xmldocument} {mml:*} {*}
+\stopxmlsetups
+
+\xmlregistersetup{xml:mml:process}
+
+\xmlregisterns{mml}{mathml}
+
+\def\setupMMLappearance[#1]{\dodoubleargument\getparameters[@@MML#1]}
+
+\def\MMLhack{\let\MMLpar\par \let\par\relax \everyvbox{\let\par\MMLpar}}
+
+\startxmlsetups mml:math
+ \automathematics {\MMLhack\xmlflush{#1}}
+\stopxmlsetups
+
+\startxmlsetups mml:imath
+ \inlinemathematics{\MMLhack\xmlflush{#1}}
+\stopxmlsetups
+
+\startxmlsetups mml:dmath
+ \displaymathematics{\MMLhack\xmlflush{#1}}
+\stopxmlsetups
+
+% -- we need a new entity mapper (also covering unicode)
+
+\loadmarkfile{x-mmb} % common code
+\loadmarkfile{x-mmp} % presentation mathml
+\loadmarkfile{x-mmc} % content mathml
+
+\endinput
diff --git a/Master/texmf-dist/tex/context/base/x-mmp.mkiv b/Master/texmf-dist/tex/context/base/x-mmp.mkiv
new file mode 100644
index 00000000000..dff7ade58d8
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/x-mmp.mkiv
@@ -0,0 +1,497 @@
+%D \module
+%D [ file=x-mmp,
+%D version=2007.09.04,
+%D title=\CONTEXT\ XML Modules,
+%D subtitle=Presentation MathML Renderer,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\startluacode
+ do
+
+ lxml.mml = lxml.mml or { }
+
+ local texsprint = tex.sprint
+
+ -- an alternative is to remap to private codes, where we can have
+ -- different properties .. to be done
+
+ local n_replacements = {
+ -- [" "] = utf.char(0x2002), -- "&textspace;" -> tricky, no &; in mkiv
+ ["."] = "{.}",
+ [","] = "{,}",
+ [" "] = "",
+ }
+ local o_replacements = {
+ ["{"] = "\\mmlleftdelimiter\\lbrace",
+ ["}"] = "\\mmlrightdelimiter\\rbrace",
+ ["("] = "\\mmlleftdelimiter(",
+ [")"] = "\\mmlrightdelimiter)",
+ ["["] = "\\mmlleftdelimiter[",
+ ["]"] = "\\mmlrightdelimiter]",
+ ["<"] = "\\mmlleftdelimiter<",
+ [">"] = "\\mmlrightdelimiter>",
+ ["#"] = "\\mmlchar{35}",
+ ["$"] = "\\mmlchar{36}",
+ ["%"] = "\\mmlchar{37}",
+ ["&"] = "\\mmlchar{38}",
+ ["^"] = "\\mmlchar{94}{}", -- strange, sometimes luatex math see the char instead of \char
+ ["_"] = "\\mmlchar{95}{}", -- so we need the {}
+ ["~"] = "\\mmlchar{126}",
+ [" "] = "",
+ }
+ local i_replacements = {
+ ["sin"] = "\\mathopnolimits{sin}",
+ ["cos"] = "\\mathopnolimits{cos}",
+ ["abs"] = "\\mathopnolimits{abs}",
+ ["arg"] = "\\mathopnolimits{arg}",
+ ["codomain"] = "\\mathopnolimits{codomain}",
+ ["curl"] = "\\mathopnolimits{curl}",
+ ["determinant"] = "\\mathopnolimits{det}",
+ ["divergence"] = "\\mathopnolimits{div}",
+ ["domain"] = "\\mathopnolimits{domain}",
+ ["gcd"] = "\\mathopnolimits{gcd}",
+ ["grad"] = "\\mathopnolimits{grad}",
+ ["identity"] = "\\mathopnolimits{id}",
+ ["image"] = "\\mathopnolimits{image}",
+ ["lcm"] = "\\mathopnolimits{lcm}",
+ ["max"] = "\\mathopnolimits{max}",
+ ["median"] = "\\mathopnolimits{median}",
+ ["min"] = "\\mathopnolimits{min}",
+ ["mode"] = "\\mathopnolimits{mode}",
+ ["mod"] = "\\mathopnolimits{mod}",
+ ["polar"] = "\\mathopnolimits{Polar}",
+ ["exp"] = "\\mathopnolimits{exp}",
+ ["ln"] = "\\mathopnolimits{ln}",
+ ["log"] = "\\mathopnolimits{log}",
+ ["sin"] = "\\mathopnolimits{sin}",
+ ["arcsin"] = "\\mathopnolimits{arcsin}",
+ ["sinh"] = "\\mathopnolimits{sinh}",
+ ["arcsinh"] = "\\mathopnolimits{arcsinh}",
+ ["cos"] = "\\mathopnolimits{cos}",
+ ["arccos"] = "\\mathopnolimits{arccos}",
+ ["cosh"] = "\\mathopnolimits{cosh}",
+ ["arccosh"] = "\\mathopnolimits{arccosh}",
+ ["tan"] = "\\mathopnolimits{tan}",
+ ["arctan"] = "\\mathopnolimits{arctan}",
+ ["tanh"] = "\\mathopnolimits{tanh}",
+ ["arctanh"] = "\\mathopnolimits{arctanh}",
+ ["cot"] = "\\mathopnolimits{cot}",
+ ["arccot"] = "\\mathopnolimits{arccot}",
+ ["coth"] = "\\mathopnolimits{coth}",
+ ["arccoth"] = "\\mathopnolimits{arccoth}",
+ ["csc"] = "\\mathopnolimits{csc}",
+ ["arccsc"] = "\\mathopnolimits{arccsc}",
+ ["csch"] = "\\mathopnolimits{csch}",
+ ["arccsch"] = "\\mathopnolimits{arccsch}",
+ ["sec"] = "\\mathopnolimits{sec}",
+ ["arcsec"] = "\\mathopnolimits{arcsec}",
+ ["sech"] = "\\mathopnolimits{sech}",
+ ["arcsech"] = "\\mathopnolimits{arcsech}",
+ [" "] = "",
+
+ ["false"] = "{\\mr false}",
+ ["notanumber"] = "{\\mr NaN}",
+ ["otherwise"] = "{\\mr otherwise}",
+ ["true"] = "{\\mr true}",
+ ["declare"] = "{\\mr declare}",
+ ["as"] = "{\\mr as}",
+ }
+
+ function lxml.mml.prepare_number(id,pattern)
+ local str = xml.content(lxml.id(id),pattern) or ""
+ texsprint(tex.ctxcatcodes,(str:gsub(".",n_replacements)))
+ end
+ function lxml.mml.prepare_operator(id,pattern)
+ local str = xml.content(lxml.id(id),pattern) or ""
+ tex.sprint(tex.ctxcatcodes,(str:gsub(".",o_replacements)))
+ end
+ function lxml.mml.prepare_identifier(id,pattern)
+ local str = xml.content(lxml.id(id),pattern) or ""
+ str = str:gsub("^%s*(.*)%s*$","%1")
+ local rep = i_replacements[str]
+ if rep then
+ tex.sprint(tex.ctxcatcodes,rep)
+ else
+ tex.sprint(tex.ctxcatcodes,(str:gsub(".",i_replacements)))
+ end
+ end
+
+ function lxml.mml.connect(id,pattern,separators) -- multiple separators
+ local n = xml.count(id,pattern)
+ if n == 0 then
+ -- skip
+ elseif n == 1 then
+ lxml.all(id,pattern)
+ else
+ local t = { }
+ for s in utf.gmatch(separators,"([^%s])") do
+ t[#t+1] = s
+ end
+ for i=1,n do
+ if i > 1 then
+ texsprint(tex.ctxcatcodes,"{")
+ texsprint(t[i] or t[#t] or "")
+ texsprint(tex.ctxcatcodes,"}")
+ end
+ lxml.idx(id,pattern,i) -- kind of slow, some day ...
+ end
+ end
+ end
+
+ local function flush(e,tag,toggle)
+ -- texsprint(tex.ctxcatcodes,(toggle and "^{") or "_{")
+ if toggle then
+ texsprint(tex.ctxcatcodes,"^{")
+ else
+ texsprint(tex.ctxcatcodes,"_{")
+ end
+ if tag == "none" then
+ texsprint(tex.ctxcatcodes,"{}")
+ else
+ xml.sprint(e.dt)
+ end
+ if not toggle then
+ texsprint(tex.ctxcatcodes,"}")
+ else
+ texsprint(tex.ctxcatcodes,"}{}")
+ end
+ return not toggle
+ end
+
+ function lxml.mml.multiscripts(id)
+ local done, toggle = false, false
+ id = lxml.id(id)
+ -- for i=1,#id.dt do local e = id.dt[i] if type(e) == table then ...
+ for r, d, k in xml.elements(id,"/*") do
+ local e = d[k]
+ local tag = e.tg
+ if tag == "mprescripts" then
+ texsprint(tex.ctxcatcodes,"{}")
+ done = true
+ elseif done then
+ toggle = flush(e,tag,toggle)
+ end
+ end
+ local done, toggle = false, false
+ for r, d, k in xml.elements(id,"/*") do
+ local e = d[k]
+ local tag = e.tg
+ if tag == "mprescripts" then
+ break
+ elseif done then
+ toggle = flush(e,tag,toggle)
+ else
+ xml.sprint(e.dt)
+ done = true
+ end
+ end
+ end
+
+ end
+\stopluacode
+
+\unprotect
+
+% helpers
+
+% \let\myspecialnormalvert\myspecialstretchvert
+% \setupMMLappearance[scripts][\c!alternative=\v!a] {} rond base
+
+\mapXMLvalue{mmp}{normal} {\tf} \mapXMLvalue{mmp}{double-stuck} {\bf}
+\mapXMLvalue{mmp}{bolditalic} {\bi} \mapXMLvalue{mmp}{bold-italic} {\bi}
+\mapXMLvalue{mmp}{boldslanted}{\bs} \mapXMLvalue{mmp}{bold-slanted} {\bs}
+\mapXMLvalue{mmp}{boldnormal} {\bf} \mapXMLvalue{mmp}{bold} {\bf}
+\mapXMLvalue{mmp}{slanted} {\sl} \mapXMLvalue{mmp}{normalslanted}{\sl}
+\mapXMLvalue{mmp}{italic} {\it} \mapXMLvalue{mmp}{normalitalic} {\it}
+\mapXMLvalue{mmp}{fraktur} {\bf} \mapXMLvalue{mmp}{bold-fraktur} {\bf}
+\mapXMLvalue{mmp}{script} {\tf} \mapXMLvalue{mmp}{bold-script} {\bf}
+
+\def\setMMLptextstyle#1%
+ {\XMLval{mmp}{\xmlatt{#1}{fontweight}\xmlatt{#1}{fontstyle}}{}}
+
+\def\setMMLpmathstyle#1%
+ {\XMLval{mmp}{\xmlatt{#1}{mathvariant}}{}}
+
+\def\doMMPpcolor#1%
+ {\doifelsenothing{\xmlatt{#1}{color}} \firstofoneargument {\color[\xmlatt{#1}{color}]}}
+
+\def\doMMPpbackground#1%
+ {\doifelsenothing{\xmlatt{#1}{background}}
+ {\firstofoneargument}
+ {\inframed
+ [\c!frame=\v!off,
+ \c!background=\v!color,
+ \c!backgroundcolor=\xmlatt{#1}{background}]}}
+
+\def\doMMPpsometext#1#2%
+ {\doMMPpbackground{#1}{\doMMPpcolor{#1}{\setMMLptextstyle{#1}\ignorespaces#2\removeunwantedspaces}}}
+
+\def\doMMLfiller#1% bugged
+ {\pushmacro\doMMLfiller
+ \let\doMMLfiller\gobbleoneargument
+ \gdef\dodoMMLfiller{\disablefiller\mathematics{#1}}%
+ \hbox
+ {\def\normalorfiller##1##2%
+ {\gdef\dodoMMLfiller{\enablefiller#1}%
+ \let\normalorfiller\gobbletwoarguments}%
+ $#1$}%
+ \popmacro\doMMLfiller}
+
+% setups
+
+% \defineXMLentity[_] {{\_{}}}
+% \defineXMLentity[^] {{\^{}}}
+
+% \defineXMLentity[_] {\string_}
+% \defineXMLentity[^] {\normalorfiller\hat\widehat}
+
+\startsetups mml:semantics % todo: width=ex/ex/pt
+ \xmlflush{#1}
+\stopsetups
+
+% \startxmlsetups mml:mi % todo: mathvariant mathsize mathcolor mathbackground
+% \edef\MMPidentifier{\xmlstripped{#1}{*}}
+% \doifXMLentityelse{\detokenize\expandafter{\MMPidentifier}} {
+% \getXMLentity\MMPidentifier
+% } {
+% \MMPidentifier
+% }
+% \stopxmlsetups
+
+\startxmlsetups mml:mi % todo: mathvariant mathsize mathcolor mathbackground
+ \ctxlua{lxml.mml.prepare_identifier("#1","*")}
+\stopxmlsetups
+
+\startxmlsetups mml:mn % todo: mathvariant mathsize mathcolor mathbackground
+ \begingroup
+ \mr \ctxlua{lxml.mml.prepare_number("#1","*")}%
+ \endgroup
+\stopxmlsetups
+
+% hbox will make . and , behave ok, see rep patterns above as alternative
+%
+% \startxmlsetups mml:mn % todo: mathvariant mathsize mathcolor mathbackground
+% \mathop{\hbox{\mr \ctxlua{lxml.mml.prepare_number("#1","*")}}}% we need . and , properly spaced
+% \stopxmlsetups
+
+% \startxmlsetups mml:mo
+% \edef\MMPoperator{\ctxlua{lxml.mml.prepare_operator("#1","*")}}
+% \doifXMLentityelse{\detokenize\expandafter{\MMPoperator}} {
+% \getXMLentity\MMPoperator
+% } {
+% \MMPoperator
+% }
+% \stopxmlsetups
+
+% also ok:
+
+\startxmlsetups mml:mo
+ \ctxlua{lxml.mml.prepare_operator("#1","*")}
+\stopxmlsetups
+
+\startxmlsetups mml:mrow
+ \begingroup
+ \ifcase\xmlcount{#1}{/mml:mo}\relax
+ \xmlflush{#1}
+ \else % no \let
+ \def\MMLleft {\left }
+ \def\MMLright{\right}
+ \enabledelimiter
+ \checkdelimiters{\xmlall{#1}{/mml:mo}}
+ \fakeleftdelimiter
+ \xmlflush{#1}
+ \fakerightdelimiter
+ \disabledelimiter
+ \fi
+ \endgroup
+\stopxmlsetups
+
+\startxmlsetups mml:mstyle
+ \begingroup
+ \setMMLpmathstyle{#1}
+ \xmlflush{#1}
+ \endgroup
+\stopxmlsetups
+
+\startxmlsetups mml:ms
+ \xmlattdef{#1}{lquot}{"}
+ \doMMPpsometext{#1}{\xmlflush{#1}}
+ \xmlattdef{#1}{rquot}{"}
+\stopxmlsetups
+
+\startxmlsetups mml:mtext
+ \hbox \bgroup \tf % else encoding problems, we can make mr an option
+ \doMMPpsometext{#1}{\xmlflush{#1}}
+ \egroup
+\stopxmlsetups
+
+\startxmlsetups mml:merror
+ \hbox{$\displaystyle\xmlflush{#1}$}
+\stopxmlsetups
+
+\startxmlsetups mml:mphantom
+ \phantom{{}\xmlflush{#1}{}}
+\stopxmlsetups
+
+\startxmlsetups mml:mpadded
+ \xmlflush{#1}
+\stopxmlsetups
+
+\startxmlsetups mml:mfenced % {} around separator is needed for spacing
+ \edef\MMPopen {\xmlatt{#1}{open}}
+ \edef\MMPclose {\xmlatt{#1}{close}}
+ \edef\MMPseparators{\xmlatt{#1}{separators}}
+ \ifx\MMPseparators\empty \def\MMPseparators{,}\fi
+ \doifelsenothing \MMPopen {
+ \left.
+ } {
+ \left\MMPopen
+ }
+ \ctxlua{lxml.mml.connect("#1","/*","\MMPseparators")}%
+ \doifelsenothing \MMPclose {
+ \right.
+ } {
+ \right\MMPclose
+ }
+\stopxmlsetups
+
+\startxmlsetups mml:menclose % notation=.....
+ % we will implement this when we need it
+ \xmlflush{#1}
+\stopxmlsetups
+
+\startxmlsetups mml:msqrt
+ \sqrt{\xmlflush{#1}}
+\stopxmlsetups
+
+\startxmlsetups mml:mroot
+ \root{\xmlindex{#1}{*}{1}}\of{\xmlindex{#1}{*}{2}}
+\stopxmlsetups
+
+\startsetups mml:mfrac % dodo: handle linethickness in lua + unit
+ \begingroup
+ \edef\MMPlinethickness{\xmlatt{#1}{linethickness}}
+ \ifx\MMPlinethickness\empty
+ \doifelse{\xmlatt{#1}{bevelled}}{true} {
+ \xmlindex{#1}{/*}{1}
+ \mathpunct{\kern-.2ex\left.\middle/\right.\kern-.25ex}
+ \xmlindex{#1}{/*}{2}
+ } {
+ \frac{\xmlindex{#1}{/*}{1}}{\xmlindex{#1}{/*}{2}}
+ }
+ \else
+ \processaction
+ [\MMPlinethickness]
+ [ thin=>\scratchdimen=.2pt,
+ medium=>\scratchdimen=.4pt,
+ thick=>\scratchdimen=.8pt,
+ unknown=>\setdimensionwithunit\scratchdimen{\MMPlinethickness}{pt}]
+ {
+ {\xmlindex{#1}{/*}{1}}
+ \above\scratchdimen
+ {\xmlindex{#1}{/*}{2}}
+ }
+ \fi
+ \endgroup
+\stopsetups
+
+\startsetups mml:mspace % todo: width=ex/ex/pt
+ \hskip.5em\relax
+\stopsetups
+
+% {} around first component is essential!
+
+\startsetups mml:msub
+ {\xmlindex{#1}{/*}{1}}_{\xmlindex{#1}{/*}{2}}
+\stopsetups
+
+\startsetups mml:msup
+ {\xmlindex{#1}{/*}{1}}^{\xmlindex{#1}{/*}{2}}
+\stopsetups
+
+\startsetups mml:msubsup
+ {\xmlindex{#1}{/*}{1}}_{\xmlindex{#1}{/*}{2}}^{\xmlindex{#1}{/*}{3}}
+\stopsetups
+
+\startsetups mml:mover
+ \mathop {
+ \edef\mmlovertoken{\xmlraw{#1}{/mml:mo[position()==2]}}
+ \doifelse{\utfmathclass\mmlovertoken}{accent} {
+ \utfmathcommand\mmlovertoken{\xmlindex{#1}{/*}{1}}
+ } {
+ \vbox {
+ \m@th\ialign {
+ \hss##\hss\crcr
+ \noalign{\kern3\p@}%
+ \disabledelimiter\doMMLfiller{
+ \xmlindex{#1}{/*}{2}
+ }\crcr
+ \noalign{\kern3\p@\nointerlineskip}%
+ \disabledelimiter\doMMLfiller{
+ \xmlindex{#1}{/*}{1}
+ }\crcr
+ }
+ }
+ }
+ }
+ \limits
+\stopsetups
+
+\startsetups mml:munder
+ \mathop {
+ \vtop {
+ \m@th\ialign{
+ \hss##\hss\crcr
+ \disabledelimiter\doMMLfiller{\xmlindex{#1}{/*}{1}}\crcr
+ \noalign{\kern3\p@\nointerlineskip}%
+ \disabledelimiter\doMMLfiller{\xmlindex{#1}{/*}{2}}\crcr
+ \noalign{\kern3\p@}
+ }
+ }
+ }
+ \limits
+\stopsetups
+
+\startsetups mml:munderover
+ \edef\mmlunderovertoken{\xmlraw{#1}{/mml:mo[position()==1]}}
+% \doifelse{\utfmathclass\mmlunderovertoken}{limop} {
+% \utfmathcommand\mmlunderovertoken
+% } {
+% \xmlindex{#1}{/*}{1}
+% {
+ \utfmathcommanddefault\mmlunderovertoken{xmlindex}{{#1}{/*}{1}}
+ _{\disablefiller\disabledelimiter\xmlindex{#1}{/*}{2}}
+ ^{\disablefiller\disabledelimiter\xmlindex{#1}{/*}{3}}
+\stopsetups
+
+\startxmlsetups mml:mlabeledtr
+ \bTR \xmlall{#1}{/mml:mtd} \eTR
+\stopxmlsetups
+
+\startxmlsetups mml:mtr
+ \bTR \xmlall{#1}{/mml:mtd} \eTR
+\stopxmlsetups
+
+\startxmlsetups mml:mtd
+ \bTD$\MMLhack\xmlall{#1}{/*}\relax$\eTD
+\stopxmlsetups
+
+\startxmlsetups mml:mtable
+ \vcenter \bgroup
+ \bTABLE[\c!frame=\v!off]
+ \xmlall{#1}{/mml:mtr|mml:mlabeledtr}
+ \eTABLE
+ \egroup
+\stopxmlsetups
+
+\startxmlsetups mml:mmultiscripts
+ \ctxlua{lxml.mml.multiscripts("#1")}
+\stopxmlsetups
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/x-newcml.tex b/Master/texmf-dist/tex/context/base/x-newcml.tex
index b1928cce905..c5f99961597 100644
--- a/Master/texmf-dist/tex/context/base/x-newcml.tex
+++ b/Master/texmf-dist/tex/context/base/x-newcml.tex
@@ -171,7 +171,7 @@
\stopsetups
\startsetups cml:ion:stop
-\removeunwantedspaces
+ \removeunwantedspaces
\stopsavingXMLelements
\resetCMLcaption
\XMLfirstnamed{caption}
@@ -364,7 +364,7 @@
{\doCMLoxidation}
\def\doCMLoxidation#1%
- {\expanded{\dogetCMLtext{\noexpand\chemicaloxidation{\XMLop{cml}}{\XMLop{n}}{#1}}}%
+ {\expanded{\dogetCMLtext{\noexpand\chemicaloxidation{\XMLop{sign}}{\XMLop{n}}{#1}}}%
\ignorespaces}
% \defineXMLenvironment
diff --git a/Master/texmf-dist/tex/context/base/x-newmme.tex b/Master/texmf-dist/tex/context/base/x-newmme.tex
index 73e574bd587..5a77059632c 100644
--- a/Master/texmf-dist/tex/context/base/x-newmme.tex
+++ b/Master/texmf-dist/tex/context/base/x-newmme.tex
@@ -328,7 +328,6 @@
\ifx\MMLleft \undefined \let\MMLleft \firstofoneargument \fi
\ifx\MMLright\undefined \let\MMLright\firstofoneargument \fi
-
\defineXMLentity [lbrace] {\normalordelimiter{\{}{\MMLleft \{}}
\defineXMLentity [rbrace] {\normalordelimiter{\}}{\MMLright\}}}
\defineXMLentity [lbracket] {\normalordelimiter{[}{\MMLleft [}}
@@ -353,6 +352,7 @@
\defineXMLentity [{(}] {\getXMLentity{lparenthesis}}
\defineXMLentity [{)}] {\getXMLentity{rparenthesis}}
+
\defineXMLentity [times] {\mathematics{\times}}
\defineXMLentity [minus] {\mathematics{-}}
\defineXMLentity [plus] {\mathematics{+}}
@@ -367,26 +367,28 @@
\defineXMLentity [.] {{.}}
\defineXMLentity [+] {+}
\defineXMLentity [-] {-}
-\defineXMLentity [(] {(}
-\defineXMLentity [)] {)}
-\defineXMLentity [<] {\mathematics{<}}
-\defineXMLentity [>] {\mathematics{>}}
\defineXMLentity [|] {\myspecialnormalvert}
\defineXMLentity [/] {/}
\defineXMLentity [*] {\times}
\defineXMLentity [=] {=}
+% \defineXMLentity [(] {(}
+% \defineXMLentity [)] {)}
+% \defineXMLentity [<] {\mathematics{<}}
+% \defineXMLentity [>] {\mathematics{>}}
+
% \defineXMLentity [(] {\MMLleft (}
% \defineXMLentity [)] {\MMLright)}
% \defineXMLentity [{[}] {\MMLleft [}
% \defineXMLentity [{]}] {\MMLright]}
-\defineXMLentity [++] {++}
-\defineXMLentity [--] {--}
-\defineXMLentity [//] {//}
-\defineXMLentity [**] {\times\times}
-\defineXMLentity [==] {==}
+\defineXMLentity [++] {++}
+\defineXMLentity [--] {--}
+\defineXMLentity [//] {//}
+\defineXMLentity [**] {\times\times}
+\defineXMLentity [==] {==}
+\defineXMLentity [...] {\cdots}
\defineXMLentity [quot] {"}
diff --git a/Master/texmf-dist/tex/context/base/x-newmml.tex b/Master/texmf-dist/tex/context/base/x-newmml.tex
index 803190ee44d..f4847eeb94d 100644
--- a/Master/texmf-dist/tex/context/base/x-newmml.tex
+++ b/Master/texmf-dist/tex/context/base/x-newmml.tex
@@ -13,7 +13,14 @@
%D Remark: from now on this is a module and no longer an xtag
%D filter. In due time it will replace the older renderer (which
-%D we will keep around for sentimental reasons).
+%D we will keep around for sentimental reasons). This variant has
+%D no namespace support yet, but eventually we will use a \MKIV\
+%D version.
+
+\ifx\inlinemathematics\undefined
+ \def\inlinemathematics {\dontleavehmode\mathematics} % already in kernel
+ \long\def\inlinemath #1{\dontleavehmode\relax\ifmmode#1\else $#1$\fi}
+\fi
% \defineXMLentity[x000AF]{\normalorfiller{x}\hrulefill}
% CHECK FOR: \xmlrent
@@ -77,7 +84,7 @@
%D The second implementation expanded the whole math sequence
%D into an internal \TEX\ representation. This is a rather clean
%D and fast process. Filtering and testing takes place by
-%D redefining teh internal representation macros.
+%D redefining the internal representation macros.
%D
%D The third implementation may look a bit more messy in some
%D respects. This is because in \TEX\ it's not that trivial to
@@ -131,13 +138,6 @@
{\startsavingXMLelements}
{\stopsavingXMLelements}
-% already defined
-%
-% \defineXMLnestedenvironmentsave
-% [xmlstack]
-% {}
-% {\pushXMLnameonstack}
-
\stopXMLmapping
%D Auxiliary MathML macros: (to be generalized)
@@ -439,16 +439,17 @@
[csymbol]
[encoding=text,
definitionURL=]
- {}
+ {\doifsomething{\XMLop{definitionURL}}{\directsetup{mmc:csymbol:apply}}}
\startsetups mmc:csymbol:apply
\begingroup
\startsavingXMLelements
\rawXMLstacktext\plusone % still on stack, no check, just attr test
\stopsavingXMLelements
- % http://www.publisherswhodontcareaboutcosts.com/SomeName
- \doifsetupselse{mmc:csymbol:\XMLpar{csymbol}{definitionURL}{}} {
- \expanded{\endgroup\noexpand\directsetup{mmc:csymbol:\XMLpar{csymbol}{definitionURL}{}}}
+ % http://www.publishers.com/SomeName
+ \lowercasestring\XMLpar{csymbol}{definitionURL}{}\to\mmcSymbolURL
+ \doifsetupselse{mmc:csymbol:} {\mmcSymbolURL} {
+ \expanded{\endgroup\noexpand\directsetup{mmc:csymbol:\mmcSymbolURL}}
} {
% SomeName (fallback)
\splitfilename{\XMLpar{csymbol}{definitionURL}{}}
@@ -469,7 +470,7 @@
%D <dmath><apply><cn>1.23</cn></apply></dmath>
%D \stopXMLdata
%D
-%D \setupMMLappearance[cn] [alternative=b]
+%D \type{\setupMMLappearance[cn] [alternative=b]}
%D
%D \startXMLdata
%D <imath><apply><cn>1.23</cn></apply></imath>
@@ -540,7 +541,7 @@
\def\MMLccartesian#1%
{\def\MMLcsep{+}#1\getXMLentity{imaginaryi}}
-% float will be obsolete, an is replace by e-notation
+% float will be obsolete, and is replace by e-notation
\def\MMLcfloat#1%
{\doifelse\@@MMLfloatsymbol\v!no
@@ -784,6 +785,7 @@
\XMLfirstnamed{bvar}
\fi
\getXMLentity{mapsto}
+ \MMLcreset
\XMLfirstnamed{apply,reln,ci,cn}
}
\endgroup
@@ -803,6 +805,7 @@
\startsetups mmc:lambda:simple:stop
\stopsavingXMLelements
+ \MMLcreset % new
\XMLfirstnamed{apply}
\endgroup
\stopsetups
@@ -839,7 +842,13 @@
\setupMMLappearance[piece][\c!separator=]
-\def\MMLcPIECEseparator{\doif\@@MMLpieceseparator\v!yes,}
+\def\setMMLcPIECEseparator
+ {\processaction
+ [\@@MMLpieceseparator]
+ [ \v!yes=>\def\theMMLpieceseparator{,\@col@amp@},
+ \v!no=>\let\theMMLpieceseparator\@col@amp@,
+ \s!default=>\let\theMMLpieceseparator\@col@amp@,
+ \s!unknown=>\def\theMMLpieceseparator{\,\,\hbox{\@@MMLpieceseparator}\,\,}]}
\defineXMLargument[piecewise] {\cases}
@@ -855,12 +864,13 @@
\startsetups mmc:piece:start
\startsavingXMLelements
+ \setMMLcPIECEseparator
\stopsetups
\startsetups mmc:piece:stop
\stopsavingXMLelements
\edef\ascii{\getXMLstackdata\plusone}
- \@EA\XMLRtoks\@EA{\ascii\MMLcPIECEseparator\@col@amp@}
+ \@EA\XMLRtoks\@EA{\ascii\theMMLpieceseparator}
\edef\ascii{\getXMLstackdata\plustwo}
\@EA\appendtoks\@EA\mathematics\@EA{\ascii}\to\XMLRtoks
\the\XMLRtoks\crcr
@@ -878,19 +888,25 @@
\defineXMLcommand [factorial] {\getXMLstackdata\plustwo !}
-\defineXMLcommand [divide] {\directsetup{mmc:divide}}
+\defineXMLcommand [divide] [\MMLargumentprefix] [] {\directsetup{mmc:divide}} % brr not nested
-\setupMMLappearance [divide] [\c!level=\!!maxcard]
+\setupMMLappearance [divide] [\c!level=\!!maxcard,\c!alternative=\v!a]
\startsetups mmc:divide
- \increment\MMLcDIVIDElevel
- \ifnum\MMLcDIVIDElevel>\@@MMLdividelevel\space
- \getXMLstackdata\plustwo/\getXMLstackdata\plusthree
- \else
- \MMLcreset
- \frac{\MMLcreset\getXMLstackdata\plustwo}{\MMLcreset\getXMLstackdata\plusthree}%
- \fi
- \decrement\MMLcDIVIDElevel
+ \startusingMMLarguments
+ \increment\MMLcDIVIDElevel
+ \doifelse \@@MMLdividealternative\v!b {
+ \getXMLstackdata\plustwo/\getXMLstackdata\plusthree
+ } {
+ \ifnum\MMLcDIVIDElevel>\@@MMLdividelevel\space
+ \getXMLstackdata\plustwo/\getXMLstackdata\plusthree
+ \else
+ \MMLcreset
+ \frac{\MMLcreset\getXMLstackdata\plustwo}{\MMLcreset\getXMLstackdata\plusthree}%
+ \fi
+ }
+ \decrement\MMLcDIVIDElevel
+ \stopusingMMLarguments
\stopsetups
% min max
@@ -909,9 +925,10 @@
% minus plus
-\defineXMLcommand [minus] {\directsetup{mmc:minus}}
-\defineXMLcommand [plus] {\directsetup{mmc:plus}}
+\defineXMLcommand [minus] {\directsetup{mmc:minus}}
+\defineXMLcommand [plus] [\MMLargumentprefix] [] {\directsetup{mmc:plus}}
+\setupMMLappearance [plus] [\c!alternative=\v!a] % b = no sign -> 3 1/4
\setupMMLappearance [sign] [\c!reduction=\v!yes]
\startsetups mmc:minus
@@ -929,49 +946,60 @@
\stopsetups
\startsetups mmc:plus
- \doifelse \@@MMLsignreduction \v!yes {
- \setMMLcreset{fn,plus,minus,\MMLcfunctionlist,\MMLcconstructlist}% was plus/, minus/
- \doifelse{\getXMLstackname\plustwo} {apply} {
- % branch needed, else (a-b) + (c-d) goes wrong
- % reset check in case of (-x) + 37
- \begingroup
- \dodoifelseMMCfunctioninapply \plustwo {minus} {
- \ifnum\XMLstacklevel>\plustwo
- \endgroup
- \else
+ \startusingMMLarguments
+ \doifelse \@@MMLsignreduction \v!yes {
+ \setMMLcreset{fn,plus,minus,\MMLcfunctionlist,\MMLcconstructlist}% was plus/, minus/
+ \doifelse{\getXMLstackname\plustwo} {apply} {
+ % branch needed, else (a-b) + (c-d) goes wrong
+ % reset check in case of (-x) + 37
+ \begingroup
+ \dodoifelseMMCfunctioninapply \plustwo {minus} {
+ \ifnum\XMLstacklevel>\plustwo
+ \endgroup
+ \else
+ \endgroup
+ \MMLcreset
+ \fi
+ } {
\endgroup
- \MMLcreset
- \fi
+ }
+ \doifelse \@@MMLplusalternative \v!b {
+ \getXMLstackdata\plustwo \,
+ } {
+ \flushXMLstackwith\plustwo +
+ }
+
} {
- \endgroup
- }
- \flushXMLstackwith\plustwo +
- } {
- \flushXMLstackwith\plustwo {
- \doifelse {\getXMLstackname\recurselevel} {apply} {
- \begingroup
- \dodoifelseMMCfunctioninapply \recurselevel {minus} {
- \ifnum\XMLstacklevel>\plustwo +\fi
+ \flushXMLstackwith\plustwo {
+ \doifelse {\getXMLstackname\recurselevel} {apply} {
+ \begingroup
+ \dodoifelseMMCfunctioninapply \recurselevel {minus} {
+ \ifnum\XMLstacklevel>\plustwo +\fi
+ } {
+ \doifelse \@@MMLplusalternative \v!b {
+ \, % maybe 2 1/3
+ } {
+ +
+ }
+ }
+ \endgroup
+ \MMLcreset
} {
+
}
- \endgroup
- \MMLcreset
- } {
- +
}
}
+ } {
+ \ifcase\XMLstacklevel
+ \or
+ % self
+ \or
+ +\getXMLstackdata\plustwo
+ \else
+ \flushXMLstackwith\plustwo+
+ \fi
}
- } {
- \ifcase\XMLstacklevel
- \or
- % self
- \or
- +\getXMLstackdata\plustwo
- \else
- \flushXMLstackwith\plustwo+
- \fi
- }
+ \stopusingMMLarguments
\stopsetups
% power
@@ -1127,20 +1155,22 @@
% relations
-\defineXMLcommand [eq] {\MMLcrelation=}
-\defineXMLcommand [neq] {\MMLcrelation\neq}
-\defineXMLcommand [gt] {\MMLcrelation>}
-\defineXMLcommand [lt] {\MMLcrelation<}
-\defineXMLcommand [geq] {\MMLcrelation\geq}
-\defineXMLcommand [leq] {\MMLcrelation\leq}
-\defineXMLcommand [equivalent] {\MMLcrelation\equiv}
-\defineXMLcommand [approx] {\MMLcrelation\approx}
-\defineXMLcommand [factorof] {\MMLcrelation\mid}
+\defineXMLcommand [eq] [\MMLargumentprefix] [\c!align=] {\MMLcrelation=}
+\defineXMLcommand [neq] [\MMLargumentprefix] [\c!align=] {\MMLcrelation\neq}
+\defineXMLcommand [gt] [\MMLargumentprefix] [\c!align=] {\MMLcrelation>}
+\defineXMLcommand [lt] [\MMLargumentprefix] [\c!align=] {\MMLcrelation<}
+\defineXMLcommand [geq] [\MMLargumentprefix] [\c!align=] {\MMLcrelation\geq}
+\defineXMLcommand [leq] [\MMLargumentprefix] [\c!align=] {\MMLcrelation\leq}
+\defineXMLcommand [equivalent] [\MMLargumentprefix] [\c!align=] {\MMLcrelation\equiv}
+\defineXMLcommand [approx] [\MMLargumentprefix] [\c!align=] {\MMLcrelation\approx}
+\defineXMLcommand [factorof] [\MMLargumentprefix] [\c!align=] {\MMLcrelation\mid}
\setupMMLappearance[relation][\c!align=\v!no]
\def\MMLcrelation
- {\MMLcreset
+ {\startusingMMLarguments
+ \MMLcreset
+ \edef\@@MMLrelationalign{\executeifdefined{\MMLargumentprefix\c!align}\@@MMLrelationalign}%
\processaction
[\@@MMLrelationalign]
[\v!last=>\let\next\lastMMLcrelation ,
@@ -1153,9 +1183,10 @@
\next}
\def\noMMLcrelation#1%
- {\flushXMLstackwith\plustwo{#1}}
+ {\flushXMLstackwith\plustwo{#1}
+ \stopusingMMLarguments}
-\def\lastMMLcrelation#1%
+\def\lastMMLcrelation#1% weird, probably bugged
{\XMLRtoks\emptytoks
\dostepwiserecurse\plustwo\XMLstacklevel\plusone
{\appendetoks\noexpand\getXMLstackdata{\recurselevel}\to\XMLRtoks
@@ -1164,19 +1195,23 @@
\else\ifnum\recurselevel=\numexpr\XMLstacklevel-1\relax
\appendtoks\@col@amp@#1\to\XMLRtoks
\fi\fi}%
- \eqalign{\the\XMLRtoks\crcr}}
+ \eqalign{\the\XMLRtoks\crcr}%
+ \stopusingMMLarguments}
\def\firstMMLcrelation#1%
{\collectXMLstackrows\plusthree{\crcr\@col@amp@#1}%
- \eqalign{\getXMLstackdata\plustwo\@col@amp@#1\the\XMLRtoks}}
+ \eqalign{\getXMLstackdata\plustwo\@col@amp@#1\the\XMLRtoks}%
+ \stopusingMMLarguments}
\def\leftMMLcrelation#1%
{\collectXMLstackrows\plustwo{\@col@amp@#1\crcr}%
- \eqalign{\the\XMLRtoks}}
+ \eqalign{\the\XMLRtoks}%
+ \stopusingMMLarguments}
\def\rightMMLcrelation#1%
{\collectXMLstackrows\plustwo{\crcr#1{}\@col@amp@}%
- \eqalign{\@col@amp@\the\XMLRtoks\crcr}}
+ \eqalign{\@col@amp@\the\XMLRtoks\crcr}%
+ \stopusingMMLarguments}
\defineXMLcommand [becomes] {\MMLcrelation{:=}}
@@ -1280,40 +1315,64 @@
% <math><apply><apply><diff/><bvar><ci>x</ci></bvar><degree>2</degree><ci>f</ci></apply><ci>a</ci></apply></math>
% \stopXMLdata
+% d^y/dx^2
+%
+% \startXMLdata
+% <math><apply><diff/>
+% <bvar><ci>x</ci><cn type="integer">2</cn></bvar>
+% <lambda><bvar><ci>x</ci></bvar><ci>y</ci></lambda>
+% </apply></math>
+% \stopXMLdata
+
\startsetups mmc:diff
\MMLcreset
\doifelse\@@MMLdiffalternative\v!a {
- \XMLdoifonstackelse{bvar} {
- \frac {
- \XMLdoifonstackelse{degree} {
- \collectXMLnamedstack{degree}\empty
+ \XMLdoifonstackelse{lambda} {
+ % a special case (mathadore/openmath)
+ \begingroup
+ \defineXMLsave[ci]
+ \defineXMLsave[cn]
+ \defineXMLprocess[lambda]
+ \defineXMLprocess[bvar]
+ \frac {
+ d^{\XMLfirstnamed{bvar}\XMLflush{cn}}{\XMLfirstnamed{lambda}\XMLflush{ci}}
} {
- \collectXMLnamedstacknamed{bvar}{degree}+
+ d{\XMLfirstnamed{bvar}\XMLflush{ci}}^{\XMLfirstnamed{bvar}\XMLflush{cn}}
}
- \mfunction{\getXMLentity{mathematicald}}
- ^{\the\XMLRtoks}
- \doif\@@MMLdifflocation\v!top {
- \XMLdoifonstackelse{ci} {
- \XMLfirstnamed{ci}
+ \endgroup
+ } {
+ \XMLdoifonstackelse{bvar} {
+ \frac {
+ \XMLdoifonstackelse{degree} {
+ \collectXMLnamedstack{degree}\empty
} {
- \MMLcreset\XMLfirstnamed{apply}
+ \collectXMLnamedstacknamed{bvar}{degree}+
+ }
+ \mfunction{\getXMLentity{mathematicald}}
+ ^{\the\XMLRtoks}
+ \doif\@@MMLdifflocation\v!top {
+ \XMLdoifonstackelse{ci} {
+ \XMLfirstnamed{ci}
+ } {
+ \MMLcreset\XMLfirstnamed{apply}
+ }
}
+ } {
+ \mfunction{\getXMLentity{mathematicald}}
+ \begingroup
+ \defineXMLsave[degree]
+ \XMLfirstnamed{bvar}
+ \doifXMLdata{degree} {
+ ^{\XMLflush{degree}}
+ }
+ \endgroup
+ }
+ \doifnot\@@MMLdifflocation\v!top {
+ \left(\MMLcreset\XMLfirstnamed{apply,ci}\right)
}
} {
- \mfunction{\getXMLentity{mathematicald}}
- \begingroup
- \defineXMLsave[degree]
- \XMLfirstnamed{bvar}
- \doifXMLdata{degree} {
- ^{\XMLflush{degree}}
- }
- \endgroup
+ \flushXMLstackfrom\plustwo^\prime
}
- \doifnot\@@MMLdifflocation\v!top {
- \left(\MMLcreset\XMLfirstnamed{apply,ci}\right)
- }
- } {
- \flushXMLstackfrom\plustwo^\prime
}
} {
\MMLcreset
@@ -1402,8 +1461,30 @@
\defineXMLcommand [laplacian] {\getXMLentity {laplacian}\directsetup{mmc:donamedfunction}}
\defineXMLcommand [ident] {\getXMLentity {identity}\directsetup{mmc:donamedfunction}}
-\defineXMLcommand [domain] {\getXMLentity {domain}\directsetup{mmc:donamedfunction}}
-\defineXMLcommand [codomain] {\getXMLentity {codomain}\directsetup{mmc:donamedfunction}}
+% \defineXMLcommand [domain] {\getXMLentity {domain}\directsetup{mmc:donamedfunction}}
+% \defineXMLcommand [codomain] {\getXMLentity {codomain}\directsetup{mmc:donamedfunction}}
+
+\defineXMLcommand[domain] {\directsetup{mmc:domain:action}}
+\defineXMLcommand[codomain]{\directsetup{mmc:codomain:action}}
+
+\setupMMLappearance[domain] [symbol=]
+\setupMMLappearance[codomain][symbol=]
+
+\startsetups mmc:domain:action
+ \doifelsenothing\@@MMLdomainsymbol {
+ \getXMLentity{domain}\directsetup{mmc:donamedfunction}
+ } {
+ \@@MMLdomainsymbol_{\flushXMLstackfrom\plustwo}
+ }
+\stopsetups
+\startsetups mmc:codomain:action
+ \doifelsenothing\@@MMLcodomainsymbol {
+ \getXMLentity{codomain}\directsetup{mmc:donamedfunction}
+ } {
+ \@@MMLcodomainsymbol_{\flushXMLstackfrom\plustwo}
+ }
+\stopsetups
+
\startsetups mmc:donamedfunction
% \left(
@@ -1535,7 +1616,11 @@
\XMLfirstnamed{lowlimit}
}
}
- \XMLfirstnamed{apply}
+ \begingroup
+ \MMLcreset
+ \directsetup{mmc:lambda:simple}% a bit of open math conversion mess
+ \XMLfirstnamed{apply,lambda}% lambda needed for openmath
+ \endgroup
\stopsetups
\defineXMLcommand [tendsto] [type=default] {\directsetup{mmc:tendsto}}
@@ -2220,11 +2305,11 @@
\endgroup
\stopsetups
-\def\doMMLfiller#1%
+\def\doMMLfiller#1% bugged
{\pushmacro\doMMLfiller
\let\doMMLfiller\gobbleoneargument
\gdef\dodoMMLfiller{\disablefiller\mathematics{#1}}%
- \setbox\scratchbox=\hbox
+ \hbox
{\def\normalorfiller##1##2%
{\gdef\dodoMMLfiller{\enablefiller#1}%
\let\normalorfiller\gobbletwoarguments}%
@@ -2342,7 +2427,7 @@
\ifdim\wd\scratchbox=\zeropoint
\edef\MMLpunit{#1em}%
\else
- \edef\ascii{#1}\convertcommand\ascii\to\ascii
+ \edefconvertedargument\ascii{#1}%
\convertasciiafter\doifinstringelse{em}{\ascii}{\edef\MMLpunit{#1}}{%
\convertasciiafter\doifinstringelse{ex}{\ascii}{\edef\MMLpunit{#1}}{%
\convertasciiafter\doifinstringelse{pt}{\ascii}{\edef\MMLpunit{#1}}{%
@@ -2360,7 +2445,7 @@
\ifdim\wd\scratchbox=\zeropoint
\edef\MMLpunit{#1em}%
\else
- \edef\ascii{#1}\convertcommand\ascii\to\ascii
+ \edefconvertedargument\ascii{#1}%
\convertasciiafter\doifinstringelse{em}{\ascii}{\edef\MMLpunit{#1}}{%
\convertasciiafter\doifinstringelse{ex}{\ascii}{\edef\MMLpunit{#1}}{%
\convertasciiafter\doifinstringelse{pt}{\ascii}{\edef\MMLpunit{#1}}{%
@@ -2451,6 +2536,11 @@
\let\MMLdoL\donothing
\let\MMLdoR\donothing
+\startsetups mmc:apply:start
+ \begingroup
+ \startsavingXMLelements
+\stopsetups
+
\startsetups mmc:apply:stop
\stopsavingXMLelements
\MMLmathinner {
@@ -2472,9 +2562,11 @@
\doifelse {\getXMLstackname\plusone} {apply} {
% <apply> <apply> ... </apply> <ci> .. </ci> </apply>
\doifelseMMCfunctioninapply \plusone {plus,minus} {
+% [a]
% yet incomplete and rather untested
% <apply> <apply> <minus/> <tan/> <cos/> </apply> <ci>x</ci> </apply>
} {
+% [b]
\MMLcreset
}
\MMLdoL
@@ -2487,17 +2579,21 @@
\MMLdoR
} {
\doifelse {\getXMLstackname\plusone} {fn} {
+% [c]
% \MMLdoL/R are to be taken care of in the next setup
\directsetup{mmc:fn:apply}
} {
\doifelse {\getXMLstackname\plusone} {csymbol} {
% \MMLdoL/R are to be taken care of in the next setup
+% [d]
\directsetup{mmc:csymbol:apply}
} {
\doifelse {\getXMLstackname\plusone} {ci} {
+% [e]
% \MMLdoL/R are to be taken care of in the next setup
\directsetup{mmc:ci:apply}
} {
+% [f]
\MMLdoL
\getXMLstackdata\plusone
\MMLdoR
@@ -2520,43 +2616,55 @@
\doifelse {\getXMLstackname\plusone} {ci} {
\flattenXMLcontent{\getXMLstackdata\plusone}
\doifsetupselse{mmc:fn:\flattenedXMLcontent} {
-% \MMLdoL/MMLdoR to be handled in plugin
+ % \MMLdoL/MMLdoR to be handled in plugin
\global\defXMLstackdata\XMLfnoperator\plusone
\expanded{\endgroup\noexpand\directsetup{mmc:fn:\flattenedXMLcontent}}
} {
\endgroup
\MMLcreset
-\MMLdoL
+ \MMLdoL
\getXMLstackdata\plusone
\ifnum\XMLstacklevel>\plusone
\getXMLentity{NegThinSpace}
\left(\MMLcreset\flushXMLstackwith\plustwo{\MMLseparator,}\right)
\fi
-\MMLdoR
+ \MMLdoR
}
} {
\endgroup
\MMLcreset
-\MMLdoL
+ \MMLdoL
\getXMLstackdata\plusone
-\MMLdoR
+ \MMLdoR
}
\stopsetups
\startsetups mmc:csymbol:apply
\begingroup
- \startsavingXMLelements
- \rawXMLstacktext\plusone % still on stack, no check, just attr test
- \stopsavingXMLelements
+ \defineXMLsave[csymbol][definitionURL=,encoding=]
+ \rawXMLstackdata\plusone % was text % still on stack, no check, just attr test
% \MMLdoL/MMLdoR to be handled in plugin
- \doifsetupselse{mmc:csymbol:\XMLpar{csymbol}{definitionURL}{}} {
- \expanded{\endgroup\noexpand\directsetup{mmc:csymbol:\XMLpar{csymbol}{definitionURL}{}}}
+ \lowercasestring\XMLpar{csymbol}{definitionURL}{}\to\mmcSymbolURL
+ \doifsetupselse{mmc:csymbol:\mmcSymbolURL} {
+ \expanded{\endgroup\noexpand\directsetup{mmc:csymbol:\mmcSymbolURL}}
} {
\endgroup
- \XMLval{mmc:cs}{\XMLop{encoding}}{\firstofoneargument}
+ %\XMLval{mmc:cs}{\XMLop{encoding}}{\firstofoneargument}% fails when no content
+ \XMLval{mmc:cs}{\XMLop{encoding}}{}
}
\stopsetups
+\defineXMLsingular
+ [csymbol]
+ [encoding=text,
+ definitionURL=]
+ {\directsetup{mmc:csymbol:apply:singular}}
+
+\startsetups mmc:csymbol:apply:singular
+ \lowercasestring\XMLpar{csymbol}{definitionURL}{}\to\mmcSymbolURL
+ \directsetup{mmc:csymbol:\mmcSymbolURL}
+\stopsetups
+
\startsetups mmc:ci:apply
\getXMLstackdata\plusone
\ifnum\XMLstacklevel>\plusone
diff --git a/Master/texmf-dist/tex/context/base/x-newmmo.tex b/Master/texmf-dist/tex/context/base/x-newmmo.tex
index 5e05faae906..076f3f82c8d 100644
--- a/Master/texmf-dist/tex/context/base/x-newmmo.tex
+++ b/Master/texmf-dist/tex/context/base/x-newmmo.tex
@@ -31,7 +31,7 @@
%D
%D \typebuffer \processXMLbuffer
-\startsetups mmc:csymbol:http://www.openmath.org/cd/nums1\string#rational
+\startsetups mmc:csymbol:http://www.openmath.org/cd/nums1\letterhash rational
\MMLcreset
\getXMLstackdata\plustwo/\getXMLstackdata\plusthree
\stopsetups
@@ -48,7 +48,7 @@
%D
%D \typebuffer \processXMLbuffer
-\startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\string#diffquot
+\startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash diffquot
\MMLcreset
\frac {
\Delta\getXMLstackdata\plustwo
@@ -97,7 +97,7 @@
%D
%D \typebuffer \processXMLbuffer
-\startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\string#difference
+\startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash difference
\MMLcreset
\Delta\getXMLstackdata\plustwo
\stopsetups
@@ -114,7 +114,7 @@
%D
%D \typebuffer \processXMLbuffer
-\startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\string#diff
+\startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash diff
\MMLcreset
\frac {
\mfunction{\getXMLentity{mathematicald}}\getXMLstackdata\plustwo
@@ -123,4 +123,88 @@
}
\stopsetups
+%D A unit mess.
+
+\startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_time1@second {\mr s}\stopsetups
+\startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_time1@minute {\mr m}\stopsetups
+\startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_time1@hour {\mr h}\stopsetups
+\startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_time1@day {\mr d}\stopsetups
+\startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_time1@week {\mr w}\stopsetups
+\startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_time1@month {\mr m}\stopsetups
+\startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_time1@year {\mr y}\stopsetups
+
+\startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_metric1@meter {\mr m}\stopsetups
+\startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_metric1@gram {\mr g}\stopsetups
+\startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_metric1@liter {\mr l}\stopsetups
+
+\startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_metric1@watt {\mr W}\stopsetups
+\startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_metric1@pascal {\mr P}\stopsetups
+\startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_metric1@kelvin {\mr K}\stopsetups
+\startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_metric1@celsius {\mr C}\stopsetups
+\startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_metric1@newton {\mr N}\stopsetups
+\startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_metric1@byte {\mr B}\stopsetups
+
+\startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_siprefix1@pico {\mr p}\getXMLstackdata\plustwo\stopsetups
+\startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_siprefix1@micro \mu\getXMLstackdata\plustwo\stopsetups
+\startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_siprefix1@milli {\mr m}\getXMLstackdata\plustwo\stopsetups
+\startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_siprefix1@centi {\mr c}\getXMLstackdata\plustwo\stopsetups
+\startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_siprefix1@deci {\mr d}\getXMLstackdata\plustwo\stopsetups
+\startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_siprefix1@deca {\mr d}\getXMLstackdata\plustwo\stopsetups
+\startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_siprefix1@hecto {\mr h}\getXMLstackdata\plustwo\stopsetups
+\startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_siprefix1@kilo {\mr k}\getXMLstackdata\plustwo\stopsetups
+\startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_siprefix1@mega {\mr m}\getXMLstackdata\plustwo\stopsetups
+\startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_siprefix1@giga {\mr g}\getXMLstackdata\plustwo\stopsetups
+\startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_siprefix1@tera {\mr t}\getXMLstackdata\plustwo\stopsetups
+
+\startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash procent \procent\stopsetups
+\startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash promille \promille\stopsetups
+\startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash degree ^\circ\stopsetups
+
+% whatever
+
+\startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash triangle
+ \Delta\,
+\stopsetups
+
+% crap
+
+\startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_metric1@degree_celsius
+ \directsetup{mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_metric1@celsius}
+\stopsetups
+\startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_metric1@degree_kelvin
+ \directsetup{mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_metric1@kelvin}
+\stopsetups
+
+\startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_metric1@metre
+ \directsetup{mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_metric1@meter}
+\stopsetups
+\startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_metric1@gramme
+ \directsetup{mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_metric1@gram}
+\stopsetups
+\startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_metric1@litre
+ \directsetup{mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_metric1@liter}
+\stopsetups
+\startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_time1@calendar_month
+ \directsetup{mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_time1@month}
+\stopsetups
+\startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_time1@calendar_year
+ \directsetup{mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash units_time1@year}
+\stopsetups
+
+\startsetups mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash degree_angle
+ \directsetup{mmc:csymbol:http://www.openmath.org/cd/mathadore\letterhash degree}
+\stopsetups
+
+\defineXMLargument
+ [ci]
+ {\checkMMLciSYMBOL}
+
+\def\checkMMLciSYMBOL#1%
+ {\defconvertedargument\ascii{#1}%
+ \executeifdefined{ci:symbol:crap:\ascii}{#1}}
+
+\setvalue{ci:symbol:crap:alpha}{\alpha}
+\setvalue{ci:symbol:crap:beta}{\beta}
+\setvalue{ci:symbol:crap:gamma}{\gamma}
+
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/x-om2cml.xsl b/Master/texmf-dist/tex/context/base/x-om2cml.xsl
index 4bc1818078b..4070d94dcc7 100644
--- a/Master/texmf-dist/tex/context/base/x-om2cml.xsl
+++ b/Master/texmf-dist/tex/context/base/x-om2cml.xsl
@@ -78,12 +78,27 @@
<!-- ****************** Basic Elements ****************** -->
<!-- **************************************************** -->
- <!-- OMOBJ (D. Carlisle) -->
- <xsl:template match="om:OMOBJ">
- <math>
- <xsl:apply-templates/>
- </math>
- </xsl:template>
+ <!-- OMOBJ (D. Carlisle) / adapted by HH -->
+
+<xsl:template match="om:OMOBJ">
+ <xsl:choose>
+ <xsl:when test="@style='inline'">
+ <imath>
+ <xsl:apply-templates/>
+ </imath>
+ </xsl:when>
+ <xsl:when test="@style='display'">
+ <dmath>
+ <xsl:apply-templates/>
+ </dmath>
+ </xsl:when>
+ <xsl:otherwise>
+ <math>
+ <xsl:apply-templates/>
+ </math>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
<!-- OMI (D. Carlisle) -->
<xsl:template match="om:OMI">
@@ -195,6 +210,20 @@
</xsl:otherwise>
</xsl:choose>
</xsl:when>
+ <xsl:when test="@name='divide'">
+ <xsl:choose>
+ <xsl:when test="../@style='inline'">
+ <xsl:attribute name='alternative'>b</xsl:attribute>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:when test="@name='plus'">
+ <xsl:choose>
+ <xsl:when test="../@style='empty'">
+ <xsl:attribute name='alternative'>b</xsl:attribute>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:when>
<xsl:otherwise>
<!-- forget about it -->
</xsl:otherwise>
@@ -823,7 +852,11 @@
<!-- Trivial cases: all -->
<xsl:template match="om:OMS[@cd='relation1']">
- <xsl:element name="{@name}"/>
+ <xsl:element name="{@name}">
+ <xsl:if test="../@style!=''">
+ <xsl:attribute name='align'><xsl:value-of select="../@style"/></xsl:attribute>
+ </xsl:if>
+ </xsl:element>
</xsl:template>
<!-- Content Dictionary: setname1 -->
@@ -1045,7 +1078,7 @@
<!-- Content Dictionary: altenc -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
- <!-- This CD contains: LaTeX_encoding, MathML_encoding -->
+ <!-- This CD contains: TeX_encoding, MathML_encoding -->
<!-- Trivial cases: none -->
@@ -1064,9 +1097,9 @@
</annotation-xml>
</xsl:template>
- <!-- LaTeX_encoding -->
- <xsl:template match="om:OMS[@cd='altenc' and @name='LaTeX_encoding']">
- <annotation encoding="LaTeX">
+ <!-- TeX_encoding -->
+ <xsl:template match="om:OMS[@cd='altenc' and @name='TeX_encoding']">
+ <annotation encoding="TeX">
<xsl:value-of select="normalize-space(following::om:OMSTR)"/>
</annotation>
</xsl:template>
@@ -1294,4 +1327,16 @@
</matrix>
</xsl:template>
+ <!-- <OMS cd="units_siprefix1" name="centi" cdbase="mathadore"/> -->
+ <!-- <OMS cd="units_metric1" name="metre" cdbase="mathadore"/> -->
+
+ <xsl:template match="om:OMS[contains(@cd,'units_')]">
+ <csymbol>
+ <xsl:attribute name="definitionURL">
+ <xsl:value-of select="concat(concat(concat(concat(
+ 'http://www.openmath.org/cd/mathadore','#'),@cd),'@'),@name)"/>
+ </xsl:attribute>
+ </csymbol>
+ </xsl:template>
+
</xsl:stylesheet>
diff --git a/Master/texmf-dist/tex/context/base/x-res-01.tex b/Master/texmf-dist/tex/context/base/x-res-01.tex
index 83f747f838e..14dcbc57032 100644
--- a/Master/texmf-dist/tex/context/base/x-res-01.tex
+++ b/Master/texmf-dist/tex/context/base/x-res-01.tex
@@ -256,6 +256,7 @@
{\externalfigure
[\XMLflush{rl:file}]
[maxheight=80pt,frame=off,maxwidth=130pt,factor=max]}%
+% [factor=max]}%
[GridPg]%
\let\FigWid\figurenaturalwidth
\let\FigHei\figurenaturalheight
@@ -292,8 +293,8 @@
\doifXMLdata{rl:copyright}
{\NC copyright \NC \XMLflush{rl:copyright} \NC \NR}
\doifXMLdata{rl:status}
- {\doif{\XMLflush{rl:status}}{obsolete}
- {\NC status \NC \bf\darkred\XMLflush{rl:status} \NC \NR}
+ {\doifelse{\XMLflush{rl:status}}{obsolete}
+ {\NC status \NC \dontleavehmode \color[darkred]{\bf\XMLflush{rl:status}} \NC \NR}
{\NC status \NC \XMLflush{rl:status} \NC \NR}}
\doifXMLdata{rl:comment}
{\NC comment \NC \XMLflush{rl:comment} \NC \NR}
diff --git a/Master/texmf-dist/tex/context/base/x-res-04.tex b/Master/texmf-dist/tex/context/base/x-res-04.tex
index 83998a4c42e..b5032f5503f 100644
--- a/Master/texmf-dist/tex/context/base/x-res-04.tex
+++ b/Master/texmf-dist/tex/context/base/x-res-04.tex
@@ -207,13 +207,14 @@
\globalletempty\figurefileoriginal
\globalletempty\figurefilefile
\xdef\figurefilebasepath{#1}%
- \assignfullfilename{#1}{\figurefilebase.xml}\to\filename
- \doiffileelse\filename
+ \assignfullfilename{#1}{\figurefilebase}\to\filename
+ \doiffileelse{\filename.xml}
{\doshowfigurestate{base file : \filename}%
- \processXMLfilegrouped\filename}
+ \expanded{\processXMLfilegrouped{\filename.xml}}}
\donothing
\ifx\figurefilename\empty \else
- \global\let\figurefilebase\figurefilebase
+% \global\let\figurefilebase\figurefilebase
+ \globallet\figurefilebase\filename % hm, bad omen that this is needed
\fi
\egroup
\fi}
@@ -235,69 +236,33 @@
\ifx\doshowfigurestate\undefined \let\doshowfigurestate\gobbleoneargument \fi
-\ifx\doanalyzefiguredimensionsfromfile\undefined
-
- % will become obsolete once the new core-fig is used
-
- \let\normalcalculateexternalfigure\calculateexternalfigure
-
- \def\calculateexternalfigure[#1][#2][#3][#4][#5][#6]%
- {\resetfigurefilebase
- \ifx\figurebaselist\empty
- \normalcalculateexternalfigure[#1][#2][#3][#4][#5][#6]%
- \else
- \def\docommand##1%
- {\doshowfigurestate{base : check #3 in ##1}%
- \getfigurefilename{##1}{#3}%
- \ifx\figurefilename\empty\else\quitcommalist\fi}%
- \processcommacommand[\figurebaselist]\docommand
- \ifx\figurefilename\empty
- \stripspaces\from#3\to\figurefilename % to be sure
- \normalcalculateexternalfigure[#1][#2][\figurefilename][#4][#5][#6]%
- \else
- \doiffileelse{\figurefilebase.pdf}
- {\let\figurepathlist\figurefilebasepath
- \normalcalculateexternalfigure
- [#1][#2][\figurefilebase.pdf]%
- [\c!page=\figurefilepage,#4][#5][#6]}
- {\@EA\stripspaces\@EA\from\figurefilename\to\figurefilename
- \normalcalculateexternalfigure[#1][#2][\figurefilename][#4][#5][#6]}%
- \fi
- \fi}
-
-\else
-
- % todo: use different internal names, \figurebasepage and such
-
- \def\doanalyzefiguredimensionsfromfile
- {\ifcase\figurestatus \ifx\figurebaselist\empty \else
- \resetfigurefilebase
- \doshowfigurestate{base list : \figurebaselist}%
- \processcommacommand[\figurebaselist]\dodoanalyzefiguredimensionsfromfile
- \ifx\figurefilename\empty
- \doshowfigurestate{base warning : no matching name found}%
- \else
- \doiffileelse{\figurefilebase.pdf}
- {\doshowfigurestate{base file : \figurefilebase.pdf}%
- \doshowfigurestate{base page : \figurefilepage}%
- \let\figurepathlist\figurefilebasepath
- \analyzefigurefilename{\figurefilebase.pdf}\wantedfigurelabel
- \let\wantedfigurepage\figurefilepage}
- {\doshowfigurestate{base missing : \figurefilebase.pdf}}
- \fi
- \ifcase\figurestatus
- \analyzefigurefilename\expandedfigurename\wantedfigurelabel
- \fi
- \fi \fi}
-
- \def\dodoanalyzefiguredimensionsfromfile#1%
- {\doshowfigurestate{base check : \wantedfigurename\space in #1}%
- \getfigurefilename{#1}\wantedfigurename
- \ifx\figurefilename\empty\else
- \quitcommalist
- \fi}
-
-\fi
+\def\doanalyzefiguredimensionsfromfile
+ {\ifcase\figurestatus \ifx\figurebaselist\empty \else
+ \resetfigurefilebase
+ \doshowfigurestate{base list : \figurebaselist}%
+ \processcommacommand[\figurebaselist]\dodoanalyzefiguredimensionsfromfile
+ \ifx\figurefilename\empty
+ \doshowfigurestate{base warning : no matching name found}%
+ \else
+ \doiffileelse{\figurefilebase.pdf}
+ {\doshowfigurestate{base file : \figurefilebase.pdf}%
+ \doshowfigurestate{base page : \figurefilepage}%
+ \let\figurepathlist\figurefilebasepath
+ \analyzefigurefilename{\figurefilebase.pdf}\wantedfigurelabel
+ \let\wantedfigurepage\figurefilepage}
+ {\doshowfigurestate{base missing : \figurefilebase.pdf}}
+ \fi
+ \ifcase\figurestatus
+ \analyzefigurefilename\expandedfigurename\wantedfigurelabel
+ \fi
+ \fi \fi}
+
+\def\dodoanalyzefiguredimensionsfromfile#1%
+ {\doshowfigurestate{base check : \wantedfigurename\space in #1}%
+ \getfigurefilename{#1}\wantedfigurename
+ \ifx\figurefilename\empty\else
+ \quitcommalist
+ \fi}
% management
diff --git a/Master/texmf-dist/tex/context/base/x-res-08.tex b/Master/texmf-dist/tex/context/base/x-res-08.tex
index 548933123b8..3d0625f8c93 100644
--- a/Master/texmf-dist/tex/context/base/x-res-08.tex
+++ b/Master/texmf-dist/tex/context/base/x-res-08.tex
@@ -55,7 +55,7 @@
\def\XMLfeedbackresource#1#2%
{\begingroup
- \convertcommand\currentresourcecomment\to\currentresourcecomment
+ \defconvertedcommand\currentresourcecomment\currentresourcecomment
\doifnothing\figurefilefile{\edef\figurefilefile{\figurefilename.\figurefiletype}}%
\immediate\write\XMLrllog
{\writtenXMLelement{\XMLrlprefix usage}%
@@ -113,12 +113,15 @@
\ifx\nofconversionfigures\undefined \chardef\nofconversionfigures\plusone \fi
\appendtoks
- \ifcase\nofconversionfigures\else
+ \ifcase\nofconversionfigures
+ \writestatus\m!systems{not registering rlxtools (manipulator)}%
+ \else
+ \writestatus\m!systems{registering rlxtools (manipulator)}%
\doiflocfileelse{\jobname.rlx}
- {\installprogram{texmfstart rlxtools --manipulate kpse:\jobname.rlx \jobname.rlg}}
- {\installprogram{texmfstart rlxtools --manipulate kpse:\getvariabledefault{rl:manipulate}{file}{rlxtools.rlx} \jobname.rlg}}%
+ {\installprogram{texmfstart rlxtools --manipulate "kpse:\jobname.rlx" "\jobname.rlg"}}
+ {\installprogram{texmfstart rlxtools --manipulate "kpse:\getvariabledefault{rl:manipulate}{file}{rlxtools.rlx}" "\jobname.rlg"}}%
\fi
-\to \everylastshipout
+\to \everybye % \everylastshipout
\appendtoks \openXMLresourcelog \to \everystarttext
\appendtoks \closeXMLresourcelog \to \everystoptext
diff --git a/Master/texmf-dist/tex/context/base/x-res-12.tex b/Master/texmf-dist/tex/context/base/x-res-12.tex
index c4bc4386f60..1cff4871715 100644
--- a/Master/texmf-dist/tex/context/base/x-res-12.tex
+++ b/Master/texmf-dist/tex/context/base/x-res-12.tex
@@ -45,7 +45,7 @@
\stopXMLignore
\stopXMLmapping
\stopnointerference
- \setanalyzedfiguredimensions\!!ten}%
+ \setanalyzedfiguredimensions\!!twelve}%
\fi\fi}
\let\doanalyzefiguredimensionsexternal\doanalyzefiguredimensionsrlx
diff --git a/Master/texmf-dist/tex/context/base/x-res-20.tex b/Master/texmf-dist/tex/context/base/x-res-20.tex
index e81927c217a..3ff069ffd2f 100644
--- a/Master/texmf-dist/tex/context/base/x-res-20.tex
+++ b/Master/texmf-dist/tex/context/base/x-res-20.tex
@@ -158,7 +158,7 @@
\def\docommand####1%
{\beforesplitstring####1\at=\to\asciia
\aftersplitstring ####1\at=\to\asciib
- \convertcommand\asciib\to\asciib
+ \defconvertedcommand\asciib\asciib
\doifsomething\asciib
{\hsmash{\hbox to .75em{\asciia\hss}: \asciib}\endgraf}}%
\processcommalist[##2]\docommand
diff --git a/Master/texmf-dist/tex/context/base/x-set-11.mkii b/Master/texmf-dist/tex/context/base/x-set-11.mkii
new file mode 100644
index 00000000000..397c2c71c33
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/x-set-11.mkii
@@ -0,0 +1,39 @@
+\unprotect
+
+\def\mkloadsetups#1%
+ {\doifnotmode{no-setup-all}
+ {\startXMLmapping[zero]
+ \expanded{\processXMLfilegrouped{#1}}%
+ \stopXMLmapping}}
+
+\bgroup \catcode`\<=\active
+
+\gdef\mkshowsetup#1%
+ {\bgroup
+ \def<<##1>>{##1}%
+ \edef\ascii{#1}%
+ \enableXML
+ \doifelseXMLelement{stp:\ascii}
+ {\expanded{\flushXMLelement{stp:\ascii}}}
+ {\doifelseXMLelement{stp:\ascii:1}
+ {\expanded{\flushXMLelement{stp:\ascii:1}}}
+ {\defconvertedargument\ascii{#1}%
+ \em unknown setup \quote{\ascii}}}
+ \egroup}
+
+\egroup
+
+\def\mkshowusedsetups
+ {\getvalue{\e!place\e!listof texcommands}}
+
+\def\mkshowallsetups
+ {\getvalue{\e!place\e!listof alltexcommands}}
+
+\defineXMLenvironmentsave [cd:define] [name=]
+ {}
+ {\setevalue{cd:def:\XMLop{name}}{\XMLflush{cd:define}}}
+
+\defineXMLsingular [cd:resolve] [name=]
+ {\getvalue{cd:def:\XMLop{name}}}
+
+\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/x-set-11.mkiv b/Master/texmf-dist/tex/context/base/x-set-11.mkiv
new file mode 100644
index 00000000000..7e208a085e2
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/x-set-11.mkiv
@@ -0,0 +1,98 @@
+% engine=luatex
+
+\startluacode
+ do
+ document = document or { }
+
+ document.setups = {
+ loaded = { },
+ root = nil,
+ used = { },
+ }
+
+ function document.setups.load(filename)
+ filename = input.find_file(texmf.instance,filename) or ""
+ if filename ~= "" and not document.setups.loaded[filename] then
+ local loaded = xml.load(filename)
+ if loaded then
+ if document.setups.root then
+ xml.inject(document.setups.root,"/",loaded)
+ else
+ document.setups.root = loaded
+ end
+ document.setups.loaded[filename] = true
+ end
+ end
+ end
+ function document.setups.name(ek)
+ local at = ek.at
+ local name = at.name
+ if at.type == 'environment' then
+ name = "start" .. name
+ end
+ if at.variant then
+ name = name .. ":" .. at.variant
+ end
+ if at.generated == "yes" then
+ name = name .. "*"
+ end
+ return name:lower()
+ end
+ function document.setups.show(name)
+ if document.setups.root then
+ local name = name:gsub("[<>]","")
+ local setup = xml.first(document.setups.root,"cd:command[@name='" .. name .. "']")
+ document.setups.used[#document.setups.used+1] = setup
+ xml.sprint(setup)
+ end
+ end
+ function document.setups.showused()
+ if document.setups.root and next(document.setups.used) then
+ for k,v in ipairs(table.sortedkeys(document.setups.used)) do
+ xml.sprint(document.setups.used[v])
+ end
+ end
+ end
+ function document.setups.showall()
+ if document.setups.root then
+ local list = { }
+ xml.each_element(document.setups.root,"cd:command", function(r,d,t)
+ local ek = d[t]
+ list[document.setups.name(ek)] = ek
+ end )
+ for k,v in ipairs(table.sortedkeys(list)) do
+ xml.sprint(list[v])
+ end
+ end
+ end
+ function document.setups.resolve(name)
+ if document.setups.root then
+ local e = xml.filter(document.setups.root,string.format("cd:define[@name='%s']/text()",name))
+ if e then
+ xml.sprint(e)
+ end
+ end
+ end
+ end
+\stopluacode
+
+\def\mkloadsetups #1{\ctxlua{document.setups.load("#1")}}
+\def\mkshowsetup #1{\ctxlua{document.setups.show("#1")}}
+\def\mlshowusedsetups {\bgroup\enableXML\ctxlua{document.setups.showused()}\egroup}
+\def\mkshowallsetups {\bgroup\enableXML\ctxlua{document.setups.showall ()}\egroup}
+
+\def\mkshowsetup #1{\bgroup\enableXML\ctxlua{document.setups.show("#1")}\egroup}
+
+\defineXMLenvironmentsave [cd:define] [name=]
+ {}
+
+\defineXMLsingular [cd:resolve] [name=]
+ {\enableXML\ignorespaces\ctxlua{document.setups.resolve("\XMLop{name}")}}
+
+\endinput
+
+% \starttext
+% \loadsetups[cont-en.xml]
+% \setup[goto]
+% \placeeverysetup
+% \stoptext
diff --git a/Master/texmf-dist/tex/context/base/x-set-11.tex b/Master/texmf-dist/tex/context/base/x-set-11.tex
index f3ce754209a..19ce18a75a5 100644
--- a/Master/texmf-dist/tex/context/base/x-set-11.tex
+++ b/Master/texmf-dist/tex/context/base/x-set-11.tex
@@ -20,6 +20,13 @@
\usemodule[set-02]
+\loadmarkfile{x-set-11}
+
+\ifx\mkloadsetups\undefined \let\mkloadsetups \gobbleoneargument \fi
+\ifx\mkshowsetup \undefined \let\mkshowsetup \gobbleoneargument \fi
+\ifx\mkusedsetups\undefined \let\mkusedsetups \gobbleoneargument \fi
+\ifx\mkallsetups \undefined \let\mkallsetups \gobbleoneargument \fi
+
\unprotect
% general
@@ -303,11 +310,11 @@
\stopmessages
\def\c!setup!internal!#1%
- {{\dogetmessage{setup}{#1}%
+ {{\setmessagetext{setup}{#1}%
\expanded{\setupintfont{\currentmessagetext}}}}
\def\c!setup!text!#1%
- {{\dogetmessage{setup}{#1}%
+ {{\setmessagetext{setup}{#1}%
\setupvarfont{\currentmessagetext}}}
\def\c!setup!command!#1%
@@ -350,8 +357,19 @@
\newif\ifshortsetup
-\def\setup {\shortsetupfalse\dosetup}
-\def\shortsetup{\shortsetuptrue \dosetup}
+\def\doshowsetup
+ {\dosingleempty\dodoshowsetup}
+
+\def\dodoshowsetup[#1]%
+ {\iffirstargument
+ \mkshowsetup{#1}%
+ \else
+ \expandafter\mkshowsetup
+ \fi}
+
+\def\setup {\shortsetupfalse\doshowsetup}
+\def\showsetup {\shortsetupfalse\doshowsetup}
+\def\shortsetup{\shortsetuptrue \doshowsetup}
\def\setupsetup{\dodoubleargument\getparameters[\??stp]}
\setupsetup
@@ -370,18 +388,20 @@
\def\placesetup
{\bgroup
- \getvalue{\e!place\e!listof texcommands}
+ \mkshowusedsetups
\egroup}
-\def\placeeverysetup % for fun purposes only
+\def\placeallsetups
{\bgroup
\setupsetup[\c!reference=2]%
\setupreferencing[\c!state=\v!stop]%
- \getvalue{\e!place\e!listof alltexcommands}%
+ \mkshowallsetups
\egroup}
+\let\placeeverysetup\placeallsetups
+
\let\plaatssetup \placesetup
-\let\plaatselkesetup\placeeverysetup
+\let\plaatselkesetup\placeallsetups
% we use :1 as fallback
%
@@ -389,22 +409,6 @@
% \setup{setupinterlinespace:1}
% \setup{setupinterlinespace:2}
-\bgroup \catcode`\<=\active
-
-\gdef\dosetup#1%
- {\bgroup
- \def<<##1>>{##1}%
- \edef\ascii{#1}%
- \enableXML
- \doifelseXMLelement{stp:\ascii}
- {\expanded{\flushXMLelement{stp:\ascii}}}
- {\doifelseXMLelement{stp:\ascii:1}
- {\expanded{\flushXMLelement{stp:\ascii:1}}}
- {\convertargument#1\to\ascii
- \em unknown setup \quote{\ascii}}}
- \egroup}
-
-\egroup
\defineXMLenvironment [cd:command] [name=,type=,generated=,interactive=,variant=]
{}
@@ -419,7 +423,7 @@
\doglobal\newcounter\currentSETUPargument
\global\let\maximumSETUPargument\currentSETUPargument
\bgroup
- \doifXMLop{generated}{yes}{\ttsl}%
+ \doif{\XMLpar{cd:command}{generated}{}}{yes}{\ttsl}%
\doifelseXMLop{type}{environment}
{\tex{\e!start}}{\tex{}}\ignorespaces
\XMLflush{cd:sequence}\ignorespaces
@@ -433,6 +437,7 @@
\ignorespaces\XMLflush{cd:arguments}%
\doif{\XMLpar{cd:command}{type}{}}{environment}
{\hskip.5em\unknown\hskip.5em
+ \doif{\XMLpar{cd:command}{generated}{}}{yes}{\ttsl}%
\tex{\e!stop}\ignorespaces\XMLflush{cd:sequence}}%
\endgraf
\egroup
@@ -546,13 +551,6 @@
\def\previousSETUPargument{\currentSETUPargument}
-\defineXMLenvironmentsave [cd:define] [name=]
- {}
- {\setevalue{cd:def:\XMLop{name}}{\XMLflush{cd:define}}}
-
-\defineXMLsingular [cd:resolve] [name=]
- {\getvalue{cd:def:\XMLop{name}}}
-
\defineXMLenvironmentsave [cd:assignments]
{}
{\xdef\currentSETUPwidth{0pt}%
@@ -812,11 +810,7 @@
{\complexloadsetups[cont-en.xml]}}
\def\complexloadsetups[#1]%
- {\doifnotmode{no-setup-all}
- {\doifsomething{#1}
- {\startXMLmapping[zero]
- \expanded{\processXMLfilegrouped{#1}}%
- \stopXMLmapping}}}
+ {\doifsomething{#1}{\mkloadsetups{#1}}}
\defineXMLsingular [cd:include] [file=]
{\complexloadsetups[\XMLop{file}]}
diff --git a/Master/texmf-dist/tex/context/base/x-sm2om.xsl b/Master/texmf-dist/tex/context/base/x-sm2om.xsl
index 241452dbf52..93e1a12c549 100644
--- a/Master/texmf-dist/tex/context/base/x-sm2om.xsl
+++ b/Master/texmf-dist/tex/context/base/x-sm2om.xsl
@@ -112,6 +112,7 @@
<xsl:template match='i|n'>
<xsl:element name="OMOBJ">
+ <xsl:attribute name="style">inline</xsl:attribute>
<xsl:attribute name="xmlns">http://www.openmath.org/OpenMath</xsl:attribute>
<xsl:attribute name="version">2.0</xsl:attribute>
<xsl:call-template name="om-kind-of-data">
@@ -122,6 +123,7 @@
<xsl:template match='v'>
<xsl:element name="OMOBJ">
+ <xsl:attribute name="style">inline</xsl:attribute>
<xsl:attribute name="xmlns">http://www.openmath.org/OpenMath</xsl:attribute>
<xsl:attribute name="version">2.0</xsl:attribute>
<xsl:element name="OMV">
@@ -134,6 +136,7 @@
<xsl:template match='r'>
<xsl:element name="OMOBJ">
+ <xsl:attribute name="style">inline</xsl:attribute>
<xsl:attribute name="xmlns">http://www.openmath.org/OpenMath</xsl:attribute>
<xsl:attribute name="version">2.0</xsl:attribute>
<xsl:element name="OMA">
@@ -209,6 +212,7 @@
<xsl:template match='c'>
<xsl:element name="OMOBJ">
+ <xsl:attribute name="style">inline</xsl:attribute>
<xsl:attribute name="xmlns">http://www.openmath.org/OpenMath</xsl:attribute>
<xsl:attribute name="version">2.0</xsl:attribute>
<xsl:element name="OMA">
diff --git a/Master/texmf-dist/tex/context/base/x-xml-02.tex b/Master/texmf-dist/tex/context/base/x-xml-02.tex
index 8c10637808d..24f811c4dad 100644
--- a/Master/texmf-dist/tex/context/base/x-xml-02.tex
+++ b/Master/texmf-dist/tex/context/base/x-xml-02.tex
@@ -47,8 +47,8 @@
\setupalign
[broad,right]
-\lowercasestring \inputfilename \to \lcinputfilename
-\convertcommand \lcinputfilename \to \lcinputfilename % make _ safe
+\lowercasestring\inputfilename \to \lcinputfilename
+\defconvertedcommand\lcinputfilename\lcinputfilename % make _ safe
\setupheadertexts
[\lcinputfilename]
diff --git a/Master/texmf-dist/tex/context/base/xtag-ent.tex b/Master/texmf-dist/tex/context/base/xtag-ent.tex
index 83f1b11395a..a34fbab28fe 100644
--- a/Master/texmf-dist/tex/context/base/xtag-ent.tex
+++ b/Master/texmf-dist/tex/context/base/xtag-ent.tex
@@ -11,15 +11,6 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-% Here we also define fallbacks
-
-\defineXMLentities [tex] {tex} {\TeX}
-\defineXMLentities [latex] {latex} {\LaTeX}
-\defineXMLentities [context] {context} {\ConTeXt}
-\defineXMLentities [omega] {omega} {\Omega}
-
-\defineXMLentities [Omega] {Omega} {\Omega}
-
% We need this for French and Hungarian.
\defineXMLentity [colon] {\directdiscretionary{:}}
diff --git a/Master/texmf-dist/tex/context/base/xtag-exp.tex b/Master/texmf-dist/tex/context/base/xtag-exp.tex
index 7f289dbf530..14c3c7a71a8 100644
--- a/Master/texmf-dist/tex/context/base/xtag-exp.tex
+++ b/Master/texmf-dist/tex/context/base/xtag-exp.tex
@@ -27,8 +27,7 @@
\def\startXMLreading
{\increment \XMLfilenesting \relax
- \ifnum\XMLfilenesting=1
-%\ifcase\XMLfilenesting\or
+ \ifcase\XMLfilenesting\or
\ifprocessingXML
\let\restoreXMLelements\relax
\else
@@ -38,8 +37,7 @@
\fi}
\def\stopXMLreading
- {\ifnum\XMLfilenesting=1
-%\ifcase\XMLfilenesting\or
+ {\ifcase\XMLfilenesting\or
\restoreXMLelements
\let\restoreXMLelements\relax
\fi
diff --git a/Master/texmf-dist/tex/context/base/xtag-ext.tex b/Master/texmf-dist/tex/context/base/xtag-ext.tex
index 4de239082b3..752007f5f9b 100644
--- a/Master/texmf-dist/tex/context/base/xtag-ext.tex
+++ b/Master/texmf-dist/tex/context/base/xtag-ext.tex
@@ -192,7 +192,7 @@
\gdef\doifelseXMLelementcontent#1%
{\ifcsname\@@XMLsave:#1\endcsname
\bgroup
- \@EA\convertcommand\csname\@@XMLsave:#1\endcsname\to\ascii
+ \@EA\defconvertedcommand\@EA\ascii\csname\@@XMLsave:#1\endcsname
\setbox\scratchbox\hbox{\ignorespaces\ascii\unskip\unskip\unskip}%
\ifdim\wd\scratchbox>\zeropoint
\egroup\@EAEAEA\firstoftwoarguments
@@ -206,8 +206,8 @@
\gdef\doifelseXMLelementequals#1#2%
{\ifcsname\@@XMLsave:#1\endcsname
\bgroup
- \@EA\convertcommand\csname\@@XMLsave:#1\endcsname\to\asciia
- \convertargument#2\to\asciib
+ \@EA\defconvertedcommand\@EA\asciia\csname\@@XMLsave:#1\endcsname
+ \defconvertedargument\asciib{#2}%
\ifx\asciia\asciib
\egroup\@EAEAEA\firstoftwoarguments
\else
@@ -225,7 +225,7 @@
\gdef\convertXMLelement#1\to#2%
{\ifcsname\@@XMLsave:#1\endcsname
- \@EA\convertcommand\csname\@@XMLsave:#1\endcsname\to#2%
+ \@EA\defconvertedcommand\@EA#2\csname\@@XMLsave:#1\endcsname
\else
\let#2\ascii
\fi}
@@ -340,7 +340,7 @@
%D This gives:
%D
%D \starttyping
-%D test Äk <b>test</b> <e>ediaeresis</e> test <e>ediaeresis</e>
+%D test ë test</b> <e>ediaeresis</e> test <e>ediaeresis</e>
%D \stoptyping
\def\XMLprocessingparameter#1%
@@ -355,7 +355,7 @@
\bgroup \catcode`\<=\active
-\long\gdef\expandxmlargument#1\to
+\long\gdef\defexpandedxmlargument#1#2#3%
{\begingroup
\let\uppercase\firstofoneargument
\def\getXMLhexcharacter##1{\numbertoutp{"##1}}% maps to private if needed
@@ -371,9 +371,9 @@
\fi
\let\uchar\relax
\let\unicodechar\relax
- \xdef\@@globalexpanded{#1}%
+ \xdef\@@globalexpanded{#3}%
\endgroup
- \convertcommand\@@globalexpanded\to}
+ #1#2\@@globalexpanded}
\egroup
@@ -389,9 +389,14 @@
\chardef\xmlexpandmode\plusone
-\installexpander {xml} {\chardef\xmlexpandmode\plusone\expandxmlargument}
-\installexpander {xml:cmd} {\chardef\xmlexpandmode\plusone\expandxmlargument}
-\installexpander {xml:utf} {\chardef\xmlexpandmode\plustwo\expandxmlargument}
+\def\defexpandedxmlargumentcmd {\chardef\xmlexpandmode\plusone\defexpandedxmlargument\defconvertedcommand}
+\def\defexpandedxmlargumentutf {\chardef\xmlexpandmode\plustwo\defexpandedxmlargument\defconvertedcommand}
+\def\gdefexpandedxmlargumentcmd{\chardef\xmlexpandmode\plusone\defexpandedxmlargument\gdefconvertedcommand}
+\def\gdefexpandedxmlargumentutf{\chardef\xmlexpandmode\plustwo\defexpandedxmlargument\gdefconvertedcommand}
+
+\installexpander {xml} \defexpandedxmlargumentcmd \gdefexpandedxmlargumentcmd
+\installexpander {xml:cmd} \defexpandedxmlargumentcmd \gdefexpandedxmlargumentcmd
+\installexpander {xml:utf} \defexpandedxmlargumentutf \gdefexpandedxmlargumentutf
\def\XMLtexmath#1{\begingroup\setnormalcatcodes\scantokens{\mathematics{#1}\ignorespaces}\endgroup}
diff --git a/Master/texmf-dist/tex/context/base/xtag-ini.tex b/Master/texmf-dist/tex/context/base/xtag-ini.tex
index 155034145f7..48fcb4c8096 100644
--- a/Master/texmf-dist/tex/context/base/xtag-ini.tex
+++ b/Master/texmf-dist/tex/context/base/xtag-ini.tex
@@ -631,7 +631,7 @@
\def\parseXMLprocess#1#2%
{\cleanupXMLprocess{#2}%
- \convertcommand#1\to\ascii
+ \defconvertedcommand\ascii{#1}%
%\writestatus{xml-process}{\ascii}
\expanded
{\executeifdefined
@@ -2308,7 +2308,7 @@
\chardef\utfunicodetracer7% new
\xdef\@@XML@@string{\csname\@@XMLdata:#2\endcsname}%
\egroup
- \convertcommand\@@XML@@string\to#1}
+ \defconvertedcommand#1\@@XML@@string}
% this has to expand nicely:
%
@@ -2325,7 +2325,7 @@
\let\getXMLentity\expandedXMLentity % should this go in \simplify ?
\xdef\@@XML@@string{\csname\@@XMLdata:#2\endcsname}%
\egroup
- \convertcommand\@@XML@@string\to#1}
+ \defconvertedcommand#1\@@XML@@string}
\def\defXMLpar#1#2#3% to be documented
{\@EA\def\@EA#1\csname\ifcsname\@@XMLvariable:#2:#3\endcsname\@@XMLvariable:#2:#3\else\s!empty\fi\endcsname}
@@ -2578,9 +2578,9 @@
\def\XMLtyp#1#2#3%
{\ifcsname\@@XMLvariable:#1:#2\endcsname
- \@EA\convertcommand\csname\@@XMLvariable:#1:#2\endcsname\to\ascii
+ \@EA\defconvertedcommand\@EA\ascii\csname\@@XMLvariable:#1:#2\endcsname
\else
- \convertargument#3\to\ascii
+ \defconvertedargument\ascii{#3}%
\fi
\ascii}
@@ -2660,9 +2660,9 @@
\def\defXMLattributestring#1#2#3#4%
{\ifcsname\@@XMLvariable:#2:#3\endcsname
- \@EA\convertcommand\csname\@@XMLvariable:#2:#3\endcsname\to#1%
+ \@EA\defconvertedcommand\@EA#1\csname\@@XMLvariable:#2:#3\endcsname
\else
- \convertargument#4\to#1%
+ \defconvertedargument#1{#4}%
\fi}
\def\XMLprocess#1%
@@ -2983,4 +2983,14 @@
\egroup
+\def\defXMLexpanded#1#2%
+ {\begingroup
+ \let\getXMLentity\expandedXMLentity
+ \expanded{\endgroup\edef\noexpand#1{#2}}}
+
+\def\gdefXMLexpanded#1#2%
+ {\begingroup
+ \let\getXMLentity\expandedXMLentity
+ \expanded{\endgroup\xdef\noexpand#1{#2}}}
+
\protect \endinput
diff --git a/Master/texmf-dist/tex/context/base/xtag-map.tex b/Master/texmf-dist/tex/context/base/xtag-map.tex
index 28aabc4887f..c071d037756 100644
--- a/Master/texmf-dist/tex/context/base/xtag-map.tex
+++ b/Master/texmf-dist/tex/context/base/xtag-map.tex
@@ -468,7 +468,7 @@
\catcode`\\=\@@escape
\iftraceXMLremapping
\ifmmode\vbox\fi\bgroup
- \convertcommand\remappedXMLdata\to\ascii
+ \defconvertedcommand\ascii\remappedXMLdata
\tttf\veryraggedright\ascii\par
\writestatus{xml-remap}{\ascii}%
\egroup
diff --git a/Master/texmf-dist/tex/context/base/xtag-mml.tex b/Master/texmf-dist/tex/context/base/xtag-mml.tex
index ce51bffb233..e627e05b05e 100644
--- a/Master/texmf-dist/tex/context/base/xtag-mml.tex
+++ b/Master/texmf-dist/tex/context/base/xtag-mml.tex
@@ -72,7 +72,7 @@
\ifx\XMLRtoks\undefined \newtoks\XMLRtoks \fi
\def\convertasciiafter#1#2%
- {\convertargument#2\to\asciiafter
+ {\defconvertedargument\asciiafter{#2}%
\@EA#1\@EA{\asciiafter}}
\def\checkMMLoperator#1% #2
diff --git a/Master/texmf-dist/tex/context/base/xtag-mmp.tex b/Master/texmf-dist/tex/context/base/xtag-mmp.tex
index 3108191a0c8..01328cd4032 100644
--- a/Master/texmf-dist/tex/context/base/xtag-mmp.tex
+++ b/Master/texmf-dist/tex/context/base/xtag-mmp.tex
@@ -58,7 +58,7 @@
\unprotect
\def\convertasciiafter#1#2%
- {\convertargument#2\to\asciiafter
+ {\defconvertedargument\asciiafter{#2}%
\@EA#1\@EA{\asciiafter}}
\def\checkMMLoperator#1#2% temp hack
@@ -443,7 +443,7 @@
\ifdim\wd\scratchbox=\zeropoint
\edef\MMLpunit{#1em}%
\else
- \edef\ascii{#1}\convertcommand\ascii\to\ascii
+ \edefconvertedargument\ascii{#1}%
\convertasciiafter\doifinstringelse{em}{\ascii}{\edef\MMLpunit{#1}}{%
\convertasciiafter\doifinstringelse{ex}{\ascii}{\edef\MMLpunit{#1}}{%
\convertasciiafter\doifinstringelse{pt}{\ascii}{\edef\MMLpunit{#1}}{%
diff --git a/Master/texmf-dist/tex/context/base/xtag-pre.tex b/Master/texmf-dist/tex/context/base/xtag-pre.tex
index 5a1d7fa9718..67e80ee78de 100644
--- a/Master/texmf-dist/tex/context/base/xtag-pre.tex
+++ b/Master/texmf-dist/tex/context/base/xtag-pre.tex
@@ -71,7 +71,7 @@
\defineXMLentities [tex-dollar] {\letterdollar} {\$}
\defineXMLentities [tex-percent] {\letterpercent} {\%}
\defineXMLentities [tex-backslash] {\letterbackslash} {\texescape}
-\defineXMLentities [tex-hat] {\letterhar} {\^{}}
+\defineXMLentities [tex-hat] {\letterhat} {\^{}}
\defineXMLentities [tex-underscore] {\letterunderscore} {\_}
\defineXMLentities [tex-leftbrace] {\letterleftbrace} {\leftargument}
\defineXMLentities [tex-rightbrace] {\letterrightbrace} {\rightargument}
diff --git a/Master/texmf-dist/tex/context/base/xtag-run.tex b/Master/texmf-dist/tex/context/base/xtag-run.tex
index 2691e8dff57..8075bfbe4f7 100644
--- a/Master/texmf-dist/tex/context/base/xtag-run.tex
+++ b/Master/texmf-dist/tex/context/base/xtag-run.tex
@@ -11,6 +11,8 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
+% TODO: make this mkiv compliant, catcode tables etc
+
\writestatus{loading}{Context XML Macros (visualization)}
\unprotect
diff --git a/Master/texmf-dist/tex/context/base/xtag-stk.tex b/Master/texmf-dist/tex/context/base/xtag-stk.tex
index 32b2b87dfad..193b47132e9 100644
--- a/Master/texmf-dist/tex/context/base/xtag-stk.tex
+++ b/Master/texmf-dist/tex/context/base/xtag-stk.tex
@@ -100,7 +100,7 @@
{\defXMLstackiddata#1\XMLstackid}
\def\showXMLstacknames
- {\hbox{[\space\dorecurse\XMLstacklevel{\getXMLstackname\recurselevel\space}]}}
+ {\hbox{[\space\dorecurse\XMLstacklevel{\recurselevel:\getXMLstackname\recurselevel\space}]}}
\def\flushXMLstackfrom#1%
{\dostepwiserecurse{#1}\XMLstacklevel\plusone