summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex
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
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')
-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
-rw-r--r--Master/texmf-dist/tex/context/config/cont-usr.tex2
-rw-r--r--Master/texmf-dist/tex/context/interface/cont-cz.xml59
-rw-r--r--Master/texmf-dist/tex/context/interface/cont-de.xml55
-rw-r--r--Master/texmf-dist/tex/context/interface/cont-en.xml55
-rw-r--r--Master/texmf-dist/tex/context/interface/cont-fr.xml55
-rw-r--r--Master/texmf-dist/tex/context/interface/cont-it.xml55
-rw-r--r--Master/texmf-dist/tex/context/interface/cont-nl.xml55
-rw-r--r--Master/texmf-dist/tex/context/interface/cont-ro.xml55
-rw-r--r--Master/texmf-dist/tex/context/interface/keys-cz.xml27
-rw-r--r--Master/texmf-dist/tex/context/interface/keys-de.xml25
-rw-r--r--Master/texmf-dist/tex/context/interface/keys-en.xml25
-rw-r--r--Master/texmf-dist/tex/context/interface/keys-fr.xml25
-rw-r--r--Master/texmf-dist/tex/context/interface/keys-it.xml25
-rw-r--r--Master/texmf-dist/tex/context/interface/keys-nl.xml25
-rw-r--r--Master/texmf-dist/tex/context/interface/keys-ro.xml25
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-agr.pat986
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-et.hyp10
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-et.pat1278
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-et.rme30
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-nl.rhl2907
-rw-r--r--Master/texmf-dist/tex/context/patterns/lang-nl.rpl12948
-rw-r--r--Master/texmf-dist/tex/context/sample/linden.tex8
-rw-r--r--Master/texmf-dist/tex/context/sample/montgomery.tex13
-rw-r--r--Master/texmf-dist/tex/context/sample/sample.tex19
-rw-r--r--Master/texmf-dist/tex/context/sample/ward.tex2
-rw-r--r--Master/texmf-dist/tex/context/sample/weisman.tex5
-rw-r--r--Master/texmf-dist/tex/context/sample/zapf.tex2
-rw-r--r--Master/texmf-dist/tex/context/user/cont-sys.rme10
-rw-r--r--Master/texmf-dist/tex/generic/context/ppchtex.noc3
475 files changed, 216801 insertions, 13553 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
diff --git a/Master/texmf-dist/tex/context/config/cont-usr.tex b/Master/texmf-dist/tex/context/config/cont-usr.tex
index ee0627836c1..7489f8a109c 100644
--- a/Master/texmf-dist/tex/context/config/cont-usr.tex
+++ b/Master/texmf-dist/tex/context/config/cont-usr.tex
@@ -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/interface/cont-cz.xml b/Master/texmf-dist/tex/context/interface/cont-cz.xml
index 7ac5c0c4dba..17834cd9c32 100644
--- a/Master/texmf-dist/tex/context/interface/cont-cz.xml
+++ b/Master/texmf-dist/tex/context/interface/cont-cz.xml
@@ -18,7 +18,10 @@
<cd:constant type="vnejsi"/>
<cd:constant type="vlevo"/>
<cd:constant type="vpravo"/>
+ <cd:constant type="flushleft"/>
+ <cd:constant type="flushright"/>
<cd:constant type="nastred"/>
+ <cd:constant type="center"/>
<cd:constant type="normalni"/>
<cd:constant type="ne"/>
<cd:constant type="ano"/>
@@ -414,7 +417,6 @@
<cd:constant type="12pt"/>
<cd:constant type="male"/>
<cd:constant type="velke"/>
- <cd:constant type="globalne"/>
</cd:keywords>
</cd:arguments>
</cd:command>
@@ -2954,6 +2956,27 @@
<cd:parameter name="text">
<cd:constant type="cd:text"/>
</cd:parameter>
+ <cd:parameter name="closesymbol">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="closecommand">
+ <cd:constant type="cd:oneargument"/>
+ </cd:parameter>
+ <cd:parameter name="titleleft">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="titleright">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="vzdalenosttitulek">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="styltitulek">
+ <cd:resolve name="style"/>
+ </cd:parameter>
+ <cd:parameter name="barvatitulek">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
<cd:parameter name="zarovnani">
<cd:resolve name="align"/>
</cd:parameter>
@@ -3081,7 +3104,7 @@
<cd:command name="setupindentations" file="core-des.tex">
<cd:sequence>
- <cd:string value="nastavodsazovani"/>
+ <cd:string value="nastavodsazeni"/>
</cd:sequence>
<cd:arguments>
<cd:keywords optional="yes" list="yes">
@@ -3129,7 +3152,7 @@
<cd:constant type="cd:name"/>
</cd:keywords>
<cd:assignments list="yes">
- <cd:inherit name="nastavodsazovani"/>
+ <cd:inherit name="nastavodsazeni"/>
</cd:assignments>
</cd:arguments>
</cd:command>
@@ -4203,6 +4226,7 @@
<cd:parameter name="cislo">
<cd:constant type="ano"/>
<cd:constant type="ne"/>
+ <cd:constant type="zadny"/>
</cd:parameter>
<cd:parameter name="mezi">
<cd:constant type="cd:command"/>
@@ -5969,6 +5993,7 @@
<cd:constant type="odstavec"/>
<cd:constant type="dotextu"/>
<cd:constant type="nahodny"/>
+ <cd:constant type="reverse"/>
</cd:keywords>
<cd:assignments optional="yes" list="yes">
<cd:parameter name="marginalie">
@@ -6043,6 +6068,9 @@
<cd:parameter name="zarovnani">
<cd:resolve name="align"/>
</cd:parameter>
+ <cd:parameter name="symzarovnani">
+ <cd:resolve name="symalign"/>
+ </cd:parameter>
<cd:parameter name="odsadpristi">
<cd:resolve name="indentnext"/>
</cd:parameter>
@@ -6803,6 +6831,7 @@
<cd:constant type="fixne"/>
<cd:constant type="prizpusobive"/>
<cd:constant type="zadny"/>
+ <cd:constant type="vzdy"/>
</cd:keywords>
</cd:arguments>
</cd:command>
@@ -6892,10 +6921,30 @@
<cd:constant type="nothanging"/>
<cd:constant type="hyphenated"/>
<cd:constant type="nothyphenated"/>
+ <cd:constant type="lesshyphens"/>
+ <cd:constant type="morehyphens"/>
+ <cd:constant type="novy"/>
+ <cd:constant type="old"/>
+ <cd:constant type="normalni"/>
+ <cd:constant type="ano"/>
+ <cd:constant type="ne"/>
+ <cd:constant type="flushleft"/>
+ <cd:constant type="flushright"/>
+ <cd:constant type="flushouter"/>
+ <cd:constant type="flushinner"/>
+ <cd:constant type="center"/>
+ <cd:constant type="hz"/>
+ <cd:constant type="nohz"/>
+ <cd:constant type="mezerovani"/>
+ <cd:constant type="nospacing"/>
+ <cd:constant type="tolerantni"/>
+ <cd:constant type="velmitolerantni"/>
+ <cd:constant type="natahnout"/>
</cd:keywords>
</cd:arguments>
</cd:command>
+
<cd:command name="alignment" type="environment">
<cd:sequence>
<cd:string value="alignment"/>
@@ -7349,6 +7398,9 @@
<cd:constant type="vyska"/>
<cd:constant type="podlehloubky"/>
<cd:constant type="split"/>
+ <cd:constant type="90"/>
+ <cd:constant type="180"/>
+ <cd:constant type="270"/>
</cd:keywords>
<cd:reference optional="yes" list="yes"/>
<cd:content/>
@@ -9975,3 +10027,4 @@
</cd:command>
</cd:interface>
+
diff --git a/Master/texmf-dist/tex/context/interface/cont-de.xml b/Master/texmf-dist/tex/context/interface/cont-de.xml
index b9a968c7b2a..8044a6c1d45 100644
--- a/Master/texmf-dist/tex/context/interface/cont-de.xml
+++ b/Master/texmf-dist/tex/context/interface/cont-de.xml
@@ -18,7 +18,10 @@
<cd:constant type="aussen"/>
<cd:constant type="links"/>
<cd:constant type="rechts"/>
+ <cd:constant type="flushleft"/>
+ <cd:constant type="flushright"/>
<cd:constant type="mittig"/>
+ <cd:constant type="center"/>
<cd:constant type="normal"/>
<cd:constant type="nein"/>
<cd:constant type="ja"/>
@@ -414,7 +417,6 @@
<cd:constant type="12pt"/>
<cd:constant type="klein"/>
<cd:constant type="gross"/>
- <cd:constant type="global"/>
</cd:keywords>
</cd:arguments>
</cd:command>
@@ -2954,6 +2956,27 @@
<cd:parameter name="text">
<cd:constant type="cd:text"/>
</cd:parameter>
+ <cd:parameter name="closesymbol">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="closecommand">
+ <cd:constant type="cd:oneargument"/>
+ </cd:parameter>
+ <cd:parameter name="titleleft">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="titleright">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="titelabstand">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="titelstil">
+ <cd:resolve name="style"/>
+ </cd:parameter>
+ <cd:parameter name="titelfarbe">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
<cd:parameter name="ausrichtung">
<cd:resolve name="align"/>
</cd:parameter>
@@ -4203,6 +4226,7 @@
<cd:parameter name="nummer">
<cd:constant type="ja"/>
<cd:constant type="nein"/>
+ <cd:constant type="kein"/>
</cd:parameter>
<cd:parameter name="zwischen">
<cd:constant type="cd:command"/>
@@ -5969,6 +5993,7 @@
<cd:constant type="absatz"/>
<cd:constant type="imtext"/>
<cd:constant type="zufaellig"/>
+ <cd:constant type="reverse"/>
</cd:keywords>
<cd:assignments optional="yes" list="yes">
<cd:parameter name="marginalie">
@@ -6043,6 +6068,9 @@
<cd:parameter name="ausrichtung">
<cd:resolve name="align"/>
</cd:parameter>
+ <cd:parameter name="symausrichtung">
+ <cd:resolve name="symalign"/>
+ </cd:parameter>
<cd:parameter name="ziehefolgendeein">
<cd:resolve name="indentnext"/>
</cd:parameter>
@@ -6803,6 +6831,7 @@
<cd:constant type="fest"/>
<cd:constant type="flexibel"/>
<cd:constant type="kein"/>
+ <cd:constant type="immer"/>
</cd:keywords>
</cd:arguments>
</cd:command>
@@ -6892,10 +6921,30 @@
<cd:constant type="nothanging"/>
<cd:constant type="hyphenate"/>
<cd:constant type="nothyphenated"/>
+ <cd:constant type="lesshyphens"/>
+ <cd:constant type="morehyphens"/>
+ <cd:constant type="neu"/>
+ <cd:constant type="old"/>
+ <cd:constant type="normal"/>
+ <cd:constant type="ja"/>
+ <cd:constant type="nein"/>
+ <cd:constant type="flushleft"/>
+ <cd:constant type="flushright"/>
+ <cd:constant type="flushouter"/>
+ <cd:constant type="flushinner"/>
+ <cd:constant type="center"/>
+ <cd:constant type="hz"/>
+ <cd:constant type="nohz"/>
+ <cd:constant type="spatiumausgleich"/>
+ <cd:constant type="nospacing"/>
+ <cd:constant type="tolerant"/>
+ <cd:constant type="sehrtolerant"/>
+ <cd:constant type="strecken"/>
</cd:keywords>
</cd:arguments>
</cd:command>
+
<cd:command name="alignment" type="environment">
<cd:sequence>
<cd:string value="alignment"/>
@@ -7349,6 +7398,9 @@
<cd:constant type="hoehe"/>
<cd:constant type="tiefe"/>
<cd:constant type="split"/>
+ <cd:constant type="90"/>
+ <cd:constant type="180"/>
+ <cd:constant type="270"/>
</cd:keywords>
<cd:reference optional="yes" list="yes"/>
<cd:content/>
@@ -9975,3 +10027,4 @@
</cd:command>
</cd:interface>
+
diff --git a/Master/texmf-dist/tex/context/interface/cont-en.xml b/Master/texmf-dist/tex/context/interface/cont-en.xml
index e87f461957d..e902887c4b9 100644
--- a/Master/texmf-dist/tex/context/interface/cont-en.xml
+++ b/Master/texmf-dist/tex/context/interface/cont-en.xml
@@ -18,7 +18,10 @@
<cd:constant type="outer"/>
<cd:constant type="left"/>
<cd:constant type="right"/>
+ <cd:constant type="flushleft"/>
+ <cd:constant type="flushright"/>
<cd:constant type="middle"/>
+ <cd:constant type="center"/>
<cd:constant type="normal"/>
<cd:constant type="no"/>
<cd:constant type="yes"/>
@@ -414,7 +417,6 @@
<cd:constant type="12pt"/>
<cd:constant type="small"/>
<cd:constant type="big"/>
- <cd:constant type="global"/>
</cd:keywords>
</cd:arguments>
</cd:command>
@@ -2954,6 +2956,27 @@
<cd:parameter name="text">
<cd:constant type="cd:text"/>
</cd:parameter>
+ <cd:parameter name="closesymbol">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="closecommand">
+ <cd:constant type="cd:oneargument"/>
+ </cd:parameter>
+ <cd:parameter name="titleleft">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="titleright">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="titledistance">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="titlestyle">
+ <cd:resolve name="style"/>
+ </cd:parameter>
+ <cd:parameter name="titlecolor">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
<cd:parameter name="align">
<cd:resolve name="align"/>
</cd:parameter>
@@ -4203,6 +4226,7 @@
<cd:parameter name="number">
<cd:constant type="yes"/>
<cd:constant type="no"/>
+ <cd:constant type="none"/>
</cd:parameter>
<cd:parameter name="inbetween">
<cd:constant type="cd:command"/>
@@ -5969,6 +5993,7 @@
<cd:constant type="paragraph"/>
<cd:constant type="intext"/>
<cd:constant type="random"/>
+ <cd:constant type="reverse"/>
</cd:keywords>
<cd:assignments optional="yes" list="yes">
<cd:parameter name="margin">
@@ -6043,6 +6068,9 @@
<cd:parameter name="align">
<cd:resolve name="align"/>
</cd:parameter>
+ <cd:parameter name="symalign">
+ <cd:resolve name="symalign"/>
+ </cd:parameter>
<cd:parameter name="indentnext">
<cd:resolve name="indentnext"/>
</cd:parameter>
@@ -6803,6 +6831,7 @@
<cd:constant type="fixed"/>
<cd:constant type="flexible"/>
<cd:constant type="none"/>
+ <cd:constant type="always"/>
</cd:keywords>
</cd:arguments>
</cd:command>
@@ -6892,10 +6921,30 @@
<cd:constant type="nothanging"/>
<cd:constant type="hyphenated"/>
<cd:constant type="nothyphenated"/>
+ <cd:constant type="lesshyphens"/>
+ <cd:constant type="morehyphens"/>
+ <cd:constant type="new"/>
+ <cd:constant type="old"/>
+ <cd:constant type="normal"/>
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="flushleft"/>
+ <cd:constant type="flushright"/>
+ <cd:constant type="flushouter"/>
+ <cd:constant type="flushinner"/>
+ <cd:constant type="center"/>
+ <cd:constant type="hz"/>
+ <cd:constant type="nohz"/>
+ <cd:constant type="spacing"/>
+ <cd:constant type="nospacing"/>
+ <cd:constant type="tolerant"/>
+ <cd:constant type="verytolerant"/>
+ <cd:constant type="stretch"/>
</cd:keywords>
</cd:arguments>
</cd:command>
+
<cd:command name="alignment" type="environment">
<cd:sequence>
<cd:string value="alignment"/>
@@ -7349,6 +7398,9 @@
<cd:constant type="height"/>
<cd:constant type="depth"/>
<cd:constant type="split"/>
+ <cd:constant type="90"/>
+ <cd:constant type="180"/>
+ <cd:constant type="270"/>
</cd:keywords>
<cd:reference optional="yes" list="yes"/>
<cd:content/>
@@ -9975,3 +10027,4 @@
</cd:command>
</cd:interface>
+
diff --git a/Master/texmf-dist/tex/context/interface/cont-fr.xml b/Master/texmf-dist/tex/context/interface/cont-fr.xml
index 3ac1b70ac65..920e76ed9b2 100644
--- a/Master/texmf-dist/tex/context/interface/cont-fr.xml
+++ b/Master/texmf-dist/tex/context/interface/cont-fr.xml
@@ -18,7 +18,10 @@
<cd:constant type="exterieur"/>
<cd:constant type="gauche"/>
<cd:constant type="droite"/>
+ <cd:constant type="flushleft"/>
+ <cd:constant type="flushright"/>
<cd:constant type="milieu"/>
+ <cd:constant type="center"/>
<cd:constant type="normal"/>
<cd:constant type="non"/>
<cd:constant type="oui"/>
@@ -414,7 +417,6 @@
<cd:constant type="12pt"/>
<cd:constant type="petit"/>
<cd:constant type="grand"/>
- <cd:constant type="global"/>
</cd:keywords>
</cd:arguments>
</cd:command>
@@ -2954,6 +2956,27 @@
<cd:parameter name="texte">
<cd:constant type="cd:text"/>
</cd:parameter>
+ <cd:parameter name="closesymbol">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="closecommand">
+ <cd:constant type="cd:oneargument"/>
+ </cd:parameter>
+ <cd:parameter name="titleleft">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="titleright">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="distancetitre">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="styletitre">
+ <cd:resolve name="style"/>
+ </cd:parameter>
+ <cd:parameter name="couleurtitre">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
<cd:parameter name="alignement">
<cd:resolve name="align"/>
</cd:parameter>
@@ -4203,6 +4226,7 @@
<cd:parameter name="numero">
<cd:constant type="oui"/>
<cd:constant type="non"/>
+ <cd:constant type="rien"/>
</cd:parameter>
<cd:parameter name="entre">
<cd:constant type="cd:command"/>
@@ -5969,6 +5993,7 @@
<cd:constant type="paragraphe"/>
<cd:constant type="danstexte"/>
<cd:constant type="aleatoire"/>
+ <cd:constant type="inverse"/>
</cd:keywords>
<cd:assignments optional="yes" list="yes">
<cd:parameter name="marge">
@@ -6043,6 +6068,9 @@
<cd:parameter name="alignement">
<cd:resolve name="align"/>
</cd:parameter>
+ <cd:parameter name="symalignement">
+ <cd:resolve name="symalign"/>
+ </cd:parameter>
<cd:parameter name="indentesuivant">
<cd:resolve name="indentnext"/>
</cd:parameter>
@@ -6803,6 +6831,7 @@
<cd:constant type="fixe"/>
<cd:constant type="flexible"/>
<cd:constant type="rien"/>
+ <cd:constant type="toujours"/>
</cd:keywords>
</cd:arguments>
</cd:command>
@@ -6892,10 +6921,30 @@
<cd:constant type="nonsuspendu"/>
<cd:constant type="hyphenated"/>
<cd:constant type="nothyphenated"/>
+ <cd:constant type="lesshyphens"/>
+ <cd:constant type="morehyphens"/>
+ <cd:constant type="nouveau"/>
+ <cd:constant type="old"/>
+ <cd:constant type="normal"/>
+ <cd:constant type="oui"/>
+ <cd:constant type="non"/>
+ <cd:constant type="flushleft"/>
+ <cd:constant type="flushright"/>
+ <cd:constant type="flushouter"/>
+ <cd:constant type="flushinner"/>
+ <cd:constant type="center"/>
+ <cd:constant type="hz"/>
+ <cd:constant type="nohz"/>
+ <cd:constant type="espacement"/>
+ <cd:constant type="sansespacement"/>
+ <cd:constant type="tolerant"/>
+ <cd:constant type="trestolerant"/>
+ <cd:constant type="etire"/>
</cd:keywords>
</cd:arguments>
</cd:command>
+
<cd:command name="alignment" type="environment">
<cd:sequence>
<cd:string value="alignment"/>
@@ -7349,6 +7398,9 @@
<cd:constant type="hauteur"/>
<cd:constant type="profondeur"/>
<cd:constant type="split"/>
+ <cd:constant type="90"/>
+ <cd:constant type="180"/>
+ <cd:constant type="270"/>
</cd:keywords>
<cd:reference optional="yes" list="yes"/>
<cd:content/>
@@ -9975,3 +10027,4 @@
</cd:command>
</cd:interface>
+
diff --git a/Master/texmf-dist/tex/context/interface/cont-it.xml b/Master/texmf-dist/tex/context/interface/cont-it.xml
index b1a75e38bf6..15e4144cb25 100644
--- a/Master/texmf-dist/tex/context/interface/cont-it.xml
+++ b/Master/texmf-dist/tex/context/interface/cont-it.xml
@@ -18,7 +18,10 @@
<cd:constant type="esterno"/>
<cd:constant type="sinistra"/>
<cd:constant type="destra"/>
+ <cd:constant type="flushleft"/>
+ <cd:constant type="flushright"/>
<cd:constant type="centro"/>
+ <cd:constant type="center"/>
<cd:constant type="normale"/>
<cd:constant type="no"/>
<cd:constant type="si"/>
@@ -414,7 +417,6 @@
<cd:constant type="12pt"/>
<cd:constant type="piccolo"/>
<cd:constant type="grande"/>
- <cd:constant type="globale"/>
</cd:keywords>
</cd:arguments>
</cd:command>
@@ -2954,6 +2956,27 @@
<cd:parameter name="testo">
<cd:constant type="cd:text"/>
</cd:parameter>
+ <cd:parameter name="closesymbol">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="closecommand">
+ <cd:constant type="cd:oneargument"/>
+ </cd:parameter>
+ <cd:parameter name="titleleft">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="titleright">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="distanzatitolo">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="stiletitolo">
+ <cd:resolve name="style"/>
+ </cd:parameter>
+ <cd:parameter name="coloretitolo">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
<cd:parameter name="allinea">
<cd:resolve name="align"/>
</cd:parameter>
@@ -4203,6 +4226,7 @@
<cd:parameter name="numero">
<cd:constant type="si"/>
<cd:constant type="no"/>
+ <cd:constant type="nessuno"/>
</cd:parameter>
<cd:parameter name="tra">
<cd:constant type="cd:command"/>
@@ -5969,6 +5993,7 @@
<cd:constant type="capoverso"/>
<cd:constant type="intesto"/>
<cd:constant type="casuale"/>
+ <cd:constant type="invertito"/>
</cd:keywords>
<cd:assignments optional="yes" list="yes">
<cd:parameter name="margine">
@@ -6043,6 +6068,9 @@
<cd:parameter name="allinea">
<cd:resolve name="align"/>
</cd:parameter>
+ <cd:parameter name="symallinea">
+ <cd:resolve name="symalign"/>
+ </cd:parameter>
<cd:parameter name="rientrasuccessivo">
<cd:resolve name="indentnext"/>
</cd:parameter>
@@ -6803,6 +6831,7 @@
<cd:constant type="fisso"/>
<cd:constant type="flessibile"/>
<cd:constant type="nessuno"/>
+ <cd:constant type="sempre"/>
</cd:keywords>
</cd:arguments>
</cd:command>
@@ -6892,10 +6921,30 @@
<cd:constant type="nonsospeso"/>
<cd:constant type="sillabato"/>
<cd:constant type="nonsillabato"/>
+ <cd:constant type="lesshyphens"/>
+ <cd:constant type="morehyphens"/>
+ <cd:constant type="nuovo"/>
+ <cd:constant type="old"/>
+ <cd:constant type="normale"/>
+ <cd:constant type="si"/>
+ <cd:constant type="no"/>
+ <cd:constant type="flushleft"/>
+ <cd:constant type="flushright"/>
+ <cd:constant type="flushouter"/>
+ <cd:constant type="flushinner"/>
+ <cd:constant type="center"/>
+ <cd:constant type="hz"/>
+ <cd:constant type="nohz"/>
+ <cd:constant type="spaziatura"/>
+ <cd:constant type="nospacing"/>
+ <cd:constant type="tollerante"/>
+ <cd:constant type="moltotollerante"/>
+ <cd:constant type="dilata"/>
</cd:keywords>
</cd:arguments>
</cd:command>
+
<cd:command name="alignment" type="environment">
<cd:sequence>
<cd:string value="alignment"/>
@@ -7349,6 +7398,9 @@
<cd:constant type="altezza"/>
<cd:constant type="profondita"/>
<cd:constant type="separa"/>
+ <cd:constant type="90"/>
+ <cd:constant type="180"/>
+ <cd:constant type="270"/>
</cd:keywords>
<cd:reference optional="yes" list="yes"/>
<cd:content/>
@@ -9975,3 +10027,4 @@
</cd:command>
</cd:interface>
+
diff --git a/Master/texmf-dist/tex/context/interface/cont-nl.xml b/Master/texmf-dist/tex/context/interface/cont-nl.xml
index a3f20ef5d8b..da3caca42af 100644
--- a/Master/texmf-dist/tex/context/interface/cont-nl.xml
+++ b/Master/texmf-dist/tex/context/interface/cont-nl.xml
@@ -18,7 +18,10 @@
<cd:constant type="buiten"/>
<cd:constant type="links"/>
<cd:constant type="rechts"/>
+ <cd:constant type="lijnlinks"/>
+ <cd:constant type="lijnrechts"/>
<cd:constant type="midden"/>
+ <cd:constant type="centreer"/>
<cd:constant type="normaal"/>
<cd:constant type="nee"/>
<cd:constant type="ja"/>
@@ -414,7 +417,6 @@
<cd:constant type="12pt"/>
<cd:constant type="klein"/>
<cd:constant type="groot"/>
- <cd:constant type="globaal"/>
</cd:keywords>
</cd:arguments>
</cd:command>
@@ -2954,6 +2956,27 @@
<cd:parameter name="tekst">
<cd:constant type="cd:text"/>
</cd:parameter>
+ <cd:parameter name="sluitsymbool">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="sluitcommando">
+ <cd:constant type="cd:oneargument"/>
+ </cd:parameter>
+ <cd:parameter name="titellinks">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="titelrechts">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="titelafstand">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="titelletter">
+ <cd:resolve name="style"/>
+ </cd:parameter>
+ <cd:parameter name="titelkleur">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
<cd:parameter name="uitlijnen">
<cd:resolve name="align"/>
</cd:parameter>
@@ -4203,6 +4226,7 @@
<cd:parameter name="nummer">
<cd:constant type="ja"/>
<cd:constant type="nee"/>
+ <cd:constant type="geen"/>
</cd:parameter>
<cd:parameter name="tussen">
<cd:constant type="cd:command"/>
@@ -5969,6 +5993,7 @@
<cd:constant type="alinea"/>
<cd:constant type="intekst"/>
<cd:constant type="willekeurig"/>
+ <cd:constant type="omgekeerd"/>
</cd:keywords>
<cd:assignments optional="yes" list="yes">
<cd:parameter name="marge">
@@ -6043,6 +6068,9 @@
<cd:parameter name="uitlijnen">
<cd:resolve name="align"/>
</cd:parameter>
+ <cd:parameter name="symuitlijnen">
+ <cd:resolve name="symalign"/>
+ </cd:parameter>
<cd:parameter name="springvolgendein">
<cd:resolve name="indentnext"/>
</cd:parameter>
@@ -6803,6 +6831,7 @@
<cd:constant type="vast"/>
<cd:constant type="flexibel"/>
<cd:constant type="geen"/>
+ <cd:constant type="altijd"/>
</cd:keywords>
</cd:arguments>
</cd:command>
@@ -6892,10 +6921,30 @@
<cd:constant type="niethangend"/>
<cd:constant type="afgebroken"/>
<cd:constant type="nietafgebroken"/>
+ <cd:constant type="lesshyphens"/>
+ <cd:constant type="morehyphens"/>
+ <cd:constant type="nieuw"/>
+ <cd:constant type="oud"/>
+ <cd:constant type="normaal"/>
+ <cd:constant type="ja"/>
+ <cd:constant type="nee"/>
+ <cd:constant type="lijnlinks"/>
+ <cd:constant type="lijnrechts"/>
+ <cd:constant type="lijnbuiten"/>
+ <cd:constant type="lijnbinnen"/>
+ <cd:constant type="centreer"/>
+ <cd:constant type="hz"/>
+ <cd:constant type="geenhz"/>
+ <cd:constant type="spatiering"/>
+ <cd:constant type="geenspatiering"/>
+ <cd:constant type="soepel"/>
+ <cd:constant type="zeersoepel"/>
+ <cd:constant type="rek"/>
</cd:keywords>
</cd:arguments>
</cd:command>
+
<cd:command name="alignment" type="environment">
<cd:sequence>
<cd:string value="alignment"/>
@@ -7349,6 +7398,9 @@
<cd:constant type="hoogte"/>
<cd:constant type="diepte"/>
<cd:constant type="splitsen"/>
+ <cd:constant type="90"/>
+ <cd:constant type="180"/>
+ <cd:constant type="270"/>
</cd:keywords>
<cd:reference optional="yes" list="yes"/>
<cd:content/>
@@ -9975,3 +10027,4 @@
</cd:command>
</cd:interface>
+
diff --git a/Master/texmf-dist/tex/context/interface/cont-ro.xml b/Master/texmf-dist/tex/context/interface/cont-ro.xml
index 930d549f924..9cdd3b7eed1 100644
--- a/Master/texmf-dist/tex/context/interface/cont-ro.xml
+++ b/Master/texmf-dist/tex/context/interface/cont-ro.xml
@@ -18,7 +18,10 @@
<cd:constant type="extern"/>
<cd:constant type="stanga"/>
<cd:constant type="dreapta"/>
+ <cd:constant type="flushleft"/>
+ <cd:constant type="flushright"/>
<cd:constant type="centru"/>
+ <cd:constant type="center"/>
<cd:constant type="normal"/>
<cd:constant type="nu"/>
<cd:constant type="da"/>
@@ -414,7 +417,6 @@
<cd:constant type="12pt"/>
<cd:constant type="mic"/>
<cd:constant type="mare"/>
- <cd:constant type="global"/>
</cd:keywords>
</cd:arguments>
</cd:command>
@@ -2954,6 +2956,27 @@
<cd:parameter name="text">
<cd:constant type="cd:text"/>
</cd:parameter>
+ <cd:parameter name="closesymbol">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="closecommand">
+ <cd:constant type="cd:oneargument"/>
+ </cd:parameter>
+ <cd:parameter name="titleleft">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="titleright">
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
+ <cd:parameter name="distantatitlu">
+ <cd:constant type="cd:dimension"/>
+ </cd:parameter>
+ <cd:parameter name="stiltitlu">
+ <cd:resolve name="style"/>
+ </cd:parameter>
+ <cd:parameter name="culoaretitlu">
+ <cd:constant type="cd:name"/>
+ </cd:parameter>
<cd:parameter name="aliniere">
<cd:resolve name="align"/>
</cd:parameter>
@@ -4203,6 +4226,7 @@
<cd:parameter name="numar">
<cd:constant type="da"/>
<cd:constant type="nu"/>
+ <cd:constant type="niciunul"/>
</cd:parameter>
<cd:parameter name="intre">
<cd:constant type="cd:command"/>
@@ -5969,6 +5993,7 @@
<cd:constant type="paragraf"/>
<cd:constant type="intext"/>
<cd:constant type="aleator"/>
+ <cd:constant type="reverse"/>
</cd:keywords>
<cd:assignments optional="yes" list="yes">
<cd:parameter name="margine">
@@ -6043,6 +6068,9 @@
<cd:parameter name="aliniere">
<cd:resolve name="align"/>
</cd:parameter>
+ <cd:parameter name="symaliniere">
+ <cd:resolve name="symalign"/>
+ </cd:parameter>
<cd:parameter name="aliniaturmator">
<cd:resolve name="indentnext"/>
</cd:parameter>
@@ -6803,6 +6831,7 @@
<cd:constant type="fixat"/>
<cd:constant type="flexibil"/>
<cd:constant type="niciunul"/>
+ <cd:constant type="totdeauna"/>
</cd:keywords>
</cd:arguments>
</cd:command>
@@ -6892,10 +6921,30 @@
<cd:constant type="nothanging"/>
<cd:constant type="despsilabe"/>
<cd:constant type="nedespsilabe"/>
+ <cd:constant type="lesshyphens"/>
+ <cd:constant type="morehyphens"/>
+ <cd:constant type="nou"/>
+ <cd:constant type="old"/>
+ <cd:constant type="normal"/>
+ <cd:constant type="da"/>
+ <cd:constant type="nu"/>
+ <cd:constant type="flushleft"/>
+ <cd:constant type="flushright"/>
+ <cd:constant type="flushouter"/>
+ <cd:constant type="flushinner"/>
+ <cd:constant type="center"/>
+ <cd:constant type="hz"/>
+ <cd:constant type="nohz"/>
+ <cd:constant type="spatiere"/>
+ <cd:constant type="nospacing"/>
+ <cd:constant type="tolerant"/>
+ <cd:constant type="foartetolerant"/>
+ <cd:constant type="dilatat"/>
</cd:keywords>
</cd:arguments>
</cd:command>
+
<cd:command name="alignment" type="environment">
<cd:sequence>
<cd:string value="alignment"/>
@@ -7349,6 +7398,9 @@
<cd:constant type="inaltime"/>
<cd:constant type="adancime"/>
<cd:constant type="split"/>
+ <cd:constant type="90"/>
+ <cd:constant type="180"/>
+ <cd:constant type="270"/>
</cd:keywords>
<cd:reference optional="yes" list="yes"/>
<cd:content/>
@@ -9975,3 +10027,4 @@
</cd:command>
</cd:interface>
+
diff --git a/Master/texmf-dist/tex/context/interface/keys-cz.xml b/Master/texmf-dist/tex/context/interface/keys-cz.xml
index 67e04f4b152..0cc0952215f 100644
--- a/Master/texmf-dist/tex/context/interface/keys-cz.xml
+++ b/Master/texmf-dist/tex/context/interface/keys-cz.xml
@@ -1,6 +1,11 @@
<?xml version="1.0"?>
-<cd:interface xmlns:cd="http://www.pragma-ade.com/commands" name="context" language="cz" version="2007.01.12 15:56">
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands" name="context" language="cz" version="2008.05.21 15:21">
+
+ <cd:variables>
+ <cd:variable name="lesshyphenation" value="lesshyphenation"/>
+ <cd:variable name="morehyphenation" value="morehyphenation"/>
+ </cd:variables>
<cd:variables>
<cd:variable name="one" value="jedna"/>
@@ -120,6 +125,7 @@
<cd:variable name="lines" value="radky"/>
<cd:variable name="framedtext" value="oramovanytext"/>
<cd:variable name="quotation" value="citace"/>
+ <cd:variable name="blockquote" value="blockquote"/>
<cd:variable name="quote" value="citovat"/>
<cd:variable name="speech" value="speech"/>
<cd:variable name="itemize" value="vycet"/>
@@ -177,6 +183,7 @@
<cd:constant name="auto" value="auto"/>
<cd:constant name="autofile" value="autofile"/>
<cd:constant name="balance" value="rovnovaha"/>
+ <cd:constant name="bookmark" value="zalozka"/>
<cd:constant name="wfactor" value="sfaktor"/>
<cd:constant name="inner" value="vnitrni"/>
<cd:constant name="blank" value="prazdny"/>
@@ -282,6 +289,8 @@
<cd:constant name="leftcolor" value="barvavlevo"/>
<cd:constant name="leftstyle" value="stylvlevo"/>
<cd:constant name="leftmargin" value="levyokraj"/>
+ <cd:constant name="innermargin" value="innermargin"/>
+ <cd:constant name="outermargin" value="outermargin"/>
<cd:constant name="leftmargindistance" value="vzdalenostlevehookraje"/>
<cd:constant name="leftoffset" value="levyoffset"/>
<cd:constant name="leftedge" value="levahrana"/>
@@ -406,6 +415,8 @@
<cd:constant name="sub" value="pod"/>
<cd:constant name="subtitle" value="podtitulek"/>
<cd:constant name="symbol" value="symbol"/>
+ <cd:constant name="closesymbol" value="closesymbol"/>
+ <cd:constant name="closecommand" value="closecommand"/>
<cd:constant name="symbolset" value="sadasymbolu"/>
<cd:constant name="symcolor" value="barvasymbolu"/>
<cd:constant name="symstyle" value="stylsymboly"/>
@@ -417,6 +428,7 @@
<cd:constant name="text" value="text"/>
<cd:constant name="listtext" value="listtext"/>
<cd:constant name="textwidth" value="sirkatextu"/>
+ <cd:constant name="numberwidth" value="numberwidth"/>
<cd:constant name="textcommand" value="textovyprikaz"/>
<cd:constant name="textsize" value="velikosttextu"/>
<cd:constant name="textcolor" value="barvatextu"/>
@@ -427,11 +439,15 @@
<cd:constant name="titlestyle" value="styltitulek"/>
<cd:constant name="titlecolor" value="barvatitulek"/>
<cd:constant name="titledistance" value="vzdalenosttitulek"/>
+ <cd:constant name="titleleft" value="titleleft"/>
+ <cd:constant name="titleright" value="titleright"/>
+ <cd:constant name="titlecommand" value="titlecommand"/>
<cd:constant name="aligntitle" value="zarovnejtitul"/>
<cd:constant name="tolerance" value="tolerance"/>
<cd:constant name="inbetween" value="mezi"/>
<cd:constant name="type" value="typ"/>
<cd:constant name="align" value="zarovnani"/>
+ <cd:constant name="symalign" value="symzarovnani"/>
<cd:constant name="urlspace" value="prostorurl"/>
<cd:constant name="urlalternative" value="urlalternativa"/>
<cd:constant name="from" value="z"/>
@@ -465,6 +481,7 @@
<cd:constant name="yscale" value="ymeritko"/>
<cd:constant name="ystep" value="ykrok"/>
<cd:constant name="samepage" value="stejnastranka"/>
+ <cd:constant name="itemalign" value="itemalign"/>
<cd:constant name="sidealign" value="sidealign"/>
<cd:constant name="side" value="pocitat"/>
<cd:constant name="fieldlayer" value="fieldlayer"/>
@@ -472,6 +489,7 @@
<cd:constant name="fieldbackgroundcolor" value="barvapozadipole"/>
<cd:constant name="fieldframecolor" value="barvarameckupole"/>
<cd:constant name="fieldoffset" value="offsetpole"/>
+ <cd:constant name="action" value="akce"/>
<cd:constant name="openaction" value="otevriakci"/>
<cd:constant name="closeaction" value="zavriakci"/>
<cd:constant name="openpageaction" value="akceotevrenistranky"/>
@@ -558,6 +576,7 @@
<cd:variable name="mirrored" value="zrcadleno"/>
<cd:variable name="global" value="globalne"/>
<cd:variable name="grid" value="mrizka"/>
+ <cd:variable name="nogrid" value="nogrid"/>
<cd:variable name="big" value="velke"/>
<cd:variable name="bigbodyfont" value="bigbodyfont"/>
<cd:variable name="bigpreference" value="vysokapriorita"/>
@@ -667,6 +686,7 @@
<cd:variable name="display" value="obrazovka"/>
<cd:variable name="reverse" value="reverse"/>
<cd:variable name="fit" value="prizpusobive"/>
+ <cd:variable name="nofit" value="nofit"/>
<cd:variable name="postscript" value="postscript"/>
<cd:variable name="preview" value="nahled"/>
<cd:variable name="program" value="program"/>
@@ -727,6 +747,7 @@
<cd:variable name="continue" value="pokracovat"/>
<cd:variable name="vertical" value="vertikalne"/>
<cd:variable name="bold" value="tucne"/>
+ <cd:variable name="sansbold" value="sanstucne"/>
<cd:variable name="boldslanted" value="tucnesklonene"/>
<cd:variable name="bolditalic" value="tucnekurzivni"/>
<cd:variable name="quadruple" value="ctyrnasobny"/>
@@ -933,6 +954,8 @@
<cd:variable name="HideLayer" value="HideLayer"/>
<cd:variable name="VideLayer" value="VideLayer"/>
<cd:variable name="ToggleLayer" value="ToggleLayer"/>
+ <cd:variable name="ShowThumbs" value="UkazNahledy"/>
+ <cd:variable name="ShowBookmarks" value="UkazZalozky"/>
</cd:variables>
<cd:variables>
@@ -1388,7 +1411,7 @@
<cd:command name="defineindenting" value="definujodsazovani"/>
<cd:command name="setupdescriptions" value="nastavpopisy"/>
<cd:command name="setupenumerations" value="nastavvycty"/>
- <cd:command name="setupindentations" value="nastavodsazovani"/>
+ <cd:command name="setupindentations" value="nastavodsazeni"/>
<cd:command name="setuptab" value="nastavtab"/>
<cd:command name="tab" value="tab"/>
<cd:command name="setupexternalfigures" value="nastavexterniobrazy"/>
diff --git a/Master/texmf-dist/tex/context/interface/keys-de.xml b/Master/texmf-dist/tex/context/interface/keys-de.xml
index 627ac93b863..26c687b0bf3 100644
--- a/Master/texmf-dist/tex/context/interface/keys-de.xml
+++ b/Master/texmf-dist/tex/context/interface/keys-de.xml
@@ -1,6 +1,11 @@
<?xml version="1.0"?>
-<cd:interface xmlns:cd="http://www.pragma-ade.com/commands" name="context" language="de" version="2007.01.12 15:56">
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands" name="context" language="de" version="2008.05.21 15:21">
+
+ <cd:variables>
+ <cd:variable name="lesshyphenation" value="lesshyphenation"/>
+ <cd:variable name="morehyphenation" value="morehyphenation"/>
+ </cd:variables>
<cd:variables>
<cd:variable name="one" value="eins"/>
@@ -120,6 +125,7 @@
<cd:variable name="lines" value="zeilen"/>
<cd:variable name="framedtext" value="umrahmtertext"/>
<cd:variable name="quotation" value="zitat"/>
+ <cd:variable name="blockquote" value="blockquote"/>
<cd:variable name="quote" value="zitieren"/>
<cd:variable name="speech" value="speech"/>
<cd:variable name="itemize" value="aufzaehlung"/>
@@ -177,6 +183,7 @@
<cd:constant name="auto" value="auto"/>
<cd:constant name="autofile" value="autofile"/>
<cd:constant name="balance" value="ausgleichen"/>
+ <cd:constant name="bookmark" value="bookmark"/>
<cd:constant name="wfactor" value="bfaktor"/>
<cd:constant name="inner" value="innen"/>
<cd:constant name="blank" value="blanko"/>
@@ -282,6 +289,8 @@
<cd:constant name="leftcolor" value="linkerfarbe"/>
<cd:constant name="leftstyle" value="linkerstil"/>
<cd:constant name="leftmargin" value="linkerrand"/>
+ <cd:constant name="innermargin" value="innermargin"/>
+ <cd:constant name="outermargin" value="outermargin"/>
<cd:constant name="leftmargindistance" value="linkerrandabstand"/>
<cd:constant name="leftoffset" value="linkeroffset"/>
<cd:constant name="leftedge" value="linkekante"/>
@@ -406,6 +415,8 @@
<cd:constant name="sub" value="unter"/>
<cd:constant name="subtitle" value="untertitel"/>
<cd:constant name="symbol" value="symbol"/>
+ <cd:constant name="closesymbol" value="closesymbol"/>
+ <cd:constant name="closecommand" value="closecommand"/>
<cd:constant name="symbolset" value="symbolset"/>
<cd:constant name="symcolor" value="symfarbe"/>
<cd:constant name="symstyle" value="symstil"/>
@@ -417,6 +428,7 @@
<cd:constant name="text" value="text"/>
<cd:constant name="listtext" value="listtext"/>
<cd:constant name="textwidth" value="textbreite"/>
+ <cd:constant name="numberwidth" value="numberwidth"/>
<cd:constant name="textcommand" value="textbefehl"/>
<cd:constant name="textsize" value="textgroesse"/>
<cd:constant name="textcolor" value="textfarbe"/>
@@ -427,11 +439,15 @@
<cd:constant name="titlestyle" value="titelstil"/>
<cd:constant name="titlecolor" value="titelfarbe"/>
<cd:constant name="titledistance" value="titelabstand"/>
+ <cd:constant name="titleleft" value="titleleft"/>
+ <cd:constant name="titleright" value="titleright"/>
+ <cd:constant name="titlecommand" value="titlecommand"/>
<cd:constant name="aligntitle" value="titelausrichten"/>
<cd:constant name="tolerance" value="toleranz"/>
<cd:constant name="inbetween" value="zwischen"/>
<cd:constant name="type" value="typ"/>
<cd:constant name="align" value="ausrichtung"/>
+ <cd:constant name="symalign" value="symausrichtung"/>
<cd:constant name="urlspace" value="urlspatium"/>
<cd:constant name="urlalternative" value="urlalternative"/>
<cd:constant name="from" value="von"/>
@@ -465,6 +481,7 @@
<cd:constant name="yscale" value="yformat"/>
<cd:constant name="ystep" value="yschritt"/>
<cd:constant name="samepage" value="selbeseite"/>
+ <cd:constant name="itemalign" value="itemalign"/>
<cd:constant name="sidealign" value="sidealign"/>
<cd:constant name="side" value="objektabstand"/>
<cd:constant name="fieldlayer" value="fieldlayer"/>
@@ -472,6 +489,7 @@
<cd:constant name="fieldbackgroundcolor" value="feldhintergrundfarbe"/>
<cd:constant name="fieldframecolor" value="feldrahmenfarbe"/>
<cd:constant name="fieldoffset" value="feldoffset"/>
+ <cd:constant name="action" value="aktion"/>
<cd:constant name="openaction" value="oeffenaktion"/>
<cd:constant name="closeaction" value="schliessenaktion"/>
<cd:constant name="openpageaction" value="openpageaction"/>
@@ -558,6 +576,7 @@
<cd:variable name="mirrored" value="gespiegelt"/>
<cd:variable name="global" value="global"/>
<cd:variable name="grid" value="gritter"/>
+ <cd:variable name="nogrid" value="nogrid"/>
<cd:variable name="big" value="gross"/>
<cd:variable name="bigbodyfont" value="bigbodyfont"/>
<cd:variable name="bigpreference" value="grosszuegig"/>
@@ -667,6 +686,7 @@
<cd:variable name="display" value="bildschirm"/>
<cd:variable name="reverse" value="reverse"/>
<cd:variable name="fit" value="passend"/>
+ <cd:variable name="nofit" value="nofit"/>
<cd:variable name="postscript" value="postscript"/>
<cd:variable name="preview" value="vorschau"/>
<cd:variable name="program" value="programm"/>
@@ -727,6 +747,7 @@
<cd:variable name="continue" value="fortsetzten"/>
<cd:variable name="vertical" value="vertikal"/>
<cd:variable name="bold" value="fett"/>
+ <cd:variable name="sansbold" value="sansfett"/>
<cd:variable name="boldslanted" value="fettgeneigt"/>
<cd:variable name="bolditalic" value="fettitalic"/>
<cd:variable name="quadruple" value="viertel"/>
@@ -933,6 +954,8 @@
<cd:variable name="HideLayer" value="HideLayer"/>
<cd:variable name="VideLayer" value="VideLayer"/>
<cd:variable name="ToggleLayer" value="ToggleLayer"/>
+ <cd:variable name="ShowThumbs" value="ShowThumbs"/>
+ <cd:variable name="ShowBookmarks" value="ShowBookmarks"/>
</cd:variables>
<cd:variables>
diff --git a/Master/texmf-dist/tex/context/interface/keys-en.xml b/Master/texmf-dist/tex/context/interface/keys-en.xml
index ac45d6c98e3..b627027a9b4 100644
--- a/Master/texmf-dist/tex/context/interface/keys-en.xml
+++ b/Master/texmf-dist/tex/context/interface/keys-en.xml
@@ -1,6 +1,11 @@
<?xml version="1.0"?>
-<cd:interface xmlns:cd="http://www.pragma-ade.com/commands" name="context" language="en" version="2007.01.12 15:56">
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands" name="context" language="en" version="2008.05.21 15:21">
+
+ <cd:variables>
+ <cd:variable name="lesshyphenation" value="lesshyphenation"/>
+ <cd:variable name="morehyphenation" value="morehyphenation"/>
+ </cd:variables>
<cd:variables>
<cd:variable name="one" value="one"/>
@@ -120,6 +125,7 @@
<cd:variable name="lines" value="lines"/>
<cd:variable name="framedtext" value="framedtext"/>
<cd:variable name="quotation" value="quotation"/>
+ <cd:variable name="blockquote" value="blockquote"/>
<cd:variable name="quote" value="quote"/>
<cd:variable name="speech" value="speech"/>
<cd:variable name="itemize" value="itemize"/>
@@ -177,6 +183,7 @@
<cd:constant name="auto" value="auto"/>
<cd:constant name="autofile" value="autofile"/>
<cd:constant name="balance" value="balance"/>
+ <cd:constant name="bookmark" value="bookmark"/>
<cd:constant name="wfactor" value="wfactor"/>
<cd:constant name="inner" value="inner"/>
<cd:constant name="blank" value="blank"/>
@@ -282,6 +289,8 @@
<cd:constant name="leftcolor" value="leftcolor"/>
<cd:constant name="leftstyle" value="leftstyle"/>
<cd:constant name="leftmargin" value="leftmargin"/>
+ <cd:constant name="innermargin" value="innermargin"/>
+ <cd:constant name="outermargin" value="outermargin"/>
<cd:constant name="leftmargindistance" value="leftmargindistance"/>
<cd:constant name="leftoffset" value="leftoffset"/>
<cd:constant name="leftedge" value="leftedge"/>
@@ -406,6 +415,8 @@
<cd:constant name="sub" value="sub"/>
<cd:constant name="subtitle" value="subtitle"/>
<cd:constant name="symbol" value="symbol"/>
+ <cd:constant name="closesymbol" value="closesymbol"/>
+ <cd:constant name="closecommand" value="closecommand"/>
<cd:constant name="symbolset" value="symbolset"/>
<cd:constant name="symcolor" value="symcolor"/>
<cd:constant name="symstyle" value="symstyle"/>
@@ -417,6 +428,7 @@
<cd:constant name="text" value="text"/>
<cd:constant name="listtext" value="listtext"/>
<cd:constant name="textwidth" value="textwidth"/>
+ <cd:constant name="numberwidth" value="numberwidth"/>
<cd:constant name="textcommand" value="textcommand"/>
<cd:constant name="textsize" value="textsize"/>
<cd:constant name="textcolor" value="textcolor"/>
@@ -427,11 +439,15 @@
<cd:constant name="titlestyle" value="titlestyle"/>
<cd:constant name="titlecolor" value="titlecolor"/>
<cd:constant name="titledistance" value="titledistance"/>
+ <cd:constant name="titleleft" value="titleleft"/>
+ <cd:constant name="titleright" value="titleright"/>
+ <cd:constant name="titlecommand" value="titlecommand"/>
<cd:constant name="aligntitle" value="aligntitle"/>
<cd:constant name="tolerance" value="tolerance"/>
<cd:constant name="inbetween" value="inbetween"/>
<cd:constant name="type" value="type"/>
<cd:constant name="align" value="align"/>
+ <cd:constant name="symalign" value="symalign"/>
<cd:constant name="urlspace" value="urlspace"/>
<cd:constant name="urlalternative" value="urlalternative"/>
<cd:constant name="from" value="from"/>
@@ -465,6 +481,7 @@
<cd:constant name="yscale" value="yscale"/>
<cd:constant name="ystep" value="ystep"/>
<cd:constant name="samepage" value="samepage"/>
+ <cd:constant name="itemalign" value="itemalign"/>
<cd:constant name="sidealign" value="sidealign"/>
<cd:constant name="side" value="side"/>
<cd:constant name="fieldlayer" value="fieldlayer"/>
@@ -472,6 +489,7 @@
<cd:constant name="fieldbackgroundcolor" value="fieldbackgroundcolor"/>
<cd:constant name="fieldframecolor" value="fieldframecolor"/>
<cd:constant name="fieldoffset" value="fieldoffset"/>
+ <cd:constant name="action" value="action"/>
<cd:constant name="openaction" value="openaction"/>
<cd:constant name="closeaction" value="closeaction"/>
<cd:constant name="openpageaction" value="openpageaction"/>
@@ -558,6 +576,7 @@
<cd:variable name="mirrored" value="mirrored"/>
<cd:variable name="global" value="global"/>
<cd:variable name="grid" value="grid"/>
+ <cd:variable name="nogrid" value="nogrid"/>
<cd:variable name="big" value="big"/>
<cd:variable name="bigbodyfont" value="bigbodyfont"/>
<cd:variable name="bigpreference" value="bigpreference"/>
@@ -667,6 +686,7 @@
<cd:variable name="display" value="display"/>
<cd:variable name="reverse" value="reverse"/>
<cd:variable name="fit" value="fit"/>
+ <cd:variable name="nofit" value="nofit"/>
<cd:variable name="postscript" value="postscript"/>
<cd:variable name="preview" value="preview"/>
<cd:variable name="program" value="program"/>
@@ -727,6 +747,7 @@
<cd:variable name="continue" value="continue"/>
<cd:variable name="vertical" value="vertical"/>
<cd:variable name="bold" value="bold"/>
+ <cd:variable name="sansbold" value="sansbold"/>
<cd:variable name="boldslanted" value="boldslanted"/>
<cd:variable name="bolditalic" value="bolditalic"/>
<cd:variable name="quadruple" value="quadruple"/>
@@ -933,6 +954,8 @@
<cd:variable name="HideLayer" value="HideLayer"/>
<cd:variable name="VideLayer" value="VideLayer"/>
<cd:variable name="ToggleLayer" value="ToggleLayer"/>
+ <cd:variable name="ShowThumbs" value="ShowThumbs"/>
+ <cd:variable name="ShowBookmarks" value="ShowBookmarks"/>
</cd:variables>
<cd:variables>
diff --git a/Master/texmf-dist/tex/context/interface/keys-fr.xml b/Master/texmf-dist/tex/context/interface/keys-fr.xml
index 0540b0cf2fe..be84294493e 100644
--- a/Master/texmf-dist/tex/context/interface/keys-fr.xml
+++ b/Master/texmf-dist/tex/context/interface/keys-fr.xml
@@ -1,6 +1,11 @@
<?xml version="1.0"?>
-<cd:interface xmlns:cd="http://www.pragma-ade.com/commands" name="context" language="fr" version="2007.01.12 15:56">
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands" name="context" language="fr" version="2008.05.21 15:21">
+
+ <cd:variables>
+ <cd:variable name="lesshyphenation" value="lesshyphenation"/>
+ <cd:variable name="morehyphenation" value="morehyphenation"/>
+ </cd:variables>
<cd:variables>
<cd:variable name="one" value="un"/>
@@ -120,6 +125,7 @@
<cd:variable name="lines" value="lignes"/>
<cd:variable name="framedtext" value="texteencadre"/>
<cd:variable name="quotation" value="citation"/>
+ <cd:variable name="blockquote" value="blockquote"/>
<cd:variable name="quote" value="citer"/>
<cd:variable name="speech" value="discours"/>
<cd:variable name="itemize" value="lister"/>
@@ -177,6 +183,7 @@
<cd:constant name="auto" value="auto"/>
<cd:constant name="autofile" value="autofile"/>
<cd:constant name="balance" value="equilibre"/>
+ <cd:constant name="bookmark" value="marquepage"/>
<cd:constant name="wfactor" value="facteurlargeur"/>
<cd:constant name="inner" value="interieur"/>
<cd:constant name="blank" value="vide"/>
@@ -282,6 +289,8 @@
<cd:constant name="leftcolor" value="couleurgauche"/>
<cd:constant name="leftstyle" value="leftstyle"/>
<cd:constant name="leftmargin" value="margegauche"/>
+ <cd:constant name="innermargin" value="margeinterieure"/>
+ <cd:constant name="outermargin" value="margeexterieure"/>
<cd:constant name="leftmargindistance" value="distancemargegauche"/>
<cd:constant name="leftoffset" value="decalagegauche"/>
<cd:constant name="leftedge" value="bordgauche"/>
@@ -406,6 +415,8 @@
<cd:constant name="sub" value="sous"/>
<cd:constant name="subtitle" value="soustitre"/>
<cd:constant name="symbol" value="symbole"/>
+ <cd:constant name="closesymbol" value="closesymbol"/>
+ <cd:constant name="closecommand" value="closecommand"/>
<cd:constant name="symbolset" value="jeusymbole"/>
<cd:constant name="symcolor" value="couleursym"/>
<cd:constant name="symstyle" value="stylesym"/>
@@ -417,6 +428,7 @@
<cd:constant name="text" value="texte"/>
<cd:constant name="listtext" value="texteliste"/>
<cd:constant name="textwidth" value="largeurtexte"/>
+ <cd:constant name="numberwidth" value="numberwidth"/>
<cd:constant name="textcommand" value="commandetexte"/>
<cd:constant name="textsize" value="tailletexte"/>
<cd:constant name="textcolor" value="couleurtexte"/>
@@ -427,11 +439,15 @@
<cd:constant name="titlestyle" value="styletitre"/>
<cd:constant name="titlecolor" value="couleurtitre"/>
<cd:constant name="titledistance" value="distancetitre"/>
+ <cd:constant name="titleleft" value="titleleft"/>
+ <cd:constant name="titleright" value="titleright"/>
+ <cd:constant name="titlecommand" value="titlecommand"/>
<cd:constant name="aligntitle" value="alignementtitre"/>
<cd:constant name="tolerance" value="tolerance"/>
<cd:constant name="inbetween" value="entre"/>
<cd:constant name="type" value="type"/>
<cd:constant name="align" value="alignement"/>
+ <cd:constant name="symalign" value="symalignement"/>
<cd:constant name="urlspace" value="espaceurl"/>
<cd:constant name="urlalternative" value="alternativeurl"/>
<cd:constant name="from" value="de"/>
@@ -465,6 +481,7 @@
<cd:constant name="yscale" value="yscale"/>
<cd:constant name="ystep" value="ystep"/>
<cd:constant name="samepage" value="memepage"/>
+ <cd:constant name="itemalign" value="itemalign"/>
<cd:constant name="sidealign" value="sidealign"/>
<cd:constant name="side" value="cote"/>
<cd:constant name="fieldlayer" value="calquechamp"/>
@@ -472,6 +489,7 @@
<cd:constant name="fieldbackgroundcolor" value="couleurarrierreplanchamp"/>
<cd:constant name="fieldframecolor" value="couleurcadrechamp"/>
<cd:constant name="fieldoffset" value="offsetchamp"/>
+ <cd:constant name="action" value="action"/>
<cd:constant name="openaction" value="actionouverture"/>
<cd:constant name="closeaction" value="actionfermeture"/>
<cd:constant name="openpageaction" value="actionouverturepage"/>
@@ -558,6 +576,7 @@
<cd:variable name="mirrored" value="reflete"/>
<cd:variable name="global" value="global"/>
<cd:variable name="grid" value="grille"/>
+ <cd:variable name="nogrid" value="nogrid"/>
<cd:variable name="big" value="grand"/>
<cd:variable name="bigbodyfont" value="grandepolicecorp"/>
<cd:variable name="bigpreference" value="grandepreference"/>
@@ -667,6 +686,7 @@
<cd:variable name="display" value="affichage"/>
<cd:variable name="reverse" value="inverse"/>
<cd:variable name="fit" value="adapte"/>
+ <cd:variable name="nofit" value="nofit"/>
<cd:variable name="postscript" value="postscript"/>
<cd:variable name="preview" value="previsualisation"/>
<cd:variable name="program" value="programme"/>
@@ -727,6 +747,7 @@
<cd:variable name="continue" value="continue"/>
<cd:variable name="vertical" value="verticale"/>
<cd:variable name="bold" value="gras"/>
+ <cd:variable name="sansbold" value="sansgras"/>
<cd:variable name="boldslanted" value="inclinegras"/>
<cd:variable name="bolditalic" value="italiquegras"/>
<cd:variable name="quadruple" value="quadruple"/>
@@ -933,6 +954,8 @@
<cd:variable name="HideLayer" value="CacheCalque"/>
<cd:variable name="VideLayer" value="VideLayer"/>
<cd:variable name="ToggleLayer" value="ToggleLayer"/>
+ <cd:variable name="ShowThumbs" value="ShowThumbs"/>
+ <cd:variable name="ShowBookmarks" value="ShowBookmarks"/>
</cd:variables>
<cd:variables>
diff --git a/Master/texmf-dist/tex/context/interface/keys-it.xml b/Master/texmf-dist/tex/context/interface/keys-it.xml
index 9ef205c231b..0f0fbbd51d9 100644
--- a/Master/texmf-dist/tex/context/interface/keys-it.xml
+++ b/Master/texmf-dist/tex/context/interface/keys-it.xml
@@ -1,6 +1,11 @@
<?xml version="1.0"?>
-<cd:interface xmlns:cd="http://www.pragma-ade.com/commands" name="context" language="it" version="2007.01.12 15:56">
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands" name="context" language="it" version="2008.05.21 15:21">
+
+ <cd:variables>
+ <cd:variable name="lesshyphenation" value="lesshyphenation"/>
+ <cd:variable name="morehyphenation" value="morehyphenation"/>
+ </cd:variables>
<cd:variables>
<cd:variable name="one" value="uno"/>
@@ -120,6 +125,7 @@
<cd:variable name="lines" value="righe"/>
<cd:variable name="framedtext" value="testoincorniciato"/>
<cd:variable name="quotation" value="citazione"/>
+ <cd:variable name="blockquote" value="blockquote"/>
<cd:variable name="quote" value="menzione"/>
<cd:variable name="speech" value="speech"/>
<cd:variable name="itemize" value="elenco"/>
@@ -177,6 +183,7 @@
<cd:constant name="auto" value="auto"/>
<cd:constant name="autofile" value="autofile"/>
<cd:constant name="balance" value="bilanciamento"/>
+ <cd:constant name="bookmark" value="segnalibro"/>
<cd:constant name="wfactor" value="wfactor"/>
<cd:constant name="inner" value="interno"/>
<cd:constant name="blank" value="rigovuoto"/>
@@ -282,6 +289,8 @@
<cd:constant name="leftcolor" value="coloresinistra"/>
<cd:constant name="leftstyle" value="stilesinistra"/>
<cd:constant name="leftmargin" value="marginesinistro"/>
+ <cd:constant name="innermargin" value="margineinterno"/>
+ <cd:constant name="outermargin" value="margineesterno"/>
<cd:constant name="leftmargindistance" value="distanzamarginesinistro"/>
<cd:constant name="leftoffset" value="offsetsinistro"/>
<cd:constant name="leftedge" value="bordosinistro"/>
@@ -406,6 +415,8 @@
<cd:constant name="sub" value="sotto"/>
<cd:constant name="subtitle" value="sottotitolo"/>
<cd:constant name="symbol" value="simbolo"/>
+ <cd:constant name="closesymbol" value="closesymbol"/>
+ <cd:constant name="closecommand" value="closecommand"/>
<cd:constant name="symbolset" value="setsimboli"/>
<cd:constant name="symcolor" value="coloresimbolo"/>
<cd:constant name="symstyle" value="stilesimbolo"/>
@@ -417,6 +428,7 @@
<cd:constant name="text" value="testo"/>
<cd:constant name="listtext" value="listtext"/>
<cd:constant name="textwidth" value="ampiezzatesto"/>
+ <cd:constant name="numberwidth" value="numberwidth"/>
<cd:constant name="textcommand" value="comandotesto"/>
<cd:constant name="textsize" value="dimensionetesto"/>
<cd:constant name="textcolor" value="coloretesto"/>
@@ -427,11 +439,15 @@
<cd:constant name="titlestyle" value="stiletitolo"/>
<cd:constant name="titlecolor" value="coloretitolo"/>
<cd:constant name="titledistance" value="distanzatitolo"/>
+ <cd:constant name="titleleft" value="titleleft"/>
+ <cd:constant name="titleright" value="titleright"/>
+ <cd:constant name="titlecommand" value="titlecommand"/>
<cd:constant name="aligntitle" value="allineatitolo"/>
<cd:constant name="tolerance" value="tolleranza"/>
<cd:constant name="inbetween" value="tra"/>
<cd:constant name="type" value="type"/>
<cd:constant name="align" value="allinea"/>
+ <cd:constant name="symalign" value="symallinea"/>
<cd:constant name="urlspace" value="spaziourl"/>
<cd:constant name="urlalternative" value="alternativaurl"/>
<cd:constant name="from" value="da"/>
@@ -465,6 +481,7 @@
<cd:constant name="yscale" value="yscale"/>
<cd:constant name="ystep" value="ystep"/>
<cd:constant name="samepage" value="stessapagina"/>
+ <cd:constant name="itemalign" value="itemalign"/>
<cd:constant name="sidealign" value="sidealign"/>
<cd:constant name="side" value="lato"/>
<cd:constant name="fieldlayer" value="fieldlayer"/>
@@ -472,6 +489,7 @@
<cd:constant name="fieldbackgroundcolor" value="coloresfondocampo"/>
<cd:constant name="fieldframecolor" value="colorecornicecampo"/>
<cd:constant name="fieldoffset" value="offsetcampo"/>
+ <cd:constant name="action" value="azione"/>
<cd:constant name="openaction" value="azioneapri"/>
<cd:constant name="closeaction" value="azionechiudi"/>
<cd:constant name="openpageaction" value="azioneapripagina"/>
@@ -558,6 +576,7 @@
<cd:variable name="mirrored" value="riflesso"/>
<cd:variable name="global" value="globale"/>
<cd:variable name="grid" value="griglia"/>
+ <cd:variable name="nogrid" value="nogrid"/>
<cd:variable name="big" value="grande"/>
<cd:variable name="bigbodyfont" value="grossofontdeltesto"/>
<cd:variable name="bigpreference" value="grandepreferenza"/>
@@ -667,6 +686,7 @@
<cd:variable name="display" value="schermo"/>
<cd:variable name="reverse" value="invertito"/>
<cd:variable name="fit" value="adatta"/>
+ <cd:variable name="nofit" value="nofit"/>
<cd:variable name="postscript" value="postscript"/>
<cd:variable name="preview" value="anteprima"/>
<cd:variable name="program" value="programma"/>
@@ -727,6 +747,7 @@
<cd:variable name="continue" value="continua"/>
<cd:variable name="vertical" value="verticale"/>
<cd:variable name="bold" value="grassetto"/>
+ <cd:variable name="sansbold" value="sansgrassetto"/>
<cd:variable name="boldslanted" value="grassettoinclinato"/>
<cd:variable name="bolditalic" value="grassettocorsivo"/>
<cd:variable name="quadruple" value="quadruplo"/>
@@ -933,6 +954,8 @@
<cd:variable name="HideLayer" value="HideLayer"/>
<cd:variable name="VideLayer" value="VideLayer"/>
<cd:variable name="ToggleLayer" value="ToggleLayer"/>
+ <cd:variable name="ShowThumbs" value="MostraThumbs"/>
+ <cd:variable name="ShowBookmarks" value="MostraSegnalibro"/>
</cd:variables>
<cd:variables>
diff --git a/Master/texmf-dist/tex/context/interface/keys-nl.xml b/Master/texmf-dist/tex/context/interface/keys-nl.xml
index d69119e3cda..43705937417 100644
--- a/Master/texmf-dist/tex/context/interface/keys-nl.xml
+++ b/Master/texmf-dist/tex/context/interface/keys-nl.xml
@@ -1,6 +1,11 @@
<?xml version="1.0"?>
-<cd:interface xmlns:cd="http://www.pragma-ade.com/commands" name="context" language="nl" version="2007.01.12 15:56">
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands" name="context" language="nl" version="2008.05.21 15:21">
+
+ <cd:variables>
+ <cd:variable name="lesshyphenation" value="lesshyphenation"/>
+ <cd:variable name="morehyphenation" value="morehyphenation"/>
+ </cd:variables>
<cd:variables>
<cd:variable name="one" value="een"/>
@@ -120,6 +125,7 @@
<cd:variable name="lines" value="regels"/>
<cd:variable name="framedtext" value="kadertekst"/>
<cd:variable name="quotation" value="citaat"/>
+ <cd:variable name="blockquote" value="blokcitaat"/>
<cd:variable name="quote" value="citeer"/>
<cd:variable name="speech" value="spraak"/>
<cd:variable name="itemize" value="opsomming"/>
@@ -177,6 +183,7 @@
<cd:constant name="auto" value="auto"/>
<cd:constant name="autofile" value="autofile"/>
<cd:constant name="balance" value="balanceren"/>
+ <cd:constant name="bookmark" value="bookmark"/>
<cd:constant name="wfactor" value="bfactor"/>
<cd:constant name="inner" value="binnen"/>
<cd:constant name="blank" value="blanko"/>
@@ -282,6 +289,8 @@
<cd:constant name="leftcolor" value="linkerkleur"/>
<cd:constant name="leftstyle" value="linkerletter"/>
<cd:constant name="leftmargin" value="linkermarge"/>
+ <cd:constant name="innermargin" value="binnenmarge"/>
+ <cd:constant name="outermargin" value="buitenmarge"/>
<cd:constant name="leftmargindistance" value="linkermargeafstand"/>
<cd:constant name="leftoffset" value="linkeroffset"/>
<cd:constant name="leftedge" value="linkerrand"/>
@@ -406,6 +415,8 @@
<cd:constant name="sub" value="sub"/>
<cd:constant name="subtitle" value="subtitel"/>
<cd:constant name="symbol" value="symbool"/>
+ <cd:constant name="closesymbol" value="sluitsymbool"/>
+ <cd:constant name="closecommand" value="sluitcommando"/>
<cd:constant name="symbolset" value="symboolset"/>
<cd:constant name="symcolor" value="symkleur"/>
<cd:constant name="symstyle" value="symletter"/>
@@ -417,6 +428,7 @@
<cd:constant name="text" value="tekst"/>
<cd:constant name="listtext" value="lijsttekst"/>
<cd:constant name="textwidth" value="tekstbreedte"/>
+ <cd:constant name="numberwidth" value="nummerbreedte"/>
<cd:constant name="textcommand" value="tekstcommando"/>
<cd:constant name="textsize" value="tekstformaat"/>
<cd:constant name="textcolor" value="tekstkleur"/>
@@ -427,11 +439,15 @@
<cd:constant name="titlestyle" value="titelletter"/>
<cd:constant name="titlecolor" value="titelkleur"/>
<cd:constant name="titledistance" value="titelafstand"/>
+ <cd:constant name="titleleft" value="titellinks"/>
+ <cd:constant name="titleright" value="titelrechts"/>
+ <cd:constant name="titlecommand" value="titelcommando"/>
<cd:constant name="aligntitle" value="titeluitlijnen"/>
<cd:constant name="tolerance" value="tolerantie"/>
<cd:constant name="inbetween" value="tussen"/>
<cd:constant name="type" value="type"/>
<cd:constant name="align" value="uitlijnen"/>
+ <cd:constant name="symalign" value="symuitlijnen"/>
<cd:constant name="urlspace" value="urlspatie"/>
<cd:constant name="urlalternative" value="urlvariant"/>
<cd:constant name="from" value="van"/>
@@ -465,6 +481,7 @@
<cd:constant name="yscale" value="yschaal"/>
<cd:constant name="ystep" value="ystap"/>
<cd:constant name="samepage" value="zelfdepagina"/>
+ <cd:constant name="itemalign" value="itemuitlijnen"/>
<cd:constant name="sidealign" value="zijuitlijnen"/>
<cd:constant name="side" value="zij"/>
<cd:constant name="fieldlayer" value="veldlaag"/>
@@ -472,6 +489,7 @@
<cd:constant name="fieldbackgroundcolor" value="veldachtergrondkleur"/>
<cd:constant name="fieldframecolor" value="veldkaderkleur"/>
<cd:constant name="fieldoffset" value="veldoffset"/>
+ <cd:constant name="action" value="actie"/>
<cd:constant name="openaction" value="openactie"/>
<cd:constant name="closeaction" value="sluitactie"/>
<cd:constant name="openpageaction" value="openpaginaactie"/>
@@ -558,6 +576,7 @@
<cd:variable name="mirrored" value="gespiegeld"/>
<cd:variable name="global" value="globaal"/>
<cd:variable name="grid" value="grid"/>
+ <cd:variable name="nogrid" value="geengrid"/>
<cd:variable name="big" value="groot"/>
<cd:variable name="bigbodyfont" value="grootkorps"/>
<cd:variable name="bigpreference" value="grotevoorkeur"/>
@@ -667,6 +686,7 @@
<cd:variable name="display" value="scherm"/>
<cd:variable name="reverse" value="omgekeerd"/>
<cd:variable name="fit" value="passend"/>
+ <cd:variable name="nofit" value="nietpassend"/>
<cd:variable name="postscript" value="postscript"/>
<cd:variable name="preview" value="preview"/>
<cd:variable name="program" value="programma"/>
@@ -727,6 +747,7 @@
<cd:variable name="continue" value="verder"/>
<cd:variable name="vertical" value="vertikaal"/>
<cd:variable name="bold" value="vet"/>
+ <cd:variable name="sansbold" value="sansvet"/>
<cd:variable name="boldslanted" value="vetschuin"/>
<cd:variable name="bolditalic" value="vetitalic"/>
<cd:variable name="quadruple" value="viertal"/>
@@ -933,6 +954,8 @@
<cd:variable name="HideLayer" value="VerbergLaag"/>
<cd:variable name="VideLayer" value="ToonLaag"/>
<cd:variable name="ToggleLayer" value="WisselLaag"/>
+ <cd:variable name="ShowThumbs" value="ShowThumbs"/>
+ <cd:variable name="ShowBookmarks" value="ShowBookmarks"/>
</cd:variables>
<cd:variables>
diff --git a/Master/texmf-dist/tex/context/interface/keys-ro.xml b/Master/texmf-dist/tex/context/interface/keys-ro.xml
index b65986ab5b9..8ef0f6158e6 100644
--- a/Master/texmf-dist/tex/context/interface/keys-ro.xml
+++ b/Master/texmf-dist/tex/context/interface/keys-ro.xml
@@ -1,6 +1,11 @@
<?xml version="1.0"?>
-<cd:interface xmlns:cd="http://www.pragma-ade.com/commands" name="context" language="ro" version="2007.01.12 15:56">
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands" name="context" language="ro" version="2008.05.21 15:21">
+
+ <cd:variables>
+ <cd:variable name="lesshyphenation" value="lesshyphenation"/>
+ <cd:variable name="morehyphenation" value="morehyphenation"/>
+ </cd:variables>
<cd:variables>
<cd:variable name="one" value="unu"/>
@@ -120,6 +125,7 @@
<cd:variable name="lines" value="linii"/>
<cd:variable name="framedtext" value="textinconjurat"/>
<cd:variable name="quotation" value="citat"/>
+ <cd:variable name="blockquote" value="blockquote"/>
<cd:variable name="quote" value="minicitat"/>
<cd:variable name="speech" value="speech"/>
<cd:variable name="itemize" value="enumerare"/>
@@ -177,6 +183,7 @@
<cd:constant name="auto" value="auto"/>
<cd:constant name="autofile" value="autofile"/>
<cd:constant name="balance" value="balanta"/>
+ <cd:constant name="bookmark" value="semncarte"/>
<cd:constant name="wfactor" value="factorw"/>
<cd:constant name="inner" value="intern"/>
<cd:constant name="blank" value="blanc"/>
@@ -282,6 +289,8 @@
<cd:constant name="leftcolor" value="culoarestanga"/>
<cd:constant name="leftstyle" value="stilstanga"/>
<cd:constant name="leftmargin" value="marginestanga"/>
+ <cd:constant name="innermargin" value="innermargin"/>
+ <cd:constant name="outermargin" value="outermargin"/>
<cd:constant name="leftmargindistance" value="distantamarginestanga"/>
<cd:constant name="leftoffset" value="offsetstanga"/>
<cd:constant name="leftedge" value="bordurastanga"/>
@@ -406,6 +415,8 @@
<cd:constant name="sub" value="sub"/>
<cd:constant name="subtitle" value="subtitlu"/>
<cd:constant name="symbol" value="simbol"/>
+ <cd:constant name="closesymbol" value="closesymbol"/>
+ <cd:constant name="closecommand" value="closecommand"/>
<cd:constant name="symbolset" value="setsimbol"/>
<cd:constant name="symcolor" value="culoaresimbol"/>
<cd:constant name="symstyle" value="stilsimbol"/>
@@ -417,6 +428,7 @@
<cd:constant name="text" value="text"/>
<cd:constant name="listtext" value="listtext"/>
<cd:constant name="textwidth" value="latimetext"/>
+ <cd:constant name="numberwidth" value="numberwidth"/>
<cd:constant name="textcommand" value="comandatext"/>
<cd:constant name="textsize" value="dimensiunetext"/>
<cd:constant name="textcolor" value="culoaretext"/>
@@ -427,11 +439,15 @@
<cd:constant name="titlestyle" value="stiltitlu"/>
<cd:constant name="titlecolor" value="culoaretitlu"/>
<cd:constant name="titledistance" value="distantatitlu"/>
+ <cd:constant name="titleleft" value="titleleft"/>
+ <cd:constant name="titleright" value="titleright"/>
+ <cd:constant name="titlecommand" value="titlecommand"/>
<cd:constant name="aligntitle" value="alinieretitlu"/>
<cd:constant name="tolerance" value="toleranta"/>
<cd:constant name="inbetween" value="intre"/>
<cd:constant name="type" value="type"/>
<cd:constant name="align" value="aliniere"/>
+ <cd:constant name="symalign" value="symaliniere"/>
<cd:constant name="urlspace" value="spatiuurl"/>
<cd:constant name="urlalternative" value="urlalternativ"/>
<cd:constant name="from" value="dela"/>
@@ -465,6 +481,7 @@
<cd:constant name="yscale" value="yscala"/>
<cd:constant name="ystep" value="ystep"/>
<cd:constant name="samepage" value="aceeasipagina"/>
+ <cd:constant name="itemalign" value="itemalign"/>
<cd:constant name="sidealign" value="sidealign"/>
<cd:constant name="side" value="parte"/>
<cd:constant name="fieldlayer" value="fieldlayer"/>
@@ -472,6 +489,7 @@
<cd:constant name="fieldbackgroundcolor" value="culoarefundalcamp"/>
<cd:constant name="fieldframecolor" value="culoareframecamp"/>
<cd:constant name="fieldoffset" value="offsetcamp"/>
+ <cd:constant name="action" value="actiune"/>
<cd:constant name="openaction" value="actiunedeschidere"/>
<cd:constant name="closeaction" value="actiuneinchidere"/>
<cd:constant name="openpageaction" value="actiunedeschiderepagina"/>
@@ -558,6 +576,7 @@
<cd:variable name="mirrored" value="oglindit"/>
<cd:variable name="global" value="global"/>
<cd:variable name="grid" value="grila"/>
+ <cd:variable name="nogrid" value="nogrid"/>
<cd:variable name="big" value="mare"/>
<cd:variable name="bigbodyfont" value="bigbodyfont"/>
<cd:variable name="bigpreference" value="preferintamare"/>
@@ -667,6 +686,7 @@
<cd:variable name="display" value="display"/>
<cd:variable name="reverse" value="reverse"/>
<cd:variable name="fit" value="ajustat"/>
+ <cd:variable name="nofit" value="nofit"/>
<cd:variable name="postscript" value="postscript"/>
<cd:variable name="preview" value="previzualizare"/>
<cd:variable name="program" value="program"/>
@@ -727,6 +747,7 @@
<cd:variable name="continue" value="continuu"/>
<cd:variable name="vertical" value="vertical"/>
<cd:variable name="bold" value="aldin"/>
+ <cd:variable name="sansbold" value="sansaldin"/>
<cd:variable name="boldslanted" value="aldininclinat"/>
<cd:variable name="bolditalic" value="aldinitalic"/>
<cd:variable name="quadruple" value="cvadrupul"/>
@@ -933,6 +954,8 @@
<cd:variable name="HideLayer" value="HideLayer"/>
<cd:variable name="VideLayer" value="VideLayer"/>
<cd:variable name="ToggleLayer" value="ToggleLayer"/>
+ <cd:variable name="ShowThumbs" value="ShowThumbs"/>
+ <cd:variable name="ShowBookmarks" value="ShowBookmarks"/>
</cd:variables>
<cd:variables>
diff --git a/Master/texmf-dist/tex/context/patterns/lang-agr.pat b/Master/texmf-dist/tex/context/patterns/lang-agr.pat
index d92d2e17d8b..122bcda219b 100644
--- a/Master/texmf-dist/tex/context/patterns/lang-agr.pat
+++ b/Master/texmf-dist/tex/context/patterns/lang-agr.pat
@@ -34,10 +34,11 @@
ο1
Ï…1
ω1
-α2Ϊ1
-η2Ϊ1
-ω2Ϊ1
+á¾³1
+ῃ1
+ῳ1
α2ι
+α2ί
α2ί
α2ὶ
α2ῖ
@@ -49,27 +50,31 @@
α2ἵ
α2ἳ
α2ἷ
+ά3ι
ά3ι
ᾶ3ι
ἀ3ι
á¼3ι
α2υ
+α2Ï
α2ύ
α2ὺ
α2ῦ
α2á½
α2ὔ
-α2psiliὺ
+α2ὒ
α2ὖ
α2ὑ
α2ὕ
α2ὓ
α2ὗ
+ά3υ
á½±3Ï…
ᾶ3υ
á¼€3Ï…
á¼3Ï…
ε2ι
+ε2ί
ε2ί
ε2ὶ
ε2ῖ
@@ -81,41 +86,47 @@
ε2ἵ
ε2ἳ
ε2ἷ
+έ3ι
έ3ι
á¼3ι
ἑ3ι
ε2υ
+ε2Ï
ε2ύ
ε2ὺ
ε2ῦ
ε2á½
ε2ὔ
-ε2psiliὺ
+ε2ὒ
ε2ὖ
ε2ὑ
ε2ὕ
ε2ὓ
ε2ὗ
+έ3υ
á½³3Ï…
ἑ3υ
á¼3Ï…
η2υ
+η2Ï
η2ύ
η2ὺ
η2ῦ
η2á½
η2ὔ
-η2psiliὺ
+η2ὒ
η2ὖ
η2ὑ
η2ὕ
η2ὓ
η2ὗ
+ή3υ
á½µ3Ï…
ῆ3υ
á¼ 3Ï…
ἡ3υ
ο2ι
+ο2ί
ο2ί
ο2ὶ
ο2ῖ
@@ -127,25 +138,29 @@
ο2ἵ
ο2ἳ
ο2ἷ
+ό3ι
ό3ι
ὀ3ι
á½3ι
ο2υ
+ο2Ï
ο2ύ
ο2ὺ
ο2ῦ
ο2á½
ο2ὔ
-ο2psiliὺ
+ο2ὒ
ο2ὖ
ο2ὑ
ο2ὕ
ο2ὓ
ο2ὗ
+ό3υ
á½¹3Ï…
á½€3Ï…
á½3Ï…
υ2ι
+υ2ί
Ï…2á½·
υ2ὶ
Ï…2á¿–
@@ -157,14 +172,17 @@
Ï…2á¼µ
Ï…2á¼³
Ï…2á¼·
+Ï3ι
ύ3ι
ῦ3ι
á½3ι
ὑ3ι
ου3ι
+όυ4ι
όυ4ι
ὀυ4ι
á½Ï…4ι
+ο3υί
ο3υί
ο3υῖ
4β.
@@ -185,24 +203,6 @@
4φ.
4χ.
4ψ.
-4oxiaoxia
-4βoxiaoxia
-4γoxiaoxia
-4δoxiaoxia
-4ζoxiaoxia
-4θoxiaoxia
-4κoxiaoxia
-4λoxiaoxia
-4μoxiaoxia
-4νoxiaoxia
-4ξoxiaoxia
-4Ï€oxiaoxia
-4Ïoxiaoxia
-4σoxiaoxia
-4Ï„oxiaoxia
-4φoxiaoxia
-4χoxiaoxia
-4ψoxiaoxia
.β4
.γ4
.δ4
@@ -231,7 +231,7 @@
2ν1ν
2Ï€1Ï€
2Ï1Ï
-psili2Ï1dasia2Ï
+2ῤ1ῥ
2σ1σ
2Ï„1Ï„
2φ1φ
@@ -459,296 +459,386 @@ psili2Ï1dasia2Ï
2ψ1τ
2ψ1φ
2ψ1χ
-4βδoxiaoxia
-4βλoxiaoxia
-4βμoxiaoxia
-4βνoxiaoxia
-4βÏoxiaoxia
-4γδoxiaoxia
-4γλoxiaoxia
-4γμoxiaoxia
-4γνoxiaoxia
-4γÏoxiaoxia
-4δμoxiaoxia
-4δνoxiaoxia
-4δÏoxiaoxia
-4ζβoxiaoxia
-4θλoxiaoxia
-4λμoxiaoxia
-4θνoxiaoxia
-4θÏoxiaoxia
-4κλoxiaoxia
-4κμoxiaoxia
-4κνoxiaoxia
-4κÏoxiaoxia
-4κτoxiaoxia
-4μνoxiaoxia
-4πλoxiaoxia
-4πμoxiaoxia
-4πνoxiaoxia
-4Ï€Ïoxiaoxia
-4πτoxiaoxia
-4σβoxiaoxia
-4σγoxiaoxia
-4σδoxiaoxia
-4σθoxiaoxia
-4σκoxiaoxia
-4σμoxiaoxia
-4σπoxiaoxia
-4στoxiaoxia
-4σφoxiaoxia
-4σχoxiaoxia
-4φθoxiaoxia
-4φλoxiaoxia
-4φμoxiaoxia
-4φνoxiaoxia
-4φÏoxiaoxia
-4χθoxiaoxia
-4χλoxiaoxia
-4χμoxiaoxia
-4χνoxiaoxia
-4χÏoxiaoxia
+ἀγω2ν1άÏ
ἀγω2ν1á½±Ï
ἀγω2ν1αÏ
+ἀδιέ2ξ1
ἀδιέ2ξ1
ἀδιε2ξ1
+ἀδυ2σ1ώ
ἀδυ2σ1ώ
ἀδυ2σ1ω
+á¼Î»ÏŒ2σ1
á¼Î»á½¹2σ1
á¼Î»Î¿2σ1
+ἀμπαλί2ν1
ἀμπαλί2ν1
ἀμπαλι2ν1
+ἀμφί2σ1β
ἀμφί2σ1β
ἀμφι2σ1β
+ἀμφί2σ1ω
ἀμφί2σ1ω
+ἀμφι2σ1ώ
ἀμφι2σ1ώ
+ἀ2ν1αγής.
ἀ2ν1αγής.
ἀ2ν1αγὴς.
+ἀ2ν1αγήσ.
ἀ2ν1αγήσ.
ἀ2ν1αγὴσ.
ἀ2ν1αγο
ἀ2ν1αγεῖ.
ἀ2ν1αγῆ.
+ἀ2ν1αγές.
ἀ2ν1αγές.
ἀ2ν1αγὲς.
+ἀ2ν1αγέσ.
ἀ2ν1αγέσ.
ἀ2ν1αγὲσ.
ἀ2ν1αγεῖς.
ἀ2ν1αγεῖσ.
ἀ2ν1αγῶν.
+ἀ2ν1αγέσι
ἀ2ν1αγέσι
ἀ2ν1αγῆ
+ἀ2ν1άγκυ
ἀ2ν1άγκυ
+á¼€2ν1αγκÏ
ἀ2ν1αγκύ
ἄ2ν1αγν
+ἀ2ν1άγν
ἀ2ν1άγν
ἀ2ν1αγν
+ἀ3ν2αγνά
ἀ3ν2αγνά
ἀ3ν2αγνω
+ἀ3ν2άγνω
ἀ3ν2άγνω
+ἀ3ν2αγνώ
ἀ3ν2αγνώ
+á¼€2ν1αγÏί
á¼€2ν1αγÏá½·
á¼€2ν1αγÏá¿–
á¼€2ν1αγÏι
+ἀ2ν1άγωγ
ἀ2ν1άγωγ
+ἀ2ν1αγώγ
ἀ2ν1αγώγ
+ἀ3ν2αγώγι
ἀ3ν2αγώγι
+ἀ3ν2αγωγί
ἀ3ν2αγωγί
+ἀ4ν3αγωγία
ἀ4ν3αγωγία
+ἀ2ν1άδελ
ἀ2ν1άδελ
+ἀ2ν1αδέλ
ἀ2ν1αδέλ
+ἀ2ν1άελπ
ἀ2ν1άελπ
+ἀ2ν1αέλπ
ἀ2ν1αέλπ
ἄ2ν1αθλ
+ἀ2ν1άθλ
ἀ2ν1άθλ
+ἀ2ν1αίδ
ἀ2ν1αίδ
ἀ2ν1αιδ
ἄ2ν1αιμ
+ἀ2ν1αίμ
ἀ2ν1αίμ
ἀ2ν1αιμ
+ἀ2ν1αίσθ
ἀ2ν1αίσθ
ἀ2ν1αισθ
ἀ2ν1αισι
+ἀ2ν1αισί
ἀ2ν1αισί
+ἀ2ν1αίσχ
ἀ2ν1αίσχ
ἀ2ν1αισχ
+ἀ2ν1αίτ
ἀ2ν1αίτ
ἀ2ν1αιτ
+ἀ2ν1άκαν
ἀ2ν1άκαν
+ἀ2ν1ακάν
ἀ2ν1ακάν
+ἀ2ν1ακόλο
ἀ2ν1ακόλο
ἀ2ν1ακολο
ἀ2ν1αλγ
ἀ2ν1αλδ
ἀ3ν2αλδα
+ἀ3ν2αλδήσκ
ἀ3ν2αλδήσκ
+ἀ2ν1άλειπ
ἀ2ν1άλειπ
+ἀ2ν1αλείπ
ἀ2ν1αλείπ
ἀ2ν1αλειφ
+ἀ2ν1άλειφ
ἀ2ν1άλειφ
+ἀ2ν1αλείφ
ἀ2ν1αλείφ
+ἀ2ν1αλήθ
ἀ2ν1αλήθ
ἀ2ν1αληθ
+ἀ2ν1άλθ
ἀ2ν1άλθ
ἀ2ν1αλθ
+ἀ2ν1άλιπ
ἀ2ν1άλιπ
+ἀ2ν1αλίπ
ἀ2ν1αλίπ
+ἀ2ν1άλιστ
ἀ2ν1άλιστ
+ἀ2ν1αλίστ
ἀ2ν1αλίστ
ἀ2ν1αλκ
ἄ2ν1αλκ
+ἀ2ν1άλκ
ἀ2ν1άλκ
+ἀ2ν1άλλ
ἀ2ν1άλλ
ἀ2ν1αλλ
+ἀ3ν2άλλο
ἀ3ν2άλλο
+ἀ3ν2άλλε
ἀ3ν2άλλε
ἄ2ν1αλμ
+ἀ2ν1άλμ
ἀ2ν1άλμ
ἀ2ν1αλμ
ἄ2ν1αλο
+ἀ2ν1άλου
ἀ2ν1άλου
+ἀ2ν1άλῳ.
ἀ2ν1άλῳ.
ἄ2ν1αλε.
+ἀ2ν1άλοι
ἀ2ν1άλοι
+ἀ2ν1άλων.
ἀ2ν1άλων.
ἄ2ν1αλτ
+ἀ2ν1άλτ
ἀ2ν1άλτ
+ἀ2ν1αμάξ
ἀ2ν1αμάξ
ἀ2ν1αμαξ
+á¼€2ν1αμάÏÏ„
á¼€2ν1αμάÏÏ„
á¼€2ν1αμαÏÏ„
+ἀ2ν1αμέλγ
ἀ2ν1αμέλγ
ἀ2ν1αμελγ
ἀ2ν1αμπ
+ἀ2ν1άμπ
ἀ2ν1άμπ
ἀ2ν1αμφ
ἀναμφι2σ1
+ἀ2ν1ανάγκ
ἀ2ν1ανάγκ
ἀ2ν1αναγκ
ἄ2ν1ανδ
+ἀ2ν1άνδ
ἀ2ν1άνδ
ἀ2ν1ανθ
+ἀ3ν2ανθέ
ἀ3ν2ανθέ
+ἀ4ν3ανθές.
ἀ4ν3ανθές.
ἀ4ν3ανθὲς.
+ἀ4ν3ανθέσ.
ἀ4ν3ανθέσ.
ἀ4ν3ανθὲσ.
+ἀ4ν3ανθέσι
ἀ4ν3ανθέσι
+ἀ2ν1άνιο
ἀ2ν1άνιο
+ἀ2ν1ανίο
ἀ2ν1ανίο
+ἀ2ν1ανίω
ἀ2ν1ανίω
ἀ2ν1ανταγ
ἀ2ν1ανταπ
+ἀ2ν1αντί
ἀ2ν1αντί
ἀ2ν1αντι
ἀνα2ξ1αγ
+ἀνά2ξ1αν
ἀνά2ξ1αν
+ἀνα2ξ1άν
ἀνα2ξ1άν
ἀνα2ξ1αν
+ἀνά2ξ1αÏ
ἀνά2ξ1αÏ
+ἀνα2ξ1άÏ
ἀνα2ξ1á½±Ï
+ἀνά2ξ1ιπ
ἀνά2ξ1ιπ
+ἀνα2ξ1ίπ
ἀνα2ξ1ίπ
+ἀ2ν1αξιόλ
ἀ2ν1αξιόλ
ἀ2ν1αξιολ
+ἀ2ν1αξιόπ
ἀ2ν1αξιόπ
ἀ2ν1αξιοπ
+ἀ2ν1άξιο
ἀ2ν1άξιο
+ἀ2ν1αξίο
ἀ2ν1αξίο
+ἀ2ν1αξίω
ἀ2ν1αξίω
+ἀ2ν1αξία
ἀ2ν1αξία
ἀ2ν1αξῖα
+ἀ2ν1απάλλα
ἀ2ν1απάλλα
+ἀ2ν1απαλλά
ἀ2ν1απαλλά
+á¼€2ν1απάÏÏ„
á¼€2ν1απάÏÏ„
á¼€2ν1απαÏÏ„
+á¼€2ν1απαÏδ
ἀ2ν1απαύδ
ἀ2ν1απαυδ
+ἀ2ν1απόβ
ἀ2ν1απόβ
ἀ2ν1αποβ
+ἀ2ν1απόγ
ἀ2ν1απόγ
ἀ2ν1απογ
+ἀ2ν1αποδή
ἀ2ν1αποδή
ἀ2ν1αποδη
+ἀ2ν1απόδο
ἀ2ν1απόδο
+ἀ2ν1αποδό
ἀ2ν1αποδό
+á¼€2ν1απόδÏ
á¼€2ν1απόδÏ
á¼€2ν1αποδÏ
+ἀ2ν1απόλαυ
ἀ2ν1απόλαυ
+á¼€2ν1απολαÏ
ἀ2ν1απολαύ
+ἀ2ν1απολό
ἀ2ν1απολό
ἀ2ν1απολο
+ἀ2ν1απόλυ
ἀ2ν1απόλυ
+á¼€2ν1απολÏ
ἀ2ν1απολύ
+ἀ2ν1απόν
ἀ2ν1απόν
ἀ2ν1απον
+ἀ2ν1απόπ
ἀ2ν1απόπ
ἀ2ν1αποπ
+ἀ2ν1απόσ
ἀ2ν1απόσ
ἀ2ν1αποσ
+ἀ2ν1απότε
ἀ2ν1απότε
ἀ2ν1αποτε
+ἀ2ν1απότμ
ἀ2ν1απότμ
ἀ2ν1αποτμ
+á¼€2ν1απότÏ
á¼€2ν1απότÏ
á¼€2ν1αποτÏ
+á¼€2ν1αÏά
á¼€2ν1αÏá½±
á¼€2ν1αÏα
+á¼€2ν1άÏ
á¼€2ν1á½±Ï
á¼€2ν1αÏ
ἄ2ν1αÏ
+á¼€3ν2αÏίτ
á¼€3ν2αÏá½·Ï„
á¼€3ν2αÏá¿–Ï„
á¼€3ν2αÏιτ
á¼€3ν2αÏÏ€
+á¼€3ν2άÏÏ
á¼€3ν2á½±ÏÏ
á¼€3ν2αÏÏ
á¼€4ν3αÏÏαγ
á¼€3ν2αÏÏ„
+á¼€3ν2αÏÏÏ„
á¼€3ν2αÏύτ
+ἀ2ν1άσκη
ἀ2ν1άσκη
+ἀ2ν1ασκή
ἀ2ν1ασκή
ἄ2ν1ασπι
+ἀ2ν1ασπί
ἀ2ν1ασπί
+ἀ2ν1άσσατ
ἀ2ν1άσσατ
+ἀ2ν1ασσάτ
ἀ2ν1ασσάτ
+ἀ2ν1άστει
ἀ2ν1άστει
+ἀ2ν1αστεί
ἀ2ν1αστεί
+ἀ3ν2αστείβ
ἀ3ν2αστείβ
+á¼€3ν2άστειÏ
á¼€3ν2άστειÏ
+á¼€3ν2αστείÏ
á¼€3ν2αστείÏ
+ἀ3ν2άστειχ
ἀ3ν2άστειχ
+ἀ3ν2αστείχ
ἀ3ν2αστείχ
ἀ2ν1ατεὶ.
+ἀ2ν1ατεί.
ἀ2ν1ατεί.
ἀ2ν1ατὶ.
+ἀ2ν1ατί.
ἀ2ν1ατί.
ἄ2ν1ατος.
ἄ2ν1ατοσ.
+ἀ2ν1άτου.
ἀ2ν1άτου.
+ἀ2ν1άτω
ἀ2ν1άτω
ἄ2ν1ατον.
ἄ2ν1ατε
ἄ2ν1ατοι.
+ἀ2ν1άτοις.
ἀ2ν1άτοις.
+ἀ2ν1άτοισ.
ἀ2ν1άτοισ.
+ἀ2ν1άττ
ἀ2ν1άττ
ἀ2ν1αττ
+á¼€2ν1αÏγ
ἀ2ν1αύγ
ἀ2ν1αυγ
+á¼€2ν1αÏδ
ἀ2ν1αύδ
ἀ2ν1αυδ
+ἀ3ν2αυδί
ἀ3ν2αυδί
ἀ3ν2αυδι
ἄ2ν1αυδ
ἄ2ν1αυλ
+á¼€2ν1αÏλ
ἀ2ν1αύλ
+á¼€2ν1αÏξ
ἀ2ν1αύξ
ἀ2ν1αυξ
+á¼€2ν1αÏχ
ἀ2ν1αύχ
ἀ2ν1αυχ
+á¼€2ν1αφαίÏ
á¼€2ν1αφαίÏ
á¼€2ν1αφαιÏ
+ἀ2ν1αφή
ἀ2ν1αφή
ἀ2ν1αφὴ
ἀ2ν1αφοῦ
@@ -756,378 +846,616 @@ psili2Ï1dasia2Ï
ἀ2ν1αφεῖ
ἀ2ν1αφοῖ
ἀ2ν1εφῶν.
+ἀ2ν1αφέ
ἀ2ν1αφέ
ἀ2ν1αφὲ
ἀ3ν2αφῆν
+á¼€2ν1αφÏόδ
á¼€2ν1αφÏόδ
á¼€2ν1αφÏοδ
ἄ2ν1αφÏ
+á¼€2ν1άφÏ
á¼€2ν1άφÏ
+á¼€2ν1αχÏÏ
á¼€2ν1αχύÏ
á¼€2ν1αχυÏ
+ἀνδÏÏŒ2σ1α
ἀνδÏá½¹2σ1α
ἀνδÏο2σ1α
+ἀ2ν1έγγ
ἀ2ν1έγγ
ἀ2ν1εγγ
+á¼€2ν1έγεÏÏ„
á¼€2ν1έγεÏÏ„
+á¼€2ν1εγέÏÏ„
á¼€2ν1εγέÏÏ„
ἀ2ν1εγκ
+ἀ2ν1έγκ
ἀ2ν1έγκ
ἀ2ν1εγχ
+ἀ2ν1εδά
ἀ2ν1εδά
ἀ2ν1εδα
+ἀ2ν1έδεσ
ἀ2ν1έδεσ
+ἀ2ν1εδέσ
ἀ2ν1εδέσ
+á¼€2ν1έδÏασ
á¼€2ν1έδÏασ
+á¼€2ν1εδÏάσ
á¼€2ν1εδÏάσ
+á¼€2ν1εέÏ
á¼€2ν1εέÏ
á¼€2ν1εεÏ
+ἀ2ν1εθέλ
ἀ2ν1εθέλ
ἀ2ν1εθελ
+ἀ2ν1έθι
ἀ2ν1έθι
+ἀ2ν1εθί
ἀ2ν1εθί
+ἀ2ν1είδε
ἀ2ν1είδε
+ἀ2ν1ειδέ
ἀ2ν1ειδέ
+ἀ2ν1είδω
ἀ2ν1είδω
+ἀ2ν1ειδώ
ἀ2ν1ειδώ
+ἀ2ν1είκα
ἀ2ν1είκα
+ἀ2ν1εικά
ἀ2ν1εικά
+ἀ2ν1εικό
ἀ2ν1εικό
ἀ2ν1εικο
+ἀ2ν1ειλεί
ἀ2ν1ειλεί
ἀ2ν1ειλει
+ἀ2ν1είμα
ἀ2ν1είμα
+ἀ2ν1εί2σ1ακ
ἀ2ν1εί2σ1ακ
+ἀ2ν1ει2σ1άκ
ἀ2ν1ει2σ1άκ
+ἀ2ν1εί2σ1ο
ἀ2ν1εί2σ1ο
+ἀ2ν1ει2σ1ό
ἀ2ν1ει2σ1ό
á¼€2ν1ει2σ1φοÏ
+á¼€2ν1εί2σ1φοÏ
á¼€2ν1εί2σ1φοÏ
+á¼€2ν1ει2σ1φόÏ
á¼€2ν1ει2σ1φόÏ
+ἀ2ν1έκ
ἀ2ν1έκ
ἀ2ν1εκ
+ἀ3ν2έκα
ἀ3ν2έκα
+ἀ3ν2εκάς.
ἀ3ν2εκάς.
ἀ3ν2εκὰς.
+ἀ3ν2εκάσ.
ἀ3ν2εκάσ.
ἀ3ν2εκὰσ.
ἀ3ν2εκτ
+ἀ4ν3έ2κ1τιτ
ἀ4ν3έ2κ1τιτ
+ἀ4ν3ε2κ1τίτ
ἀ4ν3ε2κ1τίτ
ἀνε2κ1λιπ
+ἀνε2κ1λό
ἀνε2κ1λό
ἀνε2κ1λο
+ἀ2ν1έλαι
ἀ2ν1έλαι
ἀ2ν1ελαι
+ἀ2ν1ελάτ
ἀ2ν1ελάτ
ἀ2ν1ελατ
+ἀ2ν1έλεγκ
ἀ2ν1έλεγκ
+ἀ2ν1ελέγκ
ἀ2ν1ελέγκ
ἀ2ν1ελεγξ
+ἀ2ν1ελέη
ἀ2ν1ελέη
+ἀ2ν1ελεή
ἀ2ν1ελεή
+ἀ2ν1έλεο
ἀ2ν1έλεο
+ἀ2ν1ελέο
ἀ2ν1ελέο
+ἀ2ν1ελέω
ἀ2ν1ελέω
+ἀ2ν1έλεε
ἀ2ν1έλεε
+ἀ2ν1ελκή
ἀ2ν1ελκή
ἀ2ν1ελκὴ
ἀ2ν1ελκο
ἀ2ν1ελκῆ
+ἀ2ν1ελκές.
ἀ2ν1ελκές.
ἀ2ν1ελκὲς.
+ἀ2ν1ελκέσ.
ἀ2ν1ελκέσ.
ἀ2ν1ελκὲσ.
ἀ2ν1ελκε
ἀ2ν1ελκῶ
+ἀ2ν1ελκέσ
ἀ2ν1ελκέσ
ἄ2ν1ελκτ
+ἀ2ν1έλκτ
ἀ2ν1έλκτ
+ἀ2ν1έλκω
ἀ2ν1έλκω
+ἀ2ν1ελκώ
ἀ2ν1ελκώ
+ἀ2ν1έλλ
ἀ2ν1έλλ
+ἀ2ν1έλπι
ἀ2ν1έλπι
+ἀ2ν1ελπί
ἀ2ν1ελπί
+á¼€2ν1έλυτÏ
á¼€2ν1έλυτÏ
+á¼€2ν1ελÏÏ„Ï
á¼€2ν1ελύτÏ
+ἀ2ν1έμβ
ἀ2ν1έμβ
ἀ2ν1εμβ
+ἀ2ν1έμετ
ἀ2ν1έμετ
+ἀ2ν1εμέτ
ἀ2ν1εμέτ
+ἀ2ν1έμπ
ἀ2ν1έμπ
ἀ2ν1εμπ
+ἀ2ν1έμφ
ἀ2ν1έμφ
ἀ2ν1εμφ
+ἀ2ν1έν
ἀ2ν1έν
ἀ2ν1εν
+ἀ3ν2ένει
ἀ3ν2ένει
+ἀ3ν2ενή
ἀ3ν2ενή
+ἀ3ν2έντες.
ἀ3ν2έντες.
+ἀ3ν2έντεσ.
ἀ3ν2έντεσ.
ἀ2ν1ε2ξ1
+ἀ3ν2ε3ξ2ίκα
ἀ3ν2ε3ξ2ίκα
+ἀ3ν2ε3ξ2ικά
ἀ3ν2ε3ξ2ικά
+á¼€2ν1έοÏ
á¼€2ν1έοÏ
+á¼€2ν1εόÏ
á¼€2ν1εόÏ
ἀ2ν1επ
ἀ3ν2επν
ἀ3ν2επτ
á¼€2ν1εÏαστ
+á¼€2ν1έÏαστ
á¼€2ν1á½³Ïαστ
+á¼€2ν1εÏάστ
á¼€2ν1εÏάστ
á¼€2ν1εÏγ
ἄ2ν1εÏγ
+á¼€2ν1έÏγ
á¼€2ν1á½³Ïγ
+á¼€2ν1έÏεικ
á¼€2ν1á½³Ïεικ
+á¼€2ν1εÏείκ
á¼€2ν1εÏείκ
+á¼€2ν1έÏεισ
á¼€2ν1á½³Ïεισ
+á¼€2ν1εÏείσ
á¼€2ν1εÏείσ
+á¼€2ν1εÏεÏνητ
á¼€2ν1εÏεύνητ
+á¼€2ν1εÏευνήτ
á¼€2ν1εÏευνήτ
+á¼€2ν1εÏί
á¼€2ν1εÏá½·
á¼€2ν1εÏι
+á¼€2ν1εÏυθÏίαστ
á¼€2ν1εÏυθÏίαστ
+á¼€2ν1εÏυθÏιάστ
á¼€2ν1εÏυθÏιάστ
+ἀ2ν1έστι
ἀ2ν1έστι
+ἀ2ν1εστί
ἀ2ν1εστί
+ἀ2ν1έται
ἀ2ν1έται
+ἀ2ν1εταί
ἀ2ν1εταί
+ἀ2ν1έτοι
ἀ2ν1έτοι
+ἀ2ν1ετοί
ἀ2ν1ετοί
ἀ2ν1ετυ
+ἀ2ν1έτυ
ἀ2ν1έτυ
+á¼€2ν1ετÏ
ἀ2ν1ετύ
+á¼€2ν1εÏθ
ἀ2ν1εύθ
ἀ2ν1ευθ
ἄ2ν1ευκ
+á¼€2ν1εÏκ
ἀ2ν1εύκ
ἀ2ν1ευλ
+á¼€2ν1εÏÏετ
á¼€2ν1εύÏετ
+á¼€2ν1ευÏέτ
á¼€2ν1ευÏέτ
+ἀ2ν1ευφήμητ
ἀ2ν1ευφήμητ
+ἀ2ν1ευφημήτ
ἀ2ν1ευφημήτ
+á¼€2ν1εÏχ
ἀ2ν1εύχ
ἀ2ν1ευχ
+á¼€2ν1εÏξ
ἀ2ν1εύξ
ἀ2ν1ευξ
ἀ2ν1ηυξ
ἀ2ν1ηῦγ
ἀ2ν1ηυγ
ἀ2ν1ευκτ
+ἀ2ν1έφ
ἀ2ν1έφ
ἀ2ν1εφ
+ἀ3ν2εφάλ
ἀ3ν2εφάλ
+ἀ3ν2έφελ
ἀ3ν2έφελ
+ἀ3ν2εφέλ
ἀ3ν2εφέλ
+ἀ2ν1εχέ
ἀ2ν1εχέ
ἀ2ν1εχε
+ἀ2ν1έψα
ἀ2ν1έψα
+ἀ2ν1εψά
ἀ2ν1εψά
ἀ2ν1ηγεμ
+ἀ2ν1ήδ
ἀ2ν1ήδ
ἀ2ν1ηδ
+ἀ2ν1ήκεσ
ἀ2ν1ήκεσ
+ἀ2ν1ηκέσ
ἀ2ν1ηκέσ
+ἀ2ν1ήκο
ἀ2ν1ήκο
+ἀ2ν1ηκό
ἀ2ν1ηκό
ἀ2ν1ηκο
+ἀ2ν1ηλάκ
ἀ2ν1ηλάκ
ἀ2ν1ηλακ
+ἀ2ν1ήλατος.
ἀ2ν1ήλατος.
+ἀ2ν1ήλατοσ.
ἀ2ν1ήλατοσ.
+ἀ2ν1ηλάτου
ἀ2ν1ηλάτου
+ἀ2ν1ηλάτω
ἀ2ν1ηλάτω
+ἀ2ν1ήλατον.
ἀ2ν1ήλατον.
+ἀ2ν1ήλατε.
ἀ2ν1ήλατε.
+ἀ2ν1ηλάτοι
ἀ2ν1ηλάτοι
+ἀ2ν1ήλατοι
ἀ2ν1ήλατοι
+ἀ2ν1ήλατα
ἀ2ν1ήλατα
ἀ2ν1ηλεγ
+ἀ2ν1ηλεή
ἀ2ν1ηλεή
ἀ2ν1ηλεὴ
ἀ2ν1ηλεο
ἀ2ν1ηλεε
ἀ2ν1ηλεῶ
+ἀ2ν1ηλεέ
ἀ2ν1ηλεέ
ἀ2ν1ηλεὲ
ἀ2ν1ηλεῆ
+ἀ2ν1ηλέη
ἀ2ν1ηλέη
+ἀ2ν1ήλειπ
ἀ2ν1ήλειπ
+ἀ2ν1ηλείπ
ἀ2ν1ηλείπ
+ἀ2ν1ηλή
ἀ2ν1ηλή
ἀ2ν1ηλὴ
ἀ2ν1ηλοῦ
ἀ2ν1ηλεῖ
ἀ2ν1ηλῆ
+ἀ2ν1ηλέ
ἀ2ν1ηλέ
ἀ2ν1ηλὲ
ἀ2ν1ηλοῖ
ἀ2ν1ηλῶ
+ἀ2ν1ήλικ
ἀ2ν1ήλικ
+ἀ2ν1ηλίκ
ἀ2ν1ηλίκ
+ἀ2ν1ήλιο
ἀ2ν1ήλιο
+ἀ2ν1ηλίο
ἀ2ν1ηλίο
+ἀ2ν1ηλίω
ἀ2ν1ηλίω
+ἀ2ν1ήλια
ἀ2ν1ήλια
+ἀ2ν1ήλιπ
ἀ2ν1ήλιπ
+ἀ2ν1ηλίπ
ἀ2ν1ηλίπ
ἀ2ν1ηλιφ
+ἀ2ν1ήμ
ἀ2ν1ήμ
ἀ2ν1ημ
+ἀ2ν1ήνυ
ἀ2ν1ήνυ
+á¼€2ν1ηνÏ
ἀ2ν1ηνύ
+á¼€2ν1ήÏει
á¼€2ν1á½µÏει
+á¼€2ν1ηÏεί
á¼€2ν1ηÏεί
+á¼€2ν1ηÏέμ
á¼€2ν1ηÏέμ
á¼€2ν1ηÏεμ
á¼€2ν1ηÏεφ
+á¼€2ν1ήÏι
á¼€2ν1á½µÏι
+á¼€2ν1ηÏί
á¼€2ν1ηÏá½·
+á¼€2ν1ήÏοτ
á¼€2ν1á½µÏοτ
+á¼€2ν1ηÏότ
á¼€2ν1ηÏότ
+ἀ2ν1ήσσ
ἀ2ν1ήσσ
ἀ2ν1ησσ
+ἀ2ν1ήττ
ἀ2ν1ήττ
ἀ2ν1ηττ
+ἀ2ν1ήφα
ἀ2ν1ήφα
ἀ2ν1ηφα
+ἀ2ν1ίατ
ἀ2ν1ίατ
+ἀ2ν1ιάτ
ἀ2ν1ιάτ
+ἀ2ν1ίδιο
ἀ2ν1ίδιο
+ἀ2ν1ιδίο
ἀ2ν1ιδίο
+ἀ2ν1ιδίω
ἀ2ν1ιδίω
+ἀ2ν1ίδια
ἀ2ν1ίδια
ἀ2ν1ιδιτ
ἄ2ν1ιδÏος
ἄ2ν1ιδÏοσ
+á¼€2ν1ίδÏου
á¼€2ν1ίδÏου
+á¼€2ν1ίδÏω
á¼€2ν1ίδÏω
ἄ2ν1ιδÏον
ἄ2ν1ιδÏε
+á¼€2ν1ίδÏοι
á¼€2ν1ίδÏοι
ἄ2ν1ιδÏοι
+á¼€2ν1ίδÏÏ…Ï„
á¼€2ν1ίδÏÏ…Ï„
+á¼€2ν1ιδÏÏÏ„
á¼€2ν1ιδÏύτ
á¼€2ν1ιδÏωτ
+á¼€2ν1ιδÏÏŽÏ„
á¼€2ν1ιδÏώτ
+á¼€2ν1ίεÏ
á¼€2ν1ίεÏ
+á¼€2ν1ιέÏ
á¼€2ν1ιέÏ
+á¼€2ν1ιεÏάτ
á¼€2ν1ιεÏάτ
+á¼€3ν2ιέÏω
á¼€3ν2ιέÏω
+ἀ2ν1ίκ
ἀ2ν1ίκ
ἀ2ν1ικ
ἄ2ν1ικ
+ἀ3ν2ίκη
ἀ3ν2ίκη
+ἀ3ν2ική
ἀ3ν2ική
+ἀ2ν1ίλ
ἀ2ν1ίλ
ἀ2ν1ιλ
+ἀ2ν1ίμαστ
ἀ2ν1ίμαστ
+ἀ2ν1ιμάστ
ἀ2ν1ιμάστ
+ἀ2ν1ίου
ἀ2ν1ίου
+á¼€2ν1ιοÏ
ἀ2ν1ιού
ἄ2ν1ιππ
+ἀ2ν1ίππ
ἀ2ν1ίππ
ἀ2ν1ισ
ἄ2ν1ισ
+ἀ2ν1ίσ
ἀ2ν1ίσ
ἀ3ν2ισᾶτ
+ἀ3ν2ισάτ
ἀ3ν2ισάτ
+ἀ3ν2ίστ
ἀ3ν2ίστ
ἀ3ν2ιστ
á¼€4ν3ιστοÏη
+á¼€4ν3ιστόÏη
á¼€4ν3ιστόÏη
+á¼€4ν3ιστοÏή
á¼€4ν3ιστοÏá½µ
+ἀ3ν2ίσχ
ἀ3ν2ίσχ
+ἀ4ν3ίσχυ
ἀ4ν3ίσχυ
ἄ2ν1ιχ
+ἀ2ν1ίχ
ἀ2ν1ίχ
+á¼€2ν1ιχνεÏÏ„
ἀ2ν1ιχνεύτ
+ἀ2ν1ίψ
ἀ2ν1ίψ
ἀ2ν1ιψ
+ἀ2ν1όδε
ἀ2ν1όδε
+ἀ2ν1οδέ
ἀ2ν1οδέ
ἄ2ν1οζ
+ἀ2ν1όζ
ἀ2ν1όζ
ἀ2ν1οικε
ἀ2ν1οικον
ἄ2ν1οικ
+ἀ2ν1οίκ
ἀ2ν1οίκ
+ἀ2ν1οικτί
ἀ2ν1οικτί
ἄ2ν1οικτ
+ἀ2ν1οίκτ
ἀ2ν1οίκτ
+ἀ2ν1οίμωκ
ἀ2ν1οίμωκ
+ἀ2ν1οιμώκ
ἀ2ν1οιμώκ
ἀ2ν1οιμωκ
ἀ2ν1οιν
ἄ2ν1οιν
+ἀ2ν1οίν
ἀ2ν1οίν
ἄ2ν1οιστÏ
+á¼€2ν1οίστÏ
á¼€2ν1οίστÏ
+ἀ2ν1όλ
ἀ2ν1όλ
ἀ2ν1ολ
ἄ2ν1ολ
ἀ3ν2ολκ
ἀ3ν2ολο
+á¼€2ν1ομβÏί
á¼€2ν1ομβÏá½·
á¼€2ν1ομβÏá¿–
ἄ2ν1ομβÏο
+á¼€2ν1όμβÏο
á¼€2ν1όμβÏο
+á¼€2ν1όμβÏω
á¼€2ν1όμβÏω
ἄ2ν1ομβÏα
+ἀ2ν1ομήλ
ἀ2ν1ομήλ
ἀ2ν1ομηλ
+ἀ2ν1ομίλ
ἀ2ν1ομίλ
ἀ2ν1ομιλ
+ἀ2ν1όμιχ
ἀ2ν1όμιχ
ἀ2ν1ομιχ
+ἀ2ν1όμο
ἀ2ν1όμο
+ἀ2ν1ομό
ἀ2ν1ομό
ἀ2ν1ομο
ἀ3ν2ομοθ
+ἀ3ν2όμου.
ἀ3ν2όμου.
+ἀ3ν2όμῳ.
ἀ3ν2όμῳ.
+ἀ3ν2όμω.
ἀ3ν2όμω.
+ἀ2ν2όμοιν.
ἀ2ν2όμοιν.
+ἀ3ν2όμων.
ἀ3ν2όμων.
+ἀ3ν2όμοις.
ἀ3ν2όμοις.
+ἀ3ν2όμοισ.
ἀ3ν2όμοισ.
+ἀ3ν2όμους.
ἀ3ν2όμους.
+ἀ3ν2όμουσ.
ἀ3ν2όμουσ.
+ἀ2ν1όν
ἀ2ν1όν
ἀ2ν1ον
ἄ2ν1οπ
+ἀ2ν1όπ
ἀ2ν1όπ
+á¼€2ν1ÏŒÏ
á¼€2ν1á½¹Ï
á¼€2ν1οÏ
ἄ2ν1οÏ
+á¼€3ν2οÏγάζ
á¼€3ν2οÏγάζ
ἄ3ν2οÏθ
+á¼€3ν2ÏŒÏθ
á¼€3ν2á½¹Ïθ
+á¼€3ν2οÏμά
á¼€3ν2οÏμά
á¼€3ν2οÏÏ„
+á¼€3ν2οÏÏ
á¼€3ν2οÏá½»
+ἀ2ν1όσι
ἀ2ν1όσι
+ἀ2ν1οσί
ἀ2ν1οσί
ἀ2ν1οσι
ἄ2ν1οσμ
+ἀ2ν1όσμ
ἀ2ν1όσμ
+á¼€2ν1όσφÏ
á¼€2ν1όσφÏ
á¼€2ν1οσφÏ
+á¼€2ν1οÏα
ἀ2ν1ούα
+ἀ2ν1ουά
ἀ2ν1ουά
+á¼€2ν1οÏσι
ἀ2ν1ούσι
+ἀ2ν1ουσί
ἀ2ν1ουσί
+á¼€2ν1οÏÏ„
ἀ2ν1ούτ
ἀ2ν1ουτ
ἀ2ν1οφθ
+ἀ2ν1όχευτ
ἀ2ν1όχευτ
+á¼€2ν1οχεÏÏ„
ἀ2ν1οχεύτ
ἄ2ν1οχλ
+ἀ2ν1όχλ
ἀ2ν1όχλ
ἀ2ν1οψ
ἄ2ν1οψ
+ἀ2ν1όψ
ἀ2ν1όψ
ἀντα2ν1ισ
+ἀντα2ν1ίσ
ἀντα2ν1ίσ
ἀντει2σ1
ἀντε2κ1
@@ -1138,58 +1466,83 @@ psili2Ï1dasia2Ï
ἀντιπαÏε2ξ1
ἀντιπÏο2σ1
ἀντιπÏοσ3κ2Ï…
+ἀντισÏ2ν1
ἀντισύ2ν1
ἀντισυ2ν1
+á¼€2ν1Ï
ἀ2ν1ύ
ἀ2ν1υ
ἀ3ν2υμ
+á¼€3ν2Ïσ
ἀ3ν2ύσ
ἀ3ν2υσ
+á¼€2ν1υπέ2Ï1
á¼€2ν1υπέ2Ï1
á¼€2ν1υπε2Ï1
ἄ2ν1ῳδ
ἀ2ν1ῴδ
+ἀ2ν1ώδυ
ἀ2ν1ώδυ
-ἀ2ν1ωδυoxia
+ἀ2ν1ωδύ
+ἀ2ν1ώι
ἀ2ν1ώι
+ἀ2ν1ωί
ἀ2ν1ωί
+ἀ2ν1ώλ
ἀ2ν1ώλ
ἀ2ν1ωλ
+ἀ2ν1ώμ
ἀ2ν1ώμ
ἀ2ν1ωμ
+ἀ2ν1ών
ἀ2ν1ών
ἀ2ν1ων
á¼€2ν1ωÏ
ἄ2ν1ωÏ
+á¼€2ν1ÏŽÏ
á¼€2ν1á½½Ï
ἄ2ν1ωτο
+ἀ2ν1ώτο
ἀ2ν1ώτο
+ἀ2ν1ωφέλ
ἀ2ν1ωφέλ
ἀ2ν1ωφελ
+ἀ2ν1ώχυ
ἀ2ν1ώχυ
+á¼€2ν1ωχÏ
ἀ2ν1ωχύ
ἀπα2ν1αι
+ἀπά2ν1ου
ἀπά2ν1ου
+ἀπα2ν1οÏÏ
ἀπα2ν1ούÏ
á¼Ï€Î±2ξ1
ἀπε2κ1λ
á¼Ï€Îµ2Ï1
ἀποσυ2ν1
+ἀπÏÏŒ2σ1
ἀπÏá½¹2σ1
ἀπÏο2σ1
+ἀπÏÏŒ3σ2κε
ἀπÏá½¹3σ2κε
+ἀπÏο3σ2κέ
ἀπÏο3σ2κέ
+ἀπÏÏŒ3σ2κο
ἀπÏá½¹3σ2κο
+ἀπÏο3σ2κό
ἀπÏο3σ2κό
ἀπÏο3σ2Ï„
á¼Ïπα2ξ1
á¼€ÏÏε2ν1ω
á¼€Ïχισυ2ν1
ἀστε2Ï1ω
+ἀσÏ2ν1
ἀσύ2ν1
ἀσυ2ν1
+ἀξÏ2ν1
ἀξύ2ν1
ἀξυ2ν1
+αá½Ï„έ2κ1μ
αá½Ï„á½³2κ1μ
αá½Ï„ε2κ1μ
αá½Ï„ε2ξ1
@@ -1197,129 +1550,242 @@ psili2Ï1dasia2Ï
.γεÏα2σ1φ
.δα2σ1π
.διαμφι2σ1β
+.διέ2κ1Ïο
.διέ2κ1Ïο
+.διε2κ1ÏÏŒ
.διε2κ1Ïá½¹
+.διέ2ξ1
.διέ2ξ1
.διε2ξ1
.δικα2σ1π
+.διό2σ1κ
.διό2σ1κ
.διο2σ1κ
+.διό2σ1π
.διό2σ1π
.διο2σ1π
+.δί2σ1α
.δί2σ1α
+.δι2σ1ά
.δι2σ1ά
+.δί2σ1η
.δί2σ1η
+.δι2σ1ή
.δι2σ1ή
+.δί2σ1ε
.δί2σ1ε
.δι2σ1ε
.δι2σ1θ
+.δÏ2σ1
.δύ2σ1
.δυ2σ1
+δÏ3σ2ω.
δύ3σ2ω.
+δÏ3σ2εις.
δύ3σ2εις.
+δÏ3σ2εισ.
δύ3σ2εισ.
+δÏ3σ2ει.
δύ3σ2ει.
+.δÏ3σ2ετ
.δύ3σ2ετ
+δÏ3σ2ομεν.
δύ3σ2ομεν.
+δÏ3σ2ουσιν.
δύ3σ2ουσιν.
+δÏ3σ2οιμι.
δύ3σ2οιμι.
+δÏ3σ2οις.
δύ3σ2οις.
+δÏ3σ2οισ.
δύ3σ2οισ.
+δÏ3σ2οι.
δύ3σ2οι.
+δÏ3σ2οιτον.
δύ3σ2οιτον.
+δυ3σ2οίτην.
δυ3σ2οίτην.
+δÏ3σ2οιμεν.
δύ3σ2οιμεν.
+δÏ3σ2οιτε.
δύ3σ2οιτε.
+δÏ3σ2οιεν.
δύ3σ2οιεν.
+δÏ3σ2ειν.
δύ3σ2ειν.
+δÏ3σ2ων.
δύ3σ2ων.
+δÏ3σ2ον
δύ3σ2ον
+δυ3σ2όν
δυ3σ2όν
+δÏ3σ2ουσ
δύ3σ2ουσ
+δυ3σ2οÏσ
δυ3σ2ούσ
+δÏ3σ2ῃ
δύ3σ2ῃ
+δÏ3σ2ητον.
δύ3σ2ητον.
+δÏ3σ2ωμεν.
δύ3σ2ωμεν.
+δÏ3σ2ωσι.
δύ3σ2ωσι.
+δÏ3σ2αιμι.
δύ3σ2αιμι.
+δÏ3σ2αις.
δύ3σ2αις.
+δÏ3σ2ειας.
δύ3σ2ειας.
+δÏ3σ2αισ.
δύ3σ2αισ.
+δÏ3σ2ειασ.
δύ3σ2ειασ.
+δÏ3σ2αι.
δύ3σ2αι.
+δÏ3σ2ειε.
δύ3σ2ειε.
+δÏ3σ2αιτον.
δύ3σ2αιτον.
+δυ3σ2αίτην.
δυ3σ2αίτην.
+δÏ3σ2αιμεν.
δύ3σ2αιμεν.
+δÏ3σ2αιτε.
δύ3σ2αιτε.
+δÏ3σ2αιεν
δύ3σ2αιεν
+δÏ3σ2ειαν.
δύ3σ2ειαν.
+δÏ3σ2ον.
δύ3σ2ον.
+δυ3σ2άτω.
δυ3σ2άτω.
+δÏ3σ2ατον.
δύ3σ2ατον.
+δυ3σ2άτων.
δυ3σ2άτων.
+δÏ3σ2ατε.
δύ3σ2ατε.
+δυ3σ2άντων.
δυ3σ2άντων.
+δÏ3σ2ας.
δύ3σ2ας.
+δÏ3σ2αν.
δύ3σ2αν.
+δÏ3σ2αντ
δύ3σ2αντ
+δυ3σ2άντ
δυ3σ2άντ
+δÏ3σ2ασ
δύ3σ2ασ
+δυ3σ2άσ
δυ3σ2άσ
+δÏ3σ2ομαι.
δύ3σ2ομαι.
+.δÏ3σ2εσ
.δύ3σ2εσ
+δυ3σ2όμεθα.
δυ3σ2όμεθα.
+δÏ3σ2ονται.
δύ3σ2ονται.
+δυ3σ2οίμην.
δυ3σ2οίμην.
+δÏ3σ2οιο.
δύ3σ2οιο.
+δÏ3σ2οιτο.
δύ3σ2οιτο.
+δÏ3σ2οισθον.
δύ3σ2οισθον.
+δυ3σ2οίσθην.
δυ3σ2οίσθην.
+δυ3σ2οίμεθα.
δυ3σ2οίμεθα.
+δÏ3σ2οισθε.
δύ3σ2οισθε.
+δÏ3σ2οιντο.
δύ3σ2οιντο.
+δÏ3σ2εσθαι.
δύ3σ2εσθαι.
+.δυ3σ2όμεν
.δυ3σ2όμεν
+.δυ3σ2ομέν
.δυ3σ2ομέν
+δÏ3σ2ωμαι.
δύ3σ2ωμαι.
+δÏ3σ2ηται.
δύ3σ2ηται.
+δυ3σ2ώμεθα
δυ3σ2ώμεθα
+δÏ3σ2ησθε.
δύ3σ2ησθε.
+δυ3σ2αίμην.
δυ3σ2αίμην.
+δÏ3σ2αιο.
δύ3σ2αιο.
+δÏ3σ2αιτο.
δύ3σ2αιτο.
+δÏ3σ2αισθον.
δύ3σ2αισθον.
+δυ3σ2αίσθην.
δυ3σ2αίσθην.
+δυ3σ2αίμεθα.
δυ3σ2αίμεθα.
+δÏ3σ2αισθαι.
δύ3σ2αισθαι.
+δÏ3σ2αιντο.
δύ3σ2αιντο.
+δυ3σ2άσθω.
δυ3σ2άσθω.
+δÏ3σ2ασθον.
δύ3σ2ασθον.
+δυ3σ2άσθων.
δυ3σ2άσθων.
+δÏ3σ2ασθε.
δύ3σ2ασθε.
+δÏ3σ2ασθαι.
δύ3σ2ασθαι.
+δυ3σ2άμεν
δυ3σ2άμεν
+δυσ3σ2αμέν
δυσ3σ2αμέν
+δÏ3σ2ατο.
δύ3σ2ατο.
+δÏ3σ2ετο.
δύ3σ2ετο.
+δÏ3σ2αντο.
δύ3σ2αντο.
+δÏ3σ2εο.
δύ3σ2εο.
+.δυσεί2σ1β
.δυσεί2σ1β
.δυσει2σ1β
+.δυσέ2κ1
.δυσέ2κ1
.δυσε2κ1
+.δυσέ2ξ1
.δυσέ2ξ1
.δυσε2ξ1
.δυ3σ2ιθ
+δÏ3σ2ις.
δύ3σ2ις.
+δÏ3σ2ισ.
δύ3σ2ισ.
+δÏ3σ2εω
δύ3σ2εω
+δÏ3σ2ιν.
δύ3σ2ιν.
+δÏ3σ2ι.
δύ3σ2ι.
+δυ3σ2έοιν.
δυ3σ2έοιν.
+δÏ3σ2εσι.
δύ3σ2εσι.
+δÏ3σ2εσιν.
δύ3σ2εσιν.
+.δÏ3σ2κε
.δύ3σ2κε
+.δυ3σ2μή.
.δυ3σ2μή.
.δυ3σ2μὴ.
.δυ3σ2μῆς.
@@ -1329,20 +1795,27 @@ psili2Ï1dasia2Ï
.δυ3σ2μᾶ
.δυ3σ2μα
.δυ3σ2μῶ
+.δυσξÏ2ν1
.δυσξύ2ν1
.δυσξυ2ν1
+.δÏ3σ2ταν
.δύ3σ2ταν
+.δυ3σ2τάν
.δυ3σ2τάν
.δυ3σ2την
+.δυ3σ2τήν
.δυ3σ2τήν
á¼Î´Ï…2σ1Ï„
+εἰ2ν1όδ
εἰ2ν1όδ
εἰ2ν1οδ
εἰ2σ1
εἴ2σ1
+εἰ3σ2ί.
εἰ3σ2ί.
εἰ3σ2ὶ.
εἰ3σ2ι.
+εἰ3σ2ίν.
εἰ3σ2ίν.
εἰ3σ2ὶν.
εἰ3σ2ιν.
@@ -1351,76 +1824,117 @@ psili2Ï1dasia2Ï
εἴσει.
εἴ3σ2εται.
εἴ3σ2εσθον.
+εἰ3σ2όμ
εἰ3σ2όμ
εἴ3σ2εσθε.
εἴ3σ2ονται
+εἰ3σ2οίμην
εἰ3σ2οίμην
εἴ3σ2οιο
εἴ3σ2οιτο
εἴ3σ2οισθον
+εἰ3σ2οίσθην
εἰ3σ2οίσθην
+εἰ3σ2οίμεθα
εἰ3σ2οίμεθα
εἴ3σ2οισθε
εἴ3σ2οιντο
εἴ3σ2εσθαι
+εἰ3σ2όμεν
εἰ3σ2όμεν
+εἰ3σ2ομέν
εἰ3σ2ομέν
+εἴ3σ2άμην.
εἴ3σ2άμην.
εἴ3σ2ω
εἴ3σ2ατο
εἴ3σ2ασθον
+εἰ3σ2άσθην
εἰ3σ2άσθην
+εἰ3σ2άμεθα
εἰ3σ2άμεθα
εἴ3σ2ασθε
εἴ3σ2αντο
εἴ3σ2ωμαι
εἴ3σ2ησθον
+εἰ3σ2ώμεθα
εἰ3σ2ώμεθα
εἴ3σ2ησθε
εἴ3σ2ωνται
+εἰ3σ2αίμην
εἰ3σ2αίμην
εἴ3σ2αιο
εἴ3σ2αιτο
εἴ3σ2αισθον
+εἴ3σ2αίσθην
εἴ3σ2αίσθην
+εἰ3σ2αίμεθα
εἰ3σ2αίμεθα
εἴ3σ2αισθε
εἴ3σ2αιντο
+εἰ3σ2άσθω
εἰ3σ2άσθω
+εἰ3σ2άσθων
εἰ3σ2άσθων
εἴ3σ2ασθαι
+εἰ3σ2άμεν
εἰ3σ2άμεν
+εἰ3σ2αμέν
εἰ3σ2αμέν
á¼2κ1λ
+á¼3κ2λήθη
á¼3κ2λήθη
+á¼3κ2λάζ
á¼3κ2λάζ
+á¼3κ2λάγ
á¼3κ2λάγ
+á¼3κ2λάο
á¼3κ2λάο
+á¼3κ2λάσ
á¼3κ2λάσ
+á¼3κ2λαί
á¼3κ2λαί
+á¼3κ2λαÏ
á¼3κ2λαύ
+á¼3κ2λεί
á¼3κ2λεί
+á¼4κ3λείπ
á¼4κ3λείπ
+á¼4κ3λείψ
á¼4κ3λείψ
á¼3κ2λῄ
+á¼3κ2κλέπ
á¼3κ2κλέπ
+á¼3κ2κλέψ
á¼3κ2κλέψ
+á¼3κ2λάπ
á¼3κ2λάπ
á¼3κ2λαπ
+á¼4κ3λάπτ
á¼4κ3λάπτ
á¼4κ3λαπτ
+á¼3κ2λέφ
á¼3κ2λέφ
á¼3κ2λεφ
+á¼3κ2λήÏ
á¼3κ2λήÏ
á¼3κ2ληÏ
+á¼3κ2λίν
á¼3κ2λίν
á¼3κ2λιν
+á¼3κ2λÏ
á¼3κ2λύ
+á¼4κ3λÏσεω
á¼4κ3λύσεω
+á¼4κ3λÏσει
á¼4κ3λύσει
+á¼4κ3λÏσεοι
á¼4κ3λύσεοι
+á¼4κ3λÏσεσι
á¼4κ3λύσεσι
+á¼3κ2λόμ
á¼3κ2λόμ
+á¼3κ2κλώσ
á¼3κ2κλώσ
ἔ2κ1λει
ἔ3κ2λεισ
@@ -1430,179 +1944,274 @@ psili2Ï1dasia2Ï
á¼2κ1ν
ἔ2κ1ν
ἔ3κ2ναι
+á¼3κ2ναί
á¼3κ2ναί
ἔ3κ2νησ
+á¼3κ2νήσ
á¼3κ2νήσ
á¼3κ2νυ
á¼2κ1Ï
á¼”2κ1Ï
+á¼3κ2Ïάδ
á¼3κ2Ïάδ
á¼3κ2Ïαδ
á¼”3κ2Ïαζ
+á¼3κ2Ïάζ
á¼3κ2Ïάζ
á¼”3κ2Ïαγ
+á¼3κ2Ïάγ
á¼3κ2Ïάγ
+á¼3κ2Ïάτ
á¼3κ2Ïάτ
á¼3κ2Ïατ
+á¼3κ2ÏαÏγ
á¼3κ2Ïαύγ
á¼3κ2Ïαυγ
á¼”3κ2Ïαι
+á¼3κ2Ïαί
á¼3κ2Ïαί
á¼”3κ2Ïαν
+á¼3κ2Ïάν
á¼3κ2Ïάν
+á¼3κ2Ïήη
á¼3κ2Ïήη
+á¼3κ2Ïάα
á¼3κ2Ïάα
+á¼3κ2Ïαά
á¼3κ2Ïαά
+á¼3κ2Ïάθ
á¼3κ2Ïάθ
á¼3κ2Ïαθ
á¼”3κ2Ïεκ
+á¼3κ2Ïέκ
á¼3κ2Ïέκ
á¼”3κ2Ïεξ
+á¼3κ2Ïέξ
á¼3κ2Ïέξ
+á¼3κ2Ïέμ
á¼3κ2Ïέμ
á¼3κ2Ïεμ
+á¼3κ2Ïήμ
á¼3κ2Ïήμ
á¼3κ2Ïημ
á¼”3κ2Ïιν
+á¼3κ2Ïίν
á¼3κ2Ïίν
+á¼3κ2Ïίθ
á¼3κ2Ïίθ
+á¼3κ2Ïότ
á¼3κ2Ïότ
á¼3κ2Ïοτ
á¼”3κ2Ïου
+á¼3κ2ÏοÏ
á¼3κ2Ïού
á¼”3κ2ÏÏ…Ï€
+á¼3κ2ÏÏÏ€
á¼3κ2Ïύπ
á¼”3κ2Ïυψ
+á¼3κ2ÏÏψ
á¼3κ2Ïύψ
+á¼3κ2ÏÏβ
á¼3κ2Ïύβ
+á¼3κ2ÏÏφ
á¼3κ2Ïύφ
á¼3κ2Ïυσ
á¼”3κ2Ïωζ
+á¼3κ2Ïώζ
á¼3κ2Ïώζ
á¼”3κ2Ïωξ
+á¼3κ2Ïώξ
á¼3κ2Ïώξ
á¼2κ1ταθ
ἔ2κ1ταμε.
+á¼2κ1τάμν
á¼2κ1τάμν
á¼2κ1ταν
á¼2κ1ταÏ
+á¼2κ1τάσ
á¼2κ1τάσ
á¼2κ1τε
+á¼2κ1τέ
á¼2κ1Ï„á½³
+á¼3κ2τείν
á¼3κ2τείν
+á¼2κ1τήκ
á¼2κ1τήκ
á¼2κ1τι
ἔ2κ1τι
+á¼2κ1τί
á¼2κ1Ï„á½·
ἔ3κ2τιζ
+á¼3κ2τίζ
á¼3κ2τίζ
ἔ3κ2τισα
+á¼3κ2τίσα
á¼3κ2τίσα
+á¼2κ1Ï„ÏŒ
á¼2κ1Ï„á½¹
á¼2κ1το
ἔ2κ1το
+á¼3κ2τός.
á¼3κ2τός.
á¼3κ2τὸς.
+á¼3κ2τόσ.
á¼3κ2τόσ.
á¼3κ2τὸσ.
á¼2κ1Ï„Ï
ἔ2κ1τυπο
+á¼2κ1Ï„Ïπου.
á¼2κ1τύπου.
+á¼2κ1Ï„Ïπῳ.
á¼2κ1τύπῳ.
ἔ2κ1τυπε.
+á¼2κ1Ï„Ïπω.
á¼2κ1τύπω.
+á¼2κτÏποι.
á¼2κτύποι.
+á¼2κ1Ï„Ïπων.
á¼2κ1τύπων.
+á¼2κ1Ï„Ïποις.
á¼2κ1τύποις.
+á¼2κ1Ï„Ïποισ.
á¼2κ1τύποισ.
+á¼2κ1Ï„Ïπους.
á¼2κ1τύπους.
+á¼2κ1Ï„Ïπουσ.
á¼2κ1τύπουσ.
ἔ2κ1τυπα.
á¼2κ1Ï„Ï…
+ἑλλή2σ1π
ἑλλή2σ1π
ἑλλη2σ1π
á¼2ν1
ἔ2ν1
+á¼3ν2άκις
á¼3ν2άκις
á¼3ν2ακισ
+á¼3ν2ακόσ
á¼3ν2ακόσ
á¼3ν2ακοσ
á¼”3ν2αÏα.
+á¼3ν2άÏων.
á¼3ν2á½±Ïων.
+á¼3ν2άÏοις.
á¼3ν2á½±Ïοις.
+á¼3ν2άÏοισ.
á¼3ν2á½±Ïοισ.
á¼3ν2αÏηφ
á¼4ν3αÏαÏ
+á¼3ν2άÏεε
á¼3ν2á½±Ïεε
+á¼3ν2αÏέω
á¼3ν2αÏέω
+á¼3ν2αÏέα
á¼3ν2αÏέα
+á¼3ν2αÏεά
á¼3ν2αÏεά
+á¼3ν2άÏιε
á¼3ν2á½±Ïιε
+á¼3ν2αÏίω
á¼3ν2αÏίω
+á¼3ν2αÏία
á¼3ν2αÏία
+á¼3ν2αÏιά
á¼3ν2αÏιά
ἔ3ν2ασσ
+á¼3ν2άσσ
á¼3ν2άσσ
+á¼3ν2άσθ
á¼3ν2άσθ
á¼3ν2ασθ
ἔ3ν2ατ
+á¼3ν2άτ
á¼3ν2άτ
á¼Î½Î´Ï…2σ1Ï„
+á¼3ν2έγκ
á¼3ν2έγκ
á¼3ν2εγκ
ἔ3ν2εικ
á¼3ν2εῖκ
á¼3ν2εικ
+á¼3ν2είκ
á¼3ν2είκ
ἔ3ν2ειμ
+á¼3ν2είμ
á¼3ν2είμ
+á¼3ν2εμέσσ
á¼3ν2εμέσσ
+á¼3ν2εμήθ
á¼3ν2εμήθ
+á¼3ν2ενή
á¼3ν2ενή
+á¼3ν2εό
á¼3ν2εό
á¼3ν2εὸ
á¼3ν2εο
á¼3ν2εῶ
+á¼3ν2εά
á¼3ν2εά
á¼3ν2εὰ
á¼3ν2εᾶ
+á¼3ν2έπει
á¼3ν2έπει
á¼”3ν2εÏθε
ἔ3ν2ευσ
+á¼3ν2εÏσ
á¼3ν2εύσ
+á¼3ν2έχθ
á¼3ν2έχθ
á¼3ν2εχθ
ἔ3ν2ησ
+á¼3ν2ήσ
á¼3ν2ήσ
+á¼3ν2ηή
á¼3ν2ηή
á¼3ν2ηὴ
ἔ3ν2ην.
+á¼3ν2ηεί
á¼3ν2ηεί
á¼3ν2ηο
á¼3ν2ηῶ
+á¼3νηέ
á¼3νηέ
+á¼3ν2ήνο
á¼3ν2ήνο
+á¼3ν2ί
á¼3ν2á½·
á¼3ν2ι
ἔ3ν2ι
+á¼4ν3ιαÏ
á¼4ν3ιαύ
+á¼5ν4ιαÏσ
á¼5ν4ιαύσ
á¼5ν4ιαυσ
á¼4ν3ιδÏ
+á¼4ν3ίδÏ
á¼4ν3ίδÏ
+á¼4ν3ίζ
á¼4ν3ίζ
+á¼4ν3ίη
á¼4ν3ίη
+á¼4ν3ιέτον.
á¼4ν3ιέτον.
+á¼4ν3ίεμεν.
á¼4ν3ίεμεν.
+á¼4ν3ίω.
á¼4ν3ίω.
á¼4ν3ιππ
+á¼4ν3ίππ
á¼4ν3ίππ
+á¼4ν3ίπτ
á¼4ν3ίπτ
+á¼4ν3ίψ
á¼4ν3ίψ
+á¼4ν3ίσσ
á¼4ν3ίσσ
+á¼4ν3ίστ
á¼4ν3ίστ
á¼4ν3ιστ
á¼4ν3ισχ
+á¼4ν3ίσχ
á¼4ν3ίσχ
ἔ3ν2ος.
ἔ3ν2οσ.
@@ -1617,94 +2226,138 @@ psili2Ï1dasia2Ï
ἔ3ν2ῃ.
ἔ3ν2η.
ἔ3ν2οσι
+á¼3ν2όσε
á¼3ν2όσε
+á¼3ν2υάλ
á¼3ν2υάλ
á¼3ν2υαλ
ἔ3ν2υξ
á¼3ν2υξ
+á¼3ν2Ïξ
á¼3ν2ύξ
+á¼3ν2Ïσ
á¼3ν2ύσ
á¼3ν2υσ
+á¼3ν2Ï…ÏŽ
á¼3ν2Ï…á½½
á¼3ν2Ï…á½¼
+á¼3ν2υόο
á¼3ν2υόο
á¼3ν2υοῦς
á¼2ξ1
ἔ2ξ1
+á¼3ξ2ήÏ
á¼3ξ2á½µÏ
á¼3ξ2ηÏ
á¼3ξ2Ï…2ν1
á¼3ξ2Ï…Ï
+á¼3ξ2ÏÏ
á¼3ξ2á½»Ï
ἔ3ξ2υσ
ἔ3ξ2ω.
+ἑ2ξ1ήÏετμ
ἑ2ξ1á½µÏετμ
+ἑ2ξ1ηÏέτμ
ἑ2ξ1ηÏέτμ
+á¼Ï€ÎµÎ¯2σ1
á¼Ï€Îµá½·2σ1
á¼Ï€ÎµÎ¹2σ1
+á¼Ï€ÎµÎ¯3σ2ατον.
á¼Ï€Îµá½·3σ2ατον.
+á¼Ï€ÎµÎ¹3σ2άτην.
á¼Ï€ÎµÎ¹3σ2άτην.
+á¼Ï€ÎµÎ¯3σ2αμεν.
á¼Ï€Îµá½·3σ2αμεν.
+á¼Ï€ÎµÎ¯3σ2ατε
á¼Ï€Îµá½·3σ2ατε
+á¼Ï€ÎµÎ¹3σ2άμην.
á¼Ï€ÎµÎ¹3σ2άμην.
+á¼Ï€ÎµÎ¯3σ2ω.
á¼Ï€Îµá½·3σ2ω.
+á¼Ï€ÎµÎ¯3σ2ατο
á¼Ï€Îµá½·3σ2ατο
+á¼Ï€ÎµÎ¯3σ2ασθον.
á¼Ï€Îµá½·3σ2ασθον.
+á¼Ï€ÎµÎ¹3σ2άμεθα.
á¼Ï€ÎµÎ¹3σ2άμεθα.
+á¼Ï€ÎµÎ¯3σ2ασθε.
á¼Ï€Îµá½·3σ2ασθε.
+á¼Ï€ÎµÎ¯3σ2αντο.
á¼Ï€Îµá½·3σ2αντο.
+á¼Ï€ÎµÎ¯3σ2θ
á¼Ï€Îµá½·3σ2θ
á¼Ï€ÎµÎ¹3σ2θ
+á¼Ï€Îµ2κ1τεί
á¼Ï€Îµ2κ1τεί
+á¼Ï€Î­2κ1τει
á¼Ï€á½³2κ1τει
á¼Ï€Îµ2κ1Ï„Ï
+á¼Ï€Î­2κ1Ï„Ï
á¼Ï€á½³2κ1Ï„Ï
á¼Ï€Îµ2ξ1
á¼Ï€Îµ2σ1β
+á¼Ï€Î¹Ï€ÏÏŒ2σ1θ
á¼Ï€Î¹Ï€Ïá½¹2σ1θ
á¼Ï€Î¹Ï€Ïο2σ1θ
á¼Ï€Î¹ÏƒÏ…2ν1
á¼2σ1
+á¼3σ2άω
á¼3σ2άω
á¼3σ2ημ
á¼3σ2θ
+á¼4σ3θέσ
á¼4σ3θέσ
á¼3σ2ιγ
á¼3σ2κ
+á¼4σ3κά
á¼4σ3κά
á¼4σ3κα
á¼3σ2μὲν.
+á¼3σ2μέν.
á¼3σ2μέν.
á¼3σ2Ï„
+á¼3σ2όμεθα
á¼3σ2όμεθα
+á¼3σ2οίμην
á¼3σ2οίμην
+á¼3σ2όμ
á¼3σ2όμ
á¼3σ2ομ
á¼3σ2οῦ
-á¼3σ2ουoxia
+á¼3σ2ού
á¼3σ2Ï…
+á¼3σ2Ï
á¼3σ2á½»
+á¼ÏƒÏ2ν1
á¼Ïƒá½»2ν1
á¼ÏƒÏ…2ν1
á¼3σ2χ
+á¼4σ3χέ
á¼4σ3χέ
+á¼3σ2ÏŽ
á¼3σ2á½½
á¼3σ2ω
ἔ2σ1οπ
εá½Îµ2ξ1
+εá½Îµ3ξ2ί
εá½Îµ3ξ2á½·
εá½Îµ3ξ2ι
+εá½Ï€ÏÏŒ2σ1
εá½Ï€Ïá½¹2σ1
εá½Ï€Ïο2σ1
+εá½ÏƒÏ2ν1
εá½Ïƒá½»2ν1
εá½ÏƒÏ…2ν1
+εá½Î¾Ï2ν1
εá½Î¾á½»2ν1
εá½Î¾Ï…2ν1
á¼Ï‰2σ1φ
ἤ2ν1οψ.
ἤ2ν1οπ
+ἠ2ν1όπ
ἠ2ν1όπ
.θεμι2σ1κÏ
+.θεό2σ1δ
.θεό2σ1δ
.θεο2σ1δ
.θεοι2σ1εχθÏ
@@ -1712,75 +2365,115 @@ psili2Ï1dasia2Ï
.θυο2σ1κ
.καθυπε2Ï1
.καλω2σ1οÏ
+.καλω2σ1ÏŒÏ
.καλω2σ1á½¹Ï
+.κα2ν1είς.
.κα2ν1είς.
.κα2ν1εὶς.
+.κα2ν1είσ.
.κα2ν1είσ.
.κα2ν1εὶσ.
.κα2ν1εν
+.κα2ν1έν
.κα2ν1έν
.καταδυ2σ1ωπ
+.κατεδυ2σ1ώπ
.κατεδυ2σ1ώπ
.κατει2σ1
+.κατε2ν1αί
.κατε2ν1αί
+.κατε2ν1ή
.κατε2ν1ή
+.κατε2ξ1α2ν1ί
.κατε2ξ1α2ν1ί
+.κατε2ξ1α2ν1έσ
.κατε2ξ1α2ν1έσ
.κεÏα2σ1φ
+.κÏά2σ1Ï€
.κÏá½±2σ1Ï€
.κÏα2σ1Ï€
+.κυνό2σ1α
.κυνό2σ1α
+.κυνό2σ1β
.κυνό2σ1β
.κυνο2σ1β
+.κυνό2σ1ο
.κυνό2σ1ο
.κυνο2σ1ο
.κυνο2σ1φ
+.μελα2ν1άγ
.μελα2ν1άγ
.μελα2ν1αγ
+.μελα2ν1άε
.μελα2ν1άε
+.μελα2ν1αέ
.μελα2ν1αέ
.μελα2ν1αθ
.μελα2ν1αιγ
.μελα2ν1αυγ
+.μελα2ν1είμ
.μελα2ν1είμ
.μελα2ν1εῖμ
+.μελά2ν1ιππ
.μελά2ν1ιππ
+.μελα2ν1ίππ
.μελα2ν1ίππ
+.μελα2ν1όμμ
.μελα2ν1όμμ
.μελα2ν1ομμ
+.μελά2ν1οσσ
.μελά2ν1οσσ
+.μελα2ν1όσσ
.μελα2ν1όσσ
+.μελά2ν1οστ
.μελά2ν1οστ
+.μελα2ν1όστ
.μελα2ν1όστ
+.μελά2ν1ουÏ
.μελά2ν1ουÏ
+.μελα2ν1οÏÏ
.μελα2ν1ούÏ
.μελα2ν1ουÏ
+.μελά2ν1υ
.μελά2ν1υ
+.μελα2ν1Ï
.μελα2ν1ύ
.μετε2ξ1α
+.μετε2ξ1έ
.μετε2ξ1έ
.μετε2ξ1ε
.μογι2σ1
.μογο2σ1τ
.μυ2σ1π
.μυ2σ1επ
+.νεώ2σ1οικ
.νεώ2σ1οικ
+.νεω2σ1οίκ
.νεω2σ1οίκ
.νου2ν1ε
.ξυ2ν1αγ
.ξυ2ν1ε
+.ξυ2ν1έ
.ξυ2ν1έ
+.ξÏ2ν1ε
.ξύ2ν1ε
+.ξυ3ν2εώ
.ξυ3ν2εώ
.ξυ3ν2εῶ
.ξυ2ν1ῆκ
+.ξÏ2ν1ι
.ξύ2ν1ι
+.ξυ2ν1ί
.ξυ2ν1ί
+οἱο2ν1εί.
οἱο2ν1εί.
οἱο2ν1εὶ.
+οἱό2σ1
οἱό2σ1
+οἰ2σ1πώτ
οἰ2σ1πώτ
οἰ2σ1πωτ
+á½Î»Î¿2ν1έν.
á½Î»Î¿2ν1έν.
á½Î»Î¿2ν1ὲν.
á½Ï€Ï‰2σ1
@@ -1796,40 +2489,57 @@ psili2Ï1dasia2Ï
á½2σ1τι2σ1οῦν.
ἡτι2σ1οῦν.
á½Ï€Î¿Î¹Î¿Ï…2σ1τινα2σ1οῦν.
+οá½Î´ÎµÎ½ÏŒ2σ1ω
οá½Î´ÎµÎ½á½¹2σ1ω
+οá½Î´ÎµÎ½Î¿2σ1ÏŽ
οá½Î´ÎµÎ½Î¿2σ1á½½
.παλι2ν1
+.παλί2ν1
.παλί2ν1
.πα2ν1
+.πά2ν1
.πά2ν1
+.πα3ν2ός.
.πα3ν2ός.
.πα3ν2ὸς.
+.πα3ν2όσ.
.πα3ν2όσ.
.πα3ν2ὸσ.
+.πα3ν2ί.
.πα3ν2ί.
.πα3ν2ὶ.
+.πάνα.
.πάνα.
.πα3ν2ῶν.
.πα3ν2ικ
+.πα3ν2ίσδ
.πα3ν2ίσδ
.πα3ν2ισδ
.πα3ν2οῦ.
.πα3ν2ῷ.
+.πα3ν2ό.
.πα3ν2ό.
.πα3ν2ὸ.
+.πα3ν2όν.
.πα3ν2όν.
.πα3ν2ὸν.
+.πα3ν2έ.
.πα3ν2έ.
.πα3ν2ὲ.
+.πα3ν2οί.
.πα3ν2οί.
.πα3ν2οὶ.
.πα3ν2οῖς.
.πα3ν2οῖσ.
+.πα3ν2οÏÏ‚.
.πα3ν2ούς.
.πα3ν2οὺς.
+.πα3ν2οÏσ.
.πα3ν2ούσ.
.πα3ν2οὺσ.
+.παÏα2ν1ίσχ
.παÏα2ν1ίσχ
+.παÏεί2σ1
.παÏεί2σ1
.παÏει2σ1
.παÏε2κ1λ
@@ -1837,92 +2547,146 @@ psili2Ï1dasia2Ï
.παÏε2ν1εῖ
.παÏε2ν1ο
.παÏε2ξ1
+.παÏέ2ξ1
.παÏá½³2ξ1
+παÏέ3ξ2ω.
παÏá½³3ξ2ω.
+παÏέ3ξ2εις.
παÏá½³3ξ2εις.
+παÏέ3ξ2εισ.
παÏá½³3ξ2εισ.
+παÏέ3ξ2ει.
παÏá½³3ξ2ει.
+παÏέ3ξ2ετον.
παÏá½³3ξ2ετον.
+παÏε3ξ2έτην.
παÏε3ξ2έτην.
+παÏέ3ξ2ομεν.
παÏá½³3ξ2ομεν.
+παÏέ3ξ2ετε.
παÏá½³3ξ2ετε.
+παÏέ3ξ2ουσι.
παÏá½³3ξ2ουσι.
+παÏέ3ξ2ομαι
παÏá½³3ξ2ομαι
+παÏέ3ξ2ῃ
παÏá½³3ξ2ῃ
+παÏέ3ξ2εται.
παÏá½³3ξ2εται.
+παÏέ3ξ2εσθον.
παÏá½³3ξ2εσθον.
+παÏε3ξ2όμεθα.
παÏε3ξ2όμεθα.
+παÏέ3ξ2εσθε.
παÏá½³3ξ2εσθε.
+παÏέ3ξ2ονται.
παÏá½³3ξ2ονται.
+.πλεο2ν1έ
.πλεο2ν1έ
.πλεο2ν1ε
.Ï€Ïοει2σ1
.Ï€Ïοε2κ1
.Ï€Ïοε2ν1
.Ï€Ïοε2ξ1
+.Ï€Ïοέ2ξ1
.Ï€Ïοέ2ξ1
.Ï€Ïο2σ1
+.Ï€Ïο3σ2άβ
.Ï€Ïο3σ2άβ
.Ï€Ïο3σ2αβ
.Ï€Ïοσει2σ1
+.Ï€Ïο3σ2εί
.Ï€Ïο3σ2εί
+.Ï€Ïο3σ2έσει
.Ï€Ïο3σ2έσει
+.Ï€Ïο3σ2εσεί
.Ï€Ïο3σ2εσεί
.Ï€Ïοσε2ν1
.Ï€Ïοσε2ξ1
+.Ï€ÏÏŒ3σ2θι
.Ï€Ïá½¹3σ2θι
+.Ï€Ïο3σ2θί
.Ï€Ïο3σ2θί
.Ï€Ïο4σ3θιγ
+.Ï€ÏÏŒ3σ2κοπ
.Ï€Ïá½¹3σ2κοπ
+.Ï€Ïο3σ2κόπ
.Ï€Ïο3σ2κόπ
.Ï€Ïο3σ2τασ
+.Ï€Ïο3σ2τάτ
.Ï€Ïο3σ2τάτ
.Ï€Ïο3σ2τατ
.Ï€Ïο3σ2ταυ
+.Ï€Ïο3σ2τεί
.Ï€Ïο3σ2τεί
.Ï€Ïο3σ2τεν
+.Ï€Ïο3σ2τέν
.Ï€Ïο3σ2τέν
.Ï€Ïο3σ2τεÏν
+.Ï€ÏÏŒ3σ2τεÏν
.Ï€Ïá½¹3σ2τεÏν
+.Ï€Ïο3σ2τέÏν
.Ï€Ïο3σ2Ï„á½³Ïν
+.Ï€Ïο3σ2τήσ
.Ï€Ïο3σ2τήσ
+.Ï€Ïο3σ2τόμ
.Ï€Ïο3σ2τόμ
.Ï€Ïο3σ2τομ
+.Ï€ÏÏŒ3σ2τῳ
.Ï€Ïá½¹3σ2τῳ
.Ï€Ïο3σ2Ï„á¿´
.Ï€Ïο3σ2υγ
.Ï€Ïο3σ2υμ
.Ï€Ïο3σ2Ï…2ν1
+.Ï€ÏÏŒ3σ2φαγμ
.Ï€Ïá½¹3σ2φαγμ
+.Ï€Ïο3σ2φάγμ
.Ï€Ïο3σ2φάγμ
+.Ï€Ïο3σ2φάζ
.Ï€Ïο3σ2φάζ
+.Ï€Ïο3σ2φάττ
.Ï€Ïο3σ2φάττ
+.Ï€ÏÏŒ3σ2χημ
.Ï€Ïá½¹3σ2χημ
+.Ï€Ïο3σ2χήμ
.Ï€Ïο3σ2χήμ
+.Ï€ÏÏŒ3σ2ω.
.Ï€Ïá½¹3σ2ω.
+.Ï€ÏÏŒ3σ2ωθεν.
.Ï€Ïá½¹3σ2ωθεν.
+.Ï€Ïο3σ2ÏŽÏ„
.Ï€Ïο3σ2ώτ
.Ï€Ïο3σ2ωτ
.Ï€Ïοϋπε2ξ1
+.πυ2Ï1άγ
.πυ2Ï1άγ
.πυ2Ï1αγ
+.πυ2Ï1αίθ
.πυ2Ï1αίθ
.πυ2Ï1αιθ
.πυ2Ï1ῆθ
.πυ2Ï1ηθ
+.πυ2Ï1ήθ
.πυ2Ï1ήθ
.πυ2Ï1ακ
+.Ï€Ï2Ï1αυ
.πύ2Ï1αυ
+.πυ2Ï1αÏ
.πυ2Ï1αύ
.πυ2Ï1αυ
+.πυ2Ï1ήνεμ
.πυ2Ï1ήνεμ
+.πυ2Ï1ηνέμ
.πυ2Ï1ηνέμ
.πυ2Ï1ωπ
+.σελα2σ1φό
.σελα2σ1φό
.σελα2σ1φο
.συμπαÏει2σ1
.συ2ν1
+.σÏ2ν1
.σύ2ν1
+.συνδιέ2ξ1
.συνδιέ2ξ1
.συνδιε2ξ1
.συνδυ2σ1
@@ -1930,61 +2694,93 @@ psili2Ï1dasia2Ï
.τεσσαÏε2σ1κ
.Ï„Ïει2σ1κ
.Ï„Ïι2σ1
+.Ï„Ïι3σ2μό
.Ï„Ïι3σ2μό
.Ï„Ïι3σ2μο
.Ï„Ïι3σ2μῶ
.Ï„Ïι3σ2Ï€
+.Ï„Ïί3σ2Ï„
.Ï„Ïá½·3σ2Ï„
.Ï„Ïι3σ2Ï„
+.Ï„Ïι3σ2ÏŽ
.Ï„Ïι3σ2á½½
.Ï„Ïι3σ2ω
ὑο2σ1κ
+ὑπεί2σ1
ὑπεί2σ1
ὑπει2σ1
+ὑπεί3σ2ας
ὑπεί3σ2ας
+ὑπεί3σ2ασ
ὑπεί3σ2ασ
+ὑπεί3σ2αν
ὑπεί3σ2αν
+ὑπει3σ2άν
ὑπει3σ2άν
+ὑπει3σ2άσ
ὑπει3σ2άσ
ὑπε2κ1λαμ
+ὑπε2κ1λήψ
ὑπε2κ1λήψ
ὑπε2κ1τ
ὑπε2ν1
ὑπε2ξ1
ὑπε2Ï1
+ὑπέ2Ï1
ὑπέ2Ï1
+ὑπέ3Ï2α.
ὑπέ3Ï2α.
+ὑπέ3Ï2ης.
ὑπέ3Ï2ης.
+ὑπέ3Ï2ησ.
ὑπέ3Ï2ησ.
+ὑπέ3Ï2á¾³.
ὑπέ3Ï2á¾³.
+ὑπέ3Ï2αν.
ὑπέ3Ï2αν.
+ὑπέ3Ï2αι.
ὑπέ3Ï2αι.
ὑπε3Ï2ῶν.
+ὑπέ3Ï2αις.
ὑπέ3Ï2αις.
+ὑπέ3Ï2αισ.
ὑπέ3Ï2αισ.
+ὑπέ3Ï2ας.
ὑπέ3Ï2ας.
+ὑπέ3Ï2ασ.
ὑπέ3Ï2ασ.
ὑπε3Ï2εθ
+ὑπε3Ï2έθ
ὑπε3Ï2έθ
+ὑπε3Ï2εί
ὑπε3Ï2εί
+ὑπέ3Ï2υθ
ὑπέ3Ï2υθ
+ὑπε3Ï2Ïθ
ὑπε3Ï2ύθ
ὑπε3Ï2υθ
ὑπεÏε2κ1τε
+ὑπεÏε2κ1τί
ὑπεÏε2κ1Ï„á½·
+ὑπε3Ï2έπτ
ὑπε3Ï2έπτ
ὑπε3Ï2επτ
+ὑπε3Ï2έψ
ὑπε3Ï2έψ
ὑπε3Ï2εψ
+ὑπε3Ï2έω
ὑπε3Ï2έω
ὑπε3Ï2ῶ
+ὑπε3Ï2έε
ὑπε3Ï2έε
ὑπε3Ï2εῖς.
ὑπε3Ï2εῖσ.
ὑπε3Ï2εῖ.
+ὑπε3Ï2έο
ὑπε3Ï2έο
ὑπε3Ï2οῦ
ὑπε3Ï2εῖτ
+ὑπε3Ï2ÏŽ
ὑπε3Ï2á½½
ὑπε3Ï2ω
ὕ2σ1Ï„Ï
@@ -1992,55 +2788,91 @@ psili2Ï1dasia2Ï
.φαε2σ1φ
.φω2σ1φ
.χαÏι2σ1ανδÏ
+.χαÏι2σ1άνδÏ
.χαÏι2σ1άνδÏ
+.χει2Ï1άγ
.χει2Ï1άγ
.χει2Ï1αγ
.χει2Ï1απ
.χει2Ï1αψ
.χει2Ï1ου
.χει2Ï1ῶν
+.χει2Ï1άν
.χει2Ï1άν
.χει2Ï1αν
.χη2ν1ναλ
+ὡ2σ1α2ν1εί.
ὡ2σ1α2ν1εί.
ὡ2σ1α2ν1εὶ.
+ὡ2σ1αÏτως.
ὡ2σ1αύτως.
+ὡ2σ1αÏτωσ.
ὡ2σ1αύτωσ.
+ὡ2σ1εί.
ὡ2σ1εί.
ὡ2σ1εὶ.
á½¥2σ1πεÏ.
+ὡ2σ1πε2Ï1εί.
ὡ2σ1πε2Ï1εί.
ὡ2σ1πε2Ï1εὶ.
ὥ2σ1τε
+ι2σ1χίλιοι.
ι2σ1χίλιοι.
+ι2σ1χιλίων.
ι2σ1χιλίων.
+ι2σ1χιλίοις.
ι2σ1χιλίοις.
+ι2σ1χιλίοισ.
ι2σ1χιλίοισ.
+ι2σ1χιλίους.
ι2σ1χιλίους.
+ι2σ1χιλίουσ.
ι2σ1χιλίουσ.
+ι2σ1χίλιαι.
ι2σ1χίλιαι.
+ι2σ1χιλίαις.
ι2σ1χιλίαις.
+ι2σ1χιλίαισ.
ι2σ1χιλίαισ.
+ι2σ1χιλίας.
ι2σ1χιλίας.
+ι2σ1χιλίασ.
ι2σ1χιλίασ.
+ι2σ1χίλια.
ι2σ1χίλια.
+ι2σ1μÏÏιοι.
ι2σ1μύÏιοι.
+ι2σ1μυÏίων.
ι2σ1μυÏίων.
+ι2σ1μυÏίοις.
ι2σ1μυÏίοις.
+ι2σ1μυÏίοισ.
ι2σ1μυÏίοισ.
+ι2σ1μυÏίους.
ι2σ1μυÏίους.
+ι2σ1μυÏίουσ.
ι2σ1μυÏίουσ.
+ι2σ1μÏÏιαι.
ι2σ1μύÏιαι.
+ι2σ1μυÏίαις.
ι2σ1μυÏίαις.
+ι2σ1μυÏίαισ.
ι2σ1μυÏίαισ.
+ι2σ1μυÏίας.
ι2σ1μυÏίας.
+ι2σ1μυÏίασ.
ι2σ1μυÏίασ.
+ι2σ1μÏÏια.
ι2σ1μύÏια.
ι2σ1χιλιοστ
ι2σ1μυÏιοστ
+ι2σ1χιλιάκις.
ι2σ1χιλιάκις.
+ι2σ1χιλιάκισ.
ι2σ1χιλιάκισ.
+ι2σ1μυÏιάκις.
ι2σ1μυÏιάκις.
+ι2σ1μυÏιάκισ.
ι2σ1μυÏιάκισ.
}
diff --git a/Master/texmf-dist/tex/context/patterns/lang-et.hyp b/Master/texmf-dist/tex/context/patterns/lang-et.hyp
new file mode 100644
index 00000000000..c89901afb48
--- /dev/null
+++ b/Master/texmf-dist/tex/context/patterns/lang-et.hyp
@@ -0,0 +1,10 @@
+% context hyphenation file, see lang-et.rme for original comment
+
+% source of data: ethyph.tex
+
+% begin hyphenation data
+
+\hyphenation {}
+
+% end hyphenation data
+
diff --git a/Master/texmf-dist/tex/context/patterns/lang-et.pat b/Master/texmf-dist/tex/context/patterns/lang-et.pat
new file mode 100644
index 00000000000..f49086df574
--- /dev/null
+++ b/Master/texmf-dist/tex/context/patterns/lang-et.pat
@@ -0,0 +1,1278 @@
+% context pattern file, see lang-et.rme for original comment
+
+% source of data: ethyph.tex
+
+% begin pattern data
+
+\patterns {
+.au1a
+.ee2l
+.eel1e
+.eel1u
+.ee2s1
+.era1a
+.ise1e
+.ki2p3r
+.lep3l
+.lõpp3
+.moe3
+.pe2a
+.re2o
+.re2pr
+.se2a
+.sk2
+.sp2
+.st2
+.supe2
+.tu3sa
+.uudi2
+.vere1
+.üle1e
+aa1al
+aa1ar
+a1aas
+aadi1a
+aadio3
+a1ae
+a1a2he
+aa1i
+a1ait
+aa2ju
+a1aken
+aal1e2l
+aalk2
+aal1t
+aa2l1õ
+aari2s
+aase2
+aa2s1o
+1aasta
+a1asul
+aas1ü
+a1au
+a1b
+1abie
+a1d
+1admir
+a1eali
+ae2d
+1aed.
+aed1o
+2aee
+a1ees
+1aeg.
+2a1e2h
+a1eks
+2ael
+a1ett
+a1f
+a2fr
+a1g
+1a2gent
+a3graa
+1a2hi.
+ai2a
+a1ilm
+a1ins
+a1j
+1ajam
+a2jami
+1aken.
+a1k2las
+akna1
+ak2re
+a1kree
+a1krii
+a3kroo
+1a2ku.
+1a2lald
+al1do
+ali1sp
+al2l1ü
+a2l1ol
+alp2l
+1alun
+2aluni
+a1m
+1ametn
+ami2sa
+1analü
+1ansam
+1anten
+a1o2m
+a1or
+ao2s
+a1osa
+a1ots
+a1plaa
+1aretu
+1arhit
+1arst
+1arter
+1a2rua
+1arvam
+1arvu
+1asend
+a1so
+as1ole
+asp2
+a1s2por
+atii2v
+a1t2ree
+atu1a
+auba1a
+a1ui
+a1u2j
+aulu1
+a1umb
+au2sul
+1auto
+a1v
+1avald
+av2s
+a1õ2
+a1ö
+a1ä2
+a1ü2
+a1ž
+1ba
+ba1e
+ba1k2r
+ba1o
+ba1p2r
+ba1u2s
+2b1d
+1be
+be1a2
+bek2
+be2r1õ
+1bi
+2bi1e2
+2binõ
+2b1j
+2b1k
+2b1l
+2b1m
+2b1n
+1bo
+2bp
+2b1r
+3b2rig
+3b2roka
+2bs
+b1so
+2b1t
+1bu
+bu1a2
+2b1v
+1da
+dae2
+d1ain
+da2la.
+da1o
+2d1arv
+d1b
+1de
+de1ar
+dek2s1a
+de2pre
+2d1f
+d1g
+2d1h
+1di
+di1a2re
+di1es
+dis2kr
+2d1j
+2d3k2
+2d1l
+2d1m
+2d1n
+d1o2sa
+2d1p2
+2d1r
+3d2reen
+3drena
+2d1s
+2d3t2
+1du
+du2s1a2
+dusk2
+2d1v
+2dži
+eaa2
+ea1aj
+e1aas
+e1ae
+e1a2gen
+e1ai
+e1a2j
+e1a2la.
+e1alu
+e1arm
+e1arv
+e1a2se
+ea2sut
+e1au
+e1b
+e1d
+e2dž
+e1eali
+e1ees
+ee2hi
+1eelar
+e1e2lu.
+ee2pra
+ee2r1ap
+ee2s1ü
+e1e2ten
+e1g
+1ehit
+e2hiti
+eh2t1a
+e1iga.
+e1ilm
+e1i2nim
+e1ins
+e1istm
+e1j
+e1k2lo
+ek2ra
+e1kram
+1eksem
+1ekska
+eks2pr
+1ekstr
+1ekviv
+1e2lamu
+1eleme
+e3li
+e2l1ol
+el1t2r
+1elun
+e1m
+emne1
+1e2nerg
+eo2hu
+e1o2le
+e1o2lu
+eo1p2
+e1o2sak
+e1ots
+e1p
+ep2l
+ep2ri
+ep2ru
+er1ain
+ere1el
+1ergu
+er1kr
+er2pre
+e3saa
+es1an
+1ese.
+esi1e
+1esine
+es2kl
+es2kr
+es2k1ö
+e1so
+es1ole
+es2por
+1ette
+e1ug
+e1u2j
+e1u2l
+e1usk
+eu2tr
+e1uu
+e1v
+e1õ2
+e1ö
+e1ä2
+e1ü2
+e1ž
+1fa
+1fe
+2f1f
+1fi
+2f1l
+flu2
+2f1n
+1fo
+2fra
+f2rees
+2f1t
+1ga
+ga1k2
+ga1o
+ga1p2
+gasi1a
+2gatsu
+g1b
+1ge
+ge1a
+ge1k2l
+2g1h
+1gi
+gik2
+2g1j
+2g1k
+2g1l
+2g1m
+2g1n
+1gol
+g1o2sa
+2g1p2
+2g1r
+3g2rana
+3g2rav
+3g2rup
+2g1s
+2g1t
+1gu
+gu1e
+gulu2
+gu3p2
+gu1spo
+2g1v
+2g1õ
+1gü
+1ha
+haa2s
+ha1e
+1he
+he2rai
+h1h
+1hi
+hia2
+hi2kl
+h1j
+h1l
+h1m
+h1n
+1ho
+hoa2
+2h1p
+h2t1ae
+h2t1a2j
+h2t1ar
+htea2
+ht3s
+htu1
+h2t1ö
+1hu
+hu1a
+hu2lo
+2h1v
+hva1a
+1hõ
+1hö
+1hä
+1hü
+iaa2l
+i1aast
+i1a2bi
+i1ae
+i1a2hi
+i1aine
+ia2ja
+i1akt
+ia2la
+i1ala.
+i1alb
+i1all
+i1a2lu
+i1amet
+i1anal
+ia1o
+ia1p2
+i1a2par
+i1arm
+i1ars
+i1arv
+i1a2si
+i1a2su
+i1a2tel
+i1au
+i1a2vaj
+i1b
+i1d
+idu1u
+i1eal
+i1eel
+i1e2h
+iek3r
+i1eks
+ie2lu
+i1eos
+ie2sin
+i1f
+i2fr
+i1g
+igi1a
+igio2
+i3g2ram
+ii2kl
+ii2kr
+iima1a
+i1inde
+iin1k2
+i1istu
+ii2vo
+i1j
+i1k
+i2kaut
+ikk2r
+ik2laa
+ik2las
+i2kli
+ik2re
+ik1t2r
+1ilme
+1ilmut
+il2pl
+1i2lust
+i1m
+imi2s1
+i1n
+in2d1al
+1indek
+indo1
+1iniml
+inna1a
+1insen
+1insp
+1inven
+i1oht
+i1o2lek
+i1o2lu.
+i1o2man
+ioo2na
+iooni1
+i1o2per
+i1o2sa
+i1ots.
+i1p
+ip2la
+i2plo
+ip2r
+ip2sp
+irja1o
+i2s1au
+i2selu
+1isola
+i1sot
+isp2
+is2por
+is1üh
+is1ü2l
+2it
+it2or
+i1traf
+i3tseh
+itte1
+iu2ju
+iu2mo
+ium1p
+i1v
+ivii2l
+i1õ2
+i1ä
+i1ü2
+i1Å¡
+i1ž
+3jaa
+ja1aa
+ja1aj
+ja1ann
+ja1arm
+ja1as
+ja1ee
+ja1e2l
+ja1i2
+2jam.
+ja1ost
+ja1p2
+je1a2
+je1i
+ju1a
+1ka
+2k1aed
+2k1aeg
+2k1a2lus
+kar2pl
+2k1asj
+2k1b
+2k1d
+1ke
+2keem.
+ke1in
+ke1kr
+2kelet
+2ken.
+ke1o
+kes2k1a2
+2k1f
+k1g
+2k1h
+1ki
+kiu2d
+2k1j
+2k1k
+kk3s2
+kku1k
+1k2laas
+2klai
+k2lamb
+2klan
+k2lapp
+1k2leit
+2klem
+3kliim
+2kloom
+2klu
+2k1m
+2k1n
+1ko
+2k1p2
+k2raan
+1kraav
+1krab
+k2rae
+1k2reem
+2kreep
+k2res
+k2rii
+2kro
+3krohv
+k2ruu
+k2ruv
+1kruvi
+2ks
+ks2kr
+k1so
+ks2pl
+2kt
+1ku
+ku1a
+kuu1k
+2k1v
+3k2vant
+3kvart
+1kõ
+1kö
+1kä
+1kü
+kü2h
+2k1ühe
+k1Å¡
+1la
+laa2r1a
+l1a2la.
+l1alk
+2lanik
+2l1arv
+2lauto
+2l1b
+1le
+le1a2
+le1ee
+2lekk
+2lektr
+le1oh
+le2sa
+l1f
+lf2re
+lgu2sa
+2l1h
+1li
+li1aas
+li1aj
+li1ar
+li1a2s
+li1e2
+2lii.
+2liia
+2liima
+li2kra
+2l1ilm
+li1o2l
+lip2l
+li1t2re
+li1uj
+2l1j
+2l1k
+2l1l
+llk2
+l2lor
+l3lu
+2l1m
+lmi1a2
+2l1n
+1lo
+2l1o2le
+lo2lij
+l1orn
+2l1o2sa.
+2l1p
+lp2r
+2l1r
+2l1s
+2lt
+1lu
+lu1ah
+lu1ai
+lu1al
+lu1as
+lue2
+lu1el
+lu1il
+l1uks.
+2lun
+lusa2
+2luss.
+2l1v
+lve1a
+1lõ
+1lö
+1lä
+1lü
+l1Å¡
+1ma
+ma1a2bi
+ma1e2
+ma1k2l
+map2
+ma1pl
+2mb
+mbe2r
+mber1a
+2m1d
+1me
+me1a2
+meo2
+me1os
+2metn
+2m1f
+2m1h
+1mi
+mi1aj
+mi1e
+mip2
+misa2
+mi3si
+misk2
+miso2
+mis3tr
+mi2sü
+2m1j
+2m1k2
+2m1l
+2m1m
+2m1n
+1mo
+m1oks
+2mp
+2m1r
+2m1s
+m2st
+2m3t2
+1mu
+mua2
+mu1ah
+2m1v
+1mö
+1mä
+1mü
+1na
+na1aa
+naa2ra
+na1i2ni
+2nalü
+na1o
+na1p2l
+na1p2r
+na1us
+2n1d
+nde1a2
+ndu2s
+n2dž
+1ne
+2ne2hit
+nese1i
+2n1f
+2n1g
+2n1h
+1ni
+ni1aj
+ni1as
+ni1e2
+2nimen
+2niml
+ni1so
+nisu1
+2n1j
+2nk
+nksp2
+2n1l
+2n1m
+2n1n
+nnaa2
+nna1e2
+nna1i2
+1no
+2n1p2
+2n1r
+2ns
+ns2kr
+ns2lav
+n1so
+nsti1
+2nt
+nte2l
+nt3ra
+1nu
+nu1spo
+2n1v
+1nõ
+1nö
+1nä
+1nü
+n1Å¡
+n1ž
+o1a2d
+o1ae
+o1a2j
+o1aku
+o1a2mat
+o1an
+o1b
+1obj
+o1d
+odaa2
+odaal1
+oe2le
+o1elek
+o1f
+o2fr
+o1go
+1ohak
+o2haka
+o1iso
+oi2t1ai
+oiu1a
+o1j
+1o2lek.
+o2lev
+o2lija
+o2mad
+1omadu
+o1opti
+2oos
+opsu1
+o2r1ai
+1orav
+1or3g2
+2orgr
+ori1sp
+1orju
+1orkes
+1orna
+os2kl
+1oskus
+os1o2l
+1otsa
+o3tsö
+o1v
+o1õ
+o1ü2
+o1že
+1pa
+pa1a2m
+pan3sl
+1pe
+pea1a
+pe2a3j
+2p1eksk
+pep2r
+p1f2
+p1h
+1pi
+pi2kl
+pila2s
+pi2p3r
+2p1j
+2p1k
+p2laat
+3plak
+1p2lasm
+plek2s1
+2plem
+2pli
+3pliia
+p2luus
+2p1m
+2p1n
+3p2neu
+1po
+pordi1
+2pp
+p2p1as
+ppe1a
+p2raa
+p2rep
+1p2roo
+1p2rot
+2p1s
+p2st
+3p2sü
+2p1t
+1pu
+2p1v
+1põ
+1pö
+1pä
+1pü
+1ra
+raa2l1a
+2raav
+2rafo
+ra1kr
+2r1anal
+ra2par
+ra1pr
+raua3
+raud1
+rau2da
+2rauk
+2raum
+2rauto
+r1b
+r1d
+rde1a
+1re
+2reene
+2rehit
+re2pre
+2rette
+r1f
+r1g
+r2g1ae
+r2g1ah
+r1h
+1ri
+ri1aj
+ri1ala
+ri1a2m
+ri3br
+ri1ek
+ri1el
+2riip.
+ri1om
+ri1ots
+rip2p
+rippa2
+ri1t2r
+r1j
+r1l
+r1m
+r1n
+1ro
+roa2
+ro1e2
+2rohv
+r1p
+2r1r
+r1so
+r1s2po
+1ru
+rua2
+ru1k2r
+ruum1a2
+r1v
+1rõ
+1rö
+1rä
+1rü
+r1Å¡
+r1ž
+1sa
+s1aas
+2s1ae
+s1agr
+s1ahi
+s1ain
+2saine
+2sala.
+sa3li
+s1alus
+2s1ann
+2sarvu
+s1asen
+sa1spo
+2s1aut
+s3b2
+s3d2
+1se
+se1ala
+se1ar
+se1eh
+2s1ees
+2sehh
+2se2hit
+sei2g
+se1k2l
+se2lam
+2sellu
+2semen
+2sensu
+sep2r
+2se2se.
+2s1esit
+2s1e2ten
+se1t2r
+2sette
+s1f
+s3g2
+2s1h
+1si
+si1aj
+si1ar
+sie2
+si1el
+s1i2ha.
+s1ins
+si1os
+si1s2p
+sisse1
+si1ur
+2s1j
+sjaa2
+2s1k
+ske1a2
+sk2lei
+3sk2ler
+s2kli
+3s2kulp
+s3kvar
+s2k1õ2li
+2s1l
+2s1m
+2s1n
+1sobi
+s1oht
+1soi
+s1oks
+2sole
+s1o2lek
+1son
+1soo
+s1orj
+1sort
+s1os
+2so2sa
+s1p
+s2prii
+2spu
+2s1r
+2s1s
+ss2po
+s1t
+1staad
+2ste
+2sto
+s2tr
+st2rei
+s3tseh
+s3t2sü
+stus1a
+stu2si
+1s2tuud
+1su
+2sula.
+2s1uss.
+2s1v
+1sõ
+2s1õh
+2s1õig
+s1õ2li
+2s1õ2p
+1sö
+2s1ö2k
+2sön
+1sä
+1sü
+2sü2h
+2sülek
+s1Å¡
+1ta
+2taad
+taa2r1e
+2tabii
+2tahi.
+2t1aine
+ta3lu
+2tatis
+t1b
+2t3d2
+1te
+te1al
+te1an
+te1a2s
+te1a2va
+teis2t
+te1k2l
+te1s2p
+t1f
+t1g
+2t1h
+1ti
+ti1aj
+ti1al
+ti1as
+ti1e2
+ti1os
+2t1j
+2t1k
+tk2la
+tk2r
+2t1l
+tlu2sa
+2t1m
+tmi2s1
+2t1n
+1to
+to1el
+to1in
+2t1o2sa.
+2t1p2
+t1r
+t2rall
+1t2ran
+1traum
+3treim
+1t2rep
+1triip
+1t2ruu
+1t2rü
+2t1s
+t3sae
+tsea2
+1tseh
+3tsehh
+t2sp2
+t2st
+2t1t
+tte1e
+1tu
+tu1ar
+tua2s
+tu1kr
+tu2sa
+tus1a2j
+tusk2
+tuss2
+tus3t2
+tu2sõ
+tu2sül
+2t1v
+1tõ
+2tõmbl
+1tö
+töök2
+töö1p2
+1tä
+täi2s1
+1tü
+2t1ü2hen
+t1Å¡
+1tšek
+1tšem
+uaa2l
+u1ae
+u1ain
+u1akt
+ua2la
+u1alu
+u1an
+ua1o
+ua1p2
+ua2se
+ua2si.
+u1ast
+u1au
+ua2val
+u1b
+u1do
+u3d2raa
+u1eh
+u1ei
+u1eks
+ue2l
+u1elu
+u1f
+u1g
+u1i2ga.
+u1i2h
+ui2kl
+u1ilm
+1uim.
+u1j
+u2jumi
+u1kraa
+u1kruv
+u2l1ol
+u3lu
+u1m
+unaa2
+u1o
+uo2l
+uo2m
+uo2p
+uo2s
+u1p
+u2pl
+u3p2la
+up2r
+uraa2l
+ur1auk
+1urb.
+urp2
+us1abi
+us1ais
+us1akt
+usa2l
+us1ala
+us1a2p
+us1are
+us1arm
+u2sasu
+use1an
+u2s1iso
+usk2r
+us1oh
+us1o2l
+usp2
+u1s2por
+1u2suli
+us1üh
+u2s1ük
+u1t
+u2tri
+utus1a
+u2tš
+1uuen
+uule1
+u1uu
+u1v
+u1õ2
+u1ö
+u1ä2
+u1ü2
+u1ž
+1va
+va1a2j
+2v1ain
+va1kr
+va1p2l
+2vart
+vas2k1a
+2v1d
+1ve
+vee1a
+vee1k
+vee1sp
+2v3g2
+2v1h
+1vi
+2viitu
+2v1j
+2v1k
+2v1l
+2v1m
+2v1n
+2v1p2
+2v1r
+2v1s
+2v1t
+2v1v
+1zo
+õ1b
+õbe1
+õ1g
+õhi1
+õhie2
+1õigu
+õi2kl
+õ1j
+õja1
+1õmbl
+õ2petu
+õra2s1
+õu1a2r
+õude1
+1õun.
+õ1v
+ö1a2
+ö1b
+ö1d
+ö2dee
+ö1g
+ö1h
+ö1j
+ö1k
+1ö2kon
+ö1l
+öli2s1
+ö1m
+ö2p1au
+ö1p2la
+ö1v
+ö1õ
+öö1e
+öö1i
+öö1o2
+ä1b
+ä1d
+äe1a
+äe1o2
+ä1g
+ä1j
+1ä2ke.
+äli2sa
+ära1a
+ära1o
+ü1b
+ü1g
+ühi1a
+1ühik
+ü2hik.
+ü1j
+ü2lek
+1üleka
+1ü2les
+üle2se
+1ü2liko
+ü1so
+1ütle
+ü1v
+üügi1
+üü2l1a2
+1Å¡a
+1Å¡e
+2Å¡ek
+2Å¡em
+1Å¡i
+Å¡1k
+Å¡1m
+Å¡1p
+1šö
+1šü
+1ža
+1ži
+1žo
+}
+
+% end pattern data
+
diff --git a/Master/texmf-dist/tex/context/patterns/lang-et.rme b/Master/texmf-dist/tex/context/patterns/lang-et.rme
new file mode 100644
index 00000000000..073de4c5464
--- /dev/null
+++ b/Master/texmf-dist/tex/context/patterns/lang-et.rme
@@ -0,0 +1,30 @@
+% comment copied from public hyphenation files}
+
+% source of data: ethyph.tex
+
+% begin original comment
+
+
+% preamble of file c:/data/develop/tex/texmf/tex/generic/hyphen/ethyph.tex
+%%% ====================================================================
+%%% @LaTeX-file{
+%%% author = "Enn Saar",
+%%% version = "1.0",
+%%% date = "1992-03-18"
+%%% time = ""
+%%% filename = "ethyphen.tex",
+%%% address = ""
+%%% telephone = "",
+%%% FAX = "",
+%%% checksum = "",
+%%% email = "saar@fuug.fi",
+%%% codetable = "DC/EC",
+%%% keywords = "",
+%%% supported = "yes",
+%%% docstring = "\lefthyphenmin=?\righthyphenmin=?"
+%%% }
+%%% ====================================================================
+\input cathyph.tex
+
+% end original comment
+
diff --git a/Master/texmf-dist/tex/context/patterns/lang-nl.rhl b/Master/texmf-dist/tex/context/patterns/lang-nl.rhl
new file mode 100644
index 00000000000..9e176ee8925
--- /dev/null
+++ b/Master/texmf-dist/tex/context/patterns/lang-nl.rhl
@@ -0,0 +1,2907 @@
+ma{-}{i}{ï}s
+ka{-}{i}{ï}n
+ba{-}{a}{ä}l
+Jo{-}{e}{ë}l
+Ba{-}{a}{ä}l
+ta{-}{e}{ë}l
+ia{-}{e}{ë}n
+Ka{-}{i}{ï}n
+tea{-}{e}{ë}n
+r{a-}{}{aa}tje
+p{a-}{}{aa}tje
+ge{-}{e}{ë}bd
+ge{-}{e}{ë}nt
+zee{-}{e}{ë}n
+wee{-}{e}{ë}n
+ski{-}{e}{ë}r
+ski{-}{e}{ë}n
+ru{-}{i}{ï}-ne
+ree{-}{e}{ë}n
+po{-}{e}{ë}et
+pee{-}{e}{ë}n
+oli{-}{e}{ë}n
+ka{-}{i}{ï}ns
+fee{-}{e}{ë}n
+ari{-}{e}{ë}r
+Ha{-}{i}{ï}-ti
+po{-}{e}{ë}ma
+pi{-}{e}{ë}-ta
+po{-}{e}{ë}em
+jeu{-}{i}{ï}g
+na{-}{i}{ï}ef
+moe{-}{e}{ë}r
+de{-}{i}{ï}st
+Za{-}{i}{ï}-re
+ge{-}{i}{ï}nd
+Ka{-}{i}{ï}-ro
+re{-}{e}{ë}el
+re{-}{e}{ë}-le
+ge{-}{e}{ë}gd
+Ca{-}{i}{ï}-ro
+be{-}{e}{ë}rf
+the{-}{i}{ï}st
+stee{-}{e}{ë}n
+ge{-}{e}{ë}rfd
+ge{-}{e}{ë}ist
+di{-}{e}{ë}-ten
+ka-no{-}{e}{ë}n
+va-cu{-}{u}{ü}m
+twee{-}{e}{ë}n
+tree{-}{e}{ë}n
+smeu{-}{i}{ï}g
+slee{-}{e}{ë}n
+ski{-}{e}{ë}rs
+re{-}{u}{ü}-nie
+re-li{-}{e}{ë}f
+po{-}{e}{ë}-zie
+po{-}{e}{ë}-ten
+ma-li{-}{e}{ë}n
+le-li{-}{e}{ë}n
+knie{-}{e}{ë}n
+idee{-}{e}{ë}n
+ge{-}{e}{ë}erd
+dru{-}{i}{ï}-de
+drie{-}{e}{ë}n
+cli{-}{e}{ë}nt
+ca-ri{-}{e}{ë}s
+ari{-}{e}{ë}rs
+ac-ti{-}{e}{ë}n
+Is-ra{-}{e}{ë}l
+ori{-}{e}{ë}nt
+ME{-}{}{–}er
+ole{-}{i}{ï}-ne
+be{-}{e}{ë}rfd
+Ha-ri{-}{e}{ë}t
+Fij-i{-}{e}{ë}r
+Tri{-}{e}{ë}st
+BN{-}{}{–}er
+Is-ma{-}{e}{ë}l
+Li-bi{-}{e}{ë}r
+Ori{-}{e}{ë}nt
+wee{-}{i}{ï}ge
+ra-bi{-}{e}{ë}s
+taxi{-}{e}{ë}n
+thee{-}{e}{ë}n
+ta-li{-}{e}{ë}n
+ru{-}{i}{ï}-nen
+se-ri{-}{e}{ë}n
+si{-}{e}{ë}r-ra
+si{-}{e}{ë}s-ta
+snee{-}{e}{ë}n
+spie{-}{e}{ë}n
+ha-vo{-}{e}{ë}r
+po{-}{e}{ë}-men
+po{-}{e}{ë}-sis
+po-go{-}{e}{ë}n
+po-lo{-}{e}{ë}n
+po-ri{-}{e}{ë}n
+fa-ci{-}{e}{ë}s
+fa{-}{e}{ë}-ton
+na{-}{i}{ï}e-ve
+na-ti{-}{e}{ë}n
+or-gi{-}{e}{ë}n
+owee{-}{e}{ë}r
+jeu{-}{i}{ï}ge
+jo-jo{-}{e}{ë}n
+ju-do{-}{e}{ë}n
+ka-no{-}{e}{ë}r
+kwee{-}{e}{ë}n
+ma-gi{-}{e}{ë}r
+ma-o{-}{i}{ï}st
+me-ni{-}{e}{ë}n
+echo{-}{e}{ë}n
+ego{-}{i}{ï}st
+flu{-}{i}{ï}-de
+fu-ri{-}{e}{ë}n
+ge-ni{-}{e}{ë}n
+glee{-}{e}{ë}n
+he-ro{-}{e}{ë}n
+ide{-}{e}{ë}el
+ide{-}{e}{ë}-le
+In-di{-}{e}{ë}r
+de{-}{i}{ï}s-me
+co{-}{i}{ï}-tus
+li{-}{e}{ë}-ren
+om{a-}{}{aa}tje
+ge{-}{e}{ë}ind
+SP{-}{}{–}er
+ge{-}{e}{ë}tst
+SS{-}{}{–}er
+ru-zi{-}{e}{ë}n
+To-go{-}{e}{ë}r
+ge{-}{i}{ï}nkt
+Sy-ri{-}{e}{ë}r
+Os-lo{-}{e}{ë}r
+uf{o-}{}{oo}tje
+go{-}{e}{ë}-tie
+veto{-}{e}{ë}n
+id{-}{}{–}er
+Li-ma{-}{e}{ë}r
+ge{-}{e}{ë}cht
+ge{-}{e}{ë}est
+the{-}{i}{ï}-ne
+IT{-}{}{–}er
+At-ti{-}{e}{ë}r
+fi{-}{e}{ë}s-ta
+Da-ni{-}{e}{ë}l
+Ra-fa{-}{e}{ë}l
+be-zi{-}{e}{ë}n
+vl{a-}{}{aa}tje
+sk{i-}{}{ie}tje
+op{a-}{}{aa}tje
+ge{-}{u}{ü}rmd
+ge{-}{e}{ë}g-de
+be{-}{i}{ï}nkt
+be{-}{e}{ë}rft
+be{-}{e}{ë}dig
+ge{-}{i}{ï}n-de
+cre{-}{e}{ë}er
+ge{-}{e}{ë}n-te
+ru{-}{i}{ï}-nes
+vree{-}{e}{ë}n
+re{-}{e}{ë}-ler
+ca-f{é-}{}{ee}tje
+fo-t{o-}{}{oo}tje
+ge{-}{e}{ë}is-te
+be-h{a-}{}{aa}tje
+pri{-}{e}{ë}-len
+the{-}{i}{ï}s-me
+ter-ri{-}{e}{ë}r
+su{-}{i}{ï}-ci-de
+stu-di{-}{e}{ë}n
+spe-ci{-}{e}{ë}n
+sau-ri{-}{e}{ë}r
+re{-}{u}{ü}-nies
+re-li{-}{e}{ë}fs
+pin-gu{-}{i}{ï}n
+pi{-}{e}{ë}-teit
+pa-ti{-}{e}{ë}nt
+or-gie{-}{e}{ë}n
+mo-za{-}{i}{ï}ek
+ma-nie{-}{e}{ë}n
+ko-pie{-}{e}{ë}n
+hy-gi{-}{e}{ë}-ne
+he-ro{-}{i}{ï}-ne
+ge{-}{e}{ë}rf-de
+ge{-}{e}{ë}er-de
+co-ca{-}{i}{ï}-ne
+cli{-}{e}{ë}n-te
+ca-fe{-}{i}{ï}-ne
+be{-}{e}{ë}digd
+si-l{o-}{}{oo}tje
+au-t{o-}{}{oo}tje
+Is-ra{-}{e}{ë}-li
+kmo{-}{}{–}er
+hbo{-}{}{–}er
+ftp{-}{}{–}de
+ta-c{o-}{}{oo}tje
+pc{-}{}{–}tje
+ftp{-}{}{–}en
+Sy-ri{-}{e}{ë}rs
+Ibe-ri{-}{e}{ë}r
+sms{-}{}{–}te
+owee{-}{e}{ë}rs
+na{-}{i}{ï}efst
+ma-m{a-}{}{aa}tje
+ki-w{i-}{}{ie}tje
+ka-n{o-}{}{oo}tje
+jo-j{o-}{}{oo}tje
+ide{-}{e}{ë}-ler
+hts{-}{}{–}er
+fu-g{a-}{}{aa}tje
+ech{o-}{}{oo}tje
+ca-su{-}{i}{ï}st
+Tri{-}{e}{ë}sts
+Swa-zi{-}{e}{ë}r
+SGP{-}{}{–}er
+Hen-ri{-}{e}{ë}t
+Ca{-}{i}{ï}-root
+Ca-ra{-}{i}{ï}eb
+Bak-oe{-}{e}{ë}r
+gi-r{o-}{}{oo}tje
+IT{-}{}{–}ers
+A4{-}{}{–}tje
+Ga-bri{-}{e}{ë}l
+me-n{u-}{}{uu}tje
+PSV{-}{}{–}er
+NSB{-}{}{–}er
+in-ge{-}{e}{ë}nt
+VVD{-}{}{–}er
+tbs{-}{}{–}er
+sms{-}{}{–}je
+di{-}{e}{ë}-tiek
+Bos-ni{-}{e}{ë}r
+ju-da{-}{i}{ï}-ca
+fo-bie{-}{e}{ë}n
+ma{-}{i}{ï}s-pap
+tra-li{-}{e}{ë}n
+tri-du{-}{u}{ü}m
+tri{-}{e}{ë}-ren
+uni{-}{e}{ë}-ren
+ta-o{-}{i}{ï}s-me
+ir-re{-}{e}{ë}-le
+sta-ti{-}{e}{ë}n
+sto{-}{i}{ï}sch
+sec-ti{-}{e}{ë}n
+se-ri{-}{e}{ë}-le
+Ser-vi{-}{e}{ë}r
+smeu{-}{i}{ï}ge
+spa-ni{-}{e}{ë}l
+schee{-}{e}{ë}n
+sms{-}{}{–}en
+ru{-}{i}{ï}-neus
+sca-bi{-}{e}{ë}s
+re{-}{u}{ü}-nist
+pi{-}{e}{ë}-tist
+po{-}{e}{ë}-ti-ca
+po{-}{e}{ë}-tiek
+Gal-li{-}{e}{ë}r
+na{-}{i}{ï}e-ver
+na-wee{-}{e}{ë}n
+neu-ri{-}{e}{ë}n
+oblie{-}{e}{ë}n
+In-di{-}{e}{ë}rs
+Ira-ni{-}{e}{ë}r
+ir-re{-}{e}{ë}el
+je-zu{-}{i}{ï}et
+ka-dee{-}{e}{ë}n
+ka-no{-}{e}{ë}rs
+ma-gi{-}{e}{ë}rs
+ma{-}{i}{ï}-ze-na
+man-di{-}{e}{ë}n
+ma-o{-}{i}{ï}s-me
+mis-si{-}{e}{ë}n
+di{-}{e}{ë}-tist
+dru{-}{i}{ï}-den
+ego{-}{i}{ï}s-me
+ego{-}{i}{ï}s-te
+fac-ti{-}{e}{ë}n
+fee{-}{e}{ë}-rie
+flu{-}{i}{ï}-dum
+ge{-}{e}{ë}m-mer
+ge{-}{e}{ë}t-ter
+ge-nie{-}{e}{ë}n
+gla-ri{-}{e}{ë}n
+glo-ri{-}{e}{ë}n
+gra-ti{-}{e}{ë}n
+he-ro{-}{i}{ï}ek
+ho-bo{-}{i}{ï}st
+hos-ti{-}{e}{ë}n
+de{-}{i}{ï}s-ten
+cre{-}{e}{ë}-ren
+da-da{-}{i}{ï}st
+da-na{-}{i}{ï}-de
+ca-mee{-}{e}{ë}n
+ca-se{-}{i}{ï}-ne
+co-de{-}{i}{ï}-ne
+co{-}{i}{ï}-taal
+athe{-}{i}{ï}st
+At-jee{-}{e}{ë}r
+be{-}{e}{ë}rf-de
+be{-}{e}{ë}r-ven
+be-oli{-}{e}{ë}n
+Be-o-ti{-}{e}{ë}r
+tu-t{u-}{}{uu}tje
+ma{-}{i}{ï}s-kip
+To-ki-o{-}{e}{ë}r
+sta-di{-}{e}{ë}n
+Li-bi{-}{e}{ë}rs
+Sa-u-di{-}{e}{ë}r
+AOW{-}{}{–}er
+Mat-te{-}{u}{ü}s
+Apu-li{-}{e}{ë}r
+co-l{a-}{}{aa}tje
+ac-c{u-}{}{uu}tje
+tru{-}{i}{ï}s-me
+la-m{a-}{}{aa}tje
+Mi-cha{-}{e}{ë}l
+Ka{-}{i}{ï}-root
+BN{-}{}{–}ers
+queue{-}{e}{ë}n
+ee-g{a-}{}{aa}tje
+CDA{-}{}{–}er
+echo{-}{e}{ë}nd
+vwo{-}{}{–}er
+lo-g{o-}{}{oo}tje
+WAO{-}{}{–}er
+ME{-}{}{–}ers
+ha-vo{-}{e}{ë}rs
+de-m{o-}{}{oo}tje
+Quito{-}{e}{ë}r
+no-t{a-}{}{aa}tje
+SS{-}{}{–}ers
+Bel-gi{-}{e}{ë}s
+ij{-}{}{–}tje
+bin-go{-}{e}{ë}n
+lo-g{é-}{}{ee}tje
+Za{-}{i}{ï}-rees
+ho-b{o-}{}{oo}tje
+Ven-lo{-}{e}{ë}r
+Um-bri{-}{e}{ë}r
+D66{-}{}{–}er
+fa{-}{e}{ë}-tons
+ba-b{a-}{}{aa}tje
+vl{a-}{}{aa}tjes
+to-k{o-}{}{oo}tje
+to-g{a-}{}{aa}tje
+tax{i-}{}{ie}tje
+sp{a-}{}{aa}tjes
+so-l{o-}{}{oo}tje
+so-f{a-}{}{aa}tje
+sk{i-}{}{ie}tjes
+sa-t{é-}{}{ee}tje
+ru{-}{i}{ï}-neer
+re{-}{e}{ë}elst
+po{-}{e}{ë}ma-ta
+op{a-}{}{aa}tjes
+mum-mi{-}{e}{ë}n
+me-m{o-}{}{oo}tje
+li{-}{e}{ë}er-de
+ge{-}{i}{ï}nk-te
+ge{-}{e}{ë}zeld
+du-{o-}{}{oo}tjes
+be{-}{i}{ï}nk-te
+be{-}{e}{ë}digt
+ge{-}{e}{ë}ts-te
+re{-}{e}{ë}-le-re
+SP{-}{}{–}ers
+ru-zi{-}{e}{ë}nd
+cd{-}{}{–}tje
+tri-{o-}{}{oo}tje
+tv{-}{}{–}tje
+cre{-}{e}{ë}ert
+om{a-}{}{aa}tjes
+pa-p{a-}{}{aa}tje
+ade-no{-}{i}{ï}-de
+ab-lu-ti{-}{e}{ë}n
+the{-}{i}{ï}s-ten
+sal-v{o-}{}{oo}tje
+pyg-mee{-}{e}{ë}n
+ra-di-{o-}{}{oo}tje
+ge{-}{e}{ë}r-gerd
+tro-fee{-}{e}{ë}n
+ter-ri{-}{e}{ë}rs
+sau-ri{-}{e}{ë}rs
+quo-ti{-}{e}{ë}nt
+pin-gu{-}{i}{ï}ns
+pa-ti{-}{e}{ë}n-te
+li-ni{-}{e}{ë}-ren
+lin-gu{-}{i}{ï}st
+ko-pi{-}{e}{ë}-ren
+ko-lo-ni{-}{e}{ë}n
+ju-da{-}{i}{ï}s-me
+gra-fie{-}{e}{ë}n
+ge-vree{-}{e}{ë}n
+ge{-}{e}{ë}i-gend
+cli{-}{e}{ë}n-ten
+bi{-}{e}{ë}n-na-le
+be{-}{e}{ë}dig-de
+be-doe{-}{i}{ï}en
+mas-s{a-}{}{aa}tje
+re-gi-{o-}{}{oo}tje
+agra-ri{-}{e}{ë}r
+al-tru{-}{i}{ï}st
+am-bi{-}{e}{ë}-ren
+Tu-ne-si{-}{e}{ë}r
+ima-g{o-}{}{oo}tje
+fa-ra-{o-}{}{oo}tje
+cor-s{o-}{}{oo}tje
+air-c{o-}{}{oo}tje
+tra-c{é-}{}{ee}tje
+iro-nie{-}{e}{ë}n
+ge{-}{e}{ë}m-merd
+PvdA{-}{}{–}er
+tv{-}{}{–}loos
+scho-li{-}{e}{ë}n
+nu-tri{-}{e}{ë}nt
+ma{-}{i}{ï}s-koek
+las-s{o-}{}{oo}tje
+kom-m{a-}{}{aa}tje
+jum-b{o-}{}{oo}tje
+exe-qui{-}{e}{ë}n
+cou-p{é-}{}{ee}tje
+cor-vee{-}{e}{ë}r
+be{-}{i}{ï}nk-ten
+be{-}{e}{ë}r-ving
+an-dro{-}{i}{ï}-de
+Vo-gezi{-}{e}{ë}r
+Tsja-di{-}{e}{ë}r
+Tri{-}{e}{ë}s-ter
+Sil-ezi{-}{e}{ë}r
+Si-be-ri{-}{e}{ë}r
+PvdV{-}{}{–}er
+Ot-ta-wa{-}{e}{ë}r
+Oce-a-ni{-}{e}{ë}r
+Na-mi-bi{-}{e}{ë}r
+Mo-ra-vi{-}{e}{ë}r
+Ma-la-wi{-}{e}{ë}r
+Li-gu-ri{-}{e}{ë}r
+Hei-loo{-}{e}{ë}r
+Gui-nee{-}{e}{ë}r
+Goe-ree{-}{e}{ë}r
+Ge-nepi{-}{e}{ë}n
+Er-me-lo{-}{e}{ë}r
+Ca-na-ri{-}{e}{ë}r
+Al-me-lo{-}{e}{ë}r
+neu-ri{-}{e}{ë}nd
+NSB{-}{}{–}ers
+Ko-lo-ni{-}{e}{ë}n
+abc{-}{}{–}tje
+ge{-}{e}{ë}n-terd
+fir-m{a-}{}{aa}tje
+A4{-}{}{–}tjes
+hbo{-}{}{–}ers
+Ge-or-gi{-}{e}{ë}r
+Ma-ri{-}{e}{ë}l-le
+WAO{-}{}{–}ers
+CDA{-}{}{–}ers
+AOW{-}{}{–}ers
+EHBO{-}{}{–}er
+VVD{-}{}{–}ers
+sms{-}{}{–}jes
+sur-re{-}{e}{ë}-le
+tbs{-}{}{–}ers
+Ibe-ri{-}{e}{ë}rs
+jet-ski{-}{e}{ë}n
+ma{-}{i}{ï}s-olie
+Sa-oe-di{-}{e}{ë}r
+So-ma-li{-}{e}{ë}r
+Bos-ni{-}{e}{ë}rs
+kaf-ka{-}{e}{ë}sk
+olym-pi{-}{e}{ë}r
+vi-gi-li{-}{e}{ë}n
+snij-ma{-}{i}{ï}s
+tri-du{-}{u}{ü}ms
+uto-pie{-}{e}{ë}n
+va-ca-ti{-}{e}{ë}n
+va-ri{-}{e}{ë}-ren
+sur-re{-}{e}{ë}el
+taxa-ti{-}{e}{ë}n
+ma-o{-}{i}{ï}s-ten
+ste-ro{-}{i}{ï}-de
+sto{-}{i}{ï}-cijn
+sto{-}{i}{ï}-sche
+Ser-vi{-}{e}{ë}rs
+sfe-ro{-}{i}{ï}-de
+spa-ni{-}{e}{ë}ls
+scha-li{-}{e}{ë}n
+ru{-}{i}{ï}-ne-ren
+ru{-}{i}{ï}-neust
+ru{-}{i}{ï}-neu-ze
+re-ga-li{-}{e}{ë}n
+re-li-gi{-}{e}{ë}n
+roe-koe{-}{e}{ë}n
+rom-bo{-}{i}{ï}-de
+di-plo{-}{i}{ï}-de
+pe-ti-ti{-}{e}{ë}n
+pi{-}{e}{ë}-tis-me
+po{-}{e}{ë}-tisch
+prai-ri{-}{e}{ë}n
+pro-te{-}{i}{ï}-ne
+pro-za{-}{i}{ï}st
+al-ka-li{-}{e}{ë}n
+Ar-me-ni{-}{e}{ë}r
+do-mi-no{-}{e}{ë}n
+Gal-li{-}{e}{ë}rs
+mos-kee{-}{e}{ë}n
+mo-za{-}{i}{ï}sch
+ne-gro{-}{i}{ï}-de
+oc-ta{-}{e}{ë}-der
+Oe-kra{-}{i}{ï}-ne
+op-tree{-}{e}{ë}n
+ini-ti{-}{e}{ë}-le
+in-tu{-}{i}{ï}-tie
+Ira-ni{-}{e}{ë}rs
+la{-}{i}{ï}-cis-me
+ma{-}{i}{ï}s-kolf
+ma{-}{i}{ï}s-meel
+ma-te-ri{-}{e}{ë}n
+de-vi{-}{e}{ë}-ren
+di{-}{e}{ë}-tis-te
+ego{-}{i}{ï}s-ten
+ele-gie{-}{e}{ë}n
+epo-pee{-}{e}{ë}n
+fe-ca-li{-}{e}{ë}n
+fee{-}{e}{ë}-riek
+fee{-}{e}{ë}-ries
+fo-li{-}{e}{ë}-ren
+gan-gli{-}{e}{ë}n
+ge-drie{-}{e}{ë}n
+ge-dwee{-}{e}{ë}r
+ge{-}{e}{ë}rf-den
+ge-twee{-}{e}{ë}n
+gra-di{-}{e}{ë}nt
+ha-ci{-}{e}{ë}n-da
+He-bree{-}{e}{ë}n
+He-bree{-}{e}{ë}r
+he-ro{-}{i}{ï}e-ke
+he-ro{-}{i}{ï}sch
+he-ro{-}{i}{ï}s-me
+hexa{-}{e}{ë}-der
+ijs-zee{-}{e}{ë}n
+in-di-ci{-}{e}{ë}n
+cre{-}{e}{ë}er-de
+da-da{-}{i}{ï}s-me
+ci-bo-ri{-}{e}{ë}n
+cof-fe{-}{i}{ï}-ne
+co{-}{i}{ï}-te-ren
+col-lo{-}{i}{ï}-de
+ar-te-ri{-}{e}{ë}n
+athe{-}{i}{ï}s-me
+At-jee{-}{e}{ë}rs
+be{-}{e}{ë}di-gen
+Be-o-ti{-}{e}{ë}rs
+ha-de{-}{i}{ï}-cum
+Ara-mee{-}{e}{ë}r
+col-l{i-}{}{ie}tje
+Sa-u-di{-}{e}{ë}rs
+ge{-}{e}{ë}t-terd
+ge{-}{e}{ë}f-fend
+Mat-the{-}{u}{ü}s
+tro-pee{-}{e}{ë}n
+Ma-ri{-}{e}{ë}t-te
+usan-ti{-}{e}{ë}n
+par-ti{-}{e}{ë}-le
+al-li{-}{e}{ë}-ren
+qui{-}{e}{ë}-tist
+ca-vi-{a-}{}{aa}tje
+ba-ha{-}{i}{ï}s-me
+Ar-te-si{-}{e}{ë}r
+mi-cr{o-}{}{oo}tje
+he-bra{-}{i}{ï}-ca
+Ca-ra{-}{i}{ï}-ben
+PvdD{-}{}{–}er
+gla-c{é-}{}{ee}tje
+cell{o-}{}{oo}tje
+cy-clo{-}{i}{ï}-de
+dra-m{a-}{}{aa}tje
+cor-vee{-}{e}{ë}n
+Ha-ri{-}{e}{ë}t-te
+pa-ri-{a-}{}{aa}tje
+ge{-}{e}{ë}chood
+ma{-}{i}{ï}s-land
+Ha{-}{i}{ï}-ti-aan
+Da-ni{-}{e}{ë}l-le
+pap-p{a-}{}{aa}tje
+jet-ski{-}{e}{ë}r
+ma{-}{i}{ï}s-veld
+tra-vee{-}{e}{ë}n
+he-bra{-}{i}{ï}st
+ze-br{a-}{}{aa}tje
+vil-l{a-}{}{aa}tje
+vi-de-{o-}{}{oo}tje
+tre-m{a-}{}{aa}tje
+to-k{o-}{}{oo}tjes
+to-g{a-}{}{aa}tjes
+the-m{a-}{}{aa}tje
+ta-toe{-}{e}{ë}er
+so-l{o-}{}{oo}tjes
+so-f{a-}{}{aa}tjes
+smeu{-}{i}{ï}gst
+ru{-}{i}{ï}-neert
+re-ç{u-}{}{uu}tje
+pol-k{a-}{}{aa}tje
+poe-m{a-}{}{aa}tje
+pin-d{a-}{}{aa}tje
+pi-a-n{o-}{}{oo}tje
+pa-p{a-}{}{aa}tjes
+ope-r{a-}{}{aa}tje
+no-t{a-}{}{aa}tjes
+me-m{o-}{}{oo}tjes
+ka-n{o-}{}{oo}tjes
+jo-j{o-}{}{oo}tjes
+in-ge{-}{e}{ë}rfd
+fu-g{a-}{}{aa}tjes
+ech{o-}{}{oo}tjes
+ca-f{é-}{}{ee}tjes
+cac-tee{-}{e}{ë}n
+be{-}{e}{ë}rf-den
+alo{-}{e}{ë}–s
+af-ge{-}{e}{ë}ist
+ac-c{u-}{}{uu}tjes
+be{-}{e}{ë}in-dig
+PSV{-}{}{–}ers
+lo-g{é-}{}{ee}tjes
+ki-l{o-}{}{oo}tjes
+SGP{-}{}{–}ers
+bv{-}{}{–}tjes
+mbo{-}{}{–}ers
+me-n{u-}{}{uu}tjes
+tri-{o-}{}{oo}tjes
+D66{-}{}{–}ers
+op-ge{-}{e}{ë}ist
+weg-ge{-}{e}{ë}bd
+ge{-}{u}{ü}p-load
+smeu{-}{i}{ï}ger
+aard-oli{-}{e}{ë}n
+atro-fie{-}{e}{ë}n
+in-sig-ni{-}{e}{ë}n
+hy-gi{-}{e}{ë}-nist
+ca-me-r{a-}{}{aa}tje
+be{-}{i}{ï}n-vloed
+va-ri{-}{e}{ë}-teit
+the-o-rie{-}{e}{ë}n
+spa-ti{-}{e}{ë}-ren
+so-ci{-}{e}{ë}-teit
+pa-ti{-}{e}{ë}n-tie
+pa-ti{-}{e}{ë}n-ten
+pa-ro-chi{-}{e}{ë}n
+of-fi-ci{-}{e}{ë}-le
+me-lo-die{-}{e}{ë}n
+ma-te-ri{-}{e}{ë}-le
+ju-di-ci{-}{e}{ë}-le
+je-zu{-}{i}{ï}e-ten
+in-tu{-}{i}{ï}-tief
+ge{-}{e}{ë}i-gen-de
+ga-le-rie{-}{e}{ë}n
+fi-nan-ci{-}{e}{ë}n
+ef-fi-ci{-}{e}{ë}nt
+con-ci{-}{e}{ë}r-ge
+com-mu-ni{-}{e}{ë}n
+ca-lo-rie{-}{e}{ë}n
+bac-te-ri{-}{e}{ë}n
+au-di{-}{e}{ë}n-tie
+aca-de-mi{-}{e}{ë}n
+pa-ti{-}{e}{ë}n-tje
+agra-ri{-}{e}{ë}rs
+ali{-}{e}{ë}-na-tie
+al-ka-lo{-}{i}{ï}-de
+al-tru{-}{i}{ï}s-me
+am-fi-bie{-}{e}{ë}n
+an-nu{-}{i}{ï}-teit
+em-bo-lie{-}{e}{ë}n
+co{-}{i}{ï}-teer-de
+pon-ch{o-}{}{oo}tje
+plis-s{é-}{}{ee}tje
+sal-vi-{a-}{}{aa}tje
+pa-pa-j{a-}{}{aa}tje
+ma-ri-n{a-}{}{aa}tje
+yaht-zee{-}{e}{ë}n
+So-ma-li{-}{e}{ë}rs
+Ka-na{-}{a}{ä}-niet
+zalf-oli{-}{e}{ë}n
+tro-chee{-}{e}{ë}n
+tran-si{-}{e}{ë}nt
+si-nus-o{-}{i}{ï}-de
+prul-po{-}{e}{ë}et
+po-ny{-}{}{–}tje
+ki-mo-n{o-}{}{oo}tje
+ex-po-s{é-}{}{ee}tje
+eva-cu{é-}{}{ee}tje
+cli-ch{é-}{}{ee}tje
+bi-ki-n{i-}{}{ie}tje
+ali{-}{e}{ë}-neert
+agen-d{a-}{}{aa}tje
+aan-ge{-}{e}{ë}rfd
+Mal-di-vi{-}{e}{ë}r
+Hen-ge-lo{-}{e}{ë}r
+Ha{-}{i}{ï}-ti-aans
+Ca-la-bri{-}{e}{ë}r
+Bree{-}{e}{ë}-naar
+vuur-zee{-}{e}{ë}n
+pa-ti{-}{e}{ë}n-tes
+Eritree{-}{e}{ë}r
+mys-te-ri{-}{e}{ë}n
+Py-re-nee{-}{e}{ë}n
+Hen-ri{-}{e}{ë}t-te
+Oek-ra{-}{i}{ï}-ner
+Ethio-pi{-}{e}{ë}r
+be{-}{e}{ë}in-digd
+idee{-}{e}{ë}n-man
+Sa-oe-di{-}{e}{ë}rs
+ha-wa{-}{i}{ï}hemd
+Jor-da-ni{-}{e}{ë}r
+Eu-ro-pee{-}{e}{ë}r
+fa-ri-zee{-}{e}{ë}n
+ar-te-ri{-}{e}{ë}-le
+kaf-ka{-}{e}{ë}s-ke
+verf-oli{-}{e}{ë}n
+jet-ski{-}{e}{ë}rs
+idee{-}{e}{ë}-loos
+wee{-}{i}{ï}g-heid
+ma{-}{i}{ï}s-plant
+te-tra{-}{e}{ë}-der
+ti{-}{e}{ë}r-ce-ren
+tra-chee{-}{e}{ë}n
+tra-ge-di{-}{e}{ë}n
+tri{-}{e}{ë}n-na-le
+twee{-}{e}{ë}r-lei
+uni-ta-ri{-}{e}{ë}r
+su{-}{i}{ï}-ci-daal
+su{-}{i}{ï}-ci-da-le
+ta-toe{-}{e}{ë}-ren
+ste-ro{-}{i}{ï}-den
+sto{-}{i}{ï}-cijns
+sto{-}{i}{ï}-cis-me
+idee{-}{e}{ë}-lo-ze
+schi-zo{-}{i}{ï}-de
+sek-ta-ri{-}{e}{ë}r
+sfe-ro{-}{i}{ï}-den
+sham-poo{-}{e}{ë}n
+si-tu-a-ti{-}{e}{ë}n
+slag-zee{-}{e}{ë}n
+so-le-no{-}{i}{ï}-de
+spo-li{-}{e}{ë}-ren
+spon-dee{-}{e}{ë}n
+ru{-}{i}{ï}-neer-de
+re{-}{u}{ü}-nis-ten
+re{-}{u}{ü}s-se-ren
+rom-bo{-}{i}{ï}-den
+pa-tri-ci{-}{e}{ë}r
+pen-ta{-}{e}{ë}-der
+pers-wee{-}{e}{ë}n
+pi{-}{e}{ë}-de-stal
+pla-gi{-}{e}{ë}-ren
+po{-}{e}{ë}tas-ter
+po{-}{e}{ë}ti-caal
+po{-}{e}{ë}-ti-sche
+po-li-ti{-}{e}{ë}-le
+pool-zee{-}{e}{ë}n
+pre-fa-ti{-}{e}{ë}n
+pro-te{-}{i}{ï}-nen
+pro-to-zo{-}{e}{ë}n
+pro-to-zo{-}{o}{ö}n
+pro-za{-}{i}{ï}sch
+qui{-}{e}{ë}-tis-me
+rand-zee{-}{e}{ë}n
+re-cep-ti{-}{e}{ë}n
+re-ci-pi{-}{e}{ë}nt
+re-cre{-}{e}{ë}-ren
+Ar-me-ni{-}{e}{ë}rs
+pa-ra-no{-}{i}{ï}de
+pa-ro-die{-}{e}{ë}n
+mo-za{-}{i}{ï}e-ken
+mo-za{-}{i}{ï}-sche
+na{-}{i}{ï}-ve-teit
+na{-}{i}{ï}-vi-teit
+na-zi-ree{-}{e}{ë}r
+ni{-}{e}{ë}l-le-ren
+no-ta-ri{-}{e}{ë}-le
+oc-ta{-}{e}{ë}-ders
+odys-see{-}{e}{ë}n
+Oe-kra{-}{i}{ï}ens
+on-be{-}{e}{ë}digd
+opi-ni{-}{e}{ë}-ren
+ori{-}{e}{ë}n-taal
+ou-bli{-}{e}{ë}t-te
+pa-leo-zo{-}{e}{ë}n
+pa-na-cee{-}{e}{ë}n
+pan-the{-}{i}{ï}st
+ini-ti{-}{e}{ë}-ren
+in-tro{-}{i}{ï}-tus
+in-tu{-}{i}{ï}-ties
+Is-ra{-}{e}{ë}-liet
+jin-go{-}{i}{ï}s-me
+li-ta-nie{-}{e}{ë}n
+ma{-}{i}{ï}s-oogst
+Ma-lei-si{-}{e}{ë}r
+ma-ni{-}{e}{ë}-rist
+me-di{-}{e}{ë}-vist
+di{-}{e}{ë}-tis-ten
+di{-}{e}{ë}-tis-tes
+dou-a-rie{-}{e}{ë}n
+drie{-}{e}{ë}r-lei
+ele-va-ti{-}{e}{ë}n
+en-de-mie{-}{e}{ë}n
+ener-gie{-}{e}{ë}n
+ex-pe-di{-}{e}{ë}nt
+fa-ri-zee{-}{e}{ë}r
+fee{-}{e}{ë}-rie-ke
+fun-da-ti{-}{e}{ë}n
+ge{-}{u}{ü}ni-eerd
+glo-ri{-}{e}{ë}-ren
+gra-ti{-}{e}{ë}-ren
+haar-oli{-}{e}{ë}n
+he-bra{-}{i}{ï}s-me
+He-bree{-}{e}{ë}rs
+Hel-ve-ti{-}{e}{ë}r
+he-re-sie{-}{e}{ë}n
+he-ro{-}{i}{ï}-sche
+hexa{-}{e}{ë}-ders
+his-to-ri{-}{e}{ë}n
+ho-bo{-}{i}{ï}s-ten
+ho-mi-lie{-}{e}{ë}n
+idee{-}{e}{ë}n-bus
+con-ti-nu{-}{u}{ü}m
+co{-}{o}{ö}p-ta-tie
+co{-}{o}{ö}p-te-ren
+co-ry-fee{-}{e}{ë}n
+co-te-rie{-}{e}{ë}n
+da-da{-}{i}{ï}s-ten
+dag-le-li{-}{e}{ë}n
+dal-ma-ti{-}{e}{ë}r
+de-fi-ci{-}{e}{ë}nt
+bron-chi{-}{e}{ë}n
+Chal-dee{-}{e}{ë}n
+Chal-dee{-}{e}{ë}r
+cli{-}{e}{ë}n-teel
+col-lo{-}{i}{ï}-den
+con-ci-li{-}{e}{ë}n
+con-di-ti{-}{e}{ë}n
+ar-cha{-}{i}{ï}sch
+ar-cha{-}{i}{ï}s-me
+as-te-ro{-}{i}{ï}-de
+athe{-}{i}{ï}s-ten
+aus-pi-ci{-}{e}{ë}n
+ba-ro-nie{-}{e}{ë}n
+be{-}{e}{ë}di-ging
+bob-slee{-}{e}{ë}n
+ma{-}{i}{ï}s-brood
+EHBO{-}{}{–}ers
+mo-no-die{-}{e}{ë}n
+tai-chi{-}{e}{ë}n
+Pa-poe-{a-}{}{aa}tje
+high-tea{-}{e}{ë}n
+Ma-ri{-}{e}{ë}n-bad
+vm-bo{-}{}{–}ers
+va-cu{-}{u}{ü}m-pan
+Jak-ar-ta{-}{e}{ë}r
+fee{-}{e}{ë}n-land
+ali{-}{e}{ë}-ne-ren
+co{-}{o}{ö}-pe-rant
+diep-zee{-}{e}{ë}n
+Kauk-asi{-}{e}{ë}r
+ge{-}{e}{ë}in-digd
+fre-si-{a-}{}{aa}tje
+ar-cha{-}{i}{ï}-cum
+Sar-di-ni{-}{e}{ë}r
+bis-tr{o-}{}{oo}tje
+bob-slee{-}{e}{ë}r
+bo-le-r{o-}{}{oo}tje
+Pi-car-di{-}{e}{ë}r
+co-mi-t{é-}{}{ee}tje
+PvdA{-}{}{–}ers
+Mon-go-li{-}{e}{ë}r
+cor-vee{-}{e}{ë}rs
+Py-re-nee{-}{e}{ë}r
+ca-na-p{é-}{}{ee}tje
+ca-su{-}{i}{ï}s-ten
+ce-ta-cee{-}{e}{ë}n
+cu-pi-d{o-}{}{oo}tje
+cy-clo{-}{i}{ï}-den
+am-fo-r{a-}{}{aa}tje
+dy-na-m{o-}{}{oo}tje
+de-cen-ni{-}{e}{ë}n
+shin-to{-}{i}{ï}st
+ru{-}{i}{ï}-ne-stad
+fris-bee{-}{e}{ë}n
+ma-de-r{a-}{}{aa}tje
+ko-pi{-}{e}{ë}-ring
+di{-}{e}{ë}-te-tiek
+aca-ci-{a-}{}{aa}tje
+ma{-}{i}{ï}s-teelt
+Ana-to-li{-}{e}{ë}r
+be{-}{e}{ë}l-ze-bub
+li-do-ca{-}{i}{ï}-ne
+Mol-da-vi{-}{e}{ë}r
+ge-cre{-}{e}{ë}erd
+ma{-}{i}{ï}s-ak-ker
+ka{-}{i}{ï}ns-merk
+Ara-mee{-}{e}{ë}rs
+olym-pi{-}{e}{ë}rs
+zee-le-li{-}{e}{ë}n
+ze-br{a-}{}{aa}tjes
+zand-zee{-}{e}{ë}n
+vil-l{a-}{}{aa}tjes
+tre-m{a-}{}{aa}tjes
+the-m{a-}{}{aa}tjes
+ta-toe{-}{e}{ë}ert
+smeu{-}{i}{ï}g-ste
+smeu{-}{i}{ï}ge-re
+re-ç{u-}{}{uu}tjes
+re-su-m{é-}{}{ee}tje
+py-ja-m{a-}{}{aa}tje
+pol-k{a-}{}{aa}tjes
+poe-m{a-}{}{aa}tjes
+pin-d{a-}{}{aa}tjes
+pi-a-n{o-}{}{oo}tjes
+par-ti{-}{e}{ë}-ler
+pa-gi-n{a-}{}{aa}tje
+ori{-}{e}{ë}n-teer
+ope-r{a-}{}{aa}tjes
+ko-pi{-}{e}{ë}er-de
+kom-m{a-}{}{aa}tjes
+jum-b{o-}{}{oo}tjes
+gs-m{-}{}{–}etje
+ge{-}{u}{ü}p-loade
+ge{-}{e}{ë}n-ter-de
+ge{-}{e}{ë}f-fen-de
+fir-m{a-}{}{aa}tjes
+dra-m{a-}{}{aa}tjes
+cou-p{é-}{}{ee}tjes
+be{-}{e}{ë}dig-den
+bed-stee{-}{e}{ë}n
+aza-le-{a-}{}{aa}tje
+PvdV{-}{}{–}ers
+PvdD{-}{}{–}ers
+sche-m{a-}{}{aa}tje
+weg-ge{-}{e}{ë}b-de
+ra-di-{o-}{}{oo}tjes
+co{-}{o}{ö}p-teert
+cre{-}{e}{ë}er-den
+pro-te{-}{i}{ï}-nes
+op-ge{-}{e}{ë}is-te
+stu-di-{o-}{}{oo}tje
+ge{-}{e}{ë}r-ger-de
+ri-si-c{o-}{}{oo}tje
+ba-by{-}{}{–}tje
+ex-tr{a-}{}{aa}tjes
+be{-}{e}{ë}in-digt
+va-ri{-}{e}{ë}-rend
+ru{-}{i}{ï}-neu-zer
+ge{-}{u}{ü}p-da-tet
+ac-tu-a-ri{-}{e}{ë}-le
+abi-tu-ri{-}{e}{ë}nt
+an-tro-po{-}{i}{ï}-de
+souf-fl{é-}{}{ee}tje
+im-mo-bi-li{-}{e}{ë}n
+hy-gi{-}{e}{ë}-nis-te
+hy-gi{-}{e}{ë}-nisch
+ge-cre{-}{e}{ë}er-de
+ge{-}{e}{ë}-ve-naard
+de-fi-ni{-}{e}{ë}-ren
+Po-ly-ne-si{-}{e}{ë}r
+em-ploy{é-}{}{ee}tje
+the-ra-pie{-}{e}{ë}n
+the{-}{i}{ï}s-tisch
+suf-fi-ci{-}{e}{ë}nt
+spa-ti{-}{e}{ë}-ring
+re-li-kwie{-}{e}{ë}n
+quo-ti{-}{e}{ë}n-ten
+pro-vin-ci{-}{e}{ë}n
+pa-tri-ci{-}{e}{ë}rs
+ori{-}{e}{ë}n-te-ren
+ori{-}{e}{ë}n-ta-tie
+on-der-zee{-}{e}{ë}r
+mo-no-po-li{-}{e}{ë}n
+in-tu{-}{i}{ï}-tie-ve
+in-gre-di{-}{e}{ë}nt
+ge{-}{i}{ï}so-leerd
+fi-nan-ci{-}{e}{ë}-le
+fan-ta-sie{-}{e}{ë}n
+es-sen-ti{-}{e}{ë}-le
+epi-de-mie{-}{e}{ë}n
+ef-fi-ci{-}{e}{ë}n-te
+eco-no-mie{-}{e}{ë}n
+co{-}{o}{ö}r-di-naat
+co{-}{o}{ö}-pe-ra-tie
+con-ve-ni{-}{e}{ë}nt
+ce-re-mo-ni{-}{e}{ë}n
+ca-su{-}{i}{ï}s-tiek
+be-doe{-}{i}{ï}e-nen
+bac-te-ri{-}{e}{ë}-le
+as-te-ro{-}{i}{ï}-den
+al-ler-gie{-}{e}{ë}n
+af-fi-li{-}{e}{ë}-ren
+ali{-}{e}{ë}-na-ties
+al-ka-lo{-}{i}{ï}-den
+al-tru{-}{i}{ï}s-ten
+am-nes-tie{-}{e}{ë}n
+ana-lo-gie{-}{e}{ë}n
+ano-ma-lie{-}{e}{ë}n
+Is-ra{-}{e}{ë}-lisch
+to-ver-fee{-}{e}{ë}n
+dwars-zee{-}{e}{ë}n
+trap-tree{-}{e}{ë}n
+op-ge-vree{-}{e}{ë}n
+hand-knie{-}{e}{ë}n
+si{-}{e}{ë}r-ra–s
+ha-bi-tu-{é-}{}{ee}tje
+ME-pa-ti{-}{e}{ë}nt
+tran-si{-}{e}{ë}n-te
+tand-ca-ri{-}{e}{ë}s
+spo-ran-gi{-}{e}{ë}n
+rê-ve-rie{-}{e}{ë}n
+prik-slee{-}{e}{ë}n
+po-ly-the{-}{i}{ï}st
+mo-no-the{-}{i}{ï}st
+ma-don-n{a-}{}{aa}tje
+kern-idee{-}{e}{ë}n
+gsm{-}{}{–}etjes
+gra-mi-nee{-}{e}{ë}n
+ex-pa-ti{-}{e}{ë}nt
+di-a-bo-l{o-}{}{oo}tje
+cor-ti-co{-}{i}{ï}-de
+con-chy-li{-}{e}{ë}n
+capsa{-}{i}{ï}-ci-ne
+al-ge-bra{-}{i}{ï}st
+Me-la-ne-si{-}{e}{ë}r
+Ma-tâ{-}{}{–}u-tu
+Lom-bar-di{-}{e}{ë}r
+Ka{-}{i}{ï}-ro-tisch
+Karin-thi{-}{e}{ë}r
+En-sche-de{-}{e}{ë}r
+Cu-ra-çao{-}{e}{ë}r
+Ca{-}{i}{ï}-ro-tisch
+Bel-gra-do{-}{e}{ë}r
+ge{-}{e}{ë}ro-deerd
+Ethio-pi{-}{e}{ë}rs
+dy-nas-tie{-}{e}{ë}n
+of-fi-ci{-}{e}{ë}-ren
+Hi{-}{e}{ë}-ro-ny-mus
+nu-tri{-}{e}{ë}n-ten
+ge{-}{e}{ë}ta-leerd
+ma{-}{i}{ï}s-kor-rel
+smeu{-}{i}{ï}g-heid
+re-cre{-}{e}{ë}er-de
+idee{-}{e}{ë}n-leer
+pi{-}{e}{ë}-zo-me-ter
+ma{-}{i}{ï}s-kip-pen
+va-cu{-}{u}{ü}m-glas
+va-cu{-}{u}{ü}m-buis
+Ma-lei-si{-}{e}{ë}rs
+Jor-da-ni{-}{e}{ë}rs
+sad-du-cee{-}{e}{ë}r
+apo-lo-gie{-}{e}{ë}n
+dal-ma-ti{-}{e}{ë}rs
+wa-ter-ski{-}{e}{ë}n
+wa-ter-ski{-}{e}{ë}r
+weeg-bree{-}{e}{ë}n
+ve-ge-ta-ri{-}{e}{ë}r
+ve-ri-fi{-}{e}{ë}-ren
+vic-tu-a-li{-}{e}{ë}n
+temp-ta-ti{-}{e}{ë}n
+te-tra{-}{e}{ë}-ders
+ti{-}{e}{ë}r-ceer-de
+ti{-}{e}{ë}r-ce-ring
+ti-ran-nie{-}{e}{ë}n
+tra-pe-zo{-}{i}{ï}-de
+tri-lo-gie{-}{e}{ë}n
+tro-che{-}{i}{ï}sch
+twee{-}{e}{ë}n-half
+uni-ta-ri{-}{e}{ë}rs
+va-cu{-}{u}{ü}m-lamp
+va-cu{-}{u}{ü}m-pomp
+vak-stu-di{-}{e}{ë}n
+sub-si-di{-}{e}{ë}nt
+sup-pli{-}{e}{ë}-ren
+ta-o{-}{i}{ï}s-tisch
+ta-toe{-}{e}{ë}er-de
+ta-toe{-}{e}{ë}-ring
+sto{-}{i}{ï}-cij-nen
+sto{-}{i}{ï}-cijn-se
+stook-oli{-}{e}{ë}n
+stort-zee{-}{e}{ë}n
+sci{-}{e}{ë}n-tis-me
+sek-ta-ri{-}{e}{ë}rs
+sen-ten-ti{-}{e}{ë}n
+ses-ter-ti{-}{e}{ë}n
+sfe-ro{-}{i}{ï}-daal
+sfe-ro{-}{i}{ï}-da-le
+shin-to{-}{i}{ï}s-me
+so-le-no{-}{i}{ï}-des
+spon-de{-}{i}{ï}sch
+fa-ri-zee{-}{e}{ë}rs
+sca-ra-bee{-}{e}{ë}n
+bob-slee{-}{e}{ë}rs
+sa-la-ri{-}{e}{ë}ren
+sa-tra-pie{-}{e}{ë}n
+re-li{-}{e}{ë}f-druk
+re-me-di{-}{e}{ë}-ren
+reu-ma-to{-}{i}{ï}-de
+re{-}{u}{ü}s-seer-de
+bar-be-cue{-}{e}{ë}n
+ce-no-zo{-}{i}{ï}-cum
+pen-ta{-}{e}{ë}-ders
+per-cep-ti{-}{e}{ë}n
+pla-ne-to{-}{i}{ï}-de
+po{-}{e}{ë}-tas-ters
+po{-}{e}{ë}-ti-se-ren
+pol-le-vie{-}{e}{ë}n
+pro-fe-tie{-}{e}{ë}n
+pro-py-lee{-}{e}{ë}n
+pro-za{-}{i}{ï}-sche
+pro-za{-}{i}{ï}s-ten
+pru-de-rie{-}{e}{ë}n
+rap-so-die{-}{e}{ë}n
+re-bel-lie{-}{e}{ë}n
+re-ci-pi{-}{e}{ë}-ren
+pas-to-rie{-}{e}{ë}n
+pa-ra-no{-}{i}{ï}-cus
+pa-ro-chi{-}{e}{ë}-le
+pa-ro-di{-}{e}{ë}-ren
+mon-go-lo{-}{i}{ï}-de
+na{-}{i}{ï}e-ve-ling
+na-zi-ree{-}{e}{ë}rs
+ne-go-ti{-}{e}{ë}-ren
+ni{-}{e}{ë}l-leer-de
+obe-di{-}{e}{ë}n-tie
+on-be{-}{e}{ë}dig-de
+opi-ni{-}{e}{ë}-rend
+or-chi-dee{-}{e}{ë}n
+ori{-}{e}{ë}n-taals
+ou-bli{-}{e}{ë}t-ten
+pan-de-mie{-}{e}{ë}n
+pan-the{-}{i}{ï}s-me
+In-do-ne-si{-}{e}{ë}r
+in-spec-ti{-}{e}{ë}n
+in-spi-ci{-}{e}{ë}nt
+ja-loe-zie{-}{e}{ë}n
+je-re-mi{-}{e}{ë}-ren
+je-zu{-}{i}{ï}-tisch
+je-zu{-}{i}{ï}-tis-me
+kor-rel-ma{-}{i}{ï}s
+la{-}{i}{ï}-ci-se-ren
+lin-ge-rie{-}{e}{ë}n
+lin-gu{-}{i}{ï}s-ten
+li-tur-gie{-}{e}{ë}n
+ma{-}{i}{ï}s-kol-ven
+ma{-}{i}{ï}s-vel-den
+ma-ni-chee{-}{e}{ë}r
+ma-ni{-}{e}{ë}-ris-me
+ma-o{-}{i}{ï}s-tisch
+ma-te-ri{-}{e}{ë}-ler
+me-di-ta-ti{-}{e}{ë}n
+me-tal-lo{-}{i}{ï}-de
+dia-co-nie{-}{e}{ë}n
+dia-to-mee{-}{e}{ë}n
+di-op-trie{-}{e}{ë}n
+do-de-ca{-}{e}{ë}-der
+do-mi-ci-li{-}{e}{ë}n
+dra-pe-rie{-}{e}{ë}n
+du{-}{u}{ü}m-vi-raat
+ego{-}{i}{ï}s-tisch
+el-lip-so{-}{i}{ï}-de
+evan-ge-li{-}{e}{ë}n
+even-knie{-}{e}{ë}n
+exer-ci-ti{-}{e}{ë}n
+ex-pe-di{-}{e}{ë}-ren
+fa-ri-ze{-}{i}{ï}sch
+fa-ri-ze{-}{i}{ï}s-me
+fox-ter-ri{-}{e}{ë}r
+ge-ni-ta-li{-}{e}{ë}n
+ge-ru{-}{i}{ï}-neerd
+ge{-}{u}{ü}ni-eer-de
+gra-di{-}{e}{ë}n-ten
+grond-zee{-}{e}{ë}n
+har-mo-nie{-}{e}{ë}n
+he-bra{-}{i}{ï}s-men
+Hel-ve-ti{-}{e}{ë}rs
+hi{-}{e}{ë}-rar-chie
+hi{-}{e}{ë}-ra-tisch
+hi{-}{e}{ë}-ro-glief
+hi{-}{e}{ë}-ro-gly-fe
+hin-doe{-}{i}{ï}s-me
+hoog-ge{-}{e}{ë}erd
+co{-}{o}{ö}-pe-ra-tor
+co{-}{o}{ö}-pe-re-ren
+co{-}{o}{ö}p-teer-de
+de-fi-ci{-}{e}{ë}n-te
+bul-ter-ri{-}{e}{ë}r
+cau-se-rie{-}{e}{ë}n
+Chal-dee{-}{e}{ë}rs
+col-lo{-}{i}{ï}-daal
+col-lo{-}{i}{ï}-da-le
+con-ci{-}{e}{ë}r-ges
+ar-cha{-}{i}{ï}-sche
+ar-cha{-}{i}{ï}s-men
+as-so-ci{-}{e}{ë}-ren
+atro-fi{-}{e}{ë}-ren
+au-di{-}{e}{ë}n-ties
+Au-stra-li{-}{e}{ë}r
+bas-re-li{-}{e}{ë}f
+be{-}{e}{ë}in-dig-de
+be{-}{e}{ë}in-di-gen
+be-ne-fi-ci{-}{e}{ë}n
+qui{-}{e}{ë}-tis-ten
+Ki-ri-ba-ti{-}{e}{ë}r
+loem-pi-{a-}{}{aa}tje
+ne-gli-g{é-}{}{ee}tje
+ge{-}{i}{ï}n-ter-net
+me-so-zo{-}{i}{ï}-cum
+ge{-}{e}{ë}-vo-ceerd
+Ca-ra{-}{i}{ï}-bisch
+jus-ti-ti{-}{e}{ë}-le
+Ven-lo{-}{e}{ë}-naar
+re-fu-gi-{é-}{}{ee}tje
+ge{-}{i}{ï}-mi-teerd
+mi-cro-bi{-}{e}{ë}-le
+Bre-da{-}{e}{ë}-naar
+Bree{-}{e}{ë}r-naar
+sar-co{-}{i}{ï}-do-se
+Can-ta-bri{-}{e}{ë}r
+ge{-}{e}{ë}pi-leerd
+drie{-}{e}{ë}n-half
+wa-ran-d{a-}{}{aa}tje
+droog-ski{-}{e}{ë}n
+Nor-man-di{-}{e}{ë}r
+as-so-ci{é-}{}{ee}tje
+pat-je-pee{-}{e}{ë}r
+San-tia-go{-}{e}{ë}r
+An-dal-us-i{-}{e}{ë}r
+re-pli-c{a-}{}{aa}tje
+Pa-ta-go-ni{-}{e}{ë}r
+klei-no-di{-}{e}{ë}n
+bra-de-rie{-}{e}{ë}n
+ca-me-li-{a-}{}{aa}tje
+Is-ra{-}{e}{ë}-li-er
+idee{-}{e}{ë}n-goed
+co{-}{i}{ï}n-ci-dent
+be-go-ni-{a-}{}{aa}tje
+Oe-kra{-}{i}{ï}en-se
+cel-lu-lo{-}{i}{ï}-de
+eet-ca-f{é-}{}{ee}tje
+Mon-go-li{-}{e}{ë}rs
+sad-du-cee{-}{e}{ë}n
+pin-gu{-}{i}{ï}n-tje
+ko-li-br{i-}{}{ie}tje
+gra-ti{-}{e}{ë}-ring
+Korin-thi{-}{e}{ë}r
+Hels-inki{-}{e}{ë}r
+at-ta-ch{é-}{}{ee}tje
+col-le-g{a-}{}{aa}tje
+par-ve-n{u-}{}{uu}tje
+di-plo-m{a-}{}{aa}tje
+At-lan-tee{-}{e}{ë}r
+pa-pri-k{a-}{}{aa}tje
+aan-ge{-}{e}{ë}rf-de
+An-tarc-ti{-}{e}{ë}r
+waan-idee{-}{e}{ë}n
+sym-fo-nie{-}{e}{ë}n
+ma{-}{i}{ï}s-ak-kers
+Ma-ce-do-ni{-}{e}{ë}r
+ka{-}{i}{ï}ns-te-ken
+ini-ti{-}{e}{ë}-ring
+woon-idee{-}{e}{ë}n
+ve-ran-d{a-}{}{aa}tje
+tre-mo-l{o-}{}{oo}tje
+tom-bo-l{a-}{}{aa}tje
+su{-}{i}{ï}-ci-deert
+stu-di-{o-}{}{oo}tjes
+smeer-oli{-}{e}{ë}n
+si{-}{e}{ë}s-ta–s
+sche-m{a-}{}{aa}tjes
+ru{-}{i}{ï}-neer-den
+py-ja-m{a-}{}{aa}tjes
+prul-po{-}{e}{ë}-ten
+pri-mu-l{a-}{}{aa}tje
+po{-}{e}{ë}-ti-seert
+pic-co-l{o-}{}{oo}tje
+per-go-l{a-}{}{aa}tje
+pa-ra-pl{u-}{}{uu}tje
+pa-gi-n{a-}{}{aa}tjes
+of-fi-ci{-}{e}{ë}-ler
+ma{-}{i}{ï}s-koe-ken
+ki-mo-n{o-}{}{oo}tjes
+ge{-}{u}{ü}ri-neerd
+ge{-}{i}{ï}-te-reerd
+ge{-}{e}{ë}-li-deerd
+fee{-}{e}{ë}-rie-ker
+eva-cu{é-}{}{ee}tjes
+do-mi-n{o-}{}{oo}tjes
+cu-pi-d{o-}{}{oo}tjes
+co{-}{o}{ö}r-di-neer
+co-mit{é-}{}{ee}tjes
+cli-ch{é-}{}{ee}tjes
+ca-na-p{é-}{}{ee}tjes
+bo-le-r{o-}{}{oo}tjes
+agen-d{a-}{}{aa}tjes
+af-ge-vree{-}{e}{ë}n
+over-ge{-}{e}{ë}rfd
+ini-ti{-}{e}{ë}-rend
+ori{-}{e}{ë}n-teert
+sec-tori{-}{e}{ë}-le
+pas-fo-t{o-}{}{oo}tje
+be{-}{i}{ï}n-vloedt
+ca-me-r{a-}{}{aa}tjes
+ge{-}{e}{ë}in-dig-de
+va-ri{-}{e}{ë}-ren-de
+pro-te-g{é-}{}{ee}tje
+pro-ce-d{é-}{}{ee}tje
+po-ten-ti{-}{e}{ë}-le
+po{-}{e}{ë}-ti-scher
+pi{-}{e}{ë}-de-stals
+ge{-}{u}{ü}p-gra-ded
+ab-sen-te{-}{i}{ï}s-me
+acro-ba-tie{-}{e}{ë}n
+ap-pre-ci{-}{e}{ë}-ren
+ge{-}{e}{ë}s-say-eerd
+co{-}{o}{ö}-pe-reer-de
+pro-le-ta-ri{-}{e}{ë}r
+gips-ko-pie{-}{e}{ë}n
+al-ge-bra{-}{i}{ï}sch
+al-le-go-rie{-}{e}{ë}n
+al-pi-ne-ski{-}{e}{ë}n
+am-bi-gu{-}{i}{ï}-teit
+ge{-}{e}{ë}-ve-naar-de
+hy-gi{-}{e}{ë}-nis-ten
+hy-gi{-}{e}{ë}-ni-sche
+sym-pa-thie{-}{e}{ë}n
+pre-di-ca-ti{-}{e}{ë}n
+ve-ge-ta-ri{-}{e}{ë}rs
+va-ri{-}{e}{ë}-tei-ten
+the{-}{i}{ï}s-ti-sche
+stra-te-gie{-}{e}{ë}n
+so-ci{-}{e}{ë}-tei-ten
+ori{-}{e}{ë}n-te-ring
+ori{-}{e}{ë}n-teer-de
+ori{-}{e}{ë}n-ta-ties
+on-der-zee{-}{e}{ë}rs
+lin-gu{-}{i}{ï}s-tiek
+in-dus-tri{-}{e}{ë}-le
+in-dus-trie{-}{e}{ë}n
+har-mo-ni{-}{e}{ë}-ren
+ge{-}{i}{ï}r-ri-teerd
+ge{-}{e}{ë}n-ga-geerd
+fi-lo-so-fie{-}{e}{ë}n
+ef-fi-ci{-}{e}{ë}n-tie
+de-fi-ni{-}{e}{ë}-ring
+de-fi-ci{-}{e}{ë}n-tie
+co{-}{o}{ö}r-di-na-tor
+co{-}{o}{ö}r-di-na-tie
+co{-}{o}{ö}r-di-na-ten
+co{-}{o}{ö}-pe-ra-ties
+co{-}{o}{ö}-pe-ra-tief
+com-pag-nie{-}{e}{ë}n
+com-mer-ci{-}{e}{ë}-le
+che-mi-ca-li{-}{e}{ë}n
+ca-te-go-rie{-}{e}{ë}n
+be{-}{e}{ë}in-di-ging
+an-nu{-}{i}{ï}-tei-ten
+Is-ra{-}{e}{ë}-li-sche
+fla-min-g{o-}{}{oo}tje
+com-pri-m{é-}{}{ee}tje
+baan-ca-f{é-}{}{ee}tje
+mag-no-li-{a-}{}{aa}tje
+maag-pa-ti{-}{e}{ë}nt
+tri-bu-la-ti{-}{e}{ë}n
+tem-po-ra-li{-}{e}{ë}n
+bio-gra-fie{-}{e}{ë}n
+com-man-d{o-}{}{oo}tje
+su{-}{i}{ï}-ci-de-plan
+na{-}{i}{ï}-vi-tei-ten
+ma{-}{i}{ï}s-ver-bouw
+lust-pri{-}{e}{ë}-len
+ka-pe-la-nie{-}{e}{ë}n
+hi{-}{e}{ë}-ro-gly-fen
+he-ro{-}{i}{ï}-ne-ba-by
+ge-ni{-}{e}{ë}l-leerd
+fee{-}{e}{ë}n-han-den
+ex-pa-ti{-}{e}{ë}n-te
+bots-au-t{o-}{}{oo}tje
+ar-ren-slee{-}{e}{ë}n
+al-pi-ne-ski{-}{e}{ë}r
+af-spa-ti{-}{e}{ë}-ren
+Mi-cro-ne-si{-}{e}{ë}r
+Bar-to-lo-me{-}{u}{ü}s
+ge{-}{e}{ë}xer-ceerd
+ge{-}{e}{ë}-mul-geerd
+ge{-}{i}{ï}n-du-ceerd
+hy-gi{-}{e}{ë}-ne-co-de
+ge{-}{i}{ï}n-un-deerd
+ge{-}{e}{ë}-ner-veerd
+ge{-}{e}{ë}-mi-greerd
+ge{-}{e}{ë}x-cu-seerd
+Is-ra{-}{e}{ë}-li-ers
+ge{-}{e}{ë}-va-cu-eerd
+men-sen-zee{-}{e}{ë}n
+pat-je-pee{-}{e}{ë}rs
+va-cu{-}{u}{ü}m-ka-mer
+he-ro{-}{i}{ï}-ne-lijn
+he-ro{-}{i}{ï}-ne-hoer
+ma-ni{-}{e}{ë}-ris-ten
+Ma-ce-do-ni{-}{e}{ë}rs
+pa-leo-zo{-}{i}{ï}-cum
+shin-to{-}{i}{ï}s-ten
+aids-pa-ti{-}{e}{ë}nt
+voor-stu-di{-}{e}{ë}n
+wa-ter-le-li{-}{e}{ë}n
+wee{-}{e}{ë}n-rem-mer
+we-reld-zee{-}{e}{ë}n
+ma{-}{i}{ï}s-plan-ten
+the-sau-rie{-}{e}{ë}n
+trans-ac-ti{-}{e}{ë}n
+tra-pe-zo{-}{i}{ï}-den
+tra-ves-tie{-}{e}{ë}n
+tri-ar-chie{-}{e}{ë}n
+tro-che{-}{i}{ï}-sche
+twee{-}{e}{ë}r-han-de
+va-cu{-}{u}{ü}m-me-ter
+sub-si-di{-}{e}{ë}-ren
+taal-stu-di{-}{e}{ë}n
+tan-gen-ti{-}{e}{ë}-le
+ta-toe{-}{e}{ë}er-der
+ta-o{-}{i}{ï}s-ti-sche
+se-quen-ti{-}{e}{ë}-le
+sol-fe-gi{-}{e}{ë}-ren
+sot-ter-nie{-}{e}{ë}n
+spon-de{-}{i}{ï}sche
+twee{-}{e}{ë}n-hal-ve
+on-of-fi-ci{-}{e}{ë}-le
+taxo-no-mie{-}{e}{ë}n
+sa-cri-fi-ci{-}{e}{ë}n
+sa-cri-fi{-}{e}{ë}-ren
+sa-cris-tie{-}{e}{ë}n
+sa-la-ri{-}{e}{ë}ring
+sa-tur-na-li{-}{e}{ë}n
+re-fe-ren-ti{-}{e}{ë}n
+re-li{-}{e}{ë}f-kaart
+re-pa-tri{-}{e}{ë}-ren
+tbs-pa-ti{-}{e}{ë}nt
+pe-ni-ten-ti{-}{e}{ë}n
+per-ci-pi{-}{e}{ë}-ren
+pe-ri-fe-rie{-}{e}{ë}n
+pe-ri-pe-tie{-}{e}{ë}n
+pi{-}{e}{ë}-tis-tisch
+pla-ne-to{-}{i}{ï}-den
+po{-}{e}{ë}-ti-seer-de
+po{-}{e}{ë}-zie-al-bum
+Po-ly-ne-si{-}{e}{ë}rs
+po-ly-the{-}{i}{ï}s-me
+prin-ci-pi{-}{e}{ë}-le
+pri-vi-le-gi{-}{e}{ë}n
+pro-te{-}{i}{ï}-nu-rie
+pro-to-zo{-}{i}{ï}sch
+psal-mo-die{-}{e}{ë}n
+re-ci-pi{-}{e}{ë}n-ten
+re-cog-ni-ti{-}{e}{ë}n
+po{-}{e}{ë}zie-prijs
+wa-ter-po-lo{-}{e}{ë}r
+pa-ra-ly-sie{-}{e}{ë}n
+mo-no-ma-nie{-}{e}{ë}n
+mo-no-po-lo{-}{i}{ï}-de
+mo-no-the{-}{i}{ï}s-me
+munt-spe-ci{-}{e}{ë}n
+na{-}{i}{ï}-ve-tei-ten
+neu-ral-gie{-}{e}{ë}n
+nier-pa-ti{-}{e}{ë}nt
+obe-di{-}{e}{ë}n-ties
+opi-ni{-}{e}{ë}-ren-de
+oran-je-rie{-}{e}{ë}n
+ori{-}{e}{ë}n-ta-list
+an-ti-no-mie{-}{e}{ë}n
+In-do-ne-si{-}{e}{ë}rs
+in-ef-fi-ci{-}{e}{ë}nt
+in-of-fi-ci{-}{e}{ë}-le
+je-zu{-}{i}{ï}-ti-sche
+ka-ko-fo-nie{-}{e}{ë}n
+la{-}{i}{ï}-ci-seer-de
+ma-ni-chee{-}{e}{ë}rs
+ma-ni-che{-}{i}{ï}s-me
+mar-gi-na-li{-}{e}{ë}n
+me-di{-}{e}{ë}-vis-ten
+me-na-ge-rie{-}{e}{ë}n
+me-tal-lo{-}{i}{ï}-den
+me-to-ny-mie{-}{e}{ë}n
+mo-nar-chie{-}{e}{ë}n
+mond-hy-gi{-}{e}{ë}-ne
+de-pre-ci{-}{e}{ë}-ren
+di-no-sau-ri{-}{e}{ë}r
+dis-so-ci{-}{e}{ë}-ren
+do-de-ca{-}{e}{ë}ders
+doxo-lo-gie{-}{e}{ë}n
+du{-}{u}{ü}m-vi-ra-ten
+ef-fi-ci{-}{e}{ë}n-ter
+ego{-}{i}{ï}s-ti-sche
+el-lip-so{-}{i}{ï}-den
+ex-pa-tri{-}{e}{ë}-ren
+ex-pe-di{-}{e}{ë}n-ten
+fal-si-fi{-}{e}{ë}-ren
+fa-ri-ze{-}{i}{ï}-sche
+fas-cis-to{-}{i}{ï}-de
+fo-to-ko-pie{-}{e}{ë}n
+fox-ter-ri{-}{e}{ë}rs
+ge-co{-}{o}{ö}p-teerd
+ge{-}{e}{ë}xal-teerd
+ge{-}{e}{ë}x-po-neerd
+ge{-}{i}{ï}m-po-neerd
+ge{-}{i}{ï}-so-leer-de
+hart-pa-ti{-}{e}{ë}nt
+haut-re-li{-}{e}{ë}f
+he-mor-ro{-}{i}{ï}-den
+he-ro{-}{i}{ï}ne-hond
+hi{-}{e}{ë}-rar-chiek
+hi{-}{e}{ë}-ra-ti-sche
+hoog-ge{-}{e}{ë}er-de
+ide-o-lo-gie{-}{e}{ë}n
+im-ma-te-ri{-}{e}{ë}-le
+de-nun-ci{-}{e}{ë}-ren
+con-ve-ni{-}{e}{ë}-ren
+co{-}{o}{ö}r-di-ne-ren
+da-da{-}{i}{ï}s-tisch
+bras-se-rie{-}{e}{ë}n
+bul-ter-ri{-}{e}{ë}rs
+ca-fe{-}{i}{ï}-ne-vrij
+ca-ro-te-no{-}{i}{ï}-de
+ce-re-mo-nie{-}{e}{ë}n
+ce-re-mo-ni{-}{e}{ë}-le
+co{-}{i}{ï}n-ci-de-ren
+con-ci-li{-}{e}{ë}-ren
+con-ci-pi{-}{e}{ë}-ren
+con-sci{-}{e}{ë}n-tie
+Bour-gon-di{-}{e}{ë}r
+ar-cha{-}{i}{ï}-se-ren
+ar-ti-fi-ci{-}{e}{ë}-le
+athe{-}{i}{ï}s-tisch
+Au-stra-li{-}{e}{ë}rs
+au-tar-chie{-}{e}{ë}n
+ba-rens-wee{-}{e}{ë}n
+bas-re-li{-}{e}{ë}fs
+be{-}{e}{ë}di-gin-gen
+be{-}{i}{ï}n-vloed-de
+be{-}{i}{ï}n-vloe-den
+be-ne-dic-ti{-}{e}{ë}n
+bin-nen-zee{-}{e}{ë}n
+blas-fe-mie{-}{e}{ë}n
+po{-}{e}{ë}-zie-zo-mer
+ge{-}{i}{ï}n-vi-teerd
+ef-fi-ci{-}{e}{ë}ntst
+Ma-lag-as-si{-}{e}{ë}r
+At-lan-te{-}{i}{ï}sch
+ge{-}{e}{ë}s-ca-leerd
+ge{-}{e}{ë}-vo-lu-eerd
+ge{-}{e}{ë}-qui-peerd
+Mau-ri-ta-ni{-}{e}{ë}r
+pan-the{-}{i}{ï}s-ten
+co{-}{o}{ö}-pe-ran-ten
+Nu-ku{-}{}{–}a-lo-fa
+as-su-ran-ti{-}{e}{ë}n
+ver-si-fi{-}{e}{ë}-ren
+post-au-t{o-}{}{oo}tje
+ge{-}{i}{ï}n-to-neerd
+ge{-}{i}{ï}o-ni-seerd
+jazz-ca-f{é-}{}{ee}tje
+ge{-}{e}{ë}x-po-seerd
+ge{-}{e}{ë}xis-teerd
+ca-ra-pa-ti{-}{e}{ë}nt
+long-pa-ti{-}{e}{ë}nt
+ori{-}{e}{ë}n-taal-se
+co-ma-pa-ti{-}{e}{ë}nt
+ge{-}{i}{ï}n-no-veerd
+clow-ne-rie{-}{e}{ë}n
+slaap-stee{-}{e}{ë}n
+ge{-}{e}{ë}n-ta-meerd
+ge{-}{e}{ë}x-hi-beerd
+Kaap-ver-di{-}{e}{ë}r
+on-in-tu{-}{i}{ï}-tief
+Is-ra{-}{e}{ë}-lie-ten
+dys-pla-sie{-}{e}{ë}n
+Hei-loo{-}{e}{ë}-naar
+in-di-vi-d{u-}{}{uu}tje
+ge{-}{e}{ë}men-deerd
+ge{-}{e}{ë}car-teerd
+ge{-}{i}{ï}g-no-reerd
+bro-me-li-{a-}{}{aa}tje
+ge{-}{i}{ï}r-ri-geerd
+ge{-}{i}{ï}n-ha-leerd
+ca-su{-}{i}{ï}s-tisch
+ge{-}{e}{ë}mit-teerd
+ge{-}{e}{ë}x-pi-reerd
+ma{-}{i}{ï}s-zet-meel
+ge{-}{i}{ï}n-dexeerd
+ge{-}{i}{ï}ni-ti-eerd
+ge{-}{e}{ë}va-lu-eerd
+ge{-}{i}{ï}n-di-ceerd
+Is-ra{-}{e}{ë}-li–s
+bour-gon-di{-}{e}{ë}r
+idee{-}{e}{ë}n-ro-man
+po{-}{e}{ë}-zie-avond
+sad-du-cee{-}{e}{ë}rs
+da-na{-}{i}{ï}-den-vat
+wa-ter-ski{-}{e}{ë}rs
+pi{-}{e}{ë}-teits-vol
+ma-o{-}{i}{ï}s-ti-sche
+ve-ran-d{a-}{}{aa}tjes
+tra-pe-zo{-}{i}{ï}-des
+ta-toe{-}{e}{ë}er-den
+sym-me-trie{-}{e}{ë}n
+sto{-}{i}{ï}-cijn-ser
+seks-or-gie{-}{e}{ë}n
+pri-mu-l{a-}{}{aa}tjes
+pic-co-l{o-}{}{oo}tjes
+per-go-l{a-}{}{aa}tjes
+pa-ra-pl{u-}{}{uu}tjes
+pa-no-ra-m{a-}{}{aa}tje
+os-sen-knie{-}{e}{ë}n
+ne-gli-g{é-}{}{ee}tjes
+ma-don-n{a-}{}{aa}tjes
+je-re-mi{-}{e}{ë}er-de
+in-tu{-}{i}{ï}-tie-ver
+in-tu{-}{i}{ï}-tiefst
+ge{-}{u}{ü}-sur-peerd
+ge{-}{i}{ï}-te-reer-de
+ge{-}{i}{ï}n-tri-geer
+ge{-}{i}{ï}n-ti-meerd
+ge{-}{e}{ë}ro-deer-de
+ge{-}{e}{ë}pi-leer-de
+ge-ti{-}{e}{ë}r-ceerd
+ge-re-cre{-}{e}{ë}erd
+ge-a-li{-}{e}{ë}neerd
+fee{-}{e}{ë}-rie-ke-re
+di-plo-m{a-}{}{aa}tjes
+co{-}{o}{ö}p-teer-den
+cor-ti-co{-}{i}{ï}-den
+pas-fo-t{o-}{}{oo}tjes
+fla-vo-no{-}{i}{ï}-den
+ma{-}{i}{ï}s-kor-rels
+pre{-}{e}{ë}mp-tie-ve
+ty-po-lo-gie{-}{e}{ë}n
+pru-den-ti{-}{e}{ë}-le
+be{-}{e}{ë}in-dig-den
+te-rug-ge{-}{e}{ë}ist
+drie{-}{e}{ë}n-hal-ve
+toe-ge{-}{e}{ë}i-gend
+film-ko-pie{-}{e}{ë}n
+Ca-ra{-}{i}{ï}-bische
+ori{-}{e}{ë}n-te-rend
+co{-}{i}{ï}n-ci-deert
+ge{-}{i}{ï}-mi-teer-de
+ge{-}{e}{ë}ta-leer-de
+ge-ta-toe{-}{e}{ë}erd
+co{-}{o}{ö}r-di-neert
+pro-za{-}{i}{ï}-scher
+po-ten-ti{-}{e}{ë}-len
+ge{-}{e}{ë}m-bar-keerd
+pro-le-ta-ri{-}{e}{ë}rs
+ge{-}{i}{ï}n-ter-neerd
+abi-tu-ri{-}{e}{ë}n-ten
+ge{-}{e}{ë}n-ca-dreerd
+machts-va-cu{-}{u}{ü}m
+an-ti-pa-thie{-}{e}{ë}n
+an-tho-lo-gie{-}{e}{ë}n
+al-ge-bra{-}{i}{ï}sche
+al-tru{-}{i}{ï}s-tisch
+an-ci{-}{e}{ë}n-ni-teit
+he-ro{-}{i}{ï}-ne-spuit
+va-cu{-}{u}{ü}m-ka-mers
+lach-sal-v{o-}{}{oo}tje
+graan-si-l{o-}{}{oo}tje
+de-col-le-t{é-}{}{ee}tje
+buurt-ca-f{é-}{}{ee}tje
+su-per-fi-ci{-}{e}{ë}-le
+be{-}{e}{ë}in-di-gen-de
+con-ve-ni{-}{e}{ë}n-tie
+ge{-}{i}{ï}n-for-meerd
+re-fe-ren-ti{-}{e}{ë}-le
+sub-si-di{-}{e}{ë}-ring
+se-cre-ta-rie{-}{e}{ë}n
+re{-}{i}{ï}n-car-na-tie
+mi-nis-te-ri{-}{e}{ë}-le
+lin-gu{-}{i}{ï}s-tisch
+in-gre-di{-}{e}{ë}n-ten
+in-dus-tri{-}{e}{ë}-len
+ge-o-ri{-}{e}{ë}n-teerd
+ge-ma-ni{-}{e}{ë}-reerd
+ge{-}{i}{ï}n-spi-reerd
+ety-mo-lo-gie{-}{e}{ë}n
+dis-cus-si{-}{e}{ë}-ren
+de-mo-cra-tie{-}{e}{ë}n
+con-ti-nu{-}{i}{ï}-teit
+co{-}{e}{ë}f-fi-ci{-}{e}{ë}nt
+be{-}{i}{ï}n-vloe-ding
+pa-ti{-}{e}{ë}n-ten-wet
+oud-ko-lo-ni{-}{e}{ë}n
+on-in-tu{-}{i}{ï}-tie-ve
+mo-za{-}{i}{ï}ek-te-gel
+mo-no-the{-}{i}{ï}s-ten
+arts-pa-ti{-}{e}{ë}nt
+pro-gram-m{a-}{}{aa}tje
+he-ro{-}{i}{ï}-ne-markt
+fy-sio-no-mie{-}{e}{ë}n
+co{-}{i}{ï}n-ci-den-ten
+cli{-}{e}{ë}n-ten-bond
+cli{-}{e}{ë}n-te-lis-me
+an-ti-ju-da{-}{i}{ï}s-me
+twee{-}{e}{ë}n-der-tig
+fonds-pa-ti{-}{e}{ë}nt
+drie{-}{e}{ë}n-der-tig
+ri-bo-nu-cle{-}{i}{ï}-ne
+Bour-gon-di{-}{e}{ë}rs
+ge{-}{i}{ï}n-sti-geerd
+ge{-}{e}{ë}ro-ti-seerd
+ge{-}{i}{ï}n-si-nu-eerd
+in-con-ve-ni{-}{e}{ë}nt
+ge{-}{e}{ë}x-pan-deerd
+ge{-}{e}{ë}x-plo-deerd
+pyg-mee{-}{e}{ë}n-volk
+ge{-}{e}{ë}xa-mi-neerd
+ge{-}{i}{ï}n-stru-eerd
+ge{-}{i}{ï}n-cas-seerd
+ge{-}{e}{ë}li-mi-neerd
+ge{-}{e}{ë}x-por-teerd
+ge{-}{i}{ï}so-leer-der
+ge{-}{i}{ï}n-fec-teerd
+ge{-}{e}{ë}s-cor-teerd
+ge{-}{i}{ï}-ro-ni-seerd
+ge{-}{i}{ï}n-tri-geerd
+ge{-}{i}{ï}m-por-teerd
+bour-gon-di{-}{e}{ë}rs
+le-ver-pa-ti{-}{e}{ë}nt
+tri-mes-tri{-}{e}{ë}-le
+idee{-}{e}{ë}n-we-reld
+ge-co{-}{o}{ö}p-teer-de
+dru{-}{i}{ï}-de-tem-pel
+wa-ter-po-lo{-}{e}{ë}rs
+ori{-}{e}{ë}n-ta-lis-me
+echo-gra-fie{-}{e}{ë}n
+vloer-mo-za{-}{i}{ï}ek
+ze-nuw-pa-ti{-}{e}{ë}nt
+zwaard-le-li{-}{e}{ë}n
+veen-ko-lo-ni{-}{e}{ë}n
+te-tra-lo-gie{-}{e}{ë}n
+ti{-}{e}{ë}r-ce-rin-gen
+va-cu{-}{u}{ü}m-lam-pen
+va-cu{-}{u}{ü}m-me-ters
+sub-si-di{-}{e}{ë}n-ten
+sub-stan-ti{-}{e}{ë}-le
+su-per-sti-ti{-}{e}{ë}n
+ta-boe{-}{i}{ï}-se-ring
+ta-pis-se-rie{-}{e}{ë}n
+ta-toe{-}{e}{ë}er-ders
+ta-to{-}{e}{ë}-rin-gen
+tau-to-lo-gie{-}{e}{ë}n
+athe{-}{i}{ï}s-ti-sche
+va-cu{-}{u}{ü}m-pom-pen
+se-cre-ta-ri{-}{e}{ë}-le
+spa-ti{-}{e}{ë}-rin-gen
+sper-ma-to-zo{-}{o}{ö}n
+spi-ri-tu-a-li{-}{e}{ë}n
+pi{-}{e}{ë}-tis-ti-sche
+re{-}{i}{ï}n-car-ne-ren
+re-pa-tri{-}{e}{ë}-ring
+re-si-den-ti{-}{e}{ë}-le
+res-pon-so-ri{-}{e}{ë}n
+pa-tis-se-rie{-}{e}{ë}n
+pe-dan-te-rie{-}{e}{ë}n
+pes-ti-len-ti{-}{e}{ë}n
+pi{-}{e}{ë}-de-stal-len
+pi-kan-te-rie{-}{e}{ë}n
+po{-}{e}{ë}-zie-al-bums
+po{-}{e}{ë}-zie-bun-del
+pro-to-zo{-}{i}{ï}-sche
+psal-mo-di{-}{e}{ë}-ren
+par-fu-me-rie{-}{e}{ë}n
+mo-no-gra-fie{-}{e}{ë}n
+mo-za{-}{i}{ï}ek-vloer
+na{-}{i}{ï}e-ve-lin-gen
+ne-cro-lo-gie{-}{e}{ë}n
+ob-ser-van-ti{-}{e}{ë}n
+oleo-gra-fie{-}{e}{ë}n
+oli-gar-chie{-}{e}{ë}n
+on-ge{-}{e}{ë}ve-naard
+on-hy-gi{-}{e}{ë}-nisch
+ono-ma-to-pee{-}{e}{ë}n
+or-don-nan-ti{-}{e}{ë}n
+pa-ci-fi-ca-ti{-}{e}{ë}n
+in-dul-gen-ti{-}{e}{ë}n
+in-ef-fi-ci{-}{e}{ë}n-te
+in-fir-me-rie{-}{e}{ë}n
+in-suf-fi-ci{-}{e}{ë}nt
+Is-ra{-}{e}{ë}-li-tisch
+ju-ris-dic-ti{-}{e}{ë}n
+kies-quo-ti{-}{e}{ë}nt
+koe-ken-drie{-}{e}{ë}n
+le-pro-ze-rie{-}{e}{ë}n
+ma-chi-ne-rie{-}{e}{ë}n
+ma-li{-}{e}{ë}n-kol-der
+me-di{-}{e}{ë}-vis-tiek
+di-eet-pa-ti{-}{e}{ë}nt
+di-no-sau-ri{-}{e}{ë}rs
+dis-tan-ti{-}{e}{ë}-ren
+do-mi-ci-li{-}{e}{ë}-ren
+exis-ten-ti{-}{e}{ë}-le
+ex-po-nen-ti{-}{e}{ë}-le
+fal-si-fi{-}{e}{ë}-ring
+fo-to-gra-fie{-}{e}{ë}n
+ga-lan-te-rie{-}{e}{ë}n
+ge{-}{e}{ë}n-dos-seerd
+ge{-}{e}{ë}n-ga-geer-de
+ge{-}{e}{ë}xal-teer-de
+ge{-}{e}{ë}x-pli-ceerd
+ge{-}{e}{ë}x-po-neer-de
+ge{-}{i}{ï}m-pli-ceerd
+ge{-}{i}{ï}m-po-neer-de
+ge{-}{i}{ï}n-dos-seerd
+ge{-}{i}{ï}n-te-greerd
+ge{-}{i}{ï}n-ter-viewd
+ge{-}{i}{ï}n-ti-meer-de
+ge{-}{i}{ï}r-ri-teer-de
+ge-la{-}{i}{ï}-ci-seerd
+ge-nea-lo-gie{-}{e}{ë}n
+griep-pa-ti{-}{e}{ë}nt
+hi{-}{e}{ë}-rar-chie-ke
+hi{-}{e}{ë}-rar-chisch
+hi{-}{e}{ë}-ro-glie-fen
+con-tra-ri{-}{e}{ë}-ren
+co{-}{o}{ö}-pe-ra-tie-ve
+co{-}{o}{ö}r-di-na-ties
+co{-}{o}{ö}r-di-neer-de
+da-da{-}{i}{ï}s-ti-sche
+de-fi-ci{-}{e}{ë}n-ties
+ca-fe{-}{i}{ï}-ne-vrije
+co{-}{i}{ï}n-ci-deer-de
+co{-}{i}{ï}n-ci-den-tie
+con-gre-ga-ti{-}{e}{ë}n
+con-sci{-}{e}{ë}n-ties
+ar-cha{-}{i}{ï}-seer-de
+ar-cha{-}{i}{ï}s-tisch
+ast-ma-pa-ti{-}{e}{ë}nt
+au-to-gra-fie{-}{e}{ë}n
+ban-toe{-}{i}{ï}s-tiek
+be-zits-ac-ti{-}{e}{ë}n
+bi-jou-te-rie{-}{e}{ë}n
+ge-zags-va-cu{-}{u}{ü}m
+fo-to-ko-pi{-}{e}{ë}-ren
+Flak-kee{-}{e}{ë}-naar
+ge{-}{e}{ë}-mail-leerd
+Pa-ra-ma-ri-bo{-}{e}{ë}r
+ge{-}{e}{ë}er-bie-digd
+ge{-}{i}{ï}n-ves-teerd
+po{-}{e}{ë}-zie-de-buut
+ge{-}{i}{ï}n-vol-veerd
+hart-pa-ti{-}{e}{ë}n-te
+po-ly-the{-}{i}{ï}s-ten
+Joego-sla-vi{-}{e}{ë}r
+ge{-}{e}{ë}xe-cu-teerd
+echo-sco-pie{-}{e}{ë}n
+de-pen-den-ti{-}{e}{ë}n
+après-ski{-}{e}{ë}n
+af-spa-ti{-}{e}{ë}-ring
+har-mo-ni-c{a-}{}{aa}tje
+sport-be-h{a-}{}{aa}tje
+ge{-}{e}{ë}x-pe-di-eerd
+ge{-}{e}{ë}x-tra-heerd
+nu-cle{-}{i}{ï}ne-zuur
+ge{-}{e}{ë}-ga-li-seerd
+me-de-pa-ti{-}{e}{ë}n-te
+ge{-}{e}{ë}x-plo-reerd
+hy-gi{-}{e}{ë}-ni-scher
+Scan-di-na-vi{-}{e}{ë}r
+idee{-}{e}{ë}n-ro-mans
+ca-su{-}{i}{ï}s-tische
+dorps-ca-f{é-}{}{ee}tje
+cli{-}{e}{ë}n-ten-stop
+my-tho-lo-gie{-}{e}{ë}n
+stads-au-t{o-}{}{oo}tje
+cli{-}{e}{ë}n-ten-raad
+bloe-men-zee{-}{e}{ë}n
+nier-pa-ti{-}{e}{ë}n-te
+ei-gen-ge{-}{e}{ë}rf-de
+ge{-}{e}{ë}x-cel-leerd
+ge{-}{e}{ë}x-cer-peerd
+ge{-}{e}{ë}-ja-cu-leerd
+cli{-}{e}{ë}n-ten-kant
+cli{-}{e}{ë}n-ten-zorg
+co-ca{-}{i}{ï}-ne-ben-de
+ge{-}{i}{ï}n-jec-teerd
+ge{-}{i}{ï}m-mi-greerd
+drie{-}{e}{ë}n-zes-tig
+ge{-}{i}{ï}n-sis-teerd
+dub-bel-twee{-}{e}{ë}n
+ge{-}{i}{ï}n-cli-neerd
+ge{-}{i}{ï}n-car-neerd
+pro-te{-}{i}{ï}-ne-rijk
+in-spi-ci{-}{e}{ë}n-ten
+ge{-}{e}{ë}-clip-seerd
+dood-ge{-}{e}{ë}r-gerd
+en-do-sco-pie{-}{e}{ë}n
+twee{-}{e}{ë}n-zes-tig
+ME-pa-ti{-}{e}{ë}n-ten
+idee{-}{e}{ë}n-bus-sen
+ge{-}{e}{ë}n-sce-neerd
+ca-ro-te-no{-}{i}{ï}-den
+reu-ma-pa-ti{-}{e}{ë}nt
+pre-ju-di-ci{-}{e}{ë}-le
+va-cu{-}{u}{ü}m-bui-zen
+eu-tro-fi{-}{e}{ë}-ring
+haut-re-li{-}{e}{ë}fs
+tra-ge-di{-}{e}{ë}n-nes
+pa-no-ra-m{a-}{}{aa}tjes
+oor-logs-wee{-}{e}{ë}n
+im-ma-te-ri{-}{e}{ë}-ler
+hiv-pa-ti{-}{e}{ë}n-ten
+har-mo-ni{-}{e}{ë}-rend
+ge{-}{u}{ü}-ti-li-seerd
+ge{-}{o}{ö}ri-en-teerd
+ge{-}{i}{ï}n-ver-teerd
+ge{-}{i}{ï}n-un-deer-de
+ge{-}{i}{ï}n-no-veer-de
+ge{-}{e}{ë}x-cu-seer-de
+ge{-}{e}{ë}-ner-veer-de
+ge{-}{e}{ë}-men-deer-de
+fri-tuur-oli{-}{e}{ë}n
+ego{-}{i}{ï}s-ti-scher
+ef-fi-ci{-}{e}{ë}nt-ste
+bus-pa-ti{-}{e}{ë}n-ten
+bank-cli{-}{e}{ë}n-ten
+asym-me-trie{-}{e}{ë}n
+ar-ti-fi-ci{-}{e}{ë}-ler
+al-pi-ne-ski{-}{e}{ë}rs
+ge-de-fi-ni{-}{e}{ë}erd
+ge{-}{e}{ë}-va-cu-eer-de
+to-po-gra-fie{-}{e}{ë}n
+thuis-ko-pie{-}{e}{ë}n
+ge{-}{i}{ï}o-ni-seer-de
+ge{-}{e}{ë}-qui-peer-de
+ge{-}{e}{ë}-vo-lu-eer-de
+ge{-}{i}{ï}r-ri-geer-de
+ge{-}{e}{ë}x-pi-reer-de
+ge{-}{e}{ë}-mit-teer-de
+com-mer-ci{-}{e}{ë}-len
+pa-tho-lo-gie{-}{e}{ë}n
+ge{-}{e}{ë}-va-lu-eer-de
+ge{-}{i}{ï}n-du-ceer-de
+ge{-}{i}{ï}n-ha-leer-de
+ge{-}{u}{ü}ni-fi-ceerd
+ge{-}{e}{ë}s-ca-leer-de
+be{-}{i}{ï}n-vloed-den
+ge{-}{i}{ï}n-dexeer-de
+ge{-}{e}{ë}x-po-seer-de
+toe-ge{-}{e}{ë}i-gen-de
+ori{-}{e}{ë}n-teer-den
+ge{-}{e}{ë}n-ta-meer-de
+ge{-}{i}{ï}n-di-ceer-de
+ge-ta-toe{-}{e}{ë}er-de
+ori{-}{e}{ë}n-te-ren-de
+co{-}{o}{ö}r-di-ne-rend
+com-mer-ci{-}{e}{ë}-ler
+ex-pa-ti{-}{e}{ë}n-ten
+ef-fi-ci{-}{e}{ë}n-te-re
+ge{-}{i}{ï}-ni-ti-eer-de
+ge{-}{e}{ë}-mi-greer-de
+ge{-}{i}{ï}n-vi-teer-de
+ge-po{-}{e}{ë}-ti-seerd
+ge{-}{i}{ï}-de-a-li-seerd
+Is-ra{-}{e}{ë}-li-tische
+al-tru{-}{i}{ï}s-ti-sche
+re{-}{i}{ï}n-car-neer-de
+he-ro{-}{i}{ï}-ne-hoe-ren
+voet-bal-knie{-}{e}{ë}n
+cel-the-ra-pie{-}{e}{ë}n
+ha-gio-gra-fie{-}{e}{ë}n
+ge{-}{i}{ï}r-ri-teer-der
+in-stan-ta-n{é-}{}{ee}tje
+twee{-}{e}{ë}n-tach-tig
+ti-ra-mi-su{-}{}{–}tje
+ri-si-co-pa-ti{-}{e}{ë}nt
+po{-}{e}{ë}-zie-kri-tiek
+mi-to-chon-dri{-}{e}{ë}n
+je-zu{-}{i}{ï}e-ten-kerk
+in-ter-mezz{o-}{}{oo}tje
+com-mu-ni-qu{é-}{}{ee}tje
+co-ca{-}{i}{ï}-ne-kar-tel
+au-di{-}{e}{ë}n-tie-blad
+twee{-}{e}{ë}n-vijf-tig
+Pe-lo-pon-ne-si{-}{e}{ë}r
+co{-}{o}{ö}r-di-ne-ren-de
+ge{-}{i}{ï}n-fec-teer-de
+ge{-}{i}{ï}n-stal-leerd
+ge-co{-}{o}{ö}r-di-neerd
+ge{-}{i}{ï}n-for-meer-de
+ge-o-ri{-}{e}{ë}n-teer-de
+He-ver-lee{-}{e}{ë}-naar
+tech-no-lo-gie{-}{e}{ë}n
+lin-gu{-}{i}{ï}s-ti-sche
+ge{-}{i}{ï}n-spi-reer-de
+ge{-}{i}{ï}l-lu-streerd
+ge{-}{e}{ë}-mo-ti-o-neerd
+ge{-}{e}{ë}-man-ci-peerd
+co{-}{o}{ö}r-di-na-tri-ce
+co{-}{o}{ö}r-di-na-to-ren
+su{-}{i}{ï}-ci-de-ri-si-co
+thuis-ko-pi{-}{e}{ë}-ren
+su{-}{i}{ï}-ci-de-po-ging
+cli{-}{e}{ë}nt-ge-richt
+twee{-}{e}{ë}n-twin-tig
+kan-ker-pa-ti{-}{e}{ë}nt
+drie{-}{e}{ë}n-twin-tig
+be{-}{i}{ï}n-vloed-baar
+ge{-}{e}{ë}-ti-ket-teerd
+ge{-}{i}{ï}n-fil-treerd
+ge{-}{i}{ï}m-plan-teerd
+ge{-}{e}{ë}f-fec-tu-eerd
+twee{-}{e}{ë}n-veer-tig
+ge{-}{i}{ï}n-spec-teerd
+ge{-}{i}{ï}m-preg-neerd
+ge{-}{i}{ï}n-au-gu-reerd
+Em-ma{-}{u}{ü}s-gan-gers
+sui-ker-pa-ti{-}{e}{ë}nt
+pi{-}{e}{ë}-teits-vol-le
+nier-pa-ti{-}{e}{ë}n-ten
+reu-zen-pin-gu{-}{i}{ï}n
+in-tu{-}{i}{ï}-ti-o-nis-me
+co-ca{-}{i}{ï}-ne-maf-fia
+co{-}{o}{ö}-pe-ra-tie-ven
+hart-pa-ti{-}{e}{ë}n-ten
+co-ca{-}{i}{ï}ne-vangst
+aids-pa-ti{-}{e}{ë}n-ten
+zin-ko-gra-fie{-}{e}{ë}n
+co-ca{-}{i}{ï}ne-han-del
+darm-bac-te-ri{-}{e}{ë}n
+straf-ko-lo-ni{-}{e}{ë}n
+spe-ci-fi-ca-ti{-}{e}{ë}n
+sper-ma-to-zo{-}{i}{ï}-de
+spon-ta-ne{-}{i}{ï}-teit
+ca-ra-pa-ti{-}{e}{ë}n-ten
+re{-}{i}{ï}n-car-na-ties
+re-li{-}{e}{ë}f-druk-ken
+re-li{-}{e}{ë}f-kaar-ten
+pa-ti{-}{e}{ë}n-ten-zorg
+pa-ti{-}{e}{ë}n-tie-werk
+per-so-ni-fi{-}{e}{ë}-ren
+plu-to-cra-tie{-}{e}{ë}n
+po{-}{e}{ë}-zie-bun-dels
+pre-ju-di-ci{-}{e}{ë}-ren
+pre-si-den-ti{-}{e}{ë}-le
+pri-vi-le-gi{-}{e}{ë}-ren
+pro-mis-cu{-}{i}{ï}-teit
+pro-vi-den-ti{-}{e}{ë}-le
+psy-cho-hy-gi{-}{e}{ë}-ne
+ra-dio-gra-fie{-}{e}{ë}n
+ra-dio-sco-pie{-}{e}{ë}n
+ery-tro-po{-}{e}{ë}-ti-ne
+pan-the{-}{i}{ï}s-tisch
+och-lo-cra-tie{-}{e}{ë}n
+on-ge{-}{e}{ë}-ve-naar-de
+on-hy-gi{-}{e}{ë}-ni-sche
+ori{-}{e}{ë}n-ta-lis-ten
+or-tho-gra-fie{-}{e}{ë}n
+paas-com-mu-ni{-}{e}{ë}n
+in-ef-fi-ci{-}{e}{ë}n-tie
+in-suf-fi-ci{-}{e}{ë}n-te
+in-ten-si-fi{-}{e}{ë}-ren
+in-ter-li-ni{-}{e}{ë}-ren
+in-ter-ve-ni{-}{e}{ë}-ren
+je-zu{-}{i}{ï}e-ten-or-de
+kal-li-gra-fie{-}{e}{ë}n
+ki-lo-ca-lo-rie{-}{e}{ë}n
+kroon-ko-lo-ni{-}{e}{ë}n
+li-tho-gra-fie{-}{e}{ë}n
+ma-li{-}{e}{ë}n-kol-ders
+ma-ni{-}{e}{ë}-ris-tisch
+mi-li-eu-hy-gi{-}{e}{ë}-ne
+des-o-ri{-}{e}{ë}n-ta-tie
+des-o-ri{-}{e}{ë}n-te-ren
+dif-fe-ren-ti{-}{e}{ë}-le
+dit-to-gra-fie{-}{e}{ë}n
+di-ver-si-fi{-}{e}{ë}-ren
+fa-mi-lie-re{-}{u}{ü}-nie
+for-ti-fi-ca-ti{-}{e}{ë}n
+fra-se-o-lo-gie{-}{e}{ë}n
+ge-ar-cha{-}{i}{ï}-seerd
+ge{-}{e}{ë}m-ploy-eer-de
+ge{-}{e}{ë}xe-cu-teer-de
+ge{-}{e}{ë}x-pli-queerd
+ge{-}{i}{ï}m-pli-ceer-de
+ge{-}{i}{ï}n-te-greer-de
+ge{-}{i}{ï}n-ter-neer-de
+ge{-}{i}{ï}n-ti-meer-den
+ge{-}{i}{ï}n-ver-teer-de
+ge-ma-ni{-}{e}{ë}-reer-de
+ge{-}{u}{ü}ni-for-meerd
+ge{-}{u}{ü}r-ba-ni-seerd
+gram-ca-lo-rie{-}{e}{ë}n
+gra-ti-fi-ca-ti{-}{e}{ë}n
+her-de-fi-ni{-}{e}{ë}-ren
+he-ro{-}{i}{ï}-ne-han-del
+her-ori{-}{e}{ë}n-ta-tie
+her-ori{-}{e}{ë}n-te-ren
+hi{-}{e}{ë}-rar-chie{-}{e}{ë}n
+hi{-}{e}{ë}-rar-chi-sche
+hi{-}{e}{ë}-ro-gli-fisch
+hi{-}{e}{ë}-ro-gly-fisch
+hin-doe{-}{i}{ï}s-tisch
+Cu-ra-çao{-}{e}{ë}-naar
+car-ros-se-rie{-}{e}{ë}n
+chro-no-lo-gie{-}{e}{ë}n
+coc-ker-spa-ni{-}{e}{ë}l
+co{-}{i}{ï}n-ci-den-ties
+con-cor-dan-ti{-}{e}{ë}n
+con-fi-den-ti{-}{e}{ë}-le
+pa-ti{-}{e}{ë}n-ten-stop
+ar-cha{-}{i}{ï}s-ti-sche
+be{-}{i}{ï}n-vloed-ba-re
+ge{-}{i}{ï}m-mu-ni-seerd
+cli{-}{e}{ë}n-ten-recht
+drie{-}{e}{ë}n-veer-tig
+dis-tan-ti{-}{e}{ë}-ring
+ge{-}{e}{ë}x-ploi-teerd
+de-fi-ni{-}{e}{ë}-rin-gen
+va-cu{-}{u}{ü}m-ver-pakt
+fee{-}{e}{ë}n-ko-nin-gin
+maag-pa-ti{-}{e}{ë}n-ten
+jacht-tro-fee{-}{e}{ë}n
+pro-te-ro-zo{-}{i}{ï}-cum
+ge{-}{i}{ï}l-lu-mi-neerd
+se-mi-of-fi-ci{-}{e}{ë}-le
+ge{-}{i}{ï}n-ti-mi-deerd
+co-li-bac-te-ri{-}{e}{ë}n
+ge{-}{i}{ï}n-sti-tu-eerd
+ze-nuw-pa-ti{-}{e}{ë}n-te
+Over-flak-kee{-}{e}{ë}r
+cli{-}{e}{ë}n-ten-ra-den
+do-mi-ci-li{-}{e}{ë}-ring
+long-pa-ti{-}{e}{ë}n-ten
+cis-ter-ci{-}{e}{ë}n-zer
+ca-deau-idee{-}{e}{ë}n
+be{-}{i}{ï}n-vloe-den-de
+idee{-}{e}{ë}n-vor-ming
+bor-der-ter-ri{-}{e}{ë}r
+drie{-}{e}{ë}n-tach-tig
+drie{-}{e}{ë}n-vijf-tig
+he-ro{-}{i}{ï}-ne-vangst
+idee{-}{e}{ë}n-rijk-dom
+pro-te{-}{i}{ï}-ne-rij-ke
+in-con-ve-ni{-}{e}{ë}n-te
+ge{-}{i}{ï}n-ac-ti-veerd
+be-stel-au-t{o-}{}{oo}tje
+ge{-}{e}{ë}n-quê-teerd
+her-ders-po{-}{e}{ë}-zie
+fil-mo-gra-fie{-}{e}{ë}n
+mond-hy-gi{-}{e}{ë}-nist
+gly-co-pro-te{-}{i}{ï}-ne
+co-ma-pa-ti{-}{e}{ë}n-ten
+pre-fe-ren-ti{-}{e}{ë}-le
+am-bi-gu{-}{i}{ï}-tei-ten
+tbs-pa-ti{-}{e}{ë}n-ten
+lief-des-po{-}{e}{ë}-zie
+con-sci{-}{e}{ë}n-ti-eus
+bon-net-te-rie{-}{e}{ë}n
+zaal-pa-ti{-}{e}{ë}n-ten
+pest-bac-te-ri{-}{e}{ë}n
+mo-za{-}{i}{ï}ek-te-gels
+hi{-}{e}{ë}-rar-chie-ker
+ge{-}{u}{ü}ni-fi-ceer-de
+ge{-}{o}{ö}ri-en-teer-de
+ge{-}{i}{ï}n-si-nu-eer-de
+ge{-}{i}{ï}n-cli-neer-de
+ge{-}{e}{ë}x-tra-heer-de
+ge{-}{e}{ë}x-plo-reer-de
+ge{-}{e}{ë}x-pli-ceer-de
+ge{-}{e}{ë}x-pan-deer-de
+ge{-}{e}{ë}xor-ci-seerd
+ge{-}{e}{ë}x-cer-peer-de
+ge{-}{e}{ë}xal-teer-der
+ge{-}{e}{ë}s-cor-teer-de
+ge{-}{e}{ë}n-cryp-teerd
+ge{-}{e}{ë}n-ca-dreer-de
+ge{-}{e}{ë}er-bie-dig-de
+ge{-}{e}{ë}-clip-seer-de
+da-da{-}{i}{ï}s-ti-scher
+co{-}{o}{ö}-pe-ra-tie-ver
+co{-}{o}{ö}r-di-neer-den
+ge{-}{i}{ï}n-vol-veer-de
+hy-gi{-}{e}{ë}-ne-ei-sen
+hiv-pa-ti{-}{e}{ë}n-ten
+ge{-}{e}{ë}-ga-li-seer-de
+ge{-}{i}{ï}n-jec-teer-de
+ge{-}{e}{ë}x-tru-deer-de
+ge{-}{e}{ë}x-por-teer-de
+ge{-}{e}{ë}m-bar-keer-de
+ge{-}{i}{ï}n-cas-seer-de
+ge{-}{e}{ë}xa-mi-neer-de
+ge{-}{i}{ï}m-mi-greer-de
+ge{-}{e}{ë}-mail-leer-de
+hy-gi{-}{e}{ë}-ne-re-gels
+ge{-}{i}{ï}n-car-neer-de
+ge{-}{e}{ë}-li-mi-neer-de
+ge{-}{i}{ï}n-stru-eer-de
+me-de-pa-ti{-}{e}{ë}n-ten
+ge{-}{i}{ï}m-por-teer-de
+ge{-}{i}{ï}n-ves-teer-de
+ge{-}{i}{ï}n-ter-view-de
+ge{-}{e}{ë}n-sce-neer-de
+ge{-}{e}{ë}x-plo-deer-de
+ge{-}{e}{ë}-lek-tri-seerd
+her-ori{-}{e}{ë}n-teer-de
+des-ori{-}{e}{ë}n-teer-de
+va-cu{-}{u}{ü}m-ver-pak-te
+bor-der-ter-ri{-}{e}{ë}rs
+di-eet-pa-ti{-}{e}{ë}n-ten
+ge{-}{e}{ë}utha-na-seerd
+spier-atro-fie{-}{e}{ë}n
+va-gan-ten-po{-}{e}{ë}-zie
+su{-}{i}{ï}-ci-de-nei-ging
+si-mul-ta-ne{-}{i}{ï}-teit
+rijks-in-sig-ni{-}{e}{ë}n
+ori{-}{e}{ë}n-ta-tie-reis
+mo-no-the{-}{i}{ï}s-tisch
+ma-ro-qui-ne-rie{-}{e}{ë}n
+je-zu{-}{i}{ï}e-ten-stijl
+dis-har-mo-ni{-}{e}{ë}-ren
+Cu-ra-çao{-}{e}{ë}-naars
+twee{-}{e}{ë}n-ne-gen-tig
+kan-ker-pa-ti{-}{e}{ë}n-te
+ori{-}{e}{ë}n-ta-tie-jaar
+drie{-}{e}{ë}n-ne-gen-tig
+ge{-}{i}{ï}n-fec-teer-den
+ge-co{-}{o}{ö}r-di-neer-de
+ge{-}{i}{ï}n-te-res-seerd
+ge{-}{i}{ï}l-lu-streer-de
+ge{-}{e}{ë}-man-ci-peer-de
+co{-}{e}{ë}f-fi-ci{-}{e}{ë}n-ten
+pa-ti{-}{e}{ë}nt-re-la-tie
+ge{-}{i}{ï}n-ten-si-veerd
+ge{-}{e}{ë}x-pli-ci-teerd
+her-ori{-}{e}{ë}n-te-ring
+co-ca{-}{i}{ï}-ne-af-fai-re
+le-ver-pa-ti{-}{e}{ë}n-ten
+he-ro{-}{i}{ï}-ne-hoer-tje
+kunst-ga-le-rie{-}{e}{ë}n
+par-le-men-ta-ri{-}{e}{ë}r
+fonds-pa-ti{-}{e}{ë}n-ten
+ori{-}{e}{ë}n-ta-tie-punt
+cho-re-o-gra-fie{-}{e}{ë}n
+pit-bull-ter-ri{-}{e}{ë}r
+ast-ma-pa-ti{-}{e}{ë}n-ten
+he-ro{-}{i}{ï}-ne-ge-bruik
+free-style-ski{-}{e}{ë}n
+po{-}{e}{ë}-zie-fes-ti-val
+con-cur-ren-ti{-}{e}{ë}-le
+fa-mi-lie-re{-}{u}{ü}-nies
+ge{-}{i}{ï}n-ter-neer-den
+ze-nuw-pa-ti{-}{e}{ë}n-ten
+te-ken-aca-de-mi{-}{e}{ë}n
+ter-mi-no-lo-gie{-}{e}{ë}n
+sub-ca-te-go-rie{-}{e}{ë}n
+bu-reau-cra-tie{-}{e}{ë}n
+se-cu-la-ri-sa-ti{-}{e}{ë}n
+sper-ma-to-zo{-}{i}{ï}-den
+sa-cra-men-ta-li{-}{e}{ë}n
+ko-nings-pin-gu{-}{i}{ï}n
+rijks-aca-de-mi{-}{e}{ë}n
+pa-tri-ci{-}{e}{ë}rs-huis
+pest-epi-de-mie{-}{e}{ë}n
+pi{-}{e}{ë}-de-stal-le-tje
+psy-cho-lin-gu{-}{i}{ï}st
+co-ca{-}{i}{ï}-ne-smok-kel
+pan-the{-}{i}{ï}s-ti-sche
+mo-za{-}{i}{ï}ek-vloe-ren
+ori{-}{e}{ë}n-ta-lis-tiek
+in-suf-fi-ci{-}{e}{ë}n-tie
+je-zu{-}{i}{ï}e-ten-pa-ter
+kerk-pro-vin-ci{-}{e}{ë}n
+kies-quo-ti{-}{e}{ë}n-ten
+mond-hy-gi{-}{e}{ë}-nis-te
+dif-fe-ren-ti{-}{e}{ë}-len
+dif-fe-ren-ti{-}{e}{ë}-ren
+en-cy-clo-pe-die{-}{e}{ë}n
+ge{-}{e}{ë}-mo-ti-o-neer-de
+ge{-}{e}{ë}m-ploy-eer-den
+ge{-}{e}{ë}n-quê-teer-de
+ge{-}{i}{ï}m-pro-vi-seerd
+ge{-}{u}{ü}ni-for-meer-de
+ge{-}{u}{ü}r-ba-ni-seer-de
+griep-pa-ti{-}{e}{ë}n-ten
+her-ori{-}{e}{ë}n-ta-ties
+hi{-}{e}{ë}-rar-chi-scher
+hi{-}{e}{ë}-ro-gli-fi-sche
+hin-doe{-}{i}{ï}s-ti-sche
+im-per-ti-nen-ti{-}{e}{ë}n
+con-tro-ver-si{-}{e}{ë}-le
+co{-}{o}{ö}r-di-na-tri-ces
+cis-ter-ci{-}{e}{ë}n-zers
+co-ca{-}{i}{ï}-ne-ge-bruik
+com-men-ta-ri{-}{e}{ë}-ren
+aris-to-cra-tie{-}{e}{ë}n
+be-dis-cus-si{-}{e}{ë}-ren
+be-doe{-}{i}{ï}en-en-tent
+bi-blio-gra-fie{-}{e}{ë}n
+niet-of-fi-ci{-}{e}{ë}-le
+ori{-}{e}{ë}n-ta-tie-loop
+po-ly-the{-}{i}{ï}s-tisch
+ge{-}{i}{ï}n-ter-fe-reerd
+ge{-}{i}{ï}n-tro-du-ceerd
+lands-fi-nan-ci{-}{e}{ë}n
+on-ge{-}{i}{ï}n-spi-reerd
+ge{-}{i}{ï}n-cri-mi-neerd
+net-co{-}{o}{ö}r-di-na-tor
+ar-beids-hy-gi{-}{e}{ë}-ne
+ge{-}{e}{ë}x-tra-po-leerd
+kleur-va-ri{-}{e}{ë}-teit
+ge{-}{i}{ï}so-leerd-heid
+pro-Is-ra{-}{e}{ë}-lisch
+ge{-}{i}{ï}n-flu-en-ceerd
+pa-ti{-}{e}{ë}n-ten-recht
+su{-}{i}{ï}-ci-de-plan-nen
+her-de-fi-ni{-}{e}{ë}-ring
+bank-em-ploy{é-}{}{ee}tje
+kern-on-der-zee{-}{e}{ë}r
+ori{-}{e}{ë}n-ta-tie-fa-se
+zelf-ge-cre{-}{e}{ë}er-de
+buurt-con-ci{-}{e}{ë}r-ge
+cli{-}{e}{ë}n-ten-fol-der
+ge{-}{i}{ï}n-ter-po-leerd
+hi{-}{e}{ë}-ro-gly-fi-sche
+sub-si-di{-}{e}{ë}-rin-gen
+ori{-}{e}{ë}n-ta-tie-no-ta
+kaas-souf-fl{é-}{}{ee}tje
+ge{-}{e}{ë}-che-lon-neerd
+po-li-tie-au-t{o-}{}{oo}tje
+pa-ti{-}{e}{ë}n-ten-groep
+ge{-}{e}{ë}-co-no-mi-seerd
+pa-ti{-}{e}{ë}n-ten-stops
+in-con-ve-ni{-}{e}{ë}n-tie
+twee{-}{e}{ë}n-ze-ven-tig
+ge{-}{i}{ï}n-cor-po-reerd
+di-ver-si-fi{-}{e}{ë}-ring
+cho-co-la-te-rie{-}{e}{ë}n
+on-ge{-}{i}{ï}n-for-meerd
+be{-}{i}{ï}n-vloe-din-gen
+rijks-fi-nan-ci{-}{e}{ë}n
+reu-ma-pa-ti{-}{e}{ë}n-ten
+ma-ni{-}{e}{ë}-ris-ti-sche
+ge{-}{e}{ë}xe-cu-teer-den
+con-sci{-}{e}{ë}n-ti-eu-ze
+su{-}{i}{ï}-ci-de-ple-gers
+pyg-mee{-}{e}{ë}n-vol-ken
+prijs-the-o-rie{-}{e}{ë}n
+in-ter-ve-ni{-}{e}{ë}er-de
+in-stan-ta-n{é-}{}{ee}tjes
+ge{-}{i}{ï}n-fil-treer-de
+ge{-}{i}{ï}m-mu-ni-seer-de
+ge{-}{i}{ï}l-lu-mi-neer-de
+ge{-}{e}{ë}n-cryp-teer-de
+ge-welds-or-gie{-}{e}{ë}n
+ge-ma-ni{-}{e}{ë}-reer-der
+an-ci{-}{e}{ë}n-ni-tei-ten
+al-tru{-}{i}{ï}s-ti-scher
+re-ser-ve-ko-pie{-}{e}{ë}n
+ge{-}{i}{ï}n-ti-mi-deer-de
+niet-ma-te-ri{-}{e}{ë}-le
+sub-stan-ti{-}{e}{ë}-le-re
+ge{-}{e}{ë}-ti-ket-teer-de
+ge{-}{e}{ë}x-ploi-teer-de
+me-tho-do-lo-gie{-}{e}{ë}n
+ge{-}{e}{ë}f-fec-tu-eer-de
+ge{-}{i}{ï}-de-a-li-seer-de
+cli{-}{e}{ë}nt-ge-rich-te
+ge{-}{i}{ï}n-spec-teer-de
+an-ti-bac-te-ri{-}{e}{ë}-le
+kleu-ren-ko-pie{-}{e}{ë}n
+ge{-}{i}{ï}m-preg-neer-de
+fo-to-vol-ta{-}{i}{ï}-sche
+volks-me-lo-die{-}{e}{ë}n
+ge{-}{i}{ï}n-ter-view-den
+ge{-}{i}{ï}n-stal-leer-de
+ori{-}{e}{ë}n-ta-tie-lo-pen
+in-ter-net-ca-f{é-}{}{ee}tje
+sui-ker-pa-ti{-}{e}{ë}n-ten
+tijds-ori{-}{e}{ë}n-ta-tie
+so-ci{-}{e}{ë}-teits-le-ven
+slot-co{-}{o}{ö}r-di-na-tor
+school-con-ci{-}{e}{ë}r-ge
+po-ly-the{-}{i}{ï}s-ti-sche
+pa-ti{-}{e}{ë}nt-si-tu-a-tie
+pa-ti{-}{e}{ë}n-ten-stroom
+on-ge{-}{i}{ï}l-lu-streerd
+on-ge{-}{e}{ë}-man-ci-peerd
+mi-grai-ne-pa-ti{-}{e}{ë}nt
+je-zu{-}{i}{ï}e-ten-ker-ken
+cli{-}{e}{ë}n-ten-rech-ten
+cli{-}{e}{ë}n-ten-dos-sier
+bouw-co{-}{o}{ö}r-di-na-tor
+be-drijfs-hy-gi{-}{e}{ë}-ne
+dif-fe-ren-ti{-}{e}{ë}-ring
+ge{-}{i}{ï}n-ter-ve-ni-eerd
+po{-}{e}{ë}-zie-wed-strijd
+di-a-be-tes-pa-ti{-}{e}{ë}nt
+ge{-}{i}{ï}m-ple-men-teerd
+co{-}{o}{ö}r-di-na-tie-punt
+ge{-}{i}{ï}n-ter-pel-leerd
+ge{-}{i}{ï}n-ter-pre-teerd
+bulk-che-mi-ca-li{-}{e}{ë}n
+on-ge{-}{i}{ï}n-for-meer-de
+wild-wa-ter-ka-no{-}{e}{ë}n
+ge{-}{e}{ë}x-pe-ri-men-teer
+ge{-}{i}{ï}-den-ti-fi-ceerd
+ge{-}{i}{ï}n-te-res-seer-de
+markt-eco-no-mie{-}{e}{ë}n
+kan-ker-pa-ti{-}{e}{ë}n-ten
+par-le-men-ta-ri{-}{e}{ë}rs
+pa-ti{-}{e}{ë}nt-ge-bon-den
+mond-hy-gi{-}{e}{ë}-nis-ten
+co{-}{o}{ö}r-di-na-tie-team
+on-ge{-}{i}{ï}n-spi-reer-de
+ri-si-co-pa-ti{-}{e}{ë}n-ten
+boet-pre-di-ca-ti{-}{e}{ë}n
+kern-on-der-zee{-}{e}{ë}rs
+staats-fi-nan-ci{-}{e}{ë}n
+ve-ge-ta-ri{-}{e}{ë}rs-bond
+twee{-}{e}{ë}n-der-tig-ste
+ko-nings-pin-gu{-}{i}{ï}ns
+ge{-}{e}{ë}n-quê-teer-den
+pa-ti{-}{e}{ë}n-tie-wer-ken
+pit-bull-ter-ri{-}{e}{ë}rs
+post-in-dus-tri{-}{e}{ë}-le
+ras-sen-the-o-rie{-}{e}{ë}n
+atoom-on-der-zee{-}{e}{ë}r
+im-mo-bi-li{-}{e}{ë}n-markt
+on-ge-co{-}{o}{ö}r-di-neerd
+on-ge{-}{e}{ë}-mo-ti-o-neerd
+ope-ra-tie-pa-ti{-}{e}{ë}nt
+ori{-}{e}{ë}n-ta-lis-tisch
+je-zu{-}{i}{ï}e-ten-pa-ters
+dis-con-ti-nu{-}{i}{ï}-teit
+drie{-}{e}{ë}n-der-tig-ste
+fan-tas-ma-go-rie{-}{e}{ë}n
+ge-des-ori{-}{e}{ë}n-teerd
+ge{-}{e}{ë}n-ga-geerd-heid
+ge{-}{i}{ï}m-pro-vi-seer-de
+griep-epi-de-mie{-}{e}{ë}n
+idi-o-syn-cra-sie{-}{e}{ë}n
+bui-ten-pa-ro-chi{-}{e}{ë}n
+chres-to-ma-thie{-}{e}{ë}n
+cli{-}{e}{ë}n-te-lis-tisch
+cli{-}{e}{ë}n-ten-be-stand
+au-to-bio-gra-fie{-}{e}{ë}n
+leu-ke-mie-pa-ti{-}{e}{ë}nt
+hoofd-in-gre-di{-}{e}{ë}nt
+pin-gu{-}{i}{ï}n-ver-blijf
+ge{-}{e}{ë}-van-ge-li-seerd
+rest-ca-te-go-rie{-}{e}{ë}n
+in-con-ve-ni{-}{e}{ë}n-ties
+pro-Is-ra{-}{e}{ë}-li-sche
+ge{-}{i}{ï}n-cri-mi-neer-de
+ge{-}{i}{ï}-ni-ti-a-li-seerd
+ge{-}{e}{ë}n-ca-nail-leerd
+ge{-}{i}{ï}r-ri-teerd-heid
+ge{-}{i}{ï}n-doc-tri-neerd
+kei-zers-pin-gu{-}{i}{ï}ns
+stem-mings-po{-}{e}{ë}-zie
+zorg-co{-}{o}{ö}r-di-na-tor
+hyp-no-the-ra-pie{-}{e}{ë}n
+ge-zins-fi-nan-ci{-}{e}{ë}n
+je-zu{-}{i}{ï}e-ten-school
+ge{-}{e}{ë}en-en-twin-tigd
+wijk-co{-}{o}{ö}r-di-na-tor
+ba-sis-in-gre-di{-}{e}{ë}nt
+ge{-}{i}{ï}n-ter-rum-peerd
+non-com-mer-ci{-}{e}{ë}-le
+ge-her-ori{-}{e}{ë}n-teerd
+kos-ten-ef-fi-ci{-}{e}{ë}nt
+mee-dis-cus-si{-}{e}{ë}-ren
+po{-}{e}{ë}-zie-fes-ti-vals
+pre-in-dus-tri{-}{e}{ë}-le
+pa-ti{-}{e}{ë}nt-ge-ge-vens
+con-sci{-}{e}{ë}n-ti-eu-zer
+pool-co{-}{o}{ö}r-di-na-ten
+oor-logs-tro-fee{-}{e}{ë}n
+mi-ni-bio-gra-fie{-}{e}{ë}n
+la-tex-al-ler-gie{-}{e}{ë}n
+klas-se-pa-ti{-}{e}{ë}n-ten
+ge{-}{i}{ï}n-ter-po-leer-de
+ge{-}{e}{ë}-lek-tri-seer-de
+ge{-}{e}{ë}-co-no-mi-seer-de
+doods-fan-ta-sie{-}{e}{ë}n
+deel-stra-te-gie{-}{e}{ë}n
+co{-}{o}{ö}r-di-naat-as-sen
+cli{-}{e}{ë}n-ten-krin-gen
+au-di{-}{e}{ë}n-tie-bla-den
+dif-fe-ren-ti{-}{e}{ë}-rend
+mo-no-the{-}{i}{ï}s-ti-sche
+team-co{-}{o}{ö}r-di-na-tor
+ge{-}{i}{ï}n-cor-po-reer-de
+su{-}{i}{ï}-ci-de-po-gin-gen
+leer-stra-te-gie{-}{e}{ë}n
+ge{-}{e}{ë}x-pli-ci-teer-de
+ge{-}{e}{ë}x-tra-po-leer-de
+niet-fi-nan-ci{-}{e}{ë}-le
+niet-es-sen-ti{-}{e}{ë}-le
+ge{-}{i}{ï}n-ten-si-veer-de
+ge{-}{i}{ï}n-tro-du-ceer-de
+top-in-dus-tri{-}{e}{ë}-len
+na-zi-sym-pa-thie{-}{e}{ë}n
+pa-tri-ci{-}{e}{ë}rs-hui-zen
+sys-teem-the-o-rie{-}{e}{ë}n
+ge-zins-the-ra-pie{-}{e}{ë}n
+hiv-ge{-}{i}{ï}n-fec-teer-de
+po{-}{e}{ë}-zie-lief-heb-ber
+me-ta-lin-gu{-}{i}{ï}s-tisch
+goed-ge{-}{i}{ï}n-for-meerd
+epi-lep-sie-pa-ti{-}{e}{ë}nt
+cli{-}{e}{ë}n-ten-ver-ha-len
+Frans-Po-ly-ne-si{-}{e}{ë}r
+he-ro{-}{i}{ï}-ne-han-de-laar
+psy-cho-the-ra-pie{-}{e}{ë}n
+ge{-}{i}{ï}n-for-ma-ti-seerd
+re-gio-co{-}{o}{ö}r-di-na-tor
+ge{-}{i}{ï}n-ven-ta-ri-seerd
+niet-in-dus-tri{-}{e}{ë}-le
+ori{-}{e}{ë}n-ta-tie-cur-sus
+ge{-}{i}{ï}-den-ti-fi-ceer-de
+pa-ti{-}{e}{ë}n-ten-be-stand
+niet-com-mer-ci{-}{e}{ë}-le
+on-ge{-}{i}{ï}n-te-res-seerd
+twee{-}{e}{ë}n-twin-tig-ste
+va-cu{-}{u}{ü}m-ver-pak-king
+so-cio-lin-gu{-}{i}{ï}s-tiek
+staats-mo-no-po-li{-}{e}{ë}n
+ri-bo-nu-cle{-}{i}{ï}-ne-zuur
+pok-ken-epi-de-mie{-}{e}{ë}n
+psy-cho-hy-gi{-}{e}{ë}-nisch
+on-ge-co{-}{o}{ö}r-di-neer-de
+ori{-}{e}{ë}n-ta-tie-be-zoek
+ori{-}{e}{ë}n-ta-tie-pun-ten
+je-zu{-}{i}{ï}e-ten-col-le-ge
+le-pro-zen-ko-lo-ni{-}{e}{ë}n
+drie{-}{e}{ë}n-twin-tig-ste
+ge-des-ori{-}{e}{ë}n-teer-de
+ge-ma-ni{-}{e}{ë}-reerd-heid
+groeps-the-ra-pie{-}{e}{ë}n
+cor-ti-co-ste-ro{-}{i}{ï}-den
+as-te-ro{-}{i}{ï}-den-gor-del
+be-com-men-ta-ri{-}{e}{ë}-ren
+be-doe{-}{i}{ï}en-en-ten-ten
+atoom-on-der-zee{-}{e}{ë}rs
+in-koop-co{-}{o}{ö}-pe-ra-tie
+je-zu{-}{i}{ï}e-ten-scho-len
+ori{-}{e}{ë}n-ta-lis-ti-sche
+kleur-va-ri{-}{e}{ë}-tei-ten
+ex-kan-ker-pa-ti{-}{e}{ë}nt
+agro-in-dus-tri{-}{e}{ë}-le
+jeugd-co{-}{o}{ö}r-di-na-tor
+Nieuw-Ca-le-do-ni{-}{e}{ë}r
+pa-ti{-}{e}{ë}n-ten-dos-sier
+alz-hei-mer-pa-ti{-}{e}{ë}nt
+im-mo-bi-li{-}{e}{ë}n-sec-tor
+ge{-}{e}{ë}-ty-mo-lo-gi-seerd
+ba-sis-che-mi-ca-li{-}{e}{ë}n
+pa-tri-ci{-}{e}{ë}rs-wo-ning
+ge{-}{e}{ë}-lek-tro-cu-teerd
+ge{-}{i}{ï}n-stru-men-teerd
+we-reld-ori{-}{e}{ë}n-ta-tie
+niet-co{-}{o}{ö}-pe-ra-tief
+pa-ti{-}{e}{ë}nt-ma-te-ri-aal
+markt-stra-te-gie{-}{e}{ë}n
+re{-}{i}{ï}n-car-na-tie-leer
+cli{-}{e}{ë}n-ten-re-ke-ning
+he-mo-fi-lie-pa-ti{-}{e}{ë}nt
+cli{-}{e}{ë}n-ten-plat-form
+ge{-}{e}{ë}-lek-tri-fi-ceerd
+ge{-}{e}{ë}x-com-mu-ni-ceerd
+pa-ti{-}{e}{ë}n-ten-stro-men
+he-ro{-}{i}{ï}-ne-ge-brui-ker
+ba-sis-in-dus-trie{-}{e}{ë}n
+cli{-}{e}{ë}n-te-lis-ti-sche
+twee-deurs-au-t{o-}{}{oo}tje
+le-vens-ori{-}{e}{ë}n-ta-tie
+an-nu{-}{i}{ï}-tei-ten-ba-sis
+zui-vel-co{-}{o}{ö}-pe-ra-tie
+ge{-}{e}{ë}u-ro-pe-a-ni-seerd
+speel-goed-au-t{o-}{}{oo}tje
+ano-rexia-pa-ti{-}{e}{ë}n-te
+ge{-}{i}{ï}n-ter-na-li-seerd
+mi-li-eu-hy-gi{-}{e}{ë}-nisch
+ge{-}{e}{ë}x-pe-ri-men-teerd
+on-ge{-}{e}{ë}-man-ci-peer-de
+te-ta-nus-bac-te-ri{-}{e}{ë}n
+se-mi-in-dus-tri{-}{e}{ë}-le
+re-li-kwie{-}{e}{ë}n-kast-je
+pa-ti{-}{e}{ë}nt-si-tu-a-ties
+on-ge{-}{i}{ï}l-lu-streer-de
+net-co{-}{o}{ö}r-di-na-to-ren
+mee-ge{-}{i}{ï}n-stal-leerd
+ma-la-ria-pa-ti{-}{e}{ë}n-ten
+in-cest-the-ra-pie{-}{e}{ë}n
+ge{-}{i}{ï}n-ter-rum-peer-de
+ge{-}{i}{ï}n-ter-pun-geer-de
+ge{-}{e}{ë}x-ter-na-li-seerd
+ge{-}{e}{ë}-van-ge-li-seer-de
+ge{-}{e}{ë}-lek-tro-ly-seerd
+dif-fe-ren-ti{-}{e}{ë}-ren-de
+twee{-}{e}{ë}n-veer-tig-ste
+hoofd-ca-te-go-rie{-}{e}{ë}n
+ge{-}{i}{ï}n-ter-pre-teer-de
+di-a-ly-se-pa-ti{-}{e}{ë}n-ten
+pa-ti{-}{e}{ë}n-ten-rech-ten
+ge{-}{i}{ï}m-ple-men-teer-de
+pa-ti{-}{e}{ë}n-ten-groe-pen
+ge{-}{i}{ï}n-doc-tri-neer-de
+ge{-}{i}{ï}n-te-res-seer-den
+com-plot-the-o-rie{-}{e}{ë}n
+as-te-ro{-}{i}{ï}-den-gor-dels
+ge-drags-the-ra-pie{-}{e}{ë}n
+evo-lu-tie-the-o-rie{-}{e}{ë}n
+bor-der-li-ne-pa-ti{-}{e}{ë}nt
+trein-be{-}{i}{ï}n-vloe-ding
+school-co{-}{o}{ö}r-di-na-tor
+po{-}{e}{ë}-zie-tijd-schrift
+me-ta-lin-gu{-}{i}{ï}s-ti-sche
+je-zu{-}{i}{ï}e-ten-kloos-ter
+hu-we-lijks-quo-ti{-}{e}{ë}nt
+be{-}{i}{ï}n-vloe-dings-waan
+ge{-}{e}{ë}n-thou-si-as-meerd
+kruis-sub-si-di{-}{e}{ë}-ring
+mi-li-eu-co{-}{o}{ö}r-di-na-tor
+links-ge-o-ri{-}{e}{ë}n-teerd
+de-fi-ci{-}{e}{ë}n-tie-ziek-te
+ver-koop-co{-}{o}{ö}-pe-ra-tie
+ope-ra-tie-pa-ti{-}{e}{ë}n-ten
+che-mi-ca-li{-}{e}{ë}n-tan-ker
+zen-der-co{-}{o}{ö}r-di-na-tor
+co{-}{o}{ö}r-di-na-tie-or-gaan
+be{-}{i}{ï}n-vloed-baar-heid
+be-roeps-ori{-}{e}{ë}n-ta-tie
+goed-ge{-}{i}{ï}n-for-meer-de
+pa-ti{-}{e}{ë}n-ten-dos-siers
+he-ro{-}{i}{ï}-ne-ge-brui-kers
+volks-de-mo-cra-tie{-}{e}{ë}n
+volks-ety-mo-lo-gie{-}{e}{ë}n
+zie-ken-huis-pa-ti{-}{e}{ë}nt
+ve-ge-ta-ri{-}{e}{ë}rs-bon-den
+hoofd-in-gre-di{-}{e}{ë}n-ten
+schil-der-aca-de-mi{-}{e}{ë}n
+ge-meen-te-fi-nan-ci{-}{e}{ë}n
+psy-cho-lin-gu{-}{i}{ï}s-tiek
+pa-ti{-}{e}{ë}n-ten-plat-form
+ener-gie-ef-fi-ci{-}{e}{ë}nt
+groot-in-dus-tri{-}{e}{ë}-len
+on-ge{-}{i}{ï}n-te-res-seer-de
+je-zu{-}{i}{ï}e-ten-col-le-ges
+leu-ke-mie-pa-ti{-}{e}{ë}n-ten
+dis-con-ti-nu{-}{i}{ï}-tei-ten
+don-qui-chot-te-rie{-}{e}{ë}n
+he-ro{-}{i}{ï}-ne-ver-sla-ving
+cli{-}{e}{ë}n-ten-be-stan-den
+co{-}{o}{ö}r-di-na-tie-cen-tra
+hiv-ge{-}{i}{ï}n-fec-teer-de
+le-vens-be{-}{e}{ë}in-di-ging
+twee{-}{e}{ë}n-der-tig-ja-rig
+vei-lig-heids-va-cu{-}{u}{ü}m
+mi-grai-ne-pa-ti{-}{e}{ë}n-ten
+be-drijfs-fi-nan-ci{-}{e}{ë}n
+ram-pen-co{-}{o}{ö}r-di-na-tor
+in-gre-di{-}{e}{ë}n-ten-lijst
+cli{-}{e}{ë}nt-volg-sys-teem
+co{-}{o}{ö}r-di-naat-stel-sel
+melk-zuur-bac-te-ri{-}{e}{ë}n
+drie{-}{e}{ë}n-der-tig-ja-rig
+dif-fe-ren-ti{-}{e}{ë}-rin-gen
+team-co{-}{o}{ö}r-di-na-tri-ce
+wo-ning-co{-}{o}{ö}-pe-ra-ties
+kos-ten-ef-fi-ci{-}{e}{ë}n-tie
+ano-rexia-pa-ti{-}{e}{ë}n-ten
+on-ge{-}{i}{ï}-den-ti-fi-ceerd
+im-mo-bi-li{-}{e}{ë}n-kan-toor
+he-ro{-}{i}{ï}-ne-ver-slaaf-de
+in-ter-mi-nis-te-ri{-}{e}{ë}-le
+pa-tri-ci{-}{e}{ë}rs-fa-mi-lie
+re-li-kwie{-}{e}{ë}n-kast-jes
+ma-la-ria-epi-de-mie{-}{e}{ë}n
+ge{-}{e}{ë}x-ter-na-li-seer-de
+ge{-}{e}{ë}x-com-mu-ni-ceer-de
+co{-}{o}{ö}-pe-ra-tie-win-kels
+cli{-}{e}{ë}n-ten-plat-forms
+tu-ber-kel-bac-te-ri{-}{e}{ë}n
+zorg-co{-}{o}{ö}r-di-ne-ren-de
+mi-li-eu-co{-}{o}{ö}-pe-ra-ties
+boe-ren-co{-}{o}{ö}-pe-ra-ties
+ba-sis-in-gre-di{-}{e}{ë}n-ten
+ge{-}{e}{ë}-lek-tro-cu-teer-de
+ge{-}{e}{ë}-lek-tri-fi-ceer-de
+bij-stands-cli{-}{e}{ë}n-ten
+pa-ti{-}{e}{ë}n-ten-ge-ge-vens
+ge{-}{i}{ï}n-ven-ta-ri-seer-de
+kos-ten-ca-te-go-rie{-}{e}{ë}n
+zorg-co{-}{o}{ö}r-di-na-to-ren
+co-ca{-}{i}{ï}-ne-ge-brui-kers
+milt-vuur-bac-te-ri{-}{e}{ë}n
+mi-li-eu-hy-gi{-}{e}{ë}-ni-sche
+po{-}{e}{ë}-zie-lief-heb-bers
+al-ler-gie-pa-ti{-}{e}{ë}n-ten
+di-a-be-tes-pa-ti{-}{e}{ë}n-ten
+pa-tri-ci{-}{e}{ë}rs-fa-mi-lies
+de-fi-ci{-}{e}{ë}n-tie-ziek-tes
+va-cu{-}{u}{ü}m-ver-pak-kin-gen
+tekst-ge-o-ri{-}{e}{ë}n-teer-de
+re{-}{i}{ï}n-car-na-tie-ses-sie
+co{-}{o}{ö}r-di-na-ten-sys-teem
+co{-}{o}{ö}r-di-na-ten-stel-sel
+cli{-}{e}{ë}n-ten-in-for-ma-tie
+cli{-}{e}{ë}n-ten-be-spre-king
+be-leids-co{-}{o}{ö}r-di-na-tor
+an-nu{-}{i}{ï}-tei-ten-sys-teem
+de-fi-ci{-}{e}{ë}n-tie-ziek-ten
+ge{-}{i}{ï}n-di-vi-du-a-li-seerd
+ori{-}{e}{ë}n-ta-tie-be-zoe-ken
+im-mo-bi-li{-}{e}{ë}n-kan-to-ren
+hiv-ge{-}{i}{ï}n-fec-teer-den
+al-machts-fan-ta-sie{-}{e}{ë}n
+ener-gie-ef-fi-ci{-}{e}{ë}n-te
+ma-la-ria-epi-de-mie{-}{e}{ë}n
+drie{-}{e}{ë}n-der-tig-ja-ri-ge
+links-ge-o-ri{-}{e}{ë}n-teer-de
+spits-tech-no-lo-gie{-}{e}{ë}n
+over-heids-fi-nan-ci{-}{e}{ë}n
+zie-ken-fonds-pa-ti{-}{e}{ë}nt
+stu-den-ten-so-ci{-}{e}{ë}-teit
+he-ro{-}{i}{ï}-ne-ver-slaaf-den
+pro-ject-co{-}{o}{ö}r-di-na-tor
+bak-ke-rij-in-gre-di{-}{e}{ë}nt
+co{-}{o}{ö}r-di-na-tie-cen-trum
+land-bouw-co{-}{o}{ö}-pe-ra-tie
+cho-le-ra-epi-de-mie{-}{e}{ë}n
+co-ca{-}{i}{ï}-ne-in-spui-ting
+oud-par-le-men-ta-ri{-}{e}{ë}r
+twee{-}{e}{ë}n-der-tig-ja-ri-ge
+han-dels-com-pag-nie{-}{e}{ë}n
+ge{-}{i}{ï}n-du-stri-a-li-seerd
+co{-}{o}{ö}r-di-na-tie-co-mi-té
+Eu-ro-par-le-men-ta-ri{-}{e}{ë}r
+alz-hei-mer-pa-ti{-}{e}{ë}n-ten
+che-mi-ca-li{-}{e}{ë}n-tan-kers
+idee{-}{e}{ë}n-ge-schie-de-nis
+be{-}{i}{ï}n-vloe-dings-wa-nen
+be-leids-co{-}{o}{ö}r-di-na-tie
+ori{-}{e}{ë}n-ta-tie-ver-mo-gen
+che-mi-ca-li{-}{e}{ë}n-ge-bruik
+pa-ti{-}{e}{ë}n-ten-plat-forms
+tran-sis-tor-ra-di-{o-}{}{oo}tje
+twee{-}{e}{ë}n-twin-tig-ja-rig
+he-ro{-}{i}{ï}-ne-ex-pe-ri-ment
+drie{-}{e}{ë}n-twin-tig-ja-rig
+ver-ma-ge-rings-di{-}{e}{ë}-ten
+ope-nings-ce-re-mo-ni{-}{e}{ë}n
+ge-spreks-the-ra-pie{-}{e}{ë}n
+on-ge{-}{i}{ï}-den-ti-fi-ceer-de
+he-mo-fi-lie-pa-ti{-}{e}{ë}n-ten
+epi-lep-sie-pa-ti{-}{e}{ë}n-ten
+vis-sers-co{-}{o}{ö}-pe-ra-ties
+re-gio-co{-}{o}{ö}r-di-na-to-ren
+pso-ri-a-sis-pa-ti{-}{e}{ë}n-ten
+he-ro{-}{i}{ï}-ne-pros-ti-tu-ees
+ge{-}{e}{ë}n-thou-si-as-meer-de
+co{-}{o}{ö}r-di-naat-stel-sels
+co-ca{-}{i}{ï}-ne-trans-por-ten
+cli{-}{e}{ë}n-ten-re-ke-nin-gen
+be-roeps-ca-te-go-rie{-}{e}{ë}n
+hy-gi{-}{e}{ë}-ne-maat-re-ge-len
+sa-la-ris-ca-te-go-rie{-}{e}{ë}n
+markt-ge-o-ri{-}{e}{ë}n-teer-de
+le-vens-be{-}{e}{ë}in-di-gen-de
+co-ca{-}{i}{ï}-ne-ver-slaaf-den
+pro-duct-ca-te-go-rie{-}{e}{ë}n
+co{-}{o}{ö}r-di-na-tie-co-mi-tés
+su{-}{i}{ï}-ci-de-pro-ble-ma-tiek
+pa-ti{-}{e}{ë}n-ten-bij-slui-ter
+dif-fe-ren-tie-quo-ti{-}{e}{ë}nt
+pro-bleem-de-fi-ni{-}{e}{ë}-ring
+top-sport-co{-}{o}{ö}r-di-na-tor
+he-ro{-}{i}{ï}-ne-ver-strek-king
+land-bouw-che-mi-ca-li{-}{e}{ë}n
+oog-hand-co{-}{o}{ö}r-di-na-tie
+le-gi-o-nel-la-bac-te-ri{-}{e}{ë}n
+po-li-tiek-fi-nan-ci{-}{e}{ë}-le
+zie-ken-huis-pa-ti{-}{e}{ë}n-ten
+ver-bruiks-co{-}{o}{ö}-pe-ra-tie
+pa-ti{-}{e}{ë}n-ten-ver-e-ni-ging
+ori{-}{e}{ë}n-ta-tie-cur-sus-sen
+oud-par-le-men-ta-ri{-}{e}{ë}rs
+pa-ti{-}{e}{ë}n-ten-in-for-ma-tie
+twee{-}{e}{ë}n-twin-tig-ja-ri-ge
+be-drijfs-be{-}{e}{ë}in-di-ging
+arts-pa-ti{-}{e}{ë}nt-re-la-tie
+cam-pag-ne-co{-}{o}{ö}r-di-na-tor
+co{-}{o}{ö}r-di-na-ten-sys-te-men
+re{-}{i}{ï}n-car-na-tie-the-o-rie
+ener-gie-ef-fi-ci{-}{e}{ë}n-tie
+ge-drags-be{-}{i}{ï}n-vloe-ding
+bor-der-li-ne-pa-ti{-}{e}{ë}n-ten
+drie{-}{e}{ë}n-twin-tig-ja-ri-ge
+Eu-ro-par-le-men-ta-ri{-}{e}{ë}rs
+land-bouw-co{-}{o}{ö}-pe-ra-ties
+school-co{-}{o}{ö}r-di-na-to-ren
+re-gres-sie-the-ra-pie{-}{e}{ë}n
+pro-ces-tech-no-lo-gie{-}{e}{ë}n
+ob-ject-ge-o-ri{-}{e}{ë}n-teer-de
+ma-na-ge-ment-the-o-rie{-}{e}{ë}n
+co{-}{o}{ö}r-di-na-ten-stel-sels
+ci-lin-der-co{-}{o}{ö}r-di-na-ten
+be-stu-rings-the-o-rie{-}{e}{ë}n
+be-drijfs-stra-te-gie{-}{e}{ë}n
+pa-ti{-}{e}{ë}n-ten-po-pu-la-ties
+in-ko-mens-ca-te-go-rie{-}{e}{ë}n
+ge{-}{i}{ï}n-di-vi-du-a-li-seer-de
+ge{-}{i}{ï}n-du-stri-a-li-seer-de
+pro-duc-tie-stra-te-gie{-}{e}{ë}n
+re{-}{i}{ï}n-car-na-tie-the-ra-pie
+net-werk-tech-no-lo-gie{-}{e}{ë}n
+con-ti-nu{-}{i}{ï}-teits-stre-ven
+cli{-}{e}{ë}n-ten-voor-lich-ting
+doel-groep-de-fi-ni{-}{e}{ë}-ring
+on-ge{-}{i}{ï}n-te-res-seerd-heid
+an-nu{-}{i}{ï}-tei-ten-hy-po-theek
+pro-gram-ma-co{-}{o}{ö}r-di-na-tor
+kun-ste-naars-so-ci{-}{e}{ë}-teit
+zie-ken-fonds-pa-ti{-}{e}{ë}n-ten
+ver-bruiks-co{-}{o}{ö}-pe-ra-ties
+stu-den-ten-so-ci{-}{e}{ë}-tei-ten
+ori{-}{e}{ë}n-te-rings-ver-mo-gen
+in-flu-en-za-epi-de-mie{-}{e}{ë}n
+leef-tijds-ca-te-go-rie{-}{e}{ë}n
+drie{-}{e}{ë}n-twin-tig-dui-zend
+bak-ke-rij-in-gre-di{-}{e}{ë}n-ten
+co{-}{o}{ö}r-di-na-tie-com-mis-sie
+ar-chi-tec-tuur-bi{-}{e}{ë}n-na-le
+be-las-ting-co{-}{o}{ö}r-di-na-tie
+Equa-to-ri-aal-Gui-nee{-}{e}{ë}r
+co{-}{o}{ö}r-di-na-to-ren-over-leg
+ge-meen-te-se-cre-ta-rie{-}{e}{ë}n
+dif-fu-sie-co{-}{e}{ë}f-fi-ci{-}{e}{ë}nt
+be-drijfs-con-ti-nu{-}{i}{ï}-teit
+mi-li-tair-in-dus-tri{-}{e}{ë}-le
+pa-ti{-}{e}{ë}n-ten-or-ga-ni-sa-tie
+vrije-markt-eco-no-mie{-}{e}{ë}n
+voe-dings-in-gre-di{-}{e}{ë}n-ten
+pa-ti{-}{e}{ë}nt-vrien-de-lij-ker
+on-der-houds-the-ra-pie{-}{e}{ë}n
+mar-ke-ting-fi-lo-so-fie{-}{e}{ë}n
+fil-ter-co{-}{e}{ë}f-fi-ci{-}{e}{ë}n-ten
+com-bi-na-tie-the-ra-pie{-}{e}{ë}n
+cli{-}{e}{ë}n-ten-be-spre-kin-gen
+brand-won-den-pa-ti{-}{e}{ë}n-ten
+af-stam-mings-the-o-rie{-}{e}{ë}n
+hy-gi{-}{e}{ë}-ne-voor-schrif-ten
+co{-}{o}{ö}r-di-na-tie-pro-ble-men
+cli{-}{e}{ë}n-ten-or-ga-ni-sa-ties
+tu-ber-cu-lo-se-pa-ti{-}{e}{ë}n-ten
+borst-kan-ker-pa-ti{-}{e}{ë}n-ten
+mar-ke-ting-stra-te-gie{-}{e}{ë}n
+rich-tings-co{-}{e}{ë}f-fi-ci{-}{e}{ë}nt
+eco-no-misch-fi-nan-ci{-}{e}{ë}-le
+op-lei-dings-co{-}{o}{ö}r-di-na-tor
+pa-ti{-}{e}{ë}n-ten-voor-lich-ting
+pa-ti{-}{e}{ë}n-ten-de-mon-stra-tie
+op-los-sings-stra-te-gie{-}{e}{ë}n
+in-tel-li-gen-tie-quo-ti{-}{e}{ë}nt
+ge{-}{i}{ï}n-ter-na-ti-o-na-li-seerd
+re{-}{i}{ï}n-car-na-tie-the-ra-peut
+dif-fe-ren-ti-aal-quo-ti{-}{e}{ë}nt
+wrij-vings-co{-}{e}{ë}f-fi-ci{-}{e}{ë}nt
+on-der-zoeks-co{-}{o}{ö}r-di-na-tor
+ge{-}{i}{ï}n-sti-tu-ti-o-na-li-seerd
+co{-}{o}{ö}r-di-na-tie-com-mis-sies
+pa-ti{-}{e}{ë}n-ten-ver-e-ni-gin-gen
+dif-fe-ren-tie-quo-ti{-}{e}{ë}n-ten
+be-leg-gings-stra-te-gie{-}{e}{ë}n
+ver-pleeg-huis-pa-ti{-}{e}{ë}n-ten
+niet-ge{-}{i}{ï}-den-ti-fi-ceer-de
+ge-lei-dings-co{-}{e}{ë}f-fi-ci{-}{e}{ë}nt
+maat-schap-pij-ori{-}{e}{ë}n-ta-tie
+vei-lig-heids-co{-}{o}{ö}r-di-na-tor
+pa-ti{-}{e}{ë}n-ten-de-mon-stra-ties
+im-mo-bi-li{-}{e}{ë}n-maat-schap-pij
+ef-fi-ci{-}{e}{ë}n-tie-ver-be-te-ring
+cor-re-la-tie-co{-}{e}{ë}f-fi-ci{-}{e}{ë}nt
+ont-wik-ke-lings-the-o-rie{-}{e}{ë}n
+dif-fu-sie-co{-}{e}{ë}f-fi-ci{-}{e}{ë}n-ten
+ca-su{-}{i}{ï}s-tiek-be-spre-kin-gen
+ge{-}{i}{ï}n-sti-tu-ti-o-na-li-seer-de
+over-le-vings-stra-te-gie{-}{e}{ë}n
+lan-ge-ter-mijn-stra-te-gie{-}{e}{ë}n
+fi-nan-ci{-}{e}{ë}-le-dien-sten-groep
+uit-zet-tings-co{-}{e}{ë}f-fi-ci{-}{e}{ë}nt
+con-ti-nu{-}{i}{ï}-teits-over-we-ging
+wrij-vings-co{-}{e}{ë}f-fi-ci{-}{e}{ë}n-ten
+rich-tings-co{-}{e}{ë}f-fi-ci{-}{e}{ë}n-ten
+col-le-ga-par-le-men-ta-ri{-}{e}{ë}rs
+on-der-ne-mings-stra-te-gie{-}{e}{ë}n
+cor-re-la-tie-co{-}{e}{ë}f-fi-ci{-}{e}{ë}n-ten
+be-sluit-vor-mings-the-o-rie{-}{e}{ë}n
+be{-}{i}{ï}n-vloe-dings-mo-ge-lijk-heid
+uit-zet-tings-co{-}{e}{ë}f-fi-ci{-}{e}{ë}n-ten
+her-ori{-}{e}{ë}n-te-rings-ge-sprek-ken
+con-ti-nu{-}{i}{ï}-teits-over-we-gin-gen
+com-mu-ni-ca-tie-tech-no-lo-gie{-}{e}{ë}n
+be{-}{i}{ï}n-vloe-dings-mo-ge-lijk-he-den
diff --git a/Master/texmf-dist/tex/context/patterns/lang-nl.rpl b/Master/texmf-dist/tex/context/patterns/lang-nl.rpl
new file mode 100644
index 00000000000..7622711ec92
--- /dev/null
+++ b/Master/texmf-dist/tex/context/patterns/lang-nl.rpl
@@ -0,0 +1,12948 @@
+.aan1
+.aans4
+.aart4
+.aarts3
+.aat1
+.ab1l
+.acht3s
+.ad1s
+.af1
+.air1
+.al3ee
+.aline3a'
+.al3k2
+.alko3v
+.al3om
+.al4st
+.an1d
+.an3gl
+.an1s
+.an3th
+.ar3tr
+.as1c
+.as1l
+.as3tr
+.aus1
+.a-2
+.baan3
+.ba3lo
+.bli2
+.ca4pe
+.co2k
+.co3ro
+.c-2
+.dag3r
+.dag3s
+.da4te.
+.da4tes
+.de4k3l
+.dek3s
+.den4k3l
+.den4k3r
+.de1o
+.de3ra
+.des3tr
+.di3ac
+.di3ad
+.di4aloo
+.di4at
+.die4pi
+.dier3o
+.die3tj
+.di1o
+.di2s
+.doet3
+.do1v
+.du3ro
+.du4wer
+.d-2
+.ede4la
+.ed1w
+.ee2
+.een3e
+.eet1
+.ei1l
+.ei3sp
+.eks2
+.el1d
+.en3th
+.en3tj
+.er3af
+.er4f3l
+.er3in
+.er3on
+.es1
+.eten4d
+.et3sten
+.etui3
+.eu1
+.eus1
+.e-2
+.fra4me.
+.f-2
+.ga4me.
+.gea3v
+.ge3d
+.ge3l4a
+.gelo3v
+.ge3nac
+.ge3n4as
+.ge3n4o
+.ge3ra
+.ge3r4e
+.ge3ro
+.gerst3a
+.ges4k
+.geto3v
+.get4r
+.geë3v
+.g-2
+.haat3
+.he2a
+.he4r3i
+.hier3
+.ho4les
+.huts3t
+.h-2
+.ij4s3l
+.ijs3p
+.ijs3t
+.in1a2
+.in1d4
+.in1e
+.in5g4
+.in3kl
+.in3kr
+.in1s2
+.is1c
+.iso1
+.i-2
+.ka3dr
+.keet3je.
+.ken3s
+.ke3ra
+.ker4k3l
+.ker4k3u
+.ko3pe
+.ko4p5l
+.kore4
+.ko1v
+.laat4j
+.laat3ste
+.la3tr
+.le2b1
+.leer3
+.leg3o
+.le4g3r
+.lei3s4
+.lens3
+.lente3
+.le5r4
+.le2s1
+.le3th
+.li2f
+.lin4k3j
+.lo1v
+.lu1e
+.luid3s4
+.lui3tj
+.maat3
+.ma4k3as
+.me3la
+.me3ra
+.mer4k3l
+.met3ee
+.miet3j
+.mij4n3i
+.mi4ne.
+.mos1
+.mo4st
+.mo3ven
+.mo3ver
+.naat3
+.na1k
+.na1l
+.na1s
+.ne2k1
+.nes3te
+.ne4t3j
+.ne4tr
+.neu4t3j
+.niet3j
+.no3pe
+.no1v
+.nucleï4
+.oce1
+.oe2r1
+.oes1
+.of1
+.oi2
+.ol1f
+.olie3
+.om1
+.on1d
+.on3ee
+.on3et
+.on1i
+.on1k
+.on3oo
+.on1s
+.on4t3ee
+.on4t3e4ren
+.on4t3e4ri
+.on4trad
+.on4tri
+.on4t3rol
+.oor1
+.oot4je.
+.op5l
+.op1r
+.ops2
+.orkes5tree
+.or1t
+.os1
+.ove4re
+.ove4rin
+.pee3tj
+.pe3lo
+.pe3na
+.peri3
+.per4s3te.
+.piet3j
+.pi4naa
+.pla4cem
+.plee3t
+.poort3j
+.po4st
+.po1v
+.pui3tj
+.quo4te.
+.raat4
+.radi3o'
+.rat3j
+.rea4n
+.ree3t
+.regi3o'
+.re3kr
+.re4men
+.re3no
+.reno3v
+.ren3s
+.re4sc
+.ries3
+.rie4t3a
+.riet3j
+.rij3sp
+.ring3s4
+.ri1o
+.roe3tj
+.ro2l1
+.ro4s3t
+.ro1v
+.rug1
+.ruit3j
+.ru2s
+.rus3h
+.sa1v
+.scenari5o'
+.sci1
+.see1
+.se3ra
+.se3r4e
+.ser4ve.
+.ser4ves
+.set1
+.side3
+.si4te
+.sj2
+.sli4c
+.so2k
+.sour4c
+.spoor3
+.st4
+.stel4t3j
+.ste4m
+.sto3v
+.studi3o'
+.taart3j
+.tag1
+.te2a
+.ten3ac
+.te3nan
+.te3no
+.ten3s
+.tent3j
+.ter4p3a
+.ter3s
+.te2s
+.ti4me.
+.ti4med
+.ti2n
+.tin3a4
+.to4lo
+.toot4j
+.to4pl
+.to1v
+.traat4
+.ts2
+.tu4ne.
+.ui1s
+.ur4a
+.vaart5jes
+.va3lo
+.vent3j
+.ver3a
+.ve4rei
+.ve4r3e4r
+.ve4rij
+.ves1
+.vet3j
+.ve4t3r
+.vide3o'
+.vloot4j
+.voy1
+.vul1
+.v-2
+.wal4s3te.
+.wa2v
+.wee4t3
+.we4l3a
+.we4l3in
+.wen4s3t
+.wer4kr
+.wer4pl
+.west3r
+.wi2n
+.win4s
+.wi2r
+.wi2t1
+.xe1
+.x-2
+.zet3j
+.zi2t1
+a2a2
+aad1a
+aad1e
+aad1o2
+aad1r
+aaf1
+aag1
+aags4o
+aai1
+aak1a
+aak1e2
+aak1i
+aak1l
+aak1o
+aak1r
+aak3sp
+aak1u
+aal1a2
+aal1e
+aal1i
+aal1k
+aal1o2
+aal3so
+aal1u
+aam1a
+aam1p
+aan1a
+3aandee
+3aandu
+aan1e2
+aan3g
+3aanges
+aan1i2
+aan1k
+1aann
+aan1o2
+aans4po
+aan1t
+3aanva
+3aanvr
+aap1a
+aap1i
+aap1o2
+aap1r
+aar1a2
+aar4du
+aar1e2
+aar1i
+aar1k
+aar1o2
+aas1e2
+aas1l
+aas1p
+aat1a2
+aat1e
+aat3ha
+aat3ho
+aat1i
+aat1o
+aat1r
+2abaa
+abak4s
+aba2l
+abe4laa
+abe4l3ac
+abe4l3o4
+2abes
+3abolo
+abo1s
+abot4j
+ab1ru
+1abso
+a3cal
+2ace
+a2ce.
+a2cea
+a2cec
+a2cef
+a3cen
+a4cepa
+ace1s
+a4cesp
+a4cest
+a2cew
+a1cha
+a1che
+a4cheg
+a1chi
+ach1l
+a1cho
+a1chr
+4achrone
+4achs
+a1chu
+2acl
+2a1co
+ac4tac
+ac4tav
+actmana4
+ac4ton
+ad1ac
+ad1a2d
+ad1ak
+ada2r1
+adas1
+ad1au
+2add
+ade3roo
+ade3st
+adi1a
+adoe4l3
+1adop
+ad1ov
+a1dri
+ad3rui
+ad3spi
+ad3sta
+ad3ste
+1advi
+ad1w
+aeger3
+ae1k2
+a1el
+ae1n
+a1ep
+ae1r
+aes1t
+ae1t
+af2as
+af2at
+af1d
+afd1s
+2afe
+a2f1ei
+afe4l3a
+1affa
+1afgo
+1afha
+2afi
+afie3tj
+af1l
+af4les
+2afo
+af1oe
+a1fol
+af2or
+af3org
+af1re
+af1ru
+af1s
+4afs.
+af2sh
+afs2m
+afs2o
+afs2t
+af1ta
+af1ui
+1afva
+2afy
+2ag.
+ag1a2d
+a2ga2r1
+ag1dr
+a3ge.
+agea2
+4a3gen.
+age3ra
+ager4s3
+ages2
+a4g3ind
+a4g3ins
+agi3ot
+2agl
+ag1le
+ag1li
+a2gn
+ag1of
+4agonal
+a1goo
+ag3ope
+ag3ord
+ago1v
+ag3rap
+ag3red
+ag3reg
+ag3ren
+2agro
+ag1ru
+ag2sh
+ag3slo
+ag3slu
+agsto4
+agu1a
+a2g1ui
+a2g1u2r
+a2g1uu
+a1ha
+a1he
+a1hi
+ah1l
+a1ho
+a1hu
+a1hy2
+a1hé
+ai1a2
+aids1
+ai1e
+aier3s
+ai1k
+ail1s2
+aime2
+ain3st
+ai1o
+ai1p
+a2ir
+ai1so2
+ais2t
+ai1tj
+ait1s
+ai2-c
+a1j
+aje2
+ak1ac
+ak1af
+ak1a2g
+ak1al
+ak1ap
+ak3arb
+ak1av
+a2k1e2d
+a4keen
+a2kef
+a2keg
+a2keh
+ak3emi
+4akene
+ake1s
+ake4ti
+ak3etu
+a2kev
+a2kew
+a2k1e2z
+ak1id
+aki1s2
+ak1j
+ak3laa
+ak3lag
+ak3lee
+ak3ler
+ak3let
+ak1li
+ak1lu
+ak1n
+ak2ni
+a2k1on
+a2k1op
+a2k1or
+ak1ru
+ak1sl
+ak3spe
+ak3sti
+ak3sto
+ak3str
+ak1ta
+akt1h
+ak1to
+aku2
+ak1ui
+ak1ur
+ak1w
+a1la.
+a1lab
+2alad
+al3adr
+a1lag
+a1lal
+a1lam
+al3ana
+a3lant
+a3lari
+al3art
+a1laz
+a1la'
+al1da
+al1do
+aldo3v
+al1dr
+a1le
+ale2c
+4alectst
+a2l1e2l
+ale2n
+a4l3ento
+ale3og
+ale3olo
+ale3ro
+a4lesm
+a4lesp
+ale4tj
+alf1l
+al3fon
+al4fur
+al1go
+a1li
+a2lik
+al3int
+al4k3ei
+al1kl
+al4k3laa
+al1kr
+alk3st
+3allia
+a1lo.
+a1log
+4alogen
+4aloger
+al3omv
+4aloogr
+4aloogt
+4aloogv
+al3oor
+al3opl
+al1ou
+al1ov
+al1ox
+al1p
+al3s4ag
+al3s4cr
+al3ski
+als3li
+als3tou
+al2tw
+al3uit
+alu2r
+a1lus1
+4alysec
+a1lè
+2am.
+2amaa
+am1af
+2amag
+am3art
+a2maz
+1ambt
+amen3s
+amfor3
+amfo4re
+am3int
+am3oli
+a2m1op
+amo2t1
+a2m1ov
+am4pac
+1ampè
+2ams
+am4sle
+ams3oo
+am3spe
+am4s3te.
+am3sti
+a1naa
+an1ae
+an3alf
+an3alg
+3analy
+ana4mer
+ana1n
+an3arc
+ana3th
+an1av
+an1ch
+4anda
+and3ed.
+and3opp
+an3dor
+and3roo
+and4s3te.
+ane1a
+aneet3
+1anem
+anen3i
+an3est
+ane3us
+an4gal
+an4g3an
+an4gins
+ang3le
+ang3ru
+ang3spi
+ang3ste
+a1ni
+3a4nima
+an3i4on
+ani3sf
+a4n3isl
+ani3t
+anka4n
+an4k3as
+an4k3ins
+ank1j
+ank3ro
+ank1s
+4ank1t
+an4kui
+a1nol
+a1nom
+ano1s2
+ano1t
+anoï2
+anper4s3t
+an4sce
+an4scr
+ans3eer
+anso2
+ans3or
+ans3po
+an4s3te.
+an4t3ac
+anten3
+ant5w
+a1nu
+an1ui
+a2n1u2r
+anu2s
+a2n1uu
+a2ny1
+a1oe
+a1of
+a1o2g
+a1oh
+a1ok
+a1ol
+a1on
+a1oo
+a1op
+a1or
+aor1t
+a1os1
+a1ot
+a1ou
+a1ov
+a1oï
+2ap.
+ap3act
+a1pad
+a1pal
+a4p3as.
+a1pat
+a1pe
+a2pef
+apes1
+a2pet
+ap3e4te
+a1pi
+apij4t3j
+ap3ijz
+ap1j
+2apl
+ap4lan
+ap1le
+ap1li
+ap3lop
+a1p2lu
+ap1oo
+apos3t
+apo4sta
+1apot
+ap1ov
+1appa
+ap3rac
+ap3reg
+a3pres
+apsce4
+ap3sch
+ap3sho
+aps1l
+ap3ster
+ap3s4ti
+ap3sto
+ap3str
+a1psy
+apt1s
+a1pu
+a1q
+a1ra
+a4r3app
+ara3st
+arat3j
+ara3tr
+ard3ac
+ar4dam
+ard3om
+ar3doo
+ard3op
+ard3ov
+ar4d3ran
+ard3re
+ard3ri
+ard1w
+a1re
+a2rea
+a4redr
+aren3o
+aren3t
+a4reri
+a2rew
+ar1gh
+arg1l
+a1ri
+arij3s
+ar3ins
+ark3aan
+ark3ac
+arken4s
+ar1kl
+ar1kn
+arkte4
+ark4ter
+ark4tev
+arm3ins
+arm3ond
+ar2no
+ar3oge
+a1rok
+ar3oli
+ar3oog
+ar1op
+a1rot
+ar1ov
+arp1s
+ar4s3a4t
+ar4sco
+ar4scr
+ars3ho
+ar2s1l
+ars3pa
+ar3spo
+ars3taa
+ars3tal
+ar4s3tek
+ar3sti
+ar2su
+art3ak
+2arth
+3artik
+ar3tof
+art3o4ge
+ar4t3onb
+art3ond
+art3ong
+art3oog
+art3oor
+art3ov
+ar3tra
+art3ru
+ar1ui
+arwe3s
+a1ry
+ary1o
+a1ré
+as1aa
+a1sab
+as1ad
+as1ak
+as1ap
+asa2r
+as3ari
+as1av
+as1ef
+a2seg
+ase1s
+ase1t
+as1ho
+a1si
+a2s1ij
+asi5ologische
+as1je
+as4jen
+a4sjes
+a1sji
+as3laag
+as3lam
+as3lan
+as1le
+as1na
+as1ob
+a1soe
+aso2l
+as1pa
+as4per.
+as1pi
+as4pio
+as1pl
+as3pot
+a1spu
+1assu
+as3ta.
+ast3ac
+as3tag
+as3tan
+a3stat
+as1te
+a3s4tem
+as4terr
+as3toe
+3as3tol
+ast3om
+ast3op
+ast3red
+ast3rem
+ast3ren
+a3stru
+as3tui
+a1sy
+ataart3j
+a1tab
+at3ach
+at3ade
+at3af.
+a1tal
+at3ank
+a1tat
+2atb
+a1te
+2atec
+a2tef
+2atek
+a2tem
+ate4nee
+ate4ner.
+ate3no
+ate3ral
+ater3o
+ater3st
+a2tew
+2atg
+at3haa
+4athee
+a1thi
+at3hou
+a1thy
+atie3l
+atie3s4
+2atij
+2a2tj
+a2tl
+2atn
+a1to
+2aton
+at3oog
+ato1s2
+at1ov
+at3rac
+at1re
+at3rib
+at1ru
+ats1a
+at1sc
+atsi2
+ats3id
+ats3le
+ats3lo
+at3soo
+at3span
+ats3par
+at4spe
+ats3pr
+ats3tal
+at3sten
+ats3top
+ats3tre
+3attes3
+at2t3l
+at2t1u2
+a1tu
+at3uil
+a2tw
+a1ty
+2au.
+au1a2
+au1ch
+aud2j
+au2d1r
+au1e
+1aug
+au1n
+aun1t
+aup2
+au1ph
+au1r4
+aure3u
+au1sa
+au1so
+2aut.
+au1ta
+au1th
+au1tj
+1auto
+auts1
+2auwt
+2auz
+ava1s
+a1ve
+ave4n3i
+aven3t
+aver3a
+ave3r4u
+1avon
+2a1vy
+a1wa
+a1we
+a1wi
+a1wo
+a1wu
+axi1s2
+a1yeu
+a1yo
+ay1s2
+a1ä
+a1ë
+a1ï
+aï4neh
+aï4neva
+aïs1o2
+a1ç
+a1-
+a-2c
+1ba
+baad1
+baar3t
+ba2be
+bad1a
+b1adr
+bad1s
+2b1af
+ba1g2h
+ba2k1l
+ba2k1o2
+bak4s3te.
+ba1la
+ba4lar
+bale2
+ba4l3ev
+ba4lin
+bal1s
+ba2me
+ba1n2a
+ban4k3a
+ban4k3o
+bank3w
+ba1o
+ba1ro
+ba1ru
+ba1s2a
+ba4sar
+ba4sed
+ba4sel
+ba4sin
+bas1l
+bas1t
+ba3taa
+ba1th
+2b1b2
+bbe4l3ac
+bbe4l3ag
+bbe4l3ee
+bbe4l3o
+bbe2n
+bbs1
+b2byt
+2bc
+b1co
+2b1d2
+1be
+be1a2d
+be1am
+be1an
+be1ar
+be1a2s
+be4at.
+be1ch
+be4dov
+be3dwe
+be3dwi
+be3dwo
+been1
+beet1
+be1fa
+be1g
+bei1s2
+be1ka
+be4kaf
+be1kl
+be1k2n
+be1kr
+be1kw
+be1la
+bel3aan
+bel1d
+be4l3ec
+be4l3int
+bel1k
+be1lo
+belo3v
+bel3sl
+bel3sp
+belt2
+be1na
+be1ne
+ben3e4t
+be1ni
+be1n4o
+be1nu
+be1o
+beo2l
+be1ra
+be4rac
+be4rav
+bere3s4
+ber4g3af
+ber4get
+berg3l
+be1r4o
+bero3v
+ber3sh
+ber3sp
+ber4sto
+be1ru
+be1ry
+be1s
+be2sh
+be4sje
+be2sk
+bes2m
+bes4n
+bes4ter
+bes4tie
+bes4tij
+be1t
+bet1s
+bet4wi
+beur4s3t
+2b1f
+2b1g
+2b1h
+1bi
+bi1a
+bi1do
+bid1s
+bi2du
+bie4dr
+bie4li
+bi1en
+biet3j
+bi1eu
+bigu1
+bij1d2
+bij1f
+bij1k
+bij1p
+bij1s2
+bij4s3ter
+bij3tr
+bi4ke.
+bi4kes
+bi1la
+bi1lo
+bil1s
+bin1g
+bi1no
+bin3so
+bint3j
+bi2od
+bi4otie
+bi1ov
+bi1o'
+bi1sa
+bit3je.
+bi1to
+bi1tr
+bits3p
+2b1j
+2b1k
+1bl2
+bla4det
+b1lap
+b1led
+blee4m
+b1lei
+ble3sp
+ble2t1
+b1lid
+blijs4
+blij3ste
+blik3o
+blo2k
+blu2s
+b2ly
+2b1m
+2b1n
+1bo
+bo4d3ec
+bod1o
+boe4g3a
+boe4ko
+boek3s
+boe1s2
+bo1ka
+bokje3
+bol1a
+bol1o
+bo4lop
+bo2m1a2
+bo2m1o
+bo3na
+bonda4
+bon3do
+bonds3
+5bone
+bont3j
+boo2n
+boor3t
+boots3t
+bo1pr
+bo1ra
+bor4sto
+bor4st3r
+bos1a2
+bo2s1p
+bo1ta
+bo4tac
+bo4t3on
+bot1r
+bot4spr
+bots3te.
+bouw3s
+bo1v
+bove2
+2b1p
+1br2
+braad3
+bra1d
+bra1f
+bra3str
+b1rec
+b1reg
+bregi3
+brei3s4
+bri2l1
+bri1o
+bro2n
+bron3o
+bru2l1
+2b1s
+bs2c
+bse2n
+bsi2t
+b2sk
+b2s1la
+bs2t
+b4stij
+2bt
+b1ta
+b1te1
+b1th
+b1to
+b1tr
+bt2s1
+b1ty
+1bu
+bu1e
+buk3s4k
+bu1na
+bu1ra
+b1urb
+bu3ri
+bur1s
+bus1a2
+bus1c
+bu2su
+bu1ta
+bu2to
+buts3t
+buur3s
+buur4tj
+2b1v2
+b1w
+1by
+by1e
+by2in
+by1l
+2b1z
+1bé
+bé2s
+2b'
+2b1-
+b-2k
+1ca
+caat3j
+ca4che.
+ca1do
+ca1dr
+cae1
+ca1f
+ca1g
+ca1k
+ca4ke.
+ca4keb
+ca4kem
+ca4kes
+ca1la
+cal2l1
+ca1lo
+came3ra
+ca3nad
+ca3nat
+ca1ne
+ca1no
+can3th
+ca1pa
+ca4pe.
+ca1po
+cap2r
+ca3pri
+ca1ro
+car1t
+ca1sa
+ca1sp
+cas3tr
+ca1su
+ca1t
+caë2
+c1b
+2c1c
+cca1
+c1do1
+1ce
+ce1a
+4ceact
+2ceba
+4cebel
+ce1c
+cee2r
+ce1f
+2cefe
+2cefi
+ce1g
+2ceha
+2cej
+ce1k
+cela2
+cel1d
+celes3
+cel1k
+2cema
+ce1n2a
+2ce1ne
+ce4nes
+2ce1ni
+3cenia
+ce1no
+cen1s
+cent3j
+ce1o
+ce1ra
+cer2n
+ce1ro
+cer4t3r
+3ces.
+ce3s4aa
+ce3sar
+ce1s2h
+4cesinn
+ces3pa
+ce3s4ti
+ce1ta
+cet1j
+ceto2
+cet3og
+cet3oo
+ce1ty
+ce1um
+2ce-e
+c1f
+c1g
+c2h
+2ch.
+2chaf
+cha1g
+1chao
+3chart
+1chau
+2chc
+che1a
+1chef
+3chemi
+1cheq
+che3ru
+che3us
+4che-p
+2chg
+ch3ins
+2chla
+2chn
+2chp
+2chre
+3chromo
+2chs
+2cht
+2chw
+ch2wa
+1chy
+1ché
+2ch-
+1ci
+ci1am
+ci1c
+ci1d
+cie1g
+cie1k
+cie3ra
+cier4s
+cie3tj
+ci1eu
+2c1ind
+cine3a
+ci1no
+ci1p
+ci1t
+ci2tj
+2c1j
+ck1ac
+c2k1e2d
+c2k1ef
+cket3u
+c2k1id
+ck1j
+c1k2le
+ck1li
+ck1n
+c2k1o
+ck1r
+ck1s
+cks2c
+cksce4
+cks2l
+ck1t
+ck1u
+c1ky
+1cl
+cle1r
+cle1u
+cli2p
+clo4se.
+c2ly
+c1m
+c1n
+3co.
+1coa
+co1ad
+co1al
+1cob
+co1ch
+coco3a
+1co1d
+co1fa
+co1fo
+1cog
+1co1k
+1col
+co1la
+1com
+co4mac
+comana4g
+co4min
+com1s
+1con
+co1na
+con1d
+con1g
+con1s
+3coopde
+3coopga
+3coopro
+co1p4
+1copa
+co1ra
+cor4dr
+1corp
+1corr
+cor3tj
+co1ru
+1cos
+co1sp
+co1s2t
+1co1th
+cot2j
+co1tr
+1cott
+1cou
+2cout
+1co1v
+1coë
+1coö
+1co'
+1co-
+c1p
+c1q
+1c2r
+cre1o
+cro1p
+crus1
+c1s
+2c1t
+ctaan3
+ct3act
+c2t1ad
+ct3afd
+c2t1am
+c4t3atl
+cte2n1
+ctene4
+c2t1h
+ctie3k
+ctie3s4
+c2t1j
+c2tl
+c4t3ond
+c4tont
+ct3rap
+c2t1re
+ct1s2f
+ct1sl
+ct1sp
+ct3ste
+ct3sto
+ctu4re.
+c2tv
+c2tw
+cty1
+1cu
+cu1d
+cu1ee
+cu1er
+cui2
+cuit1
+cuite4
+cu1k
+cu1lo
+cu1lu
+cu2mo
+cu1na
+cu1o
+cu1ra
+cu1ro
+cur1s
+cus1t
+cu1ta
+cu1é
+c1w
+1cy
+cy1a
+cy1o
+c1z
+1cé
+2c'
+2c1-
+c-2s
+3da.
+daal1
+daan1
+d3aank
+4d3aanw
+d1aap
+d4aat
+1dabe
+1dabi
+d1a2bo
+d1acc
+1daco
+1dad.
+d3adel
+d1adm
+d1adr
+2d1adv
+d1af
+1dag
+da2g1a2
+da4g3ed
+dag3env
+dag1l
+dag3on
+1dai
+2dais
+1dak.
+d1akk
+dak1l
+dak1r
+dak1s
+1dal
+4d3alar
+2d1alc
+2d1alk
+da1lo
+2d1alt
+dal1u
+1dam
+2d1amb
+d2ame
+1dan
+dan3as
+da1no
+dan4si
+dans3p
+dan4s3t
+4d3antw
+1dao
+da2pe
+da1po
+d1app
+1da1pr
+1dapu
+da2r1a
+1dari
+dar2k1
+dar4mon
+da1ro
+dar1s
+dar4tj
+da1sa
+daso2
+da3stu
+1da1t
+data1
+da4tel
+dat1j
+2d1atl
+2d1atm
+da2tr
+dat1s
+2d1att
+1daue
+2d1aut
+1dauw
+da1v
+3davol
+1daï
+1da'
+1da-
+2d1b2
+dbi2k
+dbi2t
+dbou4w3i
+d1c
+dco2r
+2d1d2
+ddag3s4
+ddele4
+dde4lee
+dde4l3ev
+ddel3s
+dde2n
+dden3s
+ddera4
+dder3al
+dde4ree
+dder3s
+ddis2
+1de
+de1an
+de1ar
+de1ch
+de4dit
+dee2g1
+2d1eek
+dee2l
+deel3i
+d1een
+dee2p1
+dee2r
+deer3i
+deers4
+dee1t
+de1fa
+2d1eff
+de1fl
+de1g
+2d1eg.
+deges4
+2d1ei.
+2d1eig
+2d1eis
+de1ka
+2deki
+de1kr
+de1la
+de4l3ac
+del3da
+del3do
+del3dr
+del3eek
+del3eeu
+4d3e4lek
+4d3e4lem
+dele4n
+del1k
+de3lop
+del3or
+de3lot
+del3ov
+del4s3e
+del4s3i
+5delt
+4d3e4mai
+2demh
+4demig.
+4demigh
+dem3ond
+dem1s
+de3naa
+den3e4p
+den3e4v
+den4gra
+4d3engt
+de1ni
+denmana4
+den3ov
+den3sh
+den3sl
+den3sm
+den3sn
+den3so
+den4su
+den3tj
+deo4li
+de1pi
+de3rab
+der3af
+der3a4g
+de3rak
+de3ram
+de3ras
+der3eed
+der3ei.
+der3ein
+de4r3eis
+de4r3em
+de3ren
+de4ret
+4d3erfg
+der3fl
+de4r3id
+de4r3im
+der1k
+der3of
+de3rog
+de3rol
+der3on
+der4s3at
+4d3erts
+dert4w
+der1u
+derve4
+des3ak
+de4scr
+de3sla
+de3slo
+de3sol
+des3pa
+des3po
+de3sta
+de4s3tak
+des3tek
+de3s4tic
+des3top
+de1t
+4d3e4tap
+de4ter.
+de4ters
+det2w
+deu2c
+deur3o
+de3us.
+dever3
+4dexam
+dex1i2
+deï2s
+2de-o
+d1f
+dfiet3
+2d1g
+dgas1
+d2ge.
+dge3la
+d3ge1n
+dgeper4
+dgepers3
+d3ger4
+dges2
+dge4t3o
+d1h
+dhe4r3i
+1d2hi.
+1di
+dia1k
+dia1p
+dia3sc
+di4atr
+die1l
+die3sp
+di3esr
+die3st
+die4t3r
+di1eu
+di4gam
+dige4s
+dig1l
+dij3ka
+di2k1o
+dik1w
+2d1in1d
+2d1inf
+4d3ingel
+4d3ingeni
+2d1inj
+4d3inko
+2d1inr
+4d3inst
+2d1int
+2d1inv
+2d1inw
+2d1inz
+di4odi
+di4one
+di4oni
+dio1v
+di1po
+dip1s
+2d1irr
+dis3ag
+dis4k3r
+dis1p
+di1th
+dit1j
+di1to
+d1j
+1d2jah
+1d2ji
+d1k2
+d1l
+dli2n
+2d1m
+d1n
+dni1s
+1do.
+1do1a
+d1obs
+1doc
+1dod
+do1da
+1doe
+2d1oef
+doe4l3a
+doe4lu
+d1oev
+1dog
+1doi
+1dok
+do1la
+do5lin
+do4lië
+dolk3s
+1d2om.
+do2m1o
+domo4r
+d1omr
+1don.
+do1na
+1done
+1doni
+1donn
+don4t3e4
+doog1
+door3d
+3doori
+door4n3ac
+door3t
+do1pa
+d1opb
+d1opd
+do4pes
+2d1opg
+1dopj
+d1o2pl
+2d1opn
+1dopo
+d1op1r
+d1ops
+2d1opv
+d1opz
+do3rad
+do3rat
+1dore
+2d1org
+do4rië
+d1ork
+1dorp
+dor4s3te.
+1dos
+do1sp
+dost2
+dos3tj
+do3str
+1dot
+do1ta
+do1th
+do1tr
+1dou
+1dovi
+1dovl
+1dovo
+1dow
+1dox
+1doz
+1do'
+1do-
+d1p
+d1q
+1dra
+d3raam
+d3raap
+d3race
+d3rad.
+d3rada
+4d3rand
+2d1rec
+d1red
+4d3reek
+d1rek
+d1rel
+d3rem.
+4d3rend
+2d1rep
+1drer
+4drese
+d3resu
+1dria
+1drie
+drie3t
+1d4rif
+1drig
+d3rijd
+d3rijk
+1dril
+1drin
+1dris
+2d1rit
+1driv
+1drië
+d3roer
+1drog
+2d1rok
+d3roma
+d3rond
+d3rood
+3droog
+d3rook
+dro3pn
+d1ro1v
+d2roï
+d1rub
+d1ruc
+d3ruim
+1dru2k
+2d1rus
+2ds
+ds1aa
+ds1a2b
+ds1ad
+ds1a2g
+ds1ak
+ds3ang
+ds1ap
+ds1ar
+ds1as1
+ds1au
+dscenari3
+d1sch
+d2scl
+d2sco
+d4scre
+d4s3e4co
+d2s1ee
+d2s1ef
+ds3eis
+dse4l3a
+d2s1ep
+ds3eth
+ds1h
+ds1id
+dsie1
+dsi4g3a
+ds1in
+ds1is
+ds1je
+d3slaa
+d3slac
+d3slak
+ds3lie
+d3slin
+d3sloo
+ds3lop
+ds1na
+dsnes3
+ds3neu
+d1snu
+dso2
+ds1ob
+d1soe
+ds1of
+ds1og
+ds1on
+ds3ord
+ds3ori
+ds1ou
+ds3pac
+d3span
+ds3par
+d3spec
+d3spel
+ds1pl
+d3spoe
+ds3pook.
+ds3pot
+dsregi3o
+dss2
+ds3taak
+d4s3tab
+ds3tak
+d3stam
+d3stap
+d3stat
+d3stav
+d4stec
+d3stee
+ds3tek
+d3stel
+d3sten
+d3ster.
+d3sters
+ds3tes
+ds1th
+d3s4tic
+d3s4til
+d3stoel
+dsto4f
+d3ston
+d3stoo
+d3stop
+d3stot
+ds3tram
+d3stree
+d3stroo
+d3stru
+d1stu
+d4stui
+d1sur
+ds1uu
+d2sw
+d1sy
+2d1t2
+dtaart3
+dtes3t
+dtu2
+1du
+du1a
+2duca
+du4ce.
+du1ee
+du1en
+du1er
+du1et
+2d1uil
+d3uitd
+d3uitg
+4d3uitk
+d3uitr
+d3uitv
+du1ka
+du1lu
+dum4p3a
+du2mu
+dun1i
+du1ra
+dur2f
+2d1uro
+dus1
+dut1j
+2duud
+du4wee
+d1v
+dvee3s
+dvies3
+dwaal3
+d3waar
+d1wac
+d1wap
+d1was
+dwee4p3
+d1weg
+1d2wei
+d1wek
+d1wer
+d1wes
+d1wet
+d1wez
+d1wil
+d1wor
+d1wr
+1dy
+dy1n
+dy3sto
+2d1z
+1dä
+1dé
+1dè
+2d1-
+2ea
+e3aa
+eaan1
+e1ab
+e1ac
+ea2ca
+ea2ch
+eac3t
+ea1da
+ea4dem
+e4ades
+e1adm
+e1a1do
+ead1s2
+e1adv
+e1af
+e1ag
+ea2ga
+ea1g2l
+ea2gu
+e1ai
+e1akk
+ea2k1o2
+ea1la
+e1alf
+e1ali
+ealië4
+ea1lo
+eal1s2
+ea4men
+e4amer
+eam1s
+ea2mu
+ea3nat
+e1anc
+e1and
+ea1no
+e1ant
+e3ants.
+e1ap
+ea1pr
+ea1ro
+e1as.
+ea1sc
+ea4sed
+ea4set
+e1ask
+e1ass
+ea2st
+e3ast.
+e3asti
+ea3str
+e1at
+e2atm
+ea1tr
+e2at1s
+eau3s4t
+e1av
+e1b
+eba4le
+eb1ap
+1ebd
+ebe4t3j
+ebit4s
+ebots3
+eca2k
+ecas1
+e2ce.
+e1cha
+e1che
+e1chi
+e1cho
+echore3
+e1chu
+ec1le
+e1co
+eco4m3a
+e4cono
+eco1t
+1ecz
+e1da
+e2daf
+e2d1as
+ede3au
+ede3nac
+eden3in
+ede1o
+eder3sl
+eder3sp
+edeso4
+ed4gef
+edia3g4
+edia3s4
+e4d3ijz
+ed3ins
+edi1o
+e1do
+edoe3t
+ed3ope
+edor4s3
+ed3ove
+e1dr
+ed3rod
+ed3rol
+ed1s2c
+ed1sp
+ed1st
+ed3uit
+e3dwan
+e2e
+ee1a2
+eef3ac
+eef1l
+eef1r
+ee4gap
+eeg3lo
+ee1i
+eek3af
+eek3ak
+ee3kap
+ee4k3en
+eek3lo
+eek1n
+eek3ren
+ee3kri
+eek3ro
+ee4k3ru
+eek3sp
+eek3st
+eek3we
+eel3aa
+eel3ac
+ee3lad
+ee4l3a4m
+eel3ap
+ee3laz
+eel3do
+eel1k
+ee3lob
+eel3o4g
+ee3lot
+eel3scr
+eelu2
+ee4l3ur
+ee4l3uu
+ee4mop
+een3ac
+een3ad
+een3a4g
+een3a4r
+een5d4u
+eene4d
+een3ez
+een3ie
+1eenj
+een1k
+1eenn
+een1o2
+een3sh
+een3sla
+een3sn
+een3so
+een3sp
+een1t
+ee1o2
+ee4p3an
+ee4pas
+eepo2
+ee4pog
+ee4p3oo
+ee4pre
+ee4p3ru
+eera2
+eer3aa
+eer3ak
+eer3al
+ee3ram
+ee4r3eer
+eer3em
+eer1f
+eer1g
+eer1k
+eer3of
+eer3on
+eer3oom
+ee3rot
+eer4so
+eer3str
+eer4su
+ees1a
+eese4t
+ee1sj
+ee3sle
+ees3li
+ee3sni
+ee3soo
+ees3te
+ee2s1u2
+eet1h
+eet3o4g
+ee3ton
+eet3oo
+eeto4r
+ee4t3ree
+eet3sn
+eet3sp
+eet3st
+ef3aan
+ef1ad
+e1far
+e1fau
+ef1a2z
+ef1da
+ef1do
+ef1dr
+efiet3j
+e2f1ij
+ef3ins
+efis3
+ef3loo
+e1fo
+e2f1og
+e4font
+efron4
+efrons3
+ef3s4fe
+ef1sl
+ef1s2m
+ef1sp
+efs2t
+ef3sta
+ef3ste
+ef3sti
+ef3sto
+ef1th
+ef1tu
+2ega
+ega2m
+eg1da
+eg1dr
+e2g1e2c
+eg3eig
+ege4l3ei.
+ege4l3ov
+egen3ac
+ege4net
+egen3s
+eger3of
+eger3on
+eg3ijz
+eg1li
+e1goo
+egoog3
+eg1op
+eg3oud
+eg1ov
+1ego'
+e1gr
+eg3red
+e4grou
+eg1s
+egs2a
+egs2o
+egs2p
+egs2t
+e2g1u2r
+eguts3
+e2g1uu
+e1h
+ehe4r3i
+ehoorder5ess
+e3hu
+ehuts3
+ei1a
+ei3de
+ei1do
+eid4sc
+eid3ste.
+ei1e
+eier3s
+ei1fa
+ei1gl
+e1ij
+ei1kl
+ei1kr
+eik1s
+eik1w
+ei1la
+ei4l3ant
+4eil1d
+eil1o2
+e2in
+ei4n3aar
+ei4n3ab
+ein4ac
+eind3oo
+ein4d3r
+eind3s
+ei4n3e4d
+ein1g
+ein1k
+ein1t
+ei1o
+ei1p
+eis1a2
+3eisar
+ei3sch
+eishe4
+ei3soo
+ei3s4tel
+ei3s4tr
+eis1u2
+ei1tj
+eits3p
+eit3sten
+2eiz
+e1j2
+2ek
+ek3aan
+e3kaar
+ekaats3
+ek3af.
+ek1a2g
+ek3al.
+ek3alt
+ek3arb
+ek2ee
+e2k1ei
+ekes3tr
+eke3ta
+e4k3e4ter
+ekets3
+e2k1e2z
+e4k3ins
+ek1j
+e3klee
+e1kni
+e2k1ob
+ek3oli
+ek3opl
+ek3opz
+ekor4s3
+ek3os.
+ekots3
+e3kran
+e3kred
+ek3rok
+e1kru
+eks3li
+ek3som
+eks3pa
+eks3pl
+eks3poo
+eks3tak
+ek4sted
+ek4sterr
+eks3tra
+ek1t
+ekt1s
+eku2
+ek3uit
+ek3ure
+ek1uu
+e1la.
+e1laa
+e1lab
+e4l3act
+e3lade
+el3adj
+el3adm
+el3adv
+e2l1af
+e1lag
+e1lai
+el1al
+e1lam
+e1lan
+e4l3ank
+e3lapt
+el3arb
+el3arc
+e3lare
+e3lari
+e4l3arm
+e4l3arr
+el3art
+ela2s
+el3asi
+el3asp
+e1lat
+ela3tr
+el3aut
+e1lax
+el3azi
+e1la'
+eld3ov
+e1le
+el3eff
+el3eier
+el3eig
+el3eis
+el3elp
+el3emp
+e3len
+ele5r4a
+e4l3e4ta
+ele3t4h
+e4l3etu
+el1fl
+elf3on
+elf1s
+el1gl
+el1go
+e1li
+elijs3
+eli3kw
+el3imp
+e4l3ind
+eli4nes.
+e4l3ins
+1elix
+el4kee
+elk1s
+e1lo.
+e1loc
+e1lod
+e3loep
+el3oes
+e1lok
+el1ol
+el3oms
+el3omv
+el3ond
+e3lone
+e3lonk
+el3ont
+e1loo
+el3opg
+el3oph
+el3opl
+el3ops
+el3opt
+el3opv
+el3ora
+elo3th
+e1lou
+e1lo1y
+el1pa
+el1pi
+el1po
+el4s3em
+el3slu
+el3sno
+el3s4ti
+elt1s
+e1lu
+el3uit
+e1lé
+emaat3
+em3act
+em3afl
+emana4gem
+e4m3as.
+emats3
+2eme
+emen3sl
+emie3s
+em3ins
+e4m3oli
+em3opl
+em3org
+em1pj
+em1sa
+em1so
+em1sp
+e3naai
+e3naak
+e4naan
+en3aap
+en1ab
+ena2c
+e3nacc
+e2naf
+en3akk
+en3akt
+en3al.
+en3alb
+en3als
+en3amb
+en3ana
+en1ap
+ena4pe
+e3nari
+en3arr
+en3ars
+en1a2s
+enas3p
+ena4tel
+en3att
+en3aut
+e2n1av
+en4cep
+end3ach
+enda4m
+en1do
+en1dr
+end3sp
+en4dur
+en4d3uu
+e1neb
+enebe4
+ene2c
+en3ech
+en3eco
+e4neen
+enee3t
+en3ei.
+en3eis
+en3ela
+en3elf
+en3ema
+ene2n
+enen3t
+en3e4po
+3e4nerg
+enes3te
+en3e4ter
+e1neu
+en3eva
+enge3ra
+en1gl
+en1go
+en1gr
+engs2
+eng3sn
+eng3ste
+3enhalf
+3enhalv
+e3nijd
+2enin
+e4n3in.
+e1nit
+e1niv
+en1kj
+en1kl
+en1kn
+en1kr
+en3och
+e1noe
+en3off
+e1nok
+en3oli
+en3oor
+en1op
+en3ord
+en3ork
+en1ou
+3ensem
+ens4fer
+en3sjo
+ens3on
+en3spi
+en3spor
+ens3pot
+enst3ijv
+en4stin
+ens3u4ren
+en4t3erv
+ent3ha
+ent3ond
+en4t3ov
+ent3rol
+ent4se
+1entè
+en1ui
+en3ure
+e1nut
+en1uu
+3envelo
+eo1a
+e1oct
+e1ocu
+eo1d
+eodo1
+e1oe
+eo1fa
+e1off
+eo1fo
+eo1g
+eoga2
+eo4gen.
+eois3
+eo1k
+eo1l
+e3olette
+eo4lied.
+eo4liede.
+e3ologieë
+e5ologiseert
+eo2ly
+e1omb
+e1on
+eo1na
+e2ono
+eon3sp
+e1oo
+eo1pa
+eo3penb
+eop4la
+e1opn
+e2o1po
+eo3pre
+e1ops
+e1or
+eo1ra
+eo1ro
+eo1s
+eos2t
+eo3te
+eo1th
+e1ou
+e1ov
+e1ox
+e1pa
+ep3asp
+e1pe
+epe3lot
+eper4s3te.
+epes1
+1epid
+e1pie
+e1pij
+ep3ijs
+e1pik
+e1pil
+ep3ingr
+ep3ins
+e1pit
+ep1j
+e1pl
+ep3led
+e4p3lod
+e1po
+e4p3o4ge
+epon4s3
+epoort3j
+ep3ork
+e1pr
+ep3reg
+ep4s3ee
+ep4set
+eps1l
+eps1n
+epso2
+eps3or
+eps1p
+eps3tal
+eps3to
+ep4tak
+ep2tj
+ep4t3ra
+e1pu
+ep3uit
+e1q
+e4quip
+e1ra.
+e3raad
+e3raam
+er3aan
+e3raat
+er1ac
+e3rac.
+e4rach
+e4ract
+e3rad.
+er3a4der
+e3radi
+er3afb
+er3afd
+e3rafe
+er3afg
+er3afk
+er3afp
+er3afs
+er3aft
+er3afv
+er3afw
+er3afz
+era4gen
+e1rai
+er3al.
+er3ala
+er3alg
+e3rali
+er3all
+er3als
+er3alt
+er3amb
+er3ana
+e3ranc
+e3rane
+e3rang
+er3ank
+e3rans
+e3ranti
+e1rao
+e3rapl
+er3arc
+e3rare
+e1rat
+era3tj
+e4r3att
+er1au
+e1raw
+er3azi
+e1ra'
+e1ra-
+er1d2a
+er1d4o
+erdo3v
+er1dr
+erd3uit.
+er1dw
+e1re
+ere1a
+er3een
+er3eet
+er3eeu
+er3eff
+er3eg.
+eregi3o
+er3eie
+e4r3eig
+er3eil
+er3eind
+er3elk
+e4r3emm
+e3ren.
+ere4nen
+e4r3enen.
+eren3sp
+er3enth
+e4r3envi
+e4r3enze
+ere4ri
+e5r4es.
+eres4t3af
+erest3r
+ere4t3j
+er3etn
+e4r3ets
+er3eu3r
+e2r1ex
+erfo4l
+3ergiemo
+er3gle
+er3gli
+e1ri
+3eridons
+erie3s
+erie3t
+e5rig
+e4r3ijs.
+e5rik
+eri4ma
+e4r3ind
+er3ins
+e4r3int
+er1ir
+eri3sta
+erkeer4s3
+er4k3erv
+er4k3ins
+erk3ta
+erk3to
+erlaat3
+ermana4
+er4m3erg
+er4non
+e1ro.
+e1rob
+e1rod
+er3oed
+er3oef
+e3roep
+e3roer
+e3roes
+eroe3t
+e1rok
+e3rol.
+ero4lem
+er3o4li
+e3roll
+er3om.
+e3roma
+er3omb
+er3omg
+er3omh
+er3oms
+er3omv
+er3omz
+e3ron.
+e3ronal
+er3onc
+e3roni
+e3roof
+er3oog
+e3rook
+er3oor
+e3roos
+er1op
+erop3a
+ero4pen.
+ero4pi
+erop3r
+er1o2r
+er3ove
+er3oxi
+e1roz
+ers3om.
+er3sta
+er3sti
+er1t
+er4t3a4g
+er3te
+ert4s3l
+ert4s3te
+er5t4u
+e1rub
+e1rug1
+er3uit
+erui3tj
+e1rup
+er1u2r
+e1rus
+er1uu
+1erwt
+e1ry'
+e1rö
+e1sab
+es1a2g
+e1sam
+e1san
+e1sas
+e1sc
+es4can
+e2sce
+e2sci
+e2scl
+es4crib
+e3se.
+e2seb
+e2s1ee
+ese2n
+es1hi
+e1sid
+es1in
+esi1t
+esi4te
+es1je
+e1sji
+e1sjo
+eska4tes
+es4kel
+e3slep
+e3s4opb
+es3ore
+es3ori
+e1sos
+e1sot
+esp3riem
+es4sce
+es2sm
+es4spr
+es4t3ac
+e3stand
+es3tant
+es3tas
+e4s3te.
+est3ei.
+es3teli
+e3stem
+e4s3ten.
+es3ter
+estere3o
+e4s3tes
+e3steu
+es4tich
+es2tj
+e3stot
+e4s3tra.
+es3trak
+e1stu
+e1s2ty
+e1su
+e1sy
+e1ta.
+et3aan
+et3aca
+et3act
+et1ad
+et3afd
+1etag
+e1tak
+e1tal
+e4talb
+e3tand
+eta2p
+e4tapp
+e1tas
+e2t1av
+e1te
+e3te.
+et3e4co
+et3edi
+et3emb
+et3emm
+eten3tj
+ete3r4aa
+eter4s3l
+etes3p
+e4tete
+et3hal
+et3hor
+et3hou
+e1thr
+e4t3inc
+et3i4ni
+1e2tiq
+e1toe
+e1tom
+et3ope
+et3opl
+et3ops
+etor4s3t
+e1tou
+eto3ver.
+e1tr
+et3rec
+et3res
+etros4
+2ets
+et3sap
+et3slu
+ets1o
+ets3paa
+ets3pr
+ets3te.
+ets3tek
+et3ster
+ets4ti
+et3str
+et1su
+ette3s
+e1tu
+etu4ne.
+et4wij
+1eu1a
+1eu1c
+eu1d
+eu1ed
+eu1en
+eu1er
+eug4d3r
+eu1gr
+1euh
+1euj
+eu4ler
+e1umb
+e1umc
+e1umf
+e1umg
+e1umj
+e1umk
+e1uml
+e1umm
+e1umn
+e1umr
+e1ums
+e1u2mu
+e1umv
+e1umw
+eun1s
+eun1t
+1euo
+e2ur
+eu3ren
+eu4r3es
+eu4rij
+eur1k
+eu3rol
+eu3roo
+eu1sc
+eu3s4te
+eu1t
+eu4wij
+1eu-
+e1v
+evaar3tj
+eva3lo
+evel3op
+eve3naa
+even3t
+2e3ver
+ever4ee
+evol4ga
+e1w
+e3w2e
+ewen4s
+ewens3te
+ew2h
+ewieks5te.
+e2wn
+ew1s
+2ex.
+ex1aa
+1exam
+ex1op
+1exp
+ey2n
+e1yo
+ey1s2
+e1z
+eze3na
+ezin4s3
+e1ë
+e1ï
+e1ö
+e1ü
+e1ñ
+e1ç
+e1-
+1fa.
+1faal
+f1aap
+f1aar
+f1aas
+1faat
+1fab
+f1a2bo
+f1acc
+f1ach
+1faci
+fa4de.
+2f1af
+1f2a1g
+1fah
+1fai
+fa4ke.
+1fal
+fa1la
+fa1lo
+fal1s
+f1amb
+1fami
+fa1na
+fa1ne
+f1ang
+fansi4
+fant3j
+fants3
+f1a2p
+1fari
+fa1ro
+f1art
+f1as.
+1fase
+1fasi
+f1ask
+f1ass
+fa1ta
+fa1v
+1faw
+1fax
+1fa'
+2f1b
+f1c
+fcour4
+2fd
+fd1ac
+fda4de
+fd1ar
+fd1as
+f2d1e2c
+fde2k1
+fde2s1
+f2dh
+fdier3o
+f4d3inga
+f4d3ingr
+f4d3ink
+f4d3ins
+fd1of
+fd1or
+fd3ric
+fd3rol
+fd1sc
+fd1so
+fd1sp
+fd3sta
+fd3ste
+fd3str
+1fe
+fe2a
+featu4
+fec4tr
+fe4del
+fede3r
+2f1een
+fee2r1
+fee3sh
+feest3r
+fee1t
+fe1k
+fel3ac
+fe4l3ee
+f3e4lem
+fel1f
+fel1k
+fel3sp
+fe1na
+fe1ne
+fe1ni
+fe1no
+fen1s
+fen1t2
+fe1o
+fe3raa
+fe3rab
+fe3ran
+fe4r3et
+fe3rom
+fer3sl
+fes1
+fe1ta
+fet1j
+fette3
+2f1ex
+2f1f
+ff1d
+ffi4ce
+ff1s
+f1g2
+fge1
+fge4k3lov
+fge4k3nep
+fges2
+fguts3
+2f1h
+1fi
+fi2al
+fi1as
+fi4cep
+fi1ch
+fie1s
+2f1ijz
+fik4s3t
+fi1la
+fi4len
+fil4ma
+fil4m3on
+fi1lo
+2f1ind
+fi4nel
+2f1inr
+f1inv
+fi1o
+fi2r
+fi2st
+fi4tin
+fit1o
+f1j
+2f1k2
+fkaats3t
+fl2
+f1laa
+flaat3
+f1laf
+f3land
+3flat.
+f3late
+flat3j
+3flats
+1flau
+fla1v
+f1leg
+f1lei
+flen4s3t
+fles1
+fle2t
+flet3j
+f1lev
+f1lez
+2f1lie
+f1lig
+f1lij
+flijs3
+f1lin
+f2lip
+1f2lit
+1floe
+f1lok
+flo1r
+f2lot
+fluit3j
+flu2t1
+1f2ly
+f1m
+fma2d
+f1n
+fnes1
+f2nui
+1fo.
+1fob
+1foc
+foe1r
+2f1of
+fo2gi
+fok1
+4f3olië
+2f1omg
+2f1oms
+f1omv
+fo1na
+f3onde
+1foni
+f1ont
+1foo2
+2f1oog
+foon1
+f1o2p
+2fope
+fops2
+f2opt
+1for
+fo1ra
+f1ord
+fo1ru
+1fos
+fo1sa
+fo1st
+1fo1t
+1fou
+2f1oud
+fout3s
+2f1ov
+foy1
+2f1p
+fper4s3te.
+fr2
+1fra
+f1rea
+f1rec
+f1red
+f1ref
+f1reg
+fregi3o
+f1rek
+f1rel
+1f2req
+f1res
+friet3j
+f1rij
+f2rik
+1fris
+f2ro.
+1f2rod
+f1roe
+f4roka
+f1rol
+f4rolo
+1fros
+frus1
+2fs
+fs1aa
+fs1ad
+fs1ar
+f1sc
+f2sca
+f2sce
+f2sci
+f2s1co
+f2scr
+f2scu
+f2s1ee
+fs3erv
+fs3eth
+f2s1e2v
+fsho2
+fsi2d
+fsie1
+fs1i2m
+fs1in
+fs3led
+fs2me
+fs1o2
+fs2ol
+fss2
+fst3ac
+f3stan
+fst3as
+f3stat
+f3stell
+fste4m3
+f3ster.
+f3sters
+f3stert
+f3stif
+fst3oc
+fsto3v
+f1str
+f1stu
+fs1ui
+f1sy
+2ft
+ft3aan
+f1tab
+ft1ac
+f1taf
+f1tal
+f1tan
+ft3art
+f1te
+fter3s
+fte1t
+f2tex
+ft3hed
+ft1ho
+ft3ijs
+fti2m
+f4t3ins
+f1t2j
+f1to
+f1tr
+ft1sc
+fts1l
+fts1p
+ft1st
+f1t2w
+f1ty
+1fu
+fu1lo
+fu4m3ac
+fu2m1i
+fun1s
+fu4ren
+fu1ro
+fus1t
+fu1ta
+2f1v
+fva2l1
+2f1w2
+1fy1
+2f1z
+1fé1
+1fè
+1fê
+1fö
+1fü
+f1-
+1ga
+3ga.
+gaar3t
+g4aat
+gaat3j
+ga2bo
+g1ac
+g2ada
+2g1adm
+ga1do
+g2af.
+g1afd
+ga1fo
+2g1afs
+2g1afw
+g1afz
+ga2ho
+ga1kr
+ga3lac
+ga4l3ach
+ga3lad
+gal3app
+ga3lav
+ga1lo
+ga4med
+ga4mep
+ga4mes
+gan1d
+ga1ne
+gan3gr
+ga1no
+ga1pr
+2g1arb
+ga3r2e
+2g1arm
+ga1ro
+g1arr
+gar1s
+2g1art
+g4ar3tj
+gas1c
+ga2s1i
+gas1o
+gas1p
+ga1ta
+gat1j
+gat1s
+gaus2
+2g1aut
+g1avo
+3ga'
+g1b
+gby1
+g1c
+2gd
+gd1ar
+gd3ate
+g4d3elf
+gde3sp
+g2dh
+g2d1id
+g2d1im
+gd3ins
+g1do
+gdoe4l3
+gd1op
+g1dri
+gd1sa
+gd1so
+gd1sp
+gd3ste
+gd1w
+1ge
+ge1a
+ge4ade.
+gea4der
+gea3na
+gea4ni
+ge4ari
+2g1eb.
+2g1ebb
+2gebd
+2g1ebt
+ge1c
+ge1d
+2ged.
+ged2e
+4gede.
+ge4dit
+4gediven
+4g3eend
+gee2r
+geest3r
+gee2t1
+gee3t4j
+ge1f
+2g1eff
+ge3fi
+gef2r
+ge1g2
+gei4l3a
+gei4t3j
+ge1k
+ge3k2e
+gek4le
+gek4li
+gek2n
+gek2r
+gek2u
+gek2w
+gel3acht
+ge3lak
+ge3lar
+gel3as.
+ge3lav
+ge3laz
+gel4da4
+3gelde
+3gele
+gel3ein
+4g3e4lem
+ge4l3ink
+gel1k
+ge1lo
+gel1s
+3gelt
+4gementbu
+4gementc
+4gementer
+4gementf
+4gementk
+4gementli
+4gemento
+4gementp
+4gementsa
+4gementsc
+4gementsy
+4gementtr
+4gementv
+gemes3
+2g1emf
+2g1emp
+gem2s
+ge3m2u
+ge3nad
+ge3nak
+gen3an
+ge3naz
+gen1c
+ge1ne
+ge4n3ed
+ge4nei.
+ge5nen.
+4genenvi
+4g3enenz
+4g3engt
+ge1ni
+gen1k
+gen3o4g
+gen3ov
+gen3sfe
+gen3th
+gen3tj
+ge1ob
+ge3oli
+ge1op
+geo3per
+georke3
+ge1oz
+ge1p2
+ge3raak
+ger3aal
+ger3aap.
+ge3raas
+ge3rab
+ge3rad
+ge3rak
+ge3ram
+ge3ran
+ge3rap
+ge3ras
+ger3as.
+ge3rav
+4g3e4r3enz
+geri4n
+ger3ini
+ge3roc
+ge3rol
+ge3rom
+ge3ros
+ge3rot
+ge3rou
+gers3lij
+ge1ru
+ger4ui
+ge1s
+ges2c
+ges2h
+ge4shop
+ges2i
+2g1esk
+ges2l
+ges2m
+ges2n
+ges2o
+ges4pend
+ges4po
+ges4ter
+ges4til
+ges2w
+3get.
+ge1ta
+get4aa
+getes3
+get3ha
+get2i
+ge1t2j
+ge1to
+ge3tsj
+ge1t2w
+ge1ui
+ge1um
+2g1ex
+g1f
+2g1g
+gge3raa
+gge4sti
+g2gh
+ggi1o
+g1h
+g2het
+ghte2
+gh2tr
+ght1s
+g2hum
+1gi
+gi1a
+gids3t
+3gie
+gie1f
+gie1k
+gie1l
+gie1s
+giet3s
+gi1eu
+gi2f
+gif1a
+gif1r
+2g1ijs
+gi1la
+2g1inb
+4ginfe
+4g3infr
+2g1inh
+gi2ni
+gin1o
+g4ins.
+gi2od
+gi1os
+gio1v
+gips3t
+g1irr
+2g1iso
+gis4t3a
+g1j
+2g1k
+g1lab
+g1lam
+gla2s1
+g3last
+g1lat
+g1lau
+1glaz
+1g2le.
+glee3t
+g1leg
+g1lei
+g1lek
+g1len
+g1ler
+1gle2t1
+g1lev
+g3lice
+g3lich
+1glim
+gli4ne
+1glio
+1glië
+1glob
+g1lod
+1glof
+g1log
+g1lok
+1glom
+g1lon
+g1lop
+g1lui
+gluid3
+1g2ly
+2g1m
+g1n
+g2naf
+gnee2
+gne1s
+gne3th
+gne4t3j
+gn1k
+g2nob
+gn2on
+gno1r
+1go.
+1goa
+go1ar
+1gob
+gobe5
+g1och
+1god
+go2d1a
+god3on
+god4s3e
+gods3t
+1goe
+goe4d3a
+goe4dr
+2g1oef
+goe1r
+goes1
+go1fr
+1gog
+g1oh
+go2k1i
+gok1s
+1gol
+go1la
+g1oml
+gom1p
+g1omz
+go1na
+gon1d
+g1ong
+2g1ont
+g1oor
+goot1
+go1pa
+g1opb
+g1opg
+g1opl
+go1pr
+g1ops
+g1opv
+1go1ra
+g1ore
+go4ren
+2g1org
+1gori
+gor2s1
+gos1p
+1g4ot
+go3the
+go1tr
+gou4dee
+1gous
+goven3
+1goë
+1goï
+1go-
+g1p
+gpes1
+g1q
+gr2
+1gra.
+gra4des
+g1rak
+gra4m3a4
+4g3ramp
+gra2s1
+grase4
+g1rea
+2g1rec
+gree2
+4g3reek
+gre1g
+4greis
+g1rek
+2g1rem
+g3rena
+gren4s
+1greu
+1gria
+griet3j
+g3rijd
+g3rijk
+3grijp
+1gris
+g3rit.
+2g1riv
+g1rod
+groet3j
+g1rok
+g3rook
+g3room
+gro1v
+g2roï
+2g1rug
+4g3ruim
+g1ruk
+4gs
+gs1a
+gsa2d
+gsa2g
+gsa2r
+gsas3p
+gsce4n
+g1sch
+gs1co
+g2s1e2d
+g2s1ee
+g2s1ef
+g2s1ei
+gse2n
+gs3ene
+g2s1e2t
+g2s1e2v
+gs1h
+gs4ham
+gshe4r3
+gs1i
+gsi2d
+g2sin1
+g2sis
+gsi4te
+gsi2z
+gs1j
+gs3laag
+gs3lam
+gs3lan
+gs4lang
+g3slap
+gs3lec
+gs3led
+g3slep
+gs3let
+g3sleut
+gs3lie
+g3sling
+gs3lis
+g3sloe
+gs3lon
+g3slot
+g2sma
+gs1na
+g3snijd
+g3snoe
+gs1o
+g3s4omb
+gs3pand
+g3spann
+gs3par
+g3spel
+gs3pill
+g3spinn
+gs1pl
+gs1pr
+gs4prie
+gs1pu
+gsquo4
+gss2
+gssce4
+gs3taak
+gs3tab
+gs3tac
+gs3tal
+g3stam
+gst3ant
+g3stat
+g3s4te.
+g3stee
+gs3teh
+gs3teks
+g3stel
+g3sten
+g4s3tend
+g3ster.
+gs3terr
+g3sters
+gs3tes
+gs3the
+g3s4tich
+g3s4tig
+gs4tin
+g3stop
+g3stor
+g3stot
+g3strat
+gs3trek
+gs3troe
+g3struc
+gsu2
+gs1ui
+gs1ur
+gs1uu
+g2sw
+g1sy
+gs2-
+g1t
+g2t1ap
+gte3ro
+gte1s
+gti2m
+gto1v
+1gu
+gu1aa
+gu2ac
+gu1av
+2g1uit
+gu1r
+g1u2ri
+gus1
+guts3te.
+gut3sten
+g1v
+gve2r
+gver3a
+gvero5verd
+2g1w
+1gy
+gy1n
+g1z
+1gé
+1gè
+2g1-
+g2-r
+haak1
+haam4s3ta
+haam4ste
+haar3s
+haar4s3te
+haar3t
+haats3te.
+hade1
+ha1do
+had1s
+h1afs
+haft3u4
+ha4gin
+ha4ke.
+ha4ket
+ha1kr
+hak1s
+ha1la
+half1
+hal4fe
+hal4ka
+ha1lo
+1hals
+hal4sto
+1halv
+1halz
+ham1s
+ha1na
+hand3r
+han3ga
+hang3l
+hang3s
+ha1no
+han3so
+hap1l
+hap1r
+har4e
+ha5ren3
+ha1ro
+har4taa
+hart3j
+harto4
+hart3or
+ha4se.
+has1p
+hat3ee
+hat1j
+hat1r
+hat1s
+ha1v
+4have.
+1haz
+2h1b
+h1c
+h1d
+h2d'
+2he.
+he5co
+hee1g
+hee4k3l
+hee4l3o
+heer4s3ta
+heer4s3te.
+hee3ta
+heet3j
+he2f1e
+he1go
+heids3p
+hei1k
+hei1t
+hei4t3j
+he2k1a
+hek4s3te.
+hek1w
+hel3ac
+he3lar
+he3li
+hel4m3a
+hel2o
+he3lon
+he3lor
+he3lot
+hel3ov
+hel3s4m
+he1na
+he1ne1
+he1ni
+hen4ka
+hen4kr
+he1no
+he3ose
+he1pi
+he4pij
+he2pr
+hep1s
+he1ra
+he4rac
+he4r3a4d
+her4au
+he4r3e4d
+he4r3e4v
+her3inn
+her1k
+her4m3eng
+her3on
+he3ros
+her1s2
+3herst
+he1sa
+hes1t
+he1ta
+he1to
+het3sten
+2hew
+2h1f
+2h1g
+h1h
+hi1a
+hide1
+hie4dr
+hie4fo
+hie3rad
+hie4r3i
+hier3o
+hie4ru
+hie1s
+hie3tj
+hie4to
+hie4tr
+hiet3s
+hi2i
+hik2s1
+hi1kw
+hi1la
+him4pl
+him4pr
+hi1no
+hint3j
+hi2p1i
+hip1l
+hi1po
+hi1sa
+hi1tr
+hits3t
+hië1
+h1j
+h1k
+h1lab
+h1loc
+hlo1r2
+2hm
+h2mi
+2h1n
+h2na
+h2nit
+hno1
+ho1a
+ho1ch
+ho1d
+hoef1
+hoek3st
+hoe2s
+hoes3l
+hoes3te
+hoe1t
+ho2f1e
+hof1s
+ho1g2
+hoi2
+ho2ka
+ho4ke.
+ho1la
+ho4le.
+ho4lek
+honi2
+hono1
+ho2nu
+hoo2
+hooi1
+2hoom
+hoon1
+hoor4n3ac
+hoor3t
+2hoot
+ho1pe
+ho2pl
+hop1o
+hop1r
+hop4s3te.
+hop4str
+ho1ra
+1horl
+1horm
+ho1ro
+hor4s3te.
+hort3j
+ho1ru
+ho1sa
+hos1p
+ho1th
+hot3re
+hots3te.
+3hou4se
+ho1v
+2how
+how1o
+h1p
+hpi2
+h1rea
+hree3t
+hri2
+hrik1
+hro2k1
+2h1s2
+2ht
+ht1a2
+h3tans
+h1te
+h2t1ee
+hten3t
+hter3f
+hter3o
+hter3st
+h4t3esk
+hte3sp
+hte3st
+h4t3e4ve
+h2t1ex
+ht1h
+h4t3ins
+h4t3int
+ht1j
+ht1oe
+ht1of
+ht1om
+ht3ond
+ht3ong
+ht3oor
+ht1op
+ht1or
+ht1ov
+ht1r
+h2tre
+hts1a
+ht4see
+ht4s3erv
+ht3sla
+hts3le
+ht3slot
+ht3slu
+ht2s1o
+ht3span
+hts3par
+hts3pl
+ht3spoo
+ht3spre
+hts3taal
+hts3tak
+ht3stand
+ht3ste.
+hts3tek
+ht3stel
+ht3stes
+ht3stoet
+ht3stop
+hts3tore
+hts3trekk
+hts1u
+ht1u2
+htve2
+htver3
+hu2ba
+huit3j
+hul4der
+2hus
+hut1j
+hut3sta
+huur1
+huw4do
+h1v
+2h1w
+h2wu
+hy1le
+hy1o
+1hyp
+hype2
+hy4pe.
+hy4pes
+h1z
+2h1-
+i1aa
+i3abet
+i1abi
+i3abolisc
+ia4bor
+i1ac.
+i1ae.
+i1a1fa
+i1afr
+i1agn
+i1a1go
+i1a1gr
+i1ai
+i1ak.
+ia1ka
+i1ake
+ia4kem
+i1al
+i2a1la
+ia1lo
+i1ama
+i3amie
+i1an
+i3apas
+i1api
+i1app
+ia1pr
+ia4ren
+i1arr
+ia1sh
+i3aspo
+ia2st
+ia3str
+i1at
+ia1th
+ia1tr
+i5atri
+i1au
+i1a'
+ibie1
+i2ceo
+ice1s
+i1cha
+ic3hal
+i1che
+i1chi
+i1cho
+i1chr
+ic1kl
+ic3ko
+i1co
+ic4t3op
+ict4sc
+i1da
+id3aan
+id3ach
+i2daf
+id3arm
+id3art
+idas1
+id3as.
+idder3a
+id2dl
+i2de1a
+iden3a
+ide3ne
+ide4o3v
+ide1s
+i2dh
+idi1a
+idie3r
+idie3t
+idi3ot
+i1don
+i1dor
+id1ov
+id3ran
+id1re
+id1ro
+id2s1a
+id4sei
+id4s3erv
+id4set
+id2s1i
+ids1j
+ids1l
+idsmana4
+id3s4mee
+ids1o
+ids3pa
+ids3pi
+ids3taal
+ids3tal
+ids3tr
+id1u2r
+id1uu
+idu1w
+id1w
+ie1a2
+iecht3s
+ie4d3ac
+i1ee2
+ie3fle
+ief3ro
+ief3ru
+ie4g3as
+ie4gei
+ie4g3erv
+ie4g3ins
+ieg1l
+ie4k3e4v
+ie3klu
+iek3ond
+ie3kra
+ie3kri
+ie3kro
+ieks3n
+ie3kwa
+iel3aar
+ie3lak
+ie3lap
+iel3do
+iel3ei.
+iel1f
+iel1k
+ie3log
+iel3sc
+iel3sp
+ie4m3ov
+ie1na
+i1enc
+ie3ned
+ie3nev
+ie1ni
+ie4n3ij
+i1enn
+ien3o4g
+ien3ov
+iens4m
+ien3sp
+iens4t
+ien4stij
+ienst3o
+ien1t
+ie1o2
+iep3ach
+ie1pi
+iepiet3
+iep3oog
+iep3sc
+iep3ste
+iep3str
+ie4pui
+ier3aal
+ie3rade
+ier3a4l
+ie3ram
+ie3rap
+ier3as
+ie4r3at
+ier1f
+ier1g
+ier1k
+ier3oe
+ier3of
+ie3rol
+ier3ont
+ie3roo
+ie1ru
+ie3sal
+ie4sco
+ie3s4fe
+ie3sle
+ieso2
+ies3pl
+ie3sto
+ie3str
+iestudi3
+iet3ac
+iet3ant
+ie3the
+iet3ov
+ie4t3rot
+ie4t3ru
+iet3sten
+i1ety
+ieu1k
+i1eur
+i1eus
+ieuw4a
+i1euz
+ie2w1r
+ie-uit3
+if1d
+i2fec
+if1lu
+i1fo
+if1re
+if1s
+if4tre
+ift3ui
+if3tuu
+ig1da
+i2g1ij
+i4gind
+i4g3ins
+ig1le
+ig3lij
+i1gom
+ig3ond
+i1gr
+ig1sc
+ig1s2k
+ig1sl
+ig1s2p
+ig3ste
+ig3sto
+i1ha
+i1he
+i1hi
+i1ho
+ih1r
+i1hu
+i1hy
+i1i
+ii2g
+i2j1a
+ija2d
+ij1ei
+ij1el
+ije2n1
+ij1er
+2ijf
+ij1i
+3ijlin
+2ijn
+ij1ni
+ijo2
+ij1on
+ij1oo
+ij1or
+i1jou
+ij1ov
+ij1ui
+i1ka
+i2k1ac
+ik1ef
+iker3a4
+iker3k
+iker3st
+i4k3erva
+ik1j
+ik1lo
+i2k1lu
+ik1na
+i1kno
+i2k1o2g
+ik3ord
+ik1re
+ik1ro
+ik1sl
+ik3spo
+ik3spr
+ik3sto
+ik1ta
+ik1to
+ik3war
+ik1we
+i1la.
+il3aan
+il1ac
+il1ad
+il1af
+i1lak
+il1al
+il3ami
+i1lat
+il1au
+ild3ri
+ild1s2
+i1le
+i4l3erv
+ile1s
+i4lesp
+ilet3a
+ile4tj
+ile4t3r
+ilet3s
+ile1u2
+ilevin4
+i2l1e2z
+il1f
+il1g
+i1li
+ilie3r
+ilie3s4
+ilie3t4
+il1k
+ilk1s2
+il4lam
+illa3s
+1illu
+illus3t
+il4map
+il4m3ar
+il4mav
+i1lof
+il3ond
+il3oor
+iloot4j
+il3oph
+ilo2r
+il3ore
+i4lots.
+ilo1v
+il1pa
+il1po
+il1sa
+il1sc
+il3spo
+il2t1a
+il2th
+ilt1s
+i1lu
+i1lé
+i3ma.
+i2meb
+i2mej
+i2mem
+im3emi
+im3enc
+imes3t
+i4meti
+i2me-
+imma4ge.
+imo1n
+i2m1op
+im3org
+im1pj
+1impu
+im2s1l
+ims3oo
+im1sp
+imte3s
+2i1na
+in1ac
+in3a4ker
+i2n1au
+in4dene
+inde3s
+in4d3e4va
+ind3s4c
+1indu
+in4d3uit
+i1ne
+in3e4di
+i4n3eed
+i2n1ei
+ine1o2
+i4nesm
+ine3ta
+inet4s
+in1ex
+1infe
+in4g3aa
+in4g3a4g
+in4gam
+in4gei
+3ingete
+ing3lo
+ing3ru
+in4g3uu
+i1ni
+ini3sta
+in1kj
+in1kn
+in4kna
+in3kro
+inli2
+innes3t
+1inno
+i1noc
+in1oe
+in1of
+in3ong
+ino3s4t
+in1ov
+inper4s3t
+in1sl
+in3smi
+in1sn
+in1sp
+in5sten
+in4sui
+inta4ge.
+in4t3ap
+intes3
+int1s
+i1nu
+in1un
+io1a
+ioas1
+i2ob
+io1c
+i3oces
+i1o1d
+i2odo
+i1oe
+ioe4ni
+io1fa
+i3ofiele
+io1fo
+io1fr
+io1g2
+io1l
+i1ol.
+i3olen
+i5ologeerde
+i3omen
+i3omer
+i1on
+io1na
+io4nof
+io4nop
+ion4st
+ion1t
+i1oo2
+iop2l
+io1pr
+i1opt
+iop4te
+io1ra
+io1ru
+i1os.
+i1osa
+io1sf
+io1sh
+i3osi.
+io1sp
+io1s2t
+i1o1su
+io1ta
+io1th
+i3othecai
+i3otheekj
+i3otheekl
+i1oti
+io1tr
+io1u
+io1w
+i1ox
+i1pa
+i2p1ac
+i2p1au
+i1pe
+ipe1k
+ipe4t3j
+i1pi
+ipi2r
+ip1j
+i1pl
+ipo4ge
+i1pot
+ip1ru
+ip1sc
+ip1sl
+ips2t
+ip3sti
+i1pu
+iput1
+i1q
+i1ra
+i1r2e
+iree3t
+ire1n
+i1ri
+irie3t
+irmi2
+i1r2o
+iro1p
+ir2sc
+ir1sp
+ir1ta
+ir1th
+ir1tj
+irt1r
+irt1s
+i1ru
+iru2s
+i1ré
+is1aa
+is1ad
+is1ak
+i1sal
+is1ap
+is1a2r
+is1as1
+is1av
+i3scha
+ise2d
+is3eil
+is3eis
+is3elf
+ise3ra
+i4s3erv
+ise1s
+ise2t
+is3ete
+iset3j
+is4fee
+is4hen
+is1ho
+i1si
+is1i2d
+isie1
+i2s1ij
+i2s1im
+is3int
+is1j
+i1sji
+is1l
+is4lui
+is1na
+is3ned
+is3nij
+is1no
+i1soe
+1isol
+is3o4li
+is3ord
+iso1s
+is1pa
+is1pl
+is1po
+is1pr
+iss2c
+is1t
+is4t3ap
+is4tat
+i3s4termu
+is2tj
+is3t4le
+isty1
+i4style.
+isu2m1
+i1sy
+i1ta
+it1ap
+it1au
+i1te
+i2teb
+it3een
+iten3aa
+iten3t
+ite3rar
+2ite1s2
+i3tesk
+it3e4te
+it1ha
+itie3r
+itie3s
+it3ins
+it3jesg
+it3jesp
+i1tof
+it1oo
+i1top
+i1t2ou
+it3red
+it3rui
+it4sei
+it2sj
+it3sje
+its4mi
+its3te.
+it3stel
+its4ti
+it3stop
+itsu2
+its3ur
+its3uu
+itte3s
+2i1tu
+i1ty
+i1u2
+ium1
+iuma2
+i1v
+i2vec
+iven1
+ive1s
+i2ve-
+i1w
+iwes1
+iwi2
+2i1z
+i2zed
+i1é
+i1è
+i1ë
+ië1ta
+i1-
+i-2ch
+i-2g
+jaar3t
+jacht3s
+1jag
+ja1kn
+ja1la
+ja1lo
+1jam
+ja1ne
+jan1o
+jans3l
+jan4s3t
+jan3tj
+jao2
+ja1pa
+ja1po
+ja1ro
+1jas1
+ja1sa
+ja1ta
+2jav
+j1b
+jbal1
+jbe4lu
+j1c
+jd1aa
+jd1ar
+j1das
+j2d1ee
+jde4n3e
+jdens3p
+j4d3erv
+jde1s
+jdo2
+j1dom
+jd1on
+jd1op
+jd1or
+jd1re
+jd1ri
+jd1ro
+jd3rui
+jd3sal
+jd3slo
+jd3slu
+jd3spo
+jds3pr
+jd1st
+j2d1u
+jd1w
+jea2
+1jeb
+1jec
+je1ch
+jec4t3a
+j1ee
+jeen1
+jee1t
+j1ef
+2jei
+je1kl
+je1la
+j1en
+je1na
+je1ne
+jene4t
+je3n4of
+1jep
+je1pi
+je1ro
+1jesa
+3jesbi
+3jeskn
+jes1l
+3jeslu
+3jesme
+jes1o2
+jes3pa
+jes3pu
+1jesr
+jes1t
+je3s4ti
+jet1s2
+1jeu
+1jeva
+1jevr
+j1ex
+1je-p
+jf1a
+jf1da
+j2f1ei
+j2f1en
+j2f1ij
+jf3lap
+j3flat
+jf1le
+jf1lo
+jf1o2
+jf1r
+jf4s3ec
+jf4ser
+jf4set
+jfs1j
+jfs1l
+jfs1n
+jfs3pa
+jfs3tak
+jfs3to
+jf1t
+jg1d
+jge3la
+jg1l
+j1go
+j1gra
+jg1re
+j1gro
+jg1sc
+jg2se
+jg1sn
+jg3ste
+jgs3tr
+j1h
+j1i2d
+j1ig
+ji4ge.
+jin1
+ji1t2j
+ji2ve
+j1j
+2jk
+jk3aan
+jk3aard
+j3kaart
+j1kap
+jk1au
+j2k1ij
+j4k3ins
+jk1j
+j4k3lap
+j3kled
+jk1li
+j3klon
+jk3lop
+jk1lu
+jk1na
+j1kne
+j1kni
+j1kno
+j2k1o2l
+j2k1on
+j4k3opl
+jk3raa
+j3kran
+jk3red
+jk3rin
+jk1ro
+jk1ru
+jks1a
+jks3le
+jks1n
+jk3span
+jks3pl
+jks2t
+jk3sta
+jk3sti
+jk3sto
+jk3stra
+jk1ta
+jk1to
+jk1ui
+jk3waa
+j3kwas
+jk1we
+jk1wi
+j1la
+jl3ana
+jl1d
+j1le
+j2l1ef
+j2l1e2l
+jl1f
+jl1g
+j1li
+jl3ink
+jl1k
+jl1oe
+j1log
+j1loo
+j1lop
+j1lot
+jl1p
+jl1sn
+jl1st
+j1lu
+j2m1af
+j2m1op
+jm1p
+jm1s
+jn3aak
+jn3aal
+jn3aar
+jn1ac
+jn1ad
+jn1a2k
+j1nam
+jn1a2p
+jn1ar
+jn1c
+jn1do
+jn1dr
+jnd1s
+j1ne
+j4neen
+j2n1ef
+j4n3erv
+j2n1ex
+jn1g
+j2n1im
+jn1k
+jn1o2
+jn1sa
+jn4sei
+jn2si2
+jns3la
+jn3slu
+jn3soo
+jns3pl
+jn4ste.
+jn1t
+j1nu
+jo2b1
+jo1d
+joet1
+jo1fa
+jo1go
+2joi
+jo3l2e
+j1om1
+jo1na
+joor1
+j1op
+jo1pe
+jo1ra
+jor1d
+jo1ru
+jo1ta
+1jour
+joy1
+j1pa
+j1pe
+j2p1em
+j1pi
+j2p1ij
+jp1j
+j4p3lam
+jp1li
+j1poo
+jpor1
+j1pot
+j1pr
+jp3rem
+jp3rok
+jp1s
+j1pu
+j1r
+2js
+js1a
+j1sch
+j2s1ef
+j4s3ela
+j2s1em
+j2s1er
+j2s1e2v
+js1h
+js1i
+js1j
+js3lan
+js3lie
+j1slu
+js1no
+js1o2
+j1soe
+j3spel
+j1spi
+js1pl
+jspoort3j
+j3spor
+jss2
+j3sta.
+j3stal
+j3stat
+js3teb
+j3stel
+js3tem
+js3ten
+js3tep
+js3terb
+j4s3terd
+j4s3tere
+j4s3teri
+js1th
+j3stoel
+j3ston
+js3tou
+j1str
+j4stran
+jst3rand
+j1stu
+j1ta
+j2t1ac
+j1te
+jt1h
+j4t3inc
+j4tind
+j1tj
+j1toe
+j1ton
+j1too
+jt3opt
+jt3raa
+jt3rei
+jt3rot
+jt1s
+j1tu
+1ju
+ju1d
+ju2k
+ju1ni
+ju1ra
+jus1
+j1v
+jver4sp
+jvie1
+j1w
+j1z
+jze4r3o
+j1-
+1ka.
+1kaal
+k3aanb
+kaap1
+kaart3j
+1kaas1
+kaats3te.
+1kab
+k1abs
+k1a2ca
+2k1acc
+3kache
+4k3acht
+2k1act
+ka1da
+1kade
+kade4t3
+k1adm
+ka1do
+k1adv
+2k1afd
+1kafe
+k1afh
+ka1f2l
+2k1afs
+k3aftr
+2k1afv
+2k1afz
+3kage.
+k3agen
+3kages
+1kah
+ka1i2
+ka1ka
+kak1s
+ka3lan
+ka3las
+k2ale
+1kalf
+kalf4s3
+k1alg
+k2alk
+kal4k3a
+kal4k3l
+kal4kr
+ka1lo
+1kam
+k1a2ma
+2k1amb
+kamen4
+kame4re
+2k1ami
+kam4pl
+kam4pr
+1kan
+ka1na
+ka1ne
+2k1ang
+ka1no
+kano3v
+kan4s3t
+kant3j
+kan4t3r
+1kap.
+1kape
+1kapi
+ka2p1l
+ka1po
+4kappa
+ka1pr
+kap1s
+1kara
+k1arc
+1kard
+2k1arm
+ka1ro
+kar1t
+4k3arti
+1ka2s
+kas1c
+kas1l
+kas1p
+ka4st
+kast3o4
+kast3r
+kas3u4r
+1kat
+kat3aal
+ka1th
+kati2
+ka4t3io
+kat1j
+k1atl
+kato2
+ka4t3og
+ka4too
+ka1tr
+kat1s
+ka4tui
+2k1aut
+k1avo
+1kay1
+1kaz
+1ka'
+k1b
+kbe2a
+2k1c
+2k1d
+kdan4c
+kdo1v
+kdri2
+1ke
+2k1e2c
+k1een
+kee4p3l
+keep3s
+kee2r
+keer4s3to
+kees1
+kee3tjes
+ke1fa
+2k1eik
+2k1eil
+kei1s2
+2k1eiw
+4kejes
+kel3aan
+kel3ac
+kel3da
+kel3do
+kel3dr
+4k3e4lem
+4kelj.
+ke3loe
+kel3o4p
+kel3ov
+kel3so
+kel3sp
+3keme
+ke4mis
+ken3ac
+ken3an
+ke3nar
+ke3nat
+ken3a4z
+ke3n4ei
+ken1o
+kens3le
+ken3sto
+ken1t
+ke1pi
+kepie3
+ke3rad
+ker1g
+ker4k3ra
+ker4n3a
+ker3oe
+ker3o4g
+ker3on
+ker3oo
+ke3ros
+ker4sti
+ker4stof
+4k3erts
+4kerwt
+ke3stel
+kes3ten
+kes3tra
+4kete.
+ke4ted
+ket1j
+ke2t1r
+ket3sp
+ket3sten
+ketting3s4
+ke2tu
+ke2vl
+2k1ex
+key1
+4k3e4zel
+2ke-
+2k1f
+k1g
+kgang3
+kge3la
+kge1n
+2k1h
+1ki
+ki2de
+ki2di
+2kied
+kies3l
+kiet3j
+kig1l
+kijf1
+kij4k3o
+2k1ijs
+2k1ijz
+ki1kl
+ki1la
+ki1lo
+4k3indel
+4kindu
+kine3a
+kin3en
+2k1inf
+kings3l
+2kinh
+2k1inr
+kin1s
+2k1int
+2k1inv
+ki1o
+2kipa
+ki2p1l
+kip1s
+ki1s2p
+ki3sta
+ki2te
+ki1th
+ki1tr
+kit4sc
+kits3t
+2kië
+2ki'
+k1ja
+k1jew
+k1jo
+2k1k
+kkaart4
+kka1t
+kken3sp
+kker4s3ten
+kke1s
+kl4
+1kla
+k3ladi
+k3land
+klap1
+k3last
+k3lat.
+3kledi
+klee2
+3kleed
+k3leer.
+2k1leg
+k3leid
+k1lek
+1klem
+2k1len
+1klep
+k1les
+1kle2u
+k1lez
+2k1lic
+k1lid
+k3lied
+3klima
+1klin
+k3lite
+k1loc
+k1lod
+k3loke
+1klom
+k3lone
+k3lood
+3kloof
+k3loop
+k3lope
+1klos
+klots3te.
+klo1v
+2kloz
+kluit3j
+2k1m
+kmee2
+4knaal
+kna2l1
+k1nam
+1knec
+knee2
+k2ner
+knie3t
+knik1
+knip1
+2k1niv
+1knob
+1knol
+1knop
+kno3pe
+1ko
+ko1a1
+ko2bl
+2k1oct
+ko1da
+2k1oef
+koes1
+koe3sta
+koets3p
+ko1fo
+koi1
+ko1ka
+ko1la
+ko3le
+kole4n3
+k1o2ly
+ko2m1a
+k3omsl
+kom4str
+2k1omz
+2k1onb
+kon3do
+2k1ong
+k2oni
+kont3j
+kon4t3r
+2k1onw
+koo2
+2k1oog
+koor3tj
+ko1pa
+2k1opb
+2k1opd
+ko3pe.
+2k1opg
+k1oph
+k3opsl
+ko1ra
+kor1d
+2k1org
+2k1ork
+kort3a
+kort3o4
+kort3s
+ko1ru
+ko2s1
+kos3o2
+2k1oss
+kot2j
+kots3te.
+kou3t4j
+2k1ov
+2k1ox
+k1p
+k1q
+k3raad
+1krac
+k1rad
+kradi3
+k1rai
+k3rand
+1kras
+krat3j
+k1rea
+2k1rec
+k3rede
+1kree
+kreet3
+k1ref
+k1rek
+k1res
+2k1ric
+kri2e
+k3rijk
+krijs3t
+krij4t3j
+1krim
+kri1o
+1krit
+4kritm
+k1rob
+k1roc
+2k1rol
+kron3t4
+4k3roof
+1krop
+krop3a
+kro4to
+k1rou
+k1ro1v
+kru2l1
+2ks
+ks1aa
+ks1ad
+ks1ak
+ks3alm
+ks1an
+ks1ar
+ks1as
+ks1av
+k2sca
+k1sch
+k2s1ee
+k4s3ei.
+kse4ma
+kse4mi
+k2s1e2p
+k4s3erv
+k2s1et
+k2she
+ksie1
+k1sil
+k2s1in
+ksi4te
+ks1j
+k2sk
+k3s4kes
+k3slac
+ks3lan
+ks3len
+k3sleu
+k3slot
+k1slu
+ks4mee
+ks1na
+ks1nu
+kso2
+ks1of
+ks1og
+k3song
+k1soo
+ksop1
+ks1or
+ks3par
+k3spel
+k3spor
+ks3pot
+ks3pra
+ks3pru
+kss2
+ks3taak
+k3stag
+k3stat
+k3stav
+k1ste
+k4stec
+k4stele
+k3s4tie
+ks4til
+ks4tin
+kst3op
+k3stot
+ks3trek
+k3stroo
+kst3uit
+ks1ui
+k1sy
+2kt
+kt3aan
+k3taar
+kt1ac
+k1tal
+kt3ana
+kt3art
+k3te
+k4t3e4co
+kter3st
+kte3sp
+kt3even
+kt1ha
+kt3hed
+k1thr
+k2t1in
+kt1j
+k1toe
+kt1om
+kt3ond
+kt3ope
+kt3ord
+kt3org
+kt1ov
+k1tr
+kt3rec
+kt3ren
+kt3res
+kt3reu
+kt3rij
+kt1sc
+kt1sh
+kt1sl
+kt3ste
+kt3str
+k1tu
+k1ty
+1ku.
+1kub
+ku3be
+kui2f
+ku3k
+1kun
+2k1uni
+kun4stu
+k1up
+ku1ra
+kur4ki
+kur1s
+1kus
+kut1
+2k1v
+kve2
+kvee1
+kvent3
+kver1
+kvide3
+k3waar
+k1wac
+2k1wag
+1kwal
+1k2wam
+k1wap
+1kwar
+2kwat
+k3weer
+kwee3t
+k1weg
+k1wei
+kwen4s3t
+k1wer
+1k2wes1
+3kwets
+kwets3te
+k1wez
+1kwir
+k1wo
+1ky.
+ky1l
+k1yo
+k1z
+1kä
+2k'
+2k1-
+laad1
+laan1
+4laanb
+4laand
+l3aang
+4l3aant
+4l3aanv
+laap1
+l3aardi
+laar3t
+laas1
+laat3j
+laat3sta
+1lab.
+1labo
+4l3a4bon
+2l1a2ca
+l1acc
+la3ce.
+3lache
+lacht4s
+l2aci
+lad1a
+lad3ete
+la1do
+lad1s2
+la2d1u
+1lae
+2l1afd
+1lafe
+la3fle
+la1fo
+l1afs
+la2g1a
+la4gent
+lag1l
+lag1o
+la3gra
+lag1s2
+1lah
+lak1a
+4l3akko
+la4kla
+1lako
+la1kr
+lakte3
+la1la
+1l2ald
+la1l2o
+la4mid
+lamp3j
+lam4p3l
+lam4p3o4
+lam4s3p
+2lana
+la3nad
+landa4
+lan4d3aa
+lan4ded
+lan4d3ra
+land3re
+la1ne
+la4ne.
+la4n3ec
+la4nes
+lang3l
+lang3sp
+lang3sta
+lan4kan
+lan4k3l
+lank3w
+la3noo
+lans3l
+lan4s3t
+lan5s4ten
+lan3th
+lant3j
+lao2
+1la1pa
+1lapj
+lap1l
+lap1o2
+1lapr
+la3pre
+lap1s2
+lap4ste
+la2p1u
+1lapz
+1larg
+lar4ge.
+larië4
+4larm.
+lar4min
+1la1ro
+lar1s
+lasa2
+la3sch
+las1l
+las1p
+3lastl
+la1ta
+la4tes
+lat3he
+lats2
+lat3sl
+la4t3ui
+2lavo
+1law
+lay1
+la4zij
+1laï
+1la-
+2l1b
+lba1t
+lber4t3
+lbet2
+2l1c
+lce2l
+l2cop
+2ld
+l1daa
+ldaat3
+ld1ac
+l1dad
+l1dak
+ldak4s3
+l2da2r
+ld3arb
+ld3ari
+ld3art
+ld3econ
+l4deen
+l2d1ei
+l4d3elf
+lden3k
+ldera4
+lde4r3at
+l2dex
+l2dh
+l4d3ins
+ld1o2l
+ld1om1
+ld3ond
+ld3ont
+ldo2p
+ld3opi
+ld3ori
+ld3ram
+l4d3rat
+l3dree
+ld3reg
+ld3ren
+ld3res
+ldri2
+ld3rol
+ld3rom
+ld3roo
+l1dru
+ld1sa
+ld1sc
+ld4scr
+ld1sl
+ld1sn
+ld3som
+ld1sp
+ld1st
+l4d3uit
+ld3uurr
+ld1w
+le2af
+le2ag
+le1a'
+le4del
+leden3
+4l3e4dit
+lee2g1
+leega4
+leege4
+4leekh
+leen1
+lee4pl
+lee2r
+lee4s3
+le1fa
+2leff
+le1fl
+legel3a
+l2ei.
+4leier
+2leig
+leii3ger
+4leind
+4leisar
+leit3s
+le1ka
+le1kl
+leko2
+le4kol
+le3kra
+lek3ri
+lek3str
+1lel
+le1la
+le4lek
+4l3e4lem
+le4lim
+2lemp
+l2en
+le3naa
+len3a4d
+len3a4k
+le3nar
+1lene2
+len3ei
+le4n3em
+1leng
+le1ni
+len1k
+len3o4g
+len3ov
+len3sn
+4l3en3th
+len3tj
+le1oa
+le1pi
+1le1ra
+le4rac
+le4r3a4k
+le4rau
+le4r3e4v
+le3roe
+ler3sk
+ler3sp
+4l3erts
+le1ru
+4l3erva
+le4s3et
+le3sho
+le3slu
+le3str
+lesu2
+le3taa
+le3tab
+le3te
+le4tem
+le1tj
+le1to
+le4top
+le4t3ri
+le4t3ro
+lets3t
+le2tu
+le3um3a
+le3umi
+leu3ro
+1leuz
+levink3j
+2lexp
+lf3aan
+l1fad
+l1fan
+l1fa2r
+l1fa1s
+l1fat
+lf1au
+l1fav
+lf1d
+l4f3ende
+l2f1e2v
+l2f1e2z
+l4f3ing
+l2f1ir
+lf1lu
+l1foe
+lf1o2l
+lf1om
+lf3org
+lf3rei
+lf1ro
+l1fru
+lfs1a
+lf4s3ei
+lfs3le
+lf1sp
+lf1st
+lf1t
+l2f1uu
+2lg
+l2gac
+l2g1af
+l2g1ap
+lg1d
+lge3la
+lgi1s
+l1gla
+lg1li
+lg1on
+l1g4oo
+lg1op
+lg1ov
+l1gr
+l4g3rom
+lg1s
+lg1ui
+l1h
+li1a
+1libe
+lid1s
+lie4g3a
+lier3st
+lie3st
+lie3ta
+lie3tj
+liet3s
+lie4tu
+li1eu1
+li1fa
+l2ig
+li1go
+lije2
+lijk3a
+lij4k3o
+lij4m3ac
+1lijn
+1lijs
+l3ijs.
+lij3sp
+lijs3te
+2l1ijz
+li4ke.
+li4kes
+li1kr
+lik1s
+li2kw
+li1la
+1limi
+lim4p3j
+l1inb
+lin3dr
+li4nec
+li4nev
+2l1inf
+l2ing
+lin4gi
+ling3l
+ling3r
+2l1inh
+l1inj
+4l3inko
+1linn
+li1no
+2l1inr
+lin1s
+l4ins.
+lint3j
+2l1inv
+2l1inz
+lio1
+li3ose
+li1o'
+lip3ar
+li2p1l
+li1po
+li1sa
+li3shi
+lis3pe
+2l1isw
+li1th
+li1to
+lit1r
+lits3t
+lit3s4ten
+2lix
+2l1j2
+2lk
+l1ka
+l4k3ank
+lk3art
+l2k1au
+l2k1em
+l2k1ep
+lking4
+lk1j
+l4k3lag
+lk3lev
+l1kli
+l1klo
+l1k2n
+lk3ont
+l1kra
+lk3rij
+lk3rot
+l1kru
+lkse2
+lk4s3ed
+lks1p
+lks3taa
+lk4s3tel
+lks3tr
+lk1t
+l1ku
+l2k1uu
+l1kwa
+l1ky
+2l1l
+lla1g
+ll3amb
+lla3tr
+ll1d
+ll3eig
+lle1k
+llen3s
+ller3o
+lle3s4m
+lle3st
+lli2f
+llo1f
+llo3tr
+l2l1ov
+ll1p
+ll1s
+llti4me.
+2lm
+lm3a4ca
+lm3act
+lm3arc
+l2m1au
+l2m1e2p
+l4m3erv
+lme3te
+l2m1e2v
+l4mind
+l4m3ins
+lm3oli
+lm1p
+lm1s2h
+lm1st
+2l1n
+lni2s
+lo1ac
+lo1al
+lo4boo
+lo4bor
+lo1dr
+loe4d3a
+loe4dr
+3loef.
+l3oefe
+2loeg
+loe1l
+1loen
+loen4s3t
+lof5d
+lo1fo
+4lo4gig
+log1l
+lo1go
+logs1
+log4sec
+log4sel
+1loj
+1lo1ka
+lo4k3ar
+lo4kee
+lok1l
+lo4k3op
+lo1la
+lo2li
+l1omg
+lomp3j
+lom4p3l
+l1omt
+l1omz
+lona2
+lo4nam
+2lond
+lon4gaa
+lon4gr
+1loni
+1lonn
+lont3j
+l3ontv
+1look
+loo2n
+3loopr
+loor1
+3loosh
+loo2t
+loot3e
+lo1pa
+l1opd
+lo1pe
+lo4pera
+lop4la
+l1opn
+lo1pr
+2lopv
+l1opw
+1loq
+1lor.
+lo3rad
+lo3rat
+1lorf
+l1org
+l1ork
+l1orn
+1lors
+1lor-
+lo4sce
+lo3spe
+lo4s3tr
+lot3ac
+lot3a4l
+lo4tet
+1loth
+1lotj
+lo4tof
+lou1s2
+2lox
+lo3yaa
+lo4y3aler
+1loz
+1lo-
+2lp
+lp3aan
+lp3age
+lp1am
+l1par
+l1pe
+lpe2n
+l2pex
+lp3ins
+lp1j
+l1pl
+l3p2la
+lp1of
+lp3ond
+lpoort3j
+lp3ope
+l1pr
+lp4ser
+lp1si
+lp1st
+l2pt
+l1pu
+l1q
+2l1r
+lrus1
+2ls
+ls1aa
+l1sab
+ls1a2d
+ls1a2g
+ls1ak
+l1sal
+l1sam
+ls1an
+l1sap
+ls1ar
+ls1as1
+l1sau
+ls1av
+l1sch
+ls4crip
+lse2c
+ls3eco
+l2s1e2d
+l2s1ef
+ls1im
+ls3ink
+ls3int
+lsi4te
+ls1ja
+l3slac
+l3slak
+l3slan
+ls3led
+ls3lee
+l3sleu
+ls3lie
+l1slo
+l3slui
+ls4maak
+l3s4mee
+l3smid
+ls3ned
+ls1of
+l1sol
+l3som.
+ls1o2r
+ls3pac
+l3span
+ls3par
+l1spe
+l1spi
+ls3pli
+l3spor
+ls3pra
+l1spu
+lssie3
+l1sta
+l1ste
+l4s3teko
+l4s3term
+l4stev
+l1sto
+l1str
+l4s3trak
+l4strans
+l1stu
+lsu2r
+ls3ure
+ls1us
+l1sy
+2l1t
+ltaar3
+l4tamp
+lte3na
+l2t1ho
+l2tl
+l2t1ov
+lt1sc
+lt1sl
+lt1sp
+lts3te.
+ltuur3
+l2tv
+l2twi
+1lua
+lu2b1e
+lu2b1l
+lu2br
+lu1ee
+lu1en
+lu1er
+1lui.
+1luia
+1luid
+3luie.
+luk4s3t
+lu1lo
+1lum
+lu1na
+1lunc
+2l1uni
+lu1ra
+lu2sp
+lu3sta
+lus3tra
+lu1ta
+lu1th
+lut1j
+luts3t
+l1v
+lven3s
+lver3a
+2l1w
+lwea1
+1ly
+ly1a
+ly1e
+l1z
+lû1
+2l1-
+1ma
+2maad
+maal3sp
+m3aanb
+2m1aap
+m1adm
+ma1do
+2m1adr
+2m1adv
+2m1afd
+ma1fo
+2m1afs
+2m1afw
+ma1gl
+ma1go
+ma1gr
+ma1ka
+ma4ke.
+ma4kes
+ma3ki
+4m3akko
+ma1kr
+ma1la
+ma4l3ent
+mal3sp
+ma1lu
+man3ac
+ma3nak
+4m3anal
+man3do
+ma1ne
+man1g
+ma1no
+man4see
+mans3p
+man4s3ta
+man4ste
+ma1pa
+ma1pr
+2m1arb
+mariet3
+ma1ro
+mars4h
+mar3sha
+mar4s3t
+ma1sa
+ma3sch
+mas2h
+ma3she
+ma1so
+ma1sp
+ma3str
+ma1ta
+ma4tes
+ma1th
+mat1j
+ma1tr
+mats3te.
+m2a'
+mbo1s
+m1c
+mcel1
+m1d
+m2dh
+m2dj
+mdo1p
+md1so
+md3ste
+1me
+me1ad
+me1an
+me1ar
+me2at
+me1c
+mede3s4
+medie3
+4medro
+mee3kr
+mee3las
+meel3d
+mee3lo
+meer3a
+mee3sp
+meest3a
+mee3sto
+mee3str
+mee3tj
+mee4tu
+meg2a
+mega3s4
+m1eig
+me1ka
+me1kn
+me1kr
+me1kw
+m2el
+mel3ac
+me3lad
+me3lak
+me3lar
+mel3as.
+mel3dr
+me4lel
+3melk
+mel4ko
+me3lom
+me3lot
+mel3s4m
+mel3sp
+memana4
+m2en.
+me3nad
+me3nar
+me3n4as
+me1ne
+men4g3ra
+meng3s
+me1ni
+me4n3ij
+men1k
+me3nor
+men3ov
+men4s3te.
+men4sure
+men4s3uu
+ment3ac
+ment3j
+men4ton
+me1nu
+me1of
+me1om
+me1p2j
+2m1e2q
+mer3aak
+me3rab
+me3rad
+me3rag
+me3ral
+me3rama
+mer3ante
+me3ras
+me4r3ei
+mer1f
+merk3lo
+mer3of
+me3rot
+merrie3
+mer4sta
+me3rui
+m2es
+me4sca
+me4sco
+mes1h
+me1sl
+me3sol
+mes3pa
+me3spe
+me3spo
+me3stel
+mes3ten
+mest3ov
+me1t2a
+me4tera
+me1th
+meti4m
+me1tj
+me1to
+met3sten
+me1ui
+m3e4ven
+mever3
+2m1ex
+m1f
+mfi1t
+mf2o
+m1g
+mge3la
+mge1r
+m1h
+mhoog3
+1mi
+mi1a
+mi1ch
+2mid.
+2mids
+mie1l
+mie3s4t
+mijn3s
+2m1ijs
+2m1ijz
+mi1kn
+mi1la
+mi4laa
+mi1lo
+mime1
+m1imp
+mi4nac
+m2ine
+2m1inf
+ming4s3
+4m3inko
+mi1no
+2m1inr
+m1inv
+mi1oc
+mi1of
+mi1op
+mi1ot
+mi1ov
+mi1p
+m2is
+mi3sce
+mi3sfe
+mi4sin
+mismana4
+mis1p
+mis4tac
+m2it
+mi1to
+mi1tr
+mits3t
+m1j
+m1k
+2m1l
+m1m
+mma1f
+mmana4gem
+mmi3s4l
+m1n
+1mo
+mo1a
+mo1da
+mo1do
+moed4s
+2m1oef
+moe3fl
+moer4s3t
+moe2s
+moes3p
+moes4te
+moet3j
+mo1g
+mo2g1a
+mo1ka
+mo1la
+mo4lie
+2molt
+2m1omv
+mo3nad
+mo3nar
+mon1g
+mono5l
+mons3h
+mons4t
+moo2
+mooie4
+moor3t
+mo1pa
+2m1ope
+2m1opn
+mop4sn
+m1opw
+m1opz
+mo1ra
+mo3re
+mo1ro
+mor4sp
+mor4s3t
+mos2c
+mosce4
+mo1sj
+mo2sl
+mo3sta
+mo1ta
+mo1th
+moto4l
+mots3t
+2m1oud
+mo1w
+m1ox
+mo3yant.
+m1pa
+mp3ach
+m2p1af
+m4papp
+mp3arts
+m1pe
+m2p1ec
+m1pi
+mp3inr
+mp3ins
+m1pl
+mp3lei
+mp3lev
+mp3lie
+m2p1lu
+m1po
+mp3oef
+m4p3ope
+mpo1v
+m1pr
+mp3rec
+mp3red
+mp3ring
+mp1s2
+m1pu
+m1q
+m1r
+ms1aa
+m1sal
+m1sam
+ms3ana
+ms1ap
+ms1ar
+m1sau
+m1sc
+ms2ce
+mscenari3
+m2scu
+ms1h
+m1si
+m1sje
+m1sl
+ms2me
+ms2mi
+ms2mo
+m1s4n
+m1sol
+m1son
+ms1o2r
+m3spande
+m1spl
+m1spo
+m1sta
+m1ste
+m4stec
+ms2ti
+m3stig
+m4s3ton
+m3stor
+m1str
+mst3rom
+m1stu
+mstudi3
+ms1ui
+m1sy
+m1t
+mtes2
+mto1v
+1mu
+4muilt
+2m1uit
+2muk
+mu1lo
+mul1p
+mu1lu
+mu2m1
+mu1na
+mu1ni
+munie3
+mu1no
+munt3j
+mu1ra
+mu1sa
+mu1sh
+mus3ta
+mu1ta
+muts3t
+m1v
+mve2
+mvee1
+mver1
+m1w
+1m2y
+my1a
+my1e
+m1z
+mze2t1
+1mé
+1mè
+1mê
+m1-
+1na.
+1naad
+1naal
+1naam
+n1aan1
+3naar.
+n3aardi
+n3aards
+3naars
+4n3aarsa
+4n3aarsv
+naar3t
+3naar-
+n3aas.
+3naast
+1naat
+naat3s
+na4bon
+n1aca
+1nace
+2n1act
+1na1d2a
+3nade.
+3nadem
+3nades
+1nadi
+n1adm
+na1do
+na1dr
+4n1adv
+1nae
+n1af
+2nafb
+na1f2l
+2nafs
+1na1g
+1nai
+1nak.
+na1ka
+na1k2l
+na1kr
+n1ala
+1nale
+nal1k
+n1alm
+na3loo
+1nalt
+2naly
+1nam.
+1nama
+1name
+name3s
+1nami
+n1amn
+n1amp
+na3nac
+na1ne
+n1anj
+na1no
+3nant.
+nan4ta
+n3antenn
+3nants
+3nant-
+nap3ac
+na1p2l
+na4pos
+na1pr
+nap3ste
+1napé
+na2r1a
+n1arb
+3narco
+1nard
+1nare
+na4rend
+n1arg
+narie3
+n1ark
+2n1arm
+na1ro
+nar4s3te.
+n1art
+na1s2a
+na1sc
+na1s2l
+nas4ma
+na1sn
+1nast
+na4ste
+na3stu
+1nat.
+1na1ta
+n3atel
+1nati
+nat1j
+n1atl
+na1t2r
+nat3sp
+nat3ste
+1natu
+1nau.
+1naus
+3nazif
+n3a4zij
+1naï
+1na'
+1na-
+n1b
+nbet2
+nbots3t
+2nc
+nca2k
+n4cepa
+nce3sp
+nces4t
+ncest3e
+n4cete
+n1che
+n1chi
+n1chl
+n1chr
+nch1t
+nch1u
+n1co
+2nd
+n1daa
+nd3act
+n4d3ana
+nd3arb
+n3darm
+nd3art
+nd3as.
+nd3ass
+nd3e4del
+n4d3edi
+n2d1ei
+nde4r3an
+n4d3e4rec
+nde4rei
+nde4r3in.
+nde3sl
+nde4ten
+ndiet3j
+n4d3ijs.
+n4d3ijz
+n4dink
+n4d3ins
+ndi1o
+n1dob
+n2d1of
+nd3o4lie
+n1dom
+n3dona
+n4d3ond
+nd3ont
+nd3oog
+nd3ope
+nd3ove
+n4d3rap
+n4d3rat
+nd3reg
+nd3rei
+nd3rese
+n4dret
+nd3ric
+nd3rot
+nd3rug
+nd3sal
+nd3san
+nd1sc
+nd4sce
+nds4cu
+nd4sei
+nd1s2i
+nd3slu
+nd3s4mee
+nds3pat
+nd3spi
+nd3spri
+nds3taal
+nds3tal
+nd3stan
+nd3ste
+nds3trek
+nd3stri
+ndu2r
+n4d3ure
+nd3uri
+nd1w
+1ne.
+1nea
+ne1ad
+ne1am
+ne2ap
+ne1ar
+nebe4st
+1neck
+ne1d
+nede4n
+ne4dit
+n1e2du
+1nee2l
+neel4ste
+1neem
+n1een
+neen3s
+1neer
+neer3s
+1nees
+1neet
+neet3a
+neet3o
+neet3r
+ne1fa
+2n1eff
+ne1fl
+ne1fr
+n1eg.
+1nega
+nege4n3
+n1egg
+ne1g2l
+ne1go
+1negr
+1neh
+n3eier
+n3eige
+n1eii
+n1eik
+n1eil
+n1ei2n
+2neis
+1nek
+ne1ka
+ne1kl
+nek1s2
+ne1ku
+ne2la
+nel3aa
+nel1d
+n3e4leg
+ne4lek
+ne4l3el
+4n3e4lem
+ne1lo
+1nem
+2n1emb
+4n3e4mig
+2n1emp
+1nen
+n4en.
+nen1a
+nen3ei
+ne2ni
+n3enig.
+n3enige
+n3enighe
+nen1k
+nen1o2
+n1enq
+nensi4
+nen3slo
+nen3slu
+nen3sp
+nen3st
+1neo
+ne4ona
+neo1p2
+ne4ore
+ne4p3ag
+nep1s
+1ner
+ne1ra
+ne4rac
+n3erfe
+4nergiem
+ne4r3id
+ne3rol
+ne3ros
+n3erts
+ne1ry
+1nes
+ne1sa
+ne3s4ka
+ne1sl
+ne1so
+ne1sp
+nes4sa
+nes4st
+ne3sta
+nes4tei
+nes3ten
+ne3str
+nestudi3
+1net.
+net3ac
+net3am
+ne4tec
+4n3e4tenl
+netes3
+ne4tet
+net3ha
+1neti
+ne4tin
+ne1tj
+net3on
+ne3top
+net3ov
+1netr
+net3spa
+1nett
+2netu
+1netw
+ne3um.
+neu3ra
+neu3ro
+neu4t3jes
+ne4val
+ne4zel
+1neï
+1ne-
+n1f
+nfra4m
+n2gac
+n2g1a2d
+n2g1af
+n2g1ak
+ng3ala
+nga3sl
+ng1d
+nge4ant
+ng3eig
+nge3las
+nge4n3ar
+ngen3st
+ngeper4s3
+nge4ras
+n2g1ij
+n4gind
+n4g3inf
+ng3ink
+n4g3inr
+ng3ins
+n4g3inz
+ng3lad
+ng3lan
+ng3lee
+n3gleu
+n1glu
+n1g2oc
+n2g1of
+ng1om
+ng1on
+ng1op
+ng1ov
+n1go'
+ng3rac
+ng3rad
+ng3rai
+n3gred
+ng3rie
+ng3rin
+ng4s3eco
+ng4sen
+ngs3lop
+ngs3lu
+ngs3ne
+ngs3po
+ngs3tak
+ngs3tek
+ngs3tem
+2n1h
+nhaat3
+nhap1
+1ni.
+1nia
+ni1ak
+1nic
+1nid
+1niek
+nie3kw
+nie1n
+1nier
+nier3o
+niet3st
+ni2ga
+ni4g3ee
+3niger
+3night
+1nigt
+1nij.
+1nije
+nij1f
+nij4pr
+4nijs.
+3nijve
+2n1ijz
+ni1kl
+ni3ko
+1niks
+nik4s3te
+1nil
+1nimf
+n1imp
+1nin
+n1inb
+2n1ind
+2n1inf
+4n3ingan
+ning3r
+2n1inh
+n1inj
+4n3inko
+n1inl
+2n1inr
+2n1ins
+2n1int
+2n1inv
+1nio
+ni1ok
+ni1ol
+ni4one
+ni1or
+ni2p1l
+nip1s
+1niq
+1nir
+nir1s
+3nis
+ni4s3ec
+ni4sei
+ni4s3el
+ni3she
+ni2s1i
+ni2sl
+nis1n
+nis1p
+nis4taa
+1nite
+ni1th
+5nitieerde
+nit1j
+ni1to
+ni1tr
+nits2
+1niu
+1niz
+ni2é
+1nië
+n1j2
+nje3tj
+2nk
+n1ka
+n4k3aan
+n4keen
+n2k1em
+nking4
+nk3inh
+n1kle
+nk3lij
+nk1lu
+nk3nab
+n1kni
+n1kno
+nk2nu
+nk3o4ge
+nk3rel
+nk3ren
+n1kru
+nk1s2c
+nksce4
+nk1sl
+nk1sn
+nks3om
+nk1sp
+nk1s2t
+nk3tan
+nk1to
+nk4tre
+nk4t3ro
+nkt1s
+n1ku
+nk3uit
+n1l
+nlaat4j
+2n1m
+nmes1
+n1n
+nna1s
+nn2e
+nnee3t
+nnepo4
+nne4p3ol
+nno1v
+1no.
+no1a
+1noci
+1no1d
+2noef
+noek3s
+noen3s
+noep3s
+noes3t
+noet3j
+no1fo
+no4gal
+n1o2gi
+1nogr
+1noi
+no1ka
+no1kr
+no1kw
+no1la
+no4lie
+1n2olo
+n1om.
+1noma
+1nome
+n1omg
+1nomi
+n1omk
+n1oml
+n1omr
+n1om1s
+n1omv
+n1omw
+n1omz
+1non.
+1nonb
+1nonc
+2n1ond
+n1ont
+1nood1
+n1oog
+1noot
+1n2o1pa
+n1opg
+n1oph
+n1opm
+n1opn
+n1op1r
+n4opte
+n1opv
+2n1opz
+1nora
+n1org
+1norm
+4norre
+1nors
+nor1t
+1nos
+no1sa
+no1sf
+no1sh
+nosi2
+no1sn
+no1sp
+1not
+no1ta
+no4teb
+no1th
+1nou.
+n1oud
+1nova
+3novee
+n3overs
+1nox
+1n2oz
+1noë
+1noï
+1no'
+1no-
+2n1p2
+npoort3j
+n4puts
+n1q
+2n1r
+nrif1
+nri1o
+nroes3
+2ns
+ns1aa
+n1sab
+ns1ad
+n1sag
+ns1ak
+n1sal
+n1sam
+ns3ang
+n1sap
+ns1av
+nsbes4
+n1sc
+ns4cal
+nscenari3
+n2s1co
+n2scu
+n2s1ef
+ns2ei
+n4s3eil
+n4s3eis
+ns3emp
+nse4ne
+ns4ham
+ns3he
+ns1hi
+n1si
+ns3ink
+nsi4tes
+ns1ja
+ns4kri
+n3slaa
+ns3laag
+ns3lap.
+ns3lapp
+n3slee
+n3slep
+ns3let
+n3slim
+n3slip
+n3sloe
+n3slop
+ns3lot.
+ns4mak
+n3s4med
+n3s4mel
+ns1na
+n1sne
+n3snoe
+n1soe
+ns1of
+n1sol
+n3som.
+ns3ong
+ns3onw
+ns3onz
+ns4opp
+ns3ork
+n1sou
+nsour4
+n3span
+n3spec
+n3spel
+ns3ple
+n3s4poe
+n3sprak
+nsregi3o
+nss2
+n1sta
+nst3aang
+nst3aans
+nst3ac
+nst3afd
+n1ste
+n4stec
+n4s3teel
+n4st3ei
+n4s3teko
+n4s3teks
+n4s3tes
+n4st3e4v
+n1s2ti
+nst3ing
+n3stom
+nst3opl
+n3stor
+n3sto3v
+n1str
+ns3troe
+nst3roos
+n1stu
+nstudi3o
+nst3uit
+n2sty
+n1su
+ns3uil
+n4suit
+n1sy
+2nt
+n1ta
+n4taanv
+n4t3aard
+ntaar3t
+n2t1a2d
+nta4ke.
+n4tamb
+nt3ana
+n1te
+nt3een
+nt3eig
+nte3la
+nte4nen
+nten3s4
+nte3rad
+nter3ap
+nt3erf.
+nt3erfd
+nt3erft
+nte3so
+nte3sp
+ntes3tat
+nte3sti
+nte3str
+nt3han
+n3t4her
+n3thol
+ntie3s
+n4tind
+n4t3ins
+n1to
+n4t3o4li
+ntoor3
+n4t3opl
+n1tr
+nt3raf
+n4t3rij
+n4t3rol.
+nt3room
+nt3rui
+nts1a
+nt1sl
+nt4sle
+nt3soo
+nts3pre
+nt3ste
+nt3s4ti
+n1tu
+n4t3uit
+ntu2n
+ntune4
+nt4win
+n3t4wis
+n1ty
+1nu.
+1nu1a
+1nub
+1nuc
+1nue
+nu1ee
+nu1en
+nu1er
+nu3et.
+nu3ett
+nu1fa
+1nug
+2n1uil
+1nuk
+nu1ka
+1nul
+1num
+1nunc
+n1uni
+1nuri
+nu1ro
+nur4se.
+1nus1
+nu4ter
+nu1tr
+nuts3t
+1nuw
+nuw1a
+nu2w1i
+1nu'
+n1v
+nve3lo
+nve2r1
+2n1w
+nwa2v
+nwer4kr
+nwes1
+nx1a
+n1xe
+nx1o
+1ny
+2n1ya
+2n1y2i
+2n1yo
+n1z
+nzet3j
+nzet3s
+1ná
+1né
+n1éé
+n1-
+o1aa
+oad1s
+o1af
+o1ag
+o1a2k
+o1a2m
+o1an
+oap1
+o1app
+oa2r
+o1ass
+o1au
+o1av
+o1ax
+o1a2z
+obal4t
+1obj
+ob3oor
+obo2r
+ob3ore
+1occ
+1o2cea
+o1cha
+o1che
+o1chi
+o1chl
+o1cho
+o1chr
+o1chu
+oci1a
+3ocides
+o1co
+oct2
+od1ac
+od1ad
+od1ar
+o3de.
+odel3s
+ode4m3ar
+ode4mat
+ode4mon
+ode1o
+ode3ra
+ode1s2
+2odi1a
+odie3t
+2odir
+od3ong
+od3ons
+od3op.
+od3ord
+2odr
+od1re
+od1ri
+od1s2c
+od1s2i
+ods3lam
+od3sli
+od3slo
+od3spo
+ods2t
+od3s4ta
+ods3te.
+od3sti
+od3str
+od1ui
+od1w
+2ody
+o2e
+oe1a
+oe4d3aa
+oe4d3a4d
+oe4d3ar
+oede3s
+oedo2
+oe4d3og
+oe4d3on
+oe4dop
+oe4dov
+oe2d1u
+oe2d3w
+oe2fa
+oe4fin
+oef3la
+oef3le
+oe3flu
+oe2f1o
+oef1r
+oe2f1u
+oege3l
+oe4gij
+oeg1l
+oei1s2
+oek3ac
+oek3ar
+oe4k3erk
+oe4kil
+oe2k1l
+oe4k3op
+oek3ra
+oek3re
+oek3ri
+oek3we
+oe3lak
+oe3las
+oel1d
+oel3ein
+oe3lon
+oe3lop
+oel3ov
+oel3sp
+oe4m3ac
+oe2m1o2
+oem1s
+oen3ac
+oe3nee
+oen3el
+oe1ni
+oe4nink
+oen3sl
+oen3spar
+oen3sto
+oen1t
+2oep
+oe4p3ac
+oep3ind
+oe2pl
+oep3lu
+oe2p1r
+oep4s3e
+oe2p1u
+oer3aa
+oe3rak
+oer3a4l
+oe3ras
+oer3ei.
+oe4r3el
+oe3re4n
+oer1k
+oero2
+oer3og
+oer3om
+oer4so
+oer4spi
+oer4s3te.
+oer3str
+oer4su
+oer4th
+oe1ru
+oes1a
+oe1sl
+oe4s3li
+oe1sn
+oe1sp
+oes4tal
+oe3taa
+oet3ac
+oete3s
+oet1h
+oe4tij
+oet1o2
+oets3l
+oet3sta
+oet3sten
+oe4t3ui
+2oez
+2ofa
+of1am
+o1fan
+o1fas
+of1a2t
+of1au
+of1a2v
+ofd1a
+of4da4g
+of4dan
+ofde2
+of4d3ei
+of4d3el
+ofd3on
+ofd3oo
+ofd3re
+ofd3ri
+ofd3ro
+of2d1u
+ofd1w
+3offens
+of1l
+o1foe
+of1om
+of1ox
+of1ri
+of1ro
+ofs1i
+of1s2m
+of1sn
+ofs3pl
+of3ste
+of3sto
+ofs3tra
+of4tij
+of1tu
+of1ui
+og1af
+og3al.
+og1ap
+og1au
+og1dr
+og3ede
+oge4l3ei
+oger3o
+oge4s3t
+ogie1
+1ogig
+og1la
+og1le
+og1lu
+og1ov
+o1gr
+o4g3red
+og3se
+og4ser
+og3stan
+ogst3ap
+og1ui
+o1h
+oi1a
+oi1e
+oien1
+oi1k
+oi1l
+oi1o
+oi1p
+oi1sc
+oi1sp
+ois2t2
+oi3ste
+oi1su
+oi1t
+o1j
+oj1k
+okaal3
+o4k3aas
+o2k1ac
+ok3ank
+ok1au
+o2k1a2z
+o2k1ef
+ok1ei
+o2kes
+o3kie
+ok1j
+ok1lo
+ok1lu
+ok1n
+ok1on
+ok3op.
+o2k1ou
+ok1ri
+ok1ro
+ok1s2a
+ok1sc
+oksi2
+ok1sl
+ok1sn
+ok1so
+ok3spe
+ok3spi
+oks3po
+oks2t
+ok4s3te.
+ok3sti
+ok3sto
+ok1ta
+okter4s
+ok1to
+oku2
+ok1ur
+ok1uu
+ok1we
+ok1wi
+o1la.
+olaat4
+ol1ac
+ola2g
+ol1a2p
+ol3arm
+ola3s4m
+ola3tr
+ol1au
+2ol1d
+old2w
+o1le
+o2l1ei
+ol3eks
+olen3s
+ol2er
+ole3ro
+oleu2
+ole3um
+olf1l
+ol4g3ri
+ol2gu
+o1li
+olie3s
+o3lig
+oli1k
+o3lit
+ol4k3ac
+ol1kl
+ol1kw
+olmana4
+o1lo
+olo1f2
+5ologiseerden
+olok2
+ol3op.
+olo3s4t
+ol1pa
+ol1pi
+ol1po
+ol1sc
+ols1h
+ol1sj
+ol1sl
+ols4n
+ol1sp
+ols2t
+o1lu
+ol3uit
+1olus
+o1lè
+omaat3
+om3act
+om1af
+oma2g
+om1au
+om1av
+2ome
+o2m1ef
+omen4s3
+omer3sp
+om3eti
+omie1
+o4m3ins
+ommana4
+omme3s
+omo1s2
+omo1v
+om4p3ei
+om3soe
+om3soo
+om3sto
+om1ui
+1omze
+2ona.
+on3aar
+on1a2b
+on1ac
+o2naf
+o1nal
+on3all
+on3ame
+on1ap
+o1nas
+o1nat
+ona3th
+on3att
+2o1naz
+on1c
+ond3ac
+3onderz
+ond3ete
+on4dex
+on4d3ij
+ond3om.
+ond3op
+ond3re
+ond3ro
+ond3sj
+o1ne
+o2n1e2c
+one2d
+on3ede
+on3eet
+on1ef
+o2n1ei
+one3la
+on3erv
+on3est
+on1e2v
+o2nex
+4ong.
+ong3aan
+on3gla
+ong3li
+on4g3oe
+on1gr
+ong3sp
+ong3st
+o1ni
+on1i2d
+onie3t
+onig1
+on4k3ac
+on4k3ap
+on1kn
+on1kr
+on1kw
+onne3s
+o1no
+on1oe
+on3off
+2onom
+on3opl
+on3opt
+on2or
+on3ord
+on3ort
+on1ou
+o2n1ov
+on3se
+on4sem
+on2sj
+on3sla
+ons3le
+on3sor
+on3spo
+on3spr
+on1st
+on4t3aar
+1ontd
+on4t3erv
+1ont1h
+on4t3id
+onto3v
+ont3rade
+on4t3rem
+ont3rie
+on4t3rom
+on4t3ru
+ont1s2
+1ontw
+o1nu
+on1ui
+on1u2r
+1onvr
+o2o
+oo3c
+oo2d
+ood1a
+ood1e2
+ood1i
+ood3ox
+ood1r
+ood3sl
+2oof
+oo3fi
+oof4str
+oo2g
+oog1a
+ooge2
+oog3ee
+oog3en
+oog1l
+oog1o
+oog1r
+oog3s4p
+oog3ste
+4ooi
+ook1a
+oo2ki
+oo2k1o2
+ook1r
+ook1s2
+ook1w
+ool1
+oola2
+oo4lij
+oolo2
+oo2m1a
+oome2
+oo2m1i
+oo2m1o
+oom1p
+2oon
+oon1a2
+oon1d
+oon1g
+oon1k
+oo2n1o
+oon3sp
+oon1t
+oop1
+oopa2
+oo4pee
+oo2pl
+oopo2
+oo2r
+oor1a2
+oor4don
+oor1e2
+oor1i
+oor1o
+oor3sma
+oor3st
+oor3to
+oor3tr
+oo2se
+oo2si
+oos1p
+oost3o
+oot1a
+oot3es
+oot1h
+oo2t1i
+oo2t1o
+oot1r
+oo2tu
+op3ach
+op3act
+op1ad
+op1af
+op3akk
+op1a2m
+op1an
+op3arc
+op3at.
+op3atl
+op3att
+o1pea
+o1pee
+op3een
+op3eet
+o1pek
+o1pel
+o4p3elp
+3o4peni
+3opera
+o3perd
+o3pere
+o1pe2t
+op3ete
+o1peu
+op1e2v
+o1pi
+o2p1id
+opie3t
+op3in.
+o4pind
+op3ins
+op1j
+op1l
+op4las
+opoe1
+op1of
+o1pog
+o1poi
+op3ond
+op3ont
+op3oor
+op3opl
+op3ord
+op3o4re
+op3ork
+op1ov
+op3reg
+op3rie
+o3prij
+op3roe
+op3rol
+op3roo
+op1ru
+op1s
+ops2c
+opsce4
+ops2t
+2opt.
+o1pu
+op1ui
+o2p1un
+o1q
+o1ra.
+or3aalo
+o1rab
+or3act
+oradi3o
+or1af
+o1rai
+o1rak
+o4r3alg
+o1ram
+or3ana
+o3rand
+or1ap
+or1as
+or1au
+or1av
+o1rax
+o1ra'
+or4ce.
+ord3aa
+or4denve
+ord3ond
+ord3oo
+ord3or
+or1dr
+ord1w
+o1re
+2ore1a
+2orec
+2oreg
+o2reh
+ore1k
+oren3o
+oren3t
+2orep
+ore3s4p
+o2re-
+orfiet3
+or1fl
+or1fr
+org1l
+or2gu
+o1ri
+o3ri.
+orie3t
+o4r3ind
+o4r3ink
+or3ins
+o4riël
+or1ka
+or1kl
+or1kn
+or1kw
+or4m3ei
+orno3s4
+or1oe
+o1rof
+or3o4li
+o3roll
+2orom
+or1on
+or4ona
+or1oo
+or1op
+or1or
+o1ros
+or1ou
+or1ov
+orp4sc
+orradi3o
+or3saa
+or3s2c
+or1si
+or1sl
+ors4maa
+or1sn
+or4son
+or1sp
+or3str
+ort3aan
+ort3ak
+ort3ass
+ort3een
+orte3na
+ort3ha
+ort3ond
+ort3oo
+ort3sp
+or1ui
+oru2m
+2o1ry
+os1aa
+os2af
+o1sau
+o1sc
+1o2sci
+os2cl
+o4scoopd
+os2cr
+o2scu
+o2s1ei
+ose2t1
+o2se-
+o1s2fe
+o1shi
+o1si
+osi1t
+os1j
+os1l
+osli2
+osmo1
+os1na
+o1s2o
+oso1p
+os1pa
+os3per
+o1spo
+os3pri
+ost3ac
+ost3age
+o3stat
+os1te
+os4tem
+o3s4tim
+os2tj
+ost3ri
+o3stru
+os3tur
+os3tuu
+o1sty
+os1ui
+o1sy
+5osyncrasieë
+o1ta.
+ot3aar
+ot3ach
+ot1af
+o1tag
+ot3akk
+ot3akt
+o1tam
+o1tan
+otan3s
+o2t1a2p
+ota1s2
+ot3as.
+o1tat
+ot1av
+ot1ay
+o1te
+3otech.
+3otechb
+o2t1ei
+o2tej
+ote4lan
+ote4lu
+oten3s
+o3ter
+oter3s
+ot3eta
+ot1ha
+3otheco
+o1thi
+ot3hou
+ot1j
+otje3sp
+o1to
+ot3off
+ot2on
+otoot4
+ot3opm
+oto3po
+oto1s
+ot1ou
+oto3ve
+ot3rec
+ot3red
+ot3res
+ot3rij
+ot3rit
+ot3ron
+ot1ru
+ot1sc
+ot4sei
+ot1si
+ot3s4mo
+ot1sn
+ot1so
+ots3pa
+ot3spl
+ot3spo
+ot3spr
+ot3sta
+ots3tek
+ot3stel
+ot3s4ten
+ot2tw
+o1tu
+ot1ui
+o1ty
+2ou.
+ou1a1
+ou1c
+ou4dez
+ou1e
+ou1k
+ou1lo
+ou1po
+ou1ra
+ou4r3env
+our1k
+our1o
+our1t
+ourw2
+ou1sa
+ou2s1c
+ou4set
+ou2sp
+ous1t2
+out1h
+out1j
+ou2t1o
+out1r
+out3sp
+out3sta
+out3ste
+o2veg
+oven3t
+ove4rat
+3overg
+ovide3o
+o1vo
+2ovs
+o1wa
+o1we
+owes1
+o1wi
+ow1r
+ow1s
+ow4set
+oy1eu
+o1yo
+oys2t
+o1z
+o1ë
+oë2ma
+o1ï
+o1ö
+o1ñ
+o2'
+o1-
+1pa.
+1paal
+4p3aanv
+paar5du
+3paarf
+paar3t
+1paas
+1pab
+pa2ce
+pacht3s4
+2p1adv
+2p1afd
+2p1afs
+1pag
+pa4gen
+pa4gers
+2p1agg
+pa1gh
+pa1go
+pa1gr
+1pai
+1paj
+pak1a
+p3akko
+pa2kl
+1pal.
+pa1la
+2p1alb
+1pale
+pal1f
+palle4
+1palm
+pal4m3ac
+pal4mo
+pal4t3r
+pa1lu
+pa3nac
+pan3a4d
+pa4n3ame
+3pand.
+pan4ded
+pa1ne
+3panee
+3panel
+2pan1k
+pa1no
+pan3sp
+pant3j
+pa1pa
+1papi
+pa2p1l
+p1apn
+p1app
+pa1pr
+4par.
+1para
+par1d2
+1park
+par4kl
+1parl
+2p1arm
+pa1ro
+par3ta
+part3j
+3partn
+4parts
+pa3ru
+1pas1
+pa1sa
+pa1s2o
+pas4th
+pata2
+1pa3te
+pa4t3enta
+1pa1t2h
+1pa1tr
+pats3te.
+1paud
+2p1aut
+1pauz
+1pav
+pa2vl
+1pax
+1paz
+1pa'
+p1b
+pbe2a
+p1c
+p1d
+pdan4c
+pda4te.
+pda4tes
+pe1an
+1pech1
+peci3es
+p1e2co
+3pect.
+3pecten
+1ped
+peer1
+1pees1
+pe1f
+1peg
+pe1go
+1pei
+2p1eis
+pek3ac
+pe1kl
+pe4k3la
+pek1n
+pek1s
+pel3ac
+pel3ak
+pe3lar
+pel3do
+pe4l3el
+pe4l3e4t
+pe5l4i
+pel1k
+pel3sl
+pel3sn
+pel3so
+pel3sp
+2p1emm
+1pen.
+1pena
+pe3nad
+pe3nal
+pen3ang
+pe3nat
+pen3a4z
+5penbaard.
+3penbaart
+p3ency
+3pend.
+3penden
+pen3ei
+1penf
+1peng
+1penh
+pe1ni
+1pen1k
+pen1o
+1penp
+1penr
+pen4se.
+pen3sl
+pen3sm
+pen3sn
+pen3so
+pen3sp
+pen3st
+pen1t
+pen4tho
+1penv
+1penz
+1pep
+peper3s
+2p1epi
+pep1s
+1p2er.
+pe1ra
+pera3s4t
+pe4rau
+1perb
+1perc
+pe4r3eg
+1perg
+1perh
+1peri
+1perk
+per3of
+pe3ron
+1perp
+1p2ers
+1pert
+1perz
+1pes
+pes2c
+pes3ten
+pes4th
+pe1ta
+3peter
+pe1tj
+pe1to
+pe4t3ra
+pets3t
+1peuk
+pe1um
+1pez
+p1f
+p1g
+pge3la
+pge1n
+pge1r
+p1h
+1p2his
+1pia1
+pi1ad
+pi1as
+1pice
+2pidp
+3piek.
+3pieke
+pie4kla
+pier3s
+pies3p
+pies3t
+pi1eu
+1pig
+pi1go
+1pije
+pij1k
+pij4li
+1pijn
+1pijp
+pij4p3a
+pijp3l
+2pijz
+1pike
+pi4ke.
+pi4kes
+pi4kor
+pik1s
+pi1la
+pi4l3in
+1pi1lo
+pin3aar
+pi4nap
+pin1d
+3pinda
+1p2ing
+2p1inj
+1pink
+pin3kl
+pin4ko
+pink3r
+pi1no
+2pinr
+2pins
+pi1o
+1pip
+3piram
+1pis
+pi1sa
+pis1n
+pi1th
+pit1j
+pi1to
+pit1r
+pit3sten
+1piz
+p1ja
+pje2s1
+p1ji
+p1jo
+p1k
+pl2
+1pla
+p1la.
+plaats5te.
+2p1lad
+4p3lang
+2p1lap
+plas3t
+p2lat
+pla4te.
+plat3j
+plat3r
+1p2lec
+2p1lep
+1p2lex
+1plez
+p1lid
+pli3er
+2p1lig
+2plij
+pli1o
+1ploe
+p3lone
+4p3lood
+p3loon
+plo1r
+4p3luie
+p1m
+pmana4gem
+p1n
+3p4neum
+1po.
+1poc
+1po1d
+2poef
+1poes
+poes3t
+1poet
+1poez
+po1g
+1pogi
+po2k1i2
+pok1s
+1pol
+po1la
+po4lep
+polo3v
+pol4s3t
+1pom
+pome1
+2p1oml
+pom3pj
+2p1oms
+3ponds
+1pone
+1poni
+pon4se.
+pon4s3te.
+1pony
+4poog.
+1pool
+4poor.
+4poord
+pop3ar
+po3pe.
+pop1i
+po4pin
+po1po
+po2p1r
+1po1ra
+2p1org
+2pork
+po1ro
+3portef
+por3tje
+port3ov
+3portr
+port3ra
+port3s
+po1ru
+1pos
+po1sa
+po1sf
+2poss
+pos3taa
+post3re
+po1su
+potes3
+pot4ha
+po3the
+1poti
+1potl
+po2t1o
+pot1r
+pot1s
+1pou
+1pow
+1poë
+1po'
+p1p
+ppe1k
+ppe4l3o
+ppel3sm
+ppie1
+p1q
+1pra.
+p3raad
+praat3
+p1rad
+3prakt
+2p1ram
+2p1rap
+pra1s2
+1pred
+4preeku
+1pref
+preid3s
+p3rem.
+p3remm
+3prent
+prent3j
+p3reso
+1pret
+pre4t3j
+1prev
+2p1ric
+4p3riek
+3pries
+priet3j
+prij4st
+1prik
+3princ
+4pring
+3prins
+1pri1o
+1pris
+1priu
+1prob
+1proc
+1prod
+4p3rode
+p3roed
+3proef
+proet3j
+3proev
+1prof
+1prog
+1proj
+2prok
+1prom
+4p3rood
+1prop
+pro3pa
+pro3pe
+1pros
+pro4sce
+pros3p
+pro4s3t
+3proto
+p1rou
+1pro1v
+pruit3j
+pru2t
+prut3o4
+pr2z
+1prè
+ps1aa
+p2sac
+ps1a2g
+ps3akk
+p2s1am
+ps1ar
+ps1as
+p3schr
+2pse
+ps3ern
+pses1
+ps3eth
+p2she
+ps1hi
+ps1i2d
+pside3
+p1sil
+ps3ink
+ps1j
+p2sk
+ps4lag
+ps4mee
+p2smi
+ps3neu
+p2s1of
+p1sol
+p1soï
+p1spi
+ps3ple
+p4spog
+p3stat
+p3stee
+p3stem
+p3ster.
+ps3tes
+ps1th
+p3s4tic
+psto3v
+ps3trot
+p1sus
+p2sw
+1psyc
+p1t
+p2t1ad
+pt3akk
+p4t3alb
+ptea4se.
+pten1
+pte1p
+pter3o
+pte1s
+p2t1h
+pt1j
+p2tl
+p2t1ov
+pt1sc
+pt3ste
+p2tv
+1pub
+pu1ch
+pu1e
+pu1lo
+pul4st
+1pun
+punt3j
+pu1ra
+pur4t3j
+pus2h
+pu3she
+1put.
+put1h
+1put1j
+pu2t1o
+put1r
+puts3t
+p1v
+p1w
+1py
+py1l
+p1z
+pzet1
+1pé
+1pè
+1pê
+p1-3
+qu2
+4quits
+2quiv
+4raalo
+raam1
+raan1
+4raanb
+4raang
+4raanl
+4raant
+raap1
+1raar
+4r3aard
+raat3j
+1rabi
+ra2b1l
+1raby
+r2ac.
+ra2ca
+ra4ceb
+ra4cek
+ra4cet
+1racl
+ra1da
+ra4dap
+1radb
+ra4dede
+3radend
+r1adm
+r1adr
+1rads
+rad3sp
+r1adv
+raf1a
+ra2fu
+1ragd
+rag1l
+ra1go
+ra1gr
+1rais
+ra1ka
+raket3
+ral3ee
+r1alf
+4r3a4lim
+r1alm
+ra1lo
+1ra1lu
+ra4mes
+r3a4meu
+3ramin
+ram4pa
+ramp3j
+ra3nat
+3rand3a
+ran4daa
+ran4dr
+rand3s
+ra1ne
+ran4ge.
+rang3o
+rang3r
+r3a4nij
+ra1no
+rans3p
+ran4s3t
+ran4su
+rant3j
+r3antw
+ra1o
+ra4pas
+rapo1
+3rappo
+rap3roe
+rap3sc
+rap3ste
+2r1arb
+r2are
+r3arit
+2r1arm
+ra1ro
+r1arr
+r1art
+1rasa
+1rasg
+1rask
+1ras1l
+ra1sn
+ra1so
+rast3ri
+ra1su
+ra1ta
+ra1th
+r1atl
+ra3tri
+rats3t
+1ratt
+3ravoe
+1ravr
+ra4zij
+raï2s
+1raç
+r1b2
+rbe2a
+rber3a
+rbe4raa
+r1c
+rce2a
+r4celi
+rces1
+rch3af
+rcu2s
+2rd
+rd3act
+rdags3
+rda2k
+rd3ake
+rda2m
+rd3ama
+rd1ap
+rd1ar
+rd3as.
+rd3ass
+r4deen
+r2d1ei
+rde3kl
+r4d3e4las
+rden3s
+rder3st
+r4d3erva
+rde3s4t
+rdi2e
+r4d3ijz
+rd3o4li
+r1don
+r4d3ont
+rd3opt
+rd3rea
+rd3res
+rd3rod
+rd3rol
+rd1sc
+rd1sj
+rd1sl
+rd1sn
+rd1so
+rd1sp
+rd3ste
+rd3sto
+rd3str
+rd1su
+r4duit.
+r2d1wo
+re1al
+re4all
+re3amb
+re1an
+reau1
+1recl
+1reda
+1redu
+reed3a
+ree4du
+reek3r
+2reen
+4r3eers
+ree3sh
+2reeu
+reewa4
+re1fa
+2reff
+1re1fl
+re1fr
+2reg.
+3regel
+rege4s3
+1regi
+1re1gl
+re4go.
+2reie
+2reil
+4reind
+1reis
+4reise
+1reiz
+3rekeni
+re4k3la
+rek3lu
+rek1n
+re3kra
+rek3re
+rek3spr
+rek4th
+re3kwi
+re1la
+re4l3ac
+rel4dec
+rel4di
+reld3o
+rel4d3r
+rel4duu
+re4l3ei
+4r3e4lem
+rel1k
+4r3ellenw
+re3log
+re3lon
+rel1s
+re4mai
+remie3tj
+remo3v
+1r2en.
+ren3aar
+re4n3a4g
+re3nal
+ren3an
+re4n3a4r
+4r3endert
+ren3ei
+ren3el
+ren3enk
+ren3erf
+4reng.
+4rengd
+4rengt
+2r1eni
+re3nie
+re4n3in
+1renn
+re3nomm
+2r1enq
+4r3entac
+ren3th
+4r3en3tw
+4r3envee
+re5ografieë
+re1ol
+3repert
+re1ps
+re4rens
+2r1erf
+2r1erg
+re5rij
+re1ro
+2r1ert
+2r1erv
+2r1erw
+re4scrip
+re5script.
+re1si
+res3le
+re1so
+res1p
+res3ta
+res3te
+res3th
+re3stra
+re4sui
+re1ta
+re4tag
+re4tap
+re4tem
+re3tha
+re4tik
+re1tj
+2retn
+1re1to
+re4t3o4g
+rets2
+ret3sk
+reu4ko
+reuk3s
+re3um.
+reu4t3je.
+3revis
+1revo
+rewa2
+1rexa
+reü1n
+r1fa
+rf1aa
+rf1al
+rf1do
+r4f3eng
+rf3lag
+r3flap
+rf3lee
+r3flen4
+r3fles
+r2f1li
+r1flo
+r1flu
+r1fo
+r2f1oo
+r2fop
+rf3ren
+r1fri
+r3from
+r3fron
+rfs2
+rf1sm
+rf1so
+rf1sp
+rfst3aa
+rf3ste
+rf3sti
+r2f1uu
+r2g1ab
+r2gac
+r2g1ah
+rga4me.
+rg1dr
+rge2a
+r2g1ei
+rgel3ac
+rges2
+rg3etap
+rgeto3
+r4g3ins
+r4g3inv
+rg3loo
+rg1lu
+r1go
+r2g1op
+rgo1v
+r1gr
+r4g3rit
+rg1sc
+rg1s2o
+rg3spo
+rg1st
+r1h
+rhoud4s
+ri1ab
+ri1ad
+ri1ak
+ria1p
+ri1ar
+ri1as
+ri2bl
+1ridd
+rid2g
+3ried.
+3riede
+riek3ap
+rie3kw
+rie4laa
+rie4lei
+rie4pac
+rie3so
+rie3spa
+rie3sta
+riet3s
+ri1eu
+ri1fl
+r4ig
+ri4g3aa
+ri1go
+ri2j
+rijk4s3ta
+4r3ijl.
+4r3ijld
+4r3ijlt
+1rijm
+rij3pl
+4rijsd
+rijs3l
+r4ik
+ri4ke.
+ri4kes
+rik1l
+rik1r
+ri1lo
+2r1inb
+2r1inf
+r4ing.
+4r3ingan
+ring3l
+2r1inh
+4rinit
+4r3inko
+4rinni
+ri1no
+2r1inr
+2rins
+r3inst
+rin3tj
+2r1inv
+ri1oc
+ri1oj
+ri1om
+ri1or
+ri1ot
+2rir
+ri3sco
+ri4sei
+ris1h
+ri3sot
+ris3pe
+ri1su
+rit1j
+1ritm
+ri1to
+ri4t3ov
+rit3sp
+rit3sten
+1ritt
+ri4ve.
+ri4ves
+r1j2
+2rk
+rkaat3
+rk3adr
+r1kal
+r1kap
+rk3art
+r1kav
+r4keen
+rker4sl
+rker3st
+r4k3eth
+r2k1id
+rk3iep
+rkind4s3t
+rk3inh
+r4k3ink
+rk1j
+r1kle
+r3klok
+rk3lus
+r1kni
+r1k2no
+r1knu
+r2kob
+rk3omg
+rko3pe
+rk3ops
+r4k3ord
+rk3os.
+r1kr
+rk3rame
+r4k3rel
+r4kres
+rk3roos
+rk1s
+rks2f
+rk4s3li
+rk2sm
+rks2t
+rkt3erk
+rkt3evo
+rkt1h
+rk4tre
+rk4tri
+r1ku
+r3kwas
+rk3wil
+r1l
+rlate4
+rle4g3r
+rlies3
+rlink4s3
+rlof1
+rlos1
+rlo1v
+rl1p
+rlui3t
+rmana4gem
+r4m3art
+rmer3s
+rmes1
+rmet3s
+r4m3ont
+r2m1ov
+rm1p
+rm1sa
+rm1sp
+rm3sto
+rmte1
+r1na
+r2naf
+rna1l
+rn3ars
+rn1do
+r1ne
+rne2n
+r4n3ene
+rnes1
+rne4t3j
+rne4t3r
+r2nex
+rn1g
+r1ni
+r2n1i2d
+rn1k
+r1no
+rn3oef
+rn3ong
+r4n3oor
+rn1op
+rn1s2
+rn1t
+r1nu
+ro1ac
+ro1ar
+1rock
+ro1da
+ro1d2o
+ro1dr
+1roe.
+2roeg
+roe4g3r
+1roem
+roens4
+roen3sm
+roep3l
+roe4rei
+roer3s
+roes3te
+ro3faa
+r3offi
+ro1fo
+rof1s
+rog1s
+ro2gu
+1roi
+ro1ka
+ro1kl
+1rokm
+ro1kr
+1rola
+1rolb
+1rold
+role3s
+1rol1g
+1rolh
+4roli
+1rolv
+1rolw
+r2oma
+r1omk
+2romm
+rom3sp
+r4on.
+ron3a4d
+r4onal
+ro3nau
+ron4da
+ron4dom
+rond3oo
+ron4d3r
+rond3st
+ron4d3u
+r2one
+3rongeh
+r1onp
+r2ons
+3ronsp
+ron4s3te.
+ront3j
+ron4t3r
+roo2
+rood1
+roog1
+2roor
+root3ste
+rop4e
+ro3pe.
+r3opna
+r2o1po
+rops2
+r4opte
+ro2pu
+r1opz
+r1org
+ro1ro
+ro3san
+ros2c
+ro1sf
+ro3sho
+1rosk
+ro1sn
+ro3spi
+ro3stel
+ro1ta
+ro3te
+ro1th
+ro1tr
+rots3te.
+rot3str
+1rotz
+r1oud
+1roul
+1r2out
+1roy
+roy3aals
+ro3y4eert
+ro3yer
+1roë
+1roï
+r1pa
+rp3aan
+rp3ank
+rpats3t
+r1pe
+rpe3lo
+rpe4ra
+r1pi
+rp1j
+r1pl
+rp3lans
+r1po
+rpoort3j
+r2p1ov
+r1pr
+r4p3rec
+rp3reg
+r1psa
+rp3sli
+rp3slo
+rp3sni
+rp3spe
+rp1s2t
+r1psy
+r1pu
+r1q
+r1r
+rregi3o'
+rre4l3u
+rre2n1
+rre1o
+rri3er
+rrie3s
+rro1v
+r1sab
+rs1a2d
+rsa2f
+rs1a2g
+rs1ak
+r1sal
+rs3amb
+rs3ana
+rs1ap
+rs1ar
+rsas1
+rs3asp
+r3sast
+rs1av
+r1sc
+rs4can
+r2sce
+r2sci
+r2scl
+rs4cre
+r2scu
+r4s3e4co
+r2s1e2d
+r2s1ef
+r4s3eis
+rsek2
+r4s3ell
+r4s3erva
+rseve5
+r4s3e4vo
+rs4fer
+rs3hin
+rshy2
+r1sim
+rs3int
+r1sir
+r3sjac
+r2s1je
+rs4kat
+r3s4kie
+r1sla
+r4slas
+r3slec
+rs3led
+r3sleu
+rs4liep
+r3slim
+r3sling
+rs3lob
+rs3loep
+rs3log
+r4s3loo
+r3slot
+rsmana4
+r3s4mee
+r3s4mel
+r3s4met
+r3s4mij
+r3s4moo
+r3sned
+r3snee
+rsnes3
+r3snij
+r3snoe
+r1sob
+r1soe
+rs1of
+rs1og
+r1sol
+r3somb
+r1son
+r4sond
+rs3ong
+r1soo
+rs3ord
+r1sou
+rs3paar
+r3span
+rs3part
+r3spat
+r1spe
+rs4pene
+rs4per.
+rs4pert
+r4s3pet
+r1spi
+r3spoe
+r3spon
+r3spoo
+r3spor
+rs3pot
+r3spraa
+rsregi3o
+r3sta.
+rs3taak
+rst3aang
+rst3ac
+r4s3tale
+r4stali
+r3stan
+r4s3tas
+r3stat
+r4stav
+r1ste
+r4sterm
+rste3s
+r4steva
+rs2ti
+r3stig
+r3stin
+r1sto
+rs4t3oc
+rst3ora
+rsto3v
+r3straa
+r3stral
+rst3red
+r3stree
+r3strek
+r3strep
+r3strij
+r3strom
+r1stu
+r4stun
+r1su
+r1sy
+2rt
+r1ta.
+r3taal3
+rt3aand
+r3taar
+r1tab
+r4t1a2c
+rt1ad
+rt3af.
+rt3afd
+r1tag
+r1tal
+r1tan
+rt3a4pe
+rt3a4re
+rt3art
+r3tast
+r3tati
+rt3att
+rt1au
+r2t1av
+r1te
+rteer3
+rt3eig
+rte4lei
+rte3no
+rte3ro
+rte3str
+r2t1e2v
+rt3han
+rt3har
+r3ther
+rt3hie
+rt3his
+rt3hou
+rties3
+r4tink
+r2tja
+rt3jesc
+rt3jesv
+r2tl
+r1toe
+rt3off
+r3tofo
+r1tol
+rt3om.
+rt3opb
+rt3ope
+rt3opl
+rt3ord
+r4t3org
+r3tori
+r1tot
+r1tou
+r3trac
+rt3ras
+rt3rec
+r3trek
+rt3res
+rt3rie
+rt3rij
+rt3rog
+rt3rus
+rt3sal
+rt1sc
+rts3li
+rts3oo
+rt3ste
+rts3th
+rt3sti
+rt3stoet
+rt3str
+r1tu
+r4t3ui4t
+r2tv
+r1ty
+ru1a
+1rubr
+rude3r
+ru1e
+2ruf
+rug1d
+ru2ge
+rug1r
+ruik4sp
+3ruimt
+ru2ka
+ru2k1i
+ru2k1l
+ruk1s
+ru4l3ij
+rum1a
+5rummanagem
+rune2
+runet3
+1rung
+2r1uni
+r2up
+ru2p1l
+1rups
+ru1ra
+ru2s1e
+ru1ta
+rut1j
+ruts3te.
+rut3sten
+2ruu
+ruw1a
+ru4wij
+1ruz
+r1v
+rval4s3t
+rver3a
+rver4s3te.
+rve3sp
+rvi2c
+rvide3
+r1w
+rwee2
+rwen4s3t
+rwer4k3r
+rw2t1j
+r1x
+ry1le
+ry1s
+r1z
+rzet3j
+rzit1
+rzoet3s
+ré1
+r1ç
+r1-
+1sa.
+1saag
+1s2aai
+saaie4
+s1aan1
+s1aap
+s2aat
+s1ac
+sa2ca
+2sach
+1s2acr
+sa1do
+1sae
+s1af
+sa1fa
+1safe
+sa4fe.
+sa4fel
+sa4fes
+1safo
+s1agg
+1sagi
+sa4gio
+1sagn
+sa1go
+1sah
+1sai
+1sake
+sa1kr
+sa1la
+3salad
+s1alb
+1s2ald
+s1all
+s1aln
+sa1lo
+1salp
+1sa1lu
+1s2ame
+1samm
+sa3nat
+1sand
+sa1ne
+sa1no
+san3sk
+1sant
+sant3j
+1sap.
+2s1a2pe
+s1a2po
+sap3rij
+sa3pro
+1s2ar.
+s1arb
+s1arc
+1sard
+1s2ari
+sari3o
+s1arm
+saro2
+sa3ron
+s1arr
+s2ars
+s1art
+sar3th
+s1as.
+sa1s2c
+sa1sl
+s1ass
+1sat
+sa1ta
+sa4teli
+2s1atl
+sa1tr
+2s1att
+s1aud
+1s2aus
+s1aut
+1sauz
+3savou
+1sax
+sa3y4eerde
+sa3yer
+2s1b
+2scab
+2scad
+2scaf
+2scam
+2scap
+sca4pe
+2scar
+2scat
+2sced
+2scel
+3s4cena
+2scer
+4schao
+1sche
+4schef
+4schemi
+4scheq
+1schi
+3schol
+3schoo
+3schot
+1schu
+2scij
+2scir
+s2cië
+4sco.
+2scod
+s4cola
+4scoll
+2scom
+2sco2n
+1scoo
+4scoopga
+4scoopro
+3scope
+sco4pe.
+sco4pes
+3scopi
+3score
+4scorp
+4scorr
+2scos
+2scoö
+4scrim
+4scris
+2scy
+1scè
+2s1d
+s3de
+s2dh
+sdi1a
+sdi1o
+1se
+se1an
+sear2
+se2at
+4seball.
+4seballd
+2s1ech
+2secz
+2s1edu
+4s3eenh
+see2r
+seer3i
+see3t
+2seev
+se1fa
+2s1eig
+seis4t
+se1kl
+se1kr
+sek4s3t
+se1kw
+sel3ac
+se4l3a4g
+sel3ak
+sel1d
+4s3e4lek
+se4l3el
+4s3e4lem
+se4lim
+4selix
+sel1k
+sel1o2
+sel1s
+se2l1u
+se4m3aa
+se4m3ac
+s1emm
+se4m3on
+se4m3oo
+se4n3a4g
+se3nan
+se3nat
+se3nel
+sen3e4t
+se1ni
+se4nin
+sen1k
+se2n1o2
+2s1enq
+sen1s
+sen3tj
+sen3tw
+senu2
+se1o
+se3rab
+ser2e
+se3ren
+4s3ergo
+2sern
+serna4
+se1ro
+ser4sp
+ser3st
+ser4tw
+se1ru
+se1sa2
+2s1e2sc
+se1s2f
+2se1sh
+2s1esk
+se1sl
+se1sp
+se3tan
+se4ter
+2s1e2ti
+setmana4
+set1s
+se1u2m1
+4s3even
+2s1ex
+2s1e2z
+2se-d
+s1f
+2sfa
+3s4feer
+2sfr
+2s1g
+sgeper4
+sgepers3
+sge1r
+sges2
+s1ha
+1s2ha.
+3s4hamp
+sha4ve.
+s1he
+sheids3
+1s2hes
+1shew
+s1hie
+s1him
+s1his
+sh1l
+2s1hoe
+s1hof
+s1hog
+s1hok
+s1hol
+2s1hon
+s1hoo
+sho4re.
+s1hos
+2s1hou
+s1hov
+1show
+s1hu
+s1hy
+1si.
+1si1a
+1sib
+1sic
+si2ch
+si4dec
+1s2ie
+sie3fa
+sie3kl
+sie1s4
+sie3ta
+sie3tj
+si1eu
+1si1f
+1s2ig
+sig1s
+s1ijv
+s1ijz
+1sile
+si1lo
+si4mag
+s1imm
+sim1p2
+1simu
+1sina
+s1inb
+2s1inc
+2s1ind
+2s1inf
+1sing
+4s3inga
+4s3ingeni
+sin3gl
+sin3gr
+sing4s3
+s1inh
+s1i2ni
+s1inj
+s3inko
+s1inm
+s2in2n
+sinno4
+sinnova4
+si1no
+2s1inr
+s1ins
+sin3tj
+2s1inv
+s1inz
+1sio
+si1og
+4s3i4ont
+si1or
+1siro
+s1irr
+1sis
+sis3an
+sise2
+si4s3ee
+si4sei
+si4s3el
+si2s1i
+sis1p
+3sit
+si4tem
+si1to
+sito3v
+situ1
+1siu
+1siv
+1siz
+1sië
+1s2ja.
+s1jaa
+1sjab
+1s2jah
+s2jal
+s1jar
+sj2e
+s1je.
+s2jee
+1sjei
+3s2jer1
+s1jes
+1sjew
+1sjez
+s2ji
+2sj1k
+sj1n
+1sjof
+1s2jok
+s1jon
+1s2jor
+3sjouw
+sj1s2
+sj1t
+sj2w
+s1k
+2sk.
+2ska1d
+sk2c
+skee3t
+s4kele
+1s2ki.
+skie1
+skies4
+ski3sc
+1skië
+1ski'
+s2k1j
+2sko
+sk1t
+sl4a
+1sla.
+3slaan
+3slaap
+s3laar
+s3labe
+s1lad
+1slag
+slag3r
+1slal
+sla4me
+s3lamp.
+s3lampe
+4s3land
+3slang
+3slape
+s1las
+2s1lat
+sla3tj
+1slav
+2slaw
+s3leden
+3slee.
+s3leef
+3sleep
+4s3leer
+slee3tj
+s1leg
+2s1lei
+s1lek
+slen4s3
+3slent
+s1ler
+s1les
+sle4t3j
+s3leug
+3sleur
+s3leus
+4s1lev
+sleve3
+s1lez
+s1li.
+1slib
+4slibe
+s1lic
+4s1lid
+s3lied
+s3lief
+s3liev
+s1lif
+s1lig
+s3lijd
+3slijp
+4slijs
+1sli2k1
+slim3a
+s3lini
+slip1
+s1lit
+slo2b1
+s1loc
+1slof
+s1lol
+s3lood
+s3loon
+s3loos
+3sloot
+1s2lor
+s1los
+slo4t3o
+s1lou
+slo1v
+s1luc
+4slui.
+3sluip
+3sluis
+3sluit
+3sluiz
+s1lus
+s1luw
+3smaad
+1s2mad
+3s4mak.
+3s4mal.
+3s4mald
+3s4mall
+3s4malt
+s4meed
+3s4meri
+s2meu
+3smid.
+smies3
+1s2mok
+3smolt
+3s4more
+3smuilt
+s2mul
+sn2
+s1nac
+s1nam
+1snap
+snap3s
+1s2nar
+s1nec
+snee3t
+s1neg
+1snel
+s2ner
+s1net
+s3neus
+s1nie
+s1nim
+1snip
+1snit
+2s1niv
+s1nog
+s1nom
+sno1v
+s1nut
+1so.
+1s2oa
+so1a'
+so2bl
+1so1c
+2s1o2ce
+1so1d
+s1oef
+1soep
+soep3s
+soes1
+1soez
+s1off
+1sofo
+1soga
+s1o2ge
+so1gl
+1sogy
+1soi
+1sok
+so1la
+1sold
+5soleerde.
+sol1s
+s1omg
+s1omk
+s1oml
+1s2omm
+s1omr
+s1oms
+s1omv
+s1omw
+s1omz
+1s2on.
+so1na
+s3onaf
+s1onb
+s1ond
+1sonn
+1sono
+2s1on2t1
+2s1onv
+soo2
+s1oog
+s1ook
+s3oor.
+s3oord
+s3oorl
+3soort
+s3oorz
+1soos
+s1op
+1s2op.
+2sope
+so1po
+3s4o3pra
+1sor.
+1sora
+so3raa
+so3ral
+so3rat
+1sorb
+1sorc
+s1or1g
+1sorm
+1sorn
+1soro
+1sorp
+1sors
+1sort
+1sorw
+so1sf
+s2ot
+1so1tr
+s1oud
+sou1t4
+s1ov
+1so'
+2sp.
+3spaak
+s1pad
+s1pak
+s1pam
+2s1pap
+3spar.
+4spara
+s3parc
+2spas
+s1pau
+1spe.
+1spea
+3s4peci
+1spee
+4spees
+speet3
+2spei
+1spek
+spe3lot
+s1pen
+4spen.
+4spenn
+4spens
+s3pera
+4speri
+4spers
+1spie
+spie3tj
+3spijk
+4spijn
+spi4nac
+spi4nak
+1spio
+3spiri
+2spis
+2spla
+spleet3
+s3plei
+spli2
+3s4plit
+s1plo
+s1plu
+1spoi
+1spok
+s4pon.
+3s4ponse
+spon4s3t
+s1pop
+3s4pore
+s4pori
+3spraak
+3sprak.
+3sprake
+3spray
+3spreeku
+3sprei
+4s3prem
+s3pres
+3spreu
+4spriem
+4s3prij
+3spring
+4sprod
+3sproei
+4sprog
+3sprok
+3s4pron
+3sproo
+s1ps
+2spt
+1s2pui
+spuit3j
+1spul
+1spur
+1spuw
+s1q
+s2qua
+2s1r
+2s1s
+ss2ac
+ss2af
+ssa1g
+ssa1s
+ss2ca
+sscenari3
+s2scl
+s2s2co
+ssei1
+sse3naa
+ss2i
+ssi4te
+ss2j
+s2sk
+sso1t
+ss2t
+s2sw
+4st.
+3staaf
+4staang
+4st3aanv
+4st3aanw
+staart3j
+st3abo
+2stac
+st3acht
+1s2tad
+4stafe
+sta4fo
+4stakk
+st3akt
+sta4lo
+s4talt
+s4tamp
+st3ana
+3standi
+s3tank
+3stape
+3star.
+4stari
+3statieri
+2s1tau
+s2tav
+1stay
+2stb
+2stc
+2std
+4stea
+4stech
+s4teco
+1sted
+steda4
+4stedu
+4steenh
+2stef
+1stej
+4stekam
+3stekk
+4steladm
+ste4lee
+st3e4lem
+s4tem.
+s4temm
+4stemo
+4stempo
+4stenu
+ster3ap
+4stermi
+s4terple
+3sterren
+ster4spo
+1stew
+2s2t1ex
+s2t1e2z
+2sth
+s2t1ha
+st3hec
+st3hed
+st3hek
+s3them
+st1hi
+s2t1ho
+s2thu
+st1hy
+2stia
+2stib
+4sticu
+s2t1i2d
+4stie.
+s4tiefe
+4stiep
+4sties
+4stiev
+4stijd
+s4tijf
+3s4tijl
+4st3ijs
+s4tikt
+s4tild
+s4timu
+s4t3ind
+4st3ins
+4s3tint
+s2tip
+4stite
+st1j
+s2tl
+2stoc
+4stoej
+3stoel.
+3stoele
+4stoen
+4stoes
+3stoet.
+4stoez
+1s2tof
+st3o4ge
+1s2tok
+s3toli
+4stomz
+3stonet
+s3tong
+4st3ont
+3stoof
+st3oog
+4stoon
+3stoot
+4stope
+sto4pl
+4stor.
+4stora
+sto4rat
+4st3ord
+3storm
+4storr
+2stos
+sto3ven
+2stp
+3straf.
+s3trai
+st3rec
+4stref
+4streg
+4s3trei
+3strel
+st3riek
+st3rif
+3strik
+3strip
+s3troep
+s3trof
+3strofs
+4s3trog
+3strok
+st3rol.
+st3roll
+3strome
+4stroos
+st3roos.
+s3trou
+4strui.
+4struim
+2st1s2
+2stt2
+1stua
+1stud
+1stue
+stuit3j
+1stuk
+stu2n
+st3uni
+3stunt
+2s2tv
+2s2tw
+s4tylen
+1su.
+3su1a
+1sub
+su2b1a2
+su2b1e
+su2bo
+su2br
+su2bu
+1suc
+1sud
+1sue
+su1ee
+1sug
+1suik
+s1uit
+s4uit.
+suit3j
+4suitl
+1suk
+su1ka
+1sul
+1sum
+2s1un
+3sun.
+su1na
+1suo
+1sup
+2s1upd
+supda4
+su1ra
+s1urn
+1surp
+1surv
+su2s1e
+su1sh
+suur1
+1suï
+suïsti4
+4s1v
+sve2r1
+sve3ri
+svete3
+svide3
+svoge4
+s1w
+1sy.
+2syc
+1syn
+sy1ne
+1sys
+2s1z
+1sé
+1sè
+2s1-
+taaie4
+1taam
+t3aando
+t3aanj
+t3aank
+4t3aanz
+2t1aap
+t1aas
+taat3j
+taats3t
+1taba
+t3a4bon
+ta4cad
+tac4to
+tac4t3u4
+ta4der
+2tadi
+2tadm
+ta1do
+t1adr
+tads3p
+1tae
+2taf.
+1tafa
+2tafd
+t3afde
+1tafe
+2t1afs
+4tafv
+t1afw
+t1afz
+ta4gent
+1ta1gl
+ta1go
+ta3gra
+1tah
+1tai
+ta1ka
+ta4kes.
+1takg
+3takken
+1tako
+1takp
+1tak1r
+1taks
+1tak-
+tal3ach
+ta3lact
+ta3lan
+ta3lat
+3tale.
+1talg
+3talig
+ta1lo
+ta1lu
+t3amba
+3tamen
+1tami
+t3ampu
+1tan.
+ta3nat
+tando4
+tan4dr
+tan4du
+ta1ne
+tan3gr
+1tani
+1tanj
+tan4ka
+tan4k3i
+tan4kn
+tan4ko
+tank3r
+t2ans
+tan4ste
+3tants
+1tanu
+1tao
+ta4pav
+ta4per
+1tapi
+tap3st
+1tapu
+2t1arb
+1tari
+2t1arm
+taro2
+tar3taa
+tart3o
+ta1sa
+ta1sc
+3tasj
+ta1sp
+ta3sta
+ta1ta
+3tate.
+3tateu
+ta1th
+4tatieri
+tat1j
+1ta1tr
+tat1s
+2t1aut
+t1avo
+1taw
+1tax
+tax3eer.
+tax3eert
+taï1
+1ta'
+1ta-
+2t1b
+tbaat3
+2t1c
+t2chy
+2t1d
+tdoe4l3
+tdo1v
+1tea
+te3akt
+tea2m
+te1an
+te3arc
+te3ari
+teau1
+1tec
+4t3echt
+t3e4dit
+t1e2du
+tee2k1
+tee2l
+teel3d
+tee2m1
+2tee2n
+t3eenhe
+1teer
+tee1t
+2t1eeu
+te1fa
+2t1eff
+tef3lo
+te1g
+2teig
+4t3eind
+2t1eiw
+te1ka
+3tekam
+3tekene
+3tekens
+2tekk
+te1kl
+te4k3om
+te1kr
+te3kwe
+tel3ac
+3teladm
+tel3ant
+tel3da
+3telec
+4t3e4lect
+tel3een
+3telef
+tel3ei.
+tel3eit
+3teler
+tele3s
+3telev
+tel1f
+tel1k
+tel3o4g
+te4l3oog
+tel3o4r
+te3lot
+tel3ov
+tel1s
+te4l3uu
+1temo
+te4mor
+3temper
+3tempo
+t2en
+te3nak
+3tenbu
+4t3endert
+ten3ed
+te3nee
+ten3ei
+ten3el
+4tenerg
+ten3e4v
+3tenfo
+te1ni
+4tenig
+3tenij
+ten3ijs
+ten1k
+1tenn
+te3nore
+ten3ov
+ten3sm
+ten3sp
+ten3sto
+tensu4
+ten4s3ur
+ten4s3uu
+4t3entac
+3tenten.
+3tento
+4t3entw
+1tenu
+1tenw
+1teo
+te1op
+ter3aak
+te3raal
+ter3af
+ter3ag
+ter3as
+te4r3e4d
+te4r3eik
+te4rel
+te4rem
+te4r3enk
+te4r3env
+4tereo
+te4r3eq
+4terf.
+4terfd
+4terft
+ter3gl
+te4r3ijz
+4teril
+te4r3in.
+1terj
+4terk.
+ter3ka
+ter3kl
+4terkt
+ter3kwe
+3term.
+3termi
+1tero
+ter3oc
+ter3of
+te3rog
+te3rol
+ter3ond
+te3ros
+3terrei
+4terren
+3terst
+ter3stru
+t3erts
+1ter-
+1tesa
+te3sap
+1tesg
+1tesh
+te1si
+1te2sk
+1tesl
+te3sli
+1teso
+te3son
+1tesp
+te3spi
+te3spo
+1tesr
+3test.
+te3stel
+tes3ten
+tes4tij
+test3on
+test3op
+tes4tr
+test3ri
+test3u
+1tesv
+1tesw
+1tesz
+te3tab
+4tete.
+te1th
+te1tj
+te1to
+teur3a
+2t1euv
+t3e4van
+4teven
+tever3
+1tevl
+1tevr
+2t1exe
+2texp
+2t1f
+2t1g
+tgea2
+tgeper4
+tgepers3
+tge1r
+2th.
+t1hak
+t1ham
+t1has
+3t2hea
+t1heb
+t3heer
+thee3s
+t1hef
+2t1hei
+1thek
+4t1hel
+t3hemd
+1then
+1theo
+3ther4a
+t3here
+3therm
+1thes
+1thet
+t1heu
+1theï
+t1hl
+2thm
+t1hoe
+t1hok
+t1hoo
+t3houd
+t3hout
+t1hov
+t1hoz
+th1re
+2ths
+t1hu
+1t2hur
+1thus
+thuts3t
+1ti
+ti1a
+tia2m
+tia4re
+ti1d
+ti4deo
+tie1d
+tie3fa
+tie1g
+tie3ka
+tie3kn
+tie4kon
+tie3k4uu
+tie3lop
+tie1p
+4tierf
+tie3ro
+tier3st
+tier4u
+4tierv
+tie3sl
+tie3sp
+tie1t
+ti1eu
+ti1fa
+ti3fe
+2tift
+ti4g3aa
+2tigm
+ti2g1u2
+3tijd
+tij4k3er
+tijk3l
+4t3ijs.
+tij3st
+tij1t2
+t1ijz
+4tijze
+ti1kl
+ti1kr
+tik1s
+ti1la
+ti4laa
+ti1lo
+2tils
+ti4med.
+t1imp
+tin3as
+4t3incu
+4tindu
+2t1inf
+tin4g3i
+ting3r
+t3inko
+2t1inl
+ti1no
+t1inq
+2t1inr
+4t3insl
+4t3insp
+4t3inst
+tint3j
+2t1inv
+2t1inw
+ti1pr
+ti1sa
+tis2j
+ti3sje
+ti1s2l
+ti3spe
+ti3sta
+ti3s4to
+ti3s4tr
+3tite
+ti1th
+ti1to
+ti1tr
+2tiv.
+t1ja
+tje2s
+t1jet
+1tji
+t1jo
+t2jok
+2tjon
+2tjou
+2tju
+2t1k2
+tkots3t
+t1l
+3t4lema
+tli2n
+tlo1v
+2t1m
+tmana4gem
+tmen4s3t
+tme3sto
+2t1n
+tne2r1
+tnes1
+1to.
+1toa2
+to1ac
+to1al
+to1ap
+to1ar
+1tobb
+1toc
+2tock
+1tod
+to1da
+to1do
+t3oefe
+1toej
+toe1k
+3toe3la
+1toen
+toe3nad
+toe3pl
+1toer
+1toe1s2
+toe3tj
+3toets
+1toez
+tof3ar
+tof3on
+tof1s
+tof1t
+to2fu
+to1go
+1togr
+1toh
+1toi
+to1ka
+to4kan
+tok1r
+tok1s
+to1la
+2t1olf
+1tolk
+tol4p3r
+2t1olv
+t1o2ly
+1toma
+t1oml
+tomp3j
+t1omr
+t1omz
+1ton.
+to1na
+t3onder
+1tone
+to4ned
+4to4net
+3tong.
+ton4gr
+1tonh
+1toni
+1tonn
+1tons
+tons3h
+ton3sk
+ton3th
+t3ontv
+4tontw
+4tonvr
+1tooi
+took1
+too2m1
+1toon
+to4p3as
+t3opbr
+2t1opd
+top4let
+2topm
+2t1opn
+top3re
+to3pri
+t3opru
+t3opto
+t3opva
+1topw
+1tor.
+to3raa
+to3rac
+to3rad
+tor3a4g
+to3ral
+to3rat
+3toree
+3torens
+4t3orga
+3toria
+tor4maa
+tor4m3ac
+3torno
+to3rom
+1torr
+1tors
+tor4s3te.
+tor3th
+tor3tj
+to1r2u
+1tos
+to1sa
+to1sf
+to1sh
+to1s2l
+to1sn
+to1sp
+1to1ta
+to1th
+to1tr
+tot1s
+2t1oud
+1tour
+tove3na
+to3verd
+to3veren
+4toverg
+to3veri
+1to1w2
+1tox
+toy1
+1toï
+1to'
+2t1p2
+tpla4c
+t1q
+4t3raad
+3tracé
+2traf
+3trafi
+3trafo
+1trag
+1trai
+1traj
+t3rake
+3trams
+3trans
+1trap
+trap3l
+4t3rat.
+3trato
+3tratr
+4tratt
+1trau
+t1raz
+1tre.
+t3reac
+4t3redd
+t3redes
+tree3tj
+1tref
+2t1reg
+tre4ko
+trek3st
+t3rese
+4t3resu
+1tre2t1
+1treu
+2trev
+t2re-
+t3rich
+3trico
+3trict
+trie3t
+tri3gl
+t3rijp
+trijs3p
+trijs3t
+1tril
+1tri1o
+trio4de.
+1tris
+t3risi
+t3rit.
+3triti
+1trië
+4t3roed
+4t3roer
+4t3roes
+4trofs
+4trold
+4t3rolt.
+4tromi
+t3rond
+3trone
+3trono
+4t3roof
+4troom
+3troon
+1tros
+tro3sp
+tro3t4j
+4trout
+tro1v
+4t3roven
+t2roï
+3truc.
+2t1rug
+3trui.
+3truie
+t3ruim
+trui3t
+2t1ruk
+2ts
+ts1aa
+ts1a2d
+ts1a2g
+ts1a2m
+ts1an
+ts1as1
+t2sca
+tscenari3
+t1sch
+t4sch.
+t2sci
+t2scl
+t3scou
+t4s3e4co
+tse2d
+ts3een
+t2s1ef
+t4s3ei.
+ts3eie
+ts3eil
+t4s3eind
+t4s3eis
+tse3la
+t4s3e4ne
+t2s1e2v
+t3shop
+ts1ij
+ts3ima
+ts3int
+tsi4te
+t3sjen
+ts4kel
+ts3lab
+t3slac
+ts3lam
+ts3led
+ts3len
+t3slep
+t3sloe
+ts4mel
+tsnes3
+ts3neu
+t3snij
+t3snoe
+ts1ob
+t1soe
+ts1of
+tso2l
+ts3oli
+ts1on
+ts4opp
+tso2r
+ts3ord
+ts3pac
+t3spec
+t3spel
+ts3pet
+t3spin
+ts3ple
+t3spor
+tss2
+t3staan
+t3staat
+t3staf
+t3stam
+t3stap
+ts3tas
+t3stat
+t3stav
+t3stee
+ts3teko
+t3stell
+t3stels
+t3stem
+t3stene
+t3ster.
+t3sterk
+ts3term
+t3sters
+t3steu
+ts4tie
+t3s4tijg
+ts4tik
+ts4tim
+tsto4f
+t3ston
+t3stoo
+ts3trad
+t3stral
+t3stree
+t3streke
+t3strep
+t3stri
+ts3troe
+t3stroo
+t3stru
+t1stu
+t4stui
+t4stun
+t4sw
+t1sy
+2t1t
+ttent3j
+tte1t
+tti4me.
+tt2l
+tto1v
+tt1uu
+tu1a
+1tub
+tu4bel
+tu1d
+tu1e
+tuf1
+1tuin
+tuin3s
+2tuip
+t3uitk
+t3uitr
+t3uitv
+t3uitz
+tu1ka
+tu2k1i
+tu2k1l
+tu2ko
+1tula
+1tule
+1tum
+1tune
+tu4nes
+tu4net
+1tunn
+tunt3j
+tu1o
+tu1ra
+1turb
+1tus
+tu2s1e2
+tu2si
+tut1j
+1tuum
+tuur4sla
+tuurs5taal
+tu1wa
+tu1é
+t1v
+tver3a
+tvero3v
+tvoi2
+t1w
+2twa
+twee3s
+twee3t
+twe4gi
+2twet
+twi2
+3t4wijf
+4twil
+t5wind
+2two
+1ty.
+1ty1n
+1typ
+ty1s2
+4t1z
+1té1
+1tè
+2t1-
+u1a2b
+u1ac
+ua1dr
+uae2
+u1af
+u1al
+u1an
+ua1na
+u1ar.
+ua4re.
+ua4res
+u1ars
+uar1t
+ua1sa
+uas2h
+ua3she
+uas1p
+u1at
+ua1tr
+uat2s
+u2b1ac
+ub1am
+u2b1ar
+ube4li
+ube4lo
+ub2lo
+ub1or
+ub1ro
+uca1
+u2cet
+u1che
+ucht3st
+ucle1
+u1co
+uc2t1a
+uc4tin
+uc4ton
+ud1ac
+ud1a2d
+u2d1a2m
+ud1ap
+ud1a2r
+udas1
+ud3eerl
+ud3e4ze
+ud3ond
+ud3oom
+udor1
+ud3ove
+ud1re
+ud1ro
+uds1a
+ud3s4me
+ud3smi
+uds1n
+uds1p
+ud3stan
+ud3ste
+ud3str
+ud1w
+ue1a
+u1e2c
+ue2du
+uees1
+u1ef
+u1ei
+u1el
+ue1ru
+ue1sa
+ue1tj
+u1ez
+u1fac
+uf1an
+u1fl
+u1fo
+u1fr
+uf1sk
+uft1h
+ug4dat
+ug4d3er
+ug4din
+ug2do
+ugd1s
+ug1ei
+uge4la
+uge4l3o
+ugen3ac
+ugen3s
+ugie1
+ug1l
+ug1o
+ug1ra
+ug1ri
+ug1ru
+ug3sce
+ugs3pa
+u1h
+u2i
+ui1a
+ui4daa
+ui4dac
+ui4dar
+ui4das
+uider3s
+ui2d1o
+uids3t
+ui1e
+uien1
+uie4re.
+uier3o
+uie4ru
+uif1l
+ui2f1r
+ui4g3aa
+uig1l
+ui2g1r
+ui2k1a
+uik1l
+ui4k3op
+uik1r
+uik1u
+uik1w
+uil3aa
+ui4l3em
+uilo2
+uil3og
+uil3oo
+2uim
+ui4m3ac
+ui2n1a2
+uin1d
+uin1g
+uino2
+uin3og
+uin1t
+ui2pl
+ui2p1o2
+uip1r
+uip1s
+uis1c
+ui2sl
+ui3slu
+uis1o
+uis1p
+uis4tac
+uis4th
+ui2t1a2
+ui4tet
+1uit1h
+3uitle
+1uitn
+uit1o
+ui2t1r
+uit1s
+4uits.
+uits4m
+u3j
+ujo1
+uk1ac
+uk1al
+uk1ap
+uk1as
+uk1au
+uken3s
+uk1j
+ukkers3
+uk1li
+uk1lo
+uk1n
+u2k1of
+u2k1on
+ukop2
+uk3ope
+u2k1or
+uk1r
+uk1sc
+uk1sl
+uk3sme
+uk3sne
+uk3spa
+uk3spl
+uk1t
+u1ku
+uk1we
+uk1wi
+u1la
+u2l1a2p
+uld3erk
+uld3ov
+ul2d1u
+u1le
+u2led
+ul1fa
+ul1fl
+ul1fo
+ul1fr
+ul1g
+u1li
+ul4kar
+ulk1l
+ul1oe
+ul1o2p
+u1los
+ulp3ac
+ul4pag
+ul2p1l
+ulp3on
+ul2p1r
+ul1sc
+ul1sl
+ul1so
+uls3te.
+ul2th
+ult1s
+ul1ui
+umana4
+um3e4di
+ume1s2
+1umh
+um1op
+umpi2
+um1pj
+um1s2
+um1ui
+1umz
+2un.
+2una
+un1ac
+un2ce
+un4ch3r
+un1do
+un1dr
+un4dra
+und1s
+u1ne
+u2ned
+unes1
+un4ge.
+un4geg
+un4gem
+un1gl
+un1gr
+uni4th
+1univ
+un1kl
+unk1s
+un1op
+u1nor
+uns2
+un4st3a
+unst3on
+un4st3r
+un4t3aa
+un2t1o2
+un4tri
+unt3sp
+unt3st
+un2t1u
+u1nu
+u3oden
+u1om1
+u1on
+u1oo
+uoot2
+uo1pa
+uo2pl
+uo1pr
+u1or
+uo1ru
+u1os
+uo1t
+u1ov
+u1pa
+u1pe
+upe1n
+uper3s
+u1pi
+up1j
+u1pl
+up1op
+u1pr
+up1st
+up4tro
+u1pu
+u1q
+ur3aan
+ur1ac
+ur3ada
+ur1af
+u1ral
+ur1ar
+uras1
+ura1t
+ur1au
+ur4cep
+ur1da
+ur1do
+ur1dr
+u1re
+u2rec
+ur3ech
+ur3een
+uree3s
+ur3eff
+ure1k
+u4r3elf
+u2rem
+ur3emb
+ur2en
+uren3o
+ure3st
+u4r3eta
+ur2fa
+ur1fl
+urf1s
+ur1gl
+u1ri
+ur3ijz
+u4r3ind
+u4r3int
+uri1o
+urk3ac
+ur1kl
+ur1kn
+urmana4
+u1rob
+u1roc
+u1ro1f2
+uro1l
+ur1on
+ur4ona
+u1ro1s
+u1rot
+ur3ove
+ur1ps
+ur4sco
+ur4scr
+ur4s3eli
+ur4sev
+ur3s4fe
+ur4s3laa
+urs3lage
+urs3li
+urs3take
+ur4ston
+ur4sui
+ur4t3a4g
+ur1tj
+urt3ond
+ur3to3v
+urt1r
+urt1s
+ur1ui
+u1ry
+us1ad
+us1ak
+us1a2m
+us1ap
+us1ar
+use1a
+use2c
+u2sed
+u5sen
+u2sep
+u2sew
+us1ho
+u1si
+usie1
+us2it
+us1j
+u2s1l
+us1n
+us1on
+us1or
+us1os
+us1p
+us4par
+ussie3ro
+ussi5te.
+u2sta
+ust3al
+us1te
+us4t3ei
+ust3oo
+us3tor
+us3tro
+us3tru
+ust3u4r
+ust3uu
+u1su
+us1ui
+u1taa
+ut3ach
+u1tad
+ut1af
+u1tan
+uta1p
+u1tat
+u1te
+u4t3ees
+u2t1em
+uter3k
+uter3o
+ute1s
+utfi4l
+ut1ho
+u4tind
+u1to
+ut3oog
+utoot4
+uto3ple
+uto3po
+uto1s
+uto1v
+ut3s4aa
+ut1s2c
+ut4s3eng
+ut1si
+ut3ske
+ut1sl
+ut1sn
+ut3spe
+ut3spl
+uts3po
+ut3stel
+ut3str
+ut1su
+u1tu1
+u4t5w
+u1ty
+uu2
+uum1
+uun1
+uur1a2
+uur1e2
+uur1i
+uur1k
+uur1o2
+uur3sti
+uus1
+uut1j
+u1v
+uve1n
+uver1
+uw3aan
+uw1ac
+uw1af
+u1wag
+uw1ak
+uw1al
+uw1am
+uw1ap
+uw1ar
+u2w1at
+uw1au
+u1we
+uw3een
+uwe4nen
+uwen3k
+u1wi
+uw3ijz
+u4wind
+u4w3ins
+uw1n
+uw1o2
+uw1r
+uw1u
+uy1
+u1z
+uze1t
+uzie4k
+uzig1
+u1è
+u1ï
+u1ü
+u2'
+u1-
+1va
+vaar4ta
+vaat1
+va3ce
+va1g
+va2k1i
+vak1l
+vak1s
+va3laa
+val3ap
+val4s3p
+val4s3tek
+va1lu
+van3ac
+van1d
+vang3o
+vang3r
+va3nop
+va2nu
+va1p
+var1s2
+va1s2o1
+vast3re
+vast3ri
+va1su
+va1ta
+vat1h
+vat1j
+va1tr
+2vb
+v1ch
+v1co
+veau1
+1veb
+1vee
+vee2g
+vee2l
+veel3e
+vee2r
+veer3i
+vee3sta
+vee1t
+vei1s2
+ve1k
+1vel
+vel3aan
+vel3ac
+ve3las
+veld3o
+vel4du
+ve4lim
+ve4lis
+vels3n
+ve4lui
+1vem
+3venaarde
+ve3nan
+1vend
+5vend.
+4venem
+ve5nen.
+ve3net
+ve1ni
+ven1k
+4venot
+ven3ov
+4venrui
+ven4sen
+ven4s3er
+ven4si
+vens3lo
+venso4
+vens3or
+ven4s3taak
+ven4stek
+vensu4
+ven4s3ur
+5vent
+1venz
+ve1o
+3veraarst
+ver3aas
+ver3a4d
+ver3af
+ver3a4g
+ver3am
+ver3and
+ver3as
+ver3at.
+ve4r3e4d
+ve4r3ee
+ver3eis
+3verend
+ve4r3ene
+ve4r3eng
+vere3nig.
+ve4r3enk
+ver3eri
+ve4r3es
+ve4r3e4t
+ve4reu
+ve4r3e4v
+ver3gl
+3verij
+ver3ijd
+ve4r3ijl
+ver3ijs
+ve4r3ijv
+ver3ijz
+ve4r3inn
+ver5k4
+ver1o
+ve3rom
+ver3sag
+ver3s4ass
+ver3si
+ver3sl
+ver3s4mac
+ver3s4me
+ver3sp
+ver3st
+ver5s4ta
+vert2
+3vert.
+ver1u
+ve1ry
+ve1sl
+ves1t
+vet3ac
+ve3tan
+vet3o4g
+vet3oo
+ve3tor
+ve4t3ra
+ve4t3ri
+vet1s4
+1vi
+vi1a
+vi1ch
+vid2
+vid3st
+vie4renh
+vie4renn
+vier3s
+vies3p
+viet2
+viet3j
+vi1eu
+vi1f
+vijf1
+viks1
+vil4t3j
+ving2
+vings3
+vi1no
+vi1o
+vis3an
+vi4set
+vi3sor
+vis3ot
+vis1p
+vi1to
+vi1tr
+v1j
+1vl
+vla1f
+v1lar
+vlei1
+vleis4
+vle4t3je.
+vlie4s
+vlot3ste
+v1lov
+vm2
+1vo.
+1voe
+voel4s3t
+voet3a
+voet3jes
+voe4t3r
+voet3sp
+1voi
+1vol
+vo3lan
+vo3lat
+volg3o
+vol4gra
+vo4l3ij
+vo4lop
+vo4lui
+von4det
+vond3sp
+von4d3u
+1voo
+voo3d
+voor3d
+vo1p
+1vor
+vo1ra
+vor4s3te.
+vo2s1
+1vot
+vo1ta
+1vou
+1vo'
+1vo-
+2v1p
+1vr
+vrij3k
+vrij3s
+2v1t
+1vu
+vue1
+vues4
+vu2l1i
+vuur1
+2v1v
+vy1
+vyme2
+2v'
+2v1-
+1wa.
+waad1
+wa2b1a
+1wade
+w1adm
+wa1do
+wa1dr
+w1adv
+wa1go
+wa1lu
+wan3da
+wang3s4
+wan1o
+wans2
+wan3sm
+wan3sp
+war2e
+wa3ren
+wa1ro
+war4s3t
+war3ta
+wart3j
+wart3r
+wa3shi
+wa2si
+wa2s1l
+wa2s1p
+1wass
+was3tr
+1wat
+wat1j
+wa1tr
+1way
+2waz
+2w1b
+wba2l1
+w1c
+2w1d
+w2dh
+wd3oom
+we2a
+we2ba
+we2b1l
+2w1e2c
+1wed
+we2d1i
+we4dre
+wee4gr
+week3r
+wee3lo
+weep3s
+weer3sp
+wee3sl
+wee3sp
+wees4t
+wee3to
+we2g1a
+weg1l
+weg1o
+we2g1r
+wegs2
+wei1s
+weka2
+wek1r
+wel3do
+we4l3ed
+we4l3ee
+4w3e4lem
+wel3ov
+wel1s
+we2m1a2
+we2m1i
+we2m1o
+wen3ac
+wene2
+wen3ei
+we4nem
+wen3enk
+wen4k3as
+wen1o2
+2w1enq
+wen5se
+wens3ten
+wen3tj
+we1o2
+wer2f1
+wer4k3a
+wer4k3l
+wer4k3o
+wer4kru
+wer4k3u4
+werk3w
+wer4p3a
+wer4pr
+wer2s
+wes3te
+west3o
+1wet.
+1wetg
+wet1h
+wet1j
+wet3sp
+wets3ta
+we2t1u
+2w1ex
+wezen4s3
+2w1f
+w1g
+w1h
+2whei
+whi2
+w3ho
+1wiel
+wie4l3a
+wig1s
+1wijd
+2wijg
+wijka4
+1wijs1
+1wijz
+wi2k1
+wind3r
+wings3
+1wink
+2w1inr
+1wins
+winst3aa
+win4st3r
+wip1
+wis1p
+1wiss
+1wit.
+wi2t1h
+wit1j
+wit1r
+wit1s
+1witt
+w1j
+w1k
+2w1l
+wl1g
+wl1s
+2w1m
+wn1ac
+w1ne
+wnes1
+wn1g
+w1ni
+w1no
+wn1sl
+wn1st
+w1ob
+woest3a
+woes3te
+wo2l
+wol1a
+wolf4s3
+wol1i
+woo2
+woon1
+woor4d3r
+w1op
+wor2c
+wor4g3eng
+wor4m3a
+wo1s2
+w1ov
+2w1p
+wree2
+w1ru
+2ws
+ws1a2
+w1sc
+ws1j
+w1sla
+ws1le
+w1slo
+w1slu
+ws1o
+w1s2om
+w3spec
+w3spel
+w1spi
+w1spl
+ws1pr
+wssi2
+w1sta
+w1ste
+w3s4tic
+w1sto
+w1str
+w1stu
+ws1ui
+w1sy
+2w1t
+wtes1
+wti2
+wtje3sp
+w1v
+wve2r
+w1w
+w1z
+wzee2
+2w1-
+xa1f2
+xa1g
+x1all
+xan1
+x1ap
+x1b
+x1c
+xcu1s
+xe1a
+xe1g
+xe1la
+xeno1
+xe1ro
+xer1s
+x1f
+x1g
+x1h
+xi1c
+xie2t
+xi1g
+xi1om
+xi1p
+xi2t1i
+xit1s
+x1k
+x1l
+x1m
+x1n
+xo1f
+xop2l
+xo1s2
+xo1t
+x1p
+x1q
+x1r
+x1s2
+x1t
+x2t1ak
+xtraat4
+xtu4re.
+xtu4res
+x2tv
+xu1e
+xus3
+x1v
+x1w
+xy1
+x1z
+x1-
+1ya.
+3yaal.
+y1ab
+y1ac
+y1ad
+y1af
+y1ag
+1yal
+yale1
+y1a2m
+yan1d
+y3ante
+y1ar
+yas1p
+y1au
+y1b
+yba2l1
+yber4t3
+ybi2
+y1c
+ycho1
+yco4pe
+ycot1
+y1d
+y1ed
+y1ee
+1yem
+y1en
+ye1o
+y1er.
+1yeri
+y1ers
+y1es1
+y1et
+y1f
+y1g
+yg2d
+y1h
+y1i
+y1j
+y1k
+yl1al
+y1lee
+y1len
+yle1s
+y1li
+y1lo
+ylo3l
+yl1s
+y1lu
+yma4des
+ymbi1
+ymi1s
+ymp1j
+y1na
+yn1d
+yn1g
+y1ni
+y1no
+yn1t
+y1nu
+yo1g2
+y1oo
+y1op
+y1or
+y1os
+yo1t
+y1ov
+y1o'
+y1pa
+y1pe
+y4pete
+y1pi
+y1pl
+y1po1
+y1pr
+yp1s
+y1ra
+y3re
+y1ri
+y1ro
+y1ru
+y1sa
+ysan1
+y1s2c
+ysce2
+yse3ra
+y1s2f
+y1s2h
+ysha2
+y1si
+ys1l
+y1s2o
+ys1t
+y1s2u
+y1sy
+y1t
+y2te.
+yten1
+y2tes
+y2to1f
+yto1p2
+y1u
+yu2r
+yure1
+y1v
+yve2
+y1w
+ywa2r
+y1z
+y1é
+y1è
+y1-
+y-2a
+1za
+zaad1
+zaal1
+zaar1
+zaat1
+zag3st
+za2ka
+za4ket
+za2k1l
+zak1s
+zak1u
+zan4d3a4
+zan4dr
+zand3s
+zang3s
+za1po
+za1ru
+za1s2
+2zb
+2z1c
+2z1d
+1ze
+ze1a
+zee1k
+zee4p3ac
+zee3r4o
+zeero3v
+zee1s4
+zee1t
+zeg4sl
+zei4la
+zei1s2
+ze1k
+zel3ac
+ze3lar
+zel3dr
+zel4fo
+ze1lo
+zem1s
+zena2
+zen3az
+zen4d3a
+zen3ei
+ze1ni
+ze4n3in
+zen1k
+zen1o2
+zen3sl
+zen3sn
+zen3sp
+zen1t
+ze1pi
+zer1g
+zer1k
+ze1ro
+zer2s
+zers3e
+zer3sn
+zer4st
+zes1
+zes2c
+ze2se
+ze2su
+zet1a
+zet1h
+ze2t1i
+ze4t3ra
+zet3st
+zeve4n3
+zeï1
+z1f
+z1g
+2z1h
+1zi
+zie4ki
+ziek3l
+zie4k3o
+ziek3s
+ziek3w
+ziel4s
+2ziep
+zie1t
+zi2g1a
+zi2j
+zij1k
+zij4na
+zij1p
+zij1s
+zik1w
+zine1
+zing4s3
+zin4k3l
+zin4si
+zin4sl
+zins3t
+zi1o
+zipi1
+zi1pr
+zi1s2k
+zi1s2l
+zite2
+zit1h
+zit1j
+zit3st
+zi2t1u2
+2z1k
+2z1l
+2z1m
+zme1
+1zo
+zo1al
+zoet3j
+zoets4
+zoet3ste
+zo1f
+zo1i
+zo1la
+zon3da
+zon3do
+zo2no
+zon3sf
+zo2nu
+zoog1
+zo1p
+zor4g3a
+zor4gr
+zot1h
+zo1tr
+zo1v
+2z1p
+zpa1
+z1r
+2z1s2
+zsce2
+z1t
+1zu
+zue1
+zui4dr
+zus1
+2z1v
+1z2w
+zwets3t
+1zy
+2zz
+z2z1or
+2z1-
+á2d
+á1m
+á1r
+à1-
+ä1h
+ä1s
+é1a
+é1b
+é1c
+é1d
+édoe2
+édoel3
+é1g
+é1h
+é1j
+é1k
+éki1
+é1l
+é1m
+é1o
+éom1
+é1p
+é1re
+ér1s
+é1ré
+é1s
+é1t
+é1u
+é1v
+é1w
+é1z
+é1-
+è1c
+è1d
+è1g
+è1h
+è1l
+è1m
+ème1
+è1n
+ène1
+è1r
+ère1
+ères4
+è1t
+èta1
+è1v
+ê1c
+ê1l
+ê1m
+ê1n
+ê1p
+ê1t
+ête1r
+ê1v
+ë2ca
+ë1che
+ë1co
+ëde1s
+ë2di
+ëe2
+ëen1
+ëf1
+ë1j
+ë1l
+ë1na
+ën1d
+ë1ne
+ë1ni
+ëns2
+ëntenvere5
+ën1th
+ën1tj
+ën2t1r
+ën1t2w
+ë1q
+ë1ra
+ë1re
+ë1ri
+ëro1
+ës1c
+ë1si
+ës1t
+ë1te
+ë4ticaa
+ë1to
+ëts1
+ë1ty
+ëu1r
+ëve1
+ë1vo
+ë1z
+ë2ze
+ï1c
+ï1d
+ïe2n1
+ï2g
+ïllu1
+ïm1
+ïn1a
+ïn1d
+ïndu1
+ïndus4
+ï1ne
+ï4nehon
+ïne1s
+ï3nitia
+ïn1s2
+ïn1un
+ï1nur
+ïo1
+ï1ro
+ïs1oo
+ïs1p
+ïs1t
+ï1t
+ïti1s
+ï1v
+ï1z
+2ï1-
+î1t
+ö1b
+2ö1g
+2ö1l
+2ö1m
+ö1pe1
+2ö1pl
+öri1
+ó1g
+ó1m
+ór1
+ó1t
+ó1v
+üm1
+ü1su
+ût1s2
+ño1
+3'n-roll.
+-1a2
+-aan1
+-1b
+-1c
+-1d
+-de2s
+-1e2
+-en1t
+-es1
+-eu1
+-1f2
+-1g2
+-1h
+-1i2
+2-i.
+-in1g
+-1j
+-1k
+-kana4
+-ko1p
+-1l
+-laat3ste
+-m2
+-mana4gem
+-3me
+-1n
+2-n.
+-ne2k1
+-niet3j
+-1o2
+-oe1
+-or1
+-1p
+-1q
+-1r
+-1s4
+2-s.
+-se1n
+-2sn
+-studi3o
+-3t2
+-1u2
+-ui3tjes
+-1v
+2-v.
+-ver1
+-1w
+-1z
+-zout3
+-1à
diff --git a/Master/texmf-dist/tex/context/sample/linden.tex b/Master/texmf-dist/tex/context/sample/linden.tex
new file mode 100644
index 00000000000..9aaccc5e93f
--- /dev/null
+++ b/Master/texmf-dist/tex/context/sample/linden.tex
@@ -0,0 +1,8 @@
+The warm water spills north and south through a series of ocean currents
+that mirror to some degree the cells in the atmosphere above the water.
+Like the atmospheric cells, for instance, these giant oceanic gears
+---called gyres--- fall unders the influence of the winds and the Coriolis
+effect and form loops that move water first away from the equator, then
+parallel, and then back to rejoin the equatorial currents. The familiar
+Gulf Stream is one of these gyres, and because of its unique characteristics
+it has particular salience to the fortunes of many civilizations.
diff --git a/Master/texmf-dist/tex/context/sample/montgomery.tex b/Master/texmf-dist/tex/context/sample/montgomery.tex
new file mode 100644
index 00000000000..a38357ea4ab
--- /dev/null
+++ b/Master/texmf-dist/tex/context/sample/montgomery.tex
@@ -0,0 +1,13 @@
+Making oil requires a specific series of geological accidents over
+inconceivable amounts of time. First, organic-rich sediment needs to
+be burried faster than it can decay. Then the stuff needs to get pushed
+miles down into the earth's crust to be cooked slowly. Burried too
+deep or cooked too fast and the organic molecules burn off;
+trapped too shallow or not for long enough and the muck never
+turns into oil. Finally, an impermeable layer needs to seal the
+oil in a porous layer of rock from which it can be recovered. Then
+somebody has to find it and get it out of the ground. It takes
+millions of years to produce a barrel of oil; we use millions of
+barrels a day. There is no question that we will run out of oil ---
+the only question is when.
+
diff --git a/Master/texmf-dist/tex/context/sample/sample.tex b/Master/texmf-dist/tex/context/sample/sample.tex
index 44ef8ec5dc4..f39c328ee63 100644
--- a/Master/texmf-dist/tex/context/sample/sample.tex
+++ b/Master/texmf-dist/tex/context/sample/sample.tex
@@ -21,7 +21,7 @@ used in testing bibliographic references and citations.
\NC ward.tex \NC Peter D. Ward \NC The Life and Death of Planet Earth \NC \NR
\NC zapf.tex \NC Hermann Zapf \NC About micro-typography and the hz-program, \endgraf
Electronic Publishing, vol. 6(3), \endgraf
- 283-–288 (September 1993) \NC \NR
+ 283-288 (September 1993) \NC \NR
\NC bryson.tex \NC Bill Bryson \NC A Short History of Nearly Everything, \endgraf
Random House, 2003 \NC \NR
\NC davis.tex \NC Kenneth C. Davis \NC Don't Know Much About History, \endgraf
@@ -32,7 +32,14 @@ used in testing bibliographic references and citations.
Revolutions of the Twentieth Century, \endgraf
Oxford University Press, 2001 \NC \NR
\NC hawking.tex \NC Steve W. Hawking \NC The Universe in a Nutshell, Bantam Books
- (Random House), 2001 \NC \NR
+ Random House, 2001 \NC \NR
+\NC linden.tex \NC Eugene Linden \NC The Winds of Change, Climate, Weather, and the
+ Destruction of Civilizations, \endgraf
+ Simon \& Schuster, 2006, p.106 \NC \NR
+\NC weisman.tex \NC Alan Weisman \NC The World Without Us, \endgraf
+ Thomas Dunne Books, 2007, p.160 \NC \NR
+\NC montgomery.tex \NC David R Montgomery \NC Dirt, The Erosion of Civilizations, \endgraf
+ University of California Press, 2007, p.199 \NC \NR
\stoptabulate
% Tufte: This quote will always produce hyphenated text, apart from the content,
@@ -47,6 +54,12 @@ used in testing bibliographic references and citations.
% quite visible inter-character spacing in a text that can be typeset quite well by \TeX.
% The Universe in a Nutshell: a beautiful designed book, (companion of A Short History
-% of Time)
+% of Time).
+
+% The World Without Us: A properly typeset, very readable book. Read it and you'll look at
+% the world around you differently (and a bit more freightened).
+
+% Dirt, The Erosion of Civilizations: one of those books that you buy immediately after
+% reading a few sentences. Also one of those books that every politician should read.
\stoptext
diff --git a/Master/texmf-dist/tex/context/sample/ward.tex b/Master/texmf-dist/tex/context/sample/ward.tex
index a95b90f5f66..f73b62a58fa 100644
--- a/Master/texmf-dist/tex/context/sample/ward.tex
+++ b/Master/texmf-dist/tex/context/sample/ward.tex
@@ -2,4 +2,4 @@ The Earth, as a habitat for animal life, is in old age and
has a fatal illness. Several, in fact. It would be happening
whether humans had ever evolved or not. But our presence is
like the effect of an old|-|age patient who smokes many packs
-of cigarettes per day |.| and we humans are the cigarettes. \ No newline at end of file
+of cigarettes per day |=| and we humans are the cigarettes.
diff --git a/Master/texmf-dist/tex/context/sample/weisman.tex b/Master/texmf-dist/tex/context/sample/weisman.tex
new file mode 100644
index 00000000000..7526d407a44
--- /dev/null
+++ b/Master/texmf-dist/tex/context/sample/weisman.tex
@@ -0,0 +1,5 @@
+Since the mid-1990s, humans have taken an unprecedented step in Earthly
+annals by introducing not just exotic flora or fauna from one ecosystem
+into another, but actually inserting exotic genes into the operating
+systems of individual plants and animals, where they're intended to do
+exactly the same thing: copy themselves, over and over.
diff --git a/Master/texmf-dist/tex/context/sample/zapf.tex b/Master/texmf-dist/tex/context/sample/zapf.tex
index f73835b1cca..4029ec6ce16 100644
--- a/Master/texmf-dist/tex/context/sample/zapf.tex
+++ b/Master/texmf-dist/tex/context/sample/zapf.tex
@@ -8,4 +8,4 @@ now, as there was in the old days, showing the differences
between good and bad typographic design. Many people are
just fascinated by their PC's tricks, and think that a
widely||praised program, called up on the screen, will make
-everything automatic from now on. \ No newline at end of file
+everything automatic from now on.
diff --git a/Master/texmf-dist/tex/context/user/cont-sys.rme b/Master/texmf-dist/tex/context/user/cont-sys.rme
index fff231619b5..335a7d98435 100644
--- a/Master/texmf-dist/tex/context/user/cont-sys.rme
+++ b/Master/texmf-dist/tex/context/user/cont-sys.rme
@@ -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/generic/context/ppchtex.noc b/Master/texmf-dist/tex/generic/context/ppchtex.noc
index 34ececff90d..3ab92d8f3ce 100644
--- a/Master/texmf-dist/tex/generic/context/ppchtex.noc
+++ b/Master/texmf-dist/tex/generic/context/ppchtex.noc
@@ -32,6 +32,7 @@
\input supp-mis.tex \let\writestatus\undefined
\input syst-gen.tex
+\input syst-fnt.tex
%D after which we can go on with:
@@ -206,4 +207,6 @@
\setupchemical[\c!resolution=\outputresolution]
\fi
+\let\unexpanded\normalunexpanded
+
\protect \endinput